oh-my-opencode 4.18.1 → 4.18.2

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 (116) hide show
  1. package/.agents/skills/codex-qa/scripts/lsp-e2e.sh +39 -16
  2. package/.agents/skills/opencode-qa/scripts/lsp-e2e.sh +111 -28
  3. package/bin/AGENTS.md +33 -0
  4. package/dist/cli/index.js +57 -18
  5. package/dist/cli-node/index.js +57 -18
  6. package/dist/hooks/anthropic-context-window-limit-recovery/empty-content-recovery-sdk.d.ts +6 -0
  7. package/dist/hooks/category-skill-reminder/hook.d.ts +9 -1
  8. package/dist/hooks/comment-checker/hook.d.ts +8 -1
  9. package/dist/hooks/todo-continuation-enforcer/types.d.ts +3 -0
  10. package/dist/index.js +560 -333
  11. package/dist/plugin/messages-transform.d.ts +1 -0
  12. package/dist/plugin-handlers/prometheus-agent-config-builder.d.ts +2 -0
  13. package/dist/tui.js +43 -4
  14. package/package.json +13 -13
  15. package/packages/git-bash-mcp/dist/cli.js +81 -19
  16. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +4 -4
  17. package/packages/lsp-core/src/lsp/directory-diagnostics.test.ts +118 -1
  18. package/packages/lsp-core/src/lsp/directory-diagnostics.ts +1 -1
  19. package/packages/lsp-daemon/dist/cli.js +262 -63
  20. package/packages/lsp-daemon/dist/client.js +194 -50
  21. package/packages/lsp-daemon/dist/daemon-client.d.ts +2 -2
  22. package/packages/lsp-daemon/dist/daemon-client.js +26 -2
  23. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +5 -4
  24. package/packages/lsp-daemon/dist/ensure-daemon.js +79 -18
  25. package/packages/lsp-daemon/dist/index.js +262 -63
  26. package/packages/lsp-daemon/dist/proxy.d.ts +2 -0
  27. package/packages/lsp-daemon/dist/proxy.js +79 -23
  28. package/packages/lsp-tools-mcp/dist/cli.js +82 -20
  29. package/packages/lsp-tools-mcp/dist/mcp.js +82 -20
  30. package/packages/lsp-tools-mcp/dist/tools.js +1 -1
  31. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  32. package/packages/omo-codex/plugin/.mcp.json +2 -1
  33. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  34. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  35. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +100 -28
  36. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +100 -28
  37. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  38. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +21 -9
  39. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +35 -0
  40. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +69 -0
  41. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +57 -1
  42. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  43. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  44. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  45. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  46. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  47. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  48. package/packages/omo-codex/plugin/components/lsp/.mcp.json +2 -1
  49. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  50. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +113 -31
  51. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  52. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  53. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +1 -0
  54. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.5.md +1 -1
  55. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +5 -3
  56. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  57. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  58. package/packages/omo-codex/plugin/components/start-work-continuation/README.md +2 -2
  59. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +3 -3
  60. package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +2 -2
  61. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  62. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  63. package/packages/omo-codex/plugin/components/start-work-continuation/src/boulder-reader.ts +1 -1
  64. package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +1 -1
  65. package/packages/omo-codex/plugin/components/start-work-continuation/test/boulder-reader.test.ts +15 -1
  66. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +20 -0
  67. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  68. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  69. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  70. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  71. package/packages/omo-codex/plugin/components/ultrawork/directive.md +50 -33
  72. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  73. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  74. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +50 -33
  75. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +50 -33
  76. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +3 -3
  77. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +5 -6
  78. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  79. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  80. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +1 -1
  81. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +5 -6
  82. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +2 -2
  83. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  84. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  85. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  86. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  87. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  88. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  89. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  92. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  93. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  94. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  95. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  96. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  97. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  103. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  104. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  105. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  106. package/packages/omo-codex/plugin/package-lock.json +13 -13
  107. package/packages/omo-codex/plugin/package.json +1 -1
  108. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +10 -2
  109. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +7 -0
  110. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +3 -2
  111. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +50 -33
  112. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +1 -1
  113. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -0
  114. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +7 -0
  115. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +35 -4
  116. package/packages/omo-codex/scripts/install-dist/install-local.mjs +1 -1
@@ -105,9 +105,7 @@ notepad with a one-line reason each. Skipping a skill that fits the
105
105
  task is a defect. Open a skill's body only when THIS session will
106
106
  execute its workflow; skills a delegated session needs are named in
107
107
  its prompt and read there, not here.
108
- Next, fire the first discovery wave in ONE parallel action (Finding
109
- things below): direct lookups plus `explorer` / `librarian` children
110
- for unfamiliar layout or external contracts.
108
+ Next, fire the first discovery wave under Finding things below.
111
109
  Then run Tier triage (above) on the change set and record the tier —
112
110
  tier sizes evidence and review, never who plans. Size planning by
113
111
  what the wave left UNDECIDED, not by how many steps you can list:
@@ -207,25 +205,27 @@ GOOD pair (test-first, ordered):
207
205
  BAD: "Implement feature" / "Fix bug" / "Add tests later" / writing
