@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,33 +1,55 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Build-time compiler for
|
|
2
|
+
* Build-time compiler for a host's patterns, behind `@theoremjs/agents/guardrails/compile`.
|
|
3
3
|
*
|
|
4
|
-
* The streaming
|
|
4
|
+
* The streaming hold reads each pattern as an automaton that accepts
|
|
5
5
|
* every match of it and more, so it can hold exactly the text a match could
|
|
6
6
|
* still be under way in. Building those automata takes a regex engine (refa)
|
|
7
7
|
* and time a Worker cold start cannot spare, so it runs here, at build time:
|
|
8
|
-
* `agents
|
|
8
|
+
* `agents detect-compile` writes the tables, and `guardrails.detect` loads them.
|
|
9
9
|
*
|
|
10
|
-
* An automaton drops its pattern's assertions: a lookbehind, `\b`,
|
|
11
|
-
* match nothing, and a lookahead
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
10
|
+
* An automaton drops its pattern's assertions: a lookbehind, `\b`, `^`, and `$`
|
|
11
|
+
* match nothing, and a lookahead is skipped, with its text read after what
|
|
12
|
+
* precedes it wherever the match may end before that text does. A bounded
|
|
13
|
+
* repeat over `COUNT_LIMIT` is unbounded. An optional repeat of one character
|
|
14
|
+
* class that opens the pattern is left out and its class named in `leads`:
|
|
15
|
+
* the stream reads a match as starting where the run of that class it is in
|
|
16
|
+
* started. An inline modifier's flags are set on the whole pattern. Each
|
|
17
|
+
* change only widens what it accepts, so the hold can only hold more than it
|
|
18
|
+
* must. A backreference to text that varies has no automaton;
|
|
15
19
|
* compiling it fails.
|
|
16
20
|
*
|
|
17
21
|
* @module
|
|
18
22
|
*/
|
|
19
|
-
import
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
import type { DetectSpec } from './detectors.js';
|
|
24
|
+
import { type AutomatonData, type CompiledPatterns, type HostPattern } from './host-patterns.js';
|
|
25
|
+
/**
|
|
26
|
+
* What makes `source` slow on hostile text, or `undefined`. A source that does not parse is
|
|
27
|
+
* not this check's to report: whatever reads it says so.
|
|
28
|
+
*/
|
|
29
|
+
declare function slowPatternProblem(source: string, flags?: string): string | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* The table a detector needs for the host's `patterns`: each checked, and their automaton. A
|
|
32
|
+
* pattern is refused when it does not compile, matches the empty text, is sticky, could hang
|
|
33
|
+
* or get slow on long text (`slowProblem`), or has no automaton the stream can hold by (a
|
|
34
|
+
* backreference to text that varies).
|
|
35
|
+
*/
|
|
36
|
+
declare function compilePatterns(patterns: readonly HostPattern[]): CompiledPatterns;
|
|
37
|
+
/**
|
|
38
|
+
* `detect` with the table compiled for every detector's `patterns`, for a host that compiles as
|
|
39
|
+
* it starts in place of `agents detect-compile` at build time. A table already set is replaced.
|
|
40
|
+
*/
|
|
41
|
+
declare function compileDetect<Spec extends DetectSpec>(detect: Spec): Spec;
|
|
42
|
+
/** The table for each detector `detect` gives patterns, by detector. */
|
|
43
|
+
declare function compileDetectTables(detect: DetectSpec): Record<string, CompiledPatterns>;
|
|
44
|
+
/** `tables` as a module exporting them as `compiledDetect`, each to set as its detector's `compiled`. */
|
|
45
|
+
declare function compiledDetectModule(tables: Record<string, CompiledPatterns>): string;
|
|
24
46
|
/**
|
|
25
47
|
* Everything `egress-automata.ts` holds, from the bundled patterns as they are
|
|
26
48
|
* now: the injection patterns reversed, and the forward and reversed automata.
|
|
27
49
|
*/
|
|
28
50
|
declare function bundledEgressAutomata(): {
|
|
29
51
|
reversedPatterns: RegExp[];
|
|
30
|
-
forward:
|
|
31
|
-
reversed:
|
|
52
|
+
forward: AutomatonData;
|
|
53
|
+
reversed: AutomatonData;
|
|
32
54
|
};
|
|
33
|
-
export { bundledEgressAutomata,
|
|
55
|
+
export { bundledEgressAutomata, compileDetect, compileDetectTables, compiledDetectModule, compilePatterns, slowPatternProblem, };
|
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Build-time compiler for
|
|
2
|
+
* Build-time compiler for a host's patterns, behind `@theoremjs/agents/guardrails/compile`.
|
|
3
3
|
*
|
|
4
|
-
* The streaming
|
|
4
|
+
* The streaming hold reads each pattern as an automaton that accepts
|
|
5
5
|
* every match of it and more, so it can hold exactly the text a match could
|
|
6
6
|
* still be under way in. Building those automata takes a regex engine (refa)
|
|
7
7
|
* and time a Worker cold start cannot spare, so it runs here, at build time:
|
|
8
|
-
* `agents
|
|
8
|
+
* `agents detect-compile` writes the tables, and `guardrails.detect` loads them.
|
|
9
9
|
*
|
|
10
|
-
* An automaton drops its pattern's assertions: a lookbehind, `\b`,
|
|
11
|
-
* match nothing, and a lookahead
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
10
|
+
* An automaton drops its pattern's assertions: a lookbehind, `\b`, `^`, and `$`
|
|
11
|
+
* match nothing, and a lookahead is skipped, with its text read after what
|
|
12
|
+
* precedes it wherever the match may end before that text does. A bounded
|
|
13
|
+
* repeat over `COUNT_LIMIT` is unbounded. An optional repeat of one character
|
|
14
|
+
* class that opens the pattern is left out and its class named in `leads`:
|
|
15
|
+
* the stream reads a match as starting where the run of that class it is in
|
|
16
|
+
* started. An inline modifier's flags are set on the whole pattern. Each
|
|
17
|
+
* change only widens what it accepts, so the hold can only hold more than it
|
|
18
|
+
* must. A backreference to text that varies has no automaton;
|
|
15
19
|
* compiling it fails.
|
|
16
20
|
*
|
|
17
21
|
* @module
|
|
18
22
|
*/
|
|
19
23
|
import { RegExpParser, visitRegExpAST } from '@eslint-community/regexpp';
|
|
20
24
|
import { JS, NFA } from 'refa';
|
|
25
|
+
import { analyse } from 'scslre';
|
|
21
26
|
import { EGRESS_PATTERNS } from './egress-patterns.js';
|
|
22
|
-
import { assertEgressRules, EGRESS_COMPILER_VERSION, ruleFingerprint, } from './egress-rules.js';
|
|
23
27
|
import { TheoremError } from './error.js';
|
|
28
|
+
import { MAX_PATTERNS, PATTERN_COMPILER_VERSION, patternProblem, patternSources, } from './host-patterns.js';
|
|
24
29
|
const MAX_CHAR = 0xffff;
|
|
25
30
|
/**
|
|
26
31
|
* A bounded repeat longer than this is read as unbounded: the hold cannot
|
|
@@ -48,49 +53,96 @@ function reversedElement(element) {
|
|
|
48
53
|
case 'CharacterClass':
|
|
49
54
|
return element;
|
|
50
55
|
default:
|
|
51
|
-
//
|
|
56
|
+
// labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
|
|
52
57
|
throw new Error(`cannot reverse a ${element.type} element`);
|
|
53
58
|
}
|
|
54
59
|
}
|
|
55
60
|
/**
|
|
56
|
-
* The pattern with its assertions loosened
|
|
57
|
-
*
|
|
58
|
-
*
|
|
61
|
+
* The pattern with its assertions loosened and a long bounded repeat
|
|
62
|
+
* unbounded. A lookbehind (and `\b`, `^`, `$`, which parse to lookarounds)
|
|
63
|
+
* matches the empty string. A lookahead:
|
|
64
|
+
*
|
|
65
|
+
* - no longer than what must follow it is skipped: the match has read its text;
|
|
66
|
+
* - with nothing after it is read or skipped;
|
|
67
|
+
* - otherwise is skipped, and what precedes it followed by its text is an
|
|
68
|
+
* alternative of the pattern (in `ends`), so the automaton is still under
|
|
69
|
+
* way, and then at a match, while the text that settles it arrives.
|
|
59
70
|
*/
|
|
60
|
-
function loosened(alternatives) {
|
|
61
|
-
return alternatives.map((concat) =>
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
71
|
+
function loosened(alternatives, after, ends) {
|
|
72
|
+
return alternatives.map((concat) => {
|
|
73
|
+
const elements = [];
|
|
74
|
+
concat.elements.forEach((element, i) => {
|
|
75
|
+
const rest = lengthOf(concat.elements.slice(i + 1));
|
|
76
|
+
elements.push(...loosenedElement(element, { min: after.min + rest.min, max: after.max + rest.max }, ends && { before: [...ends.before, ...elements], out: ends.out }));
|
|
77
|
+
});
|
|
78
|
+
return { type: 'Concatenation', elements };
|
|
79
|
+
});
|
|
65
80
|
}
|
|
66
|
-
|
|
81
|
+
/** The fewest and the most characters a match of the elements, one after another, reads. */
|
|
82
|
+
function lengthOf(elements) {
|
|
83
|
+
let min = 0;
|
|
84
|
+
let max = 0;
|
|
85
|
+
for (const element of elements) {
|
|
86
|
+
if (element.type === 'Assertion')
|
|
87
|
+
continue;
|
|
88
|
+
if (element.type === 'CharacterClass') {
|
|
89
|
+
min++;
|
|
90
|
+
max++;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (element.type === 'Unknown') {
|
|
94
|
+
max = Number.POSITIVE_INFINITY;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const each = element.alternatives.map((concat) => lengthOf(concat.elements));
|
|
98
|
+
const times = element.type === 'Quantifier' ? element : { min: 1, max: 1 };
|
|
99
|
+
const most = Math.max(...each.map((length) => length.max));
|
|
100
|
+
min += times.min * Math.min(...each.map((length) => length.min));
|
|
101
|
+
max += most === 0 ? 0 : times.max * most;
|
|
102
|
+
}
|
|
103
|
+
return { min, max };
|
|
104
|
+
}
|
|
105
|
+
/** `element` loosened, where `after` characters follow it in a match. */
|
|
106
|
+
function loosenedElement(element, after, ends) {
|
|
67
107
|
switch (element.type) {
|
|
68
108
|
case 'Alternation':
|
|
69
|
-
return [{ ...element, alternatives: loosened(element.alternatives) }];
|
|
70
|
-
case 'Quantifier':
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
109
|
+
return [{ ...element, alternatives: loosened(element.alternatives, after, ends) }];
|
|
110
|
+
case 'Quantifier': {
|
|
111
|
+
const max = element.max > COUNT_LIMIT ? Number.POSITIVE_INFINITY : element.max;
|
|
112
|
+
const inside = max > 1 ? { min: after.min, max: Number.POSITIVE_INFINITY } : after;
|
|
113
|
+
const repeat = { ...element, max, alternatives: loosened(element.alternatives, inside) };
|
|
114
|
+
if (ends) {
|
|
115
|
+
const earlier = { ...repeat, min: 0, max: Number.POSITIVE_INFINITY };
|
|
116
|
+
loosened(element.alternatives, inside, {
|
|
117
|
+
before: max > 1 ? [...ends.before, earlier] : ends.before,
|
|
118
|
+
out: ends.out,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return [repeat];
|
|
122
|
+
}
|
|
123
|
+
case 'Assertion': {
|
|
79
124
|
if (element.kind === 'behind')
|
|
80
125
|
return [];
|
|
126
|
+
const text = loosened(element.alternatives, { min: 0, max: 0 }, ends);
|
|
127
|
+
const { max } = lengthOf([{ type: 'Alternation', alternatives: text }]);
|
|
128
|
+
if (max <= after.min)
|
|
129
|
+
return [];
|
|
130
|
+
const read = { type: 'Alternation', alternatives: text };
|
|
131
|
+
if (after.max > 0) {
|
|
132
|
+
ends?.out.push({ type: 'Concatenation', elements: [...ends.before, read] });
|
|
133
|
+
return [];
|
|
134
|
+
}
|
|
81
135
|
return [
|
|
82
136
|
{
|
|
83
137
|
type: 'Alternation',
|
|
84
|
-
alternatives: [
|
|
85
|
-
{ type: 'Concatenation', elements: [] },
|
|
86
|
-
...loosened(element.alternatives),
|
|
87
|
-
],
|
|
138
|
+
alternatives: [{ type: 'Concatenation', elements: [] }, ...text],
|
|
88
139
|
},
|
|
89
140
|
];
|
|
141
|
+
}
|
|
90
142
|
case 'CharacterClass':
|
|
91
143
|
return [element];
|
|
92
144
|
default:
|
|
93
|
-
//
|
|
145
|
+
// labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
|
|
94
146
|
throw new Error(`cannot loosen a ${element.type} element`);
|
|
95
147
|
}
|
|
96
148
|
}
|
|
@@ -122,30 +174,98 @@ function parsed(pattern) {
|
|
|
122
174
|
const units = JS.toLiteral(expression, { flags: { unicode: false, unicodeSets: false } });
|
|
123
175
|
return JS.Parser.fromLiteral(units).parse({ assertions: 'parse' }).expression.alternatives;
|
|
124
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* The pattern's source spelled so no lint rule has anything to say about it: `[\s\S]` for any
|
|
179
|
+
* character (not `[^]`) and `\v` for the vertical tab (not `\x0b`). Each pair matches the same text.
|
|
180
|
+
*/
|
|
181
|
+
function plainSource(source) {
|
|
182
|
+
let out = '';
|
|
183
|
+
let inClass = false;
|
|
184
|
+
for (let i = 0; i < source.length; i++) {
|
|
185
|
+
const char = source[i];
|
|
186
|
+
if (char === '\\') {
|
|
187
|
+
const next = source.slice(i, i + 4);
|
|
188
|
+
if (next === '\\x0b') {
|
|
189
|
+
out += '\\v';
|
|
190
|
+
i += 3;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
out += source.slice(i, i + 2);
|
|
194
|
+
i++;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else if (!inClass && source.startsWith('[^]', i)) {
|
|
198
|
+
out += '[\\s\\S]';
|
|
199
|
+
i += 2;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
if (char === '[')
|
|
203
|
+
inClass = true;
|
|
204
|
+
else if (char === ']')
|
|
205
|
+
inClass = false;
|
|
206
|
+
out += char;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return out;
|
|
210
|
+
}
|
|
125
211
|
/** A regex literal for the reversed pattern, with the original's flags. */
|
|
126
212
|
function reversedLiteral(pattern) {
|
|
127
213
|
const literal = JS.toLiteral(reversed(parsed(pattern)), {
|
|
128
214
|
flags: { global: true, unicode: false, sticky: false },
|
|
129
215
|
});
|
|
130
|
-
return new RegExp(literal.source, literal.flags);
|
|
216
|
+
return new RegExp(plainSource(literal.source), literal.flags);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* The pattern split at an optional repeat of one character class that opens
|
|
220
|
+
* it: the class, and the rest. Counted in the automaton, the repeat would keep
|
|
221
|
+
* a state per repeat alive at every character of a run of the class.
|
|
222
|
+
*/
|
|
223
|
+
function led(alternatives) {
|
|
224
|
+
const [concat] = alternatives;
|
|
225
|
+
if (alternatives.length !== 1 || !concat)
|
|
226
|
+
return { rest: alternatives };
|
|
227
|
+
const [first, ...after] = concat.elements;
|
|
228
|
+
if (first?.type === 'Alternation' && first.alternatives.length === 1) {
|
|
229
|
+
const [inner] = first.alternatives;
|
|
230
|
+
return led([{ type: 'Concatenation', elements: [...(inner?.elements ?? []), ...after] }]);
|
|
231
|
+
}
|
|
232
|
+
if (first?.type !== 'Quantifier' || first.min !== 0 || first.max < 2) {
|
|
233
|
+
return { rest: alternatives };
|
|
234
|
+
}
|
|
235
|
+
const [repeated] = first.alternatives;
|
|
236
|
+
const [only] = repeated?.elements ?? [];
|
|
237
|
+
if (first.alternatives.length !== 1 || repeated?.elements.length !== 1) {
|
|
238
|
+
return { rest: alternatives };
|
|
239
|
+
}
|
|
240
|
+
return only?.type === 'CharacterClass'
|
|
241
|
+
? { lead: only.characters, rest: [{ type: 'Concatenation', elements: after }] }
|
|
242
|
+
: { rest: alternatives };
|
|
131
243
|
}
|
|
132
244
|
function nfaOf(alternatives) {
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
245
|
+
const ends = [];
|
|
246
|
+
const whole = [...loosened(alternatives, { min: 0, max: 0 }, { before: [], out: ends }), ...ends];
|
|
247
|
+
const { lead, rest } = led(whole);
|
|
248
|
+
const build = (from) => {
|
|
249
|
+
const nfa = NFA.fromRegex(from, { maxCharacter: MAX_CHAR });
|
|
250
|
+
nfa.removeUnreachable();
|
|
251
|
+
return { initial: nfa.initial, nodes: [...nfa.nodes()], finals: nfa.finals };
|
|
252
|
+
};
|
|
253
|
+
const nfa = build(rest);
|
|
254
|
+
if (!lead)
|
|
255
|
+
return nfa;
|
|
256
|
+
return nfa.finals.has(nfa.initial) ? build(whole) : { ...nfa, lead };
|
|
136
257
|
}
|
|
137
258
|
/** The union of the patterns' automata as tables, nodes tagged with their pattern. */
|
|
138
259
|
function automatonData(patterns) {
|
|
139
260
|
const nfas = patterns.map(nfaOf);
|
|
140
261
|
const bounds = new Set([0]);
|
|
141
262
|
for (const nfa of nfas) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
263
|
+
const sets = nfa.nodes.flatMap((node) => [...node.out.values()]);
|
|
264
|
+
for (const set of nfa.lead ? [...sets, nfa.lead] : sets) {
|
|
265
|
+
for (const range of set.ranges) {
|
|
266
|
+
bounds.add(range.min);
|
|
267
|
+
if (range.max < MAX_CHAR)
|
|
268
|
+
bounds.add(range.max + 1);
|
|
149
269
|
}
|
|
150
270
|
}
|
|
151
271
|
}
|
|
@@ -194,32 +314,106 @@ function automatonData(patterns) {
|
|
|
194
314
|
nodes.push(row);
|
|
195
315
|
}
|
|
196
316
|
});
|
|
197
|
-
|
|
317
|
+
const leads = nfas.map(({ lead }) => (lead ? charsetId(lead.ranges) : -1));
|
|
318
|
+
return { classStarts, charsets, initials, leads, nodes };
|
|
319
|
+
}
|
|
320
|
+
function patternError(message) {
|
|
321
|
+
return new TheoremError('config', `compilePatterns: ${message}`);
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Why `pattern` could take far longer than the text is long, or `undefined`: a repeat that
|
|
325
|
+
* matches the same text in more than one way, or one the engine reads again from every position.
|
|
326
|
+
*/
|
|
327
|
+
function slowProblem(pattern) {
|
|
328
|
+
const [report] = analyse(pattern, { maxReports: 1 }).reports;
|
|
329
|
+
if (!report)
|
|
330
|
+
return undefined;
|
|
331
|
+
const repeat = report.type === 'Trade' ? report.startQuant.raw : report.quant.raw;
|
|
332
|
+
// labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
|
|
333
|
+
return report.type === 'Move'
|
|
334
|
+
? `gets slow on long text: its time grows with the square of the text. Bound the repeat ${repeat} ({1,64} in place of + or *)`
|
|
335
|
+
: `can hang on text that nearly matches: the repeat ${repeat} matches the same text in more than one way. Bound it ({1,64} in place of + or *) or make its parts unable to overlap`;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* What makes `source` slow on hostile text, or `undefined`. A source that does not parse is
|
|
339
|
+
* not this check's to report: whatever reads it says so.
|
|
340
|
+
*/
|
|
341
|
+
function slowPatternProblem(source, flags = '') {
|
|
342
|
+
let regex;
|
|
343
|
+
try {
|
|
344
|
+
regex = new RegExp(source, flags);
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
return undefined;
|
|
348
|
+
}
|
|
349
|
+
return slowProblem(regex);
|
|
198
350
|
}
|
|
199
|
-
/**
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
351
|
+
/**
|
|
352
|
+
* The table a detector needs for the host's `patterns`: each checked, and their automaton. A
|
|
353
|
+
* pattern is refused when it does not compile, matches the empty text, is sticky, could hang
|
|
354
|
+
* or get slow on long text (`slowProblem`), or has no automaton the stream can hold by (a
|
|
355
|
+
* backreference to text that varies).
|
|
356
|
+
*/
|
|
357
|
+
function compilePatterns(patterns) {
|
|
358
|
+
if (patterns.length > MAX_PATTERNS) {
|
|
359
|
+
throw patternError(`${patterns.length} patterns; a detector takes at most ${MAX_PATTERNS}`); // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
|
|
360
|
+
}
|
|
361
|
+
patterns.forEach((pattern, index) => {
|
|
362
|
+
const problem = patternProblem(`patterns[${index}]`, pattern);
|
|
363
|
+
if (problem !== undefined)
|
|
364
|
+
throw patternError(problem);
|
|
365
|
+
});
|
|
366
|
+
const sources = patternSources(patterns);
|
|
367
|
+
const alternatives = sources.map(({ name, source, flags }) => {
|
|
368
|
+
const slow = slowProblem(new RegExp(source, flags));
|
|
369
|
+
if (slow !== undefined)
|
|
370
|
+
throw patternError(`${name}: /${source}/${flags} ${slow}`);
|
|
203
371
|
try {
|
|
204
|
-
const units = parsed(
|
|
372
|
+
const units = parsed(new RegExp(source, flags));
|
|
205
373
|
nfaOf(units);
|
|
206
374
|
return units;
|
|
207
375
|
}
|
|
208
376
|
catch (err) {
|
|
209
|
-
throw
|
|
377
|
+
throw patternError(`${name}: /${source}/${flags} has no automaton the stream can hold for (${err instanceof Error ? err.message : String(err)})`);
|
|
210
378
|
}
|
|
211
379
|
});
|
|
212
380
|
return {
|
|
213
|
-
compiler:
|
|
214
|
-
|
|
381
|
+
compiler: PATTERN_COMPILER_VERSION,
|
|
382
|
+
patterns: sources,
|
|
215
383
|
automaton: automatonData(alternatives),
|
|
216
384
|
};
|
|
217
385
|
}
|
|
218
|
-
/**
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
386
|
+
/**
|
|
387
|
+
* `detect` with the table compiled for every detector's `patterns`, for a host that compiles as
|
|
388
|
+
* it starts in place of `agents detect-compile` at build time. A table already set is replaced.
|
|
389
|
+
*/
|
|
390
|
+
function compileDetect(detect) {
|
|
391
|
+
if (typeof detect === 'string')
|
|
392
|
+
return detect;
|
|
393
|
+
const tables = compileDetectTables(detect);
|
|
394
|
+
const rules = Object.entries(detect).map(([detector, rule]) => {
|
|
395
|
+
const compiled = tables[detector];
|
|
396
|
+
return [detector, compiled && typeof rule !== 'string' ? { ...rule, compiled } : rule];
|
|
397
|
+
});
|
|
398
|
+
return Object.fromEntries(rules);
|
|
399
|
+
}
|
|
400
|
+
/** The table for each detector `detect` gives patterns, by detector. */
|
|
401
|
+
function compileDetectTables(detect) {
|
|
402
|
+
if (typeof detect === 'string')
|
|
403
|
+
return {};
|
|
404
|
+
const tables = {};
|
|
405
|
+
for (const [detector, rule] of Object.entries(detect)) {
|
|
406
|
+
if (typeof rule === 'string' || !rule.patterns?.length)
|
|
407
|
+
continue;
|
|
408
|
+
tables[detector] = compilePatterns(rule.patterns);
|
|
409
|
+
}
|
|
410
|
+
return tables;
|
|
411
|
+
}
|
|
412
|
+
/** `tables` as a module exporting them as `compiledDetect`, each to set as its detector's `compiled`. */
|
|
413
|
+
function compiledDetectModule(tables) {
|
|
414
|
+
// labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
|
|
415
|
+
return `// Generated by \`agents detect-compile\`. Do not edit: change the patterns and compile again.
|
|
416
|
+
export const compiledDetect = ${JSON.stringify(tables)};
|
|
223
417
|
`;
|
|
224
418
|
}
|
|
225
419
|
/**
|
|
@@ -234,4 +428,4 @@ function bundledEgressAutomata() {
|
|
|
234
428
|
reversed: automatonData(injection.map(({ pattern }) => reversed(parsed(pattern)))),
|
|
235
429
|
};
|
|
236
430
|
}
|
|
237
|
-
export { bundledEgressAutomata,
|
|
431
|
+
export { bundledEgressAutomata, compileDetect, compileDetectTables, compiledDetectModule, compilePatterns, slowPatternProblem, };
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
8
|
+
import type { SensitiveGroup } from './sensitive-groups.js';
|
|
9
9
|
declare const SYSTEM_BOUNDARY: RegExp;
|
|
10
10
|
/** What a match of the pattern means: the rule it trips, or the blob its filter decodes. */
|
|
11
11
|
type EgressPatternKind = 'injection' | 'sensitive' | 'card' | 'boundary' | 'base64' | 'hex' | 'spaced' | 'pipe' | 'image' | 'link';
|
|
@@ -20,5 +20,7 @@ interface EgressPattern {
|
|
|
20
20
|
* the rewritten views (typo, Unicode, rot13, leet, URL) match those alone.
|
|
21
21
|
*/
|
|
22
22
|
declare const EGRESS_PATTERNS: readonly EgressPattern[];
|
|
23
|
+
/** A reply repeating `note`, a canary note's own words (`canaryNoteMarker`), as written, case aside. */
|
|
24
|
+
declare function notePattern(note: string): RegExp;
|
|
23
25
|
export type { EgressPattern, EgressPatternKind };
|
|
24
|
-
export { EGRESS_PATTERNS, SYSTEM_BOUNDARY };
|
|
26
|
+
export { EGRESS_PATTERNS, notePattern, SYSTEM_BOUNDARY };
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { IMAGE_PATTERNS, LINK_PATTERNS } from './egress-urls.js';
|
|
9
9
|
import { BASE64_BLOB, HEX_BLOB, INJECTION_PATTERNS, PIPE_SEPARATED, SPACED_LETTERS, } from './injection-patterns.js';
|
|
10
10
|
import { CARD_CANDIDATE, SENSITIVE_PATTERNS } from './sensitive.js';
|
|
11
|
-
const SYSTEM_BOUNDARY = /This turn\x27s canary is|<\s*(?:\/\s*)?user_data(?:\s*(?:\/\s*)?>)?/i; //
|
|
11
|
+
const SYSTEM_BOUNDARY = /This turn\x27s canary is|Your canary token is|<\s*(?:\/\s*)?user_data(?:\s*(?:\/\s*)?>)?/i; // labels-exempt: developer contract / internal diagnostic — not end-user or model copy (P2)
|
|
12
12
|
/**
|
|
13
13
|
* Patterns matched on the reply as written. The injection patterns come first:
|
|
14
14
|
* the rewritten views (typo, Unicode, rot13, leet, URL) match those alone.
|
|
@@ -29,4 +29,8 @@ const EGRESS_PATTERNS = [
|
|
|
29
29
|
...IMAGE_PATTERNS.map((pattern) => ({ kind: 'image', pattern })),
|
|
30
30
|
...LINK_PATTERNS.map((pattern) => ({ kind: 'link', pattern })),
|
|
31
31
|
];
|
|
32
|
-
|
|
32
|
+
/** A reply repeating `note`, a canary note's own words (`canaryNoteMarker`), as written, case aside. */
|
|
33
|
+
function notePattern(note) {
|
|
34
|
+
return new RegExp(note.replace(/[\\^$.*+?()[\]{}|/-]/g, '\\$&'), 'gi');
|
|
35
|
+
}
|
|
36
|
+
export { EGRESS_PATTERNS, notePattern, SYSTEM_BOUNDARY };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
2
|
+
* The detectors, Theorem's and the host's own, run on a reply as it streams.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Each matches its patterns on the reply as written and, for
|
|
5
5
|
* injection phrasing, on
|
|
6
6
|
* rewrites of it (typo-folded, Unicode-folded, rot13, leet, URL-decoded, read
|
|
7
7
|
* backwards). The stream keeps each rewrite growing with the reply and, for
|
|
@@ -11,29 +11,40 @@
|
|
|
11
11
|
* later starts at or after that place, so none of it has been released.
|
|
12
12
|
*
|
|
13
13
|
* A match whose outcome no later text can change is settled; a settled match
|
|
14
|
-
* of the pattern itself (not the automaton) is a hit, and
|
|
15
|
-
*
|
|
16
|
-
* reply costs time in proportion to its length.
|
|
14
|
+
* of the pattern itself (not the automaton) is a hit, and does what
|
|
15
|
+
* `guardrails.detect` sets (`detect-stream.ts`). Each character is read a bounded number of times, so a
|
|
16
|
+
* long reply costs time in proportion to its length.
|
|
17
17
|
*
|
|
18
18
|
* @module
|
|
19
19
|
*/
|
|
20
|
-
import {
|
|
21
|
-
import { type EgressAutomatonData } from './egress-rules.js';
|
|
20
|
+
import type { Detector, ResolvedAllow } from './detectors.js';
|
|
22
21
|
import { type GivenUrls } from './egress-urls.js';
|
|
23
|
-
import type {
|
|
24
|
-
|
|
22
|
+
import type { CompiledPatterns, HostMatcher } from './host-patterns.js';
|
|
23
|
+
import { type OwnTools } from './tool-leak.js';
|
|
24
|
+
import type { Severity } from './types.js';
|
|
25
|
+
/** A settled match. */
|
|
25
26
|
interface EgressStreamHit {
|
|
26
27
|
rule: string;
|
|
27
28
|
severity: Severity;
|
|
28
29
|
/** Where in the reply the match starts (the start of its rewrite's source). */
|
|
29
30
|
start: number;
|
|
31
|
+
/** The detector whose match it is, or the id of the host's own. */
|
|
32
|
+
detector: string;
|
|
30
33
|
}
|
|
31
34
|
interface EgressStream {
|
|
32
|
-
/**
|
|
33
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Read the next piece of the reply; the matches that settled, none when the reply is clear so
|
|
37
|
+
* far.
|
|
38
|
+
*/
|
|
39
|
+
push: (chunk: string) => EgressStreamHit[];
|
|
34
40
|
/** The earliest index of the reply a match could still start at. */
|
|
35
41
|
holdFrom: () => number;
|
|
36
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Reads Theorem's automata, the most of the kernel's size, the first time a stream needs them.
|
|
45
|
+
* Every gate's constructor waits for this, so an app that never streams a reply never loads them.
|
|
46
|
+
*/
|
|
47
|
+
declare function loadEgressAutomata(): Promise<void>;
|
|
37
48
|
/**
|
|
38
49
|
* Text grown at its end, with what its latest update added. Reading a grown
|
|
39
50
|
* string copies the whole of it, so what reads each new character reads it
|
|
@@ -55,9 +66,11 @@ interface View extends Grown {
|
|
|
55
66
|
update: () => void;
|
|
56
67
|
}
|
|
57
68
|
/**
|
|
58
|
-
* `typoNormalize` of the source. It rewrites whole words (`\w` runs)
|
|
59
|
-
*
|
|
60
|
-
*
|
|
69
|
+
* `typoNormalize` of the source. It rewrites whole words (`\w` runs), so a
|
|
70
|
+
* word settles when a non-word character ends it, or as soon as it can no
|
|
71
|
+
* longer fold to a target (then the rest of it passes as is). A corrected word
|
|
72
|
+
* may be a letter longer or shorter than the word as written, so each
|
|
73
|
+
* character keeps the source index it stands for.
|
|
61
74
|
*/
|
|
62
75
|
declare function typoView(source: View): View;
|
|
63
76
|
/** A rewrite whose characters keep their own reply index. */
|
|
@@ -71,7 +84,7 @@ interface MappedView extends View {
|
|
|
71
84
|
* or in the mapped text), an emoji run after a letter until the character
|
|
72
85
|
* after it, a backslash until the character after it.
|
|
73
86
|
*/
|
|
74
|
-
declare function
|
|
87
|
+
declare function normalizedReplyView(reply: Grown): MappedView;
|
|
75
88
|
/**
|
|
76
89
|
* `decodeUrlRuns` of the reply: a run of `%XX` escapes is unsettled until the
|
|
77
90
|
* character after it shows the run is over. Its decoded text holds from the
|
|
@@ -79,27 +92,32 @@ declare function normalizedView(reply: Grown): MappedView;
|
|
|
79
92
|
*/
|
|
80
93
|
declare function urlView(reply: Grown): MappedView;
|
|
81
94
|
interface EgressStreamOptions {
|
|
82
|
-
/** The
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
95
|
+
/** The detectors whose matches the stream settles. Default none. */
|
|
96
|
+
detect?: readonly Detector[];
|
|
97
|
+
/** What `ungiven_images` and `ungiven_links` let through besides the given URLs. */
|
|
98
|
+
allow?: ResolvedAllow;
|
|
99
|
+
/**
|
|
100
|
+
* Whether `ungiven_links` leaves an image's own markup alone. Default: `ungiven_images` is
|
|
101
|
+
* among `detect`. Set when another reader has the images.
|
|
102
|
+
*/
|
|
103
|
+
skipImages?: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* The host's own patterns, read on the text as written, with their compiled table: those it
|
|
106
|
+
* adds to a detector, or those of a detector of its own, named by its id.
|
|
107
|
+
*/
|
|
108
|
+
own?: readonly {
|
|
109
|
+
detector: string;
|
|
110
|
+
compiled: CompiledPatterns;
|
|
111
|
+
matchers: readonly HostMatcher[];
|
|
112
|
+
}[];
|
|
113
|
+
/** The URLs the model was given, for `ungiven_images` and `ungiven_links`. */
|
|
94
114
|
given?: GivenUrls;
|
|
115
|
+
/** The words of the profile's own canary note, for `marker_leak` (`boundaryNote`). */
|
|
116
|
+
note?: string;
|
|
117
|
+
/** The names of the profile's tools and of their parameters, for `tool_leak`. */
|
|
118
|
+
tools?: OwnTools;
|
|
95
119
|
}
|
|
96
|
-
/** Scans the
|
|
120
|
+
/** Scans the detectors' patterns, Theorem's and the host's own, as a reply streams. */
|
|
97
121
|
declare function createEgressStream(options?: EgressStreamOptions): EgressStream;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
/** The streaming plan for `enforce`, when the stream knows its checks. */
|
|
101
|
-
declare function streamPlanOf(enforce: EgressEnforcer): EgressStreamPlan | undefined;
|
|
102
|
-
/** Tell the gate `enforce` runs exactly the checks `plan` streams. */
|
|
103
|
-
declare function registerStreamPlan(enforce: EgressEnforcer, plan: EgressStreamPlan): void;
|
|
104
|
-
export type { EgressStream, EgressStreamHit, EgressStreamOptions, EgressStreamPlan, Grown, MappedView, View, };
|
|
105
|
-
export { createEgressStream, normalizedView, registerStreamPlan, streamPlanOf, typoView, urlView };
|
|
122
|
+
export type { EgressStream, EgressStreamHit, EgressStreamOptions, Grown, MappedView, View };
|
|
123
|
+
export { createEgressStream, loadEgressAutomata, normalizedReplyView, typoView, urlView };
|