oh-my-opencode 4.19.4 → 5.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/README.ja.md +1 -1
  2. package/README.ko.md +1 -1
  3. package/README.md +6 -5
  4. package/README.ru.md +1 -1
  5. package/README.zh-cn.md +1 -1
  6. package/bin/oh-my-opencode.js +14 -1
  7. package/bin/oh-my-opencode.test.ts +21 -0
  8. package/dist/cli/index.js +1452 -703
  9. package/dist/cli-node/index.js +1452 -703
  10. package/dist/config/schema/agent-overrides.d.ts +528 -0
  11. package/dist/config/schema/oh-my-opencode-config.d.ts +495 -0
  12. package/dist/features/monitor/batcher.d.ts +3 -1
  13. package/dist/features/monitor/manager-internals.d.ts +1 -0
  14. package/dist/features/monitor/output-injector-types.d.ts +2 -0
  15. package/dist/features/monitor/output-injector.d.ts +6 -0
  16. package/dist/hooks/todo-continuation-enforcer/types.d.ts +1 -0
  17. package/dist/hooks/todo-continuation-enforcer/unrecoverable-request-error.d.ts +9 -0
  18. package/dist/hooks/tool-pair-validator/hook.test-support.d.ts +29 -0
  19. package/dist/hooks/tool-pair-validator/tool-part-ids.d.ts +14 -5
  20. package/dist/hooks/tool-pair-validator/tool-result-repair.d.ts +4 -3
  21. package/dist/hooks/tool-pair-validator/types.d.ts +5 -22
  22. package/dist/index.js +2776 -2240
  23. package/dist/mcp/lsp.d.ts +1 -0
  24. package/dist/oh-my-opencode.schema.json +1466 -131
  25. package/dist/shared/tmux/constants.d.ts +1 -1
  26. package/dist/skills/ast-grep/SOURCE +1 -1
  27. package/dist/skills/ast-grep/install.ps1 +2 -2
  28. package/dist/skills/ast-grep/install.sh +1 -1
  29. package/dist/skills/ast-grep/references/install.md +2 -2
  30. package/dist/skills/ast-grep/tests/smoke.sh +1 -1
  31. package/dist/skills/start-work/SKILL.md +54 -9
  32. package/dist/skills/ultimate-browsing/SKILL.md +2 -2
  33. package/dist/skills/ultimate-browsing/engine/__main__.py +8 -1
  34. package/dist/skills/ultimate-browsing/engine/bias_check.py +11 -0
  35. package/dist/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  36. package/dist/skills/ultimate-browsing/engine/result_schema.py +10 -1
  37. package/dist/skills/ultimate-browsing/engine/surrogate.py +214 -0
  38. package/dist/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  39. package/dist/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  40. package/dist/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  41. package/dist/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  42. package/dist/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  43. package/dist/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  44. package/dist/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  45. package/dist/skills/ultimate-browsing/engine/validators.py +46 -0
  46. package/dist/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  47. package/dist/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  48. package/dist/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  49. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  50. package/dist/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  51. package/dist/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  52. package/dist/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  53. package/dist/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  54. package/dist/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  55. package/dist/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  56. package/dist/skills/ulw-plan/SKILL.md +1 -1
  57. package/dist/skills/ulw-plan/references/full-workflow.md +3 -3
  58. package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  59. package/dist/skills/ulw-research/SKILL.md +15 -10
  60. package/dist/tui.js +307 -28
  61. package/docs/reference/web-terminal-visual-qa.md +1 -1
  62. package/package.json +27 -19
  63. package/packages/lsp-core/src/lsp/connection.ts +1 -1
  64. package/packages/lsp-daemon/dist/cli.js +27 -13
  65. package/packages/lsp-daemon/dist/client.js +49 -35
  66. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +1 -0
  67. package/packages/lsp-daemon/dist/ensure-daemon.js +18 -5
  68. package/packages/lsp-daemon/dist/index.js +34 -20
  69. package/packages/lsp-tools-mcp/dist/cli.js +1 -1
  70. package/packages/lsp-tools-mcp/dist/lsp/manager.js +1 -1
  71. package/packages/lsp-tools-mcp/dist/mcp.js +1 -1
  72. package/packages/lsp-tools-mcp/dist/tools.js +1 -1
  73. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  74. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +268 -92
  75. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  76. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  77. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +7 -7
  78. package/packages/omo-codex/plugin/components/bootstrap/src/worker.ts +3 -0
  79. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +106 -6
  80. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +106 -6
  81. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  82. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  83. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  84. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  85. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  86. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  87. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  88. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  89. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +56 -42
  90. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  91. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  92. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  93. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  94. package/packages/omo-codex/plugin/components/start-work-continuation/AGENTS.md +1 -0
  95. package/packages/omo-codex/plugin/components/start-work-continuation/README.md +5 -1
  96. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +2 -1
  97. package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +18 -0
  98. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  99. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  100. package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +21 -0
  101. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +105 -0
  102. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  103. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  104. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  105. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  106. package/packages/omo-codex/plugin/components/ultrawork/CHANGELOG.md +2 -0
  107. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
  108. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  109. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
  110. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  111. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
  112. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
  113. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
  114. package/packages/omo-codex/plugin/components/ultrawork/directive.md +3 -2
  115. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  116. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  117. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +3 -2
  118. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +1 -1
  119. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +3 -3
  120. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  121. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
  122. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +2 -0
  123. package/packages/omo-codex/plugin/components/ulw-loop/README.md +11 -11
  124. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +3 -2
  125. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +1 -1
  126. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
  127. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +9 -9
  128. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +1 -1
  129. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +66 -66
  130. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +4 -4
  131. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.js +1 -1
  132. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +1 -1
  133. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +1 -1
  134. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +1 -1
  135. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +2 -2
  136. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  137. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  138. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +3 -3
  139. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +22 -25
  140. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +1 -1
  141. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +9 -9
  142. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +1 -1
  143. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +1 -1
  144. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +4 -4
  145. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +1 -1
  146. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +1 -1
  147. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +1 -1
  148. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +1 -1
  149. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +2 -2
  150. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -2
  151. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +1 -1
  152. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-helpers.test.ts +2 -2
  153. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-kind-guidance.test.ts +1 -1
  154. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +2 -2
  155. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +1 -1
  156. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -5
  157. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +1 -1
  158. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +1 -1
  159. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +1 -1
  160. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  161. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  162. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  163. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  164. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  165. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  166. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  167. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  168. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  169. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  170. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  171. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  172. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  173. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  174. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  175. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  176. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  177. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  178. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  179. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  180. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  181. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  182. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  183. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  184. package/packages/omo-codex/plugin/package-lock.json +13 -13
  185. package/packages/omo-codex/plugin/package.json +1 -1
  186. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +4 -4
  187. package/packages/omo-codex/plugin/skills/ast-grep/SOURCE +1 -1
  188. package/packages/omo-codex/plugin/skills/ast-grep/install.ps1 +2 -2
  189. package/packages/omo-codex/plugin/skills/ast-grep/install.sh +1 -1
  190. package/packages/omo-codex/plugin/skills/ast-grep/references/install.md +2 -2
  191. package/packages/omo-codex/plugin/skills/ast-grep/tests/smoke.sh +1 -1
  192. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +54 -9
  193. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +2 -2
  194. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/__main__.py +8 -1
  195. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/bias_check.py +11 -0
  196. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  197. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/result_schema.py +10 -1
  198. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/surrogate.py +214 -0
  199. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  200. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  201. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  202. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  203. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  204. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  205. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  206. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/validators.py +46 -0
  207. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  208. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  209. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  210. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  211. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  212. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  213. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  214. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  215. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  216. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  217. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +3 -2
  218. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +3 -3
  219. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +22 -25
  220. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +1 -1
  221. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +3 -3
  222. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  223. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +15 -10
  224. package/packages/omo-codex/plugin/test/bootstrap-binlinks.test.mjs +12 -12
  225. package/packages/omo-codex/plugin/test/bootstrap-orchestration.test.mjs +36 -4
  226. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +1 -1
  227. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +4 -4
  228. package/packages/omo-codex/scripts/install-bin-links.test.mjs +56 -2
  229. package/packages/omo-codex/scripts/install-delegated-command.test.mjs +6 -6
  230. package/packages/omo-codex/scripts/install-dist/install-local.mjs +115 -61
  231. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +4 -4
  232. package/packages/omo-codex/scripts/install-local.test.mjs +5 -2
  233. package/packages/shared-skills/index.mjs +19 -1
  234. package/packages/shared-skills/skills/ast-grep/SOURCE +1 -1
  235. package/packages/shared-skills/skills/ast-grep/install.ps1 +2 -2
  236. package/packages/shared-skills/skills/ast-grep/install.sh +1 -1
  237. package/packages/shared-skills/skills/ast-grep/references/install.md +2 -2
  238. package/packages/shared-skills/skills/ast-grep/tests/smoke.sh +1 -1
  239. package/packages/shared-skills/skills/start-work/SKILL.md +54 -9
  240. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +2 -2
  241. package/packages/shared-skills/skills/ultimate-browsing/engine/__main__.py +8 -1
  242. package/packages/shared-skills/skills/ultimate-browsing/engine/bias_check.py +11 -0
  243. package/packages/shared-skills/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  244. package/packages/shared-skills/skills/ultimate-browsing/engine/result_schema.py +10 -1
  245. package/packages/shared-skills/skills/ultimate-browsing/engine/surrogate.py +214 -0
  246. package/packages/shared-skills/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  247. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  248. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  249. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  250. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  251. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  252. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  253. package/packages/shared-skills/skills/ultimate-browsing/engine/validators.py +46 -0
  254. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  255. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  256. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  257. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  258. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  259. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  260. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  261. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  262. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  263. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  264. package/packages/shared-skills/skills/ulw-plan/SKILL.md +1 -1
  265. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +3 -3
  266. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  267. package/packages/shared-skills/skills/ulw-research/SKILL.md +15 -10
  268. package/postinstall.mjs +6 -0
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- // components/ulw-loop/src/checkpoint.ts
3
+ // packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts
4
4
  import { existsSync as existsSync3, statSync } from "node:fs";
