trellis 3.2.2 → 3.2.4

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 (210) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +4 -0
  3. package/dist/better-sqlite-backend-CDYOAJDF.js +209 -0
  4. package/dist/boot-middleware-LBJX4N2S.js +9 -0
  5. package/dist/boot-middleware-PATBLD52.js +9 -0
  6. package/dist/bridge-G5DPW6TY.js +2361 -0
  7. package/dist/bridge-JSSPQPRH.js +2389 -0
  8. package/dist/bridge-LNXE4HAW.js +2389 -0
  9. package/dist/bridge-OAAXJWSA.js +2389 -0
  10. package/dist/bridge-SFS63RHC.js +2367 -0
  11. package/dist/bridge-U5TOUBVM.js +2389 -0
  12. package/dist/browser/index.js +9 -9
  13. package/dist/{chunk-KSU2GW22.js → chunk-276W52FK.js} +8 -0
  14. package/dist/{chunk-KFQGP6VL.js → chunk-2ESYSVXG.js} +15 -0
  15. package/dist/{chunk-L5N5PR2S.js → chunk-2WW2X2BR.js} +313 -77
  16. package/dist/chunk-3XCOAP6G.js +48 -0
  17. package/dist/chunk-53PDCTJ3.js +1856 -0
  18. package/dist/{chunk-N6MYZT4O.js → chunk-547FZFKO.js} +1 -1
  19. package/dist/{chunk-H6JB3PZ3.js → chunk-5KSGGKET.js} +1 -1
  20. package/dist/{chunk-J2TXUFCZ.js → chunk-6RWGFC3N.js} +134 -20
  21. package/dist/{chunk-QB5ISE47.js → chunk-7WVOPXJV.js} +3 -3
  22. package/dist/chunk-CMSFD6OV.js +11801 -0
  23. package/dist/{chunk-RSWUFTO2.js → chunk-CPUYCCLT.js} +2 -2
  24. package/dist/{chunk-4HYPLFJD.js → chunk-FA5TFVA5.js} +1 -1
  25. package/dist/{chunk-4XIVMVHC.js → chunk-G3XIHPSQ.js} +1 -1
  26. package/dist/{chunk-JHHEXEDM.js → chunk-GCQF75T4.js} +3 -3
  27. package/dist/{chunk-FKQO5A3H.js → chunk-GHG4H3AS.js} +2 -2
  28. package/dist/{chunk-GLM4HGN4.js → chunk-GRWQPKYK.js} +1 -1
  29. package/dist/{chunk-PZ4XYZ4J.js → chunk-GXA73CNC.js} +33 -8
  30. package/dist/{chunk-6GEZ6DN5.js → chunk-H6VTC5SS.js} +3 -3
  31. package/dist/{chunk-S3XLFZ27.js → chunk-IHHSOBJS.js} +1 -1
  32. package/dist/chunk-IJNC25UD.js +2243 -0
  33. package/dist/{chunk-VDAKEOML.js → chunk-J6OUIION.js} +1 -1
  34. package/dist/chunk-JAVAYMMS.js +6 -0
  35. package/dist/{chunk-S6GBJ2ZB.js → chunk-JCQQFLO5.js} +1 -1
  36. package/dist/{chunk-FWRS4CSC.js → chunk-KQG6ZYXP.js} +3 -3
  37. package/dist/chunk-KXAISKZT.js +119 -0
  38. package/dist/chunk-N3R74ZSR.js +7949 -0
  39. package/dist/{chunk-GU374KWZ.js → chunk-NLFRRGX6.js} +3 -3
  40. package/dist/{chunk-XMQ7G77X.js → chunk-OB4CMMX6.js} +1 -1
  41. package/dist/chunk-OKNASCZY.js +182 -0
  42. package/dist/chunk-ONOPPX5E.js +394 -0
  43. package/dist/chunk-QMSU2RAH.js +98 -0
  44. package/dist/{chunk-TCKXSOBP.js → chunk-RARKFVWU.js} +8 -1
  45. package/dist/{chunk-2W3MHTMG.js → chunk-SJWVDS5M.js} +835 -127
  46. package/dist/{chunk-SPSPV5BC.js → chunk-SZ3VAB5P.js} +159 -2
  47. package/dist/chunk-V2ASD6RQ.js +147 -0
  48. package/dist/{chunk-KQ4A2D2P.js → chunk-V4YCJDYL.js} +58 -38
  49. package/dist/{chunk-LNUIGRDZ.js → chunk-VWKLKLYB.js} +1 -1
  50. package/dist/chunk-W5PADCDF.js +1856 -0
  51. package/dist/{chunk-MLC5BUYO.js → chunk-WMERMSWI.js} +1 -1
  52. package/dist/{chunk-IZX2PLIB.js → chunk-WXAURJUD.js} +835 -127
  53. package/dist/chunk-YC5I32PS.js +147 -0
  54. package/dist/{chunk-VBYUTRXX.js → chunk-YKVB4LUQ.js} +3 -3
  55. package/dist/{chunk-7ZFRVCUE.js → chunk-YPT6XMS4.js} +48 -64
  56. package/dist/cli/deploy-cli.d.ts.map +1 -1
  57. package/dist/{deploy-cli-C35HTITO.js → cli/deploy-cli.js} +45 -6
  58. package/dist/cli/gateway-deploy-cli.d.ts +19 -0
  59. package/dist/cli/gateway-deploy-cli.d.ts.map +1 -0
  60. package/dist/cli/index.d.ts.map +1 -1
  61. package/dist/cli/index.js +1363 -884
  62. package/dist/cli/lane.d.ts.map +1 -1
  63. package/dist/cli/protocol.d.ts +6 -0
  64. package/dist/cli/protocol.d.ts.map +1 -0
  65. package/dist/client/index.browser.js +2 -2
  66. package/dist/client/index.js +11 -11
  67. package/dist/client/sdk.browser.d.ts +28 -1
  68. package/dist/client/sdk.browser.d.ts.map +1 -1
  69. package/dist/client/sdk.browser.js +2 -2
  70. package/dist/client/sdk.js +2 -2
  71. package/dist/cms/index.js +1 -1
  72. package/dist/config-KMY6RRK3.js +19 -0
  73. package/dist/core/index.js +17 -17
  74. package/dist/core/kernel/boot-middleware.d.ts +1 -1
  75. package/dist/core/kernel/boot-middleware.d.ts.map +1 -1
  76. package/dist/core/kernel/schema-middleware.d.ts +2 -1
  77. package/dist/core/kernel/schema-middleware.d.ts.map +1 -1
  78. package/dist/core/kernel/trellis-kernel.d.ts +10 -10
  79. package/dist/core/kernel/trellis-kernel.d.ts.map +1 -1
  80. package/dist/core/persist/factory.js +2 -2
  81. package/dist/core/persist/sqljs-backend.js +2 -2
  82. package/dist/db/index.js +32 -27
  83. package/dist/decisions/index.js +4 -4
  84. package/dist/embeddings/index.js +2 -2
  85. package/dist/engine.d.ts +24 -6
  86. package/dist/engine.d.ts.map +1 -1
  87. package/dist/gateway-deploy-cli-4TU4V3QI.js +312 -0
  88. package/dist/gateway-deploy-cli-A4ISTDHJ.js +298 -0
  89. package/dist/gateway-deploy-cli-D3XTKJQJ.js +312 -0
  90. package/dist/gateway-deploy-cli-ECV3OQCN.js +305 -0
  91. package/dist/gateway-deploy-cli-JUHKVIJE.js +296 -0
  92. package/dist/gateway-deploy-cli-NSDW2JLT.js +310 -0
  93. package/dist/gateway-serve-CM5EAZ52.js +113 -0
  94. package/dist/import-AJLYHFIA.js +10 -0
  95. package/dist/index.js +11 -11
  96. package/dist/launch-explorer-FVX6ZABW.js +95 -0
  97. package/dist/links/index.js +2 -2
  98. package/dist/mcp/bridge.d.ts +45 -0
  99. package/dist/mcp/bridge.d.ts.map +1 -0
  100. package/dist/mcp/discovery.d.ts +15 -0
  101. package/dist/mcp/discovery.d.ts.map +1 -0
  102. package/dist/mcp/gateway-config.d.ts +20 -0
  103. package/dist/mcp/gateway-config.d.ts.map +1 -0
  104. package/dist/mcp/gateway-serve.d.ts +19 -0
  105. package/dist/mcp/gateway-serve.d.ts.map +1 -0
  106. package/dist/mcp/gateway-serve.js +119 -0
  107. package/dist/mcp/graph-summary.d.ts +47 -0
  108. package/dist/mcp/graph-summary.d.ts.map +1 -0
  109. package/dist/mcp/room-audit.d.ts +14 -0
  110. package/dist/mcp/room-audit.d.ts.map +1 -0
  111. package/dist/mcp/room-helpers.d.ts +43 -0
  112. package/dist/mcp/room-helpers.d.ts.map +1 -0
  113. package/dist/mcp/room-registry.d.ts +32 -0
  114. package/dist/mcp/room-registry.d.ts.map +1 -0
  115. package/dist/mcp/room.d.ts +28 -0
  116. package/dist/mcp/room.d.ts.map +1 -0
  117. package/dist/plugins/agent-memory/index.js +1 -1
  118. package/dist/plugins/idea-garden/index.js +1 -1
  119. package/dist/plugins/plan-approval/index.js +1 -1
  120. package/dist/plugins/proactive-watcher/index.js +1 -1
  121. package/dist/protocol/envelope.d.ts +30 -0
  122. package/dist/protocol/envelope.d.ts.map +1 -0
  123. package/dist/protocol/index.d.ts +3 -0
  124. package/dist/protocol/index.d.ts.map +1 -0
  125. package/dist/protocol/whereami.d.ts +33 -0
  126. package/dist/protocol/whereami.d.ts.map +1 -0
  127. package/dist/query-KHDDIR5G.js +31 -0
  128. package/dist/react/index.js +3 -3
  129. package/dist/react/realtime.js +1 -1
  130. package/dist/react/schema-hooks.js +6 -6
  131. package/dist/realtime/index.js +3 -3
  132. package/dist/realtime/relay-server.d.ts.map +1 -1
  133. package/dist/realtime/room.d.ts.map +1 -1
  134. package/dist/realtime.bundle.js +2 -0
  135. package/dist/relay-server-BT6DCJ7F.js +12 -0
  136. package/dist/relay-server-MPQVGNQU.js +12 -0
  137. package/dist/relay-server-PAPW2EWC.js +12 -0
  138. package/dist/remote-manager-6ERQUBSL.js +224 -0
  139. package/dist/remote-manager-G665WWYY.js +224 -0
  140. package/dist/remote-manager-HJTEZ4OF.js +224 -0
  141. package/dist/remote-manager-NYP2Y5UR.js +224 -0
  142. package/dist/remote-manager-WGLCAMMC.js +224 -0
  143. package/dist/scaffold/write.d.ts.map +1 -1
  144. package/dist/schema/index.js +1 -1
  145. package/dist/server/cors.d.ts +13 -0
  146. package/dist/server/cors.d.ts.map +1 -0
  147. package/dist/server/deploy-gateway.d.ts +27 -0
  148. package/dist/server/deploy-gateway.d.ts.map +1 -0
  149. package/dist/server/deploy.d.ts +1 -1
  150. package/dist/server/deploy.d.ts.map +1 -1
  151. package/dist/server/deploy.js +10 -0
  152. package/dist/server/discovery-mcp-gateway.d.ts +13 -0
  153. package/dist/server/discovery-mcp-gateway.d.ts.map +1 -0
  154. package/dist/server/index.js +44 -37
  155. package/dist/server/mcp-gateway.d.ts +27 -0
  156. package/dist/server/mcp-gateway.d.ts.map +1 -0
  157. package/dist/server/mcp-oauth-metadata.d.ts +31 -0
  158. package/dist/server/mcp-oauth-metadata.d.ts.map +1 -0
  159. package/dist/server/node-adapter.d.ts +7 -0
  160. package/dist/server/node-adapter.d.ts.map +1 -1
  161. package/dist/server/node-adapter.js +2 -2
  162. package/dist/server/realtime.d.ts.map +1 -1
  163. package/dist/server/server.d.ts +8 -0
  164. package/dist/server/server.d.ts.map +1 -1
  165. package/dist/server/streamable-mcp-gateway.d.ts +12 -0
  166. package/dist/server/streamable-mcp-gateway.d.ts.map +1 -0
  167. package/dist/server/usage-meter.d.ts +11 -0
  168. package/dist/server/usage-meter.d.ts.map +1 -1
  169. package/dist/server-4VEZHXXS.js +23 -0
  170. package/dist/{server-ZVWGLLRF.js → server-556BMK4C.js} +1 -1
  171. package/dist/server-FQT2VYRE.js +23 -0
  172. package/dist/server-HGZE4ECC.js +23 -0
  173. package/dist/server-J4JKEAMH.js +23 -0
  174. package/dist/server-LXPM5TFR.js +23 -0
  175. package/dist/{server-MB3OPSPI.js → server-POB4NEUX.js} +2 -2
  176. package/dist/server-VJKAPGPG.js +23 -0
  177. package/dist/server-YHS3XIIG.js +23 -0
  178. package/dist/server-ZHTPWPXS.js +23 -0
  179. package/dist/sprites-NC6D7YZS.js +27 -0
  180. package/dist/svelte/index.js +3 -3
  181. package/dist/svelte/schema-hooks.js +4 -4
  182. package/dist/sync/index.js +4 -4
  183. package/dist/tenancy-2SZTP4UD.js +16 -0
  184. package/dist/tenancy-7MTSESMJ.js +16 -0
  185. package/dist/tenancy-U4E7ZEAG.js +16 -0
  186. package/dist/vcs/decompose.d.ts.map +1 -1
  187. package/dist/vcs/index.js +5 -5
  188. package/dist/vcs/lane-disk-materialize.d.ts +11 -0
  189. package/dist/vcs/lane-disk-materialize.d.ts.map +1 -0
  190. package/dist/vcs/lane-worktree.d.ts +21 -0
  191. package/dist/vcs/lane-worktree.d.ts.map +1 -0
  192. package/dist/vcs/store.d.ts +28 -0
  193. package/dist/vcs/store.d.ts.map +1 -0
  194. package/dist/vcs/types.d.ts +5 -0
  195. package/dist/vcs/types.d.ts.map +1 -1
  196. package/dist/vm-config-YZRJ3KUB.js +21 -0
  197. package/dist/vue/index.js +3 -3
  198. package/dist/vue/schema-hooks.js +4 -4
  199. package/package.json +4 -3
  200. package/dist/chunk-FF36CQHZ.js +0 -61
  201. package/dist/chunk-GFZCJ4EH.js +0 -108
  202. package/dist/chunk-KIJITUZB.js +0 -419
  203. package/dist/chunk-SGMDTWJJ.js +0 -149
  204. package/dist/chunk-UQISRW6T.js +0 -203
  205. package/dist/db/trellis.css +0 -1
  206. package/dist/deploy-LQ7GUGJ5.js +0 -9
  207. package/dist/deploy-YNVG5E4E.js +0 -9
  208. package/dist/deploy-cli-24BCHAXY.js +0 -67
  209. package/dist/sprites-RU3E4XQN.js +0 -15
  210. package/dist/tenancy-NBLLGCNJ.js +0 -14