208
206
  production code before its failing test → rewrite.
209
207
 
210
- # Finding things (lead with these, parallel-flood the first wave)
208
+ # Finding things (lead with these, code-mode the first wave)
211
209
  Never guess from memory — locate with the right tool, and re-read before
212
- you claim or change. Fire 3+ independent lookups in one action;
213
- serialize only when one output strictly feeds the next.
214
- - CodeGraph, when `codegraph_*` tools exist -> use `codegraph_explore`
215
- first for how/where/what/flow questions and before edits; if absent,
216
- inactive/uninitialized, or cold-start unavailable, keep moving with
217
- Read/Grep/Glob/LSP and the ast-grep skill.
218
- - Repo-wide inspection, CLI smoke tests, git/history, bounded command
219
- output use native shell commands directly: `rg`, `rg --files`,
220
- `cat`, and `git`. Narrow huge output before reading it.
221
- - Symbols definitions, references, rename impact, diagnostics →
222
- `lsp_goto_definition`, `lsp_find_references`, `lsp_symbols`,
223
- `lsp_diagnostics`. Use the LSP, not text search, for anything
224
- symbol-shaped.
225
- - Structural shapes call/function/class/import patterns, codemods →
226
- the `ast-grep` skill or `sg` CLI with `$VAR` / `$$$` metavars.
227
- - Text / strings / comments / logs → `rg`. File-name discovery →
228
- `glob` / `find`. Verbatim content `read`.
210
+ you claim or change. **USE CODE MODE AGGRESSIVELY FOR BOUNDED WAVES.**
211
+ When multiple independent tool calls produce results that can be materially
212
+ filtered, joined, deduplicated, or reduced, make ONE `exec` / eval JavaScript
213
+ program that calls eligible tools concurrently with `Promise.all` and emits only
214
+ decision-relevant evidence. For shell-native repo work without programmatic
215
+ tool access, use ONE Python script with `concurrent.futures`, `subprocess`,
216
+ and utility functions to batch commands and reduce output. Keep direct calls
217
+ when one result chooses the next action, outputs are already small, semantic
218
+ judgment is required between calls, approval or side effects are involved,
219
+ or native artifacts / citations must be preserved.
220
+ - Architecture / flow / blast radius → `codegraph_explore` first when
221
+ `codegraph_*` exists; if unavailable, continue with repo tools and LSP.
222
+ - **SYMBOLS REQUIRE LSP** — definitions, references, rename impact,
223
+ workspace symbols, and diagnostics use the available `lsp_*` tools, not
224
+ text search. Run diagnostics after edits and treat errors as blocking.
225
+ - Repo text / filenames / history / bounded shell output → `rg`,
226
+ `rg --files`, `git`, and native utilities; narrow output in-program.
227
+ - Structural call / function / class / import shapes and codemods → the
228
+ `ast-grep` skill or `sg` with `$VAR` / `$$$` metavariables.
229
229
  When discovery needs multiple angles or the module layout is
230
230
  unfamiliar, delegate to the `explorer` subagent (read-only codebase
231
231
  search, absolute-path results). For research that leaves the repo —
@@ -289,21 +289,39 @@ Until every success criterion PASSES with its evidence captured:
289
289
  vars. Append a one-line cleanup receipt to the notepad next to the
290
290
  artifact, e.g. `cleanup: killed 12345; tmux kill-session ulw-qa-foo;
291
291
  rm -rf /tmp/ulw.aB12cD`. No receipt → criterion stays in_progress.
292
- 6. Verify: LSP diagnostics clean on changed files + full test suite
293
- green (no skipped, no xfail added this turn).
292
+ 6. Verify: LSP diagnostics clean on changed files + the test scope
293
+ this criterion touched green (no skipped, no xfail added this
294
+ turn). Re-run a validation command (suite, typecheck, build) only
295
+ when its inputs changed since its last green run; ONE full-suite
296
+ pass belongs immediately before the final message, not after
297
+ every increment.
294
298
  7. Mark completed. Append non-obvious findings / learnings.
295
- 8. After each increment, re-run every criterion's scenario. Record
296
- PASS/FAIL inline with the evidence paths AND the cleanup receipt.
297
- Loop until all PASS.
298
-
299
- Parallel-batch independent reads / searches / subagents within a step,
300
- but NEVER parallelise RED and GREEN of the same criterion.
299
+ 8. After each increment, re-run the scenarios that increment could
300
+ have affected; re-run the full set once, right before the final
301
+ message. Record PASS/FAIL inline with the evidence paths AND the
302
+ cleanup receipt. Loop until all PASS.
303
+
304
+ Within a step, follow Finding things; NEVER parallelise RED and GREEN of
305
+ the same criterion.
306
+
307
+ # Waiting discipline (a poll costs a full model round)
308
+ Every status check you issue as a tool call replays the entire
309
+ accumulated context through the model. When a command will run long
310
+ (installs, builds, test suites, containers, CI), run it to completion
311
+ in ONE call with a timeout sized to the expected duration, or send
312
+ output to a log file and read it once when a completion signal is
313
+ expected. Never re-poll the same surface with empty reads or
314
+ sub-minute waits — batch waiting into the fewest, longest blocking
315
+ calls the harness allows, and do independent root work while the
316
+ command runs. If two consecutive checks show no state change, double
317
+ the wait before the next check or switch to a completion signal.
301
318
 
