okengine 0.18.5 → 0.19.1
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/skills.mdx +4 -1
- 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 +208 -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 +235 -0
- package/site/content/docs/elements/ai/index.mdx +342 -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 +257 -0
- package/site/content/docs/elements/channel/email.mdx +269 -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 +301 -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 +448 -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 +375 -0
- package/site/content/docs/elements/index.mdx +20 -10
- package/site/content/docs/elements/signal/broadcast.mdx +519 -0
- package/site/content/docs/elements/signal/index.mdx +352 -0
- package/site/content/docs/elements/signal/live.mdx +591 -0
- package/site/content/docs/elements/signal/meta.json +5 -0
- package/site/content/docs/elements/signal/once.mdx +597 -0
- package/site/content/docs/elements/store/files.mdx +667 -0
- package/site/content/docs/elements/store/index.mdx +313 -0
- package/site/content/docs/elements/store/kv.mdx +637 -0
- package/site/content/docs/elements/store/meta.json +5 -0
- package/site/content/docs/elements/store/search.mdx +950 -0
- package/site/content/docs/elements/store/sql.mdx +941 -0
- package/site/content/docs/elements/vault/config.mdx +259 -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 +276 -0
- package/site/content/docs/elements/vault/secrets.mdx +288 -0
- package/site/content/docs/index.mdx +52 -40
- 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 +138 -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-architecture.mdx +264 -0
- package/site/content/docs/understand/try-it.mdx +58 -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 +80 -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-C_qLDhTq.js +4 -0
- package/src/console/ui-next/dist/assets/agent-disclosure-BHVqr3TN.js +1 -0
- package/src/console/ui-next/dist/assets/cache-glyph-CKe92lRQ.js +1 -0
- package/src/console/ui-next/dist/assets/call-pii-button-DEwTl8ZX.js +1 -0
- package/src/console/ui-next/dist/assets/collapsible-BCBtDrCt.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-JroqeuCp.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-CVHa0RTt.js +1 -0
- package/src/console/ui-next/dist/assets/highlighted-json-DjJW6hqe.js +154 -0
- package/src/console/ui-next/dist/assets/http-method-DC5HBdLU.js +1 -0
- package/src/console/ui-next/dist/assets/index-CYjiZ3WO.js +63 -0
- package/src/console/ui-next/dist/assets/index-D0zS5rKO.css +2 -0
- package/src/console/ui-next/dist/assets/observability-page-CAYMyKb3.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-yAQYLv75.js +18 -0
- package/src/console/ui-next/dist/assets/request-meta-D0yusGxJ.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-BTKJeJ02.js +41 -0
- package/src/console/ui-next/dist/assets/trace-detail-sheet-Bp-Yygs5.js +2 -0
- package/src/console/ui-next/dist/assets/tree-expand-toggle-DoaVDfAM.js +55 -0
- package/src/console/ui-next/dist/assets/units-page-BRz7xyYL.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-3jQt-bOJ.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.test.ts +1 -1
- package/src/console/ui-next/src/features/flows/graph/element-map.ts +5 -3
- 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/trace-detail.test.ts +4 -5
- package/src/console/ui-next/src/features/flows/traces/trace-gates.ts +3 -6
- 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/gate/declare.ts +1 -1
- package/src/elements/gate.ts +1 -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 +214 -0
- package/src/elements/store/search-runtime.pglite.test.ts +186 -0
- package/src/elements/store/search-runtime.ts +314 -0
- package/src/elements/store/search.test.ts +226 -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 +52 -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 +2 -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
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
title: "Configuration"
|
|
3
3
|
description: "Every option in oke.config.ts — three environments (dev · test · prod), drivers, images, i18n, tenancy, privacy, db sync, topology, ports, and console."
|
|
4
4
|
icon: "Settings2"
|
|
5
|
+
source: "docs/spec/unified-theory.md"
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
Complete reference for `oke.config.ts`. Options below match `defineConfig`. Driver maps use three keys: **dev** · **test** · **prod**.
|
|
@@ -14,9 +15,9 @@ export default defineConfig({
|
|
|
14
15
|
});
|
|
15
16
|
```
|
|
16
17
|
|
|
17
|
-
<Callout title="
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
<Callout title="The one rule">
|
|
19
|
+
Pin drivers and images in `oke.config.ts` for `dev` · `test` · `prod`. We test on what we deploy:
|
|
20
|
+
Docker-first local stack, PGLite for tests, same protocol ids in production.
|
|
20
21
|
</Callout>
|
|
21
22
|
|
|
22
23
|
## Environments
|
|
@@ -116,7 +117,7 @@ Built-in defaults (`DRIVER_DEFAULTS`) when a key is omitted:
|
|
|
116
117
|
| `channel.sms` | env driver map | `console` · `taqnyat` · `msegat` · `unifonic` |
|
|
117
118
|
| `channel.whatsapp` | env driver map | `console` · `wa-cloud` |
|
|
118
119
|
| `channel.push` | env driver map | `console` · `webpush` · `fcm` |
|
|
119
|
-
| `ai` | env driver map | `mock` · `anthropic` · `openai-compatible` · `bedrock` · `vertex`
|
|
120
|
+
| `ai` | env driver map | `mock` · `anthropic` · `openai-compatible` · `bedrock` · `vertex` |
|
|
120
121
|
| `runs` | env driver map | `memory` · `files` (Parquet + DuckDB at `.oke/runs`) · `postgres` · `clickhouse` |
|
|
121
122
|
| `prod` | `string[]` | flat protocol list for the Manifest — nested maps are preferred |
|
|
122
123
|
|
|
@@ -150,11 +151,10 @@ images: {
|
|
|
150
151
|
store: {
|
|
151
152
|
sql: "postgres:18-alpine",
|
|
152
153
|
kv: "redis:8-alpine",
|
|
153
|
-
files: "rustfs/rustfs:1.0.0-rc.
|
|
154
|
+
files: "rustfs/rustfs:1.0.0-rc.5",
|
|
154
155
|
},
|
|
155
|
-
channel: { email: "axllent/mailpit:v1.
|
|
156
|
-
pgdog: "ghcr.io/pgdogdev/pgdog:v0.1.
|
|
157
|
-
// ai: "ghcr.io/ggml-org/llama.cpp:server-b10450",
|
|
156
|
+
channel: { email: "axllent/mailpit:v1.31.1" },
|
|
157
|
+
pgdog: "ghcr.io/pgdogdev/pgdog:v0.1.57",
|
|
158
158
|
// proxy: "caddy:2-alpine",
|
|
159
159
|
},
|
|
160
160
|
```
|
|
@@ -163,7 +163,10 @@ Omitted image keys mean no container for that role. When both `store.sql` and `p
|
|
|
163
163
|
|
|
164
164
|
For `store.kv`, pin Redis (default), Valkey, or Dragonfly — driver id stays `redis`.
|
|
165
165
|
`{ durable: true }` KV lives in SQL (`oke_kv` on `DATABASE_URL`), not a second Redis image.
|
|
166
|
-
|
|
166
|
+
|
|
167
|
+
Compose does not manage AI inference — [OpenRouter](/docs/recipes/openrouter) or BYO
|
|
168
|
+
`OKE_AI_URL` ([Models](/docs/elements/ai/models)). For `proxy`, see [Caddy](/docs/recipes/caddy),
|
|
169
|
+
[Traefik](/docs/recipes/traefik), or [nginx](/docs/recipes/nginx).
|
|
167
170
|
|
|
168
171
|
## i18n
|
|
169
172
|
|
|
@@ -267,6 +270,23 @@ Domain schema sync for `oke db push | generate | migrate` (Drizzle). Unrelated t
|
|
|
267
270
|
|
|
268
271
|
## Learn more
|
|
269
272
|
|
|
270
|
-
- [CLI
|
|
273
|
+
- [CLI](/docs/reference/cli) — `oke dev` · `oke test` · `oke db`
|
|
271
274
|
- [Environment Variables](/docs/reference/environment-variables) — URL and secret resolution
|
|
272
275
|
- [Store](/docs/elements/store) — what the store drivers back
|
|
276
|
+
- [i18n](/docs/reference/i18n) — locale catalogs beyond the config block
|
|
277
|
+
|
|
278
|
+
## Next
|
|
279
|
+
|
|
280
|
+
<Cards>
|
|
281
|
+
<Card
|
|
282
|
+
title="Environment Variables"
|
|
283
|
+
description="URLs and secrets Compose writes."
|
|
284
|
+
href="/docs/reference/environment-variables"
|
|
285
|
+
/>
|
|
286
|
+
<Card title="CLI" description="Commands that honor this config." href="/docs/reference/cli" />
|
|
287
|
+
<Card
|
|
288
|
+
title="Security"
|
|
289
|
+
description="Host, Origin, planes, and MCP ports."
|
|
290
|
+
href="/docs/reference/security"
|
|
291
|
+
/>
|
|
292
|
+
</Cards>
|
|
@@ -1,12 +1,51 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Environment Variables"
|
|
3
|
-
description: "Every environment variable OKE reads — connection URLs, driver overrides, secrets, and CLI flags
|
|
4
|
-
icon: "
|
|
3
|
+
description: "Every environment variable OKE reads — connection URLs, driver overrides, secrets, and CLI flags."
|
|
4
|
+
icon: "Variable"
|
|
5
|
+
source: "docs/spec/unified-theory.md"
|
|
5
6
|
---
|
|
6
7
|
|
|
7
|
-
OKE reads environment variables at boot for connection detail and secrets — never for
|
|
8
|
+
OKE reads environment variables at boot for connection detail and secrets — never for
|
|
9
|
+
behavior you could declare in `oke.config.ts`. Under `oke dev`, Compose writes these
|
|
10
|
+
into `.env.local`; this page is the full map.
|
|
8
11
|
|
|
9
|
-
<Callout title="
|
|
12
|
+
<Callout title="The one rule">
|
|
13
|
+
Put drivers, images, and locale lists in `oke.config.ts`. Use env vars for URLs, credentials, and
|
|
14
|
+
runtime posture the host injects — not for inventing new behavior.
|
|
15
|
+
</Callout>
|
|
16
|
+
|
|
17
|
+
## Smallest Example
|
|
18
|
+
|
|
19
|
+
<Steps>
|
|
20
|
+
|
|
21
|
+
<Step>
|
|
22
|
+
### Let Compose write the map
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
oke dev
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Compose fills `.env.local` with `DATABASE_URL`, Redis, S3, and vault keys for the
|
|
29
|
+
pinned images.
|
|
30
|
+
|
|
31
|
+
</Step>
|
|
32
|
+
|
|
33
|
+
<Step>
|
|
34
|
+
### Override one URL when needed
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
export DATABASE_URL=postgres://user:pass@db:5432/oke
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Conventional names win over `OKE_*` aliases, then built-in defaults.
|
|
41
|
+
|
|
42
|
+
</Step>
|
|
43
|
+
|
|
44
|
+
</Steps>
|
|
45
|
+
|
|
46
|
+
## Precedence
|
|
47
|
+
|
|
48
|
+
<Callout title="Resolution order">
|
|
10
49
|
For anything with both an `OKE_*` variable and a conventional one (like `DATABASE_URL`), the
|
|
11
50
|
conventional variable wins first, then the `OKE_*` form, then the built-in default.
|
|
12
51
|
</Callout>
|
|
@@ -101,10 +140,11 @@ Read when `drivers.channel.sms` resolves to that driver id (`console` opens noth
|
|
|
101
140
|
WhatsApp (`wa-cloud`) and push (`webpush` / `fcm`) are not opened from env at
|
|
102
141
|
boot — pass them on `BootOptions.channel.drivers` with their open options.
|
|
103
142
|
|
|
104
|
-
## Live test gates (opt-in)
|
|
143
|
+
## Live test gates (opt-in, contributors)
|
|
105
144
|
|
|
106
|
-
Provider-quota-burning live suites are double-gated: the
|
|
107
|
-
provider's real credentials — credentials alone never
|
|
145
|
+
Provider-quota-burning live suites in the okengine repo are double-gated: the
|
|
146
|
+
medium flag **plus** that provider's real credentials — credentials alone never
|
|
147
|
+
send. App projects can ignore these.
|
|
108
148
|
|
|
109
149
|
| Variable | Used for |
|
|
110
150
|
| ---------------- | --------------------------------------------------------- |
|
|
@@ -113,18 +153,17 @@ provider's real credentials — credentials alone never send.
|
|
|
113
153
|
|
|
114
154
|
## AI providers
|
|
115
155
|
|
|
116
|
-
| Variable | Used for
|
|
117
|
-
| --------------------- |
|
|
118
|
-
| `ANTHROPIC_API_KEY` | `anthropic` driver credential
|
|
119
|
-
| `ANTHROPIC_MODEL` | Model override for the anthropic driver
|
|
120
|
-
| `OPENAI_API_KEY` | `openai-compatible` driver credential
|
|
121
|
-
| `OPENAI_BASE_URL` | `openai-compatible` base URL
|
|
122
|
-
| `OKE_AI_DRIVER` | Force the AI driver id (honoured under Compose / `oke dev`)
|
|
123
|
-
| `OKE_AI_URL` |
|
|
124
|
-
| `OKE_AI_MODEL` | Default model id
|
|
125
|
-
| `OKE_AI_VISION_MODEL` | Vision model id written by `oke ai setup` (logical `ai.model("vision")`)
|
|
126
|
-
| `OKE_AI_EMBED_MODEL` | Embedding model id written by `oke ai setup`
|
|
127
|
-
| `OLLAMA_HOST` | Alternate Ollama host (`host:port` or URL) when `OKE_AI_URL` is unset | — |
|
|
156
|
+
| Variable | Used for | Default when unset |
|
|
157
|
+
| --------------------- | --------------------------------------------------------------------------------------- | ------------------ |
|
|
158
|
+
| `ANTHROPIC_API_KEY` | `anthropic` driver credential | — |
|
|
159
|
+
| `ANTHROPIC_MODEL` | Model override for the anthropic driver | — |
|
|
160
|
+
| `OPENAI_API_KEY` | `openai-compatible` driver credential | — |
|
|
161
|
+
| `OPENAI_BASE_URL` | `openai-compatible` base URL | OpenAI cloud |
|
|
162
|
+
| `OKE_AI_DRIVER` | Force the AI driver id (honoured under Compose / `oke dev`) | config map |
|
|
163
|
+
| `OKE_AI_URL` | openai-compatible base URL (must end in `/v1`) — BYO; Compose does not manage inference | — |
|
|
164
|
+
| `OKE_AI_MODEL` | Default model id for openai-compatible / setup bindings | — |
|
|
165
|
+
| `OKE_AI_VISION_MODEL` | Vision model id written by `oke ai setup` (logical `ai.model("vision")`) | — |
|
|
166
|
+
| `OKE_AI_EMBED_MODEL` | Embedding model id written by `oke ai setup` | — |
|
|
128
167
|
|
|
129
168
|
## Framework behavior
|
|
130
169
|
|
|
@@ -145,8 +184,42 @@ Console operator rows are **not** stored in `.oke/console.sqlite`. With `DATABAS
|
|
|
145
184
|
`OKE_STORE_SQL_URL`) they live in Postgres schema `oke_console`. Without a Postgres URL,
|
|
146
185
|
Console uses PGlite under `.oke/console-pg` for local reopen durability.
|
|
147
186
|
|
|
187
|
+
## Troubleshooting
|
|
188
|
+
|
|
189
|
+
<Accordions>
|
|
190
|
+
|
|
191
|
+
<Accordion title="Compose did not write .env.local">
|
|
192
|
+
Run `oke dev` (not a bare `bun` entry) so Compose posture sets `OKE_DOCKER=1` and writes
|
|
193
|
+
connection URLs. Confirm `images` pins exist in [Configuration](/docs/reference/configuration).
|
|
194
|
+
</Accordion>
|
|
195
|
+
|
|
196
|
+
<Accordion title="Vault sealed / missing master key">
|
|
197
|
+
Built-in vault needs `OKE_VAULT_MASTER_KEY` (or `oke vault unseal`). See
|
|
198
|
+
[Vault](/docs/elements/vault).
|
|
199
|
+
</Accordion>
|
|
200
|
+
|
|
201
|
+
<Accordion title="Console operator store missing">
|
|
202
|
+
Operator rows need `DATABASE_URL` or `OKE_STORE_SQL_URL` (schema `oke_console`). Without Postgres,
|
|
203
|
+
Console uses PGlite under `.oke/console-pg`.
|
|
204
|
+
</Accordion>
|
|
205
|
+
|
|
206
|
+
</Accordions>
|
|
207
|
+
|
|
148
208
|
## Learn more
|
|
149
209
|
|
|
150
210
|
- [Configuration](/docs/reference/configuration) — the declarative side of the same knobs
|
|
151
211
|
- [Vault](/docs/elements/vault) — how `OKE_VAULT_*` gets minted on first boot
|
|
152
|
-
- [CLI
|
|
212
|
+
- [CLI](/docs/reference/cli) — which commands write these for you
|
|
213
|
+
- [Security](/docs/reference/security) — `OKE_CONSOLE_SECRET`
|
|
214
|
+
|
|
215
|
+
## Next
|
|
216
|
+
|
|
217
|
+
<Cards>
|
|
218
|
+
<Card
|
|
219
|
+
title="Configuration"
|
|
220
|
+
description="Drivers and images in oke.config.ts."
|
|
221
|
+
href="/docs/reference/configuration"
|
|
222
|
+
/>
|
|
223
|
+
<Card title="CLI" description="oke dev writes the env map." href="/docs/reference/cli" />
|
|
224
|
+
<Card title="Vault" description="Master key and managed providers." href="/docs/elements/vault" />
|
|
225
|
+
</Cards>
|
|
@@ -1,18 +1,66 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Errors"
|
|
3
|
-
description: "
|
|
3
|
+
description: "OKE codes, gate denials, and subsystem errors — stable numeric codes with causes and fixes."
|
|
4
4
|
icon: "OctagonAlert"
|
|
5
|
+
source: "docs/spec/unified-theory.md"
|
|
5
6
|
---
|
|
6
7
|
|
|
7
|
-
OKE has two error families
|
|
8
|
+
OKE has two error families: **failures are values** a Flow returns
|
|
9
|
+
(`{ data: null, error: { code, data } }`), while **framework errors are thrown**
|
|
10
|
+
for invariant violations (permanent numeric code + cause + fix).
|
|
8
11
|
|
|
9
12
|
```text
|
|
10
|
-
|
|
13
|
+
OKE1110 domain table not found — migrations have not been applied.
|
|
11
14
|
→ run `oke db migrate` against this environment.
|
|
12
|
-
https://oke.omqkhafi.dev/e/
|
|
15
|
+
https://oke.omqkhafi.dev/e/1110
|
|
13
16
|
```
|
|
14
17
|
|
|
15
|
-
Codes are
|
|
18
|
+
Codes are stable after the domain-range renumber — match them safely across upgrades
|
|
19
|
+
(see the Unreleased Breaking Changes mapping if you still have a pre-renumber note).
|
|
20
|
+
|
|
21
|
+
<Callout title="The one rule">
|
|
22
|
+
Switch on `error.code` for Flow failures. Catch / match `OKE####` only for thrown framework
|
|
23
|
+
invariants. Do not treat a typed `NotFound` as an unhandled exception.
|
|
24
|
+
</Callout>
|
|
25
|
+
|
|
26
|
+
## Smallest Example
|
|
27
|
+
|
|
28
|
+
<Steps>
|
|
29
|
+
|
|
30
|
+
<Step>
|
|
31
|
+
### Return a typed failure
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
on(
|
|
35
|
+
http.get({
|
|
36
|
+
in: z.object({ id: z.string() }),
|
|
37
|
+
errors: { NotFound: z.object({ id: z.string() }) },
|
|
38
|
+
}),
|
|
39
|
+
flow({
|
|
40
|
+
do: async ({ id }, fx) => {
|
|
41
|
+
const [row] = await fx.store(db).select().from(notes).where(eq(notes.id, id));
|
|
42
|
+
if (!row) return fx.fail("NotFound", { id });
|
|
43
|
+
return row;
|
|
44
|
+
},
|
|
45
|
+
}),
|
|
46
|
+
);
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
</Step>
|
|
50
|
+
|
|
51
|
+
<Step>
|
|
52
|
+
### Handle it on the client
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
const { data, error } = await api.notes.get({ id });
|
|
56
|
+
if (error?.code === "NotFound") {
|
|
57
|
+
// value — not a throw
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
</Step>
|
|
62
|
+
|
|
63
|
+
</Steps>
|
|
16
64
|
|
|
17
65
|
## Localized messages
|
|
18
66
|
|
|
@@ -25,34 +73,42 @@ from `Accept-Language` (matched to `i18n.locales`); fallback is `i18n.default`.
|
|
|
25
73
|
| Thrown `OkeError` | `oke.{code}.cause` · `oke.{code}.fix` | Cause + fix lines in the thrown message |
|
|
26
74
|
|
|
27
75
|
Override via `defineLocale`. Pass `fail(code, data, { message })` for a custom
|
|
28
|
-
string. Custom app codes stay message-less until registered.
|
|
76
|
+
string. Custom app codes stay message-less until registered. Full catalogs:
|
|
77
|
+
[i18n](/docs/reference/i18n).
|
|
29
78
|
|
|
30
79
|
## OKE numeric codes
|
|
31
80
|
|
|
32
|
-
| Code | Name | Cause
|
|
33
|
-
| ------ | -------------------- |
|
|
34
|
-
| `1001` | undeclared read | Flow reads a resource not in `effects.reads`
|
|
35
|
-
| `1002` | undeclared write | Flow writes a resource not in `effects.writes`
|
|
36
|
-
| `1003` | undeclared emit | Flow emits a signal not in `effects.emits`
|
|
37
|
-
| `1004` | undeclared send | Flow sends a template not in `effects.sends`
|
|
38
|
-
| `1005` | undeclared ask | Flow asks a prompt not in `effects.asks`
|
|
39
|
-
| `1006` | undeclared secret | Flow reads a secret not in `effects.secrets`
|
|
40
|
-
| `1007` | undeclared call | Flow calls a flow not in `effects.calls`
|
|
41
|
-
| `
|
|
42
|
-
| `
|
|
43
|
-
| `
|
|
44
|
-
| `
|
|
45
|
-
| `
|
|
46
|
-
| `
|
|
47
|
-
| `
|
|
48
|
-
| `
|
|
49
|
-
| `
|
|
50
|
-
| `
|
|
81
|
+
| Code | Name | Cause | Fix |
|
|
82
|
+
| ------ | -------------------- | ------------------------------------------------------ | --------------------------------------------------------- |
|
|
83
|
+
| `1001` | undeclared read | Flow reads a resource not in `effects.reads` | Add it to the flow's `effects.reads` |
|
|
84
|
+
| `1002` | undeclared write | Flow writes a resource not in `effects.writes` | Add it to the flow's `effects.writes` |
|
|
85
|
+
| `1003` | undeclared emit | Flow emits a signal not in `effects.emits` | Add it to the flow's `effects.emits` |
|
|
86
|
+
| `1004` | undeclared send | Flow sends a template not in `effects.sends` | Add it to the flow's `effects.sends` |
|
|
87
|
+
| `1005` | undeclared ask | Flow asks a prompt not in `effects.asks` | Add it to the flow's `effects.asks` |
|
|
88
|
+
| `1006` | undeclared secret | Flow reads a secret not in `effects.secrets` | Add it to the flow's `effects.secrets` |
|
|
89
|
+
| `1007` | undeclared call | Flow calls a flow not in `effects.calls` | Add it to the flow's `effects.calls` |
|
|
90
|
+
| `1008` | undeclared fetch | Flow fetches a host not in `effects.fetches` | Add the hostname to the flow's `effects.fetches` |
|
|
91
|
+
| `1009` | undeclared embed | Flow embeds with a model not in `effects.embeds` | Add it to the flow's `effects.embeds` |
|
|
92
|
+
| `1020` | no effects declared | Flow has no `effects` and no Manifest to infer from | Run `oke build` / `oke dev`, or declare effects |
|
|
93
|
+
| `1030` | adopt barrel stale | A `src/flows/<unit>` folder was not adopted | Run `oke dev` or `oke build` to regenerate `generated.ts` |
|
|
94
|
+
| `1040` | HTTP path unresolved | Pathless `http.get()` never received a file-tree stamp | Import `@/flows/generated`, or pass `http.get("/…")` |
|
|
95
|
+
| `1041` | HTTP route clash | Two HTTP flows share the same method + path | Give each flow a unique method + path |
|
|
96
|
+
| `1045` | HTTP flow unnamed | Adopted HTTP flow still has no `unit.export` | Export from `flows/<unit>/` or pass a named `flow` |
|
|
97
|
+
| `1050` | live exposure dup | Same signal, gates, and match on two GET routes | Change the gate or path-param filter |
|
|
98
|
+
| `1060` | MCP tool duplicate | Two MCP tool bindings share the same tool name | Give each MCP tool exposure a unique name |
|
|
99
|
+
| `1110` | schema missing | Domain table absent in `prod` — no auto-DDL | Run `oke db migrate` against this environment |
|
|
100
|
+
| `1210` | live resume gap | `Last-Event-ID` is not on the retained tape | Reconnect without the cursor; remaining tape replays |
|
|
101
|
+
| `1240` | orphan emit | Emit with zero subscribers and `optional` false | Add `on(signal, …)` or declare `optional: true` |
|
|
102
|
+
| `1250` | signal schema | Emit payload failed the signal's `schema` | Pass a payload that matches `schema`, or remove it |
|
|
103
|
+
| `1605` | channel schema | Send payload failed the template's `schema` | Fix template `data` payload or the template `schema` |
|
|
104
|
+
| `1810` | tenant required | Tenant-scoped op with no `fx.tenant.id` | `switchTenant`, signed `tid`, or tenant header |
|
|
105
|
+
| `1820` | tenant not member | Client-supplied tenant id is not a membership | Pick from `listTenants` or add the user as a member |
|
|
106
|
+
| `1830` | tenant unknown scope | Tenant role used an invented or `console:*` scope | Use a declared application scope |
|
|
51
107
|
|
|
52
108
|
<Callout title="Effects are usually inferred">
|
|
53
|
-
The 1001–1007 family exists for flows that declare effects explicitly. Most apps
|
|
54
|
-
`effects` block — inference covers them — so seeing one of these means an explicit
|
|
55
|
-
drifted from the code.
|
|
109
|
+
The 1001–1007 · 1008 · 1009 family exists for flows that declare effects explicitly. Most apps
|
|
110
|
+
never write an `effects` block — inference covers them — so seeing one of these means an explicit
|
|
111
|
+
declaration drifted from the code.
|
|
56
112
|
</Callout>
|
|
57
113
|
|
|
58
114
|
## Gate denials (typed failures)
|
|
@@ -98,9 +154,56 @@ Thrown by specific subsystems — each names its own cause:
|
|
|
98
154
|
| `AccessGrantError` | Console access grant rejected | Re-request access with a valid grant |
|
|
99
155
|
| `UnsupportedPathError` | A route path shape the router can't compile | Simplify the path pattern |
|
|
100
156
|
|
|
157
|
+
## Troubleshooting
|
|
158
|
+
|
|
159
|
+
<Accordions>
|
|
160
|
+
|
|
161
|
+
<Accordion title="I hit OKE1001–1009">
|
|
162
|
+
Explicit `effects` drifted from `do`. Add the missing ledger entry or remove the hand-written
|
|
163
|
+
`effects` block so inference covers the Flow.
|
|
164
|
+
</Accordion>
|
|
165
|
+
|
|
166
|
+
<Accordion title="OKE1040 pathless HTTP never stamped">
|
|
167
|
+
Import `@/flows/generated`, or pass an explicit path: `http.get("/users/:id")`.
|
|
168
|
+
</Accordion>
|
|
169
|
+
|
|
170
|
+
<Accordion title="OKE1041 method + path bound twice">
|
|
171
|
+
A resource mount and a handwritten route share the same method + path. Drop one binding.
|
|
172
|
+
</Accordion>
|
|
173
|
+
|
|
174
|
+
<Accordion title="OKE1110 in production">
|
|
175
|
+
Domain tables missing — prod has no auto-DDL. Run `oke db migrate` against that environment
|
|
176
|
+
([CLI](/docs/reference/cli)).
|
|
177
|
+
</Accordion>
|
|
178
|
+
|
|
179
|
+
<Accordion title="Unauthorized / Forbidden / RateLimited">
|
|
180
|
+
These are gate denials returned as values before `do` runs — not thrown OKE codes. Fix the policy,
|
|
181
|
+
membership, or rate budget. See [Gate](/docs/elements/gate).
|
|
182
|
+
</Accordion>
|
|
183
|
+
|
|
184
|
+
<Accordion title="VaultBootError at startup">
|
|
185
|
+
A vault contract has no value in any resolution layer. The error lists every gap — set the missing
|
|
186
|
+
names ([Vault](/docs/elements/vault)).
|
|
187
|
+
</Accordion>
|
|
188
|
+
|
|
189
|
+
</Accordions>
|
|
190
|
+
|
|
101
191
|
## Learn more
|
|
102
192
|
|
|
103
193
|
- [i18n](/docs/reference/i18n) — catalogs, `fx.t`, locale matching
|
|
104
194
|
- [Flow](/docs/elements/flow) — `fx.fail` and the response envelope
|
|
105
195
|
- [Gate](/docs/elements/gate) — where the three denials come from
|
|
106
|
-
- [CLI
|
|
196
|
+
- [CLI](/docs/reference/cli) — `oke db migrate` and friends
|
|
197
|
+
- [fx](/docs/reference/fx) — how failures and effects surface
|
|
198
|
+
|
|
199
|
+
## Next
|
|
200
|
+
|
|
201
|
+
<Cards>
|
|
202
|
+
<Card title="fx" description="The door that records effects." href="/docs/reference/fx" />
|
|
203
|
+
<Card
|
|
204
|
+
title="Gate"
|
|
205
|
+
description="Where Unauthorized and Forbidden come from."
|
|
206
|
+
href="/docs/elements/gate"
|
|
207
|
+
/>
|
|
208
|
+
<Card title="Client" description="Switch on error.code in the browser." href="/docs/client" />
|
|
209
|
+
</Cards>
|