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
@@ -0,0 +1,153 @@
1
+ # Integration Patterns: DuckDB ↔ Polars
2
+
3
+ ## Zero-Copy Conversions (FASTEST)
4
+
5
+ ### DuckDB → Polars (Recommended)
6
+
7
+ ```python
8
+ import duckdb
9
+ import polars as pl
10
+
11
+ # Direct conversion with .pl() - zero-copy via Arrow
12
+ df_polars = duckdb.sql("""
13
+ SELECT * FROM 'data.parquet'
14
+ WHERE amount > 100
15
+ """).pl() # Returns Polars DataFrame directly
16
+
17
+ # Lazy version for large datasets
18
+ lazy_df = duckdb.sql("SELECT * FROM 'data.parquet'").pl(lazy=True)
19
+ result = lazy_df.filter(pl.col('status') == 'active').collect()
20
+ ```
21
+
22
+ ### Polars → DuckDB (Direct Reference)
23
+
24
+ ```python
25
+ import duckdb
26
+ import polars as pl
27
+
28
+ # DuckDB can query Polars DataFrames directly by name
29
+ df = pl.read_parquet('data.parquet')
30
+
31
+ result = duckdb.sql("""
32
+ SELECT category, SUM(amount) as total
33
+ FROM df
34
+ GROUP BY category
35
+ ORDER BY total DESC
36
+ """).pl() # Query df directly, return as Polars
37
+ ```
38
+
39
+ ### Via Arrow (When Needed)
40
+
41
+ ```python
42
+ # Polars → Arrow → DuckDB
43
+ df_polars = pl.read_csv('data.csv')
44
+ duckdb.register('my_table', df_polars.to_arrow())
45
+
46
+ # DuckDB → Arrow → Polars
47
+ arrow_table = duckdb.sql("SELECT * FROM data").arrow()
48
+ df_polars = pl.from_arrow(arrow_table)
49
+ ```
50
+
51
+ ## WRONG vs RIGHT Patterns
52
+
53
+ ### ❌ NEVER - Using Pandas
54
+
55
+ ```python
56
+ # FORBIDDEN - decisively slower than Polars/DuckDB on every operation!
57
+ import pandas as pd
58
+ df = pd.read_csv('data.csv')
59
+ result = df.groupby('category')['amount'].sum()
60
+ ```
61
+
62
+ ### ✅ CORRECT - DuckDB for simple aggregation query
63
+
64
+ ```python
65
+ import duckdb
66
+ # Direct file query - no memory loading!
67
+ result = duckdb.sql("""
68
+ SELECT category, SUM(amount) as total
69
+ FROM 'data.csv'
70
+ GROUP BY category
71
+ """).pl() # Fast, memory-efficient
72
+ ```
73
+
74
+ ### ❌ NEVER - Loading file before DuckDB query
75
+
76
+ ```python
77
+ # WRONG - Unnecessary memory usage
78
+ import polars as pl
79
+ import duckdb
80
+ df = pl.read_csv('data.csv') # Loads entire file
81
+ result = duckdb.sql("SELECT * FROM df WHERE amount > 100").pl()
82
+ ```
83
+
84
+ ### ✅ CORRECT - Let DuckDB query directly
85
+
86
+ ```python
87
+ import duckdb
88
+ # DuckDB queries file directly - much faster!
89
+ result = duckdb.sql("""
90
+ SELECT * FROM 'data.csv'
91
+ WHERE amount > 100
92
+ """).pl()
93
+ ```
94
+
95
+ ### ❌ NEVER - Eager evaluation in Polars
96
+
97
+ ```python
98
+ # WRONG - Loads everything immediately
99
+ import polars as pl
100
+ df = pl.read_csv('large_data.csv') # Eager load
101
+ filtered = df.filter(pl.col('value') > 100)
102
+ ```
103
+
104
+ ### ✅ CORRECT - Lazy evaluation
105
+
106
+ ```python
107
+ import polars as pl
108
+ # Lazy - builds query plan, optimizes, executes once
109
+ df = pl.scan_csv('large_data.csv') # Lazy
110
+ result = (
111
+ df
112
+ .filter(pl.col('value') > 100)
113
+ .groupby('category')
114
+ .agg(pl.sum('value'))
115
+ .collect() # Execute optimized plan
116
+ )
117
+ ```
118
+
119
+ ### ❌ NEVER - Unnecessary Conversions
120
+
121
+ ```python
122
+ # WASTEFUL (DuckDB → Pandas → Polars)
123
+ import duckdb, pandas as pd, polars as pl
124
+ df_pd = duckdb.sql("SELECT * FROM 'data.csv'").df() # requires pandas - the skill never ships it
125
+ df_pl = pl.from_pandas(df_pd)
126
+ ```
127
+
128
+ ### ✅ CORRECT - Direct conversion
129
+
130
+ ```python
131
+ # DIRECT (DuckDB → Polars via Arrow)
132
+ import duckdb
133
+ df_pl = duckdb.sql("SELECT * FROM 'data.csv'").pl()
134
+ ```
135
+
136
+ ### ❌ NEVER - Wrong tool for heavy filtering
137
+
138
+ ```python
139
+ # SLOW (DuckDB not optimal for filtering)
140
+ import duckdb
141
+ result = duckdb.sql("""
142
+ SELECT * FROM 'huge.csv'
143
+ WHERE complex_filter = true
144
+ """).pl()
145
+ ```
146
+
147
+ ### ✅ CORRECT - Use Polars for filtering
148
+
149
+ ```python
150
+ # FAST (Polars 128x faster for filtering)
151
+ import polars as pl
152
+ result = pl.scan_csv('huge.csv').filter(pl.col('complex_filter')).collect()
153
+ ```
@@ -0,0 +1,37 @@
1
+ # Performance Benchmarks
2
+
3
+ Routing heuristics distilled from public 2024-2025 results in the [db-benchmark suite](https://github.com/h2oai/db-benchmark) (rendered at [h2oai.github.io/db-benchmark](https://h2oai.github.io/db-benchmark/)) and from the vendors' own documentation ([duckdb.org](https://duckdb.org/), [pola.rs](https://pola.rs/)).
4
+
5
+ **Read these as routing guidance, not guarantees.** Multipliers vary with dataset size, cardinality, data types, and hardware. When the choice materially matters, measure on the actual data.
6
+
7
+ ## Operation Performance Comparison
8
+
9
+ | Operation Type | Winner | Indicative advantage | When to Use |
10
+ |---------------------|-------------|----------------------|------------------------------------------------|
11
+ | **Filtering** | **Polars** | often the fastest by a wide margin (SIMD, predicate pushdown) | Single-table filters |
12
+ | **Sorting** | **Polars** | typically the fastest | ORDER BY operations, ranking |
13
+ | **Joins** | **DuckDB** | typically faster; richer join types | Multi-table joins, especially complex joins |
14
+ | **Aggregations** | **DuckDB** | typically faster on large datasets | GROUP BY, complex aggregations |
15
+ | **Window Funcs** | **Polars** | typically faster | RANK, LAG/LEAD, running totals |
16
+ | **Transformations** | **Polars** | typically faster | Pivot, melt, string operations |
17
+ | **Direct Query** | **DuckDB** | avoids loading to memory entirely | Ad-hoc exploration without loading to memory |
18
+ | **Streaming** | **Polars** | handles datasets larger than RAM | Datasets larger than RAM |
19
+
20
+ Both tools are decisively faster than pandas on 1M+ row workloads, which is why pandas is banned outright in this skill.
21
+
22
+ ## Operation Detection Keywords
23
+
24
+ Automatically detect operation types from user requests:
25
+
26
+ - **Filter**: "where", "filter", "condition", "select rows", "find"
27
+ - **Sort**: "sort", "order", "top", "bottom", "rank"
28
+ - **Join**: "join", "merge", "combine tables"
29
+ - **Aggregate**: "group", "sum", "avg", "count", "mean", "total", "aggregate"
30
+ - **Transform**: "pivot", "melt", "reshape", "string operations", "clean", "transform"
31
+ - **Window**: "running", "cumulative", "lag", "lead", "rank", "partition"
32
+
33
+ ## Benchmarking Notes
34
+
35
+ - Public suites exercise typical analytical workloads (1M-100M rows).
36
+ - Performance advantages are approximate and vary by dataset characteristics.
37
+ - Real-world performance depends on data types, cardinality, and hardware.
@@ -0,0 +1,78 @@
1
+ # uv Setup — Per-Platform
2
+
3
+ This skill runs every data operation through `uv run --with ...`. If `uv --version` fails, set uv up with the automated scripts or the manual commands below, then verify.
4
+
5
+ ## Automated (recommended)
6
+
7
+ | Platform | Command |
8
+ |---|---|
9
+ | macOS / Linux / WSL / Git Bash | `bash scripts/setup-uv.sh` |
10
+ | Windows (PowerShell) | `powershell -ExecutionPolicy Bypass -File scripts/setup-uv.ps1` |
11
+
12
+ Both scripts: detect OS + architecture → install uv to the latest release when missing → upgrade it when present (`uv self update`) → make it resolvable for the current shell → verify with `uv --version`. They are idempotent — safe to re-run any time.
13
+
14
+ ## Manual install per platform
15
+
16
+ ### macOS
17
+
18
+ ```bash
19
+ curl -LsSf https://astral.sh/uv/install.sh | sh # official installer → ~/.local/bin/uv
20
+ # or, with Homebrew:
21
+ brew install uv
22
+ ```
23
+
24
+ ### Linux (x86_64 / aarch64)
25
+
26
+ ```bash
27
+ curl -LsSf https://astral.sh/uv/install.sh | sh # official installer → ~/.local/bin/uv
28
+ ```
29
+
30
+ The installer detects glibc vs musl and downloads the right static binary. On minimal containers, ensure `curl` (or `wget`) exists; `wget -qO- https://astral.sh/uv/install.sh | sh` is the fallback.
31
+
32
+ ### Windows (native)
33
+
34
+ ```powershell
35
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
36
+ # or, with winget:
37
+ winget install --id=astral-sh.uv -e
38
+ ```
39
+
40
+ ### Windows Subsystem for Linux / Git Bash
41
+
42
+ Use the Linux/macOS installer inside the Unix shell, not the PowerShell installer:
43
+
44
+ ```bash
45
+ curl -LsSf https://astral.sh/uv/install.sh | sh
46
+ ```
47
+
48
+ ### CI
49
+
50
+ ```yaml
51
+ # GitHub Actions
52
+ - uses: astral-sh/setup-uv@v5
53
+ # or plain shell anywhere:
54
+ - run: curl -LsSf https://astral.sh/uv/install.sh | sh
55
+ ```
56
+
57
+ ## PATH notes
58
+
59
+ - The official installers put the binary in `~/.local/bin` (Unix) or `%USERPROFILE%\.local\bin` (Windows). New shells get it automatically on most setups; an already-open shell needs `export PATH="$HOME/.local/bin:$PATH"` (Unix) or `$env:Path = "$env:USERPROFILE\.local\bin;$env:Path"` (PowerShell) once.
60
+ - Homebrew and winget install into their own prefixes that are already on PATH.
61
+
62
+ ## Upgrade to latest
63
+
64
+ ```bash
65
+ uv self update
66
+ ```
67
+
68
+ `uv self update` only works for official-installer binaries; Homebrew/winget installs upgrade through their package manager (`brew upgrade uv` / `winget upgrade astral-sh.uv`). The setup scripts handle this automatically.
69
+
70
+ ## Verify
71
+
72
+ ```bash
73
+ uv --version
74
+ ```
75
+
76
+ ## Offline / air-gapped
77
+
78
+ Download the matching archive from the uv GitHub releases page, extract it, and put the `uv` binary anywhere on PATH. `uv run --with <pkg>` still needs network for first-time package resolution unless a mirror is configured via `UV_INDEX_URL`.
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env -S uv run --script
2
+ # /// script
3
+ # requires-python = ">=3.11"
4
+ # dependencies = [
5
+ # "duckdb",
6
+ # "polars",
7
+ # "numpy",
8
+ # "pyarrow",
9
+ # "typer",
10
+ # "rich",
11
+ # ]
12
+ # ///
13
+
14
+ """Quick data query runner. SQL arg -> DuckDB; --filter (Polars SQL) -> Polars; --describe -> schema + stats."""
15
+
16
+ from __future__ import annotations
17
+
18
+ from pathlib import Path
19
+
20
+ import typer
21
+ from rich import print as rprint
22
+ from rich.table import Table
23
+
24
+
25
+ def _run_duckdb(file_path: Path, sql: str) -> None:
26
+ import duckdb
27
+
28
+ table_ref = f"'{file_path}'"
29
+ stem = file_path.stem
30
+ query = sql
31
+ for alias in ("data", "df", stem):
32
+ query = query.replace(f"FROM {alias} ", f"FROM {table_ref} ")
33
+ query = query.replace(f"FROM {alias}\n", f"FROM {table_ref}\n")
34
+ query = query.replace(f"from {alias} ", f"from {table_ref} ")
35
+ query = query.replace(f"from {alias}\n", f"from {table_ref}\n")
36
+ if query.endswith(f"FROM {alias}") or query.endswith(f"from {alias}"):
37
+ query = query[: -len(alias)] + table_ref
38
+
39
+ result = duckdb.sql(query)
40
+ df = result.pl()
41
+ _print_polars(df)
42
+
43
+
44
+ def _run_polars_filter(file_path: Path, expr: str) -> None:
45
+ import polars as pl
46
+
47
+ df = _read_file(file_path)
48
+ filtered = df.filter(pl.sql_expr(expr))
49
+ _print_polars(filtered)
50
+
51
+
52
+ def _run_describe(file_path: Path) -> None:
53
+ df = _read_file(file_path)
54
+
55
+ rprint(f"\n[bold]Schema:[/bold] {file_path.name} ({len(df)} rows × {len(df.columns)} cols)")
56
+ for name, dtype in zip(df.columns, df.dtypes):
57
+ rprint(f" {name}: [cyan]{dtype}[/cyan]")
58
+
59
+ rprint("\n[bold]Statistics:[/bold]")
60
+ _print_polars(df.describe())
61
+
62
+
63
+ def _read_file(file_path: Path): # noqa: ANN202
64
+ import polars as pl
65
+
66
+ suffix = file_path.suffix.lower()
67
+ if suffix == ".csv":
68
+ return pl.read_csv(file_path)
69
+ if suffix == ".parquet":
70
+ return pl.read_parquet(file_path)
71
+ if suffix == ".json":
72
+ return pl.read_json(file_path)
73
+ if suffix in (".jsonl", ".ndjson"):
74
+ return pl.read_ndjson(file_path)
75
+ rprint(f"[red]Unsupported format:[/red] {suffix} (Excel: export to CSV or Parquet first)")
76
+ raise SystemExit(1)
77
+
78
+
79
+ def _print_polars(df) -> None: # noqa: ANN001
80
+ table = Table(show_lines=False)
81
+ for col_name in df.columns:
82
+ table.add_column(col_name)
83
+ for row in df.iter_rows():
84
+ table.add_row(*(str(v) for v in row))
85
+ rprint(table)
86
+ rprint(f"[dim]{df.shape[0]} rows × {df.shape[1]} cols[/dim]")
87
+
88
+
89
+ def main(
90
+ file: Path = typer.Argument(help="Data file (csv, parquet, json, ndjson)"),
91
+ sql: str = typer.Argument(None, help="SQL query (uses DuckDB). Use 'data' as table name."),
92
+ filter_expr: str = typer.Option(None, "--filter", "-f", help="Polars SQL filter, e.g. 'amount > 100'"),
93
+ describe: bool = typer.Option(False, "--describe", "-d", help="Print schema + stats"),
94
+ ) -> None:
95
+ """Query data files with DuckDB (SQL) or Polars (SQL filter expressions)."""
96
+ if not file.exists():
97
+ rprint(f"[red]File not found:[/red] {file}")
98
+ raise SystemExit(1)
99
+
100
+ if describe:
101
+ _run_describe(file)
102
+ elif filter_expr:
103
+ _run_polars_filter(file, filter_expr)
104
+ elif sql:
105
+ _run_duckdb(file, sql)
106
+ else:
107
+ _run_describe(file)
108
+
109
+
110
+ if __name__ == "__main__":
111
+ typer.run(main)
@@ -0,0 +1,53 @@
1
+ [CmdletBinding()]
2
+ param()
3
+ Set-StrictMode -Version Latest
4
+ $ErrorActionPreference = 'Stop'
5
+
6
+ function Write-Step([string]$Message) { Write-Host "[setup-uv] $Message" }
7
+
8
+ Write-Step "detected os=$([System.Runtime.InteropServices.RuntimeInformation]::OSDescription) arch=$([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture)"
9
+
10
+ $uv = Get-Command uv -ErrorAction SilentlyContinue
11
+ if ($null -ne $uv) {
12
+ $current = (& uv --version) | Select-Object -First 1
13
+ Write-Step "uv already installed ($current) - upgrading"
14
+ & uv self update 2>$null
15
+ if ($LASTEXITCODE -ne 0) {
16
+ Write-Step "uv self update unavailable (package-manager install) - trying winget"
17
+ if (Get-Command winget -ErrorAction SilentlyContinue) {
18
+ & winget upgrade --id=astral-sh.uv -e --accept-source-agreements --accept-package-agreements 2>$null
19
+ if ($LASTEXITCODE -ne 0) { & winget install --id=astral-sh.uv -e --accept-source-agreements --accept-package-agreements }
20
+ } else {
21
+ Write-Step "no winget; keeping current uv (already functional)"
22
+ }
23
+ }
24
+ } else {
25
+ Write-Step "uv not found - installing latest via the official installer"
26
+ $installed = $false
27
+ try {
28
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
29
+ $installed = $true
30
+ } catch {
31
+ Write-Step "official installer failed ($($_.Exception.Message)) - trying winget"
32
+ if (Get-Command winget -ErrorAction SilentlyContinue) {
33
+ & winget install --id=astral-sh.uv -e --accept-source-agreements --accept-package-agreements
34
+ $installed = ($LASTEXITCODE -eq 0)
35
+ }
36
+ }
37
+ if (-not $installed -and $null -eq (Get-Command uv -ErrorAction SilentlyContinue)) {
38
+ Write-Step "FAIL: could not install uv - install it manually per references/uv-setup.md"
39
+ exit 1
40
+ }
41
+ }
42
+
43
+ if ($null -eq (Get-Command uv -ErrorAction SilentlyContinue)) {
44
+ $localBin = Join-Path $env:USERPROFILE '.local\bin'
45
+ if (Test-Path (Join-Path $localBin 'uv.exe')) { $env:Path = "$localBin;$env:Path" }
46
+ }
47
+
48
+ if ($null -eq (Get-Command uv -ErrorAction SilentlyContinue)) {
49
+ Write-Step "FAIL: uv still not on PATH after install - add %USERPROFILE%\.local\bin to PATH and retry"
50
+ exit 1
51
+ }
52
+
53
+ Write-Step "OK: $((& uv --version) | Select-Object -First 1)"
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ log() { printf '[setup-uv] %s\n' "$*"; }
5
+
6
+ os="$(uname -s 2>/dev/null || echo unknown)"
7
+ arch="$(uname -m 2>/dev/null || echo unknown)"
8
+ log "detected os=${os} arch=${arch}"
9
+
10
+ case "$os" in
11
+ Darwin|Linux) ;;
12
+ MINGW*|MSYS*|CYGWIN*)
13
+ log "Git Bash / MSYS environment detected - installing the Windows build is not supported here."
14
+ log "Use the Linux installer inside WSL, or run scripts/setup-uv.ps1 in PowerShell instead."
15
+ exit 1
16
+ ;;
17
+ *)
18
+ log "unsupported OS: ${os} - see references/uv-setup.md for manual steps."
19
+ exit 1
20
+ ;;
21
+ esac
22
+
23
+ if command -v uv >/dev/null 2>&1; then
24
+ current="$(uv --version 2>/dev/null | head -n1)"
25
+ log "uv already installed (${current}) - upgrading"
26
+ if uv self update >/dev/null 2>&1; then
27
+ log "uv self update succeeded"
28
+ else
29
+ log "uv self update unavailable (package-manager install) - trying Homebrew"
30
+ if command -v brew >/dev/null 2>&1; then
31
+ brew upgrade uv >/dev/null 2>&1 || brew install uv
32
+ else
33
+ log "no Homebrew; keeping current uv (already functional)"
34
+ fi
35
+ fi
36
+ else
37
+ log "uv not found - installing latest via the official installer"
38
+ if command -v curl >/dev/null 2>&1; then
39
+ curl -LsSf https://astral.sh/uv/install.sh | sh
40
+ elif command -v wget >/dev/null 2>&1; then
41
+ wget -qO- https://astral.sh/uv/install.sh | sh
42
+ elif command -v brew >/dev/null 2>&1; then
43
+ log "no curl/wget - installing via Homebrew"
44
+ brew install uv
45
+ else
46
+ log "neither curl, wget, nor brew available - install one of them and re-run."
47
+ exit 1
48
+ fi
49
+ fi
50
+
51
+ if ! command -v uv >/dev/null 2>&1; then
52
+ export PATH="$HOME/.local/bin:$PATH"
53
+ fi
54
+
55
+ if ! command -v uv >/dev/null 2>&1; then
56
+ log "FAIL: uv still not on PATH after install - add \$HOME/.local/bin to PATH and retry."
57
+ exit 1
58
+ fi
59
+
60
+ log "OK: $(uv --version)"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: debugging
3
- description: "MUST USE for any real runtime debugging across ANY language or binary — crashes, silent failures, wrong responses, stuck processes, memory leaks, async misbehavior, unexplained timing, reverse engineering. Runs a hypothesis-driven loop: form ≥3 hypotheses, investigate in parallel, after 2 failed rounds spawn Oracles from orthogonal angles, confirm root cause, lock with a failing test, fix minimally, QA by actually USING the system, scrub artifacts. The actual HOW lives in `references/` — READ THEM. Triggers: 'debug this', 'why is X not working', 'hanging', 'attach a debugger', 'reverse engineer', 'pwndbg', 'gdb', 'lldb', 'node inspect', 'tsx debug', 'pdb', 'dlv', 'delve', 'rust-gdb', 'set a breakpoint', 'context window exploded', 'why is the response empty', 'why is this happening', 'trace this bug', 'reproduce and fix', 'silent failure', 'HTTP 200 but empty', 'why did it stop', 'inspect the binary', 'playwright', 'flaky test', 'fails intermittently', 'passes in isolation', 'only fails in CI'."
3
+ description: "MUST USE for any real runtime debugging across ANY language or binary — crashes, silent failures, wrong responses, stuck processes, memory leaks, async misbehavior, unexplained timing, reverse engineering. Runs a hypothesis-driven loop: form ≥3 hypotheses, investigate in parallel, after 2 failed rounds spawn Oracles from orthogonal angles, confirm root cause, lock with a failing test, fix minimally, QA by actually USING the system, scrub artifacts. The actual HOW lives in `references/` — READ THEM. Triggers: 'debug this', 'why is X not working', 'hanging', 'attach a debugger', 'reverse engineer', 'pwndbg', 'gdb', 'lldb', 'node inspect', 'pdb', 'dlv', 'delve', 'rust-gdb', 'set a breakpoint', 'context window exploded', 'why is the response empty', 'why is this happening', 'trace this bug', 'reproduce and fix', 'silent failure', 'HTTP 200 but empty', 'why did it stop', 'inspect the binary', 'playwright', 'flaky test', 'fails intermittently', 'passes in isolation', 'only fails in CI'."
4
4
  ---
