@voltro/cli 0.8.0 → 0.9.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.
Files changed (54) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/THIRD-PARTY-NOTICES.md +2 -2
  3. package/dist/apiBuild-Ba4njm9m.js +2 -0
  4. package/dist/{apiBuild-OrDkXGFX.js → apiBuild-eInHm_bJ.js} +2 -2
  5. package/dist/bin.js +2 -2
  6. package/dist/{commands-DT4PipBz.js → commands-Cxs97AFp.js} +1685 -1592
  7. package/dist/{dev-Ga65K4jc.js → dev-63Ehpw2p.js} +179 -179
  8. package/dist/dev-CXsR8Zgo.js +2 -0
  9. package/dist/index.js +1 -1
  10. package/dist/{inspectMetrics-EK0CcHyu.js → inspectMetrics-DVCKKSPk.js} +930 -839
  11. package/dist/{serveCommand-CR5xnYZt.js → serveCommand-Cq7BhtpB.js} +5 -5
  12. package/dist/serveEntry.js +3 -3
  13. package/dist/{start-DuyBQxW3.js → start-CYe-7ueh.js} +296 -267
  14. package/dist/startEntry.js +2 -2
  15. package/package.json +18 -17
  16. package/templates/agent-docs/cli.md +49 -1
  17. package/templates/agent-docs/routing.md +26 -2
  18. package/templates/apps/api-ai/package.json +7 -7
  19. package/templates/apps/api-auth/package.json +8 -8
  20. package/templates/apps/api-backend/package.json +7 -7
  21. package/templates/apps/api-backend-deactivation/package.json +7 -7
  22. package/templates/apps/api-backend-mail/package.json +8 -8
  23. package/templates/apps/api-backend-mariadb/package.json +9 -9
  24. package/templates/apps/api-backend-storage/package.json +8 -8
  25. package/templates/apps/api-data-advanced/package.json +8 -8
  26. package/templates/apps/api-durable/package.json +8 -8
  27. package/templates/apps/api-feature-flags/package.json +9 -9
  28. package/templates/apps/api-governance/package.json +8 -8
  29. package/templates/apps/api-kv/package.json +8 -8
  30. package/templates/apps/api-moderation/package.json +8 -8
  31. package/templates/apps/api-observability/package.json +8 -8
  32. package/templates/apps/api-ratelimit/package.json +8 -8
  33. package/templates/apps/api-rbac/package.json +8 -8
  34. package/templates/apps/api-rest/package.json +7 -7
  35. package/templates/apps/api-saas/package.json +11 -11
  36. package/templates/apps/api-search/package.json +8 -8
  37. package/templates/apps/api-versioning/package.json +8 -8
  38. package/templates/apps/api-webhooks/package.json +8 -8
  39. package/templates/apps/changelog/package.json +6 -6
  40. package/templates/apps/edge-functions/package.json +2 -2
  41. package/templates/apps/frontend-admin/package.json +8 -8
  42. package/templates/apps/frontend-app/package.json +8 -8
  43. package/templates/apps/frontend-blank/package.json +7 -7
  44. package/templates/apps/frontend-contact/package.json +7 -7
  45. package/templates/apps/frontend-dashboard/package.json +7 -7
  46. package/templates/apps/frontend-docs/package.json +7 -7
  47. package/templates/apps/frontend-i18n/package.json +6 -6
  48. package/templates/apps/frontend-landing/package.json +7 -7
  49. package/templates/apps/frontend-spa/package.json +7 -7
  50. package/templates/apps/frontend-ssr/package.json +7 -7
  51. package/templates/apps/frontend-ssr-api/package.json +8 -8
  52. package/templates/apps/frontend-static-blog/package.json +6 -6
  53. package/dist/apiBuild-CmtI6Ygh.js +0 -2
  54. package/dist/dev-Ca1jdwnt.js +0 -2
@@ -1,3 +1,3 @@
1
- import { P as e } from "./inspectMetrics-EK0CcHyu.js";
2
- import { t } from "./start-DuyBQxW3.js";
1
+ import { I as e } from "./inspectMetrics-DVCKKSPk.js";
2
+ import { t } from "./start-CYe-7ueh.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.8.0",
3
+ "version": "0.9.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",
@@ -57,24 +57,25 @@
57
57
  "@effect/platform-node": "^0.107.0",
