@voltro/cli 0.39.0 → 0.39.1
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.
- package/CHANGELOG.md +52 -0
- package/dist/apiBuild-BmR_bIxN.js +2 -0
- package/dist/{apiBuild-DGalUk9v.js → apiBuild-D9FB13_2.js} +1 -1
- package/dist/bin.js +1 -1
- package/dist/{build-CfF6t0UM.js → build-DORV5mLM.js} +6 -6
- package/dist/{checkCommand-CBtynBKW.js → checkCommand-Bf6oMao4.js} +3 -3
- package/dist/{checkCommand-BV56Pcc1.js → checkCommand-D9qK_gtA.js} +1 -1
- package/dist/{codegenCommand-W7SDdiAQ.js → codegenCommand-CxOyKmc1.js} +1 -1
- package/dist/{commands-BD9eBRY3.js → commands-D6aW_6AR.js} +15 -15
- package/dist/{dashboardCommand-7qGylm0F.js → dashboardCommand-CwTZh-XZ.js} +1 -1
- package/dist/{dataCommand-C_F2DYxe.js → dataCommand-Cc9RiLQZ.js} +1 -1
- package/dist/{dev-gqpnzVhI.js → dev-3mgc8c-H.js} +26 -26
- package/dist/{dev-alhkKoEX.js → dev-CjJAasDs.js} +1 -1
- package/dist/doctorCommand-Cghssndo.js +2 -0
- package/dist/{doctorCommand-Bvs-BQrM.js → doctorCommand-oLuzc-aC.js} +28 -15
- package/dist/{dormancyCommand-B-PPHc9Q.js → dormancyCommand-Bxe4WtHU.js} +1 -1
- package/dist/{embeddingsCommand-OKY6XjUf.js → embeddingsCommand-CyNQkFIc.js} +1 -1
- package/dist/{envCommand-B1-Zm85H.js → envCommand-CAkSgBbh.js} +1 -1
- package/dist/{evolveCommand-C4-NlFbd.js → evolveCommand-CWhBoe_P.js} +1 -1
- package/dist/frameworkTableAssembly-DgylYh9_.js +2 -0
- package/dist/index.js +1 -1
- package/dist/{runtimeTrace-DzZOCd94.js → runtimeTrace-gNXeLf6H.js} +1 -1
- package/dist/{sdkgen-C4roLErM.js → sdkgen-C8zz10-X.js} +1 -1
- package/dist/{serveCommand-B6TATyCj.js → serveCommand-BpK8-m1N.js} +11 -11
- package/dist/serveCommand-CW-goXvh.js +2 -0
- package/dist/serveEntry.js +1 -1
- package/dist/{webhooksCommand-BVvOtZ1B.js → webhooksCommand-EccPZQZ4.js} +1 -1
- package/package.json +17 -17
- package/templates/AGENTS.md +1 -1
- package/templates/agent-docs/_index.md +1 -1
- package/templates/agent-docs/authentication.md +13 -4
- package/templates/agent-docs/whats-new.md +26 -198
- package/templates/apps/api-ai/package.json +7 -7
- package/templates/apps/api-auth/package.json +8 -8
- package/templates/apps/api-backend/package.json +7 -7
- package/templates/apps/api-backend-deactivation/package.json +7 -7
- package/templates/apps/api-backend-mail/package.json +8 -8
- package/templates/apps/api-backend-mariadb/package.json +9 -9
- package/templates/apps/api-backend-sqlite/package.json +8 -8
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-cms/package.json +10 -10
- package/templates/apps/api-collab/package.json +8 -8
- package/templates/apps/api-data-advanced/package.json +8 -8
- package/templates/apps/api-durable/package.json +8 -8
- package/templates/apps/api-durable/startup/warm.startup.tsx +16 -2
- package/templates/apps/api-feature-flags/package.json +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-saas-starter/package.json +10 -10
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-status/package.json +8 -8
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- package/templates/apps/changelog/package.json +6 -6
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +8 -8
- package/templates/apps/frontend-app/package.json +9 -9
- package/templates/apps/frontend-auth/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-cms/package.json +9 -9
- package/templates/apps/frontend-collab/package.json +10 -10
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +7 -7
- package/templates/apps/frontend-docs/package.json +7 -7
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +7 -7
- package/templates/apps/frontend-portal/package.json +8 -8
- package/templates/apps/frontend-saas/package.json +8 -8
- package/templates/apps/frontend-spa/package.json +7 -7
- package/templates/apps/frontend-ssr/package.json +7 -7
- package/templates/apps/frontend-ssr-api/package.json +8 -8
- package/templates/apps/frontend-static-blog/package.json +6 -6
- package/templates/apps/frontend-status/package.json +8 -8
- package/templates/apps/mobile-app/package.json +4 -4
- package/dist/apiBuild-2GvK8CUB.js +0 -2
- package/dist/doctorCommand-CVXfRrng.js +0 -2
- package/dist/frameworkTableAssembly-YyVe32Cb.js +0 -2
- package/dist/serveCommand-CNR0gI9V.js +0 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Bt as e, Ht as t, Vt as n } from "./dev-
|
|
1
|
+
import { Bt as e, Ht as t, Vt as n } from "./dev-3mgc8c-H.js";
|
|
2
2
|
import { $ as r, Q as i, X as a, Z as o, s, t as c, y as l } from "./webDev-CTpSY-e_.js";
|
|
3
3
|
import { w as u } from "./frameworkTableAssembly-oMPBKqlE.js";
|
|
4
4
|
import { n as d } from "./pageConvention-cEiRxdab.js";
|
|
5
|
-
import { r as f, u as p } from "./apiBuild-
|
|
5
|
+
import { r as f, u as p } from "./apiBuild-D9FB13_2.js";
|
|
6
6
|
import { n as m, r as h, t as g } from "./cliOutput-D1tSBoRM.js";
|
|
7
7
|
import { n as _, t as ee } from "./tsconfigPaths-BWXBWgcl.js";
|
|
8
8
|
import { n as te, r as ne } from "./fileTaxonomy-CJfgOllU.js";
|
|
@@ -1249,7 +1249,7 @@ var ce = /* @__PURE__ */ new Set([
|
|
|
1249
1249
|
let t = zt.get(e);
|
|
1250
1250
|
if (t !== void 0) return t;
|
|
1251
1251
|
let n = (async () => {
|
|
1252
|
-
let { walk: t, loadDiscovered: n } = await import("./dev-
|
|
1252
|
+
let { walk: t, loadDiscovered: n } = await import("./dev-CjJAasDs.js"), r = await t(e);
|
|
1253
1253
|
return {
|
|
1254
1254
|
files: r,
|
|
1255
1255
|
discovered: await n(r)
|
|
@@ -1337,7 +1337,7 @@ var ce = /* @__PURE__ */ new Set([
|
|
|
1337
1337
|
}
|
|
1338
1338
|
}, J = async (r) => {
|
|
1339
1339
|
try {
|
|
1340
|
-
let { loadApiConfig: i } = await import("./dev-
|
|
1340
|
+
let { loadApiConfig: i } = await import("./dev-CjJAasDs.js"), { discovered: a } = await U(r), o = n(await i(r)), s = {
|
|
1341
1341
|
queries: a.queries,
|
|
1342
1342
|
mutations: a.mutations,
|
|
1343
1343
|
actions: a.actions,
|
|
@@ -1421,7 +1421,7 @@ var ce = /* @__PURE__ */ new Set([
|
|
|
1421
1421
|
}, Jt = async (e) => Ye({
|
|
1422
1422
|
hasWorkflows: async () => (await U(e)).discovered.workflows.length > 0,
|
|
1423
1423
|
openStore: async () => {
|
|
1424
|
-
let { loadApiConfig: t, buildStore: n } = await import("./dev-
|
|
1424
|
+
let { loadApiConfig: t, buildStore: n } = await import("./dev-CjJAasDs.js"), r = await t(e);
|
|
1425
1425
|
if (r === null) throw Error("no app.config.ts in this directory");
|
|
1426
1426
|
let i = await n(r, void 0);
|
|
1427
1427
|
return {
|
|
@@ -1501,7 +1501,7 @@ var ce = /* @__PURE__ */ new Set([
|
|
|
1501
1501
|
}
|
|
1502
1502
|
}, en = async (e) => {
|
|
1503
1503
|
try {
|
|
1504
|
-
let { loadApiConfig: t } = await import("./dev-
|
|
1504
|
+
let { loadApiConfig: t } = await import("./dev-CjJAasDs.js"), n = (await t(e))?.doctor?.scopeVocabulary;
|
|
1505
1505
|
if (typeof n != "string") return [];
|
|
1506
1506
|
let [r, i] = n.split("#");
|
|
1507
1507
|
if (r === void 0 || i === void 0) return [];
|
|
@@ -1511,14 +1511,23 @@ var ce = /* @__PURE__ */ new Set([
|
|
|
1511
1511
|
return [];
|
|
1512
1512
|
}
|
|
1513
1513
|
}, Q = async (e) => {
|
|
1514
|
-
let t = {
|
|
1514
|
+
let t = (e) => ({
|
|
1515
1515
|
evaluated: !1,
|
|
1516
|
+
notEvaluated: e,
|
|
1516
1517
|
vocabularySize: 0,
|
|
1517
1518
|
findings: []
|
|
1518
|
-
};
|
|
1519
|
+
});
|
|
1519
1520
|
try {
|
|
1520
|
-
let { offlineManifest: n, toInput: r } = await import("./checkCommand-
|
|
1521
|
-
if (l.length === 0)
|
|
1521
|
+
let { offlineManifest: n, toInput: r } = await import("./checkCommand-D9qK_gtA.js"), { buildAppGraph: i, checkAppGraph: a } = await import("./appGraph-zuMGKVYX.js"), o = await n(e), s = r(o.manifest, o.tables), c = await en(e), l = [.../* @__PURE__ */ new Set([...s.scopes ?? [], ...c])];
|
|
1522
|
+
if (l.length === 0) {
|
|
1523
|
+
try {
|
|
1524
|
+
let { loadAppSchemaInputs: t } = await import("./frameworkTableAssembly-DgylYh9_.js");
|
|
1525
|
+
await t(e);
|
|
1526
|
+
} catch {
|
|
1527
|
+
return t("app-not-importable");
|
|
1528
|
+
}
|
|
1529
|
+
return t("no-vocabulary");
|
|
1530
|
+
}
|
|
1522
1531
|
let u = i({
|
|
1523
1532
|
...s,
|
|
1524
1533
|
scopes: l
|
|
@@ -1534,12 +1543,16 @@ var ce = /* @__PURE__ */ new Set([
|
|
|
1534
1543
|
}))
|
|
1535
1544
|
};
|
|
1536
1545
|
} catch {
|
|
1537
|
-
return t;
|
|
1546
|
+
return t("app-not-importable");
|
|
1538
1547
|
}
|
|
1539
1548
|
}, tn = async (e) => {
|
|
1540
|
-
let { findings: t, evaluated: n } = await Q(e);
|
|
1549
|
+
let { findings: t, evaluated: n, notEvaluated: r } = await Q(e);
|
|
1541
1550
|
if (!n) {
|
|
1542
|
-
|
|
1551
|
+
if (console.log(""), r === "app-not-importable") {
|
|
1552
|
+
console.log("• scope vocabulary: NOT EVALUATED — `app.config.ts` could not be imported."), console.log(" This is not a statement about your scopes: the rule never got to read"), console.log(" them. The commonest cause is a config that demands its environment while"), console.log(" it is evaluated — an auth strategy reading a secret, say — so it imports"), console.log(" inside the container and not on a workstation."), console.log(""), console.log(" Run doctor where that environment exists, or make the config importable"), console.log(" without it. The same import failure is reported above for plugin tables;"), console.log(" both sections have this one cause.");
|
|
1553
|
+
return;
|
|
1554
|
+
}
|
|
1555
|
+
console.log("• scope vocabulary: none found — the unknown-scope rule did NOT run."), console.log(" It compares each procedure's required scopes against the scopes your"), console.log(" roles actually grant, and needs somewhere to read that set from."), console.log(" `@voltro/plugin-rbac` publishes it from its `roles` map; an app doing"), console.log(" RBAC without the plugin can point at its own:"), console.log(""), console.log(" // app.config.ts"), console.log(" doctor: { scopeVocabulary: './lib/teamRoles.ts#ALL_TEAM_SCOPES' }"), console.log(""), console.log(" Until then this section is NOT a clean bill of health — a procedure"), console.log(" requiring a scope no role grants is uncallable by everyone, and"), console.log(" nothing here would have told you.");
|
|
1543
1556
|
return;
|
|
1544
1557
|
}
|
|
1545
1558
|
if (t.length !== 0) {
|
|
@@ -1559,7 +1572,7 @@ var ce = /* @__PURE__ */ new Set([
|
|
|
1559
1572
|
if (n === void 0 || r.length === 0) return;
|
|
1560
1573
|
let i = [];
|
|
1561
1574
|
try {
|
|
1562
|
-
let { loadApiConfig: t } = await import("./dev-
|
|
1575
|
+
let { loadApiConfig: t } = await import("./dev-CjJAasDs.js");
|
|
1563
1576
|
i = (await t(e))?.locales ?? [];
|
|
1564
1577
|
} catch {
|
|
1565
1578
|
return;
|
|
@@ -1575,7 +1588,7 @@ var ce = /* @__PURE__ */ new Set([
|
|
|
1575
1588
|
}, rn = async (e) => {
|
|
1576
1589
|
let { discovered: t } = await U(e), n = [];
|
|
1577
1590
|
try {
|
|
1578
|
-
let { loadApiConfig: t } = await import("./dev-
|
|
1591
|
+
let { loadApiConfig: t } = await import("./dev-CjJAasDs.js");
|
|
1579
1592
|
n = ((await t(e))?.plugins ?? []).map((e) => {
|
|
1580
1593
|
let t = (e.extendSchema?.tables ?? []).map((e) => {
|
|
1581
1594
|
let t = e;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as e } from "./cliOutput-D1tSBoRM.js";
|
|
2
|
-
import { t } from "./checkCommand-
|
|
2
|
+
import { t } from "./checkCommand-Bf6oMao4.js";
|
|
3
3
|
import { i as n, n as r } from "./codemodRunner-D-jTyvWo.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";
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as e } from "./apiBuild-
|
|
1
|
+
import { n as e } from "./apiBuild-D9FB13_2.js";
|
|
2
2
|
import { join as t, resolve as n, sep as r } from "node:path";
|
|
3
3
|
import { existsSync as i, promises as a } from "node:fs";
|
|
4
4
|
import { createLogger as o } from "@voltro/logger";
|
|
@@ -422,7 +422,7 @@ let package = Package(
|
|
|
422
422
|
await l.mkdir(o(e), { recursive: !0 }), await l.writeFile(e, n.content, "utf8");
|
|
423
423
|
}
|
|
424
424
|
}, X = async (e) => {
|
|
425
|
-
let { offlineManifest: t } = await import("./checkCommand-
|
|
425
|
+
let { offlineManifest: t } = await import("./checkCommand-D9qK_gtA.js"), { manifest: n } = await t(e);
|
|
426
426
|
return n;
|
|
427
427
|
}, Z = async (e) => {
|
|
428
428
|
let t = J(await (e.manifestProvider ?? X)(e.root), {
|
|
@@ -3,7 +3,7 @@ import { t } from "./frameworkInspectState-CX2250XB.js";
|
|
|
3
3
|
import { r as n, t as r } from "./appModuleLoader-C9r9mxZt.js";
|
|
4
4
|
import { t as i } from "./bootRefusal-pgvDxlrU.js";
|
|
5
5
|
import { n as a, r as o } from "./startupRunner-CEqQq7ax.js";
|
|
6
|
-
import { $ as s, $t as c, A as l, At as u, B as d, C as f, Ct as p, D as ee, Dt as te, E as ne, Et as m, F as re, Ft as h, G as g, Gt as ie, H as ae, I as oe, It as se, J as ce, Jt as _, K as le, Kt as v, L as ue, Lt as de, M as fe, Mt as y, N as pe, Nt as me, O as he, Ot as ge, P as _e, Pt as ve, Q as ye, Qt as be, R as xe, Rt as b, S as Se, Sn as Ce, St as we, T as Te, Tt as Ee, U as De, Ut as x, V as Oe, Vt as ke, W as Ae, Wt as je, X as Me, Xt as Ne, Y as Pe, Yt as Fe, Z as Ie, Zt as S, _ as Le, _n as Re, _t as C, an as ze, at as Be, b as Ve, bn as He, bt as Ue, c as We, cn as w, ct as Ge, dn as Ke, dt as qe, en as Je, et as Ye, f as Xe, fn as Ze, ft as Qe, g as $e, gn as et, gt as tt, h as nt, ht as rt, i as it, in as at, it as ot, j as st, jt as ct, k as lt, kt as ut, ln as T, lt as dt, m as ft, mn as pt, mt as E, nn as D, nt as mt, o as O, on as ht, ot as gt, p as _t, pn as vt, pt as yt, q as bt, qt as xt, r as St, rn as Ct, rt as wt, sn as Tt, st as Et, t as Dt, tn as Ot, tt as kt, u as At, un as jt, ut as Mt, v as Nt, vn as k, vt as A, w as j, wt as Pt, x as Ft, xn as It, xt as Lt, y as Rt, yn as zt, yt as Bt, zt as Vt } from "./dev-
|
|
6
|
+
import { $ as s, $t as c, A as l, At as u, B as d, C as f, Ct as p, D as ee, Dt as te, E as ne, Et as m, F as re, Ft as h, G as g, Gt as ie, H as ae, I as oe, It as se, J as ce, Jt as _, K as le, Kt as v, L as ue, Lt as de, M as fe, Mt as y, N as pe, Nt as me, O as he, Ot as ge, P as _e, Pt as ve, Q as ye, Qt as be, R as xe, Rt as b, S as Se, Sn as Ce, St as we, T as Te, Tt as Ee, U as De, Ut as x, V as Oe, Vt as ke, W as Ae, Wt as je, X as Me, Xt as Ne, Y as Pe, Yt as Fe, Z as Ie, Zt as S, _ as Le, _n as Re, _t as C, an as ze, at as Be, b as Ve, bn as He, bt as Ue, c as We, cn as w, ct as Ge, dn as Ke, dt as qe, en as Je, et as Ye, f as Xe, fn as Ze, ft as Qe, g as $e, gn as et, gt as tt, h as nt, ht as rt, i as it, in as at, it as ot, j as st, jt as ct, k as lt, kt as ut, ln as T, lt as dt, m as ft, mn as pt, mt as E, nn as D, nt as mt, o as O, on as ht, ot as gt, p as _t, pn as vt, pt as yt, q as bt, qt as xt, r as St, rn as Ct, rt as wt, sn as Tt, st as Et, t as Dt, tn as Ot, tt as kt, u as At, un as jt, ut as Mt, v as Nt, vn as k, vt as A, w as j, wt as Pt, x as Ft, xn as It, xt as Lt, y as Rt, yn as zt, yt as Bt, zt as Vt } from "./dev-3mgc8c-H.js";
|
|
7
7
|
import { n as Ht } from "./cliArgs-D4p8n7EE.js";
|
|
8
8
|
import { r as Ut } from "./appPort-B_HpJ_ck.js";
|
|
9
9
|
import { at as Wt, st as M } from "./webDev-CTpSY-e_.js";
|
|
@@ -16,7 +16,7 @@ import { h as fn, o as pn } from "./inspect-B7U7Cl_Z.js";
|
|
|
16
16
|
import { n as mn } from "./mssqlClusterPatch-_4cE_nun.js";
|
|
17
17
|
import { i as hn, n as gn, r as _n, t as vn } from "./webhookDiscovery-CphsQe59.js";
|
|
18
18
|
import { t as yn } from "./inspectMetrics-CfdKLh6t.js";
|
|
19
|
-
import { r as bn, u as xn } from "./apiBuild-
|
|
19
|
+
import { r as bn, u as xn } from "./apiBuild-D9FB13_2.js";
|
|
20
20
|
import { t as Sn } from "./bootTiming-BdyP9nYw.js";
|
|
21
21
|
import { t as Cn } from "./dataProfile-dW-PsfLB.js";
|
|
22
22
|
import { basename as wn, join as Tn } from "node:path";
|
|
@@ -29,7 +29,7 @@ import { SqlClient as Vn } from "@effect/sql";
|
|
|
29
29
|
import { declaredSnapshot as Hn, describeOutcome as Un, pendingFileMigrationIds as Wn, runPlannedMigrations as Gn } from "@voltro/database/sql";
|
|
30
30
|
import { RpcGroup as Kn } from "@effect/rpc";
|
|
31
31
|
import { allRegisteredTables as qn, and as Jn, connectionIdentity as Yn, ensureTableRegistered as Xn, eq as G, or as K } from "@voltro/database";
|
|
32
|
-
import { AggregateRegistry as Zn, CostRegistry as Qn, DORMANCY_WAKEUP_TENANT as $n, Dispatcher as er, ExpectationRegistry as tr, ExperimentRegistry as q, apiKeyManagementRoutes as nr, attachAnalyticsMirror as rr, attachExpectations as ir, attachExperiments as ar, attachFinops as or, awaitServerListening as sr, bindMutation as J, bindStream as cr, bindSubscription as Y, buildTracingLayer as lr, cancelWakeup as ur, compileCron as dr, dataStoreApiKeyStore as fr, formatServerOnlyLeaks as pr, formatUnresolvedSources as mr, frameworkApiKeyStrategy as hr, getResourcePolicy as gr, installPolicyGuardResolver as _r, loadResourceTuples as vr, makeActionRunner as yr, makeAdvisoryLockCoordinator as br, makeApiKeyService as xr, makeApiKeyUsageBuffer as Sr, makeApiKeyUsageFlusher as Cr, makeAsyncKv as wr, makeAuthMiddlewareLayers as Tr, makeCoordinatedScheduler as Er, makeEffectStoreLayer as Dr, makeLazyWorkflowFacade as Or, makeMutationOutputCodec as kr, makeMutationRunner as Ar, makeOneShotQueryRunner as jr, makeQueryDescriptorProducer as Mr, makeQueryFinalizer as Nr, makeQueryReauthorizer as Pr, makeQuerySubscriber as Fr, makeSchemaRegistry as Ir, makeWorkflowFacade as Lr, makeWorkflowFacadeWithCallerContext as Rr, makeWorkflowLayers as X, noopKv as zr, onProcessShutdown as Br, recordSubscriptionDelivery as Vr, recordWorkflowRun as Hr,
|
|
32
|
+
import { AggregateRegistry as Zn, CostRegistry as Qn, DORMANCY_WAKEUP_TENANT as $n, Dispatcher as er, ExpectationRegistry as tr, ExperimentRegistry as q, apiKeyManagementRoutes as nr, attachAnalyticsMirror as rr, attachExpectations as ir, attachExperiments as ar, attachFinops as or, awaitServerListening as sr, bindMutation as J, bindStream as cr, bindSubscription as Y, buildTracingLayer as lr, cancelWakeup as ur, compileCron as dr, dataStoreApiKeyStore as fr, formatServerOnlyLeaks as pr, formatUnresolvedSources as mr, frameworkApiKeyStrategy as hr, getResourcePolicy as gr, installPolicyGuardResolver as _r, loadResourceTuples as vr, makeActionRunner as yr, makeAdvisoryLockCoordinator as br, makeApiKeyService as xr, makeApiKeyUsageBuffer as Sr, makeApiKeyUsageFlusher as Cr, makeAsyncKv as wr, makeAuthMiddlewareLayers as Tr, makeCoordinatedScheduler as Er, makeEffectStoreLayer as Dr, makeLazyWorkflowFacade as Or, makeMutationOutputCodec as kr, makeMutationRunner as Ar, makeOneShotQueryRunner as jr, makeQueryDescriptorProducer as Mr, makeQueryFinalizer as Nr, makeQueryReauthorizer as Pr, makeQuerySubscriber as Fr, makeSchemaRegistry as Ir, makeWorkflowFacade as Lr, makeWorkflowFacadeWithCallerContext as Rr, makeWorkflowLayers as X, noopKv as zr, onProcessShutdown as Br, recordSubscriptionDelivery as Vr, recordWorkflowRun as Hr, registerDefaultTupleSource as Ur, registerWakeup as Wr, resolveSecretsBackend as Gr, runProvidedEffect as Kr, setSecretsBackend as qr, setSystemStoreHandle as Jr, shutdownGraceMsFromEnv as Z, singleCoordinator as Yr, startRpcServer as Xr, startScheduler as Zr, stripForbiddenForWire as Qr, undoCaptureEnabled as $r, unresolvedSources as ei, withScopedRequest as ti, workflowToRpc as ni, wrapStoreWithBootCodec as ri } from "@voltro/runtime";
|
|
33
33
|
import { appStorageProvider as ii, fromNodeReadable as ai, getObjectStream as oi, putObjectStream as si, toNodeReadable as ci } from "@voltro/plugin-storage";
|
|
34
34
|
import { isEnvContract as li } from "@voltro/env";
|
|
35
35
|
import { assertProductionSessionSecret as ui } from "@voltro/protocol/session";
|
|
@@ -301,7 +301,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
301
301
|
Vt(e.appProcedures ?? e.discovered, {
|
|
302
302
|
defaultDeny: e.security?.defaultDeny ?? !0,
|
|
303
303
|
commandHint: "`voltro serve`"
|
|
304
|
-
}),
|
|
304
|
+
}), Jr({
|
|
305
305
|
dataStore: e.store,
|
|
306
306
|
schemaRegistry: e.schemaRegistry
|
|
307
307
|
});
|
|
@@ -371,7 +371,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
371
371
|
});
|
|
372
372
|
Se.set(t, { handle: r });
|
|
373
373
|
}
|
|
374
|
-
_r(),
|
|
374
|
+
_r(), Ur((t) => vr(e.store, t.subjectId, t.resourceType, t.resourceId)) || F({ scope: "voltro:serve" }).info("policy guards: using the app-registered tuple source");
|
|
375
375
|
let Ce = [], we = [...e.discovered.outboxHandlers ?? [], ...gn((b?.outgoing.length ?? 0) + (b?.incoming.length ?? 0) + (b?.providers.length ?? 0), []) ? [{
|
|
376
376
|
file: "<framework>/webhooks",
|
|
377
377
|
id: "voltro-webhook-emit",
|
|
@@ -430,7 +430,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
430
430
|
return (e.baseLayer ? r.pipe(U.provide(e.baseLayer)) : r).pipe(U.provide(Ve)).pipe(U.provide(He)).pipe(U.provide(We)).pipe(U.provide(Ke));
|
|
431
431
|
}, Ye = (e, t) => {
|
|
432
432
|
let n = Je(e, t);
|
|
433
|
-
return
|
|
433
|
+
return Kr(n);
|
|
434
434
|
}, Xe = yn(), Ze = bt(e.plugins ?? [], Xe), Qe = d({
|
|
435
435
|
plugins: e.plugins ?? [],
|
|
436
436
|
metrics: Xe,
|
|
@@ -728,7 +728,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
728
728
|
I(Rn)
|
|
729
729
|
] : []
|
|
730
730
|
], Dt = Kn.make(...wt).middleware(On).middleware(kn), kt = Tr({ resolveSubject: ({ headers: t, clientId: n }) => e.resolveSubject(t, n) }), At = e.dormancyTenantId ?? $n, jt = e.dormancy === "sleep" ? {
|
|
731
|
-
register: (t, n, r) =>
|
|
731
|
+
register: (t, n, r) => Wr(e.store, {
|
|
732
732
|
tenantId: r ?? At,
|
|
733
733
|
kind: "workflow",
|
|
734
734
|
refId: t,
|
|
@@ -1180,7 +1180,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
1180
1180
|
});
|
|
1181
1181
|
for (let e of re.warnings) $.warn(e);
|
|
1182
1182
|
let h = re.port;
|
|
1183
|
-
|
|
1183
|
+
qr(Gr(m?.secrets)), await M({
|
|
1184
1184
|
rawEnv: m?.env,
|
|
1185
1185
|
appType: "api",
|
|
1186
1186
|
root: d,
|
|
@@ -1608,7 +1608,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
1608
1608
|
}),
|
|
1609
1609
|
inspectRedriveWorkflowRun: (e) => Z.redriveWorkflowRun(e),
|
|
1610
1610
|
inspectResumeWorkflowRunFromStep: (e) => Z.resumeWorkflowRunFromStep(e)
|
|
1611
|
-
},
|
|
1611
|
+
}, Wr = (process.env.VOLTRO_TENANT_ISOLATION ?? m?.tenancy?.isolation) === "namespace", Kr = Wr && g !== "memory" ? await (async () => {
|
|
1612
1612
|
let e = await N(g);
|
|
1613
1613
|
return T({
|
|
1614
1614
|
tables: S,
|
|
@@ -1622,7 +1622,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
1622
1622
|
});
|
|
1623
1623
|
})() : void 0, Jr = await ft({
|
|
1624
1624
|
input: m?.tenancy?.residency,
|
|
1625
|
-
namespaceIsolationOn:
|
|
1625
|
+
namespaceIsolationOn: Wr,
|
|
1626
1626
|
makeStoreForUrl: (e, t) => it(m, void 0, Gt(O(), t)),
|
|
1627
1627
|
log: {
|
|
1628
1628
|
info: (e, t) => $.info(e, t),
|
|
@@ -1698,7 +1698,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
1698
1698
|
softDeleteScopedTables: v.softDeleteScopedTables,
|
|
1699
1699
|
dataTransferSnapshot: Hn(S),
|
|
1700
1700
|
dataTransferDialect: g,
|
|
1701
|
-
...
|
|
1701
|
+
...Kr === void 0 ? {} : { ensureTenantProvisioned: Kr.ensure },
|
|
1702
1702
|
...Jr === void 0 ? {} : { resolveResidentStore: Jr.resolveStore },
|
|
1703
1703
|
tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ?? m?.tenancy?.isolation) === "namespace" ? "namespace" : "shared-schema",
|
|
1704
1704
|
resolveSubject: (e, t) => Ln({
|
package/dist/serveEntry.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./loadEnv-D9nEOClM.js";
|
|
2
2
|
import { r as t } from "./appModuleLoader-C9r9mxZt.js";
|
|
3
3
|
import { i as n } from "./dialectDriver-czCHYpeH.js";
|
|
4
|
-
import { t as r } from "./serveCommand-
|
|
4
|
+
import { t as r } from "./serveCommand-BpK8-m1N.js";
|
|
5
5
|
export { e as loadDotEnv, t as registerAppModules, n as registerDriver, r as runServe };
|
|
@@ -222,7 +222,7 @@ createVerifier({ secret: [process.env.WEBHOOK_SECRET, process.env.WEBHOOK_SECRET
|
|
|
222
222
|
...t === void 0 ? {} : { payload: t }
|
|
223
223
|
};
|
|
224
224
|
}, S = u({ scope: "voltro:webhooks" }), C = ["--out", "--name"], w = async (e) => {
|
|
225
|
-
let { walk: t, loadDiscovered: n } = await import("./dev-
|
|
225
|
+
let { walk: t, loadDiscovered: n } = await import("./dev-CjJAasDs.js"), { outgoingFromEvents: r } = await import("./webhookDiscovery-il9ti-HE.js");
|
|
226
226
|
return r((await n(await t(e))).events.map((e) => ({
|
|
227
227
|
file: e.file,
|
|
228
228
|
descriptor: e.descriptor
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voltro/cli",
|
|
3
|
-
"version": "0.39.
|
|
3
|
+
"version": "0.39.1",
|
|
4
4
|
"description": "The `voltro` CLI — dev server, codegen, migrations, project scaffolding, agent-docs seeding, and production serve.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"voltro",
|
|
@@ -697,22 +697,22 @@
|
|
|
697
697
|
"@effect/platform-node": "^0.108.0",
|
|
698
698
|
"@effect/sql": "^0.52.0",
|
|
699
699
|
"@effect/workflow": "^0.19.0",
|
|
700
|
-
"@voltro/ai": "0.39.
|
|
701
|
-
"@voltro/cache": "0.39.
|
|
702
|
-
"@voltro/data-transfer": "0.39.
|
|
703
|
-
"@voltro/database": "0.39.
|
|
704
|
-
"@voltro/env": "0.39.
|
|
705
|
-
"@voltro/kv": "0.39.
|
|
706
|
-
"@voltro/logger": "0.39.
|
|
707
|
-
"@voltro/plugin-auth": "0.39.
|
|
708
|
-
"@voltro/plugin-broadcast": "0.39.
|
|
709
|
-
"@voltro/plugin-mail": "0.39.
|
|
710
|
-
"@voltro/plugin-storage": "0.39.
|
|
711
|
-
"@voltro/plugin-webhooks": "0.39.
|
|
712
|
-
"@voltro/protocol": "0.39.
|
|
713
|
-
"@voltro/runtime": "0.39.
|
|
714
|
-
"@voltro/serverless": "0.39.
|
|
715
|
-
"@voltro/workflow": "0.39.
|
|
700
|
+
"@voltro/ai": "0.39.1",
|
|
701
|
+
"@voltro/cache": "0.39.1",
|
|
702
|
+
"@voltro/data-transfer": "0.39.1",
|
|
703
|
+
"@voltro/database": "0.39.1",
|
|
704
|
+
"@voltro/env": "0.39.1",
|
|
705
|
+
"@voltro/kv": "0.39.1",
|
|
706
|
+
"@voltro/logger": "0.39.1",
|
|
707
|
+
"@voltro/plugin-auth": "0.39.1",
|
|
708
|
+
"@voltro/plugin-broadcast": "0.39.1",
|
|
709
|
+
"@voltro/plugin-mail": "0.39.1",
|
|
710
|
+
"@voltro/plugin-storage": "0.39.1",
|
|
711
|
+
"@voltro/plugin-webhooks": "0.39.1",
|
|
712
|
+
"@voltro/protocol": "0.39.1",
|
|
713
|
+
"@voltro/runtime": "0.39.1",
|
|
714
|
+
"@voltro/serverless": "0.39.1",
|
|
715
|
+
"@voltro/workflow": "0.39.1",
|
|
716
716
|
"chokidar": "^5.0.0",
|
|
717
717
|
"ioredis": "^5.11.1",
|
|
718
718
|
"tinyglobby": "^0.2.17",
|
package/templates/AGENTS.md
CHANGED
|
@@ -707,7 +707,7 @@ each plugin's own README.
|
|
|
707
707
|
|
|
708
708
|
| Topic | Open | Summary |
|
|
709
709
|
|---|---|---|
|
|
710
|
-
| **What's new in 0.39.
|
|
710
|
+
| **What's new in 0.39.1** | `node_modules/@voltro/cli/templates/agent-docs/whats-new.md` | Everything that changed in this version. Read it before hand-rolling something the framework may now ship. |
|
|
711
711
|
| AI | `node_modules/@voltro/cli/templates/agent-docs/ai.md` | How Voltro treats AI — agents, tools, streaming, RAG — all primitives over the same WebSocket as the rest of the framework. |
|
|
712
712
|
| Authentication | `node_modules/@voltro/cli/templates/agent-docs/authentication.md` | How @voltro/plugin-auth wires password + session-cookie auth across api + web, plus the pluggable identity-strategy protocol. |
|
|
713
713
|
| Caching | `node_modules/@voltro/cli/templates/agent-docs/caching.md` | Voltro's caching layer (@voltro/cache) — an always-on memory default, swappable Redis-compatible backends, a low-level wrap primitive, and automatic query-result invalidation. |
|
|
@@ -9,7 +9,7 @@ each plugin's own README.
|
|
|
9
9
|
|
|
10
10
|
| Topic | Open | Summary |
|
|
11
11
|
|---|---|---|
|
|
12
|
-
| **What's new in 0.39.
|
|
12
|
+
| **What's new in 0.39.1** | `node_modules/@voltro/cli/templates/agent-docs/whats-new.md` | Everything that changed in this version. Read it before hand-rolling something the framework may now ship. |
|
|
13
13
|
| AI | `node_modules/@voltro/cli/templates/agent-docs/ai.md` | How Voltro treats AI — agents, tools, streaming, RAG — all primitives over the same WebSocket as the rest of the framework. |
|
|
14
14
|
| Authentication | `node_modules/@voltro/cli/templates/agent-docs/authentication.md` | How @voltro/plugin-auth wires password + session-cookie auth across api + web, plus the pluggable identity-strategy protocol. |
|
|
15
15
|
| Caching | `node_modules/@voltro/cli/templates/agent-docs/caching.md` | Voltro's caching layer (@voltro/cache) — an always-on memory default, swappable Redis-compatible backends, a low-level wrap primitive, and automatic query-result invalidation. |
|
|
@@ -2143,10 +2143,19 @@ setTupleSource((req) =>
|
|
|
2143
2143
|
loadResourceTuples(store, req.subjectId, req.resourceType, req.resourceId))
|
|
2144
2144
|
```
|
|
2145
2145
|
|
|
2146
|
-
`voltro dev` / `voltro serve` register
|
|
2147
|
-
`_voltro_rebac_tuples
|
|
2148
|
-
in your own tables
|
|
2149
|
-
copy it into a framework table to authorize
|
|
2146
|
+
`voltro dev` / `voltro serve` register this default for you, reading
|
|
2147
|
+
`_voltro_rebac_tuples` — **but only if you registered nothing**. Register your
|
|
2148
|
+
own when your relationships already live in your own tables: a `teamMembers` row
|
|
2149
|
+
is a relation; you should not have to copy it into a framework table to authorize
|
|
2150
|
+
against it. Yours wins, wherever you register it (`app.config.ts` or a
|
|
2151
|
+
`*.startup.tsx`), and the boot says so:
|
|
2152
|
+
|
|
2153
|
+
```
|
|
2154
|
+
policy guards: using the app-registered tuple source
|
|
2155
|
+
```
|
|
2156
|
+
|
|
2157
|
+
That line is worth knowing, because its absence is the diagnosis when your own
|
|
2158
|
+
source is not being consulted.
|
|
2150
2159
|
|
|
2151
2160
|
**Every unanswerable case denies.** No tuple source registered, no policy for
|
|
2152
2161
|
that `resourceType`, an input that doesn't identify a resource, a tuple source
|