@voltro/cli 0.30.0 → 0.30.2
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 +119 -0
- package/dist/{apiBuild-BceikpQf.js → apiBuild-BUS1RfPi.js} +2 -2
- package/dist/apiBuild-DMlxvL8h.js +2 -0
- package/dist/bin.js +3 -3
- package/dist/checkCommand-CARZ36Tr.js +2 -0
- package/dist/{checkCommand-BMr-X48w.js → checkCommand-D_wdOFhw.js} +498 -321
- package/dist/{commands-D4Y1-Nlu.js → commands-BgGAUcku.js} +2392 -2390
- package/dist/{dbCommand-C7hbl5pk.js → dbCommand-CbPRCD1x.js} +56 -19
- package/dist/dbCommand-Ht47LrV-.js +2 -0
- package/dist/{dev-DmnkH-wr.js → dev-GAOIot9G.js} +2202 -2170
- package/dist/{dev-Cr-teYsz.js → dev-tPcOmjPJ.js} +1 -1
- package/dist/{frameworkTableAssembly-BzAajuUv.js → frameworkTableAssembly-BwIrO5nv.js} +162 -145
- package/dist/frameworkTableAssembly-D-EebUQX.js +2 -0
- package/dist/index.js +1 -1
- package/dist/{inspectMetrics-BeJdP_3b.js → inspectMetrics-BM1vrsga.js} +316 -314
- package/dist/{sdkgen-CqpOq_fy.js → sdkgen-BV4fFucu.js} +1 -1
- package/dist/{serveCommand-Ciq_wIY8.js → serveCommand-ClqXCX1y.js} +22 -21
- package/dist/serveEntry.js +2 -2
- package/dist/{start-ocqB1seX.js → start-CTnNvKlk.js} +370 -368
- package/dist/startEntry.js +2 -2
- package/package.json +17 -17
- package/templates/AGENTS.md +1 -1
- package/templates/agent-docs/_index.md +1 -1
- package/templates/agent-docs/cli.md +29 -0
- package/templates/agent-docs/internationalization.md +25 -3
- package/templates/agent-docs/routing.md +14 -0
- package/templates/agent-docs/whats-new.md +23 -352
- package/templates/agent-docs/workflows.md +2 -0
- package/templates/apps/api-ai/package.json +7 -7
- package/templates/apps/api-auth/package.json +8 -8
- package/templates/apps/api-backend/package.json +7 -7
- package/templates/apps/api-backend-deactivation/package.json +7 -7
- package/templates/apps/api-backend-mail/package.json +8 -8
- package/templates/apps/api-backend-mariadb/package.json +9 -9
- package/templates/apps/api-backend-sqlite/package.json +8 -8
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-cms/package.json +10 -10
- package/templates/apps/api-collab/package.json +8 -8
- package/templates/apps/api-data-advanced/package.json +8 -8
- package/templates/apps/api-durable/package.json +8 -8
- package/templates/apps/api-feature-flags/package.json +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-saas-starter/package.json +10 -10
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-status/package.json +8 -8
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- package/templates/apps/changelog/package.json +6 -6
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +8 -8
- package/templates/apps/frontend-app/package.json +8 -8
- package/templates/apps/frontend-auth/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-cms/package.json +9 -9
- package/templates/apps/frontend-collab/package.json +9 -9
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +7 -7
- package/templates/apps/frontend-docs/package.json +7 -7
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +7 -7
- package/templates/apps/frontend-portal/package.json +8 -8
- package/templates/apps/frontend-saas/package.json +8 -8
- package/templates/apps/frontend-spa/package.json +7 -7
- package/templates/apps/frontend-ssr/package.json +7 -7
- package/templates/apps/frontend-ssr-api/package.json +8 -8
- package/templates/apps/frontend-static-blog/package.json +6 -6
- package/templates/apps/frontend-status/package.json +8 -8
- package/templates/apps/mobile-app/package.json +2 -2
- package/dist/apiBuild-CxvR1Dwt.js +0 -2
- package/dist/checkCommand-BOk9y264.js +0 -2
- package/dist/dbCommand-D8nhyppR.js +0 -2
- package/dist/frameworkTableAssembly-DU0aOxjL.js +0 -2
package/dist/startEntry.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t } from "./start-
|
|
1
|
+
import { tt as e } from "./inspectMetrics-BM1vrsga.js";
|
|
2
|
+
import { t } from "./start-CTnNvKlk.js";
|
|
3
3
|
export { e as loadDotEnv, t as runStartCommand };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voltro/cli",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.2",
|
|
4
4
|
"description": "The `voltro` CLI — dev server, codegen, migrations, project scaffolding, agent-docs seeding, and production serve.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"voltro",
|
|
@@ -62,22 +62,22 @@
|
|
|
62
62
|
"@effect/platform-node": "^0.108.0",
|
|
63
63
|
"@effect/sql": "^0.52.0",
|
|
64
64
|
"@effect/workflow": "^0.19.0",
|
|
65
|
-
"@voltro/ai": "0.30.
|
|
66
|
-
"@voltro/cache": "0.30.
|
|
67
|
-
"@voltro/data-transfer": "0.30.
|
|
68
|
-
"@voltro/database": "0.30.
|
|
69
|
-
"@voltro/env": "0.30.
|
|
70
|
-
"@voltro/kv": "0.30.
|
|
71
|
-
"@voltro/logger": "0.30.
|
|
72
|
-
"@voltro/plugin-auth": "0.30.
|
|
73
|
-
"@voltro/plugin-broadcast": "0.30.
|
|
74
|
-
"@voltro/plugin-mail": "0.30.
|
|
75
|
-
"@voltro/plugin-storage": "0.30.
|
|
76
|
-
"@voltro/plugin-webhooks": "0.30.
|
|
77
|
-
"@voltro/protocol": "0.30.
|
|
78
|
-
"@voltro/runtime": "0.30.
|
|
79
|
-
"@voltro/serverless": "0.30.
|
|
80
|
-
"@voltro/workflow": "0.30.
|
|
65
|
+
"@voltro/ai": "0.30.2",
|
|
66
|
+
"@voltro/cache": "0.30.2",
|
|
67
|
+
"@voltro/data-transfer": "0.30.2",
|
|
68
|
+
"@voltro/database": "0.30.2",
|
|
69
|
+
"@voltro/env": "0.30.2",
|
|
70
|
+
"@voltro/kv": "0.30.2",
|
|
71
|
+
"@voltro/logger": "0.30.2",
|
|
72
|
+
"@voltro/plugin-auth": "0.30.2",
|
|
73
|
+
"@voltro/plugin-broadcast": "0.30.2",
|
|
74
|
+
"@voltro/plugin-mail": "0.30.2",
|
|
75
|
+
"@voltro/plugin-storage": "0.30.2",
|
|
76
|
+
"@voltro/plugin-webhooks": "0.30.2",
|
|
77
|
+
"@voltro/protocol": "0.30.2",
|
|
78
|
+
"@voltro/runtime": "0.30.2",
|
|
79
|
+
"@voltro/serverless": "0.30.2",
|
|
80
|
+
"@voltro/workflow": "0.30.2",
|
|
81
81
|
"chokidar": "^5.0.0",
|
|
82
82
|
"ioredis": "^5.11.1",
|
|
83
83
|
"tinyglobby": "^0.2.17",
|
package/templates/AGENTS.md
CHANGED
|
@@ -652,7 +652,7 @@ each plugin's own README.
|
|
|
652
652
|
|
|
653
653
|
| Topic | Open | Summary |
|
|
654
654
|
|---|---|---|
|
|
655
|
-
| **What's new in 0.30.
|
|
655
|
+
| **What's new in 0.30.2** | `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. |
|
|
656
656
|
| 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. |
|
|
657
657
|
| 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. |
|
|
658
658
|
| 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.30.
|
|
12
|
+
| **What's new in 0.30.2** | `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. |
|
|
@@ -1181,6 +1181,35 @@ re-open a hole nor hide one, and it is consulted **last**: an executor that gain
|
|
|
1181
1181
|
a real guard is reported as guarded whether or not its line is still there. The
|
|
1182
1182
|
list can only shrink unless someone adds to it deliberately.
|
|
1183
1183
|
|
|
1184
|
+
**Two kinds of line, because "debt" and "reviewed" are different claims.** A bare
|
|
1185
|
+
tag is debt. A tag with `reviewed=<why>` says a human read the executor and found
|
|
1186
|
+
it genuinely open — constrained by something the scanner cannot see:
|
|
1187
|
+
|
|
1188
|
+
```txt
|
|
1189
|
+
teams.deleteSubTeam
|
|
1190
|
+
inquiries.publicFeed reviewed=public by design; returns only published rows
|
|
1191
|
+
```
|
|
1192
|
+
|
|
1193
|
+
The reason is required: `reviewed=` with no why is the claim without the
|
|
1194
|
+
evidence, and doctor refuses it. A bare tag is always available and is the honest
|
|
1195
|
+
alternative. The two are counted and printed apart, and
|
|
1196
|
+
`--write-authz-allowlist` is **additive**: it keeps the existing file verbatim —
|
|
1197
|
+
entries, comments, grouping, order — and appends only tags it does not already
|
|
1198
|
+
contain. It cannot remove a line. Removing one is your edit, or it happens on its
|
|
1199
|
+
own when an executor gains a guard and its line stops mattering.
|
|
1200
|
+
|
|
1201
|
+
#### Reading the whole list
|
|
1202
|
+
|
|
1203
|
+
The human view prints the 20 most severe unchecked executors. The complete scan
|
|
1204
|
+
— every finding, the counts, the inferred guard vocabulary, and the debt/reviewed
|
|
1205
|
+
split — is in `voltro doctor --json` under `authz`:
|
|
1206
|
+
|
|
1207
|
+
```bash
|
|
1208
|
+
voltro doctor --json | jq '.authz.unchecked[] | {tag, why, path}'
|
|
1209
|
+
```
|
|
1210
|
+
|
|
1211
|
+
Nothing is truncated there. If you are triaging, work from the JSON.
|
|
1212
|
+
|
|
1184
1213
|
#### Before you hand-roll another check
|
|
1185
1214
|
|
|
1186
1215
|
If your checks are imperative because a scope cannot express "may this subject
|
|
@@ -29,8 +29,8 @@ export default {
|
|
|
29
29
|
type: 'web' as const,
|
|
30
30
|
name: 'myApp',
|
|
31
31
|
port: 5191,
|
|
32
|
-
//
|
|
33
|
-
//
|
|
32
|
+
// The languages this app serves. Drives `<html lang>`, the resolved
|
|
33
|
+
// locale, and the `locale` your page `meta` receives.
|
|
34
34
|
locales: ['en', 'de'] as const,
|
|
35
35
|
// Fallback locale when no cookie / Accept-Language matches a
|
|
36
36
|
// supported one. MUST be in `locales`. Pick your source-of-truth
|
|
@@ -39,7 +39,29 @@ export default {
|
|
|
39
39
|
}
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
The framework's generated `.framework/app.tsx` wraps the Router in `<I18nProvider>` automatically
|
|
42
|
+
The framework's generated `.framework/app.tsx` wraps the Router in `<I18nProvider>` automatically when your app **ships catalogs**. You don't write the provider yourself; you don't import `@voltro/i18n` in your layout.
|
|
43
|
+
|
|
44
|
+
### Declaring languages is not the same as adopting the catalogs
|
|
45
|
+
|
|
46
|
+
`locales:` states which languages the app serves. Whether `@voltro/i18n` gets
|
|
47
|
+
wired is decided separately, by whether `src/locales/<code>.ts` exists for every
|
|
48
|
+
listed code:
|
|
49
|
+
|
|
50
|
+
| `locales:` | `src/locales/*` | what you get |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| declared | present | `<I18nProvider>` wired, `useT()` works, plus the language facts |
|
|
53
|
+
| declared | absent | the language facts ONLY — `<html lang>`, the resolved locale, `meta.locale`. Bring your own i18n stack. |
|
|
54
|
+
| absent | — | everything falls back to `'en'` |
|
|
55
|
+
|
|
56
|
+
The second row exists because the two used to be one switch, and that made
|
|
57
|
+
`locales:` unusable for an app with its own i18n: declaring it demanded catalog
|
|
58
|
+
files and failed the boot, so the option got left out — and then `<html lang>`
|
|
59
|
+
was `"en"` and every page's `meta` received `locale: 'en'`, for every visitor, in
|
|
60
|
+
an app that is not English. That is worse than useless: a page that trusted the
|
|
61
|
+
value would have rendered the wrong language.
|
|
62
|
+
|
|
63
|
+
`voltro dev` prints which mode it is in, so a declared-but-unwired app is never a
|
|
64
|
+
silent surprise.
|
|
43
65
|
|
|
44
66
|
## Locale resolution order
|
|
45
67
|
|
|
@@ -556,6 +556,20 @@ Use SSR for:
|
|
|
556
556
|
- **Personalised content** — recommendations, "your" anything.
|
|
557
557
|
- **Search result pages** — the query string changes per request.
|
|
558
558
|
|
|
559
|
+
### What the server render sees
|
|
560
|
+
|
|
561
|
+
An SSR render is given the request, not a guess at it: the matched `pathname`
|
|
562
|
+
and `params`, the request's cookies and headers (`useServerRequest()`), and the
|
|
563
|
+
**query string**. `useSearchParams()` is the supported reader and works on both
|
|
564
|
+
sides — on the server it reads the request URL, on the client
|
|
565
|
+
`window.location.search` — so a page keyed off `?tab=…` renders the same markup
|
|
566
|
+
in both places.
|
|
567
|
+
|
|
568
|
+
That last part is worth stating because it is the thing a mismatch is made of.
|
|
569
|
+
Anything the server renders from a value the client computes differently
|
|
570
|
+
hydrates with a warning, even when the DOM happens to agree; reach for the hook
|
|
571
|
+
rather than reading the router context directly.
|
|
572
|
+
|
|
559
573
|
Cost: every request triggers a fresh render. For very high-traffic pages, prefer ISR.
|
|
560
574
|
|
|
561
575
|
### Streaming SSR
|