58
58
  "@effect/sql": "^0.51.1",
59
59
  "@effect/workflow": "^0.18.2",
60
- "@voltro/ai": "0.8.0",
61
- "@voltro/cache": "0.8.0",
62
- "@voltro/data-transfer": "0.8.0",
63
- "@voltro/database": "0.8.0",
64
- "@voltro/env": "0.8.0",
65
- "@voltro/kv": "0.8.0",
66
- "@voltro/logger": "0.8.0",
67
- "@voltro/plugin-auth": "0.8.0",
68
- "@voltro/plugin-broadcast": "0.8.0",
69
- "@voltro/plugin-mail": "0.8.0",
70
- "@voltro/plugin-storage": "0.8.0",
71
- "@voltro/plugin-webhooks": "0.8.0",
72
- "@voltro/protocol": "0.8.0",
73
- "@voltro/runtime": "0.8.0",
74
- "@voltro/serverless": "0.8.0",
75
- "@voltro/workflow": "0.8.0",
60
+ "@voltro/ai": "0.9.0",
61
+ "@voltro/cache": "0.9.0",
62
+ "@voltro/data-transfer": "0.9.0",
63
+ "@voltro/database": "0.9.0",
64
+ "@voltro/env": "0.9.0",
65
+ "@voltro/kv": "0.9.0",
66
+ "@voltro/logger": "0.9.0",
67
+ "@voltro/plugin-auth": "0.9.0",
68
+ "@voltro/plugin-broadcast": "0.9.0",
69
+ "@voltro/plugin-mail": "0.9.0",
70
+ "@voltro/plugin-storage": "0.9.0",
71
+ "@voltro/plugin-webhooks": "0.9.0",
72
+ "@voltro/protocol": "0.9.0",
73
+ "@voltro/runtime": "0.9.0",
74
+ "@voltro/serverless": "0.9.0",
75
+ "@voltro/workflow": "0.9.0",
76
76
  "chokidar": "^5.0.0",
77
77
  "ioredis": "^5.11.1",
78
+ "tinyglobby": "^0.2.17",
78
79
  "ts-morph": "^28.0.0"
79
80
  },
80
81
  "optionalDependencies": {
@@ -432,6 +432,14 @@ voltro dev apps/acme/api # explicit path
432
432
  - CSS changes → swap stylesheets in place.
433
433
  - New page file → regen the entry files → reload the route tree.
434
434
 
435
+ `renderMode: 'ssr'` pages compile on demand the first time each route is hit. To
436
+ keep a burst of cold pages — several browser tabs, or a health-check sweep across
437
+ many routes — from spiking memory, `voltro dev` compiles at most **4** of them at
438
+ once and collapses duplicate concurrent requests for the same route into a single
439
+ compile. Already-compiled (warm) pages are never throttled, so a hot app stays
440
+ fully concurrent. Tune the cap with `VOLTRO_DEV_SSR_COMPILE_CONCURRENCY` (below) —
441
+ drop it on a low-memory box, raise it on a big machine.
442
+
435
443
 
436
444
  ### Fast Refresh: what hot-updates and what reloads
437
445
 
@@ -515,6 +523,7 @@ A `<DevtoolsStringsProvider strings={…}>` mounted above the overlay works too;
515
523
  | `PORT=4001` | Override the listen port (api or web). Both kinds read `PORT`, then `app.config.ts` `port:`, then the default. |
516
524
  | `VOLTRO_DASHBOARD_PORT=5180` | Override the auto-launched dashboard port (default `5179`). |
517
525
  | `VOLTRO_LOG_LEVEL=debug` | Verbose framework logs. |
526
+ | `VOLTRO_DEV_SSR_COMPILE_CONCURRENCY=4` | Max `ssr` pages compiled on demand at once (default `4`). Lower it (`1`/`2`) on a low-memory box if a burst of first-time `ssr` page loads spikes memory; raise it on a big machine. Warm (already-compiled) pages are never throttled. |
518
527
 
519
528
  ## Multi-app dev (turbo)
520
529
 
@@ -873,13 +882,52 @@ voltro doctor . --json # the complete scan: every file path, machine-re
873
882
  "use": ".one() — fails with the typed NoRowFound on zero rows AND on more than one",
874
883
  "files": ["queries/team.get.ts", "queries/user.get.ts", "…"]
875
884
  }
