@voltro/cli 0.37.0 → 0.39.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 (183) hide show
  1. package/CHANGELOG.md +316 -0
  2. package/THIRD-PARTY-NOTICES.md +80 -45
  3. package/dist/{addCommand-BNeoeSxe.js → addCommand-C05L9tZh.js} +2 -2
  4. package/dist/addCommand-C3MdJG-a.js +2 -0
  5. package/dist/{agentsMd-mhQMF1bx.js → agentsMd-7zI2h5l9.js} +3 -3
  6. package/dist/agentsMd-BFCXh2gl.js +2 -0
  7. package/dist/apiBuild-2GvK8CUB.js +2 -0
  8. package/dist/{apiBuild-DGsShRuF.js → apiBuild-DGalUk9v.js} +3 -3
  9. package/dist/baselineCommand-CXv680Dc.js +2 -0
  10. package/dist/{baselineCommand-C6NMt-oa.js → baselineCommand-Ck2Xm8M7.js} +18 -18
  11. package/dist/bin.js +1 -1
  12. package/dist/bootRefusal-pgvDxlrU.js +7 -0
  13. package/dist/{build-CiFA-E19.js → build-CfF6t0UM.js} +88 -81
  14. package/dist/{capabilitiesCommand-nq_pz5xd.js → capabilitiesCommand-D5gucwYa.js} +8 -8
  15. package/dist/{checkCommand-CIPYyNyc.js → checkCommand-BV56Pcc1.js} +1 -1
  16. package/dist/{checkCommand-CLPTzYqM.js → checkCommand-CBtynBKW.js} +34 -34
  17. package/dist/{cloudCmd-NQSwe_Qk.js → cloudCmd-C42gaO8s.js} +16 -16
  18. package/dist/{clusterCmd-D5wsCmA_.js → clusterCmd-DrVFCzSj.js} +8 -4
  19. package/dist/{codegen-GYYcdpCg.js → codegen-CbpGCWLG.js} +1 -1
  20. package/dist/codegen-i8QGcHsi.js +2 -0
  21. package/dist/codegenCommand-W7SDdiAQ.js +129 -0
  22. package/dist/{codemodRunner-cyqu5oxr.js → codemodRunner-D-jTyvWo.js} +679 -495
  23. package/dist/{commands-BwG9A9Vv.js → commands-BD9eBRY3.js} +48 -48
  24. package/dist/{connectionConfig-UFlIEiys.js → connectionConfig-Bk9IC7D0.js} +1 -1
  25. package/dist/{dashboardCommand-C7U146xQ.js → dashboardCommand-7qGylm0F.js} +3 -3
  26. package/dist/{dataCommand-BOwd8_aJ.js → dataCommand-C_F2DYxe.js} +14 -11
  27. package/dist/{dbCommand-C4UW8cVN.js → dbCommand-DSwGv9wS.js} +50 -49
  28. package/dist/dbCommand-DcqEyxju.js +2 -0
  29. package/dist/dev-alhkKoEX.js +3 -0
  30. package/dist/{dev-bwDgSObH.js → dev-gqpnzVhI.js} +2357 -2280
  31. package/dist/{dialectDriver-CgXnDfec.js → dialectDriver-czCHYpeH.js} +2 -1
  32. package/dist/{doctorCommand-BXyrtN2l.js → doctorCommand-Bvs-BQrM.js} +242 -238
  33. package/dist/doctorCommand-CVXfRrng.js +2 -0
  34. package/dist/{dormancyCommand-BDdRRLsa.js → dormancyCommand-B-PPHc9Q.js} +1 -1
  35. package/dist/{e2eCmd-BRabZww-.js → e2eCmd-uFHig1hV.js} +8 -2
  36. package/dist/{embeddingsCommand-CjWGcAE6.js → embeddingsCommand-OKY6XjUf.js} +6 -6
  37. package/dist/{envCommand-B_TeG297.js → envCommand-B1-Zm85H.js} +2 -2
  38. package/dist/{evolveCommand-D6N-WfA4.js → evolveCommand-C4-NlFbd.js} +6 -8
  39. package/dist/{generateCommand-DbgcUpGw.js → generateCommand-CcyvH2ve.js} +1 -1
  40. package/dist/index.js +1 -1
  41. package/dist/{infoCommand-BHKTprrx.js → infoCommand-CTo8Jnhq.js} +7 -7
  42. package/dist/inspect-B7U7Cl_Z.js +1192 -0
  43. package/dist/inspect-DUze25t0.js +2 -0
  44. package/dist/{inspectCmd-EHFZ9yYu.js → inspectCmd-niF97fAq.js} +5 -5
  45. package/dist/inspectGateHint-BjnFubmH.js +7 -0
  46. package/dist/{logFileSink-C_D2wRN1.js → logFileSink-B4uP8pvf.js} +1 -1
  47. package/dist/{logsCmd-D36xK7Zu.js → logsCmd-B6oNsfaZ.js} +10 -7
  48. package/dist/{manifestBuild-hpPLaGxV.js → manifestBuild-BK42hu0k.js} +1 -1
  49. package/dist/manifestBuild-j0n109tt.js +2 -0
  50. package/dist/{metaCommands-CIoQNlaQ.js → metaCommands-DUYR--Ts.js} +1 -1
  51. package/dist/{migrate-RwgUWXfc.js → migrate-BnPw2zC8.js} +7 -4
  52. package/dist/{packageCommand-Cug_3Ogl.js → packageCommand-9SVyvsSo.js} +3 -2
  53. package/dist/{probeCommand-BPEpwT32.js → probeCommand-C9gazU0H.js} +35 -24
  54. package/dist/{projectScaffold-CxgtJvlb.js → projectScaffold-BEhhHjPr.js} +1 -1
  55. package/dist/{projectScaffold-DDgWbNLe.js → projectScaffold-BvhLOrLq.js} +17 -15
  56. package/dist/{runtimeTrace-WYV7qYvz.js → runtimeTrace-DzZOCd94.js} +1 -1
  57. package/dist/{scheduleManifestCmd-D2x0CTTY.js → scheduleManifestCmd-kmWzrO_w.js} +6 -9
  58. package/dist/{sdkgen-TM5sSdf7.js → sdkgen-C4roLErM.js} +4 -4
  59. package/dist/{seedRunner-ZmLSqNe2.js → seedRunner-IdHEprqf.js} +1 -4
  60. package/dist/serveCommand-B6TATyCj.js +1770 -0
  61. package/dist/serveCommand-CNR0gI9V.js +2 -0
  62. package/dist/serveEntry.js +2 -2
  63. package/dist/{serverlessCommand-CfJZy6dS.js → serverlessCommand-DbJ7Plg9.js} +3 -3
  64. package/dist/{start-BgN62boB.js → start-BNuTWdRd.js} +1 -1
  65. package/dist/{start-T4VesWiM.js → start-ft_KzFTd.js} +240 -237
  66. package/dist/startEntry.js +1 -1
  67. package/dist/startup.d.ts +40 -1
  68. package/dist/startup.js +2 -2
  69. package/dist/startupRunner-CEqQq7ax.js +108 -0
  70. package/dist/{test-DIQ0jlkQ.js → test-CLYXrZ2F.js} +1 -1
  71. package/dist/{tracesCmd-DStmCJPi.js → tracesCmd-DgtgOUdi.js} +7 -4
  72. package/dist/{typecheckCommand-BlsWiCNq.js → typecheckCommand-BuCtT92o.js} +7 -7
  73. package/dist/updateCommand-6FMU2klq.js +2 -0
  74. package/dist/{updateCommand-9GHHsmDf.js → updateCommand-CHBmCB17.js} +5 -3
  75. package/dist/{webDev-Dybxew86.js → webDev-CTpSY-e_.js} +892 -856
  76. package/dist/webDev-id3I5PvG.js +2 -0
  77. package/dist/{webhookDiscovery-D7VaeMlz.js → webhookDiscovery-CphsQe59.js} +4 -6
  78. package/dist/{webhookDiscovery-CrGAfhIG.js → webhookDiscovery-il9ti-HE.js} +1 -1
  79. package/dist/{webhooksCommand-CHWSPk5z.js → webhooksCommand-BVvOtZ1B.js} +1 -1
  80. package/package.json +39 -21
  81. package/templates/AGENTS.md +2 -2
  82. package/templates/agent-docs/_index.md +2 -2
  83. package/templates/agent-docs/_manifest.json +2 -2
  84. package/templates/agent-docs/authentication.md +30 -0
  85. package/templates/agent-docs/cli.md +17 -13
  86. package/templates/agent-docs/data.md +44 -1
  87. package/templates/agent-docs/database/migrations.md +2 -2
  88. package/templates/agent-docs/database/seedsdialects.md +2 -2
  89. package/templates/agent-docs/deployment.md +21 -7
  90. package/templates/agent-docs/internationalization.md +10 -3
  91. package/templates/agent-docs/local-first-mobile.md +141 -20
  92. package/templates/agent-docs/plugins/audit.md +4 -0
  93. package/templates/agent-docs/plugins/auth.md +4 -6
  94. package/templates/agent-docs/plugins/mail.md +1 -1
  95. package/templates/agent-docs/plugins/ratelimit.md +1 -1
  96. package/templates/agent-docs/plugins.md +3 -1
  97. package/templates/agent-docs/reference.md +3 -2
  98. package/templates/agent-docs/releases.md +130 -1
  99. package/templates/agent-docs/routing.md +34 -2
  100. package/templates/agent-docs/templates/apibackends.md +1 -1
  101. package/templates/agent-docs/templates/mobile.md +1 -1
  102. package/templates/agent-docs/whats-new.md +178 -44
  103. package/templates/apps/api-ai/package.json +7 -7
  104. package/templates/apps/api-auth/package.json +8 -8
  105. package/templates/apps/api-backend/package.json +7 -7
  106. package/templates/apps/api-backend-deactivation/package.json +7 -7
  107. package/templates/apps/api-backend-mail/package.json +8 -8
  108. package/templates/apps/api-backend-mariadb/package.json +9 -9
  109. package/templates/apps/api-backend-sqlite/package.json +8 -8
  110. package/templates/apps/api-backend-storage/package.json +8 -8
  111. package/templates/apps/api-cms/package.json +10 -10
  112. package/templates/apps/api-cms/tests/content.write.test.ts +16 -2
  113. package/templates/apps/api-collab/mutations/documents.setBody.mutation.server.ts +11 -5
  114. package/templates/apps/api-collab/package.json +8 -8
  115. package/templates/apps/api-collab/tests/documents.setBody.test.ts +8 -2
  116. package/templates/apps/api-data-advanced/package.json +8 -8
  117. package/templates/apps/api-durable/package.json +8 -8
  118. package/templates/apps/api-feature-flags/package.json +9 -9
  119. package/templates/apps/api-governance/package.json +8 -8
  120. package/templates/apps/api-kv/package.json +8 -8
  121. package/templates/apps/api-moderation/package.json +8 -8
  122. package/templates/apps/api-observability/package.json +8 -8
  123. package/templates/apps/api-ratelimit/package.json +8 -8
  124. package/templates/apps/api-rbac/authz.ts +16 -1
  125. package/templates/apps/api-rbac/package.json +8 -8
  126. package/templates/apps/api-rest/package.json +7 -7
  127. package/templates/apps/api-saas/package.json +11 -11
  128. package/templates/apps/api-saas-starter/package.json +10 -10
  129. package/templates/apps/api-search/package.json +8 -8
  130. package/templates/apps/api-status/package.json +8 -8
  131. package/templates/apps/api-versioning/mutations/documents.update.mutation.server.ts +7 -5
  132. package/templates/apps/api-versioning/package.json +8 -8
  133. package/templates/apps/api-webhooks/package.json +9 -9
  134. package/templates/apps/changelog/package.json +6 -6
  135. package/templates/apps/edge-functions/package.json +2 -2
  136. package/templates/apps/frontend-admin/package.json +8 -8
  137. package/templates/apps/frontend-app/package.json +9 -9
  138. package/templates/apps/frontend-auth/package.json +8 -8
  139. package/templates/apps/frontend-blank/package.json +7 -7
  140. package/templates/apps/frontend-cms/package.json +9 -9
  141. package/templates/apps/frontend-collab/package.json +10 -10
  142. package/templates/apps/frontend-contact/package.json +7 -7
  143. package/templates/apps/frontend-dashboard/package.json +7 -7
  144. package/templates/apps/frontend-docs/package.json +7 -7
  145. package/templates/apps/frontend-i18n/package.json +6 -6
  146. package/templates/apps/frontend-landing/package.json +7 -7
  147. package/templates/apps/frontend-portal/package.json +8 -8
  148. package/templates/apps/frontend-saas/package.json +8 -8
  149. package/templates/apps/frontend-spa/package.json +7 -7
  150. package/templates/apps/frontend-ssr/package.json +7 -7
  151. package/templates/apps/frontend-ssr-api/package.json +8 -8
  152. package/templates/apps/frontend-static-blog/package.json +6 -6
  153. package/templates/apps/frontend-status/package.json +8 -8
  154. package/templates/apps/mobile-app/README.md +41 -17
  155. package/templates/apps/mobile-app/app.config.ts +1 -1
  156. package/templates/apps/mobile-app/package.json +15 -11
  157. package/templates/apps/mobile-app/src/app/_layout.tsx +44 -13
  158. package/templates/apps/mobile-app/src/app/index.tsx +1 -1
  159. package/templates/apps/mobile-app/src/app/settings.tsx +4 -1
  160. package/templates/apps/mobile-app/src/client.ts +74 -57
  161. package/templates/apps/mobile-app/src/lib/api.ts +4 -4
  162. package/templates/apps/mobile-app/src/lib/deeplinks.ts +6 -6
  163. package/templates/apps/mobile-app/src/persistence.ts +24 -3
  164. package/templates/apps/mobile-app/tsconfig.json +17 -3
  165. package/templates/patches/@effect__cluster@0.60.0.patch +51 -3
  166. package/dist/addCommand-aXSQveak.js +0 -2
  167. package/dist/agentsMd-BTchIZku.js +0 -2
  168. package/dist/apiBuild-D0f6hYbH.js +0 -2
  169. package/dist/baselineCommand-Cfw2Afwm.js +0 -2
  170. package/dist/codegen-uYrrDzQv.js +0 -2
  171. package/dist/codegenCommand-BxS3sCeJ.js +0 -30
  172. package/dist/dbCommand-CC-qNzpz.js +0 -2
  173. package/dist/dev-BV6XNYKf.js +0 -3
  174. package/dist/doctorCommand-C4L61G_L.js +0 -2
  175. package/dist/inspect-CjTYzAs_.js +0 -1190
  176. package/dist/inspect-P4pxoMaV.js +0 -2
  177. package/dist/inspectGateHint-BF6608UT.js +0 -4
  178. package/dist/manifestBuild-COkJoyAr.js +0 -2
  179. package/dist/serveCommand-CyZsXL1l.js +0 -1766
  180. package/dist/serveCommand-qumm7jdF.js +0 -2
  181. package/dist/startupRunner-DPGFchOa.js +0 -71
  182. package/dist/updateCommand-BN0tkl9-.js +0 -2
  183. package/dist/webDev-BcykISYQ2.js +0 -2
