@mxalbert/context-mode 2.0.0

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 (365) hide show
  1. package/.claude-plugin/marketplace.json +33 -0
  2. package/.claude-plugin/plugin.json +31 -0
  3. package/.codex-plugin/hooks.json +65 -0
  4. package/.codex-plugin/mcp.json +13 -0
  5. package/.codex-plugin/plugin.json +31 -0
  6. package/.openclaw-plugin/index.ts +12 -0
  7. package/.openclaw-plugin/openclaw.plugin.json +38 -0
  8. package/.openclaw-plugin/package.json +28 -0
  9. package/LICENSE +94 -0
  10. package/README.md +1619 -0
  11. package/bin/statusline.mjs +378 -0
  12. package/build/adapters/antigravity/index.d.ts +51 -0
  13. package/build/adapters/antigravity/index.js +169 -0
  14. package/build/adapters/antigravity-cli/index.d.ts +51 -0
  15. package/build/adapters/antigravity-cli/index.js +342 -0
  16. package/build/adapters/base.d.ts +92 -0
  17. package/build/adapters/base.js +135 -0
  18. package/build/adapters/claude-code/config.d.ts +8 -0
  19. package/build/adapters/claude-code/config.js +8 -0
  20. package/build/adapters/claude-code/hooks.d.ts +106 -0
  21. package/build/adapters/claude-code/hooks.js +183 -0
  22. package/build/adapters/claude-code/index.d.ts +80 -0
  23. package/build/adapters/claude-code/index.js +569 -0
  24. package/build/adapters/claude-code-base.d.ts +49 -0
  25. package/build/adapters/claude-code-base.js +113 -0
  26. package/build/adapters/client-map.d.ts +10 -0
  27. package/build/adapters/client-map.js +42 -0
  28. package/build/adapters/codex/config.d.ts +8 -0
  29. package/build/adapters/codex/config.js +8 -0
  30. package/build/adapters/codex/hooks.d.ts +55 -0
  31. package/build/adapters/codex/hooks.js +64 -0
  32. package/build/adapters/codex/index.d.ts +87 -0
  33. package/build/adapters/codex/index.js +995 -0
  34. package/build/adapters/codex/paths.d.ts +1 -0
  35. package/build/adapters/codex/paths.js +12 -0
  36. package/build/adapters/codex/usage.d.ts +107 -0
  37. package/build/adapters/codex/usage.js +227 -0
  38. package/build/adapters/copilot-base.d.ts +94 -0
  39. package/build/adapters/copilot-base.js +297 -0
  40. package/build/adapters/copilot-cli/hooks.d.ts +33 -0
  41. package/build/adapters/copilot-cli/hooks.js +64 -0
  42. package/build/adapters/copilot-cli/index.d.ts +48 -0
  43. package/build/adapters/copilot-cli/index.js +341 -0
  44. package/build/adapters/cursor/config.d.ts +4 -0
  45. package/build/adapters/cursor/config.js +4 -0
  46. package/build/adapters/cursor/hooks.d.ts +55 -0
  47. package/build/adapters/cursor/hooks.js +82 -0
  48. package/build/adapters/cursor/index.d.ts +64 -0
  49. package/build/adapters/cursor/index.js +517 -0
  50. package/build/adapters/detect.d.ts +136 -0
  51. package/build/adapters/detect.js +623 -0
  52. package/build/adapters/gemini-cli/config.d.ts +8 -0
  53. package/build/adapters/gemini-cli/config.js +8 -0
  54. package/build/adapters/gemini-cli/hooks.d.ts +83 -0
  55. package/build/adapters/gemini-cli/hooks.js +115 -0
  56. package/build/adapters/gemini-cli/index.d.ts +80 -0
  57. package/build/adapters/gemini-cli/index.js +483 -0
  58. package/build/adapters/jetbrains-copilot/config.d.ts +8 -0
  59. package/build/adapters/jetbrains-copilot/config.js +8 -0
  60. package/build/adapters/jetbrains-copilot/hooks.d.ts +59 -0
  61. package/build/adapters/jetbrains-copilot/hooks.js +87 -0
  62. package/build/adapters/jetbrains-copilot/index.d.ts +31 -0
  63. package/build/adapters/jetbrains-copilot/index.js +131 -0
  64. package/build/adapters/kimi/config.d.ts +8 -0
  65. package/build/adapters/kimi/config.js +8 -0
  66. package/build/adapters/kimi/hooks.d.ts +28 -0
  67. package/build/adapters/kimi/hooks.js +34 -0
  68. package/build/adapters/kimi/index.d.ts +66 -0
  69. package/build/adapters/kimi/index.js +537 -0
  70. package/build/adapters/kimi/paths.d.ts +21 -0
  71. package/build/adapters/kimi/paths.js +52 -0
  72. package/build/adapters/kimi/usage.d.ts +82 -0
  73. package/build/adapters/kimi/usage.js +217 -0
  74. package/build/adapters/kiro/hooks.d.ts +61 -0
  75. package/build/adapters/kiro/hooks.js +94 -0
  76. package/build/adapters/kiro/index.d.ts +61 -0
  77. package/build/adapters/kiro/index.js +301 -0
  78. package/build/adapters/omp/index.d.ts +65 -0
  79. package/build/adapters/omp/index.js +182 -0
  80. package/build/adapters/omp/plugin.d.ts +81 -0
  81. package/build/adapters/omp/plugin.js +331 -0
  82. package/build/adapters/omp/usage.d.ts +49 -0
  83. package/build/adapters/omp/usage.js +110 -0
  84. package/build/adapters/openclaw/config.d.ts +8 -0
  85. package/build/adapters/openclaw/config.js +8 -0
  86. package/build/adapters/openclaw/hooks.d.ts +50 -0
  87. package/build/adapters/openclaw/hooks.js +61 -0
  88. package/build/adapters/openclaw/index.d.ts +74 -0
  89. package/build/adapters/openclaw/index.js +439 -0
  90. package/build/adapters/openclaw/mcp-tools.d.ts +54 -0
  91. package/build/adapters/openclaw/mcp-tools.js +207 -0
  92. package/build/adapters/openclaw/plugin.d.ts +141 -0
  93. package/build/adapters/openclaw/plugin.js +818 -0
  94. package/build/adapters/openclaw/session-db.d.ts +55 -0
  95. package/build/adapters/openclaw/session-db.js +88 -0
  96. package/build/adapters/openclaw/usage.d.ts +34 -0
  97. package/build/adapters/openclaw/usage.js +52 -0
  98. package/build/adapters/openclaw/workspace-router.d.ts +29 -0
  99. package/build/adapters/openclaw/workspace-router.js +64 -0
  100. package/build/adapters/opencode/config.d.ts +8 -0
  101. package/build/adapters/opencode/config.js +8 -0
  102. package/build/adapters/opencode/hooks.d.ts +38 -0
  103. package/build/adapters/opencode/hooks.js +50 -0
  104. package/build/adapters/opencode/index.d.ts +144 -0
  105. package/build/adapters/opencode/index.js +638 -0
  106. package/build/adapters/opencode/plugin.d.ts +249 -0
  107. package/build/adapters/opencode/plugin.js +1536 -0
  108. package/build/adapters/opencode/v2.d.ts +117 -0
  109. package/build/adapters/opencode/v2.js +224 -0
  110. package/build/adapters/opencode/zod3tov4.d.ts +1 -0
  111. package/build/adapters/opencode/zod3tov4.js +132 -0
  112. package/build/adapters/pi/extension.d.ts +81 -0
  113. package/build/adapters/pi/extension.js +861 -0
  114. package/build/adapters/pi/index.d.ts +57 -0
  115. package/build/adapters/pi/index.js +173 -0
  116. package/build/adapters/pi/mcp-bridge.d.ts +268 -0
  117. package/build/adapters/pi/mcp-bridge.js +894 -0
  118. package/build/adapters/qwen-code/hooks.d.ts +26 -0
  119. package/build/adapters/qwen-code/hooks.js +29 -0
  120. package/build/adapters/qwen-code/index.d.ts +40 -0
  121. package/build/adapters/qwen-code/index.js +361 -0
  122. package/build/adapters/qwen-code/usage.d.ts +90 -0
  123. package/build/adapters/qwen-code/usage.js +222 -0
  124. package/build/adapters/types.d.ts +360 -0
  125. package/build/adapters/types.js +118 -0
  126. package/build/adapters/vscode-copilot/config.d.ts +8 -0
  127. package/build/adapters/vscode-copilot/config.js +8 -0
  128. package/build/adapters/vscode-copilot/hooks.d.ts +71 -0
  129. package/build/adapters/vscode-copilot/hooks.js +98 -0
  130. package/build/adapters/vscode-copilot/index.d.ts +32 -0
  131. package/build/adapters/vscode-copilot/index.js +222 -0
  132. package/build/adapters/zed/index.d.ts +40 -0
  133. package/build/adapters/zed/index.js +163 -0
  134. package/build/cli.d.ts +34 -0
  135. package/build/cli.js +1828 -0
  136. package/build/db-base.d.ts +250 -0
  137. package/build/db-base.js +756 -0
  138. package/build/executor.d.ts +72 -0
  139. package/build/executor.js +678 -0
  140. package/build/exit-classify.d.ts +19 -0
  141. package/build/exit-classify.js +12 -0
  142. package/build/fetch/blocks.d.ts +145 -0
  143. package/build/fetch/blocks.js +244 -0
  144. package/build/fetch/extract.d.ts +68 -0
  145. package/build/fetch/extract.js +123 -0
  146. package/build/fetch/page-store.d.ts +66 -0
  147. package/build/fetch/page-store.js +174 -0
  148. package/build/fetch-cache.d.ts +13 -0
  149. package/build/fetch-cache.js +15 -0
  150. package/build/lifecycle.d.ts +124 -0
  151. package/build/lifecycle.js +278 -0
  152. package/build/package-identity.d.ts +26 -0
  153. package/build/package-identity.js +28 -0
  154. package/build/runPool.d.ts +36 -0
  155. package/build/runPool.js +51 -0
  156. package/build/runtime.d.ts +71 -0
  157. package/build/runtime.js +659 -0
  158. package/build/search/auto-memory.d.ts +47 -0
  159. package/build/search/auto-memory.js +170 -0
  160. package/build/search/ctx-search-schema.d.ts +90 -0
  161. package/build/search/ctx-search-schema.js +135 -0
  162. package/build/search/flood-guard.d.ts +57 -0
  163. package/build/search/flood-guard.js +80 -0
  164. package/build/search/unified.d.ts +56 -0
  165. package/build/search/unified.js +104 -0
  166. package/build/security.d.ts +206 -0
  167. package/build/security.js +780 -0
  168. package/build/server.d.ts +240 -0
  169. package/build/server.js +5034 -0
  170. package/build/session/analytics.d.ts +773 -0
  171. package/build/session/analytics.js +2420 -0
  172. package/build/session/db.d.ts +468 -0
  173. package/build/session/db.js +1330 -0
  174. package/build/session/error-classifier.d.ts +87 -0
  175. package/build/session/error-classifier.js +303 -0
  176. package/build/session/event-emit.d.ts +48 -0
  177. package/build/session/event-emit.js +101 -0
  178. package/build/session/extract.d.ts +333 -0
  179. package/build/session/extract.js +2688 -0
  180. package/build/session/model-prices.json +429 -0
  181. package/build/session/persist-tool-calls.d.ts +54 -0
  182. package/build/session/persist-tool-calls.js +105 -0
  183. package/build/session/pricing.d.ts +64 -0
  184. package/build/session/pricing.js +151 -0
  185. package/build/session/project-attribution.d.ts +73 -0
  186. package/build/session/project-attribution.js +245 -0
  187. package/build/session/purge.d.ts +138 -0
  188. package/build/session/purge.js +240 -0
  189. package/build/session/retrieval-marker.d.ts +39 -0
  190. package/build/session/retrieval-marker.js +65 -0
  191. package/build/session/snapshot.d.ts +46 -0
  192. package/build/session/snapshot.js +532 -0
  193. package/build/store-directory.d.ts +56 -0
  194. package/build/store-directory.js +254 -0
  195. package/build/store.d.ts +147 -0
  196. package/build/store.js +1714 -0
  197. package/build/truncate.d.ts +57 -0
  198. package/build/truncate.js +142 -0
  199. package/build/types.d.ts +117 -0
  200. package/build/types.js +20 -0
  201. package/build/util/claude-config.d.ts +32 -0
  202. package/build/util/claude-config.js +84 -0
  203. package/build/util/hook-config.d.ts +27 -0
  204. package/build/util/hook-config.js +76 -0
  205. package/build/util/jsonc.d.ts +14 -0
  206. package/build/util/jsonc.js +104 -0
  207. package/build/util/plugin-cache-integrity.d.ts +51 -0
  208. package/build/util/plugin-cache-integrity.js +146 -0
  209. package/build/util/project-dir.d.ts +149 -0
  210. package/build/util/project-dir.js +340 -0
  211. package/build/util/sibling-mcp.d.ts +79 -0
  212. package/build/util/sibling-mcp.js +181 -0
  213. package/cli.bundle.mjs +1495 -0
  214. package/configs/antigravity/GEMINI.md +68 -0
  215. package/configs/antigravity/mcp_config.json +7 -0
  216. package/configs/antigravity-cli/hooks/hooks.json +37 -0
  217. package/configs/antigravity-cli/hooks.json +37 -0
  218. package/configs/antigravity-cli/mcp_config.json +10 -0
  219. package/configs/antigravity-cli/plugin.json +14 -0
  220. package/configs/antigravity-cli/rules/context-mode.md +77 -0
  221. package/configs/antigravity-cli/skills/context-mode/SKILL.md +77 -0
  222. package/configs/claude-code/CLAUDE.md +91 -0
  223. package/configs/codex/AGENTS.md +99 -0
  224. package/configs/codex/config.toml +8 -0
  225. package/configs/codex/hooks.json +47 -0
  226. package/configs/copilot-cli/.github/plugin/plugin.json +23 -0
  227. package/configs/copilot-cli/.mcp.json +12 -0
  228. package/configs/copilot-cli/README.md +47 -0
  229. package/configs/copilot-cli/hooks.json +41 -0
  230. package/configs/copilot-cli/skills/context-mode/SKILL.md +38 -0
  231. package/configs/cursor/context-mode.mdc +76 -0
  232. package/configs/cursor/hooks.json +21 -0
  233. package/configs/cursor/mcp.json +7 -0
  234. package/configs/gemini-cli/GEMINI.md +88 -0
  235. package/configs/gemini-cli/mcp.json +7 -0
  236. package/configs/gemini-cli/settings.json +60 -0
  237. package/configs/jetbrains-copilot/copilot-instructions.md +80 -0
  238. package/configs/jetbrains-copilot/hooks.json +16 -0
  239. package/configs/jetbrains-copilot/mcp.json +7 -0
  240. package/configs/kilo/AGENTS.md +84 -0
  241. package/configs/kilo/kilo.json +6 -0
  242. package/configs/kimi/hooks.json +54 -0
  243. package/configs/kiro/KIRO.md +84 -0
  244. package/configs/kiro/agent.json +18 -0
  245. package/configs/kiro/mcp.json +7 -0
  246. package/configs/omp/SYSTEM.md +85 -0
  247. package/configs/omp/mcp.json +7 -0
  248. package/configs/openclaw/AGENTS.md +87 -0
  249. package/configs/openclaw/openclaw.json +13 -0
  250. package/configs/opencode/AGENTS.md +84 -0
  251. package/configs/opencode/opencode.json +6 -0
  252. package/configs/pi/AGENTS.md +3 -0
  253. package/configs/qwen-code/QWEN.md +91 -0
  254. package/configs/vscode-copilot/copilot-instructions.md +80 -0
  255. package/configs/vscode-copilot/hooks.json +16 -0
  256. package/configs/vscode-copilot/mcp.json +7 -0
  257. package/configs/zed/AGENTS.md +68 -0
  258. package/hooks/antigravity-cli/payload.mjs +98 -0
  259. package/hooks/antigravity-cli/posttooluse.mjs +138 -0
  260. package/hooks/antigravity-cli/pretooluse.mjs +78 -0
  261. package/hooks/antigravity-cli/stop.mjs +58 -0
  262. package/hooks/auto-injection.mjs +102 -0
  263. package/hooks/cache-heal-utils.mjs +379 -0
  264. package/hooks/codex/platform.mjs +1 -0
  265. package/hooks/codex/posttooluse.mjs +66 -0
  266. package/hooks/codex/precompact.mjs +70 -0
  267. package/hooks/codex/pretooluse.mjs +42 -0
  268. package/hooks/codex/sessionstart.mjs +121 -0
  269. package/hooks/codex/stop.mjs +138 -0
  270. package/hooks/codex/userpromptsubmit.mjs +75 -0
  271. package/hooks/copilot-cli/posttooluse.mjs +79 -0
  272. package/hooks/copilot-cli/precompact.mjs +66 -0
  273. package/hooks/copilot-cli/pretooluse.mjs +41 -0
  274. package/hooks/copilot-cli/sessionstart.mjs +121 -0
  275. package/hooks/copilot-cli/stop.mjs +59 -0
  276. package/hooks/copilot-cli/userpromptsubmit.mjs +77 -0
  277. package/hooks/core/codex-caps.mjs +112 -0
  278. package/hooks/core/formatters.mjs +356 -0
  279. package/hooks/core/mcp-ready.mjs +109 -0
  280. package/hooks/core/platform-detect.mjs +49 -0
  281. package/hooks/core/routing.mjs +1050 -0
  282. package/hooks/core/stdin.mjs +90 -0
  283. package/hooks/core/tool-naming.mjs +57 -0
  284. package/hooks/cursor/afteragentresponse.mjs +74 -0
  285. package/hooks/cursor/hooks.json +31 -0
  286. package/hooks/cursor/posttooluse.mjs +72 -0
  287. package/hooks/cursor/pretooluse.mjs +26 -0
  288. package/hooks/cursor/sessionstart.mjs +97 -0
  289. package/hooks/cursor/stop.mjs +48 -0
  290. package/hooks/ensure-deps.mjs +254 -0
  291. package/hooks/formatters/claude-code.mjs +113 -0
  292. package/hooks/formatters/cursor.mjs +37 -0
  293. package/hooks/formatters/gemini-cli.mjs +55 -0
  294. package/hooks/formatters/vscode-copilot.mjs +55 -0
  295. package/hooks/gemini-cli/aftermodel.mjs +70 -0
  296. package/hooks/gemini-cli/aftertool.mjs +61 -0
  297. package/hooks/gemini-cli/beforeagent.mjs +99 -0
  298. package/hooks/gemini-cli/beforetool.mjs +27 -0
  299. package/hooks/gemini-cli/precompress.mjs +55 -0
  300. package/hooks/gemini-cli/sessionstart.mjs +137 -0
  301. package/hooks/heal-partial-install.mjs +712 -0
  302. package/hooks/hooks.json +143 -0
  303. package/hooks/jetbrains-copilot/posttooluse.mjs +61 -0
  304. package/hooks/jetbrains-copilot/precompact.mjs +55 -0
  305. package/hooks/jetbrains-copilot/pretooluse.mjs +27 -0
  306. package/hooks/jetbrains-copilot/sessionstart.mjs +124 -0
  307. package/hooks/kimi/platform.mjs +1 -0
  308. package/hooks/kimi/posttooluse.mjs +72 -0
  309. package/hooks/kimi/precompact.mjs +80 -0
  310. package/hooks/kimi/pretooluse.mjs +42 -0
  311. package/hooks/kimi/sessionend.mjs +61 -0
  312. package/hooks/kimi/sessionstart.mjs +113 -0
  313. package/hooks/kimi/stop.mjs +132 -0
  314. package/hooks/kimi/userpromptsubmit.mjs +90 -0
  315. package/hooks/kiro/agentspawn.mjs +97 -0
  316. package/hooks/kiro/posttooluse.mjs +51 -0
  317. package/hooks/kiro/pretooluse.mjs +64 -0
  318. package/hooks/kiro/userpromptsubmit.mjs +88 -0
  319. package/hooks/normalize-hooks.mjs +323 -0
  320. package/hooks/platform-bridge.mjs +340 -0
  321. package/hooks/posttooluse.mjs +225 -0
  322. package/hooks/precompact.mjs +100 -0
  323. package/hooks/pretooluse.mjs +227 -0
  324. package/hooks/qwen-code/platform.mjs +1 -0
  325. package/hooks/qwen-code/stop.mjs +168 -0
  326. package/hooks/routing-block.mjs +105 -0
  327. package/hooks/run-hook.mjs +95 -0
  328. package/hooks/security.bundle.mjs +2 -0
  329. package/hooks/session-attribution.bundle.mjs +1 -0
  330. package/hooks/session-db.bundle.mjs +145 -0
  331. package/hooks/session-directive.mjs +520 -0
  332. package/hooks/session-extract.bundle.mjs +3 -0
  333. package/hooks/session-helpers.mjs +428 -0
  334. package/hooks/session-loaders.mjs +448 -0
  335. package/hooks/session-snapshot.bundle.mjs +32 -0
  336. package/hooks/sessionstart.mjs +464 -0
  337. package/hooks/stop.mjs +82 -0
  338. package/hooks/suppress-stderr.mjs +25 -0
  339. package/hooks/userpromptsubmit.mjs +108 -0
  340. package/hooks/vscode-copilot/posttooluse.mjs +61 -0
  341. package/hooks/vscode-copilot/precompact.mjs +55 -0
  342. package/hooks/vscode-copilot/pretooluse.mjs +27 -0
  343. package/hooks/vscode-copilot/sessionstart.mjs +129 -0
  344. package/openclaw.plugin.json +38 -0
  345. package/package.json +132 -0
  346. package/scripts/heal-better-sqlite3.mjs +430 -0
  347. package/scripts/heal-installed-plugins.mjs +635 -0
  348. package/scripts/plugin-cache-integrity.mjs +248 -0
  349. package/scripts/postinstall.mjs +397 -0
  350. package/server.bundle.mjs +1421 -0
  351. package/server.js +5 -0
  352. package/skills/.ignore +7 -0
  353. package/skills/context-mode/SKILL.md +300 -0
  354. package/skills/context-mode/references/anti-patterns.md +283 -0
  355. package/skills/context-mode/references/patterns-javascript.md +298 -0
  356. package/skills/context-mode/references/patterns-python.md +304 -0
  357. package/skills/context-mode/references/patterns-shell.md +277 -0
  358. package/skills/ctx-doctor/SKILL.md +22 -0
  359. package/skills/ctx-index/SKILL.md +46 -0
  360. package/skills/ctx-insight/SKILL.md +24 -0
  361. package/skills/ctx-purge/SKILL.md +49 -0
  362. package/skills/ctx-search/SKILL.md +35 -0
  363. package/skills/ctx-stats/SKILL.md +26 -0
  364. package/skills/ctx-upgrade/SKILL.md +31 -0
  365. package/start.mjs +616 -0
