oh-my-opencode 5.0.0-beta.47 → 5.0.0-beta.49

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 (129) hide show
  1. package/README.ja.md +35 -27
  2. package/README.ko.md +35 -27
  3. package/README.md +19 -34
  4. package/README.ru.md +33 -28
  5. package/README.zh-cn.md +31 -27
  6. package/dist/cli/index.js +19 -15
  7. package/dist/cli-node/index.js +19 -15
  8. package/dist/features/team-mode/tools/messaging-fallback-wake.d.ts +2 -0
  9. package/dist/features/team-mode/tools/messaging-live-delivery-recipient.d.ts +2 -0
  10. package/dist/features/team-mode/tools/messaging-runtime.d.ts +6 -0
  11. package/dist/index.js +30 -18
  12. package/dist/tui.js +4 -0
  13. package/package.json +14 -14
  14. package/packages/lsp-daemon/dist/cli.js +6 -3
  15. package/packages/lsp-daemon/dist/client.js +6 -3
  16. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +6 -1
  17. package/packages/lsp-daemon/dist/ensure-daemon.js +9 -2
  18. package/packages/lsp-daemon/dist/index.js +6 -3
  19. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +2 -2
  20. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  21. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  22. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  23. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  25. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  27. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  28. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  29. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +6 -3
  30. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  31. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  32. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  33. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  34. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  35. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  36. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  37. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  38. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +11 -10
  39. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  40. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  41. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +1 -1
  42. package/packages/omo-codex/plugin/components/ulw-execute-continuation/AGENTS.md +3 -3
  43. package/packages/omo-codex/plugin/components/ulw-execute-continuation/README.md +3 -3
  44. package/packages/omo-codex/plugin/components/ulw-execute-continuation/directive.md +4 -4
  45. package/packages/omo-codex/plugin/components/ulw-execute-continuation/dist/cli.js +1 -1
  46. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -13
  47. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  48. package/packages/omo-codex/plugin/components/ulw-execute-continuation/src/codex-hook.ts +1 -1
  49. package/packages/omo-codex/plugin/components/ulw-execute-continuation/src/types.ts +1 -1
  50. package/packages/omo-codex/plugin/components/ulw-execute-continuation/test/cli.test.ts +3 -7
  51. package/packages/omo-codex/plugin/components/ulw-execute-continuation/test/codex-hook.test.ts +16 -0
  52. package/packages/omo-codex/plugin/components/ulw-loop/README.md +2 -2
  53. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +11 -10
  54. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +8 -15
  55. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +2 -2
  56. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
  57. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +1 -1
  58. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +88 -67
  59. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +3 -4
  60. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +1 -1
  61. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +1 -1
  62. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +13 -16
  63. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +2 -0
  64. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +47 -26
  65. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +2 -2
  66. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +1 -0
  67. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +14 -4
  68. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +17 -4
  69. package/packages/omo-codex/plugin/components/ulw-loop/package.json +2 -2
  70. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +1 -1
  71. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +8 -14
  72. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +2 -2
  73. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +1 -1
  74. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +5 -1
  75. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +3 -4
  76. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +1 -1
  77. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +4 -1
  78. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +21 -16
  79. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +52 -25
  80. package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +2 -2
  81. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +16 -4
  82. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +11 -12
  83. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-fields-messages.test.ts +98 -0
  84. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-lazycodex-surface.test.ts +93 -0
  85. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +9 -4
  86. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +10 -0
  87. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +70 -7
  88. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  89. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  92. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  93. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  94. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  95. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +18 -0
  96. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  97. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  103. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  104. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  105. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  106. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  107. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  108. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  109. package/packages/omo-codex/plugin/package-lock.json +12 -12
  110. package/packages/omo-codex/plugin/package.json +1 -1
  111. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +61 -33
  112. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +4 -2
  113. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +4 -2
  114. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +4 -2
  115. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +13 -3
  116. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +11 -10
  117. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +11 -6
  118. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +24 -0
  119. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +1 -1
  120. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +4 -2
  121. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +4 -2
  122. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +8 -4
  123. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +62 -0
  124. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +3 -3
  125. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +23 -1
  126. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +36 -16
  127. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  128. package/packages/prompts-core/prompts/ultrawork/codex.md +11 -10
  129. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +0 -17
