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
@@ -0,0 +1,51 @@
1
+ # GitHub PR Attachment Uploads
2
+
3
+ Use this reference when a PR or issue body needs screenshots or other short-lived evidence images without committing them, creating a release asset, or using an external image host.
4
+
5
+ ## Contract
6
+
7
+ - Upload through GitHub's own web attachment flow and use the resulting `https://github.com/user-attachments/assets/<uuid>` URL.
8
+ - Keep temporary files under `/tmp` or an untracked evidence directory such as `.omo/evidence/...`.
9
+ - Never commit generated screenshots, terminal PNGs, upload scripts with secrets, cookies, tokens, S3 form fields, or copied request headers.
10
+ - Never use GitHub Releases for PR evidence images.
11
+ - Never use external image hosters.
12
+
13
+ ## Direct Upload Flow
14
+
15
+ The flow depends on an authenticated GitHub web session, not only a `gh` API token. GitHub's same-site cookie/session requirements mean the requests must carry the browser session cookies for `github.com`, the expected same-site/referrer context, and the CSRF tokens issued for the current PR or issue page. Treat every cookie and token as a secret.
16
+
17
+ 1. Open the target PR or issue page in an authenticated GitHub web session.
18
+ 2. Read the page's file-attachment CSRF token and repository id from the same page/session context.
19
+ 3. `POST https://github.com/upload/policies/assets` with:
20
+
21
+ ```json
22
+ {
23
+ "repository_id": "REPOSITORY_ID",
24
+ "name": "terminal.png",
25
+ "size": 12345,
26
+ "content_type": "image/png",
27
+ "authenticity_token": "FILE_ATTACHMENT_CSRF_TOKEN"
28
+ }
29
+ ```
30
+
31
+ 4. Upload the file bytes to S3 using the policy response's returned upload URL and form fields exactly as returned.
32
+ 5. `PUT https://github.com/upload/assets/:id` with the returned `asset_upload_authenticity_token`.
33
+ 6. Use only the final `https://github.com/user-attachments/assets/<uuid>` URL in the PR body.
34
+
35
+ ## Secret Handling
36
+
37
+ Do not print cookies, authenticity tokens, S3 fields, authorization headers, or raw browser storage. A helper may print only the final user-attachments URL and non-secret file metadata such as filename, byte size, and content type. If a temporary script is needed, write it under `/tmp`, inspect it for accidental logging, and delete it after updating the PR body.
38
+
39
+ For PR body editing, write the body to `/tmp/pr-body.md`, inspect it, then pass it to `gh pr edit --body-file /tmp/pr-body.md`. The body should include the final attachment URLs and local evidence paths, but never the upload transaction details.
40
+
41
+ ## Evidence Pattern
42
+
43
+ ```markdown
44
+ ## Visual Evidence
45
+
46
+ - ANSI terminal rendering: https://github.com/user-attachments/assets/<uuid>
47
+ - Long-line wrapping: https://github.com/user-attachments/assets/<uuid>
48
+ - Local evidence: `.omo/evidence/20260623-web-terminal-rendering/`
49
+ ```
50
+
51
+ If the authenticated browser session is unavailable, leave the PR ready with local evidence paths and state the blocker. Do not fall back to releases or external hosting.
@@ -0,0 +1,81 @@
1
+ # Web Terminal Visual QA
2
+
3
+ Use `script/qa/web-terminal-visual-qa.mjs` whenever QA needs TUI visual evidence. It turns a terminal or tmux transcript into browser-rendered evidence so PRs can carry the same artifacts as web UI visual QA.
4
+
5
+ ## Evidence Contract
6
+
7
+ Each run writes these files under the chosen evidence directory:
8
+
9
+ - `terminal.txt`: redacted plain terminal text for review and assertions.
10
+ - `terminal-ansi.txt`: redacted ANSI capture when available.
11
+ - `terminal.html`: browser-renderable terminal frame that preserves ANSI colors and SGR styles.
12
+ - `terminal.png`: Chrome/Chromium screenshot with the same ANSI styling, unless `--no-browser` is used.
13
+ - `metadata.json`: connector, source, output paths, and cleanup receipt.
14
+
15
+ The PR should cite `metadata.json` and attach or link `terminal.png` for OpenCode/Codex TUI proof. For PR-body image hosting, use GitHub user attachments as documented in [docs/reference/github-attachment-upload.md](github-attachment-upload.md); do not commit temporary PNGs, use releases, or use external image hosts.
16
+
17
+ ## Redaction Contract
18
+
19
+ The helper redacts terminal content before writing `terminal.txt`, `terminal-ansi.txt`, `terminal.html`, or `terminal.png`. Built-in rules cover common authorization headers, token/password/key assignments, GitHub tokens, and OpenAI-style `sk-...` tokens.
20
+
21
+ Add exact local values with `--redact <literal>` and project-specific patterns with `--redact-regex <expr>`:
22
+
23
+ ```bash
24
+ node script/qa/web-terminal-visual-qa.mjs \
25
+ --title "Codex TUI QA" \
26
+ --from-file .omo/evidence/run/capture.txt \
27
+ --evidence-dir .omo/evidence/run/codex-web-terminal \
28
+ --redact "$LOCAL_TOKEN" \
29
+ --redact-regex 'session_[A-Za-z0-9]+'
30
+ ```
31
+
32
+ Custom `--redact-regex` rules replace the full regex match, even when the expression contains capture groups. Prefix-preserving redaction is reserved for the built-in authorization and key-assignment rules.
33
+
34
+ Do not rely on screenshots to hide secrets. If a capture might include cookies, auth headers, raw env dumps, launchd environments, provider keys, or browser storage, redact first or summarize the run instead of storing the transcript.
35
+
36
+ ## Replay An Existing Capture
37
+
38
+ Use this path for maximum OS compatibility, including Windows hosts without tmux:
39
+
40
+ ```bash
41
+ node script/qa/web-terminal-visual-qa.mjs \
42
+ --title "Codex TUI QA" \
43
+ --from-file .omo/evidence/run/capture.txt \
44
+ --evidence-dir .omo/evidence/run/codex-web-terminal
45
+ ```
46
+
47
+ Long terminal lines wrap by default for readable PR evidence. Pass `--no-wrap` only when horizontal scrolling is part of the behavior under test.
48
+
49
+ ## Run Through The PTY Connector
50
+
51
+ Use this when `tmux` is available on macOS/Linux or a Windows environment that provides tmux, such as Git Bash/MSYS2:
52
+
53
+ ```bash
54
+ node script/qa/web-terminal-visual-qa.mjs \
55
+ --title "OpenCode TUI QA" \
56
+ --command "opencode --help" \
57
+ --source-label "opencode help smoke" \
58
+ --cwd "$PWD" \
59
+ --evidence-dir .omo/evidence/run/opencode-web-terminal
60
+ ```
61
+
62
+ `--command` starts a short-lived tmux-backed PTY connector, captures the pane, renders the web evidence, then records a `tmux kill-session` cleanup receipt in `metadata.json`. The raw --command string is process data and may contain inline secrets, so it is never persisted to metadata; use `--source-label` for a reviewer-safe description.
63
+
64
+ ## OS Notes
65
+
66
+ - macOS/Linux: prefer `--command` when `tmux` is installed; otherwise replay a saved pane with `--from-file`.
67
+ - Windows: prefer `--from-file` for native shells. Git Bash/MSYS2 environments with tmux may use `--command`.
68
+ - Windows-native ConPTY live capture should plug into this same artifact and metadata contract before becoming required.
69
+
70
+ ## QA Guidance
71
+
72
+ For OpenCode/Codex QA, pair the harness-specific smoke with this helper:
73
+
74
+ 1. Drive the TUI through the normal QA skill or script.
75
+ 2. Capture the pane or use the helper's `--command` mode.
76
+ 3. Store the output under `.omo/evidence/<YYYYMMDD>-<slug>/`.
77
+ 4. Review `terminal.txt`, `terminal-ansi.txt`, and `metadata.json` for accidental secrets before citing them.
78
+ 5. Include `terminal.png`, `terminal.txt`, and `metadata.json` in the evidence summary.
79
+ 6. Verify cleanup receipts: no leftover tmux sessions, PIDs, ports, or temp state.
80
+
81
+ Tests alone are not TUI visual QA. The passing artifact is the rendered terminal evidence plus a binary observation, such as expected text present, no overflow, and no obvious border misalignment.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "4.13.0",
3
+ "version": "4.14.1",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -41,6 +41,12 @@
41
41
  "dist",
