@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.
Files changed (319) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +323 -0
  3. package/SKILL.md +97 -0
  4. package/demo/data/openclaw-demo.tc.json +397 -0
  5. package/demo/data/openclaw-nemoclaw-demo.tc.json +475 -0
  6. package/demo/index.html +556 -0
  7. package/dist/adapters/a2a.d.ts +82 -0
  8. package/dist/adapters/a2a.d.ts.map +1 -0
  9. package/dist/adapters/a2a.js +215 -0
  10. package/dist/adapters/a2a.js.map +1 -0
  11. package/dist/adapters/a2a.test.d.ts +2 -0
  12. package/dist/adapters/a2a.test.d.ts.map +1 -0
  13. package/dist/adapters/a2a.test.js +196 -0
  14. package/dist/adapters/a2a.test.js.map +1 -0
  15. package/dist/adapters/langfuse.d.ts +28 -0
  16. package/dist/adapters/langfuse.d.ts.map +1 -0
  17. package/dist/adapters/langfuse.js +192 -0
  18. package/dist/adapters/langfuse.js.map +1 -0
  19. package/dist/adapters/n8n.d.ts +4 -0
  20. package/dist/adapters/n8n.d.ts.map +1 -0
  21. package/dist/adapters/n8n.js +89 -0
  22. package/dist/adapters/n8n.js.map +1 -0
  23. package/dist/adapters/openclaw.d.ts +58 -0
  24. package/dist/adapters/openclaw.d.ts.map +1 -0
  25. package/dist/adapters/openclaw.js +275 -0
  26. package/dist/adapters/openclaw.js.map +1 -0
  27. package/dist/adapters/types.d.ts +33 -0
  28. package/dist/adapters/types.d.ts.map +1 -0
  29. package/dist/adapters/types.js +2 -0
  30. package/dist/adapters/types.js.map +1 -0
  31. package/dist/aivss/atlas/coverage-matrix.d.ts +12 -0
  32. package/dist/aivss/atlas/coverage-matrix.d.ts.map +1 -0
  33. package/dist/aivss/atlas/coverage-matrix.js +272 -0
  34. package/dist/aivss/atlas/coverage-matrix.js.map +1 -0
  35. package/dist/aivss/atlas/loader.d.ts +28 -0
  36. package/dist/aivss/atlas/loader.d.ts.map +1 -0
  37. package/dist/aivss/atlas/loader.js +126 -0
  38. package/dist/aivss/atlas/loader.js.map +1 -0
  39. package/dist/aivss/atlas/loader.test.d.ts +11 -0
  40. package/dist/aivss/atlas/loader.test.d.ts.map +1 -0
  41. package/dist/aivss/atlas/loader.test.js +111 -0
  42. package/dist/aivss/atlas/loader.test.js.map +1 -0
  43. package/dist/aivss/atlas/resolve-path.d.ts +34 -0
  44. package/dist/aivss/atlas/resolve-path.d.ts.map +1 -0
  45. package/dist/aivss/atlas/resolve-path.js +58 -0
  46. package/dist/aivss/atlas/resolve-path.js.map +1 -0
  47. package/dist/aivss/batch/batch-builder.d.ts +11 -0
  48. package/dist/aivss/batch/batch-builder.d.ts.map +1 -0
  49. package/dist/aivss/batch/batch-builder.js +75 -0
  50. package/dist/aivss/batch/batch-builder.js.map +1 -0
  51. package/dist/aivss/index.d.ts +21 -0
  52. package/dist/aivss/index.d.ts.map +1 -0
  53. package/dist/aivss/index.js +19 -0
  54. package/dist/aivss/index.js.map +1 -0
  55. package/dist/aivss/knowledge-base/kb-client.d.ts +9 -0
  56. package/dist/aivss/knowledge-base/kb-client.d.ts.map +1 -0
  57. package/dist/aivss/knowledge-base/kb-client.js +139 -0
  58. package/dist/aivss/knowledge-base/kb-client.js.map +1 -0
  59. package/dist/aivss/knowledge-base/kb-types.d.ts +21 -0
  60. package/dist/aivss/knowledge-base/kb-types.d.ts.map +1 -0
  61. package/dist/aivss/knowledge-base/kb-types.js +2 -0
  62. package/dist/aivss/knowledge-base/kb-types.js.map +1 -0
  63. package/dist/aivss/knowledge-base/search-builder.d.ts +7 -0
  64. package/dist/aivss/knowledge-base/search-builder.d.ts.map +1 -0
  65. package/dist/aivss/knowledge-base/search-builder.js +119 -0
  66. package/dist/aivss/knowledge-base/search-builder.js.map +1 -0
  67. package/dist/aivss/metrics/aa.d.ts +3 -0
  68. package/dist/aivss/metrics/aa.d.ts.map +1 -0
  69. package/dist/aivss/metrics/aa.js +26 -0
  70. package/dist/aivss/metrics/aa.js.map +1 -0
  71. package/dist/aivss/metrics/ad.d.ts +3 -0
  72. package/dist/aivss/metrics/ad.d.ts.map +1 -0
  73. package/dist/aivss/metrics/ad.js +30 -0
  74. package/dist/aivss/metrics/ad.js.map +1 -0
  75. package/dist/aivss/metrics/cs.d.ts +3 -0
  76. package/dist/aivss/metrics/cs.d.ts.map +1 -0
  77. package/dist/aivss/metrics/cs.js +50 -0
  78. package/dist/aivss/metrics/cs.js.map +1 -0
  79. package/dist/aivss/metrics/dc.d.ts +3 -0
  80. package/dist/aivss/metrics/dc.d.ts.map +1 -0
  81. package/dist/aivss/metrics/dc.js +30 -0
  82. package/dist/aivss/metrics/dc.js.map +1 -0
  83. package/dist/aivss/metrics/ds.d.ts +3 -0
  84. package/dist/aivss/metrics/ds.d.ts.map +1 -0
  85. package/dist/aivss/metrics/ds.js +26 -0
  86. package/dist/aivss/metrics/ds.js.map +1 -0
  87. package/dist/aivss/metrics/ei.d.ts +3 -0
  88. package/dist/aivss/metrics/ei.d.ts.map +1 -0
  89. package/dist/aivss/metrics/ei.js +30 -0
  90. package/dist/aivss/metrics/ei.js.map +1 -0
  91. package/dist/aivss/metrics/gv.d.ts +3 -0
  92. package/dist/aivss/metrics/gv.d.ts.map +1 -0
  93. package/dist/aivss/metrics/gv.js +34 -0
  94. package/dist/aivss/metrics/gv.js.map +1 -0
  95. package/dist/aivss/metrics/ll.d.ts +3 -0
  96. package/dist/aivss/metrics/ll.d.ts.map +1 -0
  97. package/dist/aivss/metrics/ll.js +30 -0
  98. package/dist/aivss/metrics/ll.js.map +1 -0
  99. package/dist/aivss/metrics/mr.d.ts +3 -0
  100. package/dist/aivss/metrics/mr.d.ts.map +1 -0
  101. package/dist/aivss/metrics/mr.js +26 -0
  102. package/dist/aivss/metrics/mr.js.map +1 -0
  103. package/dist/aivss/metrics/shared.d.ts +22 -0
  104. package/dist/aivss/metrics/shared.d.ts.map +1 -0
  105. package/dist/aivss/metrics/shared.js +70 -0
  106. package/dist/aivss/metrics/shared.js.map +1 -0
  107. package/dist/aivss/prompts/base-system-prompt.d.ts +2 -0
  108. package/dist/aivss/prompts/base-system-prompt.d.ts.map +1 -0
  109. package/dist/aivss/prompts/base-system-prompt.js +31 -0
  110. package/dist/aivss/prompts/base-system-prompt.js.map +1 -0
  111. package/dist/aivss/prompts/prompt-composer.d.ts +13 -0
  112. package/dist/aivss/prompts/prompt-composer.d.ts.map +1 -0
  113. package/dist/aivss/prompts/prompt-composer.js +21 -0
  114. package/dist/aivss/prompts/prompt-composer.js.map +1 -0
  115. package/dist/aivss/scoring/a2a-corpus.test.d.ts +28 -0
  116. package/dist/aivss/scoring/a2a-corpus.test.d.ts.map +1 -0
  117. package/dist/aivss/scoring/a2a-corpus.test.js +109 -0
  118. package/dist/aivss/scoring/a2a-corpus.test.js.map +1 -0
  119. package/dist/aivss/scoring/determinism.test.d.ts +16 -0
  120. package/dist/aivss/scoring/determinism.test.d.ts.map +1 -0
  121. package/dist/aivss/scoring/determinism.test.js +169 -0
  122. package/dist/aivss/scoring/determinism.test.js.map +1 -0
  123. package/dist/aivss/scoring/heuristic-scorer.d.ts +21 -0
  124. package/dist/aivss/scoring/heuristic-scorer.d.ts.map +1 -0
  125. package/dist/aivss/scoring/heuristic-scorer.js +299 -0
  126. package/dist/aivss/scoring/heuristic-scorer.js.map +1 -0
  127. package/dist/aivss/scoring/heuristic-scorer.test.d.ts +8 -0
  128. package/dist/aivss/scoring/heuristic-scorer.test.d.ts.map +1 -0
  129. package/dist/aivss/scoring/heuristic-scorer.test.js +150 -0
  130. package/dist/aivss/scoring/heuristic-scorer.test.js.map +1 -0
  131. package/dist/aivss/scoring/scoring-mode.d.ts +48 -0
  132. package/dist/aivss/scoring/scoring-mode.d.ts.map +1 -0
  133. package/dist/aivss/scoring/scoring-mode.js +64 -0
  134. package/dist/aivss/scoring/scoring-mode.js.map +1 -0
  135. package/dist/aivss/scoring/v4-engine.d.ts +15 -0
  136. package/dist/aivss/scoring/v4-engine.d.ts.map +1 -0
  137. package/dist/aivss/scoring/v4-engine.js +84 -0
  138. package/dist/aivss/scoring/v4-engine.js.map +1 -0
  139. package/dist/aivss/scoring/v4-engine.test.d.ts +16 -0
  140. package/dist/aivss/scoring/v4-engine.test.d.ts.map +1 -0
  141. package/dist/aivss/scoring/v4-engine.test.js +156 -0
  142. package/dist/aivss/scoring/v4-engine.test.js.map +1 -0
  143. package/dist/aivss/types.d.ts +92 -0
  144. package/dist/aivss/types.d.ts.map +1 -0
  145. package/dist/aivss/types.js +25 -0
  146. package/dist/aivss/types.js.map +1 -0
  147. package/dist/baseline/baseline.test.d.ts +2 -0
  148. package/dist/baseline/baseline.test.d.ts.map +1 -0
  149. package/dist/baseline/baseline.test.js +219 -0
  150. package/dist/baseline/baseline.test.js.map +1 -0
  151. package/dist/baseline/diff.d.ts +42 -0
  152. package/dist/baseline/diff.d.ts.map +1 -0
  153. package/dist/baseline/diff.js +124 -0
  154. package/dist/baseline/diff.js.map +1 -0
  155. package/dist/baseline/store.d.ts +51 -0
  156. package/dist/baseline/store.d.ts.map +1 -0
  157. package/dist/baseline/store.js +92 -0
  158. package/dist/baseline/store.js.map +1 -0
  159. package/dist/batch/anthropic-batch-runner.d.ts +50 -0
  160. package/dist/batch/anthropic-batch-runner.d.ts.map +1 -0
  161. package/dist/batch/anthropic-batch-runner.js +91 -0
  162. package/dist/batch/anthropic-batch-runner.js.map +1 -0
  163. package/dist/batch/bedrock-batch-runner.d.ts +90 -0
  164. package/dist/batch/bedrock-batch-runner.d.ts.map +1 -0
  165. package/dist/batch/bedrock-batch-runner.js +199 -0
  166. package/dist/batch/bedrock-batch-runner.js.map +1 -0
  167. package/dist/batch/providers/anthropic.d.ts +55 -0
  168. package/dist/batch/providers/anthropic.d.ts.map +1 -0
  169. package/dist/batch/providers/anthropic.js +103 -0
  170. package/dist/batch/providers/anthropic.js.map +1 -0
  171. package/dist/batch/providers/bedrock.d.ts +31 -0
  172. package/dist/batch/providers/bedrock.d.ts.map +1 -0
  173. package/dist/batch/providers/bedrock.js +42 -0
  174. package/dist/batch/providers/bedrock.js.map +1 -0
  175. package/dist/batch/providers/harness.d.ts +36 -0
  176. package/dist/batch/providers/harness.d.ts.map +1 -0
  177. package/dist/batch/providers/harness.js +65 -0
  178. package/dist/batch/providers/harness.js.map +1 -0
  179. package/dist/batch/providers/harness.test.d.ts +7 -0
  180. package/dist/batch/providers/harness.test.d.ts.map +1 -0
  181. package/dist/batch/providers/harness.test.js +84 -0
  182. package/dist/batch/providers/harness.test.js.map +1 -0
  183. package/dist/batch/providers/index.d.ts +82 -0
  184. package/dist/batch/providers/index.d.ts.map +1 -0
  185. package/dist/batch/providers/index.js +82 -0
  186. package/dist/batch/providers/index.js.map +1 -0
  187. package/dist/batch/providers/ollama.d.ts +68 -0
  188. package/dist/batch/providers/ollama.d.ts.map +1 -0
  189. package/dist/batch/providers/ollama.js +108 -0
  190. package/dist/batch/providers/ollama.js.map +1 -0
  191. package/dist/batch/response-parser.d.ts +45 -0
  192. package/dist/batch/response-parser.d.ts.map +1 -0
  193. package/dist/batch/response-parser.js +161 -0
  194. package/dist/batch/response-parser.js.map +1 -0
  195. package/dist/batch/types.d.ts +87 -0
  196. package/dist/batch/types.d.ts.map +1 -0
  197. package/dist/batch/types.js +8 -0
  198. package/dist/batch/types.js.map +1 -0
  199. package/dist/cli.d.ts +15 -0
  200. package/dist/cli.d.ts.map +1 -0
  201. package/dist/cli.js +1037 -0
  202. package/dist/cli.js.map +1 -0
  203. package/dist/examples/a2a-assessment.d.ts +20 -0
  204. package/dist/examples/a2a-assessment.d.ts.map +1 -0
  205. package/dist/examples/a2a-assessment.js +115 -0
  206. package/dist/examples/a2a-assessment.js.map +1 -0
  207. package/dist/examples/batch-assessment.d.ts +18 -0
  208. package/dist/examples/batch-assessment.d.ts.map +1 -0
  209. package/dist/examples/batch-assessment.js +112 -0
  210. package/dist/examples/batch-assessment.js.map +1 -0
  211. package/dist/examples/batch-submission-flow.d.ts +2 -0
  212. package/dist/examples/batch-submission-flow.d.ts.map +1 -0
  213. package/dist/examples/batch-submission-flow.js +279 -0
  214. package/dist/examples/batch-submission-flow.js.map +1 -0
  215. package/dist/examples/demo-agent-definition.json +58 -0
  216. package/dist/examples/langfuse-assessment.d.ts +2 -0
  217. package/dist/examples/langfuse-assessment.d.ts.map +1 -0
  218. package/dist/examples/langfuse-assessment.js +46 -0
  219. package/dist/examples/langfuse-assessment.js.map +1 -0
  220. package/dist/examples/model-eval.d.ts +25 -0
  221. package/dist/examples/model-eval.d.ts.map +1 -0
  222. package/dist/examples/model-eval.js +94 -0
  223. package/dist/examples/model-eval.js.map +1 -0
  224. package/dist/examples/openclaw-assessment.d.ts +17 -0
  225. package/dist/examples/openclaw-assessment.d.ts.map +1 -0
  226. package/dist/examples/openclaw-assessment.js +79 -0
  227. package/dist/examples/openclaw-assessment.js.map +1 -0
  228. package/dist/examples/simple-assessment.d.ts +2 -0
  229. package/dist/examples/simple-assessment.d.ts.map +1 -0
  230. package/dist/examples/simple-assessment.js +146 -0
  231. package/dist/examples/simple-assessment.js.map +1 -0
  232. package/dist/examples/threat-model-demo.d.ts +2 -0
  233. package/dist/examples/threat-model-demo.d.ts.map +1 -0
  234. package/dist/examples/threat-model-demo.js +103 -0
  235. package/dist/examples/threat-model-demo.js.map +1 -0
  236. package/dist/index.d.ts +60 -0
  237. package/dist/index.d.ts.map +1 -0
  238. package/dist/index.js +155 -0
  239. package/dist/index.js.map +1 -0
  240. package/dist/output/likec4-generator.d.ts +43 -0
  241. package/dist/output/likec4-generator.d.ts.map +1 -0
  242. package/dist/output/likec4-generator.js +287 -0
  243. package/dist/output/likec4-generator.js.map +1 -0
  244. package/dist/output/slot-filler.d.ts +6 -0
  245. package/dist/output/slot-filler.d.ts.map +1 -0
  246. package/dist/output/slot-filler.js +71 -0
  247. package/dist/output/slot-filler.js.map +1 -0
  248. package/dist/output/tc-assembler.d.ts +30 -0
  249. package/dist/output/tc-assembler.d.ts.map +1 -0
  250. package/dist/output/tc-assembler.js +227 -0
  251. package/dist/output/tc-assembler.js.map +1 -0
  252. package/dist/output/tc-types.d.ts +41 -0
  253. package/dist/output/tc-types.d.ts.map +1 -0
  254. package/dist/output/tc-types.js +5 -0
  255. package/dist/output/tc-types.js.map +1 -0
  256. package/dist/output/tc-validator.test.d.ts +9 -0
  257. package/dist/output/tc-validator.test.d.ts.map +1 -0
  258. package/dist/output/tc-validator.test.js +194 -0
  259. package/dist/output/tc-validator.test.js.map +1 -0
  260. package/dist/providers/anthropic.d.ts +9 -0
  261. package/dist/providers/anthropic.d.ts.map +1 -0
  262. package/dist/providers/anthropic.js +30 -0
  263. package/dist/providers/anthropic.js.map +1 -0
  264. package/dist/providers/bedrock.d.ts +9 -0
  265. package/dist/providers/bedrock.d.ts.map +1 -0
  266. package/dist/providers/bedrock.js +38 -0
  267. package/dist/providers/bedrock.js.map +1 -0
  268. package/dist/providers/index.d.ts +6 -0
  269. package/dist/providers/index.d.ts.map +1 -0
  270. package/dist/providers/index.js +14 -0
  271. package/dist/providers/index.js.map +1 -0
  272. package/dist/providers/types.d.ts +12 -0
  273. package/dist/providers/types.d.ts.map +1 -0
  274. package/dist/providers/types.js +5 -0
  275. package/dist/providers/types.js.map +1 -0
  276. package/dist/references/acsc-risks.d.ts +18 -0
  277. package/dist/references/acsc-risks.d.ts.map +1 -0
  278. package/dist/references/acsc-risks.js +232 -0
  279. package/dist/references/acsc-risks.js.map +1 -0
  280. package/dist/references/aicm.d.ts +41 -0
  281. package/dist/references/aicm.d.ts.map +1 -0
  282. package/dist/references/aicm.js +447 -0
  283. package/dist/references/aicm.js.map +1 -0
  284. package/dist/references/dstg-meaid.d.ts +59 -0
  285. package/dist/references/dstg-meaid.d.ts.map +1 -0
  286. package/dist/references/dstg-meaid.js +352 -0
  287. package/dist/references/dstg-meaid.js.map +1 -0
  288. package/dist/references/index.d.ts +20 -0
  289. package/dist/references/index.d.ts.map +1 -0
  290. package/dist/references/index.js +31 -0
  291. package/dist/references/index.js.map +1 -0
  292. package/dist/references/nemoclaw.d.ts +48 -0
  293. package/dist/references/nemoclaw.d.ts.map +1 -0
  294. package/dist/references/nemoclaw.js +140 -0
  295. package/dist/references/nemoclaw.js.map +1 -0
  296. package/dist/references/nist-ai-rmf.d.ts +31 -0
  297. package/dist/references/nist-ai-rmf.d.ts.map +1 -0
  298. package/dist/references/nist-ai-rmf.js +627 -0
  299. package/dist/references/nist-ai-rmf.js.map +1 -0
  300. package/dist/references/owasp-agentic-top10.d.ts +50 -0
  301. package/dist/references/owasp-agentic-top10.d.ts.map +1 -0
  302. package/dist/references/owasp-agentic-top10.js +202 -0
  303. package/dist/references/owasp-agentic-top10.js.map +1 -0
  304. package/dist/references/registry-parity.test.d.ts +17 -0
  305. package/dist/references/registry-parity.test.d.ts.map +1 -0
  306. package/dist/references/registry-parity.test.js +87 -0
  307. package/dist/references/registry-parity.test.js.map +1 -0
  308. package/dist/references/registry.d.ts +90 -0
  309. package/dist/references/registry.d.ts.map +1 -0
  310. package/dist/references/registry.js +29 -0
  311. package/dist/references/registry.js.map +1 -0
  312. package/dist/tools/model-eval.d.ts +97 -0
  313. package/dist/tools/model-eval.d.ts.map +1 -0
  314. package/dist/tools/model-eval.js +307 -0
  315. package/dist/tools/model-eval.js.map +1 -0
  316. package/package.json +105 -0
  317. package/schemas/threat-composer-v1.schema.json +966 -0
  318. package/vendor/atlas-release/ATLAS-2026.07.yaml +17877 -0
  319. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=simple-assessment.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=threat-model-demo.d.ts.map
@@ -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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"}
@@ -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"}