@voltro/cli 0.60.0 → 0.61.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 +25 -0
- package/dist/apiBuild-5U7PxjLa.js +2 -0
- package/dist/{apiBuild-BU5cd-Fn.js → apiBuild-C5HhMAEm.js} +2 -2
- package/dist/bin.js +1 -1
- package/dist/{build-BxAsLzyU.js → build-DQr7SsKK.js} +7 -7
- package/dist/{checkCommand-C1CQc8lD.js → checkCommand-ByaOhdc8.js} +1 -1
- package/dist/{checkCommand-DC7k1_hP.js → checkCommand-CvSheSdb.js} +3 -3
- package/dist/{codegenCommand-kS3Twuc9.js → codegenCommand-CI0mpjxo.js} +1 -1
- package/dist/{codemodRunner-ClUqkhvR.js → codemodRunner-Drb-H-jr.js} +211 -161
- package/dist/{commands-Ro4hYBHD.js → commands-pCItjdHG.js} +21 -21
- package/dist/{dashboardCommand-t8Qsebjr.js → dashboardCommand-O-ToEgiH.js} +3 -3
- package/dist/{dataCommand-hNOGKz4K.js → dataCommand-mn1Zc88W.js} +1 -1
- package/dist/{dev-Ce2gEziv.js → dev-dSH-Pkb2.js} +1 -1
- package/dist/{dev-Dff_pdik.js → dev-kn9-7RXZ.js} +1 -1
- package/dist/doctorCommand-BVat2ejT.js +2 -0
- package/dist/{doctorCommand-CGjefPmk.js → doctorCommand-ClB7Ucz5.js} +13 -13
- package/dist/{dormancyCommand-DYgI0Kf-.js → dormancyCommand-DZupfuq-.js} +1 -1
- package/dist/{embeddingsCommand-yJivQSrI.js → embeddingsCommand-D8_GquVX.js} +1 -1
- package/dist/{envCommand-ORJUf8r_.js → envCommand-DRjVSXRp.js} +2 -2
- package/dist/{evolveCommand-CThb0EZZ.js → evolveCommand-Cb0C2b3V.js} +2 -2
- package/dist/index.js +1 -1
- package/dist/{infoCommand-a0WkKcUY.js → infoCommand-BlKnoY2D.js} +1 -1
- package/dist/{probeCommand-BUYzc0CT.js → probeCommand-DYsOFm62.js} +1 -1
- package/dist/{runtimeTrace-DDuKJgVi.js → runtimeTrace-BI3kdicc.js} +1 -1
- package/dist/{sdkgen-vq1fF9D_.js → sdkgen-DZ4zCtV4.js} +1 -1
- package/dist/serveCommand-CwK_6Wxt.js +2 -0
- package/dist/{serveCommand-Dr4KXmTS.js → serveCommand-DnxqCQ16.js} +3 -3
- package/dist/serveEntry.js +1 -1
- package/dist/{start-BhoDQ25C.js → start-DE4ixCTi.js} +1 -1
- package/dist/{start-CcdPRG8L.js → start-bqT4GRH0.js} +427 -418
- package/dist/startEntry.js +1 -1
- package/dist/{updateCommand-D9avpQFT.js → updateCommand-B18ZQNFg.js} +1 -1
- package/dist/updateCommand-B4EgDD-m.js +2 -0
- package/dist/{webDev-CBN9KkyQ.js → webDev-CYjhmOTZ.js} +1 -1
- package/dist/{webDev-Bzb8ZFus.js → webDev-CuG3Ged-.js} +1 -1
- package/dist/{webhooksCommand-BPJQOGTe.js → webhooksCommand-Bs-HZ4wY.js} +1 -1
- package/package.json +31 -19
- package/templates/AGENTS.md +2 -2
- package/templates/agent-docs/_index.md +2 -2
- package/templates/agent-docs/_manifest.json +1 -1
- package/templates/agent-docs/data.md +10 -2
- package/templates/agent-docs/observability.md +7 -1
- package/templates/agent-docs/plugins/sentry.md +29 -12
- package/templates/agent-docs/schema-driven-ui.md +38 -10
- package/templates/agent-docs/whats-new.md +10 -43
- 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-B9OvhITV.js +0 -2
- package/dist/doctorCommand-DXnNpKQT.js +0 -2
- package/dist/serveCommand-1R52mo6F.js +0 -2
- package/dist/updateCommand-QMOirvXC.js +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -39,6 +39,31 @@ _Changes staged for the next release accumulate here (rolled up from
|
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|
|
42
|
+
## [0.61.0] — 2026-08-31
|
|
43
|
+
|
|
44
|
+
### ⚠ BREAKING
|
|
45
|
+
|
|
46
|
+
- **@voltro/client, @voltro/web, @voltro/cli** — `RpcError.kind` now distinguishes transport, handler, client, and unknown failures; manually emitted events must add the field, while `useConnectionStatus` now degrades only for transport failures and clears on the next rpc success.
|
|
47
|
+
|
|
48
|
+
**`voltro update` carries you across this** — codemod `0.61.0/01_rpc_errors_have_kinds`. If you pin versions by hand and never run it, print the notes without changing anything: `voltro update --codemods-only --from <your current version> --dry-run` (this one ships in 0.61.0).
|
|
49
|
+
- **@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.
|
|
50
|
+
|
|
51
|
+
**`voltro update` carries you across this** — codemod `0.61.0/02_sentry_rpc_spans_join_page`. If you pin versions by hand and never run it, print the notes without changing anything: `voltro update --codemods-only --from <your current version> --dry-run` (this one ships in 0.61.0).
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- **@voltro/cli** — **Six SSR failure sites report to Sentry, not three.**
|
|
56
|
+
|
|
57
|
+
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.
|
|
58
|
+
|
|
59
|
+
The other three were `warn`-level and reported to nobody: a failed PPR hole pass, a failed background SWR refresh, and a `not-found.tsx` that throws while rendering. They are quieter because the request still serves something — stale HTML, an unfilled hole, a plain 404 — which says something about the REQUEST and nothing about who else could find out. The answer to that is nobody: none of them reaches a browser boundary, so the pod's stdout was the only record.
|
|
60
|
+
|
|
61
|
+
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.
|
|
62
|
+
|
|
63
|
+
`webSentry.test.ts` now fails if a render-path `log.error`/`log.warn` gains no reporter beside it — the property, rather than the six call sites.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
42
67
|
## [0.60.0] — 2026-08-31
|
|
43
68
|
|
|
44
69
|
### ⚠ BREAKING
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { m as e } from "./dev-
|
|
2
|
-
import { Qt as t } from "./webDev-
|
|
1
|
+
import { m as e } from "./dev-dSH-Pkb2.js";
|
|
2
|
+
import { Qt as t } from "./webDev-CYjhmOTZ.js";
|
|
3
3
|
import { t as n } from "./dialectDriver-czCHYpeH.js";
|
|
4
4
|
import { dirname as r, isAbsolute as i, join as a, relative as o, resolve as s } from "node:path";
|
|
5
5
|
import { existsSync as c, promises as l, readFileSync as u } from "node:fs";
|
package/dist/bin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { r as e } from "./commands-
|
|
2
|
+
import { r as e } from "./commands-pCItjdHG.js";
|
|
3
3
|
import { a as t } from "./nodeEnvironment-cGFAj1J8.js";
|
|
4
4
|
import { t as n } from "./loadEnv-D9nEOClM.js";
|
|
5
5
|
import { n as r } from "./cliError-BmdYnghb.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { An as e } from "./dev-
|
|
2
|
-
import { At as t, Ct as n, D as r, Dt as i, Et as a, J as o, K as s, Mt as c, Nt as l, Ot as u, Qt as d, St as f, T as p, Tt as m, Yt as h, _t as g, c as _, et as v, gt as y, h as b, kt as x, m as S, nt as C, o as w, q as T, tt as E, u as D, vt as ee, w as te, wt as O, zt as k } from "./webDev-
|
|
3
|
-
import { d as A, i as j, o as M, s as N } from "./apiBuild-
|
|
1
|
+
import { An as e } from "./dev-dSH-Pkb2.js";
|
|
2
|
+
import { At as t, Ct as n, D as r, Dt as i, Et as a, J as o, K as s, Mt as c, Nt as l, Ot as u, Qt as d, St as f, T as p, Tt as m, Yt as h, _t as g, c as _, et as v, gt as y, h as b, kt as x, m as S, nt as C, o as w, q as T, tt as E, u as D, vt as ee, w as te, wt as O, zt as k } from "./webDev-CYjhmOTZ.js";
|
|
3
|
+
import { d as A, i as j, o as M, s as N } from "./apiBuild-C5HhMAEm.js";
|
|
4
4
|
import { t as P } from "./cliRuntime-Dh7UDinH.js";
|
|
5
5
|
import { a as F } from "./renderModeScan-43yQ2opo.js";
|
|
6
6
|
import { o as I } from "./imagePipeline-CBZmjT4i.js";
|
|
@@ -659,7 +659,7 @@ var X = W({ scope: "voltro:build" }), ie = async (e, t = {}) => {
|
|
|
659
659
|
file: n.file,
|
|
660
660
|
reason: n.reason
|
|
661
661
|
});
|
|
662
|
-
let { regenerateRpcGroup: r } = await import("./codegenCommand-
|
|
662
|
+
let { regenerateRpcGroup: r } = await import("./codegenCommand-CI0mpjxo.js"), i = await r(e);
|
|
663
663
|
if (i.kind === "refused") {
|
|
664
664
|
$.warn("could not regenerate the rpc group — building against what is on disk", { reason: i.reason });
|
|
665
665
|
return;
|
|
@@ -671,7 +671,7 @@ var X = W({ scope: "voltro:build" }), ie = async (e, t = {}) => {
|
|
|
671
671
|
}, Te = async (e) => {
|
|
672
672
|
let n = await S(e, { preferSource: !0 });
|
|
673
673
|
if (!n) {
|
|
674
|
-
let { loadApiConfigDiagnosed: t } = await import("./dev-
|
|
674
|
+
let { loadApiConfigDiagnosed: t } = await import("./dev-kn9-7RXZ.js"), n = await t(e), r = n.config;
|
|
675
675
|
if (!r && n.present) return $.error("app.config.ts is present but could not be loaded — this is NOT a statement about the app's type", { path: z(e, "app.config.ts") }, n.error), {
|
|
676
676
|
ran: !0,
|
|
677
677
|
exitCode: 1
|
|
@@ -688,7 +688,7 @@ var X = W({ scope: "voltro:build" }), ie = async (e, t = {}) => {
|
|
|
688
688
|
ran: !0,
|
|
689
689
|
exitCode: 1
|
|
690
690
|
};
|
|
691
|
-
let { runApiBuild: i, runServeBundleBuild: a } = await import("./apiBuild-
|
|
691
|
+
let { runApiBuild: i, runServeBundleBuild: a } = await import("./apiBuild-5U7PxjLa.js");
|
|
692
692
|
await i(e, { sourcemaps: n.emit });
|
|
693
693
|
try {
|
|
694
694
|
await a(e, { sourcemaps: n.emit });
|
|
@@ -1055,7 +1055,7 @@ var X = W({ scope: "voltro:build" }), ie = async (e, t = {}) => {
|
|
|
1055
1055
|
return t.ran ? t.exitCode : (yield* K.logError("no voltro app found at this path", { hint: "looked for an app.config.ts with `type: 'web'` or `type: 'api'` — a web app gets the vite build + prerender + start bundle, an api gets the precompiled serve bundle" }), 1);
|
|
1056
1056
|
}), De = async (t) => {
|
|
1057
1057
|
if (G("build"), t.includes("--target")) {
|
|
1058
|
-
let { runSdkBuildCommand: e } = await import("./sdkgen-
|
|
1058
|
+
let { runSdkBuildCommand: e } = await import("./sdkgen-DZ4zCtV4.js");
|
|
1059
1059
|
return e(t);
|
|
1060
1060
|
}
|
|
1061
1061
|
let n = t.find((e) => !e.startsWith("-")) ?? process.cwd(), r = await P(Ee(n), { scope: "voltro:build" });
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as e, i as t, o as n } from "./checkCommand-
|
|
1
|
+
import { a as e, i as t, o as n } from "./checkCommand-CvSheSdb.js";
|
|
2
2
|
export { t as offlineManifest, e as runCheckCommand, n as toInput };
|
|
@@ -4,7 +4,7 @@ import { r } from "./appGraph-yRuKjOba.js";
|
|
|
4
4
|
import { n as i } from "./cliOutput-D1tSBoRM.js";
|
|
5
5
|
import { n as a, o, r as s, t as c } from "./inspectFetch-BU1NyzxV.js";
|
|
6
6
|
import { r as l } from "./fileTaxonomy-CbyMQYx_.js";
|
|
7
|
-
import { S as u } from "./doctorCommand-
|
|
7
|
+
import { S as u } from "./doctorCommand-ClB7Ucz5.js";
|
|
8
8
|
import { resolve as d } from "node:path";
|
|
9
9
|
import { readdirSync as f, statSync as p } from "node:fs";
|
|
10
10
|
import { isReactivityChannelKey as m } from "@voltro/protocol";
|
|
@@ -170,9 +170,9 @@ var h = (e) => (e === void 0 ? [] : typeof e == "string" ? [e] : e).filter((e) =
|
|
|
170
170
|
let t = e.severity === "error" ? "✗ error" : "⚠ warn", n = e.file ? ` (${e.file})` : "";
|
|
171
171
|
return `${t} ${e.rule} ${e.node}${n}\n ${e.breaks.join("; ")}\n fix: ${e.fix}`;
|
|
172
172
|
}).join("\n"), O = async (e) => {
|
|
173
|
-
let { walk: t, loadDiscovered: n, loadApiConfig: r } = await import("./dev-
|
|
173
|
+
let { walk: t, loadDiscovered: n, loadApiConfig: r } = await import("./dev-kn9-7RXZ.js"), { buildRpcEntry: i } = await import("./manifestBuild-AUh31bFU.js"), { buildCapabilityManifest: a } = await import("./inspect-CZvsmp8t.js"), { relative: o } = await import("node:path"), s = await n(await t(e), { root: e }), c = await r(e).then((e) => e?.plugins ?? []).catch(() => []);
|
|
174
174
|
try {
|
|
175
|
-
let { mergePluginRoutesInto: e } = await import("./dev-
|
|
175
|
+
let { mergePluginRoutesInto: e } = await import("./dev-kn9-7RXZ.js");
|
|
176
176
|
e({
|
|
177
177
|
plugins: c,
|
|
178
178
|
queries: s.queries,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { In as e, J as t, Ln as n, d as r, u as i } from "./dev-
|
|
1
|
+
import { In as e, J as t, Ln as n, d as r, u as i } from "./dev-dSH-Pkb2.js";
|
|
2
2
|
import { n as a } from "./frameworkTableAssembly-vfkzuzEo.js";
|
|
3
3
|
import { i as o, r as s } from "./codegen-Bth5lUTU.js";
|
|
4
4
|
import { n as c, r as l } from "./mobileCommand-D9O6iq3D.js";
|