oh-my-opencode 5.0.0-beta.7 → 5.0.0-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/.agents/skills/work-with-pr/SKILL.md +37 -23
  2. package/.opencode/skills/work-with-pr/SKILL.md +37 -23
  3. package/dist/agents/sisyphus/grok-4.d.ts +20 -0
  4. package/dist/agents/sisyphus/index.d.ts +2 -0
  5. package/dist/agents/sisyphus-agent-config.d.ts +6 -0
  6. package/dist/agents/sisyphus-agent-factory.d.ts +1 -1
  7. package/dist/agents/types.d.ts +2 -2
  8. package/dist/cli/index.js +446 -336
  9. package/dist/cli-node/index.js +446 -336
  10. package/dist/index.js +272 -28
  11. package/dist/shared/normalize-sdk-response.d.ts +1 -0
  12. package/dist/skills/frontend/SKILL.md +10 -7
  13. package/dist/skills/frontend/references/design/_INDEX.md +1 -0
  14. package/dist/skills/frontend/references/design/stylegallery.md +80 -0
  15. package/dist/skills/ultimate-browsing/ATTRIBUTION.md +2 -2
  16. package/dist/skills/ultimate-browsing/engine/templates/package.json +1 -1
  17. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
  18. package/dist/skills/ulw-plan/SKILL.md +2 -2
  19. package/dist/skills/ulw-plan/references/full-workflow.md +27 -3
  20. package/dist/skills/ulw-plan/references/intent-clear.md +2 -1
  21. package/dist/skills/ulw-plan/references/intent-unclear.md +3 -3
  22. package/dist/tui.js +75 -7
  23. package/package.json +19 -19
  24. package/packages/lsp-core/src/lsp/client-diagnostics-concurrency.integration.test.ts +44 -0
  25. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +0 -28
  26. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  27. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  28. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +24 -2
  30. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +24 -2
  31. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  32. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  33. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  34. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  35. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  36. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  37. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  38. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  39. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  40. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  41. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  42. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  43. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  44. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  45. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  46. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  47. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  48. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  49. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  50. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  51. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +2 -2
  52. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +27 -3
  53. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -1
  54. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +3 -3
  55. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  56. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  57. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +5 -3
  58. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +1 -1
  59. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  69. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  70. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  71. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  72. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  73. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  74. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  75. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  76. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  77. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  78. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  79. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  80. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  81. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  82. package/packages/omo-codex/plugin/package-lock.json +13 -13
  83. package/packages/omo-codex/plugin/package.json +1 -1
  84. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +10 -7
  85. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  86. package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +80 -0
  87. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +2 -2
  88. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
  89. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
  90. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +5 -3
  91. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +1 -1
  92. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +2 -2
  93. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +27 -3
  94. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -1
  95. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +3 -3
  96. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  97. package/packages/shared-skills/skills/frontend/SKILL.md +10 -7
  98. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  99. package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +80 -0
  100. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +2 -2
  101. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
  102. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
  103. package/packages/shared-skills/skills/ulw-plan/SKILL.md +2 -2
  104. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +27 -3
  105. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -1
  106. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +3 -3
@@ -4,7 +4,7 @@
4
4
  "private": true,
5
5
  "description": "Local deps for Playwright real-Chrome templates. npm install && npx playwright install chrome",
6
6
  "dependencies": {
7
- "playwright": "^1.61.1",
7
+ "playwright": "^1.62.1",
8
8
  "playwright-extra": "^4.3.6",
9
9
  "puppeteer-extra-plugin-stealth": "^2.11.2"
10
10
  }
@@ -2,8 +2,8 @@
2
2
 
3
3
  Real interaction (clicks, forms, screenshots, video, persistent login) for pages that defeat Tier 1/1.5. Two runtime tools, both installed on demand — neither is vendored in this skill:
4
4
 
5
- - **CloakBrowser** (`pip`) — stealth Chromium with source-level C++ fingerprint patches. The Python wrapper source is MIT; the downloaded Chromium binary is covered by CloakBrowser's separate binary license and is not redistributed by this package. Passes Cloudflare Turnstile, FingerprintJS, BrowserScan, and 30+ detectors. Pin **0.5.5**.
6
- - **agent-browser** (`npm`, Apache-2.0) — native CDP automation CLI that drives CloakBrowser. AX-tree snapshots, `@eN` refs, click/fill/type/scroll, screenshots, video, cookie/state/session management. Pin **0.33.2**.
5
+ - **CloakBrowser** (`pip`) — stealth Chromium with source-level C++ fingerprint patches. The Python wrapper source is MIT; the downloaded Chromium binary is covered by CloakBrowser's separate binary license and is not redistributed by this package. Passes Cloudflare Turnstile, FingerprintJS, BrowserScan, and 30+ detectors. Pin **0.5.7**.
6
+ - **agent-browser** (`npm`, Apache-2.0) — native CDP automation CLI that drives CloakBrowser. AX-tree snapshots, `@eN` refs, click/fill/type/scroll, screenshots, video, cookie/state/session management. Pin **0.34.0**.
7
7
 
8
8
  ```
9
9
  CloakBrowser (stealth Chromium) <- CDP port 9242 -> agent-browser CLI
@@ -18,22 +18,22 @@ CloakBrowser (stealth Chromium) <- CDP port 9242 -> agent-browser CLI
18
18
  CloakBrowser runs in a dedicated Python venv. Cross-platform: macOS, Linux, and Windows all supported by both tools (use the venv path convention for your OS).
19
19
 
20
20
  ```bash
21
- # CloakBrowser (MIT wrapper source; separate binary license, pin 0.5.5):
21
+ # CloakBrowser (MIT wrapper source; separate binary license, pin 0.5.7):
22
22
  uv venv .cloak-venv --python 3.13
23
23
  # macOS/Linux: source .cloak-venv/bin/activate Windows: .cloak-venv\Scripts\activate
