context-mode 1.0.169 → 2.0.0-next.6

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