oh-my-opencode 4.13.0 → 4.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. package/.agents/skills/codex-qa/SKILL.md +15 -0
  2. package/.agents/skills/codex-qa/references/logging-debug.md +12 -0
  3. package/.agents/skills/opencode-qa/SKILL.md +17 -0
  4. package/.agents/skills/opencode-qa/references/tui-tmux.md +17 -0
  5. package/.agents/skills/work-with-pr/SKILL.md +18 -10
  6. package/.opencode/skills/work-with-pr/SKILL.md +18 -10
  7. package/README.md +2 -2
  8. package/dist/cli/doctor/checks/telemetry.d.ts +2 -0
  9. package/dist/cli/doctor/framework/constants.d.ts +1 -0
  10. package/dist/cli/doctor/framework/doctor-target.d.ts +1 -1
  11. package/dist/cli/index.js +24651 -16452
  12. package/dist/cli-node/index.js +24651 -16452
  13. package/dist/config/schema/oh-my-opencode-config.d.ts +1 -0
  14. package/dist/features/team-mode/test-support/async-test-helpers.d.ts +19 -0
  15. package/dist/hooks/atlas/final-wave-approval-gate.d.ts +1 -0
  16. package/dist/hooks/atlas/subagent-completion-reminder.d.ts +30 -0
  17. package/dist/hooks/atlas/types.d.ts +2 -0
  18. package/dist/hooks/atlas/verification-reminders.d.ts +3 -0
  19. package/dist/hooks/team-session-events/team-idle-wake-hint.d.ts +1 -0
  20. package/dist/index.d.ts +1 -0
  21. package/dist/index.js +33232 -19559
  22. package/dist/mcp/context7.d.ts +9 -8
  23. package/dist/oh-my-opencode.schema.json +4 -0
  24. package/dist/shared/posthog.d.ts +17 -10
  25. package/dist/shared/telemetry-product-identity.d.ts +2 -0
  26. package/dist/skills/coding-agent-sessions/SKILL.md +128 -0
  27. package/dist/skills/coding-agent-sessions/agents/openai.yaml +4 -0
  28. package/dist/skills/coding-agent-sessions/references/all-platforms.md +71 -0
  29. package/dist/skills/coding-agent-sessions/references/claude.md +32 -0
  30. package/dist/skills/coding-agent-sessions/references/codex.md +30 -0
  31. package/dist/skills/coding-agent-sessions/references/opencode.md +43 -0
  32. package/dist/skills/coding-agent-sessions/references/senpi.md +17 -0
  33. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/__init__.py +1 -0
  34. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/claude.py +66 -0
  35. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +283 -0
  36. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/codex.py +105 -0
  37. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +275 -0
  38. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/jsonio.py +55 -0
  39. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/kiro_scanner.py +91 -0
  40. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/opencode.py +289 -0
  41. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +92 -0
  42. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_optional_scanners.py +203 -0
  43. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_scanners.py +177 -0
  44. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/timeparse.py +51 -0
  45. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +149 -0
  46. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/types.py +57 -0
  47. package/dist/skills/coding-agent-sessions/scripts/find-agent-sessions.py +19 -0
  48. package/dist/skills/frontend/ATTRIBUTION.md +52 -8
  49. package/dist/skills/frontend/SKILL.md +29 -8
  50. package/dist/skills/frontend/references/design/README.md +29 -12
  51. package/dist/skills/frontend/references/design/_INDEX.md +3 -3
  52. package/dist/skills/frontend/references/design/design-system-architecture.md +22 -19
  53. package/dist/skills/frontend/references/designpowers/EVIDENCE.md +89 -0
  54. package/dist/skills/frontend/references/designpowers/README.md +48 -0
  55. package/dist/skills/frontend/references/designpowers/UPSTREAM.md +80 -0
  56. package/dist/skills/frontend/references/designpowers/lane-a-direction.md +64 -0
  57. package/dist/skills/frontend/references/designpowers/lane-b-execution.md +65 -0
  58. package/dist/skills/frontend/references/designpowers/lane-c-review.md +65 -0
  59. package/dist/skills/frontend/references/designpowers/lane-d-memory.md +83 -0
  60. package/dist/skills/frontend/references/designpowers/orchestration.md +80 -0
  61. package/dist/skills/frontend/references/designpowers/routing.md +79 -0
  62. package/dist/skills/frontend/references/designpowers/vendor/LICENSE +21 -0
  63. package/dist/skills/frontend/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
  64. package/dist/skills/frontend/references/designpowers/vendor/agents/content-writer.md +132 -0
  65. package/dist/skills/frontend/references/designpowers/vendor/agents/design-builder.md +109 -0
  66. package/dist/skills/frontend/references/designpowers/vendor/agents/design-critic.md +89 -0
  67. package/dist/skills/frontend/references/designpowers/vendor/agents/design-lead.md +113 -0
  68. package/dist/skills/frontend/references/designpowers/vendor/agents/design-scout.md +78 -0
  69. package/dist/skills/frontend/references/designpowers/vendor/agents/design-strategist.md +121 -0
  70. package/dist/skills/frontend/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
  71. package/dist/skills/frontend/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
  72. package/dist/skills/frontend/references/designpowers/vendor/agents/motion-designer.md +120 -0
  73. package/dist/skills/frontend/references/designpowers/vendor/skills/accessible-content/SKILL.md +101 -0
  74. package/dist/skills/frontend/references/designpowers/vendor/skills/adaptive-interfaces/SKILL.md +109 -0
  75. package/dist/skills/frontend/references/designpowers/vendor/skills/cognitive-accessibility/SKILL.md +107 -0
  76. package/dist/skills/frontend/references/designpowers/vendor/skills/design-debate/SKILL.md +199 -0
  77. package/dist/skills/frontend/references/designpowers/vendor/skills/design-debt-tracker/SKILL.md +174 -0
  78. package/dist/skills/frontend/references/designpowers/vendor/skills/design-handoff/SKILL.md +125 -0
  79. package/dist/skills/frontend/references/designpowers/vendor/skills/design-md/SKILL.md +106 -0
  80. package/dist/skills/frontend/references/designpowers/vendor/skills/design-retrospective/SKILL.md +266 -0
  81. package/dist/skills/frontend/references/designpowers/vendor/skills/design-review/SKILL.md +123 -0
  82. package/dist/skills/frontend/references/designpowers/vendor/skills/design-system-alignment/SKILL.md +120 -0
  83. package/dist/skills/frontend/references/designpowers/vendor/skills/designpowers-critique/SKILL.md +164 -0
  84. package/dist/skills/frontend/references/designpowers/vendor/skills/heuristic-evaluation/SKILL.md +85 -0
  85. package/dist/skills/frontend/references/designpowers/vendor/skills/inclusive-personas/SKILL.md +98 -0
  86. package/dist/skills/frontend/references/designpowers/vendor/skills/inspiration-scouting/SKILL.md +165 -0
  87. package/dist/skills/frontend/references/designpowers/vendor/skills/interaction-design/SKILL.md +122 -0
  88. package/dist/skills/frontend/references/designpowers/vendor/skills/motion-choreography/SKILL.md +81 -0
  89. package/dist/skills/frontend/references/designpowers/vendor/skills/research-planning/SKILL.md +96 -0
  90. package/dist/skills/frontend/references/designpowers/vendor/skills/responsive-patterns/SKILL.md +77 -0
  91. package/dist/skills/frontend/references/designpowers/vendor/skills/synthetic-user-testing/SKILL.md +192 -0
  92. package/dist/skills/frontend/references/designpowers/vendor/skills/taste-feedback/SKILL.md +165 -0
  93. package/dist/skills/frontend/references/designpowers/vendor/skills/taste-report/SKILL.md +78 -0
  94. package/dist/skills/frontend/references/designpowers/vendor/skills/token-architecture/SKILL.md +75 -0
  95. package/dist/skills/frontend/references/designpowers/vendor/skills/ui-composition/SKILL.md +117 -0
  96. package/dist/skills/frontend/references/designpowers/vendor/skills/usability-testing/SKILL.md +78 -0
  97. package/dist/skills/frontend/references/designpowers/vendor/skills/verification-before-shipping/SKILL.md +125 -0
  98. package/dist/skills/frontend/references/designpowers/vendor/skills/voice-and-tone/SKILL.md +79 -0
  99. package/dist/skills/frontend/references/designpowers/vendor/skills/writing-design-plans/SKILL.md +119 -0
  100. package/dist/skills/frontend/references/ui-ux-db/scripts/core.py +0 -0
  101. package/dist/skills/git-master/SKILL.md +4 -0
  102. package/dist/skills/review-work/SKILL.md +3 -3
  103. package/dist/skills/start-work/SKILL.md +7 -5
  104. package/dist/skills/ultraresearch/SKILL.md +4 -252
  105. package/dist/skills/ulw-plan/SKILL.md +8 -6
  106. package/dist/skills/ulw-plan/references/full-workflow.md +11 -6
  107. package/dist/skills/ulw-plan/references/intent-clear.md +3 -3
  108. package/dist/skills/ulw-plan/references/intent-unclear.md +1 -1
  109. package/dist/skills/{ultraresearch → ulw-research}/ATTRIBUTION.md +1 -1
  110. package/dist/skills/ulw-research/SKILL.md +260 -0
  111. package/dist/skills/visual-qa/SKILL.md +105 -14
  112. package/dist/skills/visual-qa/scripts/skill-prompt-contract.test.ts +120 -1
  113. package/dist/testing/create-plugin-module.d.ts +2 -0
  114. package/dist/tui.js +23917 -16117
  115. package/docs/reference/github-attachment-upload.md +51 -0
  116. package/docs/reference/web-terminal-visual-qa.md +81 -0
  117. package/package.json +20 -14
  118. package/packages/lsp-core/src/lsp/process.ts +4 -1
  119. package/packages/lsp-core/src/mcp.ts +1 -0
  120. package/packages/lsp-daemon/dist/cli.js +5 -1
  121. package/packages/lsp-daemon/dist/index.js +5 -1
  122. package/packages/lsp-daemon/dist/proxy.js +1 -0
  123. package/packages/lsp-tools-mcp/dist/cli.js +5 -1
  124. package/packages/lsp-tools-mcp/dist/lsp/manager.js +4 -1
  125. package/packages/lsp-tools-mcp/dist/mcp.js +5 -1
  126. package/packages/lsp-tools-mcp/dist/tools.js +4 -1
  127. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  128. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +323 -62
  129. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  130. package/packages/omo-codex/plugin/components/bootstrap/scripts/bootstrap.ps1 +37 -68
  131. package/packages/omo-codex/plugin/components/bootstrap/scripts/node-dispatch.ps1 +75 -0
  132. package/packages/omo-codex/plugin/components/bootstrap/src/cli.ts +1 -1
  133. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +2 -18
  134. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +575 -334
  135. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +204 -39
  136. package/packages/omo-codex/plugin/components/codegraph/package.json +2 -2
  137. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +7 -1
  138. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +103 -3
  139. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +114 -0
  140. package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +29 -0
  141. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +31 -57
  142. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +7 -4
  143. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +43 -9
  144. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +146 -0
  145. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +12 -7
  146. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +71 -1
  147. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  148. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  149. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  150. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +4 -1
  151. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  152. package/packages/omo-codex/plugin/components/rules/dist/cli.js +2 -2
  153. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  154. package/packages/omo-codex/plugin/components/rules/src/sparkshell-awareness.ts +2 -2
  155. package/packages/omo-codex/plugin/components/rules/test/sparkshell-awareness.test.ts +11 -2
  156. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +6 -6
  157. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  158. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +23 -0
  159. package/packages/omo-codex/plugin/components/teammode/dist/cli.js +22 -4
  160. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  161. package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +40 -2
  162. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-guide.mjs +32 -5
  163. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team.mjs +7 -3
  164. package/packages/omo-codex/plugin/components/teammode/src/codex-hook.ts +19 -4
  165. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +32 -2
  166. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  167. package/packages/omo-codex/plugin/components/ultrawork/README.md +1 -1
  168. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
  169. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
  170. package/packages/omo-codex/plugin/components/ultrawork/directive.md +23 -7
  171. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +1 -1
  172. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  173. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +6 -4
  174. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +11 -6
  175. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +3 -3
  176. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +1 -1
  177. package/packages/omo-codex/plugin/components/ultrawork/src/codex-hook.ts +1 -1
  178. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +24 -0
  179. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +6 -1
  180. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
  181. package/packages/omo-codex/plugin/components/ulw-loop/README.md +25 -21
  182. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +1 -1
  183. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +381 -0
  184. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +14 -1
  185. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +145 -14
  186. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.d.ts +6 -3
  187. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.js +16 -6
  188. package/packages/omo-codex/plugin/components/ulw-loop/dist/ultrawork-directive.d.ts +5 -0
  189. package/packages/omo-codex/plugin/components/ulw-loop/dist/ultrawork-directive.js +104 -0
  190. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +1 -1
  191. package/packages/omo-codex/plugin/components/ulw-loop/package.json +2 -1
  192. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +19 -11
  193. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +14 -1
  194. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +4 -2
  195. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +28 -6
  196. package/packages/omo-codex/plugin/components/ulw-loop/src/ultrawork-directive.ts +113 -0
  197. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +33 -2
  198. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-kind-guidance.test.ts +31 -0
  199. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +13 -0
  200. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +36 -0
  201. package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +12 -0
  202. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +64 -0
  203. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +2 -1
  204. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +2 -1
  205. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +2 -1
  206. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +2 -1
  207. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +2 -1
  208. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +2 -1
  209. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +2 -1
  210. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +2 -1
  211. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +2 -1
  212. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +2 -1
  213. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +2 -1
  214. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +2 -1
  215. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +2 -1
  216. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +2 -1
  217. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +2 -1
  218. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +2 -1
  219. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +2 -1
  220. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +2 -1
  221. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +2 -1
  222. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +2 -1
  223. package/packages/omo-codex/plugin/package-lock.json +13 -13
  224. package/packages/omo-codex/plugin/package.json +1 -1
  225. package/packages/omo-codex/plugin/scripts/auto-update.mjs +9 -5
  226. package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +1 -0
  227. package/packages/omo-codex/plugin/scripts/migrate-codex-config/context7-placeholder-guard.mjs +131 -0
  228. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-mode-guard.mjs +60 -0
  229. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +3 -10
  230. package/packages/omo-codex/plugin/scripts/migrate-codex-config/root-settings.mjs +31 -1
  231. package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +73 -0
  232. package/packages/omo-codex/plugin/scripts/migrate-codex-config.mjs +20 -3
  233. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +30 -8
  234. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +128 -0
  235. package/packages/omo-codex/plugin/skills/coding-agent-sessions/agents/openai.yaml +4 -0
  236. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +71 -0
  237. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/claude.md +32 -0
  238. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/codex.md +30 -0
  239. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/opencode.md +43 -0
  240. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +17 -0
  241. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/__init__.py +1 -0
  242. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/claude.py +66 -0
  243. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +283 -0
  244. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/codex.py +105 -0
  245. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +275 -0
  246. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/jsonio.py +55 -0
  247. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/kiro_scanner.py +91 -0
  248. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/opencode.py +289 -0
  249. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +92 -0
  250. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_optional_scanners.py +203 -0
  251. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_scanners.py +177 -0
  252. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/timeparse.py +51 -0
  253. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +149 -0
  254. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/types.py +57 -0
  255. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/find-agent-sessions.py +19 -0
  256. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +52 -8
  257. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +29 -8
  258. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +29 -12
  259. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +3 -3
  260. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +22 -19
  261. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/EVIDENCE.md +89 -0
  262. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +48 -0
  263. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/UPSTREAM.md +80 -0
  264. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +64 -0
  265. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +65 -0
  266. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-c-review.md +65 -0
  267. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +83 -0
  268. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +80 -0
  269. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +79 -0
  270. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/LICENSE +21 -0
  271. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
  272. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/content-writer.md +132 -0
  273. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-builder.md +109 -0
  274. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-critic.md +89 -0
  275. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-lead.md +113 -0
  276. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-scout.md +78 -0
  277. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-strategist.md +121 -0
  278. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
  279. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
  280. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/motion-designer.md +120 -0
  281. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/accessible-content/SKILL.md +101 -0
  282. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/adaptive-interfaces/SKILL.md +109 -0
  283. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/cognitive-accessibility/SKILL.md +107 -0
  284. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-debate/SKILL.md +199 -0
  285. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-debt-tracker/SKILL.md +174 -0
  286. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-handoff/SKILL.md +125 -0
  287. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-md/SKILL.md +106 -0
  288. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-retrospective/SKILL.md +266 -0
  289. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-review/SKILL.md +123 -0
  290. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-system-alignment/SKILL.md +120 -0
  291. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/designpowers-critique/SKILL.md +164 -0
  292. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/heuristic-evaluation/SKILL.md +85 -0
  293. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/inclusive-personas/SKILL.md +98 -0
  294. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/inspiration-scouting/SKILL.md +165 -0
  295. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/interaction-design/SKILL.md +122 -0
  296. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/motion-choreography/SKILL.md +81 -0
  297. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/research-planning/SKILL.md +96 -0
  298. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/responsive-patterns/SKILL.md +77 -0
  299. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/synthetic-user-testing/SKILL.md +192 -0
  300. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/taste-feedback/SKILL.md +165 -0
  301. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/taste-report/SKILL.md +78 -0
  302. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/token-architecture/SKILL.md +75 -0
  303. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/ui-composition/SKILL.md +117 -0
  304. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/usability-testing/SKILL.md +78 -0
  305. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/verification-before-shipping/SKILL.md +125 -0
  306. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/voice-and-tone/SKILL.md +79 -0
  307. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/writing-design-plans/SKILL.md +119 -0
  308. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/core.py +0 -0
  309. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +4 -0
  310. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +4 -0
  311. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +4 -0
  312. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +4 -0
  313. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +12 -4
  314. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +14 -8
  315. package/packages/omo-codex/plugin/skills/teammode/SKILL.md +40 -2
  316. package/packages/omo-codex/plugin/skills/teammode/scripts/team-guide.mjs +32 -5
  317. package/packages/omo-codex/plugin/skills/teammode/scripts/team.mjs +7 -3
  318. package/packages/omo-codex/plugin/skills/ultraresearch/SKILL.md +4 -250
  319. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +19 -11
  320. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +6 -4
  321. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +11 -6
  322. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +3 -3
  323. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +1 -1
  324. package/packages/{shared-skills/skills/ultraresearch → omo-codex/plugin/skills/ulw-research}/ATTRIBUTION.md +1 -1
  325. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +262 -0
  326. package/packages/omo-codex/plugin/skills/ulw-research/agents/openai.yaml +2 -0
  327. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +109 -14
  328. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +23 -0
  329. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -0
  330. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +1 -0
  331. package/packages/omo-codex/plugin/test/auto-update-restart-notice.test.mjs +24 -1
  332. package/packages/omo-codex/plugin/test/bootstrap-binlinks.test.mjs +23 -5
  333. package/packages/omo-codex/plugin/test/bootstrap-hooks.test.mjs +38 -0
  334. package/packages/omo-codex/plugin/test/bootstrap-ps-guard.test.mjs +25 -0
  335. package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +1 -7
  336. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +206 -6
  337. package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +44 -0
  338. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +50 -1
  339. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +10 -7
  340. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +28 -2
  341. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +20 -0
  342. package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +117 -0
  343. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +5 -2
  344. package/packages/omo-codex/plugin/test/ulw-research-skill-contract.test.mjs +285 -0
  345. package/packages/omo-codex/scripts/install-bin-links.test.mjs +6 -1
  346. package/packages/omo-codex/scripts/install-cache-copy.test.mjs +51 -0
  347. package/packages/omo-codex/scripts/install-config.test.mjs +198 -17
  348. package/packages/omo-codex/scripts/install-dist/install-local.mjs +701 -282
  349. package/packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs +24 -15
  350. package/packages/omo-codex/scripts/install-local.test.mjs +5 -1
  351. package/packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs +84 -0
  352. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +128 -0
  353. package/packages/shared-skills/skills/coding-agent-sessions/agents/openai.yaml +4 -0
  354. package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +71 -0
  355. package/packages/shared-skills/skills/coding-agent-sessions/references/claude.md +32 -0
  356. package/packages/shared-skills/skills/coding-agent-sessions/references/codex.md +30 -0
  357. package/packages/shared-skills/skills/coding-agent-sessions/references/opencode.md +43 -0
  358. package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +17 -0
  359. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/__init__.py +1 -0
  360. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/claude.py +66 -0
  361. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +283 -0
  362. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/codex.py +105 -0
  363. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +275 -0
  364. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/jsonio.py +55 -0
  365. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/kiro_scanner.py +91 -0
  366. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/opencode.py +289 -0
  367. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +92 -0
  368. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_optional_scanners.py +203 -0
  369. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_scanners.py +177 -0
  370. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/timeparse.py +51 -0
  371. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +149 -0
  372. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/types.py +57 -0
  373. package/packages/shared-skills/skills/coding-agent-sessions/scripts/find-agent-sessions.py +19 -0
  374. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +52 -8
  375. package/packages/shared-skills/skills/frontend/SKILL.md +29 -8
  376. package/packages/shared-skills/skills/frontend/references/design/README.md +29 -12
  377. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +3 -3
  378. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +22 -19
  379. package/packages/shared-skills/skills/frontend/references/designpowers/EVIDENCE.md +89 -0
  380. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +48 -0
  381. package/packages/shared-skills/skills/frontend/references/designpowers/UPSTREAM.md +80 -0
  382. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +64 -0
  383. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +65 -0
  384. package/packages/shared-skills/skills/frontend/references/designpowers/lane-c-review.md +65 -0
  385. package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +83 -0
  386. package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +80 -0
  387. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +79 -0
  388. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/LICENSE +21 -0
  389. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
  390. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/content-writer.md +132 -0
  391. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-builder.md +109 -0
  392. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-critic.md +89 -0
  393. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-lead.md +113 -0
  394. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-scout.md +78 -0
  395. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-strategist.md +121 -0
  396. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
  397. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
  398. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/motion-designer.md +120 -0
  399. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/accessible-content/SKILL.md +101 -0
  400. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/adaptive-interfaces/SKILL.md +109 -0
  401. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/cognitive-accessibility/SKILL.md +107 -0
  402. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-debate/SKILL.md +199 -0
  403. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-debt-tracker/SKILL.md +174 -0
  404. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-handoff/SKILL.md +125 -0
  405. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-md/SKILL.md +106 -0
  406. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-retrospective/SKILL.md +266 -0
  407. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-review/SKILL.md +123 -0
  408. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-system-alignment/SKILL.md +120 -0
  409. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/designpowers-critique/SKILL.md +164 -0
  410. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/heuristic-evaluation/SKILL.md +85 -0
  411. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/inclusive-personas/SKILL.md +98 -0
  412. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/inspiration-scouting/SKILL.md +165 -0
  413. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/interaction-design/SKILL.md +122 -0
  414. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/motion-choreography/SKILL.md +81 -0
  415. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/research-planning/SKILL.md +96 -0
  416. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/responsive-patterns/SKILL.md +77 -0
  417. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/synthetic-user-testing/SKILL.md +192 -0
  418. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/taste-feedback/SKILL.md +165 -0
  419. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/taste-report/SKILL.md +78 -0
  420. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/token-architecture/SKILL.md +75 -0
  421. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/ui-composition/SKILL.md +117 -0
  422. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/usability-testing/SKILL.md +78 -0
  423. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/verification-before-shipping/SKILL.md +125 -0
  424. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/voice-and-tone/SKILL.md +79 -0
  425. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/writing-design-plans/SKILL.md +119 -0
  426. package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/core.py +0 -0
  427. package/packages/shared-skills/skills/git-master/SKILL.md +4 -0
  428. package/packages/shared-skills/skills/review-work/SKILL.md +3 -3
  429. package/packages/shared-skills/skills/start-work/SKILL.md +7 -5
  430. package/packages/shared-skills/skills/ultraresearch/SKILL.md +4 -252
  431. package/packages/shared-skills/skills/ulw-plan/SKILL.md +8 -6
  432. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +11 -6
  433. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +3 -3
  434. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +1 -1
  435. package/packages/{omo-codex/plugin/skills/ultraresearch → shared-skills/skills/ulw-research}/ATTRIBUTION.md +1 -1
  436. package/packages/shared-skills/skills/ulw-research/SKILL.md +260 -0
  437. package/packages/shared-skills/skills/visual-qa/SKILL.md +105 -14
  438. package/packages/shared-skills/skills/visual-qa/scripts/skill-prompt-contract.test.ts +120 -1
  439. package/script/qa/web-terminal-redaction.d.mts +13 -0
  440. package/script/qa/web-terminal-redaction.mjs +43 -0
  441. package/script/qa/web-terminal-renderer.mjs +218 -0
  442. package/script/qa/web-terminal-visual-qa.mjs +264 -0
  443. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_cookie_domain_filter.py +0 -110
  444. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_extract_cookies.py +0 -245
  445. package/packages/omo-codex/plugin/test/ultraresearch-skill-contract.test.mjs +0 -204
