lazycodex-ai 5.0.0-beta.9 → 5.0.0

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 (869) hide show
  1. package/README.ja.md +64 -69
  2. package/README.ko.md +65 -70
  3. package/README.md +108 -182
  4. package/README.ru.md +60 -68
  5. package/README.zh-cn.md +60 -69
  6. package/dist/cli/config-manager/parse-opencode-config-file.d.ts +2 -1
  7. package/dist/cli/config-manager/refresh-opencode-plugin-sandbox.d.ts +31 -0
  8. package/dist/cli/doctor/checks/browser-provider.d.ts +2 -0
  9. package/dist/cli/doctor/checks/index.d.ts +2 -0
  10. package/dist/cli/doctor/checks/latest-version.d.ts +11 -0
  11. package/dist/cli/doctor/checks/system-plugin.d.ts +4 -3
  12. package/dist/cli/doctor/checks/tui-plugin-config.d.ts +11 -0
  13. package/dist/cli/doctor/framework/constants.d.ts +5 -0
  14. package/dist/cli/doctor/framework/types.d.ts +2 -0
  15. package/dist/cli/fallback-lane-policy.d.ts +1 -0
  16. package/dist/cli/index.js +60340 -63161
  17. package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
  18. package/dist/cli/install-native/index.d.ts +12 -0
  19. package/dist/cli/install-native/legacy-omo-bin.d.ts +27 -0
  20. package/dist/cli/install-native/offer-native-setup.d.ts +31 -0
  21. package/dist/cli/install-native/omo-bin-test-fixtures.d.ts +35 -0
  22. package/dist/cli/install-native/plan.d.ts +21 -0
  23. package/dist/cli/install-native/repair-legacy-omo-bin.d.ts +26 -0
  24. package/dist/cli/install-native/run-native-install.d.ts +33 -0
  25. package/dist/cli/install-native/verify-omo-command.d.ts +22 -0
  26. package/dist/cli/install-native-dev/index.d.ts +4 -0
  27. package/dist/cli/native-dev-platform-flag.d.ts +5 -0
  28. package/dist/cli/native-edition-hint.d.ts +10 -0
  29. package/dist/cli/runtime-commands.d.ts +1 -1
  30. package/dist/cli/types.d.ts +3 -2
  31. package/dist/cli/worktree-sweep/classify.d.ts +16 -0
  32. package/dist/cli/worktree-sweep/format.d.ts +8 -0
  33. package/dist/cli/worktree-sweep/git.d.ts +19 -0
  34. package/dist/cli/worktree-sweep/index.d.ts +7 -0
  35. package/dist/cli/worktree-sweep/options.d.ts +2 -0
  36. package/dist/cli/worktree-sweep/parse-worktree-list.d.ts +8 -0
  37. package/dist/cli/worktree-sweep/sweep.d.ts +2 -0
  38. package/dist/cli/worktree-sweep/types.d.ts +65 -0
  39. package/dist/cli/worktree-sweep/worktree-sweep.d.ts +2 -0
  40. package/dist/cli-node/index.js +61667 -64465
  41. package/package.json +15 -14
  42. package/packages/git-bash-mcp/dist/cli.js +6 -1
  43. package/packages/lsp-daemon/dist/cli.js +1421 -960
  44. package/packages/lsp-daemon/dist/client.d.ts +10 -0
  45. package/packages/lsp-daemon/dist/client.js +956 -498
  46. package/packages/lsp-daemon/dist/daemon-client.d.ts +3 -0
  47. package/packages/lsp-daemon/dist/daemon-client.js +23 -3
  48. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +6 -1
  49. package/packages/lsp-daemon/dist/ensure-daemon.js +27 -5
  50. package/packages/lsp-daemon/dist/index.js +860 -407
  51. package/packages/lsp-daemon/dist/ownership.js +2 -2
  52. package/packages/lsp-daemon/dist/proxy.js +3 -0
  53. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  54. package/packages/lsp-daemon/package.json +5 -4
  55. package/packages/lsp-tools-mcp/dist/cli.js +764 -341
  56. package/packages/lsp-tools-mcp/dist/lsp/manager.js +274 -138
  57. package/packages/lsp-tools-mcp/dist/mcp.js +789 -368
  58. package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
  59. package/packages/lsp-tools-mcp/dist/tools.js +719 -302
  60. package/packages/lsp-tools-mcp/package.json +5 -4
  61. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -6
  62. package/packages/omo-codex/plugin/.mcp.json +0 -6
  63. package/packages/omo-codex/plugin/AGENTS.md +47 -0
  64. package/packages/omo-codex/plugin/README.md +6 -2
  65. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +8504 -408
  66. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  67. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  68. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  69. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +7 -1
  70. package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
  71. package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
  72. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  73. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  74. package/packages/omo-codex/plugin/components/comment-checker/package.json +6 -5
  75. package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
  76. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
  77. package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
  78. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  79. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  80. package/packages/omo-codex/plugin/components/git-bash/dist/cli.js +1 -1
  81. package/packages/omo-codex/plugin/components/git-bash/dist/codex-hook.js +2 -1
  82. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  83. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  84. package/packages/omo-codex/plugin/components/git-bash/src/codex-hook.ts +2 -1
  85. package/packages/omo-codex/plugin/components/git-bash/test/codex-hook.test.ts +6 -7
  86. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
  87. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
  88. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/directive.md +2 -0
  89. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +36 -29
  90. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +32 -26
  91. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/types.d.ts +3 -0
  92. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  93. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +6 -5
  94. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +32 -28
  95. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/types.ts +3 -0
  96. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
  97. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +134 -11
  98. package/packages/omo-codex/plugin/components/lcx/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
  99. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +7 -5
  100. package/packages/omo-codex/plugin/components/lcx/skills/lcx-report-bug/SKILL.md +5 -5
  101. package/packages/omo-codex/plugin/components/lsp/AGENTS.md +30 -15
  102. package/packages/omo-codex/plugin/components/lsp/biome.json +2 -2
  103. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
  104. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +977 -545
  105. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +1 -1
  106. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  107. package/packages/omo-codex/plugin/components/lsp/package.json +6 -5
  108. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  109. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
  110. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
  111. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
  112. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
  113. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
  114. package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
  115. package/packages/omo-codex/plugin/components/rules/README.md +2 -0
  116. package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
  117. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +5 -1
  118. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +127 -0
  119. package/packages/omo-codex/plugin/components/rules/dist/cli.js +103 -68
  120. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  121. package/packages/omo-codex/plugin/components/rules/package.json +8 -7
  122. package/packages/omo-codex/plugin/components/rules/src/config.ts +1 -2
  123. package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +1 -2
  124. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +27 -5
  125. package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +1 -4
  126. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -9
  127. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +1 -2
  128. package/packages/omo-codex/plugin/components/rules/test/dynamic-target-fingerprints.test.ts +1 -2
  129. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +7 -4
  130. package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +2 -3
  131. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +2 -3
  132. package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +38 -3
  133. package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
  134. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
  135. package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
  136. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +29 -6
  137. package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
  138. package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
  139. package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
  140. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +1 -2
  141. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  142. package/packages/omo-codex/plugin/components/teammode/package.json +6 -5
  143. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +1 -1
  144. package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +8 -0
  145. package/packages/omo-codex/plugin/components/telemetry/biome.json +2 -2
  146. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +5328 -1382
  147. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +5524 -1579
  148. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  149. package/packages/omo-codex/plugin/components/telemetry/package.json +6 -5
  150. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
  151. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
  152. package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
  153. package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
  154. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +10 -4
  155. package/packages/omo-codex/plugin/components/ultrawork/README.md +3 -1
  156. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
  157. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml +1 -1
  158. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
  159. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  160. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
  161. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  162. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
  163. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
  164. package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +1 -1
  165. package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +1 -1
  166. package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +1 -1
  167. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +20 -7
  168. package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
  169. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +478 -4
  170. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  171. package/packages/omo-codex/plugin/components/ultrawork/package.json +6 -6
  172. package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
  173. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +9 -10
  174. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +17 -13
  175. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +5 -6
  176. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +4 -4
  177. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  178. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
  179. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
  180. package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
  181. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
  182. package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
  183. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
  184. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +4 -4
  185. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
  186. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +6 -6
  187. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
  188. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +13 -13
  189. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +16 -16
  190. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +16 -0
  191. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +13 -12
  192. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
  193. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
  194. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +4 -4
  195. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
  196. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
  197. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +1 -1
  198. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
  199. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +4 -8
  200. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +22 -6
  201. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +19 -0
  202. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +17 -1
  203. package/packages/omo-codex/plugin/components/ulw-loop/README.md +12 -1
  204. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
  205. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +102 -107
  206. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +18 -0
  207. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +30 -0
  208. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +10 -4
  209. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +2 -5
  210. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +5 -78
  211. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +12 -0
  212. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +114 -0
  213. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.d.ts +7 -1
  214. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +57 -46
  215. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +2 -2
  216. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +21 -8
  217. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +2 -1
  218. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +12 -1
  219. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +1 -1
  220. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +40 -37
  221. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +2205 -737
  222. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
  223. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +28 -8
  224. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +8 -5
  225. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +35 -23
  226. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -0
  227. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +1 -0
  228. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +25 -9
  229. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.d.ts +4 -0
  230. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.js +18 -0
  231. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.d.ts +1 -0
  232. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.js +37 -0
  233. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.d.ts +1 -0
  234. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.js +24 -12
  235. package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.d.ts +4 -0
  236. package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.js +39 -0
  237. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +2 -0
  238. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +19 -4
  239. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.d.ts +19 -0
  240. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.js +108 -0
  241. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +6 -2
  242. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +54 -25
  243. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.d.ts +10 -3
  244. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.js +38 -31
  245. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +10 -7
  246. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +121 -100
  247. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.d.ts +16 -0
  248. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.js +115 -0
  249. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +18 -0
  250. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +41 -0
  251. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +7 -0
  252. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +9 -0
  253. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +12 -0
  254. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +104 -0
  255. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.d.ts +13 -1
  256. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +65 -9
  257. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +5 -1
  258. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
  259. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +72 -117
  260. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.d.ts +2 -0
  261. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +25 -13
  262. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.d.ts +2 -0
  263. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.js +157 -0
  264. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.d.ts +381 -0
  265. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.js +127 -0
  266. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.d.ts +130 -0
  267. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.js +1 -0
  268. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.d.ts +3 -0
  269. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.js +3 -0
  270. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.d.ts +5 -0
  271. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.js +67 -0
  272. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +7 -1
  273. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +190 -59
  274. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.d.ts +2 -0
  275. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.js +22 -0
  276. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.d.ts +19 -0
  277. package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.js +259 -0
  278. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +7 -0
  279. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +41 -0
  280. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-batch.js +4 -4
  281. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.d.ts +3 -2
  282. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.js +4 -4
  283. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-types.d.ts +9 -1
  284. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.d.ts +3 -2
  285. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +11 -11
  286. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +28 -23
  287. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.d.ts +9 -0
  288. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.js +41 -0
  289. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +21 -0
  290. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +100 -0
  291. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +18 -5
  292. package/packages/omo-codex/plugin/components/ulw-loop/package.json +7 -6
  293. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +7 -2
  294. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +2 -3
  295. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +34 -11
  296. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +52 -0
  297. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +8 -6
  298. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +5 -98
  299. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +134 -0
  300. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +59 -77
  301. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +10 -4
  302. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +24 -8
  303. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +14 -1
  304. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +52 -46
  305. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +8 -6
  306. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +35 -7
  307. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +51 -33
  308. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
  309. package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +1 -0
  310. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +27 -9
  311. package/packages/omo-codex/plugin/components/ulw-loop/src/driver-objective-ack.ts +20 -0
  312. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence-artifacts.ts +45 -0
  313. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence.ts +23 -16
  314. package/packages/omo-codex/plugin/components/ulw-loop/src/ledger.ts +38 -0
  315. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +32 -4
  316. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-commit.ts +132 -0
  317. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +67 -54
  318. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-goal-factory.ts +63 -31
  319. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +140 -119
  320. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-log.ts +112 -0
  321. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +61 -0
  322. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +11 -0
  323. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +123 -0
  324. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +71 -15
  325. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +6 -1
  326. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +92 -136
  327. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +38 -13
  328. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/factory.ts +218 -0
  329. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/manifest.ts +156 -0
  330. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/types.ts +143 -0
  331. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk.ts +3 -0
  332. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-budget-io.ts +59 -0
  333. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +201 -52
  334. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-role-guard.ts +22 -0
  335. package/packages/omo-codex/plugin/components/ulw-loop/src/state-lock.ts +257 -0
  336. package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +45 -0
  337. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-batch.ts +4 -4
  338. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts +5 -4
  339. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +13 -1
  340. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +12 -10
  341. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +27 -22
  342. package/packages/omo-codex/plugin/components/ulw-loop/src/success-criteria-input.ts +56 -0
  343. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +133 -0
  344. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +131 -82
  345. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +147 -0
  346. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint.test.ts +16 -22
  347. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +4 -2
  348. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint.test.ts +31 -2
  349. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -0
  350. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +3 -1
  351. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +35 -8
  352. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +38 -4
  353. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-json-errors.test.ts +27 -0
  354. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-scope-required.test.ts +144 -0
  355. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +185 -0
  356. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +8 -3
  357. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +6 -0
  358. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +35 -0
  359. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +88 -11
  360. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/barrier.ts +13 -0
  361. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/cli-session.ts +4 -0
  362. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-child.ts +65 -0
  363. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-cli-qa.mjs +76 -0
  364. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-crash.ts +23 -0
  365. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-mutations.mjs +58 -0
  366. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-writer.ts +65 -0
  367. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/lease-clock.ts +23 -0
  368. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +9 -4
  369. package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +67 -0
  370. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +3 -2
  371. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  372. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-log.test.ts +252 -0
  373. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-recovery.test.ts +190 -0
  374. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io-cross-process.test.ts +106 -0
  375. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +74 -25
  376. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-legacy-projection.test.ts +228 -0
  377. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-newest.test.ts +72 -0
  378. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate-basics.test.ts +258 -0
  379. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-cap-and-dedupe.test.ts +22 -0
  380. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-fields-messages.test.ts +98 -0
  381. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-lazycodex-surface.test.ts +93 -0
  382. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-poisoning-cascades.test.ts +97 -0
  383. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +51 -2
  384. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
  385. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-single-report.test.ts +241 -0
  386. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +58 -3
  387. package/packages/omo-codex/plugin/components/ulw-loop/test/review-blockers.test.ts +9 -7
  388. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-completed-plan.test.ts +43 -0
  389. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-contract.test.ts +137 -0
  390. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-driver-states.test.ts +174 -0
  391. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-dx.test.ts +219 -0
  392. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-session-context.test.ts +169 -0
  393. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard-native-reviewer.test.ts +207 -0
  394. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +452 -7
  395. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-role-matrix.test.ts +113 -0
  396. package/packages/omo-codex/plugin/components/ulw-loop/test/state-lock.test.ts +310 -0
  397. package/packages/omo-codex/plugin/components/ulw-loop/test/status-next-actions-surface.test.ts +133 -0
  398. package/packages/omo-codex/plugin/components/ulw-loop/test/steering-batch.test.ts +12 -12
  399. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +12 -6
  400. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  401. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +113 -0
  402. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +9 -3
  403. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  404. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  405. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  406. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  407. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  408. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  409. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  410. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  411. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +18 -0
  412. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  413. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  414. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  415. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  416. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  417. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  418. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  419. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
  420. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  421. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  422. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  423. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  424. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  425. package/packages/omo-codex/plugin/model-catalog.json +16 -7
  426. package/packages/omo-codex/plugin/package-lock.json +992 -681
  427. package/packages/omo-codex/plugin/package.json +6 -3
  428. package/packages/omo-codex/plugin/scripts/AGENTS.md +39 -0
  429. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -2
  430. package/packages/omo-codex/plugin/scripts/auto-update.mjs +0 -9
  431. package/packages/omo-codex/plugin/scripts/canonical-ultrawork-directive.mjs +17 -0
  432. package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +0 -1
  433. package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +8 -2
  434. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
  435. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +8 -4
  436. package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +19 -90
  437. package/packages/omo-codex/plugin/scripts/migrate-codex-config/toml-section-editor.mjs +1 -1
  438. package/packages/omo-codex/plugin/scripts/sync-skills.d.mts +4 -0
  439. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +114 -67
  440. package/packages/omo-codex/plugin/shared/package.json +3 -4
  441. package/packages/omo-codex/plugin/shared/src/config-loader.ts +2 -102
  442. package/packages/omo-codex/plugin/shared/src/config-migration.ts +0 -1
  443. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +41 -130
  444. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
  445. package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +13 -1
  446. package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +37 -0
  447. package/packages/omo-codex/plugin/skills/browser/SKILL.md +109 -0
  448. package/packages/omo-codex/plugin/skills/browser/agents/openai.yaml +2 -0
  449. package/packages/omo-codex/plugin/skills/browser/references/commands.md +105 -0
  450. package/packages/omo-codex/plugin/skills/browser/references/install.md +97 -0
  451. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +62 -0
  452. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +52 -0
  453. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +61 -0
  454. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +62 -0
  455. package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +61 -0
  456. package/packages/omo-codex/plugin/skills/browser/references/remote.md +25 -0
  457. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/index.js +1534 -0
  458. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +9 -0
  459. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  460. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +57 -0
  461. package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +50 -0
  462. package/packages/omo-codex/plugin/skills/browser/scripts/omowright.mjs +25 -0
  463. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +62 -0
  464. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +1 -1
  465. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +99 -239
  466. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-surfaces.md +91 -0
  467. package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +74 -0
  468. package/packages/omo-codex/plugin/skills/data-scientist/references/polars-lane.md +95 -0
  469. package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +1 -1
  470. package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +64 -0
  471. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  472. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  473. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +5 -3
  474. package/packages/omo-codex/plugin/skills/debugging/references/methodology/00-setup.md +12 -0
  475. package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +26 -5
  476. package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +3 -3
  477. package/packages/omo-codex/plugin/skills/debugging/references/methodology/08-qa.md +1 -1
  478. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/go.md +15 -1
  479. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +38 -0
  480. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/node.md +25 -0
  481. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/python.md +13 -0
  482. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/rust.md +41 -0
  483. package/packages/omo-codex/plugin/skills/debugging/references/scripts/dap.mjs +267 -0
  484. package/packages/omo-codex/plugin/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  485. package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +104 -0
  486. package/packages/omo-codex/plugin/skills/debugging/references/tools/dap.md +103 -0
  487. package/packages/omo-codex/plugin/skills/debugging/references/tools/frida.md +193 -0
  488. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +10 -0
  489. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +8 -3
  490. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +13 -4
  491. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  492. package/packages/omo-codex/plugin/skills/frontend/references/design/ambience-skill.md +146 -0
  493. package/packages/omo-codex/plugin/skills/frontend/references/design/aside.md +1 -1
  494. package/packages/omo-codex/plugin/skills/frontend/references/design/clone-from-url.md +1 -1
  495. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +30 -6
  496. package/packages/omo-codex/plugin/skills/frontend/references/design/interaction-skill.md +19 -5
  497. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  498. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
  499. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  500. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  501. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  502. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
  503. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
  504. package/packages/omo-codex/plugin/skills/frontend/references/perfection/README.md +1 -0
  505. package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
  506. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +1 -1
  507. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +20 -18
  508. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
  509. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +7 -5
  510. package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +5 -5
  511. package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +1 -1
  512. package/packages/omo-codex/plugin/skills/programming/SKILL.md +12 -18
  513. package/packages/omo-codex/plugin/skills/programming/references/rust/README.md +43 -15
  514. package/packages/omo-codex/plugin/skills/programming/references/rust/api-design.md +81 -0
  515. package/packages/omo-codex/plugin/skills/programming/references/rust/async-tokio.md +60 -28
  516. package/packages/omo-codex/plugin/skills/programming/references/rust/axum-stack.md +1 -13
  517. package/packages/omo-codex/plugin/skills/programming/references/rust/cargo-strict.md +44 -8
  518. package/packages/omo-codex/plugin/skills/programming/references/rust/clap-stack.md +8 -3
  519. package/packages/omo-codex/plugin/skills/programming/references/rust/concurrency.md +66 -52
  520. package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +35 -25
  521. package/packages/omo-codex/plugin/skills/programming/references/rust/macros.md +63 -0
  522. package/packages/omo-codex/plugin/skills/programming/references/rust/one-liners.md +5 -3
  523. package/packages/omo-codex/plugin/skills/programming/references/rust/proptest-insta.md +8 -0
  524. package/packages/omo-codex/plugin/skills/programming/references/rust/type-state.md +50 -12
  525. package/packages/omo-codex/plugin/skills/programming/references/rust/unsafe-discipline.md +34 -6
  526. package/packages/omo-codex/plugin/skills/programming/references/rust/zero-cost-safety.md +62 -52
  527. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  528. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  529. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  530. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +31 -28
  531. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +11 -9
  532. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +11 -9
  533. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +116 -424
  534. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +1 -82
  535. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +40 -28
  536. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +2 -1
  537. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +2 -2
  538. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
  539. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
  540. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
  541. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
  542. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +34 -111
  543. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +14 -7
  544. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +22 -36
  545. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
  546. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +102 -107
  547. package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +38 -39
  548. package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
  549. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +31 -2
  550. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +2 -3
  551. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +34 -11
  552. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +9 -10
  553. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +17 -13
  554. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +5 -6
  555. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +4 -4
  556. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  557. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
  558. package/packages/omo-codex/plugin/skills/ulw-research/AGENTS.md +63 -0
  559. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +52 -33
  560. package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +187 -0
  561. package/packages/omo-codex/plugin/skills/ulw-research/references/report-gates.md +66 -0
  562. package/packages/omo-codex/plugin/skills/ulw-research/scripts/cli-support.mjs +102 -0
  563. package/packages/omo-codex/plugin/skills/ulw-research/scripts/contracts.mjs +162 -0
  564. package/packages/omo-codex/plugin/skills/ulw-research/scripts/css-lite.mjs +204 -0
  565. package/packages/omo-codex/plugin/skills/ulw-research/scripts/design-spec.mjs +161 -0
  566. package/packages/omo-codex/plugin/skills/ulw-research/scripts/entities.mjs +39 -0
  567. package/packages/omo-codex/plugin/skills/ulw-research/scripts/entry-guard.mjs +21 -0
  568. package/packages/omo-codex/plugin/skills/ulw-research/scripts/format-extract-css.mjs +122 -0
  569. package/packages/omo-codex/plugin/skills/ulw-research/scripts/format-extract.mjs +229 -0
  570. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-figures.mjs +173 -0
  571. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-layout.mjs +146 -0
  572. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-static.mjs +167 -0
  573. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-structure.mjs +118 -0
  574. package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-text.mjs +190 -0
  575. package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-lite.mjs +239 -0
  576. package/packages/omo-codex/plugin/skills/ulw-research/scripts/layout-probe.mjs +83 -0
  577. package/packages/omo-codex/plugin/skills/ulw-research/scripts/outcome.mjs +250 -0
  578. package/packages/omo-codex/plugin/skills/ulw-research/scripts/repair-tracker.mjs +171 -0
  579. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools-commands.mjs +214 -0
  580. package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools.mjs +61 -0
  581. package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
  582. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +10 -7
  583. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +77 -0
  584. package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
  585. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +12 -12
  586. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +13 -28
  587. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -3
  588. package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +2 -7
  589. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +14 -4
  590. package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -29
  591. package/packages/omo-codex/plugin/test/bootstrap-default-role.test.mjs +66 -0
  592. package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +0 -31
  593. package/packages/omo-codex/plugin/test/canonical-ultrawork-directive.test.mjs +53 -0
  594. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
  595. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -51
  596. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +100 -2
  597. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +5 -6
  598. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -3
  599. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +35 -35
  600. package/packages/omo-codex/plugin/test/multi-agent-v2-regression.test.mjs +1 -1
  601. package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +107 -15
  602. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +81 -3
  603. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +57 -26
  604. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +37 -0
  605. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -2
  606. package/packages/omo-codex/scripts/install-dist/install-local.mjs +16238 -4291
  607. package/packages/{omo-codex/plugin/components/ultrawork/directive.md → prompts-core/prompts/ultrawork/codex.md} +102 -107
  608. package/packages/shared-skills/package.json +7 -1
  609. package/packages/shared-skills/skill-source-filter.d.ts +16 -0
  610. package/packages/shared-skills/skill-source-filter.mjs +44 -0
  611. package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
  612. package/packages/shared-skills/skills/ast-grep/SKILL.md +13 -1
  613. package/packages/shared-skills/skills/browser/ATTRIBUTION.md +37 -0
  614. package/packages/shared-skills/skills/browser/SKILL.md +109 -0
  615. package/packages/shared-skills/skills/browser/references/commands.md +105 -0
  616. package/packages/shared-skills/skills/browser/references/install.md +97 -0
  617. package/packages/shared-skills/skills/browser/references/owned-engine/README.md +62 -0
  618. package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +52 -0
  619. package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +61 -0
  620. package/packages/shared-skills/skills/browser/references/owned-engine/network.md +62 -0
  621. package/packages/shared-skills/skills/browser/references/recipes/1password.md +61 -0
  622. package/packages/shared-skills/skills/browser/references/remote.md +25 -0
  623. package/packages/shared-skills/skills/browser/runtime/omowright/index.js +1534 -0
  624. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +9 -0
  625. package/packages/shared-skills/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  626. package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +57 -0
  627. package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +50 -0
  628. package/packages/shared-skills/skills/browser/scripts/omowright.mjs +25 -0
  629. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
  630. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +1 -1
  631. package/packages/shared-skills/skills/data-scientist/SKILL.md +99 -239
  632. package/packages/shared-skills/skills/data-scientist/references/execution-surfaces.md +91 -0
  633. package/packages/shared-skills/skills/data-scientist/references/placement.md +74 -0
  634. package/packages/shared-skills/skills/data-scientist/references/polars-lane.md +95 -0
  635. package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +1 -1
  636. package/packages/shared-skills/skills/data-scientist/references/visualization.md +64 -0
  637. package/packages/shared-skills/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  638. package/packages/shared-skills/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  639. package/packages/shared-skills/skills/debugging/SKILL.md +5 -3
  640. package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +12 -0
  641. package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +26 -5
  642. package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +3 -3
  643. package/packages/shared-skills/skills/debugging/references/methodology/08-qa.md +1 -1
  644. package/packages/shared-skills/skills/debugging/references/runtimes/go.md +15 -1
  645. package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +38 -0
  646. package/packages/shared-skills/skills/debugging/references/runtimes/node.md +25 -0
  647. package/packages/shared-skills/skills/debugging/references/runtimes/python.md +13 -0
  648. package/packages/shared-skills/skills/debugging/references/runtimes/rust.md +41 -0
  649. package/packages/shared-skills/skills/debugging/references/scripts/dap.mjs +267 -0
  650. package/packages/shared-skills/skills/debugging/references/scripts/dap.test.ts +86 -0
  651. package/packages/shared-skills/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  652. package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +104 -0
  653. package/packages/shared-skills/skills/debugging/references/tools/dap.md +103 -0
  654. package/packages/shared-skills/skills/debugging/references/tools/frida.md +193 -0
  655. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +10 -0
  656. package/packages/shared-skills/skills/frontend/SKILL.md +8 -3
  657. package/packages/shared-skills/skills/frontend/references/design/README.md +13 -4
  658. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  659. package/packages/shared-skills/skills/frontend/references/design/ambience-skill.md +146 -0
  660. package/packages/shared-skills/skills/frontend/references/design/aside.md +1 -1
  661. package/packages/shared-skills/skills/frontend/references/design/clone-from-url.md +1 -1
  662. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +30 -6
  663. package/packages/shared-skills/skills/frontend/references/design/interaction-skill.md +19 -5
  664. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  665. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
  666. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  667. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  668. package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  669. package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
  670. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
  671. package/packages/shared-skills/skills/frontend/references/perfection/README.md +1 -0
  672. package/packages/shared-skills/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
  673. package/packages/shared-skills/skills/git-master/SKILL.md +1 -1
  674. package/packages/shared-skills/skills/init-deep/SKILL.md +14 -14
  675. package/packages/shared-skills/skills/lsp-setup/SKILL.md +1 -1
  676. package/packages/shared-skills/skills/programming/SKILL.md +12 -18
  677. package/packages/shared-skills/skills/programming/references/rust/README.md +43 -15
  678. package/packages/shared-skills/skills/programming/references/rust/api-design.md +81 -0
  679. package/packages/shared-skills/skills/programming/references/rust/async-tokio.md +60 -28
  680. package/packages/shared-skills/skills/programming/references/rust/axum-stack.md +1 -13
  681. package/packages/shared-skills/skills/programming/references/rust/cargo-strict.md +44 -8
  682. package/packages/shared-skills/skills/programming/references/rust/clap-stack.md +8 -3
  683. package/packages/shared-skills/skills/programming/references/rust/concurrency.md +66 -52
  684. package/packages/shared-skills/skills/programming/references/rust/libraries.md +35 -25
  685. package/packages/shared-skills/skills/programming/references/rust/macros.md +63 -0
  686. package/packages/shared-skills/skills/programming/references/rust/one-liners.md +5 -3
  687. package/packages/shared-skills/skills/programming/references/rust/proptest-insta.md +8 -0
  688. package/packages/shared-skills/skills/programming/references/rust/type-state.md +50 -12
  689. package/packages/shared-skills/skills/programming/references/rust/unsafe-discipline.md +34 -6
  690. package/packages/shared-skills/skills/programming/references/rust/zero-cost-safety.md +62 -52
  691. package/packages/shared-skills/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  692. package/packages/shared-skills/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  693. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  694. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.test.ts +83 -0
  695. package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +31 -28
  696. package/packages/shared-skills/skills/refactor/SKILL.md +5 -5
  697. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +5 -5
  698. package/packages/shared-skills/skills/review-work/SKILL.md +101 -419
  699. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +1 -82
  700. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +40 -28
  701. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +2 -1
  702. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +2 -2
  703. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
  704. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
  705. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
  706. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
  707. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +34 -111
  708. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +14 -7
  709. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +22 -36
  710. package/packages/shared-skills/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
  711. package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +27 -25
  712. package/packages/shared-skills/skills/ulw-plan/SKILL.md +10 -11
  713. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +18 -13
  714. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +5 -6
  715. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +4 -4
  716. package/packages/shared-skills/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  717. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
  718. package/packages/shared-skills/skills/ulw-research/AGENTS.md +63 -0
  719. package/packages/shared-skills/skills/ulw-research/SKILL.md +47 -30
  720. package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +187 -0
  721. package/packages/shared-skills/skills/ulw-research/references/report-gates.md +66 -0
  722. package/packages/shared-skills/skills/ulw-research/scripts/cli-support.mjs +102 -0
  723. package/packages/shared-skills/skills/ulw-research/scripts/cli-support.test.ts +88 -0
  724. package/packages/shared-skills/skills/ulw-research/scripts/contracts.mjs +162 -0
  725. package/packages/shared-skills/skills/ulw-research/scripts/contracts.test.ts +177 -0
  726. package/packages/shared-skills/skills/ulw-research/scripts/css-lite.mjs +204 -0
  727. package/packages/shared-skills/skills/ulw-research/scripts/css-lite.test.ts +159 -0
  728. package/packages/shared-skills/skills/ulw-research/scripts/design-spec.mjs +161 -0
  729. package/packages/shared-skills/skills/ulw-research/scripts/design-spec.test.ts +162 -0
  730. package/packages/shared-skills/skills/ulw-research/scripts/entities.mjs +39 -0
  731. package/packages/shared-skills/skills/ulw-research/scripts/entry-guard.mjs +21 -0
  732. package/packages/shared-skills/skills/ulw-research/scripts/format-extract-css.mjs +122 -0
  733. package/packages/shared-skills/skills/ulw-research/scripts/format-extract.mjs +229 -0
  734. package/packages/shared-skills/skills/ulw-research/scripts/format-extract.test.ts +243 -0
  735. package/packages/shared-skills/skills/ulw-research/scripts/gates-figures.mjs +173 -0
  736. package/packages/shared-skills/skills/ulw-research/scripts/gates-layout.mjs +146 -0
  737. package/packages/shared-skills/skills/ulw-research/scripts/gates-layout.test.ts +236 -0
  738. package/packages/shared-skills/skills/ulw-research/scripts/gates-static.mjs +167 -0
  739. package/packages/shared-skills/skills/ulw-research/scripts/gates-static.test.ts +265 -0
  740. package/packages/shared-skills/skills/ulw-research/scripts/gates-structure.mjs +118 -0
  741. package/packages/shared-skills/skills/ulw-research/scripts/gates-text.mjs +190 -0
  742. package/packages/shared-skills/skills/ulw-research/scripts/glossary-vocabulary.test.ts +43 -0
  743. package/packages/shared-skills/skills/ulw-research/scripts/html-lite.mjs +239 -0
  744. package/packages/shared-skills/skills/ulw-research/scripts/html-lite.test.ts +191 -0
  745. package/packages/shared-skills/skills/ulw-research/scripts/layout-probe.mjs +83 -0
  746. package/packages/shared-skills/skills/ulw-research/scripts/layout-probe.test.ts +89 -0
  747. package/packages/shared-skills/skills/ulw-research/scripts/outcome.mjs +250 -0
  748. package/packages/shared-skills/skills/ulw-research/scripts/outcome.test.ts +281 -0
  749. package/packages/shared-skills/skills/ulw-research/scripts/repair-tracker.mjs +171 -0
  750. package/packages/shared-skills/skills/ulw-research/scripts/repair-tracker.test.ts +246 -0
  751. package/packages/shared-skills/skills/ulw-research/scripts/report-tools-commands.mjs +214 -0
  752. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.mjs +61 -0
  753. package/packages/shared-skills/skills/ulw-research/scripts/report-tools.test.ts +213 -0
  754. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/assets/figure-1.svg +1 -0
  755. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/bad-report.html +44 -0
  756. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/boxes.json +90 -0
  757. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/design-spec.md +29 -0
  758. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/good-report.html +57 -0
  759. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/reference-report.html +86 -0
  760. package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/reference.md +23 -0
  761. package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
  762. package/packages/shared-skills/skills/visual-qa/SKILL.md +4 -3
  763. package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +77 -0
  764. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  765. package/script/qa/xterm-live-terminal.mjs +18 -2
  766. package/dist/cli/install-senpi/index.d.ts +0 -1
  767. package/dist/cli/senpi-platform-flag.d.ts +0 -4
  768. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
  769. package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
  770. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
  771. package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
  772. package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
  773. package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +0 -58
  774. package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +0 -2951
  775. package/packages/omo-codex/plugin/components/codegraph/NOTICE +0 -16
  776. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +0 -12244
  777. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +0 -9842
  778. package/packages/omo-codex/plugin/components/codegraph/package.json +0 -33
  779. package/packages/omo-codex/plugin/components/codegraph/src/cache-gc.ts +0 -29
  780. package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +0 -79
  781. package/packages/omo-codex/plugin/components/codegraph/src/hook-input.ts +0 -33
  782. package/packages/omo-codex/plugin/components/codegraph/src/hook-sweep.ts +0 -25
  783. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +0 -131
  784. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +0 -258
  785. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +0 -309
  786. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +0 -80
  787. package/packages/omo-codex/plugin/components/codegraph/src/post-tool-use-hook.ts +0 -34
  788. package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +0 -29
  789. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +0 -263
  790. package/packages/omo-codex/plugin/components/codegraph/src/session-start-command.ts +0 -106
  791. package/packages/omo-codex/plugin/components/codegraph/src/session-start-cooldown.ts +0 -145
  792. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +0 -21
  793. package/packages/omo-codex/plugin/components/codegraph/src/session-start-lock.ts +0 -139
  794. package/packages/omo-codex/plugin/components/codegraph/src/session-start-outcome.ts +0 -15
  795. package/packages/omo-codex/plugin/components/codegraph/src/session-start-paths.ts +0 -32
  796. package/packages/omo-codex/plugin/components/codegraph/src/session-start-project.ts +0 -109
  797. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker-result.ts +0 -148
  798. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +0 -175
  799. package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +0 -81
  800. package/packages/omo-codex/plugin/components/codegraph/test/cache-gc.test.ts +0 -34
  801. package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +0 -112
  802. package/packages/omo-codex/plugin/components/codegraph/test/hook-registration.test.ts +0 -26
  803. package/packages/omo-codex/plugin/components/codegraph/test/hook-session-start-guard.test.ts +0 -160
  804. package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +0 -50
  805. package/packages/omo-codex/plugin/components/codegraph/test/hook-sweep.test.ts +0 -29
  806. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +0 -320
  807. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +0 -172
  808. package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +0 -91
  809. package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +0 -100
  810. package/packages/omo-codex/plugin/components/codegraph/test/serve-built-wrapper.test.ts +0 -76
  811. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +0 -133
  812. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +0 -245
  813. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +0 -69
  814. package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +0 -43
  815. package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +0 -147
  816. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +0 -175
  817. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +0 -385
  818. package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +0 -206
  819. package/packages/omo-codex/plugin/components/codegraph/test/session-start-project.test.ts +0 -58
  820. package/packages/omo-codex/plugin/components/codegraph/test/session-start-state.test.ts +0 -104
  821. package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +0 -65
  822. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +0 -106
  823. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-cooldown.test.ts +0 -116
  824. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +0 -258
  825. package/packages/omo-codex/plugin/components/codegraph/test/sweep-cli.test.ts +0 -56
  826. package/packages/omo-codex/plugin/components/codegraph/tsconfig.build.json +0 -13
  827. package/packages/omo-codex/plugin/components/codegraph/tsconfig.json +0 -25
  828. package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +0 -21
  829. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
  830. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +0 -484
  831. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +0 -18
  832. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +0 -17
  833. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
  834. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
  835. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/editor.mjs +0 -125
  836. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/jsonc.mjs +0 -43
  837. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/scaffold.mjs +0 -29
  838. package/packages/omo-codex/plugin/scripts/migrate-omo-sot.mjs +0 -121
  839. package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +0 -176
  840. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +0 -197
  841. package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +0 -153
  842. package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +0 -37
  843. package/packages/omo-codex/plugin/skills/debugging/references/tools/playwright-cli.md +0 -194
  844. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  845. package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
  846. package/packages/omo-codex/plugin/skills/visual-qa/references/agent-browser-setup.md +0 -45
  847. package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +0 -76
  848. package/packages/omo-codex/plugin/test/migrate-omo-sot.test.mjs +0 -179
  849. package/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +0 -176
  850. package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +0 -197
  851. package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +0 -153
  852. package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +0 -37
  853. package/packages/shared-skills/skills/debugging/references/tools/playwright-cli.md +0 -194
  854. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  855. package/packages/shared-skills/skills/visual-qa/references/agent-browser-setup.md +0 -45
  856. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
  857. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
  858. /package/packages/omo-codex/plugin/components/{codegraph → ulw-execute-continuation}/LICENSE +0 -0
  859. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
  860. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
  861. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
  862. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
  863. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
  864. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
  865. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
  866. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
  867. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
  868. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
  869. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