24
- uv pip install "cloakbrowser==0.5.5"
24
+ uv pip install "cloakbrowser==0.5.7"
25
25
  python -c "import cloakbrowser; cloakbrowser.ensure_binary()" # downloads stealth Chromium on first import
26
26
 
27
- # agent-browser (Apache-2.0, pin 0.33.2):
28
- npm i -g agent-browser@0.33.2 && agent-browser install
29
- agent-browser --version # 0.33.2
27
+ # agent-browser (Apache-2.0, pin 0.34.0):
28
+ npm i -g agent-browser@0.34.0 && agent-browser install
29
+ agent-browser --version # 0.34.0
30
30
  ```
31
31
 
32
32
  Verify CloakBrowser:
33
33
 
34
34
  ```bash
35
35
  python -c "import cloakbrowser; print(cloakbrowser.__version__, cloakbrowser.CHROMIUM_VERSION, cloakbrowser.binary_info()['installed'])"
36
- # -> 0.5.5 <chromium-version> True
36
+ # -> 0.5.7 <chromium-version> True
37
37
  ```
38
38
 
39
39
  ## Launch + drive
@@ -76,7 +76,7 @@ agent-browser skills list # everything available on the installed
76
76
  agent-browser --cdp 9242 eval 'navigator.webdriver' # must print false
77
77
  ```
78
78
 
79
- Verified 2026-07 with CloakBrowser 0.5.5 + agent-browser 0.33.2: `navigator.webdriver` reads the boolean false with no init-script, bot.sannysoft.com all-green, browserscan.net "Normal" (15/15), nowsecure.nl Turnstile bypassed.
79
+ Verified 2026-07 with CloakBrowser 0.5.7 + agent-browser 0.34.0: `navigator.webdriver` reads the boolean false with no init-script, bot.sannysoft.com all-green, browserscan.net "Normal" (15/15), nowsecure.nl Turnstile bypassed.
80
80
 
81
81
  > **agent-browser 0.33.x behavior note:** the daemon now defaults to a 1-hour idle timeout (saves restore state, closes the browser, exits after 1 h of no commands). Set `AGENT_BROWSER_IDLE_TIMEOUT_MS=0` to restore the old always-persist behavior. External WebSocket stream consumers see latest-wins frame delivery; `record` (CDP) and the dashboard are unaffected.
82
82
 
@@ -117,6 +117,6 @@ lsof -ti:9242 | xargs kill -9
117
117
  # agent-browser can't connect:
118
118
  curl -s http://127.0.0.1:9242/json/version | head -5 # empty -> CloakBrowser not running
119
119
  # Update either tool:
120
- uv pip install --upgrade "cloakbrowser==0.5.5" && python -c "import cloakbrowser; cloakbrowser.ensure_binary()"
121
- npm i -g agent-browser@0.33.2
120
+ uv pip install --upgrade "cloakbrowser==0.5.7" && python -c "import cloakbrowser; cloakbrowser.ensure_binary()"
121
+ npm i -g agent-browser@0.34.0
122
122
  ```
@@ -34,7 +34,7 @@ Example opening (adapt the wording, keep every commitment):
34
34
 
35
35
  ## INTENT ROUTING - pick ONE intent reference
36
36
 
37
- **Review modifiers are a gate trigger, not a style cue.** If the user says "high accuracy", "ultra high accuracy", "고정밀", "deep review", or equivalent - in ANY turn, even appended to a follow-up question and even after the plan already exists - set `review_required: true` in the draft: the dual high-accuracy review (native `momus` + the independent Oracle review) is now REQUIRED before handoff, and if the plan already exists you run it this same turn. Answering the current question more carefully does NOT satisfy it. This does NOT choose CLEAR/UNCLEAR and does NOT suppress interview.
37
+ **Review modifiers are a gate trigger, not a style cue.** If the user says "high accuracy", "ultra high accuracy", "고정밀", "deep review", or equivalent - in ANY turn, even appended to a follow-up question and even after the plan already exists - set `review_required: true` in the draft: the dual high-accuracy review (native `momus` + the independent Oracle review) is now REQUIRED before handoff, and if the plan already exists you run it this same turn. The review runs under the bounded convergence contract in `full-workflow.md`: a 5-round cap (unlimited only on explicit user request), evidence-backed blocker eligibility, and approval-with-notes counting as approval. Answering the current question more carefully does NOT satisfy it. This does NOT choose CLEAR/UNCLEAR and does NOT suppress interview.
38
38
 
39
39
  After grounding, make ONE judgment, record `intent: clear|unclear` plus `review_required`, **ANNOUNCE both to the user in one line**, then load ONE intent reference (you ALSO read `references/full-workflow.md` for the shared mechanics - see below). The test keys on whether the desired **OUTCOME** is clear, NOT on request length. This verdict line and the opening announcement above are the two mandatory user-visible signals of a planning session - it tells the user whether they will be interviewed and whether high-accuracy review is already requested; never skip either.
40
40
 
@@ -72,7 +72,7 @@ When producing the plan, encode every executable item as a column-zero Markdown
72
72
  - **Full scope is the default.** Plan the ENTIRE request; "MVP", "v1", "phase 1", or any reduced subset is never an option you invent or ask about - it exists only if the user introduces it. Scope OUT / Must-NOT-Have entries are guardrails against unrequested additions, never reductions of the request.
73
73
  - **Explore before asking.** Discoverable facts (repo/system/docs truth) -> research and cite, never ask. Preferences/tradeoffs -> the only things you bring to the user. When unsure which, treat it as a user-decision.
74
74
  - **CodeGraph first when present.** Use `codegraph_explore` for repo how/where/what/flow questions before wider reads; if codegraph_* tools are absent, inactive/uninitialized, or cold-start unavailable, continue with Read/Grep/Glob/LSP and the ast-grep skill.
75
- - **Two filters** on every candidate question, in order: (1) Could collected evidence answer it? -> explore instead. (2) Could the user's stated intent plus a defensible default answer it? -> adopt the default, record it, do not ask - UNLESS it is an owner-decision, which always survives as a question even when a default exists: anything irreversible / destructive / safety-critical, or a cross-cutting product choice the user lives with (public config surface, distribution / packaging, external dependency or pinned SHA, data / schema shape). Default the reversible internals; surface the owner-decisions.
75
+ - **Two filters** on every candidate question, in order: (1) Could collected evidence answer it? -> explore instead. (2) Could the user's stated intent plus a defensible default answer it? -> adopt the default, record it, do not ask - UNLESS it is an owner-decision, which always survives as a question even when a default exists: anything irreversible / destructive / safety-critical, or a cross-cutting product choice the user lives with (public config surface, distribution / packaging, external dependency or pinned SHA, data / schema shape, real budget / paid-service spend, expected scale or capacity target, target-audience / compliance limits). Extrinsic constraints (budget, mandated stack, scale, audience) leave no repo evidence, so exploration can never surface them - sweep those axes explicitly once per plan and classify each as explored, defaulted (ledger), or asked. Default the reversible internals; surface the owner-decisions.
76
76
  - **Explore to sufficiency, then STOP.** One research wave per open question; stop when the clearance check is answerable; never re-explore to double-check.
77
77
  - **Parallel-dispatch** independent research in ONE turn and keep working while it runs. Subagent outputs are CLAIMS until you independently verify them.
78
78
  - **Approval is not execution.** Approval authorizes writing the plan ONLY, never implementation. ONE request -> ONE plan, however large.
@@ -136,7 +136,7 @@ No Metis, no plan file, no execution until the user approves. The UNCLEAR path a
136
136
 
137
137
  ## Phase 3 - Generate the plan (only after approval)
138
138
  1. Rerun `node "<skill-root>/scripts/scaffold-plan.mjs" <slug> [--clear|--unclear]` without `--draft-only`. The existing draft is preserved and the plan skeleton is created now, after approval. A plain rerun is a safe no-op; never hand-build the skeleton.
139
- 2. **Metis gap analysis (mandatory):** spawn a metis reviewer for contradictions, missing constraints, scope-creep, unvalidated assumptions, and missing acceptance criteria; fold findings in silently.
139
+ 2. **Metis gap analysis (mandatory):** spawn a metis reviewer for contradictions, missing constraints — including unstated extrinsic ones: budget/spend, mandated stack, expected scale, target audience / compliance — scope-creep, unvalidated assumptions, and missing acceptance criteria; fold findings in silently; require each constraint gap to return as a proposed default plus reversibility, or a single owner-question when defaulting is unsafe.
140
140
  3. APPEND todo batches into the `## Todos` region with edit/apply_patch - never rewrite the script-emitted headers; 50+ todos is fine; one request -> one plan.
