@theoremjs/agents 0.0.0-stage → 0.3.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/LICENSE +21 -0
- package/README.md +545 -2
- package/esm/_dnt.polyfills.d.ts +66 -0
- package/esm/_dnt.polyfills.js +51 -0
- package/esm/mod.d.ts +79 -0
- package/esm/mod.js +49 -0
- package/esm/package.json +3 -0
- package/esm/src/cli/bin.d.ts +7 -0
- package/esm/src/cli/bin.js +9 -0
- package/esm/src/cli/commands/bench.d.ts +6 -0
- package/esm/src/cli/commands/bench.js +480 -0
- package/esm/src/cli/commands/detect-compile.d.ts +17 -0
- package/esm/src/cli/commands/detect-compile.js +22 -0
- package/esm/src/cli/commands/eval.d.ts +37 -0
- package/esm/src/cli/commands/eval.js +190 -0
- package/esm/src/cli/commands/fuzz-canary.d.ts +15 -0
- package/esm/src/cli/commands/fuzz-canary.js +241 -0
- package/esm/src/cli/commands/fuzz-guardrails.d.ts +2 -0
- package/esm/src/cli/commands/fuzz-guardrails.js +5 -0
- package/esm/src/cli/commands/profile.d.ts +2 -0
- package/esm/src/cli/commands/profile.js +80 -0
- package/esm/src/cli/commands/run.d.ts +13 -0
- package/esm/src/cli/commands/run.js +45 -0
- package/esm/src/cli/commands/test.d.ts +26 -0
- package/esm/src/cli/commands/test.js +143 -0
- package/esm/src/cli/event-log.d.ts +15 -0
- package/esm/src/cli/event-log.js +136 -0
- package/esm/src/cli/index.d.ts +10 -0
- package/esm/src/cli/index.js +267 -0
- package/esm/src/cli/matrix/fixtures.d.ts +10 -0
- package/esm/src/cli/matrix/fixtures.js +67 -0
- package/esm/src/cli/matrix/synthesizer.d.ts +18 -0
- package/esm/src/cli/matrix/synthesizer.js +103 -0
- package/esm/src/evals/attachments.d.ts +5 -0
- package/esm/src/evals/attachments.js +55 -0
- package/esm/src/evals/breakdown.d.ts +30 -0
- package/esm/src/evals/breakdown.js +69 -0
- package/esm/src/evals/graders/answer.d.ts +16 -0
- package/esm/src/evals/graders/answer.js +134 -0
- package/esm/src/evals/graders/code.d.ts +40 -0
- package/esm/src/evals/graders/code.js +184 -0
- package/esm/src/evals/graders/judge.d.ts +24 -0
- package/esm/src/evals/graders/judge.js +367 -0
- package/esm/src/evals/graders/latency.d.ts +6 -0
- package/esm/src/evals/graders/latency.js +82 -0
- package/esm/src/evals/graders/live.d.ts +14 -0
- package/esm/src/evals/graders/live.js +42 -0
- package/esm/src/evals/graders/media.d.ts +18 -0
- package/esm/src/evals/graders/media.js +91 -0
- package/esm/src/evals/graders/shared.d.ts +11 -0
- package/esm/src/evals/graders/shared.js +62 -0
- package/esm/src/evals/graders/transcript.d.ts +19 -0
- package/esm/src/evals/graders/transcript.js +202 -0
- package/esm/src/evals/mod.d.ts +34 -0
- package/esm/src/evals/mod.js +22 -0
- package/esm/src/evals/record.d.ts +41 -0
- package/esm/src/evals/record.js +107 -0
- package/esm/src/evals/rubrics/catalog.d.ts +148 -0
- package/esm/src/evals/rubrics/catalog.js +846 -0
- package/esm/src/evals/rubrics/mod.d.ts +24 -0
- package/esm/src/evals/rubrics/mod.js +55 -0
- package/esm/src/evals/rubrics/mustache.d.ts +23 -0
- package/esm/src/evals/rubrics/mustache.js +154 -0
- package/esm/src/evals/rubrics/types.d.ts +54 -0
- package/esm/src/evals/rubrics/types.js +74 -0
- package/esm/src/evals/run.d.ts +75 -0
- package/esm/src/evals/run.js +418 -0
- package/esm/src/evals/suite.d.ts +28 -0
- package/esm/src/evals/suite.js +97 -0
- package/esm/src/evals/summary.d.ts +35 -0
- package/esm/src/evals/summary.js +31 -0
- package/esm/src/evals/trial.d.ts +14 -0
- package/esm/src/evals/trial.js +135 -0
- package/esm/src/evals/types.d.ts +169 -0
- package/esm/src/evals/types.js +113 -0
- package/esm/src/evals/verdict.d.ts +23 -0
- package/esm/src/evals/verdict.js +48 -0
- package/esm/src/guardrails/boundaries.d.ts +41 -0
- package/esm/src/guardrails/boundaries.js +103 -0
- package/esm/src/guardrails/canary-gate.d.ts +22 -0
- package/esm/src/guardrails/canary-gate.js +40 -0
- package/esm/src/guardrails/canary.d.ts +146 -0
- package/esm/src/guardrails/canary.js +974 -0
- package/esm/src/guardrails/compile-egress.d.ts +12 -0
- package/esm/src/guardrails/compile-egress.js +12 -0
- package/esm/src/guardrails/corpus/canary-egress-attacks.d.ts +24 -0
- package/esm/src/guardrails/corpus/canary-egress-attacks.js +305 -0
- package/esm/src/guardrails/corpus/fuzz-inbound.d.ts +5 -0
- package/esm/src/guardrails/corpus/fuzz-inbound.js +199 -0
- package/esm/src/guardrails/corpus/inbound-payloads.d.ts +5 -0
- package/esm/src/guardrails/corpus/inbound-payloads.js +120 -0
- package/esm/src/guardrails/corpus/live-attacks.d.ts +15 -0
- package/esm/src/guardrails/corpus/live-attacks.js +229 -0
- package/esm/src/guardrails/corpus/mod.d.ts +7 -0
- package/esm/src/guardrails/corpus/mod.js +4 -0
- package/esm/src/guardrails/corpus/secrets.d.ts +12 -0
- package/esm/src/guardrails/corpus/secrets.js +16 -0
- package/esm/src/guardrails/corpus/strings.d.ts +23 -0
- package/esm/src/guardrails/corpus/strings.js +29 -0
- package/esm/src/guardrails/corpus/types.d.ts +36 -0
- package/esm/src/guardrails/corpus/types.js +1 -0
- package/esm/src/guardrails/credential-rules.d.ts +36 -0
- package/esm/src/guardrails/credential-rules.js +3001 -0
- package/esm/src/guardrails/credential-scan.d.ts +45 -0
- package/esm/src/guardrails/credential-scan.js +172 -0
- package/esm/src/guardrails/destinations.d.ts +45 -0
- package/esm/src/guardrails/destinations.js +234 -0
- package/esm/src/guardrails/detect-at.d.ts +107 -0
- package/esm/src/guardrails/detect-at.js +434 -0
- package/esm/src/guardrails/detect-reply.d.ts +61 -0
- package/esm/src/guardrails/detect-reply.js +95 -0
- package/esm/src/guardrails/detect-stream.d.ts +33 -0
- package/esm/src/guardrails/detect-stream.js +77 -0
- package/esm/src/guardrails/detectors.d.ts +216 -0
- package/esm/src/guardrails/detectors.js +503 -0
- package/esm/src/guardrails/egress-automata.d.ts +12 -0
- package/esm/src/guardrails/egress-automata.js +25582 -0
- package/esm/src/guardrails/egress-compiler.d.ts +55 -0
- package/esm/src/guardrails/egress-compiler.js +431 -0
- package/esm/src/guardrails/egress-patterns.d.ts +26 -0
- package/esm/src/guardrails/egress-patterns.js +36 -0
- package/esm/src/guardrails/egress-stream.d.ts +123 -0
- package/esm/src/guardrails/egress-stream.js +774 -0
- package/esm/src/guardrails/egress-urls.d.ts +86 -0
- package/esm/src/guardrails/egress-urls.js +909 -0
- package/esm/src/guardrails/egress.d.ts +46 -0
- package/esm/src/guardrails/egress.js +124 -0
- package/esm/src/guardrails/error.d.ts +31 -0
- package/esm/src/guardrails/error.js +96 -0
- package/esm/src/guardrails/event-schemas.d.ts +100 -0
- package/esm/src/guardrails/event-schemas.js +48 -0
- package/esm/src/guardrails/events.d.ts +13 -0
- package/esm/src/guardrails/events.js +45 -0
- package/esm/src/guardrails/hints.d.ts +14 -0
- package/esm/src/guardrails/hints.js +57 -0
- package/esm/src/guardrails/hits.d.ts +14 -0
- package/esm/src/guardrails/hits.js +30 -0
- package/esm/src/guardrails/host-patterns.d.ts +85 -0
- package/esm/src/guardrails/host-patterns.js +173 -0
- package/esm/src/guardrails/injection-patterns.d.ts +20 -0
- package/esm/src/guardrails/injection-patterns.js +126 -0
- package/esm/src/guardrails/injection-reversed.d.ts +9 -0
- package/esm/src/guardrails/injection-reversed.js +49 -0
- package/esm/src/guardrails/injection.d.ts +30 -0
- package/esm/src/guardrails/injection.js +460 -0
- package/esm/src/guardrails/labels.d.ts +40 -0
- package/esm/src/guardrails/labels.js +874 -0
- package/esm/src/guardrails/live-outbound-gate.d.ts +55 -0
- package/esm/src/guardrails/live-outbound-gate.js +298 -0
- package/esm/src/guardrails/mod.d.ts +54 -0
- package/esm/src/guardrails/mod.js +34 -0
- package/esm/src/guardrails/network.d.ts +46 -0
- package/esm/src/guardrails/network.js +330 -0
- package/esm/src/guardrails/normalize.d.ts +20 -0
- package/esm/src/guardrails/normalize.js +165 -0
- package/esm/src/guardrails/policy.d.ts +4 -0
- package/esm/src/guardrails/policy.js +21 -0
- package/esm/src/guardrails/progressive-yield.d.ts +110 -0
- package/esm/src/guardrails/progressive-yield.js +281 -0
- package/esm/src/guardrails/prompt-echo.d.ts +40 -0
- package/esm/src/guardrails/prompt-echo.js +306 -0
- package/esm/src/guardrails/quota.d.ts +21 -0
- package/esm/src/guardrails/quota.js +80 -0
- package/esm/src/guardrails/rules.d.ts +47 -0
- package/esm/src/guardrails/rules.js +47 -0
- package/esm/src/guardrails/sanitize.d.ts +40 -0
- package/esm/src/guardrails/sanitize.js +160 -0
- package/esm/src/guardrails/sensitive-groups.d.ts +21 -0
- package/esm/src/guardrails/sensitive-groups.js +12 -0
- package/esm/src/guardrails/sensitive.d.ts +22 -0
- package/esm/src/guardrails/sensitive.js +234 -0
- package/esm/src/guardrails/serialize.d.ts +15 -0
- package/esm/src/guardrails/serialize.js +37 -0
- package/esm/src/guardrails/testing.d.ts +11 -0
- package/esm/src/guardrails/testing.js +10 -0
- package/esm/src/guardrails/theorem-error.d.ts +21 -0
- package/esm/src/guardrails/theorem-error.js +54 -0
- package/esm/src/guardrails/thought-guard.d.ts +76 -0
- package/esm/src/guardrails/thought-guard.js +664 -0
- package/esm/src/guardrails/tool-directives.d.ts +38 -0
- package/esm/src/guardrails/tool-directives.js +195 -0
- package/esm/src/guardrails/tool-leak.d.ts +26 -0
- package/esm/src/guardrails/tool-leak.js +45 -0
- package/esm/src/guardrails/tool-result.d.ts +92 -0
- package/esm/src/guardrails/tool-result.js +272 -0
- package/esm/src/guardrails/types.d.ts +250 -0
- package/esm/src/guardrails/types.js +58 -0
- package/esm/src/host/client-turn.d.ts +36 -0
- package/esm/src/host/client-turn.js +80 -0
- package/esm/src/host/mint-trace.d.ts +29 -0
- package/esm/src/host/mint-trace.js +60 -0
- package/esm/src/host/mod.d.ts +13 -0
- package/esm/src/host/mod.js +11 -0
- package/esm/src/host/readStreamingJsonStringField.d.ts +2 -0
- package/esm/src/host/readStreamingJsonStringField.js +27 -0
- package/esm/src/host/reply.d.ts +13 -0
- package/esm/src/host/reply.js +41 -0
- package/esm/src/interface/blocks.d.ts +11 -0
- package/esm/src/interface/blocks.js +283 -0
- package/esm/src/interface/composer-actions.d.ts +24 -0
- package/esm/src/interface/composer-actions.js +33 -0
- package/esm/src/interface/draft.d.ts +20 -0
- package/esm/src/interface/draft.js +39 -0
- package/esm/src/interface/from-profile.d.ts +24 -0
- package/esm/src/interface/from-profile.js +179 -0
- package/esm/src/interface/history.d.ts +46 -0
- package/esm/src/interface/history.js +278 -0
- package/esm/src/interface/inputs.d.ts +11 -0
- package/esm/src/interface/inputs.js +67 -0
- package/esm/src/interface/mod.d.ts +33 -0
- package/esm/src/interface/mod.js +22 -0
- package/esm/src/interface/models.d.ts +26 -0
- package/esm/src/interface/models.js +50 -0
- package/esm/src/interface/pending.d.ts +57 -0
- package/esm/src/interface/pending.js +152 -0
- package/esm/src/interface/profile-interface.d.ts +4 -0
- package/esm/src/interface/profile-interface.js +237 -0
- package/esm/src/interface/session.d.ts +71 -0
- package/esm/src/interface/session.js +128 -0
- package/esm/src/interface/stop.d.ts +13 -0
- package/esm/src/interface/stop.js +28 -0
- package/esm/src/interface/tool-calls.d.ts +32 -0
- package/esm/src/interface/tool-calls.js +127 -0
- package/esm/src/interface/tool-invoke.d.ts +6 -0
- package/esm/src/interface/tool-invoke.js +22 -0
- package/esm/src/interface/tool-media.d.ts +11 -0
- package/esm/src/interface/tool-media.js +113 -0
- package/esm/src/interface/types.d.ts +278 -0
- package/esm/src/interface/types.js +5 -0
- package/esm/src/kernel/api-catalog.d.ts +85 -0
- package/esm/src/kernel/api-catalog.js +229 -0
- package/esm/src/kernel/auth/credential-source.d.ts +23 -0
- package/esm/src/kernel/auth/credential-source.js +11 -0
- package/esm/src/kernel/auth/crypto.d.ts +56 -0
- package/esm/src/kernel/auth/crypto.js +163 -0
- package/esm/src/kernel/auth/mod.d.ts +5 -0
- package/esm/src/kernel/auth/mod.js +5 -0
- package/esm/src/kernel/auth/oauth.d.ts +18 -0
- package/esm/src/kernel/auth/oauth.js +439 -0
- package/esm/src/kernel/auth/scope-refusal.d.ts +9 -0
- package/esm/src/kernel/auth/scope-refusal.js +8 -0
- package/esm/src/kernel/auth/typed-secret.d.ts +13 -0
- package/esm/src/kernel/auth/typed-secret.js +23 -0
- package/esm/src/kernel/auth/types.d.ts +152 -0
- package/esm/src/kernel/auth/types.js +1 -0
- package/esm/src/kernel/checkpoint.d.ts +43 -0
- package/esm/src/kernel/checkpoint.js +58 -0
- package/esm/src/kernel/default-scope.d.ts +72 -0
- package/esm/src/kernel/default-scope.js +121 -0
- package/esm/src/kernel/engine/call-trace.d.ts +19 -0
- package/esm/src/kernel/engine/call-trace.js +29 -0
- package/esm/src/kernel/engine/compaction.d.ts +71 -0
- package/esm/src/kernel/engine/compaction.js +203 -0
- package/esm/src/kernel/engine/decision.d.ts +43 -0
- package/esm/src/kernel/engine/decision.js +439 -0
- package/esm/src/kernel/engine/embedding.d.ts +8 -0
- package/esm/src/kernel/engine/embedding.js +118 -0
- package/esm/src/kernel/engine/hash.d.ts +6 -0
- package/esm/src/kernel/engine/hash.js +22 -0
- package/esm/src/kernel/engine/live-inbound.d.ts +19 -0
- package/esm/src/kernel/engine/live-inbound.js +44 -0
- package/esm/src/kernel/engine/live-ingress.d.ts +15 -0
- package/esm/src/kernel/engine/live-ingress.js +42 -0
- package/esm/src/kernel/engine/record.d.ts +3 -0
- package/esm/src/kernel/engine/record.js +11 -0
- package/esm/src/kernel/engine/repair.d.ts +7 -0
- package/esm/src/kernel/engine/repair.js +36 -0
- package/esm/src/kernel/engine/runner/gates.d.ts +5 -0
- package/esm/src/kernel/engine/runner/gates.js +508 -0
- package/esm/src/kernel/engine/runner/mod.d.ts +29 -0
- package/esm/src/kernel/engine/runner/mod.js +625 -0
- package/esm/src/kernel/engine/runner/nested.d.ts +32 -0
- package/esm/src/kernel/engine/runner/nested.js +134 -0
- package/esm/src/kernel/engine/runner/schema-validation.d.ts +35 -0
- package/esm/src/kernel/engine/runner/schema-validation.js +179 -0
- package/esm/src/kernel/engine/runner/stages.d.ts +28 -0
- package/esm/src/kernel/engine/runner/stages.js +41 -0
- package/esm/src/kernel/engine/runner/state.d.ts +97 -0
- package/esm/src/kernel/engine/runner/state.js +50 -0
- package/esm/src/kernel/engine/runner/step-order.d.ts +27 -0
- package/esm/src/kernel/engine/runner/step-order.js +165 -0
- package/esm/src/kernel/engine/runner/steps.d.ts +14 -0
- package/esm/src/kernel/engine/runner/steps.js +519 -0
- package/esm/src/kernel/engine/runner/stream.d.ts +71 -0
- package/esm/src/kernel/engine/runner/stream.js +376 -0
- package/esm/src/kernel/engine/runner/usage.d.ts +45 -0
- package/esm/src/kernel/engine/runner/usage.js +148 -0
- package/esm/src/kernel/engine/session/mod.d.ts +33 -0
- package/esm/src/kernel/engine/session/mod.js +1182 -0
- package/esm/src/kernel/engine/session/session-trace.d.ts +115 -0
- package/esm/src/kernel/engine/session/session-trace.js +500 -0
- package/esm/src/kernel/engine/token-estimate.d.ts +23 -0
- package/esm/src/kernel/engine/token-estimate.js +38 -0
- package/esm/src/kernel/engine/tool-trace.d.ts +58 -0
- package/esm/src/kernel/engine/tool-trace.js +132 -0
- package/esm/src/kernel/engine/tree.d.ts +2 -0
- package/esm/src/kernel/engine/tree.js +17 -0
- package/esm/src/kernel/engine/turn-trace.d.ts +119 -0
- package/esm/src/kernel/engine/turn-trace.js +855 -0
- package/esm/src/kernel/engine/usage.d.ts +36 -0
- package/esm/src/kernel/engine/usage.js +151 -0
- package/esm/src/kernel/interaction-parts.d.ts +13 -0
- package/esm/src/kernel/interaction-parts.js +40 -0
- package/esm/src/kernel/json.d.ts +10 -0
- package/esm/src/kernel/json.js +3 -0
- package/esm/src/kernel/mod.d.ts +74 -0
- package/esm/src/kernel/mod.js +45 -0
- package/esm/src/kernel/profile-graph.d.ts +145 -0
- package/esm/src/kernel/profile-graph.js +158 -0
- package/esm/src/kernel/profile-presence.d.ts +18 -0
- package/esm/src/kernel/profile-presence.js +158 -0
- package/esm/src/kernel/profile-scope.d.ts +40 -0
- package/esm/src/kernel/profile-scope.js +274 -0
- package/esm/src/kernel/protocols/binding.d.ts +65 -0
- package/esm/src/kernel/protocols/binding.js +125 -0
- package/esm/src/kernel/protocols/limits.d.ts +15 -0
- package/esm/src/kernel/protocols/limits.js +28 -0
- package/esm/src/kernel/protocols/mod.d.ts +5 -0
- package/esm/src/kernel/protocols/mod.js +5 -0
- package/esm/src/kernel/protocols/prices.d.ts +36 -0
- package/esm/src/kernel/protocols/prices.js +37 -0
- package/esm/src/kernel/protocols/protocol.d.ts +253 -0
- package/esm/src/kernel/protocols/protocol.js +253 -0
- package/esm/src/kernel/protocols/provider.d.ts +108 -0
- package/esm/src/kernel/protocols/provider.js +143 -0
- package/esm/src/kernel/protocols/runtime.d.ts +55 -0
- package/esm/src/kernel/protocols/runtime.js +534 -0
- package/esm/src/kernel/provider-budget.d.ts +32 -0
- package/esm/src/kernel/provider-budget.js +262 -0
- package/esm/src/kernel/provider-dispatch.d.ts +13 -0
- package/esm/src/kernel/provider-dispatch.js +36 -0
- package/esm/src/kernel/provider-live.d.ts +7 -0
- package/esm/src/kernel/provider-live.js +189 -0
- package/esm/src/kernel/provider-runtime.d.ts +57 -0
- package/esm/src/kernel/provider-runtime.js +524 -0
- package/esm/src/kernel/registry/attachments.d.ts +46 -0
- package/esm/src/kernel/registry/attachments.js +220 -0
- package/esm/src/kernel/registry/catalog.d.ts +25 -0
- package/esm/src/kernel/registry/catalog.js +85 -0
- package/esm/src/kernel/registry/embedding-rules.d.ts +28 -0
- package/esm/src/kernel/registry/embedding-rules.js +66 -0
- package/esm/src/kernel/registry/ingress.d.ts +12 -0
- package/esm/src/kernel/registry/ingress.js +179 -0
- package/esm/src/kernel/registry/kernel-registry.d.ts +15 -0
- package/esm/src/kernel/registry/kernel-registry.js +15 -0
- package/esm/src/kernel/registry/profile-outputs.d.ts +3 -0
- package/esm/src/kernel/registry/profile-outputs.js +10 -0
- package/esm/src/kernel/registry/profiles.d.ts +116 -0
- package/esm/src/kernel/registry/profiles.js +773 -0
- package/esm/src/kernel/registry/provider-request.d.ts +6 -0
- package/esm/src/kernel/registry/provider-request.js +34 -0
- package/esm/src/kernel/registry/resolve.d.ts +17 -0
- package/esm/src/kernel/registry/resolve.js +238 -0
- package/esm/src/kernel/registry/schemas.d.ts +12 -0
- package/esm/src/kernel/registry/schemas.js +27 -0
- package/esm/src/kernel/registry/slot-fill.d.ts +7 -0
- package/esm/src/kernel/registry/slot-fill.js +22 -0
- package/esm/src/kernel/registry/sole-model.d.ts +2 -0
- package/esm/src/kernel/registry/sole-model.js +4 -0
- package/esm/src/kernel/registry/system-prompt.d.ts +8 -0
- package/esm/src/kernel/registry/system-prompt.js +32 -0
- package/esm/src/kernel/registry/system-role.d.ts +3 -0
- package/esm/src/kernel/registry/system-role.js +9 -0
- package/esm/src/kernel/registry/vault.d.ts +14 -0
- package/esm/src/kernel/registry/vault.js +1 -0
- package/esm/src/kernel/schema.d.ts +226 -0
- package/esm/src/kernel/schema.js +895 -0
- package/esm/src/kernel/scope.d.ts +29 -0
- package/esm/src/kernel/scope.js +45 -0
- package/esm/src/kernel/stages.d.ts +176 -0
- package/esm/src/kernel/stages.js +431 -0
- package/esm/src/kernel/stop.d.ts +116 -0
- package/esm/src/kernel/stop.js +137 -0
- package/esm/src/kernel/system-parts.d.ts +26 -0
- package/esm/src/kernel/system-parts.js +98 -0
- package/esm/src/kernel/tools/activity-label.d.ts +22 -0
- package/esm/src/kernel/tools/activity-label.js +435 -0
- package/esm/src/kernel/tools/agent.d.ts +66 -0
- package/esm/src/kernel/tools/agent.js +212 -0
- package/esm/src/kernel/tools/coordinate.d.ts +4 -0
- package/esm/src/kernel/tools/coordinate.js +165 -0
- package/esm/src/kernel/tools/events.d.ts +66 -0
- package/esm/src/kernel/tools/events.js +184 -0
- package/esm/src/kernel/tools/execute.d.ts +100 -0
- package/esm/src/kernel/tools/execute.js +1173 -0
- package/esm/src/kernel/tools/gate-answer.d.ts +60 -0
- package/esm/src/kernel/tools/gate-answer.js +65 -0
- package/esm/src/kernel/tools/handler-events.d.ts +45 -0
- package/esm/src/kernel/tools/handler-events.js +106 -0
- package/esm/src/kernel/tools/harness.d.ts +17 -0
- package/esm/src/kernel/tools/harness.js +43 -0
- package/esm/src/kernel/tools/http-limit.d.ts +27 -0
- package/esm/src/kernel/tools/http-limit.js +85 -0
- package/esm/src/kernel/tools/invoke.d.ts +32 -0
- package/esm/src/kernel/tools/invoke.js +282 -0
- package/esm/src/kernel/tools/mcp-sessions.d.ts +23 -0
- package/esm/src/kernel/tools/mcp-sessions.js +69 -0
- package/esm/src/kernel/tools/mod.d.ts +10 -0
- package/esm/src/kernel/tools/mod.js +7 -0
- package/esm/src/kernel/tools/model-text.d.ts +16 -0
- package/esm/src/kernel/tools/model-text.js +31 -0
- package/esm/src/kernel/tools/operation.d.ts +76 -0
- package/esm/src/kernel/tools/operation.js +100 -0
- package/esm/src/kernel/tools/page-answer.d.ts +8 -0
- package/esm/src/kernel/tools/page-answer.js +19 -0
- package/esm/src/kernel/tools/permission.d.ts +15 -0
- package/esm/src/kernel/tools/permission.js +38 -0
- package/esm/src/kernel/tools/project.d.ts +11 -0
- package/esm/src/kernel/tools/project.js +55 -0
- package/esm/src/kernel/tools/registry.d.ts +27 -0
- package/esm/src/kernel/tools/registry.js +143 -0
- package/esm/src/kernel/tools/remote.d.ts +144 -0
- package/esm/src/kernel/tools/remote.js +1125 -0
- package/esm/src/kernel/tools/resolve.d.ts +31 -0
- package/esm/src/kernel/tools/resolve.js +267 -0
- package/esm/src/kernel/tools/run.d.ts +28 -0
- package/esm/src/kernel/tools/run.js +86 -0
- package/esm/src/kernel/tools/schema.d.ts +10 -0
- package/esm/src/kernel/tools/schema.js +95 -0
- package/esm/src/kernel/tools/signed-in-fetch.d.ts +19 -0
- package/esm/src/kernel/tools/signed-in-fetch.js +45 -0
- package/esm/src/kernel/tools/stage-run.d.ts +116 -0
- package/esm/src/kernel/tools/stage-run.js +198 -0
- package/esm/src/kernel/tools/types.d.ts +497 -0
- package/esm/src/kernel/tools/types.js +1 -0
- package/esm/src/kernel/tools/unchecked-output.d.ts +14 -0
- package/esm/src/kernel/tools/unchecked-output.js +18 -0
- package/esm/src/kernel/turn-events.d.ts +776 -0
- package/esm/src/kernel/turn-events.js +543 -0
- package/esm/src/kernel/types.d.ts +1025 -0
- package/esm/src/kernel/types.js +1 -0
- package/esm/src/kernel/util/base64.d.ts +4 -0
- package/esm/src/kernel/util/base64.js +15 -0
- package/esm/src/kernel/util/exact-type.d.ts +31 -0
- package/esm/src/kernel/util/exact-type.js +1 -0
- package/esm/src/kernel/util/find-last.d.ts +3 -0
- package/esm/src/kernel/util/find-last.js +9 -0
- package/esm/src/kernel/util/mime.d.ts +2 -0
- package/esm/src/kernel/util/mime.js +4 -0
- package/esm/src/kernel/util/partial-json.d.ts +23 -0
- package/esm/src/kernel/util/partial-json.js +128 -0
- package/esm/src/kernel/util/record.d.ts +2 -0
- package/esm/src/kernel/util/record.js +4 -0
- package/esm/src/observability/destinations.d.ts +14 -0
- package/esm/src/observability/destinations.js +43 -0
- package/esm/src/observability/jsonl.d.ts +18 -0
- package/esm/src/observability/jsonl.js +110 -0
- package/esm/src/observability/mod.d.ts +22 -0
- package/esm/src/observability/mod.js +16 -0
- package/esm/src/observability/openinference.d.ts +11 -0
- package/esm/src/observability/openinference.js +205 -0
- package/esm/src/observability/otlp.d.ts +71 -0
- package/esm/src/observability/otlp.js +98 -0
- package/esm/src/observability/phoenix.d.ts +30 -0
- package/esm/src/observability/phoenix.js +71 -0
- package/esm/src/observability/policy.d.ts +17 -0
- package/esm/src/observability/policy.js +73 -0
- package/esm/src/observability/resolve-policy.d.ts +8 -0
- package/esm/src/observability/resolve-policy.js +64 -0
- package/esm/src/observability/spans.d.ts +22 -0
- package/esm/src/observability/spans.js +72 -0
- package/esm/src/observability/trace-catalog.d.ts +128 -0
- package/esm/src/observability/trace-catalog.js +906 -0
- package/esm/src/observability/trace-record.d.ts +23 -0
- package/esm/src/observability/trace-record.js +228 -0
- package/esm/src/observability/trace-schema.d.ts +57 -0
- package/esm/src/observability/trace-schema.js +59 -0
- package/esm/src/observability/trace-sink.d.ts +14 -0
- package/esm/src/observability/trace-sink.js +3 -0
- package/esm/src/observability/trace-span.d.ts +98 -0
- package/esm/src/observability/trace-span.js +201 -0
- package/esm/src/observability/trace.d.ts +13 -0
- package/esm/src/observability/trace.js +37 -0
- package/esm/src/observability/types.d.ts +109 -0
- package/esm/src/observability/types.js +3 -0
- package/esm/src/presets/google/speech-voices.d.ts +9 -0
- package/esm/src/presets/google/speech-voices.js +38 -0
- package/esm/src/presets/google-limits.d.ts +13 -0
- package/esm/src/presets/google-limits.js +18 -0
- package/esm/src/presets/google.d.ts +119 -0
- package/esm/src/presets/google.js +197 -0
- package/esm/src/presets/local.d.ts +26 -0
- package/esm/src/presets/local.js +30 -0
- package/esm/src/presets/mod.d.ts +11 -0
- package/esm/src/presets/mod.js +9 -0
- package/esm/src/presets/openrouter.d.ts +26 -0
- package/esm/src/presets/openrouter.js +31 -0
- package/esm/src/providers/embedding-limits.d.ts +7 -0
- package/esm/src/providers/embedding-limits.js +12 -0
- package/esm/src/providers/gemini/embedding-protocol.d.ts +8 -0
- package/esm/src/providers/gemini/embedding-protocol.js +125 -0
- package/esm/src/providers/gemini/interactions-protocol.d.ts +8 -0
- package/esm/src/providers/gemini/interactions-protocol.js +105 -0
- package/esm/src/providers/gemini/live-protocol.d.ts +3 -0
- package/esm/src/providers/gemini/live-protocol.js +191 -0
- package/esm/src/providers/gemini/prices.d.ts +3 -0
- package/esm/src/providers/gemini/prices.js +63 -0
- package/esm/src/providers/gemini/provider.d.ts +7 -0
- package/esm/src/providers/gemini/provider.js +39 -0
- package/esm/src/providers/google/api-error.d.ts +8 -0
- package/esm/src/providers/google/api-error.js +123 -0
- package/esm/src/providers/google/builtins.d.ts +14 -0
- package/esm/src/providers/google/builtins.js +57 -0
- package/esm/src/providers/google/grounding.d.ts +5 -0
- package/esm/src/providers/google/grounding.js +226 -0
- package/esm/src/providers/google/interactions/framing.d.ts +27 -0
- package/esm/src/providers/google/interactions/framing.js +304 -0
- package/esm/src/providers/google/interactions/steps.d.ts +12 -0
- package/esm/src/providers/google/interactions/steps.js +200 -0
- package/esm/src/providers/google/interactions/stream.d.ts +23 -0
- package/esm/src/providers/google/interactions/stream.js +230 -0
- package/esm/src/providers/google/live/framing.d.ts +61 -0
- package/esm/src/providers/google/live/framing.js +597 -0
- package/esm/src/providers/google/live/stream.d.ts +13 -0
- package/esm/src/providers/google/live/stream.js +57 -0
- package/esm/src/providers/google/thinking.d.ts +3 -0
- package/esm/src/providers/google/thinking.js +8 -0
- package/esm/src/providers/google/urls.d.ts +4 -0
- package/esm/src/providers/google/urls.js +4 -0
- package/esm/src/providers/google/usage.d.ts +7 -0
- package/esm/src/providers/google/usage.js +49 -0
- package/esm/src/providers/live.d.ts +6 -0
- package/esm/src/providers/live.js +6 -0
- package/esm/src/providers/local/embedding-protocol.d.ts +7 -0
- package/esm/src/providers/local/embedding-protocol.js +60 -0
- package/esm/src/providers/local/provider.d.ts +7 -0
- package/esm/src/providers/local/provider.js +28 -0
- package/esm/src/providers/mod.d.ts +32 -0
- package/esm/src/providers/mod.js +23 -0
- package/esm/src/providers/open-ai/protocol.d.ts +3 -0
- package/esm/src/providers/open-ai/protocol.js +189 -0
- package/esm/src/providers/openrouter/embedding-protocol.d.ts +6 -0
- package/esm/src/providers/openrouter/embedding-protocol.js +86 -0
- package/esm/src/providers/openrouter/image.d.ts +15 -0
- package/esm/src/providers/openrouter/image.js +34 -0
- package/esm/src/providers/openrouter/images-protocol.d.ts +3 -0
- package/esm/src/providers/openrouter/images-protocol.js +82 -0
- package/esm/src/providers/openrouter/openai/compat.d.ts +19 -0
- package/esm/src/providers/openrouter/openai/compat.js +162 -0
- package/esm/src/providers/openrouter/openai/image-payload.d.ts +9 -0
- package/esm/src/providers/openrouter/openai/image-payload.js +115 -0
- package/esm/src/providers/openrouter/openai/reasoning-state.d.ts +2 -0
- package/esm/src/providers/openrouter/openai/reasoning-state.js +31 -0
- package/esm/src/providers/openrouter/openai/usage.d.ts +8 -0
- package/esm/src/providers/openrouter/openai/usage.js +56 -0
- package/esm/src/providers/openrouter/protocol.d.ts +8 -0
- package/esm/src/providers/openrouter/protocol.js +171 -0
- package/esm/src/providers/openrouter/provider.d.ts +10 -0
- package/esm/src/providers/openrouter/provider.js +50 -0
- package/esm/src/providers/shared/carried-tool-files.d.ts +7 -0
- package/esm/src/providers/shared/carried-tool-files.js +43 -0
- package/esm/src/providers/shared/pcm.d.ts +14 -0
- package/esm/src/providers/shared/pcm.js +78 -0
- package/esm/src/providers/shared/protocol-events.d.ts +8 -0
- package/esm/src/providers/shared/protocol-events.js +20 -0
- package/esm/src/providers/shared/response-identity.d.ts +11 -0
- package/esm/src/providers/shared/response-identity.js +12 -0
- package/esm/src/providers/shared/retry.d.ts +17 -0
- package/esm/src/providers/shared/retry.js +90 -0
- package/esm/src/providers/shared/sse.d.ts +6 -0
- package/esm/src/providers/shared/sse.js +93 -0
- package/esm/src/providers/shared/structured-output.d.ts +4 -0
- package/esm/src/providers/shared/structured-output.js +11 -0
- package/esm/src/providers/shared/tool-args.d.ts +24 -0
- package/esm/src/providers/shared/tool-args.js +88 -0
- package/esm/src/providers/shared/tool-draft.d.ts +16 -0
- package/esm/src/providers/shared/tool-draft.js +14 -0
- package/esm/src/providers/shared/upstream-tap.d.ts +8 -0
- package/esm/src/providers/shared/upstream-tap.js +85 -0
- package/esm/src/providers/shared/upstream-tape.d.ts +6 -0
- package/esm/src/providers/shared/upstream-tape.js +88 -0
- package/esm/src/providers/system-one/protocol.d.ts +8 -0
- package/esm/src/providers/system-one/protocol.js +93 -0
- package/esm/src/providers/types.d.ts +51 -0
- package/esm/src/providers/types.js +2 -0
- package/esm/src/providers/typesafe/provider.d.ts +7 -0
- package/esm/src/providers/typesafe/provider.js +24 -0
- package/esm/src/surface/formats.d.ts +46 -0
- package/esm/src/surface/formats.js +178 -0
- package/esm/src/surface/mod.d.ts +16 -0
- package/esm/src/surface/mod.js +12 -0
- package/esm/src/surface/runtime.d.ts +44 -0
- package/esm/src/surface/runtime.js +441 -0
- package/esm/src/surface/tools.d.ts +9 -0
- package/esm/src/surface/tools.js +62 -0
- package/esm/src/surface/types.d.ts +110 -0
- package/esm/src/surface/types.js +4 -0
- package/package.json +100 -4
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
import { requestGivesCanary } from '../../../guardrails/canary.js';
|
|
2
|
+
import { addRequestDestinations, addResultDestinations } from '../../../guardrails/destinations.js';
|
|
3
|
+
import { TURN_REPLY } from '../../../guardrails/detect-reply.js';
|
|
4
|
+
import { addRequestUrls } from '../../../guardrails/egress-urls.js';
|
|
5
|
+
import { isAbortError, throwIfAborted } from '../../../guardrails/error.js';
|
|
6
|
+
import { resolveGuardrailPolicy } from '../../../guardrails/policy.js';
|
|
7
|
+
import { replyIsJudged } from '../../../guardrails/progressive-yield.js';
|
|
8
|
+
import { recordTaint } from '../../../guardrails/tool-result.js';
|
|
9
|
+
import { waitDefault } from '../../../providers/shared/retry.js';
|
|
10
|
+
import { historyToolCalls } from '../../interaction-parts.js';
|
|
11
|
+
import { profileTurnOutputs } from '../../registry/profile-outputs.js';
|
|
12
|
+
import { providerCompleteRequest } from '../../registry/provider-request.js';
|
|
13
|
+
import { injectWouldExceedMaxSteps } from '../../stages.js';
|
|
14
|
+
import { AUTO_CONTINUE_DELAY_MS, isFailedStopKind, profileAllowsInject, profileTurnResumption, shouldAutoContinue, stageAbortStop, } from '../../stop.js';
|
|
15
|
+
import { failedActivity, failureEvent, toolCallRequestEvent, } from '../../tools/events.js';
|
|
16
|
+
import { executeRegisteredTool, shownToolArguments, } from '../../tools/execute.js';
|
|
17
|
+
import { formatToolFailureForModel, formatToolResult } from '../../tools/model-text.js';
|
|
18
|
+
import { profileToolsParallel } from '../../tools/resolve.js';
|
|
19
|
+
import { findLast } from '../../util/find-last.js';
|
|
20
|
+
import { startToolTrace } from '../tool-trace.js';
|
|
21
|
+
import { startCallTrace } from '../turn-trace.js';
|
|
22
|
+
import { applyStageInjects } from './stages.js';
|
|
23
|
+
import { recordStepEvent } from './state.js';
|
|
24
|
+
import { inStep, runSideBySide, stepOrder } from './step-order.js';
|
|
25
|
+
import { isWithheldOnBlock, StructuredDrafts, yieldProviderEvents, } from './stream.js';
|
|
26
|
+
import { callTokensEvent, observeCallEvent, startCallUsage } from './usage.js';
|
|
27
|
+
function isStepLimitReached(step, maxSteps) {
|
|
28
|
+
return maxSteps > 0 && step >= maxSteps;
|
|
29
|
+
}
|
|
30
|
+
/** The step's generation: the turn's history so far, and no tools when the step must answer. */
|
|
31
|
+
function generationForProviderStep(generation, state, answerOnly) {
|
|
32
|
+
const forStep = { ...generation, history: state.currentHistory };
|
|
33
|
+
if (!answerOnly)
|
|
34
|
+
return forStep;
|
|
35
|
+
return { ...forStep, builtins: [], tools: { ...generation.tools, wire: [] } };
|
|
36
|
+
}
|
|
37
|
+
/** True on the last step `maxSteps` allows, for a profile whose `atStepLimit` is `'answer'`. */
|
|
38
|
+
function isAnswerOnlyStep(profile, generation, step) {
|
|
39
|
+
return (profile.type === 'text' &&
|
|
40
|
+
profile.turnBehaviour?.atStepLimit === 'answer' &&
|
|
41
|
+
isStepLimitReached(step, generation.maxSteps ?? 0));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Hold the model's calls until its stream ends: a raw call, and a provider's
|
|
45
|
+
* failure for a call it already sent. Returns false for any other tool event.
|
|
46
|
+
*/
|
|
47
|
+
function holdModelCall(calls, tool) {
|
|
48
|
+
if (tool.phase === undefined) {
|
|
49
|
+
calls.push({
|
|
50
|
+
name: tool.name,
|
|
51
|
+
callId: tool.callId,
|
|
52
|
+
arguments: tool.arguments,
|
|
53
|
+
});
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
const call = findLast(calls, (held) => held.callId === tool.callId);
|
|
57
|
+
if (tool.phase !== 'error' || !call)
|
|
58
|
+
return false;
|
|
59
|
+
call.failure = tool.failure;
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
/** The step's request, with what it gives the model noted on `state`, and its call's usage and trace. */
|
|
63
|
+
function startProviderCall(generation, system, state, answerOnly) {
|
|
64
|
+
const usage = startCallUsage(system.text, {
|
|
65
|
+
history: state.currentHistory,
|
|
66
|
+
input: generation.input,
|
|
67
|
+
});
|
|
68
|
+
state.lastCall = usage;
|
|
69
|
+
const genForStep = generationForProviderStep(generation, state, answerOnly);
|
|
70
|
+
const request = providerCompleteRequest(state.tools, genForStep, system.text);
|
|
71
|
+
addRequestUrls(state.givenUrls, request);
|
|
72
|
+
addRequestDestinations(state.destinations, request, state.givenUrls.own);
|
|
73
|
+
if (generation.canary && !state.canaryGiven) {
|
|
74
|
+
state.canaryGiven = requestGivesCanary(request, generation.canary, state.canaryScanned);
|
|
75
|
+
}
|
|
76
|
+
state.trace.calls += 1;
|
|
77
|
+
const call = startCallTrace((name, options) => state.trace.root.child(name, options), {
|
|
78
|
+
req: request,
|
|
79
|
+
usage,
|
|
80
|
+
binding: state.trace.binding,
|
|
81
|
+
transport: genForStep.transport,
|
|
82
|
+
step: state.stepCount,
|
|
83
|
+
attempt: state.trace.attempt,
|
|
84
|
+
});
|
|
85
|
+
return { usage, genForStep, request, call };
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* True when the profile itself lists the stop in `turnBehaviour.resumption.autoContinue`.
|
|
89
|
+
*
|
|
90
|
+
* why: `DEFAULT_AUTO_CONTINUE` advises a host; a turn spends another model call only where the profile says so.
|
|
91
|
+
*/
|
|
92
|
+
function resendsFailedCall(profile, stop) {
|
|
93
|
+
const policy = profileTurnResumption(profile);
|
|
94
|
+
return policy?.autoContinue !== undefined && shouldAutoContinue(stop, policy);
|
|
95
|
+
}
|
|
96
|
+
/** The events that are a model call's reply, as opposed to its thoughts, usage, or failure. */
|
|
97
|
+
const REPLY_EVENTS = new Set([
|
|
98
|
+
'text',
|
|
99
|
+
'media',
|
|
100
|
+
'structured',
|
|
101
|
+
'citation',
|
|
102
|
+
]);
|
|
103
|
+
/** Takes what an event says about the call itself. True when the event goes no further. */
|
|
104
|
+
function tallyCallEvent(event, tally, call) {
|
|
105
|
+
if (event.type === 'error') {
|
|
106
|
+
tally.failures.push(event);
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
if (event.type === 'tool')
|
|
110
|
+
return holdModelCall(tally.calls, event.tool);
|
|
111
|
+
if (event.type === 'guardrail')
|
|
112
|
+
call.guardrail(event.guardrail);
|
|
113
|
+
if (event.type === 'structured')
|
|
114
|
+
tally.latestStructured = event.structured;
|
|
115
|
+
if (REPLY_EVENTS.has(event.type))
|
|
116
|
+
tally.replied = true;
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
/** Records an event the call gave. True when the host gets it now. */
|
|
120
|
+
function releasesNow(event, control, state, buffer) {
|
|
121
|
+
recordStepEvent(event, state);
|
|
122
|
+
if (control.withholdVisible && isWithheldOnBlock(event)) {
|
|
123
|
+
// why: Progressive-yield blocked this attempt — keep events for egress/repair only.
|
|
124
|
+
// Record the decision so the attempt gate knows nothing reached the host.
|
|
125
|
+
state.withheldVisible = true;
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
if (event.type === 'text')
|
|
129
|
+
state.released += event.text;
|
|
130
|
+
// why: Text and media stream via progressive-yield under egress, thoughts
|
|
131
|
+
// stream unguarded; holdLate only buffers non-visible events (e.g.
|
|
132
|
+
// structured) for validation.
|
|
133
|
+
const isUserVisible = event.type === 'thought' || (!buffer.holdVisible && isWithheldOnBlock(event));
|
|
134
|
+
return !buffer.holdLate || isUserVisible;
|
|
135
|
+
}
|
|
136
|
+
// why: Every other kind is the provider's answer to the request itself (it refused a part, a key, a setting); the same call sent again gets the same answer.
|
|
137
|
+
const PASSING_ERROR_KINDS = new Set([
|
|
138
|
+
'unavailable',
|
|
139
|
+
'bad_response',
|
|
140
|
+
'network',
|
|
141
|
+
'timeout',
|
|
142
|
+
'rate_limit',
|
|
143
|
+
]);
|
|
144
|
+
/**
|
|
145
|
+
* The re-send a finished call is due, if any.
|
|
146
|
+
*
|
|
147
|
+
* A failure the same call would meet again is not sent again (`PASSING_ERROR_KINDS`).
|
|
148
|
+
*
|
|
149
|
+
* why: A failed call that gave no reply and no tool call left nothing behind, so sending it again repeats
|
|
150
|
+
* nothing. A reply cut at `length` is not a failure: the same call would be cut at the same place.
|
|
151
|
+
*/
|
|
152
|
+
function resumeOf(mayResume, profile, tally) {
|
|
153
|
+
const { stop } = tally;
|
|
154
|
+
if (!mayResume || tally.replied || tally.calls.length > 0 || !stop)
|
|
155
|
+
return undefined;
|
|
156
|
+
if (!isFailedStopKind(stop.kind) || !resendsFailedCall(profile, stop))
|
|
157
|
+
return undefined;
|
|
158
|
+
const failure = tally.failures[0];
|
|
159
|
+
if (failure?.errorKind && !PASSING_ERROR_KINDS.has(failure.errorKind))
|
|
160
|
+
return undefined;
|
|
161
|
+
return { stop, failure };
|
|
162
|
+
}
|
|
163
|
+
/** Carries what the call's stream guards still hold into the turn's next call. */
|
|
164
|
+
function keepStreamCarry(state, control) {
|
|
165
|
+
state.canaryCarry = control.canaryCarry;
|
|
166
|
+
state.thoughtCarry = control.thoughtCarry;
|
|
167
|
+
if (control.promptLeaks) {
|
|
168
|
+
state.promptLeaks = [...(state.promptLeaks ?? []), ...control.promptLeaks];
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async function* executeAutonomousStep(args, state, buffer = {
|
|
172
|
+
holdLate: false,
|
|
173
|
+
holdVisible: false,
|
|
174
|
+
}) {
|
|
175
|
+
const { profile, generation, system, provider, signal } = args;
|
|
176
|
+
const { usage, genForStep, request, call } = startProviderCall(generation, system, state, isAnswerOnlyStep(profile, generation, state.stepCount));
|
|
177
|
+
const tally = { calls: [], reasoning: [], failures: [], replied: false };
|
|
178
|
+
const control = {
|
|
179
|
+
withholdVisible: false,
|
|
180
|
+
...(state.canaryCarry ? { canaryCarry: state.canaryCarry } : {}),
|
|
181
|
+
...(state.thoughtCarry ? { thoughtCarry: state.thoughtCarry } : {}),
|
|
182
|
+
};
|
|
183
|
+
const seen = {
|
|
184
|
+
profile: args.profile,
|
|
185
|
+
generation: genForStep,
|
|
186
|
+
privateSystem: system.private,
|
|
187
|
+
givenUrls: state.givenUrls,
|
|
188
|
+
canaryGiven: state.canaryGiven,
|
|
189
|
+
...(state.ownTools ? { ownTools: state.ownTools } : {}),
|
|
190
|
+
};
|
|
191
|
+
const shown = new StructuredDrafts(seen);
|
|
192
|
+
try {
|
|
193
|
+
for await (const event of yieldProviderEvents({
|
|
194
|
+
...seen,
|
|
195
|
+
request,
|
|
196
|
+
provider,
|
|
197
|
+
call,
|
|
198
|
+
signal,
|
|
199
|
+
control,
|
|
200
|
+
tools: state.tools,
|
|
201
|
+
})) {
|
|
202
|
+
if (observeCallEvent(usage, event))
|
|
203
|
+
continue;
|
|
204
|
+
if (event.type === 'reasoning') {
|
|
205
|
+
const { type: _type, ...part } = event;
|
|
206
|
+
tally.reasoning.push(part);
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
if (event.type === 'done') {
|
|
210
|
+
state.providerState = event.providerState;
|
|
211
|
+
tally.stop = event.stop;
|
|
212
|
+
state.lastStop = event.stop;
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
if (event.type === 'tool_draft') {
|
|
216
|
+
// why: A preview of the call that follows, which owns the arguments: not the turn's record. It streams
|
|
217
|
+
// as the reply's text does, through its own gate, and like that text is held only when delivery is buffered.
|
|
218
|
+
if (!buffer.holdVisible)
|
|
219
|
+
yield event;
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
if (tallyCallEvent(event, tally, call))
|
|
223
|
+
continue;
|
|
224
|
+
if (!releasesNow(event, control, state, buffer))
|
|
225
|
+
continue;
|
|
226
|
+
yield* shown.show(event);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
call.end(isAbortError(err) ? { stop: { kind: 'cancelled' } } : { stop: tally.stop, thrown: err });
|
|
231
|
+
throw err;
|
|
232
|
+
}
|
|
233
|
+
yield* shown.end();
|
|
234
|
+
keepStreamCarry(state, control);
|
|
235
|
+
const resume = resumeOf(args.mayResume, profile, tally);
|
|
236
|
+
if (!resume) {
|
|
237
|
+
for (const failure of tally.failures) {
|
|
238
|
+
recordStepEvent(failure, state);
|
|
239
|
+
if (!buffer.holdLate)
|
|
240
|
+
yield failure;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
const tokens = await callTokensEvent(usage, generation);
|
|
244
|
+
call.end({ tokens: tokens?.tokens, stop: tally.stop });
|
|
245
|
+
if (tokens) {
|
|
246
|
+
recordStepEvent(tokens, state);
|
|
247
|
+
yield tokens;
|
|
248
|
+
}
|
|
249
|
+
return {
|
|
250
|
+
calls: tally.calls,
|
|
251
|
+
reasoning: tally.reasoning,
|
|
252
|
+
latestStructured: tally.latestStructured,
|
|
253
|
+
...(resume ? { resume } : {}),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* One step of a text turn. A model call that fails (`provider_error`,
|
|
258
|
+
* `stream_incomplete`) on a kind the profile's own `turnBehaviour.resumption.autoContinue`
|
|
259
|
+
* lists, having given no reply and no tool call, is sent again in the same turn
|
|
260
|
+
* after a pause, up to `maxContinues` times a turn (once when the profile sets
|
|
261
|
+
* none). The turn's history, its step count, and what it has read stay as they were.
|
|
262
|
+
*/
|
|
263
|
+
async function* executeResumedStep(args, state, buffer) {
|
|
264
|
+
const limit = profileTurnResumption(args.profile)?.maxContinues ?? 1;
|
|
265
|
+
for (;;) {
|
|
266
|
+
const mayResume = args.profile.type === 'text' && state.resumes < limit;
|
|
267
|
+
const outcome = yield* executeAutonomousStep({ ...args, mayResume }, state, buffer);
|
|
268
|
+
if (!outcome.resume)
|
|
269
|
+
return outcome;
|
|
270
|
+
state.resumes += 1;
|
|
271
|
+
const detail = outcome.resume.failure?.errorInternal ?? outcome.resume.failure?.error;
|
|
272
|
+
state.trace.root.event('theorem.step.resume', {
|
|
273
|
+
step: state.stepCount,
|
|
274
|
+
resume: state.resumes,
|
|
275
|
+
stop: outcome.resume.stop.kind,
|
|
276
|
+
...(detail ? { error: detail } : {}),
|
|
277
|
+
});
|
|
278
|
+
state.lastStop = undefined;
|
|
279
|
+
await waitDefault(AUTO_CONTINUE_DELAY_MS, args.signal);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
function toolResultMessage(call, result) {
|
|
283
|
+
return {
|
|
284
|
+
role: 'tool',
|
|
285
|
+
tool_call_id: call.callId,
|
|
286
|
+
name: call.name,
|
|
287
|
+
content: formatToolResult(result),
|
|
288
|
+
...(result.parts && result.parts.length > 0 ? { parts: result.parts } : {}),
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* One step's calls as one assistant message, the way the model made them.
|
|
293
|
+
* Providers read a step's calls together, then their results: Google rejects
|
|
294
|
+
* a call replayed after an earlier call's result (probe 25/09/2026).
|
|
295
|
+
*/
|
|
296
|
+
/** Record the approved read-back in portable history. */
|
|
297
|
+
function recordToolModelResult(state, call, modelResult) {
|
|
298
|
+
state.currentHistory.push(toolResultMessage(call, modelResult));
|
|
299
|
+
}
|
|
300
|
+
async function* forwardToolEvents(exec, state) {
|
|
301
|
+
let next = await exec.next();
|
|
302
|
+
while (!next.done) {
|
|
303
|
+
state.allEmittedEvents.push(next.value);
|
|
304
|
+
yield next.value;
|
|
305
|
+
next = await exec.next();
|
|
306
|
+
}
|
|
307
|
+
return next.value;
|
|
308
|
+
}
|
|
309
|
+
function toolSpanOpener(state) {
|
|
310
|
+
return (name, attributes) => state.trace.root.child(name, { attributes });
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Settle a call the provider handed over already failed (malformed arguments,
|
|
314
|
+
* no function name): nothing runs, and the model reads the failure back.
|
|
315
|
+
*/
|
|
316
|
+
function recordProviderToolFailure(state, call, failure) {
|
|
317
|
+
const event = failureEvent(call, failure);
|
|
318
|
+
state.allEmittedEvents.push(event);
|
|
319
|
+
const modelResult = formatToolFailureForModel(failure);
|
|
320
|
+
startToolTrace(toolSpanOpener(state), {
|
|
321
|
+
name: call.name,
|
|
322
|
+
callId: call.callId,
|
|
323
|
+
call,
|
|
324
|
+
step: state.stepCount,
|
|
325
|
+
}).end({
|
|
326
|
+
outcome: 'error',
|
|
327
|
+
result: { text: formatToolResult(modelResult) },
|
|
328
|
+
failure,
|
|
329
|
+
});
|
|
330
|
+
recordToolModelResult(state, call, modelResult);
|
|
331
|
+
return event;
|
|
332
|
+
}
|
|
333
|
+
function* applyToolSettlement(settlement, state, call) {
|
|
334
|
+
if (settlement.aborted) {
|
|
335
|
+
state.lastStop = stageAbortStop(settlement.aborted);
|
|
336
|
+
return 'stop_cancelled';
|
|
337
|
+
}
|
|
338
|
+
if (settlement.gated) {
|
|
339
|
+
return 'gated';
|
|
340
|
+
}
|
|
341
|
+
if (settlement.modelResult?.provenance) {
|
|
342
|
+
state.taint = recordTaint(state.taint, settlement.modelResult.provenance, settlement.modelResult.suspicious);
|
|
343
|
+
addResultDestinations(state.destinations, settlement.modelResult, settlement.modelResult.provenance);
|
|
344
|
+
}
|
|
345
|
+
if (!settlement.modelResult)
|
|
346
|
+
return 'continue';
|
|
347
|
+
if (!settlement.failure && 'outputRaw' in settlement) {
|
|
348
|
+
state.toolResults.push({ tool: call.name, output: settlement.outputRaw });
|
|
349
|
+
}
|
|
350
|
+
recordToolModelResult(state, call, settlement.modelResult);
|
|
351
|
+
if (settlement.pendingInject) {
|
|
352
|
+
yield* applyStageInjects(state, 'post_tool', settlement.pendingInject, {
|
|
353
|
+
callId: call.callId,
|
|
354
|
+
toolName: call.name,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
return 'continue';
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Run the model's calls. Each reaches the host as its raw call first, all of them before
|
|
361
|
+
* any runs; their phases then arrive as each tool gives them. With `tools.parallel` they
|
|
362
|
+
* run side by side; otherwise one at a time, in the order the model made them. A call
|
|
363
|
+
* whose `pre_tool` answers `waitFor` starts its body once those calls settle
|
|
364
|
+
* (`step-order.ts`). A call the provider handed over already failed does not run. A call
|
|
365
|
+
* reads the turn's taint, destinations, and visible tools as they stood when the step
|
|
366
|
+
* began: the model chose every call in the step before any of their results came back.
|
|
367
|
+
*
|
|
368
|
+
* Results are recorded in the order the model made the calls, each followed by its
|
|
369
|
+
* `post_tool` inject. A call that gates waits for its own approval while the others run.
|
|
370
|
+
* After the step, any gate stops the turn. A call a stage cancelled stops the turn too,
|
|
371
|
+
* once every result that did come back is recorded.
|
|
372
|
+
*/
|
|
373
|
+
async function* handleModelCalls({ calls: upstreamCalls, reasoning }, generation, profile, state, system, { onStage, signal, credentials, resolveHost } = {}) {
|
|
374
|
+
if (upstreamCalls.length > 0) {
|
|
375
|
+
state.currentHistory.push(historyToolCalls(upstreamCalls.map((call, index) => (index === 0 ? { ...call, reasoning } : call))));
|
|
376
|
+
}
|
|
377
|
+
const stepId = crypto.randomUUID();
|
|
378
|
+
const leakScope = {
|
|
379
|
+
canary: generation.canary,
|
|
380
|
+
canaryGiven: state.canaryGiven,
|
|
381
|
+
privateSystem: system.private,
|
|
382
|
+
};
|
|
383
|
+
const calls = upstreamCalls.map((call) => ({
|
|
384
|
+
...call,
|
|
385
|
+
operationId: crypto.randomUUID(),
|
|
386
|
+
// why: The host and every `pre_tool` see the call as its tool gets it; a failed call never reaches a tool.
|
|
387
|
+
shown: call.failure
|
|
388
|
+
? call.arguments
|
|
389
|
+
: shownToolArguments({
|
|
390
|
+
tools: state.tools,
|
|
391
|
+
profile,
|
|
392
|
+
name: call.name,
|
|
393
|
+
input: call.arguments,
|
|
394
|
+
scope: leakScope,
|
|
395
|
+
}),
|
|
396
|
+
}));
|
|
397
|
+
for (const [index, call] of calls.entries()) {
|
|
398
|
+
const request = toolCallRequestEvent(call, call.shown, {
|
|
399
|
+
...(index === 0 && reasoning.length ? { reasoning } : {}),
|
|
400
|
+
stepId,
|
|
401
|
+
stepCallCount: calls.length,
|
|
402
|
+
});
|
|
403
|
+
state.allEmittedEvents.push(request);
|
|
404
|
+
yield request;
|
|
405
|
+
}
|
|
406
|
+
const order = stepOrder(calls.map((call) => call.callId), profileToolsParallel(profile) === true, signal);
|
|
407
|
+
const stages = {
|
|
408
|
+
handlers: onStage ? [onStage] : [],
|
|
409
|
+
profile,
|
|
410
|
+
step: state.stepCount,
|
|
411
|
+
history: () => state.currentHistory,
|
|
412
|
+
injectAllowed: profileAllowsInject(profile),
|
|
413
|
+
injectWouldExceedMaxSteps: injectWouldExceedMaxSteps(state.stepCount, generation.maxSteps),
|
|
414
|
+
host: generation.host,
|
|
415
|
+
signal,
|
|
416
|
+
stepCalls: calls.map((call) => ({ callId: call.callId, tool: call.name, input: call.shown })),
|
|
417
|
+
wait: order.wait,
|
|
418
|
+
drafts: generation.stream !== false,
|
|
419
|
+
};
|
|
420
|
+
const turn = {
|
|
421
|
+
step: state.stepCount,
|
|
422
|
+
taint: state.taint,
|
|
423
|
+
destinations: state.destinations,
|
|
424
|
+
visible: [...generation.tools.visible],
|
|
425
|
+
};
|
|
426
|
+
const execute = (call) => forwardToolEvents(executeRegisteredTool({
|
|
427
|
+
tools: state.tools,
|
|
428
|
+
execution: generation.execution,
|
|
429
|
+
invocation: {
|
|
430
|
+
model: generation.model,
|
|
431
|
+
input: generation.input,
|
|
432
|
+
history: generation.history,
|
|
433
|
+
},
|
|
434
|
+
...(state.agents ? { agents: state.agents } : {}),
|
|
435
|
+
profile,
|
|
436
|
+
name: call.name,
|
|
437
|
+
input: call.arguments,
|
|
438
|
+
callId: call.callId,
|
|
439
|
+
ctx: {
|
|
440
|
+
operationId: call.operationId,
|
|
441
|
+
pageExecution: generation.pageExecution,
|
|
442
|
+
sessionPermissions: generation.sessionPermissions,
|
|
443
|
+
path: generation.tools.path,
|
|
444
|
+
turn,
|
|
445
|
+
credentials,
|
|
446
|
+
resolveHost,
|
|
447
|
+
host: generation.host,
|
|
448
|
+
resume: undefined,
|
|
449
|
+
signal,
|
|
450
|
+
},
|
|
451
|
+
snapshot: generation.tools,
|
|
452
|
+
stages,
|
|
453
|
+
scope: leakScope,
|
|
454
|
+
openSpan: toolSpanOpener(state),
|
|
455
|
+
}), state);
|
|
456
|
+
for (const call of calls) {
|
|
457
|
+
if (call.failure)
|
|
458
|
+
order.settle(call.callId);
|
|
459
|
+
}
|
|
460
|
+
const settlements = yield* runSideBySide(calls.map((call) => call.failure ? undefined : inStep(order, call.callId, () => execute(call))));
|
|
461
|
+
let gated = false;
|
|
462
|
+
let cancelled = false;
|
|
463
|
+
for (const [index, call] of calls.entries()) {
|
|
464
|
+
if (call.failure) {
|
|
465
|
+
yield recordProviderToolFailure(state, { ...call, activityFailed: failedActivity(call.name, profile.labels) }, call.failure);
|
|
466
|
+
continue;
|
|
467
|
+
}
|
|
468
|
+
const settlement = settlements[index];
|
|
469
|
+
if (!settlement)
|
|
470
|
+
continue;
|
|
471
|
+
const outcome = yield* applyToolSettlement(settlement, state, call);
|
|
472
|
+
if (outcome === 'stop_cancelled')
|
|
473
|
+
cancelled = true;
|
|
474
|
+
if (outcome === 'gated')
|
|
475
|
+
gated = true;
|
|
476
|
+
}
|
|
477
|
+
if (cancelled)
|
|
478
|
+
return false;
|
|
479
|
+
if (gated) {
|
|
480
|
+
state.lastStop = { kind: 'gate' };
|
|
481
|
+
return false;
|
|
482
|
+
}
|
|
483
|
+
return calls.length > 0;
|
|
484
|
+
}
|
|
485
|
+
async function* executeAttempt(args) {
|
|
486
|
+
const { profile, generation, system, provider, state } = args;
|
|
487
|
+
let latestStructured;
|
|
488
|
+
// why: Text streams via progressive-yield under egress, thoughts unguarded; validation and egress
|
|
489
|
+
// both hold non-visible events (structured) until the attempt gate, so a policy
|
|
490
|
+
// sees the structured payload before any of it reaches the host.
|
|
491
|
+
const validation = profileTurnOutputs(profile)?.validation;
|
|
492
|
+
const holdLate = validation !== undefined ||
|
|
493
|
+
replyIsJudged(resolveGuardrailPolicy(profile.guardrails), TURN_REPLY);
|
|
494
|
+
// why: Buffered delivery holds each attempt's text and media until it passes; streamed delivery shows them live.
|
|
495
|
+
const holdVisible = validation !== undefined && generation.stream === false;
|
|
496
|
+
// why: Ceiling is cumulative `state.stepCount` across before_end inject re-entries
|
|
497
|
+
// within this attempt. Validation/egress repair resets stepCount at the start
|
|
498
|
+
// of each attempt cycle.
|
|
499
|
+
while (!isStepLimitReached(state.stepCount, generation.maxSteps ?? 0)) {
|
|
500
|
+
throwIfAborted(args.safe.signal);
|
|
501
|
+
state.stepCount++;
|
|
502
|
+
// why: Mid-loop inject lives on `post_tool` (after tools). Opening inject is `pre_turn`
|
|
503
|
+
// outside this loop.
|
|
504
|
+
const stepResult = yield* executeResumedStep({ profile, generation, system, provider, signal: args.safe.signal }, state, { holdLate, holdVisible });
|
|
505
|
+
if (stepResult.latestStructured !== undefined) {
|
|
506
|
+
latestStructured = stepResult.latestStructured;
|
|
507
|
+
}
|
|
508
|
+
const executed = yield* handleModelCalls(stepResult, generation, profile, state, system, args.safe);
|
|
509
|
+
if (!executed) {
|
|
510
|
+
break;
|
|
511
|
+
}
|
|
512
|
+
// why: The tools ran and no step is left to read them, so the turn has no answer.
|
|
513
|
+
if (isStepLimitReached(state.stepCount, generation.maxSteps ?? 0)) {
|
|
514
|
+
state.lastStop = { kind: 'step_limit' };
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
return { latestStructured };
|
|
518
|
+
}
|
|
519
|
+
export { executeAttempt };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { GivenUrls } from '../../../guardrails/egress-urls.js';
|
|
2
|
+
import type { OwnTools } from '../../../guardrails/tool-leak.js';
|
|
3
|
+
import type { GuardrailHit } from '../../../guardrails/types.js';
|
|
4
|
+
import type { ToolRegistry } from '../../tools/registry.js';
|
|
5
|
+
import type { ModelEvent, ModelRequest, Profile, ResolvedGeneration, TurnEvent, TurnModel } from '../../types.js';
|
|
6
|
+
import type { CallTrace } from '../turn-trace.js';
|
|
7
|
+
/** What the stream yields to the step runner: every provider event but `response`, which only the trace reads. */
|
|
8
|
+
export type StreamEvent = Exclude<ModelEvent, {
|
|
9
|
+
type: 'response';
|
|
10
|
+
}>;
|
|
11
|
+
interface OutboundStreamControl {
|
|
12
|
+
/** Stop releasing text/media to the host; keep recording for egress. */
|
|
13
|
+
withholdVisible: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* The canary opening the turn's earlier steps ended on (`canaryCarry`): read
|
|
16
|
+
* in front of this call's reply, and replaced by where this call ends.
|
|
17
|
+
*/
|
|
18
|
+
canaryCarry?: string;
|
|
19
|
+
/** System-prompt leak hits this call withheld under a host policy; they pin its verdict. */
|
|
20
|
+
promptLeaks?: GuardrailHit[];
|
|
21
|
+
/** What the turn's thoughts so far ended on (`ThoughtGuard.carryOut`): read in front of this call's, and replaced. */
|
|
22
|
+
thoughtCarry?: string;
|
|
23
|
+
}
|
|
24
|
+
declare function shouldSkipStreamEvent(event: ModelEvent, profile: Profile): boolean;
|
|
25
|
+
/** Host-visible output a mid-stream block withholds. A thought is never withheld, only omitted from. */
|
|
26
|
+
declare function isWithheldOnBlock(event: ModelEvent): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* An event as the host gets it, or nothing. The text of a call that asked for structured output is
|
|
29
|
+
* that output's JSON: under `sse` it goes out as `structured_draft`, and under `buffered` not at all,
|
|
30
|
+
* since the `structured` event is the reply whole. The turn keeps it as text, which its checks,
|
|
31
|
+
* repairs and history read.
|
|
32
|
+
*/
|
|
33
|
+
declare function shownToHost(event: TurnEvent, generation: Pick<ResolvedGeneration, 'structured' | 'stream'>): TurnEvent | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* A step's events as the host gets them (`shownToHost`), with a structured reply's drafts read
|
|
36
|
+
* first at `reply_structured`, where the whole is read. The reply's text has already passed the
|
|
37
|
+
* `reply` gate; a match at `reply_structured` stops the drafts, and the `structured` event still
|
|
38
|
+
* arrives as that check leaves it. The held tail is read and released when the step's stream ends.
|
|
39
|
+
*/
|
|
40
|
+
declare class StructuredDrafts {
|
|
41
|
+
private readonly drafts;
|
|
42
|
+
private readonly generation;
|
|
43
|
+
/** Reads the stream's own checks off what the step knows of the turn. */
|
|
44
|
+
constructor(seen: Pick<StreamArgs, 'profile' | 'generation' | 'privateSystem' | 'givenUrls' | 'canaryGiven' | 'ownTools'>);
|
|
45
|
+
show(event: TurnEvent): AsyncGenerator<TurnEvent>;
|
|
46
|
+
/** The drafts' tail the gate still holds, once the step's stream has ended. */
|
|
47
|
+
end(): Generator<TurnEvent>;
|
|
48
|
+
}
|
|
49
|
+
interface StreamArgs {
|
|
50
|
+
profile: Profile;
|
|
51
|
+
generation: ResolvedGeneration;
|
|
52
|
+
request: ModelRequest;
|
|
53
|
+
/** The private stretches of `request.system` (`BoundSystem.private`). */
|
|
54
|
+
privateSystem: readonly string[];
|
|
55
|
+
provider: TurnModel;
|
|
56
|
+
/** This call's recorder: sees every tap row and every provider event before any gate. */
|
|
57
|
+
call: Pick<CallTrace, 'tap' | 'observe'> & Partial<Pick<CallTrace, 'guardTime' | 'guardrail'>>;
|
|
58
|
+
signal?: AbortSignal;
|
|
59
|
+
control?: OutboundStreamControl;
|
|
60
|
+
/** Every URL the model has been given this turn. */
|
|
61
|
+
givenUrls: GivenUrls;
|
|
62
|
+
/** Whether the model has been given the canary this turn. */
|
|
63
|
+
canaryGiven?: boolean;
|
|
64
|
+
/** The names of the profile's tools and of their parameters. */
|
|
65
|
+
ownTools?: OwnTools;
|
|
66
|
+
/** The turn's tools: a draft is read at the boundary its tool's calls are. */
|
|
67
|
+
tools: ToolRegistry;
|
|
68
|
+
}
|
|
69
|
+
declare function yieldProviderEvents(args: StreamArgs): AsyncGenerator<StreamEvent>;
|
|
70
|
+
export type { OutboundStreamControl, StreamArgs };
|
|
71
|
+
export { isWithheldOnBlock, StructuredDrafts, shouldSkipStreamEvent, shownToHost, yieldProviderEvents, };
|