@voltro/cli 0.53.0 → 0.54.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 (181) hide show
  1. package/CHANGELOG.md +195 -0
  2. package/dist/{agentsMd-0l980yhL.js → agentsMd-BaLC10Na.js} +110 -82
  3. package/dist/agentsMd-DCY1RSs8.js +2 -0
  4. package/dist/apiBuild-CeUN55uk.js +2 -0
  5. package/dist/{apiBuild-CaPfoWku.js → apiBuild-DTWp0S_q.js} +2 -2
  6. package/dist/bin.js +1 -1
  7. package/dist/{build-D-OnvNMf.js → build-D4ygSbnV.js} +114 -114
  8. package/dist/{checkCommand-C5elt0tW.js → checkCommand-Dg1G7Gwd.js} +6 -6
  9. package/dist/{checkCommand-D2ZduVlh.js → checkCommand-L7DTlpIF.js} +1 -1
  10. package/dist/{cloudCmd-QUXh-b5w.js → cloudCmd-DzKcSYuy.js} +1 -1
  11. package/dist/{codegen-FEk8AZHb.js → codegen-DSLM8Su9.js} +2 -2
  12. package/dist/codegen-DjgxEOnD.js +2 -0
  13. package/dist/codegenCommand-CG_Vx4lc.js +41 -0
  14. package/dist/{codemodRunner-BjtB2lq6.js → codemodRunner-Cd4xkC6u.js} +9 -9
  15. package/dist/{commands-DyxAmhP0.js → commands-6Kzi92Np.js} +96 -73
  16. package/dist/{dashboardCommand-BdKTyT13.js → dashboardCommand-Cq1PWvI1.js} +3 -3
  17. package/dist/{dataCommand-Bab9X7s8.js → dataCommand-DYzW8vkv.js} +3 -3
  18. package/dist/{dbCommand-06O2finM.js → dbCommand-B4NWZtGL.js} +3 -3
  19. package/dist/dbCommand-CSFWs9ev.js +2 -0
  20. package/dist/{dev-C6LGF4iY.js → dev-CmuvUKRq.js} +2236 -2219
  21. package/dist/{dev-GjJWAYo2.js → dev-cKUiZZsB.js} +1 -1
  22. package/dist/{doctorCommand-etMkflRc.js → doctorCommand-DCiFVMtZ.js} +21 -21
  23. package/dist/doctorCommand-J3qu4E0Y.js +2 -0
  24. package/dist/{dormancyCommand-UwZ1AZzB.js → dormancyCommand-w1TrmgYP.js} +1 -1
  25. package/dist/{embeddingsCommand-C70zWHwo.js → embeddingsCommand-CMgPyRTr.js} +1 -1
  26. package/dist/{envCommand-dSyKvRkM.js → envCommand-Cyynmcfa.js} +15 -15
  27. package/dist/{evolveCommand-CG0_ebO5.js → evolveCommand-BwvQ8dVH.js} +2 -2
  28. package/dist/fileConventions-l-RIXbx8.js +36 -0
  29. package/dist/{fileTaxonomy-B7uxipWS.js → fileTaxonomy-CbyMQYx_.js} +37 -37
  30. package/dist/{frameworkTableAssembly-DKx3ba3S.js → frameworkTableAssembly-D7LJuALW.js} +5 -5
  31. package/dist/frameworkTableAssembly-IPD1pUnZ.js +2 -0
  32. package/dist/index.js +2 -2
  33. package/dist/{infoCommand-_53iOc_j.js → infoCommand-DlYlUPqs.js} +1 -1
  34. package/dist/{metaCommands-Cn2oboG4.js → metaCommands-x7RCi2AF.js} +2 -2
  35. package/dist/{migrate-Cko9rswM.js → migrate-BK_Bbx-_.js} +2 -2
  36. package/dist/mobileCommand-D9O6iq3D.js +428 -0
  37. package/dist/mobileCommand-DAum7tsG.js +2 -0
  38. package/dist/{pageConvention-C938S8oC.js → pageConvention-CMpfDN6r.js} +1 -1
  39. package/dist/{privacyCommand-DWTQMC6R.js → privacyCommand-BCa2OoZG.js} +2 -2
  40. package/dist/{probeCommand-DkGGLknv.js → probeCommand-_C0YU207.js} +1 -1
  41. package/dist/{projectScaffold-EzlErR4E.js → projectScaffold-CJfP-xbT.js} +1 -1
  42. package/dist/{projectScaffold-B4dmTlwT.js → projectScaffold-CSN0OzBV.js} +2 -2
  43. package/dist/renderModeScan-43yQ2opo.js +147 -0
  44. package/dist/{renderProfile-CskIgAfn.js → renderProfile-DvrhVJHa.js} +2 -2
  45. package/dist/{runtimeTrace-c0APJz7E.js → runtimeTrace-CGWx1Q6l.js} +1 -1
  46. package/dist/{sdkgen-BiQCgIEr.js → sdkgen-CDGHQUFj.js} +1 -1
  47. package/dist/serveCommand-BiPe8BJm.js +2 -0
  48. package/dist/{serveCommand-CueKQgzl.js → serveCommand-Bje09q1v.js} +708 -708
  49. package/dist/serveEntry.js +1 -1
  50. package/dist/start-B0bnJgxI.js +3 -0
  51. package/dist/{start-ekPan8BT.js → start-Clz-1BHB.js} +511 -504
  52. package/dist/startEntry.js +1 -1
  53. package/dist/{staticCommand-xlSL-IWk.js → staticCommand-ey0kYmOT.js} +1 -1
  54. package/dist/{subcommandNames-DpYs3DXr.js → subcommandNames-CDzfEtKV.js} +3 -3
  55. package/dist/{templates-BR-fb4SP.js → templates-BTWZkJJT.js} +41 -9
  56. package/dist/{test-BWPQcRoB.js → test-D_kW4KMj.js} +1 -1
  57. package/dist/updateCommand-CIoVDKnj.js +2 -0
  58. package/dist/{updateCommand-C_8I8Rzo.js → updateCommand-CRJlAOaM.js} +1 -1
  59. package/dist/{webDev-oczpugbx.js → webDev-DSI9SOhs.js} +1127 -1090
  60. package/dist/{webDev-C7jWJ5dX.js → webDev-DlvZO30c.js} +1 -1
  61. package/dist/{webhooksCommand-4SVPDjKg.js → webhooksCommand-BvzXNHji.js} +1 -1
  62. package/dist/workspaceDeps-RKEkX92S.js +45 -0
  63. package/package.json +19 -19
  64. package/templates/AGENTS.core.md +2 -0
  65. package/templates/AGENTS.md +4 -2
  66. package/templates/agent-docs/_index.md +2 -2
  67. package/templates/agent-docs/_manifest.json +1 -1
  68. package/templates/agent-docs/ai.md +4 -4
  69. package/templates/agent-docs/authentication.md +72 -0
  70. package/templates/agent-docs/cli.md +4 -1
  71. package/templates/agent-docs/data.md +61 -12
  72. package/templates/agent-docs/database/advancedqueries.md +1 -1
  73. package/templates/agent-docs/database/migrations.md +1 -1
  74. package/templates/agent-docs/database/seedsdialects.md +64 -2
  75. package/templates/agent-docs/internationalization.md +2 -0
  76. package/templates/agent-docs/introduction.md +25 -0
  77. package/templates/agent-docs/local-first-mobile.md +139 -41
  78. package/templates/agent-docs/observability.md +4 -2
  79. package/templates/agent-docs/plugins/atlassian.md +2 -2
  80. package/templates/agent-docs/plugins/audit.md +2 -2
  81. package/templates/agent-docs/plugins/billing.md +1 -1
  82. package/templates/agent-docs/plugins/cdc-out.md +8 -3
  83. package/templates/agent-docs/plugins/comments.md +22 -0
  84. package/templates/agent-docs/plugins/presence.md +32 -3
  85. package/templates/agent-docs/plugins/prometheus.md +2 -0
  86. package/templates/agent-docs/plugins/queue.md +47 -4
  87. package/templates/agent-docs/plugins.md +6 -6
  88. package/templates/agent-docs/reference.md +20 -1
  89. package/templates/agent-docs/routing.md +63 -9
  90. package/templates/agent-docs/scheduling.md +1 -1
  91. package/templates/agent-docs/schema-driven-ui.md +12 -1
  92. package/templates/agent-docs/templates/appshells.md +36 -4
  93. package/templates/agent-docs/whats-new.md +109 -135
  94. package/templates/apps/api-ai/package.json +6 -6
  95. package/templates/apps/api-auth/package.json +8 -8
  96. package/templates/apps/api-backend/package.json +7 -7
  97. package/templates/apps/api-backend-deactivation/package.json +7 -7
  98. package/templates/apps/api-backend-mail/package.json +8 -8
  99. package/templates/apps/api-backend-mariadb/package.json +9 -9
  100. package/templates/apps/api-backend-sqlite/package.json +8 -8
  101. package/templates/apps/api-backend-storage/package.json +8 -8
  102. package/templates/apps/api-cms/package.json +9 -9
  103. package/templates/apps/api-collab/README.md +3 -3
  104. package/templates/apps/api-collab/app.config.ts +1 -1
  105. package/templates/apps/api-collab/database/schema.ts +12 -8
  106. package/templates/apps/api-collab/mutations/documents.create.mutation.server.ts +1 -1
  107. package/templates/apps/api-collab/mutations/documents.setBody.mutation.server.ts +1 -1
  108. package/templates/apps/api-collab/mutations/documents.setBody.mutation.ts +1 -1
  109. package/templates/apps/api-collab/package.json +8 -8
  110. package/templates/apps/api-collab/template.json +1 -1
  111. package/templates/apps/api-collab/tests/documents.setBody.test.ts +10 -2
  112. package/templates/apps/api-data-advanced/package.json +8 -8
  113. package/templates/apps/api-durable/package.json +8 -8
  114. package/templates/apps/api-feature-flags/package.json +9 -9
  115. package/templates/apps/api-governance/package.json +8 -8
  116. package/templates/apps/api-kv/package.json +8 -8
  117. package/templates/apps/api-moderation/package.json +8 -8
  118. package/templates/apps/api-observability/package.json +8 -8
  119. package/templates/apps/api-ratelimit/package.json +8 -8
  120. package/templates/apps/api-rbac/package.json +8 -8
  121. package/templates/apps/api-rest/package.json +7 -7
  122. package/templates/apps/api-row-history/package.json +8 -8
  123. package/templates/apps/api-saas/package.json +11 -10
  124. package/templates/apps/api-saas-starter/package.json +10 -10
  125. package/templates/apps/api-search/package.json +8 -8
  126. package/templates/apps/api-status/package.json +8 -8
  127. package/templates/apps/api-webhooks/package.json +9 -9
  128. package/templates/apps/changelog/package.json +7 -6
  129. package/templates/apps/edge-functions/package.json +2 -2
  130. package/templates/apps/frontend-admin/package.json +8 -8
  131. package/templates/apps/frontend-app/package.json +9 -9
  132. package/templates/apps/frontend-auth/package.json +8 -8
  133. package/templates/apps/frontend-blank/package.json +7 -7
  134. package/templates/apps/frontend-cms/package.json +9 -9
  135. package/templates/apps/frontend-collab/README.md +43 -24
  136. package/templates/apps/frontend-collab/app.config.ts +3 -3
  137. package/templates/apps/frontend-collab/package.json +14 -10
  138. package/templates/apps/frontend-collab/src/locales/de.ts +1 -2
  139. package/templates/apps/frontend-collab/src/locales/en.ts +1 -2
  140. package/templates/apps/frontend-collab/src/pages/page.test.tsx +72 -76
  141. package/templates/apps/frontend-collab/src/pages/page.tsx +45 -22
  142. package/templates/apps/frontend-collab/template.json +2 -2
  143. package/templates/apps/frontend-contact/package.json +7 -7
  144. package/templates/apps/frontend-dashboard/package.json +7 -7
  145. package/templates/apps/frontend-docs/package.json +8 -7
  146. package/templates/apps/frontend-i18n/package.json +6 -6
  147. package/templates/apps/frontend-landing/README.md +48 -0
  148. package/templates/apps/frontend-landing/app.config.ts +28 -0
  149. package/templates/apps/frontend-landing/package.json +7 -6
  150. package/templates/apps/frontend-landing/src/assets/hero.jpg +0 -0
  151. package/templates/apps/frontend-landing/src/fonts/Geist-Variable.woff2 +0 -0
  152. package/templates/apps/frontend-landing/src/fonts/LICENSE-Geist.txt +92 -0
  153. package/templates/apps/frontend-landing/src/globals.css +15 -0
  154. package/templates/apps/frontend-landing/src/globals.d.ts +17 -0
  155. package/templates/apps/frontend-landing/src/locales/de.ts +3 -2
  156. package/templates/apps/frontend-landing/src/locales/en.ts +5 -2
  157. package/templates/apps/frontend-landing/src/pages/page.test.tsx +79 -0
  158. package/templates/apps/frontend-landing/src/pages/page.tsx +26 -3
  159. package/templates/apps/frontend-landing/template.json +2 -2
  160. package/templates/apps/frontend-portal/package.json +8 -8
  161. package/templates/apps/frontend-saas/package.json +8 -8
  162. package/templates/apps/frontend-spa/package.json +7 -7
  163. package/templates/apps/frontend-ssr/package.json +7 -7
  164. package/templates/apps/frontend-ssr-api/package.json +8 -8
  165. package/templates/apps/frontend-static-blog/package.json +8 -7
  166. package/templates/apps/frontend-status/package.json +8 -8
  167. package/templates/apps/mobile-app/package.json +12 -11
  168. package/templates/apps/mobile-app/src/lib/deeplinks.ts +29 -17
  169. package/templates/apps/mobile-app/tests/deeplinks.test.ts +16 -0
  170. package/dist/agentsMd-SDDSkyl4.js +0 -2
  171. package/dist/apiBuild-DHtLXYx9.js +0 -2
  172. package/dist/codegen-BWpt3VgF.js +0 -2
  173. package/dist/codegenCommand-BOiWQ5hz.js +0 -137
  174. package/dist/dbCommand-B1EXBC6f.js +0 -2
  175. package/dist/doctorCommand-B0hX0tdz.js +0 -2
  176. package/dist/fileConventions-DASGEmj-.js +0 -35
  177. package/dist/frameworkTableAssembly-C_7Z-rMs.js +0 -2
  178. package/dist/renderModeScan-CUbOeOAg.js +0 -122
  179. package/dist/serveCommand-DsnrVN3U.js +0 -2
  180. package/dist/start-BJzZLbt8.js +0 -3
  181. package/dist/updateCommand-Bqql_rsQ.js +0 -2
