okengine 0.2.6 → 0.2.8
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 +24 -23
- package/README.md +52 -346
- package/docs/spec/console.md +165 -142
- package/docs/spec/example.md +490 -312
- package/docs/spec/four-applications.md +495 -314
- package/docs/spec/unified-theory.md +184 -175
- package/package.json +45 -37
- package/spec/manifest.v1.schema.json +40 -9
- package/src/auth/api-keys.ts +2 -5
- package/src/auth/attenuation.ts +2 -6
- package/src/auth/auth.test.ts +53 -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 +386 -0
- package/src/cli/dev-app-runner.ts +2 -8
- package/src/cli/dev-db-push.test.ts +163 -0
- package/src/cli/dev-mode.test.ts +45 -0
- package/src/cli/dev-mode.ts +78 -0
- package/src/cli/dev.test.ts +148 -21
- package/src/cli/dev.ts +208 -134
- package/src/cli/doc-drift.test.ts +3 -2
- package/src/cli/doc-drift.ts +21 -50
- package/src/cli/doc-staleness.test.ts +69 -0
- package/src/cli/docker-cli.test.ts +7 -8
- package/src/cli/docker.ts +1 -3
- package/src/cli/doctor-diff-examples.ts +1 -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/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 +41 -47
- package/src/cli/mcp-from-console.ts +1 -4
- package/src/cli/mode.ts +45 -0
- package/src/cli/ports.test.ts +4 -13
- package/src/cli/ports.ts +1 -3
- package/src/cli/privacy-erase.ts +1 -3
- package/src/cli/registry.ts +75 -25
- package/src/cli/schema.ts +3 -10
- package/src/cli/stack.ts +2 -7
- package/src/cli/start.ts +4 -15
- package/src/cli/upgrade.ts +1 -4
- 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 +8 -29
- 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 +96 -30
- package/src/compiler/extract.ts +362 -156
- package/src/compiler/fixtures/skyport/oke.config.ts +1 -1
- 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 +4 -7
- package/src/compiler/sucrose.ts +11 -31
- package/src/config/define-config.test.ts +57 -34
- package/src/config/index.ts +181 -37
- 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 +14 -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 +23 -60
- 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 +112 -20
- package/src/docker/derive.ts +5 -19
- package/src/docker/docker.test.ts +15 -15
- package/src/docker/dockerfile.integration.test.ts +12 -21
- package/src/docker/helpers.ts +5 -4
- package/src/docker/index.ts +4 -11
- package/src/docker/pin.ts +1 -9
- package/src/docker/recipes/index.ts +5 -6
- package/src/docker/recipes/mailpit.ts +22 -0
- package/src/docker/recipes/postgres.ts +17 -6
- package/src/docker/recipes/redis.ts +6 -1
- package/src/docker/recipes/rustfs.ts +33 -0
- package/src/docker/stack-id.test.ts +33 -0
- package/src/docker/stack-id.ts +25 -13
- package/src/docker/stack.integration.test.ts +6 -21
- package/src/docker/types.ts +13 -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/fs.ts +2 -8
- package/src/drivers/index.ts +12 -56
- package/src/drivers/memory.ts +14 -41
- 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 +5 -17
- 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-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.ts +1 -5
- package/src/drivers/vault-sops.ts +10 -35
- package/src/drivers/vault-types.ts +1 -7
- 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 +8 -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/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.ts +11 -21
- package/src/elements/store/sql-session.test.ts +50 -0
- package/src/elements/store/sql-session.ts +60 -63
- package/src/elements/store/table.ts +35 -19
- package/src/elements/store.test.ts +17 -39
- package/src/elements/store.ts +37 -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 +18 -32
- package/src/elements/vault.test.ts +12 -28
- package/src/elements/vault.ts +8 -12
- package/src/index.ts +5 -2
- package/src/kernel/adopt-routes.ts +15 -29
- package/src/kernel/app.ts +34 -94
- package/src/kernel/auth-resolve.ts +2 -9
- package/src/kernel/boot-bind/ai.ts +1 -4
- package/src/kernel/boot-bind/channel.ts +2 -8
- 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 +17 -17
- package/src/kernel/boot-bind/store.ts +44 -50
- package/src/kernel/boot-bind/vault.ts +2 -8
- package/src/kernel/boot.test.ts +4 -9
- package/src/kernel/boot.ts +29 -76
- 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/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 +5 -25
- package/src/kernel/fx.test.ts +15 -44
- package/src/kernel/fx.ts +27 -79
- package/src/kernel/hook-timing.test.ts +3 -6
- package/src/kernel/hook-timing.ts +5 -14
- package/src/kernel/hooks.test.ts +10 -10
- package/src/kernel/hooks.ts +3 -12
- package/src/kernel/index.ts +4 -17
- package/src/kernel/journal.ts +7 -31
- package/src/kernel/on.ts +1 -6
- 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 +48 -24
- package/src/kernel/registry.ts +80 -29
- 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 +4 -21
- package/src/manifest/diff.test.ts +26 -91
- package/src/manifest/diff.ts +95 -225
- package/src/manifest/index.ts +2 -9
- package/src/manifest/types.ts +29 -5
- 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 +4 -14
- 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/node-import-scan.ts +2 -5
- 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 +15 -43
- 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 +13 -31
- 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/src/console/ui/dist/assets/panel-vault-BbfWdox0.js +0 -1
package/AGENTS.md
CHANGED
|
@@ -14,16 +14,16 @@ There are no separate species called endpoints, handlers, consumers, jobs, subsc
|
|
|
14
14
|
|
|
15
15
|
## The eight elements
|
|
16
16
|
|
|
17
|
-
| Element
|
|
18
|
-
|
|
19
|
-
| **Flow**
|
|
20
|
-
| **Signal**
|
|
21
|
-
| **Store**
|
|
22
|
-
| **Clock**
|
|
23
|
-
| **Gate**
|
|
24
|
-
| **Vault**
|
|
25
|
-
| **Channel** | reaching humans
|
|
26
|
-
| **AI**
|
|
17
|
+
| Element | Essence |
|
|
18
|
+
| ----------- | ----------------------------------------------- |
|
|
19
|
+
| **Flow** | behavior |
|
|
20
|
+
| **Signal** | data in motion |
|
|
21
|
+
| **Store** | data at rest (`sql` · `kv` · `files` · `index`) |
|
|
22
|
+
| **Clock** | time |
|
|
23
|
+
| **Gate** | permission to act |
|
|
24
|
+
| **Vault** | protected knowledge |
|
|
25
|
+
| **Channel** | reaching humans |
|
|
26
|
+
| **AI** | reaching machine intelligence |
|
|
27
27
|
|
|
28
28
|
An element earns its place only if it has irreducible physics. New infrastructure becomes a new **driver** for an existing element — never a ninth element.
|
|
29
29
|
|
|
@@ -53,28 +53,29 @@ A direct `node:` import (or any other side-channel I/O) in element or flow code
|
|
|
53
53
|
|
|
54
54
|
## Ports
|
|
55
55
|
|
|
56
|
-
| Port
|
|
57
|
-
|
|
58
|
-
| **6530** | App
|
|
56
|
+
| Port | Surface |
|
|
57
|
+
| -------- | ------- |
|
|
58
|
+
| **6530** | App |
|
|
59
59
|
| **6533** | Console |
|
|
60
|
-
| **6535** | MCP
|
|
60
|
+
| **6535** | MCP |
|
|
61
61
|
|
|
62
62
|
Mnemonic: O·K·E = 6·5·3.
|
|
63
63
|
|
|
64
64
|
## Budgets
|
|
65
65
|
|
|
66
|
-
| Budget
|
|
67
|
-
|
|
66
|
+
| Budget | Limit |
|
|
67
|
+
| --------------------- | ------- |
|
|
68
68
|
| Kernel (edge profile) | < 15 kB |
|
|
69
|
-
| Client runtime
|
|
70
|
-
| Cold start on Bun
|
|
71
|
-
| p99 routing overhead
|
|
69
|
+
| Client runtime | < 3 kB |
|
|
70
|
+
| Cold start on Bun | < 75 ms |
|
|
71
|
+
| p99 routing overhead | < 1 ms |
|
|
72
72
|
|
|
73
73
|
A regression fails the build. Claims we cannot measure, we do not make.
|
|
74
74
|
|
|
75
75
|
## Package shape
|
|
76
76
|
|
|
77
77
|
Published packages:
|
|
78
|
+
|
|
78
79
|
- `okengine` — framework. Subpath exports: `.`, `./client`, `./test`, `./config`, `./auth`, `./drivers/*`. `"sideEffects": false`. CLI binary: `oke`.
|
|
79
80
|
- `create-oke` — scaffold CLI (`bunx create-oke@latest <name>`). Lives in `packages/create-oke`; clean starters are `templates/*`, teaching apps stay in `examples/*` (`--from-example`).
|
|
80
81
|
|
|
@@ -82,10 +83,10 @@ Engine: Bun `>=1.3`.
|
|
|
82
83
|
|
|
83
84
|
## Spec authority
|
|
84
85
|
|
|
85
|
-
| Spec
|
|
86
|
-
|
|
87
|
-
| Unified theory
|
|
86
|
+
| Spec | Path |
|
|
87
|
+
| ----------------- | -------------------------------- |
|
|
88
|
+
| Unified theory | `docs/spec/unified-theory.md` |
|
|
88
89
|
| Four applications | `docs/spec/four-applications.md` |
|
|
89
|
-
| Console
|
|
90
|
+
| Console | `docs/spec/console.md` |
|
|
90
91
|
|
|
91
92
|
**If the spec is silent, stop and ask.**
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
# okengine
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
_"Stop gluing APIs, jobs, and queues into one backend. One law collapses them — client, Console, and infra come free. Yours to host."_
|
|
11
11
|
|
|
12
12
|
[](https://www.npmjs.com/package/okengine)
|
|
13
13
|
[](https://jsr.io/@omqkhafi/okengine)
|
|
@@ -15,372 +15,78 @@
|
|
|
15
15
|
[](https://opensource.org/licenses/MIT)
|
|
16
16
|
[](https://bun.sh)
|
|
17
17
|
|
|
18
|
-
**
|
|
18
|
+
**Docs:** [okengine.vercel.app](https://okengine.vercel.app) · **Handbook:** [/docs](https://okengine.vercel.app/docs) · **CLI:** `oke` · **Scaffold:** [`create-oke`](https://www.npmjs.com/package/create-oke)
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
> [!WARNING]
|
|
21
|
+
> **Early development (`v0.x`) — not production-ready.**
|
|
22
|
+
>
|
|
23
|
+
> APIs, drivers, and tooling can change quickly, including **breaking changes**, until an initial stable release. Use for exploration and feedback — **not** production workloads yet.
|
|
21
24
|
|
|
22
|
-
|
|
23
|
-
bun add okengine # npm (recommended — ships the `oke` CLI)
|
|
24
|
-
bunx jsr add @omqkhafi/okengine # JSR — library API only
|
|
25
|
-
bunx create-oke@latest my-app --template hello # scaffold from npm
|
|
26
|
-
```
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## Start here
|
|
30
|
-
|
|
31
|
-
Most backends are a pile of separate tools under one logo: a router, a queue library, a cron library, websockets, tracing. The pieces ship together; they do not follow from one idea. That is why docs sprawl and concepts never get removed.
|
|
32
|
-
|
|
33
|
-
OKE starts from one sentence instead:
|
|
34
|
-
|
|
35
|
-
> **Every backend behavior is a Flow:** `on(Trigger) → Effects`
|
|
36
|
-
|
|
37
|
-
An HTTP route, a cron job, a queue consumer, a CDC hook — same shape. Triggers are typed values. Side effects go through `fx` (the only door to the outside world), so the compiler can see them.
|
|
25
|
+
## Install
|
|
38
26
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
27
|
+
```bash
|
|
28
|
+
bun add okengine # framework + `oke` CLI
|
|
29
|
+
bunx jsr add @omqkhafi/okengine # JSR — library API only
|
|
30
|
+
bunx create-oke@latest my-app --template hello # scaffold
|
|
43
31
|
```
|
|
44
32
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## Run something in two minutes
|
|
33
|
+
## Quick start
|
|
50
34
|
|
|
51
35
|
```bash
|
|
52
36
|
bunx create-oke@latest my-app --template hello
|
|
53
37
|
cd my-app
|
|
54
38
|
oke dev
|
|
39
|
+
# or: oke mode docker && oke dev # compose infra · app on host Bun
|
|
55
40
|
```
|
|
56
41
|
|
|
57
|
-
| Port
|
|
58
|
-
|
|
59
|
-
| `:6530` |
|
|
60
|
-
| `:6533` | Console
|
|
61
|
-
| `:6535` | MCP (
|
|
62
|
-
|
|
63
|
-
Mnemonic: **O·K·E = 6·5·3**. Docs MCP for the handbook is a separate surface on `:6536` (search/fetch only — see [Documentation](#documentation)).
|
|
64
|
-
|
|
65
|
-
That scaffolds the **hello** starter — one flow, no Store, the fastest true "it works" moment. Default without `--template` is **standard** (full recommended file layout, empty scaffolding). Open the Console — flows, contracts, effects, and an architecture diagram are already there. Derived, not configured.
|
|
42
|
+
| Port | Surface |
|
|
43
|
+
| ------- | ------------------------------------------- |
|
|
44
|
+
| `:6530` | App |
|
|
45
|
+
| `:6533` | Console |
|
|
46
|
+
| `:6535` | MCP (live Manifest) |
|
|
47
|
+
| `:6536` | Docs MCP (handbook search/fetch, read-only) |
|
|
66
48
|
|
|
67
|
-
|
|
49
|
+
Mnemonic: **O·K·E = 6·5·3**.
|
|
68
50
|
|
|
69
|
-
|
|
51
|
+
Every backend behavior is a Flow: `on(Trigger) → Effects`. World access goes through `fx`.
|
|
70
52
|
|
|
71
|
-
|
|
53
|
+
Store apps sync schema with `oke db push|generate|migrate` (local `oke dev`
|
|
54
|
+
auto-pushes). Prefer `store.schema.table` + `field.*` (see Linkly) or keep a
|
|
55
|
+
hand-written Drizzle `schema.ts`.
|
|
72
56
|
|
|
73
57
|
### `examples/notes/src/flows/notes/index.ts`
|
|
74
58
|
|
|
75
59
|
```typescript
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const NotFound = z.object({});
|
|
88
|
-
|
|
89
|
-
export const create = on(http.post("/notes"), flow({
|
|
90
|
-
in: NewNote,
|
|
91
|
-
out: NoteId,
|
|
92
|
-
do: async (input, fx) => {
|
|
93
|
-
const [note] = await fx.store(db).insert(notes).values(input).returning();
|
|
94
|
-
return { id: note.id };
|
|
95
|
-
},
|
|
96
|
-
}));
|
|
97
|
-
// effects → writes[sql:notes]
|
|
98
|
-
|
|
99
|
-
export const list = on(http.get("/notes"), flow({
|
|
100
|
-
out: Note.array(),
|
|
101
|
-
do: (_, fx) => fx.store(db).select().from(notes),
|
|
102
|
-
}));
|
|
103
|
-
// effects → reads[sql:notes]
|
|
104
|
-
|
|
105
|
-
export const get = on(http.get("/notes/:id"), flow({
|
|
106
|
-
in: NoteId,
|
|
107
|
-
out: Note,
|
|
108
|
-
errors: { NotFound },
|
|
109
|
-
do: async ({ id }, fx) => (await fx.store(db).findById(notes, id)) ?? fx.fail("NotFound", {}),
|
|
110
|
-
}));
|
|
111
|
-
|
|
112
|
-
export const remove = on(http.delete("/notes/:id"), flow({
|
|
113
|
-
in: NoteId,
|
|
114
|
-
errors: { NotFound },
|
|
115
|
-
do: async ({ id }, fx) => {
|
|
116
|
-
const deleted = await fx.store(db).delete(notes, id);
|
|
117
|
-
if (!deleted) return fx.fail("NotFound", {});
|
|
118
|
-
},
|
|
119
|
-
}));
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
Wire the unit into the app. The client needs only this type — no separate codegen:
|
|
123
|
-
|
|
124
|
-
### `examples/notes/src/app.ts`
|
|
125
|
-
|
|
126
|
-
```typescript
|
|
127
|
-
import { oke } from "okengine";
|
|
128
|
-
import * as notes from "./flows/notes";
|
|
129
|
-
|
|
130
|
-
export const app = oke({ name: "notes" }).adopt({ notes });
|
|
131
|
-
|
|
132
|
-
export type App = typeof app; // ← the client needs nothing else
|
|
60
|
+
export const create = on(
|
|
61
|
+
http.post("/notes"),
|
|
62
|
+
flow({
|
|
63
|
+
in: NewNote,
|
|
64
|
+
out: NoteId,
|
|
65
|
+
do: async (input, fx) => {
|
|
66
|
+
const [note] = await fx.store(db).insert(notes).values(input).returning();
|
|
67
|
+
return { id: note.id };
|
|
68
|
+
},
|
|
69
|
+
}),
|
|
70
|
+
);
|
|
133
71
|
```
|
|
134
72
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## How to learn (read in order)
|
|
140
|
-
|
|
141
|
-
Start on the site if you want the handbook path: [Introduction](https://okengine.vercel.app/docs/get-started/introduction) → [Installation](https://okengine.vercel.app/docs/get-started/installation) → [Basic usage](https://okengine.vercel.app/docs/get-started/basic-usage).
|
|
142
|
-
|
|
143
|
-
Each teaching app adds the smallest next set of ideas. Do not skip ahead.
|
|
144
|
-
|
|
145
|
-
1. **Notes** — `oke`, `on`, `flow`, `http`, `store.sql`, `fx`, typed errors, typed client
|
|
146
|
-
→ [`examples/notes`](examples/notes)
|
|
147
|
-
|
|
148
|
-
2. **Linkly** — `signal` (three delivery physics), `clock`, `gate`, triggers beyond HTTP, transactional emit
|
|
149
|
-
→ [`examples/linkly`](examples/linkly)
|
|
150
|
-
|
|
151
|
-
3. **Provisions** — durable flows, `vault`, `channel`, live queries, plugins, CDC, cache tiers
|
|
152
|
-
→ [`examples/provisions`](examples/provisions)
|
|
153
|
-
|
|
154
|
-
4. **Skyport** — `ai`, multi-tenancy, SLOs, distributed topology, scaling axes
|
|
155
|
-
→ [`examples/skyport`](examples/skyport)
|
|
156
|
-
|
|
157
|
-
Same path in the spec: [`docs/spec/four-applications.md`](docs/spec/four-applications.md).
|
|
158
|
-
|
|
159
|
-
---
|
|
73
|
+
Full walkthrough: [Basic usage](https://okengine.vercel.app/docs/get-started/basic-usage) · teaching apps: [Learn](https://okengine.vercel.app/docs/learn/notes).
|
|
160
74
|
|
|
161
75
|
## Documentation
|
|
162
76
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
| **Store** | data at rest | DB, cache, KV, files, search (`sql` · `kv` · `files` · `index`) |
|
|
180
|
-
| **Clock** | time | cron, delay, timeout, durable sleep, TTL |
|
|
181
|
-
| **Gate** | permission to act | auth, session, ABAC, rate limit, quota, flags |
|
|
182
|
-
| **Vault** | protected knowledge | secrets, config, env |
|
|
183
|
-
| **Channel** | reaching humans | email, SMS, WhatsApp, push |
|
|
184
|
-
| **AI** | reaching machine intelligence | models, prompts, embeddings, agents, RAG |
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
## What the Manifest is for
|
|
189
|
-
|
|
190
|
-
Your TypeScript compiles to `manifest.oke.json`. From that one artifact the rest is derived — client, docs, Console, security matrix, Docker, bundle, tests ([unified theory §8](docs/spec/unified-theory.md#8-the-manifest--the-100-year-artifact)):
|
|
191
|
-
|
|
192
|
-
```mermaid
|
|
193
|
-
flowchart TD
|
|
194
|
-
code["your code"] -->|compile| manifest["manifest.oke.json"]
|
|
195
|
-
manifest --> client["typed client (+ live queries)"]
|
|
196
|
-
manifest --> docs["OpenAPI + AsyncAPI + documentation"]
|
|
197
|
-
manifest --> arch["architecture diagram (provably accurate — it IS the system)"]
|
|
198
|
-
manifest --> console["Console panels, traces, explorers"]
|
|
199
|
-
manifest --> mcp["MCP surface for AI agents"]
|
|
200
|
-
manifest --> caps["least-privilege capability matrix"]
|
|
201
|
-
manifest --> cache["cache invalidation keys"]
|
|
202
|
-
manifest --> replica["replica read-routing plan"]
|
|
203
|
-
manifest --> docker["Dockerfile + per-role compose files"]
|
|
204
|
-
manifest --> bundle["tree-shaken bundle contents"]
|
|
205
|
-
manifest --> harness["test harness wiring"]
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
## Console
|
|
211
|
-
|
|
212
|
-
Seventeen panels on `:6533` (app `:6530`, MCP `:6535`): Overview, Flows, Signals, Store, Clock, Gates, Vault, Channels, AI, Architecture, Traces, Runs, Manifest Diff, Access, Plugins — plus Privacy and Tenancy when those plugins are plugged.
|
|
213
|
-
|
|
214
|
-
Operator and user planes stay separate. Every Console action is a real flow through `fx`, so the audit log is the trace. Spec: [`docs/spec/console.md`](docs/spec/console.md) · handbook: [console handbook](https://okengine.vercel.app/docs/console/overview).
|
|
215
|
-
|
|
216
|
-
---
|
|
217
|
-
|
|
218
|
-
## How to deploy
|
|
219
|
-
|
|
220
|
-
OKE is self-host first — no cloud lock-in. Production artefacts are **derived from the Manifest**, not hand-written: Dockerfile, per-role compose files, and the same entry production actually runs ([unified theory §8](docs/spec/unified-theory.md#8-the-manifest--the-100-year-artifact), [§18](docs/spec/unified-theory.md#18-three-scaling-axes-never-conflated)).
|
|
221
|
-
|
|
222
|
-
1. **Configure drivers and images** in `oke.config.ts` — drivers named after protocols; vendor images keyed by role (e.g. `store.sql`, `store.kv`).
|
|
223
|
-
2. **Check the machine** before you ship:
|
|
224
|
-
|
|
225
|
-
```bash
|
|
226
|
-
oke doctor # secrets, ports, drivers, tenancy, schema drift
|
|
227
|
-
oke doctor --json # -j agents / CI: JSON on stdout, hints on stderr
|
|
228
|
-
oke stack # preview resolved images/tags/ports — writes nothing
|
|
229
|
-
oke images list # recipe · image · tag · digest · size (writes nothing)
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
3. **Derive Docker / compose**, then pin digests so tags cannot drift:
|
|
233
|
-
|
|
234
|
-
```bash
|
|
235
|
-
oke docker # writes under docker/ (Dockerfile + compose.<role>.yml · …)
|
|
236
|
-
oke docker --prod # -p healthchecks, volumes, limits, secret refs, deploy.replicas
|
|
237
|
-
oke images pin # tags → digests in oke.images.lock
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
4. **Run what production runs.** `oke start` is the Docker `CMD` — the same process locally and in the container:
|
|
241
|
-
|
|
242
|
-
```bash
|
|
243
|
-
oke start # app on :6530 (Console :6533 stays on in prod, behind auth)
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
Horizontal scale is the **Clone** axis: run N instances; `oke docker --prod` emits `deploy.replicas`. Split into one container per unit is the **topology** axis — code unchanged (`monolith` vs `services`). For a tiny edge bundle: `oke build --target edge` (`-t`; < 15 kB kernel profile).
|
|
247
|
-
|
|
248
|
-
There is no separate “deploy to our cloud” product. You take the derived Dockerfile/compose and run them on whatever host you choose.
|
|
249
|
-
|
|
250
|
-
---
|
|
251
|
-
|
|
252
|
-
## CLI
|
|
253
|
-
|
|
254
|
-
Everyday:
|
|
255
|
-
|
|
256
|
-
```bash
|
|
257
|
-
bun add okengine # ONE package
|
|
258
|
-
|
|
259
|
-
oke dev # watch · hot reload · Console :6533 · app :6530 · MCP :6535
|
|
260
|
-
# → also auto-syncs client types on every save
|
|
261
|
-
oke dev --stack # -s infra only under docker/ (Postgres/Redis/…); app stays on host Bun
|
|
262
|
-
oke dev -s store.sql,store.kv # partial: only these roles get real backends
|
|
263
|
-
|
|
264
|
-
oke start # runs exactly what production runs (this is the Docker CMD)
|
|
265
|
-
oke doctor # verify secrets, ports, drivers, tenancy, schema drift
|
|
266
|
-
oke doctor --diff # -d CI gate: undeclared Manifest contract breaks
|
|
267
|
-
oke doctor --json # -j JSON on stdout; hints on stderr (agents / MCP)
|
|
268
|
-
oke stack # preview resolved images/tags/ports — writes nothing
|
|
269
|
-
oke stack --json # -j
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
Schema, vault, client, Docker, build, eval, branch, privacy, upgrade:
|
|
273
|
-
|
|
274
|
-
```bash
|
|
275
|
-
oke schema generate # core + plugin tables → schema/oke.ts (--check|-c in CI)
|
|
276
|
-
oke vault set STRIPE_KEY # also: list · import .env · key rotate
|
|
277
|
-
oke client add <url> # types for a separate frontend repo
|
|
278
|
-
|
|
279
|
-
oke docker # artefacts under docker/ (Dockerfile + compose.<role>.yml · …)
|
|
280
|
-
oke docker --prod # -p healthchecks, volumes, limits, secret refs, deploy.replicas
|
|
281
|
-
oke images list # recipe · image · tag · digest · size (--json|-j)
|
|
282
|
-
oke images pin # tags → digests in oke.images.lock
|
|
283
|
-
|
|
284
|
-
oke build --target edge # -t < 15 kB kernel profile
|
|
285
|
-
oke eval # run prompt eval sets; fails CI on regression
|
|
286
|
-
oke branch prod --at "yesterday" # -a fork journaled state into a sandbox
|
|
287
|
-
oke privacy erase --subject <id> # -s crypto-shredding: deletes the key, not the terabytes
|
|
288
|
-
oke upgrade # dry-run codemods + diff; --apply|-a to write
|
|
289
|
-
oke gates list # Module:Action catalogue (--json|-j)
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
Shell completion (generated from the command registry — not a hand-maintained script):
|
|
293
|
-
|
|
294
|
-
```bash
|
|
295
|
-
eval "$(oke completion bash)"
|
|
296
|
-
eval "$(oke completion zsh)"
|
|
297
|
-
oke completion fish | source
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
Long form is canonical in docs; short form is convenience only. Shared letters follow git’s pattern (different meanings on different subcommands — e.g. `-c` is `--check` on `schema generate`, `--config` on `stack` / `docker` / `images`).
|
|
301
|
-
|
|
302
|
-
| Long | Short | Where |
|
|
303
|
-
|------|-------|--------|
|
|
304
|
-
| `--stack` | `-s` | `dev` |
|
|
305
|
-
| `--prod` | `-p` | `docker` |
|
|
306
|
-
| `--port` | `-p` | `start` |
|
|
307
|
-
| `--check` | `-c` | `schema generate` |
|
|
308
|
-
| `--config` | `-c` | `stack`, `docker`, `images` |
|
|
309
|
-
| `--apply` | `-a` | `upgrade` |
|
|
310
|
-
| `--at` | `-a` | `branch` |
|
|
311
|
-
| `--after` | `-a` | `doctor --diff` |
|
|
312
|
-
| `--target` | `-t` | `build` |
|
|
313
|
-
| `--diff` | `-d` | `doctor` |
|
|
314
|
-
| `--json` | `-j` | `doctor`, `stack`, `images list`, `gates list` |
|
|
315
|
-
| `--manifest` | `-m` | most Manifest readers |
|
|
316
|
-
| `--entry` | `-e` | `dev`, `start`, `build` |
|
|
317
|
-
| `--out` / `--outdir` | `-o` | writers |
|
|
318
|
-
| `--subject` | `-s` | `privacy erase` |
|
|
319
|
-
| `--before` | `-b` | `doctor --diff` |
|
|
320
|
-
| `--base` | `-B` | `doctor --diff` |
|
|
321
|
-
|
|
322
|
-
| Exit | Meaning |
|
|
323
|
-
|------|---------|
|
|
324
|
-
| **0** | success |
|
|
325
|
-
| **1** | usage / validation |
|
|
326
|
-
| **2** | runtime / environment / check failure |
|
|
327
|
-
|
|
328
|
-
`oke help` prints the same flag and exit-code tables.
|
|
329
|
-
|
|
330
|
-
---
|
|
331
|
-
|
|
332
|
-
## Plugins and security
|
|
333
|
-
|
|
334
|
-
`.plug()` attaches a plugin. Scope is the attachment point: `app.plug()` app-wide, `unit.plug()` one unit, `flow.plug()` one flow. No `global: true`, no inheritance rule — [unified theory §14](docs/spec/unified-theory.md#14-plugins--the-extensibility-law).
|
|
335
|
-
|
|
336
|
-
The Console is treated as internet-facing even on localhost. Host header validation, Origin validation, and authentication are mandatory on `:6530`, `:6533`, and `:6535` ([console.md §10](docs/spec/console.md#10-security-posture)): two-plane auth (operator vs user), capability-scoped tokens. Docs MCP `:6536` uses the same Host/Origin checks and stays read-only (no Bearer writes).
|
|
337
|
-
|
|
338
|
-
---
|
|
339
|
-
|
|
340
|
-
## Why Bun, one package, MIT
|
|
341
|
-
|
|
342
|
-
**Bun-first** — toolchain stays on latest (TypeScript 7, Bun, oxc): greenfield, speed is part of the promise. User floor stays conservative; adopted infra pins stable digests ([§11](docs/spec/unified-theory.md#11-always-latest--in-three-tiers)).
|
|
343
|
-
|
|
344
|
-
**One package** — `okengine` with subpath exports, not a monorepo of many packages to assemble. Small enough to be *finished* ([§27](docs/spec/unified-theory.md#27-package-structure-one-published-package), [§29](docs/spec/unified-theory.md#29-why-this-survives-a-hundred-years)).
|
|
345
|
-
|
|
346
|
-
**MIT** — no BSL/SSPL; self-host first; drivers as the community surface. Adopt what exists; bind through Bun’s native clients ([§9](docs/spec/unified-theory.md#9-adopt-dont-reinvent--but-bind-natively), [§16](docs/spec/unified-theory.md#16-the-default-table), [§29](docs/spec/unified-theory.md#29-why-this-survives-a-hundred-years)).
|
|
347
|
-
|
|
348
|
-
---
|
|
349
|
-
|
|
350
|
-
## Budgets
|
|
351
|
-
|
|
352
|
-
Measured size and latency caps — see [`BUDGETS.md`](BUDGETS.md). Refresh with `bun run budgets`.
|
|
353
|
-
|
|
354
|
-
---
|
|
355
|
-
|
|
356
|
-
## Local framework link (try changes without publishing)
|
|
357
|
-
|
|
358
|
-
To exercise a local `okengine` checkout inside an app (e.g. `oke-1`) without npm publish:
|
|
359
|
-
|
|
360
|
-
```bash
|
|
361
|
-
# in the okengine repo
|
|
362
|
-
bun link
|
|
363
|
-
# if you changed the Console SPA:
|
|
364
|
-
bun run build
|
|
365
|
-
|
|
366
|
-
# in the app repo
|
|
367
|
-
bun link okengine
|
|
368
|
-
# edit okengine → restart `bun dev` in the app
|
|
369
|
-
```
|
|
370
|
-
|
|
371
|
-
Alternatively set `"okengine": "file:../okengine"` in the app `package.json` and run `bun install`.
|
|
372
|
-
|
|
373
|
-
---
|
|
374
|
-
|
|
375
|
-
## Status
|
|
376
|
-
|
|
377
|
-
Pre-1.0. Published on [npm](https://www.npmjs.com/package/okengine) and [JSR](https://jsr.io/@omqkhafi/okengine) (`okengine` + `create-oke`, lockstep). Docs at [okengine.vercel.app](https://okengine.vercel.app). MIT. No `CONTRIBUTING` yet — issues and PRs welcome.
|
|
378
|
-
|
|
379
|
-
| Resource | Path |
|
|
380
|
-
|---|---|
|
|
381
|
-
| Docs site | [okengine.vercel.app](https://okengine.vercel.app) · [handbook](https://okengine.vercel.app/docs) · [changelog](https://okengine.vercel.app/changelog) |
|
|
382
|
-
| Unified theory | [`docs/spec/unified-theory.md`](https://github.com/omqkhafi/okengine/blob/main/docs/spec/unified-theory.md) |
|
|
383
|
-
| Four applications | [`docs/spec/four-applications.md`](https://github.com/omqkhafi/okengine/blob/main/docs/spec/four-applications.md) |
|
|
384
|
-
| Console | [`docs/spec/console.md`](https://github.com/omqkhafi/okengine/blob/main/docs/spec/console.md) |
|
|
385
|
-
| Scaffold | [`packages/create-oke`](https://github.com/omqkhafi/okengine/tree/main/packages/create-oke) |
|
|
386
|
-
| Changelog source | [`docs/changelog.md`](docs/changelog.md) |
|
|
77
|
+
Everything beyond this page lives on the site and in-repo specs:
|
|
78
|
+
|
|
79
|
+
| Resource | Link |
|
|
80
|
+
| ----------------- | ------------------------------------------------------------------------------------------ |
|
|
81
|
+
| Docs site | [okengine.vercel.app](https://okengine.vercel.app) |
|
|
82
|
+
| Handbook | [/docs](https://okengine.vercel.app/docs) |
|
|
83
|
+
| Changelog | [/changelog](https://okengine.vercel.app/changelog) |
|
|
84
|
+
| Agents index | [/llms.txt](https://okengine.vercel.app/llms.txt) |
|
|
85
|
+
| Unified theory | [`docs/spec/unified-theory.md`](docs/spec/unified-theory.md) |
|
|
86
|
+
| Four applications | [`docs/spec/four-applications.md`](docs/spec/four-applications.md) |
|
|
87
|
+
| Console | [`docs/spec/console.md`](docs/spec/console.md) |
|
|
88
|
+
| CLI reference | [`docs/cli.md`](docs/cli.md) · [handbook](https://okengine.vercel.app/docs/cli) |
|
|
89
|
+
| Budgets | [`BUDGETS.md`](BUDGETS.md) |
|
|
90
|
+
| Contributing | [`CONTRIBUTING.md`](CONTRIBUTING.md) · [writing a driver](docs/guides/writing-a-driver.md) |
|
|
91
|
+
|
|
92
|
+
Pre-1.0. Published on [npm](https://www.npmjs.com/package/okengine) and [JSR](https://jsr.io/@omqkhafi/okengine). MIT.
|