governance-sdk 0.5.0
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/LICENSE +21 -0
- package/README.md +559 -0
- package/dist/agent-identity-ed25519.d.ts +80 -0
- package/dist/agent-identity-ed25519.d.ts.map +1 -0
- package/dist/agent-identity-ed25519.js +134 -0
- package/dist/agent-identity-ed25519.js.map +1 -0
- package/dist/agent-identity.d.ts +65 -0
- package/dist/agent-identity.d.ts.map +1 -0
- package/dist/agent-identity.js +85 -0
- package/dist/agent-identity.js.map +1 -0
- package/dist/audit-integrity.d.ts +78 -0
- package/dist/audit-integrity.d.ts.map +1 -0
- package/dist/audit-integrity.js +173 -0
- package/dist/audit-integrity.js.map +1 -0
- package/dist/behavioral-scorer.d.ts +72 -0
- package/dist/behavioral-scorer.d.ts.map +1 -0
- package/dist/behavioral-scorer.js +223 -0
- package/dist/behavioral-scorer.js.map +1 -0
- package/dist/cli/init.d.ts +11 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +217 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/compliance-articles.d.ts +71 -0
- package/dist/compliance-articles.d.ts.map +1 -0
- package/dist/compliance-articles.js +201 -0
- package/dist/compliance-articles.js.map +1 -0
- package/dist/compliance.d.ts +24 -0
- package/dist/compliance.d.ts.map +1 -0
- package/dist/compliance.js +183 -0
- package/dist/compliance.js.map +1 -0
- package/dist/conditions/builtins.d.ts +17 -0
- package/dist/conditions/builtins.d.ts.map +1 -0
- package/dist/conditions/builtins.js +213 -0
- package/dist/conditions/builtins.js.map +1 -0
- package/dist/conditions/postprocess.d.ts +12 -0
- package/dist/conditions/postprocess.d.ts.map +1 -0
- package/dist/conditions/postprocess.js +33 -0
- package/dist/conditions/postprocess.js.map +1 -0
- package/dist/conditions/preprocess.d.ts +12 -0
- package/dist/conditions/preprocess.d.ts.map +1 -0
- package/dist/conditions/preprocess.js +47 -0
- package/dist/conditions/preprocess.js.map +1 -0
- package/dist/conditions/process.d.ts +14 -0
- package/dist/conditions/process.d.ts.map +1 -0
- package/dist/conditions/process.js +78 -0
- package/dist/conditions/process.js.map +1 -0
- package/dist/conditions/sensitive-patterns.d.ts +13 -0
- package/dist/conditions/sensitive-patterns.d.ts.map +1 -0
- package/dist/conditions/sensitive-patterns.js +42 -0
- package/dist/conditions/sensitive-patterns.js.map +1 -0
- package/dist/dry-run.d.ts +85 -0
- package/dist/dry-run.d.ts.map +1 -0
- package/dist/dry-run.js +132 -0
- package/dist/dry-run.js.map +1 -0
- package/dist/eval-red-team.d.ts +69 -0
- package/dist/eval-red-team.d.ts.map +1 -0
- package/dist/eval-red-team.js +205 -0
- package/dist/eval-red-team.js.map +1 -0
- package/dist/eval-scorer.d.ts +56 -0
- package/dist/eval-scorer.d.ts.map +1 -0
- package/dist/eval-scorer.js +148 -0
- package/dist/eval-scorer.js.map +1 -0
- package/dist/eval-trace.d.ts +30 -0
- package/dist/eval-trace.d.ts.map +1 -0
- package/dist/eval-trace.js +129 -0
- package/dist/eval-trace.js.map +1 -0
- package/dist/eval-types.d.ts +108 -0
- package/dist/eval-types.d.ts.map +1 -0
- package/dist/eval-types.js +14 -0
- package/dist/eval-types.js.map +1 -0
- package/dist/events.d.ts +57 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +81 -0
- package/dist/events.js.map +1 -0
- package/dist/federation-types.d.ts +58 -0
- package/dist/federation-types.d.ts.map +1 -0
- package/dist/federation-types.js +8 -0
- package/dist/federation-types.js.map +1 -0
- package/dist/federation.d.ts +42 -0
- package/dist/federation.d.ts.map +1 -0
- package/dist/federation.js +158 -0
- package/dist/federation.js.map +1 -0
- package/dist/index.d.ts +142 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +273 -0
- package/dist/index.js.map +1 -0
- package/dist/injection-benchmark.d.ts +62 -0
- package/dist/injection-benchmark.d.ts.map +1 -0
- package/dist/injection-benchmark.js +201 -0
- package/dist/injection-benchmark.js.map +1 -0
- package/dist/injection-classifier.d.ts +69 -0
- package/dist/injection-classifier.d.ts.map +1 -0
- package/dist/injection-classifier.js +98 -0
- package/dist/injection-classifier.js.map +1 -0
- package/dist/injection-detect.d.ts +59 -0
- package/dist/injection-detect.d.ts.map +1 -0
- package/dist/injection-detect.js +175 -0
- package/dist/injection-detect.js.map +1 -0
- package/dist/injection-patterns-ext.d.ts +7 -0
- package/dist/injection-patterns-ext.d.ts.map +1 -0
- package/dist/injection-patterns-ext.js +71 -0
- package/dist/injection-patterns-ext.js.map +1 -0
- package/dist/injection-patterns.d.ts +15 -0
- package/dist/injection-patterns.d.ts.map +1 -0
- package/dist/injection-patterns.js +361 -0
- package/dist/injection-patterns.js.map +1 -0
- package/dist/iso-42001-articles.d.ts +34 -0
- package/dist/iso-42001-articles.d.ts.map +1 -0
- package/dist/iso-42001-articles.js +147 -0
- package/dist/iso-42001-articles.js.map +1 -0
- package/dist/iso-42001.d.ts +18 -0
- package/dist/iso-42001.d.ts.map +1 -0
- package/dist/iso-42001.js +156 -0
- package/dist/iso-42001.js.map +1 -0
- package/dist/kill-switch.d.ts +56 -0
- package/dist/kill-switch.d.ts.map +1 -0
- package/dist/kill-switch.js +173 -0
- package/dist/kill-switch.js.map +1 -0
- package/dist/metrics.d.ts +58 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +81 -0
- package/dist/metrics.js.map +1 -0
- package/dist/monorepo-detect.d.ts +30 -0
- package/dist/monorepo-detect.d.ts.map +1 -0
- package/dist/monorepo-detect.js +107 -0
- package/dist/monorepo-detect.js.map +1 -0
- package/dist/nist-ai-rmf-articles.d.ts +40 -0
- package/dist/nist-ai-rmf-articles.d.ts.map +1 -0
- package/dist/nist-ai-rmf-articles.js +156 -0
- package/dist/nist-ai-rmf-articles.js.map +1 -0
- package/dist/nist-ai-rmf.d.ts +20 -0
- package/dist/nist-ai-rmf.d.ts.map +1 -0
- package/dist/nist-ai-rmf.js +176 -0
- package/dist/nist-ai-rmf.js.map +1 -0
- package/dist/otel-hooks.d.ts +67 -0
- package/dist/otel-hooks.d.ts.map +1 -0
- package/dist/otel-hooks.js +100 -0
- package/dist/otel-hooks.js.map +1 -0
- package/dist/owasp-agentic-articles.d.ts +42 -0
- package/dist/owasp-agentic-articles.d.ts.map +1 -0
- package/dist/owasp-agentic-articles.js +236 -0
- package/dist/owasp-agentic-articles.js.map +1 -0
- package/dist/owasp-agentic.d.ts +20 -0
- package/dist/owasp-agentic.d.ts.map +1 -0
- package/dist/owasp-agentic.js +205 -0
- package/dist/owasp-agentic.js.map +1 -0
- package/dist/plugins/a2a-types.d.ts +241 -0
- package/dist/plugins/a2a-types.d.ts.map +1 -0
- package/dist/plugins/a2a-types.js +14 -0
- package/dist/plugins/a2a-types.js.map +1 -0
- package/dist/plugins/a2a.d.ts +37 -0
- package/dist/plugins/a2a.d.ts.map +1 -0
- package/dist/plugins/a2a.js +160 -0
- package/dist/plugins/a2a.js.map +1 -0
- package/dist/plugins/anthropic-types.d.ts +188 -0
- package/dist/plugins/anthropic-types.d.ts.map +1 -0
- package/dist/plugins/anthropic-types.js +8 -0
- package/dist/plugins/anthropic-types.js.map +1 -0
- package/dist/plugins/anthropic.d.ts +32 -0
- package/dist/plugins/anthropic.d.ts.map +1 -0
- package/dist/plugins/anthropic.js +131 -0
- package/dist/plugins/anthropic.js.map +1 -0
- package/dist/plugins/autogen-types.d.ts +121 -0
- package/dist/plugins/autogen-types.d.ts.map +1 -0
- package/dist/plugins/autogen-types.js +13 -0
- package/dist/plugins/autogen-types.js.map +1 -0
- package/dist/plugins/autogen.d.ts +41 -0
- package/dist/plugins/autogen.d.ts.map +1 -0
- package/dist/plugins/autogen.js +131 -0
- package/dist/plugins/autogen.js.map +1 -0
- package/dist/plugins/bedrock-types.d.ts +246 -0
- package/dist/plugins/bedrock-types.d.ts.map +1 -0
- package/dist/plugins/bedrock-types.js +8 -0
- package/dist/plugins/bedrock-types.js.map +1 -0
- package/dist/plugins/bedrock.d.ts +43 -0
- package/dist/plugins/bedrock.d.ts.map +1 -0
- package/dist/plugins/bedrock.js +155 -0
- package/dist/plugins/bedrock.js.map +1 -0
- package/dist/plugins/cloudflare-ai-types.d.ts +85 -0
- package/dist/plugins/cloudflare-ai-types.d.ts.map +1 -0
- package/dist/plugins/cloudflare-ai-types.js +10 -0
- package/dist/plugins/cloudflare-ai-types.js.map +1 -0
- package/dist/plugins/cloudflare-ai.d.ts +32 -0
- package/dist/plugins/cloudflare-ai.d.ts.map +1 -0
- package/dist/plugins/cloudflare-ai.js +108 -0
- package/dist/plugins/cloudflare-ai.js.map +1 -0
- package/dist/plugins/composio-types.d.ts +96 -0
- package/dist/plugins/composio-types.d.ts.map +1 -0
- package/dist/plugins/composio-types.js +13 -0
- package/dist/plugins/composio-types.js.map +1 -0
- package/dist/plugins/composio.d.ts +37 -0
- package/dist/plugins/composio.d.ts.map +1 -0
- package/dist/plugins/composio.js +118 -0
- package/dist/plugins/composio.js.map +1 -0
- package/dist/plugins/crewai-types.d.ts +153 -0
- package/dist/plugins/crewai-types.d.ts.map +1 -0
- package/dist/plugins/crewai-types.js +10 -0
- package/dist/plugins/crewai-types.js.map +1 -0
- package/dist/plugins/crewai.d.ts +37 -0
- package/dist/plugins/crewai.d.ts.map +1 -0
- package/dist/plugins/crewai.js +127 -0
- package/dist/plugins/crewai.js.map +1 -0
- package/dist/plugins/deno-types.d.ts +68 -0
- package/dist/plugins/deno-types.d.ts.map +1 -0
- package/dist/plugins/deno-types.js +8 -0
- package/dist/plugins/deno-types.js.map +1 -0
- package/dist/plugins/deno.d.ts +37 -0
- package/dist/plugins/deno.d.ts.map +1 -0
- package/dist/plugins/deno.js +129 -0
- package/dist/plugins/deno.js.map +1 -0
- package/dist/plugins/e2b-types.d.ts +140 -0
- package/dist/plugins/e2b-types.d.ts.map +1 -0
- package/dist/plugins/e2b-types.js +8 -0
- package/dist/plugins/e2b-types.js.map +1 -0
- package/dist/plugins/e2b.d.ts +43 -0
- package/dist/plugins/e2b.d.ts.map +1 -0
- package/dist/plugins/e2b.js +157 -0
- package/dist/plugins/e2b.js.map +1 -0
- package/dist/plugins/genkit-types.d.ts +88 -0
- package/dist/plugins/genkit-types.d.ts.map +1 -0
- package/dist/plugins/genkit-types.js +11 -0
- package/dist/plugins/genkit-types.js.map +1 -0
- package/dist/plugins/genkit.d.ts +35 -0
- package/dist/plugins/genkit.d.ts.map +1 -0
- package/dist/plugins/genkit.js +143 -0
- package/dist/plugins/genkit.js.map +1 -0
- package/dist/plugins/langchain.d.ts +130 -0
- package/dist/plugins/langchain.d.ts.map +1 -0
- package/dist/plugins/langchain.js +172 -0
- package/dist/plugins/langchain.js.map +1 -0
- package/dist/plugins/llamaindex-types.d.ts +86 -0
- package/dist/plugins/llamaindex-types.d.ts.map +1 -0
- package/dist/plugins/llamaindex-types.js +11 -0
- package/dist/plugins/llamaindex-types.js.map +1 -0
- package/dist/plugins/llamaindex.d.ts +36 -0
- package/dist/plugins/llamaindex.d.ts.map +1 -0
- package/dist/plugins/llamaindex.js +131 -0
- package/dist/plugins/llamaindex.js.map +1 -0
- package/dist/plugins/mastra-processor-types.d.ts +126 -0
- package/dist/plugins/mastra-processor-types.d.ts.map +1 -0
- package/dist/plugins/mastra-processor-types.js +11 -0
- package/dist/plugins/mastra-processor-types.js.map +1 -0
- package/dist/plugins/mastra-processor.d.ts +32 -0
- package/dist/plugins/mastra-processor.d.ts.map +1 -0
- package/dist/plugins/mastra-processor.js +126 -0
- package/dist/plugins/mastra-processor.js.map +1 -0
- package/dist/plugins/mastra.d.ts +100 -0
- package/dist/plugins/mastra.d.ts.map +1 -0
- package/dist/plugins/mastra.js +143 -0
- package/dist/plugins/mastra.js.map +1 -0
- package/dist/plugins/mcp-annotations.d.ts +54 -0
- package/dist/plugins/mcp-annotations.d.ts.map +1 -0
- package/dist/plugins/mcp-annotations.js +110 -0
- package/dist/plugins/mcp-annotations.js.map +1 -0
- package/dist/plugins/mcp-chain-audit.d.ts +74 -0
- package/dist/plugins/mcp-chain-audit.d.ts.map +1 -0
- package/dist/plugins/mcp-chain-audit.js +134 -0
- package/dist/plugins/mcp-chain-audit.js.map +1 -0
- package/dist/plugins/mcp-trust.d.ts +59 -0
- package/dist/plugins/mcp-trust.d.ts.map +1 -0
- package/dist/plugins/mcp-trust.js +100 -0
- package/dist/plugins/mcp-trust.js.map +1 -0
- package/dist/plugins/mcp-types.d.ts +183 -0
- package/dist/plugins/mcp-types.d.ts.map +1 -0
- package/dist/plugins/mcp-types.js +12 -0
- package/dist/plugins/mcp-types.js.map +1 -0
- package/dist/plugins/mcp.d.ts +41 -0
- package/dist/plugins/mcp.d.ts.map +1 -0
- package/dist/plugins/mcp.js +228 -0
- package/dist/plugins/mcp.js.map +1 -0
- package/dist/plugins/mistral-types.d.ts +72 -0
- package/dist/plugins/mistral-types.d.ts.map +1 -0
- package/dist/plugins/mistral-types.js +8 -0
- package/dist/plugins/mistral-types.js.map +1 -0
- package/dist/plugins/mistral.d.ts +32 -0
- package/dist/plugins/mistral.d.ts.map +1 -0
- package/dist/plugins/mistral.js +133 -0
- package/dist/plugins/mistral.js.map +1 -0
- package/dist/plugins/ollama-types.d.ts +76 -0
- package/dist/plugins/ollama-types.d.ts.map +1 -0
- package/dist/plugins/ollama-types.js +8 -0
- package/dist/plugins/ollama-types.js.map +1 -0
- package/dist/plugins/ollama.d.ts +32 -0
- package/dist/plugins/ollama.d.ts.map +1 -0
- package/dist/plugins/ollama.js +130 -0
- package/dist/plugins/ollama.js.map +1 -0
- package/dist/plugins/openai-agents-types.d.ts +130 -0
- package/dist/plugins/openai-agents-types.d.ts.map +1 -0
- package/dist/plugins/openai-agents-types.js +12 -0
- package/dist/plugins/openai-agents-types.js.map +1 -0
- package/dist/plugins/openai-agents.d.ts +37 -0
- package/dist/plugins/openai-agents.d.ts.map +1 -0
- package/dist/plugins/openai-agents.js +151 -0
- package/dist/plugins/openai-agents.js.map +1 -0
- package/dist/plugins/semantic-kernel-types.d.ts +103 -0
- package/dist/plugins/semantic-kernel-types.d.ts.map +1 -0
- package/dist/plugins/semantic-kernel-types.js +13 -0
- package/dist/plugins/semantic-kernel-types.js.map +1 -0
- package/dist/plugins/semantic-kernel.d.ts +37 -0
- package/dist/plugins/semantic-kernel.d.ts.map +1 -0
- package/dist/plugins/semantic-kernel.js +149 -0
- package/dist/plugins/semantic-kernel.js.map +1 -0
- package/dist/plugins/vercel-ai.d.ts +134 -0
- package/dist/plugins/vercel-ai.d.ts.map +1 -0
- package/dist/plugins/vercel-ai.js +130 -0
- package/dist/plugins/vercel-ai.js.map +1 -0
- package/dist/policy-builder.d.ts +52 -0
- package/dist/policy-builder.d.ts.map +1 -0
- package/dist/policy-builder.js +108 -0
- package/dist/policy-builder.js.map +1 -0
- package/dist/policy-compose-presets.d.ts +18 -0
- package/dist/policy-compose-presets.d.ts.map +1 -0
- package/dist/policy-compose-presets.js +52 -0
- package/dist/policy-compose-presets.js.map +1 -0
- package/dist/policy-compose.d.ts +66 -0
- package/dist/policy-compose.d.ts.map +1 -0
- package/dist/policy-compose.js +163 -0
- package/dist/policy-compose.js.map +1 -0
- package/dist/policy-presets-extended.d.ts +35 -0
- package/dist/policy-presets-extended.d.ts.map +1 -0
- package/dist/policy-presets-extended.js +137 -0
- package/dist/policy-presets-extended.js.map +1 -0
- package/dist/policy-presets.d.ts +77 -0
- package/dist/policy-presets.d.ts.map +1 -0
- package/dist/policy-presets.js +164 -0
- package/dist/policy-presets.js.map +1 -0
- package/dist/policy-stage-defaults.d.ts +8 -0
- package/dist/policy-stage-defaults.d.ts.map +1 -0
- package/dist/policy-stage-defaults.js +34 -0
- package/dist/policy-stage-defaults.js.map +1 -0
- package/dist/policy-yaml.d.ts +23 -0
- package/dist/policy-yaml.d.ts.map +1 -0
- package/dist/policy-yaml.js +216 -0
- package/dist/policy-yaml.js.map +1 -0
- package/dist/policy.d.ts +124 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +161 -0
- package/dist/policy.js.map +1 -0
- package/dist/remote-enforce.d.ts +44 -0
- package/dist/remote-enforce.d.ts.map +1 -0
- package/dist/remote-enforce.js +99 -0
- package/dist/remote-enforce.js.map +1 -0
- package/dist/repo-patterns.d.ts +32 -0
- package/dist/repo-patterns.d.ts.map +1 -0
- package/dist/repo-patterns.js +222 -0
- package/dist/repo-patterns.js.map +1 -0
- package/dist/sandbox.d.ts +68 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +124 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/scorer-dimensions.d.ts +10 -0
- package/dist/scorer-dimensions.d.ts.map +1 -0
- package/dist/scorer-dimensions.js +184 -0
- package/dist/scorer-dimensions.js.map +1 -0
- package/dist/scorer.d.ts +27 -0
- package/dist/scorer.d.ts.map +1 -0
- package/dist/scorer.js +138 -0
- package/dist/scorer.js.map +1 -0
- package/dist/storage-postgres-schema.d.ts +47 -0
- package/dist/storage-postgres-schema.d.ts.map +1 -0
- package/dist/storage-postgres-schema.js +134 -0
- package/dist/storage-postgres-schema.js.map +1 -0
- package/dist/storage-postgres.d.ts +41 -0
- package/dist/storage-postgres.d.ts.map +1 -0
- package/dist/storage-postgres.js +180 -0
- package/dist/storage-postgres.js.map +1 -0
- package/dist/storage.d.ts +65 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +85 -0
- package/dist/storage.js.map +1 -0
- package/dist/supply-chain-sbom.d.ts +72 -0
- package/dist/supply-chain-sbom.d.ts.map +1 -0
- package/dist/supply-chain-sbom.js +73 -0
- package/dist/supply-chain-sbom.js.map +1 -0
- package/dist/supply-chain.d.ts +61 -0
- package/dist/supply-chain.d.ts.map +1 -0
- package/dist/supply-chain.js +95 -0
- package/dist/supply-chain.js.map +1 -0
- package/dist/token-types.d.ts +77 -0
- package/dist/token-types.d.ts.map +1 -0
- package/dist/token-types.js +31 -0
- package/dist/token-types.js.map +1 -0
- package/dist/types.d.ts +71 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +361 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in condition evaluators — registered at engine initialization.
|
|
3
|
+
* All 25 condition types from the original switch statement, now pluggable.
|
|
4
|
+
*/
|
|
5
|
+
import { detectInjection } from "../injection-detect.js";
|
|
6
|
+
import { evaluateBlocklist, evaluateInputLength, evaluateInputPattern } from "./preprocess.js";
|
|
7
|
+
import { evaluateNetworkAllowlist, evaluateScopeBoundary, evaluateCostBudget, evaluateConcurrentLimit } from "./process.js";
|
|
8
|
+
import { evaluateOutputLength, evaluateOutputPattern, evaluateSensitiveDataFilter } from "./postprocess.js";
|
|
9
|
+
/** Extract all string values from a nested object for scanning */
|
|
10
|
+
function extractStrings(obj) {
|
|
11
|
+
const out = [];
|
|
12
|
+
(function walk(v) {
|
|
13
|
+
if (typeof v === "string")
|
|
14
|
+
out.push(v);
|
|
15
|
+
else if (Array.isArray(v))
|
|
16
|
+
v.forEach(walk);
|
|
17
|
+
else if (v && typeof v === "object")
|
|
18
|
+
Object.values(v).forEach(walk);
|
|
19
|
+
})(obj);
|
|
20
|
+
if (out.length > 1)
|
|
21
|
+
out.push(out.join(" "));
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create the full list of built-in condition definitions.
|
|
26
|
+
* Accepts `evalCondition` so combinators (any_of, all_of, not) can recurse.
|
|
27
|
+
*/
|
|
28
|
+
export function getBuiltinConditions(evalCondition) {
|
|
29
|
+
return [
|
|
30
|
+
// ─── Access control ────────────────────────────────────────
|
|
31
|
+
{
|
|
32
|
+
name: "tool_blocked",
|
|
33
|
+
description: "Block specific tools",
|
|
34
|
+
evaluator: (ctx, p) => {
|
|
35
|
+
const tools = p.tools;
|
|
36
|
+
return !!ctx.tool && tools.includes(ctx.tool);
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: "tool_allowed",
|
|
41
|
+
description: "Only allow listed tools",
|
|
42
|
+
evaluator: (ctx, p) => {
|
|
43
|
+
const tools = p.tools;
|
|
44
|
+
return !!ctx.tool && !tools.includes(ctx.tool);
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: "action_type",
|
|
49
|
+
description: "Gate specific action types",
|
|
50
|
+
evaluator: (ctx, p) => {
|
|
51
|
+
const actions = p.actions;
|
|
52
|
+
return actions.includes(ctx.action);
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "agent_level",
|
|
57
|
+
description: "Require minimum governance level",
|
|
58
|
+
evaluator: (ctx, p) => {
|
|
59
|
+
const minLevel = p.minLevel;
|
|
60
|
+
return (ctx.agentLevel ?? 0) < minLevel;
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: "tool_sequence",
|
|
65
|
+
description: "Require tools to run in order",
|
|
66
|
+
evaluator: (ctx, p) => {
|
|
67
|
+
const tool = p.tool;
|
|
68
|
+
const requiredPrior = p.requiredPrior;
|
|
69
|
+
if (ctx.tool !== tool)
|
|
70
|
+
return false;
|
|
71
|
+
if (!ctx.toolHistory || ctx.toolHistory.length === 0)
|
|
72
|
+
return true;
|
|
73
|
+
return !requiredPrior.every((t) => ctx.toolHistory.includes(t));
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
// ─── Resource limits ───────────────────────────────────────
|
|
77
|
+
{
|
|
78
|
+
name: "token_limit",
|
|
79
|
+
description: "Cap per-session token usage",
|
|
80
|
+
evaluator: (ctx, p) => (ctx.sessionTokensUsed ?? 0) > p.maxTokens,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: "rate_limit",
|
|
84
|
+
description: "Limit actions per time window",
|
|
85
|
+
evaluator: (ctx, p) => (ctx.recentActionCount ?? 0) > p.maxActions,
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: "data_classification",
|
|
89
|
+
description: "Block classified data access",
|
|
90
|
+
evaluator: (ctx, p) => {
|
|
91
|
+
if (!ctx.input)
|
|
92
|
+
return false;
|
|
93
|
+
const blocked = p.blocked;
|
|
94
|
+
const inputStr = JSON.stringify(ctx.input).toLowerCase();
|
|
95
|
+
return blocked.some((b) => inputStr.includes(b.toLowerCase()));
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "time_window",
|
|
100
|
+
description: "Restrict to specific hours",
|
|
101
|
+
evaluator: (_ctx, p) => {
|
|
102
|
+
const hour = new Date().getHours();
|
|
103
|
+
const hours = p.allowedHours;
|
|
104
|
+
if (hours.start <= hours.end)
|
|
105
|
+
return hour < hours.start || hour >= hours.end;
|
|
106
|
+
return hour < hours.start && hour >= hours.end;
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: "cost_budget",
|
|
111
|
+
description: "Cap monetary cost per session",
|
|
112
|
+
evaluator: (ctx, p) => evaluateCostBudget(ctx, p.maxCost),
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: "concurrent_limit",
|
|
116
|
+
description: "Cap parallel tool executions",
|
|
117
|
+
evaluator: (ctx, p) => evaluateConcurrentLimit(ctx, p.maxConcurrent),
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: "network_allowlist",
|
|
121
|
+
description: "Only allow listed domains",
|
|
122
|
+
evaluator: (ctx, p) => evaluateNetworkAllowlist(ctx, p.allowedDomains),
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: "scope_boundary",
|
|
126
|
+
description: "Restrict file/resource access paths",
|
|
127
|
+
evaluator: (ctx, p) => evaluateScopeBoundary(ctx, p.allowedPaths, p.blockedPaths),
|
|
128
|
+
},
|
|
129
|
+
// ─── Input safety (preprocess) ─────────────────────────────
|
|
130
|
+
{
|
|
131
|
+
name: "injection_guard",
|
|
132
|
+
description: "Detect prompt injection attacks",
|
|
133
|
+
evaluator: (ctx, p) => {
|
|
134
|
+
if (!ctx.input)
|
|
135
|
+
return false;
|
|
136
|
+
const skip = (p.skipCategories ?? []);
|
|
137
|
+
const opts = { threshold: p.threshold, skipCategories: skip.length > 0 ? skip : undefined };
|
|
138
|
+
for (const str of extractStrings(ctx.input)) {
|
|
139
|
+
if (detectInjection(str, opts).detected)
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
return false;
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: "blocklist",
|
|
147
|
+
description: "Block input containing specific terms",
|
|
148
|
+
evaluator: (ctx, p) => evaluateBlocklist(ctx, p.terms, p.caseSensitive),
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: "input_length",
|
|
152
|
+
description: "Reject oversized inputs",
|
|
153
|
+
evaluator: (ctx, p) => evaluateInputLength(ctx, p.maxChars, p.maxTokens),
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
name: "input_pattern",
|
|
157
|
+
description: "Block input matching a regex",
|
|
158
|
+
evaluator: (ctx, p) => evaluateInputPattern(ctx, p.pattern, p.flags),
|
|
159
|
+
},
|
|
160
|
+
// ─── Output safety (postprocess) ───────────────────────────
|
|
161
|
+
{
|
|
162
|
+
name: "output_length",
|
|
163
|
+
description: "Reject oversized outputs",
|
|
164
|
+
evaluator: (ctx, p) => evaluateOutputLength(ctx, p.maxChars, p.maxTokens),
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: "output_pattern",
|
|
168
|
+
description: "Detect patterns in output",
|
|
169
|
+
evaluator: (ctx, p) => evaluateOutputPattern(ctx, p.pattern, p.flags),
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: "sensitive_data_filter",
|
|
173
|
+
description: "Detect leaked credentials and secrets",
|
|
174
|
+
evaluator: (ctx, p) => evaluateSensitiveDataFilter(ctx, p.patterns),
|
|
175
|
+
},
|
|
176
|
+
// ─── Identity ─────────────────────────────────────────────
|
|
177
|
+
{
|
|
178
|
+
name: "require_signed_action",
|
|
179
|
+
description: "Require a cryptographic signature in action metadata",
|
|
180
|
+
evaluator: (ctx) => {
|
|
181
|
+
// Block if no signature present in metadata
|
|
182
|
+
const meta = ctx.metadata;
|
|
183
|
+
return !meta || !meta.signature || typeof meta.signature !== "string";
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
// ─── Combinators ───────────────────────────────────────────
|
|
187
|
+
{
|
|
188
|
+
name: "any_of",
|
|
189
|
+
description: "Match if any sub-condition matches",
|
|
190
|
+
evaluator: (ctx, p) => {
|
|
191
|
+
const conditions = p.conditions;
|
|
192
|
+
return conditions.some((c) => evalCondition(c, ctx));
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
name: "all_of",
|
|
197
|
+
description: "Match if all sub-conditions match",
|
|
198
|
+
evaluator: (ctx, p) => {
|
|
199
|
+
const conditions = p.conditions;
|
|
200
|
+
return conditions.every((c) => evalCondition(c, ctx));
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
name: "not",
|
|
205
|
+
description: "Invert a condition",
|
|
206
|
+
evaluator: (ctx, p) => {
|
|
207
|
+
const condition = p.condition;
|
|
208
|
+
return !evalCondition(condition, ctx);
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
];
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=builtins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/conditions/builtins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postprocess condition evaluators — run after agent execution.
|
|
3
|
+
* Output length, output pattern, and sensitive data filtering.
|
|
4
|
+
*/
|
|
5
|
+
import type { EnforcementContext } from "../policy.js";
|
|
6
|
+
/** Check if output exceeds length limits */
|
|
7
|
+
export declare function evaluateOutputLength(ctx: EnforcementContext, maxChars?: number, maxTokens?: number): boolean;
|
|
8
|
+
/** Check if output matches a regex pattern (e.g., secrets, API keys) */
|
|
9
|
+
export declare function evaluateOutputPattern(ctx: EnforcementContext, pattern: string, flags?: string): boolean;
|
|
10
|
+
/** Scan output for sensitive data using built-in or custom patterns */
|
|
11
|
+
export declare function evaluateSensitiveDataFilter(ctx: EnforcementContext, patternIds?: string[]): boolean;
|
|
12
|
+
//# sourceMappingURL=postprocess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postprocess.d.ts","sourceRoot":"","sources":["../../src/conditions/postprocess.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,4CAA4C;AAC5C,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,kBAAkB,EACvB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAST;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,EACvB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAKT;AAED,uEAAuE;AACvE,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,kBAAkB,EACvB,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,OAAO,CAKT"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postprocess condition evaluators — run after agent execution.
|
|
3
|
+
* Output length, output pattern, and sensitive data filtering.
|
|
4
|
+
*/
|
|
5
|
+
import { getSensitivePatterns } from "./sensitive-patterns.js";
|
|
6
|
+
/** Check if output exceeds length limits */
|
|
7
|
+
export function evaluateOutputLength(ctx, maxChars, maxTokens) {
|
|
8
|
+
if (!ctx.outputText)
|
|
9
|
+
return false;
|
|
10
|
+
if (maxChars !== undefined && ctx.outputText.length > maxChars)
|
|
11
|
+
return true;
|
|
12
|
+
if (maxTokens !== undefined) {
|
|
13
|
+
const count = ctx.outputTokenCount ?? Math.ceil(ctx.outputText.length / 4);
|
|
14
|
+
if (count > maxTokens)
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
/** Check if output matches a regex pattern (e.g., secrets, API keys) */
|
|
20
|
+
export function evaluateOutputPattern(ctx, pattern, flags) {
|
|
21
|
+
if (!ctx.outputText)
|
|
22
|
+
return false;
|
|
23
|
+
const regex = new RegExp(pattern, flags);
|
|
24
|
+
return regex.test(ctx.outputText);
|
|
25
|
+
}
|
|
26
|
+
/** Scan output for sensitive data using built-in or custom patterns */
|
|
27
|
+
export function evaluateSensitiveDataFilter(ctx, patternIds) {
|
|
28
|
+
if (!ctx.outputText)
|
|
29
|
+
return false;
|
|
30
|
+
const patterns = getSensitivePatterns(patternIds);
|
|
31
|
+
return patterns.some((p) => p.pattern.test(ctx.outputText));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=postprocess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postprocess.js","sourceRoot":"","sources":["../../src/conditions/postprocess.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,4CAA4C;AAC5C,MAAM,UAAU,oBAAoB,CAClC,GAAuB,EACvB,QAAiB,EACjB,SAAkB;IAElB,IAAI,CAAC,GAAG,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAElC,IAAI,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC5E,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3E,IAAI,KAAK,GAAG,SAAS;YAAE,OAAO,IAAI,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,qBAAqB,CACnC,GAAuB,EACvB,OAAe,EACf,KAAc;IAEd,IAAI,CAAC,GAAG,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAElC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,2BAA2B,CACzC,GAAuB,EACvB,UAAqB;IAErB,IAAI,CAAC,GAAG,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAElC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAW,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preprocess condition evaluators — run before agent processing.
|
|
3
|
+
* Blocklist, input length, and input pattern matching.
|
|
4
|
+
*/
|
|
5
|
+
import type { EnforcementContext } from "../policy.js";
|
|
6
|
+
/** Check if input contains any blocked terms */
|
|
7
|
+
export declare function evaluateBlocklist(ctx: EnforcementContext, terms: string[], caseSensitive?: boolean): boolean;
|
|
8
|
+
/** Check if input exceeds length limits */
|
|
9
|
+
export declare function evaluateInputLength(ctx: EnforcementContext, maxChars?: number, maxTokens?: number): boolean;
|
|
10
|
+
/** Check if input matches a regex pattern */
|
|
11
|
+
export declare function evaluateInputPattern(ctx: EnforcementContext, pattern: string, flags?: string): boolean;
|
|
12
|
+
//# sourceMappingURL=preprocess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preprocess.d.ts","sourceRoot":"","sources":["../../src/conditions/preprocess.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,gDAAgD;AAChD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,kBAAkB,EACvB,KAAK,EAAE,MAAM,EAAE,EACf,aAAa,CAAC,EAAE,OAAO,GACtB,OAAO,CAST;AAED,2CAA2C;AAC3C,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,kBAAkB,EACvB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAWT;AAED,6CAA6C;AAC7C,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,kBAAkB,EACvB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAMT"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preprocess condition evaluators — run before agent processing.
|
|
3
|
+
* Blocklist, input length, and input pattern matching.
|
|
4
|
+
*/
|
|
5
|
+
/** Check if input contains any blocked terms */
|
|
6
|
+
export function evaluateBlocklist(ctx, terms, caseSensitive) {
|
|
7
|
+
const inputStr = getInputString(ctx);
|
|
8
|
+
if (!inputStr)
|
|
9
|
+
return false;
|
|
10
|
+
const haystack = caseSensitive ? inputStr : inputStr.toLowerCase();
|
|
11
|
+
return terms.some((term) => {
|
|
12
|
+
const needle = caseSensitive ? term : term.toLowerCase();
|
|
13
|
+
return haystack.includes(needle);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/** Check if input exceeds length limits */
|
|
17
|
+
export function evaluateInputLength(ctx, maxChars, maxTokens) {
|
|
18
|
+
const inputStr = getInputString(ctx);
|
|
19
|
+
if (!inputStr)
|
|
20
|
+
return false;
|
|
21
|
+
if (maxChars !== undefined && inputStr.length > maxChars)
|
|
22
|
+
return true;
|
|
23
|
+
if (maxTokens !== undefined) {
|
|
24
|
+
// Rough estimate: ~4 chars per token
|
|
25
|
+
const estimated = Math.ceil(inputStr.length / 4);
|
|
26
|
+
if (estimated > maxTokens)
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
/** Check if input matches a regex pattern */
|
|
32
|
+
export function evaluateInputPattern(ctx, pattern, flags) {
|
|
33
|
+
const inputStr = getInputString(ctx);
|
|
34
|
+
if (!inputStr)
|
|
35
|
+
return false;
|
|
36
|
+
const regex = new RegExp(pattern, flags);
|
|
37
|
+
return regex.test(inputStr);
|
|
38
|
+
}
|
|
39
|
+
/** Extract a string representation of the input for scanning */
|
|
40
|
+
function getInputString(ctx) {
|
|
41
|
+
if (!ctx.input)
|
|
42
|
+
return null;
|
|
43
|
+
return typeof ctx.input === "string"
|
|
44
|
+
? ctx.input
|
|
45
|
+
: JSON.stringify(ctx.input);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=preprocess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preprocess.js","sourceRoot":"","sources":["../../src/conditions/preprocess.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,gDAAgD;AAChD,MAAM,UAAU,iBAAiB,CAC/B,GAAuB,EACvB,KAAe,EACf,aAAuB;IAEvB,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACnE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACzD,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,mBAAmB,CACjC,GAAuB,EACvB,QAAiB,EACjB,SAAkB;IAElB,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ;QAAE,OAAO,IAAI,CAAC;IACtE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,qCAAqC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjD,IAAI,SAAS,GAAG,SAAS;YAAE,OAAO,IAAI,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,oBAAoB,CAClC,GAAuB,EACvB,OAAe,EACf,KAAc;IAEd,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,gEAAgE;AAChE,SAAS,cAAc,CAAC,GAAuB;IAC7C,IAAI,CAAC,GAAG,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAClC,CAAC,CAAC,GAAG,CAAC,KAAK;QACX,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process condition evaluators — run during agent execution.
|
|
3
|
+
* Network allowlist, scope boundary, cost budget, concurrent limit.
|
|
4
|
+
*/
|
|
5
|
+
import type { EnforcementContext } from "../policy.js";
|
|
6
|
+
/** Check if target URL domain is in the allowlist */
|
|
7
|
+
export declare function evaluateNetworkAllowlist(ctx: EnforcementContext, allowedDomains: string[]): boolean;
|
|
8
|
+
/** Check if target path violates scope boundaries */
|
|
9
|
+
export declare function evaluateScopeBoundary(ctx: EnforcementContext, allowedPaths?: string[], blockedPaths?: string[]): boolean;
|
|
10
|
+
/** Check if session cost exceeds budget */
|
|
11
|
+
export declare function evaluateCostBudget(ctx: EnforcementContext, maxCost: number): boolean;
|
|
12
|
+
/** Check if concurrent tool count exceeds limit */
|
|
13
|
+
export declare function evaluateConcurrentLimit(ctx: EnforcementContext, maxConcurrent: number): boolean;
|
|
14
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/conditions/process.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,qDAAqD;AACrD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,kBAAkB,EACvB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAgBT;AAED,qDAAqD;AACrD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,EACvB,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAaT;AAED,2CAA2C;AAC3C,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,kBAAkB,EACvB,OAAO,EAAE,MAAM,GACd,OAAO,CAET;AAED,mDAAmD;AACnD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,kBAAkB,EACvB,aAAa,EAAE,MAAM,GACpB,OAAO,CAET"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process condition evaluators — run during agent execution.
|
|
3
|
+
* Network allowlist, scope boundary, cost budget, concurrent limit.
|
|
4
|
+
*/
|
|
5
|
+
/** Check if target URL domain is in the allowlist */
|
|
6
|
+
export function evaluateNetworkAllowlist(ctx, allowedDomains) {
|
|
7
|
+
if (!ctx.targetUrl)
|
|
8
|
+
return false;
|
|
9
|
+
let hostname;
|
|
10
|
+
try {
|
|
11
|
+
hostname = new URL(ctx.targetUrl).hostname;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
// If it's not a valid URL, treat the raw string as a hostname
|
|
15
|
+
hostname = ctx.targetUrl;
|
|
16
|
+
}
|
|
17
|
+
const lower = hostname.toLowerCase();
|
|
18
|
+
return !allowedDomains.some((d) => {
|
|
19
|
+
const domain = d.toLowerCase();
|
|
20
|
+
return lower === domain || lower.endsWith(`.${domain}`);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/** Check if target path violates scope boundaries */
|
|
24
|
+
export function evaluateScopeBoundary(ctx, allowedPaths, blockedPaths) {
|
|
25
|
+
if (!ctx.targetPath)
|
|
26
|
+
return false;
|
|
27
|
+
const p = normalizePath(ctx.targetPath);
|
|
28
|
+
if (blockedPaths && blockedPaths.length > 0) {
|
|
29
|
+
if (blockedPaths.some((bp) => pathMatches(p, normalizePath(bp))))
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
if (allowedPaths && allowedPaths.length > 0) {
|
|
33
|
+
if (!allowedPaths.some((ap) => pathMatches(p, normalizePath(ap))))
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
/** Check if session cost exceeds budget */
|
|
39
|
+
export function evaluateCostBudget(ctx, maxCost) {
|
|
40
|
+
return (ctx.sessionCost ?? 0) > maxCost;
|
|
41
|
+
}
|
|
42
|
+
/** Check if concurrent tool count exceeds limit */
|
|
43
|
+
export function evaluateConcurrentLimit(ctx, maxConcurrent) {
|
|
44
|
+
return (ctx.concurrentCount ?? 0) > maxConcurrent;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Normalize a path by resolving `.` and `..` segments to prevent traversal bypass.
|
|
48
|
+
* Does not touch the filesystem — pure string manipulation.
|
|
49
|
+
*/
|
|
50
|
+
function normalizePath(p) {
|
|
51
|
+
const isAbsolute = p.startsWith("/");
|
|
52
|
+
const parts = p.split("/");
|
|
53
|
+
const out = [];
|
|
54
|
+
for (const seg of parts) {
|
|
55
|
+
if (seg === "." || seg === "")
|
|
56
|
+
continue;
|
|
57
|
+
if (seg === "..") {
|
|
58
|
+
// Don't pop above root for absolute paths
|
|
59
|
+
if (out.length > 0 && out[out.length - 1] !== "..")
|
|
60
|
+
out.pop();
|
|
61
|
+
else if (!isAbsolute)
|
|
62
|
+
out.push(seg);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
out.push(seg);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return (isAbsolute ? "/" : "") + out.join("/");
|
|
69
|
+
}
|
|
70
|
+
/** Simple path matching — supports trailing wildcard (*) */
|
|
71
|
+
function pathMatches(target, pattern) {
|
|
72
|
+
if (pattern.endsWith("/*") || pattern.endsWith("/**")) {
|
|
73
|
+
const prefix = pattern.replace(/\/\*{1,2}$/, "");
|
|
74
|
+
return target === prefix || target.startsWith(prefix + "/");
|
|
75
|
+
}
|
|
76
|
+
return target === pattern;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/conditions/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in regex patterns for detecting sensitive data in outputs.
|
|
3
|
+
* Used by the sensitive_data_filter condition.
|
|
4
|
+
*/
|
|
5
|
+
export interface SensitivePattern {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
pattern: RegExp;
|
|
9
|
+
}
|
|
10
|
+
export declare const SENSITIVE_PATTERNS: SensitivePattern[];
|
|
11
|
+
/** Get patterns by ID list, or all if empty/undefined */
|
|
12
|
+
export declare function getSensitivePatterns(ids?: string[]): SensitivePattern[];
|
|
13
|
+
//# sourceMappingURL=sensitive-patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive-patterns.d.ts","sourceRoot":"","sources":["../../src/conditions/sensitive-patterns.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EA8BhD,CAAC;AAEF,yDAAyD;AACzD,wBAAgB,oBAAoB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAGvE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in regex patterns for detecting sensitive data in outputs.
|
|
3
|
+
* Used by the sensitive_data_filter condition.
|
|
4
|
+
*/
|
|
5
|
+
export const SENSITIVE_PATTERNS = [
|
|
6
|
+
// ── Credentials & Secrets ──
|
|
7
|
+
{ id: "aws_key", name: "AWS Access Key", pattern: /AKIA[0-9A-Z]{16}/ },
|
|
8
|
+
{ id: "aws_secret", name: "AWS Secret Key", pattern: /[0-9a-zA-Z/+]{40}(?=\s|$|"|')/ },
|
|
9
|
+
{ id: "github_pat", name: "GitHub PAT", pattern: /ghp_[0-9a-zA-Z]{36}/ },
|
|
10
|
+
{ id: "github_oauth", name: "GitHub OAuth", pattern: /gho_[0-9a-zA-Z]{36}/ },
|
|
11
|
+
{ id: "github_app", name: "GitHub App Token", pattern: /ghs_[0-9a-zA-Z]{36}/ },
|
|
12
|
+
{ id: "generic_sk", name: "Secret Key (sk-)", pattern: /sk-[0-9a-zA-Z-]{20,}/ },
|
|
13
|
+
{ id: "generic_pk", name: "Public Key (pk-)", pattern: /pk-[0-9a-zA-Z-]{20,}/ },
|
|
14
|
+
{ id: "jwt", name: "JWT", pattern: /eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/ },
|
|
15
|
+
{ id: "private_key", name: "Private Key", pattern: /-----BEGIN (?:RSA |EC |DSA )?PRIVATE KEY-----/ },
|
|
16
|
+
{ id: "postgres_uri", name: "PostgreSQL URI", pattern: /postgres(?:ql)?:\/\/[^\s]+/ },
|
|
17
|
+
{ id: "mysql_uri", name: "MySQL URI", pattern: /mysql:\/\/[^\s]+/ },
|
|
18
|
+
{ id: "mongodb_uri", name: "MongoDB URI", pattern: /mongodb(?:\+srv)?:\/\/[^\s]+/ },
|
|
19
|
+
{ id: "redis_uri", name: "Redis URI", pattern: /redis(?:s)?:\/\/[^\s]+/ },
|
|
20
|
+
{ id: "slack_token", name: "Slack Token", pattern: /xox[bpras]-[0-9a-zA-Z-]+/ },
|
|
21
|
+
{ id: "stripe_key", name: "Stripe Key", pattern: /sk_(?:live|test)_[0-9a-zA-Z]{24,}/ },
|
|
22
|
+
{ id: "sendgrid_key", name: "SendGrid Key", pattern: /SG\.[0-9a-zA-Z_-]{22}\.[0-9a-zA-Z_-]{43}/ },
|
|
23
|
+
{ id: "anthropic_key", name: "Anthropic Key", pattern: /sk-ant-[0-9a-zA-Z_-]{20,}/ },
|
|
24
|
+
{ id: "google_api_key", name: "Google API Key", pattern: /AIza[0-9A-Za-z_-]{35}/ },
|
|
25
|
+
// ── PII ──
|
|
26
|
+
{ id: "ssn", name: "US SSN", pattern: /\b\d{3}-\d{2}-\d{4}\b/ },
|
|
27
|
+
{ id: "credit_card", name: "Credit Card Number", pattern: /\b(?:4\d{3}|5[1-5]\d{2}|3[47]\d{2}|6(?:011|5\d{2}))[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/ },
|
|
28
|
+
{ id: "email_address", name: "Email Address", pattern: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/ },
|
|
29
|
+
{ id: "phone_us", name: "US Phone Number", pattern: /\b(?:\+1[- ]?)?\(?\d{3}\)?[- ]?\d{3}[- ]?\d{4}\b/ },
|
|
30
|
+
{ id: "ip_address", name: "IP Address", pattern: /\b(?:\d{1,3}\.){3}\d{1,3}\b/ },
|
|
31
|
+
// ── System Prompt Leak ──
|
|
32
|
+
{ id: "system_prompt_leak", name: "System Prompt Leak", pattern: /\b(?:my|the|your|our)\s+(?:system\s+)?(?:prompt|instructions?)\s+(?:is|are|says?|reads?|states?)\s*:/i },
|
|
33
|
+
{ id: "hidden_instructions", name: "Hidden Instructions Leak", pattern: /\b(?:hidden|secret|internal|original|initial|confidential)\s+(?:system\s+)?(?:prompt|instructions?|guidelines?)\b/i },
|
|
34
|
+
{ id: "never_reveal", name: "Leaking 'Never Reveal' Content", pattern: /\b(?:you\s+must\s+never|never\s+reveal|do\s+not\s+(?:share|reveal|disclose)|must\s+not\s+(?:share|reveal|disclose))\s+(?:these|this|the|your)\s+(?:instructions?|prompt|rules?|guidelines?)\b/i },
|
|
35
|
+
];
|
|
36
|
+
/** Get patterns by ID list, or all if empty/undefined */
|
|
37
|
+
export function getSensitivePatterns(ids) {
|
|
38
|
+
if (!ids || ids.length === 0)
|
|
39
|
+
return SENSITIVE_PATTERNS;
|
|
40
|
+
return SENSITIVE_PATTERNS.filter((p) => ids.includes(p.id));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=sensitive-patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive-patterns.js","sourceRoot":"","sources":["../../src/conditions/sensitive-patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dry Run — test policies against your fleet without enforcing.
|
|
3
|
+
*
|
|
4
|
+
* Essential for CI/CD pipelines, policy reviews, and migration planning.
|
|
5
|
+
* Simulates enforcement against registered agents and returns what
|
|
6
|
+
* WOULD have been blocked, without actually blocking anything.
|
|
7
|
+
*/
|
|
8
|
+
import type { GovernanceInstance } from "./index.js";
|
|
9
|
+
import type { PolicyRule, PolicyAction, PolicyStage, EnforcementDecision } from "./policy.js";
|
|
10
|
+
export interface DryRunScenario {
|
|
11
|
+
/** Agent to simulate (by ID or name) */
|
|
12
|
+
agentId?: string;
|
|
13
|
+
agentName?: string;
|
|
14
|
+
/** Actions to simulate */
|
|
15
|
+
actions: DryRunAction[];
|
|
16
|
+
}
|
|
17
|
+
export interface DryRunAction {
|
|
18
|
+
action: PolicyAction;
|
|
19
|
+
tool?: string;
|
|
20
|
+
input?: Record<string, unknown>;
|
|
21
|
+
/** Pipeline stage to scope evaluation (omit for all-rules evaluation) */
|
|
22
|
+
stage?: PolicyStage;
|
|
23
|
+
/** Agent output text for postprocess evaluation */
|
|
24
|
+
outputText?: string;
|
|
25
|
+
outputTokenCount?: number;
|
|
26
|
+
sessionTokensUsed?: number;
|
|
27
|
+
recentActionCount?: number;
|
|
28
|
+
toolHistory?: string[];
|
|
29
|
+
targetUrl?: string;
|
|
30
|
+
targetPath?: string;
|
|
31
|
+
sessionCost?: number;
|
|
32
|
+
concurrentCount?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface DryRunResult {
|
|
35
|
+
agentId: string;
|
|
36
|
+
agentName: string;
|
|
37
|
+
agentLevel: number;
|
|
38
|
+
decisions: DryRunDecision[];
|
|
39
|
+
summary: DryRunSummary;
|
|
40
|
+
}
|
|
41
|
+
export interface DryRunDecision {
|
|
42
|
+
action: DryRunAction;
|
|
43
|
+
decision: EnforcementDecision;
|
|
44
|
+
}
|
|
45
|
+
export interface DryRunSummary {
|
|
46
|
+
totalActions: number;
|
|
47
|
+
wouldBlock: number;
|
|
48
|
+
wouldAllow: number;
|
|
49
|
+
wouldRequireApproval: number;
|
|
50
|
+
wouldWarn: number;
|
|
51
|
+
blockRate: number;
|
|
52
|
+
rulesTriggered: string[];
|
|
53
|
+
}
|
|
54
|
+
export interface DryRunConfig {
|
|
55
|
+
/** Rules to test (defaults to governance instance rules) */
|
|
56
|
+
rules?: PolicyRule[];
|
|
57
|
+
/** Default outcome when no rules match */
|
|
58
|
+
defaultOutcome?: "allow" | "block";
|
|
59
|
+
}
|
|
60
|
+
export interface FleetDryRunResult {
|
|
61
|
+
results: DryRunResult[];
|
|
62
|
+
fleetSummary: {
|
|
63
|
+
totalAgents: number;
|
|
64
|
+
totalActions: number;
|
|
65
|
+
totalBlocked: number;
|
|
66
|
+
totalAllowed: number;
|
|
67
|
+
blockRate: number;
|
|
68
|
+
agentsAffected: number;
|
|
69
|
+
rulesTriggered: string[];
|
|
70
|
+
};
|
|
71
|
+
testedAt: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Run a dry-run simulation against a single agent.
|
|
75
|
+
*
|
|
76
|
+
* Tests policies against a set of actions without modifying state.
|
|
77
|
+
*/
|
|
78
|
+
export declare function dryRun(governance: GovernanceInstance, scenario: DryRunScenario, config?: DryRunConfig): Promise<DryRunResult>;
|
|
79
|
+
/**
|
|
80
|
+
* Run a dry-run simulation against the entire fleet.
|
|
81
|
+
*
|
|
82
|
+
* Tests the same set of actions against every registered agent.
|
|
83
|
+
*/
|
|
84
|
+
export declare function fleetDryRun(governance: GovernanceInstance, actions: DryRunAction[], config?: DryRunConfig): Promise<FleetDryRunResult>;
|
|
85
|
+
//# sourceMappingURL=dry-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dry-run.d.ts","sourceRoot":"","sources":["../src/dry-run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,yEAAyE;IACzE,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,YAAY,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID;;;;GAIG;AACH,wBAAsB,MAAM,CAC1B,UAAU,EAAE,kBAAkB,EAC9B,QAAQ,EAAE,cAAc,EACxB,MAAM,GAAE,YAAiB,GACxB,OAAO,CAAC,YAAY,CAAC,CAwFvB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,GAAE,YAAiB,GACxB,OAAO,CAAC,iBAAiB,CAAC,CA8C5B"}
|