302
319
  # Codex subagent reliability
303
320
  Every `multi_agent_v1.spawn_agent` message is self-contained and starts with
304
- `TASK: <imperative assignment>`, then names `DELIVERABLE`, `SCOPE`, and
305
- `VERIFY`. State that it is an executable assignment, not a context
306
- handoff. Use `fork_context: false` unless full history is truly
321
+ `TASK: <imperative assignment>`, then names `DELIVERABLE`, `SCOPE`,
322
+ `VERIFY`, and `STOP WHEN` the observable condition that ends the
323
+ child's run; a child without a stop condition wanders past its goal.
324
+ State that it is an executable assignment, not a context handoff. Use `fork_context: false` unless full history is truly
307
325
  required; paste only the context the child needs. Full-history forks can
308
326
  make the child continue old parent context instead of the delegated task.
309
327
  If your tool list has a flat `spawn_agent` with a required `task_name` instead of `multi_agent_v1.*` (`multi_agent_v2`), rewrite: `fork_context: false` becomes `fork_turns: "none"`, `send_input` becomes `send_message`, finished agents end on their own (no `close_agent`; `followup_task` re-tasks, `interrupt_agent` stops), and `wait_agent` takes only `timeout_ms`, returning on any child mailbox activity.
@@ -413,7 +431,6 @@ message + present for approval.
413
431
  - Never suppress lints / errors / test failures. Never delete, skip,
414
432
  `.only`, `.skip`, `xfail`, or comment out tests to green the suite.
415
433
  - Never claim done from inference — only from captured evidence.
416
- - Parallel tool calls for any independent work.
417
434
 
418
435
  # Output discipline
419
436
  - First line literally: `ULTRAWORK MODE ENABLED!`
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.18.1) Checking Ultrawork Trigger"
10
+ "statusMessage": "(OmO 4.18.2) Checking Ultrawork Trigger"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ultrawork",
3
- "version": "4.18.1",
3
+ "version": "4.18.2",
4
4
  "description": "Codex plugin that injects the ultrawork orchestration directive and ships LazyCodex planning, review, QA, and gate agent roles.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -112,9 +112,7 @@ notepad with a one-line reason each. Skipping a skill that fits the
112
112
  task is a defect. Open a skill's body only when THIS session will
113
113
  execute its workflow; skills a delegated session needs are named in
114
114
  its prompt and read there, not here.
115
- Next, fire the first discovery wave in ONE parallel action (Finding
116
- things below): direct lookups plus `explorer` / `librarian` children
117
- for unfamiliar layout or external contracts.
115
+ Next, fire the first discovery wave under Finding things below.
118
116
  Then run Tier triage (above) on the change set and record the tier —
119
117
  tier sizes evidence and review, never who plans. Size planning by
120
118
  what the wave left UNDECIDED, not by how many steps you can list:
@@ -214,25 +212,27 @@ GOOD pair (test-first, ordered):
214
212
  BAD: "Implement feature" / "Fix bug" / "Add tests later" / writing
215
213
  production code before its failing test → rewrite.
216
214
 
217
- # Finding things (lead with these, parallel-flood the first wave)
215
+ # Finding things (lead with these, code-mode the first wave)
218
216
  Never guess from memory — locate with the right tool, and re-read before
219
- you claim or change. Fire 3+ independent lookups in one action;
220
- serialize only when one output strictly feeds the next.
221
- - CodeGraph, when `codegraph_*` tools exist -> use `codegraph_explore`
222
- first for how/where/what/flow questions and before edits; if absent,
223
- inactive/uninitialized, or cold-start unavailable, keep moving with
224
- Read/Grep/Glob/LSP and the ast-grep skill.
225
- - Repo-wide inspection, CLI smoke tests, git/history, bounded command
226
- output use native shell commands directly: `rg`, `rg --files`,
227
- `cat`, and `git`. Narrow huge output before reading it.
228
- - Symbols definitions, references, rename impact, diagnostics →
229
- `lsp_goto_definition`, `lsp_find_references`, `lsp_symbols`,
230
- `lsp_diagnostics`. Use the LSP, not text search, for anything
231
- symbol-shaped.
232
- - Structural shapes call/function/class/import patterns, codemods →
233
- the `ast-grep` skill or `sg` CLI with `$VAR` / `$$$` metavars.
234
- - Text / strings / comments / logs → `rg`. File-name discovery →
235
- `glob` / `find`. Verbatim content `read`.
217
+ you claim or change. **USE CODE MODE AGGRESSIVELY FOR BOUNDED WAVES.**
218
+ When multiple independent tool calls produce results that can be materially
219
+ filtered, joined, deduplicated, or reduced, make ONE `exec` / eval JavaScript
220
+ program that calls eligible tools concurrently with `Promise.all` and emits only
221
+ decision-relevant evidence. For shell-native repo work without programmatic
222
+ tool access, use ONE Python script with `concurrent.futures`, `subprocess`,
223
+ and utility functions to batch commands and reduce output. Keep direct calls
224
+ when one result chooses the next action, outputs are already small, semantic
225
+ judgment is required between calls, approval or side effects are involved,
226
+ or native artifacts / citations must be preserved.
227
+ - Architecture / flow / blast radius → `codegraph_explore` first when
228
+ `codegraph_*` exists; if unavailable, continue with repo tools and LSP.
229
+ - **SYMBOLS REQUIRE LSP** — definitions, references, rename impact,
230
+ workspace symbols, and diagnostics use the available `lsp_*` tools, not
231
+ text search. Run diagnostics after edits and treat errors as blocking.
232
+ - Repo text / filenames / history / bounded shell output → `rg`,
233
+ `rg --files`, `git`, and native utilities; narrow output in-program.
234
+ - Structural call / function / class / import shapes and codemods → the
235
+ `ast-grep` skill or `sg` with `$VAR` / `$$$` metavariables.
236
236
  When discovery needs multiple angles or the module layout is