42
42
  "bin",
43
43
  "postinstall.mjs",
44
+ "script/qa/web-terminal-redaction.d.mts",
45
+ "script/qa/web-terminal-redaction.mjs",
46
+ "script/qa/web-terminal-renderer.mjs",
47
+ "script/qa/web-terminal-visual-qa.mjs",
48
+ "docs/reference/github-attachment-upload.md",
49
+ "docs/reference/web-terminal-visual-qa.md",
44
50
  ".opencode/command",
45
51
  ".opencode/skills",
46
52
  ".agents/command",
@@ -59,7 +65,20 @@
59
65
  "packages/omo-codex/marketplace.json",
60
66
  "packages/omo-codex/lazycodex-repository",
61
67
  "packages/omo-codex/plugin",
68
+ "packages/omo-codex/plugin/components/bootstrap/dist/cli.js",
69
+ "packages/omo-codex/plugin/components/bootstrap/scripts/bootstrap.ps1",
70
+ "packages/omo-codex/plugin/components/bootstrap/scripts/node-dispatch.ps1",
71
+ "packages/omo-codex/plugin/components/codegraph/dist/cli.js",
72
+ "packages/omo-codex/plugin/components/codegraph/dist/serve.js",
73
+ "packages/omo-codex/plugin/components/comment-checker/dist/cli.js",
74
+ "packages/omo-codex/plugin/components/git-bash/dist/cli.js",
75
+ "packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js",
76
+ "packages/omo-codex/plugin/components/lsp/dist/cli.js",
77
+ "packages/omo-codex/plugin/components/rules/dist/cli.js",
62
78
  "packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js",
