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,301 +0,0 @@
1
- /**
2
- * adapters/kiro — Kiro IDE/CLI platform adapter.
3
- *
4
- * Implements HookAdapter for Kiro's hooks-capable paradigm (json-stdio).
5
- *
6
- * Kiro specifics:
7
- * - Hooks via agent config files (~/.kiro/agents/<name>.json)
8
- * - Config: ~/.kiro/settings/mcp.json (JSON format)
9
- * - MCP: full support via mcpServers in mcp.json
10
- * - Hook exit codes: 0=allow, 2=block
11
- * - Cannot modify tool input (exit codes only)
12
- * - Session dir: ~/.kiro/context-mode/sessions/
13
- * - Routing file: KIRO.md
14
- *
15
- * Sources:
16
- * - MCP config: https://kiro.dev/docs/mcp/configuration/
17
- * - clientInfo.name: https://github.com/kirodotdev/Kiro/issues/5205 ("Kiro CLI")
18
- * - CLI hooks: https://kiro.dev/docs/cli/custom-agents/configuration-reference#hooks-field
19
- */
20
- import { readFileSync, writeFileSync, mkdirSync, } from "node:fs";
21
- import { resolve, dirname } from "node:path";
22
- import { fileURLToPath } from "node:url";
23
- import { homedir } from "node:os";
24
- import { BaseAdapter } from "../base.js";
25
- import { HOOK_TYPES as KIRO_HOOK_TYPES, PRE_TOOL_USE_MATCHER_PATTERN as KIRO_PRE_TOOL_USE_MATCHER_PATTERN, buildHookCommand as buildKiroHookCommand, isContextModeHook as isKiroContextModeHook, } from "./hooks.js";
26
- // ─────────────────────────────────────────────────────────
27
- // Adapter implementation
28
- // ─────────────────────────────────────────────────────────
29
- export class KiroAdapter extends BaseAdapter {
30
- constructor() {
31
- super([".kiro"]);
32
- }
33
- name = "Kiro";
34
- paradigm = "json-stdio";
35
- capabilities = {
36
- preToolUse: true,
37
- postToolUse: true,
38
- preCompact: false,
39
- sessionStart: true, // Kiro agentSpawn = SessionStart equivalent
40
- canModifyArgs: false, // Kiro CLI uses exit codes, can't modify input
41
- canModifyOutput: false,
42
- canInjectSessionContext: true, // agentSpawn returns additionalContext via JSON stdout
43
- };
44
- // ── Input parsing ──────────────────────────────────────
45
- parsePreToolUseInput(raw) {
46
- const input = raw;
47
- return {
48
- toolName: input.tool_name ?? "",
49
- toolInput: input.tool_input ?? {},
50
- sessionId: `pid-${process.ppid}`,
51
- projectDir: input.cwd ?? process.cwd(),
52
- raw,
53
- };
54
- }
55
- parsePostToolUseInput(raw) {
56
- const input = raw;
57
- const toolResponse = input.tool_response;
58
- return {
59
- toolName: input.tool_name ?? "",
60
- toolInput: input.tool_input ?? {},
61
- toolOutput: typeof toolResponse === "string"
62
- ? toolResponse
63
- : JSON.stringify(toolResponse ?? ""),
64
- sessionId: `pid-${process.ppid}`,
65
- projectDir: input.cwd ?? process.cwd(),
66
- raw,
67
- };
68
- }
69
- parsePreCompactInput(_raw) {
70
- throw new Error("Kiro does not support PreCompact hooks");
71
- }
72
- parseSessionStartInput(raw) {
73
- // Kiro maps agentSpawn -> SessionStart. Stdin shape mirrors codex/CC.
74
- const input = (raw ?? {});
75
- const source = input.source ?? "startup";
76
- return {
77
- source,
78
- sessionId: `pid-${process.ppid}`,
79
- projectDir: input.cwd ?? process.cwd(),
80
- raw,
81
- };
82
- }
83
- // ── Response formatting ────────────────────────────────
84
- formatPreToolUseResponse(response) {
85
- // Kiro CLI uses exit codes — this format is for adapter interface completeness.
86
- // The actual hook script handles exit codes directly.
87
- switch (response.decision) {
88
- case "deny":
89
- return { exitCode: 2, stderr: response.reason ?? "Blocked by context-mode" };
90
- case "context":
91
- return { exitCode: 0, stdout: response.additionalContext ?? "" };
92
- default:
93
- return undefined; // allow — no output needed
94
- }
95
- }
96
- formatPostToolUseResponse(_response) {
97
- return undefined; // PostToolUse is non-blocking
98
- }
99
- formatPreCompactResponse(_response) {
100
- return undefined;
101
- }
102
- formatSessionStartResponse(response) {
103
- // Kiro agentSpawn returns the same hookSpecificOutput shape as CC SessionStart.
104
- if (!response?.context)
105
- return undefined;
106
- return {
107
- hookSpecificOutput: {
108
- hookEventName: "agentSpawn",
109
- additionalContext: response.context,
110
- },
111
- };
112
- }
113
- // ── Configuration ──────────────────────────────────────
114
- getSettingsPath() {
115
- return resolve(homedir(), ".kiro", "settings", "mcp.json");
116
- }
117
- /**
118
- * Kiro stores per-project context under .kiro/ (steering files, etc).
119
- * Auto-memory + rule detection use this project-relative dir, returned as
120
- * an absolute path resolved against `projectDir` (or `process.cwd()`).
121
- * (Settings/MCP config still live under ~/.kiro/.)
122
- */
123
- getConfigDir(projectDir) {
124
- return resolve(projectDir ?? process.cwd(), ".kiro");
125
- }
126
- getInstructionFiles() {
127
- return ["KIRO.md"];
128
- }
129
- generateHookConfig(pluginRoot) {
130
- // Kiro CLI hook config format: { <hookName>: [{ matcher, command }] }
131
- // Note: This generates the entries for agent config files (~/.kiro/agents/*.json).
132
- return {
133
- [KIRO_HOOK_TYPES.PRE_TOOL_USE]: [{
134
- matcher: KIRO_PRE_TOOL_USE_MATCHER_PATTERN,
135
- hooks: [{ type: "command", command: buildKiroHookCommand(KIRO_HOOK_TYPES.PRE_TOOL_USE, pluginRoot) }],
136
- }],
137
- [KIRO_HOOK_TYPES.POST_TOOL_USE]: [{
138
- matcher: "*",
139
- hooks: [{ type: "command", command: buildKiroHookCommand(KIRO_HOOK_TYPES.POST_TOOL_USE, pluginRoot) }],
140
- }],
141
- [KIRO_HOOK_TYPES.AGENT_SPAWN]: [{
142
- matcher: "*",
143
- hooks: [{ type: "command", command: buildKiroHookCommand(KIRO_HOOK_TYPES.AGENT_SPAWN, pluginRoot) }],
144
- }],
145
- [KIRO_HOOK_TYPES.USER_PROMPT_SUBMIT]: [{
146
- matcher: "*",
147
- hooks: [{ type: "command", command: buildKiroHookCommand(KIRO_HOOK_TYPES.USER_PROMPT_SUBMIT, pluginRoot) }],
148
- }],
149
- };
150
- }
151
- readSettings() {
152
- try {
153
- const raw = readFileSync(this.getSettingsPath(), "utf-8");
154
- return JSON.parse(raw);
155
- }
156
- catch {
157
- return null;
158
- }
159
- }
160
- writeSettings(settings) {
161
- const settingsPath = this.getSettingsPath();
162
- mkdirSync(dirname(settingsPath), { recursive: true });
163
- writeFileSync(settingsPath, JSON.stringify(settings, null, 2), "utf-8");
164
- }
165
- // ── Diagnostics (doctor) ─────────────────────────────────
166
- validateHooks(pluginRoot) {
167
- const results = [];
168
- const defaultAgent = resolve(homedir(), ".kiro", "agents", "default.json");
169
- try {
170
- const config = JSON.parse(readFileSync(defaultAgent, "utf-8"));
171
- const hooks = config.hooks ?? {};
172
- // Check required hooks
173
- for (const hookType of [KIRO_HOOK_TYPES.PRE_TOOL_USE]) {
174
- const entries = hooks[hookType] ?? [];
175
- const found = entries.some((e) => isKiroContextModeHook(e, hookType));
176
- results.push({
177
- check: `Hook: ${hookType}`,
178
- status: found ? "pass" : "fail",
179
- message: found
180
- ? `context-mode ${hookType} hook found`
181
- : `context-mode ${hookType} hook not configured`,
182
- ...(found ? {} : { fix: `Run: context-mode upgrade` }),
183
- });
184
- }
185
- // Check optional hooks
186
- for (const hookType of [KIRO_HOOK_TYPES.POST_TOOL_USE]) {
187
- const entries = hooks[hookType] ?? [];
188
- const found = entries.some((e) => isKiroContextModeHook(e, hookType));
189
- results.push({
190
- check: `Hook: ${hookType}`,
191
- status: found ? "pass" : "warn",
192
- message: found
193
- ? `context-mode ${hookType} hook found`
194
- : `context-mode ${hookType} hook not configured (optional)`,
195
- });
196
- }
197
- }
198
- catch {
199
- results.push({
200
- check: "Hook configuration",
201
- status: "warn",
202
- message: "Could not read ~/.kiro/agents/default.json",
203
- fix: "Run: context-mode upgrade",
204
- });
205
- }
206
- return results;
207
- }
208
- checkPluginRegistration() {
209
- try {
210
- const raw = readFileSync(this.getSettingsPath(), "utf-8");
211
- const config = JSON.parse(raw);
212
- const mcpServers = config?.mcpServers ?? {};
213
- if ("context-mode" in mcpServers) {
214
- return {
215
- check: "MCP registration",
216
- status: "pass",
217
- message: "context-mode found in mcpServers config",
218
- };
219
- }
220
- return {
221
- check: "MCP registration",
222
- status: "fail",
223
- message: "context-mode not found in mcpServers",
224
- fix: "Add context-mode to mcpServers in ~/.kiro/settings/mcp.json",
225
- };
226
- }
227
- catch {
228
- return {
229
- check: "MCP registration",
230
- status: "warn",
231
- message: "Could not read ~/.kiro/settings/mcp.json",
232
- };
233
- }
234
- }
235
- getInstalledVersion() {
236
- try {
237
- const pkgPath = resolve(homedir(), ".kiro", "extensions", "context-mode", "package.json");
238
- const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
239
- return pkg.version ?? "unknown";
240
- }
241
- catch {
242
- return "not installed";
243
- }
244
- }
245
- // ── Upgrade ────────────────────────────────────────────
246
- configureAllHooks(pluginRoot) {
247
- const changes = [];
248
- const configDir = resolve(homedir(), ".kiro", "agents");
249
- const defaultAgent = resolve(configDir, "default.json");
250
- try {
251
- mkdirSync(configDir, { recursive: true });
252
- let config = {};
253
- try {
254
- config = JSON.parse(readFileSync(defaultAgent, "utf-8"));
255
- }
256
- catch {
257
- // No existing config — create new
258
- }
259
- const hooks = (config.hooks ?? {});
260
- // Hooks to add: [hookType, matcher]
261
- const hookSpecs = [
262
- [KIRO_HOOK_TYPES.PRE_TOOL_USE, KIRO_PRE_TOOL_USE_MATCHER_PATTERN],
263
- [KIRO_HOOK_TYPES.POST_TOOL_USE, "*"],
264
- [KIRO_HOOK_TYPES.AGENT_SPAWN, "*"],
265
- [KIRO_HOOK_TYPES.USER_PROMPT_SUBMIT, "*"],
266
- ];
267
- for (const [hookType, matcher] of hookSpecs) {
268
- const entries = (hooks[hookType] ?? []);
269
- if (!entries.some(e => isKiroContextModeHook(e, hookType))) {
270
- entries.push({
271
- matcher,
272
- command: buildKiroHookCommand(hookType, pluginRoot),
273
- });
274
- hooks[hookType] = entries;
275
- changes.push(`Added ${hookType} hook to ${defaultAgent}`);
276
- }
277
- }
278
- config.hooks = hooks;
279
- writeFileSync(defaultAgent, JSON.stringify(config, null, 2), "utf-8");
280
- }
281
- catch (err) {
282
- changes.push(`Failed to configure hooks: ${err.message}`);
283
- }
284
- return changes;
285
- }
286
- setHookPermissions(_pluginRoot) {
287
- return [];
288
- }
289
- updatePluginRegistry(_pluginRoot, _version) {
290
- // Kiro plugin registry is managed via mcp.json
291
- }
292
- getRoutingInstructions() {
293
- const instructionsPath = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", "..", "configs", "kiro", "KIRO.md");
294
- try {
295
- return readFileSync(instructionsPath, "utf-8");
296
- }
297
- catch {
298
- return "# context-mode\n\nUse context-mode MCP tools (execute, execute_file, batch_execute, fetch_and_index, search) instead of run_command/view_file for data-heavy operations.";
299
- }
300
- }
301
- }
@@ -1,65 +0,0 @@
1
- /**
2
- * adapters/omp — Oh My Pi (OMP) platform adapter.
3
- *
4
- * OMP integration facts (verified against can1357/oh-my-pi @ v3.20.1):
5
- * - MCP config: `~/.omp/agent/mcp.json` (global) or `<project>/.omp/mcp.json`
6
- * (project), per `packages/utils/src/dirs.ts` `getMCPConfigPath()` and
7
- * `docs/mcp-config.md` "Preferred config locations".
8
- * - Agent-dir env override: `PI_CODING_AGENT_DIR` — `packages/utils/src/dirs.ts`:
9
- * `let dirs = new DirResolver(process.env.PI_CODING_AGENT_DIR);`
10
- * (No `OMP_*` runtime env exists; `.env`-file `OMP_*` keys are mirrored to
11
- * `PI_*` BEFORE process.env is read.)
12
- * - System-prompt file: `SYSTEM.md` (project `.omp/SYSTEM.md` precedence,
13
- * global `~/.omp/agent/SYSTEM.md` fallback). NOT `PI.md` — no `PI.md`
14
- * loader exists upstream. OMP also auto-discovers `AGENTS.md` via
15
- * `packages/coding-agent/src/discovery/agents-md.ts`.
16
- * - Hook surface: OMP DOES expose pre/post tool-call hooks
17
- * (`~/.omp/agent/hooks/{pre,post}/*.ts`, `omp.on("tool_call", ...)`).
18
- * This adapter ships MCP-only delivery for now; wiring native OMP
19
- * hooks is future work tracked separately.
20
- *
21
- * Why a dedicated adapter rather than reusing pi:
22
- * OMP and Pi share a runtime surface but different storage roots
23
- * (`~/.omp/agent/` vs `~/.pi/`). Without an OMP adapter, OMP users
24
- * running through a Claude-installed harness silently land their
25
- * context-mode data under `~/.claude/context-mode/` (issue #473).
26
- */
27
- import { BaseAdapter } from "../base.js";
28
- import type { HookAdapter, HookParadigm, PlatformCapabilities, DiagnosticResult, PreToolUseEvent, PostToolUseEvent, PreCompactEvent, SessionStartEvent, PreToolUseResponse, PostToolUseResponse, PreCompactResponse, SessionStartResponse, HookRegistration } from "../types.js";
29
- export declare class OMPAdapter extends BaseAdapter implements HookAdapter {
30
- constructor();
31
- readonly name = "OMP";
32
- readonly paradigm: HookParadigm;
33
- readonly capabilities: PlatformCapabilities;
34
- parsePreToolUseInput(_raw: unknown): PreToolUseEvent;
35
- parsePostToolUseInput(_raw: unknown): PostToolUseEvent;
36
- parsePreCompactInput(_raw: unknown): PreCompactEvent;
37
- parseSessionStartInput(_raw: unknown): SessionStartEvent;
38
- formatPreToolUseResponse(_response: PreToolUseResponse): unknown;
39
- formatPostToolUseResponse(_response: PostToolUseResponse): unknown;
40
- formatPreCompactResponse(_response: PreCompactResponse): unknown;
41
- formatSessionStartResponse(_response: SessionStartResponse): unknown;
42
- /**
43
- * Resolve OMP agent root, honoring `PI_CODING_AGENT_DIR` when set
44
- * (the upstream OMP convention — see `packages/utils/src/dirs.ts`)
45
- * and falling back to `~/.omp/agent`.
46
- */
47
- private getAgentDir;
48
- getSettingsPath(): string;
49
- /**
50
- * OMP nests its config under the agent dir. Always absolute.
51
- * `_projectDir` accepted for interface symmetry but unused — home-rooted.
52
- */
53
- getConfigDir(_projectDir?: string): string;
54
- getInstructionFiles(): string[];
55
- generateHookConfig(_pluginRoot: string): HookRegistration;
56
- readSettings(): Record<string, unknown> | null;
57
- writeSettings(settings: Record<string, unknown>): void;
58
- validateHooks(_pluginRoot: string): DiagnosticResult[];
59
- checkPluginRegistration(): DiagnosticResult;
60
- getInstalledVersion(): string;
61
- configureAllHooks(_pluginRoot: string): string[];
62
- setHookPermissions(_pluginRoot: string): string[];
63
- updatePluginRegistry(_pluginRoot: string, _version: string): void;
64
- getRoutingInstructions(): string;
65
- }
@@ -1,182 +0,0 @@
1
- /**
2
- * adapters/omp — Oh My Pi (OMP) platform adapter.
3
- *
4
- * OMP integration facts (verified against can1357/oh-my-pi @ v3.20.1):
5
- * - MCP config: `~/.omp/agent/mcp.json` (global) or `<project>/.omp/mcp.json`
6
- * (project), per `packages/utils/src/dirs.ts` `getMCPConfigPath()` and
7
- * `docs/mcp-config.md` "Preferred config locations".
8
- * - Agent-dir env override: `PI_CODING_AGENT_DIR` — `packages/utils/src/dirs.ts`:
9
- * `let dirs = new DirResolver(process.env.PI_CODING_AGENT_DIR);`
10
- * (No `OMP_*` runtime env exists; `.env`-file `OMP_*` keys are mirrored to
11
- * `PI_*` BEFORE process.env is read.)
12
- * - System-prompt file: `SYSTEM.md` (project `.omp/SYSTEM.md` precedence,
13
- * global `~/.omp/agent/SYSTEM.md` fallback). NOT `PI.md` — no `PI.md`
14
- * loader exists upstream. OMP also auto-discovers `AGENTS.md` via
15
- * `packages/coding-agent/src/discovery/agents-md.ts`.
16
- * - Hook surface: OMP DOES expose pre/post tool-call hooks
17
- * (`~/.omp/agent/hooks/{pre,post}/*.ts`, `omp.on("tool_call", ...)`).
18
- * This adapter ships MCP-only delivery for now; wiring native OMP
19
- * hooks is future work tracked separately.
20
- *
21
- * Why a dedicated adapter rather than reusing pi:
22
- * OMP and Pi share a runtime surface but different storage roots
23
- * (`~/.omp/agent/` vs `~/.pi/`). Without an OMP adapter, OMP users
24
- * running through a Claude-installed harness silently land their
25
- * context-mode data under `~/.claude/context-mode/` (issue #473).
26
- */
27
- import { readFileSync, writeFileSync, mkdirSync, } from "node:fs";
28
- import { resolve, dirname } from "node:path";
29
- import { homedir } from "node:os";
30
- import { BaseAdapter } from "../base.js";
31
- // ─────────────────────────────────────────────────────────
32
- // Adapter implementation
33
- // ─────────────────────────────────────────────────────────
34
- export class OMPAdapter extends BaseAdapter {
35
- constructor() {
36
- super([".omp"]);
37
- }
38
- name = "OMP";
39
- paradigm = "mcp-only";
40
- capabilities = {
41
- preToolUse: false,
42
- postToolUse: false,
43
- preCompact: false,
44
- sessionStart: false,
45
- canModifyArgs: false,
46
- canModifyOutput: false,
47
- canInjectSessionContext: false,
48
- };
49
- // ── Input parsing ──────────────────────────────────────
50
- // OMP does not support hooks. These methods exist to satisfy the
51
- // interface contract but will throw if called.
52
- parsePreToolUseInput(_raw) {
53
- throw new Error("OMP hooks not wired by this adapter (MCP-only delivery)");
54
- }
55
- parsePostToolUseInput(_raw) {
56
- throw new Error("OMP hooks not wired by this adapter (MCP-only delivery)");
57
- }
58
- parsePreCompactInput(_raw) {
59
- throw new Error("OMP hooks not wired by this adapter (MCP-only delivery)");
60
- }
61
- parseSessionStartInput(_raw) {
62
- throw new Error("OMP hooks not wired by this adapter (MCP-only delivery)");
63
- }
64
- // ── Response formatting ────────────────────────────────
65
- // OMP does not support hooks. Return undefined for all responses.
66
- formatPreToolUseResponse(_response) {
67
- return undefined;
68
- }
69
- formatPostToolUseResponse(_response) {
70
- return undefined;
71
- }
72
- formatPreCompactResponse(_response) {
73
- return undefined;
74
- }
75
- formatSessionStartResponse(_response) {
76
- return undefined;
77
- }
78
- // ── Configuration ──────────────────────────────────────
79
- /**
80
- * Resolve OMP agent root, honoring `PI_CODING_AGENT_DIR` when set
81
- * (the upstream OMP convention — see `packages/utils/src/dirs.ts`)
82
- * and falling back to `~/.omp/agent`.
83
- */
84
- getAgentDir() {
85
- return process.env.PI_CODING_AGENT_DIR
86
- ?? resolve(homedir(), ".omp", "agent");
87
- }
88
- getSettingsPath() {
89
- return resolve(this.getAgentDir(), "mcp.json");
90
- }
91
- /**
92
- * OMP nests its config under the agent dir. Always absolute.
93
- * `_projectDir` accepted for interface symmetry but unused — home-rooted.
94
- */
95
- getConfigDir(_projectDir) {
96
- return this.getAgentDir();
97
- }
98
- getInstructionFiles() {
99
- // SYSTEM.md is the OMP-native system-prompt file (see
100
- // can1357/oh-my-pi README "Custom System Prompt"). AGENTS.md is also
101
- // auto-discovered by the universal discovery layer.
102
- return ["SYSTEM.md", "AGENTS.md"];
103
- }
104
- generateHookConfig(_pluginRoot) {
105
- return {};
106
- }
107
- readSettings() {
108
- try {
109
- const raw = readFileSync(this.getSettingsPath(), "utf-8");
110
- return JSON.parse(raw);
111
- }
112
- catch {
113
- return null;
114
- }
115
- }
116
- writeSettings(settings) {
117
- const settingsPath = this.getSettingsPath();
118
- mkdirSync(dirname(settingsPath), { recursive: true });
119
- writeFileSync(settingsPath, JSON.stringify(settings, null, 2), "utf-8");
120
- }
121
- // ── Diagnostics (doctor) ─────────────────────────────────
122
- validateHooks(_pluginRoot) {
123
- return [
124
- {
125
- check: "Hook support",
126
- status: "warn",
127
- message: "context-mode delivers via MCP for OMP. " +
128
- "Native OMP pre/post tool-call hooks are not yet wired by this adapter.",
129
- },
130
- ];
131
- }
132
- checkPluginRegistration() {
133
- try {
134
- const raw = readFileSync(this.getSettingsPath(), "utf-8");
135
- const config = JSON.parse(raw);
136
- const mcpServers = config?.mcpServers ?? {};
137
- if ("context-mode" in mcpServers) {
138
- return {
139
- check: "MCP registration",
140
- status: "pass",
141
- message: "context-mode found in mcpServers config",
142
- };
143
- }
144
- return {
145
- check: "MCP registration",
146
- status: "fail",
147
- message: "context-mode not found in mcpServers",
148
- fix: `Add context-mode to mcpServers in ${this.getSettingsPath()}`,
149
- };
150
- }
151
- catch {
152
- return {
153
- check: "MCP registration",
154
- status: "warn",
155
- message: `Could not read ${this.getSettingsPath()}`,
156
- };
157
- }
158
- }
159
- getInstalledVersion() {
160
- try {
161
- const pkgPath = resolve(this.getAgentDir(), "extensions", "context-mode", "package.json");
162
- const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
163
- return pkg.version ?? "unknown";
164
- }
165
- catch {
166
- return "not installed";
167
- }
168
- }
169
- // ── Upgrade ────────────────────────────────────────────
170
- configureAllHooks(_pluginRoot) {
171
- return [];
172
- }
173
- setHookPermissions(_pluginRoot) {
174
- return [];
175
- }
176
- updatePluginRegistry(_pluginRoot, _version) {
177
- // OMP MCP server registry is managed via mcp.json
178
- }
179
- getRoutingInstructions() {
180
- return "# context-mode\n\nUse context-mode MCP tools (execute, execute_file, batch_execute, fetch_and_index, search) instead of run_command/view_file for data-heavy operations.";
181
- }
182
- }
@@ -1,81 +0,0 @@
1
- /**
2
- * Oh My Pi (OMP) plugin entry point for context-mode.
3
- *
4
- * Mirrors the Pi extension shape (`src/adapters/pi/extension.ts`) for
5
- * the four OMP hook events that materially protect the context window
6
- * and persist session continuity:
7
- *
8
- * - session_start — initialize the session row in our DB
9
- * - tool_call — hard-block curl/wget/inline-HTTP in bash
10
- * - tool_result — extract structured events into the session DB
11
- * - session_before_compact — persist a resume snapshot before compaction
12
- *
13
- * Loaded by OMP via the `omp` (or `pi`) field in package.json — see
14
- * upstream loader at refs/platforms/oh-my-pi/packages/coding-agent/src/
15
- * extensibility/plugins/loader.ts:75:
16
- * `const manifest: PluginManifest | undefined = pluginPkg.omp || pluginPkg.pi;`
17
- * Hook factory contract from refs/.../extensibility/hooks/types.ts:809:
18
- * `export type HookFactory = (pi: HookAPI) => void;`
19
- *
20
- * OMP differs from Pi in two ways that justify a dedicated plugin file:
21
- * 1. Storage roots at ~/.omp/context-mode/ via OMPAdapter, not ~/.pi/
22
- * 2. OMP has native MCP support (mcp.json), so no MCP bridge is needed
23
- * — the bridge that Pi's extension ships (mcp-bridge.ts) is dead weight
24
- * under OMP and is intentionally omitted here.
25
- */
26
- export declare function _resetOmpPluginStateForTests(): void;
27
- /**
28
- * Return the current session ID picked by the most recent session_start
29
- * handler. Test-only — production code reads `_sessionId` directly via
30
- * the closure. The shared SQLite DB at `~/.omp/context-mode/` survives
31
- * between tests, so `getLatestSessionId()` cannot disambiguate which
32
- * row belongs to "this" test when multiple tests insert in the same
33
- * second; tests use this getter instead.
34
- */
35
- export declare function _getOmpPluginSessionIdForTests(): string;
36
- type ToolCallEvent = {
37
- toolName: string;
38
- toolCallId?: string;
39
- input?: Record<string, unknown>;
40
- };
41
- type ToolResultEvent = {
42
- toolName: string;
43
- toolCallId?: string;
44
- input?: Record<string, unknown>;
45
- content?: Array<{
46
- type: string;
47
- text?: string;
48
- }>;
49
- isError?: boolean;
50
- };
51
- type ToolCallEventResult = {
52
- block?: boolean;
53
- reason?: string;
54
- };
55
- type TurnEndEvent = {
56
- type?: string;
57
- message?: unknown;
58
- messages?: unknown;
59
- };
60
- type HookEventCtx = Record<string, unknown> | undefined;
61
- type HookHandler<E, R = void> = (event: E, ctx: HookEventCtx) => R | undefined | Promise<R | undefined>;
62
- export interface MinimalHookAPI {
63
- on(event: "session_start", handler: HookHandler<{
64
- type: "session_start";
65
- }>): void;
66
- on(event: "session_before_compact", handler: HookHandler<{
67
- type: "session_before_compact";
68
- }>): void;
69
- on(event: "tool_call", handler: HookHandler<ToolCallEvent, ToolCallEventResult>): void;
70
- on(event: "tool_result", handler: HookHandler<ToolResultEvent>): void;
71
- on(event: "turn_end", handler: HookHandler<TurnEndEvent>): void;
72
- on(event: string, handler: (...args: unknown[]) => unknown): void;
73
- }
74
- /**
75
- * OMP plugin default export. Called once by the OMP runtime per
76
- * upstream `extensibility/plugins/loader.ts` after `omp plugin install
77
- * context-mode`. Subsequent `pi.on(...)` registrations route the four
78
- * lifecycle events to our SessionDB-backed handlers below.
79
- */
80
- export default function ompPlugin(pi: MinimalHookAPI): void;
81
- export {};