trail-code 0.0.0-stage → 0.28.0-semantic.3

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 (593) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +567 -2
  3. package/dist/ai/crux.d.ts +88 -0
  4. package/dist/ai/crux.d.ts.map +1 -0
  5. package/dist/ai/crux.js +219 -0
  6. package/dist/ai/crux.js.map +1 -0
  7. package/dist/ai/failure.d.ts +60 -0
  8. package/dist/ai/failure.d.ts.map +1 -0
  9. package/dist/ai/failure.js +86 -0
  10. package/dist/ai/failure.js.map +1 -0
  11. package/dist/ai/llm/anthropic.d.ts +37 -0
  12. package/dist/ai/llm/anthropic.d.ts.map +1 -0
  13. package/dist/ai/llm/anthropic.js +144 -0
  14. package/dist/ai/llm/anthropic.js.map +1 -0
  15. package/dist/ai/llm/factory.d.ts +28 -0
  16. package/dist/ai/llm/factory.d.ts.map +1 -0
  17. package/dist/ai/llm/factory.js +36 -0
  18. package/dist/ai/llm/factory.js.map +1 -0
  19. package/dist/ai/llm/litellm.d.ts +34 -0
  20. package/dist/ai/llm/litellm.d.ts.map +1 -0
  21. package/dist/ai/llm/litellm.js +45 -0
  22. package/dist/ai/llm/litellm.js.map +1 -0
  23. package/dist/ai/llm/openai.d.ts +145 -0
  24. package/dist/ai/llm/openai.d.ts.map +1 -0
  25. package/dist/ai/llm/openai.js +629 -0
  26. package/dist/ai/llm/openai.js.map +1 -0
  27. package/dist/ai/llm/orcarouter.d.ts +34 -0
  28. package/dist/ai/llm/orcarouter.d.ts.map +1 -0
  29. package/dist/ai/llm/orcarouter.js +45 -0
  30. package/dist/ai/llm/orcarouter.js.map +1 -0
  31. package/dist/ai/llm/recover-tool.d.ts +21 -0
  32. package/dist/ai/llm/recover-tool.d.ts.map +1 -0
  33. package/dist/ai/llm/recover-tool.js +109 -0
  34. package/dist/ai/llm/recover-tool.js.map +1 -0
  35. package/dist/ai/llm/types.d.ts +122 -0
  36. package/dist/ai/llm/types.d.ts.map +1 -0
  37. package/dist/ai/llm/types.js +33 -0
  38. package/dist/ai/llm/types.js.map +1 -0
  39. package/dist/ai/providers.d.ts +59 -0
  40. package/dist/ai/providers.d.ts.map +1 -0
  41. package/dist/ai/providers.js +54 -0
  42. package/dist/ai/providers.js.map +1 -0
  43. package/dist/ai/summarize.d.ts +25 -0
  44. package/dist/ai/summarize.d.ts.map +1 -0
  45. package/dist/ai/summarize.js +34 -0
  46. package/dist/ai/summarize.js.map +1 -0
  47. package/dist/ai/synthesize.d.ts +40 -0
  48. package/dist/ai/synthesize.d.ts.map +1 -0
  49. package/dist/ai/synthesize.js +230 -0
  50. package/dist/ai/synthesize.js.map +1 -0
  51. package/dist/ask/ask.d.ts +199 -0
  52. package/dist/ask/ask.d.ts.map +1 -0
  53. package/dist/ask/ask.js +1291 -0
  54. package/dist/ask/ask.js.map +1 -0
  55. package/dist/ask/file-rank.d.ts +72 -0
  56. package/dist/ask/file-rank.d.ts.map +1 -0
  57. package/dist/ask/file-rank.js +160 -0
  58. package/dist/ask/file-rank.js.map +1 -0
  59. package/dist/ask/file-selection.d.ts +22 -0
  60. package/dist/ask/file-selection.d.ts.map +1 -0
  61. package/dist/ask/file-selection.js +66 -0
  62. package/dist/ask/file-selection.js.map +1 -0
  63. package/dist/ask/fuse.d.ts +195 -0
  64. package/dist/ask/fuse.d.ts.map +1 -0
  65. package/dist/ask/fuse.js +344 -0
  66. package/dist/ask/fuse.js.map +1 -0
  67. package/dist/ask/graphrank.d.ts +61 -0
  68. package/dist/ask/graphrank.d.ts.map +1 -0
  69. package/dist/ask/graphrank.js +130 -0
  70. package/dist/ask/graphrank.js.map +1 -0
  71. package/dist/ask/index-file.d.ts +44 -0
  72. package/dist/ask/index-file.d.ts.map +1 -0
  73. package/dist/ask/index-file.js +128 -0
  74. package/dist/ask/index-file.js.map +1 -0
  75. package/dist/ask/semantic.d.ts +42 -0
  76. package/dist/ask/semantic.d.ts.map +1 -0
  77. package/dist/ask/semantic.js +293 -0
  78. package/dist/ask/semantic.js.map +1 -0
  79. package/dist/bin/graft.d.ts +3 -0
  80. package/dist/bin/graft.d.ts.map +1 -0
  81. package/dist/bin/graft.js +14 -0
  82. package/dist/bin/graft.js.map +1 -0
  83. package/dist/bin/trail.d.ts +3 -0
  84. package/dist/bin/trail.d.ts.map +1 -0
  85. package/dist/bin/trail.js +13 -0
  86. package/dist/bin/trail.js.map +1 -0
  87. package/dist/blast/blast-cli.d.ts +35 -0
  88. package/dist/blast/blast-cli.d.ts.map +1 -0
  89. package/dist/blast/blast-cli.js +155 -0
  90. package/dist/blast/blast-cli.js.map +1 -0
  91. package/dist/blast/blast.d.ts +128 -0
  92. package/dist/blast/blast.d.ts.map +1 -0
  93. package/dist/blast/blast.js +383 -0
  94. package/dist/blast/blast.js.map +1 -0
  95. package/dist/blast/diff.d.ts +53 -0
  96. package/dist/blast/diff.d.ts.map +1 -0
  97. package/dist/blast/diff.js +193 -0
  98. package/dist/blast/diff.js.map +1 -0
  99. package/dist/blast/evidence.d.ts +51 -0
  100. package/dist/blast/evidence.d.ts.map +1 -0
  101. package/dist/blast/evidence.js +162 -0
  102. package/dist/blast/evidence.js.map +1 -0
  103. package/dist/blast/modules.d.ts +33 -0
  104. package/dist/blast/modules.d.ts.map +1 -0
  105. package/dist/blast/modules.js +83 -0
  106. package/dist/blast/modules.js.map +1 -0
  107. package/dist/blast/name.d.ts +74 -0
  108. package/dist/blast/name.d.ts.map +1 -0
  109. package/dist/blast/name.js +269 -0
  110. package/dist/blast/name.js.map +1 -0
  111. package/dist/blast/owners.d.ts +85 -0
  112. package/dist/blast/owners.d.ts.map +1 -0
  113. package/dist/blast/owners.js +272 -0
  114. package/dist/blast/owners.js.map +1 -0
  115. package/dist/blast/render.d.ts +46 -0
  116. package/dist/blast/render.d.ts.map +1 -0
  117. package/dist/blast/render.js +422 -0
  118. package/dist/blast/render.js.map +1 -0
  119. package/dist/blast/viz.d.ts +37 -0
  120. package/dist/blast/viz.d.ts.map +1 -0
  121. package/dist/blast/viz.js +180 -0
  122. package/dist/blast/viz.js.map +1 -0
  123. package/dist/brand.d.ts +111 -0
  124. package/dist/brand.d.ts.map +1 -0
  125. package/dist/brand.js +282 -0
  126. package/dist/brand.js.map +1 -0
  127. package/dist/claude/build-progress.d.ts +30 -0
  128. package/dist/claude/build-progress.d.ts.map +1 -0
  129. package/dist/claude/build-progress.js +81 -0
  130. package/dist/claude/build-progress.js.map +1 -0
  131. package/dist/claude/hermes-skill-template.d.ts +16 -0
  132. package/dist/claude/hermes-skill-template.d.ts.map +1 -0
  133. package/dist/claude/hermes-skill-template.js +154 -0
  134. package/dist/claude/hermes-skill-template.js.map +1 -0
  135. package/dist/claude/init.d.ts +65 -0
  136. package/dist/claude/init.d.ts.map +1 -0
  137. package/dist/claude/init.js +258 -0
  138. package/dist/claude/init.js.map +1 -0
  139. package/dist/claude/paths.d.ts +9 -0
  140. package/dist/claude/paths.d.ts.map +1 -0
  141. package/dist/claude/paths.js +22 -0
  142. package/dist/claude/paths.js.map +1 -0
  143. package/dist/claude/session-metrics.d.ts +73 -0
  144. package/dist/claude/session-metrics.d.ts.map +1 -0
  145. package/dist/claude/session-metrics.js +209 -0
  146. package/dist/claude/session-metrics.js.map +1 -0
  147. package/dist/claude/settings-merge.d.ts +76 -0
  148. package/dist/claude/settings-merge.d.ts.map +1 -0
  149. package/dist/claude/settings-merge.js +283 -0
  150. package/dist/claude/settings-merge.js.map +1 -0
  151. package/dist/claude/skill-template.d.ts +13 -0
  152. package/dist/claude/skill-template.d.ts.map +1 -0
  153. package/dist/claude/skill-template.js +290 -0
  154. package/dist/claude/skill-template.js.map +1 -0
  155. package/dist/claude/state.d.ts +85 -0
  156. package/dist/claude/state.d.ts.map +1 -0
  157. package/dist/claude/state.js +88 -0
  158. package/dist/claude/state.js.map +1 -0
  159. package/dist/claude/stats.d.ts +5 -0
  160. package/dist/claude/stats.d.ts.map +1 -0
  161. package/dist/claude/stats.js +24 -0
  162. package/dist/claude/stats.js.map +1 -0
  163. package/dist/cli-epilogue.d.ts +12 -0
  164. package/dist/cli-epilogue.d.ts.map +1 -0
  165. package/dist/cli-epilogue.js +72 -0
  166. package/dist/cli-epilogue.js.map +1 -0
  167. package/dist/cli-meta.d.ts +82 -0
  168. package/dist/cli-meta.d.ts.map +1 -0
  169. package/dist/cli-meta.js +238 -0
  170. package/dist/cli-meta.js.map +1 -0
  171. package/dist/cli-picker.d.ts +139 -0
  172. package/dist/cli-picker.d.ts.map +1 -0
  173. package/dist/cli-picker.js +439 -0
  174. package/dist/cli-picker.js.map +1 -0
  175. package/dist/cli.d.ts +3 -0
  176. package/dist/cli.d.ts.map +1 -0
  177. package/dist/cli.js +1638 -0
  178. package/dist/cli.js.map +1 -0
  179. package/dist/context/batches.d.ts +29 -0
  180. package/dist/context/batches.d.ts.map +1 -0
  181. package/dist/context/batches.js +130 -0
  182. package/dist/context/batches.js.map +1 -0
  183. package/dist/context/build.d.ts +57 -0
  184. package/dist/context/build.d.ts.map +1 -0
  185. package/dist/context/build.js +396 -0
  186. package/dist/context/build.js.map +1 -0
  187. package/dist/context/check.d.ts +42 -0
  188. package/dist/context/check.d.ts.map +1 -0
  189. package/dist/context/check.js +162 -0
  190. package/dist/context/check.js.map +1 -0
  191. package/dist/context/map-dir.d.ts +13 -0
  192. package/dist/context/map-dir.d.ts.map +1 -0
  193. package/dist/context/map-dir.js +81 -0
  194. package/dist/context/map-dir.js.map +1 -0
  195. package/dist/context/node-file.d.ts +109 -0
  196. package/dist/context/node-file.d.ts.map +1 -0
  197. package/dist/context/node-file.js +390 -0
  198. package/dist/context/node-file.js.map +1 -0
  199. package/dist/context/price.d.ts +49 -0
  200. package/dist/context/price.d.ts.map +1 -0
  201. package/dist/context/price.js +83 -0
  202. package/dist/context/price.js.map +1 -0
  203. package/dist/context/savings.d.ts +67 -0
  204. package/dist/context/savings.d.ts.map +1 -0
  205. package/dist/context/savings.js +125 -0
  206. package/dist/context/savings.js.map +1 -0
  207. package/dist/engine.d.ts +85 -0
  208. package/dist/engine.d.ts.map +1 -0
  209. package/dist/engine.js +122 -0
  210. package/dist/engine.js.map +1 -0
  211. package/dist/graph/bindings.d.ts +64 -0
  212. package/dist/graph/bindings.d.ts.map +1 -0
  213. package/dist/graph/bindings.js +713 -0
  214. package/dist/graph/bindings.js.map +1 -0
  215. package/dist/graph/build-run.d.ts +25 -0
  216. package/dist/graph/build-run.d.ts.map +1 -0
  217. package/dist/graph/build-run.js +121 -0
  218. package/dist/graph/build-run.js.map +1 -0
  219. package/dist/graph/build.d.ts +88 -0
  220. package/dist/graph/build.d.ts.map +1 -0
  221. package/dist/graph/build.js +386 -0
  222. package/dist/graph/build.js.map +1 -0
  223. package/dist/graph/cards.d.ts +46 -0
  224. package/dist/graph/cards.d.ts.map +1 -0
  225. package/dist/graph/cards.js +280 -0
  226. package/dist/graph/cards.js.map +1 -0
  227. package/dist/graph/check.d.ts +25 -0
  228. package/dist/graph/check.d.ts.map +1 -0
  229. package/dist/graph/check.js +192 -0
  230. package/dist/graph/check.js.map +1 -0
  231. package/dist/graph/container.d.ts +63 -0
  232. package/dist/graph/container.d.ts.map +1 -0
  233. package/dist/graph/container.js +191 -0
  234. package/dist/graph/container.js.map +1 -0
  235. package/dist/graph/depth-parser.d.ts +61 -0
  236. package/dist/graph/depth-parser.d.ts.map +1 -0
  237. package/dist/graph/depth-parser.js +153 -0
  238. package/dist/graph/depth-parser.js.map +1 -0
  239. package/dist/graph/enrich.d.ts +62 -0
  240. package/dist/graph/enrich.d.ts.map +1 -0
  241. package/dist/graph/enrich.js +258 -0
  242. package/dist/graph/enrich.js.map +1 -0
  243. package/dist/graph/extract-cache.d.ts +101 -0
  244. package/dist/graph/extract-cache.d.ts.map +1 -0
  245. package/dist/graph/extract-cache.js +199 -0
  246. package/dist/graph/extract-cache.js.map +1 -0
  247. package/dist/graph/extract.d.ts +85 -0
  248. package/dist/graph/extract.d.ts.map +1 -0
  249. package/dist/graph/extract.js +2377 -0
  250. package/dist/graph/extract.js.map +1 -0
  251. package/dist/graph/fingerprint.d.ts +76 -0
  252. package/dist/graph/fingerprint.d.ts.map +1 -0
  253. package/dist/graph/fingerprint.js +160 -0
  254. package/dist/graph/fingerprint.js.map +1 -0
  255. package/dist/graph/generic.d.ts +74 -0
  256. package/dist/graph/generic.d.ts.map +1 -0
  257. package/dist/graph/generic.js +773 -0
  258. package/dist/graph/generic.js.map +1 -0
  259. package/dist/graph/invariants.d.ts +33 -0
  260. package/dist/graph/invariants.d.ts.map +1 -0
  261. package/dist/graph/invariants.js +52 -0
  262. package/dist/graph/invariants.js.map +1 -0
  263. package/dist/graph/load.d.ts +29 -0
  264. package/dist/graph/load.d.ts.map +1 -0
  265. package/dist/graph/load.js +97 -0
  266. package/dist/graph/load.js.map +1 -0
  267. package/dist/graph/lsp/client.d.ts +61 -0
  268. package/dist/graph/lsp/client.d.ts.map +1 -0
  269. package/dist/graph/lsp/client.js +217 -0
  270. package/dist/graph/lsp/client.js.map +1 -0
  271. package/dist/graph/lsp/enrich.d.ts +11 -0
  272. package/dist/graph/lsp/enrich.d.ts.map +1 -0
  273. package/dist/graph/lsp/enrich.js +163 -0
  274. package/dist/graph/lsp/enrich.js.map +1 -0
  275. package/dist/graph/lsp/registry.d.ts +22 -0
  276. package/dist/graph/lsp/registry.d.ts.map +1 -0
  277. package/dist/graph/lsp/registry.js +71 -0
  278. package/dist/graph/lsp/registry.js.map +1 -0
  279. package/dist/graph/map.d.ts +107 -0
  280. package/dist/graph/map.d.ts.map +1 -0
  281. package/dist/graph/map.js +239 -0
  282. package/dist/graph/map.js.map +1 -0
  283. package/dist/graph/markdown.d.ts +22 -0
  284. package/dist/graph/markdown.d.ts.map +1 -0
  285. package/dist/graph/markdown.js +143 -0
  286. package/dist/graph/markdown.js.map +1 -0
  287. package/dist/graph/native.d.ts +46 -0
  288. package/dist/graph/native.d.ts.map +1 -0
  289. package/dist/graph/native.js +169 -0
  290. package/dist/graph/native.js.map +1 -0
  291. package/dist/graph/queries/c.scm +13 -0
  292. package/dist/graph/queries/c_sharp.scm +19 -0
  293. package/dist/graph/queries/clojure.scm +58 -0
  294. package/dist/graph/queries/cpp.scm +23 -0
  295. package/dist/graph/queries/dart.scm +42 -0
  296. package/dist/graph/queries/elixir.scm +54 -0
  297. package/dist/graph/queries/gleam.scm +51 -0
  298. package/dist/graph/queries/java.scm +20 -0
  299. package/dist/graph/queries/kotlin.scm +43 -0
  300. package/dist/graph/queries/lua.scm +36 -0
  301. package/dist/graph/queries/nix.scm +32 -0
  302. package/dist/graph/queries/php.scm +40 -0
  303. package/dist/graph/queries/ruby.scm +65 -0
  304. package/dist/graph/queries/rust.scm +41 -0
  305. package/dist/graph/queries/scala.scm +66 -0
  306. package/dist/graph/queries/solidity.scm +43 -0
  307. package/dist/graph/queries/swift.scm +51 -0
  308. package/dist/graph/refresh.d.ts +106 -0
  309. package/dist/graph/refresh.d.ts.map +1 -0
  310. package/dist/graph/refresh.js +430 -0
  311. package/dist/graph/refresh.js.map +1 -0
  312. package/dist/graph/relations.d.ts +14 -0
  313. package/dist/graph/relations.d.ts.map +1 -0
  314. package/dist/graph/relations.js +8 -0
  315. package/dist/graph/relations.js.map +1 -0
  316. package/dist/graph/resolve.d.ts +17 -0
  317. package/dist/graph/resolve.d.ts.map +1 -0
  318. package/dist/graph/resolve.js +716 -0
  319. package/dist/graph/resolve.js.map +1 -0
  320. package/dist/graph/root.d.ts +11 -0
  321. package/dist/graph/root.d.ts.map +1 -0
  322. package/dist/graph/root.js +40 -0
  323. package/dist/graph/root.js.map +1 -0
  324. package/dist/graph/scopes.d.ts +40 -0
  325. package/dist/graph/scopes.d.ts.map +1 -0
  326. package/dist/graph/scopes.js +383 -0
  327. package/dist/graph/scopes.js.map +1 -0
  328. package/dist/graph/seed.d.ts +38 -0
  329. package/dist/graph/seed.d.ts.map +1 -0
  330. package/dist/graph/seed.js +229 -0
  331. package/dist/graph/seed.js.map +1 -0
  332. package/dist/graph/source-files.d.ts +46 -0
  333. package/dist/graph/source-files.d.ts.map +1 -0
  334. package/dist/graph/source-files.js +118 -0
  335. package/dist/graph/source-files.js.map +1 -0
  336. package/dist/graph/traverse-cli.d.ts +55 -0
  337. package/dist/graph/traverse-cli.d.ts.map +1 -0
  338. package/dist/graph/traverse-cli.js +189 -0
  339. package/dist/graph/traverse-cli.js.map +1 -0
  340. package/dist/graph/traverse.d.ts +112 -0
  341. package/dist/graph/traverse.d.ts.map +1 -0
  342. package/dist/graph/traverse.js +192 -0
  343. package/dist/graph/traverse.js.map +1 -0
  344. package/dist/graph/types.d.ts +78 -0
  345. package/dist/graph/types.d.ts.map +1 -0
  346. package/dist/graph/types.js +14 -0
  347. package/dist/graph/types.js.map +1 -0
  348. package/dist/graph/wasm-runtime.d.ts +19 -0
  349. package/dist/graph/wasm-runtime.d.ts.map +1 -0
  350. package/dist/graph/wasm-runtime.js +38 -0
  351. package/dist/graph/wasm-runtime.js.map +1 -0
  352. package/dist/graph/workspace-cli.d.ts +56 -0
  353. package/dist/graph/workspace-cli.d.ts.map +1 -0
  354. package/dist/graph/workspace-cli.js +111 -0
  355. package/dist/graph/workspace-cli.js.map +1 -0
  356. package/dist/graph/workspace.d.ts +172 -0
  357. package/dist/graph/workspace.d.ts.map +1 -0
  358. package/dist/graph/workspace.js +714 -0
  359. package/dist/graph/workspace.js.map +1 -0
  360. package/dist/graph/write.d.ts +13 -0
  361. package/dist/graph/write.d.ts.map +1 -0
  362. package/dist/graph/write.js +86 -0
  363. package/dist/graph/write.js.map +1 -0
  364. package/dist/hosts/antigravity.d.ts +14 -0
  365. package/dist/hosts/antigravity.d.ts.map +1 -0
  366. package/dist/hosts/antigravity.js +59 -0
  367. package/dist/hosts/antigravity.js.map +1 -0
  368. package/dist/hosts/auto.d.ts +37 -0
  369. package/dist/hosts/auto.d.ts.map +1 -0
  370. package/dist/hosts/auto.js +141 -0
  371. package/dist/hosts/auto.js.map +1 -0
  372. package/dist/hosts/claude-global.d.ts +72 -0
  373. package/dist/hosts/claude-global.d.ts.map +1 -0
  374. package/dist/hosts/claude-global.js +230 -0
  375. package/dist/hosts/claude-global.js.map +1 -0
  376. package/dist/hosts/config-write.d.ts +36 -0
  377. package/dist/hosts/config-write.d.ts.map +1 -0
  378. package/dist/hosts/config-write.js +64 -0
  379. package/dist/hosts/config-write.js.map +1 -0
  380. package/dist/hosts/init.d.ts +28 -0
  381. package/dist/hosts/init.d.ts.map +1 -0
  382. package/dist/hosts/init.js +89 -0
  383. package/dist/hosts/init.js.map +1 -0
  384. package/dist/hosts/instructions.d.ts +14 -0
  385. package/dist/hosts/instructions.d.ts.map +1 -0
  386. package/dist/hosts/instructions.js +95 -0
  387. package/dist/hosts/instructions.js.map +1 -0
  388. package/dist/hosts/mcp-config.d.ts +78 -0
  389. package/dist/hosts/mcp-config.d.ts.map +1 -0
  390. package/dist/hosts/mcp-config.js +251 -0
  391. package/dist/hosts/mcp-config.js.map +1 -0
  392. package/dist/hosts/plan.d.ts +32 -0
  393. package/dist/hosts/plan.d.ts.map +1 -0
  394. package/dist/hosts/plan.js +73 -0
  395. package/dist/hosts/plan.js.map +1 -0
  396. package/dist/hosts/registry.d.ts +41 -0
  397. package/dist/hosts/registry.d.ts.map +1 -0
  398. package/dist/hosts/registry.js +164 -0
  399. package/dist/hosts/registry.js.map +1 -0
  400. package/dist/hosts/retract.d.ts +47 -0
  401. package/dist/hosts/retract.d.ts.map +1 -0
  402. package/dist/hosts/retract.js +520 -0
  403. package/dist/hosts/retract.js.map +1 -0
  404. package/dist/hosts/sections.d.ts +47 -0
  405. package/dist/hosts/sections.d.ts.map +1 -0
  406. package/dist/hosts/sections.js +127 -0
  407. package/dist/hosts/sections.js.map +1 -0
  408. package/dist/index.d.ts +41 -0
  409. package/dist/index.d.ts.map +1 -0
  410. package/dist/index.js +32 -0
  411. package/dist/index.js.map +1 -0
  412. package/dist/ingest/fs.d.ts +79 -0
  413. package/dist/ingest/fs.d.ts.map +1 -0
  414. package/dist/ingest/fs.js +306 -0
  415. package/dist/ingest/fs.js.map +1 -0
  416. package/dist/init-guard.d.ts +16 -0
  417. package/dist/init-guard.d.ts.map +1 -0
  418. package/dist/init-guard.js +27 -0
  419. package/dist/init-guard.js.map +1 -0
  420. package/dist/mcp/instructions.d.ts +5 -0
  421. package/dist/mcp/instructions.d.ts.map +1 -0
  422. package/dist/mcp/instructions.js +64 -0
  423. package/dist/mcp/instructions.js.map +1 -0
  424. package/dist/mcp/kept-listing.d.ts +27 -0
  425. package/dist/mcp/kept-listing.d.ts.map +1 -0
  426. package/dist/mcp/kept-listing.js +63 -0
  427. package/dist/mcp/kept-listing.js.map +1 -0
  428. package/dist/mcp/server.d.ts +4 -0
  429. package/dist/mcp/server.d.ts.map +1 -0
  430. package/dist/mcp/server.js +147 -0
  431. package/dist/mcp/server.js.map +1 -0
  432. package/dist/mcp/tool-names.d.ts +27 -0
  433. package/dist/mcp/tool-names.d.ts.map +1 -0
  434. package/dist/mcp/tool-names.js +47 -0
  435. package/dist/mcp/tool-names.js.map +1 -0
  436. package/dist/mcp/tools.d.ts +22 -0
  437. package/dist/mcp/tools.d.ts.map +1 -0
  438. package/dist/mcp/tools.js +440 -0
  439. package/dist/mcp/tools.js.map +1 -0
  440. package/dist/node-version.d.ts +15 -0
  441. package/dist/node-version.d.ts.map +1 -0
  442. package/dist/node-version.js +23 -0
  443. package/dist/node-version.js.map +1 -0
  444. package/dist/search/grep-cli.d.ts +35 -0
  445. package/dist/search/grep-cli.d.ts.map +1 -0
  446. package/dist/search/grep-cli.js +115 -0
  447. package/dist/search/grep-cli.js.map +1 -0
  448. package/dist/search/grep.d.ts +60 -0
  449. package/dist/search/grep.d.ts.map +1 -0
  450. package/dist/search/grep.js +143 -0
  451. package/dist/search/grep.js.map +1 -0
  452. package/dist/search/ignored-code.d.ts +9 -0
  453. package/dist/search/ignored-code.d.ts.map +1 -0
  454. package/dist/search/ignored-code.js +73 -0
  455. package/dist/search/ignored-code.js.map +1 -0
  456. package/dist/search/user-regexp.d.ts +26 -0
  457. package/dist/search/user-regexp.d.ts.map +1 -0
  458. package/dist/search/user-regexp.js +150 -0
  459. package/dist/search/user-regexp.js.map +1 -0
  460. package/dist/telemetry/contract.d.ts +117 -0
  461. package/dist/telemetry/contract.d.ts.map +1 -0
  462. package/dist/telemetry/contract.js +341 -0
  463. package/dist/telemetry/contract.js.map +1 -0
  464. package/dist/telemetry/flush.d.ts +21 -0
  465. package/dist/telemetry/flush.d.ts.map +1 -0
  466. package/dist/telemetry/flush.js +85 -0
  467. package/dist/telemetry/flush.js.map +1 -0
  468. package/dist/telemetry/gate.d.ts +30 -0
  469. package/dist/telemetry/gate.d.ts.map +1 -0
  470. package/dist/telemetry/gate.js +81 -0
  471. package/dist/telemetry/gate.js.map +1 -0
  472. package/dist/telemetry/identity.d.ts +40 -0
  473. package/dist/telemetry/identity.d.ts.map +1 -0
  474. package/dist/telemetry/identity.js +80 -0
  475. package/dist/telemetry/identity.js.map +1 -0
  476. package/dist/telemetry/index.d.ts +18 -0
  477. package/dist/telemetry/index.d.ts.map +1 -0
  478. package/dist/telemetry/index.js +16 -0
  479. package/dist/telemetry/index.js.map +1 -0
  480. package/dist/telemetry/key.d.ts +21 -0
  481. package/dist/telemetry/key.d.ts.map +1 -0
  482. package/dist/telemetry/key.js +49 -0
  483. package/dist/telemetry/key.js.map +1 -0
  484. package/dist/telemetry/notice.d.ts +19 -0
  485. package/dist/telemetry/notice.d.ts.map +1 -0
  486. package/dist/telemetry/notice.js +93 -0
  487. package/dist/telemetry/notice.js.map +1 -0
  488. package/dist/telemetry/queue.d.ts +35 -0
  489. package/dist/telemetry/queue.d.ts.map +1 -0
  490. package/dist/telemetry/queue.js +162 -0
  491. package/dist/telemetry/queue.js.map +1 -0
  492. package/dist/telemetry/send.d.ts +19 -0
  493. package/dist/telemetry/send.d.ts.map +1 -0
  494. package/dist/telemetry/send.js +84 -0
  495. package/dist/telemetry/send.js.map +1 -0
  496. package/dist/telemetry/sessions.d.ts +25 -0
  497. package/dist/telemetry/sessions.d.ts.map +1 -0
  498. package/dist/telemetry/sessions.js +104 -0
  499. package/dist/telemetry/sessions.js.map +1 -0
  500. package/dist/telemetry/track.d.ts +62 -0
  501. package/dist/telemetry/track.d.ts.map +1 -0
  502. package/dist/telemetry/track.js +143 -0
  503. package/dist/telemetry/track.js.map +1 -0
  504. package/dist/upkeep-run.d.ts +22 -0
  505. package/dist/upkeep-run.d.ts.map +1 -0
  506. package/dist/upkeep-run.js +85 -0
  507. package/dist/upkeep-run.js.map +1 -0
  508. package/dist/upkeep.d.ts +127 -0
  509. package/dist/upkeep.d.ts.map +1 -0
  510. package/dist/upkeep.js +252 -0
  511. package/dist/upkeep.js.map +1 -0
  512. package/dist/util/actions-folder.d.ts +2 -0
  513. package/dist/util/actions-folder.d.ts.map +1 -0
  514. package/dist/util/actions-folder.js +9 -0
  515. package/dist/util/actions-folder.js.map +1 -0
  516. package/dist/util/browser.d.ts +3 -0
  517. package/dist/util/browser.d.ts.map +1 -0
  518. package/dist/util/browser.js +14 -0
  519. package/dist/util/browser.js.map +1 -0
  520. package/dist/util/child-process.d.ts +15 -0
  521. package/dist/util/child-process.d.ts.map +1 -0
  522. package/dist/util/child-process.js +15 -0
  523. package/dist/util/child-process.js.map +1 -0
  524. package/dist/util/front-matter.d.ts +46 -0
  525. package/dist/util/front-matter.d.ts.map +1 -0
  526. package/dist/util/front-matter.js +113 -0
  527. package/dist/util/front-matter.js.map +1 -0
  528. package/dist/util/id.d.ts +7 -0
  529. package/dist/util/id.d.ts.map +1 -0
  530. package/dist/util/id.js +14 -0
  531. package/dist/util/id.js.map +1 -0
  532. package/dist/util/paths.d.ts +29 -0
  533. package/dist/util/paths.d.ts.map +1 -0
  534. package/dist/util/paths.js +71 -0
  535. package/dist/util/paths.js.map +1 -0
  536. package/dist/util/private-file.d.ts +14 -0
  537. package/dist/util/private-file.d.ts.map +1 -0
  538. package/dist/util/private-file.js +82 -0
  539. package/dist/util/private-file.js.map +1 -0
  540. package/dist/util/source.d.ts +4 -0
  541. package/dist/util/source.d.ts.map +1 -0
  542. package/dist/util/source.js +12 -0
  543. package/dist/util/source.js.map +1 -0
  544. package/dist/util/spinner.d.ts +15 -0
  545. package/dist/util/spinner.d.ts.map +1 -0
  546. package/dist/util/spinner.js +52 -0
  547. package/dist/util/spinner.js.map +1 -0
  548. package/dist/util/state.d.ts +120 -0
  549. package/dist/util/state.d.ts.map +1 -0
  550. package/dist/util/state.js +264 -0
  551. package/dist/util/state.js.map +1 -0
  552. package/dist/vendor/grammars/tree-sitter-go.LICENSE +21 -0
  553. package/dist/vendor/grammars/tree-sitter-go.wasm +0 -0
  554. package/dist/vendor/grammars/tree-sitter-java.LICENSE +21 -0
  555. package/dist/vendor/grammars/tree-sitter-java.wasm +0 -0
  556. package/dist/vendor/grammars/tree-sitter-kotlin.LICENSE +9 -0
  557. package/dist/vendor/grammars/tree-sitter-kotlin.wasm +0 -0
  558. package/dist/vendor/grammars/tree-sitter-php.LICENSE +22 -0
  559. package/dist/vendor/grammars/tree-sitter-php.wasm +0 -0
  560. package/dist/vendor/grammars/tree-sitter-python.LICENSE +21 -0
  561. package/dist/vendor/grammars/tree-sitter-python.wasm +0 -0
  562. package/dist/vendor/grammars/tree-sitter-r.LICENSE +9 -0
  563. package/dist/vendor/grammars/tree-sitter-r.wasm +0 -0
  564. package/dist/vendor/grammars/tree-sitter-swift.LICENSE +21 -0
  565. package/dist/vendor/grammars/tree-sitter-swift.wasm +0 -0
  566. package/dist/vendor/grammars/tree-sitter-tsx.wasm +0 -0
  567. package/dist/vendor/grammars/tree-sitter-typescript.LICENSE +21 -0
  568. package/dist/vendor/grammars/tree-sitter-typescript.wasm +0 -0
  569. package/dist/viewer/app.js +2 -0
  570. package/dist/viewer/index.html +49 -0
  571. package/dist/viewer/style.css +154 -0
  572. package/dist/viz/assemble.d.ts +83 -0
  573. package/dist/viz/assemble.d.ts.map +1 -0
  574. package/dist/viz/assemble.js +101 -0
  575. package/dist/viz/assemble.js.map +1 -0
  576. package/dist/viz/export.d.ts +39 -0
  577. package/dist/viz/export.d.ts.map +1 -0
  578. package/dist/viz/export.js +98 -0
  579. package/dist/viz/export.js.map +1 -0
  580. package/dist/viz/serve.d.ts +13 -0
  581. package/dist/viz/serve.d.ts.map +1 -0
  582. package/dist/viz/serve.js +130 -0
  583. package/dist/viz/serve.js.map +1 -0
  584. package/package.json +115 -4
  585. package/scripts/build-grammar-wasm.mjs +112 -0
  586. package/scripts/build-viewer.mjs +44 -0
  587. package/scripts/graph-quality.mjs +117 -0
  588. package/scripts/pack-trail.mjs +53 -0
  589. package/scripts/postinstall.mjs +65 -0
  590. package/scripts/run-tests.mjs +72 -0
  591. package/scripts/stamp-telemetry-key.mjs +56 -0
  592. package/scripts/tally-audit.mjs +140 -0
  593. package/scripts/vendor-grammars.mjs +53 -0
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Container tier — files that are not a language but a wrapper around one.
3
+ *
4
+ * A Vue SFC is the motivating case: `.vue` is HTML-shaped, and everything worth
5
+ * indexing lives inside its `<script>` block. Registering `tree-sitter-vue` as a
6
+ * breadth-tier language (generic.ts) would not help — that grammar parses the
7
+ * shell (`<template>` / `<script>` / `<style>`) and hands back the script body as
8
+ * one opaque `raw_text` node, so the cards would come out empty.
9
+ *
10
+ * So the container grammar is used only to answer "where does the embedded
11
+ * language start and end", and the block itself goes to the DEPTH-tier extractor
12
+ * (extract.ts). A `.vue` file therefore gets the same quality of extraction as a
13
+ * `.ts` file — bindings, imports, resolved calls — not the signature-only output
14
+ * the breadth tier would give.
15
+ *
16
+ * **The span shift is the whole risk here.** `extractFile` numbers its spans from
17
+ * the start of the string it was handed, so every node comes back pointing at a
18
+ * line in the script, not in the `.vue`. A span that is off by even one line is
19
+ * worse than not indexing the file at all: graft's promise is that its
20
+ * `file:line` is exact, and a plausible-but-wrong line silently sends the reader
21
+ * to the wrong place. `test/container-extract.test.ts` pins this against
22
+ * fixtures whose true line numbers are known.
23
+ */
24
+ import { extractFile, mintId } from "./extract.js";
25
+ import { extractGeneric, fallbackLangOf, loadWasmLanguage, parseWasm } from "./generic.js";
26
+ import { depthReady, warmDepthGrammars } from "./depth-parser.js";
27
+ import { contentHash } from "../util/id.js";
28
+ /** The container registry. Svelte and Astro are the same shape and would be a
29
+ * row each, but they are left out until someone has a repo to verify them
30
+ * against — a wrong `body` node type would produce silently misplaced spans. */
31
+ export const CONTAINER_LANGS = [
32
+ { name: "vue", exts: [".vue"], wasm: "vue", block: "script_element", body: "raw_text", inner: "typescript" },
33
+ ];
34
+ const byExt = new Map();
35
+ for (const l of CONTAINER_LANGS)
36
+ for (const e of l.exts)
37
+ byExt.set(e, l);
38
+ /** The container language for a path, or null if none claims it. */
39
+ export function containerLangOf(path) {
40
+ const lower = path.toLowerCase();
41
+ for (const [ext, l] of byExt)
42
+ if (lower.endsWith(ext))
43
+ return l;
44
+ return null;
45
+ }
46
+ /** Every file extension the container tier claims. */
47
+ export function containerExtensions() {
48
+ return CONTAINER_LANGS.flatMap((l) => l.exts);
49
+ }
50
+ const loaded = new Map();
51
+ /** Warm the container grammars this repo needs, and the depth grammar of each
52
+ * one's embedded language. Same contract as `warmGenericGrammars`: await once
53
+ * before the synchronous parse loop, and an unavailable grammar is skipped rather
54
+ * than fatal (its files then extract to a file node only, exactly as they do today). */
55
+ export async function warmContainerGrammars(langNames) {
56
+ for (const name of new Set(langNames)) {
57
+ if (loaded.has(name))
58
+ continue;
59
+ const row = CONTAINER_LANGS.find((l) => l.name === name);
60
+ if (!row)
61
+ continue;
62
+ await warmDepthGrammars([row.inner]);
63
+ const language = await loadWasmLanguage(row.wasm);
64
+ if (language)
65
+ loaded.set(name, language);
66
+ }
67
+ }
68
+ /** True if a container grammar has been warmed (else extraction is file-only). */
69
+ export function isContainerWarm(langName) {
70
+ return loaded.has(langName);
71
+ }
72
+ /** `L12-L20` shifted by n lines. The span format is produced in exactly two
73
+ * places (extract.ts and generic.ts) and is always this shape; anything else is
74
+ * returned untouched rather than guessed at. */
75
+ function shiftSpan(span, lines) {
76
+ const m = /^L(\d+)-L(\d+)$/.exec(span);
77
+ if (!m)
78
+ return span;
79
+ return `L${Number(m[1]) + lines}-L${Number(m[2]) + lines}`;
80
+ }
81
+ /** The `.vue` file's own node. Deliberately describes the whole file — line
82
+ * count, hash and size of the SFC, not of the script block — because that is
83
+ * what a reader opening this path will see. */
84
+ function containerFileNode(rel, source, residual) {
85
+ return {
86
+ id: rel,
87
+ name: rel.split("/").pop() ?? rel,
88
+ kind: "file",
89
+ path: rel,
90
+ span: `L1-L${Math.max(1, source.split("\n").length)}`,
91
+ signature: null,
92
+ exported: true,
93
+ // "ast", not "generic": the symbols under this file come from the depth-tier
94
+ // extractor with real bindings and specifiers. resolve.ts gates a
95
+ // guess-by-name fallback on `origin === "generic"`, and these nodes must not
96
+ // take it — they carry the information to resolve properly.
97
+ origin: "ast",
98
+ body_hash: contentHash(source),
99
+ chars: source.length,
100
+ body_text: residual,
101
+ summary_state: "pending",
102
+ summary: null,
103
+ crux: null,
104
+ };
105
+ }
106
+ /** Every embedded block in document order, as [bodyNode] — an SFC may legally
107
+ * carry two (`<script>` for options/exports plus `<script setup>`), and each
108
+ * needs its own offset. */
109
+ function blocks(root, lang) {
110
+ const out = [];
111
+ const n = root.namedChildCount ?? 0;
112
+ for (let i = 0; i < n; i++) {
113
+ const child = root.namedChild?.(i);
114
+ if (!child || child.type !== lang.block)
115
+ continue;
116
+ const kids = child.namedChildCount ?? 0;
117
+ for (let j = 0; j < kids; j++) {
118
+ const body = child.namedChild?.(j);
119
+ // An empty `<script></script>` has no body child at all — skipped here, so
120
+ // the file still gets its file node and nothing else, which is the same
121
+ // shape as a file whose grammar is missing.
122
+ if (body && body.type === lang.body)
123
+ out.push(body);
124
+ }
125
+ }
126
+ return out;
127
+ }
128
+ /**
129
+ * Extract one container file. Synchronous; needs the grammar pre-warmed.
130
+ *
131
+ * Never throws: a missing grammar, an unparseable SFC or a script block the
132
+ * inner extractor chokes on all degrade to "fewer nodes", because a build must
133
+ * not fail over one component.
134
+ */
135
+ export function extractContainer(rel, source, lang) {
136
+ const nodes = [];
137
+ const rawEdges = [];
138
+ const residuals = [];
139
+ const language = loaded.get(lang.name);
140
+ const root = language ? parseWasm(language, source) : null;
141
+ if (root) {
142
+ // Ids are minted per file by the inner extractor, so two script blocks that
143
+ // both define `setup` would collide. Threading one set across the blocks
144
+ // makes the second one `path#setup~2`, and the rename is applied to that
145
+ // block's edges too so nothing points at an id that no longer exists.
146
+ const minted = new Set([rel]);
147
+ for (const body of blocks(root, lang)) {
148
+ const script = source.slice(body.startIndex, body.endIndex);
149
+ let inner;
150
+ try {
151
+ // No grammar for the embedded language (see depth-parser.ts): its breadth
152
+ // stand-in gives the block's symbols, warmed by the build like any other.
153
+ inner = depthReady(lang.inner)
154
+ ? extractFile(rel, script, lang.inner)
155
+ : extractGeneric(rel, script, fallbackLangOf(lang.inner).name);
156
+ }
157
+ catch {
158
+ continue; // one bad block, not a bad build
159
+ }
160
+ // `raw_text` starts immediately after the `>` of the opening tag, so its
161
+ // row IS the tag's row and the slice begins with that line's newline.
162
+ // Script line 1 is therefore the tail of the tag line, and script line N
163
+ // lands on `.vue` line row + N — which is exactly "add the start row to a
164
+ // 1-based span". Taking the row from the tag node instead would look
165
+ // equivalent and be right only when the tag has no attributes.
166
+ const shift = body.startPosition.row;
167
+ // nodes[0] is the script's own file node: it describes the block, not the
168
+ // file, so it is dropped and its residual folded into the .vue file node.
169
+ const [scriptFile, ...symbols] = inner.nodes;
170
+ if (scriptFile?.body_text)
171
+ residuals.push(scriptFile.body_text);
172
+ const renamed = new Map();
173
+ for (const node of symbols) {
174
+ const id = mintId(node.id, minted);
175
+ if (id !== node.id)
176
+ renamed.set(node.id, id);
177
+ nodes.push({ ...node, id, span: shiftSpan(node.span, shift) });
178
+ }
179
+ for (const edge of inner.rawEdges) {
180
+ const source_ = renamed.get(edge.source) ?? edge.source;
181
+ const targetId = edge.targetId === undefined ? undefined : (renamed.get(edge.targetId) ?? edge.targetId);
182
+ rawEdges.push({ ...edge, source: source_, ...(targetId === undefined ? {} : { targetId }) });
183
+ }
184
+ }
185
+ }
186
+ // Built last so it can carry the residual, but unshifted first so the file node
187
+ // stays at index 0 like every other tier's output.
188
+ nodes.unshift(containerFileNode(rel, source, residuals.join("\n")));
189
+ return { nodes, rawEdges };
190
+ }
191
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/graph/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAmD,MAAM,cAAc,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAe,MAAM,cAAc,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAmB5C;;gFAEgF;AAChF,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE;CAC7G,CAAC;AAEF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;AAC/C,KAAK,MAAM,CAAC,IAAI,eAAe;IAAE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzE,oEAAoE;AACpE,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,KAAK;QAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,mBAAmB;IACjC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAC;AAE1C;;;wFAGwF;AACxF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,SAA2B;IACrE,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/B,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,iBAAiB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED;;gDAEgD;AAChD,SAAS,SAAS,CAAC,IAAY,EAAE,KAAa;IAC5C,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;AAC7D,CAAC;AAED;;+CAE+C;AAC/C,SAAS,iBAAiB,CAAC,GAAW,EAAE,MAAc,EAAE,QAAgB;IACtE,OAAO;QACL,EAAE,EAAE,GAAG;QACP,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG;QACjC,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;QACrD,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,6EAA6E;QAC7E,kEAAkE;QAClE,6EAA6E;QAC7E,4DAA4D;QAC5D,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,SAAS,EAAE,QAAQ;QACnB,aAAa,EAAE,SAAS;QACxB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,IAAI;KACX,CAAC;AACJ,CAAC;AAED;;2BAE2B;AAC3B,SAAS,MAAM,CAAC,IAAY,EAAE,IAAmB;IAC/C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK;YAAE,SAAS;QAClD,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;YACnC,2EAA2E;YAC3E,wEAAwE;YACxE,4CAA4C;YAC5C,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,MAAc,EAAE,IAAmB;IAC/E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3D,IAAI,IAAI,EAAE,CAAC;QACT,4EAA4E;QAC5E,yEAAyE;QACzE,yEAAyE;QACzE,sEAAsE;QACtE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAEtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE5D,IAAI,KAAoB,CAAC;YACzB,IAAI,CAAC;gBACH,0EAA0E;gBAC1E,0EAA0E;gBAC1E,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC5B,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;oBACtC,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YACnE,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,CAAC,iCAAiC;YAC7C,CAAC;YAED,yEAAyE;YACzE,sEAAsE;YACtE,yEAAyE;YACzE,0EAA0E;YAC1E,qEAAqE;YACrE,+DAA+D;YAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAErC,0EAA0E;YAC1E,0EAA0E;YAC1E,MAAM,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;YAC7C,IAAI,UAAU,EAAE,SAAS;gBAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAEhE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC1C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACnC,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE;oBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC;gBACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzG,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,mDAAmD;IACnD,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,61 @@
1
+ import type { Language } from "./extract.js";
2
+ export interface Point {
3
+ row: number;
4
+ column: number;
5
+ }
6
+ /** The syntax-node surface extract.ts and bindings.ts use. */
7
+ export interface SyntaxNode {
8
+ readonly type: string;
9
+ readonly text: string;
10
+ /** Unique within one tree; compare `tree` too (extract.ts `sameSyntaxNode`). */
11
+ readonly id: number;
12
+ readonly tree: unknown;
13
+ readonly startIndex: number;
14
+ readonly endIndex: number;
15
+ readonly startPosition: Point;
16
+ readonly endPosition: Point;
17
+ readonly parent: SyntaxNode | null;
18
+ readonly children: SyntaxNode[];
19
+ readonly namedChildren: SyntaxNode[];
20
+ readonly previousNamedSibling: SyntaxNode | null;
21
+ childForFieldName(fieldName: string): SyntaxNode | null;
22
+ }
23
+ /** Each depth grammar's .wasm: the package it comes from and the file's name. A
24
+ * `built` one isn't shipped by its package; it is in src/graph/grammars/. */
25
+ export declare const DEPTH_WASM: Record<Language, {
26
+ module: string;
27
+ file: string;
28
+ built?: true;
29
+ }>;
30
+ /** Languages that parse on their native addon instead. Empty: every depth
31
+ * language built the native graph exactly on WASM (test/depth-parity.ts). */
32
+ export declare const NATIVE_ONLY: ReadonlySet<Language>;
33
+ /** `lang`'s .wasm bytes: from dist/vendor/grammars/ in a build, else (run from
34
+ * src/) from src/graph/grammars/ or the grammar package in node_modules. */
35
+ export declare function readDepthWasm(lang: Language, vendorDir?: string): Uint8Array;
36
+ type Backend = "wasm" | "native";
37
+ /** Load the grammars for `langs`. Await once before a synchronous parse loop.
38
+ * Never throws: a grammar that won't load leaves {@link depthReady} false. */
39
+ export declare function warmDepthGrammars(langs: Iterable<Language>): Promise<void>;
40
+ /** True when `lang`'s grammar is loaded and can parse. Never throws. */
41
+ export declare function depthReady(lang: Language): boolean;
42
+ /**
43
+ * Parse `source` as `lang` and hand the root to `use`. The tree lives only for the
44
+ * call: a WASM tree is freed when `use` returns, so nothing may keep a node.
45
+ * Throws when the grammar is unavailable: callers ask {@link depthReady} first and
46
+ * send the file to its breadth-tier stand-in instead.
47
+ */
48
+ export declare function parseDepth<T>(lang: Language, source: string, use: (root: SyntaxNode) => T): T;
49
+ /** The npm packages whose missing binary keeps these languages off a native
50
+ * parser. Only a {@link NATIVE_ONLY} language can have one: a WASM grammar has no
51
+ * install script for `--allow-scripts` to run. */
52
+ export declare function missingDepthPackages(langs: Iterable<Language>): string[];
53
+ /** Test seam: parse every depth language on `backend` (null restores the default
54
+ * per-language choice), and/or replace how a grammar's .wasm is read (a function
55
+ * that throws simulates a missing or corrupt file). Forgets every grammar loaded. */
56
+ export declare function setDepthParsersForTest(opts: {
57
+ backend?: Backend | null;
58
+ readWasm?: ((lang: Language) => Uint8Array) | null;
59
+ }): void;
60
+ export {};
61
+ //# sourceMappingURL=depth-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"depth-parser.d.ts","sourceRoot":"","sources":["../../src/graph/depth-parser.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,8DAA8D;AAC9D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;IACrC,QAAQ,CAAC,oBAAoB,EAAE,UAAU,GAAG,IAAI,CAAC;IACjD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;CACzD;AAED;6EAC6E;AAC7E,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,IAAI,CAAA;CAAE,CAUvF,CAAC;AAEF;6EAC6E;AAC7E,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAuB,CAAC;AAMtE;4EAC4E;AAC5E,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,SAAa,GAAG,UAAU,CAKhF;AAED,KAAK,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AA6BjC;8EAC8E;AAC9E,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhF;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAElD;AASD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,CAAC,GAAG,CAAC,CA0B7F;AAED;;kDAEkD;AAClD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,CAExE;AAED;;qFAEqF;AACrF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAK,UAAU,CAAC,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAInI"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * The depth tier's parsers: the grammars extract.ts walks, compiled to WASM, so
3
+ * installing the package compiles nothing.
4
+ *
5
+ * Both halves of a parse are what the native addons ran. The grammars are the same
6
+ * versions the addons were built from, not the breadth tier's bundle: a grammar
7
+ * version changes parse trees, and extract.ts is written against these exact
8
+ * trees. And they run on web-tree-sitter 0.22.2, the tree-sitter core the addons
9
+ * were built with (wasm-runtime.ts says why that matters). Most grammar packages
10
+ * ship their own .wasm next to the native binding; python, kotlin and swift don't,
11
+ * so scripts/build-grammar-wasm.mjs compiles theirs from the package's own src/
12
+ * and they are committed in src/graph/grammars/ (grammars.json records what each
13
+ * was built from; that script says why swift's scanner is patched). `npm run
14
+ * build` copies all of them into dist/vendor/grammars/ (scripts/vendor-grammars.mjs).
15
+ *
16
+ * The native addons (native.ts) stay behind the same interface for two reasons: a
17
+ * language listed in {@link NATIVE_ONLY} parses on its addon, and
18
+ * test/depth-parity.ts builds real repos on both and diffs the graphs. Either way
19
+ * extract.ts sees one node API, {@link SyntaxNode}, which both satisfy.
20
+ *
21
+ * Loading WASM is async and parsing is not, so a build awaits
22
+ * {@link warmDepthGrammars} once (build.ts `warmGrammarsFor` does) before its
23
+ * synchronous parse loop. A grammar that won't load sends its language's files to
24
+ * the breadth tier's stand-in (`fallbackLangOf` in generic.ts).
25
+ */
26
+ import { existsSync, readFileSync } from "node:fs";
27
+ import { createRequire } from "node:module";
28
+ import { join } from "node:path";
29
+ import { fileURLToPath } from "node:url";
30
+ import { missingNativePackages, nativeParser, nativeReady } from "./native.js";
31
+ import { depthRuntime } from "./wasm-runtime.js";
32
+ /** Each depth grammar's .wasm: the package it comes from and the file's name. A
33
+ * `built` one isn't shipped by its package; it is in src/graph/grammars/. */
34
+ export const DEPTH_WASM = {
35
+ typescript: { module: "tree-sitter-typescript", file: "tree-sitter-typescript.wasm" },
36
+ tsx: { module: "tree-sitter-typescript", file: "tree-sitter-tsx.wasm" },
37
+ python: { module: "tree-sitter-python", file: "tree-sitter-python.wasm", built: true },
38
+ go: { module: "tree-sitter-go", file: "tree-sitter-go.wasm" },
39
+ r: { module: "tree-sitter-r", file: "tree-sitter-r.wasm" },
40
+ java: { module: "tree-sitter-java", file: "tree-sitter-java.wasm" },
41
+ kotlin: { module: "tree-sitter-kotlin", file: "tree-sitter-kotlin.wasm", built: true },
42
+ swift: { module: "tree-sitter-swift", file: "tree-sitter-swift.wasm", built: true },
43
+ php: { module: "tree-sitter-php", file: "tree-sitter-php.wasm" },
44
+ };
45
+ /** Languages that parse on their native addon instead. Empty: every depth
46
+ * language built the native graph exactly on WASM (test/depth-parity.ts). */
47
+ export const NATIVE_ONLY = new Set();
48
+ const nodeRequire = createRequire(import.meta.url);
49
+ const VENDOR_DIR = fileURLToPath(new URL("../vendor/grammars/", import.meta.url));
50
+ const BUILT_DIR = fileURLToPath(new URL("./grammars/", import.meta.url));
51
+ /** `lang`'s .wasm bytes: from dist/vendor/grammars/ in a build, else (run from
52
+ * src/) from src/graph/grammars/ or the grammar package in node_modules. */
53
+ export function readDepthWasm(lang, vendorDir = VENDOR_DIR) {
54
+ const { module, file, built } = DEPTH_WASM[lang];
55
+ const vendored = join(vendorDir, file);
56
+ if (existsSync(vendored))
57
+ return readFileSync(vendored);
58
+ return readFileSync(built ? join(BUILT_DIR, file) : nodeRequire.resolve(`${module}/${file}`));
59
+ }
60
+ let forced = null;
61
+ let readWasm = (lang) => readDepthWasm(lang);
62
+ function backendOf(lang) {
63
+ return forced ?? (NATIVE_ONLY.has(lang) ? "native" : "wasm");
64
+ }
65
+ const loaded = new Map();
66
+ /** Shared by every grammar and set per parse; null until the runtime is up, or
67
+ * after a grammar trapped mid-parse. */
68
+ let parser = null;
69
+ let newParser = null;
70
+ function message(err) {
71
+ return err instanceof Error ? err.message : String(err);
72
+ }
73
+ async function loadWasm(lang) {
74
+ try {
75
+ const runtime = await depthRuntime();
76
+ newParser = runtime.newParser;
77
+ return { ok: true, language: await runtime.load(readWasm(lang)) };
78
+ }
79
+ catch (err) {
80
+ return { ok: false, error: message(err) };
81
+ }
82
+ }
83
+ /** Load the grammars for `langs`. Await once before a synchronous parse loop.
84
+ * Never throws: a grammar that won't load leaves {@link depthReady} false. */
85
+ export async function warmDepthGrammars(langs) {
86
+ for (const lang of new Set(langs)) {
87
+ if (backendOf(lang) === "wasm" && !loaded.has(lang))
88
+ loaded.set(lang, await loadWasm(lang));
89
+ }
90
+ }
91
+ /** True when `lang`'s grammar is loaded and can parse. Never throws. */
92
+ export function depthReady(lang) {
93
+ return backendOf(lang) === "native" ? nativeReady(lang) : loaded.get(lang)?.ok === true;
94
+ }
95
+ /** node tree-sitter's string `parse()` fails with "Invalid argument" on any input
96
+ * ≥ 32 KB, which silently dropped large files, often the most important ones. The
97
+ * callback form has no such limit as long as each returned chunk is under 32 KB,
98
+ * so the source always goes in <32 KB slices, on either backend. Code-unit
99
+ * indexing matches `String.slice`. */
100
+ const PARSE_CHUNK = 16384;
101
+ /**
102
+ * Parse `source` as `lang` and hand the root to `use`. The tree lives only for the
103
+ * call: a WASM tree is freed when `use` returns, so nothing may keep a node.
104
+ * Throws when the grammar is unavailable: callers ask {@link depthReady} first and
105
+ * send the file to its breadth-tier stand-in instead.
106
+ */
107
+ export function parseDepth(lang, source, use) {
108
+ const input = (index) => source.slice(index, index + PARSE_CHUNK);
109
+ if (backendOf(lang) === "native")
110
+ return use(nativeParser(lang).parse(input).rootNode);
111
+ const grammar = loaded.get(lang);
112
+ if (!grammar?.ok) {
113
+ const why = grammar ? grammar.error : "not loaded (await warmDepthGrammars first)";
114
+ throw new Error(`the ${lang} parser is not available: ${why}`);
115
+ }
116
+ let tree;
117
+ try {
118
+ parser ??= newParser();
119
+ parser.setLanguage(grammar.language);
120
+ tree = parser.parse(input);
121
+ }
122
+ catch (err) {
123
+ // A trap inside the grammar can leave the parser mid-parse: the next file
124
+ // gets a fresh one.
125
+ parser = null;
126
+ throw new Error(`${lang} grammar threw: ${message(err)}`);
127
+ }
128
+ if (!tree)
129
+ throw new Error(`the ${lang} parser returned no tree`);
130
+ try {
131
+ return use(tree.rootNode);
132
+ }
133
+ finally {
134
+ tree.delete();
135
+ }
136
+ }
137
+ /** The npm packages whose missing binary keeps these languages off a native
138
+ * parser. Only a {@link NATIVE_ONLY} language can have one: a WASM grammar has no
139
+ * install script for `--allow-scripts` to run. */
140
+ export function missingDepthPackages(langs) {
141
+ return missingNativePackages([...langs].filter((l) => backendOf(l) === "native"));
142
+ }
143
+ /** Test seam: parse every depth language on `backend` (null restores the default
144
+ * per-language choice), and/or replace how a grammar's .wasm is read (a function
145
+ * that throws simulates a missing or corrupt file). Forgets every grammar loaded. */
146
+ export function setDepthParsersForTest(opts) {
147
+ if (opts.backend !== undefined)
148
+ forced = opts.backend;
149
+ if (opts.readWasm !== undefined)
150
+ readWasm = opts.readWasm ?? ((lang) => readDepthWasm(lang));
151
+ loaded.clear();
152
+ }
153
+ //# sourceMappingURL=depth-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"depth-parser.js","sourceRoot":"","sources":["../../src/graph/depth-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Tier-2 pass: attach the LLM meaning layer (`summary` + `crux`) to nodes.
3
+ *
4
+ * graph.json is its own cache — the committed file already holds every node's
5
+ * summary/crux from a prior run. So this pass is diff-driven:
6
+ *
7
+ * - cache hit — a prior node with the same id, same `body_hash`, and
8
+ * `summary_state:"ready"` → carry its summary/crux over, no LLM call.
9
+ * - stale — a prior ready summary whose body has since changed → keep the
10
+ * old text as a hint but mark it "stale". Recomputed only if an LLM is given.
11
+ * - pending — new or never-summarized node → one LLM call when an LLM is
12
+ * given, otherwise left "pending".
13
+ *
14
+ * Passing no summarizer runs the cache/stale bookkeeping alone (no calls, no
15
+ * cost) — which is what a plain `graph` build does, so it never wipes the
16
+ * meaning layer a previous `--llm` run produced.
17
+ *
18
+ * The LLM returns line numbers into the slice it was shown; we consume them here,
19
+ * once, to cut `crux.code` verbatim from the source. `crux.span` is a pointer
20
+ * only and is never used to re-slice.
21
+ */
22
+ import { type CruxSummarizer } from "../ai/crux.js";
23
+ import type { NodeV1 } from "./types.js";
24
+ export interface EnrichOptions {
25
+ /** When present, (re)compute meaning for stale/pending nodes. Absent → cache only. */
26
+ summarizer?: CruxSummarizer;
27
+ /** Max files summarized in parallel (each is one LLM call). Default {@link DEFAULT_CONCURRENCY}. */
28
+ concurrency?: number;
29
+ /** Progress is reported per file (one LLM call each), as files finish — not per node. */
30
+ onProgress?: (info: {
31
+ index: number;
32
+ total: number;
33
+ node: string;
34
+ }) => void;
35
+ /**
36
+ * Durability flush of the (partially) enriched graph, called from the per-file
37
+ * completion handler at most once every {@link CHECKPOINT_MS}. Without it, crux
38
+ * only reached wiring.json at build end, so an interrupted --deep run discarded
39
+ * every crux it had already computed and paid for (#128). Single-threaded, so it
40
+ * never interleaves with a node mutation.
41
+ */
42
+ checkpoint?: () => void;
43
+ }
44
+ export interface EnrichStats {
45
+ cached: number;
46
+ computed: number;
47
+ stale: number;
48
+ pending: number;
49
+ errors: string[];
50
+ /** Files whose LLM call failed outright. The count `errors` used to only imply —
51
+ * a caller has to be able to decide "this build is degraded" without parsing
52
+ * message strings (#127). */
53
+ failedFiles: number;
54
+ /** Files never attempted, because {@link EnrichStats.fatal} stopped the pass. */
55
+ skippedFiles: number;
56
+ /** Set when the pass gave up early: quota/auth rejection, or a run of
57
+ * provider failures. Content-quality misses (#235) count in `failedFiles` but
58
+ * do not set this. The reason is what `graft build --deep` exits non-zero with. */
59
+ fatal?: string;
60
+ }
61
+ export declare function enrichGraph(nodes: NodeV1[], prior: Map<string, NodeV1>, sources: Map<string, string>, opts?: EnrichOptions): Promise<EnrichStats>;
62
+ //# sourceMappingURL=enrich.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrich.d.ts","sourceRoot":"","sources":["../../src/graph/enrich.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAA2D,KAAK,cAAc,EAA+B,MAAM,eAAe,CAAC;AAE1I,OAAO,KAAK,EAAQ,MAAM,EAAE,MAAM,YAAY,CAAC;AAQ/C,MAAM,WAAW,aAAa;IAC5B,sFAAsF;IACtF,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,oGAAoG;IACpG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5E;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AASD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;iCAE6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB;;uFAEmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,WAAW,CAAC,CAgJtB"}