github code-yeongyu/oh-my-openagent v4.5.0

latest release: v4.5.1
6 hours ago

v4.5.0 — Publish Safety & Internal Refactor

This release hardens runtime safety (fallback loops, parent-wake stalls, publish payload) and lands the long-running prompts-core refactor that splits every agent/mode prompt into versioned markdown.

🛡️ Publish Safety Hardening

Three guard rails that close production-impact pre-publish gaps:

  • runtime-fallback no longer trusts isRetryable: true on 4xx errors. If a provider mis-tagged a 401/403/404 as retryable, every configured fallback model would burn in an infinite loop. The signal is now gated to absent status codes, 5xx, the configured retry_on_errors list, and {408, 425, 429}.
  • parent-wake escapes a second stuck state. When the assistant's text stream died mid-message with no pending tool call, parent-wake deferred forever and background-agent completions never reached the parent. A bounded escape path now dispatches after toolCallDeferMaxMs.
  • npm payload blocks internal-only assets. Nested .npmignore per published dot-directory + a new script/package-layout-exclusion.test.ts permanent guard. Drop a __draft-foo/SKILL.md into .opencode/skills/ and CI fails before it ships to npm.

🔁 Ralph-Loop Liveness

Three independent stuck-state escapes for ralph-loop:

  • Oracle dispatch wait is now time-bounded (30-minute hard ceiling); previously a crashed/OOM-killed oracle session would freeze the loop forever.
  • Loop auto-stops when the latest assistant turn made zero model progress (both token counts at zero AND no assistant content).
  • The double-fire race fix no longer ignores in-flight oracle dispatches that never complete.

📞 Background-Agent Delivery

Four fixes converge on one outcome — completion alerts get through:

  • Debounced active parent wake flushes (no more thundering herd on burst completion).
  • Completion wakes deliver during active parent turns instead of being silently dropped.
  • Dispatched parent wake failures are isolated so one failure does not cascade.
  • Atlas subagents retry on provider usage-limit errors (no more dead-end runs).

