@voltro/cli 0.54.0 → 0.56.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 +639 -2
- package/bin/voltro.mjs +24 -0
- package/dist/{apiBuild-DTWp0S_q.js → apiBuild-Bdaetr37.js} +119 -88
- package/dist/apiBuild-Vw1figjO.js +2 -0
- package/dist/bin.js +1 -1
- package/dist/{build-D4ygSbnV.js → build-CI36wL4R.js} +339 -314
- package/dist/buildReport-52gHKgfO.js +64 -0
- package/dist/{checkCommand-Dg1G7Gwd.js → checkCommand-CAwFXrxA.js} +6 -6
- package/dist/{checkCommand-L7DTlpIF.js → checkCommand-D0QV_zM_.js} +1 -1
- package/dist/{clusterCmd-DrVFCzSj.js → clusterCmd-CdLB1GkT.js} +1 -1
- package/dist/{codegen-DSLM8Su9.js → codegen-Bth5lUTU.js} +76 -64
- package/dist/codegen-DbH7NbCR.js +2 -0
- package/dist/{codegenCommand-CG_Vx4lc.js → codegenCommand-CidbQzbv.js} +15 -14
- package/dist/{codemodRunner-Cd4xkC6u.js → codemodRunner-BlQPfjzA.js} +277 -0
- package/dist/{commands-6Kzi92Np.js → commands-CWjfThXv.js} +35 -35
- package/dist/{dashboardCommand-Cq1PWvI1.js → dashboardCommand-BekcY5Ls.js} +3 -3
- package/dist/{dataCommand-DYzW8vkv.js → dataCommand-2pccgbIy.js} +267 -195
- package/dist/{dbCommand-B4NWZtGL.js → dbCommand-DpK_vQET.js} +457 -441
- package/dist/dbCommand-DrycGWWt.js +2 -0
- package/dist/{dev-cKUiZZsB.js → dev-B9Gz0k85.js} +1 -1
- package/dist/{dev-CmuvUKRq.js → dev-Dw263KPu.js} +2598 -2452
- package/dist/doctorCommand-BMWs6aVm.js +2 -0
- package/dist/{doctorCommand-DCiFVMtZ.js → doctorCommand-aR_bFmIi.js} +353 -251
- package/dist/{dormancyCommand-w1TrmgYP.js → dormancyCommand-eXTQMbHU.js} +1 -1
- package/dist/{embeddingsCommand-CMgPyRTr.js → embeddingsCommand-CTmiQvwa.js} +1 -1
- package/dist/{envCommand-Cyynmcfa.js → envCommand-BDUgV7EM.js} +12 -12
- package/dist/{evolveCommand-BwvQ8dVH.js → evolveCommand-YV8qW1LU.js} +2 -2
- package/dist/frameworkTableAssembly-CGNC0qr7.js +2 -0
- package/dist/{frameworkTableAssembly-D7LJuALW.js → frameworkTableAssembly-DNOFXfEQ.js} +102 -100
- package/dist/index.js +1 -1
- package/dist/{infoCommand-DlYlUPqs.js → infoCommand-BjVXpMlP.js} +1 -1
- package/dist/inspect-CNYvNXPU.js +1484 -0
- package/dist/inspect-S2rWy1Ys.js +2 -0
- package/dist/{inspectCmd-niF97fAq.js → inspectCmd-CP-G0sVK.js} +1 -1
- package/dist/{inspectFetch-EMuhTG_9.js → inspectFetch-BU1NyzxV.js} +36 -24
- package/dist/{inspectMetrics-CGF94puw.js → inspectMetrics-BY0Sjb2F.js} +19 -19
- package/dist/interruptedReplace-CwnkBb2X.js +41 -0
- package/dist/interruptedReplace-qzmFI020.js +2 -0
- package/dist/{logsCmd-B6oNsfaZ.js → logsCmd-BU8uCdys.js} +1 -1
- package/dist/{manifestBuild-Cqgsx2bM.js → manifestBuild-CEkjfpwc.js} +1 -1
- package/dist/manifestBuild-DIa_s6u0.js +2 -0
- package/dist/{migrate-BK_Bbx-_.js → migrate-SICulyz1.js} +2 -2
- package/dist/precompressAssets-YhTi1aWp.js +40 -0
- package/dist/{probeCommand-_C0YU207.js → probeCommand-6HxEkNDG.js} +2 -2
- package/dist/{runtimeTrace-CGWx1Q6l.js → runtimeTrace-DgYMc09E.js} +1 -1
- package/dist/{scheduleCmd-DQRu6BZC.js → scheduleCmd-DYBUfo_T.js} +1 -1
- package/dist/{sdkgen-CDGHQUFj.js → sdkgen-PY-umd6O.js} +1 -1
- package/dist/{seedRunner-Dgsiwk_e.js → seedRunner-DISBKow-.js} +16 -16
- package/dist/serveCommand-BITS8Hpj.js +2 -0
- package/dist/{serveCommand-Bje09q1v.js → serveCommand-DIJ3ma76.js} +951 -909
- package/dist/serveEntry.js +1 -1
- package/dist/{start-Clz-1BHB.js → start-B9NGB8gn.js} +627 -588
- package/dist/{start-B0bnJgxI.js → start-BFQQkL1i.js} +1 -1
- package/dist/startEntry.js +1 -1
- package/dist/staticCachePolicy-CIyj6DbS.js +15 -0
- package/dist/{test-D_kW4KMj.js → test-jipIQ5Mx.js} +1 -1
- package/dist/{tracesCmd-DgtgOUdi.js → tracesCmd-BWYDqMy6.js} +1 -1
- package/dist/{updateCommand-CRJlAOaM.js → updateCommand-C9n_Z_oG.js} +8 -2
- package/dist/updateCommand-DsXEAHbd.js +2 -0
- package/dist/webDev-C2dRz9s5.js +2 -0
- package/dist/{webDev-DSI9SOhs.js → webDev-C53hJdcL.js} +1265 -1288
- package/dist/{webhooksCommand-BvzXNHji.js → webhooksCommand-uuPu8qQX.js} +1 -1
- package/dist/{workflowsCmd-BGF-mRZ5.js → workflowsCmd-g-DNpaUc.js} +1 -1
- package/package.json +67 -19
- package/templates/AGENTS.core.md +20 -1
- package/templates/AGENTS.md +21 -2
- package/templates/agent-docs/_index.md +1 -1
- package/templates/agent-docs/_manifest.json +1 -1
- package/templates/agent-docs/authentication.md +49 -6
- package/templates/agent-docs/cli.md +216 -11
- package/templates/agent-docs/data.md +209 -18
- package/templates/agent-docs/database/scaling.md +40 -1
- package/templates/agent-docs/deployment.md +53 -1
- package/templates/agent-docs/internationalization.md +32 -0
- package/templates/agent-docs/local-first-mobile.md +9 -2
- package/templates/agent-docs/observability.md +227 -0
- package/templates/agent-docs/plugins/billing.md +15 -0
- package/templates/agent-docs/plugins/broadcast.md +2 -1
- package/templates/agent-docs/plugins/ratelimit.md +6 -1
- package/templates/agent-docs/plugins/row-history.md +11 -0
- package/templates/agent-docs/plugins.md +65 -8
- package/templates/agent-docs/reference.md +5 -3
- package/templates/agent-docs/routing.md +18 -0
- package/templates/agent-docs/schema-driven-ui.md +125 -0
- package/templates/agent-docs/templates/appshells.md +3 -3
- package/templates/agent-docs/whats-new.md +408 -106
- 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/changelog/src/pages/[locale]/page.tsx +7 -1
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +7 -8
- package/templates/apps/frontend-admin/src/pages/(marketing)/layout.tsx +1 -2
- package/templates/apps/frontend-admin/src/pages/admin/layout.tsx +1 -2
- package/templates/apps/frontend-app/package.json +8 -9
- package/templates/apps/frontend-app/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-auth/package.json +7 -8
- package/templates/apps/frontend-auth/src/components/AuthShell.tsx +1 -2
- package/templates/apps/frontend-blank/package.json +6 -7
- package/templates/apps/frontend-blank/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-cms/package.json +8 -9
- package/templates/apps/frontend-cms/src/pages/(app)/layout.tsx +1 -2
- package/templates/apps/frontend-collab/README.md +7 -2
- package/templates/apps/frontend-collab/package.json +9 -10
- package/templates/apps/frontend-collab/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-collab/src/pages/page.test.tsx +8 -4
- package/templates/apps/frontend-collab/src/pages/page.tsx +10 -5
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-contact/src/components/ContactForm.island.tsx +1 -1
- package/templates/apps/frontend-dashboard/package.json +6 -7
- package/templates/apps/frontend-dashboard/src/pages/(marketing)/layout.tsx +1 -2
- package/templates/apps/frontend-dashboard/src/pages/dashboard/layout.tsx +1 -2
- 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 -8
- package/templates/apps/frontend-portal/src/pages/(portal)/layout.tsx +1 -2
- package/templates/apps/frontend-saas/package.json +7 -8
- package/templates/apps/frontend-saas/src/pages/(marketing)/layout.tsx +1 -2
- package/templates/apps/frontend-saas/src/pages/dashboard/layout.tsx +1 -2
- package/templates/apps/frontend-spa/package.json +6 -7
- package/templates/apps/frontend-spa/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-ssr/package.json +6 -7
- package/templates/apps/frontend-ssr/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-ssr-api/package.json +7 -8
- package/templates/apps/frontend-ssr-api/src/pages/layout.tsx +1 -2
- package/templates/apps/frontend-static-blog/package.json +8 -8
- package/templates/apps/frontend-static-blog/src/components/ReadingProgress.island.tsx +1 -1
- package/templates/apps/frontend-static-blog/src/pages/[locale]/page.tsx +7 -1
- package/templates/apps/frontend-status/package.json +7 -8
- package/templates/apps/frontend-status/src/pages/layout.tsx +1 -2
- package/templates/apps/mobile-app/package.json +4 -4
- package/templates/baselines/compose/docker/api.Dockerfile +61 -5
- package/templates/baselines/compose/docker/web.Dockerfile +55 -10
- package/templates/baselines/compose-mariadb/docker/api.Dockerfile +61 -5
- package/templates/baselines/compose-mariadb/docker/web.Dockerfile +55 -10
- package/dist/apiBuild-CeUN55uk.js +0 -2
- package/dist/codegen-DjgxEOnD.js +0 -2
- package/dist/dbCommand-CSFWs9ev.js +0 -2
- package/dist/doctorCommand-J3qu4E0Y.js +0 -2
- package/dist/frameworkTableAssembly-IPD1pUnZ.js +0 -2
- package/dist/inspect-Bd8-9wsi.js +0 -1193
- package/dist/inspect-CuoDInfZ.js +0 -2
- package/dist/interruptedReplace-C3O3M1MM.js +0 -28
- package/dist/interruptedReplace-CvmiAM9K.js +0 -2
- package/dist/manifestBuild-C4-J1-m_.js +0 -2
- package/dist/serveCommand-BiPe8BJm.js +0 -2
- package/dist/updateCommand-CIoVDKnj.js +0 -2
- package/dist/webDev-DlvZO30c.js +0 -2
|
@@ -6130,6 +6130,283 @@ var S = (e, t, n) => {
|
|
|
6130
6130
|
"Partial registries (`Partial<Record<WidgetKind, …>>` or per-kind lookups)",
|
|
6131
6131
|
"need nothing."
|
|
6132
6132
|
].join("\n")
|
|
6133
|
+
}),
|
|
6134
|
+
w({
|
|
6135
|
+
version: "0.55.0",
|
|
6136
|
+
id: "0.55.0/01_target-relations-declare-columns",
|
|
6137
|
+
title: "A target's `relations:` names the junction's two columns now, not just the table",
|
|
6138
|
+
kind: "manual",
|
|
6139
|
+
appliesTo: ({ project: e }) => e.getSourceFiles().some((e) => {
|
|
6140
|
+
let t = e.getFullText();
|
|
6141
|
+
return /relations:\s*\{[^}{]*:\s*['"`]/.test(t);
|
|
6142
|
+
}),
|
|
6143
|
+
note: [
|
|
6144
|
+
"A write target declares its many-to-many relations as objects now:",
|
|
6145
|
+
"",
|
|
6146
|
+
" // before",
|
|
6147
|
+
" target: { table: 'employees', op: 'update',",
|
|
6148
|
+
" relations: { assignedStores: 'employee_assigned_stores' } }",
|
|
6149
|
+
"",
|
|
6150
|
+
" // after",
|
|
6151
|
+
" target: { table: 'employees', op: 'update',",
|
|
6152
|
+
" relations: { assignedStores: {",
|
|
6153
|
+
" junction: 'employee_assigned_stores',",
|
|
6154
|
+
" anchorColumn: 'employeeId', // the junction reference() pointing at `employees`",
|
|
6155
|
+
" targetColumn: 'storeId', // the junction's other reference()",
|
|
6156
|
+
" } } }",
|
|
6157
|
+
"",
|
|
6158
|
+
"Take both column names from the junction table's own `reference()`",
|
|
6159
|
+
"columns in your `db/` schema — `anchorColumn` is the one pointing at the",
|
|
6160
|
+
"target's table, `targetColumn` is the other one.",
|
|
6161
|
+
"",
|
|
6162
|
+
"Why: the SAME declaration now drives the optimistic update in the browser,",
|
|
6163
|
+
"so a multi-reference field flips as instantly as a scalar one instead of",
|
|
6164
|
+
"waiting for the server delta. The browser cannot import your schema, so the",
|
|
6165
|
+
"columns have to be stated. They are not taken on trust: before it writes,",
|
|
6166
|
+
"the server compares them against the junction's real reference columns and",
|
|
6167
|
+
"refuses — naming the correct pair — if they disagree."
|
|
6168
|
+
].join("\n")
|
|
6169
|
+
}),
|
|
6170
|
+
w({
|
|
6171
|
+
version: "0.55.0",
|
|
6172
|
+
id: "0.55.0/02_widget-kind-gained-rich-text",
|
|
6173
|
+
title: "WidgetKind gained 'rich-text' — total widget registries need one new entry",
|
|
6174
|
+
kind: "manual",
|
|
6175
|
+
appliesTo: ({ project: e }) => e.getSourceFiles().some((e) => /Record<WidgetKind/.test(e.getFullText())),
|
|
6176
|
+
note: [
|
|
6177
|
+
"This repository types a widget registry as `Record<WidgetKind, …>`.",
|
|
6178
|
+
"`WidgetKind` gained `'rich-text'`, so the total map needs one new entry.",
|
|
6179
|
+
"The framework ships a default you can point at:",
|
|
6180
|
+
"",
|
|
6181
|
+
" import { RichTextWidget } from '@voltro/web'",
|
|
6182
|
+
" // …",
|
|
6183
|
+
" 'rich-text': RichTextWidget,",
|
|
6184
|
+
"",
|
|
6185
|
+
"Partial registries (`Partial<Record<WidgetKind, …>>` or per-kind lookups)",
|
|
6186
|
+
"need nothing."
|
|
6187
|
+
].join("\n")
|
|
6188
|
+
}),
|
|
6189
|
+
w({
|
|
6190
|
+
version: "0.56.0",
|
|
6191
|
+
id: "0.56.0/01_inspect_answers_are_observations",
|
|
6192
|
+
title: "inspect answers are `Observation`s — the payload is `.data`",
|
|
6193
|
+
kind: "manual",
|
|
6194
|
+
reach: "beyond-source",
|
|
6195
|
+
appliesTo: ({ text: e }) => e.find("/_voltro/inspect").length > 0,
|
|
6196
|
+
note: [
|
|
6197
|
+
"Every 2xx `/_voltro/inspect/*` response is now an envelope:",
|
|
6198
|
+
"",
|
|
6199
|
+
" { data, scope, origin, completeness, capturedAt }",
|
|
6200
|
+
"",
|
|
6201
|
+
"What you read before is `.data`. So:",
|
|
6202
|
+
"",
|
|
6203
|
+
" curl …/_voltro/inspect/subscriptions | jq .resume",
|
|
6204
|
+
" curl …/_voltro/inspect/subscriptions | jq .data.resume # now",
|
|
6205
|
+
"",
|
|
6206
|
+
"The other four fields are the point of the change, not decoration:",
|
|
6207
|
+
"",
|
|
6208
|
+
" • `scope.kind` — `process` (this replica only), `shared-store` (every",
|
|
6209
|
+
" replica would answer the same), `fleet` (assembled), `declaration`",
|
|
6210
|
+
" (from the source tree). A `process` answer on a multi-replica",
|
|
6211
|
+
" deployment is a SAMPLE, and it used to look identical to a fleet-wide",
|
|
6212
|
+
" one.",
|
|
6213
|
+
" • `origin.replicaId` / `origin.instanceId` — which process answered, and",
|
|
6214
|
+
" which generation of it. Query twice and you can now tell whether you",
|
|
6215
|
+
" reached the same one.",
|
|
6216
|
+
" • `completeness.fleetSize` — how many replicas exist. ABSENT when it",
|
|
6217
|
+
" could not be determined; never `1` as a guess.",
|
|
6218
|
+
" • `capturedAt` — the ORIGIN’s clock. Do not compare it with another",
|
|
6219
|
+
" replica’s.",
|
|
6220
|
+
"",
|
|
6221
|
+
"Check anything that reads these endpoints outside your TypeScript sources:",
|
|
6222
|
+
"dashboards, `jq` filters in alerts, runbook commands, CI health checks,",
|
|
6223
|
+
"scrape configs. A reader that pulls a field straight off the top level now",
|
|
6224
|
+
"reads `undefined` — which in a health check is the failure mode worth",
|
|
6225
|
+
"looking for first, because `undefined` and \"zero\" render the same in most",
|
|
6226
|
+
"alerting rules."
|
|
6227
|
+
].join("\n")
|
|
6228
|
+
}),
|
|
6229
|
+
w({
|
|
6230
|
+
version: "0.56.0",
|
|
6231
|
+
id: "0.56.0/02_broadcast_gap_is_one_object",
|
|
6232
|
+
title: "attachBroadcastBus's onGap now receives a single BroadcastGap object",
|
|
6233
|
+
kind: "manual",
|
|
6234
|
+
appliesTo: ({ project: e }) => e.getSourceFiles().some((e) => e.getFullText().includes("attachBroadcastBus")),
|
|
6235
|
+
note: [
|
|
6236
|
+
"`attachBroadcastBus({ onGap })` now receives ONE argument — a `BroadcastGap`",
|
|
6237
|
+
"— instead of `(origin, missed)`.",
|
|
6238
|
+
"",
|
|
6239
|
+
" before: onGap: (origin, missed) => refreshAll(`missed ${missed} from ${origin}`)",
|
|
6240
|
+
" after: onGap: (gap) => refreshAll(gap.reason)",
|
|
6241
|
+
"",
|
|
6242
|
+
"`gap.reason` is a ready-made sentence for your log line. `gap.origin` and",
|
|
6243
|
+
"`gap.missed` are still there and still EXACT — but they are optional now,",
|
|
6244
|
+
"because the bus reports two kinds of hole and only one of them has a peer",
|
|
6245
|
+
"to blame:",
|
|
6246
|
+
"",
|
|
6247
|
+
" • a peer's serial jumped → `{ reason, origin, missed }`",
|
|
6248
|
+
" • this replica was not subscribed for a while, or the transport re-dialled",
|
|
6249
|
+
" → `{ reason }` alone",
|
|
6250
|
+
"",
|
|
6251
|
+
"The recovery is the same for both: re-run every live query. If your handler",
|
|
6252
|
+
"reads `origin`/`missed`, guard them — a hole with no peer is now reachable.",
|
|
6253
|
+
"",
|
|
6254
|
+
"Related, and needing no change from you: `attachBroadcastBus` no longer",
|
|
6255
|
+
"rejects when the broker is unreachable at attach time. It warns, keeps the",
|
|
6256
|
+
"local path working, retries in the background, and reports the time it spent",
|
|
6257
|
+
"unsubscribed as a gap. If you wrapped the call in a try/catch to survive a",
|
|
6258
|
+
"restarting broker, that catch is now dead code."
|
|
6259
|
+
].join("\n")
|
|
6260
|
+
}),
|
|
6261
|
+
w({
|
|
6262
|
+
version: "0.56.0",
|
|
6263
|
+
id: "0.56.0/03_outbox_drain_needs_an_identity",
|
|
6264
|
+
title: "drainOutbox now requires claimedBy — the fleet-wide exactly-once gate",
|
|
6265
|
+
kind: "manual",
|
|
6266
|
+
appliesTo: ({ project: e }) => e.getSourceFiles().some((e) => e.getFullText().includes("drainOutbox")),
|
|
6267
|
+
note: [
|
|
6268
|
+
"`drainOutbox({ … })` now requires a `claimedBy: string`.",
|
|
6269
|
+
"",
|
|
6270
|
+
"Why: the drain used to read every `pending` row and run its handler. Every",
|
|
6271
|
+
"replica runs the drain, so every effect was dispatched once PER REPLICA — on",
|
|
6272
|
+
"the happy path, every time. Rows are now claimed atomically",
|
|
6273
|
+
"(`pending → delivering`) and a racing replica loses the row instead of",
|
|
6274
|
+
"duplicating the side effect.",
|
|
6275
|
+
"",
|
|
6276
|
+
"What to pass: an id for this PROCESS, not for the replica. A replica name",
|
|
6277
|
+
"survives a restart (`POD_NAME` on a StatefulSet, `VOLTRO_REPLICA_ID` by",
|
|
6278
|
+
"definition) while the work does not, so a pod that died mid-delivery would",
|
|
6279
|
+
"look like it still held its own claim:",
|
|
6280
|
+
"",
|
|
6281
|
+
" import { instanceId } from '@voltro/protocol/identity'",
|
|
6282
|
+
" await drainOutbox({ store, handlers, claimedBy: instanceId() })",
|
|
6283
|
+
"",
|
|
6284
|
+
"Also new and optional: `claimLeaseMs` (default 5 minutes) — how long a claim",
|
|
6285
|
+
"stands before another replica may take the row. Set it ABOVE your slowest",
|
|
6286
|
+
"handler. A lease shorter than a real delivery hands the same row to a second",
|
|
6287
|
+
"replica while the first is still working, which is the duplicate this",
|
|
6288
|
+
"mechanism removes, reintroduced by a number.",
|
|
6289
|
+
"",
|
|
6290
|
+
"If you do NOT call `drainOutbox` yourself, there is nothing to do: `voltro",
|
|
6291
|
+
"dev` and `voltro serve` pass the identity for you."
|
|
6292
|
+
].join("\n")
|
|
6293
|
+
}),
|
|
6294
|
+
w({
|
|
6295
|
+
version: "0.56.0",
|
|
6296
|
+
id: "0.56.0/04_reaction_dedupe_is_one_claim",
|
|
6297
|
+
title: "runReaction's dedupe is a single atomic claim",
|
|
6298
|
+
kind: "manual",
|
|
6299
|
+
appliesTo: ({ project: e }) => e.getSourceFiles().some((e) => {
|
|
6300
|
+
let t = e.getFullText();
|
|
6301
|
+
return t.includes("runReaction") || t.includes("ReactionRunDeps");
|
|
6302
|
+
}),
|
|
6303
|
+
note: [
|
|
6304
|
+
"`ReactionRunDeps.dedupe` changed from `{ has, add }` to `{ claim }`:",
|
|
6305
|
+
"",
|
|
6306
|
+
" // before",
|
|
6307
|
+
" dedupe: { has: (k) => seen.has(k), add: (k) => { seen.add(k) } }",
|
|
6308
|
+
" // after",
|
|
6309
|
+
" dedupe: { claim: (k) => (seen.has(k) ? false : (seen.add(k), true)) }",
|
|
6310
|
+
"",
|
|
6311
|
+
"Why it is not a rename. `has` then `add` is a read followed by a write, and",
|
|
6312
|
+
"two callers both read \"not seen\" before either writes — so `dedupeKey`, the",
|
|
6313
|
+
"field `defineReaction` refuses to boot without, let the same change act once",
|
|
6314
|
+
"per replica. Every single-instance run confirmed it worked, which is why it",
|
|
6315
|
+
"survived: the gate was real in exactly the configuration that cannot observe",
|
|
6316
|
+
"it.",
|
|
6317
|
+
"",
|
|
6318
|
+
"The claim is also taken BEFORE the act now, not after. That is what makes it",
|
|
6319
|
+
"a gate rather than a report, and it has a cost worth knowing: an act that",
|
|
6320
|
+
"THROWS has already consumed its key and is not re-run by a later duplicate.",
|
|
6321
|
+
"Durability belongs to the workflow the act starts, not to the trigger.",
|
|
6322
|
+
"",
|
|
6323
|
+
"If you do NOT call `runReaction` yourself, there is nothing to do. `voltro",
|
|
6324
|
+
"dev` and `voltro serve` now pass a durable, fleet-wide claimer",
|
|
6325
|
+
"(`_voltro_change_claims`), so a reaction acts once across the whole fleet",
|
|
6326
|
+
"instead of once per replica — no code change on your side."
|
|
6327
|
+
].join("\n")
|
|
6328
|
+
}),
|
|
6329
|
+
w({
|
|
6330
|
+
version: "0.56.0",
|
|
6331
|
+
id: "0.56.0/05_plugin_bind_context_claims_a_change",
|
|
6332
|
+
title: "PluginBindContext requires claimChange; change identity moved to @voltro/database",
|
|
6333
|
+
kind: "manual",
|
|
6334
|
+
appliesTo: ({ project: e }) => e.getSourceFiles().some((e) => {
|
|
6335
|
+
let t = e.getFullText();
|
|
6336
|
+
return t.includes("PluginBindContext") || t.includes("changeDigest") || t.includes("OccurrenceCounter") || t.includes("composeChangeKey") || t.includes("parseChangeKey");
|
|
6337
|
+
}),
|
|
6338
|
+
note: [
|
|
6339
|
+
"Two changes, both narrow.",
|
|
6340
|
+
"",
|
|
6341
|
+
"1. `PluginBindContext` now has a REQUIRED `claimChange(scope, key) =>",
|
|
6342
|
+
" Promise<boolean>`. The framework supplies it on both boot paths, so a",
|
|
6343
|
+
" plugin only READS it — nothing to do unless you construct a",
|
|
6344
|
+
" `PluginBindContext` yourself, which in practice means a unit-test",
|
|
6345
|
+
" harness:",
|
|
6346
|
+
"",
|
|
6347
|
+
" const ctx: PluginBindContext = {",
|
|
6348
|
+
" scheduleCoordinated: …,",
|
|
6349
|
+
" claimChange: () => Promise.resolve(true), // add this",
|
|
6350
|
+
" }",
|
|
6351
|
+
"",
|
|
6352
|
+
" In a real harness, decide what the case is testing before reaching for",
|
|
6353
|
+
" `true`: a stub that always claims asserts the SINGLE-replica behaviour.",
|
|
6354
|
+
" To exercise a fleet, share one claim ledger across the stubs — a `Set`",
|
|
6355
|
+
" of `${scope}/${key}` is enough.",
|
|
6356
|
+
"",
|
|
6357
|
+
" Why it is required rather than optional: an absent gate reads exactly",
|
|
6358
|
+
" like a gate that passed, and every consumer of this field is counting or",
|
|
6359
|
+
" sending something. `plugin-billing` accrued a usage unit per metered row",
|
|
6360
|
+
" change on EVERY replica, so a tenant on two pods was invoiced twice.",
|
|
6361
|
+
"",
|
|
6362
|
+
"2. The change-identity helpers moved from `@voltro/plugin-cdc-out` to",
|
|
6363
|
+
" `@voltro/database`, beside `ChangeEvent` itself:",
|
|
6364
|
+
"",
|
|
6365
|
+
" -import { changeDigest, composeChangeKey, OccurrenceCounter } from '@voltro/plugin-cdc-out'",
|
|
6366
|
+
" +import { changeDigest, composeChangeKey, OccurrenceCounter } from '@voltro/database'",
|
|
6367
|
+
"",
|
|
6368
|
+
" `parseChangeKey` moved with them. `canonicalJson` did NOT become public:",
|
|
6369
|
+
" it is internal to the digest, and `@voltro/runtime` already exports a",
|
|
6370
|
+
" different function of that name."
|
|
6371
|
+
].join("\n")
|
|
6372
|
+
}),
|
|
6373
|
+
w({
|
|
6374
|
+
version: "0.56.0",
|
|
6375
|
+
id: "0.56.0/06_serve_is_api_only",
|
|
6376
|
+
title: "`voltro serve` on a WEB app now refuses — use `voltro start`",
|
|
6377
|
+
kind: "manual",
|
|
6378
|
+
reach: "beyond-source",
|
|
6379
|
+
appliesTo: (e) => e.text.scanned === 0 || e.text.find("voltro serve").length > 0,
|
|
6380
|
+
note: [
|
|
6381
|
+
"`voltro serve` is the production server for an API app. On a WEB app it now",
|
|
6382
|
+
"refuses with a one-line message instead of what it used to do.",
|
|
6383
|
+
"",
|
|
6384
|
+
" web app, production voltro start . (unchanged)",
|
|
6385
|
+
" web app, development voltro dev . (unchanged)",
|
|
6386
|
+
" api app voltro serve . (unchanged)",
|
|
6387
|
+
"",
|
|
6388
|
+
"Nothing changes for an api. For a web app the old behaviour was not a working",
|
|
6389
|
+
"alternative that is being taken away:",
|
|
6390
|
+
"",
|
|
6391
|
+
" • In production it already failed — the serve fast path requires an api",
|
|
6392
|
+
" serve bundle, which a web build never produces, so it exited 1 pointing",
|
|
6393
|
+
" at an artefact that cannot exist.",
|
|
6394
|
+
" • Below production it ran a SECOND vite build without Tailwind, without the",
|
|
6395
|
+
" image pipeline and without the islands entries, then served it through",
|
|
6396
|
+
" `vite preview`. With Tailwind that build aborts. Without it, it succeeds",
|
|
6397
|
+
" and DELETES `dist/server`, the island shells and every pre-rendered page —",
|
|
6398
|
+
" after which `voltro start` cannot boot at all.",
|
|
6399
|
+
"",
|
|
6400
|
+
"Search your Dockerfiles, compose files, CI jobs, Procfiles and runbooks:",
|
|
6401
|
+
"",
|
|
6402
|
+
" grep -rn \"voltro serve\" .",
|
|
6403
|
+
"",
|
|
6404
|
+
"and change the ones that point at a WEB app to `voltro start`. An api entry",
|
|
6405
|
+
"stays as it is. (The shipped Dockerfiles already run the precompiled bundle",
|
|
6406
|
+
"directly — `node .framework/dist-web/startBundle/startEntry.js` for web,",
|
|
6407
|
+
"`node .framework/dist-api/serveBundle/serveEntry.js` for an api — which is",
|
|
6408
|
+
"faster still and needs no CLI in the runtime image.)"
|
|
6409
|
+
].join("\n")
|
|
6133
6410
|
})
|
|
6134
6411
|
], J = /* @__PURE__ */ new Set([
|
|
6135
6412
|
"node_modules",
|
|
@@ -91,7 +91,7 @@ var u = () => {
|
|
|
91
91
|
name: "dev",
|
|
92
92
|
summary: "Start the local development server (auto-discovers routes / mutations).",
|
|
93
93
|
status: "wired",
|
|
94
|
-
run: (e) => import("./dev-
|
|
94
|
+
run: (e) => import("./dev-B9Gz0k85.js").then((t) => t.runDev(e)),
|
|
95
95
|
help: {
|
|
96
96
|
usage: "[app]",
|
|
97
97
|
examples: [["voltro dev", "boot the app in the current directory"], ["voltro dev apps/acme/api", "boot a specific app"]],
|
|
@@ -109,7 +109,7 @@ var u = () => {
|
|
|
109
109
|
name: "dashboard",
|
|
110
110
|
summary: "Serve the DevTools dashboard standalone (from @voltro/dashboard). Targets via VOLTRO_DASHBOARD_APPS; --port to override.",
|
|
111
111
|
status: "wired",
|
|
112
|
-
run: (e) => import("./dashboardCommand-
|
|
112
|
+
run: (e) => import("./dashboardCommand-BekcY5Ls.js").then((t) => t.runDashboardCommand(e)),
|
|
113
113
|
help: {
|
|
114
114
|
usage: "[--port <n>]",
|
|
115
115
|
flags: [["--port <n>", "port to serve the dashboard on"]],
|
|
@@ -121,7 +121,7 @@ var u = () => {
|
|
|
121
121
|
name: "check",
|
|
122
122
|
summary: "Verify the app graph (blast-radius checks) against a running api; LLM-shaped --json diagnostics. Flags: --json, --process <p>, --diff removeTable:<name>.",
|
|
123
123
|
status: "wired",
|
|
124
|
-
run: (e) => import("./checkCommand-
|
|
124
|
+
run: (e) => import("./checkCommand-D0QV_zM_.js").then((t) => t.runCheckCommand(e)),
|
|
125
125
|
help: {
|
|
126
126
|
usage: "[--json] [--offline] [--process <name>] [--diff removeTable:<name>]",
|
|
127
127
|
flags: [
|
|
@@ -155,7 +155,7 @@ var u = () => {
|
|
|
155
155
|
name: "webhooks",
|
|
156
156
|
summary: "Outbound-webhook artefacts. `consumer` generates the ZERO-DEPENDENCY Standard-Webhooks verification package a subscriber installs, from this app's own declared events; `events` lists the events a subscriber can register for. Usage: voltro webhooks <consumer|events> [path] [--out <dir>] [--name <pkg>] [--json].",
|
|
157
157
|
status: "wired",
|
|
158
|
-
run: (e) => import("./webhooksCommand-
|
|
158
|
+
run: (e) => import("./webhooksCommand-uuPu8qQX.js").then((t) => t.runWebhooksCommand(e)),
|
|
159
159
|
help: {
|
|
160
160
|
usage: "<consumer|events> [path] [--out <dir>] [--name <pkg>] [--json]",
|
|
161
161
|
flags: [
|
|
@@ -171,7 +171,7 @@ var u = () => {
|
|
|
171
171
|
name: "evolve",
|
|
172
172
|
summary: "Schema-evolution copilot: propose an observed-graph-driven codemod + a branch-verified backfill for a schema change (rename/retype/split/drop a column, rename a table). Dry-run by default; --write applies. Usage: voltro evolve rename-column <table>.<col> --to <newName> [--write] [--json].",
|
|
173
173
|
status: "wired",
|
|
174
|
-
run: (e) => import("./evolveCommand-
|
|
174
|
+
run: (e) => import("./evolveCommand-YV8qW1LU.js").then((t) => t.runEvolveCommand(e)),
|
|
175
175
|
help: {
|
|
176
176
|
usage: "<rename-column|rename-table|retype-column|split-column|drop-column> <target> [--to <new>] [--write]",
|
|
177
177
|
flags: [
|
|
@@ -188,7 +188,7 @@ var u = () => {
|
|
|
188
188
|
name: "codegen",
|
|
189
189
|
summary: "Emit rpcGroup.generated.ts from discovered route / mutation descriptors.",
|
|
190
190
|
status: "wired",
|
|
191
|
-
run: (e) => import("./codegenCommand-
|
|
191
|
+
run: (e) => import("./codegenCommand-CidbQzbv.js").then((t) => t.runCodegenCommand(e)),
|
|
192
192
|
help: {
|
|
193
193
|
usage: "[app]",
|
|
194
194
|
examples: [["voltro codegen", "regenerate rpcGroup.generated.ts for the app in the cwd"]],
|
|
@@ -221,7 +221,7 @@ var u = () => {
|
|
|
221
221
|
name: "migrate",
|
|
222
222
|
summary: "Apply the declared schema to the database (alias of `db apply` — diffs declared vs live and emits the ALTERs). `--create-only` for the bootstrap-only CREATE TABLE IF NOT EXISTS path.",
|
|
223
223
|
status: "wired",
|
|
224
|
-
run: (e) => import("./migrate-
|
|
224
|
+
run: (e) => import("./migrate-SICulyz1.js").then((t) => t.runMigrateCommand(e)),
|
|
225
225
|
help: {
|
|
226
226
|
usage: "[app] [--create-only]",
|
|
227
227
|
flags: [["--create-only", "only CREATE TABLE IF NOT EXISTS — never ALTER (bootstrap)"]],
|
|
@@ -233,7 +233,7 @@ var u = () => {
|
|
|
233
233
|
name: "test",
|
|
234
234
|
summary: "Run vitest against the app at the cwd (auto-discovers *.test.ts/tsx).",
|
|
235
235
|
status: "wired",
|
|
236
|
-
run: (e) => import("./test-
|
|
236
|
+
run: (e) => import("./test-jipIQ5Mx.js").then((t) => t.runTestCommand(e)),
|
|
237
237
|
help: {
|
|
238
238
|
usage: "[dir] [filter…] [--watch] [-t <pattern>]",
|
|
239
239
|
flags: [
|
|
@@ -281,7 +281,7 @@ var u = () => {
|
|
|
281
281
|
name: "info",
|
|
282
282
|
summary: "Report versions (CLI, node, every installed @voltro/* — flags lockstep skew), package manager, and dialect. --json for CI. Exits 1 on version skew.",
|
|
283
283
|
status: "wired",
|
|
284
|
-
run: (e) => import("./infoCommand-
|
|
284
|
+
run: (e) => import("./infoCommand-BjVXpMlP.js").then((t) => t.runInfoCommand(e)),
|
|
285
285
|
help: {
|
|
286
286
|
usage: "[--json]",
|
|
287
287
|
flags: [["--json", "machine-readable report"]],
|
|
@@ -302,7 +302,7 @@ var u = () => {
|
|
|
302
302
|
name: "env",
|
|
303
303
|
summary: "Inspect/sync the typed-env manifest. Subcommands: check (default), sync (.env.example), types (env.generated.d.ts for CI tsc), turbo.",
|
|
304
304
|
status: "wired",
|
|
305
|
-
run: (e) => import("./envCommand-
|
|
305
|
+
run: (e) => import("./envCommand-BDUgV7EM.js").then((t) => t.runEnvCommand(e)),
|
|
306
306
|
help: {
|
|
307
307
|
usage: "[check|sync|types|turbo] [--force]",
|
|
308
308
|
flags: [["--force", "overwrite the generated file instead of refusing on a conflict"]],
|
|
@@ -326,17 +326,17 @@ var u = () => {
|
|
|
326
326
|
},
|
|
327
327
|
{
|
|
328
328
|
name: "serve",
|
|
329
|
-
summary: "Production server
|
|
329
|
+
summary: "Production server for an API app (rpc + tenant scope + audit atomicity). A WEB app is served by `voltro start`.",
|
|
330
330
|
status: "wired",
|
|
331
331
|
run: async (e) => {
|
|
332
332
|
let t = e.find((e) => !e.startsWith("-")) ?? process.cwd();
|
|
333
333
|
if (e.includes("--preflight")) {
|
|
334
|
-
let { runServePreflight: e } = await import("./doctorCommand-
|
|
334
|
+
let { runServePreflight: e } = await import("./doctorCommand-BMWs6aVm.js");
|
|
335
335
|
return e(s(t), !0);
|
|
336
336
|
}
|
|
337
|
-
let { tryRunWebServe: n } = await import("./webDev-
|
|
337
|
+
let { tryRunWebServe: n } = await import("./webDev-C2dRz9s5.js"), r = await n(s(t));
|
|
338
338
|
if (!r.ran) {
|
|
339
|
-
let { runServeDispatch: t } = await import("./serveCommand-
|
|
339
|
+
let { runServeDispatch: t } = await import("./serveCommand-BITS8Hpj.js");
|
|
340
340
|
return t(e);
|
|
341
341
|
}
|
|
342
342
|
return r.exitCode;
|
|
@@ -344,8 +344,8 @@ var u = () => {
|
|
|
344
344
|
help: {
|
|
345
345
|
usage: "[app] [--preflight]",
|
|
346
346
|
flags: [["--preflight", "check serve-bundle readiness and exit 1 if it is missing — never boots"]],
|
|
347
|
-
examples: [["voltro serve", "production server for the app in the cwd
|
|
348
|
-
notes: ["In production a precompiled bundle is MANDATORY — run `voltro build` first."]
|
|
347
|
+
examples: [["voltro serve", "production API server for the app in the cwd"], ["voltro serve . --preflight", "a Dockerfile/CI gate that catches \"prod serve, no build\""]],
|
|
348
|
+
notes: ["In production a precompiled bundle is MANDATORY — run `voltro build` first.", "A WEB app is refused here and pointed at `voltro start` (production) / `voltro dev`."]
|
|
349
349
|
}
|
|
350
350
|
},
|
|
351
351
|
{
|
|
@@ -364,17 +364,17 @@ var u = () => {
|
|
|
364
364
|
handlesHelp: !0,
|
|
365
365
|
summary: "Preflight an app for production: the precompiled serve bundle, hand-rolled primitives (naming the shipped one), @voltro/* version skew, executors with no access check, `.serverOnly()` leaks, and junction-FK gaps.",
|
|
366
366
|
status: "wired",
|
|
367
|
-
run: (e) => import("./doctorCommand-
|
|
367
|
+
run: (e) => import("./doctorCommand-BMWs6aVm.js").then((t) => t.runDoctorCommand(e))
|
|
368
368
|
},
|
|
369
369
|
{
|
|
370
370
|
name: "build",
|
|
371
371
|
summary: "Production build for a web app (vite build + per-page SSG pre-render).",
|
|
372
372
|
status: "wired",
|
|
373
|
-
run: (e) => import("./build-
|
|
373
|
+
run: (e) => import("./build-CI36wL4R.js").then((t) => t.runBuildCommand(e)),
|
|
374
374
|
help: {
|
|
375
375
|
usage: "[app] [--target <t>]",
|
|
376
|
-
flags: [["--target <t>", "build target"]],
|
|
377
|
-
examples: [["voltro build", "production build for the app in the cwd"]],
|
|
376
|
+
flags: [["--target <t>", "build target"], ["--report", "print what a visitor downloads: first load, chunks, server artefacts"]],
|
|
377
|
+
examples: [["voltro build", "production build for the app in the cwd"], ["voltro build --report", "the same build, then its first-load size in bytes"]],
|
|
378
378
|
notes: [
|
|
379
379
|
"A web app gets the vite build + per-page SSG prerender + the start bundle; an api gets",
|
|
380
380
|
"the precompiled serve bundle. Both regenerate their generated files first, so a clean",
|
|
@@ -386,7 +386,7 @@ var u = () => {
|
|
|
386
386
|
name: "prune-runtime",
|
|
387
387
|
summary: "Trim a deployed web tree’s node_modules to the reachable runtime set (standalone image slimming).",
|
|
388
388
|
status: "wired",
|
|
389
|
-
run: (e) => import("./runtimeTrace-
|
|
389
|
+
run: (e) => import("./runtimeTrace-DgYMc09E.js").then((t) => t.runPruneRuntimeCommand(e)),
|
|
390
390
|
hidden: !0
|
|
391
391
|
},
|
|
392
392
|
{
|
|
@@ -404,7 +404,7 @@ var u = () => {
|
|
|
404
404
|
name: "dormancy",
|
|
405
405
|
summary: "Single-node scale-to-zero: front the API with a wake-orchestrator that stops the app when idle and brings it back on a request or a due wakeup (cron/workflow). Needs a SQL store. Flags: --port, --app-port, --idle-grace-ms, --tick-ms.",
|
|
406
406
|
status: "wired",
|
|
407
|
-
run: (e) => import("./dormancyCommand-
|
|
407
|
+
run: (e) => import("./dormancyCommand-eXTQMbHU.js").then((t) => t.runDormancyCommand(e)),
|
|
408
408
|
help: {
|
|
409
409
|
usage: "[app] [--port <n>] [--app-port <n>] [--idle-grace-ms <n>] [--tick-ms <n>]",
|
|
410
410
|
flags: [
|
|
@@ -421,7 +421,7 @@ var u = () => {
|
|
|
421
421
|
name: "start",
|
|
422
422
|
summary: "Production runtime: serves dist + SSR-on-demand for ssr/isr pages.",
|
|
423
423
|
status: "wired",
|
|
424
|
-
run: (e) => import("./start-
|
|
424
|
+
run: (e) => import("./start-BFQQkL1i.js").then((t) => t.runStartCommand(e)),
|
|
425
425
|
help: {
|
|
426
426
|
usage: "[app]",
|
|
427
427
|
examples: [["voltro start", "serve a built web app (dist + SSR-on-demand)"]],
|
|
@@ -475,7 +475,7 @@ var u = () => {
|
|
|
475
475
|
name: "db",
|
|
476
476
|
summary: "Database subcommands. Declarative flow: plan, apply, branch, plans, drift [--accept], squash, restore-snapshot. File migrations: generate [name], migrate, rollback, status, files, rollback-file. Data + housekeeping: seed, gc-snapshots, adopt. Credentials at rest: scan-credentials (find plaintext), encrypt-column (migrate a populated column onto .encrypted()).",
|
|
477
477
|
status: "wired",
|
|
478
|
-
run: (e) => import("./dbCommand-
|
|
478
|
+
run: (e) => import("./dbCommand-DrycGWWt.js").then((t) => t.runDbCommand(e)),
|
|
479
479
|
help: {
|
|
480
480
|
usage: e(n),
|
|
481
481
|
examples: [
|
|
@@ -491,7 +491,7 @@ var u = () => {
|
|
|
491
491
|
name: "data",
|
|
492
492
|
summary: "Export/import + backup/restore of app data. Logical (rows + optional assets): export <dir> [--tenant <id>|--tables a,b|--exclude a,b] [--assets] [--compression zstd|gzip|none] [--consistency live|snapshot]; import <dir> [--assets] [--no-verify]; transfers — the history in all four directions, including a run in flight; inspect <file|dir>; unpack <file> <dir>. Native (vendor dump, no resume): backup <dir> [--assets] / restore <dir> [--assets] (pg_dump/mariadb-dump/…) — a restore marks the database in-progress until it finishes. Recovery: clear-replace-marker, clear-staging. Resumable + typed-NDJSON on the logical path; content-addressed assets on both.",
|
|
493
493
|
status: "wired",
|
|
494
|
-
run: (e) => import("./dataCommand-
|
|
494
|
+
run: (e) => import("./dataCommand-2pccgbIy.js").then((t) => t.runDataCommand(e)),
|
|
495
495
|
help: {
|
|
496
496
|
usage: e(i),
|
|
497
497
|
flags: [
|
|
@@ -555,20 +555,20 @@ var u = () => {
|
|
|
555
555
|
handlesHelp: !0,
|
|
556
556
|
summary: "Upgrade the app to the latest framework: bump every @voltro/* dependency (across ALL workspace members, install once at the workspace root), then run the codemods shipped with the target version. Flags: --to <version>, --from <version>, --codemods-only, --dry-run, --force, --exact, --help. After: run `voltro db apply`.",
|
|
557
557
|
status: "wired",
|
|
558
|
-
run: (e) => import("./updateCommand-
|
|
558
|
+
run: (e) => import("./updateCommand-DsXEAHbd.js").then((t) => t.runUpdateCommand(e))
|
|
559
559
|
},
|
|
560
560
|
{
|
|
561
561
|
name: "_apply-codemods",
|
|
562
562
|
summary: "Internal: apply shipped codemods for a framework version jump (re-exec target of `voltro update`).",
|
|
563
563
|
status: "wired",
|
|
564
564
|
hidden: !0,
|
|
565
|
-
run: (e) => import("./updateCommand-
|
|
565
|
+
run: (e) => import("./updateCommand-DsXEAHbd.js").then((t) => t.runApplyCodemods(e))
|
|
566
566
|
},
|
|
567
567
|
{
|
|
568
568
|
name: "embeddings",
|
|
569
569
|
summary: "Embeddings tooling. Subcommand: backfill <table> --text <field> --vector <field> [--model <m>] [--model-field <f>] [--batch <n>] [--dry-run] — (re)embed rows the vectorEmbedding() mixin missed.",
|
|
570
570
|
status: "wired",
|
|
571
|
-
run: (e) => import("./embeddingsCommand-
|
|
571
|
+
run: (e) => import("./embeddingsCommand-CTmiQvwa.js").then((t) => t.runEmbeddingsCommand(e)),
|
|
572
572
|
help: {
|
|
573
573
|
usage: "backfill <table> --text <field> --vector <field> [--model <m>] [--batch <n>] [--dry-run]",
|
|
574
574
|
flags: [
|
|
@@ -614,14 +614,14 @@ var u = () => {
|
|
|
614
614
|
summary: "Ask a RUNNING app whether its declared access is enforced. `access` calls every guarded procedure with NO credentials and reports any that answer (--process, --url, --strict, --format).",
|
|
615
615
|
status: "wired",
|
|
616
616
|
handlesHelp: !0,
|
|
617
|
-
run: (e) => import("./probeCommand-
|
|
617
|
+
run: (e) => import("./probeCommand-6HxEkNDG.js").then((t) => t.runProbeCommand(e))
|
|
618
618
|
},
|
|
619
619
|
{
|
|
620
620
|
name: "schedule",
|
|
621
621
|
summary: "Operate on registered schedules. `run <name>` fires one on demand (--process, --trigger manual|external, --url).",
|
|
622
622
|
status: "wired",
|
|
623
623
|
handlesHelp: !0,
|
|
624
|
-
run: (e) => import("./scheduleCmd-
|
|
624
|
+
run: (e) => import("./scheduleCmd-DYBUfo_T.js").then((t) => t.runScheduleCommand(e))
|
|
625
625
|
},
|
|
626
626
|
{
|
|
627
627
|
name: "schedule-manifest",
|
|
@@ -643,35 +643,35 @@ var u = () => {
|
|
|
643
643
|
handlesHelp: !0,
|
|
644
644
|
summary: "Tail recent log records from every running voltro process. --tail N --since 30s --level error --filter PAT --format json|pretty|text.",
|
|
645
645
|
status: "wired",
|
|
646
|
-
run: (e) => import("./logsCmd-
|
|
646
|
+
run: (e) => import("./logsCmd-BU8uCdys.js").then((t) => t.runLogsCommand(e))
|
|
647
647
|
},
|
|
648
648
|
{
|
|
649
649
|
name: "traces",
|
|
650
650
|
handlesHelp: !0,
|
|
651
651
|
summary: "Distributed traces from every running api. --tail N --errors --since 30s --process NAME --format json|pretty. Use --id <traceId> for the waterfall of one trace.",
|
|
652
652
|
status: "wired",
|
|
653
|
-
run: (e) => import("./tracesCmd-
|
|
653
|
+
run: (e) => import("./tracesCmd-BWYDqMy6.js").then((t) => t.runTracesCommand(e))
|
|
654
654
|
},
|
|
655
655
|
{
|
|
656
656
|
name: "inspect",
|
|
657
657
|
handlesHelp: !0,
|
|
658
658
|
summary: "Query the live /_voltro/inspect/* surface. Subcommands: app, routes, rpc, metrics, cache, schedules, aggregates, invoke. --process NAME --format json|pretty. `schedules --failing` reports only broken crons and exits 1 if any (usable as a post-deploy gate).",
|
|
659
659
|
status: "wired",
|
|
660
|
-
run: (e) => import("./inspectCmd-
|
|
660
|
+
run: (e) => import("./inspectCmd-CP-G0sVK.js").then((t) => t.runInspectCommand(e))
|
|
661
661
|
},
|
|
662
662
|
{
|
|
663
663
|
name: "workflows",
|
|
664
664
|
handlesHelp: !0,
|
|
665
665
|
summary: "Inspect + operate workflow runs. Subcommands: list, show <runId>, start <name>, retry|cancel|suspend|resume <runId>, signal|update <runId> --name, children <parentExecutionId>, flow (declarative flow-control queue + ledger), pause|unpause <workflowName>.",
|
|
666
666
|
status: "wired",
|
|
667
|
-
run: (e) => import("./workflowsCmd-
|
|
667
|
+
run: (e) => import("./workflowsCmd-g-DNpaUc.js").then((t) => t.runWorkflowsCommand(e))
|
|
668
668
|
},
|
|
669
669
|
{
|
|
670
670
|
name: "cluster",
|
|
671
671
|
handlesHelp: !0,
|
|
672
672
|
summary: "Clustering snapshot of every running api. Subcommand: status — per-instance replicaId, runner address, dialect, CDC flavor, coordination, server_id, + a flag for SQL runners stuck on localhost. --process NAME --format json|pretty.",
|
|
673
673
|
status: "wired",
|
|
674
|
-
run: (e) => import("./clusterCmd-
|
|
674
|
+
run: (e) => import("./clusterCmd-CdLB1GkT.js").then((t) => t.runClusterCommand(e))
|
|
675
675
|
},
|
|
676
676
|
{
|
|
677
677
|
name: "login",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { f as e } from "./dev-
|
|
2
|
-
import {
|
|
3
|
-
import { t as r } from "./start-
|
|
1
|
+
import { f as e } from "./dev-Dw263KPu.js";
|
|
2
|
+
import { Q as t, tt as n } from "./webDev-C53hJdcL.js";
|
|
3
|
+
import { t as r } from "./start-B9NGB8gn.js";
|
|
4
4
|
import { join as i } from "node:path";
|
|
5
5
|
import { existsSync as a } from "node:fs";
|
|
6
6
|
import { createLogger as o } from "@voltro/logger";
|