context-mode 1.0.168 → 2.0.0-next.5

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 (395) hide show
  1. package/.claude-plugin/marketplace.json +4 -22
  2. package/.claude-plugin/plugin.json +9 -24
  3. package/SHA256SUMS +31 -0
  4. package/claude-code/skills/ctx-doctor/SKILL.md +6 -0
  5. package/claude-code/skills/ctx-stats/SKILL.md +6 -0
  6. package/claude-code/skills/ctx-upgrade/SKILL.md +6 -0
  7. package/cli.mjs +6744 -0
  8. package/copilot/plugin.json +14 -0
  9. package/fixtures/hook-roundtrip.json +22 -0
  10. package/gemini-extension.json +14 -0
  11. package/hook.mjs +202 -0
  12. package/hooks/claude-code.json +50 -0
  13. package/hooks/codex.json +50 -0
  14. package/hooks/copilot-cli.json +33 -0
  15. package/hooks/hooks.json +16 -111
  16. package/hooks/kiro.json +69 -0
  17. package/hooks/qwen.json +50 -0
  18. package/hooks/vscode.json +40 -0
  19. package/hooks/zcode.json +53 -0
  20. package/opencode/plugin.js +22456 -0
  21. package/package.json +29 -114
  22. package/pi/index.js +50841 -0
  23. package/pi/skills/ctx-doctor/SKILL.md +6 -0
  24. package/pi/skills/ctx-stats/SKILL.md +6 -0
  25. package/pi/skills/ctx-upgrade/SKILL.md +6 -0
  26. package/qwen-extension.json +15 -0
  27. package/run.mjs +5633 -0
  28. package/search.mjs +5633 -0
  29. package/server.mjs +48198 -0
  30. package/skills/ctx-doctor/SKILL.md +3 -19
  31. package/skills/ctx-stats/SKILL.md +3 -23
  32. package/skills/ctx-upgrade/SKILL.md +3 -28
  33. package/.codex-plugin/hooks.json +0 -65
  34. package/.codex-plugin/mcp.json +0 -13
  35. package/.codex-plugin/plugin.json +0 -31
  36. package/.openclaw-plugin/index.ts +0 -12
  37. package/.openclaw-plugin/openclaw.plugin.json +0 -38
  38. package/.openclaw-plugin/package.json +0 -28
  39. package/LICENSE +0 -94
  40. package/README.md +0 -1619
  41. package/bin/statusline.mjs +0 -378
  42. package/build/adapters/antigravity/index.d.ts +0 -51
  43. package/build/adapters/antigravity/index.js +0 -169
  44. package/build/adapters/antigravity-cli/index.d.ts +0 -51
  45. package/build/adapters/antigravity-cli/index.js +0 -342
  46. package/build/adapters/base.d.ts +0 -92
  47. package/build/adapters/base.js +0 -135
  48. package/build/adapters/claude-code/config.d.ts +0 -8
  49. package/build/adapters/claude-code/config.js +0 -8
  50. package/build/adapters/claude-code/hooks.d.ts +0 -106
  51. package/build/adapters/claude-code/hooks.js +0 -183
  52. package/build/adapters/claude-code/index.d.ts +0 -80
  53. package/build/adapters/claude-code/index.js +0 -569
  54. package/build/adapters/claude-code-base.d.ts +0 -49
  55. package/build/adapters/claude-code-base.js +0 -113
  56. package/build/adapters/client-map.d.ts +0 -10
  57. package/build/adapters/client-map.js +0 -42
  58. package/build/adapters/codex/config.d.ts +0 -8
  59. package/build/adapters/codex/config.js +0 -8
  60. package/build/adapters/codex/hooks.d.ts +0 -55
  61. package/build/adapters/codex/hooks.js +0 -64
  62. package/build/adapters/codex/index.d.ts +0 -87
  63. package/build/adapters/codex/index.js +0 -992
  64. package/build/adapters/codex/paths.d.ts +0 -1
  65. package/build/adapters/codex/paths.js +0 -12
  66. package/build/adapters/codex/usage.d.ts +0 -107
  67. package/build/adapters/codex/usage.js +0 -227
  68. package/build/adapters/copilot-base.d.ts +0 -94
  69. package/build/adapters/copilot-base.js +0 -297
  70. package/build/adapters/copilot-cli/hooks.d.ts +0 -33
  71. package/build/adapters/copilot-cli/hooks.js +0 -64
  72. package/build/adapters/copilot-cli/index.d.ts +0 -48
  73. package/build/adapters/copilot-cli/index.js +0 -341
  74. package/build/adapters/cursor/config.d.ts +0 -4
  75. package/build/adapters/cursor/config.js +0 -4
  76. package/build/adapters/cursor/hooks.d.ts +0 -55
  77. package/build/adapters/cursor/hooks.js +0 -82
  78. package/build/adapters/cursor/index.d.ts +0 -64
  79. package/build/adapters/cursor/index.js +0 -517
  80. package/build/adapters/detect.d.ts +0 -136
  81. package/build/adapters/detect.js +0 -623
  82. package/build/adapters/gemini-cli/config.d.ts +0 -8
  83. package/build/adapters/gemini-cli/config.js +0 -8
  84. package/build/adapters/gemini-cli/hooks.d.ts +0 -83
  85. package/build/adapters/gemini-cli/hooks.js +0 -115
  86. package/build/adapters/gemini-cli/index.d.ts +0 -80
  87. package/build/adapters/gemini-cli/index.js +0 -483
  88. package/build/adapters/jetbrains-copilot/config.d.ts +0 -8
  89. package/build/adapters/jetbrains-copilot/config.js +0 -8
  90. package/build/adapters/jetbrains-copilot/hooks.d.ts +0 -59
  91. package/build/adapters/jetbrains-copilot/hooks.js +0 -87
  92. package/build/adapters/jetbrains-copilot/index.d.ts +0 -31
  93. package/build/adapters/jetbrains-copilot/index.js +0 -131
  94. package/build/adapters/kimi/config.d.ts +0 -8
  95. package/build/adapters/kimi/config.js +0 -8
  96. package/build/adapters/kimi/hooks.d.ts +0 -28
  97. package/build/adapters/kimi/hooks.js +0 -34
  98. package/build/adapters/kimi/index.d.ts +0 -66
  99. package/build/adapters/kimi/index.js +0 -537
  100. package/build/adapters/kimi/paths.d.ts +0 -21
  101. package/build/adapters/kimi/paths.js +0 -52
  102. package/build/adapters/kimi/usage.d.ts +0 -82
  103. package/build/adapters/kimi/usage.js +0 -217
  104. package/build/adapters/kiro/hooks.d.ts +0 -61
  105. package/build/adapters/kiro/hooks.js +0 -94
  106. package/build/adapters/kiro/index.d.ts +0 -61
  107. package/build/adapters/kiro/index.js +0 -301
  108. package/build/adapters/omp/index.d.ts +0 -65
  109. package/build/adapters/omp/index.js +0 -182
  110. package/build/adapters/omp/plugin.d.ts +0 -81
  111. package/build/adapters/omp/plugin.js +0 -331
  112. package/build/adapters/omp/usage.d.ts +0 -49
  113. package/build/adapters/omp/usage.js +0 -110
  114. package/build/adapters/openclaw/config.d.ts +0 -8
  115. package/build/adapters/openclaw/config.js +0 -8
  116. package/build/adapters/openclaw/hooks.d.ts +0 -50
  117. package/build/adapters/openclaw/hooks.js +0 -61
  118. package/build/adapters/openclaw/index.d.ts +0 -74
  119. package/build/adapters/openclaw/index.js +0 -439
  120. package/build/adapters/openclaw/mcp-tools.d.ts +0 -54
  121. package/build/adapters/openclaw/mcp-tools.js +0 -207
  122. package/build/adapters/openclaw/plugin.d.ts +0 -141
  123. package/build/adapters/openclaw/plugin.js +0 -818
  124. package/build/adapters/openclaw/session-db.d.ts +0 -55
  125. package/build/adapters/openclaw/session-db.js +0 -88
  126. package/build/adapters/openclaw/usage.d.ts +0 -34
  127. package/build/adapters/openclaw/usage.js +0 -52
  128. package/build/adapters/openclaw/workspace-router.d.ts +0 -29
  129. package/build/adapters/openclaw/workspace-router.js +0 -64
  130. package/build/adapters/opencode/config.d.ts +0 -8
  131. package/build/adapters/opencode/config.js +0 -8
  132. package/build/adapters/opencode/hooks.d.ts +0 -38
  133. package/build/adapters/opencode/hooks.js +0 -50
  134. package/build/adapters/opencode/index.d.ts +0 -67
  135. package/build/adapters/opencode/index.js +0 -463
  136. package/build/adapters/opencode/plugin.d.ts +0 -184
  137. package/build/adapters/opencode/plugin.js +0 -558
  138. package/build/adapters/opencode/zod3tov4.d.ts +0 -1
  139. package/build/adapters/opencode/zod3tov4.js +0 -132
  140. package/build/adapters/pi/extension.d.ts +0 -81
  141. package/build/adapters/pi/extension.js +0 -861
  142. package/build/adapters/pi/index.d.ts +0 -57
  143. package/build/adapters/pi/index.js +0 -173
  144. package/build/adapters/pi/mcp-bridge.d.ts +0 -268
  145. package/build/adapters/pi/mcp-bridge.js +0 -894
  146. package/build/adapters/qwen-code/hooks.d.ts +0 -26
  147. package/build/adapters/qwen-code/hooks.js +0 -29
  148. package/build/adapters/qwen-code/index.d.ts +0 -40
  149. package/build/adapters/qwen-code/index.js +0 -361
  150. package/build/adapters/qwen-code/usage.d.ts +0 -90
  151. package/build/adapters/qwen-code/usage.js +0 -222
  152. package/build/adapters/types.d.ts +0 -360
  153. package/build/adapters/types.js +0 -118
  154. package/build/adapters/vscode-copilot/config.d.ts +0 -8
  155. package/build/adapters/vscode-copilot/config.js +0 -8
  156. package/build/adapters/vscode-copilot/hooks.d.ts +0 -71
  157. package/build/adapters/vscode-copilot/hooks.js +0 -98
  158. package/build/adapters/vscode-copilot/index.d.ts +0 -32
  159. package/build/adapters/vscode-copilot/index.js +0 -222
  160. package/build/adapters/zed/index.d.ts +0 -40
  161. package/build/adapters/zed/index.js +0 -163
  162. package/build/cache-heal.d.ts +0 -48
  163. package/build/cache-heal.js +0 -150
  164. package/build/cli.d.ts +0 -34
  165. package/build/cli.js +0 -1827
  166. package/build/concurrency/runPool.d.ts +0 -36
  167. package/build/concurrency/runPool.js +0 -51
  168. package/build/db-base.d.ts +0 -179
  169. package/build/db-base.js +0 -569
  170. package/build/executor.d.ts +0 -72
  171. package/build/executor.js +0 -678
  172. package/build/exit-classify.d.ts +0 -19
  173. package/build/exit-classify.js +0 -12
  174. package/build/fetch-cache.d.ts +0 -13
  175. package/build/fetch-cache.js +0 -15
  176. package/build/lifecycle.d.ts +0 -124
  177. package/build/lifecycle.js +0 -278
  178. package/build/openclaw/mcp-tools.d.ts +0 -54
  179. package/build/openclaw/mcp-tools.js +0 -198
  180. package/build/openclaw/workspace-router.d.ts +0 -29
  181. package/build/openclaw/workspace-router.js +0 -64
  182. package/build/openclaw-plugin.d.ts +0 -130
  183. package/build/openclaw-plugin.js +0 -626
  184. package/build/opencode-plugin.d.ts +0 -122
  185. package/build/opencode-plugin.js +0 -375
  186. package/build/pi-extension.d.ts +0 -14
  187. package/build/pi-extension.js +0 -451
  188. package/build/routing-block.d.ts +0 -8
  189. package/build/routing-block.js +0 -86
  190. package/build/runPool.d.ts +0 -36
  191. package/build/runPool.js +0 -51
  192. package/build/runtime.d.ts +0 -71
  193. package/build/runtime.js +0 -659
  194. package/build/search/auto-memory.d.ts +0 -47
  195. package/build/search/auto-memory.js +0 -170
  196. package/build/search/ctx-search-schema.d.ts +0 -90
  197. package/build/search/ctx-search-schema.js +0 -135
  198. package/build/search/flood-guard.d.ts +0 -57
  199. package/build/search/flood-guard.js +0 -80
  200. package/build/search/unified.d.ts +0 -56
  201. package/build/search/unified.js +0 -104
  202. package/build/security.d.ts +0 -206
  203. package/build/security.js +0 -780
  204. package/build/server.d.ts +0 -184
  205. package/build/server.js +0 -4542
  206. package/build/session/analytics.d.ts +0 -745
  207. package/build/session/analytics.js +0 -2369
  208. package/build/session/db.d.ts +0 -468
  209. package/build/session/db.js +0 -1308
  210. package/build/session/error-classifier.d.ts +0 -87
  211. package/build/session/error-classifier.js +0 -303
  212. package/build/session/event-emit.d.ts +0 -48
  213. package/build/session/event-emit.js +0 -101
  214. package/build/session/extract.d.ts +0 -333
  215. package/build/session/extract.js +0 -2688
  216. package/build/session/model-prices.json +0 -429
  217. package/build/session/persist-tool-calls.d.ts +0 -54
  218. package/build/session/persist-tool-calls.js +0 -105
  219. package/build/session/pricing.d.ts +0 -64
  220. package/build/session/pricing.js +0 -151
  221. package/build/session/project-attribution.d.ts +0 -73
  222. package/build/session/project-attribution.js +0 -245
  223. package/build/session/purge.d.ts +0 -138
  224. package/build/session/purge.js +0 -240
  225. package/build/session/snapshot.d.ts +0 -46
  226. package/build/session/snapshot.js +0 -532
  227. package/build/store-directory.d.ts +0 -56
  228. package/build/store-directory.js +0 -254
  229. package/build/store.d.ts +0 -147
  230. package/build/store.js +0 -1714
  231. package/build/tool-naming.d.ts +0 -4
  232. package/build/tool-naming.js +0 -24
  233. package/build/truncate.d.ts +0 -57
  234. package/build/truncate.js +0 -142
  235. package/build/types.d.ts +0 -117
  236. package/build/types.js +0 -20
  237. package/build/util/claude-config.d.ts +0 -32
  238. package/build/util/claude-config.js +0 -84
  239. package/build/util/hook-config.d.ts +0 -27
  240. package/build/util/hook-config.js +0 -76
  241. package/build/util/jsonc.d.ts +0 -14
  242. package/build/util/jsonc.js +0 -104
  243. package/build/util/plugin-cache-integrity.d.ts +0 -51
  244. package/build/util/plugin-cache-integrity.js +0 -146
  245. package/build/util/project-dir.d.ts +0 -149
  246. package/build/util/project-dir.js +0 -340
  247. package/build/util/sibling-mcp.d.ts +0 -79
  248. package/build/util/sibling-mcp.js +0 -181
  249. package/cli.bundle.mjs +0 -1235
  250. package/configs/antigravity/GEMINI.md +0 -68
  251. package/configs/antigravity/mcp_config.json +0 -7
  252. package/configs/antigravity-cli/hooks/hooks.json +0 -37
  253. package/configs/antigravity-cli/hooks.json +0 -37
  254. package/configs/antigravity-cli/mcp_config.json +0 -10
  255. package/configs/antigravity-cli/plugin.json +0 -14
  256. package/configs/antigravity-cli/rules/context-mode.md +0 -77
  257. package/configs/antigravity-cli/skills/context-mode/SKILL.md +0 -77
  258. package/configs/claude-code/CLAUDE.md +0 -91
  259. package/configs/codex/AGENTS.md +0 -99
  260. package/configs/codex/config.toml +0 -8
  261. package/configs/codex/hooks.json +0 -47
  262. package/configs/copilot-cli/.github/plugin/plugin.json +0 -23
  263. package/configs/copilot-cli/.mcp.json +0 -12
  264. package/configs/copilot-cli/README.md +0 -47
  265. package/configs/copilot-cli/hooks.json +0 -41
  266. package/configs/copilot-cli/skills/context-mode/SKILL.md +0 -38
  267. package/configs/cursor/context-mode.mdc +0 -76
  268. package/configs/cursor/hooks.json +0 -21
  269. package/configs/cursor/mcp.json +0 -7
  270. package/configs/gemini-cli/GEMINI.md +0 -88
  271. package/configs/gemini-cli/mcp.json +0 -7
  272. package/configs/gemini-cli/settings.json +0 -60
  273. package/configs/jetbrains-copilot/copilot-instructions.md +0 -80
  274. package/configs/jetbrains-copilot/hooks.json +0 -16
  275. package/configs/jetbrains-copilot/mcp.json +0 -7
  276. package/configs/kilo/AGENTS.md +0 -84
  277. package/configs/kilo/kilo.json +0 -6
  278. package/configs/kimi/hooks.json +0 -54
  279. package/configs/kiro/KIRO.md +0 -84
  280. package/configs/kiro/agent.json +0 -18
  281. package/configs/kiro/mcp.json +0 -7
  282. package/configs/omp/SYSTEM.md +0 -85
  283. package/configs/omp/mcp.json +0 -7
  284. package/configs/openclaw/AGENTS.md +0 -87
  285. package/configs/openclaw/openclaw.json +0 -13
  286. package/configs/opencode/AGENTS.md +0 -84
  287. package/configs/opencode/opencode.json +0 -6
  288. package/configs/pi/AGENTS.md +0 -3
  289. package/configs/qwen-code/QWEN.md +0 -91
  290. package/configs/vscode-copilot/copilot-instructions.md +0 -80
  291. package/configs/vscode-copilot/hooks.json +0 -16
  292. package/configs/vscode-copilot/mcp.json +0 -7
  293. package/configs/zed/AGENTS.md +0 -68
  294. package/hooks/antigravity-cli/payload.mjs +0 -98
  295. package/hooks/antigravity-cli/posttooluse.mjs +0 -138
  296. package/hooks/antigravity-cli/pretooluse.mjs +0 -78
  297. package/hooks/antigravity-cli/stop.mjs +0 -58
  298. package/hooks/auto-injection.mjs +0 -102
  299. package/hooks/cache-heal-utils.mjs +0 -379
  300. package/hooks/codex/platform.mjs +0 -1
  301. package/hooks/codex/posttooluse.mjs +0 -66
  302. package/hooks/codex/precompact.mjs +0 -70
  303. package/hooks/codex/pretooluse.mjs +0 -42
  304. package/hooks/codex/sessionstart.mjs +0 -121
  305. package/hooks/codex/stop.mjs +0 -138
  306. package/hooks/codex/userpromptsubmit.mjs +0 -75
  307. package/hooks/copilot-cli/posttooluse.mjs +0 -79
  308. package/hooks/copilot-cli/precompact.mjs +0 -66
  309. package/hooks/copilot-cli/pretooluse.mjs +0 -41
  310. package/hooks/copilot-cli/sessionstart.mjs +0 -121
  311. package/hooks/copilot-cli/stop.mjs +0 -59
  312. package/hooks/copilot-cli/userpromptsubmit.mjs +0 -77
  313. package/hooks/core/codex-caps.mjs +0 -112
  314. package/hooks/core/formatters.mjs +0 -356
  315. package/hooks/core/mcp-ready.mjs +0 -109
  316. package/hooks/core/platform-detect.mjs +0 -49
  317. package/hooks/core/routing.mjs +0 -1017
  318. package/hooks/core/stdin.mjs +0 -90
  319. package/hooks/core/tool-naming.mjs +0 -57
  320. package/hooks/cursor/afteragentresponse.mjs +0 -74
  321. package/hooks/cursor/hooks.json +0 -31
  322. package/hooks/cursor/posttooluse.mjs +0 -72
  323. package/hooks/cursor/pretooluse.mjs +0 -26
  324. package/hooks/cursor/sessionstart.mjs +0 -97
  325. package/hooks/cursor/stop.mjs +0 -48
  326. package/hooks/ensure-deps.mjs +0 -254
  327. package/hooks/formatters/claude-code.mjs +0 -113
  328. package/hooks/formatters/cursor.mjs +0 -37
  329. package/hooks/formatters/gemini-cli.mjs +0 -55
  330. package/hooks/formatters/vscode-copilot.mjs +0 -55
  331. package/hooks/gemini-cli/aftermodel.mjs +0 -70
  332. package/hooks/gemini-cli/aftertool.mjs +0 -61
  333. package/hooks/gemini-cli/beforeagent.mjs +0 -99
  334. package/hooks/gemini-cli/beforetool.mjs +0 -27
  335. package/hooks/gemini-cli/precompress.mjs +0 -55
  336. package/hooks/gemini-cli/sessionstart.mjs +0 -137
  337. package/hooks/heal-partial-install.mjs +0 -712
  338. package/hooks/jetbrains-copilot/posttooluse.mjs +0 -61
  339. package/hooks/jetbrains-copilot/precompact.mjs +0 -55
  340. package/hooks/jetbrains-copilot/pretooluse.mjs +0 -27
  341. package/hooks/jetbrains-copilot/sessionstart.mjs +0 -124
  342. package/hooks/kimi/platform.mjs +0 -1
  343. package/hooks/kimi/posttooluse.mjs +0 -72
  344. package/hooks/kimi/precompact.mjs +0 -80
  345. package/hooks/kimi/pretooluse.mjs +0 -42
  346. package/hooks/kimi/sessionend.mjs +0 -61
  347. package/hooks/kimi/sessionstart.mjs +0 -113
  348. package/hooks/kimi/stop.mjs +0 -132
  349. package/hooks/kimi/userpromptsubmit.mjs +0 -90
  350. package/hooks/kiro/agentspawn.mjs +0 -97
  351. package/hooks/kiro/posttooluse.mjs +0 -51
  352. package/hooks/kiro/pretooluse.mjs +0 -64
  353. package/hooks/kiro/userpromptsubmit.mjs +0 -88
  354. package/hooks/normalize-hooks.mjs +0 -323
  355. package/hooks/platform-bridge.mjs +0 -340
  356. package/hooks/posttooluse.mjs +0 -187
  357. package/hooks/precompact.mjs +0 -100
  358. package/hooks/pretooluse.mjs +0 -227
  359. package/hooks/qwen-code/platform.mjs +0 -1
  360. package/hooks/qwen-code/stop.mjs +0 -168
  361. package/hooks/routing-block.mjs +0 -105
  362. package/hooks/run-hook.mjs +0 -95
  363. package/hooks/security.bundle.mjs +0 -2
  364. package/hooks/session-attribution.bundle.mjs +0 -1
  365. package/hooks/session-db.bundle.mjs +0 -144
  366. package/hooks/session-directive.mjs +0 -520
  367. package/hooks/session-extract.bundle.mjs +0 -3
  368. package/hooks/session-helpers.mjs +0 -428
  369. package/hooks/session-loaders.mjs +0 -448
  370. package/hooks/session-snapshot.bundle.mjs +0 -32
  371. package/hooks/sessionstart.mjs +0 -464
  372. package/hooks/stop.mjs +0 -82
  373. package/hooks/suppress-stderr.mjs +0 -25
  374. package/hooks/userpromptsubmit.mjs +0 -108
  375. package/hooks/vscode-copilot/posttooluse.mjs +0 -61
  376. package/hooks/vscode-copilot/precompact.mjs +0 -55
  377. package/hooks/vscode-copilot/pretooluse.mjs +0 -27
  378. package/hooks/vscode-copilot/sessionstart.mjs +0 -129
  379. package/openclaw.plugin.json +0 -38
  380. package/scripts/heal-better-sqlite3.mjs +0 -430
  381. package/scripts/heal-installed-plugins.mjs +0 -598
  382. package/scripts/plugin-cache-integrity.mjs +0 -248
  383. package/scripts/postinstall.mjs +0 -384
  384. package/server.bundle.mjs +0 -1161
  385. package/skills/.ignore +0 -7
  386. package/skills/context-mode/SKILL.md +0 -300
  387. package/skills/context-mode/references/anti-patterns.md +0 -283
  388. package/skills/context-mode/references/patterns-javascript.md +0 -298
  389. package/skills/context-mode/references/patterns-python.md +0 -304
  390. package/skills/context-mode/references/patterns-shell.md +0 -277
  391. package/skills/ctx-index/SKILL.md +0 -46
  392. package/skills/ctx-insight/SKILL.md +0 -24
  393. package/skills/ctx-purge/SKILL.md +0 -49
  394. package/skills/ctx-search/SKILL.md +0 -35
  395. package/start.mjs +0 -616
