Commit Graph

6817 Commits

Author SHA1 Message Date
YeonGyu-Kim 96a9365044 build(prompts-core): bundle markdown prompt variants
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 18:29:05 +09:00
YeonGyu-Kim 91351d73fd feat(prompts-core): support bundled prompt sources
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 18:28:57 +09:00
YeonGyu-Kim b77fed28ef feat(prompts-core): add Atlas Opus 4.7 prompt markdown
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 18:28:49 +09:00
YeonGyu-Kim 2adcec8f2d feat(prompts-core): add Atlas Kimi prompt markdown
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 18:28:49 +09:00
YeonGyu-Kim d5995b385a feat(prompts-core): add Atlas Gemini prompt markdown
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 18:28:49 +09:00
YeonGyu-Kim 1923761166 feat(prompts-core): add Atlas GPT prompt markdown
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 18:28:49 +09:00
YeonGyu-Kim 565d099495 feat(prompts-core): add Atlas default prompt markdown
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 18:28:49 +09:00
YeonGyu-Kim a92e25a196 test(atlas): add prompt byte preservation baselines
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 18:28:35 +09:00
YeonGyu-Kim 46ad6bfdb4 Merge pull request #4385 from code-yeongyu/refactor/prompts-core-foundation
refactor(prompts-core): add packages/prompts-core foundation with model-family detector relocation
2026-05-24 17:55:32 +09:00
YeonGyu-Kim 436c618706 fix(prompts-core): block prompt path traversal
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 17:50:18 +09:00
YeonGyu-Kim 74d5f7018d chore(prompts-core): wire package typecheck
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 17:28:09 +09:00
YeonGyu-Kim da0fa83f6c test(prompts-core): audit opencode coupling
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 17:28:09 +09:00
YeonGyu-Kim c44a6bdb2a feat(prompts-core): add prompt loader
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 17:28:09 +09:00
YeonGyu-Kim 6301bcf059 feat(prompts-core): add variant resolver
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 17:17:08 +09:00
YeonGyu-Kim 4338ddb898 feat(prompts-core): add package skeleton
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 17:16:49 +09:00
YeonGyu-Kim 87de056308 refactor(model-core): move model family detectors
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-24 17:16:40 +09:00
YeonGyu-Kim e1e9f348f0 Merge pull request #4382 from code-yeongyu/feat/ultrawork-prompt-tdd-evidence-tightening
feat(ultrawork): enforce TDD, scenario contract, durable notepad, reviewer gate
2026-05-24 15:55:43 +09:00
YeonGyu-Kim d073bf1bdf feat(ultrawork): enforce TDD, scenario contract, durable notepad, reviewer gate
Closes five gaps in the ultrawork prompt versus codex-plugins' parallel
directive, applied to all three model variants (default/Claude, GPT, Gemini)
with prompt-engineering entropy gate (each addition encodes a distinct
binding boolean, not narrative reinforcement):

1. TDD-MANDATORY (was conditional "when test infrastructure exists"):
   every production change follows RED -> GREEN -> SURFACE. Failing test
   first, capture assertion msg, smallest change to flip green, exercise
   real surface, capture artifact. Exemption whitelist: formatting /
   comment-only / version bump / rename-only, each must be justified
   in writing; unjustified exemption = rejection.

2. Scenario contract (was free-form Test Plan Template): require 3+
   scenarios upfront covering happy path, edge (boundary / empty /
   malformed / concurrent), adjacent-surface regression. Each scenario
   binds a binary pass condition, a real-surface artifact source, and
   a test file + test id written test-first.

3. RED->GREEN evidence capture (was "all tests pass"): every scenario
   requires TWO captured artifacts -- RED assertion msg before the
   change AND GREEN assertion msg after -- alongside the real-surface
   artifact (tmux / curl / browser / Playwright / computer-use /
   CLI stdout / parsed config / DB diff). Tests are the floor (always
   required); surface artifact is the ceiling (also required).

4. Durable notepad: mktemp -t ulw-*.md with append-only sections
   (Plan, Scenarios, Now, Todo, Findings, Learnings). Survives context
   loss; resume by re-reading.

5. Reviewer gate: trigger when user said strictly / rigorously /
   "deeply", or task touches 3+ files / 20+ turns / 30+ min, or it is
   refactor / migration / perf / security work. Reviewer verdict is
   binding ("looks good but..." = rejection). Loop until unconditional
   approval.

Plus: TODO format upgraded from vague "track every step" to atomic
`path: <action> for <scenario-id> -- verify by <check>` with a GOOD
test-first / impl pair example and a BAD list including
"production code before its failing test".

