@voltro/cli 0.3.0 → 0.5.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 (72) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/dist/{apiBuild-DdgYydVJ.js → apiBuild-CZugTK46.js} +2 -5
  3. package/dist/apiBuild-D-iBYKa3.js +2 -0
  4. package/dist/bin.js +2 -2
  5. package/dist/{commands-CXESev-z.js → commands-CJheDVOr.js} +2435 -2000
  6. package/dist/{dev-x_VqbV_8.js → dev-B71ICpXJ.js} +1993 -1823
  7. package/dist/dev-DNUetyG2.js +2 -0
  8. package/dist/index.js +1 -1
  9. package/dist/serveCommand-C0WFA396.js +1084 -0
  10. package/dist/serveEntry.js +2 -2
  11. package/package.json +17 -17
  12. package/templates/AGENTS.core.md +131 -0
  13. package/templates/AGENTS.md +131 -0
  14. package/templates/agent-docs/_manifest.json +4 -4
  15. package/templates/agent-docs/ai.md +34 -2
  16. package/templates/agent-docs/authentication.md +74 -2
  17. package/templates/agent-docs/cli.md +115 -0
  18. package/templates/agent-docs/data.md +302 -7
  19. package/templates/agent-docs/database/advancedqueries.md +25 -2
  20. package/templates/agent-docs/database/querying.md +17 -5
  21. package/templates/agent-docs/database/schema.md +5 -2
  22. package/templates/agent-docs/internationalization.md +237 -2
  23. package/templates/agent-docs/observability.md +9 -0
  24. package/templates/agent-docs/plugins.md +2 -2
  25. package/templates/agent-docs/reference.md +110 -0
  26. package/templates/agent-docs/schema-driven-ui.md +551 -2
  27. package/templates/agent-docs/templates/apibackends.md +10 -8
  28. package/templates/agent-docs/templates/overview.md +1 -1
  29. package/templates/agent-docs/testing.md +177 -3
  30. package/templates/agent-docs/workflows.md +11 -8
  31. package/templates/apps/api-ai/package.json +7 -7
  32. package/templates/apps/api-auth/package.json +8 -8
  33. package/templates/apps/api-backend/package.json +7 -7
  34. package/templates/apps/api-backend-deactivation/package.json +7 -7
  35. package/templates/apps/api-backend-mail/package.json +8 -8
  36. package/templates/apps/api-backend-mariadb/package.json +9 -9
  37. package/templates/apps/api-backend-storage/package.json +8 -8
  38. package/templates/apps/api-data-advanced/package.json +8 -8
  39. package/templates/apps/api-durable/package.json +8 -8
  40. package/templates/apps/api-feature-flags/package.json +9 -9
  41. package/templates/apps/api-governance/package.json +8 -8
  42. package/templates/apps/api-kv/package.json +8 -8
  43. package/templates/apps/api-moderation/package.json +8 -8
  44. package/templates/apps/api-observability/package.json +8 -8
  45. package/templates/apps/api-ratelimit/package.json +8 -8
  46. package/templates/apps/api-rbac/README.md +9 -4
  47. package/templates/apps/api-rbac/mutations/notes.create.mutation.server.ts +1 -1
  48. package/templates/apps/api-rbac/mutations/notes.create.mutation.ts +6 -6
  49. package/templates/apps/api-rbac/package.json +8 -8
  50. package/templates/apps/api-rbac/tests/notes.create.test.ts +8 -8
  51. package/templates/apps/api-rest/package.json +7 -7
  52. package/templates/apps/api-saas/package.json +11 -11
  53. package/templates/apps/api-search/package.json +8 -8
  54. package/templates/apps/api-versioning/package.json +8 -8
  55. package/templates/apps/api-webhooks/package.json +8 -8
  56. package/templates/apps/changelog/package.json +6 -6
  57. package/templates/apps/edge-functions/package.json +2 -2
  58. package/templates/apps/frontend-admin/package.json +8 -8
  59. package/templates/apps/frontend-app/package.json +8 -8
  60. package/templates/apps/frontend-blank/package.json +7 -7
  61. package/templates/apps/frontend-contact/package.json +7 -7
  62. package/templates/apps/frontend-dashboard/package.json +7 -7
  63. package/templates/apps/frontend-docs/package.json +7 -7
  64. package/templates/apps/frontend-i18n/package.json +6 -6
  65. package/templates/apps/frontend-landing/package.json +7 -7
  66. package/templates/apps/frontend-spa/package.json +7 -7
  67. package/templates/apps/frontend-ssr/package.json +7 -7
  68. package/templates/apps/frontend-ssr-api/package.json +8 -8
  69. package/templates/apps/frontend-static-blog/package.json +6 -6
  70. package/dist/apiBuild-cadmH8ca.js +0 -2
  71. package/dist/dev-DemiMSSl.js +0 -2
  72. package/dist/serveCommand-Dttqe5Ms.js +0 -1077