79
+ "packages/omo-codex/plugin/components/teammode/dist/cli.js",
80
+ "packages/omo-codex/plugin/components/telemetry/dist/cli.js",
81
+ "packages/omo-codex/plugin/components/ultrawork/dist/cli.js",
63
82
  "packages/omo-codex/plugin/components/ulw-loop/dist/cli.js",
64
83
  "packages/omo-codex/plugin/.codex-plugin",
65
84
  "!packages/omo-codex/plugin/node_modules",
@@ -100,7 +119,7 @@
100
119
  "typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json",
101
120
  "typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
102
121
  "test": "bun test",
103
- "test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && bun run --cwd packages/omo-codex/plugin build && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
122
+ "test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && bun run --cwd packages/omo-codex/plugin build && npm --prefix packages/omo-codex/plugin/components/codegraph run typecheck && npm --prefix packages/omo-codex/plugin/components/codegraph test && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
104
123
  "test:windows-codex": "bun run test:codex",
105
124
  "build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build"
106
125
  },
@@ -172,18 +191,18 @@
172
191
  "typescript": "^6.0.3"
173
192
  },
174
193
  "optionalDependencies": {
175
- "oh-my-opencode-darwin-arm64": "4.13.0",
176
- "oh-my-opencode-darwin-x64": "4.13.0",
177
- "oh-my-opencode-darwin-x64-baseline": "4.13.0",
178
- "oh-my-opencode-linux-arm64": "4.13.0",
179
- "oh-my-opencode-linux-arm64-musl": "4.13.0",
180
- "oh-my-opencode-linux-x64": "4.13.0",
181
- "oh-my-opencode-linux-x64-baseline": "4.13.0",
182
- "oh-my-opencode-linux-x64-musl": "4.13.0",
183
- "oh-my-opencode-linux-x64-musl-baseline": "4.13.0",
184
- "oh-my-opencode-windows-arm64": "4.13.0",
185
- "oh-my-opencode-windows-x64": "4.13.0",
186
- "oh-my-opencode-windows-x64-baseline": "4.13.0"
194
+ "oh-my-opencode-darwin-arm64": "4.14.1",
195
+ "oh-my-opencode-darwin-x64": "4.14.1",
196
+ "oh-my-opencode-darwin-x64-baseline": "4.14.1",
197
+ "oh-my-opencode-linux-arm64": "4.14.1",
198
+ "oh-my-opencode-linux-arm64-musl": "4.14.1",
199
+ "oh-my-opencode-linux-x64": "4.14.1",
200
+ "oh-my-opencode-linux-x64-baseline": "4.14.1",
201
+ "oh-my-opencode-linux-x64-musl": "4.14.1",
202
+ "oh-my-opencode-linux-x64-musl-baseline": "4.14.1",
203
+ "oh-my-opencode-windows-arm64": "4.14.1",
204
+ "oh-my-opencode-windows-x64": "4.14.1",
205
+ "oh-my-opencode-windows-x64-baseline": "4.14.1"
187
206
  },
