@voltro/cli 0.53.0 → 0.55.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 (191) hide show
  1. package/CHANGELOG.md +335 -0
  2. package/dist/{agentsMd-0l980yhL.js → agentsMd-BaLC10Na.js} +110 -82
  3. package/dist/agentsMd-DCY1RSs8.js +2 -0
  4. package/dist/{apiBuild-CaPfoWku.js → apiBuild-CMvLJM_K.js} +2 -2
  5. package/dist/apiBuild-Cl0IDx8c.js +2 -0
  6. package/dist/bin.js +1 -1
  7. package/dist/{build-D-OnvNMf.js → build-S0QOzqPT.js} +115 -115
  8. package/dist/{checkCommand-D2ZduVlh.js → checkCommand-DNkY5kwF.js} +1 -1
  9. package/dist/{checkCommand-C5elt0tW.js → checkCommand-fbj9GDjN.js} +6 -6
  10. package/dist/{cloudCmd-QUXh-b5w.js → cloudCmd-DzKcSYuy.js} +1 -1
  11. package/dist/codegen-CN6vMM4J.js +2 -0
  12. package/dist/{codegen-FEk8AZHb.js → codegen-SIepQtUl.js} +76 -65
  13. package/dist/codegenCommand-3TDJezom.js +42 -0
  14. package/dist/{codemodRunner-BjtB2lq6.js → codemodRunner-C2zxZUIw.js} +64 -9
  15. package/dist/{commands-DyxAmhP0.js → commands-BBYJ7Q3B.js} +96 -73
  16. package/dist/{dashboardCommand-BdKTyT13.js → dashboardCommand-D2kmyCLL.js} +3 -3
  17. package/dist/{dataCommand-Bab9X7s8.js → dataCommand-BEPPQiTl.js} +267 -195
  18. package/dist/dbCommand-BTyBGhIA.js +2 -0
  19. package/dist/{dbCommand-06O2finM.js → dbCommand-DZTmOFT4.js} +3 -3
  20. package/dist/{dev-C6LGF4iY.js → dev-Ca_A_S9v.js} +2439 -2397
  21. package/dist/{dev-GjJWAYo2.js → dev-DfVZaoys.js} +1 -1
  22. package/dist/{doctorCommand-etMkflRc.js → doctorCommand-CGZJK_4o.js} +21 -21
  23. package/dist/doctorCommand-djmqEcDC.js +2 -0
  24. package/dist/{dormancyCommand-UwZ1AZzB.js → dormancyCommand-DY2rYpTa.js} +1 -1
  25. package/dist/{embeddingsCommand-C70zWHwo.js → embeddingsCommand-BoCqZsgp.js} +1 -1
  26. package/dist/{envCommand-dSyKvRkM.js → envCommand-Bxy2fOjc.js} +15 -15
  27. package/dist/{evolveCommand-CG0_ebO5.js → evolveCommand-BsbZ-XDg.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-Df2Ymp2f.js +2 -0
  31. package/dist/{frameworkTableAssembly-DKx3ba3S.js → frameworkTableAssembly-Do-cf6RJ.js} +96 -102
  32. package/dist/index.js +2 -2
  33. package/dist/{infoCommand-_53iOc_j.js → infoCommand-EmM3jPKD.js} +1 -1
  34. package/dist/{inspect-Bd8-9wsi.js → inspect-DCqILJ1G.js} +4 -0
  35. package/dist/inspect-DGJwpOAb.js +2 -0
  36. package/dist/interruptedReplace-CwnkBb2X.js +41 -0
  37. package/dist/interruptedReplace-qzmFI020.js +2 -0
  38. package/dist/manifestBuild-CJ2zvPvT.js +2 -0
  39. package/dist/{manifestBuild-Cqgsx2bM.js → manifestBuild-DjX5MoXy.js} +1 -1
  40. package/dist/{metaCommands-Cn2oboG4.js → metaCommands-x7RCi2AF.js} +2 -2
  41. package/dist/{migrate-Cko9rswM.js → migrate-CGFZS-1a.js} +2 -2
  42. package/dist/mobileCommand-D9O6iq3D.js +428 -0
  43. package/dist/mobileCommand-DAum7tsG.js +2 -0
  44. package/dist/{pageConvention-C938S8oC.js → pageConvention-CMpfDN6r.js} +1 -1
  45. package/dist/{privacyCommand-DWTQMC6R.js → privacyCommand-BCa2OoZG.js} +2 -2
  46. package/dist/{probeCommand-DkGGLknv.js → probeCommand-Bs3iVBSL.js} +1 -1
  47. package/dist/{projectScaffold-EzlErR4E.js → projectScaffold-CJfP-xbT.js} +1 -1
  48. package/dist/{projectScaffold-B4dmTlwT.js → projectScaffold-CSN0OzBV.js} +2 -2
  49. package/dist/renderModeScan-43yQ2opo.js +147 -0
  50. package/dist/{renderProfile-CskIgAfn.js → renderProfile-DvrhVJHa.js} +2 -2
  51. package/dist/{runtimeTrace-c0APJz7E.js → runtimeTrace-C1BTpHGQ.js} +1 -1
  52. package/dist/{sdkgen-BiQCgIEr.js → sdkgen-CXMwLg9n.js} +1 -1
  53. package/dist/{serveCommand-CueKQgzl.js → serveCommand-C7IrCD58.js} +899 -897
  54. package/dist/serveCommand-Cjt5S9hD.js +2 -0
  55. package/dist/serveEntry.js +1 -1
  56. package/dist/start-DH7cat4-.js +3 -0
  57. package/dist/{start-ekPan8BT.js → start-EOV7s1NZ.js} +544 -527
  58. package/dist/startEntry.js +1 -1
  59. package/dist/{staticCommand-xlSL-IWk.js → staticCommand-ey0kYmOT.js} +1 -1
  60. package/dist/{subcommandNames-DpYs3DXr.js → subcommandNames-CDzfEtKV.js} +3 -3
  61. package/dist/{templates-BR-fb4SP.js → templates-BTWZkJJT.js} +41 -9
  62. package/dist/{test-BWPQcRoB.js → test-DO27-x2P.js} +1 -1
  63. package/dist/{updateCommand-C_8I8Rzo.js → updateCommand-C_jN1w18.js} +1 -1
  64. package/dist/updateCommand-nnFjDbl4.js +2 -0
  65. package/dist/{webDev-C7jWJ5dX.js → webDev-1XpVnYkW.js} +1 -1
  66. package/dist/{webDev-oczpugbx.js → webDev-B7vNj4Bq.js} +1231 -1186
  67. package/dist/{webhooksCommand-4SVPDjKg.js → webhooksCommand-B1LVcyO3.js} +1 -1
  68. package/dist/workspaceDeps-RKEkX92S.js +45 -0
  69. package/package.json +31 -19
  70. package/templates/AGENTS.core.md +2 -0
  71. package/templates/AGENTS.md +4 -2
  72. package/templates/agent-docs/_index.md +2 -2
  73. package/templates/agent-docs/_manifest.json +1 -1
  74. package/templates/agent-docs/ai.md +4 -4
  75. package/templates/agent-docs/authentication.md +115 -0
  76. package/templates/agent-docs/cli.md +98 -12
  77. package/templates/agent-docs/data.md +121 -21
  78. package/templates/agent-docs/database/advancedqueries.md +1 -1
  79. package/templates/agent-docs/database/migrations.md +1 -1
  80. package/templates/agent-docs/database/seedsdialects.md +64 -2
  81. package/templates/agent-docs/internationalization.md +2 -0
  82. package/templates/agent-docs/introduction.md +25 -0
  83. package/templates/agent-docs/local-first-mobile.md +139 -41
  84. package/templates/agent-docs/observability.md +4 -2
  85. package/templates/agent-docs/plugins/atlassian.md +2 -2
  86. package/templates/agent-docs/plugins/audit.md +2 -2
  87. package/templates/agent-docs/plugins/billing.md +1 -1
  88. package/templates/agent-docs/plugins/cdc-out.md +8 -3
  89. package/templates/agent-docs/plugins/comments.md +22 -0
  90. package/templates/agent-docs/plugins/presence.md +32 -3
  91. package/templates/agent-docs/plugins/prometheus.md +2 -0
  92. package/templates/agent-docs/plugins/queue.md +47 -4
  93. package/templates/agent-docs/plugins.md +52 -14
  94. package/templates/agent-docs/reference.md +25 -4
  95. package/templates/agent-docs/routing.md +81 -9
  96. package/templates/agent-docs/scheduling.md +1 -1
  97. package/templates/agent-docs/schema-driven-ui.md +137 -1
  98. package/templates/agent-docs/templates/appshells.md +36 -4
  99. package/templates/agent-docs/whats-new.md +75 -158
  100. package/templates/apps/api-ai/package.json +6 -6
  101. package/templates/apps/api-auth/package.json +8 -8
  102. package/templates/apps/api-backend/package.json +7 -7
  103. package/templates/apps/api-backend-deactivation/package.json +7 -7
  104. package/templates/apps/api-backend-mail/package.json +8 -8
  105. package/templates/apps/api-backend-mariadb/package.json +9 -9
  106. package/templates/apps/api-backend-sqlite/package.json +8 -8
  107. package/templates/apps/api-backend-storage/package.json +8 -8
  108. package/templates/apps/api-cms/package.json +9 -9
  109. package/templates/apps/api-collab/README.md +3 -3
  110. package/templates/apps/api-collab/app.config.ts +1 -1
  111. package/templates/apps/api-collab/database/schema.ts +12 -8
  112. package/templates/apps/api-collab/mutations/documents.create.mutation.server.ts +1 -1
  113. package/templates/apps/api-collab/mutations/documents.setBody.mutation.server.ts +1 -1
  114. package/templates/apps/api-collab/mutations/documents.setBody.mutation.ts +1 -1
  115. package/templates/apps/api-collab/package.json +8 -8
  116. package/templates/apps/api-collab/template.json +1 -1
  117. package/templates/apps/api-collab/tests/documents.setBody.test.ts +10 -2
  118. package/templates/apps/api-data-advanced/package.json +8 -8
  119. package/templates/apps/api-durable/package.json +8 -8
  120. package/templates/apps/api-feature-flags/package.json +9 -9
  121. package/templates/apps/api-governance/package.json +8 -8
  122. package/templates/apps/api-kv/package.json +8 -8
  123. package/templates/apps/api-moderation/package.json +8 -8
  124. package/templates/apps/api-observability/package.json +8 -8
  125. package/templates/apps/api-ratelimit/package.json +8 -8
  126. package/templates/apps/api-rbac/package.json +8 -8
  127. package/templates/apps/api-rest/package.json +7 -7
  128. package/templates/apps/api-row-history/package.json +8 -8
  129. package/templates/apps/api-saas/package.json +11 -10
  130. package/templates/apps/api-saas-starter/package.json +10 -10
  131. package/templates/apps/api-search/package.json +8 -8
  132. package/templates/apps/api-status/package.json +8 -8
  133. package/templates/apps/api-webhooks/package.json +9 -9
  134. package/templates/apps/changelog/package.json +7 -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/README.md +43 -24
  142. package/templates/apps/frontend-collab/app.config.ts +3 -3
  143. package/templates/apps/frontend-collab/package.json +14 -10
  144. package/templates/apps/frontend-collab/src/locales/de.ts +1 -2
  145. package/templates/apps/frontend-collab/src/locales/en.ts +1 -2
  146. package/templates/apps/frontend-collab/src/pages/page.test.tsx +72 -76
  147. package/templates/apps/frontend-collab/src/pages/page.tsx +45 -22
  148. package/templates/apps/frontend-collab/template.json +2 -2
  149. package/templates/apps/frontend-contact/package.json +7 -7
  150. package/templates/apps/frontend-dashboard/package.json +7 -7
  151. package/templates/apps/frontend-docs/package.json +8 -7
  152. package/templates/apps/frontend-i18n/package.json +6 -6
  153. package/templates/apps/frontend-landing/README.md +48 -0
  154. package/templates/apps/frontend-landing/app.config.ts +28 -0
  155. package/templates/apps/frontend-landing/package.json +7 -6
  156. package/templates/apps/frontend-landing/src/assets/hero.jpg +0 -0
  157. package/templates/apps/frontend-landing/src/fonts/Geist-Variable.woff2 +0 -0
  158. package/templates/apps/frontend-landing/src/fonts/LICENSE-Geist.txt +92 -0
  159. package/templates/apps/frontend-landing/src/globals.css +15 -0
  160. package/templates/apps/frontend-landing/src/globals.d.ts +17 -0
  161. package/templates/apps/frontend-landing/src/locales/de.ts +3 -2
  162. package/templates/apps/frontend-landing/src/locales/en.ts +5 -2
  163. package/templates/apps/frontend-landing/src/pages/page.test.tsx +79 -0
  164. package/templates/apps/frontend-landing/src/pages/page.tsx +26 -3
  165. package/templates/apps/frontend-landing/template.json +2 -2
  166. package/templates/apps/frontend-portal/package.json +8 -8
  167. package/templates/apps/frontend-saas/package.json +8 -8
  168. package/templates/apps/frontend-spa/package.json +7 -7
  169. package/templates/apps/frontend-ssr/package.json +7 -7
  170. package/templates/apps/frontend-ssr-api/package.json +8 -8
  171. package/templates/apps/frontend-static-blog/package.json +8 -7
  172. package/templates/apps/frontend-status/package.json +8 -8
  173. package/templates/apps/mobile-app/package.json +12 -11
  174. package/templates/apps/mobile-app/src/lib/deeplinks.ts +29 -17
  175. package/templates/apps/mobile-app/tests/deeplinks.test.ts +16 -0
  176. package/dist/agentsMd-SDDSkyl4.js +0 -2
  177. package/dist/apiBuild-DHtLXYx9.js +0 -2
  178. package/dist/codegen-BWpt3VgF.js +0 -2
  179. package/dist/codegenCommand-BOiWQ5hz.js +0 -137
  180. package/dist/dbCommand-B1EXBC6f.js +0 -2
  181. package/dist/doctorCommand-B0hX0tdz.js +0 -2
  182. package/dist/fileConventions-DASGEmj-.js +0 -35
  183. package/dist/frameworkTableAssembly-C_7Z-rMs.js +0 -2
  184. package/dist/inspect-CuoDInfZ.js +0 -2
  185. package/dist/interruptedReplace-C3O3M1MM.js +0 -28
  186. package/dist/interruptedReplace-CvmiAM9K.js +0 -2
  187. package/dist/manifestBuild-C4-J1-m_.js +0 -2
  188. package/dist/renderModeScan-CUbOeOAg.js +0 -122
  189. package/dist/serveCommand-DsnrVN3U.js +0 -2
  190. package/dist/start-BJzZLbt8.js +0 -3
  191. package/dist/updateCommand-Bqql_rsQ.js +0 -2
@@ -1,63 +1,91 @@
1
1
  import { t as e } from "./cliRuntime-Dh7UDinH.js";
2
2
  import { dirname as t, join as n, resolve as r } from "node:path";
3
- import { fileURLToPath as i, pathToFileURL as a } from "node:url";
4
- import { Effect as o } from "effect";
5
- import { FileSystem as s } from "@effect/platform";
6
- import { NodeContext as c } from "@effect/platform-node";
3
+ import { fileURLToPath as i } from "node:url";
4
+ import { Effect as a } from "effect";
5
+ import { FileSystem as o } from "@effect/platform";
6
+ import { NodeContext as s } from "@effect/platform-node";
7
7
  //#region src/agentsMd.ts
8
- var l = t(i(import.meta.url)), u = [r(l, "..", "templates"), r(l, "..", "..", "templates")], d = (e) => ({
8
+ var c = t(i(import.meta.url)), l = [r(c, "..", "templates"), r(c, "..", "..", "templates")], u = (e) => ({
9
9
  _tag: "TemplateNotFoundError",
10
10
  searched: e
11
- }), f = ["AGENTS.md", "CLAUDE.md"], p = "voltro:agents-md:keep", m = 2048, h = "<!-- VOLTRO:INDEX -->", g = (e) => /^#\s*What's new in\s+(\d+\.\d+\.\d+[^\s]*)\s*$/m.exec(e)?.[1] ?? null, _ = (e) => e.templatesVersion !== null && e.installedVersion !== null && e.templatesVersion !== e.installedVersion, v = (e, t) => e.exists(t).pipe(o.orElseSucceed(() => !1)), y = (e, t) => e.readFileString(t).pipe(o.orElseSucceed(() => "")), b = (e, t) => e.readFileString(t).pipe(o.map((e) => {
11
+ }), d = ["AGENTS.md", "CLAUDE.md"], f = "voltro:agents-md:keep", p = 2048, m = "<!-- VOLTRO:INDEX -->", h = (e) => /^#\s*What's new in\s+(\d+\.\d+\.\d+[^\s]*)\s*$/m.exec(e)?.[1] ?? null, g = (e) => e.templatesVersion !== null && e.installedVersion !== null && e.templatesVersion !== e.installedVersion, _ = (e, t) => e.exists(t).pipe(a.orElseSucceed(() => !1)), v = (e, t) => e.readFileString(t).pipe(a.orElseSucceed(() => "")), y = (e, t) => e.readFileString(t).pipe(a.map((e) => {
12
12
  try {
13
13
  return JSON.parse(e).workspaces !== void 0;
14
14
  } catch {
15
15
  return !1;
16
16
  }
17
- }), o.orElseSucceed(() => !1)), x = (e) => o.gen(function* () {
18
- let i = yield* s.FileSystem, a = r(e);
17
+ }), a.orElseSucceed(() => !1)), b = (e) => a.gen(function* () {
18
+ let i = yield* o.FileSystem, a = r(e);
19
19
  for (;;) {
20
- if ((yield* v(i, n(a, ".git"))) || (yield* v(i, n(a, "pnpm-workspace.yaml"))) || (yield* b(i, n(a, "package.json")))) return a;
20
+ if ((yield* _(i, n(a, ".git"))) || (yield* _(i, n(a, "pnpm-workspace.yaml"))) || (yield* y(i, n(a, "package.json")))) return a;
21
21
  let o = t(a);
22
22
  if (o === a) return r(e);
23
23
  a = o;
24
24
  }
25
- }), S = (e, t, r) => o.gen(function* () {
26
- let i = [], a = (e, t) => {
25
+ }), x = (e, t, r) => a.gen(function* () {
26
+ let i = [], o = (e, t) => {
27
27
  i.push({
28
28
  path: e,
29
29
  reason: t instanceof Error ? t.message : String(t)
30
30
  });
31
- }, s = yield* o.either(e.makeDirectory(r, { recursive: !0 }));
32
- if (s._tag === "Left") return a(r, s.left), i;
33
- let c = yield* o.either(e.readDirectory(t));
34
- if (c._tag === "Left") return a(t, c.left), i;
31
+ }, s = yield* a.either(e.makeDirectory(r, { recursive: !0 }));
32
+ if (s._tag === "Left") return o(r, s.left), i;
33
+ let c = yield* a.either(e.readDirectory(t));
34
+ if (c._tag === "Left") return o(t, c.left), i;
35
35
  for (let s of c.right) {
36
36
  let c = n(t, s), l = n(r, s);
37
- if ((yield* e.stat(c).pipe(o.orElseSucceed(() => null)))?.type === "Directory") i.push(...yield* S(e, c, l));
37
+ if ((yield* e.stat(c).pipe(a.orElseSucceed(() => null)))?.type === "Directory") i.push(...yield* x(e, c, l));
38
38
  else {
39
- let t = yield* o.either(e.copyFile(c, l));
40
- t._tag === "Left" && a(l, t.left);
39
+ let t = yield* a.either(e.copyFile(c, l));
40
+ t._tag === "Left" && o(l, t.left);
41
41
  }
42
42
  }
43
43
  return i;
44
- }), C = (e) => typeof e?.name == "string" && e.name.length > 0 ? e.name.split("#")[0] : null, w = (e, t) => o.gen(function* () {
44
+ }), S = (e) => typeof e?.name == "string" && e.name.length > 0 ? e.name.split("#")[0] : null, C = (e, t) => a.gen(function* () {
45
45
  let r = n(t, "app.config.ts");
46
- if (!(yield* v(e, r))) return null;
47
- let i = (yield* o.tryPromise(() => import(a(r).href)).pipe(o.orElseSucceed(() => null)))?.default;
48
- return !i || i.type && i.type !== "api" ? i?.type === "web" ? [] : null : (i.plugins ?? []).map(C).filter((e) => e !== null);
49
- }), T = (e, t) => o.gen(function* () {
50
- let r = [], i = [], a = n(t, "apps");
51
- if (!(yield* v(e, a))) return {
46
+ if (!(yield* _(e, r))) return null;
47
+ let i = yield* v(e, r).pipe(a.orElseSucceed(() => ""));
48
+ return i === "" ? null : /type:\s*['"]web['"]/.test(i) ? [] : T(i);
49
+ }), w = (e) => {
50
+ let t = /* @__PURE__ */ new Map();
51
+ for (let n of e.matchAll(/import\s*\{([^}]*)\}\s*from\s*['"]([^'"]+)['"]/g)) for (let e of n[1].split(",")) {
52
+ let r = e.lastIndexOf(" as "), i = (r === -1 ? e : e.slice(r + 4)).trim();
53
+ i !== "" && t.set(i, n[2]);
54
+ }
55
+ for (let n of e.matchAll(/import\s+(?:\*\s+as\s+)?([A-Za-z_$][\w$]*)\s+from\s*['"]([^'"]+)['"]/g)) t.set(n[1], n[2]);
56
+ return t;
57
+ }, T = (e) => {
58
+ let t = e.search(/\bplugins\s*:\s*\[/);
59
+ if (t === -1) return [];
60
+ let n = e.indexOf("[", t), r = 0, i = -1;
61
+ for (let t = n; t < e.length; t++) {
62
+ let n = e[t];
63
+ if (n === "[") r += 1;
64
+ else if (n === "]" && (--r, r === 0)) {
65
+ i = t;
66
+ break;
67
+ }
68
+ }
69
+ if (i === -1) return [];
70
+ let a = e.slice(n + 1, i), o = w(e), s = /* @__PURE__ */ new Set();
71
+ for (let e of a.matchAll(/name\s*:\s*['"]([^'"]+)['"]/g)) s.add(e[1].split("#")[0]);
72
+ for (let e of a.matchAll(/([A-Za-z_$][\w$]*)\s*\(/g)) {
73
+ let t = o.get(e[1]);
74
+ t !== void 0 && s.add(t.split("#")[0]);
75
+ }
76
+ return [...s];
77
+ }, E = (e, t) => a.gen(function* () {
78
+ let r = [], i = [], o = n(t, "apps");
79
+ if (!(yield* _(e, o))) return {
52
80
  apis: r,
53
81
  webs: i
54
82
  };
55
- for (let t of yield* e.readDirectory(a).pipe(o.orElseSucceed(() => []))) {
56
- let s = n(a, t);
57
- if ((yield* e.stat(s).pipe(o.orElseSucceed(() => null)))?.type === "Directory") for (let t of yield* e.readDirectory(s).pipe(o.orElseSucceed(() => []))) {
83
+ for (let t of yield* e.readDirectory(o).pipe(a.orElseSucceed(() => []))) {
84
+ let s = n(o, t);
85
+ if ((yield* e.stat(s).pipe(a.orElseSucceed(() => null)))?.type === "Directory") for (let t of yield* e.readDirectory(s).pipe(a.orElseSucceed(() => []))) {
58
86
  let a = n(s, t), o = n(a, "app.config.ts");
59
- if (!(yield* v(e, o))) continue;
60
- let c = yield* y(e, o);
87
+ if (!(yield* _(e, o))) continue;
88
+ let c = yield* v(e, o);
61
89
  /type:\s*['"]web['"]/.test(c) ? i.push(a) : r.push(a);
62
90
  }
63
91
  }
@@ -65,7 +93,7 @@ var l = t(i(import.meta.url)), u = [r(l, "..", "templates"), r(l, "..", "..", "t
65
93
  apis: r,
66
94
  webs: i
67
95
  };
68
- }), E = (e) => e.replace(/\|/g, "\\|").replace(/\n/g, " ").trim(), D = (e, t, n) => {
96
+ }), D = (e) => e.replace(/\|/g, "\\|").replace(/\n/g, " ").trim(), O = (e, t, n) => {
69
97
  let r = [
70
98
  "<!-- voltro agent-docs index — regenerated at seed time -->",
71
99
  "## Deep reference (read on demand)",
@@ -77,17 +105,17 @@ var l = t(i(import.meta.url)), u = [r(l, "..", "templates"), r(l, "..", "..", "t
77
105
  "",
78
106
  "| Topic | Open | Summary |",
79
107
  "|---|---|---|",
80
- ...e.modules.map((e) => `| ${e.title} | \`${n}${e.path}\` | ${E(e.description)} |`),
108
+ ...e.modules.map((e) => `| ${e.title} | \`${n}${e.path}\` | ${D(e.description)} |`),
81
109
  ""
82
- ], i = new Map(e.plugins.map((e) => [e.pkg, e])), a = (e, t) => e.module === void 0 ? `\`node_modules/${t}/README.md\`` : `\`${n}${e.module}\` (or \`node_modules/${t}/README.md\`)`, o = t === null ? e.plugins.map((e) => `| ${e.slug} | ${a(e, e.pkg)} | ${E(e.description)} |`) : t.map((e) => {
110
+ ], i = new Map(e.plugins.map((e) => [e.pkg, e])), a = (e, t) => e.module === void 0 ? `\`node_modules/${t}/README.md\`` : `\`${n}${e.module}\` (or \`node_modules/${t}/README.md\`)`, o = t === null ? e.plugins.map((e) => `| ${e.slug} | ${a(e, e.pkg)} | ${D(e.description)} |`) : t.map((e) => {
83
111
  let t = i.get(e);
84
- return t ? `| ${t.slug} | ${a(t, e)} | ${E(t.description)} |` : `| ${e.replace(/^@[^/]+\//, "")} | \`node_modules/${e}/README.md\` | (see plugin README) |`;
112
+ return t ? `| ${t.slug} | ${a(t, e)} | ${D(t.description)} |` : `| ${e.replace(/^@[^/]+\//, "")} | \`node_modules/${e}/README.md\` | (see plugin README) |`;
85
113
  });
86
114
  return r.push(`### Plugins${t === null ? "" : " (installed)"}`, "", "| Plugin | Open | Summary |", "|---|---|---|"), r.push(o.length ? o.join("\n") : "| _(none installed)_ | | |", ""), r.join("\n");
87
- }, O = (e, t, n) => {
115
+ }, k = (e, t, n) => {
88
116
  let r = t.templates?.[e] ?? t.templates?.[e.replace(/^frontend-/, "")];
89
117
  return `\nScaffolded from the \`${e}\` template — see \`${r ? `${n}${r}` : `${n}agent-docs/templates/overview.md`}\`.\n`;
90
- }, k = {
118
+ }, A = {
91
119
  api: (e, t, n = "") => `# api — agent notes
92
120
 
93
121
  You are in a Voltro **api** app. Server primitives live here: \`queries/\`,
@@ -127,7 +155,7 @@ You are in a Voltro **web** app. File-based routing under \`src/pages/**\`.
127
155
  Deep reference (paths from the repo root): \`${e}agent-docs/routing.md\`,
128
156
  \`${e}agent-docs/schema-driven-ui.md\`, \`${e}agent-docs/internationalization.md\`.
129
157
  ${t}`
130
- }, A = [
158
+ }, j = [
131
159
  {
132
160
  name: "voltro-schema",
133
161
  description: "Define or change a Voltro database table/schema (columns, mixins, indexes, relations).",
@@ -158,7 +186,7 @@ ${t}`
158
186
  description: "Export/import + backup/restore Voltro data & assets, and copy prod→dev/stage SAFELY with fail-closed masking/anonymization (.sensitive()/.safe()) + referential subsetting. Use for data takeout, seeding lower envs, backups, or cross-dialect moves.",
159
187
  module: "cli.md"
160
188
  }
161
- ], j = (e, t) => `---
189
+ ], M = (e, t) => `---
162
190
  name: ${e.name}
163
191
  description: ${e.description}
164
192
  ---
@@ -169,10 +197,10 @@ Open the full reference and follow the patterns there:
169
197
 
170
198
  Also read the repo-root \`AGENTS.md\` for the always-true rules (browser/server
171
199
  boundary, naming, anti-patterns) before editing.
172
- `, M = (e, n, r, i) => o.gen(function* () {
173
- let a = yield* v(e, n);
174
- if (a) {
175
- if ((yield* y(e, n)).slice(0, m).includes("voltro:agents-md:keep")) return {
200
+ `, N = (e, n, r, i) => a.gen(function* () {
201
+ let o = yield* _(e, n);
202
+ if (o) {
203
+ if ((yield* v(e, n)).slice(0, p).includes("voltro:agents-md:keep")) return {
176
204
  path: n,
177
205
  action: "protected"
178
206
  };
@@ -181,28 +209,28 @@ boundary, naming, anti-patterns) before editing.
181
209
  action: "present"
182
210
  };
183
211
  }
184
- return yield* e.makeDirectory(t(n), { recursive: !0 }).pipe(o.orElseSucceed(() => void 0)), yield* e.writeFileString(n, r).pipe(o.orDie), {
212
+ return yield* e.makeDirectory(t(n), { recursive: !0 }).pipe(a.orElseSucceed(() => void 0)), yield* e.writeFileString(n, r).pipe(a.orDie), {
185
213
  path: n,
186
- action: a ? "overwritten" : "created"
214
+ action: o ? "overwritten" : "created"
187
215
  };
188
- }), N = (e, t = {}) => o.gen(function* () {
189
- let i = yield* s.FileSystem, a = yield* x(e), c = null;
190
- for (let e of u) if (yield* v(i, n(e, "AGENTS.core.md"))) {
216
+ }), P = (e, t = {}) => a.gen(function* () {
217
+ let i = yield* o.FileSystem, s = yield* b(e), c = null;
218
+ for (let e of l) if (yield* _(i, n(e, "AGENTS.core.md"))) {
191
219
  c = e;
192
220
  break;
193
221
  }
194
222
  if (c === null) {
195
- for (let e of u) if (yield* v(i, n(e, "AGENTS.md"))) {
196
- let r = yield* y(i, n(e, "AGENTS.md")), o = [];
197
- for (let e of f) o.push(yield* M(i, n(a, e), r, t.force ?? !1));
198
- return { files: o };
223
+ for (let e of l) if (yield* _(i, n(e, "AGENTS.md"))) {
224
+ let r = yield* v(i, n(e, "AGENTS.md")), a = [];
225
+ for (let e of d) a.push(yield* N(i, n(s, e), r, t.force ?? !1));
226
+ return { files: a };
199
227
  }
200
- return yield* o.fail(d(u.map((e) => n(e, "AGENTS.core.md"))));
228
+ return yield* a.fail(u(l.map((e) => n(e, "AGENTS.core.md"))));
201
229
  }
202
- let l = yield* y(i, n(c, "AGENTS.core.md")), p = yield* y(i, n(c, "agent-docs", "_manifest.json")), _ = p ? JSON.parse(p) : {
230
+ let f = yield* v(i, n(c, "AGENTS.core.md")), g = yield* v(i, n(c, "agent-docs", "_manifest.json")), y = g ? JSON.parse(g) : {
203
231
  modules: [],
204
232
  plugins: []
205
- }, b = (t.preferPointer ?? !1) || (yield* v(i, n(a, "node_modules/@voltro/cli/templates/agent-docs", "_manifest.json"))), E = b ? "node_modules/@voltro/cli/templates/" : "", N = t.force ?? !1, P = (e) => y(i, e).pipe(o.map((e) => {
233
+ }, w = (t.preferPointer ?? !1) || (yield* _(i, n(s, "node_modules/@voltro/cli/templates/agent-docs", "_manifest.json"))), T = w ? "node_modules/@voltro/cli/templates/" : "", D = t.force ?? !1, P = (e) => v(i, e).pipe(a.map((e) => {
206
234
  if (!e) return null;
207
235
  try {
208
236
  return JSON.parse(e).version ?? null;
@@ -211,64 +239,64 @@ boundary, naming, anti-patterns) before editing.
211
239
  }
212
240
  })), F = {
213
241
  templatesVersion: yield* P(n(c, "..", "package.json")),
214
- installedVersion: yield* P(n(a, "node_modules", "@voltro", "cli", "package.json")),
215
- whatsNewVersion: g(yield* y(i, n(c, "agent-docs", "whats-new.md"))),
216
- copiedIn: !b
217
- }, I = f.map((e) => n(a, e));
218
- if ((yield* o.forEach(I, (e) => y(i, e).pipe(o.map((e) => e.slice(0, m))))).every((e) => e.includes("voltro:agents-md:keep"))) return {
242
+ installedVersion: yield* P(n(s, "node_modules", "@voltro", "cli", "package.json")),
243
+ whatsNewVersion: h(yield* v(i, n(c, "agent-docs", "whats-new.md"))),
244
+ copiedIn: !w
245
+ }, I = d.map((e) => n(s, e));
246
+ if ((yield* a.forEach(I, (e) => v(i, e).pipe(a.map((e) => e.slice(0, p))))).every((e) => e.includes("voltro:agents-md:keep"))) return {
219
247
  files: I.map((e) => ({
220
248
  path: e,
221
249
  action: "protected"
222
250
  })),
223
251
  provenance: F
224
252
  };
225
- let { apis: L, webs: R } = yield* T(i, a), z = /* @__PURE__ */ new Map(), B = /* @__PURE__ */ new Set(), V = !1;
253
+ let { apis: L, webs: R } = yield* E(i, s), z = /* @__PURE__ */ new Map(), B = /* @__PURE__ */ new Set(), V = !1;
226
254
  for (let e of L) {
227
- let t = yield* w(i, e);
255
+ let t = yield* C(i, e);
228
256
  if (z.set(e, t), t !== null) {
229
257
  V = !0;
230
258
  for (let e of t) B.add(e);
231
259
  }
232
260
  }
233
- let H = t.plugins ? t.plugins.map(C).filter((e) => e !== null) : V ? [...B] : null, U = l.includes(h) ? l.replace(h, D(_, H, E)) : l, W = [];
234
- for (let e of I) W.push(yield* M(i, e, U, N));
235
- let G = b ? [] : yield* o.gen(function* () {
236
- let e = n(a, "agent-docs");
237
- return yield* i.remove(e, { recursive: !0 }).pipe(o.orElseSucceed(() => void 0)), yield* S(i, n(c, "agent-docs"), e);
261
+ let H = t.plugins ? t.plugins.map(S).filter((e) => e !== null) : V ? [...B] : null, U = f.includes(m) ? f.replace(m, O(y, H, T)) : f, W = [];
262
+ for (let e of I) W.push(yield* N(i, e, U, D));
263
+ let G = w ? [] : yield* a.gen(function* () {
264
+ let e = n(s, "agent-docs");
265
+ return yield* i.remove(e, { recursive: !0 }).pipe(a.orElseSucceed(() => void 0)), yield* x(i, n(c, "agent-docs"), e);
238
266
  }), K = new Map((t.appTemplates ?? []).map((e) => [r(e.dir), e.template])), q = (e) => {
239
267
  let t = K.get(r(e));
240
- return t ? O(t, _, E) : "";
241
- }, J = (e, t) => o.forEach(f, (r) => M(i, n(e, r), t, N));
242
- for (let e of L) W.push(...yield* J(e, k.api(E, z.get(e) ?? null, q(e)))), (yield* v(i, n(e, "database"))) && W.push(...yield* J(n(e, "database"), k.database(E)));
243
- for (let e of R) W.push(...yield* J(e, k.web(E, q(e))));
244
- for (let e of A) W.push(yield* M(i, n(a, ".claude", "skills", e.name, "SKILL.md"), j(e, E), N));
268
+ return t ? k(t, y, T) : "";
269
+ }, J = (e, t) => a.forEach(d, (r) => N(i, n(e, r), t, D));
270
+ for (let e of L) W.push(...yield* J(e, A.api(T, z.get(e) ?? null, q(e)))), (yield* _(i, n(e, "database"))) && W.push(...yield* J(n(e, "database"), A.database(T)));
271
+ for (let e of R) W.push(...yield* J(e, A.web(T, q(e))));
272
+ for (let e of j) W.push(yield* N(i, n(s, ".claude", "skills", e.name, "SKILL.md"), M(e, T), D));
245
273
  return {
246
274
  files: W,
247
275
  provenance: F,
248
276
  copyFailures: G
249
277
  };
250
- }), P = (e, t = {}) => o.runPromise(N(e, t).pipe(o.provide(c.layer))), F = async (t) => {
251
- let n = t.includes("--force"), r = t.find((e) => !e.startsWith("-")) ?? process.cwd(), i = o.gen(function* () {
252
- let e = yield* N(r, { force: n });
278
+ }), F = (e, t = {}) => a.runPromise(P(e, t).pipe(a.provide(s.layer))), I = async (t) => {
279
+ let n = t.includes("--force"), r = t.find((e) => !e.startsWith("-")) ?? process.cwd(), i = a.gen(function* () {
280
+ let e = yield* P(r, { force: n });
253
281
  for (let t of e.files) {
254
- let e = t.action === "created" ? "wrote" : t.action === "overwritten" ? "overwrote" : t.action === "protected" ? `protected (hand-maintained — has "${p}")` : "present (use --force to overwrite)";
255
- yield* o.logInfo(`${t.path.split("/").slice(-2).join("/")} ${e}`, { action: t.action });
282
+ let e = t.action === "created" ? "wrote" : t.action === "overwritten" ? "overwrote" : t.action === "protected" ? `protected (hand-maintained — has "${f}")` : "present (use --force to overwrite)";
283
+ yield* a.logInfo(`${t.path.split("/").slice(-2).join("/")} ${e}`, { action: t.action });
256
284
  }
257
285
  let t = e.provenance;
258
- t !== void 0 && (yield* o.logInfo(`seeded from @voltro/cli ${t.templatesVersion ?? "unknown"} (project has ${t.installedVersion ?? "no resolvable @voltro/cli"}; whats-new describes ${t.whatsNewVersion ?? "unknown"}; modules ${t.copiedIn ? "COPIED into ./agent-docs" : "pointed at node_modules"})`, {
286
+ t !== void 0 && (yield* a.logInfo(`seeded from @voltro/cli ${t.templatesVersion ?? "unknown"} (project has ${t.installedVersion ?? "no resolvable @voltro/cli"}; whats-new describes ${t.whatsNewVersion ?? "unknown"}; modules ${t.copiedIn ? "COPIED into ./agent-docs" : "pointed at node_modules"})`, {
259
287
  templates: t.templatesVersion,
260
288
  installed: t.installedVersion,
261
289
  whatsNew: t.whatsNewVersion
262
- }), _(t) && (yield* o.logWarning(`the \`voltro\` binary that ran is ${t.templatesVersion}, but this project installs ${t.installedVersion} — everything just written describes the OLDER version. Run it through the project's own cli (\`pnpm exec voltro agents-md --force\`) so the guide matches what the app boots.`)));
290
+ }), g(t) && (yield* a.logWarning(`the \`voltro\` binary that ran is ${t.templatesVersion}, but this project installs ${t.installedVersion} — everything just written describes the OLDER version. Run it through the project's own cli (\`pnpm exec voltro agents-md --force\`) so the guide matches what the app boots.`)));
263
291
  let i = e.copyFailures ?? [];
264
- return i.length > 0 ? (yield* o.logError(`agents-md: ${i.length} file(s) could NOT be written — the seed is INCOMPLETE. The commonest cause is ownership: a container wrote these as root and you are running as someone else. Fix the ownership (or re-run as that user) and run this again; nothing here was partially applied in a way that needs undoing.`, {
292
+ return i.length > 0 ? (yield* a.logError(`agents-md: ${i.length} file(s) could NOT be written — the seed is INCOMPLETE. The commonest cause is ownership: a container wrote these as root and you are running as someone else. Fix the ownership (or re-run as that user) and run this again; nothing here was partially applied in a way that needs undoing.`, {
265
293
  paths: i.slice(0, 10).map((e) => e.path),
266
294
  reason: i[0]?.reason
267
295
  }), 1) : 0;
268
- }).pipe(o.catchTag("TemplateNotFoundError", (e) => o.gen(function* () {
269
- return yield* o.logError("AGENTS.md template not found", { searched: e.searched }), 1;
296
+ }).pipe(a.catchTag("TemplateNotFoundError", (e) => a.gen(function* () {
297
+ return yield* a.logError("AGENTS.md template not found", { searched: e.searched }), 1;
270
298
  })));
271
299
  return e(i, { scope: "voltro:agents-md" });
272
300
  };
273
301
  //#endregion
274
- export { F as a, x as i, P as n, _ as o, N as r, g as s, p as t };
302
+ export { T as a, h as c, b as i, F as n, I as o, P as r, g as s, f as t };
@@ -0,0 +1,2 @@
1
+ import { o as e } from "./agentsMd-BaLC10Na.js";
2
+ export { e as runAgentsMd };
@@ -1,5 +1,5 @@
1
- import { p as e } from "./dev-C6LGF4iY.js";
2
- import { qt as t } from "./webDev-oczpugbx.js";
1
+ import { p as e } from "./dev-Ca_A_S9v.js";
2
+ import { Kt as t } from "./webDev-B7vNj4Bq.js";
3
3
  import { t as n } from "./dialectDriver-czCHYpeH.js";
4
4
  import { dirname as r, isAbsolute as i, join as a, relative as o, resolve as s } from "node:path";
5
5
  import { existsSync as c, promises as l } from "node:fs";
@@ -0,0 +1,2 @@
1
+ import { c as e, l as t } from "./apiBuild-CMvLJM_K.js";
2
+ export { e as runApiBuild, t as runServeBundleBuild };
package/dist/bin.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { r as e } from "./commands-DyxAmhP0.js";
2
+ import { r as e } from "./commands-BBYJ7Q3B.js";
3
3
  import { a as t } from "./nodeEnvironment-cGFAj1J8.js";
4
4
  import { t as n } from "./loadEnv-D9nEOClM.js";
5
5
  import { n as r } from "./cliError-BmdYnghb.js";