7145 Commits

Author SHA1 Message Date
YeonGyu-Kim 6a561446ec fix(background-agent): deliver completion wakes during active parent turns
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-26 01:30:17 +09:00
YeonGyu-Kim e443e86d61 fix(thinking-block-validator): avoid duplicate thinking prepends
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-26 01:29:23 +09:00
YeonGyu-Kim 037d017af3 Merge pull request #4476 from code-yeongyu/fix-4464-team-leader-wake
fix(team-mode): wake leader session on every member completion message (#4464)
2026-05-26 01:18:53 +09:00
github-actions[bot] 3e099108cc @2wndrhs has signed the CLA in code-yeongyu/oh-my-openagent#4475 2026-05-25 16:18:37 +00:00
YeonGyu-Kim 58025f9ba4 fix(team-mode): wake leaders on unread mailbox messages (#4464)
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-26 00:59:38 +09:00
YeonGyu-Kim 759b566808 Merge pull request #4474 from code-yeongyu/fix-4441-omo-evidence-ignore
chore(repo): untrack .omo/evidence and .omo/notepads per .gitignore (#4441)
2026-05-26 00:52:21 +09:00
YeonGyu-Kim 3e11594883 chore(repo): untrack .omo/evidence and .omo/notepads per .gitignore
These directories are AI-agent workspace artifacts intended to be local-only
per .gitignore rules:

  .omo/*
  !.omo/rules/
  !.omo/rules/**

They were accidentally tracked across several refactor commits. Files remain
on disk; only the index entries are removed. Future writes are now properly
ignored.

Closes #4441
2026-05-26 00:50:07 +09:00
github-actions[bot] dc05074532 @hanakokoizumi has signed the CLA in code-yeongyu/oh-my-openagent#4467 2026-05-25 15:40:24 +00:00
github-actions[bot] 939f2b8b43 @SoShymKing has signed the CLA in code-yeongyu/oh-my-openagent#4469 2026-05-25 11:42:13 +00:00
soshymking aa97341cc9 Add support for OpenCode 1.15 DB 2026-05-25 20:12:22 +09:00
YeonGyu-Kim 03eb9fff57 Merge pull request #4465 from code-yeongyu/fix-4417-atlas-path-and-start-work
fix(atlas): repair task() path crash and start-work agent resolution (#4417)
2026-05-25 17:51:57 +09:00
YeonGyu-Kim 28efc4e81f fix(continuation): resolve registered agent name before dispatching prompt (#4417)
/start-work was unresponsive under Atlas because ralph-loop and todo-continuation-enforcer normalized the inherited agent to a config key (e.g. 'atlas') while OpenCode only accepts the registered display name (e.g. 'Atlas (Plan Executor)'), producing 'Agent not found' on dispatch.

Prefer resolveRegisteredAgentName(agent) and fall back to normalizeAgentForPromptKey only when no registration exists, mirroring the start-work hook's resolution chain.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-25 17:48:32 +09:00
YeonGyu-Kim a5cee76961 fix(prompt-async-gate): retry object-form path on runtime type error (#4417)
Atlas task() with run_in_background=false crashed with 'The "path" property must be of type string, got object' from Node's path.isAbsolute validation upstream of the SDK.

All callers (sync-prompt-sender, boulder-continuation-injector, idle-event, session-route, model-suggestion-retry) already route through dispatchInternalPrompt, so centralizing the compatibility shim in prompt-async-gate.ts covers every Bug 1 site without touching individual hooks.

On TypeError matching the object-path signature, retry once with path collapsed to its id string. Types broaden PromptSessionPath to string | { id }.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-25 17:48:14 +09:00
YeonGyu-Kim c25c3383bd Merge pull request #4454 from code-yeongyu/fix-4448-npm-pack-dot-dirs
fix(package): ship .opencode/ and .agents/ assets for slash-command discovery (#4448)
2026-05-25 17:44:10 +09:00
YeonGyu-Kim 94d9d93212 Merge pull request #4453 from code-yeongyu/fix-4419-atlas-subagent-fallback
fix(background-agent): atlas subagent fallback retry on retryable model errors (#4419)
2026-05-25 17:33:03 +09:00
YeonGyu-Kim 0d0be4352d Merge pull request #4452 from code-yeongyu/fix-4449-tool-execute-after-stall
fix(tool-execute-after): prevent session stall on metadata recovery failure (#4449)
2026-05-25 17:27:54 +09:00
YeonGyu-Kim 9c56bf2273 test(script): typecheck package layout regression
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-25 17:19:33 +09:00
YeonGyu-Kim 72119b3aa3 fix(package): ship dot-directory command assets
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-25 17:18:59 +09:00
YeonGyu-Kim f57532cbdb fix(tool-execute-after): narrow metadata warning tools
Remove non-store tool names from the metadata recovery warning gate so call_omo_agent and dead aliases fail open without warning spam. Keep warnings for tools backed by the recovery store: background_output, edit, and task.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-25 17:17:11 +09:00
YeonGyu-Kim dc845a8808 chore(web): migrate canonical domain to omo.dev
Switch the production worker route and all hardcoded URLs from
ohmyopenagent.com to omo.dev. Six legacy domains (ohmyopenagent.com,
ohmyopencode.org, ulw.dev, ultrawork.ai, ultrawork.dev,
ultrawork.engineer) are configured to permanently (301) redirect to
omo.dev via Cloudflare Page Rules set up out-of-band via flarectl
and the CF API.

- wrangler.toml: bind worker to omo.dev + www.omo.dev only
- middleware.ts: primaryHost to omo.dev, www to apex redirect retained
- layout.tsx: primarySiteUrl + gaTrackedDomain to omo.dev (GA still G-S0QJFKT46Q)
- sitemap.ts, robots.ts: BASE_URL to https://omo.dev
- npm-downloads/route.ts: usage comment URL refreshed
- web-deploy.yml: environment URL to https://omo.dev
- manifesto.md: domain reality-check line lists omo.dev as canonical
- README*.md (5 langs): npm-downloads badge endpoint to omo.dev
2026-05-25 17:15:16 +09:00
YeonGyu-Kim 6551f3893c fix(background-agent): retry Atlas subagents on usage limits
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-25 17:09:52 +09:00
YeonGyu-Kim 767f5a6148 fix(model-core): retry OpenAI usage_limit_reached fallbacks
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-25 17:09:52 +09:00
YeonGyu-Kim 6343feb608 Merge pull request #4450 from code-yeongyu/fix-4447-subagent-task-deny
fix(plugin-handlers): explicit task deny for read-only subagents to prevent UI freeze (#4447)
2026-05-25 17:06:51 +09:00
YeonGyu-Kim 4a68db029d fix(tool-execute-after): gate metadata recovery warnings
Root cause: tool.execute.after attempted metadata recovery for every tool, including built-in tools that never publish recoverable OMO metadata. On Windows this produced repeated recovery warnings across read/bash/glob/grep/todowrite/lsp/apply_patch and amplified stalled-session diagnostics, while metadata-linked tools still needed diagnostic visibility when their linkage was stale.

Limit the warning to tools expected to publish recoverable metadata and keep all other built-in tools fail-open after missing metadata.

Fixes #4449

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-25 17:06:22 +09:00
YeonGyu-Kim 75d1ff4c87 fix(plugin-handlers): deny task for read-only subagents
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-25 16:55:21 +09:00
YeonGyu-Kim 9be97de641 Merge pull request #4435 from code-yeongyu/fix/issue-4429-team-mode-model-override
fix(agents): preserve user model overrides when team_mode enabled
2026-05-25 11:18:18 +09:00
YeonGyu-Kim 9fd52cb609 feat(help): #689 acp help JSON schema
feat(help): #689 acp help JSON schema
2026-05-25 11:13:08 +09:00
YeonGyu-Kim eed88e4181 feat(help): #689 acp help JSON schema 2026-05-25 11:11:52 +09:00
YeonGyu-Kim bab9caa6ce feat(help): #688 sandbox help JSON schema
feat(help): #688 sandbox help JSON schema
2026-05-25 11:11:26 +09:00
YeonGyu-Kim 1fdb88a355 feat(help): #688 sandbox help JSON schema 2026-05-25 11:09:56 +09:00
YeonGyu-Kim 2c6c42f852 feat(help): #687 status help JSON schema
feat(help): #687 status help JSON schema
2026-05-25 11:09:33 +09:00
YeonGyu-Kim 36e394a53d feat(help): #687 status help JSON schema 2026-05-25 11:08:15 +09:00
YeonGyu-Kim a73e4db1a8 feat(help): #686 doctor help JSON schema
feat(help): #686 doctor help JSON schema
2026-05-25 11:07:11 +09:00
YeonGyu-Kim 21713dcd86 fix(agents): preserve model overrides with team mode
Filter host config agent aliases with the same protected builtin-name rules used for external agent sources so stale display-name entries cannot replace resolved user-configured models when team mode is enabled.

Fixes #4429

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-25 11:06:37 +09:00
YeonGyu-Kim 776da68e8b feat(help): #686 doctor help JSON schema 2026-05-25 11:05:41 +09:00
YeonGyu-Kim ce4b11b0d3 fix(cli): add explicit helpOption configuration for consistent help-flag ordering
Add explicit .helpOption('-h, --help') call to the Commander program configuration so the help option is explicitly defined rather than relying on Commander.js lazy initialization. Add corresponding test to pin the behavior.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-25 11:00:37 +09:00
YeonGyu-Kim 3e0a975d1f test(dist-bundle): assert inlined prompt content survives bundling
After the prompts-core migration the TypeScript prompt sources were
deleted; the only mechanism delivering markdown prompts to npm users
is bun build inlining via bunfig.toml [loader] ".md" = "text"
and import attributes. bun test runs from src/index.ts, not from
dist/index.js, so a future Bun upgrade that silently regresses
markdown inlining would pass source tests green while the published
bundle is broken with Cannot find module ../prompts/atlas/default.md
at first agent load.

Add a smoke test that scans the built dist/index.js for unique
signature strings from each migrated prompt file (15 signatures:
3 ultrawork + 5 atlas + 3 prometheus + 4 mode prompts). Skips
gracefully if dist/index.js does not exist (local bun test before
build). Wire into the existing CI Verify dist bundle tests step in
.github/workflows/ci.yml so the regression catches in CI build.

Closes pre-publish blocker V1 and V33.
2026-05-25 01:33:06 +09:00
YeonGyu-Kim 14b3523af6 fix(ralph-loop): time-bound oracle dispatch wait to prevent stall
The double-fire race fix (#4256) had handlePendingVerification return
early when verification_attempt_id was set but verification_session_id
was not, since the oracle dispatch is still in flight. That guard
introduced a permanent-stall failure mode: if tool-execute-after never
runs (oracle session hangs, crashes, OOM-killed, or tmux killed
externally), verification_session_id stays undefined forever and the
ralph-loop never escapes the pending-verification state.

Track verification_attempt_started_at as a state field, clear it on
restart/clear/setVerificationSessionID, and fall through to
handleFailedVerification when the attempt has been pending past
STUCK_VERIFICATION_TIMEOUT_MS (30 minutes). Legacy persisted states
without the timestamp continue to defer (no timeout to evaluate),
matching pre-fix behavior for that edge case.

Closes pre-publish blocker V25.
2026-05-25 01:32:49 +09:00
YeonGyu-Kim 69c955f61f fix(parent-wake): bound assistant-text defer to escape stuck sessions
shouldDeferParentWakeForSessionHistory previously had only one escape
path from the defer state: stale pending tool call. If the assistant
had unfinished text but no pending tool call (session crashed
mid-stream, model errored after partial text, network died), the
escape never fired and parent-wake deferred forever. Background-agent
completions never woke the parent.

Add a second escape: when the assistant text blocks but no tool wait
is pending, dispatch the wake after toolCallDeferMaxMs anyway. The
prompt-async-gate still defends if the assistant text turns out to be
live; we just stop deferring indefinitely.

Closes pre-publish blocker V11.
2026-05-25 01:32:35 +09:00
YeonGyu-Kim f05e0cbe99 fix(runtime-fallback): gate retryable signal on status-code allowlist
extractRetryableSignal returns the raw isRetryable hint from up to 5
nested AI SDK error paths. isRetryableError previously trusted any
true result blindly, which would burn every configured fallback model
in an infinite loop if a provider mis-tagged a 401, 403, or other
non-transient 4xx as retryable.

Honor the signal only when the status code is absent, in the configured
retry_on_errors list, in 5xx, or in {408, 425, 429}. Reject the signal
when the status code is a non-transient 4xx and log the rejection so
operators can debug provider mis-classifications.

Closes pre-publish blocker V8.
2026-05-25 01:32:23 +09:00
YeonGyu-Kim 222adeb606 fix(runtime-fallback): honor retryable signal 2026-05-25 00:03:29 +09:00
YeonGyu-Kim de7f1d887d Merge pull request #4400 from code-yeongyu/refactor/prompts-core-oracle-cleanup
refactor(prompts-core): address Oracle caveats — stale AGENTS.md docs + byte-exact characterization tests
2026-05-24 19:22:49 +09:00
YeonGyu-Kim 8f09c02cc0 docs: scrub remaining references to migrated files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 19:16:03 +09:00
YeonGyu-Kim d18cadb1ab test(ultrawork): add byte-exact characterization test
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 19:16:03 +09:00
YeonGyu-Kim e0b37b46d5 test(prometheus): add byte-exact characterization test
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 19:16:03 +09:00
YeonGyu-Kim 9d204250ee docs(keyword-detector): rewrite AGENTS.md for prompts-core migration
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 19:16:02 +09:00
YeonGyu-Kim 87e28d2607 docs(prometheus): rewrite AGENTS.md for thin-loader structure
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 19:16:02 +09:00
YeonGyu-Kim 640d7f7b9d Merge pull request #4396 from code-yeongyu/fix/session-scoped-internal-wake
fix(parent-wake): block unfinished assistant wakes
2026-05-24 19:05:04 +09:00
YeonGyu-Kim 3d0b4c4aac fix(parent-wake): block unfinished assistant wakes 2026-05-24 19:02:13 +09:00
YeonGyu-Kim 2ea7c49208 Merge pull request #4390 from code-yeongyu/refactor/prometheus-to-prompts-core
refactor(prometheus): extract agent prompt sections to packages/prompts-core (PR4)
2026-05-24 18:47:07 +09:00