@@ -1,3 +1,3 @@
1
- import { c as e, d as t, f as n, i as r, p as i, u as a } from "./dev-C6LGF4iY.js";
1
+ import { c as e, d as t, f as n, i as r, p as i, u as a } from "./dev-CmuvUKRq.js";
2
2
  import "./dialectDriver-czCHYpeH.js";
3
3
  export { r as buildStore, e as loadApiConfig, a as loadDiscovered, t as mergePluginRoutesInto, n as runDev, i as walk };
@@ -1,11 +1,11 @@
1
- import { Ht as e, Ut as t, Wt as n } from "./dev-C6LGF4iY.js";
2
- import { Ft as r, It as i, Nt as a, P as o, Pt as s, l as c, t as l, x as u } from "./webDev-oczpugbx.js";
3
- import { x as d } from "./frameworkTableAssembly-DKx3ba3S.js";
4
- import { n as f } from "./pageConvention-C938S8oC.js";
5
- import { r as p, u as m } from "./apiBuild-CaPfoWku.js";
1
+ import { Ht as e, Ut as t, Wt as n } from "./dev-CmuvUKRq.js";
2
+ import { Ft as r, It as i, Lt as a, P as o, Pt as s, l as c, t as l, x as u } from "./webDev-DSI9SOhs.js";
3
+ import { x as d } from "./frameworkTableAssembly-D7LJuALW.js";
4
+ import { n as f } from "./pageConvention-CMpfDN6r.js";
5
+ import { r as p, u as m } from "./apiBuild-DTWp0S_q.js";
6
6
  import { n as h, r as g, t as ee } from "./cliOutput-D1tSBoRM.js";