876
- ]
885
+ ],
886
+ "spaCandidates": []
877
887
  }
878
888
  ```
879
889
 
880
890
  That is the form to hand an agent, or to pipe into a script that works the list
881
891
  file by file.
882
892
 
893
+ ### `renderMode:'spa'` candidates
894
+
895
+ `voltro doctor` also flags web pages that could adopt `renderMode: 'spa'` without
896
+ losing their server-rendered shell. A page under a layout renders that LAYOUT
897
+ chain on the server — nav, sidebar, auth gate, via the layout's own loader — even
898
+ when the page itself is `'spa'`. So a page whose BODY needs no SSR can skip its
899
+ per-page SSR compile while the shell still server-renders. Like the hand-roll
900
+ detector, this is **advisory and never blocking**.
901
+
902
+ A page is listed when ALL of these hold:
903
+
904
+ - it is a **page file** — not `layout.tsx` / `loading.tsx` / `error.tsx` /
905
+ `not-found.tsx`;
906
+ - it exports **no `loader`** (so `'spa'` loses nothing the page contributed
907
+ server-side);
908
+ - its `renderMode` is **`'ssr'` or unset/default** — not a page that already
909
+ opted into a non-SSR render (`'spa'` / `'static'` / `'isr'`, or any other
910
+ explicit mode);
911
+ - a **`layout.tsx` sits somewhere in its directory chain** — root, an ancestor, or
912
+ the page's own dir. This is the load-bearing condition: only then does a layout
913
+ still SSR the shell. A page with no layout would, as `'spa'`, ship no server
914
+ HTML at all — so it is never flagged.
915
+
916
+ ```text
917
+ • renderMode:'spa' candidates (2 pages — loader-free, under a layout, currently ssr/default):
918
+ src/pages/dashboard/index.tsx (/dashboard) — default renderMode
919
+ src/pages/admin/settings.tsx (/admin/settings) — renderMode:'ssr'
920
+ → renderMode:'spa' skips this page's SSR compile while its layout shell still renders server-side — adopt it if the page BODY does not need SSR (internal/authenticated pages); keep 'ssr' if the page content needs SEO or server first-paint.
921
+ ```
922
+
923
+ Adopt `'spa'` for internal or authenticated pages whose content needs no SEO or
924
+ server first-paint; keep `'ssr'` (or the `'static'` default) when it does. There
925
+ is deliberately **no codemod** to flip pages automatically — dropping a page
926
+ body's server render is a per-page product decision, not a mechanically-safe
927
+ transform. Every candidate (with its `file`, `pattern`, and `currentMode`) is
928
+ also in `voltro doctor --json` under a `spaCandidates` array; the human view
929
+ above caps at ten pages and points to `--json` for the rest.
930
+
883
931
  ## `voltro capabilities` — what the framework actually exports
884
932
 
885
933
  Asked "what does this framework export", a language model will produce a
@@ -625,6 +625,20 @@ The framework reads Postgres logical replication; writes to `posts` or `comments
625
625
 
626
626
  Requires `SSR_CACHE=postgres` and a `wal_level=logical` Postgres.
627
627
 
