@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,13 +1,16 @@
|
|
|
1
1
|
import type { ApiKeyCredential, BearerCredential } from '../auth/types.js';
|
|
2
2
|
import type { ToolPermission } from '../schema.js';
|
|
3
3
|
import type { ToolAuthChallenge } from '../turn-events.js';
|
|
4
|
-
import type { InvokeToolResume } from './types.js';
|
|
4
|
+
import type { InvokeToolResume, PageAnswer } from './types.js';
|
|
5
5
|
/** What a sign-in gate asks for, minus the challenge's OAuth details. */
|
|
6
6
|
export type ToolGateAuth = Pick<ToolAuthChallenge, 'slot' | 'authType' | 'service'>;
|
|
7
7
|
/** A bad value is refused when `owner` is built, not when a gate expires. */
|
|
8
8
|
export declare function resolveGateTtlMs(owner: string, gateTtlMs: number | undefined): number;
|
|
9
|
+
/** True when the gate has waited as long as its time limit. */
|
|
9
10
|
export declare function gateExpired(createdAt: number, now: number, ttlMs: number): boolean;
|
|
11
|
+
/** How a user can answer a tool gate: approve it, deny it, or walk away. */
|
|
10
12
|
export declare const GATE_DECISIONS: readonly ["approve", "deny", "abandon"];
|
|
13
|
+
/** One of {@linkcode GATE_DECISIONS}. */
|
|
11
14
|
export type GateDecision = (typeof GATE_DECISIONS)[number];
|
|
12
15
|
/** `edited.from` is the input the model proposed. */
|
|
13
16
|
export type GateAnswer = {
|
|
@@ -18,10 +21,11 @@ export type GateAnswer = {
|
|
|
18
21
|
} | {
|
|
19
22
|
decision: 'deny' | 'abandon';
|
|
20
23
|
};
|
|
21
|
-
/** `signIn` when the gate answered is a sign-in, so
|
|
24
|
+
/** `signIn` when the gate answered is a sign-in, so the model is told the person signed in or why not. */
|
|
22
25
|
export declare function resumeForAnswer(answer: GateAnswer, signIn?: boolean): InvokeToolResume;
|
|
23
26
|
/** Only a `session_consent` approval lasts the session; any other gate is approved for this call only. */
|
|
24
27
|
export declare function sessionPermissionsAfterApproval(sessionPermissions: readonly string[], toolName: string, permission?: ToolPermission): string[];
|
|
28
|
+
/** The user's answer to a held tool call. */
|
|
25
29
|
export type GateAnswerRequest = {
|
|
26
30
|
callId: string;
|
|
27
31
|
decision: GateDecision;
|
|
@@ -29,14 +33,19 @@ export type GateAnswerRequest = {
|
|
|
29
33
|
input?: unknown;
|
|
30
34
|
/** The key typed at a sign-in gate; approvals only. */
|
|
31
35
|
secret?: string;
|
|
36
|
+
/** The page's answer at a `page` gate; approvals only. */
|
|
37
|
+
page?: PageAnswer;
|
|
32
38
|
};
|
|
39
|
+
/** A tool call held at a gate, with what answering it needs. */
|
|
33
40
|
export type HeldGatedCall = {
|
|
41
|
+
gateKind?: import('../schema.js').ToolGateKind;
|
|
34
42
|
name: string;
|
|
35
43
|
arguments: Record<string, unknown>;
|
|
36
44
|
permission?: ToolPermission;
|
|
37
45
|
/** Absent on any gate other than sign-in. */
|
|
38
46
|
auth?: ToolGateAuth;
|
|
39
47
|
};
|
|
48
|
+
/** A tool call's gate once answered: how the call resumes and the permissions after. */
|
|
40
49
|
export type AnsweredGate = {
|
|
41
50
|
resume: InvokeToolResume;
|
|
42
51
|
input: unknown;
|
|
@@ -45,6 +54,7 @@ export type AnsweredGate = {
|
|
|
45
54
|
slot: string;
|
|
46
55
|
credential: BearerCredential | ApiKeyCredential;
|
|
47
56
|
};
|
|
57
|
+
page?: PageAnswer;
|
|
48
58
|
};
|
|
49
59
|
/** Shared by `createTheoremHandler` and `runSession`. A refused key throws, so the gate keeps waiting for another. */
|
|
50
60
|
export declare function answerGatedCall(request: GateAnswerRequest, call: HeldGatedCall, sessionPermissions: readonly string[]): AnsweredGate;
|
|
@@ -9,14 +9,20 @@ export function resolveGateTtlMs(owner, gateTtlMs) {
|
|
|
9
9
|
}
|
|
10
10
|
return ttl;
|
|
11
11
|
}
|
|
12
|
+
/** True when the gate has waited as long as its time limit. */
|
|
12
13
|
export function gateExpired(createdAt, now, ttlMs) {
|
|
13
14
|
return now - createdAt >= ttlMs;
|
|
14
15
|
}
|
|
16
|
+
/** How a user can answer a tool gate: approve it, deny it, or walk away. */
|
|
15
17
|
export const GATE_DECISIONS = ['approve', 'deny', 'abandon'];
|
|
16
|
-
/** `signIn` when the gate answered is a sign-in, so
|
|
18
|
+
/** `signIn` when the gate answered is a sign-in, so the model is told the person signed in or why not. */
|
|
17
19
|
export function resumeForAnswer(answer, signIn = false) {
|
|
18
20
|
if (answer.decision === 'approve') {
|
|
19
|
-
return
|
|
21
|
+
return {
|
|
22
|
+
granted: true,
|
|
23
|
+
...(answer.edited ? { edited: answer.edited } : {}),
|
|
24
|
+
...(signIn ? { signIn } : {}),
|
|
25
|
+
};
|
|
20
26
|
}
|
|
21
27
|
return {
|
|
22
28
|
granted: false,
|
|
@@ -33,9 +39,10 @@ export function sessionPermissionsAfterApproval(sessionPermissions, toolName, pe
|
|
|
33
39
|
}
|
|
34
40
|
/** Shared by `createTheoremHandler` and `runSession`. A refused key throws, so the gate keeps waiting for another. */
|
|
35
41
|
export function answerGatedCall(request, call, sessionPermissions) {
|
|
36
|
-
const { callId, decision, input, secret } = request;
|
|
37
|
-
|
|
38
|
-
|
|
42
|
+
const { callId, decision, input, secret, page } = request;
|
|
43
|
+
const approvalOnly = input !== undefined || secret !== undefined || page !== undefined;
|
|
44
|
+
if (approvalOnly && decision !== 'approve') {
|
|
45
|
+
throw new TheoremError('request', `only an approval takes edited input, a secret, or a page answer (call ${callId})`);
|
|
39
46
|
}
|
|
40
47
|
if (decision !== 'approve') {
|
|
41
48
|
return {
|
|
@@ -46,9 +53,13 @@ export function answerGatedCall(request, call, sessionPermissions) {
|
|
|
46
53
|
}
|
|
47
54
|
const typed = secret === undefined ? undefined : credentialForSignInGate(call.auth, secret);
|
|
48
55
|
return {
|
|
49
|
-
resume:
|
|
56
|
+
resume: {
|
|
57
|
+
...resumeForAnswer(input === undefined ? { decision } : { decision, edited: { from: call.arguments } }, call.auth !== undefined),
|
|
58
|
+
...(call.gateKind ? { gateKind: call.gateKind } : {}),
|
|
59
|
+
},
|
|
50
60
|
input: input ?? call.arguments,
|
|
51
61
|
sessionPermissions: sessionPermissionsAfterApproval(sessionPermissions, call.name, call.permission),
|
|
52
62
|
...(typed ? { typed } : {}),
|
|
63
|
+
...(page ? { page } : {}),
|
|
53
64
|
};
|
|
54
65
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ToolBoundary } from '../../guardrails/boundaries.js';
|
|
2
|
+
import type { Provenance, ResolvedGuardrailPolicy } from '../../guardrails/types.js';
|
|
3
|
+
import type { TurnEvent } from '../types.js';
|
|
4
|
+
import { type ToolCallBase } from './events.js';
|
|
5
|
+
import type { ToolStreamEvent } from './types.js';
|
|
6
|
+
/** A handler's event as the tool phase it is, unchecked. */
|
|
7
|
+
export declare function yieldHandlerSideEvent(base: ToolCallBase, event: Exclude<ToolStreamEvent, {
|
|
8
|
+
kind: 'complete';
|
|
9
|
+
}>): Generator<TurnEvent>;
|
|
10
|
+
/** What a handler's events are read against: what its output is read against at the end. */
|
|
11
|
+
export interface HandlerEventChecks {
|
|
12
|
+
profileId: string;
|
|
13
|
+
provenance: Provenance;
|
|
14
|
+
policy: ResolvedGuardrailPolicy;
|
|
15
|
+
/** `tool_output_<kind>`. */
|
|
16
|
+
boundary: ToolBoundary;
|
|
17
|
+
/** `tool_shown_<kind>`: what its artifacts and trace are read at. */
|
|
18
|
+
shown: ToolBoundary;
|
|
19
|
+
callableTools: readonly string[];
|
|
20
|
+
/** Whether the host sees the handler's drafts (`outputs.streaming.mode` `sse`). */
|
|
21
|
+
drafts: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A handler's events before its output, as the host may see them; an HTTP tool's body as it arrives
|
|
25
|
+
* comes through here as drafts too. Its `progress` is read whole at
|
|
26
|
+
* the output's boundary: one a check stops is not sent, and its guardrail event is. Its drafts are
|
|
27
|
+
* read piece by piece there, as one text: a match stops the rest of them, and the output's own
|
|
28
|
+
* check reports it.
|
|
29
|
+
*/
|
|
30
|
+
export declare class HandlerEvents {
|
|
31
|
+
private readonly base;
|
|
32
|
+
private readonly checks;
|
|
33
|
+
private readonly drafts;
|
|
34
|
+
constructor(base: ToolCallBase, checks: HandlerEventChecks | undefined);
|
|
35
|
+
show(event: Exclude<ToolStreamEvent, {
|
|
36
|
+
kind: 'complete';
|
|
37
|
+
}>): AsyncGenerator<TurnEvent>;
|
|
38
|
+
/** The drafts' tail the gate still holds, once the handler has returned. */
|
|
39
|
+
end(): Generator<TurnEvent>;
|
|
40
|
+
private draft;
|
|
41
|
+
/** `value` as the person is shown it, read at `tool_shown_<kind>`; one a match blocks is not sent. */
|
|
42
|
+
private shown;
|
|
43
|
+
/** Whether a check at the output's boundary stops `data`; a flag lets it through unreported. */
|
|
44
|
+
private progressStops;
|
|
45
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { createDraftGate, DraftReader, } from '../../guardrails/progressive-yield.js';
|
|
2
|
+
import { guardShownValue, guardToolResult } from '../../guardrails/tool-result.js';
|
|
3
|
+
import { toolEvent } from './events.js';
|
|
4
|
+
/** A handler's event as the tool phase it is, unchecked. */
|
|
5
|
+
export function* yieldHandlerSideEvent(base, event) {
|
|
6
|
+
if (event.kind === 'progress') {
|
|
7
|
+
yield toolEvent(base, { phase: 'progress', data: event.data });
|
|
8
|
+
}
|
|
9
|
+
else if (event.kind === 'draft') {
|
|
10
|
+
yield toolEvent(base, { phase: 'draft', text: event.text });
|
|
11
|
+
}
|
|
12
|
+
else if (event.kind === 'trace') {
|
|
13
|
+
yield toolEvent(base, { phase: 'trace', step: event.step });
|
|
14
|
+
}
|
|
15
|
+
else if (event.kind === 'artifact') {
|
|
16
|
+
yield toolEvent(base, { phase: 'artifact', artifact: event.artifact });
|
|
17
|
+
}
|
|
18
|
+
else if (event.kind === 'warning') {
|
|
19
|
+
yield toolEvent(base, { phase: 'warning', warning: event.warning });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A handler's events before its output, as the host may see them; an HTTP tool's body as it arrives
|
|
24
|
+
* comes through here as drafts too. Its `progress` is read whole at
|
|
25
|
+
* the output's boundary: one a check stops is not sent, and its guardrail event is. Its drafts are
|
|
26
|
+
* read piece by piece there, as one text: a match stops the rest of them, and the output's own
|
|
27
|
+
* check reports it.
|
|
28
|
+
*/
|
|
29
|
+
export class HandlerEvents {
|
|
30
|
+
base;
|
|
31
|
+
checks;
|
|
32
|
+
drafts;
|
|
33
|
+
constructor(base, checks) {
|
|
34
|
+
this.base = base;
|
|
35
|
+
this.checks = checks;
|
|
36
|
+
if (checks?.drafts)
|
|
37
|
+
this.drafts = new DraftReader(() => draftGate(checks));
|
|
38
|
+
}
|
|
39
|
+
async *show(event) {
|
|
40
|
+
if (event.kind === 'draft') {
|
|
41
|
+
yield* this.draft(event.text);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (event.kind === 'progress' && (yield* this.progressStops(event.data)))
|
|
45
|
+
return;
|
|
46
|
+
if (event.kind === 'artifact') {
|
|
47
|
+
const artifact = yield* this.shown(event.artifact);
|
|
48
|
+
if (artifact.shown)
|
|
49
|
+
yield* yieldHandlerSideEvent(this.base, { ...event, artifact: artifact.value });
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (event.kind === 'trace') {
|
|
53
|
+
const step = yield* this.shown(event.step);
|
|
54
|
+
if (step.shown) {
|
|
55
|
+
yield* yieldHandlerSideEvent(this.base, {
|
|
56
|
+
...event,
|
|
57
|
+
step: step.value,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
yield* yieldHandlerSideEvent(this.base, event);
|
|
63
|
+
}
|
|
64
|
+
/** The drafts' tail the gate still holds, once the handler has returned. */
|
|
65
|
+
*end() {
|
|
66
|
+
const text = this.drafts?.end();
|
|
67
|
+
if (text)
|
|
68
|
+
yield toolEvent(this.base, { phase: 'draft', text });
|
|
69
|
+
}
|
|
70
|
+
async *draft(piece) {
|
|
71
|
+
const text = await this.drafts?.read(piece);
|
|
72
|
+
if (text)
|
|
73
|
+
yield toolEvent(this.base, { phase: 'draft', text });
|
|
74
|
+
}
|
|
75
|
+
/** `value` as the person is shown it, read at `tool_shown_<kind>`; one a match blocks is not sent. */
|
|
76
|
+
*shown(value) {
|
|
77
|
+
const checks = this.checks;
|
|
78
|
+
if (!checks)
|
|
79
|
+
return { shown: true, value };
|
|
80
|
+
const read = guardShownValue(value, checks.provenance, checks.policy, checks.shown);
|
|
81
|
+
if (read.event)
|
|
82
|
+
yield { type: 'guardrail', guardrail: read.event };
|
|
83
|
+
return 'value' in read ? { shown: true, value: read.value } : { shown: false };
|
|
84
|
+
}
|
|
85
|
+
/** Whether a check at the output's boundary stops `data`; a flag lets it through unreported. */
|
|
86
|
+
*progressStops(data) {
|
|
87
|
+
const checks = this.checks;
|
|
88
|
+
if (!checks)
|
|
89
|
+
return false;
|
|
90
|
+
const { event, text } = guardToolResult('', data, checks.provenance, checks.policy, checks.boundary, checks.callableTools);
|
|
91
|
+
if (text !== undefined && (event === undefined || event.action === 'flag'))
|
|
92
|
+
return false;
|
|
93
|
+
if (event)
|
|
94
|
+
yield { type: 'guardrail', guardrail: event };
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/** The gate a handler's drafts are read through, at the output's boundary. */
|
|
99
|
+
function draftGate(checks) {
|
|
100
|
+
return createDraftGate(checks.policy, {
|
|
101
|
+
stage: 'tool_result',
|
|
102
|
+
trust: 'untrusted',
|
|
103
|
+
profileId: checks.profileId,
|
|
104
|
+
provenance: checks.provenance,
|
|
105
|
+
}, checks.boundary, { callable: checks.callableTools });
|
|
106
|
+
}
|
|
@@ -11,6 +11,7 @@ type AskOutput = AskInput & {
|
|
|
11
11
|
};
|
|
12
12
|
/** A scope of its own registers it with `tools.register`. */
|
|
13
13
|
declare const askUserTool: ToolDefinitionInput<AskInput, AskOutput>;
|
|
14
|
+
/** Registers the harness tools, currently `askUserTool`, in the default registry. */
|
|
14
15
|
declare function registerHarnessTools(): void;
|
|
15
16
|
export type { AskInput, AskKind, AskOutput };
|
|
16
17
|
export { askUserTool, registerHarnessTools };
|
|
@@ -16,7 +16,7 @@ const AskOutputSchema = z.object({
|
|
|
16
16
|
const askUserTool = {
|
|
17
17
|
type: 'function',
|
|
18
18
|
name: 'ask_user',
|
|
19
|
-
description: 'Ask the user a question (completes with awaiting_user_input)', //
|
|
19
|
+
description: 'Ask the user a question (completes with awaiting_user_input)', // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
|
|
20
20
|
category: 'conversation',
|
|
21
21
|
access: 'read-only',
|
|
22
22
|
paths: ['*'],
|
|
@@ -36,6 +36,7 @@ const askUserTool = {
|
|
|
36
36
|
return out;
|
|
37
37
|
},
|
|
38
38
|
};
|
|
39
|
+
/** Registers the harness tools, currently `askUserTool`, in the default registry. */
|
|
39
40
|
function registerHarnessTools() {
|
|
40
41
|
registerTool(askUserTool);
|
|
41
42
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Wait } from '../../providers/shared/retry.js';
|
|
2
|
+
import type { HttpToolLimit } from './types.js';
|
|
3
|
+
/** Time as the limit reads it; a test passes its own. */
|
|
4
|
+
export interface LimitClock {
|
|
5
|
+
now: () => number;
|
|
6
|
+
wait: Wait;
|
|
7
|
+
}
|
|
8
|
+
/** A place taken for one request. `answered` gives the service's reply, or nothing when the send threw. */
|
|
9
|
+
export interface LimitPlace {
|
|
10
|
+
answered: (response?: Response) => void;
|
|
11
|
+
}
|
|
12
|
+
/** No place opens within a call's wait budget: when the next one opens, or `undefined` while every request is unanswered. */
|
|
13
|
+
export interface LimitFull {
|
|
14
|
+
full: true;
|
|
15
|
+
limit: HttpToolLimit;
|
|
16
|
+
opensInMs: number | undefined;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Takes a place in the tool's window for one request. A request holds its place from send
|
|
20
|
+
* until a window after its answer, so requests the network delivers unevenly still land
|
|
21
|
+
* within the limit. A 429 with `Retry-After` holds every request of the tool until then.
|
|
22
|
+
* A call waits for a place at most the same five seconds a retry may wait; past that it
|
|
23
|
+
* gets `LimitFull` and sends nothing. A call is one place, its retries and redirects included.
|
|
24
|
+
*/
|
|
25
|
+
export declare function takeLimitPlace(tool: object, limit: HttpToolLimit, signal?: AbortSignal | null, clock?: LimitClock): Promise<LimitPlace | LimitFull>;
|
|
26
|
+
/** The request sent in a place; its answer, or its failure, frees the place. */
|
|
27
|
+
export declare function answeredIn(place: LimitPlace | undefined, sending: Promise<Response>): Promise<Response>;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { retryAfterMs, WAIT_BUDGET_MS, waitDefault, } from '../../providers/shared/retry.js';
|
|
2
|
+
const SYSTEM_CLOCK = { now: Date.now, wait: waitDefault };
|
|
3
|
+
/** Keyed by the registered tool, so a scope's tool has its own window and nothing is looked up by name. */
|
|
4
|
+
const windows = new WeakMap();
|
|
5
|
+
function windowOf(tool) {
|
|
6
|
+
const known = windows.get(tool);
|
|
7
|
+
if (known)
|
|
8
|
+
return known;
|
|
9
|
+
const fresh = { places: [], heldUntil: 0, waiting: new Set() };
|
|
10
|
+
windows.set(tool, fresh);
|
|
11
|
+
return fresh;
|
|
12
|
+
}
|
|
13
|
+
/** The first moment a place is free, `Infinity` while every place's request is unanswered. */
|
|
14
|
+
function nextOpening(window, limit, now) {
|
|
15
|
+
window.places = window.places.filter((place) => place.opensAt > now);
|
|
16
|
+
const freeAt = window.places.length < limit.requests
|
|
17
|
+
? now
|
|
18
|
+
: Math.min(...window.places.map((place) => place.opensAt));
|
|
19
|
+
return Math.max(freeAt, window.heldUntil);
|
|
20
|
+
}
|
|
21
|
+
/** Returns when a place frees early (an answer) or the wait ends; the caller's abort rejects. */
|
|
22
|
+
async function waitForChange(window, ms, signal, clock) {
|
|
23
|
+
const changed = new AbortController();
|
|
24
|
+
const wake = () => changed.abort();
|
|
25
|
+
window.waiting.add(wake);
|
|
26
|
+
try {
|
|
27
|
+
await clock.wait(ms, signal ? AbortSignal.any([signal, changed.signal]) : changed.signal);
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
if (signal?.aborted || !changed.signal.aborted)
|
|
31
|
+
throw err;
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
window.waiting.delete(wake);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Takes a place in the tool's window for one request. A request holds its place from send
|
|
39
|
+
* until a window after its answer, so requests the network delivers unevenly still land
|
|
40
|
+
* within the limit. A 429 with `Retry-After` holds every request of the tool until then.
|
|
41
|
+
* A call waits for a place at most the same five seconds a retry may wait; past that it
|
|
42
|
+
* gets `LimitFull` and sends nothing. A call is one place, its retries and redirects included.
|
|
43
|
+
*/
|
|
44
|
+
export async function takeLimitPlace(tool, limit, signal, clock = SYSTEM_CLOCK) {
|
|
45
|
+
const window = windowOf(tool);
|
|
46
|
+
const deadline = clock.now() + WAIT_BUDGET_MS;
|
|
47
|
+
for (;;) {
|
|
48
|
+
const now = clock.now();
|
|
49
|
+
const opening = nextOpening(window, limit, now);
|
|
50
|
+
if (opening <= now) {
|
|
51
|
+
const place = { opensAt: Number.POSITIVE_INFINITY };
|
|
52
|
+
window.places.push(place);
|
|
53
|
+
return {
|
|
54
|
+
answered: (response) => {
|
|
55
|
+
const at = clock.now();
|
|
56
|
+
place.opensAt = at + limit.windowMs;
|
|
57
|
+
const after = response?.status === 429 ? retryAfterMs(response.headers, at) : undefined;
|
|
58
|
+
if (after !== undefined) {
|
|
59
|
+
window.heldUntil = Math.max(window.heldUntil, at + after);
|
|
60
|
+
}
|
|
61
|
+
for (const wake of window.waiting)
|
|
62
|
+
wake();
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (opening > deadline && opening !== Number.POSITIVE_INFINITY) {
|
|
67
|
+
return { full: true, limit, opensInMs: opening - now };
|
|
68
|
+
}
|
|
69
|
+
if (now >= deadline)
|
|
70
|
+
return { full: true, limit, opensInMs: undefined };
|
|
71
|
+
await waitForChange(window, Math.min(opening, deadline) - now, signal, clock);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** The request sent in a place; its answer, or its failure, frees the place. */
|
|
75
|
+
export async function answeredIn(place, sending) {
|
|
76
|
+
try {
|
|
77
|
+
const response = await sending;
|
|
78
|
+
place?.answered(response);
|
|
79
|
+
return response;
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
place?.answered();
|
|
83
|
+
throw err;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -1,10 +1,32 @@
|
|
|
1
1
|
import type { TraceSink } from '../../observability/trace-sink.js';
|
|
2
2
|
import type { KernelRegistry } from '../registry/kernel-registry.js';
|
|
3
3
|
import type { TurnEvent } from '../types.js';
|
|
4
|
-
import type { InvokeToolRequest } from './types.js';
|
|
4
|
+
import type { InvokeToolRequest, InvokeToolStepRequest } from './types.js';
|
|
5
|
+
/** A call's name and the id it goes by, known before any of its events. */
|
|
6
|
+
export interface StartedCall {
|
|
7
|
+
name: string;
|
|
8
|
+
callId: string;
|
|
9
|
+
}
|
|
10
|
+
/** A started invoke: its call and its events. */
|
|
11
|
+
export interface StartedInvoke extends StartedCall {
|
|
12
|
+
events: AsyncGenerator<TurnEvent>;
|
|
13
|
+
}
|
|
14
|
+
declare function invokeTool(registry: KernelRegistry, request: InvokeToolRequest, sinkOverride?: TraceSink): AsyncGenerator<TurnEvent>;
|
|
15
|
+
declare function startInvoke(registry: KernelRegistry, request: InvokeToolRequest, sinkOverride?: TraceSink): StartedInvoke;
|
|
5
16
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
17
|
+
* Runs the host's calls as one step, the way a turn runs the model's. Every call the step names
|
|
18
|
+
* itself is announced with the step's id before any runs. With `tools.parallel` they run side by
|
|
19
|
+
* side, otherwise one at a time in the order given; a call whose `pre_tool` answers `waitFor`
|
|
20
|
+
* starts once those calls in the step settle. Each call's events arrive as it gives them, and its
|
|
21
|
+
* terminal `tool` event says it settled. The calls share one snapshot. A call that gates waits for
|
|
22
|
+
* its own approval while the others run; the step then ends `gate`. One trace record holds a span
|
|
23
|
+
* per call under the step's root, rooted under the host span when one is given.
|
|
8
24
|
*/
|
|
9
|
-
declare function
|
|
10
|
-
|
|
25
|
+
declare function invokeToolStep(registry: KernelRegistry, request: InvokeToolStepRequest, sinkOverride?: TraceSink): AsyncGenerator<TurnEvent>;
|
|
26
|
+
/** A started step: its calls in the order given, and the step's events. */
|
|
27
|
+
export interface StartedStep {
|
|
28
|
+
calls: StartedCall[];
|
|
29
|
+
events: AsyncGenerator<TurnEvent>;
|
|
30
|
+
}
|
|
31
|
+
declare function startInvokeStep(registry: KernelRegistry, request: InvokeToolStepRequest, sinkOverride?: TraceSink): StartedStep;
|
|
32
|
+
export { invokeTool, invokeToolStep, startInvoke, startInvokeStep };
|