@voltro/cli 0.54.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 (119) hide show
  1. package/CHANGELOG.md +142 -2
  2. package/dist/{apiBuild-DTWp0S_q.js → apiBuild-CMvLJM_K.js} +2 -2
  3. package/dist/apiBuild-Cl0IDx8c.js +2 -0
  4. package/dist/bin.js +1 -1
  5. package/dist/{build-D4ygSbnV.js → build-S0QOzqPT.js} +10 -10
  6. package/dist/{checkCommand-L7DTlpIF.js → checkCommand-DNkY5kwF.js} +1 -1
  7. package/dist/{checkCommand-Dg1G7Gwd.js → checkCommand-fbj9GDjN.js} +5 -5
  8. package/dist/codegen-CN6vMM4J.js +2 -0
  9. package/dist/{codegen-DSLM8Su9.js → codegen-SIepQtUl.js} +74 -63
  10. package/dist/{codegenCommand-CG_Vx4lc.js → codegenCommand-3TDJezom.js} +10 -9
  11. package/dist/{codemodRunner-Cd4xkC6u.js → codemodRunner-C2zxZUIw.js} +55 -0
  12. package/dist/{commands-6Kzi92Np.js → commands-BBYJ7Q3B.js} +24 -24
  13. package/dist/{dashboardCommand-Cq1PWvI1.js → dashboardCommand-D2kmyCLL.js} +3 -3
  14. package/dist/{dataCommand-DYzW8vkv.js → dataCommand-BEPPQiTl.js} +266 -194
  15. package/dist/dbCommand-BTyBGhIA.js +2 -0
  16. package/dist/{dbCommand-B4NWZtGL.js → dbCommand-DZTmOFT4.js} +1 -1
  17. package/dist/{dev-CmuvUKRq.js → dev-Ca_A_S9v.js} +2182 -2157
  18. package/dist/{dev-cKUiZZsB.js → dev-DfVZaoys.js} +1 -1
  19. package/dist/{doctorCommand-DCiFVMtZ.js → doctorCommand-CGZJK_4o.js} +15 -15
  20. package/dist/doctorCommand-djmqEcDC.js +2 -0
  21. package/dist/{dormancyCommand-w1TrmgYP.js → dormancyCommand-DY2rYpTa.js} +1 -1
  22. package/dist/{embeddingsCommand-CMgPyRTr.js → embeddingsCommand-BoCqZsgp.js} +1 -1
  23. package/dist/{envCommand-Cyynmcfa.js → envCommand-Bxy2fOjc.js} +2 -2
  24. package/dist/{evolveCommand-BwvQ8dVH.js → evolveCommand-BsbZ-XDg.js} +2 -2
  25. package/dist/frameworkTableAssembly-Df2Ymp2f.js +2 -0
  26. package/dist/{frameworkTableAssembly-D7LJuALW.js → frameworkTableAssembly-Do-cf6RJ.js} +92 -98
  27. package/dist/index.js +1 -1
  28. package/dist/{infoCommand-DlYlUPqs.js → infoCommand-EmM3jPKD.js} +1 -1
  29. package/dist/{inspect-Bd8-9wsi.js → inspect-DCqILJ1G.js} +4 -0
  30. package/dist/inspect-DGJwpOAb.js +2 -0
  31. package/dist/interruptedReplace-CwnkBb2X.js +41 -0
  32. package/dist/interruptedReplace-qzmFI020.js +2 -0
  33. package/dist/manifestBuild-CJ2zvPvT.js +2 -0
  34. package/dist/{manifestBuild-Cqgsx2bM.js → manifestBuild-DjX5MoXy.js} +1 -1
  35. package/dist/{migrate-BK_Bbx-_.js → migrate-CGFZS-1a.js} +2 -2
  36. package/dist/{probeCommand-_C0YU207.js → probeCommand-Bs3iVBSL.js} +1 -1
  37. package/dist/{runtimeTrace-CGWx1Q6l.js → runtimeTrace-C1BTpHGQ.js} +1 -1
  38. package/dist/{sdkgen-CDGHQUFj.js → sdkgen-CXMwLg9n.js} +1 -1
  39. package/dist/{serveCommand-Bje09q1v.js → serveCommand-C7IrCD58.js} +840 -838
  40. package/dist/serveCommand-Cjt5S9hD.js +2 -0
  41. package/dist/serveEntry.js +1 -1
  42. package/dist/{start-B0bnJgxI.js → start-DH7cat4-.js} +1 -1
  43. package/dist/{start-Clz-1BHB.js → start-EOV7s1NZ.js} +486 -476
  44. package/dist/startEntry.js +1 -1
  45. package/dist/{test-D_kW4KMj.js → test-DO27-x2P.js} +1 -1
  46. package/dist/{updateCommand-CRJlAOaM.js → updateCommand-C_jN1w18.js} +1 -1
  47. package/dist/updateCommand-nnFjDbl4.js +2 -0
  48. package/dist/{webDev-DlvZO30c.js → webDev-1XpVnYkW.js} +1 -1
  49. package/dist/{webDev-DSI9SOhs.js → webDev-B7vNj4Bq.js} +502 -494
  50. package/dist/{webhooksCommand-BvzXNHji.js → webhooksCommand-B1LVcyO3.js} +1 -1
  51. package/package.json +31 -19
  52. package/templates/AGENTS.md +1 -1
  53. package/templates/agent-docs/_index.md +1 -1
  54. package/templates/agent-docs/authentication.md +49 -6
  55. package/templates/agent-docs/cli.md +94 -11
  56. package/templates/agent-docs/data.md +64 -13
  57. package/templates/agent-docs/plugins.md +46 -8
  58. package/templates/agent-docs/reference.md +5 -3
  59. package/templates/agent-docs/routing.md +18 -0
  60. package/templates/agent-docs/schema-driven-ui.md +125 -0
  61. package/templates/agent-docs/whats-new.md +76 -133
  62. package/templates/apps/api-ai/package.json +6 -6
  63. package/templates/apps/api-auth/package.json +8 -8
  64. package/templates/apps/api-backend/package.json +7 -7
  65. package/templates/apps/api-backend-deactivation/package.json +7 -7
  66. package/templates/apps/api-backend-mail/package.json +8 -8
  67. package/templates/apps/api-backend-mariadb/package.json +9 -9
  68. package/templates/apps/api-backend-sqlite/package.json +8 -8
  69. package/templates/apps/api-backend-storage/package.json +8 -8
  70. package/templates/apps/api-cms/package.json +9 -9
  71. package/templates/apps/api-collab/package.json +8 -8
  72. package/templates/apps/api-data-advanced/package.json +8 -8
  73. package/templates/apps/api-durable/package.json +8 -8
  74. package/templates/apps/api-feature-flags/package.json +9 -9
  75. package/templates/apps/api-governance/package.json +8 -8
  76. package/templates/apps/api-kv/package.json +8 -8
  77. package/templates/apps/api-moderation/package.json +8 -8
  78. package/templates/apps/api-observability/package.json +8 -8
  79. package/templates/apps/api-ratelimit/package.json +8 -8
  80. package/templates/apps/api-rbac/package.json +8 -8
  81. package/templates/apps/api-rest/package.json +7 -7
  82. package/templates/apps/api-row-history/package.json +8 -8
  83. package/templates/apps/api-saas/package.json +11 -11
  84. package/templates/apps/api-saas-starter/package.json +10 -10
  85. package/templates/apps/api-search/package.json +8 -8
  86. package/templates/apps/api-status/package.json +8 -8
  87. package/templates/apps/api-webhooks/package.json +9 -9
  88. package/templates/apps/changelog/package.json +7 -7
  89. package/templates/apps/edge-functions/package.json +2 -2
  90. package/templates/apps/frontend-admin/package.json +8 -8
  91. package/templates/apps/frontend-app/package.json +9 -9
  92. package/templates/apps/frontend-auth/package.json +8 -8
  93. package/templates/apps/frontend-blank/package.json +7 -7
  94. package/templates/apps/frontend-cms/package.json +9 -9
  95. package/templates/apps/frontend-collab/package.json +10 -10
  96. package/templates/apps/frontend-contact/package.json +7 -7
  97. package/templates/apps/frontend-dashboard/package.json +7 -7
  98. package/templates/apps/frontend-docs/package.json +8 -8
  99. package/templates/apps/frontend-i18n/package.json +6 -6
  100. package/templates/apps/frontend-landing/package.json +7 -7
  101. package/templates/apps/frontend-portal/package.json +8 -8
  102. package/templates/apps/frontend-saas/package.json +8 -8
  103. package/templates/apps/frontend-spa/package.json +7 -7
  104. package/templates/apps/frontend-ssr/package.json +7 -7
  105. package/templates/apps/frontend-ssr-api/package.json +8 -8
  106. package/templates/apps/frontend-static-blog/package.json +8 -8
  107. package/templates/apps/frontend-status/package.json +8 -8
  108. package/templates/apps/mobile-app/package.json +4 -4
  109. package/dist/apiBuild-CeUN55uk.js +0 -2
  110. package/dist/codegen-DjgxEOnD.js +0 -2
  111. package/dist/dbCommand-CSFWs9ev.js +0 -2
  112. package/dist/doctorCommand-J3qu4E0Y.js +0 -2
  113. package/dist/frameworkTableAssembly-IPD1pUnZ.js +0 -2
  114. package/dist/inspect-CuoDInfZ.js +0 -2
  115. package/dist/interruptedReplace-C3O3M1MM.js +0 -28
  116. package/dist/interruptedReplace-CvmiAM9K.js +0 -2
  117. package/dist/manifestBuild-C4-J1-m_.js +0 -2
  118. package/dist/serveCommand-BiPe8BJm.js +0 -2
  119. package/dist/updateCommand-CIoVDKnj.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-CmuvUKRq.js";
