@theoremjs/agents 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +276 -995
- package/esm/mod.d.ts +33 -19
- package/esm/mod.js +18 -11
- 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 +23 -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 +874 -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 +29 -21
- package/esm/src/guardrails/mod.js +18 -13
- 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 +1 -0
- package/esm/src/guardrails/quota.js +1 -1
- 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 +4 -1
- package/esm/src/guardrails/theorem-error.js +3 -2
- 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 +7 -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 +173 -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 +328 -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 +128 -87
- 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 +105 -0
- package/esm/src/providers/gemini/live-protocol.d.ts +3 -0
- package/esm/src/providers/gemini/live-protocol.js +191 -0
- package/esm/src/providers/gemini/prices.d.ts +3 -0
- package/esm/src/providers/gemini/prices.js +63 -0
- package/esm/src/providers/gemini/provider.d.ts +7 -0
- package/esm/src/providers/gemini/provider.js +39 -0
- package/esm/src/providers/google/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 +3 -209
- 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 +17 -0
- package/esm/src/providers/shared/retry.js +90 -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,7 +1,7 @@
|
|
|
1
|
-
import { blobAt, spansFromPatterns } from '../observability/spans.js';
|
|
2
|
-
import { REVERSED_INJECTION_PATTERNS } from './egress-automata.js';
|
|
1
|
+
import { blobAt, mergeSpans, spansFromPatterns } from '../observability/spans.js';
|
|
3
2
|
import { BASE64_BLOB, HEX_BLOB, INJECTION_PATTERNS, PIPE_SEPARATED, SPACED_LETTERS, } from './injection-patterns.js';
|
|
4
|
-
import {
|
|
3
|
+
import { REVERSED_INJECTION_PATTERNS } from './injection-reversed.js';
|
|
4
|
+
import { normalizedView, normalizeForDetection } from './normalize.js';
|
|
5
5
|
const TYPO_TARGETS = [
|
|
6
6
|
'ignore',
|
|
7
7
|
'bypass',
|
|
@@ -24,10 +24,66 @@ const TYPO_TARGETS = [
|
|
|
24
24
|
'developer',
|
|
25
25
|
'disable',
|
|
26
26
|
'measures',
|
|
27
|
+
'output',
|
|
27
28
|
];
|
|
29
|
+
/** The shortest target a one-edit misspelling is read as: a shorter word has too many real neighbours. */
|
|
30
|
+
const EDIT_TARGET_MIN = 6;
|
|
31
|
+
/**
|
|
32
|
+
* Real words one edit from a target (`forgot`, `safely`, `filter`): the dictionary's, and the
|
|
33
|
+
* inflections it leaves out. They are words, not misspellings.
|
|
34
|
+
*/
|
|
35
|
+
const REAL_WORDS = new Set([
|
|
36
|
+
'instruction',
|
|
37
|
+
'filter',
|
|
38
|
+
'guideline',
|
|
39
|
+
'restriction',
|
|
40
|
+
'measure',
|
|
41
|
+
'ignote',
|
|
42
|
+
'bypast',
|
|
43
|
+
'overrode',
|
|
44
|
+
'overrife',
|
|
45
|
+
'overripe',
|
|
46
|
+
'overrise',
|
|
47
|
+
'overrude',
|
|
48
|
+
'overside',
|
|
49
|
+
'overtide',
|
|
50
|
+
'overwide',
|
|
51
|
+
'redeal',
|
|
52
|
+
'reheal',
|
|
53
|
+
'repeal',
|
|
54
|
+
'reseal',
|
|
55
|
+
'reveil',
|
|
56
|
+
'revel',
|
|
57
|
+
'delate',
|
|
58
|
+
'deplete',
|
|
59
|
+
'safely',
|
|
60
|
+
'fitters',
|
|
61
|
+
'precious',
|
|
62
|
+
'premious',
|
|
63
|
+
'prepious',
|
|
64
|
+
'forge',
|
|
65
|
+
'forged',
|
|
66
|
+
'forger',
|
|
67
|
+
'forges',
|
|
68
|
+
'forgot',
|
|
69
|
+
'forlet',
|
|
70
|
+
'forpet',
|
|
71
|
+
'forset',
|
|
72
|
+
'gorget',
|
|
73
|
+
'developed',
|
|
74
|
+
'measured',
|
|
75
|
+
'measurer',
|
|
76
|
+
'outcut',
|
|
77
|
+
'outhut',
|
|
78
|
+
'outjut',
|
|
79
|
+
]);
|
|
80
|
+
const TYPO_TARGET_SET = new Set(TYPO_TARGETS);
|
|
81
|
+
/** The longest word a typo can be read from: a target with a letter added. */
|
|
82
|
+
const TYPO_WORD_MAX = Math.max(...TYPO_TARGETS.map((target) => target.length)) + 1;
|
|
28
83
|
/** Pipe evasion only when the first token is a known injection lead-in. */
|
|
29
84
|
const PIPE_HEAD_VERBS = /^(ignore|disregard|forget|bypass|reveal|show|repeat|output|disable|override|new|jailbreak|pretend|act|enter|activate|void|supersede|do)$/i;
|
|
30
|
-
|
|
85
|
+
// why: Bounded, so a long run of letters can't overflow the regex engine's stack; no longer word can be a typo.
|
|
86
|
+
const WORD = new RegExp(`\\b[A-Za-z]{4,${TYPO_WORD_MAX}}\\b`, 'g');
|
|
31
87
|
const PRINTABLE_MIN = 0.85;
|
|
32
88
|
const CODE_TAB = 9;
|
|
33
89
|
const CODE_LF = 10;
|
|
@@ -64,15 +120,102 @@ function isTypoglycemia(word, target) {
|
|
|
64
120
|
}
|
|
65
121
|
return sortedLetters(lower.slice(1, -1)) === sortedLetters(target.slice(1, -1));
|
|
66
122
|
}
|
|
123
|
+
/** Whether one insertion, deletion, substitution, or swap of two neighbours turns `word` into `target`. */
|
|
124
|
+
function isOneEdit(word, target) {
|
|
125
|
+
const wordEnd = word.length - 1;
|
|
126
|
+
const targetEnd = target.length - 1;
|
|
127
|
+
if (word[0] !== target[0] && word[wordEnd] !== target[targetEnd]) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
const short = Math.min(word.length, target.length);
|
|
131
|
+
let head = 0;
|
|
132
|
+
while (head < short && word[head] === target[head]) {
|
|
133
|
+
head += 1;
|
|
134
|
+
}
|
|
135
|
+
let tail = 0;
|
|
136
|
+
while (tail < short - head && word[wordEnd - tail] === target[targetEnd - tail]) {
|
|
137
|
+
tail += 1;
|
|
138
|
+
}
|
|
139
|
+
if (word.length !== target.length) {
|
|
140
|
+
return head + tail === short;
|
|
141
|
+
}
|
|
142
|
+
const differing = short - head - tail;
|
|
143
|
+
return (differing === 1 ||
|
|
144
|
+
(differing === 2 && word[head] === target[head + 1] && word[head + 1] === target[head]));
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Whether `word` is `target` misspelt by one edit. A real word is not: one of
|
|
148
|
+
* {@linkcode REAL_WORDS}, or the target with a letter added at its end
|
|
149
|
+
* (`ignored`, `systems`).
|
|
150
|
+
*/
|
|
151
|
+
function isMisspelling(word, target) {
|
|
152
|
+
return isOneEdit(word, target) && !REAL_WORDS.has(word) && word.slice(0, -1) !== target;
|
|
153
|
+
}
|
|
154
|
+
/** For a word length, the targets a scramble of that length can be, and the targets a one-edit misspelling of it can be. */
|
|
155
|
+
const TARGETS_BY_LENGTH = new Map();
|
|
156
|
+
for (let length = 4; length <= TYPO_WORD_MAX; length += 1) {
|
|
157
|
+
TARGETS_BY_LENGTH.set(length, {
|
|
158
|
+
same: TYPO_TARGETS.filter((target) => target.length === length),
|
|
159
|
+
near: TYPO_TARGETS.filter((target) => target.length >= EDIT_TARGET_MIN && Math.abs(target.length - length) <= 1),
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
/** The target `word` is read as, or `undefined`: a scramble of one first, then a one-edit misspelling. */
|
|
163
|
+
function targetOf(word) {
|
|
164
|
+
const targets = TARGETS_BY_LENGTH.get(word.length);
|
|
165
|
+
if (targets === undefined) {
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
const lower = word.toLowerCase();
|
|
169
|
+
if (TYPO_TARGET_SET.has(lower)) {
|
|
170
|
+
return undefined;
|
|
171
|
+
}
|
|
172
|
+
return (targets.same.find((target) => isTypoglycemia(lower, target)) ??
|
|
173
|
+
targets.near.find((target) => isMisspelling(lower, target)));
|
|
174
|
+
}
|
|
175
|
+
function typoFolds(text) {
|
|
176
|
+
const folds = [];
|
|
177
|
+
for (const match of text.matchAll(WORD)) {
|
|
178
|
+
const to = targetOf(match[0]);
|
|
179
|
+
if (to !== undefined) {
|
|
180
|
+
folds.push({ start: match.index, end: match.index + match[0].length, to });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return folds;
|
|
184
|
+
}
|
|
185
|
+
function applyFolds(text, folds) {
|
|
186
|
+
let out = '';
|
|
187
|
+
let at = 0;
|
|
188
|
+
for (const fold of folds) {
|
|
189
|
+
out += text.slice(at, fold.start) + fold.to;
|
|
190
|
+
at = fold.end;
|
|
191
|
+
}
|
|
192
|
+
return out + text.slice(at);
|
|
193
|
+
}
|
|
67
194
|
function typoNormalize(text) {
|
|
68
|
-
return text
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
195
|
+
return applyFolds(text, typoFolds(text));
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* `typoNormalize(text)`, and for an index in it the index of `text` it stands
|
|
199
|
+
* for. A corrected word may be a letter longer or shorter than the word as
|
|
200
|
+
* written, so an index past the written word stands for its last letter.
|
|
201
|
+
*/
|
|
202
|
+
function typoFolded(text) {
|
|
203
|
+
const folds = typoFolds(text);
|
|
204
|
+
const at = (index) => {
|
|
205
|
+
let shift = 0;
|
|
206
|
+
for (const fold of folds) {
|
|
207
|
+
const start = fold.start + shift;
|
|
208
|
+
if (index < start) {
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
if (index < start + fold.to.length) {
|
|
212
|
+
return fold.start + Math.min(index - start, fold.end - fold.start - 1);
|
|
72
213
|
}
|
|
214
|
+
shift += fold.to.length - (fold.end - fold.start);
|
|
73
215
|
}
|
|
74
|
-
return
|
|
75
|
-
}
|
|
216
|
+
return index - shift;
|
|
217
|
+
};
|
|
218
|
+
return { text: applyFolds(text, folds), at };
|
|
76
219
|
}
|
|
77
220
|
function isMostlyPrintable(value) {
|
|
78
221
|
if (!value) {
|
|
@@ -202,36 +345,116 @@ function tryLeet(text) {
|
|
|
202
345
|
const decoded = text.replace(LEET_CHARS, (c) => LEET_MAP[c] ?? c);
|
|
203
346
|
return decoded !== text ? decoded : undefined;
|
|
204
347
|
}
|
|
348
|
+
/** Matches found in a rewrite, each placed on the stretch of the text as written it was read from. */
|
|
349
|
+
function placed(spans, view) {
|
|
350
|
+
return spans.map((span) => ({
|
|
351
|
+
...span,
|
|
352
|
+
start: view.start(span.start),
|
|
353
|
+
end: view.end(span.end - 1),
|
|
354
|
+
}));
|
|
355
|
+
}
|
|
356
|
+
/** The matches in the text typo-folded, as indexes of the folded text, and the way back from it. */
|
|
357
|
+
function typoSpans(text) {
|
|
358
|
+
const folded = typoFolded(text);
|
|
359
|
+
return {
|
|
360
|
+
spans: folded.text === text ? [] : injectionSpansOn(folded.text),
|
|
361
|
+
view: { text: folded.text, start: folded.at, end: (index) => folded.at(index) + 1 },
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
function unicodeView(text) {
|
|
365
|
+
const view = normalizedView(text);
|
|
366
|
+
return {
|
|
367
|
+
text: view.text,
|
|
368
|
+
start: (index) => view.start[index] ?? text.length,
|
|
369
|
+
end: (index) => view.end[index] ?? text.length,
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
/** `decodeUrlRuns(text)`: a decoded character stands for the whole run of escapes it came from. */
|
|
373
|
+
function urlView(text) {
|
|
374
|
+
const start = [];
|
|
375
|
+
const end = [];
|
|
376
|
+
let decoded = '';
|
|
377
|
+
let last = 0;
|
|
378
|
+
const keep = (to) => {
|
|
379
|
+
for (let i = last; i < to; i += 1) {
|
|
380
|
+
start.push(i);
|
|
381
|
+
end.push(i + 1);
|
|
382
|
+
}
|
|
383
|
+
decoded += text.slice(last, to);
|
|
384
|
+
};
|
|
385
|
+
for (const match of text.matchAll(URL_ESCAPES)) {
|
|
386
|
+
keep(match.index);
|
|
387
|
+
const run = decodeUrlRuns(match[0]);
|
|
388
|
+
last = match.index + match[0].length;
|
|
389
|
+
for (let i = 0; i < run.length; i += 1) {
|
|
390
|
+
start.push(match.index);
|
|
391
|
+
end.push(last);
|
|
392
|
+
}
|
|
393
|
+
decoded += run;
|
|
394
|
+
}
|
|
395
|
+
keep(text.length);
|
|
396
|
+
return {
|
|
397
|
+
text: decoded,
|
|
398
|
+
start: (index) => start[index] ?? text.length,
|
|
399
|
+
end: (index) => end[index] ?? text.length,
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
/** A rewrite of a rewrite: `inner` is a view of `outer.text`. */
|
|
403
|
+
function through(inner, outer) {
|
|
404
|
+
return {
|
|
405
|
+
text: inner.text,
|
|
406
|
+
start: (index) => outer.start(inner.start(index)),
|
|
407
|
+
end: (index) => outer.end(inner.end(index) - 1),
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
function urlSpans(text) {
|
|
411
|
+
const decoded = tryUrlDecode(text);
|
|
412
|
+
const spans = decoded === undefined ? [] : injectionSpansOn(decoded);
|
|
413
|
+
return spans.length > 0 ? placed(spans, urlView(text)) : [];
|
|
414
|
+
}
|
|
205
415
|
/**
|
|
206
|
-
*
|
|
207
|
-
*
|
|
416
|
+
* The matches in the text decoded: ROT13 and leet keep each character in its
|
|
417
|
+
* place, a URL-decoded match is placed through {@linkcode urlView}, and text
|
|
418
|
+
* written backwards is matched as written, by each pattern reversed
|
|
419
|
+
* (`REVERSED_INJECTION_PATTERNS`).
|
|
208
420
|
*/
|
|
209
|
-
function reversedHits(text) {
|
|
210
|
-
return spansFromPatterns(text, REVERSED_INJECTION_PATTERNS, 'injection').length > 0;
|
|
211
|
-
}
|
|
212
421
|
function decodedTextSpans(text) {
|
|
213
|
-
const
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
? [
|
|
217
|
-
|
|
422
|
+
const leet = tryLeet(text);
|
|
423
|
+
return [
|
|
424
|
+
...injectionSpansOn(tryRot13(text)),
|
|
425
|
+
...(leet === undefined ? [] : injectionSpansOn(leet)),
|
|
426
|
+
...urlSpans(text),
|
|
427
|
+
...spansFromPatterns(text, REVERSED_INJECTION_PATTERNS, 'injection'),
|
|
428
|
+
];
|
|
218
429
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
const shadow = typoNormalize(text);
|
|
222
|
-
let typo = [];
|
|
223
|
-
if (shadow !== text) {
|
|
224
|
-
typo = injectionSpansOn(shadow);
|
|
225
|
-
}
|
|
430
|
+
/** The matches in the text normalized, and in that typo-folded. The way back is built only when one of them matches. */
|
|
431
|
+
function unicodeSpans(text) {
|
|
226
432
|
const normalized = normalizeForDetection(text);
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
433
|
+
if (normalized === text) {
|
|
434
|
+
return [];
|
|
435
|
+
}
|
|
436
|
+
const spans = injectionSpansOn(normalized);
|
|
437
|
+
const typo = typoSpans(normalized);
|
|
438
|
+
if (spans.length === 0 && typo.spans.length === 0) {
|
|
439
|
+
return [];
|
|
234
440
|
}
|
|
235
|
-
|
|
441
|
+
const view = unicodeView(text);
|
|
442
|
+
return [...placed(spans, view), ...placed(typo.spans, through(typo.view, view))];
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* The spans of injection in the text, each stretch once. The text is read as
|
|
446
|
+
* written and in each rewrite of it: typo-folded, normalized, decoded, and its
|
|
447
|
+
* encoded blobs. A match in a rewrite is the stretch of the text as written it
|
|
448
|
+
* was read from, so text around a match stays.
|
|
449
|
+
*/
|
|
450
|
+
function injectionSpans(text) {
|
|
451
|
+
const typo = typoSpans(text);
|
|
452
|
+
return mergeSpans([
|
|
453
|
+
...injectionSpansOn(text),
|
|
454
|
+
...placed(typo.spans, typo.view),
|
|
455
|
+
...unicodeSpans(text),
|
|
456
|
+
...blobSpans(text),
|
|
457
|
+
...decodedTextSpans(text),
|
|
458
|
+
]);
|
|
236
459
|
}
|
|
237
|
-
export { decodeUrlRuns, INJECTION_BLOBS, injectionSpans, TYPO_TARGETS, tryLeet, tryRot13, typoNormalize, };
|
|
460
|
+
export { decodeUrlRuns, INJECTION_BLOBS, injectionSpans, LEET_MAP, TYPO_TARGETS, tryLeet, tryRot13, typoFolded, typoNormalize, };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Values that fill a label template's `{param}` placeholders. */
|
|
2
|
+
export type LabelParams = Record<string, string | number>;
|
|
3
|
+
/** Keys are stable API. */
|
|
4
|
+
export declare const LABEL_KEYS: readonly ["provider.decision_failed", "provider.decision_unavailable", "provider.decision_model_missing", "provider.decision_ended", "provider.decision_images_off", "provider.decision_box_model", "provider.budget_exhausted", "provider.adapter_version", "provider.adapter_methods", "provider.adapter_schemas", "provider.fallback_slot", "provider.model_fallback_slot", "provider.host_model", "provider.turn_profile", "provider.model_binding_missing", "provider.session_closed", "provider.settled_call", "provider.session_unavailable", "provider.live_input", "provider.tool_cancel_missing", "provider.kernel_gate", "provider.event_invalid", "provider.response_identity", "provider.credential_resolution", "provider.credential_shape", "provider.stored_continuation", "provider.continuation_mismatch", "provider.continuation_contract", "provider.stateless_history", "provider.events_after_completion", "provider.duplicate_call", "provider.tool_cancel_live", "provider.complete_unavailable", "provider.parallel_tools", "provider.binding_identity", "provider.profile_type", "provider.event_type", "provider.feature", "provider.input_kind", "provider.output_kind", "provider.builtin", "provider.credential_missing", "provider.profile_configuration", "continue.instruction", "canary.bind_note", "user_data.note", "context.note", "taint.blocked", "taint.reason_steered", "taint.reason_tainted", "taint.destination_blocked", "taint.destination_confirm", "advisory.notice_elevated", "advisory.notice_high", "advisory.guidance", "attachments.too_many_files", "attachments.too_many_of_kind", "attachments.file_too_large", "attachments.turn_too_large", "attachments.not_accepted", "attachments.mime_not_allowed", "input.too_long", "attachments.limits_unconfigured", "quota.exhausted", "error.config", "error.request", "error.input", "error.action", "error.auth", "error.rate_limit", "error.unsupported", "error.unavailable", "error.bad_response", "error.network", "error.timeout", "error.safety", "error.blocked", "error.declined", "error.failed", "error.cancelled", "error.internal", "repair.default_guidance", "repair.items_guidance", "repair.prompt_header", "repair.prompt_intro", "repair.prompt_instructions", "repair.history_heading", "repair.section_previous_output", "repair.section_validator_rejection", "repair.section_repair_guidance", "repair.section_instructions", "compaction.request", "compaction.tool_call", "compaction.tool_result", "decision.box_image", "detect.blocked", "detect.call_blocked", "detect.output_blocked", "detect.shown_blocked", "detect.hint.ids", "detect.hint.financial", "detect.hint.network", "detect.hint.credentials", "detect.hint.injection", "detect.hint.tool_instructions", "detect.hint.canary_leak", "detect.hint.prompt_leak", "detect.hint.marker_leak", "detect.hint.ungiven_images", "detect.hint.ungiven_links", "detect.hint.tool_leak", "detect.hint.own", "egress.default_repair_guidance", "egress.refusal", "egress.refusal_cut", "egress.rejection", "egress.rejection_found", "egress.hint_unscannable", "egress.hint_provider_tool_leak", "thought.omitted_image", "thought.omitted_link", "thought.omitted_instructions", "session.abandon_gated", "session.tool_denied", "session.tool_aborted", "session.sign_in", "sign_in.link", "sign_in.pending", "sign_in.done", "sign_in.declined", "sign_in.expired", "sign_in.out_of_scope", "session.gate_expired", "session.provider_state_unowned", "session.conversation_unknown", "session.turn_ended", "session.gate_pending", "session.part_skipped", "live.session_ended", "voice.unsupported", "voice.permission", "voice.unavailable", "voice.failed", "voice.empty", "stop.cancelled", "stop.interrupted", "stop.length", "stop.filtered", "stop.provider_error", "stop.stream_incomplete", "stop.step_limit", "composer.model", "composer.effort", "tool.awaiting_user", "tool.completed_hidden", "tool.t2_loader_needs_snapshot", "tool.t2_loader_shape", "tool.t2_loader_output_invalid", "tool.execution_uncertain", "tool.input_invalid", "tool.input_invalid_after_mutate", "tool.output_invalid_after_mutate", "tool.handler_no_output", "tool.did_not_run", "tool.page_no_answer", "tool.page_timed_out", "tool.output_invalid", "tool.not_loaded_t2", "tool.wait_unknown", "tool.wait_cycle", "tool.not_visible", "tool.builtin_not_enabled", "tool.provider_native", "tool.not_registered", "tool.builtin_needs_snapshot", "tool.not_allowed", "tool.not_eligible", "tool.unsupported_type", "tool.agent_call_limit", "tool.agent_failed", "tool.activity_failed", "protocol.not_served", "protocol.profile_type", "protocol.options", "protocol.option_clash", "protocol.base_options", "protocol.id_clash", "protocol.ws_headers", "protocol.builtin_unwritten", "protocol.provider_missing", "protocol.connection", "protocol.part_schema", "protocol.part_invalid", "protocol.key_invalid", "protocol.no_key", "protocol.reply_shape", "protocol.endpoint_url", "protocol.endpoint_host", "protocol.http", "protocol.no_operation", "protocol.definition", "protocol.provider_id_clash", "protocol.history_needed"];
|
|
5
|
+
/** One of {@linkcode LABEL_KEYS}. */
|
|
6
|
+
export type LabelKey = (typeof LABEL_KEYS)[number];
|
|
7
|
+
/**
|
|
8
|
+
* The keys a browser client words or writes: what the user reads (errors,
|
|
9
|
+
* attachment and voice problems, session states) and the tool lines the client
|
|
10
|
+
* puts into history. Only these overrides travel to the browser; the rest
|
|
11
|
+
* (repair prompts, canary, taint, egress) stay on the host.
|
|
12
|
+
*/
|
|
13
|
+
export declare const CLIENT_LABEL_KEYS: readonly ["attachments.too_many_files", "attachments.too_many_of_kind", "attachments.file_too_large", "attachments.turn_too_large", "attachments.not_accepted", "attachments.mime_not_allowed", "input.too_long", "attachments.limits_unconfigured", "detect.blocked", "error.config", "error.request", "error.input", "error.action", "error.auth", "error.rate_limit", "error.unsupported", "error.unavailable", "error.bad_response", "error.network", "error.timeout", "error.safety", "error.blocked", "error.declined", "error.failed", "error.cancelled", "error.internal", "session.abandon_gated", "session.tool_denied", "session.sign_in", "session.gate_expired", "session.turn_ended", "session.gate_pending", "session.part_skipped", "live.session_ended", "tool.awaiting_user", "tool.completed_hidden", "tool.execution_uncertain", "voice.unsupported", "voice.permission", "voice.unavailable", "voice.failed", "voice.empty", "stop.cancelled", "stop.interrupted", "stop.length", "stop.filtered", "stop.provider_error", "stop.stream_incomplete", "stop.step_limit", "composer.model", "composer.effort"];
|
|
14
|
+
/** One of {@linkcode CLIENT_LABEL_KEYS}. */
|
|
15
|
+
export type ClientLabelKey = (typeof CLIENT_LABEL_KEYS)[number];
|
|
16
|
+
/** Host-supplied replacement templates, `{param}` placeholders included. */
|
|
17
|
+
export type LabelOverrides = Partial<Record<LabelKey, string>>;
|
|
18
|
+
/**
|
|
19
|
+
* What each key is: when the kernel uses it, who reads it, and the placeholders it takes. For the
|
|
20
|
+
* builders who replace the wording; the field catalog reads it for `labels.<key>`.
|
|
21
|
+
*/
|
|
22
|
+
export declare const LABEL_NOTES: Record<LabelKey, string>;
|
|
23
|
+
export declare function labelPlaceholders(key: LabelKey): readonly string[];
|
|
24
|
+
/** `owner` names where the overrides came from in the error. */
|
|
25
|
+
export declare function validateLabelOverrides(entries: LabelOverrides, owner: string): void;
|
|
26
|
+
/** Process-wide; a profile's own `labels` wins over these. */
|
|
27
|
+
export declare function overrideLabels(entries: LabelOverrides): void;
|
|
28
|
+
/** Remove every label override. */
|
|
29
|
+
export declare function resetLabels(): void;
|
|
30
|
+
/** The wording for a key, with a profile's override applied and the params filled in. */
|
|
31
|
+
export declare function labelText(key: LabelKey, params?: LabelParams, profileLabels?: LabelOverrides): string;
|
|
32
|
+
/** Overrides only, resolved on the host; keys without one fall back to the defaults the client ships with. */
|
|
33
|
+
export declare function clientLabels(profileLabels?: LabelOverrides): LabelOverrides;
|
|
34
|
+
/** Ignores overrides. */
|
|
35
|
+
export declare function labelDefault(key: LabelKey, params?: LabelParams): string;
|
|
36
|
+
/** Every label with its default text, named by the profile path that overrides it: `labels.<key>`. */
|
|
37
|
+
export declare function labelCatalogRows(): readonly {
|
|
38
|
+
name: string;
|
|
39
|
+
text: string;
|
|
40
|
+
}[];
|