5
5
 
6
6
  # Debugging
@@ -238,8 +238,7 @@ Logging is part of the code you ship, and it has iron rules of its own: levels c
238
238
  ## DEPENDENCY UPGRADES — CROSS-CUTTING RULES
239
239
 
240
240
  - **`0.x` minor = major.** Semver promises nothing below 1.0: treat `0.N → 0.N+1` as a breaking upgrade — read the changelog, build, and run the full suite before trusting it. A required field appearing in a public options type is a routine `0.x` "minor".
241
- - **Version literals live outside the manifest.** Before committing a bump, grep the repo for the old version string: Dockerfiles pinning a global CLI, CI workflows, docs, and contract tests all carry copies. A bump that updates only the package manifest ships a split-brain deploy.
242
- - **Pin-parity contract tests are a pattern, not a nuisance.** A small test asserting the lockfile-resolved version equals the deploy artifact's pin (Dockerfile, image tag) turns silent drift into a red test. If the project has one, update it deliberately; if the bump reveals unguarded drift, add the test with the bump.
241
+ - **Version literals live outside the manifest.** Before committing a bump, grep the repo for the old version string: Dockerfiles pinning a global CLI, CI workflows, and docs all carry copies. A bump that updates only the package manifest ships a split-brain deploy.
243
242
  - **Never hand-merge a lockfile.** On conflict, take either side whole and regenerate with the package manager — the resolver owns that file, not you.
