@voltro/cli 0.34.0 → 0.36.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 (138) hide show
  1. package/CHANGELOG.md +235 -0
  2. package/dist/{apiBuild-DZF_f0_I.js → apiBuild-DiE9zcj6.js} +2 -2
  3. package/dist/apiBuild-ZEZnCXn2.js +2 -0
  4. package/dist/{appGraph-gQ_6GkQQ.js → appGraph-KGDPTuTy.js} +1 -1
  5. package/dist/appGraph-zuMGKVYX.js +2 -0
  6. package/dist/bin.js +1 -1
  7. package/dist/{build-CE7Ca9gm.js → build-DBe6c7qC.js} +7 -7
  8. package/dist/{checkCommand-YZDmkAGd.js → checkCommand-BTA6P3Yr.js} +1 -1
  9. package/dist/{checkCommand-Dv8r9tGO.js → checkCommand-BhG0gmUD.js} +8 -7
  10. package/dist/{clusterCmd-CNXKlcvD.js → clusterCmd-D5wsCmA_.js} +1 -1
  11. package/dist/{codegenCommand-DC6w2tNZ.js → codegenCommand-DH-8ZXzR.js} +3 -3
  12. package/dist/{codemodRunner-DRRqXR74.js → codemodRunner-DjQGrdmg.js} +195 -37
  13. package/dist/{commands-gutsz-Ac.js → commands-Bp7utV-7.js} +37 -29
  14. package/dist/{dashboardCommand-3YG8p-UA.js → dashboardCommand-D5Jwjmr1.js} +3 -3
  15. package/dist/{dataCommand-qL0r7fPO.js → dataCommand-DnCm0B2C.js} +56 -54
  16. package/dist/dbCommand-DS4b97Is.js +2 -0
  17. package/dist/{dbCommand-B6X0FZbq.js → dbCommand-O8HA63s2.js} +6 -6
  18. package/dist/{dev-CoG-ZPx8.js → dev-BSFTgCQ5.js} +1 -1
  19. package/dist/{dev-CerMd0mW.js → dev-Dc4cpmRl.js} +2741 -2233
  20. package/dist/doctorCommand-BYffQc0s.js +2 -0
  21. package/dist/{doctorCommand-CnDXQxfa.js → doctorCommand-CNFtt3nR.js} +76 -73
  22. package/dist/{dormancyCommand-Dszo57d6.js → dormancyCommand-6F6NsJKf.js} +1 -1
  23. package/dist/{embeddingsCommand-C0sKVRo1.js → embeddingsCommand-DRRdneJD.js} +1 -1
  24. package/dist/{envCommand-DPgdV1Bq.js → envCommand-TZzcyqZ-.js} +2 -2
  25. package/dist/{evolveCommand-DHpkgjgH.js → evolveCommand-iU35TPjT.js} +2 -2
  26. package/dist/frameworkTableAssembly-YyVe32Cb.js +2 -0
  27. package/dist/frameworkTableAssembly-oMPBKqlE.js +511 -0
  28. package/dist/{generateCommand-oibemh97.js → generateCommand-DbgcUpGw.js} +1 -1
  29. package/dist/index.js +1 -1
  30. package/dist/{infoCommand-BJw9nLUR.js → infoCommand-unqisJGp.js} +1 -1
  31. package/dist/{inspect-CBqFtAKA.js → inspect-CjTYzAs_.js} +32 -2
  32. package/dist/inspect-P4pxoMaV.js +2 -0
  33. package/dist/{inspectCmd-Bppy-GGw.js → inspectCmd-EHFZ9yYu.js} +1 -1
  34. package/dist/{inspectFetch-Cm8_wVvp.js → inspectFetch-EMuhTG_9.js} +1 -1
  35. package/dist/{logsCmd-CCca3KRZ.js → logsCmd-D36xK7Zu.js} +1 -1
  36. package/dist/manifestBuild-COkJoyAr.js +2 -0
  37. package/dist/{manifestBuild-sxpwdKY1.js → manifestBuild-hpPLaGxV.js} +1 -1
  38. package/dist/{migrate-CBwOt_iV.js → migrate-BV7I-ZHZ.js} +3 -3
  39. package/dist/probeCommand-CZfaaUOZ.js +122 -0
  40. package/dist/{runtimeTrace-CRxalXTs.js → runtimeTrace-D5LJ_N55.js} +1 -1
  41. package/dist/scheduleCmd-DQRu6BZC.js +149 -0
  42. package/dist/{sdkgen-CYJscZC7.js → sdkgen-82xVuvbt.js} +1 -1
  43. package/dist/{seedRunner-TFHHiToI.js → seedRunner-ZmLSqNe2.js} +74 -70
  44. package/dist/serveCommand-CEBVP36A.js +2 -0
  45. package/dist/serveCommand-VVGcIMIw.js +1766 -0
  46. package/dist/serveEntry.js +1 -1
  47. package/dist/{start-B-9Nsp-S.js → start-BgN62boB.js} +1 -1
  48. package/dist/{start-9LiUOfES.js → start-T4VesWiM.js} +2 -2
  49. package/dist/startEntry.js +1 -1
  50. package/dist/{tracesCmd-CkEZQrtt.js → tracesCmd-DStmCJPi.js} +1 -1
  51. package/dist/updateCommand-CSBXVsYq.js +2 -0
  52. package/dist/{updateCommand-Bkptutss.js → updateCommand-CwnUK_mf.js} +1 -1
  53. package/dist/webDev-BcykISYQ2.js +2 -0
  54. package/dist/{webDev-CBYvPqQr.js → webDev-Dybxew86.js} +14 -2
  55. package/dist/{webhooksCommand-CID96Rga.js → webhooksCommand-di1CJVzu.js} +1 -1
  56. package/dist/{workflowsCmd-D1VTmLMY.js → workflowsCmd-BGF-mRZ5.js} +1 -1
  57. package/package.json +53 -17
  58. package/templates/AGENTS.md +1 -1
  59. package/templates/agent-docs/_index.md +1 -1
  60. package/templates/agent-docs/_manifest.json +1 -1
  61. package/templates/agent-docs/authentication.md +55 -7
  62. package/templates/agent-docs/cli.md +81 -0
  63. package/templates/agent-docs/data.md +59 -2
  64. package/templates/agent-docs/database/migrations.md +50 -1
  65. package/templates/agent-docs/database/misc.md +33 -0
  66. package/templates/agent-docs/deployment.md +214 -21
  67. package/templates/agent-docs/introduction.md +1 -1
  68. package/templates/agent-docs/multi-tenancy.md +93 -22
  69. package/templates/agent-docs/plugins/ai-flows.md +86 -0
  70. package/templates/agent-docs/plugins/billing.md +1 -1
  71. package/templates/agent-docs/plugins/clickhouse.md +31 -0
  72. package/templates/agent-docs/plugins/search.md +6 -3
  73. package/templates/agent-docs/plugins/storage.md +11 -0
  74. package/templates/agent-docs/plugins.md +3 -1
  75. package/templates/agent-docs/scheduling.md +17 -0
  76. package/templates/agent-docs/security.md +2 -2
  77. package/templates/agent-docs/whats-new.md +31 -1764
  78. package/templates/agent-docs/workflows.md +101 -0
  79. package/templates/apps/api-ai/package.json +7 -7
  80. package/templates/apps/api-auth/package.json +8 -8
  81. package/templates/apps/api-backend/package.json +7 -7
  82. package/templates/apps/api-backend-deactivation/package.json +7 -7
  83. package/templates/apps/api-backend-mail/package.json +8 -8
  84. package/templates/apps/api-backend-mariadb/package.json +9 -9
  85. package/templates/apps/api-backend-sqlite/package.json +8 -8
  86. package/templates/apps/api-backend-storage/package.json +8 -8
  87. package/templates/apps/api-cms/package.json +10 -10
  88. package/templates/apps/api-collab/package.json +8 -8
  89. package/templates/apps/api-data-advanced/package.json +8 -8
  90. package/templates/apps/api-durable/package.json +8 -8
  91. package/templates/apps/api-feature-flags/package.json +9 -9
  92. package/templates/apps/api-governance/package.json +8 -8
  93. package/templates/apps/api-kv/package.json +8 -8
  94. package/templates/apps/api-moderation/package.json +8 -8
  95. package/templates/apps/api-observability/package.json +8 -8
  96. package/templates/apps/api-ratelimit/package.json +8 -8
  97. package/templates/apps/api-rbac/package.json +8 -8
  98. package/templates/apps/api-rest/package.json +7 -7
  99. package/templates/apps/api-saas/package.json +11 -11
  100. package/templates/apps/api-saas-starter/package.json +10 -10
  101. package/templates/apps/api-search/package.json +8 -8
  102. package/templates/apps/api-status/package.json +8 -8
  103. package/templates/apps/api-versioning/package.json +8 -8
  104. package/templates/apps/api-webhooks/package.json +9 -9
  105. package/templates/apps/changelog/package.json +6 -6
  106. package/templates/apps/edge-functions/package.json +2 -2
  107. package/templates/apps/frontend-admin/package.json +8 -8
  108. package/templates/apps/frontend-app/package.json +9 -9
  109. package/templates/apps/frontend-auth/package.json +8 -8
  110. package/templates/apps/frontend-blank/package.json +7 -7
  111. package/templates/apps/frontend-cms/package.json +9 -9
  112. package/templates/apps/frontend-collab/package.json +10 -10
  113. package/templates/apps/frontend-contact/package.json +7 -7
  114. package/templates/apps/frontend-dashboard/package.json +7 -7
  115. package/templates/apps/frontend-docs/package.json +7 -7
  116. package/templates/apps/frontend-i18n/package.json +6 -6
  117. package/templates/apps/frontend-landing/package.json +7 -7
  118. package/templates/apps/frontend-portal/package.json +8 -8
  119. package/templates/apps/frontend-saas/package.json +8 -8
  120. package/templates/apps/frontend-spa/package.json +7 -7
  121. package/templates/apps/frontend-ssr/package.json +7 -7
  122. package/templates/apps/frontend-ssr-api/package.json +8 -8
  123. package/templates/apps/frontend-static-blog/package.json +6 -6
  124. package/templates/apps/frontend-status/package.json +8 -8
  125. package/templates/apps/mobile-app/package.json +3 -3
  126. package/dist/apiBuild-BICVGnEC.js +0 -2
  127. package/dist/appGraph-CvQCte0z.js +0 -2
  128. package/dist/dbCommand-CpdKLeQq.js +0 -2
  129. package/dist/doctorCommand-BvqGBwNG.js +0 -2
  130. package/dist/frameworkTableAssembly-BGHmck-x.js +0 -2
  131. package/dist/frameworkTableAssembly-DkkP6BgC.js +0 -674
  132. package/dist/inspect-C_T_WGvl.js +0 -2
  133. package/dist/manifestBuild-ChsKAhmn.js +0 -2
  134. package/dist/scheduleCmd--jksTrf6.js +0 -69
  135. package/dist/serveCommand-B_isw7q4.js +0 -1647
  136. package/dist/serveCommand-DOvbgRnQ.js +0 -2
  137. package/dist/updateCommand-us1_hdIC.js +0 -2
  138. package/dist/webDev-Cg-fFiyd2.js +0 -2
