lazycodex-ai 5.0.0-beta.4 → 5.0.0-beta.40

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 (538) hide show
  1. package/README.ja.md +25 -21
  2. package/README.ko.md +25 -21
  3. package/README.md +38 -23
  4. package/README.ru.md +24 -20
  5. package/README.zh-cn.md +25 -21
  6. package/dist/cli/config-manager/parse-opencode-config-file.d.ts +2 -1
  7. package/dist/cli/doctor/checks/system-plugin.d.ts +4 -3
  8. package/dist/cli/fallback-lane-policy.d.ts +1 -0
  9. package/dist/cli/index.js +66932 -64746
  10. package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
  11. package/dist/cli/run/on-complete-hook.d.ts +2 -0
  12. package/dist/cli/runtime-commands.d.ts +1 -1
  13. package/dist/cli/worktree-sweep/classify.d.ts +16 -0
  14. package/dist/cli/worktree-sweep/format.d.ts +8 -0
  15. package/dist/cli/worktree-sweep/git.d.ts +19 -0
  16. package/dist/cli/worktree-sweep/index.d.ts +7 -0
  17. package/dist/cli/worktree-sweep/options.d.ts +2 -0
  18. package/dist/cli/worktree-sweep/parse-worktree-list.d.ts +8 -0
  19. package/dist/cli/worktree-sweep/sweep.d.ts +2 -0
  20. package/dist/cli/worktree-sweep/types.d.ts +65 -0
  21. package/dist/cli/worktree-sweep/worktree-sweep.d.ts +2 -0
  22. package/dist/cli-node/index.js +66795 -64586
  23. package/package.json +9 -9
  24. package/packages/git-bash-mcp/dist/cli.js +6 -1
  25. package/packages/lsp-daemon/dist/cli.js +793 -323
  26. package/packages/lsp-daemon/dist/client.d.ts +10 -0
  27. package/packages/lsp-daemon/dist/client.js +753 -280
  28. package/packages/lsp-daemon/dist/daemon-client.d.ts +1 -0
  29. package/packages/lsp-daemon/dist/daemon-client.js +3 -0
  30. package/packages/lsp-daemon/dist/ensure-daemon.js +1 -0
  31. package/packages/lsp-daemon/dist/index.js +757 -289
  32. package/packages/lsp-daemon/dist/proxy.js +3 -0
  33. package/packages/lsp-daemon/dist/version-reap.js +1 -1
  34. package/packages/lsp-daemon/package.json +1 -1
  35. package/packages/lsp-tools-mcp/dist/cli.js +712 -244
  36. package/packages/lsp-tools-mcp/dist/lsp/manager.js +248 -119
  37. package/packages/lsp-tools-mcp/dist/mcp.js +714 -246
  38. package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
  39. package/packages/lsp-tools-mcp/dist/tools.js +718 -254
  40. package/packages/lsp-tools-mcp/package.json +1 -1
  41. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -6
  42. package/packages/omo-codex/plugin/.mcp.json +0 -6
  43. package/packages/omo-codex/plugin/AGENTS.md +47 -0
  44. package/packages/omo-codex/plugin/README.md +2 -2
  45. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +45 -49
  46. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  47. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  48. package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
  49. package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
  50. package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
  51. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
  52. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  53. package/packages/omo-codex/plugin/components/comment-checker/package.json +5 -5
  54. package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
  55. package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
  56. package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
  57. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
  58. package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
  59. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  60. package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
  61. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
  62. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +1 -5
  63. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +1 -5
  64. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  65. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +5 -5
  66. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +1 -5
  67. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +4 -21
  68. package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +1 -1
  69. package/packages/omo-codex/plugin/components/lsp/AGENTS.md +30 -15
  70. package/packages/omo-codex/plugin/components/lsp/biome.json +2 -2
  71. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
  72. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +741 -294
  73. package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +1 -1
  74. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  75. package/packages/omo-codex/plugin/components/lsp/package.json +5 -5
  76. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  77. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
  78. package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
  79. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
  80. package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
  81. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
  82. package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
  83. package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
  84. package/packages/omo-codex/plugin/components/rules/dist/cli.js +60 -45
  85. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  86. package/packages/omo-codex/plugin/components/rules/package.json +7 -7
  87. package/packages/omo-codex/plugin/components/rules/src/config.ts +1 -2
  88. package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +1 -2
  89. package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +9 -5
  90. package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +1 -4
  91. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -9
  92. package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
  93. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +17 -25
  94. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
  95. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
  96. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
  97. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
  98. package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
  99. package/packages/omo-codex/plugin/components/rules/test/dynamic-target-fingerprints.test.ts +1 -2
  100. package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +7 -4
  101. package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +2 -3
  102. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +39 -72
  103. package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +1 -2
  104. package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
  105. package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
  106. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
  107. package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
  108. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +5 -6
  109. package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
  110. package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
  111. package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
  112. package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +2 -17
  113. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  114. package/packages/omo-codex/plugin/components/teammode/package.json +5 -5
  115. package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +4 -10
  116. package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +8 -0
  117. package/packages/omo-codex/plugin/components/telemetry/biome.json +2 -2
  118. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +2463 -437
  119. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2467 -441
  120. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  121. package/packages/omo-codex/plugin/components/telemetry/package.json +5 -5
  122. package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
  123. package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
  124. package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
  125. package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
  126. package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +10 -4
  127. package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
  128. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +489 -4
  129. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  130. package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -6
  131. package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
  132. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +6 -7
  133. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +31 -7
  134. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -1
  135. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +5 -5
  136. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
  137. package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
  138. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
  139. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
  140. package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
  141. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
  142. package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
  143. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +2 -2
  144. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
  145. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +5 -5
  146. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
  147. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +6 -6
  148. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +12 -12
  149. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +28 -0
  150. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +12 -12
  151. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
  152. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
  153. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +3 -3
  154. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
  155. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
  156. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
  157. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +1 -4
  158. package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +8 -22
  159. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +19 -0
  160. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +1 -1
  161. package/packages/omo-codex/plugin/components/ulw-loop/README.md +12 -1
  162. package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
  163. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +15 -3
  164. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +12 -0
  165. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +45 -0
  166. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +9 -0
  167. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +15 -0
  168. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +15 -1
  169. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +8 -0
  170. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +120 -0
  171. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +40 -39
  172. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +7 -2
  173. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +2 -1
  174. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +12 -1
  175. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +2 -0
  176. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +958 -342
  177. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
  178. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +27 -6
  179. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +13 -0
  180. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +15 -1
  181. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +17 -9
  182. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +1 -1
  183. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +17 -2
  184. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +13 -0
  185. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +19 -0
  186. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +7 -0
  187. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +9 -0
  188. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +12 -0
  189. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +104 -0
  190. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.d.ts +13 -1
  191. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +65 -9
  192. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +5 -1
  193. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
  194. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +69 -111
  195. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +4 -2
  196. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +185 -14
  197. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +6 -0
  198. package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +33 -0
  199. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +3 -3
  200. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +18 -0
  201. package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +65 -0
  202. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  203. package/packages/omo-codex/plugin/components/ulw-loop/package.json +5 -5
  204. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +3 -2
  205. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +108 -0
  206. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +22 -1
  207. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +81 -0
  208. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +7 -0
  209. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +31 -1
  210. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +134 -0
  211. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +38 -71
  212. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +7 -2
  213. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +14 -1
  214. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +2 -0
  215. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +3 -5
  216. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +34 -5
  217. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +26 -1
  218. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
  219. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +19 -9
  220. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +1 -1
  221. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +18 -3
  222. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +27 -0
  223. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +11 -0
  224. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +123 -0
  225. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +68 -15
  226. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +6 -1
  227. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +82 -131
  228. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +4 -2
  229. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +187 -12
  230. package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +36 -0
  231. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +3 -3
  232. package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +95 -0
  233. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
  234. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +133 -1
  235. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +137 -0
  236. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +25 -0
  237. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +26 -2
  238. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +183 -0
  239. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +37 -2
  240. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +18 -0
  241. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +0 -3
  242. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +7 -3
  243. package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +105 -0
  244. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -37
  245. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
  246. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate-basics.test.ts +258 -0
  247. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-cap-and-dedupe.test.ts +22 -0
  248. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-poisoning-cascades.test.ts +97 -0
  249. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +46 -2
  250. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
  251. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-single-report.test.ts +241 -0
  252. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +48 -3
  253. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +318 -1
  254. package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +8 -5
  255. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
  256. package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +74 -0
  257. package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +13 -8
  258. package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
  259. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  260. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  261. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  262. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  263. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  264. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  265. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  266. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  267. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  268. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  269. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  270. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  271. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  272. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  273. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
  274. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  275. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +17 -0
  276. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  277. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  278. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  279. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  280. package/packages/omo-codex/plugin/model-catalog.json +3 -3
  281. package/packages/omo-codex/plugin/package-lock.json +676 -524
  282. package/packages/omo-codex/plugin/package.json +2 -3
  283. package/packages/omo-codex/plugin/scripts/AGENTS.md +39 -0
  284. package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -2
  285. package/packages/omo-codex/plugin/scripts/auto-update.mjs +0 -9
  286. package/packages/omo-codex/plugin/scripts/canonical-ultrawork-directive.mjs +17 -0
  287. package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +0 -1
  288. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +3 -3
  289. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +36 -13
  290. package/packages/omo-codex/plugin/shared/package.json +3 -4
  291. package/packages/omo-codex/plugin/shared/src/config-loader.ts +2 -102
  292. package/packages/omo-codex/plugin/shared/src/config-migration.ts +0 -1
  293. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +41 -130
  294. package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
  295. package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +62 -0
  296. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +3 -2
  297. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  298. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +4 -4
  299. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  300. package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +99 -239
  301. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-surfaces.md +91 -0
  302. package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +74 -0
  303. package/packages/omo-codex/plugin/skills/data-scientist/references/polars-lane.md +95 -0
  304. package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +1 -1
  305. package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +64 -0
  306. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  307. package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  308. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +2 -0
  309. package/packages/omo-codex/plugin/skills/debugging/references/methodology/00-setup.md +12 -0
  310. package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +21 -0
  311. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/go.md +15 -1
  312. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +38 -0
  313. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/node.md +25 -0
  314. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/python.md +13 -0
  315. package/packages/omo-codex/plugin/skills/debugging/references/runtimes/rust.md +41 -0
  316. package/packages/omo-codex/plugin/skills/debugging/references/scripts/dap.mjs +267 -0
  317. package/packages/omo-codex/plugin/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  318. package/packages/omo-codex/plugin/skills/debugging/references/tools/dap.md +103 -0
  319. package/packages/omo-codex/plugin/skills/debugging/references/tools/frida.md +193 -0
  320. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +11 -7
  321. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
  322. package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
  323. package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +80 -0
  324. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
  325. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  326. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  327. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  328. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
  329. package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
  330. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +13 -13
  331. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +1 -1
  332. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +4 -4
  333. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  334. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +2 -0
  335. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +110 -0
  336. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
  337. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  338. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  339. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +15 -3
  340. package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +19 -26
  341. package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
  342. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +3 -2
  343. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +108 -0
  344. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +22 -1
  345. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +6 -7
  346. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +31 -7
  347. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -1
  348. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +5 -5
  349. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +4 -2
  350. package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
  351. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +3 -2
  352. package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
  353. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
  354. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +9 -48
  355. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -3
  356. package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +2 -7
  357. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +1 -1
  358. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
  359. package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
  360. package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
  361. package/packages/omo-codex/plugin/test/auto-update.test.mjs +2 -27
  362. package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +0 -31
  363. package/packages/omo-codex/plugin/test/canonical-ultrawork-directive.test.mjs +53 -0
  364. package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
  365. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -51
  366. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +2 -2
  367. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +4 -5
  368. package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
  369. package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -3
  370. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +8 -8
  371. package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
  372. package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +101 -0
  373. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +23 -13
  374. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +14 -119
  375. package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
  376. package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
  377. package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
  378. package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
  379. package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
  380. package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -5
  381. package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
  382. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2817 -913
  383. package/packages/{omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md → prompts-core/prompts/ultrawork/codex.md} +15 -10
  384. package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
  385. package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
  386. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +3 -2
  387. package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +1 -1
  388. package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +4 -4
  389. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
  390. package/packages/shared-skills/skills/data-scientist/SKILL.md +99 -239
  391. package/packages/shared-skills/skills/data-scientist/references/execution-surfaces.md +91 -0
  392. package/packages/shared-skills/skills/data-scientist/references/placement.md +74 -0
  393. package/packages/shared-skills/skills/data-scientist/references/polars-lane.md +95 -0
  394. package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +1 -1
  395. package/packages/shared-skills/skills/data-scientist/references/visualization.md +64 -0
  396. package/packages/shared-skills/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
  397. package/packages/shared-skills/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
  398. package/packages/shared-skills/skills/debugging/SKILL.md +2 -0
  399. package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +12 -0
  400. package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +21 -0
  401. package/packages/shared-skills/skills/debugging/references/runtimes/go.md +15 -1
  402. package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +38 -0
  403. package/packages/shared-skills/skills/debugging/references/runtimes/node.md +25 -0
  404. package/packages/shared-skills/skills/debugging/references/runtimes/python.md +13 -0
  405. package/packages/shared-skills/skills/debugging/references/runtimes/rust.md +41 -0
  406. package/packages/shared-skills/skills/debugging/references/scripts/dap.mjs +267 -0
  407. package/packages/shared-skills/skills/debugging/references/scripts/dap.test.ts +86 -0
  408. package/packages/shared-skills/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
  409. package/packages/shared-skills/skills/debugging/references/tools/dap.md +103 -0
  410. package/packages/shared-skills/skills/debugging/references/tools/frida.md +193 -0
  411. package/packages/shared-skills/skills/frontend/SKILL.md +11 -7
  412. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
  413. package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
  414. package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +80 -0
  415. package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
  416. package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
  417. package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
  418. package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
  419. package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
  420. package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
  421. package/packages/shared-skills/skills/init-deep/SKILL.md +13 -13
  422. package/packages/shared-skills/skills/review-work/SKILL.md +3 -3
  423. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
  424. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +2 -0
  425. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +110 -0
  426. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
  427. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
  428. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +9 -2
  429. package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +17 -16
  430. package/packages/shared-skills/skills/ulw-plan/SKILL.md +6 -7
  431. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +31 -7
  432. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -1
  433. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +5 -5
  434. package/packages/shared-skills/skills/ulw-research/SKILL.md +4 -2
  435. package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
  436. package/packages/shared-skills/skills/visual-qa/SKILL.md +3 -2
  437. package/script/qa/web-terminal-visual-qa.mjs +2 -0
  438. package/script/qa/xterm-live-terminal.mjs +18 -2
  439. package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
  440. package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
  441. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
  442. package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
  443. package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
  444. package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +0 -58
  445. package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +0 -2951
  446. package/packages/omo-codex/plugin/components/codegraph/NOTICE +0 -16
  447. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +0 -12136
  448. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +0 -9734
  449. package/packages/omo-codex/plugin/components/codegraph/package.json +0 -33
  450. package/packages/omo-codex/plugin/components/codegraph/src/cache-gc.ts +0 -29
  451. package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +0 -79
  452. package/packages/omo-codex/plugin/components/codegraph/src/hook-input.ts +0 -33
  453. package/packages/omo-codex/plugin/components/codegraph/src/hook-sweep.ts +0 -25
  454. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +0 -131
  455. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +0 -258
  456. package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +0 -309
  457. package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +0 -80
  458. package/packages/omo-codex/plugin/components/codegraph/src/post-tool-use-hook.ts +0 -34
  459. package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +0 -29
  460. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +0 -263
  461. package/packages/omo-codex/plugin/components/codegraph/src/session-start-command.ts +0 -106
  462. package/packages/omo-codex/plugin/components/codegraph/src/session-start-cooldown.ts +0 -145
  463. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +0 -21
  464. package/packages/omo-codex/plugin/components/codegraph/src/session-start-lock.ts +0 -139
  465. package/packages/omo-codex/plugin/components/codegraph/src/session-start-outcome.ts +0 -15
  466. package/packages/omo-codex/plugin/components/codegraph/src/session-start-paths.ts +0 -32
  467. package/packages/omo-codex/plugin/components/codegraph/src/session-start-project.ts +0 -109
  468. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker-result.ts +0 -148
  469. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +0 -175
  470. package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +0 -81
  471. package/packages/omo-codex/plugin/components/codegraph/test/cache-gc.test.ts +0 -34
  472. package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +0 -112
  473. package/packages/omo-codex/plugin/components/codegraph/test/hook-registration.test.ts +0 -26
  474. package/packages/omo-codex/plugin/components/codegraph/test/hook-session-start-guard.test.ts +0 -160
  475. package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +0 -50
  476. package/packages/omo-codex/plugin/components/codegraph/test/hook-sweep.test.ts +0 -29
  477. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +0 -320
  478. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +0 -172
  479. package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +0 -91
  480. package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +0 -100
  481. package/packages/omo-codex/plugin/components/codegraph/test/serve-built-wrapper.test.ts +0 -76
  482. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +0 -133
  483. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +0 -245
  484. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +0 -69
  485. package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +0 -43
  486. package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +0 -147
  487. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +0 -175
  488. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +0 -385
  489. package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +0 -206
  490. package/packages/omo-codex/plugin/components/codegraph/test/session-start-project.test.ts +0 -58
  491. package/packages/omo-codex/plugin/components/codegraph/test/session-start-state.test.ts +0 -104
  492. package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +0 -65
  493. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +0 -106
  494. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-cooldown.test.ts +0 -116
  495. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +0 -258
  496. package/packages/omo-codex/plugin/components/codegraph/test/sweep-cli.test.ts +0 -56
  497. package/packages/omo-codex/plugin/components/codegraph/tsconfig.build.json +0 -13
  498. package/packages/omo-codex/plugin/components/codegraph/tsconfig.json +0 -25
  499. package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +0 -21
  500. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
  501. package/packages/omo-codex/plugin/components/ultrawork/directive.md +0 -471
  502. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +0 -18
  503. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +0 -17
  504. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
  505. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
  506. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/editor.mjs +0 -125
  507. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/jsonc.mjs +0 -43
  508. package/packages/omo-codex/plugin/scripts/migrate-omo-sot/scaffold.mjs +0 -29
  509. package/packages/omo-codex/plugin/scripts/migrate-omo-sot.mjs +0 -121
  510. package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +0 -176
  511. package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +0 -197
  512. package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +0 -153
  513. package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +0 -37
  514. package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
  515. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
  516. package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +0 -76
  517. package/packages/omo-codex/plugin/test/migrate-omo-sot.test.mjs +0 -179
  518. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
  519. package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
  520. package/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +0 -176
  521. package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +0 -197
  522. package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +0 -153
  523. package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +0 -37
  524. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
  525. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
  526. /package/packages/omo-codex/plugin/components/{codegraph → ulw-execute-continuation}/LICENSE +0 -0
  527. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
  528. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +0 -0
  529. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
  530. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
  531. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
  532. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
  533. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
  534. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
  535. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
  536. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
  537. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
  538. /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
