@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,278 @@
|
|
|
1
|
+
// invariant: A settled tool call replays its `readBack`, the text the model read, so provider continuation
|
|
2
|
+
// matches `runTurn` / `invokeTool`.
|
|
3
|
+
import { TheoremError } from '../guardrails/error.js';
|
|
4
|
+
import { labelText } from '../guardrails/labels.js';
|
|
5
|
+
import { mediaKindForMime } from '../kernel/registry/catalog.js';
|
|
6
|
+
import { formatToolFailureForModel, formatToolResult } from '../kernel/tools/model-text.js';
|
|
7
|
+
import { keptReply } from '../kernel/turn-events.js';
|
|
8
|
+
import { applyToolEvent, toolCallRanWith } from './tool-calls.js';
|
|
9
|
+
/**
|
|
10
|
+
* The kernel sets `readBack` on every `complete` and `error` event, so a call without it did not
|
|
11
|
+
* come from a run and has no text the model read.
|
|
12
|
+
*/
|
|
13
|
+
function toolReadBack(call) {
|
|
14
|
+
const state = call.state;
|
|
15
|
+
if ((state?.phase !== 'complete' && state?.phase !== 'error') || state.readBack === undefined) {
|
|
16
|
+
throw new TheoremError('request', `Tool call '${call.name}' has no readBack: only a settled call from a run carries one.`);
|
|
17
|
+
}
|
|
18
|
+
return state.readBack;
|
|
19
|
+
}
|
|
20
|
+
function blobToPart(blob) {
|
|
21
|
+
const kind = mediaKindForMime(blob.mimeType) ?? 'document';
|
|
22
|
+
return { type: kind, mimeType: blob.mimeType, data: blob.data };
|
|
23
|
+
}
|
|
24
|
+
function draftBlobsWithData(blobs) {
|
|
25
|
+
const mapped = blobs
|
|
26
|
+
?.filter((a) => typeof a.data === 'string' && a.data.length > 0)
|
|
27
|
+
.map((a) => ({ name: a.name, mimeType: a.mimeType, data: a.data }));
|
|
28
|
+
return mapped?.length ? mapped : undefined;
|
|
29
|
+
}
|
|
30
|
+
/** For `onStage` inject. Uses base64 on `draft.attachments` / `draft.voice` when present. */
|
|
31
|
+
function userDraftToSteerInject(draft) {
|
|
32
|
+
const attachments = draftBlobsWithData(draft.attachments);
|
|
33
|
+
const voice = draftBlobsWithData(draft.voice);
|
|
34
|
+
return appendUserDraftToHistory([], { text: draft.text }, {
|
|
35
|
+
...(attachments ? { attachments } : {}),
|
|
36
|
+
...(voice ? { voice } : {}),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/** The history with the user's draft added as a user message. */
|
|
40
|
+
function appendUserDraftToHistory(history, draft, media = {}) {
|
|
41
|
+
const text = draft.text?.trim();
|
|
42
|
+
const parts = [];
|
|
43
|
+
for (const blob of media.attachments ?? []) {
|
|
44
|
+
parts.push(blobToPart(blob));
|
|
45
|
+
}
|
|
46
|
+
for (const blob of media.voice ?? []) {
|
|
47
|
+
parts.push(blobToPart(blob));
|
|
48
|
+
}
|
|
49
|
+
if (text) {
|
|
50
|
+
parts.push({ type: 'text', text });
|
|
51
|
+
}
|
|
52
|
+
if (parts.length === 0) {
|
|
53
|
+
return history;
|
|
54
|
+
}
|
|
55
|
+
if (parts.length === 1 && parts[0]?.type === 'text') {
|
|
56
|
+
return [...history, { role: 'user', content: text }];
|
|
57
|
+
}
|
|
58
|
+
return [...history, { role: 'user', parts }];
|
|
59
|
+
}
|
|
60
|
+
function toolCallEntry(tool) {
|
|
61
|
+
return {
|
|
62
|
+
id: tool.callId,
|
|
63
|
+
type: 'function',
|
|
64
|
+
function: { name: tool.name, arguments: JSON.stringify(tool.arguments) },
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/** The assistant message holding a step's calls, with the reasoning the model wrote before them. */
|
|
68
|
+
function assistantCalls(tools) {
|
|
69
|
+
const reasoning = tools.flatMap((tool) => tool.reasoning ?? []);
|
|
70
|
+
return {
|
|
71
|
+
role: 'assistant',
|
|
72
|
+
tool_calls: tools.map(toolCallEntry),
|
|
73
|
+
...(reasoning.length ? { reasoning } : {}),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function toolResultMessage(tool, content) {
|
|
77
|
+
return { role: 'tool', tool_call_id: tool.callId, name: tool.name, content };
|
|
78
|
+
}
|
|
79
|
+
function appendToolCallPair(history, tool, content) {
|
|
80
|
+
return [...history, assistantCalls([tool]), toolResultMessage(tool, content)];
|
|
81
|
+
}
|
|
82
|
+
/** The history with a tool call and its result added. */
|
|
83
|
+
function appendToolExchangeToHistory(history, call) {
|
|
84
|
+
return appendToolCallPair(history, historyToolCall(call), toolReadBack(call));
|
|
85
|
+
}
|
|
86
|
+
function historyToolCall(call) {
|
|
87
|
+
return {
|
|
88
|
+
name: call.name,
|
|
89
|
+
callId: call.callId,
|
|
90
|
+
arguments: toolCallRanWith(call),
|
|
91
|
+
...(call.reasoning ? { reasoning: call.reasoning } : {}),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/** The history with a denied tool call and the reason added. */
|
|
95
|
+
function appendToolDenialToHistory(history, tool, labels) {
|
|
96
|
+
const failure = tool.failure ?? {
|
|
97
|
+
code: 'denied',
|
|
98
|
+
message: labelText('session.tool_denied', { tool: tool.name }, labels),
|
|
99
|
+
};
|
|
100
|
+
return appendToolCallPair(history, tool, formatToolResult(formatToolFailureForModel(failure)));
|
|
101
|
+
}
|
|
102
|
+
/** `undefined` while the call is open. */
|
|
103
|
+
function settledToolContent(call) {
|
|
104
|
+
const phase = call.state?.phase;
|
|
105
|
+
return phase === 'complete' || phase === 'error' ? toolReadBack(call) : undefined;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* One model step's settled calls: a single assistant message holding every call
|
|
109
|
+
* the step made, with the reasoning written before them, then each result. Google replays a
|
|
110
|
+
* step's calls only this way. With `gated: 'open'`, a
|
|
111
|
+
* call waiting on its gate joins the message too, left without a result.
|
|
112
|
+
*/
|
|
113
|
+
function appendToolStepToHistory(history, calls, gated = 'omit') {
|
|
114
|
+
const entries = calls.flatMap((call) => {
|
|
115
|
+
const content = settledToolContent(call);
|
|
116
|
+
if (content !== undefined)
|
|
117
|
+
return [{ tool: historyToolCall(call), content }];
|
|
118
|
+
return gated === 'open' && call.state?.phase === 'gate'
|
|
119
|
+
? [{ tool: historyToolCall(call) }]
|
|
120
|
+
: [];
|
|
121
|
+
});
|
|
122
|
+
if (entries.length === 0)
|
|
123
|
+
return history;
|
|
124
|
+
return [
|
|
125
|
+
...history,
|
|
126
|
+
assistantCalls(entries.map(({ tool }) => tool)),
|
|
127
|
+
...entries.flatMap(({ tool, content }) => content === undefined ? [] : [toolResultMessage(tool, content)]),
|
|
128
|
+
];
|
|
129
|
+
}
|
|
130
|
+
/** The history with the assistant's reply from the turn events added. */
|
|
131
|
+
function appendAssistantEventsToHistory(history, events) {
|
|
132
|
+
return foldAssistantEvents(history, events, 'omit');
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* A reply paused on its gates, as the model reads it when the user walks away:
|
|
136
|
+
* its gated calls stay open in their step for the host to answer
|
|
137
|
+
* (`answerOpenToolCalls`) before the user's next message.
|
|
138
|
+
*/
|
|
139
|
+
function appendPausedTurnToHistory(history, events) {
|
|
140
|
+
return foldAssistantEvents(history, events, 'open');
|
|
141
|
+
}
|
|
142
|
+
function foldAssistantEvents(history, events, gated) {
|
|
143
|
+
let next = history;
|
|
144
|
+
let textBuf = '';
|
|
145
|
+
let step;
|
|
146
|
+
const calls = new Map();
|
|
147
|
+
const flushText = () => {
|
|
148
|
+
if (!textBuf) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
next = [...next, { role: 'assistant', content: textBuf }];
|
|
152
|
+
textBuf = '';
|
|
153
|
+
};
|
|
154
|
+
const flushStep = () => {
|
|
155
|
+
if (!step) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const stepCalls = step.callKeys.flatMap((id) => calls.get(id) ?? []);
|
|
159
|
+
next = appendToolStepToHistory(next, stepCalls, gated);
|
|
160
|
+
step = undefined;
|
|
161
|
+
};
|
|
162
|
+
for (const event of keptReply(events)) {
|
|
163
|
+
if (event.type === 'text') {
|
|
164
|
+
flushStep();
|
|
165
|
+
textBuf += event.text;
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
if (event.type === 'structured' && event.structured !== undefined) {
|
|
169
|
+
flushStep();
|
|
170
|
+
// why: The streamed text is this reply's JSON as the model wrote it; the structured output is the reply as kept.
|
|
171
|
+
textBuf = '';
|
|
172
|
+
next = [...next, { role: 'assistant', content: JSON.stringify(event.structured) }];
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
if (event.type !== 'tool') {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
const key = event.tool.operationId ?? event.tool.callId;
|
|
179
|
+
const call = applyToolEvent(calls.get(key), event.tool);
|
|
180
|
+
calls.set(key, call);
|
|
181
|
+
if (event.tool.phase !== undefined) {
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (!step || call.stepId === undefined || step.stepId !== call.stepId) {
|
|
185
|
+
flushStep();
|
|
186
|
+
flushText();
|
|
187
|
+
step = { stepId: call.stepId, callKeys: [] };
|
|
188
|
+
}
|
|
189
|
+
step.callKeys.push(key);
|
|
190
|
+
}
|
|
191
|
+
flushStep();
|
|
192
|
+
flushText();
|
|
193
|
+
return next;
|
|
194
|
+
}
|
|
195
|
+
/** Attachment and voice blocks are omitted: their preview `data` is UI-only. */
|
|
196
|
+
function historyFromTranscriptBlocks(blocks) {
|
|
197
|
+
let history = [];
|
|
198
|
+
let step = [];
|
|
199
|
+
const flushStep = () => {
|
|
200
|
+
history = appendToolStepToHistory(history, step);
|
|
201
|
+
step = [];
|
|
202
|
+
};
|
|
203
|
+
for (const block of blocks) {
|
|
204
|
+
if (block.kind === 'tool') {
|
|
205
|
+
const open = step[0];
|
|
206
|
+
if (open && (open.stepId === undefined || open.stepId !== block.tool.stepId))
|
|
207
|
+
flushStep();
|
|
208
|
+
step.push(block.tool);
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
flushStep();
|
|
212
|
+
if (block.kind === 'user-text') {
|
|
213
|
+
history = appendUserDraftToHistory(history, { text: block.text });
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
if (block.kind === 'text') {
|
|
217
|
+
history = [...history, { role: 'assistant', content: block.text }];
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
if (block.kind === 'structured') {
|
|
221
|
+
history = [...history, { role: 'assistant', content: JSON.stringify(block.value) }];
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
flushStep();
|
|
225
|
+
return history;
|
|
226
|
+
}
|
|
227
|
+
function lastToolStep(history) {
|
|
228
|
+
const at = history.findLastIndex((message) => message.tool_calls !== undefined);
|
|
229
|
+
const calls = history[at]?.tool_calls;
|
|
230
|
+
return calls ? { at, calls } : undefined;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* The calls the history leaves open: those of its last step with no result
|
|
234
|
+
* after it, when nothing but results follows that step. Empty otherwise.
|
|
235
|
+
*/
|
|
236
|
+
function openToolCallIds(history) {
|
|
237
|
+
const step = lastToolStep(history);
|
|
238
|
+
if (!step)
|
|
239
|
+
return [];
|
|
240
|
+
const after = history.slice(step.at + 1);
|
|
241
|
+
if (after.some((message) => message.role !== 'tool'))
|
|
242
|
+
return [];
|
|
243
|
+
const answered = new Set(after.map((message) => message.tool_call_id));
|
|
244
|
+
return step.calls.flatMap((call) => (answered.has(call.id) ? [] : [call.id]));
|
|
245
|
+
}
|
|
246
|
+
function openCallsMismatch(history, ids) {
|
|
247
|
+
return new TheoremError('request', `the history leaves open [${openToolCallIds(history).join(', ')}], not [${ids.join(', ')}]`);
|
|
248
|
+
}
|
|
249
|
+
/** Throws unless the history's open tool calls are exactly these ids. */
|
|
250
|
+
function assertOpenToolCalls(history, ids) {
|
|
251
|
+
const open = openToolCallIds(history);
|
|
252
|
+
if (open.length !== ids.length || open.some((id) => !ids.includes(id))) {
|
|
253
|
+
throw openCallsMismatch(history, ids);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* `answers` holds, by call id, the text the model reads for each open call. Results follow their
|
|
258
|
+
* step in the order the model made the calls. Throws unless `answers` names exactly the open calls.
|
|
259
|
+
*/
|
|
260
|
+
function answerOpenToolCalls(history, answers) {
|
|
261
|
+
const ids = [...answers.keys()];
|
|
262
|
+
assertOpenToolCalls(history, ids);
|
|
263
|
+
const step = lastToolStep(history);
|
|
264
|
+
if (!step)
|
|
265
|
+
return [...history];
|
|
266
|
+
const results = new Map(history.slice(step.at + 1).map((message) => [message.tool_call_id, message]));
|
|
267
|
+
const resultOf = (call) => {
|
|
268
|
+
const result = results.get(call.id);
|
|
269
|
+
if (result)
|
|
270
|
+
return result;
|
|
271
|
+
const content = answers.get(call.id);
|
|
272
|
+
if (content === undefined)
|
|
273
|
+
throw openCallsMismatch(history, ids);
|
|
274
|
+
return { role: 'tool', tool_call_id: call.id, name: call.function.name, content };
|
|
275
|
+
};
|
|
276
|
+
return [...history.slice(0, step.at + 1), ...step.calls.map(resultOf)];
|
|
277
|
+
}
|
|
278
|
+
export { answerOpenToolCalls, appendAssistantEventsToHistory, appendPausedTurnToHistory, appendToolDenialToHistory, appendToolExchangeToHistory, appendUserDraftToHistory, assertOpenToolCalls, historyFromTranscriptBlocks, toolReadBack, userDraftToSteerInject, };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ProfileInputsSpec } from '../kernel/types.js';
|
|
2
|
+
import type { AttachmentValidationResult, ProfileInputsInterface, UserTurnDraft } from './types.js';
|
|
3
|
+
/** The accepted MIME types as the value of an HTML `accept` attribute, comma-joined. */
|
|
4
|
+
declare function attachmentAcceptAttr(accept: string[]): string;
|
|
5
|
+
/** `inputs` is null for profile types that declare none (the kernel's `profileInputs`). */
|
|
6
|
+
declare function inputsFromSpec(inputs: ProfileInputsSpec | null | undefined): ProfileInputsInterface;
|
|
7
|
+
/** Validate staged files against resolved profile `inputs`: the kernel's one attachment check. */
|
|
8
|
+
declare function validateProfileInputs(inputs: ProfileInputsInterface, draft: Pick<UserTurnDraft, 'attachments' | 'voice'>): AttachmentValidationResult;
|
|
9
|
+
/** The first accepted format this browser can record; undefined when it can record none. */
|
|
10
|
+
declare function pickMediaRecorderMime(accept?: string[]): string | undefined;
|
|
11
|
+
export { attachmentAcceptAttr, inputsFromSpec, pickMediaRecorderMime, validateProfileInputs };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { attachmentIssues, resolveMediaLimits } from '../kernel/registry/attachments.js';
|
|
2
|
+
import { mimeAllowed } from '../kernel/registry/catalog.js';
|
|
3
|
+
const RECORDER_CANDIDATES = [
|
|
4
|
+
'audio/webm;codecs=opus',
|
|
5
|
+
'audio/webm',
|
|
6
|
+
'audio/mp4',
|
|
7
|
+
'audio/wav',
|
|
8
|
+
'audio/mpeg',
|
|
9
|
+
];
|
|
10
|
+
/** The accepted MIME types as the value of an HTML `accept` attribute, comma-joined. */
|
|
11
|
+
function attachmentAcceptAttr(accept) {
|
|
12
|
+
return accept.join(',');
|
|
13
|
+
}
|
|
14
|
+
/** `inputs` is null for profile types that declare none (the kernel's `profileInputs`). */
|
|
15
|
+
function inputsFromSpec(inputs) {
|
|
16
|
+
const accept = inputs?.attachments?.accept;
|
|
17
|
+
const voiceAccept = inputs?.voice?.accept;
|
|
18
|
+
return {
|
|
19
|
+
text: inputs?.text !== false,
|
|
20
|
+
attachments: accept?.length ? { accept, acceptAttr: attachmentAcceptAttr(accept) } : null,
|
|
21
|
+
voice: voiceAccept?.length ? { accept: voiceAccept } : null,
|
|
22
|
+
maxFiles: inputs?.maxFiles,
|
|
23
|
+
maxBytes: inputs?.maxBytes,
|
|
24
|
+
maxTurnBytes: inputs?.maxTurnBytes,
|
|
25
|
+
limitsByMime: inputs?.limitsByMime,
|
|
26
|
+
slots: inputs?.slots,
|
|
27
|
+
context: inputs?.context,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function toProfileInputsSpec(inputs) {
|
|
31
|
+
return {
|
|
32
|
+
text: inputs.text,
|
|
33
|
+
attachments: inputs.attachments ? { accept: inputs.attachments.accept } : undefined,
|
|
34
|
+
voice: inputs.voice ? { accept: inputs.voice.accept } : undefined,
|
|
35
|
+
maxFiles: inputs.maxFiles,
|
|
36
|
+
maxBytes: inputs.maxBytes,
|
|
37
|
+
maxTurnBytes: inputs.maxTurnBytes,
|
|
38
|
+
limitsByMime: inputs.limitsByMime,
|
|
39
|
+
slots: inputs.slots,
|
|
40
|
+
context: inputs.context,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Validate staged files against resolved profile `inputs`: the kernel's one attachment check. */
|
|
44
|
+
function validateProfileInputs(inputs, draft) {
|
|
45
|
+
const facts = (files) => (files ?? []).map(({ name, mimeType, sizeBytes }) => ({ name, mimeType, sizeBytes }));
|
|
46
|
+
const issues = attachmentIssues({
|
|
47
|
+
attachments: inputs.attachments?.accept,
|
|
48
|
+
voice: inputs.voice?.accept,
|
|
49
|
+
limits: resolveMediaLimits(toProfileInputsSpec(inputs)),
|
|
50
|
+
}, facts(draft.attachments), facts(draft.voice));
|
|
51
|
+
return { ok: issues.length === 0, issues };
|
|
52
|
+
}
|
|
53
|
+
/** The first accepted format this browser can record; undefined when it can record none. */
|
|
54
|
+
function pickMediaRecorderMime(accept) {
|
|
55
|
+
const recorder = globalThis
|
|
56
|
+
.MediaRecorder;
|
|
57
|
+
if (recorder === undefined)
|
|
58
|
+
return undefined;
|
|
59
|
+
const supported = (mime) => recorder.isTypeSupported(mime);
|
|
60
|
+
const fromCandidates = (pool) => pool.find(supported);
|
|
61
|
+
if (accept?.length) {
|
|
62
|
+
return (fromCandidates(RECORDER_CANDIDATES.filter((mime) => mimeAllowed(accept, mime))) ??
|
|
63
|
+
accept.find(supported));
|
|
64
|
+
}
|
|
65
|
+
return fromCandidates(RECORDER_CANDIDATES);
|
|
66
|
+
}
|
|
67
|
+
export { attachmentAcceptAttr, inputsFromSpec, pickMediaRecorderMime, validateProfileInputs };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless profile-driven interface — spec, inputs, transcript folding,
|
|
3
|
+
* composer pending intents (stash / queue / steer).
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import "../../_dnt.polyfills.js";
|
|
8
|
+
export type { AttachmentValidationCode, AttachmentValidationIssue, AttachmentValidationParams, } from '../kernel/types.js';
|
|
9
|
+
export { buildUserTurnBlocks, foldConversationTurn, foldTurnEvents, resetBlockIds, } from './blocks.js';
|
|
10
|
+
export type { ComposerActionContext, ComposerMenuAction, ComposerPrimaryAction, ComposerRunPhase, } from './composer-actions.js';
|
|
11
|
+
export { resolveComposerMenuActions, resolveComposerPrimary } from './composer-actions.js';
|
|
12
|
+
export type { PrepareUserTurnResult } from './draft.js';
|
|
13
|
+
export { prepareUserTurn, sanitizeUserDraft } from './draft.js';
|
|
14
|
+
export { clientProfileInterface, interfaceFromProfile, interfaceFromProjected, } from './from-profile.js';
|
|
15
|
+
export type { UserTurnHistoryMedia } from './history.js';
|
|
16
|
+
export { answerOpenToolCalls, appendAssistantEventsToHistory, appendPausedTurnToHistory, appendToolDenialToHistory, appendToolExchangeToHistory, appendUserDraftToHistory, assertOpenToolCalls, historyFromTranscriptBlocks, toolReadBack, userDraftToSteerInject, } from './history.js';
|
|
17
|
+
export { attachmentAcceptAttr, inputsFromSpec, pickMediaRecorderMime, validateProfileInputs, } from './inputs.js';
|
|
18
|
+
export type { InterfaceEffortOption, InterfaceModelOption } from './models.js';
|
|
19
|
+
export { defaultInterfaceEffort, effortSelectEnabled, generationSelectEnabled, interfaceEffortOptions, interfaceModelOptions, modelSelectEnabled, } from './models.js';
|
|
20
|
+
export type { ComposerPendingKind, ComposerPendingMessage, CreateComposerPendingMessageArgs, } from './pending.js';
|
|
21
|
+
export { COMPOSER_PENDING_KINDS, cloneUserTurnDraft, composerPendingPreview, consumeNextComposerQueue, consumeNextComposerSteer, convertSteersToFrontQueued, createComposerPendingMessage, moveComposerPendingWithinKind, orderComposerPendingMessages, promoteComposerPendingKind, removeComposerPendingMessage, removeLandedSteers, updateComposerPendingDraft, userDraftHasPayload, } from './pending.js';
|
|
22
|
+
export { profileInterfaceSchema } from './profile-interface.js';
|
|
23
|
+
export type { AwaitingToolContext, GatedToolContext, InterfaceTurnSession, ToolGateAuth, } from './session.js';
|
|
24
|
+
export { applyTurnEventsToSession, awaitingFromEvents, branchInterfaceTurnSession, emptyInterfaceTurnSession, gatedToolFromEvents, gatedToolsFromEvents, } from './session.js';
|
|
25
|
+
export type { WordedStopKind } from './stop.js';
|
|
26
|
+
export { stopText, WORDED_STOP_KINDS } from './stop.js';
|
|
27
|
+
export type { SettledToolCallEvent } from './tool-calls.js';
|
|
28
|
+
export { argumentsSoFar, settlesToolCall, toolCallRanWith, toolCallsOf } from './tool-calls.js';
|
|
29
|
+
export { promotedToolIdsFromEvents, toolSnapshotFromEvents } from './tool-invoke.js';
|
|
30
|
+
export type { PromotedToolMedia } from './tool-media.js';
|
|
31
|
+
export { collectPromotedMediaFromToolOutput, promotedMediaFromUrlString, } from './tool-media.js';
|
|
32
|
+
export type { AttachmentValidationResult, ComposerInterfaceFields, ComposerProfileInterface, FoldTurnEventsOptions, ImageProfileInterface, LiveProfileInterface, ModelBindingView, PendingAttachment, ProfileGuardrailsView, ProfileInputsInterface, ProfileInterface, ProfileObservabilityView, ProfileOutputsView, ProfileToolsView, SpeechProfileInterface, TextProfileInterface, TranscriptBlock, TranscriptBlockKind, UserTurnDraft, } from './types.js';
|
|
33
|
+
export { streamThoughtsEnabled } from './types.js';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless profile-driven interface — spec, inputs, transcript folding,
|
|
3
|
+
* composer pending intents (stash / queue / steer).
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import "../../_dnt.polyfills.js";
|
|
8
|
+
export { buildUserTurnBlocks, foldConversationTurn, foldTurnEvents, resetBlockIds, } from './blocks.js';
|
|
9
|
+
export { resolveComposerMenuActions, resolveComposerPrimary } from './composer-actions.js';
|
|
10
|
+
export { prepareUserTurn, sanitizeUserDraft } from './draft.js';
|
|
11
|
+
export { clientProfileInterface, interfaceFromProfile, interfaceFromProjected, } from './from-profile.js';
|
|
12
|
+
export { answerOpenToolCalls, appendAssistantEventsToHistory, appendPausedTurnToHistory, appendToolDenialToHistory, appendToolExchangeToHistory, appendUserDraftToHistory, assertOpenToolCalls, historyFromTranscriptBlocks, toolReadBack, userDraftToSteerInject, } from './history.js';
|
|
13
|
+
export { attachmentAcceptAttr, inputsFromSpec, pickMediaRecorderMime, validateProfileInputs, } from './inputs.js';
|
|
14
|
+
export { defaultInterfaceEffort, effortSelectEnabled, generationSelectEnabled, interfaceEffortOptions, interfaceModelOptions, modelSelectEnabled, } from './models.js';
|
|
15
|
+
export { COMPOSER_PENDING_KINDS, cloneUserTurnDraft, composerPendingPreview, consumeNextComposerQueue, consumeNextComposerSteer, convertSteersToFrontQueued, createComposerPendingMessage, moveComposerPendingWithinKind, orderComposerPendingMessages, promoteComposerPendingKind, removeComposerPendingMessage, removeLandedSteers, updateComposerPendingDraft, userDraftHasPayload, } from './pending.js';
|
|
16
|
+
export { profileInterfaceSchema } from './profile-interface.js';
|
|
17
|
+
export { applyTurnEventsToSession, awaitingFromEvents, branchInterfaceTurnSession, emptyInterfaceTurnSession, gatedToolFromEvents, gatedToolsFromEvents, } from './session.js';
|
|
18
|
+
export { stopText, WORDED_STOP_KINDS } from './stop.js';
|
|
19
|
+
export { argumentsSoFar, settlesToolCall, toolCallRanWith, toolCallsOf } from './tool-calls.js';
|
|
20
|
+
export { promotedToolIdsFromEvents, toolSnapshotFromEvents } from './tool-invoke.js';
|
|
21
|
+
export { collectPromotedMediaFromToolOutput, promotedMediaFromUrlString, } from './tool-media.js';
|
|
22
|
+
export { streamThoughtsEnabled } from './types.js';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ModelId } from '../kernel/types.js';
|
|
2
|
+
import type { ComposerProfileInterface } from './types.js';
|
|
3
|
+
export type ModelSelectProfile = Pick<ComposerProfileInterface, 'id' | 'models' | 'defaultModel' | 'allowModelSelect'>;
|
|
4
|
+
/** One model a user can pick from. */
|
|
5
|
+
export type InterfaceModelOption = {
|
|
6
|
+
id: ModelId;
|
|
7
|
+
label: string;
|
|
8
|
+
};
|
|
9
|
+
/** One effort level a user can pick from, by alias. */
|
|
10
|
+
export type InterfaceEffortOption = {
|
|
11
|
+
alias: string;
|
|
12
|
+
level: string;
|
|
13
|
+
};
|
|
14
|
+
/** True when the profile lets the user pick between two or more models. */
|
|
15
|
+
declare function modelSelectEnabled(profile: ModelSelectProfile): boolean;
|
|
16
|
+
/** True when the model lets the user pick between two or more effort levels. */
|
|
17
|
+
declare function effortSelectEnabled(profile: ModelSelectProfile, modelId: ModelId | undefined): boolean;
|
|
18
|
+
/** True when the user has any model or effort choice to make. */
|
|
19
|
+
declare function generationSelectEnabled(profile: ModelSelectProfile, modelId: ModelId | undefined): boolean;
|
|
20
|
+
/** `defaultEffort` when it names an alias, else the first alias. */
|
|
21
|
+
declare function defaultInterfaceEffort(profile: ModelSelectProfile, modelId: ModelId | undefined): string | undefined;
|
|
22
|
+
/** The models the user can pick from, or none when the choice is off. */
|
|
23
|
+
declare function interfaceModelOptions(profile: ModelSelectProfile): InterfaceModelOption[];
|
|
24
|
+
/** The effort levels the user can pick from for this model, or none when the choice is off. */
|
|
25
|
+
declare function interfaceEffortOptions(profile: ModelSelectProfile, modelId: ModelId | undefined): InterfaceEffortOption[];
|
|
26
|
+
export { defaultInterfaceEffort, effortSelectEnabled, generationSelectEnabled, interfaceEffortOptions, interfaceModelOptions, modelSelectEnabled, };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
function bindingFor(profile, modelId) {
|
|
2
|
+
if (!modelId)
|
|
3
|
+
return undefined;
|
|
4
|
+
return profile.models[modelId];
|
|
5
|
+
}
|
|
6
|
+
/** True when the profile lets the user pick between two or more models. */
|
|
7
|
+
function modelSelectEnabled(profile) {
|
|
8
|
+
return Boolean(profile.allowModelSelect && Object.keys(profile.models).length >= 2);
|
|
9
|
+
}
|
|
10
|
+
/** True when the model lets the user pick between two or more effort levels. */
|
|
11
|
+
function effortSelectEnabled(profile, modelId) {
|
|
12
|
+
const binding = bindingFor(profile, modelId);
|
|
13
|
+
if (!binding?.allowEffortSelect)
|
|
14
|
+
return false;
|
|
15
|
+
return Object.keys(binding.efforts ?? {}).length >= 2;
|
|
16
|
+
}
|
|
17
|
+
/** True when the user has any model or effort choice to make. */
|
|
18
|
+
function generationSelectEnabled(profile, modelId) {
|
|
19
|
+
return modelSelectEnabled(profile) || effortSelectEnabled(profile, modelId);
|
|
20
|
+
}
|
|
21
|
+
/** `defaultEffort` when it names an alias, else the first alias. */
|
|
22
|
+
function defaultInterfaceEffort(profile, modelId) {
|
|
23
|
+
const binding = bindingFor(profile, modelId);
|
|
24
|
+
if (!binding?.efforts)
|
|
25
|
+
return undefined;
|
|
26
|
+
const defaultAlias = binding.defaultEffort?.trim();
|
|
27
|
+
if (defaultAlias && binding.efforts[defaultAlias])
|
|
28
|
+
return defaultAlias;
|
|
29
|
+
const keys = Object.keys(binding.efforts);
|
|
30
|
+
return keys[0];
|
|
31
|
+
}
|
|
32
|
+
/** The models the user can pick from, or none when the choice is off. */
|
|
33
|
+
function interfaceModelOptions(profile) {
|
|
34
|
+
if (!modelSelectEnabled(profile))
|
|
35
|
+
return [];
|
|
36
|
+
return Object.entries(profile.models).map(([id, binding]) => ({
|
|
37
|
+
id,
|
|
38
|
+
label: binding.apiId,
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
/** The effort levels the user can pick from for this model, or none when the choice is off. */
|
|
42
|
+
function interfaceEffortOptions(profile, modelId) {
|
|
43
|
+
if (!effortSelectEnabled(profile, modelId))
|
|
44
|
+
return [];
|
|
45
|
+
const binding = bindingFor(profile, modelId);
|
|
46
|
+
if (!binding?.efforts)
|
|
47
|
+
return [];
|
|
48
|
+
return Object.entries(binding.efforts).map(([alias, level]) => ({ alias, level }));
|
|
49
|
+
}
|
|
50
|
+
export { defaultInterfaceEffort, effortSelectEnabled, generationSelectEnabled, interfaceEffortOptions, interfaceModelOptions, modelSelectEnabled, };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { TurnEvent } from '../kernel/types.js';
|
|
2
|
+
import type { UserTurnDraft } from './types.js';
|
|
3
|
+
/** Display order: steers, then queues, then stashes. */
|
|
4
|
+
export declare const COMPOSER_PENDING_KINDS: readonly ["steer", "queue", "stash"];
|
|
5
|
+
/** One of {@linkcode COMPOSER_PENDING_KINDS}. */
|
|
6
|
+
export type ComposerPendingKind = (typeof COMPOSER_PENDING_KINDS)[number];
|
|
7
|
+
/** A message the user has set aside while a turn runs. */
|
|
8
|
+
export interface ComposerPendingMessage {
|
|
9
|
+
id: string;
|
|
10
|
+
kind: ComposerPendingKind;
|
|
11
|
+
draft: UserTurnDraft;
|
|
12
|
+
createdAt: number;
|
|
13
|
+
updatedAt: number;
|
|
14
|
+
}
|
|
15
|
+
/** What `createComposerPendingMessage` takes: the kind and the draft. */
|
|
16
|
+
export type CreateComposerPendingMessageArgs = {
|
|
17
|
+
kind: ComposerPendingKind;
|
|
18
|
+
draft: UserTurnDraft;
|
|
19
|
+
id?: string;
|
|
20
|
+
now?: number;
|
|
21
|
+
};
|
|
22
|
+
/** True when the draft holds text, an attachment, or voice. */
|
|
23
|
+
declare function userDraftHasPayload(draft: UserTurnDraft): boolean;
|
|
24
|
+
/** Short preview for pending bars (text, else attachment hint). */
|
|
25
|
+
declare function composerPendingPreview(message: ComposerPendingMessage): string;
|
|
26
|
+
/** Throws on an empty draft. */
|
|
27
|
+
declare function createComposerPendingMessage(args: CreateComposerPendingMessageArgs): ComposerPendingMessage;
|
|
28
|
+
/** A copy of the draft that shares nothing with the original. */
|
|
29
|
+
declare function cloneUserTurnDraft(draft: UserTurnDraft): UserTurnDraft;
|
|
30
|
+
/** Steer, then queue, then stash; FIFO within a kind. */
|
|
31
|
+
declare function orderComposerPendingMessages(messages: readonly ComposerPendingMessage[]): ComposerPendingMessage[];
|
|
32
|
+
/** When a run ends, undelivered steers become queues ahead of the existing ones. */
|
|
33
|
+
declare function convertSteersToFrontQueued(messages: readonly ComposerPendingMessage[], now?: number): ComposerPendingMessage[];
|
|
34
|
+
/**
|
|
35
|
+
* Drops the steers a turn event reports as landed in the conversation. A steer
|
|
36
|
+
* it never names stays pending, so the run's end requeues it.
|
|
37
|
+
*/
|
|
38
|
+
declare function removeLandedSteers(messages: readonly ComposerPendingMessage[], event: TurnEvent): ComposerPendingMessage[];
|
|
39
|
+
/** The messages without the one with this id. */
|
|
40
|
+
declare function removeComposerPendingMessage(messages: readonly ComposerPendingMessage[], id: string): ComposerPendingMessage[];
|
|
41
|
+
/** The messages with this id's draft replaced; throws when the new draft is empty. */
|
|
42
|
+
declare function updateComposerPendingDraft(messages: readonly ComposerPendingMessage[], id: string, draft: UserTurnDraft, now?: number): ComposerPendingMessage[];
|
|
43
|
+
/** The messages with this id moved one place up or down among those of its kind. */
|
|
44
|
+
declare function moveComposerPendingWithinKind(messages: readonly ComposerPendingMessage[], id: string, direction: 'up' | 'down'): ComposerPendingMessage[];
|
|
45
|
+
/** One steer per safe boundary: call once per `onStage` inject site. */
|
|
46
|
+
declare function consumeNextComposerSteer(messages: readonly ComposerPendingMessage[]): {
|
|
47
|
+
message: ComposerPendingMessage | null;
|
|
48
|
+
remaining: ComposerPendingMessage[];
|
|
49
|
+
};
|
|
50
|
+
/** Call only after the agent run has fully ended, not on a tool pause. */
|
|
51
|
+
declare function consumeNextComposerQueue(messages: readonly ComposerPendingMessage[]): {
|
|
52
|
+
message: ComposerPendingMessage | null;
|
|
53
|
+
remaining: ComposerPendingMessage[];
|
|
54
|
+
};
|
|
55
|
+
/** The messages with this id changed to another kind. */
|
|
56
|
+
declare function promoteComposerPendingKind(messages: readonly ComposerPendingMessage[], id: string, kind: ComposerPendingKind, now?: number): ComposerPendingMessage[];
|
|
57
|
+
export { cloneUserTurnDraft, composerPendingPreview, consumeNextComposerQueue, consumeNextComposerSteer, convertSteersToFrontQueued, createComposerPendingMessage, moveComposerPendingWithinKind, orderComposerPendingMessages, promoteComposerPendingKind, removeComposerPendingMessage, removeLandedSteers, updateComposerPendingDraft, userDraftHasPayload, };
|