5
5
  import { readFile as readFile5 } from "node:fs/promises";
6
6
  import { resolve as resolve3 } from "node:path";
7
7
 
8
- // components/ulw-loop/src/checkpoint-reconciliation.ts
8
+ // packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts
9
9
  import { existsSync } from "node:fs";
10
10
  import { readFile } from "node:fs/promises";
11
11
 
12
- // components/ulw-loop/src/paths.ts
12
+ // packages/omo-codex/plugin/components/ulw-loop/src/paths.ts
13
13
  import { isAbsolute, join, relative, sep } from "node:path";
14
- // components/ulw-loop/src/constants.ts
14
+ // packages/omo-codex/plugin/components/ulw-loop/src/constants.ts
15
15
  var ULW_LOOP_DIR = ".omo/ulw-loop";
16
16
  var ULW_LOOP_BRIEF = "brief.md";
17
17
  var ULW_LOOP_GOALS = "goals.json";
@@ -31,7 +31,7 @@ var ULW_LOOP_SUCCESS_CRITERION_USER_MODELS = [
31
31
  "regression",
32
32
  "adversarial"
33
33
  ];
34
- // components/ulw-loop/src/runtime.ts
34
+ // packages/omo-codex/plugin/components/ulw-loop/src/runtime.ts
35
35
  class UlwLoopError extends Error {
36
36
  code;
37
37
  details;
@@ -47,7 +47,7 @@ class UlwLoopError extends Error {
47
47
  function iso() {
48
48
  return new Date().toISOString();
49
49
  }
50
- // components/ulw-loop/src/paths.ts
50
+ // packages/omo-codex/plugin/components/ulw-loop/src/paths.ts
51
51
  var SESSION_ENV_KEYS = ["OMO_ULW_LOOP_SESSION_ID", "CODEX_SESSION_ID", "CODEX_THREAD_ID"];
52
52
  function normalizeUlwLoopSessionId(sessionId) {
53
53
  const trimmed = sessionId?.trim();
@@ -113,7 +113,7 @@ function isWithinAttemptDir(absolutePath, attemptRoot, pathApi = PLATFORM_PATH_A
113
113
  return !pathApi.isAbsolute(relativePath);
114
114
  }
115
115
 
116
- // components/ulw-loop/src/goal-status.ts
116
+ // packages/omo-codex/plugin/components/ulw-loop/src/goal-status.ts
117
117
  var ULW_LOOP_AGGREGATE_CODEX_OBJECTIVE = aggregateCodexObjectiveForScope();
118
118
  function aggregateCodexObjectiveForScope(scope) {
119
119
  return `Complete the durable ulw-loop plan in ${ulwLoopGoalsRelativePath(scope)}, including later accepted/appended stories, under the original brief constraints; use ${ulwLoopLedgerRelativePath(scope)} as the audit trail.`;
@@ -196,7 +196,7 @@ function hasEssentialCriteriaPass(goal) {
196
196
  return criteria.length > 0 && criteria.every((criterion) => criterion.status === "pass");
197
197
  }
198
198
 
199
- // components/ulw-loop/src/checkpoint-reconciliation.ts
199
+ // packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts
200
200
  function normalizeObjective(value) {
201
201
  return value.replace(/\s+/g, " ").trim();
202
202
  }
@@ -256,7 +256,7 @@ async function canReconcileActiveFinalTaskScopedAggregateSnapshot(repoRoot, plan
256
256
  function buildCompletedLegacyGoalRemediation(goal) {
257
257
  return [
258
258
  "If get_goal returns a different completed legacy/thread objective, do not repeat --status complete in this thread.",
259
- `Record a non-terminal blocker with: omo ulw-loop checkpoint --goal-id ${goal.id} --status blocked --evidence "<completed legacy Codex goal blocks create_goal in this thread>" --codex-goal-json "<different completed get_goal JSON or path>".`,
259
+ `Record a non-terminal blocker with: omo-agent-toolkit ulw-loop checkpoint --goal-id ${goal.id} --status blocked --evidence "<completed legacy Codex goal blocks create_goal in this thread>" --codex-goal-json "<different completed get_goal JSON or path>".`,
260
260
  "Then continue only from a Codex goal context with no active/completed conflicting goal, in the same repo/worktree, and create the intended goal there."
261
261
  ].join(" ");
262
262
  }
@@ -267,7 +267,7 @@ function buildTaskScopedAggregateReconciliationHint(goal, final) {
267
267
  return ` Completed task-scoped aggregate reconciliation requires the checkpoint goal to be the active in-progress OMO goal, evidence that names that active OMO goal id, names .omo/ulw-loop/goals.json or ledger.jsonl, includes completed implementation plus validation/review evidence, and a get_goal objective that maps to the ulw-loop brief/artifact. ${buildCompletedLegacyGoalRemediation(goal)}`;
268
268
  }
269
269
 
270
- // components/ulw-loop/src/codex-goal-snapshot.ts
270
+ // packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts
271
271
  import { existsSync as existsSync2 } from "node:fs";
272
272
  import { readFile as readFile2 } from "node:fs/promises";
273
273
  import { resolve } from "node:path";
@@ -364,7 +364,7 @@ function formatCodexGoalReconciliation(reconciliation) {
364
364
  return parts.join(" ");
365
365
  }
366
366
 
367
- // components/ulw-loop/src/plan-io.ts
367
+ // packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts
368
368
  import { createReadStream } from "node:fs";
369
369
  import { appendFile, mkdir, readFile as readFile3, rename, writeFile } from "node:fs/promises";
370
370
  import { createInterface } from "node:readline";
@@ -408,7 +408,7 @@ async function readUlwLoopPlan(repoRoot, scope) {
408
408
  } catch (error) {
409
409
  if (!hasCode(error, "ENOENT"))
410
410
  throw error;
411
- throw new UlwLoopError(`No ulw-loop plan found at ${repoRelative(path, repoRoot)}. Run \`omo ulw-loop create-goals ...\` first.`, "ULW_LOOP_PLAN_MISSING", { cause: error });
411
+ throw new UlwLoopError(`No ulw-loop plan found at ${repoRelative(path, repoRoot)}. Run \`omo-agent-toolkit ulw-loop create-goals ...\` first.`, "ULW_LOOP_PLAN_MISSING", { cause: error });
412
412
  }
413
413
  const parsed = JSON.parse(raw);
414
414
  if (parsed.version !== 1 || !Array.isArray(parsed.goals)) {
@@ -482,7 +482,7 @@ async function findAcceptedSteeringLedgerEntry(repoRoot, key, scope) {
482
482
  return;
483
483
  }
484
484
 
485
- // components/ulw-loop/src/evidence.ts
485
+ // packages/omo-codex/plugin/components/ulw-loop/src/evidence.ts
486
486
  function ulwLoopFail(message, code, details) {
487
487
  throw new UlwLoopError(message, code, { details });
488
488
  }
@@ -588,10 +588,10 @@ function requireEssentialCriteriaPass(goal) {
588
588
  });
589
589
  }
590
590
 
591
- // components/ulw-loop/src/quality-gate.ts
591
+ // packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts
592
592
  import { resolve as resolve2 } from "node:path";
593
593
 
594
- // components/ulw-loop/src/quality-gate-fields.ts
594
+ // packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts
595
595
  var PLACEHOLDER_PATTERN = /^(?:placeholder|todo|tbd|n\/a|stub)$/i;
596
596
  function invalid(message, field) {
597
597
  throw new UlwLoopError(message, "ULW_LOOP_QUALITY_GATE_INVALID", { details: { field } });
@@ -629,7 +629,7 @@ function literal(value, expected, field) {
629
629
  invalid(`${field} must be ${String(expected)}.`, field);
630
630
  }
631
631
 
632
- // components/ulw-loop/src/quality-gate-verdicts.ts
632
+ // packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts
633
633
  function passedVerdict(value, field) {
634
634
  if (value === "not_applicable")
635
635
  invalid(`${field} must not be not_applicable.`, field);
@@ -650,7 +650,7 @@ function adversarialVerdict(row, field) {
650
650
  invalid(`${field} must be passed or not_applicable with a reason.`, field);
651
651
  }
652
652
 
653
- // components/ulw-loop/src/quality-gate-blockers.ts
653
+ // packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-blockers.ts
654
654
  var BLOCKER_FIELD_KEYS = "blocker blockerSignature blockerEvidence blockerOccurrences blockedAt".split(" ");
655
655
  var URL_PATTERN = /https?:\/\/\S+/g;
656
656
  var PUNCTUATION_PATTERN = /[`"'()[\]{}:,;]/g;
@@ -692,7 +692,7 @@ function clearGoalBlockerFields(goal) {
692
692
  Reflect.deleteProperty(goal, key);
693
693
  }
694
694
 
695
- // components/ulw-loop/src/quality-gate.ts
695
+ // packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts
696
696
  var REVIEWER_ROLES = {
697
697
  codeReview: "lazycodex-code-reviewer",
698
698
  manualQa: "lazycodex-qa-executor",
@@ -876,7 +876,7 @@ function parseAdversarialCases(value, byId) {
876
876
  });
877
877
  }
878
878
 
879
- // components/ulw-loop/src/cli-arg-parser.ts
879
+ // packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts
880
880
  import { readFile as readFile4 } from "node:fs/promises";
881
881
  var VALUE_FLAGS = new Set("--brief --brief-file --session-id --codex-goal-mode --validation-batch-json --goal --goal-id --criterion-id --status --evidence --notes --codex-goal-json --quality-gate-json --kind --rationale --title --objective --target-goal-id --source --after-json --directive-json --directive-file --idempotency-key --proposals-json".split(" "));
882
882
  var SUBCOMMANDS = new Set("create-goals status complete-goals criteria record-evidence checkpoint steer add-goal record-review-blockers".split(" "));
@@ -967,7 +967,7 @@ function parseRecordEvidenceArgs(argv) {
967
967
  return notes ? { ...result, notes } : result;
968
968
  }
969
969
 
970
- // components/ulw-loop/src/validation-batch.ts
970
+ // packages/omo-codex/plugin/components/ulw-loop/src/validation-batch.ts
971
971
  function isObject(value) {
972
972
  return typeof value === "object" && value !== null && !Array.isArray(value);
973
973
  }
@@ -1085,7 +1085,7 @@ function fail(message, code = "ULW_LOOP_VALIDATION_BATCH_INVALID") {
1085
1085
  throw new UlwLoopError(message, code);
1086
1086
  }
1087
1087
 
1088
- // components/ulw-loop/src/checkpoint.ts
1088
+ // packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts
1089
1089
  var QUALITY_GATE_FS = { existsSync: existsSync3, statSync };
1090
1090
  function ulwLoopFail2(message, code) {
1091
1091
  throw new UlwLoopError(message, code);
@@ -1252,17 +1252,17 @@ async function checkpointUlwLoop(repoRoot, args, scope) {
1252
1252
  });
1253
1253
  }
1254
1254
 
1255
- // components/ulw-loop/src/cli-output.ts
1255
+ // packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts
1256
1256
  var ULW_LOOP_HELP = `Usage:
1257
- omo ulw-loop create-goals --brief "..." [--brief-file <path>] [--from-stdin] [--codex-goal-mode aggregate|per_story] [--validation-batch-json <json-or-path>] [--force] [--json]
1258
- omo ulw-loop status [--json]
1259
- omo ulw-loop complete-goals [--retry-failed] [--json]
1260
- omo ulw-loop criteria --goal-id <id> [--json]
1261
- omo ulw-loop record-evidence --goal-id <id> --criterion-id <id> --status pass|fail|blocked --evidence "..." [--notes "..."] [--json]
1262
- omo ulw-loop checkpoint --goal-id <id> --status complete|failed|blocked --evidence "..." --codex-goal-json <...> [--quality-gate-json <...>] [--no-advance] [--json]
1263
- omo ulw-loop steer --kind <kind> ... --evidence "..." --rationale "..." [--proposals-json <json-or-path>] [--json]
1264
- omo ulw-loop add-goal --title "..." --objective "..." [--json]
1265
- omo ulw-loop record-review-blockers --goal-id <id> --title "..." --objective "..." --evidence "..." --codex-goal-json <...> [--json]
1257
+ omo-agent-toolkit ulw-loop create-goals --brief "..." [--brief-file <path>] [--from-stdin] [--codex-goal-mode aggregate|per_story] [--validation-batch-json <json-or-path>] [--force] [--json]
1258
+ omo-agent-toolkit ulw-loop status [--json]
1259
+ omo-agent-toolkit ulw-loop complete-goals [--retry-failed] [--json]
1260
+ omo-agent-toolkit ulw-loop criteria --goal-id <id> [--json]
1261
+ omo-agent-toolkit ulw-loop record-evidence --goal-id <id> --criterion-id <id> --status pass|fail|blocked --evidence "..." [--notes "..."] [--json]
1262
+ omo-agent-toolkit ulw-loop checkpoint --goal-id <id> --status complete|failed|blocked --evidence "..." --codex-goal-json <...> [--quality-gate-json <...>] [--no-advance] [--json]
1263
+ omo-agent-toolkit ulw-loop steer --kind <kind> ... --evidence "..." --rationale "..." [--proposals-json <json-or-path>] [--json]
1264
+ omo-agent-toolkit ulw-loop add-goal --title "..." --objective "..." [--json]
1265
+ omo-agent-toolkit ulw-loop record-review-blockers --goal-id <id> --title "..." --objective "..." --evidence "..." --codex-goal-json <...> [--json]
1266
1266
 
1267
1267
  All subcommands accept [--session-id <id>] to isolate state under .omo/ulw-loop/<id>/; without it, Codex session env is used when present.`;
1268
1268
  function printJson(value) {
@@ -1330,7 +1330,7 @@ function normalizeCodexGoalMode(value) {
1330
1330
  throw new UlwLoopError("Invalid --codex-goal-mode; expected aggregate or per_story.", "ULW_LOOP_CODEX_GOAL_MODE_INVALID", { details: { value } });
1331
1331
  }
1332
1332
 
1333
- // components/ulw-loop/src/codex-goal-instruction.ts
1333
+ // packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts
1334
1334
  function buildCodexGoalInstruction(args) {
1335
1335
  const mode = codexGoalMode(args.plan);
1336
1336
  const createGoal = buildCreateGoalPayload(args.plan, args.goal);
@@ -1373,7 +1373,7 @@ function modeConstraintLines(mode, isFinal) {
1373
1373
  ];
1374
1374
  }
1375
1375
  return [
1376
- "- Codex goal = the whole omo ulw-loop run; OMO G001/G002/etc. = ledger stories.",
1376
+ "- Codex goal = the whole omo-agent-toolkit ulw-loop run; OMO G001/G002/etc. = ledger stories.",
1377
1377
  "- First call get_goal. If no active goal exists, call create_goal with the aggregate payload below.",
1378
1378
  "- If get_goal reports the same aggregate objective as active, continue this OMO story without creating a new Codex goal.",
1379
1379
  "- If a different active or incomplete Codex goal exists, finish/checkpoint that goal before starting this ulw-loop.",
@@ -1406,15 +1406,15 @@ function evidenceLayoutLines(plan) {
1406
1406
  if (plan.evidenceLayoutVersion !== 2)
1407
1407
  return [];
1408
1408
  return [
1409
- "- Evidence layout v2: write every artifact for the active goal (QA matrix, review reports, receipts) under the current attempt directory — read currentAttemptDir from `omo ulw-loop status --json` (.omo/evidence/ulw/<session>/<goalId>/a<attempt>). The final checkpoint rejects quality-gate artifacts outside that directory."
1409
+ "- Evidence layout v2: write every artifact for the active goal (QA matrix, review reports, receipts) under the current attempt directory — read currentAttemptDir from `omo-agent-toolkit ulw-loop status --json` (.omo/evidence/ulw/<session>/<goalId>/a<attempt>). The final checkpoint rejects quality-gate artifacts outside that directory."
1410
1410
  ];
1411
1411
  }
1412
1412
  function finalSection(plan, goal, isFinal, aggregate) {
1413
1413
  if (!isFinal)
1414
1414
  return "- This is not the final ulw-loop story; do not run the final reviewer/manual-QA/gate-review quality gate yet.";
1415
1415
  const option = sessionOption(plan);
1416
- const blockerCommand = `omo 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>"`;
1417
- const checkpointCommand = `omo 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>"`;
1416
+ 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>"`;
1417
+ 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>"`;
1418
1418
  return joinLines([
1419
1419
  "Final story — run mandatory quality gate before update_goal:",
1420
1420
  "- Run targeted verification for changed behavior.",
@@ -1443,11 +1443,11 @@ function joinLines(lines) {
1443
1443
  `);
1444
1444
  }
1445
1445
 
1446
- // components/ulw-loop/src/plan-crud.ts
1446
+ // packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts
1447
1447
  import { existsSync as existsSync4 } from "node:fs";
1448
1448
  import { mkdir as mkdir2, writeFile as writeFile2 } from "node:fs/promises";
1449
1449
 
1450
- // components/ulw-loop/src/plan-goal-factory.ts
1450
+ // packages/omo-codex/plugin/components/ulw-loop/src/plan-goal-factory.ts
1451
1451
  function cleanLine(line) {
1452
1452
  return line.replace(/^\s*(?:[-*+]\s+|\d+[.)]\s+)/, "").trim();
1453
1453
  }
@@ -1536,7 +1536,7 @@ function appendGoalToPlan(plan, title, objective, now) {
1536
1536
  return goal;
1537
1537
  }
1538
1538
 
1539
- // components/ulw-loop/src/plan-crud.ts
1539
+ // packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts
1540
1540
  function isScheduleEligible(goal) {
1541
1541
  return goal.steeringStatus !== "superseded" && goal.steeringStatus !== "blocked";
1542
1542
  }
@@ -1591,7 +1591,7 @@ async function createUlwLoopPlan(repoRoot, args, scope) {
1591
1591
  function completedPlanExistsError(scope) {
1592
1592
  return new UlwLoopError([
1593
1593
  `Existing ulw-loop aggregate is already complete at ${ulwLoopGoalsRelativePath(scope)}.`,
1594
- "Start a new run with `omo ulw-loop create-goals --session-id <new-id> ...` to isolate fresh state.",
1594
+ "Start a new run with `omo-agent-toolkit ulw-loop create-goals --session-id <new-id> ...` to isolate fresh state.",
1595
1595
  "Use --force only when you intentionally want to overwrite the completed evidence."
1596
1596
  ].join(" "), "ULW_LOOP_PLAN_EXISTS_COMPLETE");
1597
1597
  }
@@ -1663,7 +1663,7 @@ function summarizeUlwLoopPlan(plan) {
1663
1663
  };
1664
1664
  }
1665
1665
 
1666
- // components/ulw-loop/src/checkpoint-continuation.ts
1666
+ // packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts
1667
1667
  async function checkpointAndContinue(repoRoot, args, scope) {
1668
1668
  const result = await checkpointUlwLoop(repoRoot, args, scope);
1669
1669
  if (args.status !== "complete" || result.aggregateCompletion !== undefined || !args.advance)
@@ -1726,10 +1726,10 @@ function checkpointStatus(value) {
1726
1726
  throw new UlwLoopError("Missing or invalid --status; expected complete, failed, or blocked.", "ULW_LOOP_STATUS_INVALID", { details: { status: value } });
1727
1727
  }
1728
1728
 
1729
- // components/ulw-loop/src/cli-subcommands.ts
1729
+ // packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts
1730
1730
  import { readFile as readFile6 } from "node:fs/promises";
1731
1731
 
1732
- // components/ulw-loop/src/cli-steering.ts
1732
+ // packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts
1733
1733
  var SOURCES = ["user_prompt_submit", "finding", "cli"];
1734
1734
  var STEERING_KIND_HELP = [
1735
1735
  `Allowed --kind values: ${ULW_LOOP_STEERING_MUTATION_KINDS.join(", ")}`,
@@ -1741,7 +1741,7 @@ var STEERING_KIND_HELP = [
1741
1741
  " revise_criterion: --goal-id, --criterion-id, one of --scenario/--expected-evidence/--user-model, --evidence, --rationale",
1742
1742
  " annotate_ledger: --evidence, --rationale",
1743
1743
  " mark_blocked_superseded: --goal-id, optional --replacements, --evidence, --rationale",
1744
- 'Example: omo ulw-loop steer --kind annotate_ledger --evidence "observed behavior" --rationale "why this changes the plan" --json'
1744
+ 'Example: omo-agent-toolkit ulw-loop steer --kind annotate_ledger --evidence "observed behavior" --rationale "why this changes the plan" --json'
1745
1745
  ].join(`
1746
1746
  `);
1747
1747
  function isKind(value) {
@@ -2036,7 +2036,7 @@ function printSteerBatchResult(result, json) {
2036
2036
  printStatus(result.plan);
2037
2037
  }
2038
2038
 
2039
- // components/ulw-loop/src/review-blockers.ts
2039
+ // packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts
2040
2040
  var BLOCKER_FIELDS = "blockedReason blockerSignature blockerOccurrenceCount requiredExternalDecision nonRetriable failedAt failureReason completedAt blocker blockerEvidence blockerOccurrences blockedAt".split(" ");
2041
2041
  function ulwLoopError(message, code) {
2042
2042
  throw new UlwLoopError(message, code);
@@ -2102,7 +2102,7 @@ async function recordFinalReviewBlockers(repoRoot, args, scope) {
2102
2102
  });
2103
2103
  }
2104
2104
 
2105
- // components/ulw-loop/src/steering-mutations.ts
2105
+ // packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts
2106
2106
  var read2 = (value, key) => Object.entries(value).find(([name]) => name === key)?.[1];
2107
2107
  var isText = (value) => typeof value === "string" && value.trim().length > 0;
2108
2108
  var text3 = (value, key) => {
@@ -2189,7 +2189,7 @@ function reviseCriterion(plan, proposal, now) {
2189
2189
  target.updatedAt = now;
2190
2190
  }
2191
2191
 
2192
- // components/ulw-loop/src/steering-snapshot.ts
2192
+ // packages/omo-codex/plugin/components/ulw-loop/src/steering-snapshot.ts
2193
2193
  function buildSteeringPlanSnapshot(plan, changedGoalIds) {
2194
2194
  const snapshot = {
2195
2195
  updatedAt: plan.updatedAt,
@@ -2213,7 +2213,7 @@ function changedGoalIdsBetween(before, after2) {
2213
2213
  return changed;
2214
2214
  }
2215
2215
 
2216
- // components/ulw-loop/src/steering.ts
2216
+ // packages/omo-codex/plugin/components/ulw-loop/src/steering.ts
2217
2217
  var SOURCES2 = ["user_prompt_submit", "finding", "cli"];
2218
2218
  var PROTECTED = new Set(["aggregateCompletion", "codexObjective", "codexObjectiveAliases", "originalConstraints", "qualityGate", "status", "completedAt", "completionStatus"]);
2219
2219
  var isObject2 = (value) => typeof value === "object" && value !== null;
@@ -2398,7 +2398,7 @@ function isProposal(value) {
2398
2398
  return isPlain2(value) && isKind2(read3(value, "kind")) && isSource2(read3(value, "source")) && isText2(read3(value, "evidence")) && isText2(read3(value, "rationale"));
2399
2399
  }
2400
2400
  function parseUlwLoopSteeringDirective(text5) {
2401
- const match = /(?:^|\s)(?:OMO_ULW_LOOP_STEER|omo\.ulw-loop\.steer|omo ulw-loop steer):\s*([\s\S]+)$/u.exec(text5);
2401
+ const match = /(?:^|\s)(?:OMO_ULW_LOOP_STEER|omo\.ulw-loop\.steer|omo ulw-loop steer|omo-agent-toolkit ulw-loop steer):\s*([\s\S]+)$/u.exec(text5);
2402
2402
  if (match?.[1] === undefined)
2403
2403
  return null;
2404
2404
  try {
@@ -2450,7 +2450,7 @@ function ledgerEntry(proposal, audit, at) {
2450
2450
  return entry;
2451
2451
  }
2452
2452
 
2453
- // components/ulw-loop/src/steering-batch.ts
2453
+ // packages/omo-codex/plugin/components/ulw-loop/src/steering-batch.ts
2454
2454
  async function steerUlwLoopBatch(repoRoot, proposals, scope) {
2455
2455
  return withUlwLoopMutationLock(repoRoot, scope, async () => {
2456
2456
  const plan = await readUlwLoopPlan(repoRoot, scope);
@@ -2531,7 +2531,7 @@ function ledgerEntry2(proposal, audit, at) {
2531
2531
  return entry;
2532
2532
  }
2533
2533
 
2534
- // components/ulw-loop/src/cli-subcommands.ts
2534
+ // packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts
2535
2535
  async function createGoals(repoRoot, argv, json, scope) {
2536
2536
  const briefFile = readValue(argv, "--brief-file");
2537
2537
  const brief = readValue(argv, "--brief") ?? (briefFile === undefined ? undefined : await readFile6(briefFile, "utf8")) ?? (hasFlag(argv, "--from-stdin") ? await readStdin() : undefined) ?? positionalText(argv);
@@ -2687,7 +2687,7 @@ function findGoal3(plan, goalId) {
2687
2687
  throw new UlwLoopError(`Unknown ulw-loop id: ${goalId}.`, "ULW_LOOP_GOAL_NOT_FOUND", { details: { goalId } });
2688
2688
  }
2689
2689
 
2690
- // components/ulw-loop/src/cli-commands.ts
2690
+ // packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts
2691
2691
  var ULW_LOOP_SUBCOMMANDS = [
2692
2692
  "help",
2693
2693
  "create-goals",
@@ -2786,10 +2786,10 @@ function commandScope(argv) {
2786
2786
  return sessionId === null ? undefined : { sessionId };
2787
2787
  }
2788
2788
 
2789
- // components/ulw-loop/src/ultrawork-directive.ts
2789
+ // packages/omo-codex/plugin/components/ulw-loop/src/ultrawork-directive.ts
2790
2790
  import { readFileSync as readFileSync2 } from "node:fs";
2791
2791
 
2792
- // components/ulw-loop/src/ultrawork-skill-pointer.ts
2792
+ // packages/omo-codex/plugin/components/ulw-loop/src/ultrawork-skill-pointer.ts
2793
2793
  import { existsSync as existsSync5, readFileSync } from "node:fs";
2794
2794
  import { fileURLToPath } from "node:url";
2795
2795
  var ULTRAWORK_SKILL_POINTER_TEMPLATE = `<ultrawork-mode>
@@ -2837,7 +2837,7 @@ function buildUltraworkAdditionalContext(options = {}) {
2837
2837
  return ULTRAWORK_DIRECTIVE;
2838
2838
  }
2839
2839
 
2840
- // components/ulw-loop/src/ultrawork-directive.ts
2840
+ // packages/omo-codex/plugin/components/ulw-loop/src/ultrawork-directive.ts
2841
2841
  var ULTRAWORK_CURRENT_PROMPT_PATTERN = /(?:ultrawork|ulw)/i;
2842
2842
  var ULTRAWORK_DIRECTIVE_MARKER = "<ultrawork-mode>";
2843
2843
  var TRANSCRIPT_SEARCH_BYTES = 512000;
@@ -2940,7 +2940,7 @@ function isRecord3(value) {
2940
2940
  return typeof value === "object" && value !== null && !Array.isArray(value);
2941
2941
  }
2942
2942
 
2943
- // components/ulw-loop/src/codex-hook.ts
2943
+ // packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts
2944
2944
  var CREATE_GOAL_TOOL_NAME = "create_goal";
2945
2945
  var CREATE_GOAL_PAYLOAD_WARNING = "Use create_goal with objective only. Omit token_budget so the goal stays unlimited, and put lifecycle status changes on update_goal.";
2946
2946
  function parseUserPromptSubmitPayload(raw) {
@@ -2995,7 +2995,7 @@ async function applyUserPromptUlwLoopSteering(payload, options = {}) {
2995
2995
  }
2996
2996
  }
2997
2997
  function hasSteeringDirectiveMarker(prompt) {
2998
- return /(?:^|\s)(?:OMO_ULW_LOOP_STEER|omo\.ulw-loop\.steer|omo ulw-loop steer):/u.test(prompt);
2998
+ return /(?:^|\s)(?:OMO_ULW_LOOP_STEER|omo\.ulw-loop\.steer|omo ulw-loop steer|omo-agent-toolkit ulw-loop steer):/u.test(prompt);
2999
2999
  }
3000
3000
  function payloadScope(payload) {
3001
3001
  return { sessionId: payload.session_id };
@@ -3077,7 +3077,7 @@ function readAll(stdin) {
3077
3077
  });
3078
3078
  }
3079
3079
 
3080
- // components/ulw-loop/src/spawn-guard.ts
3080
+ // packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts
3081
3081
  import { existsSync as existsSync6, readdirSync, readFileSync as readFileSync3, statSync as statSync2, writeFileSync } from "node:fs";
3082
3082
  import { join as join2 } from "node:path";
3083
3083
  var SPAWN_TOOL_TOKENS = new Set(["spawn_agent", "collaborationspawn_agent", "collaboration.spawn_agent"]);
@@ -3214,7 +3214,7 @@ function readPlan(goalsPath) {
3214
3214
  }
3215
3215
  }
3216
3216
 
3217
- // components/ulw-loop/src/stop-resume-hook.ts
3217
+ // packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts
3218
3218
  import { existsSync as existsSync7, readFileSync as readFileSync4, writeFileSync as writeFileSync2 } from "node:fs";
3219
3219
  import { isAbsolute as isAbsolute2, join as join3, resolve as resolve4, sep as sep2 } from "node:path";
3220
3220
  var RESUME_CAP = 2;
@@ -3297,9 +3297,9 @@ function renderResumeDirective(plan, goal3, sessionId) {
3297
3297
  return [
3298
3298
  `The ulw-loop run in this session still has unfinished goals (next: ${goal3.id} — ${goal3.title}).`,
3299
3299
  "The turn ended before the loop completed. Resume it now:",
3300
- `1. Run \`omo ulw-loop status${option} --json\` to reload the plan, the active goal, and currentAttemptDir.`,
3300
+ `1. Run \`omo-agent-toolkit ulw-loop status${option} --json\` to reload the plan, the active goal, and currentAttemptDir.`,
3301
3301
  "2. Continue the active goal's remaining success criteria, recording evidence with record-evidence.",
3302
- `3. Checkpoint through \`omo ulw-loop checkpoint${option}\` when the goal's criteria are proven; a complete checkpoint prints the next goal instruction.`,
3302
+ `3. Checkpoint through \`omo-agent-toolkit ulw-loop checkpoint${option}\` when the goal's criteria are proven; a complete checkpoint prints the next goal instruction.`,
3303
3303
  "If the loop is genuinely blocked on the user, checkpoint the goal as blocked with the reason instead."
3304
3304
  ].join(`
3305
3305
  `);
@@ -3399,13 +3399,13 @@ function parseStopPayload(value) {
3399
3399
  };
3400
3400
  }
3401
3401
 
3402
- // components/ulw-loop/src/cli.ts
3402
+ // packages/omo-codex/plugin/components/ulw-loop/src/cli.ts
3403
3403
  var TOP_LEVEL_HELP = `Usage:
3404
- omo ulw-loop <subcommand> [args]
3405
- omo hook user-prompt-submit [--with-ultrawork] (Codex UserPromptSubmit hook)
3406
- omo help | --help | -h (this message)
3404
+ omo-agent-toolkit ulw-loop <subcommand> [args]
3405
+ omo-agent-toolkit hook user-prompt-submit [--with-ultrawork] (Codex UserPromptSubmit hook)
3406
+ omo-agent-toolkit help | --help | -h (this message)
3407
3407
 
3408
- Run \`omo ulw-loop help\` for ulw-loop subcommands.
3408
+ Run \`omo-agent-toolkit ulw-loop help\` for ulw-loop subcommands.
3409
3409
  `;
3410
3410
  async function main() {
3411
3411
  const argv = process.argv.slice(2);
@@ -42,7 +42,7 @@ function modeConstraintLines(mode, isFinal) {
42
42
  ];
43
43
  }
44
44
  return [
45
- "- Codex goal = the whole omo ulw-loop run; OMO G001/G002/etc. = ledger stories.",
45
+ "- Codex goal = the whole omo-agent-toolkit ulw-loop run; OMO G001/G002/etc. = ledger stories.",
46
46
  "- First call get_goal. If no active goal exists, call create_goal with the aggregate payload below.",
47
47
  "- If get_goal reports the same aggregate objective as active, continue this OMO story without creating a new Codex goal.",
48
48
  "- If a different active or incomplete Codex goal exists, finish/checkpoint that goal before starting this ulw-loop.",
@@ -77,15 +77,15 @@ function evidenceLayoutLines(plan) {
77
77
  if (plan.evidenceLayoutVersion !== 2)
78
78
  return [];
79
79
  return [
80
- "- Evidence layout v2: write every artifact for the active goal (QA matrix, review reports, receipts) under the current attempt directory — read currentAttemptDir from `omo ulw-loop status --json` (.omo/evidence/ulw/<session>/<goalId>/a<attempt>). The final checkpoint rejects quality-gate artifacts outside that directory.",
80
+ "- Evidence layout v2: write every artifact for the active goal (QA matrix, review reports, receipts) under the current attempt directory — read currentAttemptDir from `omo-agent-toolkit ulw-loop status --json` (.omo/evidence/ulw/<session>/<goalId>/a<attempt>). The final checkpoint rejects quality-gate artifacts outside that directory.",
81
81
  ];
82
82
  }
83
83
  function finalSection(plan, goal, isFinal, aggregate) {
84
84
  if (!isFinal)
85
85
  return "- This is not the final ulw-loop story; do not run the final reviewer/manual-QA/gate-review quality gate yet.";
86
86
  const option = sessionOption(plan);
87
- const blockerCommand = `omo 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>"`;
88
- const checkpointCommand = `omo 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>"`;
87
+ 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>"`;
88
+ 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>"`;
89
89
  return joinLines([
90
90
  "Final story — run mandatory quality gate before update_goal:",
91
91
  "- Run targeted verification for changed behavior.",
@@ -59,7 +59,7 @@ export async function applyUserPromptUlwLoopSteering(payload, options = {}) {
59
59
  }
60
60
  }
61
61
  function hasSteeringDirectiveMarker(prompt) {
62
- return /(?:^|\s)(?:OMO_ULW_LOOP_STEER|omo\.ulw-loop\.steer|omo ulw-loop steer):/u.test(prompt);
62
+ return /(?:^|\s)(?:OMO_ULW_LOOP_STEER|omo\.ulw-loop\.steer|omo ulw-loop steer|omo-agent-toolkit ulw-loop steer):/u.test(prompt);
63
63
  }
64
64
  function payloadScope(payload) {
65
65
  return { sessionId: payload.session_id };
@@ -59,7 +59,7 @@ export async function createUlwLoopPlan(repoRoot, args, scope) {
59
59
  function completedPlanExistsError(scope) {
60
60
  return new UlwLoopError([
61
61
  `Existing ulw-loop aggregate is already complete at ${ulwLoopGoalsRelativePath(scope)}.`,
62
- "Start a new run with `omo ulw-loop create-goals --session-id <new-id> ...` to isolate fresh state.",
62
+ "Start a new run with `omo-agent-toolkit ulw-loop create-goals --session-id <new-id> ...` to isolate fresh state.",
63
63
  "Use --force only when you intentionally want to overwrite the completed evidence.",
64
64
  ].join(" "), "ULW_LOOP_PLAN_EXISTS_COMPLETE");
65
65
  }
@@ -47,7 +47,7 @@ export async function readUlwLoopPlan(repoRoot, scope) {
47
47
  catch (error) {
48
48
  if (!hasCode(error, "ENOENT"))
49
49
  throw error;
50
- throw new UlwLoopError(`No ulw-loop plan found at ${repoRelative(path, repoRoot)}. Run \`omo ulw-loop create-goals ...\` first.`, "ULW_LOOP_PLAN_MISSING", { cause: error });
50
+ throw new UlwLoopError(`No ulw-loop plan found at ${repoRelative(path, repoRoot)}. Run \`omo-agent-toolkit ulw-loop create-goals ...\` first.`, "ULW_LOOP_PLAN_MISSING", { cause: error });
51
51
  }
52
52
  const parsed = JSON.parse(raw);
53
53
  if (parsed.version !== 1 || !Array.isArray(parsed.goals)) {
@@ -188,7 +188,7 @@ function isProposal(value) {
188
188
  return isPlain(value) && isKind(read(value, "kind")) && isSource(read(value, "source")) && isText(read(value, "evidence")) && isText(read(value, "rationale"));
189
189
  }
190
190
  export function parseUlwLoopSteeringDirective(text) {
191
- const match = /(?:^|\s)(?:OMO_ULW_LOOP_STEER|omo\.ulw-loop\.steer|omo ulw-loop steer):\s*([\s\S]+)$/u.exec(text);
191
+ const match = /(?:^|\s)(?:OMO_ULW_LOOP_STEER|omo\.ulw-loop\.steer|omo ulw-loop steer|omo-agent-toolkit ulw-loop steer):\s*([\s\S]+)$/u.exec(text);
192
192
  if (match?.[1] === undefined)
193
193
  return null;
194
194
  try {
@@ -91,9 +91,9 @@ function renderResumeDirective(plan, goal, sessionId) {
91
91
  return [
92
92
  `The ulw-loop run in this session still has unfinished goals (next: ${goal.id} — ${goal.title}).`,
93
93
  "The turn ended before the loop completed. Resume it now:",
94
- `1. Run \`omo ulw-loop status${option} --json\` to reload the plan, the active goal, and currentAttemptDir.`,
94
+ `1. Run \`omo-agent-toolkit ulw-loop status${option} --json\` to reload the plan, the active goal, and currentAttemptDir.`,
95
95
  "2. Continue the active goal's remaining success criteria, recording evidence with record-evidence.",
96
- `3. Checkpoint through \`omo ulw-loop checkpoint${option}\` when the goal's criteria are proven; a complete checkpoint prints the next goal instruction.`,
96
+ `3. Checkpoint through \`omo-agent-toolkit ulw-loop checkpoint${option}\` when the goal's criteria are proven; a complete checkpoint prints the next goal instruction.`,
97
97
  "If the loop is genuinely blocked on the user, checkpoint the goal as blocked with the reason instead.",
98
98
  ].join("\n");
99
99
  }
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit --with-ultrawork",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 4.19.4) Checking Ulw-Loop Steering"
10
+ "statusMessage": "(OmO 5.0.0-beta.2) Checking Ulw-Loop Steering"
11
11
  }
12
12
  ]
13
13
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO 4.19.4) Enforcing Unlimited Ulw-Loop Budget"
23
+ "statusMessage": "(OmO 5.0.0-beta.2) Enforcing Unlimited Ulw-Loop Budget"
24
24
  }
25
25
  ]
26
26
  },
@@ -31,7 +31,7 @@
31
31
  "type": "command",
32
32
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use-spawn",
33
33
  "timeout": 5,
34
- "statusMessage": "(OmO 4.19.4) Guarding Ulw-Loop Spawns"
34
+ "statusMessage": "(OmO 5.0.0-beta.2) Guarding Ulw-Loop Spawns"
35
35
  }
36
36
  ]
37
37
  }
@@ -43,7 +43,7 @@
43
43
  "type": "command",
44
44
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook stop",
45
45
  "timeout": 10,
46
- "statusMessage": "(OmO 4.19.4) Checking Ulw-Loop Resume"
46
+ "statusMessage": "(OmO 5.0.0-beta.2) Checking Ulw-Loop Resume"
47
47
  }
48
48
  ]
49
49
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ulw-loop",
3
- "version": "4.19.4",
3
+ "version": "5.0.0-beta.2",
4
4
  "description": "Codex plugin: durable repo-native multi-goal orchestration with embedded success criteria and observable evidence audit.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -20,9 +20,9 @@ This skill is intentionally compact. The full workflow lives in `references/full
20
20
  ## Non-Negotiables
21
21
 
22
22
  - Use the ulw-loop CLI state under `.omo/ulw-loop`; do not hand-edit goal state.
23
- - Register goals up front (`omo ulw-loop create-goals`, then `create_goal` from the printed handoff) and mirror every atomic step into the live `update_plan` checklist: one ultra-granular step per action, exactly one in_progress, transitions marked the instant they happen.
24
- - After any compaction or context loss, re-read brief + goals + ledger FIRST plus `omo ulw-loop status --json`, then resume; never re-plan from scratch.
25
- - If `omo ulw-loop create-goals` says the existing aggregate is already complete, start unrelated new work with a fresh `--session-id <new-id>` instead of steering or forcing the completed default state. Use `--force` only to intentionally overwrite completed evidence.
23
+ - Register goals up front (`omo-agent-toolkit ulw-loop create-goals`, then `create_goal` from the printed handoff) and mirror every atomic step into the live `update_plan` checklist: one ultra-granular step per action, exactly one in_progress, transitions marked the instant they happen.
24
+ - After any compaction or context loss, re-read brief + goals + ledger FIRST plus `omo-agent-toolkit ulw-loop status --json`, then resume; never re-plan from scratch.
25
+ - If `omo-agent-toolkit ulw-loop create-goals` says the existing aggregate is already complete, start unrelated new work with a fresh `--session-id <new-id>` instead of steering or forcing the completed default state. Use `--force` only to intentionally overwrite completed evidence.
26
26
  - Every success criterion needs observable evidence from a real surface: a channel (terminal/TUI via the xterm.js web terminal, HTTP, browser, computer-use) or, for CLI- or data-shaped criteria, an auxiliary surface (CLI stdout, DB diff, parsed config dump).
27
27
  - Evidence is bound to the tree it was captured at (`git rev-parse --short "HEAD^{tree}"`); it goes stale only when tracked content changes — a rebase or amend that keeps the tree identical keeps it valid. When the tree differs, re-run at the current HEAD and re-record, never relabel or regenerate. Record only after cleanup receipts exist.
28
28
  - Delegate code edits, test writes, fixes, and QA execution to right-sized Codex subagents when the workflow requires it.