@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":"openclaw-assessment.js","sourceRoot":"","sources":["../../src/examples/openclaw-assessment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-assessment.d.ts","sourceRoot":"","sources":["../../src/examples/simple-assessment.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
import { calculateAIVSSScore, buildBatchRequests, AIVSSKnowledgeBase, loadAtlasData, } from "../aivss/index";
|
|
3
|
+
import { getAtlasContext } from "../aivss/atlas/loader";
|
|
4
|
+
import { ATLAS_COVERAGE_MATRIX, getTechniquesForMetric, } from "../aivss/atlas/coverage-matrix";
|
|
5
|
+
import demoAgent from "./demo-agent-definition.json";
|
|
6
|
+
const SAMPLE_RESPONSES = [
|
|
7
|
+
{
|
|
8
|
+
metricCode: "MR",
|
|
9
|
+
subCategoryScores: {
|
|
10
|
+
"Evasion Resistance": "High",
|
|
11
|
+
"Gradient Masking / Obfuscation": "Medium",
|
|
12
|
+
"Robustness Certification": "Medium",
|
|
13
|
+
},
|
|
14
|
+
findings: ["Adversarial prompt testing exists, but formal robustness validation is limited."],
|
|
15
|
+
deploymentBlocker: false,
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
metricCode: "DS",
|
|
19
|
+
subCategoryScores: {
|
|
20
|
+
"Data Confidentiality": "High",
|
|
21
|
+
"Data Integrity": "Medium",
|
|
22
|
+
"Data Provenance": "Medium",
|
|
23
|
+
},
|
|
24
|
+
findings: ["Customer data access and refund tooling increase confidentiality exposure."],
|
|
25
|
+
deploymentBlocker: false,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
metricCode: "EI",
|
|
29
|
+
subCategoryScores: {
|
|
30
|
+
"Bias and Discrimination": "Low",
|
|
31
|
+
"Transparency and Explainability": "Medium",
|
|
32
|
+
Accountability: "Low",
|
|
33
|
+
"Societal Impact": "Low",
|
|
34
|
+
},
|
|
35
|
+
findings: ["Operator accountability is defined, but explanation quality is still workflow-dependent."],
|
|
36
|
+
deploymentBlocker: false,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
metricCode: "DC",
|
|
40
|
+
subCategoryScores: {
|
|
41
|
+
"Safety-Critical Applications": "None",
|
|
42
|
+
"Financial Impact": "High",
|
|
43
|
+
"Reputational Damage": "Medium",
|
|
44
|
+
"Operational Disruption": "Medium",
|
|
45
|
+
},
|
|
46
|
+
findings: ["Refund authority creates direct financial and reputational risk if abused."],
|
|
47
|
+
deploymentBlocker: false,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
metricCode: "AD",
|
|
51
|
+
subCategoryScores: {
|
|
52
|
+
"Continuous Monitoring": "Medium",
|
|
53
|
+
"Retraining Capabilities": "Low",
|
|
54
|
+
"Threat Intelligence Integration": "Medium",
|
|
55
|
+
"Adversarial Training": "Medium",
|
|
56
|
+
},
|
|
57
|
+
findings: ["Monitoring exists, but threat feedback into hardening is only partially mature."],
|
|
58
|
+
deploymentBlocker: false,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
metricCode: "AA",
|
|
62
|
+
subCategoryScores: {
|
|
63
|
+
"Model Inversion": "Low",
|
|
64
|
+
"Model Extraction": "Low",
|
|
65
|
+
"Membership Inference": "Medium",
|
|
66
|
+
},
|
|
67
|
+
findings: ["Conversation and customer context retention make membership inference worth monitoring."],
|
|
68
|
+
deploymentBlocker: false,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
metricCode: "LL",
|
|
72
|
+
subCategoryScores: {
|
|
73
|
+
"Development Security": "Medium",
|
|
74
|
+
"Training Security": "Low",
|
|
75
|
+
"Deployment Security": "Medium",
|
|
76
|
+
"Operational Security": "Medium",
|
|
77
|
+
},
|
|
78
|
+
findings: ["Runtime and dependency controls are reasonable but not yet hardened end-to-end."],
|
|
79
|
+
deploymentBlocker: false,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
metricCode: "GV",
|
|
83
|
+
subCategoryScores: {
|
|
84
|
+
"Regulatory Compliance": "Medium",
|
|
85
|
+
Auditing: "Medium",
|
|
86
|
+
"Risk Management": "Medium",
|
|
87
|
+
"Human Oversight": "Low",
|
|
88
|
+
"Ethical Framework Alignment": "Low",
|
|
89
|
+
},
|
|
90
|
+
findings: ["Financial-services use increases governance expectations around traceability and review."],
|
|
91
|
+
deploymentBlocker: false,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
metricCode: "CS",
|
|
95
|
+
subCategoryScores: {
|
|
96
|
+
"Model Manipulation / Prompt Injection": "High",
|
|
97
|
+
"Data Poisoning": "Medium",
|
|
98
|
+
"Sensitive Data Disclosure": "High",
|
|
99
|
+
"Model Stealing": "Low",
|
|
100
|
+
"Failure / Malfunctioning": "Medium",
|
|
101
|
+
"Insecure Supply Chain": "Medium",
|
|
102
|
+
"Insecure Apps / Plugins": "High",
|
|
103
|
+
"Denial of Service (DoS)": "Low",
|
|
104
|
+
"Loss of Governance / Compliance": "Medium",
|
|
105
|
+
},
|
|
106
|
+
findings: ["Dangerous refund and customer-data tools materially raise prompt injection impact."],
|
|
107
|
+
deploymentBlocker: true,
|
|
108
|
+
},
|
|
109
|
+
];
|
|
110
|
+
async function assessSingleAgent() {
|
|
111
|
+
const agent = demoAgent;
|
|
112
|
+
const kb = new AIVSSKnowledgeBase();
|
|
113
|
+
const requests = await buildBatchRequests({
|
|
114
|
+
agents: [agent],
|
|
115
|
+
useKnowledgeBase: true,
|
|
116
|
+
model: "claude-opus-4-7",
|
|
117
|
+
temperature: 0,
|
|
118
|
+
maxTokens: 1024,
|
|
119
|
+
}, kb);
|
|
120
|
+
const score = calculateAIVSSScore({
|
|
121
|
+
agentDefinition: agent,
|
|
122
|
+
metricResponses: SAMPLE_RESPONSES,
|
|
123
|
+
baseScore: 2.4,
|
|
124
|
+
impactScore: 7.2,
|
|
125
|
+
temporalScore: 0.95,
|
|
126
|
+
});
|
|
127
|
+
console.log(`Built ${requests.length} V4 assessment requests for ${agent.name}`);
|
|
128
|
+
console.log(`Overall AIVSS score: ${score.aivssScore.toFixed(2)} (${score.severity})`);
|
|
129
|
+
console.log(`Deployment blocker: ${score.deploymentBlocker ? "yes" : "no"}`);
|
|
130
|
+
console.log("\nSample request structure:");
|
|
131
|
+
console.log(JSON.stringify(requests[0], null, 2));
|
|
132
|
+
console.log("\n---");
|
|
133
|
+
console.log("Top findings:");
|
|
134
|
+
for (const finding of score.allFindings.slice(0, 3)) {
|
|
135
|
+
console.log(`- ${finding}`);
|
|
136
|
+
}
|
|
137
|
+
const atlas = loadAtlasData(path.resolve(process.cwd(), "vendor/atlas-release/ATLAS-2026.07.yaml"));
|
|
138
|
+
const sampleMetric = "MR";
|
|
139
|
+
const ids = getTechniquesForMetric(sampleMetric);
|
|
140
|
+
console.log(`\nATLAS coverage for ${sampleMetric}: ${ids.length} technique IDs mapped, ${getAtlasContext(atlas, ids)
|
|
141
|
+
.split("\n")
|
|
142
|
+
.filter((line) => line.startsWith("- ")).length} resolved in ATLAS data`);
|
|
143
|
+
console.log(`Total coverage matrix entries: ${ATLAS_COVERAGE_MATRIX.length}`);
|
|
144
|
+
}
|
|
145
|
+
assessSingleAgent().catch(console.error);
|
|
146
|
+
//# sourceMappingURL=simple-assessment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-assessment.js","sourceRoot":"","sources":["../../src/examples/simple-assessment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threat-model-demo.d.ts","sourceRoot":"","sources":["../../src/examples/threat-model-demo.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { assessWorkflow, generateLikeC4, likec4Filename } from "../index";
|
|
4
|
+
import { assembleTCFormat, severityKey } from "../output/tc-assembler";
|
|
5
|
+
import { ATLAS_COVERAGE_MATRIX, loadAtlasData, } from "../aivss";
|
|
6
|
+
const PROJECT_ROOT = path.resolve(import.meta.dir, "../..");
|
|
7
|
+
const OUTPUT_DIR = path.join(PROJECT_ROOT, "output");
|
|
8
|
+
const OUTPUT_FILE = path.join(OUTPUT_DIR, "demo-threat-model.tc.json");
|
|
9
|
+
const DIAGRAM_FILE = path.join(OUTPUT_DIR, likec4Filename("Customer Support Agent Demo"));
|
|
10
|
+
const DEMO_AGENT_PATH = path.join(PROJECT_ROOT, "src/examples/demo-agent-definition.json");
|
|
11
|
+
const ATLAS_YAML = path.join(PROJECT_ROOT, "vendor/atlas-release/ATLAS-2026.07.yaml");
|
|
12
|
+
function loadDemoAgent() {
|
|
13
|
+
const raw = fs.readFileSync(DEMO_AGENT_PATH, "utf8");
|
|
14
|
+
return JSON.parse(raw);
|
|
15
|
+
}
|
|
16
|
+
function ensureOutputDir() {
|
|
17
|
+
if (!fs.existsSync(OUTPUT_DIR)) {
|
|
18
|
+
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
// Fallback when no provider credentials are available — assemble a TC document
|
|
22
|
+
// using stub slot fills so the artifact is still openable in Threat Composer
|
|
23
|
+
// and the assembler path is exercised end-to-end.
|
|
24
|
+
function buildMockOutput(agent) {
|
|
25
|
+
const atlasData = loadAtlasData(ATLAS_YAML);
|
|
26
|
+
const filledSlots = new Map();
|
|
27
|
+
const severityBySubCategory = new Map();
|
|
28
|
+
for (const entry of ATLAS_COVERAGE_MATRIX) {
|
|
29
|
+
severityBySubCategory.set(severityKey(agent.id, entry.metric, entry.subCategory), "Medium");
|
|
30
|
+
const techniqueId = entry.atlasTechniqueIds[0];
|
|
31
|
+
if (!techniqueId)
|
|
32
|
+
continue;
|
|
33
|
+
const technique = atlasData.techniqueById.get(techniqueId);
|
|
34
|
+
if (!technique)
|
|
35
|
+
continue;
|
|
36
|
+
filledSlots.set(`${agent.id}::${techniqueId}::${entry.metric}::${entry.subCategory}`, {
|
|
37
|
+
threatSource: "An internet-based adversary",
|
|
38
|
+
prerequisites: `with network access to ${agent.name}`,
|
|
39
|
+
threatAction: `exploit ${entry.subCategory.toLowerCase()} weaknesses (${technique.id})`,
|
|
40
|
+
threatImpact: `compromise ${agent.deploymentContext.toLowerCase()} operations`,
|
|
41
|
+
impactedGoal: ["confidentiality", "integrity"],
|
|
42
|
+
impactedAssets: [agent.name.toLowerCase()],
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return assembleTCFormat({
|
|
46
|
+
agents: [agent],
|
|
47
|
+
handoffs: [],
|
|
48
|
+
metricResponses: [],
|
|
49
|
+
atlasData,
|
|
50
|
+
coverageMatrix: ATLAS_COVERAGE_MATRIX,
|
|
51
|
+
filledSlots,
|
|
52
|
+
severityBySubCategory: severityBySubCategory,
|
|
53
|
+
applicationName: `${agent.name} (mock — no provider credentials)`,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
async function main() {
|
|
57
|
+
ensureOutputDir();
|
|
58
|
+
const agent = loadDemoAgent();
|
|
59
|
+
let output;
|
|
60
|
+
let mode;
|
|
61
|
+
const hasAnthropicKey = Boolean(process.env.ANTHROPIC_API_KEY);
|
|
62
|
+
if (!hasAnthropicKey) {
|
|
63
|
+
process.stdout.write("ANTHROPIC_API_KEY not set — falling back to mock slot fills.\n");
|
|
64
|
+
output = buildMockOutput(agent);
|
|
65
|
+
mode = "mock";
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
try {
|
|
69
|
+
output = await assessWorkflow({
|
|
70
|
+
input: { type: "agents", agents: [agent] },
|
|
71
|
+
provider: { type: "anthropic" },
|
|
72
|
+
applicationName: `${agent.name} — AIVSS Threat Model`,
|
|
73
|
+
});
|
|
74
|
+
mode = "live";
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
78
|
+
process.stderr.write(`Live provider call failed (${message}). Writing mock output instead.\n`);
|
|
79
|
+
output = buildMockOutput(agent);
|
|
80
|
+
mode = "mock";
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
fs.writeFileSync(OUTPUT_FILE, JSON.stringify(output, null, 2));
|
|
84
|
+
// Generate LikeC4 architecture diagram alongside the threat model
|
|
85
|
+
const c4 = generateLikeC4({
|
|
86
|
+
agents: [agent],
|
|
87
|
+
handoffs: [],
|
|
88
|
+
applicationName: "Customer Support Agent Demo",
|
|
89
|
+
});
|
|
90
|
+
fs.writeFileSync(DIAGRAM_FILE, c4);
|
|
91
|
+
const threatCount = output.threats?.length ?? 0;
|
|
92
|
+
const mitigationCount = output.mitigations?.length ?? 0;
|
|
93
|
+
const linkCount = output.mitigationLinks?.length ?? 0;
|
|
94
|
+
process.stdout.write(`Threat model (${mode}): ${threatCount} threats, ${mitigationCount} mitigations, ${linkCount} links. Written to ${OUTPUT_FILE}\n`);
|
|
95
|
+
process.stdout.write(`Architecture diagram written to ${DIAGRAM_FILE}\n`);
|
|
96
|
+
process.stdout.write(` To view: npx likec4 serve ${DIAGRAM_FILE}\n`);
|
|
97
|
+
}
|
|
98
|
+
main().catch((err) => {
|
|
99
|
+
const message = err instanceof Error ? err.stack ?? err.message : String(err);
|
|
100
|
+
process.stderr.write(`threat-model-demo failed: ${message}\n`);
|
|
101
|
+
process.exit(1);
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=threat-model-demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threat-model-demo.js","sourceRoot":"","sources":["../../src/examples/threat-model-demo.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { AgentDefinition, DeploymentContext, MetricCode } from "./aivss/types";
|
|
2
|
+
import type { HandoffEdge, N8NWorkflow } from "./adapters/types";
|
|
3
|
+
import { type ProviderConfig } from "./providers";
|
|
4
|
+
import type { DataExchangeFormat } from "./output/tc-types";
|
|
5
|
+
import type { BatchProvider } from "./batch/providers/index.js";
|
|
6
|
+
export { createProvider } from "./providers";
|
|
7
|
+
export { parseN8NWorkflow } from "./adapters/n8n";
|
|
8
|
+
export { parseOpenClawConfig } from "./adapters/openclaw.js";
|
|
9
|
+
export { parseLangfuseTraces, loadOverlaysFromYaml } from "./adapters/langfuse.js";
|
|
10
|
+
export { walkA2AGraph, fetchA2AAgent } from "./adapters/a2a.js";
|
|
11
|
+
export type { OpenClawAdapterOptions, OpenClawAdapterResult } from "./adapters/openclaw.js";
|
|
12
|
+
export type { LangfuseAdapterConfig, AgentOverlay } from "./adapters/langfuse.js";
|
|
13
|
+
export type { A2AAgentCard, A2ASkill, A2AWalkOptions, A2AWalkResult } from "./adapters/a2a.js";
|
|
14
|
+
export { generateLikeC4, likec4Filename } from "./output/likec4-generator";
|
|
15
|
+
export { runBedrockBatch, submitBedrockBatch, fetchBedrockBatch } from "./batch/bedrock-batch-runner.js";
|
|
16
|
+
export { submitAnthropicBatch, fetchAnthropicBatch } from "./batch/anthropic-batch-runner.js";
|
|
17
|
+
export { createBatchProvider, BedrockBatchProvider, AnthropicBatchProvider, OllamaBatchProvider } from "./batch/providers/index.js";
|
|
18
|
+
export { runModelEval } from "./tools/model-eval.js";
|
|
19
|
+
export { buildBaseline, saveBaseline, loadRecentBaselines } from "./baseline/store.js";
|
|
20
|
+
export { diffBaselines, formatDiff } from "./baseline/diff.js";
|
|
21
|
+
export type { AssessmentBaseline, AgentSummary } from "./baseline/store.js";
|
|
22
|
+
export type { BaselineDiff, SeverityChange, AgentDelta } from "./baseline/diff.js";
|
|
23
|
+
export type { LikeC4GeneratorOptions } from "./output/likec4-generator";
|
|
24
|
+
export type { BatchProvider, BatchProviderConfig, BedrockBatchProviderConfig, AnthropicBatchProviderConfig, AnthropicBatchConfig, OllamaBatchProviderConfig, OllamaBatchConfig } from "./batch/providers/index.js";
|
|
25
|
+
export type { ModelEvalReport, ModelEvalOptions, ModelRecommendation, MetricAgreement, ModelVerdict } from "./tools/model-eval.js";
|
|
26
|
+
export type { BedrockBatchConfig, BatchRunOptions, BatchRunResult, BatchJobHandle, SubmitOptions, FetchOptions, FetchStatus } from "./batch/bedrock-batch-runner.js";
|
|
27
|
+
export type { AnthropicBatchHandle, AnthropicSubmitOptions, AnthropicFetchOptions, AnthropicFetchStatus } from "./batch/anthropic-batch-runner.js";
|
|
28
|
+
export type { InferenceProvider, ProviderConfig } from "./providers";
|
|
29
|
+
export type { DataExchangeFormat } from "./output/tc-types";
|
|
30
|
+
export type { AgentDefinition } from "./aivss/types";
|
|
31
|
+
export type { HandoffEdge, N8NWorkflow } from "./adapters/types";
|
|
32
|
+
export type AssessWorkflowInput = {
|
|
33
|
+
type: "n8n";
|
|
34
|
+
workflow: N8NWorkflow;
|
|
35
|
+
} | {
|
|
36
|
+
type: "agents";
|
|
37
|
+
agents: AgentDefinition[];
|
|
38
|
+
handoffs?: HandoffEdge[];
|
|
39
|
+
};
|
|
40
|
+
export interface AssessWorkflowOptions {
|
|
41
|
+
input: AssessWorkflowInput;
|
|
42
|
+
provider?: ProviderConfig;
|
|
43
|
+
deploymentContext?: DeploymentContext;
|
|
44
|
+
applicationName?: string;
|
|
45
|
+
atlasYamlPath?: string;
|
|
46
|
+
/**
|
|
47
|
+
* When provided, Canopy runs a live batch inference job to obtain real
|
|
48
|
+
* per-sub-category severity scores instead of the PoC mock (Medium).
|
|
49
|
+
*
|
|
50
|
+
* Use `createBatchProvider({ type: "bedrock", ... })` or
|
|
51
|
+
* `createBatchProvider({ type: "anthropic", ... })` to get a provider,
|
|
52
|
+
* or implement `BatchProvider` directly for any other backend.
|
|
53
|
+
*/
|
|
54
|
+
batchProvider?: BatchProvider;
|
|
55
|
+
/** Progress callback forwarded to the batch provider when batchProvider is set. */
|
|
56
|
+
onBatchProgress?: (status: string) => void;
|
|
57
|
+
}
|
|
58
|
+
export declare function assessWorkflow(options: AssessWorkflowOptions): Promise<DataExchangeFormat>;
|
|
59
|
+
export declare const METRICS: readonly MetricCode[];
|
|
60
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { ATLAS_COVERAGE_MATRIX, loadAtlasData, } from "./aivss";
|
|
2
|
+
import { resolveAtlasYaml } from "./aivss/atlas/resolve-path";
|
|
3
|
+
import { METRIC_CODES } from "./aivss/types";
|
|
4
|
+
import { parseN8NWorkflow } from "./adapters/n8n";
|
|
5
|
+
import { createProvider, } from "./providers";
|
|
6
|
+
import { fillThreatSlots, } from "./output/slot-filler";
|
|
7
|
+
import { assembleTCFormat, severityKey, slotKey, } from "./output/tc-assembler";
|
|
8
|
+
export { createProvider } from "./providers";
|
|
9
|
+
export { parseN8NWorkflow } from "./adapters/n8n";
|
|
10
|
+
export { parseOpenClawConfig } from "./adapters/openclaw.js";
|
|
11
|
+
export { parseLangfuseTraces, loadOverlaysFromYaml } from "./adapters/langfuse.js";
|
|
12
|
+
export { walkA2AGraph, fetchA2AAgent } from "./adapters/a2a.js";
|
|
13
|
+
export { generateLikeC4, likec4Filename } from "./output/likec4-generator";
|
|
14
|
+
export { runBedrockBatch, submitBedrockBatch, fetchBedrockBatch } from "./batch/bedrock-batch-runner.js";
|
|
15
|
+
export { submitAnthropicBatch, fetchAnthropicBatch } from "./batch/anthropic-batch-runner.js";
|
|
16
|
+
export { createBatchProvider, BedrockBatchProvider, AnthropicBatchProvider, OllamaBatchProvider } from "./batch/providers/index.js";
|
|
17
|
+
export { runModelEval } from "./tools/model-eval.js";
|
|
18
|
+
export { buildBaseline, saveBaseline, loadRecentBaselines } from "./baseline/store.js";
|
|
19
|
+
export { diffBaselines, formatDiff } from "./baseline/diff.js";
|
|
20
|
+
// ATLAS path resolution lives in src/aivss/atlas/resolve-path.ts — one place
|
|
21
|
+
// that knows the pinned content version and how to find the file both from a
|
|
22
|
+
// checkout and from inside an installed package.
|
|
23
|
+
// PoC simplification: real per-sub-category severity comes from live batch API
|
|
24
|
+
// responses (Bedrock/Anthropic Messages Batches). For this PoC we mock every
|
|
25
|
+
// sub-category as Medium so the assembler emits a meaningful output. When the
|
|
26
|
+
// real batch path is wired in, replace this with severities extracted from
|
|
27
|
+
// MetricAssessmentResponse.subCategoryScores.
|
|
28
|
+
const MOCK_SEVERITY = "Medium";
|
|
29
|
+
function buildSeverityMap(agents, coverage, responses) {
|
|
30
|
+
const map = new Map();
|
|
31
|
+
// Index responses by (agentId, metricCode). Responses without agentId are
|
|
32
|
+
// treated as global — applied to all agents (single-agent runs or pre-v0.3 data).
|
|
33
|
+
const perAgent = new Map(); // `${agentId}|${metricCode}`
|
|
34
|
+
const global = new Map(); // metricCode only
|
|
35
|
+
for (const r of responses) {
|
|
36
|
+
if (r.agentId) {
|
|
37
|
+
perAgent.set(`${r.agentId}|${r.metricCode}`, r);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
global.set(r.metricCode, r);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
for (const agent of agents) {
|
|
44
|
+
for (const entry of coverage) {
|
|
45
|
+
const response = perAgent.get(`${agent.id}|${entry.metric}`) ??
|
|
46
|
+
global.get(entry.metric);
|
|
47
|
+
const severity = response?.subCategoryScores?.[entry.subCategory] ?? MOCK_SEVERITY;
|
|
48
|
+
map.set(severityKey(agent.id, entry.metric, entry.subCategory), severity);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return map;
|
|
52
|
+
}
|
|
53
|
+
function tacticForTechnique(atlas, techniqueId) {
|
|
54
|
+
const tech = atlas.techniqueById.get(techniqueId);
|
|
55
|
+
if (!tech || tech.tactics.length === 0)
|
|
56
|
+
return "unspecified";
|
|
57
|
+
return tech.tactics[0] ?? "unspecified";
|
|
58
|
+
}
|
|
59
|
+
async function fillAllSlots(provider, agents, coverage, atlas, batchSlotIndex, severityMap) {
|
|
60
|
+
const filled = new Map();
|
|
61
|
+
for (const agent of agents) {
|
|
62
|
+
for (const entry of coverage) {
|
|
63
|
+
const severity = severityMap.get(severityKey(agent.id, entry.metric, entry.subCategory));
|
|
64
|
+
if (!severity || severity === "None")
|
|
65
|
+
continue;
|
|
66
|
+
const techniqueId = entry.atlasTechniqueIds[0];
|
|
67
|
+
if (!techniqueId)
|
|
68
|
+
continue;
|
|
69
|
+
const technique = atlas.techniqueById.get(techniqueId);
|
|
70
|
+
if (!technique)
|
|
71
|
+
continue;
|
|
72
|
+
// Use batch-provided slots when available — skip the provider call entirely.
|
|
73
|
+
const batchSlot = batchSlotIndex.get(`${agent.id}|${entry.metric}|${entry.subCategory}`);
|
|
74
|
+
if (batchSlot) {
|
|
75
|
+
filled.set(slotKey(agent.id, techniqueId, entry.metric, entry.subCategory), batchSlot);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const tactic = tacticForTechnique(atlas, techniqueId);
|
|
79
|
+
const slots = await fillThreatSlots(provider, agent, technique, tactic, entry.metric, entry.subCategory, severity);
|
|
80
|
+
filled.set(slotKey(agent.id, techniqueId, entry.metric, entry.subCategory), slots);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return filled;
|
|
84
|
+
}
|
|
85
|
+
export async function assessWorkflow(options) {
|
|
86
|
+
// 1. Parse input
|
|
87
|
+
let agents;
|
|
88
|
+
let handoffs;
|
|
89
|
+
let workflowName;
|
|
90
|
+
if (options.input.type === "n8n") {
|
|
91
|
+
const result = parseN8NWorkflow(options.input.workflow, {
|
|
92
|
+
deploymentContext: options.deploymentContext,
|
|
93
|
+
});
|
|
94
|
+
agents = result.agents;
|
|
95
|
+
handoffs = result.handoffs;
|
|
96
|
+
workflowName = result.workflowName;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
agents = options.input.agents;
|
|
100
|
+
handoffs = options.input.handoffs ?? [];
|
|
101
|
+
workflowName = options.applicationName ?? "Direct Agents Assessment";
|
|
102
|
+
}
|
|
103
|
+
if (agents.length === 0) {
|
|
104
|
+
throw new Error("assessWorkflow: input produced zero agents");
|
|
105
|
+
}
|
|
106
|
+
// 2. Load ATLAS data
|
|
107
|
+
const atlasYamlPath = resolveAtlasYaml(options.atlasYamlPath);
|
|
108
|
+
const atlasData = loadAtlasData(atlasYamlPath);
|
|
109
|
+
// 3. Provider
|
|
110
|
+
const providerConfig = options.provider ?? { type: "bedrock" };
|
|
111
|
+
const provider = createProvider(providerConfig);
|
|
112
|
+
// 4. Severity map — live batch when batchProvider provided, mock otherwise
|
|
113
|
+
let metricResponses = [];
|
|
114
|
+
if (options.batchProvider) {
|
|
115
|
+
metricResponses = await options.batchProvider.runBatch(agents, {
|
|
116
|
+
onProgress: options.onBatchProgress,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
const severityBySubCategory = buildSeverityMap(agents, ATLAS_COVERAGE_MATRIX, metricResponses);
|
|
120
|
+
// 5. Fill threat slots — use batch-provided slots where present, provider for the rest
|
|
121
|
+
const batchSlotIndex = new Map();
|
|
122
|
+
for (const r of metricResponses) {
|
|
123
|
+
if (!r.threatSlots || !r.agentId)
|
|
124
|
+
continue;
|
|
125
|
+
for (const [subCat, slots] of Object.entries(r.threatSlots)) {
|
|
126
|
+
batchSlotIndex.set(`${r.agentId}|${r.metricCode}|${subCat}`, slots);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const filledSlots = await fillAllSlots(provider, agents, ATLAS_COVERAGE_MATRIX, atlasData, batchSlotIndex, severityBySubCategory);
|
|
130
|
+
// 6. Assemble TC DataExchangeFormat
|
|
131
|
+
const bundle = {
|
|
132
|
+
agents,
|
|
133
|
+
handoffs,
|
|
134
|
+
metricResponses,
|
|
135
|
+
atlasData,
|
|
136
|
+
coverageMatrix: ATLAS_COVERAGE_MATRIX,
|
|
137
|
+
filledSlots,
|
|
138
|
+
severityBySubCategory,
|
|
139
|
+
applicationName: options.applicationName ?? workflowName,
|
|
140
|
+
// A caller-supplied batchProvider means some LLM produced these
|
|
141
|
+
// severities. HarnessBatchProvider delegates to the calling agent's own
|
|
142
|
+
// model; anything else is a provider batch API. Both are non-reproducible,
|
|
143
|
+
// but they are distinct provenance and the artifact should say which.
|
|
144
|
+
scoringMode: options.batchProvider
|
|
145
|
+
? options.batchProvider.name === "harness-file-exchange"
|
|
146
|
+
? "harness"
|
|
147
|
+
: "model"
|
|
148
|
+
: "model",
|
|
149
|
+
};
|
|
150
|
+
return assembleTCFormat(bundle);
|
|
151
|
+
}
|
|
152
|
+
// Quiet "unused import" diagnostics by re-exporting the metric codes constant
|
|
153
|
+
// for downstream consumers that want the canonical metric ordering.
|
|
154
|
+
export const METRICS = METRIC_CODES;
|
|
155
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LikeC4 diagram generator for Canopy agent system assessments.
|
|
3
|
+
*
|
|
4
|
+
* Converts AgentDefinition[] + HandoffEdge[] into a LikeC4 DSL string (.c4)
|
|
5
|
+
* representing the full agent system architecture — agents, tools, data stores,
|
|
6
|
+
* external dependencies, and handoff trust relationships.
|
|
7
|
+
*
|
|
8
|
+
* Pure function: no I/O, no side effects. The caller writes the file.
|
|
9
|
+
*
|
|
10
|
+
* Why LikeC4 over plain Mermaid/PlantUML:
|
|
11
|
+
* - Architecture as code: a single `.c4` file is the canonical system description
|
|
12
|
+
* - Multiple views from one model (landscape, per-agent drill-down, deployment)
|
|
13
|
+
* - Fills the gap AWS Threat Composer leaves: TC produces a threat list with no
|
|
14
|
+
* structural diagram of the system being modelled
|
|
15
|
+
* - LikeC4's DSL is designed for AI-assisted generation — LLM-friendly syntax
|
|
16
|
+
*
|
|
17
|
+
* Reference: https://likec4.dev
|
|
18
|
+
*/
|
|
19
|
+
import type { AgentDefinition } from "../aivss/types.js";
|
|
20
|
+
import type { HandoffEdge } from "../adapters/types.js";
|
|
21
|
+
export interface LikeC4GeneratorOptions {
|
|
22
|
+
agents: AgentDefinition[];
|
|
23
|
+
handoffs?: HandoffEdge[];
|
|
24
|
+
applicationName: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generate a LikeC4 DSL string from Canopy agent definitions.
|
|
28
|
+
*
|
|
29
|
+
* @returns A string containing a complete LikeC4 `.c4` file.
|
|
30
|
+
* Write it to `<outputDir>/<applicationName>.c4` or `architecture.c4`.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* const c4 = generateLikeC4({ agents, handoffs, applicationName: "My System" });
|
|
34
|
+
* await Bun.write("output/architecture.c4", c4);
|
|
35
|
+
* // Then: npx likec4 serve output/architecture.c4
|
|
36
|
+
*/
|
|
37
|
+
export declare function generateLikeC4(options: LikeC4GeneratorOptions): string;
|
|
38
|
+
/**
|
|
39
|
+
* Derive a safe output filename from the application name.
|
|
40
|
+
* e.g. "My Agent System" → "my-agent-system.c4"
|
|
41
|
+
*/
|
|
42
|
+
export declare function likec4Filename(applicationName: string): string;
|
|
43
|
+
//# sourceMappingURL=likec4-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"likec4-generator.d.ts","sourceRoot":"","sources":["../../src/output/likec4-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAkSxD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAqBtE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAO9D"}
|