@@ -1,106 +0,0 @@
1
- /**
2
- * adapters/claude-code/hooks — Claude Code hook definitions and matchers.
3
- *
4
- * Defines the hook types, matchers, and registration format specific to
5
- * Claude Code's hook system. This module is used by:
6
- * - CLI setup/upgrade commands (to configure hooks in settings.json)
7
- * - Doctor command (to validate hook configuration)
8
- * - hooks.json generation
9
- *
10
- * Claude Code hook system reference:
11
- * - Hooks are registered in ~/.claude/settings.json under "hooks" key
12
- * - Each hook type maps to an array of { matcher, hooks } entries
13
- * - matcher: tool name pattern (empty = match all tools)
14
- * - hooks: array of { type: "command", command: "..." }
15
- * - Input: JSON on stdin
16
- * - Output: JSON on stdout (or empty for passthrough)
17
- */
18
- /** Claude Code hook types. */
19
- export declare const HOOK_TYPES: {
20
- readonly PRE_TOOL_USE: "PreToolUse";
21
- readonly POST_TOOL_USE: "PostToolUse";
22
- readonly PRE_COMPACT: "PreCompact";
23
- readonly SESSION_START: "SessionStart";
24
- readonly USER_PROMPT_SUBMIT: "UserPromptSubmit";
25
- readonly STOP: "Stop";
26
- };
27
- export type HookType = (typeof HOOK_TYPES)[keyof typeof HOOK_TYPES];
28
- /**
29
- * External MCP catch-all matcher for Claude Code (#529, #547 hotfix).
30
- *
31
- * Claude Code's hook matcher engine treats this entry as a substring match
32
- * (it also accepts regex, but `mcp__` alone is enough — every MCP tool
33
- * surfaces as `mcp__<server>__<tool>`). v1.0.124 used a negative lookahead
34
- * `mcp__(?!plugin_context-mode_)` to skip context-mode's own MCP tools,
35
- * but this same hooks.json is bundled to Codex CLI which uses Rust's
36
- * `regex` crate (no look-around support) — Codex rejected the matcher at
37
- * boot, breaking every Codex user (#547). Drop the lookaround on both
38
- * sides; the hook BODY (`isExternalMcpTool()` in hooks/core/routing.mjs)
39
- * already filters context-mode's own tools, so semantics are preserved.
40
- */
41
- export declare const EXTERNAL_MCP_MATCHER_PATTERN = "mcp__";
42
- /** Tools that context-mode's PreToolUse hook intercepts. */
43
- export declare const PRE_TOOL_USE_MATCHERS: readonly ["Bash", "WebFetch", "Read", "Grep", "Agent", "mcp__plugin_context-mode_context-mode__ctx_execute", "mcp__plugin_context-mode_context-mode__ctx_execute_file", "mcp__plugin_context-mode_context-mode__ctx_batch_execute", "mcp__"];
44
- /**
45
- * Combined matcher pattern for settings.json (pipe-separated).
46
- * Used by the upgrade command when writing a single consolidated entry.
47
- */
48
- export declare const PRE_TOOL_USE_MATCHER_PATTERN: string;
49
- /**
50
- * Tools that context-mode's PostToolUse hook should fire on.
51
- * Only tools that extractEvents() actually handles — all others
52
- * produce zero events and cause false "hook error" display.
53
- */
54
- export declare const POST_TOOL_USE_MATCHERS: readonly ["Bash", "Read", "Write", "Edit", "NotebookEdit", "Glob", "Grep", "TodoWrite", "TaskCreate", "TaskUpdate", "EnterPlanMode", "ExitPlanMode", "Skill", "Agent", "AskUserQuestion", "EnterWorktree", "mcp__"];
55
- /**
56
- * Combined matcher pattern for PostToolUse in hooks.json / settings.json.
57
- */
58
- export declare const POST_TOOL_USE_MATCHER_PATTERN: string;
59
- /** Map of hook types to their script file names. */
60
- export declare const HOOK_SCRIPTS: Record<HookType, string>;
61
- /** Required hooks that must be configured for context-mode to function. */
62
- export declare const REQUIRED_HOOKS: HookType[];
63
- /** Optional hooks that enhance functionality but aren't critical. */
64
- export declare const OPTIONAL_HOOKS: HookType[];
65
- /**
66
- * Check if a hook entry points to a context-mode hook script.
67
- * Matches both legacy format (node .../pretooluse.mjs) and
68
- * CLI dispatcher format (context-mode hook claude-code pretooluse).
69
- */
70
- export declare function isContextModeHook(entry: {
71
- hooks?: Array<{
72
- command?: string;
73
- }>;
74
- }, hookType: HookType): boolean;
75
- /**
76
- * Build the hook command string for a given hook type.
77
- * Uses process.execPath + forward slashes to avoid PATH issues and MSYS
78
- * path mangling on Windows (#369, #372).
79
- * Falls back to CLI dispatcher if pluginRoot is not provided.
80
- */
81
- export declare function buildHookCommand(hookType: HookType, pluginRoot?: string): string;
82
- /**
83
- * Extract the hook script file path from a command string.
84
- *
85
- * Algo-D2 twin — same shape as `src/util/hook-config.ts::extractHookScriptPath`.
86
- * Delegates to `parseNodeCommand` for canonical buildNodeCommand-shape;
87
- * keeps narrow legacy fallbacks for pre-D3 settings.json entries
88
- * (`node "X.mjs"` and `node X.mjs` with no internal whitespace).
89
- *
90
- * Pre-D2 this matched `node\s+"?([^"]+\.mjs)"?` — the unquoted fallback
91
- * silently grabbed the tail after the last whitespace, producing the
92
- * #548 doubled-path FAIL on Windows paths with spaces. The new shape
93
- * refuses ambiguous input; doctor (Algo-D1) falls through to direct
94
- * `existsSync` instead of trusting the regex.
95
- */
96
- export declare function extractHookScriptPath(command: string): string | null;
97
- /**
98
- * Check if a hook entry is a context-mode hook (any hook type).
99
- * Broader than `isContextModeHook` — matches any context-mode script name
100
- * without requiring a specific hookType.
101
- */
102
- export declare function isAnyContextModeHook(entry: {
103
- hooks?: Array<{
104
- command?: string;
105
- }>;
106
- }): boolean;
@@ -1,183 +0,0 @@
1
- import { buildHookRuntimeCommand, parseNodeCommand } from "../types.js";
2
- /**
3
- * adapters/claude-code/hooks — Claude Code hook definitions and matchers.
4
- *
5
- * Defines the hook types, matchers, and registration format specific to
6
- * Claude Code's hook system. This module is used by:
7
- * - CLI setup/upgrade commands (to configure hooks in settings.json)
8
- * - Doctor command (to validate hook configuration)
9
- * - hooks.json generation
10
- *
11
- * Claude Code hook system reference:
12
- * - Hooks are registered in ~/.claude/settings.json under "hooks" key
13
- * - Each hook type maps to an array of { matcher, hooks } entries
14
- * - matcher: tool name pattern (empty = match all tools)
15
- * - hooks: array of { type: "command", command: "..." }
16
- * - Input: JSON on stdin
17
- * - Output: JSON on stdout (or empty for passthrough)
18
- */
19
- // ─────────────────────────────────────────────────────────
20
- // Hook type constants
21
- // ─────────────────────────────────────────────────────────
22
- /** Claude Code hook types. */
23
- export const HOOK_TYPES = {
24
- PRE_TOOL_USE: "PreToolUse",
25
- POST_TOOL_USE: "PostToolUse",
26
- PRE_COMPACT: "PreCompact",
27
- SESSION_START: "SessionStart",
28
- USER_PROMPT_SUBMIT: "UserPromptSubmit",
29
- STOP: "Stop",
30
- };
31
- // ─────────────────────────────────────────────────────────
32
- // PreToolUse matchers
33
- // ─────────────────────────────────────────────────────────
34
- /**
35
- * External MCP catch-all matcher for Claude Code (#529, #547 hotfix).
36
- *
37
- * Claude Code's hook matcher engine treats this entry as a substring match
38
- * (it also accepts regex, but `mcp__` alone is enough — every MCP tool
39
- * surfaces as `mcp__<server>__<tool>`). v1.0.124 used a negative lookahead
40
- * `mcp__(?!plugin_context-mode_)` to skip context-mode's own MCP tools,
41
- * but this same hooks.json is bundled to Codex CLI which uses Rust's
42
- * `regex` crate (no look-around support) — Codex rejected the matcher at
43
- * boot, breaking every Codex user (#547). Drop the lookaround on both
44
- * sides; the hook BODY (`isExternalMcpTool()` in hooks/core/routing.mjs)
45
- * already filters context-mode's own tools, so semantics are preserved.
46
- */
47
- export const EXTERNAL_MCP_MATCHER_PATTERN = "mcp__";
48
- /** Tools that context-mode's PreToolUse hook intercepts. */
49
- export const PRE_TOOL_USE_MATCHERS = [
50
- "Bash",
51
- "WebFetch",
52
- "Read",
53
- "Grep",
54
- "Agent",
55
- "mcp__plugin_context-mode_context-mode__ctx_execute",
56
- "mcp__plugin_context-mode_context-mode__ctx_execute_file",
57
- "mcp__plugin_context-mode_context-mode__ctx_batch_execute",
58
- EXTERNAL_MCP_MATCHER_PATTERN,
59
- ];
60
- /**
61
- * Combined matcher pattern for settings.json (pipe-separated).
62
- * Used by the upgrade command when writing a single consolidated entry.
63
- */
64
- export const PRE_TOOL_USE_MATCHER_PATTERN = PRE_TOOL_USE_MATCHERS.join("|");
65
- // ─────────────────────────────────────────────────────────
66
- // PostToolUse matchers (#229)
67
- // ─────────────────────────────────────────────────────────
68
- /**
69
- * Tools that context-mode's PostToolUse hook should fire on.
70
- * Only tools that extractEvents() actually handles — all others
71
- * produce zero events and cause false "hook error" display.
72
- */
73
- export const POST_TOOL_USE_MATCHERS = [
74
- "Bash",
75
- "Read",
76
- "Write",
77
- "Edit",
78
- "NotebookEdit",
79
- "Glob",
80
- "Grep",
81
- "TodoWrite",
82
- "TaskCreate",
83
- "TaskUpdate",
84
- "EnterPlanMode",
85
- "ExitPlanMode",
86
- "Skill",
87
- "Agent",
88
- "AskUserQuestion",
89
- "EnterWorktree",
90
- "mcp__",
91
- ];
92
- /**
93
- * Combined matcher pattern for PostToolUse in hooks.json / settings.json.
94
- */
95
- export const POST_TOOL_USE_MATCHER_PATTERN = POST_TOOL_USE_MATCHERS.join("|");
96
- // ─────────────────────────────────────────────────────────
97
- // Hook script file names
98
- // ─────────────────────────────────────────────────────────
99
- /** Map of hook types to their script file names. */
100
- export const HOOK_SCRIPTS = {
101
- PreToolUse: "pretooluse.mjs",
102
- PostToolUse: "posttooluse.mjs",
103
- PreCompact: "precompact.mjs",
104
- SessionStart: "sessionstart.mjs",
105
- UserPromptSubmit: "userpromptsubmit.mjs",
106
- Stop: "stop.mjs",
107
- };
108
- // ─────────────────────────────────────────────────────────
109
- // Hook validation
110
- // ─────────────────────────────────────────────────────────
111
- /** Required hooks that must be configured for context-mode to function. */
112
- export const REQUIRED_HOOKS = [
113
- HOOK_TYPES.PRE_TOOL_USE,
114
- HOOK_TYPES.SESSION_START,
115
- ];
116
- /** Optional hooks that enhance functionality but aren't critical. */
117
- export const OPTIONAL_HOOKS = [
118
- HOOK_TYPES.POST_TOOL_USE,
119
- HOOK_TYPES.PRE_COMPACT,
120
- HOOK_TYPES.USER_PROMPT_SUBMIT,
121
- HOOK_TYPES.STOP,
122
- ];
123
- /**
124
- * Check if a hook entry points to a context-mode hook script.
125
- * Matches both legacy format (node .../pretooluse.mjs) and
126
- * CLI dispatcher format (context-mode hook claude-code pretooluse).
127
- */
128
- export function isContextModeHook(entry, hookType) {
129
- const scriptName = HOOK_SCRIPTS[hookType];
130
- const cliCommand = buildHookCommand(hookType);
131
- return (entry.hooks?.some((h) => h.command?.includes(scriptName) || h.command?.includes(cliCommand)) ?? false);
132
- }
133
- /**
134
- * Build the hook command string for a given hook type.
135
- * Uses process.execPath + forward slashes to avoid PATH issues and MSYS
136
- * path mangling on Windows (#369, #372).
137
- * Falls back to CLI dispatcher if pluginRoot is not provided.
138
- */
139
- export function buildHookCommand(hookType, pluginRoot) {
140
- if (pluginRoot) {
141
- const scriptName = HOOK_SCRIPTS[hookType];
142
- return buildHookRuntimeCommand(`${pluginRoot}/hooks/${scriptName}`);
143
- }
144
- return `context-mode hook claude-code ${hookType.toLowerCase()}`;
145
- }
146
- /**
147
- * Extract the hook script file path from a command string.
148
- *
149
- * Algo-D2 twin — same shape as `src/util/hook-config.ts::extractHookScriptPath`.
150
- * Delegates to `parseNodeCommand` for canonical buildNodeCommand-shape;
151
- * keeps narrow legacy fallbacks for pre-D3 settings.json entries
152
- * (`node "X.mjs"` and `node X.mjs` with no internal whitespace).
153
- *
154
- * Pre-D2 this matched `node\s+"?([^"]+\.mjs)"?` — the unquoted fallback
155
- * silently grabbed the tail after the last whitespace, producing the
156
- * #548 doubled-path FAIL on Windows paths with spaces. The new shape
157
- * refuses ambiguous input; doctor (Algo-D1) falls through to direct
158
- * `existsSync` instead of trusting the regex.
159
- */
160
- export function extractHookScriptPath(command) {
161
- const parsed = parseNodeCommand(command);
162
- if (parsed) {
163
- return parsed.scriptPath.endsWith(".mjs") ? parsed.scriptPath : null;
164
- }
165
- const legacyQuoted = command.match(/^\s*node\s+"([^"]+\.mjs)"\s*$/);
166
- if (legacyQuoted)
167
- return legacyQuoted[1];
168
- const legacyBare = command.match(/^\s*node\s+(\S+\.mjs)\s*$/);
169
- if (legacyBare)
170
- return legacyBare[1];
171
- return null;
172
- }
173
- /**
174
- * Check if a hook entry is a context-mode hook (any hook type).
175
- * Broader than `isContextModeHook` — matches any context-mode script name
176
- * without requiring a specific hookType.
177
- */
178
- export function isAnyContextModeHook(entry) {
179
- const scriptNames = Object.values(HOOK_SCRIPTS);
180
- return (entry.hooks?.some((h) => h.command != null &&
181
- (scriptNames.some((s) => h.command.includes(s)) ||
182
- h.command.includes("context-mode hook"))) ?? false);
183
- }
@@ -1,80 +0,0 @@
1
- /**
2
- * adapters/claude-code — Claude Code platform adapter.
3
- *
4
- * Extends ClaudeCodeBaseAdapter (shared wire-protocol parse/format methods)
5
- * with Claude Code-specific configuration, diagnostics, and upgrade logic.
6
- *
7
- * Claude Code hook specifics:
8
- * - Session ID: transcript_path UUID > session_id > CLAUDE_SESSION_ID > ppid
9
- * - Config root: $CLAUDE_CONFIG_DIR (when set) or ~/.claude
10
- * - Settings: <configDir>/settings.json
11
- * - Session dir: <configDir>/context-mode/sessions/
12
- * - Plugin registry: <configDir>/plugins/installed_plugins.json
13
- */
14
- import { ClaudeCodeBaseAdapter, type ClaudeCodeWireInput } from "../claude-code-base.js";
15
- import { type HookAdapter, type HookParadigm, type PlatformCapabilities, type DiagnosticResult, type HookRegistration, type HealthCheck } from "../types.js";
16
- export declare class ClaudeCodeAdapter extends ClaudeCodeBaseAdapter implements HookAdapter {
17
- constructor();
18
- readonly name = "Claude Code";
19
- readonly paradigm: HookParadigm;
20
- protected readonly projectDirEnvVar = "CLAUDE_PROJECT_DIR";
21
- readonly capabilities: PlatformCapabilities;
22
- /**
23
- * Honor `CLAUDE_CONFIG_DIR` (the canonical Claude Code config root) before
24
- * falling back to `~/.claude`. Mirrors the contract that
25
- * `hooks/session-helpers.mjs::resolveConfigDir` already follows — including
26
- * tilde expansion for shells that pass `~/foo` through unchanged — so server
27
- * and hooks agree on where session-scoped state lives. See issue #453.
28
- *
29
- * Tilde regex `/^~[/\\]?/` only handles the current-user form (`~`, `~/`,
30
- * `~\`); `~user/` is NOT expanded to a per-user homedir (matches
31
- * `resolveConfigDir`). Non-tilde values are run through `resolve()` to
32
- * normalize relative paths to absolute against cwd; the hook helper
33
- * intentionally leaves them raw, but the adapter contract guarantees an
34
- * absolute path (BaseAdapter.getConfigDir docstring).
35
- *
36
- * Issue #460 round-3: routed through the canonical
37
- * `resolveClaudeConfigDir` util so server, CLI, security, and adapter
38
- * agree byte-for-byte (incl. empty/whitespace-only env fallback).
39
- */
40
- getConfigDir(_projectDir?: string): string;
41
- getSessionDir(): string;
42
- getSettingsPath(): string;
43
- generateHookConfig(pluginRoot: string): HookRegistration;
44
- readSettings(): Record<string, unknown> | null;
45
- writeSettings(settings: Record<string, unknown>): void;
46
- validateHooks(pluginRoot: string): DiagnosticResult[];
47
- /**
48
- * Adapter-defined health checks (Algo-D1 + Algo-D5).
49
- *
50
- * For each entry in HOOK_SCRIPTS (the canonical hookType → scriptName
51
- * map), emit a HealthCheck that joins `pluginRoot + "hooks" +
52
- * scriptName` and probes via `existsSync`. Crucially, this NEVER
53
- * parses a hook command — pluginRoot and scriptName are both in our
54
- * hand, so the regex round-trip that produced the #548 doubled-path
55
- * FAIL is bypassed entirely.
56
- *
57
- * The hook check derives from HOOK_SCRIPTS (single source of truth in
58
- * src/adapters/claude-code/hooks.ts), so adding a new hook event in
59
- * that map auto-extends doctor coverage — no parallel hardcoded list
60
- * to maintain.
61
- *
62
- * Algo-D5: appends a single "Plugin cache integrity" check that
63
- * delegates to the same helper start.mjs uses at boot
64
- * (scripts/plugin-cache-integrity.mjs::assertPluginCacheIntegrity).
65
- * Same code, two callsites — boot fail-fast and doctor diagnostic
66
- * agree byte-for-byte. Users hitting #550 get the actionable signal
67
- * without restarting the MCP server.
68
- */
69
- getHealthChecks(pluginRoot: string): readonly HealthCheck[];
70
- /** Read plugin hooks from hooks/hooks.json or .claude-plugin/hooks/hooks.json */
71
- private readPluginHooks;
72
- /** Check if a hook type is configured in either settings.json or plugin hooks */
73
- private checkHookType;
74
- checkPluginRegistration(): DiagnosticResult;
75
- getInstalledVersion(): string;
76
- configureAllHooks(pluginRoot: string): string[];
77
- setHookPermissions(pluginRoot: string): string[];
78
- updatePluginRegistry(pluginRoot: string, version: string): void;
79
- protected extractSessionId(input: ClaudeCodeWireInput): string;
80
- }