oh-my-opencode 4.19.3 → 5.0.0-beta.1

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 (347) hide show
  1. package/.agents/command/get-unpublished-changes.md +2 -0
  2. package/.agents/command/omomomo.md +1 -1
  3. package/.agents/command/publish.md +7 -0
  4. package/.agents/skills/get-unpublished-changes/SKILL.md +2 -0
  5. package/.agents/skills/hyperplan/SKILL.md +3 -3
  6. package/.agents/skills/omomomo/SKILL.md +1 -1
  7. package/.agents/skills/publish/SKILL.md +7 -0
  8. package/.opencode/command/get-unpublished-changes.md +2 -0
  9. package/.opencode/command/omomomo.md +1 -1
  10. package/.opencode/command/publish.md +7 -0
  11. package/.opencode/skills/hyperplan/SKILL.md +3 -3
  12. package/README.ja.md +1 -1
  13. package/README.ko.md +1 -1
  14. package/README.md +6 -5
  15. package/README.ru.md +1 -1
  16. package/README.zh-cn.md +1 -1
  17. package/bin/oh-my-opencode.js +14 -1
  18. package/bin/oh-my-opencode.test.ts +21 -0
  19. package/dist/agents/sisyphus-junior/agent.d.ts +1 -1
  20. package/dist/cli/doctor/checks/deprecated-reasoning-keys.d.ts +2 -0
  21. package/dist/cli/index.js +2925 -1919
  22. package/dist/cli-node/index.js +2925 -1919
  23. package/dist/config/schema/agent-overrides.d.ts +1343 -15
  24. package/dist/config/schema/categories.d.ts +132 -0
  25. package/dist/config/schema/fallback-models.d.ts +50 -0
  26. package/dist/config/schema/oh-my-opencode-config.d.ts +1322 -11
  27. package/dist/config-migration/index.d.ts +1 -0
  28. package/dist/config-migration/migration-plans.d.ts +1 -0
  29. package/dist/config-migration/reasoning-unification.d.ts +3 -0
  30. package/dist/features/monitor/batcher.d.ts +3 -1
  31. package/dist/features/monitor/manager-internals.d.ts +1 -0
  32. package/dist/features/monitor/output-injector-types.d.ts +2 -0
  33. package/dist/features/monitor/output-injector.d.ts +6 -0
  34. package/dist/features/team-mode/tools/lifecycle-test-fixture.d.ts +2 -0
  35. package/dist/hooks/codegraph-bootstrap/command-runner.d.ts +1 -0
  36. package/dist/hooks/model-fallback/next-fallback.d.ts +1 -0
  37. package/dist/hooks/runtime-fallback/constants.d.ts +1 -1
  38. package/dist/hooks/todo-continuation-enforcer/types.d.ts +1 -0
  39. package/dist/hooks/todo-continuation-enforcer/unrecoverable-request-error.d.ts +9 -0
  40. package/dist/hooks/tool-pair-validator/hook.test-support.d.ts +29 -0
  41. package/dist/hooks/tool-pair-validator/tool-part-ids.d.ts +14 -5
  42. package/dist/hooks/tool-pair-validator/tool-result-repair.d.ts +4 -3
  43. package/dist/hooks/tool-pair-validator/types.d.ts +5 -22
  44. package/dist/index.js +4864 -4011
  45. package/dist/mcp/lsp.d.ts +1 -0
  46. package/dist/oh-my-opencode.schema.json +3221 -222
  47. package/dist/plugin-handlers/prometheus-agent-config-builder.d.ts +1 -0
  48. package/dist/shared/agent-variant.d.ts +11 -0
  49. package/dist/shared/session-prompt-params-helpers.d.ts +6 -1
  50. package/dist/shared/tmux/constants.d.ts +1 -1
  51. package/dist/skills/ast-grep/SOURCE +1 -1
  52. package/dist/skills/ast-grep/install.ps1 +2 -2
  53. package/dist/skills/ast-grep/install.sh +1 -1
  54. package/dist/skills/ast-grep/references/install.md +2 -2
  55. package/dist/skills/ast-grep/tests/smoke.sh +1 -1
  56. package/dist/skills/coding-agent-sessions/SKILL.md +4 -3
  57. package/dist/skills/coding-agent-sessions/references/all-platforms.md +3 -1
  58. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +140 -0
  59. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +3 -0
  60. package/dist/skills/data-scientist/SKILL.md +243 -0
  61. package/dist/skills/data-scientist/references/common-scenarios.md +176 -0
  62. package/dist/skills/data-scientist/references/execution-templates.md +197 -0
  63. package/dist/skills/data-scientist/references/integration-patterns.md +153 -0
  64. package/dist/skills/data-scientist/references/performance-benchmarks.md +37 -0
  65. package/dist/skills/data-scientist/references/uv-setup.md +78 -0
  66. package/dist/skills/data-scientist/scripts/quick-query.py +111 -0
  67. package/dist/skills/data-scientist/scripts/setup-uv.ps1 +53 -0
  68. package/dist/skills/data-scientist/scripts/setup-uv.sh +60 -0
  69. package/dist/skills/debugging/SKILL.md +1 -1
  70. package/dist/skills/programming/SKILL.md +1 -2
  71. package/dist/skills/start-work/SKILL.md +54 -9
  72. package/dist/skills/ultimate-browsing/SKILL.md +2 -2
  73. package/dist/skills/ultimate-browsing/engine/__main__.py +8 -1
  74. package/dist/skills/ultimate-browsing/engine/bias_check.py +11 -0
  75. package/dist/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  76. package/dist/skills/ultimate-browsing/engine/result_schema.py +10 -1
  77. package/dist/skills/ultimate-browsing/engine/surrogate.py +214 -0
  78. package/dist/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  79. package/dist/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  80. package/dist/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  81. package/dist/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  82. package/dist/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  83. package/dist/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  84. package/dist/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  85. package/dist/skills/ultimate-browsing/engine/validators.py +46 -0
  86. package/dist/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  87. package/dist/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  88. package/dist/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  89. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  90. package/dist/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  91. package/dist/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  92. package/dist/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  93. package/dist/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  94. package/dist/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  95. package/dist/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  96. package/dist/skills/ulw-plan/SKILL.md +2 -2
  97. package/dist/skills/ulw-plan/references/full-workflow.md +3 -3
  98. package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  99. package/dist/skills/ulw-research/SKILL.md +128 -12
  100. package/dist/tools/delegate-task/builtin-categories.d.ts +1 -0
  101. package/dist/tools/delegate-task/builtin-category-definition.d.ts +1 -0
  102. package/dist/tools/delegate-task/constants.d.ts +1 -1
  103. package/dist/tui.js +1271 -1108
  104. package/docs/reference/web-terminal-visual-qa.md +1 -1
  105. package/package.json +27 -19
  106. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +2 -2
  107. package/packages/lsp-core/src/lsp/connection.ts +1 -1
  108. package/packages/lsp-daemon/dist/cli.js +27 -13
  109. package/packages/lsp-daemon/dist/client.js +49 -35
  110. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +1 -0
  111. package/packages/lsp-daemon/dist/ensure-daemon.js +18 -5
  112. package/packages/lsp-daemon/dist/index.js +34 -20
  113. package/packages/lsp-tools-mcp/dist/cli.js +1 -1
  114. package/packages/lsp-tools-mcp/dist/lsp/manager.js +1 -1
  115. package/packages/lsp-tools-mcp/dist/mcp.js +1 -1
  116. package/packages/lsp-tools-mcp/dist/tools.js +1 -1
  117. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  118. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +289 -95
  119. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  120. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  121. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +7 -7
  122. package/packages/omo-codex/plugin/components/bootstrap/src/worker.ts +3 -0
  123. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +385 -64
  124. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +336 -47
  125. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  126. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +6 -0
  127. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  128. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  129. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  130. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  131. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  132. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  133. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  134. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +56 -42
  135. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  136. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  137. package/packages/omo-codex/plugin/components/rules/dist/cli.js +1 -1
  138. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  139. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  140. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +1 -1
  141. package/packages/omo-codex/plugin/components/start-work-continuation/AGENTS.md +1 -0
  142. package/packages/omo-codex/plugin/components/start-work-continuation/README.md +5 -1
  143. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +2 -1
  144. package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +18 -0
  145. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  146. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  147. package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +21 -0
  148. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +105 -0
  149. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  150. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  151. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  152. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  153. package/packages/omo-codex/plugin/components/ultrawork/CHANGELOG.md +2 -0
  154. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
  155. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
  156. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
  157. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
  158. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
  159. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
  160. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
  161. package/packages/omo-codex/plugin/components/ultrawork/directive.md +3 -2
  162. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  163. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  164. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +3 -2
  165. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +2 -2
  166. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +3 -3
  167. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  168. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
  169. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +2 -0
  170. package/packages/omo-codex/plugin/components/ulw-loop/README.md +11 -11
  171. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +3 -2
  172. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +1 -1
  173. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +1 -1
  174. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +9 -9
  175. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +1 -1
  176. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +66 -66
  177. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +4 -4
  178. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.js +1 -1
  179. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +1 -1
  180. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +1 -1
  181. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +1 -1
  182. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +2 -2
  183. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  184. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  185. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +3 -3
  186. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +22 -25
  187. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +1 -1
  188. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +9 -9
  189. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +1 -1
  190. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +1 -1
  191. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +4 -4
  192. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +1 -1
  193. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +1 -1
  194. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +1 -1
  195. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +1 -1
  196. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +2 -2
  197. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -2
  198. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +1 -1
  199. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-helpers.test.ts +2 -2
  200. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-kind-guidance.test.ts +1 -1
  201. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +2 -2
  202. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +1 -1
  203. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -5
  204. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +1 -1
  205. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +1 -1
  206. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +1 -1
  207. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  208. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  209. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  210. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  211. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  212. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  213. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  214. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  215. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  216. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  217. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  218. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  219. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  220. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  221. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  222. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  223. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  224. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  225. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  226. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  227. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  228. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  229. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  230. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  231. package/packages/omo-codex/plugin/package-lock.json +13 -13
  232. package/packages/omo-codex/plugin/package.json +1 -1
  233. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +8 -2
  234. package/packages/omo-codex/plugin/skills/ast-grep/SOURCE +1 -1
  235. package/packages/omo-codex/plugin/skills/ast-grep/install.ps1 +2 -2
  236. package/packages/omo-codex/plugin/skills/ast-grep/install.sh +1 -1
  237. package/packages/omo-codex/plugin/skills/ast-grep/references/install.md +2 -2
  238. package/packages/omo-codex/plugin/skills/ast-grep/tests/smoke.sh +1 -1
  239. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +4 -3
  240. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +3 -1
  241. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +140 -0
  242. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +3 -0
  243. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +243 -0
  244. package/packages/omo-codex/plugin/skills/data-scientist/agents/openai.yaml +2 -0
  245. package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +176 -0
  246. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +197 -0
  247. package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +153 -0
  248. package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +37 -0
  249. package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +78 -0
  250. package/packages/omo-codex/plugin/skills/data-scientist/scripts/quick-query.py +111 -0
  251. package/packages/omo-codex/plugin/skills/data-scientist/scripts/setup-uv.ps1 +53 -0
  252. package/packages/omo-codex/plugin/skills/data-scientist/scripts/setup-uv.sh +60 -0
  253. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +1 -1
  254. package/packages/omo-codex/plugin/skills/programming/SKILL.md +1 -2
  255. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +54 -9
  256. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +2 -2
  257. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/__main__.py +8 -1
  258. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/bias_check.py +11 -0
  259. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  260. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/result_schema.py +10 -1
  261. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/surrogate.py +214 -0
  262. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  263. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  264. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  265. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  266. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  267. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  268. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  269. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/validators.py +46 -0
  270. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  271. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  272. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  273. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  274. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  275. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  276. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  277. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  278. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  279. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  280. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +3 -2
  281. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +3 -3
  282. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +22 -25
  283. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +2 -2
  284. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +3 -3
  285. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  286. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +127 -12
  287. package/packages/omo-codex/plugin/test/bootstrap-binlinks.test.mjs +12 -12
  288. package/packages/omo-codex/plugin/test/bootstrap-orchestration.test.mjs +36 -4
  289. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +1 -1
  290. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +9 -2
  291. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +12 -0
  292. package/packages/omo-codex/scripts/install-bin-links.test.mjs +56 -2
  293. package/packages/omo-codex/scripts/install-delegated-command.test.mjs +6 -6
  294. package/packages/omo-codex/scripts/install-dist/install-local.mjs +138 -65
  295. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +4 -4
  296. package/packages/omo-codex/scripts/install-local.test.mjs +5 -2
  297. package/packages/shared-skills/index.mjs +19 -1
  298. package/packages/shared-skills/skills/ast-grep/SOURCE +1 -1
  299. package/packages/shared-skills/skills/ast-grep/install.ps1 +2 -2
  300. package/packages/shared-skills/skills/ast-grep/install.sh +1 -1
  301. package/packages/shared-skills/skills/ast-grep/references/install.md +2 -2
  302. package/packages/shared-skills/skills/ast-grep/tests/smoke.sh +1 -1
  303. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +4 -3
  304. package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +3 -1
  305. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +140 -0
  306. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +3 -0
  307. package/packages/shared-skills/skills/data-scientist/SKILL.md +243 -0
  308. package/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +176 -0
  309. package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +197 -0
  310. package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +153 -0
  311. package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +37 -0
  312. package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +78 -0
  313. package/packages/shared-skills/skills/data-scientist/scripts/quick-query.py +111 -0
  314. package/packages/shared-skills/skills/data-scientist/scripts/setup-uv.ps1 +53 -0
  315. package/packages/shared-skills/skills/data-scientist/scripts/setup-uv.sh +60 -0
  316. package/packages/shared-skills/skills/debugging/SKILL.md +1 -1
  317. package/packages/shared-skills/skills/programming/SKILL.md +1 -2
  318. package/packages/shared-skills/skills/start-work/SKILL.md +54 -9
  319. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +2 -2
  320. package/packages/shared-skills/skills/ultimate-browsing/engine/__main__.py +8 -1
  321. package/packages/shared-skills/skills/ultimate-browsing/engine/bias_check.py +11 -0
  322. package/packages/shared-skills/skills/ultimate-browsing/engine/fetch_chain.py +90 -52
  323. package/packages/shared-skills/skills/ultimate-browsing/engine/result_schema.py +10 -1
  324. package/packages/shared-skills/skills/ultimate-browsing/engine/surrogate.py +214 -0
  325. package/packages/shared-skills/skills/ultimate-browsing/engine/surrogates.yaml +60 -0
  326. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/amp_redirect_stub.html +7 -0
  327. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/search_interstitial.html +19 -0
  328. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/wayback_available.json +1 -0
  329. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/fixtures/wayback_snapshot.html +1128 -0
  330. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_surrogate.py +252 -0
  331. package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_surrogate_validators.py +78 -0
  332. package/packages/shared-skills/skills/ultimate-browsing/engine/validators.py +46 -0
  333. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_detector.py +1 -1
  334. package/packages/shared-skills/skills/ultimate-browsing/engine/waf_profiles.yaml +10 -5
  335. package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/social.md +1 -1
  336. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  337. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +4 -4
  338. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/cache-archive.md +51 -50
  339. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/fallback.md +1 -1
  340. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/jina.md +8 -2
  341. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/naver.md +1 -1
  342. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/twitter.md +3 -3
  343. package/packages/shared-skills/skills/ulw-plan/SKILL.md +2 -2
  344. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +3 -3
  345. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -1
  346. package/packages/shared-skills/skills/ulw-research/SKILL.md +128 -12
  347. package/postinstall.mjs +6 -0
