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,27 @@
1
+ import { WINHIDE } from "./util/child-process.js";
2
+ import { spawnSync } from "node:child_process";
3
+ import { homedir } from "node:os";
4
+ import { resolve } from "node:path";
5
+ /**
6
+ * Why `trail init` won't set up `dir`, or null when it will. Only the home
7
+ * folder is refused: run there, init wired it, mapped every code file under it
8
+ * and said to commit, though nobody shares learnings for a whole home folder.
9
+ */
10
+ export function homeFolderRefusal(dir, home = homedir()) {
11
+ if (resolve(dir) !== resolve(home))
12
+ return null;
13
+ return "✗ ~ is your home folder, not a repo.\n cd into the repo you want to set up, then run trail init again.";
14
+ }
15
+ /** Whether `dir` is inside a git work tree, so there is something to commit learnings to. */
16
+ export function isGitWorkTree(dir) {
17
+ const r = spawnSync("git", ["rev-parse", "--is-inside-work-tree"], { ...WINHIDE, cwd: dir, encoding: "utf8" });
18
+ return r.status === 0 && r.stdout.trim() === "true";
19
+ }
20
+ /**
21
+ * `init --pair` outside git: Trail's page shares a repo with the team, and a
22
+ * folder with none would be set up with nothing to share, so it is refused.
23
+ */
24
+ export const NOT_GIT_PAIR_REFUSAL = "✗ this folder isn't a git repo.\n Open your agent inside the repo you want Trail to learn, then run the setup prompt again.";
25
+ /** Said instead of the commit line when init ran outside git: there is nothing to commit to. */
26
+ export const NOT_GIT_LINE = "· this folder isn't a git repo, so its learnings stay on this machine. Run trail init inside a repo to share them with your team";
27
+ //# sourceMappingURL=init-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-guard.js","sourceRoot":"","sources":["../src/init-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,OAAe,OAAO,EAAE;IACrE,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,yGAAyG,CAAC;AACnH,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/G,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,8HAA8H,CAAC;AAEjI,gGAAgG;AAChG,MAAM,CAAC,MAAM,YAAY,GACvB,kIAAkI,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** The `select:` argument that loads every graft tool in one lookup. */
2
+ export declare function toolSearchQuery(prefix?: string): string;
3
+ /** Under trail, the same text with trail's tool names (see brand.ts `inBrand`). */
4
+ export declare function mcpInstructions(): string;
5
+ //# sourceMappingURL=instructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/mcp/instructions.ts"],"names":[],"mappings":"AAwCA,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,MAAM,SAAsB,GAAG,MAAM,CAEpE;AAED,mFAAmF;AACnF,wBAAgB,eAAe,IAAI,MAAM,CAmBxC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * The `instructions` string returned in graft's MCP `initialize` response.
3
+ *
4
+ * This is the one piece of graft prose that survives **tool deferral**. When a
5
+ * host has more tools than its schema budget allows, it sends tool *names* only
6
+ * and withholds the JSONSchemas until a `ToolSearch`-style lookup fetches them —
7
+ * measured in a real session: 111 tools deferred, of which graft's tools arrived
8
+ * as bare strings with no descriptions at all. The MCP spec's `instructions`
9
+ * field is delivered on a separate track (Claude Code records it as its own
10
+ * `mcp_instructions_delta` context layer), so it lands whole even then. Other
11
+ * servers already rely on this — `claude-in-chrome` uses it for exactly the
12
+ * batch-your-ToolSearch instruction below; graft used to send nothing.
13
+ *
14
+ * Two jobs, in this order:
15
+ * 1. Defuse the deferral tax. One lookup loads the whole tool set for the whole
16
+ * session, so the cost is a single round trip, not two calls per use. An
17
+ * agent that doesn't know this can only assume the worse reading.
18
+ * 2. Say what each tool is FOR as a decision rule, not a feature summary —
19
+ * because in a host with no hooks and no skill listing (a plain chat client
20
+ * with an MCP config), this string plus the tool descriptions are the entire
21
+ * steering budget graft gets.
22
+ *
23
+ * Budget: keep this under ~1,000 characters. Observed sibling servers sit at
24
+ * 660–984, and nothing proves a longer one survives un-truncated.
25
+ */
26
+ import { brand, inBrand } from '../brand.js';
27
+ /** Tool names in the order an agent should reach for them, most-used first. */
28
+ const TOOL_ORDER = [
29
+ 'graft_find_code',
30
+ 'graft_find_all',
31
+ 'graft_trace_calls',
32
+ 'graft_file_api',
33
+ 'graft_repo_map',
34
+ 'graft_search_semantic',
35
+ 'graft_check_freshness',
36
+ 'graft_set_scope',
37
+ 'graft_build',
38
+ ];
39
+ /** The `select:` argument that loads every graft tool in one lookup. */
40
+ export function toolSearchQuery(prefix = `mcp__${brand()}__`) {
41
+ return `select:${TOOL_ORDER.map((t) => `${prefix}${inBrand(t)}`).join(',')}`;
42
+ }
43
+ /** Under trail, the same text with trail's tool names (see brand.ts `inBrand`). */
44
+ export function mcpInstructions() {
45
+ return inBrand([
46
+ 'graft indexes this repo: every symbol, its file:line span and callers.',
47
+ 'Prefer these tools over grep/read.',
48
+ '',
49
+ `**Deferred (bare names, no schemas)? Load all in ONE lookup:** ToolSearch "${toolSearchQuery()}" — one round trip, not one call per use.`,
50
+ '',
51
+ '- graft_set_scope — set the session scope once',
52
+ '- graft_find_code — where/how is X; ranked hits',
53
+ '- graft_find_all — every occurrence',
54
+ '- graft_trace_calls — callers, callees, blast radius',
55
+ '- graft_file_api — a file\'s API, ~200 tokens',
56
+ '- graft_repo_map — orient in a new repo',
57
+ '- graft_search_semantic — natural-language search',
58
+ '- graft_check_freshness — is the index stale?',
59
+ '- graft_build — rebuild graph + embeddings, in background',
60
+ '',
61
+ 'Results include uncommitted edits — the graph refreshes before each query.',
62
+ ].join('\n'));
63
+ }
64
+ //# sourceMappingURL=instructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/mcp/instructions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE7C,+EAA+E;AAC/E,MAAM,UAAU,GAAG;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;IAChB,gBAAgB;IAChB,uBAAuB;IACvB,uBAAuB;IACvB,iBAAiB;IACjB,aAAa;CACL,CAAC;AAEX,wEAAwE;AACxE,MAAM,UAAU,eAAe,CAAC,MAAM,GAAG,QAAQ,KAAK,EAAE,IAAI;IAC1D,OAAO,UAAU,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,CAAC;QACb,wEAAwE;QACxE,oCAAoC;QACpC,EAAE;QACF,8EAA8E,eAAe,EAAE,2CAA2C;QAC1I,EAAE;QACF,gDAAgD;QAChD,iDAAiD;QACjD,qCAAqC;QACrC,sDAAsD;QACtD,+CAA+C;QAC/C,yCAAyC;QACzC,mDAAmD;QACnD,+CAA+C;QAC/C,2DAA2D;QAC3D,EAAE;QACF,4EAA4E;KAC7E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * A listing from the workspace (its tools, or its prompts) as the local MCP
3
+ * server serves it: the last good one is kept and answered at once, with a
4
+ * fresh one asked for behind it. Before there is one, a list waits until a
5
+ * deadline at most (one wait shared from boot); one that lands after an
6
+ * answer went out is announced (`list_changed`), so the client asks again
7
+ * and gets it from what was kept.
8
+ */
9
+ /** `p`, or `fallback` once `ms` have passed (or when `p` fails). */
10
+ export declare function within<T>(p: Promise<T>, ms: number, fallback: T): Promise<{
11
+ value: T;
12
+ late: boolean;
13
+ }>;
14
+ export declare class KeptListing<T> {
15
+ private readonly fetchList;
16
+ private readonly onChange;
17
+ private kept;
18
+ private asking;
19
+ /** Whether the client has had an answer, so a change is worth announcing. */
20
+ private answered;
21
+ constructor(fetchList: () => Promise<T[] | null>, onChange: () => void);
22
+ /** Ask the workspace again (one request at a time); keep and announce what's new. */
23
+ refresh(): Promise<T[] | null>;
24
+ /** What to answer now: the kept listing at once (refreshed behind it), else what arrives by `deadline`. */
25
+ get(deadline: number): Promise<T[]>;
26
+ }
27
+ //# sourceMappingURL=kept-listing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kept-listing.d.ts","sourceRoot":"","sources":["../../src/mcp/kept-listing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oEAAoE;AACpE,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAetG;AAED,qBAAa,WAAW,CAAC,CAAC;IAOtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAP3B,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,MAAM,CAAoC;IAClD,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAS;gBAGN,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EACpC,QAAQ,EAAE,MAAM,IAAI;IAGvC,qFAAqF;IACrF,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;IAmB9B,2GAA2G;IACrG,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CAU1C"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * A listing from the workspace (its tools, or its prompts) as the local MCP
3
+ * server serves it: the last good one is kept and answered at once, with a
4
+ * fresh one asked for behind it. Before there is one, a list waits until a
5
+ * deadline at most (one wait shared from boot); one that lands after an
6
+ * answer went out is announced (`list_changed`), so the client asks again
7
+ * and gets it from what was kept.
8
+ */
9
+ /** `p`, or `fallback` once `ms` have passed (or when `p` fails). */
10
+ export function within(p, ms, fallback) {
11
+ return new Promise((resolve) => {
12
+ const timer = setTimeout(() => resolve({ value: fallback, late: true }), Math.max(0, ms));
13
+ timer.unref();
14
+ p.then((value) => {
15
+ clearTimeout(timer);
16
+ resolve({ value, late: false });
17
+ }, () => {
18
+ clearTimeout(timer);
19
+ resolve({ value: fallback, late: false });
20
+ });
21
+ });
22
+ }
23
+ export class KeptListing {
24
+ fetchList;
25
+ onChange;
26
+ kept = null;
27
+ asking = null;
28
+ /** Whether the client has had an answer, so a change is worth announcing. */
29
+ answered = false;
30
+ constructor(fetchList, onChange) {
31
+ this.fetchList = fetchList;
32
+ this.onChange = onChange;
33
+ }
34
+ /** Ask the workspace again (one request at a time); keep and announce what's new. */
35
+ refresh() {
36
+ this.asking ??= this.fetchList().then((v) => {
37
+ this.asking = null;
38
+ if (v) {
39
+ const changed = JSON.stringify(v) !== JSON.stringify(this.kept);
40
+ this.kept = v;
41
+ if (changed && this.answered)
42
+ this.onChange();
43
+ }
44
+ return v;
45
+ }, () => {
46
+ this.asking = null;
47
+ return null;
48
+ });
49
+ return this.asking;
50
+ }
51
+ /** What to answer now: the kept listing at once (refreshed behind it), else what arrives by `deadline`. */
52
+ async get(deadline) {
53
+ if (this.kept) {
54
+ void this.refresh();
55
+ this.answered = true;
56
+ return this.kept;
57
+ }
58
+ const { value } = await within(this.refresh(), deadline - Date.now(), null);
59
+ this.answered = true;
60
+ return value ?? this.kept ?? [];
61
+ }
62
+ }
63
+ //# sourceMappingURL=kept-listing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kept-listing.js","sourceRoot":"","sources":["../../src/mcp/kept-listing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oEAAoE;AACpE,MAAM,UAAU,MAAM,CAAI,CAAa,EAAE,EAAU,EAAE,QAAW;IAC9D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1F,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,CAAC,CAAC,IAAI,CACJ,CAAC,KAAK,EAAE,EAAE;YACR,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAClC,CAAC,EACD,GAAG,EAAE;YACH,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,WAAW;IAOH;IACA;IAPX,IAAI,GAAe,IAAI,CAAC;IACxB,MAAM,GAA+B,IAAI,CAAC;IAClD,6EAA6E;IACrE,QAAQ,GAAG,KAAK,CAAC;IAEzB,YACmB,SAAoC,EACpC,QAAoB;QADpB,cAAS,GAAT,SAAS,CAA2B;QACpC,aAAQ,GAAR,QAAQ,CAAY;IACpC,CAAC;IAEJ,qFAAqF;IACrF,OAAO;QACL,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE;YACJ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,EAAE,CAAC;gBACN,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;gBACd,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChD,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC,EACD,GAAG,EAAE;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC,CACF,CAAC;QACF,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,2GAA2G;IAC3G,KAAK,CAAC,GAAG,CAAC,QAAgB;QACxB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export declare function startMcpServer(root: string, dirOverride?: string, version?: string, opts?: {
2
+ brainsOnly?: boolean;
3
+ }): void;
4
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AA2CA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,SAAM,EAAE,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAkF3H"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Minimal MCP stdio server: newline-delimited JSON-RPC 2.0.
3
+ * stdout carries protocol messages ONLY; diagnostics go to stderr.
4
+ * Cloud/workspace connector removed (trail-solo-grafo change).
5
+ */
6
+ import { createInterface } from 'node:readline';
7
+ import { fileURLToPath } from 'node:url';
8
+ import { TOOLS, callTool } from './tools.js';
9
+ import { mcpInstructions } from './instructions.js';
10
+ import { hasGraftIndex } from '../graph/root.js';
11
+ import { mainWorktreeRoot } from '../graph/seed.js';
12
+ import { runUpkeep } from '../upkeep-run.js';
13
+ import { runningVersion } from '../upkeep.js';
14
+ import { maybeFlushInBackground, track } from '../telemetry/index.js';
15
+ import { brand, inBrand } from '../brand.js';
16
+ import { canonicalToolName, GRAFT_MCP_TOOL_NAMES } from './tool-names.js';
17
+ const TOOL_COMMAND = {
18
+ graft_find_code: 'ask',
19
+ graft_find_all: 'grep',
20
+ graft_trace_calls: 'callers',
21
+ graft_file_api: 'skeleton',
22
+ graft_repo_map: 'map',
23
+ graft_check_freshness: 'check',
24
+ };
25
+ function isRepoTool(name) {
26
+ return GRAFT_MCP_TOOL_NAMES.has(name.toLowerCase()) || GRAFT_MCP_TOOL_NAMES.has(canonicalToolName(name).toLowerCase());
27
+ }
28
+ function send(msg) {
29
+ process.stdout.write(`${JSON.stringify(msg)}\n`);
30
+ }
31
+ function reply(id, result) { send({ jsonrpc: '2.0', id, result }); }
32
+ function replyError(id, code, message) { send({ jsonrpc: '2.0', id, error: { code, message } }); }
33
+ function advertised(root, dirOverride) {
34
+ if (dirOverride !== undefined)
35
+ return TOOLS;
36
+ if (hasGraftIndex(root))
37
+ return TOOLS;
38
+ const main = mainWorktreeRoot(root);
39
+ return main && hasGraftIndex(main) ? TOOLS : [];
40
+ }
41
+ export function startMcpServer(root, dirOverride, version = '0', opts = {}) {
42
+ const brainsOnly = opts.brainsOnly === true;
43
+ const upkeep = brainsOnly ? [] : runUpkeep(root, runningVersion()).lines;
44
+ for (const line of upkeep)
45
+ console.error(line);
46
+ if (!brainsOnly)
47
+ maybeFlushInBackground();
48
+ const repoTools = () => (brainsOnly ? [] : advertised(root, dirOverride)).map((t) => ({ name: inBrand(t.name), description: inBrand(t.description), inputSchema: t.inputSchema }));
49
+ const rl = createInterface({ input: process.stdin, crlfDelay: Infinity });
50
+ let clientRoot = null;
51
+ rl.on('line', (line) => {
52
+ const text = line.trim();
53
+ if (!text)
54
+ return;
55
+ let msg;
56
+ try {
57
+ msg = JSON.parse(text);
58
+ }
59
+ catch {
60
+ replyError(null, -32700, 'parse error');
61
+ return;
62
+ }
63
+ const { id, method, params } = msg;
64
+ const isNotification = id === undefined;
65
+ switch (method) {
66
+ case 'initialize': {
67
+ const roots = params?.roots;
68
+ if (roots?.[0]?.uri) {
69
+ try {
70
+ clientRoot = fileURLToPath(roots[0].uri);
71
+ process.stderr.write(`[trail-scope] clientRoot from roots: ${clientRoot}\n`);
72
+ }
73
+ catch { /* non-file URI */ }
74
+ }
75
+ const local = [upkeep.length ? upkeep.join('\n') : '', brainsOnly ? '' : mcpInstructions()];
76
+ reply(id, { protocolVersion: params?.protocolVersion ?? '2024-11-05', capabilities: { tools: {} }, serverInfo: { name: brand(), version }, instructions: local.filter(Boolean).join('\n\n') });
77
+ return;
78
+ }
79
+ case 'notifications/initialized':
80
+ case 'notifications/cancelled':
81
+ return;
82
+ case 'ping':
83
+ if (!isNotification)
84
+ reply(id, {});
85
+ return;
86
+ case 'tools/list':
87
+ if (isNotification)
88
+ return;
89
+ reply(id, { tools: repoTools() });
90
+ return;
91
+ case 'prompts/list':
92
+ if (isNotification)
93
+ return;
94
+ reply(id, { prompts: [] });
95
+ return;
96
+ case 'prompts/get':
97
+ if (isNotification)
98
+ return;
99
+ replyError(id, -32601, 'no prompts available');
100
+ return;
101
+ case 'tools/call': {
102
+ if (isNotification)
103
+ return;
104
+ const name = String(params?.name ?? '');
105
+ const args = (params?.arguments ?? {});
106
+ if (brainsOnly && !isRepoTool(name)) {
107
+ reply(id, { content: [{ type: 'text', text: `this server answers local graph tools only; ${name} isn't one` }], isError: true });
108
+ return;
109
+ }
110
+ if (canonicalToolName(name) === 'trail_set_scope') {
111
+ const p = String(args['path'] ?? '').replace(/\\/g, '/').replace(/\/$/, '');
112
+ const srv = root.replace(/\\/g, '/').replace(/\/$/, '');
113
+ if (p.startsWith(srv + '/')) {
114
+ clientRoot = String(args['path'] ?? '');
115
+ reply(id, { content: [{ type: 'text', text: `scope set to: ${p.slice(srv.length + 1)} — all queries will narrow to this path automatically` }], isError: false });
116
+ }
117
+ else {
118
+ reply(id, { content: [{ type: 'text', text: `path "${p}" is not under the server workspace "${srv}" — scope unchanged` }], isError: true });
119
+ }
120
+ return;
121
+ }
122
+ const argsWithScope = injectClientScope(args, root, clientRoot);
123
+ callTool(root, name, argsWithScope, dirOverride).then((r) => {
124
+ const canonical = canonicalToolName(name);
125
+ const command = Object.hasOwn(TOOL_COMMAND, canonical) ? TOOL_COMMAND[canonical] : undefined;
126
+ track('query', { command, surface: 'mcp' }, { repo: root, host: 'mcp' });
127
+ reply(id, { content: [{ type: 'text', text: r.text }], isError: r.isError });
128
+ }, (err) => replyError(id, -32603, err instanceof Error ? err.message : String(err)));
129
+ return;
130
+ }
131
+ default:
132
+ if (!isNotification)
133
+ replyError(id, -32601, `method not found: ${method}`);
134
+ }
135
+ });
136
+ process.stdin.on('end', () => process.exit(0));
137
+ }
138
+ function injectClientScope(args, serverRoot, clientRoot) {
139
+ if (args['in'] != null || !clientRoot)
140
+ return args;
141
+ const server = serverRoot.replace(/\\/g, '/').replace(/\/$/, '');
142
+ const client = clientRoot.replace(/\\/g, '/').replace(/\/$/, '');
143
+ if (!client.startsWith(server + '/') || client === server)
144
+ return args;
145
+ return { ...args, in: client.slice(server.length + 1) };
146
+ }
147
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The graft MCP tool names, kept in a zero-import module so both the MCP server
3
+ * (which also pulls in the whole engine) and the session-scoring hooks (which must
4
+ * stay cheap and engine-free) can share one list. Adding a dependency here would
5
+ * drag it into every hook invocation, so this file imports nothing.
6
+ */
7
+ /** The tools graft advertises today, as their canonical names. */
8
+ export declare const GRAFT_MCP_TOOL_CANONICAL: readonly ["graft_find_code", "graft_find_all", "graft_trace_calls", "graft_file_api", "graft_repo_map", "graft_check_freshness", "graft_search_semantic", "graft_build", "graft_set_scope"];
9
+ /**
10
+ * The pre-0.8.1 tool names, still accepted. A name is an API: skills, saved
11
+ * prompts and other people's notes reference the old ones, so they map to the
12
+ * canonical name rather than 404.
13
+ */
14
+ export declare const GRAFT_MCP_TOOL_ALIASES: Record<string, string>;
15
+ /**
16
+ * The same tools under trail's name: `trail_find_code` is `graft_find_code`.
17
+ * Started as `trail mcp`, the server advertises these; it answers both sets
18
+ * either way, so a config, prompt or note written against one name keeps
19
+ * working when the server goes by the other.
20
+ */
21
+ export declare const TRAIL_MCP_TOOL_CANONICAL: string[];
22
+ /** Every name graft answers to (canonical, legacy and trail's), lower-cased, for a
23
+ * membership test that anchors on the real vocabulary instead of a loose `includes('graft')`. */
24
+ export declare const GRAFT_MCP_TOOL_NAMES: ReadonlySet<string>;
25
+ /** Canonical name for a requested tool: itself, its graft name, or what it was renamed to. */
26
+ export declare function canonicalToolName(name: string): string;
27
+ //# sourceMappingURL=tool-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-names.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-names.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kEAAkE;AAClE,eAAO,MAAM,wBAAwB,6LAU3B,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOzD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,UAAsE,CAAC;AAE5G;kGACkG;AAClG,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAEpD,CAAC;AAEF,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtD"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * The graft MCP tool names, kept in a zero-import module so both the MCP server
3
+ * (which also pulls in the whole engine) and the session-scoring hooks (which must
4
+ * stay cheap and engine-free) can share one list. Adding a dependency here would
5
+ * drag it into every hook invocation, so this file imports nothing.
6
+ */
7
+ /** The tools graft advertises today, as their canonical names. */
8
+ export const GRAFT_MCP_TOOL_CANONICAL = [
9
+ 'graft_find_code',
10
+ 'graft_find_all',
11
+ 'graft_trace_calls',
12
+ 'graft_file_api',
13
+ 'graft_repo_map',
14
+ 'graft_check_freshness',
15
+ 'graft_search_semantic',
16
+ 'graft_build',
17
+ 'graft_set_scope',
18
+ ];
19
+ /**
20
+ * The pre-0.8.1 tool names, still accepted. A name is an API: skills, saved
21
+ * prompts and other people's notes reference the old ones, so they map to the
22
+ * canonical name rather than 404.
23
+ */
24
+ export const GRAFT_MCP_TOOL_ALIASES = {
25
+ graft_ask: 'graft_find_code',
26
+ graft_grep: 'graft_find_all',
27
+ graft_callers: 'graft_trace_calls',
28
+ graft_skeleton: 'graft_file_api',
29
+ graft_map: 'graft_repo_map',
30
+ graft_check: 'graft_check_freshness',
31
+ };
32
+ /**
33
+ * The same tools under trail's name: `trail_find_code` is `graft_find_code`.
34
+ * Started as `trail mcp`, the server advertises these; it answers both sets
35
+ * either way, so a config, prompt or note written against one name keeps
36
+ * working when the server goes by the other.
37
+ */
38
+ export const TRAIL_MCP_TOOL_CANONICAL = GRAFT_MCP_TOOL_CANONICAL.map((n) => n.replace(/^graft_/, 'trail_'));
39
+ /** Every name graft answers to (canonical, legacy and trail's), lower-cased, for a
40
+ * membership test that anchors on the real vocabulary instead of a loose `includes('graft')`. */
41
+ export const GRAFT_MCP_TOOL_NAMES = new Set([...GRAFT_MCP_TOOL_CANONICAL, ...Object.keys(GRAFT_MCP_TOOL_ALIASES), ...TRAIL_MCP_TOOL_CANONICAL].map((n) => n.toLowerCase()));
42
+ /** Canonical name for a requested tool: itself, its graft name, or what it was renamed to. */
43
+ export function canonicalToolName(name) {
44
+ const graftName = name.startsWith('trail_') ? `graft_${name.slice('trail_'.length)}` : name;
45
+ return GRAFT_MCP_TOOL_ALIASES[graftName] ?? graftName;
46
+ }
47
+ //# sourceMappingURL=tool-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-names.js","sourceRoot":"","sources":["../../src/mcp/tool-names.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kEAAkE;AAClE,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,iBAAiB;IACjB,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;IAChB,gBAAgB;IAChB,uBAAuB;IACvB,uBAAuB;IACvB,aAAa;IACb,iBAAiB;CACT,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA2B;IAC5D,SAAS,EAAE,iBAAiB;IAC5B,UAAU,EAAE,gBAAgB;IAC5B,aAAa,EAAE,mBAAmB;IAClC,cAAc,EAAE,gBAAgB;IAChC,SAAS,EAAE,gBAAgB;IAC3B,WAAW,EAAE,uBAAuB;CACrC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE5G;kGACkG;AAClG,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAC9D,CAAC,GAAG,wBAAwB,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,GAAG,wBAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAC/H,CAAC;AAEF,8FAA8F;AAC9F,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5F,OAAO,sBAAsB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;AACxD,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { canonicalToolName } from './tool-names.js';
2
+ export interface ToolDef {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: object;
6
+ }
7
+ export declare const TOOLS: ToolDef[];
8
+ /**
9
+ * The pre-0.8.1 tool names, still accepted, live in the dependency-free
10
+ * `tool-names.ts` (shared with the engine-free session hooks). The names were the
11
+ * reason for renaming: when a host defers graft's schemas it shows the model the
12
+ * *names alone* — no descriptions — so `graft_ask` had to compete with `Grep` on
13
+ * 9 characters. The new names say what they do; the aliases keep old callers
14
+ * (skills, saved prompts, notes) from 404-ing. Re-exported here so existing
15
+ * importers of `canonicalToolName` from this module keep working.
16
+ */
17
+ export { canonicalToolName };
18
+ export declare function callTool(root: string, requestedName: string, args: Record<string, unknown>, dirOverride?: string): Promise<{
19
+ text: string;
20
+ isError: boolean;
21
+ }>;
22
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD,eAAO,MAAM,KAAK,EAAE,OAAO,EAuH1B,CAAC;AAsFF;;;;;;;;GAQG;AACH,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAuB7C"}