237
237
  unfamiliar, delegate to the `explorer` subagent (read-only codebase
238
238
  search, absolute-path results). For research that leaves the repo —
@@ -296,21 +296,39 @@ Until every success criterion PASSES with its evidence captured:
296
296
  vars. Append a one-line cleanup receipt to the notepad next to the
297
297
  artifact, e.g. `cleanup: killed 12345; tmux kill-session ulw-qa-foo;
298
298
  rm -rf /tmp/ulw.aB12cD`. No receipt → criterion stays in_progress.
299
- 6. Verify: LSP diagnostics clean on changed files + full test suite
300
- green (no skipped, no xfail added this turn).
299
+ 6. Verify: LSP diagnostics clean on changed files + the test scope
300
+ this criterion touched green (no skipped, no xfail added this
301
+ turn). Re-run a validation command (suite, typecheck, build) only
302
+ when its inputs changed since its last green run; ONE full-suite
303
+ pass belongs immediately before the final message, not after
304
+ every increment.
301
305
  7. Mark completed. Append non-obvious findings / learnings.
302
- 8. After each increment, re-run every criterion's scenario. Record
303
- PASS/FAIL inline with the evidence paths AND the cleanup receipt.
304
- Loop until all PASS.
305
-
306
- Parallel-batch independent reads / searches / subagents within a step,
307
- but NEVER parallelise RED and GREEN of the same criterion.
306
+ 8. After each increment, re-run the scenarios that increment could
307
+ have affected; re-run the full set once, right before the final
308
+ message. Record PASS/FAIL inline with the evidence paths AND the
309
+ cleanup receipt. Loop until all PASS.
310
+
311
+ Within a step, follow Finding things; NEVER parallelise RED and GREEN of
312
+ the same criterion.
313
+
314
+ # Waiting discipline (a poll costs a full model round)
315
+ Every status check you issue as a tool call replays the entire
316
+ accumulated context through the model. When a command will run long
317
+ (installs, builds, test suites, containers, CI), run it to completion
318
+ in ONE call with a timeout sized to the expected duration, or send
319
+ output to a log file and read it once when a completion signal is
320
+ expected. Never re-poll the same surface with empty reads or
321
+ sub-minute waits — batch waiting into the fewest, longest blocking
322
+ calls the harness allows, and do independent root work while the
323
+ command runs. If two consecutive checks show no state change, double
324
+ the wait before the next check or switch to a completion signal.
308
325
 
309
326
  # Codex subagent reliability
310
327
  Every `multi_agent_v1.spawn_agent` message is self-contained and starts with
311
- `TASK: <imperative assignment>`, then names `DELIVERABLE`, `SCOPE`, and
312
- `VERIFY`. State that it is an executable assignment, not a context
313
- handoff. Use `fork_context: false` unless full history is truly
328
+ `TASK: <imperative assignment>`, then names `DELIVERABLE`, `SCOPE`,
329
+ `VERIFY`, and `STOP WHEN` the observable condition that ends the
330
+ child's run; a child without a stop condition wanders past its goal.
331
+ State that it is an executable assignment, not a context handoff. Use `fork_context: false` unless full history is truly
314
332
  required; paste only the context the child needs. Full-history forks can
315
333
  make the child continue old parent context instead of the delegated task.
316
334
  If your tool list has a flat `spawn_agent` with a required `task_name` instead of `multi_agent_v1.*` (`multi_agent_v2`), rewrite: `fork_context: false` becomes `fork_turns: "none"`, `send_input` becomes `send_message`, finished agents end on their own (no `close_agent`; `followup_task` re-tasks, `interrupt_agent` stops), and `wait_agent` takes only `timeout_ms`, returning on any child mailbox activity.
@@ -420,7 +438,6 @@ message + present for approval.
420
438
  - Never suppress lints / errors / test failures. Never delete, skip,
421
439
  `.only`, `.skip`, `xfail`, or comment out tests to green the suite.
422
440
  - Never claim done from inference — only from captured evidence.