628
+ ## spa (client-only, with an optional SSR layout shell)
629
+
630
+ ```tsx
631
+ export const renderMode = 'spa' as const
632
+ ```
633
+
634
+ A `spa` page renders entirely in the browser — the page itself is never server-rendered. Reach for it when a page genuinely needs a fresh client render every load (most reactive dashboards) and doesn't need its own first-paint HTML or SEO.
635
+
636
+ **If the page's route has a layout, that layout is still server-rendered.** The server renders the layout chain — running its layout loaders — around an empty page slot (`<div data-voltro-page-slot>`), inlines the layout data, and marks the page client-only. The browser hydrates that shell and mounts the page into the slot after hydration. So the shell (nav, sidebar, auth gate) gets an instant first paint while the page stays client-only. The page's own `loader` still runs in the browser.
637
+
638
+ Because a layout now runs on the server for spa routes too, a layout used **only** by spa pages must be SSR-safe — no unguarded `window` / `document` in its render or its `loader`. Layouts shared with any `static` / `ssr` / `isr` page already render server-side (and `static` is the default), so they are unaffected. A spa page with **no** layout is a pure client mount, unchanged.
639
+
640
+ > **Deferred (follow-ups, not yet shipped):** `voltro build` does not prerender the spa layout shell to a file — `voltro start` renders it on demand. `defer()` / streaming inside a spa-shell layout is unsupported (the shell is buffered). Fast Refresh of the shell path is not yet specialised.
641
+
628
642
  ## Picking between them
629
643
 
630
644
  | You have… | Use |
@@ -663,7 +677,8 @@ A request to `/foo`:
663
677
  1. **Pre-rendered HTML exists at `dist/foo/index.html`?** Serve it. (static + isr-already-cached.)
664
678
  2. **No pre-render, page is `ssr`?** Render fresh, serve.
665
679
  3. **No pre-render, page is `isr`?** Cache lookup → MISS → render → store → serve.
666
- 4. **No pre-render, page is `static`?** Serve the SPA shell the client router takes over.
680
+ 4. **No pre-render, page is `spa` with a layout?** Render the SSR layout shell (layouts + an empty page slot) on demand; the client mounts the page into the slot.
681
+ 5. **No pre-render, page is `spa` with no layout, or `static`?** Serve the SPA shell — the client router takes over.
667
682
 
668
683
  That last case is how dynamic `static` routes work in dev / when `getStaticPaths` didn't include the URL.
669
684
 
