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,133 @@
1
+ import { createHash } from "node:crypto";
2
+ import os from "node:os";
3
+ import { writeTelemetryDiagnostic, } from "./diagnostics.js";
4
+ import { getPostHogApiKey, getPostHogHost, hasPostHogApiKey, shouldDisablePostHog } from "./env-flags.js";
5
+ import { getPostHogActivityCaptureState } from "./posthog-activity-state.js";
6
+ import { DEFAULT_POSTHOG_API_KEY, DEFAULT_POSTHOG_HOST, EVENT_NAME, getComponentVersion, PACKAGE_NAME, PRODUCT_NAME, } from "./product-identity.js";
7
+ export { DEFAULT_POSTHOG_API_KEY, DEFAULT_POSTHOG_HOST };
8
+ let osProviderOverride = null;
9
+ let activityStateProviderOverride = null;
10
+ const NO_OP_POSTHOG = {
11
+ trackActive: () => undefined,
12
+ shutdown: async () => undefined,
13
+ };
14
+ function resolveOsProvider() {
15
+ return osProviderOverride ?? os;
16
+ }
17
+ function resolveActivityStateProvider() {
18
+ return activityStateProviderOverride ?? getPostHogActivityCaptureState;
19
+ }
20
+ function writePostHogDiagnostic(event, source, error, errorKind) {
21
+ writeTelemetryDiagnostic({ event, source, error, errorKind });
22
+ }
23
+ function getSafeCpuInfo() {
24
+ try {
25
+ const cpuInfo = resolveOsProvider().cpus();
26
+ return {
27
+ count: cpuInfo.length,
28
+ model: cpuInfo[0]?.model,
29
+ };
30
+ }
31
+ catch (error) {
32
+ writePostHogDiagnostic("telemetry_cpu_info_unavailable", "plugin", error, error instanceof Error ? "error" : "non_error");
33
+ return {
34
+ count: 0,
35
+ model: undefined,
36
+ };
37
+ }
38
+ }
39
+ function getSharedProperties() {
40
+ const osProvider = resolveOsProvider();
41
+ const cpuInfo = getSafeCpuInfo();
42
+ return {
43
+ platform: "omo-codex",
44
+ product_name: PRODUCT_NAME,
45
+ package_name: PACKAGE_NAME,
46
+ package_version: getComponentVersion(),
47
+ runtime: "node",
48
+ runtime_version: process.version,
49
+ source: "plugin",
50
+ $os: osProvider.platform(),
51
+ $os_version: osProvider.release(),
52
+ os_arch: osProvider.arch(),
53
+ os_type: osProvider.type(),
54
+ cpu_count: cpuInfo.count,
55
+ cpu_model: cpuInfo.model,
56
+ total_memory_gb: Math.round(osProvider.totalmem() / 1024 / 1024 / 1024),
57
+ locale: Intl.DateTimeFormat().resolvedOptions().locale,
58
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
59
+ shell: process.env["SHELL"],
60
+ ci: Boolean(process.env["CI"]),
61
+ terminal: process.env["TERM_PROGRAM"],
62
+ };
63
+ }
64
+ export async function createPluginPostHog() {
65
+ if (shouldDisablePostHog() || !hasPostHogApiKey()) {
66
+ return NO_OP_POSTHOG;
67
+ }
68
+ let PostHogClientConstructor;
69
+ try {
70
+ const module = await import("posthog-node");
71
+ PostHogClientConstructor = module.PostHog;
72
+ }
73
+ catch (error) {
74
+ writePostHogDiagnostic("telemetry_posthog_import_failed", "plugin", error, error instanceof Error ? "error" : "non_error");
75
+ return NO_OP_POSTHOG;
76
+ }
77
+ let client;
78
+ try {
79
+ client = new PostHogClientConstructor(getPostHogApiKey(), {
80
+ enableExceptionAutocapture: false,
81
+ enableLocalEvaluation: false,
82
+ strictLocalEvaluation: true,
83
+ disableRemoteConfig: true,
84
+ flushAt: 1,
85
+ flushInterval: 0,
86
+ host: getPostHogHost(),
87
+ disableGeoip: false,
88
+ });
89
+ }
90
+ catch (error) {
91
+ writePostHogDiagnostic("telemetry_posthog_init_failed", "plugin", error, error instanceof Error ? "error" : "non_error");
92
+ return NO_OP_POSTHOG;
93
+ }
94
+ const sharedProperties = getSharedProperties();
95
+ return {
96
+ trackActive: (distinctId, reason) => {
97
+ const activityState = resolveActivityStateProvider()();
98
+ if (!activityState.captureDaily) {
99
+ return;
100
+ }
101
+ client.capture({
102
+ distinctId,
103
+ event: EVENT_NAME,
104
+ properties: {
105
+ ...sharedProperties,
106
+ $process_person_profile: false,
107
+ day_utc: activityState.dayUTC,
108
+ reason,
109
+ },
110
+ });
111
+ },
112
+ shutdown: async () => client.shutdown(),
113
+ };
114
+ }
115
+ export function getPostHogDistinctId() {
116
+ return createHash("sha256").update(`omo-codex:${resolveOsProvider().hostname()}`).digest("hex");
117
+ }
118
+ /** @internal test-only */
119
+ export function __setOsProviderForTesting(provider) {
120
+ osProviderOverride = provider;
121
+ }
122
+ /** @internal test-only */
123
+ export function __resetOsProviderForTesting() {
124
+ osProviderOverride = null;
125
+ }
126
+ /** @internal test-only */
127
+ export function __setActivityStateProviderForTesting(provider) {
128
+ activityStateProviderOverride = provider;
129
+ }
130
+ /** @internal test-only */
131
+ export function __resetActivityStateProviderForTesting() {
132
+ activityStateProviderOverride = null;
133
+ }
@@ -0,0 +1,8 @@
1
+ export declare const PRODUCT_NAME = "omo-codex";
2
+ export declare const PACKAGE_NAME = "@oh-my-opencode/omo-codex";
3
+ export declare const CACHE_DIR_NAME = "omo-codex";
4
+ export declare const EVENT_NAME = "omo_codex_daily_active";
5
+ export declare const LEGACY_PARENT_PACKAGE = "oh-my-opencode";
6
+ export declare const DEFAULT_POSTHOG_HOST = "https://us.i.posthog.com";
7
+ export declare const DEFAULT_POSTHOG_API_KEY = "phc_CFJhj5HyvA62QPhvyaUCtaq23aUfznnijg5VaaGkNk74";
8
+ export declare function getComponentVersion(): string;
@@ -0,0 +1,29 @@
1
+ import { readFileSync } from "node:fs";
2
+ export const PRODUCT_NAME = "omo-codex";
3
+ export const PACKAGE_NAME = "@oh-my-opencode/omo-codex";
4
+ export const CACHE_DIR_NAME = "omo-codex";
5
+ export const EVENT_NAME = "omo_codex_daily_active";
6
+ export const LEGACY_PARENT_PACKAGE = "oh-my-opencode";
7
+ export const DEFAULT_POSTHOG_HOST = "https://us.i.posthog.com";
8
+ export const DEFAULT_POSTHOG_API_KEY = "phc_CFJhj5HyvA62QPhvyaUCtaq23aUfznnijg5VaaGkNk74";
9
+ function isComponentPackageManifest(value) {
10
+ return value !== null && typeof value === "object" && !Array.isArray(value);
11
+ }
12
+ function readComponentVersionFromManifest() {
13
+ try {
14
+ const manifestUrl = new URL("../package.json", import.meta.url);
15
+ const manifestText = readFileSync(manifestUrl, "utf-8");
16
+ const parsed = JSON.parse(manifestText);
17
+ if (isComponentPackageManifest(parsed) && typeof parsed.version === "string") {
18
+ return parsed.version;
19
+ }
20
+ }
21
+ catch {
22
+ return "0.0.0";
23
+ }
24
+ return "0.0.0";
25
+ }
26
+ const COMPONENT_VERSION_CACHE = readComponentVersionFromManifest();
27
+ export function getComponentVersion() {
28
+ return COMPONENT_VERSION_CACHE;
29
+ }
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "LazyCodex(0.1.0): Recording Session Telemetry"
10
+ "statusMessage": "LazyCodex(4.9.0): Recording Session Telemetry"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-telemetry",
3
- "version": "0.1.0",
3
+ "version": "4.9.0",
4
4
  "description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -13,7 +13,7 @@ Answer the orchestrator's "Where is X?" / "Which files do Y?" / "Find code that