423
- - Parallel tool calls for any independent work.
424
441
 
425
442
  # Output discipline
426
443
  - First line literally: `ULTRAWORK MODE ENABLED!`
@@ -105,9 +105,7 @@ notepad with a one-line reason each. Skipping a skill that fits the
105
105
  task is a defect. Open a skill's body only when THIS session will
106
106
  execute its workflow; skills a delegated session needs are named in
107
107
  its prompt and read there, not here.
108
- Next, fire the first discovery wave in ONE parallel action (Finding
109
- things below): direct lookups plus `explorer` / `librarian` children
110
- for unfamiliar layout or external contracts.
108
+ Next, fire the first discovery wave under Finding things below.
111
109
  Then run Tier triage (above) on the change set and record the tier —
112
110
  tier sizes evidence and review, never who plans. Size planning by
113
111
  what the wave left UNDECIDED, not by how many steps you can list:
@@ -207,25 +205,27 @@ GOOD pair (test-first, ordered):
207
205
  BAD: "Implement feature" / "Fix bug" / "Add tests later" / writing
208
206
  production code before its failing test → rewrite.
209
207
 
210
- # Finding things (lead with these, parallel-flood the first wave)
208
+ # Finding things (lead with these, code-mode the first wave)
211
209
  Never guess from memory — locate with the right tool, and re-read before
212
- you claim or change. Fire 3+ independent lookups in one action;
213
- serialize only when one output strictly feeds the next.
214
- - CodeGraph, when `codegraph_*` tools exist -> use `codegraph_explore`
215
- first for how/where/what/flow questions and before edits; if absent,
216
- inactive/uninitialized, or cold-start unavailable, keep moving with
217
- Read/Grep/Glob/LSP and the ast-grep skill.
218
- - Repo-wide inspection, CLI smoke tests, git/history, bounded command
219
- output use native shell commands directly: `rg`, `rg --files`,
220
- `cat`, and `git`. Narrow huge output before reading it.
221
- - Symbols definitions, references, rename impact, diagnostics →
222
- `lsp_goto_definition`, `lsp_find_references`, `lsp_symbols`,
223
- `lsp_diagnostics`. Use the LSP, not text search, for anything
224
- symbol-shaped.
225
- - Structural shapes call/function/class/import patterns, codemods →
226
- the `ast-grep` skill or `sg` CLI with `$VAR` / `$$$` metavars.
227
- - Text / strings / comments / logs → `rg`. File-name discovery →
228
- `glob` / `find`. Verbatim content `read`.
210
+ you claim or change. **USE CODE MODE AGGRESSIVELY FOR BOUNDED WAVES.**
211
+ When multiple independent tool calls produce results that can be materially
212
+ filtered, joined, deduplicated, or reduced, make ONE `exec` / eval JavaScript
213
+ program that calls eligible tools concurrently with `Promise.all` and emits only
214
+ decision-relevant evidence. For shell-native repo work without programmatic
215
+ tool access, use ONE Python script with `concurrent.futures`, `subprocess`,
216
+ and utility functions to batch commands and reduce output. Keep direct calls
217
+ when one result chooses the next action, outputs are already small, semantic
218
+ judgment is required between calls, approval or side effects are involved,
219
+ or native artifacts / citations must be preserved.
220
+ - Architecture / flow / blast radius → `codegraph_explore` first when
221
+ `codegraph_*` exists; if unavailable, continue with repo tools and LSP.
222
+ - **SYMBOLS REQUIRE LSP** — definitions, references, rename impact,
223
+ workspace symbols, and diagnostics use the available `lsp_*` tools, not
224
+ text search. Run diagnostics after edits and treat errors as blocking.
225
+ - Repo text / filenames / history / bounded shell output → `rg`,
226
+ `rg --files`, `git`, and native utilities; narrow output in-program.
227
+ - Structural call / function / class / import shapes and codemods → the
228
+ `ast-grep` skill or `sg` with `$VAR` / `$$$` metavariables.
229
229
  When discovery needs multiple angles or the module layout is
230
230
  unfamiliar, delegate to the `explorer` subagent (read-only codebase
231
231
  search, absolute-path results). For research that leaves the repo —
@@ -289,21 +289,39 @@ Until every success criterion PASSES with its evidence captured:
289
289
  vars. Append a one-line cleanup receipt to the notepad next to the
290
290
  artifact, e.g. `cleanup: killed 12345; tmux kill-session ulw-qa-foo;
291
291
  rm -rf /tmp/ulw.aB12cD`. No receipt → criterion stays in_progress.
292
- 6. Verify: LSP diagnostics clean on changed files + full test suite
293
- green (no skipped, no xfail added this turn).
292
+ 6. Verify: LSP diagnostics clean on changed files + the test scope
293
+ this criterion touched green (no skipped, no xfail added this
294
+ turn). Re-run a validation command (suite, typecheck, build) only
295
+ when its inputs changed since its last green run; ONE full-suite
296
+ pass belongs immediately before the final message, not after
297
+ every increment.
294
298
  7. Mark completed. Append non-obvious findings / learnings.