1
+ import { c as e, d as t, f as n, i as r, p as i, u as a } from "./dev-Ca_A_S9v.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,8 +1,8 @@
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";
1
+ import { Ht as e, Ut as t, Wt as n } from "./dev-Ca_A_S9v.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-B7vNj4Bq.js";
3
+ import { x as d } from "./frameworkTableAssembly-Do-cf6RJ.js";
4
4
  import { n as f } from "./pageConvention-CMpfDN6r.js";
5
- import { r as p, u as m } from "./apiBuild-DTWp0S_q.js";
5
+ import { r as p, u as m } from "./apiBuild-CMvLJM_K.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
8
  import { n as ne, r as re } from "./fileTaxonomy-CbyMQYx_.js";
@@ -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-cKUiZZsB.js"), r = await t(e);
1430
+ let { walk: t, loadDiscovered: n } = await import("./dev-DfVZaoys.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-cKUiZZsB.js"), { discovered: a } = await U(r), o = t(await i(r)), s = {
1555
+ let { loadApiConfig: i } = await import("./dev-DfVZaoys.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-cKUiZZsB.js"), r = await t(e);
1639
+ let { loadApiConfig: t, buildStore: n } = await import("./dev-DfVZaoys.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-cKUiZZsB.js"), n = (await t(e))?.doctor?.scopeVocabulary;
1719
+ let { loadApiConfig: t } = await import("./dev-DfVZaoys.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-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])];
1736
+ let { offlineManifest: n, toInput: r } = await import("./checkCommand-DNkY5kwF.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-IPD1pUnZ.js");
1739
+ let { loadAppSchemaInputs: t } = await import("./frameworkTableAssembly-Df2Ymp2f.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-cKUiZZsB.js");
1790
+ let { loadApiConfig: t } = await import("./dev-DfVZaoys.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-DlvZO30c.js"), n = (await t(e, { preferSource: !0 }))?.fonts;
1824
+ let { loadConfig: t } = await import("./webDev-1XpVnYkW.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-DlvZO30c.js");
1839
+ let { walkPagesTree: e } = await import("./webDev-1XpVnYkW.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-cKUiZZsB.js");
1852
+ let { loadApiConfig: t } = await import("./dev-DfVZaoys.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-cKUiZZsB.js"), { decidedSchemaReport: n } = await import("./doctorDecidedSchema-BlbWgCD_.js"), r = await t(e);
1998
+ let { loadApiConfig: t } = await import("./dev-DfVZaoys.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 },
@@ -0,0 +1,2 @@
1
+ import { b as e, y as t } from "./doctorCommand-CGZJK_4o.js";
2
+ export { t as runDoctorCommand, e as runServePreflight };
@@ -1,4 +1,4 @@
1
- import { c as e, i as t } from "./dev-CmuvUKRq.js";
1
+ import { c as e, i as t } from "./dev-Ca_A_S9v.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-CmuvUKRq.js";
1
+ import { c as e, i as t } from "./dev-Ca_A_S9v.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-CmuvUKRq.js";
2
- import { Gt as t, Ht as n, Vt as r, Wt as i } from "./webDev-DSI9SOhs.js";
1
+ import { c as e } from "./dev-Ca_A_S9v.js";
2
+ import { Gt as t, Ht as n, Vt as r, Wt as i } from "./webDev-B7vNj4Bq.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";
@@ -1,6 +1,6 @@
1
1
  import { n as e } from "./cliOutput-D1tSBoRM.js";
2
- import { i as t } from "./checkCommand-Dg1G7Gwd.js";
3
- import { i as n, n as r } from "./codemodRunner-Cd4xkC6u.js";
2
+ import { i as t } from "./checkCommand-fbj9GDjN.js";
3
+ import { i as n, n as r } from "./codemodRunner-C2zxZUIw.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,2 @@
1
+ import { c as e, n as t } from "./frameworkTableAssembly-Do-cf6RJ.js";
2
+ export { t as assembleFrameworkTables, e as loadAppSchemaInputs };
@@ -4,173 +4,167 @@ 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";
7
- import { defineAction as f, defineMutation as ee, defineQuery as te } from "@voltro/protocol";
8
- import { _voltroApiKeysTable as ne, _voltroCdcOffsetsTable as re, _voltroDataTransfersTable as ie, _voltroIdempotencyTable as ae, _voltroKvTable as oe, _voltroMigrationPlansTable as se, _voltroMigrationsTable as ce, _voltroMssqlCdcOffsetsTable as le, _voltroReplaceInProgressTable as ue, _voltroSeedsTable as de } from "@voltro/database";
9
- import { Effect as p } from "effect";
10
- import { SqlClient as m } from "@effect/sql";
11
- import { _voltroApprovalsTable as fe, _voltroConnectionGrantsTable as pe, _voltroConnectionsTable as me, _voltroScheduleClaimsTable as he, _voltroScheduleRunsTable as h, _voltroTracesTable as g, _voltroUndoLogTable as _, _voltroWakeupsTable as v, _voltroWorkflowEventDeliveriesTable as y, _voltroWorkflowEventsTable as b, outboxAttemptsTable as x, outboxTable as S } from "@voltro/runtime";
12
- import { _voltroBudgetHoldsTable as C, _voltroWorkflowAdmissionsTable as w, _voltroWorkflowPausesTable as T, _voltroWorkflowPendingTable as E, _voltroWorkflowRunEventsTable as D, _voltroWorkflowRunStepsTable as O, _voltroWorkflowRunsTable as k, _voltroWorkflowStartContextsTable as A, _voltroWorkflowWatermarksTable as j } from "@voltro/workflow";
13
- import { agentMessagesTable as M, agentThreadsTable as N, aiBudgetTable as P, aiInferencesTable as F, aiUsageTable as I, isAgentDescriptor as L, isAgentExecutor as R, promptsTable as ge, resolveToolModuleHandlers as _e } from "@voltro/ai";
14
- import { _voltroWebhookDeliveriesTable as ve, _voltroWebhookTargetsTable as ye } from "@voltro/plugin-webhooks/mixin";
15
- import { _voltroStorageBlobsTable as be, _voltroStorageGrantsTable as xe, _voltroStorageRefsTable as Se, _voltroStorageUsageTable as Ce } from "@voltro/plugin-storage";
7
+ import { defineAction as f, defineMutation as ee, defineQuery as te, pluginAlias as p, pluginAlias as m, pluginSlug as ne } from "@voltro/protocol";
8
+ import { _voltroApiKeysTable as re, _voltroCdcOffsetsTable as ie, _voltroDataTransfersTable as ae, _voltroIdempotencyTable as oe, _voltroKvTable as se, _voltroMigrationPlansTable as ce, _voltroMigrationsTable as le, _voltroMssqlCdcOffsetsTable as ue, _voltroReplaceInProgressTable as de, _voltroSeedsTable as fe } from "@voltro/database";
9
+ import { Effect as h } from "effect";
10
+ import { SqlClient as g } from "@effect/sql";
11
+ import { _voltroApprovalsTable as pe, _voltroConnectionGrantsTable as me, _voltroConnectionsTable as _, _voltroScheduleClaimsTable as v, _voltroScheduleRunsTable as y, _voltroTracesTable as b, _voltroUndoLogTable as x, _voltroWakeupsTable as S, _voltroWorkflowEventDeliveriesTable as C, _voltroWorkflowEventsTable as w, outboxAttemptsTable as T, outboxTable as E } from "@voltro/runtime";
12
+ import { _voltroBudgetHoldsTable as D, _voltroWorkflowAdmissionsTable as O, _voltroWorkflowPausesTable as k, _voltroWorkflowPendingTable as A, _voltroWorkflowRunEventsTable as j, _voltroWorkflowRunStepsTable as M, _voltroWorkflowRunsTable as N, _voltroWorkflowStartContextsTable as P, _voltroWorkflowWatermarksTable as F } from "@voltro/workflow";
13
+ import { agentMessagesTable as I, agentThreadsTable as L, aiBudgetTable as R, aiInferencesTable as z, aiUsageTable as he, isAgentDescriptor as ge, isAgentExecutor as _e, promptsTable as ve, resolveToolModuleHandlers as ye } from "@voltro/ai";
14
+ import { _voltroWebhookDeliveriesTable as be, _voltroWebhookTargetsTable as xe } from "@voltro/plugin-webhooks/mixin";
15
+ import { _voltroStorageBlobsTable as Se, _voltroStorageGrantsTable as Ce, _voltroStorageRefsTable as we, _voltroStorageUsageTable as Te } from "@voltro/plugin-storage";
16
16
  //#region src/frameworkTables.ts
17
- var we = [
17
+ var Ee = [
18
18
  {
19
- table: ce,
19
+ table: le,
20
20
  when: "always"
21
21
  },
22
22
  {
23
- table: de,
23
+ table: fe,
24
24
  when: "always"
25
25
  },
26
26
  {
27
- table: se,
27
+ table: ce,
28
28
  when: "always"
29
29
  },
30
30
  {
31
- table: ue,
31
+ table: de,
32
32
  when: "always"
33
33
  },
34
34
  {
35
- table: ie,
35
+ table: ae,
36
36
  when: "always"
37
37
  },
38
38
  {
39
- table: k,
39
+ table: N,
40
40
  when: "workflows"
41
41
  },
42
42
  {
43
- table: O,
43
+ table: M,
44
44
  when: "workflows"
45
45
  },
46
46
  {
47
- table: D,
47
+ table: j,
48
48
  when: "workflows"
49
49
  },
50
50
  {
51
- table: A,
51
+ table: P,
52
52
  when: "workflows"
53
53
  },
54
54
  {
55
- table: E,
55
+ table: A,
56
56
  when: "workflows"
57
57
  },
58
58
  {
59
- table: w,
59
+ table: O,
60
60
  when: "workflows"
61
61
  },
62
62
  {
63
- table: T,
63
+ table: k,
64
64
  when: "workflows"
65
65
  },
66
66
  {
67
- table: j,
67
+ table: F,
68
68
  when: "workflows"
69
69
  },
70
70
  {
71
- table: b,
71
+ table: w,
72
72
  when: "workflows"
73
73
  },
74
74
  {
75
- table: y,
75
+ table: C,
76
76
  when: "workflows"
77
77
  },
78
78
  {
79
- table: h,
79
+ table: y,
80
80
  when: "schedules"
81
81
  },
82
82
  {
83
- table: he,
83
+ table: v,
84
84
  when: "schedules"
85
85
  },
86
86
  {
87
- table: ye,
87
+ table: xe,
88
88
  when: "webhooks"
89
89
  },
90
90
  {
91
- table: ve,
91
+ table: be,
92
92
  when: "webhooks"
93
93
  },
94
94
  {
95
- table: g,
95
+ table: b,
96
96
  when: "traces"
97
97
  },
98
98
  {
99
- table: _,
99
+ table: x,
100
100
  when: "undo"
101
101
  },
102
102
  {
103
- table: fe,
103
+ table: pe,
104
104
  when: "always"
105
105
  },
106
106
  {
107
- table: C,
107
+ table: D,
108
108
  when: "workflows"
109
109
  },
110
110
  {
111
- table: S,
111
+ table: E,
112
112
  when: "always"
113
113
  },
114
114
  {
115
- table: x,
115
+ table: T,
116
116
  when: "always"
117
117
  },
118
118
  {
119
- table: me,
119
+ table: _,
120
120
  when: "connections"
121
121
  },
122
122
  {
123
- table: pe,
123
+ table: me,
124
124
  when: "connections"
125
125
  },
126
126
  {
127
- table: v,
127
+ table: S,
128
128
  when: "always"
129
129
  },
130
130
  {
131
- table: Se,
131
+ table: we,
132
132
  when: "always"
133
133
  },
134
134
  {
135
- table: xe,
135
+ table: Ce,
136
136
  when: "always"
137
137
  },
138
138
  {
139
- table: be,
139
+ table: Se,
140
140
  when: "always"
141
141
  },
142
142
  {
143
- table: Ce,
143
+ table: Te,
144
144
  when: "always"
145
145
  },
146
146
  {
147
- table: ae,
147
+ table: oe,
148
148
  when: "always"
149
149
  },
150
150
  {
151
- table: ne,
151
+ table: re,
152
152
  when: "always"
153
153
  },
154
154
  {
155
- table: oe,
155
+ table: se,
156
156
  when: "always"
157
157
  }
158
- ], Te = (e) => {
159
- let t = we.filter((t) => t.when === "always" || t.when === "workflows" && e.workflows || t.when === "schedules" && e.schedules || t.when === "webhooks" && e.webhooks || t.when === "traces" && e.traces || t.when === "undo" && e.undo === !0 || t.when === "connections" && e.connections === !0).map((e) => e.table);
160
- return e.cdc === !0 && t.push(e.cdcDialect === "mssql" ? le : re), t;
161
- }, z = (e) => {
162
- let t = e.startsWith("@") ? e.replace(/^@[^/]+\//, "") : e;
163
- return (t.startsWith("plugin-") ? t.slice(7) : t).replace(/-([a-zA-Z0-9])/g, (e, t) => t.toUpperCase());
164
- }, Ee = (e) => {
165
- let t = e.startsWith("@") ? e.replace(/^@[^/]+\//, "") : e;
166
- return (t.startsWith("plugin-") ? t.slice(7) : t).replace(/#/g, "--").replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
167
- }, De = (e, t) => B(e, t.name), B = (e, t) => {
168
- let n = z(e.name);
158
+ ], De = (e) => {
159
+ let t = Ee.filter((t) => t.when === "always" || t.when === "workflows" && e.workflows || t.when === "schedules" && e.schedules || t.when === "webhooks" && e.webhooks || t.when === "traces" && e.traces || t.when === "undo" && e.undo === !0 || t.when === "connections" && e.connections === !0).map((e) => e.table);
160
+ return e.cdc === !0 && t.push(e.cdcDialect === "mssql" ? ue : ie), t;
161
+ }, Oe = (e, t) => B(e, t.name), B = (e, t) => {
162
+ let n = p(e.name);
169
163
  if (!t.includes(".")) return `${n}.${t}`;
170
164
  if (e.baseName === void 0) return t;
171
- let r = `${z(e.baseName)}.`;
165
+ let r = `${p(e.baseName)}.`;
172
166
  return t.startsWith(r) ? `${n}.${t.slice(r.length)}` : t;
173
- }, V = (e) => e.openAccess === void 0 ? e.guards !== void 0 && e.guards.length > 0 ? { guards: e.guards } : {} : { openAccess: e.openAccess }, Oe = (e, t, n) => {
167
+ }, V = (e) => e.openAccess === void 0 ? e.guards !== void 0 && e.guards.length > 0 ? { guards: e.guards } : {} : { openAccess: e.openAccess }, ke = (e, t, n) => {
174
168
  switch (e) {
175
169
  case "query": return te({
176
170
  name: t,
@@ -195,23 +189,23 @@ var we = [
195
189
  ...V(n)
196
190
  });
197
191
  }
198
- }, ke = (e) => (t, n) => p.suspend(() => {
192
+ }, Ae = (e) => (t, n) => h.suspend(() => {
199
193
  let r = { request: {
200
194
  subject: n.request.subject,
201
195
  traceId: n.request.traceId
202
196
  } };
203
197
  return e.execute(t, r);
204
- }), Ae = (e) => {
198
+ }), je = (e) => {
205
199
  let t = [];
206
200
  for (let n of e) {
207
201
  let e = n.routes ?? [];
208
202
  for (let r of e) {
209
- let e = De(n, r), i = Oe(r.kind, e, r);
203
+ let e = Oe(n, r), i = ke(r.kind, e, r);
210
204
  t.push({
211
205
  kind: r.kind,
212
206
  file: `plugin:${n.name}`,
213
207
  descriptor: i,
214
- executor: ke(r),
208
+ executor: Ae(r),
215
209
  plugin: {
216
210
  name: n.name,
217
211
  version: n.version
@@ -220,7 +214,7 @@ var we = [
220
214
  }
221
215
  }
222
216
  return t;
223
- }, je = (e, t, n = /* @__PURE__ */ new Set()) => {
217
+ }, Me = (e, t, n = /* @__PURE__ */ new Set()) => {
224
218
  let r = /* @__PURE__ */ new Map();
225
219
  for (let e of t) r.set(e, "user-route");
226
220
  let i = [];
@@ -232,8 +226,8 @@ var we = [
232
226
  }
233
227
  }
234
228
  return i;
235
- }, H = "_voltro_plugin_migrations", Me = () => p.gen(function* () {
236
- yield* (yield* m.SqlClient).unsafe(`
229
+ }, H = "_voltro_plugin_migrations", Ne = () => h.gen(function* () {
230
+ yield* (yield* g.SqlClient).unsafe(`
237
231
  CREATE TABLE IF NOT EXISTS ${H} (
238
232
  id TEXT PRIMARY KEY,
239
233
  plugin_name TEXT NOT NULL,
@@ -241,26 +235,26 @@ var we = [
241
235
  description TEXT,
242
236
  applied_at TEXT NOT NULL
243
237
  );
244
- `).pipe(p.orDie);
245
- }), Ne = (e, t) => `${z(e)}__${t}`, Pe = () => p.gen(function* () {
246
- let e = yield* m.SqlClient, t = yield* e`SELECT id FROM ${e(H)}`.pipe(p.orDie);
238
+ `).pipe(h.orDie);
239
+ }), Pe = (e, t) => `${m(e)}__${t}`, Fe = () => h.gen(function* () {
240
+ let e = yield* g.SqlClient, t = yield* e`SELECT id FROM ${e(H)}`.pipe(h.orDie);
247
241
  return new Set(t.map((e) => e.id));
248
- }), Fe = (e) => p.gen(function* () {
249
- let t = yield* m.SqlClient, n = (/* @__PURE__ */ new Date()).toISOString();
242
+ }), Ie = (e) => h.gen(function* () {
243
+ let t = yield* g.SqlClient, n = (/* @__PURE__ */ new Date()).toISOString();
250
244
  yield* t`
251
245
  INSERT INTO ${t(H)} (id, plugin_name, migration_id, description, applied_at)
252
246
  VALUES (${e.key}, ${e.pluginName}, ${e.migration.id}, ${e.migration.description ?? null}, ${n})
253
- `.pipe(p.orDie);
254
- }), U = (e) => p.gen(function* () {
247
+ `.pipe(h.orDie);
248
+ }), U = (e) => h.gen(function* () {
255
249
  let t = e.flatMap((e) => (e.extendSchema?.migrations ?? []).map((t) => ({
256
250
  plugin: e,
257
251
  migration: t
258
252
  })));
259
253
  if (t.length === 0) return [];
260
- yield* Me();
261
- let n = yield* Pe(), r = [];
254
+ yield* Ne();
255
+ let n = yield* Fe(), r = [];
262
256
  for (let { plugin: e, migration: i } of t) {
263
- let t = Ne(e.name, i.id), a = Date.now();
257
+ let t = Pe(e.name, i.id), a = Date.now();
264
258
  if (n.has(t)) {
265
259
  r.push({
266
260
  pluginName: e.name,
@@ -270,9 +264,9 @@ var we = [
270
264
  });
271
265
  continue;
272
266
  }
273
- let o = yield* m.SqlClient;
267
+ let o = yield* g.SqlClient;
274
268
  try {
275
- yield* i.up(o).pipe(p.mapError((e) => e)), yield* Fe({
269
+ yield* i.up(o).pipe(h.mapError((e) => e)), yield* Ie({
276
270
  key: t,
277
271
  pluginName: e.name,
278
272
  migration: i
@@ -289,30 +283,30 @@ var we = [
289
283
  status: "failed",
290
284
  durationMs: Date.now() - a,
291
285
  error: t
292
- }), yield* p.fail(/* @__PURE__ */ Error(`Plugin migration failed: ${e.name} ${i.id} — ${t instanceof Error ? t.message : String(t)}`));
286
+ }), yield* h.fail(/* @__PURE__ */ Error(`Plugin migration failed: ${e.name} ${i.id} — ${t instanceof Error ? t.message : String(t)}`));
293
287
  }
294
288
  }
295
289
  return r;
296
- }), Ie = (e, t) => p.gen(function* () {
290
+ }), Le = (e, t) => h.gen(function* () {
297
291
  let n = yield* U(e);
298
292
  if (n.length === 0) return n;
299
293
  let r = n.filter((e) => e.status === "applied"), i = n.filter((e) => e.status === "skipped");
300
294
  return t(`plugin migrations: ${r.length} applied, ${i.length} already applied`, { applied: r.map((e) => `${e.pluginName}:${e.migrationId}`) }), n;
301
- }), Le = (e) => e.filter((e) => e.extendSchema && (e.extendSchema.tables?.length ?? 0) + (e.extendSchema.migrations?.length ?? 0) > 0).map((e) => ({
295
+ }), Re = (e) => e.filter((e) => e.extendSchema && (e.extendSchema.tables?.length ?? 0) + (e.extendSchema.migrations?.length ?? 0) > 0).map((e) => ({
302
296
  pluginName: e.name,
303
- pluginAlias: z(e.name),
297
+ pluginAlias: m(e.name),
304
298
  tables: e.extendSchema.tables?.length ?? 0,
305
299
  migrations: e.extendSchema.migrations?.length ?? 0
306
- })), Re = (e) => e.flatMap((e) => e.extendSchema?.tables ?? []), W = /(?<!\.server)\.agent\.tsx?$/, ze = /\.agent\.server\.tsx?$/, G = /\.tool\.tsx?$/, Be = async (t, n) => {
300
+ })), ze = (e) => e.flatMap((e) => e.extendSchema?.tables ?? []), W = /(?<!\.server)\.agent\.tsx?$/, Be = /\.agent\.server\.tsx?$/, G = /\.tool\.tsx?$/, Ve = async (t, n) => {
307
301
  let r = 0;
308
302
  for (let i of t) if (G.test(i)) try {
309
303
  let t = await e(i);
310
- r += _e(t);
304
+ r += ye(t);
311
305
  } catch (e) {
312
306
  n.warn("tool: failed to import — handler not wired", { file: i }, e);
313
307
  }
314
308
  return r;
315
- }, Ve = (e) => e.replace(/\.agent\.(tsx?)$/, ".agent.server.$1"), K = async (t, n) => {
309
+ }, He = (e) => e.replace(/\.agent\.(tsx?)$/, ".agent.server.$1"), Ue = async (t, n) => {
316
310
  let r = [], i = /* @__PURE__ */ new Set();
317
311
  for (let a of t) {
318
312
  if (!W.test(a)) continue;
@@ -323,7 +317,7 @@ var we = [
323
317
  n.warn("agent: failed to import descriptor", { file: a }, e);
324
318
  continue;
325
319
  }
326
- let o = Object.values(t).find(L);
320
+ let o = Object.values(t).find(ge);
327
321
  if (o === void 0) {
328
322
  n.warn("agent: no defineAgent() descriptor export found", { file: a });
329
323
  continue;
@@ -335,7 +329,7 @@ var we = [
335
329
  });
336
330
  continue;
337
331
  }
338
- let s = Ve(a), c;
332
+ let s = He(a), c;
339
333
  try {
340
334
  c = await e(s);
341
335
  } catch (e) {
@@ -347,7 +341,7 @@ var we = [
347
341
  continue;
348
342
  }
349
343
  let l = c.default;
350
- if (!R(l)) {
344
+ if (!_e(l)) {
351
345
  n.warn("agent: executor file must default-export defineAgentExecutor(descriptor, {...})", {
352
346
  file: s,
353
347
  name: o.name
@@ -362,7 +356,7 @@ var we = [
362
356
  });
363
357
  }
364
358
  return { agents: r };
365
- }, q = /\.connection\.tsx?$/, He = (e) => e.replace(q, ""), Ue = async (t, n) => {
359
+ }, K = /\.connection\.tsx?$/, q = (e) => e.replace(K, ""), We = async (t, n) => {
366
360
  let r = [], i = /* @__PURE__ */ new Map();
367
361
  for (let a of t) {
368
362
  let t;
@@ -405,7 +399,7 @@ var we = [
405
399
  }
406
400
  return r.length > 0 && n.info("discovered connections", {
407
401
  connections: r.map((e) => `${e.definition.id} (${e.definition.kind})`),
408
- files: r.map((e) => He(s(e.file)))
402
+ files: r.map((e) => q(s(e.file)))
409
403
  }), r;
410
404
  }, J = (e) => o.test(e) || n.test(e), Y = async (e) => {
411
405
  let t = !1, n = !1, o = !1, s = !1, l = !1, d = async (e) => {
@@ -415,7 +409,7 @@ var we = [
415
409
  await d(c(e, u.name));
416
410
  } else {
417
411
  let e = u.name;
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);
412
+ (r.test(e) || a.test(e)) && (t = !0), J(e) && (n = !0), i.test(e) && (o = !0), W.test(e) && (s = !0), K.test(e) && (l = !0);
419
413
  }
420
414
  };
421
415
  return await d(e), {
@@ -425,7 +419,7 @@ var we = [
425
419
  agents: s,
426
420
  connections: l
427
421
  };
428
- }, We = async (e) => {
422
+ }, Ge = async (e) => {
429
423
  let t = c(e, "app.config.ts");
430
424
  if (!l(t)) return { plugins: [] };
431
425
  try {
@@ -440,8 +434,8 @@ var we = [
440
434
  error: e
441
435
  };
442
436
  }
443
- }, Ge = async (e) => (await X(e)).plugins, X = async (e) => {
444
- let { plugins: t, schema: n, error: r } = await We(e);
437
+ }, Ke = async (e) => (await X(e)).plugins, X = async (e) => {
438
+ let { plugins: t, schema: n, error: r } = await Ge(e);
445
439
  if (r !== void 0) throw new Z(e, r);
446
440
  return {
447
441
  plugins: t,
@@ -463,7 +457,7 @@ Cause: ${t instanceof Error ? t.message : String(t)}`), this.root = e, this.caus
463
457
  let t = /* @__PURE__ */ new Map(), n = (e) => {
464
458
  e?.tableName && !t.has(e.tableName) && t.set(e.tableName, e);
465
459
  };
466
- for (let t of Te({
460
+ for (let t of De({
467
461
  workflows: e.mix.workflows,
468
462
  schedules: e.mix.schedules,
469
463
  webhooks: e.mix.webhooks,
@@ -473,10 +467,10 @@ Cause: ${t instanceof Error ? t.message : String(t)}`), this.root = e, this.caus
473
467
  undo: e.gates.undo,
474
468
  connections: e.mix.connections
475
469
  })) n(t);
476
- e.mix.agents && (n(N), n(M), n(I), n(P)), e.mix.workflows && n(F), (e.mix.workflows || e.mix.agents) && n(ge);
477
- for (let t of Re(e.plugins)) n(t);
470
+ e.mix.agents && (n(L), n(I), n(he), n(R)), e.mix.workflows && n(z), (e.mix.workflows || e.mix.agents) && n(ve);
471
+ for (let t of ze(e.plugins)) n(t);
478
472
  return [...t.values()];
479
- }, Ke = async (e) => {
473
+ }, qe = async (e) => {
480
474
  let n = await Y(e.root), { plugins: r, schema: i } = await X(e.root);
481
475
  return Q({
482
476
  mix: n,
@@ -493,4 +487,4 @@ Cause: ${t instanceof Error ? t.message : String(t)}`), this.root = e, this.caus
493
487
  return t === "mariadb" ? "mariadb" : t === "mssql" ? "mssql" : void 0;
494
488
  };
495
489
  //#endregion
496
- export { Ee as C, z as S, U as _, Y as a, Ae as b, X as c, W as d, ze as f, Ie as g, Be as h, $ as i, q as l, K as m, Ke as n, J as o, G as p, Q as r, Ge as s, Z as t, Ue as u, Le as v, B as x, je as y };
490
+ export { ne as C, m as S, U as _, Y as a, je as b, X as c, W as d, Be as f, Le as g, Ve as h, $ as i, K as l, Ue as m, qe as n, J as o, G as p, Q as r, Ke as s, Z as t, We as u, Re as v, B as x, Me as y };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as e, i as t, n, o as r, r as i, t as a } from "./commands-6Kzi92Np.js";
1
+ import { a as e, i as t, n, o as r, r as i, t as a } from "./commands-BBYJ7Q3B.js";
2
2
  import { r as o } from "./templates-BTWZkJJT.js";
3
3
  //#region src/index.ts
4
4
  var s = "framework";
@@ -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-CRJlAOaM.js";
2
+ import { o as r } from "./updateCommand-C_jN1w18.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
@@ -148,6 +148,7 @@ var r = "/_voltro/inspect", i = () => process.env.VOLTRO_INSPECT === "off", a =
148
148
  }, b = (e) => e === "/_voltro/inspect" || e.startsWith("/_voltro/inspect/"), x = [
149
149
  "text",
150
150
  "textarea",
151
+ "rich-text",
151
152
  "number",
152
153
  "checkbox",
153
154
  "switch",
@@ -160,6 +161,8 @@ var r = "/_voltro/inspect", i = () => process.env.VOLTRO_INSPECT === "off", a =
160
161
  "daterange",
161
162
  "file",
162
163
  "hidden",
164
+ "array",
165
+ "reference",
163
166
  "custom"
164
167
  ], S = (e, t, n = [], r = []) => ({
165
168
  version: 2,
@@ -232,6 +235,7 @@ var r = "/_voltro/inspect", i = () => process.env.VOLTRO_INSPECT === "off", a =
232
235
  return a === "/_voltro/inspect/metrics" ? t.metrics === void 0 ? c(200, [], s) : c(200, t.metrics(), s) : a === "/_voltro/inspect/subscriptions" ? t.kind === "api" ? t.subscriptions === void 0 ? c(200, {
233
236
  subscriptions: [],
234
237
  matcherStats: [],
238
+ resume: [],
235
239
  capturedAt: Date.now()
236
240
  }, s) : c(200, t.subscriptions(), s) : c(404, { error: "subscriptions endpoint is api-only" }, s) : a === "/_voltro/inspect/members" ? t.kind === "api" ? t.members === void 0 ? c(200, {
237
241
  members: [],