@voltro/cli 0.4.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 (61) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/{apiBuild-CvtQeBMs.js → apiBuild-CZugTK46.js} +1 -1
  3. package/dist/apiBuild-D-iBYKa3.js +2 -0
  4. package/dist/bin.js +2 -2
  5. package/dist/{commands-DhyBIs1O.js → commands-CJheDVOr.js} +1600 -1376
  6. package/dist/{dev-CQxbrpDz.js → dev-B71ICpXJ.js} +1756 -1626
  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 +84 -0
  13. package/templates/AGENTS.md +84 -0
  14. package/templates/agent-docs/_manifest.json +1 -1
  15. package/templates/agent-docs/ai.md +6 -2
  16. package/templates/agent-docs/authentication.md +69 -0
  17. package/templates/agent-docs/cli.md +76 -0
  18. package/templates/agent-docs/data.md +147 -3
  19. package/templates/agent-docs/database/advancedqueries.md +21 -0
  20. package/templates/agent-docs/database/querying.md +15 -5
  21. package/templates/agent-docs/database/schema.md +5 -2
  22. package/templates/agent-docs/reference.md +34 -0
  23. package/templates/agent-docs/workflows.md +11 -8
  24. package/templates/apps/api-ai/package.json +7 -7
  25. package/templates/apps/api-auth/package.json +8 -8
  26. package/templates/apps/api-backend/package.json +7 -7
  27. package/templates/apps/api-backend-deactivation/package.json +7 -7
  28. package/templates/apps/api-backend-mail/package.json +8 -8
  29. package/templates/apps/api-backend-mariadb/package.json +9 -9
  30. package/templates/apps/api-backend-storage/package.json +8 -8
  31. package/templates/apps/api-data-advanced/package.json +8 -8
  32. package/templates/apps/api-durable/package.json +8 -8
  33. package/templates/apps/api-feature-flags/package.json +9 -9
  34. package/templates/apps/api-governance/package.json +8 -8
  35. package/templates/apps/api-kv/package.json +8 -8
  36. package/templates/apps/api-moderation/package.json +8 -8
  37. package/templates/apps/api-observability/package.json +8 -8
  38. package/templates/apps/api-ratelimit/package.json +8 -8
  39. package/templates/apps/api-rbac/package.json +8 -8
  40. package/templates/apps/api-rest/package.json +7 -7
  41. package/templates/apps/api-saas/package.json +11 -11
  42. package/templates/apps/api-search/package.json +8 -8
  43. package/templates/apps/api-versioning/package.json +8 -8
  44. package/templates/apps/api-webhooks/package.json +8 -8
  45. package/templates/apps/changelog/package.json +6 -6
  46. package/templates/apps/edge-functions/package.json +2 -2
  47. package/templates/apps/frontend-admin/package.json +8 -8
  48. package/templates/apps/frontend-app/package.json +8 -8
  49. package/templates/apps/frontend-blank/package.json +7 -7
  50. package/templates/apps/frontend-contact/package.json +7 -7
  51. package/templates/apps/frontend-dashboard/package.json +7 -7
  52. package/templates/apps/frontend-docs/package.json +7 -7
  53. package/templates/apps/frontend-i18n/package.json +6 -6
  54. package/templates/apps/frontend-landing/package.json +7 -7
  55. package/templates/apps/frontend-spa/package.json +7 -7
  56. package/templates/apps/frontend-ssr/package.json +7 -7
  57. package/templates/apps/frontend-ssr-api/package.json +8 -8
  58. package/templates/apps/frontend-static-blog/package.json +6 -6
  59. package/dist/apiBuild-DQBNqNZ8.js +0 -2
  60. package/dist/dev-DYjGqPGD.js +0 -2
  61. package/dist/serveCommand-BZzUJIyo.js +0 -1077
@@ -130,19 +130,29 @@ Each call adds ONE column + direction; chain for multi-column ordering:
130
130
  .limit(20).offset(40)
131
131
  ```
132
132
 
133
- For cursor pagination that avoids OFFSET's O(n) scan, use the standalone `paginateById` helper over `ctx.store.query(...)`:
133
+ For cursor pagination that avoids OFFSET's O(n) scan, use `paginateBy` over `ctx.store.query(...)`:
134
134
 
135
135
  ```ts
136
- import { paginateById } from '@voltro/database'
136
+ import { paginateBy } from '@voltro/database'
137
137
 