@@ -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.3.0",
16
- "@voltro/database": "0.3.0",
17
- "@voltro/env": "0.3.0",
18
- "@voltro/plugin-multitenancy": "0.3.0",
19
- "@voltro/plugin-ratelimit": "0.3.0",
20
- "@voltro/protocol": "0.3.0",
21
- "@voltro/runtime": "0.3.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/plugin-multitenancy": "0.5.0",
19
+ "@voltro/plugin-ratelimit": "0.5.0",
20
+ "@voltro/protocol": "0.5.0",
21
+ "@voltro/runtime": "0.5.0",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.3.0",
25
+ "@voltro/testing": "0.5.0",
26
26
  "typescript": "^5.7.0",
27
27
  "vitest": "^3.0.0"
28
28
  }
@@ -19,7 +19,7 @@ pnpm --filter @{{projectName}}/{{appName}} dev
19
19
  scopes and stamps them on the subject.
20
20
  - **Guard with `permission()`** — `notes.create` calls
21
21
  `permission(ctx, 'notes:write')`, the Effect-native guard. It fails typed
22
- `Forbidden` when the caller lacks the scope; `admin:full` is a blanket bypass.
22
+ `ScopeError` when the caller lacks the scope; `admin:full` is a blanket bypass.
23
23
  Companions: `anyPermission(ctx, [...])` (OR), `assertPermission` (sync throw),
24
24
  `can(ctx, scope)` (boolean).
25
25
  - **Where roles come from** — the shipped `resolveRoles` is a DEMO that maps
@@ -35,20 +35,25 @@ curl -s localhost:4000/_voltro/inspect/invoke -H 'content-type: application/json
35
35
  -d '{"tag":"notes.create","input":{"title":"hi","body":"x"}}'
36
36
  # → { ok:true, result:{ id, … } }
37
37
 
38
- # readers tenant → viewer → notes:write missing → typed Forbidden:
38
+ # readers tenant → viewer → notes:write missing → typed ScopeError:
39
39
  curl -s localhost:4000/_voltro/inspect/invoke -H 'content-type: application/json' -H 'x-tenant: readers' \
40
40
  -d '{"tag":"notes.create","input":{"title":"hi","body":"x"}}'
41
- # → { ok:false, error:{ _tag:"Forbidden", required:"notes:write" } }
41
+ # → { ok:false, error:{ _tag:"ScopeError", required:"notes:write" } }
42
42
  ```
43
43
 
44
44
  ## On the web side
45
45
 
46
46
  ```tsx
47
- import { useCan } from '@voltro/plugin-rbac/web'
47
+ import { PermissionProvider, useCan } from '@voltro/client'
48
+
49
+ <PermissionProvider scopes={session.scopes}>…</PermissionProvider>
48
50
  const canWrite = useCan('notes:write')
49
51
  {canWrite && <NewNoteButton />} // hide affordances the user can't use
