trellis 2.1.7 → 3.0.2

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 (346) hide show
  1. package/README.md +65 -706
  2. package/dist/cli/index.d.ts +16 -0
  3. package/dist/cli/index.d.ts.map +1 -0
  4. package/dist/cli/index.js +3188 -232
  5. package/dist/client/config.d.ts +56 -0
  6. package/dist/client/config.d.ts.map +1 -0
  7. package/dist/client/index.d.ts +15 -0
  8. package/dist/client/index.d.ts.map +1 -0
  9. package/dist/client/index.js +32 -0
  10. package/dist/client/sdk.d.ts +152 -0
  11. package/dist/client/sdk.d.ts.map +1 -0
  12. package/dist/config-8hczw0rs.js +20 -0
  13. package/dist/context/heat-map-manager.d.ts +100 -0
  14. package/dist/context/heat-map-manager.d.ts.map +1 -0
  15. package/dist/context/manager.d.ts +16 -0
  16. package/dist/context/manager.d.ts.map +1 -0
  17. package/dist/context/types.d.ts +20 -0
  18. package/dist/context/types.d.ts.map +1 -0
  19. package/dist/core/agents/harness.d.ts +58 -0
  20. package/dist/core/agents/harness.d.ts.map +1 -0
  21. package/dist/core/agents/index.d.ts +8 -0
  22. package/dist/core/agents/index.d.ts.map +1 -0
  23. package/dist/core/agents/types.d.ts +79 -0
  24. package/dist/core/agents/types.d.ts.map +1 -0
  25. package/dist/core/computation/expr-evaluator.d.ts +52 -0
  26. package/dist/core/computation/expr-evaluator.d.ts.map +1 -0
  27. package/dist/core/index.d.ts +25 -0
  28. package/dist/core/index.d.ts.map +1 -0
  29. package/dist/core/index.js +105 -11
  30. package/dist/core/kernel/logic-middleware.d.ts +19 -0
  31. package/dist/core/kernel/logic-middleware.d.ts.map +1 -0
  32. package/dist/core/kernel/middleware.d.ts +28 -0
  33. package/dist/core/kernel/middleware.d.ts.map +1 -0
  34. package/dist/core/kernel/schema-middleware.d.ts +15 -0
  35. package/dist/core/kernel/schema-middleware.d.ts.map +1 -0
  36. package/dist/core/kernel/security-middleware.d.ts +24 -0
  37. package/dist/core/kernel/security-middleware.d.ts.map +1 -0
  38. package/dist/core/kernel/sync-provider.d.ts +59 -0
  39. package/dist/core/kernel/sync-provider.d.ts.map +1 -0
  40. package/dist/core/kernel/trellis-kernel.d.ts +217 -0
  41. package/dist/core/kernel/trellis-kernel.d.ts.map +1 -0
  42. package/dist/core/ontology/builtins.d.ts +16 -0
  43. package/dist/core/ontology/builtins.d.ts.map +1 -0
  44. package/dist/core/ontology/core-ontology.d.ts +20 -0
  45. package/dist/core/ontology/core-ontology.d.ts.map +1 -0
  46. package/dist/core/ontology/index.d.ts +12 -0
  47. package/dist/core/ontology/index.d.ts.map +1 -0
  48. package/dist/core/ontology/registry.d.ts +70 -0
  49. package/dist/core/ontology/registry.d.ts.map +1 -0
  50. package/dist/core/ontology/types.d.ts +201 -0
  51. package/dist/core/ontology/types.d.ts.map +1 -0
  52. package/dist/core/ontology/validator.d.ts +34 -0
  53. package/dist/core/ontology/validator.d.ts.map +1 -0
  54. package/dist/core/persist/backend.d.ts +62 -0
  55. package/dist/core/persist/backend.d.ts.map +1 -0
  56. package/dist/core/persist/better-sqlite-backend.d.ts +33 -0
  57. package/dist/core/persist/better-sqlite-backend.d.ts.map +1 -0
  58. package/dist/core/persist/sqlite-backend.d.ts +43 -0
  59. package/dist/core/persist/sqlite-backend.d.ts.map +1 -0
  60. package/dist/core/plugins/index.d.ts +8 -0
  61. package/dist/core/plugins/index.d.ts.map +1 -0
  62. package/dist/core/plugins/registry.d.ts +69 -0
  63. package/dist/core/plugins/registry.d.ts.map +1 -0
  64. package/dist/core/plugins/types.d.ts +87 -0
  65. package/dist/core/plugins/types.d.ts.map +1 -0
  66. package/dist/core/query/datalog.d.ts +52 -0
  67. package/dist/core/query/datalog.d.ts.map +1 -0
  68. package/dist/core/query/engine.d.ts +42 -0
  69. package/dist/core/query/engine.d.ts.map +1 -0
  70. package/dist/core/query/index.d.ts +12 -0
  71. package/dist/core/query/index.d.ts.map +1 -0
  72. package/dist/core/query/parser.d.ts +37 -0
  73. package/dist/core/query/parser.d.ts.map +1 -0
  74. package/dist/core/query/types.d.ts +135 -0
  75. package/dist/core/query/types.d.ts.map +1 -0
  76. package/dist/core/store/eav-store.d.ts +111 -0
  77. package/dist/core/store/eav-store.d.ts.map +1 -0
  78. package/dist/db/index.d.ts +18 -0
  79. package/dist/db/index.d.ts.map +1 -0
  80. package/dist/db/index.js +85 -0
  81. package/dist/db/inspector.js +28 -0
  82. package/dist/db/trellis.css +1 -0
  83. package/dist/decisions/auto-capture.d.ts +31 -0
  84. package/dist/decisions/auto-capture.d.ts.map +1 -0
  85. package/dist/decisions/hooks.d.ts +48 -0
  86. package/dist/decisions/hooks.d.ts.map +1 -0
  87. package/dist/decisions/index.d.ts +36 -0
  88. package/dist/decisions/index.d.ts.map +1 -0
  89. package/dist/decisions/types.d.ts +73 -0
  90. package/dist/decisions/types.d.ts.map +1 -0
  91. package/dist/deploy-999q207z.js +10 -0
  92. package/dist/embeddings/auto-embed.d.ts +52 -0
  93. package/dist/embeddings/auto-embed.d.ts.map +1 -0
  94. package/dist/embeddings/chunker.d.ts +73 -0
  95. package/dist/embeddings/chunker.d.ts.map +1 -0
  96. package/dist/embeddings/index.d.ts +18 -0
  97. package/dist/embeddings/index.d.ts.map +1 -0
  98. package/dist/embeddings/model.d.ts +30 -0
  99. package/dist/embeddings/model.d.ts.map +1 -0
  100. package/dist/embeddings/search.d.ts +87 -0
  101. package/dist/embeddings/search.d.ts.map +1 -0
  102. package/dist/embeddings/store.d.ts +66 -0
  103. package/dist/embeddings/store.d.ts.map +1 -0
  104. package/dist/embeddings/types.d.ts +54 -0
  105. package/dist/embeddings/types.d.ts.map +1 -0
  106. package/dist/engine-y0724kjq.js +8 -0
  107. package/dist/engine.d.ts +218 -0
  108. package/dist/engine.d.ts.map +1 -0
  109. package/dist/evals/types.d.ts +29 -0
  110. package/dist/evals/types.d.ts.map +1 -0
  111. package/dist/garden/cluster.d.ts +57 -0
  112. package/dist/garden/cluster.d.ts.map +1 -0
  113. package/dist/garden/garden.d.ts +104 -0
  114. package/dist/garden/garden.d.ts.map +1 -0
  115. package/dist/garden/index.d.ts +15 -0
  116. package/dist/garden/index.d.ts.map +1 -0
  117. package/dist/git/git-exporter.d.ts +37 -0
  118. package/dist/git/git-exporter.d.ts.map +1 -0
  119. package/dist/git/git-importer.d.ts +36 -0
  120. package/dist/git/git-importer.d.ts.map +1 -0
  121. package/dist/git/git-reader.d.ts +63 -0
  122. package/dist/git/git-reader.d.ts.map +1 -0
  123. package/dist/git/index.d.ts +10 -0
  124. package/dist/git/index.d.ts.map +1 -0
  125. package/dist/identity/governance.d.ts +54 -0
  126. package/dist/identity/governance.d.ts.map +1 -0
  127. package/dist/identity/identity.d.ts +63 -0
  128. package/dist/identity/identity.d.ts.map +1 -0
  129. package/dist/identity/index.d.ts +10 -0
  130. package/dist/identity/index.d.ts.map +1 -0
  131. package/dist/identity/signing-middleware.d.ts +38 -0
  132. package/dist/identity/signing-middleware.d.ts.map +1 -0
  133. package/dist/import-s2b8e0ft.js +11 -0
  134. package/dist/{index-3ejh8k6v.js → index-0q7wbasy.js} +18 -4
  135. package/dist/index-0zk3fx2s.js +1004 -0
  136. package/dist/index-2r4jxwnb.js +32 -0
  137. package/dist/index-6n5dcebj.js +847 -0
  138. package/dist/index-7e27kvvj.js +292 -0
  139. package/dist/index-bmyt7k8n.js +90 -0
  140. package/dist/index-c9h37r6h.js +1 -0
  141. package/dist/{index-k5kf7sd0.js → index-hmdbnd4n.js} +1 -1
  142. package/dist/index-k5b0xskw.js +1 -0
  143. package/dist/index-n9f2qyh5.js +495 -0
  144. package/dist/{index-22jx9qsz.js → index-q31hfjja.js} +861 -51
  145. package/dist/index-skhn0agf.js +155 -0
  146. package/dist/{index-5m0g9r0y.js → index-w7ng765c.js} +4 -497
  147. package/dist/index-wt8rz4gn.js +132 -0
  148. package/dist/index-xzym9w0m.js +43 -0
  149. package/dist/index-y3d71wzd.js +77 -0
  150. package/dist/index-y6a4kj0p.js +43 -0
  151. package/dist/index-yhwjgfvj.js +342 -0
  152. package/dist/index-yp88he8n.js +316 -0
  153. package/dist/index.d.ts +25 -0
  154. package/dist/index.d.ts.map +1 -0
  155. package/dist/index.js +21 -9
  156. package/dist/links/index.d.ts +16 -0
  157. package/dist/links/index.d.ts.map +1 -0
  158. package/dist/links/lifecycle.d.ts +112 -0
  159. package/dist/links/lifecycle.d.ts.map +1 -0
  160. package/dist/links/parser.d.ts +56 -0
  161. package/dist/links/parser.d.ts.map +1 -0
  162. package/dist/links/ref-index.d.ts +55 -0
  163. package/dist/links/ref-index.d.ts.map +1 -0
  164. package/dist/links/resolver.d.ts +90 -0
  165. package/dist/links/resolver.d.ts.map +1 -0
  166. package/dist/links/types.d.ts +70 -0
  167. package/dist/links/types.d.ts.map +1 -0
  168. package/dist/llm/provider.d.ts +11 -0
  169. package/dist/llm/provider.d.ts.map +1 -0
  170. package/dist/llm/types.d.ts +74 -0
  171. package/dist/llm/types.d.ts.map +1 -0
  172. package/dist/mcp/docs.d.ts +18 -0
  173. package/dist/mcp/docs.d.ts.map +1 -0
  174. package/dist/mcp/index.d.ts +15 -0
  175. package/dist/mcp/index.d.ts.map +1 -0
  176. package/dist/mcp/server.d.ts +26 -0
  177. package/dist/mcp/server.d.ts.map +1 -0
  178. package/dist/orchestration/types.d.ts +22 -0
  179. package/dist/orchestration/types.d.ts.map +1 -0
  180. package/dist/plugins/agent-memory/graph-context-manager.d.ts +75 -0
  181. package/dist/plugins/agent-memory/graph-context-manager.d.ts.map +1 -0
  182. package/dist/plugins/agent-memory/index.d.ts +30 -0
  183. package/dist/plugins/agent-memory/index.d.ts.map +1 -0
  184. package/dist/plugins/agent-memory/ontology.d.ts +13 -0
  185. package/dist/plugins/agent-memory/ontology.d.ts.map +1 -0
  186. package/dist/plugins/agent-memory/plugin.d.ts +17 -0
  187. package/dist/plugins/agent-memory/plugin.d.ts.map +1 -0
  188. package/dist/plugins/brand/cache.d.ts +18 -0
  189. package/dist/plugins/brand/cache.d.ts.map +1 -0
  190. package/dist/plugins/brand/catalog-generator.d.ts +89 -0
  191. package/dist/plugins/brand/catalog-generator.d.ts.map +1 -0
  192. package/dist/plugins/brand/constraints.d.ts +55 -0
  193. package/dist/plugins/brand/constraints.d.ts.map +1 -0
  194. package/dist/plugins/brand/index.d.ts +44 -0
  195. package/dist/plugins/brand/index.d.ts.map +1 -0
  196. package/dist/plugins/brand/mcp-tools.d.ts +101 -0
  197. package/dist/plugins/brand/mcp-tools.d.ts.map +1 -0
  198. package/dist/plugins/brand/ontology.d.ts +13 -0
  199. package/dist/plugins/brand/ontology.d.ts.map +1 -0
  200. package/dist/plugins/brand/plugin.d.ts +21 -0
  201. package/dist/plugins/brand/plugin.d.ts.map +1 -0
  202. package/dist/plugins/brand/voice-tone.d.ts +24 -0
  203. package/dist/plugins/brand/voice-tone.d.ts.map +1 -0
  204. package/dist/plugins/idea-garden/api.d.ts +26 -0
  205. package/dist/plugins/idea-garden/api.d.ts.map +1 -0
  206. package/dist/plugins/idea-garden/index.d.ts +12 -0
  207. package/dist/plugins/idea-garden/index.d.ts.map +1 -0
  208. package/dist/plugins/idea-garden/plugin.d.ts +16 -0
  209. package/dist/plugins/idea-garden/plugin.d.ts.map +1 -0
  210. package/dist/plugins/idea-garden/types.d.ts +22 -0
  211. package/dist/plugins/idea-garden/types.d.ts.map +1 -0
  212. package/dist/plugins/plan-approval/index.d.ts +36 -0
  213. package/dist/plugins/plan-approval/index.d.ts.map +1 -0
  214. package/dist/plugins/plan-approval/ontology.d.ts +11 -0
  215. package/dist/plugins/plan-approval/ontology.d.ts.map +1 -0
  216. package/dist/plugins/plan-approval/plan-manager.d.ts +104 -0
  217. package/dist/plugins/plan-approval/plan-manager.d.ts.map +1 -0
  218. package/dist/plugins/plan-approval/plugin.d.ts +110 -0
  219. package/dist/plugins/plan-approval/plugin.d.ts.map +1 -0
  220. package/dist/plugins/proactive-watcher/index.d.ts +28 -0
  221. package/dist/plugins/proactive-watcher/index.d.ts.map +1 -0
  222. package/dist/plugins/proactive-watcher/ontology.d.ts +8 -0
  223. package/dist/plugins/proactive-watcher/ontology.d.ts.map +1 -0
  224. package/dist/plugins/proactive-watcher/plugin.d.ts +20 -0
  225. package/dist/plugins/proactive-watcher/plugin.d.ts.map +1 -0
  226. package/dist/plugins/proactive-watcher/watcher-manager.d.ts +36 -0
  227. package/dist/plugins/proactive-watcher/watcher-manager.d.ts.map +1 -0
  228. package/dist/plugins/sprite-tools/checkpoint-middleware.d.ts +43 -0
  229. package/dist/plugins/sprite-tools/checkpoint-middleware.d.ts.map +1 -0
  230. package/dist/plugins/sprite-tools/index.d.ts +40 -0
  231. package/dist/plugins/sprite-tools/index.d.ts.map +1 -0
  232. package/dist/plugins/sprite-tools/plugin.d.ts +69 -0
  233. package/dist/plugins/sprite-tools/plugin.d.ts.map +1 -0
  234. package/dist/react/index.js +189 -0
  235. package/dist/scaffold/index.d.ts +13 -0
  236. package/dist/scaffold/index.d.ts.map +1 -0
  237. package/dist/scaffold/infer.d.ts +42 -0
  238. package/dist/scaffold/infer.d.ts.map +1 -0
  239. package/dist/scaffold/profile.d.ts +51 -0
  240. package/dist/scaffold/profile.d.ts.map +1 -0
  241. package/dist/scaffold/seed.d.ts +27 -0
  242. package/dist/scaffold/seed.d.ts.map +1 -0
  243. package/dist/scaffold/write.d.ts +53 -0
  244. package/dist/scaffold/write.d.ts.map +1 -0
  245. package/dist/sdk-snn5gad3.js +15 -0
  246. package/dist/semantic/csharp-parser.d.ts +12 -0
  247. package/dist/semantic/csharp-parser.d.ts.map +1 -0
  248. package/dist/semantic/go-parser.d.ts +12 -0
  249. package/dist/semantic/go-parser.d.ts.map +1 -0
  250. package/dist/semantic/index.d.ts +22 -0
  251. package/dist/semantic/index.d.ts.map +1 -0
  252. package/dist/semantic/java-parser.d.ts +12 -0
  253. package/dist/semantic/java-parser.d.ts.map +1 -0
  254. package/dist/semantic/python-parser.d.ts +12 -0
  255. package/dist/semantic/python-parser.d.ts.map +1 -0
  256. package/dist/semantic/ruby-parser.d.ts +12 -0
  257. package/dist/semantic/ruby-parser.d.ts.map +1 -0
  258. package/dist/semantic/rust-parser.d.ts +12 -0
  259. package/dist/semantic/rust-parser.d.ts.map +1 -0
  260. package/dist/semantic/semantic-merge.d.ts +20 -0
  261. package/dist/semantic/semantic-merge.d.ts.map +1 -0
  262. package/dist/semantic/ts-parser.d.ts +13 -0
  263. package/dist/semantic/ts-parser.d.ts.map +1 -0
  264. package/dist/semantic/types.d.ts +130 -0
  265. package/dist/semantic/types.d.ts.map +1 -0
  266. package/dist/server/auth.d.ts +72 -0
  267. package/dist/server/auth.d.ts.map +1 -0
  268. package/dist/server/deploy.d.ts +44 -0
  269. package/dist/server/deploy.d.ts.map +1 -0
  270. package/dist/server/import.d.ts +40 -0
  271. package/dist/server/import.d.ts.map +1 -0
  272. package/dist/server/index.d.ts +26 -0
  273. package/dist/server/index.d.ts.map +1 -0
  274. package/dist/server/index.js +90 -0
  275. package/dist/server/permissions.d.ts +84 -0
  276. package/dist/server/permissions.d.ts.map +1 -0
  277. package/dist/server/realtime.d.ts +78 -0
  278. package/dist/server/realtime.d.ts.map +1 -0
  279. package/dist/server/server.d.ts +43 -0
  280. package/dist/server/server.d.ts.map +1 -0
  281. package/dist/server/sprites.d.ts +26 -0
  282. package/dist/server/sprites.d.ts.map +1 -0
  283. package/dist/server/tenancy.d.ts +53 -0
  284. package/dist/server/tenancy.d.ts.map +1 -0
  285. package/dist/server/vm-config.d.ts +60 -0
  286. package/dist/server/vm-config.d.ts.map +1 -0
  287. package/dist/server-mrctdwzr.js +11 -0
  288. package/dist/sprites-vc4qbrp1.js +16 -0
  289. package/dist/streaming/types.d.ts +43 -0
  290. package/dist/streaming/types.d.ts.map +1 -0
  291. package/dist/sync/http-transport.d.ts +47 -0
  292. package/dist/sync/http-transport.d.ts.map +1 -0
  293. package/dist/sync/index.d.ts +22 -0
  294. package/dist/sync/index.d.ts.map +1 -0
  295. package/dist/sync/memory-transport.d.ts +27 -0
  296. package/dist/sync/memory-transport.d.ts.map +1 -0
  297. package/dist/sync/multi-repo.d.ts +82 -0
  298. package/dist/sync/multi-repo.d.ts.map +1 -0
  299. package/dist/sync/reconciler.d.ts +48 -0
  300. package/dist/sync/reconciler.d.ts.map +1 -0
  301. package/dist/sync/sync-engine.d.ts +65 -0
  302. package/dist/sync/sync-engine.d.ts.map +1 -0
  303. package/dist/sync/types.d.ts +71 -0
  304. package/dist/sync/types.d.ts.map +1 -0
  305. package/dist/sync/ws-transport.d.ts +41 -0
  306. package/dist/sync/ws-transport.d.ts.map +1 -0
  307. package/dist/tenancy-7d1g4ayp.js +13 -0
  308. package/dist/ui/client.html +460 -664
  309. package/dist/ui/server.d.ts +42 -0
  310. package/dist/ui/server.d.ts.map +1 -0
  311. package/dist/vcs/blob-store.d.ts +49 -0
  312. package/dist/vcs/blob-store.d.ts.map +1 -0
  313. package/dist/vcs/branch.d.ts +35 -0
  314. package/dist/vcs/branch.d.ts.map +1 -0
  315. package/dist/vcs/checkpoint.d.ts +24 -0
  316. package/dist/vcs/checkpoint.d.ts.map +1 -0
  317. package/dist/vcs/decompose.d.ts +19 -0
  318. package/dist/vcs/decompose.d.ts.map +1 -0
  319. package/dist/vcs/diff.d.ts +65 -0
  320. package/dist/vcs/diff.d.ts.map +1 -0
  321. package/dist/vcs/engine-context.d.ts +21 -0
  322. package/dist/vcs/engine-context.d.ts.map +1 -0
  323. package/dist/vcs/index.d.ts +23 -0
  324. package/dist/vcs/index.d.ts.map +1 -0
  325. package/dist/vcs/index.js +2 -2
  326. package/dist/vcs/issue.d.ts +159 -0
  327. package/dist/vcs/issue.d.ts.map +1 -0
  328. package/dist/vcs/merge.d.ts +55 -0
  329. package/dist/vcs/merge.d.ts.map +1 -0
  330. package/dist/vcs/milestone.d.ts +30 -0
  331. package/dist/vcs/milestone.d.ts.map +1 -0
  332. package/dist/vcs/ops.d.ts +27 -0
  333. package/dist/vcs/ops.d.ts.map +1 -0
  334. package/dist/vcs/types.d.ts +95 -0
  335. package/dist/vcs/types.d.ts.map +1 -0
  336. package/dist/vcs/vcs-middleware.d.ts +14 -0
  337. package/dist/vcs/vcs-middleware.d.ts.map +1 -0
  338. package/dist/vm-config-6xhsj6b3.js +22 -0
  339. package/dist/watcher/fs-watcher.d.ts +51 -0
  340. package/dist/watcher/fs-watcher.d.ts.map +1 -0
  341. package/dist/watcher/index.d.ts +9 -0
  342. package/dist/watcher/index.d.ts.map +1 -0
  343. package/dist/watcher/ingestion.d.ts +28 -0
  344. package/dist/watcher/ingestion.d.ts.map +1 -0
  345. package/package.json +57 -7
  346. package/dist/index-hybgxe40.js +0 -1174
