github code-yeongyu/oh-my-openagent v3.17.10

4 hours ago

What's New in v3.17.10

Note on versioning: v3.17.7 through v3.17.9 were partial publishes during a Trusted Publishing rollout (a few platform packages couldn't ship while their npm-side trust config was still being put in place). v3.17.10 is the first complete release with all platform binaries shipped together. Please skip the in-between versions.

Smarter Fallback When Credits Run Out

When a provider returns "insufficient balance", "no credits", or "forbidden", the runtime now treats it the same as quota exhaustion and automatically falls back to the next configured model. You no longer get hard failures the moment one of your accounts runs dry — the agent keeps working with a different provider. (#3519)

This applies to both your main session and any background tasks spawned during the run.

Background Tasks Now Show Their Retry History

Background tasks that recovered from a transient failure now render a retry timeline with links to each retry session. If a task succeeded only after 2-3 attempts, you can see exactly when each retry happened and what session it ran in — much easier to diagnose flaky models or providers.

Sync task() calls also replay session registration after runtime errors, so retried tasks no longer get orphaned.

Day-1 Support for GPT-5.5

The new claude-opus-4-7 and gpt-5.5 models now have native deep-category prompts tuned to their behaviour. Delegating to category="deep" automatically uses the right system prompt.

Faster Compaction, Faster Context Window Math

Four small but cumulative perf wins:

  • Hashline edit uses write-metadata line counts instead of re-reading files (fewer disk hits per edit)
  • Compaction reuses message update parts when the tail has no text (less work on every prompt)
  • Context window usage is now cached per session (no recomputation across hooks)
  • Background agent indexes tasks by parent session (faster lookups when many tasks fan out)

If you've felt the agent get a tiny bit snappier on long sessions, this is why.

Plugin Auto-Updater No Longer Reads the Wrong package.json

When oh-my-opencode runs from a flat-install directory (e.g. some Claude Code plugin sandboxes), the auto-update checker was reading a sibling package.json and reporting bogus versions. It now prefers the loaded module's own package.json, so version checks and update prompts are accurate. (#3718)

Behind the Scenes — npm Trusted Publishing

The release pipeline migrated from long-lived npm tokens to OIDC trusted publishing (OpenSSF standard). Every version is now published with a short-lived, workflow-scoped credential, with provenance attestations signed by sigstore. No user-facing change, but means future releases are no longer at risk of token-expiry outages — a problem that caused the v3.17.7-v3.17.9 partial publishes during this rollout.

A new preflight-trust job verifies all 24 platform packages have a trusted publisher configured before the version is bumped. If any package is missing trust config, the workflow fails fast with a list of npm.com URLs to fix — preventing future partial publishes.


Minor Compatibility and Stability Release

This release carries compatibility-facing behavior changes and operational hardening. Read the summary below before upgrading or publishing.

  • Rename transition updates across package detection, plugin/config compatibility, and install surfaces.
  • Task and tool behavior updates, including delegate-task contract and runtime registration behavior.
  • Install and publish workflow hardening, including safer release sequencing and package/install fixes.

Commit Summary

  • 9a61c60 fix(ci): treat npm OIDC exchange 201 as success in preflight
  • ab5216f feat(ci): add preflight-trust gate before version bump
  • 017d48f @yizhifengye has signed the CLA in #3731
  • fd85dad fix(ci): strip _authToken from .npmrc so OIDC takes precedence
  • 48fc7bd fix(ci): switch npm publish to OIDC trusted publishing
  • 216283e @aaronkyriesenbach has signed the CLA in #3727
  • 002297b Merge pull request #3718 from ismetanin/fix/cached-version-per-plugin-sandbox
  • 5291ee7 fix(auto-update-checker): prefer loaded module's package.json over flat-install candidates
  • d65bc87 feat(agents): add gpt-5.5 native deep category prompt
  • 766eedd Merge pull request #3706 from unclok/fix/retry-recovery-and-observability
  • 05a15f7 Merge branch 'dev' into fix/retry-recovery-and-observability
  • ea07f28 Merge pull request #3556 from MoerAI/fix/fallback-credit-exhaustion
  • 6850cb6 Merge branch 'dev' into fix/fallback-credit-exhaustion
  • 7adb725 Merge remote-tracking branch 'origin/dev' into fix/retry-recovery-and-observability
  • b8652db @deopa0402 has signed the CLA in #3713
  • 483e11a @unclok has signed the CLA in #3706
  • 0dd455e fix(delegate-task): ignore stale sync session errors
  • 1856657 fix(model-fallback): clone session fallback chains
  • 2237c1a fix(background-agent): guard stale launch errors and retry links
  • 27fb2d5 test(plugin): clean up event handler test helpers
  • 078e496 fix(delegate-task): replay sync retry session registration
  • fbaeb03 fix(todo-continuation): avoid duplicate progress reset
  • ebcd6ed perf(hashline): use write metadata line counts
  • 24201ea perf(background-agent): index tasks by parent session
  • eb722aa perf(compaction): reuse message update parts for no-text tails
  • ece8fd4 perf(shared): cache context window usage per session
  • 3fc9e6b Merge remote-tracking branch 'origin/dev' into opencode/mighty-wolf
  • 79054ea feat(background-task): render retry timelines and links
  • 25548f2 fix(model-fallback): retry forbidden provider errors
  • 613e4a6 fix(delegate-task): retry sync tasks after runtime session errors
  • a4968a3 feat(background-task): track retry attempts across sessions
  • cc3cca7 fix(model-fallback): expose session fallback chains to background tasks
  • 328df08 fix(test): update provider-matrix tests to expect fallback on quota exhaustion
  • 5949300 fix(error-classifier): match insufficient balance/funds as quota_exceeded
  • 034744c fix(model-error-classifier): retry forbidden provider errors
  • fbf130e fix(test): update integration tests to expect fallback on quota exhaustion
  • 7488c52 fix(runtime-fallback): trigger fallback on quota/credit exhaustion (fixes #3519)

Thank you to 4 community contributors:

  • @MoerAI:
    • fix(runtime-fallback): trigger fallback on quota/credit exhaustion (fixes #3519)
    • fix(test): update integration tests to expect fallback on quota exhaustion
    • fix(error-classifier): match insufficient balance/funds as quota_exceeded
    • fix(test): update provider-matrix tests to expect fallback on quota exhaustion
  • @unclok:
    • fix(model-error-classifier): retry forbidden provider errors
    • fix(model-fallback): expose session fallback chains to background tasks
    • feat(background-task): track retry attempts across sessions
    • fix(delegate-task): retry sync tasks after runtime session errors
    • fix(model-fallback): retry forbidden provider errors
    • feat(background-task): render retry timelines and links
    • Merge remote-tracking branch 'origin/dev' into opencode/mighty-wolf
    • fix(delegate-task): replay sync retry session registration
    • test(plugin): clean up event handler test helpers
    • fix(background-agent): guard stale launch errors and retry links
    • fix(model-fallback): clone session fallback chains
    • fix(delegate-task): ignore stale sync session errors
    • Merge remote-tracking branch 'origin/dev' into fix/retry-recovery-and-observability
  • @ismetanin:
    • fix(auto-update-checker): prefer loaded module's package.json over flat-install candidates
  • @acamq:
    • Merge pull request #3718 from ismetanin/fix/cached-version-per-plugin-sandbox

Don't miss a new oh-my-openagent release

NewReleases is sending notifications on new releases.