295
- 8. After each increment, re-run every criterion's scenario. Record
296
- PASS/FAIL inline with the evidence paths AND the cleanup receipt.
297
- Loop until all PASS.
298
-
299
- Parallel-batch independent reads / searches / subagents within a step,
300
- but NEVER parallelise RED and GREEN of the same criterion.
299
+ 8. After each increment, re-run the scenarios that increment could
300
+ have affected; re-run the full set once, right before the final
301
+ message. Record PASS/FAIL inline with the evidence paths AND the
302
+ cleanup receipt. Loop until all PASS.
303
+
304
+ Within a step, follow Finding things; NEVER parallelise RED and GREEN of
305
+ the same criterion.
306
+
307
+ # Waiting discipline (a poll costs a full model round)
308
+ Every status check you issue as a tool call replays the entire
309
+ accumulated context through the model. When a command will run long
310
+ (installs, builds, test suites, containers, CI), run it to completion
311
+ in ONE call with a timeout sized to the expected duration, or send
312
+ output to a log file and read it once when a completion signal is
313
+ expected. Never re-poll the same surface with empty reads or
314
+ sub-minute waits — batch waiting into the fewest, longest blocking
315
+ calls the harness allows, and do independent root work while the
316
+ command runs. If two consecutive checks show no state change, double
317
+ the wait before the next check or switch to a completion signal.
301
318
 
302
319
  # Codex subagent reliability
303
320
  Every `multi_agent_v1.spawn_agent` message is self-contained and starts with
304
- `TASK: <imperative assignment>`, then names `DELIVERABLE`, `SCOPE`, and
305
- `VERIFY`. State that it is an executable assignment, not a context
306
- handoff. Use `fork_context: false` unless full history is truly
321
+ `TASK: <imperative assignment>`, then names `DELIVERABLE`, `SCOPE`,
322
+ `VERIFY`, and `STOP WHEN` the observable condition that ends the
323
+ child's run; a child without a stop condition wanders past its goal.
324
+ State that it is an executable assignment, not a context handoff. Use `fork_context: false` unless full history is truly
307
325
  required; paste only the context the child needs. Full-history forks can
308
326
  make the child continue old parent context instead of the delegated task.
309
327
  If your tool list has a flat `spawn_agent` with a required `task_name` instead of `multi_agent_v1.*` (`multi_agent_v2`), rewrite: `fork_context: false` becomes `fork_turns: "none"`, `send_input` becomes `send_message`, finished agents end on their own (no `close_agent`; `followup_task` re-tasks, `interrupt_agent` stops), and `wait_agent` takes only `timeout_ms`, returning on any child mailbox activity.
@@ -413,7 +431,6 @@ message + present for approval.
413
431
  - Never suppress lints / errors / test failures. Never delete, skip,
414
432
  `.only`, `.skip`, `xfail`, or comment out tests to green the suite.
415
433
  - Never claim done from inference — only from captured evidence.
416
- - Parallel tool calls for any independent work.
417
434
 
418
435
  # Output discipline
419
436
  - First line literally: `ULTRAWORK MODE ENABLED!`
@@ -2943,7 +2943,7 @@ function boulderContinuationWillFire(cwd, sessionId) {
2943
2943
  const entry = work;
2944
2944
  const sessionIds = Array.isArray(entry["session_ids"]) ? entry["session_ids"] : [];
2945
2945
  const continuable = entry["status"] === "active" || entry["status"] === "paused";
2946
- return continuable && sessionIds.includes(`codex:${sessionId}`) && boulderPlanHasRemainingTask(cwd, entry);
2946
+ return continuable && sessionIds.includes(`codex:${sessionId}`) && boulderPlanHasChecklist(cwd, entry);
2947
2947
  });
2948
2948
  } catch (error) {
2949
2949
  if (error instanceof Error)
@@ -2961,7 +2961,7 @@ function transcriptShowsContextPressure(transcriptPath) {
2961
2961
  throw error;
2962
2962
  }
2963
2963
  }