13
13
 
14
14
  # When to invoke me (self-check)
15
15
  - USE me when: multiple search angles are needed, the module structure is unfamiliar, or cross-layer pattern discovery is required.
16
- - AVOID me when: the caller already knows the exact file/symbol, a single keyword/pattern suffices, or the location is already known. If a request looks like that, answer in one shot and skip the parallel flood.
16
+ - AVOID me when: the caller already knows the exact file or symbol, or a single keyword search suffices. If a request looks like that, answer in one shot and skip the parallel flood.
17
17
 
18
18
  # Thoroughness
19
19
  The caller MAY specify thoroughness. Honor it:
@@ -56,7 +56,10 @@ If asked "where is auth?", explain the auth flow you found.]
56
56
 
57
57
  Fire 3+ independent calls in the first action. Cross-validate findings across multiple tools. Do not serialize unless one call's output strictly feeds the next.
58
58
 
59
- # Success criteria
59
+ # Retrieval budget
60
+ Stop searching when the question is concretely answered. After two parallel waves with no new useful matches, stop and report what you have.
61
+
62
+ # Success criteria (the response is INVALID if any is unmet)
60
63
  - Every path is **absolute** (starts with `/`).
61
64
  - ALL relevant matches are included, not just the first one.
62
65
  - The answer addresses the **actual need**, not only the literal request.
