@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,250 @@
1
+ /**
2
+ * db-base — Reusable SQLite infrastructure for context-mode packages.
3
+ *
4
+ * Provides lazy-loading of better-sqlite3, WAL pragma setup, prepared
5
+ * statement caching interface, and DB file cleanup helpers. Both
6
+ * ContentStore and SessionDB build on top of these primitives.
7
+ */
8
+ import type DatabaseConstructor from "better-sqlite3";
9
+ import type { Database as DatabaseInstance } from "better-sqlite3";
10
+ /**
11
+ * Explicit interface for cached prepared statements that accept varying
12
+ * parameter counts. better-sqlite3's generic `Statement` collapses under
13
+ * `ReturnType` to a single-param signature, so we define our own.
14
+ */
15
+ export interface PreparedStatement {
16
+ run(...params: unknown[]): {
17
+ changes: number;
18
+ lastInsertRowid: number | bigint;
19
+ };
20
+ get(...params: unknown[]): unknown;
21
+ all(...params: unknown[]): unknown[];
22
+ iterate(...params: unknown[]): IterableIterator<unknown>;
23
+ }
24
+ /**
25
+ * Wraps a bun:sqlite Database to provide better-sqlite3-compatible API.
26
+ * Bridges: .pragma(), multi-statement .exec(), .get() null→undefined.
27
+ */
28
+ export declare class BunSQLiteAdapter {
29
+ #private;
30
+ constructor(rawDb: any);
31
+ pragma(source: string): any;
32
+ exec(sql: string): any;
33
+ prepare(sql: string): any;
34
+ transaction(fn: (...args: any[]) => any): any;
35
+ close(): void;
36
+ }
37
+ /**
38
+ * Wraps node:sqlite's DatabaseSync to provide better-sqlite3-compatible API.
39
+ * Bridges: .pragma(), .transaction(). Everything else is passthrough.
40
+ * Eliminates native addon SIGSEGV on Linux (nodejs/node#62515).
41
+ */
42
+ export declare class NodeSQLiteAdapter {
43
+ #private;
44
+ constructor(rawDb: any);
45
+ pragma(source: string): any;
46
+ exec(sql: string): any;
47
+ prepare(sql: string): any;
48
+ transaction(fn: (...args: any[]) => any): any;
49
+ close(): void;
50
+ }
51
+ /**
52
+ * Probe whether the supplied node:sqlite DatabaseSync constructor links a
53
+ * SQLite build that includes the FTS5 module. Some Node.js Linux builds
54
+ * (e.g. v22.14.0 on Ubuntu) ship node:sqlite without FTS5 even though the
55
+ * import succeeds, which silently breaks ctx_search/ctx_batch_execute and
56
+ * the doctor's FTS5 check (issue #461).
57
+ *
58
+ * Returns true only when a `CREATE VIRTUAL TABLE … USING fts5(x)` statement
59
+ * succeeds. Always returns false on any failure (constructor throw, missing
60
+ * module, etc.) so the caller can fall through to better-sqlite3, whose
61
+ * bundled SQLite always ships with FTS5.
62
+ */
63
+ export declare function nodeSqliteHasFts5(DatabaseSync: any): boolean;
64
+ /**
65
+ * Returns true when the current runtime ships a built-in SQLite binding:
66
+ * - Bun has `bun:sqlite` always
67
+ * - Node has `node:sqlite` since 22.5 (no flag since 22.13)
68
+ *
69
+ * Mirrors the helper in hooks/ensure-deps.mjs:61. Exported so the platform
70
+ * gate in loadDatabase() can be unit-tested without spawning a child
71
+ * process. `versionsOverride` and `bunOverride` are injection points for
72
+ * tests — production callers pass nothing.
73
+ *
74
+ * Widening the gate from `process.platform === "linux"` to this helper is
75
+ * required for Node 26 on macOS arm64 (#551): Node 26 removed
76
+ * `info.This()` from V8 PropertyCallbackInfo, breaking better-sqlite3
77
+ * 12.9.0's native compile. Using node:sqlite sidesteps the native addon
78
+ * entirely on every platform that has it.
79
+ */
80
+ export declare function hasModernSqlite(versionsOverride?: NodeJS.ProcessVersions, bunOverride?: unknown): boolean;
81
+ /**
82
+ * Lazy-load the SQLite driver for the current runtime.
83
+ * Bun → bun:sqlite via BunSQLiteAdapter (issue #45).
84
+ * Modern Node (>= 22.5) → node:sqlite via NodeSQLiteAdapter when it ships FTS5 (#228, #461, #551).
85
+ * Other Node (or modern Node without FTS5) → better-sqlite3 (native addon).
86
+ */
87
+ export declare function loadDatabase(): typeof DatabaseConstructor;
88
+ /**
89
+ * Apply WAL mode and NORMAL synchronous pragma to a database instance.
90
+ * Should be called immediately after opening a new database connection.
91
+ *
92
+ * WAL mode provides:
93
+ * - Concurrent readers while a write is in progress
94
+ * - Dramatically faster writes (no full-page sync on each commit)
95
+ * NORMAL synchronous is safe under WAL and avoids an extra fsync per
96
+ * transaction.
97
+ *
98
+ * v1.0.187 — mmap_size is OPT-IN (upstream #992/#905; PRs #1030/#1056):
99
+ * a default 256MB mmap over DB files that are shared across processes
100
+ * turns transient resource pressure into SQLITE_IOERR ("disk I/O error")
101
+ * on otherwise-healthy disks. The pragma is now applied ONLY when
102
+ * CONTEXT_MODE_DB_MMAP_SIZE (bytes) is set to a valid non-negative
103
+ * integer; when unset, mmap_size is NOT touched at all (SQLite default).
104
+ */
105
+ export declare function applyWALPragmas(db: DatabaseInstance, env?: NodeJS.ProcessEnv): void;
106
+ /**
107
+ * Parse the opt-in mmap size (bytes) from CONTEXT_MODE_DB_MMAP_SIZE.
108
+ * Returns null when the variable is unset, empty, or not a non-negative
109
+ * integer — callers must then skip the mmap_size pragma entirely so the
110
+ * SQLite default applies.
111
+ *
112
+ * Exported so the opt-in contract is unit-testable without mutating
113
+ * process.env at call sites.
114
+ */
115
+ export declare function resolveMmapSizeFromEnv(env?: NodeJS.ProcessEnv): number | null;
116
+ /**
117
+ * Remove orphaned WAL/SHM files when the main DB file doesn't exist.
118
+ * On Windows, stale -wal/-shm files from crashed processes cause
119
+ * "file is not a database" errors when creating a fresh DB.
120
+ */
121
+ export declare function cleanOrphanedWALFiles(dbPath: string): void;
122
+ /**
123
+ * Delete all three SQLite files for a given db path (main, WAL, SHM).
124
+ * Silently ignores individual deletion errors so a partial cleanup
125
+ * does not abort the rest.
126
+ */
127
+ export declare function deleteDBFiles(dbPath: string): void;
128
+ /**
129
+ * Safely close a database connection. Swallows errors so callers can
130
+ * always call this in a finally/cleanup path without try/catch.
131
+ *
132
+ * v1.0.187 — the close-time `wal_checkpoint(TRUNCATE)` was REMOVED
133
+ * (upstream #992/#905; PRs #1030/#1056/#880). A TRUNCATE checkpoint is a
134
+ * *cross-process mutation*: when a hook/CLI/statusline process still holds
135
+ * the same DB, the checkpoint races its WAL readers/writers and surfaces
136
+ * as SQLITE_IOERR ("disk I/O error") on healthy disks. SQLite already
137
+ * performs a best-effort (non-destructive) checkpoint inside close();
138
+ * the only sidecar cleanup this layer does is cleanOrphanedWALFiles,
139
+ * which deletes -wal/-shm when the main DB file is absent.
140
+ */
141
+ export declare function closeDB(db: DatabaseInstance): void;
142
+ /**
143
+ * Return the default per-process DB path for context-mode databases.
144
+ * Uses the OS temp directory and embeds the current PID so multiple
145
+ * server instances never share a file.
146
+ */
147
+ export declare function defaultDBPath(prefix?: string): string;
148
+ /**
149
+ * Transient SQLite errors that warrant a retry (v1.0.187, upstream
150
+ * #992/#905; PRs #1030/#1056/#880):
151
+ * - SQLITE_BUSY / "database is locked" — writer contention; the existing
152
+ * busy_timeout + backoff contract.
153
+ * - SQLITE_IOERR / "disk I/O error" — frequently TRANSIENT on healthy
154
+ * disks (mmap pressure, checkpoint races, AV/EDR scans). Treating it
155
+ * as fatal turned recoverable blips into user-visible failures.
156
+ *
157
+ * Corruption signatures (SQLITE_CORRUPT / SQLITE_NOTADB / "file is not a
158
+ * database") are deliberately NOT retried — see isSQLiteCorruptionError.
159
+ * Non-Error throw shapes ({ code } objects, strings) are classified the
160
+ * same way as Errors via errorSignature().
161
+ */
162
+ export declare function isTransientSqliteError(err: unknown): boolean;
163
+ /**
164
+ * Retry a DB operation with exponential backoff on transient SQLite
165
+ * errors: SQLITE_BUSY ("database is locked") and SQLITE_IOERR
166
+ * ("disk I/O error"). Retries up to 3 times with delays: 100ms, 500ms,
167
+ * 2000ms. If all retries fail, throws a descriptive error.
168
+ * Pass custom delays for testing (e.g., [0, 0, 0] to skip waits).
169
+ */
170
+ export declare function withRetry<T>(fn: () => T, delays?: number[]): T;
171
+ /**
172
+ * Detect SQLite corruption errors that warrant a rename-and-recreate.
173
+ * Matches SQLITE_CORRUPT, SQLITE_NOTADB, and their human-readable equivalents.
174
+ */
175
+ export declare function isSQLiteCorruptionError(msg: string): boolean;
176
+ /**
177
+ * Rename a corrupt DB and its WAL/SHM files so a fresh DB can be created.
178
+ * Best-effort — individual rename failures are silently ignored.
179
+ */
180
+ export declare function renameCorruptDB(dbPath: string): void;
181
+ /**
182
+ * Stable log prefix for swallowed DB failures. Neither db-base.ts nor
183
+ * session/db.ts has a host logger, so failures that were previously
184
+ * silent (best-effort schema migrations, read paths returning []/"" on
185
+ * error) go to stderr via console.error under this prefix.
186
+ */
187
+ export declare const DB_LOG_PREFIX = "[context-mode:db]";
188
+ /**
189
+ * Log a swallowed DB failure to stderr with the stable
190
+ * `[context-mode:db]` prefix: operation name, error code, error message,
191
+ * and (when OPENCODE_DEBUG is set) the stack. The same op + code +
192
+ * message combination is rate-limited to one line per ~30s to avoid log
193
+ * storms from hot retry loops or batch scans. Logging must never throw.
194
+ *
195
+ * `detail` (e.g. a DB path) is optional context appended to the line and
196
+ * included in the dedupe key so different files don't suppress each
197
+ * other's diagnostics.
198
+ */
199
+ export declare function logDbError(op: string, err: unknown, detail?: string, now?: number): void;
200
+ /**
201
+ * Clear the log-dedupe table. Test-only: lets a test observe the first
202
+ * emission for a given op regardless of what earlier tests logged.
203
+ */
204
+ export declare function resetDbErrorLogForTests(): void;
205
+ /**
206
+ * Number of keys currently tracked in the log-dedupe table. Test-only:
207
+ * lets a test pin the DB_LOG_MAX_KEYS hard-cap (the table must never grow
208
+ * past the cap even under a burst of distinct errors inside one window).
209
+ */
210
+ export declare function getRecentDbErrorCountForTests(): number;
211
+ export declare abstract class SQLiteBase {
212
+ #private;
213
+ /**
214
+ * Open (or create) a SQLite DB at `dbPath`.
215
+ *
216
+ * v1.0.130 — multi-writer is the contract. ALL SQLiteBase consumers
217
+ * (SessionDB, ContentStore) may open the same on-disk dbPath from
218
+ * multiple processes simultaneously — that is the legitimate multi-
219
+ * window UX shape and the WAL handles it natively. SQLITE_BUSY on
220
+ * write contention is absorbed by `withRetry()` below (busy_timeout
221
+ * = 30000ms inside `new Database(...)`).
222
+ *
223
+ * v1.0.128 introduced a single-writer guard here as a defense against
224
+ * #560. That defense was an over-correction — the actual root causes
225
+ * of #560 were #559 (zombie MCP child accumulation) and #561 (Pi
226
+ * misdetection writing to the wrong DB path), both fixed in v1.0.128
227
+ * + v1.0.129. The single-writer guard broke legitimate multi-window
228
+ * users; v1.0.130 rolls it out. See
229
+ * docs/adr/0001-sessiondb-multi-writer.md and the v1.0.130 INVARIANT
230
+ * block in tests/util/db-base-platform-gate.test.ts for the
231
+ * regression-proof anchor (source-pin + behavioural).
232
+ */
233
+ constructor(dbPath: string);
234
+ /** Called once after WAL pragmas are applied. Subclasses run CREATE TABLE/VIRTUAL TABLE here. */
235
+ protected abstract initSchema(): void;
236
+ /** Called once after schema init. Subclasses compile and cache their prepared statements here. */
237
+ protected abstract prepareStatements(): void;
238
+ /** Raw database instance — available to subclasses only. */
239
+ protected get db(): DatabaseInstance;
240
+ /** The path this database was opened from. */
241
+ get dbPath(): string;
242
+ /** Close the database connection without deleting files. */
243
+ close(): void;
244
+ protected withRetry<T>(fn: () => T): T;
245
+ /**
246
+ * Close the connection and delete all associated DB files (main, WAL, SHM).
247
+ * Call on process exit or at end of session lifecycle.
248
+ */
249
+ cleanup(): void;
250
+ }