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
@@ -1,14 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/serve.ts
4
- import { spawn } from "node:child_process";
5
4
  import { existsSync as existsSync5, realpathSync } from "node:fs";
6
5
  import { homedir as homedir6 } from "node:os";
7
- import { basename as basename3, extname, join as join6, resolve as resolve2 } from "node:path";
6
+ import { basename as basename3, join as join6, resolve as resolve2 } from "node:path";
8
7
  import {
9
8
  cwd as processCwd,
10
9
  env as processEnv,
11
- execPath as processExecPath,
12
10
  stdin as processStdin,
13
11
  stderr as processStderr,
14
12
  stdout as processStdout
@@ -22,6 +20,41 @@ var CODEGRAPH_INSTALL_DIR_ENV = "CODEGRAPH_INSTALL_DIR";
22
20
  var CODEGRAPH_NO_DOWNLOAD_ENV = "CODEGRAPH_NO_DOWNLOAD";
23
21
  var CODEGRAPH_TELEMETRY_ENV = "CODEGRAPH_TELEMETRY";
24
22
  var DO_NOT_TRACK_ENV = "DO_NOT_TRACK";
23
+ var SAFE_AMBIENT_ENV_KEYS = new Set([
24
+ "APPDATA",
25
+ "CI",
26
+ "CODEX_HOME",
27
+ "ComSpec",
28
+ "HOME",
29
+ "HOMEDRIVE",
30
+ "HOMEPATH",
31
+ "LANG",
32
+ "LC_ALL",
33
+ "LC_CTYPE",
34
+ "LOCALAPPDATA",
35
+ "PATH",
36
+ "PATHEXT",
37
+ "Path",
38
+ "SystemRoot",
39
+ "TEMP",
40
+ "TMP",
41
+ "TMPDIR",
42
+ "USERPROFILE",
43
+ "WINDIR",
44
+ "XDG_CACHE_HOME",
45
+ "XDG_CONFIG_HOME",
46
+ "XDG_DATA_HOME",
47
+ "XDG_STATE_HOME"
48
+ ]);
49
+ var SAFE_CODEGRAPH_RUNTIME_ENV_KEYS = new Set([
50
+ "CODEGRAPH_ALLOW_UNSAFE_NODE",
51
+ "CODEGRAPH_BIN",
52
+ "CODEGRAPH_FAKE_LOG",
53
+ "CODEGRAPH_NODE_BIN",
54
+ "OMO_CODEGRAPH_BIN",
55
+ "OMO_CODEGRAPH_PROJECT_CWD",
56
+ "OMO_CODEGRAPH_SESSION_START_CWD"
57
+ ]);
25
58
  function buildCodegraphEnv(options = {}) {
26
59
  const homeDir = options.homeDir ?? homedir();
27
60
  return {
@@ -31,6 +64,26 @@ function buildCodegraphEnv(options = {}) {
31
64
  [DO_NOT_TRACK_ENV]: "1"
32
65
  };
33
66
  }
67
+ function copyDefinedEnvKeys(output, input, allowedKeys) {
68
+ for (const key of allowedKeys) {
69
+ const value = input[key];
70
+ if (value !== undefined)
71
+ output[key] = value;
72
+ }
73
+ }
74
+ function copyDefinedEnv(output, input) {
75
+ for (const [key, value] of Object.entries(input)) {
76
+ if (value !== undefined)
77
+ output[key] = value;
78
+ }
79
+ }
80
+ function buildCodegraphChildEnv(options = {}) {
81
+ const env = {};
82
+ copyDefinedEnvKeys(env, options.ambientEnv ?? {}, SAFE_AMBIENT_ENV_KEYS);
83
+ copyDefinedEnvKeys(env, options.runtimeEnv ?? {}, SAFE_CODEGRAPH_RUNTIME_ENV_KEYS);
84
+ copyDefinedEnv(env, options.codegraphEnv ?? {});
85
+ return env;
86
+ }
34
87
 
35
88
  // ../../../../utils/src/codegraph/node-support.ts
36
89
  var CODEGRAPH_MIN_NODE_MAJOR = 20;
@@ -360,6 +413,14 @@ var CODEGRAPH_PACKAGE = "@colbymchenry/codegraph";
360
413
  var CODEGRAPH_ENV_BIN = "OMO_CODEGRAPH_BIN";
361
414
  var CODEGRAPH_LEGACY_ENV_BIN = "CODEGRAPH_BIN";
362
415
  var CODEGRAPH_NODE_CANDIDATES = ["node24", "node22", "node20", "node"];
416
+ var CODEGRAPH_NODE_PATH_CANDIDATES = [
417
+ "/opt/homebrew/opt/node@24/bin/node",
418
+ "/opt/homebrew/opt/node@22/bin/node",
419
+ "/opt/homebrew/opt/node@20/bin/node",
420
+ "/usr/local/opt/node@24/bin/node",
421
+ "/usr/local/opt/node@22/bin/node",
422
+ "/usr/local/opt/node@20/bin/node"
423
+ ];
363
424
  var requireFromHere = createRequire(import.meta.url);
364
425
  function defaultRequireResolve(specifier) {
365
426
  return requireFromHere.resolve(specifier);
@@ -410,7 +471,8 @@ function defaultNodeRuntime(env, fileExists, which, nodeVersion) {
410
471
  }
411
472
  const candidates = [
412
473
  ...isNodeExecutableName(process.execPath) ? [process.execPath] : [],
413
- ...CODEGRAPH_NODE_CANDIDATES.map((commandName) => which(commandName)).filter((candidate) => candidate !== null)
474
+ ...CODEGRAPH_NODE_CANDIDATES.map((commandName) => which(commandName)).filter((candidate) => candidate !== null),
475
+ ...CODEGRAPH_NODE_PATH_CANDIDATES.filter((candidate) => fileExists(candidate))
414
476
  ];
415
477
  const seen = new Set;
416
478
  for (const candidate of candidates) {
@@ -1730,6 +1792,9 @@ function resolveHomeDir(options) {
1730
1792
  return options.homeDir ?? env["HOME"] ?? env["USERPROFILE"] ?? homedir5();
1731
1793
  }
1732
1794
 
1795
+ // src/mcp-bridge.ts
1796
+ import { spawn } from "node:child_process";
1797
+
1733
1798
  // ../../../../mcp-stdio-core/src/record.ts
1734
1799
  function isPlainRecord(value) {
1735
1800
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -1930,6 +1995,227 @@ function createIdleTimer(idleTimeoutMs, log, onIdleTimeout) {
1930
1995
  closed: () => isClosed
1931
1996
  };
1932
1997
  }
1998
+ // src/serve-invocation.ts
1999
+ import { extname } from "node:path";
2000
+ import { execPath as processExecPath } from "node:process";
2001
+ var WINDOWS_CMD_EXTENSIONS = new Set([".bat", ".cmd"]);
2002
+ var WINDOWS_NODE_SCRIPT_EXTENSIONS = new Set([".cjs", ".js", ".mjs"]);
2003
+ function resolveServeProcessInvocation(command, args, platform = process.platform) {
2004
+ if (platform !== "win32")
2005
+ return { args: [...args], command };
2006
+ const extension = extname(command).toLowerCase();
2007
+ if (WINDOWS_NODE_SCRIPT_EXTENSIONS.has(extension)) {
2008
+ return { args: [command, ...args], command: processExecPath };
2009
+ }
2010
+ if (WINDOWS_CMD_EXTENSIONS.has(extension)) {
2011
+ return { args: ["/d", "/s", "/c", command, ...args], command: "cmd.exe" };
2012
+ }
2013
+ return { args: [...args], command };
2014
+ }
2015
+
2016
+ // src/mcp-bridge.ts
2017
+ class CodegraphBridgeStdioError extends Error {
2018
+ streamName;
2019
+ name = "CodegraphBridgeStdioError";
2020
+ constructor(streamName) {
2021
+ super(`CodeGraph MCP bridge missing child ${streamName}`);
2022
+ this.streamName = streamName;
2023
+ }
2024
+ }
2025
+ var CODEGRAPH_NODE_DESCRIPTION = "Inspect one named symbol or file. In symbol mode, includeCode=true includes leaf-symbol source when available. Container symbols such as classes, interfaces, structs, enums, modules, and namespaces return structural outlines with member lists by design. For container source, request a specific member symbol or use file mode with symbolsOnly=false plus offset/limit.";
2026
+ var CODEGRAPH_NODE_INCLUDE_CODE_DESCRIPTION = "Symbol mode: include leaf-symbol source when available. Container symbols such as classes, interfaces, structs, enums, modules, and namespaces intentionally return structural outlines with members; request a specific member symbol or use file mode with symbolsOnly=false plus offset/limit for source.";
2027
+ var CODEGRAPH_CONTAINER_OUTLINE_GUIDANCE = "Container symbols intentionally return structural outlines with members. For source, request a specific member symbol or call codegraph_node in file mode with symbolsOnly=false plus offset/limit around the symbol location.";
2028
+ async function runBridgedCodegraphProcess(command, args, options) {
2029
+ const invocation = resolveServeProcessInvocation(command, args);
2030
+ const child = spawn(invocation.command, invocation.args, {
2031
+ cwd: options.cwd,
2032
+ env: options.env,
2033
+ stdio: ["pipe", "pipe", "inherit"]
2034
+ });
2035
+ const childInput = child.stdin;
2036
+ const childOutput = child.stdout;
2037
+ if (childInput === null)
2038
+ throw new CodegraphBridgeStdioError("stdin");
2039
+ if (childOutput === null)
2040
+ throw new CodegraphBridgeStdioError("stdout");
2041
+ const pendingResponses = new Map;
2042
+ let defaultResponseMode = "framed";
2043
+ const childExit = new Promise((resolveExit, reject) => {
2044
+ child.once("error", reject);
2045
+ child.once("exit", (code, signal) => {
2046
+ if (code !== null) {
2047
+ resolveExit(code);
2048
+ return;
2049
+ }
2050
+ resolveExit(signal === null ? 0 : 1);
2051
+ });
2052
+ });
2053
+ const bridgeDone = Promise.all([
2054
+ forwardClientToCodegraph(options.input, childInput, pendingResponses, (mode) => {
2055
+ defaultResponseMode = mode;
2056
+ }),
2057
+ forwardCodegraphToClient(childOutput, options.output, pendingResponses, () => defaultResponseMode)
2058
+ ]);
2059
+ const destroyChildPipes = () => {
2060
+ childInput.destroy();
2061
+ childOutput.destroy();
2062
+ };
2063
+ childExit.then(destroyChildPipes, destroyChildPipes);
2064
+ return Promise.race([childExit, bridgeDone.then(() => childExit)]);
2065
+ }
2066
+ async function forwardClientToCodegraph(input, childInput, pendingResponses, setDefaultResponseMode) {
2067
+ for await (const message of readStdioJsonRpcMessages(input)) {
2068
+ if (message.kind === "parse_error") {
2069
+ continue;
2070
+ }
2071
+ const responseMode = message.responseMode;
2072
+ setDefaultResponseMode(responseMode);
2073
+ const key = responseModeKey(message.payload);
2074
+ if (key !== null) {
2075
+ pendingResponses.set(key, {
2076
+ method: jsonRpcMethod(message.payload),
2077
+ responseMode,
2078
+ toolName: jsonRpcToolName(message.payload)
2079
+ });
2080
+ }
2081
+ await writeLine(childInput, JSON.stringify(message.payload));
2082
+ }
2083
+ childInput.end();
2084
+ }
2085
+ async function forwardCodegraphToClient(childOutput, output, pendingResponses, defaultResponseMode) {
2086
+ for await (const message of readStdioJsonRpcMessages(childOutput)) {
2087
+ if (message.kind === "parse_error") {
2088
+ writeStdioJsonRpcResponse(output, errorResponse(null, -32700, "Parse error", message.message), defaultResponseMode());
2089
+ continue;
2090
+ }
2091
+ const key = responseModeKey(message.payload);
2092
+ const pendingResponse = key === null ? undefined : pendingResponses.get(key);
2093
+ const responseMode = pendingResponse?.responseMode ?? defaultResponseMode();
2094
+ if (key !== null)
2095
+ pendingResponses.delete(key);
2096
+ writeStdioJsonRpcResponse(output, clarifyCodegraphResponse(message.payload, pendingResponse), responseMode);
2097
+ }
2098
+ }
2099
+ function responseModeKey(payload) {
2100
+ if (!isPlainRecord(payload) || !("id" in payload))
2101
+ return null;
2102
+ const id = jsonRpcId(payload["id"]);
2103
+ return `${typeof id}:${String(id)}`;
2104
+ }
2105
+ function jsonRpcMethod(payload) {
2106
+ if (!isPlainRecord(payload))
2107
+ return null;
2108
+ const method = payload["method"];
2109
+ return typeof method === "string" ? method : null;
2110
+ }
2111
+ function jsonRpcToolName(payload) {
2112
+ if (jsonRpcMethod(payload) !== "tools/call" || !isPlainRecord(payload))
2113
+ return null;
2114
+ const params = payload["params"];
2115
+ if (!isPlainRecord(params))
2116
+ return null;
2117
+ const name = params["name"];
2118
+ return typeof name === "string" ? name : null;
2119
+ }
2120
+ function clarifyCodegraphResponse(payload, pendingResponse) {
2121
+ if (pendingResponse?.method === "tools/list")
2122
+ return clarifyCodegraphToolsList(payload);
2123
+ if (pendingResponse?.method === "tools/call" && pendingResponse.toolName === "codegraph_node") {
2124
+ return clarifyCodegraphNodeCallResult(payload);
2125
+ }
2126
+ return payload;
2127
+ }
2128
+ function clarifyCodegraphToolsList(payload) {
2129
+ if (!isPlainRecord(payload))
2130
+ return payload;
2131
+ const result = payload["result"];
2132
+ if (!isPlainRecord(result) || !Array.isArray(result["tools"]))
2133
+ return payload;
2134
+ let changed = false;
2135
+ const tools = result["tools"].map((tool) => {
2136
+ if (!isPlainRecord(tool) || tool["name"] !== "codegraph_node")
2137
+ return tool;
2138
+ if (!hasCodegraphNodeContractMetadata(tool))
2139
+ return tool;
2140
+ changed = true;
2141
+ return clarifyCodegraphNodeTool(tool);
2142
+ });
2143
+ if (!changed)
2144
+ return payload;
2145
+ return { ...payload, result: { ...result, tools } };
2146
+ }
2147
+ function clarifyCodegraphNodeTool(tool) {
2148
+ const clarified = {
2149
+ ...tool,
2150
+ description: CODEGRAPH_NODE_DESCRIPTION
2151
+ };
2152
+ const inputSchema = tool["inputSchema"];
2153
+ if (isPlainRecord(inputSchema))
2154
+ clarified["inputSchema"] = clarifyCodegraphNodeInputSchema(inputSchema);
2155
+ return clarified;
2156
+ }
2157
+ function hasCodegraphNodeContractMetadata(tool) {
2158
+ if (typeof tool["description"] === "string")
2159
+ return true;
2160
+ const inputSchema = tool["inputSchema"];
2161
+ if (!isPlainRecord(inputSchema))
2162
+ return false;
2163
+ const properties = inputSchema["properties"];
2164
+ return isPlainRecord(properties) && isPlainRecord(properties["includeCode"]);
2165
+ }
2166
+ function clarifyCodegraphNodeInputSchema(inputSchema) {
2167
+ const properties = inputSchema["properties"];
2168
+ if (!isPlainRecord(properties))
2169
+ return inputSchema;
2170
+ const includeCode = properties["includeCode"];
2171
+ if (!isPlainRecord(includeCode))
2172
+ return inputSchema;
2173
+ return {
2174
+ ...inputSchema,
2175
+ properties: {
2176
+ ...properties,
2177
+ includeCode: {
2178
+ ...includeCode,
2179
+ description: CODEGRAPH_NODE_INCLUDE_CODE_DESCRIPTION
2180
+ }
2181
+ }
2182
+ };
2183
+ }
2184
+ function clarifyCodegraphNodeCallResult(payload) {
2185
+ if (!isPlainRecord(payload))
2186
+ return payload;
2187
+ const result = payload["result"];
2188
+ if (!isPlainRecord(result) || !Array.isArray(result["content"]))
2189
+ return payload;
2190
+ let changed = false;
2191
+ const content = result["content"].map((item) => {
2192
+ if (!isPlainRecord(item) || item["type"] !== "text" || typeof item["text"] !== "string")
2193
+ return item;
2194
+ const text = clarifyContainerOutlineGuidance(item["text"]);
2195
+ if (text === item["text"])
2196
+ return item;
2197
+ changed = true;
2198
+ return { ...item, text };
2199
+ });
2200
+ if (!changed)
2201
+ return payload;
2202
+ return { ...payload, result: { ...result, content } };
2203
+ }
2204
+ function clarifyContainerOutlineGuidance(text) {
2205
+ if (!text.includes("Structural outline only"))
2206
+ return text;
2207
+ return text.replace(/Structural outline only[^\n]*(?:\n[^\n]*(?:Read|read)[^\n]*)?/g, CODEGRAPH_CONTAINER_OUTLINE_GUIDANCE);
2208
+ }
2209
+ async function writeLine(output, line) {
2210
+ if (output.write(`${line}
2211
+ `))
2212
+ return;
2213
+ await new Promise((resolveDrain, reject) => {
2214
+ output.once("drain", resolveDrain);
2215
+ output.once("error", reject);
2216
+ });
2217
+ }
2218
+
1933
2219
  // src/mcp-unavailable.ts
1934
2220
  async function runUnavailableCodegraphMcpServer(options) {
1935
2221
  await runJsonRpcStdioServer({
@@ -1976,18 +2262,24 @@ function requestedProtocolVersion(params) {
1976
2262
  return params["protocolVersion"];
1977
2263
  }
1978
2264
 
2265
+ // src/session-start-worker.ts
2266
+ var SESSION_START_CWD_ENV = "OMO_CODEGRAPH_SESSION_START_CWD";
2267
+ var WINDOWS_CMD_EXTENSIONS2 = new Set([".bat", ".cmd"]);
2268
+ var WINDOWS_NODE_SCRIPT_EXTENSIONS2 = new Set([".cjs", ".js", ".mjs"]);
2269
+
1979
2270
  // src/serve.ts
1980
2271
  var CODEGRAPH_SKIP_HINT = `CodeGraph MCP skipped: codegraph binary not found. Install CodeGraph or set OMO_CODEGRAPH_BIN.
1981
2272
  `;
1982
2273
  var CODEGRAPH_DISABLED_HINT = `CodeGraph MCP skipped: disabled by OMO SOT config. Set [codex].codegraph.enabled=true to enable it.
1983
2274
  `;
1984
2275
  var CODEGRAPH_VERSION = "1.0.1";
1985
- var WINDOWS_CMD_EXTENSIONS = new Set([".bat", ".cmd"]);
1986
- var WINDOWS_NODE_SCRIPT_EXTENSIONS = new Set([".cjs", ".js", ".mjs"]);
2276
+ var PROJECT_CWD_ENV_KEYS = ["OMO_CODEGRAPH_PROJECT_CWD", SESSION_START_CWD_ENV, "PWD"];
1987
2277
  async function runCodegraphServe(options = {}) {
1988
2278
  const env = options.env ?? processEnv;
1989
2279
  const homeDir = options.homeDir ?? homedir6();
1990
- const config = options.config ?? getCodexOmoConfig({ cwd: options.cwd ?? processCwd(), env, homeDir });
2280
+ const wrapperCwd = options.cwd ?? processCwd();
2281
+ const projectCwd = resolveProjectCwd(env, wrapperCwd);
2282
+ const config = options.config ?? getCodexOmoConfig({ cwd: projectCwd, env, homeDir });
1991
2283
  const codegraphConfig = config.codegraph ?? {};
1992
2284
  if (codegraphConfig.enabled === false) {
1993
2285
  return runUnavailableMcp(CODEGRAPH_DISABLED_HINT, options);
@@ -2019,15 +2311,16 @@ async function runCodegraphServe(options = {}) {
2019
2311
  if (codegraphCommandRequiresSupportedLocalNode(resolution) && !nodeSupport.supported) {
2020
2312
  return runUnavailableMcp(buildCodegraphNodeSkipHint(nodeSupport), options);
2021
2313
  }
2022
- const runProcess = options.runProcess ?? runChildProcess;
2314
+ const runProcess = options.runProcess ?? runBridgedCodegraphProcess;
2023
2315
  const codegraphEnv = codegraphEnvForConfig(trustedInstallDir, homeDir, options.buildEnv);
2024
- const mergedEnv = {
2025
- ...env,
2026
- ...codegraphEnv
2027
- };
2316
+ const mergedEnv = buildCodegraphChildEnv({ ambientEnv: env, codegraphEnv, runtimeEnv: env });
2028
2317
  return runProcess(resolution.command, [...resolution.argsPrefix, "serve", "--mcp"], {
2318
+ cwd: projectCwd,
2029
2319
  env: mergedEnv,
2030
- stdio: "inherit"
2320
+ input: options.stdin ?? processStdin,
2321
+ output: options.stdout ?? processStdout,
2322
+ stderr: options.stderr ?? processStderr,
2323
+ stdio: "pipe"
2031
2324
  });
2032
2325
  }
2033
2326
  async function runUnavailableMcp(reason, options) {
@@ -2069,6 +2362,17 @@ function codegraphEnvForConfig(trustedInstallDir, homeDir, buildEnv) {
2069
2362
  const env = buildEnv?.({ homeDir }) ?? buildCodegraphEnv({ homeDir });
2070
2363
  return trustedInstallDir === undefined ? env : { ...env, CODEGRAPH_INSTALL_DIR: trustedInstallDir };
2071
2364
  }
2365
+ function resolveProjectCwd(env, fallback) {
2366
+ for (const key of PROJECT_CWD_ENV_KEYS) {
2367
+ const candidate = env[key]?.trim();
2368
+ if (candidate === undefined || candidate.length === 0)
2369
+ continue;
2370
+ const resolved = resolve2(candidate);
2371
+ if (existsSync5(resolved))
2372
+ return resolved;
2373
+ }
2374
+ return resolve2(fallback);
2375
+ }
2072
2376
  function provisionedBinFromInstallDir(installDir) {
2073
2377
  if (installDir === undefined)
2074
2378
  return null;
@@ -2078,32 +2382,6 @@ function provisionedBinFromInstallDir(installDir) {
2078
2382
  async function runCodegraphServeCli() {
2079
2383
  process.exitCode = await runCodegraphServe();
2080
2384
  }
2081
- async function runChildProcess(command, args, options) {
2082
- const invocation = resolveServeProcessInvocation(command, args);
2083
- const child = spawn(invocation.command, invocation.args, { env: options.env, stdio: options.stdio });
2084
- return new Promise((resolve3, reject) => {
2085
- child.once("error", reject);
2086
- child.once("exit", (code, signal) => {
2087
- if (code !== null) {
2088
- resolve3(code);
2089
- return;
2090
- }
2091
- resolve3(signal === null ? 0 : 1);
2092
- });
2093
- });
2094
- }
2095
- function resolveServeProcessInvocation(command, args, platform = process.platform) {
2096
- if (platform !== "win32")
2097
- return { args: [...args], command };
2098
- const extension = extname(command).toLowerCase();
2099
- if (WINDOWS_NODE_SCRIPT_EXTENSIONS.has(extension)) {
2100
- return { args: [command, ...args], command: processExecPath };
2101
- }
2102
- if (WINDOWS_CMD_EXTENSIONS.has(extension)) {
2103
- return { args: ["/d", "/s", "/c", command, ...args], command: "cmd.exe" };
2104
- }
2105
- return { args: [...args], command };
2106
- }
2107
2385
  if (isDirectInvocation(process.argv[1])) {
2108
2386
  runCodegraphServeCli().catch((error) => {
2109
2387
  processStderr.write(`${error instanceof Error ? error.stack ?? error.message : String(error)}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-codegraph",
3
- "version": "4.13.0",
3
+ "version": "4.14.1",
4
4
  "description": "Codex plugin MCP wrapper for CodeGraph.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -15,7 +15,7 @@
15
15
  ],
16
16
  "scripts": {
17
17
  "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && bun build src/serve.ts --target node --format esm --outfile dist/serve.js && bun build src/cli.ts --target node --format esm --outfile dist/cli.js",
18
- "test": "bun test test/*.test.ts",
18
+ "test": "bun test ./test",
19
19
  "typecheck": "tsc --noEmit"
20
20
  },
21
21
  "devDependencies": {
@@ -9,7 +9,7 @@ import type {
9
9
  import type { CodegraphWorkspacePreparation as SharedCodegraphWorkspacePreparation } from "../../../../../utils/src/codegraph/workspace.ts";
10
10
  import type { CodegraphConfig as SharedCodegraphConfig } from "../../../../../utils/src/omo-config.ts";
11
11
 
12
- export type SessionStartAction = "skipped-disabled" | "spawned";
12
+ export type SessionStartAction = "skipped-disabled" | "skipped-initialized" | "spawned";
13
13
  export type PostToolUseAction = "emitted-guidance" | "skipped";
14
14
  export type WorkerAction = "failed" | "initialized" | "skipped-disabled" | "skipped-status" | "skipped-unavailable" | "skipped-unsupported-node" | "synced";
15
15
 
@@ -74,6 +74,12 @@ export interface SessionStartHookOptions {
74
74
  readonly cwd?: string;
75
75
  readonly env?: Record<string, string | undefined>;
76
76
  readonly spawnWorker?: (invocation: WorkerSpawnInvocation) => void;
77
+ readonly statusProbe?: (options: {
78
+ readonly env: Record<string, string | undefined>;
79
+ readonly homeDir: string;
80
+ readonly projectRoot: string;
81
+ readonly trustedCodegraphInstallDir?: string;
82
+ }) => Promise<boolean>;
77
83
  readonly stdin?: Readable & { readonly isTTY?: boolean };
78
84
  readonly stdout?: HookStdout;
79
85
  readonly workerCliPath?: string;
@@ -1,12 +1,15 @@
1
- import { spawn } from "node:child_process";
1
+ import { execFile, spawn } from "node:child_process";
2
2
  import { homedir } from "node:os";
3
+ import { join } from "node:path";
3
4
  import { cwd as processCwd, env as processEnv, stdin as processStdin, stdout as processStdout } from "node:process";
4
5
  import type { Readable } from "node:stream";
5
6
  import { fileURLToPath } from "node:url";
6
7
 
8
+ import { buildCodegraphChildEnv, buildCodegraphEnv } from "../../../../../utils/src/codegraph/env.ts";
7
9
  import { buildCodegraphInitGuidanceForToolResult } from "../../../../../utils/src/codegraph/guidance.ts";
10
+ import { resolveCodegraphCommand } from "../../../../../utils/src/codegraph/resolve.ts";
8
11
  import { getCodexOmoConfig } from "../../../shared/src/config-loader.ts";
9
- import { SESSION_START_CWD_ENV } from "./session-start-worker.js";
12
+ import { resolveCodegraphCommandInvocation, SESSION_START_CWD_ENV } from "./session-start-worker.js";
10
13
  import type {
11
14
  HookStdout,
12
15
  PostToolUseHookOptions,
@@ -38,6 +41,7 @@ export type {
38
41
  export { resolveCodegraphCommandInvocation, runCodegraphSessionStartWorker } from "./session-start-worker.js";
39
42
 
40
43
  export const CODEGRAPH_SESSION_START_NOTICE = "LazyCodex CodeGraph bootstrap scheduled in background";
44
+ const STATUS_PROBE_TIMEOUT_MS = 2_000;
41
45
 
42
46
  export async function runCodegraphSessionStartHook(options: SessionStartHookOptions = {}): Promise<number> {
43
47
  return (await executeCodegraphSessionStartHook(options)).exitCode;
@@ -58,15 +62,102 @@ export async function executeCodegraphSessionStartHook(options: SessionStartHook
58
62
  return { action: "skipped-disabled", exitCode: 0 };
59
63
  }
60
64
 
65
+ const isInitialized = await (options.statusProbe ?? isCodegraphProjectInitialized)({
66
+ env,
67
+ homeDir,
68
+ projectRoot,
69
+ ...(config.trustedCodegraphInstallDir === undefined ? {} : { trustedCodegraphInstallDir: config.trustedCodegraphInstallDir }),
70
+ });
71
+ if (isInitialized) {
72
+ return { action: "skipped-initialized", exitCode: 0 };
73
+ }
74
+
61
75
  (options.spawnWorker ?? spawnDetachedWorker)({
62
76
  args: [options.workerCliPath ?? defaultWorkerCliPath(), "hook", "session-start-worker"],
63
77
  command: process.execPath,
64
- env: { ...env, [SESSION_START_CWD_ENV]: projectRoot },
78
+ env: buildCodegraphChildEnv({
79
+ ambientEnv: env,
80
+ codegraphEnv: { [SESSION_START_CWD_ENV]: projectRoot },
81
+ runtimeEnv: env,
82
+ }),
65
83
  });
66
84
  writeHookJson(options.stdout ?? processStdout);
67
85
  return { action: "spawned", exitCode: 0 };
68
86
  }
69
87
 
88
+ async function isCodegraphProjectInitialized(options: {
89
+ readonly env: Record<string, string | undefined>;
90
+ readonly homeDir: string;
91
+ readonly projectRoot: string;
92
+ readonly trustedCodegraphInstallDir?: string;
93
+ }): Promise<boolean> {
94
+ const resolved = resolveCodegraphCommand({
95
+ env: options.env,
96
+ homeDir: options.homeDir,
97
+ provisioned: () => provisionedBinFromInstallDir(options.trustedCodegraphInstallDir),
98
+ });
99
+ if (!resolved.exists) return false;
100
+
101
+ const invocation = resolveCodegraphCommandInvocation(resolved.command, [...resolved.argsPrefix, "status", "--json"]);
102
+ const codegraphEnv = {
103
+ ...buildCodegraphEnv({ homeDir: options.homeDir }),
104
+ ...(options.trustedCodegraphInstallDir === undefined ? {} : { CODEGRAPH_INSTALL_DIR: options.trustedCodegraphInstallDir }),
105
+ };
106
+ const status = await runStatusProbe(
107
+ options.projectRoot,
108
+ invocation.command,
109
+ invocation.args,
110
+ buildCodegraphChildEnv({ ambientEnv: options.env, codegraphEnv, runtimeEnv: options.env }),
111
+ );
112
+ if (status.exitCode !== 0 || status.timedOut) return false;
113
+ return codegraphStatusSaysInitialized(status.stdout);
114
+ }
115
+
116
+ function runStatusProbe(
117
+ projectRoot: string,
118
+ command: string,
119
+ args: readonly string[],
120
+ env: Record<string, string>,
121
+ ): Promise<{ readonly exitCode: number; readonly stdout: string; readonly timedOut: boolean }> {
122
+ return new Promise((resolveProbe) => {
123
+ execFile(
124
+ command,
125
+ [...args],
126
+ {
127
+ cwd: projectRoot,
128
+ encoding: "utf8",
129
+ env,
130
+ maxBuffer: 1024 * 1024,
131
+ timeout: STATUS_PROBE_TIMEOUT_MS,
132
+ windowsHide: true,
133
+ },
134
+ (error, stdout) => {
135
+ if (error === null) {
136
+ resolveProbe({ exitCode: 0, stdout: toOutputText(stdout), timedOut: false });
137
+ return;
138
+ }
139
+ resolveProbe({ exitCode: resolveExitCode(error), stdout: toOutputText(stdout), timedOut: error.killed === true });
140
+ },
141
+ );
142
+ });
143
+ }
144
+
145
+ function codegraphStatusSaysInitialized(stdout: string): boolean {
146
+ const parsed = parseJson(stdout);
147
+ if (!isRecord(parsed)) return false;
148
+ const initialized = parsed["initialized"] ?? parsed["isInitialized"] ?? parsed["ready"];
149
+ if (typeof initialized === "boolean") return initialized;
150
+ const status = parsed["status"];
151
+ if (typeof status !== "string") return false;
152
+ const normalized = status.toLowerCase();
153
+ return (normalized.includes("initialized") || normalized.includes("ready")) && !normalized.includes("not initialized") && !normalized.includes("uninitialized");
154
+ }
155
+
156
+ function provisionedBinFromInstallDir(installDir: string | undefined): string | null {
157
+ if (installDir === undefined) return null;
158
+ return join(installDir, "bin", process.platform === "win32" ? "codegraph.cmd" : "codegraph");
159
+ }
160
+
70
161
  export async function executeCodegraphPostToolUseHook(options: PostToolUseHookOptions = {}): Promise<PostToolUseHookResult> {
71
162
  const env = options.env ?? processEnv;
72
163
  const input = await readHookInput(options.stdin ?? processStdin);
@@ -111,6 +202,15 @@ function resolveHomeDir(env: Record<string, string | undefined>): string {
111
202
  return env["HOME"] ?? env["USERPROFILE"] ?? homedir();
112
203
  }
113
204
 
205
+ function resolveExitCode(error: Error): number {
206
+ if ("code" in error && typeof error.code === "number") return error.code;
207
+ return 1;
208
+ }
209
+
210
+ function toOutputText(value: string | Buffer): string {
211
+ return Buffer.isBuffer(value) ? value.toString("utf8") : value;
212
+ }
213
+
114
214
  function resolveProjectRoot(input: unknown, fallback: string): string {
115
215
  if (!isRecord(input)) return fallback;
116
216
  const cwd = input["cwd"];