244
243
 
245
244
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: start-work
3
- description: "Execute a Prometheus work plan in Codex with Boulder state, evidence ledger updates, worktree discipline, parallel subagents, and Stop-hook continuation. Use after planning when the user says start work, execute plan, continue plan, resume plan, or asks to run a .omo/plans plan."
3
+ description: "Execute a Prometheus work plan with Boulder state, evidence ledger updates, worktree discipline, parallel subagents, and Stop-hook continuation. Use after planning when the user says start work, execute plan, continue plan, resume plan, or asks to run a .omo/plans plan."
4
4
  ---
5
5
 
6
6
  ## Codex Harness Tool Compatibility
@@ -29,8 +29,8 @@ For work likely to exceed one wait cycle, require the child to send `WORKING: <t
29
29
 
30
30
  **YOU DO NOT WRITE CODE. YOU DO NOT EDIT PRODUCT FILES. YOU DO NOT RUN QA YOURSELF. EVERY unit of implementation, test, QA, and review work MUST be delegated to a spawned subagent. NO EXCEPTIONS.** Your hands touch only plan selection, `.omo/` state (Boulder, ledger, plan checkboxes), decomposition, dispatch, verdicts, and evidence records. About to edit a product file or run an implementation command yourself? **STOP. SPAWN A WORKER INSTEAD.** Orchestrate at **MAXIMUM PARALLELISM**: every independent unit runs concurrently; only named dependencies serialize.
31
31
 
32
- ### Delegation by difficulty (Codex tier workers)
33
- When tier worker agents are installed (Codex), size each implementation lane by difficulty and pass the matching `agent_type` where the spawn schema exposes it: LOW (one-file fix, boilerplate, config/copy) -> `lazycodex-worker-low`; MEDIUM (standard feature, few files, known patterns) -> `lazycodex-worker-medium`; HIGH (new module, cross-module refactor, concurrency/security/migration) -> `lazycodex-worker-high`. Explorer/librarian research lanes keep their own roles. Difficulty (model power) is orthogonal to the LIGHT/HEAVY rigor tier in step 4 — judge each on its own facts. On spawn surfaces without `agent_type` (deployed v2), state the tier inside `message`.
32
+ ### Codex tier mapping for the delegation router
33
+ When tier worker agents are installed, map the delegation router's parenthesized difficulty to `agent_type`: (low) -> `lazycodex-worker-low`; (medium) -> `lazycodex-worker-medium`; (high) -> `lazycodex-worker-high`. Explorer/librarian research lanes keep their own roles. On spawn surfaces without `agent_type`, state the tier inside `message`. Difficulty (model power) is orthogonal to the LIGHT/HEAVY rigor tier in step 4 — judge each on its own facts.
34
34
 
35
35
  ## Codex Subagent Reliability
36
36
 
@@ -40,7 +40,7 @@ Plan and reviewer agents may run for a long time: spawn them in the background a
40
40
 
41
41
  # start-work
42
42
 
43
- Execute a Prometheus work plan until every top-level checkbox is complete. This skill pairs with the Codex `Stop` / `SubagentStop` continuation hook (`components/start-work-continuation`), which re-injects the next turn while `.omo/boulder.json` says this `codex:<session_id>` still has unchecked plan work.
43
+ Execute a Prometheus work plan until every top-level checkbox is complete. This skill pairs with the harness's start-work continuation hook, which re-injects the next turn while `.omo/boulder.json` says this `codex:<session_id>` still has unchecked plan work.
44
44
 
45
45
  ## Usage
46
46
 
@@ -104,14 +104,58 @@ Write `.omo/boulder.json` before implementation starts. Prefix session ids with
104
104
 
105
105
  For PR/branch work, a task-owned worktree is mandatory before implementation starts: pass `--worktree`, or use `--make-pr`/`--ship`, which auto-create one. Verify the path with `git worktree list --porcelain` or create it with `git worktree add <path> <branch-or-HEAD>`, then store the absolute path as `worktree_path`. All edits, commands, tests, and evidence capture must run inside that worktree.
106
106
 
107
+ ## Parallel delivery lanes (teams and worktrees)
108
+
109
+ Solo orchestration with parallel background workers is the default topology. Decide once, when the wave's lanes are known, and record the verdict in the ledger:
110
+
111
+ - **Independent lanes -> parallel workers.** Separate files, no shared contract: one parallel spawn burst; no team.
112
+ - **Overlapping lanes -> a team.** The lanes touch the same module or contract AND running them concurrently actually finishes sooner: stand up a team (where the harness has one) so one lane's discoveries relay through you mid-flight.
113
+ - **PR-mode independent lanes -> a worktree per lane.** Under `--make-pr`/`--ship`, when a wave holds independent checkboxes, give each lane its own branch and task-owned worktree, delivered as its own PR.
114
+
115
+ Landing rules, regardless of topology:
116
+
117
+ - **Merge per verified unit.** A lane lands the moment its own gates pass — it never waits for the slowest sibling. Integrate landed work back into the base the remaining lanes branch from.
118
+ - **Only the orchestrator merges.** Workers and team members never merge and never push the base branch.
119
+ - **Conflicts are the orchestrator's job.** Decide the landing order and tell the later lane what changed; a worker never resolves a sibling's conflict blind.
120
+
107
121
  ## Phase 3: Execute the next checkbox
108
122
 
109
123
  1. Read the full selected plan.
110
124
  2. Find the first unchecked column-0 checkbox in `## TODOs` or `## Final Verification Wave`.