138
138
  const rows = await ctx.store.query(
139
- paginateById(database.notes.orderBy('createdAt', 'desc').descriptor, req.cursor, 20),
139
+ paginateBy(database.notes.descriptor, 'createdAt', req.cursor, 20, 'desc'),
140
140
  )
141
- const nextCursor = rows.at(-1)?.id ?? null
141
+ const nextCursor = rows.at(-1)?.createdAt ?? null
142
142
  return { rows, nextCursor }
143
143
  ```
144
144
 
145
- `paginateById(descriptor, cursor, limit)` adds a `WHERE id > cursor ORDER BY id LIMIT n` clause and preserves any existing predicate. Works for any sortable id scheme (TypeID, ULID, Snowflake, Numeric).
145
+ `paginateBy(descriptor, column, cursor, limit, direction?)` adds the keyset predicate, sets the ORDER BY, and preserves any existing `where`.
146
+
147
+ The `direction` argument controls **both** the comparison and the sort — a `desc` feed pages with `<`, not `>`. That pairing is the classic keyset bug: an ascending comparison under a descending sort returns the same first page forever.
148
+
149
+ The cursor column must be unique, or monotonic enough that ties don't straddle a page boundary. For a timestamp with collisions, order by a tie-breaker and paginate on that:
150
+
151
+ ```ts
152
+ paginateBy(database.notes.orderBy('createdAt', 'desc').descriptor, 'id', req.cursor, 20)
153
+ ```
154
+
155
+ `paginateById(descriptor, cursor, limit)` is the `id`-column shorthand — literally `paginateBy(descriptor, 'id', cursor, limit)`. It works for any sortable id scheme (TypeID, ULID, Snowflake, Numeric). Note it sets the order to `id asc`, so passing a descriptor that already carries `.orderBy('createdAt', 'desc')` does **not** page by `createdAt` — use `paginateBy` when the sort column is the thing you want to page on.
146
156
 
147
157
  ## Aggregates
148
158
 
@@ -716,8 +716,11 @@ const row = await ctx.store.insert('todos', { title, done: false })
716
716
  // Test — deterministic id.
717
717
  await ctx.store.insert('todos', { id: 'todo_pinned_for_test', title, done: false })
718
718
 
719
- // Signup self-stamping — pass createdBy: userId in the same insert.
720
- await ctx.store.insert('users', { id: userId, createdBy: userId, email })
719
+ // Signup self-stamping — the actor IS the row. Generate the id up front
720
+ // so createdBy can point at the row being created, in the same insert.
721
+ import { typeid } from 'typeid-js'
722
+ const userId = typeid('user').toString()
723
+ await ctx.store.insert('users', { id: userId, email, createdBy: userId })
721
724
  ```
722
725
 
723
726
  ## Branded TypeScript types
@@ -811,8 +811,42 @@ await ctx.store.delete('notes', noteId)
811
811
  const rows = await ctx.store.query(database.notes.descriptor)
