@voltro/cli 0.54.0 → 0.56.0

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 (173) hide show
  1. package/CHANGELOG.md +639 -2
  2. package/bin/voltro.mjs +24 -0
  3. package/dist/{apiBuild-DTWp0S_q.js → apiBuild-Bdaetr37.js} +119 -88
  4. package/dist/apiBuild-Vw1figjO.js +2 -0
  5. package/dist/bin.js +1 -1
  6. package/dist/{build-D4ygSbnV.js → build-CI36wL4R.js} +339 -314
  7. package/dist/buildReport-52gHKgfO.js +64 -0
  8. package/dist/{checkCommand-Dg1G7Gwd.js → checkCommand-CAwFXrxA.js} +6 -6
  9. package/dist/{checkCommand-L7DTlpIF.js → checkCommand-D0QV_zM_.js} +1 -1
  10. package/dist/{clusterCmd-DrVFCzSj.js → clusterCmd-CdLB1GkT.js} +1 -1
  11. package/dist/{codegen-DSLM8Su9.js → codegen-Bth5lUTU.js} +76 -64
  12. package/dist/codegen-DbH7NbCR.js +2 -0
  13. package/dist/{codegenCommand-CG_Vx4lc.js → codegenCommand-CidbQzbv.js} +15 -14
  14. package/dist/{codemodRunner-Cd4xkC6u.js → codemodRunner-BlQPfjzA.js} +277 -0
  15. package/dist/{commands-6Kzi92Np.js → commands-CWjfThXv.js} +35 -35
  16. package/dist/{dashboardCommand-Cq1PWvI1.js → dashboardCommand-BekcY5Ls.js} +3 -3
  17. package/dist/{dataCommand-DYzW8vkv.js → dataCommand-2pccgbIy.js} +267 -195
  18. package/dist/{dbCommand-B4NWZtGL.js → dbCommand-DpK_vQET.js} +457 -441
  19. package/dist/dbCommand-DrycGWWt.js +2 -0
  20. package/dist/{dev-cKUiZZsB.js → dev-B9Gz0k85.js} +1 -1
  21. package/dist/{dev-CmuvUKRq.js → dev-Dw263KPu.js} +2598 -2452
  22. package/dist/doctorCommand-BMWs6aVm.js +2 -0
  23. package/dist/{doctorCommand-DCiFVMtZ.js → doctorCommand-aR_bFmIi.js} +353 -251
  24. package/dist/{dormancyCommand-w1TrmgYP.js → dormancyCommand-eXTQMbHU.js} +1 -1
  25. package/dist/{embeddingsCommand-CMgPyRTr.js → embeddingsCommand-CTmiQvwa.js} +1 -1
  26. package/dist/{envCommand-Cyynmcfa.js → envCommand-BDUgV7EM.js} +12 -12
  27. package/dist/{evolveCommand-BwvQ8dVH.js → evolveCommand-YV8qW1LU.js} +2 -2
  28. package/dist/frameworkTableAssembly-CGNC0qr7.js +2 -0
  29. package/dist/{frameworkTableAssembly-D7LJuALW.js → frameworkTableAssembly-DNOFXfEQ.js} +102 -100
  30. package/dist/index.js +1 -1
  31. package/dist/{infoCommand-DlYlUPqs.js → infoCommand-BjVXpMlP.js} +1 -1
  32. package/dist/inspect-CNYvNXPU.js +1484 -0
  33. package/dist/inspect-S2rWy1Ys.js +2 -0
  34. package/dist/{inspectCmd-niF97fAq.js → inspectCmd-CP-G0sVK.js} +1 -1
  35. package/dist/{inspectFetch-EMuhTG_9.js → inspectFetch-BU1NyzxV.js} +36 -24
  36. package/dist/{inspectMetrics-CGF94puw.js → inspectMetrics-BY0Sjb2F.js} +19 -19
  37. package/dist/interruptedReplace-CwnkBb2X.js +41 -0
  38. package/dist/interruptedReplace-qzmFI020.js +2 -0
  39. package/dist/{logsCmd-B6oNsfaZ.js → logsCmd-BU8uCdys.js} +1 -1
  40. package/dist/{manifestBuild-Cqgsx2bM.js → manifestBuild-CEkjfpwc.js} +1 -1
  41. package/dist/manifestBuild-DIa_s6u0.js +2 -0
  42. package/dist/{migrate-BK_Bbx-_.js → migrate-SICulyz1.js} +2 -2
  43. package/dist/precompressAssets-YhTi1aWp.js +40 -0
  44. package/dist/{probeCommand-_C0YU207.js → probeCommand-6HxEkNDG.js} +2 -2
  45. package/dist/{runtimeTrace-CGWx1Q6l.js → runtimeTrace-DgYMc09E.js} +1 -1
  46. package/dist/{scheduleCmd-DQRu6BZC.js → scheduleCmd-DYBUfo_T.js} +1 -1
  47. package/dist/{sdkgen-CDGHQUFj.js → sdkgen-PY-umd6O.js} +1 -1
  48. package/dist/{seedRunner-Dgsiwk_e.js → seedRunner-DISBKow-.js} +16 -16
  49. package/dist/serveCommand-BITS8Hpj.js +2 -0
  50. package/dist/{serveCommand-Bje09q1v.js → serveCommand-DIJ3ma76.js} +951 -909
  51. package/dist/serveEntry.js +1 -1
  52. package/dist/{start-Clz-1BHB.js → start-B9NGB8gn.js} +627 -588
  53. package/dist/{start-B0bnJgxI.js → start-BFQQkL1i.js} +1 -1
  54. package/dist/startEntry.js +1 -1
  55. package/dist/staticCachePolicy-CIyj6DbS.js +15 -0
  56. package/dist/{test-D_kW4KMj.js → test-jipIQ5Mx.js} +1 -1
  57. package/dist/{tracesCmd-DgtgOUdi.js → tracesCmd-BWYDqMy6.js} +1 -1
  58. package/dist/{updateCommand-CRJlAOaM.js → updateCommand-C9n_Z_oG.js} +8 -2
  59. package/dist/updateCommand-DsXEAHbd.js +2 -0
  60. package/dist/webDev-C2dRz9s5.js +2 -0
  61. package/dist/{webDev-DSI9SOhs.js → webDev-C53hJdcL.js} +1265 -1288
  62. package/dist/{webhooksCommand-BvzXNHji.js → webhooksCommand-uuPu8qQX.js} +1 -1
  63. package/dist/{workflowsCmd-BGF-mRZ5.js → workflowsCmd-g-DNpaUc.js} +1 -1
  64. package/package.json +67 -19
  65. package/templates/AGENTS.core.md +20 -1
  66. package/templates/AGENTS.md +21 -2
  67. package/templates/agent-docs/_index.md +1 -1
  68. package/templates/agent-docs/_manifest.json +1 -1
  69. package/templates/agent-docs/authentication.md +49 -6
  70. package/templates/agent-docs/cli.md +216 -11
  71. package/templates/agent-docs/data.md +209 -18
  72. package/templates/agent-docs/database/scaling.md +40 -1
  73. package/templates/agent-docs/deployment.md +53 -1
  74. package/templates/agent-docs/internationalization.md +32 -0
  75. package/templates/agent-docs/local-first-mobile.md +9 -2
  76. package/templates/agent-docs/observability.md +227 -0
  77. package/templates/agent-docs/plugins/billing.md +15 -0
  78. package/templates/agent-docs/plugins/broadcast.md +2 -1
  79. package/templates/agent-docs/plugins/ratelimit.md +6 -1
  80. package/templates/agent-docs/plugins/row-history.md +11 -0
  81. package/templates/agent-docs/plugins.md +65 -8
  82. package/templates/agent-docs/reference.md +5 -3
  83. package/templates/agent-docs/routing.md +18 -0
  84. package/templates/agent-docs/schema-driven-ui.md +125 -0
  85. package/templates/agent-docs/templates/appshells.md +3 -3
  86. package/templates/agent-docs/whats-new.md +408 -106
  87. package/templates/apps/api-ai/package.json +6 -6
  88. package/templates/apps/api-auth/package.json +8 -8
  89. package/templates/apps/api-backend/package.json +7 -7
  90. package/templates/apps/api-backend-deactivation/package.json +7 -7
  91. package/templates/apps/api-backend-mail/package.json +8 -8
  92. package/templates/apps/api-backend-mariadb/package.json +9 -9
  93. package/templates/apps/api-backend-sqlite/package.json +8 -8
  94. package/templates/apps/api-backend-storage/package.json +8 -8
  95. package/templates/apps/api-cms/package.json +9 -9
  96. package/templates/apps/api-collab/package.json +8 -8
  97. package/templates/apps/api-data-advanced/package.json +8 -8
  98. package/templates/apps/api-durable/package.json +8 -8
  99. package/templates/apps/api-feature-flags/package.json +9 -9
  100. package/templates/apps/api-governance/package.json +8 -8
  101. package/templates/apps/api-kv/package.json +8 -8
  102. package/templates/apps/api-moderation/package.json +8 -8
  103. package/templates/apps/api-observability/package.json +8 -8
  104. package/templates/apps/api-ratelimit/package.json +8 -8
  105. package/templates/apps/api-rbac/package.json +8 -8
  106. package/templates/apps/api-rest/package.json +7 -7
  107. package/templates/apps/api-row-history/package.json +8 -8
  108. package/templates/apps/api-saas/package.json +11 -11
  109. package/templates/apps/api-saas-starter/package.json +10 -10
  110. package/templates/apps/api-search/package.json +8 -8
  111. package/templates/apps/api-status/package.json +8 -8
  112. package/templates/apps/api-webhooks/package.json +9 -9
  113. package/templates/apps/changelog/package.json +7 -7
  114. package/templates/apps/changelog/src/pages/[locale]/page.tsx +7 -1
  115. package/templates/apps/edge-functions/package.json +2 -2
  116. package/templates/apps/frontend-admin/package.json +7 -8
  117. package/templates/apps/frontend-admin/src/pages/(marketing)/layout.tsx +1 -2
  118. package/templates/apps/frontend-admin/src/pages/admin/layout.tsx +1 -2
  119. package/templates/apps/frontend-app/package.json +8 -9
  120. package/templates/apps/frontend-app/src/pages/layout.tsx +1 -2
  121. package/templates/apps/frontend-auth/package.json +7 -8
  122. package/templates/apps/frontend-auth/src/components/AuthShell.tsx +1 -2
  123. package/templates/apps/frontend-blank/package.json +6 -7
  124. package/templates/apps/frontend-blank/src/pages/layout.tsx +1 -2
  125. package/templates/apps/frontend-cms/package.json +8 -9
  126. package/templates/apps/frontend-cms/src/pages/(app)/layout.tsx +1 -2
  127. package/templates/apps/frontend-collab/README.md +7 -2
  128. package/templates/apps/frontend-collab/package.json +9 -10
  129. package/templates/apps/frontend-collab/src/pages/layout.tsx +1 -2
  130. package/templates/apps/frontend-collab/src/pages/page.test.tsx +8 -4
  131. package/templates/apps/frontend-collab/src/pages/page.tsx +10 -5
  132. package/templates/apps/frontend-contact/package.json +7 -7
  133. package/templates/apps/frontend-contact/src/components/ContactForm.island.tsx +1 -1
  134. package/templates/apps/frontend-dashboard/package.json +6 -7
  135. package/templates/apps/frontend-dashboard/src/pages/(marketing)/layout.tsx +1 -2
  136. package/templates/apps/frontend-dashboard/src/pages/dashboard/layout.tsx +1 -2
  137. package/templates/apps/frontend-docs/package.json +8 -8
  138. package/templates/apps/frontend-i18n/package.json +6 -6
  139. package/templates/apps/frontend-landing/package.json +7 -7
  140. package/templates/apps/frontend-portal/package.json +7 -8
  141. package/templates/apps/frontend-portal/src/pages/(portal)/layout.tsx +1 -2
  142. package/templates/apps/frontend-saas/package.json +7 -8
  143. package/templates/apps/frontend-saas/src/pages/(marketing)/layout.tsx +1 -2
  144. package/templates/apps/frontend-saas/src/pages/dashboard/layout.tsx +1 -2
  145. package/templates/apps/frontend-spa/package.json +6 -7
  146. package/templates/apps/frontend-spa/src/pages/layout.tsx +1 -2
  147. package/templates/apps/frontend-ssr/package.json +6 -7
  148. package/templates/apps/frontend-ssr/src/pages/layout.tsx +1 -2
  149. package/templates/apps/frontend-ssr-api/package.json +7 -8
  150. package/templates/apps/frontend-ssr-api/src/pages/layout.tsx +1 -2
  151. package/templates/apps/frontend-static-blog/package.json +8 -8
  152. package/templates/apps/frontend-static-blog/src/components/ReadingProgress.island.tsx +1 -1
  153. package/templates/apps/frontend-static-blog/src/pages/[locale]/page.tsx +7 -1
  154. package/templates/apps/frontend-status/package.json +7 -8
  155. package/templates/apps/frontend-status/src/pages/layout.tsx +1 -2
  156. package/templates/apps/mobile-app/package.json +4 -4
  157. package/templates/baselines/compose/docker/api.Dockerfile +61 -5
  158. package/templates/baselines/compose/docker/web.Dockerfile +55 -10
  159. package/templates/baselines/compose-mariadb/docker/api.Dockerfile +61 -5
  160. package/templates/baselines/compose-mariadb/docker/web.Dockerfile +55 -10
  161. package/dist/apiBuild-CeUN55uk.js +0 -2
  162. package/dist/codegen-DjgxEOnD.js +0 -2
  163. package/dist/dbCommand-CSFWs9ev.js +0 -2
  164. package/dist/doctorCommand-J3qu4E0Y.js +0 -2
  165. package/dist/frameworkTableAssembly-IPD1pUnZ.js +0 -2
  166. package/dist/inspect-Bd8-9wsi.js +0 -1193
  167. package/dist/inspect-CuoDInfZ.js +0 -2
  168. package/dist/interruptedReplace-C3O3M1MM.js +0 -28
  169. package/dist/interruptedReplace-CvmiAM9K.js +0 -2
  170. package/dist/manifestBuild-C4-J1-m_.js +0 -2
  171. package/dist/serveCommand-BiPe8BJm.js +0 -2
  172. package/dist/updateCommand-CIoVDKnj.js +0 -2
  173. package/dist/webDev-DlvZO30c.js +0 -2
