oh-my-opencode 4.13.0 → 4.14.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 (516) hide show
  1. package/.agents/skills/codex-qa/SKILL.md +15 -0
  2. package/.agents/skills/codex-qa/references/isolation.md +1 -1
  3. package/.agents/skills/codex-qa/references/logging-debug.md +12 -0
  4. package/.agents/skills/opencode-qa/SKILL.md +17 -0
  5. package/.agents/skills/opencode-qa/references/tui-tmux.md +17 -0
  6. package/.agents/skills/work-with-pr/SKILL.md +18 -10
  7. package/.opencode/skills/work-with-pr/SKILL.md +18 -10
  8. package/README.md +3 -3
  9. package/dist/cli/doctor/checks/telemetry.d.ts +2 -0
  10. package/dist/cli/doctor/framework/constants.d.ts +1 -0
  11. package/dist/cli/doctor/framework/doctor-target.d.ts +1 -1
  12. package/dist/cli/doctor/framework/types.d.ts +2 -0
  13. package/dist/cli/index.js +24779 -17857
  14. package/dist/cli-node/index.js +24779 -17857
  15. package/dist/config/schema/oh-my-opencode-config.d.ts +1 -0
  16. package/dist/features/team-mode/test-support/async-test-helpers.d.ts +19 -0
  17. package/dist/hooks/atlas/final-wave-approval-gate.d.ts +1 -0
  18. package/dist/hooks/atlas/subagent-completion-reminder.d.ts +30 -0
  19. package/dist/hooks/atlas/types.d.ts +2 -0
  20. package/dist/hooks/atlas/verification-reminders.d.ts +3 -0
  21. package/dist/hooks/team-session-events/team-idle-wake-hint.d.ts +1 -0
  22. package/dist/index.d.ts +1 -0
  23. package/dist/index.js +43845 -26631
  24. package/dist/mcp/context7.d.ts +9 -8
  25. package/dist/oh-my-opencode.schema.json +4 -0
  26. package/dist/plugin/native-skills.d.ts +9 -0
  27. package/dist/plugin/system-transform.d.ts +1 -1
  28. package/dist/shared/posthog.d.ts +17 -10
  29. package/dist/shared/telemetry-product-identity.d.ts +2 -0
  30. package/dist/skills/coding-agent-sessions/SKILL.md +128 -0
  31. package/dist/skills/coding-agent-sessions/agents/openai.yaml +4 -0
  32. package/dist/skills/coding-agent-sessions/references/all-platforms.md +71 -0
  33. package/dist/skills/coding-agent-sessions/references/claude.md +32 -0
  34. package/dist/skills/coding-agent-sessions/references/codex.md +30 -0
  35. package/dist/skills/coding-agent-sessions/references/opencode.md +43 -0
  36. package/dist/skills/coding-agent-sessions/references/senpi.md +17 -0
  37. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/__init__.py +1 -0
  38. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/claude.py +66 -0
  39. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +283 -0
  40. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/codex.py +105 -0
  41. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +275 -0
  42. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/jsonio.py +55 -0
  43. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/kiro_scanner.py +91 -0
  44. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/opencode.py +289 -0
  45. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +92 -0
  46. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_optional_scanners.py +203 -0
  47. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_scanners.py +177 -0
  48. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/timeparse.py +51 -0
  49. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +149 -0
  50. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/types.py +57 -0
  51. package/dist/skills/coding-agent-sessions/scripts/find-agent-sessions.py +19 -0
  52. package/dist/skills/frontend/ATTRIBUTION.md +52 -8
  53. package/dist/skills/frontend/SKILL.md +29 -8
  54. package/dist/skills/frontend/references/design/README.md +29 -12
  55. package/dist/skills/frontend/references/design/_INDEX.md +3 -3
  56. package/dist/skills/frontend/references/design/design-system-architecture.md +22 -19
  57. package/dist/skills/frontend/references/designpowers/EVIDENCE.md +89 -0
  58. package/dist/skills/frontend/references/designpowers/README.md +48 -0
  59. package/dist/skills/frontend/references/designpowers/UPSTREAM.md +80 -0
  60. package/dist/skills/frontend/references/designpowers/lane-a-direction.md +64 -0
  61. package/dist/skills/frontend/references/designpowers/lane-b-execution.md +65 -0
  62. package/dist/skills/frontend/references/designpowers/lane-c-review.md +65 -0
  63. package/dist/skills/frontend/references/designpowers/lane-d-memory.md +83 -0
  64. package/dist/skills/frontend/references/designpowers/orchestration.md +80 -0
  65. package/dist/skills/frontend/references/designpowers/routing.md +79 -0
  66. package/dist/skills/frontend/references/designpowers/vendor/LICENSE +21 -0
  67. package/dist/skills/frontend/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
  68. package/dist/skills/frontend/references/designpowers/vendor/agents/content-writer.md +132 -0
  69. package/dist/skills/frontend/references/designpowers/vendor/agents/design-builder.md +109 -0
  70. package/dist/skills/frontend/references/designpowers/vendor/agents/design-critic.md +89 -0
  71. package/dist/skills/frontend/references/designpowers/vendor/agents/design-lead.md +113 -0
  72. package/dist/skills/frontend/references/designpowers/vendor/agents/design-scout.md +78 -0
  73. package/dist/skills/frontend/references/designpowers/vendor/agents/design-strategist.md +121 -0
  74. package/dist/skills/frontend/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
  75. package/dist/skills/frontend/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
  76. package/dist/skills/frontend/references/designpowers/vendor/agents/motion-designer.md +120 -0
  77. package/dist/skills/frontend/references/designpowers/vendor/skills/accessible-content/SKILL.md +101 -0
  78. package/dist/skills/frontend/references/designpowers/vendor/skills/adaptive-interfaces/SKILL.md +109 -0
  79. package/dist/skills/frontend/references/designpowers/vendor/skills/cognitive-accessibility/SKILL.md +107 -0
  80. package/dist/skills/frontend/references/designpowers/vendor/skills/design-debate/SKILL.md +199 -0
  81. package/dist/skills/frontend/references/designpowers/vendor/skills/design-debt-tracker/SKILL.md +174 -0
  82. package/dist/skills/frontend/references/designpowers/vendor/skills/design-handoff/SKILL.md +125 -0
  83. package/dist/skills/frontend/references/designpowers/vendor/skills/design-md/SKILL.md +106 -0
  84. package/dist/skills/frontend/references/designpowers/vendor/skills/design-retrospective/SKILL.md +266 -0
  85. package/dist/skills/frontend/references/designpowers/vendor/skills/design-review/SKILL.md +123 -0
  86. package/dist/skills/frontend/references/designpowers/vendor/skills/design-system-alignment/SKILL.md +120 -0
  87. package/dist/skills/frontend/references/designpowers/vendor/skills/designpowers-critique/SKILL.md +164 -0
  88. package/dist/skills/frontend/references/designpowers/vendor/skills/heuristic-evaluation/SKILL.md +85 -0
  89. package/dist/skills/frontend/references/designpowers/vendor/skills/inclusive-personas/SKILL.md +98 -0
  90. package/dist/skills/frontend/references/designpowers/vendor/skills/inspiration-scouting/SKILL.md +165 -0
  91. package/dist/skills/frontend/references/designpowers/vendor/skills/interaction-design/SKILL.md +122 -0
  92. package/dist/skills/frontend/references/designpowers/vendor/skills/motion-choreography/SKILL.md +81 -0
  93. package/dist/skills/frontend/references/designpowers/vendor/skills/research-planning/SKILL.md +96 -0
  94. package/dist/skills/frontend/references/designpowers/vendor/skills/responsive-patterns/SKILL.md +77 -0
  95. package/dist/skills/frontend/references/designpowers/vendor/skills/synthetic-user-testing/SKILL.md +192 -0
  96. package/dist/skills/frontend/references/designpowers/vendor/skills/taste-feedback/SKILL.md +165 -0
  97. package/dist/skills/frontend/references/designpowers/vendor/skills/taste-report/SKILL.md +78 -0
  98. package/dist/skills/frontend/references/designpowers/vendor/skills/token-architecture/SKILL.md +75 -0
  99. package/dist/skills/frontend/references/designpowers/vendor/skills/ui-composition/SKILL.md +117 -0
  100. package/dist/skills/frontend/references/designpowers/vendor/skills/usability-testing/SKILL.md +78 -0
  101. package/dist/skills/frontend/references/designpowers/vendor/skills/verification-before-shipping/SKILL.md +125 -0
  102. package/dist/skills/frontend/references/designpowers/vendor/skills/voice-and-tone/SKILL.md +79 -0
  103. package/dist/skills/frontend/references/designpowers/vendor/skills/writing-design-plans/SKILL.md +119 -0
  104. package/dist/skills/frontend/references/ui-ux-db/scripts/core.py +0 -0
  105. package/dist/skills/git-master/SKILL.md +4 -0
  106. package/dist/skills/lcx-contribute-bug-fix/SKILL.md +44 -13
  107. package/dist/skills/lcx-contribute-bug-fix/agents/openai.yaml +1 -1
  108. package/dist/skills/lcx-doctor/SKILL.md +48 -13
  109. package/dist/skills/lcx-doctor/agents/openai.yaml +1 -1
  110. package/dist/skills/lcx-report-bug/SKILL.md +44 -13
  111. package/dist/skills/lcx-report-bug/agents/openai.yaml +1 -1
  112. package/dist/skills/review-work/SKILL.md +3 -3
  113. package/dist/skills/start-work/SKILL.md +7 -5
  114. package/dist/skills/ultraresearch/SKILL.md +4 -252
  115. package/dist/skills/ulw-plan/SKILL.md +8 -6
  116. package/dist/skills/ulw-plan/references/full-workflow.md +11 -6
  117. package/dist/skills/ulw-plan/references/intent-clear.md +3 -3
  118. package/dist/skills/ulw-plan/references/intent-unclear.md +1 -1
  119. package/{packages/shared-skills/skills/ultraresearch → dist/skills/ulw-research}/ATTRIBUTION.md +1 -1
  120. package/dist/skills/ulw-research/SKILL.md +260 -0
  121. package/dist/skills/visual-qa/SKILL.md +109 -18
  122. package/dist/skills/visual-qa/references/agent-browser-setup.md +5 -4
  123. package/dist/skills/visual-qa/scripts/cli.test.ts +7 -2
  124. package/dist/skills/visual-qa/scripts/skill-prompt-contract.test.ts +130 -3
  125. package/dist/skills/visual-qa/scripts/visual-qa.mjs +530 -0
  126. package/dist/testing/create-plugin-module.d.ts +2 -0
  127. package/dist/tools/delegate-task/skill-resolver.d.ts +1 -0
  128. package/dist/tools/delegate-task/types.d.ts +2 -0
  129. package/dist/tools/skill/types.d.ts +1 -0
  130. package/dist/tui.js +23917 -16117
  131. package/docs/reference/github-attachment-upload.md +51 -0
  132. package/docs/reference/web-terminal-visual-qa.md +81 -0
  133. package/package.json +33 -14
  134. package/packages/git-bash-mcp/dist/cli.js +2 -0
  135. package/packages/lsp-core/src/lsp/process.ts +4 -1
  136. package/packages/lsp-core/src/mcp.ts +1 -0
  137. package/packages/lsp-daemon/dist/cli.js +20 -5
  138. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +1 -0
  139. package/packages/lsp-daemon/dist/ensure-daemon.js +9 -3
  140. package/packages/lsp-daemon/dist/index.js +20 -5
  141. package/packages/lsp-daemon/dist/paths.d.ts +1 -0
  142. package/packages/lsp-daemon/dist/paths.js +6 -1
  143. package/packages/lsp-daemon/dist/proxy.js +1 -0
  144. package/packages/lsp-tools-mcp/dist/cli.js +5 -1
  145. package/packages/lsp-tools-mcp/dist/lsp/manager.js +4 -1
  146. package/packages/lsp-tools-mcp/dist/mcp.js +5 -1
  147. package/packages/lsp-tools-mcp/dist/tools.js +4 -1
  148. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  149. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +327 -69
  150. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  151. package/packages/omo-codex/plugin/components/bootstrap/scripts/bootstrap.ps1 +37 -68
  152. package/packages/omo-codex/plugin/components/bootstrap/scripts/node-dispatch.ps1 +75 -0
  153. package/packages/omo-codex/plugin/components/bootstrap/src/cli.ts +1 -1
  154. package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +3 -19
  155. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +688 -334
  156. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +317 -39
  157. package/packages/omo-codex/plugin/components/codegraph/package.json +2 -2
  158. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +7 -1
  159. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +103 -3
  160. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +231 -0
  161. package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +29 -0
  162. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +31 -57
  163. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +7 -4
  164. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +43 -9
  165. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +287 -0
  166. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +12 -7
  167. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +71 -1
  168. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  169. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  170. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  171. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +94 -26
  172. package/packages/omo-codex/plugin/components/lsp/dist/codex-hook.js +2 -0
  173. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.d.ts +2 -0
  174. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +56 -0
  175. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  176. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +2 -5
  177. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +2 -0
  178. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +65 -0
  179. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +6 -1
  180. package/packages/omo-codex/plugin/components/rules/dist/cli.js +8 -106
  181. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  182. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -17
  183. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +6 -6
  184. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  185. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +23 -0
  186. package/packages/omo-codex/plugin/components/teammode/dist/cli.js +22 -4
  187. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  188. package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +57 -7
  189. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-guide.mjs +32 -5
  190. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-state.mjs +63 -1
  191. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team.mjs +87 -53
  192. package/packages/omo-codex/plugin/components/teammode/src/codex-hook.ts +19 -4
  193. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +32 -2
  194. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  195. package/packages/omo-codex/plugin/components/ultrawork/README.md +1 -1
  196. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
  197. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
  198. package/packages/omo-codex/plugin/components/ultrawork/directive.md +18 -10
  199. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +1 -1
  200. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  201. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +6 -4
  202. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +11 -6
  203. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +3 -3
  204. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +1 -1
  205. package/packages/omo-codex/plugin/components/ultrawork/src/codex-hook.ts +1 -1
  206. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +24 -0
  207. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +7 -28
  208. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
  209. package/packages/omo-codex/plugin/components/ulw-loop/README.md +25 -21
  210. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +1 -1
  211. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +373 -0
  212. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +14 -1
  213. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +145 -14
  214. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.d.ts +6 -3
  215. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.js +16 -6
  216. package/packages/omo-codex/plugin/components/ulw-loop/dist/ultrawork-directive.d.ts +5 -0
  217. package/packages/omo-codex/plugin/components/ulw-loop/dist/ultrawork-directive.js +104 -0
  218. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +1 -1
  219. package/packages/omo-codex/plugin/components/ulw-loop/package.json +5 -2
  220. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +1 -1
  221. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +22 -14
  222. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +14 -1
  223. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +4 -2
  224. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +28 -6
  225. package/packages/omo-codex/plugin/components/ulw-loop/src/ultrawork-directive.ts +113 -0
  226. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +33 -2
  227. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-kind-guidance.test.ts +31 -0
  228. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +13 -0
  229. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/sample-quality-gate.json +7 -7
  230. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +39 -1
  231. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-doc.test.ts +2 -2
  232. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +7 -6
  233. package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +12 -0
  234. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +64 -0
  235. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +2 -1
  236. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +2 -1
  237. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +2 -1
  238. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +2 -1
  239. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +2 -1
  240. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +2 -1
  241. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +2 -1
  242. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +2 -1
  243. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +2 -1
  244. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +2 -1
  245. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +2 -1
  246. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +2 -1
  247. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +2 -1
  248. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +2 -1
  249. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +2 -1
  250. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +2 -1
  251. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +2 -1
  252. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +2 -1
  253. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +2 -1
  254. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +2 -1
  255. package/packages/omo-codex/plugin/package-lock.json +16 -56
  256. package/packages/omo-codex/plugin/package.json +1 -1
  257. package/packages/omo-codex/plugin/scripts/auto-update.mjs +9 -5
  258. package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +1 -0
  259. package/packages/omo-codex/plugin/scripts/migrate-codex-config/context7-placeholder-guard.mjs +131 -0
  260. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-mode-guard.mjs +60 -0
  261. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +3 -10
  262. package/packages/omo-codex/plugin/scripts/migrate-codex-config/root-settings.mjs +31 -1
  263. package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +73 -0
  264. package/packages/omo-codex/plugin/scripts/migrate-codex-config.mjs +20 -3
  265. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +30 -8
  266. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +128 -0
  267. package/packages/omo-codex/plugin/skills/coding-agent-sessions/agents/openai.yaml +4 -0
  268. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +71 -0
  269. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/claude.md +32 -0
  270. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/codex.md +30 -0
  271. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/opencode.md +43 -0
  272. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +17 -0
  273. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/__init__.py +1 -0
  274. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/claude.py +66 -0
  275. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +283 -0
  276. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/codex.py +105 -0
  277. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +275 -0
  278. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/jsonio.py +55 -0
  279. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/kiro_scanner.py +91 -0
  280. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/opencode.py +289 -0
  281. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +92 -0
  282. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_optional_scanners.py +203 -0
  283. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_scanners.py +177 -0
  284. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/timeparse.py +51 -0
  285. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +149 -0
  286. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/types.py +57 -0
  287. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/find-agent-sessions.py +19 -0
  288. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +52 -8
  289. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +29 -8
  290. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +29 -12
  291. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +3 -3
  292. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +22 -19
  293. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/EVIDENCE.md +89 -0
  294. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +48 -0
  295. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/UPSTREAM.md +80 -0
  296. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +64 -0
  297. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +65 -0
  298. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-c-review.md +65 -0
  299. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +83 -0
  300. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +80 -0
  301. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +79 -0
  302. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/LICENSE +21 -0
  303. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
  304. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/content-writer.md +132 -0
  305. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-builder.md +109 -0
  306. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-critic.md +89 -0
  307. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-lead.md +113 -0
  308. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-scout.md +78 -0
  309. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/design-strategist.md +121 -0
  310. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
  311. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
  312. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/agents/motion-designer.md +120 -0
  313. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/accessible-content/SKILL.md +101 -0
  314. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/adaptive-interfaces/SKILL.md +109 -0
  315. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/cognitive-accessibility/SKILL.md +107 -0
  316. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-debate/SKILL.md +199 -0
  317. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-debt-tracker/SKILL.md +174 -0
  318. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-handoff/SKILL.md +125 -0
  319. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-md/SKILL.md +106 -0
  320. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-retrospective/SKILL.md +266 -0
  321. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-review/SKILL.md +123 -0
  322. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/design-system-alignment/SKILL.md +120 -0
  323. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/designpowers-critique/SKILL.md +164 -0
  324. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/heuristic-evaluation/SKILL.md +85 -0
  325. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/inclusive-personas/SKILL.md +98 -0
  326. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/inspiration-scouting/SKILL.md +165 -0
  327. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/interaction-design/SKILL.md +122 -0
  328. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/motion-choreography/SKILL.md +81 -0
  329. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/research-planning/SKILL.md +96 -0
  330. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/responsive-patterns/SKILL.md +77 -0
  331. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/synthetic-user-testing/SKILL.md +192 -0
  332. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/taste-feedback/SKILL.md +165 -0
  333. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/taste-report/SKILL.md +78 -0
  334. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/token-architecture/SKILL.md +75 -0
  335. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/ui-composition/SKILL.md +117 -0
  336. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/usability-testing/SKILL.md +78 -0
  337. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/verification-before-shipping/SKILL.md +125 -0
  338. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/voice-and-tone/SKILL.md +79 -0
  339. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/vendor/skills/writing-design-plans/SKILL.md +119 -0
  340. package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/core.py +0 -0
  341. package/packages/omo-codex/plugin/skills/git-master/SKILL.md +4 -0
  342. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +4 -0
  343. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +44 -13
  344. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/agents/openai.yaml +1 -1
  345. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +48 -13
  346. package/packages/omo-codex/plugin/skills/lcx-doctor/agents/openai.yaml +1 -1
  347. package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +44 -13
  348. package/packages/omo-codex/plugin/skills/lcx-report-bug/agents/openai.yaml +1 -1
  349. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +4 -0
  350. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +4 -0
  351. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +12 -4
  352. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +14 -8
  353. package/packages/omo-codex/plugin/skills/teammode/SKILL.md +57 -7
  354. package/packages/omo-codex/plugin/skills/teammode/scripts/team-guide.mjs +32 -5
  355. package/packages/omo-codex/plugin/skills/teammode/scripts/team-state.mjs +63 -1
  356. package/packages/omo-codex/plugin/skills/teammode/scripts/team.mjs +87 -53
  357. package/packages/omo-codex/plugin/skills/ultraresearch/SKILL.md +4 -250
  358. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +1 -1
  359. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +22 -14
  360. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +6 -4
  361. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +11 -6
  362. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +3 -3
  363. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +1 -1
  364. package/{dist/skills/ultraresearch → packages/omo-codex/plugin/skills/ulw-research}/ATTRIBUTION.md +1 -1
  365. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +262 -0
  366. package/packages/omo-codex/plugin/skills/ulw-research/agents/openai.yaml +2 -0
  367. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +113 -18
  368. package/packages/omo-codex/plugin/skills/visual-qa/references/agent-browser-setup.md +5 -4
  369. package/packages/omo-codex/plugin/skills/visual-qa/scripts/visual-qa.mjs +530 -0
  370. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +23 -0
  371. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -0
  372. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +1 -0
  373. package/packages/omo-codex/plugin/test/auto-update-restart-notice.test.mjs +24 -1
  374. package/packages/omo-codex/plugin/test/bootstrap-binlinks.test.mjs +61 -7
  375. package/packages/omo-codex/plugin/test/bootstrap-hooks.test.mjs +38 -0
  376. package/packages/omo-codex/plugin/test/bootstrap-ps-guard.test.mjs +25 -0
  377. package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +1 -7
  378. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +12 -11
  379. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +99 -1
  380. package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +62 -8
  381. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +206 -6
  382. package/packages/omo-codex/plugin/test/node-install-surface.test.mjs +1 -0
  383. package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +44 -0
  384. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +50 -1
  385. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +10 -7
  386. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +28 -2
  387. package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +102 -0
  388. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +20 -0
  389. package/packages/omo-codex/plugin/test/teammode-safety-fixture.mjs +41 -1
  390. package/packages/omo-codex/plugin/test/teammode-safety.test.mjs +93 -0
  391. package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +117 -0
  392. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +5 -2
  393. package/packages/omo-codex/plugin/test/ulw-research-skill-contract.test.mjs +285 -0
  394. package/packages/omo-codex/scripts/install-bin-links.test.mjs +12 -1
  395. package/packages/omo-codex/scripts/install-cache-copy.test.mjs +79 -0
  396. package/packages/omo-codex/scripts/install-config-autonomous-features.test.mjs +43 -3
  397. package/packages/omo-codex/scripts/install-config.test.mjs +198 -17
  398. package/packages/omo-codex/scripts/install-delegated-command.test.mjs +93 -0
  399. package/packages/omo-codex/scripts/install-dist/install-local.mjs +803 -309
  400. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +21 -2
  401. package/packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs +24 -15
  402. package/packages/omo-codex/scripts/install-local.test.mjs +5 -2
  403. package/packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs +84 -0
  404. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +128 -0
  405. package/packages/shared-skills/skills/coding-agent-sessions/agents/openai.yaml +4 -0
  406. package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +71 -0
  407. package/packages/shared-skills/skills/coding-agent-sessions/references/claude.md +32 -0
  408. package/packages/shared-skills/skills/coding-agent-sessions/references/codex.md +30 -0
  409. package/packages/shared-skills/skills/coding-agent-sessions/references/opencode.md +43 -0
  410. package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +17 -0
  411. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/__init__.py +1 -0
  412. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/claude.py +66 -0
  413. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +283 -0
  414. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/codex.py +105 -0
  415. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +275 -0
  416. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/jsonio.py +55 -0
  417. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/kiro_scanner.py +91 -0
  418. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/opencode.py +289 -0
  419. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +92 -0
  420. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_optional_scanners.py +203 -0
  421. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/sqlite_scanners.py +177 -0
  422. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/timeparse.py +51 -0
  423. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +149 -0
  424. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/types.py +57 -0
  425. package/packages/shared-skills/skills/coding-agent-sessions/scripts/find-agent-sessions.py +19 -0
  426. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +52 -8
  427. package/packages/shared-skills/skills/frontend/SKILL.md +29 -8
  428. package/packages/shared-skills/skills/frontend/references/design/README.md +29 -12
  429. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +3 -3
  430. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +22 -19
  431. package/packages/shared-skills/skills/frontend/references/designpowers/EVIDENCE.md +89 -0
  432. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +48 -0
  433. package/packages/shared-skills/skills/frontend/references/designpowers/UPSTREAM.md +80 -0
  434. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +64 -0
  435. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +65 -0
  436. package/packages/shared-skills/skills/frontend/references/designpowers/lane-c-review.md +65 -0
  437. package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +83 -0
  438. package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +80 -0
  439. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +79 -0
  440. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/LICENSE +21 -0
  441. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
  442. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/content-writer.md +132 -0
  443. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-builder.md +109 -0
  444. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-critic.md +89 -0
  445. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-lead.md +113 -0
  446. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-scout.md +78 -0
  447. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/design-strategist.md +121 -0
  448. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
  449. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
  450. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/agents/motion-designer.md +120 -0
  451. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/accessible-content/SKILL.md +101 -0
  452. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/adaptive-interfaces/SKILL.md +109 -0
  453. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/cognitive-accessibility/SKILL.md +107 -0
  454. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-debate/SKILL.md +199 -0
  455. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-debt-tracker/SKILL.md +174 -0
  456. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-handoff/SKILL.md +125 -0
  457. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-md/SKILL.md +106 -0
  458. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-retrospective/SKILL.md +266 -0
  459. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-review/SKILL.md +123 -0
  460. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/design-system-alignment/SKILL.md +120 -0
  461. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/designpowers-critique/SKILL.md +164 -0
  462. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/heuristic-evaluation/SKILL.md +85 -0
  463. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/inclusive-personas/SKILL.md +98 -0
  464. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/inspiration-scouting/SKILL.md +165 -0
  465. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/interaction-design/SKILL.md +122 -0
  466. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/motion-choreography/SKILL.md +81 -0
  467. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/research-planning/SKILL.md +96 -0
  468. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/responsive-patterns/SKILL.md +77 -0
  469. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/synthetic-user-testing/SKILL.md +192 -0
  470. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/taste-feedback/SKILL.md +165 -0
  471. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/taste-report/SKILL.md +78 -0
  472. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/token-architecture/SKILL.md +75 -0
  473. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/ui-composition/SKILL.md +117 -0
  474. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/usability-testing/SKILL.md +78 -0
  475. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/verification-before-shipping/SKILL.md +125 -0
  476. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/voice-and-tone/SKILL.md +79 -0
  477. package/packages/shared-skills/skills/frontend/references/designpowers/vendor/skills/writing-design-plans/SKILL.md +119 -0
  478. package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/core.py +0 -0
  479. package/packages/shared-skills/skills/git-master/SKILL.md +4 -0
  480. package/packages/shared-skills/skills/lcx-contribute-bug-fix/SKILL.md +44 -13
  481. package/packages/shared-skills/skills/lcx-contribute-bug-fix/agents/openai.yaml +1 -1
  482. package/packages/shared-skills/skills/lcx-doctor/SKILL.md +48 -13
  483. package/packages/shared-skills/skills/lcx-doctor/agents/openai.yaml +1 -1
  484. package/packages/shared-skills/skills/lcx-report-bug/SKILL.md +44 -13
  485. package/packages/shared-skills/skills/lcx-report-bug/agents/openai.yaml +1 -1
  486. package/packages/shared-skills/skills/review-work/SKILL.md +3 -3
  487. package/packages/shared-skills/skills/start-work/SKILL.md +7 -5
  488. package/packages/shared-skills/skills/ultraresearch/SKILL.md +4 -252
  489. package/packages/shared-skills/skills/ulw-plan/SKILL.md +8 -6
  490. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +11 -6
  491. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +3 -3
  492. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +1 -1
  493. package/packages/{omo-codex/plugin/skills/ultraresearch → shared-skills/skills/ulw-research}/ATTRIBUTION.md +1 -1
  494. package/packages/shared-skills/skills/ulw-research/SKILL.md +260 -0
  495. package/packages/shared-skills/skills/visual-qa/SKILL.md +109 -18
  496. package/packages/shared-skills/skills/visual-qa/references/agent-browser-setup.md +5 -4
  497. package/packages/shared-skills/skills/visual-qa/scripts/cli.test.ts +7 -2
  498. package/packages/shared-skills/skills/visual-qa/scripts/skill-prompt-contract.test.ts +130 -3
  499. package/packages/shared-skills/skills/visual-qa/scripts/visual-qa.mjs +530 -0
  500. package/script/qa/web-terminal-redaction.d.mts +13 -0
  501. package/script/qa/web-terminal-redaction.mjs +43 -0
  502. package/script/qa/web-terminal-renderer.mjs +218 -0
  503. package/script/qa/web-terminal-visual-qa.mjs +264 -0
  504. package/dist/cli/sparkshell-appserver-websocket.d.ts +0 -4
  505. package/dist/cli/sparkshell-appserver.d.ts +0 -16
  506. package/dist/cli/sparkshell-condense.d.ts +0 -10
  507. package/dist/cli/sparkshell-parse.d.ts +0 -24
  508. package/dist/cli/sparkshell-session-context.d.ts +0 -20
  509. package/dist/cli/sparkshell-spark.d.ts +0 -23
  510. package/dist/cli/sparkshell.d.ts +0 -33
  511. package/dist/shared/sparkshell-awareness.d.ts +0 -5
  512. package/packages/omo-codex/plugin/components/rules/src/sparkshell-awareness.ts +0 -106
  513. package/packages/omo-codex/plugin/components/rules/test/sparkshell-awareness.test.ts +0 -346
  514. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_cookie_domain_filter.py +0 -110
  515. package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_extract_cookies.py +0 -245
  516. package/packages/omo-codex/plugin/test/ultraresearch-skill-contract.test.mjs +0 -204
