@voltro/cli 0.11.1 → 0.11.3

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 (60) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/dist/apiBuild-BmPdmhgi.js +2 -0
  3. package/dist/{apiBuild-D_kEJTxc.js → apiBuild-zFDv0u8y.js} +7 -3
  4. package/dist/bin.js +2 -2
  5. package/dist/{commands-BiQsbV50.js → commands-BDGYrBhK.js} +30 -7
  6. package/dist/{dev-zJGsTTNb.js → dev-CGt0PP1f.js} +1 -1
  7. package/dist/dev-D_PGP9Kx.js +2 -0
  8. package/dist/index.js +1 -1
  9. package/dist/{inspectMetrics-BuBwg1yW.js → inspectMetrics-SRtv8KDy.js} +8 -4
  10. package/dist/{serveCommand-BU454-ay.js → serveCommand-p6e5Ahgx.js} +3 -3
  11. package/dist/serveEntry.js +3 -3
  12. package/dist/{start-ChN6PO-c.js → start-Crl39M38.js} +1 -1
  13. package/dist/startEntry.js +2 -2
  14. package/package.json +17 -17
  15. package/templates/agent-docs/_manifest.json +1 -1
  16. package/templates/agent-docs/authentication.md +22 -0
  17. package/templates/agent-docs/data.md +68 -0
  18. package/templates/agent-docs/database/columntypes.md +7 -0
  19. package/templates/agent-docs/database/querying.md +16 -0
  20. package/templates/agent-docs/deployment.md +4 -2
  21. package/templates/agent-docs/internationalization.md +49 -2
  22. package/templates/agent-docs/routing.md +17 -0
  23. package/templates/agent-docs/testing.md +26 -0
  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-BGd-BnHq.js +0 -2
  60. package/dist/dev-DH13Ysgs.js +0 -2
@@ -176,9 +176,56 @@ useT('header.search') // ✓ no placeholders → no values arg
176
176
  useT('does.not.exist') // ✗ compile error — not a catalog key