@@ -0,0 +1,316 @@
1
+ // @bun
2
+ // src/core/query/types.ts
3
+ function isVariable(t) {
4
+ return t.kind === "variable";
5
+ }
6
+ function isLiteral(t) {
7
+ return t.kind === "literal";
8
+ }
9
+ function variable(name) {
10
+ return { kind: "variable", name };
11
+ }
12
+ function literal(value) {
13
+ return { kind: "literal", value };
14
+ }
15
+
16
+ // src/core/query/engine.ts
17
+ class QueryEngine {
18
+ store;
19
+ rules = new Map;
20
+ maxRuleDepth = 32;
21
+ constructor(store) {
22
+ this.store = store;
23
+ }
24
+ addRule(rule) {
25
+ const existing = this.rules.get(rule.name) ?? [];
26
+ existing.push(rule);
27
+ this.rules.set(rule.name, existing);
28
+ }
29
+ removeRule(name) {
30
+ this.rules.delete(name);
31
+ }
32
+ execute(query) {
33
+ const start = performance.now();
34
+ let results = this._evaluatePatterns(query.where, [new Map]);
35
+ for (const filter of query.filters) {
36
+ results = results.filter((b) => this._evalFilter(filter, b));
37
+ }
38
+ if (query.aggregates.length > 0) {
39
+ results = this._aggregate(results, query.aggregates, query.select);
40
+ }
41
+ if (query.orderBy.length > 0) {
42
+ results = this._order(results, query.orderBy);
43
+ }
44
+ if (query.offset > 0)
45
+ results = results.slice(query.offset);
46
+ if (query.limit > 0)
47
+ results = results.slice(0, query.limit);
48
+ const projected = this._project(results, query.select);
49
+ return {
50
+ bindings: projected,
51
+ executionTime: performance.now() - start,
52
+ count: projected.length
53
+ };
54
+ }
55
+ _evaluatePatterns(patterns, bindings) {
56
+ let current = bindings;
57
+ for (const pattern of patterns) {
58
+ if (current.length === 0)
59
+ break;
60
+ current = this._evaluatePattern(pattern, current);
61
+ }
62
+ return current;
63
+ }
64
+ _evaluatePattern(pattern, bindings) {
65
+ switch (pattern.kind) {
66
+ case "fact":
67
+ return this._evalFactPattern(pattern, bindings);
68
+ case "link":
69
+ return this._evalLinkPattern(pattern, bindings);
70
+ case "not":
71
+ return this._evalNotPattern(pattern, bindings);
72
+ case "or":
73
+ return this._evalOrPattern(pattern, bindings);
74
+ case "rule":
75
+ return this._evalRuleApplication(pattern, bindings);
76
+ }
77
+ }
78
+ _evalFactPattern(p, bindings) {
79
+ const results = [];
80
+ for (const b of bindings) {
81
+ const eResolved = this._resolve(p.entity, b);
82
+ const aResolved = this._resolve(p.attribute, b);
83
+ const vResolved = this._resolve(p.value, b);
84
+ let facts;
85
+ if (eResolved !== undefined && aResolved !== undefined) {
86
+ facts = this.store.getFactsByEntity(String(eResolved)).filter((f) => f.a === aResolved);
87
+ } else if (eResolved !== undefined) {
88
+ facts = this.store.getFactsByEntity(String(eResolved));
89
+ } else if (aResolved !== undefined && vResolved !== undefined) {
90
+ facts = this.store.getFactsByValue(String(aResolved), vResolved);
91
+ } else if (aResolved !== undefined) {
92
+ facts = this.store.getFactsByAttribute(String(aResolved));
93
+ } else {
94
+ facts = this.store.getAllFacts();
95
+ }
96
+ if (vResolved !== undefined) {
97
+ facts = facts.filter((f) => f.v === vResolved);
98
+ }
99
+ for (const fact of facts) {
100
+ const nb = new Map(b);
101
+ if (this._bind(p.entity, fact.e, nb) && this._bind(p.attribute, fact.a, nb) && this._bind(p.value, fact.v, nb)) {
102
+ results.push(nb);
103
+ }
104
+ }
105
+ }
106
+ return results;
107
+ }
108
+ _evalLinkPattern(p, bindings) {
109
+ const results = [];
110
+ for (const b of bindings) {
111
+ const srcResolved = this._resolve(p.source, b);
112
+ const attrResolved = this._resolve(p.attribute, b);
113
+ const tgtResolved = this._resolve(p.target, b);
114
+ let links;
115
+ if (srcResolved !== undefined && attrResolved !== undefined) {
116
+ links = this.store.getLinksByEntityAndAttribute(String(srcResolved), String(attrResolved));
117
+ } else if (srcResolved !== undefined) {
118
+ links = this.store.getLinksByEntity(String(srcResolved));
119
+ } else if (attrResolved !== undefined) {
120
+ links = this.store.getLinksByAttribute(String(attrResolved));
121
+ } else {
122
+ links = this.store.getAllLinks();
123
+ }
124
+ if (tgtResolved !== undefined) {
125
+ links = links.filter((l) => l.e2 === tgtResolved);
126
+ }
127
+ for (const link of links) {
128
+ const nb = new Map(b);
129
+ if (this._bind(p.source, link.e1, nb) && this._bind(p.attribute, link.a, nb) && this._bind(p.target, link.e2, nb)) {
130
+ results.push(nb);
131
+ }
132
+ }
133
+ }
134
+ return results;
135
+ }
136
+ _evalNotPattern(p, bindings) {
137
+ return bindings.filter((b) => {
138
+ const matches = this._evaluatePattern(p.pattern, [b]);
139
+ return matches.length === 0;
140
+ });
141
+ }
142
+ _evalOrPattern(p, bindings) {
143
+ const results = [];
144
+ for (const branch of p.branches) {
145
+ const branchResults = this._evaluatePatterns(branch, bindings);
146
+ results.push(...branchResults);
147
+ }
148
+ return this._dedup(results);
149
+ }
150
+ _evalRuleApplication(p, bindings, depth = 0) {
151
+ if (depth > this.maxRuleDepth)
152
+ return [];
153
+ const ruleDefs = this.rules.get(p.name);
154
+ if (!ruleDefs)
155
+ return [];
156
+ const results = [];
157
+ for (const b of bindings) {
158
+ for (const rule of ruleDefs) {
159
+ const ruleBindings = new Map(b);
160
+ let ok = true;
161
+ for (let i = 0;i < rule.params.length && i < p.args.length; i++) {
162
+ const resolved = this._resolve(p.args[i], b);
163
+ if (resolved !== undefined) {
164
+ ruleBindings.set(rule.params[i], resolved);
165
+ } else if (isVariable(p.args[i])) {}
166
+ }
167
+ if (!ok)
168
+ continue;
169
+ let bodyResults = this._evaluatePatterns(rule.body, [ruleBindings]);
170
+ for (const f of rule.filters) {
171
+ bodyResults = bodyResults.filter((rb) => this._evalFilter(f, rb));
172
+ }
173
+ for (const rb of bodyResults) {
174
+ const nb = new Map(b);
175
+ for (let i = 0;i < rule.params.length && i < p.args.length; i++) {
176
+ if (isVariable(p.args[i])) {
177
+ const val = rb.get(rule.params[i]);
178
+ if (val !== undefined)
179
+ nb.set(p.args[i].name, val);
180
+ }
181
+ }
182
+ results.push(nb);
183
+ }
184
+ }
185
+ }
186
+ return this._dedup(results);
187
+ }
188
+ _evalFilter(filter, b) {
189
+ const left = this._resolve(filter.left, b);
190
+ const right = this._resolve(filter.right, b);
191
+ if (left === undefined || right === undefined)
192
+ return false;
193
+ switch (filter.op) {
194
+ case "=":
195
+ return left === right;
196
+ case "!=":
197
+ return left !== right;
198
+ case "<":
199
+ return left < right;
200
+ case "<=":
201
+ return left <= right;
202
+ case ">":
203
+ return left > right;
204
+ case ">=":
205
+ return left >= right;
206
+ case "contains":
207
+ return String(left).includes(String(right));
208
+ case "startsWith":
209
+ return String(left).startsWith(String(right));
210
+ case "endsWith":
211
+ return String(left).endsWith(String(right));
212
+ case "matches":
213
+ return new RegExp(String(right)).test(String(left));
214
+ default:
215
+ return false;
216
+ }
217
+ }
218
+ _aggregate(bindings, aggregates, groupBy) {
219
+ const aggVarNames = new Set(aggregates.map((a) => a.as));
220
+ const groupVars = groupBy.filter((v) => !aggVarNames.has(v));
221
+ const groups = new Map;
222
+ for (const b of bindings) {
223
+ const key = groupVars.map((v) => String(b.get(v) ?? "")).join("\x00");
224
+ const group = groups.get(key) ?? [];
225
+ group.push(b);
226
+ groups.set(key, group);
227
+ }
228
+ const results = [];
229
+ for (const [, group] of groups) {
230
+ const nb = new Map(group[0]);
231
+ for (const agg of aggregates) {
232
+ const vals = group.map((b) => b.get(agg.variable)).filter((v) => v !== undefined);
233
+ nb.set(agg.as, this._computeAggregate(agg.op, vals));
234
+ }
235
+ results.push(nb);
236
+ }
237
+ return results;
238
+ }
239
+ _computeAggregate(op, vals) {
240
+ switch (op) {
241
+ case "count":
242
+ return vals.length;
243
+ case "sum":
244
+ return vals.reduce((s, v) => s + (Number(v) || 0), 0);
245
+ case "avg":
246
+ return vals.length ? vals.reduce((s, v) => s + (Number(v) || 0), 0) / vals.length : 0;
247
+ case "min":
248
+ return vals.reduce((m, v) => v < m ? v : m, vals[0]);
249
+ case "max":
250
+ return vals.reduce((m, v) => v > m ? v : m, vals[0]);
251
+ case "collect":
252
+ return JSON.stringify(vals);
253
+ default:
254
+ return vals.length;
255
+ }
256
+ }
257
+ _order(bindings, orderBy) {
258
+ return [...bindings].sort((a, b) => {
259
+ for (const o of orderBy) {
260
+ const va = a.get(o.variable);
261
+ const vb = b.get(o.variable);
262
+ if (va === vb)
263
+ continue;
264
+ if (va === undefined)
265
+ return 1;
266
+ if (vb === undefined)
267
+ return -1;
268
+ const cmp = va < vb ? -1 : 1;
269
+ return o.direction === "asc" ? cmp : -cmp;
270
+ }
271
+ return 0;
272
+ });
273
+ }
274
+ _project(bindings, select) {
275
+ return bindings.map((b) => {
276
+ const row = {};
277
+ if (select.length === 0) {
278
+ for (const [k, v] of b)
279
+ row[k] = v;
280
+ } else {
281
+ for (const s of select) {
282
+ const v = b.get(s);
283
+ if (v !== undefined)
284
+ row[s] = v;
285
+ }
286
+ }
287
+ return row;
288
+ });
289
+ }
290
+ _resolve(term, bindings) {
291
+ if (isLiteral(term))
292
+ return term.value;
293
+ return bindings.get(term.name);
294
+ }
295
+ _bind(term, value, bindings) {
296
+ if (isLiteral(term))
297
+ return term.value === value;
298
+ const existing = bindings.get(term.name);
299
+ if (existing !== undefined)
300
+ return existing === value;
301
+ bindings.set(term.name, value);
302
+ return true;
303
+ }
304
+ _dedup(bindings) {
305
+ const seen = new Set;
306
+ return bindings.filter((b) => {
307
+ const key = [...b.entries()].sort(([a], [b2]) => a.localeCompare(b2)).map(([k, v]) => `${k}=${v}`).join("\x00");
308
+ if (seen.has(key))
309
+ return false;
310
+ seen.add(key);
311
+ return true;
312
+ });
313
+ }
314
+ }
315
+
316
+ export { isVariable, isLiteral, variable, literal, QueryEngine };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * TrellisVCS — Graph-native, code-first version control
3
+ *
4
+ * @module trellisvcs
5
+ *
6
+ * Public API surface. Import {@link TrellisVcsEngine} as the main entry point,
7
+ * plus core VCS types, the {@link FileWatcher}, and the {@link Ingestion}
8
+ * pipeline.
9
+ *
10
+ * For sub-modules, import directly from:
11
+ * - `./garden/index.js` — Idea Garden cluster detection + query
12
+ * - `./semantic/index.js` — Semantic parsing + diff/merge
13
+ * - `./sync/index.js` — Peer sync + CRDT reconciler
14
+ * - `./identity/index.js` — Ed25519 identity + governance
15
+ */
16
+ export { TrellisVcsEngine } from './engine.js';
17
+ export * from './vcs/index.js';
18
+ export { FileWatcher } from './watcher/fs-watcher.js';
19
+ export { Ingestion } from './watcher/ingestion.js';
20
+ export { TrellisKernel } from './core/kernel/trellis-kernel.js';
21
+ export { SqliteKernelBackend } from './core/persist/sqlite-backend.js';
22
+ export type { KernelConfig, MutateResult, EntityRecord, } from './core/kernel/trellis-kernel.js';
23
+ export { inferProjectContext, loadProfile, saveProfile, hasProfile, writeAgentScaffold, } from './scaffold/index.js';
24
+ export type { ProjectContext, InferenceConfidence, UserProfile, ScaffoldInput, } from './scaffold/index.js';
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,UAAU,EACV,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,aAAa,GACd,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -1,19 +1,20 @@
1
1
  // @bun