141
141
  4. Fill `## TL;DR (For humans)` LAST, after the detailed plan, so it summarizes the real plan, not an intention.
142
142
  5. Self-review: every todo has references + agent-executable acceptance criteria + happy+failure QA scenarios; no business-logic assumption without evidence; zero criteria need a human. HR6 backstop - confirm the plan's FIRST `## ` heading is `## TL;DR (For humans)` and that every header below it appears in the template order; if you ever hand-built or reordered the file, the human summary must still lead.
@@ -180,7 +180,7 @@ Every "present the plan summary/brief" above delivers THIS structure, in the use
180
180
  6. **Execution handoff** - the plan runs in a worker session via `$start-work <plan-name>`; introduce the options: `--worktree <absolute-path>` (task-owned worktree; required for PR/branch work), `--make-pr` (deliver as a PR; auto-creates a task-owned worktree), `--ship` (implies `--make-pr`, keeps working until the PR is reviewed and MERGED).
181
181
 
182
182
  ### High-accuracy review (dual review)
183
- The high-accuracy review is DUAL and both passes must return OKAY before handoff: (1) the native `momus` reviewer subagent, and (2) an independent Oracle review via `task(subagent_type="oracle", ...)` on the strongest available reasoning model, in a fully isolated sub-session with normal approval and sandbox policy. Do not add flags that disable approvals or sandboxing. Momus runs at High and may take substantially longer than other agents. One round = exactly ONE `momus` + ONE independent review, dispatched together against the COMPLETE plan file (todos + TL;DR filled) at the draft's exact recorded `plan_path`. Keep Momus in flight and wait for its terminal result: elapsed time alone never justifies cancelling, duplicating, replacing, or treating it as failed. After both verdicts return, fix every cited issue and resubmit both fresh until each approves. CLEAR: runs when the user opts in or `review_required: true`. UNCLEAR: runs automatically unless Classify=Trivial.
183
+ The high-accuracy review is DUAL and both passes must return OKAY before handoff: (1) the native `momus` reviewer subagent, and (2) an independent Oracle review via `task(subagent_type="oracle", ...)` on the strongest available reasoning model, in a fully isolated sub-session with normal approval and sandbox policy. Do not add flags that disable approvals or sandboxing. Momus runs at High and may take substantially longer than other agents. One round = exactly ONE `momus` + ONE independent review, dispatched together against the COMPLETE plan file (todos + TL;DR filled) at the draft's exact recorded `plan_path`. Keep Momus in flight and wait for its terminal result: elapsed time alone never justifies cancelling, duplicating, replacing, or treating it as failed. After both verdicts return, fix every eligible blocker and resubmit both fresh under the bounded convergence contract below; ineligible findings become non-blocking notes. CLEAR: runs when the user opts in or `review_required: true`. UNCLEAR: runs automatically unless Classify=Trivial.
184
184
 
185
185
  Every reviewer prompt must carry this intake contract with all angle-bracket values replaced by literals from the current round before dispatch. Never pass `draft.plan_path`, `draft.plan_sha256`, field names, or another symbolic reference to an isolated reviewer. Its first action is to read the exact recorded path; retrieval drift stops that lane before review:
186
186
 
@@ -209,7 +209,31 @@ Every reviewer prompt must carry this intake contract with all angle-bracket val
209
209
 
210
210
  The first action must open the literal workspace root as a directory descriptor, then traverse `.omo`, `plans`, and the final target with descriptor-relative no-follow opens, `fstat` each ancestor as a directory and the final descriptor as a regular file, and hash all bytes read from that same final descriptor. If the platform cannot guarantee this chain, or any path/runtime/launch/receipt/digest check drifts, return `INCONCLUSIVE` before reviewing. Echo the literal workspace, runtime home, target, digest, round, and launch ID; the parent separately matches the completion envelope to the persisted session/process receipt. Never search or use another artifact.
211
211
 
212
- The draft must record the native Momus session/result, the independent review session/result, and the fix/retry summary. Immediately before handoff, repeat the same live canonical-path and SHA-256 validation and require it to match the approved round digest; drift invalidates both approvals and starts a fresh round. Do not say "high-accuracy review completed" unless both receipts exist, both final verdicts are unconditional approval, and the final live-plan validation passes.
212
+ ### Bounded convergence (the review must terminate)
213
+ Review rounds are capped at 5 (unlimited only on explicit user request), and an approval whose only remaining items are notes counts as approval. A finding may BLOCK only when it names at least one `blocker_eligibility` category below with its concrete evidence; every other finding - speculative durability, replay/crash-recovery, schema, CLI-parsing, state-machine, or hardening concerns the accepted scope never required - is recorded as a non-blocking note and becomes implementation/test work, never plan expansion. After round 1 the blocker ledger FREEZES: later rounds verify accepted ledger blockers, regressions introduced by fixes, and new findings that pass eligibility - they never rediscover the plan from scratch. Fixes apply the smallest edit that resolves the cited blocker; neither reviews nor fixes grow the plan's scope. Every reviewer prompt carries this convergence contract alongside the intake contract. On cap exhaustion without approval: STOP, report outstanding blockers, ask the user - continue / accept / adjust.
214
+
215
+ <!-- ulw-plan-review-convergence-contract -->
216
+ ```json
217
+ {
218
+ "max_rounds": 5,
219
+ "max_rounds_override": "explicit_user_request_only",
220
+ "on_cap_reached": "stop_report_outstanding_blockers_ask_user",
221
+ "blocker_eligibility": [
222
+ "explicit_requirement_or_accepted_decision",
223
+ "existing_failing_regression",
224
+ "reproducible_broken_flow",
225
+ "concrete_security_data_loss_or_compatibility_risk",
226
+ "external_api_provider_or_release_contract_conflict"
227
+ ],
228
+ "ineligible_finding_disposition": "non_blocking_note",
229
+ "approval_with_notes_counts_as_approval": true,
230
+ "ledger_freeze_after_round": 1,
231
+ "closure_round_scope": ["accepted_ledger_blockers", "regressions_introduced_by_fixes", "new_findings_passing_blocker_eligibility"],
232
+ "fix_edit_policy": "smallest_edit_no_scope_expansion"
233
+ }
234
+ ```
235
+
236
+ The draft must record the native Momus session/result, the independent review session/result, and the fix/retry summary, plus the convergence ledger (accepted blockers, non-blocking notes, round count). Immediately before handoff, repeat the same live canonical-path and SHA-256 validation and require it to match the approved round digest; drift invalidates both approvals and starts a fresh round. Do not say "high-accuracy review completed" unless both receipts exist, both final verdicts are unconditional approval, and the final live-plan validation passes.
213
237
 
214
238
  ## Delegation discipline (OpenCode-native)
215
239
  Every delegated prompt starts with `TASK:`, then DELIVERABLE / SCOPE / VERIFY; state the role inside the prompt and include only the context the child needs:
@@ -26,7 +26,7 @@ ASK WITH WHY: name what you explored, why it did not resolve, and which part of
26
26
 
27
27
  FOGGIEST-GAP targeting (ordinal, NO numbers): each turn aim at the single open gap whose resolution most unblocks the plan, and say why in one sentence; rotate across equally-foggy components. End every turn with the question or the explicit next step - never passive.
28
28
 
29
- CLEARANCE CHECK after each turn: objective defined? scope IN/OUT explicit? approach decided? test strategy confirmed? no blocking ambiguity left? Any NO is your next question; all YES -> present the approval brief and stop.
29
+ CLEARANCE CHECK after each turn: objective defined? scope IN/OUT explicit? approach decided? test strategy confirmed? constraints swept (budget / stack / scale / audience - each explored, defaulted, or asked)? no blocking ambiguity left? Any NO is your next question; all YES -> present the approval brief and stop.
30
30
  </interview>
31
31
 
32
32
  <approval_and_deliver>
@@ -40,5 +40,6 @@ Request: "add a 5/min-per-IP rate-limit to `/login`".
40
40
  3. Two surviving forks, each asked WITH WHY:
41
41
  - Storage backend (explored: repo already uses Redis; default = Redis; options Redis / in-memory / per-node) - why: persistence across nodes forks the design.
42
42
  - Over-limit response (default = 429 + Retry-After; options 429 / 423 / silent drop) - why: client contract forks on it.
43
+ - Swept axes: no budget/audience fork (internal service); scale bound = existing Redis capacity (defaulted, reversible).
43
44
  4. Approval brief -> explicit okay -> scaffold -> append todos -> if `review_required`, run dual review and deliver receipts; otherwise deliver with the optional review question.
44
45
  </worked_example>
@@ -20,13 +20,13 @@ TOPOLOGY LOCK still applies: enumerate the 1-6 independently-succeed/fail compon
20
20
  </research_protocol>
21
21
 
22
22
  <default_selection>