@@ -1,263 +0,0 @@
1
- #!/usr/bin/env node
2
- import { existsSync, realpathSync } from "node:fs";
3
- import { homedir } from "node:os";
4
- import { basename, join, resolve } from "node:path";
5
- import {
6
- cwd as processCwd,
7
- env as processEnv,
8
- stdin as processStdin,
9
- stderr as processStderr,
10
- stdout as processStdout,
11
- } from "node:process";
12
- import type { Readable, Writable } from "node:stream";
13
- import { fileURLToPath } from "node:url";
14
-
15
- import {
16
- buildCodegraphChildEnv,
17
- buildCodegraphEnv,
18
- } from "../../../../../utils/src/codegraph/env.ts";
19
- import { hasCodegraphManagedInstall, resolvePinnedCodegraphBin } from "../../../../../utils/src/codegraph/managed-runtime.ts";
20
- import type { ParentWatchdogConfig } from "../../../../../mcp-stdio-core/src/index.ts";
21
- import { CODEGRAPH_PINNED_VERSION } from "../../../../../utils/src/codegraph/manifest.ts";
22
- import {
23
- buildCodegraphNodeSkipHint,
24
- evaluateCodegraphNodeSupport,
25
- } from "../../../../../utils/src/codegraph/node-support.ts";
26
- import {
27
- ensureCodegraphProvisioned,
28
- type EnsureCodegraphProvisionedOptions,
29
- } from "../../../../../utils/src/codegraph/provision.ts";
30
- import {
31
- codegraphCommandRequiresSupportedLocalNode,
32
- resolveCodegraphCommand,
33
- type CodegraphCommandResolution,
34
- type ResolveCodegraphCommandOptions,
35
- } from "../../../../../utils/src/codegraph/resolve.ts";
36
- import { shouldExcludeCodegraphProject } from "../../../../../utils/src/codegraph/workspace.ts";
37
- import { getCodexOmoConfig, type CodexOmoConfig } from "../../../shared/src/config-loader.ts";
38
- import type { CodegraphConfig } from "./hook.js";
39
- import { runBridgedCodegraphProcess } from "./mcp-bridge.js";
40
- import { runUnavailableCodegraphMcpServer } from "./mcp-unavailable.js";
41
- import { SESSION_START_CWD_ENV } from "./session-start-worker.js";
42
- export { resolveServeProcessInvocation } from "./serve-invocation.js";
43
-
44
- export type ServeStdio = "pipe";
45
-
46
- export interface CodegraphServeProcessOptions {
47
- readonly cwd: string;
48
- readonly env: Record<string, string | undefined>;
49
- readonly input: Readable;
50
- readonly output: Writable;
51
- readonly stderr: CodegraphServeStderr;
52
- readonly stdio: ServeStdio;
53
- readonly parentWatchdog?: ParentWatchdogConfig;
54
- }
55
-
56
- export type CodegraphServeProcessRunner = (
57
- command: string,
58
- args: readonly string[],
59
- options: CodegraphServeProcessOptions,
60
- ) => Promise<number>;
61
- export type CodegraphProvisioner = (
62
- options: EnsureCodegraphProvisionedOptions,
63
- ) => ReturnType<typeof ensureCodegraphProvisioned>;
64
-
65
- export interface CodegraphServeStderr {
66
- readonly write: (chunk: string) => void;
67
- }
68
-
69
- export interface RunCodegraphServeOptions {
70
- readonly buildEnv?: (options: { readonly daemon: boolean; readonly homeDir: string }) => Record<string, string>;
71
- readonly commandExists?: (filePath: string) => boolean;
72
- readonly config?: CodexOmoConfig;
73
- readonly cwd?: string;
74
- readonly env?: Record<string, string | undefined>;
75
- readonly homeDir?: string;
76
- readonly managedInstallExists?: (installDir: string) => boolean;
77
- readonly resolveManagedBin?: (installDir: string) => string | null;
78
- readonly stdin?: Readable;
79
- readonly stdout?: Writable;
80
- readonly nodeVersion?: string;
81
- readonly resolve?: (options: ResolveCodegraphCommandOptions) => ReturnType<typeof resolveCodegraphCommand>;
82
- readonly runProcess?: CodegraphServeProcessRunner;
83
- readonly stderr?: CodegraphServeStderr;
84
- readonly ensureProvisioned?: CodegraphProvisioner;
85
- // Test seam: production callers leave this unset so the bridge and the
86
- // unavailable facade use the watchdog defaults (parentPid = process.ppid,
87
- // 30s poll).
88
- readonly parentWatchdog?: ParentWatchdogConfig;
89
- }
90
-
91
- const CODEGRAPH_SKIP_HINT =
92
- "CodeGraph MCP skipped: codegraph binary not found. Install CodeGraph or set OMO_CODEGRAPH_BIN.\n";
93
- const CODEGRAPH_DISABLED_HINT =
94
- "CodeGraph MCP skipped: disabled by OMO SOT config. Set [codex].codegraph.enabled=true to enable it.\n";
95
- const CODEGRAPH_EXCLUDED_HINT = "CodeGraph MCP skipped: project excluded by OMO CodeGraph policy.\n";
96
- const CODEGRAPH_VERSION = CODEGRAPH_PINNED_VERSION;
97
- const PROJECT_CWD_ENV_KEYS = ["OMO_CODEGRAPH_PROJECT_CWD", SESSION_START_CWD_ENV, "PWD"] as const;
98
-
99
- export async function runCodegraphServe(options: RunCodegraphServeOptions = {}): Promise<number> {
100
- const env = options.env ?? processEnv;
101
- const homeDir = options.homeDir ?? homedir();
102
- const wrapperCwd = options.cwd ?? processCwd();
103
- const projectCwd = resolveProjectCwd(env, wrapperCwd);
104
- const config = options.config ?? getCodexOmoConfig({ cwd: projectCwd, env, homeDir });
105
- const codegraphConfig = config.codegraph ?? {};
106
- if (codegraphConfig.enabled === false) {
107
- return runUnavailableMcp(CODEGRAPH_DISABLED_HINT, options);
108
- }
109
- const excludedRoots = codegraphConfig.excluded_roots;
110
- const exclusion = shouldExcludeCodegraphProject(projectCwd, {
111
- homeDir,
112
- ...(excludedRoots === undefined ? {} : { excludedRoots }),
113
- });
114
- if (exclusion.excluded) {
115
- return runUnavailableMcp(CODEGRAPH_EXCLUDED_HINT, options);
116
- }
117
-
118
- const trustedInstallDir = config.trustedCodegraphInstallDir;
119
- const installDir = trustedInstallDir ?? join(homeDir, ".omo", "codegraph");
120
- const resolutionOptions = {
121
- env,
122
- homeDir,
123
- provisioned: () => provisionedBinFromInstallDir(installDir),
124
- } satisfies ResolveCodegraphCommandOptions;
125
- let resolution = options.resolve?.(resolutionOptions) ?? resolveCodegraphCommand(resolutionOptions);
126
- const resolveManagedBin = options.resolveManagedBin ?? (options.resolve === undefined ? provisionedBinFromInstallDir : () => null);
127
- const managedInstallExists = options.managedInstallExists ?? (options.resolve === undefined ? hasCodegraphManagedInstall : () => false);
128
- const managedBin = resolveManagedBin(installDir);
129
- if (resolution.source !== "env" && managedBin !== null) {
130
- resolution = { argsPrefix: [], command: managedBin, exists: true, source: "provisioned" };
131
- } else if (resolution.source !== "env" && codegraphConfig.auto_provision !== false && managedInstallExists(installDir)) {
132
- const upgraded = await provisionMissingCodegraph({
133
- config: codegraphConfig,
134
- ensureProvisioned: options.ensureProvisioned ?? ensureCodegraphProvisioned,
135
- homeDir,
136
- resolution,
137
- ...(trustedInstallDir === undefined ? {} : { trustedInstallDir }),
138
- });
139
- if (upgraded !== null) resolution = upgraded;
140
- }
141
- const nodeSupport = evaluateCodegraphNodeSupport({ env, nodeVersion: options.nodeVersion });
142
- if (!resolution.exists || shouldSkipResolvedCommand(resolution, options.commandExists ?? existsSync)) {
143
- if (resolution.source === "path" && !nodeSupport.supported) {
144
- return runUnavailableMcp(buildCodegraphNodeSkipHint(nodeSupport), options);
145
- }
146
- const provisioned = await provisionMissingCodegraph({
147
- config: codegraphConfig,
148
- ensureProvisioned: options.ensureProvisioned ?? ensureCodegraphProvisioned,
149
- homeDir,
150
- resolution,
151
- ...(trustedInstallDir === undefined ? {} : { trustedInstallDir }),
152
- });
153
- if (provisioned === null) {
154
- return runUnavailableMcp(CODEGRAPH_SKIP_HINT, options);
155
- }
156
- resolution = provisioned;
157
- }
158
-
159
- if (codegraphCommandRequiresSupportedLocalNode(resolution) && !nodeSupport.supported) {
160
- return runUnavailableMcp(buildCodegraphNodeSkipHint(nodeSupport), options);
161
- }
162
-
163
- const runProcess = options.runProcess ?? runBridgedCodegraphProcess;
164
- const codegraphEnv = codegraphEnvForConfig(trustedInstallDir, homeDir, codegraphConfig.daemon !== false, options.buildEnv);
165
- const mergedEnv = buildCodegraphChildEnv({ ambientEnv: env, codegraphEnv, runtimeEnv: env });
166
- return runProcess(resolution.command, [...resolution.argsPrefix, "serve", "--mcp"], {
167
- cwd: projectCwd,
168
- env: mergedEnv,
169
- input: options.stdin ?? processStdin,
170
- output: options.stdout ?? processStdout,
171
- stderr: options.stderr ?? processStderr,
172
- stdio: "pipe",
173
- parentWatchdog: options.parentWatchdog ?? {},
174
- });
175
- }
176
-
177
- async function runUnavailableMcp(reason: string, options: RunCodegraphServeOptions): Promise<number> {
178
- (options.stderr ?? processStderr).write(reason);
179
- await runUnavailableCodegraphMcpServer({
180
- input: options.stdin ?? processStdin,
181
- output: options.stdout ?? processStdout,
182
- reason,
183
- serverVersion: CODEGRAPH_VERSION,
184
- parentWatchdog: options.parentWatchdog ?? {},
185
- });
186
- return 0;
187
- }
188
-
189
- async function provisionMissingCodegraph(options: {
190
- readonly config: CodegraphConfig;
191
- readonly ensureProvisioned: CodegraphProvisioner;
192
- readonly homeDir: string;
193
- readonly resolution: CodegraphCommandResolution;
194
- readonly trustedInstallDir?: string;
195
- }): Promise<CodegraphCommandResolution | null> {
196
- if (options.resolution.source === "env") return null;
197
- if (options.config.auto_provision === false) return null;
198
-
199
- const installDir = options.trustedInstallDir ?? join(options.homeDir, ".omo", "codegraph");
200
- const result = await options.ensureProvisioned({
201
- installDir,
202
- lockDir: join(installDir, ".locks"),
203
- version: CODEGRAPH_VERSION,
204
- });
205
- if (!result.provisioned || result.binPath === undefined) return null;
206
- return { argsPrefix: [], command: result.binPath, exists: true, source: "provisioned" };
207
- }
208
-
209
- function shouldSkipResolvedCommand(
210
- resolution: CodegraphCommandResolution,
211
- commandExists: (filePath: string) => boolean,
212
- ): boolean {
213
- if (resolution.source !== "env") return false;
214
- if (!looksLikePath(resolution.command)) return false;
215
- return !commandExists(resolution.command);
216
- }
217
-
218
- function looksLikePath(command: string): boolean {
219
- return command.includes("/") || command.includes("\\");
220
- }
221
-
222
- function codegraphEnvForConfig(
223
- trustedInstallDir: string | undefined,
224
- homeDir: string,
225
- daemon: boolean,
226
- buildEnv: ((options: { readonly daemon: boolean; readonly homeDir: string }) => Record<string, string>) | undefined,
227
- ): Record<string, string> {
228
- const env = buildEnv?.({ daemon, homeDir }) ?? buildCodegraphEnv({ daemon, homeDir });
229
- return trustedInstallDir === undefined ? env : { ...env, CODEGRAPH_INSTALL_DIR: trustedInstallDir };
230
- }
231
-
232
- function resolveProjectCwd(env: Record<string, string | undefined>, fallback: string): string {
233
- for (const key of PROJECT_CWD_ENV_KEYS) {
234
- const candidate = env[key]?.trim();
235
- if (candidate === undefined || candidate.length === 0) continue;
236
- const resolved = resolve(candidate);
237
- if (existsSync(resolved)) return resolved;
238
- }
239
- return resolve(fallback);
240
- }
241
-
242
- function provisionedBinFromInstallDir(installDir: string | undefined): string | null {
243
- return resolvePinnedCodegraphBin(installDir);
244
- }
245
-
246
- export async function runCodegraphServeCli(): Promise<void> {
247
- process.exitCode = await runCodegraphServe();
248
- }
249
-
250
- if (isDirectInvocation(process.argv[1])) {
251
- runCodegraphServeCli().catch((error: unknown) => {
252
- processStderr.write(`${error instanceof Error ? (error.stack ?? error.message) : String(error)}\n`);
253
- process.exitCode = 1;
254
- });
255
- }
256
-
257
- function isDirectInvocation(argvPath: string | undefined): boolean {
258
- if (argvPath === undefined) return false;
259
- const modulePath = fileURLToPath(import.meta.url);
260
- const moduleName = basename(modulePath);
261
- if (moduleName !== "serve.js" && moduleName !== "serve.ts") return false;
262
- return realpathSync(resolve(argvPath)) === realpathSync(modulePath);
263
- }
@@ -1,106 +0,0 @@
1
- import { join } from "node:path";
2
- import { env as processEnv, stderr as processStderr } from "node:process";
3
-
4
- import { buildCodegraphChildEnv, buildCodegraphEnv } from "../../../../../utils/src/codegraph/env.ts";
5
- import { CODEGRAPH_PINNED_VERSION } from "../../../../../utils/src/codegraph/manifest.ts";
6
- import type { CodegraphNodeSupport } from "../../../../../utils/src/codegraph/node-support.ts";
7
- import {
8
- codegraphCommandRequiresSupportedLocalNode,
9
- type CodegraphCommandResolution,
10
- } from "../../../../../utils/src/codegraph/resolve.ts";
11
- import { runProcessWithTreeTimeout } from "../../../../../utils/src/process-tree.ts";
12
- import type { CodegraphCommandResult, CodegraphConfig, CodegraphSessionStartDeps } from "./hook-types.js";
13
- import { resolveServeProcessInvocation } from "./serve-invocation.js";
14
-
15
- export const SESSION_START_COMMAND_TIMEOUT_MS = 60_000;
16
-
17
- export type CodegraphBootstrapConfig = CodegraphConfig & {
18
- readonly trustedCodegraphInstallDir?: string;
19
- };
20
-
21
- export type SessionStartCommandResolution =
22
- | { readonly kind: "resolved"; readonly resolution: CodegraphCommandResolution }
23
- | { readonly kind: "unsupported-node" }
24
- | { readonly error: string; readonly kind: "unavailable"; readonly source: CodegraphCommandResolution["source"] };
25
-
26
- export async function resolveSessionStartCommand(options: {
27
- readonly config: CodegraphBootstrapConfig;
28
- readonly deps: CodegraphSessionStartDeps;
29
- readonly env: Record<string, string | undefined>;
30
- readonly homeDir: string;
31
- readonly nodeSupport: CodegraphNodeSupport;
32
- }): Promise<SessionStartCommandResolution> {
33
- const trustedInstallDir = options.config.trustedCodegraphInstallDir;
34
- const installDir = trustedInstallDir ?? join(options.homeDir, ".omo", "codegraph");
35
- const resolved = options.deps.resolveCommand({
36
- env: options.env,
37
- homeDir: options.homeDir,
38
- provisioned: () => options.deps.resolveManagedBin(installDir),
39
- });
40
- const managedBin = options.deps.resolveManagedBin(installDir);
41
- if (resolved.source !== "env" && managedBin !== null) {
42
- return { kind: "resolved", resolution: { argsPrefix: [], command: managedBin, exists: true, source: "provisioned" } };
43
- }
44
- if (resolved.source !== "env" && options.config.auto_provision !== false && options.deps.managedInstallExists(installDir)) {
45
- const upgraded = await options.deps.ensureProvisioned({
46
- installDir,
47
- lockDir: join(installDir, ".locks"),
48
- version: CODEGRAPH_PINNED_VERSION,
49
- });
50
- if (upgraded.provisioned && upgraded.binPath !== undefined) {
51
- return { kind: "resolved", resolution: { argsPrefix: [], command: upgraded.binPath, exists: true, source: "provisioned" } };
52
- }
53
- }
54
- if (resolved.exists && canUseResolvedCommand(resolved, options.nodeSupport)) {
55
- return { kind: "resolved", resolution: resolved };
56
- }
57
- if (resolved.exists && options.config.auto_provision === false) return { kind: "unsupported-node" };
58
- if (options.config.auto_provision === false) {
59
- return { error: "codegraph binary unavailable and auto_provision is disabled", kind: "unavailable", source: resolved.source };
60
- }
61
-
62
- const provisioned = await options.deps.ensureProvisioned({
63
- installDir,
64
- lockDir: join(installDir, ".locks"),
65
- version: CODEGRAPH_PINNED_VERSION,
66
- });
67
- if (!provisioned.provisioned || provisioned.binPath === undefined) {
68
- return { error: provisioned.error ?? "provisioning did not produce a binary", kind: "unavailable", source: resolved.source };
69
- }
70
- return { kind: "resolved", resolution: { argsPrefix: [], command: provisioned.binPath, exists: true, source: "provisioned" } };
71
- }
72
-
73
- export function sessionStartCodegraphEnv(config: CodegraphBootstrapConfig, homeDir: string): Record<string, string> {
74
- const env = buildCodegraphEnv({ daemon: false, homeDir });
75
- return config.trustedCodegraphInstallDir === undefined ? env : { ...env, CODEGRAPH_INSTALL_DIR: config.trustedCodegraphInstallDir };
76
- }
77
-
78
- export async function runSessionStartCodegraphCommand(
79
- projectRoot: string,
80
- command: string,
81
- args: readonly string[],
82
- options: { readonly env: Record<string, string>; readonly timeoutMs: number },
83
- ): Promise<CodegraphCommandResult> {
84
- const invocation = resolveCodegraphCommandInvocation(command, args);
85
- return runProcessWithTreeTimeout({
86
- args: invocation.args,
87
- command: invocation.command,
88
- cwd: projectRoot,
89
- env: buildCodegraphChildEnv({ ambientEnv: processEnv, codegraphEnv: options.env }),
90
- maxBuffer: 1024 * 1024,
91
- onTerminationReport: (report) => processStderr.write(`[codegraph-session-start] process tree termination ${JSON.stringify(report)}\n`),
92
- timeoutMs: options.timeoutMs,
93
- }).then(({ exitCode, stderr, stdout, timedOut }) => ({ exitCode, stderr, stdout, timedOut }));
94
- }
95
-
96
- export function resolveCodegraphCommandInvocation(
97
- command: string,
98
- args: readonly string[],
99
- platform: NodeJS.Platform = process.platform,
100
- ): { readonly args: readonly string[]; readonly command: string } {
101
- return resolveServeProcessInvocation(command, args, platform);
102
- }
103
-
104
- function canUseResolvedCommand(resolved: CodegraphCommandResolution, nodeSupport: CodegraphNodeSupport): boolean {
105
- return !codegraphCommandRequiresSupportedLocalNode(resolved) || nodeSupport.supported;
106
- }
@@ -1,145 +0,0 @@
1
- import { mkdirSync, readFileSync, rmSync } from "node:fs";
2
-
3
- import { writeFileAtomically } from "../../../../../utils/src/atomic-write.ts";
4
- import { resolveSessionStartStatePaths, stateParent } from "./session-start-paths.js";
5
-
6
- export const DEFAULT_SESSION_START_COOLDOWN_MS = 15 * 60 * 1_000;
7
- export const MAX_SESSION_START_COOLDOWN_MS = 24 * 60 * 60 * 1_000;
8
-
9
- export type SessionStartFailureAction =
10
- | "failed"
11
- | "skipped-probe-error"
12
- | "skipped-status"
13
- | "skipped-unavailable"
14
- | "skipped-unsupported-node"
15
- | "spawn-failed"
16
- | "stale-lock"
17
- | "timeout";
18
-
19
- export interface SessionStartCooldownState {
20
- readonly action: SessionStartFailureAction;
21
- readonly cooldownUntil: number;
22
- readonly failureCount: number;
23
- readonly lastFailureAt: number;
24
- readonly projectRoot: string;
25
- readonly version: 1;
26
- }
27
-
28
- export type SessionStartCooldownDecision =
29
- | { readonly cooldownUntil: number; readonly failureCount: number; readonly kind: "active" }
30
- | { readonly failureCount: number; readonly kind: "inactive" }
31
- | { readonly kind: "inconclusive"; readonly reason: string };
32
-
33
- export interface SessionStartCooldownOptions {
34
- readonly baseCooldownMs: number;
35
- readonly homeDir: string;
36
- readonly maxCooldownMs?: number;
37
- readonly nowMs: number;
38
- readonly projectRoot: string;
39
- }
40
-
41
- export function readSessionStartCooldown(options: SessionStartCooldownOptions): SessionStartCooldownDecision {
42
- const paths = resolveSessionStartStatePaths(options.homeDir, options.projectRoot);
43
- const state = readCooldownState(paths.cooldownPath, paths.canonicalProjectRoot);
44
- if (state.kind === "inconclusive") return state;
45
- if (state.kind === "missing") return { failureCount: 0, kind: "inactive" };
46
- const cooldownUntil = state.value.lastFailureAt + cooldownDuration(
47
- options.baseCooldownMs,
48
- state.value.failureCount,
49
- options.maxCooldownMs ?? MAX_SESSION_START_COOLDOWN_MS,
50
- );
51
- return options.nowMs < cooldownUntil
52
- ? { cooldownUntil, failureCount: state.value.failureCount, kind: "active" }
53
- : { failureCount: state.value.failureCount, kind: "inactive" };
54
- }
55
-
56
- export function recordSessionStartFailure(
57
- options: SessionStartCooldownOptions & { readonly action: SessionStartFailureAction },
58
- ): SessionStartCooldownState {
59
- const paths = resolveSessionStartStatePaths(options.homeDir, options.projectRoot);
60
- const existing = readCooldownState(paths.cooldownPath, paths.canonicalProjectRoot);
61
- const failureCount = existing.kind === "present" ? existing.value.failureCount + 1 : 1;
62
- const cooldownUntil = options.nowMs + cooldownDuration(
63
- options.baseCooldownMs,
64
- failureCount,
65
- options.maxCooldownMs ?? MAX_SESSION_START_COOLDOWN_MS,
66
- );
67
- const state: SessionStartCooldownState = {
68
- action: options.action,
69
- cooldownUntil,
70
- failureCount,
71
- lastFailureAt: options.nowMs,
72
- projectRoot: paths.canonicalProjectRoot,
73
- version: 1,
74
- };
75
- mkdirSync(stateParent(paths.cooldownPath), { recursive: true });
76
- writeFileAtomically(paths.cooldownPath, `${JSON.stringify(state)}\n`);
77
- return state;
78
- }
79
-
80
- export function clearSessionStartCooldown(options: { readonly homeDir: string; readonly projectRoot: string }): void {
81
- const path = resolveSessionStartStatePaths(options.homeDir, options.projectRoot).cooldownPath;
82
- rmSync(path, { force: true });
83
- }
84
-
85
- function cooldownDuration(baseCooldownMs: number, failureCount: number, maxCooldownMs: number): number {
86
- let duration = Math.min(baseCooldownMs, maxCooldownMs);
87
- for (let attempt = 1; attempt < failureCount && duration < maxCooldownMs; attempt += 1) {
88
- duration = Math.min(duration * 2, maxCooldownMs);
89
- }
90
- return duration;
91
- }
92
-
93
- type CooldownReadResult =
94
- | { readonly kind: "inconclusive"; readonly reason: string }
95
- | { readonly kind: "missing" }
96
- | { readonly kind: "present"; readonly value: SessionStartCooldownState };
97
-
98
- function readCooldownState(path: string, projectRoot: string): CooldownReadResult {
99
- try {
100
- const parsed: unknown = JSON.parse(readFileSync(path, "utf8"));
101
- const state = parseCooldownState(parsed, projectRoot);
102
- return state === null
103
- ? { kind: "inconclusive", reason: "cooldown state is invalid" }
104
- : { kind: "present", value: state };
105
- } catch (error) {
106
- if (!(error instanceof Error)) throw error;
107
- if (errorCode(error) === "ENOENT") return { kind: "missing" };
108
- return { kind: "inconclusive", reason: error.message };
109
- }
110
- }
111
-
112
- function parseCooldownState(value: unknown, projectRoot: string): SessionStartCooldownState | null {
113
- if (typeof value !== "object" || value === null) return null;
114
- const action = Reflect.get(value, "action");
115
- const cooldownUntil = Reflect.get(value, "cooldownUntil");
116
- const failureCount = Reflect.get(value, "failureCount");
117
- const lastFailureAt = Reflect.get(value, "lastFailureAt");
118
- const recordedRoot = Reflect.get(value, "projectRoot");
119
- const version = Reflect.get(value, "version");
120
- if (!isFailureAction(action)) return null;
121
- if (typeof cooldownUntil !== "number" || !Number.isFinite(cooldownUntil)) return null;
122
- if (typeof failureCount !== "number" || !Number.isInteger(failureCount) || failureCount < 1) return null;
123
- if (typeof lastFailureAt !== "number" || !Number.isFinite(lastFailureAt)) return null;
124
- if (recordedRoot !== projectRoot || version !== 1) return null;
125
- return { action, cooldownUntil, failureCount, lastFailureAt, projectRoot: recordedRoot, version };
126
- }
127
-
128
- function isFailureAction(value: unknown): value is SessionStartFailureAction {
129
- return typeof value === "string" && [
130
- "failed",
131
- "skipped-probe-error",
132
- "skipped-status",
133
- "skipped-unavailable",
134
- "skipped-unsupported-node",
135
- "spawn-failed",
136
- "stale-lock",
137
- "timeout",
138
- ].includes(value);
139
- }
140
-
141
- function errorCode(error: unknown): string | undefined {
142
- if (typeof error !== "object" || error === null) return undefined;
143
- const code = Reflect.get(error, "code");
144
- return typeof code === "string" ? code : undefined;
145
- }
@@ -1,21 +0,0 @@
1
- import { spawn } from "node:child_process";
2
-
3
- import type { HookStdout, WorkerSpawnInvocation } from "./hook-types.js";
4
-
5
- export function spawnDetachedSessionStartWorker(invocation: WorkerSpawnInvocation): void {
6
- const child = spawn(invocation.command, [...invocation.args], {
7
- detached: true,
8
- env: invocation.env,
9
- stdio: "ignore",
10
- });
11
- child.unref();
12
- }
13
-
14
- export function writeSessionStartNotice(stdout: HookStdout, notice: string): void {
15
- stdout.write(`${JSON.stringify({
16
- hookSpecificOutput: {
17
- hookEventName: "SessionStart",
18
- additionalContext: notice,
19
- },
20
- })}\n`);
21
- }
@@ -1,139 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import { mkdirSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
3
-
4
- import { resolveSessionStartStatePaths, stateParent } from "./session-start-paths.js";
5
-
6
- export interface SessionStartLock {
7
- readonly path: string;
8
- readonly token: string;
9
- }
10
-
11
- export type SessionStartLockResult =
12
- | { readonly kind: "acquired"; readonly lock: SessionStartLock; readonly recoveredStale: boolean }
13
- | { readonly kind: "inconclusive"; readonly reason: string }
14
- | { readonly kind: "locked" };
15
-
16
- export interface AcquireSessionStartLockOptions {
17
- readonly homeDir: string;
18
- readonly nowMs: number;
19
- readonly projectRoot: string;
20
- readonly staleMs: number;
21
- }
22
-
23
- type LockSnapshot =
24
- | { readonly kind: "inconclusive"; readonly reason: string }
25
- | { readonly kind: "missing" }
26
- | { readonly kind: "present"; readonly mtimeMs: number; readonly raw: string; readonly token: string };
27
-
28
- export function acquireSessionStartLock(options: AcquireSessionStartLockOptions): SessionStartLockResult {
29
- const paths = resolveSessionStartStatePaths(options.homeDir, options.projectRoot);
30
- const lockPath = paths.lockPath;
31
- const canonicalOptions = { ...options, projectRoot: paths.canonicalProjectRoot };
32
- try {
33
- mkdirSync(stateParent(lockPath), { recursive: true });
34
- } catch (error) {
35
- if (error instanceof Error) return { kind: "inconclusive", reason: error.message };
36
- throw error;
37
- }
38
-
39
- const initial = tryCreateLock(lockPath, canonicalOptions.projectRoot);
40
- if (initial.kind !== "locked") return initial;
41
-
42
- const snapshot = readLockSnapshot(lockPath);
43
- if (snapshot.kind === "missing") return tryCreateLock(lockPath, canonicalOptions.projectRoot);
44
- if (snapshot.kind === "inconclusive") return snapshot;
45
- if (canonicalOptions.nowMs - snapshot.mtimeMs < canonicalOptions.staleMs) return { kind: "locked" };
46
- return reclaimStaleLock(lockPath, snapshot, canonicalOptions);
47
- }
48
-
49
- export function releaseSessionStartLock(lock: SessionStartLock): boolean {
50
- const snapshot = readLockSnapshot(lock.path);
51
- if (snapshot.kind !== "present" || snapshot.token !== lock.token) return false;
52
- try {
53
- rmSync(lock.path, { force: true });
54
- return true;
55
- } catch (error) {
56
- if (error instanceof Error) return false;
57
- throw error;
58
- }
59
- }
60
-
61
- export function sessionStartLockIsOwned(lock: SessionStartLock): boolean {
62
- const snapshot = readLockSnapshot(lock.path);
63
- return snapshot.kind === "present" && snapshot.token === lock.token;
64
- }
65
-
66
- function reclaimStaleLock(
67
- lockPath: string,
68
- staleSnapshot: Extract<LockSnapshot, { readonly kind: "present" }>,
69
- options: AcquireSessionStartLockOptions,
70
- ): SessionStartLockResult {
71
- const reclaimPath = `${lockPath}.reclaim`;
72
- const reclaim = tryCreateMarker(reclaimPath);
73
- if (reclaim.kind !== "acquired") return reclaim;
74
-
75
- try {
76
- const current = readLockSnapshot(lockPath);
77
- if (current.kind === "inconclusive") return current;
78
- if (current.kind === "present") {
79
- const changed = current.raw !== staleSnapshot.raw || current.mtimeMs !== staleSnapshot.mtimeMs;
80
- if (changed || options.nowMs - current.mtimeMs < options.staleMs) return { kind: "locked" };
81
- rmSync(lockPath, { force: true });
82
- }
83
- const acquired = tryCreateLock(lockPath, options.projectRoot);
84
- return acquired.kind === "acquired" ? { ...acquired, recoveredStale: true } : acquired;
85
- } catch (error) {
86
- if (error instanceof Error) return { kind: "inconclusive", reason: error.message };
87
- throw error;
88
- } finally {
89
- rmSync(reclaimPath, { force: true });
90
- }
91
- }
92
-
93
- function tryCreateLock(lockPath: string, projectRoot: string): SessionStartLockResult {
94
- const token = randomUUID();
95
- try {
96
- writeFileSync(lockPath, `${JSON.stringify({ projectRoot, token })}\n`, {
97
- encoding: "utf8",
98
- flag: "wx",
99
- mode: 0o600,
100
- });
101
- return { kind: "acquired", lock: { path: lockPath, token }, recoveredStale: false };
102
- } catch (error) {
103
- if (!(error instanceof Error)) throw error;
104
- if (errorCode(error) === "EEXIST") return { kind: "locked" };
105
- return { kind: "inconclusive", reason: error.message };
106
- }
107
- }
108
-
109
- function tryCreateMarker(path: string): { readonly kind: "acquired" } | { readonly kind: "inconclusive"; readonly reason: string } | { readonly kind: "locked" } {
110
- try {
111
- writeFileSync(path, `${randomUUID()}\n`, { encoding: "utf8", flag: "wx", mode: 0o600 });
112
- return { kind: "acquired" };
113
- } catch (error) {
114
- if (!(error instanceof Error)) throw error;
115
- if (errorCode(error) === "EEXIST") return { kind: "locked" };
116
- return { kind: "inconclusive", reason: error.message };
117
- }
118
- }
119
-
120
- function readLockSnapshot(path: string): LockSnapshot {
121
- try {
122
- const raw = readFileSync(path, "utf8");
123
- const parsed: unknown = JSON.parse(raw);
124
- if (typeof parsed !== "object" || parsed === null) return { kind: "inconclusive", reason: "lock body is not an object" };
125
- const token = Reflect.get(parsed, "token");
126
- if (typeof token !== "string" || token.length === 0) return { kind: "inconclusive", reason: "lock token is missing" };
127
- return { kind: "present", mtimeMs: statSync(path).mtimeMs, raw, token };
128
- } catch (error) {
129
- if (!(error instanceof Error)) throw error;
130
- if (errorCode(error) === "ENOENT") return { kind: "missing" };
131
- return { kind: "inconclusive", reason: error.message };
132
- }
133
- }
134
-
135
- function errorCode(error: unknown): string | undefined {
136
- if (typeof error !== "object" || error === null) return undefined;
137
- const code = Reflect.get(error, "code");
138
- return typeof code === "string" ? code : undefined;
139
- }