177
177
  ```
178
178
 
179
- It's pure type refinement — the runtime is the same `useT` / `useTFn` / `<T>`, only the signatures narrow to your catalog. Requires the base catalog to be `as const` (so its message strings survive as literal types).
179
+ It's almost pure type refinement — the runtime is the same `useT` / `useTFn` / `<T>` (plus a `.dynamic` escape, below), only the signatures narrow to your catalog. Requires the base catalog to be `as const` (so its message strings survive as literal types).
180
180
 
181
- **Scope.** Simple `{name}` and single-argument `{count, number}` placeholders are extracted and required. Messages with *nested* inline ICU (`{n, plural, one {…} other {…}}` / `select`) accept a loose values bag instead of a wrong strict one pluralise in JS over simple `{count}` messages (`items.map((i) => t('cart.one', { count: i.n }))`) to stay fully typed. `<T>` gets a typed key with loose values, because its rich-text `<tag>` renderers can't be modelled by placeholder extraction.
181
+ **Scope.** Simple `{name}` and single-argument `{count, number}` placeholders are extracted and required. For a *nested* inline ICU message (`{count, plural, one {…} other {…}}` / `select`), the **top-level arg** (`count`) is required and a branch's inner text is NOT mistaken for a var so `t('duration', { count })` typechecks and renders. A REAL var nested inside a branch (`other {# blockers in {discipline}}`) is not collected, so it reads as *not required* rather than wrongly required; pass it via the loose values bag.
182
+
183
+ To get that nested var **compiler-required**, split the plural into simple sibling keys and pick with a JS branch — each key is then a plain message where every var is top-level:
184
+
185
+ ```tsx
186
+ // catalog: 'blocker.one': '{count} blocker in {discipline}', 'blocker.other': '{count} blockers in {discipline}'
187
+ count === 1
188
+ ? t('blocker.one', { count, discipline }) // ✓ both vars required
189
+ : t('blocker.other', { count, discipline })
190
+ ```
191
+
192
+ (The [`plural()` helper](/docs/i18n/formatting) only substitutes `{count}`, so it doesn't type or fill a second var — use it for count-only messages.) `<T>` gets a typed key with loose values, because its rich-text `<tag>` renderers can't be modelled by placeholder extraction.
193
+
194
+ ### Runtime-computed keys — `t.dynamic`
195
+
196
+ For a key you build at runtime, do NOT cast it to the catalog key union — that union spans placeholder-bearing keys, so the call then demands a spurious 2nd ICU arg. Use `t.dynamic`, a plain-string escape with no forced args, on both `useT` and the `useTFn()` result:
197
+
198
+ ```tsx
199
+ import { useTFn } from '@app/messages' // your createTypedMessages() barrel — `.dynamic` lives on these
200
+ const t = useTFn()
201
+ t.dynamic(`status.${row.state}`) // ✓ plain string, no forced arg
202
+ t.dynamic(`greeting.${kind}`, { name }) // values still allowed, but loose
203
+ ```
204
+
205
+ ### Passing `t` across a package boundary — `LooseTFunction`
206
+
207
+ Type a `t` pass-through param as `TypedTFunction<C>` to keep it strict — the strict type propagates down through helper signatures. At a boundary that *can't* import your catalog (a shared UI package), type the param `LooseTFunction` (`(id: string, values?) => string`) instead of `(...args: any[]) => string`, and pass `t.dynamic` — which IS a `LooseTFunction`. A strict `TypedTFunction` is deliberately NOT assignable to the loose one (a narrowed key param can't satisfy a wider one, and silently allowing it would erase the checking).
208
+
209
+ ```tsx
210
+ // a shared package that can't see the app catalog
211
+ import type { LooseTFunction } from '@voltro/i18n'
212
+ export const formatError = (t: LooseTFunction, e: AppError): string => t(e.messageKey)
213
+
214
+ // in the app, at the boundary:
215
+ formatError(t.dynamic, err)
216
+ ```
217
+
218
+ A convenient app-wide barrel captures the bound types once:
219
+
220
+ ```tsx
221
+ // src/i18n.ts
222
+ import { createTypedMessages, type TypedTFunction } from '@voltro/i18n'
223
+ import type en from './locales/en'
224
+
225
+ export const { useT, useTFn, T } = createTypedMessages<typeof en>()
226
+ export type AppTFunction = TypedTFunction<typeof en> // for helper / prop params
227
+ export type AppMessageKey = Parameters<AppTFunction>[0] // the catalog's key union
228
+ ```
182
229
 
183
230
  ## Reading a message outside React — `meta({ locale })`
184
231
 
@@ -793,6 +793,23 @@ Two consequences worth designing around:
793
793
  a side effect), put it in an effect or use `useSubscription` — do not rely on
794
794
  the loader firing a second time.
795
795
 
796
+ #### SSR first paint, then live — `initialSnapshot`
797
+
798
+ When a page wants the SSR-rendered data AND a live subscription, hand the loader's value to `useSubscription` as its `initialSnapshot`. The loader fetches the data on the server with `ctx.query`; the subscription shows that value at the first paint with `loading: false` — it is real server data, not a placeholder — then swaps to the live stream the instant its first snapshot arrives:
799
+
800
+ ```tsx
801
+ export const loader = async ({ query }) => query('employees.me', {})
802
+
803
+ export default function Profile() {
804
+ const seed = useLoaderData<Employee>()
805
+ // First paint shows the SSR value; the WS stream takes over seamlessly.
806
+ const { data } = useSubscription<Employee>('app', 'employees.me', {}, { initialSnapshot: seed })
807
+ return <ProfileCard employee={data} />
808
+ }
809
+ ```
810
+
811
+ Because the SSR markup and the hydration render read the same loader value, they match — no hydration flicker — and you don't hand-build a seed store to bridge the two. This is distinct from `fallback`, whose value never came from the server and so keeps `loading: true`; use exactly one of the two.
812
+
796
813
  Client-side navigation is unchanged: moving to another route runs that route's
797
814
  loaders in the browser as usual. A `spa` page has no server render, so its
798
815
  loader runs on the client on first mount.