@@ -0,0 +1,2 @@
1
+ import { i as e } from "./inspect-CNYvNXPU.js";
2
+ export { e as buildCapabilityManifest };
@@ -1,5 +1,5 @@
1
1
  import { n as e } from "./cliOutput-D1tSBoRM.js";
2
- import { n as t, o as n, r, t as i } from "./inspectFetch-EMuhTG_9.js";
2
+ import { n as t, o as n, r, t as i } from "./inspectFetch-BU1NyzxV.js";
3
3
  import { ansi as a } from "@voltro/logger";
4
4
  //#region src/inspectCmd.ts
5
5
  var o = {
@@ -1,43 +1,55 @@
1
1
  import { n as e } from "./runtimeRegistry-DMeKfTHP.js";
2
2
  //#region src/inspectFetch.ts
3
- var t = (e, t, n = !1) => {
3
+ var t = (e) => {
4
+ if (typeof e != "object" || !e) return { data: e };
5
+ let t = e;
6
+ return !("data" in t) || !("scope" in t) || !("completeness" in t) ? { data: e } : {
7
+ data: t.data,
8
+ observation: {
9
+ ...t.scope === void 0 ? {} : { scope: t.scope },
10
+ ...t.origin === void 0 ? {} : { origin: t.origin },
11
+ ...t.completeness === void 0 ? {} : { completeness: t.completeness }
12
+ }
13
+ };
14
+ }, n = (e, t, n = !1) => {
4
15
  let r = { ...e ?? {} }, i = t ?? process.env.VOLTRO_INSPECT_TOKEN;
5
16
  if (i !== void 0 && i !== "" && (r.authorization = `Bearer ${i}`), n) {
6
17
  let e = process.env.VOLTRO_INSPECT_WRITE_TOKEN;
7
18
  e !== void 0 && e !== "" && (r["x-voltro-inspect-write"] = e);
8
19
  }
9
20
  return r;
10
- }, n = /* @__PURE__ */ new Set([
21
+ }, r = /* @__PURE__ */ new Set([
11
22
  "POST",
12
23
  "PUT",
13
24
  "PATCH",
14
25
  "DELETE"
15
- ]), r = async (e, r, i) => {
16
- let a = `${e.url.replace(/\/+$/, "")}${r.startsWith("/") ? r : `/${r}`}`, o = i?.method ?? "GET", s = i?.body !== void 0;
26
+ ]), i = async (e, i, a) => {
27
+ let o = `${e.url.replace(/\/+$/, "")}${i.startsWith("/") ? i : `/${i}`}`, s = a?.method ?? "GET", c = a?.body !== void 0;
17
28
  try {
18
- let r = await fetch(a, {
19
- method: o,
20
- headers: i?.anonymous === !0 ? s ? { "content-type": "application/json" } : {} : t(s ? { "content-type": "application/json" } : void 0, e.inspectToken, n.has(o)),
21
- ...s ? { body: JSON.stringify(i.body) } : {}
22
- }), c = await r.text(), l;
23
- if (c.length > 0) try {
24
- l = JSON.parse(c);
29
+ let i = await fetch(o, {
30
+ method: s,
31
+ headers: a?.anonymous === !0 ? c ? { "content-type": "application/json" } : {} : n(c ? { "content-type": "application/json" } : void 0, e.inspectToken, r.has(s)),
32
+ ...c ? { body: JSON.stringify(a.body) } : {}
33
+ }), l = await i.text(), u;
34
+ if (l.length > 0) try {
35
+ u = JSON.parse(l);
25
36
  } catch {
26
- l = c;
37
+ u = l;
27
38
  }
28
- if (!r.ok) {
29
- let t = l, i = typeof t == "object" && t ? String(t.message ?? t.reason ?? t.error ?? `HTTP ${r.status}`) : `HTTP ${r.status}`, a = n.has(o) && (process.env.VOLTRO_INSPECT_WRITE_TOKEN ?? "") === "" && /write/i.test(i);
39
+ if (!i.ok) {
40
+ let t = u, n = typeof t == "object" && t ? String(t.message ?? t.reason ?? t.error ?? `HTTP ${i.status}`) : `HTTP ${i.status}`, a = r.has(s) && (process.env.VOLTRO_INSPECT_WRITE_TOKEN ?? "") === "" && /write/i.test(n);
30
41
  return {
31
42
  kind: "err",
32
43
  name: e.name,
33
- error: a ? `${i}\n VOLTRO_INSPECT_WRITE_TOKEN is not set in this shell. \`voltro dev\` mints it into the project's \`.env.local\`; export it (or run from a shell that loaded it).` : i
44
+ error: a ? `${n}\n VOLTRO_INSPECT_WRITE_TOKEN is not set in this shell. \`voltro dev\` mints it into the project's \`.env.local\`; export it (or run from a shell that loaded it).` : n
34
45
  };
35
46
  }
47
+ let d = t(u);
36
48
  return {
37
49
  kind: "ok",
38
50
  name: e.name,
39
- status: r.status,
40
- data: l
51
+ status: i.status,
52
+ ...d
41
53
  };
42
54
  } catch (t) {
43
55
  return {
@@ -46,7 +58,7 @@ var t = (e, t, n = !1) => {
46
58
  error: t.message || String(t)
47
59
  };
48
60
  }
49
- }, i = (e, t = process.env) => {
61
+ }, a = (e, t = process.env) => {
50
62
  let n = [], r, i;
51
63
  for (let t = 0; t < e.length; t++) {
52
64
  let a = e[t];
@@ -91,7 +103,7 @@ var t = (e, t, n = !1) => {
91
103
  },
92
104
  rest: n
93
105
  };
94
- }, a = (e) => ({
106
+ }, o = (e) => ({
95
107
  id: `remote:${e.url}`,
96
108
  name: e.name,
97
109
  kind: "api",
@@ -102,7 +114,7 @@ var t = (e, t, n = !1) => {
102
114
  status: "live",
103
115
  logFile: "",
104
116
  ...e.token === void 0 ? {} : { inspectToken: e.token }
105
- }), o = async (t, n) => n === void 0 ? (await e()).apps.filter((e) => e.kind === "api" && e.status === "live" && e.url.length > 0 && (t === void 0 || e.name === t)) : [a(n)], s = (e) => {
117
+ }), s = async (t, n) => n === void 0 ? (await e()).apps.filter((e) => e.kind === "api" && e.status === "live" && e.url.length > 0 && (t === void 0 || e.name === t)) : [o(n)], c = (e) => {
106
118
  let t = "pretty", n = [];
107
119
  for (let r = 0; r < e.length; r++) {
108
120
  let i = e[r];
@@ -126,8 +138,8 @@ var t = (e, t, n = !1) => {
126
138
  format: t,
127
139
  rest: n
128
140
  };
129
- }, c = (e, t = process.env) => {
130
- let { target: n, rest: r, error: a } = i(e, t), o, s = [];
141
+ }, l = (e, t = process.env) => {
142
+ let { target: n, rest: r, error: i } = a(e, t), o, s = [];
131
143
  for (let e = 0; e < r.length; e++) {
132
144
  let t = r[e];
133
145
  if (t === "--process") {
@@ -144,8 +156,8 @@ var t = (e, t, n = !1) => {
144
156
  process: o,
145
157
  target: n,
146
158
  rest: s,
147
- ...a === void 0 ? {} : { error: a }
159
+ ...i === void 0 ? {} : { error: i }
148
160
  };
149
161
  };
150
162
  //#endregion
151
- export { a, i, s as n, o, c as r, r as t };
163
+ export { o as a, a as i, c as n, s as o, l as r, i as t };
@@ -1,16 +1,16 @@
1
1
  import { o as e, t } from "./connectionConfig-Bk9IC7D0.js";
2
2
  import { createLogger as n } from "@voltro/logger";
3
- import { Effect as r } from "effect";
4
- import { recordSample as i, setRevalidationPublisher as a } from "@voltro/runtime";
3
+ import { recordSample as r, setRevalidationPublisher as i } from "@voltro/runtime";
4
+ import { Effect as a } from "effect";
5
5
  import { channelFor as o, resolveBroadcastNamespace as s, resolveBroadcastProvider as c } from "@voltro/plugin-broadcast";
6
6
  //#region src/revalidationWiring.ts
7
- var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE }), "revalidate"), d = (i) => {
8
- let o = i.logger ?? n({ scope: "voltro:revalidate" });
9
- if (i.mode === "dev") return a((e) => (o.debug(`revalidate ${e.kind} '${e.value}' — no-op under voltro dev (no ISR cache)`), Promise.resolve())), {
7
+ var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE }), "revalidate"), d = (r) => {
8
+ let o = r.logger ?? n({ scope: "voltro:revalidate" });
9
+ if (r.mode === "dev") return i((e) => (o.debug(`revalidate ${e.kind} '${e.value}' — no-op under voltro dev (no ISR cache)`), Promise.resolve())), {
10
10
  transports: [],
11
- stop: () => (a(null), Promise.resolve())
11
+ stop: () => (i(null), Promise.resolve())
12
12
  };
13
- let s = [], d = i.dialect === "postgres" && t(), f = null, m = null, h = () => m || (m = (async () => {
13
+ let s = [], d = r.dialect === "postgres" && t(), f = null, m = null, h = () => m || (m = (async () => {
14
14
  try {
15
15
  let t = new (await (import("pg"))).default.Client(e());
16
16
  return await t.connect(), f = t, t;
@@ -20,13 +20,13 @@ var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE
20
20
  })(), m);
21
21
  d && s.push("pg-notify");
22
22
  let g = null, _ = !1;
23
- if (i.provider !== void 0 && i.provider.name !== "memory") g = i.provider;
24
- else if (i.provider === void 0) {
23
+ if (r.provider !== void 0 && r.provider.name !== "memory") g = r.provider;
24
+ else if (r.provider === void 0) {
25
25
  let e = c({}, process.env);
26
26
  e.crossReplica && (g = e.provider, _ = !0);
27
27
  }
28
28
  let v = u(process.env);
29
- return g && s.push("broker"), a(async (e) => {
29
+ return g && s.push("broker"), i(async (e) => {
30
30
  let t = JSON.stringify(e), n = !1;
31
31
  if (d) {
32
32
  let r = await h();
@@ -37,7 +37,7 @@ var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE
37
37
  }
38
38
  }
39
39
  if (g) try {
40
- await r.runPromise(g.publish(v, t)), n = !0;
40
+ await a.runPromise(g.publish(v, t)), n = !0;
41
41
  } catch (t) {
42
42
  o.warn(`revalidate ${e.kind} '${e.value}': broker publish failed`, {}, t);
43
43
  }
@@ -48,14 +48,14 @@ var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE
48
48
  }), {
49
49
  transports: s,
50
50
  stop: async () => {
51
- if (a(null), f) {
51
+ if (i(null), f) {
52
52
  try {
53
53
  await f.end();
54
54
  } catch {}
55
55
  f = null;
56
56
  }
57
57
  if (g && _) try {
58
- await r.runPromise(g.close());
58
+ await a.runPromise(g.close());
59
59
  } catch {}
60
60
  g = null;
61
61
  }
@@ -98,17 +98,17 @@ var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE
98
98
  max: t[t.length - 1]
99
99
  };
100
100
  }, y = (e = {}) => {
101
- let t = e.maxSamples ?? h, n = e.defaultWindowMs ?? g, r = [];
101
+ let t = e.maxSamples ?? h, n = e.defaultWindowMs ?? g, i = [];
102
102
  return {
103
103
  record(e) {
104
- i(e), r.push({
104
+ r(e), i.push({
105
105
  ...e,
106
106
  ts: Date.now()
107
- }), r.length > t && r.shift();
107
+ }), i.length > t && i.shift();
108
108
  },
109
109
  snapshot(e) {
110
- let t = e ?? n, i = Date.now(), a = i - t, o = /* @__PURE__ */ new Map(), s = 0;
111
- for (let e of r) {
110
+ let t = e ?? n, r = Date.now(), a = r - t, o = /* @__PURE__ */ new Map(), s = 0;
111
+ for (let e of i) {
112
112
  if (e.ts < a) continue;
113
113
  s++;
114
114
  let t = `${e.kind}\u0000${e.tag}`, n = o.get(t);
@@ -132,7 +132,7 @@ var l = "voltro_revalidate", u = (e) => o(s({ env: e.VOLTRO_BROADCAST_NAMESPACE
132
132
  }
133
133
  return c.sort((e, t) => t.count - e.count), {
134
134
  windowMs: t,
135
- capturedAt: i,
135
+ capturedAt: r,
136
136
  totalSamples: s,
137
137
  buckets: c
138
138
  };
@@ -0,0 +1,41 @@
1
+ import { REPLACE_IN_PROGRESS_TABLE as e, interruptedReplaceRefusal as t, stagingLeftoverReport as n, stagingLeftovers as r, stagingNamesOf as i, stagingStaleAfterMs as a } from "@voltro/database";
2
+ //#region src/interruptedReplace.ts
3
+ var o = async (t) => {
4
+ try {
5
+ let n = await t.query({
6
+ table: e,
7
+ predicate: void 0,
8
+ order: [],
9
+ take: void 0,
10
+ skip: void 0,
11
+ projection: void 0
12
+ }), r = (e) => e instanceof Date ? e : e == null ? null : new Date(String(e));
13
+ return n.map((e) => ({
14
+ id: String(e.id ?? ""),
15
+ startedAt: r(e.startedAt) ?? /* @__PURE__ */ new Date(NaN),
16
+ kind: e.kind === void 0 || e.kind === null ? "replace" : String(e.kind),
17
+ tables: e.tables === null || e.tables === void 0 ? null : Number(e.tables),
18
+ capture: e.capture === null || e.capture === void 0 ? null : String(e.capture),
19
+ via: String(e.via ?? "unknown"),
20
+ staging: i(e.staging),
21
+ heartbeatAt: r(e.heartbeatAt),
22
+ resumable: e.resumable === !0 || e.resumable === 1 || e.resumable === "1"
23
+ }));
24
+ } catch {
25
+ return [];
26
+ }
27
+ }, s = async (e) => t(await o(e)), c = async (t, i, s) => {
28
+ let c = i === "postgres" || i === "mysql" || i === "mariadb" || i === "sqlite" || i === "mssql" ? i : void 0, l = await o(t), u = r(l, Date.now(), a(process.env, s?.dataTransfer?.stagingStaleMinutes));
29
+ if (u.all.length === 0) return;
30
+ let { STAGING_PREFIX: d, canStage: f, dropStagingSql: p, execStatements: m } = await import("@voltro/data-transfer"), h = [], g = f(t) ? t : void 0;
31
+ if (c !== void 0 && g !== void 0) for (let n of u.droppable) try {
32
+ await m(g, n.staging.map((e) => p(e.startsWith(d) ? e.slice(d.length) : e, c))), await t.delete(e, n.id), h.push(n.id);
33
+ } catch {}
34
+ let _ = new Set(h);
35
+ return n({
36
+ all: u.all,
37
+ droppable: u.droppable.filter((e) => _.has(e.id))
38
+ }, Date.now());
39
+ };
40
+ //#endregion
41
+ export { c as n, s as t };
@@ -0,0 +1,2 @@
1
+ import { t as e } from "./interruptedReplace-CwnkBb2X.js";
2
+ export { e as interruptedReplaceAtBoot };
@@ -1,7 +1,7 @@
1
1
  import { n as e } from "./runtimeRegistry-DMeKfTHP.js";
2
2
  import { r as t, t as n } from "./logFileSink-B4uP8pvf.js";
3
3
  import { n as r } from "./cliOutput-D1tSBoRM.js";
4
- import { a as i, i as a } from "./inspectFetch-EMuhTG_9.js";
4
+ import { a as i, i as a } from "./inspectFetch-BU1NyzxV.js";
5
5
  import { ansi as o } from "@voltro/logger";
6
6
  //#region src/logsCmd.ts
7
7
  var s = (e) => {
@@ -1,4 +1,4 @@
1
- import { P as e } from "./inspect-Bd8-9wsi.js";
1
+ import { L as e } from "./inspect-CNYvNXPU.js";
2
2
  import { JSONSchema as t } from "effect";
3
3
  //#region src/manifestBuild.ts
4
4
  var n = (e) => {
@@ -0,0 +1,2 @@
1
+ import { t as e } from "./manifestBuild-CEkjfpwc.js";
2
+ export { e as buildRpcEntry };
@@ -1,7 +1,7 @@
1
1
  import { t as e } from "./cliError-BmdYnghb.js";
2
2
  import { r as t } from "./dialectDriver-czCHYpeH.js";
3
3
  import { a as n, r } from "./connectionConfig-Bk9IC7D0.js";
4
- import { g as i, n as a, s as o } from "./frameworkTableAssembly-D7LJuALW.js";
4
+ import { g as i, n as a, s as o } from "./frameworkTableAssembly-DNOFXfEQ.js";
5
5
  import { t as s } from "./cliRuntime-Dh7UDinH.js";
6
6
  import { join as c, relative as l, resolve as u } from "node:path";
7
7
  import { pathToFileURL as d } from "node:url";
@@ -79,7 +79,7 @@ var _ = /* @__PURE__ */ new Set([
79
79
  let t = u(e.find((e) => !e.startsWith("-")) ?? process.cwd());
80
80
  return s(S(t), { scope: "voltro:migrate" });
81
81
  }
82
- let { runDbCommand: t } = await import("./dbCommand-CSFWs9ev.js");
82
+ let { runDbCommand: t } = await import("./dbCommand-DrycGWWt.js");
83
83
  return t(["apply", ...e]);
84
84
  };
85
85
  //#endregion
@@ -0,0 +1,40 @@
1
+ import { i as e } from "./staticCachePolicy-CIyj6DbS.js";
2
+ import { join as t } from "node:path";
3
+ import { promises as n } from "node:fs";
4
+ import { brotliCompress as r, constants as i, gzip as a } from "node:zlib";
5
+ import { promisify as o } from "node:util";
6
+ //#region src/precompressAssets.ts
7
+ var s = o(r), c = o(a), l = /\.(js|mjs|css|svg|json|map|txt|xml|wasm)$/i, u = async (r) => {
8
+ let a = t(r, "assets"), o;
9
+ try {
10
+ o = await n.readdir(a);
11
+ } catch {
12
+ return {
13
+ files: 0,
14
+ originalBytes: 0,
15
+ brotliBytes: 0,
16
+ gzipBytes: 0
17
+ };
18
+ }
19
+ let u = 0, d = 0, f = 0, p = 0;
20
+ return await Promise.all(o.map(async (r) => {
21
+ if (r.endsWith(".br") || r.endsWith(".gz") || !l.test(r) || !e(`/assets/${r}`)) return;
22
+ let o = t(a, r);
23
+ try {
24
+ let e = await n.readFile(o);
25
+ if (e.length < 1024) return;
26
+ let [t, r] = await Promise.all([s(e, { params: {
27
+ [i.BROTLI_PARAM_QUALITY]: 11,
28
+ [i.BROTLI_PARAM_SIZE_HINT]: e.length
29
+ } }), c(e, { level: 9 })]);
30
+ t.length < e.length && (await n.writeFile(`${o}.br`, t), f += t.length), r.length < e.length && (await n.writeFile(`${o}.gz`, r), p += r.length), u += 1, d += e.length;
31
+ } catch {}
32
+ })), {
33
+ files: u,
34
+ originalBytes: d,
35
+ brotliBytes: f,
36
+ gzipBytes: p
37
+ };
38
+ };
39
+ //#endregion
40
+ export { u as precompressAssets };
@@ -1,6 +1,6 @@
1
1
  import { r as e, t } from "./inspectGateHint-4LxkNtrz.js";
2
2
  import { n } from "./cliOutput-D1tSBoRM.js";
3
- import { n as r, o as i, r as a, t as o } from "./inspectFetch-EMuhTG_9.js";
3
+ import { n as r, o as i, r as a, t as o } from "./inspectFetch-BU1NyzxV.js";
4
4
  import { ansi as s } from "@voltro/logger";
5
5
  //#region src/probeCommand.ts
6
6
  var c = () => {
@@ -108,7 +108,7 @@ server and in this shell.`);
108
108
  }, m = async (e) => {
109
109
  let t = /* @__PURE__ */ new Map();
110
110
  try {
111
- let { walk: n, loadDiscovered: r } = await import("./dev-cKUiZZsB.js"), i = await r(await n(e)), a = [
111
+ let { walk: n, loadDiscovered: r } = await import("./dev-B9Gz0k85.js"), i = await r(await n(e)), a = [
112
112
  ...i.queries,
113
113
  ...i.mutations,
114
114
  ...i.actions,
@@ -1,4 +1,4 @@
1
- import { n as e } from "./apiBuild-DTWp0S_q.js";
1
+ import { n as e } from "./apiBuild-Bdaetr37.js";
2
2
  import { join as t, resolve as n, sep as r } from "node:path";
3
3
  import { existsSync as i, promises as a } from "node:fs";
4
4
  import { createLogger as o } from "@voltro/logger";
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./cliArgs-D4p8n7EE.js";
2
2
  import { n as t } from "./cliOutput-D1tSBoRM.js";
3
- import { n, o as r, r as i, t as a } from "./inspectFetch-EMuhTG_9.js";
3
+ import { n, o as r, r as i, t as a } from "./inspectFetch-BU1NyzxV.js";
4
4
  import { ansi as o } from "@voltro/logger";
5
5
  //#region src/scheduleCmd.ts
6
6
  var s = () => {
@@ -422,7 +422,7 @@ let package = Package(
422
422
  await l.mkdir(o(e), { recursive: !0 }), await l.writeFile(e, n.content, "utf8");
423
423
  }
424
424
  }, X = async (e) => {
425
- let { offlineManifest: t } = await import("./checkCommand-L7DTlpIF.js"), { manifest: n } = await t(e);
425
+ let { offlineManifest: t } = await import("./checkCommand-D0QV_zM_.js"), { manifest: n } = await t(e);
426
426
  return n;
427
427
  }, Z = async (e) => {
428
428
  let t = J(await (e.manifestProvider ?? X)(e.root), {
@@ -1,25 +1,25 @@
1
1
  import { n as e } from "./appModuleLoader-C9r9mxZt.js";
2
2
  import { promises as t } from "node:fs";
3
3
  import { _voltroSeedsTable as n, and as r, eq as i, generateId as a, isSeedDefinition as o, setSchemaChangeSeedHook as s, setTenantCreateSeedHook as c } from "@voltro/database";
4
- import { Cause as l, Effect as u } from "effect";
5
- import { SqlClient as d } from "@effect/sql";
6
- import { DEFAULT_CDC_CHANNEL as f, detectReactiveTriggerDrift as p, migrationLockKeyForSchema as m, reactiveTriggerRepairSql as h, resolveMigrationLockSchema as g } from "@voltro/database/sql";
7
- import { defineSchedule as _ } from "@voltro/runtime";
4
+ import { defineSchedule as l } from "@voltro/runtime";
5
+ import { Cause as u, Effect as d } from "effect";
6
+ import { SqlClient as f } from "@effect/sql";
7
+ import { DEFAULT_CDC_CHANNEL as p, detectReactiveTriggerDrift as m, migrationLockKeyForSchema as h, reactiveTriggerRepairSql as g, resolveMigrationLockSchema as _ } from "@voltro/database/sql";
8
8
  import { createHash as v } from "node:crypto";
9
9
  //#region src/reactiveTriggerBoot.ts
10
10
  var y = (e, t = process.env) => {
11
11
  let n = (t.VOLTRO_REACTIVE_TRIGGERS ?? "").trim().toLowerCase(), r = n === "repair" || n === "report" || n === "off" ? n : e ?? "repair";
12
12
  return r === "repair" && t.VOLTRO_AUTO_MIGRATE === "0" ? "report" : r;
13
- }, b = (e, t, n = f) => u.map(p(e, t, n), (e) => ({
13
+ }, b = (e, t, n = p) => d.map(m(e, t, n), (e) => ({
14
14
  drift: e,
15
- statements: h({
15
+ statements: g({
16
16
  tables: t,
17
17
  dialect: "postgres",
18
18
  channel: n,
19
19
  ...e
20
20
  })
21
- })), x = (e, t) => u.gen(function* () {
22
- let n = yield* d.SqlClient, { drift: r, statements: i } = yield* b(n, e, t.channel ?? f), a = {
21
+ })), x = (e, t) => d.gen(function* () {
22
+ let n = yield* f.SqlClient, { drift: r, statements: i } = yield* b(n, e, t.channel ?? p), a = {
23
23
  missing: r.missing.length,
24
24
  stale: r.stale.length,
25
25
  statements: i.length
@@ -32,24 +32,24 @@ var y = (e, t = process.env) => {
32
32
  kind: "reported",
33
33
  ...a
34
34
  };
35
- let o = m(g({ schema: t.lockSchema }));
35
+ let o = h(_({ schema: t.lockSchema }));
36
36
  return (yield* n`
37
- SELECT pg_try_advisory_lock(${o.toString()}::bigint) AS got`)[0]?.got === !0 ? yield* u.gen(function* () {
37
+ SELECT pg_try_advisory_lock(${o.toString()}::bigint) AS got`)[0]?.got === !0 ? yield* d.gen(function* () {
38
38
  for (let e of i) yield* n.unsafe(e);
39
39
  return {
40
40
  kind: "repaired",
41
41
  ...a
42
42
  };
43
- }).pipe(u.ensuring(n`SELECT pg_advisory_unlock(${o.toString()}::bigint)`.pipe(u.catchAll(() => u.void)))) : {
43
+ }).pipe(d.ensuring(n`SELECT pg_advisory_unlock(${o.toString()}::bigint)`.pipe(d.catchAll(() => d.void)))) : {
44
44
  kind: "lock-held",
45
45
  ...a
46
46
  };
47
- }).pipe(u.catchAllCause((e) => u.succeed({
47
+ }).pipe(d.catchAllCause((e) => d.succeed({
48
48
  kind: "failed",
49
49
  missing: 0,
50
50
  stale: 0,
51
51
  statements: 0,
52
- detail: l.pretty(e)
52
+ detail: u.pretty(e)
53
53
  }))), S = async (e) => {
54
54
  let t = {
55
55
  kind: "skipped",
@@ -58,11 +58,11 @@ var y = (e, t = process.env) => {
58
58
  statements: 0
59
59
  };
60
60
  if (e.dialectId !== "postgres" || e.mode === "off" || e.tables.length === 0) return t;
61
- let n = await e.makeLayer(), r = await u.runPromise(x(e.tables, {
61
+ let n = await e.makeLayer(), r = await d.runPromise(x(e.tables, {
62
62
  mode: e.mode,
63
63
  ...e.channel === void 0 ? {} : { channel: e.channel },
64
64
  ...e.lockSchema === void 0 ? {} : { lockSchema: e.lockSchema }
65
- }).pipe(u.provide(n))).catch((e) => ({
65
+ }).pipe(d.provide(n))).catch((e) => ({
66
66
  kind: "failed",
67
67
  missing: 0,
68
68
  stale: 0,
@@ -317,7 +317,7 @@ var y = (e, t = process.env) => {
317
317
  await I(e, r.changedTables, t, n);
318
318
  }), () => {
319
319
  c(null), s(null);
320
- }), R = "seed:", z = (e, t, n) => e.filter((e) => e.definition.lifecycle === "cron").map((r) => _({
320
+ }), R = "seed:", z = (e, t, n) => e.filter((e) => e.definition.lifecycle === "cron").map((r) => l({
321
321
  name: `${R}${r.definition.id}`,
322
322
  cron: r.definition.cron ?? "",
323
323
  timezone: r.definition.timezone ?? "UTC",
@@ -0,0 +1,2 @@
1
+ import { n as e } from "./serveCommand-DIJ3ma76.js";
2
+ export { e as runServeDispatch };