@voltro/cli 0.61.0 → 0.62.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.
- package/CHANGELOG.md +18 -0
- package/dist/apiBuild-Dl-djDc_.js +2 -0
- package/dist/{apiBuild-C5HhMAEm.js → apiBuild-DwhySM-6.js} +1 -1
- package/dist/bin.js +1 -1
- package/dist/{build-DQr7SsKK.js → build-B43mm2g2.js} +6 -6
- package/dist/{checkCommand-ByaOhdc8.js → checkCommand-nB68vIo_.js} +1 -1
- package/dist/{checkCommand-CvSheSdb.js → checkCommand-zGYZtIkJ.js} +3 -3
- package/dist/{codegenCommand-CI0mpjxo.js → codegenCommand-YvqhgQBj.js} +1 -1
- package/dist/{codemodRunner-Drb-H-jr.js → codemodRunner-D90bexh4.js} +77 -53
- package/dist/{commands-pCItjdHG.js → commands-Dd6Cp7qs.js} +19 -19
- package/dist/{dashboardCommand-O-ToEgiH.js → dashboardCommand-BsDfQa-g.js} +1 -1
- package/dist/{dataCommand-mn1Zc88W.js → dataCommand-Cgdcl5M0.js} +1 -1
- package/dist/{dev-dSH-Pkb2.js → dev-BfUG0jrD.js} +31 -11
- package/dist/{dev-kn9-7RXZ.js → dev-BpMSAjMk.js} +1 -1
- package/dist/doctorCommand-PHcqxpnx.js +2 -0
- package/dist/{doctorCommand-ClB7Ucz5.js → doctorCommand-pxYq2bH5.js} +10 -10
- package/dist/{dormancyCommand-DZupfuq-.js → dormancyCommand-DZpSCWy9.js} +1 -1
- package/dist/{embeddingsCommand-D8_GquVX.js → embeddingsCommand-YR5Eif0k.js} +1 -1
- package/dist/{envCommand-DRjVSXRp.js → envCommand-Yl4TGM4h.js} +1 -1
- package/dist/{evolveCommand-Cb0C2b3V.js → evolveCommand-B2iYAC9t.js} +2 -2
- package/dist/index.js +1 -1
- package/dist/{infoCommand-BlKnoY2D.js → infoCommand-DjtMWLZl.js} +1 -1
- package/dist/{probeCommand-DYsOFm62.js → probeCommand-Dsu5if_4.js} +1 -1
- package/dist/{runtimeTrace-BI3kdicc.js → runtimeTrace-CQcn26bI.js} +1 -1
- package/dist/{sdkgen-DZ4zCtV4.js → sdkgen-DJvyVw7B.js} +1 -1
- package/dist/serveCommand-CZ0kgfIX.js +2 -0
- package/dist/{serveCommand-DnxqCQ16.js → serveCommand-CaLTTh68.js} +2 -2
- package/dist/serveEntry.js +1 -1
- package/dist/updateCommand-DA4OMF7u.js +2 -0
- package/dist/{updateCommand-B18ZQNFg.js → updateCommand-F6HFgz0i.js} +1 -1
- package/dist/{webhooksCommand-Bs-HZ4wY.js → webhooksCommand-Bgdli8dI.js} +1 -1
- package/package.json +25 -19
- package/templates/AGENTS.md +1 -1
- package/templates/agent-docs/_index.md +1 -1
- package/templates/agent-docs/ai.md +32 -0
- package/templates/agent-docs/observability.md +10 -1
- package/templates/agent-docs/whats-new.md +7 -14
- package/templates/agent-docs/workflows.md +7 -2
- package/templates/apps/api-ai/package.json +6 -6
- 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 +9 -9
- 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-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-row-history/package.json +8 -8
- 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-webhooks/package.json +9 -9
- package/templates/apps/changelog/package.json +7 -7
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +7 -7
- package/templates/apps/frontend-app/package.json +8 -8
- package/templates/apps/frontend-auth/package.json +7 -7
- package/templates/apps/frontend-blank/package.json +6 -6
- package/templates/apps/frontend-cms/package.json +8 -8
- package/templates/apps/frontend-collab/package.json +9 -9
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +6 -6
- package/templates/apps/frontend-docs/package.json +8 -8
- 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 +7 -7
- package/templates/apps/frontend-saas/package.json +7 -7
- package/templates/apps/frontend-spa/package.json +6 -6
- package/templates/apps/frontend-ssr/package.json +6 -6
- package/templates/apps/frontend-ssr-api/package.json +7 -7
- package/templates/apps/frontend-static-blog/package.json +8 -8
- package/templates/apps/frontend-status/package.json +7 -7
- package/templates/apps/mobile-app/package.json +4 -4
- package/dist/apiBuild-5U7PxjLa.js +0 -2
- package/dist/doctorCommand-BVat2ejT.js +0 -2
- package/dist/serveCommand-CwK_6Wxt.js +0 -2
- package/dist/updateCommand-B4EgDD-m.js +0 -2
|
@@ -3430,7 +3430,16 @@ var qc = rn({ scope: "voltro:replica-observations" }), Jc = (e) => {
|
|
|
3430
3430
|
kind: "start",
|
|
3431
3431
|
payload: u.payload,
|
|
3432
3432
|
commit: async (n) => {
|
|
3433
|
-
u.evict !== void 0 && (await e.cancelRun(
|
|
3433
|
+
u.evict !== void 0 && (await e.cancelRun({
|
|
3434
|
+
workflowName: a.workflowName,
|
|
3435
|
+
runId: u.evict.runId,
|
|
3436
|
+
executionId: u.evict.executionId,
|
|
3437
|
+
reason: "cancelled to make room for a newer start (singleton mode 'cancel')",
|
|
3438
|
+
detail: {
|
|
3439
|
+
source: "flow-control",
|
|
3440
|
+
mode: "singleton"
|
|
3441
|
+
}
|
|
3442
|
+
}).catch((e) => {
|
|
3434
3443
|
i?.warn?.("workflow flow control: could not cancel a singleton incumbent", {
|
|
3435
3444
|
workflow: a.workflowName,
|
|
3436
3445
|
executionId: u.evict?.executionId,
|
|
@@ -3528,22 +3537,29 @@ var qc = rn({ scope: "voltro:replica-observations" }), Jc = (e) => {
|
|
|
3528
3537
|
runId: i.id
|
|
3529
3538
|
};
|
|
3530
3539
|
},
|
|
3531
|
-
cancelRun: async (t, n) => {
|
|
3532
|
-
let
|
|
3533
|
-
|
|
3540
|
+
cancelRun: async ({ runId: t, reason: n, detail: r }) => {
|
|
3541
|
+
let i = e.cancelRunWithReason();
|
|
3542
|
+
return i !== void 0 && i({
|
|
3543
|
+
runId: t,
|
|
3544
|
+
reason: n,
|
|
3545
|
+
...r === void 0 ? {} : { detail: r }
|
|
3546
|
+
});
|
|
3534
3547
|
},
|
|
3535
3548
|
onAbandoned: e.onAbandoned ?? (async () => {}),
|
|
3536
3549
|
listRunningRuns: async (t) => {
|
|
3537
3550
|
let n = e.facade();
|
|
3538
3551
|
return n === void 0 ? [] : (await n.listRuns({
|
|
3539
|
-
|
|
3552
|
+
workflowName: t,
|
|
3540
3553
|
status: "running"
|
|
3541
3554
|
})).flatMap((e) => {
|
|
3542
|
-
if (e.
|
|
3543
|
-
let
|
|
3544
|
-
return Number.isFinite(
|
|
3555
|
+
if (e.workflowName !== t || e.status !== "running") return [];
|
|
3556
|
+
let n = e.startedAt instanceof Date ? e.startedAt.getTime() : typeof e.startedAt == "number" ? e.startedAt : Date.parse(String(e.startedAt));
|
|
3557
|
+
return Number.isFinite(n) ? [{
|
|
3558
|
+
runId: e.id,
|
|
3559
|
+
workflowName: e.workflowName,
|
|
3545
3560
|
executionId: e.executionId,
|
|
3546
|
-
|
|
3561
|
+
payload: e.payload,
|
|
3562
|
+
startedAt: n
|
|
3547
3563
|
}] : [];
|
|
3548
3564
|
});
|
|
3549
3565
|
},
|
|
@@ -3974,10 +3990,14 @@ var qc = rn({ scope: "voltro:replica-observations" }), Jc = (e) => {
|
|
|
3974
3990
|
failedAt: (e.now ?? Date.now)()
|
|
3975
3991
|
};
|
|
3976
3992
|
try {
|
|
3977
|
-
|
|
3993
|
+
let i = await n.start(t, r);
|
|
3994
|
+
return e.log?.info?.("workflow onFailure start resolved", {
|
|
3978
3995
|
workflow: e.workflowName,
|
|
3979
3996
|
onFailure: t,
|
|
3980
|
-
reason: e.reason
|
|
3997
|
+
reason: e.reason,
|
|
3998
|
+
startStatus: i.status,
|
|
3999
|
+
handlerRunId: i.id,
|
|
4000
|
+
handlerExecutionId: i.executionId
|
|
3981
4001
|
}), !0;
|
|
3982
4002
|
} catch (n) {
|
|
3983
4003
|
return e.log?.error?.("workflow onFailure could not be started", {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as e, d as t, f as n, l as r, m as i, p as a, u as o } from "./dev-
|
|
1
|
+
import { a as e, d as t, f as n, l as r, m as i, p as a, u as o } from "./dev-BfUG0jrD.js";
|
|
2
2
|
import "./dialectDriver-czCHYpeH.js";
|
|
3
3
|
export { e as buildStore, r as loadApiConfig, o as loadApiConfigDiagnosed, t as loadDiscovered, n as mergePluginRoutesInto, a as runDev, i as walk };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Xt as e, Yt as t, Zt as n } from "./dev-
|
|
1
|
+
import { Xt as e, Yt as t, Zt as n } from "./dev-BfUG0jrD.js";
|
|
2
2
|
import { Bt as r, Ht as i, T as a, Ut as o, V as s, Vt as c, t as l, u } from "./webDev-CYjhmOTZ.js";
|
|
3
|
-
import { r as d, u as f } from "./apiBuild-
|
|
3
|
+
import { r as d, u as f } from "./apiBuild-DwhySM-6.js";
|
|
4
4
|
import { S as p } from "./frameworkTableAssembly-vfkzuzEo.js";
|
|
5
5
|
import { n as m } from "./pageConvention-CMpfDN6r.js";
|
|
6
6
|
import { n as h, r as g, t as ee } from "./cliOutput-D1tSBoRM.js";
|
|
@@ -1856,7 +1856,7 @@ var le = {
|
|
|
1856
1856
|
let t = xn.get(e);
|
|
1857
1857
|
if (t !== void 0) return t;
|
|
1858
1858
|
let n = (async () => {
|
|
1859
|
-
let { walk: t, loadDiscovered: n } = await import("./dev-
|
|
1859
|
+
let { walk: t, loadDiscovered: n } = await import("./dev-BpMSAjMk.js"), r = await t(e);
|
|
1860
1860
|
return {
|
|
1861
1861
|
files: r,
|
|
1862
1862
|
discovered: await n(r, { root: e })
|
|
@@ -1981,7 +1981,7 @@ var le = {
|
|
|
1981
1981
|
}
|
|
1982
1982
|
}, J = async (r) => {
|
|
1983
1983
|
try {
|
|
1984
|
-
let { loadApiConfig: i } = await import("./dev-
|
|
1984
|
+
let { loadApiConfig: i } = await import("./dev-BpMSAjMk.js"), { discovered: a } = await U(r), o = e(await i(r)), s = {
|
|
1985
1985
|
queries: a.queries,
|
|
1986
1986
|
mutations: a.mutations,
|
|
1987
1987
|
actions: a.actions,
|
|
@@ -2065,7 +2065,7 @@ var le = {
|
|
|
2065
2065
|
}, Nn = async (e) => pt({
|
|
2066
2066
|
hasWorkflows: async () => (await U(e)).discovered.workflows.length > 0,
|
|
2067
2067
|
openStore: async () => {
|
|
2068
|
-
let { loadApiConfig: t, buildStore: n } = await import("./dev-
|
|
2068
|
+
let { loadApiConfig: t, buildStore: n } = await import("./dev-BpMSAjMk.js"), r = await t(e);
|
|
2069
2069
|
if (r === null) throw Error("no app.config.ts in this directory");
|
|
2070
2070
|
let i = await n(r, void 0);
|
|
2071
2071
|
return {
|
|
@@ -2145,7 +2145,7 @@ var le = {
|
|
|
2145
2145
|
}
|
|
2146
2146
|
}, zn = async (e) => {
|
|
2147
2147
|
try {
|
|
2148
|
-
let { loadApiConfig: t } = await import("./dev-
|
|
2148
|
+
let { loadApiConfig: t } = await import("./dev-BpMSAjMk.js"), n = (await t(e))?.doctor?.scopeVocabulary;
|
|
2149
2149
|
if (typeof n != "string") return [];
|
|
2150
2150
|
let [r, i] = n.split("#");
|
|
2151
2151
|
if (r === void 0 || i === void 0) return [];
|
|
@@ -2162,7 +2162,7 @@ var le = {
|
|
|
2162
2162
|
findings: []
|
|
2163
2163
|
});
|
|
2164
2164
|
try {
|
|
2165
|
-
let { offlineManifest: n, toInput: r } = await import("./checkCommand-
|
|
2165
|
+
let { offlineManifest: n, toInput: r } = await import("./checkCommand-nB68vIo_.js"), { buildAppGraph: i, checkAppGraph: a } = await import("./appGraph-CFmFKHb2.js"), o = await n(e), s = r(o.manifest, o.tables), c = await zn(e), l = [.../* @__PURE__ */ new Set([...s.scopes ?? [], ...c])];
|
|
2166
2166
|
if (l.length === 0) {
|
|
2167
2167
|
try {
|
|
2168
2168
|
let { loadAppSchemaInputs: t } = await import("./frameworkTableAssembly-B96WCNJA.js");
|
|
@@ -2252,7 +2252,7 @@ var le = {
|
|
|
2252
2252
|
if (n === void 0 || r.length === 0) return;
|
|
2253
2253
|
let i = [];
|
|
2254
2254
|
try {
|
|
2255
|
-
let { loadApiConfig: t } = await import("./dev-
|
|
2255
|
+
let { loadApiConfig: t } = await import("./dev-BpMSAjMk.js");
|
|
2256
2256
|
i = (await t(e))?.locales ?? [];
|
|
2257
2257
|
} catch {
|
|
2258
2258
|
return;
|
|
@@ -2314,7 +2314,7 @@ var le = {
|
|
|
2314
2314
|
}, Kn = async (e) => {
|
|
2315
2315
|
let { discovered: t } = await U(e), n = [];
|
|
2316
2316
|
try {
|
|
2317
|
-
let { loadApiConfig: t } = await import("./dev-
|
|
2317
|
+
let { loadApiConfig: t } = await import("./dev-BpMSAjMk.js");
|
|
2318
2318
|
n = ((await t(e))?.plugins ?? []).map((e) => {
|
|
2319
2319
|
let t = (e.extendSchema?.tables ?? []).map((e) => {
|
|
2320
2320
|
let t = e;
|
|
@@ -2460,7 +2460,7 @@ var le = {
|
|
|
2460
2460
|
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);
|
|
2461
2461
|
}, Qn = async (e) => {
|
|
2462
2462
|
try {
|
|
2463
|
-
let { loadApiConfig: t } = await import("./dev-
|
|
2463
|
+
let { loadApiConfig: t } = await import("./dev-BpMSAjMk.js"), { decidedSchemaReport: n } = await import("./doctorDecidedSchema-BlbWgCD_.js"), r = await t(e);
|
|
2464
2464
|
return r == null ? null : n({
|
|
2465
2465
|
...r.schema ? { declared: r.schema } : {},
|
|
2466
2466
|
...r.store === void 0 ? {} : { store: r.store },
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as e } from "./cliOutput-D1tSBoRM.js";
|
|
2
|
-
import { i as t } from "./checkCommand-
|
|
3
|
-
import { i as n, n as r } from "./codemodRunner-
|
|
2
|
+
import { i as t } from "./checkCommand-zGYZtIkJ.js";
|
|
3
|
+
import { i as n, n as r } from "./codemodRunner-D90bexh4.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";
|
package/dist/index.js
CHANGED
|
@@ -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-
|
|
2
|
+
import { o as r } from "./updateCommand-F6HFgz0i.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
|
|
@@ -108,7 +108,7 @@ server and in this shell.`);
|
|
|
108
108
|
}, m = async (e) => {
|
|
109
109
|
let t = /* @__PURE__ */ new Map();
|
|
110
110
|
try {
|
|
111
|
-
let { walk: n, loadDiscovered: r } = await import("./dev-
|
|
111
|
+
let { walk: n, loadDiscovered: r } = await import("./dev-BpMSAjMk.js"), i = await r(await n(e), { root: e }), a = [
|
|
112
112
|
...i.queries,
|
|
113
113
|
...i.mutations,
|
|
114
114
|
...i.actions,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as e } from "./apiBuild-
|
|
1
|
+
import { n as e } from "./apiBuild-DwhySM-6.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-nB68vIo_.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), {
|
|
@@ -4,12 +4,12 @@ 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
6
|
import { n as s, t as c } from "./interruptedReplace-CwnkBb2X.js";
|
|
7
|
-
import { $ as l, $t as u, A as d, At as f, B as ee, Bn as te, Bt as p, C as ne, Cn as m, Ct as re, D as ie, Dn as h, Dt as ae, E as oe, En as se, Et as g, F as _, Fn as ce, Ft as le, G as ue, Gt as de, H as fe, Hn as pe, Ht as me, I as he, In as v, It as ge, Jt as y, K as _e, Kt as ve, L as ye, Lt as b, M as be, Mn as xe, Mt as Se, N as Ce, Nn as we, Nt as Te, O as Ee, On as De, Ot as Oe, P as ke, Pn as Ae, Pt as x, Q as S, Qt as je, R as Me, Rn as Ne, Rt as Pe, S as Fe, Sn as Ie, St as Le, T as Re, Tn as ze, Tt as Be, U as Ve, Un as He, Ut as Ue, Vn as We, Vt as Ge, W as Ke, Wt as qe, X as Je, Xt as Ye, Y as Xe, Z as Ze, _ as Qe, _n as $e, _t as et, a as tt, an as nt, at as C, b as rt, bn as it, bt as at, cn as ot, ct as w, d as st, dn as T, dt as E, en as ct, et as lt, f as ut, fn as dt, ft, g as pt, gn as D, gt as mt, h as ht, hn as gt, ht as _t, i as vt, in as yt, it as bt, j as xt, jn as St, jt as Ct, k as O, kn as k, kt as wt, l as Tt, ln as Et, lt as Dt, m as Ot, mn as kt, mt as At, nn as jt, nt as Mt, on as Nt, ot as Pt, pn as Ft, pt as It, qt as Lt, rn as Rt, rt as zt, s as A, sn as Bt, st as Vt, t as j, tn as Ht, tt as Ut, un as Wt, ut as Gt, v as Kt, vn as qt, vt as Jt, w as Yt, wn as Xt, wt as Zt, x as Qt, xn as $t, xt as M, y as en, yn as tn, yt as nn, z as rn, zn as an, zt as on } from "./dev-
|
|
7
|
+
import { $ as l, $t as u, A as d, At as f, B as ee, Bn as te, Bt as p, C as ne, Cn as m, Ct as re, D as ie, Dn as h, Dt as ae, E as oe, En as se, Et as g, F as _, Fn as ce, Ft as le, G as ue, Gt as de, H as fe, Hn as pe, Ht as me, I as he, In as v, It as ge, Jt as y, K as _e, Kt as ve, L as ye, Lt as b, M as be, Mn as xe, Mt as Se, N as Ce, Nn as we, Nt as Te, O as Ee, On as De, Ot as Oe, P as ke, Pn as Ae, Pt as x, Q as S, Qt as je, R as Me, Rn as Ne, Rt as Pe, S as Fe, Sn as Ie, St as Le, T as Re, Tn as ze, Tt as Be, U as Ve, Un as He, Ut as Ue, Vn as We, Vt as Ge, W as Ke, Wt as qe, X as Je, Xt as Ye, Y as Xe, Z as Ze, _ as Qe, _n as $e, _t as et, a as tt, an as nt, at as C, b as rt, bn as it, bt as at, cn as ot, ct as w, d as st, dn as T, dt as E, en as ct, et as lt, f as ut, fn as dt, ft, g as pt, gn as D, gt as mt, h as ht, hn as gt, ht as _t, i as vt, in as yt, it as bt, j as xt, jn as St, jt as Ct, k as O, kn as k, kt as wt, l as Tt, ln as Et, lt as Dt, m as Ot, mn as kt, mt as At, nn as jt, nt as Mt, on as Nt, ot as Pt, pn as Ft, pt as It, qt as Lt, rn as Rt, rt as zt, s as A, sn as Bt, st as Vt, t as j, tn as Ht, tt as Ut, un as Wt, ut as Gt, v as Kt, vn as qt, vt as Jt, w as Yt, wn as Xt, wt as Zt, x as Qt, xn as $t, xt as M, y as en, yn as tn, yt as nn, z as rn, zn as an, zt as on } from "./dev-BfUG0jrD.js";
|
|
8
8
|
import { Yt as sn, en as cn, ft as ln, ht as un, lt as dn, mt as fn, pt as pn, qt as mn } from "./webDev-CYjhmOTZ.js";
|
|
9
9
|
import { g as hn, s as gn } from "./inspect-PcC5J-Dl.js";
|
|
10
10
|
import { n as _n } from "./cliArgs-D4p8n7EE.js";
|
|
11
11
|
import { r as vn } from "./appPort-B_HpJ_ck.js";
|
|
12
|
-
import { r as yn, u as bn } from "./apiBuild-
|
|
12
|
+
import { r as yn, u as bn } from "./apiBuild-DwhySM-6.js";
|
|
13
13
|
import { r as xn } from "./dialectDriver-czCHYpeH.js";
|
|
14
14
|
import { i as Sn, n as Cn } from "./connectionConfig-Bk9IC7D0.js";
|
|
15
15
|
import { c as wn, n as Tn, o as En } from "./seedRunner-DISBKow-.js";
|
package/dist/serveEntry.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as e, r as t, t as n } from "./codemodRunner-
|
|
1
|
+
import { n as e, r as t, t as n } from "./codemodRunner-D90bexh4.js";
|
|
2
2
|
import { basename as r, dirname as i, join as a, relative as o, resolve as s } from "node:path";
|
|
3
3
|
import { existsSync as c, readFileSync as l, readdirSync as u, statSync as d, writeFileSync as f } from "node:fs";
|
|
4
4
|
import { totalmem as p } from "node:os";
|
|
@@ -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-BpMSAjMk.js"), { outgoingFromEvents: r } = await import("./webhookDiscovery-il9ti-HE.js");
|
|
226
226
|
return r((await n(await t(e), { root: 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.
|
|
3
|
+
"version": "0.62.0",
|
|
4
4
|
"description": "The `voltro` CLI — dev server, codegen, migrations, project scaffolding, agent-docs seeding, and production serve.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"voltro",
|
|
@@ -910,6 +910,12 @@
|
|
|
910
910
|
"title": "Sentry rpc spans now join the active browser transaction",
|
|
911
911
|
"kind": "manual"
|
|
912
912
|
},
|
|
913
|
+
{
|
|
914
|
+
"version": "0.62.0",
|
|
915
|
+
"id": "0.62.0/01_finish_timeout_uses_durable_cancellation",
|
|
916
|
+
"title": "Finish timeouts use durable, once-only cancellation",
|
|
917
|
+
"kind": "manual"
|
|
918
|
+
},
|
|
913
919
|
{
|
|
914
920
|
"version": "0.7.0",
|
|
915
921
|
"id": "0.7.0/01_row-filter-load-failure",
|
|
@@ -956,24 +962,24 @@
|
|
|
956
962
|
"@effect/platform-node": "^0.108.0",
|
|
957
963
|
"@effect/sql": "^0.52.0",
|
|
958
964
|
"@effect/workflow": "^0.19.0",
|
|
959
|
-
"@voltro/ai": "0.
|
|
960
|
-
"@voltro/cache": "0.
|
|
961
|
-
"@voltro/client": "0.
|
|
962
|
-
"@voltro/content": "0.
|
|
963
|
-
"@voltro/data-transfer": "0.
|
|
964
|
-
"@voltro/database": "0.
|
|
965
|
-
"@voltro/env": "0.
|
|
966
|
-
"@voltro/kv": "0.
|
|
967
|
-
"@voltro/logger": "0.
|
|
968
|
-
"@voltro/plugin-auth": "0.
|
|
969
|
-
"@voltro/plugin-broadcast": "0.
|
|
970
|
-
"@voltro/plugin-mail": "0.
|
|
971
|
-
"@voltro/plugin-storage": "0.
|
|
972
|
-
"@voltro/plugin-webhooks": "0.
|
|
973
|
-
"@voltro/protocol": "0.
|
|
974
|
-
"@voltro/runtime": "0.
|
|
975
|
-
"@voltro/serverless": "0.
|
|
976
|
-
"@voltro/workflow": "0.
|
|
965
|
+
"@voltro/ai": "0.62.0",
|
|
966
|
+
"@voltro/cache": "0.62.0",
|
|
967
|
+
"@voltro/client": "0.62.0",
|
|
968
|
+
"@voltro/content": "0.62.0",
|
|
969
|
+
"@voltro/data-transfer": "0.62.0",
|
|
970
|
+
"@voltro/database": "0.62.0",
|
|
971
|
+
"@voltro/env": "0.62.0",
|
|
972
|
+
"@voltro/kv": "0.62.0",
|
|
973
|
+
"@voltro/logger": "0.62.0",
|
|
974
|
+
"@voltro/plugin-auth": "0.62.0",
|
|
975
|
+
"@voltro/plugin-broadcast": "0.62.0",
|
|
976
|
+
"@voltro/plugin-mail": "0.62.0",
|
|
977
|
+
"@voltro/plugin-storage": "0.62.0",
|
|
978
|
+
"@voltro/plugin-webhooks": "0.62.0",
|
|
979
|
+
"@voltro/protocol": "0.62.0",
|
|
980
|
+
"@voltro/runtime": "0.62.0",
|
|
981
|
+
"@voltro/serverless": "0.62.0",
|
|
982
|
+
"@voltro/workflow": "0.62.0",
|
|
977
983
|
"chokidar": "^5.0.0",
|
|
978
984
|
"ioredis": "^5.11.1",
|
|
979
985
|
"tinyglobby": "^0.2.17",
|
package/templates/AGENTS.md
CHANGED
|
@@ -749,7 +749,7 @@ each plugin's own README.
|
|
|
749
749
|
|
|
750
750
|
| Topic | Open | Summary |
|
|
751
751
|
|---|---|---|
|
|
752
|
-
| **What's new in 0.
|
|
752
|
+
| **What's new in 0.62.0** | `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. |
|
|
753
753
|
| 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. |
|
|
754
754
|
| 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. |
|
|
755
755
|
| 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.
|
|
12
|
+
| **What's new in 0.62.0** | `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. |
|
|
@@ -1303,6 +1303,38 @@ export default (input: { message: string }) =>
|
|
|
1303
1303
|
|
|
1304
1304
|
`streamText` emits `AgentEvent` elements. The `_tag`s are: `token` (text delta), `reasoning` (the model's thinking, separate from the answer), `toolCall`, `toolResult`, `source` (a cited RAG/web source — `url` or `document` variant), `file` (an inline file the model produced, usually an image: `mediaType` + base64 `data`), `message`, `error` (carries `retryable`), and `done`. The stream NEVER fails — an upstream error arrives as a terminal `error` event.
|
|
1305
1305
|
|
|
1306
|
+
## Smooth Streaming
|
|
1307
|
+
|
|
1308
|
+
Provider chunks are transport artifacts: one provider may send a word at a time while another releases a whole paragraph in a burst. Opt into server-side semantic smoothing when the UI should receive predictable word or line chunks:
|
|
1309
|
+
|
|
1310
|
+
```ts
|
|
1311
|
+
streamText({
|
|
1312
|
+
prompt: input.message,
|
|
1313
|
+
smooth: {
|
|
1314
|
+
chunking: 'word', // default; alternatively 'line'
|
|
1315
|
+
delayMs: 10, // default; null rechunks without adding delay
|
|
1316
|
+
},
|
|
1317
|
+
})
|
|
1318
|
+
```
|
|
1319
|
+
|
|
1320
|
+
`smooth` is framework-owned and deliberately narrower than the AI SDK's experimental transform surface. It smooths both text and reasoning, flushes pending content before tool/source/file/error/done events, and shares the stream's abort signal. Omit it or set `smooth: false` to preserve provider-native chunks and latency.
|
|
1321
|
+
|
|
1322
|
+
With `resumableStreamText`, put `smooth` inside `options`. Smoothing happens before `AgentEvent` conversion and before the append-only journal, so a reconnect replays the exact same `SeqEvent` boundaries seen live:
|
|
1323
|
+
|
|
1324
|
+
```ts
|
|
1325
|
+
resumableStreamText({
|
|
1326
|
+
streamId: input.streamId,
|
|
1327
|
+
store,
|
|
1328
|
+
options: {
|
|
1329
|
+
prompt: input.message,
|
|
1330
|
+
smooth: { chunking: 'word', delayMs: 10 },
|
|
1331
|
+
},
|
|
1332
|
+
fromSeq: input.fromSeq,
|
|
1333
|
+
})
|
|
1334
|
+
```
|
|
1335
|
+
|
|
1336
|
+
Smoothing changes only text/reasoning boundaries and timing. Content, usage, finish reason, tool ids, and cost accounting stay unchanged. The client should still batch rendering (for example, at most once per animation frame); server smoothing normalizes semantics, it does not replace UI backpressure.
|
|
1337
|
+
|
|
1306
1338
|
## Cancel, retry
|
|
1307
1339
|
|
|
1308
1340
|
A "Stop" button needs to end an in-flight run out of band. Pass a `streamId` and call `cancelStream(streamId)` from a separate action/mutation — it aborts the provider call (token spend stops) and the stream ends on a terminal, non-retryable `cancelled` error.
|
|
@@ -292,7 +292,9 @@ _Inspect traces and logs from the shell — flags, the --trace <id> end-to-end c
|
|
|
292
292
|
|
|
293
293
|
## `voltro logs`
|
|
294
294
|
|
|
295
|
-
Every `voltro dev` / `voltro start` instance buffers the last **2000** server-side `@voltro/logger` records
|
|
295
|
+
Every `voltro dev` / `voltro start` instance buffers the last **2000** server-side `@voltro/logger` records. During `voltro dev`, the browser console bridge also forwards browser console lines into that buffer.
|
|
296
|
+
|
|
297
|
+
The browser-to-inspect bridges are deliberately limited to development builds. Setting `localStorage.framework_debug = '1'` in a production bundle enables the local `[fw …]` connection timeline only; it never starts `clientLog` POSTs or an inspect `EventSource`. In development, both diagnostic transports are single-flight, rate-limited, and bounded: permanent `4xx` responses disable them for the page, while transient failures use exponential backoff and open a circuit after five consecutive failures. The SSE relay probes status and content type before creating an `EventSource`, then explicitly closes a failed source before a bounded retry.
|
|
296
298
|
|
|
297
299
|
```sh
|
|
298
300
|
voltro logs # last 100 from every running process
|
|
@@ -630,6 +632,13 @@ proxy path, cleared the moment the stream opens; the proxy moves it into an
|
|
|
630
632
|
`Authorization` header. Nothing about the token ever appears in a URL, and the
|
|
631
633
|
app receives a header like any other caller.
|
|
632
634
|
|
|
635
|
+
That dashboard proxy is also why a production app page must not open the
|
|
636
|
+
inspect stream merely because `localStorage.framework_debug` is set. The app
|
|
637
|
+
page has no bearer-capable `EventSource` transport and no authority to mint the
|
|
638
|
+
dashboard cookie. Voltro therefore keeps its in-page console and SSE relays
|
|
639
|
+
development-only; the persisted production flag affects local framework
|
|
640
|
+
console output, not inspect traffic.
|
|
641
|
+
|
|
633
642
|
## In the dashboards
|
|
634
643
|
|
|
635
644
|
Both dashboards unwrap `.data` in their fetch layer and keep the envelope. A
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# What's new in 0.
|
|
1
|
+
# What's new in 0.62.0
|
|
2
2
|
|
|
3
3
|
Read this FIRST when a task touches an area you have not worked in recently.
|
|
4
4
|
It is the cheapest way to notice that the framework grew the thing you were
|
|
@@ -9,21 +9,14 @@ BREAKING entries name a codemod; run `voltro update` to apply it.
|
|
|
9
9
|
|
|
10
10
|
### ⚠ BREAKING
|
|
11
11
|
|
|
12
|
-
- **@voltro/
|
|
12
|
+
- **@voltro/workflow, @voltro/cli, @voltro/voltro** — `timeouts.finish` now filters running rows by the declared workflow, durably cancels each run before notification, and emits `onFailure` only for the successful terminal transition. Finish-timeout reports carry the run's stable `runId`, `executionId`, and original payload; handler-start logs expose the returned status instead of unconditionally claiming a new start.
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
- **@voltro/plugin-sentry, @voltro/cli** — Browser RPC spans now join the active page/navigation transaction and link to the Effect/server trace instead of creating one root transaction per call; `tracesSampleRate`, `browserTracing`, and the new `rpcSpans` switch control the resulting browser trace volume.
|
|
14
|
+
Low-level adapters that construct `AdmissionDrainDeps` must update `cancelRun` to accept the run object and return whether it made the terminal transition, and return the run identity, workflow name, and payload from `listRunningRuns`. Ordinary workflow declarations need no source change; `voltro update` prints the adapter migration only when the project references this low-level surface.
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
### Added
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- **@voltro/cli** — **Six SSR failure sites report to Sentry, not three.**
|
|
22
|
-
|
|
23
|
-
0.60.0 gave the web server its own Sentry and wired the three loud sites: the SSR shell throw, the SPA layout shell throw, and the general render error (which covers a loader throw). The docs said "shell throw, loader throw, PPR/SWR refresh" — and an enumeration in a claim is read as exhaustive.
|
|
18
|
+
- **@voltro/ai** — `streamText` and `resumableStreamText` now accept an opt-in `smooth` configuration for word- or line-based text and reasoning chunks. Smoothing runs before resumable journaling, preserves provider-native behavior when omitted, and shares the stream abort signal so cancellation also stops a pending smoothing delay.
|
|
24
19
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
They carry their own `voltro.stage` (`not-found-render`, `ppr-holes`, `swr-refresh`), so a quota-conscious project can drop them by stage without losing the three that fail the request.
|
|
20
|
+
### Fixed
|
|
28
21
|
|
|
29
|
-
|
|
22
|
+
- **@voltro/web** — Production `framework_debug` now enables local framework diagnostics without opening browser-to-inspect HTTP or SSE transports. Development log relays are single-flight and rate-limited, classify permanent response failures, back off transient failures, expose dropped-log counts, and open a page-scoped circuit after repeated failure; the SSE relay also probes the endpoint before creating an `EventSource` and closes failed sources before retrying.
|
|
@@ -1459,7 +1459,7 @@ timeouts: { start: '1 hour', finish: '10 minutes' }
|
|
|
1459
1459
|
- **`start`** bounds how long a start may sit in the admission queue, measured from the **first** arrival in its group. A debounced run that never gets a quiet moment is a job that silently did not happen.
|
|
1460
1460
|
- **`finish`** bounds the run itself once admitted, and also tightens the crash backstop on its concurrency slot.
|
|
1461
1461
|
|
|
1462
|
-
Both
|
|
1462
|
+
Both reach the same `onFailure` signal as an exhausted retry. `timeouts.start` removes the queued intent before a run exists. `timeouts.finish` durably changes the running row to `cancelled`; only the sweep call that wins that terminal transition emits `onFailure`. Seeing the same old row again does not emit another report. Declaring `timeouts.start` on a workflow that cannot defer is a boot error — it would never fire.
|
|
1463
1463
|
|
|
1464
1464
|
## onFailure — the signal that replaces the sweep
|
|
1465
1465
|
|
|
@@ -1494,10 +1494,15 @@ export const narrationFailed = workflow({
|
|
|
1494
1494
|
failedAt: Schema.Number,
|
|
1495
1495
|
}),
|
|
1496
1496
|
success: Schema.Void,
|
|
1497
|
-
idempotencyKey: ({ runId, failedAt }) =>
|
|
1497
|
+
idempotencyKey: ({ workflow, runId, failedAt }) =>
|
|
1498
|
+
runId === null ? `failed-before-run:${workflow}:${failedAt}` : `failed-run:${runId}`,
|
|
1498
1499
|
})
|
|
1499
1500
|
```
|
|
1500
1501
|
|
|
1502
|
+
For failures of an existing run — including `timeouts.finish` — `runId`, `executionId`, and the original `payload` are populated. Use `runId` as the stable idempotency identity. Pre-run failures (`timeouts.start` and a queued start whose workflow was removed) have both IDs set to `null`; they are emitted once when their durable pending row is consumed.
|
|
1503
|
+
|
|
1504
|
+
The framework logs the result of starting the handler as `workflow onFailure start resolved`. Its metadata includes `startStatus`, `handlerRunId`, and `handlerExecutionId`, so a queued, dropped, or singleton-skipped start is not mislabeled as newly started.
|
|
1505
|
+
|
|
1501
1506
|
There is no `onFailure` for an `onFailure` — a handler that fails is logged and not re-notified, because the alternative is one run per failure per level with no floor.
|
|
1502
1507
|
|
|
1503
1508
|
## encryptSteps
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@effect/platform": "^0.97.0",
|
|
14
14
|
"@effect/rpc": "^0.76.0",
|
|
15
|
-
"@voltro/ai": "0.
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/protocol": "0.
|
|
20
|
-
"@voltro/runtime": "0.
|
|
15
|
+
"@voltro/ai": "0.62.0",
|
|
16
|
+
"@voltro/cli": "0.62.0",
|
|
17
|
+
"@voltro/database": "0.62.0",
|
|
18
|
+
"@voltro/env": "0.62.0",
|
|
19
|
+
"@voltro/protocol": "0.62.0",
|
|
20
|
+
"@voltro/runtime": "0.62.0",
|
|
21
21
|
"effect": "^3.22.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
@@ -13,17 +13,17 @@
|
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@effect/platform": "^0.97.0",
|
|
15
15
|
"@effect/rpc": "^0.76.0",
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/plugin-auth": "0.
|
|
20
|
-
"@voltro/protocol": "0.
|
|
21
|
-
"@voltro/runtime": "0.
|
|
22
|
-
"@voltro/sql-postgres": "0.
|
|
16
|
+
"@voltro/cli": "0.62.0",
|
|
17
|
+
"@voltro/database": "0.62.0",
|
|
18
|
+
"@voltro/env": "0.62.0",
|
|
19
|
+
"@voltro/plugin-auth": "0.62.0",
|
|
20
|
+
"@voltro/protocol": "0.62.0",
|
|
21
|
+
"@voltro/runtime": "0.62.0",
|
|
22
|
+
"@voltro/sql-postgres": "0.62.0",
|
|
23
23
|
"effect": "^3.22.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@voltro/testing": "0.
|
|
26
|
+
"@voltro/testing": "0.62.0",
|
|
27
27
|
"typescript": "^6.0.3",
|
|
28
28
|
"@vitest/coverage-v8": "^4.1.10",
|
|
29
29
|
"vitest": "^4.1.10"
|
|
@@ -16,16 +16,16 @@
|
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@effect/platform": "^0.97.0",
|
|
18
18
|
"@effect/rpc": "^0.76.0",
|
|
19
|
-
"@voltro/cli": "0.
|
|
20
|
-
"@voltro/database": "0.
|
|
21
|
-
"@voltro/env": "0.
|
|
22
|
-
"@voltro/plugin-multitenancy": "0.
|
|
23
|
-
"@voltro/protocol": "0.
|
|
24
|
-
"@voltro/runtime": "0.
|
|
19
|
+
"@voltro/cli": "0.62.0",
|
|
20
|
+
"@voltro/database": "0.62.0",
|
|
21
|
+
"@voltro/env": "0.62.0",
|
|
22
|
+
"@voltro/plugin-multitenancy": "0.62.0",
|
|
23
|
+
"@voltro/protocol": "0.62.0",
|
|
24
|
+
"@voltro/runtime": "0.62.0",
|
|
25
25
|
"effect": "^3.22.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@voltro/testing": "0.
|
|
28
|
+
"@voltro/testing": "0.62.0",
|
|
29
29
|
"typescript": "^6.0.3",
|
|
30
30
|
"@vitest/coverage-v8": "^4.1.10",
|
|
31
31
|
"vitest": "^4.1.10"
|
|
@@ -13,16 +13,16 @@
|
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@effect/platform": "^0.97.0",
|
|
15
15
|
"@effect/rpc": "^0.76.0",
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/plugin-deactivation": "0.
|
|
20
|
-
"@voltro/protocol": "0.
|
|
21
|
-
"@voltro/runtime": "0.
|
|
16
|
+
"@voltro/cli": "0.62.0",
|
|
17
|
+
"@voltro/database": "0.62.0",
|
|
18
|
+
"@voltro/env": "0.62.0",
|
|
19
|
+
"@voltro/plugin-deactivation": "0.62.0",
|
|
20
|
+
"@voltro/protocol": "0.62.0",
|
|
21
|
+
"@voltro/runtime": "0.62.0",
|
|
22
22
|
"effect": "^3.22.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/testing": "0.
|
|
25
|
+
"@voltro/testing": "0.62.0",
|
|
26
26
|
"typescript": "^6.0.3",
|
|
27
27
|
"@vitest/coverage-v8": "^4.1.10",
|
|
28
28
|
"vitest": "^4.1.10"
|