@@ -320,6 +320,32 @@ Retries are always on and carry no backoff here. Production's jitter exists to d
320
320
  - **Transport concerns** — connection info, rate limiting, the tenant header. Those are properties of the HTTP hop, not of the procedure; faking them here would only assert against the fake.
321
321
  - **Undo capture and the metrics sample** — optional injections the serve entrypoint makes. Their absence changes nothing a handler can observe.
322
322
 
323
+ ## Completing a fixture row — `fixtureRow`
324
+
325
+ `ctx.store` is the real mixin-wrapped store, so `store.insert` runs the same required-column validation production does: a payload that omits a NOT-NULL, no-default, non-auto-stamped column throws `TableValidationFailed` naming the column. That is deliberate — the test store is not laxer than Postgres, so a fixture can't pass on a row the database would reject. But it means a lean fixture (`insert('journal_entries', { id })`, an omitted required FK) now fails.
326
+
327
+ `fixtureRow(table, overrides)` completes the row for you. It fills every column the validator would flag with a schema-typed placeholder, then merges your overrides on top — so you write only the columns the test cares about and the rest are made valid:
328
+
329
+ ```ts
330
+ import { fixtureRow, makeTestContext } from '@voltro/testing'
331
+ import { journalEntries } from '../schema/journal'
332
+
333
+ const ctx = makeTestContext({ subject, store: mockStore({ journal_entries: [] }) })
334
+
335
+ await ctx.store.insert('journal_entries', fixtureRow(journalEntries, {
336
+ amount: '100.00', // the columns THIS test asserts on
337
+ })) // entryNumber (unique), postedAt, … auto-filled
338
+ ```
339
+
340
+ What it fills and what it leaves alone:
341
+
342
+ - **Fills** each required column with a value of the right shape — a `oneOf` column takes its first allowed value, a `unique` column gets a distinct value per call (so two fixtures don't collide on the key), `timestamp` / `date` get a fixed epoch, `decimal` / `bigint` a numeric string.
343
+ - **Leaves out** exactly what a caller may legitimately omit: nullable columns, defaulted columns, and the framework auto-stamped set (`id`, `tenantId`, `createdAt`, `updatedAt`, `createdBy`, `updatedBy`, `deletedAt`, `deletedBy`) — the store stamps those from the subject and the table scheme.
344
+ - **Refuses to guess** a structured type (`json`, `bytes`, `vector`, `array`, `interval`, `raw`): it throws naming the column and telling you to pass it explicitly, rather than inventing a value that fails the codec obscurely.
345
+ - **Your override always wins** — including an explicit `null`. Don't assert on a synthesized placeholder; override anything the test inspects.
346
+
347
+ There is no flag to turn the validation off — a test store that accepts rows production rejects is a fake testing itself. `fixtureRow` is a runtime filler for the loose `store.insert(name, row)` path. For **compile-time** payload typing (a missing required column caught as a type error at the call), use [`insertRow` / `upsertRow`](/docs/data/mutations) from `@voltro/database`, which check against `InferInsertRow<T>`.
348
+
323
349
  ## Subject + tenant re-scoping
324
350
 
325
351
  `withSubject` and `withTenant` re-scope to a different principal for one block, sharing the **same** underlying data — so cross-subject reads exercise real tenant scoping, not a closure stub. This is how you prove isolation: write as one tenant, then assert another tenant can't see the row.
@@ -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.11.1",
15
- "@voltro/cli": "0.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/env": "0.11.1",
18
- "@voltro/protocol": "0.11.1",
19
- "@voltro/runtime": "0.11.1",
14
+ "@voltro/ai": "0.11.3",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/env": "0.11.3",
18
+ "@voltro/protocol": "0.11.3",
19
+ "@voltro/runtime": "0.11.3",
20
20
  "effect": "^3.21.2"
21
21
  },
