@theoremjs/agents 0.0.0-stage → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1264 -2
- package/esm/_dnt.polyfills.d.ts +66 -0
- package/esm/_dnt.polyfills.js +51 -0
- package/esm/mod.d.ts +65 -0
- package/esm/mod.js +42 -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 +458 -0
- package/esm/src/cli/commands/egress-compile.d.ts +17 -0
- package/esm/src/cli/commands/egress-compile.js +25 -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 +202 -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 +25 -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 +72 -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 +4 -0
- package/esm/src/evals/attachments.js +53 -0
- package/esm/src/evals/breakdown.d.ts +28 -0
- package/esm/src/evals/breakdown.js +68 -0
- package/esm/src/evals/graders/answer.d.ts +13 -0
- package/esm/src/evals/graders/answer.js +133 -0
- package/esm/src/evals/graders/code.d.ts +64 -0
- package/esm/src/evals/graders/code.js +205 -0
- package/esm/src/evals/graders/judge.d.ts +20 -0
- package/esm/src/evals/graders/judge.js +365 -0
- package/esm/src/evals/graders/latency.d.ts +5 -0
- package/esm/src/evals/graders/latency.js +81 -0
- package/esm/src/evals/graders/live.d.ts +11 -0
- package/esm/src/evals/graders/live.js +40 -0
- package/esm/src/evals/graders/media.d.ts +18 -0
- package/esm/src/evals/graders/media.js +92 -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 +17 -0
- package/esm/src/evals/graders/transcript.js +200 -0
- package/esm/src/evals/mod.d.ts +42 -0
- package/esm/src/evals/mod.js +30 -0
- package/esm/src/evals/record.d.ts +35 -0
- package/esm/src/evals/record.js +105 -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 +118 -0
- package/esm/src/evals/run.js +452 -0
- package/esm/src/evals/suite.d.ts +19 -0
- package/esm/src/evals/suite.js +92 -0
- package/esm/src/evals/summary.d.ts +32 -0
- package/esm/src/evals/summary.js +30 -0
- package/esm/src/evals/trial.d.ts +27 -0
- package/esm/src/evals/trial.js +158 -0
- package/esm/src/evals/types.d.ts +260 -0
- package/esm/src/evals/types.js +126 -0
- package/esm/src/evals/verdict.d.ts +18 -0
- package/esm/src/evals/verdict.js +45 -0
- package/esm/src/guardrails/canary-gate.d.ts +21 -0
- package/esm/src/guardrails/canary-gate.js +40 -0
- package/esm/src/guardrails/canary.d.ts +112 -0
- package/esm/src/guardrails/canary.js +901 -0
- package/esm/src/guardrails/compile-egress.d.ts +11 -0
- package/esm/src/guardrails/compile-egress.js +11 -0
- package/esm/src/guardrails/corpus/canary-egress-attacks.d.ts +22 -0
- package/esm/src/guardrails/corpus/canary-egress-attacks.js +303 -0
- package/esm/src/guardrails/corpus/fuzz-inbound.d.ts +5 -0
- package/esm/src/guardrails/corpus/fuzz-inbound.js +202 -0
- package/esm/src/guardrails/corpus/inbound-payloads.d.ts +3 -0
- package/esm/src/guardrails/corpus/inbound-payloads.js +118 -0
- package/esm/src/guardrails/corpus/live-attacks.d.ts +13 -0
- package/esm/src/guardrails/corpus/live-attacks.js +224 -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 +32 -0
- package/esm/src/guardrails/corpus/types.js +1 -0
- package/esm/src/guardrails/egress-automata.d.ts +14 -0
- package/esm/src/guardrails/egress-automata.js +6059 -0
- package/esm/src/guardrails/egress-compiler.d.ts +33 -0
- package/esm/src/guardrails/egress-compiler.js +237 -0
- package/esm/src/guardrails/egress-patterns.d.ts +24 -0
- package/esm/src/guardrails/egress-patterns.js +32 -0
- package/esm/src/guardrails/egress-policy.d.ts +27 -0
- package/esm/src/guardrails/egress-policy.js +76 -0
- package/esm/src/guardrails/egress-rules.d.ts +54 -0
- package/esm/src/guardrails/egress-rules.js +49 -0
- package/esm/src/guardrails/egress-stream.d.ts +105 -0
- package/esm/src/guardrails/egress-stream.js +645 -0
- package/esm/src/guardrails/egress-urls.d.ts +83 -0
- package/esm/src/guardrails/egress-urls.js +917 -0
- package/esm/src/guardrails/egress.d.ts +106 -0
- package/esm/src/guardrails/egress.js +374 -0
- package/esm/src/guardrails/error.d.ts +26 -0
- package/esm/src/guardrails/error.js +91 -0
- package/esm/src/guardrails/event-schemas.d.ts +57 -0
- package/esm/src/guardrails/event-schemas.js +41 -0
- package/esm/src/guardrails/events.d.ts +9 -0
- package/esm/src/guardrails/events.js +42 -0
- package/esm/src/guardrails/hits.d.ts +8 -0
- package/esm/src/guardrails/hits.js +19 -0
- package/esm/src/guardrails/injection-patterns.d.ts +15 -0
- package/esm/src/guardrails/injection-patterns.js +94 -0
- package/esm/src/guardrails/injection.d.ts +14 -0
- package/esm/src/guardrails/injection.js +237 -0
- package/esm/src/guardrails/lexicon.d.ts +30 -0
- package/esm/src/guardrails/lexicon.js +478 -0
- package/esm/src/guardrails/live-outbound-gate.d.ts +54 -0
- package/esm/src/guardrails/live-outbound-gate.js +305 -0
- package/esm/src/guardrails/mod.d.ts +46 -0
- package/esm/src/guardrails/mod.js +29 -0
- package/esm/src/guardrails/network.d.ts +42 -0
- package/esm/src/guardrails/network.js +328 -0
- package/esm/src/guardrails/normalize.d.ts +6 -0
- package/esm/src/guardrails/normalize.js +132 -0
- package/esm/src/guardrails/policy.d.ts +19 -0
- package/esm/src/guardrails/policy.js +50 -0
- package/esm/src/guardrails/progressive-yield.d.ts +69 -0
- package/esm/src/guardrails/progressive-yield.js +237 -0
- package/esm/src/guardrails/prompt-echo.d.ts +38 -0
- package/esm/src/guardrails/prompt-echo.js +225 -0
- package/esm/src/guardrails/quota.d.ts +20 -0
- package/esm/src/guardrails/quota.js +80 -0
- package/esm/src/guardrails/rules.d.ts +56 -0
- package/esm/src/guardrails/rules.js +54 -0
- package/esm/src/guardrails/sanitize.d.ts +23 -0
- package/esm/src/guardrails/sanitize.js +184 -0
- package/esm/src/guardrails/sensitive.d.ts +29 -0
- package/esm/src/guardrails/sensitive.js +113 -0
- package/esm/src/guardrails/serialize.d.ts +14 -0
- package/esm/src/guardrails/serialize.js +37 -0
- package/esm/src/guardrails/testing.d.ts +9 -0
- package/esm/src/guardrails/testing.js +8 -0
- package/esm/src/guardrails/theorem-error.d.ts +18 -0
- package/esm/src/guardrails/theorem-error.js +53 -0
- package/esm/src/guardrails/thought-guard.d.ts +55 -0
- package/esm/src/guardrails/thought-guard.js +464 -0
- package/esm/src/guardrails/tool-directives.d.ts +19 -0
- package/esm/src/guardrails/tool-directives.js +109 -0
- package/esm/src/guardrails/tool-result.d.ts +61 -0
- package/esm/src/guardrails/tool-result.js +248 -0
- package/esm/src/guardrails/types.d.ts +242 -0
- package/esm/src/guardrails/types.js +54 -0
- package/esm/src/host/client-turn.d.ts +9 -0
- package/esm/src/host/client-turn.js +38 -0
- package/esm/src/host/mint-trace.d.ts +28 -0
- package/esm/src/host/mint-trace.js +59 -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 +68 -0
- package/esm/src/host/reply.d.ts +7 -0
- package/esm/src/host/reply.js +35 -0
- package/esm/src/interface/blocks.d.ts +8 -0
- package/esm/src/interface/blocks.js +213 -0
- package/esm/src/interface/composer-actions.d.ts +20 -0
- package/esm/src/interface/composer-actions.js +31 -0
- package/esm/src/interface/draft.d.ts +14 -0
- package/esm/src/interface/draft.js +28 -0
- package/esm/src/interface/from-profile.d.ts +12 -0
- package/esm/src/interface/from-profile.js +144 -0
- package/esm/src/interface/history.d.ts +40 -0
- package/esm/src/interface/history.js +269 -0
- package/esm/src/interface/inputs.d.ts +10 -0
- package/esm/src/interface/inputs.js +64 -0
- package/esm/src/interface/mod.d.ts +31 -0
- package/esm/src/interface/mod.js +21 -0
- package/esm/src/interface/models.d.ts +19 -0
- package/esm/src/interface/models.js +45 -0
- package/esm/src/interface/pending.d.ts +48 -0
- package/esm/src/interface/pending.js +146 -0
- package/esm/src/interface/profile-interface.d.ts +4 -0
- package/esm/src/interface/profile-interface.js +223 -0
- package/esm/src/interface/session.d.ts +64 -0
- package/esm/src/interface/session.js +121 -0
- package/esm/src/interface/tool-calls.d.ts +20 -0
- package/esm/src/interface/tool-calls.js +73 -0
- package/esm/src/interface/tool-invoke.d.ts +4 -0
- package/esm/src/interface/tool-invoke.js +20 -0
- package/esm/src/interface/tool-media.d.ts +9 -0
- package/esm/src/interface/tool-media.js +112 -0
- package/esm/src/interface/types.d.ts +213 -0
- package/esm/src/interface/types.js +4 -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 +51 -0
- package/esm/src/kernel/auth/crypto.js +161 -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 +17 -0
- package/esm/src/kernel/auth/oauth.js +438 -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 +139 -0
- package/esm/src/kernel/auth/types.js +1 -0
- package/esm/src/kernel/default-scope.d.ts +34 -0
- package/esm/src/kernel/default-scope.js +72 -0
- package/esm/src/kernel/engine/compaction.d.ts +70 -0
- package/esm/src/kernel/engine/compaction.js +202 -0
- package/esm/src/kernel/engine/decision.d.ts +41 -0
- package/esm/src/kernel/engine/decision.js +412 -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 +9 -0
- package/esm/src/kernel/engine/live-inbound.js +19 -0
- package/esm/src/kernel/engine/live-ingress.d.ts +9 -0
- package/esm/src/kernel/engine/live-ingress.js +37 -0
- package/esm/src/kernel/engine/media-probe/audio.d.ts +7 -0
- package/esm/src/kernel/engine/media-probe/audio.js +342 -0
- package/esm/src/kernel/engine/media-probe/bytes.d.ts +6 -0
- package/esm/src/kernel/engine/media-probe/bytes.js +26 -0
- package/esm/src/kernel/engine/media-probe/image.d.ts +5 -0
- package/esm/src/kernel/engine/media-probe/image.js +171 -0
- package/esm/src/kernel/engine/media-probe/iso-bmff.d.ts +19 -0
- package/esm/src/kernel/engine/media-probe/iso-bmff.js +48 -0
- package/esm/src/kernel/engine/media-probe/matroska.d.ts +35 -0
- package/esm/src/kernel/engine/media-probe/matroska.js +226 -0
- package/esm/src/kernel/engine/media-probe/mp4.d.ts +22 -0
- package/esm/src/kernel/engine/media-probe/mp4.js +279 -0
- package/esm/src/kernel/engine/media-probe/opus.d.ts +4 -0
- package/esm/src/kernel/engine/media-probe/opus.js +23 -0
- package/esm/src/kernel/engine/media-probe/pdf.d.ts +5 -0
- package/esm/src/kernel/engine/media-probe/pdf.js +117 -0
- package/esm/src/kernel/engine/media-probe/video.d.ts +15 -0
- package/esm/src/kernel/engine/media-probe/video.js +49 -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 +322 -0
- package/esm/src/kernel/engine/runner/mod.d.ts +15 -0
- package/esm/src/kernel/engine/runner/mod.js +574 -0
- package/esm/src/kernel/engine/runner/schema-validation.d.ts +14 -0
- package/esm/src/kernel/engine/runner/schema-validation.js +105 -0
- package/esm/src/kernel/engine/runner/stages.d.ts +28 -0
- package/esm/src/kernel/engine/runner/stages.js +48 -0
- package/esm/src/kernel/engine/runner/state.d.ts +76 -0
- package/esm/src/kernel/engine/runner/state.js +40 -0
- package/esm/src/kernel/engine/runner/steps.d.ts +14 -0
- package/esm/src/kernel/engine/runner/steps.js +360 -0
- package/esm/src/kernel/engine/runner/stream.d.ts +40 -0
- package/esm/src/kernel/engine/runner/stream.js +225 -0
- package/esm/src/kernel/engine/runner/usage.d.ts +45 -0
- package/esm/src/kernel/engine/runner/usage.js +150 -0
- package/esm/src/kernel/engine/session/mod.d.ts +31 -0
- package/esm/src/kernel/engine/session/mod.js +951 -0
- package/esm/src/kernel/engine/session/session-trace.d.ts +115 -0
- package/esm/src/kernel/engine/session/session-trace.js +489 -0
- package/esm/src/kernel/engine/token-estimate.d.ts +77 -0
- package/esm/src/kernel/engine/token-estimate.js +218 -0
- package/esm/src/kernel/engine/tool-trace.d.ts +58 -0
- package/esm/src/kernel/engine/tool-trace.js +131 -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 +118 -0
- package/esm/src/kernel/engine/turn-trace.js +863 -0
- package/esm/src/kernel/engine/usage.d.ts +30 -0
- package/esm/src/kernel/engine/usage.js +134 -0
- package/esm/src/kernel/interaction-parts.d.ts +10 -0
- package/esm/src/kernel/interaction-parts.js +22 -0
- package/esm/src/kernel/mod.d.ts +47 -0
- package/esm/src/kernel/mod.js +30 -0
- package/esm/src/kernel/profile-graph.d.ts +140 -0
- package/esm/src/kernel/profile-graph.js +151 -0
- package/esm/src/kernel/profile-presence.d.ts +9 -0
- package/esm/src/kernel/profile-presence.js +143 -0
- package/esm/src/kernel/profile-scope.d.ts +36 -0
- package/esm/src/kernel/profile-scope.js +262 -0
- package/esm/src/kernel/registry/attachments.d.ts +35 -0
- package/esm/src/kernel/registry/attachments.js +211 -0
- package/esm/src/kernel/registry/catalog.d.ts +19 -0
- package/esm/src/kernel/registry/catalog.js +78 -0
- package/esm/src/kernel/registry/ingress.d.ts +8 -0
- package/esm/src/kernel/registry/ingress.js +134 -0
- package/esm/src/kernel/registry/kernel-registry.d.ts +12 -0
- package/esm/src/kernel/registry/kernel-registry.js +8 -0
- package/esm/src/kernel/registry/profile-outputs.d.ts +3 -0
- package/esm/src/kernel/registry/profile-outputs.js +7 -0
- package/esm/src/kernel/registry/profiles.d.ts +92 -0
- package/esm/src/kernel/registry/profiles.js +698 -0
- package/esm/src/kernel/registry/provider-request.d.ts +6 -0
- package/esm/src/kernel/registry/provider-request.js +42 -0
- package/esm/src/kernel/registry/resolve.d.ts +14 -0
- package/esm/src/kernel/registry/resolve.js +237 -0
- package/esm/src/kernel/registry/schemas.d.ts +9 -0
- package/esm/src/kernel/registry/schemas.js +25 -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 +33 -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 +13 -0
- package/esm/src/kernel/registry/vault.js +14 -0
- package/esm/src/kernel/schema.d.ts +172 -0
- package/esm/src/kernel/schema.js +653 -0
- package/esm/src/kernel/scope.d.ts +22 -0
- package/esm/src/kernel/scope.js +25 -0
- package/esm/src/kernel/stages.d.ts +141 -0
- package/esm/src/kernel/stages.js +388 -0
- package/esm/src/kernel/stop.d.ts +93 -0
- package/esm/src/kernel/stop.js +125 -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 +16 -0
- package/esm/src/kernel/tools/activity-label.js +209 -0
- package/esm/src/kernel/tools/events.d.ts +51 -0
- package/esm/src/kernel/tools/events.js +149 -0
- package/esm/src/kernel/tools/execute.d.ts +64 -0
- package/esm/src/kernel/tools/execute.js +801 -0
- package/esm/src/kernel/tools/gate-answer.d.ts +50 -0
- package/esm/src/kernel/tools/gate-answer.js +54 -0
- package/esm/src/kernel/tools/harness.d.ts +16 -0
- package/esm/src/kernel/tools/harness.js +42 -0
- package/esm/src/kernel/tools/invoke.d.ts +10 -0
- package/esm/src/kernel/tools/invoke.js +129 -0
- package/esm/src/kernel/tools/mcp-sessions.d.ts +20 -0
- package/esm/src/kernel/tools/mcp-sessions.js +64 -0
- package/esm/src/kernel/tools/mod.d.ts +9 -0
- package/esm/src/kernel/tools/mod.js +6 -0
- package/esm/src/kernel/tools/model-text.d.ts +11 -0
- package/esm/src/kernel/tools/model-text.js +25 -0
- package/esm/src/kernel/tools/permission.d.ts +6 -0
- package/esm/src/kernel/tools/permission.js +38 -0
- package/esm/src/kernel/tools/project.d.ts +8 -0
- package/esm/src/kernel/tools/project.js +25 -0
- package/esm/src/kernel/tools/registry.d.ts +20 -0
- package/esm/src/kernel/tools/registry.js +84 -0
- package/esm/src/kernel/tools/remote.d.ts +110 -0
- package/esm/src/kernel/tools/remote.js +998 -0
- package/esm/src/kernel/tools/resolve.d.ts +28 -0
- package/esm/src/kernel/tools/resolve.js +259 -0
- package/esm/src/kernel/tools/schema.d.ts +10 -0
- package/esm/src/kernel/tools/schema.js +174 -0
- package/esm/src/kernel/tools/signed-in-fetch.d.ts +18 -0
- package/esm/src/kernel/tools/signed-in-fetch.js +45 -0
- package/esm/src/kernel/tools/stage-run.d.ts +93 -0
- package/esm/src/kernel/tools/stage-run.js +140 -0
- package/esm/src/kernel/tools/types.d.ts +287 -0
- package/esm/src/kernel/tools/types.js +1 -0
- package/esm/src/kernel/turn-events.d.ts +599 -0
- package/esm/src/kernel/turn-events.js +425 -0
- package/esm/src/kernel/types.d.ts +884 -0
- package/esm/src/kernel/types.js +1 -0
- package/esm/src/kernel/util/base64.d.ts +2 -0
- package/esm/src/kernel/util/base64.js +13 -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/record.d.ts +1 -0
- package/esm/src/kernel/util/record.js +3 -0
- package/esm/src/observability/destinations.d.ts +9 -0
- package/esm/src/observability/destinations.js +38 -0
- package/esm/src/observability/jsonl.d.ts +18 -0
- package/esm/src/observability/jsonl.js +117 -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 +68 -0
- package/esm/src/observability/otlp.js +98 -0
- package/esm/src/observability/phoenix.d.ts +29 -0
- package/esm/src/observability/phoenix.js +71 -0
- package/esm/src/observability/policy.d.ts +14 -0
- package/esm/src/observability/policy.js +69 -0
- package/esm/src/observability/resolve-policy.d.ts +8 -0
- package/esm/src/observability/resolve-policy.js +58 -0
- package/esm/src/observability/spans.d.ts +16 -0
- package/esm/src/observability/spans.js +56 -0
- package/esm/src/observability/trace-catalog.d.ts +111 -0
- package/esm/src/observability/trace-catalog.js +865 -0
- package/esm/src/observability/trace-record.d.ts +23 -0
- package/esm/src/observability/trace-record.js +223 -0
- package/esm/src/observability/trace-schema.d.ts +54 -0
- package/esm/src/observability/trace-schema.js +59 -0
- package/esm/src/observability/trace-sink.d.ts +13 -0
- package/esm/src/observability/trace-sink.js +3 -0
- package/esm/src/observability/trace-span.d.ts +92 -0
- package/esm/src/observability/trace-span.js +199 -0
- package/esm/src/observability/trace.d.ts +11 -0
- package/esm/src/observability/trace.js +35 -0
- package/esm/src/observability/types.d.ts +85 -0
- package/esm/src/observability/types.js +3 -0
- package/esm/src/presets/google/speech-voices.d.ts +8 -0
- package/esm/src/presets/google/speech-voices.js +38 -0
- package/esm/src/presets/google-limits.d.ts +12 -0
- package/esm/src/presets/google-limits.js +18 -0
- package/esm/src/presets/google.d.ts +104 -0
- package/esm/src/presets/google.js +188 -0
- package/esm/src/presets/mod.d.ts +10 -0
- package/esm/src/presets/mod.js +9 -0
- package/esm/src/presets/openrouter.d.ts +13 -0
- package/esm/src/presets/openrouter.js +13 -0
- package/esm/src/presets/typesafe.d.ts +2 -0
- package/esm/src/presets/typesafe.js +2 -0
- package/esm/src/providers/create-provider.d.ts +21 -0
- package/esm/src/providers/create-provider.js +90 -0
- package/esm/src/providers/decision/usage.d.ts +3 -0
- package/esm/src/providers/decision/usage.js +25 -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/grounding.d.ts +5 -0
- package/esm/src/providers/google/grounding.js +226 -0
- package/esm/src/providers/google/interactions/framing.d.ts +15 -0
- package/esm/src/providers/google/interactions/framing.js +263 -0
- package/esm/src/providers/google/interactions/mod.d.ts +2 -0
- package/esm/src/providers/google/interactions/mod.js +2 -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 +24 -0
- package/esm/src/providers/google/interactions/stream.js +297 -0
- package/esm/src/providers/google/keys.d.ts +20 -0
- package/esm/src/providers/google/keys.js +87 -0
- package/esm/src/providers/google/live/framing.d.ts +51 -0
- package/esm/src/providers/google/live/framing.js +597 -0
- package/esm/src/providers/google/live/mod.d.ts +7 -0
- package/esm/src/providers/google/live/mod.js +7 -0
- package/esm/src/providers/google/live/openapi-schema.d.ts +1 -0
- package/esm/src/providers/google/live/openapi-schema.js +42 -0
- package/esm/src/providers/google/live/session.d.ts +14 -0
- package/esm/src/providers/google/live/session.js +150 -0
- package/esm/src/providers/google/live/stream.d.ts +51 -0
- package/esm/src/providers/google/live/stream.js +263 -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 +6 -0
- package/esm/src/providers/google/urls.js +6 -0
- package/esm/src/providers/google/usage.d.ts +7 -0
- package/esm/src/providers/google/usage.js +49 -0
- package/esm/src/providers/local/local.d.ts +12 -0
- package/esm/src/providers/local/local.js +186 -0
- package/esm/src/providers/local/mod.d.ts +8 -0
- package/esm/src/providers/local/mod.js +8 -0
- package/esm/src/providers/mod.d.ts +11 -0
- package/esm/src/providers/mod.js +7 -0
- package/esm/src/providers/openrouter/cache-control.d.ts +5 -0
- package/esm/src/providers/openrouter/cache-control.js +4 -0
- package/esm/src/providers/openrouter/chat.d.ts +64 -0
- package/esm/src/providers/openrouter/chat.js +490 -0
- package/esm/src/providers/openrouter/image.d.ts +24 -0
- package/esm/src/providers/openrouter/image.js +187 -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/sdk-messages.d.ts +10 -0
- package/esm/src/providers/openrouter/openai/sdk-messages.js +99 -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/resolve-api-key.d.ts +3 -0
- package/esm/src/providers/openrouter/resolve-api-key.js +8 -0
- package/esm/src/providers/openrouter/speech.d.ts +18 -0
- package/esm/src/providers/openrouter/speech.js +109 -0
- package/esm/src/providers/probe.d.ts +5 -0
- package/esm/src/providers/probe.js +15 -0
- package/esm/src/providers/shared/builtin-wire.d.ts +4 -0
- package/esm/src/providers/shared/builtin-wire.js +9 -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/response-identity.d.ts +11 -0
- package/esm/src/providers/shared/response-identity.js +12 -0
- package/esm/src/providers/shared/sse.d.ts +10 -0
- package/esm/src/providers/shared/sse.js +79 -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 +25 -0
- package/esm/src/providers/shared/tool-args.js +84 -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/shared/vault.d.ts +13 -0
- package/esm/src/providers/shared/vault.js +41 -0
- package/esm/src/providers/types.d.ts +19 -0
- package/esm/src/providers/types.js +1 -0
- package/esm/src/surface/formats.d.ts +28 -0
- package/esm/src/surface/formats.js +139 -0
- package/esm/src/surface/mod.d.ts +14 -0
- package/esm/src/surface/mod.js +10 -0
- package/esm/src/surface/runtime.d.ts +40 -0
- package/esm/src/surface/runtime.js +439 -0
- package/esm/src/surface/tools.d.ts +15 -0
- package/esm/src/surface/tools.js +80 -0
- package/esm/src/surface/types.d.ts +104 -0
- package/esm/src/surface/types.js +4 -0
- package/package.json +108 -4
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { LEXICON_KEYS } from '../guardrails/lexicon.js';
|
|
3
|
+
import { CACHE_MODES, CACHE_TTLS, COMPACTION_METERS, COMPACTION_TIMINGS, CONTINUE_STOP_KINDS, KEY_SLOT_NAME, LIVE_ACTIVITY_HANDLINGS, LIVE_END_SENSITIVITIES, LIVE_START_SENSITIVITIES, PROTOCOLS, PROVIDERS, SPEECH_AUDIO_FORMATS, STREAM_MODES, THINKING_LEVELS, } from '../kernel/schema.js';
|
|
4
|
+
import { traceAttributesSchema } from '../observability/trace-schema.js';
|
|
5
|
+
const modelBinding = z.object({
|
|
6
|
+
protocol: z.enum(PROTOCOLS),
|
|
7
|
+
provider: z.enum(PROVIDERS),
|
|
8
|
+
apiId: z.string(),
|
|
9
|
+
efforts: z.record(z.string(), z.enum(THINKING_LEVELS)).optional(),
|
|
10
|
+
defaultEffort: z.string().optional(),
|
|
11
|
+
allowEffortSelect: z.boolean().optional(),
|
|
12
|
+
summaries: z.boolean().optional(),
|
|
13
|
+
maxOutputTokens: z.number().optional(),
|
|
14
|
+
temperature: z.number().optional(),
|
|
15
|
+
builtInTools: z.array(z.string()).optional(),
|
|
16
|
+
key: z.string().regex(KEY_SLOT_NAME).optional(),
|
|
17
|
+
fallbackKey: z.string().regex(KEY_SLOT_NAME).optional(),
|
|
18
|
+
compaction: z
|
|
19
|
+
.object({
|
|
20
|
+
maxTokens: z.number(),
|
|
21
|
+
compactAt: z.number(),
|
|
22
|
+
previousExchanges: z.number(),
|
|
23
|
+
profile: z.string().optional(),
|
|
24
|
+
timing: z.enum(COMPACTION_TIMINGS),
|
|
25
|
+
meter: z.enum(COMPACTION_METERS).optional(),
|
|
26
|
+
})
|
|
27
|
+
.optional(),
|
|
28
|
+
cache: z.object({ mode: z.enum(CACHE_MODES), ttl: z.enum(CACHE_TTLS).optional() }).optional(),
|
|
29
|
+
store: z.boolean().optional(),
|
|
30
|
+
persistViaInteractionId: z.boolean().optional(),
|
|
31
|
+
server: z.string().optional(),
|
|
32
|
+
});
|
|
33
|
+
const outputs = z.object({
|
|
34
|
+
structured: z
|
|
35
|
+
.union([
|
|
36
|
+
z.string(),
|
|
37
|
+
z.object({ by: z.string(), map: z.record(z.string(), z.string()), fallback: z.string() }),
|
|
38
|
+
z.null(),
|
|
39
|
+
])
|
|
40
|
+
.optional(),
|
|
41
|
+
streaming: z
|
|
42
|
+
.object({ mode: z.enum(STREAM_MODES).optional(), streamThoughts: z.boolean().optional() })
|
|
43
|
+
.optional(),
|
|
44
|
+
});
|
|
45
|
+
const sensitiveGroups = z.object({
|
|
46
|
+
ids: z.boolean(),
|
|
47
|
+
financial: z.boolean(),
|
|
48
|
+
network: z.boolean(),
|
|
49
|
+
credentials: z.boolean(),
|
|
50
|
+
});
|
|
51
|
+
const urlCheck = z.union([
|
|
52
|
+
z.literal(false),
|
|
53
|
+
z.object({ hosts: z.array(z.string()), fromTools: z.boolean() }),
|
|
54
|
+
]);
|
|
55
|
+
const guardrails = z.object({
|
|
56
|
+
quota: z.object({ perDay: z.number() }).optional(),
|
|
57
|
+
canary: z.boolean(),
|
|
58
|
+
sanitizeInput: z.boolean(),
|
|
59
|
+
redactSensitive: sensitiveGroups,
|
|
60
|
+
hasEgress: z.boolean(),
|
|
61
|
+
egressChecks: z
|
|
62
|
+
.object({
|
|
63
|
+
sensitive: sensitiveGroups,
|
|
64
|
+
boundary: z.boolean(),
|
|
65
|
+
injection: z.boolean(),
|
|
66
|
+
images: urlCheck,
|
|
67
|
+
links: urlCheck,
|
|
68
|
+
})
|
|
69
|
+
.nullable(),
|
|
70
|
+
});
|
|
71
|
+
const observability = z.object({
|
|
72
|
+
record: z.boolean(),
|
|
73
|
+
writeTo: z.union([z.literal(false), z.string()]).optional(),
|
|
74
|
+
sampleRate: z.number(),
|
|
75
|
+
include: z.object({
|
|
76
|
+
upstreamLog: z.boolean(),
|
|
77
|
+
outboundWire: z.boolean(),
|
|
78
|
+
evidenceRaw: z.boolean(),
|
|
79
|
+
usage: z.boolean(),
|
|
80
|
+
guardrailDecisions: z.boolean(),
|
|
81
|
+
guardrailMatchPreview: z.boolean(),
|
|
82
|
+
}),
|
|
83
|
+
scrub: z.object({ sensitive: z.boolean(), injection: z.boolean(), canary: z.boolean() }),
|
|
84
|
+
resource: traceAttributesSchema,
|
|
85
|
+
retainForDays: z.number(),
|
|
86
|
+
rotateAfterMiB: z.number(),
|
|
87
|
+
hasOnWriteError: z.boolean(),
|
|
88
|
+
});
|
|
89
|
+
const inputs = z.object({
|
|
90
|
+
text: z.boolean(),
|
|
91
|
+
attachments: z.object({ accept: z.array(z.string()), acceptAttr: z.string() }).nullable(),
|
|
92
|
+
voice: z.object({ accept: z.array(z.string()) }).nullable(),
|
|
93
|
+
maxFiles: z.number().optional(),
|
|
94
|
+
maxBytes: z.number().optional(),
|
|
95
|
+
maxTurnBytes: z.number().optional(),
|
|
96
|
+
limitsByMime: z.record(z.string(), z.number()).optional(),
|
|
97
|
+
slots: z.record(z.string(), z.array(z.string())).optional(),
|
|
98
|
+
});
|
|
99
|
+
const resumption = z.object({
|
|
100
|
+
allowContinue: z.array(z.enum(CONTINUE_STOP_KINDS)).optional(),
|
|
101
|
+
autoContinue: z.array(z.enum(CONTINUE_STOP_KINDS)).optional(),
|
|
102
|
+
maxContinues: z.number().optional(),
|
|
103
|
+
});
|
|
104
|
+
const mediaTurnBehaviour = z.object({ resumption: resumption.optional() });
|
|
105
|
+
const tools = z.object({ allow: z.array(z.string()), t2Loader: z.string().optional() });
|
|
106
|
+
const common = {
|
|
107
|
+
id: z.string(),
|
|
108
|
+
models: z.record(z.string(), modelBinding),
|
|
109
|
+
defaultModel: z.string(),
|
|
110
|
+
allowModelSelect: z.boolean().optional(),
|
|
111
|
+
maxSteps: z.number().optional(),
|
|
112
|
+
key: z.string().regex(KEY_SLOT_NAME).optional(),
|
|
113
|
+
fallbackKey: z.string().regex(KEY_SLOT_NAME).optional(),
|
|
114
|
+
lexicon: z.partialRecord(z.enum(LEXICON_KEYS), z.string()),
|
|
115
|
+
guardrails: guardrails.optional(),
|
|
116
|
+
observability: observability.optional(),
|
|
117
|
+
};
|
|
118
|
+
const systemPrompt = z.union([
|
|
119
|
+
z.string(),
|
|
120
|
+
z
|
|
121
|
+
.array(z.union([z.string(), z.strictObject({ private: z.string().min(1) })]))
|
|
122
|
+
.min(1)
|
|
123
|
+
.readonly(),
|
|
124
|
+
]);
|
|
125
|
+
const identity = z.object({
|
|
126
|
+
handle: z.string(),
|
|
127
|
+
system: systemPrompt.optional(),
|
|
128
|
+
systemByRole: z.record(z.string(), systemPrompt).optional(),
|
|
129
|
+
});
|
|
130
|
+
const profileInterface = z.discriminatedUnion('type', [
|
|
131
|
+
z.object({
|
|
132
|
+
...common,
|
|
133
|
+
type: z.literal('text'),
|
|
134
|
+
identity,
|
|
135
|
+
outputs: outputs.optional(),
|
|
136
|
+
inputs,
|
|
137
|
+
tools,
|
|
138
|
+
turnBehaviour: z
|
|
139
|
+
.object({ resumption: resumption.optional(), allowSteering: z.boolean().optional() })
|
|
140
|
+
.optional(),
|
|
141
|
+
canStop: z.literal(true),
|
|
142
|
+
allowSteering: z.boolean(),
|
|
143
|
+
}),
|
|
144
|
+
z.object({
|
|
145
|
+
...common,
|
|
146
|
+
type: z.literal('image'),
|
|
147
|
+
identity,
|
|
148
|
+
outputs: outputs.optional(),
|
|
149
|
+
image: z.object({
|
|
150
|
+
aspectRatio: z.string().optional(),
|
|
151
|
+
resolution: z.string().optional(),
|
|
152
|
+
mimeType: z.string().optional(),
|
|
153
|
+
quality: z.string().optional(),
|
|
154
|
+
background: z.string().optional(),
|
|
155
|
+
n: z.number().int().min(1).optional(),
|
|
156
|
+
seed: z.number().int().optional(),
|
|
157
|
+
outputCompression: z.number().int().min(0).max(100).optional(),
|
|
158
|
+
references: z
|
|
159
|
+
.array(z.union([
|
|
160
|
+
z.object({ mimeType: z.string(), data: z.string(), name: z.string().optional() }),
|
|
161
|
+
z.object({ mimeType: z.string(), uri: z.string(), name: z.string().optional() }),
|
|
162
|
+
]))
|
|
163
|
+
.optional(),
|
|
164
|
+
includeText: z.boolean().optional(),
|
|
165
|
+
}),
|
|
166
|
+
inputs,
|
|
167
|
+
tools,
|
|
168
|
+
turnBehaviour: mediaTurnBehaviour.optional(),
|
|
169
|
+
canStop: z.literal(true),
|
|
170
|
+
}),
|
|
171
|
+
z.object({
|
|
172
|
+
...common,
|
|
173
|
+
type: z.literal('speech'),
|
|
174
|
+
identity: z.object({ handle: z.string() }),
|
|
175
|
+
outputs: outputs.optional(),
|
|
176
|
+
speech: z.object({
|
|
177
|
+
voice: z.string().optional(),
|
|
178
|
+
format: z.enum(SPEECH_AUDIO_FORMATS).optional(),
|
|
179
|
+
}),
|
|
180
|
+
inputs,
|
|
181
|
+
turnBehaviour: mediaTurnBehaviour.optional(),
|
|
182
|
+
canStop: z.literal(true),
|
|
183
|
+
}),
|
|
184
|
+
z.object({
|
|
185
|
+
...common,
|
|
186
|
+
type: z.literal('live'),
|
|
187
|
+
identity,
|
|
188
|
+
live: z.object({
|
|
189
|
+
ingress: z
|
|
190
|
+
.object({
|
|
191
|
+
audio: z.boolean().optional(),
|
|
192
|
+
video: z.boolean().optional(),
|
|
193
|
+
text: z.boolean().optional(),
|
|
194
|
+
})
|
|
195
|
+
.optional(),
|
|
196
|
+
voice: z.string().optional(),
|
|
197
|
+
vad: z
|
|
198
|
+
.object({
|
|
199
|
+
activityHandling: z.enum(LIVE_ACTIVITY_HANDLINGS).optional(),
|
|
200
|
+
startSensitivity: z.enum(LIVE_START_SENSITIVITIES).optional(),
|
|
201
|
+
endSensitivity: z.enum(LIVE_END_SENSITIVITIES).optional(),
|
|
202
|
+
prefixPaddingMs: z.number().optional(),
|
|
203
|
+
silenceDurationMs: z.number().optional(),
|
|
204
|
+
})
|
|
205
|
+
.optional(),
|
|
206
|
+
sessionResumption: z.boolean().optional(),
|
|
207
|
+
contextCompression: z
|
|
208
|
+
.object({
|
|
209
|
+
triggerTokens: z.number().optional(),
|
|
210
|
+
slidingWindow: z.object({ targetTokens: z.number().optional() }),
|
|
211
|
+
})
|
|
212
|
+
.optional(),
|
|
213
|
+
transcription: z
|
|
214
|
+
.object({ input: z.boolean().optional(), output: z.boolean().optional() })
|
|
215
|
+
.optional(),
|
|
216
|
+
}),
|
|
217
|
+
tools: z.object({ allow: z.array(z.string()) }),
|
|
218
|
+
turnBehaviour: z.object({ allowSteering: z.boolean().optional() }).optional(),
|
|
219
|
+
}),
|
|
220
|
+
]);
|
|
221
|
+
true;
|
|
222
|
+
/** `ProfileInterface`, checked: unnamed fields are dropped, a malformed one fails. */
|
|
223
|
+
export const profileInterfaceSchema = profileInterface;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { ToolGateAuth } from '../kernel/tools/gate-answer.js';
|
|
2
|
+
import type { ToolGate, TurnToolSnapshot } from '../kernel/tools/types.js';
|
|
3
|
+
import type { ModelId, ToolId, TurnEvent, TurnHistoryMessage } from '../kernel/types.js';
|
|
4
|
+
import type { TranscriptBlock, UserTurnDraft } from './types.js';
|
|
5
|
+
export type { ToolGateAuth };
|
|
6
|
+
export type GatedToolContext = {
|
|
7
|
+
name: string;
|
|
8
|
+
callId: string;
|
|
9
|
+
arguments: Record<string, unknown>;
|
|
10
|
+
/** The call's `ToolCallRequest.thoughtSignature`, for recording the call in history. */
|
|
11
|
+
thoughtSignature?: string;
|
|
12
|
+
gateKind: ToolGate['kind'];
|
|
13
|
+
permission?: ToolGate['permission'];
|
|
14
|
+
summary?: string;
|
|
15
|
+
/** Set on a sign-in gate. */
|
|
16
|
+
auth?: ToolGateAuth;
|
|
17
|
+
};
|
|
18
|
+
export type AwaitingToolContext = {
|
|
19
|
+
name: string;
|
|
20
|
+
callId: string;
|
|
21
|
+
arguments: Record<string, unknown>;
|
|
22
|
+
kind: string;
|
|
23
|
+
prompt: string;
|
|
24
|
+
options?: string[];
|
|
25
|
+
};
|
|
26
|
+
export type InterfaceTurnSession = {
|
|
27
|
+
history: TurnHistoryMessage[];
|
|
28
|
+
/** Google Interactions id for server-side continuity; cleared on branch. */
|
|
29
|
+
previousInteractionId?: string;
|
|
30
|
+
sessionPermissions: string[];
|
|
31
|
+
/** Last turn `tokens.input` for compaction meter `timing: 'before'`. */
|
|
32
|
+
inputTokens?: number;
|
|
33
|
+
/** Host override for compaction meter `history`. */
|
|
34
|
+
historyTokens?: number;
|
|
35
|
+
/** Active pre_tool gate awaiting host resume. */
|
|
36
|
+
gatedTool: GatedToolContext | null;
|
|
37
|
+
/** Completed ask_user (or similar) awaiting host UI — turn may already be done. */
|
|
38
|
+
awaitingTool: AwaitingToolContext | null;
|
|
39
|
+
/** Kernel events for the assistant segment still in flight (gate / resume / continue). */
|
|
40
|
+
assistantEvents: TurnEvent[];
|
|
41
|
+
/** User draft for the turn that produced `assistantEvents`. */
|
|
42
|
+
pendingUserDraft: UserTurnDraft | null;
|
|
43
|
+
/** Snapshot from the last gate `done` event — pass to `invokeTool({ snapshot })`. */
|
|
44
|
+
toolSnapshot?: TurnToolSnapshot;
|
|
45
|
+
/** T2 tool ids promoted during the current assistant segment (loader `loaded` outputs). */
|
|
46
|
+
promotedToolIds: ToolId[];
|
|
47
|
+
/** User-selected model id when `allowModelSelect` is enabled on the profile. */
|
|
48
|
+
selectedModel?: ModelId;
|
|
49
|
+
/** Selected effort alias when the active model has `allowEffortSelect`. */
|
|
50
|
+
selectedEffort?: string;
|
|
51
|
+
};
|
|
52
|
+
declare function emptyInterfaceTurnSession(): InterfaceTurnSession;
|
|
53
|
+
/**
|
|
54
|
+
* Every call still waiting on its gate, in the order the model made them. One
|
|
55
|
+
* step can leave several: a gate holds only its own call.
|
|
56
|
+
*/
|
|
57
|
+
declare function gatedToolsFromEvents(events: readonly TurnEvent[]): GatedToolContext[];
|
|
58
|
+
/** The gate the user answers next: the first call still waiting. */
|
|
59
|
+
declare function gatedToolFromEvents(events: readonly TurnEvent[]): GatedToolContext | null;
|
|
60
|
+
declare function awaitingFromEvents(events: readonly TurnEvent[]): AwaitingToolContext | null;
|
|
61
|
+
declare function applyTurnEventsToSession(session: InterfaceTurnSession, events: readonly TurnEvent[]): InterfaceTurnSession;
|
|
62
|
+
/** Drops `previousInteractionId` so the next turn sends the rebuilt history, not a stale handle. */
|
|
63
|
+
declare function branchInterfaceTurnSession(session: InterfaceTurnSession, blocks: readonly TranscriptBlock[]): InterfaceTurnSession;
|
|
64
|
+
export { applyTurnEventsToSession, awaitingFromEvents, branchInterfaceTurnSession, emptyInterfaceTurnSession, gatedToolFromEvents, gatedToolsFromEvents, };
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { isAwaitingUserInput } from '../kernel/stages.js';
|
|
2
|
+
import { findLast } from '../kernel/util/find-last.js';
|
|
3
|
+
import { historyFromTranscriptBlocks } from './history.js';
|
|
4
|
+
import { toolCallsOf } from './tool-calls.js';
|
|
5
|
+
import { promotedToolIdsFromEvents, toolSnapshotFromEvents } from './tool-invoke.js';
|
|
6
|
+
function emptyInterfaceTurnSession() {
|
|
7
|
+
return {
|
|
8
|
+
history: [],
|
|
9
|
+
sessionPermissions: [],
|
|
10
|
+
gatedTool: null,
|
|
11
|
+
awaitingTool: null,
|
|
12
|
+
assistantEvents: [],
|
|
13
|
+
pendingUserDraft: null,
|
|
14
|
+
promotedToolIds: [],
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Every call still waiting on its gate, in the order the model made them. One
|
|
19
|
+
* step can leave several: a gate holds only its own call.
|
|
20
|
+
*/
|
|
21
|
+
function gatedToolsFromEvents(events) {
|
|
22
|
+
const paused = events.some((event) => event.type === 'done' && (event.stop.kind === 'gate' || event.stop.kind === 'tool'));
|
|
23
|
+
if (!paused)
|
|
24
|
+
return [];
|
|
25
|
+
return toolCallsOf(events).flatMap((call) => {
|
|
26
|
+
if (call.state?.phase !== 'gate')
|
|
27
|
+
return [];
|
|
28
|
+
const { gate } = call.state;
|
|
29
|
+
return [
|
|
30
|
+
{
|
|
31
|
+
name: call.name,
|
|
32
|
+
callId: call.callId,
|
|
33
|
+
arguments: call.arguments,
|
|
34
|
+
...(call.thoughtSignature ? { thoughtSignature: call.thoughtSignature } : {}),
|
|
35
|
+
gateKind: gate.kind,
|
|
36
|
+
permission: gate.permission,
|
|
37
|
+
summary: gate.summary,
|
|
38
|
+
...(gate.kind === 'auth'
|
|
39
|
+
? {
|
|
40
|
+
auth: {
|
|
41
|
+
slot: gate.authChallenge.slot,
|
|
42
|
+
authType: gate.authChallenge.authType,
|
|
43
|
+
service: gate.authChallenge.service,
|
|
44
|
+
},
|
|
45
|
+
}
|
|
46
|
+
: {}),
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/** The gate the user answers next: the first call still waiting. */
|
|
52
|
+
function gatedToolFromEvents(events) {
|
|
53
|
+
return gatedToolsFromEvents(events)[0] ?? null;
|
|
54
|
+
}
|
|
55
|
+
function awaitingFromEvents(events) {
|
|
56
|
+
const call = findLast(toolCallsOf(events), (c) => c.state?.phase === 'complete');
|
|
57
|
+
if (call?.state?.phase !== 'complete')
|
|
58
|
+
return null;
|
|
59
|
+
const { output } = call.state;
|
|
60
|
+
if (!isAwaitingUserInput(output))
|
|
61
|
+
return null;
|
|
62
|
+
return {
|
|
63
|
+
name: call.name,
|
|
64
|
+
callId: call.callId,
|
|
65
|
+
arguments: call.arguments,
|
|
66
|
+
kind: output.kind,
|
|
67
|
+
prompt: output.prompt,
|
|
68
|
+
options: output.options,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function applyTurnEventsToSession(session, events) {
|
|
72
|
+
let previousInteractionId = session.previousInteractionId;
|
|
73
|
+
let inputTokens = session.inputTokens;
|
|
74
|
+
let historyTokens = session.historyTokens;
|
|
75
|
+
let toolSnapshot = session.toolSnapshot;
|
|
76
|
+
let promotedToolIds = session.promotedToolIds;
|
|
77
|
+
for (const event of events) {
|
|
78
|
+
if ((event.type === 'tokens' || event.type === 'done') && event.interactionId) {
|
|
79
|
+
previousInteractionId = event.interactionId;
|
|
80
|
+
}
|
|
81
|
+
// A call's own input size, not the turn's sum (`done.tokens`).
|
|
82
|
+
if (event.type === 'tokens' && event.tokens.input) {
|
|
83
|
+
inputTokens = event.tokens.input;
|
|
84
|
+
}
|
|
85
|
+
if (event.type === 'done' && event.compaction?.tokens !== undefined) {
|
|
86
|
+
historyTokens = event.compaction.tokens;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const snapshotFromDone = toolSnapshotFromEvents(events);
|
|
90
|
+
if (snapshotFromDone) {
|
|
91
|
+
toolSnapshot = snapshotFromDone;
|
|
92
|
+
}
|
|
93
|
+
const newPromoted = promotedToolIdsFromEvents(events);
|
|
94
|
+
if (newPromoted.length > 0) {
|
|
95
|
+
promotedToolIds = [...new Set([...promotedToolIds, ...newPromoted])];
|
|
96
|
+
}
|
|
97
|
+
const gated = gatedToolFromEvents(events);
|
|
98
|
+
return {
|
|
99
|
+
...session,
|
|
100
|
+
previousInteractionId,
|
|
101
|
+
inputTokens,
|
|
102
|
+
historyTokens,
|
|
103
|
+
gatedTool: gated,
|
|
104
|
+
awaitingTool: awaitingFromEvents(events),
|
|
105
|
+
toolSnapshot,
|
|
106
|
+
promotedToolIds,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/** Drops `previousInteractionId` so the next turn sends the rebuilt history, not a stale handle. */
|
|
110
|
+
function branchInterfaceTurnSession(session, blocks) {
|
|
111
|
+
return {
|
|
112
|
+
...emptyInterfaceTurnSession(),
|
|
113
|
+
history: historyFromTranscriptBlocks(blocks),
|
|
114
|
+
sessionPermissions: [...session.sessionPermissions],
|
|
115
|
+
inputTokens: session.inputTokens,
|
|
116
|
+
historyTokens: session.historyTokens,
|
|
117
|
+
selectedModel: session.selectedModel,
|
|
118
|
+
selectedEffort: session.selectedEffort,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
export { applyTurnEventsToSession, awaitingFromEvents, branchInterfaceTurnSession, emptyInterfaceTurnSession, gatedToolFromEvents, gatedToolsFromEvents, };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ToolCallEvent, TurnEvent, TurnEventOf } from '../kernel/types.js';
|
|
2
|
+
import type { ToolCall } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The raw call comes first for every call (`turnEventSchema`); a phase for a call never made is a
|
|
5
|
+
* broken stream.
|
|
6
|
+
*/
|
|
7
|
+
declare function applyToolEvent(call: ToolCall | undefined, tool: ToolCallEvent): ToolCall;
|
|
8
|
+
/** Every call in `events`, in the order the model made them. */
|
|
9
|
+
declare function toolCallsOf(events: readonly TurnEvent[]): ToolCall[];
|
|
10
|
+
/** The arguments a call ran with: the user's edit, else the model's. */
|
|
11
|
+
declare function toolCallRanWith(call: ToolCall): Record<string, unknown>;
|
|
12
|
+
/** A tool event that settles its call: the call completed or failed. */
|
|
13
|
+
type SettledToolCallEvent = TurnEventOf<'tool'> & {
|
|
14
|
+
tool: Extract<ToolCallEvent, {
|
|
15
|
+
phase: 'complete' | 'error';
|
|
16
|
+
}>;
|
|
17
|
+
};
|
|
18
|
+
declare function settlesToolCall(event: TurnEvent, callId: string): event is SettledToolCallEvent;
|
|
19
|
+
export type { SettledToolCallEvent };
|
|
20
|
+
export { applyToolEvent, settlesToolCall, toolCallRanWith, toolCallsOf };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// The model's raw call is the one owner of a call's arguments. The transcript, the interface
|
|
2
|
+
// session and history read calls through this fold only.
|
|
3
|
+
import { TheoremError } from '../guardrails/error.js';
|
|
4
|
+
/**
|
|
5
|
+
* The raw call comes first for every call (`turnEventSchema`); a phase for a call never made is a
|
|
6
|
+
* broken stream.
|
|
7
|
+
*/
|
|
8
|
+
function applyToolEvent(call, tool) {
|
|
9
|
+
if (tool.phase === undefined) {
|
|
10
|
+
return {
|
|
11
|
+
name: tool.name,
|
|
12
|
+
callId: tool.callId,
|
|
13
|
+
arguments: tool.arguments,
|
|
14
|
+
...(tool.thoughtSignature ? { thoughtSignature: tool.thoughtSignature } : {}),
|
|
15
|
+
...(tool.stepId ? { stepId: tool.stepId } : {}),
|
|
16
|
+
artifacts: [],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
if (call === undefined) {
|
|
20
|
+
throw new TheoremError('bad_response', `Tool event '${tool.phase}' for call '${tool.callId}' arrived before the call.`);
|
|
21
|
+
}
|
|
22
|
+
switch (tool.phase) {
|
|
23
|
+
case 'running': {
|
|
24
|
+
// A resumed call runs again: it is open until its next settle.
|
|
25
|
+
const { endedAt: _settled, ...open } = call;
|
|
26
|
+
return {
|
|
27
|
+
...open,
|
|
28
|
+
state: tool,
|
|
29
|
+
startedAt: tool.at,
|
|
30
|
+
...(tool.edited ? { edited: tool.edited } : {}),
|
|
31
|
+
...(tool.activity ? { activity: tool.activity } : {}),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
case 'complete':
|
|
35
|
+
return {
|
|
36
|
+
...call,
|
|
37
|
+
state: tool,
|
|
38
|
+
endedAt: tool.at,
|
|
39
|
+
...(tool.activityPast ? { activityPast: tool.activityPast } : {}),
|
|
40
|
+
};
|
|
41
|
+
case 'error':
|
|
42
|
+
case 'cancel':
|
|
43
|
+
case 'gate':
|
|
44
|
+
return { ...call, state: tool, endedAt: tool.at };
|
|
45
|
+
case 'artifact':
|
|
46
|
+
return { ...call, artifacts: [...call.artifacts, tool.artifact] };
|
|
47
|
+
case 'progress':
|
|
48
|
+
case 'trace':
|
|
49
|
+
case 'warning':
|
|
50
|
+
return call;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Every call in `events`, in the order the model made them. */
|
|
54
|
+
function toolCallsOf(events) {
|
|
55
|
+
const calls = new Map();
|
|
56
|
+
for (const event of events) {
|
|
57
|
+
if (event.type !== 'tool')
|
|
58
|
+
continue;
|
|
59
|
+
const { tool } = event;
|
|
60
|
+
calls.set(tool.callId, applyToolEvent(calls.get(tool.callId), tool));
|
|
61
|
+
}
|
|
62
|
+
return [...calls.values()];
|
|
63
|
+
}
|
|
64
|
+
/** The arguments a call ran with: the user's edit, else the model's. */
|
|
65
|
+
function toolCallRanWith(call) {
|
|
66
|
+
return call.edited?.to ?? call.arguments;
|
|
67
|
+
}
|
|
68
|
+
function settlesToolCall(event, callId) {
|
|
69
|
+
if (event.type !== 'tool' || event.tool.callId !== callId)
|
|
70
|
+
return false;
|
|
71
|
+
return event.tool.phase === 'complete' || event.tool.phase === 'error';
|
|
72
|
+
}
|
|
73
|
+
export { applyToolEvent, settlesToolCall, toolCallRanWith, toolCallsOf };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ToolId, TurnEvent, TurnToolSnapshot } from '../kernel/types.js';
|
|
2
|
+
declare function promotedToolIdsFromEvents(events: readonly TurnEvent[]): ToolId[];
|
|
3
|
+
declare function toolSnapshotFromEvents(events: readonly TurnEvent[]): TurnToolSnapshot | undefined;
|
|
4
|
+
export { promotedToolIdsFromEvents, toolSnapshotFromEvents };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { extractLoadedIds } from '../kernel/tools/resolve.js';
|
|
2
|
+
import { findLast } from '../kernel/util/find-last.js';
|
|
3
|
+
function promotedToolIdsFromEvents(events) {
|
|
4
|
+
const ids = new Set();
|
|
5
|
+
for (const event of events) {
|
|
6
|
+
if (event.type !== 'tool' || event.tool.phase !== 'complete') {
|
|
7
|
+
continue;
|
|
8
|
+
}
|
|
9
|
+
for (const id of extractLoadedIds(event.tool.output) ?? []) {
|
|
10
|
+
ids.add(id);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return [...ids];
|
|
14
|
+
}
|
|
15
|
+
function toolSnapshotFromEvents(events) {
|
|
16
|
+
// Only a `done` that stopped on `tool` or `gate` carries one (`DoneEvent`).
|
|
17
|
+
const done = findLast(events, (event) => event.type === 'done' && event.tools !== undefined);
|
|
18
|
+
return done?.type === 'done' ? done.tools : undefined;
|
|
19
|
+
}
|
|
20
|
+
export { promotedToolIdsFromEvents, toolSnapshotFromEvents };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type PromotedToolMedia = {
|
|
2
|
+
url: string;
|
|
3
|
+
mimeType: string;
|
|
4
|
+
/** A smaller copy of the same file, when the output also carried one. */
|
|
5
|
+
previewUrl?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function promotedMediaFromUrlString(raw: string): PromotedToolMedia | undefined;
|
|
8
|
+
/** One file at several sizes is promoted once: `url` its largest copy, `previewUrl` its smallest. */
|
|
9
|
+
export declare function collectPromotedMediaFromToolOutput(output: unknown): PromotedToolMedia[];
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
const EXT_MIME = {
|
|
2
|
+
avif: 'image/avif',
|
|
3
|
+
gif: 'image/gif',
|
|
4
|
+
heic: 'image/heic',
|
|
5
|
+
heif: 'image/heif',
|
|
6
|
+
jpeg: 'image/jpeg',
|
|
7
|
+
jpg: 'image/jpeg',
|
|
8
|
+
png: 'image/png',
|
|
9
|
+
svg: 'image/svg+xml',
|
|
10
|
+
webp: 'image/webp',
|
|
11
|
+
mp4: 'video/mp4',
|
|
12
|
+
webm: 'video/webm',
|
|
13
|
+
mov: 'video/quicktime',
|
|
14
|
+
ogv: 'video/ogg',
|
|
15
|
+
mp3: 'audio/mpeg',
|
|
16
|
+
m4a: 'audio/mp4',
|
|
17
|
+
ogg: 'audio/ogg',
|
|
18
|
+
wav: 'audio/wav',
|
|
19
|
+
};
|
|
20
|
+
function mimeForPathname(pathname) {
|
|
21
|
+
const base = pathname.split('/').pop() ?? pathname;
|
|
22
|
+
const dot = base.lastIndexOf('.');
|
|
23
|
+
if (dot <= 0 || dot === base.length - 1)
|
|
24
|
+
return undefined;
|
|
25
|
+
const ext = base.slice(dot + 1).toLowerCase();
|
|
26
|
+
return EXT_MIME[ext];
|
|
27
|
+
}
|
|
28
|
+
export function promotedMediaFromUrlString(raw) {
|
|
29
|
+
const trimmed = raw.trim();
|
|
30
|
+
if (trimmed.length === 0)
|
|
31
|
+
return undefined;
|
|
32
|
+
let parsed;
|
|
33
|
+
try {
|
|
34
|
+
parsed = new URL(trimmed);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:')
|
|
40
|
+
return undefined;
|
|
41
|
+
const mimeType = mimeForPathname(parsed.pathname);
|
|
42
|
+
if (!mimeType)
|
|
43
|
+
return undefined;
|
|
44
|
+
return { url: parsed.href, mimeType };
|
|
45
|
+
}
|
|
46
|
+
/** MediaWiki resizes: `…/thumb/<a>/<ab>/<File>/<N>px-<File>` is `<N>` wide; the original is `…/<a>/<ab>/<File>`. */
|
|
47
|
+
const MEDIAWIKI_THUMB = /^(.*)\/thumb(\/.+\/([^/]+))\/(\d+)px-\3(?:\.[a-z0-9]+)?$/i;
|
|
48
|
+
/**
|
|
49
|
+
* The underlying file, so one picture at several sizes counts once (Wikipedia
|
|
50
|
+
* summaries carry `thumbnail` and `originalimage`, sometimes on different
|
|
51
|
+
* wikimedia.org hosts). `width` ranks copies; the original ranks highest.
|
|
52
|
+
*/
|
|
53
|
+
function mediaAsset(url) {
|
|
54
|
+
const parsed = new URL(url);
|
|
55
|
+
const site = parsed.hostname.split('.').slice(-2).join('.');
|
|
56
|
+
// Tracking parameters never change the file; other query parameters may.
|
|
57
|
+
for (const name of [...parsed.searchParams.keys()]) {
|
|
58
|
+
if (name.startsWith('utm_'))
|
|
59
|
+
parsed.searchParams.delete(name);
|
|
60
|
+
}
|
|
61
|
+
const thumb = MEDIAWIKI_THUMB.exec(parsed.pathname);
|
|
62
|
+
const pathname = thumb ? `${thumb[1]}${thumb[2]}` : parsed.pathname;
|
|
63
|
+
return {
|
|
64
|
+
key: `${site}${pathname}${parsed.search}`,
|
|
65
|
+
width: thumb ? Number(thumb[4]) : Number.POSITIVE_INFINITY,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** One file at several sizes is promoted once: `url` its largest copy, `previewUrl` its smallest. */
|
|
69
|
+
export function collectPromotedMediaFromToolOutput(output) {
|
|
70
|
+
const seen = new Map();
|
|
71
|
+
const out = [];
|
|
72
|
+
const visit = (value) => {
|
|
73
|
+
if (typeof value === 'string') {
|
|
74
|
+
const media = promotedMediaFromUrlString(value);
|
|
75
|
+
if (!media)
|
|
76
|
+
return;
|
|
77
|
+
const asset = mediaAsset(media.url);
|
|
78
|
+
const prior = seen.get(asset.key);
|
|
79
|
+
if (!prior) {
|
|
80
|
+
seen.set(asset.key, { index: out.length, largest: asset.width, smallest: asset.width });
|
|
81
|
+
out.push(media);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const current = out[prior.index];
|
|
85
|
+
if (asset.width > prior.largest) {
|
|
86
|
+
prior.largest = asset.width;
|
|
87
|
+
out[prior.index] = {
|
|
88
|
+
...current,
|
|
89
|
+
url: media.url,
|
|
90
|
+
previewUrl: current.previewUrl ?? current.url,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
else if (asset.width < prior.smallest) {
|
|
94
|
+
prior.smallest = asset.width;
|
|
95
|
+
out[prior.index] = { ...current, previewUrl: media.url };
|
|
96
|
+
}
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (Array.isArray(value)) {
|
|
100
|
+
for (const item of value)
|
|
101
|
+
visit(item);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (value !== null && typeof value === 'object') {
|
|
105
|
+
for (const nested of Object.values(value)) {
|
|
106
|
+
visit(nested);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
visit(output);
|
|
111
|
+
return out;
|
|
112
|
+
}
|