Per-variant adaptation:
- default.ts (Claude): full structured sections.
- gpt.ts (GPT-5.x): outcome-first prose, shorter prose per gpt-5.5 guide.
- gemini.ts: explicit enforcement framing + anti-optimism checkpoint
  upgraded with a TDD-violation question (#7).

Verified by:
- bun test src/hooks/keyword-detector/ (119 pass / 0 fail).
- lsp_diagnostics clean on all three files.
- Module-load smoke test confirms each exported message string parses
  and contains the new section anchors (TDD MANDATORY, SCENARIO
  CONTRACT, DURABLE NOTEPAD, REVIEWER GATE).

Char deltas (directive body only):
- default 13646 -> 17144 (+26%)
- gpt     6740  -> 9215  (+37%, was the leanest start)
- gemini  14196 -> 16136 (+14%)

Existing tests only assert presence of "ULTRAWORK MODE ENABLED!" which
is preserved verbatim in every variant.
2026-05-24 15:48:59 +09:00
YeonGyu-Kim 39a549a3df Merge pull request #4381 from code-yeongyu/fix/team-mode-closure-prompts
fix(team-mode): make lead close teams on its own initiative
2026-05-24 15:37:28 +09:00
YeonGyu-Kim 5f1fb0c52a fix(team-mode): make lead close teams on its own initiative
The lead currently leaves teams alive after the task list drains because
none of the prompt surfaces tell it WHEN to close or HOW. omx-style
'self-closing' behavior was missing for four reasons (diagnosed via
prompt-engineering A/B/C: wrong / misframed / missing):

1. builtin team-mode skill 'Lifecycle' (B+C): 'phase ends / shape
   outgrown' is qualitative, so the model maps it to 'wait for user'.
   Step 6 jumped to team_delete without the request/approve pair the
   tool contract requires. Replaced with a 'Closure Contract' (a
   computable predicate over team_task_list + team_status) and an
   explicit 'Closure Sequence' (request -> approve -> delete, with
   force=true reserved for unrecoverable paths only).

2. TEAM_MESSAGE keyword injection (C): spent 100%% of its one-shot
   budget on routing ('do not substitute delegate_task'), 0%% on
   closure. Added the same closure rule in compressed form. Kept the
   'NEVER substitute with delegate_task' literal that
   keyword-detector/index.test.ts depends on.

3. team-mode-status-injector body (C): the only per-session injection
   for team mode had no closure obligation. Replaced the optional
   'load the team-mode skill ... otherwise use the team_* tools'
   sentence with a 'Closure invariant' clause that ties the check to
   every team_task_update.

4. member-guidance Wrap-up (A+B): step 3 said 'so the lead can decide
   whether to request shutdown', but team_shutdown_request is
   lead-only - members cannot initiate it. Step ordering also placed
   the completion message before team_task_update, so the lead's
   closable check would see stale data. Reordered to
   task_update -> check task_list for new work -> if nothing left,
   send a single 'closure-ready' message and idle. Test assertion
   updated to match the new accurate contract.

Also: stripped Korean alternation from TEAM_PATTERN per directive
('절대로 코드 내에 한국어 적지 마라'). Pattern is now
/\\bteam[\\s_-]?mode\\b/i. Removed 4 Korean test cases
(2 positive triggers + 2 false-positive guards) that the pattern no
longer needs to defend, and updated the keyword-detector AGENTS.md
row.

Net: -71 lines across prompt surfaces. The Closure Contract is the
only addition; everything else tightened.

Tests: 428/428 pass across src/features/team-mode/,
src/features/builtin-skills/, src/hooks/keyword-detector/,
src/hooks/team-mode-status-injector/, src/hooks/team-mailbox-injector/,
src/hooks/team-tool-gating/, src/hooks/team-session-events/.
LSP: no errors introduced (one pre-existing error in
keyword-detector/index.test.ts confirmed pre-existing on dev).
2026-05-24 15:21:24 +09:00
YeonGyu-Kim a4dcbb6bef docs(publish): use Jobdori bot for releases 2026-05-24 15:08:15 +09:00
YeonGyu-Kim 1473f93f5f Merge pull request #4380 from code-yeongyu/fix/ralph-loop-oracle-double-fire-race
fix(ralph-loop): skip premature verification failure when oracle dispatch is in flight
2026-05-24 15:03:58 +09:00
YeonGyu-Kim cdc937548f chore: update bun.lock 2026-05-24 15:01:58 +09:00
YeonGyu-Kim 9a1dd75608 fix(ralph-loop): skip handleFailedVerification when oracle dispatch is in flight (#4256)
When verification_pending is true and the agent has dispatched an Oracle
verification (verification_attempt_id is set), session.idle events that
arrive before tool-execute-after stores the Oracle session ID
(verification_session_id still undefined) caused handlePendingVerification
to fall through to handleFailedVerification. This injected a duplicate
'verification failed' continuation prompt, spawning a second Oracle.

The fix adds a guard in handlePendingVerification: when
verification_attempt_id is set but verification_session_id is not, Oracle
dispatch is in flight and the handler returns early instead of declaring
failure. The pending wake will retry on the next session.idle.

Regression test added in given/when/then style proving the race sequence:
  1. ULW loop detects DONE, enters verification_pending
  2. Oracle dispatch stamps verification_attempt_id (tool-execute-before)
  3. Second session.idle fires before tool-execute-after stores session ID
  4. Handler must NOT call handleFailedVerification

RED (before fix): 2 prompt injections (duplicate Oracle)
GREEN (after fix): 1 prompt injection (correct)

Fixes #4256
Fixes #4019
2026-05-24 15:00:26 +09:00
github-actions[bot] 3523dab0b1 @niStee has signed the CLA in code-yeongyu/oh-my-openagent#4378 2026-05-24 00:13:45 +00:00
github-actions[bot] 41c98e5109 release: v4.4.0 2026-05-23 18:29:42 +00:00
github-actions[bot] 20d67be496 @EvangelosMoschou has signed the CLA in code-yeongyu/oh-my-openagent#4357 2026-05-23 17:19:43 +00:00
YeonGyu-Kim 5e2f12fd3e Merge pull request #4348 from Yeachan-Heo/omc-team/you-are-one-of-5-parallel-work/worker-4
fix: trust user-configured multimodal-looker model for vision (#4209)
2026-05-24 02:11:31 +09:00
YeonGyu-Kim 0c14c4738b Merge pull request #4350 from Yeachan-Heo/omc-team/you-are-one-of-5-parallel-work/worker-3
fix: TUI subagent session entry stuck spinning + unclickable (#4252)
2026-05-24 02:11:06 +09:00
YeonGyu-Kim f390d365c3 Merge pull request #4352 from Yeachan-Heo/fix/atlas-config-model-override-4255
fix: Atlas agent honors config.agents.atlas.model override (#4255)
2026-05-24 02:10:55 +09:00
YeonGyu-Kim 545131377a Merge pull request #4356 from Yeachan-Heo/fix/issue-3805-auto-tools-path
fix(grep): include OpenCode cache-backed bin in rg path resolution (#3805)
2026-05-24 02:07:17 +09:00
bellman bfc507895b fix: trust user-configured multimodal-looker model for vision (#4209)
When a user explicitly configures a model for the multimodal-looker
agent (e.g. zhipuai-coding-plan/glm-5.1), treat that model as
vision-capable even when its provider config does not declare
modalities.input or capabilities.input.image. This unblocks
vision-capable models that the provider config does not advertise.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 02:04:48 +09:00
bellman 779e2d2f10 fix(task): capture late-arriving sessionId so TUI subagent entry is clickable (#4252)
The OpenCode TUI renders background subagent session entries using
`props.metadata.sessionId` as the navigation target. When the wait-loop
in delegate-task and background-task tools exits before the session is
assigned, but the session is created moments later (before metadata
publish), the published metadata had `sessionId: undefined`, leaving
the TUI entry stuck spinning with no clickable target.

Add a single late-fallback `manager.getTask(task.id)?.sessionId` check
between the wait-loop exit and metadata publish in both paths. This
closes the narrow race window that produced the symptom in #4252.

Regression test: `late-session-id-capture.test.ts` mocks the exact race
(launch returns no sessionId; getTask returns it after the wait loop).

Verified:
- npm run build: PASS
- npm test: exit code 0 (one unrelated pre-existing failure in
  sisyphus-task > browserProvider propagation re: agent-browser skill)
2026-05-24 02:04:38 +09:00
bellman 7d444eed5e fix(agents): honor user atlas model when resolution returns undefined (#4255)
Atlas was the only agent that bailed early (returning undefined) when
applyModelResolution returned undefined, even if the user had explicitly
configured agents.atlas.model. The general-agents.ts path already handled
this case by falling back to the user's override; sisyphus has its own
explicit-config check. Atlas had neither, so under edge cases (cold
provider cache, no system default, empty availableModels) Atlas was
silently dropped and OpenCode used its built-in default — surfaced as
the hardcoded claude-sonnet-4-6 in the reported bug.

This aligns atlas-agent.ts with the same defensive pattern used in
general-agents.ts: when resolution fails but the user has an explicit
model override, honor it directly instead of dropping the agent.

Adds a regression test covering the scenario where availableModels is
empty AND systemDefaultModel is undefined AND no provider cache exists.
2026-05-24 02:04:20 +09:00
Yeachan-Heo 6c691a1afa fix(grep): probe OpenCode cache-backed bin for auto-downloaded rg (#3805)
Upstream OpenCode's Global.Path.bin resolves to ~/.cache/opencode/bin
(XDG cache), where its ripgrep auto-installer and many LSP servers land.
OMO's getOpenCodeBundledRg only checked the data-dir variant
(~/.local/share/opencode/bin), so when OpenCode had already downloaded
rg into its cache directory OMO would skip it and either redownload via
its own fallback installer or fall back to system grep.

Probe the cache-backed bin path first so OMO reuses tools OpenCode has
already installed.
2026-05-24 02:02:31 +09:00
YeonGyu-Kim c0a6c667e6 Merge pull request #4346 from code-yeongyu/fix/agent-loop-dedupe-race-4256
fix(background-agent): suppress dispatched duplicate wakes
2026-05-24 01:51:28 +09:00
YeonGyu-Kim b3097e5693 fix(background-agent): suppress redundant parent wakes 2026-05-24 01:07:38 +09:00
YeonGyu-Kim 2bfad4909e feat(skills): add security-research orchestration
Ship the documented Team Mode security-research capability as an .agents skill and expose /security-research through transition command wrappers.

The exact security-review slug has no reachable history hits; security-research is the documented missing artifact from README and issue #3887.

Refs #3887

Plan: plans/security-research-restore.md
2026-05-23 14:03:38 +09:00
github-actions[bot] 1ecf4f6475 @chouzz has signed the CLA in code-yeongyu/oh-my-openagent#4312 2026-05-23 02:59:30 +00:00
YeonGyu-Kim 01d2196220 Merge pull request #4238 from islee23520/fix/look-at-status-map-hang
Avoid look_at status map wait hang
2026-05-23 01:55:07 +09:00
YeonGyu-Kim f511b4bc15 Merge pull request #4263 from YOMXXX/fix/gpt-5-3-codex-migration
fix(migration): stop rewriting explicit gpt-5.3-codex to gpt-5.4 (#3777)
2026-05-23 01:54:10 +09:00
YeonGyu-Kim d06a5d7ad1 Merge pull request #4272 from YOMXXX/fix/ast-grep-windows-cli-suffix-test
test(ast-grep): lock Windows path matching against #4220 regression
2026-05-23 01:53:49 +09:00
YeonGyu-Kim 9da3009574 Merge pull request #4279 from MoerAI/fix/migrate-orphan-lsp-config-key
fix(migration): drop orphan 'lsp' config key so users see LSP moved to .opencode/lsp.json (fixes #4225)
2026-05-23 01:53:24 +09:00
YeonGyu-Kim 7cc5f8c6dd chore: update bun.lock 2026-05-23 01:52:48 +09:00
YeonGyu-Kim 74db81dfeb Merge pull request #4285 from SpencerJung/fix/issue-4123-tool-pair-retrigger
fix(tool-pair-validator): continue after synthetic repairs
2026-05-23 01:51:37 +09:00
YeonGyu-Kim 6cac80fe87 Merge pull request #4290 from SpencerJung/fix/issue-4170-cjk-agent-header
fix(cli): preserve CJK agent header text
2026-05-23 01:51:18 +09:00
YeonGyu-Kim 12d7d1045b Merge pull request #4282 from SpencerJung/fix/issue-4149-terminal-continuation-guard
fix(atlas): honor stopped continuation after boulder completion
2026-05-23 01:51:01 +09:00
github-actions[bot] aa3a2f2e8c release: v4.3.1 2026-05-22 14:06:47 +00:00
YeonGyu-Kim e7120f6ad4 Merge pull request #4295 from vanhci/fix/issue-4292-comment-checker-deadloop
fix(comment-checker): skip modified-existing comments and dedupe per-session (issue #4292)
2026-05-22 22:04:58 +09:00
YeonGyu-Kim 9e5c431817 Merge pull request #4297 from SpencerJung/fix/issue-4128-desktop-sidecar-crash
fix(background-agent): keep cleanup error listener active
2026-05-22 22:04:54 +09:00