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
@@ -1,26 +1,26 @@
1
- // @bun
2
1
  import {
3
2
  TrellisVcsEngine,
4
3
  init_engine
5
- } from "./index-rv1p47gp.js";
6
- import"./index-xhcp6xrn.js";
7
- import"./index-4cdr7x2x.js";
8
- import"./index-nzb3am4f.js";
9
- import"./index-yhwjgfvj.js";
10
- import"./index-a76rekgs.js";
4
+ } from "./chunk-L5N5PR2S.js";
5
+ import "./chunk-GU374KWZ.js";
6
+ import "./chunk-4XIVMVHC.js";
7
+ import "./chunk-VBYUTRXX.js";
8
+ import "./chunk-N6MYZT4O.js";
9
+ import "./chunk-GLM4HGN4.js";
10
+ import "./chunk-KFQGP6VL.js";
11
11
 
12
12
  // src/federation/remote-manager.ts
13
13
  init_engine();
14
14
  import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
15
15
  import { join, resolve } from "path";
16
-
17
- class RemoteManager {
16
+ var RemoteManager = class {
18
17
  trellisPath;
19
18
  remotesPath;
20
19
  constructor(trellisPath) {
21
20
  this.trellisPath = trellisPath;
22
21
  this.remotesPath = join(trellisPath, "remotes.json");
23
22
  }
23
+ /** Load remotes configuration */
24
24
  loadRemotes() {
25
25
  if (!existsSync(this.remotesPath)) {
26
26
  return { remotes: {} };
@@ -32,6 +32,7 @@ class RemoteManager {
32
32
  throw new Error(`Failed to load remotes config: ${error}`);
33
33
  }
34
34
  }
35
+ /** Save remotes configuration */
35
36
  saveRemotes(config) {
36
37
  try {
37
38
  if (!existsSync(this.trellisPath)) {
@@ -42,6 +43,7 @@ class RemoteManager {
42
43
  throw new Error(`Failed to save remotes config: ${error}`);
43
44
  }
44
45
  }
46
+ /** Add a new remote */
45
47
  addRemote(name, path) {
46
48
  const config = this.loadRemotes();
47
49
  if (config.remotes[name]) {
@@ -57,6 +59,7 @@ class RemoteManager {
57
59
  };
58
60
  this.saveRemotes(config);
59
61
  }
62
+ /** Remove a remote */
60
63
  removeRemote(name) {
61
64
  const config = this.loadRemotes();
62
65
  if (!config.remotes[name]) {
@@ -65,10 +68,12 @@ class RemoteManager {
65
68
  delete config.remotes[name];
66
69
  this.saveRemotes(config);
67
70
  }
71
+ /** List all remotes */
68
72
  listRemotes() {
69
73
  const config = this.loadRemotes();
70
74
  return Object.values(config.remotes);
71
75
  }
76
+ /** Pull new ops from a specific remote */
72
77
  async pullRemote(remoteName, localEngine) {
73
78
  const startTime = Date.now();
74
79
  const config = this.loadRemotes();
@@ -98,14 +103,18 @@ class RemoteManager {
98
103
  startIndex = remoteOps.findIndex((op) => op.hash === lastOpHash);
99
104
  if (startIndex === -1) {
100
105
  startIndex = 0;
101
- errors.push(`Last op hash ${lastOpHash} not found in remote, pulling all ops`);
106
+ errors.push(
107
+ `Last op hash ${lastOpHash} not found in remote, pulling all ops`
108
+ );
102
109
  } else {
103
110
  startIndex++;
104
111
  }
105
112
  }
106
113
  const opsToPull = remoteOps.slice(startIndex);
107
114
  if (opsToPull.length > 0) {
108
- const prefixedOps = opsToPull.map((op) => this.prefixOpEntities(op, remoteName));
115
+ const prefixedOps = opsToPull.map(
116
+ (op) => this.prefixOpEntities(op, remoteName)
117
+ );
109
118
  for (const op of prefixedOps) {
110
119
  localEngine.opLog.append(op);
111
120
  newOps++;
@@ -113,7 +122,7 @@ class RemoteManager {
113
122
  latestOpId = remoteOps[remoteOps.length - 1].hash;
114
123
  }
115
124
  remote.lastOpId = latestOpId;
116
- remote.pulledAt = new Date().toISOString();
125
+ remote.pulledAt = (/* @__PURE__ */ new Date()).toISOString();
117
126
  this.saveRemotes(config);
118
127
  } catch (error) {
119
128
  errors.push(`Failed to pull from remote: ${error}`);
@@ -126,6 +135,7 @@ class RemoteManager {
126
135
  errors
127
136
  };
128
137
  }
138
+ /** Pull from all configured remotes */
129
139
  async pullAll(localEngine) {
130
140
  const config = this.loadRemotes();
131
141
  const remoteNames = Object.keys(config.remotes);
@@ -160,6 +170,7 @@ class RemoteManager {
160
170
  totalDurationMs: Date.now() - startTime
161
171
  };
162
172
  }
173
+ /** Prefix entity IDs in operations with remote name */
163
174
  prefixOpEntities(op, remoteName) {
164
175
  const prefixed = { ...op };
165
176
  if (op.vcs) {
@@ -199,8 +210,7 @@ class RemoteManager {
199
210
  e2: link.e2.includes(":") ? link.e2 : `${remoteName}:${link.e2}`
200
211
  }));
201
212
  }
202
- if (!prefixed.facts)
203
- prefixed.facts = [];
213
+ if (!prefixed.facts) prefixed.facts = [];
204
214
  prefixed.facts.push({
205
215
  e: "op",
206
216
  a: "remote",
@@ -208,7 +218,7 @@ class RemoteManager {
208
218
  });
209
219
  return prefixed;
210
220
  }
211
- }
221
+ };
212
222
  export {
213
223
  RemoteManager
214
224
  };
@@ -1 +1 @@
1
- {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/scaffold/seed.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA6ExE"}
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/scaffold/seed.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAwFxE"}
@@ -24,7 +24,7 @@ export interface ScaffoldInput {
24
24
  profile: UserProfile | null;
25
25
  context: ProjectContext;
26
26
  }
27
- export type IdeType = 'cursor' | 'windsurf' | 'claude' | 'copilot' | 'codex' | 'gemini' | 'none';
27
+ export type IdeType = 'cursor' | 'devin' | 'claude' | 'copilot' | 'codex' | 'gemini' | 'none';
28
28
  export type WorkspaceFootprint = 'minimal' | 'standard' | 'full';
29
29
  export type FrameworkType = 'react' | 'vue' | 'svelte' | 'next' | 'nuxt' | 'remotion' | 'expo' | 'bun' | 'node' | 'cli' | 'library' | 'animation' | 'games' | 'none';
30
30
  export interface IdeScaffoldInput {
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/scaffold/write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,SAAS,GACT,OAAO,GACP,QAAQ,GACR,MAAM,CAAC;AACX,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AACjE,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,KAAK,GACL,QAAQ,GACR,MAAM,GACN,MAAM,GACN,UAAU,GACV,MAAM,GACN,KAAK,GACL,MAAM,GACN,KAAK,GACL,SAAS,GACT,WAAW,GACX,OAAO,GACP,MAAM,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,kBAAkB,CAAC;IAC9B,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAyQD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,GACnB,IAAI,CAoCN;AA09BD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,gBAAgB,GACtB,IAAI,CA4IN"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/scaffold/write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,SAAS,GACT,OAAO,GACP,QAAQ,GACR,MAAM,CAAC;AACX,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AACjE,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,KAAK,GACL,QAAQ,GACR,MAAM,GACN,MAAM,GACN,UAAU,GACV,MAAM,GACN,KAAK,GACL,MAAM,GACN,KAAK,GACL,SAAS,GACT,WAAW,GACX,OAAO,GACP,MAAM,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,kBAAkB,CAAC;IAC9B,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AA8QD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,GACnB,IAAI,CAoCN;AAq4BD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,gBAAgB,GACtB,IAAI,CA4IN"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Trellis Schema — typed entity definitions over the ontology.
3
+ *
4
+ * `defineType` is the Trellis answer to Jazz's `co.map`: one definition produces
5
+ * BOTH a runtime {@link SchemaDefinition} (registerable in the kernel via
6
+ * `createOntology`) AND a static TypeScript type via {@link InferType}. Zod
7
+ * handles leaf validation + inference; a second options bag handles the graph
8
+ * semantics Zod can't express — relation cardinality, rollups, formulas, tier.
9
+ *
10
+ * This deliberately targets `SchemaDefinition` (the live kernel path consumed by
11
+ * schema/rollup middleware), not the legacy `OntologySchema` registry — see
12
+ * {@link TrellisType.toOntologySchema} for the legacy adapter.
13
+ *
14
+ * import { defineType, rel } from 'trellis/schema';
15
+ * import { z } from 'zod';
16
+ *
17
+ * const NavItem = defineType('NavItem', {
18
+ * label: z.string(),
19
+ * icon: z.string().optional(),
20
+ * order: z.number(),
21
+ * }, { title: 'label' });
22
+ *
23
+ * const NavSection = defineType('NavSection', {
24
+ * label: z.string(),
25
+ * order: z.number(),
26
+ * collapsed: z.boolean(),
27
+ * }, { title: 'label', relations: { items: rel(() => NavItem, 'many') } });
28
+ *
29
+ * type Section = InferType<typeof NavSection>;
30
+ * // { id: string; type: 'NavSection'; label: string; order: number;
31
+ * // collapsed: boolean; items: Ref<typeof NavItem>[] }
32
+ *
33
+ * @module trellis/schema
34
+ */
35
+ import { z } from 'zod';
36
+ import type { OntologySchema, OntologyTier, PropertyType, PropertyValueSpecification, SchemaDefinition } from '../core/ontology/types.js';
37
+ /**
38
+ * A reference to another entity. Unresolved it is the target's id (a `string`);
39
+ * a future `resolve` option swaps it for the loaded {@link InferType} value.
40
+ */
41
+ export type Ref<S extends AnyType = AnyType> = string & {
42
+ readonly __ref?: S;
43
+ };
44
+ export type RelTarget<S extends AnyType> = (() => S) | string;
45
+ export interface Relation<S extends AnyType, C extends 'one' | 'many'> {
46
+ readonly target: RelTarget<S>;
47
+ readonly cardinality: C;
48
+ }
49
+ /** Declare a relation field. Target may be a thunk (define-order safe) or a name. */
50
+ export declare function rel<S extends AnyType, C extends 'one' | 'many' = 'one'>(target: RelTarget<S>, cardinality?: C): Relation<S, C>;
51
+ export type RelationMap = Record<string, Relation<AnyType, 'one' | 'many'>>;
52
+ export interface ComputedField {
53
+ readonly spec: Partial<PropertyValueSpecification> & {
54
+ valueType: PropertyType;
55
+ };
56
+ }
57
+ export type ComputedMap = Record<string, ComputedField>;
58
+ /** Declare a rollup over a relation (e.g. count of linked items). */
59
+ export declare function rollup(cfg: NonNullable<PropertyValueSpecification['rollup']>): ComputedField;
60
+ /** Declare a formula field. */
61
+ export declare function formula(expr: string): ComputedField;
62
+ export interface TrellisType<Name extends string, Z extends z.ZodRawShape, R extends RelationMap, C extends ComputedMap> {
63
+ readonly type: Name;
64
+ /** Leaf validator (does not include relations/computed). */
65
+ readonly zod: z.ZodObject<Z>;
66
+ readonly relations: R;
67
+ readonly computed: C;
68
+ /** Kernel-facing schema, keyed by `@id` = `trellis:<Name>`. */
69
+ readonly definition: SchemaDefinition;
70
+ /** Adapter to the legacy OntologyRegistry (relation resolution only). */
71
+ toOntologySchema(): OntologySchema;
72
+ }
73
+ export type AnyType = TrellisType<string, z.ZodRawShape, RelationMap, ComputedMap>;
74
+ type RelValue<X> = X extends Relation<infer S, infer C> ? C extends 'many' ? Ref<S>[] : Ref<S> : never;
75
+ export type InferType<T> = T extends TrellisType<infer Name, infer Z, infer R, infer C> ? {
76
+ id: string;
77
+ type: Name;
78
+ } & z.infer<z.ZodObject<Z>> & {
79
+ [K in keyof R]: RelValue<R[K]>;
80
+ } & {
81
+ readonly [K in keyof C]: number;
82
+ } : never;
83
+ /** Target entity schema of a relation field. */
84
+ type RelationTarget<R> = R extends Relation<infer S, 'one' | 'many'> ? S : never;
85
+ /**
86
+ * Typed `resolve` spec for {@link InferResolvedType} — mirrors runtime
87
+ * {@link import('./resolve.js').ResolveSpec} but keyed to declared relations.
88
+ *
89
+ * `{ items: true }` — expand `items` to full entities.
90
+ * `{ items: { section: true } }` — expand `items`, then each item's `section`.
91
+ */
92
+ export type ResolveSpecFor<T extends AnyType> = {
93
+ [K in keyof T['relations'] & string]?: true | ResolveSpecFor<RelationTarget<T['relations'][K]>>;
94
+ };
95
+ /** Expand one relation key according to a resolve spec entry (`true` or nested). */
96
+ type ApplyResolve<Field extends Relation<AnyType, 'one' | 'many'>, Spec> = Field extends Relation<infer S, infer C> ? [Spec] extends [true] ? C extends 'many' ? InferType<S>[] : InferType<S> : Spec extends ResolveSpecFor<S> ? C extends 'many' ? InferResolvedType<S, Spec>[] : InferResolvedType<S, Spec> : RelValue<Field> : never;
97
+ /**
98
+ * Like {@link InferType}, but relation keys in `resolve` are expanded entity
99
+ * shapes instead of `Ref` ids. Nested objects recurse (TRL-4).
100
+ */
101
+ export type InferResolvedType<T extends AnyType, R extends ResolveSpecFor<T>> = T extends TrellisType<infer Name, infer Z, infer Rel, infer C> ? {
102
+ id: string;
103
+ type: Name;
104
+ } & z.infer<z.ZodObject<Z>> & {
105
+ [K in keyof Rel]: K extends keyof R ? ApplyResolve<Rel[K], R[K]> : RelValue<Rel[K]>;
106
+ } & {
107
+ readonly [K in keyof C]: number;
108
+ } : never;
109
+ /**
110
+ * Infer the entity array shape returned by typed live reads (`useEntities`,
111
+ * `entitiesStore`) from optional read options.
112
+ */
113
+ export type InferEntitiesRead<S extends AnyType, O> = O extends {
114
+ resolve: infer R;
115
+ } ? R extends ResolveSpecFor<S> ? InferResolvedType<S, R>[] : InferType<S>[] : InferType<S>[];
116
+ /**
117
+ * Infer the entity shape returned by typed single-entity reads (`useEntity`,
118
+ * `entityStore`) from optional read options.
119
+ */
120
+ export type InferEntityRead<S extends AnyType, O> = O extends {
121
+ resolve: infer R;
122
+ } ? R extends ResolveSpecFor<S> ? InferResolvedType<S, R> | null : InferType<S> | null : InferType<S> | null;
123
+ export interface DefineTypeOptions<Z extends z.ZodRawShape, R extends RelationMap, C extends ComputedMap> {
124
+ /** Which leaf key is the entity's `title` property. */
125
+ title?: Extract<keyof Z, string>;
126
+ relations?: R;
127
+ computed?: C;
128
+ /** Defaults to 'user'. Core/system are reserved for shipped schemas. */
129
+ tier?: OntologyTier;
130
+ version?: string;
131
+ /** Parent type name (`subClassOf`). */
132
+ extends?: string;
133
+ label?: string;
134
+ }
135
+ export declare function defineType<Name extends string, Z extends z.ZodRawShape, R extends RelationMap = Record<never, never>, C extends ComputedMap = Record<never, never>>(type: Name, shape: Z, opts?: DefineTypeOptions<Z, R, C>): TrellisType<Name, Z, R, C>;
136
+ export {};
137
+ //# sourceMappingURL=define.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../src/schema/define.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Entity projection — sparse EQL bindings ↔ plain entity records.
3
+ *
4
+ * Shared by the realtime subscription path (server hydrates before push) and
5
+ * the client read layer (skips `read()` when rows are already full entities).
6
+ *
7
+ * @module trellis/schema
8
+ */
9
+ import type { EntityData } from '../client/sdk.js';
10
+ /** Minimal kernel surface for hydration. */
11
+ export interface EntityReader {
12
+ getEntity(id: string): EntityRecordLike | null;
13
+ }
14
+ export interface EntityRecordLike {
15
+ id: string;
16
+ type: string;
17
+ facts: Array<{
18
+ a: string;
19
+ v: unknown;
20
+ }>;
21
+ }
22
+ export declare function entityRecordToPlain(entity: EntityRecordLike): EntityData;
23
+ /** Extract an entity id from a query binding row. */
24
+ export declare function bindingEntityId(row: Record<string, unknown>): string | null;
25
+ /** True when the row is a sparse `{ e: id }` trigger, not a hydrated entity. */
26
+ export declare function isSparseBinding(row: Record<string, unknown>): boolean;
27
+ /** Normalize a binding row to {@link EntityData} (hydrated or sparse+partial). */
28
+ export declare function bindingToEntity(row: Record<string, unknown>): EntityData;
29
+ /**
30
+ * Hydrate sparse subscription bindings to full entity records via the kernel.
31
+ * Already-hydrated rows pass through unchanged.
32
+ */
33
+ export declare function hydrateBindings(kernel: EntityReader, bindings: Record<string, unknown>[]): EntityData[];
34
+ //# sourceMappingURL=entity-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-projection.d.ts","sourceRoot":"","sources":["../../src/schema/entity-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACzC;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAMxE;AAED,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAG3E;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAIrE;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAOxE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAClC,UAAU,EAAE,CAOd"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * EQL-S query builders shared by every typed read adapter (React/Vue/Svelte).
3
+ *
4
+ * Centralised so filter encoding has one home — typed reads, live subscriptions,
5
+ * and HTTP `/query` all share the same `find ?e where …` shape.
6
+ *
7
+ * @module trellis/schema
8
+ */
9
+ /** Escape a value for inclusion in a double-quoted EQL literal. */
10
+ export declare function escapeValue(v: string): string;
11
+ /** Comparison operators supported by {@link parseSimple}. */
12
+ export type WhereOp = 'eq' | 'ne' | 'lt' | 'lte' | 'gt' | 'gte' | 'contains' | 'startsWith' | 'endsWith';
13
+ /** Structured filter for one attribute (TRL-7). */
14
+ export type WhereFilter = {
15
+ eq?: unknown;
16
+ ne?: unknown;
17
+ lt?: number | string;
18
+ lte?: number | string;
19
+ gt?: number | string;
20
+ gte?: number | string;
21
+ contains?: string;
22
+ startsWith?: string;
23
+ endsWith?: string;
24
+ };
25
+ /** Equality shorthand or a {@link WhereFilter} object. */
26
+ export type WhereValue = unknown | WhereFilter;
27
+ export declare function isWhereFilter(value: unknown): value is WhereFilter;
28
+ /** Format a JS value as an EQL-S literal (quoted string, bare number, or boolean). */
29
+ export declare function formatEqlLiteral(value: unknown): string;
30
+ /**
31
+ * One `attr op value` fragment for `find ?e where …`.
32
+ * Throws when a filter object specifies more than one operator.
33
+ */
34
+ export declare function whereCondition(attr: string, value: WhereValue): string;
35
+ export type WhereInput = Record<string, WhereValue>;
36
+ /**
37
+ * `find ?e where type = "<Type>" [and <k> <op> <v> …]` — entities of a type,
38
+ * optionally narrowed by attribute filters (ANDed).
39
+ */
40
+ export declare function entitiesQuery(type: string, where?: WhereInput): string;
41
+ /**
42
+ * Single-entity live subscription query (TRL-9).
43
+ * Narrows the type pattern to one entity id — avoids full-type fan-out on the wire.
44
+ */
45
+ export declare function entityQuery(type: string, entityId: string): string;
46
+ //# sourceMappingURL=eql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eql.d.ts","sourceRoot":"","sources":["../../src/schema/eql.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,6DAA6D;AAC7D,MAAM,MAAM,OAAO,GACf,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,UAAU,GACV,YAAY,GACZ,UAAU,CAAC;AAEf,mDAAmD;AACnD,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;AAc/C,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAOlE;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQvD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAiBtE;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CAOtE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIlE"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Trellis Schema — Public API Surface
3
+ *
4
+ * Typed entity definitions (`defineType`) that emit a kernel `SchemaDefinition`
5
+ * and a static TS type. Import from `trellis/schema`:
6
+ *
7
+ * import { defineType, rel, type InferType } from 'trellis/schema';
8
+ *
9
+ * @module trellis/schema
10
+ */
11
+ export { defineType, rel, rollup, formula, } from './define.js';
12
+ export type { AnyType, ComputedField, ComputedMap, DefineTypeOptions, InferEntitiesRead, InferEntityRead, InferType, InferResolvedType, Ref, Relation, RelationMap, RelTarget, ResolveSpecFor, TrellisType, } from './define.js';
13
+ export { entitiesQuery, entityQuery, escapeValue, formatEqlLiteral, isWhereFilter, whereCondition, } from './eql.js';
14
+ export type { WhereFilter, WhereInput, WhereOp, WhereValue } from './eql.js';
15
+ export { entityMutations } from './mutations.js';
16
+ export type { EntityMutations } from './mutations.js';
17
+ export { resolveRelations, inverseForeignKey } from './resolve.js';
18
+ export type { ResolveSpec } from './resolve.js';
19
+ export { bindingEntityId, bindingToEntity, entityRecordToPlain, hydrateBindings, isSparseBinding, } from './entity-projection.js';
20
+ export type { EntityReader, EntityRecordLike } from './entity-projection.js';
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,UAAU,EACV,GAAG,EACH,MAAM,EACN,OAAO,GACR,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,OAAO,EACP,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,GAAG,EACH,QAAQ,EACR,WAAW,EACX,SAAS,EACT,cAAc,EACd,WAAW,GACZ,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,aAAa,EACb,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG7E,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,46 @@
1
+ import "../chunk-WXSWA3MV.js";
2
+ import {
3
+ entityMutations
4
+ } from "../chunk-USEINYUL.js";
5
+ import {
6
+ defineType,
7
+ formula,
8
+ rel,
9
+ rollup
10
+ } from "../chunk-44FFQKQX.js";
11
+ import {
12
+ bindingEntityId,
13
+ bindingToEntity,
14
+ entitiesQuery,
15
+ entityQuery,
16
+ entityRecordToPlain,
17
+ escapeValue,
18
+ formatEqlLiteral,
19
+ hydrateBindings,
20
+ inverseForeignKey,
21
+ isSparseBinding,
22
+ isWhereFilter,
23
+ resolveRelations,
24
+ whereCondition
25
+ } from "../chunk-JUEMDWLU.js";
26
+ import "../chunk-KFQGP6VL.js";
27
+ export {
28
+ bindingEntityId,
29
+ bindingToEntity,
30
+ defineType,
31
+ entitiesQuery,
32
+ entityMutations,
33
+ entityQuery,
34
+ entityRecordToPlain,
35
+ escapeValue,
36
+ formatEqlLiteral,
37
+ formula,
38
+ hydrateBindings,
39
+ inverseForeignKey,
40
+ isSparseBinding,
41
+ isWhereFilter,
42
+ rel,
43
+ resolveRelations,
44
+ rollup,
45
+ whereCondition
46
+ };
@@ -0,0 +1,21 @@
1
+ import type { TrellisKernel } from '../core/kernel/trellis-kernel.js';
2
+ import type { SchemaDefinition } from '../core/ontology/types.js';
3
+ import type { EntityData } from '../client/sdk.js';
4
+ import type { RelationResolveClient } from './resolve.js';
5
+ import { type AnyType } from './define.js';
6
+ import { type ResolveSpec } from './resolve.js';
7
+ /** Short name from `trellis:NavSection` → `NavSection`. */
8
+ export declare function ontologyTypeName(id: string): string;
9
+ /** Find a registered ontology schema by entity `type` fact value. */
10
+ export declare function findOntologyByTypeName(kernel: TrellisKernel, typeName: string): SchemaDefinition | undefined;
11
+ /** Build a minimal {@link AnyType} handle from a kernel ontology (for server resolve). */
12
+ export declare function schemaHandleFromOntology(def: SchemaDefinition, typeName?: string): AnyType;
13
+ /** Lookup table for relation targets registered in the kernel. */
14
+ export declare function createSchemaLookup(kernel: TrellisKernel): (typeName: string) => AnyType | null;
15
+ /** {@link TrellisDb} surface backed by an in-process kernel (server resolve path). */
16
+ export declare function createKernelResolveClient(kernel: TrellisKernel): RelationResolveClient;
17
+ /**
18
+ * Hydrate query bindings and optionally expand relations before wire push.
19
+ */
20
+ export declare function hydrateAndResolve(kernel: TrellisKernel, bindings: Record<string, unknown>[], entityType?: string, resolve?: ResolveSpec): Promise<EntityData[]>;
21
+ //# sourceMappingURL=kernel-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel-resolve.d.ts","sourceRoot":"","sources":["../../src/schema/kernel-resolve.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAEL,KAAK,OAAO,EAGb,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAElE,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,qEAAqE;AACrE,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,GACf,gBAAgB,GAAG,SAAS,CAS9B;AAED,0FAA0F;AAC1F,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,gBAAgB,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAsBT;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,GACpB,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAUtC;AAED,sFAAsF;AACtF,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,GACpB,qBAAqB,CAkBvB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACnC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,UAAU,EAAE,CAAC,CAgBvB"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Framework-agnostic, schema-typed mutations. The React `useMutation`, Vue
3
+ * `useMutation`, and Svelte mutation helper all delegate here so create/update
4
+ * payloads are checked against the schema in exactly one place.
5
+ *
6
+ * @module trellis/schema
7
+ */
8
+ import type { TrellisDb } from '../client/sdk.js';
9
+ import type { AnyType, InferType } from './define.js';
10
+ export interface EntityMutations<E> {
11
+ /** Create an entity of this type. Returns the new id. */
12
+ create(attrs: Omit<E, 'id' | 'type'>): Promise<string>;
13
+ /** Patch an entity's attributes. */
14
+ update(id: string, attrs: Partial<Omit<E, 'id' | 'type'>>): Promise<void>;
15
+ /** Delete an entity by id. */
16
+ remove(id: string): Promise<void>;
17
+ }
18
+ /** Bind create/update/remove for a schema to a client. */
19
+ export declare function entityMutations<S extends AnyType>(client: TrellisDb, schema: S): EntityMutations<InferType<S>>;
20
+ //# sourceMappingURL=mutations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutations.d.ts","sourceRoot":"","sources":["../../src/schema/mutations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,yDAAyD;IACzD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,oCAAoC;IACpC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,8BAA8B;IAC9B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,CAAC,SAAS,OAAO,EAC/C,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,CAAC,GACR,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAQ/B"}
@@ -0,0 +1,21 @@
1
+ import type { AnyType } from './define.js';
2
+ import type { EntityData, TrellisDb } from '../client/sdk.js';
3
+ /** Read/query surface used by relation expansion (client or in-process kernel). */
4
+ export type RelationResolveClient = Pick<TrellisDb, 'read' | 'query'>;
5
+ /**
6
+ * Runtime resolve map (loose keys). For static types use
7
+ * {@link import('./define.js').ResolveSpecFor}.
8
+ */
9
+ export type ResolveSpec = {
10
+ [key: string]: boolean | ResolveSpec | undefined;
11
+ };
12
+ /** Child attribute pointing at `parent` (inverse of a `many` relation). */
13
+ export declare function inverseForeignKey(parent: AnyType, relationName: string, child: AnyType): string | null;
14
+ /**
15
+ * Expand `resolve` relation keys on hydrated entities. Mutates rows in place.
16
+ */
17
+ export declare function resolveRelations(client: RelationResolveClient, schema: AnyType, entities: EntityData[], spec: ResolveSpec, opts?: {
18
+ copy?: boolean;
19
+ schemaLookup?: (typeName: string) => AnyType | null;
20
+ }): Promise<EntityData[]>;
21
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/schema/resolve.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE9D,mFAAmF;AACnF,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;AAEtE;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;CAClD,CAAC;AAoBF,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,OAAO,GACb,MAAM,GAAG,IAAI,CAKf;AA4ED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,qBAAqB,EAC7B,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,UAAU,EAAE,EACtB,IAAI,EAAE,WAAW,EACjB,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAA;CAAE,GAC7E,OAAO,CAAC,UAAU,EAAE,CAAC,CA6DvB"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * TurtleDB deploy — name validation and URL helpers.
3
+ *
4
+ * @module trellis/server
5
+ */
6
+ export declare class DeployNameError extends Error {
7
+ constructor(message: string);
8
+ }
9
+ /**
10
+ * Normalize user input (trim, lowercase).
11
+ */
12
+ export declare function normalizeDeployName(name: string): string;
13
+ /**
14
+ * Validate a Sprite / room-node slug. Returns normalized name or throws.
15
+ */
16
+ export declare function validateDeployName(name: string): string;
17
+ /**
18
+ * Stub / docs URL pattern (`https://<slug>.sprites.app`).
19
+ * Live deploy must call `resolveSpritePublicUrl()` — Sprites assigns
20
+ * `https://<slug>-<org>.sprites.app`.
21
+ */
22
+ export declare function buildDeployUrl(name: string): string;
23
+ /** Sprites public HTTP URL routes to this port by default. */
24
+ export declare const SPRITE_PUBLIC_HTTP_PORT = 8080;
25
+ //# sourceMappingURL=deploy-meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-meta.d.ts","sourceRoot":"","sources":["../../src/server/deploy-meta.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAuBvD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,8DAA8D;AAC9D,eAAO,MAAM,uBAAuB,OAAO,CAAC"}
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * Deploys a Trellis DB server to a Sprites cloud environment.
5
5
  *
6
- * Sprites is a cloud VM platform. Each Sprite gets a persistent URL:
7
- * https://<name>.sprites.app
6
+ * Sprites is a cloud VM platform. Each Sprite gets a persistent URL from
7
+ * `sprite url` (typically `https://<name>-<org>.sprites.app`).
8
8
  *
9
9
  * Deployment steps:
10
10
  * 1. Bundle the server entrypoint with Bun
@@ -34,6 +34,11 @@ export interface DeployOptions {
34
34
  configDir?: string;
35
35
  /** Progress callback. */
36
36
  onProgress?: (msg: string) => void;
37
+ /**
38
+ * Skip Sprite provisioning — validate name and write `.trellis-db.json` only.
39
+ * For local dry-runs and CI (`trellis deploy --stub`).
40
+ */
41
+ stub?: boolean;
37
42
  }
38
43
  export interface DeployResult {
39
44
  url: string;
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/server/deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAWH,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAuGvE"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/server/deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAwBH,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAqFvE"}
@@ -14,13 +14,18 @@ export { resolveAuth, signJwt, verifyJwt, buildOAuthUrl, exchangeOAuthCode, GOOG
14
14
  export type { AuthContext, AuthConfig, OAuthProvider } from './auth.js';
15
15
  export { PermissionRegistry, PermissionError, PUBLIC_READ, FULLY_PUBLIC, OWNER_ONLY, ADMIN_ONLY, } from './permissions.js';
16
16
  export type { PermissionRule, PermissionsDef, CrudOp } from './permissions.js';
17
- export { TenantPool, DEFAULT_TENANT } from './tenancy.js';
17
+ export { TenantPool, DEFAULT_TENANT, resolvePoolBackendFromEnv, } from './tenancy.js';
18
18
  export { SubscriptionManager } from './realtime.js';
19
19
  export type { Subscription as RealtimeSubscription, WsClient, } from './realtime.js';
20
+ export { UsageMeter, sampleTenantStorage, resolveUsageTenantId, verifyAdminKey, dayKey, } from './usage-meter.js';
21
+ export type { DayBucket, MeterName, TenantUsageSnapshot, } from './usage-meter.js';
22
+ export { attachRealtimeRelay, createRealtimeRelay, } from '../realtime/relay-server.js';
23
+ export type { RealtimeRelay, RealtimeRelayOptions, StandaloneRealtimeRelay, StandaloneRealtimeRelayOptions, } from '../realtime/relay-server.js';
20
24
  export { importFile, importRecords } from './import.js';
21
25
  export type { ImportOptions, ImportResult } from './import.js';
22
26
  export { deploy } from './deploy.js';
23
27
  export type { DeployOptions, DeployResult } from './deploy.js';
24
- export { runSpriteCmd, runSpriteCopy, runSpriteInteractive, assertSpriteCli, resolveSprite, } from './sprites.js';
28
+ export { validateDeployName, normalizeDeployName, buildDeployUrl, SPRITE_PUBLIC_HTTP_PORT, DeployNameError, } from './deploy-meta.js';
29
+ export { runSpriteCmd, runSpriteCopy, runSpriteExec, runSpriteInteractive, assertSpriteCli, resolveSprite, parseSpriteUrlOutput, resolveSpritePublicUrl, ensureSpritePublicAccess, ensureSprite, SPRITE_ENSURE_BUN_SH, } from './sprites.js';
25
30
  export { loadVmConfig, saveVmConfig, getActiveSprite, setActiveSprite, trackSprite, untrackSprite, isSpriteTracked, getSprite, VmConfig, } from './vm-config.js';
26
31
  //# sourceMappingURL=index.d.ts.map