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
@@ -0,0 +1,6 @@
1
+ ---
2
+ name: ctx-doctor
3
+ description: Check that context-mode is installed and working, as a table.
4
+ disable-model-invocation: true
5
+ ---
6
+ Call the mcp__context_mode__ctx_doctor tool and show its table to the user unchanged. If a row failed, list the fixes it names, in order.
@@ -0,0 +1,6 @@
1
+ ---
2
+ name: ctx-stats
3
+ description: Show how much context context-mode saved, as a table.
4
+ disable-model-invocation: true
5
+ ---
6
+ Call the mcp__context_mode__ctx_stats tool and show its table to the user unchanged. Add one sentence under the table that names the largest saving.
@@ -0,0 +1,6 @@
1
+ ---
2
+ name: ctx-upgrade
3
+ description: Update context-mode to the latest release.
4
+ disable-model-invocation: true
5
+ ---
6
+ Call the mcp__context_mode__ctx_upgrade tool and show its table to the user. Then call mcp__context_mode__ctx_doctor and show its table. If a restart is needed, say so in one sentence.
@@ -0,0 +1,14 @@
1
+ {
2
+ "mcpServers": {
3
+ "context-mode": {
4
+ "args": [
5
+ "server.mjs",
6
+ "--agent",
7
+ "copilot-cli"
8
+ ],
9
+ "command": "node"
10
+ }
11
+ },
12
+ "name": "context-mode",
13
+ "version": "2.0.0-next.6"
14
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "claude-code": {
3
+ "event": "PreToolUse",
4
+ "payload": {
5
+ "session_id": "11111111-1111-1111-1111-111111111111",
6
+ "transcript_path": "/tmp/transcript.jsonl",
7
+ "cwd": "/tmp/project",
8
+ "hook_event_name": "PreToolUse",
9
+ "tool_name": "Bash",
10
+ "tool_input": { "command": "ls" }
11
+ }
12
+ },
13
+ "codex": {
14
+ "event": "PreToolUse",
15
+ "payload": {
16
+ "session_id": "22222222-2222-2222-2222-222222222222",
17
+ "cwd": "/tmp/project",
18
+ "event": "exec",
19
+ "command": "ls"
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "mcpServers": {
3
+ "context-mode": {
4
+ "args": [
5
+ "${extensionPath}${/}server.mjs",
6
+ "--agent",
7
+ "gemini"
8
+ ],
9
+ "command": "node"
10
+ }
11
+ },
12
+ "name": "context-mode",
13
+ "version": "2.0.0-next.6"
14
+ }
package/hook.mjs ADDED
@@ -0,0 +1,202 @@
1
+ var ge=["claude-code","codex","gemini","qwen","copilot-cli","vscode","kiro","zcode","pi","opencode"];var Q="context-mode",Ke=Object.freeze(["ctx_execute","ctx_batch","ctx_index","ctx_search","ctx_resume","ctx_stats","ctx_doctor","ctx_upgrade","ctx_purge"]);function U(e,t){if(t==="")return e;let n=e;for(let o of Ke)n=n.split(o).join(t+o);return n}var be=16384,go=2048;var jc=4096,ho=640,vt="</context_mode_state>",Ft=1048576,bo=65536,So=4096,To=96,Ro=256,Oo=48;function Ao(e,t,n,o="",r=""){let s=r===""?[e]:[e,r];return o+"ctx_search({queries:["+s.map(i=>JSON.stringify(i)).join(",")+"], source:"+JSON.stringify(t)+"}) searches the whole output ("+n+" B)."}var No=3,Z=4096;var jt=85,Gt=340,Bt=Object.freeze({toolerr:900,decision:700,prompt:500,edit:400,index:200});var yo=.7,Co=.7,ko=.3,Wt=Object.freeze([1e3,881,780,696,625,565,515,473,438,408,383,361,344,329,316,306,297,289,283,278,273,270,267,264,262,260,258,257,256,255,254,253,253,252,252,252,251,251,251,251,251,251,251,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250]),Io='context-mode: earlier work of this session is in ctx_resume (state block) and ctx_search(scope:"session", sort:"timeline").';var Gc=6e5;var ie=5e3,qe="-wal",Ye="-shm",Do=".tmp",wo=255,Lo=11,Po=26;var M=5e3;var Xt=0;var Uo=16,Se=5;var Mo="projects",Ho="context.db";var Kt=".git",qt="worktree ",Yt="gitdir: ",vo="commondir",Fo="HEAD",Je="--workspace-folder",af=Object.freeze(["shell","powershell","javascript","typescript","python"]);var jo=80;var lf=Object.freeze({NO_COLOR:"1",FORCE_COLOR:"0"});var uf=Object.freeze({"claude-code":"CLAUDE_CODE_SESSION_ID"}),Jt="24.15.0",Go="~/.context-mode";var Bo="CONTEXT_MODE_REQUIRE_SECURITY",Ve=".claude",ze="agents",$e=".md",Wo="plugins",Xo="installed_plugins.json",ce=":",Ko="@",Vt="---",qo="tools",Yo="disallowedTools",zt="mcp__",$t="__",Jo="mcp_",Vo="_-.:",_o=10;function Bc(e){if(e===void 0||e.trim()==="")return _o;let t=Number(e);return Number.isSafeInteger(t)&&t>0?t:_o}var df=Bc(process.env.CTX_MCP_HINT_EVERY);var ee=32;var zo="context-mode: ",$o=Object.freeze({curl:"This curl/wget call",http:"This inline HTTP call",build:"This build command",webfetch:"WebFetch"}),Qo=" sends its body into the conversation.",Zo="Run it here instead; the full output is indexed and only the part that matches your intent comes back.",er="Tool: ",tr="state what you need",nr="ctx_execute",or=Object.freeze(["ctx_index","ctx_search"]),Te="Blocked by security policy: matches deny pattern ",Qe="context-mode: your deny rules could not be read. Fix: run ctx_doctor.",Ze="context-mode: could not parse this command; it may be blocked by your own rules. Run it through ctx_execute instead.",ff=Object.freeze(["pwd","whoami","uname","id","realpath","ln"]),xf=Object.freeze(["status"]),pf=Object.freeze(["--version","-v"]),Ef=Object.freeze(["cp","mv","rm"]),mf=Object.freeze(["-v","--verbose"]),I=Object.freeze({identity:".",length:"length",pipeLength:"| length",fieldSep:"."}),rr="{prefix}",sr=", then ",ir="context-mode: your deny rules could not be read, so they are not applied. Fix: run ctx_doctor.",cr=Object.freeze(["claude.ai","claude.site","claudeusercontent.com"]),ar=Object.freeze(["curl","wget"]),lr=Object.freeze({curl:{short:"s",long:"--silent"},wget:{short:"q",long:"--quiet"}}),ur=Object.freeze(["-v","--verbose","--trace","--trace-ascii"]),dr="-D",fr=Object.freeze(["gradlew","gradle","mvnw","mvn","sbt"]),Re="fetch(",xr="'\"`",pr="http",Er=Object.freeze(["requests.get(","requests.post(","requests.put(","http.get(","http.request("]),mr=Object.freeze(["cat","head","tail","sed","less","jq","bat","more"]),_r=Object.freeze(["head","tail"]),Qt=Object.freeze(["-n","-c","--lines","--bytes"]),et="sed",gr=Object.freeze(["-n","--quiet","--silent"]),hr="jq",br=Object.freeze(["file_path","absolute_path","path"]),Sr="ctx_",Tr="Bash",Rr=Object.freeze(["Write","Edit"]),Or=Object.freeze(["file_path","path"]),Zt="Exit code ",Oe="resume-hint",en="compact-state",tn="pending-compact",tt="pending_compact:",nn="1",on=2048,rn=5,Ar=340,sn="compacted:",Nr="recall_units_seen:",yr=64,Cr="recall_seen:",cn="<context_mode_recall>",an="</context_mode_recall>",kr="recall",ln="This session may have run before. Call {prefix}ctx_resume for a summary of what happened.",Ir="subagent:",Dr="run.mjs",wr="node",Lr=`context-mode: This command sends its body into the conversation.
2
+ Run the command on the line above with Bash instead. It runs the same command in the same folder, indexes the full output and prints only the part that matches your intent, with the same exit code.`,nt="--agent",Pr=1e3;var _f=Object.freeze(["Scope","Produced","Returned","Saved","Reduction %"]);var gf=Object.freeze(["session","source","project"]);var ot="decision";var un="AskUserQuestion",Ur="answers",rt="option",Mr=" | ";var hf=Object.freeze(["D1","D2","D3","D4","D5","D5b","D6","D7","D8","D9","D10"]),bf=Object.freeze({D1:"version",D2:"node",D3:"host config",D4:"old entries",D5:"hook round trip",D5b:"double-fire",D6:"MCP",D7:"project and worktree",D8:"context.db",D9:"index",D10:"enforcement mode"});var Sf=`(report truncated at ${jc} B; run ctx_doctor again after the first fix)`;var Tf=`install Node ${Jt} or later`;var Rf=Object.freeze(["MCP entry","hook entries","hook timeout"]);var Wc=Object.freeze({"claude-code":[".claude"],codex:[".codex"],gemini:[".gemini"],qwen:[".qwen"],"copilot-cli":[".copilot"],vscode:[".vscode"],kiro:[".kiro"],zcode:[".zcode"],pi:[".pi"],opencode:[".config","opencode"]});var Of=Object.freeze(["upgrade","uninstall"]);var Af=Object.freeze(["clone","--depth","1","--branch"]),Nf=Object.freeze(["rev-parse","HEAD"]);var yf=Object.freeze(["pi","opencode"]);var Cf=Object.freeze({GIT_TERMINAL_PROMPT:"0"}),kf=Object.freeze({GIT_CONFIG_COUNT:"1",GIT_CONFIG_KEY_0:"core.autocrlf",GIT_CONFIG_VALUE_0:"false"});var If=Object.freeze(["doctor-env.ts","doctor-config.ts","doctor-hook.ts","doctor-db.ts","doctor-heal.ts","release-fetch.ts","verify-sums.ts","plugin-swap.ts","host-write.ts","v1-remove.ts","uninstall.ts"]);var Df=Object.freeze({"claude-code":{root:"plugin",file:["hooks","claude-code.json"],key:["hooks"],shape:"nested",timeoutKey:"timeout",matcher:!0},codex:{root:"home",file:[".codex","hooks.json"],key:["hooks"],shape:"nested",timeoutKey:"timeout",matcher:!0},gemini:{root:"home",file:[".gemini","settings.json"],key:["hooks"],shape:"nested",timeoutKey:"timeout",matcher:!1},qwen:{root:"home",file:[".qwen","settings.json"],key:["hooks"],shape:"nested",timeoutKey:"timeout",matcher:!0},"copilot-cli":{root:"home",file:[".copilot","hooks","context-mode.json"],key:["hooks"],shape:"flat",timeoutKey:"timeoutSec",matcher:!1},vscode:{root:"project",file:[".github","hooks","context-mode.json"],key:["hooks"],shape:"flat",timeoutKey:"timeout",matcher:!1},kiro:{root:"home",file:[".kiro","hooks","context-mode.json"],key:["hooks"],shape:"kiro",timeoutKey:"timeout",matcher:!1},zcode:{root:"home",file:[".zcode","cli","config.json"],key:["hooks","events"],shape:"zcode",timeoutKey:"timeoutMs",matcher:!0},pi:null,opencode:null}),wf=Object.freeze(["PreToolUse","PostToolUse"]);var Lf=Object.freeze([["@mcp","mcp"],["shell","shell"]]);var Pf=Object.freeze(["features","hooks"]);var Uf=Object.freeze(["",qe,Ye]);var Mf=Object.freeze({"claude-code":"claude plugin marketplace update context-mode && claude plugin update context-mode@context-mode",codex:"rewrite config.toml's [mcp_servers.context-mode*] block to the v2 entry, then restart Codex",gemini:"gemini extensions install https://github.com/mksglu/context-mode --ref release --auto-update",qwen:"qwen extensions install https://github.com/mksglu/context-mode --ref release --auto-update"});var Hf=Object.freeze(["afteragentresponse.mjs","aftermodel.mjs","aftertool.mjs","agentspawn.mjs","beforeagent.mjs","beforetool.mjs","posttooluse.mjs","precompact.mjs","precompress.mjs","pretooluse.mjs","sessionend.mjs","sessionstart.mjs","stop.mjs","userpromptsubmit.mjs"]);var vf=Object.freeze(["hooks","codex"]);var Ff=Object.freeze([".mjs",".sh"]);var jf=Object.freeze(["agents","default.json"]);var Gf=Object.freeze(["steering","KIRO.md"]);var Bf=Object.freeze(["opencode.jsonc","opencode.json"]);var Wf=Object.freeze(["content","platform.json"]);var Hr="custom";var Xf=Object.freeze(["/","\\"]),he=Object.freeze({hook:"old context-mode hook entry: command contains context-mode and an old script name or context-mode hook",cacheHealHook:"old context-mode cache-heal SessionStart hook entry",cacheHealFile:"old context-mode cache-heal script file",statusLine:"old context-mode statusLine (context-mode statusline): report only, never removed",mcpEntry:"old context-mode MCP entry mcpServers.context-mode",codexHook:"old context-mode Codex hook entry: context-mode hook codex or hooks/codex/*.mjs",codexToml:"old context-mode config.toml [mcp_servers.context-mode*] section",hookFile:"old context-mode hook file context-mode.json (runs context-mode hook)",vscodeMcp:"old context-mode MCP entry servers.context-mode in .vscode/mcp.json: report only, never removed",kiroHook:"old Kiro hook entry: command contains context-mode and an old script name or context-mode hook",kiroAgentFile:"old context-mode Kiro agent file agents/*.json with name context-mode",kiroSteering:"old context-mode Kiro steering doc .kiro/steering/KIRO.md: manual review, report only, never removed",piNpm:"old context-mode Pi package npm:context-mode",opencodePlugin:"old context-mode OpenCode plugin spec context-mode",zcodeHook:"old context-mode ZCode hook entry: command contains context-mode hook",dataDir:"old context-mode data dir <agent home>/context-mode/",dataDirShared:"old context-mode data dir ~/.gemini/context-mode/: delete only after a prompt (Antigravity shares it)",dataRoot:"old context-mode content under ~/.context-mode/",tmpFile:"old context-mode temp file context-mode-* under the OS temp dir: report only, no action needed"}),Kf=Object.freeze([he.statusLine,he.vscodeMcp,he.dataDirShared,he.tmpFile,he.kiroSteering]);var qf=Q+"_";var Xc=Object.freeze(["features","mcp"]),Kc="omit_tools_from",qc=Object.freeze(["deferred"]),Yf=Object.freeze({codex:{file:[".codex","config.toml"],key:["mcp_servers",Q],fields:{[Kc]:qc}},vscode:{file:[".vscode","mcp.json"],key:["servers",Q]},kiro:{file:[".kiro","settings","mcp.json"],key:["mcpServers",Q]},zcode:{file:[".zcode","cli","config.json"],key:["mcp","servers",Q],fields:{type:"stdio",enabled:!0,timeoutMs:Gc},also:[[Xc,!0]]}});var Jf=Object.freeze({NODE_ENV:Object.freeze(["development","production","test"])});import{dirname as k0,join as I0}from"node:path";var dn="mcp__plugin_context-mode_context-mode__",Yc=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse"],vr="mcp__",Fr="__",Jc={startup:"startup",resume:"resume",clear:"clear",compact:"compact"};function Vc(e,t){if(e.startsWith(t))return e.slice(t.length);if(!e.startsWith(vr))return e;let n=e.slice(vr.length),o=n.indexOf(Fr);return o<0?e:"mcp:"+n.slice(0,o)+":"+n.slice(o+Fr.length)}function zc(e){if(e===void 0)return"";if(typeof e=="string")return e;if(Array.isArray(e))return Gr(e).text;if(typeof e=="object"&&e!==null){let t=e;if(typeof t.stdout=="string"||typeof t.stderr=="string"){let n=typeof t.stdout=="string"?t.stdout:"",o=typeof t.stderr=="string"?t.stderr:"";return o===""?n:n===""?o:n+`
3
+ `+o}}return typeof e=="object"&&e!==null&&jr(e)?e.content:JSON.stringify(e)}function jr(e){let t=e;return t.mode==="content"&&typeof t.content=="string"}function Gr(e){let t=[],n=!1;for(let o of e){let r=typeof o=="object"&&o!==null?o:{};r.type==="text"&&typeof r.text=="string"?t.push(r.text):n=!0}return{text:t.join(`
4
+ `),keep:n}}function $c(e){let t=zc(e),o={isError:typeof e=="object"&&e!==null&&e.is_error===!0,bytes:Buffer.byteLength(t),text:t};if(typeof e=="object"&&e!==null&&!Array.isArray(e)&&jr(e)&&(o.shape=e),Array.isArray(e)&&(o.blocks=!0,Gr(e).keep&&(o.keep=!0)),typeof e=="object"&&e!==null){let r=e;typeof r.persistedOutputPath=="string"&&r.persistedOutputPath!==""&&typeof r.persistedOutputSize=="number"&&r.persistedOutputSize>o.bytes&&(o.persistedPath=r.persistedOutputPath)}return o}function te(e,t,n,o){if(typeof e!="object"||e===null||Array.isArray(e))throw new Error(t+": hook payload is not a JSON object");let r=e,s=Yc.find(c=>c===r.hook_event_name);if(s===void 0)throw new Error(t+": unknown hook event "+String(r.hook_event_name));let i={event:s,agent:t,sessionId:String(r.session_id??""),cwd:String(r.cwd??"")};if(typeof r.agent_id=="string"&&(i.agentId=r.agent_id,typeof r.agent_type=="string"&&(i.agentType=r.agent_type)),s==="SessionStart"&&typeof r.source=="string"&&o[r.source]!==void 0&&(i.source=o[r.source]),s==="UserPromptSubmit"&&typeof r.prompt=="string"&&(i.prompt=r.prompt),s==="PreToolUse"||s==="PostToolUse"){let c=String(r.tool_name??""),a=typeof r.tool_input=="object"&&r.tool_input!==null?r.tool_input:{},l={name:c,canonicalName:Vc(c,n),input:a};typeof r.tool_use_id=="string"&&r.tool_use_id!==""&&(l.callId=r.tool_use_id),i.tool=l}return s==="PostToolUse"&&(i.result=$c(r.tool_response)),i}function Qc(e,t){return e.tool?.canonicalName==="Bash"?{stdout:t,stderr:"",interrupted:!1}:e.result?.shape!==void 0?{...e.result.shape,content:t}:e.result?.blocks===!0?[{type:"text",text:t}]:t}function H(e,t,n){let o=r=>({stdout:JSON.stringify({hookSpecificOutput:{hookEventName:e.event,...r}}),exitCode:0});switch(t.kind){case"allow":return{stdout:"",exitCode:0};case"hint":return o({additionalContext:t.text});case"deny":return o({permissionDecision:"deny",permissionDecisionReason:t.rewritten===void 0?t.reason:t.rewritten+`
5
+ `+t.reason});case"replace":return n&&e.event==="PostToolUse"?o({updatedToolOutput:Qc(e,t.output)}):{stdout:"",exitCode:0}}}var Zc={PreToolUse:["tool_name"],PostToolUse:["tool_name","tool_response"]};function ea(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}function ta(e){if(typeof e!="object"||e===null||Array.isArray(e))return;let t=e;if(t.hook_event_name===void 0)throw new Error("claude-code: missing required field hook_event_name");for(let n of Zc[t.hook_event_name]??[])if(t[n]===void 0)throw new Error("claude-code: missing required field "+n)}function Br(e){ta(e);let t=te(e,"claude-code",dn,Jc);if(t.cwd===""&&(t.cwd=process.env.CLAUDE_PROJECT_DIR||process.cwd()),t.event==="PostToolUse"&&t.tool!==void 0&&t.tool.callId===void 0){let n=typeof t.tool.input.command=="string"?t.tool.input.command:JSON.stringify(t.tool.input);t.tool.callId="h"+ea(t.tool.name+"\0"+n+"\0"+String(t.turn??0))}return t}function Wr(e,t,n){return H(e,t,!0)}var fn="mcp__context_mode__",oa={startup:"startup",resume:"resume",clear:"clear",compact:"compact",fork:"resume"};function Xr(e){return te(e,"codex",fn,oa)}function Kr(e,t,n){return H(e,t,!1)}var it="mcp_context-mode_",qr={SessionStart:"SessionStart",BeforeAgent:"UserPromptSubmit",BeforeTool:"PreToolUse",AfterTool:"PostToolUse",PreCompress:"PreCompact"},Yr={startup:"startup",resume:"resume",clear:"clear"},sa=["SessionStart","UserPromptSubmit","PostToolUse"],ia=["UserPromptSubmit","PreToolUse"],st={stdout:"",exitCode:0};function y(e,t){return Object.hasOwn(e,t)?e[t]:void 0}var Jr={run_shell_command:"Bash",read_file:"Read",grep_search:"Grep",web_fetch:"WebFetch"};function ca(e,t){if(e.startsWith(it))return e.slice(it.length);if(Object.hasOwn(Jr,e))return Jr[e];if(typeof t!="object"||t===null)return e;let n=t,o=y(n,"server_name"),r=y(n,"tool_name");return typeof o!="string"||typeof r!="string"?e:"mcp:"+o+":"+r}function aa(e){let t=typeof e=="object"&&e!==null?e:void 0,n=t===void 0?void 0:y(t,"llmContent"),o=e===void 0?"":typeof e=="string"?e:typeof n=="string"?n:JSON.stringify(e),r=t===void 0?void 0:y(t,"error");return{isError:r!=null,bytes:Buffer.byteLength(o),text:o}}function Vr(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("gemini: hook payload is not a JSON object");let t=e,n=y(t,"hook_event_name"),o=typeof n=="string"&&Object.hasOwn(qr,n)?qr[n]:void 0;if(o===void 0)throw new Error("gemini: unknown hook event "+String(n));let r={event:o,agent:"gemini",sessionId:String(y(t,"session_id")??""),cwd:String(y(t,"cwd")??"")},s=y(t,"source");o==="SessionStart"&&typeof s=="string"&&Object.hasOwn(Yr,s)&&(r.source=Yr[s]);let i=y(t,"prompt");if(o==="UserPromptSubmit"&&typeof i=="string"&&(r.prompt=i),o==="PreToolUse"||o==="PostToolUse"){let c=String(y(t,"tool_name")??""),a=y(t,"tool_input");r.tool={name:c,canonicalName:ca(c,y(t,"mcp_context")),input:typeof a=="object"&&a!==null&&!Array.isArray(a)?a:{}}}return o==="PostToolUse"&&(r.result=aa(y(t,"tool_response"))),r}function zr(e,t,n){switch(t.kind){case"allow":return st;case"hint":return sa.includes(e.event)?{stdout:JSON.stringify({hookSpecificOutput:{additionalContext:t.text}}),exitCode:0}:st;case"deny":return ia.includes(e.event)?{stdout:JSON.stringify({decision:"deny",reason:t.rewritten===void 0?t.reason:t.rewritten+`
6
+ `+t.reason}),exitCode:0}:st;case"replace":return e.event!=="PostToolUse"?st:{stdout:JSON.stringify({decision:"deny",reason:t.output}),exitCode:0}}}var xn="mcp__context-mode__",ua={startup:"startup",resume:"resume",clear:"clear",compact:"compact"},$r={run_shell_command:"Bash",Shell:"Bash",read_file:"Read",grep_search:"Grep",web_fetch:"WebFetch"},da="PostToolUseFailure";function Qr(e){let t=typeof e=="object"&&e!==null&&!Array.isArray(e)&&e.hook_event_name===da,n=t?{...e,hook_event_name:"PostToolUse"}:e,o=te(n,"qwen",xn,ua);if(o.tool!==void 0&&Object.hasOwn($r,o.tool.name)&&(o.tool.canonicalName=$r[o.tool.name]),t){let r=e.error,s=typeof r=="string"?r:r===void 0?"":JSON.stringify(r);o.result={isError:!0,bytes:Buffer.byteLength(s),text:s}}return o}function Zr(e,t,n){return H(e,t,!1)}var at="context-mode-",xa={sessionStart:{event:"SessionStart",casing:"camel",failure:!1},userPromptSubmitted:{event:"UserPromptSubmit",casing:"camel",failure:!1},preToolUse:{event:"PreToolUse",casing:"camel",failure:!1},postToolUse:{event:"PostToolUse",casing:"camel",failure:!1},postToolUseFailure:{event:"PostToolUse",casing:"camel",failure:!0},SessionStart:{event:"SessionStart",casing:"snake",failure:!1},UserPromptSubmit:{event:"UserPromptSubmit",casing:"snake",failure:!1},PreToolUse:{event:"PreToolUse",casing:"snake",failure:!1},PostToolUse:{event:"PostToolUse",casing:"snake",failure:!1},PostToolUseFailure:{event:"PostToolUse",casing:"snake",failure:!0}},es={startup:"startup",resume:"resume",new:"startup"},pa={camel:{event:"hookEventName",session:"sessionId",tool:"toolName",args:"toolArgs",result:"toolResult"},snake:{event:"hook_event_name",session:"session_id",tool:"tool_name",args:"tool_input",result:"tool_result"}},ns="success";function lt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var ts={bash:"Bash"};function Ea(e){return e.startsWith(at)?e.slice(at.length):Object.hasOwn(ts,e)?ts[e]:e}function ma(e){if(lt(e))return e;if(typeof e!="string")return{};try{let t=JSON.parse(e);return lt(t)?t:{}}catch{return{}}}var _a={camel:{type:"resultType",text:"textResultForLlm"},snake:{type:"result_type",text:"text_result_for_llm"}};function ga(e,t,n){let o=_a[t],r=lt(e)?e:{},s=typeof r[o.text]=="string"?r[o.text]:"";return{isError:n||typeof r[o.type]=="string"&&r[o.type]!==ns,bytes:Buffer.byteLength(s),text:s}}var ha=[["toolResult","postToolUse"],["toolName","preToolUse"],["prompt","userPromptSubmitted"],["source","sessionStart"]];function ba(e){return typeof e.hookEventName=="string"?e.hookEventName:e.hook_event_name!==void 0?e.hook_event_name:ha.find(([t])=>Object.hasOwn(e,t))?.[1]}function os(e){if(!lt(e))throw new Error("copilot-cli: hook payload is not a JSON object");let t=ba(e),n=typeof t=="string"?xa[t]:void 0;if(n===void 0)throw new Error("copilot-cli: unknown hook event "+String(t));let o=pa[n.casing],r=n.event,s={event:r,agent:"copilot-cli",sessionId:String(e[o.session]??""),cwd:String(e.cwd??"")};if(r==="SessionStart"&&typeof e.source=="string"&&es[e.source]!==void 0&&(s.source=es[e.source]),r==="UserPromptSubmit"&&typeof e.prompt=="string"&&(s.prompt=e.prompt),r==="PreToolUse"||r==="PostToolUse"){let i=String(e[o.tool]??""),c={name:i,canonicalName:Ea(i),input:ma(e[o.args])};s.tool=c}return r==="PostToolUse"&&(s.result=ga(e[o.result],n.casing,n.failure)),s}var ct={stdout:"",exitCode:0};function rs(e,t,n){switch(t.kind){case"allow":return ct;case"hint":return e.event==="PostToolUse"?ct:{stdout:JSON.stringify({additionalContext:t.text}),exitCode:0};case"deny":return e.event!=="PreToolUse"?ct:{stdout:JSON.stringify({permissionDecision:"deny",permissionDecisionReason:t.rewritten===void 0?t.reason:t.rewritten+`
7
+ `+t.reason}),exitCode:0};case"replace":return e.event!=="PostToolUse"?ct:{stdout:JSON.stringify({modifiedResult:{resultType:ns,textResultForLlm:t.output}}),exitCode:0}}}var ut="mcp_context-mode_",Ta=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","PreCompact"],ss="mcp_",is="_",Ra="new",pn="run_in_terminal",cs={[pn]:"Bash"};function Oa(e){if(e.startsWith(ut))return e.slice(ut.length);if(Object.hasOwn(cs,e))return cs[e];if(!e.startsWith(ss))return e;let t=e.slice(ss.length),n=t.indexOf(is);return n<=0||n===t.length-1?e:"mcp:"+t.slice(0,n)+":"+t.slice(n+is.length)}function Aa(e){let t=e===void 0?"":typeof e=="string"?e:JSON.stringify(e);return{isError:typeof e=="object"&&e!==null&&e.is_error===!0,bytes:Buffer.byteLength(t),text:t}}function as(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("vscode: hook payload is not a JSON object");let t=e,n=Ta.find(r=>r===t.hook_event_name);if(n===void 0)throw new Error("vscode: unknown hook event "+String(t.hook_event_name));let o={event:n,agent:"vscode",sessionId:String(t.session_id??""),cwd:String(t.cwd??"")};if(n==="SessionStart"&&t.source===Ra&&(o.source="startup"),n==="UserPromptSubmit"&&typeof t.prompt=="string"&&(o.prompt=t.prompt),n==="PreToolUse"||n==="PostToolUse"){let r=String(t.tool_name??""),s=typeof t.tool_input=="object"&&t.tool_input!==null&&!Array.isArray(t.tool_input)?t.tool_input:{};o.tool={name:r,canonicalName:Oa(r),input:s}}return n==="PostToolUse"&&(o.result=Aa(t.tool_response)),o}function ls(e,t,n){return H(e,t,!1)}var dt="mcp_context-mode_",us={SessionStart:"SessionStart",agentSpawn:"SessionStart",UserPromptSubmit:"UserPromptSubmit",PromptSubmit:"UserPromptSubmit",userPromptSubmit:"UserPromptSubmit",PreToolUse:"PreToolUse",PostToolUse:"PostToolUse"},ya="USER_PROMPT",ds="mcp_",En="execute_bash",fs={[En]:"Bash"},xs="_",ps={startup:"startup",resume:"resume",clear:"clear",compact:"compact"};function Ca(e){if(e.startsWith(dt))return e.slice(dt.length);if(Object.hasOwn(fs,e))return fs[e];if(!e.startsWith(ds))return e;let t=e.slice(ds.length),n=t.indexOf(xs);return n<=0||n===t.length-1?e:"mcp:"+t.slice(0,n)+":"+t.slice(n+xs.length)}function ka(e){let t=e===void 0?"":typeof e=="string"?e:JSON.stringify(e);return{isError:!1,bytes:Buffer.byteLength(t),text:t}}function Es(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("kiro: hook payload is not a JSON object");let t=e,n=typeof t.hook_event_name=="string"?t.hook_event_name:"",o=Object.prototype.hasOwnProperty.call(us,n)?us[n]:void 0;if(o===void 0)throw new Error("kiro: unknown hook event "+String(t.hook_event_name));let r={event:o,agent:"kiro",sessionId:String(t.session_id??""),cwd:String(t.cwd??"")};if(o==="SessionStart"&&typeof t.source=="string"&&ps[t.source]!==void 0&&(r.source=ps[t.source]),o==="UserPromptSubmit"){let s=process.env[ya];s!==void 0&&(r.prompt=s)}if(o==="PreToolUse"||o==="PostToolUse"){let s=String(t.tool_name??""),i=typeof t.tool_input=="object"&&t.tool_input!==null&&!Array.isArray(t.tool_input)?t.tool_input:{};r.tool={name:s,canonicalName:Ca(s),input:i}}return o==="PostToolUse"&&(r.result=ka(t.tool_response)),r}function ms(e,t,n){if(e.event==="UserPromptSubmit")return{stdout:"",exitCode:0};switch(t.kind){case"allow":return{stdout:"",exitCode:0};case"hint":return{stdout:t.text,exitCode:0};case"deny":return{stdout:"",stderr:t.rewritten===void 0?t.reason:t.rewritten+`
8
+ `+t.reason,exitCode:2};case"replace":return{stdout:"",exitCode:0}}}var mn="mcp__context-mode__",Da={startup:"startup",resume:"resume",clear:"clear",compact:"compact"},wa={hook_event_name:"hookEventName",session_id:"sessionId"},La="PostToolUseFailure";function _s(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("zcode: hook payload is not a JSON object");let t={...e};for(let[r,s]of Object.entries(wa))t[r]===void 0&&(t[r]=t[s]);let n=t.hook_event_name===La;n&&(t.hook_event_name="PostToolUse");let o=te(t,"zcode",mn,Da);if(n){let r=typeof t.error=="string"?t.error:t.error===void 0?"":JSON.stringify(t.error);o.result={isError:!0,bytes:Buffer.byteLength(r),text:r}}return o}function gs(e,t,n){return H(e,t,!1)}var Ss="",hs={session_start:{event:"SessionStart",source:"startup"},session_compact:{event:"SessionStart",source:"compact"},input:{event:"UserPromptSubmit"},tool_call:{event:"PreToolUse"},tool_result:{event:"PostToolUse"}},bs={bash:"Bash",read:"Read"};function Ua(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:{}}function Ma(e){let t=e.content===void 0?"":typeof e.content=="string"?e.content:JSON.stringify(e.content),n={isError:e.isError===!0,bytes:Buffer.byteLength(t),text:t};return typeof e.exitCode=="number"&&(n.exitCode=e.exitCode),n}function Ts(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("pi: hook payload is not an object");let t=e,n=typeof t.type=="string"?t.type:"",o=Object.prototype.hasOwnProperty.call(hs,n)?hs[n]:void 0;if(o===void 0)throw new Error("pi: unknown hook event "+String(t.type));let r={event:o.event,agent:"pi",sessionId:String(t.sessionId??""),cwd:String(t.cwd??"")};if(o.source!==void 0&&(r.source=o.source),o.event==="UserPromptSubmit"&&typeof t.message=="string"&&(r.prompt=t.message),o.event==="PreToolUse"||o.event==="PostToolUse"){let s=String(t.toolName??"");r.tool={name:s,canonicalName:Object.hasOwn(bs,s)?bs[s]:s,input:Ua(t.input)},typeof t.toolCallId=="string"&&(r.tool.callId=t.toolCallId)}return o.event==="PostToolUse"&&(r.result=Ma(t)),typeof t.turn=="number"&&(r.turn=t.turn),r}function Ha(e,t){switch(t?.kind){case"hint":return{stdout:e.event==="SessionStart"?t.text:"",exitCode:0};case"deny":return e.event!=="PreToolUse"?{stdout:"",exitCode:0}:{stdout:t.rewritten===void 0?t.reason:t.rewritten+`
9
+ `+t.reason,exitCode:2};case"replace":return{stdout:e.event==="PostToolUse"?t.output:"",exitCode:0}}return{stdout:"",exitCode:0}}function Rs(e,t,n){let o=Ha(e,t);return t?.kind==="allow"?o:{stdout:o.stdout,exitCode:o.exitCode,role:Hr,content:o.stdout,timestamp:Date.now()}}function Os(e){return e.exitCode===2?{block:!0,reason:e.stdout}:void 0}var Cs="",As=Q+"_",Ns={context:"SessionStart",prompt:"UserPromptSubmit","execute.before":"PreToolUse","execute.after":"PostToolUse",compaction:"PreCompact","step-finish":"Usage"},_n="bash",ys={webfetch:"WebFetch",[_n]:"Bash"};function gn(e){return e.startsWith(As)?e.slice(As.length):Object.prototype.hasOwnProperty.call(ys,e)?ys[e]:e}function Fa(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:{}}function ja(e){let t=e.output===void 0?"":typeof e.output=="string"?e.output:JSON.stringify(e.output),n={isError:e.isError===!0,bytes:Buffer.byteLength(t),text:t};return typeof e.exitCode=="number"&&(n.exitCode=e.exitCode),n}function ks(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("opencode: hook payload is not an object");let t=e,n=typeof t.type=="string"?t.type:"",o=Object.prototype.hasOwnProperty.call(Ns,n)?Ns[n]:void 0;if(o===void 0)throw new Error("opencode: unknown hook event "+String(t.type));let r={event:o,agent:"opencode",sessionId:String(t.sessionID??""),cwd:String(t.directory??"")};if(o==="UserPromptSubmit"&&typeof t.message=="string"&&(r.prompt=t.message),o==="PreToolUse"||o==="PostToolUse"){let s=String(t.tool??"");r.tool={name:s,canonicalName:gn(s),input:Fa(t.args)},typeof t.callID=="string"&&(r.tool.callId=t.callID)}return o==="PostToolUse"&&(r.result=ja(t)),typeof t.turn=="number"&&(r.turn=t.turn),r}function Is(e,t,n){switch(t.kind){case"allow":return{stdout:"",exitCode:0};case"hint":return{stdout:e.event==="SessionStart"?t.text:"",exitCode:0};case"deny":return e.event!=="PreToolUse"?{stdout:"",exitCode:0}:{stdout:t.rewritten===void 0?t.reason:t.rewritten+`
10
+ `+t.reason,exitCode:2};case"replace":return{stdout:"",exitCode:0}}}var Ae={SessionStart:"SessionStart",UserPromptSubmit:"UserPromptSubmit",PreToolUse:"PreToolUse",PostToolUse:"PostToolUse"},Ds={shell:["Bash"],read:["Read"],grep:["Grep"],webfetch:["WebFetch"],edit:["Write","Edit","NotebookEdit"]},Ba=Object.freeze([{id:"claude-code",installMode:"marketplace",projectSource:"env:CLAUDE_PROJECT_DIR",toolNamePrefix:dn,nativeTools:Ds,execReadOnlyHint:!1,eventMap:Ae,compactDelivery:"sessionstart",compactSummary:"none",hookTimeoutMs:M,denyChannel:"deny-reason",hookChannel:{kind:"package",path:"hooks/claude-code.json"},skillChannel:{kind:"package",path:"claude-code/skills"},decode:Br,encode:Wr},{id:"codex",installMode:"config-mcp",projectSource:"arg:--agent+cwd",toolNamePrefix:fn,nativeTools:{shell:["Bash"],edit:["apply_patch"]},execReadOnlyHint:!0,eventMap:Ae,compactDelivery:"sessionstart",compactSummary:"none",hookTimeoutMs:M,denyChannel:"deny-reason",hookChannel:{kind:"home-file",path:".codex/hooks.json"},skillChannel:{kind:"home-dir",path:".codex/skills"},decode:Xr,encode:Kr},{id:"gemini",installMode:"extension",projectSource:"spawn-cwd",toolNamePrefix:it,nativeTools:{shell:["run_shell_command"],read:["read_file"],grep:["grep_search"],webfetch:["web_fetch"]},execReadOnlyHint:!1,eventMap:{UserPromptSubmit:"BeforeAgent",PreToolUse:"BeforeTool",PostToolUse:"AfterTool",PreCompact:"PreCompress"},compactDelivery:"pending-flag",compactSummary:"none",hookTimeoutMs:M,denyChannel:"deny-reason",hookChannel:{kind:"package",path:"hooks/hooks.json"},skillChannel:{kind:"package",path:"skills"},decode:Vr,encode:zr},{id:"qwen",installMode:"extension",projectSource:"spawn-cwd",toolNamePrefix:xn,nativeTools:{shell:["run_shell_command","Shell"],read:["read_file"],grep:["grep_search"],webfetch:["web_fetch"]},execReadOnlyHint:!1,eventMap:Ae,compactDelivery:"sessionstart",compactSummary:"none",hookTimeoutMs:M,denyChannel:"deny-reason",hookChannel:{kind:"package",path:"hooks/qwen.json"},skillChannel:{kind:"home-dir",path:".qwen/skills"},decode:Qr,encode:Zr},{id:"copilot-cli",installMode:"plugin",projectSource:"arg:--agent+cwd",toolNamePrefix:at,nativeTools:{shell:["bash"]},execReadOnlyHint:!1,eventMap:{SessionStart:"sessionStart",UserPromptSubmit:"userPromptSubmitted",PreToolUse:"preToolUse",PostToolUse:"postToolUse"},compactDelivery:"pending-flag",compactSummary:"none",hookTimeoutMs:M,denyChannel:"deny-reason",hookChannel:{kind:"home-file",path:".copilot/hooks/context-mode.json"},skillChannel:{kind:"home-dir",path:".copilot/skills"},decode:os,encode:rs},{id:"vscode",installMode:"mcp-entry",projectSource:"arg:workspaceFolder",toolNamePrefix:ut,nativeTools:{shell:[pn]},execReadOnlyHint:!1,eventMap:{...Ae,PreCompact:"PreCompact"},compactDelivery:"pending-flag",compactSummary:"none",hookTimeoutMs:M,denyChannel:"deny-reason",hookChannel:{kind:"home-file",path:".copilot/hooks/context-mode-vscode.json"},skillChannel:{kind:"home-dir",path:".copilot/skills"},decode:as,encode:ls},{id:"kiro",installMode:"mcp-entry",projectSource:"arg:--agent+cwd",toolNamePrefix:dt,nativeTools:{shell:[En]},execReadOnlyHint:!1,eventMap:{SessionStart:"SessionStart",UserPromptSubmit:"UserPromptSubmit",PreToolUse:"PreToolUse",PostToolUse:"PostToolUse"},compactDelivery:"none",compactSummary:"none",hookTimeoutMs:M,denyChannel:"hint-only",hookChannel:{kind:"home-file",path:".kiro/hooks/context-mode.json"},skillChannel:{kind:"home-dir",path:".kiro/skills"},decode:Es,encode:ms},{id:"zcode",installMode:"hooks+mcp",projectSource:"spawn-cwd",toolNamePrefix:mn,nativeTools:Ds,execReadOnlyHint:!1,eventMap:Ae,compactDelivery:"sessionstart",compactSummary:"none",hookTimeoutMs:M,denyChannel:"deny-reason",hookChannel:{kind:"home-file",path:".zcode/cli/config.json"},skillChannel:{kind:"home-dir",path:".zcode/skills"},decode:_s,encode:gs},{id:"pi",installMode:"in-process",projectSource:"pi:ctx.cwd",toolNamePrefix:Ss,nativeTools:{shell:["bash"],read:["read"]},execReadOnlyHint:!1,eventMap:{SessionStart:"session_start",UserPromptSubmit:"input",PreToolUse:"tool_call",PostToolUse:"tool_result"},compactDelivery:"pi-flag",compactSummary:"none",hookTimeoutMs:Xt,denyChannel:"deny-reason",hookChannel:{kind:"in-process",path:"pi/index.js"},skillChannel:{kind:"package",path:"pi/skills"},decode:Ts,encode:Rs,checkPermission:Os},{id:"opencode",installMode:"in-process",projectSource:"spawn-cwd",toolNamePrefix:Cs,nativeTools:{shell:[_n]},execReadOnlyHint:!1,eventMap:{SessionStart:"context",UserPromptSubmit:"prompt",PreToolUse:"execute.before",PostToolUse:"execute.after",PreCompact:"compaction",Usage:"step-finish"},compactDelivery:"opencode-cache",compactSummary:"none",hookTimeoutMs:Xt,denyChannel:"deny-reason",hookChannel:{kind:"in-process",path:"opencode/plugin.js"},skillChannel:{kind:"home-dir",path:".config/opencode/skills"},decode:ks,encode:Is,toCanonicalTool:gn}]),Wa=new Map(Ba.map(e=>[e.id,e])),Xa=new Set(["claude-code","gemini","copilot-cli","pi"]);function Ne(e){return Xa.has(e.id)}var Ka=new Set(["claude-code","copilot-cli","pi"]);function ws(e){return Ka.has(e.id)&&Ne(e)}var qa=new Set(["claude-code","codex","gemini","qwen","copilot-cli","vscode","zcode"]);function ft(e){return qa.has(e.id)}function ye(e){return Wa.get(e)}import{resolve as Xn}from"node:path";var Ya=["&&","||",";;","|&",";","|","&","(",")"],Ja=["&>>","&>"],Va=[">>",">|",">&",">","<<<","<<-","<<","<&","<>","<"],za="&",$a="<<",Ls="<<-",Qa=";",Ps=`\r
11
+ `,Us=`\\
12
+ `,Ms=`\\\r
13
+ `,Za="$(",Fs="${",js="$'",Ce="((",Hs="))",ae="[[",xt="]]",hn="<(",Gs=">(",D=2,Bs=`
14
+ \r;&|()<>`,el=`
15
+ \r`,tl='$`"\\\n',nl="case",ol="esac";function le(e,t){e.end==="complete"&&(e.end=t)}function bn(e){return e!==""&&e>="0"&&e<="9"}function vs(e){return e!==""&&(e>="a"&&e<="z"||e>="A"&&e<="Z")}function Ws(e){return e===""||Bs.includes(e)}function Sn(e){return e!==""&&el.includes(e)}function v(e,t,n,o,r){e!==null&&e.push({kind:t,text:n,start:o,end:r})}function pt(e,t){let n=e.s.indexOf("'",t+1);return n<0?(le(e,"unterminated-quote"),e.n):n+1}function Xs(e,t){let n=t+js.length;for(;n<e.n;){let o=e.s.charAt(n);if(o==="\\"){n+=D;continue}if(o==="'")return n+1;n++}return le(e,"unterminated-quote"),e.n}function Tn(e,t,n){let o=t+1;for(;o<e.n;){let r=e.s.charAt(o),s=e.s.charAt(o+1);if(r==="\\"){o+=D;continue}if(r==='"')return o+1;if(r==="$"&&s==="("){o=ke(e,o,n);continue}if(r==="$"&&s==="{"){o=Rn(e,o,n);continue}if(r==="`"){o=ue(e,o);continue}o++}return le(e,"unterminated-quote"),e.n}function ue(e,t){let n=t+1;for(;n<e.n;){let o=e.s.charAt(n);if(o==="\\"){n+=D;continue}if(o==="`")return n+1;n++}return e.n}function Rn(e,t,n){let o=t+Fs.length,r=0;for(;o<e.n;){let s=e.s.charAt(o),i=e.s.charAt(o+1);if(s==="\\"){o+=D;continue}if(s==="'"){o=pt(e,o);continue}if(s==='"'){o=Tn(e,o,n);continue}if(s==="$"&&i==="("){o=ke(e,o,n);continue}if(s==="`"){o=ue(e,o);continue}if(s==="{"&&r++,s==="}"){if(r===0)return o+1;r--}o++}return e.n}function On(e,t){let n=0,o=t+Ce.length;for(;o<e.length;){let r=e.charAt(o);if(r==="("&&n++,r===")"){if(n===0)return e.startsWith(Hs,o)?o+Hs.length:-1;n--}o++}return-1}function ke(e,t,n){let o=t+Za.length-1;if(e.s.startsWith(Ce,o)){let r=On(e.s,o);if(r>0)return r}return Et(e,o+1,!0,n+1,null,null)}function rl(e,t,n){let o=t+ae.length,r=0;for(;o<e.n;){let s=e.s.charAt(o),i=e.s.charAt(o+1);if(s==="\\"){o+=D;continue}if(s==="'"){o=pt(e,o);continue}if(s==='"'){o=Tn(e,o,n);continue}if(s==="$"&&i==="("){o=ke(e,o,n);continue}if(s==="$"&&i==="{"){o=Rn(e,o,n);continue}if(s==="`"){o=ue(e,o);continue}let c=Sn(e.s.charAt(o-1));if(c&&e.s.startsWith(xt,o)&&Ws(e.s.charAt(o+xt.length))){if(r===0)return o+xt.length;r--,o+=xt.length;continue}if(c&&e.s.startsWith(ae,o)&&Sn(e.s.charAt(o+ae.length))){r++,o+=ae.length;continue}o++}return-1}function sl(e,t){let n=t;for(;bn(e.charAt(n));)n++;if(n===t){for(let o of Ja)if(e.startsWith(o,t))return{end:t+o.length,op:o}}for(let o of Va){if(!e.startsWith(o,n))continue;let r=n+o.length;if(o.endsWith(za))if(e.charAt(r)==="-")r++;else for(;bn(e.charAt(r));)r++;return{end:r,op:o}}return null}function il(e,t,n){let o=t;for(;o<e.n;){let r=e.s.charAt(o),s=e.s.charAt(o+1);if(Bs.includes(r))break;if(r==="\\"){o+=D;continue}if(r==="'"){o=pt(e,o);continue}if(r==='"'){o=Tn(e,o,n);continue}if(r==="$"&&s==="'"){o=Xs(e,o);continue}if(r==="$"&&s==="("){o=ke(e,o,n);continue}if(r==="$"&&s==="{"){o=Rn(e,o,n);continue}if(r==="`"){o=ue(e,o);continue}o++}return Math.min(o,e.n)}function cl(e,t,n,o,r){let s=t;for(let i of n){let c=s,a=!1;for(;s<e.n;){let l=e.s.indexOf(`
16
+ `,s),u=l<0?e.n:l,f=e.s.slice(s,u);if(f.endsWith("\r")&&(f=f.slice(0,-1)),s=l<0?e.n:l+1,(i.strip?f.trim():f)===i.tag){a=!0;break}}if(o!==null&&r!==null&&r.push(o.length),v(o,"unhandled",e.s.slice(c,s),c,s),!a)return le(e,"unterminated-heredoc"),e.n}return n.length=0,s}function Et(e,t,n,o,r,s){if(o>ee)return le(e,"too-deep"),e.n;let i=e.s,c=t,a=0,l=0,u=null,f=[];for(;c<e.n;){let d=i.charAt(c),x=i.charAt(c+1);if(d===" "||d===" "){c++;continue}if(i.startsWith(Us,c)){c+=Us.length;continue}if(i.startsWith(Ms,c)){c+=Ms.length;continue}if(d===`
17
+ `||d==="\r"){let h=c;c+=i.startsWith(Ps,c)?Ps.length:1,v(r,"op",Qa,h,c),u=null,f.length>0&&(c=cl(e,c,f,r,s));continue}if(d==="#"){for(;c<e.n&&i.charAt(c)!==`
18
+ `&&i.charAt(c)!=="\r";)c++;continue}if(i.startsWith(hn,c)||i.startsWith(Gs,c)){let h=Et(e,c+hn.length,!0,o+1,null,null);v(r,"unhandled",i.slice(c,h),c,h),c=h,u=null;continue}let E=sl(i,c);if(E!==null){v(r,"io",i.slice(c,E.end),c,E.end),u=E.op===$a||E.op===Ls?E.op===Ls:null,c=E.end;continue}if(i.startsWith(ae,c)&&Sn(i.charAt(c+ae.length))){let h=rl(e,c,o);if(h>0){v(r,"unhandled",i.slice(c,h),c,h),c=h,u=null;continue}}if(i.startsWith(Ce,c)){let h=On(i,c);if(h>0){v(r,"unhandled",i.slice(c,h),c,h),c=h,u=null;continue}}let m=Ya.find(h=>i.startsWith(h,c));if(m!==void 0){if(n&&m==="("&&a++,n&&m===")"){if(a>0)a--;else if(l===0)return c+1}v(r,"op",m,c,c+m.length),c+=m.length,u=null;continue}if(d==="$"&&x==="("||d==="`"){let h=d==="`"?ue(e,c):ke(e,c,o);if(Ws(i.charAt(h))){v(r,"unhandled",i.slice(c,h),c,h),c=h,u=null;continue}}let _=c;c=il(e,c,o);let S=i.slice(_,c);v(r,"word",S,_,c),u!==null&&(f.push({tag:de(S),strip:u}),u=null),n&&S===nl&&l++,n&&S===ol&&l>0&&l--}return f.length>0&&le(e,"unterminated-heredoc"),e.n}function Ks(e){let t={s:e,n:e.length,end:"complete"},n=[],o=[];return Et(t,0,!1,0,n,o),{tokens:n,heredocBodies:o,end:t.end}}function de(e){let t="",n=0,o=e.length;for(;n<o;){let r=e.charAt(n);if(r==="\\"){t+=e.charAt(n+1),n+=D;continue}if(r==="'"){let s=e.indexOf("'",n+1),i=s<0?o:s;t+=e.slice(n+1,i),n=i+1;continue}if(r==="$"&&e.charAt(n+1)==="'"){let s=n+js.length;for(;s<o&&e.charAt(s)!=="'";){if(e.charAt(s)==="\\"){t+=e.charAt(s+1),s+=D;continue}t+=e.charAt(s),s++}n=s+1;continue}if(r==='"'){let s=n+1;for(;s<o&&e.charAt(s)!=='"';){let i=e.charAt(s+1);if(e.charAt(s)==="\\"&&i!==""&&tl.includes(i)){t+=i,s+=D;continue}t+=e.charAt(s),s++}n=s+1;continue}t+=r,n++}return t}function mt(e){let t={s:e,n:e.length,end:"complete"},n=[],o=!1,r=0;for(;r<t.n;){let s=e.charAt(r),i=e.charAt(r+1);if(s==="\\"){r+=D;continue}if(!o&&s==="'"){r=pt(t,r);continue}if(!o&&s==="$"&&i==="'"){r=Xs(t,r);continue}if(s==='"'){o=!o,r++;continue}if(s==="$"&&i==="{"){r+=Fs.length;continue}let c=e.startsWith(hn,r);if(s==="$"&&i==="("||!o&&(c||e.startsWith(Gs,r))){let a=r+1;if(s==="$"&&e.startsWith(Ce,a)&&On(e,a)>0){r=a+Ce.length;continue}let l=Et(t,a+1,!0,1,null,null),u=l>a+1&&e.charAt(l-1)===")"?l-1:l;n.push({wrapper:s==="$"?"$()":c?"<()":">()",body:e.slice(a+1,u)}),r=l;continue}if(s==="`"){let a=ue(t,r),l=a>r+1&&e.charAt(a-1)==="`"?a-1:a;n.push({wrapper:"`",body:e.slice(r+1,l)}),r=a;continue}r++}return n}function _t(e){let t=e.charAt(0);if(!(vs(t)||t==="_"))return!1;for(let n=1;n<e.length;n++){let o=e.charAt(n);if(o==="="||o==="+"&&e.charAt(n+1)==="=")return!0;if(!(vs(o)||bn(o)||o==="_"))return!1}return!1}var Vs=[";","&","&&","||"],zs=["|","|&"],Ie="(",De=")",$s=";;",yn=["(",")"],al="!",b=Object.freeze({group:"{",groupEnd:"}",if:"if",then:"then",elif:"elif",else:"else",fi:"fi",while:"while",until:"until",for:"for",in:"in",do:"do",done:"done",case:"case",esac:"esac",function:"function",coproc:"coproc",select:"select"}),Qs=[],ll="[[",ul="((",Zs=[">",">>",">|","&>","&>>",">&"],dl=[...Zs,"<","<>","<<<","<<","<<-"],fl=["","1"],ei=["-","/dev/stdout","/dev/stderr"],ht="-",we="--",Le="=",xl="/",pl=Object.freeze({curl:{short:"o",long:"--output"},wget:{short:"O",long:"--output-document"}}),gt=Object.freeze({head:"head",wc:"wc",grep:"grep",jq:"jq"}),An="-c",Nn="--bytes",El="c",ml="--count",ne=()=>({cmds:[],simple:null}),T=(e,t=0)=>e.toks[e.i+t],W=(e,t)=>e!==void 0&&e.kind==="op"&&e.text===t,C=(e,t)=>e!==void 0&&e.kind==="word"&&e.text===t,Cn=e=>e!==""&&e>="0"&&e<="9",_l=e=>Cn(e)||e>="a"&&e<="z"||e>="A"&&e<="Z"||e==="_";function kn(e){let t=e.lastIndexOf(xl);return t>=0&&t<e.length-1?e.slice(t+1):e}function In(e,t){let n=pl[e.toLowerCase()];if(n===void 0)return!1;for(let o=0;o<t.length;o++){let r=t[o];if(r===we)break;let s;if(r===n.long)s=t[o+1];else if(r.startsWith(n.long+Le))s=r.slice(n.long.length+Le.length);else if(r.startsWith(ht)&&!r.startsWith(we)){let i=r.indexOf(n.short,ht.length);if(i<0)continue;s=i+n.short.length<r.length?r.slice(i+n.short.length):t[o+1]}else continue;if(s!==void 0&&!ei.includes(s))return!0}return!1}function gl(e){if(e==="")return!1;for(let t of e)if(!Cn(t))return!1;return!0}function hl(e){for(let t=0;t<e.length;t++){let n=e[t],o;if(n===An||n===Nn?o=e[t+1]:n.startsWith(Nn+Le)?o=n.slice(Nn.length+Le.length):n.startsWith(An)&&!n.startsWith(we)&&(o=n.slice(An.length)),o!==void 0)return gl(o)&&Number(o)<=be}return!1}function bl(e){for(let t of e){if(t===we)return!1;if(t===ml||t.startsWith(ht)&&!t.startsWith(we)&&t.includes(El))return!0}return!1}function qs(e){if(!e.startsWith(I.fieldSep))return!1;for(let t of e.slice(I.fieldSep.length).split(I.fieldSep)){if(t==="")return!1;for(let n of t)if(!_l(n))return!1}return!0}function Sl(e){let t=e.trim();if(t===I.identity||t===I.length)return!0;let n=t.indexOf(I.pipeLength.charAt(0));if(n<0)return qs(t);let o=t.slice(0,n).trim(),r=I.pipeLength.slice(1).trim();return(o===I.identity||qs(o))&&t.slice(n+1).trim()===r}function Tl(e){let t=e.argv0.toLowerCase();if(t===gt.wc)return!0;if(t===gt.head)return hl(e.args);if(t===gt.grep)return bl(e.args);if(t===gt.jq){let n=e.args.filter(o=>!o.startsWith(ht));return n.length===1&&Sl(n[0])}return!1}function Dn(e){return mt(e).length===0?[]:[{argv0:"",args:[],redirectsToFile:!1,endsInBoundedSink:!1,raw:e}]}function ti(e,t,n){return n<=t?[]:Dn(e.src.slice(e.toks[t].start,e.toks[n-1].end))}function ni(e,t){for(let n of e)n.insideConstruct===void 0&&(n.insideConstruct=t)}function Rl(e){let t=0;for(;Cn(e.charAt(t));)t++;return{fd:e.slice(0,t),op:e.slice(t)}}function oi(e){let t=Rl(e.toks[e.i].text);if(e.i++,!dl.includes(t.op))return!1;let n=T(e);return n===void 0||n.kind==="op"||n.kind==="io"?!1:(e.i++,Zs.includes(t.op)&&fl.includes(t.fd)&&!ei.includes(de(n.text)))}function ri(e){let t=!1;for(;T(e)?.kind==="io";)t=oi(e)||t;return t}function si(e){for(;T(e)?.kind==="op"&&Vs.includes(T(e)?.text??"");)e.i++}function fe(e,t){if(e.depth++,e.depth>ee)return e.err="nesting-too-deep",ne();let n=t();if(e.depth--,ri(e))for(let o of n)o.redirectsToFile=!0;return{cmds:n,simple:null}}function ii(e){if(si(e),!C(T(e),b.do))return[];e.i++;let t=F(e,[b.done]);return C(T(e),b.done)&&e.i++,t}function Ol(e){e.i++;let t=F(e,[b.then]);for(;e.err===null;){let n=T(e);if(C(n,b.then)||C(n,b.else)){e.i++,t.push(...F(e,[b.elif,b.else,b.fi]));continue}if(C(n,b.elif)){e.i++,t.push(...F(e,[b.then]));continue}C(n,b.fi)&&e.i++;break}return t}function Al(e){e.i++;let t=F(e,[b.do]);return t.push(...ii(e)),t}function Nl(e){e.i++;let t=[],n=T(e);if(n?.kind==="unhandled")e.i++;else if(n?.kind==="word"&&e.i++,C(T(e),b.in)){e.i++;let o=e.i;for(;(T(e)?.kind==="word"||T(e)?.kind==="unhandled")&&!C(T(e),b.do);)e.i++;t.push(...ti(e,o,e.i))}return t.push(...ii(e)),t}function yl(e){e.i++;let t=[],n=T(e);for(n!==void 0&&n.kind!=="op"&&n.kind!=="io"&&(e.i++,t.push(...ti(e,e.i-1,e.i))),C(T(e),b.in)&&e.i++;e.i<e.toks.length&&e.err===null;){let o=e.toks[e.i];if(e.bodies.has(e.i)||o.kind==="op"&&(Vs.includes(o.text)||o.text===$s)){e.i++;continue}if(C(o,b.esac)){e.i++;break}for(W(o,Ie)&&e.i++;e.i<e.toks.length&&!W(T(e),De);){let s=e.toks[e.i];if(s.kind==="op"&&!zs.includes(s.text))break;e.i++}if(!W(T(e),De))break;e.i++;let r=F(e,[b.esac]);ni(r,b.case),t.push(...r)}return t}function Ys(e,t){si(e);let n=ci(e);return ni(n.cmds,t),{cmds:n.cmds,simple:null}}function Js(e,t){return yn.every((n,o)=>W(e.toks[t+o],n))}function Cl(e){let t=e.i,n=[],o=!1;for(;e.i<e.toks.length;){let l=e.toks[e.i];if(l.kind==="op")break;if(l.kind==="io"){o=oi(e)||o;continue}if(n.length===0&&l.kind==="word"&&_t(l.text)){e.i++;let u=T(e);if(l.text.endsWith(Le)&&u!==void 0&&W(u,Ie)&&u.start===l.end){let f=0;for(;e.i<e.toks.length;){let d=e.toks[e.i];if(e.i++,W(d,Ie)&&f++,W(d,De)&&--f===0)break}}continue}n.push(l),e.i++}if(e.i===t)return ne();let r=e.src.slice(e.toks[t].start,e.toks[e.i-1].end);if(n.length===0)return{cmds:Dn(r),simple:null};let s=l=>l.kind==="word"?de(l.text):l.text,i=kn(s(n[0])),c=n.slice(1).map(s),a={argv0:i,args:c,redirectsToFile:o||In(i,c),endsInBoundedSink:!1,raw:r};return{cmds:[a],simple:a}}function ci(e){let t=T(e);if(t===void 0)return ne();if(t.kind==="op")return t.text!==Ie?ne():fe(e,()=>{e.i++;let n=F(e,Qs);return W(T(e),De)&&e.i++,n});if(t.kind==="unhandled"&&(t.text.startsWith(ll)||t.text.startsWith(ul)))return e.i++,ri(e),{cmds:Dn(t.text),simple:null};if(t.kind==="word")switch(t.text){case b.group:return fe(e,()=>{e.i++;let n=F(e,[b.groupEnd]);return C(T(e),b.groupEnd)&&e.i++,n});case b.if:return fe(e,()=>Ol(e));case b.while:case b.until:return fe(e,()=>Al(e));case b.for:return fe(e,()=>Nl(e));case b.case:return fe(e,()=>yl(e));case b.coproc:return e.err="coproc",ne();case b.select:return e.err="select",ne();case b.function:{e.i++;let n=T(e),o="";return n?.kind==="word"&&(o=de(n.text),e.i++),Js(e,e.i)&&(e.i+=yn.length),Ys(e,o)}default:if(Js(e,e.i+1))return e.i+=yn.length+1,Ys(e,de(t.text))}return Cl(e)}function kl(e){C(T(e),al)&&e.i++;let t=[],n=ne();for(;e.err===null;){n=ci(e),t.push(...n.cmds);let o=T(e);if(o!==void 0&&o.kind==="op"&&zs.includes(o.text)){e.i++;continue}break}if(n.simple!==null&&Tl(n.simple))for(let o of t)o.endsInBoundedSink=!0;return t}function F(e,t){let n=[];for(;e.i<e.toks.length&&e.err===null;){let o=e.toks[e.i];if(e.bodies.has(e.i)){e.i++;continue}if(o.kind==="op"){if(o.text===De||o.text===$s)return n;if(o.text!==Ie){e.i++;continue}}if(o.kind==="word"&&t.includes(o.text))return n;let r=e.i;n.push(...kl(e)),e.i===r&&e.err===null&&e.i++}return n}function Pe(e){let t=Ks(e);if(t.end==="unterminated-quote")return{ok:!1,construct:"unterminated-quote"};if(t.end==="unterminated-heredoc")return{ok:!1,construct:"unterminated-heredoc"};if(t.end==="too-deep")return{ok:!1,construct:"nesting-too-deep"};let n={toks:t.tokens,src:e,bodies:new Set(t.heredocBodies),i:0,depth:0,err:null},o=[];for(;n.i<n.toks.length&&n.err===null;)o.push(...F(n,Qs)),n.i<n.toks.length&&n.i++;return n.err!==null?{ok:!1,construct:n.err}:{ok:!0,commands:o}}import{join as bt}from"node:path";import{join as Pl}from"node:path";var Il=Object.freeze({NODE_TOO_OLD:"Node <v> is below 24.15.0. Fix: install Node 24.15.0 or later.",NO_SQLITE:"node:sqlite failed to load. Fix: run ctx_doctor.",DB_GONE:"context.db path vanished. Fix: run ctx_doctor.",NO_PROJECT:"Project source <kind> is missing. Fix: run ctx_doctor.",UNKNOWN_FIELD:'Unknown field "<f>". Fix: use "queries".',TIMEOUT:"Timed out after <ms> ms. Fix: pass background: true.",NO_RUNTIME:"No <lang> runtime on PATH. Fix: install it or pick another language.",FETCH_FAILED:"Fetch failed: <code>. Fix: check the URL or proxy.",SSRF:"Blocked private address <host>. Fix: use a public URL.",OUTSIDE_ROOT:"Path <p> is outside the project. Fix: use a path inside <root>.",INVALID_ARGS:"Invalid argument <field>. Fix: <action>.",ONE_OF_INPUT:"Pass exactly one of <names>. Fix: drop the extra field.",SPAWN_FAILED:"Failed to start the process: <detail>. Fix: check the command and PATH.",DB_CORRUPT:"context.db failed integrity_check. Fix: run ctx_doctor.",SCHEMA_STALE:"context.db schema is version <found>, expected <want>. Fix: run ctx_doctor.",NO_GIT_DIR:"No git repository at <path>. Fix: run context-mode inside a git repository.",NO_HOME:"Env var <name> is not set. Fix: set <name> to your home directory.",PLUGIN_ROOT_MISSING:"Plugin root for <agent> not found at <path>. Fix: run ctx_upgrade.",BUNDLE_HASH_MISMATCH:"Fetched bundle hash does not match SHA256SUMS. Fix: run ctx_upgrade again.",CONFIG_PARSE_FAILED:"<agent> config at <path> did not parse as <format>. Fix: fix the syntax error and re-run ctx_upgrade."});function Dl(e,t){let n=Il[e],o="",r=0;for(;r<n.length;){if(n[r]!=="<"){o+=n[r],r+=1;continue}let s=r+1;for(;s<n.length&&n[s]!=="<"&&n[s]!==">";)s+=1;if(s>=n.length){o+=n.slice(r);break}if(n[s]==="<"){o+="<",r+=1;continue}let i=n.slice(r+1,s),c=t[i];if(c===void 0)throw new Error("formatError: missing var "+i+" for "+e);o+=String(c),r=s+1}return o}var R=class extends Error{code;vars;constructor(t,n){super(Dl(t,n??{})),this.code=t,this.vars=n??{}}toLine(){return this.message}};var{mkdirSync:wl,realpathSync:Ll}=process.getBuiltinModule("node:fs");function xe(e){let t=e.HOME;if(t!==void 0&&t!=="")return t;let n=e.USERPROFILE;return n!==void 0&&n!==""?n:null}function Ul(e){let t=xe(e);if(t!==null)return t;throw new R("NO_HOME",{name:process.platform==="win32"?"USERPROFILE":"HOME"})}function ai(e){let t=Pl(Ul(e),Go.slice(1));return wl(t,{recursive:!0}),Ll.native(t)}var{readFileSync:fi}=process.getBuiltinModule("node:fs");function pe(e){return e.agentId!==void 0&&e.agentId!==""}function Pn(e,t){if(t===null)return"C";let n=ye(e.agent),o=new Set(t);for(let r of Ke)if(o.has(n.toolNamePrefix+r))return"A";for(let r of n.nativeTools.shell)if(o.has(r))return"B";return"C"}function Un(e,t){if(!pe(e))return null;let n=ye(e.agent);if(t.manifestTools!==void 0)return di(t.manifestTools.map(c=>wn(n,c)));let o=e.agentType??"",r=Ml(o,t);if(r===null)return null;let s=(r.tools??Gl(n)).map(c=>wn(n,c)),i=r.disallowed.map(c=>wn(n,c));return di(s.filter(c=>!i.some(a=>Wl(a,c))))}function Ml(e,t){if(!Hl(e))return null;let n=vl(t.env);if(e.indexOf(ce)>=0){if(n!==null){let s=Fl(n,e);if(s!==null)return s}}else{let s=Ln(bt(t.projectDir,Ve,ze,e+$e));if(s!==null)return s;if(n!==null){let i=Ln(bt(n,Ve,ze,e+$e));if(i!==null)return i}}let r=t.cliAgents;if(r!==void 0&&Object.prototype.hasOwnProperty.call(r,e)){let s=r[e];return{tools:Array.isArray(s.tools)?s.tools:null,disallowed:Array.isArray(s.disallowedTools)?s.disallowedTools:[]}}return null}function Hl(e){if(e===""||e==="."||e===".."||e.indexOf("/")>=0||e.indexOf("\\")>=0)return!1;for(let t of e.split(ce))if(t===""||t==="."||t==="..")return!1;return!0}function vl(e){return xe(e)}function Fl(e,t){let n=t.indexOf(ce),o=t.slice(0,n),r=t.slice(n+ce.length);if(r.indexOf(ce)>=0)return null;let s;try{s=JSON.parse(fi(bt(e,Ve,Wo,Xo),"utf8"))}catch{return null}let i=s?.plugins;if(i===null||typeof i!="object")return null;for(let c of Object.keys(i)){let a=c.indexOf(Ko);if((a<0?c:c.slice(0,a))!==o)continue;let l=i[c];if(Array.isArray(l))for(let u of l){let f=u?.installPath;if(typeof f!="string"||f==="")continue;let d=Ln(bt(f,ze,r+$e));if(d!==null)return d}}return null}function Ln(e){let t;try{t=fi(e,"utf8")}catch{return null}return jl(t)}function jl(e){let t=e.split(`
19
+ `).map(i=>i.endsWith("\r")?i.slice(0,-1):i);if(t.length===0||t[0].trim()!==Vt)return null;let n=-1;for(let i=1;i<t.length;i++)if(t[i].trim()===Vt){n=i;break}if(n<0)return null;let o=t.slice(1,n),r=li(o,qo),s=li(o,Yo);return{tools:r!==null&&r.length>0?r:null,disallowed:s??[]}}function li(e,t){for(let n=0;n<e.length;n++){let o=e[n];if(!o.startsWith(t+":"))continue;let r=o.slice(t.length+1).trim();if(r===""){let s=[];for(let i=n+1;i<e.length;i++){let c=e[i].trim();if(!c.startsWith("-"))break;s.push(ui(c.slice(1).trim()))}return s.filter(i=>i!=="")}return r.startsWith("[")&&r.endsWith("]")&&(r=r.slice(1,-1)),r.split(",").map(s=>ui(s.trim())).filter(s=>s!=="")}return null}function ui(e){return e.length>1&&(e[0]==='"'||e[0]==="'")&&e.endsWith(e[0])?e.slice(1,-1):e}function Gl(e){let t=e.nativeTools;return[...t.shell,...t.read??[],...t.grep??[],...t.webfetch??[],...t.edit??[],...Ke.map(n=>e.toolNamePrefix+n)]}function wn(e,t){let n=t.indexOf("("),o=(n>=0?t.slice(0,n):t).trim();return e.id==="gemini"&&o.startsWith(Jo)?Bl(o):o}function Bl(e){let t="";for(let n of e){let o=n>="a"&&n<="z"||n>="A"&&n<="Z"||n>="0"&&n<="9"||Vo.indexOf(n)>=0;t+=o?n:"_"}return t}function Wl(e,t){if(e.endsWith("*"))return t.startsWith(e.slice(0,-1));if(e===t)return!0;if(e.startsWith(zt)){let n=e.slice(zt.length);if(n!==""&&n.indexOf($t)<0)return t.startsWith(e+$t)}return!1}function di(e){return[...new Set(e.filter(t=>t!==""))]}var oe="",xi=Object.freeze({sudo:{valueShorts:"ugpChDrtUTR",valueLongs:["--user","--group","--prompt","--chdir","--host"],assignments:!0,duration:!1,refuseShorts:oe},env:{valueShorts:"uCS",valueLongs:["--unset","--chdir","--split-string"],assignments:!0,duration:!1,refuseShorts:oe},time:{valueShorts:"fo",valueLongs:["--format","--output"],assignments:!1,duration:!1,refuseShorts:oe},nice:{valueShorts:"n",valueLongs:["--adjustment"],assignments:!1,duration:!1,refuseShorts:oe},timeout:{valueShorts:"sk",valueLongs:["--signal","--kill-after"],assignments:!1,duration:!0,refuseShorts:oe},command:{valueShorts:oe,valueLongs:[],assignments:!1,duration:!1,refuseShorts:"vV"},xargs:{valueShorts:"aEdILnPs",valueLongs:["--arg-file","--delimiter","--max-args","--max-procs","--max-chars"],assignments:!1,duration:!1,refuseShorts:oe}}),Xl=["bash","sh"],Kl="c",ql=" -c",Yl=["-o","+o","-O","+O"],St="-",Jl="+",Mn="--",Vl="smhd",zl=".",pi=e=>e!==""&&e>="0"&&e<="9";function $l(e){if(e===""||!pi(e.charAt(0)))return!1;for(let t=0;t<e.length;t++){let n=e.charAt(t);if(!(pi(n)||n===zl))return t===e.length-1&&Vl.includes(n)}return!0}function Ql(e,t){let n=0;for(;n<t.length;){let o=t[n];if(o===Mn){n++;break}if(e.assignments&&_t(o)){n++;continue}if(o.startsWith(Mn)){n++,e.valueLongs.includes(o)&&n++;continue}if(o.startsWith(St)&&o.length>St.length){n++;for(let r of e.refuseShorts)if(o.includes(r))return null;for(let r=St.length;r<o.length;r++)if(e.valueShorts.includes(o.charAt(r))){r===o.length-1&&n++;break}continue}break}if(e.duration){if(n>=t.length||!$l(t[n]))return null;n++}return n<t.length?t.slice(n):null}function Zl(e){let t=!1;for(let n=0;n<e.length;n++){let o=e[n];if(!o.startsWith(Mn)){if(o.startsWith(St)||o.startsWith(Jl)){o.includes(Kl)&&(t=!0),Yl.includes(o)&&n++;continue}return t?o:null}}return null}function Ei(e,t){let n={...e};return n.insideConstruct===void 0&&t.insideConstruct!==void 0&&(n.insideConstruct=t.insideConstruct),n}function Hn(e,t,n,o){let r=[...t],s=e.argv0,i=e.args,c=e.redirectsToFile;for(;;){let a=s.toLowerCase();if(Xl.includes(a)){let f=Zl(i),d=f!==null&&n<ee?Pe(f):null;if(d===null||!d.ok)break;for(let x of d.commands){let E=Ei(x,e);E.redirectsToFile=x.redirectsToFile||c,E.endsInBoundedSink=x.endsInBoundedSink||e.endsInBoundedSink,Hn(E,[...r,a+ql],n+1,o)}return}let l=Object.hasOwn(xi,a)?xi[a]:void 0,u=l===void 0?null:Ql(l,i);if(u===null)break;r.push(a),s=kn(u[0]),i=u.slice(1),c=c||In(s,i)}if(o.push({...e,argv0:s,args:i,redirectsToFile:c,wrappedBy:r}),!(n>=ee))for(let a of mt(e.raw)){let l=Pe(a.body);if(l.ok)for(let u of l.commands)Hn(Ei(u,e),[...t,a.wrapper],n+1,o)}}function mi(e){let t=[];for(let n of e)Hn(n,[],0,t);return t}import{isAbsolute as tu,join as Tt,relative as nu,sep as Fn}from"node:path";var{readFileSync:eu}=process.getBuiltinModule("node:fs"),vn=".claude",ou="CLAUDE_CONFIG_DIR",ru="settings.local.json",_i="settings.json",su="Bash",iu="Read",gi=":*",hi="//",bi="~/",Si="./",Ti="..",cu=`
20
+ \r`,au=Object.freeze({tool:su});function lu(e,t){if(t!=="claude-code")return[];let n=process.env[ou],o=xe(process.env),r=n!==void 0&&n!==""?n:o===null?null:Tt(o,vn),s=[Tt(e,vn,ru),Tt(e,vn,_i)];return r===null?s:[...s,Tt(r,_i)]}function Ri(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function uu(e){let t;try{t=eu(e,"utf8")}catch(s){return s.code==="ENOENT"?{kind:"absent"}:{kind:"bad"}}let n;try{n=JSON.parse(t)}catch{return{kind:"bad"}}if(!Ri(n))return{kind:"bad"};let o=n.permissions;if(o===void 0)return{kind:"ok",deny:[]};if(!Ri(o))return{kind:"bad"};let r=o.deny;return r===void 0?{kind:"ok",deny:[]}:!Array.isArray(r)||!r.every(s=>typeof s=="string")?{kind:"bad"}:{kind:"ok",deny:r}}function Oi(e,t){let n=[];for(let o of lu(e,t)){let r=uu(o);if(r.kind==="bad")return null;r.kind==="ok"&&n.push(...r.deny)}return n}function du(e,t){let n=[],o=0;for(;o<e.length;){let r=e[o];if(r==="*"&&t&&e[o+1]==="*"){let s=e[o+2]==="/";n.push({t:s?"globstarDir":"globstar"}),o+=s?3:2;continue}r==="*"?(n.length===0||n[n.length-1].t!=="star")&&n.push({t:"star"}):r==="?"?n.push({t:"any1"}):n.push({t:"lit",c:r}),o++}return n}function X(e,t,n){let o=du(e,n),r=t.length,s=new Uint8Array(r+1);s[r]=1;for(let i=o.length-1;i>=0;i--){let c=o[i],a=new Uint8Array(r+1),l=0;for(let u=r;u>=0;u--){let f=u<r,d=f?t[u]:"";switch(c.t){case"lit":a[u]=f&&d===c.c?s[u+1]:0;break;case"any1":a[u]=f&&!(n&&d==="/")?s[u+1]:0;break;case"star":a[u]=s[u]||(f&&!(n&&d==="/")?a[u+1]:0);break;case"globstar":a[u]=s[u]||(f?a[u+1]:0);break;case"globstarDir":f&&d==="/"&&s[u+1]&&(l=1),a[u]=s[u]||l;break}}s=a}return s[0]===1}function fu(e){let t=e.indexOf("(");if(t<1||!e.endsWith(")"))return null;let n=e.slice(t+1,e.length-1);return n===""?null:{tool:e.slice(0,t),glob:n}}function xu(e,t){if(!e.endsWith(gi))return X(e,t,!1);let n=e.slice(0,e.length-gi.length);if(X(n,t,!1))return!0;for(let o=0;o<t.length;o++)if(cu.includes(t[o])&&X(n,t.slice(0,o),!1))return!0;return!1}var pu=/^[A-Za-z]:(?=\/)/;function Ue(e){return Fn==="/"?e:e.split(Fn).join("/")}function Eu(e,t,n){if(e.startsWith(Si)){if(n===void 0)return!1;let r=nu(n,t);return r===""||r===Ti||r.startsWith(Ti+Fn)||tu(r)?!1:X(e.slice(Si.length),Ue(r),!0)}let o=Ue(t);if(e.startsWith(hi)){let r=Ue(e.slice(hi.length-1));return X(r,o,!0)||X(r,o.replace(pu,""),!0)}if(e.startsWith(bi)){let r=xe(process.env);return r!==null&&X(Ue(r)+e.slice(bi.length-1),o,!0)}return X(Ue(e),o,!0)}function K(e,t,n=au){for(let o of t){let r=fu(o);if(r===null||r.tool!==n.tool)continue;if(n.tool===iu?Eu(r.glob,e,n.projectDir):xu(r.glob,e))return o}return null}var yx=Object.freeze({ctx_execute:"Runs code in a sandboxed subprocess in the project directory (shell, powershell, javascript, typescript, python, or another runtime on PATH); only what the code prints comes back. For a large file, set `file` to its local path: the code gets it in the CTX_FILE environment variable. Set `intent` when output may be large: the matching sections come back and the full output is indexed for ctx_search. `timeoutMs` defaults to and caps at 600000; then the whole process tree is killed.\n",ctx_batch:"Runs several shell commands, then answers several search queries over their combined output, in one call. Use it to collect facts from more than one command at once, for example test results plus recent commits, when you need specific answers rather than the full text. Returns the matching sections and a one-line footer.",ctx_index:"Stores content so it can be searched later: a local file or folder (nested .gitignore files are respected), raw text, or a URL, which is fetched and converted to Markdown. Use it for documentation or large files you will query more than once, then use ctx_search instead of reading the content again. Returns the source label and how many chunks were stored.",ctx_search:"Searches content stored with ctx_index and earlier sandbox output in this project. Pass several queries in one call. By default it searches the current worktree; set `scope` to `project` for all worktrees or `session` for this session only. Results from the current session rank first, then by relevance, ranked with measurably better recall than plain keyword search. Set `sort` to `timeline` for oldest-first order across this session, prior sessions and memory, paged with `after`; `offset` is for relevance order only. Set `source` to `decision` to search only rows where the user answered a question. Every hit names its source. When nothing matches, the reply states the scope and how many sources are indexed.",ctx_resume:"Returns a summary of up to 2 KB for this session: the last task and user request, files changed, open errors, and search terms for ctx_search. A large row is shown as a pointer line instead of its full text; call `ctx_resume(seq: N)` with that line's number to read the full row. Call it with no `seq` to get the state block on demand. Use it after the conversation was compacted or resumed, before you repeat earlier work.",ctx_stats:"Reports how many bytes context-mode kept out of the conversation in this session and in this project, per agent, as a Markdown table. Show the table to the user as it is. Use it when the user asks what context-mode saved.",ctx_doctor:"Checks this context-mode install and reports a table with one row per check: version, Node and node:sqlite, host config and hooks for this agent, MCP connection, project and worktree, database health, index contents, and hook timing. Each failed row names its cause and the fix in one line. It changes nothing. Use it when the user asks whether context-mode works, or after a context-mode error.",ctx_upgrade:"Updates context-mode to the latest release for this agent and rewrites only context-mode's own entries in the host config. User entries and user settings such as hook timeouts are kept, and old entries are erased. Returns a table of what changed and whether a restart is needed. Use it only when the user asks to update context-mode.",ctx_purge:"Deletes stored data: one session, one indexed source, or everything stored for this project. This cannot be undone. Use it only when the user asks to forget or reset data."}),Ai='context-mode: {size}-byte file, over the one-read limit. Run ctx_execute(language, code, file="{path}") and print only the answer.';var mu="{size}",_u="{path}";function jn(e,t,n=""){return U(Ai,n).split(mu).join(String(t)).split(_u).join(e)}var{statSync:gu}=process.getBuiltinModule("node:fs"),Ci="Bash",Bn="Read",hu="WebFetch",bu="ctx_execute",Su="ctx_batch",ki="shell",Tu="1",q="-",Wn="--",Ru="=",Ou=".",Ni=",",Gn="p",Au=["-e","--expression"],Nu=";&|(`\n\r",se=Object.freeze({kind:"allow"}),Y=e=>({kind:"deny",reason:e}),re=e=>typeof e=="string"?e:void 0,yi=e=>e!=null,J=(e,t)=>e.includes(t);function Ii(e,t,n){let o=e.tool;if(o===void 0)return se;let r=o.canonicalName,s=o.input,i;if(n===null){if(process.env[Bo]===Tu)return Y(U(Qe,t.toolNamePrefix));process.stderr.write(ir+`
21
+ `),i=[]}else i=n;let c=yu(r,s,e.cwd,i);return c!==null?Y(Te+c):r===hu?Du(s,t):r===Ci?wu(e,t,s,i):r===Bn?Hu(e,t,s):se}function Di(e,t,n,o){let r=e==="webfetch",s=r?or.map(c=>n.toolNamePrefix+c).join(sr):n.toolNamePrefix+nr,i=JSON.stringify(r?{url:t}:{language:ki,code:t,intent:o??tr});return[zo+$o[e]+Qo,Zo,er+s,i].join(`
22
+ `)}function wi(e){for(let t of br){let n=re(e[t]);if(n!==void 0&&n!=="")return n}}function yu(e,t,n,o){if(o.length===0)return null;let r=s=>K(Xn(n,s),o,{tool:Bn,projectDir:n});if(e===Ci){let s=re(t.command);return s===void 0?null:K(s,o)}if(e===Bn){let s=wi(t);return s===void 0?null:r(s)}if(e===bu){let s=re(t.file),i=s===void 0||s===""?null:r(s);if(i!==null)return i;let c=re(t.code);return t.language===ki&&c!==void 0?K(c,o):null}if(e===Su&&Array.isArray(t.commands))for(let s of t.commands){let i=typeof s=="string"?K(s,o):null;if(i!==null)return i}return null}function Cu(e,t){return t.length===0?null:K([e.argv0,...e.args].join(" "),t)??K(e.raw,t)}function ku(e,t){if(t.length===0)return!1;for(let n=0;n<=e.length;n++)if(!(n>0&&!Nu.includes(e.charAt(n-1)))&&K(e.slice(n).trimStart(),t)!==null)return!0;return!1}function Iu(e){let t;try{t=new URL(e).hostname.toLowerCase()}catch{return!1}return cr.some(n=>t===n||t.endsWith(Ou+n))}function Du(e,t){let n=re(e.url)??"";return Iu(n)?se:Y(Di("webfetch",n,t))}function wu(e,t,n,o){let r=re(n.command)??"",s=Pe(r);if(!s.ok)return ku(r,o)?Y(U(Ze,t.toolNamePrefix)):se;let i=mi(s.commands);for(let c of i){let a=Cu(c,o);if(a!==null)return Y(Te+a)}if(!Ne(t)||pe(e))for(let c of i){let a=Lu(c);if(a!==null)return Y(Di(a,r,t,re(n.description)))}return vu(i,e.cwd,t)??se}function Lu(e){let t=e.argv0.toLowerCase();return J(ar,t)&&Pu(t,e)?"curl":Mu(e.raw)?"http":J(fr,t)?"build":null}function Pu(e,t){return t.redirectsToFile?!Uu(e,t.args):!t.endsInBoundedSink}function Uu(e,t){let n=lr[e],o=!1;for(let r=0;r<t.length;r++){let s=t[r];if(s===Wn)break;if(J(ur,s)||s===dr&&t[r+1]===q)return!1;(s===n.long||s.startsWith(q)&&!s.startsWith(Wn)&&s.includes(n.short,q.length))&&(o=!0)}return o}function Mu(e){let t=e.toLowerCase();for(let n of Er)if(t.includes(n))return!0;for(let n=t.indexOf(Re);n>=0;n=t.indexOf(Re,n+1)){let o=t.charAt(n+Re.length);if(o!==""&&xr.includes(o)&&t.startsWith(pr,n+Re.length+o.length))return!0}return!1}function Li(e){try{let t=gu(e);return t.isFile()?t.size:-1}catch{return-1}}function Hu(e,t,n){if(!yi(n.offset)&&!yi(n.limit)){let o=wi(n);if(o!==void 0){let r=Xn(e.cwd,o),s=Li(r);if(s>be)return Y(jn(r,s,t.toolNamePrefix))}}return se}function vu(e,t,n){if(n.nativeTools.read!==void 0&&n.nativeTools.read.length>0&&ws(n)||e.length!==1)return null;let o=e[0];if(o.redirectsToFile||o.endsInBoundedSink)return null;let r=o.argv0.toLowerCase();if(!J(mr,r))return null;let s=Gu(r,o.args);if(s===null)return null;if(s.bounded)return se;let i=Xn(t,s.file),c=Li(i);return c>be?Y(jn(i,c,n.toolNamePrefix)):null}var Rt=e=>e!==""&&[...e].every(t=>t>="0"&&t<="9");function Fu(e){if(J(Qt,e))return 1;for(let t of Qt)if(t.startsWith(Wn)?e.startsWith(t+Ru):e.startsWith(t))return 0;return e.startsWith(q)&&Rt(e.slice(q.length))?0:-1}function ju(e){if(e===Gn)return"all";if(!e.endsWith(Gn))return null;let t=e.slice(0,e.length-Gn.length),n=t.indexOf(Ni);return(n<0?Rt(t):Rt(t.slice(0,n))&&Rt(t.slice(n+Ni.length)))?"range":null}function Gu(e,t){let n=[],o=!1,r=!1,s;for(let i=0;i<t.length;i++){let c=t[i];if(J(_r,e)){let a=Fu(c);if(a>=0){o=!0,i+=a;continue}}if(e===et&&J(gr,c)){r=!0;continue}if(e===et&&J(Au,c)){s=t[i+1],i++;continue}c.startsWith(q)&&c!==q||n.push(c)}if(e===et){if(!r)return null;s===void 0&&(s=n.shift());let i=s===void 0?null:ju(s);if(i===null)return null;o=i==="range"}return e===hr&&n.shift()!==I.identity?null:n.length===1&&n[0]!==q?{file:n[0],bounded:o}:null}import{basename as zu,dirname as At,join as He,resolve as Hi}from"node:path";import{dirname as Pi,sep as Wu}from"node:path";var{realpathSync:Bu}=process.getBuiltinModule("node:fs");function Xu(e){try{return Bu.native(e)}catch{return}}function Ot(e){return e.split(Wu).filter(t=>t!=="")}function Ui(e){let t=e.map(Xu).filter(s=>s!==void 0);if(t.length===0)throw new RangeError("commonRoot needs at least one existing path");let n=t[0],o=Ot(n).length;for(let s of t){let i=Ot(s),c=Ot(n),a=0;for(;a<o&&a<i.length&&i[a]===c[a];)a+=1;o=a}let r=n;for(;Ot(r).length>o&&Pi(r)!==r;)r=Pi(r);return r}var Ku=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),qu=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],w=(e,t)=>e>>>t|e<<32-t;function Mi(e){let t=Buffer.from(e,"utf8"),n=t.length*8,o=Math.ceil((t.length+9)/64)*64,r=Buffer.alloc(o);t.copy(r),r[t.length]=128,r.writeUInt32BE(Math.floor(n/4294967296),o-8),r.writeUInt32BE(n>>>0,o-4);let s=qu.slice(),i=new Uint32Array(64);for(let c=0;c<o;c+=64){for(let _=0;_<16;_++)i[_]=r.readUInt32BE(c+_*4);for(let _=16;_<64;_++){let S=w(i[_-15],7)^w(i[_-15],18)^i[_-15]>>>3,h=w(i[_-2],17)^w(i[_-2],19)^i[_-2]>>>10;i[_]=i[_-16]+S+i[_-7]+h>>>0}let[a,l,u,f,d,x,E,m]=s;for(let _=0;_<64;_++){let S=m+(w(d,6)^w(d,11)^w(d,25))+(d&x^~d&E)+Ku[_]+i[_]>>>0,h=(w(a,2)^w(a,13)^w(a,22))+(a&l^a&u^l&u)>>>0;m=E,E=x,x=d,d=f+S>>>0,f=u,u=l,l=a,a=S+h>>>0}s[0]=s[0]+a>>>0,s[1]=s[1]+l>>>0,s[2]=s[2]+u>>>0,s[3]=s[3]+f>>>0,s[4]=s[4]+d>>>0,s[5]=s[5]+x>>>0,s[6]=s[6]+E>>>0,s[7]=s[7]+m>>>0}return s.map(c=>c.toString(16).padStart(8,"0")).join("")}var{existsSync:Yu,readFileSync:Ju,realpathSync:Kn,statSync:Vu}=process.getBuiltinModule("node:fs");function $u(e){switch(e){case"claude-code":return"env:CLAUDE_PROJECT_DIR";case"codex":case"copilot-cli":case"kiro":return"arg:--agent+cwd";case"vscode":return"arg:workspaceFolder";case"gemini":case"qwen":case"zcode":case"opencode":return"spawn-cwd";case"pi":return"pi:ctx.cwd"}}function Me(e){return e===void 0||e===""?void 0:e}function Qu(e,t){switch(e){case"env:CLAUDE_PROJECT_DIR":return Me(t.env.CLAUDE_PROJECT_DIR)??Me(t.cwd)??process.cwd();case"arg:--agent+cwd":case"spawn-cwd":return Me(t.cwd);case"arg:workspaceFolder":{let n=t.argv.indexOf(Je);return n<0?void 0:Me(t.argv[n+1])}case"pi:ctx.cwd":return Me(t.piCwd)}}function Zu(e){let t;try{t=Kn.native(e)}catch{throw new R("NO_GIT_DIR",{path:e})}for(;;){let n=ed(He(t,Kt));if(n!==null){let r=vi(He(n,vo));return{commonDir:Kn.native(r===null?n:Hi(n,r)),worktree:t}}let o=At(t);if(o===t)return null;t=o}}function ed(e){let t;try{if(Vu(e).isDirectory())t=e;else{let n=vi(e);if(n===null||!n.startsWith(Yt))return null;t=Hi(At(e),n.slice(Yt.length))}}catch{return null}return Yu(He(t,Fo))?t:null}function vi(e){let t;try{t=Ju(e,"utf8")}catch{return null}let n=t.indexOf(`
23
+ `),o=(n<0?t:t.slice(0,n)).trim();return o===""?null:o}function td(e,t){let{spawnSync:n}=process.getBuiltinModule("node:child_process"),o=n("git",t,{cwd:e,shell:!1,encoding:"utf8",stdio:["ignore","pipe","pipe"]});if(o.error!==void 0||o.status!==0)throw new R("NO_GIT_DIR",{path:e});return o.stdout.split(`
24
+ `).filter(r=>r!=="")}function nd(e,t){let n=zu(t)===Kt?At(t):t,o=td(e,["worktree","list","--porcelain"]).filter(r=>r.startsWith(qt)).map(r=>r.slice(qt.length));return Ui([At(n),...o])}function Fi(e,t){let n=$u(e),o=Qu(n,t);if(o===void 0)throw new R("NO_PROJECT",{kind:n});let r=Zu(o),s=r===null?Kn.native(o):void 0,i=r?.commonDir??s,c=r?.worktree??s,a=Mi(i).slice(0,Uo),l=He(ai(process.env),Mo,a),u;return{projectKey:a,projectDir:l,dbPath:He(l,Ho),worktree:c,get containmentRoot(){return u??=s??nd(o,i),u},agent:e,source:n}}var Nt=Se,od=`
25
+ PRAGMA busy_timeout = ${ie};
26
+ PRAGMA journal_mode = WAL;
27
+ `,yt="tokenize = 'porter unicode61 remove_diacritics 2'",rd="tokenize = 'unicode61 remove_diacritics 2'",sd=`
28
+ CREATE TABLE IF NOT EXISTS events (
29
+ seq INTEGER PRIMARY KEY AUTOINCREMENT,
30
+ session_id TEXT NOT NULL,
31
+ worktree TEXT NOT NULL,
32
+ agent TEXT NOT NULL,
33
+ kind TEXT NOT NULL CHECK (kind IN ('prompt','edit','cmd','toolerr','index','cost','decision')),
34
+ tool TEXT,
35
+ key TEXT,
36
+ path TEXT,
37
+ ok INTEGER,
38
+ exit_code INTEGER,
39
+ bytes INTEGER,
40
+ body TEXT,
41
+ turn INTEGER NOT NULL,
42
+ sandbox_bytes INTEGER NOT NULL DEFAULT 0,
43
+ returned_bytes INTEGER NOT NULL DEFAULT 0,
44
+ created_at INTEGER NOT NULL,
45
+ accessed_at INTEGER NOT NULL
46
+ );
47
+ CREATE INDEX IF NOT EXISTS idx_events_session_kind_seq ON events(session_id, kind, seq);
48
+ CREATE INDEX IF NOT EXISTS idx_events_session_kind_key_seq ON events(session_id, kind, key, seq);
49
+
50
+ CREATE TABLE IF NOT EXISTS sources (
51
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
52
+ session_id TEXT NOT NULL,
53
+ worktree TEXT NOT NULL,
54
+ agent TEXT NOT NULL,
55
+ kind TEXT NOT NULL CHECK (kind IN ('path','content','url')),
56
+ label TEXT NOT NULL,
57
+ bytes_total INTEGER NOT NULL,
58
+ chunk_count INTEGER NOT NULL,
59
+ created_ts INTEGER NOT NULL,
60
+ created_at TEXT NOT NULL,
61
+ accessed_ts INTEGER NOT NULL
62
+ );
63
+ CREATE INDEX IF NOT EXISTS idx_sources_accessed ON sources(accessed_ts);
64
+
65
+ CREATE VIRTUAL TABLE IF NOT EXISTS chunks USING fts5(
66
+ source_id UNINDEXED,
67
+ session_id UNINDEXED,
68
+ worktree UNINDEXED,
69
+ agent UNINDEXED,
70
+ ord UNINDEXED,
71
+ body,
72
+ ${rd}
73
+ );
74
+
75
+ CREATE TABLE IF NOT EXISTS meta (
76
+ key TEXT PRIMARY KEY,
77
+ value TEXT NOT NULL
78
+ );
79
+ `,id=`
80
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_events_cost_session_turn ON events(session_id, turn) WHERE kind = 'cost';
81
+ `,cd=`
82
+ CREATE VIRTUAL TABLE chunks_v3 USING fts5(
83
+ source_id UNINDEXED,
84
+ session_id UNINDEXED,
85
+ worktree UNINDEXED,
86
+ agent UNINDEXED,
87
+ ord UNINDEXED,
88
+ body,
89
+ title,
90
+ ${yt}
91
+ );
92
+ INSERT INTO chunks_v3(rowid, source_id, session_id, worktree, agent, ord, body, title)
93
+ SELECT rowid, source_id, session_id, worktree, agent, ord, body, '' FROM chunks;
94
+ DROP TABLE chunks;
95
+ ALTER TABLE chunks_v3 RENAME TO chunks;
96
+ `,ad=`
97
+ CREATE VIRTUAL TABLE chunks_tri USING fts5(
98
+ body,
99
+ title,
100
+ tokenize = 'trigram',
101
+ content = ''
102
+ );
103
+ INSERT INTO chunks_tri(rowid, body, title) SELECT rowid, body, title FROM chunks;
104
+ CREATE VIRTUAL TABLE chunks_vocab USING fts5vocab(chunks, 'row');
105
+ `,ld=`
106
+ CREATE VIRTUAL TABLE line_units USING fts5(
107
+ body,
108
+ source_id UNINDEXED,
109
+ session_id UNINDEXED,
110
+ ord UNINDEXED,
111
+ ${yt}
112
+ );
113
+ `,ud=[{version:1,sql:sd},{version:2,sql:id},{version:3,sql:cd},{version:4,sql:ad},{version:5,sql:ld}];function qn(e,t){if(t!==Nt){if(t>Nt)throw new R("SCHEMA_STALE",{found:t,want:Nt});e.exec(od),e.exec("BEGIN IMMEDIATE");try{for(let n of ud)n.version>t&&e.exec(n.sql);e.exec(`PRAGMA user_version = ${Nt}`),e.exec("COMMIT")}catch(n){throw e.isTransaction&&e.exec("ROLLBACK"),n}}}var{existsSync:ve,linkSync:dd,mkdirSync:fd,rmSync:xd}=process.getBuiltinModule("node:fs");function ji(e){return(e.startsWith("v")?e.slice(1):e).split(".").map(n=>Number.parseInt(n,10))}function pd(e,t){let n=ji(e),o=ji(t);for(let r=0;r<o.length;r+=1){let s=n[r]??0;if(s!==o[r])return s<o[r]}return!1}function Ed(e){if(typeof e!="object"||e===null)return!1;let t=e.errcode;if(typeof t!="number")return!1;let n=t&wo;return n===Lo||n===Po}async function md(){try{return await import("node:sqlite")}catch{throw new R("NO_SQLITE")}}function Yn(e){return e.prepare("PRAGMA user_version").get().user_version}function _d(e,t){let{randomUUID:n}=process.getBuiltinModule("node:crypto"),o=t+"."+n()+Do;try{let r=new e.DatabaseSync(o,{timeout:ie});try{qn(r,Yn(r))}finally{r.close()}try{dd(o,t)}catch(s){if(s.code!=="EEXIST")throw s}}finally{for(let r of["",qe,Ye])xd(o+r,{force:!0})}}function Gi(e,t){let n=null;try{return ve(t)||_d(e,t),n=new e.DatabaseSync(t,{timeout:ie}),qn(n,Yn(n)),n}catch(o){throw n&&n.close(),o}}function gd(e,t){let n=new e.DatabaseSync(t,{timeout:ie,readOnly:!0});try{let o=Yn(n);if(o!==Se)throw new R("SCHEMA_STALE",{found:o,want:Se});return n}catch(o){throw n.close(),o}}async function N(e,t){if(pd(process.version,Jt))throw new R("NODE_TOO_OLD",{v:process.version});let n=await md();fd(e.projectDir,{recursive:!0});let o=e.dbPath;if((ve(o+qe)||ve(o+Ye))&&!ve(o))throw new R("DB_GONE");try{let s;return t?.readOnly===!0?(ve(o)||Gi(n,o).close(),s=gd(n,o)):s=Gi(n,o),{raw:s,projectKey:e.projectKey,path:o}}catch(s){throw Ed(s)?new R("DB_CORRUPT"):s}}function L(e,t){e.raw.exec("BEGIN IMMEDIATE");try{let n=t(e);return e.raw.exec("COMMIT"),n}catch(n){throw e.raw.isTransaction&&e.raw.exec("ROLLBACK"),n}}function Bi(e,t){return e.raw.isTransaction?t(e):L(e,t)}function V(e,t){let n=e.raw.prepare("SELECT value FROM meta WHERE key = ?").get(t);return n===void 0?null:n.value}function j(e,t,n){Bi(e,o=>{o.raw.prepare("INSERT INTO meta(key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(t,n)})}function Ct(e,t){return Bi(e,n=>{let o=n.raw.prepare("DELETE FROM meta WHERE key = ? RETURNING value").get(t);return o===void 0?null:o.value})}var Wi="events(session_id, worktree, agent, kind, tool, key, path, ok, exit_code, bytes, body, turn, sandbox_bytes, returned_bytes, created_at, accessed_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",hd="INSERT INTO "+Wi,bd="INSERT OR IGNORE INTO "+Wi,Sd="SELECT seq FROM events WHERE kind = 'cost' AND session_id = ? AND turn = ?";function kt(e,t){return L(e,n=>{let o=Date.now(),r=t.kind==="cost",s=n.raw.prepare(r?bd:hd).run(t.session_id,t.worktree,t.agent,t.kind,t.tool,t.key,t.path,t.ok,t.exit_code,t.bytes,t.body,t.turn,t.sandbox_bytes,t.returned_bytes,o,o);return s.changes===1?Number(s.lastInsertRowid):n.raw.prepare(Sd).get(t.session_id,t.turn).seq})}function Xi(e,t){let n="",o="",r=!1,s=!1;for(let i of t){if(o===""&&!r&&i.trim()===""){s=n!=="";continue}s&&(n+=" ",s=!1),n+=i,r?r=!1:i==="\\"&&o!=="'"?r=!0:o===""&&(i==="'"||i==='"')?o=i:i===o&&(o="")}return e+":"+n}function Jn(e,t,n){return t===""?[]:n===void 0?e.raw.prepare("SELECT * FROM events WHERE session_id = ? ORDER BY seq ASC").all(t):e.raw.prepare("SELECT * FROM events WHERE session_id = ? AND kind = ? ORDER BY seq ASC").all(t,n)}function Ki(e,t){if(t==="")return"";let n=e.raw.prepare("SELECT body FROM events WHERE session_id = ? AND kind = 'prompt' ORDER BY seq DESC LIMIT 1").get(t);return n===void 0?"":n.body}function qi(e,t){if(t==="")return"";let n=e.raw.prepare("SELECT body FROM events WHERE session_id = ? AND kind = 'prompt' ORDER BY seq ASC LIMIT 1").get(t);return n===void 0?"":n.body}function Yi(e,t,n,o){return t===""?[]:e.raw.prepare("SELECT * FROM events WHERE kind <> 'cost' AND (session_id = ? OR worktree = ?) ORDER BY seq DESC LIMIT ?").all(t,n,o)}function Ji(e,t,n){return e.raw.prepare("SELECT 1 FROM events WHERE worktree = ? AND agent = ? LIMIT 1").get(t,n)!==void 0}function Vi(e,t){return e.raw.prepare("SELECT 1 FROM events WHERE session_id = ? LIMIT 1").get(t)!==void 0}var Vn=Object.freeze([170,170,178,179,181,181,185,186,188,190,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,895,895,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1327,1329,1366,1369,1369,1376,1416,1488,1514,1519,1522,1568,1610,1632,1641,1646,1647,1649,1747,1749,1749,1765,1766,1774,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1984,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2144,2154,2160,2183,2185,2191,2208,2249,2308,2361,2365,2365,2384,2384,2392,2401,2406,2415,2417,2432,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2534,2545,2548,2553,2556,2556,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2662,2671,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2790,2799,2809,2809,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2918,2927,2929,2935,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3046,3058,3077,3084,3086,3088,3090,3112,3114,3129,3133,3133,3160,3162,3164,3165,3168,3169,3174,3183,3192,3198,3200,3200,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3292,3294,3296,3297,3302,3311,3313,3314,3332,3340,3342,3344,3346,3386,3389,3389,3406,3406,3412,3414,3416,3425,3430,3448,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3558,3567,3585,3632,3634,3635,3648,3654,3664,3673,3713,3714,3716,3716,3718,3722,3724,3747,3749,3749,3751,3760,3762,3763,3773,3773,3776,3780,3782,3782,3792,3801,3804,3807,3840,3840,3872,3891,3904,3911,3913,3948,3976,3980,4096,4138,4159,4169,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4240,4249,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4969,4988,4992,5007,5024,5109,5112,5117,5121,5740,5743,5759,5761,5786,5792,5866,5870,5880,5888,5905,5919,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6112,6121,6128,6137,6160,6169,6176,6264,6272,6276,6279,6312,6314,6314,6320,6389,6400,6430,6470,6509,6512,6516,6528,6571,6576,6601,6608,6618,6656,6678,6688,6740,6784,6793,6800,6809,6823,6823,6917,6963,6981,6988,6992,7001,7043,7072,7086,7141,7168,7203,7232,7241,7245,7293,7296,7306,7312,7354,7357,7359,7401,7404,7406,7411,7413,7414,7418,7418,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8304,8305,8308,8313,8319,8329,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8528,8585,9312,9371,9450,9471,10102,10131,11264,11492,11499,11502,11506,11507,11517,11517,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12591,12593,12686,12690,12693,12704,12735,12784,12799,12832,12841,12872,12879,12881,12895,12928,12937,12977,12991,13312,19903,19968,42124,42192,42237,42240,42508,42512,42539,42560,42606,42623,42653,42656,42735,42775,42783,42786,42888,42891,42972,42993,43009,43011,43013,43015,43018,43020,43042,43056,43061,43072,43123,43138,43187,43216,43225,43250,43255,43259,43259,43261,43262,43264,43301,43312,43334,43360,43388,43396,43442,43471,43481,43488,43492,43494,43518,43520,43560,43584,43586,43588,43595,43600,43609,43616,43638,43642,43642,43646,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43824,43866,43868,43881,43888,44002,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65296,65305,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500,65536,65547,65549,65574,65576,65594,65596,65597,65599,65613,65616,65629,65664,65786,65799,65843,65856,65912,65930,65931,66176,66204,66208,66256,66273,66299,66304,66339,66349,66378,66384,66421,66432,66461,66464,66499,66504,66511,66513,66517,66560,66717,66720,66729,66736,66771,66776,66811,66816,66855,66864,66915,66928,66938,66940,66954,66956,66962,66964,66965,66967,66977,66979,66993,66995,67001,67003,67004,67008,67059,67072,67382,67392,67413,67424,67431,67456,67461,67463,67504,67506,67514,67584,67589,67592,67592,67594,67637,67639,67640,67644,67644,67647,67669,67672,67702,67705,67742,67751,67759,67808,67826,67828,67829,67835,67867,67872,67897,67904,67929,67968,68023,68028,68047,68050,68096,68112,68115,68117,68119,68121,68149,68160,68168,68192,68222,68224,68255,68288,68295,68297,68324,68331,68335,68352,68405,68416,68437,68440,68466,68472,68497,68521,68527,68608,68680,68736,68786,68800,68850,68858,68899,68912,68921,68928,68965,68975,68997,69216,69246,69248,69289,69296,69297,69314,69319,69376,69415,69424,69445,69457,69460,69488,69505,69552,69579,69600,69622,69635,69687,69714,69743,69745,69746,69749,69749,69763,69807,69840,69864,69872,69881,69891,69926,69942,69951,69956,69956,69959,69959,69968,70002,70006,70006,70019,70066,70081,70084,70096,70106,70108,70108,70113,70132,70144,70161,70163,70187,70207,70208,70272,70278,70280,70280,70282,70285,70287,70301,70303,70312,70320,70366,70384,70393,70405,70412,70415,70416,70419,70440,70442,70448,70450,70451,70453,70457,70461,70461,70480,70480,70493,70497,70528,70537,70539,70539,70542,70542,70544,70581,70583,70583,70609,70609,70611,70611,70656,70708,70727,70730,70736,70745,70751,70753,70784,70831,70852,70853,70855,70855,70864,70873,71040,71086,71128,71131,71168,71215,71236,71236,71248,71257,71296,71338,71352,71352,71360,71369,71376,71395,71424,71450,71472,71483,71488,71494,71680,71723,71840,71922,71935,71942,71945,71945,71948,71955,71957,71958,71960,71983,71999,71999,72001,72001,72016,72025,72096,72103,72106,72144,72161,72161,72163,72163,72192,72192,72203,72242,72250,72250,72272,72272,72284,72329,72349,72349,72368,72440,72640,72672,72688,72697,72704,72712,72714,72750,72768,72768,72784,72812,72818,72847,72960,72966,72968,72969,72971,73008,73030,73030,73040,73049,73056,73061,73063,73064,73066,73097,73112,73112,73120,73129,73136,73179,73184,73193,73440,73458,73474,73474,73476,73488,73490,73523,73552,73561,73648,73648,73664,73684,73728,74649,74752,74862,74880,75075,77712,77808,77824,78895,78913,78918,78944,82938,82944,83526,90368,90397,90416,90425,92160,92728,92736,92766,92768,92777,92784,92862,92864,92873,92880,92909,92928,92975,92992,92995,93008,93017,93019,93025,93027,93047,93053,93071,93504,93548,93552,93561,93760,93846,93856,93880,93883,93907,93952,94026,94032,94032,94099,94111,94176,94177,94179,94179,94194,94198,94208,101589,101631,101662,101760,101874,110576,110579,110581,110587,110589,110590,110592,110882,110898,110898,110928,110930,110933,110933,110948,110951,110960,111355,113664,113770,113776,113788,113792,113800,113808,113817,118e3,118009,119488,119507,119520,119539,119648,119672,119808,119892,119894,119964,119966,119967,119970,119970,119973,119974,119977,119980,119982,119993,119995,119995,119997,120003,120005,120069,120071,120074,120077,120084,120086,120092,120094,120121,120123,120126,120128,120132,120134,120134,120138,120144,120146,120485,120488,120512,120514,120538,120540,120570,120572,120596,120598,120628,120630,120654,120656,120686,120688,120712,120714,120744,120746,120770,120772,120779,120782,120831,122624,122654,122661,122666,122928,122989,123136,123180,123191,123197,123200,123209,123214,123214,123536,123565,123584,123627,123632,123641,124112,124139,124144,124153,124368,124397,124400,124410,124608,124638,124640,124642,124644,124645,124647,124653,124656,124660,124670,124671,124896,124902,124904,124907,124909,124910,124912,124926,124928,125124,125127,125135,125184,125251,125259,125259,125264,125273,126065,126123,126125,126127,126129,126132,126209,126253,126255,126269,126464,126467,126469,126495,126497,126498,126500,126500,126503,126503,126505,126514,126516,126519,126521,126521,126523,126523,126530,126530,126535,126535,126537,126537,126539,126539,126541,126543,126545,126546,126548,126548,126551,126551,126553,126553,126555,126555,126557,126557,126559,126559,126561,126562,126564,126564,126567,126570,126572,126578,126580,126583,126585,126588,126590,126590,126592,126601,126603,126619,126625,126627,126629,126633,126635,126651,127232,127244,130032,130041,131072,173791,173824,178205,178208,183981,183984,191456,191472,192093,194560,195101,196608,201546,201552,210041]);function Td(e){if(e<128)return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===95;let t=0,n=Vn.length/2-1;for(;t<=n;){let o=t+n>>1,r=Vn[2*o],s=Vn[2*o+1];if(e<r)n=o-1;else if(e>s)t=o+1;else return!0}return!1}function Rd(e,t){let n=[],o=-1,r=0;for(let s of e)t(s.codePointAt(0))?o>=0&&(n.push(e.slice(o,r)),o=-1):o<0&&(o=r),r+=s.length;return o>=0&&n.push(e.slice(o)),n}function Ee(e){return Rd(e,t=>!Td(t))}var Od=`
114
+ INSERT INTO sources(session_id, worktree, agent, kind, label, bytes_total, chunk_count, created_ts, created_at, accessed_ts)
115
+ VALUES (:session_id, :worktree, :agent, :kind, :label, :bytes_total, :chunk_count, :created_ts, :created_at, :created_ts)
116
+ RETURNING id`,Ad=`
117
+ INSERT INTO chunks(source_id, session_id, worktree, agent, ord, body, title) VALUES (?, ?, ?, ?, ?, ?, ?)`,zi=1,$i=`
118
+ SELECT chunks.rowid AS rid, chunks.source_id AS source_id, chunks.session_id AS session_id,
119
+ chunks.worktree AS worktree, chunks.ord AS ord, s.created_ts AS created_ts,
120
+ bm25(chunks, 0, 0, 0, 0, 0, 1.0, ${zi}) AS bm,
121
+ (chunks.rowid IN (SELECT rowid FROM chunks WHERE chunks MATCH :all)) AS full
122
+ FROM chunks JOIN sources s ON s.id = chunks.source_id
123
+ WHERE chunks MATCH :match
124
+ AND (:scope <> 'session' OR chunks.session_id = :session_id)
125
+ AND (:scope <> 'worktree' OR chunks.worktree = :worktree)
126
+ AND (:source IS NULL OR s.label = :source)`,Qi=`
127
+ ORDER BY (session_id = :session_id) DESC, (worktree = :worktree) DESC, full DESC, score DESC, source_id DESC, ord ASC`,Rp=`
128
+ WITH m AS (${$i}
129
+ ), r AS (
130
+ SELECT *,
131
+ ROW_NUMBER() OVER (ORDER BY full DESC, bm ASC, source_id DESC, ord ASC) AS rank_a,
132
+ ROW_NUMBER() OVER (ORDER BY created_ts DESC, source_id DESC, ord ASC) AS rank_b
133
+ FROM m
134
+ )
135
+ SELECT rid, source_id, session_id, worktree, ord, full, 1.0 / (:k + rank_a) + 1.0 / (:k + rank_b) AS score
136
+ FROM r${Qi}`,Op=`
137
+ WITH m AS (${$i}
138
+ )
139
+ SELECT rid, source_id, session_id, worktree, ord, full, -bm AS score
140
+ FROM m${Qi}`;var Ap=`
141
+ SELECT t.rowid AS rid, c.source_id AS source_id, c.session_id AS session_id, c.worktree AS worktree, c.ord AS ord
142
+ FROM chunks_tri t JOIN chunks c ON c.rowid = t.rowid JOIN sources s ON s.id = c.source_id
143
+ WHERE chunks_tri MATCH :match
144
+ AND (:scope <> 'session' OR c.session_id = :session_id)
145
+ AND (:scope <> 'worktree' OR c.worktree = :worktree)
146
+ AND (:source IS NULL OR s.label = :source)
147
+ ORDER BY bm25(chunks_tri, 1.0, ${zi}) ASC, c.source_id DESC, c.ord ASC`;var Nd="INSERT INTO chunks_tri(rowid, body, title) VALUES (?, ?, ?)",yd="INSERT INTO chunks_tri(chunks_tri, rowid, body, title) SELECT 'delete', rowid, body, title FROM chunks";function Zi(e,t,n){let o=zn(e,t,n);return tc(e,o,t,n),o}function zn(e,t,n){let o=0;for(let r of n)o+=r.bytes;return L(e,r=>{let s=r.raw.prepare(Od).get({session_id:t.sessionId,worktree:t.worktree,agent:t.agent,kind:t.kind,label:t.label,bytes_total:o,chunk_count:n.length,created_ts:t.createdAt,created_at:new Date(t.createdAt).toISOString()});return Number(s.id)})}function ec(e,t,n,o,r){try{tc(e,t,n,o),Qn(e,t,n.sessionId,r)}catch(s){throw L(e,i=>{Cd(i.raw,{sourceId:t}),i.raw.prepare("DELETE FROM sources WHERE id = ?").run(t)}),s}}function tc(e,t,n,o){let r=[],s=[],i=0;for(let c of o)s.length>0&&i+c.bytes>Ft&&(r.push(s),s=[],i=0),s.push(c),i+=c.bytes;s.length>0&&r.push(s);for(let c of r)L(e,a=>{let l=a.raw.prepare(Ad),u=a.raw.prepare(Nd);for(let f of c){let d=f.title??"",x=l.run(t,n.sessionId,n.worktree,n.agent,f.ord,f.text,d).lastInsertRowid;u.run(x,f.text,d)}})}function Cd(e,t){if(t==="all")return e.exec("INSERT INTO chunks_tri(chunks_tri) VALUES ('delete-all')"),e.exec("DELETE FROM line_units"),Number(e.prepare("DELETE FROM chunks").run().changes);let[n,o]="sourceId"in t?["source_id = ?",t.sourceId]:["source_id IN (SELECT id FROM sources WHERE label = ?)",t.label];return e.prepare(yd+" WHERE "+n).run(o),e.prepare("DELETE FROM line_units WHERE "+n).run(o),Number(e.prepare("DELETE FROM chunks WHERE "+n).run(o).changes)}function $n(e){let t=[],n="";for(let o of e)o.trim()===""||o==="\0"?(n!==""&&t.push(n),n=""):n+=o==='"'?'""':o;return n!==""&&t.push(n),t.map(o=>`"${o}"*`).join(" ")}function kd(e){return[...new Set($n(e).split(" ").filter(n=>n!==""))].join(" OR ")}var Id=new Set(["a","an","the","and","or","of","to","in","on","at","by","is","be","it","as","do","i","for","are","but","not","you","all","can","had","her","was","one","our","out","has","his","how","its","may","who","did","get","got","let","she","too","will","with","this","that","from","they","been","have","some","them","than","each","into","your","could","would","about","which","their","there","other","should","also","very","when","what","then","these","those","being","does","both","while","where","here","were","much","any","my","me","we"]);function Dd(e){let t=[...new Set($n(e).split(" ").filter(o=>o!==""))],n=t.filter(o=>!Id.has(o.slice(1,-2).toLowerCase()));return n.length>0?n:t}var It=`
148
+ AND (:scope <> 'session' OR session_id = :session_id)
149
+ AND (:scope <> 'worktree' OR worktree = :worktree)`,Np=`
150
+ WITH e AS (
151
+ SELECT seq, kind, key, path, body, created_at FROM events
152
+ WHERE created_at > :after${It}
153
+ AND (:source IS NULL OR kind = :source)
154
+ )
155
+ SELECT seq, kind, key, path, body, created_at FROM e
156
+ WHERE created_at <= IFNULL((SELECT created_at FROM e ORDER BY created_at, seq LIMIT 1 OFFSET :off), created_at)
157
+ ORDER BY created_at ASC, seq ASC`,yp=`
158
+ WITH s AS (
159
+ SELECT id, label, created_ts FROM sources
160
+ WHERE created_ts > :after${It}
161
+ AND (:source IS NULL OR label = :source)
162
+ AND label <> :reserved
163
+ )
164
+ SELECT id, label, created_ts FROM s
165
+ WHERE created_ts <= IFNULL((SELECT created_ts FROM s ORDER BY created_ts, id LIMIT 1 OFFSET :off), created_ts)
166
+ ORDER BY created_ts ASC, id ASC`;var Cp=`
167
+ SELECT EXISTS(SELECT 1 FROM events WHERE created_at > :after${It} AND (:source IS NULL OR kind = :source))
168
+ OR EXISTS(SELECT 1 FROM sources WHERE created_ts > :after${It} AND (:source IS NULL OR label = :source)
169
+ AND label <> :reserved) AS more`;var wd=`CREATE VIRTUAL TABLE r USING fts5(body, ${yt}, content='')`,Ld="INSERT INTO r(rowid, body) VALUES (?, ?)",Pd="SELECT rowid AS id, bm25(r) AS bm FROM r WHERE r MATCH ?";function G(e,t,n="all"){let o=e.map(()=>0),r=n==="any"?kd(t):$n(t);if(r===""||e.length===0)return o;let s=process.getBuiltinModule("node:sqlite");if(s===void 0)throw new R("NO_SQLITE");let i=new s.DatabaseSync(":memory:");try{i.exec(wd);let c=i.prepare(Ld);i.exec("BEGIN");for(let a=0;a<e.length;a++)c.run(a+1,e[a]);i.exec("COMMIT");for(let a of i.prepare(Pd).all(r))o[Number(a.id)-1]=-a.bm;return o}finally{i.close()}}var Ud="s";function nc(e){return Ud+e.toString(36)}function Qn(e,t,n,o){let r=0;for(;r<o.length;){let s=r,i=0;for(;s<o.length&&(s===r||i+o[s].body.length<=Ft);)i+=o[s].body.length,s++;let c=r;L(e,a=>{let l=a.raw.prepare("INSERT INTO line_units(body, source_id, session_id, ord) VALUES (?, ?, ?, ?)");for(let u=c;u<s;u++){let f=o[u];l.run(f.body,t,n,f.ord)}}),r=s}}function oc(e,t){return t===e?e:e+" "+t}function rc(e,t,n,o){let r=Dd(n).join(" OR ");return r===""||t===""?[]:e.raw.prepare("SELECT u.source_id AS source_id, u.ord AS ord, u.body AS body, -bm25(line_units) AS score, s.label AS label FROM line_units u JOIN sources s ON s.id = u.source_id WHERE line_units MATCH ? AND u.session_id = ? ORDER BY bm25(line_units) LIMIT ?").all(r,t,o).map(i=>({sourceId:Number(i.source_id),ord:Number(i.ord),label:i.label,body:i.body,score:i.score}))}function Md(e){let t=0;for(;t<e.length&&(e[t]===" "||e[t]===" ");)t++;return t}function Zn(e){let t=e.split(`
170
+ `),n=[],o=[];for(let r=0;r<t.length;r++){let s=t[r].endsWith("\r")?t[r].slice(0,-1):t[r],i=Md(s);if(i!==s.length){for(;n.length>0&&n[n.length-1].indent>=i;)n.pop();o.push({ord:r,body:[...n.map(c=>c.line),s].join(`
171
+ `)}),n.push({indent:i,line:s})}}return o}function eo(e){let t=e.indexOf(`
172
+ `);return(t<0?e:e.slice(0,t)).replaceAll("\r"," ")}function me(e,t,n,o,r){let s=Buffer.byteLength(n,"utf8");if(s<1)throw new Error("compaction: empty candidate line (DECISIONS-r9 M9).");return{section:e,seq:t.seq,turn:t.turn,text:n,bytes:s,repeatCount:o,pinned:e==="last_request",query:r}}function Fe(e){return e.length>jt?e.slice(e.length-jt):e}function Hd(){return{lastRequest:null,openErrors:[],changedFiles:[],decisions:[],earlierRequests:[],indexedSources:[]}}function sc(e,t){if(!t)return Hd();let n=e.filter(p=>p.session_id===t).sort((p,g)=>p.seq-g.seq),o=n.filter(p=>p.kind==="prompt"),r=o.length>0?o[o.length-1]:void 0,s=r===void 0?null:me("last_request",r,"now: "+eo(r.body),1,null),i=o.slice(0,o.length-1).map(p=>me("earlier_requests",p,"asked #"+p.seq+": "+eo(p.body),1,null)),c=new Map,a=new Map;for(let p of n)if(!(p.kind!=="cmd"&&p.kind!=="toolerr"||p.key===null)){if(p.ok===1){a.set(p.key,p.seq);continue}c.set(p.key,{row:p,count:(c.get(p.key)?.count??0)+1})}let l=[];for(let[p,g]of c)(a.get(p)??0)>g.row.seq||l.push(me("open_errors",g.row,"error #"+g.row.seq+" "+(g.row.tool??"")+": "+p,g.count,p));l.sort((p,g)=>p.seq-g.seq);let u=new Map;for(let p of n)p.kind!=="edit"||p.path===null||u.set(p.path,{row:p,count:(u.get(p.path)?.count??0)+1});let f=[];for(let[p,g]of u){let A=me("changed_files",g.row,"edited "+p+" x"+g.count,g.count,p);f.push({...A,editCount:g.count})}f.sort((p,g)=>p.seq-g.seq);let d=new Map;for(let p of n){if(p.kind!=="decision"||p.body==="")continue;let g=p.key??p.body;d.set(g,{row:p,count:(d.get(g)?.count??0)+1})}let x=[];for(let[p,g]of d)x.push(me("decisions",g.row,"decided #"+g.row.seq+": "+eo(g.row.body),g.count,p));x.sort((p,g)=>p.seq-g.seq);let E=n.filter(p=>p.kind==="index").map(p=>me("indexed_sources",p,"indexed "+(p.key??""),1,p.key)),m={lastRequest:s,openErrors:Fe(l),changedFiles:Fe(f),decisions:Fe(x),earlierRequests:Fe(i),indexedSources:Fe(E)},_=[...m.openErrors,...m.changedFiles,...m.decisions,...m.earlierRequests,...m.indexedSources],S=_.length+(s===null?0:1);if(S<=Gt)return m;let h=new Set(_.map(p=>p.seq).sort((p,g)=>p-g).slice(0,S-Gt));return{lastRequest:s,openErrors:m.openErrors.filter(p=>!h.has(p.seq)),changedFiles:m.changedFiles.filter(p=>!h.has(p.seq)),decisions:m.decisions.filter(p=>!h.has(p.seq)),earlierRequests:m.earlierRequests.filter(p=>!h.has(p.seq)),indexedSources:m.indexedSources.filter(p=>!h.has(p.seq))}}function vd(e){if(!Object.hasOwn(Bt,e.section))throw new Error(`compaction: "${String(e.section)}" has no weight; only toolerr, decision, prompt, edit and index rows are scored (ADR-0009 \xA73, DECISIONS-r11).`);let t=Math.max(0,e.currentTurn-e.itemTurn),n=Wt[Math.min(t,Wt.length-1)],o=1;for(let r=Math.max(1,e.repeatCount);r>1;r>>=1)o+=1;return Math.round(Bt[e.section]*n*o/Pr)}function Fd(e){switch(e){case"last_request":case"earlier_requests":return"prompt";case"open_errors":return"toolerr";case"changed_files":return"edit";case"decisions":return"decision";case"indexed_sources":return"index"}}function ic(e,t){return e.map(n=>({...n,score:vd({section:Fd(n.section),currentTurn:t,itemTurn:n.turn,repeatCount:n.repeatCount})}))}function lc(e){return e.sourceId+":"+e.ord}function wt(e){return"@"+e.label+" line "+(e.ord+1)+`:
173
+ `+e.body}function jd(e){return new Set(Ee(e.toLowerCase()))}function Gd(e,t){let n=0;for(let o of e)t.has(o)&&n++;return e.size+t.size-n===0?0:n/(e.size+t.size-n)}function no(e,t,n){let o=e.filter(l=>!t.has(lc(l))&&l.score>=rn);if(o.length===0)return[];let r=Math.max(...o.map(l=>l.score)),s=o.map(l=>jd(l.body)),i=[],c=new Set(o.map((l,u)=>u)),a=0;for(;c.size>0;){let l=-1,u=-1/0;for(let d of c){let x=0;for(let m of i)x=Math.max(x,Gd(s[d],s[m]));let E=Co*(o[d].score/r)-ko*x;E>u&&(u=E,l=d)}c.delete(l);let f=Dt(wt(o[l]))+1;a+f>n||(a+=f,i.push(l))}return i.map(l=>o[l])}var cc={text:"",seqs:[]};function Dt(e){return Buffer.byteLength(e,"utf8")}function to(e){return[e.key??"",e.path??"",e.body].filter(t=>t!=="").join(`
174
+ `)}function ac(e){return"#"+e.seq+" "+e.kind+(e.tool===null?"":" "+e.tool)+": "+to(e)}function uc(e,t,n,o=[],r=new Set){if(t.trim()==="")return cc;let s=e.filter(d=>!n.has(d.seq)&&d.kind!=="cost"&&!(d.kind==="prompt"&&d.body===t)&&to(d)!==""),i=s.length===0?[]:G(s.map(to),t,"any"),c=s.map((d,x)=>({r:d,score:i[x]})).filter(d=>d.score>=rn).sort((d,x)=>x.score-d.score||x.r.seq-d.r.seq),a=Dt(cn)+1+Dt(an),l=[];for(let{r:d}of c){let x=Dt(ac(d))+1;a+x>on||(a+=x,l.push(d))}let u=no(o,r,on-a);if(l.length===0&&u.length===0)return cc;l.sort((d,x)=>d.seq-x.seq);let f=[...l.map(ac),...u.map(wt)];return{text:[cn,...f,an].join(`
175
+ `),seqs:l.map(d=>d.seq),...u.length>0?{units:u.map(lc)}:{}}}function z(e){return Buffer.byteLength(e,"utf8")}function oo(e,t){return e.bytes>ho?"#"+e.seq+" ("+e.bytes+" B) "+t+"ctx_resume(seq:"+e.seq+")":e.text}function ro(e,t){return"more: "+t+"ctx_search(queries:"+JSON.stringify(e)+', scope:"session")'}function dc(e,t,n,o=""){let r;for(let g of e)(r===void 0||g.seq>r.seq)&&(r=g);let s=r===void 0?"":r.session_id,i=r===void 0||s===""?0:r.seq,c=sc(e,s),a=`<context_mode_state session="${s}" upto="${i}">`,l=z(ro([],o)),u=go-(z(a)+1+l+1+z(vt)),f=0,d=c.lastRequest===null?null:oo(c.lastRequest,o);d!==null&&(f+=z(d)+1);let x=ic([...c.openErrors,...c.changedFiles,...c.decisions,...c.earlierRequests,...c.indexedSources],t),E=new Map,m=[],_=[];for(;x.length>0;){let g=0,A=-1/0;for(let We=0;We<x.length;We++){let Xe=x[We],Ht=Xe.score*yo**(E.get(Xe.section)??0)/Xe.bytes;(Ht>A||Ht===A&&Xe.seq>x[g].seq)&&(g=We,A=Ht)}let k=x.splice(g,1)[0],Be=z(oo(k,o))+1;f+Be<=u?(f+=Be,m.push(k),E.set(k.section,(E.get(k.section)??0)+1)):_.push(k)}let S=[a];d!==null&&S.push(d);for(let g of["open_errors","changed_files","decisions","earlier_requests","indexed_sources"])for(let A of m.filter(k=>k.section===g).sort((k,Be)=>k.seq-Be.seq))S.push(oo(A,o));if(n!==void 0){for(let g of n.sources){let A=z(g)+1;f+A>u||(f+=A,S.push(g))}for(let g of no(n.units,new Set,u-f)){let A=wt(g);f+=z(A)+1,S.push(A)}}let h=[],p=new Set;for(let g of _.sort((A,k)=>A.seq-k.seq))if(!(g.query===null||p.has(g.query))){if(z(ro([...h,g.query],o))-l>u-f)break;h.push(g.query),p.add(g.query)}return S.push(ro(h,o),vt),S.join(`
176
+ `)}var Bd=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),Wd=new Set(["script","style"]),Xd=new TextEncoder;function Lt(e,t,n=Z){let o=Yd(e);if(o.length===0)return[];let r=Math.max(4,Math.min(Z,Math.floor(n)));if(t==="md")return Kd(o,r,r<Z);let s=t==="html"?$d(o):so(o,!1);return io(o,s,t!=="text",r,r<Z)}function Kd(e,t,n){let o=[],r=[],s="",i=[],c=(l,u)=>{o.push({ord:o.length,text:l,bytes:u,title:s})},a=()=>{if(i.length!==0){for(let l of io(e,i,!0,t,n))c(l.text,l.bytes);i=[]}};for(let l of so(e,!0)){if(l.heading!==void 0){for(a();r.length>0&&r[r.length-1].level>=l.heading.level;)r.pop();r.push(l.heading),s=r.map(u=>u.text).join(" > ")}if(l.fence!==void 0&&$(e.slice(l.start,l.end))>t){let u=qd(e,l,l.fence,t);if(u!==void 0){a();for(let f of u)c(f,$(f));continue}}i.push(l)}return a(),o}function qd(e,t,n,o){let r=e.slice(t.start,n.openEnd),s=n.closeStart>=0?e.slice(n.closeStart,t.end):n.fence,i=n.closeStart>=0?Math.max(n.openEnd+1,n.closeStart-1):t.end,c=e.slice(Math.min(n.openEnd+1,i),i),a=o-$(r)-$(s)-2;if(!(a<16||c.length===0))return io(c,so(c,!1),!0,a,!0).map(l=>r+`
177
+ `+l.text+`
178
+ `+s)}function Yd(e){let t=e.split(`\r
179
+ `).join(`
180
+ `);return t.startsWith("\uFEFF")?t.slice(1):t}function so(e,t){let n=[],o=-1,r=-1,s=!1,i="",c,a,l=()=>{if(o>=0){let d={start:o,end:r};c!==void 0&&(d.heading=c),a!==void 0&&(d.fence=a),n.push(d)}o=-1,c=void 0,a=void 0},u=(d,x,E)=>{o<0&&(o=d),r=x,s=E},f=0;for(;f<=e.length;){let d=e.indexOf(`
181
+ `,f),x=d<0?e.length:d,E=e.slice(f,x);if(i!=="")u(f,x,!1),zd(E,i)&&(i="",t&&a!==void 0&&(a.closeStart=f,l()));else if(E.length===0)l();else{let m=t?Vd(E):"",_=t&&m===""?Jd(E):void 0,S=t&&m===""&&_===void 0&&E.includes("|");t&&o>=0&&(S!==s||m!==""||_!==void 0)&&l(),u(f,x,S),i=m,m!==""&&(a={fence:m,openEnd:x,closeStart:-1}),_!==void 0&&(c=_,l())}f=x+1}return l(),n}function Jd(e){let t=0;for(;t<e.length&&t<4&&e[t]===" ";)t+=1;if(t>3)return;let n=0;for(;t+n<e.length&&e[t+n]==="#";)n+=1;if(n<1||n>6)return;let o=e[t+n];if(o!==void 0&&o!==" "&&o!==" ")return;let r=e.slice(t+n).trim(),s=r.length;for(;s>0&&r[s-1]==="#";)s-=1;return s===0?r="":s<r.length&&(r[s-1]===" "||r[s-1]===" ")&&(r=r.slice(0,s).trim()),{level:n,text:r}}function Vd(e){let t=e.trimStart();if(!t.startsWith("```")&&!t.startsWith("~~~"))return"";let n=0;for(;n<t.length&&t[n]===t[0];)n+=1;return t.slice(0,n)}function zd(e,t){let n=e.trim();if(n.length<t.length)return!1;for(let o=0;o<n.length;o+=1)if(n[o]!==t[0])return!1;return!0}function $d(e){let t=[],n=new Map,o=0,r=0,s=0,i=c=>{xc(t,e,r,c),r=c};for(;s<e.length;){if(e[s]!=="<"){s+=1;continue}if(e.startsWith("<!--",s)){let a=e.indexOf("-->",s+4);s=a<0?e.length:a+3;continue}let c=Qd(e,s);if(c===void 0){s+=1;continue}if(s=c.end,c.close){let a=n.get(c.name)??0;if(a===0)continue;n.set(c.name,a-1),o-=1,o===0&&i(s);continue}if(!(c.selfClose||Bd.has(c.name))){if(Wd.has(c.name)){s=Zd(e,s,c.name),o===0&&i(s);continue}n.set(c.name,(n.get(c.name)??0)+1),o+=1}}return xc(t,e,r,e.length),t}function Ec(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"}function mc(e){return Ec(e)||e>="0"&&e<="9"||e==="-"||e===":"}function Qd(e,t){let n=t+1,o=e[n]==="/";if(o&&(n+=1),n>=e.length||!Ec(e[n]))return;let r=n;for(;n<e.length&&mc(e[n]);)n+=1;let s=e.slice(r,n).toLowerCase(),i="";for(;n<e.length;){let c=e[n];if(i!=="")c===i&&(i="");else if(c==='"'||c==="'")i=c;else if(c===">")break;n+=1}if(!(n>=e.length))return{name:s,close:o,selfClose:e[n-1]==="/",end:n+1}}function Zd(e,t,n){let o=e.indexOf("</",t);for(;o>=0;){let r=o+2+n.length;if(e.slice(o+2,r).toLowerCase()===n&&(r>=e.length||!mc(e[r]))){let i=e.indexOf(">",r);return i<0?e.length:i+1}o=e.indexOf("</",o+2)}return e.length}function fc(e){return e===" "||e===`
182
+ `||e===" "||e==="\f"||e==="\r"}function xc(e,t,n,o){let r=n,s=o;for(;r<s&&fc(t[r]);)r+=1;for(;s>r&&fc(t[s-1]);)s-=1;r<s&&e.push({start:r,end:s})}function $(e){return Buffer.byteLength(e,"utf8")}function pc(e,t,n,o){let r=Math.min(n,t+o.length);r<n&&[...e.slice(r-1,r+1)].length===1&&(r-=1);let s=Xd.encodeInto(e.slice(t,r),o);return{end:t+s.read,written:s.written}}function io(e,t,n,o,r){let s=[],i=new Uint8Array(o),c,a,l=0,u=(f,d,x)=>{s.push({ord:s.length,text:e.slice(f,d),bytes:x})};for(let f of t){if(a!==void 0&&!n&&(u(a.start,a.end,l),a=void 0),a!==void 0){let E=$(e.slice(a.end,f.end));if(l+E<=o){a.end=f.end,l+=E;continue}u(a.start,a.end,l),a=void 0}let d=f.start,x=$(e.slice(f.start,f.end));for(;x>o;){let E=pc(e,d,f.end,i),m=r?e.lastIndexOf(`
183
+ `,E.end-1):-1;if(m>d){let _=$(e.slice(d,m+1));u(d,m+1,_),d=m+1,x-=_;continue}if(r){let _=e.indexOf(`
184
+ `,d),S=_<0||_>=f.end?f.end:_+1,h=$(e.slice(d,S));if(h<=Z){u(d,S,h),d=S,x-=h;continue}c??=new Uint8Array(Z);let p=pc(e,d,S,c);u(d,p.end,p.written),d=p.end,x-=p.written;continue}u(d,E.end,E.written),d=E.end,x-=E.written}d>=f.end||(a={start:d,end:f.end},l=x)}return a!==void 0&&u(a.start,a.end,l),s}var e0=`
185
+ `,t0=1;function _c(e,t,n,o,r){return n0(e,t,n,o,r)}function n0(e,t,n,o,r){if(e.length===0)return{text:"",more:null};let s=e.map(d=>d.text),i=r===void 0?G(s,t):G(s,r,"any"),c=e.map((d,x)=>x).sort((d,x)=>i[x]-i[d]||e[x].ord-e[d].ord),a=[],l=0,u=!1;for(let d of c){let x=e[d].bytes+(a.length>0?t0:0);if(l+x>n){u=!0;continue}a.push(e[d]),l+=x}return a.sort((d,x)=>d.ord-x.ord),{text:a.map(d=>d.text).join(e0),more:u?co(t,o):null}}function co(e,t){let n=t===void 0?"":", source:"+JSON.stringify(t);return"ctx_search({queries:["+JSON.stringify(e)+"]"+n+"})"}var gc=20,P=2,hc=9,bc=8,o0=.9,r0=.5,s0=64,i0=2,c0=4,ao=`
186
+ `,a0="(absent)",B=e=>Buffer.byteLength(e,"utf8");function Sc(e,t,n){let o=d0(e,t)??p0(e,t)??_0(e);if(o===null||t.trim()==="")return null;let r=o.direct===!0?o.units.map(()=>1):G(o.units.map(l=>l.rank),t,"any"),s=o.units.map((l,u)=>u).filter(l=>r[l]>0).sort((l,u)=>r[u]-r[l]||o.units[l].pos-o.units[u].pos),i=[],c=0;for(let l of s){let u=i.length>0?B(ao):0,f=o.units[l].render(n-c-u);f===null||c+u+B(f)>n||(i.push({pos:o.units[l].pos,text:f}),c+=u+B(f))}if(i.length===0)return null;i.sort((l,u)=>l.pos-u.pos);let a=i.map(l=>l.text);return c+B(ao)+B(o.header)<=n&&a.unshift(o.header),a.join(ao)}function l0(e){for(let t=0;t<e.length;t++){let n=e[t];if(n!==" "&&n!==`
187
+ `&&n!=="\r"&&n!==" ")return n}return""}function u0(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Tc(e,t,n){if(n.size<2||n.size>bc)return[];let o=[...n.entries()].sort((i,c)=>c[1]-i[1]);if(n.size<=P+1)return o[0][1]<o0*e||e-o[0][1]>P?[]:o.slice(1).flatMap(([i])=>t.get(i)??[]);let r=o.filter(([,i])=>i>P),s=o.filter(([,i])=>i<=P);return r.length<2||s.length===0?[]:s.flatMap(([i])=>t.get(i)??[])}function Rc(e){if(l0(e)!=="[")return null;let t;try{t=JSON.parse(e)}catch{return null}if(!Array.isArray(t)||t.length<gc||!t.every(u0))return null;let n=t,o=[],r=new Set;for(let s of n)for(let i of Object.keys(s))r.has(i)||(r.add(i),o.push(i));return{objs:n,keys:o}}var Oc=(e,t)=>e+" objects {"+t.join(",")+"}";function d0(e,t){let n=Rc(e);if(n===null)return null;let{objs:o,keys:r}=n,s=new Map;for(let l of r){let u=new Map,f=new Map,d=!0;for(let x=0;x<o.length&&d;x++){let E=l in o[x]?o[x][l]:void 0;if(typeof E=="object"&&E!==null){d=!1;break}let m=E===void 0?a0:JSON.stringify(E);f.set(m,(f.get(m)??0)+1);let _=u.get(m)??[];if(_.length<=P&&_.push(x),u.set(m,_),f.size>bc)break}if(d)for(let x of Tc(o.length,u,f))s.set(x,[...s.get(x)??[],l])}if(s.size===0||s.size>hc)return null;let i=G(r,t,"any"),c=new Set(r.filter((l,u)=>i[u]>0)),a=[...s.entries()].map(([l,u])=>({pos:l,rank:JSON.stringify(o[l]),render:f=>Ac(l,o[l],u,c,f)}));return{header:Oc(o.length,r)+", "+s.size+" rare:",units:a}}function Ac(e,t,n,o,r){let s="["+e+"] ",i=f0(t,n,o,r-B(s));return i===null?null:s+i}function f0(e,t,n,o){let r=JSON.stringify(e);if(B(r)<=o)return r;let s=Object.keys(e),i=f=>t.includes(f)?0:n.has(f)?1:typeof e[f]!="object"||e[f]===null?2:3,c=[...s].sort((f,d)=>i(f)-i(d)||s.indexOf(f)-s.indexOf(d)),a=f=>JSON.stringify(f)+":"+JSON.stringify(e[f]),l=new Set,u=2;for(let f of c){let d=B(a(f))+(l.size>0?1:0);u+d>o||(l.add(f),u+=d)}return t.every(f=>l.has(f))?"{"+s.filter(f=>l.has(f)).map(a).join(",")+"}":null}function x0(e,t){let n=G(e,t,"any");return new Set(e.filter((o,r)=>n[r]>0))}function p0(e,t){let n=Rc(e);if(n===null)return null;let{objs:o,keys:r}=n,s=x0(r,t),i=new Map,c=0;for(let l of r){if(!s.has(l)||c>=i0||!o.every(d=>typeof d[l]=="number"&&Number.isFinite(d[l])))continue;let u=0,f=0;for(let d=1;d<o.length;d++)o[d][l]>o[u][l]&&(u=d),o[d][l]<o[f][l]&&(f=d);u!==f&&(c++,i.set(u,l),i.set(f,l))}if(i.size===0)return null;let a=[...i.entries()].map(([l,u])=>({pos:l,rank:"",render:f=>Ac(l,o[l],[u],s,f)}));return{header:Oc(o.length,r)+", extremes of "+[...new Set(i.values())].join(",")+":",units:a,direct:!0}}function E0(e){for(let t=0;t<e.length;t++)if(e[t]>="0"&&e[t]<="9")return!0;return!1}function m0(e,t){let n=0;for(let o=0;o<e.length;o++)(e[o]===t[o]||e[o]==="<*>"||t[o]==="<*>")&&n++;return n/e.length}function _0(e){let t=e.split(`
188
+ `);if(t.length>0&&t[t.length-1]===""&&t.pop(),t.length<gc)return null;let n=new Map,o=[];for(let a=0;a<t.length;a++){let l=t[a].split(" ").filter(E=>E!==""),u=l.map(E=>E0(E)?"<*>":E),f=u.length+" "+(u[0]??""),d=n.get(f)??[],x;for(let E of d)if(m0(E.tpl,u)>=r0){x=E;break}if(x===void 0){if(x={tpl:[...u],count:0,lines:[],pos:l.map(()=>({counts:new Map,totals:new Map}))},d.push(x),n.set(f,d),o.push(x),o.length>s0)return null}else for(let E=0;E<x.tpl.length;E++)x.tpl[E]!==u[E]&&(x.tpl[E]="<*>");x.count++,x.lines.length<=P&&x.lines.push(a);for(let E=0;E<x.pos.length;E++){let m=x.pos[E];if(m===null)continue;m.totals.set(l[E],(m.totals.get(l[E])??0)+1);let _=m.counts.get(l[E])??[];_.length<=P&&_.push(a),m.counts.set(l[E],_),m.totals.size>P+1&&(x.pos[E]=null)}}let r=o.filter(a=>a.count>P);if(r.length===0||r.length>c0||r.some(a=>a.tpl.every(l=>l==="<*>")))return null;let s=new Set(o.filter(a=>a.count<=P).flatMap(a=>a.lines));for(let a of r)for(let l of a.pos)if(l!==null)for(let u of Tc(a.count,l.counts,l.totals))s.add(u);if(s.size===0||s.size>hc)return null;let i=t.length+" lines, "+s.size+" rare:",c=[...s].sort((a,l)=>a-l).map(a=>{let l=a+1+": "+t[a];return{pos:a,rank:t[a],render:u=>B(l)<=u?l:null}});return{header:i,units:c}}function g0(e,t,n,o,r,s,i,c=Lt(s,i)){return{sourceId:Zi(e,{projectKey:t.projectKey,sessionId:n,worktree:t.worktree,agent:t.agent,kind:o,label:r,bytes:Buffer.byteLength(s,"utf8"),chunkCount:c.length,createdAt:Date.now()},c),chunks:c.length}}function lo(e,t,n,o,r,s,i){return g0(e,t,n,"content",o,r,s,i)}async function h0(e,t){try{let n=await N(e);kt(n,t)}catch(n){let o=n instanceof Error?n.message:String(n);process.stderr.write("hooks: journal write failed: "+o+`
189
+ `)}}function Pt(e,t,n){h0(e,n)}function Nc(e,t,n){let o=new Set(Ee(t.toLowerCase()));for(let i of Ee(e.toLowerCase()))o.delete(i);if(o.size===0)return"";let r=new Map;for(let i of Ee(n.toLowerCase()))o.has(i)&&r.set(i,(r.get(i)??0)+1);return[...r.entries()].sort((i,c)=>i[1]-c[1]||(i[0]<c[0]?-1:i[0]>c[0]?1:0)).slice(0,No).map(i=>i[0]).join(" ")}function je(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function b0(e){return typeof e=="string"?e:Array.isArray(e)?e.filter(t=>typeof t=="string"&&t!=="").join(Mr):""}function S0(e){return Array.isArray(e)?e.filter(je).filter(t=>typeof t.question=="string").map(t=>[t.question,t.label]):je(e)?Object.entries(e):[]}function Cc(e){let t;try{t=JSON.parse(e)}catch{return[]}if(!je(t))return[];let n=[];for(let[o,r]of S0(t[Ur])){let s=b0(r);o===""||s===""||n.push({key:o,body:"Q: "+o+" \u2192 A: "+s})}return n}function kc(e){let t=e.questions;if(!Array.isArray(t))return[];let n=[];for(let o of t)if(!(!je(o)||!Array.isArray(o.options)))for(let r of o.options)je(r)&&typeof r.label=="string"&&r.label!==""&&n.push(r.label);return n}function yc(e){return e.trim().toLowerCase()}function Ic(e,t,n){let o=yc(e);if(o==="")return null;let r=t.find(s=>yc(s)===o);return r===void 0?null:{key:rt,body:"A: "+r+`
190
+ ref: #`+n}}function T0(e,t){return"hint:"+e+":"+t}function R0(e,t){return V(e,t)!==null?!1:(j(e,t,"1"),!0)}function O0(e,t,n){let o=V(e,t),r=(o===null?0:Number.parseInt(o,10))+1;return j(e,t,String(r)),(r-1)%n===0}function Ut(e,t,n,o){if(t==="")return!1;let r=T0(t,n),s=i=>o===void 0?R0(i,r):O0(i,r,o);return e.raw.isTransaction?s(e):L(e,s)}var{read:A0,writeSync:N0}=process.getBuiltinModule("node:fs"),Dc=65536;function y0(e){let t=Buffer.allocUnsafe(Dc);return new Promise(n=>{let o=()=>{A0(0,t,0,Dc,null,(r,s)=>{if(r)return n(r.code==="EOF");if(s===0)return n(!0);e.push(Buffer.from(t.subarray(0,s))),o()})};o()})}async function uo(){let e=[];if(!await y0(e))for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf8")}function fo(e){let t=Buffer.from(e,"utf8"),n=0;try{for(;n<t.length;)n+=N0(1,t,n,t.length-n)}catch(o){if(o.code!=="EAGAIN")throw o;process.stdout.write(t.subarray(n))}}var{readFileSync:C0}=process.getBuiltinModule("node:fs"),O={kind:"allow"},D0={stdout:"",exitCode:0},w0=48;function L0(e){return ge.includes(e)}function _e(e){return e instanceof Error?e.message:String(e)}function Ge(e){return typeof e=="string"?e:""}async function Lc(e,t,n){if(!L0(e))return process.stderr.write("hooks: unknown agent "+JSON.stringify(e)+`
191
+ `),D0;let o=ye(e),r;try{r=o.decode(t)}catch(c){return process.stderr.write("hooks: decode failed: "+_e(c)+`
192
+ `),o.encode({event:"PreToolUse",agent:e,sessionId:"",cwd:"",turn:0},O)}let s;try{let c=e==="vscode"?[Je,r.cwd]:process.argv;s=Fi(e,{env:n,argv:c,cwd:r.cwd,piCwd:e==="pi"?r.cwd:void 0})}catch(c){return process.stderr.write("hooks: no project: "+String(c.code??"ERROR")+" "+_e(c)+`
193
+ `),o.encode(r,O)}let i;try{i=await P0(r,o,s,n)}catch(c){process.stderr.write("hooks: "+_e(c)+`
194
+ `),i=O}return o.encode(r,i)}function P0(e,t,n,o){switch(e.event){case"SessionStart":return U0(e,t,n);case"UserPromptSubmit":return M0(e,t,n);case"PreToolUse":return X0(e,t,n,o);case"PostToolUse":return z0(e,t,n,o);case"PreCompact":return nf(e,t,n);case"Usage":return of(e,n)}return Promise.resolve(O)}function Pc(e,t){return e.split(rr).join(t.toolNamePrefix)}function po(e,t,n){return n.compactSummary==="host"?U(Io,n.toolNamePrefix):dc(Jn(e,t.sessionId),t.turn??0,void 0,n.toolNamePrefix)}async function U0(e,t,n){if(e.source==="compact"&&ft(t)&&Uc(await N(n),e.sessionId),e.source==="compact"&&t.compactDelivery==="sessionstart"){let r=await N(n);return Ut(r,e.sessionId,en)?{kind:"hint",text:po(r,e,t),onceKey:en}:O}let o=await N(n);return t.compactDelivery==="opencode-cache"&&Ct(o,tt+e.sessionId)!==null?{kind:"hint",text:po(o,e,t),onceKey:tn}:Ut(o,e.sessionId,Oe)?{kind:"hint",text:Pc(ln,t),onceKey:Oe}:O}async function M0(e,t,n){let o=e.prompt??"",r=await H0(e,t,n);if(Pt(n,e.sessionId,{session_id:e.sessionId,worktree:n.worktree,agent:e.agent,kind:"prompt",tool:null,key:null,path:null,ok:1,exit_code:null,bytes:Buffer.byteLength(o),body:o,turn:e.turn??0,sandbox_bytes:0,returned_bytes:0}),B0(e,n,o),t.compactDelivery==="pending-flag"){let s=await N(n);if(Ct(s,tt+e.sessionId)!==null)return{kind:"hint",text:po(s,e,t),onceKey:tn}}return r!==null?r:j0(e,t,n,o)}async function H0(e,t,n){if(t.eventMap.SessionStart!==void 0||e.sessionId==="")return null;let o=await N(n);return Vi(o,e.sessionId)||!Ut(o,e.sessionId,Oe)||!Ji(o,n.worktree,e.agent)?null:{kind:"hint",text:Pc(ln,t),onceKey:Oe}}function Uc(e,t){t!==""&&j(e,sn+t,nn)}function v0(e){if(e===null)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(n=>typeof n=="number"):[]}catch{return[]}}function F0(e){if(e===null)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(n=>typeof n=="string"):[]}catch{return[]}}async function j0(e,t,n,o){if(!ft(t)||e.sessionId==="")return O;let r=await N(n);if(V(r,sn+e.sessionId)===null)return O;let s=Cr+e.sessionId,i=v0(V(r,s)),c=Nr+e.sessionId,a=F0(V(r,c)),l=qi(r,e.sessionId),u=rc(r,e.sessionId,oc(o,l),yr),f=uc(Yi(r,e.sessionId,n.worktree,Ar),o,new Set(i),u,new Set(a));return f.text===""?O:(f.seqs.length>0&&j(r,s,JSON.stringify([...i,...f.seqs])),f.units!==void 0&&j(r,c,JSON.stringify([...a,...f.units])),{kind:"hint",text:f.text,onceKey:kr})}function Mc(e){return ot+":"+rt+":"+e}function G0(e){try{let t=JSON.parse(e);if(typeof t!="object"||t===null)return null;let{seq:n,labels:o}=t;return typeof n!="number"||!Array.isArray(o)?null:{seq:n,labels:o.filter(r=>typeof r=="string")}}catch{return null}}function B0(e,t,n){if(e.sessionId==="")return;let o=Mc(e.sessionId);N(t).then(r=>{if(V(r,o)===null)return;let s=Ct(r,o),i=s===null?null:G0(s);if(i===null)return;let c=Ic(n,i.labels,i.seq);c!==null&&Hc(r,e,t,[c])}).catch(r=>{process.stderr.write("hooks: decision write failed: "+_e(r)+`
195
+ `)})}function Hc(e,t,n,o){for(let r of o)kt(e,{session_id:t.sessionId,worktree:n.worktree,agent:t.agent,kind:"decision",tool:un,key:r.key,path:null,ok:1,exit_code:null,bytes:Buffer.byteLength(r.body),body:r.body,turn:t.turn??0,sandbox_bytes:0,returned_bytes:0}),lo(e,n,t.sessionId,ot,r.body,"text")}function W0(e,t,n,o){let r=Cc(o),s=r.length===0?kc(n.input):[];r.length===0&&s.length===0||N(t).then(i=>{if(r.length>0)return Hc(i,e,t,r);let c=Jn(i,e.sessionId,"prompt"),a=c[c.length-1];a===void 0||e.sessionId===""||j(i,Mc(e.sessionId),JSON.stringify({seq:a.seq,labels:s}))}).catch(i=>{process.stderr.write("hooks: decision write failed: "+_e(i)+`
196
+ `)})}async function X0(e,t,n,o){let r=Oi(n.worktree,e.agent),s=Ii(e,t,r),i=s;return s.kind==="deny"&&pe(e)&&Pn(e,Un(e,{projectDir:n.worktree,env:o}))==="B"&&(i=q0(e,t,s,r)),i}function vc(e,t){return e.canonicalName===Tr||t.nativeTools.shell.includes(e.name)}function K0(e,t){return e.startsWith(Te)||e===U(Qe,t.toolNamePrefix)||e===U(Ze,t.toolNamePrefix)}function xo(e){return Buffer.from(e,"utf8").toString("base64url")}function q0(e,t,n,o){let r=e.tool;if(r===void 0||!vc(r,t)||K0(n.reason,t))return n;let s=r.input.command;if(typeof s!="string")return n;let i='"'+I0(k0(process.argv[1]??""),Dr)+'"',c=[wr,i,xo(s),xo(JSON.stringify(o??[])),xo(Ge(r.input.description))].join(" ");return{kind:"deny",reason:Lr,rewritten:c}}function Y0(e,t,n){return n?"toolerr":Rr.includes(e.canonicalName)||(t.nativeTools.edit??[]).includes(e.name)?"edit":vc(e,t)?"cmd":null}function Eo(e){if(Array.isArray(e))return"["+e.map(Eo).join(",")+"]";if(typeof e=="object"&&e!==null){let t=e;return"{"+Object.keys(t).filter(o=>t[o]!==void 0).sort().map(o=>JSON.stringify(o)+":"+Eo(t[o])).join(",")+"}"}return JSON.stringify(e)??"null"}function J0(e){let t=e.indexOf(`
197
+ `),n=t<0?e:e.slice(0,t);if(!n.startsWith(Zt))return null;let o=0,r=0;for(let s of n.slice(Zt.length)){let i=s.charCodeAt(0)-w0;if(i<0||i>9)break;o=o*10+i,r++}return r===0?null:o}function V0(e){for(let t of Or)if(typeof e[t]=="string")return e[t];return null}async function z0(e,t,n,o){let r=e.tool;if(r===void 0||r.canonicalName.startsWith(Sr))return O;let s=e.result??{isError:!1,bytes:0},i=Q0(s);s.persistedPath!==void 0&&(s.bytes=Buffer.byteLength(i)),r.canonicalName===un&&W0(e,n,r,i);let c=Y0(r,t,s.isError);if(c!==null){let g=c==="cmd"?Xi(r.canonicalName,Ge(r.input.command)):c==="toolerr"?r.canonicalName+":"+Eo(r.input):null;Pt(n,e.sessionId,{session_id:e.sessionId,worktree:n.worktree,agent:e.agent,kind:c,tool:r.canonicalName,key:g,path:V0(r.input),ok:s.isError?0:1,exit_code:J0(i),bytes:s.bytes,body:i,turn:e.turn??0,sandbox_bytes:s.bytes,returned_bytes:s.bytes})}if(s.bytes<=So||s.keep===!0)return O;let a;if(pe(e)){if(Pn(e,Un(e,{projectDir:n.worktree,env:o}))==="A")return O;a=Ir+r.canonicalName+":"+String(e.turn??0)}else{if(!Ne(t))return O;a=ef(r,e)}let l=[r.input.description,r.input.command,r.input.file_path,r.input.pattern,r.input.url].map(Ge).find(g=>g.trim()!=="")??"",u=Lt(i,"text",Oo),f=await N(n),d;s.bytes<=bo?(d=lo(f,n,e.sessionId,a,i,"text",u).sourceId,Qn(f,d,e.sessionId,Zn(i))):(d=zn(f,Fc(n,e.sessionId,a),u),tf(n,e.sessionId,d,a,i,u));let x=nc(d),E=await Z0(n,e.sessionId),m=E.trim()===""?void 0:l+" "+E,_=Ao(l,x,s.bytes,t.toolNamePrefix,Nc(l,E,i)),S=$0(_,co(l,a)),h=Sc(i,m??l,Ro);if(h!==null)return{kind:"replace",output:wc(h,_)};let p=_c(u,l,S,a,m);return{kind:"replace",output:p.more!==null?wc(p.text,_):p.text}}function wc(e,t){return e===""?t:e+`
198
+ `+t}function $0(e,t){return Math.max(0,To+Buffer.byteLength(`
199
+ `+t)-1-Buffer.byteLength(e))}function Q0(e){let t=e.text??"";if(e.persistedPath===void 0)return t;try{return C0(e.persistedPath,"utf8")}catch{return t}}async function Z0(e,t){try{return Ki(await N(e),t)}catch{return""}}function ef(e,t){let n=Ge(e.input.command)??Ge(e.input.file_path)??"",o=n.indexOf(`
200
+ `);return(e.canonicalName+":"+(o<0?n:n.slice(0,o))).slice(0,jo)+"#"+(e.callId??String(t.turn??0))}function tf(e,t,n,o,r,s){N(e).then(i=>{ec(i,n,Fc(e,t,o),s,Zn(r))}).catch(i=>{process.stderr.write("hooks: index write failed: "+_e(i)+`
201
+ `)})}function Fc(e,t,n){return{sessionId:t,worktree:e.worktree,agent:e.agent,kind:"content",label:n,createdAt:Date.now()}}async function nf(e,t,n){let o=await N(n);return j(o,tt+e.sessionId,nn),ft(t)&&Uc(o,e.sessionId),O}function of(e,t){return Pt(t,e.sessionId,{session_id:e.sessionId,worktree:t.worktree,agent:e.agent,kind:"cost",tool:null,key:null,path:null,ok:1,exit_code:null,bytes:0,body:"",turn:e.turn??0,sandbox_bytes:0,returned_bytes:0}),Promise.resolve(O)}var mo={stdout:"",exitCode:0};function rf(e){return ge.includes(e)}function Mt(e){process.exitCode=e.exitCode,e.stdout!==""&&fo(e.stdout),e.stderr!==void 0&&e.stderr!==""&&process.stderr.write(e.stderr+`
202
+ `)}async function sf(e,t){let n=e.indexOf(nt),o=n>=0?e[n+1]??"":"";if(!rf(o))return console.error("hooks: unknown "+nt+" "+JSON.stringify(o)+". Fix: pass "+nt+" with one of "+ge.join(", ")+"."),Mt(mo);let r;try{r=JSON.parse(await uo())}catch(s){return console.error("hooks: "+s.message),Mt(mo)}try{return Mt(await Lc(o,r,t))}catch(s){return console.error("hooks: "+s.message),Mt(mo)}}sf(process.argv.slice(2),process.env);export{sf as main};