@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,6 +1,6 @@
|
|
|
1
1
|
import type { ToolRegistry } from '../tools/registry.js';
|
|
2
|
-
import type { BuiltinToolId,
|
|
3
|
-
declare function providerBuiltins(tools: ToolRegistry, ids: readonly BuiltinToolId[]): ProviderBuiltin[];
|
|
2
|
+
import type { BuiltInArgs, BuiltinToolId, ModelRequest, ProviderBuiltin, ResolvedGeneration } from '../types.js';
|
|
3
|
+
declare function providerBuiltins(tools: ToolRegistry, ids: readonly BuiltinToolId[], args?: BuiltInArgs): ProviderBuiltin[];
|
|
4
4
|
/** Shared by execution and tracing. */
|
|
5
|
-
declare function providerCompleteRequest(tools: ToolRegistry, generation: ResolvedGeneration, system: string):
|
|
5
|
+
declare function providerCompleteRequest(tools: ToolRegistry, generation: ResolvedGeneration, system: string): ModelRequest;
|
|
6
6
|
export { providerBuiltins, providerCompleteRequest };
|
|
@@ -1,42 +1,34 @@
|
|
|
1
1
|
import { TheoremError } from '../../guardrails/error.js';
|
|
2
|
-
function providerBuiltins(tools, ids) {
|
|
2
|
+
function providerBuiltins(tools, ids, args = {}) {
|
|
3
3
|
return ids.map((id) => {
|
|
4
4
|
const tool = tools.get(id);
|
|
5
5
|
if (tool?.type !== 'builtin') {
|
|
6
|
-
throw new TheoremError('config', `Builtin '${id}' is not registered`); //
|
|
6
|
+
throw new TheoremError('config', `Builtin '${id}' is not registered`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
const given = args[id];
|
|
9
|
+
return given ? { id, args: given } : { id };
|
|
9
10
|
});
|
|
10
11
|
}
|
|
11
12
|
/** Shared by execution and tracing. */
|
|
12
13
|
function providerCompleteRequest(tools, generation, system) {
|
|
13
|
-
const isInteractions = generation.transport === 'interactions';
|
|
14
14
|
return {
|
|
15
15
|
model: generation.model,
|
|
16
16
|
apiId: generation.apiId,
|
|
17
|
-
previousInteractionId: isInteractions ? generation.previousInteractionId : undefined,
|
|
18
|
-
store: isInteractions ? generation.store : undefined,
|
|
19
17
|
stream: generation.stream,
|
|
20
18
|
thinking: generation.thinking,
|
|
21
19
|
summaries: generation.summaries,
|
|
22
20
|
maxOutputTokens: generation.maxOutputTokens,
|
|
23
21
|
temperature: generation.temperature,
|
|
24
|
-
builtins: providerBuiltins(tools, generation.builtins),
|
|
25
|
-
googleMapsLocation: isInteractions ? generation.googleMapsLocation : undefined,
|
|
26
|
-
cache: generation.cache,
|
|
22
|
+
builtins: providerBuiltins(tools, generation.builtins, generation.builtInArgs),
|
|
27
23
|
sessionId: generation.sessionId,
|
|
28
24
|
system,
|
|
29
25
|
input: generation.input,
|
|
30
26
|
history: generation.history,
|
|
31
|
-
continuation: isInteractions ? generation.continuation : undefined,
|
|
32
27
|
wireTools: generation.tools.wire,
|
|
33
28
|
structured: generation.structured,
|
|
34
29
|
image: generation.image,
|
|
35
30
|
speech: generation.speech,
|
|
36
31
|
live: generation.live,
|
|
37
|
-
sessionResumptionHandle: generation.sessionResumptionHandle,
|
|
38
|
-
keySlot: generation.keySlot,
|
|
39
|
-
fallbackKeySlot: generation.fallbackKeySlot,
|
|
40
32
|
};
|
|
41
33
|
}
|
|
42
34
|
export { providerBuiltins, providerCompleteRequest };
|
|
@@ -2,13 +2,16 @@ import type { ToolRegistry } from '../tools/registry.js';
|
|
|
2
2
|
import type { ModelId, ModelProfile, Profile, ProjectedProfile, ResolvedGeneration, TurnRequest } from '../types.js';
|
|
3
3
|
import type { KernelRegistry } from './kernel-registry.js';
|
|
4
4
|
declare function isModelProfile(profile: Profile): profile is ModelProfile;
|
|
5
|
+
/** Returns the profile when it runs a model; throws a request error naming `door` for a host or decision profile. */
|
|
5
6
|
declare function requireModelProfile(profile: Profile, door: string): ModelProfile;
|
|
6
7
|
/** A request is honored only when selection is allowed; registration guarantees the default. */
|
|
7
8
|
declare function pickModel(profile: ModelProfile, requested?: string): ModelId;
|
|
8
|
-
|
|
9
|
+
/** `model` names the binding to resolve, past the profile's own selection rule. */
|
|
10
|
+
declare function resolveTurnInRegistry(registry: KernelRegistry, req: TurnRequest, model?: ModelId): {
|
|
9
11
|
profile: ModelProfile;
|
|
10
12
|
generation: ResolvedGeneration;
|
|
11
13
|
};
|
|
14
|
+
/** Projects a profile into the plain object a host reads: its id, type, handle, models, inputs, outputs, and the tools it can use. Throws for a host or decision profile. */
|
|
12
15
|
declare function projectProfileObject(tools: ToolRegistry, input: Profile): ProjectedProfile;
|
|
13
16
|
declare function projectProfileInRegistry(registry: KernelRegistry, id: Profile['id']): ProjectedProfile;
|
|
14
17
|
export { isModelProfile, pickModel, projectProfileInRegistry, projectProfileObject, requireModelProfile, resolveTurnInRegistry, };
|
|
@@ -1,33 +1,39 @@
|
|
|
1
1
|
import { mintCanary } from '../../guardrails/canary.js';
|
|
2
|
+
import { detects } from '../../guardrails/detectors.js';
|
|
2
3
|
import { TheoremError } from '../../guardrails/error.js';
|
|
3
4
|
import { resolveGuardrailPolicy } from '../../guardrails/policy.js';
|
|
5
|
+
import { replyIsJudged } from '../../guardrails/progressive-yield.js';
|
|
4
6
|
import { sanitizeTurnRequest } from '../../guardrails/sanitize.js';
|
|
7
|
+
import { DEFAULT_MAX_STEPS } from '../profile-presence.js';
|
|
5
8
|
import { profileTurnResumption } from '../stop.js';
|
|
6
9
|
import { projectTools } from '../tools/project.js';
|
|
7
10
|
import { resolveTurnTools } from '../tools/resolve.js';
|
|
8
11
|
import { profileInputs, requireModelBinding } from './catalog.js';
|
|
9
|
-
import { assertOutputMode, assertSpeechRole, assertTurnSlots, resolveImageFormat, resolveInputParts, } from './ingress.js';
|
|
12
|
+
import { assertOutputMode, assertSpeechRole, assertTurnContext, assertTurnSlots, resolveImageFormat, resolveInputParts, resolveSpeech, } from './ingress.js';
|
|
10
13
|
import { resolveTurnSystemPrompt } from './system-prompt.js';
|
|
11
|
-
import { resolveKeySlot } from './vault.js';
|
|
12
14
|
function isModelProfile(profile) {
|
|
13
|
-
return profile.type !== 'host' && profile.type !== 'decision';
|
|
15
|
+
return profile.type !== 'host' && profile.type !== 'decision' && profile.type !== 'embedding';
|
|
14
16
|
}
|
|
17
|
+
/** Returns the profile when it runs a model; throws a request error naming `door` for a host or decision profile. */
|
|
15
18
|
function requireModelProfile(profile, door) {
|
|
16
19
|
if (isModelProfile(profile))
|
|
17
20
|
return profile;
|
|
18
21
|
if (profile.type === 'host') {
|
|
19
22
|
throw new TheoremError('request', `Profile ${profile.id}: type 'host' never runs a model — ${door} is not supported; execute tools with invokeTool`);
|
|
20
23
|
}
|
|
24
|
+
if (profile.type === 'embedding') {
|
|
25
|
+
throw new TheoremError('request', `Profile ${profile.id}: type 'embedding' runs through runEmbedding — ${door} is not supported`);
|
|
26
|
+
}
|
|
21
27
|
throw new TheoremError('request', `Profile ${profile.id}: type 'decision' runs through runDecision — ${door} is not supported`);
|
|
22
28
|
}
|
|
23
29
|
/** A request is honored only when selection is allowed; registration guarantees the default. */
|
|
24
30
|
function pickModel(profile, requested) {
|
|
25
31
|
if (requested) {
|
|
26
32
|
if (!profile.allowModelSelect) {
|
|
27
|
-
throw new TheoremError('request', `Profile ${profile.id} does not allow model selection`); //
|
|
33
|
+
throw new TheoremError('request', `Profile ${profile.id} does not allow model selection`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
|
|
28
34
|
}
|
|
29
35
|
if (!profile.models[requested]) {
|
|
30
|
-
throw new TheoremError('request', `Unknown model '${requested}' for ${profile.id}`); //
|
|
36
|
+
throw new TheoremError('request', `Unknown model '${requested}' for ${profile.id}`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
|
|
31
37
|
}
|
|
32
38
|
return requested;
|
|
33
39
|
}
|
|
@@ -52,7 +58,7 @@ function resolveEffort(profile, binding, modelId, requested) {
|
|
|
52
58
|
}
|
|
53
59
|
return level;
|
|
54
60
|
}
|
|
55
|
-
// Registration requires a default whenever more than one effort is declared.
|
|
61
|
+
// why: Registration requires a default whenever more than one effort is declared.
|
|
56
62
|
return efforts[binding.defaultEffort ?? keys[0]];
|
|
57
63
|
}
|
|
58
64
|
function resolveSummaries(binding) {
|
|
@@ -90,32 +96,8 @@ function resolveStreamFlag(profile) {
|
|
|
90
96
|
}
|
|
91
97
|
return profile.outputs?.streaming?.mode !== 'buffered';
|
|
92
98
|
}
|
|
93
|
-
function
|
|
94
|
-
|
|
95
|
-
return reqStore;
|
|
96
|
-
}
|
|
97
|
-
return binding.store;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* A turn chains only on a binding that says so: an interaction id sent to one
|
|
101
|
-
* that does not, or a chaining turn that switches storage off, is a request error.
|
|
102
|
-
*/
|
|
103
|
-
function assertTurnChaining(profile, model, chains, req, store) {
|
|
104
|
-
if (req.previousInteractionId && !chains) {
|
|
105
|
-
throw new TheoremError('request', `Profile ${profile.id} model '${model}': previousInteractionId needs a binding with persistViaInteractionId: true`);
|
|
106
|
-
}
|
|
107
|
-
if (chains && store === false) {
|
|
108
|
-
throw new TheoremError('request', `Profile ${profile.id} model '${model}': store: false cannot apply to a binding with persistViaInteractionId: true — Google chains only from a stored interaction`);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
function resolveTransport(profile, binding) {
|
|
112
|
-
if (profile.type === 'live') {
|
|
113
|
-
return 'geminiLive';
|
|
114
|
-
}
|
|
115
|
-
if (binding.protocol === 'geminiInteractions' && binding.provider === 'google') {
|
|
116
|
-
return 'interactions';
|
|
117
|
-
}
|
|
118
|
-
return 'openAiCompat';
|
|
99
|
+
function resolveTransport(profile, _binding) {
|
|
100
|
+
return profile.type === 'live' ? 'live' : 'turn';
|
|
119
101
|
}
|
|
120
102
|
function assertTurnResumption(profile, req) {
|
|
121
103
|
if (!req.continueFrom) {
|
|
@@ -134,73 +116,92 @@ function assertTurnResumption(profile, req) {
|
|
|
134
116
|
throw new TheoremError('request', `Profile ${profile.id}: continueFrom requires TurnRequest.continuation when turnBehaviour.resumption.maxContinues is set`);
|
|
135
117
|
}
|
|
136
118
|
if (attempt < 1) {
|
|
137
|
-
throw new TheoremError('request', `Profile ${profile.id}: continuation must be >= 1`); //
|
|
119
|
+
throw new TheoremError('request', `Profile ${profile.id}: continuation must be >= 1`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
|
|
138
120
|
}
|
|
139
121
|
if (attempt > max) {
|
|
140
122
|
throw new TheoremError('request', `Profile ${profile.id}: continuation ${attempt} exceeds turnBehaviour.resumption.maxContinues (${max})`);
|
|
141
123
|
}
|
|
142
124
|
}
|
|
143
125
|
/**
|
|
144
|
-
* A guarded Live profile (
|
|
145
|
-
*
|
|
126
|
+
* A guarded Live profile (a detector reading `live_reply`) always transcribes its own speech: the outbound gate can only check audio
|
|
127
|
+
* through its transcript.
|
|
146
128
|
*/
|
|
147
129
|
function resolveLiveSpec(live, guardrails) {
|
|
148
|
-
|
|
149
|
-
if (!policy.canary && !policy.egress?.enforce) {
|
|
130
|
+
if (!replyIsJudged(resolveGuardrailPolicy(guardrails), ['live_reply'])) {
|
|
150
131
|
return live;
|
|
151
132
|
}
|
|
152
133
|
return { ...live, transcription: { ...live?.transcription, output: true } };
|
|
153
134
|
}
|
|
154
|
-
|
|
135
|
+
/**
|
|
136
|
+
* A canary for the turn while `canary_leak` reads somewhere, else none. Speech
|
|
137
|
+
* has no system prompt to plant one in.
|
|
138
|
+
*/
|
|
139
|
+
function plantedCanary(profile) {
|
|
140
|
+
const { detect } = resolveGuardrailPolicy(profile.guardrails);
|
|
141
|
+
return profile.type !== 'speech' && detects(detect, 'canary_leak') ? mintCanary() : '';
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* The request's `builtInArgs`. Args must name a tool the chosen model lists; the protocol that
|
|
145
|
+
* writes the tool parses them.
|
|
146
|
+
*/
|
|
147
|
+
function resolveBuiltInArgs(profile, model, binding, args) {
|
|
148
|
+
if (!args) {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
const resolved = {};
|
|
152
|
+
for (const [id, value] of Object.entries(args)) {
|
|
153
|
+
if (!binding.builtInTools?.includes(id)) {
|
|
154
|
+
throw new TheoremError('request', `Profile ${profile.id}: builtInArgs names '${id}', which model '${model}' does not list in builtInTools`);
|
|
155
|
+
}
|
|
156
|
+
resolved[id] = value;
|
|
157
|
+
}
|
|
158
|
+
return resolved;
|
|
159
|
+
}
|
|
160
|
+
/** `model` names the binding to resolve, past the profile's own selection rule. */
|
|
161
|
+
function resolveTurnInRegistry(registry, req, model) {
|
|
155
162
|
const profile = requireModelProfile(registry.profiles.get(req.profile), 'resolveTurn');
|
|
156
163
|
assertTurnSlots(profile, req);
|
|
164
|
+
assertTurnContext(profile, req);
|
|
157
165
|
const safe = sanitizeTurnRequest(req, profile);
|
|
158
166
|
const input = safe.input ?? {};
|
|
159
167
|
assertTurnResumption(profile, safe);
|
|
160
|
-
const
|
|
161
|
-
const binding = requireModelBinding(profile,
|
|
162
|
-
const toolSnapshot = resolveTurnTools(registry.tools, profile, safe,
|
|
168
|
+
const picked = model ?? pickModel(profile, safe.model);
|
|
169
|
+
const binding = requireModelBinding(profile, picked);
|
|
170
|
+
const toolSnapshot = resolveTurnTools(registry.tools, profile, safe, picked);
|
|
163
171
|
const builtins = toolSnapshot.builtins;
|
|
164
172
|
const structuredId = resolveStructured(profile, input.slots);
|
|
165
173
|
assertOutputMode(profile, structuredId);
|
|
166
174
|
assertSpeechRole(profile, safe);
|
|
167
|
-
const
|
|
175
|
+
const builtInArgs = resolveBuiltInArgs(profile, picked, binding, safe.builtInArgs);
|
|
168
176
|
const transport = resolveTransport(profile, binding);
|
|
169
|
-
const chains = binding.persistViaInteractionId === true;
|
|
170
|
-
const store = resolveStore(binding, safe.store);
|
|
171
|
-
assertTurnChaining(profile, model, chains, safe, store);
|
|
172
177
|
return {
|
|
173
178
|
profile,
|
|
174
179
|
generation: {
|
|
175
|
-
model,
|
|
180
|
+
model: picked,
|
|
176
181
|
apiId: binding.apiId,
|
|
177
182
|
transport,
|
|
178
|
-
chains,
|
|
179
|
-
previousInteractionId: safe.previousInteractionId,
|
|
180
|
-
store,
|
|
181
183
|
stream: resolveStreamFlag(profile),
|
|
182
|
-
thinking: resolveEffort(profile, binding,
|
|
184
|
+
thinking: resolveEffort(profile, binding, picked, safe.effort),
|
|
183
185
|
summaries: resolveSummaries(binding),
|
|
184
186
|
maxOutputTokens: binding.maxOutputTokens,
|
|
185
187
|
temperature: binding.temperature,
|
|
186
188
|
builtins,
|
|
187
|
-
|
|
188
|
-
cache: binding.cache,
|
|
189
|
+
builtInArgs,
|
|
189
190
|
sessionId: safe.sessionId,
|
|
190
191
|
tools: toolSnapshot,
|
|
191
192
|
sessionPermissions: safe.sessionPermissions,
|
|
193
|
+
execution: safe.execution,
|
|
194
|
+
pageExecution: safe.pageExecution,
|
|
192
195
|
history: input.history,
|
|
193
|
-
maxSteps: profile.maxSteps,
|
|
196
|
+
maxSteps: profile.maxSteps ?? DEFAULT_MAX_STEPS,
|
|
194
197
|
structured: structuredId
|
|
195
198
|
? { id: structuredId, jsonSchema: registry.schemas.get(structuredId).jsonSchema }
|
|
196
199
|
: null,
|
|
197
200
|
image: resolveImageFormat(profile),
|
|
198
|
-
speech: profile
|
|
201
|
+
speech: resolveSpeech(profile, safe),
|
|
199
202
|
live: profile.type === 'live' ? resolveLiveSpec(profile.live, profile.guardrails) : undefined,
|
|
200
203
|
input: resolveInputParts(profile, safe),
|
|
201
|
-
|
|
202
|
-
canary: resolveGuardrailPolicy(profile.guardrails).canary ? mintCanary() : '',
|
|
203
|
-
sessionResumptionHandle: safe.sessionResumptionHandle ?? input.sessionResumptionHandle,
|
|
204
|
+
canary: plantedCanary(profile),
|
|
204
205
|
resolvedSystem: resolveTurnSystemPrompt(profile, safe),
|
|
205
206
|
host: safe.host,
|
|
206
207
|
},
|
|
@@ -209,6 +210,7 @@ function resolveTurnInRegistry(registry, req) {
|
|
|
209
210
|
function primaryImageSpec(profile) {
|
|
210
211
|
return profile.type === 'image' ? profile.image : null;
|
|
211
212
|
}
|
|
213
|
+
/** Projects a profile into the plain object a host reads: its id, type, handle, models, inputs, outputs, and the tools it can use. Throws for a host or decision profile. */
|
|
212
214
|
function projectProfileObject(tools, input) {
|
|
213
215
|
const profile = requireModelProfile(input, 'projectProfile');
|
|
214
216
|
const { identity } = profile;
|
|
@@ -222,7 +224,6 @@ function projectProfileObject(tools, input) {
|
|
|
222
224
|
defaultModel: profile.defaultModel,
|
|
223
225
|
allowModelSelect: profile.allowModelSelect,
|
|
224
226
|
maxSteps: profile.maxSteps,
|
|
225
|
-
key: profile.key,
|
|
226
227
|
tools: projectTools(tools, profile),
|
|
227
228
|
inputs,
|
|
228
229
|
outputs,
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import type { StructuredSpec } from '../types.js';
|
|
2
|
+
/** The structured-output schemas a registry holds, by id: `register`, `get` (throws when there is none) and `find`. */
|
|
2
3
|
interface SchemaRegistry {
|
|
3
4
|
register(id: string, spec: StructuredSpec): void;
|
|
4
5
|
/** Throws when there is none. */
|
|
5
6
|
get(id: string): StructuredSpec;
|
|
7
|
+
find(id: string): StructuredSpec | undefined;
|
|
6
8
|
}
|
|
9
|
+
/** Creates an empty schema registry; `register` rejects a spec that still carries the removed `enforced` field. */
|
|
7
10
|
declare function createSchemaRegistry(): SchemaRegistry;
|
|
8
11
|
export type { SchemaRegistry };
|
|
9
12
|
export { createSchemaRegistry };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TheoremError } from '../../guardrails/error.js';
|
|
2
|
+
/** Creates an empty schema registry; `register` rejects a spec that still carries the removed `enforced` field. */
|
|
2
3
|
function createSchemaRegistry() {
|
|
3
4
|
const schemas = new Map();
|
|
4
5
|
return {
|
|
@@ -16,10 +17,11 @@ function createSchemaRegistry() {
|
|
|
16
17
|
get(id) {
|
|
17
18
|
const spec = schemas.get(id);
|
|
18
19
|
if (!spec) {
|
|
19
|
-
throw new TheoremError('config', `Unknown structured schema '${id}'`); //
|
|
20
|
+
throw new TheoremError('config', `Unknown structured schema '${id}'`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
|
|
20
21
|
}
|
|
21
22
|
return spec;
|
|
22
23
|
},
|
|
24
|
+
find: (id) => schemas.get(id),
|
|
23
25
|
};
|
|
24
26
|
}
|
|
25
27
|
export { createSchemaRegistry };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Profile } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Replaces each `{name}` that names one of the profile's slots with the value the request chose.
|
|
4
|
+
* A `{name}` that is no slot stays as written. A prompt that uses a slot the request left
|
|
5
|
+
* unfilled is a request error. Every value is one the profile lists, so no free text is written.
|
|
6
|
+
*/
|
|
7
|
+
export declare function fillSlots(profile: Profile, text: string, slots: Record<string, string> | undefined, where: string): string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { TheoremError } from '../../guardrails/error.js';
|
|
2
|
+
import { profileInputs } from './catalog.js';
|
|
3
|
+
const SLOT_REF = /\{([A-Za-z_][\w-]*)\}/g;
|
|
4
|
+
/**
|
|
5
|
+
* Replaces each `{name}` that names one of the profile's slots with the value the request chose.
|
|
6
|
+
* A `{name}` that is no slot stays as written. A prompt that uses a slot the request left
|
|
7
|
+
* unfilled is a request error. Every value is one the profile lists, so no free text is written.
|
|
8
|
+
*/
|
|
9
|
+
export function fillSlots(profile, text, slots, where) {
|
|
10
|
+
const declared = profileInputs(profile)?.slots;
|
|
11
|
+
if (!declared)
|
|
12
|
+
return text;
|
|
13
|
+
return text.replace(SLOT_REF, (whole, name) => {
|
|
14
|
+
if (!Object.hasOwn(declared, name))
|
|
15
|
+
return whole;
|
|
16
|
+
const value = slots && Object.hasOwn(slots, name) ? slots[name] : undefined;
|
|
17
|
+
if (value === undefined) {
|
|
18
|
+
throw new TheoremError('request', `Profile ${profile.id}: ${where} uses slot '${name}', and the request chose no value for it`);
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { detectionForTrust, resolveGuardrailPolicy } from '../../guardrails/policy.js';
|
|
2
|
-
import { sanitizeText } from '../../guardrails/sanitize.js';
|
|
3
1
|
import { joinSystemPieces, mapSystemPrompt, systemPieces } from '../system-parts.js';
|
|
2
|
+
import { fillSlots } from './slot-fill.js';
|
|
4
3
|
import { pickSystemRole } from './system-role.js';
|
|
5
4
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* `identity.system` is trusted author-time copy and crosses no boundary: no detector reads it.
|
|
6
|
+
* A `{slot}` in it becomes the value the request chose, which is one the profile lists.
|
|
7
|
+
* `req.system` is `assembled` per turn and is read at the `system` boundary.
|
|
8
8
|
*/
|
|
9
|
-
function systemFromProfile(profile, role) {
|
|
9
|
+
function systemFromProfile(profile, role, slots) {
|
|
10
10
|
if (profile.type === 'speech') {
|
|
11
11
|
return [];
|
|
12
12
|
}
|
|
@@ -15,8 +15,7 @@ function systemFromProfile(profile, role) {
|
|
|
15
15
|
if (!prompt) {
|
|
16
16
|
return [];
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
return systemPieces(mapSystemPrompt(prompt, `Profile ${profile.id} identity.system`, (text) => sanitizeText(text, detection)));
|
|
18
|
+
return systemPieces(mapSystemPrompt(prompt, `Profile ${profile.id} identity.system`, (text) => fillSlots(profile, text, slots, 'identity.system')));
|
|
20
19
|
}
|
|
21
20
|
/**
|
|
22
21
|
* Synchronous: snapshotted in `resolveTurn` before any async work. Each source
|
|
@@ -26,7 +25,7 @@ function systemFromProfile(profile, role) {
|
|
|
26
25
|
function resolveTurnSystemPrompt(profile, req) {
|
|
27
26
|
const role = pickSystemRole(profile, req.input?.role);
|
|
28
27
|
return joinSystemPieces([
|
|
29
|
-
systemFromProfile(profile, role),
|
|
28
|
+
systemFromProfile(profile, role, req.input?.slots),
|
|
30
29
|
req.system === undefined ? [] : systemPieces(req.system),
|
|
31
30
|
]);
|
|
32
31
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import type { JsonObject } from '../json.js';
|
|
2
|
+
import type { KeySlot } from '../types.js';
|
|
3
|
+
/** A key as the vault holds it: a string, or an object for a provider that signs in with several fields. */
|
|
4
|
+
export type KeyCredential = string | JsonObject;
|
|
5
|
+
export interface CredentialContext {
|
|
6
|
+
providerId: string;
|
|
7
|
+
apiId: string;
|
|
8
|
+
keySlot: KeySlot;
|
|
9
|
+
signal?: AbortSignal;
|
|
10
|
+
}
|
|
11
|
+
/** Reads a key when a call needs it, e.g. from a secret manager. */
|
|
12
|
+
export type CredentialResolver = (context: CredentialContext) => KeyCredential | Promise<KeyCredential>;
|
|
13
|
+
/** The host's keys, by slot. The kernel reads a slot only for the call that names it. */
|
|
14
|
+
export type KeyVault = Readonly<Record<KeySlot, KeyCredential | CredentialResolver | undefined>>;
|
|
@@ -1,14 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* The slots a model's calls use: its own, else the profile's. A local model uses only its own, so
|
|
3
|
-
* the profile's hosted key never reaches a local server; naming none, it sends no key.
|
|
4
|
-
*/
|
|
5
|
-
function resolveKeySlot(profile, binding) {
|
|
6
|
-
const inherited = binding.provider === 'local' ? {} : profile;
|
|
7
|
-
const keySlot = binding.key ?? inherited.key;
|
|
8
|
-
const fallbackKeySlot = binding.fallbackKey ?? inherited.fallbackKey;
|
|
9
|
-
return {
|
|
10
|
-
...(keySlot ? { keySlot } : {}),
|
|
11
|
-
...(fallbackKeySlot ? { fallbackKeySlot } : {}),
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
export { resolveKeySlot };
|
|
1
|
+
export {};
|