7
7
  import { n as _, t as te } from "./tsconfigPaths-BWXBWgcl.js";
8
- import { n as ne, r as re } from "./fileTaxonomy-B7uxipWS.js";
8
+ import { n as ne, r as re } from "./fileTaxonomy-CbyMQYx_.js";
9
9
  import { basename as ie, dirname as ae, join as v, relative as y, resolve as b, sep as x } from "node:path";
10
10
  import { existsSync as S, readFileSync as C, readdirSync as w, statSync as T, writeFileSync as oe } from "node:fs";
11
11
  import { pathToFileURL as se } from "node:url";
@@ -1427,7 +1427,7 @@ var le = /* @__PURE__ */ new Set([
1427
1427
  let t = en.get(e);
1428
1428
  if (t !== void 0) return t;
1429
1429
  let n = (async () => {
1430
- let { walk: t, loadDiscovered: n } = await import("./dev-GjJWAYo2.js"), r = await t(e);
1430
+ let { walk: t, loadDiscovered: n } = await import("./dev-cKUiZZsB.js"), r = await t(e);
1431
1431
  return {
1432
1432
  files: r,
1433
1433
  discovered: await n(r)
@@ -1552,7 +1552,7 @@ var le = /* @__PURE__ */ new Set([
1552
1552
  }
1553
1553
  }, J = async (r) => {
1554
1554
  try {
1555
- let { loadApiConfig: i } = await import("./dev-GjJWAYo2.js"), { discovered: a } = await U(r), o = t(await i(r)), s = {
1555
+ let { loadApiConfig: i } = await import("./dev-cKUiZZsB.js"), { discovered: a } = await U(r), o = t(await i(r)), s = {
1556
1556
  queries: a.queries,
1557
1557
  mutations: a.mutations,
1558
1558
  actions: a.actions,
@@ -1636,7 +1636,7 @@ var le = /* @__PURE__ */ new Set([
1636
1636
  }, pn = async (e) => ut({
1637
1637
  hasWorkflows: async () => (await U(e)).discovered.workflows.length > 0,
1638
1638
  openStore: async () => {
1639
- let { loadApiConfig: t, buildStore: n } = await import("./dev-GjJWAYo2.js"), r = await t(e);
1639
+ let { loadApiConfig: t, buildStore: n } = await import("./dev-cKUiZZsB.js"), r = await t(e);
1640
1640
  if (r === null) throw Error("no app.config.ts in this directory");
1641
1641
  let i = await n(r, void 0);
1642
1642
  return {
@@ -1716,7 +1716,7 @@ var le = /* @__PURE__ */ new Set([
1716
1716
  }
1717
1717
  }, yn = async (e) => {
1718
1718
  try {
1719
- let { loadApiConfig: t } = await import("./dev-GjJWAYo2.js"), n = (await t(e))?.doctor?.scopeVocabulary;
1719
+ let { loadApiConfig: t } = await import("./dev-cKUiZZsB.js"), n = (await t(e))?.doctor?.scopeVocabulary;
1720
1720
  if (typeof n != "string") return [];
1721
1721
  let [r, i] = n.split("#");
1722
1722
  if (r === void 0 || i === void 0) return [];
@@ -1733,10 +1733,10 @@ var le = /* @__PURE__ */ new Set([
1733
1733
  findings: []
1734
1734
  });
1735
1735
  try {
1736
- let { offlineManifest: n, toInput: r } = await import("./checkCommand-D2ZduVlh.js"), { buildAppGraph: i, checkAppGraph: a } = await import("./appGraph-CFmFKHb2.js"), o = await n(e), s = r(o.manifest, o.tables), c = await yn(e), l = [.../* @__PURE__ */ new Set([...s.scopes ?? [], ...c])];
1736
+ let { offlineManifest: n, toInput: r } = await import("./checkCommand-L7DTlpIF.js"), { buildAppGraph: i, checkAppGraph: a } = await import("./appGraph-CFmFKHb2.js"), o = await n(e), s = r(o.manifest, o.tables), c = await yn(e), l = [.../* @__PURE__ */ new Set([...s.scopes ?? [], ...c])];
1737
1737
  if (l.length === 0) {
1738
1738
  try {
1739
- let { loadAppSchemaInputs: t } = await import("./frameworkTableAssembly-C_7Z-rMs.js");
1739
+ let { loadAppSchemaInputs: t } = await import("./frameworkTableAssembly-IPD1pUnZ.js");
1740
1740
  await t(e);
1741
1741
  } catch {
1742
1742
  return t("app-not-importable");
@@ -1787,7 +1787,7 @@ var le = /* @__PURE__ */ new Set([
1787
1787
  if (n === void 0 || r.length === 0) return;
1788
1788
  let i = [];
1789
1789
  try {
1790
- let { loadApiConfig: t } = await import("./dev-GjJWAYo2.js");
1790
+ let { loadApiConfig: t } = await import("./dev-cKUiZZsB.js");
1791
1791
  i = (await t(e))?.locales ?? [];
1792
1792
  } catch {
1793
1793
  return;
@@ -1821,7 +1821,7 @@ var le = /* @__PURE__ */ new Set([
1821
1821
  a()?.reason === "binary-missing" ? (console.log("image pipeline: sharp is INSTALLED but its platform binary is missing —"), console.log(" an install that omitted optional dependencies drops the @img/* prebuilds."), console.log(" Fix: reinstall without omitting optional deps, or `pnpm add -D sharp` in this app.")) : (console.log("image pipeline: sharp is NOT installed — ?image imports serve originals (no srcSet, no blur)."), console.log(" Fix: `pnpm add -D sharp` in this app (it is an optional dependency of @voltro/cli;"), console.log(" your installer skipped optional dependencies)."));
1822
1822
  }, Cn = async (e) => {
1823
1823
  try {
1824
- let { loadConfig: t } = await import("./webDev-C7jWJ5dX.js"), n = (await t(e, { preferSource: !0 }))?.fonts;
1824
+ let { loadConfig: t } = await import("./webDev-DlvZO30c.js"), n = (await t(e, { preferSource: !0 }))?.fonts;
1825
1825
  if (n === void 0 || n.length === 0) return;
1826
1826
  let { loadFontkit: r, loadSubsetFont: i } = await import("./fontPipeline-LxIHa1vo.js"), a = [];
1827
1827
  if (await r() === null && a.push("fontkit (size-adjust fallback metrics — the CLS guard — are skipped)"), await i() === null && a.push("subset-font (declared `subsets:` ship the full files)"), console.log(""), a.length === 0) {
@@ -1836,7 +1836,7 @@ var le = /* @__PURE__ */ new Set([
1836
1836
  if (!S(t)) return !1;
1837
1837
  let n = [];
1838
1838
  try {
1839
- let { walkPagesTree: e } = await import("./webDev-C7jWJ5dX.js");
1839
+ let { walkPagesTree: e } = await import("./webDev-DlvZO30c.js");
1840
1840
  n = (await e(t)).pages.map((e) => e.pattern);
1841
1841
  } catch {
1842
1842
  return !1;
@@ -1849,7 +1849,7 @@ var le = /* @__PURE__ */ new Set([
1849
1849
  }, Tn = async (e) => {
1850
1850
  let { discovered: t } = await U(e), n = [];
1851
1851
  try {
1852
- let { loadApiConfig: t } = await import("./dev-GjJWAYo2.js");
1852
+ let { loadApiConfig: t } = await import("./dev-cKUiZZsB.js");
1853
1853
  n = ((await t(e))?.plugins ?? []).map((e) => {
1854
1854
  let t = (e.extendSchema?.tables ?? []).map((e) => {
1855
1855
  let t = e;
@@ -1995,7 +1995,7 @@ var le = /* @__PURE__ */ new Set([
1995
1995
  return n.unchecked.length > $ && console.log(` … and ${n.unchecked.length - $} more — \`voltro doctor --json\` prints every one (\`authz.unchecked\`).`), i === void 0 ? (console.log(`\nNo ${X} yet, so this run is advisory. To start the ratchet:`), console.log("\n voltro doctor --write-authz-allowlist\n"), console.log("That records today's unchecked handlers as DEBT and fails every run after on"), console.log("anything NEW. Fix a handler and its line stops mattering — the scan reports it as"), console.log("guarded whether or not the line is still there."), !1) : (console.log(`\n${n.unchecked.length} executor(s) with no access check are not in ${X}.`), console.log("Add a guard, or add the tag to that file if it is genuinely open."), console.log("\nBefore hand-rolling another check: `guards: [{ action, resourceType, resource }]`"), console.log("answers \"may this subject act on THIS row\" declaratively, and an app whose"), console.log("relationships live in its own tables registers its own tuple source rather than"), console.log("copying data into a framework table. See the authorization docs."), !0);
1996
1996
  }, jn = async (e) => {
1997
1997
  try {
1998
- let { loadApiConfig: t } = await import("./dev-GjJWAYo2.js"), { decidedSchemaReport: n } = await import("./doctorDecidedSchema-BlbWgCD_.js"), r = await t(e);
1998
+ let { loadApiConfig: t } = await import("./dev-cKUiZZsB.js"), { decidedSchemaReport: n } = await import("./doctorDecidedSchema-BlbWgCD_.js"), r = await t(e);
1999
1999
  return r == null ? null : n({
2000
2000
  ...r.schema ? { declared: r.schema } : {},
2001
2001
  ...r.store === void 0 ? {} : { store: r.store },
@@ -2020,8 +2020,8 @@ var le = /* @__PURE__ */ new Set([
2020
2020
  fileTaxonomy: re(o).findings,
2021
2021
  junctionFks: (await W(o))?.issues ?? [],
2022
2022
  eventDelivery: await G(o),
2023
- duplicateInstances: a(o),
2024
- versionSkew: s(o) ?? null,
2023
+ duplicateInstances: s(o),
2024
+ versionSkew: r(o) ?? null,
2025
2025
  serverOnly: (await q(o)).status,
2026
2026
  accessDecisions: await J(o),
2027
2027
  webhookVerification: await Y(o),
@@ -2036,9 +2036,9 @@ var le = /* @__PURE__ */ new Set([
2036
2036
  Bt(o), zt(o), Qt(o), ne(o), await Kt(o), await hn(o), await mn(o), await tn(o), await sn(o), await on(o), await Mn(o), await cn(o), await Tn(o), await bn(o), await vn(o), console.log("");
2037
2037
  for (let e of Ve(Be(o))) console.log(e);
2038
2038
  await xn(o), await Sn(o), await Cn(o);
2039
- let l = await fn(o), u = await An(o, e.includes("--write-authz-allowlist")), d = await ln(o), f = await dn(o), p = await wn(o), m = i(s(o));
2039
+ let l = await fn(o), u = await An(o, e.includes("--write-authz-allowlist")), d = await ln(o), f = await dn(o), p = await wn(o), m = a(r(o));
2040
2040
  m !== void 0 && (console.log(""), console.log(m));
2041
- let _ = r(a(o));
2041
+ let _ = i(s(o));
2042
2042
  return _ !== void 0 && console.log(`\n${_}`), l || u || d || p || f ? Math.max(c, 1) : c;
2043
2043
  };
2044
2044
  //#endregion
@@ -0,0 +1,2 @@
1
+ import { b as e, y as t } from "./doctorCommand-DCiFVMtZ.js";
2
+ export { t as runDoctorCommand, e as runServePreflight };
@@ -1,4 +1,4 @@
1
- import { c as e, i as t } from "./dev-C6LGF4iY.js";
1
+ import { c as e, i as t } from "./dev-CmuvUKRq.js";
2
2
  import { n, t as r } from "./cliArgs-D4p8n7EE.js";
3
3
  import { r as i } from "./appPort-B_HpJ_ck.js";
4
4
  import { resolve as a } from "node:path";
@@ -1,4 +1,4 @@
1
- import { c as e, i as t } from "./dev-C6LGF4iY.js";
1
+ import { c as e, i as t } from "./dev-CmuvUKRq.js";
2
2
  import { Effect as n } from "effect";
3
3
  import { embedMany as r } from "@voltro/ai";
4
4
  //#region src/embeddingsBackfill.ts
@@ -1,5 +1,5 @@
1
- import { c as e } from "./dev-C6LGF4iY.js";
2
- import { Gt as t, Ht as n, Kt as r, Ut as i } from "./webDev-oczpugbx.js";
1
+ import { c as e } from "./dev-CmuvUKRq.js";
2
+ import { Gt as t, Ht as n, Vt as r, Wt as i } from "./webDev-DSI9SOhs.js";
3
3
  import { join as a } from "node:path";
4
4
  import { promises as o } from "node:fs";
5
5
  import { createLogger as s } from "@voltro/logger";
@@ -21,27 +21,27 @@ var u = s({ scope: "voltro:env" }), d = "# Environment for this app", f = async
21
21
  }, h = async (e) => {
22
22
  let t = await f(e);
23
23
  if (!t) return u.error("no app.config.ts found in the current directory"), 1;
24
- let r = n(t.name, t.input), i = `${p("KEY", 32)} ${p("OWNER", 16)} ${p("ACCESS", 8)} ${p("REQ", 4)} SET`;
25
- u.info(`env manifest — ${r.app} (${r.summary.total} vars, ${r.summary.set} set)`), m(i);
26
- for (let e of r.entries) {
24
+ let n = r(t.name, t.input), i = `${p("KEY", 32)} ${p("OWNER", 16)} ${p("ACCESS", 8)} ${p("REQ", 4)} SET`;
25
+ u.info(`env manifest — ${n.app} (${n.summary.total} vars, ${n.summary.set} set)`), m(i);
26
+ for (let e of n.entries) {
27
27
  let t = e.isSet ? "✓" : e.satisfied ? "·" : "✗";
28
28
  m(`${p(e.key, 32)} ${p(e.owner, 16)} ${p(e.access, 8)} ${p(e.required ? "yes" : "", 4)} ${t}`);
29
29
  }
30
- return r.summary.missingRequired > 0 ? (u.error(`${r.summary.missingRequired} required var(s) are unset`), 1) : 0;
30
+ return n.summary.missingRequired > 0 ? (u.error(`${n.summary.missingRequired} required var(s) are unset`), 1) : 0;
31
31
  }, g = async (e, t) => {
32
- let n = await f(e);
33
- if (!n) return u.error("no app.config.ts found in the current directory"), 1;
34
- let r = i(n.input, ["Environment for this app — generated from app.config.ts `env` + plugin declarations.", "Regenerate with `voltro env sync`. Copy to `.env` and fill in the blanks."]), s = a(e, ".env.example"), c = await o.readFile(s, "utf8").catch(() => null);
32
+ let r = await f(e);
33
+ if (!r) return u.error("no app.config.ts found in the current directory"), 1;
34
+ let i = n(r.input, ["Environment for this app — generated from app.config.ts `env` + plugin declarations.", "Regenerate with `voltro env sync`. Copy to `.env` and fill in the blanks."]), s = a(e, ".env.example"), c = await o.readFile(s, "utf8").catch(() => null);
35
35
  if (c !== null && !c.startsWith(d) && !t) {
36
36
  let t = a(e, ".env.example.generated");
37
- return await o.writeFile(t, r, "utf8"), u.warn(".env.example exists and is not framework-generated — wrote .env.example.generated instead", { hint: "merge it by hand, or pass --force to overwrite .env.example" }), 0;
37
+ return await o.writeFile(t, i, "utf8"), u.warn(".env.example exists and is not framework-generated — wrote .env.example.generated instead", { hint: "merge it by hand, or pass --force to overwrite .env.example" }), 0;
38
38
  }
39
- return await o.writeFile(s, r, "utf8"), u.info("wrote .env.example", { app: n.name }), 0;
39
+ return await o.writeFile(s, i, "utf8"), u.info("wrote .env.example", { app: r.name }), 0;
40
40
  }, _ = async (n) => {
41
- let i = await e(n).catch(() => null);
42
- if (!i) return u.error("no app.config.ts found in the current directory"), 1;
43
- let a = l(i.env) ? i.env : void 0;
44
- return a ? (i.type === "web" ? (await t(n, a), u.info("wrote src/voltro-env.d.ts (publicEnv augmentation)", { app: i.name ?? "app" })) : (await r(n, a), u.info("wrote env.generated.d.ts (serverEnv augmentation)", { app: i.name ?? "app" })), 0) : (u.warn("no `defineEnv` declared in app.config.ts — nothing to generate", { hint: "add `env: defineEnv({ ... })` to app.config.ts (see @voltro/env)" }), 0);
41
+ let r = await e(n).catch(() => null);
42
+ if (!r) return u.error("no app.config.ts found in the current directory"), 1;
43
+ let a = l(r.env) ? r.env : void 0;
44
+ return a ? (r.type === "web" ? (await i(n, a), u.info("wrote src/voltro-env.d.ts (publicEnv augmentation)", { app: r.name ?? "app" })) : (await t(n, a), u.info("wrote env.generated.d.ts (serverEnv augmentation)", { app: r.name ?? "app" })), 0) : (u.warn("no `defineEnv` declared in app.config.ts — nothing to generate", { hint: "add `env: defineEnv({ ... })` to app.config.ts (see @voltro/env)" }), 0);
45
45
  }, v = () => {
46
46
  let e = c();
47
47
  return u.info(`${e.length} framework env vars for turbo.json globalPassThroughEnv:`), m(JSON.stringify([...e].sort(), null, 2)), u.info("merge these into the workspace turbo.json `globalPassThroughEnv` array (+ your own app vars)."), 0;
@@ -1,6 +1,6 @@
1
1
  import { n as e } from "./cliOutput-D1tSBoRM.js";
2
- import { i as t } from "./checkCommand-C5elt0tW.js";
3
- import { i as n, n as r } from "./codemodRunner-BjtB2lq6.js";
2
+ import { i as t } from "./checkCommand-Dg1G7Gwd.js";
3
+ import { i as n, n as r } from "./codemodRunner-Cd4xkC6u.js";
4
4
  import { basename as i, join as a, resolve as o } from "node:path";
5
5
  import { branchNamespaceName as s, planBranchProvision as c } from "@voltro/database";
6
6
  import { readFile as l } from "node:fs/promises";
@@ -0,0 +1,36 @@
1
+ //#region src/fileConventions.ts
2
+ var e = /\.(query|mutation|action|stream)\.ts$/, t = /\.(query|mutation|action|stream)\.server\.ts$/, n = /\.event\.ts$/, r = /\.ws\.ts$/, i = /\.workflow\.tsx$/, a = /\.workflow\.server\.tsx$/, o = /\.workflow\.tsx?$/, s = /\.trigger\.tsx?$/, c = /\.cron\.tsx?$/, l = /\.webhook\.tsx?$/, u = /\.outbox\.tsx?$/, d = /\.consumer\.tsx?$/, f = /\.subscribe\.tsx?$/, p = /\.reaction\.tsx?$/, m = /\.aggregate\.tsx?$/, h = /\.expectation\.ts$/, g = /\.budget\.ts$/, _ = /\.experiment\.ts$/, v = /\.deepLink\.ts$/, y = /\.startup\.tsx?$/, b = /\.seed\.ts$/, x = /\.relations\.ts$/, S = /\.entity\.ts$|\.schema\.ts$|^schema\.ts$/, C = (e) => o.test(e) && !i.test(e) && !a.test(e), w = /(?:^|\/)page\.tsx$/, T = /\.island\.tsx?$/, E = /\.component\.tsx$/, D = /\.component\.ui\.tsx$/, O = /\.hook\.tsx?$/, k = /\.internal\.tsx?$/, A = /\.types\.tsx?$/, j = /\.fixture\.tsx?$/, M = /\.tracking\.tsx?$/, N = /\.store\.tsx?$/, P = /\.client\.tsx?$/, F = /\.(test|spec)\.tsx?$/, I = [
3
+ e,
4
+ t,
5
+ o,
6
+ a,
7
+ s,
8
+ c,
9
+ l,
10
+ u,
11
+ d,
12
+ f,
13
+ p,
14
+ m,
15
+ y,
16
+ h,
17
+ g,
18
+ _,
19
+ b,
20
+ x,
21
+ S,
22
+ /\.route\.tsx?$/,
23
+ n,
24
+ r,
25
+ v,
26
+ N,
27
+ P,
28
+ /\.(agent|tool|email|connection|serverless|server|config|generated)\.tsx?$/
29
+ ], L = (e) => I.some((t) => t.test(e)), R = /* @__PURE__ */ new Set([
30
+ "layout.tsx",
31
+ "error.tsx",
32
+ "loading.tsx",
33
+ "not-found.tsx"
34
+ ]);
35
+ //#endregion
36
+ export { A, b as C, F as D, f as E, r as F, L as I, C as L, i as M, o as N, M as O, a as P, S, N as T, R as _, d as a, p as b, n as c, j as d, O as f, w as g, u as h, D as i, l as j, s as k, h as l, T as m, g as n, c as o, k as p, E as r, v as s, m as t, _ as u, e as v, y as w, x, t as y };
@@ -1,4 +1,4 @@
1
- import { D as e, E as t, d as n, f as r, g as i, h as a, i as o, k as s, r as c, u as l, w as u } from "./fileConventions-DASGEmj-.js";
1
+ import { A as e, D as t, O as n, T as r, _ as i, d as a, f as o, g as s, i as c, p as l, r as u } from "./fileConventions-l-RIXbx8.js";
2
2
  import { n as d, t as f } from "./tsconfigPaths-BWXBWgcl.js";
3
3
  import { dirname as p, join as m, relative as h, resolve as g, sep as _ } from "node:path";
4
4
  import { existsSync as v, readFileSync as y, readdirSync as b, statSync as x } from "node:fs";
@@ -38,42 +38,42 @@ var T = ".voltro-vendored", E = (e, t) => {
38
38
  }, D = (e, t) => t.some((t) => e === t.dir || e.startsWith(`${t.dir}${_}`)), O = (e, t) => t.map((t) => `${h(e, t.dir) || "."} (${t.source})`), k = [
39
39
  {
40
40
  id: "component.ui",
41
- re: o,
41
+ re: c,
42
42
  needsTest: !0
43
43
  },
44
44
  {
45
45
  id: "component",
46
- re: c,
46
+ re: u,
47
47
  needsTest: !0
48
48
  },
49
49
  {
50
50
  id: "hook",
51
- re: n,
51
+ re: o,
52
52
  needsTest: !0
53
53
  },
54
54
  {
55
55
  id: "tracking",
56
- re: e,
56
+ re: n,
57
57
  needsTest: !0
58
58
  },
59
59
  {
60
60
  id: "store",
61
- re: u,
61
+ re: r,
62
62
  needsTest: !0
63
63
  },
64
64
  {
65
65
  id: "internal",
66
- re: r,
66
+ re: l,
67
67
  needsTest: !0
68
68
  },
69
69
  {
70
70
  id: "fixture",
71
- re: l,
71
+ re: a,
72
72
  needsTest: !1
73
73
  },
74
74
  {
75
75
  id: "types",
76
- re: s,
76
+ re: e,
77
77
  needsTest: !1
78
78
  }
79
79
  ], A = (e) => k.find((t) => t.re.test(e))?.id ?? null, j = (e) => t.test(e), M = /* @__PURE__ */ new Set([
@@ -244,10 +244,10 @@ var T = ".voltro-vendored", E = (e, t) => {
244
244
  scanned: 0,
245
245
  vendored: n
246
246
  };
247
- let o = new C({
247
+ let a = new C({
248
248
  useInMemoryFileSystem: !0,
249
249
  skipAddingFilesFromTsConfig: !0
250
- }), s = [], c = (t) => h(e, t), l = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map();
250
+ }), o = [], c = (t) => h(e, t), l = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map();
251
251
  for (let t of r) {
252
252
  let n;
253
253
  try {
@@ -257,7 +257,7 @@ var T = ".voltro-vendored", E = (e, t) => {
257
257
  }
258
258
  let r;
259
259
  try {
260
- r = o.createSourceFile(t.endsWith("x") ? "/scan.tsx" : "/scan.ts", n, { overwrite: !0 });
260
+ r = a.createSourceFile(t.endsWith("x") ? "/scan.tsx" : "/scan.ts", n, { overwrite: !0 });
261
261
  } catch {
262
262
  continue;
263
263
  }
@@ -293,18 +293,18 @@ var T = ".voltro-vendored", E = (e, t) => {
293
293
  for (let e of r) {
294
294
  let t = A(e), n = l.get(e), r = u.get(e);
295
295
  if (n === void 0 || r === void 0) continue;
296
- let o = j(e);
297
- t !== null && !o && (g += 1);
296
+ let a = j(e);
297
+ t !== null && !a && (g += 1);
298
298
  let f = p.get(e) ?? [];
299
- if ((t === "component" || t === "component.ui") && !o) {
299
+ if ((t === "component" || t === "component.ui") && !a) {
300
300
  let t = J(n.components);
301
- (n.components.length === 0 || !t) && s.push({
301
+ (n.components.length === 0 || !t) && o.push({
302
302
  rule: "component/one-per-file",
303
303
  file: c(e),
304
304
  severity: "error",
305
305
  detail: n.components.length === 0 ? "declares a component file but exports no component" : `exports ${n.components.length} unrelated components: ${n.components.join(", ")}`,
306
306
  fix: "a component file exports ONE component — or one NAMESPACED family sharing its name (`Card`, `CardHeader`, `CardTitle`), which is one component with parts. Types alongside are fine. Unrelated components belong in their own files"
307
- }), n.hooks.length > 0 && s.push({
307
+ }), n.hooks.length > 0 && o.push({
308
308
  rule: "component/no-hook-export",
309
309
  file: c(e),
310
310
  severity: "error",
@@ -312,19 +312,19 @@ var T = ".voltro-vendored", E = (e, t) => {
312
312
  fix: "move the hook into its own *.hook.ts — a file exporting both is two files wearing one name, and neither can be reused without dragging the other"
313
313
  });
314
314
  }
315
- if (t === "hook" && !o && (n.hooks.length !== 1 && s.push({
315
+ if (t === "hook" && !a && (n.hooks.length !== 1 && o.push({
316
316
  rule: "hook/one-per-file",
317
317
  file: c(e),
318
318
  severity: "error",
319
319
  detail: n.hooks.length === 0 ? "declares a hook file but exports no use* hook" : `exports ${n.hooks.length} hooks: ${n.hooks.join(", ")}`,
320
320
  fix: "a hook file exports exactly ONE use* hook (types alongside are fine)"
321
- }), n.components.length > 0 && s.push({
321
+ }), n.components.length > 0 && o.push({
322
322
  rule: "hook/no-component-export",
323
323
  file: c(e),
324
324
  severity: "error",
325
325
  detail: `also exports component(s): ${n.components.join(", ")}`,
326
326
  fix: "move the component into its own *.component.tsx"
327
- })), t === "types" && n.hasRuntimeExport && s.push({
327
+ })), t === "types" && n.hasRuntimeExport && o.push({
328
328
  rule: "types/runtime-export",
329
329
  file: c(e),
330
330
  severity: "error",
@@ -336,7 +336,7 @@ var T = ".voltro-vendored", E = (e, t) => {
336
336
  fix: "a *.types.ts has NO runtime export. That is what makes importing it provably free AND makes it impossible for it to sit in a runtime import cycle — the guarantee is the point, so move the value to a sibling module"
337
337
  }), t === "internal") {
338
338
  let t = f.filter((t) => !Y(t, e));
339
- t.length > 0 && s.push({
339
+ t.length > 0 && o.push({
340
340
  rule: "internal/foreign-import",
341
341
  file: c(e),
342
342
  severity: "error",
@@ -346,7 +346,7 @@ var T = ".voltro-vendored", E = (e, t) => {
346
346
  }
347
347
  if (t === "fixture") {
348
348
  let t = f.filter((e) => !j(e) && A(e) !== "fixture");
349
- t.length > 0 && s.push({
349
+ t.length > 0 && o.push({
350
350
  rule: "fixture/production-import",
351
351
  file: c(e),
352
352
  severity: "error",
@@ -354,26 +354,26 @@ var T = ".voltro-vendored", E = (e, t) => {
354
354
  fix: "test material must not be reachable from a production path — it ships in the bundle, and it is written to be convenient rather than correct"
355
355
  });
356
356
  }
357
- if (t === "component.ui" && !o) {
357
+ if (t === "component.ui" && !a) {
358
358
  let t = [...r.namedBindings].filter((e) => M.has(e)).sort();
359
- t.length > 0 && s.push({
359
+ t.length > 0 && o.push({
360
360
  rule: "ui/no-write",
361
361
  file: c(e),
362
362
  severity: "error",
363
363
  detail: `imports write hook(s): ${t.join(", ")}`,
364
364
  fix: "a *.component.ui.tsx renders; it does not write. Lift the mutation into the *.component.tsx that owns it and pass a handler down. Reading (useT / useCan / usePermissions) stays allowed — threading those through props is prop-drilling, not reusability"
365
365
  });
366
- let n = m(e), o = n.filter((e) => {
366
+ let n = m(e), a = n.filter((e) => {
367
367
  let t = A(e);
368
- return t === "component" || t === "component.ui" || a.test(e) || i.has(e.slice(e.lastIndexOf(_) + 1));
368
+ return t === "component" || t === "component.ui" || s.test(e) || i.has(e.slice(e.lastIndexOf(_) + 1));
369
369
  });
370
- n.length === 0 ? s.push({
370
+ n.length === 0 ? o.push({
371
371
  rule: "ui/orphaned",
372
372
  file: c(e),
373
373
  severity: "warn",
374
374
  detail: "nothing imports it",
375
375
  fix: "render it from a *.component.tsx or a page, or delete it — an unrendered presentational component is carried, reviewed and refactored forever without reaching a user"
376
- }) : o.length === 0 && s.push({
376
+ }) : a.length === 0 && o.push({
377
377
  rule: "ui/unlinked",
378
378
  file: c(e),
379
379
  severity: "warn",
@@ -381,9 +381,9 @@ var T = ".voltro-vendored", E = (e, t) => {
381
381
  fix: "a presentational component should be reached from a *.component.tsx, another *.component.ui.tsx, or a page"
382
382
  });
383
383
  }
384
- if (t === "store" && !o) {
384
+ if (t === "store" && !a) {
385
385
  let t = d.get(e)?.get("defineStore") ?? 0;
386
- t !== 1 && s.push({
386
+ t !== 1 && o.push({
387
387
  rule: "store/one-per-file",
388
388
  file: c(e),
389
389
  severity: "error",
@@ -391,7 +391,7 @@ var T = ".voltro-vendored", E = (e, t) => {
391
391
  fix: "a store file defines exactly ONE store — the SSR seed pass and devtools address stores by name, so two in a file makes both harder to find and neither easier to reason about"
392
392
  });
393
393
  let n = [...d.get(e)?.keys() ?? []].filter((e) => P.has(e)).sort();
394
- n.length > 0 && s.push({
394
+ n.length > 0 && o.push({
395
395
  rule: "store/mirrors-server-state",
396
396
  file: c(e),
397
397
  severity: "error",
@@ -399,9 +399,9 @@ var T = ".voltro-vendored", E = (e, t) => {
399
399
  fix: "a store holds CLIENT state. A subscription is already live server state; copying it into a store gives you a second copy that does not live, and the page then shows the stale one — a bug that reads as \"reactivity is broken\". Read the subscription where you render it"
400
400
  });
401
401
  }
402
- if (t !== "tracking" && !o) {
402
+ if (t !== "tracking" && !a) {
403
403
  let t = [...d.get(e)?.keys() ?? []].filter((e) => N.has(e)).sort();
404
- t.length > 0 && s.push({
404
+ t.length > 0 && o.push({
405
405
  rule: "tracking/outside-tracking-file",
406
406
  file: c(e),
407
407
  severity: "error",
@@ -409,7 +409,7 @@ var T = ".voltro-vendored", E = (e, t) => {
409
409
  fix: "move the defineTracking(...) spec into a *.tracking.ts and import it here. The event catalogue — names, property bags, the decisions about what personal data goes out — belongs in one place you can list; calling useTracking with a spec from there is fine"
410
410
  });
411
411
  }
412
- if (k.find((e) => e.id === t)?.needsTest === !0 && !o) {
412
+ if (k.find((e) => e.id === t)?.needsTest === !0 && !a) {
413
413
  let t = e.replace(/\.tsx?$/, ""), n = e.endsWith("x") ? "tsx" : "ts";
414
414
  ["test", "spec"].flatMap((e) => [`${t}.${e}.ts`, `${t}.${e}.tsx`]).some((e) => {
415
415
  try {
@@ -417,7 +417,7 @@ var T = ".voltro-vendored", E = (e, t) => {
417
417
  } catch {
418
418
  return !1;
419
419
  }
420
- }) || s.push({
420
+ }) || o.push({
421
421
  rule: "convention/missing-test",
422
422
  file: c(e),
423
423
  severity: "warn",
@@ -426,8 +426,8 @@ var T = ".voltro-vendored", E = (e, t) => {
426
426
  });
427
427
  }
428
428
  }
429
- return s.sort((e, t) => e.file === t.file ? e.rule.localeCompare(t.rule) : e.file.localeCompare(t.file)), {
430
- findings: s,
429
+ return o.sort((e, t) => e.file === t.file ? e.rule.localeCompare(t.rule) : e.file.localeCompare(t.file)), {
430
+ findings: o,
431
431
  declared: g,
432
432
  scanned: r.length,
433
433
  vendored: n
@@ -1,6 +1,6 @@
1
1
  import { n as e } from "./appModuleLoader-C9r9mxZt.js";
2
2
  import { n as t } from "./declaredSchemaGates-BlcwObhb.js";
3
- import { A as n, M as r, O as i, S as a, o } from "./fileConventions-DASGEmj-.js";
3
+ import { C as n, N as r, j as i, k as a, o } from "./fileConventions-l-RIXbx8.js";
4
4
  import { basename as s, join as c } from "node:path";
5
5
  import { existsSync as l, promises as u } from "node:fs";
6
6
  import { pathToFileURL as d } from "node:url";
@@ -407,20 +407,20 @@ var we = [
407
407
  connections: r.map((e) => `${e.definition.id} (${e.definition.kind})`),
408
408
  files: r.map((e) => He(s(e.file)))
409
409
  }), r;
410
- }, J = (e) => o.test(e) || a.test(e), Y = async (e) => {
411
- let t = !1, a = !1, o = !1, s = !1, l = !1, d = async (e) => {
410
+ }, J = (e) => o.test(e) || n.test(e), Y = async (e) => {
411
+ let t = !1, n = !1, o = !1, s = !1, l = !1, d = async (e) => {
412
412
  let f = await u.readdir(e, { withFileTypes: !0 }).catch(() => []);
413
413
  for (let u of f) if (u.isDirectory()) {
414
414
  if (u.name === "node_modules" || u.name === "dist" || u.name === ".framework" || u.name.startsWith(".")) continue;
415
415
  await d(c(e, u.name));
416
416
  } else {
417
417
  let e = u.name;
418
- (r.test(e) || i.test(e)) && (t = !0), J(e) && (a = !0), n.test(e) && (o = !0), W.test(e) && (s = !0), q.test(e) && (l = !0);
418
+ (r.test(e) || a.test(e)) && (t = !0), J(e) && (n = !0), i.test(e) && (o = !0), W.test(e) && (s = !0), q.test(e) && (l = !0);
419
419
  }
420
420
  };
421
421
  return await d(e), {
422
422
  workflows: t,
423
- schedules: a,
423
+ schedules: n,
424
424
  webhooks: o,
425
425
  agents: s,
426
426
  connections: l
@@ -0,0 +1,2 @@
1
+ import { c as e, n as t } from "./frameworkTableAssembly-D7LJuALW.js";
2
+ export { t as assembleFrameworkTables, e as loadAppSchemaInputs };
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { a as e, i as t, n, o as r, r as i, t as a } from "./commands-DyxAmhP0.js";
2
- import { r as o } from "./templates-BR-fb4SP.js";
1
+ import { a as e, i as t, n, o as r, r as i, t as a } from "./commands-6Kzi92Np.js";
2
+ import { r as o } from "./templates-BTWZkJJT.js";
3
3
  //#region src/index.ts
4
4
  var s = "framework";
5
5
  //#endregion
@@ -1,5 +1,5 @@
1
1
  import { n as e, r as t, t as n } from "./cliOutput-D1tSBoRM.js";
2
- import { o as r } from "./updateCommand-C_8I8Rzo.js";
2
+ import { o as r } from "./updateCommand-CRJlAOaM.js";
3
3
  import { join as i, resolve as a } from "node:path";
4
4
  import { readFileSync as o, readdirSync as s, statSync as c } from "node:fs";
5
5
  //#region src/infoCommand.ts
@@ -1,7 +1,7 @@
1
1
  import { i as e, n as t, r as n } from "./cliArgs-D4p8n7EE.js";
2
2
  import { t as r } from "./cliRuntime-Dh7UDinH.js";
3
- import { n as i } from "./renderProfile-CskIgAfn.js";
4
- import { a, i as o } from "./projectScaffold-B4dmTlwT.js";
3
+ import { n as i } from "./renderProfile-DvrhVJHa.js";
4
+ import { a, i as o } from "./projectScaffold-CSN0OzBV.js";
5
5
  import { t as s } from "./discover-C9XKJDco.js";
6
6
  import { basename as c, join as l, relative as u, resolve as d } from "node:path";
7
7
  import { createLogger as f } from "@voltro/logger";
@@ -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-DKx3ba3S.js";
4
+ import { g as i, n as a, s as o } from "./frameworkTableAssembly-D7LJuALW.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-B1EXBC6f.js");
82
+ let { runDbCommand: t } = await import("./dbCommand-CSFWs9ev.js");
83
83
  return t(["apply", ...e]);
84
84
  };
85
85
  //#endregion