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
|
@@ -6,26 +6,11 @@
|
|
|
6
6
|
* Never installs — hands a `bun add …` command for community packages.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import {
|
|
10
|
-
allHookCostSummaries,
|
|
11
|
-
type HookCostSummary,
|
|
12
|
-
} from "../../kernel/hook-timing.ts";
|
|
9
|
+
import { allHookCostSummaries, type HookCostSummary } from "../../kernel/hook-timing.ts";
|
|
13
10
|
import type { PluginRegistry } from "../../kernel/registry.ts";
|
|
14
|
-
import type {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
Plugin,
|
|
18
|
-
PluginOrigin,
|
|
19
|
-
} from "../../manifest/types.ts";
|
|
20
|
-
import {
|
|
21
|
-
CORE_PLUGINS,
|
|
22
|
-
isCorePluginOn,
|
|
23
|
-
type PluginConfigProbe,
|
|
24
|
-
} from "../../plugins/catalogue.ts";
|
|
25
|
-
import type {
|
|
26
|
-
PackageJsonProbe,
|
|
27
|
-
SupplyChainSignals,
|
|
28
|
-
} from "../../plugins/supply-chain.ts";
|
|
11
|
+
import type { Manifest, ManifestChange, Plugin, PluginOrigin } from "../../manifest/types.ts";
|
|
12
|
+
import { CORE_PLUGINS, isCorePluginOn, type PluginConfigProbe } from "../../plugins/catalogue.ts";
|
|
13
|
+
import type { PackageJsonProbe, SupplyChainSignals } from "../../plugins/supply-chain.ts";
|
|
29
14
|
import type { ScanSourceFile } from "../../plugins/node-import-scan.ts";
|
|
30
15
|
|
|
31
16
|
/** Plugin on/off — derived, never a config flag. */
|
|
@@ -93,21 +78,15 @@ export interface ProjectPluginsOptions {
|
|
|
93
78
|
readonly cwd: string;
|
|
94
79
|
readonly now: () => number;
|
|
95
80
|
/** Injected capability-diff changes keyed by plugin id (tests). */
|
|
96
|
-
readonly capabilityDiffByPlugin?: Readonly<
|
|
97
|
-
Record<string, readonly ManifestChange[]>
|
|
98
|
-
>;
|
|
81
|
+
readonly capabilityDiffByPlugin?: Readonly<Record<string, readonly ManifestChange[]>>;
|
|
99
82
|
/** When true, run doctor merge-base diff (default true). */
|
|
100
83
|
readonly resolveCapabilityDiff?: boolean;
|
|
101
84
|
/** Injected hook cost summaries (tests). */
|
|
102
85
|
readonly hookCosts?: Readonly<Record<string, HookCostSummary>>;
|
|
103
86
|
/** Per-plugin sources for oxc scan. */
|
|
104
|
-
readonly sourcesByPlugin?: Readonly<
|
|
105
|
-
Record<string, readonly ScanSourceFile[]>
|
|
106
|
-
>;
|
|
87
|
+
readonly sourcesByPlugin?: Readonly<Record<string, readonly ScanSourceFile[]>>;
|
|
107
88
|
/** Per-plugin package.json injections (tests). */
|
|
108
|
-
readonly packageJsonByPlugin?: Readonly<
|
|
109
|
-
Record<string, PackageJsonProbe | null>
|
|
110
|
-
>;
|
|
89
|
+
readonly packageJsonByPlugin?: Readonly<Record<string, PackageJsonProbe | null>>;
|
|
111
90
|
/** Per-plugin boot conflicts. */
|
|
112
91
|
readonly bootConflictsByPlugin?: Readonly<Record<string, readonly string[]>>;
|
|
113
92
|
/** Skip npm network. */
|
|
@@ -143,12 +122,7 @@ export async function projectPluginsList(
|
|
|
143
122
|
const rows: ConsolePluginRow[] = [];
|
|
144
123
|
|
|
145
124
|
for (const spec of CORE_PLUGINS) {
|
|
146
|
-
const on = isCorePluginOn(
|
|
147
|
-
spec.id,
|
|
148
|
-
options.manifest,
|
|
149
|
-
options.config,
|
|
150
|
-
new Set(plugged.keys()),
|
|
151
|
-
);
|
|
125
|
+
const on = isCorePluginOn(spec.id, options.manifest, options.config, new Set(plugged.keys()));
|
|
152
126
|
const meta = plugged.get(spec.id);
|
|
153
127
|
const manifestPlugin = options.manifest?.plugins?.[spec.id];
|
|
154
128
|
rows.push(
|
|
@@ -242,12 +216,8 @@ function collectPlugged(
|
|
|
242
216
|
const scopes = [...(prev?.scopes ?? []), scope];
|
|
243
217
|
out.set(id, {
|
|
244
218
|
version: caps.version ?? prev?.version ?? null,
|
|
245
|
-
declares: caps.declares.length
|
|
246
|
-
|
|
247
|
-
: (prev?.declares ?? []),
|
|
248
|
-
intercepts: caps.intercepts.length
|
|
249
|
-
? [...caps.intercepts]
|
|
250
|
-
: (prev?.intercepts ?? []),
|
|
219
|
+
declares: caps.declares.length ? [...caps.declares] : (prev?.declares ?? []),
|
|
220
|
+
intercepts: caps.intercepts.length ? [...caps.intercepts] : (prev?.intercepts ?? []),
|
|
251
221
|
scopes,
|
|
252
222
|
origin: prev?.origin,
|
|
253
223
|
});
|
|
@@ -280,13 +250,10 @@ async function buildRow(input: {
|
|
|
280
250
|
readonly options: ProjectPluginsOptions;
|
|
281
251
|
readonly enableHint: string | null;
|
|
282
252
|
}): Promise<ConsolePluginRow> {
|
|
283
|
-
const packageName =
|
|
284
|
-
input.origin === "community" ? communityPackageName(input.id) : null;
|
|
253
|
+
const packageName = input.origin === "community" ? communityPackageName(input.id) : null;
|
|
285
254
|
const cost = input.costs[input.id] ?? null;
|
|
286
255
|
const intercepts = input.interceptStages.map((stage) => {
|
|
287
|
-
const stageCost = cost?.byStage[
|
|
288
|
-
stage as keyof NonNullable<typeof cost>["byStage"]
|
|
289
|
-
];
|
|
256
|
+
const stageCost = cost?.byStage[stage as keyof NonNullable<typeof cost>["byStage"]];
|
|
290
257
|
return {
|
|
291
258
|
stage,
|
|
292
259
|
meanMs: stageCost?.meanMs ?? null,
|
|
@@ -305,9 +272,8 @@ async function buildRow(input: {
|
|
|
305
272
|
fetchNpm: input.options.fetchNpm,
|
|
306
273
|
};
|
|
307
274
|
|
|
308
|
-
const { projectSupplyChain, projectSupplyChainSync } =
|
|
309
|
-
"../../plugins/supply-chain.ts"
|
|
310
|
-
);
|
|
275
|
+
const { projectSupplyChain, projectSupplyChainSync } =
|
|
276
|
+
await import("../../plugins/supply-chain.ts");
|
|
311
277
|
const supplyChain = input.options.syncSupplyChain
|
|
312
278
|
? projectSupplyChainSync(supplyOpts)
|
|
313
279
|
: await projectSupplyChain(supplyOpts);
|
|
@@ -337,10 +303,7 @@ async function buildRow(input: {
|
|
|
337
303
|
kind: c.kind,
|
|
338
304
|
summary: c.summary,
|
|
339
305
|
})),
|
|
340
|
-
installCommand:
|
|
341
|
-
input.origin === "community" && packageName
|
|
342
|
-
? `bun add ${packageName}`
|
|
343
|
-
: null,
|
|
306
|
+
installCommand: input.origin === "community" && packageName ? `bun add ${packageName}` : null,
|
|
344
307
|
enableHint: input.enableHint,
|
|
345
308
|
packageName,
|
|
346
309
|
};
|
|
@@ -400,9 +363,7 @@ export function filterCapabilityDiffForPlugin(
|
|
|
400
363
|
pluginId: string,
|
|
401
364
|
): readonly ManifestChange[] {
|
|
402
365
|
const prefix = `/plugins/${pluginId}`;
|
|
403
|
-
return changes.filter(
|
|
404
|
-
(c) => c.path === prefix || c.path.startsWith(`${prefix}/`),
|
|
405
|
-
);
|
|
366
|
+
return changes.filter((c) => c.path === prefix || c.path.startsWith(`${prefix}/`));
|
|
406
367
|
}
|
|
407
368
|
|
|
408
369
|
function communityPackageName(id: string): string {
|
|
@@ -421,7 +382,7 @@ function enableHintForCore(id: string, on: boolean): string | null {
|
|
|
421
382
|
case "rate-limit":
|
|
422
383
|
return "app.plug(rateLimit({ max: 30 })) // or unit.plug / flow.plug";
|
|
423
384
|
case "tenancy":
|
|
424
|
-
return
|
|
385
|
+
return 'oke.config.ts → tenancy: { isolation: "row", resolve: … }';
|
|
425
386
|
case "privacy":
|
|
426
387
|
return "oke.config.ts → privacy: { … } // or runs: { redact: { … } }";
|
|
427
388
|
default:
|
|
@@ -39,9 +39,7 @@ export function piiFieldNamesFromManifest(
|
|
|
39
39
|
"pii" in tags &&
|
|
40
40
|
(tags as { pii?: boolean }).pii
|
|
41
41
|
) {
|
|
42
|
-
const col = key.includes(".")
|
|
43
|
-
? key.slice(key.lastIndexOf(".") + 1)
|
|
44
|
-
: key;
|
|
42
|
+
const col = key.includes(".") ? key.slice(key.lastIndexOf(".") + 1) : key;
|
|
45
43
|
names.add(col);
|
|
46
44
|
}
|
|
47
45
|
}
|
|
@@ -88,10 +86,7 @@ export function maskWideEventForConsole(
|
|
|
88
86
|
if (line.data === undefined) return line;
|
|
89
87
|
return {
|
|
90
88
|
...line,
|
|
91
|
-
data: maskPiiRecord(
|
|
92
|
-
line.data as Record<string, unknown>,
|
|
93
|
-
piiFields,
|
|
94
|
-
),
|
|
89
|
+
data: maskPiiRecord(line.data as Record<string, unknown>, piiFields),
|
|
95
90
|
};
|
|
96
91
|
});
|
|
97
92
|
return { ...event, dimensions, logs };
|
|
@@ -17,18 +17,12 @@ import type { WideEvent } from "../../runs/types.ts";
|
|
|
17
17
|
import type { ConsoleAppHandle } from "./app.ts";
|
|
18
18
|
import { AUTH_RATE_LIMIT } from "./auth-rate.ts";
|
|
19
19
|
import { projectRun } from "./flows.ts";
|
|
20
|
-
import {
|
|
21
|
-
maskWideEventForConsole,
|
|
22
|
-
piiFieldNamesFromManifest,
|
|
23
|
-
} from "./runs-pii.ts";
|
|
20
|
+
import { maskWideEventForConsole, piiFieldNamesFromManifest } from "./runs-pii.ts";
|
|
24
21
|
import { startConsoleApp } from "./serve.ts";
|
|
25
22
|
|
|
26
23
|
/** Deduplicate console.* flows from the live binding registry. */
|
|
27
24
|
function consoleFlows(handle: ConsoleAppHandle) {
|
|
28
|
-
const byName = new Map<
|
|
29
|
-
string,
|
|
30
|
-
{ readonly name: string; readonly plane: string | undefined }
|
|
31
|
-
>();
|
|
25
|
+
const byName = new Map<string, { readonly name: string; readonly plane: string | undefined }>();
|
|
32
26
|
for (const binding of handle.app.bindings) {
|
|
33
27
|
const name = binding.flow.name;
|
|
34
28
|
if (!name.startsWith("console.")) continue;
|
|
@@ -106,19 +100,14 @@ describe("console security gates (whole surface)", () => {
|
|
|
106
100
|
const failures: string[] = [];
|
|
107
101
|
for (const binding of handle.app.bindings) {
|
|
108
102
|
if (!binding.flow.name.startsWith("console.")) continue;
|
|
109
|
-
const result = await handle.app.execute(
|
|
110
|
-
|
|
111
|
-
{
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
principal: {
|
|
116
|
-
plane: "user",
|
|
117
|
-
userId: "user-plane-1",
|
|
118
|
-
scopes: ["bookings:create"],
|
|
119
|
-
},
|
|
103
|
+
const result = await handle.app.execute(binding.flow, {}, binding.trigger, {
|
|
104
|
+
validated: true,
|
|
105
|
+
principal: {
|
|
106
|
+
plane: "user",
|
|
107
|
+
userId: "user-plane-1",
|
|
108
|
+
scopes: ["bookings:create"],
|
|
120
109
|
},
|
|
121
|
-
);
|
|
110
|
+
});
|
|
122
111
|
const code = result.failure?.error?.code;
|
|
123
112
|
if (code !== "Forbidden") {
|
|
124
113
|
failures.push(`${binding.flow.name} → ${code ?? "no-failure"}`);
|
|
@@ -197,29 +186,20 @@ describe("console security gates (whole surface)", () => {
|
|
|
197
186
|
|
|
198
187
|
test("7. every registered console.* flow leaves a Runs entry when executed", async () => {
|
|
199
188
|
const flows = consoleFlows(handle);
|
|
200
|
-
const before = new Set(
|
|
201
|
-
(await handle.state.listRuns()).map((r: WideEvent) => r.flow),
|
|
202
|
-
);
|
|
189
|
+
const before = new Set((await handle.state.listRuns()).map((r: WideEvent) => r.flow));
|
|
203
190
|
|
|
204
191
|
for (const flowMeta of flows) {
|
|
205
192
|
if (before.has(flowMeta.name)) continue;
|
|
206
|
-
const binding = handle.app.bindings.find(
|
|
207
|
-
(b: Binding) => b.flow.name === flowMeta.name,
|
|
208
|
-
);
|
|
193
|
+
const binding = handle.app.bindings.find((b: Binding) => b.flow.name === flowMeta.name);
|
|
209
194
|
expect(binding).toBeDefined();
|
|
210
195
|
try {
|
|
211
|
-
await handle.app.execute(
|
|
212
|
-
|
|
213
|
-
{
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
validated: true,
|
|
217
|
-
principal: {
|
|
218
|
-
plane: "operator",
|
|
219
|
-
operatorId,
|
|
220
|
-
},
|
|
196
|
+
await handle.app.execute(binding!.flow, {}, binding!.trigger, {
|
|
197
|
+
validated: true,
|
|
198
|
+
principal: {
|
|
199
|
+
plane: "operator",
|
|
200
|
+
operatorId,
|
|
221
201
|
},
|
|
222
|
-
);
|
|
202
|
+
});
|
|
223
203
|
} catch {
|
|
224
204
|
// Handler throws still record a wide event (pipeline catches).
|
|
225
205
|
}
|
|
@@ -227,9 +207,7 @@ describe("console security gates (whole surface)", () => {
|
|
|
227
207
|
|
|
228
208
|
const after = await handle.state.listRuns();
|
|
229
209
|
const names = new Set(after.map((r: WideEvent) => r.flow));
|
|
230
|
-
const missing = flows
|
|
231
|
-
.map((f) => f.name)
|
|
232
|
-
.filter((name) => !names.has(name));
|
|
210
|
+
const missing = flows.map((f) => f.name).filter((name) => !names.has(name));
|
|
233
211
|
expect(missing).toEqual([]);
|
|
234
212
|
});
|
|
235
213
|
|
|
@@ -83,8 +83,9 @@ export async function serveConsole(
|
|
|
83
83
|
: {}),
|
|
84
84
|
});
|
|
85
85
|
|
|
86
|
+
// Console serve `"dev"` is the auth/session flavor — ConfigEnv uses `local`.
|
|
86
87
|
const env = options.env ?? "dev";
|
|
87
|
-
await handle.app.boot({ env });
|
|
88
|
+
await handle.app.boot({ env: env === "dev" ? "local" : env });
|
|
88
89
|
handle.state.listRuns = async () => {
|
|
89
90
|
const runs = handle.app.bootResult?.runs;
|
|
90
91
|
if (!runs) return [];
|
|
@@ -94,8 +95,7 @@ export async function serveConsole(
|
|
|
94
95
|
await bindManifestStoreRuntime(handle.state);
|
|
95
96
|
await bindManifestVaultRuntime(handle.state);
|
|
96
97
|
|
|
97
|
-
const staticDir =
|
|
98
|
-
options.staticDir ?? new URL("../ui/dist/", import.meta.url).pathname;
|
|
98
|
+
const staticDir = options.staticDir ?? new URL("../ui/dist/", import.meta.url).pathname;
|
|
99
99
|
|
|
100
100
|
const live = createLiveWebsocket(handle.state);
|
|
101
101
|
const allowed = resolveAllowedHosts(hostname, options.allowedHosts);
|
|
@@ -112,9 +112,7 @@ export async function serveConsole(
|
|
|
112
112
|
const authed = withCookieAuth(request);
|
|
113
113
|
|
|
114
114
|
if (url.pathname.startsWith("/console/")) {
|
|
115
|
-
const response = await runWithDevSurface("Console", () =>
|
|
116
|
-
handle.app.fetch(authed),
|
|
117
|
-
);
|
|
115
|
+
const response = await runWithDevSurface("Console", () => handle.app.fetch(authed));
|
|
118
116
|
const withCookies = await attachSessionCookies(authed, response);
|
|
119
117
|
return withConsoleSecurityHeaders(withCookies);
|
|
120
118
|
}
|
|
@@ -172,9 +170,7 @@ export async function serveConsole(
|
|
|
172
170
|
const boundPort = server.port ?? port;
|
|
173
171
|
const boundHost = server.hostname ?? hostname;
|
|
174
172
|
const hostForUrl =
|
|
175
|
-
boundHost.includes(":") && !boundHost.startsWith("[")
|
|
176
|
-
? `[${boundHost}]`
|
|
177
|
-
: boundHost;
|
|
173
|
+
boundHost.includes(":") && !boundHost.startsWith("[") ? `[${boundHost}]` : boundHost;
|
|
178
174
|
const url = new URL(`http://${hostForUrl}:${boundPort}/`);
|
|
179
175
|
|
|
180
176
|
return {
|
|
@@ -238,9 +234,7 @@ export function withCookieAuth(request: Request): Request {
|
|
|
238
234
|
return request;
|
|
239
235
|
}
|
|
240
236
|
const cookie = request.headers.get("cookie") ?? "";
|
|
241
|
-
const match = cookie.match(
|
|
242
|
-
new RegExp(`(?:^|;\\s*)${CONSOLE_COOKIES.access}=([^;]+)`),
|
|
243
|
-
);
|
|
237
|
+
const match = cookie.match(new RegExp(`(?:^|;\\s*)${CONSOLE_COOKIES.access}=([^;]+)`));
|
|
244
238
|
if (!match?.[1]) return request;
|
|
245
239
|
const token = decodeURIComponent(match[1]);
|
|
246
240
|
const headers = new Headers(request.headers);
|
|
@@ -261,8 +255,7 @@ export async function attachSessionCookies(
|
|
|
261
255
|
if (response.status >= 400) return response;
|
|
262
256
|
const url = new URL(request.url);
|
|
263
257
|
const isSessionIssue =
|
|
264
|
-
url.pathname === "/console/setup/claim" ||
|
|
265
|
-
url.pathname === "/console/session/login";
|
|
258
|
+
url.pathname === "/console/setup/claim" || url.pathname === "/console/session/login";
|
|
266
259
|
const isLogout = url.pathname === "/console/session/logout";
|
|
267
260
|
if (!isSessionIssue && !isLogout) return response;
|
|
268
261
|
|
|
@@ -277,10 +270,7 @@ export async function attachSessionCookies(
|
|
|
277
270
|
|
|
278
271
|
const headers = new Headers(response.headers);
|
|
279
272
|
if (isLogout) {
|
|
280
|
-
headers.append(
|
|
281
|
-
"Set-Cookie",
|
|
282
|
-
consoleSessionCookie(CONSOLE_COOKIES.access, "", { clear: true }),
|
|
283
|
-
);
|
|
273
|
+
headers.append("Set-Cookie", consoleSessionCookie(CONSOLE_COOKIES.access, "", { clear: true }));
|
|
284
274
|
headers.append(
|
|
285
275
|
"Set-Cookie",
|
|
286
276
|
consoleSessionCookie(CONSOLE_COOKIES.refresh, "", { clear: true }),
|
|
@@ -305,10 +295,7 @@ export async function attachSessionCookies(
|
|
|
305
295
|
});
|
|
306
296
|
}
|
|
307
297
|
|
|
308
|
-
async function serveStatic(
|
|
309
|
-
staticDir: string,
|
|
310
|
-
pathname: string,
|
|
311
|
-
): Promise<Response | null> {
|
|
298
|
+
async function serveStatic(staticDir: string, pathname: string): Promise<Response | null> {
|
|
312
299
|
if (pathname.includes("..")) return null;
|
|
313
300
|
const path = pathname === "/" ? "index.html" : pathname.replace(/^\//, "");
|
|
314
301
|
const file = Bun.file(`${staticDir}${path}`);
|
|
@@ -317,9 +304,7 @@ async function serveStatic(
|
|
|
317
304
|
}
|
|
318
305
|
|
|
319
306
|
function pluginFrameResponse(pathname: string): Response {
|
|
320
|
-
const id = pathname
|
|
321
|
-
.slice("/plugin-frame/".length)
|
|
322
|
-
.replace(/[^a-z0-9_-]/gi, "");
|
|
307
|
+
const id = pathname.slice("/plugin-frame/".length).replace(/[^a-z0-9_-]/gi, "");
|
|
323
308
|
const html = `<!doctype html>
|
|
324
309
|
<html lang="en">
|
|
325
310
|
<head>
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { describe, expect, test } from "bun:test";
|
|
2
2
|
import { memorySignalDriver } from "../../drivers/signal-memory.ts";
|
|
3
3
|
import { signal } from "../../elements/signal/declare.ts";
|
|
4
|
-
import {
|
|
5
|
-
createMemorySignalConfigStore,
|
|
6
|
-
} from "../../elements/signal/reconcile.ts";
|
|
4
|
+
import { createMemorySignalConfigStore } from "../../elements/signal/reconcile.ts";
|
|
7
5
|
import { createSignalRuntime } from "../../elements/signal/runtime.ts";
|
|
8
6
|
import type { Manifest } from "../../manifest/types.ts";
|
|
9
7
|
import { projectSignalsList } from "./signals.ts";
|
|
@@ -13,10 +13,7 @@ import type {
|
|
|
13
13
|
SignalReplayResult,
|
|
14
14
|
SignalStats,
|
|
15
15
|
} from "../../drivers/signal-types.ts";
|
|
16
|
-
import type {
|
|
17
|
-
SignalConfigRow,
|
|
18
|
-
SignalConfigStore,
|
|
19
|
-
} from "../../elements/signal/reconcile.ts";
|
|
16
|
+
import type { SignalConfigRow, SignalConfigStore } from "../../elements/signal/reconcile.ts";
|
|
20
17
|
import { reconcileSignals } from "../../elements/signal/reconcile.ts";
|
|
21
18
|
import { signal as declareSignal } from "../../elements/signal/declare.ts";
|
|
22
19
|
|
|
@@ -84,15 +81,14 @@ export interface ProjectSignalsOptions {
|
|
|
84
81
|
export async function projectSignalsList(
|
|
85
82
|
options: ProjectSignalsOptions,
|
|
86
83
|
): Promise<readonly ConsoleSignalRow[]> {
|
|
87
|
-
const declared = Object.entries(options.manifest?.signals ?? {}).map(
|
|
88
|
-
(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}),
|
|
84
|
+
const declared = Object.entries(options.manifest?.signals ?? {}).map(([name, s]) =>
|
|
85
|
+
declareSignal(name, {
|
|
86
|
+
delivery: s.delivery,
|
|
87
|
+
retries: s.retries,
|
|
88
|
+
deadLetter: s.deadLetter,
|
|
89
|
+
schema: s.schema,
|
|
90
|
+
optional: s.optional,
|
|
91
|
+
}),
|
|
96
92
|
);
|
|
97
93
|
const reconciled = await reconcileSignals(declared, options.config);
|
|
98
94
|
const statsByName = new Map<string, SignalStats>();
|
|
@@ -109,10 +105,7 @@ export async function projectSignalsList(
|
|
|
109
105
|
const stats = statsByName.get(cfg.name);
|
|
110
106
|
const producers = producersOf(cfg.name, flows);
|
|
111
107
|
const consumers = consumersOf(cfg.name, flows);
|
|
112
|
-
const consumersDurable =
|
|
113
|
-
consumers.length === 0
|
|
114
|
-
? null
|
|
115
|
-
: consumers.every((c) => c.durable);
|
|
108
|
+
const consumersDurable = consumers.length === 0 ? null : consumers.every((c) => c.durable);
|
|
116
109
|
|
|
117
110
|
// Attach causal run ids onto dead letters when a matching emit exists.
|
|
118
111
|
const deadLetters = (stats?.deadLetters ?? []).map((dl) =>
|
|
@@ -165,13 +158,10 @@ export async function projectSignalsList(
|
|
|
165
158
|
schema: stats.schema,
|
|
166
159
|
subscribers: [...stats.subscribers],
|
|
167
160
|
recentLive: [...stats.recentLive],
|
|
168
|
-
deadLetters: stats.deadLetters.map((dl) =>
|
|
169
|
-
withCause(dl, name, options.runs),
|
|
170
|
-
),
|
|
161
|
+
deadLetters: stats.deadLetters.map((dl) => withCause(dl, name, options.runs)),
|
|
171
162
|
producers,
|
|
172
163
|
consumers,
|
|
173
|
-
consumersDurable:
|
|
174
|
-
consumers.length === 0 ? null : consumers.every((c) => c.durable),
|
|
164
|
+
consumersDurable: consumers.length === 0 ? null : consumers.every((c) => c.durable),
|
|
175
165
|
});
|
|
176
166
|
}
|
|
177
167
|
|
|
@@ -208,10 +198,7 @@ export async function discardViaBus(
|
|
|
208
198
|
return bus.discard(options);
|
|
209
199
|
}
|
|
210
200
|
|
|
211
|
-
function producersOf(
|
|
212
|
-
signalName: string,
|
|
213
|
-
flows: NonNullable<Manifest["flows"]>,
|
|
214
|
-
): SignalEndpoint[] {
|
|
201
|
+
function producersOf(signalName: string, flows: NonNullable<Manifest["flows"]>): SignalEndpoint[] {
|
|
215
202
|
const out: SignalEndpoint[] = [];
|
|
216
203
|
for (const [flowId, flow] of Object.entries(flows)) {
|
|
217
204
|
if (flow.effects?.emits?.includes(signalName)) {
|
|
@@ -221,10 +208,7 @@ function producersOf(
|
|
|
221
208
|
return out;
|
|
222
209
|
}
|
|
223
210
|
|
|
224
|
-
function consumersOf(
|
|
225
|
-
signalName: string,
|
|
226
|
-
flows: NonNullable<Manifest["flows"]>,
|
|
227
|
-
): SignalEndpoint[] {
|
|
211
|
+
function consumersOf(signalName: string, flows: NonNullable<Manifest["flows"]>): SignalEndpoint[] {
|
|
228
212
|
const out: SignalEndpoint[] = [];
|
|
229
213
|
for (const [flowId, flow] of Object.entries(flows)) {
|
|
230
214
|
if (flow.trigger?.signal === signalName) {
|
|
@@ -234,10 +218,7 @@ function consumersOf(
|
|
|
234
218
|
return out;
|
|
235
219
|
}
|
|
236
220
|
|
|
237
|
-
function endpoint(
|
|
238
|
-
flowId: string,
|
|
239
|
-
flow: NonNullable<Manifest["flows"]>[string],
|
|
240
|
-
): SignalEndpoint {
|
|
221
|
+
function endpoint(flowId: string, flow: NonNullable<Manifest["flows"]>[string]): SignalEndpoint {
|
|
241
222
|
return {
|
|
242
223
|
flowId,
|
|
243
224
|
durable: flow.durable === true,
|
|
@@ -246,9 +227,7 @@ function endpoint(
|
|
|
246
227
|
};
|
|
247
228
|
}
|
|
248
229
|
|
|
249
|
-
function peakTierOf(
|
|
250
|
-
flow: NonNullable<Manifest["flows"]>[string],
|
|
251
|
-
): SignalEndpoint["peakTier"] {
|
|
230
|
+
function peakTierOf(flow: NonNullable<Manifest["flows"]>[string]): SignalEndpoint["peakTier"] {
|
|
252
231
|
const e = flow.effects;
|
|
253
232
|
if (!e) return "none";
|
|
254
233
|
if ((e.sends?.length ?? 0) > 0 || (e.asks?.length ?? 0) > 0) return "external";
|
|
@@ -266,9 +245,7 @@ function withCause(
|
|
|
266
245
|
): DeadLetter & { readonly causeRunId?: string; readonly causeFlow?: string } {
|
|
267
246
|
if (!runs || runs.length === 0) return dl;
|
|
268
247
|
const match = runs.find((r) =>
|
|
269
|
-
r.effects.some(
|
|
270
|
-
(e) => e.kind === "emit" && e.resource === signalName,
|
|
271
|
-
),
|
|
248
|
+
r.effects.some((e) => e.kind === "emit" && e.resource === signalName),
|
|
272
249
|
);
|
|
273
250
|
if (!match) return dl;
|
|
274
251
|
return {
|
|
@@ -26,11 +26,7 @@ import type {
|
|
|
26
26
|
SignalReplayOptions,
|
|
27
27
|
SignalReplayResult,
|
|
28
28
|
} from "../../drivers/signal-types.ts";
|
|
29
|
-
import type {
|
|
30
|
-
AgentToolEffect,
|
|
31
|
-
AiRuntime,
|
|
32
|
-
EvalSuiteResult,
|
|
33
|
-
} from "../../elements/ai.ts";
|
|
29
|
+
import type { AgentToolEffect, AiRuntime, EvalSuiteResult } from "../../elements/ai.ts";
|
|
34
30
|
import {
|
|
35
31
|
createMemorySignalConfigStore,
|
|
36
32
|
type SignalConfigStore,
|
|
@@ -38,10 +34,7 @@ import {
|
|
|
38
34
|
import type { Manifest } from "../../manifest/types.ts";
|
|
39
35
|
import type { WideEvent } from "../../runs/types.ts";
|
|
40
36
|
import type { ConsoleAiProjection } from "./ai.ts";
|
|
41
|
-
import {
|
|
42
|
-
createLoginAttemptBag,
|
|
43
|
-
type LoginAttemptBag,
|
|
44
|
-
} from "./auth-rate.ts";
|
|
37
|
+
import { createLoginAttemptBag, type LoginAttemptBag } from "./auth-rate.ts";
|
|
45
38
|
import { mintClaimCode, type ClaimCodeState } from "./claim.ts";
|
|
46
39
|
import type { ConsoleSignalRow } from "./signals.ts";
|
|
47
40
|
import type {
|
|
@@ -68,19 +61,12 @@ import {
|
|
|
68
61
|
import type { ConsoleVaultRow, VaultWriteInput } from "./vault.ts";
|
|
69
62
|
import type { ChannelInbox } from "../../drivers/channel-types.ts";
|
|
70
63
|
import type { ChannelRuntime, TemplateCatalog } from "../../elements/channel.ts";
|
|
71
|
-
import type {
|
|
72
|
-
ConsoleChannelPreview,
|
|
73
|
-
ConsoleChannelsList,
|
|
74
|
-
EmailAuthResult,
|
|
75
|
-
} from "./channels.ts";
|
|
64
|
+
import type { ConsoleChannelPreview, ConsoleChannelsList, EmailAuthResult } from "./channels.ts";
|
|
76
65
|
import type { OkeConfig } from "../../config/index.ts";
|
|
77
66
|
import type { PluginRegistry } from "../../kernel/registry.ts";
|
|
78
67
|
import type { ConsolePluginsList } from "./plugins.ts";
|
|
79
68
|
import type { ConsoleDiffProjection } from "./diff.ts";
|
|
80
|
-
import {
|
|
81
|
-
loadConsolePanel,
|
|
82
|
-
type ConsolePanelId,
|
|
83
|
-
} from "./panel-load.ts";
|
|
69
|
+
import { loadConsolePanel, type ConsolePanelId } from "./panel-load.ts";
|
|
84
70
|
|
|
85
71
|
/** User-plane identity row for the Flows invoke-as picker. */
|
|
86
72
|
export interface ConsoleIdentity {
|
|
@@ -192,9 +178,7 @@ export interface ConsoleState {
|
|
|
192
178
|
/** Replay / dry-run via the real bus. */
|
|
193
179
|
replaySignals: (options: SignalReplayOptions) => Promise<SignalReplayResult>;
|
|
194
180
|
/** Discard dead letters via the real bus. */
|
|
195
|
-
discardSignals: (
|
|
196
|
-
options: SignalDiscardOptions,
|
|
197
|
-
) => Promise<{ readonly discarded: number }>;
|
|
181
|
+
discardSignals: (options: SignalDiscardOptions) => Promise<{ readonly discarded: number }>;
|
|
198
182
|
/**
|
|
199
183
|
* Live store runtime. Bound after boot from Manifest (memory default)
|
|
200
184
|
* or host injection.
|
|
@@ -214,13 +198,9 @@ export interface ConsoleState {
|
|
|
214
198
|
options?: { readonly dryRun?: boolean },
|
|
215
199
|
) => Promise<StoreEditResult>;
|
|
216
200
|
/** Delete rows/keys. */
|
|
217
|
-
deleteStore: (
|
|
218
|
-
input: StoreDeleteInput,
|
|
219
|
-
) => Promise<{ readonly deleted: number }>;
|
|
201
|
+
deleteStore: (input: StoreDeleteInput) => Promise<{ readonly deleted: number }>;
|
|
220
202
|
/** Purge cache keys for a resource. */
|
|
221
|
-
purgeStoreCache: (
|
|
222
|
-
resource: ResourceRef,
|
|
223
|
-
) => Promise<{ readonly keys: readonly string[] }>;
|
|
203
|
+
purgeStoreCache: (resource: ResourceRef) => Promise<{ readonly keys: readonly string[] }>;
|
|
224
204
|
/** Raw SQL console. */
|
|
225
205
|
runStoreSql: (
|
|
226
206
|
ref: ResourceRef,
|
|
@@ -247,9 +227,11 @@ export interface ConsoleState {
|
|
|
247
227
|
/** Pause a cron. */
|
|
248
228
|
pauseCron: (name: string) => Promise<{ readonly name: string; readonly status: string }>;
|
|
249
229
|
/** Edit overridable schedule. */
|
|
250
|
-
editSchedule: (
|
|
251
|
-
|
|
252
|
-
|
|
230
|
+
editSchedule: (input: EditScheduleInput) => Promise<{
|
|
231
|
+
readonly name: string;
|
|
232
|
+
readonly effectiveCron?: string;
|
|
233
|
+
readonly effectiveEvery?: string;
|
|
234
|
+
}>;
|
|
253
235
|
/** Wake a sleeping durable run early and resume. */
|
|
254
236
|
wakeEarly: (runId: string) => Promise<{
|
|
255
237
|
readonly runId: string;
|
|
@@ -423,20 +405,15 @@ export interface CreateConsoleStateOptions {
|
|
|
423
405
|
*
|
|
424
406
|
* @param options - Secret, clock, cwd
|
|
425
407
|
*/
|
|
426
|
-
export function createConsoleState(
|
|
427
|
-
options: CreateConsoleStateOptions = {},
|
|
428
|
-
): ConsoleState {
|
|
408
|
+
export function createConsoleState(options: CreateConsoleStateOptions = {}): ConsoleState {
|
|
429
409
|
const secret =
|
|
430
|
-
options.secret ??
|
|
431
|
-
process.env.OKE_CONSOLE_SECRET ??
|
|
432
|
-
`oke-console-dev-${crypto.randomUUID()}`;
|
|
410
|
+
options.secret ?? process.env.OKE_CONSOLE_SECRET ?? `oke-console-dev-${crypto.randomUUID()}`;
|
|
433
411
|
const now = options.now ?? (() => Date.now());
|
|
434
412
|
const operators = options.operators ?? createOperatorStore();
|
|
435
413
|
const claim = mintClaimCode(now);
|
|
436
414
|
const sessions = options.sessions ?? createSessionStore();
|
|
437
415
|
const liveSubscribers = new Set<(msg: ConsoleLiveMessage) => void>();
|
|
438
|
-
const persistOperator =
|
|
439
|
-
options.persistOperator ?? ((_operatorId: string) => {});
|
|
416
|
+
const persistOperator = options.persistOperator ?? ((_operatorId: string) => {});
|
|
440
417
|
const persistSessions = options.persistSessions ?? (() => {});
|
|
441
418
|
|
|
442
419
|
const signalConfig = createMemorySignalConfigStore();
|
|
@@ -445,9 +422,7 @@ export function createConsoleState(
|
|
|
445
422
|
const constructed = new Set<ConsolePanelId>();
|
|
446
423
|
let accessSeeded = false;
|
|
447
424
|
|
|
448
|
-
const markPanel = async <T>(
|
|
449
|
-
id: ConsolePanelId,
|
|
450
|
-
): Promise<T> => {
|
|
425
|
+
const markPanel = async <T>(id: ConsolePanelId): Promise<T> => {
|
|
451
426
|
constructed.add(id);
|
|
452
427
|
return loadConsolePanel<T>(id);
|
|
453
428
|
};
|
|
@@ -901,10 +876,7 @@ export async function consoleEffectsForFlow(
|
|
|
901
876
|
* @param state - Console state
|
|
902
877
|
* @param message - Payload
|
|
903
878
|
*/
|
|
904
|
-
export function publishLive(
|
|
905
|
-
state: ConsoleState,
|
|
906
|
-
message: ConsoleLiveMessage,
|
|
907
|
-
): void {
|
|
879
|
+
export function publishLive(state: ConsoleState, message: ConsoleLiveMessage): void {
|
|
908
880
|
for (const sub of state.liveSubscribers) {
|
|
909
881
|
try {
|
|
910
882
|
sub(message);
|
|
@@ -937,10 +909,7 @@ export function setManifest(state: ConsoleState, manifest: Manifest): void {
|
|
|
937
909
|
* @param state - Console state
|
|
938
910
|
* @param runtime - Gate runtime
|
|
939
911
|
*/
|
|
940
|
-
export function bindGateRuntime(
|
|
941
|
-
state: ConsoleState,
|
|
942
|
-
runtime: GateRuntime,
|
|
943
|
-
): void {
|
|
912
|
+
export function bindGateRuntime(state: ConsoleState, runtime: GateRuntime): void {
|
|
944
913
|
state.gateRuntime = runtime;
|
|
945
914
|
}
|
|
946
915
|
|
|
@@ -949,21 +918,14 @@ export function bindGateRuntime(
|
|
|
949
918
|
*
|
|
950
919
|
* @param state - Console state
|
|
951
920
|
*/
|
|
952
|
-
export async function bindManifestGateRuntime(
|
|
953
|
-
state: ConsoleState,
|
|
954
|
-
): Promise<void> {
|
|
921
|
+
export async function bindManifestGateRuntime(state: ConsoleState): Promise<void> {
|
|
955
922
|
if (state.gateRuntime) return;
|
|
956
923
|
if (!state.manifest?.gates && !state.manifest?.flows) return;
|
|
957
924
|
const hasGates =
|
|
958
925
|
Object.keys(state.manifest.gates ?? {}).length > 0 ||
|
|
959
|
-
Object.values(state.manifest.flows ?? {}).some(
|
|
960
|
-
(f) => (f.gates?.length ?? 0) > 0,
|
|
961
|
-
);
|
|
926
|
+
Object.values(state.manifest.flows ?? {}).some((f) => (f.gates?.length ?? 0) > 0);
|
|
962
927
|
if (!hasGates) return;
|
|
963
|
-
const { runtime } = await createManifestGateRuntime(
|
|
964
|
-
state.manifest,
|
|
965
|
-
state.now,
|
|
966
|
-
);
|
|
928
|
+
const { runtime } = await createManifestGateRuntime(state.manifest, state.now);
|
|
967
929
|
state.gateRuntime = runtime;
|
|
968
930
|
}
|
|
969
931
|
|