188
207
  "overrides": {
189
208
  "hono": "^4.12.18",
@@ -381,6 +381,8 @@ async function runMcpStdioServer(input, output, options = {}) {
381
381
  output,
382
382
  handler: handleGitBashMcpRequest,
383
383
  handlerOptions: options,
384
+ idleTimeoutMs: 0,
385
+ log: options.lifecycleLog,
384
386
  parseErrorResponse: () => errorResponse(null, -32601, "Method not found")
385
387
  });
386
388
  }
@@ -88,7 +88,10 @@ function wrap(proc: ChildProcess): SpawnedProcess {
88
88
 
89
89
  function killProcessTree(proc: ChildProcess, signal: NodeJS.Signals): void {
90
90
  if (process.platform === "win32" && proc.pid) {
91
- const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], { stdio: "ignore" });
91
+ const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
92
+ stdio: "ignore",
93
+ windowsHide: true,
94
+ });
92
95
  if (!result.error && result.status === 0) return;
93
96
  if (result.error) reportKillError("windows process tree kill", result.error);
94
97
  }
@@ -55,6 +55,7 @@ export async function runMcpStdioServer(
55
55
  await runJsonRpcStdioServer({
56
56
  input,
57
57
  output,
58
+ idleTimeoutMs: 0,
58
59
  handler: handleLspMcpRequest,
59
60
  handlerOptions: undefined,
60
61
  });
@@ -644,7 +644,10 @@ function wrap(proc) {
644
644
  }
645
645
  function killProcessTree(proc, signal) {
646
646
  if (process.platform === "win32" && proc.pid) {
647
- const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], { stdio: "ignore" });
647
+ const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
648
+ stdio: "ignore",
649
+ windowsHide: true
650
+ });
648
651
  if (!result.error && result.status === 0)
649
652
  return;
650
653
  if (result.error)