@@ -1,8 +1,8 @@
1
- import { pn as e } from "./dev-bwDgSObH.js";
2
- import { D as t, G as n, K as r, O as i, S as a, W as o, Y as s, a as c, b as l, d as u, f as d, k as f, s as p, st as m, ut as h, v as g, x as _, y as v } from "./webDev-Dybxew86.js";
1
+ import { hn as e } from "./dev-gqpnzVhI.js";
2
+ import { D as t, G as n, K as r, O as i, S as a, W as o, Y as s, a as c, b as l, d as u, f as d, k as f, s as p, st as m, ut as h, v as g, x as _, y as v } from "./webDev-CTpSY-e_.js";
3
3
  import { t as y } from "./cliRuntime-Dh7UDinH.js";
4
4
  import { a as b } from "./renderModeScan-D7J1B7Kw.js";
5
- import { i as x, o as S, s as C } from "./apiBuild-DGsShRuF.js";
5
+ import { i as x, o as S, s as C } from "./apiBuild-DGalUk9v.js";
6
6
  import { n as w } from "./renderProfile-1OWWAAtx.js";
7
7
  import { dirname as T, join as E, resolve as D } from "node:path";
8
8
  import { existsSync as O, promises as k } from "node:fs";
@@ -91,7 +91,11 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
91
91
  r.push(a);
