oh-my-opencode 4.8.0 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. package/dist/agents/prometheus/system-prompt.d.ts +1 -1
  2. package/dist/agents/sisyphus/claude-fable-5.d.ts +19 -0
  3. package/dist/agents/sisyphus/claude-opus-4-7.d.ts +3 -1
  4. package/dist/agents/sisyphus/claude-opus-4-8.d.ts +19 -0
  5. package/dist/agents/sisyphus/index.d.ts +4 -0
  6. package/dist/agents/types.d.ts +2 -2
  7. package/dist/cli/doctor/checks/codex.d.ts +1 -0
  8. package/dist/cli/doctor/checks/tools-gh.d.ts +8 -1
  9. package/dist/cli/doctor/index.d.ts +1 -0
  10. package/dist/cli/doctor/types.d.ts +2 -0
  11. package/dist/cli/index.js +1922 -785
  12. package/dist/cli/install-codex/codex-config-permissions.d.ts +1 -1
  13. package/dist/cli/install-codex/codex-config-plugins.d.ts +1 -0
  14. package/dist/cli/install-codex/codex-config-toml.d.ts +1 -0
  15. package/dist/cli/install-codex/codex-installer-bin-dir.d.ts +8 -0
  16. package/dist/cli/install-codex/codex-multi-agent-v2-config.d.ts +11 -0
  17. package/dist/cli/install-codex/install-codex.d.ts +1 -8
  18. package/dist/cli/install-codex/lsp-daemon-reaper.d.ts +5 -0
  19. package/dist/cli/run/runnable-agent-resolver.d.ts +11 -0
  20. package/dist/cli/sparkshell-condense.d.ts +10 -0
  21. package/dist/cli/sparkshell-parse.d.ts +3 -0
  22. package/dist/cli/sparkshell-session-context.d.ts +20 -0
  23. package/dist/cli/sparkshell-spark.d.ts +23 -0
  24. package/dist/cli/sparkshell.d.ts +8 -1
  25. package/dist/cli-node/index.js +92552 -0
  26. package/dist/config/schema/agent-names.d.ts +2 -0
  27. package/dist/config/schema/hooks.d.ts +0 -2
  28. package/dist/config/schema/keyword-detector.d.ts +0 -6
  29. package/dist/config/schema/oh-my-opencode-config.d.ts +2 -4
  30. package/dist/create-hooks.d.ts +0 -2
  31. package/dist/features/background-agent/parent-wake-dedupe.d.ts +2 -0
  32. package/dist/features/background-agent/parent-wake-flush-runner.d.ts +2 -0
  33. package/dist/features/background-agent/parent-wake-prompt-dispatch.d.ts +1 -0
  34. package/dist/features/background-agent/parent-wake-session-history.d.ts +4 -0
  35. package/dist/features/background-agent/parent-wake-session-inspector.d.ts +1 -0
  36. package/dist/features/builtin-commands/templates/handoff.d.ts +1 -1
  37. package/dist/features/builtin-skills/index.d.ts +1 -1
  38. package/dist/features/builtin-skills/skills.d.ts +4 -0
  39. package/dist/features/opencode-runtime-skills/source-server.d.ts +16 -1
  40. package/dist/features/opencode-skill-loader/skill-definition-record.d.ts +2 -0
  41. package/dist/features/team-mode/tools/lifecycle-test-fixture.d.ts +2 -0
  42. package/dist/features/team-mode/types.d.ts +1 -0
  43. package/dist/features/tmux-subagent/failed-readiness-cache.d.ts +28 -0
  44. package/dist/features/tmux-subagent/manager.d.ts +1 -9
  45. package/dist/features/tmux-subagent/resolve-server-url.d.ts +3 -0
  46. package/dist/hooks/anthropic-context-window-limit-recovery/executor.d.ts +1 -1
  47. package/dist/hooks/index.d.ts +0 -1
  48. package/dist/hooks/keyword-detector/constants.d.ts +0 -4
  49. package/dist/hooks/keyword-detector/ultrawork/source-detector.d.ts +1 -1
  50. package/dist/index.js +9001 -1795
  51. package/dist/oh-my-opencode.schema.json +2 -4
  52. package/dist/plugin/chat-params.d.ts +1 -8
  53. package/dist/plugin/hooks/create-core-hooks.d.ts +0 -2
  54. package/dist/plugin/hooks/create-session-hooks.d.ts +0 -2
  55. package/dist/plugin/hooks/create-transform-hooks.d.ts +1 -2
  56. package/dist/plugin/messages-transform.d.ts +0 -1
  57. package/dist/shared/model-availability.d.ts +10 -2
  58. package/package.json +25 -18
  59. package/packages/ast-grep-mcp/dist/cli.js +2 -10
  60. package/packages/git-bash-mcp/dist/cli.js +11 -4
  61. package/packages/lsp-daemon/dist/cli.d.ts +2 -0
  62. package/packages/lsp-daemon/dist/cli.js +3711 -0
  63. package/packages/lsp-daemon/dist/daemon-client.d.ts +19 -0
  64. package/packages/lsp-daemon/dist/daemon-client.js +114 -0
  65. package/packages/lsp-daemon/dist/daemon-server.d.ts +12 -0
  66. package/packages/lsp-daemon/dist/daemon-server.js +106 -0
  67. package/packages/lsp-daemon/dist/ensure-daemon.d.ts +21 -0
  68. package/packages/lsp-daemon/dist/ensure-daemon.js +97 -0
  69. package/packages/lsp-daemon/dist/index.d.ts +5 -0
  70. package/packages/lsp-daemon/dist/index.js +3573 -0
  71. package/packages/lsp-daemon/dist/lock.d.ts +7 -0
  72. package/packages/lsp-daemon/dist/lock.js +61 -0
  73. package/packages/lsp-daemon/dist/package.json +6 -0
  74. package/packages/lsp-daemon/dist/paths.d.ts +11 -0
  75. package/packages/lsp-daemon/dist/paths.js +49 -0
  76. package/packages/lsp-daemon/dist/proxy.d.ts +10 -0
  77. package/packages/lsp-daemon/dist/proxy.js +61 -0
  78. package/packages/lsp-daemon/dist/request-routing.d.ts +9 -0
  79. package/packages/lsp-daemon/dist/request-routing.js +44 -0
  80. package/packages/lsp-daemon/dist/run-daemon.d.ts +1 -0
  81. package/packages/lsp-daemon/dist/run-daemon.js +11 -0
  82. package/packages/lsp-daemon/dist/socket-jsonrpc.d.ts +5 -0
  83. package/packages/lsp-daemon/dist/socket-jsonrpc.js +25 -0
  84. package/packages/lsp-daemon/package.json +38 -0
  85. package/packages/lsp-tools-mcp/dist/cli.js +0 -0
  86. package/packages/lsp-tools-mcp/dist/lsp/client-wrapper.js +40 -17
  87. package/packages/lsp-tools-mcp/dist/lsp/client.js +11 -9
  88. package/packages/lsp-tools-mcp/dist/lsp/config-loader.js +5 -5
  89. package/packages/lsp-tools-mcp/dist/lsp/directory-diagnostics.js +5 -3
  90. package/packages/lsp-tools-mcp/dist/lsp/effective-extension.d.ts +1 -0
  91. package/packages/lsp-tools-mcp/dist/lsp/effective-extension.js +8 -0
  92. package/packages/lsp-tools-mcp/dist/lsp/infer-extension.js +3 -2
  93. package/packages/lsp-tools-mcp/dist/lsp/language-mappings.js +1 -0
  94. package/packages/lsp-tools-mcp/dist/lsp/server-definitions.js +12 -0
  95. package/packages/lsp-tools-mcp/dist/lsp/server-install-state.d.ts +12 -0
  96. package/packages/lsp-tools-mcp/dist/lsp/server-install-state.js +51 -0
  97. package/packages/lsp-tools-mcp/dist/lsp/workspace-edit.js +2 -1
  98. package/packages/lsp-tools-mcp/dist/request-context.d.ts +7 -0
  99. package/packages/lsp-tools-mcp/dist/request-context.js +14 -0
  100. package/packages/lsp-tools-mcp/dist/tools.js +44 -1
  101. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +46 -33
  102. package/packages/omo-codex/plugin/.mcp.json +1 -1
  103. package/packages/omo-codex/plugin/components/comment-checker/dist/apply-patch.d.ts +7 -0
  104. package/packages/omo-codex/plugin/components/comment-checker/dist/apply-patch.js +173 -0
  105. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.d.ts +2 -0
  106. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +10 -0
  107. package/packages/omo-codex/plugin/components/comment-checker/dist/codex-hook.d.ts +22 -0
  108. package/packages/omo-codex/plugin/components/comment-checker/dist/codex-hook.js +165 -0
  109. package/packages/omo-codex/plugin/components/comment-checker/dist/core-values.d.ts +1 -0
  110. package/packages/omo-codex/plugin/components/comment-checker/dist/core-values.js +1 -0
  111. package/packages/omo-codex/plugin/components/comment-checker/dist/core.d.ts +5 -0
  112. package/packages/omo-codex/plugin/components/comment-checker/dist/core.js +4 -0
  113. package/packages/omo-codex/plugin/components/comment-checker/dist/hook-input.d.ts +6 -0
  114. package/packages/omo-codex/plugin/components/comment-checker/dist/hook-input.js +10 -0
  115. package/packages/omo-codex/plugin/components/comment-checker/dist/record.d.ts +2 -0
  116. package/packages/omo-codex/plugin/components/comment-checker/dist/record.js +11 -0
  117. package/packages/omo-codex/plugin/components/comment-checker/dist/request-extractor.d.ts +3 -0
  118. package/packages/omo-codex/plugin/components/comment-checker/dist/request-extractor.js +104 -0
  119. package/packages/omo-codex/plugin/components/comment-checker/dist/runner.d.ts +26 -0
  120. package/packages/omo-codex/plugin/components/comment-checker/dist/runner.js +144 -0
  121. package/packages/omo-codex/plugin/components/comment-checker/dist/types.d.ts +43 -0
  122. package/packages/omo-codex/plugin/components/comment-checker/dist/types.js +1 -0
  123. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  124. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  125. package/packages/omo-codex/plugin/components/git-bash/dist/cli.d.ts +2 -0
  126. package/packages/omo-codex/plugin/components/git-bash/dist/cli.js +29 -0
  127. package/packages/omo-codex/plugin/components/git-bash/dist/codex-hook.d.ts +28 -0
  128. package/packages/omo-codex/plugin/components/git-bash/dist/codex-hook.js +137 -0
  129. package/packages/omo-codex/plugin/components/git-bash/dist/index.d.ts +1 -0
  130. package/packages/omo-codex/plugin/components/git-bash/dist/index.js +1 -0
  131. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  132. package/packages/omo-codex/plugin/components/git-bash/package.json +5 -2
  133. package/packages/omo-codex/plugin/components/lsp/.mcp.json +1 -1
  134. package/packages/omo-codex/plugin/components/lsp/dist/cli.d.ts +2 -0
  135. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +42 -0
  136. package/packages/omo-codex/plugin/components/lsp/dist/codex-hook-cli.d.ts +2 -0
  137. package/packages/omo-codex/plugin/components/lsp/dist/codex-hook-cli.js +40 -0
  138. package/packages/omo-codex/plugin/components/lsp/dist/codex-hook.d.ts +16 -0
  139. package/packages/omo-codex/plugin/components/lsp/dist/codex-hook.js +180 -0
  140. package/packages/omo-codex/plugin/components/lsp/dist/lsp-session-state.d.ts +12 -0
  141. package/packages/omo-codex/plugin/components/lsp/dist/lsp-session-state.js +95 -0
  142. package/packages/omo-codex/plugin/components/lsp/dist/mutated-file-paths.d.ts +6 -0
  143. package/packages/omo-codex/plugin/components/lsp/dist/mutated-file-paths.js +79 -0
  144. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  145. package/packages/omo-codex/plugin/components/lsp/package.json +7 -7
  146. package/packages/omo-codex/plugin/components/lsp/scripts/build-lsp-daemon.mjs +68 -0
  147. package/packages/omo-codex/plugin/components/lsp/scripts/build-lsp-tools.mjs +45 -22
  148. package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
  149. package/packages/omo-codex/plugin/components/lsp/src/codex-hook-cli.ts +1 -1
  150. package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +6 -2
  151. package/packages/omo-codex/plugin/components/lsp/src/lsp-session-state.ts +4 -0
  152. package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +68 -0
  153. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +8 -20
  154. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus.md +69 -96
  155. package/packages/omo-codex/plugin/components/rules/dist/cli.d.ts +2 -0
  156. package/packages/omo-codex/plugin/components/rules/dist/cli.js +118 -0
  157. package/packages/omo-codex/plugin/components/rules/dist/codex-hook-options.d.ts +5 -0
  158. package/packages/omo-codex/plugin/components/rules/dist/codex-hook-options.js +1 -0
  159. package/packages/omo-codex/plugin/components/rules/dist/codex-hook.d.ts +47 -0
  160. package/packages/omo-codex/plugin/components/rules/dist/codex-hook.js +127 -0
  161. package/packages/omo-codex/plugin/components/rules/dist/config.d.ts +2 -0
  162. package/packages/omo-codex/plugin/components/rules/dist/config.js +100 -0
  163. package/packages/omo-codex/plugin/components/rules/dist/context-pressure.d.ts +2 -0
  164. package/packages/omo-codex/plugin/components/rules/dist/context-pressure.js +26 -0
  165. package/packages/omo-codex/plugin/components/rules/dist/debug-log.d.ts +8 -0
  166. package/packages/omo-codex/plugin/components/rules/dist/debug-log.js +36 -0
  167. package/packages/omo-codex/plugin/components/rules/dist/dynamic-target-fingerprints.d.ts +7 -0
  168. package/packages/omo-codex/plugin/components/rules/dist/dynamic-target-fingerprints.js +65 -0
  169. package/packages/omo-codex/plugin/components/rules/dist/event-budget.d.ts +3 -0
  170. package/packages/omo-codex/plugin/components/rules/dist/event-budget.js +14 -0
  171. package/packages/omo-codex/plugin/components/rules/dist/hook-output.d.ts +2 -0
  172. package/packages/omo-codex/plugin/components/rules/dist/hook-output.js +24 -0
  173. package/packages/omo-codex/plugin/components/rules/dist/path-utils.d.ts +4 -0
  174. package/packages/omo-codex/plugin/components/rules/dist/path-utils.js +24 -0
  175. package/packages/omo-codex/plugin/components/rules/dist/persistent-cache.d.ts +13 -0
  176. package/packages/omo-codex/plugin/components/rules/dist/persistent-cache.js +172 -0
  177. package/packages/omo-codex/plugin/components/rules/dist/post-compact-budget.d.ts +6 -0
  178. package/packages/omo-codex/plugin/components/rules/dist/post-compact-budget.js +74 -0
  179. package/packages/omo-codex/plugin/components/rules/dist/post-compact-claim.d.ts +4 -0
  180. package/packages/omo-codex/plugin/components/rules/dist/post-compact-claim.js +6 -0
  181. package/packages/omo-codex/plugin/components/rules/dist/post-compact-directive.d.ts +1 -0
  182. package/packages/omo-codex/plugin/components/rules/dist/post-compact-directive.js +32 -0
  183. package/packages/omo-codex/plugin/components/rules/dist/post-compact-state.d.ts +13 -0
  184. package/packages/omo-codex/plugin/components/rules/dist/post-compact-state.js +29 -0
  185. package/packages/omo-codex/plugin/components/rules/dist/rules/cache.d.ts +9 -0
  186. package/packages/omo-codex/plugin/components/rules/dist/rules/cache.js +51 -0
  187. package/packages/omo-codex/plugin/components/rules/dist/rules/constants.d.ts +70 -0
  188. package/packages/omo-codex/plugin/components/rules/dist/rules/constants.js +101 -0
  189. package/packages/omo-codex/plugin/components/rules/dist/rules/engine-dynamic-cache.d.ts +5 -0
  190. package/packages/omo-codex/plugin/components/rules/dist/rules/engine-dynamic-cache.js +60 -0
  191. package/packages/omo-codex/plugin/components/rules/dist/rules/engine-dynamic-loader.d.ts +6 -0
  192. package/packages/omo-codex/plugin/components/rules/dist/rules/engine-dynamic-loader.js +61 -0
  193. package/packages/omo-codex/plugin/components/rules/dist/rules/engine-loader.d.ts +7 -0
  194. package/packages/omo-codex/plugin/components/rules/dist/rules/engine-loader.js +60 -0
  195. package/packages/omo-codex/plugin/components/rules/dist/rules/engine-paths.d.ts +11 -0
  196. package/packages/omo-codex/plugin/components/rules/dist/rules/engine-paths.js +75 -0
  197. package/packages/omo-codex/plugin/components/rules/dist/rules/engine-static-loader.d.ts +6 -0
  198. package/packages/omo-codex/plugin/components/rules/dist/rules/engine-static-loader.js +29 -0
  199. package/packages/omo-codex/plugin/components/rules/dist/rules/engine-types.d.ts +44 -0
  200. package/packages/omo-codex/plugin/components/rules/dist/rules/engine-types.js +1 -0
  201. package/packages/omo-codex/plugin/components/rules/dist/rules/engine.d.ts +5 -0
  202. package/packages/omo-codex/plugin/components/rules/dist/rules/engine.js +85 -0
  203. package/packages/omo-codex/plugin/components/rules/dist/rules/errors.d.ts +6 -0
  204. package/packages/omo-codex/plugin/components/rules/dist/rules/errors.js +12 -0
  205. package/packages/omo-codex/plugin/components/rules/dist/rules/finder-cache.d.ts +14 -0
  206. package/packages/omo-codex/plugin/components/rules/dist/rules/finder-cache.js +51 -0
  207. package/packages/omo-codex/plugin/components/rules/dist/rules/finder-paths.d.ts +6 -0
  208. package/packages/omo-codex/plugin/components/rules/dist/rules/finder-paths.js +33 -0
  209. package/packages/omo-codex/plugin/components/rules/dist/rules/finder-sources.d.ts +5 -0
  210. package/packages/omo-codex/plugin/components/rules/dist/rules/finder-sources.js +40 -0
  211. package/packages/omo-codex/plugin/components/rules/dist/rules/finder.d.ts +28 -0
  212. package/packages/omo-codex/plugin/components/rules/dist/rules/finder.js +146 -0
  213. package/packages/omo-codex/plugin/components/rules/dist/rules/formatter.d.ts +7 -0
  214. package/packages/omo-codex/plugin/components/rules/dist/rules/formatter.js +112 -0
  215. package/packages/omo-codex/plugin/components/rules/dist/rules/matcher.d.ts +18 -0
  216. package/packages/omo-codex/plugin/components/rules/dist/rules/matcher.js +93 -0
  217. package/packages/omo-codex/plugin/components/rules/dist/rules/ordering.d.ts +3 -0
  218. package/packages/omo-codex/plugin/components/rules/dist/rules/ordering.js +27 -0
  219. package/packages/omo-codex/plugin/components/rules/dist/rules/parser-frontmatter.d.ts +7 -0
  220. package/packages/omo-codex/plugin/components/rules/dist/rules/parser-frontmatter.js +30 -0
  221. package/packages/omo-codex/plugin/components/rules/dist/rules/parser-yaml.d.ts +2 -0
  222. package/packages/omo-codex/plugin/components/rules/dist/rules/parser-yaml.js +237 -0
  223. package/packages/omo-codex/plugin/components/rules/dist/rules/parser.d.ts +3 -0
  224. package/packages/omo-codex/plugin/components/rules/dist/rules/parser.js +31 -0
  225. package/packages/omo-codex/plugin/components/rules/dist/rules/plugin-root.d.ts +1 -0
  226. package/packages/omo-codex/plugin/components/rules/dist/rules/plugin-root.js +48 -0
  227. package/packages/omo-codex/plugin/components/rules/dist/rules/project-root.d.ts +1 -0
  228. package/packages/omo-codex/plugin/components/rules/dist/rules/project-root.js +23 -0
  229. package/packages/omo-codex/plugin/components/rules/dist/rules/scanner.d.ts +14 -0
  230. package/packages/omo-codex/plugin/components/rules/dist/rules/scanner.js +111 -0
  231. package/packages/omo-codex/plugin/components/rules/dist/rules/sources.d.ts +3 -0
  232. package/packages/omo-codex/plugin/components/rules/dist/rules/sources.js +9 -0
  233. package/packages/omo-codex/plugin/components/rules/dist/rules/truncator.d.ts +18 -0
  234. package/packages/omo-codex/plugin/components/rules/dist/rules/truncator.js +59 -0
  235. package/packages/omo-codex/plugin/components/rules/dist/rules/types.d.ts +126 -0
  236. package/packages/omo-codex/plugin/components/rules/dist/rules/types.js +8 -0
  237. package/packages/omo-codex/plugin/components/rules/dist/rules-engine-factory.d.ts +6 -0
  238. package/packages/omo-codex/plugin/components/rules/dist/rules-engine-factory.js +20 -0
  239. package/packages/omo-codex/plugin/components/rules/dist/session-state-lock.d.ts +3 -0
  240. package/packages/omo-codex/plugin/components/rules/dist/session-state-lock.js +41 -0
  241. package/packages/omo-codex/plugin/components/rules/dist/sparkshell-awareness.d.ts +10 -0
  242. package/packages/omo-codex/plugin/components/rules/dist/sparkshell-awareness.js +90 -0
  243. package/packages/omo-codex/plugin/components/rules/dist/static-injection.d.ts +3 -0
  244. package/packages/omo-codex/plugin/components/rules/dist/static-injection.js +128 -0
  245. package/packages/omo-codex/plugin/components/rules/dist/tool-paths.d.ts +6 -0
  246. package/packages/omo-codex/plugin/components/rules/dist/tool-paths.js +168 -0
  247. package/packages/omo-codex/plugin/components/rules/dist/transcript-rule-filter.d.ts +4 -0
  248. package/packages/omo-codex/plugin/components/rules/dist/transcript-rule-filter.js +49 -0
  249. package/packages/omo-codex/plugin/components/rules/dist/transcript-search.d.ts +4 -0
  250. package/packages/omo-codex/plugin/components/rules/dist/transcript-search.js +91 -0
  251. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  252. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  253. package/packages/omo-codex/plugin/components/rules/src/codex-hook.ts +4 -2
  254. package/packages/omo-codex/plugin/components/rules/src/config.ts +13 -0
  255. package/packages/omo-codex/plugin/components/rules/src/event-budget.ts +17 -0
  256. package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +4 -1
  257. package/packages/omo-codex/plugin/components/rules/src/post-compact-directive.ts +39 -0
  258. package/packages/omo-codex/plugin/components/rules/src/rules/constants.ts +16 -0
  259. package/packages/omo-codex/plugin/components/rules/src/rules/engine.ts +8 -0
  260. package/packages/omo-codex/plugin/components/rules/src/rules/formatter.ts +7 -8
  261. package/packages/omo-codex/plugin/components/rules/src/rules/truncator.ts +17 -0
  262. package/packages/omo-codex/plugin/components/rules/src/rules/types.ts +4 -0
  263. package/packages/omo-codex/plugin/components/rules/src/sparkshell-awareness.ts +53 -4
  264. package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +127 -7
  265. package/packages/omo-codex/plugin/components/rules/src/transcript-rule-filter.ts +9 -1
  266. package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +4 -2
  267. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +7 -2
  268. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +9 -9
  269. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +10 -4
  270. package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +241 -0
  271. package/packages/omo-codex/plugin/components/rules/test/event-budget.test.ts +168 -0
  272. package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +20 -0
  273. package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +4 -0
  274. package/packages/omo-codex/plugin/components/rules/test/sparkshell-awareness.test.ts +86 -3
  275. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +15 -15
  276. package/packages/omo-codex/plugin/components/start-work-continuation/dist/boulder-reader.d.ts +16 -0
  277. package/packages/omo-codex/plugin/components/start-work-continuation/dist/boulder-reader.js +146 -0
  278. package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.d.ts +2 -0
  279. package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +49 -0
  280. package/packages/omo-codex/plugin/components/start-work-continuation/dist/codex-hook.d.ts +2 -0
  281. package/packages/omo-codex/plugin/components/start-work-continuation/dist/codex-hook.js +80 -0
  282. package/packages/omo-codex/plugin/components/start-work-continuation/dist/directive.d.ts +1 -0
  283. package/packages/omo-codex/plugin/components/start-work-continuation/dist/directive.js +2 -0
  284. package/packages/omo-codex/plugin/components/start-work-continuation/dist/index.d.ts +5 -0
  285. package/packages/omo-codex/plugin/components/start-work-continuation/dist/index.js +3 -0
  286. package/packages/omo-codex/plugin/components/start-work-continuation/dist/types.d.ts +20 -0
  287. package/packages/omo-codex/plugin/components/start-work-continuation/dist/types.js +1 -0
  288. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  289. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  290. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +24 -2
  291. package/packages/omo-codex/plugin/components/telemetry/dist/atomic-write.d.ts +1 -0
  292. package/packages/omo-codex/plugin/components/telemetry/dist/atomic-write.js +18 -0
  293. package/packages/omo-codex/plugin/components/telemetry/dist/cli.d.ts +2 -0
  294. package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +62 -0
  295. package/packages/omo-codex/plugin/components/telemetry/dist/codex-hook.d.ts +15 -0
  296. package/packages/omo-codex/plugin/components/telemetry/dist/codex-hook.js +42 -0
  297. package/packages/omo-codex/plugin/components/telemetry/dist/data-path.d.ts +10 -0
  298. package/packages/omo-codex/plugin/components/telemetry/dist/data-path.js +35 -0
  299. package/packages/omo-codex/plugin/components/telemetry/dist/diagnostics.d.ts +12 -0
  300. package/packages/omo-codex/plugin/components/telemetry/dist/diagnostics.js +108 -0
  301. package/packages/omo-codex/plugin/components/telemetry/dist/env-flags.d.ts +4 -0
  302. package/packages/omo-codex/plugin/components/telemetry/dist/env-flags.js +31 -0
  303. package/packages/omo-codex/plugin/components/telemetry/dist/posthog-activity-state.d.ts +8 -0
  304. package/packages/omo-codex/plugin/components/telemetry/dist/posthog-activity-state.js +68 -0
  305. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.d.ts +21 -0
  306. package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +133 -0
  307. package/packages/omo-codex/plugin/components/telemetry/dist/product-identity.d.ts +8 -0
  308. package/packages/omo-codex/plugin/components/telemetry/dist/product-identity.js +29 -0
  309. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  310. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  311. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +5 -13
  312. package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +61 -185
  313. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +1 -1
  314. package/packages/omo-codex/plugin/components/ultrawork/directive.md +122 -117
  315. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.d.ts +2 -0
  316. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +48 -0
  317. package/packages/omo-codex/plugin/components/ultrawork/dist/codex-hook.d.ts +7 -0
  318. package/packages/omo-codex/plugin/components/ultrawork/dist/codex-hook.js +122 -0
  319. package/packages/omo-codex/plugin/components/ultrawork/dist/directive.d.ts +1 -0
  320. package/packages/omo-codex/plugin/components/ultrawork/dist/directive.js +2 -0
  321. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  322. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  323. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +20 -11
  324. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +17 -11
  325. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +2 -5
  326. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +0 -71
  327. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.d.ts +16 -0
  328. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +200 -0
  329. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.d.ts +17 -0
  330. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +97 -0
  331. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.d.ts +4 -0
  332. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +183 -0
  333. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +6 -0
  334. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +55 -0
  335. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.d.ts +12 -0
  336. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-steering.js +145 -0
  337. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.d.ts +2 -0
  338. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +39 -0
  339. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +13 -0
  340. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +100 -0
  341. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +26 -0
  342. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +97 -0
  343. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.d.ts +28 -0
  344. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-hook.js +145 -0
  345. package/packages/omo-codex/plugin/components/ulw-loop/dist/command-types.d.ts +34 -0
  346. package/packages/omo-codex/plugin/components/ulw-loop/dist/command-types.js +1 -0
  347. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +16 -0
  348. package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +41 -0
  349. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +95 -0
  350. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.js +1 -0
  351. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.d.ts +31 -0
  352. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.js +119 -0
  353. package/packages/omo-codex/plugin/components/ulw-loop/dist/goal-status.d.ts +12 -0
  354. package/packages/omo-codex/plugin/components/ulw-loop/dist/goal-status.js +69 -0
  355. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +16 -0
  356. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +59 -0
  357. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +48 -0
  358. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +119 -0
  359. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +8 -0
  360. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +89 -0
  361. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +6 -0
  362. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +123 -0
  363. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.d.ts +16 -0
  364. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +70 -0
  365. package/packages/omo-codex/plugin/components/ulw-loop/dist/runtime.d.ts +10 -0
  366. package/packages/omo-codex/plugin/components/ulw-loop/dist/runtime.js +13 -0
  367. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-types.d.ts +63 -0
  368. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-types.js +1 -0
  369. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.d.ts +6 -0
  370. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +292 -0
  371. package/packages/omo-codex/plugin/components/ulw-loop/dist/types.d.ts +5 -0
  372. package/packages/omo-codex/plugin/components/ulw-loop/dist/types.js +5 -0
  373. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +2 -2
  374. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  375. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +14 -14
  376. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +24 -25
  377. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +17 -3
  378. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +2 -1
  379. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +1 -1
  380. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +95 -0
  381. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +0 -96
  382. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +23 -0
  383. package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +46 -0
  384. package/packages/omo-codex/plugin/hooks/hooks.json +16 -16
  385. package/packages/omo-codex/plugin/package-lock.json +10 -9
  386. package/packages/omo-codex/plugin/package.json +27 -26
  387. package/packages/omo-codex/plugin/scripts/auto-update.mjs +64 -15
  388. package/packages/omo-codex/plugin/scripts/build-bundled-mcp-runtimes.mjs +16 -0
  389. package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +104 -0
  390. package/packages/omo-codex/plugin/scripts/migrate-codex-config.mjs +23 -6
  391. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +23 -11
  392. package/packages/omo-codex/plugin/scripts/sync-version.mjs +94 -0
  393. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +9 -9
  394. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +16 -1
  395. package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +93 -0
  396. package/packages/omo-codex/plugin/skills/lcx-doctor/agents/openai.yaml +11 -0
  397. package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +17 -13
  398. package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +139 -0
  399. package/packages/omo-codex/plugin/skills/lsp-setup/references/bash/README.md +60 -0
  400. package/packages/omo-codex/plugin/skills/lsp-setup/references/c-cpp/README.md +61 -0
  401. package/packages/omo-codex/plugin/skills/lsp-setup/references/csharp/README.md +71 -0
  402. package/packages/omo-codex/plugin/skills/lsp-setup/references/dart/README.md +48 -0
  403. package/packages/omo-codex/plugin/skills/lsp-setup/references/elixir/README.md +51 -0
  404. package/packages/omo-codex/plugin/skills/lsp-setup/references/go/README.md +57 -0
  405. package/packages/omo-codex/plugin/skills/lsp-setup/references/haskell/README.md +57 -0
  406. package/packages/omo-codex/plugin/skills/lsp-setup/references/java/README.md +57 -0
  407. package/packages/omo-codex/plugin/skills/lsp-setup/references/julia/README.md +60 -0
  408. package/packages/omo-codex/plugin/skills/lsp-setup/references/kotlin/README.md +59 -0
  409. package/packages/omo-codex/plugin/skills/lsp-setup/references/lua/README.md +66 -0
  410. package/packages/omo-codex/plugin/skills/lsp-setup/references/php/README.md +62 -0
  411. package/packages/omo-codex/plugin/skills/lsp-setup/references/python/README.md +71 -0
  412. package/packages/omo-codex/plugin/skills/lsp-setup/references/ruby/README.md +53 -0
  413. package/packages/omo-codex/plugin/skills/lsp-setup/references/rust/README.md +59 -0
  414. package/packages/omo-codex/plugin/skills/lsp-setup/references/swift/README.md +51 -0
  415. package/packages/omo-codex/plugin/skills/lsp-setup/references/terraform/README.md +62 -0
  416. package/packages/omo-codex/plugin/skills/lsp-setup/references/typescript/README.md +77 -0
  417. package/packages/omo-codex/plugin/skills/lsp-setup/references/yaml/README.md +70 -0
  418. package/packages/omo-codex/plugin/skills/lsp-setup/references/zig/README.md +49 -0
  419. package/packages/omo-codex/plugin/skills/lsp-setup/scripts/detect-lsp.ts +210 -0
  420. package/packages/omo-codex/plugin/skills/lsp-setup/scripts/lsp-server-table.ts +177 -0
  421. package/packages/omo-codex/plugin/skills/lsp-setup/scripts/tsconfig.json +17 -0
  422. package/packages/omo-codex/plugin/skills/lsp-setup/scripts/verify-lsp.ts +147 -0
  423. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +9 -9
  424. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +10 -10
  425. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +20 -22
  426. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +38 -61
  427. package/packages/omo-codex/plugin/skills/ultraresearch/SKILL.md +135 -677
  428. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +14 -14
  429. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +24 -25
  430. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +20 -11
  431. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +17 -11
  432. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +9 -9
  433. package/packages/omo-codex/plugin/test/aggregate-build.test.mjs +2 -1
  434. package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +1 -1
  435. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +5 -5
  436. package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +6 -6
  437. package/packages/omo-codex/plugin/test/auto-update-restart-notice.test.mjs +194 -0
  438. package/packages/omo-codex/plugin/test/auto-update.test.mjs +17 -0
  439. package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +15 -44
  440. package/packages/omo-codex/plugin/test/lsp-prebuild-layouts.test.mjs +140 -0
  441. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +261 -0
  442. package/packages/omo-codex/plugin/test/start-work-skill.test.mjs +9 -31
  443. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +68 -4
  444. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +119 -0
  445. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +11 -112
  446. package/packages/omo-codex/plugin/test/sync-version.test.mjs +68 -0
  447. package/packages/omo-codex/plugin/test/ultraresearch-skill-contract.test.mjs +126 -0
  448. package/packages/omo-codex/plugin/test/ulw-plan-skill.test.mjs +2 -2
  449. package/packages/omo-codex/scripts/install/bin-dir.mjs +20 -0
  450. package/packages/omo-codex/scripts/install/bin-links.mjs +43 -6
  451. package/packages/omo-codex/scripts/install/cache.mjs +4 -0
  452. package/packages/omo-codex/scripts/install/config.mjs +5 -3
  453. package/packages/omo-codex/scripts/install/delegated-command.mjs +5 -1
  454. package/packages/omo-codex/scripts/install/git-bash-mcp-env.mjs +28 -0
  455. package/packages/omo-codex/scripts/install/git-bash.mjs +12 -4
  456. package/packages/omo-codex/scripts/install/git-bash.test.mjs +39 -4
  457. package/packages/omo-codex/scripts/install/hook-targets.mjs +46 -0
  458. package/packages/omo-codex/scripts/install/multi-agent-v2-config.mjs +22 -10
  459. package/packages/omo-codex/scripts/install/process.mjs +1 -0
  460. package/packages/omo-codex/scripts/install-bin-links.test.mjs +131 -3
  461. package/packages/omo-codex/scripts/install-config-git-bash.test.mjs +91 -0
  462. package/packages/omo-codex/scripts/install-config.test.mjs +50 -44
  463. package/packages/omo-codex/scripts/install-delegated-command.test.mjs +78 -0
  464. package/packages/omo-codex/scripts/install-git-bash-mcp-env.test.mjs +93 -0
  465. package/packages/omo-codex/scripts/install-hook-targets.test.mjs +100 -0
  466. package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +3 -1
  467. package/packages/omo-codex/scripts/install-local.mjs +7 -18
  468. package/packages/omo-codex/scripts/install-local.test.mjs +34 -1
  469. package/packages/shared-skills/skills/lcx-contribute-bug-fix/SKILL.md +16 -1
  470. package/packages/shared-skills/skills/lcx-doctor/SKILL.md +93 -0
  471. package/packages/shared-skills/skills/lcx-doctor/agents/openai.yaml +11 -0
  472. package/packages/shared-skills/skills/lcx-report-bug/SKILL.md +17 -13
  473. package/packages/shared-skills/skills/lsp-setup/SKILL.md +139 -0
  474. package/packages/shared-skills/skills/lsp-setup/references/bash/README.md +60 -0
  475. package/packages/shared-skills/skills/lsp-setup/references/c-cpp/README.md +61 -0
  476. package/packages/shared-skills/skills/lsp-setup/references/csharp/README.md +71 -0
  477. package/packages/shared-skills/skills/lsp-setup/references/dart/README.md +48 -0
  478. package/packages/shared-skills/skills/lsp-setup/references/elixir/README.md +51 -0
  479. package/packages/shared-skills/skills/lsp-setup/references/go/README.md +57 -0
  480. package/packages/shared-skills/skills/lsp-setup/references/haskell/README.md +57 -0
  481. package/packages/shared-skills/skills/lsp-setup/references/java/README.md +57 -0
  482. package/packages/shared-skills/skills/lsp-setup/references/julia/README.md +60 -0
  483. package/packages/shared-skills/skills/lsp-setup/references/kotlin/README.md +59 -0
  484. package/packages/shared-skills/skills/lsp-setup/references/lua/README.md +66 -0
  485. package/packages/shared-skills/skills/lsp-setup/references/php/README.md +62 -0
  486. package/packages/shared-skills/skills/lsp-setup/references/python/README.md +71 -0
  487. package/packages/shared-skills/skills/lsp-setup/references/ruby/README.md +53 -0
  488. package/packages/shared-skills/skills/lsp-setup/references/rust/README.md +59 -0
  489. package/packages/shared-skills/skills/lsp-setup/references/swift/README.md +51 -0
  490. package/packages/shared-skills/skills/lsp-setup/references/terraform/README.md +62 -0
  491. package/packages/shared-skills/skills/lsp-setup/references/typescript/README.md +77 -0
  492. package/packages/shared-skills/skills/lsp-setup/references/yaml/README.md +70 -0
  493. package/packages/shared-skills/skills/lsp-setup/references/zig/README.md +49 -0
  494. package/packages/shared-skills/skills/lsp-setup/scripts/detect-lsp.ts +210 -0
  495. package/packages/shared-skills/skills/lsp-setup/scripts/lsp-server-table.ts +177 -0
  496. package/packages/shared-skills/skills/lsp-setup/scripts/tsconfig.json +17 -0
  497. package/packages/shared-skills/skills/lsp-setup/scripts/verify-lsp.ts +147 -0
  498. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +1 -1
  499. package/packages/shared-skills/skills/review-work/SKILL.md +10 -14
  500. package/packages/shared-skills/skills/start-work/SKILL.md +30 -59
  501. package/packages/shared-skills/skills/ultraresearch/SKILL.md +126 -667
  502. package/dist/hooks/anthropic-effort/hook.d.ts +0 -26
  503. package/dist/hooks/anthropic-effort/index.d.ts +0 -1
  504. package/dist/hooks/keyword-detector/analyze/default.d.ts +0 -12
  505. package/dist/hooks/keyword-detector/analyze/index.d.ts +0 -1
  506. package/dist/hooks/keyword-detector/search/default.d.ts +0 -12
  507. package/dist/hooks/keyword-detector/search/index.d.ts +0 -1
  508. package/dist/hooks/thinking-block-validator/hook.d.ts +0 -12
  509. package/dist/hooks/thinking-block-validator/index.d.ts +0 -1
  510. package/packages/omo-codex/plugin/components/ultrawork/test/directive-contract.test.ts +0 -18
  511. package/packages/omo-codex/plugin/test/global-review-debug-gate.test.mjs +0 -29
  512. package/packages/omo-codex/plugin/test/subagent-guidance.test.mjs +0 -151
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Public types for pi-rules.
3
+ *
4
+ * These types are stable contracts between modules. The frontmatter type
5
+ * mirrors omo's `RuleMetadata` plus Claude (`paths`) and Copilot (`applyTo`)
6
+ * aliases that are normalized into `globs` internally.
7
+ */
8
+ /**
9
+ * YAML frontmatter parsed from a rule markdown file.
10
+ * `paths` (Claude alias) and `applyTo` (Copilot alias) are normalized into
11
+ * `globs` by the parser before any matcher sees this struct.
12
+ */
13
+ export interface RuleFrontmatter {
14
+ description?: string;
15
+ globs?: string | string[];
16
+ paths?: string | string[];
17
+ applyTo?: string | string[];
18
+ alwaysApply?: boolean;
19
+ }
20
+ /**
21
+ * Result of parsing a rule markdown file.
22
+ * `body` excludes the frontmatter delimiters and the YAML payload.
23
+ */
24
+ export interface ParsedRule {
25
+ frontmatter: RuleFrontmatter;
26
+ body: string;
27
+ /**
28
+ * Diagnostic message if frontmatter parsing failed but the body was salvaged.
29
+ * Empty when parsing succeeded.
30
+ */
31
+ diagnostic?: string;
32
+ }
33
+ /**
34
+ * A discovered rule file candidate before parsing/matching.
35
+ *
36
+ * `path` is the absolute path as discovered (possibly via symlink).
37
+ * `realPath` is the canonical resolved path used for dedup.
38
+ * `source` identifies which discovery source produced this candidate.
39
+ */
40
+ export interface RuleCandidate {
41
+ path: string;
42
+ realPath: string;
43
+ source: RuleSource;
44
+ /**
45
+ * Distance from the target file directory to the directory containing this rule.
46
+ * 0 = same directory, 9999 = global/user-home rule.
47
+ */
48
+ distance: number;
49
+ isGlobal: boolean;
50
+ /**
51
+ * True when this candidate is a SINGLE-FILE rule like
52
+ * `.github/copilot-instructions.md` (frontmatter optional, applies always).
53
+ */
54
+ isSingleFile: boolean;
55
+ /**
56
+ * Path relative to project root, POSIX-normalized. Used for matcher and display.
57
+ * Empty string for user-home global rules.
58
+ */
59
+ relativePath: string;
60
+ }
61
+ /**
62
+ * A fully-loaded rule ready for injection.
63
+ */
64
+ export interface LoadedRule extends RuleCandidate {
65
+ frontmatter: RuleFrontmatter;
66
+ body: string;
67
+ contentHash: string;
68
+ matchReason: MatchReason;
69
+ }
70
+ /**
71
+ * Source identifier for rule files. Used for deterministic ordering and display.
72
+ */
73
+ export type RuleSource = ".omo/rules" | ".claude/rules" | ".cursor/rules" | ".github/instructions" | ".github/copilot-instructions.md" | "CONTEXT.md" | "plugin-bundled" | "~/.omo/rules" | "~/.opencode/rules" | "~/.claude/rules";
74
+ /**
75
+ * Why a candidate matched the target file. Surfaced in the injection block so
76
+ * the model can attribute its behavior to a specific rule.
77
+ */
78
+ export type MatchReason = "alwaysApply" | "single-file" | {
79
+ kind: "glob";
80
+ pattern: string;
81
+ } | {
82
+ kind: "no-match";
83
+ };
84
+ /**
85
+ * Truncation result.
86
+ */
87
+ export interface TruncationResult {
88
+ body: string;
89
+ truncated: boolean;
90
+ originalLength: number;
91
+ }
92
+ /**
93
+ * Configuration knobs resolved from env vars and package.json.
94
+ */
95
+ export interface PiRulesConfig {
96
+ disabled: boolean;
97
+ mode: "static" | "dynamic" | "both" | "off";
98
+ maxRuleChars: number;
99
+ maxResultChars: number;
100
+ postCompactMaxRuleChars: number;
101
+ postCompactMaxResultChars: number;
102
+ dynamicMaxRuleChars: number;
103
+ dynamicMaxResultChars: number;
104
+ promptMaxRuleChars: number;
105
+ promptMaxResultChars: number;
106
+ enabledSources: RuleSource[] | "auto";
107
+ }
108
+ /**
109
+ * Per-session in-memory dedup state.
110
+ *
111
+ * `staticDedup` keys are `{cwd}::{rulePath}::{contentHash}` strings.
112
+ * `dynamicDedup` stores session-scoped `{rulePath}::{contentHash}` strings.
113
+ */
114
+ export interface SessionState {
115
+ cwd: string | undefined;
116
+ staticDedup: Set<string>;
117
+ dynamicDedup: Map<string, Set<string>>;
118
+ dynamicTargetFingerprints: Map<string, string>;
119
+ loadedRules: LoadedRule[];
120
+ diagnostics: RuleDiagnostic[];
121
+ }
122
+ export interface RuleDiagnostic {
123
+ severity: "warning" | "error";
124
+ source: string;
125
+ message: string;
126
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Public types for pi-rules.
3
+ *
4
+ * These types are stable contracts between modules. The frontmatter type
5
+ * mirrors omo's `RuleMetadata` plus Claude (`paths`) and Copilot (`applyTo`)
6
+ * aliases that are normalized into `globs` internally.
7
+ */
8
+ export {};
@@ -0,0 +1,6 @@
1
+ interface RulesEngineFactoryOptions {
2
+ env?: NodeJS.ProcessEnv;
3
+ platform?: NodeJS.Platform;
4
+ }
5
+ export declare function createRulesEngine(options: RulesEngineFactoryOptions, config?: import("./rules/types.js").PiRulesConfig): import("./rules/engine-types.js").Engine;
6
+ export {};
@@ -0,0 +1,20 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { configFromEnvironment } from "./config.js";
3
+ import { createEngine } from "./rules/engine.js";
4
+ import { findRuleCandidates } from "./rules/finder.js";
5
+ import { findProjectRoot } from "./rules/project-root.js";
6
+ export function createRulesEngine(options, config = configFromEnvironment(options.env)) {
7
+ const platform = options.platform ?? process.platform;
8
+ return createEngine(config, {
9
+ findCandidates: (finderOptions) => findRuleCandidates({ ...finderOptions, platform }),
10
+ findProjectRoot,
11
+ readFile: (path) => {
12
+ try {
13
+ return readFileSync(path, "utf8");
14
+ }
15
+ catch {
16
+ return null;
17
+ }
18
+ },
19
+ });
20
+ }
@@ -0,0 +1,3 @@
1
+ export declare const SESSION_STATE_LOCK_CONTENDED: unique symbol;
2
+ export type SessionStateLockResult<T> = T | typeof SESSION_STATE_LOCK_CONTENDED;
3
+ export declare function withSessionStateLock<T>(cachePath: string, callback: () => T): SessionStateLockResult<T>;
@@ -0,0 +1,41 @@
1
+ import { mkdirSync, rmSync } from "node:fs";
2
+ import { dirname } from "node:path";
3
+ export const SESSION_STATE_LOCK_CONTENDED = Symbol("session-state-lock-contended");
4
+ const LOCK_RETRY_COUNT = 20;
5
+ const LOCK_RETRY_DELAY_MS = 5;
6
+ const LOCK_SLEEP_VIEW = new Int32Array(new SharedArrayBuffer(4));
7
+ export function withSessionStateLock(cachePath, callback) {
8
+ const lockPath = `${cachePath}.lock`;
9
+ mkdirSync(dirname(cachePath), { recursive: true });
10
+ for (let attempt = 0; attempt < LOCK_RETRY_COUNT; attempt += 1) {
11
+ try {
12
+ mkdirSync(lockPath);
13
+ try {
14
+ return callback();
15
+ }
16
+ finally {
17
+ rmSync(lockPath, { recursive: true, force: true });
18
+ }
19
+ }
20
+ catch (error) {
21
+ if (errorCode(error) === "EEXIST") {
22
+ sleepSync(LOCK_RETRY_DELAY_MS);
23
+ continue;
24
+ }
25
+ throw error;
26
+ }
27
+ }
28
+ return SESSION_STATE_LOCK_CONTENDED;
29
+ }
30
+ function errorCode(error) {
31
+ if (!isRecord(error)) {
32
+ return undefined;
33
+ }
34
+ return Reflect.get(error, "code");
35
+ }
36
+ function isRecord(value) {
37
+ return typeof value === "object" && value !== null && !Array.isArray(value);
38
+ }
39
+ function sleepSync(milliseconds) {
40
+ Atomics.wait(LOCK_SLEEP_VIEW, 0, 0, milliseconds);
41
+ }
@@ -0,0 +1,10 @@
1
+ type RuntimeEnv = Readonly<Record<string, string | undefined>>;
2
+ interface OmoResolutionDeps {
3
+ readonly fileExists?: (path: string) => boolean;
4
+ readonly platform?: NodeJS.Platform;
5
+ }
6
+ export declare const SPARKSHELL_AWARENESS_DEDUP_KEY = "__omo_sparkshell_awareness__";
7
+ export declare function isCodexAppServerActive(env?: RuntimeEnv): boolean;
8
+ export declare function resolveOmoInvocation(env?: RuntimeEnv, deps?: OmoResolutionDeps): string | null;
9
+ export declare function getSparkShellRuntimeAwareness(env?: RuntimeEnv, deps?: OmoResolutionDeps): string;
10
+ export {};
@@ -0,0 +1,90 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ const SPARKSHELL_AWARENESS_MARKER = "## Sparkshell Runtime";
4
+ export const SPARKSHELL_AWARENESS_DEDUP_KEY = "__omo_sparkshell_awareness__";
5
+ export function isCodexAppServerActive(env = process.env) {
6
+ const originator = env["CODEX_INTERNAL_ORIGINATOR_OVERRIDE"]?.toLowerCase() ?? "";
7
+ const bundleIdentifier = env["__CFBundleIdentifier"]?.toLowerCase() ?? "";
8
+ const shellActive = isTruthy(env["CODEX_SHELL"]);
9
+ return (shellActive &&
10
+ (originator.includes("codex desktop") ||
11
+ originator.includes("codex app") ||
12
+ bundleIdentifier === "com.openai.codex"));
13
+ }
14
+ function isSparkShellAppServerConfigured(env = process.env) {
15
+ const codexSocketPath = env["CODEX_APP_SERVER_SOCKET"]?.trim() ?? "";
16
+ const omoSocketPath = env["OMO_SPARKSHELL_APP_SERVER_SOCKET"]?.trim() ?? "";
17
+ return codexSocketPath.length > 0 || omoSocketPath.length > 0;
18
+ }
19
+ export function resolveOmoInvocation(env = process.env, deps = {}) {
20
+ const fileExists = deps.fileExists ?? existsSync;
21
+ const platform = deps.platform ?? process.platform;
22
+ const binNames = platform === "win32" ? ["omo.cmd", "omo.exe", "omo"] : ["omo"];
23
+ const pathDelimiter = platform === "win32" ? ";" : ":";
24
+ const pathEntries = (env["PATH"] ?? "").split(pathDelimiter).filter((entry) => entry.trim().length > 0);
25
+ for (const pathEntry of pathEntries) {
26
+ for (const binName of binNames) {
27
+ if (fileExists(join(pathEntry, binName)))
28
+ return "omo";
29
+ }
30
+ }
31
+ for (const candidateDir of omoCandidateBinDirs(env)) {
32
+ for (const binName of binNames) {
33
+ const candidate = join(candidateDir, binName);
34
+ if (fileExists(candidate))
35
+ return candidate;
36
+ }
37
+ }
38
+ return null;
39
+ }
40
+ function omoCandidateBinDirs(env) {
41
+ const dirs = [];
42
+ const localBinDir = env["CODEX_LOCAL_BIN_DIR"]?.trim() ?? "";
43
+ if (localBinDir.length > 0)
44
+ dirs.push(localBinDir);
45
+ const home = env["HOME"]?.trim() || env["USERPROFILE"]?.trim() || "";
46
+ const codexHome = env["CODEX_HOME"]?.trim() || (home.length > 0 ? join(home, ".codex") : "");
47
+ if (codexHome.length > 0)
48
+ dirs.push(join(codexHome, "bin"));
49
+ if (home.length > 0)
50
+ dirs.push(join(home, ".local", "bin"));
51
+ return dirs;
52
+ }
53
+ export function getSparkShellRuntimeAwareness(env = process.env, deps = {}) {
54
+ const override = env["OMO_SPARKSHELL_AWARENESS"] ?? env["LAZYCODEX_SPARKSHELL_AWARENESS"];
55
+ if (isFalsy(override)) {
56
+ return "";
57
+ }
58
+ if (!isTruthy(override) && !isCodexAppServerActive(env) && !isSparkShellAppServerConfigured(env)) {
59
+ return "";
60
+ }
61
+ const resolved = resolveOmoInvocation(env, deps);
62
+ const invocation = resolved ?? (isTruthy(override) ? "omo" : null);
63
+ if (invocation === null) {
64
+ return "";
65
+ }
66
+ const command = /\s/.test(invocation) ? `"${invocation}"` : invocation;
67
+ return [
68
+ SPARKSHELL_AWARENESS_MARKER,
69
+ "",
70
+ `- Prefer \`${command} sparkshell <command>\` for repo inspection, CLI smoke tests, git/history checks, and bounded verification before falling back to raw shell commands.`,
71
+ `- Use \`${command} sparkshell --shell '<command>'\` only when shell metacharacters are required.`,
72
+ `- Use \`${command} sparkshell --tmux-pane <pane-id> --tail-lines 400\` to inspect an existing tmux pane. Tail lines must stay between 100 and 1000.`,
73
+ "- When no native sidecar or appserver is available, Sparkshell silently falls back to raw command execution. `OMO_SPARKSHELL_BIN` selects a native sidecar path.",
74
+ "- When `CODEX_THREAD_ID` identifies a Codex session, Sparkshell appends recent session context (first/latest user request + last 5 conversation messages) after the shell result so output consumers stay aligned with the session goals. `OMO_SPARKSHELL_SESSION_CONTEXT=0` disables it.",
75
+ `- Route potentially huge output (full log files, big diffs, \`cat\`/\`grep\` over large artifacts) through \`${command} sparkshell\` instead of reading it raw: oversized output is condensed to a budget while preserving error signatures, repeated patterns, session-goal-relevant lines, and head/tail. Tune with \`--budget <chars>\`; disable with \`OMO_SPARKSHELL_CONDENSE=0\`.`,
76
+ "- Oversized output is first summarized by the spark model (`codex exec`, default `gpt-5.3-codex-spark`) fed with the session context: the summary reproduces the output as-is (no masking) and ends with a `[sparkshell caption]` line describing what ran and which lines were omitted. `OMO_SPARKSHELL_SPARK=0` skips the model and uses deterministic condensation directly.",
77
+ ].join("\n");
78
+ }
79
+ function isTruthy(value) {
80
+ if (value === undefined) {
81
+ return false;
82
+ }
83
+ return ["1", "true", "yes", "on"].includes(value.trim().toLowerCase());
84
+ }
85
+ function isFalsy(value) {
86
+ if (value === undefined) {
87
+ return false;
88
+ }
89
+ return ["0", "false", "no", "off"].includes(value.trim().toLowerCase());
90
+ }
@@ -0,0 +1,3 @@
1
+ import type { CodexRulesHookOptions } from "./codex-hook-options.js";
2
+ import type { TranscriptSearchOptions } from "./transcript-search.js";
3
+ export declare function runStaticInjection(cwd: string, transcriptPath: string | null, eventName: "SessionStart" | "UserPromptSubmit", cachePath: string, options: CodexRulesHookOptions, completedPostCompactChannel?: "static", transcriptSearchOptions?: TranscriptSearchOptions, model?: string): string;
@@ -0,0 +1,128 @@
1
+ import { existsSync } from "node:fs";
2
+ import { configFromEnvironment } from "./config.js";
3
+ import { withPromptBudget } from "./event-budget.js";
4
+ import { formatAdditionalContextOutput } from "./hook-output.js";
5
+ import { completePostCompactRecovery, hydrateEngineState, persistEngineState } from "./persistent-cache.js";
6
+ import { withPostCompactBudget } from "./post-compact-budget.js";
7
+ import { buildPostCompactReadDirective } from "./post-compact-directive.js";
8
+ import { isNeverTruncatedRule } from "./rules/truncator.js";
9
+ import { createRulesEngine } from "./rules-engine-factory.js";
10
+ import { getSparkShellRuntimeAwareness, SPARKSHELL_AWARENESS_DEDUP_KEY } from "./sparkshell-awareness.js";
11
+ import { filterRulesAlreadyInTranscript, filterRulesNotInTranscriptText } from "./transcript-rule-filter.js";
12
+ import { readTranscriptSearchText } from "./transcript-search.js";
13
+ export function runStaticInjection(cwd, transcriptPath, eventName, cachePath, options, completedPostCompactChannel, transcriptSearchOptions = {}, model) {
14
+ const config = configFromEnvironment(options.env);
15
+ if (config.disabled || config.mode === "off" || config.mode === "dynamic") {
16
+ if (completedPostCompactChannel !== undefined) {
17
+ completePostCompactRecovery(cachePath, completedPostCompactChannel);
18
+ }
19
+ return "";
20
+ }
21
+ if (completedPostCompactChannel !== undefined) {
22
+ return runPostCompactRecovery({
23
+ cwd,
24
+ transcriptPath,
25
+ eventName,
26
+ cachePath,
27
+ options,
28
+ channel: completedPostCompactChannel,
29
+ model: model ?? "",
30
+ config,
31
+ });
32
+ }
33
+ const effectiveConfig = eventName === "UserPromptSubmit" ? withPromptBudget(config) : config;
34
+ const engine = createRulesEngine(options, effectiveConfig);
35
+ hydrateEngineState(engine, cachePath);
36
+ engine.state.cwd = cwd;
37
+ const loaded = engine.loadStaticRules(cwd);
38
+ const rules = filterRulesAlreadyInTranscript(loaded.rules.filter((rule) => !engine.isStaticInjected(rule)), transcriptPath, (rule) => {
39
+ engine.markStaticInjected(rule);
40
+ }, transcriptSearchOptions);
41
+ const sparkshellAwareness = engine.state.staticDedup.has(SPARKSHELL_AWARENESS_DEDUP_KEY)
42
+ ? ""
43
+ : getSparkShellRuntimeAwareness(options.env);
44
+ if (rules.length === 0 && sparkshellAwareness.length === 0) {
45
+ persistEngineState(engine, cachePath);
46
+ return "";
47
+ }
48
+ const block = engine.formatStatic(rules);
49
+ for (const rule of rules) {
50
+ engine.markStaticInjected(rule);
51
+ }
52
+ if (sparkshellAwareness.length > 0) {
53
+ engine.state.staticDedup.add(SPARKSHELL_AWARENESS_DEDUP_KEY);
54
+ }
55
+ persistEngineState(engine, cachePath);
56
+ return formatAdditionalContextOutput(eventName, combineStaticContext(block, sparkshellAwareness));
57
+ }
58
+ function runPostCompactRecovery(input) {
59
+ const effectiveConfig = withPostCompactBudget(input.config, {
60
+ model: input.model,
61
+ transcriptPath: input.transcriptPath,
62
+ });
63
+ const engine = createRulesEngine(input.options, effectiveConfig);
64
+ hydrateEngineState(engine, input.cachePath);
65
+ engine.state.cwd = input.cwd;
66
+ const loaded = engine.loadStaticRules(input.cwd);
67
+ const transcriptText = readRecoveryTranscriptText(input.transcriptPath);
68
+ const missingRules = filterRulesNotInTranscriptText(loaded.rules.filter((rule) => !engine.isStaticInjected(rule)), transcriptText, (rule) => {
69
+ engine.markStaticInjected(rule);
70
+ });
71
+ const dynamicRulePaths = recoverDynamicRulePaths(engine, transcriptText, loaded.rules);
72
+ const sparkshellAwareness = engine.state.staticDedup.has(SPARKSHELL_AWARENESS_DEDUP_KEY)
73
+ ? ""
74
+ : getSparkShellRuntimeAwareness(input.options.env);
75
+ if (missingRules.length === 0 && dynamicRulePaths.length === 0 && sparkshellAwareness.length === 0) {
76
+ persistEngineState(engine, input.cachePath, input.channel);
77
+ return "";
78
+ }
79
+ const fullBodyRules = missingRules.filter((rule) => isNeverTruncatedRule(ruleDisplayPath(rule)));
80
+ const listedRules = missingRules.filter((rule) => !isNeverTruncatedRule(ruleDisplayPath(rule)));
81
+ const bodyBlock = fullBodyRules.length === 0 ? "" : engine.formatStatic(fullBodyRules);
82
+ const directive = buildPostCompactReadDirective([...listedRules.map((rule) => rule.path), ...dynamicRulePaths], effectiveConfig.maxResultChars);
83
+ for (const rule of missingRules) {
84
+ engine.markStaticInjected(rule);
85
+ }
86
+ if (sparkshellAwareness.length > 0) {
87
+ engine.state.staticDedup.add(SPARKSHELL_AWARENESS_DEDUP_KEY);
88
+ }
89
+ persistEngineState(engine, input.cachePath, input.channel);
90
+ return formatAdditionalContextOutput(input.eventName, combineStaticContext(bodyBlock, directive, sparkshellAwareness));
91
+ }
92
+ function readRecoveryTranscriptText(transcriptPath) {
93
+ if (transcriptPath === null) {
94
+ return null;
95
+ }
96
+ return (readTranscriptSearchText(transcriptPath, { latestCompactedReplacementOnly: true }) ??
97
+ readTranscriptSearchText(transcriptPath));
98
+ }
99
+ function recoverDynamicRulePaths(engine, transcriptText, staticRules) {
100
+ const staticRulePaths = new Set(staticRules.map((rule) => rule.realPath));
101
+ const recoveredPaths = new Set();
102
+ for (const dedupKeys of engine.state.dynamicDedup.values()) {
103
+ for (const dedupKey of dedupKeys) {
104
+ const separatorIndex = dedupKey.lastIndexOf("::");
105
+ if (separatorIndex <= 0) {
106
+ continue;
107
+ }
108
+ const rulePath = dedupKey.slice(0, separatorIndex);
109
+ if (staticRulePaths.has(rulePath)) {
110
+ continue;
111
+ }
112
+ if (transcriptText !== null && transcriptText.includes(rulePath)) {
113
+ continue;
114
+ }
115
+ if (!existsSync(rulePath)) {
116
+ continue;
117
+ }
118
+ recoveredPaths.add(rulePath);
119
+ }
120
+ }
121
+ return [...recoveredPaths].sort();
122
+ }
123
+ function ruleDisplayPath(rule) {
124
+ return rule.relativePath.length > 0 ? rule.relativePath : rule.path;
125
+ }
126
+ function combineStaticContext(...blocks) {
127
+ return blocks.filter((block) => block.trim().length > 0).join("\n\n");
128
+ }
@@ -0,0 +1,6 @@
1
+ export interface CodexPostToolUseLike {
2
+ tool_name: string;
3
+ tool_input: unknown;
4
+ tool_response: unknown;
5
+ }
6
+ export declare function extractCodexToolPaths(input: CodexPostToolUseLike, cwd: string): string[];
@@ -0,0 +1,168 @@
1
+ import { existsSync, statSync } from "node:fs";
2
+ import { isAbsolute, resolve } from "node:path";
3
+ const COMMAND_TOOL_NAMES = new Set(["bash", "shell_command", "exec_command"]);
4
+ const TRACKED_TOOL_NAMES = new Set([
5
+ "read",
6
+ "read_file",
7
+ "mcp__filesystem__read_file",
8
+ "mcp__filesystem__read_multiple_files",
9
+ "mcp__filesystem__write_file",
10
+ "mcp__filesystem__edit_file",
11
+ "write",
12
+ "edit",
13
+ "multiedit",
14
+ "multi_edit",
15
+ "apply_patch",
16
+ "bash",
17
+ "shell_command",
18
+ "exec_command",
19
+ ]);
20
+ export function extractCodexToolPaths(input, cwd) {
21
+ const toolName = input.tool_name.toLowerCase();
22
+ if (!TRACKED_TOOL_NAMES.has(toolName) || isFailedToolResponse(input.tool_response)) {
23
+ return [];
24
+ }
25
+ const paths = new Set();
26
+ const toolInput = isRecord(input.tool_input) ? input.tool_input : {};
27
+ addCommonPathFields(paths, toolInput, cwd);
28
+ addPatchPayloadPaths(paths, toolInput, cwd);
29
+ addPatchRecordPaths(paths, toolInput["files"], cwd);
30
+ addPatchRecordPaths(paths, toolInput["changes"], cwd);
31
+ if (COMMAND_TOOL_NAMES.has(toolName)) {
32
+ const command = stringProperty(toolInput, "command") ?? stringProperty(toolInput, "cmd");
33
+ const workdir = stringProperty(toolInput, "workdir") ?? stringProperty(toolInput, "cwd");
34
+ addCommandPaths(paths, command, workdir === undefined ? cwd : resolvePath(cwd, workdir));
35
+ }
36
+ return [...paths];
37
+ }
38
+ function addCommonPathFields(paths, input, cwd) {
39
+ for (const key of ["path", "filePath", "file_path", "target", "targetPath", "target_path"]) {
40
+ addPath(paths, input[key], cwd, false);
41
+ }
42
+ for (const key of ["paths", "filePaths", "file_paths"]) {
43
+ addPathArray(paths, input[key], cwd, false);
44
+ }
45
+ }
46
+ function addPatchPayloadPaths(paths, input, cwd) {
47
+ for (const key of ["input", "patch", "command", "cmd"]) {
48
+ const value = input[key];
49
+ if (typeof value === "string") {
50
+ addPatchHeaderPaths(paths, value, cwd);
51
+ }
52
+ }
53
+ }
54
+ function addPatchHeaderPaths(paths, patch, cwd) {
55
+ for (const line of patch.split("\n")) {
56
+ for (const prefix of ["*** Add File: ", "*** Update File: ", "*** Move to: "]) {
57
+ if (line.startsWith(prefix)) {
58
+ addPath(paths, line.slice(prefix.length).trim(), cwd, false);
59
+ }
60
+ }
61
+ }
62
+ }
63
+ function addPatchRecordPaths(paths, value, cwd) {
64
+ if (!Array.isArray(value))
65
+ return;
66
+ for (const item of value) {
67
+ if (typeof item === "string") {
68
+ addPath(paths, item, cwd, false);
69
+ continue;
70
+ }
71
+ if (!isRecord(item))
72
+ continue;
73
+ addCommonPathFields(paths, item, cwd);
74
+ for (const key of ["movePath", "move_path", "to", "from"]) {
75
+ addPath(paths, item[key], cwd, false);
76
+ }
77
+ }
78
+ }
79
+ function addCommandPaths(paths, command, cwd) {
80
+ if (command === undefined)
81
+ return;
82
+ for (const token of tokenizeShell(command)) {
83
+ if (token.length === 0 || token.startsWith("-") || token.includes("*")) {
84
+ continue;
85
+ }
86
+ addPath(paths, token, cwd, true);
87
+ }
88
+ }
89
+ function addPathArray(paths, value, cwd, mustExist) {
90
+ if (!Array.isArray(value))
91
+ return;
92
+ for (const item of value) {
93
+ addPath(paths, item, cwd, mustExist);
94
+ }
95
+ }
96
+ function addPath(paths, value, cwd, mustExist) {
97
+ if (typeof value !== "string" || value.length === 0 || looksLikeUrl(value)) {
98
+ return;
99
+ }
100
+ const path = resolvePath(cwd, value);
101
+ if (mustExist && !isExistingFile(path)) {
102
+ return;
103
+ }
104
+ paths.add(path);
105
+ }
106
+ function resolvePath(cwd, filePath) {
107
+ return isAbsolute(filePath) ? filePath : resolve(cwd, filePath);
108
+ }
109
+ function isExistingFile(filePath) {
110
+ try {
111
+ return existsSync(filePath) && statSync(filePath).isFile();
112
+ }
113
+ catch {
114
+ return false;
115
+ }
116
+ }
117
+ function looksLikeUrl(value) {
118
+ return /^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(value);
119
+ }
120
+ function stringProperty(value, key) {
121
+ const property = value[key];
122
+ return typeof property === "string" && property.length > 0 ? property : undefined;
123
+ }
124
+ function tokenizeShell(command) {
125
+ const tokens = [];
126
+ let current = "";
127
+ let quote = null;
128
+ let escaped = false;
129
+ for (const character of command) {
130
+ if (escaped) {
131
+ current += character;
132
+ escaped = false;
133
+ continue;
134
+ }
135
+ if (character === "\\") {
136
+ escaped = true;
137
+ continue;
138
+ }
139
+ if ((character === "'" || character === '"') && quote === null) {
140
+ quote = character;
141
+ continue;
142
+ }
143
+ if (quote === character) {
144
+ quote = null;
145
+ continue;
146
+ }
147
+ if (quote === null && /\s/.test(character)) {
148
+ if (current.length > 0) {
149
+ tokens.push(current);
150
+ current = "";
151
+ }
152
+ continue;
153
+ }
154
+ current += character;
155
+ }
156
+ if (current.length > 0) {
157
+ tokens.push(current);
158
+ }
159
+ return tokens;
160
+ }
161
+ function isRecord(value) {
162
+ return typeof value === "object" && value !== null && !Array.isArray(value);
163
+ }
164
+ function isFailedToolResponse(value) {
165
+ if (!isRecord(value))
166
+ return false;
167
+ return (value["isError"] === true || value["is_error"] === true || value["error"] === true || value["status"] === "error");
168
+ }
@@ -0,0 +1,4 @@
1
+ import type { LoadedRule } from "./rules/types.js";
2
+ import type { TranscriptSearchOptions } from "./transcript-search.js";
3
+ export declare function filterRulesAlreadyInTranscript(rules: ReadonlyArray<LoadedRule>, transcriptPath: string | null, markInjected: (rule: LoadedRule) => void, options?: TranscriptSearchOptions): LoadedRule[];
4
+ export declare function filterRulesNotInTranscriptText(rules: ReadonlyArray<LoadedRule>, transcriptText: string | null, markInjected: (rule: LoadedRule) => void): LoadedRule[];