trellis 3.1.35 → 3.2.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 (287) hide show
  1. package/CHANGELOG.md +23 -5
  2. package/README.md +63 -156
  3. package/bin/trellis.mjs +2 -75
  4. package/dist/{better-sqlite-backend-ahx5p0br.js → better-sqlite-backend-2P4F6AOJ.js} +91 -29
  5. package/dist/boot-middleware-MHLHFCUC.js +9 -0
  6. package/dist/browser/index.d.ts +18 -0
  7. package/dist/browser/index.d.ts.map +1 -0
  8. package/dist/browser/index.js +95 -0
  9. package/dist/{index-53f3b8p8.js → chunk-2W3MHTMG.js} +552 -213
  10. package/dist/chunk-44FFQKQX.js +142 -0
  11. package/dist/chunk-4HYPLFJD.js +150 -0
  12. package/dist/chunk-4XIVMVHC.js +361 -0
  13. package/dist/{index-yp88he8n.js → chunk-6CTA6MCE.js} +88 -64
  14. package/dist/chunk-6GEZ6DN5.js +394 -0
  15. package/dist/chunk-7ZFRVCUE.js +211 -0
  16. package/dist/chunk-CAG4FULI.js +121 -0
  17. package/dist/chunk-FF36CQHZ.js +61 -0
  18. package/dist/{index-h32txmxe.js → chunk-FKQO5A3H.js} +6 -13
  19. package/dist/{index-nq520y6k.js → chunk-FWRS4CSC.js} +46 -32
  20. package/dist/chunk-GFZCJ4EH.js +108 -0
  21. package/dist/chunk-GLM4HGN4.js +55 -0
  22. package/dist/{index-4cdr7x2x.js → chunk-GU374KWZ.js} +182 -111
  23. package/dist/chunk-H6JB3PZ3.js +45 -0
  24. package/dist/chunk-IZX2PLIB.js +1240 -0
  25. package/dist/chunk-J2TXUFCZ.js +289 -0
  26. package/dist/chunk-J3WYZO3Q.js +211 -0
  27. package/dist/{index-xzym9w0m.js → chunk-JA7AIHRK.js} +12 -7
  28. package/dist/chunk-JHHEXEDM.js +162 -0
  29. package/dist/chunk-JUEMDWLU.js +233 -0
  30. package/dist/chunk-KFQGP6VL.js +33 -0
  31. package/dist/chunk-KIJITUZB.js +419 -0
  32. package/dist/{index-4wxa8xz4.js → chunk-KQ4A2D2P.js} +162 -23
  33. package/dist/chunk-KSU2GW22.js +958 -0
  34. package/dist/{index-rv1p47gp.js → chunk-L5N5PR2S.js} +3015 -2480
  35. package/dist/{index-h9e2efx4.js → chunk-LNUIGRDZ.js} +71 -55
  36. package/dist/{index-skhn0agf.js → chunk-MLC5BUYO.js} +19 -20
  37. package/dist/chunk-MPXUVGT3.js +104 -0
  38. package/dist/chunk-N6MYZT4O.js +68 -0
  39. package/dist/chunk-O2AV5WMN.js +48 -0
  40. package/dist/chunk-PZ4XYZ4J.js +143 -0
  41. package/dist/chunk-QB5ISE47.js +419 -0
  42. package/dist/chunk-RSWUFTO2.js +857 -0
  43. package/dist/chunk-S3XLFZ27.js +1095 -0
  44. package/dist/{index-w5wccer3.js → chunk-S6GBJ2ZB.js} +28 -12
  45. package/dist/{index-7pjz3tsy.js → chunk-SGMDTWJJ.js} +57 -15
  46. package/dist/chunk-SPSPV5BC.js +390 -0
  47. package/dist/chunk-TCKXSOBP.js +123 -0
  48. package/dist/chunk-UBGUDMUV.js +59 -0
  49. package/dist/{index-wt8rz4gn.js → chunk-UQISRW6T.js} +97 -26
  50. package/dist/chunk-USEINYUL.js +12 -0
  51. package/dist/{index-bmyt7k8n.js → chunk-UZRUP7QW.js} +12 -4
  52. package/dist/{index-xhcp6xrn.js → chunk-VBYUTRXX.js} +695 -514
  53. package/dist/{index-vkpkfwhq.js → chunk-VDAKEOML.js} +234 -194
  54. package/dist/chunk-WXSWA3MV.js +0 -0
  55. package/dist/{index-n9f2qyh5.js → chunk-X5FLTRUB.js} +55 -33
  56. package/dist/{index-h7zxhhhh.js → chunk-XMQ7G77X.js} +46 -38
  57. package/dist/{index-w7ng765c.js → chunk-YCM7ZYEZ.js} +102 -49
  58. package/dist/cli/deploy-cli.d.ts +18 -0
  59. package/dist/cli/deploy-cli.d.ts.map +1 -0
  60. package/dist/cli/errors.d.ts +6 -0
  61. package/dist/cli/errors.d.ts.map +1 -0
  62. package/dist/cli/examples.d.ts +23 -0
  63. package/dist/cli/examples.d.ts.map +1 -0
  64. package/dist/cli/index.d.ts +1 -1
  65. package/dist/cli/index.d.ts.map +1 -1
  66. package/dist/cli/index.js +2426 -6225
  67. package/dist/client/index.browser.d.ts +29 -0
  68. package/dist/client/index.browser.d.ts.map +1 -0
  69. package/dist/client/index.browser.js +64 -0
  70. package/dist/client/index.d.ts +6 -1
  71. package/dist/client/index.d.ts.map +1 -1
  72. package/dist/client/index.js +41 -21
  73. package/dist/client/live.d.ts +67 -0
  74. package/dist/client/live.d.ts.map +1 -0
  75. package/dist/client/reactive.d.ts +31 -0
  76. package/dist/client/reactive.d.ts.map +1 -0
  77. package/dist/client/sdk.browser.d.ts +104 -0
  78. package/dist/client/sdk.browser.d.ts.map +1 -0
  79. package/dist/client/sdk.browser.js +9 -0
  80. package/dist/client/sdk.d.ts +26 -2
  81. package/dist/client/sdk.d.ts.map +1 -1
  82. package/dist/client/sdk.js +9 -0
  83. package/dist/client/vcs-client.d.ts +129 -0
  84. package/dist/client/vcs-client.d.ts.map +1 -0
  85. package/dist/cms/index.js +171 -163
  86. package/dist/{config-8hczw0rs.js → config-PFTP67TR.js} +8 -9
  87. package/dist/core/computation/index.d.ts +5 -0
  88. package/dist/core/computation/index.d.ts.map +1 -0
  89. package/dist/core/computation/rollup.d.ts +18 -0
  90. package/dist/core/computation/rollup.d.ts.map +1 -0
  91. package/dist/core/index.d.ts +5 -0
  92. package/dist/core/index.d.ts.map +1 -1
  93. package/dist/core/index.js +171 -104
  94. package/dist/core/kernel/boot-middleware.d.ts +10 -0
  95. package/dist/core/kernel/boot-middleware.d.ts.map +1 -0
  96. package/dist/core/kernel/logic-middleware.d.ts +7 -1
  97. package/dist/core/kernel/logic-middleware.d.ts.map +1 -1
  98. package/dist/core/kernel/trellis-kernel.d.ts.map +1 -1
  99. package/dist/core/ontology/types.d.ts +5 -0
  100. package/dist/core/ontology/types.d.ts.map +1 -1
  101. package/dist/core/persist/better-sqlite-backend.d.ts +9 -2
  102. package/dist/core/persist/better-sqlite-backend.d.ts.map +1 -1
  103. package/dist/core/persist/factory.d.ts +6 -7
  104. package/dist/core/persist/factory.d.ts.map +1 -1
  105. package/dist/core/persist/factory.js +2 -3
  106. package/dist/core/persist/sqljs-backend.js +2 -3
  107. package/dist/db/index.d.ts +4 -1
  108. package/dist/db/index.d.ts.map +1 -1
  109. package/dist/db/index.js +67 -54
  110. package/dist/db/inspector.js +11 -19
  111. package/dist/db/trellis.css +1 -1
  112. package/dist/decisions/index.js +9 -10
  113. package/dist/deploy-LQ7GUGJ5.js +9 -0
  114. package/dist/deploy-YNVG5E4E.js +9 -0
  115. package/dist/deploy-cli-24BCHAXY.js +67 -0
  116. package/dist/deploy-cli-C35HTITO.js +67 -0
  117. package/dist/embeddings/auto-embed.d.ts +2 -2
  118. package/dist/embeddings/auto-embed.d.ts.map +1 -1
  119. package/dist/embeddings/index.js +20 -22
  120. package/dist/embeddings/search.d.ts +2 -1
  121. package/dist/embeddings/search.d.ts.map +1 -1
  122. package/dist/embeddings/store.d.ts +25 -4
  123. package/dist/embeddings/store.d.ts.map +1 -1
  124. package/dist/engine.d.ts +59 -19
  125. package/dist/engine.d.ts.map +1 -1
  126. package/dist/import-UZEKXU3B.js +10 -0
  127. package/dist/index.js +102 -93
  128. package/dist/launch-explorer-HZ4ZJA4X.js +95 -0
  129. package/dist/links/index.js +24 -26
  130. package/dist/mcp/server.d.ts.map +1 -1
  131. package/dist/plugins/agent-memory/index.js +316 -0
  132. package/dist/plugins/idea-garden/index.js +165 -0
  133. package/dist/plugins/plan-approval/index.js +579 -0
  134. package/dist/plugins/proactive-watcher/index.js +194 -0
  135. package/dist/{index-2r4jxwnb.js → query-XYLTJYSA.js} +14 -15
  136. package/dist/react/index.js +39 -70
  137. package/dist/react/realtime.js +11 -0
  138. package/dist/react/schema-hooks.js +87 -0
  139. package/dist/realtime/broadcast-channel-transport.d.ts +43 -0
  140. package/dist/realtime/broadcast-channel-transport.d.ts.map +1 -0
  141. package/dist/realtime/durable-object-relay-transport.d.ts +96 -0
  142. package/dist/realtime/durable-object-relay-transport.d.ts.map +1 -0
  143. package/dist/realtime/index.d.ts +44 -0
  144. package/dist/realtime/index.d.ts.map +1 -0
  145. package/dist/realtime/index.js +40 -0
  146. package/dist/realtime/memory-hub.d.ts +32 -0
  147. package/dist/realtime/memory-hub.d.ts.map +1 -0
  148. package/dist/realtime/persistent-channel.d.ts +105 -0
  149. package/dist/realtime/persistent-channel.d.ts.map +1 -0
  150. package/dist/realtime/presence.d.ts +73 -0
  151. package/dist/realtime/presence.d.ts.map +1 -0
  152. package/dist/realtime/relay-persistence.d.ts +37 -0
  153. package/dist/realtime/relay-persistence.d.ts.map +1 -0
  154. package/dist/realtime/relay-persistence.js +107 -0
  155. package/dist/realtime/relay-server.d.ts +103 -0
  156. package/dist/realtime/relay-server.d.ts.map +1 -0
  157. package/dist/realtime/room.d.ts +98 -0
  158. package/dist/realtime/room.d.ts.map +1 -0
  159. package/dist/realtime/text.d.ts +73 -0
  160. package/dist/realtime/text.d.ts.map +1 -0
  161. package/dist/realtime/types.d.ts +89 -0
  162. package/dist/realtime/types.d.ts.map +1 -0
  163. package/dist/realtime/websocket-relay-transport.d.ts +28 -0
  164. package/dist/realtime/websocket-relay-transport.d.ts.map +1 -0
  165. package/dist/realtime.bundle.js +1100 -0
  166. package/dist/{remote-manager-xvbg4230.js → remote-manager-ODE3T2KR.js} +25 -15
  167. package/dist/scaffold/seed.d.ts.map +1 -1
  168. package/dist/scaffold/write.d.ts +1 -1
  169. package/dist/scaffold/write.d.ts.map +1 -1
  170. package/dist/schema/define.d.ts +137 -0
  171. package/dist/schema/define.d.ts.map +1 -0
  172. package/dist/schema/entity-projection.d.ts +34 -0
  173. package/dist/schema/entity-projection.d.ts.map +1 -0
  174. package/dist/schema/eql.d.ts +46 -0
  175. package/dist/schema/eql.d.ts.map +1 -0
  176. package/dist/schema/index.d.ts +21 -0
  177. package/dist/schema/index.d.ts.map +1 -0
  178. package/dist/schema/index.js +46 -0
  179. package/dist/schema/kernel-resolve.d.ts +21 -0
  180. package/dist/schema/kernel-resolve.d.ts.map +1 -0
  181. package/dist/schema/mutations.d.ts +20 -0
  182. package/dist/schema/mutations.d.ts.map +1 -0
  183. package/dist/schema/resolve.d.ts +21 -0
  184. package/dist/schema/resolve.d.ts.map +1 -0
  185. package/dist/server/deploy-meta.d.ts +25 -0
  186. package/dist/server/deploy-meta.d.ts.map +1 -0
  187. package/dist/server/deploy.d.ts +7 -2
  188. package/dist/server/deploy.d.ts.map +1 -1
  189. package/dist/server/index.d.ts +7 -2
  190. package/dist/server/index.d.ts.map +1 -1
  191. package/dist/server/index.js +100 -58
  192. package/dist/server/node-adapter.js +5 -104
  193. package/dist/server/realtime.d.ts +14 -3
  194. package/dist/server/realtime.d.ts.map +1 -1
  195. package/dist/server/server.d.ts +8 -16
  196. package/dist/server/server.d.ts.map +1 -1
  197. package/dist/server/sprites.d.ts +18 -1
  198. package/dist/server/sprites.d.ts.map +1 -1
  199. package/dist/server/tenancy.d.ts +4 -0
  200. package/dist/server/tenancy.d.ts.map +1 -1
  201. package/dist/server/usage-meter.d.ts +53 -0
  202. package/dist/server/usage-meter.d.ts.map +1 -0
  203. package/dist/server-MB3OPSPI.js +18 -0
  204. package/dist/server-ZVWGLLRF.js +18 -0
  205. package/dist/sprites-KQGTGM6W.js +27 -0
  206. package/dist/{sprites-vc4qbrp1.js → sprites-RU3E4XQN.js} +6 -7
  207. package/dist/svelte/index.d.ts +17 -0
  208. package/dist/svelte/index.d.ts.map +1 -0
  209. package/dist/svelte/index.js +51 -0
  210. package/dist/svelte/schema-hooks.d.ts +45 -0
  211. package/dist/svelte/schema-hooks.d.ts.map +1 -0
  212. package/dist/svelte/schema-hooks.js +71 -0
  213. package/dist/svelte/stores.d.ts +78 -0
  214. package/dist/svelte/stores.d.ts.map +1 -0
  215. package/dist/sync/http-transport.d.ts +3 -3
  216. package/dist/sync/http-transport.d.ts.map +1 -1
  217. package/dist/sync/index.d.ts +15 -1
  218. package/dist/sync/index.d.ts.map +1 -1
  219. package/dist/sync/index.js +617 -0
  220. package/dist/sync/memory-room.d.ts +37 -0
  221. package/dist/sync/memory-room.d.ts.map +1 -0
  222. package/dist/sync/memory-transport.d.ts +3 -3
  223. package/dist/sync/memory-transport.d.ts.map +1 -1
  224. package/dist/sync/partykit-room.d.ts +40 -0
  225. package/dist/sync/partykit-room.d.ts.map +1 -0
  226. package/dist/sync/partykit-transport.d.ts +84 -0
  227. package/dist/sync/partykit-transport.d.ts.map +1 -0
  228. package/dist/sync/room-core.d.ts +53 -0
  229. package/dist/sync/room-core.d.ts.map +1 -0
  230. package/dist/sync/sync-engine.d.ts +40 -2
  231. package/dist/sync/sync-engine.d.ts.map +1 -1
  232. package/dist/sync/sync-room-server.d.ts +39 -0
  233. package/dist/sync/sync-room-server.d.ts.map +1 -0
  234. package/dist/sync/types.d.ts +70 -3
  235. package/dist/sync/types.d.ts.map +1 -1
  236. package/dist/sync/vcs-sync-peer.d.ts +63 -0
  237. package/dist/sync/vcs-sync-peer.d.ts.map +1 -0
  238. package/dist/sync/ws-transport.d.ts +2 -2
  239. package/dist/sync/ws-transport.d.ts.map +1 -1
  240. package/dist/tenancy-NBLLGCNJ.js +14 -0
  241. package/dist/tenancy-POMWQP6M.js +16 -0
  242. package/dist/ui/client.html +355 -67
  243. package/dist/ui/launch-explorer.d.ts +22 -0
  244. package/dist/ui/launch-explorer.d.ts.map +1 -0
  245. package/dist/ui/server.d.ts +1 -1
  246. package/dist/ui/server.d.ts.map +1 -1
  247. package/dist/vcs/blob-store.d.ts.map +1 -1
  248. package/dist/vcs/idb-op-log.d.ts +67 -0
  249. package/dist/vcs/idb-op-log.d.ts.map +1 -0
  250. package/dist/vcs/index.d.ts +1 -0
  251. package/dist/vcs/index.d.ts.map +1 -1
  252. package/dist/vcs/index.js +81 -72
  253. package/dist/vcs/issue.d.ts +22 -5
  254. package/dist/vcs/issue.d.ts.map +1 -1
  255. package/dist/vcs/lane-materialize.d.ts +5 -0
  256. package/dist/vcs/lane-materialize.d.ts.map +1 -1
  257. package/dist/vcs/op-log.d.ts +28 -2
  258. package/dist/vcs/op-log.d.ts.map +1 -1
  259. package/dist/vcs/ops.d.ts +10 -0
  260. package/dist/vcs/ops.d.ts.map +1 -1
  261. package/dist/vcs/types.d.ts +2 -0
  262. package/dist/vcs/types.d.ts.map +1 -1
  263. package/dist/{vm-config-6xhsj6b3.js → vm-config-JI4OXKDQ.js} +9 -10
  264. package/dist/vue/hooks.d.ts +64 -0
  265. package/dist/vue/hooks.d.ts.map +1 -0
  266. package/dist/vue/index.d.ts +19 -0
  267. package/dist/vue/index.d.ts.map +1 -0
  268. package/dist/vue/index.js +59 -0
  269. package/dist/vue/schema-hooks.d.ts +41 -0
  270. package/dist/vue/schema-hooks.d.ts.map +1 -0
  271. package/dist/vue/schema-hooks.js +64 -0
  272. package/package.json +130 -17
  273. package/dist/deploy-999q207z.js +0 -10
  274. package/dist/engine-y0724kjq.js +0 -8
  275. package/dist/import-s2b8e0ft.js +0 -11
  276. package/dist/index-a76rekgs.js +0 -67
  277. package/dist/index-c9h37r6h.js +0 -1
  278. package/dist/index-hr9qvv77.js +0 -860
  279. package/dist/index-k5b0xskw.js +0 -1
  280. package/dist/index-nzb3am4f.js +0 -80
  281. package/dist/index-wncptktd.js +0 -292
  282. package/dist/index-y6a4kj0p.js +0 -43
  283. package/dist/index-yhwjgfvj.js +0 -342
  284. package/dist/sdk-bepky0xs.js +0 -16
  285. package/dist/server-szdjx0nt.js +0 -13
  286. package/dist/sqlite-backend-0vsmc6qj.js +0 -8
  287. package/dist/tenancy-pjm32b4v.js +0 -14