92
92
  } else r.push(i);
93
93
  return r.length === 0 ? "/" : "/" + r.join("/");
94
- }, z = (e, t) => t === "/" || t === "" ? E(e, "index.html") : E(e, ...t.replace(/^\//, "").split("/"), "index.html"), B = (e) => e.replace(/<script\b(?=[^>]*\btype="module")(?:(?!<\/script>).)*<\/script>/gi, "").replace(/<script\b(?=[^>]*\bsrc=)(?:(?!<\/script>).)*<\/script>/gi, "").replace(/<link\b[^>]*\brel="modulepreload"[^>]*>/gi, ""), V = (e, t) => {
94
+ }, z = (e, t) => {
95
+ if (t === "/" || t === "") return E(e, "index.html");
96
+ let n = t.replace(/^\//, "").split("/");
97
+ return E(e, ...n, "index.html");
98
+ }, B = (e) => e.replace(/<script\b(?=[^>]*\btype="module")(?:(?!<\/script>).)*<\/script>/gi, "").replace(/<script\b(?=[^>]*\bsrc=)(?:(?!<\/script>).)*<\/script>/gi, "").replace(/<link\b[^>]*\brel="modulepreload"[^>]*>/gi, ""), V = (e, t) => {
95
99
  let n = e.replace("<div id=\"root\"></div>", `<div id="root">${t.body}</div>`), r = [
96
100
  t.metaHtml,
97
101
  `<meta name="voltro-interactive" content="${t.interactive}" />`,
@@ -194,30 +198,31 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
194
198
  },
195
199
  appType: "custom",
196
200
  logLevel: "warn"
197
- }), g = await h.ssrLoadModule("@voltro/web/ssr"), { renderPageToHtml: v, renderMetaToHtml: y, renderRouterStateScript: x, isDeferredLoaderResult: S, assertDeferralSupported: C, beginStoreSeeds: w, seedPreloadedSubscription: D } = g, A = /* @__PURE__ */ new Map();
201
+ }), g = await h.ssrLoadModule("@voltro/web/ssr"), { renderPageToHtml: v, renderMetaToHtml: y, renderRouterStateScript: x, isDeferredLoaderResult: S, assertDeferralSupported: C, beginStoreSeeds: w, seedPreloadedSubscription: D, seedPreloadedSubscriptionFailure: A } = g, j = /* @__PURE__ */ new Map();
198
202
  if (e.locales && e.locales.length > 0 && e.defaultLocale) try {
199
203
  let n = (await h.ssrLoadModule("@voltro/i18n")).makeSsgWrap;
200
204
  if (typeof n != "function") throw Error("@voltro/i18n is installed but missing the `makeSsgWrap` export — upgrade @voltro/i18n to a version that ships SSG support.");
201
205
  for (let r of e.locales) try {
202
206
  let i = await h.ssrLoadModule(E(t, "src", "locales", `${r}.ts`)), a = i.default ?? i;
203
- A.set(r, n(r, a, e.defaultLocale));
207
+ j.set(r, n(r, a, e.defaultLocale));
204
208
  } catch (e) {
205
209
  F.warn(`i18n catalog missing for locale '${r}' — pages rendered at /${r}/* will crash. Add src/locales/${r}.ts.`, {}, e);
206
210
  }
207
211
  } catch (e) {
208
212
  F.warn("i18n wrapper unavailable for SSG — pages that call useT() will fail. Check that @voltro/i18n is installed.", {}, e);
209
213
  }