111
125
  3. Ignore nested checkboxes under acceptance criteria, evidence, and definition-of-done sections.
112
126
  4. Classify the checkbox tier and record it in its ledger entry. Default is LIGHT — a narrow change inside existing layers. Take HEAVY only on a fact you can point to: a new module / abstraction / domain model; auth, security, or session; an external integration; a DB schema or migration; concurrency or transaction boundaries; a cross-domain refactor; or the plan or user signals care. When unsure, take HEAVY; upgrade and redo skipped gates the moment a HEAVY fact surfaces; never downgrade.
113
- 5. Decompose that checkbox into atomic sub-tasks. Collect every other unchecked checkbox in the same plan wave whose dependencies are met — their lanes execute concurrently.
114
- 6. **DELEGATE EVERYTHING. YOU NEVER IMPLEMENT.** Dispatch ALL independent sub-tasks across those checkboxes in one parallel `multi_agent_v1.spawn_agent` burst; serialize only named dependencies. Verification and checkbox marking stay per-checkbox.
127
+ 5. Decompose that checkbox into atomic sub-tasks sized for ONE worker in ONE run — a sub-task that would need mid-flight steering is two sub-tasks. Collect every other unchecked checkbox in the same plan wave whose dependencies are met — their lanes execute concurrently. A wave that could split further but holds fewer than 3 independent sub-tasks is under-split.
128
+ 6. **DELEGATE EVERYTHING. YOU NEVER IMPLEMENT.** Route every sub-task through the delegation router below, then dispatch ALL independent sub-tasks across those checkboxes in one parallel worker-spawn burst (a single batched spawn call where the harness supports it); serialize only named dependencies. Verification and checkbox marking stay per-checkbox.
129
+ 7. Give every dispatched sub-task its completion condition and watch for it per the section below. A dispatch whose completion nobody watches is an unfinished dispatch.
130
+
131
+ ### Monitor every dispatched subagent to its completion condition
132
+
133
+ A spawned worker is not fire-and-forget. For EACH subagent in the burst, name the observable state that ends its lane — the file written, the PR opened, the checkbox's gates green — and put a watcher on THAT state, never on a clock.
134
+
135
+ - **Arm one watcher per lane, at spawn time.** The worker's own completion arrives on its own as an injected notification; arm an explicit `monitor` on top of it only when the lane's completion condition lives OUTSIDE the child's final message — CI turning green, a log line, a build artifact appearing, a branch landing. Watch the state itself (`monitor` with a command that exits or emits on that condition), and keep the burst's watchers distinct so one lane firing never reads as another's.
136
+ - **NEVER poll and NEVER sleep.** No `sleep`, no timed retry loop, no re-reading the same status hoping it changed. Between waves, do independent root work or end the turn; an idle session is always woken. A single `task_output({ mode: "tail" })` peek is allowed only when a midpoint decision genuinely depends on it.
137
+ - **Tear the watcher down the instant it resolves.** The moment a monitor fires, or you discover it was armed on the WRONG condition (it watches a path the lane never touches, a pattern that can never match, a lane you already cancelled), stop it with `kill_bash` and say so in the ledger. A stale watcher re-fires on unrelated output and corrupts the next wave's verdict.
138
+ - **Then advance.** Fired watcher plus verified evidence means that lane's gates run and its checkbox closes; a mis-set watcher means re-arm it on the right condition or drop it, and continue. Never let a dead watcher hold the run open, and never treat watcher silence as a pass.
139
+
140
+ ### Delegation router — recommended task executor category
141
+
142
+ When the plan annotates a todo with `Recommended task executor category:`, follow that annotation; deviate only for a reason recorded in the ledger entry. Otherwise route by shape, in the omo category vocabulary (category-capable harnesses pass it directly on the worker-spawn tool, e.g. `task(category="quick", ...)`; others map the parenthesized difficulty):
143
+
144
+ | Category | Route here |
145
+ | --- | --- |
146
+ | `quick` (low) | mechanical, single-file, boilerplate, config/copy — the default for every splittable piece |
147
+ | `unspecified-low` (low) | small tasks that fit no other category |
148
+ | `unspecified-high` (medium) | standard features across a few files with known patterns |
149
+ | `visual-engineering` (medium) | frontend, UI/UX, styling, animation |
150
+ | `writing` (low) | documentation and prose |
151
+ | `git` (low) | git operations |
152
+ | `deep` (high) | hairy debugging, research-heavy or subtle cross-module work |
153
+ | `ultrabrain` (high) | ONE genuinely hard, logic-heavy problem — hand it the goal, not step-by-step instructions |
154
+
155
+ Sizing is a two-branch decision made per checkbox, before dispatch:
156
+
157
+ - **Splittable work splits.** When the checkbox decomposes into independent pieces, dispatch them as a swarm of `quick`/`unspecified-low` workers in ONE parallel burst — many small cheap workers in parallel beat one large delegation.
158
+ - **Cohesive hard work stays whole.** When splitting would sever shared reasoning (one algorithm, one migration, one subtle bug), send the WHOLE problem to `deep` or `ultrabrain` as ONE delegation. Never force-split work whose parts share one insight.
115
159
 
