okengine 0.21.1 → 0.23.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 +11 -4
- package/LICENSE +202 -0
- package/NOTICE +2 -0
- package/README.md +15 -9
- package/manifest.v1.schema.json +54 -0
- package/package.json +53 -38
- package/site/content/docs/ai/mcp.mdx +13 -9
- package/site/content/docs/ai/skills.mdx +2 -2
- package/site/content/docs/client/calling.mdx +27 -19
- package/site/content/docs/client/index.mdx +1 -1
- package/site/content/docs/elements/ai/agents.mdx +61 -13
- package/site/content/docs/elements/ai/decide.mdx +536 -0
- package/site/content/docs/elements/ai/events.mdx +373 -0
- package/site/content/docs/elements/ai/index.mdx +9 -3
- package/site/content/docs/elements/ai/meta.json +1 -1
- package/site/content/docs/elements/ai/prompts.mdx +4 -2
- package/site/content/docs/elements/channel/email.mdx +1 -1
- package/site/content/docs/elements/channel/index.mdx +1 -1
- package/site/content/docs/elements/flow/http.mdx +4 -4
- package/site/content/docs/elements/flow/index.mdx +3 -3
- package/site/content/docs/elements/flow/meta.json +1 -1
- package/site/content/docs/elements/gate/auth.mdx +4 -1
- package/site/content/docs/elements/gate/tenancy.mdx +1 -1
- package/site/content/docs/elements/store/index.mdx +1 -1
- package/site/content/docs/elements/store/kv.mdx +5 -5
- package/site/content/docs/elements/vault/rotation.mdx +15 -0
- package/site/content/docs/plugins/otp.mdx +31 -31
- package/site/content/docs/recipes/dragonfly.mdx +5 -5
- package/site/content/docs/recipes/index.mdx +6 -6
- package/site/content/docs/recipes/mailpit.mdx +1 -1
- package/site/content/docs/recipes/meilisearch.mdx +1 -1
- package/site/content/docs/recipes/pgdog.mdx +1 -1
- package/site/content/docs/recipes/postgres.mdx +12 -8
- package/site/content/docs/recipes/redis.mdx +4 -4
- package/site/content/docs/reference/cli.mdx +2 -1
- package/site/content/docs/reference/configuration.mdx +11 -9
- package/site/content/docs/reference/errors.mdx +12 -2
- package/site/content/docs/reference/fx.mdx +35 -21
- package/site/content/docs/reference/idempotency.mdx +192 -0
- package/site/content/docs/reference/index.mdx +6 -1
- package/site/content/docs/reference/meta.json +2 -1
- package/site/content/docs/understand/meta.json +1 -1
- package/site/content/docs/{elements/flow → understand}/routing.mdx +11 -10
- package/site/content/docs/understand/the-architecture.mdx +14 -12
- package/site/content/docs/understand/try-it.mdx +3 -3
- package/src/auth/api-key-sql.test.ts +44 -0
- package/src/auth/api-key-sql.ts +1 -0
- package/src/auth/api-keys.ts +30 -12
- package/src/auth/config.ts +6 -2
- package/src/auth/gate-auth.test.ts +20 -0
- package/src/cli/agents-md.test.ts +25 -0
- package/src/cli/ask-vault-gaps.test.ts +38 -1
- package/src/cli/ask-vault-gaps.ts +35 -2
- package/src/cli/competitor-mention-removal.test.ts +3 -3
- package/src/cli/decide.ts +174 -0
- package/src/cli/decision-lock-watch.test.ts +45 -0
- package/src/cli/decision-lock-watch.ts +51 -0
- package/src/cli/dev-app-runner.ts +34 -8
- package/src/cli/dev-auth-secret.test.ts +49 -0
- package/src/cli/dev-auth-secret.ts +49 -0
- package/src/cli/dev-hot.test.ts +41 -0
- package/src/cli/dev-hot.ts +48 -0
- package/src/cli/dev.test.ts +1 -1
- package/src/cli/dev.ts +24 -6
- package/src/cli/docker-cli.test.ts +1 -1
- package/src/cli/eval.ts +142 -1
- package/src/cli/index.ts +14 -1
- package/src/cli/load-config.images.test.ts +12 -12
- package/src/cli/load-config.ts +2 -2
- package/src/cli/mcp-from-console.ts +48 -0
- package/src/cli/registry.ts +35 -1
- package/src/cli/vault-cmd.test.ts +23 -0
- package/src/cli/vault-cmd.ts +7 -0
- package/src/client/agent.ts +307 -0
- package/src/client/create.ts +18 -1
- package/src/client/transport.test.ts +245 -0
- package/src/client/transport.ts +133 -19
- package/src/client/types.ts +29 -3
- package/src/client-react/index.ts +7 -1
- package/src/client-react/use-agent-run.test.ts +271 -0
- package/src/client-react/use-agent-run.ts +193 -0
- package/src/compiler/ai-approval.test.ts +36 -0
- package/src/compiler/ai-repair.test.ts +22 -0
- package/src/compiler/decisions.extract.test.ts +164 -0
- package/src/compiler/effects-infer.ts +753 -17
- package/src/compiler/extract.test.ts +37 -0
- package/src/compiler/extract.ts +381 -24
- package/src/compiler/fixtures/skyport.expected.json +24 -0
- package/src/compiler/fx-follow.test.ts +164 -0
- package/src/compiler/fx-index.ts +399 -0
- package/src/compiler/response.ts +35 -2
- package/src/config/index.ts +21 -3
- package/src/console/server/ai-runs-flows.ts +269 -0
- package/src/console/server/ai-runs.test.ts +323 -0
- package/src/console/server/ai-runs.ts +562 -0
- package/src/console/server/ai.ts +12 -1
- package/src/console/server/app.ts +10 -1
- package/src/console/server/decisions-flows.ts +157 -0
- package/src/console/server/decisions.test.ts +66 -0
- package/src/console/server/decisions.ts +229 -0
- package/src/console/server/flows-invoke.test.ts +2 -2
- package/src/console/server/flows.ts +50 -2
- package/src/console/server/invoke-user-flow.ts +9 -0
- package/src/console/server/runs-ingest.ts +16 -0
- package/src/console/server/serve.ts +5 -0
- package/src/console/server/state.ts +25 -1
- package/src/console/server/store-stats.test.ts +47 -0
- package/src/console/server/store-stats.ts +92 -18
- package/src/console/ui-next/dist/assets/access-page-DDKkhT9v.js +4 -0
- package/src/console/ui-next/dist/assets/agent-disclosure-62Xts8Xi.js +1 -0
- package/src/console/ui-next/dist/assets/{cache-glyph-92uM5MO7.js → cache-glyph-DyeoKHKA.js} +1 -1
- package/src/console/ui-next/dist/assets/{call-pii-button-DtGVPtcs.js → call-pii-button-DvfpLXsU.js} +1 -1
- package/src/console/ui-next/dist/assets/{collapsible-DN7l6zmC.js → collapsible-BY03SeCg.js} +1 -1
- package/src/console/ui-next/dist/assets/confirm-sheet-DZfuJXP4.js +1 -0
- package/src/console/ui-next/dist/assets/copy-inline-button-BTjPVjRT.js +1 -0
- package/src/console/ui-next/dist/assets/decisions-page-CgkKlA56.js +1 -0
- package/src/console/ui-next/dist/assets/detail-header-Dk5LipF6.js +1 -0
- package/src/console/ui-next/dist/assets/dropdown-menu-CRGrj5JU.js +1 -0
- package/src/console/ui-next/dist/assets/duration-tone-Y6HLjyJ5.js +9 -0
- package/src/console/ui-next/dist/assets/element-icons-C6t8Vlml.js +1 -0
- package/src/console/ui-next/dist/assets/explorer-chrome-Dslh2yE8.js +1 -0
- package/src/console/ui-next/dist/assets/explorer-empty-CIVg7Jgb.js +1 -0
- package/src/console/ui-next/dist/assets/flows-page-DLPfNy-_.js +1 -0
- package/src/console/ui-next/dist/assets/{highlighted-json-BlAEVgNW.js → highlighted-json-D7nNzpgB.js} +1 -1
- package/src/console/ui-next/dist/assets/{http-method-BDf7OAHv.js → http-method-DdL19zzh.js} +1 -1
- package/src/console/ui-next/dist/assets/index-BlrN49Hs.css +2 -0
- package/src/console/ui-next/dist/assets/index-C0lc_s9d.js +58 -0
- package/src/console/ui-next/dist/assets/observability-page-CRlcyLCC.js +8 -0
- package/src/console/ui-next/dist/assets/{replica-lag-B3GLNVfF.js → replica-lag-Bb3FWUu9.js} +7 -7
- package/src/console/ui-next/dist/assets/request-meta-DYBMWhX8.js +1 -0
- package/src/console/ui-next/dist/assets/shortcut-keys-DTE1sjTC.js +1 -0
- package/src/console/ui-next/dist/assets/store-page-CcE-SXC8.js +41 -0
- package/src/console/ui-next/dist/assets/trace-detail-sheet-CKMSEQ4s.js +2 -0
- package/src/console/ui-next/dist/assets/tree-expand-toggle-QOfk0M0H.js +55 -0
- package/src/console/ui-next/dist/assets/units-page-DKC1CDDd.js +1 -0
- package/src/console/ui-next/dist/assets/use-vault-list-BAyQG8Re.js +1 -0
- package/src/console/ui-next/dist/assets/vault-page-B54v4Yit.js +2 -0
- package/src/console/ui-next/dist/index.html +4 -3
- package/src/console/ui-next/seed-parked-approval.ts +126 -0
- package/src/console/ui-next/src/client.ts +224 -1
- package/src/console/ui-next/src/components/explorer/detail-header.tsx +9 -0
- package/src/console/ui-next/src/components/explorer/explorer-start-toggle.tsx +5 -1
- package/src/console/ui-next/src/components/ui/sheet-form.tsx +21 -12
- package/src/console/ui-next/src/features/flows/decisions/decisions-page.tsx +216 -0
- package/src/console/ui-next/src/features/flows/decisions/resolve.test.ts +48 -0
- package/src/console/ui-next/src/features/flows/decisions/resolve.ts +111 -0
- package/src/console/ui-next/src/features/flows/flows-page.tsx +10 -0
- package/src/console/ui-next/src/features/flows/graph/element-map.ts +1 -0
- package/src/console/ui-next/src/features/flows/traces/effect-kind.ts +6 -0
- package/src/console/ui-next/src/features/flows/traces/effect-summary.test.ts +24 -0
- package/src/console/ui-next/src/features/flows/traces/effect-summary.ts +24 -0
- package/src/console/ui-next/src/features/flows/traces/http-status.ts +58 -0
- package/src/console/ui-next/src/features/flows/traces/request-client-card.tsx +355 -0
- package/src/console/ui-next/src/features/flows/traces/request-client.test.ts +114 -0
- package/src/console/ui-next/src/features/flows/traces/request-client.ts +423 -0
- package/src/console/ui-next/src/features/flows/traces/request-input-view.test.ts +52 -6
- package/src/console/ui-next/src/features/flows/traces/request-input-view.ts +85 -19
- package/src/console/ui-next/src/features/flows/traces/trace-detail-sheet.tsx +505 -80
- package/src/console/ui-next/src/features/flows/traces/trace-lanes.test.ts +61 -0
- package/src/console/ui-next/src/features/flows/traces/trace-lanes.ts +78 -0
- package/src/console/ui-next/src/features/flows/traces/trace-nav.test.ts +48 -0
- package/src/console/ui-next/src/features/flows/traces/trace-nav.ts +57 -0
- package/src/console/ui-next/src/features/flows/traces/trace-request-section.tsx +275 -96
- package/src/console/ui-next/src/features/flows/traces/traces-pane.tsx +16 -2
- package/src/console/ui-next/src/features/observability/detail/ai-runs.tsx +369 -0
- package/src/console/ui-next/src/features/observability/observability-page.tsx +31 -1
- package/src/console/ui-next/src/features/observability/state/observability-selection.ts +18 -3
- package/src/console/ui-next/src/features/store/performance/kv-performance-panel.tsx +12 -1
- package/src/console/ui-next/src/features/store/performance/performance-panel.tsx +14 -1
- package/src/console/ui-next/src/features/units/call/call-api-panel.tsx +1 -1
- package/src/console/ui-next/src/features/units/detail/flow-contract-panel.tsx +15 -2
- package/src/console/ui-next/src/features/units/explorer/units-tree.tsx +73 -18
- package/src/console/ui-next/src/features/units/lib/unit-tree.test.ts +21 -0
- package/src/console/ui-next/src/features/units/lib/unit-tree.ts +82 -0
- package/src/console/ui-next/src/features/units/units-page.tsx +25 -7
- package/src/console/ui-next/src/router.tsx +17 -0
- package/src/console/ui-next/ui-next-seed-runs.ts +23 -0
- package/src/console/ui-next/vite-console-kernel-plugin.ts +43 -3
- package/src/console/ui-next/vite.config.ts +9 -0
- package/src/docker/docker.test.ts +13 -13
- package/src/docker/images-config.test.ts +12 -12
- package/src/docker/recipes/dragonfly.ts +3 -2
- package/src/docker/recipes/redis.ts +1 -1
- package/src/docker/stack-id.test.ts +1 -1
- package/src/drivers/ai-anthropic.ts +212 -21
- package/src/drivers/ai-mock.ts +34 -1
- package/src/drivers/ai-openai-compatible.ts +67 -26
- package/src/drivers/ai-preconnect.ts +18 -0
- package/src/drivers/ai-stream.test.ts +62 -0
- package/src/drivers/ai-types.ts +20 -0
- package/src/drivers/journal-postgres.ts +455 -3
- package/src/drivers/meilisearch.ts +2 -0
- package/src/drivers/memory-ddl.test.ts +18 -0
- package/src/drivers/memory.ts +21 -1
- package/src/drivers/pg-rls.test.ts +31 -0
- package/src/drivers/pg-rls.ts +15 -0
- package/src/drivers/postgres.test.ts +9 -0
- package/src/drivers/postgres.ts +49 -11
- package/src/drivers/vault-builtin.test.ts +10 -0
- package/src/drivers/vault-builtin.ts +13 -1
- package/src/drivers/vault-remote-bag.ts +5 -1
- package/src/drivers/vault-types.ts +6 -1
- package/src/elements/ai/agent-event-slot.ts +27 -0
- package/src/elements/ai/approval-http.ts +207 -0
- package/src/elements/ai/approval.test.ts +741 -0
- package/src/elements/ai/approval.ts +228 -0
- package/src/elements/ai/decisions/bind.ts +163 -0
- package/src/elements/ai/decisions/certificate.test.ts +291 -0
- package/src/elements/ai/decisions/certificate.ts +377 -0
- package/src/elements/ai/decisions/certify.ts +314 -0
- package/src/elements/ai/decisions/decide.test.ts +953 -0
- package/src/elements/ai/decisions/e2e.test.ts +399 -0
- package/src/elements/ai/decisions/export.test.ts +120 -0
- package/src/elements/ai/decisions/export.ts +146 -0
- package/src/elements/ai/decisions/fixtures/openrouter-request.json +24 -0
- package/src/elements/ai/decisions/fixtures/openrouter-response.json +22 -0
- package/src/elements/ai/decisions/fixtures/typesafe-request.json +19 -0
- package/src/elements/ai/decisions/fixtures/typesafe-response.json +13 -0
- package/src/elements/ai/decisions/http.test.ts +154 -0
- package/src/elements/ai/decisions/http.ts +240 -0
- package/src/elements/ai/decisions/labels.test.ts +282 -0
- package/src/elements/ai/decisions/labels.ts +257 -0
- package/src/elements/ai/decisions/openrouter.live.test.ts +136 -0
- package/src/elements/ai/decisions/openrouter.ts +36 -0
- package/src/elements/ai/decisions/provider.ts +102 -0
- package/src/elements/ai/decisions/typesafe.ts +36 -0
- package/src/elements/ai/declare.ts +252 -1
- package/src/elements/ai/events.test.ts +379 -0
- package/src/elements/ai/events.ts +138 -0
- package/src/elements/ai/run-events.test.ts +461 -0
- package/src/elements/ai/run-events.ts +522 -0
- package/src/elements/ai/runtime.ts +1186 -105
- package/src/elements/ai/stream-turn.ts +214 -0
- package/src/elements/ai/stream.live.test.ts +76 -0
- package/src/elements/ai/subagent.test.ts +136 -0
- package/src/elements/ai.test.ts +497 -3
- package/src/elements/ai.ts +16 -1
- package/src/elements/clock/durable.ts +27 -1
- package/src/elements/store/emit-drizzle.ts +2 -2
- package/src/elements/store/live-default.test.ts +2 -0
- package/src/elements/store/live-http.test.ts +1 -0
- package/src/elements/store/resource-list-docs.test.ts +2 -2
- package/src/elements/store/resource.test.ts +3 -3
- package/src/elements/store/schema-decl.test.ts +1 -0
- package/src/elements/store/sql-condition.ts +24 -7
- package/src/elements/store/sql-session.test.ts +51 -0
- package/src/elements/store/sql-session.ts +111 -1
- package/src/elements/store/upsert-app.test.ts +1 -1
- package/src/elements/vault/audit.test.ts +137 -0
- package/src/elements/vault/audit.ts +106 -13
- package/src/elements/vault/boot-chain.ts +9 -1
- package/src/elements/vault/builtin-adapter.ts +33 -3
- package/src/i18n/catalogs/ar.ts +9 -0
- package/src/i18n/catalogs/en.ts +9 -0
- package/src/index.ts +2 -0
- package/src/kernel/abort-scope.ts +33 -2
- package/src/kernel/agent-event-store.ts +448 -0
- package/src/kernel/app.ts +294 -19
- package/src/kernel/auto-cache.test.ts +6 -6
- package/src/kernel/boot-bind/ai.ts +3 -0
- package/src/kernel/boot-bind/store.test.ts +26 -0
- package/src/kernel/boot-bind/store.ts +82 -6
- package/src/kernel/boot-bind/vault.ts +1 -0
- package/src/kernel/boot.ts +34 -5
- package/src/kernel/builtin-errors.ts +10 -0
- package/src/kernel/capability.ts +3 -0
- package/src/kernel/client-descriptor.ts +1 -0
- package/src/kernel/concurrency.test.ts +33 -0
- package/src/kernel/decision-label-store.ts +441 -0
- package/src/kernel/effects-stamping.test.ts +2 -2
- package/src/kernel/effects.test.ts +2 -1
- package/src/kernel/effects.ts +13 -1
- package/src/kernel/element-registries.ts +3 -0
- package/src/kernel/errors-compiler.ts +20 -0
- package/src/kernel/errors-text.ts +4 -0
- package/src/kernel/errors.ts +2 -0
- package/src/kernel/external-effects.test.ts +36 -0
- package/src/kernel/flow.test.ts +2 -3
- package/src/kernel/flow.ts +24 -0
- package/src/kernel/fx-decide.ts +761 -0
- package/src/kernel/fx-fetch.ts +5 -1
- package/src/kernel/fx.test.ts +12 -5
- package/src/kernel/fx.ts +316 -29
- package/src/kernel/http-frame.test.ts +94 -0
- package/src/kernel/http-frame.ts +203 -0
- package/src/kernel/idempotency-store.ts +578 -0
- package/src/kernel/idempotency.test.ts +556 -0
- package/src/kernel/idempotency.ts +304 -0
- package/src/kernel/index.ts +1 -0
- package/src/kernel/journal.ts +160 -0
- package/src/kernel/json-result.ts +10 -0
- package/src/kernel/pipeline.test.ts +45 -0
- package/src/kernel/sse-id.ts +32 -0
- package/src/manifest/diff.ts +1 -0
- package/src/manifest/types.ts +37 -2
- package/src/mcp/ai-tools.test.ts +202 -0
- package/src/mcp/authorization.ts +66 -0
- package/src/mcp/session.ts +3 -0
- package/src/mcp/tools.ts +168 -0
- package/src/plugins/auth-delivery.mailpit.integration.test.ts +1 -1
- package/src/plugins/otp.test.ts +65 -1
- package/src/plugins/otp.ts +59 -7
- package/src/release/absolute-regression.test.ts +63 -0
- package/src/release/http-graph.test.ts +27 -0
- package/src/release/http-graph.ts +95 -0
- package/src/release/index.ts +3 -0
- package/src/release/limits.ts +17 -2
- package/src/release/measure.ts +144 -28
- package/src/runs/collect.ts +4 -1
- package/src/runs/parquet.test.ts +27 -1
- package/src/runs/parquet.ts +19 -0
- package/src/runs/types.ts +31 -0
- package/src/runtime/json-code-block.test.ts +106 -47
- package/src/runtime/json-code-block.ts +1209 -46
- package/src/term.test.ts +13 -0
- package/src/term.ts +81 -49
- package/src/test/create-test-app.test.ts +3 -1
- package/src/test/create-test-app.ts +40 -0
- package/src/test/live-signals.test.ts +1 -0
- package/src/test/provisions.integration.test.ts +1 -0
- package/src/test/tenant-isolation.test.ts +1 -0
- package/src/console/ui-next/dist/assets/PlusSignIcon-CwG3nxfu.js +0 -1
- package/src/console/ui-next/dist/assets/access-page-Bgt9bq2r.js +0 -4
- package/src/console/ui-next/dist/assets/agent-disclosure-B43CXZZR.js +0 -1
- package/src/console/ui-next/dist/assets/copy-inline-button-CAYD18cr.js +0 -1
- package/src/console/ui-next/dist/assets/detail-header-DVWNjWjg.js +0 -1
- package/src/console/ui-next/dist/assets/dropdown-menu-4h2LOVXM.js +0 -1
- package/src/console/ui-next/dist/assets/duration-tone-BmIR9FV8.js +0 -9
- package/src/console/ui-next/dist/assets/element-icons-BI8cJgdh.js +0 -1
- package/src/console/ui-next/dist/assets/explorer-empty-CJs5A-wm.js +0 -1
- package/src/console/ui-next/dist/assets/flows-page-BMHs-IzK.js +0 -1
- package/src/console/ui-next/dist/assets/index-BKpaes3n.js +0 -63
- package/src/console/ui-next/dist/assets/index-VxoEz295.css +0 -2
- package/src/console/ui-next/dist/assets/observability-page-WnVLI-0j.js +0 -4
- package/src/console/ui-next/dist/assets/request-meta-DMbnAe3f.js +0 -1
- package/src/console/ui-next/dist/assets/shortcut-keys-3ILd8oGn.js +0 -1
- package/src/console/ui-next/dist/assets/store-page-KvFDingJ.js +0 -41
- package/src/console/ui-next/dist/assets/trace-detail-sheet-Htk8Cm9t.js +0 -2
- package/src/console/ui-next/dist/assets/tree-expand-toggle-CFMPWX4f.js +0 -55
- package/src/console/ui-next/dist/assets/units-page-C4NdNuxP.js +0 -1
- package/src/console/ui-next/dist/assets/use-vault-list-CT4-gajj.js +0 -1
- package/src/console/ui-next/dist/assets/vault-page-CBYl0LW_.js +0 -2
|
@@ -286,7 +286,7 @@ await api.bookings.get({ id: "bkg_7f3a" }); // GET /bookings/bkg_7f3a
|
|
|
286
286
|
await api.bookings.manifest({ flightId: "SK481" }); // POST /_oke/bookings/manifest
|
|
287
287
|
```
|
|
288
288
|
|
|
289
|
-
Full file-tree rules: [Routing](/docs/
|
|
289
|
+
Full file-tree rules: [Routing](/docs/understand/routing).
|
|
290
290
|
|
|
291
291
|
## How input becomes a request
|
|
292
292
|
|
|
@@ -384,23 +384,32 @@ See [Store](/docs/elements/store) for the list query language. Handwritten lists
|
|
|
384
384
|
|
|
385
385
|
## Options
|
|
386
386
|
|
|
387
|
-
| Option
|
|
388
|
-
|
|
|
389
|
-
| `fetch`
|
|
390
|
-
| `headers`
|
|
391
|
-
| `timeout`
|
|
392
|
-
| `retry.retries`
|
|
393
|
-
| `retry.delay`
|
|
394
|
-
| `retry.backoff`
|
|
395
|
-
| `auth.getToken`
|
|
396
|
-
| `auth.refresh`
|
|
397
|
-
| `$routes`
|
|
398
|
-
| `routes`
|
|
387
|
+
| Option | Type | Default | Meaning |
|
|
388
|
+
| ---------------- | ---------------------------------------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------- |
|
|
389
|
+
| `fetch` | `(input, init?) => Promise<Response>` | `globalThis.fetch` | Inject a fetch implementation |
|
|
390
|
+
| `headers` | `Record<string, string>` \| pairs \| `() => …` | — | Static headers, or a getter per request |
|
|
391
|
+
| `timeout` | `number` (ms) | — | Abort after this many milliseconds |
|
|
392
|
+
| `retry.retries` | `number` | `0` | Extra attempts after the first. With `retry` set, a call retries when it is GET/QUERY or it carries an idempotency key. |
|
|
393
|
+
| `retry.delay` | `number` (ms) | `50` | Initial backoff delay |
|
|
394
|
+
| `retry.backoff` | `number` | `2` | Multiplier after each retry |
|
|
395
|
+
| `auth.getToken` | `() => string \| null \| …` | — | Bearer access token (or null) — see [Auth](/docs/client/auth) |
|
|
396
|
+
| `auth.refresh` | `() => Promise<string \| null \| …>` | — | Runs once on HTTP 401, then the request retries |
|
|
397
|
+
| `$routes` | `ClientRouteMap` | — | Runtime map from `app.$routes` (REST when method+path present) |
|
|
398
|
+
| `routes` | `Record<"unit.flow", { method, path }>` | — | Flat REST table; wins over flattening `$routes` |
|
|
399
|
+
| `idempotencyKey` | `string` \| `false` | 21-character key | `Idempotency-Key` on this call. `false` sends no header. Omitted on GET. |
|
|
400
|
+
|
|
401
|
+
With `retry` configured, a call retries when it is GET/QUERY or it carries an
|
|
402
|
+
idempotency key (automatic on every non-GET call). `idempotencyKey: false` runs
|
|
403
|
+
once unless that call passes `{ retry: true }`.
|
|
404
|
+
|
|
405
|
+
A `409` whose code is `IdempotencyInProgress` waits for `Retry-After` and retries
|
|
406
|
+
within those attempts. Other error envelopes are returned as-is.
|
|
399
407
|
|
|
400
408
|
## Result envelopes
|
|
401
409
|
|
|
402
410
|
Success may include optional top-level `meta` (for example pagination). Declared flow errors and
|
|
403
411
|
transport failures share the failure arm. Handle them with [`match`](#match--explain).
|
|
412
|
+
A replay sets `meta.idempotentReplayed` when the server sends `Idempotent-Replayed: true`.
|
|
404
413
|
|
|
405
414
|
```typescript
|
|
406
415
|
import { isOk, isFail, isTransportError } from "okengine/client";
|
|
@@ -473,10 +482,9 @@ Restart `oke dev` after renaming exports.
|
|
|
473
482
|
</Accordion>
|
|
474
483
|
|
|
475
484
|
<Accordion title='error.code is "TransportError"'>
|
|
476
|
-
Network failure, abort
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
to kind `missing`.
|
|
485
|
+
Network failure, abort, non-JSON, or HTTP without a `{ data, error }` envelope. Flow codes never
|
|
486
|
+
use this code. Prefer `error.message` — it equals `error.data.message`. `explain` maps HTTP 404
|
|
487
|
+
transport to kind `missing`.
|
|
480
488
|
</Accordion>
|
|
481
489
|
|
|
482
490
|
<Accordion title="Why import from okengine/client/explain?">
|
|
@@ -513,7 +521,7 @@ Restart `oke dev` after renaming exports.
|
|
|
513
521
|
- [Live](/docs/client/live) — `api.live` and live queries
|
|
514
522
|
- [React](/docs/client/react) — hooks package
|
|
515
523
|
- [Vault · Config](/docs/elements/vault/config) — `PUBLIC_API_URL`, `vault.env`
|
|
516
|
-
- [Routing](/docs/
|
|
524
|
+
- [Routing](/docs/understand/routing) — `$routes` stamps
|
|
517
525
|
- [HTTP](/docs/elements/flow/http) — verbs and envelopes on the server
|
|
518
526
|
- [Errors](/docs/reference/errors) — `fx.fail` helpers, store auto-map, `match` on the client
|
|
519
527
|
- [CLI](/docs/reference/cli) — `oke client add`, `oke dev`
|
|
@@ -534,6 +542,6 @@ Restart `oke dev` after renaming exports.
|
|
|
534
542
|
<Card
|
|
535
543
|
title="Routing"
|
|
536
544
|
description="Folders stamp HTTP paths and client units."
|
|
537
|
-
href="/docs/
|
|
545
|
+
href="/docs/understand/routing"
|
|
538
546
|
/>
|
|
539
547
|
</Cards>
|
|
@@ -182,7 +182,7 @@ dev so `createClient("")` stays same-origin behind your proxy.
|
|
|
182
182
|
|
|
183
183
|
## Learn more
|
|
184
184
|
|
|
185
|
-
- [Routing](/docs/
|
|
185
|
+
- [Routing](/docs/understand/routing) — folders are the URL; `$routes` without `.adopt()`
|
|
186
186
|
- [HTTP](/docs/elements/flow/http) — verbs, `http.resource`, live SSE
|
|
187
187
|
- [The Architecture](/docs/understand/the-architecture) — generated barrel → client → test loop; same contract for Client, Console, MCP
|
|
188
188
|
- [Errors](/docs/reference/errors) — framework codes vs failure values
|
|
@@ -77,9 +77,9 @@ when inference does not see `fx.run`.
|
|
|
77
77
|
<Step>
|
|
78
78
|
### Bound termination
|
|
79
79
|
|
|
80
|
-
Default `maxSteps` is **6
|
|
81
|
-
`budget
|
|
82
|
-
|
|
80
|
+
Default `maxSteps` is **6**. `stopReason` is `completed`, `max_steps` (`ok: false`),
|
|
81
|
+
`budget` (partial trail, no throw), or `error` (a thrown tool, rethrown). A denial fed
|
|
82
|
+
back to the model stays `completed`.
|
|
83
83
|
|
|
84
84
|
</Step>
|
|
85
85
|
|
|
@@ -159,23 +159,66 @@ ai.agent("planner", {
|
|
|
159
159
|
|
|
160
160
|
## Options
|
|
161
161
|
|
|
162
|
-
| Option | Type
|
|
163
|
-
| ---------- |
|
|
164
|
-
| `model` | `AiModelDecl` \| `string`
|
|
165
|
-
| `tools` | Flow
|
|
166
|
-
| `maxSteps` | `number`
|
|
167
|
-
| `
|
|
162
|
+
| Option | Type | Default | Meaning |
|
|
163
|
+
| ---------- | ------------------------------------------------------------ | ----------- | ---------------------------- |
|
|
164
|
+
| `model` | `AiModelDecl` \| `string` | first model | Logical binding for the loop |
|
|
165
|
+
| `tools` | Flow ref, MCP ref, or `{ name, approval?, gate?, timeout? }` | `[]` | Callable via `fx.call` |
|
|
166
|
+
| `maxSteps` | `number` | `6` | Hard cap on tool rounds |
|
|
167
|
+
| `maxDepth` | `number` | `3` | Nested agent limit |
|
|
168
|
+
| `budget` | `{ maxCostPerCall?, maxCostPerRun? }` | — | Cost contracts for the run |
|
|
168
169
|
|
|
169
170
|
## `fx.run` input
|
|
170
171
|
|
|
171
|
-
Pass a string
|
|
172
|
-
|
|
172
|
+
Pass a string, `{ message }`, or `{ messages }` (user, assistant, and tool turns). Passing both
|
|
173
|
+
`message` and `messages` throws. History stays in your Store — `fx.run` does not persist it.
|
|
173
174
|
|
|
174
175
|
```typescript
|
|
175
176
|
await fx.run(supportAgent, "Summarize open tickets");
|
|
176
177
|
await fx.run(supportAgent, { message: "Summarize open tickets" });
|
|
178
|
+
await fx.run(supportAgent, {
|
|
179
|
+
messages: [
|
|
180
|
+
{ role: "user", content: "Summarize open tickets" },
|
|
181
|
+
{ role: "assistant", content: "There are 3." },
|
|
182
|
+
{ role: "user", content: "Open the oldest." },
|
|
183
|
+
],
|
|
184
|
+
});
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Agents as tools
|
|
188
|
+
|
|
189
|
+
Another agent can sit in `tools`. The child uses its own `maxSteps`. Its cost cap is the
|
|
190
|
+
smaller of its budget and what the parent has left. Past `maxDepth` (default 3) the tool
|
|
191
|
+
result is an error and no further child starts.
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
const lookup = ai.agent("lookup", { tools: ["orders.get"], maxSteps: 3 });
|
|
195
|
+
const support = ai.agent("support", { tools: [lookup, "billing.refund"] });
|
|
177
196
|
```
|
|
178
197
|
|
|
198
|
+
## Tool approval
|
|
199
|
+
|
|
200
|
+
<Callout>
|
|
201
|
+
A tool with `approval` parks the run until someone calls `fx.agent.approve` or `fx.agent.deny`. The calling Flow must set `durable: true`. The wait defaults to `24h`, then the model sees `{ denied: true, reason: "timeout" }`.
|
|
202
|
+
</Callout>
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
const support = ai.agent("support", {
|
|
206
|
+
tools: [{ name: "billing.refund", approval: true, gate: ops, timeout: "1h" }],
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
on(
|
|
210
|
+
http.post("/assist"),
|
|
211
|
+
flow("assist", {
|
|
212
|
+
durable: true,
|
|
213
|
+
do: async (_input, fx) => fx.run(support, { message: "Refund order 14" }),
|
|
214
|
+
}),
|
|
215
|
+
);
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
`gate` is who may resolve. A function for `approval` waits only when it returns true.
|
|
219
|
+
Approve may replace `args`. A second resolution is HTTP 409. Deny is not `stopReason: "denied"` —
|
|
220
|
+
the model continues with `{ denied: true, reason }`.
|
|
221
|
+
|
|
179
222
|
## Agents vs ask-with-tools
|
|
180
223
|
|
|
181
224
|
| Surface | When |
|
|
@@ -195,8 +238,9 @@ Both default `maxSteps` to `6`. Denied or unknown tools surface as
|
|
|
195
238
|
`oke()`.
|
|
196
239
|
</Accordion>
|
|
197
240
|
|
|
198
|
-
<Accordion title=
|
|
199
|
-
`
|
|
241
|
+
<Accordion title="The agent stopped before it finished">
|
|
242
|
+
`fx.run` returns the partial trail when `budget.maxCostPerRun` is spent. It does not throw. Raise
|
|
243
|
+
the budget, lower `maxSteps`, or shrink the tool bag.
|
|
200
244
|
</Accordion>
|
|
201
245
|
|
|
202
246
|
<Accordion title='ai: model requested unknown tool "…"'>
|
|
@@ -204,6 +248,10 @@ Both default `maxSteps` to `6`. Denied or unknown tools surface as
|
|
|
204
248
|
or tighten instructions in the user `message`.
|
|
205
249
|
</Accordion>
|
|
206
250
|
|
|
251
|
+
<Accordion title="must set durable: true">
|
|
252
|
+
An approval tool cannot wait in memory. Set `durable: true` on the Flow that calls `fx.run`.
|
|
253
|
+
</Accordion>
|
|
254
|
+
|
|
207
255
|
<Accordion title="OKE1005 on agent runs">
|
|
208
256
|
Runtime gates `fx.run` as an ask of the agent name. List `effects: { asks: ["support.assistant"] }`
|
|
209
257
|
when the compiler does not infer `fx.run`.
|