210
- let j = [], M = {}, N = (e) => e.dir === "" ? E(t, "src", "pages") : E(t, "src", "pages", e.dir), P = async (e) => await h.ssrLoadModule(E(N(e), "layout.tsx")), I = async (e) => await h.ssrLoadModule(E(N(e), "error.tsx")), B = async (e) => await h.ssrLoadModule(E(N(e), "loading.tsx")), U = (e, t) => ({
214
+ let M = [], N = {}, P = (e) => e.dir === "" ? E(t, "src", "pages") : E(t, "src", "pages", e.dir), I = async (e) => await h.ssrLoadModule(E(P(e), "layout.tsx")), B = async (e) => await h.ssrLoadModule(E(P(e), "error.tsx")), U = async (e) => await h.ssrLoadModule(E(P(e), "loading.tsx")), W = (e, t) => ({
211
215
  params: e.params,
212
216
  pathname: e.pathname,
213
217
  search: "",
214
218
  signal: t,
215
219
  headers: {},
216
- query: void 0
220
+ query: void 0,
221
+ isServer: !0
217
222
  });
218
223
  for (let a of r) {
219
224
  let r = `${E(t, "src", "pages", a.file)}`, o = await h.ssrLoadModule(r), s = b(o, E("src", "pages", a.file));
220
- M[a.pattern] = s;
225
+ N[a.pattern] = s;
221
226
  let u = s.renderMode, d = p(i, a.dirChain);
222
227
  if (u === "spa") {
223
228
  let t = await H({
@@ -227,17 +232,17 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
227
232
  shellTemplate: l,
228
233
  distDir: n,
229
234
  helpers: g,
230
- loadLayout: P,
231
- loadError: I,
232
- loadPending: B,
233
- ctx: U({
235
+ loadLayout: I,
236
+ loadError: B,
237
+ loadPending: U,
238
+ ctx: W({
234
239
  params: {},
235
240
  pathname: a.pattern
236
241
  }, new AbortController().signal),
237
- outerWrap: A.get(e.defaultLocale ?? ""),
242
+ outerWrap: j.get(e.defaultLocale ?? ""),
238
243
  locale: e.defaultLocale
239
244
  });
240
- t && j.push(t);
245
+ t && M.push(t);
241
246
  continue;
242
247
  }
243
248
  if (u !== "static") {
@@ -288,10 +293,10 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
288
293
  try {
289
294
  ({chain: r, segmentLoaderData: i} = await c({
290
295
  entries: d,
291
- loadLayout: P,
292
- loadError: I,
293
- loadPending: B,
294
- ctx: U(t, s.signal)
296
+ loadLayout: I,
297
+ loadError: B,
298
+ loadPending: U,
299
+ ctx: W(t, s.signal)
295
300
  }));
296
301
  } catch (e) {
297
302
  let n = e?._voltroControl;
@@ -302,10 +307,10 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
302
307
  }
303
308
  F.warn("layout loader threw, falling back to no layout data", { pathname: t.pathname }, e), {chain: r, segmentLoaderData: i} = await c({
304
309
  entries: d,
305
- loadLayout: async (e) => ({ default: (await P(e)).default }),
306
- loadError: I,
307
- loadPending: B,
308
- ctx: U(t, s.signal)
310
+ loadLayout: async (e) => ({ default: (await I(e)).default }),
311
+ loadError: B,
312
+ loadPending: U,
313
+ ctx: W(t, s.signal)
309
314
  });
310
315
  }
311
316
  let f = {
@@ -324,7 +329,8 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
324
329
  p = await o.loader({
325
330
  params: t.params,
326
331
  pathname: t.pathname,
327
- signal: e.signal
332
+ signal: e.signal,
333
+ isServer: !0
328
334
  });
329
335
  } catch (e) {
330
336
  if (e instanceof Error && e._voltroControl === "redirect") throw Error(`Static page "${t.pathname}" threw RedirectError at build time. Static pages can't redirect per-request — switch it to renderMode 'ssr'.`);
@@ -350,9 +356,10 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
350
356
  params: t.params,
351
357
  query: void 0,
352
358
  apiName: void 0,
353
- seed: D
359
+ seed: D,
360
+ seedFailure: A
354
361
  });
355
- let h = t.params.locale ?? e.defaultLocale ?? "en", g = A.get(h) ?? A.get(e.defaultLocale ?? ""), { html: b, meta: E } = v({
362
+ let h = t.params.locale ?? e.defaultLocale ?? "en", g = j.get(h) ?? j.get(e.defaultLocale ?? ""), { html: b, meta: E } = v({
356
363
  descriptor: f,
357
364
  params: t.params,
358
365
  pathname: t.pathname,
@@ -370,17 +377,17 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
370
377
  pageLoaderRan: typeof o.loader == "function"
371
378
  }),
372
379
  interactive: m
373
- }), M = z(n, t.pathname);
374
- await k.mkdir(T(M), { recursive: !0 }), await k.writeFile(M, O, "utf8"), j.push({
380
+ }), N = z(n, t.pathname);
381
+ await k.mkdir(T(N), { recursive: !0 }), await k.writeFile(N, O, "utf8"), M.push({
375
382
  pattern: t.pathname,
376
- outPath: M,
383
+ outPath: N,
377
384
  ...E?.noIndex ? { noIndex: !0 } : {}
378
385
  });
379
386
  }
380
387
  }
381
388
  return await h.close(), {
382
- rendered: j,
383
- pageMeta: M
389
+ rendered: M,
390
+ pageMeta: N
384
391
  };
385
392
  }, W = async (e, t, n, r, i, a) => {
386
393
  let o = E(e, ".framework"), s = [];
@@ -461,13 +468,13 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
461
468
  ].join("\n"), b = E(o, "ssrEntry.ts");
462
469
  return await k.writeFile(b, y, "utf8"), b;
463
470
  }, G = async (e) => {
464
- let { checkRpcGroupFreshness: t } = await import("./codegen-uYrrDzQv.js"), n = await t(e);
471
+ let { checkRpcGroupFreshness: t } = await import("./codegen-i8QGcHsi.js"), n = await t(e);
465
472
  if (n.kind === "fresh") return;
466
473
  n.kind === "stale" && F.info("rpcGroup.generated.ts is stale — regenerating", {
467
474
  file: n.file,
468
475
  reason: n.reason
469
476
  });
470
- let { regenerateRpcGroup: r } = await import("./codegenCommand-BxS3sCeJ.js"), i = await r(e);
477
+ let { regenerateRpcGroup: r } = await import("./codegenCommand-W7SDdiAQ.js"), i = await r(e);
471
478
  if (i.kind === "refused") {
472
479
  F.warn("could not regenerate the rpc group — building against what is on disk", { reason: i.reason });
473
480
  return;
@@ -479,10 +486,10 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
479
486
  }, K = async (e) => {
480
487
  let t = await u(e);
481
488
  if (!t) {
482
- let { loadApiConfig: t } = await import("./dev-BV6XNYKf.js"), n = await t(e);
489
+ let { loadApiConfig: t } = await import("./dev-alhkKoEX.js"), n = await t(e);
483
490
  if (n) {
484
491
  F.info("building api app", { app: n.name ?? "(unnamed)" }), await G(e);
485
- let { runApiBuild: t, runServeBundleBuild: r } = await import("./apiBuild-D0f6hYbH.js");
492
+ let { runApiBuild: t, runServeBundleBuild: r } = await import("./apiBuild-2GvK8CUB.js");
486
493
  await t(e);
487
494
  try {
488
495
  await r(e);
@@ -509,40 +516,40 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
509
516
  root: e,
510
517
  log: F,
511
518
  generateTypes: !0
512
- });
513
- await l(e, t, await d(e, t), i.publicValues);
514
- let { pages: a } = await v(E(e, "src", "pages"));
519
+ }), a = await d(e, t);
520
+ await l(e, t, a, i.publicValues);
521
+ let { pages: c } = await v(E(e, "src", "pages"));
515
522
  await r({
516
523
  appRoot: e,
517
- pages: a,
524
+ pages: c,
518
525
  mode: "prod"
519
526
  });
520
- let c = E(e, ".framework"), f = E(c, "dist"), p = E(e, "node_modules", "@voltro", "ui-shadcn"), _ = O(E(p, "package.json")) ? p : null, y = [..._ ? [
527
+ let f = E(e, ".framework"), p = E(f, "dist"), _ = E(e, "node_modules", "@voltro", "ui-shadcn"), y = O(E(_, "package.json")) ? _ : null, b = [...y ? [
521
528
  {
522
529
  find: "@voltro/ui-shadcn/tokens.css",
523
- replacement: E(_, "src/tokens.css")
530
+ replacement: E(y, "src/tokens.css")
524
531
  },
525
532
  {
526
533
  find: "@voltro/ui-shadcn/cn",
527
- replacement: E(_, "src/cn.ts")
534
+ replacement: E(y, "src/cn.ts")
528
535
  },
529
536
  {
530
537
  find: "@voltro/ui-shadcn/brand",
531
- replacement: E(_, "src/brand/voltroLogo.tsx")
538
+ replacement: E(y, "src/brand/voltroLogo.tsx")
532
539
  },
533
540
  {
534
541
  find: "@voltro/ui-shadcn",
535
- replacement: E(_, "src/index.ts")
542
+ replacement: E(y, "src/index.ts")
536
543
  }
537
544
  ] : [], ...s(e)];
538
545
  F.info("running vite build");
539
- let b = await h("vite", () => import("vite")), x = (await import("@vitejs/plugin-react")).default, C = (await import("@tailwindcss/vite")).default;
540
- await b.build({
541
- root: c,
546
+ let x = await h("vite", () => import("vite")), C = (await import("@vitejs/plugin-react")).default, T = (await import("@tailwindcss/vite")).default;
547
+ await x.build({
548
+ root: f,
542
549
  envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
543
- plugins: [x(), C()],
550
+ plugins: [C(), T()],
544
551
  resolve: {
545
- alias: y,
552
+ alias: b,
546
553
  dedupe: [
547
554
  "react",
548
555
  "react-dom",
@@ -558,36 +565,36 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
558
565
  },
559
566
  logLevel: "warn"
560
567
  });
561
- let T = E(e, "src", "pages"), { pages: D, dirs: A } = await v(T);
562
- if (D.length === 0) return F.info("no pages found — client-only bundle written", {
563
- pagesDir: T,
564
- distDir: f
568
+ let D = E(e, "src", "pages"), { pages: A, dirs: j } = await v(D);
569
+ if (A.length === 0) return F.info("no pages found — client-only bundle written", {
570
+ pagesDir: D,
571
+ distDir: p
565
572
  }), {
566
573
  ran: !0,
567
574
  exitCode: 0
568
575
  };
569
- let { rendered: j, pageMeta: M } = await U({
576
+ let { rendered: M, pageMeta: N } = await U({
570
577
  root: e,
571
- distDir: f,
572
- pages: D,
573
- dirs: A,
574
- vite: b,
578
+ distDir: p,
579
+ pages: A,
580
+ dirs: j,
581
+ vite: x,
575
582
  ...t.locales ? { locales: t.locales } : {},
576
583
  ...t.defaultLocale ? { defaultLocale: t.defaultLocale } : {}
577
584
  });
578
- F.info("generating .framework/ssrEntry.ts"), await W(e, D, A, t.locales, t.defaultLocale, M), F.info("vite build --ssr → dist/server/");
579
- let N = /* @__PURE__ */ new Set();
585
+ F.info("generating .framework/ssrEntry.ts"), await W(e, A, j, t.locales, t.defaultLocale, N), F.info("vite build --ssr → dist/server/");
586
+ let L = /* @__PURE__ */ new Set();
580
587
  try {
581
- await b.build({
582
- root: c,
588
+ await x.build({
589
+ root: f,
583
590
  envPrefix: "__VOLTRO_VITE_ENV_DISABLED__",
584
591
  plugins: [
585
- x(),
586
592
  C(),
587
- I(e, N)
593
+ T(),
594
+ I(e, L)
588
595
  ],
589
596
  resolve: {
590
- alias: y,
597
+ alias: b,
591
598
  dedupe: [
592
599
  "react",
593
600
  "react-dom",
@@ -605,7 +612,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
605
612
  logLevel: "warn"
606
613
  }), F.info("SSR bundle ready", {
607
614
  path: "dist/server/ssrEntry.js",
608
- ...N.size > 0 ? { externalizedOptionalPeers: [...N].join(", ") } : {}
615
+ ...L.size > 0 ? { externalizedOptionalPeers: [...L].join(", ") } : {}
609
616
  });
610
617
  } catch (e) {
611
618
  return F.fatal("SSR bundle build FAILED — refusing to ship a bundle-less image. Fix the error above (production renders from the SSR bundle, never by compiling on demand).", {}, e), {
@@ -613,13 +620,13 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
613
620
  exitCode: 1
614
621
  };
615
622
  }
616
- let L = E(e, "app.config.ts");
617
- if (O(L)) {
623
+ let R = E(e, "app.config.ts");
624
+ if (O(R)) {
618
625
  F.info("precompiling app.config.ts → dist/server/appConfig.js");
619
626
  try {
620
627
  await (await h("esbuild", () => import("esbuild"))).build({
621
- entryPoints: [L],
622
- outfile: E(f, "server", "appConfig.js"),
628
+ entryPoints: [R],
629
+ outfile: E(p, "server", "appConfig.js"),
623
630
  bundle: !0,
624
631
  format: "esm",
625
632
  platform: "node",
@@ -644,14 +651,14 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
644
651
  } catch (e) {
645
652
  F.warn("start bundle build failed — `voltro start` will use the slower per-module boot", {}, e);
646
653
  }
647
- F.info(`pre-rendered ${j.length} static route(s)`, {
648
- count: j.length,
649
- routes: j.map((e) => e.pattern)
654
+ F.info(`pre-rendered ${M.length} static route(s)`, {
655
+ count: M.length,
656
+ routes: M.map((e) => e.pattern)
650
657
  });
651
658
  try {
652
659
  let e = process.env.VOLTRO_SEO_NOINDEX !== "1", r = t.seo?.siteUrl, i = t.locales ?? [], a = t.defaultLocale ?? i[0];
653
- if (r && !O(E(f, "sitemap.xml"))) {
654
- let t = new Set(i.filter((e) => e !== a)), o = j.filter((e) => !e.noIndex).map((e) => e.pattern).filter((e) => {
660
+ if (r && !O(E(p, "sitemap.xml"))) {
661
+ let t = new Set(i.filter((e) => e !== a)), o = M.filter((e) => !e.noIndex).map((e) => e.pattern).filter((e) => {
655
662
  let n = e.split("/").filter(Boolean)[0];
656
663
  return n === void 0 || !t.has(n);
657
664
  }).filter((e) => !e.includes("[")).map((e) => ({ path: e })), s = n({
@@ -660,25 +667,25 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
660
667
  ...i.length > 1 ? { locales: i } : {},
661
668
  ...a ? { defaultLocale: a } : {}
662
669
  });
663
- await k.writeFile(E(f, "sitemap.xml"), s, "utf8"), F.info("wrote dist/sitemap.xml", {
670
+ await k.writeFile(E(p, "sitemap.xml"), s, "utf8"), F.info("wrote dist/sitemap.xml", {
664
671
  urls: o.length,
665
672
  indexable: e
666
673
  });
667
674
  }
668
- if (!O(E(f, "robots.txt"))) {
675
+ if (!O(E(p, "robots.txt"))) {
669
676
  let n = o({
670
677
  indexable: e,
671
678
  ...e && r ? { sitemapUrl: `${r.replace(/\/$/, "")}/sitemap.xml` } : {},
672
679
  ...t.seo?.disallow ? { disallow: t.seo.disallow } : {}
673
680
  });
674
- await k.writeFile(E(f, "robots.txt"), n, "utf8"), F.info("wrote dist/robots.txt", { indexable: e });
681
+ await k.writeFile(E(p, "robots.txt"), n, "utf8"), F.info("wrote dist/robots.txt", { indexable: e });
675
682
  }
676
683
  } catch (e) {
677
684
  F.warn("SEO artefact generation failed (non-fatal)", {}, e);
678
685
  }
679
686
  try {
680
687
  let t = await w(e);
681
- await k.writeFile(E(f, ".voltro-build.json"), JSON.stringify({
688
+ await k.writeFile(E(p, ".voltro-build.json"), JSON.stringify({
682
689
  version: 1,
683
690
  profile: t
684
691
  }, null, 2), "utf8"), F.info("wrote deploy profile manifest", {
@@ -689,7 +696,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
689
696
  } catch (e) {
690
697
  F.warn("could not write .voltro-build.json deploy manifest", {}, e);
691
698
  }
692
- return F.info("build complete", { distDir: f }), {
699
+ return F.info("build complete", { distDir: p }), {
693
700
  ran: !0,
694
701
  exitCode: 0
695
702
  };
@@ -701,7 +708,7 @@ var N = A({ scope: "voltro:build" }), P = async (e) => {
701
708
  return t.ran ? t.exitCode : (yield* j.logError("no web app found at this path", { hint: "looked for app.config.ts with `type: 'web'`" }), 1);
702
709
  }), J = async (t) => {
703
710
  if (t.includes("--target")) {
704
- let { runSdkBuildCommand: e } = await import("./sdkgen-TM5sSdf7.js");
711
+ let { runSdkBuildCommand: e } = await import("./sdkgen-C4roLErM.js");
705
712
  return e(t);
706
713
  }
707
714
  let n = t.find((e) => !e.startsWith("-")) ?? process.cwd(), r = await y(q(n), { scope: "voltro:build" }), i = e(n);
@@ -102,19 +102,19 @@ var l = (e, t) => t ? "type" : e.startsWith("define") ? "primitive" : /^use[A-Z]
102
102
  ], h = async (r) => {
103
103
  let a = t(r);
104
104
  a && n();
105
- let o = i(r.find((e) => !e.startsWith("-")) ?? process.cwd()), s = p(o);
106
- if (a) return e(s), 0;
107
- if (s.voltroPackages === 0) return console.log(`voltro capabilities — no @voltro packages found under ${o}/node_modules.`), console.log(" Run this from an app root with dependencies installed."), 0;
108
- console.log(`voltro capabilities — ${s.totalSymbols} exported symbols across ${s.voltroPackages} packages`);
109
- for (let e of s.packages) {
105
+ let o = r.find((e) => !e.startsWith("-")), s = i(o ?? process.cwd()), c = p(s);
106
+ if (a) return e(c), 0;
107
+ if (c.voltroPackages === 0) return console.log(`voltro capabilities — no @voltro packages found under ${s}/node_modules.`), console.log(" Run this from an app root with dependencies installed."), 0;
108
+ console.log(`voltro capabilities — ${c.totalSymbols} exported symbols across ${c.voltroPackages} packages`);
109
+ for (let e of c.packages) {
110
110
  let t = m.map((t) => [t, e.symbols.filter((e) => e.kind === t).length]).filter(([, e]) => e > 0).map(([e, t]) => `${t} ${e}${t === 1 ? "" : "s"}`).join(", ");
111
111
  console.log(` ${e.name}@${e.version} — ${t}`);
112
112
  let n = e.symbols.filter((e) => e.kind === "primitive" || e.kind === "hook");
113
113
  n.length > 0 && console.log(` ${n.map((e) => e.name + (e.documented ? "" : " *")).join(", ")}`);
114
114
  }
115
- if (s.undocumented.length > 0) {
116
- console.log(""), console.log(` * ${s.undocumented.length} primitive(s)/hook(s) appear nowhere in this project's agent guide:`);
117
- for (let e of s.undocumented) console.log(` ${e}`);
115
+ if (c.undocumented.length > 0) {
116
+ console.log(""), console.log(` * ${c.undocumented.length} primitive(s)/hook(s) appear nowhere in this project's agent guide:`);
117
+ for (let e of c.undocumented) console.log(` ${e}`);
118
118
  console.log(" Run `voltro agents-md --force` to refresh it, or read that package README.");
119
119
  }
120
120
  return console.log(""), console.log(" --json emits the full machine-readable surface (every symbol, kind, and documented flag)."), 0;
@@ -1,2 +1,2 @@
1
- import { n as e, r as t, t as n } from "./checkCommand-CLPTzYqM.js";
1
+ import { n as e, r as t, t as n } from "./checkCommand-CBtynBKW.js";
2
2
  export { n as offlineManifest, e as runCheckCommand, t as toInput };
@@ -1,10 +1,10 @@
1
1
  import { t as e } from "./cliArgs-D4p8n7EE.js";
2
- import { c as t, i as n } from "./codegen-GYYcdpCg.js";
2
+ import { c as t, i as n } from "./codegen-CbpGCWLG.js";
3
3
  import { r } from "./appGraph-KGDPTuTy.js";
4
4
  import { n as i } from "./cliOutput-D1tSBoRM.js";
5
5
  import { n as a, o, r as s, t as c } from "./inspectFetch-EMuhTG_9.js";
6
6
  import { r as l } from "./fileTaxonomy-CJfgOllU.js";
7
- import { x as u } from "./doctorCommand-BXyrtN2l.js";
7
+ import { x as u } from "./doctorCommand-Bvs-BQrM.js";
8
8
  import { resolve as d } from "node:path";
9
9
  import { readdirSync as f, statSync as p } from "node:fs";
10
10
  //#region src/observedDiff.ts
@@ -141,7 +141,7 @@ var m = (e) => e === void 0 ? [] : typeof e == "string" ? [e] : e, h = /* @__PUR
141
141
  let t = e.severity === "error" ? "✗ error" : "⚠ warn", n = e.file ? ` (${e.file})` : "";
142
142
  return `${t} ${e.rule} ${e.node}${n}\n ${e.breaks.join("; ")}\n fix: ${e.fix}`;
143
143
  }).join("\n"), C = async (e) => {
144
- let { walk: t, loadDiscovered: n, loadApiConfig: r } = await import("./dev-BV6XNYKf.js"), { buildRpcEntry: i } = await import("./manifestBuild-COkJoyAr.js"), { buildCapabilityManifest: a } = await import("./inspect-P4pxoMaV.js"), { relative: o } = await import("node:path"), s = await n(await t(e)), c = (t, n, r) => i(t, n, o(e, r)), l = [
144
+ let { walk: t, loadDiscovered: n, loadApiConfig: r } = await import("./dev-alhkKoEX.js"), { buildRpcEntry: i } = await import("./manifestBuild-j0n109tt.js"), { buildCapabilityManifest: a } = await import("./inspect-DUze25t0.js"), { relative: o } = await import("node:path"), s = await n(await t(e)), c = (t, n, r) => i(t, n, o(e, r)), l = [
145
145
  ...s.queries.map((e) => c(e.descriptor, "query", e.file)),
146
146
  ...s.mutations.map((e) => c(e.descriptor, "mutation", e.file)),
147
147
  ...s.actions.map((e) => c(e.descriptor, "action", e.file)),
@@ -158,75 +158,75 @@ var m = (e) => e === void 0 ? [] : typeof e == "string" ? [e] : e, h = /* @__PUR
158
158
  tables: { tables: p }
159
159
  };
160
160
  }, w = async (n) => {
161
- let f = a(n.flatMap((e) => e === "--json" ? ["--format", "json"] : [e]));
162
- if ("error" in f) return console.error(`voltro check: ${f.error}`), 1;
163
- let { process: p, target: m, rest: h } = s(f.rest), v;
164
- for (let e = 0; e < h.length; e++) if (h[e] === "--diff") {
165
- let [t, n] = (h[++e] ?? "").split(":");
166
- if (t === "removeTable" && n) v = {
161
+ let f = n.flatMap((e) => e === "--json" ? ["--format", "json"] : [e]), p = a(f);
162
+ if ("error" in p) return console.error(`voltro check: ${p.error}`), 1;
163
+ let { process: m, target: h, rest: v } = s(p.rest), w;
164
+ for (let e = 0; e < v.length; e++) if (v[e] === "--diff") {
165
+ let [t, n] = (v[++e] ?? "").split(":");
166
+ if (t === "removeTable" && n) w = {
167
167
  kind: "removeTable",
168
168
  name: n
169
169
  };
170
- else if (t === "removeProcedure" && n) v = {
170
+ else if (t === "removeProcedure" && n) w = {
171
171
  kind: "removeProcedure",
172
172
  tag: n
173
173
  };
174
- else if (t === "removeScope" && n) v = {
174
+ else if (t === "removeScope" && n) w = {
175
175
  kind: "removeScope",
176
176
  name: n
177
177
  };
178
178
  else return console.error("voltro check --diff: expected removeTable:<name> | removeProcedure:<tag> | removeScope:<name>"), 1;
179
179
  }
180
- let w = e(h, ["--diff"]) ?? process.cwd(), T = h.includes("--offline"), E = T ? [] : await o(p, m), D, O;
181
- if (E.length === 0) {
182
- if (!T && m !== void 0) return console.error("voltro check: --url given but no api reachable there."), 1;
180
+ let T = e(v, ["--diff"]) ?? process.cwd(), E = v.includes("--offline"), D = E ? [] : await o(m, h), O, k;
181
+ if (D.length === 0) {
182
+ if (!E && h !== void 0) return console.error("voltro check: --url given but no api reachable there."), 1;
183
183
  try {
184
- let e = await C(d(w));
185
- D = e.manifest, O = e.tables;
184
+ let e = await C(d(T));
185
+ O = e.manifest, k = e.tables;
186
186
  } catch (e) {
187
187
  return console.error(`voltro check: could not assemble the graph from source: ${e.message}`), console.error(" Start `voltro dev` to check against a running api instead."), 1;
188
188
  }
189
189
  } else {
190
- let e = E[0], [t, n] = await Promise.all([c(e, "/_voltro/inspect/manifest"), c(e, "/_voltro/inspect/data/tables")]);
190
+ let e = D[0], [t, n] = await Promise.all([c(e, "/_voltro/inspect/manifest"), c(e, "/_voltro/inspect/data/tables")]);
191
191
  if (t.kind === "err") return console.error(`voltro check: manifest fetch failed: ${t.error}`), 1;
192
- D = t.data, O = n.kind === "ok" ? n.data : { tables: [] };
192
+ O = t.data, k = n.kind === "ok" ? n.data : { tables: [] };
193
193
  }
194
- let k = x(D, O), A = r(k, v), j = [...l(w).findings.map((e) => ({
194
+ let A = x(O, k), j = r(A, w), M = [...l(T).findings.map((e) => ({
195
195
  rule: e.rule,
196
196
  node: e.file,
197
197
  file: e.file,
198
198
  breaks: [e.detail],
199
199
  fix: e.fix,
200
200
  severity: e.severity
201
- })), ...u(w).map((e) => ({
201
+ })), ...u(T).map((e) => ({
202
202
  rule: `page/${e.kind}`,
203
203
  node: e.file,
204
204
  file: e.file,
205
205
  breaks: [e.kind === "suffixed-outside-pages" ? "a page.tsx outside src/pages/ never routes" : "no test beside it"],
206
206
  fix: e.kind === "suffixed-outside-pages" ? "move it under src/pages/ into the directory whose route it serves, or rename it — page.tsx is reserved" : "write the test with the file — the name is derivable",
207
207
  severity: e.kind === "suffixed-outside-pages" ? "error" : "warn"
208
- }))], M = (await t(w, _(w))).map((e) => ({
208
+ }))], N = (await t(T, _(T))).map((e) => ({
209
209
  rule: "client/not-browser-safe",
210
210
  node: e.file,
211
211
  file: e.file,
212
212
  breaks: [`reaches the server-only '${e.violation.specifier}' — chain: ${e.violation.chain.join(" → ")}`],
213
213
  fix: "move the server-only code behind a *.server.ts, or drop the .client suffix — an unmarked file makes no claim",
214
214
  severity: "error"
215
- })), N = [
216
- ...A.diagnostics,
215
+ })), P = [
216
+ ...j.diagnostics,
217
+ ...M,
218
+ ...N
219
+ ], F = j.ok && !M.some((e) => e.severity === "error") && N.length === 0, I = await y(d(T)), L = I === null ? null : g(A.procedures, I);
220
+ return p.format === "json" ? i(L === null ? {
217
221
  ...j,
218
- ...M
219
- ], P = A.ok && !j.some((e) => e.severity === "error") && M.length === 0, F = await y(d(w)), I = F === null ? null : g(k.procedures, F);
220
- return f.format === "json" ? i(I === null ? {
221
- ...A,
222
- ok: P,
223
- diagnostics: N
222
+ ok: F,
223
+ diagnostics: P
224
224
  } : {
225
- ...A,
226
- ok: P,
227
- diagnostics: N,
228
- observed: I
229
- }) : (console.log(S(N)), I !== null && console.log(b(I)), console.log(P ? "\nvoltro check: OK" : "\nvoltro check: FAILED (errors above)")), +!P;
225
+ ...j,
226
+ ok: F,
227
+ diagnostics: P,
228
+ observed: L
229
+ }) : (console.log(S(P)), L !== null && console.log(b(L)), console.log(F ? "\nvoltro check: OK" : "\nvoltro check: FAILED (errors above)")), +!F;
230
230
  };
231
231
  //#endregion
232
232
  export { w as n, x as r, C as t };
@@ -1,7 +1,7 @@
1
1
  import { a as e, t } from "./cliArgs-D4p8n7EE.js";
2
2
  import { a as n, i as r, n as i, r as a, t as o } from "./cloudClient-DWL-Hw_T.js";
3
3
  import { n as s } from "./cliOutput-D1tSBoRM.js";
4
- import { d as c, f as l, o as u } from "./projectScaffold-DDgWbNLe.js";
4
+ import { d as c, f as l, o as u } from "./projectScaffold-BvhLOrLq.js";
5
5
  import { basename as d, join as f, resolve as p } from "node:path";
6
6
  import { promises as m } from "node:fs";
7
7
  import { ansi as h } from "@voltro/logger";
@@ -115,7 +115,7 @@ var b = y(_), x = async (e) => {
115
115
  let s = setTimeout(() => a({
116
116
  ok: !1,
117
117
  error: "timed out waiting for the browser login (5 min)"
118
- }), 5 * 6e4);
118
+ }), 3e5);
119
119
  typeof s.unref == "function" && s.unref();
120
120
  });
121
121
  return r.close(), r.closeAllConnections?.(), i.ok ? (await n({
@@ -269,7 +269,7 @@ replicas = 1
269
269
  let f = d.data.deploymentId;
270
270
  if (typeof f != "string") return console.error("voltro cloud deploy: unexpected response from the control plane"), 1;
271
271
  console.log(`${h.green("queued")} ${f} · ${r} @ ${u.slice(0, 8)}`);
272
- let p = Date.now() + 15 * 6e4, m = "";
272
+ let p = Date.now() + 9e5, m = "";
273
273
  for (; Date.now() < p;) {
274
274
  await S(3e3);
275
275
  let e = await i(`/deployments/${encodeURIComponent(f)}`, { token: l });
@@ -285,23 +285,23 @@ replicas = 1
285
285
  }, q = async (e) => {
286
286
  let { json: t, rest: n } = D(e), { value: r, rest: a } = T(n, "--dir"), { project: o } = z(a), s = await w();
287
287
  if (s === null) return 1;
288
- let c = p(r ?? process.cwd()), u = await l(c, await H());
289
- if (u.apps.length === 0) return console.error(`voltro cloud scan: no apps (no app.config.ts found under ${c})`), 1;
290
- let d = JSON.stringify(u);
291
- if (/\bimport\s|\bexport\s|=>|function\s/.test(d)) return console.error("voltro cloud scan: refusing to send — payload looks like it contains source, not metadata"), 1;
292
- let f = await i(`/projects/${encodeURIComponent(o)}/inventory`, {
288
+ let c = p(r ?? process.cwd()), u = await H(), d = await l(c, u);
289
+ if (d.apps.length === 0) return console.error(`voltro cloud scan: no apps (no app.config.ts found under ${c})`), 1;
290
+ let f = JSON.stringify(d);
291
+ if (/\bimport\s|\bexport\s|=>|function\s/.test(f)) return console.error("voltro cloud scan: refusing to send — payload looks like it contains source, not metadata"), 1;
292
+ let m = await i(`/projects/${encodeURIComponent(o)}/inventory`, {
293
293
  method: "POST",
294
294
  token: s,
295
- body: u
295
+ body: d
296
296
  });
297
- if (f.kind === "err") return console.error(`voltro cloud scan: ${f.error}`), 1;
298
- if (t) return O(!0, f.data), 0;
299
- let m = f.data;
300
- for (let e of u.apps) {
301
- let t = m.apps?.find((t) => t.slug === e.slug), n = t?.created ? h.green("registered") : h.green("updated");
297
+ if (m.kind === "err") return console.error(`voltro cloud scan: ${m.error}`), 1;
298
+ if (t) return O(!0, m.data), 0;
299
+ let g = m.data;
300
+ for (let e of d.apps) {
301
+ let t = g.apps?.find((t) => t.slug === e.slug), n = t?.created ? h.green("registered") : h.green("updated");
302
302
  console.log(` ${n} ${e.slug} (${e.kind}) · ${t?.primitiveCount ?? 0} primitives · voltro ${e.voltroVersion ?? "unknown"}`);
303
303
  }
304
- return console.log(`${h.green("ok")} scanned ${u.apps.length} app(s) into ${o}`), 0;
304
+ return console.log(`${h.green("ok")} scanned ${d.apps.length} app(s) into ${o}`), 0;
305
305
  }, J = async (e) => {
306
306
  if (!G()) return console.error(W), 1;
307
307
  let { json: t, rest: n } = D(e), { project: r, rest: a } = z(n), { value: o } = T(a, "--app");
@@ -317,7 +317,7 @@ replicas = 1
317
317
  let l = c.data.deploymentId, u = c.data.rolledBackTo;
318
318
  if (typeof l != "string") return console.error("voltro cloud rollback: unexpected response from the control plane"), 1;
319
319
  console.log(`${h.green("queued")} ${l} · rollback ${o} → ${String(u).slice(0, 12)}`);
320
- let d = Date.now() + 15 * 6e4, f = "";
320
+ let d = Date.now() + 9e5, f = "";
321
321
  for (; Date.now() < d;) {
322
322
  await S(3e3);
323
323
  let e = await i(`/deployments/${encodeURIComponent(l)}`, { token: s });
@@ -15,10 +15,14 @@ var o = () => {
15
15
  name: e.name,
16
16
  error: e.error
17
17
  });
18
- return r === "json" ? (e(u.length > 0 ? {
19
- instances: l,
20
- fetchErrors: u
21
- } : { instances: l }, { pretty: !1 }), +!!s.every((e) => e.kind === "err")) : c(l, u, s);
18
+ if (r === "json") {
19
+ let t = u.length > 0 ? {
20
+ instances: l,
21
+ fetchErrors: u
22
+ } : { instances: l };
23
+ return e(t, { pretty: !1 }), +!!s.every((e) => e.kind === "err");
24
+ }
25
+ return c(l, u, s);
22
26
  }, c = (e, t, n) => {
23
27
  if (e.length > 0) {
24
28
  console.log(a.bold("cluster instances")), console.log("");