okengine 0.18.5 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +18 -10
- package/README.md +2 -2
- package/package.json +51 -50
- package/site/content/docs/ai/llms-txt.mdx +1 -1
- package/site/content/docs/ai/meta.json +1 -1
- package/site/content/docs/ai/skills.mdx +4 -1
- package/site/content/docs/ai/try-it.mdx +58 -0
- package/site/content/docs/client/auth.mdx +208 -0
- package/site/content/docs/client/calling.mdx +451 -0
- package/site/content/docs/client/index.mdx +209 -0
- package/site/content/docs/client/live.mdx +234 -0
- package/site/content/docs/client/meta.json +5 -0
- package/site/content/docs/client/react.mdx +249 -0
- package/site/content/docs/elements/ai/agents.mdx +232 -0
- package/site/content/docs/elements/ai/index.mdx +341 -0
- package/site/content/docs/elements/ai/mcp.mdx +275 -0
- package/site/content/docs/elements/ai/meta.json +5 -0
- package/site/content/docs/elements/ai/models.mdx +283 -0
- package/site/content/docs/elements/ai/prompts.mdx +256 -0
- package/site/content/docs/elements/channel/email.mdx +266 -0
- package/site/content/docs/elements/channel/index.mdx +344 -0
- package/site/content/docs/elements/channel/meta.json +5 -0
- package/site/content/docs/elements/channel/push.mdx +218 -0
- package/site/content/docs/elements/channel/receipts.mdx +206 -0
- package/site/content/docs/elements/channel/sms.mdx +264 -0
- package/site/content/docs/elements/channel/whatsapp.mdx +220 -0
- package/site/content/docs/elements/clock/index.mdx +300 -0
- package/site/content/docs/elements/clock/meta.json +5 -0
- package/site/content/docs/elements/clock/schedules.mdx +508 -0
- package/site/content/docs/elements/clock/sleep.mdx +445 -0
- package/site/content/docs/elements/flow/consumers.mdx +707 -0
- package/site/content/docs/elements/flow/http.mdx +1080 -0
- package/site/content/docs/elements/flow/index.mdx +618 -0
- package/site/content/docs/elements/flow/meta.json +5 -0
- package/site/content/docs/elements/flow/routing.mdx +559 -0
- package/site/content/docs/elements/flow/workflows.mdx +640 -0
- package/site/content/docs/elements/gate/auth.mdx +371 -0
- package/site/content/docs/elements/gate/authorization.mdx +298 -0
- package/site/content/docs/elements/gate/index.mdx +418 -0
- package/site/content/docs/elements/gate/meta.json +5 -0
- package/site/content/docs/elements/gate/rate-limits.mdx +365 -0
- package/site/content/docs/elements/gate/rls.mdx +303 -0
- package/site/content/docs/elements/gate/tenancy.mdx +372 -0
- package/site/content/docs/elements/index.mdx +20 -10
- package/site/content/docs/elements/signal/broadcast.mdx +517 -0
- package/site/content/docs/elements/signal/index.mdx +352 -0
- package/site/content/docs/elements/signal/live.mdx +590 -0
- package/site/content/docs/elements/signal/meta.json +5 -0
- package/site/content/docs/elements/signal/once.mdx +596 -0
- package/site/content/docs/elements/store/files.mdx +659 -0
- package/site/content/docs/elements/store/index.mdx +310 -0
- package/site/content/docs/elements/store/kv.mdx +629 -0
- package/site/content/docs/elements/store/meta.json +5 -0
- package/site/content/docs/elements/store/search.mdx +946 -0
- package/site/content/docs/elements/store/sql.mdx +937 -0
- package/site/content/docs/elements/vault/config.mdx +256 -0
- package/site/content/docs/elements/vault/index.mdx +356 -0
- package/site/content/docs/elements/vault/meta.json +5 -0
- package/site/content/docs/elements/vault/rotation.mdx +273 -0
- package/site/content/docs/elements/vault/secrets.mdx +285 -0
- package/site/content/docs/index.mdx +63 -36
- package/site/content/docs/meta.json +8 -7
- package/site/content/docs/plugins/cors.mdx +2 -1
- package/site/content/docs/plugins/csrf.mdx +4 -1
- package/site/content/docs/plugins/headers.mdx +2 -1
- package/site/content/docs/plugins/ip-allowlist.mdx +2 -1
- package/site/content/docs/plugins/magic-link.mdx +6 -0
- package/site/content/docs/plugins/maintenance-mode.mdx +2 -1
- package/site/content/docs/plugins/oauth.mdx +1 -1
- package/site/content/docs/plugins/otp.mdx +12 -1
- package/site/content/docs/plugins/passkey.mdx +39 -15
- package/site/content/docs/plugins/two-factor.mdx +91 -34
- package/site/content/docs/plugins/username.mdx +1 -1
- package/site/content/docs/recipes/caddy.mdx +3 -3
- package/site/content/docs/recipes/index.mdx +18 -28
- package/site/content/docs/recipes/mailpit.mdx +1 -1
- package/site/content/docs/recipes/meilisearch.mdx +3 -3
- package/site/content/docs/recipes/meta.json +1 -4
- package/site/content/docs/recipes/nginx.mdx +2 -2
- package/site/content/docs/recipes/openrouter.mdx +283 -0
- package/site/content/docs/recipes/pgdog.mdx +3 -3
- package/site/content/docs/recipes/postgres.mdx +1 -2
- package/site/content/docs/recipes/rustfs.mdx +2 -2
- package/site/content/docs/recipes/traefik.mdx +3 -3
- package/site/content/docs/reference/cli.mdx +231 -0
- package/site/content/docs/reference/configuration.mdx +30 -10
- package/site/content/docs/reference/environment-variables.mdx +93 -20
- package/site/content/docs/reference/errors.mdx +132 -29
- package/site/content/docs/reference/fx.mdx +137 -73
- package/site/content/docs/reference/index.mdx +13 -21
- package/site/content/docs/reference/meta.json +4 -5
- package/site/content/docs/reference/okid.mdx +42 -17
- package/site/content/docs/reference/plugins.mdx +4 -3
- package/site/content/docs/reference/security.mdx +197 -0
- package/site/content/docs/understand/meta.json +5 -0
- package/site/content/docs/understand/the-anatomy.mdx +132 -0
- package/site/content/docs/understand/the-model.mdx +32 -0
- package/site/content/docs/understand/the-problem.mdx +74 -0
- package/site/content/docs/understand/the-vocabulary.mdx +26 -0
- package/src/auth/api-keys.ts +2 -1
- package/src/auth/bindings.ts +64 -16
- package/src/auth/gate-auth.test.ts +6 -1
- package/src/auth/identity.ts +152 -5
- package/src/auth/index.ts +29 -0
- package/src/auth/invites.ts +2 -1
- package/src/auth/method-context.ts +41 -0
- package/src/auth/oauth-as/crypto.ts +2 -1
- package/src/auth/oauth-as/stores.ts +2 -1
- package/src/auth/operator.ts +2 -1
- package/src/auth/sessions-jwt.test.ts +77 -0
- package/src/auth/sessions.ts +20 -4
- package/src/auth/tenants.ts +3 -2
- package/src/auth/two-factor-challenge.test.ts +61 -0
- package/src/auth/two-factor-challenge.ts +284 -0
- package/src/auth/verification.ts +5 -0
- package/src/bench/REPORT.md +49 -0
- package/src/bench/g03-signal-once.bench.ts +1 -1
- package/src/bench/g10-observability-contention.bench.ts +1 -1
- package/src/bench/g17-hybrid-search.bench.ts +572 -0
- package/src/bench/load-app.ts +2 -10
- package/src/cli/ai-setup/ai-setup.test.ts +331 -42
- package/src/cli/ai-setup/apply.ts +294 -52
- package/src/cli/ai-setup/catalog.ts +238 -1342
- package/src/cli/ai-setup/index.ts +14 -99
- package/src/cli/ai-setup/prompts.ts +60 -443
- package/src/cli/ask-seed.test.ts +96 -0
- package/src/cli/ask-seed.ts +82 -0
- package/src/cli/ask-vault-gaps.test.ts +84 -0
- package/src/cli/ask-vault-gaps.ts +146 -0
- package/src/cli/build.ts +2 -2
- package/src/cli/client-add.test.ts +26 -1
- package/src/cli/client-add.ts +106 -27
- package/src/cli/db-seed.ts +2 -0
- package/src/cli/db.ts +150 -11
- package/src/cli/dev.ts +119 -211
- package/src/cli/docker-clean.ts +2 -2
- package/src/cli/docker-cli.test.ts +1 -1
- package/src/cli/doctor-diff.ts +4 -2
- package/src/cli/doctor-pii.test.ts +1 -1
- package/src/cli/doctor.ts +14 -1
- package/src/cli/hero-meta.test.ts +4 -2
- package/src/cli/load-config.images.test.ts +8 -10
- package/src/cli/load-config.ts +1 -1
- package/src/cli/registry.ts +22 -10
- package/src/cli/replay.ts +3 -1
- package/src/cli/start.ts +1 -1
- package/src/cli/tui/keys.ts +2 -3
- package/src/client/auth/cookies.ts +74 -0
- package/src/client/auth/create-auth-client.ts +636 -0
- package/src/client/auth/denials.ts +99 -0
- package/src/client/auth/session.ts +283 -0
- package/src/client/auth.test.ts +251 -0
- package/src/client/auth.ts +39 -114
- package/src/client/create-with-session.ts +245 -0
- package/src/client/create.ts +51 -5
- package/src/client/index.ts +11 -1
- package/src/client/live.ts +11 -79
- package/src/client/notes-contract.test.ts +5 -10
- package/src/client/sse.ts +137 -0
- package/src/client/stream.ts +147 -0
- package/src/client/transport.test.ts +32 -0
- package/src/client/transport.ts +123 -26
- package/src/client/types.ts +118 -14
- package/src/client-react/index.ts +185 -24
- package/src/client-react/use-live-query.ts +13 -3
- package/src/compiler/aot.test.ts +7 -4
- package/src/compiler/effects-embed.test.ts +56 -0
- package/src/compiler/effects-fetch.test.ts +43 -0
- package/src/compiler/effects-infer.ts +58 -2
- package/src/compiler/extract.test.ts +257 -43
- package/src/compiler/extract.ts +566 -48
- package/src/compiler/fixtures/skyport/src/flows/bookings/index.ts +7 -4
- package/src/compiler/fixtures/skyport/src/flows/bookings/signals.ts +2 -8
- package/src/compiler/fixtures/skyport.expected.json +4 -4
- package/src/compiler/fixtures/triggers/five-triggers.ts +14 -10
- package/src/compiler/response.ts +2 -2
- package/src/compiler/search-writer-isolation.test.ts +40 -0
- package/src/config/index.ts +11 -0
- package/src/console/server/app.ts +17 -23
- package/src/console/server/bind.ts +4 -0
- package/src/console/server/console.test.ts +2 -2
- package/src/console/server/flows-invoke.test.ts +50 -34
- package/src/console/server/flows.ts +436 -255
- package/src/console/server/runs-ingest.test.ts +6 -3
- package/src/console/server/serve.ts +1 -1
- package/src/console/server/signals.test.ts +1 -5
- package/src/console/server/signals.ts +8 -6
- package/src/console/server/state.ts +6 -1
- package/src/console/server/store.ts +1 -1
- package/src/console/ui-next/dist/assets/FileExportIcon-Ck-5od4R.js +1 -0
- package/src/console/ui-next/dist/assets/MoreHorizontalCircle01Icon-gMNGsE37.js +1 -0
- package/src/console/ui-next/dist/assets/PlusSignIcon-CwG3nxfu.js +1 -0
- package/src/console/ui-next/dist/assets/UnavailableIcon-D9cvHVPr.js +1 -0
- package/src/console/ui-next/dist/assets/UserIcon-DaE2PB5_.js +1 -0
- package/src/console/ui-next/dist/assets/access-page-DFeymU07.js +4 -0
- package/src/console/ui-next/dist/assets/agent-disclosure-U1rdfblp.js +1 -0
- package/src/console/ui-next/dist/assets/cache-glyph-BeFJeqBG.js +1 -0
- package/src/console/ui-next/dist/assets/call-pii-button-CVAONPii.js +1 -0
- package/src/console/ui-next/dist/assets/collapsible-D2A6NJ-3.js +1 -0
- package/src/console/ui-next/dist/assets/copy-inline-button-CAYD18cr.js +1 -0
- package/src/console/ui-next/dist/assets/dagre.esm-B1_XeuLP.js +1 -0
- package/src/console/ui-next/dist/assets/detail-header-DVWNjWjg.js +1 -0
- package/src/console/ui-next/dist/assets/dropdown-menu-4h2LOVXM.js +1 -0
- package/src/console/ui-next/dist/assets/duration-tone-Cgk_h5ja.js +9 -0
- package/src/console/ui-next/dist/assets/element-icons-BI8cJgdh.js +1 -0
- package/src/console/ui-next/dist/assets/explorer-empty-CJs5A-wm.js +1 -0
- package/src/console/ui-next/dist/assets/flows-page-Dss7941e.js +1 -0
- package/src/console/ui-next/dist/assets/highlighted-json-MYZQtRnw.js +154 -0
- package/src/console/ui-next/dist/assets/http-method-Jrh39p7A.js +1 -0
- package/src/console/ui-next/dist/assets/index-D0zS5rKO.css +2 -0
- package/src/console/ui-next/dist/assets/index-DXP2dBIF.js +63 -0
- package/src/console/ui-next/dist/assets/observability-page-HvolXxTI.js +4 -0
- package/src/console/ui-next/dist/assets/react-dom-Ddte4I-Q.js +9 -0
- package/src/console/ui-next/dist/assets/replica-lag-CSh2dzrb.js +18 -0
- package/src/console/ui-next/dist/assets/request-meta-BatF8KrK.js +1 -0
- package/src/console/ui-next/dist/assets/shortcut-keys-3ILd8oGn.js +1 -0
- package/src/console/ui-next/dist/assets/{sql-BskegiFM.js → sql-BsFa4tDR.js} +1 -1
- package/src/console/ui-next/dist/assets/store-page-eiKiHnNe.js +41 -0
- package/src/console/ui-next/dist/assets/trace-detail-sheet-CZkMeKS-.js +2 -0
- package/src/console/ui-next/dist/assets/tree-expand-toggle-CW8y5A2h.js +55 -0
- package/src/console/ui-next/dist/assets/units-page-B_RWJrEO.js +1 -0
- package/src/console/ui-next/dist/assets/{use-vault-list-uk4WVboC.js → use-vault-list-CT4-gajj.js} +1 -1
- package/src/console/ui-next/dist/assets/vault-page-CWrg-A68.js +2 -0
- package/src/console/ui-next/dist/assets/xyflow-CSyC6ryz.css +1 -0
- package/src/console/ui-next/dist/assets/xyflow-yApv7D4e.js +7 -0
- package/src/console/ui-next/dist/index.html +6 -13
- package/src/console/ui-next/seed-invoke-host.ts +21 -18
- package/src/console/ui-next/src/client.ts +7 -2
- package/src/console/ui-next/src/features/flows/graph/element-map.ts +2 -0
- package/src/console/ui-next/src/features/flows/traces/effect-kind.ts +12 -2
- package/src/console/ui-next/src/features/flows/traces/effect-summary.ts +4 -0
- package/src/console/ui-next/src/features/flows/traces/trace-detail-sheet.tsx +8 -0
- package/src/console/ui-next/src/features/flows/traces/waterfall-bars.ts +4 -0
- package/src/console/ui-next/src/features/flows/traces/waterfall-tooltip.ts +9 -3
- package/src/console/ui-next/src/features/store/detail/reveal-cell.tsx +7 -11
- package/src/console/ui-next/src/features/store/detail/store-row-detail-sheet.tsx +2 -2
- package/src/console/ui-next/src/features/store/lib/fields-from-table.ts +2 -0
- package/src/console/ui-next/src/features/store/lib/grid-model.test.ts +25 -1
- package/src/console/ui-next/src/features/store/lib/grid-model.ts +36 -1
- package/src/console/ui-next/src/features/store/query/query-results.tsx +3 -3
- package/src/console/ui-next/src/features/units/detail/effects-summary.tsx +2 -0
- package/src/console/ui-next/src/features/units/lib/call-read-safe.ts +3 -1
- package/src/console/ui-next/src/features/units/lib/fields-from-schema.ts +6 -0
- package/src/docker/ai-model-status.test.ts +1 -12
- package/src/docker/ai-model-status.ts +10 -38
- package/src/docker/compose-up.test.ts +100 -0
- package/src/docker/compose-up.ts +292 -0
- package/src/docker/compose.ts +4 -14
- package/src/docker/derive.ts +9 -34
- package/src/docker/docker.test.ts +16 -261
- package/src/docker/images-config.test.ts +13 -25
- package/src/docker/index.ts +1 -24
- package/src/docker/recipes/index.ts +0 -23
- package/src/docker/recipes/pgdog.ts +6 -4
- package/src/docker/stack-id.test.ts +2 -2
- package/src/docker/stack-id.ts +0 -1
- package/src/docker/types.ts +2 -2
- package/src/drivers/ai-anthropic.ts +10 -0
- package/src/drivers/ai-openai-compatible.ts +34 -7
- package/src/drivers/ai-providers.test.ts +0 -107
- package/src/drivers/ai-stream.test.ts +0 -34
- package/src/drivers/ai-types.ts +17 -8
- package/src/drivers/channel-fcm.ts +6 -1
- package/src/drivers/channel-msegat.ts +6 -1
- package/src/drivers/channel-resend.ts +5 -1
- package/src/drivers/channel-smtp.ts +5 -1
- package/src/drivers/channel-sndr.ts +10 -1
- package/src/drivers/channel-taqnyat-mail.ts +5 -1
- package/src/drivers/channel-taqnyat-whatsapp.ts +6 -1
- package/src/drivers/channel-taqnyat.ts +6 -1
- package/src/drivers/channel-types.ts +10 -0
- package/src/drivers/channel-unifonic.ts +6 -1
- package/src/drivers/channel-wa-cloud.ts +6 -1
- package/src/drivers/channel-webpush.ts +6 -1
- package/src/drivers/external.ts +33 -0
- package/src/drivers/index.ts +0 -10
- package/src/drivers/meilisearch.ts +6 -0
- package/src/drivers/oauth-types.ts +4 -0
- package/src/drivers/postgres.test.ts +74 -3
- package/src/drivers/postgres.ts +175 -6
- package/src/drivers/signal-types.ts +5 -5
- package/src/drivers/types.ts +7 -0
- package/src/drivers/vault-types.ts +5 -0
- package/src/elements/ai/declare.ts +17 -4
- package/src/elements/ai/eval.ts +1 -1
- package/src/elements/ai/mcp-http.ts +1 -1
- package/src/elements/ai/pii.ts +1 -1
- package/src/elements/ai/providers.test.ts +289 -0
- package/src/elements/ai/providers.ts +169 -0
- package/src/elements/ai/runtime.ts +68 -5
- package/src/elements/ai/schema.ts +2 -2
- package/src/elements/ai.test.ts +7 -7
- package/src/elements/ai.ts +17 -1
- package/src/elements/channel/runtime.ts +105 -12
- package/src/elements/clock/cron-fields.test.ts +144 -0
- package/src/elements/clock/cron-fields.ts +185 -0
- package/src/elements/clock/declare.ts +247 -3
- package/src/elements/clock.ts +21 -1
- package/src/elements/index.ts +15 -0
- package/src/elements/signal/chaos-child.ts +1 -2
- package/src/elements/signal/declare.ts +65 -37
- package/src/elements/signal/delivery-modes.test.ts +11 -31
- package/src/elements/signal/dry-run-replay.test.ts +1 -7
- package/src/elements/signal/dry-run-write-isolation.test.ts +1 -7
- package/src/elements/signal/key-ordering.test.ts +6 -26
- package/src/elements/signal/lease-reclaim.test.ts +2 -6
- package/src/elements/signal/optional-emit.test.ts +6 -9
- package/src/elements/signal/order-lifecycle.test.ts +4 -17
- package/src/elements/signal/orphan-messages.test.ts +4 -15
- package/src/elements/signal/reconcile.test.ts +2 -2
- package/src/elements/signal/runtime.ts +1 -1
- package/src/elements/signal/schema-emit.test.ts +4 -8
- package/src/elements/signal.test.ts +24 -49
- package/src/elements/signal.ts +9 -2
- package/src/elements/store/domain-ddl.test.ts +1 -1
- package/src/elements/store/live-http.test.ts +9 -4
- package/src/elements/store/prepare-row.test.ts +123 -0
- package/src/elements/store/resource.ts +43 -12
- package/src/elements/store/schema-decl.ts +117 -0
- package/src/elements/store/search-backfill.ts +205 -0
- package/src/elements/store/search-bind.ts +66 -0
- package/src/elements/store/search-bm25.ts +78 -0
- package/src/elements/store/search-ddl.ts +156 -0
- package/src/elements/store/search-embed-flow.ts +141 -0
- package/src/elements/store/search-errors.ts +34 -0
- package/src/elements/store/search-fusion.ts +112 -0
- package/src/elements/store/search-lsh.ts +179 -0
- package/src/elements/store/search-runtime.ts +300 -0
- package/src/elements/store/search.test.ts +144 -0
- package/src/elements/store/sql-session.test.ts +1 -0
- package/src/elements/store/sql-session.ts +83 -3
- package/src/elements/store/table.ts +23 -2
- package/src/elements/store/upsert-app.test.ts +1 -3
- package/src/elements/store.ts +50 -0
- package/src/full.ts +4 -2
- package/src/http.ts +4 -1
- package/src/i18n/catalogs/ar.ts +14 -6
- package/src/i18n/catalogs/en.ts +14 -6
- package/src/index.ts +6 -1
- package/src/kernel/adopt-barrel-fresh.test.ts +7 -7
- package/src/kernel/adopt-routes.ts +9 -1
- package/src/kernel/app-auth.ts +5 -0
- package/src/kernel/app.ts +102 -9
- package/src/kernel/auto-cache.test.ts +6 -12
- package/src/kernel/auto-registry.test.ts +3 -3
- package/src/kernel/boot-bind/ai.test.ts +22 -19
- package/src/kernel/boot-bind/ai.ts +5 -43
- package/src/kernel/boot-bind/clock.ts +23 -5
- package/src/kernel/boot-bind/honor-config.test.ts +4 -4
- package/src/kernel/boot.test.ts +11 -6
- package/src/kernel/boot.ts +66 -16
- package/src/kernel/boundary-contract.ts +93 -0
- package/src/kernel/budget.test.ts +1 -1
- package/src/kernel/call.ts +89 -0
- package/src/kernel/capability.ts +6 -0
- package/src/kernel/client-descriptor.ts +123 -0
- package/src/kernel/clock-timezone.test.ts +80 -0
- package/src/kernel/correlation.test.ts +1 -1
- package/src/kernel/dry-run.ts +11 -8
- package/src/kernel/effects-stamping.test.ts +42 -9
- package/src/kernel/effects.test.ts +4 -2
- package/src/kernel/effects.ts +51 -9
- package/src/kernel/errors-channel.ts +17 -0
- package/src/kernel/errors-live-resume.ts +3 -2
- package/src/kernel/errors-tenant.ts +7 -4
- package/src/kernel/errors.registry-helpers.ts +96 -0
- package/src/kernel/errors.registry.test.ts +139 -25
- package/src/kernel/errors.ts +102 -23
- package/src/kernel/external-effects.test.ts +196 -0
- package/src/kernel/flow.test.ts +13 -4
- package/src/kernel/flow.ts +69 -71
- package/src/kernel/fx-ask-telemetry.test.ts +2 -2
- package/src/kernel/fx-dead-letters.test.ts +3 -3
- package/src/kernel/fx-fetch.ts +55 -0
- package/src/kernel/fx-live-stream.ts +2 -2
- package/src/kernel/fx-live.test.ts +8 -8
- package/src/kernel/fx.test.ts +17 -11
- package/src/kernel/fx.ts +180 -57
- package/src/kernel/horizontal-child.ts +1 -1
- package/src/kernel/http-query.test.ts +3 -6
- package/src/kernel/index.ts +13 -3
- package/src/kernel/instance-id.ts +1 -1
- package/src/kernel/instances.test.ts +40 -0
- package/src/kernel/instances.ts +47 -9
- package/src/kernel/live-http.test.ts +6 -7
- package/src/kernel/live-http.ts +6 -2
- package/src/kernel/live-resume.test.ts +1 -1
- package/src/kernel/mcp-tool.test.ts +3 -3
- package/src/kernel/on.ts +98 -4
- package/src/kernel/pipeline.test.ts +12 -15
- package/src/kernel/plugin-elements.test.ts +1 -1
- package/src/kernel/stamp-http.test.ts +3 -3
- package/src/kernel/triggers.ts +210 -95
- package/src/kernel-entry.ts +0 -1
- package/src/manifest/diff.ts +11 -1
- package/src/manifest/fixtures/skyport.excerpt.json +1 -1
- package/src/manifest/types.ts +46 -2
- package/src/mcp/docs-index.ts +3 -3
- package/src/mcp/docs-mcp.test.ts +2 -2
- package/src/mcp/docs-tools.ts +1 -1
- package/src/okid.test.ts +56 -0
- package/src/okid.ts +55 -11
- package/src/plugins/anonymous.ts +8 -4
- package/src/plugins/auth/shared.ts +27 -3
- package/src/plugins/auth-delivery.mailpit.integration.test.ts +1 -1
- package/src/plugins/auth-methods.security.test.ts +561 -23
- package/src/plugins/config-source.ts +1 -1
- package/src/plugins/csrf.test.ts +65 -0
- package/src/plugins/index.ts +2 -0
- package/src/plugins/magic-link.ts +36 -16
- package/src/plugins/oauth/shared.ts +3 -1
- package/src/plugins/oauth.ts +22 -14
- package/src/plugins/otp.ts +37 -21
- package/src/plugins/passkey-webauthn.ts +9 -6
- package/src/plugins/passkey.ts +98 -26
- package/src/plugins/pre-account-hijack.test.ts +223 -0
- package/src/plugins/two-factor.ts +466 -37
- package/src/plugins/username.ts +19 -7
- package/src/release/build-lib.ts +1 -0
- package/src/release/limits.ts +2 -2
- package/src/release/measure.ts +1 -1
- package/src/runs/collect.test.ts +0 -2
- package/src/runtime/json-code-block.test.ts +250 -20
- package/src/runtime/json-code-block.ts +1261 -41
- package/src/term.test.ts +1 -1
- package/src/test/create-test-app.test.ts +12 -12
- package/src/test/live-signals.test.ts +6 -6
- package/src/test/provisions.integration.test.ts +10 -14
- package/src/test/reset-element-registries.ts +1 -1
- package/src/test/tenant-isolation.test.ts +12 -6
- package/site/content/docs/deployment/docker-swarm.mdx +0 -164
- package/site/content/docs/deployment/docker.mdx +0 -227
- package/site/content/docs/deployment/index.mdx +0 -83
- package/site/content/docs/deployment/kubernetes.mdx +0 -176
- package/site/content/docs/deployment/meta.json +0 -5
- package/site/content/docs/deployment/reverse-proxy.mdx +0 -234
- package/site/content/docs/elements/ai.mdx +0 -385
- package/site/content/docs/elements/channel.mdx +0 -346
- package/site/content/docs/elements/clock.mdx +0 -244
- package/site/content/docs/elements/flow.mdx +0 -420
- package/site/content/docs/elements/gate.mdx +0 -436
- package/site/content/docs/elements/signal.mdx +0 -380
- package/site/content/docs/elements/store.mdx +0 -1099
- package/site/content/docs/elements/vault.mdx +0 -405
- package/site/content/docs/get-started/basic-usage.mdx +0 -173
- package/site/content/docs/get-started/index.mdx +0 -43
- package/site/content/docs/get-started/installation.mdx +0 -220
- package/site/content/docs/get-started/introduction.mdx +0 -144
- package/site/content/docs/get-started/meta.json +0 -13
- package/site/content/docs/get-started/project-structure.mdx +0 -925
- package/site/content/docs/get-started/testing.mdx +0 -328
- package/site/content/docs/get-started/why.mdx +0 -114
- package/site/content/docs/recipes/llama-cpp.mdx +0 -151
- package/site/content/docs/recipes/ollama.mdx +0 -142
- package/site/content/docs/recipes/sglang.mdx +0 -105
- package/site/content/docs/recipes/vllm.mdx +0 -106
- package/site/content/docs/reference/cli.md +0 -232
- package/site/content/docs/reference/client.mdx +0 -469
- package/site/content/docs/reference/security.md +0 -74
- package/src/cli/ai-setup/detect-ollama.ts +0 -213
- package/src/cli/ai-setup/recommend.test.ts +0 -225
- package/src/cli/ai-setup/recommend.ts +0 -225
- package/src/cli/dev-controls.test.ts +0 -122
- package/src/cli/dev-controls.ts +0 -164
- package/src/cli/tui/DevLive.tsx +0 -126
- package/src/console/ui-next/dist/assets/access-page-3-EFj-2G.js +0 -4
- package/src/console/ui-next/dist/assets/agent-disclosure-BP0Y0Sux.js +0 -1
- package/src/console/ui-next/dist/assets/cache-glyph-B5X-NM0-.js +0 -1
- package/src/console/ui-next/dist/assets/call-pii-button-ChAUiLo9.js +0 -1
- package/src/console/ui-next/dist/assets/collapsible-DGnOM2ph.js +0 -1
- package/src/console/ui-next/dist/assets/copy-inline-button-DBHhgHKP.js +0 -1
- package/src/console/ui-next/dist/assets/dagre.esm-ZwcdTuZZ.js +0 -1
- package/src/console/ui-next/dist/assets/detail-header-DhHM1iaZ.js +0 -1
- package/src/console/ui-next/dist/assets/dropdown-menu-_NjTEo5_.js +0 -1
- package/src/console/ui-next/dist/assets/duration-tone-sC3lGABz.js +0 -9
- package/src/console/ui-next/dist/assets/element-icons-BVXtRyd3.js +0 -1
- package/src/console/ui-next/dist/assets/explorer-empty-2uIhBu0_.js +0 -1
- package/src/console/ui-next/dist/assets/flows-page-cVFnA4HH.js +0 -1
- package/src/console/ui-next/dist/assets/highlighted-json-Awq7gYdu.js +0 -154
- package/src/console/ui-next/dist/assets/http-method-_UHM2ODJ.js +0 -1
- package/src/console/ui-next/dist/assets/index-CMIgUbD0.js +0 -66
- package/src/console/ui-next/dist/assets/index-Ck88Jmv8.css +0 -2
- package/src/console/ui-next/dist/assets/link-BX6Vqztd.js +0 -1
- package/src/console/ui-next/dist/assets/observability-page-CQ3p34ip.js +0 -4
- package/src/console/ui-next/dist/assets/preload-helper-oH4irX4C.js +0 -1
- package/src/console/ui-next/dist/assets/react-D8E3mtu1.js +0 -1
- package/src/console/ui-next/dist/assets/react-dom-Bph1y7z7.js +0 -9
- package/src/console/ui-next/dist/assets/replica-lag-DKRrbvdo.js +0 -18
- package/src/console/ui-next/dist/assets/request-meta-DV0ywz7t.js +0 -1
- package/src/console/ui-next/dist/assets/shortcut-JQIZlWfm.js +0 -1
- package/src/console/ui-next/dist/assets/shortcut-keys-DKxNTe_m.js +0 -1
- package/src/console/ui-next/dist/assets/skeleton-D-czQJT6.js +0 -1
- package/src/console/ui-next/dist/assets/store-page-02xOiqIK.js +0 -41
- package/src/console/ui-next/dist/assets/trace-detail-sheet-B09O8rA6.js +0 -2
- package/src/console/ui-next/dist/assets/tree-expand-toggle-BtyhmWb4.js +0 -55
- package/src/console/ui-next/dist/assets/units-page-l8FeKfnP.js +0 -1
- package/src/console/ui-next/dist/assets/useMutation-B8EO02Ej.js +0 -1
- package/src/console/ui-next/dist/assets/useRender-BE2A9BWC.js +0 -1
- package/src/console/ui-next/dist/assets/vault-page-CL-d_mLE.js +0 -2
- package/src/console/ui-next/dist/assets/xyflow-D7n4g6go.js +0 -7
- package/src/console/ui-next/dist/assets/xyflow-DZ0Ws1xk.css +0 -1
- package/src/docker/ollama-pull.ts +0 -232
- package/src/docker/recipes/llama-cpp.ts +0 -298
- package/src/docker/recipes/ollama.ts +0 -44
- package/src/docker/recipes/sglang.ts +0 -55
- package/src/docker/recipes/vllm.ts +0 -44
- package/src/drivers/ai-ollama-tools.integration.test.ts +0 -109
- package/src/drivers/ai-ollama.integration.test.ts +0 -184
- package/src/drivers/ai-ollama.ts +0 -389
- package/src/drivers/ollama.ts +0 -14
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Installation
|
|
3
|
-
description: Install okengine, scaffold an app with create-oke, and open the Console.
|
|
4
|
-
source: README.md
|
|
5
|
-
icon: Download
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
This page gets you from zero to a running app on Bun. The engine targets
|
|
9
|
-
**Bun ≥ 1.4.0** — prefer it for install, scaffold, and `oke dev`.
|
|
10
|
-
|
|
11
|
-
<Callout title="The one rule">
|
|
12
|
-
The npm package is `okengine`; the CLI binary is `oke`. Use `bun add` in a project or `bun install
|
|
13
|
-
-g okengine` for a global `oke` on PATH. JSR is the library API only.
|
|
14
|
-
</Callout>
|
|
15
|
-
|
|
16
|
-
## Quick start
|
|
17
|
-
|
|
18
|
-
<Steps>
|
|
19
|
-
|
|
20
|
-
<Step>
|
|
21
|
-
### Prerequisites
|
|
22
|
-
|
|
23
|
-
- [Bun](https://bun.sh) ≥ 1.4.0 (`bun --version`)
|
|
24
|
-
- [Docker](https://docs.docker.com/get-docker/) with a running daemon (`docker info`)
|
|
25
|
-
- A terminal and a code editor
|
|
26
|
-
|
|
27
|
-
`oke dev` always starts Docker Compose for Postgres / Redis / S3 / SMTP (and other pinned images). Use `oke test` for PGLite tests without Compose.
|
|
28
|
-
|
|
29
|
-
</Step>
|
|
30
|
-
|
|
31
|
-
<Step>
|
|
32
|
-
### Install the package
|
|
33
|
-
|
|
34
|
-
Project dependency (framework + local `oke`):
|
|
35
|
-
|
|
36
|
-
```bash title="Terminal"
|
|
37
|
-
bun add okengine
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
Global CLI (`oke` on PATH):
|
|
41
|
-
|
|
42
|
-
```bash title="Terminal"
|
|
43
|
-
bun install -g okengine
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Library-only via JSR:
|
|
47
|
-
|
|
48
|
-
```bash title="Terminal"
|
|
49
|
-
bunx jsr add @omqkhafi/okengine
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
</Step>
|
|
53
|
-
|
|
54
|
-
<Step>
|
|
55
|
-
### Scaffold with create-oke
|
|
56
|
-
|
|
57
|
-
```bash title="Terminal"
|
|
58
|
-
bunx create-oke@latest my-app
|
|
59
|
-
bunx create-oke@latest my-app --template standard
|
|
60
|
-
bunx create-oke@latest my-app --template advanced
|
|
61
|
-
bunx create-oke@latest my-app --sql postgres
|
|
62
|
-
bunx create-oke@latest my-app --yes
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Two Notes starters: **standard** and **advanced** (adds `store.index` + optional AI).
|
|
66
|
-
Both are Docker-first; `test` uses PGLite / memory.
|
|
67
|
-
|
|
68
|
-
The okengine repo also ships `examples/keel` — a work-management app, not a template.
|
|
69
|
-
Run it with `bun run dev:keel` against Compose (Postgres, PgDog, Redis, RustFS, Mailpit,
|
|
70
|
-
Meilisearch, llama.cpp). Wipe with `bun run dev:keel:reset`.
|
|
71
|
-
|
|
72
|
-
On a TTY: pick a template, then **recommended defaults**, **customize**, or
|
|
73
|
-
**reuse** (`~/.oke/create-defaults.json`). Reuse applies saved locales / PgDog /
|
|
74
|
-
proxy without re-asking; recommended and customize ask and persist those answers.
|
|
75
|
-
|
|
76
|
-
Customize walks Docker-first facets (including `store.index` with `none`), then
|
|
77
|
-
**AI setup** (Recommended / Customize / Off). Project name rejects a non-empty
|
|
78
|
-
existing path.
|
|
79
|
-
|
|
80
|
-
Non-TTY / `--yes` stay scriptable. `--sql postgres` pins SQL; `--ai` runs the
|
|
81
|
-
model wizard before install.
|
|
82
|
-
|
|
83
|
-
</Step>
|
|
84
|
-
|
|
85
|
-
<Step>
|
|
86
|
-
### Run and verify
|
|
87
|
-
|
|
88
|
-
```bash title="Terminal"
|
|
89
|
-
cd my-app
|
|
90
|
-
oke dev
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
Four ports come up together (mnemonic: **O·K·E = 6·5·3**):
|
|
94
|
-
|
|
95
|
-
<Surfaces />
|
|
96
|
-
|
|
97
|
-
Open `http://localhost:6533`. Paste the **claim code** from the `oke dev` board
|
|
98
|
-
(or `oke console claim-code`). Password: **≥ 12** with upper, lower, number, and
|
|
99
|
-
special, or **Generate** (copies it).
|
|
100
|
-
|
|
101
|
-
Flows listed means the install worked — **derived, not configured.**
|
|
102
|
-
`bun run web` starts the Vite Notes UI (proxies Flows to the app).
|
|
103
|
-
|
|
104
|
-
</Step>
|
|
105
|
-
|
|
106
|
-
</Steps>
|
|
107
|
-
|
|
108
|
-
## Database sync in `oke dev`
|
|
109
|
-
|
|
110
|
-
`oke dev` watches schema paths and auto-runs `oke db push` so the database
|
|
111
|
-
stays in sync. Opt out with `oke dev --no-db-push` or
|
|
112
|
-
`db: { autoPush: false }` in `oke.config.ts`.
|
|
113
|
-
|
|
114
|
-
A broken `schema.decl.ts` prints a red ● `schema.decl.ts has an error — …` and
|
|
115
|
-
keeps the session up — never a quiet `skipped`. Missing `oke.config.ts` / images
|
|
116
|
-
still soft-skip.
|
|
117
|
-
|
|
118
|
-
For production, generate and apply migrations deliberately — never automatic on
|
|
119
|
-
boot:
|
|
120
|
-
|
|
121
|
-
```bash title="Terminal"
|
|
122
|
-
oke db generate # write drizzle/*.sql
|
|
123
|
-
oke db migrate # apply
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
## Docker Compose under `oke dev`
|
|
127
|
-
|
|
128
|
-
`oke dev` always brings up Compose under `docker/` and runs the app on host Bun
|
|
129
|
-
with the `dev` driver profile (filled from `prod` when omitted). Credentials and
|
|
130
|
-
host ports are unique per project.
|
|
131
|
-
|
|
132
|
-
```bash title="Terminal"
|
|
133
|
-
oke dev # full Compose set from images
|
|
134
|
-
oke dev -d store.sql,signal # optional: only these roles
|
|
135
|
-
oke test # PGLite tests — no Compose
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
| Protocol | Env shape (generated) |
|
|
139
|
-
| ------------------- | --------------------------------------------------------------------------------------------------------------- |
|
|
140
|
-
| Postgres | `DATABASE_URL` plus `OKE_STORE_SQL_*` |
|
|
141
|
-
| Redis | `REDIS_URL` plus `OKE_STORE_KV_PASSWORD` |
|
|
142
|
-
| S3-compatible files | `S3_ENDPOINT`, `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY`, `S3_BUCKET`, `S3_URL`, `S3_REGION`, `S3_CONSOLE_URL` |
|
|
143
|
-
| SMTP email | `SMTP_URL`, `SMTP_HOST`, `SMTP_PORT`, `MAILPIT_UI_URL`, optional `SMTP_USER` / `SMTP_PASSWORD` |
|
|
144
|
-
|
|
145
|
-
Uncommented supported controls in the generated compose env are preserved when
|
|
146
|
-
`oke dev` regenerates the file.
|
|
147
|
-
|
|
148
|
-
Migrating from `local` / `docker` maps or `oke mode`?
|
|
149
|
-
Rename the env keys in `oke.config.ts` to `dev` / `test` / `prod`.
|
|
150
|
-
|
|
151
|
-
## Troubleshooting
|
|
152
|
-
|
|
153
|
-
<Accordions>
|
|
154
|
-
|
|
155
|
-
<Accordion title="oke: command not found after install">
|
|
156
|
-
Install the npm package `okengine` (not JSR alone): `bun add okengine` in the project, or `bun
|
|
157
|
-
install -g okengine` for a global binary. Or invoke via `bunx oke dev`. There is no separate `oke`
|
|
158
|
-
package name — only `okengine`.
|
|
159
|
-
</Accordion>
|
|
160
|
-
|
|
161
|
-
<Accordion title="Docker daemon not running">
|
|
162
|
-
`oke dev` requires Docker. Start Docker Desktop (or your engine), confirm with `docker info`, then
|
|
163
|
-
retry. For tests without Compose, use `oke test`.
|
|
164
|
-
</Accordion>
|
|
165
|
-
|
|
166
|
-
<Accordion title="Console is empty / no flows listed">
|
|
167
|
-
Confirm `oke dev` is running and you opened `:6533`, not `:6530`. Flows appear only after the app
|
|
168
|
-
boots and the Manifest is extracted — fix TypeScript errors in the terminal first.
|
|
169
|
-
</Accordion>
|
|
170
|
-
|
|
171
|
-
<Accordion title="Create first operator fails (password / claim code)">
|
|
172
|
-
Password: ≥ 12 with upper, lower, number, and special — or **Generate**. Copy the claim code from
|
|
173
|
-
the `oke dev` board (30 min TTL) or `oke console claim-code`. The form never gets the code over
|
|
174
|
-
HTTP; the log shows the reason, not a bare `500`.
|
|
175
|
-
</Accordion>
|
|
176
|
-
|
|
177
|
-
<Accordion title="Database out of sync after editing schema">
|
|
178
|
-
`oke dev` auto-pushes by default. If you passed `--no-db-push` or set `db.autoPush: false`, run
|
|
179
|
-
`oke db push` yourself, or re-enable auto-push.
|
|
180
|
-
</Accordion>
|
|
181
|
-
|
|
182
|
-
<Accordion title="Docker containers left after deleting a project">
|
|
183
|
-
Each project gets its own `oke-dev-<id>` compose project; `oke dev` stop keeps volumes. Run
|
|
184
|
-
`oke docker clean` (TTY picker) or `oke docker clean --all --yes` from anywhere to remove
|
|
185
|
-
leftover containers, networks, and volumes.
|
|
186
|
-
</Accordion>
|
|
187
|
-
|
|
188
|
-
<Accordion title="Want a clean keel stack?">
|
|
189
|
-
Stop `bun run dev:keel`, then `bun run dev:keel:reset`. That wipes Compose, `.oke/`, and writes
|
|
190
|
-
`.env.local` from `.env.example`. Next `dev:keel` regenerates stack keys; seed copies them into
|
|
191
|
-
the built-in vault.
|
|
192
|
-
</Accordion>
|
|
193
|
-
|
|
194
|
-
</Accordions>
|
|
195
|
-
|
|
196
|
-
## Learn more
|
|
197
|
-
|
|
198
|
-
- [CLI Reference](/docs/reference/cli) — `oke`, `create-oke`, `oke test`, and db commands
|
|
199
|
-
- [Environment variables](/docs/reference/environment-variables) — protocol-shaped env
|
|
200
|
-
- [Configuration](/docs/reference/configuration) — `oke.config.ts` drivers and `db.autoPush`
|
|
201
|
-
|
|
202
|
-
## Next
|
|
203
|
-
|
|
204
|
-
<Cards>
|
|
205
|
-
<Card
|
|
206
|
-
title="Basic Usage"
|
|
207
|
-
description="Health Flow, typed client, and bun:test."
|
|
208
|
-
href="/docs/get-started/basic-usage"
|
|
209
|
-
/>
|
|
210
|
-
<Card
|
|
211
|
-
title="Introduction"
|
|
212
|
-
description="The one law, eight elements, one contract."
|
|
213
|
-
href="/docs/get-started/introduction"
|
|
214
|
-
/>
|
|
215
|
-
<Card
|
|
216
|
-
title="CLI Reference"
|
|
217
|
-
description="oke and create-oke commands."
|
|
218
|
-
href="/docs/reference/cli"
|
|
219
|
-
/>
|
|
220
|
-
</Cards>
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Introduction
|
|
3
|
-
description: The Law, the eight elements, the fx rule, and the compiled Manifest contract.
|
|
4
|
-
source: docs/spec/unified-theory.md
|
|
5
|
-
icon: BookOpen
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## The One Law
|
|
9
|
-
|
|
10
|
-
Every backend behavior is a Flow: `on(Trigger) → Effects`.
|
|
11
|
-
|
|
12
|
-
```typescript
|
|
13
|
-
import { on, flow, http } from "okengine/http";
|
|
14
|
-
|
|
15
|
-
export const health = on(http.get().public(), flow({ do: () => ({ ok: true }) }));
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
An endpoint, a nightly cleanup cron, a queue consumer, a row-change CDC hook — these are not four frameworks. They are **one species** with one shape. Only the trigger changes.
|
|
19
|
-
|
|
20
|
-
## Changing Only the Trigger
|
|
21
|
-
|
|
22
|
-
Triggers determine what starts the flow while preserving identical anatomy and effect tracking:
|
|
23
|
-
|
|
24
|
-
| Trigger | Starts when | Replaces |
|
|
25
|
-
| ---------------------------------- | ------------------ | ------------------ |
|
|
26
|
-
| `http.post("/bookings")` | A request arrives | Endpoint · handler |
|
|
27
|
-
| `every("10m")` | Time passes | Cron job |
|
|
28
|
-
| `orderPlaced` (a signal) | Another flow emits | Queue consumer |
|
|
29
|
-
| `db.table(users).changed("email")` | A row changes | CDC pipeline |
|
|
30
|
-
|
|
31
|
-
```typescript
|
|
32
|
-
import { on, flow, http } from "okengine";
|
|
33
|
-
|
|
34
|
-
on(http.post("/bookings"), createBooking);
|
|
35
|
-
on(every("10m"), expireStale);
|
|
36
|
-
on(orderPlaced, sendReceipt);
|
|
37
|
-
on(db.table(users).changed("email"), reverify);
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Anatomy of a Flow
|
|
41
|
-
|
|
42
|
-
Every Flow consists of four clear sections:
|
|
43
|
-
|
|
44
|
-
| Piece | Role |
|
|
45
|
-
| ------------- | -------------------------------------------------------------- |
|
|
46
|
-
| **Trigger** | How work starts — `http`, a signal, `every`, a row change |
|
|
47
|
-
| **Contracts** | `in`, `out`, typed `errors` — validated before and after `do` |
|
|
48
|
-
| **`do`** | The body — every read, write, emit, and call goes through `fx` |
|
|
49
|
-
| **Effects** | Inferred from those `fx` calls — not hand-annotated |
|
|
50
|
-
|
|
51
|
-
```typescript
|
|
52
|
-
export const createOrder = on(
|
|
53
|
-
http.post("/orders"),
|
|
54
|
-
flow("orders.create", {
|
|
55
|
-
in: OrderInput,
|
|
56
|
-
out: OrderResult,
|
|
57
|
-
do: async (input, fx) => {
|
|
58
|
-
const order = await fx.store(db).insert(orders).values(input);
|
|
59
|
-
await fx.emit(orderPlaced, { orderId: order.id });
|
|
60
|
-
return order;
|
|
61
|
-
},
|
|
62
|
-
}),
|
|
63
|
-
);
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## The `fx` Rule
|
|
67
|
-
|
|
68
|
-
**All world access goes through `fx`.**
|
|
69
|
-
|
|
70
|
-
<Callout title="Single door to the world">
|
|
71
|
-
Nothing in user flows imports `node:fs`, calls global `fetch`, or calls `Date.now()`. Every effect
|
|
72
|
-
is recorded on the effect ledger.
|
|
73
|
-
</Callout>
|
|
74
|
-
|
|
75
|
-
| Inferred from `fx` | What it powers |
|
|
76
|
-
| ----------------------- | ------------------------------------ |
|
|
77
|
-
| Cache invalidation keys | Invalidation follows the flow writes |
|
|
78
|
-
| Live queries | Realtime CDC subscriptions |
|
|
79
|
-
| Least-privilege tokens | Compiler-derived capability matrix |
|
|
80
|
-
| Deterministic tests | Injected time, clock, and stores |
|
|
81
|
-
| Manifest Diff | Blast-radius checks on every save |
|
|
82
|
-
|
|
83
|
-
## The Compiled Manifest
|
|
84
|
-
|
|
85
|
-
The source of truth is the backend model expressed in code. The **Manifest** is the compiled, versioned contract representing that model.
|
|
86
|
-
|
|
87
|
-
| Surface | Port | You Maintain? |
|
|
88
|
-
| --------------------------------- | ------------------ | ----------------------------- |
|
|
89
|
-
| Typed client (`okengine/client`) | your app code | No — derived from Manifest |
|
|
90
|
-
| Console panels, traces, explorers | `:6533` | No — reads the Manifest |
|
|
91
|
-
| MCP for agents | `:6535` | No — reads the Manifest |
|
|
92
|
-
| Architecture diagram | Console | No — it _is_ the effect graph |
|
|
93
|
-
| Capability matrix + cache keys | compiler / runtime | No — inferred from `fx` |
|
|
94
|
-
|
|
95
|
-
## The Eight Elements
|
|
96
|
-
|
|
97
|
-
An element earns its place only if it has **irreducible physics**.
|
|
98
|
-
|
|
99
|
-
| Element | Essence | Replaces the Zoo |
|
|
100
|
-
| ----------- | ----------------------------- | --------------------------------------------------------- |
|
|
101
|
-
| **Flow** | Behavior | endpoint · handler · consumer · job · workflow · webhook |
|
|
102
|
-
| **Signal** | Data in motion | queue · pub/sub · stream · websocket · SSE · event bus |
|
|
103
|
-
| **Store** | Data at rest | database · cache · KV · file storage · search index |
|
|
104
|
-
| **Clock** | Time | cron · delay · timeout · durable sleep · TTL |
|
|
105
|
-
| **Gate** | Permission to act | auth · session · ABAC · rate limit · quota · feature flag |
|
|
106
|
-
| **Vault** | Protected knowledge | secrets · config · environment |
|
|
107
|
-
| **Channel** | Reaching humans | email · SMS · WhatsApp · push |
|
|
108
|
-
| **AI** | Reaching machine intelligence | model calls · prompts · embeddings · agents · RAG |
|
|
109
|
-
|
|
110
|
-
New infrastructure becomes a **driver** for an existing element, never a ninth.
|
|
111
|
-
|
|
112
|
-
## Core Programming Vocabulary
|
|
113
|
-
|
|
114
|
-
The core programming vocabulary is ten exported names:
|
|
115
|
-
|
|
116
|
-
```typescript
|
|
117
|
-
import { on, flow, signal, store, clock, gate, vault, channel, ai, plugin } from "okengine";
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
For HTTP runtime essentials, use the slim entry `okengine/http`:
|
|
121
|
-
|
|
122
|
-
```typescript
|
|
123
|
-
import { on, flow, http, gate, oke, createBunRuntime } from "okengine/http";
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
## Next Steps
|
|
127
|
-
|
|
128
|
-
<Cards>
|
|
129
|
-
<Card
|
|
130
|
-
title="Why OKE"
|
|
131
|
-
description="Explore the problem of seams and the smaller model."
|
|
132
|
-
href="/docs/get-started/why"
|
|
133
|
-
/>
|
|
134
|
-
<Card
|
|
135
|
-
title="Installation"
|
|
136
|
-
description="Scaffold a new OKEngine project with create-oke."
|
|
137
|
-
href="/docs/get-started/installation"
|
|
138
|
-
/>
|
|
139
|
-
<Card
|
|
140
|
-
title="Basic Usage"
|
|
141
|
-
description="Write your first flow and verify it with bun test."
|
|
142
|
-
href="/docs/get-started/basic-usage"
|
|
143
|
-
/>
|
|
144
|
-
</Cards>
|