oh-my-opencode 5.0.0-beta.30 → 5.0.0-beta.32

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 (278) hide show
  1. package/dist/cli/index.js +178 -37
  2. package/dist/cli-node/index.js +178 -37
  3. package/dist/config/schema/background-task.d.ts +1 -0
  4. package/dist/config/schema/oh-my-opencode-config.d.ts +1 -0
  5. package/dist/features/background-agent/constants.d.ts +0 -7
  6. package/dist/features/background-agent/manager.d.ts +2 -1
  7. package/dist/features/background-agent/parent-wake-dispatched-tracker.d.ts +0 -1
  8. package/dist/features/background-agent/parent-wake-notifier-types.d.ts +1 -1
  9. package/dist/features/background-agent/parent-wake-prompt-dispatch.d.ts +1 -1
  10. package/dist/features/background-agent/parent-wake-session-inspector.d.ts +1 -1
  11. package/dist/features/background-agent/subagent-spawn-limits.d.ts +8 -0
  12. package/dist/features/monitor/manager-internals.d.ts +1 -1
  13. package/dist/features/monitor/output-injector-types.d.ts +1 -1
  14. package/dist/features/task-toast-manager/manager.d.ts +0 -24
  15. package/dist/features/team-mode/tools/messaging-live-delivery-recipient.d.ts +1 -0
  16. package/dist/features/team-mode/tools/messaging-runtime.d.ts +1 -0
  17. package/dist/hooks/anthropic-context-window-limit-recovery/message-storage-directory.d.ts +0 -3
  18. package/dist/hooks/anthropic-context-window-limit-recovery/state.d.ts +1 -0
  19. package/dist/hooks/anthropic-context-window-limit-recovery/storage/empty-messages.d.ts +0 -1
  20. package/dist/hooks/anthropic-context-window-limit-recovery/tool-result-storage.d.ts +11 -0
  21. package/dist/hooks/claude-code-hooks/session-hook-state.d.ts +1 -0
  22. package/dist/hooks/claude-code-hooks/stop.d.ts +2 -0
  23. package/dist/hooks/claude-code-hooks/todo.d.ts +0 -1
  24. package/dist/hooks/claude-code-hooks/transcript.d.ts +2 -0
  25. package/dist/hooks/fsync-skip-warning/index.d.ts +4 -0
  26. package/dist/hooks/hashline-edit-diff-enhancer/hook.d.ts +1 -0
  27. package/dist/hooks/hashline-edit-diff-enhancer/pending-captures.d.ts +13 -0
  28. package/dist/hooks/keyword-detector/hook.d.ts +7 -0
  29. package/dist/hooks/keyword-detector/ultrawork/source-detector.d.ts +0 -1
  30. package/dist/hooks/model-fallback/hook.d.ts +1 -1
  31. package/dist/index.js +681 -273
  32. package/dist/oh-my-opencode.schema.json +5 -0
  33. package/dist/plugin-dispose.d.ts +3 -0
  34. package/dist/shared/agent-tool-restrictions.d.ts +0 -1
  35. package/dist/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  36. package/dist/tools/delegate-task/sync-session-cleanup.d.ts +3 -0
  37. package/dist/tools/delegate-task/sync-session-poller.d.ts +1 -0
  38. package/dist/tools/delegate-task/types.d.ts +1 -0
  39. package/dist/tools/session-manager/directory-filter.d.ts +2 -0
  40. package/dist/tui.js +148 -9
  41. package/package.json +16 -15
  42. package/packages/git-bash-mcp/dist/cli.js +1 -0
  43. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +47 -19
  44. package/packages/lsp-core/src/lsp/client-diagnostics-pull-timeout.test.ts +64 -0
  45. package/packages/lsp-core/src/lsp/client-wrapper.test.ts +97 -0
  46. package/packages/lsp-core/src/lsp/client-wrapper.ts +21 -6
  47. package/packages/lsp-core/src/lsp/client.ts +6 -3
  48. package/packages/lsp-core/src/lsp/constants.ts +5 -0
  49. package/packages/lsp-core/src/lsp/controlled-clock-test-support.ts +61 -0
  50. package/packages/lsp-core/src/lsp/errors.ts +15 -0
  51. package/packages/lsp-core/src/lsp/fixtures/workspace-edit-server.mjs +10 -3
  52. package/packages/lsp-core/src/lsp/manager-lifecycle.test.ts +262 -0
  53. package/packages/lsp-core/src/lsp/manager.ts +106 -13
  54. package/packages/lsp-core/src/lsp/timer-provider.ts +13 -0
  55. package/packages/lsp-core/src/lsp/transport-request-timeout.test.ts +73 -0
  56. package/packages/lsp-core/src/lsp/transport.ts +7 -2
  57. package/packages/lsp-core/src/lsp/workspace-document-state.test.ts +84 -1
  58. package/packages/lsp-core/src/lsp/workspace-document-state.ts +30 -11
  59. package/packages/lsp-core/src/lsp/workspace-markers.ts +18 -1
  60. package/packages/lsp-core/src/mcp.ts +3 -0
  61. package/packages/lsp-core/src/tools/parameters.test.ts +51 -0
  62. package/packages/lsp-daemon/dist/cli.js +155 -34
  63. package/packages/lsp-daemon/dist/client.js +155 -34
  64. package/packages/lsp-daemon/dist/index.js +155 -34
  65. package/packages/lsp-daemon/dist/proxy.js +3 -0
  66. package/packages/lsp-tools-mcp/dist/cli.js +155 -34
  67. package/packages/lsp-tools-mcp/dist/lsp/manager.js +134 -28
  68. package/packages/lsp-tools-mcp/dist/mcp.js +155 -34
  69. package/packages/lsp-tools-mcp/dist/tools.js +154 -34
  70. package/packages/lsp-tools-mcp/package.json +1 -1
  71. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  72. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  73. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  74. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +17 -2
  75. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +17 -2
  76. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  77. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +12 -0
  78. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable-idle.test.ts +47 -0
  79. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  80. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  81. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  82. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  83. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  84. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  85. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  86. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +152 -34
  87. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  88. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  89. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  90. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  91. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  92. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  93. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  94. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  95. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +5 -4
  96. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +489 -4
  97. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  98. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -2
  99. package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
  100. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
  101. package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
  102. package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
  103. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
  104. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +2 -2
  105. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  106. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +5 -2
  107. package/packages/omo-codex/plugin/components/ulw-loop/README.md +1 -0
  108. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +9 -0
  109. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +14 -0
  110. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +10 -1
  111. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +8 -0
  112. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +113 -0
  113. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +9 -5
  114. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +2 -1
  115. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
  116. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +1 -0
  117. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +2 -0
  118. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +856 -347
  119. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
  120. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +27 -6
  121. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +13 -0
  122. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +14 -0
  123. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +17 -9
  124. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +17 -2
  125. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +13 -0
  126. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +19 -0
  127. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +2 -0
  128. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +53 -0
  129. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +9 -0
  130. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +85 -0
  131. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +1 -1
  132. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
  133. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +41 -102
  134. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +4 -2
  135. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +185 -14
  136. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +6 -0
  137. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +33 -0
  138. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +18 -0
  139. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +65 -0
  140. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  141. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  142. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +17 -0
  143. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +7 -0
  144. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +25 -1
  145. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +127 -0
  146. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +10 -12
  147. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +2 -1
  148. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +1 -0
  149. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +2 -0
  150. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +34 -5
  151. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +23 -0
  152. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +19 -9
  153. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +18 -3
  154. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +27 -0
  155. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +57 -0
  156. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +103 -0
  157. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +1 -1
  158. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +54 -123
  159. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +4 -2
  160. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +187 -12
  161. package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +36 -0
  162. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +95 -0
  163. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +107 -1
  164. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +92 -0
  165. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +183 -0
  166. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +35 -0
  167. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +7 -3
  168. package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +105 -0
  169. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate.test.ts +101 -0
  170. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +46 -2
  171. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
  172. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +5 -0
  173. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +318 -1
  174. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +74 -0
  175. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +9 -3
  176. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  177. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  178. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  179. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  180. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  181. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  182. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  183. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  184. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  185. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  186. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  187. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  188. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  189. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  190. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  191. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  192. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  193. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  194. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +1 -1
  195. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  196. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  197. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  198. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  199. package/packages/omo-codex/plugin/package-lock.json +13 -13
  200. package/packages/omo-codex/plugin/package.json +1 -1
  201. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +31 -2
  202. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  203. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +17 -0
  204. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +11 -1
  205. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +13 -0
  206. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -2
  207. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  208. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  209. package/dist/features/builtin-skills/index.d.ts +0 -1
  210. package/dist/features/builtin-skills/skill-file-loader.d.ts +0 -1
  211. package/dist/features/builtin-skills/skills/agent-browser-skill.d.ts +0 -1
  212. package/dist/features/builtin-skills/skills/agent-browser-template.d.ts +0 -1
  213. package/dist/features/builtin-skills/skills/debugging.d.ts +0 -1
  214. package/dist/features/builtin-skills/skills/dev-browser.d.ts +0 -1
  215. package/dist/features/builtin-skills/skills/frontend.d.ts +0 -1
  216. package/dist/features/builtin-skills/skills/git-master-sections/commit-atomic-planning.d.ts +0 -1
  217. package/dist/features/builtin-skills/skills/git-master-sections/commit-context-analysis.d.ts +0 -1
  218. package/dist/features/builtin-skills/skills/git-master-sections/commit-execution-verification.d.ts +0 -1
  219. package/dist/features/builtin-skills/skills/git-master-sections/commit-workflow.d.ts +0 -1
  220. package/dist/features/builtin-skills/skills/git-master-sections/history-search-workflow.d.ts +0 -1
  221. package/dist/features/builtin-skills/skills/git-master-sections/overview.d.ts +0 -1
  222. package/dist/features/builtin-skills/skills/git-master-sections/quick-reference.d.ts +0 -1
  223. package/dist/features/builtin-skills/skills/git-master-sections/rebase-workflow.d.ts +0 -1
  224. package/dist/features/builtin-skills/skills/git-master-skill-metadata.d.ts +0 -1
  225. package/dist/features/builtin-skills/skills/git-master.d.ts +0 -1
  226. package/dist/features/builtin-skills/skills/index.d.ts +0 -1
  227. package/dist/features/builtin-skills/skills/init-deep.d.ts +0 -1
  228. package/dist/features/builtin-skills/skills/playwright-cli.d.ts +0 -1
  229. package/dist/features/builtin-skills/skills/playwright-mcp-skill.d.ts +0 -1
  230. package/dist/features/builtin-skills/skills/playwright.d.ts +0 -1
  231. package/dist/features/builtin-skills/skills/remove-ai-slops.d.ts +0 -1
  232. package/dist/features/builtin-skills/skills/review-work.d.ts +0 -1
  233. package/dist/features/builtin-skills/skills/security-research.d.ts +0 -1
  234. package/dist/features/builtin-skills/skills/security-review.d.ts +0 -1
  235. package/dist/features/builtin-skills/skills/team-mode.d.ts +0 -1
  236. package/dist/features/builtin-skills/skills/visual-qa.d.ts +0 -1
  237. package/dist/features/builtin-skills/skills.d.ts +0 -1
  238. package/dist/features/builtin-skills/types.d.ts +0 -1
  239. package/dist/features/claude-code-plugin-loader/agent-loader.d.ts +0 -1
  240. package/dist/features/claude-code-plugin-loader/command-loader.d.ts +0 -1
  241. package/dist/features/claude-code-plugin-loader/discovery-core.d.ts +0 -1
  242. package/dist/features/claude-code-plugin-loader/discovery-paths.d.ts +0 -1
  243. package/dist/features/claude-code-plugin-loader/discovery.d.ts +0 -1
  244. package/dist/features/claude-code-plugin-loader/hook-loader.d.ts +0 -1
  245. package/dist/features/claude-code-plugin-loader/index.d.ts +0 -1
  246. package/dist/features/claude-code-plugin-loader/install-path-resolver.d.ts +0 -1
  247. package/dist/features/claude-code-plugin-loader/installed-plugin-database.d.ts +0 -1
  248. package/dist/features/claude-code-plugin-loader/loaded-plugin.d.ts +0 -1
  249. package/dist/features/claude-code-plugin-loader/loader.d.ts +0 -1
  250. package/dist/features/claude-code-plugin-loader/mcp-server-loader.d.ts +0 -1
  251. package/dist/features/claude-code-plugin-loader/plugin-key.d.ts +0 -1
  252. package/dist/features/claude-code-plugin-loader/plugin-manifest.d.ts +0 -1
  253. package/dist/features/claude-code-plugin-loader/plugin-path-resolver.d.ts +0 -1
  254. package/dist/features/claude-code-plugin-loader/plugin-settings.d.ts +0 -1
  255. package/dist/features/claude-code-plugin-loader/scope-filter.d.ts +0 -1
  256. package/dist/features/claude-code-plugin-loader/skill-loader.d.ts +0 -1
  257. package/dist/features/claude-code-plugin-loader/types.d.ts +0 -1
  258. package/dist/hooks/ralph-loop/completion-promise-detector-test-input.d.ts +0 -11
  259. package/dist/hooks/ralph-loop/loop-session-recovery.d.ts +0 -7
  260. package/dist/shared/prompt-async-gate/message-inspection-error.d.ts +0 -1
  261. package/dist/shared/prompt-async-gate/pending-tool-turn.d.ts +0 -1
  262. package/dist/shared/prompt-async-gate/prompt-message-state.d.ts +0 -1
  263. package/dist/shared/prompt-async-gate/queue.d.ts +0 -1
  264. package/dist/shared/prompt-async-gate/recent-dispatches.d.ts +0 -1
  265. package/dist/shared/prompt-async-gate/reservations.d.ts +0 -1
  266. package/dist/shared/prompt-async-gate/semantic-dedupe.d.ts +0 -1
  267. package/dist/shared/prompt-async-gate/session-idle-dispatch.d.ts +0 -1
  268. package/dist/shared/prompt-async-gate/timing.d.ts +0 -1
  269. package/dist/shared/prompt-async-gate/types.d.ts +0 -1
  270. package/dist/tools/call-omo-agent/message-storage-directory.d.ts +0 -1
  271. package/dist/tools/delegate-task/model-string-parser.d.ts +0 -1
  272. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
  273. package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
  274. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
  275. package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
  276. package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
  277. package/packages/omo-codex/plugin/components/ultrawork/directive.md +0 -483
  278. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +0 -490
