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
package/src/manifest/diff.ts
CHANGED
|
@@ -41,15 +41,7 @@ const CATEGORY_RANK: Record<DiffCategory, number> = {
|
|
|
41
41
|
"no-impact": 0,
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
-
const EFFECT_KEYS = [
|
|
45
|
-
"reads",
|
|
46
|
-
"writes",
|
|
47
|
-
"emits",
|
|
48
|
-
"sends",
|
|
49
|
-
"asks",
|
|
50
|
-
"secrets",
|
|
51
|
-
"calls",
|
|
52
|
-
] as const;
|
|
44
|
+
const EFFECT_KEYS = ["reads", "writes", "emits", "sends", "asks", "secrets", "calls"] as const;
|
|
53
45
|
|
|
54
46
|
/** Isolation strength: higher = stronger tenant separation. */
|
|
55
47
|
const ISOLATION_RANK: Record<string, number> = {
|
|
@@ -61,10 +53,7 @@ const ISOLATION_RANK: Record<string, number> = {
|
|
|
61
53
|
/**
|
|
62
54
|
* Diff two manifests and classify every behavioural change.
|
|
63
55
|
*/
|
|
64
|
-
export function diffManifest(
|
|
65
|
-
before: Manifest,
|
|
66
|
-
after: Manifest,
|
|
67
|
-
): ManifestDiffResult {
|
|
56
|
+
export function diffManifest(before: Manifest, after: Manifest): ManifestDiffResult {
|
|
68
57
|
const changes: ManifestChange[] = [];
|
|
69
58
|
|
|
70
59
|
if (before.app !== after.app) {
|
|
@@ -123,9 +112,7 @@ export function diffManifest(
|
|
|
123
112
|
/**
|
|
124
113
|
* Highest blast-radius category among changes, or `null` if none.
|
|
125
114
|
*/
|
|
126
|
-
export function highestSeverity(
|
|
127
|
-
changes: readonly ManifestChange[],
|
|
128
|
-
): DiffCategory | null {
|
|
115
|
+
export function highestSeverity(changes: readonly ManifestChange[]): DiffCategory | null {
|
|
129
116
|
let best: DiffCategory | null = null;
|
|
130
117
|
for (const c of changes) {
|
|
131
118
|
if (best === null || CATEGORY_RANK[c.category] > CATEGORY_RANK[best]) {
|
|
@@ -165,14 +152,7 @@ function diffRecord<T>(
|
|
|
165
152
|
const path = `${base}/${escape(key)}`;
|
|
166
153
|
if (!aKeys.has(key)) {
|
|
167
154
|
out.push(
|
|
168
|
-
change(
|
|
169
|
-
path,
|
|
170
|
-
removedCategory,
|
|
171
|
-
"removed",
|
|
172
|
-
before![key],
|
|
173
|
-
undefined,
|
|
174
|
-
`removed ${path}`,
|
|
175
|
-
),
|
|
155
|
+
change(path, removedCategory, "removed", before![key], undefined, `removed ${path}`),
|
|
176
156
|
);
|
|
177
157
|
continue;
|
|
178
158
|
}
|
|
@@ -182,25 +162,11 @@ function diffRecord<T>(
|
|
|
182
162
|
for (const key of sorted(aKeys)) {
|
|
183
163
|
if (bKeys.has(key)) continue;
|
|
184
164
|
const path = `${base}/${escape(key)}`;
|
|
185
|
-
out.push(
|
|
186
|
-
change(
|
|
187
|
-
path,
|
|
188
|
-
addedCategory,
|
|
189
|
-
"added",
|
|
190
|
-
undefined,
|
|
191
|
-
after![key],
|
|
192
|
-
`added ${path}`,
|
|
193
|
-
),
|
|
194
|
-
);
|
|
165
|
+
out.push(change(path, addedCategory, "added", undefined, after![key], `added ${path}`));
|
|
195
166
|
}
|
|
196
167
|
}
|
|
197
168
|
|
|
198
|
-
function diffFlow(
|
|
199
|
-
before: Flow,
|
|
200
|
-
after: Flow,
|
|
201
|
-
path: string,
|
|
202
|
-
out: ManifestChange[],
|
|
203
|
-
): void {
|
|
169
|
+
function diffFlow(before: Flow, after: Flow, path: string, out: ManifestChange[]): void {
|
|
204
170
|
diffTrigger(before.trigger, after.trigger, `${path}/trigger`, out);
|
|
205
171
|
diffGatesList(before.gates, after.gates, `${path}/gates`, out);
|
|
206
172
|
diffContractSchema(before.in, after.in, `${path}/in`, "in", out);
|
|
@@ -228,11 +194,18 @@ function diffFlow(
|
|
|
228
194
|
);
|
|
229
195
|
}
|
|
230
196
|
|
|
231
|
-
if (
|
|
197
|
+
if (
|
|
198
|
+
before.durable !== after.durable &&
|
|
199
|
+
(before.durable !== undefined || after.durable !== undefined)
|
|
200
|
+
) {
|
|
232
201
|
out.push(
|
|
233
202
|
change(
|
|
234
203
|
`${path}/durable`,
|
|
235
|
-
after.durable === true
|
|
204
|
+
after.durable === true
|
|
205
|
+
? "effect-widening"
|
|
206
|
+
: before.durable === true
|
|
207
|
+
? "contract-breaking"
|
|
208
|
+
: "no-impact",
|
|
236
209
|
kindOf(before.durable, after.durable),
|
|
237
210
|
before.durable,
|
|
238
211
|
after.durable,
|
|
@@ -267,7 +240,10 @@ function diffFlow(
|
|
|
267
240
|
);
|
|
268
241
|
}
|
|
269
242
|
|
|
270
|
-
if (
|
|
243
|
+
if (
|
|
244
|
+
before.cacheKeys !== after.cacheKeys &&
|
|
245
|
+
(before.cacheKeys !== undefined || after.cacheKeys !== undefined)
|
|
246
|
+
) {
|
|
271
247
|
out.push(
|
|
272
248
|
change(
|
|
273
249
|
`${path}/cacheKeys`,
|
|
@@ -280,7 +256,10 @@ function diffFlow(
|
|
|
280
256
|
);
|
|
281
257
|
}
|
|
282
258
|
|
|
283
|
-
if (
|
|
259
|
+
if (
|
|
260
|
+
before.source !== after.source &&
|
|
261
|
+
(before.source !== undefined || after.source !== undefined)
|
|
262
|
+
) {
|
|
284
263
|
out.push(
|
|
285
264
|
change(
|
|
286
265
|
`${path}/source`,
|
|
@@ -421,9 +400,7 @@ function diffTrigger(
|
|
|
421
400
|
out.push(change(path, "contract-breaking", "removed", before, after, "trigger removed"));
|
|
422
401
|
return;
|
|
423
402
|
}
|
|
424
|
-
out.push(
|
|
425
|
-
change(path, "contract-breaking", "changed", before, after, "trigger changed"),
|
|
426
|
-
);
|
|
403
|
+
out.push(change(path, "contract-breaking", "changed", before, after, "trigger changed"));
|
|
427
404
|
}
|
|
428
405
|
|
|
429
406
|
function diffGatesList(
|
|
@@ -436,9 +413,7 @@ function diffGatesList(
|
|
|
436
413
|
const a = after ?? [];
|
|
437
414
|
if (setEqual(b, a) && listEqual(b, a)) return;
|
|
438
415
|
if (setEqual(b, a)) {
|
|
439
|
-
out.push(
|
|
440
|
-
change(path, "no-impact", "changed", b, a, "gates reordered"),
|
|
441
|
-
);
|
|
416
|
+
out.push(change(path, "no-impact", "changed", b, a, "gates reordered"));
|
|
442
417
|
return;
|
|
443
418
|
}
|
|
444
419
|
|
|
@@ -552,14 +527,23 @@ function diffContractSchema(
|
|
|
552
527
|
);
|
|
553
528
|
return;
|
|
554
529
|
}
|
|
555
|
-
if (
|
|
530
|
+
if (
|
|
531
|
+
schemaBreaksClients(before as Record<string, unknown>, after as Record<string, unknown>, role)
|
|
532
|
+
) {
|
|
556
533
|
out.push(
|
|
557
534
|
change(path, "contract-breaking", "changed", before, after, `${role} schema contract broke`),
|
|
558
535
|
);
|
|
559
536
|
return;
|
|
560
537
|
}
|
|
561
538
|
out.push(
|
|
562
|
-
change(
|
|
539
|
+
change(
|
|
540
|
+
path,
|
|
541
|
+
"no-impact",
|
|
542
|
+
"changed",
|
|
543
|
+
before,
|
|
544
|
+
after,
|
|
545
|
+
`${role} schema changed without client break`,
|
|
546
|
+
),
|
|
563
547
|
);
|
|
564
548
|
}
|
|
565
549
|
|
|
@@ -598,12 +582,7 @@ function diffErrors(
|
|
|
598
582
|
);
|
|
599
583
|
}
|
|
600
584
|
|
|
601
|
-
if (
|
|
602
|
-
before &&
|
|
603
|
-
after &&
|
|
604
|
-
!Array.isArray(before) &&
|
|
605
|
-
!Array.isArray(after)
|
|
606
|
-
) {
|
|
585
|
+
if (before && after && !Array.isArray(before) && !Array.isArray(after)) {
|
|
607
586
|
for (const name of intersection(bNames, aNames)) {
|
|
608
587
|
if (!deepEqual(before[name], after[name])) {
|
|
609
588
|
out.push(
|
|
@@ -619,9 +598,7 @@ function diffErrors(
|
|
|
619
598
|
}
|
|
620
599
|
}
|
|
621
600
|
} else if (setEqual(bNames, aNames) && !deepEqual(before, after)) {
|
|
622
|
-
out.push(
|
|
623
|
-
change(path, "no-impact", "changed", before, after, "errors reordered"),
|
|
624
|
-
);
|
|
601
|
+
out.push(change(path, "no-impact", "changed", before, after, "errors reordered"));
|
|
625
602
|
}
|
|
626
603
|
}
|
|
627
604
|
|
|
@@ -636,16 +613,7 @@ function diffEffects(
|
|
|
636
613
|
const a = after?.[key] ?? [];
|
|
637
614
|
if (setEqual(b, a)) {
|
|
638
615
|
if (!listEqual(b, a) && b.length > 0) {
|
|
639
|
-
out.push(
|
|
640
|
-
change(
|
|
641
|
-
`${path}/${key}`,
|
|
642
|
-
"no-impact",
|
|
643
|
-
"changed",
|
|
644
|
-
b,
|
|
645
|
-
a,
|
|
646
|
-
`${key} reordered`,
|
|
647
|
-
),
|
|
648
|
-
);
|
|
616
|
+
out.push(change(`${path}/${key}`, "no-impact", "changed", b, a, `${key} reordered`));
|
|
649
617
|
}
|
|
650
618
|
continue;
|
|
651
619
|
}
|
|
@@ -732,12 +700,7 @@ function diffSlo(
|
|
|
732
700
|
}
|
|
733
701
|
}
|
|
734
702
|
|
|
735
|
-
function diffSignal(
|
|
736
|
-
before: Signal,
|
|
737
|
-
after: Signal,
|
|
738
|
-
path: string,
|
|
739
|
-
out: ManifestChange[],
|
|
740
|
-
): void {
|
|
703
|
+
function diffSignal(before: Signal, after: Signal, path: string, out: ManifestChange[]): void {
|
|
741
704
|
if (before.delivery !== after.delivery) {
|
|
742
705
|
out.push(
|
|
743
706
|
change(
|
|
@@ -799,12 +762,7 @@ function diffSignal(
|
|
|
799
762
|
}
|
|
800
763
|
}
|
|
801
764
|
|
|
802
|
-
function diffStore(
|
|
803
|
-
before: Store,
|
|
804
|
-
after: Store,
|
|
805
|
-
path: string,
|
|
806
|
-
out: ManifestChange[],
|
|
807
|
-
): void {
|
|
765
|
+
function diffStore(before: Store, after: Store, path: string, out: ManifestChange[]): void {
|
|
808
766
|
if (before.facet !== after.facet) {
|
|
809
767
|
out.push(
|
|
810
768
|
change(
|
|
@@ -837,19 +795,12 @@ function diffStore(
|
|
|
837
795
|
}
|
|
838
796
|
}
|
|
839
797
|
|
|
840
|
-
function diffTable(
|
|
841
|
-
before: Table,
|
|
842
|
-
after: Table,
|
|
843
|
-
path: string,
|
|
844
|
-
out: ManifestChange[],
|
|
845
|
-
): void {
|
|
798
|
+
function diffTable(before: Table, after: Table, path: string, out: ManifestChange[]): void {
|
|
846
799
|
if (!deepEqual(before.columns, after.columns)) {
|
|
847
800
|
out.push(
|
|
848
801
|
change(
|
|
849
802
|
`${path}/columns`,
|
|
850
|
-
classificationWeakened(before.columns, after.columns)
|
|
851
|
-
? "permission-widening"
|
|
852
|
-
: "no-impact",
|
|
803
|
+
classificationWeakened(before.columns, after.columns) ? "permission-widening" : "no-impact",
|
|
853
804
|
"changed",
|
|
854
805
|
before.columns,
|
|
855
806
|
after.columns,
|
|
@@ -873,15 +824,9 @@ function diffTable(
|
|
|
873
824
|
}
|
|
874
825
|
}
|
|
875
826
|
|
|
876
|
-
function diffClock(
|
|
877
|
-
before: Clock,
|
|
878
|
-
after: Clock,
|
|
879
|
-
path: string,
|
|
880
|
-
out: ManifestChange[],
|
|
881
|
-
): void {
|
|
827
|
+
function diffClock(before: Clock, after: Clock, path: string, out: ManifestChange[]): void {
|
|
882
828
|
if (deepEqual(before, after)) return;
|
|
883
|
-
const scheduleChanged =
|
|
884
|
-
before.cron !== after.cron || before.every !== after.every;
|
|
829
|
+
const scheduleChanged = before.cron !== after.cron || before.every !== after.every;
|
|
885
830
|
out.push(
|
|
886
831
|
change(
|
|
887
832
|
path,
|
|
@@ -894,20 +839,12 @@ function diffClock(
|
|
|
894
839
|
);
|
|
895
840
|
}
|
|
896
841
|
|
|
897
|
-
function diffGateDef(
|
|
898
|
-
before: Gate,
|
|
899
|
-
after: Gate,
|
|
900
|
-
path: string,
|
|
901
|
-
out: ManifestChange[],
|
|
902
|
-
): void {
|
|
842
|
+
function diffGateDef(before: Gate, after: Gate, path: string, out: ManifestChange[]): void {
|
|
903
843
|
if (deepEqual(before, after)) return;
|
|
904
844
|
|
|
905
845
|
const rolesRemoved = setDiff(before.roles, after.roles);
|
|
906
846
|
const scopesRemoved = setDiff(before.scopes, after.scopes);
|
|
907
|
-
const maxWidened =
|
|
908
|
-
before.max !== undefined &&
|
|
909
|
-
after.max !== undefined &&
|
|
910
|
-
after.max > before.max;
|
|
847
|
+
const maxWidened = before.max !== undefined && after.max !== undefined && after.max > before.max;
|
|
911
848
|
|
|
912
849
|
// Widened membership (e.g. roles: [staff] → [staff, member] or roles replaced by broader set)
|
|
913
850
|
const rolesAdded = setDiff(after.roles, before.roles);
|
|
@@ -930,16 +867,7 @@ function diffGateDef(
|
|
|
930
867
|
}
|
|
931
868
|
|
|
932
869
|
if (rolesRemoved.length > 0 || scopesRemoved.length > 0) {
|
|
933
|
-
out.push(
|
|
934
|
-
change(
|
|
935
|
-
path,
|
|
936
|
-
"no-impact",
|
|
937
|
-
"changed",
|
|
938
|
-
before,
|
|
939
|
-
after,
|
|
940
|
-
"gate narrowed",
|
|
941
|
-
),
|
|
942
|
-
);
|
|
870
|
+
out.push(change(path, "no-impact", "changed", before, after, "gate narrowed"));
|
|
943
871
|
return;
|
|
944
872
|
}
|
|
945
873
|
|
|
@@ -957,9 +885,7 @@ function diffGateDef(
|
|
|
957
885
|
return;
|
|
958
886
|
}
|
|
959
887
|
|
|
960
|
-
out.push(
|
|
961
|
-
change(path, "no-impact", "changed", before, after, "gate definition changed"),
|
|
962
|
-
);
|
|
888
|
+
out.push(change(path, "no-impact", "changed", before, after, "gate definition changed"));
|
|
963
889
|
}
|
|
964
890
|
|
|
965
891
|
function diffSecret(
|
|
@@ -982,17 +908,10 @@ function diffSecret(
|
|
|
982
908
|
);
|
|
983
909
|
return;
|
|
984
910
|
}
|
|
985
|
-
out.push(
|
|
986
|
-
change(path, "no-impact", "changed", before, after, "secret contract metadata changed"),
|
|
987
|
-
);
|
|
911
|
+
out.push(change(path, "no-impact", "changed", before, after, "secret contract metadata changed"));
|
|
988
912
|
}
|
|
989
913
|
|
|
990
|
-
function diffChannel(
|
|
991
|
-
before: Channel,
|
|
992
|
-
after: Channel,
|
|
993
|
-
path: string,
|
|
994
|
-
out: ManifestChange[],
|
|
995
|
-
): void {
|
|
914
|
+
function diffChannel(before: Channel, after: Channel, path: string, out: ManifestChange[]): void {
|
|
996
915
|
if (deepEqual(before, after)) return;
|
|
997
916
|
if (before.medium !== after.medium && before.medium && after.medium) {
|
|
998
917
|
out.push(
|
|
@@ -1038,18 +957,11 @@ function diffChannel(
|
|
|
1038
957
|
before.medium === after.medium &&
|
|
1039
958
|
!deepEqual(before, after)
|
|
1040
959
|
) {
|
|
1041
|
-
out.push(
|
|
1042
|
-
change(path, "no-impact", "changed", before, after, "channel metadata changed"),
|
|
1043
|
-
);
|
|
960
|
+
out.push(change(path, "no-impact", "changed", before, after, "channel metadata changed"));
|
|
1044
961
|
}
|
|
1045
962
|
}
|
|
1046
963
|
|
|
1047
|
-
function diffPlugin(
|
|
1048
|
-
before: Plugin,
|
|
1049
|
-
after: Plugin,
|
|
1050
|
-
path: string,
|
|
1051
|
-
out: ManifestChange[],
|
|
1052
|
-
): void {
|
|
964
|
+
function diffPlugin(before: Plugin, after: Plugin, path: string, out: ManifestChange[]): void {
|
|
1053
965
|
if (deepEqual(before, after)) return;
|
|
1054
966
|
const interceptsAdded = setDiff(after.intercepts, before.intercepts);
|
|
1055
967
|
const declaresAdded = setDiff(after.declares, before.declares);
|
|
@@ -1066,17 +978,10 @@ function diffPlugin(
|
|
|
1066
978
|
);
|
|
1067
979
|
return;
|
|
1068
980
|
}
|
|
1069
|
-
out.push(
|
|
1070
|
-
change(path, "no-impact", "changed", before, after, "plugin metadata changed"),
|
|
1071
|
-
);
|
|
981
|
+
out.push(change(path, "no-impact", "changed", before, after, "plugin metadata changed"));
|
|
1072
982
|
}
|
|
1073
983
|
|
|
1074
|
-
function diffJourney(
|
|
1075
|
-
before: Journey,
|
|
1076
|
-
after: Journey,
|
|
1077
|
-
path: string,
|
|
1078
|
-
out: ManifestChange[],
|
|
1079
|
-
): void {
|
|
984
|
+
function diffJourney(before: Journey, after: Journey, path: string, out: ManifestChange[]): void {
|
|
1080
985
|
if (deepEqual(before, after)) return;
|
|
1081
986
|
diffSlo(before.slo, after.slo, `${path}/slo`, out);
|
|
1082
987
|
if (before.composes !== after.composes) {
|
|
@@ -1085,9 +990,7 @@ function diffJourney(
|
|
|
1085
990
|
out.push(
|
|
1086
991
|
change(
|
|
1087
992
|
`${path}/composes`,
|
|
1088
|
-
b !== undefined && a !== undefined && a < b
|
|
1089
|
-
? "contract-breaking"
|
|
1090
|
-
: "no-impact",
|
|
993
|
+
b !== undefined && a !== undefined && a < b ? "contract-breaking" : "no-impact",
|
|
1091
994
|
kindOf(before.composes, after.composes),
|
|
1092
995
|
before.composes,
|
|
1093
996
|
after.composes,
|
|
@@ -1099,9 +1002,7 @@ function diffJourney(
|
|
|
1099
1002
|
out.push(
|
|
1100
1003
|
change(
|
|
1101
1004
|
`${path}/flows`,
|
|
1102
|
-
setDiff(before.flows, after.flows).length > 0
|
|
1103
|
-
? "contract-breaking"
|
|
1104
|
-
: "no-impact",
|
|
1005
|
+
setDiff(before.flows, after.flows).length > 0 ? "contract-breaking" : "no-impact",
|
|
1105
1006
|
"changed",
|
|
1106
1007
|
before.flows,
|
|
1107
1008
|
after.flows,
|
|
@@ -1111,26 +1012,23 @@ function diffJourney(
|
|
|
1111
1012
|
}
|
|
1112
1013
|
}
|
|
1113
1014
|
|
|
1114
|
-
function diffAi(
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1015
|
+
function diffAi(before: Ai | undefined, after: Ai | undefined, out: ManifestChange[]): void {
|
|
1016
|
+
diffRecord(
|
|
1017
|
+
before?.models,
|
|
1018
|
+
after?.models,
|
|
1019
|
+
"/ai/models",
|
|
1020
|
+
(b, a, path, o) => {
|
|
1021
|
+
if (!deepEqual(b, a)) {
|
|
1022
|
+
o.push(change(path, "contract-breaking", "changed", b, a, "ai model changed"));
|
|
1023
|
+
}
|
|
1024
|
+
},
|
|
1025
|
+
out,
|
|
1026
|
+
);
|
|
1124
1027
|
diffRecord(before?.prompts, after?.prompts, "/ai/prompts", diffPrompt, out);
|
|
1125
1028
|
diffRecord(before?.agents, after?.agents, "/ai/agents", diffAgent, out);
|
|
1126
1029
|
}
|
|
1127
1030
|
|
|
1128
|
-
function diffPrompt(
|
|
1129
|
-
before: AiPrompt,
|
|
1130
|
-
after: AiPrompt,
|
|
1131
|
-
path: string,
|
|
1132
|
-
out: ManifestChange[],
|
|
1133
|
-
): void {
|
|
1031
|
+
function diffPrompt(before: AiPrompt, after: AiPrompt, path: string, out: ManifestChange[]): void {
|
|
1134
1032
|
if (deepEqual(before, after)) return;
|
|
1135
1033
|
if (before.version !== after.version) {
|
|
1136
1034
|
out.push(
|
|
@@ -1191,12 +1089,7 @@ function diffPrompt(
|
|
|
1191
1089
|
}
|
|
1192
1090
|
}
|
|
1193
1091
|
|
|
1194
|
-
function diffAgent(
|
|
1195
|
-
before: AiAgent,
|
|
1196
|
-
after: AiAgent,
|
|
1197
|
-
path: string,
|
|
1198
|
-
out: ManifestChange[],
|
|
1199
|
-
): void {
|
|
1092
|
+
function diffAgent(before: AiAgent, after: AiAgent, path: string, out: ManifestChange[]): void {
|
|
1200
1093
|
if (deepEqual(before, after)) return;
|
|
1201
1094
|
const toolsAdded = setDiff(after.tools, before.tools);
|
|
1202
1095
|
const toolsRemoved = setDiff(before.tools, after.tools);
|
|
@@ -1238,7 +1131,11 @@ function diffAgent(
|
|
|
1238
1131
|
),
|
|
1239
1132
|
);
|
|
1240
1133
|
}
|
|
1241
|
-
if (
|
|
1134
|
+
if (
|
|
1135
|
+
!deepEqual(before.budget, after.budget) &&
|
|
1136
|
+
toolsAdded.length === 0 &&
|
|
1137
|
+
toolsRemoved.length === 0
|
|
1138
|
+
) {
|
|
1242
1139
|
const bCost = before.budget?.maxCostPerRun ?? before.budget?.maxCostPerCall ?? 0;
|
|
1243
1140
|
const aCost = after.budget?.maxCostPerRun ?? after.budget?.maxCostPerCall ?? 0;
|
|
1244
1141
|
out.push(
|
|
@@ -1326,9 +1223,7 @@ function diffTenancy(
|
|
|
1326
1223
|
out.push(
|
|
1327
1224
|
change(
|
|
1328
1225
|
"/tenancy/isolation",
|
|
1329
|
-
b !== undefined && a !== undefined && a < b
|
|
1330
|
-
? "permission-widening"
|
|
1331
|
-
: "no-impact",
|
|
1226
|
+
b !== undefined && a !== undefined && a < b ? "permission-widening" : "no-impact",
|
|
1332
1227
|
"changed",
|
|
1333
1228
|
before?.isolation,
|
|
1334
1229
|
after?.isolation,
|
|
@@ -1337,11 +1232,7 @@ function diffTenancy(
|
|
|
1337
1232
|
);
|
|
1338
1233
|
}
|
|
1339
1234
|
|
|
1340
|
-
function diffI18n(
|
|
1341
|
-
before: I18n | undefined,
|
|
1342
|
-
after: I18n | undefined,
|
|
1343
|
-
out: ManifestChange[],
|
|
1344
|
-
): void {
|
|
1235
|
+
function diffI18n(before: I18n | undefined, after: I18n | undefined, out: ManifestChange[]): void {
|
|
1345
1236
|
if (deepEqual(before, after)) return;
|
|
1346
1237
|
if (before === undefined && after !== undefined) {
|
|
1347
1238
|
out.push(change("/i18n", "no-impact", "added", before, after, "i18n added"));
|
|
@@ -1389,7 +1280,14 @@ function diffI18n(
|
|
|
1389
1280
|
}
|
|
1390
1281
|
if (!deepEqual(before?.dir, after?.dir) && setEqual(before?.locales, after?.locales)) {
|
|
1391
1282
|
out.push(
|
|
1392
|
-
change(
|
|
1283
|
+
change(
|
|
1284
|
+
"/i18n/dir",
|
|
1285
|
+
"no-impact",
|
|
1286
|
+
"changed",
|
|
1287
|
+
before?.dir,
|
|
1288
|
+
after?.dir,
|
|
1289
|
+
"locale dir map changed",
|
|
1290
|
+
),
|
|
1393
1291
|
);
|
|
1394
1292
|
}
|
|
1395
1293
|
}
|
|
@@ -1401,9 +1299,7 @@ function diffTopology(
|
|
|
1401
1299
|
): void {
|
|
1402
1300
|
if (before === after) return;
|
|
1403
1301
|
const category: DiffCategory =
|
|
1404
|
-
before !== undefined && after !== undefined
|
|
1405
|
-
? "contract-breaking"
|
|
1406
|
-
: "no-impact";
|
|
1302
|
+
before !== undefined && after !== undefined ? "contract-breaking" : "no-impact";
|
|
1407
1303
|
out.push(
|
|
1408
1304
|
change(
|
|
1409
1305
|
"/topology",
|
|
@@ -1422,9 +1318,7 @@ function diffImages(
|
|
|
1422
1318
|
out: ManifestChange[],
|
|
1423
1319
|
): void {
|
|
1424
1320
|
if (deepEqual(before, after)) return;
|
|
1425
|
-
out.push(
|
|
1426
|
-
change("/images", "no-impact", "changed", before, after, "images changed"),
|
|
1427
|
-
);
|
|
1321
|
+
out.push(change("/images", "no-impact", "changed", before, after, "images changed"));
|
|
1428
1322
|
}
|
|
1429
1323
|
|
|
1430
1324
|
function diffStringSet(
|
|
@@ -1453,14 +1347,7 @@ function diffStringSet(
|
|
|
1453
1347
|
}
|
|
1454
1348
|
for (const item of setDiff(after, before)) {
|
|
1455
1349
|
out.push(
|
|
1456
|
-
change(
|
|
1457
|
-
`${path}/${escape(item)}`,
|
|
1458
|
-
"no-impact",
|
|
1459
|
-
"added",
|
|
1460
|
-
undefined,
|
|
1461
|
-
item,
|
|
1462
|
-
`added ${item}`,
|
|
1463
|
-
),
|
|
1350
|
+
change(`${path}/${escape(item)}`, "no-impact", "added", undefined, item, `added ${item}`),
|
|
1464
1351
|
);
|
|
1465
1352
|
}
|
|
1466
1353
|
}
|
|
@@ -1523,10 +1410,7 @@ function schemaBreaksClients(
|
|
|
1523
1410
|
return false;
|
|
1524
1411
|
}
|
|
1525
1412
|
|
|
1526
|
-
function classificationWeakened(
|
|
1527
|
-
before: unknown,
|
|
1528
|
-
after: unknown,
|
|
1529
|
-
): boolean {
|
|
1413
|
+
function classificationWeakened(before: unknown, after: unknown): boolean {
|
|
1530
1414
|
if (!before || typeof before !== "object") return false;
|
|
1531
1415
|
if (!after || typeof after !== "object") return true;
|
|
1532
1416
|
const b = before as Record<string, unknown>;
|
|
@@ -1559,9 +1443,7 @@ function isSensitive(value: unknown): boolean {
|
|
|
1559
1443
|
return false;
|
|
1560
1444
|
}
|
|
1561
1445
|
|
|
1562
|
-
function parseRateGate(
|
|
1563
|
-
gate: string,
|
|
1564
|
-
): { strategy: string; max: number; per: string } | undefined {
|
|
1446
|
+
function parseRateGate(gate: string): { strategy: string; max: number; per: string } | undefined {
|
|
1565
1447
|
// rate:sliding-window-counter:300/1m
|
|
1566
1448
|
const m = /^rate:([^:]+):(\d+)\/(.+)$/.exec(gate);
|
|
1567
1449
|
if (!m) return undefined;
|
|
@@ -1609,10 +1491,7 @@ function asUnknownArray(value: unknown): unknown[] | undefined {
|
|
|
1609
1491
|
return Array.isArray(value) ? value : undefined;
|
|
1610
1492
|
}
|
|
1611
1493
|
|
|
1612
|
-
function setEqual(
|
|
1613
|
-
a: readonly string[] | undefined,
|
|
1614
|
-
b: readonly string[] | undefined,
|
|
1615
|
-
): boolean {
|
|
1494
|
+
function setEqual(a: readonly string[] | undefined, b: readonly string[] | undefined): boolean {
|
|
1616
1495
|
const as = new Set(a ?? []);
|
|
1617
1496
|
const bs = new Set(b ?? []);
|
|
1618
1497
|
if (as.size !== bs.size) return false;
|
|
@@ -1620,27 +1499,18 @@ function setEqual(
|
|
|
1620
1499
|
return true;
|
|
1621
1500
|
}
|
|
1622
1501
|
|
|
1623
|
-
function listEqual(
|
|
1624
|
-
a: readonly string[],
|
|
1625
|
-
b: readonly string[],
|
|
1626
|
-
): boolean {
|
|
1502
|
+
function listEqual(a: readonly string[], b: readonly string[]): boolean {
|
|
1627
1503
|
if (a.length !== b.length) return false;
|
|
1628
1504
|
for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;
|
|
1629
1505
|
return true;
|
|
1630
1506
|
}
|
|
1631
1507
|
|
|
1632
|
-
function setDiff(
|
|
1633
|
-
a: readonly string[] | undefined,
|
|
1634
|
-
b: readonly string[] | undefined,
|
|
1635
|
-
): string[] {
|
|
1508
|
+
function setDiff(a: readonly string[] | undefined, b: readonly string[] | undefined): string[] {
|
|
1636
1509
|
const bs = new Set(b ?? []);
|
|
1637
1510
|
return [...new Set(a ?? [])].filter((x) => !bs.has(x)).sort();
|
|
1638
1511
|
}
|
|
1639
1512
|
|
|
1640
|
-
function intersection(
|
|
1641
|
-
a: readonly string[],
|
|
1642
|
-
b: readonly string[],
|
|
1643
|
-
): string[] {
|
|
1513
|
+
function intersection(a: readonly string[], b: readonly string[]): string[] {
|
|
1644
1514
|
const bs = new Set(b);
|
|
1645
1515
|
return a.filter((x) => bs.has(x));
|
|
1646
1516
|
}
|
|
@@ -46,6 +46,6 @@
|
|
|
46
46
|
}
|
|
47
47
|
},
|
|
48
48
|
"journeys": { "book-a-flight": { "slo": { "availability": "99.5%" }, "composes": "99.6%" } },
|
|
49
|
-
"drivers": { "prod": ["postgres", "redis", "s3", "smtp", "
|
|
49
|
+
"drivers": { "prod": ["postgres", "redis", "s3", "smtp", "openbao", "anthropic", "pgvector"] },
|
|
50
50
|
"tenancy": { "isolation": "row" }
|
|
51
51
|
}
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
}
|
|
138
138
|
},
|
|
139
139
|
"drivers": {
|
|
140
|
-
"prod": ["postgres", "redis", "s3", "smtp", "
|
|
140
|
+
"prod": ["postgres", "redis", "s3", "smtp", "openbao", "anthropic", "pgvector"]
|
|
141
141
|
},
|
|
142
142
|
"tenancy": { "isolation": "row" },
|
|
143
143
|
"i18n": {
|
package/src/manifest/index.ts
CHANGED
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Manifest — the 100-year artifact.
|
|
3
3
|
*
|
|
4
|
-
* Public contract: `
|
|
4
|
+
* Public contract: `manifest.v1.schema.json`
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
export type * from "./types.ts";
|
|
8
|
-
export {
|
|
9
|
-
|
|
10
|
-
highestSeverity,
|
|
11
|
-
} from "./diff.ts";
|
|
12
|
-
export {
|
|
13
|
-
flowNameFromPath,
|
|
14
|
-
isDeclaredBreak,
|
|
15
|
-
undeclaredContractBreaks,
|
|
16
|
-
} from "./undeclared.ts";
|
|
8
|
+
export { diffManifest, highestSeverity } from "./diff.ts";
|
|
9
|
+
export { flowNameFromPath, isDeclaredBreak, undeclaredContractBreaks } from "./undeclared.ts";
|
|
17
10
|
export {
|
|
18
11
|
assertLosslessRoundTrip,
|
|
19
12
|
loadManifestSchema,
|