@@ -1,17 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { isUlwLoopSubcommand, ulwLoopCommand } from "./cli-commands.js";
3
+ import { ULW_LOOP_HELP } from "./cli-output.js";
3
4
  import { runPreToolUseGoalBudgetGuardCli, runUlwLoopHookCli } from "./codex-hook.js";
4
- import { runSpawnGuardCli } from "./spawn-guard.js";
5
+ import { runSpawnAdmissionRecorderCli, runSpawnGuardCli } from "./spawn-guard.js";
5
6
  import { runStopResumeHookCli } from "./stop-resume-hook.js";
6
7
 
7
- const TOP_LEVEL_HELP =
8
- "Usage:\n omo-agent-toolkit ulw-loop <subcommand> [args]\n omo-agent-toolkit hook user-prompt-submit [--with-ultrawork] (Codex UserPromptSubmit hook)\n omo-agent-toolkit help | --help | -h (this message)\n\nRun `omo-agent-toolkit ulw-loop help` for ulw-loop subcommands.\n";
9
-
10
8
  async function main(): Promise<number> {
11
9
  const argv = process.argv.slice(2);
12
10
  const command = argv[0];
13
11
  if (command === undefined || command === "help" || command === "--help" || command === "-h") {
14
- process.stdout.write(TOP_LEVEL_HELP);
12
+ process.stdout.write(`${ULW_LOOP_HELP}\n`);
15
13
  return 0;
16
14
  }
17
15
  if (command === "ulw-loop") return ulwLoopCommand(argv.slice(1));
@@ -31,6 +29,10 @@ async function main(): Promise<number> {
31
29
  await runStopResumeHookCli(process.stdin, process.stdout);
32
30
  return 0;
33
31
  }
32
+ if (sub === "post-tool-use-spawn") {
33
+ await runSpawnAdmissionRecorderCli(process.stdin, process.stdout);
34
+ return 0;
35
+ }
34
36
  if (sub === "pre-tool-use-spawn") {
35
37
  await runSpawnGuardCli(process.stdin, process.stdout);
36
38
  return 0;
@@ -39,7 +41,7 @@ async function main(): Promise<number> {
39
41
  return 1;
40
42
  }
41
43
  if (isUlwLoopSubcommand(command)) return ulwLoopCommand(argv);
42
- process.stderr.write(`[omo] unknown command: ${command}\n${TOP_LEVEL_HELP}`);
44
+ process.stderr.write(`[omo] unknown command: ${command}\n${ULW_LOOP_HELP}\n`);
43
45
  return 1;
44
46
  }
45
47
 
@@ -5,6 +5,7 @@ import {
5
5
  isEssentialCriterion,
6
6
  isFinalRunCompletionCandidate,
7
7
  } from "./goal-status.js";
8
+ import { resolveToolkitSurface, reviewerRolesFor, type UlwLoopToolkitSurface } from "./surface.js";
8
9
  import type { UlwLoopCodexGoalMode, UlwLoopItem, UlwLoopPlan, UlwLoopSuccessCriterion } from "./types.js";
9
10
 
10
11
  export interface CodexCreateGoalPayload {
@@ -20,11 +21,13 @@ export function buildCodexGoalInstruction(args: {
20
21
  readonly plan: UlwLoopPlan;
21
22
  readonly goal: UlwLoopItem;
22
23
  readonly isFinal?: boolean;
24
+ readonly surface?: UlwLoopToolkitSurface;
23
25
  }): UlwLoopGoalInstruction {
24
26
  const mode = codexGoalMode(args.plan);
25
27
  const createGoal = buildCreateGoalPayload(args.plan, args.goal);
26
28
  const isFinal = args.isFinal ?? isFinalRunCompletionCandidate(args.plan, args.goal);
27
- return { text: buildText(mode, args.plan, args.goal, createGoal, isFinal), json: createGoal };
29
+ const surface = args.surface ?? resolveToolkitSurface();
30
+ return { text: buildText(mode, args.plan, args.goal, createGoal, isFinal, surface), json: createGoal };
28
31
  }
29
32
 
30
33
  function buildCreateGoalPayload(plan: UlwLoopPlan, goal: UlwLoopItem): CodexCreateGoalPayload {
@@ -37,6 +40,7 @@ function buildText(
37
40
  goal: UlwLoopItem,
38
41
  createGoal: CodexCreateGoalPayload,
39
42
  isFinal: boolean,
43
+ surface: UlwLoopToolkitSurface,
40
44
  ): string {
41
45
  return joinLines([
42
46
  mode === "aggregate" ? "UlwLoop aggregate-goal handoff" : "UlwLoop active-goal handoff",
@@ -54,7 +58,7 @@ function buildText(
54
58
  "- Goals are unlimited. Do not add numeric limits.",
55
59
  ...modeConstraintLines(mode, isFinal),
56
60
  ...evidenceLayoutLines(plan),
57
- finalSection(plan, goal, isFinal, mode === "aggregate"),
61
+ finalSection(plan, goal, isFinal, mode === "aggregate", surface),
58
62
  ...checkpointLines(plan, mode),
59
63
  "",
60
64
  "create_goal payload:",
@@ -112,19 +116,26 @@ function evidenceLayoutLines(plan: UlwLoopPlan): string[] {
112
116
  ];
113
117
  }
114
118
 
115
- function finalSection(plan: UlwLoopPlan, goal: UlwLoopItem, isFinal: boolean, aggregate: boolean): string {
119
+ function finalSection(
120
+ plan: UlwLoopPlan,
121
+ goal: UlwLoopItem,
122
+ isFinal: boolean,
123
+ aggregate: boolean,
124
+ surface: UlwLoopToolkitSurface,
125
+ ): string {
126
+ const roles = reviewerRolesFor(surface);
116
127
  if (!isFinal)
117
128
  return "- This is not the final ulw-loop story; do not run the final reviewer/manual-QA/gate-review quality gate yet.";
118
129
  const option = sessionOption(plan);
130
+ if (surface === "omo-senpi") return senpiFinalSection(plan, goal, aggregate);
119
131
  const blockerCommand = `omo-agent-toolkit ulw-loop record-review-blockers${option} --goal-id ${goal.id} --title "Resolve final code-review blockers" --objective "<blocker-resolution objective>" --evidence "<review findings>" --codex-goal-json "<active get_goal JSON or path>"`;
120
132
  const checkpointCommand = `omo-agent-toolkit ulw-loop checkpoint${option} --goal-id ${goal.id} --status complete --evidence "<targeted verification/manualQa/gateReview evidence>" --codex-goal-json "<fresh complete get_goal JSON or path>" --quality-gate-json "<quality gate JSON or path>"`;
121
133
  return joinLines([
122
- "Final story — run mandatory quality gate before update_goal:",
134
+ "Final story — self-review and manual QA are the default; use the quality gate before update_goal:",
123
135
  "- Run targeted verification for changed behavior.",
124
136
  "- Confirm every manualQa artifact path exists and has non-zero size.",
125
- "- First spawn lazycodex-code-reviewer and lazycodex-qa-executor in parallel (fork_context: false on the v1 surface; fork_turns: \"none\" on v2). Include the original brief, goal objectives, desired user-visible outcome, diff, and evidence; wait for BOTH to return and confirm their report artifacts exist on disk (code-review report + manualQa matrix).",
126
- "- Only then spawn lazycodex-gate-reviewer (same fork settings), passing those artifact paths.",
127
- "- Require clean codeReview, manualQa, gateReview, iteration, and criteriaCoverage. criteriaCoverage must summarize originalIntent, desiredOutcome, and userOutcomeReview; counts alone are not approval.",
137
+ `- Run manual QA yourself and write its artifact under currentAttemptDir. Only if the user explicitly demands strict, rigorous, or high-accuracy review, spawn ${roles.gateReview}, optionally also ${roles.codeReview} and ${roles.manualQa}; otherwise set manualQa.by and gateReview.by to "main-session".`,
138
+ "- Require passed manualQa, approved gateReview, passed iteration, and complete criteriaCoverage; include codeReview only when strict review was requested. criteriaCoverage must summarize originalIntent, desiredOutcome, and userOutcomeReview; counts alone are not approval.",
128
139
  "- On a reviewer REJECT, fix only the cited blockers, rerun the affected verification/Manual-QA, and re-review the delta at most TWICE; if blockers remain, record them and surface to the user.",
129
140
  "- If codeQualityStatus is WATCH, include the WATCH notes verbatim in your final user-facing message.",
130
141
  "- If any reviewer is blocked/inconclusive or the quality gate is not clean, do not call update_goal. Record blocker work first:",
@@ -136,6 +147,23 @@ function finalSection(plan: UlwLoopPlan, goal: UlwLoopItem, isFinal: boolean, ag
136
147
  ]);
137
148
  }
138
149
 
150
+ function senpiFinalSection(plan: UlwLoopPlan, goal: UlwLoopItem, aggregate: boolean): string {
151
+ const option = sessionOption(plan);
152
+ const checkpointCommand = `omo-agent-toolkit ulw-loop checkpoint${option} --goal-id ${goal.id} --status complete --evidence "<manualQa/gateReview evidence>" --codex-goal-json "<fresh complete get_goal JSON or path>" --quality-gate-json "$(omo-agent-toolkit ulw-loop checkpoint${option} --print-template)"`;
153
+ return joinLines([
154
+ "Final story — run the single-reviewer quality gate before update_goal:",
155
+ "- Run manual QA yourself and write the non-empty artifact under currentAttemptDir; set manualQa.by to \"main-session\".",
156
+ '- Spawn exactly one gate reviewer with task(category: "deep-high").',
157
+ "- If that task fails with any model_unavailable failure, retry with category:deep-low, then category:unspecified-high, then category:unspecified-low.",
158
+ '- Set gateReview.by to the exact category:<name> literal used for the successful task.',
159
+ '- Build the gate JSON with omo-agent-toolkit ulw-loop checkpoint --print-template, then fill manualQa, gateReview, iteration, and criteriaCoverage.',
160
+ '- Require passed manualQa, approved gateReview, passed iteration, and complete criteriaCoverage before update_goal({status: "complete"}).',
161
+ aggregate
162
+ ? `- If the gate is clean, call update_goal({status: "complete"}), call get_goal again, then checkpoint the aggregate story: ${checkpointCommand}`
163
+ : `- If the gate is clean, call update_goal({status: "complete"}), call get_goal again, then checkpoint: ${checkpointCommand}`,
164
+ ]);
165
+ }
166
+
139
167
  function sessionOption(plan: UlwLoopPlan): string {
140
168
  const prefix = ".omo/ulw-loop/";
141
169
  const suffix = "/goals.json";
@@ -2,7 +2,15 @@ import { existsSync } from "node:fs";
2
2
  import { readFile } from "node:fs/promises";
3
3
  import { resolve } from "node:path";
4
4
 
5
- export type CodexGoalSnapshotStatus = "active" | "complete" | "cancelled" | "failed" | "unknown";
5
+ export type CodexGoalSnapshotStatus =
6
+ | "active"
7
+ | "complete"
8
+ | "paused"
9
+ | "usage_limited"
10
+ | "budget_limited"
11
+ | "cancelled"
12
+ | "failed"
13
+ | "unknown";
6
14
 
7
15
  export interface CodexGoalSnapshot {
8
16
  available: boolean;
@@ -14,16 +22,19 @@ export interface CodexGoalSnapshot {
14
22
  export interface CodexGoalReconciliation {
15
23
  ok: boolean;
16
24
  snapshot: CodexGoalSnapshot;
25
+ /** Facts to know (a differing driver objective); never something to do. */
17
26
  warnings: string[];
27
+ /** Things to do next (create, re-create, or resume the driver goal). */
28
+ nextActions: string[];
18
29
  errors: string[];
30
+ /** The differing objective this reconciliation reported for the first time, for the caller to acknowledge. */
31
+ unacknowledgedObjective?: string;
19
32
  }
20
33
 
21
34
  export interface ReconcileCodexGoalOptions {
22
35
  expectedObjective: string;
23
- acceptedObjectives?: readonly string[];
24
- allowedStatuses?: readonly CodexGoalSnapshotStatus[];
25
- requireSnapshot?: boolean;
26
- requireComplete?: boolean;
36
+ readonly acceptedObjectives?: readonly string[];
37
+ readonly acknowledgedObjectives?: readonly string[];
27
38
  }
28
39
 
29
40
  export class CodexGoalSnapshotError extends Error {}
@@ -32,14 +43,21 @@ function safeObject(value: unknown): Record<string, unknown> {
32
43
  }
33
44
 
34
45
  function safeString(value: unknown): string {
46
+ return typeof value === "string" ? value : "";
47
+ }
48
+
49
+ function safeStatusString(value: unknown): string {
35
50
  return typeof value === "string" ? value.trim() : "";
36
51
  }
37
52
 
38
53
  function normalizeStatus(value: unknown): CodexGoalSnapshotStatus {
39
- const status = safeString(value).toLowerCase();
54
+ const status = safeStatusString(value).toLowerCase();
40
55
  if (status === "complete" || status === "completed" || status === "done") return "complete";
41
56
  if (status === "cancelled" || status === "canceled") return "cancelled";
42
57
  if (status === "failed" || status === "failure") return "failed";
58
+ if (status === "paused") return "paused";
59
+ if (status === "usage_limited") return "usage_limited";
60
+ if (status === "budget_limited") return "budget_limited";
43
61
  if (status === "active" || status === "in_progress" || status === "pending" || status === "running") return "active";
44
62
  return "unknown";
45
63
  }
@@ -56,7 +74,9 @@ export function parseCodexGoalSnapshot(value: unknown): CodexGoalSnapshot {
56
74
  }
57
75
 
58
76
  const goal = safeObject(goalValue);
59
- const objective = safeString(goal["objective"] ?? goal["goal"] ?? goal["description"] ?? root["objective"]);
77
+ const objective = safeString(
78
+ goal["objective"] ?? goal["goal"] ?? goal["description"] ?? goal["title"] ?? root["objective"] ?? root["title"],
79
+ );
60
80
  const status = normalizeStatus(goal["status"] ?? root["status"]);
61
81
 
62
82
  return {
@@ -97,43 +117,41 @@ export function reconcileCodexGoalSnapshot(
97
117
  const effectiveSnapshot = snapshot ?? { available: false, raw: null };
98
118
  const errors: string[] = [];
99
119
  const warnings: string[] = [];
120
+ const nextActions: string[] = [];
100
121
 
122
+ const expected = options.expectedObjective;
101
123
  if (!effectiveSnapshot.available) {
102
- const message =
103
- "Codex goal snapshot is absent or reports no active goal; call get_goal and pass its JSON with --codex-goal-json.";
104
- if (options.requireSnapshot) errors.push(message);
105
- else warnings.push(message);
106
- return { ok: errors.length === 0, snapshot: effectiveSnapshot, warnings, errors };
124
+ nextActions.push(`call get_goal; if none, create_goal with codexObjective "${expected}" verbatim`);
125
+ return { ok: errors.length === 0, snapshot: effectiveSnapshot, warnings, nextActions, errors };
107
126
  }
108
127
 
109
- const expected = normalizeObjective(options.expectedObjective);
110
- const accepted = new Set(
111
- [expected, ...(options.acceptedObjectives ?? []).map((objective) => normalizeObjective(objective))].filter(
112
- Boolean,
113
- ),
114
- );
128
+ const normalized = (objectives: readonly string[]) => new Set(objectives.map(normalizeObjective).filter(Boolean));
129
+ const accepted = normalized([expected, ...(options.acceptedObjectives ?? [])]);
130
+ const acknowledged = normalized(options.acknowledgedObjectives ?? []);
115
131
  const actual = normalizeObjective(effectiveSnapshot.objective ?? "");
116
- if (!actual) {
117
- errors.push("Codex goal snapshot is missing objective text.");
118
- } else if (!accepted.has(actual)) {
119
- errors.push(`Codex goal objective mismatch: expected "${expected}", got "${actual}".`);
132
+ let unacknowledgedObjective: string | undefined;
133
+ if (actual && !accepted.has(actual) && !acknowledged.has(actual)) {
134
+ warnings.push(`driver_objective_differs: expected "${expected}", got "${actual}".`);
135
+ unacknowledgedObjective = actual;
120
136
  }
121
137
 
122
- const allowed = options.allowedStatuses ?? (options.requireComplete ? ["complete"] : ["active", "complete"]);
123
138
  const actualStatus = effectiveSnapshot.status ?? "unknown";
124
- if (!allowed.includes(actualStatus)) {
125
- errors.push(`Codex goal status mismatch: expected ${allowed.join(" or ")}, got ${actualStatus}.`);
139
+ if (actualStatus === "paused" || actualStatus === "usage_limited" || actualStatus === "budget_limited") {
140
+ nextActions.push("/goal resume or raise the budget");
126
141
  }
127
- if (options.requireComplete && actualStatus !== "complete") {
128
- errors.push(
129
- 'Codex goal is not complete; call update_goal({status: "complete"}) only after the objective is actually complete, then pass the fresh get_goal JSON.',
130
- );
131
- }
132
-
133
- return { ok: errors.length === 0, snapshot: effectiveSnapshot, warnings, errors };
142
+ if (actualStatus === "complete")
143
+ nextActions.push(`driver closed early: call create_goal with codexObjective "${expected}" verbatim`);
144
+ return {
145
+ ok: errors.length === 0,
146
+ snapshot: effectiveSnapshot,
147
+ warnings,
148
+ nextActions,
149
+ errors,
150
+ ...(unacknowledgedObjective === undefined ? {} : { unacknowledgedObjective }),
151
+ };
134
152
  }
135
153
 
136
154
  export function formatCodexGoalReconciliation(reconciliation: CodexGoalReconciliation): string {
137
- const parts = [...reconciliation.errors, ...reconciliation.warnings];
155
+ const parts = [...reconciliation.errors, ...reconciliation.nextActions, ...reconciliation.warnings];
138
156
  return parts.join(" ");
139
157
  }
@@ -95,7 +95,9 @@ export async function applyUserPromptUlwLoopSteering(
95
95
  }
96
96
 
97
97
  function hasSteeringDirectiveMarker(prompt: string): boolean {
98
- return /(?:^|\s)(?:OMO_ULW_LOOP_STEER|omo\.ulw-loop\.steer|omo ulw-loop steer|omo-agent-toolkit ulw-loop steer):/u.test(prompt);
98
+ return /(?:^|\s)(?:OMO_ULW_LOOP_STEER|omo\.ulw-loop\.steer|omo ulw-loop steer|omo-agent-toolkit ulw-loop steer):/u.test(
99
+ prompt,
100
+ );
99
101
  }
100
102
 
101
103
  function payloadScope(payload: UserPromptSubmitPayload): UlwLoopScope {
@@ -2,6 +2,7 @@ export const ULW_LOOP_DIR = ".omo/ulw-loop";
2
2
  export const ULW_LOOP_BRIEF = "brief.md";
3
3
  export const ULW_LOOP_GOALS = "goals.json";
4
4
  export const ULW_LOOP_LEDGER = "ledger.jsonl";
5
+ export const ULW_LOOP_STATE_LOCK = ".state.lock";
5
6
 
6
7
  export type UlwLoopStatus =
7
8
  | "pending"
@@ -19,6 +19,7 @@ export interface UlwLoopSuccessCriterion {
19
19
  status: UlwLoopCriterionStatus;
20
20
  capturedAt?: string;
21
21
  notes?: string;
22
+ artifacts?: string[];
22
23
  }
23
24
 
24
25
  export interface UlwLoopItem {
@@ -63,6 +64,9 @@ export interface UlwLoopValidationBatch {
63
64
 
64
65
  export interface UlwLoopPlan {
65
66
  version: 1;
67
+ revision?: number;
68
+ brief?: string;
69
+ ledgerResetRevision?: number;
66
70
  evidenceLayoutVersion?: 2;
67
71
  createdAt: string;
68
72
  updatedAt: string;
@@ -72,6 +76,7 @@ export interface UlwLoopPlan {
72
76
  codexGoalMode?: UlwLoopCodexGoalMode;
73
77
  codexObjective?: string;
74
78
  codexObjectiveAliases?: string[];
79
+ acknowledgedDriverObjectives?: string[];
75
80
  aggregateCompletion?: UlwLoopAggregateCompletion;
76
81
  activeGoalId?: string;
77
82
  validationBatches?: readonly UlwLoopValidationBatch[];
@@ -107,15 +112,7 @@ export interface UlwLoopManualQaAdversarialCase {
107
112
  readonly artifactRefs: readonly string[];
108
113
  }
109
114
 
110
- export interface UlwLoopQualityGate {
111
- readonly codeReview: {
112
- readonly by: string;
113
- readonly recommendation: "APPROVE";
114
- readonly codeQualityStatus: "CLEAR" | "WATCH";
115
- readonly reportPath: string;
116
- readonly evidence: string;
117
- readonly blockers: readonly [];
118
- };
115
+ interface UlwLoopQualityGateCommon {
119
116
  readonly manualQa: {
120
117
  readonly by: string;
121
118
  readonly status: "passed";
@@ -147,7 +144,27 @@ export interface UlwLoopQualityGate {
147
144
  };
148
145
  }
149
146
 
147
+ export interface UlwLoopQualityGateLazycodex extends UlwLoopQualityGateCommon {
148
+ readonly surface: "lazycodex";
149
+ readonly codeReview?: {
150
+ readonly by: string;
151
+ readonly recommendation: "APPROVE";
152
+ readonly codeQualityStatus: "CLEAR" | "WATCH";
153
+ readonly reportPath: string;
154
+ readonly evidence: string;
155
+ readonly blockers: readonly [];
156
+ };
157
+ }
158
+
159
+ export interface UlwLoopQualityGateSenpi extends UlwLoopQualityGateCommon {
160
+ readonly surface: "omo-senpi";
161
+ }
162
+
163
+ export type UlwLoopQualityGate = UlwLoopQualityGateLazycodex | UlwLoopQualityGateSenpi;
164
+
150
165
  export interface UlwLoopLedgerEntry {
166
+ revision?: number;
167
+ id?: string;
151
168
  at: string;
152
169
  kind: UlwLoopLedgerEventKind;
153
170
  goalId?: string;
@@ -158,6 +175,7 @@ export interface UlwLoopLedgerEntry {
158
175
  codexGoal?: unknown;
159
176
  evidence?: string;
160
177
  capturedEvidence?: string;
178
+ artifacts?: string[];
161
179
  qualityGate?: unknown;
162
180
  steering?: UlwLoopSteeringAudit;
163
181
  before?: unknown;
@@ -0,0 +1,20 @@
1
+ import type { UlwLoopPlan } from "./types.js";
2
+
3
+ export function normalizeDriverObjective(value: string): string {
4
+ return value.replace(/\s+/g, " ").trim();
5
+ }
6
+
7
+ export function acknowledgedDriverObjectives(plan: UlwLoopPlan): readonly string[] {
8
+ return plan.acknowledgedDriverObjectives ?? [];
9
+ }
10
+
11
+ // A differing driver objective is reported once; the plan remembers the exact text so every later
12
+ // checkpoint under the same driver stays quiet, while a driver rewritten to a third objective is
13
+ // reported again.
14
+ export function acknowledgeDriverObjective(plan: UlwLoopPlan, objective: string | undefined): boolean {
15
+ if (objective === undefined) return false;
16
+ const normalized = normalizeDriverObjective(objective);
17
+ if (!normalized || acknowledgedDriverObjectives(plan).includes(normalized)) return false;
18
+ plan.acknowledgedDriverObjectives = [...acknowledgedDriverObjectives(plan), normalized];
19
+ return true;
20
+ }
@@ -0,0 +1,45 @@
1
+ import { existsSync } from "node:fs";
2
+ import { isAbsolute, relative, resolve, sep } from "node:path";
3
+ import { UlwLoopError } from "./types.js";
4
+
5
+ function fail(message: string, code: string, details: Record<string, unknown>): never {
6
+ throw new UlwLoopError(message, code, { details });
7
+ }
8
+
9
+ function stored(repoRoot: string, absolute: string): string {
10
+ const rel = relative(repoRoot, absolute);
11
+ const inside = rel !== "" && !rel.startsWith("..") && !isAbsolute(rel);
12
+ return inside ? rel.split(sep).join("/") : absolute;
13
+ }
14
+
15
+ // Artifacts are bound at record time: a cited path that does not exist is a claim without a file,
16
+ // so the whole record is refused before any state changes. Paths inside the session cwd persist
17
+ // repo-relative (portable across machines); paths outside persist absolute.
18
+ export function resolveEvidenceArtifacts(
19
+ repoRoot: string,
20
+ artifacts: readonly unknown[] | undefined,
21
+ ): string[] | undefined {
22
+ if (artifacts === undefined) return undefined;
23
+ const seen = new Set<string>();
24
+ const resolved: string[] = [];
25
+ for (const [index, candidate] of artifacts.entries()) {
26
+ const path = typeof candidate === "string" ? candidate.trim() : "";
27
+ if (!path) fail(`Artifact ${index + 1} must be a non-empty path.`, "ULW_LOOP_ARGUMENT_INVALID", { index });
28
+ const absolute = resolve(repoRoot, path);
29
+ if (!existsSync(absolute))
30
+ fail(
31
+ `Evidence artifact does not exist: ${path} (resolved to ${absolute}).`,
32
+ "ULW_LOOP_EVIDENCE_ARTIFACT_MISSING",
33
+ {
34
+ path,
35
+ resolved: absolute,
36
+ },
37
+ );
38
+ const value = stored(repoRoot, absolute);
39
+ if (!seen.has(value)) {
40
+ seen.add(value);
41
+ resolved.push(value);
42
+ }
43
+ }
44
+ return resolved;
45
+ }
@@ -1,6 +1,8 @@
1
+ import { resolveEvidenceArtifacts } from "./evidence-artifacts.js";
1
2
  import { essentialCriteriaOf, hasAllCriteriaPass, hasEssentialCriteriaPass } from "./goal-status.js";
2
3
  import type { UlwLoopScope } from "./paths.js";
3
- import { appendLedger, readUlwLoopPlan, withUlwLoopMutationLock, writePlan } from "./plan-io.js";
4
+ import { commit } from "./plan-commit.js";
5
+ import { readUlwLoopPlan, withUlwLoopMutationLock } from "./plan-io.js";
4
6
  import type { UlwLoopItem, UlwLoopLedgerEntry, UlwLoopPlan, UlwLoopSuccessCriterion } from "./types.js";
5
7
  import { iso, UlwLoopError } from "./types.js";
6
8
 
@@ -11,6 +13,7 @@ type RecordEvidenceArgs = {
11
13
  readonly status: EvidenceStatus;
12
14
  readonly evidence: string;
13
15
  readonly notes?: string;
16
+ readonly artifacts?: readonly string[];
14
17
  };
15
18
 
16
19
  function ulwLoopFail(message: string, code: string, details: Record<string, unknown>): never {
@@ -66,6 +69,7 @@ export async function recordEvidence(
66
69
  const goal = findGoal(plan, args.goalId);
67
70
  const criterion = findCriterion(goal, args.criterionId);
68
71
  const evidence = nonEmptyEvidence(args.evidence);
72
+ const artifacts = resolveEvidenceArtifacts(repoRoot, args.artifacts);
69
73
  const kind = ledgerKind(args.status);
70
74
  const prevStatus = criterion.status;
71
75
  const capturedAt = iso();
@@ -73,9 +77,10 @@ export async function recordEvidence(
73
77
  criterion.capturedEvidence = evidence;
74
78
  criterion.capturedAt = capturedAt;
75
79
  if (args.notes !== undefined) criterion.notes = args.notes;
80
+ if (artifacts !== undefined) criterion.artifacts = artifacts;
81
+ else delete criterion.artifacts;
76
82
  goal.updatedAt = capturedAt;
77
83
  plan.updatedAt = capturedAt;
78
- await writePlan(repoRoot, plan, scope);
79
84
  const ledgerEntry: UlwLoopLedgerEntry = {
80
85
  at: capturedAt,
81
86
  kind,
@@ -84,10 +89,11 @@ export async function recordEvidence(
84
89
  criterionStatus: args.status,
85
90
  evidence,
86
91
  capturedEvidence: evidence,
92
+ ...(artifacts === undefined ? {} : { artifacts }),
87
93
  before: { status: prevStatus },
88
94
  after: { goalId: goal.id, criterionId: criterion.id, status: args.status, evidence, capturedAt, prevStatus },
89
95
  };
90
- await appendLedger(repoRoot, ledgerEntry, scope);
96
+ await commit(repoRoot, scope, { plan, entries: [ledgerEntry] });
91
97
  return { plan, goal, criterion, ledgerEntry };
92
98
  });
93
99
  }
@@ -112,22 +118,23 @@ export async function markCriteriaPendingResetForGoal(
112
118
  criterion.capturedEvidence = null;
113
119
  delete criterion.capturedAt;
114
120
  delete criterion.notes;
121
+ delete criterion.artifacts;
115
122
  }
116
123
  goal.updatedAt = now;
117
124
  plan.updatedAt = now;
118
- await writePlan(repoRoot, plan, scope);
119
- await appendLedger(
120
- repoRoot,
121
- {
122
- at: now,
123
- kind: "criteria_revised",
124
- goalId,
125
- message: `Reset ${goal.successCriteria.length} criteria to pending.`,
126
- before,
127
- after: { resetCount: goal.successCriteria.length },
128
- },
129
- scope,
130
- );
125
+ await commit(repoRoot, scope, {
126
+ plan,
127
+ entries: [
128
+ {
129
+ at: now,
130
+ kind: "criteria_revised",
131
+ goalId,
132
+ message: `Reset ${goal.successCriteria.length} criteria to pending.`,
133
+ before,
134
+ after: { resetCount: goal.successCriteria.length },
135
+ },
136
+ ],
137
+ });
131
138
  return { plan, resetCount: goal.successCriteria.length };
132
139
  });
133
140
  }
@@ -0,0 +1,38 @@
1
+ import { join } from "node:path";
2
+ import { type UlwLoopScope, ulwLoopDir } from "./paths.js";
3
+ import { readOptional, readRecords, reconcilePlan } from "./plan-log.js";
4
+ import type { UlwLoopLedgerEntry } from "./types.js";
5
+
6
+ export function readLedgerAt(dir: string): UlwLoopLedgerEntry[] {
7
+ const entries = new Map<string, UlwLoopLedgerEntry>();
8
+ const lines = (readOptional(join(dir, "ledger.jsonl")) ?? "").split(/\r?\n/);
9
+ // A materialized view is sorted by revision, so a line that carries no revision (or revision 0)
10
+ // AFTER a published revision was appended out-of-band (the removed tool path) and belongs to the
11
+ // newest revision before it - not to the pre-store past a later ledgerResetRevision would discard.
12
+ let reached = 0;
13
+ for (const [index, line] of lines.entries()) {
14
+ if (line.trim().length === 0) continue;
15
+ try {
16
+ const entry: UlwLoopLedgerEntry = JSON.parse(line);
17
+ entry.revision = entry.revision || reached;
18
+ reached = Math.max(reached, entry.revision);
19
+ entry.id ??= `legacy-${index + 1}`;
20
+ entries.set(entry.id, entry);
21
+ } catch (error) {
22
+ if (!(error instanceof SyntaxError)) throw error;
23
+ }
24
+ }
25
+ for (const record of readRecords(dir))
26
+ for (const [seq, entry] of record.ledger.entries()) {
27
+ const id = entry.id ?? `${record.revision}-${seq}`;
28
+ entries.set(id, { ...entry, revision: record.revision, id });
29
+ }
30
+ const reset = reconcilePlan(dir)?.ledgerResetRevision ?? 0;
31
+ const sequence = (entry: UlwLoopLedgerEntry) => Number(entry.id?.split("-").at(-1) ?? 0);
32
+ return [...entries.values()]
33
+ .filter((entry) => (entry.revision ?? 0) >= reset)
34
+ .sort((a, b) => (a.revision ?? 0) - (b.revision ?? 0) || sequence(a) - sequence(b));
35
+ }
36
+ export function readLedger(repoRoot: string, scope?: UlwLoopScope): UlwLoopLedgerEntry[] {
37
+ return readLedgerAt(ulwLoopDir(repoRoot, scope));
38
+ }
@@ -1,11 +1,18 @@
1
1
  import { isAbsolute, join, relative, sep } from "node:path";
2
- import { ULW_LOOP_BRIEF, ULW_LOOP_DIR, ULW_LOOP_GOALS, ULW_LOOP_LEDGER } from "./types.js";
2
+ import {
3
+ ULW_LOOP_BRIEF,
4
+ ULW_LOOP_DIR,
5
+ ULW_LOOP_GOALS,
6
+ ULW_LOOP_LEDGER,
7
+ ULW_LOOP_STATE_LOCK,
8
+ UlwLoopError,
9
+ } from "./types.js";
3
10
 
4
11
  export interface UlwLoopScope {
5
12
  readonly sessionId?: string | null;
6
13
  }
7
14
 
8
- const SESSION_ENV_KEYS = ["OMO_ULW_LOOP_SESSION_ID", "CODEX_SESSION_ID", "CODEX_THREAD_ID"] as const;
15
+ const SESSION_ENV_KEYS = ["OMO_ULW_LOOP_SESSION_ID", "CODEX_SESSION_ID", "CODEX_THREAD_ID", "PI_SESSION_ID"] as const;
9
16
  type EnvMap = Readonly<Record<string, string | undefined>>;
10
17
 
11
18
  export function normalizeUlwLoopSessionId(sessionId: string | null | undefined): string | null {
@@ -63,6 +70,12 @@ export function ulwLoopLedgerPath(repoRoot: string, scope?: UlwLoopScope): strin
63
70
  return join(ulwLoopDir(repoRoot, scope), ULW_LOOP_LEDGER);
64
71
  }
65
72
 
73
+ // One lock per state directory covers goals.json, ledger.jsonl, and the hook
74
+ // counters beside them; the CLI mutations and the Codex hooks all take it.
75
+ export function ulwLoopStateLockPath(repoRoot: string, scope?: UlwLoopScope): string {
76
+ return join(ulwLoopDir(repoRoot, scope), ULW_LOOP_STATE_LOCK);
77
+ }
78
+
66
79
  export function repoRelative(absolutePath: string, repoRoot: string): string {
67
80
  const slashPrefix = `${repoRoot}/`;
68
81
  const backslashPrefix = `${repoRoot}\\`;
@@ -72,10 +85,25 @@ export function repoRelative(absolutePath: string, repoRoot: string): string {
72
85
  return absolutePath.split("\\").join("/");
73
86
  }
74
87
 
88
+ // The plan-level evidence root stays fixed for the whole run, unlike the per-goal attempt dir, so
89
+ // long lanes that span goals have one stable place to write artifacts.
90
+ export function ulwLoopEvidenceRoot(scope?: UlwLoopScope): string {
91
+ const sessionId = normalizeUlwLoopSessionId(scope?.sessionId);
92
+ return sessionId === null ? ".omo/evidence" : `.omo/evidence/ulw/${sessionId}`;
93
+ }
94
+
75
95
  // Both the status --json emitter and the checkpoint enforcement resolve the attempt dir through
76
- // this function; a second resolution path would let the gate reject its own advertised directory.
96
+ // this function from the scope alone; a second resolution path (env, a literal placeholder)
97
+ // would let the gate reject its own advertised directory.
77
98
  export function ulwLoopAttemptEvidenceDir(goalId: string, attempt: number, scope?: UlwLoopScope): string {
78
- const sessionId = normalizeUlwLoopSessionId(scope?.sessionId) ?? resolveUlwLoopSessionIdFromEnv() ?? "session";
99
+ const sessionId = normalizeUlwLoopSessionId(scope?.sessionId);
100
+ if (sessionId === null) {
101
+ throw new UlwLoopError(
102
+ `Evidence for ${goalId} attempt ${attempt} needs a session scope; pass --session-id <id> so the attempt directory lives under .omo/evidence/ulw/<id>/.`,
103
+ "ULW_LOOP_SESSION_SCOPE_REQUIRED",
104
+ { details: { goalId, attempt } },
105
+ );
106
+ }
79
107
  return `.omo/evidence/ulw/${sessionId}/${goalId}/a${attempt}`;
80
108
  }
81
109