@@ -789,7 +804,7 @@ export const loader = async ({ query }: { query?: <T>(tag: string, input?: Recor
789
804
  // EAGER — awaited before the shell renders. Keep this fast.
790
805
  { user: await query?.<User>('users.me') },
791
806
  // DEFERRED — NOT awaited. Each becomes a promise on useLoaderData().
792
- { report: query!<Report>('reports.quarterly') },
807
+ { report: query!<QuarterlyReport>('reports.quarterly') },
793
808
  )
794
809
 
795
810
  export default function Dashboard() {
@@ -931,6 +946,15 @@ Two rules that fall out of this:
931
946
 
932
947
  Under the hood, `ctx.query` is a one-shot `POST /rpc` call (see [Wire protocol](/docs/data/wire-protocol#http-one-shot-rpc-post-rpc)).
933
948
 
949
+ ### Authentication in loaders
950
+
951
+ Auth is resolved by the **api**, never the web app. Two rules follow:
952
+
953
+ - **Strategies live on the `type:'api'` app.** A `type:'web'` app has no auth middleware, so `auth.strategies` in a web `app.config.ts` does nothing. Configure your IdP (`supabaseStrategy`, `workosStrategy`, the built-in password strategy, …) on the api's `app.config.ts`.
954
+ - **`ctx.query` forwards the request's cookie automatically.** A server-side loader's `ctx.query` sends the browser's `Cookie` header on the one-shot `POST /rpc`, so the api resolves the SAME Subject + tenant it would over the WebSocket. You never thread a token through by hand — a logged-in user's cookie-mode session (e.g. `@supabase/ssr`'s `sb-<ref>-auth-token`) is verified by the api's strategies, and tenant-scoped queries return that user's rows during SSR.
955
+
956
+ So a cookie-mode Supabase app configures `supabaseStrategy({ cookieName: 'sb-<ref>-auth-token' })` on the **api**; the web loader's `ctx.query` then authenticates for free. See [Supabase Auth](/docs/plugins/auth-supabase).
957
+
934
958
  ## Errors from loaders
935
959
 
936
960
  If the loader throws, the framework:
@@ -11,16 +11,16 @@
11
11
  "dependencies": {
12
12
  "@effect/platform": "^0.96.1",
13
13
  "@effect/rpc": "^0.75.1",
14
- "@voltro/ai": "0.8.0",
15
- "@voltro/cli": "0.8.0",
16
- "@voltro/database": "0.8.0",
17
- "@voltro/env": "0.8.0",
18
- "@voltro/protocol": "0.8.0",
19
- "@voltro/runtime": "0.8.0",
14
+ "@voltro/ai": "0.9.0",
15
+ "@voltro/cli": "0.9.0",
16
+ "@voltro/database": "0.9.0",
17
+ "@voltro/env": "0.9.0",
18
+ "@voltro/protocol": "0.9.0",
19
+ "@voltro/runtime": "0.9.0",
20
20
  "effect": "^3.21.2"
21
21
  },
22
22
  "devDependencies": {
23
- "@voltro/testing": "0.8.0",
23
+ "@voltro/testing": "0.9.0",
24
24
  "typescript": "^5.7.0",
25
25
  "vitest": "^3.0.0"
26
26
  }
@@ -12,17 +12,17 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.8.0",
16
- "@voltro/database": "0.8.0",
17
- "@voltro/env": "0.8.0",
18
- "@voltro/plugin-auth": "0.8.0",
19
- "@voltro/protocol": "0.8.0",
20
- "@voltro/runtime": "0.8.0",
21
- "@voltro/sql-postgres": "0.8.0",
15
+ "@voltro/cli": "0.9.0",
16
+ "@voltro/database": "0.9.0",
17
+ "@voltro/env": "0.9.0",
18
+ "@voltro/plugin-auth": "0.9.0",
19
+ "@voltro/protocol": "0.9.0",
20
+ "@voltro/runtime": "0.9.0",
21
+ "@voltro/sql-postgres": "0.9.0",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.8.0",
25
+ "@voltro/testing": "0.9.0",
26
26
  "typescript": "^5.7.0",
27
27
  "vitest": "^3.0.0"
28
28
  }
@@ -12,16 +12,16 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.8.0",
16
- "@voltro/database": "0.8.0",
17
- "@voltro/env": "0.8.0",
18
- "@voltro/plugin-multitenancy": "0.8.0",
19
- "@voltro/protocol": "0.8.0",
20
- "@voltro/runtime": "0.8.0",
15
+ "@voltro/cli": "0.9.0",
16
+ "@voltro/database": "0.9.0",
17
+ "@voltro/env": "0.9.0",
18
+ "@voltro/plugin-multitenancy": "0.9.0",
19
+ "@voltro/protocol": "0.9.0",
20
+ "@voltro/runtime": "0.9.0",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.8.0",
24
+ "@voltro/testing": "0.9.0",
25
25
  "typescript": "^5.7.0",
26
26
  "vitest": "^3.0.0"
27
27
  }
@@ -12,16 +12,16 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.8.0",
16
- "@voltro/database": "0.8.0",
17
- "@voltro/env": "0.8.0",
18
- "@voltro/plugin-deactivation": "0.8.0",
19
- "@voltro/protocol": "0.8.0",
20
- "@voltro/runtime": "0.8.0",
15
+ "@voltro/cli": "0.9.0",
16
+ "@voltro/database": "0.9.0",
17
+ "@voltro/env": "0.9.0",
18
+ "@voltro/plugin-deactivation": "0.9.0",
19
+ "@voltro/protocol": "0.9.0",
20
+ "@voltro/runtime": "0.9.0",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.8.0",
24
+ "@voltro/testing": "0.9.0",
25
25
  "typescript": "^5.7.0",
26
26
  "vitest": "^3.0.0"
27
27
  }
@@ -12,18 +12,18 @@
12
12
  "dependencies": {
13
13
  "@react-email/components": "^1.0.12",
14
14
  "@react-email/render": "^1.4.0",
15
- "@voltro/cli": "0.8.0",
16
- "@voltro/database": "0.8.0",
17
- "@voltro/env": "0.8.0",
18
- "@voltro/plugin-mail": "0.8.0",
19
- "@voltro/plugin-multitenancy": "0.8.0",
20
- "@voltro/protocol": "0.8.0",
21
- "@voltro/runtime": "0.8.0",
15
+ "@voltro/cli": "0.9.0",
16
+ "@voltro/database": "0.9.0",
17
+ "@voltro/env": "0.9.0",
18
+ "@voltro/plugin-mail": "0.9.0",
19
+ "@voltro/plugin-multitenancy": "0.9.0",
20
+ "@voltro/protocol": "0.9.0",
21
+ "@voltro/runtime": "0.9.0",
22
22
  "effect": "^3.21.2",
23
23
  "react": "^19.0.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.8.0",
26
+ "@voltro/testing": "0.9.0",
27
27
  "typescript": "^5.7.0",
28
28
  "vitest": "^3.0.0"
29
29
  }
@@ -12,18 +12,18 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.8.0",
16
- "@voltro/database": "0.8.0",
17
- "@voltro/env": "0.8.0",
18
- "@voltro/plugin-multitenancy": "0.8.0",
19
- "@voltro/plugin-storage": "0.8.0",
20
- "@voltro/protocol": "0.8.0",
21
- "@voltro/runtime": "0.8.0",
22
- "@voltro/sql-mysql": "0.8.0",
15
+ "@voltro/cli": "0.9.0",
16
+ "@voltro/database": "0.9.0",
17
+ "@voltro/env": "0.9.0",
18
+ "@voltro/plugin-multitenancy": "0.9.0",
19
+ "@voltro/plugin-storage": "0.9.0",
20
+ "@voltro/protocol": "0.9.0",
21
+ "@voltro/runtime": "0.9.0",
22
+ "@voltro/sql-mysql": "0.9.0",
23
23
  "effect": "^3.21.2"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.8.0",
26
+ "@voltro/testing": "0.9.0",
27
27
  "typescript": "^5.7.0",
28
28
  "vitest": "^3.0.0"
29
29
  }
@@ -10,17 +10,17 @@
10
10
  "test": "voltro test"
11
11
  },
12
12
  "dependencies": {
13
- "@voltro/cli": "0.8.0",
14
- "@voltro/database": "0.8.0",
15
- "@voltro/env": "0.8.0",
16
- "@voltro/plugin-multitenancy": "0.8.0",
17
- "@voltro/plugin-storage": "0.8.0",
18
- "@voltro/protocol": "0.8.0",
19
- "@voltro/runtime": "0.8.0",
13
+ "@voltro/cli": "0.9.0",
14
+ "@voltro/database": "0.9.0",
15
+ "@voltro/env": "0.9.0",
16
+ "@voltro/plugin-multitenancy": "0.9.0",
17
+ "@voltro/plugin-storage": "0.9.0",
18
+ "@voltro/protocol": "0.9.0",
19
+ "@voltro/runtime": "0.9.0",
20
20
  "effect": "^3.21.2"
21
21
  },
22
22
  "devDependencies": {
23
- "@voltro/testing": "0.8.0",
23
+ "@voltro/testing": "0.9.0",
24
24
  "typescript": "^5.7.0",
25
25
  "vitest": "^3.0.0"
26
26
  }
@@ -11,17 +11,17 @@
11
11
  "dependencies": {
12
12
  "@effect/platform": "^0.96.1",
13
13
  "@effect/rpc": "^0.75.1",
14
- "@voltro/cli": "0.8.0",
15
- "@voltro/database": "0.8.0",
16
- "@voltro/env": "0.8.0",
17
- "@voltro/plugin-governance": "0.8.0",
18
- "@voltro/plugin-multitenancy": "0.8.0",
19
- "@voltro/protocol": "0.8.0",
20
- "@voltro/runtime": "0.8.0",
14
+ "@voltro/cli": "0.9.0",
15
+ "@voltro/database": "0.9.0",
16
+ "@voltro/env": "0.9.0",
17
+ "@voltro/plugin-governance": "0.9.0",
18
+ "@voltro/plugin-multitenancy": "0.9.0",
19
+ "@voltro/protocol": "0.9.0",
20
+ "@voltro/runtime": "0.9.0",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.8.0",
24
+ "@voltro/testing": "0.9.0",
25
25
  "typescript": "^5.7.0",
26
26
  "vitest": "^3.0.0"
27
27
  }
@@ -11,17 +11,17 @@
11
11
  "dependencies": {
12
12
  "@effect/platform": "^0.96.1",
13
13
  "@effect/rpc": "^0.75.1",
14
- "@voltro/cli": "0.8.0",
15
- "@voltro/database": "0.8.0",
16
- "@voltro/env": "0.8.0",
17
- "@voltro/plugin-multitenancy": "0.8.0",
18
- "@voltro/protocol": "0.8.0",
19
- "@voltro/runtime": "0.8.0",
20
- "@voltro/workflow": "0.8.0",
14
+ "@voltro/cli": "0.9.0",
15
+ "@voltro/database": "0.9.0",
16
+ "@voltro/env": "0.9.0",
17
+ "@voltro/plugin-multitenancy": "0.9.0",
18
+ "@voltro/protocol": "0.9.0",
19
+ "@voltro/runtime": "0.9.0",
20
+ "@voltro/workflow": "0.9.0",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.8.0",
24
+ "@voltro/testing": "0.9.0",
25
25
  "typescript": "^5.7.0",
26
26
  "vitest": "^3.0.0"
27
27
  }
@@ -12,18 +12,18 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.8.0",
16
- "@voltro/database": "0.8.0",
17
- "@voltro/env": "0.8.0",
18
- "@voltro/plugin-flags": "0.8.0",
19
- "@voltro/plugin-multitenancy": "0.8.0",
20
- "@voltro/protocol": "0.8.0",
21
- "@voltro/runtime": "0.8.0",
22
- "@voltro/sql-postgres": "0.8.0",
15
+ "@voltro/cli": "0.9.0",
16
+ "@voltro/database": "0.9.0",
17
+ "@voltro/env": "0.9.0",
18
+ "@voltro/plugin-flags": "0.9.0",
19
+ "@voltro/plugin-multitenancy": "0.9.0",
20
+ "@voltro/protocol": "0.9.0",
21
+ "@voltro/runtime": "0.9.0",
22
+ "@voltro/sql-postgres": "0.9.0",
23
23
  "effect": "^3.21.2"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.8.0",
26
+ "@voltro/testing": "0.9.0",
27
27
  "typescript": "^5.7.0",
28
28
  "vitest": "^3.0.0"
29
29
  }
