sdl-mcp 0.6.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 (496) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +132 -0
  3. package/config/benchmark.ci.config.json +86 -0
  4. package/config/benchmark.ci.windows.config.json +86 -0
  5. package/config/benchmark.config.example.json +86 -0
  6. package/config/benchmark.config.json +86 -0
  7. package/config/sdlmcp.config.example.json +139 -0
  8. package/config/sdlmcp.config.json +48 -0
  9. package/config/sdlmcp.config.schema.json +381 -0
  10. package/dist/agent/evidence.d.ts +18 -0
  11. package/dist/agent/evidence.d.ts.map +1 -0
  12. package/dist/agent/evidence.js +107 -0
  13. package/dist/agent/evidence.js.map +1 -0
  14. package/dist/agent/executor.d.ts +28 -0
  15. package/dist/agent/executor.d.ts.map +1 -0
  16. package/dist/agent/executor.js +261 -0
  17. package/dist/agent/executor.js.map +1 -0
  18. package/dist/agent/index.d.ts +6 -0
  19. package/dist/agent/index.d.ts.map +1 -0
  20. package/dist/agent/index.js +6 -0
  21. package/dist/agent/index.js.map +1 -0
  22. package/dist/agent/orchestrator.d.ts +14 -0
  23. package/dist/agent/orchestrator.d.ts.map +1 -0
  24. package/dist/agent/orchestrator.js +108 -0
  25. package/dist/agent/orchestrator.js.map +1 -0
  26. package/dist/agent/planner.d.ts +21 -0
  27. package/dist/agent/planner.d.ts.map +1 -0
  28. package/dist/agent/planner.js +153 -0
  29. package/dist/agent/planner.js.map +1 -0
  30. package/dist/agent/types.d.ts +86 -0
  31. package/dist/agent/types.d.ts.map +1 -0
  32. package/dist/agent/types.js +2 -0
  33. package/dist/agent/types.js.map +1 -0
  34. package/dist/benchmark/index.d.ts +4 -0
  35. package/dist/benchmark/index.d.ts.map +1 -0
  36. package/dist/benchmark/index.js +4 -0
  37. package/dist/benchmark/index.js.map +1 -0
  38. package/dist/benchmark/regression.d.ts +40 -0
  39. package/dist/benchmark/regression.d.ts.map +1 -0
  40. package/dist/benchmark/regression.js +199 -0
  41. package/dist/benchmark/regression.js.map +1 -0
  42. package/dist/benchmark/smoothing.d.ts +40 -0
  43. package/dist/benchmark/smoothing.d.ts.map +1 -0
  44. package/dist/benchmark/smoothing.js +121 -0
  45. package/dist/benchmark/smoothing.js.map +1 -0
  46. package/dist/benchmark/threshold.d.ts +64 -0
  47. package/dist/benchmark/threshold.d.ts.map +1 -0
  48. package/dist/benchmark/threshold.js +173 -0
  49. package/dist/benchmark/threshold.js.map +1 -0
  50. package/dist/cli/argParsing.d.ts +34 -0
  51. package/dist/cli/argParsing.d.ts.map +1 -0
  52. package/dist/cli/argParsing.js +329 -0
  53. package/dist/cli/argParsing.js.map +1 -0
  54. package/dist/cli/commands/benchmark.d.ts +16 -0
  55. package/dist/cli/commands/benchmark.d.ts.map +1 -0
  56. package/dist/cli/commands/benchmark.js +412 -0
  57. package/dist/cli/commands/benchmark.js.map +1 -0
  58. package/dist/cli/commands/doctor.d.ts +3 -0
  59. package/dist/cli/commands/doctor.d.ts.map +1 -0
  60. package/dist/cli/commands/doctor.js +218 -0
  61. package/dist/cli/commands/doctor.js.map +1 -0
  62. package/dist/cli/commands/export.d.ts +12 -0
  63. package/dist/cli/commands/export.d.ts.map +1 -0
  64. package/dist/cli/commands/export.js +70 -0
  65. package/dist/cli/commands/export.js.map +1 -0
  66. package/dist/cli/commands/import.d.ts +10 -0
  67. package/dist/cli/commands/import.d.ts.map +1 -0
  68. package/dist/cli/commands/import.js +40 -0
  69. package/dist/cli/commands/import.js.map +1 -0
  70. package/dist/cli/commands/index.d.ts +3 -0
  71. package/dist/cli/commands/index.d.ts.map +1 -0
  72. package/dist/cli/commands/index.js +89 -0
  73. package/dist/cli/commands/index.js.map +1 -0
  74. package/dist/cli/commands/init.d.ts +3 -0
  75. package/dist/cli/commands/init.d.ts.map +1 -0
  76. package/dist/cli/commands/init.js +221 -0
  77. package/dist/cli/commands/init.js.map +1 -0
  78. package/dist/cli/commands/pull.d.ts +11 -0
  79. package/dist/cli/commands/pull.d.ts.map +1 -0
  80. package/dist/cli/commands/pull.js +47 -0
  81. package/dist/cli/commands/pull.js.map +1 -0
  82. package/dist/cli/commands/serve.d.ts +3 -0
  83. package/dist/cli/commands/serve.d.ts.map +1 -0
  84. package/dist/cli/commands/serve.js +72 -0
  85. package/dist/cli/commands/serve.js.map +1 -0
  86. package/dist/cli/commands/version.d.ts +3 -0
  87. package/dist/cli/commands/version.d.ts.map +1 -0
  88. package/dist/cli/commands/version.js +24 -0
  89. package/dist/cli/commands/version.js.map +1 -0
  90. package/dist/cli/index.d.ts +3 -0
  91. package/dist/cli/index.d.ts.map +1 -0
  92. package/dist/cli/index.js +213 -0
  93. package/dist/cli/index.js.map +1 -0
  94. package/dist/cli/logging.d.ts +10 -0
  95. package/dist/cli/logging.d.ts.map +1 -0
  96. package/dist/cli/logging.js +48 -0
  97. package/dist/cli/logging.js.map +1 -0
  98. package/dist/cli/transport/http.d.ts +3 -0
  99. package/dist/cli/transport/http.d.ts.map +1 -0
  100. package/dist/cli/transport/http.js +106 -0
  101. package/dist/cli/transport/http.js.map +1 -0
  102. package/dist/cli/transport/stdio.d.ts +3 -0
  103. package/dist/cli/transport/stdio.d.ts.map +1 -0
  104. package/dist/cli/transport/stdio.js +6 -0
  105. package/dist/cli/transport/stdio.js.map +1 -0
  106. package/dist/cli/types.d.ts +41 -0
  107. package/dist/cli/types.d.ts.map +1 -0
  108. package/dist/cli/types.js +2 -0
  109. package/dist/cli/types.js.map +1 -0
  110. package/dist/code/gate.d.ts +11 -0
  111. package/dist/code/gate.d.ts.map +1 -0
  112. package/dist/code/gate.js +134 -0
  113. package/dist/code/gate.js.map +1 -0
  114. package/dist/code/hotpath.d.ts +17 -0
  115. package/dist/code/hotpath.d.ts.map +1 -0
  116. package/dist/code/hotpath.js +200 -0
  117. package/dist/code/hotpath.js.map +1 -0
  118. package/dist/code/redact.d.ts +19 -0
  119. package/dist/code/redact.d.ts.map +1 -0
  120. package/dist/code/redact.js +92 -0
  121. package/dist/code/redact.js.map +1 -0
  122. package/dist/code/skeleton.d.ts +32 -0
  123. package/dist/code/skeleton.d.ts.map +1 -0
  124. package/dist/code/skeleton.js +610 -0
  125. package/dist/code/skeleton.js.map +1 -0
  126. package/dist/code/windows.d.ts +18 -0
  127. package/dist/code/windows.d.ts.map +1 -0
  128. package/dist/code/windows.js +236 -0
  129. package/dist/code/windows.js.map +1 -0
  130. package/dist/config/constants.d.ts +340 -0
  131. package/dist/config/constants.d.ts.map +1 -0
  132. package/dist/config/constants.js +379 -0
  133. package/dist/config/constants.js.map +1 -0
  134. package/dist/config/loadConfig.d.ts +3 -0
  135. package/dist/config/loadConfig.d.ts.map +1 -0
  136. package/dist/config/loadConfig.js +71 -0
  137. package/dist/config/loadConfig.js.map +1 -0
  138. package/dist/config/types.d.ts +509 -0
  139. package/dist/config/types.d.ts.map +1 -0
  140. package/dist/config/types.js +139 -0
  141. package/dist/config/types.js.map +1 -0
  142. package/dist/db/db.d.ts +4 -0
  143. package/dist/db/db.d.ts.map +1 -0
  144. package/dist/db/db.js +47 -0
  145. package/dist/db/db.js.map +1 -0
  146. package/dist/db/migrations.d.ts +15 -0
  147. package/dist/db/migrations.d.ts.map +1 -0
  148. package/dist/db/migrations.js +81 -0
  149. package/dist/db/migrations.js.map +1 -0
  150. package/dist/db/queries.d.ts +440 -0
  151. package/dist/db/queries.d.ts.map +1 -0
  152. package/dist/db/queries.js +1054 -0
  153. package/dist/db/queries.js.map +1 -0
  154. package/dist/db/schema.d.ts +132 -0
  155. package/dist/db/schema.d.ts.map +1 -0
  156. package/dist/db/schema.js +2 -0
  157. package/dist/db/schema.js.map +1 -0
  158. package/dist/delta/blastRadius.d.ts +24 -0
  159. package/dist/delta/blastRadius.d.ts.map +1 -0
  160. package/dist/delta/blastRadius.js +239 -0
  161. package/dist/delta/blastRadius.js.map +1 -0
  162. package/dist/delta/diff.d.ts +16 -0
  163. package/dist/delta/diff.d.ts.map +1 -0
  164. package/dist/delta/diff.js +236 -0
  165. package/dist/delta/diff.js.map +1 -0
  166. package/dist/delta/versioning.d.ts +11 -0
  167. package/dist/delta/versioning.d.ts.map +1 -0
  168. package/dist/delta/versioning.js +68 -0
  169. package/dist/delta/versioning.js.map +1 -0
  170. package/dist/graph/buildGraph.d.ts +12 -0
  171. package/dist/graph/buildGraph.d.ts.map +1 -0
  172. package/dist/graph/buildGraph.js +81 -0
  173. package/dist/graph/buildGraph.js.map +1 -0
  174. package/dist/graph/cache.d.ts +111 -0
  175. package/dist/graph/cache.d.ts.map +1 -0
  176. package/dist/graph/cache.js +237 -0
  177. package/dist/graph/cache.js.map +1 -0
  178. package/dist/graph/metrics.d.ts +12 -0
  179. package/dist/graph/metrics.d.ts.map +1 -0
  180. package/dist/graph/metrics.js +253 -0
  181. package/dist/graph/metrics.js.map +1 -0
  182. package/dist/graph/minHeap.d.ts +91 -0
  183. package/dist/graph/minHeap.d.ts.map +1 -0
  184. package/dist/graph/minHeap.js +159 -0
  185. package/dist/graph/minHeap.js.map +1 -0
  186. package/dist/graph/overview.d.ts +22 -0
  187. package/dist/graph/overview.d.ts.map +1 -0
  188. package/dist/graph/overview.js +379 -0
  189. package/dist/graph/overview.js.map +1 -0
  190. package/dist/graph/score.d.ts +27 -0
  191. package/dist/graph/score.d.ts.map +1 -0
  192. package/dist/graph/score.js +214 -0
  193. package/dist/graph/score.js.map +1 -0
  194. package/dist/graph/slice.d.ts +51 -0
  195. package/dist/graph/slice.d.ts.map +1 -0
  196. package/dist/graph/slice.js +1047 -0
  197. package/dist/graph/slice.js.map +1 -0
  198. package/dist/graph/sliceCache.d.ts +33 -0
  199. package/dist/graph/sliceCache.d.ts.map +1 -0
  200. package/dist/graph/sliceCache.js +140 -0
  201. package/dist/graph/sliceCache.js.map +1 -0
  202. package/dist/indexer/adapter/BaseAdapter.d.ts +29 -0
  203. package/dist/indexer/adapter/BaseAdapter.d.ts.map +1 -0
  204. package/dist/indexer/adapter/BaseAdapter.js +97 -0
  205. package/dist/indexer/adapter/BaseAdapter.js.map +1 -0
  206. package/dist/indexer/adapter/LanguageAdapter.d.ts +20 -0
  207. package/dist/indexer/adapter/LanguageAdapter.d.ts.map +1 -0
  208. package/dist/indexer/adapter/LanguageAdapter.js +2 -0
  209. package/dist/indexer/adapter/LanguageAdapter.js.map +1 -0
  210. package/dist/indexer/adapter/adapters.d.ts +57 -0
  211. package/dist/indexer/adapter/adapters.d.ts.map +1 -0
  212. package/dist/indexer/adapter/adapters.js +129 -0
  213. package/dist/indexer/adapter/adapters.js.map +1 -0
  214. package/dist/indexer/adapter/c.d.ts +18 -0
  215. package/dist/indexer/adapter/c.d.ts.map +1 -0
  216. package/dist/indexer/adapter/c.js +443 -0
  217. package/dist/indexer/adapter/c.js.map +1 -0
  218. package/dist/indexer/adapter/cpp.d.ts +18 -0
  219. package/dist/indexer/adapter/cpp.d.ts.map +1 -0
  220. package/dist/indexer/adapter/cpp.js +493 -0
  221. package/dist/indexer/adapter/cpp.js.map +1 -0
  222. package/dist/indexer/adapter/csharp.d.ts +48 -0
  223. package/dist/indexer/adapter/csharp.d.ts.map +1 -0
  224. package/dist/indexer/adapter/csharp.js +638 -0
  225. package/dist/indexer/adapter/csharp.js.map +1 -0
  226. package/dist/indexer/adapter/go.d.ts +14 -0
  227. package/dist/indexer/adapter/go.d.ts.map +1 -0
  228. package/dist/indexer/adapter/go.js +400 -0
  229. package/dist/indexer/adapter/go.js.map +1 -0
  230. package/dist/indexer/adapter/index.d.ts +14 -0
  231. package/dist/indexer/adapter/index.d.ts.map +1 -0
  232. package/dist/indexer/adapter/index.js +13 -0
  233. package/dist/indexer/adapter/index.js.map +1 -0
  234. package/dist/indexer/adapter/java.d.ts +14 -0
  235. package/dist/indexer/adapter/java.d.ts.map +1 -0
  236. package/dist/indexer/adapter/java.js +391 -0
  237. package/dist/indexer/adapter/java.js.map +1 -0
  238. package/dist/indexer/adapter/kotlin.d.ts +18 -0
  239. package/dist/indexer/adapter/kotlin.d.ts.map +1 -0
  240. package/dist/indexer/adapter/kotlin.js +599 -0
  241. package/dist/indexer/adapter/kotlin.js.map +1 -0
  242. package/dist/indexer/adapter/php.d.ts +18 -0
  243. package/dist/indexer/adapter/php.d.ts.map +1 -0
  244. package/dist/indexer/adapter/php.js +574 -0
  245. package/dist/indexer/adapter/php.js.map +1 -0
  246. package/dist/indexer/adapter/plugin/index.d.ts +3 -0
  247. package/dist/indexer/adapter/plugin/index.d.ts.map +1 -0
  248. package/dist/indexer/adapter/plugin/index.js +3 -0
  249. package/dist/indexer/adapter/plugin/index.js.map +1 -0
  250. package/dist/indexer/adapter/plugin/loader.d.ts +13 -0
  251. package/dist/indexer/adapter/plugin/loader.d.ts.map +1 -0
  252. package/dist/indexer/adapter/plugin/loader.js +154 -0
  253. package/dist/indexer/adapter/plugin/loader.js.map +1 -0
  254. package/dist/indexer/adapter/plugin/types.d.ts +76 -0
  255. package/dist/indexer/adapter/plugin/types.d.ts.map +1 -0
  256. package/dist/indexer/adapter/plugin/types.js +47 -0
  257. package/dist/indexer/adapter/plugin/types.js.map +1 -0
  258. package/dist/indexer/adapter/python.d.ts +14 -0
  259. package/dist/indexer/adapter/python.d.ts.map +1 -0
  260. package/dist/indexer/adapter/python.js +511 -0
  261. package/dist/indexer/adapter/python.js.map +1 -0
  262. package/dist/indexer/adapter/registry.d.ts +17 -0
  263. package/dist/indexer/adapter/registry.d.ts.map +1 -0
  264. package/dist/indexer/adapter/registry.js +134 -0
  265. package/dist/indexer/adapter/registry.js.map +1 -0
  266. package/dist/indexer/adapter/rust.d.ts +18 -0
  267. package/dist/indexer/adapter/rust.d.ts.map +1 -0
  268. package/dist/indexer/adapter/rust.js +709 -0
  269. package/dist/indexer/adapter/rust.js.map +1 -0
  270. package/dist/indexer/adapter/shell.d.ts +18 -0
  271. package/dist/indexer/adapter/shell.d.ts.map +1 -0
  272. package/dist/indexer/adapter/shell.js +345 -0
  273. package/dist/indexer/adapter/shell.js.map +1 -0
  274. package/dist/indexer/adapter/typescript.d.ts +14 -0
  275. package/dist/indexer/adapter/typescript.d.ts.map +1 -0
  276. package/dist/indexer/adapter/typescript.js +31 -0
  277. package/dist/indexer/adapter/typescript.js.map +1 -0
  278. package/dist/indexer/configEdges.d.ts +30 -0
  279. package/dist/indexer/configEdges.d.ts.map +1 -0
  280. package/dist/indexer/configEdges.js +260 -0
  281. package/dist/indexer/configEdges.js.map +1 -0
  282. package/dist/indexer/fileScanner.d.ts +16 -0
  283. package/dist/indexer/fileScanner.d.ts.map +1 -0
  284. package/dist/indexer/fileScanner.js +90 -0
  285. package/dist/indexer/fileScanner.js.map +1 -0
  286. package/dist/indexer/fingerprints.d.ts +23 -0
  287. package/dist/indexer/fingerprints.d.ts.map +1 -0
  288. package/dist/indexer/fingerprints.js +97 -0
  289. package/dist/indexer/fingerprints.js.map +1 -0
  290. package/dist/indexer/indexer.d.ts +58 -0
  291. package/dist/indexer/indexer.d.ts.map +1 -0
  292. package/dist/indexer/indexer.js +1229 -0
  293. package/dist/indexer/indexer.js.map +1 -0
  294. package/dist/indexer/summaries.d.ts +5 -0
  295. package/dist/indexer/summaries.d.ts.map +1 -0
  296. package/dist/indexer/summaries.js +331 -0
  297. package/dist/indexer/summaries.js.map +1 -0
  298. package/dist/indexer/treesitter/extractCalls.d.ts +40 -0
  299. package/dist/indexer/treesitter/extractCalls.d.ts.map +1 -0
  300. package/dist/indexer/treesitter/extractCalls.js +561 -0
  301. package/dist/indexer/treesitter/extractCalls.js.map +1 -0
  302. package/dist/indexer/treesitter/extractImports.d.ts +12 -0
  303. package/dist/indexer/treesitter/extractImports.d.ts.map +1 -0
  304. package/dist/indexer/treesitter/extractImports.js +184 -0
  305. package/dist/indexer/treesitter/extractImports.js.map +1 -0
  306. package/dist/indexer/treesitter/extractSymbols.d.ts +24 -0
  307. package/dist/indexer/treesitter/extractSymbols.d.ts.map +1 -0
  308. package/dist/indexer/treesitter/extractSymbols.js +389 -0
  309. package/dist/indexer/treesitter/extractSymbols.js.map +1 -0
  310. package/dist/indexer/treesitter/grammarLoader.d.ts +6 -0
  311. package/dist/indexer/treesitter/grammarLoader.d.ts.map +1 -0
  312. package/dist/indexer/treesitter/grammarLoader.js +125 -0
  313. package/dist/indexer/treesitter/grammarLoader.js.map +1 -0
  314. package/dist/indexer/treesitter/symbolUtils.d.ts +4 -0
  315. package/dist/indexer/treesitter/symbolUtils.d.ts.map +1 -0
  316. package/dist/indexer/treesitter/symbolUtils.js +26 -0
  317. package/dist/indexer/treesitter/symbolUtils.js.map +1 -0
  318. package/dist/indexer/treesitter/tsTreesitter.d.ts +9 -0
  319. package/dist/indexer/treesitter/tsTreesitter.d.ts.map +1 -0
  320. package/dist/indexer/treesitter/tsTreesitter.js +54 -0
  321. package/dist/indexer/treesitter/tsTreesitter.js.map +1 -0
  322. package/dist/indexer/treesitter/types.d.ts +19 -0
  323. package/dist/indexer/treesitter/types.d.ts.map +1 -0
  324. package/dist/indexer/treesitter/types.js +7 -0
  325. package/dist/indexer/treesitter/types.js.map +1 -0
  326. package/dist/indexer/ts/tsParser.d.ts +20 -0
  327. package/dist/indexer/ts/tsParser.d.ts.map +1 -0
  328. package/dist/indexer/ts/tsParser.js +114 -0
  329. package/dist/indexer/ts/tsParser.js.map +1 -0
  330. package/dist/indexer/worker.d.ts +2 -0
  331. package/dist/indexer/worker.d.ts.map +1 -0
  332. package/dist/indexer/worker.js +59 -0
  333. package/dist/indexer/worker.js.map +1 -0
  334. package/dist/indexer/workerPool.d.ts +20 -0
  335. package/dist/indexer/workerPool.d.ts.map +1 -0
  336. package/dist/indexer/workerPool.js +93 -0
  337. package/dist/indexer/workerPool.js.map +1 -0
  338. package/dist/main.d.ts +2 -0
  339. package/dist/main.d.ts.map +1 -0
  340. package/dist/main.js +111 -0
  341. package/dist/main.js.map +1 -0
  342. package/dist/mcp/errors.d.ts +40 -0
  343. package/dist/mcp/errors.d.ts.map +1 -0
  344. package/dist/mcp/errors.js +66 -0
  345. package/dist/mcp/errors.js.map +1 -0
  346. package/dist/mcp/resources.d.ts +24 -0
  347. package/dist/mcp/resources.d.ts.map +1 -0
  348. package/dist/mcp/resources.js +140 -0
  349. package/dist/mcp/resources.js.map +1 -0
  350. package/dist/mcp/telemetry.d.ts +67 -0
  351. package/dist/mcp/telemetry.d.ts.map +1 -0
  352. package/dist/mcp/telemetry.js +128 -0
  353. package/dist/mcp/telemetry.js.map +1 -0
  354. package/dist/mcp/tools/agent.d.ts +241 -0
  355. package/dist/mcp/tools/agent.d.ts.map +1 -0
  356. package/dist/mcp/tools/agent.js +113 -0
  357. package/dist/mcp/tools/agent.js.map +1 -0
  358. package/dist/mcp/tools/code.d.ts +32 -0
  359. package/dist/mcp/tools/code.d.ts.map +1 -0
  360. package/dist/mcp/tools/code.js +388 -0
  361. package/dist/mcp/tools/code.js.map +1 -0
  362. package/dist/mcp/tools/delta.d.ts +12 -0
  363. package/dist/mcp/tools/delta.d.ts.map +1 -0
  364. package/dist/mcp/tools/delta.js +82 -0
  365. package/dist/mcp/tools/delta.js.map +1 -0
  366. package/dist/mcp/tools/index.d.ts +3 -0
  367. package/dist/mcp/tools/index.d.ts.map +1 -0
  368. package/dist/mcp/tools/index.js +35 -0
  369. package/dist/mcp/tools/index.js.map +1 -0
  370. package/dist/mcp/tools/policy.d.ts +20 -0
  371. package/dist/mcp/tools/policy.d.ts.map +1 -0
  372. package/dist/mcp/tools/policy.js +67 -0
  373. package/dist/mcp/tools/policy.js.map +1 -0
  374. package/dist/mcp/tools/prRisk.d.ts +34 -0
  375. package/dist/mcp/tools/prRisk.d.ts.map +1 -0
  376. package/dist/mcp/tools/prRisk.js +304 -0
  377. package/dist/mcp/tools/prRisk.js.map +1 -0
  378. package/dist/mcp/tools/repo.d.ts +46 -0
  379. package/dist/mcp/tools/repo.d.ts.map +1 -0
  380. package/dist/mcp/tools/repo.js +224 -0
  381. package/dist/mcp/tools/repo.js.map +1 -0
  382. package/dist/mcp/tools/slice.d.ts +44 -0
  383. package/dist/mcp/tools/slice.d.ts.map +1 -0
  384. package/dist/mcp/tools/slice.js +688 -0
  385. package/dist/mcp/tools/slice.js.map +1 -0
  386. package/dist/mcp/tools/symbol.d.ts +21 -0
  387. package/dist/mcp/tools/symbol.d.ts.map +1 -0
  388. package/dist/mcp/tools/symbol.js +416 -0
  389. package/dist/mcp/tools/symbol.js.map +1 -0
  390. package/dist/mcp/tools.d.ts +6003 -0
  391. package/dist/mcp/tools.d.ts.map +1 -0
  392. package/dist/mcp/tools.js +932 -0
  393. package/dist/mcp/tools.js.map +1 -0
  394. package/dist/mcp/types.d.ts +500 -0
  395. package/dist/mcp/types.d.ts.map +1 -0
  396. package/dist/mcp/types.js +2 -0
  397. package/dist/mcp/types.js.map +1 -0
  398. package/dist/policy/engine.d.ts +21 -0
  399. package/dist/policy/engine.d.ts.map +1 -0
  400. package/dist/policy/engine.js +477 -0
  401. package/dist/policy/engine.js.map +1 -0
  402. package/dist/policy/types.d.ts +73 -0
  403. package/dist/policy/types.d.ts.map +1 -0
  404. package/dist/policy/types.js +12 -0
  405. package/dist/policy/types.js.map +1 -0
  406. package/dist/server.d.ts +17 -0
  407. package/dist/server.d.ts.map +1 -0
  408. package/dist/server.js +136 -0
  409. package/dist/server.js.map +1 -0
  410. package/dist/sync/pull.d.ts +4 -0
  411. package/dist/sync/pull.d.ts.map +1 -0
  412. package/dist/sync/pull.js +113 -0
  413. package/dist/sync/pull.js.map +1 -0
  414. package/dist/sync/sync.d.ts +6 -0
  415. package/dist/sync/sync.d.ts.map +1 -0
  416. package/dist/sync/sync.js +244 -0
  417. package/dist/sync/sync.js.map +1 -0
  418. package/dist/sync/types.d.ts +136 -0
  419. package/dist/sync/types.d.ts.map +1 -0
  420. package/dist/sync/types.js +2 -0
  421. package/dist/sync/types.js.map +1 -0
  422. package/dist/ts/diagnostics.d.ts +61 -0
  423. package/dist/ts/diagnostics.d.ts.map +1 -0
  424. package/dist/ts/diagnostics.js +259 -0
  425. package/dist/ts/diagnostics.js.map +1 -0
  426. package/dist/ts/mapping.d.ts +27 -0
  427. package/dist/ts/mapping.d.ts.map +1 -0
  428. package/dist/ts/mapping.js +68 -0
  429. package/dist/ts/mapping.js.map +1 -0
  430. package/dist/util/asyncFs.d.ts +103 -0
  431. package/dist/util/asyncFs.d.ts.map +1 -0
  432. package/dist/util/asyncFs.js +133 -0
  433. package/dist/util/asyncFs.js.map +1 -0
  434. package/dist/util/concurrency.d.ts +77 -0
  435. package/dist/util/concurrency.d.ts.map +1 -0
  436. package/dist/util/concurrency.js +146 -0
  437. package/dist/util/concurrency.js.map +1 -0
  438. package/dist/util/depLabels.d.ts +3 -0
  439. package/dist/util/depLabels.d.ts.map +1 -0
  440. package/dist/util/depLabels.js +19 -0
  441. package/dist/util/depLabels.js.map +1 -0
  442. package/dist/util/findPackageRoot.d.ts +7 -0
  443. package/dist/util/findPackageRoot.d.ts.map +1 -0
  444. package/dist/util/findPackageRoot.js +21 -0
  445. package/dist/util/findPackageRoot.js.map +1 -0
  446. package/dist/util/hashing.d.ts +9 -0
  447. package/dist/util/hashing.d.ts.map +1 -0
  448. package/dist/util/hashing.js +37 -0
  449. package/dist/util/hashing.js.map +1 -0
  450. package/dist/util/logger.d.ts +14 -0
  451. package/dist/util/logger.d.ts.map +1 -0
  452. package/dist/util/logger.js +51 -0
  453. package/dist/util/logger.js.map +1 -0
  454. package/dist/util/paths.d.ts +6 -0
  455. package/dist/util/paths.d.ts.map +1 -0
  456. package/dist/util/paths.js +79 -0
  457. package/dist/util/paths.js.map +1 -0
  458. package/dist/util/time.d.ts +4 -0
  459. package/dist/util/time.d.ts.map +1 -0
  460. package/dist/util/time.js +20 -0
  461. package/dist/util/time.js.map +1 -0
  462. package/dist/util/tokenize.d.ts +5 -0
  463. package/dist/util/tokenize.d.ts.map +1 -0
  464. package/dist/util/tokenize.js +30 -0
  465. package/dist/util/tokenize.js.map +1 -0
  466. package/dist/util/truncation.d.ts +38 -0
  467. package/dist/util/truncation.d.ts.map +1 -0
  468. package/dist/util/truncation.js +259 -0
  469. package/dist/util/truncation.js.map +1 -0
  470. package/migrations/.gitkeep +1 -0
  471. package/migrations/0001_init.sql +61 -0
  472. package/migrations/0002_edges_indexes.sql +2 -0
  473. package/migrations/0003_versions.sql +22 -0
  474. package/migrations/0004_metrics_audit.sql +23 -0
  475. package/migrations/0005_slice_handles.sql +15 -0
  476. package/migrations/0006_content_addressed.sql +29 -0
  477. package/migrations/0007_add_language_to_symbols.sql +28 -0
  478. package/migrations/0008_performance_indexes.sql +21 -0
  479. package/migrations/0009_fix_edge_fks.sql +37 -0
  480. package/migrations/0010_standardize_fks.sql +35 -0
  481. package/migrations/0011_add_directory_column.sql +20 -0
  482. package/migrations/0012_symbol_references.sql +16 -0
  483. package/migrations/0013_sync_artifacts.sql +17 -0
  484. package/package.json +107 -0
  485. package/templates/CLAUDE.md.template +179 -0
  486. package/templates/README.md +228 -0
  487. package/templates/claude-code.json +54 -0
  488. package/templates/codex.json +55 -0
  489. package/templates/gemini.json +66 -0
  490. package/templates/opencode.json +90 -0
  491. package/templates/plugin-template/LICENSE +21 -0
  492. package/templates/plugin-template/README.md +309 -0
  493. package/templates/plugin-template/index.ts +160 -0
  494. package/templates/plugin-template/package.json +31 -0
  495. package/templates/plugin-template/test/plugin.test.ts +186 -0
  496. package/templates/plugin-template/tsconfig.json +21 -0