@@ -493,6 +493,38 @@ Parent-close policies:
493
493
 
494
494
  The dashboard shows child runs, their parent execution id, and the selected policy. `ctx.workflows.wait(child)` accepts the run handle directly when the parent needs the child's success/failure snapshot.
495
495
 
496
+ ## Running on a cron — `workflow({ schedule })`
497
+
498
+ A workflow whose only trigger is a clock can declare the cron on itself, instead of a separate `*.cron.tsx` file with a `workflow:` target:
499
+
500
+ ```tsx
501
+ export default workflow({
502
+ name: 'reports.nightly',
503
+ payload: Schema.Struct({ day: Schema.String }),
504
+ idempotencyKey: (p) => `nightly:${p.day}`,
505
+ schedule: {
506
+ cron: '0 3 * * *',
507
+ timezone: 'Europe/Berlin',
508
+ payload: ({ scheduledAt }) => ({ day: scheduledAt.toISOString().slice(0, 10) }),
509
+ onOverlap: 'skip',
510
+ },
511
+ })
512
+ ```
513
+
514
+ This is sugar, not a second scheduler: at boot it lowers into a real schedule named `workflow:<name>` on the same coordinated cron engine every `defineSchedule` uses — same exactly-once claims, same run rows, same Schedules panel, same `voltro schedule run` / `backfill` verbs.
515
+
516
+ What the declaration adds is overlap vocabulary **about the workflow run** (Temporal Schedules' names):
517
+
518
+ - `onOverlap: 'skip'` *(default)* — a firing stands down while the previous firing's **run** is still going.
519
+ - `'buffer'` — firings serialize behind the running one; none is lost.
520
+ - `'cancelOther'` — the new firing cancels the still-running previous run (only runs this schedule started — a manually-started run of the same workflow is never touched), then starts fresh.
521
+
522
+ The synthesized firing **awaits the run to completion** — that is what makes `skip`/`buffer` bind on the run's duration rather than on the milliseconds it takes to enqueue one, and it is why the firing watchdog (`schedule.maxRuntime`) defaults to **24 hours** here instead of a plain schedule's 30 minutes. Set it above your slowest expected run. A failed run fails the firing, so a nightly job that dies every night is red in the schedule ledger, not a wall of green.
523
+
524
+ `payload` is a value or a function of the firing — a function receives `{ scheduledAt }`, so a backfilled firing computes against **its** slot, not "now". `backfill:` and everything else about missed firings work exactly as on a plain schedule — see [Overlap & backfill](/docs/scheduling/overlap-and-backfill).
525
+
526
+ If the workflow also declares a deferring control (debounce, concurrency, …), a scheduled start passes the same admission gate as any other start — a deferred firing has nothing to await and hands the run to the admission queue.
527
+
496
528
  ## Tenant and subject
497
529
 
498
530
  Workflow starts persist the starter's trace id, source, parent execution id, parent-close policy — and their **identity**, never their authority — in `_voltro_workflow_start_contexts`. Whichever runner first executes the workflow loads that context before building the executor `AppContext`.
@@ -898,6 +930,24 @@ if (!decision.approved) {
898
930
 
899
931
  Signals are matched by name inside one workflow run. The payload is decoded with the supplied schema.
900
932
 
933
+ ### Long waits: `awaitSignalSuspending`
934
+
935
+ `awaitSignal` **polls from inside a live activity** — the run keeps its worker fiber for the whole wait. Right for an approval that lands in seconds; wrong for a wait measured in hours or days, where a thousand parked runs pin a thousand fibers. For those, use the drop-in suspending variant:
936
+
937
+ ```tsx
938
+ import { awaitSignalSuspending } from '@voltro/workflow'
939
+
940
+ const decision = yield* awaitSignalSuspending(ctx, {
941
+ name: 'approval',
942
+ schema: Schema.Struct({ approved: Schema.Boolean }),
943
+ timeoutMs: 3 * 24 * 60 * 60_000, // three days — a real human-in-the-loop wait
944
+ })
945
+ ```
946
+
947
+ Same call shape, same senders (`ctx.workflows.signal`, the dashboard button, the HTTP endpoint resume **both** variants), but the run returns `Suspended` while parked — the worker slot is freed and the wake lives in the engine's durable store, exactly like a long `sleep`. The timeout is durable too.
948
+
949
+ **Rule of thumb: seconds → `awaitSignal`; anything a human might sleep on → `awaitSignalSuspending`.** The framework nudges you: an `awaitSignal` declaring a timeout above five minutes logs a one-time hint (once per workflow, never per poll) naming the suspending variant. Tune or effectively silence the threshold with `workflows: { suspendSignalHintMs }` in `app.config.ts`, or `VOLTRO_WORKFLOW_SUSPEND_HINT_MS` at runtime. It is a hint only — the framework never swaps the variant under a run, because the two journal differently and a silent swap mid-history is a replay trap dressed as a favour.
950
+
901
951
  ## Sending signals
902
952
 
903
953
  From the dashboard, open a running workflow and use "Send signal".
@@ -1398,6 +1448,8 @@ priority: (p) => (p.urgent ? 100 : 0)
1398
1448
 
1399
1449
  Higher runs first out of the pending queue. Ties break by arrival, so an all-default deployment is FIFO rather than dialect-dependent.
1400
1450
 
1451
+ > **Scope — read before porting BullMQ priority lanes.** `priority` orders **the admission queue only**: the pending rows a deferring control (debounce, batch, throttle, concurrency), a pause, or a delayed `{ at }` start has parked. A start that is admitted immediately never competes with anything — it goes straight to the engine, whatever any other start's priority says. There are no cross-workflow priority lanes, no preemption of running work, and no ordering between two starts that both found a free slot. If urgent starts must overtake normal ones, put both classes behind the same `concurrency` limit (or a shared `pool`), so every start passes through the queue that `priority` orders.
1452
+
1401
1453
  ## timeouts
1402
1454
 
1403
1455
  ```ts
@@ -1519,6 +1571,28 @@ The result is per-run, not a count: `succeeded`, `failed` (with the reason for e
1519
1571
 
1520
1572
  Eligibility is fixed by the verb: a cancel acts on `running` and `suspended` runs; `replay --mode redrive` on `failed` only (redrive resumes from the step that died, which only exists for a failure); `replay --mode retry` on `failed` and `cancelled`. `--mode` has no default because the two cost very different amounts.
1521
1573
 
1574
+ ## Delayed one-off starts — `start(..., { at })`
1575
+
1576
+ Run this once, later — without a schedule and without a `sleep` at the top of the body:
1577
+
1578
+ ```ts
1579
+ await ctx.workflows.start('orders.remind', { orderId }, {
1580
+ at: new Date(Date.now() + 24 * 60 * 60_000), // tomorrow, this time
1581
+ })
1582
+ ```
1583
+
1584
+ The start is parked as a **durable row** in the same pending queue the controls above use (`mode: 'delayed'`), and the coordinated drainer fires it when `at` arrives — it survives restarts and fires on whichever replica drains, never from an in-process timer. The handle comes back `status: 'queued'` with `deferral: { mode: 'delayed', dueAt }`.
1585
+
1586
+ Semantics worth knowing:
1587
+
1588
+ - **`at` is an absolute instant, deliberately** — not a `delay` duration. A delay is measured "from when?" (enqueue? admission? retry?) and every queueing system answers differently; an instant has no such ambiguity and composes with the schedule/backfill surfaces, which are also instant-based. A relative delay is one line: `at: new Date(Date.now() + ms)`.
1589
+ - **At `at`, the start becomes an ordinary ARRIVAL.** Declared controls judge it as of that moment — a debounce collapses it into whatever window is open then, a rate cap can drop it (recorded, as always). `{ at }` delays the arrival; it never outranks a control.
1590
+ - An `at` in the past starts immediately — "no earlier than" is already satisfied.
1591
+ - `{ at, wait: true }` is refused: there is no result to block on for a start that exists only as a future row.
1592
+ - Each `{ at }` start is its own row. Two delayed starts never collapse into one — unlike debounce, nothing about `{ at }` says the second supersedes the first. Want collapsing? That is `debounce`, and they compose.
1593
+
1594
+ Prefer this over `sleep` as the first step of the body when the wait precedes the work: a parked row costs one row, a sleeping run costs a durable execution the whole time.
1595
+
1522
1596
  ## What a deferred start returns
1523
1597
 
1524
1598
  `start()` no longer always returns a running handle:
@@ -1575,6 +1649,18 @@ A workflow that declares one pays only for that one: an undeclared control costs
1575
1649
 
1576
1650
  The drainer runs on **one replica per tick** through the same claim arbiter the cron scheduler uses. N replicas draining at once would each see a free slot and each take it.
1577
1651
 
1652
+ ### Measured admission throughput
1653
+
1654
+ Measured, not estimated — `node packages/cli/scripts/admission-throughput.mjs` in the framework repo drives the real gate, facade and drainer against the in-memory reference store (slope across N=500/1000/2000 starts, median of 3 sequential repeats; Apple-silicon dev machine, 2026-08):
1655
+
1656
+ - **no controls (passthrough): ~1 µs/start (~800,000 starts/s)** — the do-nothing path really does nothing.
1657
+ - **through a concurrency gate: ~110 µs/start (~9,000 starts/s)** — dominated by the reference store's *unindexed* admission-state scan, which grows with the ledger; a real dialect serves that read from an index, but also adds its round-trips. Read this as the machinery's worst-case CPU floor, not a database benchmark.
1658
+ - **durable park → drain → start: ~4 µs/row (~240,000 rows/s)** of pure machinery per queued row.
1659
+
1660
+ The deployed ceiling is `min(these numbers, what your database serves for the admission reads/writes)` — on any SQL dialect the database is the bound long before the gate is. That is also why there is no key-group batching in the admission path: at ~9k gated starts/s worst-case CPU, batching would add a flush boundary to a path whose bound is elsewhere.
1661
+
1662
+ Per **step**, the recorder adds exactly **2 fire-and-forget store writes** (insert at step start, update at settle), off the step's critical path — plus the cluster engine's own journal write, which is the durability you asked for. Hot high-step workflows can turn the introspection copy off: `workflows: { recording: 'coarse' }` — see [Debugging](/docs/workflows/debugging).
1663
+
1578
1664
 
1579
1665
 
1580
1666
  ---
@@ -1695,6 +1781,21 @@ Voltro records workflow runs, step attempts, and lifecycle events into framework
1695
1781
 
1696
1782
  Run status is `running`, `succeeded`, `failed`, `cancelled`, or `suspended`.
1697
1783
 
1784
+ ### Turning the step rows off — `workflows.recording: 'coarse'`
1785
+
1786
+ Every `step()` costs two fire-and-forget writes to `_voltro_workflow_run_steps` (insert at start, update at settle) — measured, and off the step's critical path, but on a hot workflow with many steps they dominate the table's growth. `'coarse'` skips **both**:
1787
+
1788
+ ```ts
1789
+ // app.config.ts
1790
+ export default {
1791
+ workflows: { recording: 'coarse' }, // default: 'full'
1792
+ }
1793
+ ```
1794
+
1795
+ Runtime override without a rebuild: `VOLTRO_WORKFLOW_RECORDING=coarse` (env wins over config; anything unrecognised falls back to `'full'`).
1796
+
1797
+ What `'coarse'` does **not** touch, deliberately: run rows, run events (signals, timers, cancels, stall reports — everything the dead-letter view and the sweeps read), and the cluster engine's own durable journal — replay and redrive are unaffected. The cost is exactly the dashboard's step timeline: empty for runs recorded under `'coarse'`. Flip it back when you need to see inside a run.
1798
+
1698
1799
  ## Dead-letter: triaging failed runs
1699
1800
 
1700
1801
  The framework does not retry a workflow on its own (see [Retries](/docs/workflows/retries) — you compose retries inside `execute:` with `Effect.retry`). So a run that reaches `failed` is **terminal**: it is the dead-letter. `voltro workflows list --dead-letter` (or the Prometheus series `voltro_workflow_runs_total{status="failed"}` and the stale `voltro_workflow_last_success_timestamp_seconds` gauge — see [Prometheus](/docs/plugins/prometheus)) is your queue of unhandled failures.
@@ -12,16 +12,16 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.97.0",
14
14
  "@effect/rpc": "^0.76.0",
15
- "@voltro/ai": "0.34.0",
16
- "@voltro/cli": "0.34.0",
17
- "@voltro/database": "0.34.0",
18
- "@voltro/env": "0.34.0",
19
- "@voltro/protocol": "0.34.0",
20
- "@voltro/runtime": "0.34.0",
15
+ "@voltro/ai": "0.36.0",
16
+ "@voltro/cli": "0.36.0",
17
+ "@voltro/database": "0.36.0",
18
+ "@voltro/env": "0.36.0",
19
+ "@voltro/protocol": "0.36.0",
20
+ "@voltro/runtime": "0.36.0",
21
21
  "effect": "^3.22.0"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.34.0",
24
+ "@voltro/testing": "0.36.0",
25
25
  "typescript": "^6.0.3",
26
26
  "@vitest/coverage-v8": "^4.1.10",
27
27
  "vitest": "^4.1.10"
@@ -13,17 +13,17 @@
13
13
  "dependencies": {
14
14
  "@effect/platform": "^0.97.0",
15
15
  "@effect/rpc": "^0.76.0",
16
- "@voltro/cli": "0.34.0",
17
- "@voltro/database": "0.34.0",
18
- "@voltro/env": "0.34.0",
19
- "@voltro/plugin-auth": "0.34.0",
20
- "@voltro/protocol": "0.34.0",
21
- "@voltro/runtime": "0.34.0",
22
- "@voltro/sql-postgres": "0.34.0",
16
+ "@voltro/cli": "0.36.0",
17
+ "@voltro/database": "0.36.0",
18
+ "@voltro/env": "0.36.0",
19
+ "@voltro/plugin-auth": "0.36.0",
20
+ "@voltro/protocol": "0.36.0",
21
+ "@voltro/runtime": "0.36.0",
22
+ "@voltro/sql-postgres": "0.36.0",
23
23
  "effect": "^3.22.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.34.0",
26
+ "@voltro/testing": "0.36.0",
27
27
  "typescript": "^6.0.3",
28
28
  "@vitest/coverage-v8": "^4.1.10",
29
29
  "vitest": "^4.1.10"
@@ -16,16 +16,16 @@
16
16
  "dependencies": {
17
17
  "@effect/platform": "^0.97.0",
18
18
  "@effect/rpc": "^0.76.0",
19
- "@voltro/cli": "0.34.0",
20
- "@voltro/database": "0.34.0",
21
- "@voltro/env": "0.34.0",
22
- "@voltro/plugin-multitenancy": "0.34.0",
23
- "@voltro/protocol": "0.34.0",
24
- "@voltro/runtime": "0.34.0",
19
+ "@voltro/cli": "0.36.0",
20
+ "@voltro/database": "0.36.0",
21
+ "@voltro/env": "0.36.0",
22
+ "@voltro/plugin-multitenancy": "0.36.0",
23
+ "@voltro/protocol": "0.36.0",
24
+ "@voltro/runtime": "0.36.0",
25
25
  "effect": "^3.22.0"
26
26
  },
27
27
  "devDependencies": {
28
- "@voltro/testing": "0.34.0",
28
+ "@voltro/testing": "0.36.0",
29
29
  "typescript": "^6.0.3",
30
30
  "@vitest/coverage-v8": "^4.1.10",
31
31
  "vitest": "^4.1.10"
@@ -13,16 +13,16 @@
13
13
  "dependencies": {
14
14
  "@effect/platform": "^0.97.0",
15
15
  "@effect/rpc": "^0.76.0",
16
- "@voltro/cli": "0.34.0",
17
- "@voltro/database": "0.34.0",
18
- "@voltro/env": "0.34.0",
19
- "@voltro/plugin-deactivation": "0.34.0",
20
- "@voltro/protocol": "0.34.0",
21
- "@voltro/runtime": "0.34.0",
16
+ "@voltro/cli": "0.36.0",
17
+ "@voltro/database": "0.36.0",
18
+ "@voltro/env": "0.36.0",
19
+ "@voltro/plugin-deactivation": "0.36.0",
20
+ "@voltro/protocol": "0.36.0",
21
+ "@voltro/runtime": "0.36.0",
22
22
  "effect": "^3.22.0"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.34.0",
25
+ "@voltro/testing": "0.36.0",
26
26
  "typescript": "^6.0.3",
27
27
  "@vitest/coverage-v8": "^4.1.10",
28
28
  "vitest": "^4.1.10"
@@ -13,18 +13,18 @@
13
13
  "dependencies": {
14
14
  "@react-email/components": "^1.0.12",
15
15
  "@react-email/render": "^1.4.0",
16
- "@voltro/cli": "0.34.0",
17
- "@voltro/database": "0.34.0",
18
- "@voltro/env": "0.34.0",
19
- "@voltro/plugin-mail": "0.34.0",
20
- "@voltro/plugin-multitenancy": "0.34.0",
21
- "@voltro/protocol": "0.34.0",
22
- "@voltro/runtime": "0.34.0",
16
+ "@voltro/cli": "0.36.0",
17
+ "@voltro/database": "0.36.0",
18
+ "@voltro/env": "0.36.0",
19
+ "@voltro/plugin-mail": "0.36.0",
20
+ "@voltro/plugin-multitenancy": "0.36.0",
21
+ "@voltro/protocol": "0.36.0",
22
+ "@voltro/runtime": "0.36.0",
23
23
  "effect": "^3.22.0",
24
24
  "react": "^19.0.0"
25
25
  },
26
26
  "devDependencies": {
27
- "@voltro/testing": "0.34.0",
27
+ "@voltro/testing": "0.36.0",
28
28
  "typescript": "^6.0.3",
29
29
  "@vitest/coverage-v8": "^4.1.10",
30
30
  "vitest": "^4.1.10"
@@ -13,18 +13,18 @@
13
13
  "dependencies": {
14
14
  "@effect/platform": "^0.97.0",
15
15
  "@effect/rpc": "^0.76.0",
16
- "@voltro/cli": "0.34.0",
17
- "@voltro/database": "0.34.0",
18
- "@voltro/env": "0.34.0",
19
- "@voltro/plugin-multitenancy": "0.34.0",
20
- "@voltro/plugin-storage": "0.34.0",
21
- "@voltro/protocol": "0.34.0",
22
- "@voltro/runtime": "0.34.0",
23
- "@voltro/sql-mysql": "0.34.0",
16
+ "@voltro/cli": "0.36.0",
17
+ "@voltro/database": "0.36.0",
18
+ "@voltro/env": "0.36.0",
19
+ "@voltro/plugin-multitenancy": "0.36.0",
20
+ "@voltro/plugin-storage": "0.36.0",
21
+ "@voltro/protocol": "0.36.0",
22
+ "@voltro/runtime": "0.36.0",
23
+ "@voltro/sql-mysql": "0.36.0",
24
24
  "effect": "^3.22.0"
25
25
  },
26
26
  "devDependencies": {
27
- "@voltro/testing": "0.34.0",
27
+ "@voltro/testing": "0.36.0",
28
28
  "typescript": "^6.0.3",
29
29
  "@vitest/coverage-v8": "^4.1.10",
30
30
  "vitest": "^4.1.10"
@@ -13,17 +13,17 @@
13
13
  "dependencies": {
14
14
  "@effect/platform": "^0.97.0",
15
15
  "@effect/rpc": "^0.76.0",
16
- "@voltro/cli": "0.34.0",
17
- "@voltro/database": "0.34.0",
18
- "@voltro/env": "0.34.0",
19
- "@voltro/plugin-multitenancy": "0.34.0",
20
- "@voltro/protocol": "0.34.0",
21
- "@voltro/runtime": "0.34.0",
22
- "@voltro/sql-sqlite": "0.34.0",
16
+ "@voltro/cli": "0.36.0",
17
+ "@voltro/database": "0.36.0",
18
+ "@voltro/env": "0.36.0",
19
+ "@voltro/plugin-multitenancy": "0.36.0",
20
+ "@voltro/protocol": "0.36.0",
21
+ "@voltro/runtime": "0.36.0",
22
+ "@voltro/sql-sqlite": "0.36.0",
23
23
  "effect": "^3.22.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.34.0",
26
+ "@voltro/testing": "0.36.0",
27
27
  "typescript": "^6.0.3",
28
28
  "@vitest/coverage-v8": "^4.1.10",
29
29
  "vitest": "^4.1.10"
@@ -11,17 +11,17 @@
11
11
  "test": "voltro test"
12
12
  },
13
13
  "dependencies": {
14
- "@voltro/cli": "0.34.0",
15
- "@voltro/database": "0.34.0",
16
- "@voltro/env": "0.34.0",
17
- "@voltro/plugin-multitenancy": "0.34.0",
18
- "@voltro/plugin-storage": "0.34.0",
19
- "@voltro/protocol": "0.34.0",
20
- "@voltro/runtime": "0.34.0",
14
+ "@voltro/cli": "0.36.0",
15
+ "@voltro/database": "0.36.0",
16
+ "@voltro/env": "0.36.0",
17
+ "@voltro/plugin-multitenancy": "0.36.0",
18
+ "@voltro/plugin-storage": "0.36.0",
19
+ "@voltro/protocol": "0.36.0",
20
+ "@voltro/runtime": "0.36.0",
21
21
  "effect": "^3.22.0"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.34.0",
24
+ "@voltro/testing": "0.36.0",
25
25
  "typescript": "^6.0.3",
26
26
  "@vitest/coverage-v8": "^4.1.10",
27
27
  "vitest": "^4.1.10"
@@ -13,19 +13,19 @@
13
13
  "dependencies": {
14
14
  "@effect/platform": "^0.97.0",
15
15
  "@effect/rpc": "^0.76.0",
16
- "@voltro/cli": "0.34.0",
17
- "@voltro/cms": "0.34.0",
18
- "@voltro/database": "0.34.0",
19
- "@voltro/env": "0.34.0",
20
- "@voltro/plugin-auth": "0.34.0",
21
- "@voltro/plugin-multitenancy": "0.34.0",
22
- "@voltro/protocol": "0.34.0",
23
- "@voltro/runtime": "0.34.0",
24
- "@voltro/sql-postgres": "0.34.0",
16
+ "@voltro/cli": "0.36.0",
17
+ "@voltro/cms": "0.36.0",
18
+ "@voltro/database": "0.36.0",
19
+ "@voltro/env": "0.36.0",
20
+ "@voltro/plugin-auth": "0.36.0",
21
+ "@voltro/plugin-multitenancy": "0.36.0",
22
+ "@voltro/protocol": "0.36.0",
23
+ "@voltro/runtime": "0.36.0",
24
+ "@voltro/sql-postgres": "0.36.0",
25
25
  "effect": "^3.22.0"
26
26
  },
27
27
  "devDependencies": {
28
- "@voltro/testing": "0.34.0",
28
+ "@voltro/testing": "0.36.0",
29
29
  "typescript": "^6.0.3",
30
30
  "@vitest/coverage-v8": "^4.1.10",
31
31
  "vitest": "^4.1.10"
@@ -13,17 +13,17 @@
13
13
  "dependencies": {
14
14
  "@effect/platform": "^0.97.0",
15
15
  "@effect/rpc": "^0.76.0",
16
- "@voltro/cli": "0.34.0",
17
- "@voltro/database": "0.34.0",
18
- "@voltro/env": "0.34.0",
19
- "@voltro/local-first": "0.34.0",
20
- "@voltro/plugin-multitenancy": "0.34.0",
21
- "@voltro/protocol": "0.34.0",
22
- "@voltro/runtime": "0.34.0",
16
+ "@voltro/cli": "0.36.0",
17
+ "@voltro/database": "0.36.0",
18
+ "@voltro/env": "0.36.0",
19
+ "@voltro/local-first": "0.36.0",
20
+ "@voltro/plugin-multitenancy": "0.36.0",
21
+ "@voltro/protocol": "0.36.0",
22
+ "@voltro/runtime": "0.36.0",
23
23
  "effect": "^3.22.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.34.0",
26
+ "@voltro/testing": "0.36.0",
27
27
  "typescript": "^6.0.3",
28
28
  "@vitest/coverage-v8": "^4.1.10",
29
29
  "vitest": "^4.1.10"
@@ -12,17 +12,17 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.97.0",
14
14
  "@effect/rpc": "^0.76.0",
15
- "@voltro/cli": "0.34.0",
16
- "@voltro/database": "0.34.0",
17
- "@voltro/env": "0.34.0",
18
- "@voltro/plugin-governance": "0.34.0",
19
- "@voltro/plugin-multitenancy": "0.34.0",
20
- "@voltro/protocol": "0.34.0",
21
- "@voltro/runtime": "0.34.0",
15
+ "@voltro/cli": "0.36.0",
16
+ "@voltro/database": "0.36.0",
17
+ "@voltro/env": "0.36.0",
18
+ "@voltro/plugin-governance": "0.36.0",
19
+ "@voltro/plugin-multitenancy": "0.36.0",
20
+ "@voltro/protocol": "0.36.0",
21
+ "@voltro/runtime": "0.36.0",
22
22
  "effect": "^3.22.0"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.34.0",
25
+ "@voltro/testing": "0.36.0",
26
26
  "typescript": "^6.0.3",
27
27
  "@vitest/coverage-v8": "^4.1.10",
28
28
  "vitest": "^4.1.10"
@@ -12,17 +12,17 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.97.0",
14
14
  "@effect/rpc": "^0.76.0",
15
- "@voltro/cli": "0.34.0",
16
- "@voltro/database": "0.34.0",
17
- "@voltro/env": "0.34.0",
18
- "@voltro/plugin-multitenancy": "0.34.0",
19
- "@voltro/protocol": "0.34.0",
20
- "@voltro/runtime": "0.34.0",
21
- "@voltro/workflow": "0.34.0",
15
+ "@voltro/cli": "0.36.0",
16
+ "@voltro/database": "0.36.0",
17
+ "@voltro/env": "0.36.0",
18
+ "@voltro/plugin-multitenancy": "0.36.0",
19
+ "@voltro/protocol": "0.36.0",
20
+ "@voltro/runtime": "0.36.0",
21
+ "@voltro/workflow": "0.36.0",
22
22
  "effect": "^3.22.0"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.34.0",
25
+ "@voltro/testing": "0.36.0",
26
26
  "typescript": "^6.0.3",
27
27
  "@vitest/coverage-v8": "^4.1.10",
28
28
  "vitest": "^4.1.10"
@@ -13,18 +13,18 @@
13
13
  "dependencies": {
14
14
  "@effect/platform": "^0.97.0",
15
15
  "@effect/rpc": "^0.76.0",
16
- "@voltro/cli": "0.34.0",
17
- "@voltro/database": "0.34.0",
18
- "@voltro/env": "0.34.0",
19
- "@voltro/plugin-flags": "0.34.0",
20
- "@voltro/plugin-multitenancy": "0.34.0",
21
- "@voltro/protocol": "0.34.0",
22
- "@voltro/runtime": "0.34.0",
23
- "@voltro/sql-postgres": "0.34.0",
16
+ "@voltro/cli": "0.36.0",
17
+ "@voltro/database": "0.36.0",
18
+ "@voltro/env": "0.36.0",
19
+ "@voltro/plugin-flags": "0.36.0",
20
+ "@voltro/plugin-multitenancy": "0.36.0",
21
+ "@voltro/protocol": "0.36.0",
22
+ "@voltro/runtime": "0.36.0",
23
+ "@voltro/sql-postgres": "0.36.0",
24
24
  "effect": "^3.22.0"
25
25
  },
26
26
  "devDependencies": {
27
- "@voltro/testing": "0.34.0",
27
+ "@voltro/testing": "0.36.0",
28
28
  "typescript": "^6.0.3",
29
29
  "@vitest/coverage-v8": "^4.1.10",
30
30
  "vitest": "^4.1.10"
@@ -13,17 +13,17 @@
13
13
  "dependencies": {
14
14
  "@effect/platform": "^0.97.0",
15
15
  "@effect/rpc": "^0.76.0",
16
- "@voltro/cli": "0.34.0",
17
- "@voltro/database": "0.34.0",
18
- "@voltro/env": "0.34.0",
19
- "@voltro/plugin-audit": "0.34.0",
20
- "@voltro/plugin-governance": "0.34.0",
21
- "@voltro/protocol": "0.34.0",
22
- "@voltro/runtime": "0.34.0",
16
+ "@voltro/cli": "0.36.0",
17
+ "@voltro/database": "0.36.0",
18
+ "@voltro/env": "0.36.0",
19
+ "@voltro/plugin-audit": "0.36.0",
20
+ "@voltro/plugin-governance": "0.36.0",
21
+ "@voltro/protocol": "0.36.0",
22
+ "@voltro/runtime": "0.36.0",
23
23
  "effect": "^3.22.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.34.0",
26
+ "@voltro/testing": "0.36.0",
27
27
  "typescript": "^6.0.3",
28
28
  "@vitest/coverage-v8": "^4.1.10",
29
29
  "vitest": "^4.1.10"
@@ -12,17 +12,17 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.97.0",
14
14
  "@effect/rpc": "^0.76.0",
15
- "@voltro/cli": "0.34.0",
16
- "@voltro/database": "0.34.0",
17
- "@voltro/env": "0.34.0",
18
- "@voltro/kv": "0.34.0",
19
- "@voltro/plugin-multitenancy": "0.34.0",
20
- "@voltro/protocol": "0.34.0",
21
- "@voltro/runtime": "0.34.0",
15
+ "@voltro/cli": "0.36.0",
16
+ "@voltro/database": "0.36.0",
17
+ "@voltro/env": "0.36.0",
18
+ "@voltro/kv": "0.36.0",
19
+ "@voltro/plugin-multitenancy": "0.36.0",
20
+ "@voltro/protocol": "0.36.0",
21
+ "@voltro/runtime": "0.36.0",
22
22
  "effect": "^3.22.0"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.34.0",
25
+ "@voltro/testing": "0.36.0",
26
26
  "typescript": "^6.0.3",
27
27
  "@vitest/coverage-v8": "^4.1.10",
28
28
  "vitest": "^4.1.10"
@@ -13,17 +13,17 @@
13
13
  "dependencies": {
14
14
  "@effect/platform": "^0.97.0",
15
15
  "@effect/rpc": "^0.76.0",
16
- "@voltro/cli": "0.34.0",
17
- "@voltro/database": "0.34.0",
18
- "@voltro/env": "0.34.0",
19
- "@voltro/plugin-moderation": "0.34.0",
20
- "@voltro/plugin-multitenancy": "0.34.0",
21
- "@voltro/protocol": "0.34.0",
22
- "@voltro/runtime": "0.34.0",
16
+ "@voltro/cli": "0.36.0",
17
+ "@voltro/database": "0.36.0",
18
+ "@voltro/env": "0.36.0",
19
+ "@voltro/plugin-moderation": "0.36.0",
20
+ "@voltro/plugin-multitenancy": "0.36.0",
21
+ "@voltro/protocol": "0.36.0",
22
+ "@voltro/runtime": "0.36.0",
23
23
  "effect": "^3.22.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.34.0",
26
+ "@voltro/testing": "0.36.0",
27
27
  "typescript": "^6.0.3",
28
28
  "@vitest/coverage-v8": "^4.1.10",
29
29
  "vitest": "^4.1.10"
@@ -13,17 +13,17 @@
13
13
  "dependencies": {
14
14
  "@effect/platform": "^0.97.0",
15
15
  "@effect/rpc": "^0.76.0",
16
- "@voltro/cli": "0.34.0",
17
- "@voltro/database": "0.34.0",
18
- "@voltro/plugin-multitenancy": "0.34.0",
19
- "@voltro/plugin-prometheus": "0.34.0",
20
- "@voltro/plugin-sentry": "0.34.0",
21
- "@voltro/protocol": "0.34.0",
22
- "@voltro/runtime": "0.34.0",
16
+ "@voltro/cli": "0.36.0",
17
+ "@voltro/database": "0.36.0",
18
+ "@voltro/plugin-multitenancy": "0.36.0",
19
+ "@voltro/plugin-prometheus": "0.36.0",
20
+ "@voltro/plugin-sentry": "0.36.0",
21
+ "@voltro/protocol": "0.36.0",
22
+ "@voltro/runtime": "0.36.0",
23
23
  "effect": "^3.22.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@voltro/testing": "0.34.0",
26
+ "@voltro/testing": "0.36.0",
27
27
  "typescript": "^6.0.3",
28
28
  "@vitest/coverage-v8": "^4.1.10",
29
29
  "vitest": "^4.1.10"