22
22
  "devDependencies": {
23
- "@voltro/testing": "0.11.1",
23
+ "@voltro/testing": "0.11.3",
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.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/env": "0.11.1",
18
- "@voltro/plugin-auth": "0.11.1",
19
- "@voltro/protocol": "0.11.1",
20
- "@voltro/runtime": "0.11.1",
21
- "@voltro/sql-postgres": "0.11.1",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/env": "0.11.3",
18
+ "@voltro/plugin-auth": "0.11.3",
19
+ "@voltro/protocol": "0.11.3",
20
+ "@voltro/runtime": "0.11.3",
21
+ "@voltro/sql-postgres": "0.11.3",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.11.1",
25
+ "@voltro/testing": "0.11.3",
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.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/env": "0.11.1",
18
- "@voltro/plugin-multitenancy": "0.11.1",
19
- "@voltro/protocol": "0.11.1",
20
- "@voltro/runtime": "0.11.1",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/env": "0.11.3",
18
+ "@voltro/plugin-multitenancy": "0.11.3",
19
+ "@voltro/protocol": "0.11.3",
20
+ "@voltro/runtime": "0.11.3",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.11.1",
24
+ "@voltro/testing": "0.11.3",
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.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/env": "0.11.1",
18
- "@voltro/plugin-deactivation": "0.11.1",
19
- "@voltro/protocol": "0.11.1",
20
- "@voltro/runtime": "0.11.1",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/env": "0.11.3",
18
+ "@voltro/plugin-deactivation": "0.11.3",
19
+ "@voltro/protocol": "0.11.3",
20
+ "@voltro/runtime": "0.11.3",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.11.1",
24
+ "@voltro/testing": "0.11.3",
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.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/env": "0.11.1",
18
- "@voltro/plugin-mail": "0.11.1",
19
- "@voltro/plugin-multitenancy": "0.11.1",
20
- "@voltro/protocol": "0.11.1",
21
- "@voltro/runtime": "0.11.1",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/env": "0.11.3",
18
+ "@voltro/plugin-mail": "0.11.3",
19
+ "@voltro/plugin-multitenancy": "0.11.3",
20
+ "@voltro/protocol": "0.11.3",
21
+ "@voltro/runtime": "0.11.3",
22
22
  "effect": "^3.21.2",
23
23
  "react": "^19.0.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.11.1",
26
+ "@voltro/testing": "0.11.3",
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.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/env": "0.11.1",
18
- "@voltro/plugin-multitenancy": "0.11.1",
19
- "@voltro/plugin-storage": "0.11.1",
20
- "@voltro/protocol": "0.11.1",
21
- "@voltro/runtime": "0.11.1",
22
- "@voltro/sql-mysql": "0.11.1",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/env": "0.11.3",
18
+ "@voltro/plugin-multitenancy": "0.11.3",
19
+ "@voltro/plugin-storage": "0.11.3",
20
+ "@voltro/protocol": "0.11.3",
21
+ "@voltro/runtime": "0.11.3",
22
+ "@voltro/sql-mysql": "0.11.3",
23
23
  "effect": "^3.21.2"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.11.1",
26
+ "@voltro/testing": "0.11.3",
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.11.1",
14
- "@voltro/database": "0.11.1",
15
- "@voltro/env": "0.11.1",
16
- "@voltro/plugin-multitenancy": "0.11.1",
17
- "@voltro/plugin-storage": "0.11.1",
18
- "@voltro/protocol": "0.11.1",
19
- "@voltro/runtime": "0.11.1",
13
+ "@voltro/cli": "0.11.3",
14
+ "@voltro/database": "0.11.3",
15
+ "@voltro/env": "0.11.3",
16
+ "@voltro/plugin-multitenancy": "0.11.3",
17
+ "@voltro/plugin-storage": "0.11.3",
18
+ "@voltro/protocol": "0.11.3",
19
+ "@voltro/runtime": "0.11.3",
20
20
  "effect": "^3.21.2"
21
21
  },
