okengine 0.2.6 → 0.3.2
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/AGENTS.md +33 -30
- package/README.md +74 -340
- package/{spec/manifest.v1.schema.json → manifest.v1.schema.json} +40 -9
- package/package.json +47 -44
- package/site/content/docs/ai/llms-txt.mdx +54 -0
- package/site/content/docs/ai/mcp.mdx +123 -0
- package/site/content/docs/ai/meta.json +5 -0
- package/site/content/docs/ai/skills.mdx +53 -0
- package/site/content/docs/console/access.mdx +29 -0
- package/site/content/docs/console/ai.mdx +35 -0
- package/site/content/docs/console/architecture.mdx +35 -0
- package/site/content/docs/console/channels.mdx +37 -0
- package/site/content/docs/console/clock.mdx +31 -0
- package/site/content/docs/console/flows.mdx +31 -0
- package/site/content/docs/console/gates.mdx +35 -0
- package/site/content/docs/console/manifest-diff.mdx +34 -0
- package/site/content/docs/console/meta.json +23 -0
- package/site/content/docs/console/overview.mdx +40 -0
- package/site/content/docs/console/plugins.mdx +41 -0
- package/site/content/docs/console/privacy.mdx +32 -0
- package/site/content/docs/console/runs.mdx +40 -0
- package/site/content/docs/console/signals.mdx +31 -0
- package/site/content/docs/console/store.mdx +32 -0
- package/site/content/docs/console/tenancy.mdx +32 -0
- package/site/content/docs/console/traces.mdx +34 -0
- package/site/content/docs/console/vault.mdx +37 -0
- package/site/content/docs/elements/ai.mdx +180 -0
- package/site/content/docs/elements/channel.mdx +167 -0
- package/site/content/docs/elements/clock.mdx +182 -0
- package/site/content/docs/elements/flow.mdx +288 -0
- package/site/content/docs/elements/gate.mdx +171 -0
- package/site/content/docs/elements/meta.json +5 -0
- package/site/content/docs/elements/signal.mdx +171 -0
- package/site/content/docs/elements/store.mdx +320 -0
- package/site/content/docs/elements/vault.mdx +263 -0
- package/site/content/docs/get-started/basic-usage.mdx +124 -0
- package/site/content/docs/get-started/comparison.mdx +65 -0
- package/site/content/docs/get-started/installation.mdx +113 -0
- package/site/content/docs/get-started/introduction.mdx +123 -0
- package/site/content/docs/get-started/meta.json +5 -0
- package/site/content/docs/index.mdx +63 -0
- package/site/content/docs/meta.json +5 -0
- package/site/content/docs/plugins/compression.mdx +60 -0
- package/site/content/docs/plugins/cors.mdx +92 -0
- package/site/content/docs/plugins/csrf.mdx +96 -0
- package/site/content/docs/plugins/ip-allowlist.mdx +92 -0
- package/site/content/docs/plugins/maintenance-mode.mdx +101 -0
- package/site/content/docs/plugins/meta.json +15 -0
- package/site/content/docs/plugins/security-headers.mdx +136 -0
- package/site/content/docs/reference/cli.md +101 -0
- package/site/content/docs/reference/configuration.mdx +159 -0
- package/site/content/docs/reference/environment-variables.mdx +87 -0
- package/site/content/docs/reference/errors.mdx +80 -0
- package/site/content/docs/reference/fx.mdx +117 -0
- package/site/content/docs/reference/meta.json +5 -0
- package/site/content/docs/reference/plugins.mdx +249 -0
- package/site/content/docs/reference/security.md +63 -0
- package/src/auth/api-keys.ts +2 -5
- package/src/auth/attenuation.ts +2 -6
- package/src/auth/auth.test.ts +56 -31
- package/src/auth/invoke-as.ts +1 -3
- package/src/auth/operator.ts +8 -26
- package/src/auth/planes.ts +2 -7
- package/src/auth/plugin.ts +4 -7
- package/src/auth/roles.ts +1 -5
- package/src/auth/sessions.ts +10 -39
- package/src/cli/args.ts +1 -5
- package/src/cli/ask-dev-mode.ts +40 -0
- package/src/cli/build.ts +1 -2
- package/src/cli/client-add.test.ts +8 -15
- package/src/cli/client-add.ts +5 -14
- package/src/cli/completion.test.ts +1 -5
- package/src/cli/completion.ts +4 -17
- package/src/cli/db-auto-push.test.ts +64 -0
- package/src/cli/db-auto-push.ts +72 -0
- package/src/cli/db.test.ts +189 -0
- package/src/cli/db.ts +456 -0
- package/src/cli/dev-app-runner.ts +2 -8
- package/src/cli/dev-db-push.test.ts +193 -0
- package/src/cli/dev-mode.test.ts +45 -0
- package/src/cli/dev-mode.ts +78 -0
- package/src/cli/dev-schema-sync.test.ts +66 -0
- package/src/cli/dev-schema-sync.ts +139 -0
- package/src/cli/dev.test.ts +264 -15
- package/src/cli/dev.ts +355 -139
- package/src/cli/doc-staleness.test.ts +69 -0
- package/src/cli/docker-cli.test.ts +27 -8
- package/src/cli/docker.ts +11 -3
- package/src/cli/doctor-diff.test.ts +1 -5
- package/src/cli/doctor-diff.ts +17 -46
- package/src/cli/doctor-pii.ts +2 -7
- package/src/cli/doctor.test.ts +26 -4
- package/src/cli/doctor.ts +35 -11
- package/src/cli/drizzle-env.test.ts +67 -0
- package/src/cli/drizzle-env.ts +78 -0
- package/src/cli/ensure-drizzle-config.ts +50 -0
- package/src/cli/eval.ts +4 -14
- package/src/cli/gates-list.ts +1 -4
- package/src/cli/hero-meta.test.ts +17 -19
- package/src/cli/hero-meta.ts +20 -30
- package/src/cli/images.ts +3 -8
- package/src/cli/index.ts +11 -2
- package/src/cli/load-config.images.test.ts +14 -14
- package/src/cli/load-config.ts +47 -47
- package/src/cli/mcp-from-console.ts +1 -4
- package/src/cli/mode.ts +65 -0
- package/src/cli/openbao-bootstrap.test.ts +147 -0
- package/src/cli/openbao-bootstrap.ts +280 -0
- package/src/cli/openbao-restart.integration.test.ts +136 -0
- package/src/cli/ports.test.ts +7 -14
- package/src/cli/ports.ts +7 -5
- package/src/cli/privacy-erase.ts +1 -3
- package/src/cli/registry.ts +75 -25
- package/src/cli/resolve-dev-sql-env.test.ts +48 -0
- package/src/cli/resolve-dev-sql-env.ts +42 -0
- package/src/cli/schema.ts +3 -10
- package/src/cli/stack.ts +8 -10
- package/src/cli/start.ts +4 -15
- package/src/cli/upgrade.ts +1 -4
- package/src/cli/vault-cmd.ts +63 -0
- package/src/client/budget-entry.ts +1 -6
- package/src/client/create.test.ts +6 -12
- package/src/client/create.ts +2 -8
- package/src/client/errors.ts +1 -4
- package/src/client/index.ts +1 -6
- package/src/client/notes-contract.test.ts +4 -13
- package/src/client/transport.ts +9 -30
- package/src/client/types.ts +15 -30
- package/src/compiler/aot.test.ts +2 -9
- package/src/compiler/aot.ts +1 -4
- package/src/compiler/differential.test.ts +3 -11
- package/src/compiler/dynamic.ts +1 -4
- package/src/compiler/effects-infer.ts +8 -34
- package/src/compiler/emit.ts +1 -3
- package/src/compiler/extract.test.ts +136 -30
- package/src/compiler/extract.ts +485 -157
- package/src/compiler/fixtures/skyport/oke.config.ts +3 -3
- package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +7 -3
- package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -3
- package/src/compiler/fixtures/skyport/src/flows/support/index.ts +4 -1
- package/src/compiler/fixtures/skyport.expected.json +24 -83
- package/src/compiler/fixtures/triggers/five-triggers.ts +1 -2
- package/src/compiler/http-parse.ts +2 -9
- package/src/compiler/index.ts +1 -5
- package/src/compiler/response.ts +16 -7
- package/src/compiler/sucrose.ts +11 -31
- package/src/config/define-config.test.ts +55 -34
- package/src/config/index.ts +177 -46
- package/src/config/resolve-driver.test.ts +28 -17
- package/src/console/budget.test.ts +1 -4
- package/src/console/index.ts +1 -4
- package/src/console/server/access.test.ts +15 -43
- package/src/console/server/access.ts +19 -49
- package/src/console/server/ai.test.ts +3 -11
- package/src/console/server/ai.ts +23 -46
- package/src/console/server/app.ts +16 -45
- package/src/console/server/auth-rate.test.ts +4 -12
- package/src/console/server/bind.ts +1 -5
- package/src/console/server/channels.test.ts +2 -6
- package/src/console/server/channels.ts +10 -35
- package/src/console/server/claim.ts +2 -8
- package/src/console/server/clock.test.ts +2 -6
- package/src/console/server/clock.ts +8 -26
- package/src/console/server/console.test.ts +1 -3
- package/src/console/server/diff.test.ts +5 -17
- package/src/console/server/diff.ts +10 -31
- package/src/console/server/dry-run.audit.test.ts +2 -8
- package/src/console/server/flows.ts +64 -233
- package/src/console/server/gates.test.ts +14 -50
- package/src/console/server/gates.ts +13 -48
- package/src/console/server/index.ts +2 -9
- package/src/console/server/live.ts +3 -12
- package/src/console/server/operator-db.test.ts +4 -15
- package/src/console/server/operator-db.ts +13 -32
- package/src/console/server/plugin.ts +50 -53
- package/src/console/server/plugins.test.ts +2 -6
- package/src/console/server/plugins.ts +17 -56
- package/src/console/server/runs-pii.ts +2 -7
- package/src/console/server/security.gate.test.ts +18 -40
- package/src/console/server/serve.ts +10 -25
- package/src/console/server/signals.test.ts +1 -3
- package/src/console/server/signals.ts +17 -40
- package/src/console/server/state.ts +21 -59
- package/src/console/server/store.test.ts +20 -22
- package/src/console/server/store.ts +31 -76
- package/src/console/server/vault.test.ts +12 -29
- package/src/console/server/vault.ts +44 -66
- package/src/console/ui/access/AccessA11yView.tsx +6 -21
- package/src/console/ui/access/a11y.test.tsx +3 -12
- package/src/console/ui/access/acknowledgement.test.ts +1 -4
- package/src/console/ui/access/acknowledgement.ts +1 -3
- package/src/console/ui/access/blast-radius.ts +1 -3
- package/src/console/ui/access/confirmation.test.ts +1 -5
- package/src/console/ui/access/confirmation.ts +1 -4
- package/src/console/ui/access/fixture.ts +1 -5
- package/src/console/ui/access/grantable.test.ts +1 -3
- package/src/console/ui/access/grantable.ts +2 -7
- package/src/console/ui/access/index.ts +2 -9
- package/src/console/ui/access/provenance.test.ts +1 -3
- package/src/console/ui/access/provenance.ts +2 -6
- package/src/console/ui/access/search.test.ts +1 -5
- package/src/console/ui/access/search.ts +2 -6
- package/src/console/ui/ai/AiA11yView.tsx +6 -17
- package/src/console/ui/ai/a11y.test.tsx +2 -5
- package/src/console/ui/ai/fixture.ts +2 -7
- package/src/console/ui/ai/format.ts +1 -3
- package/src/console/ui/ai/group.test.ts +1 -3
- package/src/console/ui/ai/group.ts +4 -12
- package/src/console/ui/ai/index.ts +2 -9
- package/src/console/ui/ai/promotion.test.ts +2 -7
- package/src/console/ui/ai/promotion.ts +4 -13
- package/src/console/ui/ai/search.test.ts +2 -11
- package/src/console/ui/ai/search.ts +3 -13
- package/src/console/ui/ai/types.ts +1 -8
- package/src/console/ui/architecture/ArchitectureA11yView.tsx +8 -29
- package/src/console/ui/architecture/a11y.test.tsx +1 -2
- package/src/console/ui/architecture/declared.ts +1 -5
- package/src/console/ui/architecture/index.ts +7 -35
- package/src/console/ui/architecture/layout.ts +1 -3
- package/src/console/ui/architecture/pathologies.ts +10 -19
- package/src/console/ui/architecture/search.ts +6 -15
- package/src/console/ui/architecture/traffic.ts +4 -14
- package/src/console/ui/architecture/types.ts +2 -10
- package/src/console/ui/architecture/view.test.ts +7 -19
- package/src/console/ui/architecture/view.ts +9 -36
- package/src/console/ui/channels/ChannelsA11yView.tsx +4 -13
- package/src/console/ui/channels/a11y.test.tsx +1 -2
- package/src/console/ui/channels/confirmation.test.ts +1 -4
- package/src/console/ui/channels/confirmation.ts +1 -4
- package/src/console/ui/channels/findings.ts +1 -5
- package/src/console/ui/channels/index.ts +2 -8
- package/src/console/ui/channels/locale.test.ts +1 -3
- package/src/console/ui/channels/locale.ts +2 -8
- package/src/console/ui/channels/search.ts +4 -13
- package/src/console/ui/channels/taxonomy.ts +1 -3
- package/src/console/ui/clock/ClockA11yView.tsx +9 -26
- package/src/console/ui/clock/a11y.test.tsx +2 -5
- package/src/console/ui/clock/confirmation.test.ts +1 -3
- package/src/console/ui/clock/confirmation.ts +1 -4
- package/src/console/ui/clock/findings.ts +1 -4
- package/src/console/ui/clock/health.ts +2 -7
- package/src/console/ui/clock/index.ts +2 -10
- package/src/console/ui/clock/search.test.ts +1 -3
- package/src/console/ui/clock/search.ts +2 -6
- package/src/console/ui/clock/timeline.test.ts +1 -3
- package/src/console/ui/clock/waiting-on.test.ts +1 -5
- package/src/console/ui/clock/waiting-on.ts +2 -7
- package/src/console/ui/diff/DiffA11yView.tsx +8 -17
- package/src/console/ui/diff/a11y.test.tsx +2 -5
- package/src/console/ui/diff/group.test.ts +3 -13
- package/src/console/ui/diff/group.ts +2 -8
- package/src/console/ui/diff/index.ts +2 -8
- package/src/console/ui/diff/search.test.ts +1 -5
- package/src/console/ui/diff/search.ts +4 -16
- package/src/console/ui/diff/summary.ts +1 -2
- package/src/console/ui/dist/assets/{index-Dy4jht9P.js → index-BWo8R7NR.js} +2 -2
- package/src/console/ui/dist/assets/{panel-access-Dd37LU2c.js → panel-access-C0J2D-a2.js} +1 -1
- package/src/console/ui/dist/assets/{panel-ai-CC7LR6-J.js → panel-ai-D_m6WQI8.js} +1 -1
- package/src/console/ui/dist/assets/{panel-architecture-B5b3iKCz.js → panel-architecture-CKnXFyUx.js} +1 -1
- package/src/console/ui/dist/assets/{panel-channels-CeNjTKXp.js → panel-channels-BOmQ-onL.js} +1 -1
- package/src/console/ui/dist/assets/{panel-clock-DgFTLoHV.js → panel-clock-giAq0Ccv.js} +1 -1
- package/src/console/ui/dist/assets/{panel-diff-DxehccqB.js → panel-diff-cdonmH8c.js} +1 -1
- package/src/console/ui/dist/assets/{panel-flows-BtrVn-Eg.js → panel-flows-DlCU5zjA.js} +2 -2
- package/src/console/ui/dist/assets/{panel-gates-Z9MKRGdH.js → panel-gates-XclZxWD5.js} +1 -1
- package/src/console/ui/dist/assets/{panel-overview-Dt_AeXgd.js → panel-overview-BznEOTnb.js} +1 -1
- package/src/console/ui/dist/assets/{panel-plugins-DWd0TowH.js → panel-plugins-CcGM1g64.js} +1 -1
- package/src/console/ui/dist/assets/{panel-runs-DGstFHeq.js → panel-runs-CGWNHLR4.js} +1 -1
- package/src/console/ui/dist/assets/{panel-signals-DzEa2Fnt.js → panel-signals-CNywkdak.js} +1 -1
- package/src/console/ui/dist/assets/{panel-store-BJkbNgxx.js → panel-store-KmTbFHMH.js} +1 -1
- package/src/console/ui/dist/assets/{panel-traces-BaRVO3gM.js → panel-traces-DBLx2ilD.js} +1 -1
- package/src/console/ui/dist/assets/panel-vault-CEnFc0dk.js +1 -0
- package/src/console/ui/dist/index.html +1 -1
- package/src/console/ui/flows/FlowsA11yView.tsx +7 -22
- package/src/console/ui/flows/a11y.test.tsx +2 -8
- package/src/console/ui/flows/buffer.test.ts +3 -11
- package/src/console/ui/flows/buffer.ts +4 -11
- package/src/console/ui/flows/confirmation.ts +1 -3
- package/src/console/ui/flows/contract.test.ts +3 -7
- package/src/console/ui/flows/contract.ts +12 -36
- package/src/console/ui/flows/graph.test.ts +3 -11
- package/src/console/ui/flows/graph.ts +5 -15
- package/src/console/ui/flows/index.ts +1 -6
- package/src/console/ui/flows/save-as-test.ts +1 -3
- package/src/console/ui/flows/search.ts +8 -25
- package/src/console/ui/flows/tiers.ts +2 -9
- package/src/console/ui/gates/GatesA11yView.tsx +4 -13
- package/src/console/ui/gates/a11y.test.tsx +2 -5
- package/src/console/ui/gates/audit.ts +1 -3
- package/src/console/ui/gates/denial.test.ts +1 -3
- package/src/console/ui/gates/denial.ts +4 -12
- package/src/console/ui/gates/findings.ts +1 -3
- package/src/console/ui/gates/group.test.ts +3 -3
- package/src/console/ui/gates/group.ts +3 -11
- package/src/console/ui/gates/index.ts +2 -10
- package/src/console/ui/gates/search.ts +3 -10
- package/src/console/ui/overview/OverviewA11yView.tsx +9 -27
- package/src/console/ui/overview/a11y.test.tsx +1 -2
- package/src/console/ui/overview/busiest.ts +1 -3
- package/src/console/ui/overview/compose.ts +1 -13
- package/src/console/ui/overview/cost.ts +34 -38
- package/src/console/ui/overview/fixture.ts +21 -26
- package/src/console/ui/overview/golden.ts +4 -14
- package/src/console/ui/overview/index.ts +2 -9
- package/src/console/ui/overview/rank.test.ts +3 -10
- package/src/console/ui/overview/rank.ts +2 -7
- package/src/console/ui/overview/slo.test.ts +5 -9
- package/src/console/ui/overview/slo.ts +6 -23
- package/src/console/ui/overview/verdict.ts +3 -10
- package/src/console/ui/plugins/PluginsA11yView.tsx +8 -18
- package/src/console/ui/plugins/a11y.test.tsx +1 -2
- package/src/console/ui/plugins/fixture.ts +2 -4
- package/src/console/ui/plugins/group.test.ts +1 -3
- package/src/console/ui/plugins/group.ts +1 -6
- package/src/console/ui/plugins/index.ts +3 -13
- package/src/console/ui/plugins/search.ts +7 -19
- package/src/console/ui/runs/RunsA11yView.tsx +5 -20
- package/src/console/ui/runs/a11y.test.tsx +2 -5
- package/src/console/ui/runs/explain.ts +2 -6
- package/src/console/ui/runs/group.ts +3 -12
- package/src/console/ui/runs/histogram.test.ts +2 -11
- package/src/console/ui/runs/histogram.ts +1 -4
- package/src/console/ui/runs/index.ts +4 -18
- package/src/console/ui/runs/project.ts +2 -6
- package/src/console/ui/runs/query.test.ts +1 -3
- package/src/console/ui/runs/query.ts +12 -35
- package/src/console/ui/runs/search.ts +5 -19
- package/src/console/ui/runs/trace-link.test.ts +2 -6
- package/src/console/ui/runs/trace-link.ts +4 -16
- package/src/console/ui/runs/types.ts +1 -3
- package/src/console/ui/shell/App.tsx +2 -10
- package/src/console/ui/shell/client.ts +22 -115
- package/src/console/ui/shell/components/ui.tsx +1 -4
- package/src/console/ui/shell/layout/Shell.tsx +2 -4
- package/src/console/ui/shell/main.tsx +31 -96
- package/src/console/ui/shell/panels/access/AccessPanel.tsx +34 -98
- package/src/console/ui/shell/panels/ai/AiPanel.tsx +35 -106
- package/src/console/ui/shell/panels/architecture/ArchitecturePanel.tsx +18 -66
- package/src/console/ui/shell/panels/channels/ChannelsPanel.tsx +20 -57
- package/src/console/ui/shell/panels/clock/ClockPanel.tsx +22 -54
- package/src/console/ui/shell/panels/diff/DiffPanel.tsx +20 -61
- package/src/console/ui/shell/panels/flows/ContractEditor.tsx +6 -23
- package/src/console/ui/shell/panels/flows/FlowDrawer.tsx +13 -28
- package/src/console/ui/shell/panels/flows/FlowsPanel.tsx +9 -29
- package/src/console/ui/shell/panels/gates/GatesPanel.tsx +24 -80
- package/src/console/ui/shell/panels/overview/OverviewPanel.tsx +20 -58
- package/src/console/ui/shell/panels/plugins/PluginsPanel.tsx +16 -41
- package/src/console/ui/shell/panels/runs/RunsPanel.tsx +31 -99
- package/src/console/ui/shell/panels/signals/SignalsPanel.tsx +38 -101
- package/src/console/ui/shell/panels/store/StorePanel.tsx +27 -66
- package/src/console/ui/shell/panels/traces/TracesPanel.tsx +28 -89
- package/src/console/ui/shell/panels/vault/VaultPanel.tsx +22 -53
- package/src/console/ui/shell/setup/Wizard.tsx +3 -5
- package/src/console/ui/shell/styles.css +1 -2
- package/src/console/ui/signals/SignalsA11yView.tsx +9 -33
- package/src/console/ui/signals/a11y.test.tsx +2 -5
- package/src/console/ui/signals/confirmation.test.ts +1 -5
- package/src/console/ui/signals/confirmation.ts +2 -6
- package/src/console/ui/signals/dry-run.ts +1 -3
- package/src/console/ui/signals/durable.ts +1 -3
- package/src/console/ui/signals/findings.ts +1 -3
- package/src/console/ui/signals/group.test.ts +2 -8
- package/src/console/ui/signals/group.ts +2 -10
- package/src/console/ui/signals/index.ts +1 -4
- package/src/console/ui/signals/monitor.ts +2 -7
- package/src/console/ui/signals/schema-form.test.ts +3 -14
- package/src/console/ui/signals/schema-form.ts +1 -4
- package/src/console/ui/signals/search.ts +4 -13
- package/src/console/ui/store/StoreA11yView.tsx +3 -9
- package/src/console/ui/store/a11y.test.tsx +2 -5
- package/src/console/ui/store/confirmation.test.ts +1 -3
- package/src/console/ui/store/confirmation.ts +1 -4
- package/src/console/ui/store/dry-run.ts +2 -5
- package/src/console/ui/store/fixture.ts +1 -2
- package/src/console/ui/store/group.test.ts +1 -6
- package/src/console/ui/store/group.ts +1 -4
- package/src/console/ui/store/index.ts +1 -5
- package/src/console/ui/store/search.ts +2 -6
- package/src/console/ui/store/will-not-fire.ts +1 -2
- package/src/console/ui/traces/TracesA11yView.tsx +10 -29
- package/src/console/ui/traces/a11y.test.tsx +1 -2
- package/src/console/ui/traces/chain.test.ts +5 -19
- package/src/console/ui/traces/chain.ts +1 -3
- package/src/console/ui/traces/critical-path.test.ts +1 -3
- package/src/console/ui/traces/critical-path.ts +2 -6
- package/src/console/ui/traces/filter.test.ts +2 -6
- package/src/console/ui/traces/filter.ts +5 -13
- package/src/console/ui/traces/fold.test.ts +4 -12
- package/src/console/ui/traces/fold.ts +1 -3
- package/src/console/ui/traces/mini.ts +1 -3
- package/src/console/ui/traces/replay.test.ts +1 -3
- package/src/console/ui/traces/replay.ts +1 -3
- package/src/console/ui/traces/sampling.ts +1 -4
- package/src/console/ui/traces/search.ts +4 -17
- package/src/console/ui/traces/tier.ts +1 -3
- package/src/console/ui/vault/VaultA11yView.tsx +5 -17
- package/src/console/ui/vault/a11y.test.tsx +1 -2
- package/src/console/ui/vault/blast-radius.ts +1 -3
- package/src/console/ui/vault/confirmation.test.ts +1 -5
- package/src/console/ui/vault/confirmation.ts +1 -4
- package/src/console/ui/vault/dormant.test.ts +1 -4
- package/src/console/ui/vault/export-safe.test.ts +1 -5
- package/src/console/ui/vault/export-safe.ts +1 -4
- package/src/console/ui/vault/fixture.ts +3 -3
- package/src/console/ui/vault/group.ts +1 -2
- package/src/console/ui/vault/index.ts +2 -10
- package/src/console/ui/vault/search.ts +2 -6
- package/src/console/ui/vault/types.ts +1 -1
- package/src/console/xss.gate.test.ts +1 -3
- package/src/docker/compose.ts +215 -27
- package/src/docker/derive.ts +6 -14
- package/src/docker/docker.test.ts +118 -15
- package/src/docker/dockerfile.integration.test.ts +12 -21
- package/src/docker/helpers.ts +5 -4
- package/src/docker/index.ts +9 -6
- package/src/docker/pin.ts +1 -9
- package/src/docker/recipes/index.ts +6 -6
- package/src/docker/recipes/mailpit.ts +22 -0
- package/src/docker/recipes/openbao.ts +47 -0
- package/src/docker/recipes/postgres.ts +17 -6
- package/src/docker/recipes/redis.ts +11 -2
- package/src/docker/recipes/rustfs.ts +32 -0
- package/src/docker/stack-id.test.ts +73 -5
- package/src/docker/stack-id.ts +124 -33
- package/src/docker/stack.integration.test.ts +6 -21
- package/src/docker/stack.ts +36 -4
- package/src/docker/types.ts +16 -4
- package/src/docs-origin.ts +4 -4
- package/src/drivers/ai-anthropic.ts +5 -14
- package/src/drivers/ai-mock.ts +2 -5
- package/src/drivers/ai-openai-compatible.ts +4 -10
- package/src/drivers/ai-providers.test.ts +6 -13
- package/src/drivers/bun-native-completeness.test.ts +6 -15
- package/src/drivers/channel-console.ts +6 -7
- package/src/drivers/channel-fcm.ts +20 -30
- package/src/drivers/channel-resend.ts +1 -3
- package/src/drivers/channel-smtp.ts +2 -6
- package/src/drivers/channel-types.ts +2 -12
- package/src/drivers/channel-unifonic.ts +2 -6
- package/src/drivers/channel-wa-cloud.ts +2 -6
- package/src/drivers/channel-webpush.ts +21 -60
- package/src/drivers/conformance.test.ts +2 -10
- package/src/drivers/conformance.ts +8 -21
- package/src/drivers/drizzle-dialect.test.ts +20 -0
- package/src/drivers/drizzle-dialect.ts +37 -0
- package/src/drivers/fs.ts +2 -8
- package/src/drivers/index.ts +12 -57
- package/src/drivers/memory.ts +287 -75
- package/src/drivers/pgvector.ts +7 -11
- package/src/drivers/postgres.ts +7 -13
- package/src/drivers/redis.ts +13 -37
- package/src/drivers/s3.ts +15 -18
- package/src/drivers/signal-engine.ts +12 -49
- package/src/drivers/signal-memory.ts +2 -8
- package/src/drivers/signal-nats.ts +4 -9
- package/src/drivers/signal-postgres.ts +62 -129
- package/src/drivers/signal-redis.ts +7 -21
- package/src/drivers/signal-types.ts +1 -4
- package/src/drivers/sqlite.ts +3 -12
- package/src/drivers/types.ts +4 -23
- package/src/drivers/vault-driver-removal.test.ts +55 -0
- package/src/drivers/vault-env.ts +2 -6
- package/src/drivers/vault-infisical.ts +1 -5
- package/src/drivers/vault-managed.ts +1 -5
- package/src/drivers/vault-memory.ts +1 -5
- package/src/drivers/vault-openbao.test.ts +97 -0
- package/src/drivers/vault-openbao.ts +103 -40
- package/src/drivers/vault-types.ts +3 -16
- package/src/elements/ai/declare.ts +4 -14
- package/src/elements/ai/eval.ts +2 -6
- package/src/elements/ai/pii.ts +1 -3
- package/src/elements/ai/runtime.ts +12 -50
- package/src/elements/ai/schema.ts +4 -15
- package/src/elements/ai.test.ts +13 -24
- package/src/elements/ai.ts +1 -5
- package/src/elements/channel/consent.ts +3 -12
- package/src/elements/channel/costs.ts +4 -15
- package/src/elements/channel/declare.ts +1 -4
- package/src/elements/channel/email-auth.ts +1 -4
- package/src/elements/channel/locale.ts +2 -10
- package/src/elements/channel/mask.ts +1 -3
- package/src/elements/channel/mime.ts +2 -12
- package/src/elements/channel/outcomes.test.ts +1 -5
- package/src/elements/channel/outcomes.ts +5 -15
- package/src/elements/channel/receipts.ts +2 -7
- package/src/elements/channel/runtime.ts +28 -74
- package/src/elements/channel/suppression.ts +8 -14
- package/src/elements/channel.test.ts +8 -31
- package/src/elements/channel.ts +3 -14
- package/src/elements/clock/actions.ts +6 -18
- package/src/elements/clock/declare.ts +1 -3
- package/src/elements/clock/dst.ts +1 -5
- package/src/elements/clock/durable.ts +4 -16
- package/src/elements/clock/health.ts +2 -7
- package/src/elements/clock/leader.ts +2 -9
- package/src/elements/clock/reconcile.ts +4 -15
- package/src/elements/clock/runtime.ts +2 -5
- package/src/elements/clock/schedule.ts +4 -20
- package/src/elements/clock.test.ts +2 -7
- package/src/elements/clock.ts +5 -23
- package/src/elements/gate/permissions.ts +1 -4
- package/src/elements/gate/runtime.ts +7 -28
- package/src/elements/gate.ts +1 -5
- package/src/elements/index.ts +9 -7
- package/src/elements/signal/declare.ts +2 -7
- package/src/elements/signal/reconcile.test.ts +1 -4
- package/src/elements/signal/runtime.ts +1 -3
- package/src/elements/signal.test.ts +3 -15
- package/src/elements/signal.ts +2 -8
- package/src/elements/store/cache.test.ts +46 -0
- package/src/elements/store/cache.ts +3 -11
- package/src/elements/store/classify.ts +5 -22
- package/src/elements/store/declare.ts +11 -17
- package/src/elements/store/domain-ddl.test.ts +86 -0
- package/src/elements/store/emit-drizzle.ts +363 -0
- package/src/elements/store/files-policy.test.ts +1 -5
- package/src/elements/store/files-policy.ts +4 -12
- package/src/elements/store/load-plugin-tables.ts +103 -0
- package/src/elements/store/missing-relation.test.ts +83 -0
- package/src/elements/store/missing-relation.ts +38 -0
- package/src/elements/store/replica.ts +1 -4
- package/src/elements/store/resource-list-docs.fixture.ts +56 -0
- package/src/elements/store/resource-list-docs.test.ts +79 -0
- package/src/elements/store/resource.test.ts +253 -0
- package/src/elements/store/resource.ts +786 -0
- package/src/elements/store/runtime.ts +25 -28
- package/src/elements/store/schema-decl.test.ts +227 -0
- package/src/elements/store/schema-decl.ts +516 -0
- package/src/elements/store/sql-condition.test.ts +132 -0
- package/src/elements/store/sql-condition.ts +293 -65
- package/src/elements/store/sql-session.test.ts +135 -0
- package/src/elements/store/sql-session.ts +241 -84
- package/src/elements/store/table.ts +69 -23
- package/src/elements/store.test.ts +17 -39
- package/src/elements/store.ts +53 -31
- package/src/elements/vault/chain.ts +34 -0
- package/src/elements/vault/declare.ts +22 -32
- package/src/elements/vault/fingerprint.ts +2 -7
- package/src/elements/vault/redact.ts +2 -6
- package/src/elements/vault/runtime.ts +19 -33
- package/src/elements/vault.test.ts +12 -55
- package/src/elements/vault.ts +9 -13
- package/src/index.ts +5 -2
- package/src/kernel/adopt-routes.ts +15 -29
- package/src/kernel/app.ts +92 -118
- package/src/kernel/auth-resolve.ts +2 -9
- package/src/kernel/boot-bind/ai.ts +1 -4
- package/src/kernel/boot-bind/channel.test.ts +60 -0
- package/src/kernel/boot-bind/channel.ts +61 -5
- package/src/kernel/boot-bind/clock.ts +2 -6
- package/src/kernel/boot-bind/gate.ts +2 -8
- package/src/kernel/boot-bind/runs.ts +1 -3
- package/src/kernel/boot-bind/signal.ts +3 -10
- package/src/kernel/boot-bind/store.test.ts +27 -18
- package/src/kernel/boot-bind/store.ts +93 -52
- package/src/kernel/boot-bind/vault.ts +2 -8
- package/src/kernel/boot.test.ts +4 -10
- package/src/kernel/boot.ts +30 -77
- package/src/kernel/budget.test.ts +1 -3
- package/src/kernel/capability.ts +3 -10
- package/src/kernel/dry-run.test.ts +1 -4
- package/src/kernel/dry-run.ts +3 -11
- package/src/kernel/edge.test.ts +68 -0
- package/src/kernel/effects.test.ts +1 -5
- package/src/kernel/effects.ts +4 -11
- package/src/kernel/errors.registry.test.ts +2 -8
- package/src/kernel/errors.ts +23 -32
- package/src/kernel/flow.test.ts +12 -25
- package/src/kernel/flow.ts +13 -25
- package/src/kernel/fx.test.ts +31 -40
- package/src/kernel/fx.ts +135 -90
- package/src/kernel/hook-timing.test.ts +3 -6
- package/src/kernel/hook-timing.ts +5 -14
- package/src/kernel/hooks.test.ts +43 -10
- package/src/kernel/hooks.ts +25 -12
- package/src/kernel/index.ts +11 -17
- package/src/kernel/journal.ts +7 -31
- package/src/kernel/on.ts +45 -9
- package/src/kernel/pipeline.test.ts +10 -19
- package/src/kernel/pipeline.ts +5 -17
- package/src/kernel/plug.ts +4 -11
- package/src/kernel/plugin/conflicts.test.ts +13 -25
- package/src/kernel/plugin/decorate.test.ts +8 -13
- package/src/kernel/plugin/scoping.test.ts +4 -11
- package/src/kernel/plugin.ts +81 -27
- package/src/kernel/registry-isolation.test.ts +74 -0
- package/src/kernel/registry.ts +102 -30
- package/src/kernel/router.test.ts +15 -13
- package/src/kernel/router.ts +9 -29
- package/src/kernel/routing-budget.test.ts +1 -3
- package/src/kernel/run-telemetry.ts +1 -3
- package/src/kernel/triggers.ts +63 -21
- package/src/manifest/diff.test.ts +26 -91
- package/src/manifest/diff.ts +95 -225
- package/src/manifest/fixtures/skyport.excerpt.json +1 -1
- package/src/manifest/fixtures/skyport.manifest.json +1 -1
- package/src/manifest/index.ts +3 -10
- package/src/manifest/types.ts +30 -6
- package/src/manifest/undeclared.test.ts +4 -12
- package/src/manifest/undeclared.ts +1 -2
- package/src/manifest/validate.test.ts +2 -6
- package/src/manifest/validate.ts +5 -15
- package/src/mcp/authorization.ts +8 -27
- package/src/mcp/confirmation.ts +3 -10
- package/src/mcp/data.ts +2 -6
- package/src/mcp/docs-index.ts +4 -7
- package/src/mcp/docs-mcp.test.ts +3 -12
- package/src/mcp/docs-server.ts +7 -27
- package/src/mcp/docs-tools.ts +2 -6
- package/src/mcp/index.ts +1 -6
- package/src/mcp/injection.gate.test.ts +4 -18
- package/src/mcp/mcp.test.ts +18 -49
- package/src/mcp/protocol.ts +3 -10
- package/src/mcp/server.ts +11 -52
- package/src/mcp/session.ts +4 -14
- package/src/mcp/tools.ts +14 -50
- package/src/plugins/catalogue.test.ts +3 -7
- package/src/plugins/catalogue.ts +1 -3
- package/src/plugins/compression.test.ts +127 -0
- package/src/plugins/compression.ts +94 -0
- package/src/plugins/config-source.test.ts +204 -0
- package/src/plugins/config-source.ts +209 -0
- package/src/plugins/cors.test.ts +138 -0
- package/src/plugins/cors.ts +129 -0
- package/src/plugins/csrf.test.ts +102 -0
- package/src/plugins/csrf.ts +86 -0
- package/src/plugins/headers.ts +54 -0
- package/src/plugins/index.ts +26 -0
- package/src/plugins/ip-allowlist.test.ts +105 -0
- package/src/plugins/ip-allowlist.ts +76 -0
- package/src/plugins/maintenance-mode.test.ts +91 -0
- package/src/plugins/maintenance-mode.ts +85 -0
- package/src/plugins/node-import-scan.ts +2 -5
- package/src/plugins/security-headers.test.ts +243 -0
- package/src/plugins/security-headers.ts +255 -0
- package/src/plugins/supply-chain.ts +5 -17
- package/src/release/exports.ts +3 -8
- package/src/release/measure.exports.test.ts +1 -3
- package/src/release/measure.ts +16 -45
- package/src/runs/bench.test.ts +1 -3
- package/src/runs/collect.ts +8 -25
- package/src/runs/drivers/clickhouse.ts +2 -9
- package/src/runs/drivers/files.ts +9 -31
- package/src/runs/drivers/memory.ts +5 -22
- package/src/runs/drivers/postgres.ts +8 -20
- package/src/runs/duckdb.ts +2 -8
- package/src/runs/index.ts +3 -14
- package/src/runs/outlier.ts +3 -10
- package/src/runs/parquet.ts +8 -26
- package/src/runs/privacy.ts +2 -8
- package/src/runs/runs.test.ts +3 -9
- package/src/runs/runtime.ts +7 -32
- package/src/runs/shred.ts +10 -29
- package/src/runs/types.ts +1 -4
- package/src/runtime/bun.ts +4 -15
- package/src/runtime/cold-start.bench.ts +1 -3
- package/src/runtime/dev-request-log.test.ts +1 -4
- package/src/runtime/dev-request-log.ts +1 -4
- package/src/runtime/index.ts +1 -6
- package/src/runtime/primitives.ts +5 -4
- package/src/runtime/security.ts +3 -13
- package/src/runtime/serve.test.ts +4 -7
- package/src/runtime/types.ts +1 -4
- package/src/runtime/web-standard.ts +3 -15
- package/src/term.test.ts +4 -6
- package/src/term.ts +49 -98
- package/src/test/create-test-app.test.ts +4 -14
- package/src/test/create-test-app.ts +27 -33
- package/src/test/provisions.integration.test.ts +3 -11
- package/src/upgrade/codemods.test.ts +25 -6
- package/src/upgrade/codemods.ts +116 -3
- package/src/validation/standard-schema.test.ts +2 -5
- package/src/validation/standard-schema.ts +13 -33
- package/docs/spec/console.md +0 -739
- package/docs/spec/example.md +0 -1196
- package/docs/spec/four-applications.md +0 -1195
- package/docs/spec/unified-theory.md +0 -489
- package/src/cli/doc-drift.test.ts +0 -146
- package/src/cli/doc-drift.ts +0 -430
- package/src/cli/doctor-diff-examples.ts +0 -92
- package/src/console/ui/dist/assets/panel-vault-BbfWdox0.js +0 -1
- package/src/drivers/vault-sops.ts +0 -271
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensure a mode-aware `drizzle.config.ts` exists — created when absent,
|
|
3
|
+
* never overwritten when the user customised it.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { resolve } from "node:path";
|
|
7
|
+
|
|
8
|
+
/** Mode-aware template (matches `packages/create-oke/template/drizzle.config.ts`). */
|
|
9
|
+
const DRIZZLE_CONFIG_TEMPLATE = `import { defineConfig } from "drizzle-kit";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Domain schema sync for \`oke db push|generate|migrate\`.
|
|
13
|
+
*
|
|
14
|
+
* Dialect comes from OKE's \`store.sql\` driver map (resolved by the CLI and
|
|
15
|
+
* injected as \`OKE_DRIZZLE_DIALECT\`) — never inferred from \`DATABASE_URL\`
|
|
16
|
+
* presence. \`src/schema.generated.ts\` is emitted from \`src/schema.decl.ts\`
|
|
17
|
+
* for the active dialect as a pre-step of \`oke db\` / \`oke dev\`.
|
|
18
|
+
*
|
|
19
|
+
* Versioned prod migrations land in \`./drizzle\` — never mix with \`.oke/\`.
|
|
20
|
+
*/
|
|
21
|
+
const dialect = (process.env.OKE_DRIZZLE_DIALECT ?? "sqlite") as "sqlite" | "postgresql";
|
|
22
|
+
|
|
23
|
+
export default defineConfig({
|
|
24
|
+
dialect,
|
|
25
|
+
schema: "./src/schema.generated.ts",
|
|
26
|
+
out: "./drizzle",
|
|
27
|
+
dbCredentials: {
|
|
28
|
+
url:
|
|
29
|
+
dialect === "postgresql"
|
|
30
|
+
? (process.env.DATABASE_URL ?? process.env.OKE_STORE_SQL_URL!)
|
|
31
|
+
: (process.env.OKE_SQLITE_URL ?? "file:.oke/app.sqlite"),
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
`;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Create `drizzle.config.ts` at the project root when it does not exist.
|
|
38
|
+
* Returns the absolute path and whether it was created.
|
|
39
|
+
*
|
|
40
|
+
* @param cwd - Project root
|
|
41
|
+
*/
|
|
42
|
+
export async function ensureDrizzleConfig(
|
|
43
|
+
cwd: string,
|
|
44
|
+
): Promise<{ readonly path: string; readonly created: boolean }> {
|
|
45
|
+
const path = resolve(cwd, "drizzle.config.ts");
|
|
46
|
+
const file = Bun.file(path);
|
|
47
|
+
if (await file.exists()) return { path, created: false };
|
|
48
|
+
await Bun.write(path, DRIZZLE_CONFIG_TEMPLATE);
|
|
49
|
+
return { path, created: true };
|
|
50
|
+
}
|
package/src/cli/eval.ts
CHANGED
|
@@ -3,11 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { resolve } from "node:path";
|
|
6
|
-
import {
|
|
7
|
-
parseEvalJsonl,
|
|
8
|
-
runPromptEvals,
|
|
9
|
-
type EvalCase,
|
|
10
|
-
} from "../elements/ai/eval.ts";
|
|
6
|
+
import { parseEvalJsonl, runPromptEvals, type EvalCase } from "../elements/ai/eval.ts";
|
|
11
7
|
import type { Manifest } from "../manifest/types.ts";
|
|
12
8
|
|
|
13
9
|
/** Options for {@link runOkeEval}. */
|
|
@@ -35,9 +31,7 @@ export interface OkeEvalOptions {
|
|
|
35
31
|
* @param options - Manifest + ask wiring
|
|
36
32
|
* @returns Exit code (1 on any failure)
|
|
37
33
|
*/
|
|
38
|
-
export async function runOkeEval(
|
|
39
|
-
options: OkeEvalOptions = {},
|
|
40
|
-
): Promise<number> {
|
|
34
|
+
export async function runOkeEval(options: OkeEvalOptions = {}): Promise<number> {
|
|
41
35
|
const write = options.write ?? ((t) => process.stdout.write(t));
|
|
42
36
|
let manifest = options.manifest;
|
|
43
37
|
if (!manifest) {
|
|
@@ -57,9 +51,7 @@ export async function runOkeEval(
|
|
|
57
51
|
return 0;
|
|
58
52
|
}
|
|
59
53
|
|
|
60
|
-
const load =
|
|
61
|
-
options.loadEvals ??
|
|
62
|
-
(async (p: string) => Bun.file(resolve(p)).text());
|
|
54
|
+
const load = options.loadEvals ?? (async (p: string) => Bun.file(resolve(p)).text());
|
|
63
55
|
|
|
64
56
|
let failed = 0;
|
|
65
57
|
for (const name of names) {
|
|
@@ -69,9 +61,7 @@ export async function runOkeEval(
|
|
|
69
61
|
continue;
|
|
70
62
|
}
|
|
71
63
|
if (!options.ask) {
|
|
72
|
-
console.error(
|
|
73
|
-
`oke eval: ask() not wired — provide a runtime binding for prompt "${name}"`,
|
|
74
|
-
);
|
|
64
|
+
console.error(`oke eval: ask() not wired — provide a runtime binding for prompt "${name}"`);
|
|
75
65
|
return 1;
|
|
76
66
|
}
|
|
77
67
|
let cases: EvalCase[];
|
package/src/cli/gates-list.ts
CHANGED
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { resolve } from "node:path";
|
|
6
|
-
import {
|
|
7
|
-
deriveModuleActions,
|
|
8
|
-
formatGatesList,
|
|
9
|
-
} from "../elements/gate/permissions.ts";
|
|
6
|
+
import { deriveModuleActions, formatGatesList } from "../elements/gate/permissions.ts";
|
|
10
7
|
import type { Manifest } from "../manifest/types.ts";
|
|
11
8
|
import { wantsJson } from "./args.ts";
|
|
12
9
|
import { EXIT_OK, EXIT_RUNTIME } from "./exit.ts";
|
|
@@ -15,31 +15,29 @@ import {
|
|
|
15
15
|
const SAMPLE: OkeConfig = {
|
|
16
16
|
drivers: {
|
|
17
17
|
store: {
|
|
18
|
-
sql: {
|
|
19
|
-
kv: {
|
|
18
|
+
sql: { local: "sqlite", docker: "postgres", prod: "postgres" },
|
|
19
|
+
kv: { local: "memory", docker: "redis", prod: "redis" },
|
|
20
20
|
},
|
|
21
|
-
signal: {
|
|
22
|
-
clock: {
|
|
23
|
-
vault: {
|
|
21
|
+
signal: { local: "memory", docker: "postgres", prod: "postgres" },
|
|
22
|
+
clock: { local: "memory", docker: "postgres", prod: "postgres" },
|
|
23
|
+
vault: { local: "dotenv", docker: "openbao", prod: "openbao" },
|
|
24
24
|
channel: {
|
|
25
|
-
email: {
|
|
25
|
+
email: { local: "console", docker: "smtp", prod: "smtp" },
|
|
26
26
|
},
|
|
27
|
-
ai: {
|
|
27
|
+
ai: { local: "mock", docker: "mock" },
|
|
28
28
|
},
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
describe("hero-meta", () => {
|
|
32
|
-
test("resolveDevProfile maps
|
|
33
|
-
expect(resolveDevProfile({
|
|
34
|
-
expect(resolveDevProfile({
|
|
35
|
-
expect(resolveDevProfile({
|
|
36
|
-
expect(resolveDevProfile({
|
|
37
|
-
"production",
|
|
38
|
-
);
|
|
32
|
+
test("resolveDevProfile maps docker and NODE_ENV", () => {
|
|
33
|
+
expect(resolveDevProfile({ docker: false })).toBe("local");
|
|
34
|
+
expect(resolveDevProfile({ docker: true })).toBe("docker");
|
|
35
|
+
expect(resolveDevProfile({ docker: false, nodeEnv: "test" })).toBe("test");
|
|
36
|
+
expect(resolveDevProfile({ docker: false, nodeEnv: "production" })).toBe("production");
|
|
39
37
|
});
|
|
40
38
|
|
|
41
39
|
test("resolveHeroElements lists eight elements with drivers", () => {
|
|
42
|
-
const rows = resolveHeroElements(SAMPLE, {
|
|
40
|
+
const rows = resolveHeroElements(SAMPLE, { docker: false });
|
|
43
41
|
expect(rows.map((r) => r.element)).toEqual([
|
|
44
42
|
"flow",
|
|
45
43
|
"signal",
|
|
@@ -54,9 +52,9 @@ describe("hero-meta", () => {
|
|
|
54
52
|
expect(rows.find((r) => r.element === "flow")?.detail).toBe("●");
|
|
55
53
|
});
|
|
56
54
|
|
|
57
|
-
test("
|
|
55
|
+
test("docker profile applies to every element", () => {
|
|
58
56
|
const rows = resolveHeroElements(SAMPLE, {
|
|
59
|
-
|
|
57
|
+
docker: true,
|
|
60
58
|
sqlDriver: "postgres",
|
|
61
59
|
kvDriver: "redis",
|
|
62
60
|
});
|
|
@@ -72,13 +70,13 @@ describe("hero-meta", () => {
|
|
|
72
70
|
test("encode/decode round-trips", () => {
|
|
73
71
|
const snap = buildDevHeroSnapshot({
|
|
74
72
|
config: SAMPLE,
|
|
75
|
-
|
|
73
|
+
docker: true,
|
|
76
74
|
sqlDriver: "postgres",
|
|
77
75
|
kvDriver: "redis",
|
|
78
76
|
version: "0.2.4",
|
|
79
77
|
nodeEnv: "development",
|
|
80
78
|
});
|
|
81
|
-
expect(snap.profile).toBe("
|
|
79
|
+
expect(snap.profile).toBe("docker");
|
|
82
80
|
expect(snap.runtimeEnv).toBe("local");
|
|
83
81
|
expect(decodeHeroSnapshot(encodeHeroSnapshot(snap))).toEqual(snap);
|
|
84
82
|
});
|
package/src/cli/hero-meta.ts
CHANGED
|
@@ -11,11 +11,7 @@ import {
|
|
|
11
11
|
} from "../config/index.ts";
|
|
12
12
|
|
|
13
13
|
/** How the process is running (local laptop → production). */
|
|
14
|
-
export type DevRuntimeProfile =
|
|
15
|
-
| "local"
|
|
16
|
-
| "local-server"
|
|
17
|
-
| "test"
|
|
18
|
-
| "production";
|
|
14
|
+
export type DevRuntimeProfile = "local" | "docker" | "test" | "production";
|
|
19
15
|
|
|
20
16
|
/** Data plane: still on a laptop vs real production. */
|
|
21
17
|
export type DevRuntimeEnv = "local" | "production";
|
|
@@ -61,16 +57,16 @@ export function formatHeroSystemLine(
|
|
|
61
57
|
/**
|
|
62
58
|
* Profile for an `oke dev` session.
|
|
63
59
|
*
|
|
64
|
-
* @param options -
|
|
60
|
+
* @param options - Docker / NODE_ENV hints
|
|
65
61
|
*/
|
|
66
62
|
export function resolveDevProfile(options: {
|
|
67
|
-
readonly
|
|
63
|
+
readonly docker: boolean;
|
|
68
64
|
/** Explicit role — do not infer from ambient `NODE_ENV` (tests set `test`). */
|
|
69
65
|
readonly nodeEnv?: string;
|
|
70
66
|
}): DevRuntimeProfile {
|
|
71
67
|
if (options.nodeEnv === "test") return "test";
|
|
72
68
|
if (options.nodeEnv === "production") return "production";
|
|
73
|
-
return options.
|
|
69
|
+
return options.docker ? "docker" : "local";
|
|
74
70
|
}
|
|
75
71
|
|
|
76
72
|
/**
|
|
@@ -78,9 +74,7 @@ export function resolveDevProfile(options: {
|
|
|
78
74
|
*
|
|
79
75
|
* @param profile - Runtime profile
|
|
80
76
|
*/
|
|
81
|
-
export function resolveDevRuntimeEnv(
|
|
82
|
-
profile: DevRuntimeProfile,
|
|
83
|
-
): DevRuntimeEnv {
|
|
77
|
+
export function resolveDevRuntimeEnv(profile: DevRuntimeProfile): DevRuntimeEnv {
|
|
84
78
|
return profile === "production" ? "production" : "local";
|
|
85
79
|
}
|
|
86
80
|
|
|
@@ -89,7 +83,7 @@ export function resolveDevRuntimeEnv(
|
|
|
89
83
|
*
|
|
90
84
|
* @param map - Env driver map
|
|
91
85
|
* @param env - Config env key
|
|
92
|
-
* @param prefer - Override (
|
|
86
|
+
* @param prefer - Override (docker sql/kv)
|
|
93
87
|
*/
|
|
94
88
|
function driverOr(
|
|
95
89
|
map: Parameters<typeof resolveDriverId>[0],
|
|
@@ -106,10 +100,7 @@ function driverOr(
|
|
|
106
100
|
* @param channel - Channel driver maps
|
|
107
101
|
* @param env - Config env
|
|
108
102
|
*/
|
|
109
|
-
function channelDetail(
|
|
110
|
-
channel: DriversConfig["channel"],
|
|
111
|
-
env: ConfigEnv,
|
|
112
|
-
): string {
|
|
103
|
+
function channelDetail(channel: DriversConfig["channel"], env: ConfigEnv): string {
|
|
113
104
|
if (!channel) return "—";
|
|
114
105
|
const parts: string[] = [];
|
|
115
106
|
for (const medium of ["email", "sms", "whatsapp", "push"] as const) {
|
|
@@ -120,11 +111,11 @@ function channelDetail(
|
|
|
120
111
|
}
|
|
121
112
|
|
|
122
113
|
/**
|
|
123
|
-
* Summarize store facets for the active (or
|
|
114
|
+
* Summarize store facets for the active (or docker-overridden) drivers.
|
|
124
115
|
*
|
|
125
116
|
* @param store - Store driver maps
|
|
126
117
|
* @param env - Config env for non-overridden facets
|
|
127
|
-
* @param overrides -
|
|
118
|
+
* @param overrides - Docker sql/kv ids
|
|
128
119
|
*/
|
|
129
120
|
function storeDetail(
|
|
130
121
|
store: DriversConfig["store"],
|
|
@@ -145,26 +136,25 @@ function storeDetail(
|
|
|
145
136
|
}
|
|
146
137
|
|
|
147
138
|
/**
|
|
148
|
-
* Resolve eight-element rows from `oke.config` +
|
|
139
|
+
* Resolve eight-element rows from `oke.config` + docker overrides.
|
|
149
140
|
*
|
|
150
141
|
* @param config - Loaded config (or null)
|
|
151
|
-
* @param options -
|
|
142
|
+
* @param options - Docker driver overrides; config env for maps
|
|
152
143
|
*/
|
|
153
144
|
export function resolveHeroElements(
|
|
154
145
|
config: OkeConfig | null | undefined,
|
|
155
146
|
options: {
|
|
156
|
-
/** Use
|
|
157
|
-
readonly
|
|
147
|
+
/** Use docker store ids from stack (`oke dev -d`). */
|
|
148
|
+
readonly docker: boolean;
|
|
158
149
|
readonly sqlDriver?: string;
|
|
159
150
|
readonly kvDriver?: string;
|
|
160
|
-
/** Which driver map column to read (default `
|
|
151
|
+
/** Which driver map column to read (default `local`). */
|
|
161
152
|
readonly configEnv?: ConfigEnv;
|
|
162
153
|
},
|
|
163
154
|
): readonly HeroElementRow[] {
|
|
164
155
|
const drivers = config?.drivers;
|
|
165
|
-
// `-
|
|
166
|
-
const configEnv: ConfigEnv =
|
|
167
|
-
options.configEnv ?? (options.stack ? "stack" : "dev");
|
|
156
|
+
// `-d` reads the `docker` profile for every element (not a store-only override).
|
|
157
|
+
const configEnv: ConfigEnv = options.configEnv ?? (options.docker ? "docker" : "local");
|
|
168
158
|
|
|
169
159
|
const byName: Record<string, string> = {
|
|
170
160
|
flow: "●",
|
|
@@ -189,18 +179,18 @@ export function resolveHeroElements(
|
|
|
189
179
|
/**
|
|
190
180
|
* Build the full hero snapshot for banner / soft reload.
|
|
191
181
|
*
|
|
192
|
-
* @param options - Config,
|
|
182
|
+
* @param options - Config, docker, versions
|
|
193
183
|
*/
|
|
194
184
|
export function buildDevHeroSnapshot(options: {
|
|
195
185
|
readonly config?: OkeConfig | null;
|
|
196
|
-
readonly
|
|
186
|
+
readonly docker: boolean;
|
|
197
187
|
readonly sqlDriver?: string;
|
|
198
188
|
readonly kvDriver?: string;
|
|
199
189
|
readonly version?: string;
|
|
200
190
|
readonly nodeEnv?: string;
|
|
201
191
|
}): DevHeroSnapshot {
|
|
202
192
|
const profile = resolveDevProfile({
|
|
203
|
-
|
|
193
|
+
docker: options.docker,
|
|
204
194
|
nodeEnv: options.nodeEnv,
|
|
205
195
|
});
|
|
206
196
|
return {
|
|
@@ -208,7 +198,7 @@ export function buildDevHeroSnapshot(options: {
|
|
|
208
198
|
runtimeEnv: resolveDevRuntimeEnv(profile),
|
|
209
199
|
system: formatHeroSystemLine(),
|
|
210
200
|
elements: resolveHeroElements(options.config, {
|
|
211
|
-
|
|
201
|
+
docker: options.docker,
|
|
212
202
|
sqlDriver: options.sqlDriver,
|
|
213
203
|
kvDriver: options.kvDriver,
|
|
214
204
|
}),
|
package/src/cli/images.ts
CHANGED
|
@@ -54,9 +54,7 @@ export interface ImagesPinOptions {
|
|
|
54
54
|
*
|
|
55
55
|
* @param options - Config / images
|
|
56
56
|
*/
|
|
57
|
-
export async function runImagesList(
|
|
58
|
-
options: ImagesListOptions = {},
|
|
59
|
-
): Promise<number> {
|
|
57
|
+
export async function runImagesList(options: ImagesListOptions = {}): Promise<number> {
|
|
60
58
|
const write = options.write ?? ((t) => process.stdout.write(t));
|
|
61
59
|
const writeErr = options.writeErr ?? ((t) => process.stderr.write(t));
|
|
62
60
|
const json = options.json ?? false;
|
|
@@ -113,8 +111,7 @@ export function buildImagesListRows(
|
|
|
113
111
|
} catch {
|
|
114
112
|
// Unknown image — still list the row; recipe stays "-".
|
|
115
113
|
}
|
|
116
|
-
const digest =
|
|
117
|
-
lock?.images[role]?.digest ?? digestFromRef ?? "-";
|
|
114
|
+
const digest = lock?.images[role]?.digest ?? digestFromRef ?? "-";
|
|
118
115
|
return {
|
|
119
116
|
role,
|
|
120
117
|
recipe,
|
|
@@ -150,9 +147,7 @@ export function formatImagesList(rows: readonly ImagesListRow[]): string {
|
|
|
150
147
|
*
|
|
151
148
|
* @param options - Config / resolver
|
|
152
149
|
*/
|
|
153
|
-
export async function runImagesPin(
|
|
154
|
-
options: ImagesPinOptions = {},
|
|
155
|
-
): Promise<number> {
|
|
150
|
+
export async function runImagesPin(options: ImagesPinOptions = {}): Promise<number> {
|
|
156
151
|
const write = options.write ?? ((t) => process.stdout.write(t));
|
|
157
152
|
const cwd = options.cwd ?? process.cwd();
|
|
158
153
|
let images = options.images;
|
package/src/cli/index.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { branchCli } from "./branch.ts";
|
|
|
7
7
|
import { buildCli } from "./build.ts";
|
|
8
8
|
import { clientAddCli } from "./client-add.ts";
|
|
9
9
|
import { completionCli } from "./completion.ts";
|
|
10
|
+
import { dbCli } from "./db.ts";
|
|
10
11
|
import { devCli } from "./dev.ts";
|
|
11
12
|
import { doctorCli } from "./doctor.ts";
|
|
12
13
|
import { dockerCli } from "./docker.ts";
|
|
@@ -14,6 +15,7 @@ import { evalCli } from "./eval.ts";
|
|
|
14
15
|
import { EXIT_CODE_HELP, EXIT_OK, EXIT_USAGE } from "./exit.ts";
|
|
15
16
|
import { gatesListCli } from "./gates-list.ts";
|
|
16
17
|
import { imagesCli } from "./images.ts";
|
|
18
|
+
import { modeCli } from "./mode.ts";
|
|
17
19
|
import { privacyEraseCli } from "./privacy-erase.ts";
|
|
18
20
|
import { formatOkeHelp } from "./registry.ts";
|
|
19
21
|
import { schemaCli } from "./schema.ts";
|
|
@@ -29,6 +31,10 @@ if (cmd === "dev") {
|
|
|
29
31
|
process.exit(await devCli(sub ? [sub, ...rest] : rest));
|
|
30
32
|
}
|
|
31
33
|
|
|
34
|
+
if (cmd === "mode") {
|
|
35
|
+
process.exit(await modeCli(sub ? [sub, ...rest] : rest));
|
|
36
|
+
}
|
|
37
|
+
|
|
32
38
|
if (cmd === "start") {
|
|
33
39
|
process.exit(await startCli(sub ? [sub, ...rest] : rest));
|
|
34
40
|
}
|
|
@@ -45,6 +51,10 @@ if (cmd === "schema") {
|
|
|
45
51
|
process.exit(await schemaCli(sub ? [sub, ...rest] : rest));
|
|
46
52
|
}
|
|
47
53
|
|
|
54
|
+
if (cmd === "db") {
|
|
55
|
+
process.exit(await dbCli(sub ? [sub, ...rest] : rest));
|
|
56
|
+
}
|
|
57
|
+
|
|
48
58
|
if (cmd === "client" && sub === "add") {
|
|
49
59
|
process.exit(await clientAddCli(rest));
|
|
50
60
|
}
|
|
@@ -91,8 +101,7 @@ if (cmd === "completion") {
|
|
|
91
101
|
|
|
92
102
|
if (cmd === undefined || cmd === "--help" || cmd === "-h" || cmd === "help") {
|
|
93
103
|
// Bare `oke` — commands only. Exit-code table only on explicit --help.
|
|
94
|
-
const help =
|
|
95
|
-
cmd === undefined ? formatOkeHelp() : `${formatOkeHelp()}${EXIT_CODE_HELP}`;
|
|
104
|
+
const help = cmd === undefined ? formatOkeHelp() : `${formatOkeHelp()}${EXIT_CODE_HELP}`;
|
|
96
105
|
console.log(help);
|
|
97
106
|
process.exit(cmd ? EXIT_OK : EXIT_USAGE);
|
|
98
107
|
}
|
|
@@ -6,7 +6,7 @@ import { describe, expect, test } from "bun:test";
|
|
|
6
6
|
import {
|
|
7
7
|
defaultImagesFromConfig,
|
|
8
8
|
resolveImages,
|
|
9
|
-
|
|
9
|
+
dockerDevDriverMismatches,
|
|
10
10
|
} from "./load-config.ts";
|
|
11
11
|
|
|
12
12
|
describe("defaultImagesFromConfig", () => {
|
|
@@ -75,14 +75,14 @@ describe("resolveImages", () => {
|
|
|
75
75
|
});
|
|
76
76
|
});
|
|
77
77
|
|
|
78
|
-
describe("
|
|
79
|
-
test("flags
|
|
80
|
-
const mismatches =
|
|
78
|
+
describe("dockerDevDriverMismatches", () => {
|
|
79
|
+
test("flags docker/prod sqlite/memory when containers are up", () => {
|
|
80
|
+
const mismatches = dockerDevDriverMismatches(
|
|
81
81
|
{
|
|
82
82
|
drivers: {
|
|
83
83
|
store: {
|
|
84
|
-
sql: {
|
|
85
|
-
kv: {
|
|
84
|
+
sql: { local: "sqlite", docker: "sqlite", prod: "sqlite" },
|
|
85
|
+
kv: { local: "memory", docker: "memory", prod: "memory" },
|
|
86
86
|
},
|
|
87
87
|
},
|
|
88
88
|
},
|
|
@@ -94,13 +94,13 @@ describe("stackDevDriverMismatches", () => {
|
|
|
94
94
|
]);
|
|
95
95
|
});
|
|
96
96
|
|
|
97
|
-
test("silent when
|
|
98
|
-
const mismatches =
|
|
97
|
+
test("silent when docker profile matches containers", () => {
|
|
98
|
+
const mismatches = dockerDevDriverMismatches(
|
|
99
99
|
{
|
|
100
100
|
drivers: {
|
|
101
101
|
store: {
|
|
102
|
-
sql: {
|
|
103
|
-
kv: {
|
|
102
|
+
sql: { local: "sqlite", docker: "postgres", prod: "postgres" },
|
|
103
|
+
kv: { local: "memory", docker: "redis", prod: "redis" },
|
|
104
104
|
},
|
|
105
105
|
},
|
|
106
106
|
},
|
|
@@ -109,13 +109,13 @@ describe("stackDevDriverMismatches", () => {
|
|
|
109
109
|
expect(mismatches).toEqual([]);
|
|
110
110
|
});
|
|
111
111
|
|
|
112
|
-
test("silent when only prod is set (
|
|
113
|
-
const mismatches =
|
|
112
|
+
test("silent when only prod is set (docker falls back to prod)", () => {
|
|
113
|
+
const mismatches = dockerDevDriverMismatches(
|
|
114
114
|
{
|
|
115
115
|
drivers: {
|
|
116
116
|
store: {
|
|
117
|
-
sql: {
|
|
118
|
-
kv: {
|
|
117
|
+
sql: { local: "sqlite", prod: "postgres" },
|
|
118
|
+
kv: { local: "memory", prod: "redis" },
|
|
119
119
|
},
|
|
120
120
|
},
|
|
121
121
|
},
|
package/src/cli/load-config.ts
CHANGED
|
@@ -10,6 +10,7 @@ import type { Manifest } from "../manifest/types.ts";
|
|
|
10
10
|
const DEFAULT_SQL_IMAGE = "postgres:18-alpine";
|
|
11
11
|
const DEFAULT_PGVECTOR_IMAGE = "pgvector/pgvector:pg17";
|
|
12
12
|
const DEFAULT_KV_IMAGE = "redis:8-alpine";
|
|
13
|
+
const DEFAULT_VAULT_IMAGE = "openbao/openbao:2.6.1";
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Extract protocol id from a driver ref.
|
|
@@ -22,33 +23,31 @@ function driverId(ref: DriverRef | undefined): string | undefined {
|
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
|
-
* Prefer `
|
|
26
|
+
* Prefer `docker` then `prod` for a driver map (compose infra ≈ production).
|
|
26
27
|
*
|
|
27
28
|
* @param map - Env driver map
|
|
28
29
|
*/
|
|
29
|
-
function
|
|
30
|
-
map: { readonly
|
|
30
|
+
function dockerOrProdId(
|
|
31
|
+
map: { readonly docker?: DriverRef; readonly prod?: DriverRef } | undefined,
|
|
31
32
|
): string | undefined {
|
|
32
|
-
return driverId(map?.
|
|
33
|
+
return driverId(map?.docker) ?? driverId(map?.prod);
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
/**
|
|
36
|
-
* Derive default image pins from
|
|
37
|
+
* Derive default image pins from docker/prod driver protocols.
|
|
37
38
|
*
|
|
38
39
|
* Used when `oke.config.ts` omits `images` but declares postgres/redis (etc.)
|
|
39
|
-
* so `oke dev -
|
|
40
|
+
* so `oke dev -d` / `oke stack` / `oke docker` have something to run.
|
|
40
41
|
*
|
|
41
42
|
* @param config - Loaded config
|
|
42
43
|
*/
|
|
43
|
-
export function defaultImagesFromConfig(
|
|
44
|
-
config: OkeConfig,
|
|
45
|
-
): Readonly<Record<string, string>> {
|
|
44
|
+
export function defaultImagesFromConfig(config: OkeConfig): Readonly<Record<string, string>> {
|
|
46
45
|
const out: Record<string, string> = {};
|
|
47
|
-
const sql =
|
|
48
|
-
const index =
|
|
49
|
-
const kv =
|
|
50
|
-
const signal =
|
|
51
|
-
const clock =
|
|
46
|
+
const sql = dockerOrProdId(config.drivers?.store?.sql);
|
|
47
|
+
const index = dockerOrProdId(config.drivers?.store?.index);
|
|
48
|
+
const kv = dockerOrProdId(config.drivers?.store?.kv);
|
|
49
|
+
const signal = dockerOrProdId(config.drivers?.signal);
|
|
50
|
+
const clock = dockerOrProdId(config.drivers?.clock);
|
|
52
51
|
|
|
53
52
|
const needsSql =
|
|
54
53
|
sql === "postgres" ||
|
|
@@ -56,23 +55,23 @@ export function defaultImagesFromConfig(
|
|
|
56
55
|
index === "pgvector" ||
|
|
57
56
|
signal === "postgres" ||
|
|
58
57
|
clock === "postgres" ||
|
|
59
|
-
(config.drivers?.prod ?? []).some(
|
|
60
|
-
(p) => p === "postgres" || p === "pgvector",
|
|
61
|
-
);
|
|
58
|
+
(config.drivers?.prod ?? []).some((p) => p === "postgres" || p === "pgvector");
|
|
62
59
|
|
|
63
60
|
if (needsSql) {
|
|
64
61
|
out["store.sql"] =
|
|
65
|
-
sql === "pgvector" || index === "pgvector"
|
|
66
|
-
? DEFAULT_PGVECTOR_IMAGE
|
|
67
|
-
: DEFAULT_SQL_IMAGE;
|
|
62
|
+
sql === "pgvector" || index === "pgvector" ? DEFAULT_PGVECTOR_IMAGE : DEFAULT_SQL_IMAGE;
|
|
68
63
|
}
|
|
69
64
|
|
|
70
|
-
const needsKv =
|
|
71
|
-
kv === "redis" || (config.drivers?.prod ?? []).includes("redis");
|
|
65
|
+
const needsKv = kv === "redis" || (config.drivers?.prod ?? []).includes("redis");
|
|
72
66
|
if (needsKv) {
|
|
73
67
|
out["store.kv"] = DEFAULT_KV_IMAGE;
|
|
74
68
|
}
|
|
75
69
|
|
|
70
|
+
const vault = dockerOrProdId(config.drivers?.vault);
|
|
71
|
+
if (vault === "openbao") {
|
|
72
|
+
out.vault = DEFAULT_VAULT_IMAGE;
|
|
73
|
+
}
|
|
74
|
+
|
|
76
75
|
return out;
|
|
77
76
|
}
|
|
78
77
|
|
|
@@ -109,9 +108,7 @@ export async function loadOkeConfig(
|
|
|
109
108
|
}
|
|
110
109
|
return { config: mod.default, path };
|
|
111
110
|
}
|
|
112
|
-
throw new Error(
|
|
113
|
-
`oke: no oke.config.ts found in ${cwd} — create one with defineConfig()`,
|
|
114
|
-
);
|
|
111
|
+
throw new Error(`oke: no oke.config.ts found in ${cwd} — create one with defineConfig()`);
|
|
115
112
|
}
|
|
116
113
|
|
|
117
114
|
/**
|
|
@@ -131,7 +128,7 @@ export async function loadManifest(path: string): Promise<Manifest> {
|
|
|
131
128
|
* Resolve images map from config or Manifest.
|
|
132
129
|
*
|
|
133
130
|
* When neither declares `images`, derive defaults from prod driver protocols
|
|
134
|
-
* so `oke dev -
|
|
131
|
+
* so `oke dev -d` works on scaffolded templates without an explicit pin map.
|
|
135
132
|
*
|
|
136
133
|
* @param config - Optional config
|
|
137
134
|
* @param manifest - Optional manifest
|
|
@@ -150,49 +147,44 @@ export function resolveImages(
|
|
|
150
147
|
export type StackDriverMismatch = {
|
|
151
148
|
/** Short label (`sql`, `kv`). */
|
|
152
149
|
readonly label: string;
|
|
153
|
-
/** Active `drivers.*.
|
|
150
|
+
/** Active `drivers.*.docker` (→ prod) id. */
|
|
154
151
|
readonly using: string;
|
|
155
152
|
/** Driver that would use the container. */
|
|
156
153
|
readonly container: string;
|
|
157
154
|
};
|
|
158
155
|
|
|
159
156
|
/**
|
|
160
|
-
* Detect when `oke dev -
|
|
161
|
-
* `
|
|
157
|
+
* Detect when `oke dev -d` containers will not back the app because the
|
|
158
|
+
* `docker` driver profile still points at local/memory backends.
|
|
162
159
|
*
|
|
163
160
|
* @param config - Loaded config
|
|
164
161
|
* @param stackRoles - Roles being composed
|
|
165
162
|
*/
|
|
166
|
-
export function
|
|
163
|
+
export function dockerDevDriverMismatches(
|
|
167
164
|
config: OkeConfig,
|
|
168
165
|
stackRoles: readonly string[],
|
|
169
166
|
): readonly StackDriverMismatch[] {
|
|
170
167
|
const roles = new Set(stackRoles);
|
|
171
168
|
const out: StackDriverMismatch[] = [];
|
|
172
|
-
const
|
|
173
|
-
driverId(config.drivers?.store?.sql?.
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
driverId(config.drivers?.store?.kv?.stack) ??
|
|
177
|
-
driverId(config.drivers?.store?.kv?.prod);
|
|
169
|
+
const sqlDocker =
|
|
170
|
+
driverId(config.drivers?.store?.sql?.docker) ?? driverId(config.drivers?.store?.sql?.prod);
|
|
171
|
+
const kvDocker =
|
|
172
|
+
driverId(config.drivers?.store?.kv?.docker) ?? driverId(config.drivers?.store?.kv?.prod);
|
|
178
173
|
|
|
179
174
|
if (
|
|
180
175
|
roles.has("store.sql") &&
|
|
181
|
-
(
|
|
176
|
+
(sqlDocker === "sqlite" || sqlDocker === "memory" || sqlDocker === undefined)
|
|
182
177
|
) {
|
|
183
178
|
out.push({
|
|
184
179
|
label: "sql",
|
|
185
|
-
using:
|
|
180
|
+
using: sqlDocker ?? "unset",
|
|
186
181
|
container: "postgres",
|
|
187
182
|
});
|
|
188
183
|
}
|
|
189
|
-
if (
|
|
190
|
-
roles.has("store.kv") &&
|
|
191
|
-
(kvStack === "memory" || kvStack === undefined)
|
|
192
|
-
) {
|
|
184
|
+
if (roles.has("store.kv") && (kvDocker === "memory" || kvDocker === undefined)) {
|
|
193
185
|
out.push({
|
|
194
186
|
label: "kv",
|
|
195
|
-
using:
|
|
187
|
+
using: kvDocker ?? "memory",
|
|
196
188
|
container: "redis",
|
|
197
189
|
});
|
|
198
190
|
}
|
|
@@ -200,7 +192,17 @@ export function stackDevDriverMismatches(
|
|
|
200
192
|
}
|
|
201
193
|
|
|
202
194
|
/**
|
|
203
|
-
* @deprecated Use {@link
|
|
195
|
+
* @deprecated Use {@link dockerDevDriverMismatches} — kept for older call sites.
|
|
196
|
+
*/
|
|
197
|
+
export function stackDevDriverMismatches(
|
|
198
|
+
config: OkeConfig,
|
|
199
|
+
stackRoles: readonly string[],
|
|
200
|
+
): readonly StackDriverMismatch[] {
|
|
201
|
+
return dockerDevDriverMismatches(config, stackRoles);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* @deprecated Use {@link dockerDevDriverMismatches} — kept for older call sites.
|
|
204
206
|
* @param config - Loaded config
|
|
205
207
|
* @param stackRoles - Roles being composed
|
|
206
208
|
*/
|
|
@@ -208,7 +210,5 @@ export function stackDevDriverWarnings(
|
|
|
208
210
|
config: OkeConfig,
|
|
209
211
|
stackRoles: readonly string[],
|
|
210
212
|
): readonly string[] {
|
|
211
|
-
return
|
|
212
|
-
(m) => `${m.label}: ${m.using}`,
|
|
213
|
-
);
|
|
213
|
+
return dockerDevDriverMismatches(config, stackRoles).map((m) => `${m.label}: ${m.using}`);
|
|
214
214
|
}
|
|
@@ -4,10 +4,7 @@
|
|
|
4
4
|
* Used by `oke dev` so port 6535 is not a separate mock context.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
createFileDiff,
|
|
9
|
-
emitStructuralDiff,
|
|
10
|
-
} from "../console/server/structural.ts";
|
|
7
|
+
import { createFileDiff, emitStructuralDiff } from "../console/server/structural.ts";
|
|
11
8
|
import type { Manifest } from "../manifest/types.ts";
|
|
12
9
|
import type { WideEvent } from "../runs/types.ts";
|
|
13
10
|
import type { McpContext } from "../mcp/tools.ts";
|