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,83 +0,0 @@
1
- /**
2
- * adapters/gemini-cli/hooks — Gemini CLI hook definitions and matchers.
3
- *
4
- * Defines the hook types, matchers, and registration format specific to
5
- * Gemini CLI'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
- * - Hook config generation
9
- *
10
- * Gemini CLI hook system reference:
11
- * - Hooks are registered in ~/.gemini/settings.json under "hooks" key
12
- * - Each hook type maps to an array of { matcher, hooks } entries
13
- * - Hook names: BeforeAgent, BeforeTool, AfterTool, AfterModel, PreCompress, SessionStart
14
- * - AfterModel fires per model call inside the stream loop
15
- * (packages/core/src/core/geminiChat.ts:1213); payload carries
16
- * llm_request + llm_response (hooks/types.ts:692-695) whose
17
- * usageMetadata + resolved model drive per-turn token/cost capture
18
- * (refs: docs/prds/2026-06-paid-observability/adapter-matrix/gemini-cli.md).
19
- * - Input: JSON on stdin
20
- * - Output: JSON on stdout (or empty for passthrough)
21
- * - BeforeAgent fires when user submits a prompt — input.prompt carries
22
- * the user message; hookSpecificOutput.additionalContext is appended
23
- * to the prompt (hookRunner.ts:183-197). Equivalent to Claude Code's
24
- * UserPromptSubmit for session-continuity capture.
25
- */
26
- /** Gemini CLI hook types. */
27
- export declare const HOOK_TYPES: {
28
- readonly BEFORE_AGENT: "BeforeAgent";
29
- readonly BEFORE_TOOL: "BeforeTool";
30
- readonly AFTER_TOOL: "AfterTool";
31
- readonly AFTER_MODEL: "AfterModel";
32
- readonly PRE_COMPRESS: "PreCompress";
33
- readonly SESSION_START: "SessionStart";
34
- };
35
- export type HookType = (typeof HOOK_TYPES)[keyof typeof HOOK_TYPES];
36
- /**
37
- * Negative-lookahead matcher for external MCP tool namespaces on Gemini CLI (#529).
38
- *
39
- * Gemini CLI MCP wire shape: `mcp__<server>__<tool>` (verified in
40
- * hooks/core/tool-naming.mjs — context-mode's own tools surface as
41
- * `mcp__context-mode__<tool>`). This pattern fires BeforeTool for any
42
- * external `mcp__<server>__<tool>` whose server segment does NOT contain
43
- * `context-mode`. Without it, large payloads from slack / telegram / gdrive /
44
- * notion-style MCPs bypass the routing nudge and flood the model's context.
45
- *
46
- * The negative lookahead `(?!.*context-mode)` covers both the canonical
47
- * `mcp__context-mode__*` and any Claude shim `mcp__plugin_context-mode_*`
48
- * names. Gemini native bare tool names (run_shell_command, read_file, …)
49
- * are not `mcp__`-prefixed and are unaffected.
50
- */
51
- export declare const EXTERNAL_MCP_MATCHER_PATTERN = "mcp__(?!.*context-mode)";
52
- /** Map of hook types to their script file names. */
53
- export declare const HOOK_SCRIPTS: Record<HookType, string>;
54
- /** Required hooks that must be configured for context-mode to function. */
55
- export declare const REQUIRED_HOOKS: HookType[];
56
- /** Optional hooks that enhance functionality but aren't critical. */
57
- export declare const OPTIONAL_HOOKS: HookType[];
58
- /**
59
- * Check if a hook entry points to a context-mode hook script.
60
- * Matches both legacy format (node .../beforetool.mjs) and
61
- * CLI dispatcher format (context-mode hook gemini-cli beforetool).
62
- */
63
- export declare function isContextModeHook(entry: {
64
- hooks?: Array<{
65
- command?: string;
66
- }>;
67
- }, hookType: HookType): boolean;
68
- /**
69
- * Build the hook command string for a given hook type.
70
- * Uses absolute node path to avoid PATH issues (homebrew, nvm, volta, etc.).
71
- * Falls back to CLI dispatcher if pluginRoot is not provided.
72
- *
73
- * Issue #712: gemini-cli hook scripts live under `hooks/gemini-cli/<script>`
74
- * on disk (verified via the published `files` field in package.json and
75
- * HOOK_MAP in src/cli.ts which uses the same subdir for the CLI
76
- * dispatcher form). The introducing commit (f5c9d02) carried claude-code's
77
- * flat `hooks/<script>` shape over without accounting for the platform
78
- * subdir, causing `ctx doctor` to FAIL every hook on every install
79
- * (paths pointed at `<pluginRoot>/hooks/<script>` which never exist for
80
- * gemini-cli). `setHookPermissions` in index.ts already uses the correct
81
- * subdir, so this restores three-callsite parity.
82
- */
83
- export declare function buildHookCommand(hookType: HookType, pluginRoot?: string): string;
@@ -1,115 +0,0 @@
1
- import { buildHookRuntimeCommand } from "../types.js";
2
- /**
3
- * adapters/gemini-cli/hooks — Gemini CLI hook definitions and matchers.
4
- *
5
- * Defines the hook types, matchers, and registration format specific to
6
- * Gemini CLI'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
- * - Hook config generation
10
- *
11
- * Gemini CLI hook system reference:
12
- * - Hooks are registered in ~/.gemini/settings.json under "hooks" key
13
- * - Each hook type maps to an array of { matcher, hooks } entries
14
- * - Hook names: BeforeAgent, BeforeTool, AfterTool, AfterModel, PreCompress, SessionStart
15
- * - AfterModel fires per model call inside the stream loop
16
- * (packages/core/src/core/geminiChat.ts:1213); payload carries
17
- * llm_request + llm_response (hooks/types.ts:692-695) whose
18
- * usageMetadata + resolved model drive per-turn token/cost capture
19
- * (refs: docs/prds/2026-06-paid-observability/adapter-matrix/gemini-cli.md).
20
- * - Input: JSON on stdin
21
- * - Output: JSON on stdout (or empty for passthrough)
22
- * - BeforeAgent fires when user submits a prompt — input.prompt carries
23
- * the user message; hookSpecificOutput.additionalContext is appended
24
- * to the prompt (hookRunner.ts:183-197). Equivalent to Claude Code's
25
- * UserPromptSubmit for session-continuity capture.
26
- */
27
- // ─────────────────────────────────────────────────────────
28
- // Hook type constants
29
- // ─────────────────────────────────────────────────────────
30
- /** Gemini CLI hook types. */
31
- export const HOOK_TYPES = {
32
- BEFORE_AGENT: "BeforeAgent",
33
- BEFORE_TOOL: "BeforeTool",
34
- AFTER_TOOL: "AfterTool",
35
- AFTER_MODEL: "AfterModel",
36
- PRE_COMPRESS: "PreCompress",
37
- SESSION_START: "SessionStart",
38
- };
39
- // ─────────────────────────────────────────────────────────
40
- // External MCP routing matcher (#529)
41
- // ─────────────────────────────────────────────────────────
42
- /**
43
- * Negative-lookahead matcher for external MCP tool namespaces on Gemini CLI (#529).
44
- *
45
- * Gemini CLI MCP wire shape: `mcp__<server>__<tool>` (verified in
46
- * hooks/core/tool-naming.mjs — context-mode's own tools surface as
47
- * `mcp__context-mode__<tool>`). This pattern fires BeforeTool for any
48
- * external `mcp__<server>__<tool>` whose server segment does NOT contain
49
- * `context-mode`. Without it, large payloads from slack / telegram / gdrive /
50
- * notion-style MCPs bypass the routing nudge and flood the model's context.
51
- *
52
- * The negative lookahead `(?!.*context-mode)` covers both the canonical
53
- * `mcp__context-mode__*` and any Claude shim `mcp__plugin_context-mode_*`
54
- * names. Gemini native bare tool names (run_shell_command, read_file, …)
55
- * are not `mcp__`-prefixed and are unaffected.
56
- */
57
- export const EXTERNAL_MCP_MATCHER_PATTERN = "mcp__(?!.*context-mode)";
58
- // ─────────────────────────────────────────────────────────
59
- // Hook script file names
60
- // ─────────────────────────────────────────────────────────
61
- /** Map of hook types to their script file names. */
62
- export const HOOK_SCRIPTS = {
63
- [HOOK_TYPES.BEFORE_AGENT]: "beforeagent.mjs",
64
- [HOOK_TYPES.BEFORE_TOOL]: "beforetool.mjs",
65
- [HOOK_TYPES.AFTER_TOOL]: "aftertool.mjs",
66
- [HOOK_TYPES.AFTER_MODEL]: "aftermodel.mjs",
67
- [HOOK_TYPES.PRE_COMPRESS]: "precompress.mjs",
68
- [HOOK_TYPES.SESSION_START]: "sessionstart.mjs",
69
- };
70
- // ─────────────────────────────────────────────────────────
71
- // Hook validation
72
- // ─────────────────────────────────────────────────────────
73
- /** Required hooks that must be configured for context-mode to function. */
74
- export const REQUIRED_HOOKS = [
75
- HOOK_TYPES.BEFORE_TOOL,
76
- HOOK_TYPES.SESSION_START,
77
- ];
78
- /** Optional hooks that enhance functionality but aren't critical. */
79
- export const OPTIONAL_HOOKS = [
80
- HOOK_TYPES.AFTER_TOOL,
81
- HOOK_TYPES.AFTER_MODEL,
82
- HOOK_TYPES.PRE_COMPRESS,
83
- ];
84
- /**
85
- * Check if a hook entry points to a context-mode hook script.
86
- * Matches both legacy format (node .../beforetool.mjs) and
87
- * CLI dispatcher format (context-mode hook gemini-cli beforetool).
88
- */
89
- export function isContextModeHook(entry, hookType) {
90
- const scriptName = HOOK_SCRIPTS[hookType];
91
- const cliCommand = buildHookCommand(hookType);
92
- return (entry.hooks?.some((h) => h.command?.includes(scriptName) || h.command?.includes(cliCommand)) ?? false);
93
- }
94
- /**
95
- * Build the hook command string for a given hook type.
96
- * Uses absolute node path to avoid PATH issues (homebrew, nvm, volta, etc.).
97
- * Falls back to CLI dispatcher if pluginRoot is not provided.
98
- *
99
- * Issue #712: gemini-cli hook scripts live under `hooks/gemini-cli/<script>`
100
- * on disk (verified via the published `files` field in package.json and
101
- * HOOK_MAP in src/cli.ts which uses the same subdir for the CLI
102
- * dispatcher form). The introducing commit (f5c9d02) carried claude-code's
103
- * flat `hooks/<script>` shape over without accounting for the platform
104
- * subdir, causing `ctx doctor` to FAIL every hook on every install
105
- * (paths pointed at `<pluginRoot>/hooks/<script>` which never exist for
106
- * gemini-cli). `setHookPermissions` in index.ts already uses the correct
107
- * subdir, so this restores three-callsite parity.
108
- */
109
- export function buildHookCommand(hookType, pluginRoot) {
110
- const scriptName = HOOK_SCRIPTS[hookType];
111
- if (pluginRoot && scriptName) {
112
- return buildHookRuntimeCommand(`${pluginRoot}/hooks/gemini-cli/${scriptName}`);
113
- }
114
- return `context-mode hook gemini-cli ${hookType.toLowerCase()}`;
115
- }
@@ -1,80 +0,0 @@
1
- /**
2
- * adapters/gemini-cli — Gemini CLI platform adapter.
3
- *
4
- * Implements HookAdapter for Gemini CLI's JSON stdin/stdout hook paradigm.
5
- *
6
- * Gemini CLI hook specifics:
7
- * - I/O: JSON on stdin, JSON on stdout (same paradigm as Claude Code)
8
- * - Hook names: BeforeTool, AfterTool, PreCompress, SessionStart
9
- * - Arg modification: `hookSpecificOutput.tool_input` (merged with original)
10
- * - Blocking: `decision: "deny"` in response (NOT permissionDecision)
11
- * - Output modification: `decision: "deny"` + reason replaces output,
12
- * `hookSpecificOutput.additionalContext` appends
13
- * - PreCompress: advisory only (async, cannot block)
14
- * - No `decision: "ask"` support
15
- * - Hooks don't fire for subagents yet
16
- * - Config: ~/.gemini/settings.json (user), .gemini/settings.json (project)
17
- * - Session ID: session_id field
18
- * - Project dir env: GEMINI_PROJECT_DIR (also CLAUDE_PROJECT_DIR alias)
19
- * - Session dir: ~/.gemini/context-mode/sessions/
20
- */
21
- import { BaseAdapter } from "../base.js";
22
- import type { HookAdapter, HookParadigm, PlatformCapabilities, DiagnosticResult, HealthCheck, PreToolUseEvent, PostToolUseEvent, PreCompactEvent, SessionStartEvent, PreToolUseResponse, PostToolUseResponse, PreCompactResponse, SessionStartResponse, HookRegistration } from "../types.js";
23
- export declare class GeminiCLIAdapter extends BaseAdapter implements HookAdapter {
24
- constructor();
25
- readonly name = "Gemini CLI";
26
- readonly paradigm: HookParadigm;
27
- readonly capabilities: PlatformCapabilities;
28
- parsePreToolUseInput(raw: unknown): PreToolUseEvent;
29
- parsePostToolUseInput(raw: unknown): PostToolUseEvent;
30
- parsePreCompactInput(raw: unknown): PreCompactEvent;
31
- parseSessionStartInput(raw: unknown): SessionStartEvent;
32
- formatPreToolUseResponse(response: PreToolUseResponse): unknown;
33
- formatPostToolUseResponse(response: PostToolUseResponse): unknown;
34
- formatPreCompactResponse(response: PreCompactResponse): unknown;
35
- formatSessionStartResponse(response: SessionStartResponse): unknown;
36
- getSettingsPath(): string;
37
- getInstructionFiles(): string[];
38
- generateHookConfig(pluginRoot: string): HookRegistration;
39
- readSettings(): Record<string, unknown> | null;
40
- writeSettings(settings: Record<string, unknown>): void;
41
- validateHooks(pluginRoot: string): DiagnosticResult[];
42
- /**
43
- * Adapter-defined health checks (Algo-D1) — mirrors claude-code's override
44
- * at src/adapters/claude-code/index.ts:275.
45
- *
46
- * Issue #712 motivation: gemini-cli's hook scripts ship under
47
- * `<pluginRoot>/hooks/gemini-cli/<scriptName>` (see HOOK_MAP in
48
- * src/cli.ts and `setHookPermissions` in this file). The legacy doctor
49
- * path (`getHookScriptPaths` -> `extractHookScriptPath`) round-trips
50
- * through `buildHookCommand` -> command-string parsing, so a missing
51
- * platform subdir in the emit was invisible to the doctor until a user
52
- * installed globally and observed FAIL lines. This override drops the
53
- * round-trip: HOOK_SCRIPTS is the single source of truth and we probe
54
- * `existsSync(join(pluginRoot, "hooks", "gemini-cli", scriptName))`
55
- * directly, so a future regression in the command emit cannot make the
56
- * doctor lie about hook health.
57
- *
58
- * Adding a new hook event in HOOK_SCRIPTS auto-extends doctor coverage
59
- * here — no parallel hardcoded list to maintain.
60
- */
61
- getHealthChecks(pluginRoot: string): readonly HealthCheck[];
62
- checkPluginRegistration(): DiagnosticResult;
63
- getInstalledVersion(): string;
64
- configureAllHooks(pluginRoot: string): string[];
65
- setHookPermissions(pluginRoot: string): string[];
66
- updatePluginRegistry(pluginRoot: string, version: string): void;
67
- /**
68
- * Resolve the project directory for a Gemini CLI hook input.
69
- * Priority: input.cwd > GEMINI_PROJECT_DIR > CLAUDE_PROJECT_DIR > process.cwd().
70
- * Mirrors the cursor / opencode pattern so downstream hooks always
71
- * receive a defined projectDir even when the platform omits cwd
72
- * from the wire payload (e.g. under worktrees).
73
- */
74
- private getProjectDir;
75
- /**
76
- * Extract session ID from Gemini CLI hook input.
77
- * Priority: session_id field > env fallback > ppid fallback.
78
- */
79
- private extractSessionId;
80
- }