23
- For each open decision, adopt the defensible best-practice default (industry standard or repo convention), RECORD it in the draft's Open-assumptions ledger with rationale and reversibility, and proceed. NO numeric scoring - the ledger IS the audit trail. The ONLY default escalated to a single focused question is one that is irreversible, destructive, or safety-critical and research cannot settle.
23
+ For each open decision - including the extrinsic axes the sweep names (budget, mandated stack, expected scale, target audience / compliance) - adopt the defensible best-practice default (industry standard or repo convention), RECORD it in the draft's Open-assumptions ledger with rationale and reversibility, and proceed. NO numeric scoring - the ledger IS the audit trail. The ONLY default escalated to a single focused question is one that is irreversible, destructive, or safety-critical, or commits real spend the user never authorized, and research cannot settle.
24
24
 
25
25
  Fold a contrarian self-grill into the Metis spawn: challenge the single highest-leverage adopted assumption - is this constraint real or habitual; does any adopted default add complexity the request never asked for? - and return concrete reframes. The grill targets incidental complexity (unneeded abstraction, speculative capacity), NEVER the feature set: reducing, phasing, or deferring part of the request is not a reframe. Fold a reframe into the plan only as a recommended default plus rationale, never as a forced change.
26
26
  </default_selection>
27
27
 
28
28
  <high_accuracy_auto>
29
- Because the human did not steer, adversarial review SUBSTITUTES for the interview you skipped - this is what catches a bad default. Metis runs during plan generation as always; after Metis findings are folded and the plan file is complete, run the dual high-accuracy review defined in `full-workflow.md` AUTOMATICALLY - no "do you want a review?" question - and resubmit fresh until BOTH passes APPROVE, fixing every cited issue.
29
+ Because the human did not steer, adversarial review SUBSTITUTES for the interview you skipped - this is what catches a bad default. Metis runs during plan generation as always; after Metis findings are folded and the plan file is complete, run the dual high-accuracy review defined in `full-workflow.md` AUTOMATICALLY - no "do you want a review?" question - and drive it to convergence under the bounded convergence contract in `full-workflow.md`: fix every eligible blocker and resubmit fresh, record ineligible findings as non-blocking notes, and on cap exhaustion stop and ask the user.
30
30
 
31
31
  TRIVIAL-TIER GUARD: if Classify sized the work Trivial, the auto-Momus loop is SUPPRESSED (Metis still runs once) - a vague-but-tiny request ("clean this up") must not trigger the full adversarial loop. UNCLEAR raises the research-plus-default posture; it does not override the Trivial cost guard for Momus.
32
32
  </high_accuracy_auto>
@@ -40,5 +40,5 @@ Request: "make auth better".
40
40
  1. Research waves -> current auth at `src/auth/*` and evidence for the requested improvement; best-practice baselines via librarian.
41
41
  2. Topology lock as an ANNOUNCEMENT, not a question: components refine the evidenced auth intent in full, such as session hardening, brute-force protection, and password policy when the repository supports them. MFA is an adjacent capability and stays in Scope OUT unless the user asks for it or evidence establishes it as part of the requested outcome.
42
42
  3. Adopted-defaults table (assumption | default | rationale | reversible?): bcrypt rounds 8 -> 12 (reversible), add 5/min-per-IP login limit (reversible), rotate session id on privilege change (reversible).
43
- 4. Metis folded -> auto dual review (fix cited gaps until both approve) -> brief LEADING with the approach and the defaults, surfaced in the human TL;DR for veto.
43
+ 4. Metis folded -> auto dual review (fix eligible gaps under the bounded convergence contract) -> brief LEADING with the approach and the defaults, surfaced in the human TL;DR for veto.
44
44
  </worked_example>
package/dist/tui.js CHANGED
@@ -19016,7 +19016,7 @@ function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism
19016
19016
  residency_max_children: record2["residency_max_children"] ?? Math.max(8, resolveParallelism() * 3)
19017
19017
  });
19018
19018
  }
