@theoremjs/agents 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +277 -995
- package/esm/mod.d.ts +34 -20
- package/esm/mod.js +19 -12
- package/esm/src/cli/commands/bench.js +36 -14
- package/esm/src/cli/commands/detect-compile.d.ts +17 -0
- package/esm/src/cli/commands/detect-compile.js +22 -0
- package/esm/src/cli/commands/eval.d.ts +3 -3
- package/esm/src/cli/commands/fuzz-canary.js +55 -16
- package/esm/src/cli/commands/profile.js +4 -4
- package/esm/src/cli/commands/run.d.ts +2 -2
- package/esm/src/cli/commands/run.js +1 -1
- package/esm/src/cli/commands/test.d.ts +4 -3
- package/esm/src/cli/commands/test.js +2 -2
- package/esm/src/cli/index.js +9 -9
- package/esm/src/cli/matrix/fixtures.js +25 -30
- package/esm/src/evals/attachments.d.ts +1 -0
- package/esm/src/evals/attachments.js +4 -2
- package/esm/src/evals/breakdown.d.ts +2 -0
- package/esm/src/evals/breakdown.js +1 -0
- package/esm/src/evals/graders/answer.d.ts +3 -0
- package/esm/src/evals/graders/answer.js +1 -0
- package/esm/src/evals/graders/code.d.ts +7 -31
- package/esm/src/evals/graders/code.js +4 -25
- package/esm/src/evals/graders/judge.d.ts +4 -0
- package/esm/src/evals/graders/judge.js +7 -5
- package/esm/src/evals/graders/latency.d.ts +1 -0
- package/esm/src/evals/graders/latency.js +3 -2
- package/esm/src/evals/graders/live.d.ts +3 -0
- package/esm/src/evals/graders/live.js +2 -0
- package/esm/src/evals/graders/media.js +1 -2
- package/esm/src/evals/graders/shared.js +1 -1
- package/esm/src/evals/graders/transcript.d.ts +2 -0
- package/esm/src/evals/graders/transcript.js +5 -3
- package/esm/src/evals/mod.d.ts +1 -9
- package/esm/src/evals/mod.js +1 -9
- package/esm/src/evals/record.d.ts +6 -0
- package/esm/src/evals/record.js +4 -2
- package/esm/src/evals/rubrics/mod.d.ts +1 -1
- package/esm/src/evals/rubrics/mod.js +1 -1
- package/esm/src/evals/rubrics/mustache.js +1 -1
- package/esm/src/evals/rubrics/types.js +1 -1
- package/esm/src/evals/run.d.ts +9 -52
- package/esm/src/evals/run.js +12 -46
- package/esm/src/evals/suite.d.ts +12 -3
- package/esm/src/evals/suite.js +9 -4
- package/esm/src/evals/summary.d.ts +3 -0
- package/esm/src/evals/summary.js +1 -0
- package/esm/src/evals/trial.d.ts +3 -16
- package/esm/src/evals/trial.js +7 -30
- package/esm/src/evals/types.d.ts +30 -121
- package/esm/src/evals/types.js +3 -16
- package/esm/src/evals/verdict.d.ts +5 -0
- package/esm/src/evals/verdict.js +4 -1
- package/esm/src/guardrails/boundaries.d.ts +41 -0
- package/esm/src/guardrails/boundaries.js +103 -0
- package/esm/src/guardrails/canary-gate.d.ts +1 -0
- package/esm/src/guardrails/canary.d.ts +49 -15
- package/esm/src/guardrails/canary.js +103 -30
- package/esm/src/guardrails/compile-egress.d.ts +6 -5
- package/esm/src/guardrails/compile-egress.js +6 -5
- package/esm/src/guardrails/corpus/canary-egress-attacks.d.ts +3 -1
- package/esm/src/guardrails/corpus/canary-egress-attacks.js +4 -2
- package/esm/src/guardrails/corpus/fuzz-inbound.js +14 -17
- package/esm/src/guardrails/corpus/inbound-payloads.d.ts +2 -0
- package/esm/src/guardrails/corpus/inbound-payloads.js +4 -2
- package/esm/src/guardrails/corpus/live-attacks.d.ts +2 -0
- package/esm/src/guardrails/corpus/live-attacks.js +6 -1
- package/esm/src/guardrails/corpus/mod.d.ts +1 -1
- package/esm/src/guardrails/corpus/secrets.d.ts +3 -3
- package/esm/src/guardrails/corpus/secrets.js +2 -2
- package/esm/src/guardrails/corpus/strings.d.ts +1 -1
- package/esm/src/guardrails/corpus/strings.js +1 -1
- package/esm/src/guardrails/corpus/types.d.ts +5 -1
- package/esm/src/guardrails/credential-rules.d.ts +36 -0
- package/esm/src/guardrails/credential-rules.js +3001 -0
- package/esm/src/guardrails/credential-scan.d.ts +45 -0
- package/esm/src/guardrails/credential-scan.js +172 -0
- package/esm/src/guardrails/destinations.d.ts +45 -0
- package/esm/src/guardrails/destinations.js +234 -0
- package/esm/src/guardrails/detect-at.d.ts +107 -0
- package/esm/src/guardrails/detect-at.js +434 -0
- package/esm/src/guardrails/detect-reply.d.ts +61 -0
- package/esm/src/guardrails/detect-reply.js +95 -0
- package/esm/src/guardrails/detect-stream.d.ts +33 -0
- package/esm/src/guardrails/detect-stream.js +77 -0
- package/esm/src/guardrails/detectors.d.ts +216 -0
- package/esm/src/guardrails/detectors.js +503 -0
- package/esm/src/guardrails/egress-automata.d.ts +4 -6
- package/esm/src/guardrails/egress-automata.js +24095 -4572
- package/esm/src/guardrails/egress-compiler.d.ts +38 -16
- package/esm/src/guardrails/egress-compiler.js +254 -60
- package/esm/src/guardrails/egress-patterns.d.ts +4 -2
- package/esm/src/guardrails/egress-patterns.js +6 -2
- package/esm/src/guardrails/egress-stream.d.ts +54 -36
- package/esm/src/guardrails/egress-stream.js +253 -124
- package/esm/src/guardrails/egress-urls.d.ts +6 -3
- package/esm/src/guardrails/egress-urls.js +14 -22
- package/esm/src/guardrails/egress.d.ts +26 -86
- package/esm/src/guardrails/egress.js +59 -309
- package/esm/src/guardrails/error.d.ts +13 -8
- package/esm/src/guardrails/error.js +25 -18
- package/esm/src/guardrails/event-schemas.d.ts +46 -3
- package/esm/src/guardrails/event-schemas.js +12 -5
- package/esm/src/guardrails/events.d.ts +5 -1
- package/esm/src/guardrails/events.js +4 -1
- package/esm/src/guardrails/hints.d.ts +14 -0
- package/esm/src/guardrails/hints.js +57 -0
- package/esm/src/guardrails/hits.d.ts +7 -1
- package/esm/src/guardrails/hits.js +12 -1
- package/esm/src/guardrails/host-patterns.d.ts +85 -0
- package/esm/src/guardrails/host-patterns.js +173 -0
- package/esm/src/guardrails/injection-patterns.d.ts +6 -1
- package/esm/src/guardrails/injection-patterns.js +33 -1
- package/esm/src/guardrails/injection-reversed.d.ts +9 -0
- package/esm/src/guardrails/injection-reversed.js +49 -0
- package/esm/src/guardrails/injection.d.ts +17 -1
- package/esm/src/guardrails/injection.js +259 -36
- package/esm/src/guardrails/labels.d.ts +40 -0
- package/esm/src/guardrails/labels.js +881 -0
- package/esm/src/guardrails/live-outbound-gate.d.ts +9 -8
- package/esm/src/guardrails/live-outbound-gate.js +100 -107
- package/esm/src/guardrails/mod.d.ts +30 -22
- package/esm/src/guardrails/mod.js +19 -14
- package/esm/src/guardrails/network.d.ts +4 -0
- package/esm/src/guardrails/network.js +21 -19
- package/esm/src/guardrails/normalize.d.ts +15 -1
- package/esm/src/guardrails/normalize.js +34 -1
- package/esm/src/guardrails/policy.d.ts +2 -17
- package/esm/src/guardrails/policy.js +12 -41
- package/esm/src/guardrails/progressive-yield.d.ts +65 -24
- package/esm/src/guardrails/progressive-yield.js +191 -147
- package/esm/src/guardrails/prompt-echo.d.ts +4 -2
- package/esm/src/guardrails/prompt-echo.js +87 -6
- package/esm/src/guardrails/quota.d.ts +4 -1
- package/esm/src/guardrails/quota.js +7 -2
- package/esm/src/guardrails/rules.d.ts +20 -29
- package/esm/src/guardrails/rules.js +23 -30
- package/esm/src/guardrails/sanitize.d.ts +32 -15
- package/esm/src/guardrails/sanitize.js +100 -124
- package/esm/src/guardrails/sensitive-groups.d.ts +21 -0
- package/esm/src/guardrails/sensitive-groups.js +12 -0
- package/esm/src/guardrails/sensitive.d.ts +16 -23
- package/esm/src/guardrails/sensitive.js +168 -47
- package/esm/src/guardrails/serialize.d.ts +1 -0
- package/esm/src/guardrails/testing.d.ts +4 -2
- package/esm/src/guardrails/testing.js +4 -2
- package/esm/src/guardrails/theorem-error.d.ts +5 -2
- package/esm/src/guardrails/theorem-error.js +6 -3
- package/esm/src/guardrails/thought-guard.d.ts +34 -13
- package/esm/src/guardrails/thought-guard.js +264 -64
- package/esm/src/guardrails/tool-directives.d.ts +29 -10
- package/esm/src/guardrails/tool-directives.js +133 -47
- package/esm/src/guardrails/tool-leak.d.ts +26 -0
- package/esm/src/guardrails/tool-leak.js +45 -0
- package/esm/src/guardrails/tool-result.d.ts +45 -14
- package/esm/src/guardrails/tool-result.js +94 -70
- package/esm/src/guardrails/types.d.ts +79 -71
- package/esm/src/guardrails/types.js +11 -7
- package/esm/src/host/client-turn.d.ts +29 -2
- package/esm/src/host/client-turn.js +46 -4
- package/esm/src/host/mint-trace.d.ts +1 -0
- package/esm/src/host/mint-trace.js +3 -2
- package/esm/src/host/mod.d.ts +2 -2
- package/esm/src/host/mod.js +1 -1
- package/esm/src/host/readStreamingJsonStringField.js +2 -43
- package/esm/src/host/reply.d.ts +6 -0
- package/esm/src/host/reply.js +8 -1
- package/esm/src/interface/blocks.d.ts +3 -0
- package/esm/src/interface/blocks.js +84 -14
- package/esm/src/interface/composer-actions.d.ts +4 -0
- package/esm/src/interface/composer-actions.js +5 -3
- package/esm/src/interface/draft.d.ts +6 -0
- package/esm/src/interface/draft.js +22 -11
- package/esm/src/interface/from-profile.d.ts +13 -1
- package/esm/src/interface/from-profile.js +66 -31
- package/esm/src/interface/history.d.ts +9 -3
- package/esm/src/interface/history.js +33 -24
- package/esm/src/interface/inputs.d.ts +1 -0
- package/esm/src/interface/inputs.js +3 -0
- package/esm/src/interface/mod.d.ts +4 -2
- package/esm/src/interface/mod.js +3 -2
- package/esm/src/interface/models.d.ts +7 -0
- package/esm/src/interface/models.js +5 -0
- package/esm/src/interface/pending.d.ts +9 -0
- package/esm/src/interface/pending.js +9 -3
- package/esm/src/interface/profile-interface.js +54 -40
- package/esm/src/interface/session.d.ts +12 -5
- package/esm/src/interface/session.js +17 -10
- package/esm/src/interface/stop.d.ts +13 -0
- package/esm/src/interface/stop.js +28 -0
- package/esm/src/interface/tool-calls.d.ts +14 -2
- package/esm/src/interface/tool-calls.js +64 -10
- package/esm/src/interface/tool-invoke.d.ts +2 -0
- package/esm/src/interface/tool-invoke.js +3 -1
- package/esm/src/interface/tool-media.d.ts +2 -0
- package/esm/src/interface/tool-media.js +2 -1
- package/esm/src/interface/types.d.ts +105 -40
- package/esm/src/interface/types.js +1 -0
- package/esm/src/kernel/api-catalog.d.ts +85 -0
- package/esm/src/kernel/api-catalog.js +229 -0
- package/esm/src/kernel/auth/crypto.d.ts +7 -2
- package/esm/src/kernel/auth/crypto.js +12 -10
- package/esm/src/kernel/auth/oauth.d.ts +2 -1
- package/esm/src/kernel/auth/oauth.js +23 -22
- package/esm/src/kernel/auth/typed-secret.js +2 -2
- package/esm/src/kernel/auth/types.d.ts +13 -0
- package/esm/src/kernel/checkpoint.d.ts +43 -0
- package/esm/src/kernel/checkpoint.js +58 -0
- package/esm/src/kernel/default-scope.d.ts +43 -5
- package/esm/src/kernel/default-scope.js +54 -5
- package/esm/src/kernel/engine/call-trace.d.ts +19 -0
- package/esm/src/kernel/engine/call-trace.js +29 -0
- package/esm/src/kernel/engine/compaction.d.ts +6 -5
- package/esm/src/kernel/engine/compaction.js +12 -11
- package/esm/src/kernel/engine/decision.d.ts +10 -8
- package/esm/src/kernel/engine/decision.js +174 -146
- package/esm/src/kernel/engine/embedding.d.ts +8 -0
- package/esm/src/kernel/engine/embedding.js +118 -0
- package/esm/src/kernel/engine/live-inbound.d.ts +14 -4
- package/esm/src/kernel/engine/live-inbound.js +36 -11
- package/esm/src/kernel/engine/live-ingress.d.ts +6 -0
- package/esm/src/kernel/engine/live-ingress.js +6 -1
- package/esm/src/kernel/engine/repair.js +12 -12
- package/esm/src/kernel/engine/runner/gates.d.ts +2 -2
- package/esm/src/kernel/engine/runner/gates.js +287 -101
- package/esm/src/kernel/engine/runner/mod.d.ts +19 -5
- package/esm/src/kernel/engine/runner/mod.js +107 -56
- package/esm/src/kernel/engine/runner/nested.d.ts +32 -0
- package/esm/src/kernel/engine/runner/nested.js +134 -0
- package/esm/src/kernel/engine/runner/schema-validation.d.ts +24 -3
- package/esm/src/kernel/engine/runner/schema-validation.js +78 -4
- package/esm/src/kernel/engine/runner/stages.d.ts +1 -1
- package/esm/src/kernel/engine/runner/stages.js +1 -8
- package/esm/src/kernel/engine/runner/state.d.ts +33 -12
- package/esm/src/kernel/engine/runner/state.js +11 -1
- package/esm/src/kernel/engine/runner/step-order.d.ts +27 -0
- package/esm/src/kernel/engine/runner/step-order.js +165 -0
- package/esm/src/kernel/engine/runner/steps.d.ts +2 -2
- package/esm/src/kernel/engine/runner/steps.js +329 -169
- package/esm/src/kernel/engine/runner/stream.d.ts +42 -11
- package/esm/src/kernel/engine/runner/stream.js +197 -46
- package/esm/src/kernel/engine/runner/usage.d.ts +5 -5
- package/esm/src/kernel/engine/runner/usage.js +12 -14
- package/esm/src/kernel/engine/session/mod.d.ts +8 -6
- package/esm/src/kernel/engine/session/mod.js +360 -129
- package/esm/src/kernel/engine/session/session-trace.d.ts +10 -10
- package/esm/src/kernel/engine/session/session-trace.js +41 -30
- package/esm/src/kernel/engine/token-estimate.d.ts +10 -64
- package/esm/src/kernel/engine/token-estimate.js +14 -194
- package/esm/src/kernel/engine/tool-trace.d.ts +3 -3
- package/esm/src/kernel/engine/tool-trace.js +2 -1
- package/esm/src/kernel/engine/turn-trace.d.ts +8 -7
- package/esm/src/kernel/engine/turn-trace.js +28 -36
- package/esm/src/kernel/engine/usage.d.ts +6 -0
- package/esm/src/kernel/engine/usage.js +17 -0
- package/esm/src/kernel/interaction-parts.d.ts +3 -0
- package/esm/src/kernel/interaction-parts.js +18 -0
- package/esm/src/kernel/json.d.ts +10 -0
- package/esm/src/kernel/json.js +3 -0
- package/esm/src/kernel/mod.d.ts +38 -11
- package/esm/src/kernel/mod.js +22 -7
- package/esm/src/kernel/profile-graph.d.ts +11 -6
- package/esm/src/kernel/profile-graph.js +14 -7
- package/esm/src/kernel/profile-presence.d.ts +10 -1
- package/esm/src/kernel/profile-presence.js +90 -75
- package/esm/src/kernel/profile-scope.d.ts +7 -3
- package/esm/src/kernel/profile-scope.js +67 -55
- package/esm/src/kernel/protocols/binding.d.ts +65 -0
- package/esm/src/kernel/protocols/binding.js +125 -0
- package/esm/src/kernel/protocols/limits.d.ts +15 -0
- package/esm/src/kernel/protocols/limits.js +28 -0
- package/esm/src/kernel/protocols/mod.d.ts +5 -0
- package/esm/src/kernel/protocols/mod.js +5 -0
- package/esm/src/kernel/protocols/prices.d.ts +36 -0
- package/esm/src/kernel/protocols/prices.js +37 -0
- package/esm/src/kernel/protocols/protocol.d.ts +253 -0
- package/esm/src/kernel/protocols/protocol.js +253 -0
- package/esm/src/kernel/protocols/provider.d.ts +108 -0
- package/esm/src/kernel/protocols/provider.js +143 -0
- package/esm/src/kernel/protocols/runtime.d.ts +55 -0
- package/esm/src/kernel/protocols/runtime.js +534 -0
- package/esm/src/kernel/provider-budget.d.ts +32 -0
- package/esm/src/kernel/provider-budget.js +262 -0
- package/esm/src/kernel/provider-dispatch.d.ts +13 -0
- package/esm/src/kernel/provider-dispatch.js +36 -0
- package/esm/src/kernel/provider-live.d.ts +7 -0
- package/esm/src/kernel/provider-live.js +189 -0
- package/esm/src/kernel/provider-runtime.d.ts +57 -0
- package/esm/src/kernel/provider-runtime.js +524 -0
- package/esm/src/kernel/registry/attachments.d.ts +15 -4
- package/esm/src/kernel/registry/attachments.js +31 -22
- package/esm/src/kernel/registry/catalog.d.ts +6 -0
- package/esm/src/kernel/registry/catalog.js +9 -2
- package/esm/src/kernel/registry/embedding-rules.d.ts +28 -0
- package/esm/src/kernel/registry/embedding-rules.js +66 -0
- package/esm/src/kernel/registry/ingress.d.ts +6 -2
- package/esm/src/kernel/registry/ingress.js +55 -10
- package/esm/src/kernel/registry/kernel-registry.d.ts +3 -0
- package/esm/src/kernel/registry/kernel-registry.js +9 -2
- package/esm/src/kernel/registry/profile-outputs.js +4 -1
- package/esm/src/kernel/registry/profiles.d.ts +38 -14
- package/esm/src/kernel/registry/profiles.js +280 -205
- package/esm/src/kernel/registry/provider-request.d.ts +3 -3
- package/esm/src/kernel/registry/provider-request.js +5 -13
- package/esm/src/kernel/registry/resolve.d.ts +4 -1
- package/esm/src/kernel/registry/resolve.js +59 -58
- package/esm/src/kernel/registry/schemas.d.ts +3 -0
- package/esm/src/kernel/registry/schemas.js +3 -1
- package/esm/src/kernel/registry/slot-fill.d.ts +7 -0
- package/esm/src/kernel/registry/slot-fill.js +22 -0
- package/esm/src/kernel/registry/system-prompt.js +7 -8
- package/esm/src/kernel/registry/vault.d.ts +14 -13
- package/esm/src/kernel/registry/vault.js +1 -14
- package/esm/src/kernel/schema.d.ts +100 -46
- package/esm/src/kernel/schema.js +499 -257
- package/esm/src/kernel/scope.d.ts +12 -5
- package/esm/src/kernel/scope.js +23 -3
- package/esm/src/kernel/stages.d.ts +38 -3
- package/esm/src/kernel/stages.js +82 -39
- package/esm/src/kernel/stop.d.ts +29 -6
- package/esm/src/kernel/stop.js +16 -4
- package/esm/src/kernel/system-parts.js +6 -6
- package/esm/src/kernel/tools/activity-label.d.ts +12 -6
- package/esm/src/kernel/tools/activity-label.js +258 -32
- package/esm/src/kernel/tools/agent.d.ts +66 -0
- package/esm/src/kernel/tools/agent.js +212 -0
- package/esm/src/kernel/tools/coordinate.d.ts +4 -0
- package/esm/src/kernel/tools/coordinate.js +165 -0
- package/esm/src/kernel/tools/events.d.ts +21 -6
- package/esm/src/kernel/tools/events.js +53 -18
- package/esm/src/kernel/tools/execute.d.ts +47 -11
- package/esm/src/kernel/tools/execute.js +508 -136
- package/esm/src/kernel/tools/gate-answer.d.ts +12 -2
- package/esm/src/kernel/tools/gate-answer.js +17 -6
- package/esm/src/kernel/tools/handler-events.d.ts +45 -0
- package/esm/src/kernel/tools/handler-events.js +106 -0
- package/esm/src/kernel/tools/harness.d.ts +1 -0
- package/esm/src/kernel/tools/harness.js +2 -1
- package/esm/src/kernel/tools/http-limit.d.ts +27 -0
- package/esm/src/kernel/tools/http-limit.js +85 -0
- package/esm/src/kernel/tools/invoke.d.ts +27 -5
- package/esm/src/kernel/tools/invoke.js +223 -70
- package/esm/src/kernel/tools/mcp-sessions.d.ts +4 -1
- package/esm/src/kernel/tools/mcp-sessions.js +13 -8
- package/esm/src/kernel/tools/mod.d.ts +4 -3
- package/esm/src/kernel/tools/mod.js +3 -2
- package/esm/src/kernel/tools/model-text.d.ts +10 -5
- package/esm/src/kernel/tools/model-text.js +18 -12
- package/esm/src/kernel/tools/operation.d.ts +76 -0
- package/esm/src/kernel/tools/operation.js +100 -0
- package/esm/src/kernel/tools/page-answer.d.ts +8 -0
- package/esm/src/kernel/tools/page-answer.js +19 -0
- package/esm/src/kernel/tools/permission.d.ts +11 -2
- package/esm/src/kernel/tools/permission.js +12 -12
- package/esm/src/kernel/tools/project.d.ts +4 -1
- package/esm/src/kernel/tools/project.js +32 -2
- package/esm/src/kernel/tools/registry.d.ts +9 -2
- package/esm/src/kernel/tools/registry.js +69 -10
- package/esm/src/kernel/tools/remote.d.ts +40 -6
- package/esm/src/kernel/tools/remote.js +219 -92
- package/esm/src/kernel/tools/resolve.d.ts +3 -0
- package/esm/src/kernel/tools/resolve.js +12 -4
- package/esm/src/kernel/tools/run.d.ts +28 -0
- package/esm/src/kernel/tools/run.js +86 -0
- package/esm/src/kernel/tools/schema.d.ts +3 -3
- package/esm/src/kernel/tools/schema.js +21 -100
- package/esm/src/kernel/tools/signed-in-fetch.d.ts +2 -1
- package/esm/src/kernel/tools/signed-in-fetch.js +3 -3
- package/esm/src/kernel/tools/stage-run.d.ts +27 -4
- package/esm/src/kernel/tools/stage-run.js +75 -17
- package/esm/src/kernel/tools/types.d.ts +235 -25
- package/esm/src/kernel/tools/unchecked-output.d.ts +14 -0
- package/esm/src/kernel/tools/unchecked-output.js +18 -0
- package/esm/src/kernel/turn-events.d.ts +208 -31
- package/esm/src/kernel/turn-events.js +127 -9
- package/esm/src/kernel/types.d.ts +302 -161
- package/esm/src/kernel/util/base64.d.ts +2 -0
- package/esm/src/kernel/util/base64.js +2 -0
- package/esm/src/kernel/util/partial-json.d.ts +23 -0
- package/esm/src/kernel/util/partial-json.js +128 -0
- package/esm/src/kernel/util/record.d.ts +1 -0
- package/esm/src/kernel/util/record.js +1 -0
- package/esm/src/observability/destinations.d.ts +5 -0
- package/esm/src/observability/destinations.js +7 -2
- package/esm/src/observability/jsonl.d.ts +2 -2
- package/esm/src/observability/jsonl.js +15 -22
- package/esm/src/observability/mod.d.ts +3 -3
- package/esm/src/observability/mod.js +2 -2
- package/esm/src/observability/openinference.d.ts +1 -1
- package/esm/src/observability/openinference.js +3 -3
- package/esm/src/observability/otlp.d.ts +3 -0
- package/esm/src/observability/otlp.js +3 -3
- package/esm/src/observability/phoenix.d.ts +1 -0
- package/esm/src/observability/policy.d.ts +3 -0
- package/esm/src/observability/policy.js +5 -1
- package/esm/src/observability/resolve-policy.js +11 -5
- package/esm/src/observability/spans.d.ts +8 -2
- package/esm/src/observability/spans.js +21 -5
- package/esm/src/observability/trace-catalog.d.ts +19 -2
- package/esm/src/observability/trace-catalog.js +130 -88
- package/esm/src/observability/trace-record.js +22 -17
- package/esm/src/observability/trace-schema.d.ts +3 -0
- package/esm/src/observability/trace-schema.js +1 -1
- package/esm/src/observability/trace-sink.d.ts +1 -0
- package/esm/src/observability/trace-sink.js +1 -1
- package/esm/src/observability/trace-span.d.ts +7 -1
- package/esm/src/observability/trace-span.js +3 -1
- package/esm/src/observability/trace.d.ts +2 -0
- package/esm/src/observability/trace.js +4 -2
- package/esm/src/observability/types.d.ts +35 -11
- package/esm/src/observability/types.js +1 -1
- package/esm/src/presets/google/speech-voices.d.ts +1 -0
- package/esm/src/presets/google-limits.d.ts +1 -0
- package/esm/src/presets/google.d.ts +27 -12
- package/esm/src/presets/google.js +34 -25
- package/esm/src/presets/local.d.ts +26 -0
- package/esm/src/presets/local.js +30 -0
- package/esm/src/presets/mod.d.ts +5 -4
- package/esm/src/presets/mod.js +4 -4
- package/esm/src/presets/openrouter.d.ts +14 -1
- package/esm/src/presets/openrouter.js +19 -1
- package/esm/src/providers/embedding-limits.d.ts +7 -0
- package/esm/src/providers/embedding-limits.js +12 -0
- package/esm/src/providers/gemini/embedding-protocol.d.ts +8 -0
- package/esm/src/providers/gemini/embedding-protocol.js +125 -0
- package/esm/src/providers/gemini/interactions-protocol.d.ts +8 -0
- package/esm/src/providers/gemini/interactions-protocol.js +102 -0
- package/esm/src/providers/gemini/live-protocol.d.ts +3 -0
- package/esm/src/providers/gemini/live-protocol.js +191 -0
- package/esm/src/providers/gemini/prices.d.ts +3 -0
- package/esm/src/providers/gemini/prices.js +63 -0
- package/esm/src/providers/gemini/provider.d.ts +7 -0
- package/esm/src/providers/gemini/provider.js +39 -0
- package/esm/src/providers/google/api-error.d.ts +2 -0
- package/esm/src/providers/google/api-error.js +26 -18
- package/esm/src/providers/google/builtins.d.ts +14 -0
- package/esm/src/providers/google/builtins.js +57 -0
- package/esm/src/providers/google/grounding.d.ts +4 -4
- package/esm/src/providers/google/interactions/framing.d.ts +20 -8
- package/esm/src/providers/google/interactions/framing.js +85 -44
- package/esm/src/providers/google/interactions/steps.d.ts +5 -5
- package/esm/src/providers/google/interactions/steps.js +4 -4
- package/esm/src/providers/google/interactions/stream.d.ts +10 -11
- package/esm/src/providers/google/interactions/stream.js +33 -100
- package/esm/src/providers/google/live/framing.d.ts +15 -5
- package/esm/src/providers/google/live/framing.js +25 -25
- package/esm/src/providers/google/live/stream.d.ts +6 -44
- package/esm/src/providers/google/live/stream.js +4 -210
- package/esm/src/providers/google/urls.d.ts +1 -3
- package/esm/src/providers/google/urls.js +1 -3
- package/esm/src/providers/google/usage.js +2 -2
- package/esm/src/providers/live.d.ts +6 -0
- package/esm/src/providers/live.js +6 -0
- package/esm/src/providers/local/embedding-protocol.d.ts +7 -0
- package/esm/src/providers/local/embedding-protocol.js +60 -0
- package/esm/src/providers/local/provider.d.ts +7 -0
- package/esm/src/providers/local/provider.js +28 -0
- package/esm/src/providers/mod.d.ts +28 -7
- package/esm/src/providers/mod.js +19 -3
- package/esm/src/providers/open-ai/protocol.d.ts +3 -0
- package/esm/src/providers/open-ai/protocol.js +189 -0
- package/esm/src/providers/openrouter/embedding-protocol.d.ts +6 -0
- package/esm/src/providers/openrouter/embedding-protocol.js +86 -0
- package/esm/src/providers/openrouter/image.d.ts +0 -9
- package/esm/src/providers/openrouter/image.js +0 -153
- package/esm/src/providers/openrouter/images-protocol.d.ts +3 -0
- package/esm/src/providers/openrouter/images-protocol.js +82 -0
- package/esm/src/providers/openrouter/openai/compat.d.ts +2 -2
- package/esm/src/providers/openrouter/openai/compat.js +6 -6
- package/esm/src/providers/openrouter/openai/image-payload.d.ts +2 -2
- package/esm/src/providers/openrouter/openai/reasoning-state.d.ts +2 -0
- package/esm/src/providers/openrouter/openai/reasoning-state.js +31 -0
- package/esm/src/providers/openrouter/protocol.d.ts +8 -0
- package/esm/src/providers/openrouter/protocol.js +171 -0
- package/esm/src/providers/openrouter/provider.d.ts +10 -0
- package/esm/src/providers/openrouter/provider.js +50 -0
- package/esm/src/providers/shared/carried-tool-files.d.ts +7 -0
- package/esm/src/providers/shared/carried-tool-files.js +43 -0
- package/esm/src/providers/shared/pcm.js +2 -2
- package/esm/src/providers/shared/protocol-events.d.ts +8 -0
- package/esm/src/providers/shared/protocol-events.js +20 -0
- package/esm/src/providers/shared/response-identity.d.ts +2 -2
- package/esm/src/providers/shared/retry.d.ts +18 -0
- package/esm/src/providers/shared/retry.js +89 -0
- package/esm/src/providers/shared/sse.d.ts +0 -4
- package/esm/src/providers/shared/sse.js +50 -36
- package/esm/src/providers/shared/tool-args.d.ts +6 -7
- package/esm/src/providers/shared/tool-args.js +10 -6
- package/esm/src/providers/shared/tool-draft.d.ts +16 -0
- package/esm/src/providers/shared/tool-draft.js +14 -0
- package/esm/src/providers/shared/upstream-tap.d.ts +2 -2
- package/esm/src/providers/shared/upstream-tape.js +1 -1
- package/esm/src/providers/system-one/protocol.d.ts +8 -0
- package/esm/src/providers/system-one/protocol.js +93 -0
- package/esm/src/providers/types.d.ts +48 -16
- package/esm/src/providers/types.js +2 -1
- package/esm/src/providers/typesafe/provider.d.ts +7 -0
- package/esm/src/providers/typesafe/provider.js +24 -0
- package/esm/src/surface/formats.d.ts +19 -1
- package/esm/src/surface/formats.js +68 -29
- package/esm/src/surface/mod.d.ts +4 -2
- package/esm/src/surface/mod.js +4 -2
- package/esm/src/surface/runtime.d.ts +4 -0
- package/esm/src/surface/runtime.js +2 -0
- package/esm/src/surface/tools.d.ts +2 -8
- package/esm/src/surface/tools.js +4 -22
- package/esm/src/surface/types.d.ts +6 -0
- package/package.json +5 -13
- package/esm/src/cli/commands/egress-compile.d.ts +0 -17
- package/esm/src/cli/commands/egress-compile.js +0 -25
- package/esm/src/guardrails/egress-policy.d.ts +0 -27
- package/esm/src/guardrails/egress-policy.js +0 -76
- package/esm/src/guardrails/egress-rules.d.ts +0 -54
- package/esm/src/guardrails/egress-rules.js +0 -49
- package/esm/src/guardrails/lexicon.d.ts +0 -30
- package/esm/src/guardrails/lexicon.js +0 -478
- package/esm/src/kernel/engine/media-probe/audio.d.ts +0 -7
- package/esm/src/kernel/engine/media-probe/audio.js +0 -342
- package/esm/src/kernel/engine/media-probe/bytes.d.ts +0 -6
- package/esm/src/kernel/engine/media-probe/bytes.js +0 -26
- package/esm/src/kernel/engine/media-probe/image.d.ts +0 -5
- package/esm/src/kernel/engine/media-probe/image.js +0 -171
- package/esm/src/kernel/engine/media-probe/iso-bmff.d.ts +0 -19
- package/esm/src/kernel/engine/media-probe/iso-bmff.js +0 -48
- package/esm/src/kernel/engine/media-probe/matroska.d.ts +0 -35
- package/esm/src/kernel/engine/media-probe/matroska.js +0 -226
- package/esm/src/kernel/engine/media-probe/mp4.d.ts +0 -22
- package/esm/src/kernel/engine/media-probe/mp4.js +0 -279
- package/esm/src/kernel/engine/media-probe/opus.d.ts +0 -4
- package/esm/src/kernel/engine/media-probe/opus.js +0 -23
- package/esm/src/kernel/engine/media-probe/pdf.d.ts +0 -5
- package/esm/src/kernel/engine/media-probe/pdf.js +0 -117
- package/esm/src/kernel/engine/media-probe/video.d.ts +0 -15
- package/esm/src/kernel/engine/media-probe/video.js +0 -49
- package/esm/src/presets/typesafe.d.ts +0 -2
- package/esm/src/presets/typesafe.js +0 -2
- package/esm/src/providers/create-provider.d.ts +0 -21
- package/esm/src/providers/create-provider.js +0 -90
- package/esm/src/providers/decision/usage.d.ts +0 -3
- package/esm/src/providers/decision/usage.js +0 -25
- package/esm/src/providers/google/interactions/mod.d.ts +0 -2
- package/esm/src/providers/google/interactions/mod.js +0 -2
- package/esm/src/providers/google/keys.d.ts +0 -20
- package/esm/src/providers/google/keys.js +0 -87
- package/esm/src/providers/google/live/mod.d.ts +0 -7
- package/esm/src/providers/google/live/mod.js +0 -7
- package/esm/src/providers/google/live/openapi-schema.d.ts +0 -1
- package/esm/src/providers/google/live/openapi-schema.js +0 -42
- package/esm/src/providers/google/live/session.d.ts +0 -14
- package/esm/src/providers/google/live/session.js +0 -150
- package/esm/src/providers/local/local.d.ts +0 -12
- package/esm/src/providers/local/local.js +0 -186
- package/esm/src/providers/local/mod.d.ts +0 -8
- package/esm/src/providers/local/mod.js +0 -8
- package/esm/src/providers/openrouter/cache-control.d.ts +0 -5
- package/esm/src/providers/openrouter/cache-control.js +0 -4
- package/esm/src/providers/openrouter/chat.d.ts +0 -64
- package/esm/src/providers/openrouter/chat.js +0 -490
- package/esm/src/providers/openrouter/openai/sdk-messages.d.ts +0 -10
- package/esm/src/providers/openrouter/openai/sdk-messages.js +0 -99
- package/esm/src/providers/openrouter/resolve-api-key.d.ts +0 -3
- package/esm/src/providers/openrouter/resolve-api-key.js +0 -8
- package/esm/src/providers/openrouter/speech.d.ts +0 -18
- package/esm/src/providers/openrouter/speech.js +0 -109
- package/esm/src/providers/probe.d.ts +0 -5
- package/esm/src/providers/probe.js +0 -15
- package/esm/src/providers/shared/builtin-wire.d.ts +0 -4
- package/esm/src/providers/shared/builtin-wire.js +0 -9
- package/esm/src/providers/shared/vault.d.ts +0 -13
- package/esm/src/providers/shared/vault.js +0 -41
|
@@ -1,48 +1,89 @@
|
|
|
1
1
|
import { blobAt, spansFromPatterns } from '../observability/spans.js';
|
|
2
|
+
import { CREDENTIAL_RULES, GLOBAL_ALLOWLIST } from './credential-rules.js';
|
|
3
|
+
import { credentialHit, credentialSpans } from './credential-scan.js';
|
|
2
4
|
const SSN = /\b\d{3}-\d{2}-\d{4}\b/g;
|
|
3
|
-
const SSN_CONTEXTUAL = /(?:SSN|social\s*security(?:\s*number)?)[:\s]
|
|
5
|
+
const SSN_CONTEXTUAL = /(?:SSN|social\s*security(?:\s*number)?)[:\s]+\d(?:[-\s]*\d){8}/gi;
|
|
4
6
|
const ITIN = /\b9\d{2}-\d{2}-\d{4}\b/g;
|
|
5
7
|
const EIN = /\b\d{2}-\d{7}\b/g;
|
|
6
8
|
const IBAN = /\b[A-Z]{2}\d{2}[A-Z0-9]{13,30}\b/g;
|
|
7
9
|
const IPV4 = /\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b/g;
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
const HEX_GROUP = '[0-9a-f]{1,4}';
|
|
11
|
+
const DOTTED_QUAD = '(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)';
|
|
12
|
+
/** Every RFC 4291 text form: full, `::`-compressed, and with a dotted IPv4 tail. */
|
|
13
|
+
const IPV6_FORMS = [
|
|
14
|
+
`(?:${HEX_GROUP}:){6}${DOTTED_QUAD}`,
|
|
15
|
+
`(?:${HEX_GROUP}:){1,5}:${DOTTED_QUAD}`,
|
|
16
|
+
`::(?:${HEX_GROUP}:){0,5}${DOTTED_QUAD}`,
|
|
17
|
+
`(?:${HEX_GROUP}:){7}${HEX_GROUP}`,
|
|
18
|
+
`(?:${HEX_GROUP}:){1,6}(?::${HEX_GROUP}){1,6}`,
|
|
19
|
+
`(?:${HEX_GROUP}:){1,7}:`,
|
|
20
|
+
`:(?::${HEX_GROUP}){1,7}`,
|
|
21
|
+
];
|
|
22
|
+
const IPV6 = new RegExp(`(?<![\\w:.])(?:${IPV6_FORMS.join('|')})(?![\\w:])`, 'gi');
|
|
23
|
+
/** Credentials gitleaks' rules miss: keys cut short or spaced out, a short private key, and a bare bearer token. */
|
|
24
|
+
const OWN_CREDENTIAL_RULES = [
|
|
25
|
+
{
|
|
26
|
+
id: 'openai-api-key-any',
|
|
27
|
+
pattern: /\bsk-\s*[A-Za-z0-9]{20,}\b/,
|
|
28
|
+
keywords: ['sk-'],
|
|
29
|
+
allowlists: [],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: 'anthropic-api-key-any',
|
|
33
|
+
pattern: /\bsk-ant-[A-Za-z0-9_-]{20,}\b/,
|
|
34
|
+
keywords: ['sk-ant-'],
|
|
35
|
+
allowlists: [],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'openrouter-api-key',
|
|
39
|
+
pattern: /\bsk-or-[A-Za-z0-9_-]{20,}\b/,
|
|
40
|
+
keywords: ['sk-or-'],
|
|
41
|
+
allowlists: [],
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: 'github-fine-grained-pat-any',
|
|
45
|
+
pattern: /\bgithub_pat_[A-Za-z0-9_]{20,}\b/,
|
|
46
|
+
keywords: ['github_pat_'],
|
|
47
|
+
allowlists: [],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: 'slack-token-any',
|
|
51
|
+
pattern: /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/,
|
|
52
|
+
keywords: ['xox'],
|
|
53
|
+
allowlists: [],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: 'private-key-any',
|
|
57
|
+
pattern: /-----BEGIN (?:(?:RSA|DSA|EC|OPENSSH|ENCRYPTED|PGP) )?PRIVATE KEY(?: BLOCK)?-----[\s\S]{0,16384}?-----END (?:(?:RSA|DSA|EC|OPENSSH|ENCRYPTED|PGP) )?PRIVATE KEY(?: BLOCK)?-----/,
|
|
58
|
+
keywords: ['-----begin'],
|
|
59
|
+
allowlists: [],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: 'bearer-token',
|
|
63
|
+
pattern: /\bBearer[ \t]+([A-Za-z0-9._~+/-]{16,}=*)/i,
|
|
64
|
+
entropy: 3,
|
|
65
|
+
keywords: ['bearer'],
|
|
66
|
+
allowlists: [],
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
/** Every credential rule: gitleaks', then Theorem's own. */
|
|
70
|
+
const CREDENTIALS = [...CREDENTIAL_RULES, ...OWN_CREDENTIAL_RULES];
|
|
20
71
|
const CARD_CANDIDATE = /\b(?:\d[\s.-]*?){13,19}\b/g;
|
|
21
|
-
/**
|
|
22
|
-
* The families of sensitive data, each switched on its own: a profile can
|
|
23
|
-
* redact credentials and card numbers but leave network addresses alone.
|
|
24
|
-
*/
|
|
25
|
-
const SENSITIVE_GROUPS = ['ids', 'financial', 'network', 'credentials'];
|
|
26
|
-
/** The patterns each group matches. Card numbers are financial too, found by `cardSpans`. */
|
|
72
|
+
/** The patterns each group matches. Card numbers are financial too, found by `cardSpans`; credentials by `credentialSpans`. */
|
|
27
73
|
const GROUP_PATTERNS = {
|
|
28
74
|
ids: [SSN, SSN_CONTEXTUAL, ITIN, EIN],
|
|
29
75
|
financial: [IBAN],
|
|
30
76
|
network: [IPV4, IPV6],
|
|
31
|
-
credentials: [
|
|
32
|
-
AWS_ACCESS,
|
|
33
|
-
GOOGLE_API,
|
|
34
|
-
OPENAI_KEY,
|
|
35
|
-
ANTHROPIC_KEY,
|
|
36
|
-
OPENROUTER_KEY,
|
|
37
|
-
GITHUB_PAT,
|
|
38
|
-
GITHUB_TOKEN,
|
|
39
|
-
SLACK_TOKEN,
|
|
40
|
-
BEARER,
|
|
41
|
-
PEM_KEY,
|
|
42
|
-
],
|
|
43
77
|
};
|
|
44
78
|
/** Every pattern, with its group. */
|
|
45
|
-
const SENSITIVE_PATTERNS =
|
|
79
|
+
const SENSITIVE_PATTERNS = [
|
|
80
|
+
...['ids', 'financial', 'network'].flatMap((group) => GROUP_PATTERNS[group].map((pattern) => ({ group, pattern }))),
|
|
81
|
+
...CREDENTIALS.map((rule) => ({
|
|
82
|
+
group: 'credentials',
|
|
83
|
+
pattern: new RegExp(rule.pattern.source, `${rule.pattern.flags}g`),
|
|
84
|
+
hit: (match, text, at) => credentialHit(rule, GLOBAL_ALLOWLIST, match, text, at),
|
|
85
|
+
})),
|
|
86
|
+
];
|
|
46
87
|
const ALL_GROUPS = {
|
|
47
88
|
ids: true,
|
|
48
89
|
financial: true,
|
|
@@ -58,15 +99,9 @@ function resolveSensitive(selection, defaults = ALL_GROUPS) {
|
|
|
58
99
|
}
|
|
59
100
|
return { ...defaults, ...selection };
|
|
60
101
|
}
|
|
61
|
-
/** Whether any group runs. */
|
|
62
|
-
function anySensitive(groups) {
|
|
63
|
-
return SENSITIVE_GROUPS.some((group) => groups[group]);
|
|
64
|
-
}
|
|
65
102
|
const LUHN_DOUBLE = 2;
|
|
66
103
|
const LUHN_NINE = 9;
|
|
67
104
|
const LUHN_TEN = 10;
|
|
68
|
-
const CARD_MIN_DIGITS = 13;
|
|
69
|
-
const CARD_MAX_DIGITS = 19;
|
|
70
105
|
function luhnOk(digits) {
|
|
71
106
|
let sum = 0;
|
|
72
107
|
let doubleIt = false;
|
|
@@ -87,17 +122,100 @@ function luhnOk(digits) {
|
|
|
87
122
|
}
|
|
88
123
|
return sum % LUHN_TEN === 0;
|
|
89
124
|
}
|
|
90
|
-
|
|
91
|
-
|
|
125
|
+
const LENGTHS_16_TO_19 = [16, 17, 18, 19];
|
|
126
|
+
/** Visa, Mastercard, American Express, Diners Club, Discover, JCB, UnionPay, Maestro, Mir, and RuPay, in that order. */
|
|
127
|
+
const CARD_NETWORKS = [
|
|
128
|
+
{ leading: [['4', '4']], lengths: [13, 16, 19] },
|
|
129
|
+
{
|
|
130
|
+
leading: [
|
|
131
|
+
['51', '55'],
|
|
132
|
+
['2221', '2720'],
|
|
133
|
+
],
|
|
134
|
+
lengths: [16],
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
leading: [
|
|
138
|
+
['34', '34'],
|
|
139
|
+
['37', '37'],
|
|
140
|
+
],
|
|
141
|
+
lengths: [15],
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
leading: [
|
|
145
|
+
['300', '305'],
|
|
146
|
+
['3095', '3095'],
|
|
147
|
+
['36', '36'],
|
|
148
|
+
['38', '39'],
|
|
149
|
+
],
|
|
150
|
+
lengths: [14, 15, ...LENGTHS_16_TO_19],
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
leading: [
|
|
154
|
+
['6011', '6011'],
|
|
155
|
+
['644', '649'],
|
|
156
|
+
['65', '65'],
|
|
157
|
+
],
|
|
158
|
+
lengths: LENGTHS_16_TO_19,
|
|
159
|
+
},
|
|
160
|
+
{ leading: [['3528', '3589']], lengths: LENGTHS_16_TO_19 },
|
|
161
|
+
{ leading: [['62', '62']], lengths: LENGTHS_16_TO_19 },
|
|
162
|
+
{
|
|
163
|
+
leading: [
|
|
164
|
+
['5018', '5018'],
|
|
165
|
+
['5020', '5020'],
|
|
166
|
+
['5038', '5038'],
|
|
167
|
+
['5893', '5893'],
|
|
168
|
+
['6304', '6304'],
|
|
169
|
+
['6759', '6759'],
|
|
170
|
+
['6761', '6763'],
|
|
171
|
+
],
|
|
172
|
+
lengths: [13, 14, 15, ...LENGTHS_16_TO_19],
|
|
173
|
+
},
|
|
174
|
+
{ leading: [['2200', '2204']], lengths: LENGTHS_16_TO_19 },
|
|
175
|
+
{
|
|
176
|
+
leading: [
|
|
177
|
+
['60', '60'],
|
|
178
|
+
['81', '82'],
|
|
179
|
+
['508', '508'],
|
|
180
|
+
['353', '353'],
|
|
181
|
+
['356', '356'],
|
|
182
|
+
],
|
|
183
|
+
lengths: [16],
|
|
184
|
+
},
|
|
185
|
+
];
|
|
186
|
+
/** Whether some card network issues numbers that start and run as long as `digits`. */
|
|
187
|
+
function isIssued(digits) {
|
|
188
|
+
return CARD_NETWORKS.some((network) => network.lengths.includes(digits.length) &&
|
|
189
|
+
network.leading.some(([low, high]) => {
|
|
190
|
+
const start = digits.slice(0, low.length);
|
|
191
|
+
return start >= low && start <= high;
|
|
192
|
+
}));
|
|
193
|
+
}
|
|
194
|
+
const URL_SCHEME = /https?:\/\//i;
|
|
195
|
+
const URL_LOOKBACK = 2048;
|
|
196
|
+
/** Whether `at` of `text` is inside a web address: the unbroken run of characters before it holds `http://` or `https://`. */
|
|
197
|
+
function isInUrl(text, at) {
|
|
198
|
+
const floor = Math.max(0, at - URL_LOOKBACK);
|
|
199
|
+
let from = at;
|
|
200
|
+
while (from > floor && !/\s/.test(text[from - 1] ?? ' '))
|
|
201
|
+
from -= 1;
|
|
202
|
+
return URL_SCHEME.test(text.slice(from, at));
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* A card-number candidate at `at` of `text` that is a card: digits a card
|
|
206
|
+
* network issues, passing the Luhn check, outside a web address. A run of
|
|
207
|
+
* digits in an address is the address's own identifier: one random 19-digit
|
|
208
|
+
* identifier in a hundred passes the first two tests.
|
|
209
|
+
*/
|
|
210
|
+
function cardHit(blob, text, at) {
|
|
92
211
|
const digits = blob.replaceAll(/[^\d]/g, '');
|
|
93
|
-
|
|
94
|
-
return inRange && luhnOk(digits);
|
|
212
|
+
return isIssued(digits) && luhnOk(digits) && !isInUrl(text, at);
|
|
95
213
|
}
|
|
96
214
|
function cardSpans(text) {
|
|
97
215
|
const spans = [];
|
|
98
216
|
for (const match of text.matchAll(CARD_CANDIDATE)) {
|
|
99
217
|
const found = blobAt(match);
|
|
100
|
-
if (found && cardHit(found.blob)) {
|
|
218
|
+
if (found && cardHit(found.blob, text, found.index)) {
|
|
101
219
|
spans.push({ start: found.index, end: found.index + found.blob.length, kind: 'sensitive' });
|
|
102
220
|
}
|
|
103
221
|
}
|
|
@@ -106,8 +224,11 @@ function cardSpans(text) {
|
|
|
106
224
|
/** Sensitive-data spans in `text`, from the groups `selection` runs (every group by default). */
|
|
107
225
|
function sensitiveSpans(text, selection = true) {
|
|
108
226
|
const groups = resolveSensitive(selection);
|
|
109
|
-
const patterns =
|
|
110
|
-
|
|
111
|
-
|
|
227
|
+
const patterns = ['ids', 'financial', 'network'].flatMap((group) => groups[group] ? GROUP_PATTERNS[group] : []);
|
|
228
|
+
return [
|
|
229
|
+
...spansFromPatterns(text, patterns, 'sensitive'),
|
|
230
|
+
...(groups.financial ? cardSpans(text) : []),
|
|
231
|
+
...(groups.credentials ? credentialSpans(text, CREDENTIALS, GLOBAL_ALLOWLIST) : []),
|
|
232
|
+
];
|
|
112
233
|
}
|
|
113
|
-
export {
|
|
234
|
+
export { CARD_CANDIDATE, cardHit, SENSITIVE_PATTERNS, sensitiveSpans };
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Adversarial corpus, fuzz runners and live attack builders, kept off the production guardrails entry.
|
|
2
|
+
* Adversarial corpus, fuzz runners, and live attack builders, kept off the production guardrails entry.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
/**
|
|
6
|
+
/** labels-exempt-file: adversarial harness helpers — not runtime user or model copy (P2) */
|
|
7
7
|
import "../../_dnt.polyfills.js";
|
|
8
8
|
export type { CanaryEgressAttack, CanaryEgressCatalogEntry, InboundFuzzPayload, InboundFuzzResult, LiveAttack, } from './corpus/mod.js';
|
|
9
9
|
export { buildCanaryEgressAttacks, buildLiveAttacks, canaryEgressCatalog, FIXED_CANARY, FUZZ_SYSTEM, filterLiveAttacks, inboundFuzzPayloads, inboundPayloadByName, runInboundGuardrailFuzz, summarizeAttackBank, } from './corpus/mod.js';
|
|
10
|
+
export { TEST_AWS_KEY, TEST_GITHUB_PAT, TEST_GOOGLE_KEY, TEST_OPENAI_KEY, TEST_PEM, TEST_SLACK, TEST_VISA, } from './corpus/secrets.js';
|
|
11
|
+
export { INJ_IGNORE, INJ_IGNORE_REVEAL, injHexSpaced } from './corpus/strings.js';
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Adversarial corpus, fuzz runners and live attack builders, kept off the production guardrails entry.
|
|
2
|
+
* Adversarial corpus, fuzz runners, and live attack builders, kept off the production guardrails entry.
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
/**
|
|
6
|
+
/** labels-exempt-file: adversarial harness helpers — not runtime user or model copy (P2) */
|
|
7
7
|
import "../../_dnt.polyfills.js";
|
|
8
8
|
export { buildCanaryEgressAttacks, buildLiveAttacks, canaryEgressCatalog, FIXED_CANARY, FUZZ_SYSTEM, filterLiveAttacks, inboundFuzzPayloads, inboundPayloadByName, runInboundGuardrailFuzz, summarizeAttackBank, } from './corpus/mod.js';
|
|
9
|
+
export { TEST_AWS_KEY, TEST_GITHUB_PAT, TEST_GOOGLE_KEY, TEST_OPENAI_KEY, TEST_PEM, TEST_SLACK, TEST_VISA, } from './corpus/secrets.js';
|
|
10
|
+
export { INJ_IGNORE, INJ_IGNORE_REVEAL, injHexSpaced } from './corpus/strings.js';
|
|
@@ -3,14 +3,17 @@ export type { ErrorCopies, ErrorCopy };
|
|
|
3
3
|
/**
|
|
4
4
|
* What kind of failure happened, decided where it happens. Both worlds read it:
|
|
5
5
|
* the builder in code and traces (`errorKind`, `error.type`), the user through
|
|
6
|
-
* the kind's wording (`error.<kind>` in the
|
|
6
|
+
* the kind's wording (`error.<kind>` in the labels).
|
|
7
7
|
*/
|
|
8
|
-
export declare const ERROR_KINDS: readonly ["config", "request", "input", "action", "auth", "rate_limit", "unsupported", "unavailable", "bad_response", "network", "timeout", "safety", "blocked", "declined", "failed", "cancelled", "internal"];
|
|
8
|
+
export declare const ERROR_KINDS: readonly ["config", "request", "input", "action", "auth", "rate_limit", "busy", "unsupported", "unavailable", "bad_response", "network", "timeout", "safety", "blocked", "declined", "failed", "cancelled", "internal"];
|
|
9
|
+
/** Why an operation failed; the user's wording and the HTTP status follow from it. */
|
|
9
10
|
export type ErrorKind = (typeof ERROR_KINDS)[number];
|
|
11
|
+
/** Options for a `TheoremError`: the cause and, optionally, wording for the user. */
|
|
10
12
|
export interface TheoremErrorOptions extends ErrorOptions {
|
|
11
13
|
/** User wording more specific than the kind's: one line, or one per problem found. */
|
|
12
14
|
copy?: ErrorCopies;
|
|
13
15
|
}
|
|
16
|
+
/** An error that carries a `kind`, from which hosts choose a status and the user's wording. */
|
|
14
17
|
export declare class TheoremError extends Error {
|
|
15
18
|
readonly kind: ErrorKind;
|
|
16
19
|
readonly copy?: ErrorCopies;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
// Its own module so `
|
|
1
|
+
// invariant: Its own module so `labels.ts` can throw it without importing `error.ts`, which reads the labels.
|
|
2
2
|
/**
|
|
3
3
|
* What kind of failure happened, decided where it happens. Both worlds read it:
|
|
4
4
|
* the builder in code and traces (`errorKind`, `error.type`), the user through
|
|
5
|
-
* the kind's wording (`error.<kind>` in the
|
|
5
|
+
* the kind's wording (`error.<kind>` in the labels).
|
|
6
6
|
*/
|
|
7
7
|
export const ERROR_KINDS = [
|
|
8
8
|
/** The profile, tool, or schema is set up wrong. */
|
|
@@ -17,9 +17,11 @@ export const ERROR_KINDS = [
|
|
|
17
17
|
'auth',
|
|
18
18
|
/** Too many requests, or a quota used up. */
|
|
19
19
|
'rate_limit',
|
|
20
|
+
/** The provider is up but too busy for the call; another key or a moment later may serve it. */
|
|
21
|
+
'busy',
|
|
20
22
|
/** The model or route cannot serve this request. */
|
|
21
23
|
'unsupported',
|
|
22
|
-
/** The provider is down
|
|
24
|
+
/** The provider is down. */
|
|
23
25
|
'unavailable',
|
|
24
26
|
/** The provider answered with something that cannot be used. */
|
|
25
27
|
'bad_response',
|
|
@@ -40,6 +42,7 @@ export const ERROR_KINDS = [
|
|
|
40
42
|
/** A THEOREM invariant broke. */
|
|
41
43
|
'internal',
|
|
42
44
|
];
|
|
45
|
+
/** An error that carries a `kind`, from which hosts choose a status and the user's wording. */
|
|
43
46
|
export class TheoremError extends Error {
|
|
44
47
|
kind;
|
|
45
48
|
copy;
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Thought guarding. A host that renders `thought` events shows the user what
|
|
2
|
+
* Thought guarding, under `guardrails.detect` at `thought`. A host that renders `thought` events shows the user what
|
|
3
3
|
* they say and loads what they link, as it does a reply: the canary, the
|
|
4
4
|
* system prompt and the user-data markers leak through a thought, and a URL
|
|
5
5
|
* the model was not given carries data out. Nothing in a thought stops a turn
|
|
6
6
|
* (`isGuardedOutput`); each leak is omitted and the rest of the thought
|
|
7
|
-
* released.
|
|
7
|
+
* released, or under `block` omitted with the rest of the thought.
|
|
8
8
|
*
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
|
-
import { type
|
|
11
|
+
import { type Detection } from './detect-at.js';
|
|
12
|
+
import type { UrlAllow } from './detectors.js';
|
|
12
13
|
import { type GivenUrls } from './egress-urls.js';
|
|
13
|
-
import { type
|
|
14
|
-
import type {
|
|
14
|
+
import { type LabelOverrides } from './labels.js';
|
|
15
|
+
import type { GuardrailContext, GuardrailHit, ResolvedGuardrailPolicy } from './types.js';
|
|
15
16
|
/** What a thought guard lets through: the text to show, and what it omitted from it. */
|
|
16
17
|
interface ThoughtRelease {
|
|
17
18
|
text: string;
|
|
18
19
|
/** One hit per rule that omitted something; empty when nothing was. */
|
|
19
20
|
hits: GuardrailHit[];
|
|
21
|
+
/** What `guardrails.detect` found in the thought as it was read at `thought`. */
|
|
22
|
+
found?: Pick<Detection, 'action' | 'hits'>;
|
|
20
23
|
}
|
|
21
24
|
/** One provider call's (or Live cycle's) thought text, released as it clears. */
|
|
22
25
|
interface ThoughtGuard {
|
|
@@ -27,14 +30,29 @@ interface ThoughtGuard {
|
|
|
27
30
|
/** The tail of what was shown that a leak in the next call's thoughts could continue. */
|
|
28
31
|
carryOut(): string;
|
|
29
32
|
}
|
|
33
|
+
/** What a thought loses besides the canary and the system instruction. */
|
|
34
|
+
interface ThoughtOmits {
|
|
35
|
+
/** The kernel's markers and the words of the canary note (`marker_leak`). */
|
|
36
|
+
markers?: boolean;
|
|
37
|
+
/** Images to a URL the model was not given, but for what this lets through (`ungiven_images`). */
|
|
38
|
+
images?: UrlAllow;
|
|
39
|
+
/** Links to a URL the model was not given, but for what this lets through (`ungiven_links`). */
|
|
40
|
+
links?: UrlAllow;
|
|
41
|
+
/** Whether `ungiven_images` reads the thought, here or in front: a link then leaves an image's markup to it. */
|
|
42
|
+
imagesRead?: boolean;
|
|
43
|
+
}
|
|
30
44
|
interface ThoughtGuardOptions {
|
|
31
|
-
|
|
32
|
-
|
|
45
|
+
omit?: ThoughtOmits;
|
|
46
|
+
/** The canary to omit from a thought. */
|
|
33
47
|
canary?: string;
|
|
34
|
-
/**
|
|
48
|
+
/** The private stretches of the system instruction, whose words are omitted from a thought. */
|
|
35
49
|
privateSystem?: readonly string[];
|
|
50
|
+
/** The canary the turn planted, when a thought is not read for it: the echo and the note still know its place. */
|
|
51
|
+
planted?: string;
|
|
52
|
+
/** Rules whose leak ends what is shown of the thought, where the others are omitted alone. */
|
|
53
|
+
ends?: ReadonlySet<string>;
|
|
36
54
|
given?: GivenUrls;
|
|
37
|
-
|
|
55
|
+
labels?: LabelOverrides;
|
|
38
56
|
/** Shown text an earlier thought ended on (`carryOut`), read in front and never shown again. */
|
|
39
57
|
carry?: string;
|
|
40
58
|
}
|
|
@@ -47,9 +65,12 @@ interface ThoughtGuardOptions {
|
|
|
47
65
|
*/
|
|
48
66
|
declare function createThoughtGuard(options: ThoughtGuardOptions): ThoughtGuard;
|
|
49
67
|
/**
|
|
50
|
-
* A guard for a turn's thoughts: the
|
|
51
|
-
*
|
|
68
|
+
* A guard for a turn's thoughts: the detectors `guardrails.detect` sets at
|
|
69
|
+
* `thought`. `context` carries the canary and the system instruction only
|
|
70
|
+
* while their detectors read somewhere (`leakScopeOf`); at `thought`, `redact`
|
|
71
|
+
* omits a match, `block` ends what is shown of the thought there, and `flag`
|
|
72
|
+
* reports it and shows it.
|
|
52
73
|
*/
|
|
53
|
-
declare function thoughtGuardFor(
|
|
54
|
-
export type { ThoughtGuard, ThoughtGuardOptions, ThoughtRelease };
|
|
74
|
+
declare function thoughtGuardFor(policy: Pick<ResolvedGuardrailPolicy, 'detect' | 'allow'>, context: GuardrailContext, carry?: string): Promise<ThoughtGuard | undefined>;
|
|
75
|
+
export type { ThoughtGuard, ThoughtGuardOptions, ThoughtOmits, ThoughtRelease };
|
|
55
76
|
export { createThoughtGuard, thoughtGuardFor };
|