@@ -12,17 +12,17 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.8.0",
16
- "@voltro/database": "0.8.0",
17
- "@voltro/env": "0.8.0",
18
- "@voltro/plugin-audit": "0.8.0",
19
- "@voltro/plugin-governance": "0.8.0",
20
- "@voltro/protocol": "0.8.0",
21
- "@voltro/runtime": "0.8.0",
15
+ "@voltro/cli": "0.9.0",
16
+ "@voltro/database": "0.9.0",
17
+ "@voltro/env": "0.9.0",
18
+ "@voltro/plugin-audit": "0.9.0",
19
+ "@voltro/plugin-governance": "0.9.0",
20
+ "@voltro/protocol": "0.9.0",
21
+ "@voltro/runtime": "0.9.0",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.8.0",
25
+ "@voltro/testing": "0.9.0",
26
26
  "typescript": "^5.7.0",
27
27
  "vitest": "^3.0.0"
28
28
  }
@@ -11,17 +11,17 @@
11
11
  "dependencies": {
12
12
  "@effect/platform": "^0.96.1",
13
13
  "@effect/rpc": "^0.75.1",
14
- "@voltro/cli": "0.8.0",
15
- "@voltro/database": "0.8.0",
16
- "@voltro/env": "0.8.0",
17
- "@voltro/kv": "0.8.0",
18
- "@voltro/plugin-multitenancy": "0.8.0",
19
- "@voltro/protocol": "0.8.0",
20
- "@voltro/runtime": "0.8.0",
14
+ "@voltro/cli": "0.9.0",
15
+ "@voltro/database": "0.9.0",
16
+ "@voltro/env": "0.9.0",
17
+ "@voltro/kv": "0.9.0",
18
+ "@voltro/plugin-multitenancy": "0.9.0",
19
+ "@voltro/protocol": "0.9.0",
20
+ "@voltro/runtime": "0.9.0",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.8.0",
24
+ "@voltro/testing": "0.9.0",
25
25
  "typescript": "^5.7.0",
26
26
  "vitest": "^3.0.0"
27
27
  }
