okengine 0.18.4 → 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/index.mdx +25 -6
- 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 +52 -11
- 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 +78 -30
- package/site/content/docs/meta.json +11 -8
- 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/competitor-mention-removal.test.ts +1 -1
- 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 +258 -44
- 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 -132
- 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 -162
- 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-De7Lc2JC.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-RGy7VEA_.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-Ck88Jmv8.css +0 -2
- package/src/console/ui-next/dist/assets/index-_rgpdVzo.js +0 -66
- package/src/console/ui-next/dist/assets/link-BX6Vqztd.js +0 -1
- package/src/console/ui-next/dist/assets/observability-page-Ds6pcnh-.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-4rHOePuE.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-DISPgxLM.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,132 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Introduction
|
|
3
|
-
description: Learn the one idea behind okengine — then the eight elements and core programming vocabulary you will use everywhere.
|
|
4
|
-
source: docs/spec/unified-theory.md
|
|
5
|
-
icon: BookOpen
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## The One Idea
|
|
9
|
-
|
|
10
|
-
A booking API, a nightly cleanup job, a receipt email, a row-change hook — in most stacks those are four frameworks. In OKE they are **one species** with one shape. Learn the shape once; only the trigger changes.
|
|
11
|
-
|
|
12
|
-
> **The one rule**
|
|
13
|
-
> Every backend behavior is a **Flow**: `on(Trigger) → Effects`. There are no separate species called endpoints, handlers, consumers, jobs, or workflows.
|
|
14
|
-
|
|
15
|
-
## Quick Start
|
|
16
|
-
|
|
17
|
-
### Write One Flow
|
|
18
|
-
|
|
19
|
-
Four contracts plus a `do`. This is the standard starter's health check:
|
|
20
|
-
|
|
21
|
-
```typescript
|
|
22
|
-
import { on, flow, http } from "okengine/http";
|
|
23
|
-
|
|
24
|
-
export const health = on(http.get().public(), flow({ do: () => ({ ok: true }) }));
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
`main` omits the URL prefix, so this file is `GET /health` named `main.health`. See [Project structure](/docs/get-started/project-structure). Explicit `http.get("/health")` and `flow("main.health")` still win.
|
|
28
|
-
|
|
29
|
-
### Change Only the Trigger
|
|
30
|
-
|
|
31
|
-
Triggers define what starts the flow. Changing the trigger replaces the entire behavior while keeping the same structure:
|
|
32
|
-
|
|
33
|
-
| Trigger | Starts when | Replaces |
|
|
34
|
-
| ---------------------------------- | ------------------ | ------------------ |
|
|
35
|
-
| `http.post("/bookings")` | A request arrives | Endpoint · handler |
|
|
36
|
-
| `every("10m")` | Time passes | Cron job |
|
|
37
|
-
| `orderPlaced` (a signal) | Another flow emits | Queue consumer |
|
|
38
|
-
| `db.table(users).changed("email")` | A row changes | CDC pipeline |
|
|
39
|
-
|
|
40
|
-
```typescript
|
|
41
|
-
import { on, flow, http } from "okengine";
|
|
42
|
-
|
|
43
|
-
on(http.post("/bookings"), createBooking);
|
|
44
|
-
on(every("10m"), expireStale);
|
|
45
|
-
on(orderPlaced, sendReceipt);
|
|
46
|
-
on(db.table(users).changed("email"), reverify);
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## Anatomy
|
|
50
|
-
|
|
51
|
-
One pipeline. Only the trigger changes between an endpoint, a job, a consumer, and a row hook.
|
|
52
|
-
|
|
53
|
-
| Piece | Role |
|
|
54
|
-
| ------------- | -------------------------------------------------------------- |
|
|
55
|
-
| **Trigger** | How work starts — `http`, a signal, `every`, a row change |
|
|
56
|
-
| **Contracts** | `in`, `out`, typed `errors` — validated before and after `do` |
|
|
57
|
-
| **`do`** | The body — every read, write, emit, and call goes through `fx` |
|
|
58
|
-
| **Effects** | Inferred from those `fx` calls — not hand-annotated |
|
|
59
|
-
|
|
60
|
-
Consequence: One documentation path, one trace shape, one Flow model, one thing for an AI agent to learn.
|
|
61
|
-
|
|
62
|
-
## The `fx` Rule
|
|
63
|
-
|
|
64
|
-
**All world access goes through `fx`.** A Flow that imports `node:fs`, calls `fetch` directly, or uses `Date.now()` is a defect.
|
|
65
|
-
|
|
66
|
-
| Inferred From | With `fx` |
|
|
67
|
-
| ----------------------- | --------- |
|
|
68
|
-
| Cache invalidation keys | Yes |
|
|
69
|
-
| Live queries | Yes |
|
|
70
|
-
| Least-privilege tokens | Yes |
|
|
71
|
-
| Deterministic tests | Yes |
|
|
72
|
-
| Manifest Diff | Yes |
|
|
73
|
-
|
|
74
|
-
## What the Manifest Derives
|
|
75
|
-
|
|
76
|
-
At build time OKE extracts a **Manifest** — a machine-readable description of your system. You do not maintain a second source of truth.
|
|
77
|
-
|
|
78
|
-
| Surface | Port / Place | You Maintain? |
|
|
79
|
-
| --------------------------------- | ------------------ | ----------------------------- |
|
|
80
|
-
| Typed client (`okengine/client`) | your app code | No separate codegen |
|
|
81
|
-
| Console panels, traces, explorers | `:6533` | No |
|
|
82
|
-
| MCP for agents | `:6535` | No |
|
|
83
|
-
| Architecture diagram | Console | No — it _is_ the effect graph |
|
|
84
|
-
| Capability matrix + cache keys | compiler / runtime | No — from `fx` |
|
|
85
|
-
|
|
86
|
-
## The Eight Elements
|
|
87
|
-
|
|
88
|
-
An element earns its place only if it has **irreducible physics**. New infrastructure becomes a new **driver** — never a ninth element.
|
|
89
|
-
|
|
90
|
-
| Element | Essence | Replaces the Zoo |
|
|
91
|
-
| ----------- | ----------------------------- | --------------------------------------------------------- |
|
|
92
|
-
| **Flow** | Behavior | endpoint · handler · consumer · job · workflow · webhook |
|
|
93
|
-
| **Signal** | Data in motion | queue · pub/sub · stream · websocket · SSE · event bus |
|
|
94
|
-
| **Store** | Data at rest | database · cache · KV · file storage · search index |
|
|
95
|
-
| **Clock** | Time | cron · delay · timeout · durable sleep · TTL |
|
|
96
|
-
| **Gate** | Permission to act | auth · session · ABAC · rate limit · quota · feature flag |
|
|
97
|
-
| **Vault** | Protected knowledge | secrets · config · environment |
|
|
98
|
-
| **Channel** | Reaching humans | email · SMS · WhatsApp · push |
|
|
99
|
-
| **AI** | Reaching machine intelligence | model calls · prompts · embeddings · agents · RAG |
|
|
100
|
-
|
|
101
|
-
## Core Programming Vocabulary
|
|
102
|
-
|
|
103
|
-
The core programming vocabulary fits in one import. Everything else in the docs is derived from these names:
|
|
104
|
-
|
|
105
|
-
```ts
|
|
106
|
-
import { on, flow, signal, store, clock, gate, vault, channel, ai, plugin } from "okengine";
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
For HTTP-only apps, prefer the slim entry so the cold graph stays on the edge:
|
|
110
|
-
|
|
111
|
-
```ts
|
|
112
|
-
import { on, flow, http, gate, oke, createBunRuntime } from "okengine/http";
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Heavy surfaces (runs, journal factories, compiler extract, the legacy mega-barrel) live on `okengine/runs`, `okengine/journal`, `okengine/compiler`, and `okengine/full`.
|
|
116
|
-
|
|
117
|
-
## Learn More
|
|
118
|
-
|
|
119
|
-
| Topic | Page |
|
|
120
|
-
| ------- | ------------------------------------------------------------------------------- |
|
|
121
|
-
| Why OKE | [Why OKE](/docs/get-started/why) |
|
|
122
|
-
| Folders | [Project structure](/docs/get-started/project-structure) |
|
|
123
|
-
| Flow | [Flow](/docs/elements/flow) |
|
|
124
|
-
| `fx` | [fx](/docs/reference/fx) |
|
|
125
|
-
| Agents | [MCP](/docs/ai/mcp) · [Skills](/docs/ai/skills) · [llms.txt](/docs/ai/llms-txt) |
|
|
126
|
-
|
|
127
|
-
## Next Steps
|
|
128
|
-
|
|
129
|
-
- [Why OKE](/docs/get-started/why)
|
|
130
|
-
- [Installation](/docs/get-started/installation)
|
|
131
|
-
- [Basic Usage](/docs/get-started/basic-usage)
|
|
132
|
-
- [Project Structure](/docs/get-started/project-structure)
|