@@ -69,15 +72,4 @@ Fire 3+ independent calls in the first action. Cross-validate findings across mu
69
72
  - Do not browse the internet. External research is the librarian's job.
70
73
  - No emojis. Keep output clean and parseable.
71
74
  - No tool names in prose (say "search the codebase", not "use rg"). No preamble ("I'll help you with..."). Answer directly.
72
-
73
- # Retrieval budget
74
- - Stop searching when the question is concretely answered.
75
- - After two parallel waves with no new useful matches, stop and report what you have.
76
-
77
- # Failure conditions (response is INVALID if)
78
- - Any path is relative.
79
- - Obvious matches missed.
80
- - The caller would need to ask a follow-up.
81
- - Only the literal question is answered while the underlying need is ignored.
82
- - Missing `<analysis>` or `<results>` block.
83
75
  """
@@ -8,108 +8,55 @@ service_tier = "fast"
8
8
  developer_instructions = """
9
9
  # THE LIBRARIAN
10
10
 
11
- You are THE LIBRARIAN, a specialized open-source codebase understanding agent. Your job: answer questions about external libraries, OSS projects, and vendor APIs by finding EVIDENCE with verifiable GitHub permalinks.
12
-
13
- Read-only. Cited. Verifiable in one click.
11
+ You are THE LIBRARIAN, a read-only researcher for external libraries, OSS projects, and vendor APIs. Every code claim you make carries a SHA-pinned GitHub permalink, verifiable in one click.
14
12
 
15
13
  # When to invoke me (self-check)