@@ -12,17 +12,17 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.8.0",
16
- "@voltro/database": "0.8.0",
17
- "@voltro/env": "0.8.0",
18
- "@voltro/plugin-moderation": "0.8.0",
19
- "@voltro/plugin-multitenancy": "0.8.0",
20
- "@voltro/protocol": "0.8.0",
21
- "@voltro/runtime": "0.8.0",
15
+ "@voltro/cli": "0.9.0",
16
+ "@voltro/database": "0.9.0",
17
+ "@voltro/env": "0.9.0",
18
+ "@voltro/plugin-moderation": "0.9.0",
19
+ "@voltro/plugin-multitenancy": "0.9.0",
20
+ "@voltro/protocol": "0.9.0",
21
+ "@voltro/runtime": "0.9.0",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.8.0",
25
+ "@voltro/testing": "0.9.0",
26
26
  "typescript": "^5.7.0",
27
27
  "vitest": "^3.0.0"
28
28
  }
@@ -12,17 +12,17 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.8.0",
16
- "@voltro/database": "0.8.0",
17
- "@voltro/plugin-multitenancy": "0.8.0",
18
- "@voltro/plugin-prometheus": "0.8.0",
19
- "@voltro/plugin-sentry": "0.8.0",
20
- "@voltro/protocol": "0.8.0",
21
- "@voltro/runtime": "0.8.0",
15
+ "@voltro/cli": "0.9.0",
16
+ "@voltro/database": "0.9.0",
17
+ "@voltro/plugin-multitenancy": "0.9.0",
18
+ "@voltro/plugin-prometheus": "0.9.0",
19
+ "@voltro/plugin-sentry": "0.9.0",
20
+ "@voltro/protocol": "0.9.0",
21
+ "@voltro/runtime": "0.9.0",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.8.0",
25
+ "@voltro/testing": "0.9.0",
26
26
  "typescript": "^5.7.0",
