Added
- Browser sessions now persist Chrome reattach hints (port/host/target/url) and log them inline;
oracle session <id>can reconnect to a live tab, harvest the assistant turn, and mark the run completed even if the original controller died. Includes a reconnection helper and regression tests for runtime hint capture and reattach. - OpenRouter support:
OPENROUTER_API_KEYauto-routes API runs (when provider keys are missing or the base URL points at OpenRouter), accepts arbitrary model ids (minimax/minimax-m2,z-ai/glm-4.6, etc.), mixes with built-in models in--models, passes attribution headers (OPENROUTER_REFERER/OPENROUTER_TITLE), and stores per-model logs with safe slugs. pnpm test:browserruns a Chrome DevTools connectivity check plus headless browser smokes across GPT-5.1 / GPT-5.1-Pro / 5.1 Instant.--browser-manual-loginskips cookie copy, reuses a persistent automation profile (~/.oracle/browser-profileby default), and waits for manual ChatGPT login—handy on Windows where app-bound cookies can’t be decrypted; works as an opt-in on macOS/Linux too.- Manual-login browser sessions can reuse an already-running automation Chrome when remote debugging is enabled; point Oracle at it via
--remote-chrome <host:port>to avoid relaunching/locks. --browser-port(alias--browser-debug-port, envORACLE_BROWSER_PORT) pins the DevTools port so WSL/Windows users can open a single firewall rule; includes a lightweightpnpm test:browserDevTools reachability check.
Changed
- All API errors now surface as transport reason
api-errorwith the raw message and are shown in status/render/TUI; verbose mode still prints transport details. Multi-model callback order test stabilized. - Default system prompt no longer asks models to announce when the search tool was used.
- API now surfaces a clear error when
gpt-5.1-proisn’t available yet (suggests usinggpt-5-pro). - Dependency refresh: openai 6.9.1, clipboardy 5, Vitest 4.0.13 (+ coverage), Biome 2.3.7, puppeteer-core 24.31.0, devtools-protocol 0.0.1548823; pinned zod-to-json-schema to 3.24.1 to stay compatible with zod 3.x.
- Windows cookie reader now accepts any
v**AES-GCM prefix (v10/v11/v20) to stay forward compatible. - On Windows, cookie sync is disabled by default and manual-login is forced; use inline cookies or
--browser-manual-login(default) instead of profile-based cookie copy.
Fixed
- CLI/TUI now print the intro banner only once; forced TUI launches (
ORACLE_FORCE_TUIor no args in a TTY) no longer show duplicate 🧿 header lines. - TUI session list cleans up separators, removing the
__disabled__ (Disabled)placeholder and(Disabled)tag on the header row. oracle session --renderno longer drops answers when the model filter is empty or per-model logs are missing (common for browser runs); stored session output is rendered again.- Browser uploads no longer time out in ChatGPT project workspaces: file input/send-button selectors are broader, upload completion falls back to attached files when buttons are missing, and we added tests to guard the new selectors.
- Live tests now call out that
gpt-5.1must be reached via api.openai.com; OpenRouter’s Responses API endpoint doesn’t exposeopenai/gpt-5.1, so runs will fail there withmodel_not_founduntil they add it. - Browser reattach flow survives controller loss: the controller PID is persisted with the Chrome port/URL so
oracle session <id>can reconnect, harvest the assistant turn, and mark the run completed even if the original process died. - Live multi-model smokes force first-party API bases and soft-skip HTML/transport errors (e.g., proxy 404 pages) so missing provider access doesn’t fail the suite.
- Gemini live coverage confirmed with
gemini-2.5-flash-liteafter refreshingGEMINI_API_KEY; multi-model live now passes end-to-end when first-party keys are present. - Token usage formatter again emits two-decimal abbreviations for thousands (e.g., 4.25k) to match CLI output and tests.