22
22
  "devDependencies": {
23
- "@voltro/testing": "0.11.1",
23
+ "@voltro/testing": "0.11.3",
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.11.1",
15
- "@voltro/database": "0.11.1",
16
- "@voltro/env": "0.11.1",
17
- "@voltro/plugin-governance": "0.11.1",
18
- "@voltro/plugin-multitenancy": "0.11.1",
19
- "@voltro/protocol": "0.11.1",
20
- "@voltro/runtime": "0.11.1",
14
+ "@voltro/cli": "0.11.3",
15
+ "@voltro/database": "0.11.3",
16
+ "@voltro/env": "0.11.3",
17
+ "@voltro/plugin-governance": "0.11.3",
18
+ "@voltro/plugin-multitenancy": "0.11.3",
19
+ "@voltro/protocol": "0.11.3",
20
+ "@voltro/runtime": "0.11.3",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.11.1",
24
+ "@voltro/testing": "0.11.3",
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.11.1",
15
- "@voltro/database": "0.11.1",
16
- "@voltro/env": "0.11.1",
17
- "@voltro/plugin-multitenancy": "0.11.1",
18
- "@voltro/protocol": "0.11.1",
19
- "@voltro/runtime": "0.11.1",
20
- "@voltro/workflow": "0.11.1",
14
+ "@voltro/cli": "0.11.3",
15
+ "@voltro/database": "0.11.3",
16
+ "@voltro/env": "0.11.3",
17
+ "@voltro/plugin-multitenancy": "0.11.3",
18
+ "@voltro/protocol": "0.11.3",
19
+ "@voltro/runtime": "0.11.3",
20
+ "@voltro/workflow": "0.11.3",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.11.1",
24
+ "@voltro/testing": "0.11.3",
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.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/env": "0.11.1",
18
- "@voltro/plugin-flags": "0.11.1",
19
- "@voltro/plugin-multitenancy": "0.11.1",
20
- "@voltro/protocol": "0.11.1",
21
- "@voltro/runtime": "0.11.1",
22
- "@voltro/sql-postgres": "0.11.1",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/env": "0.11.3",
18
+ "@voltro/plugin-flags": "0.11.3",
19
+ "@voltro/plugin-multitenancy": "0.11.3",
20
+ "@voltro/protocol": "0.11.3",
21
+ "@voltro/runtime": "0.11.3",
22
+ "@voltro/sql-postgres": "0.11.3",
23
23
  "effect": "^3.21.2"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.11.1",
26
+ "@voltro/testing": "0.11.3",
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.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/env": "0.11.1",
18
- "@voltro/plugin-audit": "0.11.1",
19
- "@voltro/plugin-governance": "0.11.1",
20
- "@voltro/protocol": "0.11.1",
21
- "@voltro/runtime": "0.11.1",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/env": "0.11.3",
18
+ "@voltro/plugin-audit": "0.11.3",
19
+ "@voltro/plugin-governance": "0.11.3",
20
+ "@voltro/protocol": "0.11.3",
21
+ "@voltro/runtime": "0.11.3",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.11.1",
25
+ "@voltro/testing": "0.11.3",
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.11.1",
15
- "@voltro/database": "0.11.1",
16
- "@voltro/env": "0.11.1",
17
- "@voltro/kv": "0.11.1",
18
- "@voltro/plugin-multitenancy": "0.11.1",
19
- "@voltro/protocol": "0.11.1",
20
- "@voltro/runtime": "0.11.1",
14
+ "@voltro/cli": "0.11.3",
15
+ "@voltro/database": "0.11.3",
16
+ "@voltro/env": "0.11.3",
17
+ "@voltro/kv": "0.11.3",
18
+ "@voltro/plugin-multitenancy": "0.11.3",
19
+ "@voltro/protocol": "0.11.3",
20
+ "@voltro/runtime": "0.11.3",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.11.1",
24
+ "@voltro/testing": "0.11.3",
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.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/env": "0.11.1",
18
- "@voltro/plugin-moderation": "0.11.1",
19
- "@voltro/plugin-multitenancy": "0.11.1",
20
- "@voltro/protocol": "0.11.1",
21
- "@voltro/runtime": "0.11.1",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/env": "0.11.3",
18
+ "@voltro/plugin-moderation": "0.11.3",
19
+ "@voltro/plugin-multitenancy": "0.11.3",
20
+ "@voltro/protocol": "0.11.3",
21
+ "@voltro/runtime": "0.11.3",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.11.1",
25
+ "@voltro/testing": "0.11.3",
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.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/plugin-multitenancy": "0.11.1",
18
- "@voltro/plugin-prometheus": "0.11.1",
19
- "@voltro/plugin-sentry": "0.11.1",
20
- "@voltro/protocol": "0.11.1",
21
- "@voltro/runtime": "0.11.1",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/plugin-multitenancy": "0.11.3",
18
+ "@voltro/plugin-prometheus": "0.11.3",
19
+ "@voltro/plugin-sentry": "0.11.3",
20
+ "@voltro/protocol": "0.11.3",
21
+ "@voltro/runtime": "0.11.3",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.11.1",
25
+ "@voltro/testing": "0.11.3",
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.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/env": "0.11.1",
18
- "@voltro/plugin-multitenancy": "0.11.1",
19
- "@voltro/plugin-ratelimit": "0.11.1",
20
- "@voltro/protocol": "0.11.1",
21
- "@voltro/runtime": "0.11.1",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/env": "0.11.3",
18
+ "@voltro/plugin-multitenancy": "0.11.3",
19
+ "@voltro/plugin-ratelimit": "0.11.3",
20
+ "@voltro/protocol": "0.11.3",
21
+ "@voltro/runtime": "0.11.3",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.11.1",
25
+ "@voltro/testing": "0.11.3",
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.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/env": "0.11.1",
18
- "@voltro/plugin-multitenancy": "0.11.1",
19
- "@voltro/plugin-rbac": "0.11.1",
20
- "@voltro/protocol": "0.11.1",
21
- "@voltro/runtime": "0.11.1",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/env": "0.11.3",
18
+ "@voltro/plugin-multitenancy": "0.11.3",
19
+ "@voltro/plugin-rbac": "0.11.3",
20
+ "@voltro/protocol": "0.11.3",
21
+ "@voltro/runtime": "0.11.3",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.11.1",
25
+ "@voltro/testing": "0.11.3",
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.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/plugin-openapi": "0.11.1",
18
- "@voltro/protocol": "0.11.1",
19
- "@voltro/runtime": "0.11.1",
20
- "@voltro/sql-postgres": "0.11.1",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/plugin-openapi": "0.11.3",
18
+ "@voltro/protocol": "0.11.3",
19
+ "@voltro/runtime": "0.11.3",
20
+ "@voltro/sql-postgres": "0.11.3",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.11.1",
24
+ "@voltro/testing": "0.11.3",
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.11.1",
16
- "@voltro/database": "0.11.1",
17
- "@voltro/plugin-analytics-postgres": "0.11.1",
18
- "@voltro/plugin-billing": "0.11.1",
19
- "@voltro/plugin-multitenancy": "0.11.1",
20
- "@voltro/plugin-notifications": "0.11.1",
21
- "@voltro/plugin-presence": "0.11.1",
22
- "@voltro/protocol": "0.11.1",
23
- "@voltro/runtime": "0.11.1",
24
- "@voltro/sql-postgres": "0.11.1",
15
+ "@voltro/cli": "0.11.3",
16
+ "@voltro/database": "0.11.3",
17
+ "@voltro/plugin-analytics-postgres": "0.11.3",
18
+ "@voltro/plugin-billing": "0.11.3",
19
+ "@voltro/plugin-multitenancy": "0.11.3",
20
+ "@voltro/plugin-notifications": "0.11.3",
21
+ "@voltro/plugin-presence": "0.11.3",
22
+ "@voltro/protocol": "0.11.3",
23
+ "@voltro/runtime": "0.11.3",
24
+ "@voltro/sql-postgres": "0.11.3",
25
25
  "effect": "^3.21.2"
26
26
  },
27
27
  "devDependencies": {
28
- "@voltro/testing": "0.11.1",
28
+ "@voltro/testing": "0.11.3",
29
29
  "typescript": "^5.7.0",
30
30
  "vitest": "^3.0.0"
31
31
  }