27
27
  "vitest": "^3.0.0"
28
28
  }
@@ -12,17 +12,17 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.8.0",
16
- "@voltro/database": "0.8.0",
17
- "@voltro/env": "0.8.0",
18
- "@voltro/plugin-multitenancy": "0.8.0",
19
- "@voltro/plugin-ratelimit": "0.8.0",
20
- "@voltro/protocol": "0.8.0",
21
- "@voltro/runtime": "0.8.0",
15
+ "@voltro/cli": "0.9.0",
16
+ "@voltro/database": "0.9.0",
17
+ "@voltro/env": "0.9.0",
18
+ "@voltro/plugin-multitenancy": "0.9.0",
19
+ "@voltro/plugin-ratelimit": "0.9.0",
20
+ "@voltro/protocol": "0.9.0",
21
+ "@voltro/runtime": "0.9.0",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.8.0",
25
+ "@voltro/testing": "0.9.0",
26
26
  "typescript": "^5.7.0",
27
27
  "vitest": "^3.0.0"
28
28
  }
@@ -12,17 +12,17 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.8.0",
16
- "@voltro/database": "0.8.0",
17
- "@voltro/env": "0.8.0",
18
- "@voltro/plugin-multitenancy": "0.8.0",
19
- "@voltro/plugin-rbac": "0.8.0",
20
- "@voltro/protocol": "0.8.0",
21
- "@voltro/runtime": "0.8.0",
15
+ "@voltro/cli": "0.9.0",
16
+ "@voltro/database": "0.9.0",
17
+ "@voltro/env": "0.9.0",
18
+ "@voltro/plugin-multitenancy": "0.9.0",
19
+ "@voltro/plugin-rbac": "0.9.0",
20
+ "@voltro/protocol": "0.9.0",
21
+ "@voltro/runtime": "0.9.0",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.8.0",
25
+ "@voltro/testing": "0.9.0",
26
26
  "typescript": "^5.7.0",
27
27
  "vitest": "^3.0.0"
28
28
  }