@theoremjs/agents 0.3.0 → 0.3.2
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/README.md +277 -995
- package/esm/mod.d.ts +34 -20
- package/esm/mod.js +19 -12
- package/esm/src/cli/commands/bench.js +36 -14
- 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 +3 -3
- package/esm/src/cli/commands/fuzz-canary.js +55 -16
- package/esm/src/cli/commands/profile.js +4 -4
- package/esm/src/cli/commands/run.d.ts +2 -2
- package/esm/src/cli/commands/run.js +1 -1
- package/esm/src/cli/commands/test.d.ts +4 -3
- package/esm/src/cli/commands/test.js +2 -2
- package/esm/src/cli/index.js +9 -9
- package/esm/src/cli/matrix/fixtures.js +25 -30
- package/esm/src/evals/attachments.d.ts +1 -0
- package/esm/src/evals/attachments.js +4 -2
- package/esm/src/evals/breakdown.d.ts +2 -0
- package/esm/src/evals/breakdown.js +1 -0
- package/esm/src/evals/graders/answer.d.ts +3 -0
- package/esm/src/evals/graders/answer.js +1 -0
- package/esm/src/evals/graders/code.d.ts +7 -31
- package/esm/src/evals/graders/code.js +4 -25
- package/esm/src/evals/graders/judge.d.ts +4 -0
- package/esm/src/evals/graders/judge.js +7 -5
- package/esm/src/evals/graders/latency.d.ts +1 -0
- package/esm/src/evals/graders/latency.js +3 -2
- package/esm/src/evals/graders/live.d.ts +3 -0
- package/esm/src/evals/graders/live.js +2 -0
- package/esm/src/evals/graders/media.js +1 -2
- package/esm/src/evals/graders/shared.js +1 -1
- package/esm/src/evals/graders/transcript.d.ts +2 -0
- package/esm/src/evals/graders/transcript.js +5 -3
- package/esm/src/evals/mod.d.ts +1 -9
- package/esm/src/evals/mod.js +1 -9
- package/esm/src/evals/record.d.ts +6 -0
- package/esm/src/evals/record.js +4 -2
- package/esm/src/evals/rubrics/mod.d.ts +1 -1
- package/esm/src/evals/rubrics/mod.js +1 -1
- package/esm/src/evals/rubrics/mustache.js +1 -1
- package/esm/src/evals/rubrics/types.js +1 -1
- package/esm/src/evals/run.d.ts +9 -52
- package/esm/src/evals/run.js +12 -46
- package/esm/src/evals/suite.d.ts +12 -3
- package/esm/src/evals/suite.js +9 -4
- package/esm/src/evals/summary.d.ts +3 -0
- package/esm/src/evals/summary.js +1 -0
- package/esm/src/evals/trial.d.ts +3 -16
- package/esm/src/evals/trial.js +7 -30
- package/esm/src/evals/types.d.ts +30 -121
- package/esm/src/evals/types.js +3 -16
- package/esm/src/evals/verdict.d.ts +5 -0
- package/esm/src/evals/verdict.js +4 -1
- 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 +1 -0
- package/esm/src/guardrails/canary.d.ts +49 -15
- package/esm/src/guardrails/canary.js +103 -30
- package/esm/src/guardrails/compile-egress.d.ts +6 -5
- package/esm/src/guardrails/compile-egress.js +6 -5
- package/esm/src/guardrails/corpus/canary-egress-attacks.d.ts +3 -1
- package/esm/src/guardrails/corpus/canary-egress-attacks.js +4 -2
- package/esm/src/guardrails/corpus/fuzz-inbound.js +14 -17
- package/esm/src/guardrails/corpus/inbound-payloads.d.ts +2 -0
- package/esm/src/guardrails/corpus/inbound-payloads.js +4 -2
- package/esm/src/guardrails/corpus/live-attacks.d.ts +2 -0
- package/esm/src/guardrails/corpus/live-attacks.js +6 -1
- package/esm/src/guardrails/corpus/mod.d.ts +1 -1
- package/esm/src/guardrails/corpus/secrets.d.ts +3 -3
- package/esm/src/guardrails/corpus/secrets.js +2 -2
- package/esm/src/guardrails/corpus/strings.d.ts +1 -1
- package/esm/src/guardrails/corpus/strings.js +1 -1
- package/esm/src/guardrails/corpus/types.d.ts +5 -1
- 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 +4 -6
- package/esm/src/guardrails/egress-automata.js +24095 -4572
- package/esm/src/guardrails/egress-compiler.d.ts +38 -16
- package/esm/src/guardrails/egress-compiler.js +254 -60
- package/esm/src/guardrails/egress-patterns.d.ts +4 -2
- package/esm/src/guardrails/egress-patterns.js +6 -2
- package/esm/src/guardrails/egress-stream.d.ts +54 -36
- package/esm/src/guardrails/egress-stream.js +253 -124
- package/esm/src/guardrails/egress-urls.d.ts +6 -3
- package/esm/src/guardrails/egress-urls.js +14 -22
- package/esm/src/guardrails/egress.d.ts +26 -86
- package/esm/src/guardrails/egress.js +59 -309
- package/esm/src/guardrails/error.d.ts +13 -8
- package/esm/src/guardrails/error.js +25 -18
- package/esm/src/guardrails/event-schemas.d.ts +46 -3
- package/esm/src/guardrails/event-schemas.js +12 -5
- package/esm/src/guardrails/events.d.ts +5 -1
- package/esm/src/guardrails/events.js +4 -1
- package/esm/src/guardrails/hints.d.ts +14 -0
- package/esm/src/guardrails/hints.js +57 -0
- package/esm/src/guardrails/hits.d.ts +7 -1
- package/esm/src/guardrails/hits.js +12 -1
- 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 +6 -1
- package/esm/src/guardrails/injection-patterns.js +33 -1
- 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 +17 -1
- package/esm/src/guardrails/injection.js +259 -36
- package/esm/src/guardrails/labels.d.ts +40 -0
- package/esm/src/guardrails/labels.js +881 -0
- package/esm/src/guardrails/live-outbound-gate.d.ts +9 -8
- package/esm/src/guardrails/live-outbound-gate.js +100 -107
- package/esm/src/guardrails/mod.d.ts +30 -22
- package/esm/src/guardrails/mod.js +19 -14
- package/esm/src/guardrails/network.d.ts +4 -0
- package/esm/src/guardrails/network.js +21 -19
- package/esm/src/guardrails/normalize.d.ts +15 -1
- package/esm/src/guardrails/normalize.js +34 -1
- package/esm/src/guardrails/policy.d.ts +2 -17
- package/esm/src/guardrails/policy.js +12 -41
- package/esm/src/guardrails/progressive-yield.d.ts +65 -24
- package/esm/src/guardrails/progressive-yield.js +191 -147
- package/esm/src/guardrails/prompt-echo.d.ts +4 -2
- package/esm/src/guardrails/prompt-echo.js +87 -6
- package/esm/src/guardrails/quota.d.ts +4 -1
- package/esm/src/guardrails/quota.js +7 -2
- package/esm/src/guardrails/rules.d.ts +20 -29
- package/esm/src/guardrails/rules.js +23 -30
- package/esm/src/guardrails/sanitize.d.ts +32 -15
- package/esm/src/guardrails/sanitize.js +100 -124
- 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 +16 -23
- package/esm/src/guardrails/sensitive.js +168 -47
- package/esm/src/guardrails/serialize.d.ts +1 -0
- package/esm/src/guardrails/testing.d.ts +4 -2
- package/esm/src/guardrails/testing.js +4 -2
- package/esm/src/guardrails/theorem-error.d.ts +5 -2
- package/esm/src/guardrails/theorem-error.js +6 -3
- package/esm/src/guardrails/thought-guard.d.ts +34 -13
- package/esm/src/guardrails/thought-guard.js +264 -64
- package/esm/src/guardrails/tool-directives.d.ts +29 -10
- package/esm/src/guardrails/tool-directives.js +133 -47
- 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 +45 -14
- package/esm/src/guardrails/tool-result.js +94 -70
- package/esm/src/guardrails/types.d.ts +79 -71
- package/esm/src/guardrails/types.js +11 -7
- package/esm/src/host/client-turn.d.ts +29 -2
- package/esm/src/host/client-turn.js +46 -4
- package/esm/src/host/mint-trace.d.ts +1 -0
- package/esm/src/host/mint-trace.js +3 -2
- package/esm/src/host/mod.d.ts +2 -2
- package/esm/src/host/mod.js +1 -1
- package/esm/src/host/readStreamingJsonStringField.js +2 -43
- package/esm/src/host/reply.d.ts +6 -0
- package/esm/src/host/reply.js +8 -1
- package/esm/src/interface/blocks.d.ts +3 -0
- package/esm/src/interface/blocks.js +84 -14
- package/esm/src/interface/composer-actions.d.ts +4 -0
- package/esm/src/interface/composer-actions.js +5 -3
- package/esm/src/interface/draft.d.ts +6 -0
- package/esm/src/interface/draft.js +22 -11
- package/esm/src/interface/from-profile.d.ts +13 -1
- package/esm/src/interface/from-profile.js +66 -31
- package/esm/src/interface/history.d.ts +9 -3
- package/esm/src/interface/history.js +33 -24
- package/esm/src/interface/inputs.d.ts +1 -0
- package/esm/src/interface/inputs.js +3 -0
- package/esm/src/interface/mod.d.ts +4 -2
- package/esm/src/interface/mod.js +3 -2
- package/esm/src/interface/models.d.ts +7 -0
- package/esm/src/interface/models.js +5 -0
- package/esm/src/interface/pending.d.ts +9 -0
- package/esm/src/interface/pending.js +9 -3
- package/esm/src/interface/profile-interface.js +54 -40
- package/esm/src/interface/session.d.ts +12 -5
- package/esm/src/interface/session.js +17 -10
- 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 +14 -2
- package/esm/src/interface/tool-calls.js +64 -10
- package/esm/src/interface/tool-invoke.d.ts +2 -0
- package/esm/src/interface/tool-invoke.js +3 -1
- package/esm/src/interface/tool-media.d.ts +2 -0
- package/esm/src/interface/tool-media.js +2 -1
- package/esm/src/interface/types.d.ts +105 -40
- package/esm/src/interface/types.js +1 -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/crypto.d.ts +7 -2
- package/esm/src/kernel/auth/crypto.js +12 -10
- package/esm/src/kernel/auth/oauth.d.ts +2 -1
- package/esm/src/kernel/auth/oauth.js +23 -22
- package/esm/src/kernel/auth/typed-secret.js +2 -2
- package/esm/src/kernel/auth/types.d.ts +13 -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 +43 -5
- package/esm/src/kernel/default-scope.js +54 -5
- 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 +6 -5
- package/esm/src/kernel/engine/compaction.js +12 -11
- package/esm/src/kernel/engine/decision.d.ts +10 -8
- package/esm/src/kernel/engine/decision.js +174 -146
- package/esm/src/kernel/engine/embedding.d.ts +8 -0
- package/esm/src/kernel/engine/embedding.js +118 -0
- package/esm/src/kernel/engine/live-inbound.d.ts +14 -4
- package/esm/src/kernel/engine/live-inbound.js +36 -11
- package/esm/src/kernel/engine/live-ingress.d.ts +6 -0
- package/esm/src/kernel/engine/live-ingress.js +6 -1
- package/esm/src/kernel/engine/repair.js +12 -12
- package/esm/src/kernel/engine/runner/gates.d.ts +2 -2
- package/esm/src/kernel/engine/runner/gates.js +287 -101
- package/esm/src/kernel/engine/runner/mod.d.ts +19 -5
- package/esm/src/kernel/engine/runner/mod.js +107 -56
- 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 +24 -3
- package/esm/src/kernel/engine/runner/schema-validation.js +78 -4
- package/esm/src/kernel/engine/runner/stages.d.ts +1 -1
- package/esm/src/kernel/engine/runner/stages.js +1 -8
- package/esm/src/kernel/engine/runner/state.d.ts +33 -12
- package/esm/src/kernel/engine/runner/state.js +11 -1
- 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 +2 -2
- package/esm/src/kernel/engine/runner/steps.js +329 -169
- package/esm/src/kernel/engine/runner/stream.d.ts +42 -11
- package/esm/src/kernel/engine/runner/stream.js +197 -46
- package/esm/src/kernel/engine/runner/usage.d.ts +5 -5
- package/esm/src/kernel/engine/runner/usage.js +12 -14
- package/esm/src/kernel/engine/session/mod.d.ts +8 -6
- package/esm/src/kernel/engine/session/mod.js +360 -129
- package/esm/src/kernel/engine/session/session-trace.d.ts +10 -10
- package/esm/src/kernel/engine/session/session-trace.js +41 -30
- package/esm/src/kernel/engine/token-estimate.d.ts +10 -64
- package/esm/src/kernel/engine/token-estimate.js +14 -194
- package/esm/src/kernel/engine/tool-trace.d.ts +3 -3
- package/esm/src/kernel/engine/tool-trace.js +2 -1
- package/esm/src/kernel/engine/turn-trace.d.ts +8 -7
- package/esm/src/kernel/engine/turn-trace.js +28 -36
- package/esm/src/kernel/engine/usage.d.ts +6 -0
- package/esm/src/kernel/engine/usage.js +17 -0
- package/esm/src/kernel/interaction-parts.d.ts +3 -0
- package/esm/src/kernel/interaction-parts.js +18 -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 +38 -11
- package/esm/src/kernel/mod.js +22 -7
- package/esm/src/kernel/profile-graph.d.ts +11 -6
- package/esm/src/kernel/profile-graph.js +14 -7
- package/esm/src/kernel/profile-presence.d.ts +10 -1
- package/esm/src/kernel/profile-presence.js +90 -75
- package/esm/src/kernel/profile-scope.d.ts +7 -3
- package/esm/src/kernel/profile-scope.js +67 -55
- 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 +15 -4
- package/esm/src/kernel/registry/attachments.js +31 -22
- package/esm/src/kernel/registry/catalog.d.ts +6 -0
- package/esm/src/kernel/registry/catalog.js +9 -2
- 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 +6 -2
- package/esm/src/kernel/registry/ingress.js +55 -10
- package/esm/src/kernel/registry/kernel-registry.d.ts +3 -0
- package/esm/src/kernel/registry/kernel-registry.js +9 -2
- package/esm/src/kernel/registry/profile-outputs.js +4 -1
- package/esm/src/kernel/registry/profiles.d.ts +38 -14
- package/esm/src/kernel/registry/profiles.js +280 -205
- package/esm/src/kernel/registry/provider-request.d.ts +3 -3
- package/esm/src/kernel/registry/provider-request.js +5 -13
- package/esm/src/kernel/registry/resolve.d.ts +4 -1
- package/esm/src/kernel/registry/resolve.js +59 -58
- package/esm/src/kernel/registry/schemas.d.ts +3 -0
- package/esm/src/kernel/registry/schemas.js +3 -1
- 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/system-prompt.js +7 -8
- package/esm/src/kernel/registry/vault.d.ts +14 -13
- package/esm/src/kernel/registry/vault.js +1 -14
- package/esm/src/kernel/schema.d.ts +100 -46
- package/esm/src/kernel/schema.js +499 -257
- package/esm/src/kernel/scope.d.ts +12 -5
- package/esm/src/kernel/scope.js +23 -3
- package/esm/src/kernel/stages.d.ts +38 -3
- package/esm/src/kernel/stages.js +82 -39
- package/esm/src/kernel/stop.d.ts +29 -6
- package/esm/src/kernel/stop.js +16 -4
- package/esm/src/kernel/system-parts.js +6 -6
- package/esm/src/kernel/tools/activity-label.d.ts +12 -6
- package/esm/src/kernel/tools/activity-label.js +258 -32
- 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 +21 -6
- package/esm/src/kernel/tools/events.js +53 -18
- package/esm/src/kernel/tools/execute.d.ts +47 -11
- package/esm/src/kernel/tools/execute.js +508 -136
- package/esm/src/kernel/tools/gate-answer.d.ts +12 -2
- package/esm/src/kernel/tools/gate-answer.js +17 -6
- 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 +1 -0
- package/esm/src/kernel/tools/harness.js +2 -1
- 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 +27 -5
- package/esm/src/kernel/tools/invoke.js +223 -70
- package/esm/src/kernel/tools/mcp-sessions.d.ts +4 -1
- package/esm/src/kernel/tools/mcp-sessions.js +13 -8
- package/esm/src/kernel/tools/mod.d.ts +4 -3
- package/esm/src/kernel/tools/mod.js +3 -2
- package/esm/src/kernel/tools/model-text.d.ts +10 -5
- package/esm/src/kernel/tools/model-text.js +18 -12
- 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 +11 -2
- package/esm/src/kernel/tools/permission.js +12 -12
- package/esm/src/kernel/tools/project.d.ts +4 -1
- package/esm/src/kernel/tools/project.js +32 -2
- package/esm/src/kernel/tools/registry.d.ts +9 -2
- package/esm/src/kernel/tools/registry.js +69 -10
- package/esm/src/kernel/tools/remote.d.ts +40 -6
- package/esm/src/kernel/tools/remote.js +219 -92
- package/esm/src/kernel/tools/resolve.d.ts +3 -0
- package/esm/src/kernel/tools/resolve.js +12 -4
- 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 +3 -3
- package/esm/src/kernel/tools/schema.js +21 -100
- package/esm/src/kernel/tools/signed-in-fetch.d.ts +2 -1
- package/esm/src/kernel/tools/signed-in-fetch.js +3 -3
- package/esm/src/kernel/tools/stage-run.d.ts +27 -4
- package/esm/src/kernel/tools/stage-run.js +75 -17
- package/esm/src/kernel/tools/types.d.ts +235 -25
- 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 +208 -31
- package/esm/src/kernel/turn-events.js +127 -9
- package/esm/src/kernel/types.d.ts +302 -161
- package/esm/src/kernel/util/base64.d.ts +2 -0
- package/esm/src/kernel/util/base64.js +2 -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 +1 -0
- package/esm/src/kernel/util/record.js +1 -0
- package/esm/src/observability/destinations.d.ts +5 -0
- package/esm/src/observability/destinations.js +7 -2
- package/esm/src/observability/jsonl.d.ts +2 -2
- package/esm/src/observability/jsonl.js +15 -22
- package/esm/src/observability/mod.d.ts +3 -3
- package/esm/src/observability/mod.js +2 -2
- package/esm/src/observability/openinference.d.ts +1 -1
- package/esm/src/observability/openinference.js +3 -3
- package/esm/src/observability/otlp.d.ts +3 -0
- package/esm/src/observability/otlp.js +3 -3
- package/esm/src/observability/phoenix.d.ts +1 -0
- package/esm/src/observability/policy.d.ts +3 -0
- package/esm/src/observability/policy.js +5 -1
- package/esm/src/observability/resolve-policy.js +11 -5
- package/esm/src/observability/spans.d.ts +8 -2
- package/esm/src/observability/spans.js +21 -5
- package/esm/src/observability/trace-catalog.d.ts +19 -2
- package/esm/src/observability/trace-catalog.js +130 -88
- package/esm/src/observability/trace-record.js +22 -17
- package/esm/src/observability/trace-schema.d.ts +3 -0
- package/esm/src/observability/trace-schema.js +1 -1
- package/esm/src/observability/trace-sink.d.ts +1 -0
- package/esm/src/observability/trace-sink.js +1 -1
- package/esm/src/observability/trace-span.d.ts +7 -1
- package/esm/src/observability/trace-span.js +3 -1
- package/esm/src/observability/trace.d.ts +2 -0
- package/esm/src/observability/trace.js +4 -2
- package/esm/src/observability/types.d.ts +35 -11
- package/esm/src/observability/types.js +1 -1
- package/esm/src/presets/google/speech-voices.d.ts +1 -0
- package/esm/src/presets/google-limits.d.ts +1 -0
- package/esm/src/presets/google.d.ts +27 -12
- package/esm/src/presets/google.js +34 -25
- package/esm/src/presets/local.d.ts +26 -0
- package/esm/src/presets/local.js +30 -0
- package/esm/src/presets/mod.d.ts +5 -4
- package/esm/src/presets/mod.js +4 -4
- package/esm/src/presets/openrouter.d.ts +14 -1
- package/esm/src/presets/openrouter.js +19 -1
- 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 +102 -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 +2 -0
- package/esm/src/providers/google/api-error.js +26 -18
- 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 +4 -4
- package/esm/src/providers/google/interactions/framing.d.ts +20 -8
- package/esm/src/providers/google/interactions/framing.js +85 -44
- package/esm/src/providers/google/interactions/steps.d.ts +5 -5
- package/esm/src/providers/google/interactions/steps.js +4 -4
- package/esm/src/providers/google/interactions/stream.d.ts +10 -11
- package/esm/src/providers/google/interactions/stream.js +33 -100
- package/esm/src/providers/google/live/framing.d.ts +15 -5
- package/esm/src/providers/google/live/framing.js +25 -25
- package/esm/src/providers/google/live/stream.d.ts +6 -44
- package/esm/src/providers/google/live/stream.js +4 -210
- package/esm/src/providers/google/urls.d.ts +1 -3
- package/esm/src/providers/google/urls.js +1 -3
- package/esm/src/providers/google/usage.js +2 -2
- 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 +28 -7
- package/esm/src/providers/mod.js +19 -3
- 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 +0 -9
- package/esm/src/providers/openrouter/image.js +0 -153
- 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 +2 -2
- package/esm/src/providers/openrouter/openai/compat.js +6 -6
- package/esm/src/providers/openrouter/openai/image-payload.d.ts +2 -2
- 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/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.js +2 -2
- 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 +2 -2
- package/esm/src/providers/shared/retry.d.ts +18 -0
- package/esm/src/providers/shared/retry.js +89 -0
- package/esm/src/providers/shared/sse.d.ts +0 -4
- package/esm/src/providers/shared/sse.js +50 -36
- package/esm/src/providers/shared/tool-args.d.ts +6 -7
- package/esm/src/providers/shared/tool-args.js +10 -6
- 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 +2 -2
- package/esm/src/providers/shared/upstream-tape.js +1 -1
- 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 +48 -16
- package/esm/src/providers/types.js +2 -1
- 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 +19 -1
- package/esm/src/surface/formats.js +68 -29
- package/esm/src/surface/mod.d.ts +4 -2
- package/esm/src/surface/mod.js +4 -2
- package/esm/src/surface/runtime.d.ts +4 -0
- package/esm/src/surface/runtime.js +2 -0
- package/esm/src/surface/tools.d.ts +2 -8
- package/esm/src/surface/tools.js +4 -22
- package/esm/src/surface/types.d.ts +6 -0
- package/package.json +5 -13
- package/esm/src/cli/commands/egress-compile.d.ts +0 -17
- package/esm/src/cli/commands/egress-compile.js +0 -25
- package/esm/src/guardrails/egress-policy.d.ts +0 -27
- package/esm/src/guardrails/egress-policy.js +0 -76
- package/esm/src/guardrails/egress-rules.d.ts +0 -54
- package/esm/src/guardrails/egress-rules.js +0 -49
- package/esm/src/guardrails/lexicon.d.ts +0 -30
- package/esm/src/guardrails/lexicon.js +0 -478
- package/esm/src/kernel/engine/media-probe/audio.d.ts +0 -7
- package/esm/src/kernel/engine/media-probe/audio.js +0 -342
- package/esm/src/kernel/engine/media-probe/bytes.d.ts +0 -6
- package/esm/src/kernel/engine/media-probe/bytes.js +0 -26
- package/esm/src/kernel/engine/media-probe/image.d.ts +0 -5
- package/esm/src/kernel/engine/media-probe/image.js +0 -171
- package/esm/src/kernel/engine/media-probe/iso-bmff.d.ts +0 -19
- package/esm/src/kernel/engine/media-probe/iso-bmff.js +0 -48
- package/esm/src/kernel/engine/media-probe/matroska.d.ts +0 -35
- package/esm/src/kernel/engine/media-probe/matroska.js +0 -226
- package/esm/src/kernel/engine/media-probe/mp4.d.ts +0 -22
- package/esm/src/kernel/engine/media-probe/mp4.js +0 -279
- package/esm/src/kernel/engine/media-probe/opus.d.ts +0 -4
- package/esm/src/kernel/engine/media-probe/opus.js +0 -23
- package/esm/src/kernel/engine/media-probe/pdf.d.ts +0 -5
- package/esm/src/kernel/engine/media-probe/pdf.js +0 -117
- package/esm/src/kernel/engine/media-probe/video.d.ts +0 -15
- package/esm/src/kernel/engine/media-probe/video.js +0 -49
- package/esm/src/presets/typesafe.d.ts +0 -2
- package/esm/src/presets/typesafe.js +0 -2
- package/esm/src/providers/create-provider.d.ts +0 -21
- package/esm/src/providers/create-provider.js +0 -90
- package/esm/src/providers/decision/usage.d.ts +0 -3
- package/esm/src/providers/decision/usage.js +0 -25
- package/esm/src/providers/google/interactions/mod.d.ts +0 -2
- package/esm/src/providers/google/interactions/mod.js +0 -2
- package/esm/src/providers/google/keys.d.ts +0 -20
- package/esm/src/providers/google/keys.js +0 -87
- package/esm/src/providers/google/live/mod.d.ts +0 -7
- package/esm/src/providers/google/live/mod.js +0 -7
- package/esm/src/providers/google/live/openapi-schema.d.ts +0 -1
- package/esm/src/providers/google/live/openapi-schema.js +0 -42
- package/esm/src/providers/google/live/session.d.ts +0 -14
- package/esm/src/providers/google/live/session.js +0 -150
- package/esm/src/providers/local/local.d.ts +0 -12
- package/esm/src/providers/local/local.js +0 -186
- package/esm/src/providers/local/mod.d.ts +0 -8
- package/esm/src/providers/local/mod.js +0 -8
- package/esm/src/providers/openrouter/cache-control.d.ts +0 -5
- package/esm/src/providers/openrouter/cache-control.js +0 -4
- package/esm/src/providers/openrouter/chat.d.ts +0 -64
- package/esm/src/providers/openrouter/chat.js +0 -490
- package/esm/src/providers/openrouter/openai/sdk-messages.d.ts +0 -10
- package/esm/src/providers/openrouter/openai/sdk-messages.js +0 -99
- package/esm/src/providers/openrouter/resolve-api-key.d.ts +0 -3
- package/esm/src/providers/openrouter/resolve-api-key.js +0 -8
- package/esm/src/providers/openrouter/speech.d.ts +0 -18
- package/esm/src/providers/openrouter/speech.js +0 -109
- package/esm/src/providers/probe.d.ts +0 -5
- package/esm/src/providers/probe.js +0 -15
- package/esm/src/providers/shared/builtin-wire.d.ts +0 -4
- package/esm/src/providers/shared/builtin-wire.js +0 -9
- package/esm/src/providers/shared/vault.d.ts +0 -13
- package/esm/src/providers/shared/vault.js +0 -41
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { BOUNDARIES, recordOf } from '../guardrails/boundaries.js';
|
|
3
|
+
import { DETECT_ACTIONS, DETECTORS } from '../guardrails/detectors.js';
|
|
4
|
+
import { LABEL_KEYS } from '../guardrails/labels.js';
|
|
5
|
+
import { BLOCKED_REPLY_ON_BLOCK } from '../guardrails/types.js';
|
|
6
|
+
import { COMPACTION_METERS, COMPACTION_TIMINGS, CONTEXT_SENDERS, CONTINUE_STOP_KINDS, LIVE_ACTIVITY_HANDLINGS, LIVE_END_SENSITIVITIES, LIVE_START_SENSITIVITIES, SPEECH_AUDIO_FORMATS, STEP_LIMIT_MODES, STREAM_MODES, THINKING_LEVELS, } from '../kernel/schema.js';
|
|
4
7
|
import { traceAttributesSchema } from '../observability/trace-schema.js';
|
|
5
8
|
const modelBinding = z.object({
|
|
6
|
-
protocol: z.
|
|
7
|
-
provider: z.
|
|
9
|
+
protocol: z.string(),
|
|
10
|
+
provider: z.string(),
|
|
8
11
|
apiId: z.string(),
|
|
12
|
+
options: z.record(z.string(), z.json()).optional(),
|
|
13
|
+
keySlot: z.string().optional(),
|
|
14
|
+
fallbackKeySlot: z.string().optional(),
|
|
9
15
|
efforts: z.record(z.string(), z.enum(THINKING_LEVELS)).optional(),
|
|
10
16
|
defaultEffort: z.string().optional(),
|
|
11
17
|
allowEffortSelect: z.boolean().optional(),
|
|
@@ -13,8 +19,6 @@ const modelBinding = z.object({
|
|
|
13
19
|
maxOutputTokens: z.number().optional(),
|
|
14
20
|
temperature: z.number().optional(),
|
|
15
21
|
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
22
|
compaction: z
|
|
19
23
|
.object({
|
|
20
24
|
maxTokens: z.number(),
|
|
@@ -25,10 +29,6 @@ const modelBinding = z.object({
|
|
|
25
29
|
meter: z.enum(COMPACTION_METERS).optional(),
|
|
26
30
|
})
|
|
27
31
|
.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
32
|
});
|
|
33
33
|
const outputs = z.object({
|
|
34
34
|
structured: z
|
|
@@ -39,35 +39,33 @@ const outputs = z.object({
|
|
|
39
39
|
])
|
|
40
40
|
.optional(),
|
|
41
41
|
streaming: z
|
|
42
|
-
.object({
|
|
42
|
+
.object({
|
|
43
|
+
mode: z.enum(STREAM_MODES).optional(),
|
|
44
|
+
streamThoughts: z.boolean().optional(),
|
|
45
|
+
})
|
|
43
46
|
.optional(),
|
|
44
47
|
});
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
const actions = z.object(recordOf(BOUNDARIES, () => z.enum(DETECT_ACTIONS)));
|
|
49
|
+
const detect = z.object(recordOf(DETECTORS, () => actions));
|
|
50
|
+
const hostDetector = z.object({
|
|
51
|
+
id: z.string(),
|
|
52
|
+
label: z.string(),
|
|
53
|
+
actions,
|
|
54
|
+
names: z.array(z.string()),
|
|
55
|
+
find: z.boolean(),
|
|
50
56
|
});
|
|
51
|
-
const
|
|
52
|
-
z.literal(false),
|
|
53
|
-
z.object({ hosts: z.array(z.string()), fromTools: z.boolean() }),
|
|
54
|
-
]);
|
|
57
|
+
const urlAllow = z.object({ hosts: z.array(z.string()), fromTools: z.boolean() });
|
|
55
58
|
const guardrails = z.object({
|
|
56
59
|
quota: z.object({ perDay: z.number() }).optional(),
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
boundary: z.boolean(),
|
|
65
|
-
injection: z.boolean(),
|
|
66
|
-
images: urlCheck,
|
|
67
|
-
links: urlCheck,
|
|
68
|
-
})
|
|
69
|
-
.nullable(),
|
|
60
|
+
detect,
|
|
61
|
+
patterns: z
|
|
62
|
+
.partialRecord(z.enum(DETECTORS), z.object({ theorem: z.boolean(), names: z.array(z.string()) }))
|
|
63
|
+
.optional(),
|
|
64
|
+
host: z.array(hostDetector).optional(),
|
|
65
|
+
allow: z.object({ ungiven_images: urlAllow, ungiven_links: urlAllow }),
|
|
66
|
+
blockedReply: z.object({ onBlock: z.enum(BLOCKED_REPLY_ON_BLOCK), maxRetries: z.number() }),
|
|
70
67
|
});
|
|
68
|
+
const scrubSwitch = z.union([z.boolean(), z.object({ theorem: z.boolean(), host: z.boolean() })]);
|
|
71
69
|
const observability = z.object({
|
|
72
70
|
record: z.boolean(),
|
|
73
71
|
writeTo: z.union([z.literal(false), z.string()]).optional(),
|
|
@@ -80,7 +78,7 @@ const observability = z.object({
|
|
|
80
78
|
guardrailDecisions: z.boolean(),
|
|
81
79
|
guardrailMatchPreview: z.boolean(),
|
|
82
80
|
}),
|
|
83
|
-
scrub: z.object({ sensitive:
|
|
81
|
+
scrub: z.object({ sensitive: scrubSwitch, injection: scrubSwitch, canary: scrubSwitch }),
|
|
84
82
|
resource: traceAttributesSchema,
|
|
85
83
|
retainForDays: z.number(),
|
|
86
84
|
rotateAfterMiB: z.number(),
|
|
@@ -95,6 +93,7 @@ const inputs = z.object({
|
|
|
95
93
|
maxTurnBytes: z.number().optional(),
|
|
96
94
|
limitsByMime: z.record(z.string(), z.number()).optional(),
|
|
97
95
|
slots: z.record(z.string(), z.array(z.string())).optional(),
|
|
96
|
+
context: z.object({ from: z.array(z.enum(CONTEXT_SENDERS)), maxChars: z.number() }).optional(),
|
|
98
97
|
});
|
|
99
98
|
const resumption = z.object({
|
|
100
99
|
allowContinue: z.array(z.enum(CONTINUE_STOP_KINDS)).optional(),
|
|
@@ -102,16 +101,24 @@ const resumption = z.object({
|
|
|
102
101
|
maxContinues: z.number().optional(),
|
|
103
102
|
});
|
|
104
103
|
const mediaTurnBehaviour = z.object({ resumption: resumption.optional() });
|
|
105
|
-
const tools = z.object({
|
|
104
|
+
const tools = z.object({
|
|
105
|
+
allow: z.array(z.string()),
|
|
106
|
+
page: z.array(z.string()),
|
|
107
|
+
t2Loader: z.string().optional(),
|
|
108
|
+
parallel: z.boolean().optional(),
|
|
109
|
+
});
|
|
106
110
|
const common = {
|
|
111
|
+
providerContinuation: z
|
|
112
|
+
.object({
|
|
113
|
+
history: z.enum(['host', 'stateless', 'provider']).optional(),
|
|
114
|
+
})
|
|
115
|
+
.optional(),
|
|
107
116
|
id: z.string(),
|
|
108
117
|
models: z.record(z.string(), modelBinding),
|
|
109
118
|
defaultModel: z.string(),
|
|
110
119
|
allowModelSelect: z.boolean().optional(),
|
|
111
120
|
maxSteps: z.number().optional(),
|
|
112
|
-
|
|
113
|
-
fallbackKey: z.string().regex(KEY_SLOT_NAME).optional(),
|
|
114
|
-
lexicon: z.partialRecord(z.enum(LEXICON_KEYS), z.string()),
|
|
121
|
+
labels: z.partialRecord(z.enum(LABEL_KEYS), z.string()),
|
|
115
122
|
guardrails: guardrails.optional(),
|
|
116
123
|
observability: observability.optional(),
|
|
117
124
|
};
|
|
@@ -136,7 +143,11 @@ const profileInterface = z.discriminatedUnion('type', [
|
|
|
136
143
|
inputs,
|
|
137
144
|
tools,
|
|
138
145
|
turnBehaviour: z
|
|
139
|
-
.object({
|
|
146
|
+
.object({
|
|
147
|
+
resumption: resumption.optional(),
|
|
148
|
+
allowSteering: z.boolean().optional(),
|
|
149
|
+
atStepLimit: z.enum(STEP_LIMIT_MODES).optional(),
|
|
150
|
+
})
|
|
140
151
|
.optional(),
|
|
141
152
|
canStop: z.literal(true),
|
|
142
153
|
allowSteering: z.boolean(),
|
|
@@ -175,6 +186,8 @@ const profileInterface = z.discriminatedUnion('type', [
|
|
|
175
186
|
outputs: outputs.optional(),
|
|
176
187
|
speech: z.object({
|
|
177
188
|
voice: z.string().optional(),
|
|
189
|
+
style: z.string().optional(),
|
|
190
|
+
speed: z.number().optional(),
|
|
178
191
|
format: z.enum(SPEECH_AUDIO_FORMATS).optional(),
|
|
179
192
|
}),
|
|
180
193
|
inputs,
|
|
@@ -185,6 +198,7 @@ const profileInterface = z.discriminatedUnion('type', [
|
|
|
185
198
|
...common,
|
|
186
199
|
type: z.literal('live'),
|
|
187
200
|
identity,
|
|
201
|
+
inputs: inputs.pick({ slots: true, context: true }).optional(),
|
|
188
202
|
live: z.object({
|
|
189
203
|
ingress: z
|
|
190
204
|
.object({
|
|
@@ -214,7 +228,7 @@ const profileInterface = z.discriminatedUnion('type', [
|
|
|
214
228
|
.object({ input: z.boolean().optional(), output: z.boolean().optional() })
|
|
215
229
|
.optional(),
|
|
216
230
|
}),
|
|
217
|
-
tools:
|
|
231
|
+
tools: tools.pick({ allow: true, page: true }),
|
|
218
232
|
turnBehaviour: z.object({ allowSteering: z.boolean().optional() }).optional(),
|
|
219
233
|
}),
|
|
220
234
|
]);
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import type { ToolGateAuth } from '../kernel/tools/gate-answer.js';
|
|
2
2
|
import type { ToolGate, TurnToolSnapshot } from '../kernel/tools/types.js';
|
|
3
|
+
import { type ReasoningPart } from '../kernel/turn-events.js';
|
|
3
4
|
import type { ModelId, ToolId, TurnEvent, TurnHistoryMessage } from '../kernel/types.js';
|
|
4
5
|
import type { TranscriptBlock, UserTurnDraft } from './types.js';
|
|
5
6
|
export type { ToolGateAuth };
|
|
7
|
+
/** A tool call held at a gate: the tool, its call id, and arguments. */
|
|
6
8
|
export type GatedToolContext = {
|
|
9
|
+
operationId?: string;
|
|
7
10
|
name: string;
|
|
8
11
|
callId: string;
|
|
9
12
|
arguments: Record<string, unknown>;
|
|
10
|
-
/** The call's `ToolCallRequest.
|
|
11
|
-
|
|
13
|
+
/** The call's `ToolCallRequest.reasoning`, for recording the call in history. */
|
|
14
|
+
reasoning?: ReasoningPart[];
|
|
12
15
|
gateKind: ToolGate['kind'];
|
|
13
16
|
permission?: ToolGate['permission'];
|
|
14
17
|
summary?: string;
|
|
15
18
|
/** Set on a sign-in gate. */
|
|
16
19
|
auth?: ToolGateAuth;
|
|
17
20
|
};
|
|
21
|
+
/** A tool call that paused the turn to ask the user: the tool, its call id, and arguments. */
|
|
18
22
|
export type AwaitingToolContext = {
|
|
19
23
|
name: string;
|
|
20
24
|
callId: string;
|
|
@@ -23,10 +27,10 @@ export type AwaitingToolContext = {
|
|
|
23
27
|
prompt: string;
|
|
24
28
|
options?: string[];
|
|
25
29
|
};
|
|
30
|
+
/** The state a client keeps between turns: portable history, native checkpoint, and permissions. */
|
|
26
31
|
export type InterfaceTurnSession = {
|
|
27
32
|
history: TurnHistoryMessage[];
|
|
28
|
-
|
|
29
|
-
previousInteractionId?: string;
|
|
33
|
+
providerState?: import('../kernel/checkpoint.js').ProviderCheckpoint;
|
|
30
34
|
sessionPermissions: string[];
|
|
31
35
|
/** Last turn `tokens.input` for compaction meter `timing: 'before'`. */
|
|
32
36
|
inputTokens?: number;
|
|
@@ -49,6 +53,7 @@ export type InterfaceTurnSession = {
|
|
|
49
53
|
/** Selected effort alias when the active model has `allowEffortSelect`. */
|
|
50
54
|
selectedEffort?: string;
|
|
51
55
|
};
|
|
56
|
+
/** A session with no history and no permissions. */
|
|
52
57
|
declare function emptyInterfaceTurnSession(): InterfaceTurnSession;
|
|
53
58
|
/**
|
|
54
59
|
* Every call still waiting on its gate, in the order the model made them. One
|
|
@@ -57,8 +62,10 @@ declare function emptyInterfaceTurnSession(): InterfaceTurnSession;
|
|
|
57
62
|
declare function gatedToolsFromEvents(events: readonly TurnEvent[]): GatedToolContext[];
|
|
58
63
|
/** The gate the user answers next: the first call still waiting. */
|
|
59
64
|
declare function gatedToolFromEvents(events: readonly TurnEvent[]): GatedToolContext | null;
|
|
65
|
+
/** The tool call a turn paused on to ask the user, or `null`. */
|
|
60
66
|
declare function awaitingFromEvents(events: readonly TurnEvent[]): AwaitingToolContext | null;
|
|
67
|
+
/** The session after the turn events are applied to it. */
|
|
61
68
|
declare function applyTurnEventsToSession(session: InterfaceTurnSession, events: readonly TurnEvent[]): InterfaceTurnSession;
|
|
62
|
-
/** Drops
|
|
69
|
+
/** Drops native provider state so the next turn sends the rebuilt history, not a stale handle. */
|
|
63
70
|
declare function branchInterfaceTurnSession(session: InterfaceTurnSession, blocks: readonly TranscriptBlock[]): InterfaceTurnSession;
|
|
64
71
|
export { applyTurnEventsToSession, awaitingFromEvents, branchInterfaceTurnSession, emptyInterfaceTurnSession, gatedToolFromEvents, gatedToolsFromEvents, };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { isAwaitingUserInput } from '../kernel/
|
|
1
|
+
import { isAwaitingUserInput } from '../kernel/turn-events.js';
|
|
2
2
|
import { findLast } from '../kernel/util/find-last.js';
|
|
3
3
|
import { historyFromTranscriptBlocks } from './history.js';
|
|
4
4
|
import { toolCallsOf } from './tool-calls.js';
|
|
5
5
|
import { promotedToolIdsFromEvents, toolSnapshotFromEvents } from './tool-invoke.js';
|
|
6
|
+
/** A session with no history and no permissions. */
|
|
6
7
|
function emptyInterfaceTurnSession() {
|
|
7
8
|
return {
|
|
8
9
|
history: [],
|
|
@@ -30,8 +31,9 @@ function gatedToolsFromEvents(events) {
|
|
|
30
31
|
{
|
|
31
32
|
name: call.name,
|
|
32
33
|
callId: call.callId,
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
...(call.operationId ? { operationId: call.operationId } : {}),
|
|
35
|
+
arguments: gate.preparedArguments ?? call.arguments,
|
|
36
|
+
...(call.reasoning ? { reasoning: call.reasoning } : {}),
|
|
35
37
|
gateKind: gate.kind,
|
|
36
38
|
permission: gate.permission,
|
|
37
39
|
summary: gate.summary,
|
|
@@ -52,6 +54,7 @@ function gatedToolsFromEvents(events) {
|
|
|
52
54
|
function gatedToolFromEvents(events) {
|
|
53
55
|
return gatedToolsFromEvents(events)[0] ?? null;
|
|
54
56
|
}
|
|
57
|
+
/** The tool call a turn paused on to ask the user, or `null`. */
|
|
55
58
|
function awaitingFromEvents(events) {
|
|
56
59
|
const call = findLast(toolCallsOf(events), (c) => c.state?.phase === 'complete');
|
|
57
60
|
if (call?.state?.phase !== 'complete')
|
|
@@ -68,17 +71,21 @@ function awaitingFromEvents(events) {
|
|
|
68
71
|
options: output.options,
|
|
69
72
|
};
|
|
70
73
|
}
|
|
74
|
+
/** The session after the turn events are applied to it. */
|
|
71
75
|
function applyTurnEventsToSession(session, events) {
|
|
72
|
-
let
|
|
76
|
+
let providerState = session.providerState;
|
|
73
77
|
let inputTokens = session.inputTokens;
|
|
74
78
|
let historyTokens = session.historyTokens;
|
|
75
79
|
let toolSnapshot = session.toolSnapshot;
|
|
76
80
|
let promotedToolIds = session.promotedToolIds;
|
|
77
81
|
for (const event of events) {
|
|
78
|
-
if (
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
+
if (event.type === 'provider_checkpoint')
|
|
83
|
+
providerState = event.providerState;
|
|
84
|
+
if (event.type === 'done' && event.providerState)
|
|
85
|
+
providerState = event.providerState;
|
|
86
|
+
if (event.type === 'provider_warning')
|
|
87
|
+
providerState = undefined;
|
|
88
|
+
// why: A call's own input size, not the turn's sum (`done.tokens`).
|
|
82
89
|
if (event.type === 'tokens' && event.tokens.input) {
|
|
83
90
|
inputTokens = event.tokens.input;
|
|
84
91
|
}
|
|
@@ -97,7 +104,7 @@ function applyTurnEventsToSession(session, events) {
|
|
|
97
104
|
const gated = gatedToolFromEvents(events);
|
|
98
105
|
return {
|
|
99
106
|
...session,
|
|
100
|
-
|
|
107
|
+
providerState,
|
|
101
108
|
inputTokens,
|
|
102
109
|
historyTokens,
|
|
103
110
|
gatedTool: gated,
|
|
@@ -106,7 +113,7 @@ function applyTurnEventsToSession(session, events) {
|
|
|
106
113
|
promotedToolIds,
|
|
107
114
|
};
|
|
108
115
|
}
|
|
109
|
-
/** Drops
|
|
116
|
+
/** Drops native provider state so the next turn sends the rebuilt history, not a stale handle. */
|
|
110
117
|
function branchInterfaceTurnSession(session, blocks) {
|
|
111
118
|
return {
|
|
112
119
|
...emptyInterfaceTurnSession(),
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type LabelOverrides } from '../guardrails/labels.js';
|
|
2
|
+
import type { TurnStop } from '../kernel/types.js';
|
|
3
|
+
import type { TranscriptBlock } from './types.js';
|
|
4
|
+
/** The stops that end a reply short of a whole answer. Each is worded by its `stop.<kind>` label. */
|
|
5
|
+
export declare const WORDED_STOP_KINDS: readonly ["cancelled", "interrupted", "length", "filtered", "provider_error", "stream_incomplete", "step_limit"];
|
|
6
|
+
/** One of {@linkcode WORDED_STOP_KINDS}. */
|
|
7
|
+
export type WordedStopKind = (typeof WORDED_STOP_KINDS)[number];
|
|
8
|
+
/**
|
|
9
|
+
* Why a turn ended short, in the person's words: its `stop.<kind>` label, the profile's own when it
|
|
10
|
+
* sets one. `undefined` when the turn ended whole, or when an error in `blocks` (the turn's
|
|
11
|
+
* transcript blocks) already says why.
|
|
12
|
+
*/
|
|
13
|
+
export declare function stopText(stop: TurnStop | undefined, blocks: readonly TranscriptBlock[], labels?: LabelOverrides): string | undefined;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { labelText } from '../guardrails/labels.js';
|
|
2
|
+
/** The stops that end a reply short of a whole answer. Each is worded by its `stop.<kind>` label. */
|
|
3
|
+
export const WORDED_STOP_KINDS = [
|
|
4
|
+
'cancelled',
|
|
5
|
+
'interrupted',
|
|
6
|
+
'length',
|
|
7
|
+
'filtered',
|
|
8
|
+
'provider_error',
|
|
9
|
+
'stream_incomplete',
|
|
10
|
+
'step_limit',
|
|
11
|
+
];
|
|
12
|
+
const WORDED = new Set(WORDED_STOP_KINDS);
|
|
13
|
+
function isWorded(kind) {
|
|
14
|
+
return WORDED.has(kind);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Why a turn ended short, in the person's words: its `stop.<kind>` label, the profile's own when it
|
|
18
|
+
* sets one. `undefined` when the turn ended whole, or when an error in `blocks` (the turn's
|
|
19
|
+
* transcript blocks) already says why.
|
|
20
|
+
*/
|
|
21
|
+
export function stopText(stop, blocks, labels) {
|
|
22
|
+
if (!stop || !isWorded(stop.kind))
|
|
23
|
+
return undefined;
|
|
24
|
+
if (blocks.some((block) => block.kind === 'error'))
|
|
25
|
+
return undefined;
|
|
26
|
+
const key = `stop.${stop.kind}`;
|
|
27
|
+
return labelText(key, {}, labels);
|
|
28
|
+
}
|
|
@@ -5,9 +5,14 @@ import type { ToolCall } from './types.js';
|
|
|
5
5
|
* broken stream.
|
|
6
6
|
*/
|
|
7
7
|
declare function applyToolEvent(call: ToolCall | undefined, tool: ToolCallEvent): ToolCall;
|
|
8
|
+
/**
|
|
9
|
+
* A call the model is still writing, with the next piece of its draft added. The call that arrives
|
|
10
|
+
* whole replaces it (`applyToolEvent` builds the call from the request alone).
|
|
11
|
+
*/
|
|
12
|
+
declare function applyToolDraft(call: ToolCall | undefined, draft: TurnEventOf<'tool_draft'>): ToolCall;
|
|
8
13
|
/** Every call in `events`, in the order the model made them. */
|
|
9
14
|
declare function toolCallsOf(events: readonly TurnEvent[]): ToolCall[];
|
|
10
|
-
/** The arguments
|
|
15
|
+
/** The arguments shown for approval, or the user's edit, or the model's original call. */
|
|
11
16
|
declare function toolCallRanWith(call: ToolCall): Record<string, unknown>;
|
|
12
17
|
/** A tool event that settles its call: the call completed or failed. */
|
|
13
18
|
type SettledToolCallEvent = TurnEventOf<'tool'> & {
|
|
@@ -15,6 +20,13 @@ type SettledToolCallEvent = TurnEventOf<'tool'> & {
|
|
|
15
20
|
phase: 'complete' | 'error';
|
|
16
21
|
}>;
|
|
17
22
|
};
|
|
23
|
+
/** True when the event is the complete or error event of the tool call with this id. */
|
|
18
24
|
declare function settlesToolCall(event: TurnEvent, callId: string): event is SettledToolCallEvent;
|
|
25
|
+
/**
|
|
26
|
+
* A call's arguments as far as the model has written them: the whole arguments once the call has
|
|
27
|
+
* arrived, else what `partialJsonObject` reads of its draft. For a preview: a field still being
|
|
28
|
+
* written is not its final value.
|
|
29
|
+
*/
|
|
30
|
+
declare function argumentsSoFar(call: ToolCall): Record<string, unknown>;
|
|
19
31
|
export type { SettledToolCallEvent };
|
|
20
|
-
export { applyToolEvent, settlesToolCall, toolCallRanWith, toolCallsOf };
|
|
32
|
+
export { applyToolDraft, applyToolEvent, argumentsSoFar, settlesToolCall, toolCallRanWith, toolCallsOf, };
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
// The model's raw call is the one owner of a call's arguments. The transcript, the interface
|
|
1
|
+
// invariant: The model's raw call is the one owner of a call's arguments. The transcript, the interface
|
|
2
2
|
// session and history read calls through this fold only.
|
|
3
3
|
import { TheoremError } from '../guardrails/error.js';
|
|
4
|
+
import { labelText } from '../guardrails/labels.js';
|
|
5
|
+
import { partialJsonObject } from '../kernel/util/partial-json.js';
|
|
4
6
|
/**
|
|
5
7
|
* The raw call comes first for every call (`turnEventSchema`); a phase for a call never made is a
|
|
6
8
|
* broken stream.
|
|
@@ -10,8 +12,9 @@ function applyToolEvent(call, tool) {
|
|
|
10
12
|
return {
|
|
11
13
|
name: tool.name,
|
|
12
14
|
callId: tool.callId,
|
|
15
|
+
...(tool.operationId ? { operationId: tool.operationId } : {}),
|
|
13
16
|
arguments: tool.arguments,
|
|
14
|
-
...(tool.
|
|
17
|
+
...(tool.reasoning ? { reasoning: tool.reasoning } : {}),
|
|
15
18
|
...(tool.stepId ? { stepId: tool.stepId } : {}),
|
|
16
19
|
artifacts: [],
|
|
17
20
|
};
|
|
@@ -19,10 +22,13 @@ function applyToolEvent(call, tool) {
|
|
|
19
22
|
if (call === undefined) {
|
|
20
23
|
throw new TheoremError('bad_response', `Tool event '${tool.phase}' for call '${tool.callId}' arrived before the call.`);
|
|
21
24
|
}
|
|
25
|
+
if (call.callId !== tool.callId || call.name !== tool.name) {
|
|
26
|
+
throw new TheoremError('bad_response', labelText('error.bad_response'));
|
|
27
|
+
}
|
|
22
28
|
switch (tool.phase) {
|
|
23
29
|
case 'running': {
|
|
24
|
-
// A resumed call runs again: it is open until its next settle.
|
|
25
|
-
const { endedAt: _settled, ...open } = call;
|
|
30
|
+
// why: A resumed call runs again: it is open until its next settle.
|
|
31
|
+
const { endedAt: _settled, outputDraft: _drafted, ...open } = call;
|
|
26
32
|
return {
|
|
27
33
|
...open,
|
|
28
34
|
state: tool,
|
|
@@ -33,41 +39,89 @@ function applyToolEvent(call, tool) {
|
|
|
33
39
|
}
|
|
34
40
|
case 'complete':
|
|
35
41
|
return {
|
|
36
|
-
...call,
|
|
42
|
+
...settled(call),
|
|
37
43
|
state: tool,
|
|
38
44
|
endedAt: tool.at,
|
|
39
45
|
...(tool.activityPast ? { activityPast: tool.activityPast } : {}),
|
|
40
46
|
};
|
|
41
47
|
case 'error':
|
|
48
|
+
return {
|
|
49
|
+
...settled(call),
|
|
50
|
+
state: tool,
|
|
51
|
+
endedAt: tool.at,
|
|
52
|
+
...(tool.activityPast ? { activityPast: tool.activityPast } : {}),
|
|
53
|
+
};
|
|
42
54
|
case 'cancel':
|
|
43
55
|
case 'gate':
|
|
44
|
-
return { ...call, state: tool, endedAt: tool.at };
|
|
56
|
+
return { ...settled(call), state: tool, endedAt: tool.at };
|
|
57
|
+
case 'draft':
|
|
58
|
+
return { ...call, outputDraft: (call.outputDraft ?? '') + tool.text };
|
|
45
59
|
case 'artifact':
|
|
46
60
|
return { ...call, artifacts: [...call.artifacts, tool.artifact] };
|
|
61
|
+
case 'dispatch':
|
|
47
62
|
case 'progress':
|
|
48
63
|
case 'trace':
|
|
49
64
|
case 'warning':
|
|
50
65
|
return call;
|
|
51
66
|
}
|
|
52
67
|
}
|
|
68
|
+
/** `call` without the preview of its output: it settled, and its output is whole. */
|
|
69
|
+
function settled(call) {
|
|
70
|
+
const { outputDraft: _drafted, ...rest } = call;
|
|
71
|
+
return rest;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* A call the model is still writing, with the next piece of its draft added. The call that arrives
|
|
75
|
+
* whole replaces it (`applyToolEvent` builds the call from the request alone).
|
|
76
|
+
*/
|
|
77
|
+
function applyToolDraft(call, draft) {
|
|
78
|
+
return {
|
|
79
|
+
arguments: {},
|
|
80
|
+
artifacts: [],
|
|
81
|
+
...call,
|
|
82
|
+
name: draft.name,
|
|
83
|
+
callId: draft.callId,
|
|
84
|
+
draft: (call?.draft ?? '') + draft.text,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
53
87
|
/** Every call in `events`, in the order the model made them. */
|
|
54
88
|
function toolCallsOf(events) {
|
|
55
89
|
const calls = new Map();
|
|
56
90
|
for (const event of events) {
|
|
91
|
+
if (event.type === 'tool_draft') {
|
|
92
|
+
calls.set(event.callId, applyToolDraft(calls.get(event.callId), event));
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
57
95
|
if (event.type !== 'tool')
|
|
58
96
|
continue;
|
|
59
97
|
const { tool } = event;
|
|
60
|
-
|
|
98
|
+
const key = tool.operationId ?? tool.callId;
|
|
99
|
+
// why: The draft is keyed by the model's callId; the call that replaces it may carry an operation ID.
|
|
100
|
+
if (tool.phase === undefined && calls.get(tool.callId)?.draft !== undefined) {
|
|
101
|
+
calls.delete(tool.callId);
|
|
102
|
+
}
|
|
103
|
+
calls.set(key, applyToolEvent(calls.get(key), tool));
|
|
61
104
|
}
|
|
62
105
|
return [...calls.values()];
|
|
63
106
|
}
|
|
64
|
-
/** The arguments
|
|
107
|
+
/** The arguments shown for approval, or the user's edit, or the model's original call. */
|
|
65
108
|
function toolCallRanWith(call) {
|
|
66
|
-
return call.
|
|
109
|
+
return ((call.state?.phase === 'gate' ? call.state.gate.preparedArguments : undefined) ??
|
|
110
|
+
call.edited?.to ??
|
|
111
|
+
call.arguments);
|
|
67
112
|
}
|
|
113
|
+
/** True when the event is the complete or error event of the tool call with this id. */
|
|
68
114
|
function settlesToolCall(event, callId) {
|
|
69
115
|
if (event.type !== 'tool' || event.tool.callId !== callId)
|
|
70
116
|
return false;
|
|
71
117
|
return event.tool.phase === 'complete' || event.tool.phase === 'error';
|
|
72
118
|
}
|
|
73
|
-
|
|
119
|
+
/**
|
|
120
|
+
* A call's arguments as far as the model has written them: the whole arguments once the call has
|
|
121
|
+
* arrived, else what `partialJsonObject` reads of its draft. For a preview: a field still being
|
|
122
|
+
* written is not its final value.
|
|
123
|
+
*/
|
|
124
|
+
function argumentsSoFar(call) {
|
|
125
|
+
return call.draft === undefined ? call.arguments : partialJsonObject(call.draft);
|
|
126
|
+
}
|
|
127
|
+
export { applyToolDraft, applyToolEvent, argumentsSoFar, settlesToolCall, toolCallRanWith, toolCallsOf, };
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { ToolId, TurnEvent, TurnToolSnapshot } from '../kernel/types.js';
|
|
2
|
+
/** The ids of the tools a turn loaded, read from the loaded ids in its completed tool events. */
|
|
2
3
|
declare function promotedToolIdsFromEvents(events: readonly TurnEvent[]): ToolId[];
|
|
4
|
+
/** The tool snapshot on the last `done` event that carries one, which only a turn stopped on a tool or gate does. */
|
|
3
5
|
declare function toolSnapshotFromEvents(events: readonly TurnEvent[]): TurnToolSnapshot | undefined;
|
|
4
6
|
export { promotedToolIdsFromEvents, toolSnapshotFromEvents };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { extractLoadedIds } from '../kernel/tools/resolve.js';
|
|
2
2
|
import { findLast } from '../kernel/util/find-last.js';
|
|
3
|
+
/** The ids of the tools a turn loaded, read from the loaded ids in its completed tool events. */
|
|
3
4
|
function promotedToolIdsFromEvents(events) {
|
|
4
5
|
const ids = new Set();
|
|
5
6
|
for (const event of events) {
|
|
@@ -12,8 +13,9 @@ function promotedToolIdsFromEvents(events) {
|
|
|
12
13
|
}
|
|
13
14
|
return [...ids];
|
|
14
15
|
}
|
|
16
|
+
/** The tool snapshot on the last `done` event that carries one, which only a turn stopped on a tool or gate does. */
|
|
15
17
|
function toolSnapshotFromEvents(events) {
|
|
16
|
-
// Only a `done` that stopped on `tool` or `gate` carries one (`DoneEvent`).
|
|
18
|
+
// why: Only a `done` that stopped on `tool` or `gate` carries one (`DoneEvent`).
|
|
17
19
|
const done = findLast(events, (event) => event.type === 'done' && event.tools !== undefined);
|
|
18
20
|
return done?.type === 'done' ? done.tools : undefined;
|
|
19
21
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
/** A media file a tool's output points to: its URL, MIME type and, when the output carried one, a smaller preview URL. */
|
|
1
2
|
export type PromotedToolMedia = {
|
|
2
3
|
url: string;
|
|
3
4
|
mimeType: string;
|
|
4
5
|
/** A smaller copy of the same file, when the output also carried one. */
|
|
5
6
|
previewUrl?: string;
|
|
6
7
|
};
|
|
8
|
+
/** Reads an http(s) URL string as promoted media, with the MIME type taken from its file extension; returns undefined for an empty or invalid string, another scheme, or an extension it does not know. */
|
|
7
9
|
export declare function promotedMediaFromUrlString(raw: string): PromotedToolMedia | undefined;
|
|
8
10
|
/** One file at several sizes is promoted once: `url` its largest copy, `previewUrl` its smallest. */
|
|
9
11
|
export declare function collectPromotedMediaFromToolOutput(output: unknown): PromotedToolMedia[];
|
|
@@ -25,6 +25,7 @@ function mimeForPathname(pathname) {
|
|
|
25
25
|
const ext = base.slice(dot + 1).toLowerCase();
|
|
26
26
|
return EXT_MIME[ext];
|
|
27
27
|
}
|
|
28
|
+
/** Reads an http(s) URL string as promoted media, with the MIME type taken from its file extension; returns undefined for an empty or invalid string, another scheme, or an extension it does not know. */
|
|
28
29
|
export function promotedMediaFromUrlString(raw) {
|
|
29
30
|
const trimmed = raw.trim();
|
|
30
31
|
if (trimmed.length === 0)
|
|
@@ -53,7 +54,7 @@ const MEDIAWIKI_THUMB = /^(.*)\/thumb(\/.+\/([^/]+))\/(\d+)px-\3(?:\.[a-z0-9]+)?
|
|
|
53
54
|
function mediaAsset(url) {
|
|
54
55
|
const parsed = new URL(url);
|
|
55
56
|
const site = parsed.hostname.split('.').slice(-2).join('.');
|
|
56
|
-
// Tracking parameters never change the file; other query parameters may.
|
|
57
|
+
// why: Tracking parameters never change the file; other query parameters may.
|
|
57
58
|
for (const name of [...parsed.searchParams.keys()]) {
|
|
58
59
|
if (name.startsWith('utm_'))
|
|
59
60
|
parsed.searchParams.delete(name);
|