context-mode 1.0.169 → 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 (379) 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/cli.d.ts +0 -34
  163. package/build/cli.js +0 -1827
  164. package/build/db-base.d.ts +0 -179
  165. package/build/db-base.js +0 -569
  166. package/build/executor.d.ts +0 -72
  167. package/build/executor.js +0 -678
  168. package/build/exit-classify.d.ts +0 -19
  169. package/build/exit-classify.js +0 -12
  170. package/build/fetch-cache.d.ts +0 -13
  171. package/build/fetch-cache.js +0 -15
  172. package/build/lifecycle.d.ts +0 -124
  173. package/build/lifecycle.js +0 -278
  174. package/build/runPool.d.ts +0 -36
  175. package/build/runPool.js +0 -51
  176. package/build/runtime.d.ts +0 -71
  177. package/build/runtime.js +0 -659
  178. package/build/search/auto-memory.d.ts +0 -47
  179. package/build/search/auto-memory.js +0 -170
  180. package/build/search/ctx-search-schema.d.ts +0 -90
  181. package/build/search/ctx-search-schema.js +0 -135
  182. package/build/search/flood-guard.d.ts +0 -57
  183. package/build/search/flood-guard.js +0 -80
  184. package/build/search/unified.d.ts +0 -56
  185. package/build/search/unified.js +0 -104
  186. package/build/security.d.ts +0 -206
  187. package/build/security.js +0 -780
  188. package/build/server.d.ts +0 -184
  189. package/build/server.js +0 -4563
  190. package/build/session/analytics.d.ts +0 -773
  191. package/build/session/analytics.js +0 -2420
  192. package/build/session/db.d.ts +0 -468
  193. package/build/session/db.js +0 -1308
  194. package/build/session/error-classifier.d.ts +0 -87
  195. package/build/session/error-classifier.js +0 -303
  196. package/build/session/event-emit.d.ts +0 -48
  197. package/build/session/event-emit.js +0 -101
  198. package/build/session/extract.d.ts +0 -333
  199. package/build/session/extract.js +0 -2688
  200. package/build/session/model-prices.json +0 -429
  201. package/build/session/persist-tool-calls.d.ts +0 -54
  202. package/build/session/persist-tool-calls.js +0 -105
  203. package/build/session/pricing.d.ts +0 -64
  204. package/build/session/pricing.js +0 -151
  205. package/build/session/project-attribution.d.ts +0 -73
  206. package/build/session/project-attribution.js +0 -245
  207. package/build/session/purge.d.ts +0 -138
  208. package/build/session/purge.js +0 -240
  209. package/build/session/retrieval-marker.d.ts +0 -39
  210. package/build/session/retrieval-marker.js +0 -65
  211. package/build/session/snapshot.d.ts +0 -46
  212. package/build/session/snapshot.js +0 -532
  213. package/build/store-directory.d.ts +0 -56
  214. package/build/store-directory.js +0 -254
  215. package/build/store.d.ts +0 -147
  216. package/build/store.js +0 -1714
  217. package/build/truncate.d.ts +0 -57
  218. package/build/truncate.js +0 -142
  219. package/build/types.d.ts +0 -117
  220. package/build/types.js +0 -20
  221. package/build/util/claude-config.d.ts +0 -32
  222. package/build/util/claude-config.js +0 -84
  223. package/build/util/hook-config.d.ts +0 -27
  224. package/build/util/hook-config.js +0 -76
  225. package/build/util/jsonc.d.ts +0 -14
  226. package/build/util/jsonc.js +0 -104
  227. package/build/util/plugin-cache-integrity.d.ts +0 -51
  228. package/build/util/plugin-cache-integrity.js +0 -146
  229. package/build/util/project-dir.d.ts +0 -149
  230. package/build/util/project-dir.js +0 -340
  231. package/build/util/sibling-mcp.d.ts +0 -79
  232. package/build/util/sibling-mcp.js +0 -181
  233. package/cli.bundle.mjs +0 -1236
  234. package/configs/antigravity/GEMINI.md +0 -68
  235. package/configs/antigravity/mcp_config.json +0 -7
  236. package/configs/antigravity-cli/hooks/hooks.json +0 -37
  237. package/configs/antigravity-cli/hooks.json +0 -37
  238. package/configs/antigravity-cli/mcp_config.json +0 -10
  239. package/configs/antigravity-cli/plugin.json +0 -14
  240. package/configs/antigravity-cli/rules/context-mode.md +0 -77
  241. package/configs/antigravity-cli/skills/context-mode/SKILL.md +0 -77
  242. package/configs/claude-code/CLAUDE.md +0 -91
  243. package/configs/codex/AGENTS.md +0 -99
  244. package/configs/codex/config.toml +0 -8
  245. package/configs/codex/hooks.json +0 -47
  246. package/configs/copilot-cli/.github/plugin/plugin.json +0 -23
  247. package/configs/copilot-cli/.mcp.json +0 -12
  248. package/configs/copilot-cli/README.md +0 -47
  249. package/configs/copilot-cli/hooks.json +0 -41
  250. package/configs/copilot-cli/skills/context-mode/SKILL.md +0 -38
  251. package/configs/cursor/context-mode.mdc +0 -76
  252. package/configs/cursor/hooks.json +0 -21
  253. package/configs/cursor/mcp.json +0 -7
  254. package/configs/gemini-cli/GEMINI.md +0 -88
  255. package/configs/gemini-cli/mcp.json +0 -7
  256. package/configs/gemini-cli/settings.json +0 -60
  257. package/configs/jetbrains-copilot/copilot-instructions.md +0 -80
  258. package/configs/jetbrains-copilot/hooks.json +0 -16
  259. package/configs/jetbrains-copilot/mcp.json +0 -7
  260. package/configs/kilo/AGENTS.md +0 -84
  261. package/configs/kilo/kilo.json +0 -6
  262. package/configs/kimi/hooks.json +0 -54
  263. package/configs/kiro/KIRO.md +0 -84
  264. package/configs/kiro/agent.json +0 -18
  265. package/configs/kiro/mcp.json +0 -7
  266. package/configs/omp/SYSTEM.md +0 -85
  267. package/configs/omp/mcp.json +0 -7
  268. package/configs/openclaw/AGENTS.md +0 -87
  269. package/configs/openclaw/openclaw.json +0 -13
  270. package/configs/opencode/AGENTS.md +0 -84
  271. package/configs/opencode/opencode.json +0 -6
  272. package/configs/pi/AGENTS.md +0 -3
  273. package/configs/qwen-code/QWEN.md +0 -91
  274. package/configs/vscode-copilot/copilot-instructions.md +0 -80
  275. package/configs/vscode-copilot/hooks.json +0 -16
  276. package/configs/vscode-copilot/mcp.json +0 -7
  277. package/configs/zed/AGENTS.md +0 -68
  278. package/hooks/antigravity-cli/payload.mjs +0 -98
  279. package/hooks/antigravity-cli/posttooluse.mjs +0 -138
  280. package/hooks/antigravity-cli/pretooluse.mjs +0 -78
  281. package/hooks/antigravity-cli/stop.mjs +0 -58
  282. package/hooks/auto-injection.mjs +0 -102
  283. package/hooks/cache-heal-utils.mjs +0 -379
  284. package/hooks/codex/platform.mjs +0 -1
  285. package/hooks/codex/posttooluse.mjs +0 -66
  286. package/hooks/codex/precompact.mjs +0 -70
  287. package/hooks/codex/pretooluse.mjs +0 -42
  288. package/hooks/codex/sessionstart.mjs +0 -121
  289. package/hooks/codex/stop.mjs +0 -138
  290. package/hooks/codex/userpromptsubmit.mjs +0 -75
  291. package/hooks/copilot-cli/posttooluse.mjs +0 -79
  292. package/hooks/copilot-cli/precompact.mjs +0 -66
  293. package/hooks/copilot-cli/pretooluse.mjs +0 -41
  294. package/hooks/copilot-cli/sessionstart.mjs +0 -121
  295. package/hooks/copilot-cli/stop.mjs +0 -59
  296. package/hooks/copilot-cli/userpromptsubmit.mjs +0 -77
  297. package/hooks/core/codex-caps.mjs +0 -112
  298. package/hooks/core/formatters.mjs +0 -356
  299. package/hooks/core/mcp-ready.mjs +0 -109
  300. package/hooks/core/platform-detect.mjs +0 -49
  301. package/hooks/core/routing.mjs +0 -1017
  302. package/hooks/core/stdin.mjs +0 -90
  303. package/hooks/core/tool-naming.mjs +0 -57
  304. package/hooks/cursor/afteragentresponse.mjs +0 -74
  305. package/hooks/cursor/hooks.json +0 -31
  306. package/hooks/cursor/posttooluse.mjs +0 -72
  307. package/hooks/cursor/pretooluse.mjs +0 -26
  308. package/hooks/cursor/sessionstart.mjs +0 -97
  309. package/hooks/cursor/stop.mjs +0 -48
  310. package/hooks/ensure-deps.mjs +0 -254
  311. package/hooks/formatters/claude-code.mjs +0 -113
  312. package/hooks/formatters/cursor.mjs +0 -37
  313. package/hooks/formatters/gemini-cli.mjs +0 -55
  314. package/hooks/formatters/vscode-copilot.mjs +0 -55
  315. package/hooks/gemini-cli/aftermodel.mjs +0 -70
  316. package/hooks/gemini-cli/aftertool.mjs +0 -61
  317. package/hooks/gemini-cli/beforeagent.mjs +0 -99
  318. package/hooks/gemini-cli/beforetool.mjs +0 -27
  319. package/hooks/gemini-cli/precompress.mjs +0 -55
  320. package/hooks/gemini-cli/sessionstart.mjs +0 -137
  321. package/hooks/heal-partial-install.mjs +0 -712
  322. package/hooks/jetbrains-copilot/posttooluse.mjs +0 -61
  323. package/hooks/jetbrains-copilot/precompact.mjs +0 -55
  324. package/hooks/jetbrains-copilot/pretooluse.mjs +0 -27
  325. package/hooks/jetbrains-copilot/sessionstart.mjs +0 -124
  326. package/hooks/kimi/platform.mjs +0 -1
  327. package/hooks/kimi/posttooluse.mjs +0 -72
  328. package/hooks/kimi/precompact.mjs +0 -80
  329. package/hooks/kimi/pretooluse.mjs +0 -42
  330. package/hooks/kimi/sessionend.mjs +0 -61
  331. package/hooks/kimi/sessionstart.mjs +0 -113
  332. package/hooks/kimi/stop.mjs +0 -132
  333. package/hooks/kimi/userpromptsubmit.mjs +0 -90
  334. package/hooks/kiro/agentspawn.mjs +0 -97
  335. package/hooks/kiro/posttooluse.mjs +0 -51
  336. package/hooks/kiro/pretooluse.mjs +0 -64
  337. package/hooks/kiro/userpromptsubmit.mjs +0 -88
  338. package/hooks/normalize-hooks.mjs +0 -323
  339. package/hooks/platform-bridge.mjs +0 -340
  340. package/hooks/posttooluse.mjs +0 -225
  341. package/hooks/precompact.mjs +0 -100
  342. package/hooks/pretooluse.mjs +0 -227
  343. package/hooks/qwen-code/platform.mjs +0 -1
  344. package/hooks/qwen-code/stop.mjs +0 -168
  345. package/hooks/routing-block.mjs +0 -105
  346. package/hooks/run-hook.mjs +0 -95
  347. package/hooks/security.bundle.mjs +0 -2
  348. package/hooks/session-attribution.bundle.mjs +0 -1
  349. package/hooks/session-db.bundle.mjs +0 -144
  350. package/hooks/session-directive.mjs +0 -520
  351. package/hooks/session-extract.bundle.mjs +0 -3
  352. package/hooks/session-helpers.mjs +0 -428
  353. package/hooks/session-loaders.mjs +0 -448
  354. package/hooks/session-snapshot.bundle.mjs +0 -32
  355. package/hooks/sessionstart.mjs +0 -464
  356. package/hooks/stop.mjs +0 -82
  357. package/hooks/suppress-stderr.mjs +0 -25
  358. package/hooks/userpromptsubmit.mjs +0 -108
  359. package/hooks/vscode-copilot/posttooluse.mjs +0 -61
  360. package/hooks/vscode-copilot/precompact.mjs +0 -55
  361. package/hooks/vscode-copilot/pretooluse.mjs +0 -27
  362. package/hooks/vscode-copilot/sessionstart.mjs +0 -129
  363. package/openclaw.plugin.json +0 -38
  364. package/scripts/heal-better-sqlite3.mjs +0 -430
  365. package/scripts/heal-installed-plugins.mjs +0 -598
  366. package/scripts/plugin-cache-integrity.mjs +0 -248
  367. package/scripts/postinstall.mjs +0 -384
  368. package/server.bundle.mjs +0 -1162
  369. package/skills/.ignore +0 -7
  370. package/skills/context-mode/SKILL.md +0 -300
  371. package/skills/context-mode/references/anti-patterns.md +0 -283
  372. package/skills/context-mode/references/patterns-javascript.md +0 -298
  373. package/skills/context-mode/references/patterns-python.md +0 -304
  374. package/skills/context-mode/references/patterns-shell.md +0 -277
  375. package/skills/ctx-index/SKILL.md +0 -46
  376. package/skills/ctx-insight/SKILL.md +0 -24
  377. package/skills/ctx-purge/SKILL.md +0 -49
  378. package/skills/ctx-search/SKILL.md +0 -35
  379. 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
- }