@@ -439,7 +439,7 @@ async function readOptionalFile(path) {
439
439
 
440
440
  // components/bootstrap/src/worker.ts
441
441
  import { appendFile as appendFile2, mkdir as mkdir8, readFile as readFile14 } from "node:fs/promises";
442
- import { homedir as homedir4 } from "node:os";
442
+ import { homedir as homedir5 } from "node:os";
443
443
  import { dirname as dirname9, join as join22, resolve as resolve7 } from "node:path";
444
444
  import { fileURLToPath as fileURLToPath2 } from "node:url";
445
445
 
@@ -449,6 +449,10 @@ import { rm as rm4 } from "node:fs/promises";
449
449
  import { dirname as dirname4, join as join7 } from "node:path";
450
450
  import { promisify } from "node:util";
451
451
 
452
+ // ../../utils/src/ast-grep/sg-candidates.ts
453
+ import { homedir as homedir3 } from "node:os";
454
+ import { join as join4 } from "node:path";
455
+
452
456
  // ../../utils/src/ast-grep/sg-manifest.ts
453
457
  var SG_PINNED_VERSION = "0.43.0";
454
458
  var SG_RELEASE_ASSETS = {
@@ -494,10 +498,113 @@ function sgBinaryName(platform = process.platform) {
494
498
  return normalizeRuntimePlatform(platform) === "win32" ? "sg.exe" : "sg";
495
499
  }
496
500
 
501
+ // ../../utils/src/ast-grep/install-script.ts
502
+ var AST_GREP_BIN_DIR_ENV_KEY = "OMO_AST_GREP_BIN_DIR";
503
+
504
+ // ../../utils/src/ast-grep/types.ts
505
+ var SG_PATH_ENV_KEY = "OMO_AST_GREP_SG_PATH";
506
+ var SG_BINARY_NOT_FOUND = "BINARY_NOT_FOUND";
507
+
508
+ // ../../utils/src/ast-grep/sg-candidates.ts
509
+ var HOMEBREW_PREFIXES = {
510
+ darwin: ["/opt/homebrew/bin", "/usr/local/bin"],
511
+ linux: ["/home/linuxbrew/.linuxbrew/bin", "/usr/local/bin"],
512
+ win32: []
513
+ };
514
+ function nonEmptyValue(value) {
515
+ const trimmed = value?.trim();
516
+ return trimmed === undefined || trimmed.length === 0 ? null : trimmed;
517
+ }
518
+ function astGrepBinaryName(platform) {
519
+ return platform === "win32" ? "ast-grep.exe" : "ast-grep";
520
+ }
521
+ function candidate(tier, path) {
522
+ return { path, tier };
523
+ }
524
+ function envOverrideCandidates(env) {
525
+ const override = nonEmptyValue(env[SG_PATH_ENV_KEY]);
526
+ return override === null ? [] : [candidate("env-override", override)];
527
+ }
528
+ function omoRuntimeCandidates(options) {
529
+ const binaryName = sgBinaryName(options.platform);
530
+ const slug = runtimeSlug(options.platform, options.arch);
531
+ const paths = [];
532
+ if (options.runtimeDir !== undefined)
533
+ paths.push(join4(options.runtimeDir, binaryName));
534
+ const codexHome = nonEmptyValue(options.env["CODEX_HOME"]);
535
+ if (codexHome !== null)
536
+ paths.push(join4(codexHome, "runtime", "ast-grep", slug, binaryName));
537
+ paths.push(join4(options.homeDir, ".omo", "runtime", "ast-grep", slug, binaryName));
538
+ return paths.map((path) => candidate("omo-runtime", path));
539
+ }
540
+ function skillBinCandidates(options) {
541
+ const names = [astGrepBinaryName(options.platform), sgBinaryName(options.platform)];
542
+ const directories = [];
543
+ const cacheDir = nonEmptyValue(options.env[AST_GREP_BIN_DIR_ENV_KEY]);
544
+ if (cacheDir !== null)
545
+ directories.push(cacheDir);
546
+ if (options.packageDir !== undefined)
547
+ directories.push(join4(options.packageDir, "bin"));
548
+ return directories.flatMap((directory) => names.map((name) => candidate("skill-bin", join4(directory, name))));
549
+ }
550
+ function homebrewCandidates(platform) {
551
+ const prefixes = platform === "darwin" || platform === "linux" || platform === "win32" ? HOMEBREW_PREFIXES[platform] : [];
552
+ const names = [astGrepBinaryName(platform), sgBinaryName(platform)];
553
+ return prefixes.flatMap((prefix) => names.map((name) => candidate("homebrew", join4(prefix, name))));
554
+ }
555
+ function planSgCandidates(options) {
556
+ const env = options.env ?? process.env;
557
+ const platform = options.platform ?? process.platform;
558
+ const arch = options.arch ?? process.arch;
559
+ const homeDir = options.homeDir ?? homedir3();
560
+ return {
561
+ afterPath: homebrewCandidates(platform),
562
+ beforePath: [
563
+ ...envOverrideCandidates(env),
564
+ ...omoRuntimeCandidates({ arch, env, homeDir, platform, runtimeDir: options.runtimeDir }),
565
+ ...skillBinCandidates({ env, packageDir: options.packageDir, platform })
566
+ ],
567
+ pathCommands: ["ast-grep", "sg"]
568
+ };
569
+ }
570
+
571
+ // ../../utils/src/ast-grep/sg-install-hints.ts
572
+ var OMO_PROVISION_HINT = "Start an OMO session so the bundled ast-grep skill provisions the pinned runtime automatically";
573
+ var ENV_OVERRIDE_HINT = `Or point ${SG_PATH_ENV_KEY} at an existing ast-grep binary`;
574
+ var DARWIN_HINTS = [
575
+ "brew install ast-grep",
576
+ "npm install -g @ast-grep/cli",
577
+ "cargo install ast-grep --locked"
578
+ ];
579
+ var LINUX_HINTS = [
580
+ "npm install -g @ast-grep/cli",
581
+ "cargo install ast-grep --locked",
582
+ "brew install ast-grep # linuxbrew"
583
+ ];
584
+ var WIN32_HINTS = [
585
+ "scoop install main/ast-grep",
586
+ "winget install ast-grep",
587
+ "choco install ast-grep",
588
+ "npm install -g @ast-grep/cli"
589
+ ];
590
+ function platformHints(platform) {
591
+ if (platform === "darwin")
592
+ return DARWIN_HINTS;
593
+ if (platform === "win32")
594
+ return WIN32_HINTS;
595
+ return LINUX_HINTS;
596
+ }
597
+ function sgInstallHints(platform = process.platform) {
598
+ return [...platformHints(platform), OMO_PROVISION_HINT, ENV_OVERRIDE_HINT];
599
+ }
600
+ function sgBinaryNotFoundMessage(platform = process.platform) {
601
+ return `ast-grep binary not found for ${platform}: no candidate passed the --version probe across the env override, OMO runtime, skill bin cache, PATH, or Homebrew prefixes.`;
602
+ }
603
+
497
604
  // ../../utils/src/ast-grep/sg-provisioner.ts
498
605
  import { createHash as createHash2, randomUUID as randomUUID2 } from "node:crypto";
499
606
  import { chmod, mkdir as mkdir3, rename as rename2, rm as rm3, writeFile as writeFile2 } from "node:fs/promises";
500
- import { basename as basename2, isAbsolute, join as join4, relative, resolve as resolve2 } from "node:path";
607
+ import { basename as basename2, isAbsolute, join as join5, relative, resolve as resolve2 } from "node:path";
501
608
  import { inflateRawSync } from "node:zlib";
502
609
  var DEFAULT_DOWNLOAD_TIMEOUT_MS = 60000;
503
610
  var EOCD_SIGNATURE = 101010256;
@@ -603,7 +710,7 @@ function extractStandaloneSgBinary(zip, platform) {
603
710
  const entries = listZipEntries(zip);
604
711
  const preferredNames = [`ast-grep${suffix}`, `sg${suffix}`];
605
712
  for (const preferred of preferredNames) {
606
- const entry = entries.find((candidate) => zipEntryBaseName(candidate.name) === preferred);
713
+ const entry = entries.find((candidate2) => zipEntryBaseName(candidate2.name) === preferred);
607
714
  if (entry !== undefined)
608
715
  return readZipEntryBytes(zip, entry);
609
716
  }
@@ -623,8 +730,8 @@ async function provisionSgBinary(options) {
623
730
  throw new SgProvisionError("unsupported_platform", `ast-grep ${SG_PINNED_VERSION} has no asset for ${slug}`);
624
731
  }
625
732
  const targetDir = resolve2(options.targetDir);
626
- const destination = join4(targetDir, sgBinaryName(platform));
627
- const tempPath = join4(targetDir, `.sg-${randomUUID2().slice(0, 8)}.partial`);
733
+ const destination = join5(targetDir, sgBinaryName(platform));
734
+ const tempPath = join5(targetDir, `.sg-${randomUUID2().slice(0, 8)}.partial`);
628
735
  assertInsideTarget(targetDir, destination);
629
736
  assertInsideTarget(targetDir, tempPath);
630
737
  try {
@@ -649,11 +756,10 @@ async function provisionSgBinary(options) {
649
756
  // ../../utils/src/ast-grep/sg-resolver.ts
650
757
  import { execFileSync } from "node:child_process";
651
758
  import { existsSync, statSync } from "node:fs";
652
- import { join as join6 } from "node:path";
653
759
 
654
760
  // ../../utils/src/runtime/which.ts
655
761
  import { accessSync, constants } from "node:fs";
656
- import { delimiter, join as join5 } from "node:path";
762
+ import { delimiter, join as join6 } from "node:path";
657
763
  var runtime = globalThis;
658
764
  function isUnsafeCommandName(commandName) {
659
765
  if (commandName.includes("/") || commandName.includes("\\"))
@@ -708,7 +814,7 @@ function bunWhich(commandName) {
708
814
  return null;
709
815
  for (const pathEntry of pathEntries) {
710
816
  for (const candidateName of candidateNames) {
711
- const candidatePath = join5(pathEntry, candidateName);
817
+ const candidatePath = join6(pathEntry, candidateName);
712
818
  if (isExecutable(candidatePath))
713
819
  return candidatePath;
714
820
  }
@@ -716,13 +822,15 @@ function bunWhich(commandName) {
716
822
  return null;
717
823
  }
718
824
 
719
- // ../../utils/src/ast-grep/types.ts
720
- var SG_PATH_ENV_KEY = "OMO_AST_GREP_SG_PATH";
721
-
722
825
  // ../../utils/src/ast-grep/sg-resolver.ts
723
- function nonEmptyValue(value) {
724
- const trimmed = value?.trim();
725
- return trimmed === undefined || trimmed.length === 0 ? null : trimmed;
826
+ var SG_VERSION_PROBE_TIMEOUT_MS = 5000;
827
+ var cacheEntry = null;
828
+ function cacheFingerprint(options, plan) {
829
+ return JSON.stringify([
830
+ options.platform ?? process.platform,
831
+ options.arch ?? process.arch,
832
+ plan.beforePath.map((candidate2) => candidate2.path)
833
+ ]);
726
834
  }
727
835
  function defaultFileExists(filePath) {
728
836
  if (!existsSync(filePath))
@@ -730,9 +838,7 @@ function defaultFileExists(filePath) {
730
838
  try {
731
839
  const stats = statSync(filePath);
732
840
  return stats.isFile() && stats.size > 0;
733
- } catch (error) {
734
- if (error instanceof Error)
735
- return false;
841
+ } catch {
736
842
  return false;
737
843
  }
738
844
  }
@@ -740,53 +846,79 @@ function defaultVersionProbe(binaryPath) {
740
846
  return String(execFileSync(binaryPath, ["--version"], {
741
847
  encoding: "utf8",
742
848
  stdio: ["ignore", "pipe", "ignore"],
743
- timeout: 5000
849
+ timeout: SG_VERSION_PROBE_TIMEOUT_MS
744
850
  }));
745
851
  }
746
- function isAstGrepVersionOutput(output) {
747
- return output.toLowerCase().includes("ast-grep");
748
- }
749
- function hasAstGrepVersion(binaryPath, runVersionProbeSync) {
852
+ function probePasses(binaryPath, deps) {
750
853
  try {
751
- return isAstGrepVersionOutput(runVersionProbeSync(binaryPath));
752
- } catch (error) {
753
- if (error instanceof Error)
754
- return false;
854
+ return deps.runVersionProbeSync(binaryPath).toLowerCase().includes("ast-grep");
855
+ } catch {
755
856
  return false;
756
857
  }
757
858
  }
758
- function pathCommandCandidates() {
759
- return ["ast-grep", "sg"];
859
+ function acceptsCandidate(binaryPath, deps) {
860
+ return deps.fileExists(binaryPath) && probePasses(binaryPath, deps);
760
861
  }
761
- function findSgBinarySync(options = {}) {
762
- const env = options.env ?? process.env;
763
- const platform = options.platform ?? process.platform;
764
- const fileExists = options.fileExists ?? defaultFileExists;
765
- const runVersionProbeSync = options.runVersionProbeSync ?? defaultVersionProbe;
766
- const which = options.which ?? bunWhich;
862
+ function firstAccepted(candidates, deps) {
863
+ for (const candidate2 of candidates) {
864
+ if (acceptsCandidate(candidate2.path, deps))
865
+ return { found: true, path: candidate2.path, tier: candidate2.tier };
866
+ }
867
+ return null;
868
+ }
869
+ function pathCandidates(commands, deps) {
870
+ const resolved = [];
871
+ for (const commandName of commands) {
872
+ const found = deps.which(commandName);
873
+ if (found !== null)
874
+ resolved.push({ path: found, tier: "path" });
875
+ }
876
+ return resolved;
877
+ }
878
+ function notFound(platform) {
879
+ return {
880
+ error: { code: SG_BINARY_NOT_FOUND, hints: sgInstallHints(platform), message: sgBinaryNotFoundMessage(platform) },
881
+ found: false
882
+ };
883
+ }
884
+ function cacheIsStillValid(resolution, deps, revalidate) {
885
+ if (!resolution.found)
886
+ return false;
887
+ if (!deps.fileExists(resolution.path))
888
+ return false;
889
+ return !revalidate || probePasses(resolution.path, deps);
890
+ }
891
+ function resolverDeps(options) {
892
+ return {
893
+ fileExists: options.fileExists ?? defaultFileExists,
894
+ platform: options.platform ?? process.platform,
895
+ runVersionProbeSync: options.runVersionProbeSync ?? defaultVersionProbe,
896
+ which: options.which ?? bunWhich
897
+ };
898
+ }
899
+ function resolveSgBinarySync(options = {}) {
900
+ const deps = resolverDeps(options);
901
+ const useCache = options.cache ?? true;
767
902
  try {
768
- const envOverride = nonEmptyValue(env[SG_PATH_ENV_KEY]);
769
- if (envOverride !== null && fileExists(envOverride))
770
- return envOverride;
771
- if (options.runtimeDir !== undefined) {
772
- const runtimeCandidate = join6(options.runtimeDir, sgBinaryName(platform));
773
- if (fileExists(runtimeCandidate))
774
- return runtimeCandidate;
775
- }
776
- for (const commandName of pathCommandCandidates()) {
777
- const pathCandidate = which(commandName);
778
- if (pathCandidate === null || !fileExists(pathCandidate))
779
- continue;
780
- if (commandName !== "sg" || hasAstGrepVersion(pathCandidate, runVersionProbeSync))
781
- return pathCandidate;
903
+ const plan = planSgCandidates(options);
904
+ const fingerprint = cacheFingerprint(options, plan);
905
+ if (useCache && cacheEntry !== null && cacheEntry.fingerprint === fingerprint) {
906
+ if (cacheIsStillValid(cacheEntry.resolution, deps, options.revalidate ?? false))
907
+ return cacheEntry.resolution;
908
+ cacheEntry = null;
782
909
  }
783
- return null;
784
- } catch (error) {
785
- if (error instanceof Error)
786
- return null;
787
- return null;
910
+ const resolution = firstAccepted(plan.beforePath, deps) ?? firstAccepted(pathCandidates(plan.pathCommands, deps), deps) ?? firstAccepted(plan.afterPath, deps) ?? notFound(deps.platform);
911
+ if (useCache && resolution.found)
912
+ cacheEntry = { fingerprint, resolution };
913
+ return resolution;
914
+ } catch {
915
+ return notFound(deps.platform);
788
916
  }
789
917
  }
918
+ function findSgBinarySync(options = {}) {
919
+ const resolution = resolveSgBinarySync(options);
920
+ return resolution.found ? resolution.path : null;
921
+ }
790
922
 
791
923
  // components/bootstrap/src/provision.ts
792
924
  var SG_PROVISION_COMPONENT = "ast_grep";
@@ -1161,8 +1293,8 @@ function findUnquotedCharacter(line, target, startIndex) {
1161
1293
  }
1162
1294
  return -1;
1163
1295
  }
1164
- function tomlPathMatches(candidate, target) {
1165
- return candidate.length === target.length && candidate.every((part, index) => part === target[index]);
1296
+ function tomlPathMatches(candidate2, target) {
1297
+ return candidate2.length === target.length && candidate2.every((part, index) => part === target[index]);
1166
1298
  }
1167
1299
  function replaceTomlAssignmentValue(line, assignmentIndex, value) {
1168
1300
  const newline = line.endsWith(`
@@ -1420,7 +1552,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
1420
1552
  "explorer",
1421
1553
  [
1422
1554
  {
1423
- previous: { model: "gpt-5.4-mini", effort: "low" },
1555
+ previous: { model: "gpt-5.6-luna-fast", effort: "low" },
1424
1556
  current: { model: "gpt-5.6-terra", effort: "medium" }
1425
1557
  },
1426
1558
  {
@@ -1433,7 +1565,7 @@ var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
1433
1565
  "librarian",
1434
1566
  [
1435
1567
  {
1436
- previous: { model: "gpt-5.4-mini", effort: "low" },
1568
+ previous: { model: "gpt-5.6-luna-fast", effort: "low" },
1437
1569
  current: { model: "gpt-5.6-terra", effort: "medium" }
1438
1570
  },
1439
1571
  {
@@ -2027,6 +2159,7 @@ var LEGACY_CODEX_COMPONENT_BINS = [
2027
2159
  { name: "codex-telemetry", component: "telemetry" },
2028
2160
  { name: "codex-ultrawork", component: "ultrawork" }
2029
2161
  ];
2162
+ var LEGACY_CODEX_COMPONENT_BIN_NAMES = LEGACY_CODEX_COMPONENT_BINS.map((entry) => entry.name);
2030
2163
  async function removeLegacyCodexComponentBins(binDir, platform) {
2031
2164
  for (const entry of LEGACY_CODEX_COMPONENT_BINS) {
2032
2165
  const linkPath = join12(binDir, platform === "win32" ? `${entry.name}.cmd` : entry.name);
@@ -2082,7 +2215,7 @@ function isNodeErrorWithCode2(error) {
2082
2215
  // ../src/install/codex-cache-runtime-wrapper.ts
2083
2216
  import { join as join13 } from "node:path";
2084
2217
  var RUNTIME_WRAPPER_MARKER = "OMO_GENERATED_RUNTIME_WRAPPER";
2085
- function posixRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
2218
+ function posixRuntimeWrapper(binName, cliPath, codexHome, binDir, nodeCliPath) {
2086
2219
  const ulwLoopBin = toPosixPath(join13(binDir, "omo-ulw-loop"));
2087
2220
  const nodeCli = escapePosixDoubleQuoted(toPosixPath(nodeCliPath));
2088
2221
  const escapedCliPath = escapePosixDoubleQuoted(toPosixPath(cliPath));
@@ -2092,6 +2225,8 @@ function posixRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
2092
2225
  "#!/bin/sh",
2093
2226
  `# ${RUNTIME_WRAPPER_MARKER}`,
2094
2227
  `export CODEX_HOME="\${CODEX_HOME:-${escapedCodexHome}}"`,
2228
+ `export OMO_INVOCATION_NAME=${binName}`,
2229
+ "export OMO_EDITION=codex",
2095
2230
  'if [ "$1" = "ulw-loop" ] && [ -x "' + escapedUlwLoopBin + '" ]; then',
2096
2231
  " shift",
2097
2232
  ' exec "' + escapedUlwLoopBin + '" ulw-loop "$@"',
@@ -2115,11 +2250,11 @@ function posixRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
2115
2250
  ` if [ -f "${nodeCli}" ] && command -v node >/dev/null 2>&1; then`,
2116
2251
  ` exec node "${nodeCli}" "$@"`,
2117
2252
  " fi",
2118
- ` echo "omo: bun runtime not found (checked PATH, ~/.bun/bin, /opt/homebrew/bin, /usr/local/bin) and the node fallback CLI is missing at ${nodeCli}; install bun from https://bun.sh, or reinstall omo and force the fallback with OMO_RUNTIME=node" >&2`,
2253
+ ` echo "${binName}: bun runtime not found (checked PATH, ~/.bun/bin, /opt/homebrew/bin, /usr/local/bin) and the node fallback CLI is missing at ${nodeCli}; install bun from https://bun.sh, or reinstall ${binName} and force the fallback with OMO_RUNTIME=node" >&2`,
2119
2254
  " exit 127",
2120
2255
  "fi",
2121
2256
  `if [ ! -f "${escapedCliPath}" ]; then`,
2122
- ` echo "omo: runtime target missing at ${escapedCliPath}; reinstall with: npx --yes lazycodex-ai@latest install --no-tui" >&2`,
2257
+ ` echo "${binName}: runtime target missing at ${escapedCliPath}; reinstall with: npx --yes lazycodex-ai@latest install --no-tui" >&2`,
2123
2258
  " exit 1",
2124
2259
  "fi",
2125
2260
  `exec "$BUN_BINARY" "${escapedCliPath}" "$@"`,
@@ -2127,12 +2262,14 @@ function posixRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
2127
2262
  ].join(`
2128
2263
  `);
2129
2264
  }
2130
- function windowsRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
2265
+ function windowsRuntimeWrapper(binName, cliPath, codexHome, binDir, nodeCliPath) {
2131
2266
  const ulwLoopBin = join13(binDir, "omo-ulw-loop.cmd");
2132
2267
  return [
2133
2268
  "@echo off",
2134
2269
  `rem ${RUNTIME_WRAPPER_MARKER}`,
2135
2270
  `if not defined CODEX_HOME set "CODEX_HOME=${codexHome}"`,
2271
+ `set "OMO_INVOCATION_NAME=${binName}"`,
2272
+ 'set "OMO_EDITION=codex"',
2136
2273
  ...windowsNodeDiscoveryLines(),
2137
2274
  `if "%~1"=="ulw-loop" if exist "${ulwLoopBin}" (`,
2138
2275
  " shift /1",
@@ -2150,11 +2287,11 @@ function windowsRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
2150
2287
  ` "%OMO_NODE_BINARY%" "${nodeCliPath}" %*`,
2151
2288
  " exit /b %ERRORLEVEL%",
2152
2289
  " )",
2153
- ` echo omo: bun runtime not found, no Node runtime was discovered from NODE_REPL_NODE_PATH or PATH, or the node fallback CLI is missing at ${nodeCliPath}; install bun from https://bun.sh or rerun LazyCodex install from Codex Desktop 1>&2`,
2290
+ ` echo ${binName}: bun runtime not found, no Node runtime was discovered from NODE_REPL_NODE_PATH or PATH, or the node fallback CLI is missing at ${nodeCliPath}; install bun from https://bun.sh or rerun LazyCodex install from Codex Desktop 1>&2`,
2154
2291
  " exit /b 127",
2155
2292
  ")",
2156
2293
  `if not exist "${cliPath}" (`,
2157
- ` echo omo: runtime target missing at ${cliPath}; reinstall with: npx --yes lazycodex-ai@latest install --no-tui 1>&2`,
2294
+ ` echo ${binName}: runtime target missing at ${cliPath}; reinstall with: npx --yes lazycodex-ai@latest install --no-tui 1>&2`,
2158
2295
  " exit /b 1",
2159
2296
  ")",
2160
2297
  `"%BUN_BINARY%" "${cliPath}" %*`,
@@ -2170,7 +2307,14 @@ function escapePosixDoubleQuoted(value) {
2170
2307
  }
2171
2308
 
2172
2309
  // ../src/install/codex-cache-bins.ts
2173
- var RESERVED_NESTED_BIN_NAMES = new Set(["omo", "lazycodex", "lazycodex-ai", "oh-my-opencode", "oh-my-openagent"]);
2310
+ var RESERVED_NESTED_BIN_NAMES = new Set([
2311
+ "omo",
2312
+ "omo-agent-toolkit",
2313
+ "lazycodex",
2314
+ "lazycodex-ai",
2315
+ "oh-my-opencode",
2316
+ "oh-my-openagent"
2317
+ ]);
2174
2318
  async function linkCachedPluginBins(input) {
2175
2319
  const binLinks = await discoverPackageBins(input.pluginRoot);
2176
2320
  const platform = input.platform ?? process.platform;
@@ -2186,20 +2330,26 @@ async function linkCachedPluginBins(input) {
2186
2330
  }
2187
2331
  async function linkRootRuntimeBin(input) {
2188
2332
  const cliPath = join14(input.repoRoot, "dist", "cli", "index.js");
2189
- if (!await isFile2(cliPath))
2333
+ const platform = input.platform ?? process.platform;
2334
+ const legacyPath = join14(input.binDir, platform === "win32" ? "omo.cmd" : "omo");
2335
+ if (!await isFile2(cliPath)) {
2336
+ await removeGeneratedRuntimeWrapper(legacyPath);
2190
2337
  return null;
2338
+ }
2339
+ const binName = "omo-agent-toolkit";
2191
2340
  const nodeCliPath = join14(input.repoRoot, "dist", "cli-node", "index.js");
2192
- const platform = input.platform ?? process.platform;
2193
2341
  await mkdir5(input.binDir, { recursive: true });
2194
2342
  if (platform === "win32") {
2195
- const linkPath2 = join14(input.binDir, "omo.cmd");
2196
- await replaceRuntimeWrapper(linkPath2, windowsRuntimeWrapper(cliPath, input.codexHome, input.binDir, nodeCliPath));
2197
- return { name: "omo", path: linkPath2, target: cliPath };
2343
+ const linkPath2 = join14(input.binDir, `${binName}.cmd`);
2344
+ await replaceRuntimeWrapper(linkPath2, windowsRuntimeWrapper(binName, cliPath, input.codexHome, input.binDir, nodeCliPath));
2345
+ await removeGeneratedRuntimeWrapper(legacyPath);
2346
+ return { name: binName, path: linkPath2, target: cliPath };
2198
2347
  }
2199
- const linkPath = join14(input.binDir, "omo");
2200
- await replaceRuntimeWrapper(linkPath, posixRuntimeWrapper(cliPath, input.codexHome, input.binDir, nodeCliPath));
2348
+ const linkPath = join14(input.binDir, binName);
2349
+ await replaceRuntimeWrapper(linkPath, posixRuntimeWrapper(binName, cliPath, input.codexHome, input.binDir, nodeCliPath));
2201
2350
  await chmod2(linkPath, 493);
2202
- return { name: "omo", path: linkPath, target: cliPath };
2351
+ await removeGeneratedRuntimeWrapper(legacyPath);
2352
+ return { name: binName, path: linkPath, target: cliPath };
2203
2353
  }
2204
2354
  async function linkCachedPluginBin(binDir, link, platform) {
2205
2355
  if (platform === "win32") {
@@ -2302,6 +2452,29 @@ async function replaceRuntimeWrapper(linkPath, content) {
2302
2452
  await rm9(linkPath, { force: true });
2303
2453
  await writeFile5(linkPath, content);
2304
2454
  }
2455
+ async function removeGeneratedRuntimeWrapper(path) {
2456
+ try {
2457
+ const entry = await lstat7(path);
2458
+ if (!entry.isFile() && !entry.isSymbolicLink())
2459
+ return;
2460
+ const content = await readGeneratedWrapperContent(path);
2461
+ if (content.includes(RUNTIME_WRAPPER_MARKER))
2462
+ await rm9(path, { force: true });
2463
+ } catch (error) {
2464
+ if (isNodeErrorWithCode(error) && error.code === "ENOENT")
2465
+ return;
2466
+ throw error;
2467
+ }
2468
+ }
2469
+ async function readGeneratedWrapperContent(path) {
2470
+ try {
2471
+ return await readFile8(path, "utf8");
2472
+ } catch (error) {
2473
+ if (isNodeErrorWithCode(error) && (error.code === "ENOENT" || error.code === "EISDIR"))
2474
+ return "";
2475
+ throw error;
2476
+ }
2477
+ }
2305
2478
  async function existingNonRuntimeWrapper(path) {
2306
2479
  try {
2307
2480
  const stat5 = await lstat7(path);
@@ -2826,6 +2999,24 @@ function stripUnquotedInlineComment3(line) {
2826
2999
 
2827
3000
  // ../src/install/codex-config-reasoning.ts
2828
3001
  var MANAGED_KEYS = ["model", "model_context_window", "model_reasoning_effort", "plan_mode_reasoning_effort"];
3002
+ var CODEX_REASONING_BY_UNIFIED_LEVEL = {
3003
+ off: "none",
3004
+ none: "none",
3005
+ minimal: "minimal",
3006
+ low: "low",
3007
+ medium: "medium",
3008
+ high: "high",
3009
+ xhigh: "xhigh",
3010
+ max: "max"
3011
+ };
3012
+ function applyReasoningOverride(catalog, reasoning) {
3013
+ if (reasoning === undefined)
3014
+ return catalog;
3015
+ const wireEffort = CODEX_REASONING_BY_UNIFIED_LEVEL[reasoning.trim().toLowerCase()];
3016
+ if (wireEffort === undefined)
3017
+ return catalog;
3018
+ return { ...catalog, current: { ...catalog.current, modelReasoningEffort: wireEffort } };
3019
+ }
2829
3020
  function ensureCodexReasoningConfig(config, catalog) {
2830
3021
  const current = readRootReasoningSettings(config);
2831
3022
  if (Object.keys(current).length > 0 && !matchesProfile(current, catalog.current) && !catalog.managedProfiles.some((profile) => matchesProfile(current, profile))) {
@@ -3166,7 +3357,7 @@ async function updateCodexConfig(input) {
3166
3357
  config = ensureFeatureEnabled(config, "plugin_hooks");
3167
3358
  config = ensureFeatureEnabled(config, "multi_agent");
3168
3359
  config = removeUnsupportedCodexMultiAgentModeConfig(config);
3169
- config = ensureCodexReasoningConfig(config, await readCodexModelCatalog(input.repoRoot));
3360
+ config = ensureCodexReasoningConfig(config, applyReasoningOverride(await readCodexModelCatalog(input.repoRoot), input.reasoning));
3170
3361
  config = ensureCodexMultiAgentV2Config(config, {
3171
3362
  multiAgentVersion: resolveCodexMultiAgentVersion(config, input.configPath)
3172
3363
  });
@@ -3356,13 +3547,13 @@ async function exists4(path) {
3356
3547
  }
3357
3548
 
3358
3549
  // ../src/install/codex-installer-bin-dir.ts
3359
- import { homedir as homedir3 } from "node:os";
3550
+ import { homedir as homedir4 } from "node:os";
3360
3551
  import { join as join20, resolve as resolve6 } from "node:path";
3361
3552
  function resolveCodexInstallerBinDir(input) {
3362
3553
  const explicitBinDir = input.binDir ?? input.env?.CODEX_LOCAL_BIN_DIR;
3363
3554
  if (explicitBinDir !== undefined && explicitBinDir.trim().length > 0)
3364
3555
  return resolve6(explicitBinDir.trim());
3365
- const homeDir = input.homeDir ?? homedir3();
3556
+ const homeDir = input.homeDir ?? homedir4();
3366
3557
  const defaultCodexHome = resolve6(homeDir, ".codex");
3367
3558
  const resolvedCodexHome = resolve6(input.codexHome);
3368
3559
  if (resolvedCodexHome !== defaultCodexHome)
@@ -3389,23 +3580,23 @@ function resolveGitBash(input) {
3389
3580
  }
3390
3581
  return missingGitBash(checkedPaths);
3391
3582
  }
3392
- for (const candidate of [
3583
+ for (const candidate2 of [
3393
3584
  { path: PROGRAM_FILES_GIT_BASH, source: "program-files" },
3394
3585
  { path: PROGRAM_FILES_X86_GIT_BASH, source: "program-files-x86" }
3395
3586
  ]) {
3396
- checkedPaths.push(candidate.path);
3397
- if (input.exists(candidate.path))
3398
- return { found: true, path: candidate.path, source: candidate.source, checkedPaths };
3587
+ checkedPaths.push(candidate2.path);
3588
+ if (input.exists(candidate2.path))
3589
+ return { found: true, path: candidate2.path, source: candidate2.source, checkedPaths };
3399
3590
  }
3400
3591
  for (const pathCandidate of input.where("bash")) {
3401
- const candidate = pathCandidate.trim();
3402
- if (candidate.length === 0)
3592
+ const candidate2 = pathCandidate.trim();
3593
+ if (candidate2.length === 0)
3403
3594
  continue;
3404
- checkedPaths.push(candidate);
3405
- if (isKnownNonGitBashLauncher(candidate))
3595
+ checkedPaths.push(candidate2);
3596
+ if (isKnownNonGitBashLauncher(candidate2))
3406
3597
  continue;
3407
- if (isBashExePath(candidate) && input.exists(candidate))
3408
- return { found: true, path: candidate, source: "path", checkedPaths };
3598
+ if (isBashExePath(candidate2) && input.exists(candidate2))
3599
+ return { found: true, path: candidate2, source: "path", checkedPaths };
3409
3600
  }
3410
3601
  return missingGitBash(checkedPaths);
3411
3602
  }
@@ -3644,18 +3835,18 @@ async function linkRuntimeWrapperStep(options, binDir, degraded) {
3644
3835
  if (linked !== null)
3645
3836
  return;
3646
3837
  degraded.push({
3647
- component: "omo-cli",
3648
- hint: "use npx lazycodex-ai for the omo CLI",
3838
+ component: "omo-agent-toolkit",
3839
+ hint: "use npx lazycodex-ai for the omo-agent-toolkit CLI",
3649
3840
  reason: "marketplace payload has no dist/cli"
3650
3841
  });
3651
- await appendBootstrapLog(options.pluginData, options.now ?? Date.now(), "omo-cli-degraded", {
3652
- warning: `Warning: skipped the omo runtime wrapper because ${cliPath} is missing; omo ulw-loop commands will be unavailable until a package shipping dist/cli is installed`
3842
+ await appendBootstrapLog(options.pluginData, options.now ?? Date.now(), "omo-agent-toolkit-degraded", {
3843
+ warning: `Warning: skipped the omo-agent-toolkit runtime wrapper because ${cliPath} is missing; omo-agent-toolkit ulw-loop commands will be unavailable until a package shipping dist/cli is installed`
3653
3844
  });
3654
3845
  } catch (error) {
3655
3846
  degraded.push({
3656
- component: "omo-cli",
3847
+ component: "omo-agent-toolkit",
3657
3848
  hint: BOOTSTRAP_DOCTOR_HINT,
3658
- reason: `failed to link the omo runtime wrapper into ${binDir}: ${errorMessage(error)}`
3849
+ reason: `failed to link the omo-agent-toolkit runtime wrapper into ${binDir}: ${errorMessage(error)}`
3659
3850
  });
3660
3851
  }
3661
3852
  }
@@ -3734,7 +3925,7 @@ function resolvePluginDataRoot(env) {
3734
3925
  const fromEnv = env["PLUGIN_DATA"]?.trim();
3735
3926
  if (fromEnv !== undefined && fromEnv.length > 0)
3736
3927
  return fromEnv;
3737
- return join22(homedir4(), ".local", "share", "lazycodex");
3928
+ return join22(homedir5(), ".local", "share", "lazycodex");
3738
3929
  }
3739
3930
  async function readPluginVersion(pluginRoot) {
3740
3931
  try {
@@ -3783,6 +3974,9 @@ async function runBootstrapWorker(options = {}) {
3783
3974
  const platform = options.platform ?? process.platform;
3784
3975
  const flags = parseWorkerFlags(options.argv ?? []);
3785
3976
  const steps = options.steps ?? defaultWorkerSteps();
3977
+ if (flags.only !== undefined && !steps.some((step) => step.name === flags.only)) {
3978
+ throw new Error(`unknown --only flag value: ${flags.only}`);
3979
+ }
3786
3980
  const pluginRoot = resolvePluginRoot(env);
3787
3981
  const pluginData = resolvePluginDataRoot(env);
3788
3982
  const statePath = resolveBootstrapStatePath(pluginData);
@@ -3858,10 +4052,10 @@ function parseDegradedEntries(raw) {
3858
4052
  if (!Array.isArray(raw))
3859
4053
  return;
3860
4054
  const entries = [];
3861
- for (const candidate of raw) {
3862
- if (typeof candidate !== "object" || candidate === null)
4055
+ for (const candidate2 of raw) {
4056
+ if (typeof candidate2 !== "object" || candidate2 === null)
3863
4057
  continue;
3864
- const record = candidate;
4058
+ const record = candidate2;
3865
4059
  if (typeof record["component"] !== "string" || typeof record["reason"] !== "string")
3866
4060
  continue;
3867
4061
  entries.push({
@@ -8,7 +8,7 @@
8
8
  "command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
9
9
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 4.19.3) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.1) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "4.19.3",
3
+ "version": "5.0.0-beta.1",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,