2964
- function boulderPlanHasRemainingTask(cwd, entry) {
2964
+ function boulderPlanHasChecklist(cwd, entry) {
2965
2965
  const activePlan = entry["active_plan"];
2966
2966
  if (typeof activePlan !== "string" || activePlan.trim().length === 0)
2967
2967
  return false;
@@ -2970,7 +2970,7 @@ function boulderPlanHasRemainingTask(cwd, entry) {
2970
2970
  const candidates = typeof worktree === "string" && worktree.trim().length > 0 && !isAbsolute2(activePlan) ? [join3(isAbsolute2(worktree) ? worktree : join3(cwd, worktree), activePlan), planPath] : [planPath];
2971
2971
  for (const candidate of candidates) {
2972
2972
  try {
2973
- return readFileSync4(candidate, "utf8").split(/\r?\n/).some((line) => line.startsWith("- [ ] "));
2973
+ return readFileSync4(candidate, "utf8").split(/\r?\n/).some((line) => line.startsWith("- [ ] ") || line.startsWith("- [x] ") || line.startsWith("- [X] "));
2974
2974
  } catch (error) {
2975
2975
  if (!(error instanceof Error))
2976
2976
  throw error;
@@ -139,7 +139,7 @@ function boulderContinuationWillFire(cwd, sessionId) {
139
139
  const entry = work;
140
140
  const sessionIds = Array.isArray(entry["session_ids"]) ? entry["session_ids"] : [];
141
141
  const continuable = entry["status"] === "active" || entry["status"] === "paused";
142
- return continuable && sessionIds.includes(`codex:${sessionId}`) && boulderPlanHasRemainingTask(cwd, entry);
142
+ return continuable && sessionIds.includes(`codex:${sessionId}`) && boulderPlanHasChecklist(cwd, entry);
143
143
  });
144
144
  }
145
145
  catch (error) {
@@ -159,10 +159,9 @@ function transcriptShowsContextPressure(transcriptPath) {
159
159
  throw error;
160
160
  }
161
161
  }
162
- // start-work-continuation only fires while its plan checklist has remaining
163
- // items; a boulder work whose plan is exhausted (or unreadable) leaves the
164
- // Stop event to this hook.
165
- function boulderPlanHasRemainingTask(cwd, entry) {
162
+ // start-work-continuation owns an active Boulder plan until its final gate marks
163
+ // the work complete, including the zero-remaining checklist state.
164
+ function boulderPlanHasChecklist(cwd, entry) {
166
165
  const activePlan = entry["active_plan"];
167
166
  if (typeof activePlan !== "string" || activePlan.trim().length === 0)
168
167
  return false;
@@ -175,7 +174,7 @@ function boulderPlanHasRemainingTask(cwd, entry) {
175
174
  try {
176
175
  return readFileSync(candidate, "utf8")
177
176
  .split(/\r?\n/)
178
- .some((line) => line.startsWith("- [ ] "));
177
+ .some((line) => line.startsWith("- [ ] ") || line.startsWith("- [x] ") || line.startsWith("- [X] "));
179
178
  }
180
179
  catch (error) {
181
180
  if (!(error instanceof Error))
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit --with-ultrawork",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 4.18.1) Checking Ulw-Loop Steering"
10
+ "statusMessage": "(OmO 4.18.2) Checking Ulw-Loop Steering"
11
11
  }
12
12
  ]
13
13
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO 4.18.1) Enforcing Unlimited Ulw-Loop Budget"
23
+ "statusMessage": "(OmO 4.18.2) Enforcing Unlimited Ulw-Loop Budget"
24
24
  }
25
25
  ]
26
26
  },
@@ -31,7 +31,7 @@
31
31
  "type": "command",
32
32
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use-spawn",
33
33
  "timeout": 5,
34
- "statusMessage": "(OmO 4.18.1) Guarding Ulw-Loop Spawns"
34
+ "statusMessage": "(OmO 4.18.2) Guarding Ulw-Loop Spawns"
35
35
  }
36
36
  ]
37
37
  }
@@ -43,7 +43,7 @@
43
43
  "type": "command",
44
44
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook stop",
45
45
  "timeout": 10,
46
- "statusMessage": "(OmO 4.18.1) Checking Ulw-Loop Resume"
46
+ "statusMessage": "(OmO 4.18.2) Checking Ulw-Loop Resume"
47
47
  }
48
48
  ]
49
49
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ulw-loop",
3
- "version": "4.18.1",
3
+ "version": "4.18.2",
4
4
  "description": "Codex plugin: durable repo-native multi-goal orchestration with embedded success criteria and observable evidence audit.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -187,7 +187,7 @@ Trigger only for the final aggregate goal after every criterion in every goal is
187
187
  2. FREEZE first — no more edits or rebases. At the frozen HEAD, re-run Manual-QA for any PASS criterion whose stamped tree differs from `git rev-parse --short "HEAD^{tree}"`, so every criterion is proven on the frozen tree; each artifact exists and is non-empty.
188
188
  3a. Spawn lazycodex-code-reviewer and lazycodex-qa-executor in parallel (`fork_context: false` on v1; `fork_turns: "none"` on v2) with brief, goals, desired outcome, diff, evidence; wait for BOTH and confirm their report artifacts exist on disk.
189
189
  3b. Only then spawn lazycodex-gate-reviewer with those artifact paths.
190
- 3c. The gate's approval binds to the frozen tree and covers its three lanes — code quality, hands-on QA, and goal verification. A later rebase or amend that keeps the tree identical keeps the approval; changed content needs fresh review of the delta.
190
+ 3c. The gate's approval binds to the frozen tree and full commit SHA and covers its three lanes — code quality, hands-on QA, and goal verification. Immediately append one durable `.omo/ulw-loop/ledger.jsonl` record per passing lane with the lane name, full SHA, verdict, and report artifact/source. Before reuse after continuation or compaction, re-read the ledger and require the exact lane/SHA pair; memory or an unstamped report is not coverage. A later rebase or amend that keeps the tree identical still has a new SHA and needs fresh lane stamps; changed content needs fresh review of the delta.
191
191
  4. Treat timeout, missing deliverable, ack-only, `BLOCKED:`, or inconclusive review as a blocker. Any fix restarts the freeze at the new HEAD: re-run ONLY the proofs it invalidated and stamp the fresh output — never regenerate all evidence or relabel stale output to HEAD — re-review the delta at most TWICE; then record-review-blockers (step 5) and surface to the user.
