@waratahlabs/canopy 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 +323 -0
- package/SKILL.md +97 -0
- package/demo/data/openclaw-demo.tc.json +397 -0
- package/demo/data/openclaw-nemoclaw-demo.tc.json +475 -0
- package/demo/index.html +556 -0
- package/dist/adapters/a2a.d.ts +82 -0
- package/dist/adapters/a2a.d.ts.map +1 -0
- package/dist/adapters/a2a.js +215 -0
- package/dist/adapters/a2a.js.map +1 -0
- package/dist/adapters/a2a.test.d.ts +2 -0
- package/dist/adapters/a2a.test.d.ts.map +1 -0
- package/dist/adapters/a2a.test.js +196 -0
- package/dist/adapters/a2a.test.js.map +1 -0
- package/dist/adapters/langfuse.d.ts +28 -0
- package/dist/adapters/langfuse.d.ts.map +1 -0
- package/dist/adapters/langfuse.js +192 -0
- package/dist/adapters/langfuse.js.map +1 -0
- package/dist/adapters/n8n.d.ts +4 -0
- package/dist/adapters/n8n.d.ts.map +1 -0
- package/dist/adapters/n8n.js +89 -0
- package/dist/adapters/n8n.js.map +1 -0
- package/dist/adapters/openclaw.d.ts +58 -0
- package/dist/adapters/openclaw.d.ts.map +1 -0
- package/dist/adapters/openclaw.js +275 -0
- package/dist/adapters/openclaw.js.map +1 -0
- package/dist/adapters/types.d.ts +33 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/aivss/atlas/coverage-matrix.d.ts +12 -0
- package/dist/aivss/atlas/coverage-matrix.d.ts.map +1 -0
- package/dist/aivss/atlas/coverage-matrix.js +272 -0
- package/dist/aivss/atlas/coverage-matrix.js.map +1 -0
- package/dist/aivss/atlas/loader.d.ts +28 -0
- package/dist/aivss/atlas/loader.d.ts.map +1 -0
- package/dist/aivss/atlas/loader.js +126 -0
- package/dist/aivss/atlas/loader.js.map +1 -0
- package/dist/aivss/atlas/loader.test.d.ts +11 -0
- package/dist/aivss/atlas/loader.test.d.ts.map +1 -0
- package/dist/aivss/atlas/loader.test.js +111 -0
- package/dist/aivss/atlas/loader.test.js.map +1 -0
- package/dist/aivss/atlas/resolve-path.d.ts +34 -0
- package/dist/aivss/atlas/resolve-path.d.ts.map +1 -0
- package/dist/aivss/atlas/resolve-path.js +58 -0
- package/dist/aivss/atlas/resolve-path.js.map +1 -0
- package/dist/aivss/batch/batch-builder.d.ts +11 -0
- package/dist/aivss/batch/batch-builder.d.ts.map +1 -0
- package/dist/aivss/batch/batch-builder.js +75 -0
- package/dist/aivss/batch/batch-builder.js.map +1 -0
- package/dist/aivss/index.d.ts +21 -0
- package/dist/aivss/index.d.ts.map +1 -0
- package/dist/aivss/index.js +19 -0
- package/dist/aivss/index.js.map +1 -0
- package/dist/aivss/knowledge-base/kb-client.d.ts +9 -0
- package/dist/aivss/knowledge-base/kb-client.d.ts.map +1 -0
- package/dist/aivss/knowledge-base/kb-client.js +139 -0
- package/dist/aivss/knowledge-base/kb-client.js.map +1 -0
- package/dist/aivss/knowledge-base/kb-types.d.ts +21 -0
- package/dist/aivss/knowledge-base/kb-types.d.ts.map +1 -0
- package/dist/aivss/knowledge-base/kb-types.js +2 -0
- package/dist/aivss/knowledge-base/kb-types.js.map +1 -0
- package/dist/aivss/knowledge-base/search-builder.d.ts +7 -0
- package/dist/aivss/knowledge-base/search-builder.d.ts.map +1 -0
- package/dist/aivss/knowledge-base/search-builder.js +119 -0
- package/dist/aivss/knowledge-base/search-builder.js.map +1 -0
- package/dist/aivss/metrics/aa.d.ts +3 -0
- package/dist/aivss/metrics/aa.d.ts.map +1 -0
- package/dist/aivss/metrics/aa.js +26 -0
- package/dist/aivss/metrics/aa.js.map +1 -0
- package/dist/aivss/metrics/ad.d.ts +3 -0
- package/dist/aivss/metrics/ad.d.ts.map +1 -0
- package/dist/aivss/metrics/ad.js +30 -0
- package/dist/aivss/metrics/ad.js.map +1 -0
- package/dist/aivss/metrics/cs.d.ts +3 -0
- package/dist/aivss/metrics/cs.d.ts.map +1 -0
- package/dist/aivss/metrics/cs.js +50 -0
- package/dist/aivss/metrics/cs.js.map +1 -0
- package/dist/aivss/metrics/dc.d.ts +3 -0
- package/dist/aivss/metrics/dc.d.ts.map +1 -0
- package/dist/aivss/metrics/dc.js +30 -0
- package/dist/aivss/metrics/dc.js.map +1 -0
- package/dist/aivss/metrics/ds.d.ts +3 -0
- package/dist/aivss/metrics/ds.d.ts.map +1 -0
- package/dist/aivss/metrics/ds.js +26 -0
- package/dist/aivss/metrics/ds.js.map +1 -0
- package/dist/aivss/metrics/ei.d.ts +3 -0
- package/dist/aivss/metrics/ei.d.ts.map +1 -0
- package/dist/aivss/metrics/ei.js +30 -0
- package/dist/aivss/metrics/ei.js.map +1 -0
- package/dist/aivss/metrics/gv.d.ts +3 -0
- package/dist/aivss/metrics/gv.d.ts.map +1 -0
- package/dist/aivss/metrics/gv.js +34 -0
- package/dist/aivss/metrics/gv.js.map +1 -0
- package/dist/aivss/metrics/ll.d.ts +3 -0
- package/dist/aivss/metrics/ll.d.ts.map +1 -0
- package/dist/aivss/metrics/ll.js +30 -0
- package/dist/aivss/metrics/ll.js.map +1 -0
- package/dist/aivss/metrics/mr.d.ts +3 -0
- package/dist/aivss/metrics/mr.d.ts.map +1 -0
- package/dist/aivss/metrics/mr.js +26 -0
- package/dist/aivss/metrics/mr.js.map +1 -0
- package/dist/aivss/metrics/shared.d.ts +22 -0
- package/dist/aivss/metrics/shared.d.ts.map +1 -0
- package/dist/aivss/metrics/shared.js +70 -0
- package/dist/aivss/metrics/shared.js.map +1 -0
- package/dist/aivss/prompts/base-system-prompt.d.ts +2 -0
- package/dist/aivss/prompts/base-system-prompt.d.ts.map +1 -0
- package/dist/aivss/prompts/base-system-prompt.js +31 -0
- package/dist/aivss/prompts/base-system-prompt.js.map +1 -0
- package/dist/aivss/prompts/prompt-composer.d.ts +13 -0
- package/dist/aivss/prompts/prompt-composer.d.ts.map +1 -0
- package/dist/aivss/prompts/prompt-composer.js +21 -0
- package/dist/aivss/prompts/prompt-composer.js.map +1 -0
- package/dist/aivss/scoring/a2a-corpus.test.d.ts +28 -0
- package/dist/aivss/scoring/a2a-corpus.test.d.ts.map +1 -0
- package/dist/aivss/scoring/a2a-corpus.test.js +109 -0
- package/dist/aivss/scoring/a2a-corpus.test.js.map +1 -0
- package/dist/aivss/scoring/determinism.test.d.ts +16 -0
- package/dist/aivss/scoring/determinism.test.d.ts.map +1 -0
- package/dist/aivss/scoring/determinism.test.js +169 -0
- package/dist/aivss/scoring/determinism.test.js.map +1 -0
- package/dist/aivss/scoring/heuristic-scorer.d.ts +21 -0
- package/dist/aivss/scoring/heuristic-scorer.d.ts.map +1 -0
- package/dist/aivss/scoring/heuristic-scorer.js +299 -0
- package/dist/aivss/scoring/heuristic-scorer.js.map +1 -0
- package/dist/aivss/scoring/heuristic-scorer.test.d.ts +8 -0
- package/dist/aivss/scoring/heuristic-scorer.test.d.ts.map +1 -0
- package/dist/aivss/scoring/heuristic-scorer.test.js +150 -0
- package/dist/aivss/scoring/heuristic-scorer.test.js.map +1 -0
- package/dist/aivss/scoring/scoring-mode.d.ts +48 -0
- package/dist/aivss/scoring/scoring-mode.d.ts.map +1 -0
- package/dist/aivss/scoring/scoring-mode.js +64 -0
- package/dist/aivss/scoring/scoring-mode.js.map +1 -0
- package/dist/aivss/scoring/v4-engine.d.ts +15 -0
- package/dist/aivss/scoring/v4-engine.d.ts.map +1 -0
- package/dist/aivss/scoring/v4-engine.js +84 -0
- package/dist/aivss/scoring/v4-engine.js.map +1 -0
- package/dist/aivss/scoring/v4-engine.test.d.ts +16 -0
- package/dist/aivss/scoring/v4-engine.test.d.ts.map +1 -0
- package/dist/aivss/scoring/v4-engine.test.js +156 -0
- package/dist/aivss/scoring/v4-engine.test.js.map +1 -0
- package/dist/aivss/types.d.ts +92 -0
- package/dist/aivss/types.d.ts.map +1 -0
- package/dist/aivss/types.js +25 -0
- package/dist/aivss/types.js.map +1 -0
- package/dist/baseline/baseline.test.d.ts +2 -0
- package/dist/baseline/baseline.test.d.ts.map +1 -0
- package/dist/baseline/baseline.test.js +219 -0
- package/dist/baseline/baseline.test.js.map +1 -0
- package/dist/baseline/diff.d.ts +42 -0
- package/dist/baseline/diff.d.ts.map +1 -0
- package/dist/baseline/diff.js +124 -0
- package/dist/baseline/diff.js.map +1 -0
- package/dist/baseline/store.d.ts +51 -0
- package/dist/baseline/store.d.ts.map +1 -0
- package/dist/baseline/store.js +92 -0
- package/dist/baseline/store.js.map +1 -0
- package/dist/batch/anthropic-batch-runner.d.ts +50 -0
- package/dist/batch/anthropic-batch-runner.d.ts.map +1 -0
- package/dist/batch/anthropic-batch-runner.js +91 -0
- package/dist/batch/anthropic-batch-runner.js.map +1 -0
- package/dist/batch/bedrock-batch-runner.d.ts +90 -0
- package/dist/batch/bedrock-batch-runner.d.ts.map +1 -0
- package/dist/batch/bedrock-batch-runner.js +199 -0
- package/dist/batch/bedrock-batch-runner.js.map +1 -0
- package/dist/batch/providers/anthropic.d.ts +55 -0
- package/dist/batch/providers/anthropic.d.ts.map +1 -0
- package/dist/batch/providers/anthropic.js +103 -0
- package/dist/batch/providers/anthropic.js.map +1 -0
- package/dist/batch/providers/bedrock.d.ts +31 -0
- package/dist/batch/providers/bedrock.d.ts.map +1 -0
- package/dist/batch/providers/bedrock.js +42 -0
- package/dist/batch/providers/bedrock.js.map +1 -0
- package/dist/batch/providers/harness.d.ts +36 -0
- package/dist/batch/providers/harness.d.ts.map +1 -0
- package/dist/batch/providers/harness.js +65 -0
- package/dist/batch/providers/harness.js.map +1 -0
- package/dist/batch/providers/harness.test.d.ts +7 -0
- package/dist/batch/providers/harness.test.d.ts.map +1 -0
- package/dist/batch/providers/harness.test.js +84 -0
- package/dist/batch/providers/harness.test.js.map +1 -0
- package/dist/batch/providers/index.d.ts +82 -0
- package/dist/batch/providers/index.d.ts.map +1 -0
- package/dist/batch/providers/index.js +82 -0
- package/dist/batch/providers/index.js.map +1 -0
- package/dist/batch/providers/ollama.d.ts +68 -0
- package/dist/batch/providers/ollama.d.ts.map +1 -0
- package/dist/batch/providers/ollama.js +108 -0
- package/dist/batch/providers/ollama.js.map +1 -0
- package/dist/batch/response-parser.d.ts +45 -0
- package/dist/batch/response-parser.d.ts.map +1 -0
- package/dist/batch/response-parser.js +161 -0
- package/dist/batch/response-parser.js.map +1 -0
- package/dist/batch/types.d.ts +87 -0
- package/dist/batch/types.d.ts.map +1 -0
- package/dist/batch/types.js +8 -0
- package/dist/batch/types.js.map +1 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1037 -0
- package/dist/cli.js.map +1 -0
- package/dist/examples/a2a-assessment.d.ts +20 -0
- package/dist/examples/a2a-assessment.d.ts.map +1 -0
- package/dist/examples/a2a-assessment.js +115 -0
- package/dist/examples/a2a-assessment.js.map +1 -0
- package/dist/examples/batch-assessment.d.ts +18 -0
- package/dist/examples/batch-assessment.d.ts.map +1 -0
- package/dist/examples/batch-assessment.js +112 -0
- package/dist/examples/batch-assessment.js.map +1 -0
- package/dist/examples/batch-submission-flow.d.ts +2 -0
- package/dist/examples/batch-submission-flow.d.ts.map +1 -0
- package/dist/examples/batch-submission-flow.js +279 -0
- package/dist/examples/batch-submission-flow.js.map +1 -0
- package/dist/examples/demo-agent-definition.json +58 -0
- package/dist/examples/langfuse-assessment.d.ts +2 -0
- package/dist/examples/langfuse-assessment.d.ts.map +1 -0
- package/dist/examples/langfuse-assessment.js +46 -0
- package/dist/examples/langfuse-assessment.js.map +1 -0
- package/dist/examples/model-eval.d.ts +25 -0
- package/dist/examples/model-eval.d.ts.map +1 -0
- package/dist/examples/model-eval.js +94 -0
- package/dist/examples/model-eval.js.map +1 -0
- package/dist/examples/openclaw-assessment.d.ts +17 -0
- package/dist/examples/openclaw-assessment.d.ts.map +1 -0
- package/dist/examples/openclaw-assessment.js +79 -0
- package/dist/examples/openclaw-assessment.js.map +1 -0
- package/dist/examples/simple-assessment.d.ts +2 -0
- package/dist/examples/simple-assessment.d.ts.map +1 -0
- package/dist/examples/simple-assessment.js +146 -0
- package/dist/examples/simple-assessment.js.map +1 -0
- package/dist/examples/threat-model-demo.d.ts +2 -0
- package/dist/examples/threat-model-demo.d.ts.map +1 -0
- package/dist/examples/threat-model-demo.js +103 -0
- package/dist/examples/threat-model-demo.js.map +1 -0
- package/dist/index.d.ts +60 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +155 -0
- package/dist/index.js.map +1 -0
- package/dist/output/likec4-generator.d.ts +43 -0
- package/dist/output/likec4-generator.d.ts.map +1 -0
- package/dist/output/likec4-generator.js +287 -0
- package/dist/output/likec4-generator.js.map +1 -0
- package/dist/output/slot-filler.d.ts +6 -0
- package/dist/output/slot-filler.d.ts.map +1 -0
- package/dist/output/slot-filler.js +71 -0
- package/dist/output/slot-filler.js.map +1 -0
- package/dist/output/tc-assembler.d.ts +30 -0
- package/dist/output/tc-assembler.d.ts.map +1 -0
- package/dist/output/tc-assembler.js +227 -0
- package/dist/output/tc-assembler.js.map +1 -0
- package/dist/output/tc-types.d.ts +41 -0
- package/dist/output/tc-types.d.ts.map +1 -0
- package/dist/output/tc-types.js +5 -0
- package/dist/output/tc-types.js.map +1 -0
- package/dist/output/tc-validator.test.d.ts +9 -0
- package/dist/output/tc-validator.test.d.ts.map +1 -0
- package/dist/output/tc-validator.test.js +194 -0
- package/dist/output/tc-validator.test.js.map +1 -0
- package/dist/providers/anthropic.d.ts +9 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +30 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/bedrock.d.ts +9 -0
- package/dist/providers/bedrock.d.ts.map +1 -0
- package/dist/providers/bedrock.js +38 -0
- package/dist/providers/bedrock.js.map +1 -0
- package/dist/providers/index.d.ts +6 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +14 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/types.d.ts +12 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +5 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/references/acsc-risks.d.ts +18 -0
- package/dist/references/acsc-risks.d.ts.map +1 -0
- package/dist/references/acsc-risks.js +232 -0
- package/dist/references/acsc-risks.js.map +1 -0
- package/dist/references/aicm.d.ts +41 -0
- package/dist/references/aicm.d.ts.map +1 -0
- package/dist/references/aicm.js +447 -0
- package/dist/references/aicm.js.map +1 -0
- package/dist/references/dstg-meaid.d.ts +59 -0
- package/dist/references/dstg-meaid.d.ts.map +1 -0
- package/dist/references/dstg-meaid.js +352 -0
- package/dist/references/dstg-meaid.js.map +1 -0
- package/dist/references/index.d.ts +20 -0
- package/dist/references/index.d.ts.map +1 -0
- package/dist/references/index.js +31 -0
- package/dist/references/index.js.map +1 -0
- package/dist/references/nemoclaw.d.ts +48 -0
- package/dist/references/nemoclaw.d.ts.map +1 -0
- package/dist/references/nemoclaw.js +140 -0
- package/dist/references/nemoclaw.js.map +1 -0
- package/dist/references/nist-ai-rmf.d.ts +31 -0
- package/dist/references/nist-ai-rmf.d.ts.map +1 -0
- package/dist/references/nist-ai-rmf.js +627 -0
- package/dist/references/nist-ai-rmf.js.map +1 -0
- package/dist/references/owasp-agentic-top10.d.ts +50 -0
- package/dist/references/owasp-agentic-top10.d.ts.map +1 -0
- package/dist/references/owasp-agentic-top10.js +202 -0
- package/dist/references/owasp-agentic-top10.js.map +1 -0
- package/dist/references/registry-parity.test.d.ts +17 -0
- package/dist/references/registry-parity.test.d.ts.map +1 -0
- package/dist/references/registry-parity.test.js +87 -0
- package/dist/references/registry-parity.test.js.map +1 -0
- package/dist/references/registry.d.ts +90 -0
- package/dist/references/registry.d.ts.map +1 -0
- package/dist/references/registry.js +29 -0
- package/dist/references/registry.js.map +1 -0
- package/dist/tools/model-eval.d.ts +97 -0
- package/dist/tools/model-eval.d.ts.map +1 -0
- package/dist/tools/model-eval.js +307 -0
- package/dist/tools/model-eval.js.map +1 -0
- package/package.json +105 -0
- package/schemas/threat-composer-v1.schema.json +966 -0
- package/vendor/atlas-release/ATLAS-2026.07.yaml +17877 -0
- package/vendor/atlas-release/README.md +41 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heuristic-scorer.js","sourceRoot":"","sources":["../../../src/aivss/scoring/heuristic-scorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the deterministic heuristic severity scorer.
|
|
3
|
+
*
|
|
4
|
+
* Validates the 2+ signal requirement for High, mitigationMultiplier cap,
|
|
5
|
+
* and key per-metric invariants used in production threat models.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=heuristic-scorer.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heuristic-scorer.test.d.ts","sourceRoot":"","sources":["../../../src/aivss/scoring/heuristic-scorer.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the deterministic heuristic severity scorer.
|
|
3
|
+
*
|
|
4
|
+
* Validates the 2+ signal requirement for High, mitigationMultiplier cap,
|
|
5
|
+
* and key per-metric invariants used in production threat models.
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect } from "bun:test";
|
|
8
|
+
import { heuristicSeverity } from "./heuristic-scorer";
|
|
9
|
+
// ── Fixtures ──────────────────────────────────────────────────────────────────
|
|
10
|
+
function makeAgent(overrides = {}) {
|
|
11
|
+
return {
|
|
12
|
+
id: "test-agent",
|
|
13
|
+
name: "Test Agent",
|
|
14
|
+
model: "test-model",
|
|
15
|
+
systemPrompt: "You are a test agent.",
|
|
16
|
+
tools: [],
|
|
17
|
+
permissions: [],
|
|
18
|
+
deploymentContext: "General",
|
|
19
|
+
modelComplexity: "Simple",
|
|
20
|
+
mitigationMultiplier: 1.0,
|
|
21
|
+
finetuned: false,
|
|
22
|
+
dependencies: [],
|
|
23
|
+
secretManagement: "vault, 24h TTL rotation",
|
|
24
|
+
deployment: "Docker container",
|
|
25
|
+
dataSources: [],
|
|
26
|
+
externalApiCount: 0,
|
|
27
|
+
autonomyLevel: "supervised",
|
|
28
|
+
objectives: ["do work"],
|
|
29
|
+
...overrides,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// ── Core calibration rule: 2+ signals required for High ───────────────────────
|
|
33
|
+
describe("heuristicSeverity — 2-signal requirement for High", () => {
|
|
34
|
+
it("single signal (dangerous tool only) → Medium, not High", () => {
|
|
35
|
+
const agent = makeAgent({
|
|
36
|
+
tools: [{ name: "exec", description: "run code", dangerous: true }],
|
|
37
|
+
});
|
|
38
|
+
// MR/Evasion Resistance: dangerous tool alone → Medium
|
|
39
|
+
expect(heuristicSeverity(agent, "MR", "Evasion Resistance")).toBe("Medium");
|
|
40
|
+
});
|
|
41
|
+
it("two signals (dangerous tool + high-stakes context) → High", () => {
|
|
42
|
+
const agent = makeAgent({
|
|
43
|
+
tools: [{ name: "exec", description: "run code", dangerous: true }],
|
|
44
|
+
deploymentContext: "FinancialServices",
|
|
45
|
+
});
|
|
46
|
+
expect(heuristicSeverity(agent, "MR", "Evasion Resistance")).toBe("High");
|
|
47
|
+
});
|
|
48
|
+
it("high-stakes context alone (no dangerous tool) → Medium", () => {
|
|
49
|
+
const agent = makeAgent({ deploymentContext: "Healthcare" });
|
|
50
|
+
expect(heuristicSeverity(agent, "MR", "Evasion Resistance")).toBe("Medium");
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
// ── mitigationMultiplier cap ───────────────────────────────────────────────────
|
|
54
|
+
describe("heuristicSeverity — mitigationMultiplier cap", () => {
|
|
55
|
+
it("multiplier < 0.9 caps High → Medium", () => {
|
|
56
|
+
const agent = makeAgent({
|
|
57
|
+
tools: [{ name: "exec", description: "run code", dangerous: true }],
|
|
58
|
+
deploymentContext: "FinancialServices",
|
|
59
|
+
mitigationMultiplier: 0.8,
|
|
60
|
+
});
|
|
61
|
+
// Would be High without the cap
|
|
62
|
+
expect(heuristicSeverity(agent, "MR", "Evasion Resistance")).toBe("Medium");
|
|
63
|
+
});
|
|
64
|
+
it("multiplier >= 0.9 does not cap High", () => {
|
|
65
|
+
const agent = makeAgent({
|
|
66
|
+
tools: [{ name: "exec", description: "run code", dangerous: true }],
|
|
67
|
+
deploymentContext: "FinancialServices",
|
|
68
|
+
mitigationMultiplier: 0.9,
|
|
69
|
+
});
|
|
70
|
+
expect(heuristicSeverity(agent, "MR", "Evasion Resistance")).toBe("High");
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
// ── Per-metric invariants ─────────────────────────────────────────────────────
|
|
74
|
+
describe("heuristicSeverity — DS (Data Security)", () => {
|
|
75
|
+
it("weak secrets + data sources → High on Data Confidentiality", () => {
|
|
76
|
+
const agent = makeAgent({
|
|
77
|
+
secretManagement: "environment variables, long-lived",
|
|
78
|
+
dataSources: ["postgres:5432"],
|
|
79
|
+
});
|
|
80
|
+
expect(heuristicSeverity(agent, "DS", "Data Confidentiality")).toBe("High");
|
|
81
|
+
});
|
|
82
|
+
it("strong secrets + no data sources → Low on Data Confidentiality", () => {
|
|
83
|
+
const agent = makeAgent({ dataSources: [] });
|
|
84
|
+
expect(heuristicSeverity(agent, "DS", "Data Confidentiality")).toBe("Low");
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe("heuristicSeverity — GV (Governance)", () => {
|
|
88
|
+
it("autonomous agent → High on Human Oversight (single signal sufficient)", () => {
|
|
89
|
+
const agent = makeAgent({ autonomyLevel: "autonomous" });
|
|
90
|
+
expect(heuristicSeverity(agent, "GV", "Human Oversight")).toBe("High");
|
|
91
|
+
});
|
|
92
|
+
it("semi-autonomous → Medium on Human Oversight", () => {
|
|
93
|
+
const agent = makeAgent({ autonomyLevel: "semi-autonomous" });
|
|
94
|
+
expect(heuristicSeverity(agent, "GV", "Human Oversight")).toBe("Medium");
|
|
95
|
+
});
|
|
96
|
+
it("supervised → Low on Human Oversight", () => {
|
|
97
|
+
const agent = makeAgent({ autonomyLevel: "supervised" });
|
|
98
|
+
expect(heuristicSeverity(agent, "GV", "Human Oversight")).toBe("Low");
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
describe("heuristicSeverity — AD (Adversarial Defence)", () => {
|
|
102
|
+
it("no monitoring → High on Continuous Monitoring", () => {
|
|
103
|
+
const agent = makeAgent({ dependencies: [] });
|
|
104
|
+
expect(heuristicSeverity(agent, "AD", "Continuous Monitoring")).toBe("High");
|
|
105
|
+
});
|
|
106
|
+
it("monitoring present → Low on Continuous Monitoring", () => {
|
|
107
|
+
const agent = makeAgent({ dependencies: ["langfuse (telemetry)"] });
|
|
108
|
+
expect(heuristicSeverity(agent, "AD", "Continuous Monitoring")).toBe("Low");
|
|
109
|
+
});
|
|
110
|
+
it("not fine-tuned → Low on Adversarial Training (nothing to harden)", () => {
|
|
111
|
+
const agent = makeAgent({ finetuned: false });
|
|
112
|
+
expect(heuristicSeverity(agent, "AD", "Adversarial Training")).toBe("Low");
|
|
113
|
+
});
|
|
114
|
+
it("fine-tuned → Medium on Adversarial Training", () => {
|
|
115
|
+
const agent = makeAgent({ finetuned: true });
|
|
116
|
+
expect(heuristicSeverity(agent, "AD", "Adversarial Training")).toBe("Medium");
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe("heuristicSeverity — CS (Cyber Security)", () => {
|
|
120
|
+
it("dangerous tool + external APIs → High on Model Manipulation / Prompt Injection", () => {
|
|
121
|
+
const agent = makeAgent({
|
|
122
|
+
tools: [{ name: "exec", description: "run code", dangerous: true }],
|
|
123
|
+
externalApiCount: 2,
|
|
124
|
+
});
|
|
125
|
+
expect(heuristicSeverity(agent, "CS", "Model Manipulation / Prompt Injection")).toBe("High");
|
|
126
|
+
});
|
|
127
|
+
it("dangerous tool only → Medium on Model Manipulation / Prompt Injection", () => {
|
|
128
|
+
const agent = makeAgent({
|
|
129
|
+
tools: [{ name: "exec", description: "run code", dangerous: true }],
|
|
130
|
+
externalApiCount: 0,
|
|
131
|
+
});
|
|
132
|
+
expect(heuristicSeverity(agent, "CS", "Model Manipulation / Prompt Injection")).toBe("Medium");
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe("heuristicSeverity — DC (Deployment Context)", () => {
|
|
136
|
+
it("CriticalInfrastructure → High on Safety-Critical Applications (single signal sufficient)", () => {
|
|
137
|
+
const agent = makeAgent({ deploymentContext: "CriticalInfrastructure" });
|
|
138
|
+
expect(heuristicSeverity(agent, "DC", "Safety-Critical Applications")).toBe("High");
|
|
139
|
+
});
|
|
140
|
+
it("General context → Medium on Safety-Critical Applications (default uplift)", () => {
|
|
141
|
+
const agent = makeAgent({ deploymentContext: "General" });
|
|
142
|
+
expect(heuristicSeverity(agent, "DC", "Safety-Critical Applications")).toBe("Medium");
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe("heuristicSeverity — unknown metric", () => {
|
|
146
|
+
it("unknown metric code returns Medium", () => {
|
|
147
|
+
expect(heuristicSeverity(makeAgent(), "XX", "Any Sub-Category")).toBe("Medium");
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=heuristic-scorer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heuristic-scorer.test.js","sourceRoot":"","sources":["../../../src/aivss/scoring/heuristic-scorer.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scoring provenance — how a severity in the output was actually arrived at.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists: a score you cannot reproduce is not evidence. CVSS earned
|
|
5
|
+
* practitioner trust because the vector string lets anyone recompute the
|
|
6
|
+
* number; OpenSSF Scorecard because every check documents its own rule. Canopy
|
|
7
|
+
* emitted a number with no statement of how it was produced, and the three
|
|
8
|
+
* possible provenances have very different reproducibility properties:
|
|
9
|
+
*
|
|
10
|
+
* - `deterministic` — the heuristic scorer. Pure function of the
|
|
11
|
+
* AgentDefinition. Same input always yields the same score, on any machine,
|
|
12
|
+
* with no network and no credentials. Auditable: every rule is readable in
|
|
13
|
+
* heuristic-scorer.ts.
|
|
14
|
+
*
|
|
15
|
+
* - `model` — a provider (Bedrock / Anthropic) classified each sub-category.
|
|
16
|
+
* Richer reasoning, but NOT reproducible: temperature, model version, and
|
|
17
|
+
* provider-side changes all move the result. Two runs a month apart can
|
|
18
|
+
* legitimately differ.
|
|
19
|
+
*
|
|
20
|
+
* - `harness` — the calling LLM agent answered the assessment prompts itself
|
|
21
|
+
* via HarnessBatchProvider. Least reproducible of the three, because the
|
|
22
|
+
* model doing the reasoning is whatever happened to be driving the harness.
|
|
23
|
+
* Excellent for zero-credential exploration; not something to put in front
|
|
24
|
+
* of an auditor as a stable measurement.
|
|
25
|
+
*
|
|
26
|
+
* A consumer gating CI on Canopy baselines needs `deterministic`. Someone
|
|
27
|
+
* exploring a new system interactively is well served by `harness`. The defect
|
|
28
|
+
* was never offering the choice, or recording which one produced the artifact.
|
|
29
|
+
*/
|
|
30
|
+
export type ScoringMode = "deterministic" | "model" | "harness";
|
|
31
|
+
export declare const SCORING_MODES: readonly ScoringMode[];
|
|
32
|
+
export interface ScoringModeDescriptor {
|
|
33
|
+
mode: ScoringMode;
|
|
34
|
+
/** Whether identical input is guaranteed to yield identical scores. */
|
|
35
|
+
reproducible: boolean;
|
|
36
|
+
/** Whether the mode needs provider credentials or network access. */
|
|
37
|
+
requiresCredentials: boolean;
|
|
38
|
+
/** One-line description for the audit trail in emitted artifacts. */
|
|
39
|
+
summary: string;
|
|
40
|
+
}
|
|
41
|
+
export declare const SCORING_MODE_INFO: Record<ScoringMode, ScoringModeDescriptor>;
|
|
42
|
+
/**
|
|
43
|
+
* Human-facing warning shown when a run's scoring mode carries a
|
|
44
|
+
* reproducibility caveat the operator should know about before quoting the
|
|
45
|
+
* numbers. Returns null when no warning is warranted.
|
|
46
|
+
*/
|
|
47
|
+
export declare function reproducibilityWarning(mode: ScoringMode): string | null;
|
|
48
|
+
//# sourceMappingURL=scoring-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring-mode.d.ts","sourceRoot":"","sources":["../../../src/aivss/scoring/scoring-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhE,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAAmD,CAAC;AAEpG,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,uEAAuE;IACvE,YAAY,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,mBAAmB,EAAE,OAAO,CAAC;IAC7B,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,WAAW,EAAE,qBAAqB,CAsBxE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAQvE"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scoring provenance — how a severity in the output was actually arrived at.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists: a score you cannot reproduce is not evidence. CVSS earned
|
|
5
|
+
* practitioner trust because the vector string lets anyone recompute the
|
|
6
|
+
* number; OpenSSF Scorecard because every check documents its own rule. Canopy
|
|
7
|
+
* emitted a number with no statement of how it was produced, and the three
|
|
8
|
+
* possible provenances have very different reproducibility properties:
|
|
9
|
+
*
|
|
10
|
+
* - `deterministic` — the heuristic scorer. Pure function of the
|
|
11
|
+
* AgentDefinition. Same input always yields the same score, on any machine,
|
|
12
|
+
* with no network and no credentials. Auditable: every rule is readable in
|
|
13
|
+
* heuristic-scorer.ts.
|
|
14
|
+
*
|
|
15
|
+
* - `model` — a provider (Bedrock / Anthropic) classified each sub-category.
|
|
16
|
+
* Richer reasoning, but NOT reproducible: temperature, model version, and
|
|
17
|
+
* provider-side changes all move the result. Two runs a month apart can
|
|
18
|
+
* legitimately differ.
|
|
19
|
+
*
|
|
20
|
+
* - `harness` — the calling LLM agent answered the assessment prompts itself
|
|
21
|
+
* via HarnessBatchProvider. Least reproducible of the three, because the
|
|
22
|
+
* model doing the reasoning is whatever happened to be driving the harness.
|
|
23
|
+
* Excellent for zero-credential exploration; not something to put in front
|
|
24
|
+
* of an auditor as a stable measurement.
|
|
25
|
+
*
|
|
26
|
+
* A consumer gating CI on Canopy baselines needs `deterministic`. Someone
|
|
27
|
+
* exploring a new system interactively is well served by `harness`. The defect
|
|
28
|
+
* was never offering the choice, or recording which one produced the artifact.
|
|
29
|
+
*/
|
|
30
|
+
export const SCORING_MODES = ["deterministic", "model", "harness"];
|
|
31
|
+
export const SCORING_MODE_INFO = {
|
|
32
|
+
deterministic: {
|
|
33
|
+
mode: "deterministic",
|
|
34
|
+
reproducible: true,
|
|
35
|
+
requiresCredentials: false,
|
|
36
|
+
summary: "Heuristic scorer — pure function of the agent definition. Byte-identical across runs; every rule auditable in heuristic-scorer.ts.",
|
|
37
|
+
},
|
|
38
|
+
model: {
|
|
39
|
+
mode: "model",
|
|
40
|
+
reproducible: false,
|
|
41
|
+
requiresCredentials: true,
|
|
42
|
+
summary: "Provider inference (Bedrock/Anthropic) classified each sub-category. Richer reasoning; not reproducible across model versions.",
|
|
43
|
+
},
|
|
44
|
+
harness: {
|
|
45
|
+
mode: "harness",
|
|
46
|
+
reproducible: false,
|
|
47
|
+
requiresCredentials: false,
|
|
48
|
+
summary: "The calling LLM agent answered assessment prompts directly. Zero-credential; reproducibility depends on the driving model.",
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Human-facing warning shown when a run's scoring mode carries a
|
|
53
|
+
* reproducibility caveat the operator should know about before quoting the
|
|
54
|
+
* numbers. Returns null when no warning is warranted.
|
|
55
|
+
*/
|
|
56
|
+
export function reproducibilityWarning(mode) {
|
|
57
|
+
const info = SCORING_MODE_INFO[mode];
|
|
58
|
+
if (info.reproducible)
|
|
59
|
+
return null;
|
|
60
|
+
return (`canopy: scoring mode "${mode}" is not reproducible — ${info.summary}\n` +
|
|
61
|
+
` Re-running may yield different scores. Use --deterministic for a\n` +
|
|
62
|
+
` stable, auditable score suitable for CI gating or an audit trail.\n`);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=scoring-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring-mode.js","sourceRoot":"","sources":["../../../src/aivss/scoring/scoring-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,eAAe,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;AAYpG,MAAM,CAAC,MAAM,iBAAiB,GAA+C;IAC3E,aAAa,EAAE;QACb,IAAI,EAAE,eAAe;QACrB,YAAY,EAAE,IAAI;QAClB,mBAAmB,EAAE,KAAK;QAC1B,OAAO,EACL,oIAAoI;KACvI;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,KAAK;QACnB,mBAAmB,EAAE,IAAI;QACzB,OAAO,EACL,gIAAgI;KACnI;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,KAAK;QACnB,mBAAmB,EAAE,KAAK;QAC1B,OAAO,EACL,4HAA4H;KAC/H;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAiB;IACtD,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,CACL,yBAAyB,IAAI,2BAA2B,IAAI,CAAC,OAAO,IAAI;QACxE,4EAA4E;QAC5E,6EAA6E,CAC9E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type AgentDefinition, type DeploymentContext, type MetricAssessmentResponse, type SeverityLabel, type V4Score } from "../types";
|
|
2
|
+
export declare const DEPLOYMENT_WEIGHTS: Record<DeploymentContext, {
|
|
3
|
+
w1: number;
|
|
4
|
+
w2: number;
|
|
5
|
+
w3: number;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function severityLabel(score: number): SeverityLabel;
|
|
8
|
+
export declare function calculateAIVSSScore(inputs: {
|
|
9
|
+
agentDefinition: AgentDefinition;
|
|
10
|
+
metricResponses: MetricAssessmentResponse[];
|
|
11
|
+
baseScore?: number;
|
|
12
|
+
impactScore?: number;
|
|
13
|
+
temporalScore?: number;
|
|
14
|
+
}): V4Score;
|
|
15
|
+
//# sourceMappingURL=v4-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v4-engine.d.ts","sourceRoot":"","sources":["../../../src/aivss/scoring/v4-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAE7B,KAAK,aAAa,EAClB,KAAK,OAAO,EACb,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,iBAAiB,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAQhG,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAc1D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,EAAE,wBAAwB,EAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAoCV"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { METRIC_CODES, MODEL_COMPLEXITY_VALUES, SEVERITY_VALUES, } from "../types";
|
|
2
|
+
export const DEPLOYMENT_WEIGHTS = {
|
|
3
|
+
General: { w1: 0.3, w2: 0.5, w3: 0.2 },
|
|
4
|
+
FinancialServices: { w1: 0.25, w2: 0.6, w3: 0.15 },
|
|
5
|
+
Healthcare: { w1: 0.2, w2: 0.5, w3: 0.3 },
|
|
6
|
+
CriticalInfrastructure: { w1: 0.35, w2: 0.45, w3: 0.2 },
|
|
7
|
+
AutomotiveTransport: { w1: 0.2, w2: 0.45, w3: 0.35 },
|
|
8
|
+
LegalJustice: { w1: 0.2, w2: 0.45, w3: 0.35 },
|
|
9
|
+
GovernmentPublic: { w1: 0.25, w2: 0.5, w3: 0.25 },
|
|
10
|
+
};
|
|
11
|
+
export function severityLabel(score) {
|
|
12
|
+
if (score >= 9) {
|
|
13
|
+
return "Critical";
|
|
14
|
+
}
|
|
15
|
+
if (score >= 7) {
|
|
16
|
+
return "High";
|
|
17
|
+
}
|
|
18
|
+
if (score >= 4) {
|
|
19
|
+
return "Medium";
|
|
20
|
+
}
|
|
21
|
+
if (score > 0) {
|
|
22
|
+
return "Low";
|
|
23
|
+
}
|
|
24
|
+
return "None";
|
|
25
|
+
}
|
|
26
|
+
export function calculateAIVSSScore(inputs) {
|
|
27
|
+
const modifiedBaseScore = inputs.baseScore ?? 1;
|
|
28
|
+
const impactScore = inputs.impactScore ?? 1;
|
|
29
|
+
const temporalScore = inputs.temporalScore ?? 1;
|
|
30
|
+
const { agentDefinition, metricResponses } = inputs;
|
|
31
|
+
const responseByMetric = new Map();
|
|
32
|
+
for (const response of metricResponses) {
|
|
33
|
+
responseByMetric.set(response.metricCode, response);
|
|
34
|
+
}
|
|
35
|
+
const metricScores = buildMetricScores(responseByMetric);
|
|
36
|
+
const aiSpecificScore = METRIC_CODES.reduce((product, metricCode) => product * metricScores[metricCode], 1) *
|
|
37
|
+
MODEL_COMPLEXITY_VALUES[agentDefinition.modelComplexity];
|
|
38
|
+
const { w1, w2, w3 } = DEPLOYMENT_WEIGHTS[agentDefinition.deploymentContext];
|
|
39
|
+
const rawScore = ((w1 * modifiedBaseScore) + (w2 * aiSpecificScore) + (w3 * impactScore)) *
|
|
40
|
+
temporalScore *
|
|
41
|
+
agentDefinition.mitigationMultiplier;
|
|
42
|
+
const aivssScore = clamp(rawScore, 0, 10);
|
|
43
|
+
return {
|
|
44
|
+
aivssScore,
|
|
45
|
+
severity: severityLabel(aivssScore),
|
|
46
|
+
deploymentContext: agentDefinition.deploymentContext,
|
|
47
|
+
modifiedBaseScore,
|
|
48
|
+
aiSpecificScore,
|
|
49
|
+
impactScore,
|
|
50
|
+
temporalScore,
|
|
51
|
+
mitigationMultiplier: agentDefinition.mitigationMultiplier,
|
|
52
|
+
metricScores,
|
|
53
|
+
allFindings: metricResponses.flatMap((response) => response.findings),
|
|
54
|
+
deploymentBlocker: metricResponses.some((response) => response.deploymentBlocker),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function buildMetricScores(responseByMetric) {
|
|
58
|
+
return {
|
|
59
|
+
MR: averageMetricScore(responseByMetric.get("MR")),
|
|
60
|
+
DS: averageMetricScore(responseByMetric.get("DS")),
|
|
61
|
+
EI: averageMetricScore(responseByMetric.get("EI")),
|
|
62
|
+
DC: averageMetricScore(responseByMetric.get("DC")),
|
|
63
|
+
AD: averageMetricScore(responseByMetric.get("AD")),
|
|
64
|
+
AA: averageMetricScore(responseByMetric.get("AA")),
|
|
65
|
+
LL: averageMetricScore(responseByMetric.get("LL")),
|
|
66
|
+
GV: averageMetricScore(responseByMetric.get("GV")),
|
|
67
|
+
CS: averageMetricScore(responseByMetric.get("CS")),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function averageMetricScore(response) {
|
|
71
|
+
if (!response) {
|
|
72
|
+
return 0;
|
|
73
|
+
}
|
|
74
|
+
const scores = Object.values(response.subCategoryScores).map((label) => SEVERITY_VALUES[label]);
|
|
75
|
+
if (scores.length === 0) {
|
|
76
|
+
return 0;
|
|
77
|
+
}
|
|
78
|
+
const total = scores.reduce((sum, score) => sum + score, 0);
|
|
79
|
+
return total / scores.length;
|
|
80
|
+
}
|
|
81
|
+
function clamp(value, min, max) {
|
|
82
|
+
return Math.min(max, Math.max(min, value));
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=v4-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v4-engine.js","sourceRoot":"","sources":["../../../src/aivss/scoring/v4-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the AIVSS V4 scoring engine.
|
|
3
|
+
*
|
|
4
|
+
* Run: bun test
|
|
5
|
+
*
|
|
6
|
+
* Covers:
|
|
7
|
+
* - Formula determinism (same inputs → same output every call)
|
|
8
|
+
* - Score clamping to [0, 10]
|
|
9
|
+
* - mitigationMultiplier effect
|
|
10
|
+
* - Deployment-context weight differentiation
|
|
11
|
+
* - Severity label band boundaries
|
|
12
|
+
* - All-None responses produce score of 0
|
|
13
|
+
* - deploymentBlocker propagation
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=v4-engine.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v4-engine.test.d.ts","sourceRoot":"","sources":["../../../src/aivss/scoring/v4-engine.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the AIVSS V4 scoring engine.
|
|
3
|
+
*
|
|
4
|
+
* Run: bun test
|
|
5
|
+
*
|
|
6
|
+
* Covers:
|
|
7
|
+
* - Formula determinism (same inputs → same output every call)
|
|
8
|
+
* - Score clamping to [0, 10]
|
|
9
|
+
* - mitigationMultiplier effect
|
|
10
|
+
* - Deployment-context weight differentiation
|
|
11
|
+
* - Severity label band boundaries
|
|
12
|
+
* - All-None responses produce score of 0
|
|
13
|
+
* - deploymentBlocker propagation
|
|
14
|
+
*/
|
|
15
|
+
import { describe, it, expect } from "bun:test";
|
|
16
|
+
import { calculateAIVSSScore, DEPLOYMENT_WEIGHTS } from "./v4-engine";
|
|
17
|
+
import { METRIC_CODES } from "../types";
|
|
18
|
+
// ── Fixtures ─────────────────────────────────────────────────────────────────
|
|
19
|
+
function makeAgent(overrides = {}) {
|
|
20
|
+
return {
|
|
21
|
+
id: "test-agent",
|
|
22
|
+
name: "Test Agent",
|
|
23
|
+
model: "test-model",
|
|
24
|
+
systemPrompt: "You are a test agent.",
|
|
25
|
+
tools: [],
|
|
26
|
+
permissions: [],
|
|
27
|
+
deploymentContext: "General",
|
|
28
|
+
modelComplexity: "Simple",
|
|
29
|
+
mitigationMultiplier: 1.0,
|
|
30
|
+
finetuned: false,
|
|
31
|
+
dependencies: [],
|
|
32
|
+
secretManagement: "None",
|
|
33
|
+
deployment: "Local",
|
|
34
|
+
...overrides,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function makeResponses(severity) {
|
|
38
|
+
return METRIC_CODES.map((metricCode) => ({
|
|
39
|
+
metricCode,
|
|
40
|
+
subCategoryScores: { "Test Sub-Category": severity },
|
|
41
|
+
findings: [],
|
|
42
|
+
deploymentBlocker: false,
|
|
43
|
+
atlasTechniques: [],
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
// ── Tests ─────────────────────────────────────────────────────────────────────
|
|
47
|
+
describe("calculateAIVSSScore — determinism", () => {
|
|
48
|
+
it("returns identical output for identical inputs across multiple calls", () => {
|
|
49
|
+
const agent = makeAgent();
|
|
50
|
+
const responses = makeResponses("Medium");
|
|
51
|
+
const r1 = calculateAIVSSScore({ agentDefinition: agent, metricResponses: responses });
|
|
52
|
+
const r2 = calculateAIVSSScore({ agentDefinition: agent, metricResponses: responses });
|
|
53
|
+
expect(r1.aivssScore).toBe(r2.aivssScore);
|
|
54
|
+
expect(r1.severity).toBe(r2.severity);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe("calculateAIVSSScore — score clamping", () => {
|
|
58
|
+
it("clamps score to max 10 with all-Critical responses and extreme multiplier", () => {
|
|
59
|
+
const agent = makeAgent({ mitigationMultiplier: 2.0, modelComplexity: "HighlyComplex" });
|
|
60
|
+
const responses = makeResponses("Critical");
|
|
61
|
+
const { aivssScore } = calculateAIVSSScore({ agentDefinition: agent, metricResponses: responses, baseScore: 10, impactScore: 10 });
|
|
62
|
+
expect(aivssScore).toBeLessThanOrEqual(10);
|
|
63
|
+
});
|
|
64
|
+
it("clamps score to min 0 with all-None responses", () => {
|
|
65
|
+
const agent = makeAgent();
|
|
66
|
+
const responses = makeResponses("None");
|
|
67
|
+
const { aivssScore } = calculateAIVSSScore({ agentDefinition: agent, metricResponses: responses });
|
|
68
|
+
expect(aivssScore).toBeGreaterThanOrEqual(0);
|
|
69
|
+
});
|
|
70
|
+
it("all-None responses produce non-zero score due to base score contribution", () => {
|
|
71
|
+
// The V4 formula includes w1 * modifiedBaseScore which contributes even when
|
|
72
|
+
// all AI-specific metric scores are None. This is intentional — base score
|
|
73
|
+
// represents non-AI-specific vulnerability independent of metric responses.
|
|
74
|
+
const agent = makeAgent();
|
|
75
|
+
const responses = makeResponses("None");
|
|
76
|
+
const { aivssScore, severity } = calculateAIVSSScore({ agentDefinition: agent, metricResponses: responses });
|
|
77
|
+
expect(aivssScore).toBeGreaterThan(0);
|
|
78
|
+
expect(["Low", "None"]).toContain(severity); // base score alone produces Low at most
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe("calculateAIVSSScore — mitigationMultiplier", () => {
|
|
82
|
+
it("higher multiplier produces higher score for same inputs", () => {
|
|
83
|
+
const responses = makeResponses("Medium");
|
|
84
|
+
const low = calculateAIVSSScore({ agentDefinition: makeAgent({ mitigationMultiplier: 0.5 }), metricResponses: responses });
|
|
85
|
+
const high = calculateAIVSSScore({ agentDefinition: makeAgent({ mitigationMultiplier: 1.5 }), metricResponses: responses });
|
|
86
|
+
expect(high.aivssScore).toBeGreaterThan(low.aivssScore);
|
|
87
|
+
});
|
|
88
|
+
it("multiplier of 1.0 is neutral", () => {
|
|
89
|
+
const responses = makeResponses("High");
|
|
90
|
+
const neutral = calculateAIVSSScore({ agentDefinition: makeAgent({ mitigationMultiplier: 1.0 }), metricResponses: responses });
|
|
91
|
+
expect(neutral.mitigationMultiplier).toBe(1.0);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe("calculateAIVSSScore — deployment context weights", () => {
|
|
95
|
+
it("FinancialServices and General produce different scores for identical inputs", () => {
|
|
96
|
+
const responses = makeResponses("High");
|
|
97
|
+
const general = calculateAIVSSScore({ agentDefinition: makeAgent({ deploymentContext: "General" }), metricResponses: responses });
|
|
98
|
+
const financial = calculateAIVSSScore({ agentDefinition: makeAgent({ deploymentContext: "FinancialServices" }), metricResponses: responses });
|
|
99
|
+
expect(general.aivssScore).not.toBe(financial.aivssScore);
|
|
100
|
+
});
|
|
101
|
+
it("deployment weights sum to 1.0 for every context", () => {
|
|
102
|
+
for (const [context, weights] of Object.entries(DEPLOYMENT_WEIGHTS)) {
|
|
103
|
+
const sum = weights.w1 + weights.w2 + weights.w3;
|
|
104
|
+
expect(sum).toBeCloseTo(1.0, 5);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
describe("calculateAIVSSScore — severity band boundaries", () => {
|
|
109
|
+
it("score >= 9 maps to Critical", () => {
|
|
110
|
+
// Max inputs to force Critical
|
|
111
|
+
const agent = makeAgent({ modelComplexity: "HighlyComplex", mitigationMultiplier: 2.0 });
|
|
112
|
+
const responses = makeResponses("Critical");
|
|
113
|
+
const { aivssScore, severity } = calculateAIVSSScore({
|
|
114
|
+
agentDefinition: agent,
|
|
115
|
+
metricResponses: responses,
|
|
116
|
+
baseScore: 10,
|
|
117
|
+
impactScore: 10,
|
|
118
|
+
});
|
|
119
|
+
if (aivssScore >= 9)
|
|
120
|
+
expect(severity).toBe("Critical");
|
|
121
|
+
});
|
|
122
|
+
it("zero baseScore + all-None responses produces None severity", () => {
|
|
123
|
+
// Explicitly zeroing baseScore and impactScore eliminates base contribution
|
|
124
|
+
const agent = makeAgent({ mitigationMultiplier: 1.0 });
|
|
125
|
+
const responses = makeResponses("None");
|
|
126
|
+
const { severity } = calculateAIVSSScore({
|
|
127
|
+
agentDefinition: agent,
|
|
128
|
+
metricResponses: responses,
|
|
129
|
+
baseScore: 0,
|
|
130
|
+
impactScore: 0,
|
|
131
|
+
});
|
|
132
|
+
expect(severity).toBe("None");
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe("calculateAIVSSScore — deploymentBlocker propagation", () => {
|
|
136
|
+
it("deploymentBlocker is true when any response has deploymentBlocker: true", () => {
|
|
137
|
+
const responses = makeResponses("Medium");
|
|
138
|
+
responses[0].deploymentBlocker = true;
|
|
139
|
+
const { deploymentBlocker } = calculateAIVSSScore({ agentDefinition: makeAgent(), metricResponses: responses });
|
|
140
|
+
expect(deploymentBlocker).toBe(true);
|
|
141
|
+
});
|
|
142
|
+
it("deploymentBlocker is false when no response flags it", () => {
|
|
143
|
+
const responses = makeResponses("High");
|
|
144
|
+
const { deploymentBlocker } = calculateAIVSSScore({ agentDefinition: makeAgent(), metricResponses: responses });
|
|
145
|
+
expect(deploymentBlocker).toBe(false);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
describe("calculateAIVSSScore — model complexity scaling", () => {
|
|
149
|
+
it("HighlyComplex produces higher aiSpecificScore than Simple", () => {
|
|
150
|
+
const responses = makeResponses("Medium");
|
|
151
|
+
const simple = calculateAIVSSScore({ agentDefinition: makeAgent({ modelComplexity: "Simple" }), metricResponses: responses });
|
|
152
|
+
const complex = calculateAIVSSScore({ agentDefinition: makeAgent({ modelComplexity: "HighlyComplex" }), metricResponses: responses });
|
|
153
|
+
expect(complex.aiSpecificScore).toBeGreaterThan(simple.aiSpecificScore);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=v4-engine.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v4-engine.test.js","sourceRoot":"","sources":["../../../src/aivss/scoring/v4-engine.test.ts"],"names":[],"mappings":"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"}
|