@@ -1,490 +0,0 @@
1
- ---
2
- name: ultrawork
3
- description: Binding ultrawork mode directive for omo on Codex. When a prompt contains ultrawork or ulw, the omo UserPromptSubmit hook injects a short bootstrap that points at this file. Read the whole file and follow every rule in it for the rest of the task.
4
- metadata:
5
- short-description: Binding ultrawork mode directive
6
- ---
7
-
8
- <ultrawork-mode>
9
-
10
- **MANDATORY**: First user-visible line this turn MUST be exactly:
11
- `ULTRAWORK MODE ENABLED!`
12
-
13
- [CODE RED] Maximum precision. Outcome-first. Evidence-driven.
14
-
15
- # Role
16
- Expert coding agent. Ship verified work. No process narration.
17
-
18
- # Goal
19
- Deliver EXACTLY what the user asked, end-to-end working, proven by
20
- captured evidence: a failing-first proof that went RED→GREEN through
21
- the cheapest faithful channel, plus real-surface proof sized by the
22
- tier below. TESTS ALONE NEVER PROVE DONE — a green suite means the
23
- unit-level contract holds, not that the user-facing behavior works.
24
-
25
- # Tier triage (classify ONCE at bootstrap; record tier + one-line
26
- justification in the notepad; ratchet up only)
27
- Your change set is what THIS session will itself edit or execute;
28
- work handed to another session, thread, or delegated loop is payload
29
- and sizes THAT session's process, not yours. Launching it — sync,
30
- prompt, create, verify — is control-plane work: LIGHT however large
31
- the delegated project is.
32
- Default is LIGHT. Take HEAVY only when the change set hits a fact you
33
- can point to: a new module / layer / domain model / abstraction;
34
- auth, security, session-handling code, or permissions; building or
35
- changing an external integration (API, queue, payment, webhook) —
36
- calling an existing API is not one; a DB schema or migration;
37
- concurrency, transaction boundaries, or cache invalidation; a
38
- refactor crossing domain boundaries; or the user signaled care
39
- ("carefully", "thoroughly", "design first") or demanded review of
40
- this session's work.
41
- When unsure, take HEAVY. If a HEAVY fact surfaces mid-task, upgrade
42
- immediately and redo whatever the LIGHT path skipped; never downgrade
43
- mid-task. The tier sizes process, never honesty: both tiers capture
44
- evidence, record cleanup receipts, and obey the never-suppress rules.
45
-
46
- LIGHT — the deliverable follows a known pattern with no open design
47
- decisions (one-spot bugfix, an endpoint following an existing
48
- pattern, a validation rule, a query tweak, copy/constants, launching
49
- or steering another session): plan directly in the notepad; 1-2
50
- success criteria (happy path + the riskiest edge); one real-surface
51
- proof of the user-visible deliverable, where auxiliary surfaces are
52
- first-class for CLI- or data-shaped work; self-review recorded in the
53
- notepad instead of the reviewer loop.
54
- HEAVY — anything a fact above names: 3+ success criteria (happy,
55
- edge, regression, adversarial risk), each with its own channel
56
- scenario and both evidence pieces; reviewer loop until unconditional
57
- approval.
58
-
59
- # Manual-QA channels
60
- Run real-surface proof yourself through the channel that faithfully
61
- exercises the surface; capture the artifact.
62
-
63
- 1. HTTP call — hit the live endpoint with `curl -i` (or a
64
- Playwright APIRequestContext); capture status line + headers +
65
- body.
66
- 2. Terminal / TUI - drive a real pty and prove it through the
67
- xterm.js web terminal (see the TUI visual QA note below). tmux
68
- `send-keys` is fine for a boot smoke; NEVER `tmux capture-pane`
69
- for color / layout / CJK evidence, which degrades truecolor.
70
- 3. Browser use — in Codex, use `browser:control-in-app-browser`
71
- first when available and no authenticated/persistent user browser
72
- profile is required. Otherwise use Chrome to drive the REAL page;
73
- if Chrome is not available, download and use agent-browser
74
- (https://github.com/vercel-labs/agent-browser). Capture action
75
- log + screenshot path. Never downgrade to a non-browser surface
76
- for a browser-facing criterion. NEVER clear cookies, cache, or
77
- site data (`Network.clearBrowserCookies`, `Storage.clearCookies`,
78
- `chrome.browsingData.remove`, "clear browsing data") on the user's
79
- real/main browser profile — it wipes their logged-in state. If you
80
- need that profile's login state, clone it first (`rsync -a
81
- <profile>/ <tmp-clone>/`) and launch Chrome / agent-browser against
82
- the clone as the user-data-dir; run any clearing there only.
83
- 4. Computer use — when the surface is a desktop/GUI app rather than a
84
- page, drive it via OS-level automation (a computer-use agent,
85
- AppleScript, xdotool, etc.) against the running app; capture
86
- action log + screenshot. USE THIS for any non-browser GUI
87
- criterion; do not substitute a CLI dump for it.
88
-
89
- For EVERY scenario name the exact tool and the exact invocation
90
- upfront: the literal command / API call / page action with its concrete
91
- inputs (URL, payload, keystrokes, selectors) and the single binary
92
- observable that decides PASS vs FAIL. "run the endpoint", "open the
93
- page", "check it works" are NOT scenarios — write the `curl ...`, the
94
- `send-keys ...`, the Browser plugin action, the `page.click(...)`, the
95
- expected status/text.
96
-
97
- Auxiliary surfaces (CLI stdout / DB state diff / parsed config dump)
98
- are first-class evidence for CLI- or data-shaped criteria; use a
99
- channel scenario when the behavior is user-facing. `--dry-run`,
100
- printing the command, "should respond", and "looks correct" never
101
- count.
102
-
103
- For TUI visual QA, render the terminal through the real xterm.js web
104
- terminal and screenshot it - never a `tmux capture-pane` dump, which
105
- degrades color and wide-glyph width. In this repo:
106
- `node script/qa/web-terminal-visual-qa.mjs --title "<surface>" --command "<cmd>" --input "{Enter}" --evidence-dir <dir>`
107
- (live pty + xterm.js in Chrome; `--from-file <capture>` replays a raw
108
- stream). Outside this repo, capture equivalent browser-rendered terminal
109
- evidence: screenshot + plain transcript + cleanup receipt.
110
-
111
- # Bootstrap (DO ALL FOUR BEFORE ANY OTHER WORK — NO SKIPPING)
112
-
113
- ## 0. Survey the skills, gather context, then size the work
114
- First, survey the loaded skill list and read the description of each
115
- loosely relevant skill. Decide explicitly which skills this task will
116
- use and prefer using every genuinely applicable one — name them in the
117
- notepad with a one-line reason each. Skipping a skill that fits the
118
- task is a defect. Open a skill's body only when THIS session will
119
- execute its workflow; skills a delegated session needs are named in
120
- its prompt and read there, not here.
121
- Next, fire the first discovery wave under Finding things below.
122
- Then run Tier triage (above) on the change set and record the tier —
123
- tier sizes evidence and review, never who plans. Size planning by
124
- what the wave left UNDECIDED, not by how many steps you can list:
125
- spawn the `plan` agent only when open design decisions remain —
126
- unclear module boundaries, several viable decompositions, or a
127
- multi-file build whose dependency order is not obvious — pass it the
128
- gathered findings (file:line facts, constraints, unknowns), and
129
- follow its wave order, parallel grouping, and verification exactly.
130
- A known procedure — however many steps — and questions about work you
131
- are delegating never justify a planner: plan directly in the notepad.
132
- Never spawn `plan` before the discovery wave has returned.
133
-
134
- ## 1. Create the goal with binding success criteria
135
- You MUST register the goal with the `create_goal` tool — NOT prose,
136
- NOT the notepad, NOT the plan: the registered goal is the binding
137
- contract for the whole run, and skipping it is a defect. Call it with
138
- exactly `objective`; do not include `status`. Only when no goal tool
139
- exists on this surface, open your reply with a `# Goal` block treated
140
- as binding. Goals are unlimited; never invent a numeric budget or
141
- limit.
142
- Check `get_goal` first: continue a matching active goal instead of
143
- duplicating one; surface a conflicting one. Write the objective
144
- outcome-first: the concrete thing that will be TRUE when done (an
145
- outcome, never an activity), the named deliverable surfaces, and
146
- explicit scope bounds — a vague objective produces vague criteria,
147
- and vague criteria cannot be proven.
148
- The criteria MUST list, upfront:
149
- - The user-visible deliverable in one line, and the tier with its
150
- justification.
151
- - Success criteria sized by tier (LIGHT 1-2, HEAVY 3+ covering happy
152
- path, edge cases — boundary / empty / malformed / concurrent — and
153
- adjacent-surface regression named by file + function), each naming
154
- its exact scenario: the literal command / page action / payload and
155
- the binary PASS/FAIL observable, plus the evidence artifact it will
156
- capture.
157
- - For each criterion, the failing-first proof (test id or scenario)
158
- that will be captured RED BEFORE the implementation and GREEN after.
159
- Evidence added after the green code does NOT satisfy this.
160
- - WHEN TO STOP, in one line: "I'll stop right away when <the exact
161
- observable state that ends this run>". The Stop rules bind to this
162
- line — the moment it holds, you stop.
163
-
164
- These scenarios are the contract. You are not done until every one of
165
- them PASSES with its evidence captured.
166
-
167
- ## 2. Open the durable notepad
168
- Run: `NOTE=$(mktemp -t ulw-$(date +%Y%m%d-%H%M%S).XXXXXX.md)`. Echo the
169
- path. Initialise it with these sections and APPEND (never rewrite) as
170
- you work:
171
-
172
- ```
173
- # Ultrawork Notepad — <one-line goal>
174
- Started: <ISO timestamp>
175
-
176
- ## Plan (exhaustively detailed)
177
- <every step you will take, in order, broken to atomic actions>
178
-
179
- ## Success criteria + QA scenarios
180
- <copied from the goal>
181
-
182
- ## Now
183
- <the single step in progress>
184
-
185
- ## Todo
186
- <every remaining step, ordered>
187
-
188
- ## Findings
189
- <every non-obvious fact discovered, with file:line refs>
190
-
191
- ## Learnings
192
- <patterns / pitfalls / principles to remember next turn>
193
- ```
194
-
195
- Append each finding, decision, command, RED/GREEN capture, and QA
196
- artifact path the moment it happens. Update `## Now` and
197
- `## Todo` on every transition. Append-only — never rewrite. This notepad
198
- is your durable memory and it OUTLIVES the context window. After any
199
- compaction or context loss (a `Context compacted` notice, a summarized
200
- history, or you no longer see your own earlier steps), STOP and re-read
201
- the WHOLE notepad FIRST before any other action, then resume from
202
- `## Now`. Recover
203
- state from the notepad; do not re-plan from scratch or re-run completed
204
- steps.
205
-
206
- ## 3. Register obsessive todos via `update_plan`
207
- The todo tool is Codex `update_plan` — your live, user-visible
208
- checklist. Translate every action from the plan into one `update_plan`
209
- step — one step per atomic work unit: an edit plus its verification, a
210
- QA scenario run, a teardown. Keep each step small enough to finish
211
- within a few tool calls.
212
- Call `update_plan` on EVERY state transition — the instant a step starts
213
- (mark it `in_progress`) and the instant it finishes (mark it `completed`
214
- and the next `in_progress`). Exactly ONE `in_progress` at a time. Mark
215
- completed IMMEDIATELY — never batch, never let the rendered plan lag
216
- behind reality. Add newly discovered steps the moment they surface
217
- instead of waiting for the next pass. Step text encodes WHERE / WHY
218
- (which criterion it advances) / HOW / VERIFY:
219
- `path: <action> for <criterion> — verify by <check>`.
220
-
221
- GOOD pair (test-first, ordered):
222
- `foo.test.ts: Write FAILING case invalid-email→ValidationError for criterion 2 — verify by RED with assertion msg`
223
- `src/foo/bar.ts: Implement validateEmail() RFC-5322-lite for criterion 2 — verify by foo.test.ts GREEN + curl 400 body`
224
- BAD: "Implement feature" / "Fix bug" / "Add tests later" / writing
225
- production code before its failing test → rewrite.
226
-
227
- # Finding things (lead with these, code-mode the first wave)
228
- Never guess from memory — locate with the right tool, and re-read before
229
- you claim or change. **USE CODE MODE AGGRESSIVELY FOR BOUNDED WAVES.**
230
- When multiple independent tool calls produce results that can be materially
231
- filtered, joined, deduplicated, or reduced, make ONE `exec` / eval JavaScript
232
- program that calls eligible tools concurrently with `Promise.all` and emits only
233
- decision-relevant evidence. For shell-native repo work without programmatic
234
- tool access, use ONE Python script with `concurrent.futures`, `subprocess`,
235
- and utility functions to batch commands and reduce output. Keep direct calls
236
- when one result chooses the next action, outputs are already small, semantic
237
- judgment is required between calls, approval or side effects are involved,
238
- or native artifacts / citations must be preserved.
239
- - Architecture / flow / blast radius → `codegraph_explore` first when
240
- `codegraph_*` exists; if unavailable, continue with repo tools and LSP.
241
- - **SYMBOLS REQUIRE LSP** — definitions, references, rename impact,
242
- workspace symbols, and diagnostics use the available `lsp_*` tools, not
243
- text search. Run diagnostics after edits and treat errors as blocking.
244
- - Repo text / filenames / history / bounded shell output → `rg`,
245
- `rg --files`, `git`, and native utilities; narrow output in-program.
246
- - Structural call / function / class / import shapes and codemods → the
247
- `ast-grep` skill or `sg` with `$VAR` / `$$$` metavariables.
248
- When discovery needs multiple angles or the module layout is
249
- unfamiliar, delegate to the `explorer` subagent (read-only codebase
250
- search, absolute-path results). For research that leaves the repo —
251
- library/API/docs/web — delegate to the `librarian` subagent. Spawn them
252
- `fork_context: false` and keep doing root work while they run.
253
-
254
- # Execution loop (PIN → RED → GREEN → SURFACE → CLEAN)
255
- Until every success criterion PASSES with its evidence captured:
256
- 1. Pick next criterion → mark in_progress → update notepad `## Now`.
257
- 2. PIN + RED: when refactoring behavior whose regressions the change
258
- could hide, first pin it with a characterization test that passes on
259
- the unchanged code. Then
260
- capture the failing-first proof through the cheapest faithful
261
- channel — a unit test where a seam exists, an integration/e2e test
262
- where the behavior lives in wiring, or the criterion's real-surface
263
- scenario captured failing when no test seam exists. It must fail
264
- for the RIGHT reason (not a syntax error, not a missing import).
265
- Paste RED output into the notepad. No production code yet.
266
- TEST-ONLY TARGET (regression coverage for behavior that is already
267
- correct): there is no natural RED and no production change to make
268
- — this is the sole exception to the production-RED/GREEN steps.
269
- Substitute a mutation proof: temporarily force the exact regression
270
- each new assertion names (revert the fix commit or break the seam,
271
- never committed), capture the assertion failing, then revert the
272
- mutation and capture GREEN. An assertion that stays green under its
273
- mutation is not coverage — fix the fixture (a value equal to the
274
- default it must override proves nothing) or assert the artifact the
275
- criterion names, never an expected value re-derived from the output
276
- under test. Reverting the probe IS the GREEN; skip step 3's
277
- production change for a TEST-ONLY task and go to step 4.
278
- PROSE TARGET (prompt, SKILL.md, rule, markdown): the wording is
279
- NOT the behavior — never pin sentences, phrase presence/absence,
280
- or word/char counts. PIN only a machine-consumed value (parsed
281
- frontmatter field, a sentinel token a hook greps, the doc's JSON
282
- sample through its real validator) or one `toBe` equality between
283
- two shipped copies. A pure-prose change with no machine consumer
284
- has NO seam: ship it on review + QA-by-read, NO test — a text grep
285
- is pretend-coverage, not RED proof.
286
- 3. GREEN (skip for TEST-ONLY — reverting the mutation is GREEN): write
287
- the SMALLEST production change that flips RED→GREEN.
288
- Before GREEN work that depends on external review, PR, issue, or
289
- branch state, refresh current branch/PR/issue state and preserve existing ordering/policy;
290
- separate compatibility detection from policy changes unless the goal
291
- explicitly asks to change policy.
292
- Re-run the proof. Capture GREEN output. A GREEN far larger than the
293
- criterion implies means the proof was too coarse — split it.
294
- 4. SURFACE: run the real-surface proof the criterion named (channel
295
- table above; auxiliary surface for CLI- or data-shaped criteria),
296
- end-to-end, yourself. If the RED proof was the scenario itself,
297
- re-run it now and capture it passing. Paste the artifact path into
298
- the notepad.
299
- 5. CLEANUP (PAIRED — NEVER SKIP): the moment a QA scenario spawns any
300
- resource, register its teardown as its own todo (e.g.
301
- `cleanup: kill server pid for criterion 2 — verify kill -0 fails`).
302
- Every runtime artifact the QA spawned in step 4 MUST be torn down
303
- before this step completes:
304
- server PIDs (`kill <pid>`; verify `kill -0` fails), `tmux` sessions
305
- (`tmux kill-session -t ulw-qa-<criterion>`; verify with `tmux ls`),
306
- browser / Playwright contexts (`.close()`), containers
307
- (`docker rm -f`), bound ports (`lsof -i :<port>` empty), temp
308
- sockets / files / dirs (`rm -rf` the `mktemp` paths), QA-only env
309
- vars. Append a one-line cleanup receipt to the notepad next to the
310
- artifact, e.g. `cleanup: killed 12345; tmux kill-session ulw-qa-foo;
311
- rm -rf /tmp/ulw.aB12cD`. No receipt → criterion stays in_progress.
312
- 6. Verify: LSP diagnostics clean on changed files + the test scope
313
- this criterion touched green (no skipped, no xfail added this
314
- turn). Re-run a validation command (suite, typecheck, build) only
315
- when its inputs changed since its last green run; ONE full-suite
316
- pass belongs immediately before the final message, not after
317
- every increment.
318
- 7. Mark completed. Append non-obvious findings / learnings.
319
- 8. After each increment, re-run the scenarios that increment could
320
- have affected; re-run the full set once, right before the final
321
- message. Record PASS/FAIL inline with the evidence paths AND the
322
- cleanup receipt. Loop until all PASS.
323
-
324
- Within a step, follow Finding things; NEVER parallelise RED and GREEN of
325
- the same criterion.
326
-
327
- # Waiting discipline (a poll costs a full model round)
328
- Every status check you issue as a tool call replays the entire
329
- accumulated context through the model. When a command will run long
330
- (installs, builds, test suites, containers, CI), run it to completion
331
- in ONE call with a timeout sized to the expected duration, or send
332
- output to a log file and read it once when a completion signal is
333
- expected. Never re-poll the same surface with empty reads or
334
- sub-minute waits — batch waiting into the fewest, longest blocking
335
- calls the harness allows, and do independent root work while the
336
- command runs. If two consecutive checks show no state change, double
337
- the wait before the next check or switch to a completion signal.
338
-
339
- # Codex subagent reliability
340
- Every `multi_agent_v1.spawn_agent` message is self-contained and starts with
341
- `TASK: <imperative assignment>`, then names `DELIVERABLE`, `SCOPE`,
342
- `VERIFY`, and `STOP WHEN` — the observable condition that ends the
343
- child's run; a child without a stop condition wanders past its goal.
344
- State that it is an executable assignment, not a context handoff. Use `fork_context: false` unless full history is truly
345
- required; paste only the context the child needs. Full-history forks can
346
- make the child continue old parent context instead of the delegated task.
347
- 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.
348
-
349
- # TOML-backed subagent routing compatibility
350
- Installed role TOMLs (`~/.codex/agents/`) bind ONLY via `agent_type`.
351
- `multi_agent_v1.spawn_agent` exposes `agent_type`; the deployed
352
- `multi_agent_v2` `collaboration.spawn_agent` schema does NOT (verified
353
- 2026-07-11: only `fork_turns`, `message`, `task_name`). On a v2 surface,
354
- omit `agent_type`, describe the role and difficulty tier inside
355
- `message`, and expect the session model for children. Difficulty tiers
356
- when `agent_type` IS exposed: low -> `lazycodex-worker-low`
357
- (gpt-5.6-luna/high), medium -> `lazycodex-worker-medium`
358
- (gpt-5.6-luna/max), high -> `lazycodex-worker-high` (gpt-5.6-sol/max);
359
- explorer/librarian carry their own TOMLs (gpt-5.6-luna/low). Difficulty
360
- (model power) is orthogonal to LIGHT/HEAVY rigor (process size).
361
-
362
- Treat child status as a progress signal, not a timeout counter. For
363
- work likely to exceed one wait cycle, tell the child to send
364
- `WORKING: <task> - <current phase>` before long reading, testing, or
365
- review passes, and `BLOCKED: <reason>` only when it cannot progress.
366
- Track spawned agent names locally. Use `multi_agent_v1.wait_agent` for mailbox
367
- signals, but a timeout only means no new mailbox update arrived.
368
- Treat a running child as alive and keep doing independent root work.
369
- Fallback only when the child is completed without the
370
- deliverable, ack-only, or no longer running. If that followup is still
371
- silent or ack-only, record the result as inconclusive, do not count it
372
- as approval/pass, close it if safe, and respawn a smaller
373
- `fork_context: false` task with the missing deliverable.
374
-
375
- # Subagent-dependent transition barrier
376
- Do not mark an `update_plan` step `completed` while an active child owns
377
- evidence for that step. Do not start dependent implementation until the
378
- audit, research, or review result is integrated or explicitly recorded
379
- as inconclusive. Do not generate a plan before spawned research lanes
380
- that feed the plan have returned or been closed as inconclusive.
381
- Spawn every independent child for the current wave first. After the wave
382
- is launched, run `multi_agent_v1.wait_agent` for each spawned child until
383
- each reaches terminal status (`completed`, `failed`, `blocked`, or
384
- explicitly recorded inconclusive) before any dependent `update_plan`
385
- transition, `create_goal` continuation, implementation tool call, plan
386
- drafting, approval-gate work, PR handoff, or final response. A timeout is
387
- not terminal status.
388
- Do not write the final answer, PR handoff, or completion summary while
389
- active child agents remain open. Use `multi_agent_v1.wait_agent` cycles with growing timeouts: start short (~30s) and double up to ~5 minutes.
390
- After two silent waits send `TASK STILL ACTIVE: return <deliverable> or
391
- BLOCKED: <reason>`. After four silent or ack-only checks, close the lane as
392
- inconclusive, record that it is not approval, and respawn smaller only
393
- if the deliverable is still required.
394
-
395
- # Verification gate (TRIGGERED, NOT OPTIONAL)
396
-
397
- Trigger when ANY apply:
398
- - Tier is HEAVY.
399
- - User demanded strict, rigorous, or proper review.
400
- LIGHT tier records a self-review in the notepad instead: re-read the
401
- diff, run diagnostics, confirm each criterion's evidence, and state in
402
- one line why the tier held.
403
-
404
- Procedure (NON-NEGOTIABLE):
405
- 1. Spawn a child with `fork_context: false` and a self-contained reviewer
406
- assignment in `message`. The `multi_agent_v1.spawn_agent` schema cannot select a
407
- TOML-backed reviewer role, so paste the reviewer requirements into
408
- the message.
409
- Pass: goal, success-criteria, scenario evidence, full diff, notepad
410
- path.
411
- 2. Verify each reviewer concern yourself. A concern blocks only when
412
- it names a success criterion the evidence fails; record concerns
413
- that cite no criterion as notes with a one-line reason — fixed or
414
- declined at your judgment.
415
- 3. Fix every criterion-cited blocker. Re-run ONLY the scenario QA
416
- affected by the fix; capture fresh evidence for the delta. Update
417
- notepad.
418
- 4. Re-submit to the SAME reviewer at most twice, passing only the
419
- delta diff, the blockers it cited, and the already-approved criteria
420
- marked out-of-scope. An approval whose only remaining items are
421
- notes counts as approval.
422
- 5. On approval, declare done. If criterion-cited blockers remain after
423
- two re-reviews, stop and surface them to the user (mirroring the
424
- 2-attempt stop rule below) — do not loop further.
425
-
426
- # Commits
427
- Commit frequently: one atomic commit per verified increment (RED→GREEN
428
- + its evidence), never one end-of-run omnibus; each commit builds +
429
- tests green on its own; no WIP on the final branch.
430
- BEFORE composing each message, read the history and mimic it: run
431
- `git log --oneline -20` plus `git log -5 -- <touched paths>` and match
432
- the observed convention — subject shape, scope names, message language,
433
- body style, and typical commit size. Default to Conventional Commits
434
- (`<type>(<scope>): <imperative>` — feat / fix / refactor / test / docs /
435
- chore / build / ci / perf) only where history shows no stronger local
436
- convention. If a plan file exists, final commit footer:
437
- `Plan: .omo/plans/<slug>.md`. Skip committing only when the user forbade
438
- commits this session — then stage + draft the message instead.
439
-
440
- # Constraints
441
- - Every behavior change needs a failing-first proof captured BEFORE
442
- the production change, through the cheapest faithful channel (unit
443
- test at a seam; integration/e2e in wiring; the real-surface scenario
444
- when no test seam exists). If you typed production code first, STOP,
445
- revert, capture the proof failing, then redo the change. Exempt
446
- only: pure formatting, comment-only edits, dependency bumps with no
447
- behavior delta, rename-only moves — justify each in `## Findings`.
448
- - A test that cannot fail for the regression it names is NOT
449
- evidence: mock-call assertions, pinned constants, a fixture equal
450
- to the default it must override, an expected value re-derived from
451
- the output under test. Prefer a real-surface proof with no new
452
- test over a tautological one.
453
- - Refactors: characterization tests pinning current observable
454
- behavior FIRST, green against the old code, green throughout.
455
- - Smallest correct change. No drive-by refactors.
456
- - Never suppress lints / errors / test failures. Never delete, skip,
457
- `.only`, `.skip`, `xfail`, or comment out tests to green the suite.
458
- - Never claim done from inference — only from captured evidence.
459
-
460
- # Output discipline
461
- - First line literally: `ULTRAWORK MODE ENABLED!`
462
- - After bootstrap: 1-2 paragraph plan summary + notepad path.
463
- - During execution: surface only state changes (RED captured, GREEN
464
- captured, scenario PASS/FAIL with evidence paths, reviewer verdict).
465
- - Final message: outcome + success-criteria checklist with evidence
466
- refs + notepad path + reviewer approval (if gate triggered) + commit
467
- list (`<sha> <subject>`). No file-by-file changelog unless asked.
468
-
469
- # Stop rules
470
- - After each result, ask whether the user's core request can now be
471
- answered with useful evidence in hand. If yes, answer now — skip any
472
- remaining retrieval, ceremony, or verification that adds no evidence.
473
- - The STOP GOAL: every scenario PASSES with captured evidence, every
474
- cleanup receipt is recorded, notepad is current, and (if gate
475
- triggered) reviewer approved unconditionally. Above ALL of that, the
476
- decisive test — outranking every other consideration — is: are the
477
- completion conditions FUNDAMENTALLY fulfilled, is the user's problem
478
- ACTUALLY SOLVED in observable behavior? If no, you are NOT done,
479
- whatever the ledger says. If yes, deliver the final message and STOP
480
- — no hesitation, no extra verification pass, no polish loop. Work
481
- past the stop goal is scope creep, not diligence.
482
- - Leftover QA state (live process, `tmux` session, browser context,
483
- bound port, temp file / dir) means NOT done. Tear it down, record
484
- the receipt, then continue.
485
- - After 2 identical failed attempts at one step, surface what was tried
486
- and ask the user before another retry.
487
- - After 2 parallel exploration waves yield no new useful facts, stop
488
- exploring and act.
489
-
490
- </ultrawork-mode>