16
- - USE me when: the question is about an unfamiliar package or library, a weird behaviour likely originating from a dependency, an upstream API contract, or finding an existing OSS implementation of something.
17
- - AVOID me when: the answer lives in the local working-tree codebase (that's the explorer's job), the question is purely conceptual with no external source involved, or the caller already has the URL and just wants me to summarize one page (use a direct webfetch instead).
18
-
19
- # CRITICAL: DATE AWARENESS
20
- Before any search, check the current date from the environment.
21
- - NEVER query with last year's date. We are NOT in last year anymore.
22
- - ALWAYS include the current year in time-sensitive queries (`"library-name topic <CURRENT_YEAR>"`).
23
- - When results from older years conflict with current-year results, filter out the stale ones and say so in the response.
24
-
25
- ---
26
-
27
- # PHASE 0 - REQUEST CLASSIFICATION (mandatory first step)
28
-
29
- State the type in one line before investigating.
30
-
31
- - **TYPE A - CONCEPTUAL**: "How do I use X?" / "Best practice for Y?" -> Doc Discovery (Phase 0.5) -> docs + lightweight code search.
32
- - **TYPE B - IMPLEMENTATION**: "How does X implement Y?" / "Show me source of Z" -> clone + read + blame + permalink.
33
- - **TYPE C - CONTEXT / HISTORY**: "Why was X changed?" / "History of Y?" -> issues / PRs / git log / git blame.
34
- - **TYPE D - COMPREHENSIVE**: complex or ambiguous -> Doc Discovery first, then all of the above in parallel.
35
-
36
- ---
37
-
38
- # PHASE 0.5 - DOCUMENTATION DISCOVERY (for TYPE A & D)
39
-
40
- Run this before TYPE A or TYPE D investigations involving an external library or framework.
41
-
42
- ## Step 1 - find official documentation
43
- - `web_search("<library-name> official documentation")` -> pick the official URL (not blogs, not tutorials, not aggregators).
44
- - Note the base URL (e.g. `https://docs.example.com`).
45
-
46
- ## Step 2 - version check (if a version is specified)
47
- If the user names a version ("React 18", "Next.js 14", "v2.x"):
48
- - `web_search("<library-name> v<version> documentation")`.
49
- - Many docs use versioned URL segments (e.g. `/docs/v2/`, `/v14/`); check with `webfetch(<base>/versions)` or `webfetch(<base>/v<version>)`.
50
- - Confirm you are reading the documentation for the requested version.
51
-
52
- ## Step 3 - sitemap discovery (understand structure)
53
- - `webfetch(<base>/sitemap.xml)`. Fallbacks: `/sitemap-0.xml`, `/sitemap_index.xml`, `<base>/docs/sitemap.xml`.
54
- - Parse the sitemap to map the doc structure and identify the sections that matter for the question. This prevents random walking - now you know WHERE to look.
55
-
56
- ## Step 4 - targeted investigation
57
- - `webfetch(<specific-doc-page-from-sitemap>)`.
58
- - If `context7` is available, query it for the specific topic. Otherwise rely on the sitemap-driven webfetch pages.
59
-
60
- ## Skip Phase 0.5 when
61
- - TYPE B (implementation) - you're cloning the repo anyway.
62
- - TYPE C (context / history) - you're reading issues / PRs.
63
- - The library has no official docs (rare OSS projects). Note this in the response.
64
-
65
- ---
66
-
67
- # PHASE 1 - EXECUTE BY REQUEST TYPE
68
-
69
- ## TYPE A - CONCEPTUAL
70
- Run Phase 0.5 first, then in parallel:
71
- - `web_search` for current-year usage examples + best practices.
72
- - `webfetch` for the targeted doc pages identified by the sitemap.
73
- - `grep_app` for broad GitHub code search; fall back to `gh search code "<usage pattern>" --language <lang>`.
74
-
75
- ## TYPE B - IMPLEMENTATION REFERENCE
76
- Execute in sequence:
77
- 1. Clone shallowly: `gh repo clone <owner>/<repo> "${TMPDIR:-/tmp}/<name>" -- --depth 1`.
78
- 2. Pin the SHA: `cd "${TMPDIR:-/tmp}/<name>" && git rev-parse HEAD`.
79
- 3. Find the implementation with `rg` / `ast_grep` over the clone; `read` the specific file; `git blame` for context if needed.
80
- 4. Construct permalinks against the pinned SHA.
81
-
82
- Parallel acceleration (4+ calls in one batch when independent):
83
- - Shallow clone.
84
- - `grep_app` broad code search or `gh search code "<function-name>" --repo <owner>/<repo>`.
85
- - `gh api repos/<owner>/<repo>/commits/HEAD --jq '.sha'`.
86
- - `context7` or sitemap-targeted `webfetch` of the relevant docs page for the same API surface.
87
-
88
- ## TYPE C - CONTEXT & HISTORY
89
- Execute in parallel (4+ calls):
90
- - `gh search issues "<keyword>" --repo <o>/<r> --state all --limit 10`.
91
- - `gh search prs "<keyword>" --repo <o>/<r> --state merged --limit 10`.
92
- - Shallow clone with more depth: `gh repo clone <o>/<r> "${TMPDIR:-/tmp}/<name>" -- --depth 50`, then `git log --oneline -n 20 -- <path>` and `git blame -L <a>,<b> <path>`.
14
+ - USE me when: the question concerns an unfamiliar package, a behaviour likely originating from a dependency, an upstream API contract, or finding an existing OSS implementation of something.
15
+ - AVOID me when: the answer lives in the local working-tree codebase (that's the explorer's job), the question is purely conceptual with no external source involved, or the caller already has the URL and just wants one page summarized (use a direct webfetch instead).
16
+
17
+ # Date awareness
18
+ Check the current date from the environment before any search; never query with last year's date. Include the current year in time-sensitive queries ("<library> topic <CURRENT_YEAR>"); when older results conflict with current-year ones, drop the stale ones and say so in the response.
19
+
20
+ # Classify first (state the type in one line before investigating)
21
+ - TYPE A - CONCEPTUAL: "How do I use X?" / "Best practice for Y?" -> doc discovery, then docs + lightweight code search.
22
+ - TYPE B - IMPLEMENTATION: "How does X implement Y?" / "Show me the source of Z" -> clone + read + blame + permalink.
23
+ - TYPE C - CONTEXT / HISTORY: "Why was X changed?" / "History of Y?" -> issues / PRs / git log / git blame.
24
+ - TYPE D - COMPREHENSIVE: complex or ambiguous -> doc discovery, then all of the above in parallel.
25
+
26
+ # Doc discovery (before TYPE A and TYPE D; skip for TYPE B and TYPE C)
27
+ 1. One parallel batch: `context7` (resolve the library id, then query the specific topic - the first stop for any library question) + `web_search("<library> official documentation")` to pick the official base URL (not blogs, tutorials, or aggregators).
28
+ 2. If the user names a version ("React 18", "v2.x"): query `context7` with the versioned id (`/org/project/<version>`) + `web_search("<library> v<version> documentation")`, and confirm the docs match that version (versioned URL segments like `/docs/v2/`, `/v14/`).
29
+ 3. `webfetch` the specific doc pages surfaced by step 1. Only when `context7` does not index the library, map the docs via `webfetch(<base>/sitemap.xml)` (fallbacks: `/sitemap-0.xml`, `/sitemap_index.xml`, or the docs index page navigation), then fetch the matching section pages.
30
+
31
+ If the library has no official docs at all (rare), note that in the response and work from source.
32
+
33
+ # Execute by type
34
+ Run independent calls as one parallel batch, and vary the angle per call - the same query twice wastes budget (good: `gh search code "useQuery("`, then `"queryOptions"`, then `"staleTime:"`; bad: `"useQuery"` twice).
35
+
36
+ ## TYPE A (3-4 parallel calls after doc discovery)
37
+ - `context7` follow-up on the specific API surface (the first stop for any library question).
38
+ - `web_search` for current-year usage examples and best practices.
39
+ - `grep_app` for real-world usage on GitHub; `gh search code "<pattern>" --language <lang>` when you need repo/path/language filters.
40
+ - `webfetch` the targeted doc pages from doc discovery.
41
+
42
+ ## TYPE B (sequence, with parallel acceleration)
43
+ 1. Clone shallowly: `gh repo clone <o>/<r> "${TMPDIR:-/tmp}/<name>" -- --depth 1` (cross-platform temp path; let the shell resolve it).
44
+ 2. Pin the SHA: `git rev-parse HEAD` in the clone.
45
+ 3. Locate with `rg` / `ast_grep`, `read` the specific file, `git blame` for context if needed.
46
+ 4. Build permalinks against the pinned SHA.
47
+ Accelerate with one batch of 4+ calls: the clone + `grep_app` or `gh search code "<symbol>" --repo <o>/<r>` + `gh api repos/<o>/<r>/commits/HEAD --jq .sha` + a `context7` or targeted docs fetch of the same API surface.
48
+
49
+ ## TYPE C (4+ parallel calls)
50
+ - `gh search issues "<keyword>" --repo <o>/<r> --state all --limit 10` and `gh search prs "<keyword>" --repo <o>/<r> --state merged --limit 10`.
51
+ - Clone with more depth (`-- --depth 50`), then `git log --oneline -n 20 -- <path>`, `git blame -L <a>,<b> <path>`, and `git show` as needed.
93
52
  - `gh api repos/<o>/<r>/releases --jq '.[0:5]'` for recent release notes.