package/dist/index.js CHANGED
@@ -26475,6 +26475,10 @@ Design-first mindset (AFTER design system is established):
26475
26475
 
26476
26476
  AVOID: Generic fonts, purple gradients on white, predictable layouts, cookie-cutter patterns.
26477
26477
  </DESIGN_QUALITY>
26478
+
26479
+ <OBSERVE_EACH_CHANGE>
26480
+ Visual state is not text: after each change, render or screenshot the affected surface and look at it before making the next change. Check desktop and mobile widths for blank, misframed, or overlapping output; check a 3D scene from several angles. Compare what you see with the reference or the stated intent, and ask only where two readings of that intent diverge. A change you have not looked at is not done.
26481
+ </OBSERVE_EACH_CHANGE>
26478
26482
  </Category_Context>`;
26479
26483
  var ARTISTRY_CATEGORY_PROMPT_APPEND = `<Category_Context>
26480
26484
  You are working on HIGHLY CREATIVE / ARTISTIC tasks.
@@ -96714,7 +96718,7 @@ function getCachedVersion(options = {}) {
96714
96718
  // package.json
96715
96719
  var package_default = {
96716
96720
  name: "oh-my-opencode",
96717
- version: "5.0.0-beta.47",
96721
+ version: "5.0.0-beta.49",
96718
96722
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
96719
96723
  main: "./dist/index.js",
96720
96724
  types: "dist/index.d.ts",
@@ -96898,7 +96902,7 @@ var package_default = {
96898
96902
  zod: "^4.4.3"
96899
96903
  },
96900
96904
  devDependencies: {
96901
- "@code-yeongyu/senpi": "2026.9.7",
96905
+ "@code-yeongyu/senpi": "2026.9.8",
96902
96906
  "@oh-my-opencode/agents-md-core": "workspace:*",
96903
96907
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
96904
96908
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -96939,18 +96943,18 @@ var package_default = {
96939
96943
  typescript: "^7.0.2"
96940
96944
  },
96941
96945
  optionalDependencies: {
96942
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.47",
96943
- "oh-my-opencode-darwin-x64": "5.0.0-beta.47",
96944
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.47",
96945
- "oh-my-opencode-linux-arm64": "5.0.0-beta.47",
96946
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.47",
96947
- "oh-my-opencode-linux-x64": "5.0.0-beta.47",
96948
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.47",
96949
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.47",
96950
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.47",
96951
- "oh-my-opencode-windows-arm64": "5.0.0-beta.47",
96952
- "oh-my-opencode-windows-x64": "5.0.0-beta.47",
96953
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.47"
96946
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.49",
96947
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.49",
96948
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.49",
96949
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.49",
96950
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.49",
96951
+ "oh-my-opencode-linux-x64": "5.0.0-beta.49",
96952
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.49",
96953
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.49",
96954
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.49",
96955
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.49",
96956
+ "oh-my-opencode-windows-x64": "5.0.0-beta.49",
96957
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.49"
96954
96958
  },
96955
96959
  overrides: {
96956
96960
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -133185,6 +133189,9 @@ async function enqueueFallbackMailboxWake(input) {
133185
133189
  dedupeKey: `team-live-delivery-fallback:${input.messageId}`,
133186
133190
  queueBehavior: "enqueue",
133187
133191
  durableRetry: true,
133192
+ settleMs: input.dispatchTiming?.fallbackWakeSettleMs,
133193
+ postDispatchHoldMs: input.dispatchTiming?.postDispatchHoldMs,
133194
+ queueRetryMs: input.dispatchTiming?.queueRetryMs,
133188
133195
  shouldDispatch: () => shouldDispatchFallbackMailboxWake(input),
133189
133196
  retryDispatchFailure: isPreSendConnectionFailure2,
133190
133197
  input: {
@@ -133276,7 +133283,8 @@ async function deliverLiveToRecipient(input) {
133276
133283
  reservation,
133277
133284
  config: config2,
133278
133285
  directory,
133279
- settleMs
133286
+ settleMs,
133287
+ dispatchTiming
133280
133288
  } = input;
133281
133289
  const recipientSessionId = recipientMember.sessionId;
133282
133290
  if (recipientMember.pendingInjectedMessageIds.length > 0) {
@@ -133294,7 +133302,8 @@ async function deliverLiveToRecipient(input) {
133294
133302
  teamRunId,
133295
133303
  recipientName,
133296
133304
  messageId: message.messageId,
133297
- config: config2
133305
+ config: config2,
133306
+ dispatchTiming
133298
133307
  });
133299
133308
  }
133300
133309
  return;
@@ -133337,6 +133346,7 @@ async function deliverLiveToRecipient(input) {
133337
133346
  source: "team-live-delivery",
133338
133347
  queueBehavior: "defer",
133339
133348
  settleMs,
133349
+ postDispatchHoldMs: dispatchTiming?.postDispatchHoldMs,
133340
133350
  input: {
133341
133351
  path: { id: recipientSessionId },
133342
133352
  body: buildMemberPromptBody(recipientMember, envelope),
@@ -133383,7 +133393,8 @@ async function deliverLiveToRecipient(input) {
133383
133393
  teamRunId,
133384
133394
  recipientName,
133385
133395
  messageId: message.messageId,
133386
- config: config2
133396
+ config: config2,
133397
+ dispatchTiming
133387
133398
  });
133388
133399
  return;
133389
133400
  }
@@ -133472,7 +133483,8 @@ async function deliverLive(client3, message, teamRunId, deliveredTo, config2, di
133472
133483
  reservation,
133473
133484
  config: config2,
133474
133485
  directory,
133475
- settleMs: deps.liveDeliverySettleMs
133486
+ settleMs: deps.liveDeliverySettleMs,
133487
+ dispatchTiming: deps.dispatchTiming
133476
133488
  });
133477
133489
  }
133478
133490
  }
package/dist/tui.js CHANGED
@@ -4747,6 +4747,10 @@ Design-first mindset (AFTER design system is established):
4747
4747
 
4748
4748
  AVOID: Generic fonts, purple gradients on white, predictable layouts, cookie-cutter patterns.
4749
4749
  </DESIGN_QUALITY>
4750
+
4751
+ <OBSERVE_EACH_CHANGE>
4752
+ Visual state is not text: after each change, render or screenshot the affected surface and look at it before making the next change. Check desktop and mobile widths for blank, misframed, or overlapping output; check a 3D scene from several angles. Compare what you see with the reference or the stated intent, and ask only where two readings of that intent diverge. A change you have not looked at is not done.
4753
+ </OBSERVE_EACH_CHANGE>
4750
4754
  </Category_Context>`, ARTISTRY_CATEGORY_PROMPT_APPEND = `<Category_Context>
4751
4755
  You are working on HIGHLY CREATIVE / ARTISTIC tasks.
4752
4756
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.0.0-beta.47",
3
+ "version": "5.0.0-beta.49",
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",
@@ -184,7 +184,7 @@
184
184
  "zod": "^4.4.3"
185
185
  },
186
186
  "devDependencies": {
187
- "@code-yeongyu/senpi": "2026.9.7",
187
+ "@code-yeongyu/senpi": "2026.9.8",
188
188
  "@oh-my-opencode/agents-md-core": "workspace:*",
189
189
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
190
190
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -225,18 +225,18 @@
225
225
  "typescript": "^7.0.2"
226
226
  },
227
227
  "optionalDependencies": {
228
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.47",
229
- "oh-my-opencode-darwin-x64": "5.0.0-beta.47",
230
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.47",
231
- "oh-my-opencode-linux-arm64": "5.0.0-beta.47",
232
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.47",
233
- "oh-my-opencode-linux-x64": "5.0.0-beta.47",
234
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.47",
235
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.47",
236
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.47",
237
- "oh-my-opencode-windows-arm64": "5.0.0-beta.47",
238
- "oh-my-opencode-windows-x64": "5.0.0-beta.47",
239
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.47"
228
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.49",
229
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.49",
230
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.49",
231
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.49",
232
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.49",
233
+ "oh-my-opencode-linux-x64": "5.0.0-beta.49",
234
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.49",
235
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.49",
236
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.49",
237
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.49",
238
+ "oh-my-opencode-windows-x64": "5.0.0-beta.49",
239
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.49"
240
240
  },
241
241
  "overrides": {
242
242
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -6127,14 +6127,17 @@ function pingDaemon(paths, token, timeoutMs = PROBE_TIMEOUT_MS, signal) {
6127
6127
  socket.connect(paths.socket);
6128
6128
  });
6129
6129
  }
