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,23 @@
1
+ CREATE TABLE IF NOT EXISTS metrics (
2
+ symbol_id TEXT PRIMARY KEY,
3
+ fan_in INTEGER NOT NULL DEFAULT 0,
4
+ fan_out INTEGER NOT NULL DEFAULT 0,
5
+ churn_30d INTEGER NOT NULL DEFAULT 0,
6
+ test_refs_json TEXT,
7
+ updated_at TEXT NOT NULL,
8
+ FOREIGN KEY(symbol_id) REFERENCES symbols(symbol_id) ON DELETE CASCADE
9
+ );
10
+
11
+ CREATE TABLE IF NOT EXISTS audit (
12
+ event_id INTEGER PRIMARY KEY AUTOINCREMENT,
13
+ timestamp TEXT NOT NULL,
14
+ tool TEXT NOT NULL,
15
+ decision TEXT NOT NULL,
16
+ repo_id TEXT,
17
+ symbol_id TEXT,
18
+ details_json TEXT NOT NULL
19
+ );
20
+
21
+ CREATE INDEX IF NOT EXISTS idx_audit_tool ON audit(tool);
22
+ CREATE INDEX IF NOT EXISTS idx_audit_timestamp ON audit(timestamp);
23
+ CREATE INDEX IF NOT EXISTS idx_audit_repo ON audit(repo_id);
@@ -0,0 +1,15 @@
1
+ CREATE TABLE IF NOT EXISTS slice_handles (
2
+ handle TEXT PRIMARY KEY,
3
+ repo_id TEXT NOT NULL,
4
+ created_at TEXT NOT NULL,
5
+ expires_at TEXT NOT NULL,
6
+ min_version TEXT,
7
+ max_version TEXT,
8
+ slice_hash TEXT NOT NULL,
9
+ spillover_ref TEXT,
10
+ FOREIGN KEY(repo_id) REFERENCES repos(repo_id) ON DELETE CASCADE
11
+ );
12
+
13
+ CREATE INDEX IF NOT EXISTS idx_slice_handles_repo ON slice_handles(repo_id);
14
+ CREATE INDEX IF NOT EXISTS idx_slice_handles_expires ON slice_handles(expires_at);
15
+ CREATE INDEX IF NOT EXISTS idx_slice_handles_repo_version ON slice_handles(repo_id, max_version);
@@ -0,0 +1,29 @@
1
+ CREATE TABLE IF NOT EXISTS card_hashes (
2
+ card_hash TEXT PRIMARY KEY,
3
+ card_blob TEXT NOT NULL,
4
+ created_at TEXT NOT NULL
5
+ );
6
+
7
+ CREATE TABLE IF NOT EXISTS tool_policy_hashes (
8
+ policy_hash TEXT PRIMARY KEY,
9
+ policy_blob TEXT NOT NULL,
10
+ created_at TEXT NOT NULL
11
+ );
12
+
13
+ CREATE TABLE IF NOT EXISTS tsconfig_hashes (
14
+ tsconfig_hash TEXT PRIMARY KEY,
15
+ tsconfig_blob TEXT NOT NULL,
16
+ created_at TEXT NOT NULL
17
+ );
18
+
19
+ ALTER TABLE versions ADD COLUMN prev_version_hash TEXT;
20
+ ALTER TABLE versions ADD COLUMN version_hash TEXT;
21
+
22
+ UPDATE versions SET prev_version_hash = NULL WHERE prev_version_hash IS NULL;
23
+ UPDATE versions SET version_hash = NULL WHERE version_hash IS NULL;
24
+
25
+ CREATE INDEX IF NOT EXISTS idx_card_hashes_created ON card_hashes(created_at);
26
+ CREATE INDEX IF NOT EXISTS idx_tool_policy_hashes_created ON tool_policy_hashes(created_at);
27
+ CREATE INDEX IF NOT EXISTS idx_tsconfig_hashes_created ON tsconfig_hashes(created_at);
28
+ CREATE INDEX IF NOT EXISTS idx_versions_version_hash ON versions(version_hash);
29
+ CREATE INDEX IF NOT EXISTS idx_versions_prev_hash ON versions(prev_version_hash);
@@ -0,0 +1,28 @@
1
+ -- ML-D.2: Add language field to symbol records
2
+
3
+ -- Add language column to symbols table
4
+ ALTER TABLE symbols ADD COLUMN language TEXT;
5
+
6
+ -- Backfill existing symbols with language based on file extension
7
+ -- Infer language from file's extension by joining with files table
8
+ UPDATE symbols
9
+ SET language = (
10
+ CASE
11
+ WHEN substr(f.rel_path, -3) = '.ts' THEN 'typescript'
12
+ WHEN substr(f.rel_path, -4) = '.tsx' THEN 'typescript'
13
+ WHEN substr(f.rel_path, -3) = '.js' THEN 'javascript'
14
+ WHEN substr(f.rel_path, -4) = '.jsx' THEN 'typescript'
15
+ WHEN substr(f.rel_path, -3) = '.py' THEN 'python'
16
+ WHEN substr(f.rel_path, -3) = '.go' THEN 'go'
17
+ WHEN substr(f.rel_path, -5) = '.java' THEN 'java'
18
+ WHEN substr(f.rel_path, -6) = '.cs' THEN 'csharp'
19
+ WHEN substr(f.rel_path, -3) = '.cs' THEN 'csharp'
20
+ ELSE f.language
21
+ END
22
+ )
23
+ FROM files f
24
+ WHERE symbols.file_id = f.file_id AND symbols.language IS NULL;
25
+
26
+ -- Add index on language column for query performance
27
+ CREATE INDEX IF NOT EXISTS idx_symbols_language ON symbols(language);
28
+ CREATE INDEX IF NOT EXISTS idx_symbols_repo_language ON symbols(repo_id, language);
@@ -0,0 +1,21 @@
1
+ -- Add performance indexes for frequently queried columns
2
+ -- Migration: 0008_performance_indexes.sql
3
+
4
+ -- Index for getSymbolsByFile() - frequently called during indexing
5
+ CREATE INDEX IF NOT EXISTS idx_symbols_file_id ON symbols(file_id);
6
+
7
+ -- Index for searchSymbols() - improves LIKE queries on name with repo_id filter
8
+ CREATE INDEX IF NOT EXISTS idx_symbols_repo_name_idx ON symbols(repo_id, name);
9
+
10
+ -- Index for getFilesByRepo() - frequently called during operations
11
+ CREATE INDEX IF NOT EXISTS idx_files_repo_id ON files(repo_id);
12
+
13
+ -- Index for version queries with ordering by created_at
14
+ -- Covers getLatestVersion() and listVersions()
15
+ CREATE INDEX IF NOT EXISTS idx_versions_repo_created ON versions(repo_id, created_at DESC);
16
+
17
+ -- Index for slice_handles by repo_id
18
+ CREATE INDEX IF NOT EXISTS idx_slice_handles_repo_id ON slice_handles(repo_id);
19
+
20
+ -- Composite index for symbols with repo_id and kind (common filter combo)
21
+ CREATE INDEX IF NOT EXISTS idx_symbols_repo_kind ON symbols(repo_id, kind);
@@ -0,0 +1,37 @@
1
+ -- RR-G.7: Add missing foreign key constraints to edges table
2
+ -- Note: to_symbol_id intentionally has no FK constraint because the indexer
3
+ -- creates "unresolved" edges (e.g., "unresolved:call:functionName") for
4
+ -- cross-file references that haven't been resolved yet.
5
+
6
+ -- Create new edges table with proper FK constraints
7
+ CREATE TABLE edges_new (
8
+ edge_id INTEGER PRIMARY KEY AUTOINCREMENT,
9
+ repo_id TEXT NOT NULL,
10
+ from_symbol_id TEXT NOT NULL,
11
+ to_symbol_id TEXT NOT NULL,
12
+ type TEXT NOT NULL,
13
+ weight REAL NOT NULL,
14
+ provenance TEXT,
15
+ created_at TEXT NOT NULL,
16
+ FOREIGN KEY(repo_id) REFERENCES repos(repo_id) ON DELETE CASCADE,
17
+ FOREIGN KEY(from_symbol_id) REFERENCES symbols(symbol_id) ON DELETE CASCADE
18
+ -- to_symbol_id has no FK: allows unresolved edges like "unresolved:call:foo"
19
+ );
20
+
21
+ -- Copy only valid data (with existing FK references) from old table
22
+ -- Only validate repo_id and from_symbol_id; to_symbol_id may be unresolved
23
+ INSERT INTO edges_new
24
+ SELECT e.* FROM edges e
25
+ WHERE EXISTS (SELECT 1 FROM repos r WHERE r.repo_id = e.repo_id)
26
+ AND EXISTS (SELECT 1 FROM symbols s WHERE s.symbol_id = e.from_symbol_id);
27
+
28
+ -- Drop old table
29
+ DROP TABLE edges;
30
+
31
+ -- Rename new table
32
+ ALTER TABLE edges_new RENAME TO edges;
33
+
34
+ -- Recreate indexes
35
+ CREATE INDEX idx_edges_repo_from ON edges(from_symbol_id);
36
+ CREATE INDEX idx_edges_repo_to ON edges(to_symbol_id);
37
+ CREATE INDEX idx_edges_repo ON edges(repo_id);
@@ -0,0 +1,35 @@
1
+ -- RR-H.1: Database schema standardization
2
+
3
+ -- Issue 1: Add missing FK on symbol_versions.symbol_id with CASCADE
4
+ -- Recreate symbol_versions table with proper FK constraint
5
+ CREATE TABLE symbol_versions_new (
6
+ version_id TEXT NOT NULL,
7
+ symbol_id TEXT NOT NULL,
8
+ ast_fingerprint TEXT NOT NULL,
9
+ signature_json TEXT,
10
+ summary TEXT,
11
+ invariants_json TEXT,
12
+ side_effects_json TEXT,
13
+ PRIMARY KEY(version_id, symbol_id),
14
+ FOREIGN KEY(version_id) REFERENCES versions(version_id) ON DELETE CASCADE,
15
+ FOREIGN KEY(symbol_id) REFERENCES symbols(symbol_id) ON DELETE CASCADE
16
+ );
17
+
18
+ -- Copy only valid data (with existing FK references) from old table
19
+ INSERT INTO symbol_versions_new
20
+ SELECT sv.* FROM symbol_versions sv
21
+ WHERE EXISTS (SELECT 1 FROM versions v WHERE v.version_id = sv.version_id)
22
+ AND EXISTS (SELECT 1 FROM symbols s WHERE s.symbol_id = sv.symbol_id);
23
+
24
+ -- Drop old table
25
+ DROP TABLE symbol_versions;
26
+
27
+ -- Rename new table
28
+ ALTER TABLE symbol_versions_new RENAME TO symbol_versions;
29
+
30
+ -- Recreate index
31
+ CREATE INDEX idx_symbol_versions_symbol ON symbol_versions(symbol_id);
32
+
33
+ -- Issue 3: Remove duplicate index idx_symbols_repo_name_idx from migration 0008
34
+ -- (idx_symbols_repo_name already exists from migration 0001)
35
+ DROP INDEX IF EXISTS idx_symbols_repo_name_idx;
@@ -0,0 +1,20 @@
1
+ -- Migration: Add directory column to files table
2
+ -- Purpose: Improve performance of directory aggregate queries by storing computed directory
3
+
4
+ -- Add directory column
5
+ ALTER TABLE files ADD COLUMN directory TEXT NOT NULL DEFAULT '';
6
+
7
+ -- Populate existing rows with directory from rel_path
8
+ -- Extract directory by finding the last slash (like JavaScript's lastIndexOf)
9
+ -- Using reverse() to find the last occurrence of '/'
10
+ -- Formula: substr(rel_path, 1, length(rel_path) - instr(reverse(rel_path), '/'))
11
+ -- Note: instr() is 1-indexed in SQLite, so we don't need to adjust further
12
+ UPDATE files SET directory =
13
+ CASE
14
+ WHEN instr(rel_path, '/') > 0
15
+ THEN substr(rel_path, 1, length(rel_path) - instr(reverse(rel_path), '/'))
16
+ ELSE ''
17
+ END;
18
+
19
+ -- Add index for directory queries (composite with repo_id for better filtering)
20
+ CREATE INDEX idx_files_directory ON files(repo_id, directory);
@@ -0,0 +1,16 @@
1
+ -- Migration 0012: Create symbol_references table for inverted index
2
+ -- This table tracks symbol references in test files for O(1) lookup
3
+
4
+ CREATE TABLE IF NOT EXISTS symbol_references (
5
+ ref_id INTEGER PRIMARY KEY AUTOINCREMENT,
6
+ repo_id TEXT NOT NULL,
7
+ symbol_name TEXT NOT NULL,
8
+ file_id INTEGER NOT NULL,
9
+ line_number INTEGER,
10
+ created_at TEXT NOT NULL,
11
+ FOREIGN KEY(repo_id) REFERENCES repos(repo_id) ON DELETE CASCADE,
12
+ FOREIGN KEY(file_id) REFERENCES files(file_id) ON DELETE CASCADE
13
+ );
14
+
15
+ CREATE INDEX IF NOT EXISTS idx_symbol_refs_name ON symbol_references(repo_id, symbol_name);
16
+ CREATE INDEX IF NOT EXISTS idx_symbol_refs_file ON symbol_references(file_id);
@@ -0,0 +1,17 @@
1
+ CREATE TABLE IF NOT EXISTS sync_artifacts (
2
+ artifact_id TEXT PRIMARY KEY,
3
+ repo_id TEXT NOT NULL,
4
+ version_id TEXT NOT NULL,
5
+ commit_sha TEXT,
6
+ branch TEXT,
7
+ artifact_hash TEXT NOT NULL,
8
+ compressed_data TEXT NOT NULL,
9
+ created_at TEXT NOT NULL,
10
+ size_bytes INTEGER NOT NULL,
11
+ FOREIGN KEY(repo_id) REFERENCES repos(repo_id),
12
+ FOREIGN KEY(version_id) REFERENCES versions(version_id)
13
+ );
14
+
15
+ CREATE INDEX IF NOT EXISTS idx_sync_artifacts_repo ON sync_artifacts(repo_id);
16
+ CREATE INDEX IF NOT EXISTS idx_sync_artifacts_version ON sync_artifacts(version_id);
17
+ CREATE INDEX IF NOT EXISTS idx_sync_artifacts_commit ON sync_artifacts(commit_sha);
package/package.json ADDED
@@ -0,0 +1,107 @@
1
+ {
2
+ "name": "sdl-mcp",
3
+ "version": "0.6.0",
4
+ "description": "Symbol Delta Ledger MCP Server - Cards-first code context for TypeScript/JavaScript repositories",
5
+ "type": "module",
6
+ "main": "dist/main.js",
7
+ "bin": {
8
+ "sdl-mcp": "dist/cli/index.js"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/GlitterKill/sdl-mcp.git"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/GlitterKill/sdl-mcp/issues"
16
+ },
17
+ "homepage": "https://github.com/GlitterKill/sdl-mcp#readme",
18
+ "files": [
19
+ "dist",
20
+ "config",
21
+ "migrations",
22
+ "templates",
23
+ "README.md",
24
+ "LICENSE"
25
+ ],
26
+ "scripts": {
27
+ "clean:dist": "node scripts/clean-dist.mjs",
28
+ "build": "tsc -p tsconfig.build.json",
29
+ "build:scripts": "tsc -p tsconfig.scripts.json && tsx scripts/fix-imports.ts",
30
+ "build:runtime": "npm run clean:dist && npm run build",
31
+ "build:all": "npm run clean:dist && npm run build && npm run build:scripts",
32
+ "watch": "tsc -p tsconfig.build.json --watch",
33
+ "dev": "tsx src/main.ts",
34
+ "typecheck": "tsc --noEmit",
35
+ "lint": "eslint src --ext .ts",
36
+ "format": "prettier --write \"src/**/*.ts\"",
37
+ "test": "node scripts/run-tests.mjs",
38
+ "test:harness": "npm run test:adapters",
39
+ "test:adapters": "npm run build && npx tsc --rootDir tests/harness --outDir dist/tests/harness --module nodenext tests/harness/adapter-runner.ts && node dist/tests/harness/adapter-runner.js",
40
+ "test:golden": "npm run build && tsx scripts/golden/update-goldens.ts validate",
41
+ "golden:update": "npm run build && tsx scripts/golden/update-goldens.ts generate",
42
+ "benchmark:ci": "node dist/cli/index.js benchmark:ci",
43
+ "migrate": "npm run build:scripts && node dist/scripts/migrate.js",
44
+ "index": "npm run build:scripts && node dist/scripts/index-repo.js",
45
+ "index-repo": "npm run build:scripts && node dist/scripts/index-repo.js",
46
+ "dump-symbol": "npm run build:scripts && node dist/scripts/dump-symbol.js",
47
+ "benchmark": "tsx scripts/benchmark.ts",
48
+ "benchmark:real": "tsx scripts/real-world-benchmark.ts",
49
+ "benchmark:matrix": "tsx scripts/real-world-benchmark-matrix.ts",
50
+ "benchmark:claims": "tsx scripts/check-benchmark-claims.ts",
51
+ "benchmark:sweep": "tsx scripts/budget-sensitivity-sweep.ts",
52
+ "benchmark:record-trace": "tsx scripts/record-trace.ts",
53
+ "benchmark:setup-external": "tsx scripts/setup-external-benchmark-repos.ts",
54
+ "package:exe": "node scripts/build-exe.js",
55
+ "prepack": "npm run build:runtime",
56
+ "prepublishOnly": "npm run build:all && npm run lint && npm run typecheck"
57
+ },
58
+ "keywords": [
59
+ "mcp",
60
+ "model-context-protocol",
61
+ "code-indexing",
62
+ "symbol-ledger",
63
+ "typescript",
64
+ "javascript",
65
+ "code-context",
66
+ "ast",
67
+ "code-analysis",
68
+ "developer-tools"
69
+ ],
70
+ "author": "",
71
+ "license": "MIT",
72
+ "dependencies": {
73
+ "@modelcontextprotocol/sdk": "^1.26.0",
74
+ "better-sqlite3": "^11.0.0",
75
+ "fast-glob": "^3.3.3",
76
+ "tree-sitter": "^0.21.1",
77
+ "tree-sitter-bash": "^0.21.0",
78
+ "tree-sitter-c": "^0.21.0",
79
+ "tree-sitter-c-sharp": "0.23.1",
80
+ "tree-sitter-cpp": "^0.21.0",
81
+ "tree-sitter-go": "0.23.4",
82
+ "tree-sitter-java": "0.23.5",
83
+ "tree-sitter-kotlin": "0.3.8",
84
+ "tree-sitter-php": "0.22.8",
85
+ "tree-sitter-python": "0.23.3",
86
+ "tree-sitter-rust": "0.21.0",
87
+ "tree-sitter-typescript": "0.23.2",
88
+ "typescript": "^5.9.3",
89
+ "zod": "^3.23.0",
90
+ "zod-to-json-schema": "^3.25.1"
91
+ },
92
+ "optionalDependencies": {
93
+ "chokidar": "^3.5.3"
94
+ },
95
+ "devDependencies": {
96
+ "@types/better-sqlite3": "^7.6.0",
97
+ "@types/node": "^20.0.0",
98
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
99
+ "@typescript-eslint/parser": "^7.0.0",
100
+ "eslint": "^8.0.0",
101
+ "prettier": "^3.0.0",
102
+ "tsx": "^4.0.0"
103
+ },
104
+ "engines": {
105
+ "node": ">=18.0.0"
106
+ }
107
+ }
@@ -0,0 +1,179 @@
1
+ # CLAUDE.md - SDL-MCP Integration
2
+
3
+ This file instructs Claude Code (and other AI agents) to use SDL-MCP for efficient code context.
4
+
5
+ ## Code Context Protocol
6
+
7
+ **IMPORTANT**: This project uses SDL-MCP for code understanding. Always prefer SDL-MCP tools over reading raw files directly.
8
+
9
+ ### Repository Configuration
10
+
11
+ - **Repository ID**: `{{REPO_ID}}`
12
+ - **MCP Server**: sdl-mcp
13
+
14
+ ### Context Ladder (Use in Order)
15
+
16
+ When you need to understand code, follow this escalation path:
17
+
18
+ | Step | Tool | Token Cost | When to Use |
19
+ |------|------|------------|-------------|
20
+ | 1 | `sdl.symbol.search` | ~50 | Find symbols by name |
21
+ | 2 | `sdl.symbol.getCard` | ~135 | Understand signatures, deps, summary |
22
+ | 3 | `sdl.slice.build` | ~800 | Get related symbols for a task |
23
+ | 4 | `sdl.code.getSkeleton` | ~113 | See control flow structure |
24
+ | 5 | `sdl.code.getHotPath` | ~200 | Find specific identifiers |
25
+ | 6 | `sdl.code.needWindow` | Variable | Full code (last resort) |
26
+
27
+ ### Tool Usage Guidelines
28
+
29
+ #### Finding Code
30
+
31
+ ```
32
+ # Search for symbols by name
33
+ sdl.symbol.search({ repoId: "{{REPO_ID}}", query: "functionName" })
34
+
35
+ # Search with filters
36
+ sdl.symbol.search({
37
+ repoId: "{{REPO_ID}}",
38
+ query: "parse",
39
+ kinds: ["function", "method"],
40
+ limit: 20
41
+ })
42
+ ```
43
+
44
+ #### Understanding Code
45
+
46
+ ```
47
+ # Get symbol metadata (signature, summary, dependencies)
48
+ sdl.symbol.getCard({ repoId: "{{REPO_ID}}", symbolId: "<id>" })
49
+
50
+ # Get related symbols for context
51
+ sdl.slice.build({
52
+ repoId: "{{REPO_ID}}",
53
+ entrySymbols: ["<symbolId>"],
54
+ maxCards: 30
55
+ })
56
+ ```
57
+
58
+ #### Reading Code (When Necessary)
59
+
60
+ ```
61
+ # Get code skeleton (signatures + control flow, elided bodies)
62
+ sdl.code.getSkeleton({ repoId: "{{REPO_ID}}", symbolId: "<id>" })
63
+
64
+ # Find specific identifiers in code
65
+ sdl.code.getHotPath({
66
+ repoId: "{{REPO_ID}}",
67
+ symbolId: "<id>",
68
+ identifiers: ["errorHandler", "validate"]
69
+ })
70
+
71
+ # Get raw code (requires justification)
72
+ sdl.code.needWindow({
73
+ repoId: "{{REPO_ID}}",
74
+ symbolId: "<id>",
75
+ reason: "Need to understand validation implementation details",
76
+ expectedIdentifiers: ["validateInput"]
77
+ })
78
+ ```
79
+
80
+ ### Required Practices
81
+
82
+ 1. **Always search first**: Use `sdl.symbol.search` before trying to read files
83
+ 2. **Get cards before code**: Use `sdl.symbol.getCard` to understand what a symbol does
84
+ 3. **Use slices for context**: Use `sdl.slice.build` to find related code
85
+ 4. **Justify raw code requests**: Always provide a `reason` for `sdl.code.needWindow`
86
+ 5. **Follow nextBestAction**: If a request is denied, use the suggested alternative
87
+
88
+ ### Do NOT
89
+
90
+ - Read entire files with the `Read` tool when SDL-MCP can provide the context
91
+ - Skip cards and go directly to raw code
92
+ - Ignore policy denials - use the `nextBestAction` suggestion
93
+ - Request raw code without trying cards/skeletons first
94
+
95
+ ### Workflow Examples
96
+
97
+ #### Bug Investigation
98
+
99
+ 1. Search for the problematic function:
100
+ ```
101
+ sdl.symbol.search({ repoId: "{{REPO_ID}}", query: "handleError" })
102
+ ```
103
+
104
+ 2. Get the card to understand its purpose and dependencies:
105
+ ```
106
+ sdl.symbol.getCard({ repoId: "{{REPO_ID}}", symbolId: "<found-id>" })
107
+ ```
108
+
109
+ 3. Build a slice to see related error handling:
110
+ ```
111
+ sdl.slice.build({ repoId: "{{REPO_ID}}", entrySymbols: ["<id>"], maxCards: 20 })
112
+ ```
113
+
114
+ 4. If needed, get the skeleton to see control flow:
115
+ ```
116
+ sdl.code.getSkeleton({ repoId: "{{REPO_ID}}", symbolId: "<id>" })
117
+ ```
118
+
119
+ 5. Only if the bug requires seeing exact implementation:
120
+ ```
121
+ sdl.code.needWindow({
122
+ repoId: "{{REPO_ID}}",
123
+ symbolId: "<id>",
124
+ reason: "Need to see exact error condition logic",
125
+ expectedIdentifiers: ["errorCode", "throwError"]
126
+ })
127
+ ```
128
+
129
+ #### Feature Implementation
130
+
131
+ 1. Search for similar existing features:
132
+ ```
133
+ sdl.symbol.search({ repoId: "{{REPO_ID}}", query: "create", kinds: ["function"] })
134
+ ```
135
+
136
+ 2. Get cards for relevant symbols to understand patterns:
137
+ ```
138
+ sdl.symbol.getCard({ repoId: "{{REPO_ID}}", symbolId: "<id>" })
139
+ ```
140
+
141
+ 3. Build a slice from the entry point:
142
+ ```
143
+ sdl.slice.build({ repoId: "{{REPO_ID}}", entrySymbols: ["<entry-id>"], maxCards: 50 })
144
+ ```
145
+
146
+ 4. Use skeletons to understand structure without full code:
147
+ ```
148
+ sdl.code.getSkeleton({ repoId: "{{REPO_ID}}", symbolId: "<id>" })
149
+ ```
150
+
151
+ #### Code Review
152
+
153
+ 1. Get the delta pack to see what changed:
154
+ ```
155
+ sdl.delta.get({ repoId: "{{REPO_ID}}" })
156
+ ```
157
+
158
+ 2. For each changed symbol, get its card:
159
+ ```
160
+ sdl.symbol.getCard({ repoId: "{{REPO_ID}}", symbolId: "<changed-id>" })
161
+ ```
162
+
163
+ 3. Check blast radius for impact:
164
+ ```
165
+ sdl.delta.get({ repoId: "{{REPO_ID}}", includeBlastRadius: true })
166
+ ```
167
+
168
+ ### Refreshing the Index
169
+
170
+ If you've made changes and need to update the symbol database:
171
+
172
+ ```
173
+ sdl.index.refresh({ repoId: "{{REPO_ID}}", mode: "incremental" })
174
+ ```
175
+
176
+ ### Getting Help
177
+
178
+ - Check repository status: `sdl.repo.status({ repoId: "{{REPO_ID}}" })`
179
+ - View current policy: `sdl.policy.get({ repoId: "{{REPO_ID}}" })`