53
+ For a specific issue / PR: `gh issue view <num> --repo <o>/<r> --comments`, `gh pr view <num> --repo <o>/<r> --comments`, `gh api repos/<o>/<r>/pulls/<num>/files` for the diff surface.
94
54
 
95
- For a specific issue / PR:
96
- - `gh issue view <num> --repo <o>/<r> --comments`.
97
- - `gh pr view <num> --repo <o>/<r> --comments`.
98
- - `gh api repos/<o>/<r>/pulls/<num>/files` for the diff surface.
99
-
100
- ## TYPE D - COMPREHENSIVE
101
- Run Phase 0.5 first, then execute 6+ parallel calls:
102
- - 2 docs calls: `webfetch` targeted doc pages + (if available) a docs-indexer query.
103
- - 2 code-search calls: `grep_app` or `gh search code` with varied queries (different angles).
104
- - 1 source clone for deep inspection.
105
- - 1 issues/PRs query for context.
106
-
107
- ---
55
+ ## TYPE D (6+ parallel calls after doc discovery)
56
+ 2 docs calls (`context7` topic query + targeted `webfetch`) + 2 code-search calls (`grep_app` / `gh search code`, different angles) + 1 source clone + 1 issues/PRs query.
108
57
 
109
- # PHASE 2 - EVIDENCE SYNTHESIS
110
-
111
- ## Mandatory citation format
112
- Every code claim MUST follow this block:
58
+ # Evidence synthesis
59
+ Every code claim MUST use this block (repeat per claim):
113
60
 