2
- import {
3
- VcsMiddleware
4
- } from "./index-k5kf7sd0.js";
5
2
  import {
6
3
  FileWatcher,
7
4
  Ingestion,
8
5
  TrellisVcsEngine,
6
+ hasProfile,
7
+ inferProjectContext,
9
8
  init_engine,
10
9
  init_fs_watcher,
11
- init_ingestion
12
- } from "./index-22jx9qsz.js";
10
+ init_ingestion,
11
+ loadProfile,
12
+ saveProfile,
13
+ writeAgentScaffold
14
+ } from "./index-q31hfjja.js";
13
15
  import {
14
- SqliteKernelBackend,
15
- TrellisKernel
16
- } from "./index-hybgxe40.js";
16
+ VcsMiddleware
17
+ } from "./index-hmdbnd4n.js";
17
18
  import {
18
19
  BlobStore,
19
20
  addCriterion,
@@ -52,7 +53,7 @@ import {
52
53
  triageIssue,
53
54
  unblockIssue,
54
55
  updateIssue
55
- } from "./index-3ejh8k6v.js";
56
+ } from "./index-0q7wbasy.js";
56
57
  import"./index-65z0xfjw.js";
57
58
  import {
58
59
  DEFAULT_CONFIG,
@@ -68,6 +69,12 @@ import {
68
69
  issueEntityId,
69
70
  milestoneEntityId
70
71
  } from "./index-v9b4hqa7.js";
72
+ import {
73
+ SqliteKernelBackend,
74
+ TrellisKernel
75
+ } from "./index-0zk3fx2s.js";
76
+ import"./index-yhwjgfvj.js";
77
+ import"./index-yp88he8n.js";
71
78
  import"./index-a76rekgs.js";
72
79
 
73
80
  // src/index.ts
@@ -75,6 +82,7 @@ init_engine();
75
82
  init_fs_watcher();
76
83
  init_ingestion();
77
84
  export {
85
+ writeAgentScaffold,
78
86
  updateIssue,
79
87
  unblockIssue,
80
88
  triageIssue,
@@ -83,6 +91,7 @@ export {
83
91
  switchBranch,
84
92
  startIssue,
85
93
  setCriterionStatus,
94
+ saveProfile,
86
95
  saveBranchState,
87
96
  runCriteria,
88
97
  resumeIssue,
@@ -90,6 +99,7 @@ export {
90
99
  pauseIssue,
91
100
  myersDiff,
92
101
  milestoneEntityId,
102
+ loadProfile,
93
103
  loadBranchState,
94
104
  listMilestones,
95
105
  listIssues,
@@ -98,6 +108,8 @@ export {
98
108
  issueEntityId,
99
109
  isVcsOpKind,
100
110
  isVcsOp,
111
+ inferProjectContext,
112
+ hasProfile,
101
113
  getIssue,
102
114
  getActiveIssues,
103
115
  generateUnifiedDiff,
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Linked Markdown
3
+ *
4
+ * Wiki-link parser, entity reference resolver, and bidirectional
5
+ * reference index for [[...]] syntax in markdown and doc-comments.
6
+ *
7
+ * @see TRL-11
8
+ */
9
+ export { parseFileRefs, parseMarkdownRefs, parseDocCommentRefs, parseRefContent, inferNamespace, } from './parser.js';
10
+ export { resolveRef, resolveRefs, createResolverContext } from './resolver.js';
11
+ export type { ResolverContext, Enginelike } from './resolver.js';
12
+ export { buildRefIndex, updateFileInIndex, removeFileFromIndex, getOutgoingRefs, getBacklinks, getReferencedEntities, getFilesWithRefs, getIndexStats, } from './ref-index.js';
13
+ export { StaleRefRegistry, buildRenameProposal, applyRenameProposal, handleSymbolDeletion, handleFileDeletion, getDiagnostics, processSemanticPatches, } from './lifecycle.js';
14
+ export type { StaleRef, RefDiagnostic, LifecycleEvent } from './lifecycle.js';
15
+ export type { EntityRef, RefSource, RefContext, RefNamespace, ResolvedRef, RefState, RefIndex, RefUpdateProposal, RefRewrite, } from './types.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/links/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC/E,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9E,YAAY,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,UAAU,GACX,MAAM,YAAY,CAAC"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Ref Lifecycle — Rename Prompts & Stale Detection
3
+ *
4
+ * Handles the three-tier diagnostic model for wiki-link references:
5
+ * - Resolved: target exists and resolves
6
+ * - Stale (warning): target was renamed or deleted, known provenance
7
+ * - Broken (error): target never existed
8
+ *
9
+ * On symbol rename → build a RefUpdateProposal for user confirmation.
10
+ * On symbol delete → mark affected refs as stale (no file modification).
11
+ *
12
+ * @see TRL-14
13
+ */
14
+ import type { RefIndex, RefSource, RefUpdateProposal, RefState } from './types.js';
15
+ export interface StaleRef {
16
+ /** The entity ID that became stale */
17
+ entityId: string;
18
+ /** Why it became stale */
19
+ reason: 'renamed' | 'deleted';
20
+ /** The op hash that caused the staleness */
21
+ causeOpHash?: string;
22
+ /** For renames: the new name */
23
+ newTarget?: string;
24
+ /** Timestamp when it became stale */
25
+ timestamp: string;
26
+ /** Sources that reference this stale entity */
27
+ sources: RefSource[];
28
+ }
29
+ /**
30
+ * In-memory stale ref registry.
31
+ * Maps entity ID → StaleRef.
32
+ */
33
+ export declare class StaleRefRegistry {
34
+ private staleRefs;
35
+ /**
36
+ * Mark an entity as stale due to rename or deletion.
37
+ */
38
+ markStale(entityId: string, reason: 'renamed' | 'deleted', sources: RefSource[], opts?: {
39
+ causeOpHash?: string;
40
+ newTarget?: string;
41
+ }): StaleRef;
42
+ /**
43
+ * Remove stale status (e.g. after user accepts rename update).
44
+ */
45
+ clearStale(entityId: string): void;
46
+ /**
47
+ * Check if an entity is stale.
48
+ */
49
+ isStale(entityId: string): boolean;
50
+ /**
51
+ * Get stale info for an entity.
52
+ */
53
+ getStale(entityId: string): StaleRef | undefined;
54
+ /**
55
+ * Get all stale refs.
56
+ */
57
+ getAllStale(): StaleRef[];
58
+ /**
59
+ * Get stale refs filtered by reason.
60
+ */
61
+ getByReason(reason: 'renamed' | 'deleted'): StaleRef[];
62
+ }
63
+ /**
64
+ * Build a RefUpdateProposal when a symbol is renamed.
65
+ * Scans the ref index for all references to the old symbol name
66
+ * and produces a list of rewrites.
67
+ *
68
+ * Does NOT modify any files — returns a proposal for user confirmation.
69
+ */
70
+ export declare function buildRenameProposal(index: RefIndex, filePath: string, oldName: string, newName: string): RefUpdateProposal;
71
+ /**
72
+ * Apply a RefUpdateProposal by rewriting files.
73
+ * Reads each affected file, applies the rewrites, and writes back.
74
+ *
75
+ * Returns the list of files that were actually modified.
76
+ */
77
+ export declare function applyRenameProposal(proposal: RefUpdateProposal, rootPath: string): string[];
78
+ /**
79
+ * Handle a symbol deletion by marking all referencing refs as stale.
80
+ * Does NOT modify any files.
81
+ *
82
+ * Returns the StaleRef entry for diagnostic display.
83
+ */
84
+ export declare function handleSymbolDeletion(index: RefIndex, registry: StaleRefRegistry, filePath: string, symbolName: string, causeOpHash?: string): StaleRef | null;
85
+ /**
86
+ * Handle a file deletion by marking all refs to that file (and its symbols) as stale.
87
+ */
88
+ export declare function handleFileDeletion(index: RefIndex, registry: StaleRefRegistry, filePath: string, causeOpHash?: string): StaleRef | null;
89
+ export type RefDiagnostic = {
90
+ entityId: string;
91
+ state: RefState;
92
+ source: RefSource;
93
+ message: string;
94
+ };
95
+ /**
96
+ * Produce diagnostics for all refs in the index.
97
+ * Combines stale registry info with broken ref detection.
98
+ */
99
+ export declare function getDiagnostics(index: RefIndex, registry: StaleRefRegistry, resolvedEntityIds: Set<string>): RefDiagnostic[];
100
+ import type { SemanticPatch } from '../semantic/types.js';
101
+ export interface LifecycleEvent {
102
+ type: 'rename-proposal' | 'stale-detected';
103
+ filePath: string;
104
+ proposal?: RefUpdateProposal;
105
+ staleRef?: StaleRef;
106
+ }
107
+ /**
108
+ * Process semantic patches and produce lifecycle events.
109
+ * This is the main integration point — call this when sdiff detects changes.
110
+ */
111
+ export declare function processSemanticPatches(patches: SemanticPatch[], filePath: string, index: RefIndex, registry: StaleRefRegistry, causeOpHash?: string): LifecycleEvent[];
112
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/links/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Wiki-Link Parser
3
+ *
4
+ * Parses [[...]] references from markdown files and doc-comments
5
+ * in source code. Supports namespaced and bare syntax with smart
6
+ * namespace inference.
7
+ *
8
+ * @see TRL-11
9
+ */
10
+ import type { EntityRef, RefNamespace } from './types.js';
11
+ /**
12
+ * Parse all [[...]] references from a file's content.
13
+ * Detects context (markdown vs doc-comment) based on file extension.
14
+ */
15
+ export declare function parseFileRefs(content: string, filePath: string): EntityRef[];
16
+ /**
17
+ * Parse all [[...]] references from markdown content.
18
+ */
19
+ export declare function parseMarkdownRefs(content: string, filePath: string): EntityRef[];
20
+ /**
21
+ * Parse [[...]] references from doc-comments in source code.
22
+ * Extracts comment blocks first, then scans them for wiki-links.
23
+ */
24
+ export declare function parseDocCommentRefs(content: string, filePath: string, ext?: string): EntityRef[];
25
+ interface ParsedRef {
26
+ namespace: RefNamespace;
27
+ target: string;
28
+ anchor?: string;
29
+ alias?: string;
30
+ }
31
+ /**
32
+ * Parse the inner content of a [[...]] wiki-link.
33
+ *
34
+ * Supported forms:
35
+ * - "namespace:target" → explicit namespace
36
+ * - "namespace:target|alias" → explicit namespace + alias
37
+ * - "namespace:target#anchor" → explicit namespace + anchor
38
+ * - "target" → infer namespace
39
+ * - "target|alias" → infer namespace + alias
40
+ * - "path#anchor" → symbol ref
41
+ * - "path#anchor|alias" → symbol ref + alias
42
+ */
43
+ export declare function parseRefContent(raw: string): ParsedRef | null;
44
+ /**
45
+ * Infer the namespace from bare ref content.
46
+ *
47
+ * Rules (in order):
48
+ * 1. TRL-\d+ pattern → issue
49
+ * 2. DEC-\d+ pattern → decision
50
+ * 3. Has anchor (#) → symbol
51
+ * 4. Contains '/' or has known file extension → file
52
+ * 5. Otherwise → null (namespace required)
53
+ */
54
+ export declare function inferNamespace(target: string, anchor?: string): RefNamespace | null;
55
+ export {};
56
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/links/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAc,YAAY,EAAa,MAAM,YAAY,CAAC;AAqCjF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAS5E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAEhF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,MAAM,GACX,SAAS,EAAE,CAWb;AA2DD,UAAU,SAAS;IACjB,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAqC7D;AAsBD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAiBnF"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Bidirectional Reference Index
3
+ *
4
+ * Builds and maintains a bidirectional index of [[...]] references:
5
+ * - outgoing: source file → EntityRefs it contains
6
+ * - incoming: target entity ID → RefSources that reference it
7
+ *
8
+ * Supports incremental updates when files change.
9
+ *
10
+ * @see TRL-13
11
+ */
12
+ import type { EntityRef, RefIndex, RefSource } from './types.js';
13
+ import type { ResolverContext } from './resolver.js';
14
+ /**
15
+ * Build a complete RefIndex by scanning all provided file contents.
16
+ */
17
+ export declare function buildRefIndex(files: Array<{
18
+ path: string;
19
+ content: string;
20
+ }>, ctx: ResolverContext): RefIndex;
21
+ /**
22
+ * Update the index for a single file that was added or modified.
23
+ * Removes old entries for the file, then re-parses and re-indexes.
24
+ */
25
+ export declare function updateFileInIndex(index: RefIndex, filePath: string, content: string, ctx: ResolverContext): void;
26
+ /**
27
+ * Remove all refs originating from a file (e.g. when the file is deleted).
28
+ */
29
+ export declare function removeFileFromIndex(index: RefIndex, filePath: string): void;
30
+ /**
31
+ * Get all outgoing refs from a file.
32
+ */
33
+ export declare function getOutgoingRefs(index: RefIndex, filePath: string): EntityRef[];
34
+ /**
35
+ * Get all incoming refs (backlinks) for an entity.
36
+ * Accepts either a raw entity ID (e.g. "issue:TRL-5") or a target string.
37
+ */
38
+ export declare function getBacklinks(index: RefIndex, entityId: string): RefSource[];
39
+ /**
40
+ * Get all entity IDs that have at least one backlink.
41
+ */
42
+ export declare function getReferencedEntities(index: RefIndex): string[];
43
+ /**
44
+ * Get all files that contain at least one ref.
45
+ */
46
+ export declare function getFilesWithRefs(index: RefIndex): string[];
47
+ /**
48
+ * Get total counts for the index.
49
+ */
50
+ export declare function getIndexStats(index: RefIndex): {
51
+ totalFiles: number;
52
+ totalRefs: number;
53
+ totalEntities: number;
54
+ };
55
+ //# sourceMappingURL=ref-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ref-index.d.ts","sourceRoot":"","sources":["../../src/links/ref-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMrD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/C,GAAG,EAAE,eAAe,GACnB,QAAQ,CAYV;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,eAAe,GACnB,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAsB3E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAE9E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAE3E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,EAAE,CAE/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,EAAE,CAE1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,CAUA"}