@@ -87,6 +87,85 @@ test("#given cached file dependency is rewritten #when lockfile exists #then pac
87
87
  assert.equal(cachedPackageLock.packages["node_modules/@scope/lsp-tools"].resolved, packageLockDependencyPath);
88
88
  });
89
89
 
90
+ test("#given npm creates workspace bin shims in the cache #when caching plugin #then plugin-owned shims are removed", async () => {
91
+ // given
92
+ const root = await makeTempDir();
93
+ const codexHome = join(root, "codex-home");
94
+ const sourceRoot = join(root, "plugin");
95
+ const componentRoot = join(sourceRoot, "components", "ulw-loop");
96
+ await mkdir(join(componentRoot, "dist"), { recursive: true });
97
+ await writeFile(
98
+ join(sourceRoot, "package.json"),
99
+ JSON.stringify({
100
+ name: "@scope/omo",
101
+ version: "0.1.0",
102
+ workspaces: ["components/ulw-loop"],
103
+ }),
104
+ );
105
+ await writeFile(
106
+ join(componentRoot, "package.json"),
107
+ JSON.stringify({
108
+ name: "@code-yeongyu/codex-ulw-loop",
109
+ version: "0.1.0",
110
+ bin: { "omo-ulw-loop": "dist/cli.js" },
111
+ }),
112
+ );
113
+ await writeFile(join(componentRoot, "dist", "cli.js"), "#!/usr/bin/env node\n");
114
+
115
+ // when
116
+ const installed = await installCachedPlugin({
117
+ codexHome,
118
+ marketplaceName: "debug",
119
+ name: "omo",
120
+ sourcePath: sourceRoot,
121
+ version: "0.1.0",
122
+ runCommand: async (_command, args, options) => {
123
+ if (args.join(" ") !== "ci --omit=dev") return;
124
+ const npmBinDir = join(options.cwd, "node_modules", ".bin");
125
+ await mkdir(npmBinDir, { recursive: true });
126
+ await writeFile(join(npmBinDir, "omo-ulw-loop"), "#!/bin/sh\nnode ../@code-yeongyu/codex-ulw-loop/dist/cli.js \"$@\"\n");
127
+ await writeFile(
128
+ join(npmBinDir, "omo-ulw-loop.cmd"),
129
+ '@echo off\r\nnode "%~dp0\\..\\@code-yeongyu\\codex-ulw-loop\\dist\\cli.js" %*\r\n',
130
+ );
131
+ await writeFile(join(npmBinDir, "other-tool.cmd"), "@echo off\r\necho preserved\r\n");
132
+ },
133
+ });
134
+
135
+ // then
136
+ await assert.rejects(stat(join(installed.path, "node_modules", ".bin", "omo-ulw-loop")));
137
+ await assert.rejects(stat(join(installed.path, "node_modules", ".bin", "omo-ulw-loop.cmd")));
138
+ assert.equal(await readFile(join(installed.path, "node_modules", ".bin", "other-tool.cmd"), "utf8"), "@echo off\r\necho preserved\r\n");
139
+ });
140
+
141
+ test("#given packaged root CLI runtimes #when caching omo plugin #then root dist is materialized into the plugin cache", async () => {
142
+ // given
143
+ const root = await makeTempDir();
144
+ const repoRoot = join(root, "repo");
145
+ const codexHome = join(root, "codex-home");
146
+ const sourceRoot = join(repoRoot, "packages", "omo-codex", "plugin");
147
+ await mkdir(sourceRoot, { recursive: true });
148
+ await mkdir(join(repoRoot, "dist", "cli"), { recursive: true });
149
+ await mkdir(join(repoRoot, "dist", "cli-node"), { recursive: true });
150
+ await writeFile(join(sourceRoot, "package.json"), JSON.stringify({ name: "@scope/omo", version: "0.1.0" }));
151
+ await writeFile(join(repoRoot, "dist", "cli", "index.js"), "console.log('omo')\n");
152
+ await writeFile(join(repoRoot, "dist", "cli-node", "index.js"), "console.log('omo node')\n");
153
+
154
+ // when
155
+ const installed = await installCachedPlugin({
156
+ codexHome,
157
+ marketplaceName: "sisyphuslabs",
158
+ name: "omo",
159
+ sourcePath: sourceRoot,
160
+ version: "0.1.0",
161
+ runCommand: async () => {},
162
+ });
163
+
164
+ // then
165
+ assert.equal(await readFile(join(installed.path, "dist", "cli", "index.js"), "utf8"), "console.log('omo')\n");
166
+ assert.equal(await readFile(join(installed.path, "dist", "cli-node", "index.js"), "utf8"), "console.log('omo node')\n");
167
+ });
168
+
90
169
  test("#given existing cache #when npm install fails #then previous active cache is preserved", async () => {
91
170
  // given
92
171
  const root = await makeTempDir();
@@ -6,7 +6,7 @@ import test from "node:test";
6
6
 
7
7
  import { updateCodexConfig } from "./install-dist/install-local.mjs";
8
8
 
9
- const ALWAYS_ON_FEATURES = ["plugins", "plugin_hooks", "multi_agent", "child_agents_md"];
9
+ const ALWAYS_ON_FEATURES = ["plugins", "plugin_hooks", "multi_agent"];
10
10
  const AUTONOMOUS_PERMISSION_FEATURES = ["unified_exec", "goals"];
11
11
 
12
12
  test("#given autonomous permissions requested #when script installer updates config #then enables Codex autonomy feature flags", async () => {
@@ -20,7 +20,6 @@ test("#given autonomous permissions requested #when script installer updates con
20
20
  "",
21
21
  "[features]",
22
22
  "multi_agent = false",
23
- "child_agents_md = false",
24
23
  "unified_exec = false",
25
24
  "goals = false",
26
25
  "",
@@ -59,7 +58,6 @@ test("#given autonomous permissions disabled #when script installer updates conf
59
58
  "",
60
59
  "[features]",
61
60
  "multi_agent = false",
62
- "child_agents_md = false",
63
61
  "unified_exec = false",
64
62
  "goals = false",
65
63
  "",
@@ -86,3 +84,45 @@ test("#given autonomous permissions disabled #when script installer updates conf
86
84
  assert.match(content, new RegExp(`${featureName} = false`));
87
85
  }
88
86
  });
87
+
88
+ test("#given existing child_agents_md setting #when script installer updates config #then preserves it without stamping unsupported values", async () => {
89
+ // given
90
+ const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-child-agents-preserve-"));
91
+ const configPath = join(root, "config.toml");
92
+ await writeFile(configPath, ["[features]", "child_agents_md = false", ""].join("\n"));
93
+
94
+ // when
95
+ await updateCodexConfig({
96
+ configPath,
97
+ repoRoot: "/repo/packages/omo-codex",
98
+ marketplaceName: "debug",
99
+ marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex" },
100
+ pluginNames: ["omo"],
101
+ autonomousPermissions: true,
102
+ });
103
+
104
+ // then
105
+ const content = await readFile(configPath, "utf8");
106
+ assert.match(content, /child_agents_md = false/);
107
+ assert.doesNotMatch(content, /child_agents_md = true/);
108
+ });
109
+
110
+ test("#given config without child_agents_md #when script installer updates config #then does not add unsupported feature key", async () => {
111
+ // given
112
+ const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-child-agents-absent-"));
113
+ const configPath = join(root, "config.toml");
114
+
115
+ // when
116
+ await updateCodexConfig({
117
+ configPath,
118
+ repoRoot: "/repo/packages/omo-codex",
119
+ marketplaceName: "debug",
120
+ marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex" },
121
+ pluginNames: ["omo"],
122
+ autonomousPermissions: true,
123
+ });
124
+
125
+ // then
126
+ const content = await readFile(configPath, "utf8");
127
+ assert.doesNotMatch(content, /child_agents_md/);
128
+ });
@@ -1,3 +1,5 @@
1
+ // allow: SIZE_OK - Node installer config tests mirror the source installer matrix with one filesystem fixture; this release adds config cases and future edits should split by installer concern.
2
+
1
3
  import assert from "node:assert/strict";
2
4
  import { lstat, mkdtemp, readFile, symlink, writeFile } from "node:fs/promises";
3
5
  import { tmpdir } from "node:os";
@@ -6,7 +8,7 @@ import test from "node:test";
6
8
 
7
9
  import { updateCodexConfig } from "./install-dist/install-local.mjs";
8
10
 
9
- test("#given empty Codex config #when script installer updates config #then enables MultiAgentV2 with ten thousand session threads", async () => {
11
+ test("#given empty Codex config #when script installer updates config #then sets subagent thread limits without forcing MultiAgentV2", async () => {
10
12
  // given
11
13
  const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-multi-agent-"));
12
14
  const configPath = join(root, "config.toml");
@@ -22,9 +24,70 @@ test("#given empty Codex config #when script installer updates config #then enab
22
24
 
23
25
  // then
24
26
  const config = await readFile(configPath, "utf8");
27
+ assert.doesNotMatch(config, /^\s*multi_agent_mode\s*=/m);
28
+ assert.match(config, /\[agents\]/);
29
+ assert.match(config, /max_threads = 1000/);
25
30
  assert.match(config, /\[features\.multi_agent_v2\]/);
26
- assert.match(config, /enabled = true/);
27
- assert.match(config, /max_concurrent_threads_per_session = 10000/);
31
+ const v2Section = multiAgentV2Section(config);
32
+ assert.doesNotMatch(v2Section, /^enabled\s*=/m);
33
+ assert.match(v2Section, /max_concurrent_threads_per_session = 1000/);
34
+ });
35
+
36
+ test("#given queue multi-agent mode #when script installer updates config #then removes unsupported root key", async () => {
37
+ const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-multi-agent-mode-"));
38
+ const configPath = join(root, "config.toml");
39
+ await writeFile(
40
+ configPath,
41
+ [
42
+ 'multi_agent_mode = "queue"',
43
+ "",
44
+ "[features]",
45
+ "multi_agent = true",
46
+ "",
47
+ ].join("\n"),
48
+ );
49
+
50
+ await updateCodexConfig({
51
+ configPath,
52
+ repoRoot: "/repo/packages/omo-codex",
53
+ marketplaceName: "debug",
54
+ marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex" },
55
+ pluginNames: ["omo"],
56
+ });
57
+
58
+ const config = await readFile(configPath, "utf8");
59
+ assert.doesNotMatch(config, /^\s*multi_agent_mode\s*=/m);
60
+ assert.doesNotMatch(config, /multi_agent_mode = "queue"/);
61
+ });
62
+
63
+ test("#given indented steering mode and inline-comment features table #when script installer updates config #then removes root key and keeps one features table", async () => {
64
+ const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-toml-root-regression-"));
65
+ const configPath = join(root, "config.toml");
66
+ await writeFile(
67
+ configPath,
68
+ [
69
+ ' multi_agent_mode = "steering"',
70
+ "",
71
+ "[features] # keep comment",
72
+ "plugins = false",
73
+ "",
74
+ ].join("\n"),
75
+ );
76
+
77
+ await updateCodexConfig({
78
+ configPath,
79
+ repoRoot: "/repo/packages/omo-codex",
80
+ marketplaceName: "debug",
81
+ marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex" },
82
+ pluginNames: ["omo"],
83
+ });
84
+
85
+ const config = await readFile(configPath, "utf8");
86
+ assert.equal(config.match(/^\s*multi_agent_mode\s*=/gm)?.length ?? 0, 0);
87
+ assert.equal(config.match(/^\s*\[features\](?:\s*#.*)?$/gm)?.length, 1);
88
+ assert.match(config, /^\[features\] # keep comment$/m);
89
+ assert.doesNotMatch(config, /multi_agent_mode = "queue"/);
90
+ assert.doesNotMatch(config, /multi_agent_mode = "steering"/);
28
91
  });
29
92
 
30
93
  test("#given empty Codex config #when script installer updates config #then leaves Context7 to the plugin MCP manifest", async () => {
@@ -78,7 +141,7 @@ test("#given existing Context7 MCP config #when script installer updates config
78
141
  await writeFile(
79
142
  configPath,
80
143
  [
81
- "[mcp_servers.context7]",
144
+ "[mcp_servers.context7] # stale npx package from old docs",
82
145
  'command = "node"',
83
146
  'args = ["/opt/context7/server.js"]',
84
147
  'startup_timeout_sec = 40',
@@ -104,6 +167,70 @@ test("#given existing Context7 MCP config #when script installer updates config
104
167
  assert.doesNotMatch(config, /YOUR_API_KEY/);
105
168
  });
106
169
 
170
+ test("#given real Context7 API key and placeholder comment #when script installer updates config #then preserves user setup", async () => {
171
+ // given
172
+ const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-context7-real-key-"));
173
+ const configPath = join(root, "config.toml");
174
+ await writeFile(
175
+ configPath,
176
+ [
177
+ "[mcp_servers.context7]",
178
+ 'command = "npx"',
179
+ 'args = ["-y", "@upstash/context7-mcp", "--api-key", "ctx7sk_live_example"] # replace YOUR_API_KEY in docs only',
180
+ "startup_timeout_sec = 20",
181
+ "",
182
+ ].join("\n"),
183
+ );
184
+
185
+ // when
186
+ await updateCodexConfig({
187
+ configPath,
188
+ repoRoot: "/repo/packages/omo-codex",
189
+ marketplaceName: "sisyphuslabs",
190
+ marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex/cache/sisyphuslabs" },
191
+ pluginNames: ["omo"],
192
+ });
193
+
194
+ // then
195
+ const config = await readFile(configPath, "utf8");
196
+ assert.match(config, /\[mcp_servers\.context7\]/);
197
+ assert.match(config, /ctx7sk_live_example/);
198
+ assert.match(config, /replace YOUR_API_KEY in docs only/);
199
+ assert.match(config, /\[plugins\."omo@sisyphuslabs"\.mcp_servers\.context7\]/);
200
+ });
201
+
202
+ test("#given stale Context7 placeholder MCP config #when script installer updates config #then removes it for plugin MCP", async () => {
203
+ // given
204
+ const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-context7-placeholder-"));
205
+ const configPath = join(root, "config.toml");
206
+ await writeFile(
207
+ configPath,
208
+ [
209
+ "[mcp_servers.context7]",
210
+ 'command = "npx"',
211
+ 'args = ["-y", "@upstash/context7-mcp", "--api-key", "YOUR_API_KEY"]',
212
+ "startup_timeout_sec = 20",
213
+ "",
214
+ ].join("\n"),
215
+ );
216
+
217
+ // when
218
+ await updateCodexConfig({
219
+ configPath,
220
+ repoRoot: "/repo/packages/omo-codex",
221
+ marketplaceName: "sisyphuslabs",
222
+ marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex/cache/sisyphuslabs" },
223
+ pluginNames: ["omo"],
224
+ });
225
+
226
+ // then
227
+ const config = await readFile(configPath, "utf8");
228
+ assert.match(config, /\[plugins\."omo@sisyphuslabs"\.mcp_servers\.context7\]/);
229
+ assert.doesNotMatch(config, /\[mcp_servers\.context7\]/);
230
+ assert.doesNotMatch(config, /@upstash\/context7-mcp/);
231
+ assert.doesNotMatch(config, /YOUR_API_KEY/);
232
+ });
233
+
107
234
  test("#given Codex config is a symlink #when script installer updates config #then writes through the target", async () => {
108
235
  // given
109
236
  const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-symlink-"));
@@ -152,7 +279,7 @@ test("#given sisyphuslabs config without explicit source #when script installer
152
279
  assert.doesNotMatch(config, /ref = "main"/);
153
280
  });
154
281
 
155
- test("#given existing MultiAgentV2 table #when script installer updates config #then preserves unrelated tuning while setting ten thousand session threads", async () => {
282
+ test("#given existing MultiAgentV2 table #when script installer updates config #then preserves unrelated tuning while setting subagent thread limits", async () => {
156
283
  // given
157
284
  const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-multi-agent-existing-"));
158
285
  const configPath = join(root, "config.toml");
@@ -179,9 +306,9 @@ test("#given existing MultiAgentV2 table #when script installer updates config #
179
306
  // then
180
307
  const config = await readFile(configPath, "utf8");
181
308
  assert.match(config, /\[features\.multi_agent_v2\]/);
182
- assert.match(config, /enabled = true/);
309
+ assert.doesNotMatch(sectionText(config, "[features.multi_agent_v2]"), /enabled = true/);
183
310
  assert.match(config, /usage_hint_enabled = false/);
184
- assert.match(config, /max_concurrent_threads_per_session = 10000/);
311
+ assert.match(config, /max_concurrent_threads_per_session = 1000/);
185
312
  assert.doesNotMatch(config, /max_concurrent_threads_per_session = 4/);
186
313
  });
187
314
 
@@ -202,7 +329,8 @@ test("#given empty Codex config #when script installer updates config #then sets
202
329
  // then
203
330
  const config = await readFile(configPath, "utf8");
204
331
  const v2Section = config.slice(config.indexOf("[features.multi_agent_v2]"));
205
- assert.match(v2Section, /max_concurrent_threads_per_session = 10000/);
332
+ assert.match(config, /\[agents\][\s\S]*?max_threads = 1000/);
333
+ assert.match(v2Section, /max_concurrent_threads_per_session = 1000/);
206
334
  assert.doesNotMatch(v2Section, /hide_spawn_agent_metadata/);
207
335
  });
208
336
 
@@ -266,12 +394,45 @@ test("#given legacy boolean MultiAgentV2 flag and table #when script installer u
266
394
  const config = await readFile(configPath, "utf8");
267
395
  assert.doesNotMatch(config, /^multi_agent_v2\s*=/m);
268
396
  assert.match(config, /\[features\.multi_agent_v2\]/);
269
- assert.match(config, /enabled = true/);
270
- assert.match(config, /usage_hint_enabled = false/);
271
- assert.match(config, /max_concurrent_threads_per_session = 10000/);
397
+ const v2Section = multiAgentV2Section(config);
398
+ assert.doesNotMatch(v2Section, /^enabled\s*=/m);
399
+ assert.match(v2Section, /usage_hint_enabled = false/);
400
+ assert.match(v2Section, /max_concurrent_threads_per_session = 1000/);
272
401
  });
273
402
 
274
- test("#given legacy agents max_threads #when script installer updates config #then removes the conflicting legacy thread cap", async () => {
403
+ test("#given legacy boolean MultiAgentV2 flag false #when script installer updates config #then normalizes to a disabled table config", async () => {
404
+ // given
405
+ const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-multi-agent-legacy-false-"));
406
+ const configPath = join(root, "config.toml");
407
+ await writeFile(
408
+ configPath,
409
+ [
410
+ "[features]",
411
+ "multi_agent_v2 = false",
412
+ "plugins = false",
413
+ "",
414
+ ].join("\n"),
415
+ );
416
+
417
+ // when
418
+ await updateCodexConfig({
419
+ configPath,
420
+ repoRoot: "/repo/packages/omo-codex",
421
+ marketplaceName: "debug",
422
+ marketplaceSource: { sourceType: "local", source: "/repo/packages/omo-codex" },
423
+ pluginNames: ["omo"],
424
+ });
425
+
426
+ // then
427
+ const config = await readFile(configPath, "utf8");
428
+ assert.doesNotMatch(config, /^multi_agent_v2\s*=/m);
429
+ assert.match(config, /\[features\.multi_agent_v2\]/);
430
+ const disabledV2Section = multiAgentV2Section(config);
431
+ assert.match(disabledV2Section, /^enabled = false$/m);
432
+ assert.match(disabledV2Section, /^max_concurrent_threads_per_session = 1000$/m);
433
+ });
434
+
435
+ test("#given legacy agents max_threads #when script installer updates config #then raises the root subagent thread cap", async () => {
275
436
  // given
276
437
  const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-multi-agent-legacy-threads-"));
277
438
  const configPath = join(root, "config.toml");
@@ -298,15 +459,17 @@ test("#given legacy agents max_threads #when script installer updates config #th
298
459
  // then
299
460
  const config = await readFile(configPath, "utf8");
300
461
  assert.match(config, /\[features\.multi_agent_v2\]/);
301
- assert.match(config, /enabled = true/);
302
- assert.match(config, /max_concurrent_threads_per_session = 10000/);
462
+ const v2Section = multiAgentV2Section(config);
463
+ assert.doesNotMatch(v2Section, /^enabled\s*=/m);
464
+ assert.match(v2Section, /max_concurrent_threads_per_session = 1000/);
303
465
  assert.match(config, /\[agents\]/);
304
- assert.doesNotMatch(config, /^max_threads\s*=/m);
466
+ assert.match(config, /max_threads = 1000/);
467
+ assert.doesNotMatch(config, /max_threads = 16/);
305
468
  assert.match(config, /max_depth = 4/);
306
469
  assert.match(config, /job_max_runtime_seconds = 3600/);
307
470
  });
308
471
 
309
- test("#given managed agent role sections #when script installer updates config #then preserves role config while removing only root agents max_threads", async () => {
472
+ test("#given managed agent role sections #when script installer updates config #then preserves role config while raising only root agents max_threads", async () => {
310
473
  // given
311
474
  const root = await mkdtemp(join(tmpdir(), "omo-codex-script-config-multi-agent-role-section-"));
312
475
  const configPath = join(root, "config.toml");
@@ -335,12 +498,21 @@ test("#given managed agent role sections #when script installer updates config #
335
498
 
336
499
  // then
337
500
  const config = await readFile(configPath, "utf8");
338
- assert.doesNotMatch(config, /^max_threads\s*=/m);
501
+ assert.match(config, /max_threads = 1000/);
502
+ assert.doesNotMatch(config, /max_threads = 16/);
339
503
  assert.match(config, /\[agents\.explorer\]/);
340
504
  assert.match(config, /description = "read-only explorer"/);
341
505
  assert.match(config, /config_file = "\.\/agents\/explorer\.toml"/);
342
506
  });
343
507
 
508
+ function sectionText(config, header) {
509
+ const start = config.indexOf(header);
510
+ if (start === -1) return "";
511
+ const afterStart = config.slice(start + header.length);
512
+ const nextSectionOffset = afterStart.search(/\n\[/);
513
+ return nextSectionOffset === -1 ? config.slice(start) : config.slice(start, start + header.length + nextSectionOffset);
514
+ }
515
+
344
516
  test("#given existing trust and lsp blocks #when updating config #then existing blocks are preserved", async () => {
345
517
  // given
346
518
  const root = await mkdtemp(join(tmpdir(), "omo-codex-config-baseline-"));
@@ -377,3 +549,12 @@ test("#given existing trust and lsp blocks #when updating config #then existing
377
549
  assert.match(content, /\[hooks\.state\."omo@sisyphuslabs:hooks\/hooks\.json:post_tool_use:0:0"\]/);
378
550
  assert.match(content, /trusted_hash = "sha256:keep"/);
379
551
  });
552
+
553
+ function multiAgentV2Section(config) {
554
+ const header = "[features.multi_agent_v2]";
555
+ const start = config.indexOf(header);
556
+ assert.notEqual(start, -1);
557
+ const rest = config.slice(start);
558
+ const nextHeader = rest.slice(1).search(/^\[/m);
559
+ return nextHeader === -1 ? rest : rest.slice(0, nextHeader + 1);
560
+ }
@@ -75,11 +75,104 @@ test("#given a dry-run doctor #when delegating #then routes to the Codex LazyCod
75
75
  // then
76
76
  assert.equal(ran, false);
77
77
  assert.match(logged, /^codex exec /);
78
+ assert.match(logged, /--sandbox danger-full-access/);
79
+ assert.doesNotMatch(logged, /--model/);
80
+ assert.doesNotMatch(logged, /gpt-5\.5-codex-mini/);
81
+ assert.doesNotMatch(logged, /--sandbox read-only/);
78
82
  assert.match(logged, /Use \$omo:lcx-doctor/);
83
+ assert.match(logged, /LAZYCODEX_SOURCE_ROOT/);
84
+ assert.match(logged, /\$\{TMPDIR:-\/tmp\}\/lazycodex-sources/);
79
85
  assert.match(logged, /Requested doctor arguments: --json/);
80
86
  assert.doesNotMatch(logged, /oh-my-openagent omo doctor/);
81
87
  });
82
88
 
89
+ test("#given doctor without model override #when delegating #then uses the configured Codex default model", async () => {
90
+ // given
91
+ const parsed = { kind: "command", command: "doctor", args: ["--json"] };
92
+
93
+ // when
94
+ const invocation = buildDelegatedOmoInvocation(parsed);
95
+
96
+ // then
97
+ assert.equal(invocation.command, "codex");
98
+ assert.equal(invocation.args.includes("--model"), false);
99
+ assert.equal(invocation.args.some((arg) => arg.includes("gpt-5.5-codex-mini")), false);
100
+ });
101
+
102
+ test("#given explicit doctor model override #when delegating #then passes only that model to Codex exec", async () => {
103
+ // given
104
+ const parsed = { kind: "command", command: "doctor", args: ["--model", "gpt-5.5", "--json"] };
105
+
106
+ // when
107
+ const invocation = buildDelegatedOmoInvocation(parsed);
108
+
109
+ // then
110
+ assert.equal(invocation.command, "codex");
111
+ assert.deepEqual(invocation.args.slice(0, 9), [
112
+ "exec",
113
+ "--ephemeral",
114
+ "--sandbox",
115
+ "danger-full-access",
116
+ "--skip-git-repo-check",
117
+ "--cd",
118
+ ".",
119
+ "--model",
120
+ "gpt-5.5",
121
+ ]);
122
+ assert.match(invocation.args.at(-1), /Requested doctor arguments: --json/);
123
+ assert.doesNotMatch(invocation.args.at(-1), /--model/);
124
+ });
125
+
126
+ test("#given doctor source-root override #when delegating #then passes it to the Codex workflow environment", async () => {
127
+ // given
128
+ const parsed = { kind: "command", command: "doctor", args: ["--source-root", "/var/tmp/lcx-sources", "--json"] };
129
+
130
+ // when
131
+ const invocation = buildDelegatedOmoInvocation(parsed);
132
+
133
+ // then
134
+ assert.equal(invocation.env?.LAZYCODEX_SOURCE_ROOT, "/var/tmp/lcx-sources");
135
+ assert.deepEqual(invocation.args.slice(0, 7), [
136
+ "exec",
137
+ "--ephemeral",
138
+ "--sandbox",
139
+ "danger-full-access",
140
+ "--skip-git-repo-check",
141
+ "--cd",
142
+ ".",
143
+ ]);
144
+ assert.match(invocation.args.at(-1), /Requested doctor arguments: --json/);
145
+ assert.doesNotMatch(invocation.args.at(-1), /--source-root/);
146
+ });
147
+
148
+ test("#given dry-run install without explicit platform #when delegating #then logs one Windows-safe Codex install command", async () => {
149
+ // given
150
+ const parsed = {
151
+ kind: "command",
152
+ command: "install",
153
+ dryRun: true,
154
+ noTui: true,
155
+ skipAuth: false,
156
+ autonomousPermissions: true,
157
+ repoRoot: undefined,
158
+ args: [],
159
+ };
160
+ const logged = [];
161
+
162
+ // when
163
+ await runDelegatedOmoCommand(parsed, {
164
+ cwd: "/tmp/project",
165
+ log: (line) => {
166
+ logged.push(line);
167
+ },
168
+ runCommand: async () => {},
169
+ });
170
+
171
+ // then
172
+ assert.deepEqual(logged, [
173
+ "npx --yes oh-my-openagent@latest install --platform=codex --no-tui --codex-autonomous",
174
+ ]);
175
+ });
83
176
  test("#given doctor recursion guard is active #when lazycodex doctor delegates #then rejects before launching Codex", async () => {
84
177
  // given
85
178
  const parsed = { kind: "command", command: "doctor", args: [] };