@@ -0,0 +1,40 @@
1
+ /**
2
+ * PartyKit / Durable Object room handler for Trellis sync.
3
+ *
4
+ * Deploy as a PartyKit server module:
5
+ *
6
+ * import { createPartyKitRoomHandler } from 'trellis/sync/partykit-room';
7
+ * export default createPartyKitRoomHandler();
8
+ *
9
+ * Clients connect with `?peerId=<id>` (required) and optional `?token=`.
10
+ */
11
+ /** Minimal PartyKit room surface (avoids a hard dependency on `partykit`). */
12
+ export interface PartyKitRoomLike {
13
+ id: string;
14
+ getConnection(id: string): PartyKitConnectionLike | undefined;
15
+ getConnections(): Iterable<PartyKitConnectionLike>;
16
+ }
17
+ export interface PartyKitConnectionLike {
18
+ id: string;
19
+ send(data: string): void;
20
+ close(code?: number, reason?: string): void;
21
+ }
22
+ export interface PartyKitRoomHandlerOptions {
23
+ welcomeSnapshot?: boolean;
24
+ welcomeSnapshotMaxOps?: number;
25
+ }
26
+ /**
27
+ * PartyKit `onConnect` / `onMessage` helpers backed by {@link SyncRoomServer}.
28
+ */
29
+ export declare function createPartyKitRoomHandler(opts?: PartyKitRoomHandlerOptions): {
30
+ onConnect(connection: PartyKitConnectionLike, room: PartyKitRoomLike, request?: {
31
+ url?: string;
32
+ }): Promise<void>;
33
+ onMessage(message: string | ArrayBuffer, connection: PartyKitConnectionLike, room: PartyKitRoomLike, request?: {
34
+ url?: string;
35
+ }): Promise<void>;
36
+ onClose(connection: PartyKitConnectionLike, room: PartyKitRoomLike, request?: {
37
+ url?: string;
38
+ }): void;
39
+ };
40
+ //# sourceMappingURL=partykit-room.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partykit-room.d.ts","sourceRoot":"","sources":["../../src/sync/partykit-room.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAAC;IAC9D,cAAc,IAAI,QAAQ,CAAC,sBAAsB,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,GAAE,0BAA+B;0BAkCrB,sBAAsB,QAC5B,gBAAgB,YACZ;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACzB,OAAO,CAAC,IAAI,CAAC;uBAeL,MAAM,GAAG,WAAW,cACjB,sBAAsB,QAC5B,gBAAgB,YACZ;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACzB,OAAO,CAAC,IAAI,CAAC;wBAkBF,sBAAsB,QAC5B,gBAAgB,YACZ;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACzB,IAAI;EAMV"}
@@ -0,0 +1,84 @@
1
+ import type { PeerId, SyncMessage, SyncMessageHandler, SyncTransport } from './types.js';
2
+ type WebSocketState = 0 | 1 | 2 | 3;
3
+ interface WebSocketLike {
4
+ readyState: WebSocketState;
5
+ onopen: (() => void) | null;
6
+ onmessage: ((event: {
7
+ data: unknown;
8
+ }) => void | Promise<void>) | null;
9
+ onclose: (() => void) | null;
10
+ onerror: ((event: unknown) => void) | null;
11
+ send(data: string): void;
12
+ close(): void;
13
+ }
14
+ type WebSocketCtor = new (url: string) => WebSocketLike;
15
+ export interface PartyKitReconnectOptions {
16
+ /** Max reconnect attempts (0 = unlimited). Default: unlimited. */
17
+ maxAttempts?: number;
18
+ /** Initial backoff in ms. Default: 500. */
19
+ baseDelayMs?: number;
20
+ /** Max backoff in ms. Default: 30_000. */
21
+ maxDelayMs?: number;
22
+ }
23
+ export interface PartyKitRoomTransportOptions {
24
+ /** Local client/peer identity. */
25
+ peerId: string;
26
+ /** Full PartyKit room WebSocket URL. */
27
+ roomUrl: string;
28
+ /** Optional auth token appended as `?token=` on the WebSocket URL. */
29
+ auth?: string;
30
+ /** Logical room peer ID used by SyncEngine calls. Default: `room`. */
31
+ roomId?: string;
32
+ /** Human-readable room name. */
33
+ roomName?: string;
34
+ /** Test hook or non-browser WebSocket implementation. */
35
+ WebSocketImpl?: WebSocketCtor;
36
+ /**
37
+ * Reconnect with exponential backoff after unexpected close.
38
+ * Default: enabled.
39
+ */
40
+ reconnect?: boolean | PartyKitReconnectOptions;
41
+ /** Called after a successful reconnect (e.g. to re-sync). */
42
+ onReconnect?: () => void | Promise<void>;
43
+ /** Called when the connection drops. */
44
+ onDisconnect?: (reason?: string) => void;
45
+ }
46
+ /**
47
+ * SyncTransport for a PartyKit-style room relay.
48
+ *
49
+ * The server side should implement the same room semantics as SyncRoomCore:
50
+ * canonical catch-up log, full-op catch-up, and broadcast of newly accepted ops.
51
+ */
52
+ export declare class PartyKitRoomTransport implements SyncTransport {
53
+ private peerId;
54
+ private room;
55
+ private roomUrl;
56
+ private WebSocketImpl;
57
+ private ws;
58
+ private messageHandler;
59
+ private intentionalClose;
60
+ private reconnectEnabled;
61
+ private reconnectOpts;
62
+ private reconnectAttempt;
63
+ private reconnectTimer?;
64
+ private connectPromise;
65
+ private onReconnect?;
66
+ private onDisconnect?;
67
+ constructor(opts: PartyKitRoomTransportOptions);
68
+ connect(): Promise<void>;
69
+ send(peerId: string, message: SyncMessage): Promise<void>;
70
+ onMessage(handler: SyncMessageHandler): void;
71
+ peers(): PeerId[];
72
+ close(): void;
73
+ getPeerId(): string;
74
+ getRoomPeer(): PeerId;
75
+ /** Whether the WebSocket is open. */
76
+ isConnected(): boolean;
77
+ private openSocket;
78
+ private scheduleReconnect;
79
+ private tryReconnect;
80
+ private static withAuth;
81
+ private parseMessage;
82
+ }
83
+ export {};
84
+ //# sourceMappingURL=partykit-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partykit-transport.d.ts","sourceRoot":"","sources":["../../src/sync/partykit-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { VcsOp } from '../vcs/types.js';
2
+ import type { PeerId, SyncMessage } from './types.js';
3
+ export interface SyncRoomAppendRejection {
4
+ op: VcsOp;
5
+ reason: 'invalid-kind' | 'hash-mismatch' | 'missing-dependency';
6
+ message: string;
7
+ }
8
+ export interface SyncRoomAppendResult {
9
+ applied: number;
10
+ skipped: number;
11
+ rejected: SyncRoomAppendRejection[];
12
+ acceptedOps: VcsOp[];
13
+ }
14
+ export interface SyncRoomDelivery {
15
+ peerId: string;
16
+ message: SyncMessage;
17
+ }
18
+ /** Default max ops returned for snapshot / tail catch-up. */
19
+ export declare const DEFAULT_SNAPSHOT_MAX_OPS = 500;
20
+ export interface SyncRoomSnapshot {
21
+ headHash?: string;
22
+ opCount: number;
23
+ truncated: boolean;
24
+ ops: VcsOp[];
25
+ }
26
+ /**
27
+ * Canonical room log and catch-up protocol shared by room transports.
28
+ */
29
+ export declare class SyncRoomCore {
30
+ private roomPeer;
31
+ private peers;
32
+ private ops;
33
+ constructor(roomId?: string, roomName?: string);
34
+ connectPeer(peerId: string, peerName?: string): void;
35
+ disconnectPeer(peerId: string): void;
36
+ getRoomPeer(): PeerId;
37
+ peersFor(peerId: string): PeerId[];
38
+ getOps(): VcsOp[];
39
+ getOpCount(): number;
40
+ /** Build a tail snapshot for late-joiner catch-up. */
41
+ buildSnapshot(maxOps?: number): SyncRoomSnapshot;
42
+ /** Deliver a snapshot message to a connected peer. */
43
+ snapshotDeliveries(peerId: string, maxOps?: number): SyncRoomDelivery[];
44
+ receive(fromPeerId: string, message: SyncMessage): Promise<SyncRoomDelivery[]>;
45
+ private handleHave;
46
+ private handleWant;
47
+ private handleOps;
48
+ appendOps(incomingOps: VcsOp[]): Promise<SyncRoomAppendResult>;
49
+ private roomOpsDeliveries;
50
+ private opsDelivery;
51
+ private broadcastOps;
52
+ }
53
+ //# sourceMappingURL=room-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-core.d.ts","sourceRoot":"","sources":["../../src/sync/room-core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAOtD,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,cAAc,GAAG,eAAe,GAAG,oBAAoB,CAAC;IAChE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,WAAW,EAAE,KAAK,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,6DAA6D;AAC7D,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,KAAK,EAAE,CAAC;CACd;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,GAAG,CAAe;gBAEd,MAAM,SAAS,EAAE,QAAQ,SAAS;IAO9C,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAS,GAAG,IAAI;IAQpD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpC,WAAW,IAAI,MAAM;IAIrB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IASlC,MAAM,IAAI,KAAK,EAAE;IAIjB,UAAU,IAAI,MAAM;IAIpB,sDAAsD;IACtD,aAAa,CAAC,MAAM,SAA2B,GAAG,gBAAgB;IAmBlE,sDAAsD;IACtD,kBAAkB,CAChB,MAAM,EAAE,MAAM,EACd,MAAM,SAA2B,GAChC,gBAAgB,EAAE;IAkBf,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAqDhB,UAAU;YA0CV,UAAU;YAuBV,SAAS;IA6BjB,SAAS,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAsEpE,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,YAAY;CAWrB"}
@@ -7,20 +7,40 @@
7
7
  * branch modes.