812
812
  ```
813
813
 
814
+ `ctx.store.query` returns the row type the builder already knew — `database.notes`
815
+ resolves to that table's row, so `rows[0].title` is a `string` with no cast. A
816
+ hand-built descriptor still resolves to the untyped `Row`.
817
+
814
818
  Mutations receive a transactional store view. Actions and streams receive a normal store view; writes from them are not automatically rolled back as one unit.
815
819
 
820
+ ## `ctx.load` / `ctx.loadMany` — request-scoped batching
821
+
822
+ `relations()` + `.with()` is the right answer whenever the shape of the related
823
+ data is known statically: it compiles to ONE query. Reach for it first.
824
+
825
+ This is for the case it cannot express — assembly whose shape depends on the
826
+ DATA. A breadth-first walk over a tree is the canonical example: each level's
827
+ ids come from the level above, so no declarative relation spec covers it, and
828
+ the natural code is one query per node.
829
+
830
+ ```ts
831
+ let level = [await ctx.load('nodes', rootId)]
832
+ while (level.length > 0) {
833
+ const childIds = level.flatMap((n) => n?.childIds ?? [])
834
+ if (childIds.length === 0) break
835
+ level = [...await ctx.loadMany('nodes', childIds)]
836
+ }
837
+ ```
838
+
839
+ Every `load` issued in the same tick for the same table is coalesced into one
840
+ `WHERE id IN (...)`, so that walk costs one query per LEVEL, not per node.
841
+ Repeated ids — a diamond where two parents share a child — are fetched once.
842
+ A missing row is `null` rather than a throw, because a dangling edge in a graph
843
+ walk is usually data; use `.one()` when absence is an error.
844
+
845
+ The cache lives exactly as long as the request. That is a correctness
846
+ requirement, not a tuning choice: a longer-lived cache would serve one
847
+ subject's rows to another (a data-isolation bug on a tenant-scoped store) and
848
+ would go stale across a mutation in the same request.
849
+
816
850
  ## `ctx.cache`
817
851
 
818
852
  Async cache facade for request handlers:
@@ -78,17 +78,18 @@ import { step } from '@voltro/workflow'
78
78
  import { Effect, Schema } from 'effect'
79
79
  import type { AppContext } from '@voltro/runtime'
80
80
 
81
+ const NoteRow = Schema.Struct({ id: Schema.String, body: Schema.String })
82
+
81
83
  const buildExecute = (ctx: AppContext) =>
82
84
  ({ noteId }: { noteId: string }) =>
83
85
  Effect.gen(function* () {
84
86
  const note = yield* step({
85
87
  name: 'load-note',
86
88
  input: { noteId },
87
- success: Schema.Struct({ id: Schema.String, body: Schema.String }),
88
- execute: Effect.tryPromise(() => ctx.store.query({
89
- table: 'notes',
90
- predicate: { field: 'id', op: 'eq', value: noteId },
91
- } as never).then((rows) => rows[0] as never)),
89
+ success: NoteRow,
90
+ execute: Effect.tryPromise(
91
+ () => ctx.store.select('notes').where('id', noteId).one(),
92
+ ).pipe(Effect.flatMap(Schema.decodeUnknown(NoteRow)), Effect.orDie),
92
93
  })
93
94
 
94
95
  const summary = yield* step({
@@ -102,9 +103,9 @@ const buildExecute = (ctx: AppContext) =>
102
103
  name: 'save-summary',
103
104
  input: { noteId },
104
105
  success: Schema.Void,
105
- execute: Effect.tryPromise(() =>
106
- ctx.store.update('notes', noteId, { summary } as never).then(() => undefined),
107
- ),
106
+ execute: Effect.tryPromise(
107
+ () => ctx.store.update('notes', noteId, { summary }),
108
+ ).pipe(Effect.asVoid, Effect.orDie),
108
109
  })
109
110
 
110
111
  return { summary }
@@ -115,6 +116,8 @@ export default buildExecute
115
116
 
116
117
  `step({...})` is the checkpoint boundary. A plain `yield* someEffect` composes Effect logic, but it is not automatically recorded as a workflow step. Put external I/O, database writes, and expensive work inside `step`.
117
118
 
119
+ Note what the store calls do NOT do: no `as never`. Reach for the fluent builder (`ctx.store.select(...)`) rather than hand-building a query descriptor, and decode the untyped `Row` into the step's `success` schema with `Schema.decodeUnknown` instead of asserting it. `.one()` fails with the typed `NoRowFound` when the note is missing (or when more than one matches), so there is no `rows[0]` to null-check.
120
+
118
121
  ## Starting a workflow
119
122
 
120
123
  Every discovered `*.workflow.tsx` is emitted into `rpcGroup.generated.ts` as a unary RPC. The payload and error schemas come from the workflow, but the RPC success type is always a `WorkflowRunHandle`. Calling it starts durable work and returns that handle immediately:
@@ -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.4.0",
15
- "@voltro/cli": "0.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/env": "0.4.0",
18
- "@voltro/protocol": "0.4.0",
19
- "@voltro/runtime": "0.4.0",
14
+ "@voltro/ai": "0.5.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/protocol": "0.5.0",
19
+ "@voltro/runtime": "0.5.0",
20
20
  "effect": "^3.21.2"
21
21
  },
22
22
  "devDependencies": {
23
- "@voltro/testing": "0.4.0",
23
+ "@voltro/testing": "0.5.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.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/env": "0.4.0",
18
- "@voltro/plugin-auth": "0.4.0",
19
- "@voltro/protocol": "0.4.0",
20
- "@voltro/runtime": "0.4.0",
21
- "@voltro/sql-postgres": "0.4.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/plugin-auth": "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.4.0",
25
+ "@voltro/testing": "0.5.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.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/env": "0.4.0",
18
- "@voltro/plugin-multitenancy": "0.4.0",
19
- "@voltro/protocol": "0.4.0",
20
- "@voltro/runtime": "0.4.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/protocol": "0.5.0",
20
+ "@voltro/runtime": "0.5.0",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.4.0",
24
+ "@voltro/testing": "0.5.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.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/env": "0.4.0",
18
- "@voltro/plugin-deactivation": "0.4.0",
19
- "@voltro/protocol": "0.4.0",
20
- "@voltro/runtime": "0.4.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/plugin-deactivation": "0.5.0",
19
+ "@voltro/protocol": "0.5.0",
20
+ "@voltro/runtime": "0.5.0",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.4.0",
24
+ "@voltro/testing": "0.5.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.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/env": "0.4.0",
18
- "@voltro/plugin-mail": "0.4.0",
19
- "@voltro/plugin-multitenancy": "0.4.0",
20
- "@voltro/protocol": "0.4.0",
21
- "@voltro/runtime": "0.4.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/plugin-mail": "0.5.0",
19
+ "@voltro/plugin-multitenancy": "0.5.0",
20
+ "@voltro/protocol": "0.5.0",
21
+ "@voltro/runtime": "0.5.0",
22
22
  "effect": "^3.21.2",
23
23
  "react": "^19.0.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.4.0",
26
+ "@voltro/testing": "0.5.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.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/env": "0.4.0",
18
- "@voltro/plugin-multitenancy": "0.4.0",
19
- "@voltro/plugin-storage": "0.4.0",
20
- "@voltro/protocol": "0.4.0",
21
- "@voltro/runtime": "0.4.0",
22
- "@voltro/sql-mysql": "0.4.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-storage": "0.5.0",
20
+ "@voltro/protocol": "0.5.0",
21
+ "@voltro/runtime": "0.5.0",
22
+ "@voltro/sql-mysql": "0.5.0",
23
23
  "effect": "^3.21.2"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.4.0",
26
+ "@voltro/testing": "0.5.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.4.0",
14
- "@voltro/database": "0.4.0",
15
- "@voltro/env": "0.4.0",
16
- "@voltro/plugin-multitenancy": "0.4.0",
17
- "@voltro/plugin-storage": "0.4.0",
18
- "@voltro/protocol": "0.4.0",
19
- "@voltro/runtime": "0.4.0",
13
+ "@voltro/cli": "0.5.0",
14
+ "@voltro/database": "0.5.0",
15
+ "@voltro/env": "0.5.0",
16
+ "@voltro/plugin-multitenancy": "0.5.0",
17
+ "@voltro/plugin-storage": "0.5.0",
18
+ "@voltro/protocol": "0.5.0",
19
+ "@voltro/runtime": "0.5.0",
20
20
  "effect": "^3.21.2"
21
21
  },
22
22
  "devDependencies": {
23
- "@voltro/testing": "0.4.0",
23
+ "@voltro/testing": "0.5.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.4.0",
15
- "@voltro/database": "0.4.0",
16
- "@voltro/env": "0.4.0",
17
- "@voltro/plugin-governance": "0.4.0",
18
- "@voltro/plugin-multitenancy": "0.4.0",
19
- "@voltro/protocol": "0.4.0",
20
- "@voltro/runtime": "0.4.0",
14
+ "@voltro/cli": "0.5.0",
15
+ "@voltro/database": "0.5.0",
16
+ "@voltro/env": "0.5.0",
17
+ "@voltro/plugin-governance": "0.5.0",
18
+ "@voltro/plugin-multitenancy": "0.5.0",
19
+ "@voltro/protocol": "0.5.0",
20
+ "@voltro/runtime": "0.5.0",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.4.0",
24
+ "@voltro/testing": "0.5.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.4.0",
15
- "@voltro/database": "0.4.0",
16
- "@voltro/env": "0.4.0",
17
- "@voltro/plugin-multitenancy": "0.4.0",
18
- "@voltro/protocol": "0.4.0",
19
- "@voltro/runtime": "0.4.0",
20
- "@voltro/workflow": "0.4.0",
14
+ "@voltro/cli": "0.5.0",
15
+ "@voltro/database": "0.5.0",
16
+ "@voltro/env": "0.5.0",
17
+ "@voltro/plugin-multitenancy": "0.5.0",
18
+ "@voltro/protocol": "0.5.0",
19
+ "@voltro/runtime": "0.5.0",
20
+ "@voltro/workflow": "0.5.0",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.4.0",
24
+ "@voltro/testing": "0.5.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.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/env": "0.4.0",
18
- "@voltro/plugin-flags": "0.4.0",
19
- "@voltro/plugin-multitenancy": "0.4.0",
20
- "@voltro/protocol": "0.4.0",
21
- "@voltro/runtime": "0.4.0",
22
- "@voltro/sql-postgres": "0.4.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/plugin-flags": "0.5.0",
19
+ "@voltro/plugin-multitenancy": "0.5.0",
20
+ "@voltro/protocol": "0.5.0",
21
+ "@voltro/runtime": "0.5.0",
22
+ "@voltro/sql-postgres": "0.5.0",
23
23
  "effect": "^3.21.2"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.4.0",
26
+ "@voltro/testing": "0.5.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.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/env": "0.4.0",
18
- "@voltro/plugin-audit": "0.4.0",
19
- "@voltro/plugin-governance": "0.4.0",
20
- "@voltro/protocol": "0.4.0",
21
- "@voltro/runtime": "0.4.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/plugin-audit": "0.5.0",
19
+ "@voltro/plugin-governance": "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.4.0",
25
+ "@voltro/testing": "0.5.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.4.0",
15
- "@voltro/database": "0.4.0",
16
- "@voltro/env": "0.4.0",
17
- "@voltro/kv": "0.4.0",
18
- "@voltro/plugin-multitenancy": "0.4.0",
19
- "@voltro/protocol": "0.4.0",
20
- "@voltro/runtime": "0.4.0",
14
+ "@voltro/cli": "0.5.0",
15
+ "@voltro/database": "0.5.0",
16
+ "@voltro/env": "0.5.0",
17
+ "@voltro/kv": "0.5.0",
18
+ "@voltro/plugin-multitenancy": "0.5.0",
19
+ "@voltro/protocol": "0.5.0",
20
+ "@voltro/runtime": "0.5.0",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.4.0",
24
+ "@voltro/testing": "0.5.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.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/env": "0.4.0",
18
- "@voltro/plugin-moderation": "0.4.0",
19
- "@voltro/plugin-multitenancy": "0.4.0",
20
- "@voltro/protocol": "0.4.0",
21
- "@voltro/runtime": "0.4.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/env": "0.5.0",
18
+ "@voltro/plugin-moderation": "0.5.0",
19
+ "@voltro/plugin-multitenancy": "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.4.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.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/plugin-multitenancy": "0.4.0",
18
- "@voltro/plugin-prometheus": "0.4.0",
19
- "@voltro/plugin-sentry": "0.4.0",
20
- "@voltro/protocol": "0.4.0",
21
- "@voltro/runtime": "0.4.0",
15
+ "@voltro/cli": "0.5.0",
16
+ "@voltro/database": "0.5.0",
17
+ "@voltro/plugin-multitenancy": "0.5.0",
18
+ "@voltro/plugin-prometheus": "0.5.0",
19
+ "@voltro/plugin-sentry": "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.4.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.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/env": "0.4.0",
18
- "@voltro/plugin-multitenancy": "0.4.0",
19
- "@voltro/plugin-ratelimit": "0.4.0",
20
- "@voltro/protocol": "0.4.0",
21
- "@voltro/runtime": "0.4.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.4.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.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/env": "0.4.0",
18
- "@voltro/plugin-multitenancy": "0.4.0",
19
- "@voltro/plugin-rbac": "0.4.0",
20
- "@voltro/protocol": "0.4.0",
21
- "@voltro/runtime": "0.4.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.4.0",
25
+ "@voltro/testing": "0.5.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.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/plugin-openapi": "0.4.0",
18
- "@voltro/protocol": "0.4.0",
19
- "@voltro/runtime": "0.4.0",
20
- "@voltro/sql-postgres": "0.4.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.4.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.4.0",
16
- "@voltro/database": "0.4.0",
17
- "@voltro/plugin-analytics-postgres": "0.4.0",
18
- "@voltro/plugin-billing": "0.4.0",
19
- "@voltro/plugin-multitenancy": "0.4.0",
20
- "@voltro/plugin-notifications": "0.4.0",
21
- "@voltro/plugin-presence": "0.4.0",
22
- "@voltro/protocol": "0.4.0",
23
- "@voltro/runtime": "0.4.0",
24
- "@voltro/sql-postgres": "0.4.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.4.0",
28
+ "@voltro/testing": "0.5.0",
29
29
  "typescript": "^5.7.0",
30
30
  "vitest": "^3.0.0"
31
31
  }