Releases: steipete/oracle
Releases · steipete/oracle
0.12.0
Added
- CLI: add
--perf-trace/--perf-trace-path/ORACLE_PERF_TRACEstartup timing traces and lazy-load heavy browser/provider/runtime modules to reduce time-to-first-output. - API: add
--allow-partial/--partial okfor multi-model runs so advisory panels can exit 0 when at least one model succeeds, while still listing saved outputs and a JSON output manifest before failures. - API: classify common provider failures in multi-model summaries and metadata, including auth, expired keys, quota, rate limits, and unavailable models, with secret-safe recovery hints.
- API: add root
--preflightprovider readiness checks and packed CLI help smoke coverage so stale installed help is caught before release. - Sessions: print and persist a compact lifecycle block showing foreground/background execution, detach state, model count, and reattach command.
- Docs: add
oracle docs check/pnpm docs:checkto catch documented flags that are missing from Commander help metadata. - Docs: document provider preflight, route diagnostics, partial multi-model recovery, and output manifest workflows in README/provider docs.
- API: add
--provider openai/--no-azureto force first-party OpenAI when Azure env/config is present, addoracle doctor --providersand--routeredacted route diagnostics, keep provider-qualified model IDs on OpenRouter/proxy routes instead of accidental Azure/native routes, and fail early when Azure routing lacks a deployment. - Browser/MCP: add opt-in ZIP formatting for bundled browser uploads with
--browser-bundle-format zip/browserBundleFormat: "zip", preserving individual file names in one ChatGPT attachment.
Fixed
- CLI: make missing-prompt help exit nonzero, reject
--dry-run --renderlike--dry-run --render-markdown, and terminate promptly with code 130 on SIGINT. - API: parse duration-style
--timeoutvalues such as10m, derive the HTTP transport timeout and stale-session cutoff from explicit overall timeouts, and warn when an explicit shorter--http-timeoutcan fail first. - Browser: select thinking effort from the currently checked ChatGPT model row so Pro Extended runs do not fall back to the Thinking row's effort control.
- Browser: record ChatGPT model-selection evidence in session metadata and CLI output so Pro browser runs show the selected model proof (#195). Thanks @pdurlej!
- Browser: target ChatGPT's renamed bare Pro picker row for Pro browser runs while keeping older Pro CLI aliases mapped to the current browser target (#190, fixes #182). Thanks @jungdaesuh!
- Browser: recognize current ChatGPT attachment chips without treating stale page-level chips as ready, and keep the longer send-button wait scoped to attachment uploads (#192). Thanks @li-aolong!
0.11.1
Changed
- Dependencies: update Google GenAI, OpenAI, Zod, Puppeteer, and developer tooling packages. (#187)
Fixed
- Browser: allow Pro model selection in ChatGPT Temporary Chat URLs and skip archive attempts for temporary conversations. (#185) — thanks @pdurlej.
- Browser: recognize ChatGPT's renamed GPT-5.5 Pro/Thinking model labels and always apply requested thinking time instead of assuming Pro implies Extended. (#183, fixes #182) — thanks @broady.
- MCP: reject unknown
consultfields instead of silently ignoring misspelled tool-call arguments. (#184) — thanks @pdurlej.
Docs
- Website: highlight code blocks in the generated docs site.
CI
- Install dependencies before building the docs site and update the Homebrew tap after releases.
0.11.0
Added
- Browser/MCP: add non-destructive ChatGPT Project Sources management (
oracle project-sources list|add, MCPproject_sources) so Developer Mode workflows can share explicit project context through Sources. Addresses #131 and builds on #132 by @vgorlovi. - Browser: add repeatable
--browser-follow-upprompts and MCPbrowserFollowUpsfor multi-turn ChatGPT browser consults in one conversation. (#170) — thanks @pdurlej. - Browser: add live ChatGPT tab inspection,
oracle status --browser-tabs, browser session harvest/live-tail commands, and--browser-tab <ref>to reuse an existing ChatGPT tab by current tab, target id, URL, or title substring. (#126) — thanks @NathanSkene. - Browser: add
--browser-research deep/ MCPbrowserResearchMode: "deep"for ChatGPT Deep Research browser runs, including progress monitoring, reattach recovery, and iframe report capture. (#151) — thanks @pdurlej. - Browser: save durable browser session artifacts, including transcripts, Deep Research reports, and ChatGPT-generated image files when downloadable image URLs are present. (#169) — thanks @pdurlej.
- Browser: add
--browser-archive/ MCPbrowserArchiveto archive successful one-shot ChatGPT browser runs after local artifacts are saved. (#178) — thanks @pdurlej. - Browser: add
--browser-attach-runningto reuse a local already-running signed-in Chrome through Chrome's local remote-debugging toggle. Oracle opens a dedicated tab, stores attach metadata for reattach, and leaves the browser itself untouched. (#119) — thanks @dedene. - MCP: add the
chatgpt-pro-heavyconsult preset, MCP dry-runs, browser model strategy passthrough, andoracle bridge claude-config --local-browserfor Claude Code + local ChatGPT Pro browser consults. (#149) — thanks @pdurlej. - Browser: coordinate concurrent ChatGPT browser runs that share one manual-login profile with a tab lease registry,
--browser-max-concurrent-tabs, stale lease cleanup, and shared Chrome discovery. (#150) — thanks @pdurlej. - Browser: print a browser control plan before ChatGPT runs and dry-runs, and clean up leftover blank tabs after completed manual-profile runs. (#179) — thanks @pdurlej.
- Browser: document multi-turn consult guardrails and make browser dry-runs explicit that Oracle only sends caller-provided follow-up prompts. (#180) — thanks @pdurlej.
Docs
- Browser: document the new attach-running workflow and add a manual smoke test for the direct attach path.
- Website: add the generated askoracle.dev docs site, social preview asset, and GitHub Pages deployment workflow.
Changed
- Browser: emit
--heartbeatstatus while waiting for ChatGPT browser responses, including safe Thinking/Reasoning sidecar liveness metadata without logging reasoning text. (#148) — thanks @pdurlej.
Fixed
- Browser/MCP: harden ChatGPT Pro browser consults with louder GPT-5.5 Pro selection validation, resolved MCP dry-run details, assistant-timeout diagnostics, incomplete-capture reattach metadata, and clean Pro Extended live-run metadata. (#177) — thanks @pdurlej.
- Browser: clear stale ChatGPT composer drafts before initial browser submissions and ignore model-picker thinking-effort controls while scanning model rows. (#176) — thanks @oirehT.
- Browser: keep the completed conversation tab open when
--browser-keep-browseris set sooracle status --browser-tabs, harvest, and--browser-tab currentcan inspect/reuse it. - Browser: retry Chrome remote-debugging approval
403responses for--browser-attach-runningand report the actionable approval/toggle guidance instead of a raw websocket error. - Browser: fail fast when ChatGPT shows an account security block during Deep Research, instead of waiting until the research timeout.
- Browser: strengthen live upload verification so smoke tests catch cases where ChatGPT accepts a file chip but cannot read the uploaded content.
- Bridge: keep generated Codex/Claude MCP config snippets clean on stdout so redirecting
oracle bridge claude-config --local-browser > .mcp.jsonproduces valid JSON. - MCP: clarify
consultengine defaults and add ChatGPT browser-mode recovery guidance to missing GPT API-key errors. (#172) — thanks @pdurlej.
0.10.0
Changed
- OpenAI: switch the default model to
gpt-5.5-pro, add explicitgpt-5.5support, and roll older Pro CLI aliases (gpt-5.1-pro,gpt-5.2-pro) forward to the current Pro API target. - Browser: target ChatGPT
GPT-5.5 Proby default for Pro browser runs and recognize current GPT-5.5 picker labels such asPro ExtendedandThinking Heavy. - Dependencies: update the npm dependency set.
Fixed
- Gemini web: prefer the latest non-empty streaming response chunk so
gemini-3-proandgemini-3.1-probrowser runs do not report(no text output)when the first chunk is an empty placeholder. (#153, #154) — thanks @manhtruong03. - Browser: keep ChatGPT cookie sync to the minimal auth/Cloudflare set by default, preventing oversized request headers from breaking browser runs after login.
- Browser: recover missing project/workspace URLs by resetting the tab before falling back to the base ChatGPT URL.
- Browser: recognize uploaded attachments from current ChatGPT file-chip labels, wait for a clickable send button, and continue when ChatGPT omits sent-message attachment UI after upload has already completed.
- Browser: reattach completed Pro sessions by anchoring response capture to the matching prompt turn instead of filtering out already-visible answers.
- CLI: avoid loading
clipboardyduring startup and add/usr/sbinbefore lazy clipboard loading on Intel macOS, preventingspawnSync sysctl ENOENTcrashes from transitive architecture detection. (#129) - Browser: track ChatGPT's composer rewrite by matching the new
__composer-pillmodel button and selecting thinking effort from the model menu's per-row effort control, with bilingual label matching and old-chip fallback. (#146) — thanks @SyntaxSmith. - Browser: open isolated local browser tabs directly on the configured ChatGPT URL instead of starting at
about:blankand navigating later. (#139) — thanks @betamod. - MCP: prevent the stdio server from auto-starting a second time when imported by an
oracle-mcpbin shim. (#137) — thanks @SyntaxSmith. - Gemini web: honor resolved manual-login browser profile directories when launching Gemini browser sessions. (#124) — thanks @blackopsrepl.
- Browser: avoid Linux hidden-home temp dirs for ephemeral Chrome profiles and redact inline cookie values in low-level debug config logs. (#136) — thanks @lodekeeper.
- Browser: fail attachment submissions before send instead of falling back to Enter after upload/send-readiness timeouts. (#115, #116) — thanks @HeMuling.
- Browser: stabilize localized ChatGPT model selection when the header stays generic by waiting on composer-footer model state changes. (#118) — thanks @dedene.
- CLI: accept
-p -/--prompt -to read the prompt from stdin. (#117) — thanks @frankekn. - Browser: preserve prompt-too-large fallback recovery after a dead-composer retry. (#117) — thanks @frankekn.
- Browser: guard assistant response capture against stale turns from a different ChatGPT conversation. (#117) — thanks @frankekn.
- Browser: verify sent attachments against the expected user turn instead of stale earlier turns. (#117) — thanks @frankekn.
0.9.0
Changed
- OpenAI: switch the default Pro target from
gpt-5.2-protogpt-5.4-pro, add explicitgpt-5.4support, rollgpt-5.1-proandgpt-5.2-proforward togpt-5.4-pro, keep provider-qualified custom ids intact, and map browser default Pro selection to ChatGPTGPT-5.4 Pro(#107, thanks @jameskraus).
Fixed
- Gemini web: add Deep Think DOM automation for browser/manual-login runs, keep Deep Think browser-only, and honor configured browser timeouts/profile reuse semantics. (#97) — thanks @kanlanc.
- Browser: leave headful Chrome/profile state running when a Cloudflare anti-bot challenge interrupts browser mode, and record reuse guidance in the saved session metadata. (#111) — thanks @WinnCook.
- Browser: keep manual-login sessions reattachable when Chrome disconnects with the DevTools "Inspected target navigated or closed" error. (#110) — thanks @WinnCook.
- Gemini API: add explicit
gemini-3.1-proalias support, map it to Google's preview model id, and keep it API-only so browser runs do not silently target the wrong Gemini web model. (#100, #101) — thanks @ninjaa. - API: route Gemini and Claude through chat/completions-compatible proxies when
--base-urltargets OpenRouter or another OpenAI-style endpoint, and keep explicit Claude base URLs from being overwritten by env defaults. (#95) — thanks @thesobercoder. - Azure: route Responses API runs through Azure's
/openai/v1endpoint and honor--azure-deploymentas the dispatched model name. (#92) — thanks @yellowgolfball. - CLI: make the per-file
--filesize guard configurable viaORACLE_MAX_FILE_SIZE_BYTESormaxFileSizeBytesin~/.oracle/config.json, and persist that limit for restarts. (#76) - CLI: scope
--followupto the OpenAI/Azure Responses path so Gemini, Claude, and custom--base-urladapters fail fast instead of silently starting a fresh run. (#105) — thanks @cheulyop. - Gemini web: include upload MIME metadata so image attachments keep working for image analysis, with regression coverage for image and non-image payloads. (#104) — thanks @DK625.
- Gemini web: include Chrome/sweet-cookie warnings in missing-cookie failures so app-bound-cookie and SQLite/BigInt extraction problems surface actionable diagnostics instead of a generic auth-cookie error.
- MCP: let
consultinherit browser defaults from~/.oracle/config.jsonwhile still honoring explicit tool-call overrides. (#109) — thanks @doodaaatimmy-creator. - Dependencies: bump
@steipete/sweet-cookieto0.2.0, picking up the Node 22 Chrome-cookie read fix that castsexpires_utcsafely instead of tripping the SQLite BigInt overflow path.
0.8.6
Added
- Sessions: add
oracle restart <id>to re-run a stored session as a new session (clones options) (#84, thanks @enki). - Browser: optional periodic auto-reattach attempts after assistant timeouts (
--browser-auto-reattach-delay/--browser-auto-reattach-interval/--browser-auto-reattach-timeout). Original PR #87 by Felix Huber (@felix-huber) — thank you!
Fixed
- Browser: fix memory leaks in browser mode and model resolver cache (#77, thanks @bindscha).
- Browser: fix markdown fallback extractor TDZ crash in browser mode (#90, thanks @julianknutsen).
- CLI: honor
--no-waitfor Commander--no-flags (fixes restart wait preference) (#91).
Changed
- Deps: update dependencies.
0.8.5
Added
- Bridge: add the bridge workflow + MCP browser controls for remote ChatGPT sessions. Original PR #42 by Kyle McCleary (@kmccleary3301) — thank you!
- CLI: add
--background/--no-background,--http-timeout,--zombie-timeout, and--zombie-last-activityto support long-running API sessions.
Fixed
- CLI: restore legacy
--[no-]notify,--[no-]notify-sound, and--[no-]backgroundflags as hidden aliases (Commander no longer accepts[no-]innew Option()). - Sessions: zombie detection now respects explicit timeouts and can optionally use last log activity to avoid false “zombie” status on long runs.
- Browser: fall back to the default DevTools target if an isolated tab fails, and keep the run tab open when
--keep-browseris set. - Browser: refresh long assistant responses without clobbering captured Markdown.
Changed
- Config: remove legacy
remote.host/remote.tokenand top-levelremoteHost/remoteToken; usebrowser.remoteHost/browser.remoteTokenor env vars.
0.8.4
Changed
- Deps: update zod to
4.3.5. - Deps: add
qsas a direct dependency (avoids Dependabot pnpm transitive-update failures).
Fixed
- Browser: fix attachment uploads in the current ChatGPT composer (avoid duplicate uploads; avoid image-only inputs for non-image files). Original PR #60 by Alex Naidis (@TheCrazyLex) — thank you!
0.8.3
Added
- Config: allow
browser.forceEnglishLocaleto opt into--lang/--accept-langfor browser runs. - Browser: add
--browser-cookie-wait/browser.cookieSyncWaitMsto wait once and retry cookie sync. Original PR #55 by bheemreddy-samsara — thank you!
Fixed
- Browser: avoid stray attachment removal clicks while still detecting stale chips, and allow completed uploads even if send stays disabled. Original PR #56 by Alex Naidis (@TheCrazyLex) — thank you!
- Browser: dismiss blocking modals when a custom ChatGPT project URL is missing, and harden attachment uploads (force input/change events; retry via DataTransfer; treat “file selected” as insufficient unless the composer shows attachment UI).
- Browser: prefer a trusted (CDP) click on the composer “+” button so attachment uploads work even when ChatGPT ignores synthetic clicks.
0.8.1
Added
- Config: allow
browser.thinkingTime,browser.manualLogin, andbrowser.manualLoginProfileDirdefaults in~/.oracle/config.json.
Fixed
- Browser: thinking-time chip selection now recognizes "Pro" labeled composer pills. Original PR #54 by Alex Naidis (@TheCrazyLex) — thank you!
- CLI: disable OSC progress output when running under Codex (
CODEX_MANAGED_BY_NPM=1) to avoid spinner noise.
Tests
- Stabilize OSC progress detection tests when
CODEX_MANAGED_BY_NPM=1is set.