@@ -1,149 +0,0 @@
1
- import {
2
- attachStandardMiddleware
3
- } from "./chunk-SPSPV5BC.js";
4
- import {
5
- SqliteKernelBackend
6
- } from "./chunk-XMQ7G77X.js";
7
- import {
8
- TrellisKernel
9
- } from "./chunk-KQ4A2D2P.js";
10
-
11
- // src/server/tenancy.ts
12
- import { existsSync, mkdirSync } from "fs";
13
- import { join, resolve } from "path";
14
- var DEFAULT_TENANT = "default";
15
- var TENANTS_DIR = "tenants";
16
- var TenantPool = class {
17
- pool = /* @__PURE__ */ new Map();
18
- dbPath;
19
- agentId;
20
- backendOpts;
21
- constructor(dbPath, agentIdOrOpts = "trellis-db") {
22
- this.dbPath = resolve(dbPath);
23
- if (typeof agentIdOrOpts === "string") {
24
- this.agentId = agentIdOrOpts;
25
- this.backendOpts = void 0;
26
- } else {
27
- this.agentId = agentIdOrOpts.agentId ?? "trellis-db";
28
- this.backendOpts = agentIdOrOpts.backend;
29
- }
30
- this._ensureDirs();
31
- }
32
- // -------------------------------------------------------------------------
33
- // Public API
34
- // -------------------------------------------------------------------------
35
- /**
36
- * Get (or create) the kernel for a tenant.
37
- * Pass `null` or `undefined` to get the default tenant.
38
- *
39
- * Uses the synchronous bun:sqlite backend. To use an async backend
40
- * (better-sqlite3, sql.js) call `preload(tenantId)` first; subsequent
41
- * `get()` calls will return the preloaded kernel from the pool.
42
- */
43
- get(tenantId) {
44
- const id = tenantId ?? DEFAULT_TENANT;
45
- if (!this.pool.has(id)) {
46
- this.pool.set(id, this._createKernelSync(id));
47
- }
48
- return this.pool.get(id);
49
- }
50
- /**
51
- * Pre-create a tenant's kernel using the runtime-selected backend.
52
- * Required when running with an async-only backend (sql.js / WebContainer
53
- * / browser). Idempotent — safe to call multiple times.
54
- *
55
- * After `preload()`, subsequent `get(tenantId)` returns the same kernel
56
- * synchronously from the pool.
57
- */
58
- async preload(tenantId) {
59
- const id = tenantId ?? DEFAULT_TENANT;
60
- const cached = this.pool.get(id);
61
- if (cached) return cached;
62
- const kernel = await this._createKernelAsync(id);
63
- this.pool.set(id, kernel);
64
- return kernel;
65
- }
66
- /**
67
- * Check whether a tenant has been initialized (kernel created).
68
- */
69
- has(tenantId) {
70
- return this.pool.has(tenantId);
71
- }
72
- /**
73
- * List all active tenant IDs (those with open kernels).
74
- */
75
- activeTenants() {
76
- return Array.from(this.pool.keys());
77
- }
78
- /**
79
- * Close a specific tenant's kernel and remove it from the pool.
80
- */
81
- close(tenantId) {
82
- const kernel = this.pool.get(tenantId);
83
- if (kernel) {
84
- kernel.close();
85
- this.pool.delete(tenantId);
86
- }
87
- }
88
- /**
89
- * Close all kernels and clear the pool.
90
- */
91
- closeAll() {
92
- for (const kernel of this.pool.values()) {
93
- kernel.close();
94
- }
95
- this.pool.clear();
96
- }
97
- /** Absolute path to the tenant data directory. */
98
- dataPath() {
99
- return this.dbPath;
100
- }
101
- /**
102
- * Return the SQLite file path for a given tenant.
103
- */
104
- dbFilePath(tenantId) {
105
- const id = tenantId ?? DEFAULT_TENANT;
106
- if (id === DEFAULT_TENANT) {
107
- return join(this.dbPath, "default.sqlite");
108
- }
109
- return join(this.dbPath, TENANTS_DIR, `${id}.sqlite`);
110
- }
111
- // -------------------------------------------------------------------------
112
- // Private
113
- // -------------------------------------------------------------------------
114
- _createKernelSync(tenantId) {
115
- const sqlitePath = this.dbFilePath(tenantId);
116
- const backend = new SqliteKernelBackend(sqlitePath);
117
- return this._wrapKernel(backend);
118
- }
119
- async _createKernelAsync(tenantId) {
120
- const sqlitePath = this.dbFilePath(tenantId);
121
- const { createKernelBackend } = await import("./core/persist/factory.js");
122
- const backend = await createKernelBackend(sqlitePath, this.backendOpts);
123
- return this._wrapKernel(backend);
124
- }
125
- _wrapKernel(backend) {
126
- const kernel = new TrellisKernel({
127
- backend,
128
- agentId: this.agentId,
129
- snapshotThreshold: 1e3
130
- });
131
- kernel.boot();
132
- attachStandardMiddleware(kernel);
133
- return kernel;
134
- }
135
- _ensureDirs() {
136
- if (!existsSync(this.dbPath)) {
137
- mkdirSync(this.dbPath, { recursive: true });
138
- }
139
- const tenantsPath = join(this.dbPath, TENANTS_DIR);
140
- if (!existsSync(tenantsPath)) {
141
- mkdirSync(tenantsPath, { recursive: true });
142
- }
143
- }
144
- };
145
-
146
- export {
147
- DEFAULT_TENANT,
148
- TenantPool
149
- };
@@ -1,203 +0,0 @@
1
- import {
2
- assertSpriteCli,
3
- runSpriteCmd,
4
- runSpriteCopy
5
- } from "./chunk-FF36CQHZ.js";
6
- import {
7
- updateConfig
8
- } from "./chunk-JA7AIHRK.js";
9
- import {
10
- __require
11
- } from "./chunk-KFQGP6VL.js";
12
-
13
- // src/server/deploy.ts
14
- import { existsSync, writeFileSync, mkdirSync } from "fs";
15
- import { join, resolve } from "path";
16
-
17
- // src/server/deploy-meta.ts
18
- var DEPLOY_NAME_RE = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
19
- var MIN_LEN = 3;
20
- var MAX_LEN = 32;
21
- var DeployNameError = class extends Error {
22
- constructor(message) {
23
- super(message);
24
- this.name = "DeployNameError";
25
- }
26
- };
27
- function normalizeDeployName(name) {
28
- return name.trim().toLowerCase();
29
- }
30
- function validateDeployName(name) {
31
- const normalized = normalizeDeployName(name);
32
- if (!normalized) {
33
- throw new DeployNameError("Deploy name is required.");
34
- }
35
- if (normalized.length < MIN_LEN || normalized.length > MAX_LEN) {
36
- throw new DeployNameError(
37
- `Deploy name must be ${MIN_LEN}\u2013${MAX_LEN} characters (got ${normalized.length}).`
38
- );
39
- }
40
- if (normalized.includes("--")) {
41
- throw new DeployNameError(
42
- "Deploy name cannot contain consecutive hyphens."
43
- );
44
- }
45
- if (!DEPLOY_NAME_RE.test(normalized)) {
46
- throw new DeployNameError(
47
- "Deploy name must start with a letter and use only lowercase letters, numbers, and single hyphens (e.g. my-app)."
48
- );
49
- }
50
- return normalized;
51
- }
52
- function buildDeployUrl(name) {
53
- const slug = validateDeployName(name);
54
- return `https://${slug}.sprites.app`;
55
- }
56
-
57
- // src/server/deploy.ts
58
- async function deploy(opts) {
59
- const { port = 3e3, configDir = ".", onProgress = () => {
60
- } } = opts;
61
- const name = validateDeployName(opts.name);
62
- const apiKey = opts.apiKey ?? generateSecret("spk_");
63
- const jwtSecret = opts.jwtSecret ?? generateSecret("jws_");
64
- const url = buildDeployUrl(name);
65
- if (opts.stub) {
66
- onProgress("Stub deploy \u2014 skipping Sprites provisioning");
67
- onProgress("Writing .trellis-db.json...");
68
- writeRemoteDeployConfig({ name, url, apiKey, configDir });
69
- return { url, name, apiKey };
70
- }
71
- onProgress("Checking Sprites CLI...");
72
- await assertSpriteCli();
73
- onProgress("Writing server entrypoint...");
74
- const tmpDir = resolve(configDir, ".trellis-deploy");
75
- if (!existsSync(tmpDir)) mkdirSync(tmpDir, { recursive: true });
76
- const entrypoint = join(tmpDir, "server-entry.ts");
77
- writeFileSync(
78
- entrypoint,
79
- generateServerEntrypoint({ port, apiKey, jwtSecret })
80
- );
81
- onProgress("Bundling server with Bun...");
82
- const bundlePath = join(tmpDir, "server.js");
83
- await runBun([
84
- "build",
85
- entrypoint,
86
- "--outfile",
87
- bundlePath,
88
- "--target",
89
- "bun",
90
- "--format",
91
- "esm"
92
- ]);
93
- onProgress(`Uploading to Sprite: ${name}...`);
94
- await runSpriteCmd([
95
- "exec",
96
- "--sprite",
97
- name,
98
- "mkdir",
99
- "-p",
100
- "/home/sprite/trellis-db"
101
- ]);
102
- await runSpriteCopy(bundlePath, name, "/home/sprite/trellis-db/server.js");
103
- onProgress("Ensuring Bun is installed...");
104
- await runSpriteCmd([
105
- "exec",
106
- "--sprite",
107
- name,
108
- "bash",
109
- "-c",
110
- "which bun || curl -fsSL https://bun.sh/install | bash"
111
- ]).catch(() => {
112
- });
113
- onProgress("Starting server...");
114
- await runSpriteCmd([
115
- "exec",
116
- "--sprite",
117
- name,
118
- "bash",
119
- "-c",
120
- "sprite sessions list 2>/dev/null | grep trellis-db | awk '{print $1}' | xargs -r sprite sessions kill"
121
- ]).catch(() => {
122
- });
123
- await runSpriteCmd([
124
- "exec",
125
- "--sprite",
126
- name,
127
- "-tty",
128
- "--detach",
129
- "--session-name",
130
- "trellis-db",
131
- "bash",
132
- "-c",
133
- `cd /home/sprite/trellis-db && ~/.bun/bin/bun run server.js`
134
- ]);
135
- onProgress("Writing .trellis-db.json...");
136
- writeRemoteDeployConfig({ name, url, apiKey, configDir });
137
- return { url, name, apiKey };
138
- }
139
- function writeRemoteDeployConfig(opts) {
140
- updateConfig(
141
- {
142
- mode: "remote",
143
- url: opts.url,
144
- apiKey: opts.apiKey,
145
- spriteName: opts.name,
146
- deployedAt: (/* @__PURE__ */ new Date()).toISOString()
147
- },
148
- opts.configDir
149
- );
150
- }
151
- function generateSecret(prefix) {
152
- const bytes = new Uint8Array(24);
153
- crypto.getRandomValues(bytes);
154
- const b64 = btoa(String.fromCharCode(...bytes)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
155
- return `${prefix}${b64}`;
156
- }
157
- async function runBun(args) {
158
- const { execFile } = __require("child_process");
159
- const { promisify } = __require("util");
160
- const execFileAsync = promisify(execFile);
161
- try {
162
- await execFileAsync("bun", args);
163
- } catch (err) {
164
- throw new Error(
165
- `bun ${args[0]} failed (exit ${err.code ?? "?"}): ${err.stderr ?? err.message}`
166
- );
167
- }
168
- }
169
- function generateServerEntrypoint(opts) {
170
- return `
171
- import { TenantPool, startServer } from 'trellis/server';
172
- import { readConfig, defaultLocalConfig, writeConfig } from 'trellis/client';
173
- import { join } from 'path';
174
- import { existsSync } from 'fs';
175
-
176
- const dbPath = '/home/sprite/trellis-db/data';
177
- const configDir = '/home/sprite/trellis-db';
178
-
179
- if (!existsSync(join(configDir, '.trellis-db.json'))) {
180
- writeConfig(defaultLocalConfig(dbPath, {
181
- apiKey: '${opts.apiKey}',
182
- jwtSecret: '${opts.jwtSecret}',
183
- port: ${opts.port},
184
- }), configDir);
185
- }
186
-
187
- const config = readConfig(configDir)!;
188
- const pool = new TenantPool(dbPath);
189
-
190
- const server = startServer({ port: ${opts.port}, config, pool });
191
-
192
- console.log('Trellis DB running on port ${opts.port}');
193
- console.log('URL: https://\${process.env.SPRITE_NAME ?? 'localhost'}.sprites.app');
194
- `;
195
- }
196
-
197
- export {
198
- DeployNameError,
199
- normalizeDeployName,
200
- validateDeployName,
201
- buildDeployUrl,
202
- deploy
203
- };
@@ -1 +0,0 @@
1
- :host{all:initial;font-family:ui-monospace,Cascadia Code,SF Mono,monospace;font-size:12px;line-height:1.5;color-scheme:dark}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}.tdb-toggle{position:fixed;z-index:2147483647;display:flex;align-items:center;gap:5px;padding:7px 13px;background:#0f0f1a;border:1px solid #4c1d95;border-radius:999px;color:#a78bfa;cursor:pointer;user-select:none;font-size:11px;font-weight:600;letter-spacing:.4px;box-shadow:0 2px 16px #6d28d959;transition:border-color .15s,box-shadow .15s}.tdb-toggle:hover{border-color:#a78bfa;box-shadow:0 2px 20px #6d28d98c}.tdb-panel{position:fixed;z-index:2147483647;width:360px;max-height:520px;background:#0a0a14;border:1px solid #1e1b4b;border-radius:10px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 12px 48px #000000b3,0 0 0 1px #7c3aed26;font-family:ui-monospace,Cascadia Code,monospace;font-size:12px;color:#e2e8f0}.tdb-header{display:flex;align-items:center;justify-content:space-between;padding:9px 12px;background:#0f0f1e;border-bottom:1px solid #1e1b4b;cursor:grab;user-select:none;flex-shrink:0}.tdb-header:active{cursor:grabbing}.tdb-header-l,.tdb-header-r{display:flex;align-items:center;gap:7px}.tdb-title{font-weight:700;font-size:12px;color:#a78bfa;letter-spacing:.3px}.tdb-link{font-size:10px;color:#64748b;cursor:pointer;letter-spacing:.2px;text-decoration:none;transition:color .15s}.tdb-link:hover{color:#a78bfa}.tdb-close{background:none;border:none;color:#4b5563;cursor:pointer;font-size:12px;padding:2px 5px;border-radius:3px;line-height:1;font-family:inherit}.tdb-close:hover{color:#e2e8f0;background:#1e1b4b}.tdb-urlbar{display:flex;align-items:center;gap:7px;padding:5px 12px;background:#08080f;border-bottom:1px solid #13132a;flex-shrink:0}.tdb-dot{font-size:9px;color:#22c55e}.tdb-url{font-size:10px;color:#475569;font-family:inherit}.tdb-tabs{display:flex;background:#08080f;border-bottom:1px solid #1e1b4b;flex-shrink:0}.tdb-tab{flex:1;padding:7px 0;background:none;border:none;border-bottom:2px solid transparent;color:#374151;cursor:pointer;font-size:11px;font-family:inherit;letter-spacing:.3px;transition:color .15s,border-color .15s}.tdb-tab:hover{color:#94a3b8}.tdb-tab.active{color:#a78bfa;border-bottom-color:#7c3aed}.tdb-body{flex:1;overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:6px}.tdb-body::-webkit-scrollbar{width:3px}.tdb-body::-webkit-scrollbar-track{background:transparent}.tdb-body::-webkit-scrollbar-thumb{background:#1e1b4b;border-radius:2px}.tdb-muted{color:#374151;text-align:center;padding:20px 0;font-size:11px}.tdb-pills{display:flex;flex-wrap:wrap;gap:4px}.tdb-pill{padding:2px 8px;background:#0f0f1e;border:1px solid #1e1b4b;border-radius:999px;color:#374151;cursor:pointer;font-size:10px;font-family:inherit;transition:all .1s}.tdb-pill:hover{color:#94a3b8;border-color:#374151}.tdb-pill.active{background:#1e1044;border-color:#6d28d9;color:#a78bfa}.tdb-pill-icon{padding:2px 7px}.tdb-list{display:flex;flex-direction:column;gap:2px}.tdb-entity-row{display:flex;align-items:center;gap:6px;padding:4px 7px;background:#0f0f1e;border:1px solid #13132a;border-radius:4px;cursor:pointer;transition:background .1s}.tdb-entity-row:hover{background:#141428}.tdb-arrow{color:#374151;font-size:10px;width:10px;flex-shrink:0}.tdb-etype{color:#6d28d9;font-weight:700;font-size:10px;flex-shrink:0;padding-right:6px;border-right:1px solid #1e1b4b;margin-right:2px}.tdb-eid{color:#334155;font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.tdb-attrs{background:#08080f;border:1px solid #13132a;border-top:none;border-radius:0 0 4px 4px;padding:5px 8px;display:flex;flex-direction:column;gap:2px;margin-top:-1px}.tdb-attr{display:grid;grid-template-columns:minmax(4.5rem,34%) 1fr;gap:8px;font-size:10px;align-items:start}.tdb-akey{color:#475569;flex-shrink:0;word-break:break-word}.tdb-aval{color:#94a3b8;overflow-wrap:anywhere;word-break:break-word}.tdb-textarea{width:100%;min-height:60px;resize:vertical;background:#08080f;border:1px solid #1e1b4b;border-radius:6px;color:#e2e8f0;font-family:inherit;font-size:11px;padding:8px;outline:none}.tdb-textarea:focus{border-color:#6d28d9}.tdb-examples{display:flex;flex-wrap:wrap;gap:4px}.tdb-ex{padding:2px 6px;background:#0f0f1e;border:1px solid #1e1b4b;border-radius:4px;color:#374151;cursor:pointer;font-size:10px;transition:all .1s}.tdb-ex:hover{color:#94a3b8;border-color:#374151}.tdb-run{padding:5px 12px;background:#6d28d9;border:none;border-radius:6px;color:#fff;cursor:pointer;font-family:inherit;font-size:11px;font-weight:600;transition:background .15s;align-self:flex-start}.tdb-run:hover:not(:disabled){background:#5b21b6}.tdb-run:disabled{opacity:.4;cursor:not-allowed}.tdb-error{background:#180a0a;border:1px solid #7f1d1d;border-radius:4px;color:#f87171;padding:6px 8px;font-size:10px}.tdb-result{background:#08080f;border:1px solid #1e1b4b;border-radius:4px;color:#94a3b8;padding:8px;font-size:10px;overflow:auto;max-height:180px;margin:0;white-space:pre-wrap}.tdb-block{background:#0f0f1e;border:1px solid #13132a;border-radius:6px;padding:8px;display:flex;flex-direction:column;gap:4px}.tdb-section-label{color:#374151;font-size:10px;letter-spacing:.5px;text-transform:uppercase;margin-bottom:2px}.tdb-row{display:flex;justify-content:space-between;align-items:center;font-size:11px}.tdb-row-total{border-top:1px solid #1e1b4b;margin-top:2px;padding-top:4px}.tdb-label{color:#94a3b8}.tdb-badge{padding:1px 7px;border-radius:999px;font-size:10px;font-weight:600}.tdb-badge.ok{background:#052e16;color:#4ade80}.tdb-count{background:#1e1044;color:#a78bfa;padding:1px 7px;border-radius:999px;font-size:10px;font-weight:600}.tdb-ep{display:flex;align-items:center;gap:8px;font-size:10px;padding:2px 0}.tdb-method{font-weight:700;font-size:9px;width:38px;text-align:center;padding:1px 4px;border-radius:3px;flex-shrink:0}.tdb-method.get{background:#172554;color:#60a5fa}.tdb-method.post{background:#052e16;color:#4ade80}.tdb-method.put{background:#2d1900;color:#fbbf24}.tdb-method.delete{background:#280a0a;color:#f87171}.tdb-path{color:#475569;font-family:inherit}
@@ -1,9 +0,0 @@
1
- import {
2
- deploy
3
- } from "./chunk-7ZFRVCUE.js";
4
- import "./chunk-CAG4FULI.js";
5
- import "./chunk-JA7AIHRK.js";
6
- import "./chunk-KFQGP6VL.js";
7
- export {
8
- deploy
9
- };
@@ -1,9 +0,0 @@
1
- import {
2
- deploy
3
- } from "./chunk-UQISRW6T.js";
4
- import "./chunk-FF36CQHZ.js";
5
- import "./chunk-JA7AIHRK.js";
6
- import "./chunk-KFQGP6VL.js";
7
- export {
8
- deploy
9
- };
@@ -1,67 +0,0 @@
1
- import {
2
- DeployNameError,
3
- deploy
4
- } from "./chunk-UQISRW6T.js";
5
- import "./chunk-FF36CQHZ.js";
6
- import {
7
- configPath
8
- } from "./chunk-JA7AIHRK.js";
9
- import "./chunk-KFQGP6VL.js";
10
-
11
- // src/cli/deploy-cli.ts
12
- import chalk from "chalk";
13
- function printDeploySuccess(result, configDir, stub) {
14
- console.log("");
15
- console.log(
16
- chalk.green(
17
- stub ? "\u2713 Stub deploy \u2014 config written (no Sprite provisioned)" : "\u2713 TurtleDB room deployed"
18
- )
19
- );
20
- console.log(chalk.dim(` Name: ${result.name}`));
21
- console.log(chalk.dim(` URL: ${result.url}`));
22
- console.log(chalk.dim(` API key: ${result.apiKey}`));
23
- console.log(chalk.dim(` Config: ${configPath(configDir)}`));
24
- console.log("");
25
- console.log(chalk.dim(` Health: curl ${result.url}/health`));
26
- console.log("");
27
- console.log(chalk.bold("SDK:"));
28
- console.log(chalk.cyan(` import { TrellisDb } from 'trellis/client';`));
29
- console.log(
30
- chalk.cyan(
31
- ` const db = new TrellisDb({ url: '${result.url}', apiKey: '${result.apiKey}' });`
32
- )
33
- );
34
- }
35
- async function runDeployCli(opts) {
36
- const configDir = opts.configDir ?? ".";
37
- const port = typeof opts.port === "string" ? parseInt(opts.port, 10) : opts.port ?? 3e3;
38
- const { readConfig } = await import("./config-PFTP67TR.js");
39
- const config = readConfig(configDir);
40
- const label = opts.stub ? "Stub deploy" : "Deploying to Sprites";
41
- console.log(chalk.bold(`${label}: ${opts.name}...`));
42
- try {
43
- const result = await deploy({
44
- name: opts.name,
45
- dbPath: config?.dbPath,
46
- apiKey: opts.key,
47
- jwtSecret: opts.jwtSecret,
48
- port,
49
- configDir,
50
- stub: !!opts.stub,
51
- onProgress: (msg) => console.log(chalk.dim(` ${msg}`))
52
- });
53
- printDeploySuccess(result, configDir, !!opts.stub);
54
- } catch (err) {
55
- if (err instanceof DeployNameError) {
56
- console.error(chalk.red(`Invalid name: ${err.message}`));
57
- process.exit(1);
58
- }
59
- const message = err instanceof Error ? err.message : String(err);
60
- console.error(chalk.red(`Deploy failed: ${message}`));
61
- process.exit(1);
62
- }
63
- }
64
- export {
65
- printDeploySuccess,
66
- runDeployCli
67
- };
@@ -1,15 +0,0 @@
1
- import {
2
- assertSpriteCli,
3
- resolveSprite,
4
- runSpriteCmd,
5
- runSpriteCopy,
6
- runSpriteInteractive
7
- } from "./chunk-FF36CQHZ.js";
8
- import "./chunk-KFQGP6VL.js";
9
- export {
10
- assertSpriteCli,
11
- resolveSprite,
12
- runSpriteCmd,
13
- runSpriteCopy,
14
- runSpriteInteractive
15
- };
@@ -1,14 +0,0 @@
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
- };