@@ -3402,6 +3405,7 @@ function unlinkQuietly(path) {
3402
3405
  var PROBE_TIMEOUT_MS = 500;
3403
3406
  var DEFAULT_READY_TIMEOUT_MS = 5000;
3404
3407
  var DEFAULT_POLL_INTERVAL_MS = 100;
3408
+ var CODEX_LSP_DAEMON_CLI_ENV = "CODEX_LSP_DAEMON_CLI";
3405
3409
 
3406
3410
  class DaemonUnreachableError extends Error {
3407
3411
  constructor(socketPath) {
@@ -3462,7 +3466,7 @@ function spawnDaemonProcess(paths) {
3462
3466
  mkdirSync3(dirname5(paths.log), { recursive: true });
3463
3467
  const logFd = openSync2(paths.log, "a");
3464
3468
  try {
3465
- const cliPath = fileURLToPath3(new URL("./cli.js", import.meta.url));
3469
+ const cliPath = resolveDaemonCliPath();
3466
3470
  const child = spawn2(execPath, [cliPath, "daemon"], {
3467
3471
  detached: true,
3468
3472
  stdio: ["ignore", logFd, logFd]
@@ -3472,6 +3476,12 @@ function spawnDaemonProcess(paths) {
3472
3476
  closeSync2(logFd);
3473
3477
  }
3474
3478
  }
3479
+ function resolveDaemonCliPath(env = process.env) {
3480
+ const override = env[CODEX_LSP_DAEMON_CLI_ENV]?.trim();
3481
+ if (override)
3482
+ return override;
3483
+ return fileURLToPath3(new URL("./cli.js", import.meta.url));
3484
+ }
3475
3485
  function defaultEnsureDaemonDeps() {
3476
3486
  return {
3477
3487
  probe: (socketPath) => probeSocket(socketPath),
@@ -3482,8 +3492,7 @@ function defaultEnsureDaemonDeps() {
3482
3492
  },
3483
3493
  spawnDaemon: (paths) => spawnDaemonProcess(paths),
3484
3494
  sleep: (ms) => new Promise((resolve6) => {
3485
- const timer = setTimeout(resolve6, ms);
3486
- timer.unref?.();
3495
+ setTimeout(resolve6, ms);
3487
3496
  }),
3488
3497
  now: () => Date.now()
3489
3498
  };
@@ -3496,6 +3505,7 @@ import { homedir as homedir3, tmpdir } from "node:os";
3496
3505
  import { join as join8 } from "node:path";
3497
3506
  var requireFromHere = createRequire(import.meta.url);
3498
3507
  var MAX_SOCKET_PATH_LENGTH = 100;
3508
+ var CODEX_LSP_DAEMON_VERSION_ENV = "CODEX_LSP_DAEMON_VERSION";
3499
3509
  function resolveDaemonVersion(requireFn = requireFromHere) {
3500
3510
  for (const candidate of ["./package.json", "../package.json"]) {
3501
3511
  try {
@@ -3517,7 +3527,7 @@ function daemonBaseDir(env = process.env) {
3517
3527
  const home = codexHome && codexHome.length > 0 ? codexHome : join8(homedir3(), ".codex");
3518
3528
  return join8(home, "codex-lsp", "daemon");
3519
3529
  }
3520
- function daemonPaths(env = process.env, version = resolveDaemonVersion()) {
3530
+ function daemonPaths(env = process.env, version = resolveDaemonVersionFromEnv(env) ?? resolveDaemonVersion()) {
3521
3531
  const dir = join8(daemonBaseDir(env), `v${version}`);
3522
3532
  return {
3523
3533
  version,
@@ -3528,6 +3538,10 @@ function daemonPaths(env = process.env, version = resolveDaemonVersion()) {
3528
3538
  log: join8(dir, "daemon.log")
3529
3539
  };
3530
3540
  }
3541
+ function resolveDaemonVersionFromEnv(env = process.env) {
3542
+ const version = env[CODEX_LSP_DAEMON_VERSION_ENV]?.trim();
3543
+ return version && version.length > 0 ? version : null;
3544
+ }
3531
3545
  function resolveSocketPath(dir, version) {
3532
3546
  const digest = createHash("sha256").update(dir).digest("hex").slice(0, 16);
3533
3547
  if (process.platform === "win32") {
@@ -3735,6 +3749,7 @@ async function runMcpStdioProxy(options = {}) {
3735
3749
  await runJsonRpcStdioServer({
3736
3750
  input,
3737
3751
  output,
3752
+ idleTimeoutMs: 0,
3738
3753
  handler: handleProxyRequest,
3739
3754
  handlerOptions: callOptions,
3740
3755
  onHandlerError: (error) => {
@@ -18,4 +18,5 @@ export interface EnsureDaemonOptions {
18
18
  export declare function ensureDaemonRunning(paths: DaemonPaths, deps?: EnsureDaemonDeps, options?: EnsureDaemonOptions): Promise<void>;
19
19
  export declare function probeSocket(socketPath: string, timeoutMs?: number): Promise<boolean>;
20
20
  export declare function spawnDaemonProcess(paths: DaemonPaths): void;
21
+ export declare function resolveDaemonCliPath(env?: NodeJS.ProcessEnv): string;
21
22
  export declare function defaultEnsureDaemonDeps(): EnsureDaemonDeps;
@@ -8,6 +8,7 @@ import { tryAcquireLock, unlinkQuietly } from "./lock.js";
8
8
  const PROBE_TIMEOUT_MS = 500;
9
9
  const DEFAULT_READY_TIMEOUT_MS = 5_000;
10
10
  const DEFAULT_POLL_INTERVAL_MS = 100;
11
+ const CODEX_LSP_DAEMON_CLI_ENV = "CODEX_LSP_DAEMON_CLI";
11
12
  export class DaemonUnreachableError extends Error {
12
13
  constructor(socketPath) {
13
14
  super(`LSP daemon did not become reachable at ${socketPath}`);
@@ -68,7 +69,7 @@ export function spawnDaemonProcess(paths) {
68
69
  mkdirSync(dirname(paths.log), { recursive: true });
69
70
  const logFd = openSync(paths.log, "a");
70
71
  try {
71
- const cliPath = fileURLToPath(new URL("./cli.js", import.meta.url));
72
+ const cliPath = resolveDaemonCliPath();
72
73
  const child = spawn(execPath, [cliPath, "daemon"], {
73
74
  detached: true,
74
75
  stdio: ["ignore", logFd, logFd],
@@ -79,6 +80,12 @@ export function spawnDaemonProcess(paths) {
79
80
  closeSync(logFd);
80
81
  }
81
82
  }
83
+ export function resolveDaemonCliPath(env = process.env) {
84
+ const override = env[CODEX_LSP_DAEMON_CLI_ENV]?.trim();
85
+ if (override)
86
+ return override;
87
+ return fileURLToPath(new URL("./cli.js", import.meta.url));
88
+ }
82
89
  export function defaultEnsureDaemonDeps() {
83
90
  return {
84
91
  probe: (socketPath) => probeSocket(socketPath),
@@ -89,8 +96,7 @@ export function defaultEnsureDaemonDeps() {
89
96
  },
90
97
  spawnDaemon: (paths) => spawnDaemonProcess(paths),
91
98
  sleep: (ms) => new Promise((resolve) => {
92
- const timer = setTimeout(resolve, ms);
93
- timer.unref?.();
99
+ setTimeout(resolve, ms);
94
100
  }),
95
101
  now: () => Date.now(),
96
102
  };
@@ -419,7 +419,10 @@ function wrap(proc) {
419
419
  }
420
420
  function killProcessTree(proc, signal) {
421
421
  if (process.platform === "win32" && proc.pid) {
422
- const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], { stdio: "ignore" });
422
+ const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
423
+ stdio: "ignore",
424
+ windowsHide: true
425
+ });
423
426
  if (!result.error && result.status === 0)
424
427
  return;
425
428
  if (result.error)
@@ -1482,6 +1485,7 @@ function unlinkQuietly(path) {
1482
1485
  var PROBE_TIMEOUT_MS = 500;
1483
1486
  var DEFAULT_READY_TIMEOUT_MS = 5000;
1484
1487
  var DEFAULT_POLL_INTERVAL_MS = 100;
1488
+ var CODEX_LSP_DAEMON_CLI_ENV = "CODEX_LSP_DAEMON_CLI";
1485
1489
 
1486
1490
  class DaemonUnreachableError extends Error {
1487
1491
  constructor(socketPath) {
@@ -1542,7 +1546,7 @@ function spawnDaemonProcess(paths) {
1542
1546
  mkdirSync2(dirname2(paths.log), { recursive: true });
1543
1547
  const logFd = openSync2(paths.log, "a");
1544
1548
  try {
1545
- const cliPath = fileURLToPath(new URL("./cli.js", import.meta.url));
1549
+ const cliPath = resolveDaemonCliPath();
1546
1550
  const child = spawn2(execPath, [cliPath, "daemon"], {
1547
1551
  detached: true,
1548
1552
  stdio: ["ignore", logFd, logFd]
@@ -1552,6 +1556,12 @@ function spawnDaemonProcess(paths) {
1552
1556
  closeSync2(logFd);
1553
1557
  }
1554
1558
  }
1559
+ function resolveDaemonCliPath(env = process.env) {
1560
+ const override = env[CODEX_LSP_DAEMON_CLI_ENV]?.trim();
1561
+ if (override)
1562
+ return override;
1563
+ return fileURLToPath(new URL("./cli.js", import.meta.url));
1564
+ }
1555
1565
  function defaultEnsureDaemonDeps() {
1556
1566
  return {
1557
1567
  probe: (socketPath) => probeSocket(socketPath),
@@ -1562,8 +1572,7 @@ function defaultEnsureDaemonDeps() {
1562
1572
  },
1563
1573
  spawnDaemon: (paths) => spawnDaemonProcess(paths),
1564
1574
  sleep: (ms) => new Promise((resolve2) => {
1565
- const timer = setTimeout(resolve2, ms);
1566
- timer.unref?.();
1575
+ setTimeout(resolve2, ms);
1567
1576
  }),
1568
1577
  now: () => Date.now()
1569
1578
  };
@@ -1576,6 +1585,7 @@ import { homedir, tmpdir } from "node:os";
1576
1585
  import { join as join2 } from "node:path";
1577
1586
  var requireFromHere = createRequire(import.meta.url);
1578
1587
  var MAX_SOCKET_PATH_LENGTH = 100;
1588
+ var CODEX_LSP_DAEMON_VERSION_ENV = "CODEX_LSP_DAEMON_VERSION";
1579
1589
  function resolveDaemonVersion(requireFn = requireFromHere) {
1580
1590
  for (const candidate of ["./package.json", "../package.json"]) {
1581
1591
  try {
@@ -1597,7 +1607,7 @@ function daemonBaseDir(env = process.env) {
1597
1607
  const home = codexHome && codexHome.length > 0 ? codexHome : join2(homedir(), ".codex");
1598
1608
  return join2(home, "codex-lsp", "daemon");
1599
1609
  }
1600
- function daemonPaths(env = process.env, version = resolveDaemonVersion()) {
1610
+ function daemonPaths(env = process.env, version = resolveDaemonVersionFromEnv(env) ?? resolveDaemonVersion()) {
1601
1611
  const dir = join2(daemonBaseDir(env), `v${version}`);
1602
1612
  return {
1603
1613
  version,
@@ -1608,6 +1618,10 @@ function daemonPaths(env = process.env, version = resolveDaemonVersion()) {
1608
1618
  log: join2(dir, "daemon.log")
1609
1619
  };
1610
1620
  }
1621
+ function resolveDaemonVersionFromEnv(env = process.env) {
1622
+ const version = env[CODEX_LSP_DAEMON_VERSION_ENV]?.trim();
1623
+ return version && version.length > 0 ? version : null;
1624
+ }
1611
1625
  function resolveSocketPath(dir, version) {
1612
1626
  const digest = createHash("sha256").update(dir).digest("hex").slice(0, 16);
1613
1627
  if (process.platform === "win32") {
@@ -3728,6 +3742,7 @@ async function runMcpStdioProxy(options = {}) {
3728
3742
  await runJsonRpcStdioServer({
3729
3743
  input,
3730
3744
  output,
3745
+ idleTimeoutMs: 0,
3731
3746
  handler: handleProxyRequest,
3732
3747
  handlerOptions: callOptions,
3733
3748
  onHandlerError: (error) => {
@@ -9,3 +9,4 @@ export interface DaemonPaths {
9
9
  export declare function resolveDaemonVersion(requireFn?: (id: string) => unknown): string;
10
10
  export declare function daemonBaseDir(env?: NodeJS.ProcessEnv): string;
11
11
  export declare function daemonPaths(env?: NodeJS.ProcessEnv, version?: string): DaemonPaths;
12
+ export declare function resolveDaemonVersionFromEnv(env?: NodeJS.ProcessEnv): string | null;
@@ -4,6 +4,7 @@ import { homedir, tmpdir } from "node:os";
4
4
  import { join } from "node:path";
5
5
  const requireFromHere = createRequire(import.meta.url);
6
6
  const MAX_SOCKET_PATH_LENGTH = 100;
7
+ const CODEX_LSP_DAEMON_VERSION_ENV = "CODEX_LSP_DAEMON_VERSION";
7
8
  export function resolveDaemonVersion(requireFn = requireFromHere) {
8
9
  for (const candidate of ["./package.json", "../package.json"]) {
9
10
  try {
@@ -26,7 +27,7 @@ export function daemonBaseDir(env = process.env) {
26
27
  const home = codexHome && codexHome.length > 0 ? codexHome : join(homedir(), ".codex");
27
28
  return join(home, "codex-lsp", "daemon");
28
29
  }
29
- export function daemonPaths(env = process.env, version = resolveDaemonVersion()) {
30
+ export function daemonPaths(env = process.env, version = resolveDaemonVersionFromEnv(env) ?? resolveDaemonVersion()) {
30
31
  const dir = join(daemonBaseDir(env), `v${version}`);
31
32
  return {
32
33
  version,
@@ -37,6 +38,10 @@ export function daemonPaths(env = process.env, version = resolveDaemonVersion())
37
38
  log: join(dir, "daemon.log"),
38
39
  };
39
40
  }
41
+ export function resolveDaemonVersionFromEnv(env = process.env) {
42
+ const version = env[CODEX_LSP_DAEMON_VERSION_ENV]?.trim();
43
+ return version && version.length > 0 ? version : null;
44
+ }
40
45
  function resolveSocketPath(dir, version) {
41
46
  const digest = createHash("sha256").update(dir).digest("hex").slice(0, 16);
42
47
  if (process.platform === "win32") {
@@ -12,6 +12,7 @@ export async function runMcpStdioProxy(options = {}) {
12
12
  await runJsonRpcStdioServer({
13
13
  input,
14
14
  output,
15
+ idleTimeoutMs: 0,
15
16
  handler: handleProxyRequest,
16
17
  handlerOptions: callOptions,
17
18
  onHandlerError: (error) => {
@@ -421,7 +421,10 @@ function wrap(proc) {
421
421
  }
422
422
  function killProcessTree(proc, signal) {
423
423
  if (process.platform === "win32" && proc.pid) {
424
- const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], { stdio: "ignore" });
424
+ const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
425
+ stdio: "ignore",
426
+ windowsHide: true
427
+ });
425
428
  if (!result.error && result.status === 0)
426
429
  return;
427
430
  if (result.error)
@@ -3297,6 +3300,7 @@ async function runMcpStdioServer(input = process.stdin, output = process.stdout)
3297
3300
  await runJsonRpcStdioServer({
3298
3301
  input,
3299
3302
  output,
3303
+ idleTimeoutMs: 0,
3300
3304
  handler: handleLspMcpRequest,
3301
3305
  handlerOptions: undefined
3302
3306
  });
@@ -419,7 +419,10 @@ function wrap(proc) {
419
419
  }
420
420
  function killProcessTree(proc, signal) {
421
421
  if (process.platform === "win32" && proc.pid) {
422
- const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], { stdio: "ignore" });
422
+ const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
423
+ stdio: "ignore",
424
+ windowsHide: true
425
+ });
423
426
  if (!result.error && result.status === 0)
424
427
  return;
425
428
  if (result.error)
@@ -639,7 +639,10 @@ function wrap(proc) {
639
639
  }
640
640
  function killProcessTree(proc, signal) {
641
641
  if (process.platform === "win32" && proc.pid) {
642
- const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], { stdio: "ignore" });
642
+ const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
643
+ stdio: "ignore",
644
+ windowsHide: true
645
+ });
643
646
  if (!result.error && result.status === 0)
644
647
  return;
645
648
  if (result.error)
@@ -3296,6 +3299,7 @@ async function runMcpStdioServer(input = process.stdin, output = process.stdout)
3296
3299
  await runJsonRpcStdioServer({
3297
3300
  input,
3298
3301
  output,
3302
+ idleTimeoutMs: 0,
3299
3303
  handler: handleLspMcpRequest,
3300
3304
  handlerOptions: undefined
3301
3305
  });
@@ -436,7 +436,10 @@ function wrap(proc) {
436
436
  }
437
437
  function killProcessTree(proc, signal) {
438
438
  if (process.platform === "win32" && proc.pid) {
439
- const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], { stdio: "ignore" });
439
+ const result = spawnSync("taskkill", ["/pid", String(proc.pid), "/f", "/t"], {
440
+ stdio: "ignore",
441
+ windowsHide: true
442
+ });
440
443
  if (!result.error && result.status === 0)
441
444
  return;
442
445
  if (result.error)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "4.13.0",
3
+ "version": "4.14.1",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",