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,341 +0,0 @@
1
- /**
2
- * adapters/copilot-cli — GitHub Copilot CLI adapter.
3
- *
4
- * Native config:
5
- * - MCP: $COPILOT_HOME/mcp-config.json or ~/.copilot/mcp-config.json
6
- * under root key `mcpServers`.
7
- * - Hooks: $COPILOT_HOME/hooks/context-mode.json or
8
- * ~/.copilot/hooks/context-mode.json.
9
- *
10
- * Hooks use Copilot CLI's native camelCase event keys (preToolUse /
11
- * postToolUse / sessionStart / userPromptSubmitted / agentStop / preCompact)
12
- * with flat `{ type, command }` entries. (The CLI also accepts PascalCase
13
- * event names alongside camelCase — copilot-cli changelog.md:1065 — so the
14
- * casing is not load-bearing; we use camelCase because it is the CLI's native
15
- * naming.) Copilot CLI's command output contract is top-level
16
- * (`permissionDecision`, `modifiedArgs`, `additionalContext`), so this adapter
17
- * overrides the response formatter from CopilotBaseAdapter.
18
- */
19
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
20
- import { homedir } from "node:os";
21
- import { dirname, join, resolve } from "node:path";
22
- import { CopilotBaseAdapter } from "../copilot-base.js";
23
- import { resolveContextModeDataRoot } from "../base.js";
24
- import { parseJsonc } from "../../util/jsonc.js";
25
- import { HOOK_TYPES as COPILOT_HOOK_NAMES, HOOK_SCRIPTS as COPILOT_HOOK_SCRIPTS, buildHookCommand as buildCopilotHookCommand, } from "./hooks.js";
26
- const COPILOT_PLUGIN_ENV = "CONTEXT_MODE_COPILOT_PLUGIN";
27
- function isCopilotPluginRuntime() {
28
- return process.env[COPILOT_PLUGIN_ENV] === "1";
29
- }
30
- function copilotPluginHooksPath(pluginRoot) {
31
- return resolve(pluginRoot, "configs", "copilot-cli", "hooks.json");
32
- }
33
- function readHookConfig(path) {
34
- return parseJsonc(readFileSync(path, "utf-8")) ?? {};
35
- }
36
- function hasHook(hooks, hookName) {
37
- return Array.isArray(hooks?.[hookName]) && (hooks?.[hookName]).length > 0;
38
- }
39
- export function copilotCliHome() {
40
- const raw = process.env.COPILOT_HOME;
41
- if (raw && raw.trim() !== "") {
42
- if (raw.startsWith("~")) {
43
- return join(homedir(), raw.replace(/^~[/\\]?/, ""));
44
- }
45
- return resolve(raw);
46
- }
47
- return join(homedir(), ".copilot");
48
- }
49
- export function copilotCliMcpConfigPath() {
50
- return join(copilotCliHome(), "mcp-config.json");
51
- }
52
- export class CopilotCliAdapter extends CopilotBaseAdapter {
53
- constructor() {
54
- super([".copilot"]);
55
- }
56
- name = "GitHub Copilot CLI";
57
- hookModule = {
58
- HOOK_TYPES: COPILOT_HOOK_NAMES,
59
- HOOK_SCRIPTS: COPILOT_HOOK_SCRIPTS,
60
- buildHookCommand: buildCopilotHookCommand,
61
- };
62
- hookSubdir = "copilot-cli";
63
- extractSessionId(input) {
64
- const raw = input;
65
- if (raw.transcript_path) {
66
- const match = raw.transcript_path.match(/([a-f0-9-]{36})\.jsonl$/);
67
- if (match)
68
- return match[1];
69
- }
70
- if (raw.conversation_id)
71
- return raw.conversation_id;
72
- // `session_id` (snake_case) is the field Copilot CLI documents in its hook
73
- // payloads (copilot-cli changelog.md:811). Prefer it; `sessionId` (camelCase)
74
- // is kept only as a defensive fallback for non-standard payload shapes and is
75
- // not a documented Copilot CLI field.
76
- if (raw.session_id)
77
- return raw.session_id;
78
- if (input.sessionId)
79
- return input.sessionId;
80
- return `pid-${process.ppid}`;
81
- }
82
- getProjectDir() {
83
- return process.cwd();
84
- }
85
- parsePreToolUseInput(raw) {
86
- const input = raw;
87
- return {
88
- toolName: input.tool_name ?? input.toolName ?? "",
89
- toolInput: input.tool_input ?? input.toolArgs ?? {},
90
- sessionId: this.extractSessionId(input),
91
- projectDir: typeof input.cwd === "string" && input.cwd ? input.cwd : process.cwd(),
92
- raw,
93
- };
94
- }
95
- parsePostToolUseInput(raw) {
96
- const input = raw;
97
- const output = input.tool_result?.text_result_for_llm ??
98
- input.toolResult?.textResultForLlm ??
99
- (typeof input.tool_response === "string" ? input.tool_response : undefined) ??
100
- input.tool_output;
101
- return {
102
- toolName: input.tool_name ?? input.toolName ?? "",
103
- toolInput: input.tool_input ?? input.toolArgs ?? {},
104
- toolOutput: output,
105
- isError: input.is_error,
106
- sessionId: this.extractSessionId(input),
107
- projectDir: typeof input.cwd === "string" && input.cwd ? input.cwd : process.cwd(),
108
- raw,
109
- };
110
- }
111
- getSettingsPath(_projectDir) {
112
- return join(copilotCliHome(), "hooks", "context-mode.json");
113
- }
114
- getConfigDir(_projectDir) {
115
- return copilotCliHome();
116
- }
117
- getSessionDir() {
118
- // Parity with codex/kimi: honor CONTEXT_MODE_DATA_DIR first, else root
119
- // session storage at getConfigDir() (= copilotCliHome(), COPILOT_HOME-aware)
120
- // so the TS server reads sessions from the SAME place the hook runtime
121
- // (COPILOT_OPTS configDirEnv: "COPILOT_HOME") writes them. Without this, a
122
- // relocated COPILOT_HOME splits hook writes ($COPILOT_HOME/...) from server
123
- // reads (~/.copilot/...) and sessions appear empty/orphaned.
124
- const override = resolveContextModeDataRoot();
125
- const dir = override
126
- ? join(override, "context-mode", "sessions")
127
- : join(this.getConfigDir(), "context-mode", "sessions");
128
- mkdirSync(dir, { recursive: true });
129
- return dir;
130
- }
131
- getInstructionFiles() {
132
- return [".github/copilot-instructions.md", "AGENTS.md"];
133
- }
134
- // ── Hook-config writing (Copilot CLI shape) ────────────
135
- //
136
- // GitHub Copilot CLI's hooks schema differs from the VS Code / JetBrains
137
- // Copilot extensions that share CopilotBaseAdapter:
138
- // - hook entries are FLAT `{ type: "command", command }` — NOT the
139
- // Claude-Code nested `{ matcher, hooks: [...] }` shape the base emits, and
140
- // - we emit a top-level `"version": 1`. This is OPTIONAL, not mandatory:
141
- // the Copilot CLI accepts hook config files that omit the version field
142
- // (copilot-cli changelog.md:1109). We still write version:1 to pin the
143
- // schema explicitly — it is harmless and self-documenting, NOT a
144
- // hooks-never-fire requirement.
145
- // The shared base also hardcodes `mkdir .github/hooks` and writes there, but
146
- // this adapter's settings live at ~/.copilot/hooks/context-mode.json, so
147
- // writeSettings is overridden to create the real parent directory. All three
148
- // overrides are scoped to copilot-cli so vscode/jetbrains-copilot keep the
149
- // shared base behavior unchanged.
150
- generateHookConfig(pluginRoot) {
151
- const { HOOK_TYPES, buildHookCommand } = this.hookModule;
152
- const flat = (hookType) => [
153
- { type: "command", command: buildHookCommand(hookType, pluginRoot) },
154
- ];
155
- // Emit an entry for every declared hook type (preToolUse, postToolUse,
156
- // preCompact, sessionStart, userPromptSubmitted, agentStop).
157
- const config = {};
158
- for (const hookType of Object.values(HOOK_TYPES)) {
159
- config[hookType] = flat(hookType);
160
- }
161
- return config;
162
- }
163
- writeSettings(settings) {
164
- const configPath = this.getSettingsPath();
165
- mkdirSync(dirname(configPath), { recursive: true });
166
- writeFileSync(configPath, JSON.stringify(settings, null, 2) + "\n", "utf-8");
167
- }
168
- configureAllHooks(pluginRoot) {
169
- const changes = [];
170
- const settings = this.readSettings() ?? {};
171
- const hooks = settings.hooks ?? {};
172
- const { HOOK_TYPES, HOOK_SCRIPTS, buildHookCommand } = this.hookModule;
173
- // Configure every hook type the module declares (preToolUse, postToolUse,
174
- // preCompact, sessionStart, userPromptSubmitted, agentStop) — driven by
175
- // HOOK_TYPES so new events are picked up automatically.
176
- for (const hookType of Object.values(HOOK_TYPES)) {
177
- if (!HOOK_SCRIPTS[hookType])
178
- continue;
179
- const desired = [
180
- { type: "command", command: buildHookCommand(hookType, pluginRoot) },
181
- ];
182
- // Only treat a hook as drift when it differs from desired, so repeated
183
- // `context-mode upgrade` runs stay idempotent.
184
- if (JSON.stringify(hooks[hookType]) !== JSON.stringify(desired)) {
185
- hooks[hookType] = desired;
186
- changes.push(`Configured ${hookType} hook`);
187
- }
188
- }
189
- // We pin version:1 explicitly (optional per copilot-cli changelog.md:1109,
190
- // but self-documenting); treat a missing/mismatched value as drift to repair.
191
- if (settings.version !== 1) {
192
- changes.push("Set hooks schema version to 1");
193
- }
194
- if (changes.length > 0) {
195
- settings.version = 1;
196
- settings.hooks = hooks;
197
- this.writeSettings(settings);
198
- changes.push(`Wrote hook config to ${this.getSettingsPath()}`);
199
- }
200
- return changes;
201
- }
202
- readSettings() {
203
- try {
204
- const raw = readFileSync(this.getSettingsPath(), "utf-8");
205
- return parseJsonc(raw) ?? null;
206
- }
207
- catch {
208
- return null;
209
- }
210
- }
211
- formatPreToolUseResponse(response) {
212
- if (response.decision === "deny") {
213
- return {
214
- permissionDecision: "deny",
215
- permissionDecisionReason: response.reason ?? "Blocked by context-mode hook",
216
- };
217
- }
218
- if (response.decision === "ask") {
219
- return {
220
- permissionDecision: "ask",
221
- permissionDecisionReason: response.reason ?? "Action requires user confirmation",
222
- };
223
- }
224
- if (response.decision === "modify" && response.updatedInput) {
225
- return { modifiedArgs: response.updatedInput };
226
- }
227
- if (response.decision === "context" && response.additionalContext) {
228
- return { additionalContext: response.additionalContext };
229
- }
230
- return undefined;
231
- }
232
- formatPostToolUseResponse(response) {
233
- if (response.updatedOutput) {
234
- return {
235
- modifiedResult: {
236
- resultType: "success",
237
- textResultForLlm: response.updatedOutput,
238
- },
239
- };
240
- }
241
- if (response.additionalContext) {
242
- return { additionalContext: response.additionalContext };
243
- }
244
- return undefined;
245
- }
246
- formatPreCompactResponse(response) {
247
- void response;
248
- return undefined;
249
- }
250
- formatSessionStartResponse(response) {
251
- return response.context ? { additionalContext: response.context } : undefined;
252
- }
253
- validateHooks(pluginRoot) {
254
- const results = [];
255
- const pluginRuntime = isCopilotPluginRuntime();
256
- const settingsPath = pluginRuntime ? copilotPluginHooksPath(pluginRoot) : this.getSettingsPath();
257
- const settingsLabel = pluginRuntime
258
- ? `Copilot CLI plugin bundle hooks.json (${settingsPath})`
259
- : settingsPath;
260
- const fix = pluginRuntime
261
- ? "copilot plugin install mksglu/context-mode:configs/copilot-cli"
262
- : "context-mode upgrade";
263
- try {
264
- const config = readHookConfig(settingsPath);
265
- const hooks = config.hooks;
266
- results.push({
267
- check: "Hooks schema version",
268
- status: config.version === 1 ? "pass" : "fail",
269
- message: config.version === 1
270
- ? `${settingsLabel} declares the required "version": 1`
271
- : `${settingsLabel} is missing top-level "version": 1`,
272
- ...(config.version === 1 ? {} : { fix }),
273
- });
274
- for (const hookName of Object.values(COPILOT_HOOK_NAMES)) {
275
- const configured = hasHook(hooks, hookName);
276
- results.push({
277
- check: `${hookName} hook`,
278
- status: configured ? "pass" : "fail",
279
- message: configured
280
- ? `${hookName} hook configured in ${settingsLabel}`
281
- : `${hookName} not found in ${settingsLabel}`,
282
- ...(configured ? {} : { fix }),
283
- });
284
- }
285
- }
286
- catch {
287
- results.push({
288
- check: "Hook configuration",
289
- status: "fail",
290
- message: `Could not read ${settingsLabel}`,
291
- fix,
292
- });
293
- }
294
- return results;
295
- }
296
- checkPluginRegistration() {
297
- if (isCopilotPluginRuntime()) {
298
- return {
299
- check: "MCP registration",
300
- status: "pass",
301
- message: "context-mode loaded from the Copilot CLI plugin bundle",
302
- };
303
- }
304
- try {
305
- const raw = readFileSync(copilotCliMcpConfigPath(), "utf-8");
306
- const config = parseJsonc(raw) ?? {};
307
- const mcpServers = config?.mcpServers ?? {};
308
- if ("context-mode" in mcpServers) {
309
- return {
310
- check: "MCP registration",
311
- status: "pass",
312
- message: "context-mode found in Copilot CLI mcp-config.json",
313
- };
314
- }
315
- return {
316
- check: "MCP registration",
317
- status: "fail",
318
- message: "context-mode not found in Copilot CLI mcpServers",
319
- // `context-mode upgrade` configures HOOKS only — never the MCP server.
320
- // Copilot CLI's own command writes ~/.copilot/mcp-config.json for us.
321
- fix: "copilot mcp add context-mode -- context-mode",
322
- };
323
- }
324
- catch {
325
- return {
326
- check: "MCP registration",
327
- status: "fail",
328
- message: `Could not read ${copilotCliMcpConfigPath()}`,
329
- fix: "copilot mcp add context-mode -- context-mode",
330
- };
331
- }
332
- }
333
- getInstalledVersion() {
334
- // Copilot's user-level MCP config and local/plugin-dir bundle do not expose
335
- // a durable installed plugin version to this process. The npm package
336
- // version is already checked above, so avoid the false `vconfigured` WARN.
337
- return existsSync(copilotCliMcpConfigPath()) || existsSync(this.getSettingsPath())
338
- ? "standalone"
339
- : "not installed";
340
- }
341
- }
@@ -1,4 +0,0 @@
1
- /**
2
- * adapters/cursor/config — Thin re-exports from CursorAdapter.
3
- */
4
- export { CursorAdapter } from "./index.js";
@@ -1,4 +0,0 @@
1
- /**
2
- * adapters/cursor/config — Thin re-exports from CursorAdapter.
3
- */
4
- export { CursorAdapter } from "./index.js";
@@ -1,55 +0,0 @@
1
- /**
2
- * adapters/cursor/hooks — Cursor hook definitions and config helpers.
3
- *
4
- * Cursor native hook config lives in `.cursor/hooks.json` or `~/.cursor/hooks.json`.
5
- * Unlike Claude/Gemini/VS Code Copilot, each hook entry is a flat object rather
6
- * than a `{ matcher, hooks: [...] }` wrapper.
7
- */
8
- /** Cursor hook type names. */
9
- export declare const HOOK_TYPES: {
10
- readonly PRE_TOOL_USE: "preToolUse";
11
- readonly POST_TOOL_USE: "postToolUse";
12
- readonly SESSION_START: "sessionStart";
13
- readonly STOP: "stop";
14
- readonly AFTER_AGENT_RESPONSE: "afterAgentResponse";
15
- };
16
- export type HookType = (typeof HOOK_TYPES)[keyof typeof HOOK_TYPES];
17
- /** Map of hook types that have actual script files. */
18
- export declare const HOOK_SCRIPTS: Partial<Record<HookType, string>>;
19
- /**
20
- * Negative-lookahead matcher for external MCP tool namespaces on Cursor (#529).
21
- *
22
- * Cursor MCP wire shape: `MCP:<tool>` (verified in
23
- * tests/fixtures/cursor/pretooluse-mcp.json, hooks/cursor/posttooluse.mjs:19-25).
24
- * Context-mode's own tools surface as `MCP:ctx_<...>`. The negative lookahead
25
- * on the `ctx_` prefix fires for every other MCP tool whose payload would
26
- * otherwise flood the model's context window before PostToolUse can act.
27
- *
28
- * Routing.mjs `isExternalMcpTool` is extended to recognise the `MCP:` prefix
29
- * so the routing branch returns external-MCP guidance instead of passthrough.
30
- */
31
- export declare const EXTERNAL_MCP_MATCHER_PATTERN = "MCP:(?!ctx_)";
32
- /** Canonical Cursor-native matchers for tools context-mode routes proactively. */
33
- export declare const PRE_TOOL_USE_MATCHERS: readonly ["Shell", "Read", "Grep", "WebFetch", "mcp_web_fetch", "mcp_fetch_tool", "Task", "MCP:ctx_execute", "MCP:ctx_execute_file", "MCP:ctx_batch_execute", "MCP:(?!ctx_)"];
34
- export declare const PRE_TOOL_USE_MATCHER_PATTERN: string;
35
- /** Required hooks for native Cursor support. */
36
- export declare const REQUIRED_HOOKS: HookType[];
37
- /** Optional hooks that improve behavior but aren't strictly required. */
38
- export declare const OPTIONAL_HOOKS: HookType[];
39
- /** Minimal native Cursor hook entry shape. */
40
- export interface CursorHookCommandEntry {
41
- type?: string;
42
- command?: string;
43
- matcher?: string;
44
- timeout?: number;
45
- loop_limit?: number | null;
46
- failClosed?: boolean;
47
- }
48
- /** Check whether a native Cursor hook entry points to context-mode. */
49
- export declare function isContextModeHook(entry: CursorHookCommandEntry | {
50
- hooks?: Array<{
51
- command?: string;
52
- }>;
53
- }, hookType: HookType): boolean;
54
- /** Build the CLI dispatcher command for a Cursor hook type. */
55
- export declare function buildHookCommand(hookType: HookType): string;
@@ -1,82 +0,0 @@
1
- /**
2
- * adapters/cursor/hooks — Cursor hook definitions and config helpers.
3
- *
4
- * Cursor native hook config lives in `.cursor/hooks.json` or `~/.cursor/hooks.json`.
5
- * Unlike Claude/Gemini/VS Code Copilot, each hook entry is a flat object rather
6
- * than a `{ matcher, hooks: [...] }` wrapper.
7
- */
8
- /** Cursor hook type names. */
9
- export const HOOK_TYPES = {
10
- PRE_TOOL_USE: "preToolUse",
11
- POST_TOOL_USE: "postToolUse",
12
- SESSION_START: "sessionStart",
13
- STOP: "stop",
14
- AFTER_AGENT_RESPONSE: "afterAgentResponse",
15
- };
16
- /** Map of hook types that have actual script files. */
17
- export const HOOK_SCRIPTS = {
18
- [HOOK_TYPES.PRE_TOOL_USE]: "pretooluse.mjs",
19
- [HOOK_TYPES.POST_TOOL_USE]: "posttooluse.mjs",
20
- [HOOK_TYPES.SESSION_START]: "sessionstart.mjs",
21
- [HOOK_TYPES.STOP]: "stop.mjs",
22
- [HOOK_TYPES.AFTER_AGENT_RESPONSE]: "afteragentresponse.mjs",
23
- };
24
- /**
25
- * Negative-lookahead matcher for external MCP tool namespaces on Cursor (#529).
26
- *
27
- * Cursor MCP wire shape: `MCP:<tool>` (verified in
28
- * tests/fixtures/cursor/pretooluse-mcp.json, hooks/cursor/posttooluse.mjs:19-25).
29
- * Context-mode's own tools surface as `MCP:ctx_<...>`. The negative lookahead
30
- * on the `ctx_` prefix fires for every other MCP tool whose payload would
31
- * otherwise flood the model's context window before PostToolUse can act.
32
- *
33
- * Routing.mjs `isExternalMcpTool` is extended to recognise the `MCP:` prefix
34
- * so the routing branch returns external-MCP guidance instead of passthrough.
35
- */
36
- export const EXTERNAL_MCP_MATCHER_PATTERN = "MCP:(?!ctx_)";
37
- /** Canonical Cursor-native matchers for tools context-mode routes proactively. */
38
- // NOTE (Cursor-3, deferred): Cursor is closed-source and does not currently
39
- // publish the exact tool name it uses for sub-agent dispatch (the analogue of
40
- // Claude Code's "Task" tool). The "Task" matcher below is kept as a best-guess
41
- // placeholder until probe data from a real Cursor session confirms the wire
42
- // name. If/when that probe lands, replace or supplement this entry — do NOT
43
- // add unverified matchers in the meantime. See Phase 7 audit
44
- // `/tmp/v1.0.107-adapter-cursor.json` (Cursor-3) for the full deferral note.
45
- export const PRE_TOOL_USE_MATCHERS = [
46
- "Shell",
47
- "Read",
48
- "Grep",
49
- "WebFetch",
50
- "mcp_web_fetch",
51
- "mcp_fetch_tool",
52
- "Task",
53
- "MCP:ctx_execute",
54
- "MCP:ctx_execute_file",
55
- "MCP:ctx_batch_execute",
56
- EXTERNAL_MCP_MATCHER_PATTERN,
57
- ];
58
- export const PRE_TOOL_USE_MATCHER_PATTERN = PRE_TOOL_USE_MATCHERS.join("|");
59
- /** Required hooks for native Cursor support. */
60
- export const REQUIRED_HOOKS = [
61
- HOOK_TYPES.PRE_TOOL_USE,
62
- ];
63
- /** Optional hooks that improve behavior but aren't strictly required. */
64
- export const OPTIONAL_HOOKS = [HOOK_TYPES.POST_TOOL_USE];
65
- /** Check whether a native Cursor hook entry points to context-mode. */
66
- export function isContextModeHook(entry, hookType) {
67
- const scriptName = HOOK_SCRIPTS[hookType];
68
- const cliCommand = buildHookCommand(hookType);
69
- if ("command" in entry) {
70
- const cmd = entry.command ?? "";
71
- return (scriptName != null && cmd.includes(scriptName)) || cmd.includes(cliCommand);
72
- }
73
- const wrappedEntry = entry;
74
- return (wrappedEntry.hooks?.some((hook) => {
75
- const cmd = hook.command ?? "";
76
- return (scriptName != null && cmd.includes(scriptName)) || cmd.includes(cliCommand);
77
- }) ?? false);
78
- }
79
- /** Build the CLI dispatcher command for a Cursor hook type. */
80
- export function buildHookCommand(hookType) {
81
- return `context-mode hook cursor ${hookType.toLowerCase()}`;
82
- }
@@ -1,64 +0,0 @@
1
- /**
2
- * adapters/cursor — Cursor platform adapter.
3
- *
4
- * Native Cursor hooks use lower-camel hook names and flat command entries in
5
- * `.cursor/hooks.json` / `~/.cursor/hooks.json`.
6
- */
7
- import { BaseAdapter } from "../base.js";
8
- import type { HookAdapter, HookParadigm, PlatformCapabilities, DiagnosticResult, PreToolUseEvent, PostToolUseEvent, SessionStartEvent, PreToolUseResponse, PostToolUseResponse, SessionStartResponse, HookRegistration } from "../types.js";
9
- interface StopEvent {
10
- sessionId: string;
11
- status: string;
12
- loopCount: number;
13
- generationId?: string;
14
- transcriptPath?: string;
15
- }
16
- export declare class CursorAdapter extends BaseAdapter implements HookAdapter {
17
- constructor();
18
- readonly name = "Cursor";
19
- readonly paradigm: HookParadigm;
20
- readonly capabilities: PlatformCapabilities;
21
- parsePreToolUseInput(raw: unknown): PreToolUseEvent;
22
- parsePostToolUseInput(raw: unknown): PostToolUseEvent;
23
- parseSessionStartInput(raw: unknown): SessionStartEvent;
24
- formatPreToolUseResponse(response: PreToolUseResponse): unknown;
25
- formatPostToolUseResponse(response: PostToolUseResponse): unknown;
26
- formatSessionStartResponse(response: SessionStartResponse): unknown;
27
- parseStopInput(raw: unknown): StopEvent;
28
- formatStopResponse(response: {
29
- followupMessage?: string;
30
- }): Record<string, unknown>;
31
- parseAfterAgentResponseInput(raw: unknown): {
32
- text: string;
33
- };
34
- getSettingsPath(): string;
35
- /**
36
- * Cursor stores conventions per project under .cursor/. Always returned
37
- * as an absolute path resolved against `projectDir` (or `process.cwd()`
38
- * when omitted) per the HookAdapter.getConfigDir contract.
39
- */
40
- getConfigDir(projectDir?: string): string;
41
- getInstructionFiles(): string[];
42
- generateHookConfig(_pluginRoot: string): HookRegistration;
43
- readSettings(): Record<string, unknown> | null;
44
- writeSettings(settings: Record<string, unknown>): void;
45
- validateHooks(_pluginRoot: string): DiagnosticResult[];
46
- /**
47
- * Detects context-mode plugin installations under Cursor's plugin directories.
48
- * Returns absolute paths to any `.cursor-plugin/plugin.json` files whose
49
- * `name` matches `context-mode`.
50
- */
51
- private detectPluginInstalls;
52
- checkPluginRegistration(): DiagnosticResult;
53
- getInstalledVersion(): string;
54
- configureAllHooks(_pluginRoot: string): string[];
55
- setHookPermissions(pluginRoot: string): string[];
56
- updatePluginRegistry(_pluginRoot: string, _version: string): void;
57
- private getCandidateHookConfigPaths;
58
- private getProjectDir;
59
- private extractSessionId;
60
- private loadNativeHookConfig;
61
- private hasClaudeCompatibilityHooks;
62
- private upsertHookEntry;
63
- }
64
- export {};