@@ -861,10 +861,8 @@ async function defaultVersionProbe2(binaryPath) {
861
861
  }
862
862
 
863
863
  // components/bootstrap/src/setup.ts
864
- import { execFile as execFile2 } from "node:child_process";
865
864
  import { copyFile as copyFile2, mkdir as mkdir7, readdir as readdir3, rm as rm9, stat as stat4 } from "node:fs/promises";
866
865
  import { join as join18 } from "node:path";
867
- import { promisify as promisify2 } from "node:util";
868
866
 
869
867
  // ../src/install/link-cached-plugin-agents.ts
870
868
  import { copyFile, lstat as lstat2, mkdir as mkdir4, readFile as readFile5, readdir, rm as rm6, writeFile as writeFile3 } from "node:fs/promises";
@@ -1174,6 +1172,44 @@ import { basename as basename4, isAbsolute as isAbsolute2, join as join12, relat
1174
1172
 
1175
1173
  // ../src/install/codex-cache-command-shim.ts
1176
1174
  var COMMAND_SHIM_MARKER = ":: generated by oh-my-openagent Codex installer";
1175
+ function windowsNodeDiscoveryLines() {
1176
+ return [
1177
+ "setlocal EnableExtensions EnableDelayedExpansion",
1178
+ 'set "OMO_NODE_BINARY="',
1179
+ 'set "OMO_NODE_REPL_NODE_PATH=%NODE_REPL_NODE_PATH%"',
1180
+ 'if exist "%CODEX_HOME%\\config.toml" (',
1181
+ ` for /f "tokens=1,* delims==" %%A in ('findstr /R /C:"NODE_REPL_NODE_PATH[ ]*=" "%CODEX_HOME%\\config.toml" 2^>nul') do (`,
1182
+ ' set "OMO_NODE_REPL_NODE_PATH=%%B"',
1183
+ " )",
1184
+ ")",
1185
+ "if defined OMO_NODE_REPL_NODE_PATH (",
1186
+ ' set "OMO_NODE_BINARY=!OMO_NODE_REPL_NODE_PATH!"',
1187
+ ' for /f "tokens=* delims= " %%N in ("!OMO_NODE_BINARY!") do set "OMO_NODE_BINARY=%%N"',
1188
+ ` if "!OMO_NODE_BINARY:~0,1!"=="'" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~1!"`,
1189
+ ` if "!OMO_NODE_BINARY:~-1!"=="'" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~0,-1!"`,
1190
+ ' if "!OMO_NODE_BINARY:~0,1!"=="^"" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~1!"',
1191
+ ' if "!OMO_NODE_BINARY:~-1!"=="^"" set "OMO_NODE_BINARY=!OMO_NODE_BINARY:~0,-1!"',
1192
+ ' if defined OMO_NODE_BINARY if not exist "!OMO_NODE_BINARY!" set "OMO_NODE_BINARY="',
1193
+ ")",
1194
+ 'if not defined OMO_NODE_BINARY where node >nul 2>nul && set "OMO_NODE_BINARY=node"'
1195
+ ];
1196
+ }
1197
+ function windowsCommandShim(targetPath) {
1198
+ return [
1199
+ "@echo off",
1200
+ COMMAND_SHIM_MARKER,
1201
+ 'if not defined CODEX_HOME set "CODEX_HOME=%USERPROFILE%\\.codex"',
1202
+ ...windowsNodeDiscoveryLines(),
1203
+ "if not defined OMO_NODE_BINARY (",
1204
+ " echo omo: no Node runtime was discovered from NODE_REPL_NODE_PATH or PATH; rerun LazyCodex install from Codex Desktop 1>&2",
1205
+ " exit /b 127",
1206
+ ")",
1207
+ `"%OMO_NODE_BINARY%" "${targetPath}" %*`,
1208
+ "exit /b %ERRORLEVEL%",
1209
+ ""
1210
+ ].join(`\r
1211
+ `);
1212
+ }
1177
1213
 
1178
1214
  // ../src/install/codex-cache-fs.ts
1179
1215
  import { lstat as lstat3 } from "node:fs/promises";
@@ -1314,23 +1350,24 @@ function windowsRuntimeWrapper(cliPath, codexHome, binDir, nodeCliPath) {
1314
1350
  `rem ${RUNTIME_WRAPPER_MARKER}`,
1315
1351
  `if not defined CODEX_HOME set "CODEX_HOME=${codexHome}"`,
1316
1352
  'if not defined OMO_SPARKSHELL_APP_SERVER_SOCKET set "OMO_SPARKSHELL_APP_SERVER_SOCKET=%CODEX_HOME%\\app-server-control\\app-server-control.sock"',
1353
+ ...windowsNodeDiscoveryLines(),
1317
1354
  `if "%~1"=="ulw-loop" if exist "${ulwLoopBin}" (`,
1318
1355
  " shift /1",
1319
1356
  ` "${ulwLoopBin}" %*`,
1320
1357
  " exit /b %ERRORLEVEL%",
1321
1358
  ")",
1322
- `if "%OMO_RUNTIME%"=="node" if exist "${nodeCliPath}" (`,
1323
- ` node "${nodeCliPath}" %*`,
1359
+ `if "%OMO_RUNTIME%"=="node" if defined OMO_NODE_BINARY if exist "${nodeCliPath}" (`,
1360
+ ` "%OMO_NODE_BINARY%" "${nodeCliPath}" %*`,
1324
1361
  " exit /b %ERRORLEVEL%",
1325
1362
  ")",
1326
1363
  'if not defined BUN_BINARY where bun >nul 2>nul && set "BUN_BINARY=bun"',
1327
1364
  'if not defined BUN_BINARY if exist "%USERPROFILE%\\.bun\\bin\\bun.exe" set "BUN_BINARY=%USERPROFILE%\\.bun\\bin\\bun.exe"',
1328
1365
  "if not defined BUN_BINARY (",
1329
- ` if exist "${nodeCliPath}" (`,
1330
- ` node "${nodeCliPath}" %*`,
1366
+ ` if defined OMO_NODE_BINARY if exist "${nodeCliPath}" (`,
1367
+ ` "%OMO_NODE_BINARY%" "${nodeCliPath}" %*`,
1331
1368
  " exit /b %ERRORLEVEL%",
1332
1369
  " )",
1333
- ` echo omo: bun runtime not found and the node fallback CLI is missing at ${nodeCliPath}; install bun from https://bun.sh or reinstall omo and force OMO_RUNTIME=node 1>&2`,
1370
+ ` 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`,
1334
1371
  " exit /b 127",
1335
1372
  ")",
1336
1373
  `if not exist "${cliPath}" (`,
@@ -1473,10 +1510,7 @@ async function replaceSymlink(linkPath, targetPath) {
1473
1510
  async function replaceCommandShim(linkPath, targetPath) {
1474
1511
  if (await existingNonShim(linkPath))
1475
1512
  throw new Error(`${linkPath} already exists and is not a command shim`);
1476
- await writeFile4(linkPath, `@echo off\r
1477
- ${COMMAND_SHIM_MARKER}\r
1478
- node "${targetPath}" %*\r
1479
- `);
1513
+ await writeFile4(linkPath, windowsCommandShim(targetPath));
1480
1514
  }
1481
1515
  async function replaceRuntimeWrapper(linkPath, content) {
1482
1516
  if (await existingNonRuntimeWrapper(linkPath))
@@ -1546,7 +1580,7 @@ function findTomlSection(config, header) {
1546
1580
  if (start === -1) {
1547
1581
  if (tomlTableHeaderMatches(trimmed, headerLine, targetHeaderPath))
1548
1582
  start = offset;
1549
- } else if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
1583
+ } else if (isTomlTableHeaderLine(line)) {
1550
1584
  return { start, end: offset, text: config.slice(start, offset) };
1551
1585
  }
1552
1586
  offset += line.length;
@@ -1556,12 +1590,12 @@ function findTomlSection(config, header) {
1556
1590
  return { start, end: config.length, text: config.slice(start) };
1557
1591
  }
1558
1592
  function replaceOrInsertSetting(config, section, key, value) {
1559
- const linePattern = new RegExp(`^${escapeRegExp(key)}\\s*=.*$`, "m");
1593
+ const linePattern = new RegExp(`^[ \\t]*${escapeRegExp(key)}[ \\t]*=.*$`, "m");
1560
1594
  const replacement = linePattern.test(section.text) ? section.text.replace(linePattern, `${key} = ${value}`) : insertSetting(section.text, key, value);
1561
1595
  return config.slice(0, section.start) + replacement + config.slice(section.end);
1562
1596
  }
1563
1597
  function removeSetting(config, section, key) {
1564
- const linePattern = new RegExp(`^\\s*${escapeRegExp(key)}\\s*=.*(?:\\n|$)`, "m");
1598
+ const linePattern = new RegExp(`^[ \\t]*${escapeRegExp(key)}[ \\t]*=.*(?:\\n|$)`, "m");
1565
1599
  const replacement = section.text.replace(linePattern, "");
1566
1600
  return config.slice(0, section.start) + replacement + config.slice(section.end);
1567
1601
  }
@@ -1569,7 +1603,7 @@ function replaceOrInsertRootSetting(config, key, value) {
1569
1603
  const sectionStart = findFirstTableStart(config);
1570
1604
  const root = config.slice(0, sectionStart);
1571
1605
  const suffix = config.slice(sectionStart);
1572
- const linePattern = new RegExp(`^${escapeRegExp(key)}\\s*=.*$`, "m");
1606
+ const linePattern = new RegExp(`^[ \\t]*${escapeRegExp(key)}[ \\t]*=.*$`, "m");
1573
1607
  const replacement = linePattern.test(root) ? root.replace(linePattern, `${key} = ${value}`) : `${root.trimEnd()}${root.trimEnd().length > 0 ? `
1574
1608
  ` : ""}${key} = ${value}
1575
1609
  `;
@@ -1587,8 +1621,16 @@ function appendBlock(config, block) {
1587
1621
  `;
1588
1622
  }
1589
1623
  function findFirstTableStart(config) {
1590
- const match = config.match(/^[[].*$/m);
1591
- return match?.index ?? config.length;
1624
+ const lines = config.match(/[^\n]*\n?|$/g) ?? [];
1625
+ let offset = 0;
1626
+ for (const line of lines) {
1627
+ if (line.length === 0)
1628
+ break;
1629
+ if (isTomlTableHeaderLine(line))
1630
+ return offset;
1631
+ offset += line.length;
1632
+ }
1633
+ return config.length;
1592
1634
  }
1593
1635
  function insertSetting(sectionText, key, value) {
1594
1636
  const lines = sectionText.split(`
@@ -1601,19 +1643,57 @@ function escapeRegExp(value) {
1601
1643
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1602
1644
  }
1603
1645
  function tomlTableHeaderMatches(line, headerLine, targetHeaderPath) {
1604
- if (line === headerLine)
1646
+ const normalizedLine = stripUnquotedInlineComment(line).trim();
1647
+ if (normalizedLine === headerLine)
1605
1648
  return true;
1606
1649
  if (!targetHeaderPath)
1607
1650
  return false;
1608
- const candidateHeaderPath = parseTomlTableHeader(line);
1651
+ const candidateHeaderPath = parseTomlTableHeader(normalizedLine);
1609
1652
  if (!candidateHeaderPath || candidateHeaderPath.length !== targetHeaderPath.length)
1610
1653
  return false;
1611
1654
  return candidateHeaderPath.every((part, index) => part === targetHeaderPath[index]);
1612
1655
  }
1613
1656
  function parseTomlTableHeader(line) {
1614
- if (!line.startsWith("[") || !line.endsWith("]") || line.startsWith("[["))
1657
+ const normalizedLine = stripUnquotedInlineComment(line).trim();
1658
+ if (!normalizedLine.startsWith("[") || !normalizedLine.endsWith("]") || normalizedLine.startsWith("[["))
1615
1659
  return null;
1616
- return parseTomlDottedKey(line.slice(1, -1).trim());
1660
+ return parseTomlDottedKey(normalizedLine.slice(1, -1).trim());
1661
+ }
1662
+ function isTomlTableHeaderLine(line) {
1663
+ const normalizedLine = stripUnquotedInlineComment(line).trim();
1664
+ return normalizedLine.startsWith("[") && normalizedLine.endsWith("]");
1665
+ }
1666
+ function stripUnquotedInlineComment(line) {
1667
+ let quote = null;
1668
+ let index = 0;
1669
+ while (index < line.length) {
1670
+ const char = line[index];
1671
+ if (quote === '"') {
1672
+ if (char === "\\") {
1673
+ index += 2;
1674
+ continue;
1675
+ }
1676
+ if (char === '"')
1677
+ quote = null;
1678
+ index += 1;
1679
+ continue;
1680
+ }
1681
+ if (quote === "'") {
1682
+ if (char === "'")
1683
+ quote = null;
1684
+ index += 1;
1685
+ continue;
1686
+ }
1687
+ if (char === '"' || char === "'") {
1688
+ quote = char;
1689
+ index += 1;
1690
+ continue;
1691
+ }
1692
+ if (char === "#")
1693
+ return line.slice(0, index);
1694
+ index += 1;
1695
+ }
1696
+ return line;
1617
1697
  }
1618
1698
  function parseTomlDottedKey(input) {
1619
1699
  const parts = [];
@@ -1724,7 +1804,7 @@ function skipWhitespace(input, startIndex) {
1724
1804
 
1725
1805
  // ../src/install/codex-config-toml-sections.ts
1726
1806
  function removeTomlSections(config, shouldRemove) {
1727
- return splitTomlSections(config).filter((section) => section.header === null || !shouldRemove(section.header)).map((section) => section.text).join("").replace(/\n{3,}/g, `
1807
+ return splitTomlSections(config).filter((section) => section.header === null || !shouldRemove(section.header, section)).map((section) => section.text).join("").replace(/\n{3,}/g, `
1728
1808
 
1729
1809
  `);
1730
1810
  }
@@ -1763,11 +1843,43 @@ function parseHookStateHeaderKey(header) {
1763
1843
  return path[2] ?? null;
1764
1844
  }
1765
1845
  function parseTomlHeader2(line) {
1766
- const trimmed = line.trim();
1846
+ const trimmed = stripTomlLineComment(line).trim();
1767
1847
  if (!trimmed.startsWith("[") || !trimmed.endsWith("]") || trimmed.startsWith("[["))
1768
1848
  return null;
1769
1849
  return trimmed.slice(1, -1);
1770
1850
  }
1851
+ function stripTomlLineComment(line) {
1852
+ let quote = null;
1853
+ let index = 0;
1854
+ while (index < line.length) {
1855
+ const char = line[index];
1856
+ if (quote === '"') {
1857
+ if (char === "\\") {
1858
+ index += 2;
1859
+ continue;
1860
+ }
1861
+ if (char === '"')
1862
+ quote = null;
1863
+ index += 1;
1864
+ continue;
1865
+ }
1866
+ if (quote === "'") {
1867
+ if (char === "'")
1868
+ quote = null;
1869
+ index += 1;
1870
+ continue;
1871
+ }
1872
+ if (char === '"' || char === "'") {
1873
+ quote = char;
1874
+ index += 1;
1875
+ continue;
1876
+ }
1877
+ if (char === "#")
1878
+ return line.slice(0, index);
1879
+ index += 1;
1880
+ }
1881
+ return line;
1882
+ }
1771
1883
 
1772
1884
  // ../src/install/codex-config-agents.ts
1773
1885
  var LEGACY_MANAGED_CODEX_AGENT_NAMES_TO_PURGE = ["codex-ultrawork-reviewer"];
@@ -1991,7 +2103,8 @@ function ensureOmoBuiltinMcpPolicies(config, input) {
1991
2103
  return config;
1992
2104
  const codegraphEnabled = input.codegraphMcpEnabled ?? true;
1993
2105
  const gitBashEnabled = (input.platform ?? process.platform) === "win32" && input.gitBashEnabled === true;
1994
- let nextConfig = ensurePluginMcpEnabled(config, "omo@sisyphuslabs", "context7", true);
2106
+ let nextConfig = removeStaleContext7PlaceholderMcp(config);
2107
+ nextConfig = ensurePluginMcpEnabled(nextConfig, "omo@sisyphuslabs", "context7", true);
1995
2108
  nextConfig = ensurePluginMcpEnabled(nextConfig, "omo@sisyphuslabs", "codegraph", codegraphEnabled);
1996
2109
  nextConfig = ensurePluginMcpEnabled(nextConfig, "omo@sisyphuslabs", "git_bash", gitBashEnabled);
1997
2110
  return nextConfig;
@@ -2015,6 +2128,107 @@ enabled = ${enabledValue}
2015
2128
  `);
2016
2129
  return replaceOrInsertSetting(config, section, "enabled", enabledValue);
2017
2130
  }
2131
+ function removeStaleContext7PlaceholderMcp(config) {
2132
+ return removeTomlSections(config, (header, section) => header === "mcp_servers.context7" && isContext7PlaceholderSection(section.text));
2133
+ }
2134
+ function isContext7PlaceholderSection(sectionText) {
2135
+ const args = readStringArraySetting(sectionText, "args");
2136
+ if (args === null || !args.includes("@upstash/context7-mcp"))
2137
+ return false;
2138
+ const apiKey = valueAfter(args, "--api-key");
2139
+ return apiKey !== null && isPlaceholderApiKey(apiKey);
2140
+ }
2141
+ function valueAfter(values, key) {
2142
+ const index = values.indexOf(key);
2143
+ return index >= 0 ? values[index + 1] ?? null : null;
2144
+ }
2145
+ function isPlaceholderApiKey(value) {
2146
+ return /^your[-_ ]?api[-_ ]?key$/i.test(value);
2147
+ }
2148
+ function readStringArraySetting(sectionText, key) {
2149
+ for (const line of sectionText.split(`
2150
+ `)) {
2151
+ if (!new RegExp(`^\\s*${key}\\s*=`).test(line))
2152
+ continue;
2153
+ const assignmentIndex = line.indexOf("=");
2154
+ if (assignmentIndex === -1)
2155
+ return null;
2156
+ return parseTomlStringArray(stripUnquotedInlineComment2(line.slice(assignmentIndex + 1)).trim());
2157
+ }
2158
+ return null;
2159
+ }
2160
+ function parseTomlStringArray(value) {
2161
+ if (!value.startsWith("[") || !value.endsWith("]"))
2162
+ return null;
2163
+ const items = [];
2164
+ let index = 1;
2165
+ while (index < value.length - 1) {
2166
+ const char = value[index];
2167
+ if (char === '"' || char === "'") {
2168
+ const parsed = parseTomlString(value, index);
2169
+ if (parsed === null)
2170
+ return null;
2171
+ items.push(parsed.value);
2172
+ index = parsed.nextIndex;
2173
+ continue;
2174
+ }
2175
+ index += 1;
2176
+ }
2177
+ return items;
2178
+ }
2179
+ function parseTomlString(input, startIndex) {
2180
+ const quote = input[startIndex];
2181
+ let value = "";
2182
+ let index = startIndex + 1;
2183
+ while (index < input.length) {
2184
+ const char = input[index];
2185
+ if (quote === '"' && char === "\\") {
2186
+ const next = input[index + 1];
2187
+ if (next === undefined)
2188
+ return null;
2189
+ value += next;
2190
+ index += 2;
2191
+ continue;
2192
+ }
2193
+ if (char === quote)
2194
+ return { value, nextIndex: index + 1 };
2195
+ value += char;
2196
+ index += 1;
2197
+ }
2198
+ return null;
2199
+ }
2200
+ function stripUnquotedInlineComment2(line) {
2201
+ let quote = null;
2202
+ let index = 0;
2203
+ while (index < line.length) {
2204
+ const char = line[index];
2205
+ if (quote === '"') {
2206
+ if (char === "\\") {
2207
+ index += 2;
2208
+ continue;
2209
+ }
2210
+ if (char === '"')
2211
+ quote = null;
2212
+ index += 1;
2213
+ continue;
2214
+ }
2215
+ if (quote === "'") {
2216
+ if (char === "'")
2217
+ quote = null;
2218
+ index += 1;
2219
+ continue;
2220
+ }
2221
+ if (char === '"' || char === "'") {
2222
+ quote = char;
2223
+ index += 1;
2224
+ continue;
2225
+ }
2226
+ if (char === "#")
2227
+ return line.slice(0, index);
2228
+ index += 1;
2229
+ }
2230
+ return line;
2231
+ }
2018
2232
 
2019
2233
  // ../src/install/codex-config-reasoning.ts
2020
2234
  var MANAGED_KEYS = ["model", "model_context_window", "model_reasoning_effort", "plan_mode_reasoning_effort"];
@@ -2155,31 +2369,87 @@ function parseProfileMatch(match) {
2155
2369
  return profile;
2156
2370
  }
2157
2371
 
2372
+ // ../src/install/codex-multi-agent-mode-config.ts
2373
+ var CODEX_MULTI_AGENT_MODE_KEY = "multi_agent_mode";
2374
+ function removeUnsupportedCodexMultiAgentModeConfig(config) {
2375
+ const lines = config.split(/\n/);
2376
+ const output = [];
2377
+ let inRoot = true;
2378
+ let changed = false;
2379
+ for (const line of lines) {
2380
+ const sectionHeader = isSectionHeader3(line);
2381
+ if (inRoot && isRootSetting2(line, CODEX_MULTI_AGENT_MODE_KEY)) {
2382
+ changed = true;
2383
+ continue;
2384
+ }
2385
+ output.push(line);
2386
+ if (sectionHeader)
2387
+ inRoot = false;
2388
+ }
2389
+ return changed ? output.join(`
2390
+ `) : config;
2391
+ }
2392
+ function isSectionHeader3(line) {
2393
+ return isTomlTableHeaderLine(line);
2394
+ }
2395
+ function isRootSetting2(line, key) {
2396
+ const trimmed = line.trimStart();
2397
+ if (trimmed.startsWith("#") || trimmed.startsWith("["))
2398
+ return false;
2399
+ const match = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)\s*=/);
2400
+ return match?.[1] === key;
2401
+ }
2402
+
2158
2403
  // ../src/install/codex-multi-agent-v2-config.ts
2404
+ var CODEX_AGENTS_HEADER = "agents";
2159
2405
  var CODEX_MULTI_AGENT_V2_HEADER = "features.multi_agent_v2";
2160
- var CODEX_MULTI_AGENT_V2_MAX_CONCURRENT_THREADS_PER_SESSION = 1e4;
2406
+ var CODEX_SUBAGENT_THREAD_LIMIT = 1000;
2161
2407
  function ensureCodexMultiAgentV2Config(config) {
2162
- const normalizedConfig = removeLegacyAgentsMaxThreadsSetting(removeFeatureFlagSetting(config, "multi_agent_v2"));
2163
- const section = findTomlSection(normalizedConfig, CODEX_MULTI_AGENT_V2_HEADER);
2164
- const maxThreadsValue = CODEX_MULTI_AGENT_V2_MAX_CONCURRENT_THREADS_PER_SESSION.toString();
2408
+ const featureFlag = removeFeatureFlagSetting(config, "multi_agent_v2");
2409
+ const agentsConfig = ensureAgentsMaxThreads(featureFlag.config);
2410
+ const section = findTomlSection(agentsConfig, CODEX_MULTI_AGENT_V2_HEADER);
2411
+ const maxThreadsValue = CODEX_SUBAGENT_THREAD_LIMIT.toString();
2165
2412
  if (!section) {
2166
- return appendBlock(normalizedConfig, `[${CODEX_MULTI_AGENT_V2_HEADER}]
2413
+ const enabledSetting = featureFlag.value === false ? `enabled = false
2414
+ ` : "";
2415
+ return appendBlock(agentsConfig, `[${CODEX_MULTI_AGENT_V2_HEADER}]
2416
+ ${enabledSetting}max_concurrent_threads_per_session = ${maxThreadsValue}
2417
+ `);
2418
+ }
2419
+ const withPreservedDisable = featureFlag.value === false ? replaceOrInsertSetting(agentsConfig, section, "enabled", "false") : agentsConfig;
2420
+ const updatedSection = featureFlag.value === false ? findTomlSection(withPreservedDisable, CODEX_MULTI_AGENT_V2_HEADER) : section;
2421
+ if (!updatedSection) {
2422
+ return appendBlock(withPreservedDisable, `[${CODEX_MULTI_AGENT_V2_HEADER}]
2423
+ enabled = false
2167
2424
  max_concurrent_threads_per_session = ${maxThreadsValue}
2168
2425
  `);
2169
2426
  }
2170
- return replaceOrInsertSetting(normalizedConfig, section, "max_concurrent_threads_per_session", maxThreadsValue);
2427
+ return replaceOrInsertSetting(withPreservedDisable, updatedSection, "max_concurrent_threads_per_session", maxThreadsValue);
2171
2428
  }
2172
2429
  function removeFeatureFlagSetting(config, featureName) {
2173
2430
  const section = findTomlSection(config, "features");
2174
2431
  if (!section)
2175
- return config;
2176
- return removeSetting(config, section, featureName);
2432
+ return { config, value: null };
2433
+ return {
2434
+ config: removeSetting(config, section, featureName),
2435
+ value: readBooleanSetting(section.text, featureName)
2436
+ };
2177
2437
  }
2178
- function removeLegacyAgentsMaxThreadsSetting(config) {
2179
- const section = findTomlSection(config, "agents");
2180
- if (!section)
2181
- return config;
2182
- return removeSetting(config, section, "max_threads");
2438
+ function ensureAgentsMaxThreads(config) {
2439
+ const maxThreadsValue = CODEX_SUBAGENT_THREAD_LIMIT.toString();
2440
+ const section = findTomlSection(config, CODEX_AGENTS_HEADER);
2441
+ if (!section) {
2442
+ return appendBlock(config, `[${CODEX_AGENTS_HEADER}]
2443
+ max_threads = ${maxThreadsValue}
2444
+ `);
2445
+ }
2446
+ return replaceOrInsertSetting(config, section, "max_threads", maxThreadsValue);
2447
+ }
2448
+ function readBooleanSetting(sectionText, key) {
2449
+ const match = new RegExp(`^\\s*${escapeRegExp(key)}\\s*=\\s*(true|false)\\s*(?:#.*)?$`, "m").exec(sectionText);
2450
+ if (!match)
2451
+ return null;
2452
+ return match[1] === "true";
2183
2453
  }
2184
2454
 
2185
2455
  // ../src/install/codex-config-toml.ts
@@ -2201,6 +2471,7 @@ async function updateCodexConfig(input) {
2201
2471
  config = ensureFeatureEnabled(config, "plugin_hooks");
2202
2472
  config = ensureFeatureEnabled(config, "multi_agent");
2203
2473
  config = ensureFeatureEnabled(config, "child_agents_md");
2474
+ config = removeUnsupportedCodexMultiAgentModeConfig(config);
2204
2475
  config = ensureCodexReasoningConfig(config, await readCodexModelCatalog(input.repoRoot));
2205
2476
  config = ensureCodexMultiAgentV2Config(config);
2206
2477
  if (input.autonomousPermissions === true)
@@ -2308,7 +2579,8 @@ async function trustedHookStatesForPlugin(input) {
2308
2579
  continue;
2309
2580
  states.push(...trustedHookStatesForHooksFile({
2310
2581
  keySource: `${input.pluginName}@${input.marketplaceName}:${hookPath}`,
2311
- hooks: parsed.hooks
2582
+ hooks: parsed.hooks,
2583
+ platform: input.platform ?? process.platform
2312
2584
  }));
2313
2585
  }
2314
2586
  return states;
@@ -2336,20 +2608,28 @@ function trustedHookStatesForHooksFile(input) {
2336
2608
  continue;
2337
2609
  if (handler.async === true)
2338
2610
  continue;
2339
- if (typeof handler.command !== "string" || handler.command.trim() === "")
2611
+ const command = commandForPlatform(handler, input.platform);
2612
+ if (command === undefined || command.trim() === "")
2340
2613
  continue;
2341
2614
  const key = `${input.keySource}:${eventLabel}:${groupIndex}:${handlerIndex}`;
2342
- states.push({ key, trustedHash: commandHookHash(eventLabel, group.matcher, handler) });
2615
+ states.push({ key, trustedHash: commandHookHash(eventLabel, group.matcher, handler, command) });
2343
2616
  }
2344
2617
  }
2345
2618
  }
2346
2619
  return states;
2347
2620
  }
2348
- function commandHookHash(eventName, matcher, handler) {
2621
+ function commandForPlatform(handler, platform) {
2622
+ if (typeof handler.command !== "string")
2623
+ return;
2624
+ if (platform === "win32" && typeof handler.commandWindows === "string")
2625
+ return handler.commandWindows;
2626
+ return handler.command;
2627
+ }
2628
+ function commandHookHash(eventName, matcher, handler, command) {
2349
2629
  const timeout = Math.max(Number(handler.timeout ?? 600), 1);
2350
2630
  const normalizedHandler = {
2351
2631
  type: "command",
2352
- command: handler.command,
2632
+ command,
2353
2633
  timeout,
2354
2634
  async: false
2355
2635
  };
@@ -2404,7 +2684,6 @@ function resolveCodexInstallerBinDir(input) {
2404
2684
  import { execFileSync as execFileSync2 } from "node:child_process";
2405
2685
  import { existsSync as existsSync2 } from "node:fs";
2406
2686
  var GIT_BASH_ENV_KEY2 = "OMO_CODEX_GIT_BASH_PATH";
2407
- var WINGET_INSTALL_ARGS = ["install", "--id", "Git.Git", "-e", "--source", "winget"];
2408
2687
  var PROGRAM_FILES_GIT_BASH = "C:\\Program Files\\Git\\bin\\bash.exe";
2409
2688
  var PROGRAM_FILES_X86_GIT_BASH = "C:\\Program Files (x86)\\Git\\bin\\bash.exe";
2410
2689
  var NON_GIT_BASH_LAUNCHER_DIR_SEGMENTS = ["\\windows\\system32\\", "\\microsoft\\windowsapps\\"];
@@ -2484,25 +2763,13 @@ function whereCommand(command) {
2484
2763
  }
2485
2764
  }
2486
2765
  // ../src/install/git-bash.ts
2487
- var SKIP_GIT_BASH_AUTO_INSTALL_ENV_KEY = "OMO_CODEX_SKIP_GIT_BASH_AUTO_INSTALL";
2488
2766
  var resolveGitBashForCurrentProcess2 = (input = {}) => {
2489
2767
  return toCodexResolution(resolveGitBashForCurrentProcess(input));
2490
2768
  };
2491
2769
  async function prepareGitBashForInstall(input) {
2492
2770
  const resolve6 = input.resolveGitBash ?? (() => resolveGitBashForCurrentProcess2({ platform: input.platform, env: input.env }));
2493
2771
  const initialResolution = resolve6();
2494
- if (input.platform !== "win32" || initialResolution.found)
2495
- return initialResolution;
2496
- if (input.env[SKIP_GIT_BASH_AUTO_INSTALL_ENV_KEY] === "1")
2497
- return initialResolution;
2498
- try {
2499
- await input.runCommand("winget", WINGET_INSTALL_ARGS, { cwd: input.cwd });
2500
- } catch (error) {
2501
- if (!(error instanceof Error))
2502
- throw error;
2503
- return initialResolution;
2504
- }
2505
- return resolve6();
2772
+ return initialResolution;
2506
2773
  }
2507
2774
  function toCodexResolution(resolution) {
2508
2775
  if (resolution.found) {
@@ -2543,10 +2810,8 @@ async function resolveGitBashStep(options, degraded) {
2543
2810
  return false;
2544
2811
  try {
2545
2812
  const resolution = await prepareGitBashForInstall({
2546
- cwd: options.pluginRoot,
2547
2813
  env: options.env,
2548
2814
  platform: options.platform,
2549
- runCommand: options.runCommand ?? defaultRunCommand,
2550
2815
  ...options.resolveGitBash === undefined ? {} : { resolveGitBash: options.resolveGitBash }
2551
2816
  });
2552
2817
  if (resolution.found)
@@ -2703,10 +2968,6 @@ async function stampGitBashEnvStep(options, degraded) {
2703
2968
  });
2704
2969
  }
2705
2970
  }
2706
- var execFileAsync2 = promisify2(execFile2);
2707
- async function defaultRunCommand(command, args, options) {
2708
- return execFileAsync2(command, [...args], { cwd: options.cwd });
2709
- }
2710
2971
  async function directoryNames(root) {
2711
2972
  return entryNames(root, (entry) => entry.isDirectory());
2712
2973
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "4.13.0",
3
+ "version": "4.14.0",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,