@@ -0,0 +1,51 @@
1
+ // MCP servers must use stderr for ALL logging - stdout is reserved for JSON-RPC
2
+ const writeToStderr = (msg) => {
3
+ process.stderr.write(msg + "\n");
4
+ };
5
+ function safeStringify(obj) {
6
+ try {
7
+ return JSON.stringify(obj);
8
+ }
9
+ catch (e) {
10
+ return "[circular or unstringifiable]";
11
+ }
12
+ }
13
+ class Logger {
14
+ level;
15
+ constructor(level = "info") {
16
+ this.level = level;
17
+ }
18
+ shouldLog(level) {
19
+ const levels = ["debug", "info", "warn", "error"];
20
+ return levels.indexOf(level) >= levels.indexOf(this.level);
21
+ }
22
+ setLevel(level) {
23
+ this.level = level;
24
+ }
25
+ debug(message, meta) {
26
+ if (this.shouldLog("debug")) {
27
+ const metaStr = meta ? " " + safeStringify(meta) : "";
28
+ writeToStderr(`[DEBUG] ${message}${metaStr}`);
29
+ }
30
+ }
31
+ info(message, meta) {
32
+ if (this.shouldLog("info")) {
33
+ const metaStr = meta ? " " + safeStringify(meta) : "";
34
+ writeToStderr(`[INFO] ${message}${metaStr}`);
35
+ }
36
+ }
37
+ warn(message, meta) {
38
+ if (this.shouldLog("warn")) {
39
+ const metaStr = meta ? " " + safeStringify(meta) : "";
40
+ writeToStderr(`[WARN] ${message}${metaStr}`);
41
+ }
42
+ }
43
+ error(message, meta) {
44
+ if (this.shouldLog("error")) {
45
+ const metaStr = meta ? " " + safeStringify(meta) : "";
46
+ writeToStderr(`[ERROR] ${message}${metaStr}`);
47
+ }
48
+ }
49
+ }
50
+ export const logger = new Logger();
51
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,MAAM,aAAa,GAAG,CAAC,GAAW,EAAQ,EAAE;IAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,SAAS,aAAa,CAAC,GAA4B;IACjD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,+BAA+B,CAAC;IACzC,CAAC;AACH,CAAC;AAED,MAAM,MAAM;IACF,KAAK,CAAW;IAExB,YAAY,QAAkB,MAAM;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,SAAS,CAAC,KAAe;QAC/B,MAAM,MAAM,GAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,QAAQ,CAAC,KAAe;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,aAAa,CAAC,WAAW,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,aAAa,CAAC,UAAU,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,aAAa,CAAC,UAAU,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,aAAa,CAAC,WAAW,OAAO,GAAG,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function normalizePath(p: string): string;
2
+ export declare function getRelativePath(from: string, to: string): string;
3
+ export declare function safeJoin(...parts: string[]): string;
4
+ export declare function validatePathWithinRoot(root: string, target: string): string;
5
+ export declare function getAbsolutePathFromRepoRoot(repoRoot: string, relPath: string): string;
6
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/util/paths.ts"],"names":[],"mappings":"AAcA,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAY/C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAgBhE;AAED,wBAAgB,QAAQ,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAcnD;AAUD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA4B3E;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,CAOR"}
@@ -0,0 +1,79 @@
1
+ import * as path from "path";
2
+ function toForwardSlashes(p) {
3
+ return p.replace(/\\/g, "/");
4
+ }
5
+ function toBackSlashes(p) {
6
+ return p.replace(/\//g, "\\");
7
+ }
8
+ function isWindowsPathLike(p) {
9
+ return /^[A-Za-z]:[\\/]/.test(p) || p.startsWith("\\\\") || p.startsWith("//");
10
+ }
11
+ export function normalizePath(p) {
12
+ if (p === "") {
13
+ return path.posix.normalize(p);
14
+ }
15
+ const slashNormalized = toForwardSlashes(p);
16
+ if (isWindowsPathLike(slashNormalized)) {
17
+ const winNormalized = path.win32.normalize(toBackSlashes(slashNormalized));
18
+ return toForwardSlashes(winNormalized);
19
+ }
20
+ return path.posix.normalize(slashNormalized);
21
+ }
22
+ export function getRelativePath(from, to) {
23
+ const normalizedFrom = normalizePath(from);
24
+ const normalizedTo = normalizePath(to);
25
+ const useWindowsPaths = isWindowsPathLike(normalizedFrom) || isWindowsPathLike(normalizedTo);
26
+ if (useWindowsPaths) {
27
+ return normalizePath(path.win32.relative(toBackSlashes(normalizedFrom), toBackSlashes(normalizedTo)));
28
+ }
29
+ return normalizePath(path.posix.relative(normalizedFrom, normalizedTo));
30
+ }
31
+ export function safeJoin(...parts) {
32
+ if (parts.length === 0) {
33
+ return ".";
34
+ }
35
+ const normalizedParts = parts.map((part) => normalizePath(part));
36
+ if (isWindowsPathLike(normalizedParts[0])) {
37
+ const winResult = path.win32.join(...normalizedParts.map((part) => toBackSlashes(part)));
38
+ return normalizePath(winResult);
39
+ }
40
+ return normalizePath(path.posix.join(...normalizedParts));
41
+ }
42
+ function containsPathTraversal(p) {
43
+ const normalized = normalizePath(p);
44
+ if (normalized.startsWith(".."))
45
+ return true;
46
+ if (normalized.includes("/../"))
47
+ return true;
48
+ if (normalized.endsWith("/.."))
49
+ return true;
50
+ return false;
51
+ }
52
+ export function validatePathWithinRoot(root, target) {
53
+ const normalizedRootInput = normalizePath(root);
54
+ const normalizedTargetInput = normalizePath(target);
55
+ const useWindowsPaths = isWindowsPathLike(normalizedRootInput);
56
+ const absoluteRoot = useWindowsPaths
57
+ ? path.win32.resolve(toBackSlashes(normalizedRootInput))
58
+ : path.posix.resolve(normalizedRootInput);
59
+ const absoluteTarget = useWindowsPaths
60
+ ? path.win32.resolve(toBackSlashes(normalizedRootInput), toBackSlashes(normalizedTargetInput))
61
+ : path.posix.resolve(normalizedRootInput, normalizedTargetInput);
62
+ const normalizedRoot = normalizePath(absoluteRoot);
63
+ const normalizedTarget = normalizePath(absoluteTarget);
64
+ const rootPrefix = normalizedRoot.endsWith("/")
65
+ ? normalizedRoot
66
+ : `${normalizedRoot}/`;
67
+ if (normalizedTarget !== normalizedRoot && !normalizedTarget.startsWith(rootPrefix)) {
68
+ throw new Error(`Path traversal detected: ${target} escapes repository root`);
69
+ }
70
+ return absoluteTarget;
71
+ }
72
+ export function getAbsolutePathFromRepoRoot(repoRoot, relPath) {
73
+ if (containsPathTraversal(relPath)) {
74
+ throw new Error(`Path traversal sequence detected in: ${relPath}`);
75
+ }
76
+ const absolutePath = validatePathWithinRoot(repoRoot, relPath);
77
+ return normalizePath(absolutePath);
78
+ }
79
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/util/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function getCurrentTimestamp(): string;
2
+ export declare function formatDuration(milliseconds: number): string;
3
+ export declare function sleep(ms: number): Promise<void>;
4
+ //# sourceMappingURL=time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/util/time.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAU3D;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
@@ -0,0 +1,20 @@
1
+ export function getCurrentTimestamp() {
2
+ return new Date().toISOString();
3
+ }
4
+ export function formatDuration(milliseconds) {
5
+ const seconds = Math.floor(milliseconds / 1000);
6
+ const minutes = Math.floor(seconds / 60);
7
+ const hours = Math.floor(minutes / 60);
8
+ const days = Math.floor(hours / 24);
9
+ if (days > 0)
10
+ return `${days}d ${hours % 24}h`;
11
+ if (hours > 0)
12
+ return `${hours}h ${minutes % 60}m`;
13
+ if (minutes > 0)
14
+ return `${minutes}m ${seconds % 60}s`;
15
+ return `${seconds}s`;
16
+ }
17
+ export function sleep(ms) {
18
+ return new Promise((resolve) => setTimeout(resolve, ms));
19
+ }
20
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/util/time.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,YAAoB;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAEpC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC;IAC/C,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IACnD,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,GAAG,OAAO,KAAK,OAAO,GAAG,EAAE,GAAG,CAAC;IACvD,OAAO,GAAG,OAAO,GAAG,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function estimateTokens(text: string): number;
2
+ export declare function calculateRemainingBudget(used: number, total: number): number;
3
+ export declare function canFitTokens(tokens: number, budget: number): boolean;
4
+ export declare function tokenize(text: string): string[];
5
+ //# sourceMappingURL=tokenize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.d.ts","sourceRoot":"","sources":["../../src/util/tokenize.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWnD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAO/C"}
@@ -0,0 +1,30 @@
1
+ const PROSE_CHARS_PER_TOKEN = 3.5;
2
+ const STRUCTURAL_TOKEN_CHARS = new Set(["{", "}", "[", "]", ":", ",", "\""]);
3
+ export function estimateTokens(text) {
4
+ if (!text)
5
+ return 0;
6
+ let structuralChars = 0;
7
+ for (const char of text) {
8
+ if (STRUCTURAL_TOKEN_CHARS.has(char)) {
9
+ structuralChars++;
10
+ }
11
+ }
12
+ const proseChars = Math.max(0, text.length - structuralChars);
13
+ return Math.ceil(structuralChars + proseChars / PROSE_CHARS_PER_TOKEN);
14
+ }
15
+ export function calculateRemainingBudget(used, total) {
16
+ return Math.max(0, total - used);
17
+ }
18
+ export function canFitTokens(tokens, budget) {
19
+ return tokens <= budget;
20
+ }
21
+ export function tokenize(text) {
22
+ if (!text)
23
+ return [];
24
+ return text
25
+ .toLowerCase()
26
+ .replace(/[^\w\s.-]/g, ' ')
27
+ .split(/\s+/)
28
+ .filter(token => token.length > 0);
29
+ }
30
+ //# sourceMappingURL=tokenize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../../src/util/tokenize.ts"],"names":[],"mappings":"AAAA,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAE7E,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,eAAe,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,UAAU,GAAG,qBAAqB,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,KAAa;IAClE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,MAAc;IACzD,OAAO,MAAM,IAAI,MAAM,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;SAC1B,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { Range } from "../mcp/types.js";
2
+ export interface TruncationMetadata {
3
+ truncated: boolean;
4
+ droppedCount: number;
5
+ howToResume: {
6
+ type: "cursor" | "token";
7
+ value: string | number;
8
+ } | null;
9
+ }
10
+ export interface TruncationOptions {
11
+ maxItems?: number;
12
+ maxTokens?: number;
13
+ maxLines?: number;
14
+ truncateAt?: "start" | "end";
15
+ preserveFirst?: number;
16
+ preserveLast?: number;
17
+ }
18
+ export interface TruncatedArray<T> extends TruncationMetadata {
19
+ items: T[];
20
+ }
21
+ export interface TruncatedText extends TruncationMetadata {
22
+ text: string;
23
+ }
24
+ export interface TruncatedResult<T> {
25
+ data: T;
26
+ truncation: TruncationMetadata;
27
+ }
28
+ export declare function applyCountTruncation<T>(items: T[], options: TruncationOptions): TruncatedArray<T>;
29
+ export declare function applyTokenTruncation(text: string, options: TruncationOptions): TruncatedText;
30
+ export declare function applyLineTruncation(text: string, options: TruncationOptions): TruncatedText;
31
+ export declare function truncateText(text: string, options: TruncationOptions): TruncatedText;
32
+ export declare function truncateArray<T>(items: T[], options: TruncationOptions): TruncatedArray<T>;
33
+ export declare function truncateRange(range: Range, options: TruncationOptions): {
34
+ range: Range;
35
+ truncation: TruncationMetadata;
36
+ };
37
+ export declare function mergeTruncationMetadata(truncations: TruncationMetadata[]): TruncationMetadata;
38
+ //# sourceMappingURL=truncation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncation.d.ts","sourceRoot":"","sources":["../../src/util/truncation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;QACzB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;KACxB,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,CAAE,SAAQ,kBAAkB;IAC3D,KAAK,EAAE,CAAC,EAAE,CAAC;CACZ;AAED,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC;IACR,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAQD,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,EAAE,iBAAiB,GACzB,cAAc,CAAC,CAAC,CAAC,CAsDnB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,iBAAiB,GACzB,aAAa,CAsDf;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,iBAAiB,GACzB,aAAa,CAmDf;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,iBAAiB,GACzB,aAAa,CAgCf;AAED,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,EAAE,iBAAiB,GACzB,cAAc,CAAC,CAAC,CAAC,CAWnB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,iBAAiB,GACzB;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAA;CAAE,CAgElD;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,kBAAkB,EAAE,GAChC,kBAAkB,CAWpB"}
@@ -0,0 +1,259 @@
1
+ function estimateTokens(text) {
2
+ const words = text.split(/\s+/).filter((w) => w.length > 0);
3
+ const chars = text.length;
4
+ return Math.max(words.length, Math.floor(chars / 4));
5
+ }
6
+ export function applyCountTruncation(items, options) {
7
+ const maxItems = options.maxItems ?? Infinity;
8
+ if (items.length <= maxItems) {
9
+ return {
10
+ items,
11
+ truncated: false,
12
+ droppedCount: 0,
13
+ howToResume: null,
14
+ };
15
+ }
16
+ const preserveFirst = options.preserveFirst ?? 0;
17
+ const preserveLast = options.preserveLast ?? 0;
18
+ const truncateAt = options.truncateAt ?? "end";
19
+ let truncatedItems;
20
+ let droppedCount;
21
+ let howToResumeValue;
22
+ if (truncateAt === "end") {
23
+ const keepCount = Math.min(maxItems, items.length);
24
+ truncatedItems = items.slice(0, keepCount);
25
+ droppedCount = items.length - keepCount;
26
+ howToResumeValue = keepCount;
27
+ }
28
+ else if (truncateAt === "start") {
29
+ const keepCount = Math.min(maxItems, items.length);
30
+ truncatedItems = items.slice(-keepCount);
31
+ droppedCount = items.length - keepCount;
32
+ howToResumeValue = droppedCount;
33
+ }
34
+ else {
35
+ const firstCount = Math.min(preserveFirst, maxItems / 2);
36
+ const lastCount = Math.min(preserveLast, maxItems - firstCount);
37
+ const middleCount = Math.max(0, maxItems - firstCount - lastCount);
38
+ const firstItems = items.slice(0, firstCount);
39
+ const lastItems = items.slice(-lastCount);
40
+ const middleItems = middleCount > 0 ? items.slice(firstCount, firstCount + middleCount) : [];
41
+ truncatedItems = [...firstItems, ...middleItems, ...lastItems];
42
+ droppedCount = items.length - truncatedItems.length;
43
+ howToResumeValue = firstCount + middleCount;
44
+ }
45
+ return {
46
+ items: truncatedItems,
47
+ truncated: true,
48
+ droppedCount,
49
+ howToResume: {
50
+ type: "cursor",
51
+ value: howToResumeValue,
52
+ },
53
+ };
54
+ }
55
+ export function applyTokenTruncation(text, options) {
56
+ const maxTokens = options.maxTokens ?? Infinity;
57
+ const estimatedTokens = estimateTokens(text);
58
+ if (estimatedTokens <= maxTokens) {
59
+ return {
60
+ text,
61
+ truncated: false,
62
+ droppedCount: 0,
63
+ howToResume: null,
64
+ };
65
+ }
66
+ const truncateAt = options.truncateAt ?? "end";
67
+ const lines = text.split("\n");
68
+ const avgTokensPerLine = estimatedTokens / lines.length;
69
+ const maxLines = Math.floor(maxTokens / avgTokensPerLine);
70
+ let truncatedLines;
71
+ let droppedCount;
72
+ if (truncateAt === "end") {
73
+ truncatedLines = lines.slice(0, Math.max(1, maxLines));
74
+ droppedCount = lines.length - truncatedLines.length;
75
+ }
76
+ else if (truncateAt === "start") {
77
+ truncatedLines = lines.slice(-Math.max(1, maxLines));
78
+ droppedCount = lines.length - truncatedLines.length;
79
+ }
80
+ else {
81
+ const preserveFirst = options.preserveFirst ?? 0;
82
+ const preserveLast = options.preserveLast ?? 0;
83
+ const firstCount = Math.min(preserveFirst, maxLines / 2);
84
+ const lastCount = Math.min(preserveLast, maxLines - firstCount);
85
+ const middleCount = Math.max(0, maxLines - firstCount - lastCount);
86
+ const firstLines = lines.slice(0, firstCount);
87
+ const lastLines = lines.slice(-lastCount);
88
+ const middleLines = middleCount > 0 ? lines.slice(firstCount, firstCount + middleCount) : [];
89
+ truncatedLines = [...firstLines, ...middleLines, ...lastLines];
90
+ droppedCount = lines.length - truncatedLines.length;
91
+ }
92
+ const truncatedText = truncatedLines.join("\n");
93
+ return {
94
+ text: truncatedText,
95
+ truncated: true,
96
+ droppedCount,
97
+ howToResume: {
98
+ type: "token",
99
+ value: estimateTokens(truncatedText),
100
+ },
101
+ };
102
+ }
103
+ export function applyLineTruncation(text, options) {
104
+ const maxLines = options.maxLines ?? Infinity;
105
+ const lines = text.split("\n");
106
+ if (lines.length <= maxLines) {
107
+ return {
108
+ text,
109
+ truncated: false,
110
+ droppedCount: 0,
111
+ howToResume: null,
112
+ };
113
+ }
114
+ const truncateAt = options.truncateAt ?? "end";
115
+ let truncatedLines;
116
+ let droppedCount;
117
+ if (truncateAt === "end") {
118
+ truncatedLines = lines.slice(0, maxLines);
119
+ droppedCount = lines.length - maxLines;
120
+ }
121
+ else if (truncateAt === "start") {
122
+ truncatedLines = lines.slice(-maxLines);
123
+ droppedCount = lines.length - maxLines;
124
+ }
125
+ else {
126
+ const preserveFirst = options.preserveFirst ?? 0;
127
+ const preserveLast = options.preserveLast ?? 0;
128
+ const firstCount = Math.min(preserveFirst, maxLines / 2);
129
+ const lastCount = Math.min(preserveLast, maxLines - firstCount);
130
+ const middleCount = Math.max(0, maxLines - firstCount - lastCount);
131
+ const firstLines = lines.slice(0, firstCount);
132
+ const lastLines = lines.slice(-lastCount);
133
+ const middleLines = middleCount > 0 ? lines.slice(firstCount, firstCount + middleCount) : [];
134
+ truncatedLines = [...firstLines, ...middleLines, ...lastLines];
135
+ droppedCount = lines.length - truncatedLines.length;
136
+ }
137
+ const truncatedText = truncatedLines.join("\n");
138
+ return {
139
+ text: truncatedText,
140
+ truncated: true,
141
+ droppedCount,
142
+ howToResume: {
143
+ type: "cursor",
144
+ value: truncatedLines.length,
145
+ },
146
+ };
147
+ }
148
+ export function truncateText(text, options) {
149
+ if (options.maxTokens !== undefined && options.maxLines !== undefined) {
150
+ const tokenResult = applyTokenTruncation(text, {
151
+ ...options,
152
+ maxLines: undefined,
153
+ });
154
+ const lineResult = applyLineTruncation(tokenResult.text, {
155
+ ...options,
156
+ maxTokens: undefined,
157
+ });
158
+ return {
159
+ text: lineResult.text,
160
+ truncated: tokenResult.truncated || lineResult.truncated,
161
+ droppedCount: tokenResult.droppedCount + lineResult.droppedCount,
162
+ howToResume: lineResult.howToResume,
163
+ };
164
+ }
165
+ if (options.maxTokens !== undefined) {
166
+ return applyTokenTruncation(text, options);
167
+ }
168
+ if (options.maxLines !== undefined) {
169
+ return applyLineTruncation(text, options);
170
+ }
171
+ return {
172
+ text,
173
+ truncated: false,
174
+ droppedCount: 0,
175
+ howToResume: null,
176
+ };
177
+ }
178
+ export function truncateArray(items, options) {
179
+ if (options.maxItems === undefined) {
180
+ return {
181
+ items,
182
+ truncated: false,
183
+ droppedCount: 0,
184
+ howToResume: null,
185
+ };
186
+ }
187
+ return applyCountTruncation(items, options);
188
+ }
189
+ export function truncateRange(range, options) {
190
+ const lines = range.endLine - range.startLine + 1;
191
+ const maxLines = options.maxLines ?? Infinity;
192
+ if (lines <= maxLines) {
193
+ return {
194
+ range,
195
+ truncation: {
196
+ truncated: false,
197
+ droppedCount: 0,
198
+ howToResume: null,
199
+ },
200
+ };
201
+ }
202
+ const truncateAt = options.truncateAt ?? "end";
203
+ let truncatedRange;
204
+ let droppedCount;
205
+ if (truncateAt === "end") {
206
+ truncatedRange = {
207
+ ...range,
208
+ endLine: range.startLine + maxLines - 1,
209
+ endCol: 0,
210
+ };
211
+ droppedCount = lines - maxLines;
212
+ }
213
+ else if (truncateAt === "start") {
214
+ truncatedRange = {
215
+ ...range,
216
+ startLine: range.endLine - maxLines + 1,
217
+ startCol: 0,
218
+ };
219
+ droppedCount = lines - maxLines;
220
+ }
221
+ else {
222
+ const preserveFirst = options.preserveFirst ?? 0;
223
+ const preserveLast = options.preserveLast ?? 0;
224
+ const firstCount = Math.min(preserveFirst, maxLines / 2);
225
+ const lastCount = Math.min(preserveLast, maxLines - firstCount);
226
+ const middleStart = range.startLine + firstCount;
227
+ const middleEnd = range.endLine - lastCount;
228
+ const middleCount = maxLines - firstCount - lastCount;
229
+ truncatedRange = {
230
+ startLine: middleStart,
231
+ startCol: 0,
232
+ endLine: Math.min(middleStart + middleCount - 1, middleEnd),
233
+ endCol: 0,
234
+ };
235
+ droppedCount = lines - maxLines;
236
+ }
237
+ return {
238
+ range: truncatedRange,
239
+ truncation: {
240
+ truncated: true,
241
+ droppedCount,
242
+ howToResume: {
243
+ type: "cursor",
244
+ value: truncatedRange.endLine,
245
+ },
246
+ },
247
+ };
248
+ }
249
+ export function mergeTruncationMetadata(truncations) {
250
+ const anyTruncated = truncations.some((t) => t.truncated);
251
+ const totalDropped = truncations.reduce((sum, t) => sum + t.droppedCount, 0);
252
+ const lastTruncation = [...truncations].reverse().find((t) => t.truncated);
253
+ return {
254
+ truncated: anyTruncated,
255
+ droppedCount: totalDropped,
256
+ howToResume: lastTruncation?.howToResume ?? null,
257
+ };
258
+ }
259
+ //# sourceMappingURL=truncation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncation.js","sourceRoot":"","sources":["../../src/util/truncation.ts"],"names":[],"mappings":"AAiCA,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAU,EACV,OAA0B;IAE1B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAE9C,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO;YACL,KAAK;YACL,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;IAE/C,IAAI,cAAmB,CAAC;IACxB,IAAI,YAAoB,CAAC;IACzB,IAAI,gBAAwB,CAAC;IAE7B,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3C,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;QACxC,gBAAgB,GAAG,SAAS,CAAC;IAC/B,CAAC;SAAM,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;QACzC,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;QACxC,gBAAgB,GAAG,YAAY,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC;QAEnE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,WAAW,GACf,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3E,cAAc,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC;QAC/D,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;QACpD,gBAAgB,GAAG,UAAU,GAAG,WAAW,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,KAAK,EAAE,cAAc;QACrB,SAAS,EAAE,IAAI;QACf,YAAY;QACZ,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,gBAAgB;SACxB;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,OAA0B;IAE1B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC;IAChD,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAE7C,IAAI,eAAe,IAAI,SAAS,EAAE,CAAC;QACjC,OAAO;YACL,IAAI;YACJ,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,gBAAgB,GAAG,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC;IAE1D,IAAI,cAAwB,CAAC;IAC7B,IAAI,YAAoB,CAAC;IAEzB,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvD,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IACtD,CAAC;SAAM,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAClC,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrD,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC;QAEnE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,WAAW,GACf,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3E,cAAc,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC;QAC/D,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IACtD,CAAC;IAED,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhD,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,IAAI;QACf,YAAY;QACZ,WAAW,EAAE;YACX,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,cAAc,CAAC,aAAa,CAAC;SACrC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,OAA0B;IAE1B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO;YACL,IAAI;YACJ,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;IAE/C,IAAI,cAAwB,CAAC;IAC7B,IAAI,YAAoB,CAAC;IAEzB,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC1C,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;IACzC,CAAC;SAAM,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAClC,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;QACxC,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC;QAEnE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,WAAW,GACf,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3E,cAAc,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC;QAC/D,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IACtD,CAAC;IAED,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhD,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,IAAI;QACf,YAAY;QACZ,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,cAAc,CAAC,MAAM;SAC7B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,OAA0B;IAE1B,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACtE,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,EAAE;YAC7C,GAAG,OAAO;YACV,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,mBAAmB,CAAC,WAAW,CAAC,IAAI,EAAE;YACvD,GAAG,OAAO;YACV,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;QACH,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS;YACxD,YAAY,EAAE,WAAW,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY;YAChE,WAAW,EAAE,UAAU,CAAC,WAAW;SACpC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,KAAU,EACV,OAA0B;IAE1B,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO;YACL,KAAK;YACL,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAED,OAAO,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,KAAY,EACZ,OAA0B;IAE1B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAE9C,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;QACtB,OAAO;YACL,KAAK;YACL,UAAU,EAAE;gBACV,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,CAAC;gBACf,WAAW,EAAE,IAAI;aAClB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;IAE/C,IAAI,cAAqB,CAAC;IAC1B,IAAI,YAAoB,CAAC;IAEzB,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,cAAc,GAAG;YACf,GAAG,KAAK;YACR,OAAO,EAAE,KAAK,CAAC,SAAS,GAAG,QAAQ,GAAG,CAAC;YACvC,MAAM,EAAE,CAAC;SACV,CAAC;QACF,YAAY,GAAG,KAAK,GAAG,QAAQ,CAAC;IAClC,CAAC;SAAM,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAClC,cAAc,GAAG;YACf,GAAG,KAAK;YACR,SAAS,EAAE,KAAK,CAAC,OAAO,GAAG,QAAQ,GAAG,CAAC;YACvC,QAAQ,EAAE,CAAC;SACZ,CAAC;QACF,YAAY,GAAG,KAAK,GAAG,QAAQ,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;QACjD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;QAEhE,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC;QACjD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;QAC5C,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;QAEtD,cAAc,GAAG;YACf,SAAS,EAAE,WAAW;YACtB,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,WAAW,GAAG,CAAC,EAAE,SAAS,CAAC;YAC3D,MAAM,EAAE,CAAC;SACV,CAAC;QACF,YAAY,GAAG,KAAK,GAAG,QAAQ,CAAC;IAClC,CAAC;IAED,OAAO;QACL,KAAK,EAAE,cAAc;QACrB,UAAU,EAAE;YACV,SAAS,EAAE,IAAI;YACf,YAAY;YACZ,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,cAAc,CAAC,OAAO;aAC9B;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,WAAiC;IAEjC,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAE7E,MAAM,cAAc,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE3E,OAAO;QACL,SAAS,EAAE,YAAY;QACvB,YAAY,EAAE,YAAY;QAC1B,WAAW,EAAE,cAAc,EAAE,WAAW,IAAI,IAAI;KACjD,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ # Placeholders for Git tracking
@@ -0,0 +1,61 @@
1
+ PRAGMA journal_mode=WAL;
2
+ PRAGMA synchronous=NORMAL;
3
+
4
+ CREATE TABLE IF NOT EXISTS repos (
5
+ repo_id TEXT PRIMARY KEY,
6
+ root_path TEXT NOT NULL,
7
+ config_json TEXT NOT NULL,
8
+ created_at TEXT NOT NULL
9
+ );
10
+
11
+ CREATE TABLE IF NOT EXISTS files (
12
+ file_id INTEGER PRIMARY KEY AUTOINCREMENT,
13
+ repo_id TEXT NOT NULL,
14
+ rel_path TEXT NOT NULL,
15
+ content_hash TEXT NOT NULL,
16
+ language TEXT NOT NULL,
17
+ byte_size INTEGER NOT NULL,
18
+ last_indexed_at TEXT,
19
+ UNIQUE(repo_id, rel_path),
20
+ FOREIGN KEY(repo_id) REFERENCES repos(repo_id)
21
+ );
22
+
23
+ CREATE TABLE IF NOT EXISTS symbols (
24
+ symbol_id TEXT PRIMARY KEY,
25
+ repo_id TEXT NOT NULL,
26
+ file_id INTEGER NOT NULL,
27
+ kind TEXT NOT NULL,
28
+ name TEXT NOT NULL,
29
+ exported INTEGER NOT NULL,
30
+ visibility TEXT,
31
+ range_start_line INTEGER NOT NULL,
32
+ range_start_col INTEGER NOT NULL,
33
+ range_end_line INTEGER NOT NULL,
34
+ range_end_col INTEGER NOT NULL,
35
+ ast_fingerprint TEXT NOT NULL,
36
+ signature_json TEXT,
37
+ summary TEXT,
38
+ invariants_json TEXT,
39
+ side_effects_json TEXT,
40
+ updated_at TEXT NOT NULL,
41
+ FOREIGN KEY(repo_id) REFERENCES repos(repo_id),
42
+ FOREIGN KEY(file_id) REFERENCES files(file_id)
43
+ );
44
+
45
+ CREATE INDEX IF NOT EXISTS idx_symbols_repo_file ON symbols(repo_id, file_id);
46
+ CREATE INDEX IF NOT EXISTS idx_symbols_repo_name ON symbols(repo_id, name);
47
+
48
+ CREATE TABLE IF NOT EXISTS edges (
49
+ edge_id INTEGER PRIMARY KEY AUTOINCREMENT,
50
+ repo_id TEXT NOT NULL,
51
+ from_symbol_id TEXT NOT NULL,
52
+ to_symbol_id TEXT NOT NULL,
53
+ type TEXT NOT NULL,
54
+ weight REAL NOT NULL,
55
+ provenance TEXT,
56
+ created_at TEXT NOT NULL,
57
+ FOREIGN KEY(repo_id) REFERENCES repos(repo_id)
58
+ );
59
+
60
+ CREATE INDEX IF NOT EXISTS idx_edges_repo_from ON edges(repo_id, from_symbol_id);
61
+ CREATE INDEX IF NOT EXISTS idx_edges_repo_to ON edges(repo_id, to_symbol_id);
@@ -0,0 +1,2 @@
1
+ CREATE INDEX IF NOT EXISTS idx_edges_repo_type ON edges(repo_id, type);
2
+ CREATE INDEX IF NOT EXISTS idx_edges_from_to ON edges(from_symbol_id, to_symbol_id);
@@ -0,0 +1,22 @@
1
+ CREATE TABLE IF NOT EXISTS versions (
2
+ version_id TEXT PRIMARY KEY,
3
+ repo_id TEXT NOT NULL,
4
+ created_at TEXT NOT NULL,
5
+ reason TEXT,
6
+ FOREIGN KEY(repo_id) REFERENCES repos(repo_id)
7
+ );
8
+
9
+ CREATE TABLE IF NOT EXISTS symbol_versions (
10
+ version_id TEXT NOT NULL,
11
+ symbol_id TEXT NOT NULL,
12
+ ast_fingerprint TEXT NOT NULL,
13
+ signature_json TEXT,
14
+ summary TEXT,
15
+ invariants_json TEXT,
16
+ side_effects_json TEXT,
17
+ PRIMARY KEY(version_id, symbol_id),
18
+ FOREIGN KEY(version_id) REFERENCES versions(version_id)
19
+ );
20
+
21
+ CREATE INDEX IF NOT EXISTS idx_versions_repo ON versions(repo_id, created_at);
22
+ CREATE INDEX IF NOT EXISTS idx_symbol_versions_symbol ON symbol_versions(symbol_id);