trellis 2.1.6 → 2.1.9

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 (240) hide show
  1. package/README.md +100 -10
  2. package/dist/cli/index.d.ts +14 -0
  3. package/dist/cli/index.d.ts.map +1 -0
  4. package/dist/cli/index.js +212 -12
  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/core/agents/harness.d.ts +49 -0
  14. package/dist/core/agents/harness.d.ts.map +1 -0
  15. package/dist/core/agents/index.d.ts +8 -0
  16. package/dist/core/agents/index.d.ts.map +1 -0
  17. package/dist/core/agents/types.d.ts +63 -0
  18. package/dist/core/agents/types.d.ts.map +1 -0
  19. package/dist/core/index.d.ts +25 -0
  20. package/dist/core/index.d.ts.map +1 -0
  21. package/dist/core/index.js +15 -9
  22. package/dist/core/kernel/middleware.d.ts +28 -0
  23. package/dist/core/kernel/middleware.d.ts.map +1 -0
  24. package/dist/core/kernel/trellis-kernel.d.ts +162 -0
  25. package/dist/core/kernel/trellis-kernel.d.ts.map +1 -0
  26. package/dist/core/ontology/builtins.d.ts +16 -0
  27. package/dist/core/ontology/builtins.d.ts.map +1 -0
  28. package/dist/core/ontology/index.d.ts +10 -0
  29. package/dist/core/ontology/index.d.ts.map +1 -0
  30. package/dist/core/ontology/registry.d.ts +70 -0
  31. package/dist/core/ontology/registry.d.ts.map +1 -0
  32. package/dist/core/ontology/types.d.ts +97 -0
  33. package/dist/core/ontology/types.d.ts.map +1 -0
  34. package/dist/core/ontology/validator.d.ts +34 -0
  35. package/dist/core/ontology/validator.d.ts.map +1 -0
  36. package/dist/core/persist/backend.d.ts +60 -0
  37. package/dist/core/persist/backend.d.ts.map +1 -0
  38. package/dist/core/persist/sqlite-backend.d.ts +41 -0
  39. package/dist/core/persist/sqlite-backend.d.ts.map +1 -0
  40. package/dist/core/plugins/index.d.ts +8 -0
  41. package/dist/core/plugins/index.d.ts.map +1 -0
  42. package/dist/core/plugins/registry.d.ts +69 -0
  43. package/dist/core/plugins/registry.d.ts.map +1 -0
  44. package/dist/core/plugins/types.d.ts +87 -0
  45. package/dist/core/plugins/types.d.ts.map +1 -0
  46. package/dist/core/query/datalog.d.ts +52 -0
  47. package/dist/core/query/datalog.d.ts.map +1 -0
  48. package/dist/core/query/engine.d.ts +42 -0
  49. package/dist/core/query/engine.d.ts.map +1 -0
  50. package/dist/core/query/index.d.ts +12 -0
  51. package/dist/core/query/index.d.ts.map +1 -0
  52. package/dist/core/query/parser.d.ts +37 -0
  53. package/dist/core/query/parser.d.ts.map +1 -0
  54. package/dist/core/query/types.d.ts +135 -0
  55. package/dist/core/query/types.d.ts.map +1 -0
  56. package/dist/core/store/eav-store.d.ts +107 -0
  57. package/dist/core/store/eav-store.d.ts.map +1 -0
  58. package/dist/db/index.d.ts +18 -0
  59. package/dist/db/index.d.ts.map +1 -0
  60. package/dist/db/index.js +83 -0
  61. package/dist/db/inspector.js +28 -0
  62. package/dist/db/trellis.css +1 -0
  63. package/dist/decisions/auto-capture.d.ts +31 -0
  64. package/dist/decisions/auto-capture.d.ts.map +1 -0
  65. package/dist/decisions/hooks.d.ts +48 -0
  66. package/dist/decisions/hooks.d.ts.map +1 -0
  67. package/dist/decisions/index.d.ts +36 -0
  68. package/dist/decisions/index.d.ts.map +1 -0
  69. package/dist/decisions/types.d.ts +73 -0
  70. package/dist/decisions/types.d.ts.map +1 -0
  71. package/dist/deploy-99j5dc9c.js +9 -0
  72. package/dist/embeddings/auto-embed.d.ts +52 -0
  73. package/dist/embeddings/auto-embed.d.ts.map +1 -0
  74. package/dist/embeddings/chunker.d.ts +73 -0
  75. package/dist/embeddings/chunker.d.ts.map +1 -0
  76. package/dist/embeddings/index.d.ts +18 -0
  77. package/dist/embeddings/index.d.ts.map +1 -0
  78. package/dist/embeddings/model.d.ts +30 -0
  79. package/dist/embeddings/model.d.ts.map +1 -0
  80. package/dist/embeddings/search.d.ts +87 -0
  81. package/dist/embeddings/search.d.ts.map +1 -0
  82. package/dist/embeddings/store.d.ts +66 -0
  83. package/dist/embeddings/store.d.ts.map +1 -0
  84. package/dist/embeddings/types.d.ts +54 -0
  85. package/dist/embeddings/types.d.ts.map +1 -0
  86. package/dist/engine-y0724kjq.js +8 -0
  87. package/dist/engine.d.ts +216 -0
  88. package/dist/engine.d.ts.map +1 -0
  89. package/dist/garden/cluster.d.ts +57 -0
  90. package/dist/garden/cluster.d.ts.map +1 -0
  91. package/dist/garden/garden.d.ts +104 -0
  92. package/dist/garden/garden.d.ts.map +1 -0
  93. package/dist/garden/index.d.ts +15 -0
  94. package/dist/garden/index.d.ts.map +1 -0
  95. package/dist/git/git-exporter.d.ts +37 -0
  96. package/dist/git/git-exporter.d.ts.map +1 -0
  97. package/dist/git/git-importer.d.ts +36 -0
  98. package/dist/git/git-importer.d.ts.map +1 -0
  99. package/dist/git/git-reader.d.ts +63 -0
  100. package/dist/git/git-reader.d.ts.map +1 -0
  101. package/dist/git/index.d.ts +10 -0
  102. package/dist/git/index.d.ts.map +1 -0
  103. package/dist/identity/governance.d.ts +54 -0
  104. package/dist/identity/governance.d.ts.map +1 -0
  105. package/dist/identity/identity.d.ts +63 -0
  106. package/dist/identity/identity.d.ts.map +1 -0
  107. package/dist/identity/index.d.ts +10 -0
  108. package/dist/identity/index.d.ts.map +1 -0
  109. package/dist/identity/signing-middleware.d.ts +38 -0
  110. package/dist/identity/signing-middleware.d.ts.map +1 -0
  111. package/dist/import-fyg5sgq4.js +11 -0
  112. package/dist/{index-5m0g9r0y.js → index-04sq3h27.js} +1 -496
  113. package/dist/index-2r4jxwnb.js +32 -0
  114. package/dist/index-4beszbgg.js +292 -0
  115. package/dist/index-5bhe57y9.js +326 -0
  116. package/dist/index-5p6zgspx.js +77 -0
  117. package/dist/index-7t92ej34.js +544 -0
  118. package/dist/index-8fjwnztt.js +155 -0
  119. package/dist/{index-5b01h414.js → index-czecrvvn.js} +9 -9
  120. package/dist/index-hgd30epa.js +149 -0
  121. package/dist/index-k5b0xskw.js +1 -0
  122. package/dist/index-kbnht9p8.js +1 -0
  123. package/dist/index-n9f2qyh5.js +495 -0
  124. package/dist/index-xr7rx360.js +814 -0
  125. package/dist/index-xzym9w0m.js +43 -0
  126. package/dist/index-yp88he8n.js +316 -0
  127. package/dist/index.d.ts +23 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +9 -7
  130. package/dist/links/index.d.ts +16 -0
  131. package/dist/links/index.d.ts.map +1 -0
  132. package/dist/links/lifecycle.d.ts +112 -0
  133. package/dist/links/lifecycle.d.ts.map +1 -0
  134. package/dist/links/parser.d.ts +56 -0
  135. package/dist/links/parser.d.ts.map +1 -0
  136. package/dist/links/ref-index.d.ts +55 -0
  137. package/dist/links/ref-index.d.ts.map +1 -0
  138. package/dist/links/resolver.d.ts +90 -0
  139. package/dist/links/resolver.d.ts.map +1 -0
  140. package/dist/links/types.d.ts +70 -0
  141. package/dist/links/types.d.ts.map +1 -0
  142. package/dist/mcp/docs.d.ts +18 -0
  143. package/dist/mcp/docs.d.ts.map +1 -0
  144. package/dist/mcp/index.d.ts +9 -0
  145. package/dist/mcp/index.d.ts.map +1 -0
  146. package/dist/mcp/server.d.ts +26 -0
  147. package/dist/mcp/server.d.ts.map +1 -0
  148. package/dist/react/index.js +189 -0
  149. package/dist/sdk-sj8rp0m7.js +15 -0
  150. package/dist/semantic/csharp-parser.d.ts +12 -0
  151. package/dist/semantic/csharp-parser.d.ts.map +1 -0
  152. package/dist/semantic/go-parser.d.ts +12 -0
  153. package/dist/semantic/go-parser.d.ts.map +1 -0
  154. package/dist/semantic/index.d.ts +22 -0
  155. package/dist/semantic/index.d.ts.map +1 -0
  156. package/dist/semantic/java-parser.d.ts +12 -0
  157. package/dist/semantic/java-parser.d.ts.map +1 -0
  158. package/dist/semantic/python-parser.d.ts +12 -0
  159. package/dist/semantic/python-parser.d.ts.map +1 -0
  160. package/dist/semantic/ruby-parser.d.ts +12 -0
  161. package/dist/semantic/ruby-parser.d.ts.map +1 -0
  162. package/dist/semantic/rust-parser.d.ts +12 -0
  163. package/dist/semantic/rust-parser.d.ts.map +1 -0
  164. package/dist/semantic/semantic-merge.d.ts +20 -0
  165. package/dist/semantic/semantic-merge.d.ts.map +1 -0
  166. package/dist/semantic/ts-parser.d.ts +13 -0
  167. package/dist/semantic/ts-parser.d.ts.map +1 -0
  168. package/dist/semantic/types.d.ts +130 -0
  169. package/dist/semantic/types.d.ts.map +1 -0
  170. package/dist/server/auth.d.ts +72 -0
  171. package/dist/server/auth.d.ts.map +1 -0
  172. package/dist/server/deploy.d.ts +44 -0
  173. package/dist/server/deploy.d.ts.map +1 -0
  174. package/dist/server/import.d.ts +40 -0
  175. package/dist/server/import.d.ts.map +1 -0
  176. package/dist/server/index.d.ts +24 -0
  177. package/dist/server/index.d.ts.map +1 -0
  178. package/dist/server/index.js +60 -0
  179. package/dist/server/permissions.d.ts +84 -0
  180. package/dist/server/permissions.d.ts.map +1 -0
  181. package/dist/server/realtime.d.ts +78 -0
  182. package/dist/server/realtime.d.ts.map +1 -0
  183. package/dist/server/server.d.ts +43 -0
  184. package/dist/server/server.d.ts.map +1 -0
  185. package/dist/server/tenancy.d.ts +53 -0
  186. package/dist/server/tenancy.d.ts.map +1 -0
  187. package/dist/server-3vkpnpbz.js +11 -0
  188. package/dist/sync/http-transport.d.ts +47 -0
  189. package/dist/sync/http-transport.d.ts.map +1 -0
  190. package/dist/sync/index.d.ts +22 -0
  191. package/dist/sync/index.d.ts.map +1 -0
  192. package/dist/sync/memory-transport.d.ts +27 -0
  193. package/dist/sync/memory-transport.d.ts.map +1 -0
  194. package/dist/sync/multi-repo.d.ts +82 -0
  195. package/dist/sync/multi-repo.d.ts.map +1 -0
  196. package/dist/sync/reconciler.d.ts +48 -0
  197. package/dist/sync/reconciler.d.ts.map +1 -0
  198. package/dist/sync/sync-engine.d.ts +65 -0
  199. package/dist/sync/sync-engine.d.ts.map +1 -0
  200. package/dist/sync/types.d.ts +71 -0
  201. package/dist/sync/types.d.ts.map +1 -0
  202. package/dist/sync/ws-transport.d.ts +41 -0
  203. package/dist/sync/ws-transport.d.ts.map +1 -0
  204. package/dist/tenancy-tjr7kk2v.js +13 -0
  205. package/dist/ui/server.d.ts +38 -0
  206. package/dist/ui/server.d.ts.map +1 -0
  207. package/dist/vcs/blob-store.d.ts +49 -0
  208. package/dist/vcs/blob-store.d.ts.map +1 -0
  209. package/dist/vcs/branch.d.ts +35 -0
  210. package/dist/vcs/branch.d.ts.map +1 -0
  211. package/dist/vcs/checkpoint.d.ts +24 -0
  212. package/dist/vcs/checkpoint.d.ts.map +1 -0
  213. package/dist/vcs/decompose.d.ts +19 -0
  214. package/dist/vcs/decompose.d.ts.map +1 -0
  215. package/dist/vcs/diff.d.ts +65 -0
  216. package/dist/vcs/diff.d.ts.map +1 -0
  217. package/dist/vcs/engine-context.d.ts +21 -0
  218. package/dist/vcs/engine-context.d.ts.map +1 -0
  219. package/dist/vcs/index.d.ts +23 -0
  220. package/dist/vcs/index.d.ts.map +1 -0
  221. package/dist/vcs/issue.d.ts +159 -0
  222. package/dist/vcs/issue.d.ts.map +1 -0
  223. package/dist/vcs/merge.d.ts +55 -0
  224. package/dist/vcs/merge.d.ts.map +1 -0
  225. package/dist/vcs/milestone.d.ts +30 -0
  226. package/dist/vcs/milestone.d.ts.map +1 -0
  227. package/dist/vcs/ops.d.ts +27 -0
  228. package/dist/vcs/ops.d.ts.map +1 -0
  229. package/dist/vcs/types.d.ts +94 -0
  230. package/dist/vcs/types.d.ts.map +1 -0
  231. package/dist/vcs/vcs-middleware.d.ts +14 -0
  232. package/dist/vcs/vcs-middleware.d.ts.map +1 -0
  233. package/dist/watcher/fs-watcher.d.ts +51 -0
  234. package/dist/watcher/fs-watcher.d.ts.map +1 -0
  235. package/dist/watcher/index.d.ts +9 -0
  236. package/dist/watcher/index.d.ts.map +1 -0
  237. package/dist/watcher/ingestion.d.ts +28 -0
  238. package/dist/watcher/ingestion.d.ts.map +1 -0
  239. package/package.json +44 -4
  240. package/dist/index-hybgxe40.js +0 -1174
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Trellis Server — Multi-Tenant Kernel Pool
3
+ *
4
+ * Manages a pool of `TrellisKernel` instances, one per tenant.
5
+ * Each tenant gets an isolated SQLite database file in `<dbPath>/tenants/<tenantId>.sqlite`.
6
+ *
7
+ * The default tenant uses `<dbPath>/default.sqlite`.
8
+ *
9
+ * @module trellis/server
10
+ */
11
+ import { TrellisKernel } from '../core/kernel/trellis-kernel.js';
12
+ export declare const DEFAULT_TENANT = "default";
13
+ /**
14
+ * A pool of `TrellisKernel` instances keyed by tenant ID.
15
+ *
16
+ * - Kernels are lazily created on first access.
17
+ * - Each tenant's data lives in `<dbPath>/tenants/<tenantId>.sqlite`.
18
+ * - The default tenant lives at `<dbPath>/default.sqlite`.
19
+ */
20
+ export declare class TenantPool {
21
+ private pool;
22
+ private dbPath;
23
+ private agentId;
24
+ constructor(dbPath: string, agentId?: string);
25
+ /**
26
+ * Get (or create) the kernel for a tenant.
27
+ * Pass `null` or `undefined` to get the default tenant.
28
+ */
29
+ get(tenantId?: string | null): TrellisKernel;
30
+ /**
31
+ * Check whether a tenant has been initialized (kernel created).
32
+ */
33
+ has(tenantId: string): boolean;
34
+ /**
35
+ * List all active tenant IDs (those with open kernels).
36
+ */
37
+ activeTenants(): string[];
38
+ /**
39
+ * Close a specific tenant's kernel and remove it from the pool.
40
+ */
41
+ close(tenantId: string): void;
42
+ /**
43
+ * Close all kernels and clear the pool.
44
+ */
45
+ closeAll(): void;
46
+ /**
47
+ * Return the SQLite file path for a given tenant.
48
+ */
49
+ dbFilePath(tenantId?: string | null): string;
50
+ private _createKernel;
51
+ private _ensureDirs;
52
+ }
53
+ //# sourceMappingURL=tenancy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenancy.d.ts","sourceRoot":"","sources":["../../src/server/tenancy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAOjE,eAAO,MAAM,cAAc,YAAY,CAAC;AAOxC;;;;;;GAMG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAyC;IACrD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,MAAM,EAAE,OAAO,SAAe;IAUlD;;;OAGG;IACH,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,aAAa;IAQ5C;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ7B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAOhB;;OAEG;IACH,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;IAY5C,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,WAAW;CASpB"}
@@ -0,0 +1,11 @@
1
+ // @bun
2
+ import {
3
+ startServer
4
+ } from "./index-xr7rx360.js";
5
+ import"./index-n9f2qyh5.js";
6
+ import"./index-5bhe57y9.js";
7
+ import"./index-yp88he8n.js";
8
+ import"./index-a76rekgs.js";
9
+ export {
10
+ startServer
11
+ };
@@ -0,0 +1,47 @@
1
+ /**
2
+ * HTTP Sync Transport
3
+ *
4
+ * Implements SyncTransport over HTTP for network-based peer sync.
5
+ * Uses a simple JSON REST protocol:
6
+ * POST /sync/message — send a sync message
7
+ * GET /sync/peers — list connected peers
8
+ *
9
+ * The server side is a lightweight Bun HTTP server.
10
+ * The client side uses fetch() for outbound messages.
11
+ *
12
+ * @module trellis/sync
13
+ */
14
+ import type { SyncTransport, SyncMessage, PeerId } from './types.js';
15
+ export declare class HttpSyncTransport implements SyncTransport {
16
+ private localPeerId;
17
+ private peerUrls;
18
+ private messageHandler;
19
+ private knownPeers;
20
+ constructor(localPeerId: string);
21
+ /**
22
+ * Add a remote peer by URL (e.g. "http://192.168.1.10:4200").
23
+ */
24
+ addPeer(peerId: string, url: string, name?: string): void;
25
+ /**
26
+ * Remove a remote peer.
27
+ */
28
+ removePeer(peerId: string): void;
29
+ send(peerId: string, message: SyncMessage): Promise<void>;
30
+ onMessage(handler: (message: SyncMessage) => void): void;
31
+ /**
32
+ * Receive a message (called by the HTTP server handler).
33
+ */
34
+ receiveMessage(message: SyncMessage): void;
35
+ peers(): PeerId[];
36
+ getLocalPeerId(): string;
37
+ }
38
+ export interface HttpSyncServerConfig {
39
+ port: number;
40
+ transport: HttpSyncTransport;
41
+ }
42
+ /**
43
+ * Create a Bun-compatible HTTP request handler for sync messages.
44
+ * Can be used with Bun.serve() or as middleware.
45
+ */
46
+ export declare function createSyncHandler(transport: HttpSyncTransport): (req: Request) => Response | null;
47
+ //# sourceMappingURL=http-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../../src/sync/http-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAMrE,qBAAa,iBAAkB,YAAW,aAAa;IACrD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,UAAU,CAAkC;gBAExC,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IASzD;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB/D,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAIxD;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAa1C,KAAK,IAAI,MAAM,EAAE;IAIjB,cAAc,IAAI,MAAM;CAGzB;AAMD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,iBAAiB,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,QAAQ,GAAG,IAAI,CA2BjG"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Sync Module — Public Surface
3
+ *
4
+ * @module sync
5
+ *
6
+ * Re-exports the CRDT {@link reconcile|reconciler}, {@link SyncEngine} for
7
+ * the have→want→ops→ack protocol, and {@link MemoryTransport} for testing.
8
+ * Branch policies control whether sync uses linear (fast-forward) or
9
+ * CRDT (concurrent append) mode.
10
+ *
11
+ * @see DESIGN.md §3.5 for the branch concurrency model.
12
+ */
13
+ export type { PeerId, SyncMessage, SyncHaveMessage, SyncWantMessage, SyncOpsMessage, SyncAckMessage, SyncState, BranchPolicy, SyncTransport, } from './types.js';
14
+ export { reconcile, findForkPoint } from './reconciler.js';
15
+ export type { ReconcileResult, ReconcileConflict } from './reconciler.js';
16
+ export { SyncEngine } from './sync-engine.js';
17
+ export { MemoryTransport } from './memory-transport.js';
18
+ export { HttpSyncTransport, createSyncHandler } from './http-transport.js';
19
+ export { WebSocketSyncTransport } from './ws-transport.js';
20
+ export { MultiRepoManager, parseCrossRepoRef, formatCrossRepoRef, } from './multi-repo.js';
21
+ export type { LinkedRepo, CrossRepoRef } from './multi-repo.js';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,YAAY,EACV,MAAM,EACN,WAAW,EACX,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,SAAS,EACT,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE3D,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * In-Memory Sync Transport
3
+ *
4
+ * A simple in-memory transport for testing and local multi-engine sync.
5
+ * Messages are delivered synchronously between connected peers.
6
+ */
7
+ import type { SyncTransport, SyncMessage, PeerId } from './types.js';
8
+ export declare class MemoryTransport implements SyncTransport {
9
+ private peerId;
10
+ private peerName;
11
+ private handlers;
12
+ private connectedPeers;
13
+ constructor(peerId: string, peerName?: string);
14
+ /**
15
+ * Connect two transports so they can exchange messages.
16
+ */
17
+ static connect(a: MemoryTransport, b: MemoryTransport): void;
18
+ /**
19
+ * Disconnect two transports.
20
+ */
21
+ static disconnect(a: MemoryTransport, b: MemoryTransport): void;
22
+ send(peerId: string, message: SyncMessage): Promise<void>;
23
+ onMessage(handler: (message: SyncMessage) => void): void;
24
+ peers(): PeerId[];
25
+ getPeerId(): string;
26
+ }
27
+ //# sourceMappingURL=memory-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-transport.d.ts","sourceRoot":"","sources":["../../src/sync/memory-transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAMrE,qBAAa,eAAgB,YAAW,aAAa;IACnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,cAAc,CAA2C;gBAErD,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAe;IAKrD;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,GAAG,IAAI;IAK5D;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,GAAG,IAAI;IAKzD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/D,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAIxD,KAAK,IAAI,MAAM,EAAE;IAOjB,SAAS,IAAI,MAAM;CAGpB"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Multi-Repo Linking — Cross-repo entity references.
3
+ *
4
+ * Enables entities in one Trellis repo to reference entities in another.
5
+ * Linked repos are registered with a local alias and remote path/URL.
6
+ * Cross-repo references use the format: `@alias:entityId`
7
+ *
8
+ * @module trellis/sync
9
+ */
10
+ import type { TrellisKernel } from '../core/kernel/trellis-kernel.js';
11
+ import type { Link } from '../core/store/eav-store.js';
12
+ export interface LinkedRepo {
13
+ /** Local alias for the remote repo (e.g. "backend", "shared-lib"). */
14
+ alias: string;
15
+ /** Path or URL to the remote repo. */
16
+ location: string;
17
+ /** Optional human-readable description. */
18
+ description?: string;
19
+ /** When this link was established. */
20
+ linkedAt: string;
21
+ /** Last sync timestamp. */
22
+ lastSyncedAt?: string;
23
+ }
24
+ export interface CrossRepoRef {
25
+ /** The repo alias. */
26
+ repoAlias: string;
27
+ /** The entity ID in the remote repo. */
28
+ entityId: string;
29
+ }
30
+ export declare class MultiRepoManager {
31
+ private kernel;
32
+ constructor(kernel: TrellisKernel);
33
+ /**
34
+ * Link a remote repository.
35
+ */
36
+ linkRepo(alias: string, location: string, description?: string): Promise<void>;
37
+ /**
38
+ * Unlink a remote repository.
39
+ */
40
+ unlinkRepo(alias: string): Promise<void>;
41
+ /**
42
+ * List all linked repos.
43
+ */
44
+ listLinkedRepos(): LinkedRepo[];
45
+ /**
46
+ * Get a linked repo by alias.
47
+ */
48
+ getLinkedRepo(alias: string): LinkedRepo | null;
49
+ /**
50
+ * Create a cross-repo link: entity in this repo → entity in remote repo.
51
+ */
52
+ addCrossRepoLink(sourceEntityId: string, attribute: string, targetRepoAlias: string, targetEntityId: string): Promise<void>;
53
+ /**
54
+ * Remove a cross-repo link.
55
+ */
56
+ removeCrossRepoLink(sourceEntityId: string, attribute: string, targetRepoAlias: string, targetEntityId: string): Promise<void>;
57
+ /**
58
+ * Find all cross-repo references from a given entity.
59
+ */
60
+ getCrossRepoLinks(entityId: string): Array<{
61
+ attribute: string;
62
+ ref: CrossRepoRef;
63
+ }>;
64
+ /**
65
+ * Find all cross-repo references pointing to a specific remote entity.
66
+ */
67
+ findReferencesTo(repoAlias: string, entityId: string): Link[];
68
+ /**
69
+ * Update the lastSyncedAt timestamp for a linked repo.
70
+ */
71
+ markSynced(alias: string): Promise<void>;
72
+ }
73
+ /**
74
+ * Parse a cross-repo reference string.
75
+ * Format: `@alias:entityId`
76
+ */
77
+ export declare function parseCrossRepoRef(ref: string): CrossRepoRef | null;
78
+ /**
79
+ * Format a cross-repo reference string.
80
+ */
81
+ export declare function formatCrossRepoRef(repoAlias: string, entityId: string): string;
82
+ //# sourceMappingURL=multi-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-repo.d.ts","sourceRoot":"","sources":["../../src/sync/multi-repo.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAQ,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAM7D,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAIjC;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAepF;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C;;OAEG;IACH,eAAe,IAAI,UAAU,EAAE;IAc/B;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAa/C;;OAEG;IACG,gBAAgB,CACpB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IAUhB;;OAEG;IACG,mBAAmB,CACvB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IAKhB;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,YAAY,CAAA;KAAE,CAAC;IAgBpF;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE;IAM7D;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK/C;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE9E"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * CRDT Reconciler
3
+ *
4
+ * DESIGN.md §10.5 — Merges divergent op streams using causal ordering.
5
+ * Each device maintains its own causal chain. The reconciler merges
6
+ * divergent chains by:
7
+ * 1. Finding the common ancestor (fork point)
8
+ * 2. Collecting ops unique to each side
9
+ * 3. Topologically sorting the combined set by causal dependencies
10
+ * 4. Detecting conflicts using patch commutativity (§4.4)
11
+ */
12
+ import type { VcsOp } from '../vcs/types.js';
13
+ export interface ReconcileResult {
14
+ /** The merged op stream in causal order. */
15
+ merged: VcsOp[];
16
+ /** Ops that were only on side A. */
17
+ uniqueToA: VcsOp[];
18
+ /** Ops that were only on side B. */
19
+ uniqueToB: VcsOp[];
20
+ /** Common ancestor op hash (fork point). */
21
+ forkPoint: string | null;
22
+ /** Whether the merge was clean (no causal conflicts). */
23
+ clean: boolean;
24
+ /** Conflicting op pairs (both modify same file without commutativity). */
25
+ conflicts: ReconcileConflict[];
26
+ }
27
+ export interface ReconcileConflict {
28
+ opA: VcsOp;
29
+ opB: VcsOp;
30
+ filePath: string;
31
+ reason: string;
32
+ }
33
+ /**
34
+ * Find the common ancestor (fork point) of two op streams.
35
+ * Returns the hash of the last op that appears in both streams.
36
+ */
37
+ export declare function findForkPoint(opsA: VcsOp[], opsB: VcsOp[]): string | null;
38
+ /**
39
+ * Reconcile two divergent op streams into a single merged stream.
40
+ *
41
+ * Algorithm:
42
+ * 1. Find the fork point (last common op)
43
+ * 2. Split each stream into shared prefix + unique suffix
44
+ * 3. Check for conflicts in the unique portions
45
+ * 4. Interleave unique ops in causal (timestamp) order
46
+ */
47
+ export declare function reconcile(opsA: VcsOp[], opsB: VcsOp[]): ReconcileResult;
48
+ //# sourceMappingURL=reconciler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconciler.d.ts","sourceRoot":"","sources":["../../src/sync/reconciler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAM7C,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,oCAAoC;IACpC,SAAS,EAAE,KAAK,EAAE,CAAC;IACnB,oCAAoC;IACpC,SAAS,EAAE,KAAK,EAAE,CAAC;IACnB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,yDAAyD;IACzD,KAAK,EAAE,OAAO,CAAC;IACf,0EAA0E;IAC1E,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,KAAK,CAAC;IACX,GAAG,EAAE,KAAK,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,IAAI,CAWzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,eAAe,CA8DvE"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Sync Engine
3
+ *
4
+ * DESIGN.md §10.5 — Peer sync protocol.
5
+ * Coordinates push/pull of ops between peers using a transport layer.
6
+ * Supports both linear (fast-forward only) and CRDT (concurrent append)
7
+ * branch modes.
8
+ */
9
+ import type { VcsOp } from '../vcs/types.js';
10
+ import type { SyncTransport, SyncState, PeerId, BranchPolicy } from './types.js';
11
+ import { type ReconcileResult } from './reconciler.js';
12
+ export declare class SyncEngine {
13
+ private localPeerId;
14
+ private state;
15
+ private transport;
16
+ private getLocalOps;
17
+ private onOpsReceived;
18
+ private branchPolicy;
19
+ constructor(opts: {
20
+ localPeerId: string;
21
+ transport: SyncTransport;
22
+ getLocalOps: () => VcsOp[];
23
+ onOpsReceived: (ops: VcsOp[]) => void;
24
+ branchPolicy?: BranchPolicy;
25
+ });
26
+ /**
27
+ * Initiate a sync with a specific peer.
28
+ * Sends a 'have' message advertising our heads.
29
+ */
30
+ pushTo(peerId: string): Promise<void>;
31
+ /**
32
+ * Request ops from a peer.
33
+ */
34
+ pullFrom(peerId: string): Promise<void>;
35
+ /**
36
+ * Send all our ops to a peer (full push).
37
+ */
38
+ sendOps(peerId: string, ops?: VcsOp[]): Promise<void>;
39
+ /**
40
+ * Reconcile our ops with a remote peer's ops.
41
+ */
42
+ reconcileWith(remoteOps: VcsOp[]): ReconcileResult;
43
+ /**
44
+ * Get current sync state.
45
+ */
46
+ getState(): SyncState;
47
+ /**
48
+ * Get branch policy.
49
+ */
50
+ getBranchPolicy(): BranchPolicy;
51
+ /**
52
+ * Set branch policy.
53
+ */
54
+ setBranchPolicy(policy: BranchPolicy): void;
55
+ /**
56
+ * List known peers.
57
+ */
58
+ listPeers(): PeerId[];
59
+ private handleMessage;
60
+ private handleHave;
61
+ private handleWant;
62
+ private handleOps;
63
+ private handleAck;
64
+ }
65
+ //# sourceMappingURL=sync-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-engine.d.ts","sourceRoot":"","sources":["../../src/sync/sync-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EACV,aAAa,EAEb,SAAS,EACT,MAAM,EACN,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAMjF,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,YAAY,CAAe;gBAEvB,IAAI,EAAE;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,aAAa,CAAC;QACzB,WAAW,EAAE,MAAM,KAAK,EAAE,CAAC;QAC3B,aAAa,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;QACtC,YAAY,CAAC,EAAE,YAAY,CAAC;KAC7B;IAsBD;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe3C;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7C;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3D;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,eAAe;IAKlD;;OAEG;IACH,QAAQ,IAAI,SAAS;IAIrB;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAI3C;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAQrB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,UAAU;IAmClB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,SAAS;IA+BjB,OAAO,CAAC,SAAS;CAMlB"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Peer Sync — Type Definitions
3
+ *
4
+ * DESIGN.md §3.5, §10.5 — Peer sync + CRDTs.
5
+ * Types for peer identity, sync messages, causal DAG, and
6
+ * branch concurrency modes.
7
+ */
8
+ import type { VcsOp } from '../vcs/types.js';
9
+ export interface PeerId {
10
+ /** Unique peer identifier (typically derived from identity DID). */
11
+ id: string;
12
+ /** Human-readable display name. */
13
+ name: string;
14
+ /** Last seen timestamp. */
15
+ lastSeen?: string;
16
+ }
17
+ export type SyncMessage = SyncHaveMessage | SyncWantMessage | SyncOpsMessage | SyncAckMessage;
18
+ /** Advertise which op hashes we have. */
19
+ export interface SyncHaveMessage {
20
+ type: 'have';
21
+ peerId: string;
22
+ /** Our head op hashes (one per branch). */
23
+ heads: Record<string, string>;
24
+ /** Total op count for quick comparison. */
25
+ opCount: number;
26
+ }
27
+ /** Request ops we're missing. */
28
+ export interface SyncWantMessage {
29
+ type: 'want';
30
+ peerId: string;
31
+ /** Op hashes we need (those the remote has but we don't). */
32
+ wantHashes: string[];
33
+ /** Alternatively: request all ops after a given hash. */
34
+ afterHash?: string;
35
+ }
36
+ /** Send a batch of ops. */
37
+ export interface SyncOpsMessage {
38
+ type: 'ops';
39
+ peerId: string;
40
+ ops: VcsOp[];
41
+ }
42
+ /** Acknowledge receipt. */
43
+ export interface SyncAckMessage {
44
+ type: 'ack';
45
+ peerId: string;
46
+ /** Hashes of ops we've integrated. */
47
+ integrated: string[];
48
+ }
49
+ export interface SyncState {
50
+ /** Our peer identity. */
51
+ localPeerId: string;
52
+ /** Known peers and their head hashes. */
53
+ peerHeads: Map<string, Record<string, string>>;
54
+ /** Ops we've sent but not yet acknowledged. */
55
+ pendingAcks: Set<string>;
56
+ /** Last sync timestamp per peer. */
57
+ lastSync: Map<string, string>;
58
+ }
59
+ export interface BranchPolicy {
60
+ /** If true, only fast-forward appends (one writer). Default. */
61
+ linear: boolean;
62
+ }
63
+ export interface SyncTransport {
64
+ /** Send a message to a specific peer. */
65
+ send(peerId: string, message: SyncMessage): Promise<void>;
66
+ /** Register a handler for incoming messages. */
67
+ onMessage(handler: (message: SyncMessage) => void): void;
68
+ /** List connected peers. */
69
+ peers(): PeerId[];
70
+ }
71
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAM7C,MAAM,WAAW,MAAM;IACrB,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IACX,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,MAAM,WAAW,GACnB,eAAe,GACf,eAAe,GACf,cAAc,GACd,cAAc,CAAC;AAEnB,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iCAAiC;AACjC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,KAAK,EAAE,CAAC;CACd;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAMD,MAAM,WAAW,SAAS;IACxB,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,+CAA+C;IAC/C,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,oCAAoC;IACpC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAMD,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,MAAM,EAAE,OAAO,CAAC;CACjB;AAMD,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,gDAAgD;IAChD,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAAC;IACzD,4BAA4B;IAC5B,KAAK,IAAI,MAAM,EAAE,CAAC;CACnB"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * WebSocket Sync Transport
3
+ *
4
+ * Implements SyncTransport over WebSocket for real-time peer sync.
5
+ * Uses Bun's native WebSocket support for both server and client.
6
+ *
7
+ * @module trellis/sync
8
+ */
9
+ import type { SyncTransport, SyncMessage, PeerId } from './types.js';
10
+ export declare class WebSocketSyncTransport implements SyncTransport {
11
+ private localPeerId;
12
+ private connections;
13
+ private knownPeers;
14
+ private messageHandler;
15
+ constructor(localPeerId: string);
16
+ /**
17
+ * Connect to a remote peer's WebSocket endpoint.
18
+ */
19
+ connect(peerId: string, url: string, name?: string): Promise<void>;
20
+ /**
21
+ * Accept an incoming WebSocket connection (server side).
22
+ */
23
+ acceptConnection(peerId: string, ws: WebSocket): void;
24
+ send(peerId: string, message: SyncMessage): Promise<void>;
25
+ onMessage(handler: (message: SyncMessage) => void): void;
26
+ peers(): PeerId[];
27
+ /**
28
+ * Disconnect from a peer.
29
+ */
30
+ disconnect(peerId: string): void;
31
+ /**
32
+ * Disconnect from all peers.
33
+ */
34
+ disconnectAll(): void;
35
+ /**
36
+ * Check if connected to a specific peer.
37
+ */
38
+ isConnected(peerId: string): boolean;
39
+ getLocalPeerId(): string;
40
+ }
41
+ //# sourceMappingURL=ws-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-transport.d.ts","sourceRoot":"","sources":["../../src/sync/ws-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAMrE,qBAAa,sBAAuB,YAAW,aAAa;IAC1D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAqC;IACxD,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,cAAc,CAA6C;gBAEvD,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCxE;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI;IA2B/C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAIxD,KAAK,IAAI,MAAM,EAAE;IAIjB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQhC;;OAEG;IACH,aAAa,IAAI,IAAI;IAOrB;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAKpC,cAAc,IAAI,MAAM;CAGzB"}
@@ -0,0 +1,13 @@
1
+ // @bun
2
+ import {
3
+ DEFAULT_TENANT,
4
+ TenantPool
5
+ } from "./index-5p6zgspx.js";
6
+ import"./index-7t92ej34.js";
7
+ import"./index-5bhe57y9.js";
8
+ import"./index-yp88he8n.js";
9
+ import"./index-a76rekgs.js";
10
+ export {
11
+ TenantPool,
12
+ DEFAULT_TENANT
13
+ };
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Trellis UI Server
3
+ *
4
+ * Lightweight Bun HTTP server that exposes the TrellisVCS engine
5
+ * as a JSON API and serves a single-file force-graph visualization.
6
+ *
7
+ * Endpoints:
8
+ * GET / → client.html
9
+ * GET /api/graph → full graph (nodes + edges)
10
+ * GET /api/search → semantic search (?q=...&limit=10&type=...)
11
+ * GET /api/node/:id → node detail
12
+ */
13
+ export interface GraphNode {
14
+ id: string;
15
+ label: string;
16
+ type: 'file' | 'milestone' | 'issue' | 'branch';
17
+ meta: Record<string, unknown>;
18
+ }
19
+ export interface GraphEdge {
20
+ source: string;
21
+ target: string;
22
+ type: 'milestone_file' | 'issue_branch' | 'wikilink' | 'causal';
23
+ label?: string;
24
+ }
25
+ export interface GraphData {
26
+ nodes: GraphNode[];
27
+ edges: GraphEdge[];
28
+ }
29
+ export interface UIServerOptions {
30
+ rootPath: string;
31
+ port?: number;
32
+ open?: boolean;
33
+ }
34
+ export declare function startUIServer(opts: UIServerOptions): Promise<{
35
+ port: number;
36
+ stop: () => void;
37
+ }>;
38
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/ui/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,gBAAgB,GAAG,cAAc,GAAG,UAAU,GAAG,QAAQ,CAAC;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAoOD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC,CAwID"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Content-Addressable Blob Store
3
+ *
4
+ * Stores file content indexed by SHA-256 hash. Provides the source of truth
5
+ * for file reconstruction at any point in history. The EAV graph stores
6
+ * structural metadata; the blob store stores byte-exact content.
7
+ *
8
+ * Storage format: `.trellis/blobs/{hash}` files on disk.
9
+ * Future: migrate to SQLite `blobs(hash TEXT PRIMARY KEY, content BLOB)`.
10
+ */
11
+ export declare class BlobStore {
12
+ private blobDir;
13
+ constructor(trellisDir: string);
14
+ /**
15
+ * Store content and return its SHA-256 hash.
16
+ * Idempotent — storing the same content twice is a no-op.
17
+ */
18
+ put(content: Buffer | Uint8Array): Promise<string>;
19
+ /**
20
+ * Synchronous put — uses Bun's sync crypto if available.
21
+ */
22
+ putSync(content: Buffer | Uint8Array): string;
23
+ /**
24
+ * Retrieve content by hash. Returns null if not found.
25
+ */
26
+ get(hash: string): Buffer | null;
27
+ /**
28
+ * Check if a blob exists.
29
+ */
30
+ has(hash: string): boolean;
31
+ /**
32
+ * Compute SHA-256 hash of content (async).
33
+ */
34
+ hash(content: Buffer | Uint8Array): Promise<string>;
35
+ /**
36
+ * Compute SHA-256 hash of content (sync, using Bun's CryptoHasher).
37
+ */
38
+ hashSync(content: Buffer | Uint8Array): string;
39
+ /**
40
+ * Returns the number of blobs stored.
41
+ */
42
+ count(): number;
43
+ /**
44
+ * Returns the total size of all blobs in bytes.
45
+ */
46
+ totalSize(): number;
47
+ private hexFromBuffer;
48
+ }
49
+ //# sourceMappingURL=blob-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blob-store.d.ts","sourceRoot":"","sources":["../../src/vcs/blob-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;gBAEZ,UAAU,EAAE,MAAM;IAO9B;;;OAGG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IASxD;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM;IAS7C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQhC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAQzD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM;IAM9C;;OAEG;IACH,KAAK,IAAI,MAAM;IASf;;OAEG;IACH,SAAS,IAAI,MAAM;IAgBnB,OAAO,CAAC,aAAa;CAKtB"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Branch Management Module
3
+ *
4
+ * Extracted from engine.ts per DESIGN.md §8.1.
5
+ * Handles create, switch, list, delete branch operations.
6
+ */
7
+ import type { VcsOp } from './types.js';
8
+ import type { EngineContext } from './engine-context.js';
9
+ export interface BranchInfo {
10
+ name: string;
11
+ isCurrent: boolean;
12
+ createdAt?: string;
13
+ }
14
+ export interface BranchState {
15
+ currentBranch: string;
16
+ }
17
+ /**
18
+ * Create a new branch forked from the current branch.
19
+ */
20
+ export declare function createBranch(ctx: EngineContext, name: string, currentBranch: string): Promise<VcsOp>;
21
+ /**
22
+ * Switch to an existing branch.
23
+ */
24
+ export declare function switchBranch(ctx: EngineContext, name: string): void;
25
+ /**
26
+ * List all branches.
27
+ */
28
+ export declare function listBranches(ctx: EngineContext, currentBranch: string): BranchInfo[];
29
+ /**
30
+ * Delete a branch (cannot delete the current branch).
31
+ */
32
+ export declare function deleteBranch(ctx: EngineContext, name: string, currentBranch: string): Promise<VcsOp>;
33
+ export declare function saveBranchState(rootPath: string, state: BranchState): void;
34
+ export declare function loadBranchState(rootPath: string): BranchState;
35
+ //# sourceMappingURL=branch.d.ts.map