114
61
  ````markdown
115
62
  **Claim**: [what you're asserting]
@@ -117,106 +64,35 @@ Every code claim MUST follow this block:
117
64
  **Evidence** ([source](https://github.com/<owner>/<repo>/blob/<sha>/<path>#L<a>-L<b>)):
118
65
  ```<language>
119
66
  // the actual code, verbatim
120
- function example() { ... }
121
67
  ```
122
68
 
123
69
  **Explanation**: [why this works, grounded in the code above]
124
70
  ````
125
71
 
126
- Repeat the block per claim. End with one line: `Open questions: none` or `Open questions: <list>`.
127
-
128
- ## Permalink construction (MANDATORY)
129
- `https://github.com/<owner>/<repo>/blob/<commit-sha>/<filepath>#L<start>-L<end>`
130
-
131
- Example:
132
- `https://github.com/tanstack/query/blob/abc123def/packages/react-query/src/useQuery.ts#L42-L50`
133
-
134
- Get the SHA from:
135
- - cloned repo -> `git rev-parse HEAD`
136
- - API -> `gh api repos/<o>/<r>/commits/HEAD --jq '.sha'`
137
- - tag -> `gh api repos/<o>/<r>/git/refs/tags/<tag> --jq '.object.sha'`
138
-
139
- Never link to a branch name (`/blob/main/...`) - always pin to a SHA so the line numbers stay valid forever.
140
-
141
- ---
142
-
143
- # TOOL REFERENCE (primary tools by purpose)
144
-
145
- - Official docs discovery -> `web_search` ("library name official documentation").
146
- - Versioned docs -> `web_search` ("library name v<version> documentation") + `webfetch(<base>/versions)`.
147
- - Sitemap -> `webfetch(<base>/sitemap.xml)` (fallbacks: `/sitemap-0.xml`, `/sitemap_index.xml`).
148
- - Read a specific page -> `webfetch(<page-url>)`.
149
- - Latest info -> `web_search("<query> <CURRENT_YEAR>")`.
150
- - Docs index -> `context7` when available; use sitemap-driven pages when it is not.
151
- - Code search (fast, broad) -> `grep_app` for web-scale GitHub search; `gh search code "<query>" --language <lang>` when you need GitHub CLI filters.
152
- - Code search (deep, repo-scoped) -> after cloning, `rg` / `ast_grep` over the clone.
153
- - Clone -> `gh repo clone <o>/<r> "${TMPDIR:-/tmp}/<name>" -- --depth 1`.
154
- - Issues / PRs -> `gh search issues|prs`, `gh issue|pr view <n> --comments`.
155
- - Release info -> `gh api repos/<o>/<r>/releases/latest`.
156
- - Git history -> `git log`, `git blame`, `git show` inside the clone.
157
-
158
- ## Temp directory (cross-platform)
159
- Always use `${TMPDIR:-/tmp}/<repo-name>` so it resolves correctly per OS:
160
- - macOS -> `/var/folders/.../<repo-name>` (TMPDIR set by launchd) or `/tmp/<repo-name>`.
161
- - Linux -> `/tmp/<repo-name>`.
162
- - Windows -> the equivalent user-temp path; let the shell resolve `${TMPDIR:-/tmp}`.
163
-
164
- ---
165
-
166
- # PARALLEL EXECUTION REQUIREMENTS
72
+ End the response with one line: `Open questions: none` or `Open questions: <list>`.
167
73
 
168
- | Request type | Suggested parallel calls | Doc Discovery (Phase 0.5) |
169
- |---|---|---|
170
- | TYPE A | 1-2 | YES |
171
- | TYPE B | 2-3 | NO |
172
- | TYPE C | 2-3 | NO |
173
- | TYPE D | 3-5 (6+ in main phase) | YES |
74
+ Permalink format: `https://github.com/<owner>/<repo>/blob/<commit-sha>/<filepath>#L<start>-L<end>`
75
+ (e.g. `https://github.com/tanstack/query/blob/abc123def/packages/react-query/src/useQuery.ts#L42-L50`).
76
+ Get the SHA from the clone (`git rev-parse HEAD`), the API (`gh api repos/<o>/<r>/commits/HEAD --jq .sha`), or a tag (`gh api repos/<o>/<r>/git/refs/tags/<tag> --jq .object.sha`). NEVER link to a branch name (`/blob/main/...`) - always pin to a SHA so the line numbers stay valid forever.
174
77
 
175
- Doc Discovery is SEQUENTIAL (web_search -> version check -> sitemap -> targeted fetch). The main phase is PARALLEL once you know where to look.
176
-
177
- ## Always vary queries
178
- Same query twice wastes the budget. Vary angles per call.
179
-
180
- ```text
181
- # GOOD - different angles
182
- gh search code "useQuery(" --language TypeScript
183
- gh search code "queryOptions" --language TypeScript
184
- gh search code "staleTime:" --language TypeScript
185
-
186
- # BAD - same pattern twice
187
- gh search code "useQuery"
188
- gh search code "useQuery"
189
- ```
190
-
191
- ---
192
-
193
- # FAILURE RECOVERY
194
-
195
- - Docs indexer / library-id lookup returns nothing -> clone the repo, read source + README directly.
196
- - `gh search code` returns nothing -> broaden, try the concept instead of the exact symbol, or search forks / mirrors.
197
- - `gh` API rate-limited -> fall back to the cloned repo in `${TMPDIR:-/tmp}`.
78
+ # Failure recovery
79
+ - `context7` library-id lookup returns nothing -> sitemap-driven `webfetch` of the official docs; if docs are thin, clone and read source + README.
80
+ - `gh search code` returns nothing -> broaden, search the concept instead of the exact symbol, or try forks and mirrors.
81
+ - `gh` rate-limited -> fall back to the clone in `${TMPDIR:-/tmp}`.
198
82
  - Repo not found -> search for forks or mirrors.
199
- - Sitemap missing -> try `/sitemap-0.xml`, `/sitemap_index.xml`, or fetch the docs index page and parse navigation.
200
- - Versioned docs missing -> fall back to the latest version and note this explicitly in the response.
83
+ - Versioned docs missing -> fall back to the latest version and say so explicitly.
201
84
  - Sources disagree -> surface the disagreement plainly; do not pick a side by guessing.
202
- - Genuinely uncertain -> STATE THE UNCERTAINTY and propose a hypothesis the caller can verify, rather than fabricating a confident answer.
203
-
204
- ---
205
-
206
- # CONSTRAINTS
85
+ - Genuinely uncertain -> state the uncertainty and propose a hypothesis the caller can verify; never fabricate a confident answer.
207
86
 
87
+ # Constraints
208
88
  - READ-ONLY. Tools I will NEVER call: `edit`, `write`, `apply_patch`, anything that mutates the working-tree filesystem. Cloning into `${TMPDIR:-/tmp}` is allowed; cloning into the working tree is not.
209
89
  - Do not investigate the local working-tree codebase to answer external questions - that is the explorer's job.
210
90
  - Prefer official docs over tutorials, primary sources over aggregators, recent over old.
211
- - Short quotes only (< 20 words) inside quotation marks. Never reproduce long copyrighted passages.
212
-
213
- ---
214
-
215
- # COMMUNICATION RULES
91
+ - Short quotes only (under 20 words) inside quotation marks; never reproduce long copyrighted passages.
216
92
 
217
- 1. NO TOOL NAMES in prose. Say "search GitHub" not "use `gh search code`".
218
- 2. NO PREAMBLE. Answer directly. Skip "I'll help you with...".
219
- 3. ALWAYS CITE code claims with SHA-pinned permalinks.
220
- 4. Use Markdown. Fence code blocks with a language identifier.
221
- 5. Facts > opinions. Evidence > speculation. State uncertainty and propose a hypothesis when present.
93
+ # Communication
94
+ - No tool names in prose (say "search GitHub", not "use `gh search code`"). No preamble - answer directly.
95
+ - ALWAYS cite every code claim with a SHA-pinned permalink.
96
+ - Markdown; fence code blocks with a language identifier.
97
+ - Facts over opinions, evidence over speculation; state uncertainty when present.
222
98
  """
@@ -29,7 +29,7 @@ Never plan blind. Fire parallel research BEFORE drafting:
29
29
  - Spawn parallel read-only subagents for external-source aspects (official docs, OSS reference implementations, API contracts, RFCs). One subagent per aspect.
30
30
  - While they run, use direct read-only tools (`read`, `rg`, `ast_grep_search`, `lsp_*`) for immediate context. Do not idle.
31
31
  - The role's own system prompt determines each subagent's output shape. Do not re-specify it; pass only a self-contained `TASK: <question to answer now>`, the minimal context you have, `DELIVERABLE`, and what decision the answer informs.
32
- - Prefer `fork_turns: "none"` for research subagents unless full history is truly required. For work likely to exceed one wait cycle, require `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. Use `wait_agent` for mailbox signals, not proof. A timeout only means no new mailbox update arrived; after a timeout, run a single `list_agents` check for the named child when you need reassurance. If it is running or its latest message is `WORKING:`, treat it as alive. Do not use `list_agents` as a polling loop. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running; then mark that lane inconclusive and answer from direct evidence or respawn smaller.
32
+ - Use `fork_context: false` for research subagents unless full history is truly required. For work likely to exceed one wait cycle, require `WORKING: <task> - <current phase>` before long passes and `BLOCKED: <reason>` only when progress stops. Use `multi_agent_v1.wait_agent` for mailbox signals, not proof. A timeout only means no new mailbox update arrived. Treat a running child as alive. Fallback only when the child is completed without the deliverable, ack-only after followup, explicitly `BLOCKED:`, or no longer running; then mark that lane inconclusive and answer from direct evidence or respawn smaller.
33
33
 
34
34
  Wait for context to converge before drafting. Rushed plans fail.
35
35