116
160
  Each sub-task message must include:
117
161
 
@@ -122,11 +166,12 @@ Each sub-task message must include:
122
166
  5. One Manual-QA channel, named with the exact tool and exact invocation (the literal `curl`, `send-keys`, `browser:control-in-app-browser` action, `page.click`, payload, selectors, and the binary observable that decides PASS/FAIL), not "verify it works". A LIGHT checkbox needs one real-surface proof of its deliverable, and auxiliary surfaces (CLI stdout, DB state diff, parsed config dump) are first-class when the surface is CLI- or data-shaped:
123
167
  - HTTP call: `curl -i` against the live endpoint.
124
168
  - Terminal / TUI: drive a real pty; `tmux send-keys` is fine for a boot/behavior smoke, but color/layout/CJK evidence goes through the xterm.js web terminal below, NEVER `tmux capture-pane`.
125
- - Browser use: in Codex, use `browser:control-in-app-browser` first when available and the scenario does not need an authenticated or persistent user browser profile; otherwise drive the real page with Chrome, or agent-browser (https://github.com/vercel-labs/agent-browser) when Chrome is unavailable.
169
+ - Browser use: prefer the harness's in-app browser control when available and the scenario does not need an authenticated or persistent user browser profile; otherwise drive the real page with Chrome, or agent-browser (https://github.com/vercel-labs/agent-browser) when Chrome is unavailable.
126
170
  - Computer use: OS-level GUI automation against the running desktop app when the surface is not a page.
127
171
  - TUI visual evidence: when a TUI claim needs visual QA or PR proof, run `node script/qa/web-terminal-visual-qa.mjs --command "<cmd>" --input "{Enter}" --evidence-dir <dir>` (real pty rendered through xterm.js in Chrome) and attach `terminal.png` plus `metadata.json`.
128
172
  6. The adversarial classes that apply to this sub-task (from the 9 ultraqa classes) and how each is probed.
129
173
  7. Required artifact path and cleanup receipt.
174
+ 8. Tool-use expectations: batch independent tool calls in parallel; when the harness exposes a code-execution surface (eval), use it for multi-call steps instead of one-by-one calls.
130
175
 
131
176
  The 9 ultraqa classes are trigger-mapped: new input parsing → malformed input; untrusted external text → prompt injection; resumable or long-running flows → cancel/resume; generated or cached artifacts → stale state; uncommitted user files in scope → dirty worktree; long external commands → hung or long commands; new or timing-sensitive tests → flaky tests; log-based success claims → misleading success output; mid-operation interrupts → repeated interruptions. A class applies when its trigger fact holds. Probe each applicable class; record the rest as not-applicable with a one-line reason.
132
177
 
@@ -167,7 +212,7 @@ A worker done claim is never final: each implementation sub-task returns a `Done
167
212
 
168
213
  Rules:
169
214
  - `confirmed` is the only pass verdict. `false-positive`, `needs-fix`, and `needs-human-review` all block checkbox completion.
170
- - The verifier must be independent from the executor: use `lazycodex-gate-reviewer`, a scoped `worker` reviewer, or root only when root did not implement or materially rewrite that task.
215
+ - The verifier must be independent from the executor: use the harness's gate reviewer (see the harness compatibility section) or a fresh reviewer worker on a strong model, or root only when root did not implement or materially rewrite that task.
171
216
  - A worker done claim must be independently verified before it becomes checkbox completion.
172
217
  - On any non-confirmed verdict, append the feedback to the ledger, reset the checkbox work to in-progress, and re-dispatch the executor with the exact failure.
173
218
  - The verifier must probe the applicable adversarial keys, including `stale_state`, `dirty_worktree`, and `misleading_success_output`, before allowing `FullyDone`.
@@ -206,5 +251,5 @@ When all top-level checkboxes in `## TODOs` and `## Final Verification Wave` are
206
251
  - No completion claim while an applicable ultraqa adversarial class was never probed. Each applicable class needs a captured observable result; each skipped class needs a one-line not-applicable reason in the ledger.
207
252
  - No `ORCHESTRATION COMPLETE`, final response, PR creation, PR handoff, or merge before the Global Review and Debugging Gate passes with recorded evidence.
208
253
  - No PR/branch implementation or review in the main worktree; create or use a task-owned git worktree first.
209
- - No unprefixed session ids in Boulder state. Codex sessions are always `codex:<session_id>`.
254
+ - No unprefixed session ids in Boulder state. Sessions are always recorded as `codex:<session_id>`.
210
255
  - No stale-memory execution. The plan and ledger are the durable source of truth.