8
8
  */
9
9
  import type { VcsOp } from '../vcs/types.js';
10
- import type { SyncTransport, SyncState, PeerId, BranchPolicy } from './types.js';
10
+ import type { SyncTransport, SyncNackMessage, SyncState, PeerId, BranchPolicy, NackReason } from './types.js';
11
11
  import { type ReconcileResult } from './reconciler.js';
12
+ /**
13
+ * Per-op rejection returned by `onOpsReceived`. Translated into one or more
14
+ * `nack` messages on the wire, grouped by `reason`.
15
+ */
16
+ export interface OpsReceivedRejection {
17
+ hash: string;
18
+ reason: NackReason;
19
+ details?: string;
20
+ }
21
+ /**
22
+ * Optional return value of `onOpsReceived`. When present, the engine uses it
23
+ * to send precise `nack` messages and to compute the `ack` set (incoming
24
+ * hashes minus rejected). When absent, all incoming ops are ack'd and no
25
+ * nack is sent — preserving the original SyncEngine semantics.
26
+ */
27
+ export interface OpsReceivedResult {
28
+ rejections: OpsReceivedRejection[];
29
+ }
12
30
  export declare class SyncEngine {
13
31
  private localPeerId;
14
32
  private state;
15
33
  private transport;
16
34
  private getLocalOps;
17
35
  private onOpsReceived;
36
+ private onNackReceived?;
18
37
  private branchPolicy;
19
38
  constructor(opts: {
20
39
  localPeerId: string;
21
40
  transport: SyncTransport;
22
41
  getLocalOps: () => VcsOp[];
23
- onOpsReceived: (ops: VcsOp[]) => void;
42
+ onOpsReceived: (ops: VcsOp[]) => void | OpsReceivedResult | Promise<void | OpsReceivedResult>;
43
+ onNackReceived?: (nack: SyncNackMessage) => void | Promise<void>;
24
44
  branchPolicy?: BranchPolicy;
25
45
  });
26
46
  /**
@@ -32,10 +52,26 @@ export declare class SyncEngine {
32
52
  * Request ops from a peer.
33
53
  */
34
54
  pullFrom(peerId: string): Promise<void>;
55
+ /**
56
+ * Request the peer's complete op set and rely on hash dedupe during ingest.
57
+ */
58
+ pullAllFrom(peerId: string): Promise<void>;
59
+ /**
60
+ * Request a truncated tail snapshot from a room peer (late-joiner catch-up).
61
+ * The room replies with a `snapshot` message handled like `ops`.
62
+ */
63
+ requestSnapshot(peerId: string, maxOps?: number): Promise<void>;
35
64
  /**
36
65
  * Send all our ops to a peer (full push).
37
66
  */
38
67
  sendOps(peerId: string, ops?: VcsOp[]): Promise<void>;
68
+ /**
69
+ * Internal: send an `ops` message and track outbound hashes in
70
+ * `pendingAcks` until the receiver acks or nacks them. All three sites
71
+ * that emit `ops` (sendOps, handleHave, handleWant) route through here so
72
+ * pendingAcks reflects every outbound op uniformly.
73
+ */
74
+ private sendOpsMessage;
39
75
  /**
40
76
  * Reconcile our ops with a remote peer's ops.
41
77
  */
@@ -57,9 +93,11 @@ export declare class SyncEngine {
57
93
  */
58
94
  listPeers(): PeerId[];
59
95
  private handleMessage;
96
+ private handleSnapshot;
60
97
  private handleHave;
61
98
  private handleWant;
62
99
  private handleOps;
63
100
  private handleAck;
101
+ private handleNack;
64
102
  }
65
103
  //# sourceMappingURL=sync-engine.d.ts.map
@@ -1 +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"}
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,eAAe,EACf,SAAS,EACT,MAAM,EACN,YAAY,EACZ,UAAU,EACX,MAAM,YAAY,CAAC;AAOpB,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAMjF;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,oBAAoB,EAAE,CAAC;CACpC;AAMD,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,CAE6C;IAClE,OAAO,CAAC,cAAc,CAAC,CAAkD;IACzE,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,CACb,GAAG,EAAE,KAAK,EAAE,KACT,IAAI,GAAG,iBAAiB,GAAG,OAAO,CAAC,IAAI,GAAG,iBAAiB,CAAC,CAAC;QAClE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACjE,YAAY,CAAC,EAAE,YAAY,CAAC;KAC7B;IAuBD;;;OAGG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3C;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7C;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAShD;;;OAGG;IACG,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,MAAM,SAA2B,GAChC,OAAO,CAAC,IAAI,CAAC;IAShB;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D;;;;;OAKG;YACW,cAAc;IAa5B;;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;YAQP,aAAa;YA8Cb,cAAc;YAYd,UAAU;YAiDV,UAAU;YAmBV,SAAS;IAoEvB,OAAO,CAAC,SAAS;YAOH,UAAU;CAWzB"}
@@ -0,0 +1,39 @@
1
+ import type { SyncMessage } from './types.js';
2
+ import { type SyncRoomSnapshot } from './room-core.js';
3
+ export interface SyncRoomServerConnection {
4
+ peerId: string;
5
+ send(message: SyncMessage): void | Promise<void>;
6
+ }
7
+ export interface SyncRoomServerOptions {
8
+ roomId?: string;
9
+ roomName?: string;
10
+ /** Send a welcome snapshot when a peer connects. Default: true. */
11
+ welcomeSnapshot?: boolean;
12
+ welcomeSnapshotMaxOps?: number;
13
+ }
14
+ /**
15
+ * Framework-agnostic room server wrapping {@link SyncRoomCore}.
16
+ *
17
+ * Use from PartyKit, Node WebSocket servers, or tests. Routes inbound sync
18
+ * messages through the canonical room log and delivers responses to peers.
19
+ */
20
+ export declare class SyncRoomServer {
21
+ private core;
22
+ private connections;
23
+ private welcomeSnapshot;
24
+ private welcomeSnapshotMaxOps;
25
+ constructor(opts?: SyncRoomServerOptions);
26
+ getRoomId(): string;
27
+ getOpCount(): number;
28
+ getOps(): import("../index.js").VcsOp[];
29
+ buildSnapshot(maxOps?: number): SyncRoomSnapshot;
30
+ /** Register a connected peer and optionally send a welcome snapshot. */
31
+ connect(conn: SyncRoomServerConnection): Promise<void>;
32
+ disconnect(peerId: string): void;
33
+ /** Route an inbound sync message from a peer. */
34
+ handleMessage(fromPeerId: string, message: SyncMessage): Promise<void>;
35
+ /** Push a tail snapshot to a peer without an inbound message. */
36
+ sendSnapshot(peerId: string, maxOps?: number): Promise<void>;
37
+ private deliverAll;
38
+ }
39
+ //# sourceMappingURL=sync-room-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-room-server.d.ts","sourceRoot":"","sources":["../../src/sync/sync-room-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,qBAAqB,CAAS;gBAE1B,IAAI,GAAE,qBAA0B;IAO5C,SAAS,IAAI,MAAM;IAInB,UAAU,IAAI,MAAM;IAIpB,MAAM;IAIN,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,gBAAgB;IAIhD,wEAAwE;IAClE,OAAO,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKhC,iDAAiD;IAC3C,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5E,iEAAiE;IAC3D,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,MAAM,SAA2B,GAChC,OAAO,CAAC,IAAI,CAAC;YAKF,UAAU;CASzB"}
@@ -14,9 +14,30 @@ export interface PeerId {
14
14
  /** Last seen timestamp. */
15
15
  lastSeen?: string;
16
16
  }
17
- export type SyncMessage = SyncHaveMessage | SyncWantMessage | SyncOpsMessage | SyncAckMessage;
17
+ /**
18
+ * Wire protocol version. Bumped when the message shape or semantics change
19
+ * in a way that older peers cannot safely ignore. All outbound messages
20
+ * carry this value; receivers reject anything outside the supported range
21
+ * with a `protocol-version` nack.
22
+ */
23
+ export declare const PROTOCOL_VERSION: 1;
24
+ export declare const MIN_SUPPORTED_VERSION: 1;
25
+ export declare const MAX_SUPPORTED_VERSION: 1;
26
+ export type SyncMessage = SyncHaveMessage | SyncWantMessage | SyncOpsMessage | SyncAckMessage | SyncNackMessage | SyncSnapshotRequestMessage | SyncSnapshotMessage;
27
+ export type SyncMessageHandler = (message: SyncMessage) => void | Promise<void>;
28
+ /**
29
+ * Categorical reasons a receiver may reject ops sent over the wire.
30
+ *
31
+ * Engine-level reasons (`invalid-kind`, `hash-mismatch`, `missing-dependency`,
32
+ * `apply-failed`) mirror `IntegrateOpRejectReason` so engine rejections flow
33
+ * back to the sender unchanged. Wire-level reasons (`protocol-version`)
34
+ * describe failures detected by the sync layer itself. The union is kept
35
+ * separate so the wire protocol does not drift with engine internals.
36
+ */
37
+ export type NackReason = 'invalid-kind' | 'hash-mismatch' | 'missing-dependency' | 'apply-failed' | 'protocol-version';
18
38
  /** Advertise which op hashes we have. */
19
39
  export interface SyncHaveMessage {
40
+ version: number;
20
41
  type: 'have';
21
42
  peerId: string;
22
43
  /** Our head op hashes (one per branch). */
@@ -26,26 +47,72 @@ export interface SyncHaveMessage {
26
47
  }
27
48
  /** Request ops we're missing. */
28
49
  export interface SyncWantMessage {
50
+ version: number;
29
51
  type: 'want';
30
52
  peerId: string;
31
53
  /** Op hashes we need (those the remote has but we don't). */
32
54
  wantHashes: string[];
33
55
  /** Alternatively: request all ops after a given hash. */
34
56
  afterHash?: string;
57
+ /**
58
+ * When set with empty `wantHashes` and no `afterHash`, request a truncated
59
+ * tail snapshot instead of the full room log (late-joiner catch-up).
60
+ */
61
+ maxOps?: number;
62
+ }
63
+ /** Request a truncated tail snapshot from a room peer. */
64
+ export interface SyncSnapshotRequestMessage {
65
+ version: number;
66
+ type: 'sync-snapshot';
67
+ peerId: string;
68
+ /** Max ops in the tail. Default chosen by the room (usually 500). */
69
+ maxOps?: number;
70
+ }
71
+ /**
72
+ * Room response: recent tail of the canonical log plus metadata.
73
+ * Clients integrate `ops` like a normal `ops` message.
74
+ */
75
+ export interface SyncSnapshotMessage {
76
+ version: number;
77
+ type: 'snapshot';
78
+ peerId: string;
79
+ /** Head hash of the full room log (may be beyond the returned tail). */
80
+ headHash?: string;
81
+ /** Total ops in the room canonical log. */
82
+ opCount: number;
83
+ /** True when `ops` is a truncated tail, not the full log. */
84
+ truncated: boolean;
85
+ ops: VcsOp[];
35
86
  }
36
87
  /** Send a batch of ops. */
37
88
  export interface SyncOpsMessage {
89
+ version: number;
38
90
  type: 'ops';
39
91
  peerId: string;
40
92
  ops: VcsOp[];
41
93
  }
42
94
  /** Acknowledge receipt. */
43
95
  export interface SyncAckMessage {
96
+ version: number;
44
97
  type: 'ack';
45
98
  peerId: string;
46
- /** Hashes of ops we've integrated. */
99
+ /** Hashes of ops we've integrated (or already had). */
47
100
  integrated: string[];
48
101
  }
102
+ /**
103
+ * Reject one or more ops. Grouped by `reason` so a single batch may produce
104
+ * several nacks if rejections fall into multiple categories.
105
+ */
106
+ export interface SyncNackMessage {
107
+ version: number;
108
+ type: 'nack';
109
+ peerId: string;
110
+ /** Hashes of ops that were rejected for this reason. */
111
+ refs: string[];
112
+ reason: NackReason;
113
+ /** Optional human-readable detail for logs. */
114
+ details?: string;
115
+ }
49
116
  export interface SyncState {
50
117
  /** Our peer identity. */
51
118
  localPeerId: string;
@@ -64,7 +131,7 @@ export interface SyncTransport {
64
131
  /** Send a message to a specific peer. */
65
132
  send(peerId: string, message: SyncMessage): Promise<void>;
66
133
  /** Register a handler for incoming messages. */
67
- onMessage(handler: (message: SyncMessage) => void): void;
134
+ onMessage(handler: SyncMessageHandler): void;
68
135
  /** List connected peers. */
69
136
  peers(): PeerId[];
70
137
  }
@@ -1 +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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { IntegrateOpsResult, TrellisVcsEngine } from '../engine.js';
2
+ import { SyncEngine } from './sync-engine.js';
3
+ import type { BranchPolicy, NackReason, PeerId, SyncNackMessage, SyncTransport } from './types.js';
4
+ export interface TrellisVcsSyncPeerOptions {
5
+ peerId: string;
6
+ engine: TrellisVcsEngine;
7
+ transport: SyncTransport;
8
+ branchPolicy?: BranchPolicy;
9
+ onIntegrate?: (result: IntegrateOpsResult) => void | Promise<void>;
10
+ onRemoteNack?: (nack: SyncNackMessage) => void | Promise<void>;
11
+ }
12
+ /**
13
+ * A nack received from a remote peer in response to ops we pushed.
14
+ * Mirrors `SyncNackMessage` minus the wire `type` field.
15
+ */
16
+ export interface RemoteNackInfo {
17
+ peerId: string;
18
+ reason: NackReason;
19
+ refs: string[];
20
+ details?: string;
21
+ }
22
+ export interface TrellisVcsSyncResult {
23
+ peerId: string;
24
+ beforeOpCount: number;
25
+ afterOpCount: number;
26
+ batches: IntegrateOpsResult[];
27
+ applied: number;
28
+ skipped: number;
29
+ rejected: number;
30
+ /** Nacks the remote sent back while this sync session was running. */
31
+ remoteRejected: RemoteNackInfo[];
32
+ }
33
+ /**
34
+ * Thin VCS sync facade that connects a TrellisVcsEngine to a SyncTransport.
35
+ */
36
+ export declare class TrellisVcsSyncPeer {
37
+ private engine;
38
+ private syncEngine;
39
+ private transport;
40
+ private integrationResults;
41
+ private remoteNacks;
42
+ constructor(opts: TrellisVcsSyncPeerOptions);
43
+ pushTo(peerId: string): Promise<TrellisVcsSyncResult>;
44
+ pullFrom(peerId: string): Promise<TrellisVcsSyncResult>;
45
+ syncWith(peerId: string): Promise<TrellisVcsSyncResult>;
46
+ /** Request a tail snapshot before a full sync (room peers only). */
47
+ requestSnapshot(peerId: string, maxOps?: number): Promise<void>;
48
+ listPeers(): PeerId[];
49
+ getSyncEngine(): SyncEngine;
50
+ /**
51
+ * Cumulative nacks received from remote peers since construction.
52
+ * Useful for tests and for consumers that want to inspect the full history.
53
+ * Sync results returned by `pushTo`/`pullFrom`/`syncWith` already include
54
+ * the per-session slice in `remoteRejected`.
55
+ */
56
+ getRemoteNacks(): readonly RemoteNackInfo[];
57
+ /** Underlying transport (for connect/close in client wrappers). */
58
+ getTransport(): SyncTransport;
59
+ /** Tear down the transport connection if supported. */
60
+ close(): void;
61
+ private captureSync;
62
+ }
63
+ //# sourceMappingURL=vcs-sync-peer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vcs-sync-peer.d.ts","sourceRoot":"","sources":["../../src/sync/vcs-sync-peer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAA6B,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,MAAM,EACN,eAAe,EACf,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,aAAa,CAAC;IACzB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,cAAc,EAAE,cAAc,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,WAAW,CAAwB;gBAE/B,IAAI,EAAE,yBAAyB;IAoCrC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIrD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIvD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAO7D,oEAAoE;IAC9D,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAIhB,SAAS,IAAI,MAAM,EAAE;IAIrB,aAAa,IAAI,UAAU;IAI3B;;;;;OAKG;IACH,cAAc,IAAI,SAAS,cAAc,EAAE;IAI3C,mEAAmE;IACnE,YAAY,IAAI,aAAa;IAI7B,uDAAuD;IACvD,KAAK,IAAI,IAAI;YAMC,WAAW;CA0B1B"}
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @module trellis/sync
8
8
  */
9
- import type { SyncTransport, SyncMessage, PeerId } from './types.js';
9
+ import type { SyncTransport, SyncMessage, SyncMessageHandler, PeerId } from './types.js';
10
10
  export declare class WebSocketSyncTransport implements SyncTransport {
11
11
  private localPeerId;
12
12
  private connections;
@@ -22,7 +22,7 @@ export declare class WebSocketSyncTransport implements SyncTransport {
22
22
  */
23
23
  acceptConnection(peerId: string, ws: WebSocket): void;
24
24
  send(peerId: string, message: SyncMessage): Promise<void>;
25
- onMessage(handler: (message: SyncMessage) => void): void;
25
+ onMessage(handler: SyncMessageHandler): void;
26
26
  peers(): PeerId[];
27
27
  /**
28
28
  * Disconnect from a peer.
@@ -1 +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"}
1
+ {"version":3,"file":"ws-transport.d.ts","sourceRoot":"","sources":["../../src/sync/ws-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,MAAM,EACP,MAAM,YAAY,CAAC;AAMpB,qBAAa,sBAAuB,YAAW,aAAa;IAC1D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAqC;IACxD,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,cAAc,CAAmC;gBAE7C,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,kBAAkB,GAAG,IAAI;IAI5C,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,14 @@
1
+ import {
2
+ DEFAULT_TENANT,
3
+ TenantPool
4
+ } from "./chunk-SGMDTWJJ.js";
5
+ import "./chunk-SPSPV5BC.js";
6
+ import "./chunk-XMQ7G77X.js";
7
+ import "./chunk-KQ4A2D2P.js";
8
+ import "./chunk-6CTA6MCE.js";
9
+ import "./chunk-4XIVMVHC.js";
10
+ import "./chunk-KFQGP6VL.js";
11
+ export {
12
+ DEFAULT_TENANT,
13
+ TenantPool
14
+ };
@@ -0,0 +1,16 @@
1
+ import {
2
+ DEFAULT_TENANT,
3
+ TenantPool,
4
+ resolvePoolBackendFromEnv
5
+ } from "./chunk-JHHEXEDM.js";
6
+ import "./chunk-SPSPV5BC.js";
7
+ import "./chunk-XMQ7G77X.js";
8
+ import "./chunk-KQ4A2D2P.js";
9
+ import "./chunk-6CTA6MCE.js";
10
+ import "./chunk-4XIVMVHC.js";
11
+ import "./chunk-KFQGP6VL.js";
12
+ export {
13
+ DEFAULT_TENANT,
14
+ TenantPool,
15
+ resolvePoolBackendFromEnv
16
+ };