@@ -0,0 +1,240 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { type SpawnSyncOptions, type SpawnSyncReturns } from "node:child_process";
4
+ import { ContentStore } from "./store.js";
5
+ import { type PlatformId } from "./adapters/types.js";
6
+ export declare const server: McpServer;
7
+ export interface RegisteredCtxTool {
8
+ name: string;
9
+ config: Record<string, unknown>;
10
+ handler: (args: Record<string, unknown>) => Promise<unknown> | unknown;
11
+ }
12
+ export declare const REGISTERED_CTX_TOOLS: RegisteredCtxTool[];
13
+ export declare function shouldSuppressMcpToolsForNativePluginHost(opts?: {
14
+ embedded?: string;
15
+ platform?: PlatformId;
16
+ settings?: Record<string, unknown> | null;
17
+ }): boolean;
18
+ export declare function emitSuppressionDiagnostic(opts?: {
19
+ platform?: string;
20
+ write?: (chunk: string) => void;
21
+ }): void;
22
+ /** Test-only: reset the one-shot emission flag so suites can re-exercise. */
23
+ export declare function __resetSuppressionDiagnosticForTests(): void;
24
+ /**
25
+ * Issue #637 — register an explicit empty `tools/list` handler on the McpServer.
26
+ *
27
+ * Background: when `suppressMcpToolsForNativePluginHost` is true, every
28
+ * `server.registerTool()` call is short-circuited (returns `undefined` above).
29
+ * The MCP SDK only installs the SDK-default `tools/list` handler when at least
30
+ * one `registerTool()` reaches `setToolRequestHandlers()` internally
31
+ * (mcp.js:56-67). Suppressing every registration leaves `tools/list`
32
+ * unregistered, and the framework's RPC layer answers it with
33
+ * `-32601 "Method not found"`.
34
+ *
35
+ * The reporter of #637 (SquirrelRat) inspected the suppressed child via
36
+ * `tools/list` and read the JSON-RPC error as "the plugin never registers any
37
+ * ctx_* tools" — when in fact the plugin DOES register all 11 tools natively
38
+ * (verified at `src/adapters/opencode/plugin.ts:469` and
39
+ * `tests/opencode-plugin.test.ts:88`). The misleading -32601 is the seed of
40
+ * the #637 perception.
41
+ *
42
+ * This helper installs an explicit handler that returns `{tools: []}` — a
43
+ * spec-compliant empty list. Paired with the existing #623 stderr diagnostic,
44
+ * an operator now sees:
45
+ * - wire response: `{tools: []}` (matches expectation, no JSON-RPC error)
46
+ * - stderr: `[context-mode] ctx_* tools/list intentionally empty… (#623)`
47
+ *
48
+ * Idempotent: throws inside SDK if called twice on the same server because
49
+ * `assertCanSetRequestHandler` (mcp.js:60) rejects duplicate registrations;
50
+ * we therefore install the SDK's default tool handlers FIRST (via a no-op
51
+ * registerTool of a fake tool, immediately removed) only if needed. To keep
52
+ * the public surface minimal, we just call `server.server.setRequestHandler`
53
+ * directly — that is the same low-level call used for prompts/resources at
54
+ * server.ts:259-261 and avoids the SDK guard entirely.
55
+ *
56
+ * Exported for test (#637 in-memory regression guard).
57
+ */
58
+ export declare function registerEmptyToolsListHandler(target?: McpServer): void;
59
+ type ToolContextOverride = {
60
+ projectDir: string;
61
+ sessionId?: string;
62
+ };
63
+ export declare function withProjectDirOverride<T>(projectDir: string | ToolContextOverride, fn: () => Promise<T>): Promise<T>;
64
+ export declare function sanitizeSchemaForStrictClients(node: unknown): unknown;
65
+ export declare function installStrictClientSchemaCompat(target?: McpServer): void;
66
+ /**
67
+ * Build the FK-attribution object passed to every ContentStore.index*() call
68
+ * in this process. CLAUDE_SESSION_ID is the only MCP-side handle we have on
69
+ * the current session — eventId stays undefined because MCP tool invocations
70
+ * are not paired with PostToolUse event rows at index time (the hook fires
71
+ * AFTER the tool returns). Empty-string fallback inside #insertChunks keeps
72
+ * legacy unattributed rows readable.
73
+ */
74
+ export declare function currentAttribution(): {
75
+ sessionId?: string;
76
+ } | undefined;
77
+ /** v1.0.134 SLICE A: opts injection for testability. Production callers pass nothing. */
78
+ export declare function resolveSessionIdFromSessionDB(opts?: {
79
+ projectDir?: string;
80
+ sessionsDir?: string;
81
+ bypassCache?: boolean;
82
+ }): string | undefined;
83
+ /**
84
+ * Project directory detection across supported platforms.
85
+ *
86
+ * Priority:
87
+ * 1. Platform-specific env var (set by host IDE before MCP server spawn)
88
+ * 2. CONTEXT_MODE_PROJECT_DIR (set by start.mjs for ALL platforms — universal)
89
+ * 3. process.cwd() (last resort)
90
+ *
91
+ * CONTEXT_MODE_PROJECT_DIR guarantees correct projectDir even for platforms
92
+ * that don't set their own env var (Cursor, OpenClaw, Codex, Kiro, Zed).
93
+ */
94
+ export declare function getProjectDir(): string;
95
+ /**
96
+ * Parse FTS5 highlight markers to find match positions in the
97
+ * original (marker-free) text. Returns character offsets into the
98
+ * stripped content where each matched token begins.
99
+ */
100
+ export declare function positionsFromHighlight(highlighted: string): number[];
101
+ export declare function extractSnippet(content: string, query: string, maxLen?: number, highlighted?: string): string;
102
+ export type BatchQueryScope = "batch" | "global";
103
+ export declare function formatBatchQueryResults(store: ContentStore, queries: string[], source: string, maxOutput?: number, scope?: BatchQueryScope): string[];
104
+ export interface BatchCommand {
105
+ label: string;
106
+ command: string;
107
+ }
108
+ export interface BatchRunResult {
109
+ outputs: string[];
110
+ timedOut: boolean;
111
+ }
112
+ export interface BatchRunOptions {
113
+ /**
114
+ * Total budget (concurrency=1, shared) or per-command (concurrency>1).
115
+ * When `undefined`, no server-side timer fires — the MCP host's RPC
116
+ * timeout governs (Issue #406).
117
+ */
118
+ timeout: number | undefined;
119
+ concurrency: number;
120
+ nodeOptsPrefix: string;
121
+ cwd?: string;
122
+ onFsBytes?: (bytes: number) => void;
123
+ }
124
+ interface BatchExecutor {
125
+ execute(input: {
126
+ language: "shell";
127
+ code: string;
128
+ timeout: number | undefined;
129
+ cwd?: string;
130
+ }): Promise<{
131
+ stdout: string;
132
+ timedOut?: boolean;
133
+ }>;
134
+ }
135
+ export declare function buildBatchNodeOptionsPrefix(shellPath: string, preloadPath: string): string;
136
+ /**
137
+ * Default execution timeout (ms) applied ONLY under Antigravity CLI (`agy`).
138
+ * agy does not enforce an MCP RPC timeout, so a ctx_execute with a runaway or
139
+ * blocking script hangs forever — the host never kills it and the user must
140
+ * interrupt. Every other host enforces its own RPC timeout, so we keep the
141
+ * no-server-timer behavior there (Issue #406 — long builds need an unbounded
142
+ * run). A caller can still pass an explicit `timeout` to override on any host.
143
+ */
144
+ export declare const AGY_DEFAULT_EXEC_TIMEOUT_MS = 120000;
145
+ export declare function resolveExecTimeout(timeout: number | undefined): number | undefined;
146
+ /**
147
+ * Execute batch commands. concurrency=1 preserves the legacy serial path
148
+ * (shared timeout budget + cascading skip-on-timeout). concurrency>1 runs
149
+ * commands concurrently with at most N in flight; each command receives the
150
+ * full timeout, output is collated by input index, and per-command timeouts
151
+ * record `(timed out)` blocks without skipping siblings.
152
+ */
153
+ export declare function runBatchCommands(commands: BatchCommand[], opts: BatchRunOptions, executor: BatchExecutor): Promise<BatchRunResult>;
154
+ export declare function buildFetchCode(url: string, outputPath: string): string;
155
+ export type ExtractionVerdict = {
156
+ kind: "ok";
157
+ } | {
158
+ kind: "shell";
159
+ textBytes: number;
160
+ sourceBytes: number;
161
+ yieldPct: string;
162
+ };
163
+ /**
164
+ * Decide whether a non-empty extraction is actually a document or a
165
+ * JavaScript-rendered shell.
166
+ *
167
+ * WHY THIS EXISTS. The old guard was `markdown.length === 0`. A canvas app or
168
+ * SPA serves a few KB of bootstrap HTML whose entire text content is its
169
+ * <title>; Turndown faithfully renders that to ~20 bytes. Twenty bytes is not
170
+ * zero, so the fetch was reported as a success and the shell was indexed as if
171
+ * it were the page. The caller had no way to tell that apart from a genuinely
172
+ * short document.
173
+ *
174
+ * Measured on this exact code path (2026-08, bytes in -> markdown bytes out):
175
+ * excalidraw.com 6,862 -> 21 (0.31% yield) <- shell
176
+ * app.diagrams.net 2,759 -> 476 (17.3% yield) real prose
177
+ * nextjs.org 316,151 -> 13,587 (4.30% yield) real prose
178
+ * developers.cloudflare.com 178,627 -> 8,389 (4.70% yield) real prose
179
+ *
180
+ * Neither signal works alone. A ratio alone condemns a small valid page
181
+ * (`<p>Hello</p>` is 5 bytes of text from 40 of markup and is perfectly fine).
182
+ * A floor alone condemns a genuinely short document. Requiring BOTH — almost
183
+ * no text came out AND almost none of what came in survived — isolates the
184
+ * shell case and leaves every measured real page above untouched.
185
+ *
186
+ * Arithmetic only: no pattern matching, no markup sniffing, no word lists.
187
+ *
188
+ * The two thresholds live INSIDE the body on purpose. This function is
189
+ * injected verbatim into the fetch subprocess (see buildFetchCode) so the
190
+ * subprocess decides "is this a shell?" with the same arithmetic the parent
191
+ * uses — one definition, two callers. A `const` at module scope would not
192
+ * survive `.toString()` and the subprocess would throw a ReferenceError.
193
+ *
194
+ * @param textBytes length of the converted text, already trimmed
195
+ * @param sourceBytes bytes received off the wire pre-conversion; a
196
+ * non-positive value means the subprocess did not report it
197
+ * (older bundle), and with no evidence we never accuse.
198
+ */
199
+ export declare function classifyExtraction(textBytes: number, sourceBytes: number): ExtractionVerdict;
200
+ /**
201
+ * Classify an IP address.
202
+ * - "block": always blocked (link-local/IMDS/multicast/reserved/malformed)
203
+ * - "private": loopback or RFC1918 — allowed by default, blocked in strict mode
204
+ * - "public": safe to fetch
205
+ *
206
+ * Exported (via the function name) so SSRF tests can exercise the matcher directly.
207
+ */
208
+ export declare function classifyIp(rawIp: string): "block" | "private" | "public";
209
+ /**
210
+ * The rung-2 urls the subprocess requested. An unparseable or absent line
211
+ * yields an empty list, which the refusal reads as "not reported" — it never
212
+ * claims urls were tried when there is no evidence that they were.
213
+ */
214
+ export declare function parseLadderTried(raw: string): string[];
215
+ /**
216
+ * How the ladder's rung ids read in a report. The point of a ladder is that a
217
+ * reader can see WHICH step paid for this page, so every fetch says so.
218
+ */
219
+ export declare function describeRung(rung: string): string;
220
+ export type SpawnSyncFn = (cmd: string, args: readonly string[], opts?: SpawnSyncOptions) => SpawnSyncReturns<string | Buffer>;
221
+ export type BrowserOpenResult = {
222
+ ok: true;
223
+ method: string;
224
+ } | {
225
+ ok: false;
226
+ method: "none";
227
+ reason: string;
228
+ };
229
+ export type KillResult = {
230
+ killedPids: string[];
231
+ attemptedPids: string[];
232
+ errors: string[];
233
+ };
234
+ export declare function browserOpenArgv(url: string, platform: NodeJS.Platform): readonly {
235
+ cmd: string;
236
+ args: readonly string[];
237
+ }[];
238
+ export declare function openBrowserSync(url: string, platform?: NodeJS.Platform, runner?: SpawnSyncFn): BrowserOpenResult;
239
+ export declare function killProcessOnPort(port: number, platform?: NodeJS.Platform, runner?: SpawnSyncFn): KillResult;
240
+ export {};