@voltro/cli 0.50.1 → 0.52.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 (170) hide show
  1. package/CHANGELOG.md +231 -0
  2. package/dist/{agentsMd-D6yD7IQv.js → agentsMd-0l980yhL.js} +4 -1
  3. package/dist/agentsMd-SDDSkyl4.js +2 -0
  4. package/dist/apiBuild-BYBpL7Pz.js +2 -0
  5. package/dist/{apiBuild-D3s7lx57.js → apiBuild-CSFI8QGq.js} +3 -3
  6. package/dist/appGraph-CFmFKHb2.js +2 -0
  7. package/dist/appGraph-yRuKjOba.js +111 -0
  8. package/dist/bin.js +1 -1
  9. package/dist/build-CPgcMQug.js +793 -0
  10. package/dist/checkCommand-2SbqzukH.js +2 -0
  11. package/dist/{checkCommand-DsKIjL6k.js → checkCommand-COmqc2cB.js} +107 -60
  12. package/dist/{cloudCmd-F4YJeqM3.js → cloudCmd-QUXh-b5w.js} +1 -1
  13. package/dist/codegen-CctkDO-1.js +2 -0
  14. package/dist/{codegen-CrMXs4hb.js → codegen-VF479Cnb.js} +1 -1
  15. package/dist/{codegenCommand-C0S27nbB.js → codegenCommand-DCdG2JN-.js} +12 -12
  16. package/dist/{codemodRunner-DwY8Rjbl.js → codemodRunner-r7J9lIa7.js} +771 -636
  17. package/dist/{commands-Brp4DI8u.js → commands-Cc_nV8WI.js} +37 -36
  18. package/dist/{dashboardCommand-bbLfc9FW.js → dashboardCommand-C-gKvwqh.js} +3 -3
  19. package/dist/{dataCommand-k9mXTXin.js → dataCommand-BgpBHnlB.js} +299 -253
  20. package/dist/dbCommand-DNb6yeOG.js +2 -0
  21. package/dist/{dbCommand-Bf7Cy0mn.js → dbCommand-sHedr-NJ.js} +3 -3
  22. package/dist/dev--A3nsxA3.js +3 -0
  23. package/dist/{dev-C0cbqysu.js → dev-CRHoCEiy.js} +2258 -2219
  24. package/dist/doctorCommand-CqoWA2p5.js +2 -0
  25. package/dist/{doctorCommand-DyViaaCP.js → doctorCommand-DtfJ3FA6.js} +314 -234
  26. package/dist/{dormancyCommand-DMZPA_HW.js → dormancyCommand-Drn7o0No.js} +1 -1
  27. package/dist/{embeddingsCommand-CMxRPkg6.js → embeddingsCommand-Z-jO1fWN.js} +1 -1
  28. package/dist/{envCommand-CDLr-yD4.js → envCommand-D4gCrrTZ.js} +15 -15
  29. package/dist/{evolveCommand-Ct4NesL3.js → evolveCommand-CMROeKeA.js} +2 -2
  30. package/dist/fileConventions-DOqD3lPS.js +34 -0
  31. package/dist/{fileTaxonomy-CJfgOllU.js → fileTaxonomy-DvDUV9wq.js} +1 -1
  32. package/dist/frameworkTableAssembly-C6ETawPR.js +2 -0
  33. package/dist/{frameworkTableAssembly-BwJVEKLr.js → frameworkTableAssembly-w-XnLa3q.js} +1 -1
  34. package/dist/{generateCommand-BDdOxhnv.js → generateCommand-DTNPGjxo.js} +1 -1
  35. package/dist/index.js +1 -1
  36. package/dist/{infoCommand-orsKJKUy.js → infoCommand-DXM868o_.js} +1 -1
  37. package/dist/inspectMetrics-CGF94puw.js +143 -0
  38. package/dist/{metaCommands-CfRLra0s.js → metaCommands-C6RFmF1r.js} +2 -2
  39. package/dist/{migrate-D3MK9BpK.js → migrate-D0F-eTlK.js} +2 -2
  40. package/dist/{pageConvention-cEiRxdab.js → pageConvention-CzUiSbtU.js} +1 -1
  41. package/dist/{privacyCommand-XejDMvmu.js → privacyCommand-DGdopOI6.js} +1 -1
  42. package/dist/{projectScaffold-mIX_DpSe.js → projectScaffold-B4dmTlwT.js} +1 -1
  43. package/dist/{projectScaffold-BIl97_E6.js → projectScaffold-EzlErR4E.js} +1 -1
  44. package/dist/{renderModeScan-D7J1B7Kw.js → renderModeScan-CcH2X1_D.js} +25 -10
  45. package/dist/{renderProfile-1OWWAAtx.js → renderProfile-Ck32Fzxr.js} +2 -2
  46. package/dist/{runtimeTrace-Bo8jWsNe.js → runtimeTrace-BPQyCmC5.js} +1 -1
  47. package/dist/{sdkgen-OZhiT2vz.js → sdkgen-Se88ifTd.js} +1 -1
  48. package/dist/serveCommand-DLc-BznW.js +2 -0
  49. package/dist/{serveCommand-YbD5VgfV.js → serveCommand-DkP3OT0W.js} +885 -868
  50. package/dist/serveEntry.js +1 -1
  51. package/dist/start-DfL3fOiN.js +3 -0
  52. package/dist/start-jw89Xbqy.js +1339 -0
  53. package/dist/startEntry.js +1 -1
  54. package/dist/{staticCommand-Dr2M6tpU.js → staticCommand-BwNEDlSU.js} +1 -1
  55. package/dist/{test-rXFq4S76.js → test-f3amja6a.js} +1 -1
  56. package/dist/updateCommand-5gFVfK5q.js +2 -0
  57. package/dist/{updateCommand-BgH6vTtq.js → updateCommand-BMk2e4ky.js} +1 -1
  58. package/dist/{webDev-BbdkzMbd.js → webDev-BgWL9gKV.js} +1233 -853
  59. package/dist/webDev-CZbTsDcH.js +2 -0
  60. package/dist/{webhooksCommand-DjE6u0r4.js → webhooksCommand-CoIO3jbj.js} +1 -1
  61. package/package.json +48 -17
  62. package/templates/AGENTS.core.md +26 -5
  63. package/templates/AGENTS.md +30 -9
  64. package/templates/agent-docs/_index.md +4 -4
  65. package/templates/agent-docs/_manifest.json +11 -11
  66. package/templates/agent-docs/cli.md +125 -14
  67. package/templates/agent-docs/data.md +210 -7
  68. package/templates/agent-docs/database/schema.md +1 -1
  69. package/templates/agent-docs/database/seedsdialects.md +1 -1
  70. package/templates/agent-docs/deployment.md +22 -3
  71. package/templates/agent-docs/internationalization.md +131 -13
  72. package/templates/agent-docs/introduction.md +46 -0
  73. package/templates/agent-docs/local-first-mobile.md +34 -7
  74. package/templates/agent-docs/plugins/ai-flows.md +1 -1
  75. package/templates/agent-docs/plugins/audit.md +5 -5
  76. package/templates/agent-docs/plugins/cdc-out.md +2 -2
  77. package/templates/agent-docs/plugins/{versioning.md → row-history.md} +22 -22
  78. package/templates/agent-docs/plugins/storage.md +2 -2
  79. package/templates/agent-docs/plugins.md +29 -7
  80. package/templates/agent-docs/reference.md +39 -2
  81. package/templates/agent-docs/routing.md +341 -47
  82. package/templates/agent-docs/schema-driven-ui.md +78 -2
  83. package/templates/agent-docs/security.md +125 -8
  84. package/templates/agent-docs/templates/apibackends.md +14 -14
  85. package/templates/agent-docs/templates/overview.md +1 -1
  86. package/templates/agent-docs/whats-new.md +100 -29
  87. package/templates/apps/api-ai/package.json +6 -7
  88. package/templates/apps/api-ai/tests/summarize.test.ts +1 -1
  89. package/templates/apps/api-auth/package.json +8 -8
  90. package/templates/apps/api-backend/package.json +7 -7
  91. package/templates/apps/api-backend-deactivation/package.json +7 -7
  92. package/templates/apps/api-backend-mail/package.json +8 -8
  93. package/templates/apps/api-backend-mariadb/package.json +9 -9
  94. package/templates/apps/api-backend-sqlite/package.json +8 -8
  95. package/templates/apps/api-backend-storage/package.json +8 -8
  96. package/templates/apps/api-cms/package.json +9 -10
  97. package/templates/apps/api-collab/package.json +8 -8
  98. package/templates/apps/api-data-advanced/package.json +8 -8
  99. package/templates/apps/api-durable/package.json +8 -8
  100. package/templates/apps/api-feature-flags/package.json +9 -9
  101. package/templates/apps/api-governance/package.json +8 -8
  102. package/templates/apps/api-kv/package.json +8 -8
  103. package/templates/apps/api-moderation/package.json +8 -8
  104. package/templates/apps/api-observability/package.json +8 -8
  105. package/templates/apps/api-ratelimit/package.json +8 -8
  106. package/templates/apps/api-rbac/package.json +8 -8
  107. package/templates/apps/api-rest/package.json +7 -7
  108. package/templates/apps/{api-versioning → api-row-history}/README.md +3 -3
  109. package/templates/apps/{api-versioning → api-row-history}/actions/documents.asOf.action.server.ts +1 -1
  110. package/templates/apps/{api-versioning → api-row-history}/actions/documents.history.action.server.ts +1 -1
  111. package/templates/apps/{api-versioning → api-row-history}/app.config.ts +3 -3
  112. package/templates/apps/{api-versioning → api-row-history}/database/schema.ts +1 -1
  113. package/templates/apps/{api-versioning → api-row-history}/mutations/documents.create.mutation.server.ts +1 -1
  114. package/templates/apps/{api-versioning → api-row-history}/mutations/documents.create.mutation.ts +1 -1
  115. package/templates/apps/{api-versioning → api-row-history}/mutations/documents.update.mutation.ts +1 -1
  116. package/templates/apps/{api-versioning → api-row-history}/package.json +8 -8
  117. package/templates/apps/api-row-history/template.json +6 -0
  118. package/templates/apps/{api-versioning → api-row-history}/tests/documents.create.test.ts +1 -1
  119. package/templates/apps/api-saas/app.config.ts +1 -0
  120. package/templates/apps/api-saas/package.json +10 -11
  121. package/templates/apps/api-saas-starter/package.json +10 -10
  122. package/templates/apps/api-search/package.json +8 -8
  123. package/templates/apps/api-status/package.json +8 -8
  124. package/templates/apps/api-webhooks/package.json +9 -9
  125. package/templates/apps/changelog/package.json +6 -6
  126. package/templates/apps/edge-functions/package.json +2 -2
  127. package/templates/apps/frontend-admin/package.json +8 -8
  128. package/templates/apps/frontend-app/package.json +9 -9
  129. package/templates/apps/frontend-auth/package.json +8 -8
  130. package/templates/apps/frontend-blank/package.json +7 -7
  131. package/templates/apps/frontend-cms/package.json +9 -9
  132. package/templates/apps/frontend-collab/package.json +10 -10
  133. package/templates/apps/frontend-collab/src/pages/page.test.tsx +10 -9
  134. package/templates/apps/frontend-collab/src/pages/page.tsx +42 -65
  135. package/templates/apps/frontend-contact/package.json +7 -7
  136. package/templates/apps/frontend-dashboard/package.json +7 -7
  137. package/templates/apps/frontend-docs/package.json +6 -7
  138. package/templates/apps/frontend-i18n/package.json +6 -6
  139. package/templates/apps/frontend-landing/package.json +6 -7
  140. package/templates/apps/frontend-portal/package.json +8 -8
  141. package/templates/apps/frontend-saas/package.json +8 -8
  142. package/templates/apps/frontend-spa/package.json +7 -7
  143. package/templates/apps/frontend-ssr/package.json +7 -7
  144. package/templates/apps/frontend-ssr-api/package.json +8 -8
  145. package/templates/apps/frontend-static-blog/package.json +6 -6
  146. package/templates/apps/frontend-status/package.json +8 -8
  147. package/templates/apps/mobile-app/package.json +4 -4
  148. package/dist/agentsMd-Bu_XQgVf.js +0 -2
  149. package/dist/apiBuild-BZ-plaQN.js +0 -2
  150. package/dist/appGraph-CM9wvUmD.js +0 -2
  151. package/dist/appGraph-Cv2W_wO5.js +0 -111
  152. package/dist/build-CFmqF39c.js +0 -721
  153. package/dist/checkCommand-DomvYDi1.js +0 -2
  154. package/dist/codegen-DiMn2KkZ.js +0 -2
  155. package/dist/dbCommand-Bnl7MSGC.js +0 -2
  156. package/dist/dev-Dz9GqA6P.js +0 -3
  157. package/dist/doctorCommand-BlciWUJb.js +0 -2
  158. package/dist/fileConventions-Cof68_BL.js +0 -33
  159. package/dist/frameworkTableAssembly-CVDB2hCq.js +0 -2
  160. package/dist/inspectMetrics-CfdKLh6t.js +0 -72
  161. package/dist/serveCommand-Bbgg7Paq.js +0 -2
  162. package/dist/start-7b_bL8Uc.js +0 -3
  163. package/dist/start-B1nH9ahf.js +0 -1150
  164. package/dist/updateCommand-BweY17z-.js +0 -2
  165. package/dist/webDev-BcRFTsMA.js +0 -2
  166. package/templates/apps/api-versioning/template.json +0 -6
  167. /package/templates/apps/{api-versioning → api-row-history}/actions/documents.asOf.action.ts +0 -0
  168. /package/templates/apps/{api-versioning → api-row-history}/actions/documents.history.action.ts +0 -0
  169. /package/templates/apps/{api-versioning → api-row-history}/mutations/documents.update.mutation.server.ts +0 -0
  170. /package/templates/apps/{api-versioning → api-row-history}/tsconfig.json +0 -0