6130
- function spawnDaemonProcess(paths) {
6130
+ function spawnDaemonProcess(paths, deps = {}) {
6131
6131
  mkdirSync3(dirname10(paths.log), { recursive: true });
6132
6132
  const logFd = openSync2(paths.log, "a");
6133
6133
  try {
6134
- const child = spawn2(resolveDaemonNodeExecutable(), [paths.cliPath, "daemon"], {
6134
+ const spawnDaemonChild = deps.spawn ?? spawn2;
6135
+ const executable = deps.resolveExecutable?.() ?? resolveDaemonNodeExecutable();
6136
+ const child = spawnDaemonChild(executable, [paths.cliPath, "daemon"], {
6135
6137
  detached: true,
6136
6138
  stdio: ["ignore", logFd, logFd],
6137
- windowsHide: true
6139
+ windowsHide: true,
6140
+ env: { ...process.env, BUN_BE_BUN: "1" }
6138
6141
  });
6139
6142
  child.once("spawn", () => closeSync2(logFd));
6140
6143
  child.once("error", (error) => {
@@ -719,14 +719,17 @@ function pingDaemon(paths, token, timeoutMs = PROBE_TIMEOUT_MS, signal) {
719
719
  socket.connect(paths.socket);
720
720
  });
721
721
  }
722
- function spawnDaemonProcess(paths) {
722
+ function spawnDaemonProcess(paths, deps = {}) {
723
723
  mkdirSync2(dirname3(paths.log), { recursive: true });
724
724
  const logFd = openSync2(paths.log, "a");
725
725
  try {
726
- const child = spawn(resolveDaemonNodeExecutable(), [paths.cliPath, "daemon"], {
726
+ const spawnDaemonChild = deps.spawn ?? spawn;
727
+ const executable = deps.resolveExecutable?.() ?? resolveDaemonNodeExecutable();
728
+ const child = spawnDaemonChild(executable, [paths.cliPath, "daemon"], {
727
729
  detached: true,
728
730
  stdio: ["ignore", logFd, logFd],
729
- windowsHide: true
731
+ windowsHide: true,
732
+ env: { ...process.env, BUN_BE_BUN: "1" }
730
733
  });
731
734
  child.once("spawn", () => closeSync2(logFd));
732
735
  child.once("error", (error) => {
@@ -1,3 +1,4 @@
1
+ import { type ChildProcess, type SpawnOptions } from "node:child_process";
1
2
  import type { OwnerPing } from "./ownership.js";
2
3
  import { type DaemonPaths } from "./paths.js";
3
4
  import { type DaemonRuntimeDefaults } from "./runtime-contract.js";
@@ -19,7 +20,11 @@ export interface EnsureDaemonOptions {
19
20
  export declare function ensureDaemonRunning(paths: DaemonPaths, deps?: EnsureDaemonDeps, options?: EnsureDaemonOptions): Promise<void>;
20
21
  export declare function probeDaemon(paths: DaemonPaths, timeoutMs?: number, signal?: AbortSignal): Promise<boolean>;
21
22
  export declare function pingDaemon(paths: DaemonPaths, token: string, timeoutMs?: number, signal?: AbortSignal): Promise<OwnerPing | null>;
22
- export declare function spawnDaemonProcess(paths: DaemonPaths): void;
23
+ export interface SpawnDaemonProcessDeps {
24
+ spawn: (executable: string, args: readonly string[], options: SpawnOptions) => ChildProcess;
25
+ resolveExecutable: () => string;
26
+ }
27
+ export declare function spawnDaemonProcess(paths: DaemonPaths, deps?: Partial<SpawnDaemonProcessDeps>): void;
23
28
  export declare function resolveDaemonNodeExecutable(cachedExecPath?: string, originalArgv0?: string, pathExists?: (path: string) => boolean): string;
24
29
  export declare function resolveDaemonCliPath(env?: NodeJS.ProcessEnv, defaults?: DaemonRuntimeDefaults): string;
25
30
  export declare function defaultEnsureDaemonDeps(): EnsureDaemonDeps;
@@ -81,14 +81,21 @@ export function pingDaemon(paths, token, timeoutMs = PROBE_TIMEOUT_MS, signal) {
81
81
  socket.connect(paths.socket);
82
82
  });
83
83
  }
84
- export function spawnDaemonProcess(paths) {
84
+ export function spawnDaemonProcess(paths, deps = {}) {
85
85
  mkdirSync(dirname(paths.log), { recursive: true });
86
86
  const logFd = openSync(paths.log, "a");
87
87
  try {
88
- const child = spawn(resolveDaemonNodeExecutable(), [paths.cliPath, "daemon"], {
88
+ const spawnDaemonChild = deps.spawn ?? spawn;
89
+ const executable = deps.resolveExecutable?.() ?? resolveDaemonNodeExecutable();
90
+ const child = spawnDaemonChild(executable, [paths.cliPath, "daemon"], {
89
91
  detached: true,
90
92
  stdio: ["ignore", logFd, logFd],
91
93
  windowsHide: true,
94
+ // Under the packaged runtime execPath is the compiled omo binary, not a
95
+ // node interpreter; without BUN_BE_BUN it runs its embedded entrypoint, so
96
+ // the CLI argv boots a billable agent session instead of the daemon
97
+ // (issue #7914). Inert for node and for the bun interpreter itself.
98
+ env: { ...process.env, BUN_BE_BUN: "1" },
92
99
  });
93
100
  child.once("spawn", () => closeSync(logFd));
94
101
  child.once("error", (error) => {
@@ -3861,14 +3861,17 @@ function pingDaemon(paths, token, timeoutMs = PROBE_TIMEOUT_MS, signal) {
3861
3861
  socket.connect(paths.socket);
3862
3862
  });
3863
3863
  }
3864
- function spawnDaemonProcess(paths) {
3864
+ function spawnDaemonProcess(paths, deps = {}) {
3865
3865
  mkdirSync2(dirname6(paths.log), { recursive: true });
3866
3866
  const logFd = openSync2(paths.log, "a");
3867
3867
  try {
3868
- const child = spawn2(resolveDaemonNodeExecutable(), [paths.cliPath, "daemon"], {
3868
+ const spawnDaemonChild = deps.spawn ?? spawn2;
3869
+ const executable = deps.resolveExecutable?.() ?? resolveDaemonNodeExecutable();
3870
+ const child = spawnDaemonChild(executable, [paths.cliPath, "daemon"], {
3869
3871
  detached: true,
3870
3872
  stdio: ["ignore", logFd, logFd],
3871
- windowsHide: true
3873
+ windowsHide: true,
3874
+ env: { ...process.env, BUN_BE_BUN: "1" }
3872
3875
  });
3873
3876
  child.once("spawn", () => closeSync2(logFd));
3874
3877
  child.once("error", (error) => {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.47",
3
+ "version": "5.0.0-beta.49",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -34,12 +34,12 @@
34
34
  "./hooks/post-tool-use-checking-lsp-diagnostics.json",
35
35
  "./hooks/post-tool-use-matching-project-rules.json",
36
36
  "./hooks/post-tool-use-checking-thread-title-hygiene.json",
37
+ "./hooks/post-tool-use-recording-spawn-admission.json",
37
38
  "./hooks/post-compact-resetting-git-bash-mcp-reminder.json",
38
39
  "./hooks/post-compact-resetting-project-rule-cache.json",
39
40
  "./hooks/post-compact-resetting-lsp-diagnostics-cache.json",
40
41
  "./hooks/stop-checking-ulw-execute-continuation.json",
41
42
  "./hooks/stop-checking-ulw-loop-resume.json",
42
- "./hooks/subagent-stop-checking-ulw-execute-continuation.json",
43
43
  "./hooks/subagent-stop-verifying-lazycodex-executor-evidence.json"
44
44
  ],
45
45
  "mcpServers": "./.mcp.json",
@@ -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.47) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.49) 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.47",
3
+ "version": "5.0.0-beta.49",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
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.47) Checking Comments"
11
+ "statusMessage": "(OmO 5.0.0-beta.49) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "5.0.0-beta.47",
3
+ "version": "5.0.0-beta.49",
4
4
  "description": "Codex plugin that runs comment-checker after edit-like PostToolUse hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO 5.0.0-beta.47) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.0.0-beta.49) Recommending Git Bash MCP"
12
12
  }
13
13
  ]
14
14
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO 5.0.0-beta.47) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.0.0-beta.49) Resetting Git Bash MCP Reminder"
24
24
  }
25
25
  ]
26
26
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-git-bash-hook",
3
- "version": "5.0.0-beta.47",
3
+ "version": "5.0.0-beta.49",
4
4
  "description": "Codex hook component that reminds Windows sessions to prefer the OMO git_bash MCP.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.47) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.0.0-beta.49) Verifying LazyCodex Executor Evidence"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
3
- "version": "5.0.0-beta.47",
3
+ "version": "5.0.0-beta.49",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "5.0.0-beta.47",
4
- "inputDigest": "sha256:94520f713de8b6ee4d0cdfc7bf4d42221ae6f23e646b8cfed12bd55fa6f298b7",
3
+ "version": "5.0.0-beta.49",
4
+ "inputDigest": "sha256:2558d595e0ff9f7b1fe251d3ce11a05dadf64b039021b5a34d5469762671b6de",
5
5
  "outputs": [
6
6
  {
7
7
  "path": "cli.d.ts",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  {
11
11
  "path": "cli.js",
12
- "sha256": "87e305eb201e11600c35d89f332ac4892d2c927ab850ab8b69c5c84255f7ef78"
12
+ "sha256": "bddbb2f82db0dffb0c2ec7b69778a63e77cac2c6a0f8bfb6d7a62980a49d14bb"
13
13
  },
14
14
  {
15
15
  "path": "codex-hook-cli.d.ts",
@@ -556,14 +556,17 @@ function pingDaemon(paths, token, timeoutMs = PROBE_TIMEOUT_MS, signal) {
556
556
  socket.connect(paths.socket);
557
557
  });
558
558
  }
559
- function spawnDaemonProcess(paths) {
559
+ function spawnDaemonProcess(paths, deps = {}) {
560
560
  mkdirSync2(dirname3(paths.log), { recursive: true });
561
561
  const logFd = openSync2(paths.log, "a");
562
562
  try {
563
- const child = spawn(resolveDaemonNodeExecutable(), [paths.cliPath, "daemon"], {
563
+ const spawnDaemonChild = deps.spawn ?? spawn;
564
+ const executable = deps.resolveExecutable?.() ?? resolveDaemonNodeExecutable();
565
+ const child = spawnDaemonChild(executable, [paths.cliPath, "daemon"], {
564
566
  detached: true,
565
567
  stdio: ["ignore", logFd, logFd],
566
- windowsHide: true
568
+ windowsHide: true,
569
+ env: { ...process.env, BUN_BE_BUN: "1" }
567
570
  });
568
571
  child.once("spawn", () => closeSync2(logFd));
569
572
  child.once("error", (error) => {
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 60,
11
- "statusMessage": "(OmO 5.0.0-beta.47) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.49) Checking LSP Diagnostics"
12
12
  }
13
13
  ]
14
14
  }
@@ -21,7 +21,7 @@
21
21
  "type": "command",
22
22
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
23
23
  "timeout": 5,
24
- "statusMessage": "(OmO 5.0.0-beta.47) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.49) Resetting LSP Diagnostics Cache"
25
25
  }
26
26
  ]
27
27
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lsp",
3
- "version": "5.0.0-beta.47",
3
+ "version": "5.0.0-beta.49",
4
4
  "description": "Codex plugin that exposes Language Server Protocol tools and post-edit diagnostics.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.47) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.49) Loading Project Rules"
11
11
  }
12
12
  ]
13
13
  }
@@ -19,7 +19,7 @@
19
19
  "type": "command",
20
20
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
21
21
  "timeout": 10,
22
- "statusMessage": "(OmO 5.0.0-beta.47) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.49) Loading Project Rules"
23
23
  }
24
24
  ]
25
25
  }
@@ -32,7 +32,7 @@
32
32
  "type": "command",
33
33
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
34
34
  "timeout": 10,
35
- "statusMessage": "(OmO 5.0.0-beta.47) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.49) Matching Project Rules"
36
36
  }
37
37
  ]
38
38
  }
@@ -45,7 +45,7 @@
45
45
  "type": "command",
46
46
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
47
47
  "timeout": 10,
48
- "statusMessage": "(OmO 5.0.0-beta.47) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.49) Resetting Project Rule Cache"
49
49
  }
50
50
  ]
51
51
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-rules",
3
- "version": "5.0.0-beta.47",
3
+ "version": "5.0.0-beta.49",
4
4
  "description": "Codex plugin that injects project rule files into model context through lifecycle hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.47) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.49) Checking Thread Title Hygiene"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-teammode",
3
- "version": "5.0.0-beta.47",
3
+ "version": "5.0.0-beta.49",
4
4
  "description": "Codex team-mode hook component that keeps background thread titles descriptive after create_thread.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.47) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 5.0.0-beta.49) Recording Session Telemetry"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-telemetry",
3
- "version": "5.0.0-beta.47",
3
+ "version": "5.0.0-beta.49",
4
4
  "description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -59,8 +59,8 @@ first-class for CLI- or data-shaped work; self-review recorded in the
59
59
  notepad instead of the reviewer loop.
60
60
  HEAVY — anything a fact above names: 3+ success criteria (happy,
61
61
  edge, regression, adversarial risk), each with its own channel
62
- scenario and both evidence pieces; reviewer loop until unconditional
63
- approval.
62
+ scenario and both evidence pieces; when the verification gate is
63
+ triggered, run the reviewer loop until unconditional approval.
64
64
 
65
65
  # Manual-QA channels
66
66
  Run real-surface proof yourself through the channel that faithfully
@@ -398,16 +398,17 @@ BLOCKED: <reason>\`. After four silent or ack-only checks, close the lane as
398
398
  inconclusive, record that it is not approval, and respawn smaller only
399
399
  if the deliverable is still required.
400
400
 
401
- # Verification gate (TRIGGERED, NOT OPTIONAL)
401
+ # Verification gate (TRIGGERED ONLY ON EXPLICIT DEMAND)
402
402
 
403
- Trigger when ANY apply:
404
- - Tier is HEAVY.
405
- - User demanded strict, rigorous, or proper review.
406
- LIGHT tier records a self-review in the notepad instead: re-read the
407
- diff, run diagnostics, confirm each criterion's evidence, and state in
408
- one line why the tier held.
403
+ Trigger ONLY when the user explicitly demanded strict, rigorous, proper,
404
+ or high-accuracy review of this work, in any language (for example,
405
+ 고정밀 or 엄격). The tier alone never triggers the gate. HEAVY without
406
+ such a demand records the same self-review as LIGHT.
407
+ LIGHT and non-triggered HEAVY work records a self-review in the notepad
408
+ instead: re-read the diff, run diagnostics, confirm each criterion's
409
+ evidence, and state in one line why the tier held.
409
410
 
410
- Procedure (NON-NEGOTIABLE):
411
+ When triggered, follow this procedure (NON-NEGOTIABLE):
411
412
  1. Spawn a child with \`fork_context: false\` and a self-contained reviewer
412
413
  assignment in \`message\`. The \`multi_agent_v1.spawn_agent\` schema cannot select a
413
414
  TOML-backed reviewer role, so paste the reviewer requirements into
@@ -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 5.0.0-beta.47) Checking Ultrawork Trigger"
10
+ "statusMessage": "(OmO 5.0.0-beta.49) Checking Ultrawork Trigger"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ultrawork",
3
- "version": "5.0.0-beta.47",
3
+ "version": "5.0.0-beta.49",
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",