50
52
  ```
51
53
 
54
+ The UI gate ships in `@voltro/client`, not in the plugin: scopes are a framework
55
+ concept, so gating a button must not require an rbac dependency.
56
+
52
57
  `useCan` is a UI affordance only — the server `permission()` guard is the real
53
58
  enforcement. Never trust the client.
54
59
 
@@ -5,7 +5,7 @@ import { Effect } from 'effect'
5
5
 
6
6
  const execute = (input: { title: string; body: string }, ctx: AppContext) =>
7
7
  Effect.gen(function* () {
8
- // RBAC guard — passes for editor/admin, fails typed Forbidden for viewer.
8
+ // RBAC guard — passes for editor/admin, fails typed ScopeError for viewer.
9
9
  yield* permission(ctx, 'notes:write')
10
10
 
11
11
  const store = yield* EffectStore
@@ -1,12 +1,12 @@
1
1
  // Creates a note — requires the `notes:write` scope. The executor guards with
2
2
  // `permission(ctx, 'notes:write')`, the Effect-native RBAC guard that fails
3
- // typed `Forbidden` when the caller's resolved scopes don't include it.
4
- // Declaring `error: Forbidden` surfaces that to the client typed.
3
+ // typed `ScopeError` when the caller's resolved scopes don't include it.
4
+ // Declaring `error: ScopeError` surfaces that to the client typed.
5
5
  //
6
- // `Forbidden` comes from the browser-safe `/errors` subpath.
6
+ // `ScopeError` is the ONE framework-wide denial tag, from the browser-safe
7
+ // `@voltro/protocol` (rbac guards and declarative `guards:` fail with it alike).
7
8
 
8
- import { defineMutation } from '@voltro/protocol'
9
- import { Forbidden } from '@voltro/plugin-rbac/errors'
9
+ import { defineMutation, ScopeError } from '@voltro/protocol'
10
10
  import { Schema } from 'effect'
11
11
 
12
12
  export const createNote = defineMutation({
@@ -22,5 +22,5 @@ export const createNote = defineMutation({
22
22
  body: Schema.String,
23
23
  tenantId: Schema.String,
24
24
  }),
25
- error: Forbidden,
25
+ error: ScopeError,
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.3.0",
16
- "@voltro/database": "0.3.0",
17
- "@voltro/env": "0.3.0",
18
- "@voltro/plugin-multitenancy": "0.3.0",
19
- "@voltro/plugin-rbac": "0.3.0",
20
- "@voltro/protocol": "0.3.0",
21
- "@voltro/runtime": "0.3.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/plugin-multitenancy": "0.5.0",
19
+ "@voltro/plugin-rbac": "0.5.0",
20
+ "@voltro/protocol": "0.5.0",
21
+ "@voltro/runtime": "0.5.0",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.3.0",
25
+ "@voltro/testing": "0.5.0",
26
26
  "typescript": "^5.7.0",
27
27
  "vitest": "^3.0.0"
28
28
  }
@@ -1,7 +1,7 @@
1
1
  // Unit test for `notes.create` — driven through `@voltro/testing`.
2
2
  //
3
3
  // This executor is Effect-native: it `yield*`s the RBAC guard
4
- // `permission(ctx, 'notes:write')` (fails typed `Forbidden` for a caller
4
+ // `permission(ctx, 'notes:write')` (fails typed `ScopeError` for a caller
5
5
  // lacking the scope) and then `yield* EffectStore` to insert. `makeTestContext`
6
6
  // exposes the mixin-wrapped store as `ctx.store`; we provide it to the Effect as
7
7
  // the `EffectStore` layer via `makeEffectStoreLayer` — the SAME wiring the CLI
@@ -20,7 +20,7 @@ import { makeEffectStoreLayer } from '@voltro/runtime'
20
20
  import { database } from '../database/schema' // registers actors / tenants / notes
21
21
  import { createNote } from '../mutations/notes.create.mutation'
22
22
  import createNoteHandler from '../mutations/notes.create.mutation.server'
23
- import { Forbidden } from '@voltro/plugin-rbac/errors'
23
+ import { ScopeError } from '@voltro/protocol'
24
24
 
25
25
  // Run the Effect-native executor with the test store provided as EffectStore.
26
26
  const runExec = (input: { title: string; body: string }, ctx: ReturnType<typeof makeTestContext>) =>
@@ -28,7 +28,7 @@ const runExec = (input: { title: string; body: string }, ctx: ReturnType<typeof
28
28
 
29
29
  // Same, but returns the raw Exit so a typed failure can be inspected WITHOUT
30
30
  // the `FiberFailure` wrapper `runPromise` throws (which would defeat a plain
31
- // `instanceof Forbidden` assertion). Unwrap the Cause to get the real error.
31
+ // `instanceof ScopeError` assertion). Unwrap the Cause to get the real error.
32
32
  const runExit = (input: { title: string; body: string }, ctx: ReturnType<typeof makeTestContext>) =>
33
33
  Effect.runPromiseExit(createNoteHandler(input, ctx).pipe(Effect.provide(makeEffectStoreLayer(ctx.store))))
34
34
 
@@ -50,7 +50,7 @@ describe('notes.create', () => {
50
50
  expect(rows).toHaveLength(1)
51
51
  })
52
52
 
53
- it('rejects a caller WITHOUT notes:write with typed Forbidden — nothing written', async () => {
53
+ it('rejects a caller WITHOUT notes:write with typed ScopeError — nothing written', async () => {
54
54
  const ctx = makeTestContext({
55
55
  subject: { type: 'user', id: 'viewer_1', tenantId: 'acme', scopes: [] },
56
56
  store: mockStore({ notes: [] }),
@@ -60,13 +60,13 @@ describe('notes.create', () => {
60
60
 
61
61
  expect(Exit.isFailure(exit)).toBe(true)
62
62
  const failure = Exit.isFailure(exit) ? Cause.failureOption(exit.cause) : Option.none()
63
- expect(Option.getOrThrow(failure)).toBeInstanceOf(Forbidden)
63
+ expect(Option.getOrThrow(failure)).toBeInstanceOf(ScopeError)
64
64
 
65
65
  const rows = await ctx.store.query(database.notes.descriptor)
66
66
  expect(rows).toHaveLength(0)
67
67
  })
68
68
 
69
- it('pins the descriptor: name, input decode + the declared Forbidden error', () => {
69
+ it('pins the descriptor: name, input decode + the declared ScopeError error', () => {
70
70
  expect(createNote.name).toBe('notes.create')
71
71
 
72
72
  const decoded = Schema.decodeUnknownSync(createNote.input)({ title: 'ok', body: 'b' })
@@ -74,7 +74,7 @@ describe('notes.create', () => {
74
74
  // Empty title is rejected at the input Schema (NonEmptyString).
75
75
  expect(() => Schema.decodeUnknownSync(createNote.input)({ title: '', body: '' })).toThrow()
76
76
 
77
- const forbidden = new Forbidden({ required: 'notes:write' })
78
- expect(Schema.is(Forbidden)(forbidden)).toBe(true)
77
+ const denied = new ScopeError({ required: 'notes:write', message: 'missing required permission' })
78
+ expect(Schema.is(ScopeError)(denied)).toBe(true)
79
79
  })
80
80
  })
@@ -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.3.0",
16
- "@voltro/database": "0.3.0",
17
- "@voltro/plugin-openapi": "0.3.0",
18
- "@voltro/protocol": "0.3.0",
19
- "@voltro/runtime": "0.3.0",
20
- "@voltro/sql-postgres": "0.3.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/plugin-openapi": "0.5.0",
18
+ "@voltro/protocol": "0.5.0",
19
+ "@voltro/runtime": "0.5.0",
20
+ "@voltro/sql-postgres": "0.5.0",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.3.0",
24
+ "@voltro/testing": "0.5.0",
25
25
  "typescript": "^5.7.0",
26
26
  "vitest": "^3.0.0"
27
27
  }
@@ -12,20 +12,20 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.3.0",
16
- "@voltro/database": "0.3.0",
17
- "@voltro/plugin-analytics-postgres": "0.3.0",
18
- "@voltro/plugin-billing": "0.3.0",
19
- "@voltro/plugin-multitenancy": "0.3.0",
20
- "@voltro/plugin-notifications": "0.3.0",
21
- "@voltro/plugin-presence": "0.3.0",
22
- "@voltro/protocol": "0.3.0",
23
- "@voltro/runtime": "0.3.0",
24
- "@voltro/sql-postgres": "0.3.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/plugin-analytics-postgres": "0.5.0",
18
+ "@voltro/plugin-billing": "0.5.0",
19
+ "@voltro/plugin-multitenancy": "0.5.0",
20
+ "@voltro/plugin-notifications": "0.5.0",
21
+ "@voltro/plugin-presence": "0.5.0",
22
+ "@voltro/protocol": "0.5.0",
23
+ "@voltro/runtime": "0.5.0",
24
+ "@voltro/sql-postgres": "0.5.0",
25
25
  "effect": "^3.21.2"
26
26
  },
27
27
  "devDependencies": {
28
- "@voltro/testing": "0.3.0",
28
+ "@voltro/testing": "0.5.0",
29
29
  "typescript": "^5.7.0",
30
30
  "vitest": "^3.0.0"
31
31
  }
@@ -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.3.0",
16
- "@voltro/database": "0.3.0",
17
- "@voltro/env": "0.3.0",
18
- "@voltro/plugin-multitenancy": "0.3.0",
19
- "@voltro/plugin-search": "0.3.0",
20
- "@voltro/protocol": "0.3.0",
21
- "@voltro/runtime": "0.3.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/plugin-multitenancy": "0.5.0",
19
+ "@voltro/plugin-search": "0.5.0",
20
+ "@voltro/protocol": "0.5.0",
21
+ "@voltro/runtime": "0.5.0",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.3.0",
25
+ "@voltro/testing": "0.5.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.3.0",
16
- "@voltro/database": "0.3.0",
17
- "@voltro/env": "0.3.0",
18
- "@voltro/plugin-multitenancy": "0.3.0",
19
- "@voltro/plugin-versioning": "0.3.0",
20
- "@voltro/protocol": "0.3.0",
21
- "@voltro/runtime": "0.3.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/plugin-multitenancy": "0.5.0",
19
+ "@voltro/plugin-versioning": "0.5.0",
20
+ "@voltro/protocol": "0.5.0",
21
+ "@voltro/runtime": "0.5.0",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.3.0",
25
+ "@voltro/testing": "0.5.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.3.0",
16
- "@voltro/database": "0.3.0",
17
- "@voltro/plugin-multitenancy": "0.3.0",
18
- "@voltro/plugin-webhooks": "0.3.0",
19
- "@voltro/protocol": "0.3.0",
20
- "@voltro/runtime": "0.3.0",
21
- "@voltro/sql-postgres": "0.3.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/plugin-multitenancy": "0.5.0",
18
+ "@voltro/plugin-webhooks": "0.5.0",
19
+ "@voltro/protocol": "0.5.0",
20
+ "@voltro/runtime": "0.5.0",
21
+ "@voltro/sql-postgres": "0.5.0",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.3.0",
25
+ "@voltro/testing": "0.5.0",
26
26
  "typescript": "^5.7.0",
27
27
  "vitest": "^3.0.0"
28
28
  }
@@ -11,12 +11,12 @@
11
11
  "test": "voltro test"
12
12
  },
13
13
  "dependencies": {
14
- "@voltro/changelog": "0.3.0",
15
- "@voltro/cli": "0.3.0",
16
- "@voltro/client": "0.3.0",
17
- "@voltro/env": "0.3.0",
18
- "@voltro/i18n": "0.3.0",
19
- "@voltro/web": "0.3.0",
14
+ "@voltro/changelog": "0.5.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/client": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/i18n": "0.5.0",
19
+ "@voltro/web": "0.5.0",
20
20
  "react": "^19.0.0",
21
21
  "react-dom": "^19.0.0"
22
22
  },
@@ -11,8 +11,8 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
- "@voltro/cli": "0.3.0",
15
- "@voltro/serverless": "0.3.0",
14
+ "@voltro/cli": "0.5.0",
15
+ "@voltro/serverless": "0.5.0",
16
16
  "effect": "^3.21.2"
17
17
  },
18
18
  "devDependencies": {
@@ -11,18 +11,18 @@
11
11
  "test": "voltro test"
12
12
  },
13
13
  "dependencies": {
14
- "@{{projectName}}/api": "0.3.0",
15
- "@voltro/cli": "0.3.0",
16
- "@voltro/client": "0.3.0",
17
- "@voltro/env": "0.3.0",
18
- "@voltro/i18n": "0.3.0",
19
- "@voltro/ui-shadcn": "0.3.0",
20
- "@voltro/web": "0.3.0",
14
+ "@{{projectName}}/api": "0.5.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/client": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/i18n": "0.5.0",
19
+ "@voltro/ui-shadcn": "0.5.0",
20
+ "@voltro/web": "0.5.0",
21
21
  "react": "^19.0.0",
22
22
  "react-dom": "^19.0.0"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/devtools": "0.3.0",
25
+ "@voltro/devtools": "0.5.0",
26
26
  "@types/react": "^19.0.0",
27
27
  "@types/react-dom": "^19.0.0",
28
28
  "typescript": "^5.7.0",
@@ -11,18 +11,18 @@
11
11
  "typecheck": "tsc --noEmit"
12
12
  },
13
13
  "dependencies": {
14
- "@{{projectName}}/api": "0.3.0",
15
- "@voltro/cli": "0.3.0",
16
- "@voltro/client": "0.3.0",
17
- "@voltro/env": "0.3.0",
18
- "@voltro/i18n": "0.3.0",
19
- "@voltro/ui-shadcn": "0.3.0",
20
- "@voltro/web": "0.3.0",
14
+ "@{{projectName}}/api": "0.5.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/client": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/i18n": "0.5.0",
19
+ "@voltro/ui-shadcn": "0.5.0",
20
+ "@voltro/web": "0.5.0",
21
21
  "react": "^19.0.0",
22
22
  "react-dom": "^19.0.0"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/devtools": "0.3.0",
25
+ "@voltro/devtools": "0.5.0",
26
26
  "@types/react": "^19.0.0",
27
27
  "@types/react-dom": "^19.0.0",
28
28
  "typescript": "^5.7.0",
@@ -11,17 +11,17 @@
11
11
  "typecheck": "tsc --noEmit"
12
12
  },
13
13
  "dependencies": {
14
- "@voltro/cli": "0.3.0",
15
- "@voltro/client": "0.3.0",
16
- "@voltro/env": "0.3.0",
17
- "@voltro/i18n": "0.3.0",
18
- "@voltro/ui-shadcn": "0.3.0",
19
- "@voltro/web": "0.3.0",
14
+ "@voltro/cli": "0.5.0",
15
+ "@voltro/client": "0.5.0",
16
+ "@voltro/env": "0.5.0",
17
+ "@voltro/i18n": "0.5.0",
18
+ "@voltro/ui-shadcn": "0.5.0",
19
+ "@voltro/web": "0.5.0",
20
20
  "react": "^19.0.0",
21
21
  "react-dom": "^19.0.0"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/devtools": "0.3.0",
24
+ "@voltro/devtools": "0.5.0",
25
25
  "@types/react": "^19.0.0",
26
26
  "@types/react-dom": "^19.0.0",
27
27
  "typescript": "^5.7.0",
@@ -14,18 +14,18 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@effect/platform": "^0.96.1",
17
- "@voltro/cli": "0.3.0",
18
- "@voltro/client": "0.3.0",
19
- "@voltro/env": "0.3.0",
20
- "@voltro/i18n": "0.3.0",
21
- "@voltro/serverless": "0.3.0",
22
- "@voltro/web": "0.3.0",
17
+ "@voltro/cli": "0.5.0",
18
+ "@voltro/client": "0.5.0",
19
+ "@voltro/env": "0.5.0",
20
+ "@voltro/i18n": "0.5.0",
21
+ "@voltro/serverless": "0.5.0",
22
+ "@voltro/web": "0.5.0",
23
23
  "effect": "^3.21.2",
24
24
  "react": "^19.0.0",
25
25
  "react-dom": "^19.0.0"
26
26
  },
27
27
  "devDependencies": {
28
- "@voltro/devtools": "0.3.0",
28
+ "@voltro/devtools": "0.5.0",
29
29
  "@types/react": "^19.0.0",
30
30
  "@types/react-dom": "^19.0.0",
31
31
  "typescript": "^5.7.0",
@@ -11,17 +11,17 @@
11
11
  "test": "voltro test"
12
12
  },
13
13
  "dependencies": {
14
- "@voltro/cli": "0.3.0",
15
- "@voltro/client": "0.3.0",
16
- "@voltro/env": "0.3.0",
17
- "@voltro/i18n": "0.3.0",
18
- "@voltro/ui-shadcn": "0.3.0",
19
- "@voltro/web": "0.3.0",
14
+ "@voltro/cli": "0.5.0",
15
+ "@voltro/client": "0.5.0",
16
+ "@voltro/env": "0.5.0",
17
+ "@voltro/i18n": "0.5.0",
18
+ "@voltro/ui-shadcn": "0.5.0",
19
+ "@voltro/web": "0.5.0",
20
20
  "react": "^19.0.0",
21
21
  "react-dom": "^19.0.0"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/devtools": "0.3.0",
24
+ "@voltro/devtools": "0.5.0",
25
25
  "@types/react": "^19.0.0",
26
26
  "@types/react-dom": "^19.0.0",
27
27
  "typescript": "^5.7.0",
@@ -11,17 +11,17 @@
11
11
  "test": "voltro test"
12
12
  },
13
13
  "dependencies": {
14
- "@voltro/cli": "0.3.0",
15
- "@voltro/client": "0.3.0",
16
- "@voltro/env": "0.3.0",
17
- "@voltro/i18n": "0.3.0",
18
- "@voltro/ui-shadcn": "0.3.0",
19
- "@voltro/web": "0.3.0",
14
+ "@voltro/cli": "0.5.0",
15
+ "@voltro/client": "0.5.0",
16
+ "@voltro/env": "0.5.0",
17
+ "@voltro/i18n": "0.5.0",
18
+ "@voltro/ui-shadcn": "0.5.0",
19
+ "@voltro/web": "0.5.0",
20
20
  "react": "^19.0.0",
21
21
  "react-dom": "^19.0.0"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/devtools": "0.3.0",
24
+ "@voltro/devtools": "0.5.0",
25
25
  "@types/react": "^19.0.0",
26
26
  "@types/react-dom": "^19.0.0",
27
27
  "typescript": "^5.7.0",
@@ -11,16 +11,16 @@
11
11
  "test": "voltro test"
12
12
  },
13
13
  "dependencies": {
14
- "@voltro/cli": "0.3.0",
15
- "@voltro/client": "0.3.0",
16
- "@voltro/env": "0.3.0",
17
- "@voltro/i18n": "0.3.0",
18
- "@voltro/web": "0.3.0",
14
+ "@voltro/cli": "0.5.0",
15
+ "@voltro/client": "0.5.0",
16
+ "@voltro/env": "0.5.0",
17
+ "@voltro/i18n": "0.5.0",
18
+ "@voltro/web": "0.5.0",
19
19
  "react": "^19.0.0",
20
20
  "react-dom": "^19.0.0"
21
21
  },
22
22
  "devDependencies": {
23
- "@voltro/devtools": "0.3.0",
23
+ "@voltro/devtools": "0.5.0",
24
24
  "@types/react": "^19.0.0",
25
25
  "@types/react-dom": "^19.0.0",
26
26
  "typescript": "^5.7.0",
@@ -11,17 +11,17 @@
11
11
  "typecheck": "tsc --noEmit"
12
12
  },
13
13
  "dependencies": {
14
- "@voltro/cli": "0.3.0",
15
- "@voltro/client": "0.3.0",
16
- "@voltro/env": "0.3.0",
17
- "@voltro/i18n": "0.3.0",
18
- "@voltro/ui-shadcn": "0.3.0",
19
- "@voltro/web": "0.3.0",
14
+ "@voltro/cli": "0.5.0",
15
+ "@voltro/client": "0.5.0",
16
+ "@voltro/env": "0.5.0",
17
+ "@voltro/i18n": "0.5.0",
18
+ "@voltro/ui-shadcn": "0.5.0",
19
+ "@voltro/web": "0.5.0",
20
20
  "react": "^19.0.0",
21
21
  "react-dom": "^19.0.0"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/devtools": "0.3.0",
24
+ "@voltro/devtools": "0.5.0",
25
25
  "@types/react": "^19.0.0",
26
26
  "@types/react-dom": "^19.0.0",
27
27
  "typescript": "^5.7.0",
@@ -11,17 +11,17 @@
11
11
  "typecheck": "tsc --noEmit"
12
12
  },
13
13
  "dependencies": {
14
- "@voltro/cli": "0.3.0",
15
- "@voltro/client": "0.3.0",
16
- "@voltro/env": "0.3.0",
17
- "@voltro/i18n": "0.3.0",
18
- "@voltro/ui-shadcn": "0.3.0",
19
- "@voltro/web": "0.3.0",
14
+ "@voltro/cli": "0.5.0",
15
+ "@voltro/client": "0.5.0",
16
+ "@voltro/env": "0.5.0",
17
+ "@voltro/i18n": "0.5.0",
18
+ "@voltro/ui-shadcn": "0.5.0",
19
+ "@voltro/web": "0.5.0",
20
20
  "react": "^19.0.0",
21
21
  "react-dom": "^19.0.0"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/devtools": "0.3.0",
24
+ "@voltro/devtools": "0.5.0",
25
25
  "@types/react": "^19.0.0",
26
26
  "@types/react-dom": "^19.0.0",
27
27
  "typescript": "^5.7.0",
@@ -11,17 +11,17 @@
11
11
  "test": "voltro test"
12
12
  },
13
13
  "dependencies": {
14
- "@voltro/cli": "0.3.0",
15
- "@voltro/client": "0.3.0",
16
- "@voltro/env": "0.3.0",
17
- "@voltro/i18n": "0.3.0",
18
- "@voltro/ui-shadcn": "0.3.0",
19
- "@voltro/web": "0.3.0",
14
+ "@voltro/cli": "0.5.0",
15
+ "@voltro/client": "0.5.0",
16
+ "@voltro/env": "0.5.0",
17
+ "@voltro/i18n": "0.5.0",
18
+ "@voltro/ui-shadcn": "0.5.0",
19
+ "@voltro/web": "0.5.0",
20
20
  "react": "^19.0.0",
21
21
  "react-dom": "^19.0.0"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/devtools": "0.3.0",
24
+ "@voltro/devtools": "0.5.0",
25
25
  "@types/react": "^19.0.0",
26
26
  "@types/react-dom": "^19.0.0",
27
27
  "typescript": "^5.7.0",