@@ -15,9 +15,9 @@
15
15
  "dependencies": {
16
16
  "@react-native-async-storage/async-storage": "1.23.1",
17
17
  "@react-native-community/netinfo": "11.4.1",
18
- "@voltro/client": "0.50.1",
19
- "@voltro/react-native": "0.50.1",
20
- "@{{projectName}}/api": "0.50.1",
18
+ "@voltro/client": "0.52.0",
19
+ "@voltro/react-native": "0.52.0",
20
+ "@{{projectName}}/api": "0.52.0",
21
21
  "expo": "^52.0.0",
22
22
  "expo-constants": "~17.0.0",
23
23
  "expo-linking": "~7.0.0",
@@ -32,7 +32,7 @@
32
32
  "@types/node": "^22.0.0",
33
33
  "@types/react": "^19.0.0",
34
34
  "@vitest/coverage-v8": "^4.1.10",
35
- "@voltro/cli": "0.50.1",
35
+ "@voltro/cli": "0.52.0",
36
36
  "typescript": "^6.0.3",
37
37
  "vitest": "^4.1.10"
38
38
  }
@@ -1,2 +0,0 @@
1
- import { a as e } from "./agentsMd-D6yD7IQv.js";
2
- export { e as runAgentsMd };
@@ -1,2 +0,0 @@
1
- import { c as e, l as t } from "./apiBuild-D3s7lx57.js";
2
- export { e as runApiBuild, t as runServeBundleBuild };
@@ -1,2 +0,0 @@
1
- import { n as e, t } from "./appGraph-Cv2W_wO5.js";
2
- export { t as buildAppGraph, e as checkAppGraph };
@@ -1,111 +0,0 @@
1
- import { isWireReachable as e } from "@voltro/protocol";
2
- //#region src/appGraph.ts
3
- var t = (e) => e.source === void 0 ? [] : typeof e.source == "string" ? [e.source] : e.source, n = (e) => ({
4
- tables: new Set(e.tables),
5
- procedures: new Map(e.procedures.map((e) => [e.tag, e])),
6
- scopes: new Set(e.scopes ?? []),
7
- input: e
8
- }), r = (n) => {
9
- let r = [], i = /* @__PURE__ */ new Set();
10
- for (let a of n.input.procedures) {
11
- for (let e of t(a)) i.add(e), n.tables.has(e) || r.push({
12
- rule: "reference/dangling-source",
13
- node: `${a.kind}(${a.tag})`,
14
- ...a.file === void 0 ? {} : { file: a.file },
15
- breaks: [`reads table '${e}' which does not exist`],
16
- fix: `declare a '${e}.entity.ts' table or fix the query's source`,
17
- severity: "error"
18
- });
19
- for (let e of a.targets ?? []) i.add(e.table), n.tables.has(e.table) || r.push({
20
- rule: "reference/dangling-target",
21
- node: `${a.kind}(${a.tag})`,
22
- ...a.file === void 0 ? {} : { file: a.file },
23
- breaks: [`targets table '${e.table}' (op '${e.op}') which does not exist`],
24
- fix: `declare a '${e.table}.entity.ts' table or fix the mutation's target`,
25
- severity: "error"
26
- });
27
- for (let e of a.requiresScopes ?? []) n.scopes.size > 0 && !n.scopes.has(e) && r.push({
28
- rule: "rbac/unknown-scope",
29
- node: `${a.kind}(${a.tag})`,
30
- ...a.file === void 0 ? {} : { file: a.file },
31
- breaks: [`requires scope '${e}' which is not declared`],
32
- fix: `declare the scope '${e}' or fix the requireScope(...) call`,
33
- severity: "error"
34
- });
35
- a.kind === "mutation" && a.hasGuards === !1 && a.openAccess === void 0 && e(a) && r.push({
36
- rule: "rbac/unguarded-mutation",
37
- node: `${a.kind}(${a.tag})`,
38
- ...a.file === void 0 ? {} : { file: a.file },
39
- breaks: [`'${a.tag}' changes state but declares no guard — any caller who can reach the rpc surface can invoke it`],
40
- fix: "add a guard (e.g. `.guard(requireScope('…'))`), or confirm it is intentionally public",
41
- severity: "warn"
42
- });
43
- }
44
- for (let e of n.input.routes ?? []) for (let t of e.binds) n.procedures.has(t) || r.push({
45
- rule: "binding/unknown-tag",
46
- node: `route(${e.pattern})`,
47
- ...e.file === void 0 ? {} : { file: e.file },
48
- breaks: [`binds rpc tag '${t}' which does not exist`],
49
- fix: `bind an existing tag, or restore '${t}' (it may have been renamed/removed)`,
50
- severity: "error"
51
- });
52
- for (let e of n.input.procedures) for (let t of e.targets ?? []) i.add(t.table);
53
- let a = new Set(n.input.frameworkOwnedTables ?? []), o = n.input.procedures.filter((e) => e.kind === "action" && t(e).length === 0 && (e.targets ?? []).length === 0).length;
54
- for (let e of n.tables) a.has(e) || i.has(e) || r.push({
55
- rule: "orphan/unread-table",
56
- node: `table(${e})`,
57
- breaks: o > 0 ? [`no query reads and no mutation writes '${e}'`, `${o} action(s) declare neither source nor target, so one of them may still use it`] : [`no query reads and no mutation writes '${e}'`],
58
- fix: o > 0 ? "declare `source`/`target` on your actions so this can be answered, then re-run" : `add a query/mutation for '${e}', or remove the table if it's dead`,
59
- severity: "warn"
60
- });
61
- if (n.scopes.size > 0) {
62
- let e = /* @__PURE__ */ new Set();
63
- for (let t of n.input.procedures) for (let n of t.requiresScopes ?? []) e.add(n);
64
- for (let t of [...n.scopes].sort()) t === "admin:full" || e.has(t) || r.push({
65
- rule: "rbac/unenforced-scope",
66
- node: `scope(${t})`,
67
- breaks: [`'${t}' is granted by a role but NO query/mutation/action/stream guards on it`, "a scope nobody checks grants nothing and withholds nothing — the role map reads stricter than the app is"],
68
- fix: `add \`.guard(requireScope('${t}'))\` to the handlers it is meant to protect — or, if a plugin route, a REST route, or a UI-only affordance enforces it, say so where the role is declared`,
69
- severity: "warn"
70
- });
71
- }
72
- return r;
73
- }, i = (e, n) => {
74
- let r = [];
75
- if (n.kind === "removeTable") for (let i of e.input.procedures) {
76
- let e = t(i).includes(n.name), a = (i.targets ?? []).some((e) => e.table === n.name);
77
- (e || a) && r.push({
78
- rule: "blast/table-removed",
79
- node: `${i.kind}(${i.tag})`,
80
- ...i.file === void 0 ? {} : { file: i.file },
81
- breaks: [`${e ? "reads" : "writes"} table '${n.name}' — would break if removed`],
82
- fix: `migrate or remove ${i.tag} before dropping '${n.name}'`,
83
- severity: "error"
84
- });
85
- }
86
- else if (n.kind === "removeProcedure") for (let t of e.input.routes ?? []) t.binds.includes(n.tag) && r.push({
87
- rule: "blast/procedure-removed",
88
- node: `route(${t.pattern})`,
89
- ...t.file === void 0 ? {} : { file: t.file },
90
- breaks: [`binds '${n.tag}' — would break if removed`],
91
- fix: `rebind ${t.pattern} to another tag before removing '${n.tag}'`,
92
- severity: "error"
93
- });
94
- else for (let t of e.input.procedures) (t.requiresScopes ?? []).includes(n.name) && r.push({
95
- rule: "blast/scope-removed",
96
- node: `${t.kind}(${t.tag})`,
97
- ...t.file === void 0 ? {} : { file: t.file },
98
- breaks: [`requires scope '${n.name}' — would become unguarded/dangling if removed`],
99
- fix: `remove the requireScope('${n.name}') call or keep the scope`,
100
- severity: "error"
101
- });
102
- return r;
103
- }, a = (e, t) => {
104
- let a = n(e), o = [...r(a), ...t === void 0 ? [] : i(a, t)];
105
- return {
106
- ok: !o.some((e) => e.severity === "error"),
107
- diagnostics: o
108
- };
109
- };
110
- //#endregion
111
- export { i, r as n, a as r, n as t };