192
192
  5. If review remains blocked, run `omo ulw-loop record-review-blockers --goal-id <id> --title "<...>" --objective "<...>" --evidence "<review findings>" --codex-goal-json <snapshot> --json`.
193
193
  6. If clean, checkpoint final completion:
@@ -142,7 +142,7 @@ function boulderContinuationWillFire(cwd: string, sessionId: string): boolean {
142
142
  const entry = work as Record<string, unknown>;
143
143
  const sessionIds = Array.isArray(entry["session_ids"]) ? entry["session_ids"] : [];
144
144
  const continuable = entry["status"] === "active" || entry["status"] === "paused";
145
- return continuable && sessionIds.includes(`codex:${sessionId}`) && boulderPlanHasRemainingTask(cwd, entry);
145
+ return continuable && sessionIds.includes(`codex:${sessionId}`) && boulderPlanHasChecklist(cwd, entry);
146
146
  });
147
147
  } catch (error) {
148
148
  if (error instanceof Error) return false;
@@ -160,10 +160,9 @@ function transcriptShowsContextPressure(transcriptPath: string): boolean {
160
160
  }
161
161
  }
162
162
 
163
- // start-work-continuation only fires while its plan checklist has remaining
164
- // items; a boulder work whose plan is exhausted (or unreadable) leaves the
165
- // Stop event to this hook.
166
- function boulderPlanHasRemainingTask(cwd: string, entry: Record<string, unknown>): boolean {
163
+ // start-work-continuation owns an active Boulder plan until its final gate marks
164
+ // the work complete, including the zero-remaining checklist state.
165
+ function boulderPlanHasChecklist(cwd: string, entry: Record<string, unknown>): boolean {
167
166
  const activePlan = entry["active_plan"];
168
167
  if (typeof activePlan !== "string" || activePlan.trim().length === 0) return false;
169
168
  const planPath = isAbsolute(activePlan) ? activePlan : join(cwd, activePlan);
@@ -176,7 +175,7 @@ function boulderPlanHasRemainingTask(cwd: string, entry: Record<string, unknown>
176
175
  try {
177
176
  return readFileSync(candidate, "utf8")
178
177
  .split(/\r?\n/)
179
- .some((line) => line.startsWith("- [ ] "));
178
+ .some((line) => line.startsWith("- [ ] ") || line.startsWith("- [x] ") || line.startsWith("- [X] "));
180
179
  } catch (error) {
181
180
  if (!(error instanceof Error)) throw error;
182
181
  }
@@ -110,7 +110,7 @@ describe("runStopResumeHook", () => {
110
110
  expect(runStopResumeHook(stopPayload())).toBe("");
111
111
  });
112
112
 
113
- it("#given an active boulder work whose plan is exhausted #when the hook runs #then resumes instead of deferring", () => {
113
+ it("#given an active boulder work whose plan is exhausted #when the hook runs #then defers to the final gate continuation", () => {
114
114
  writeGoals([pendingGoal()]);
115
115
  const plan = writeBoulderPlan(false);
116
116
  writeFileSync(
@@ -118,7 +118,7 @@ describe("runStopResumeHook", () => {
118
118
  JSON.stringify({ works: { w1: { session_ids: ["codex:s1"], status: "active", active_plan: plan } } }),
119
119
  );
120
120
 
121
- expect(JSON.parse(runStopResumeHook(stopPayload())).decision).toBe("block");
121
+ expect(runStopResumeHook(stopPayload())).toBe("");
122
122
  });
123
123
 
124
124
  it("#given a flat legacy boulder work with remaining plan tasks #when the hook runs #then still defers", () => {
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/git-bash/dist/cli.js\" hook post-compact",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.18.1) Resetting Git Bash MCP Reminder",
10
+ "statusMessage": "(OmO 4.18.2) Resetting Git Bash MCP Reminder",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\git-bash\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lsp/dist/cli.js\" hook post-compact",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.18.1) Resetting LSP Diagnostics Cache",
10
+ "statusMessage": "(OmO 4.18.2) Resetting LSP Diagnostics Cache",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lsp\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook post-compact",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 4.18.1) Resetting Project Rule Cache",
10
+ "statusMessage": "(OmO 4.18.2) Resetting Project Rule Cache",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/codegraph/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 4.18.1) Checking CodeGraph Init Guidance",
10
+ "statusMessage": "(OmO 4.18.2) Checking CodeGraph Init Guidance",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\codegraph\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/comment-checker/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 30,
10
- "statusMessage": "(OmO 4.18.1) Checking Comments",
10
+ "statusMessage": "(OmO 4.18.2) Checking Comments",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\comment-checker\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lsp/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 60,
10
- "statusMessage": "(OmO 4.18.1) Checking LSP Diagnostics",
10
+ "statusMessage": "(OmO 4.18.2) Checking LSP Diagnostics",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lsp\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],