@voltro/cli 0.25.0 → 0.27.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.
- package/CHANGELOG.md +541 -0
- package/dist/apiBuild-BrjrVJJh.js +2 -0
- package/dist/{apiBuild-BqhCSytw.js → apiBuild-D22_EpoR.js} +2 -2
- package/dist/bin.js +3 -3
- package/dist/{commands-7EmYJ9Xg.js → commands-jBX8no1I.js} +185 -84
- package/dist/dbCommand-DrzXimKf.js +2 -0
- package/dist/{dbCommand-FUU12FvD.js → dbCommand-uuNCrFAb.js} +238 -238
- package/dist/{dev-BvHT7WZa.js → dev-DNkso403.js} +1 -1
- package/dist/{dev-MacSQ1Ll.js → dev-DcbIJrWg.js} +2036 -1775
- package/dist/{frameworkTableAssembly-Cw5zJz6n.js → frameworkTableAssembly-BwHU9Euq.js} +10 -6
- package/dist/frameworkTableAssembly-lrjZtk0G.js +2 -0
- package/dist/index.js +1 -1
- package/dist/{inspect-DuLUrZp9.js → inspect-CUCCzw2I.js} +6 -3
- package/dist/inspect-gt8bq-Tz.js +2 -0
- package/dist/{inspectMetrics-EQwH7BI4.js → inspectMetrics-BU90mvJN.js} +1 -1
- package/dist/{manifestBuild-Dneq4_Jx.js → manifestBuild-BnzAxp2O.js} +1 -1
- package/dist/manifestBuild-ifczArzr.js +2 -0
- package/dist/serveCommand-DfkisVWP.js +1310 -0
- package/dist/serveEntry.js +2 -2
- package/dist/{start-C-ZWSDpg.js → start-BGXIf6zT.js} +2 -2
- package/dist/startEntry.js +2 -2
- package/package.json +17 -17
- package/templates/AGENTS.md +1 -1
- package/templates/agent-docs/_index.md +1 -1
- package/templates/agent-docs/data.md +254 -2
- package/templates/agent-docs/database/schema.md +47 -0
- package/templates/agent-docs/deployment.md +19 -0
- package/templates/agent-docs/plugins.md +53 -3
- package/templates/agent-docs/whats-new.md +128 -294
- package/templates/agent-docs/workflows.md +116 -22
- package/templates/apps/api-ai/package.json +7 -7
- package/templates/apps/api-auth/package.json +8 -8
- package/templates/apps/api-backend/package.json +7 -7
- package/templates/apps/api-backend-deactivation/package.json +7 -7
- package/templates/apps/api-backend-mail/package.json +8 -8
- package/templates/apps/api-backend-mariadb/package.json +9 -9
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-data-advanced/package.json +8 -8
- package/templates/apps/api-durable/package.json +8 -8
- package/templates/apps/api-feature-flags/package.json +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- package/templates/apps/changelog/package.json +6 -6
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +8 -8
- package/templates/apps/frontend-app/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +7 -7
- package/templates/apps/frontend-docs/package.json +7 -7
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +7 -7
- package/templates/apps/frontend-spa/package.json +7 -7
- package/templates/apps/frontend-ssr/package.json +7 -7
- package/templates/apps/frontend-ssr-api/package.json +8 -8
- package/templates/apps/frontend-static-blog/package.json +6 -6
- package/dist/apiBuild-N1R4V792.js +0 -2
- package/dist/dbCommand-CIrdFLp9.js +0 -2
- package/dist/frameworkTableAssembly-BsnCKzQ6.js +0 -2
- package/dist/inspect-C9gjHwBk.js +0 -2
- package/dist/manifestBuild-BVwS1Z_6.js +0 -2
- package/dist/serveCommand-5ZFiNO1R.js +0 -1241
|
@@ -525,34 +525,55 @@ Workflow durability and retry are related, but not identical. The engine checkpo
|
|
|
525
525
|
|
|
526
526
|
## Per-step retries
|
|
527
527
|
|
|
528
|
-
|
|
528
|
+
Declare a `retry:` policy on `step({...})` and the framework **enforces** it — it compiles the policy to an Effect `Schedule` and retries `execute` for you. No hand-written retry needed:
|
|
529
529
|
|
|
530
530
|
```tsx
|
|
531
|
-
import { workflow, step
|
|
532
|
-
import {
|
|
531
|
+
import { workflow, step } from '@voltro/workflow'
|
|
532
|
+
import { Schema } from 'effect'
|
|
533
533
|
|
|
534
534
|
class ProviderDown extends Schema.TaggedError<ProviderDown>()('ProviderDown', {
|
|
535
535
|
message: Schema.String,
|
|
536
536
|
}) {}
|
|
537
537
|
|
|
538
|
-
const summary = yield*
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
}),
|
|
551
|
-
Schedule.exponential('500 millis').pipe(Schedule.recurs(4)),
|
|
552
|
-
)
|
|
538
|
+
const summary = yield* step({
|
|
539
|
+
name: 'summarise-with-llm',
|
|
540
|
+
input: { noteId },
|
|
541
|
+
success: Schema.String,
|
|
542
|
+
error: ProviderDown,
|
|
543
|
+
retry: {
|
|
544
|
+
maxAttempts: 5,
|
|
545
|
+
strategy: 'exponential',
|
|
546
|
+
baseDelay: '500 millis',
|
|
547
|
+
},
|
|
548
|
+
execute: callLlm(note.body),
|
|
549
|
+
})
|
|
553
550
|
```
|
|
554
551
|
|
|
555
|
-
|
|
552
|
+
Retries run inside the one step and are transparent to the durable engine — completed steps still checkpoint; the step's final outcome is recorded. `retry: { maxAttempts: 5 }` is already a good policy (exponential backoff, jittered).
|
|
553
|
+
|
|
554
|
+
### The conditions you actually want
|
|
555
|
+
|
|
556
|
+
The useful retry question is rarely "how many times" — it's *which* failures, for *how long*, and *how spread out*. The policy covers all of it:
|
|
557
|
+
|
|
558
|
+
```tsx
|
|
559
|
+
retry: {
|
|
560
|
+
maxAttempts: 5, // total attempts including the first (default 3)
|
|
561
|
+
strategy: 'exponential', // 'exponential' | 'fixed' | 'linear'
|
|
562
|
+
baseDelay: '500 millis',
|
|
563
|
+
maxDelay: '30 seconds', // ceiling so exponential growth can't run away
|
|
564
|
+
factor: 2, // exponential growth factor
|
|
565
|
+
jitter: true, // full jitter (default true) — anti-thundering-herd
|
|
566
|
+
maxElapsed: '5 minutes', // a total time BUDGET — stop retrying after this
|
|
567
|
+
retryableErrors: ['ProviderDown'], // retry ONLY these typed errors; others fail fast
|
|
568
|
+
respectRetryAfter: true, // honor a 429: retryAfter REPLACES this attempt's backoff
|
|
569
|
+
}
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
- **`retryableErrors`** (or a `retryable: (error) => boolean` predicate) is the important one: retry the *transient* failures, fail *fast* on the permanent ones. A `ValidationError` should never be retried; a `ProviderDown` should.
|
|
573
|
+
- **`maxElapsed`** is a deadline across all attempts, not another count — the right bound when "keep trying for up to 5 minutes" matters more than "try 8 times".
|
|
574
|
+
- **`respectRetryAfter`** uses exactly the delay a provider asked for (a `retryAfterMillis` number, or `retryAfter` in seconds, on the thrown error) as the next delay, replacing the computed backoff for that attempt; falls back to backoff when there is no hint.
|
|
575
|
+
|
|
576
|
+
Retries here run *inside* the one step attempt, so the step is recorded as a SINGLE row in `_voltro_workflow_run_steps` with its final outcome — the individual in-step retries are not separate rows. `respectRetryAfter` uses the provider's delay AS the next delay (replacing the computed backoff for that attempt), falling back to backoff when the error carries no hint. For per-attempt rows in the dashboard, or a bespoke `Schedule`, use `stepModule.retry(step({...}), schedule)` instead. Do NOT set `retry:` on a step you ALSO wrap in `stepModule.retry` / `Effect.retry`: it would retry twice.
|
|
556
577
|
|
|
557
578
|
## What to retry
|
|
558
579
|
|
|
@@ -604,6 +625,64 @@ For ad-hoc ops, the same operation is available manually — the CLI (`voltro wo
|
|
|
604
625
|
voltro workflows retry wfrun_01H...
|
|
605
626
|
```
|
|
606
627
|
|
|
628
|
+
`retry` starts a **fresh execution** — a new execution id, an empty journal, every step runs again. That is the right tool for a short, idempotent job, or when the input itself was wrong (`payloadOverride`). For a long multi-step pipeline where re-doing steps 1…N‑1 is expensive or unsafe, you want the opposite: resume from where it failed.
|
|
629
|
+
|
|
630
|
+
## Resume from where it failed — `suspendOnFailure`
|
|
631
|
+
|
|
632
|
+
Declare `suspendOnFailure: true` on a workflow and a failure no longer becomes a terminal `failed` run — it **suspends** with the durable journal intact:
|
|
633
|
+
|
|
634
|
+
```ts
|
|
635
|
+
export default workflow({
|
|
636
|
+
name: 'billing.close-month',
|
|
637
|
+
payload: { orgId: Schema.String },
|
|
638
|
+
success: Schema.Void,
|
|
639
|
+
error: Schema.Unknown,
|
|
640
|
+
idempotencyKey: ({ orgId }) => `billing.close-month:${orgId}`,
|
|
641
|
+
suspendOnFailure: true, // a failure suspends (recoverable), not fails (terminal)
|
|
642
|
+
execute: ({ orgId }) => Effect.gen(function* () {
|
|
643
|
+
yield* step('snapshot-ledger', /* … */) // completed steps are journaled
|
|
644
|
+
yield* step('call-tax-provider', /* … */) // ← a transient 503 here …
|
|
645
|
+
yield* step('finalise-invoices', /* … */)
|
|
646
|
+
}),
|
|
647
|
+
})
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
When `call-tax-provider` fails, the run goes to `suspended` (not `failed`), carrying the failure reason. Fix the cause, then **resume** — the engine replays `snapshot-ledger` from the journal (it does **not** re-run) and continues from the failed step:
|
|
651
|
+
|
|
652
|
+
```sh
|
|
653
|
+
voltro workflows resume wfrun_01H... # re-drives from the failure point
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
```ts
|
|
657
|
+
await ctx.workflows.resume(run.id) // the same, from a handler
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
Because a suspended-on-failure run is **recoverable, not dead**, it shows up under `--status suspended`, NOT in the [dead-letter view](/docs/workflows/debugging) (`voltro workflows list --dead-letter`, which is failed-and-unhandled). Choose per workflow: `suspendOnFailure: true` for a long pipeline where prior work must not be redone; the default (`retry` from scratch) for short idempotent jobs.
|
|
661
|
+
|
|
662
|
+
## Re-drive a failed run — `redrive`
|
|
663
|
+
|
|
664
|
+
`suspendOnFailure` is a decision you make **before** the run. What if a run already **failed** — it's sitting in the dead-letter view — and you still want to continue it from where it died, not re-run it from scratch? That is `redrive`:
|
|
665
|
+
|
|
666
|
+
```sh
|
|
667
|
+
voltro workflows redrive wf_01H... # re-drive a FAILED run from the step it died on
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
```ts
|
|
671
|
+
await ctx.workflows.redrive(run.id) // the same, from a handler; addressed by run id
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
`redrive` re-drives the run from its durable journal: every **completed** step replays from the journal (it does **not** re-run), and only the **failed** step(s) re-execute. It is the after-the-fact counterpart to `suspendOnFailure` + `resume` — same "continue from the failure point" outcome, but for a run that already went terminal without being marked suspend-on-failure. Fix the downstream cause first, then redrive.
|
|
675
|
+
|
|
676
|
+
The three recovery tools, and when each applies:
|
|
677
|
+
|
|
678
|
+
| Tool | Use when | Journal |
|
|
679
|
+
|---|---|---|
|
|
680
|
+
| `retry` | The input was wrong, or the job is short + idempotent | Fresh execution, empty journal — every step runs again |
|
|
681
|
+
| `resume` | The run is `suspended` (you set `suspendOnFailure: true`, or it awaits a signal) | Continues from the failure/suspend point — completed steps replay |
|
|
682
|
+
| `redrive` | The run is `failed` (dead-letter) and re-running earlier steps is expensive/unsafe | Continues from the failure point — completed steps replay, failed steps re-run |
|
|
683
|
+
|
|
684
|
+
`redrive` refuses a run that isn't a not-yet-discarded failure (use `resume` for a suspended run, `retry` for a fresh execution), and it needs a durable journal — on the memory store there is nothing to re-drive, so it declines cleanly (`redriven: false` with a reason) rather than pretending. It works under `voltro serve` as well as `voltro dev`, because dead-letter recovery happens in production. A re-drive records a `run-redriven` event on the run's timeline.
|
|
685
|
+
|
|
607
686
|
## Compensation
|
|
608
687
|
|
|
609
688
|
For saga-style workflows, model compensation explicitly with `Effect.catchAll` around the step that can fail after an earlier side effect:
|
|
@@ -664,7 +743,7 @@ The dashboard and `voltro workflows show <runId>` read these same tables through
|
|
|
664
743
|
|
|
665
744
|
- **Catching errors and returning success.** Operators lose the failed run.
|
|
666
745
|
- **Retrying non-idempotent side effects.** Double charges and duplicate emails are workflow bugs, not retry bugs.
|
|
667
|
-
- **
|
|
746
|
+
- **Declaring `retry:` on a step you ALSO wrap in `Effect.retry` / `stepModule.retry`.** `retry:` is enforced now — the step would retry twice. Keep one.
|
|
668
747
|
- **Expecting a DLQ table.** The current triage surface is failed runs plus retry controls.
|
|
669
748
|
|
|
670
749
|
|
|
@@ -1181,12 +1260,22 @@ Voltro records workflow runs, step attempts, and lifecycle events into framework
|
|
|
1181
1260
|
| `_voltro_workflow_start_contexts` | One row per started execution id: starter subject, trace id, source, parent execution id, parent-close policy, and creation time. Used for cross-runner context handoff. |
|
|
1182
1261
|
| `_voltro_workflow_runs` | One row per run: `id`, `tag`, `executionId`, `status`, `payload`, `workflowVersion`, `workflowPatches`, `output`, error fields, subject, start source, timing, trace id, parent execution id, parent-close policy. |
|
|
1183
1262
|
| `_voltro_workflow_run_steps` | One row per step attempt: step name, attempt number, recorded input, retry metadata, output or error, duration. |
|
|
1184
|
-
| `_voltro_workflow_run_events` | Lifecycle events: `run-started`, `run-succeeded`, `run-failed`, `run-suspended`, `run-resumed`, `run-cancelled`, `timer-set`, `timer-fired`, `signal-awaited`, `signal-sent`, `signal-received`, `update-requested`, `update-received`, `update-completed`, `update-failed`. |
|
|
1263
|
+
| `_voltro_workflow_run_events` | Lifecycle events: `run-started`, `run-succeeded`, `run-failed`, `run-suspended`, `run-resumed`, `run-redriven`, `run-cancelled`, `timer-set`, `timer-fired`, `signal-awaited`, `signal-sent`, `signal-received`, `update-requested`, `update-received`, `update-completed`, `update-failed`. |
|
|
1185
1264
|
| `_voltro_workflow_events` | Domain events emitted through `ctx.events.publish(...)`: event id, name, payload, source, subject, trace id, occurred time. |
|
|
1186
1265
|
| `_voltro_workflow_event_deliveries` | One row per workflow trigger delivery: event id, trigger id, workflow name, execution id, idempotency key, status, error. |
|
|
1187
1266
|
|
|
1188
1267
|
Run status is `running`, `succeeded`, `failed`, `cancelled`, or `suspended`.
|
|
1189
1268
|
|
|
1269
|
+
## Dead-letter: triaging failed runs
|
|
1270
|
+
|
|
1271
|
+
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.
|
|
1272
|
+
|
|
1273
|
+
Triage a dead-letter run one of three ways:
|
|
1274
|
+
|
|
1275
|
+
- **Retry** it — `voltro workflows retry <id>` starts a fresh execution against the original (or an overridden) payload once you've fixed the cause. Every step runs again from scratch.
|
|
1276
|
+
- **Re-drive** it — `voltro workflows redrive <id>` re-drives the run from its durable journal: completed steps replay, only the failed step(s) re-execute. Use this instead of `retry` for a long pipeline where redoing steps 1…N‑1 is expensive or unsafe. It is the after-the-fact counterpart to [`suspendOnFailure` + `resume`](/docs/workflows/retries) and works under `voltro serve` too. Refuses a non-failed / already-discarded run; declines cleanly when there is no durable journal (the memory store). Records a `run-redriven` event.
|
|
1277
|
+
- **Discard** it — `voltro workflows discard <id>` acknowledges the failure so it drops off the `--dead-letter` view. It is an **ack, not a re-classification**: the run stays `status: 'failed'` (the outcome + audit trail survive) and gains a `discardedAt` timestamp. `--status failed` still lists it, marked `discarded`; only `--dead-letter` hides it. Discarding a non-failed run is refused, and discarding is idempotent.
|
|
1278
|
+
|
|
1190
1279
|
## Dashboard
|
|
1191
1280
|
|
|
1192
1281
|
When `voltro dev` is running, the Workflows panel lists recent runs, their status, start source, timing, payload, output/error, step attempts, and events. The run detail view is the fastest way to answer:
|
|
@@ -1199,7 +1288,7 @@ When `voltro dev` is running, the Workflows panel lists recent runs, their statu
|
|
|
1199
1288
|
- What output or typed error did it produce?
|
|
1200
1289
|
- Did a timer or signal fire?
|
|
1201
1290
|
|
|
1202
|
-
The panel also exposes run controls for users with the right capability: cancel, retry, suspend, resume, send signal, and send a tracked update.
|
|
1291
|
+
The panel also exposes run controls for users with the right capability: cancel, retry, suspend, resume, redrive (re-drive a failed run from its journal), discard (acknowledge a failed run), send signal, and send a tracked update.
|
|
1203
1292
|
|
|
1204
1293
|
Run filters can be saved as named views. The selected view and ad-hoc
|
|
1205
1294
|
filters are mirrored into the URL query string, so a teammate can open the
|
|
@@ -1213,12 +1302,15 @@ queued/running/waiting work by workflow lane and start source.
|
|
|
1213
1302
|
```sh
|
|
1214
1303
|
voltro workflows list --status running --tail 50
|
|
1215
1304
|
voltro workflows list --tag notes.summarise --format json
|
|
1305
|
+
voltro workflows list --dead-letter # failed runs not yet discarded
|
|
1216
1306
|
voltro workflows start notes.summarise --payload '{"noteId":"note_123"}'
|
|
1217
1307
|
voltro workflows show wfrun_01H...
|
|
1218
1308
|
voltro workflows retry wfrun_01H...
|
|
1219
1309
|
voltro workflows cancel wfrun_01H...
|
|
1220
1310
|
voltro workflows suspend wfrun_01H...
|
|
1221
1311
|
voltro workflows resume wfrun_01H...
|
|
1312
|
+
voltro workflows redrive wfrun_01H... # re-drive a failed run from where it died
|
|
1313
|
+
voltro workflows discard wfrun_01H... # acknowledge a failed run
|
|
1222
1314
|
voltro workflows signal wfrun_01H... --name approval --payload '{"approved":true}'
|
|
1223
1315
|
voltro workflows update wfrun_01H... --name approve --payload '{"decision":true}'
|
|
1224
1316
|
voltro workflows children exec_01H...
|
|
@@ -1241,6 +1333,8 @@ POST /_voltro/inspect/workflows/runs/:id/cancel
|
|
|
1241
1333
|
POST /_voltro/inspect/workflows/runs/:id/retry
|
|
1242
1334
|
POST /_voltro/inspect/workflows/runs/:id/suspend
|
|
1243
1335
|
POST /_voltro/inspect/workflows/runs/:id/resume
|
|
1336
|
+
POST /_voltro/inspect/workflows/runs/:id/redrive
|
|
1337
|
+
POST /_voltro/inspect/workflows/runs/:id/discard
|
|
1244
1338
|
POST /_voltro/inspect/workflows/runs/:id/signal
|
|
1245
1339
|
POST /_voltro/inspect/workflows/runs/:id/update
|
|
1246
1340
|
```
|
|
@@ -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.
|
|
16
|
-
"@voltro/cli": "0.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/protocol": "0.
|
|
20
|
-
"@voltro/runtime": "0.
|
|
15
|
+
"@voltro/ai": "0.27.0",
|
|
16
|
+
"@voltro/cli": "0.27.0",
|
|
17
|
+
"@voltro/database": "0.27.0",
|
|
18
|
+
"@voltro/env": "0.27.0",
|
|
19
|
+
"@voltro/protocol": "0.27.0",
|
|
20
|
+
"@voltro/runtime": "0.27.0",
|
|
21
21
|
"effect": "^3.22.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@voltro/testing": "0.
|
|
24
|
+
"@voltro/testing": "0.27.0",
|
|
25
25
|
"typescript": "^6.0.3",
|
|
26
26
|
"vitest": "^4.1.10"
|
|
27
27
|
}
|
|
@@ -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.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/plugin-auth": "0.
|
|
20
|
-
"@voltro/protocol": "0.
|
|
21
|
-
"@voltro/runtime": "0.
|
|
22
|
-
"@voltro/sql-postgres": "0.
|
|
16
|
+
"@voltro/cli": "0.27.0",
|
|
17
|
+
"@voltro/database": "0.27.0",
|
|
18
|
+
"@voltro/env": "0.27.0",
|
|
19
|
+
"@voltro/plugin-auth": "0.27.0",
|
|
20
|
+
"@voltro/protocol": "0.27.0",
|
|
21
|
+
"@voltro/runtime": "0.27.0",
|
|
22
|
+
"@voltro/sql-postgres": "0.27.0",
|
|
23
23
|
"effect": "^3.22.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@voltro/testing": "0.
|
|
26
|
+
"@voltro/testing": "0.27.0",
|
|
27
27
|
"typescript": "^6.0.3",
|
|
28
28
|
"vitest": "^4.1.10"
|
|
29
29
|
}
|
|
@@ -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.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/plugin-multitenancy": "0.
|
|
20
|
-
"@voltro/protocol": "0.
|
|
21
|
-
"@voltro/runtime": "0.
|
|
16
|
+
"@voltro/cli": "0.27.0",
|
|
17
|
+
"@voltro/database": "0.27.0",
|
|
18
|
+
"@voltro/env": "0.27.0",
|
|
19
|
+
"@voltro/plugin-multitenancy": "0.27.0",
|
|
20
|
+
"@voltro/protocol": "0.27.0",
|
|
21
|
+
"@voltro/runtime": "0.27.0",
|
|
22
22
|
"effect": "^3.22.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/testing": "0.
|
|
25
|
+
"@voltro/testing": "0.27.0",
|
|
26
26
|
"typescript": "^6.0.3",
|
|
27
27
|
"vitest": "^4.1.10"
|
|
28
28
|
}
|
|
@@ -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.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/plugin-deactivation": "0.
|
|
20
|
-
"@voltro/protocol": "0.
|
|
21
|
-
"@voltro/runtime": "0.
|
|
16
|
+
"@voltro/cli": "0.27.0",
|
|
17
|
+
"@voltro/database": "0.27.0",
|
|
18
|
+
"@voltro/env": "0.27.0",
|
|
19
|
+
"@voltro/plugin-deactivation": "0.27.0",
|
|
20
|
+
"@voltro/protocol": "0.27.0",
|
|
21
|
+
"@voltro/runtime": "0.27.0",
|
|
22
22
|
"effect": "^3.22.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/testing": "0.
|
|
25
|
+
"@voltro/testing": "0.27.0",
|
|
26
26
|
"typescript": "^6.0.3",
|
|
27
27
|
"vitest": "^4.1.10"
|
|
28
28
|
}
|
|
@@ -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.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/plugin-mail": "0.
|
|
20
|
-
"@voltro/plugin-multitenancy": "0.
|
|
21
|
-
"@voltro/protocol": "0.
|
|
22
|
-
"@voltro/runtime": "0.
|
|
16
|
+
"@voltro/cli": "0.27.0",
|
|
17
|
+
"@voltro/database": "0.27.0",
|
|
18
|
+
"@voltro/env": "0.27.0",
|
|
19
|
+
"@voltro/plugin-mail": "0.27.0",
|
|
20
|
+
"@voltro/plugin-multitenancy": "0.27.0",
|
|
21
|
+
"@voltro/protocol": "0.27.0",
|
|
22
|
+
"@voltro/runtime": "0.27.0",
|
|
23
23
|
"effect": "^3.22.0",
|
|
24
24
|
"react": "^19.0.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@voltro/testing": "0.
|
|
27
|
+
"@voltro/testing": "0.27.0",
|
|
28
28
|
"typescript": "^6.0.3",
|
|
29
29
|
"vitest": "^4.1.10"
|
|
30
30
|
}
|
|
@@ -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.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/plugin-multitenancy": "0.
|
|
20
|
-
"@voltro/plugin-storage": "0.
|
|
21
|
-
"@voltro/protocol": "0.
|
|
22
|
-
"@voltro/runtime": "0.
|
|
23
|
-
"@voltro/sql-mysql": "0.
|
|
16
|
+
"@voltro/cli": "0.27.0",
|
|
17
|
+
"@voltro/database": "0.27.0",
|
|
18
|
+
"@voltro/env": "0.27.0",
|
|
19
|
+
"@voltro/plugin-multitenancy": "0.27.0",
|
|
20
|
+
"@voltro/plugin-storage": "0.27.0",
|
|
21
|
+
"@voltro/protocol": "0.27.0",
|
|
22
|
+
"@voltro/runtime": "0.27.0",
|
|
23
|
+
"@voltro/sql-mysql": "0.27.0",
|
|
24
24
|
"effect": "^3.22.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@voltro/testing": "0.
|
|
27
|
+
"@voltro/testing": "0.27.0",
|
|
28
28
|
"typescript": "^6.0.3",
|
|
29
29
|
"vitest": "^4.1.10"
|
|
30
30
|
}
|
|
@@ -11,17 +11,17 @@
|
|
|
11
11
|
"test": "voltro test"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@voltro/cli": "0.
|
|
15
|
-
"@voltro/database": "0.
|
|
16
|
-
"@voltro/env": "0.
|
|
17
|
-
"@voltro/plugin-multitenancy": "0.
|
|
18
|
-
"@voltro/plugin-storage": "0.
|
|
19
|
-
"@voltro/protocol": "0.
|
|
20
|
-
"@voltro/runtime": "0.
|
|
14
|
+
"@voltro/cli": "0.27.0",
|
|
15
|
+
"@voltro/database": "0.27.0",
|
|
16
|
+
"@voltro/env": "0.27.0",
|
|
17
|
+
"@voltro/plugin-multitenancy": "0.27.0",
|
|
18
|
+
"@voltro/plugin-storage": "0.27.0",
|
|
19
|
+
"@voltro/protocol": "0.27.0",
|
|
20
|
+
"@voltro/runtime": "0.27.0",
|
|
21
21
|
"effect": "^3.22.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@voltro/testing": "0.
|
|
24
|
+
"@voltro/testing": "0.27.0",
|
|
25
25
|
"typescript": "^6.0.3",
|
|
26
26
|
"vitest": "^4.1.10"
|
|
27
27
|
}
|
|
@@ -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.
|
|
16
|
-
"@voltro/database": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/plugin-governance": "0.
|
|
19
|
-
"@voltro/plugin-multitenancy": "0.
|
|
20
|
-
"@voltro/protocol": "0.
|
|
21
|
-
"@voltro/runtime": "0.
|
|
15
|
+
"@voltro/cli": "0.27.0",
|
|
16
|
+
"@voltro/database": "0.27.0",
|
|
17
|
+
"@voltro/env": "0.27.0",
|
|
18
|
+
"@voltro/plugin-governance": "0.27.0",
|
|
19
|
+
"@voltro/plugin-multitenancy": "0.27.0",
|
|
20
|
+
"@voltro/protocol": "0.27.0",
|
|
21
|
+
"@voltro/runtime": "0.27.0",
|
|
22
22
|
"effect": "^3.22.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/testing": "0.
|
|
25
|
+
"@voltro/testing": "0.27.0",
|
|
26
26
|
"typescript": "^6.0.3",
|
|
27
27
|
"vitest": "^4.1.10"
|
|
28
28
|
}
|
|
@@ -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.
|
|
16
|
-
"@voltro/database": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/plugin-multitenancy": "0.
|
|
19
|
-
"@voltro/protocol": "0.
|
|
20
|
-
"@voltro/runtime": "0.
|
|
21
|
-
"@voltro/workflow": "0.
|
|
15
|
+
"@voltro/cli": "0.27.0",
|
|
16
|
+
"@voltro/database": "0.27.0",
|
|
17
|
+
"@voltro/env": "0.27.0",
|
|
18
|
+
"@voltro/plugin-multitenancy": "0.27.0",
|
|
19
|
+
"@voltro/protocol": "0.27.0",
|
|
20
|
+
"@voltro/runtime": "0.27.0",
|
|
21
|
+
"@voltro/workflow": "0.27.0",
|
|
22
22
|
"effect": "^3.22.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/testing": "0.
|
|
25
|
+
"@voltro/testing": "0.27.0",
|
|
26
26
|
"typescript": "^6.0.3",
|
|
27
27
|
"vitest": "^4.1.10"
|
|
28
28
|
}
|
|
@@ -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.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/plugin-flags": "0.
|
|
20
|
-
"@voltro/plugin-multitenancy": "0.
|
|
21
|
-
"@voltro/protocol": "0.
|
|
22
|
-
"@voltro/runtime": "0.
|
|
23
|
-
"@voltro/sql-postgres": "0.
|
|
16
|
+
"@voltro/cli": "0.27.0",
|
|
17
|
+
"@voltro/database": "0.27.0",
|
|
18
|
+
"@voltro/env": "0.27.0",
|
|
19
|
+
"@voltro/plugin-flags": "0.27.0",
|
|
20
|
+
"@voltro/plugin-multitenancy": "0.27.0",
|
|
21
|
+
"@voltro/protocol": "0.27.0",
|
|
22
|
+
"@voltro/runtime": "0.27.0",
|
|
23
|
+
"@voltro/sql-postgres": "0.27.0",
|
|
24
24
|
"effect": "^3.22.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@voltro/testing": "0.
|
|
27
|
+
"@voltro/testing": "0.27.0",
|
|
28
28
|
"typescript": "^6.0.3",
|
|
29
29
|
"vitest": "^4.1.10"
|
|
30
30
|
}
|
|
@@ -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.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/plugin-audit": "0.
|
|
20
|
-
"@voltro/plugin-governance": "0.
|
|
21
|
-
"@voltro/protocol": "0.
|
|
22
|
-
"@voltro/runtime": "0.
|
|
16
|
+
"@voltro/cli": "0.27.0",
|
|
17
|
+
"@voltro/database": "0.27.0",
|
|
18
|
+
"@voltro/env": "0.27.0",
|
|
19
|
+
"@voltro/plugin-audit": "0.27.0",
|
|
20
|
+
"@voltro/plugin-governance": "0.27.0",
|
|
21
|
+
"@voltro/protocol": "0.27.0",
|
|
22
|
+
"@voltro/runtime": "0.27.0",
|
|
23
23
|
"effect": "^3.22.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@voltro/testing": "0.
|
|
26
|
+
"@voltro/testing": "0.27.0",
|
|
27
27
|
"typescript": "^6.0.3",
|
|
28
28
|
"vitest": "^4.1.10"
|
|
29
29
|
}
|
|
@@ -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.
|
|
16
|
-
"@voltro/database": "0.
|
|
17
|
-
"@voltro/env": "0.
|
|
18
|
-
"@voltro/kv": "0.
|
|
19
|
-
"@voltro/plugin-multitenancy": "0.
|
|
20
|
-
"@voltro/protocol": "0.
|
|
21
|
-
"@voltro/runtime": "0.
|
|
15
|
+
"@voltro/cli": "0.27.0",
|
|
16
|
+
"@voltro/database": "0.27.0",
|
|
17
|
+
"@voltro/env": "0.27.0",
|
|
18
|
+
"@voltro/kv": "0.27.0",
|
|
19
|
+
"@voltro/plugin-multitenancy": "0.27.0",
|
|
20
|
+
"@voltro/protocol": "0.27.0",
|
|
21
|
+
"@voltro/runtime": "0.27.0",
|
|
22
22
|
"effect": "^3.22.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@voltro/testing": "0.
|
|
25
|
+
"@voltro/testing": "0.27.0",
|
|
26
26
|
"typescript": "^6.0.3",
|
|
27
27
|
"vitest": "^4.1.10"
|
|
28
28
|
}
|
|
@@ -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.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/plugin-moderation": "0.
|
|
20
|
-
"@voltro/plugin-multitenancy": "0.
|
|
21
|
-
"@voltro/protocol": "0.
|
|
22
|
-
"@voltro/runtime": "0.
|
|
16
|
+
"@voltro/cli": "0.27.0",
|
|
17
|
+
"@voltro/database": "0.27.0",
|
|
18
|
+
"@voltro/env": "0.27.0",
|
|
19
|
+
"@voltro/plugin-moderation": "0.27.0",
|
|
20
|
+
"@voltro/plugin-multitenancy": "0.27.0",
|
|
21
|
+
"@voltro/protocol": "0.27.0",
|
|
22
|
+
"@voltro/runtime": "0.27.0",
|
|
23
23
|
"effect": "^3.22.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@voltro/testing": "0.
|
|
26
|
+
"@voltro/testing": "0.27.0",
|
|
27
27
|
"typescript": "^6.0.3",
|
|
28
28
|
"vitest": "^4.1.10"
|
|
29
29
|
}
|
|
@@ -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.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/plugin-multitenancy": "0.
|
|
19
|
-
"@voltro/plugin-prometheus": "0.
|
|
20
|
-
"@voltro/plugin-sentry": "0.
|
|
21
|
-
"@voltro/protocol": "0.
|
|
22
|
-
"@voltro/runtime": "0.
|
|
16
|
+
"@voltro/cli": "0.27.0",
|
|
17
|
+
"@voltro/database": "0.27.0",
|
|
18
|
+
"@voltro/plugin-multitenancy": "0.27.0",
|
|
19
|
+
"@voltro/plugin-prometheus": "0.27.0",
|
|
20
|
+
"@voltro/plugin-sentry": "0.27.0",
|
|
21
|
+
"@voltro/protocol": "0.27.0",
|
|
22
|
+
"@voltro/runtime": "0.27.0",
|
|
23
23
|
"effect": "^3.22.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@voltro/testing": "0.
|
|
26
|
+
"@voltro/testing": "0.27.0",
|
|
27
27
|
"typescript": "^6.0.3",
|
|
28
28
|
"vitest": "^4.1.10"
|
|
29
29
|
}
|
|
@@ -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.
|
|
17
|
-
"@voltro/database": "0.
|
|
18
|
-
"@voltro/env": "0.
|
|
19
|
-
"@voltro/plugin-multitenancy": "0.
|
|
20
|
-
"@voltro/plugin-ratelimit": "0.
|
|
21
|
-
"@voltro/protocol": "0.
|
|
22
|
-
"@voltro/runtime": "0.
|
|
16
|
+
"@voltro/cli": "0.27.0",
|
|
17
|
+
"@voltro/database": "0.27.0",
|
|
18
|
+
"@voltro/env": "0.27.0",
|
|
19
|
+
"@voltro/plugin-multitenancy": "0.27.0",
|
|
20
|
+
"@voltro/plugin-ratelimit": "0.27.0",
|
|
21
|
+
"@voltro/protocol": "0.27.0",
|
|
22
|
+
"@voltro/runtime": "0.27.0",
|
|
23
23
|
"effect": "^3.22.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@voltro/testing": "0.
|
|
26
|
+
"@voltro/testing": "0.27.0",
|
|
27
27
|
"typescript": "^6.0.3",
|
|
28
28
|
"vitest": "^4.1.10"
|
|
29
29
|
}
|