👥 Team-Mode UX

  • Leaders now wake on unread mailbox messages (#4464). Idle leads no longer sleep through worker pings.
  • Model overrides preserved across team-mode boundaries.
  • Lead closes teams on its own initiative — no more lingering teams burning session / mailbox / member-turn budget.

🧠 Prompts-Core Migration (50+ commits, zero user-facing API change)

Every agent and mode prompt now lives in versioned markdown under packages/prompts-core/:

  • Atlas: 5 variants (default / GPT / Gemini / Kimi / Opus-4.7)
  • Prometheus: full prompt + variant table
  • Ultrawork: 4 variants (default / GPT / Gemini / planner)
  • Mode prompts: search / analyze / team / hyperplan

Companion dist-bundle test scans the built bundle for unique prompt signatures; a future Bun upgrade that silently regresses markdown inlining will fail CI loudly instead of breaking installs at first agent load.

🔧 Continuation + Validators

  • fix(continuation): resolves registered agent names before dispatching prompts (#4417) — fixes the empty-string bug when display names like "Atlas - Plan Executor" were used.
  • fix(prompt-async-gate): retry object-form path on runtime type errors (#4417).
  • fix(thinking-block-validator): avoid duplicate thinking prepends (#4374) — kills the dual-thinking-streams race.

🩺 Doctor + Help JSON Schemas

oh-my-opencode doctor, sandbox, status, and acp now expose JSON schemas for their help output — enables shell completion, structured CLI introspection, and --help consistency.

🏗️ Internal Package Layering

Workspace split into 9 published packages: utils / model-core / prompts-core / rules-engine / agents-md-core / ast-grep-core / comment-checker-core / hashline-core / boulder-state. Internal cleanup — no breaking changes to the plugin API.

🌐 Web

  • Marketing site canonical domain migrated to omo.dev.
  • README translations refreshed for ja / ko / ru / zh-cn.

🙏 Reviewer Note

This release was gated by a publish-debate-vortex hyperultradebate — 6 hostile category-member agents (quick / unspecified-low / unspecified-high / deep / ultrabrain / artistry) cross-attacked the 103-commit changeset across 3 rounds. The 3 must-fix blockers it identified — runtime-fallback boolean guard, parent-wake stuck escape, npm payload exclusion — all landed in this release.


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-system default behavior alignment so omitted configuration behaves consistently across runtime paths.
  • Install and publish workflow hardening, including safer release sequencing and package/install fixes.

Commit Summary

  • 52ba125 Merge branch 'fix/pre-publish-blockers-v4.5.0'
  • 8e28e29 fix(package): block internal-only assets from publish payload
  • 5c0cc0d @Hungdoan565 has signed the CLA in #4492
  • ec552bc fix(ralph-loop): stop loop when latest assistant turn made no model progress
  • 9810bad docs(publish-skill): pin Jobdori bot ID in Discord release commands
  • 91aa915 @fcmfcm01 has signed the CLA in #4482
  • be2ed2b Merge pull request #4479 from code-yeongyu/fix-4470-momus-cancels-main
  • 3b421c6 fix(background-agent): isolate dispatched parent wake failures
  • b03e08b Merge pull request #4478 from code-yeongyu/fix-4164-bg-reminder-timing
  • e1fde71 Merge pull request #4477 from code-yeongyu/fix-4374-dual-thinking-streams
  • ec7ce51 fix(background-agent): debounce active parent wake flushes
  • 6a56144 fix(background-agent): deliver completion wakes during active parent turns
  • e443e86 fix(thinking-block-validator): avoid duplicate thinking prepends
  • 037d017 Merge pull request #4476 from code-yeongyu/fix-4464-team-leader-wake
  • 3e09910 @2wndrhs has signed the CLA in #4475
  • 58025f9 fix(team-mode): wake leaders on unread mailbox messages (#4464)
  • 759b566 Merge pull request #4474 from code-yeongyu/fix-4441-omo-evidence-ignore
  • 3e11594 chore(repo): untrack .omo/evidence and .omo/notepads per .gitignore
  • dc05074 @hanakokoizumi has signed the CLA in #4467
  • 939f2b8 @SoShymKing has signed the CLA in #4469
  • 03eb9ff Merge pull request #4465 from code-yeongyu/fix-4417-atlas-path-and-start-work
  • 28efc4e fix(continuation): resolve registered agent name before dispatching prompt (#4417)
  • a5cee76 fix(prompt-async-gate): retry object-form path on runtime type error (#4417)
  • c25c338 Merge pull request #4454 from code-yeongyu/fix-4448-npm-pack-dot-dirs
  • 94d9d93 Merge pull request #4453 from code-yeongyu/fix-4419-atlas-subagent-fallback
  • 0d0be43 Merge pull request #4452 from code-yeongyu/fix-4449-tool-execute-after-stall
  • 9c56bf2 test(script): typecheck package layout regression
  • 72119b3 fix(package): ship dot-directory command assets
  • f57532c fix(tool-execute-after): narrow metadata warning tools
  • dc845a8 chore(web): migrate canonical domain to omo.dev
  • 6551f38 fix(background-agent): retry Atlas subagents on usage limits
  • 767f5a6 fix(model-core): retry OpenAI usage_limit_reached fallbacks
  • 6343feb Merge pull request #4450 from code-yeongyu/fix-4447-subagent-task-deny
  • 4a68db0 fix(tool-execute-after): gate metadata recovery warnings
  • 75d1ff4 fix(plugin-handlers): deny task for read-only subagents
  • 9be97de Merge pull request #4435 from code-yeongyu/fix/issue-4429-team-mode-model-override
  • 9fd52cb feat(help): #689 acp help JSON schema
  • eed88e4 feat(help): #689 acp help JSON schema
  • bab9caa feat(help): #688 sandbox help JSON schema
  • 1fdb88a feat(help): #688 sandbox help JSON schema
  • 2c6c42f feat(help): #687 status help JSON schema
  • 36e394a feat(help): #687 status help JSON schema
  • a73e4db feat(help): #686 doctor help JSON schema
  • 21713dc fix(agents): preserve model overrides with team mode
  • 776da68 feat(help): #686 doctor help JSON schema
  • ce4b11b fix(cli): add explicit helpOption configuration for consistent help-flag ordering
  • 3e0a975 test(dist-bundle): assert inlined prompt content survives bundling
  • 14b3523 fix(ralph-loop): time-bound oracle dispatch wait to prevent stall
  • 69c955f fix(parent-wake): bound assistant-text defer to escape stuck sessions
  • f05e0cb fix(runtime-fallback): gate retryable signal on status-code allowlist
  • 222adeb fix(runtime-fallback): honor retryable signal
  • de7f1d8 Merge pull request #4400 from code-yeongyu/refactor/prompts-core-oracle-cleanup
  • 8f09c02 docs: scrub remaining references to migrated files
  • d18cadb test(ultrawork): add byte-exact characterization test
  • e0b37b4 test(prometheus): add byte-exact characterization test
  • 9d20425 docs(keyword-detector): rewrite AGENTS.md for prompts-core migration
  • 87e28d2 docs(prometheus): rewrite AGENTS.md for thin-loader structure
  • 640d7f7 Merge pull request #4396 from code-yeongyu/fix/session-scoped-internal-wake
  • 3d0b4c4 fix(parent-wake): block unfinished assistant wakes
  • 2ea7c49 Merge pull request #4390 from code-yeongyu/refactor/prometheus-to-prompts-core
  • 1f32b88 refactor(prometheus): remove migrated section TypeScript files
  • 8fc429a refactor(prometheus): load prompt variants from prompts-core
  • 3806d93 feat(prompts-core): wire Prometheus variant table
  • fa0500e feat(prompts-core): add Prometheus prompt markdown variants
  • 4749eab Merge pull request #4389 from code-yeongyu/refactor/mode-prompts-to-prompts-core
  • 803f030 Merge remote-tracking branch 'origin/dev' into refactor/mode-prompts-to-prompts-core
  • 528f083 Merge pull request #4388 from code-yeongyu/refactor/atlas-to-prompts-core
  • 63ef72d docs(agents): document prompts-core mode prompts
  • 80361c0 chore(prompts-core): wire markdown prompt packaging
  • 2c8e2da refactor(mode-prompts): migrate hyperplan prompt
  • e79baf5 refactor(mode-prompts): migrate team prompt
  • 3b7f51d refactor(mode-prompts): migrate analyze prompt
  • 5cefbdb refactor(mode-prompts): migrate search prompt
  • c187dba test(keyword-detector): capture mode prompt baselines
  • 8451ecd docs(atlas): document prompts-core prompt ownership
  • 582c768 refactor(atlas): remove migrated TypeScript prompts
  • 4975c35 refactor(atlas): load prompt variants from prompts-core
  • 96a9365 build(prompts-core): bundle markdown prompt variants
  • 91351d7 feat(prompts-core): support bundled prompt sources
  • b77fed2 feat(prompts-core): add Atlas Opus 4.7 prompt markdown
  • 2adcec8 feat(prompts-core): add Atlas Kimi prompt markdown
  • d5995b3 feat(prompts-core): add Atlas Gemini prompt markdown
  • 1923761 feat(prompts-core): add Atlas GPT prompt markdown
  • 565d099 feat(prompts-core): add Atlas default prompt markdown
  • a92e25a test(atlas): add prompt byte preservation baselines
  • 6644524 Merge pull request #4386 from code-yeongyu/refactor/ultrawork-to-prompts-core
  • 79beeee docs: document ultrawork prompt markdown location
  • d217efc build(prompts): inline markdown prompt imports
  • e772c46 refactor(ultrawork): move planner prompt to prompts-core
  • e51acd0 refactor(ultrawork): move gemini prompt to prompts-core
  • a818bbd refactor(ultrawork): move gpt prompt to prompts-core
  • 9c366cc refactor(ultrawork): move default prompt to prompts-core
  • 39b3cbc chore(ultrawork): capture prompt baseline hashes
  • 46ad6bf Merge pull request #4385 from code-yeongyu/refactor/prompts-core-foundation
  • 436c618 fix(prompts-core): block prompt path traversal
  • 74d5f70 chore(prompts-core): wire package typecheck
  • da0fa83 test(prompts-core): audit opencode coupling
  • c44a6bd feat(prompts-core): add prompt loader
  • 6301bcf feat(prompts-core): add variant resolver
  • 4338ddb feat(prompts-core): add package skeleton
  • 87de056 refactor(model-core): move model family detectors
  • e1e9f34 Merge pull request #4382 from code-yeongyu/feat/ultrawork-prompt-tdd-evidence-tightening
  • d073bf1 feat(ultrawork): enforce TDD, scenario contract, durable notepad, reviewer gate
  • 39a549a Merge pull request #4381 from code-yeongyu/fix/team-mode-closure-prompts
  • 5f1fb0c fix(team-mode): make lead close teams on its own initiative
  • a4dcbb6 docs(publish): use Jobdori bot for releases
  • 1473f93 Merge pull request #4380 from code-yeongyu/fix/ralph-loop-oracle-double-fire-race
  • 9a1dd75 fix(ralph-loop): skip handleFailedVerification when oracle dispatch is in flight (#4256)
  • 3523dab @niStee has signed the CLA in #4378

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

NewReleases is sending notifications on new releases.