19019
- var ResidencyMaxChildrenInputSchema, OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, OmoTaskSettingsSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
19019
+ var ResidencyMaxChildrenInputSchema, OmoTaskWaitSchema, OmoTaskTeamSettingsSchema, OmoTaskWarningsSchema, OmoTaskDagSettingsSchema, OmoTaskSettingsSchema, OmoTaskDagSettingsLayerSchema, OmoTaskWaitLayerSchema, OmoTaskTeamSettingsLayerSchema, OmoTaskWarningsLayerSchema, OmoTaskSettingsLayerSchema;
19020
19020
  var init_task = __esm(() => {
19021
19021
  init_zod();
19022
19022
  ResidencyMaxChildrenInputSchema = union([number2().int().positive(), literal("unlimited")]);
@@ -19033,6 +19033,16 @@ var init_task = __esm(() => {
19033
19033
  OmoTaskWarningsSchema = object({
19034
19034
  unavailable_categories: boolean2().default(true)
19035
19035
  }).strict();
19036
+ OmoTaskDagSettingsSchema = object({
19037
+ max_nodes_per_run: number2().int().positive().default(64),
19038
+ max_runs_per_session: number2().int().positive().default(16),
19039
+ subscriber_ring: number2().int().positive().default(1000),
19040
+ heartbeat_ms: number2().int().positive().default(15000),
19041
+ history_default_limit: number2().int().positive().default(256),
19042
+ history_max_limit: number2().int().positive().default(1000),
19043
+ retention_days: number2().int().positive().default(7),
19044
+ max_prompt_bytes: number2().int().positive().default(262144)
19045
+ }).strict();
19036
19046
  OmoTaskSettingsSchema = object({
19037
19047
  default_execution_mode: _enum2(["in-process", "process"]).default("in-process"),
19038
19048
  default_concurrency: number2().int().positive().default(5),
@@ -19050,7 +19060,18 @@ var init_task = __esm(() => {
19050
19060
  max_members: 8,
19051
19061
  max_parallel_members: 4,
19052
19062
  max_wall_clock_minutes: 120
19053
- })
19063
+ }),
19064
+ dag: OmoTaskDagSettingsSchema.optional()
19065
+ }).strict();
19066
+ OmoTaskDagSettingsLayerSchema = object({
19067
+ max_nodes_per_run: number2().int().positive().optional(),
19068
+ max_runs_per_session: number2().int().positive().optional(),
19069
+ subscriber_ring: number2().int().positive().optional(),
19070
+ heartbeat_ms: number2().int().positive().optional(),
19071
+ history_default_limit: number2().int().positive().optional(),
19072
+ history_max_limit: number2().int().positive().optional(),
19073
+ retention_days: number2().int().positive().optional(),
19074
+ max_prompt_bytes: number2().int().positive().optional()
19054
19075
  }).strict();
19055
19076
  OmoTaskWaitLayerSchema = object({
19056
19077
  min_ms: number2().int().positive().optional(),
@@ -19078,7 +19099,8 @@ var init_task = __esm(() => {
19078
19099
  resume_children: boolean2().optional(),
19079
19100
  warnings: OmoTaskWarningsLayerSchema.optional(),
19080
19101
  wait: OmoTaskWaitLayerSchema.optional(),
19081
- team: OmoTaskTeamSettingsLayerSchema.optional()
19102
+ team: OmoTaskTeamSettingsLayerSchema.optional(),
19103
+ dag: OmoTaskDagSettingsLayerSchema.optional()
19082
19104
  }).strict();
19083
19105
  });
19084
19106
 
@@ -21058,10 +21080,10 @@ var init_category_model_requirements = __esm(() => {
21058
21080
  quick: {
21059
21081
  fallbackChain: [
21060
21082
  { providers: ["kimi-for-coding"], model: "kimi-for-coding-highspeed" },
21061
- { providers: ["quotio-openai"], model: "gpt-5.6-luna-fast", variant: "low" },
21083
+ { providers: ["openai-codex"], model: "gpt-5.6-luna-fast", variant: "low" },
21062
21084
  { providers: ["deepseek"], model: "deepseek-v4-flash", variant: "off" },
21063
21085
  {
21064
- providers: ["qwen-token-plan", "alibaba-token-plan", "bailian-coding-plan", "opencode-go", "vercel"],
21086
+ providers: ["qwen-token-plan", "alibaba-token-plan", "bailian-coding-plan", "vercel"],
21065
21087
  model: "qwen3.6-flash",
21066
21088
  variant: "low"
21067
21089
  },
@@ -21077,6 +21099,11 @@ var init_category_model_requirements = __esm(() => {
21077
21099
  },
21078
21100
  "unspecified-low": {
21079
21101
  fallbackChain: [
21102
+ {
21103
+ providers: ["xai", "github-copilot", "opencode", "vercel"],
21104
+ model: "grok-4.6",
21105
+ variant: "xhigh"
21106
+ },
21080
21107
  {
21081
21108
  providers: ["openai", "quotio-openai", "github-copilot", "opencode", "vercel"],
21082
21109
  model: "gpt-5.6-terra",
@@ -77943,6 +77970,47 @@ var init_model_capabilities_generated = __esm(() => {
77943
77970
  input: 272000,
77944
77971
  output: 128000
77945
77972
  }
77973
+ },
77974
+ "grok-4.6": {
77975
+ id: "grok-4.6",
77976
+ family: "grok",
77977
+ reasoning: true,
77978
+ temperature: true,
77979
+ toolCall: true,
77980
+ modalities: {
77981
+ input: [
77982
+ "text",
77983
+ "image"
77984
+ ],
77985
+ output: [
77986
+ "text"
77987
+ ]
77988
+ },
77989
+ limit: {
77990
+ context: 500000,
77991
+ output: 500000
77992
+ }
77993
+ },
77994
+ "xai/grok-4.6": {
77995
+ id: "xai/grok-4.6",
77996
+ family: "grok",
77997
+ reasoning: true,
77998
+ temperature: true,
77999
+ toolCall: true,
78000
+ modalities: {
78001
+ input: [
78002
+ "text",
78003
+ "image",
78004
+ "pdf"
78005
+ ],
78006
+ output: [
78007
+ "text"
78008
+ ]
78009
+ },
78010
+ limit: {
78011
+ context: 500000,
78012
+ output: 500000
78013
+ }
77946
78014
  }
77947
78015
  }
77948
78016
  };
@@ -78441,7 +78509,7 @@ This is NOT a default choice - it's for genuinely unclassifiable moderate-effort
78441
78509
  </Category_Context>
78442
78510
 
78443
78511
  <Caller_Warning>
78444
- THIS CATEGORY USES A LIGHTWEIGHT MODEL (gpt-5.6-luna).
78512
+ THIS CATEGORY USES GROK 4.6 (xhigh).
78445
78513
 
78446
78514
  **PROVIDE CLEAR STRUCTURE:**
78447
78515
  1. MUST DO: Enumerate required actions explicitly
@@ -78473,7 +78541,7 @@ var init_openai_categories = __esm(() => {
78473
78541
  },
78474
78542
  {
78475
78543
  name: "unspecified-low",
78476
- config: { model: "openai/gpt-5.6-luna", variant: "xhigh" },
78544
+ config: { model: "xai/grok-4.6", variant: "xhigh" },
78477
78545
  description: "Tasks that don't fit other categories, low effort required",
78478
78546
  promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
78479
78547
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.0.0-beta.7",
3
+ "version": "5.0.0-beta.8",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -180,7 +180,7 @@
180
180
  "zod": "^4.4.3"
181
181
  },
182
182
  "devDependencies": {
183
- "@code-yeongyu/senpi": "2026.8.12-4",
183
+ "@code-yeongyu/senpi": "2026.8.16",
184
184
  "@oh-my-opencode/agents-md-core": "workspace:*",
185
185
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
186
186
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -212,7 +212,7 @@
212
212
  "@oh-my-opencode/utils": "workspace:*",
213
213
  "@types/js-yaml": "^4.0.9",
214
214
  "@types/picomatch": "^4.0.3",
215
- "@typescript/native-preview": "7.0.0-dev.20260518.1",
215
+ "@typescript/native-preview": "7.0.0-dev.20260707.2",
216
216
  "@xterm/addon-unicode11": "^0.9.0",
217
217
  "@xterm/xterm": "^6.0.0",
218
218
  "bun-types": "1.3.14",
@@ -221,24 +221,24 @@
221
221
  "typescript": "^7.0.2"
222
222
  },
223
223
  "optionalDependencies": {
224
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.7",
225
- "oh-my-opencode-darwin-x64": "5.0.0-beta.7",
226
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.7",
227
- "oh-my-opencode-linux-arm64": "5.0.0-beta.7",
228
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.7",
229
- "oh-my-opencode-linux-x64": "5.0.0-beta.7",
230
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.7",
231
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.7",
232
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.7",
233
- "oh-my-opencode-windows-arm64": "5.0.0-beta.7",
234
- "oh-my-opencode-windows-x64": "5.0.0-beta.7",
235
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.7"
224
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.8",
225
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.8",
226
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.8",
227
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.8",
228
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.8",
229
+ "oh-my-opencode-linux-x64": "5.0.0-beta.8",
230
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.8",
231
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.8",
232
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.8",
233
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.8",
234
+ "oh-my-opencode-windows-x64": "5.0.0-beta.8",
235
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.8"
236
236
  },
237
237
  "overrides": {
238
- "@earendil-works/pi-agent-core": "0.80.3",
239
- "@earendil-works/pi-ai": "0.80.3",
240
- "@earendil-works/pi-coding-agent": "0.80.3",
241
- "@earendil-works/pi-tui": "0.80.3",
238
+ "@earendil-works/pi-agent-core": "0.84.2",
239
+ "@earendil-works/pi-ai": "0.84.2",
240
+ "@earendil-works/pi-coding-agent": "0.84.2",
241
+ "@earendil-works/pi-tui": "0.84.2",
242
242
  "hono": "^4.12.18",
243
243
  "@hono/node-server": "^1.19.13",
244
244
  "express-rate-limit": "^8.5.1",
@@ -0,0 +1,44 @@
1
+ import { afterEach, describe, expect, it } from "bun:test";
2
+
3
+ import {
4
+ createWorkspaceEditTestHarness,
5
+ diagnostic,
6
+ readEvents,
7
+ } from "./workspace-apply-edit-test-support.js";
8
+
9
+ const harness = createWorkspaceEditTestHarness();
10
+
11
+ afterEach(async () => {
12
+ await harness.cleanup();
13
+ });
14
+
15
+ describe("LspClient diagnostics concurrency", () => {
16
+ it("#given concurrent diagnostics on a cold file and an exact didOpen publish #when pull is not advertised #then one didOpen opens the file and both requests receive the current diagnostics", async () => {
17
+ const context = await harness.makeClient(
18
+ {
19
+ publishDiagnostics: [
20
+ {
21
+ trigger: "didOpen",
22
+ version: 1,
23
+ diagnostics: [diagnostic("exact-current")],
24
+ awaitClientDelivery: true,
25
+ },
26
+ ],
27
+ },
28
+ { diagnosticsFreshnessTimeoutMs: 500, versionlessPublishQuiescenceMs: 5 },
29
+ );
30
+
31
+ const [first, second] = await Promise.all([
32
+ context.client.diagnostics(context.source),
33
+ context.client.diagnostics(context.source),
34
+ ]);
35
+
36
+ expect(first.items).toEqual([diagnostic("exact-current")]);
37
+ expect(second.items).toEqual([diagnostic("exact-current")]);
38
+ expect(
39
+ readEvents(context.events).filter(
40
+ (event) => event.type === "clientNotification" && event.method === "textDocument/didOpen",
41
+ ),
42
+ ).toHaveLength(1);
43
+ });
44
+ });
@@ -16,34 +16,6 @@ afterEach(async () => {
16
16
  });
17
17
 
18
18
  describe("LspClient diagnostics freshness", () => {
19
- it("#given concurrent diagnostics on a cold file and an exact didOpen publish #when pull is not advertised #then one didOpen opens the file and both requests receive the current diagnostics", async () => {
20
- const context = await harness.makeClient(
21
- {
22
- publishDiagnostics: [
23
- {
24
- trigger: "didOpen",
25
- version: 1,
26
- diagnostics: [diagnostic("exact-current")],
27
- },
28
- ],
29
- },
30
- { diagnosticsFreshnessTimeoutMs: 50, versionlessPublishQuiescenceMs: 5 },
31
- );
32
-
33
- const [first, second] = await Promise.all([
34
- context.client.diagnostics(context.source),
35
- context.client.diagnostics(context.source),
36
- ]);
37
-
38
- expect(first.items).toEqual([diagnostic("exact-current")]);
39
- expect(second.items).toEqual([diagnostic("exact-current")]);
40
- expect(
41
- readEvents(context.events).filter(
42
- (event) => event.type === "clientNotification" && event.method === "textDocument/didOpen",
43
- ),
44
- ).toHaveLength(1);
45
- });
46
-
47
19
  it("#given a versionless publish that arrives after the current change #when no newer eligible publish arrives before quiescence #then diagnostics wait for that quiescence window and return the versionless payload", async () => {
48
20
  const context = await harness.makeClient(
49
21
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.7",
3
+ "version": "5.0.0-beta.8",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -8,7 +8,7 @@
8
8
  "command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
9
9
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.0.0-beta.7) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.8) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "5.0.0-beta.7",
3
+ "version": "5.0.0-beta.8",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -5726,6 +5726,16 @@ var OmoTaskTeamSettingsSchema = object({
5726
5726
  var OmoTaskWarningsSchema = object({
5727
5727
  unavailable_categories: boolean2().default(true)
5728
5728
  }).strict();
5729
+ var OmoTaskDagSettingsSchema = object({
5730
+ max_nodes_per_run: number2().int().positive().default(64),
5731
+ max_runs_per_session: number2().int().positive().default(16),
5732
+ subscriber_ring: number2().int().positive().default(1000),
5733
+ heartbeat_ms: number2().int().positive().default(15000),
5734
+ history_default_limit: number2().int().positive().default(256),
5735
+ history_max_limit: number2().int().positive().default(1000),
5736
+ retention_days: number2().int().positive().default(7),
5737
+ max_prompt_bytes: number2().int().positive().default(262144)
5738
+ }).strict();
5729
5739
  var OmoTaskSettingsSchema = object({
5730
5740
  default_execution_mode: _enum(["in-process", "process"]).default("in-process"),
5731
5741
  default_concurrency: number2().int().positive().default(5),
@@ -5743,7 +5753,18 @@ var OmoTaskSettingsSchema = object({
5743
5753
  max_members: 8,
5744
5754
  max_parallel_members: 4,
5745
5755
  max_wall_clock_minutes: 120
5746
- })
5756
+ }),
5757
+ dag: OmoTaskDagSettingsSchema.optional()
5758
+ }).strict();
5759
+ var OmoTaskDagSettingsLayerSchema = object({
5760
+ max_nodes_per_run: number2().int().positive().optional(),
5761
+ max_runs_per_session: number2().int().positive().optional(),
5762
+ subscriber_ring: number2().int().positive().optional(),
5763
+ heartbeat_ms: number2().int().positive().optional(),
5764
+ history_default_limit: number2().int().positive().optional(),
5765
+ history_max_limit: number2().int().positive().optional(),
5766
+ retention_days: number2().int().positive().optional(),
5767
+ max_prompt_bytes: number2().int().positive().optional()
5747
5768
  }).strict();
5748
5769
  var OmoTaskWaitLayerSchema = object({
5749
5770
  min_ms: number2().int().positive().optional(),
@@ -5771,7 +5792,8 @@ var OmoTaskSettingsLayerSchema = object({
5771
5792
  resume_children: boolean2().optional(),
5772
5793
  warnings: OmoTaskWarningsLayerSchema.optional(),
5773
5794
  wait: OmoTaskWaitLayerSchema.optional(),
5774
- team: OmoTaskTeamSettingsLayerSchema.optional()
5795
+ team: OmoTaskTeamSettingsLayerSchema.optional(),
5796
+ dag: OmoTaskDagSettingsLayerSchema.optional()
5775
5797
  }).strict();
5776
5798
  function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism) {
5777
5799
  const record2 = record(string2(), unknown()).parse(input);
@@ -5992,6 +5992,16 @@ var OmoTaskTeamSettingsSchema = object({
5992
5992
  var OmoTaskWarningsSchema = object({
5993
5993
  unavailable_categories: boolean2().default(true)
5994
5994
  }).strict();
5995
+ var OmoTaskDagSettingsSchema = object({
5996
+ max_nodes_per_run: number2().int().positive().default(64),
5997
+ max_runs_per_session: number2().int().positive().default(16),
5998
+ subscriber_ring: number2().int().positive().default(1000),
5999
+ heartbeat_ms: number2().int().positive().default(15000),
6000
+ history_default_limit: number2().int().positive().default(256),
6001
+ history_max_limit: number2().int().positive().default(1000),
6002
+ retention_days: number2().int().positive().default(7),
6003
+ max_prompt_bytes: number2().int().positive().default(262144)
6004
+ }).strict();
5995
6005
  var OmoTaskSettingsSchema = object({
5996
6006
  default_execution_mode: _enum(["in-process", "process"]).default("in-process"),
5997
6007
  default_concurrency: number2().int().positive().default(5),
@@ -6009,7 +6019,18 @@ var OmoTaskSettingsSchema = object({
6009
6019
  max_members: 8,
6010
6020
  max_parallel_members: 4,
6011
6021
  max_wall_clock_minutes: 120
6012
- })
6022
+ }),
6023
+ dag: OmoTaskDagSettingsSchema.optional()
6024
+ }).strict();
6025
+ var OmoTaskDagSettingsLayerSchema = object({
6026
+ max_nodes_per_run: number2().int().positive().optional(),
6027
+ max_runs_per_session: number2().int().positive().optional(),
6028
+ subscriber_ring: number2().int().positive().optional(),
6029
+ heartbeat_ms: number2().int().positive().optional(),
6030
+ history_default_limit: number2().int().positive().optional(),
6031
+ history_max_limit: number2().int().positive().optional(),
6032
+ retention_days: number2().int().positive().optional(),
6033
+ max_prompt_bytes: number2().int().positive().optional()
6013
6034
  }).strict();
6014
6035
  var OmoTaskWaitLayerSchema = object({
6015
6036
  min_ms: number2().int().positive().optional(),
@@ -6037,7 +6058,8 @@ var OmoTaskSettingsLayerSchema = object({
6037
6058
  resume_children: boolean2().optional(),
6038
6059
  warnings: OmoTaskWarningsLayerSchema.optional(),
6039
6060
  wait: OmoTaskWaitLayerSchema.optional(),
6040
- team: OmoTaskTeamSettingsLayerSchema.optional()
6061
+ team: OmoTaskTeamSettingsLayerSchema.optional(),
6062
+ dag: OmoTaskDagSettingsLayerSchema.optional()
6041
6063
  }).strict();
6042
6064
  function resolveOmoTaskSettings(input, resolveParallelism = availableParallelism) {
6043
6065
  const record2 = record(string2(), unknown()).parse(input);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-codegraph",
3
- "version": "5.0.0-beta.7",
3
+ "version": "5.0.0-beta.8",
4
4
  "description": "Codex plugin MCP wrapper for CodeGraph.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.0.0-beta.7) Checking Comments"
11
+ "statusMessage": "(OmO 5.0.0-beta.8) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }