@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,966 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "description": "Threat Composer data exchange format schema for importing/exporting threat modeling data. This schema defines the complete structure for threat modeling sessions including application info, architecture diagrams, data flows, threats, mitigations, and assumptions. Files conforming to this schema should use the .tc.json file extension and can be imported/exported through the Threat Composer application. When generating or validating threat model data, ensure all optional fields are included when available (and additive) to provide comprehensive threat modeling coverage. For more information about Threat Composer and threat modeling best practices, visit: https://github.com/awslabs/threat-composer",
4
+ "type": "object",
5
+ "properties": {
6
+ "schema": {
7
+ "description": "Schema version identifier",
8
+ "type": "number",
9
+ "maximum": 1
10
+ },
11
+ "applicationInfo": {
12
+ "description": "Information about the application being threat modeled",
13
+ "type": "object",
14
+ "properties": {
15
+ "name": {
16
+ "description": "Application name. Plain-text",
17
+ "type": "string",
18
+ "maxLength": 200
19
+ },
20
+ "description": {
21
+ "description": "Markdown detailed description of the application. Start your headers from H3 maximum",
22
+ "type": "string",
23
+ "maxLength": 100000
24
+ }
25
+ },
26
+ "additionalProperties": false
27
+ },
28
+ "architecture": {
29
+ "description": "System architecture information about the application being threat modeled",
30
+ "type": "object",
31
+ "properties": {
32
+ "description": {
33
+ "description": "Markdown detailed description of the application architecture. Start your headers from H3 maximum",
34
+ "type": "string",
35
+ "maxLength": 100000
36
+ },
37
+ "image": {
38
+ "description": "Architecture diagram image. Image URL or base64 encoded image data. Supports image/* MIME types, though browser rendering compatibility varies by format. For URLs: maximum 2048 characters. For base64: maximum 1000000 characters (approximately 750KB for typical images due to base64 encoding overhead). Common formats (PNG/JPG/GIF) are automatically compressed, making original file size limits difficult to specify precisely. The constraint applies to the resulting base64 string length rather than the original file size.",
39
+ "type": "string"
40
+ }
41
+ },
42
+ "additionalProperties": false
43
+ },
44
+ "dataflow": {
45
+ "description": "Data flow information about the application being threat modeled",
46
+ "type": "object",
47
+ "properties": {
48
+ "description": {
49
+ "description": "Markdown detailed description of the application data flows. Start your headers from H3 maximum",
50
+ "type": "string",
51
+ "maxLength": 100000
52
+ },
53
+ "image": {
54
+ "description": "Data-flow diagram image. Image URL or base64 encoded image data. Supports image/* MIME types, though browser rendering compatibility varies by format. For URLs: maximum 2048 characters. For base64: maximum 1000000 characters (approximately 750KB for typical images due to base64 encoding overhead). Common formats (PNG/JPG/GIF) are automatically compressed, making original file size limits difficult to specify precisely. The constraint applies to the resulting base64 string length rather than the original file size.",
55
+ "type": "string"
56
+ }
57
+ },
58
+ "additionalProperties": false
59
+ },
60
+ "assumptions": {
61
+ "description": "Assumptions about the design, threats and migations of the application being threat modeled",
62
+ "type": "array",
63
+ "items": {
64
+ "type": "object",
65
+ "properties": {
66
+ "id": {
67
+ "description": "UUID v4 identifier",
68
+ "type": "string",
69
+ "maxLength": 36
70
+ },
71
+ "numericId": {
72
+ "description": "Numeric identifier for display purposes",
73
+ "type": "number"
74
+ },
75
+ "displayOrder": {
76
+ "description": "Order for displaying threats",
77
+ "type": "number"
78
+ },
79
+ "metadata": {
80
+ "description": "Additional metadata as key-value pairs",
81
+ "type": "array",
82
+ "items": {
83
+ "anyOf": [
84
+ {
85
+ "type": "object",
86
+ "properties": {
87
+ "key": {
88
+ "type": "string",
89
+ "const": "Comments"
90
+ },
91
+ "value": {
92
+ "description": "Comment value",
93
+ "type": "string",
94
+ "maxLength": 1000
95
+ }
96
+ },
97
+ "required": [
98
+ "key",
99
+ "value"
100
+ ],
101
+ "additionalProperties": false
102
+ },
103
+ {
104
+ "type": "object",
105
+ "properties": {
106
+ "key": {
107
+ "type": "string",
108
+ "maxLength": 50,
109
+ "pattern": "^custom:.*"
110
+ },
111
+ "value": {
112
+ "anyOf": [
113
+ {
114
+ "type": "string"
115
+ },
116
+ {
117
+ "type": "array",
118
+ "items": {
119
+ "type": "string"
120
+ }
121
+ }
122
+ ]
123
+ }
124
+ },
125
+ "required": [
126
+ "key",
127
+ "value"
128
+ ],
129
+ "additionalProperties": false
130
+ }
131
+ ]
132
+ }
133
+ },
134
+ "tags": {
135
+ "description": "Categorization tags",
136
+ "type": "array",
137
+ "items": {
138
+ "description": "Tag value",
139
+ "type": "string",
140
+ "minLength": 1,
141
+ "maxLength": 30
142
+ }
143
+ },
144
+ "content": {
145
+ "description": "Assumption. Plain-text",
146
+ "type": "string",
147
+ "maxLength": 1000
148
+ }
149
+ },
150
+ "required": [
151
+ "id",
152
+ "numericId",
153
+ "content"
154
+ ],
155
+ "additionalProperties": false
156
+ }
157
+ },
158
+ "mitigations": {
159
+ "description": "Mitigations for the application being threat modeled",
160
+ "type": "array",
161
+ "items": {
162
+ "type": "object",
163
+ "properties": {
164
+ "id": {
165
+ "description": "UUID v4 identifier",
166
+ "type": "string",
167
+ "maxLength": 36
168
+ },
169
+ "numericId": {
170
+ "description": "Numeric identifier for display purposes",
171
+ "type": "number"
172
+ },
173
+ "displayOrder": {
174
+ "description": "Order for displaying threats",
175
+ "type": "number"
176
+ },
177
+ "metadata": {
178
+ "description": "Additional metadata as key-value pairs for mitigations",
179
+ "type": "array",
180
+ "items": {
181
+ "anyOf": [
182
+ {
183
+ "type": "object",
184
+ "properties": {
185
+ "key": {
186
+ "type": "string",
187
+ "const": "Comments"
188
+ },
189
+ "value": {
190
+ "description": "Comment value",
191
+ "type": "string",
192
+ "maxLength": 1000
193
+ }
194
+ },
195
+ "required": [
196
+ "key",
197
+ "value"
198
+ ],
199
+ "additionalProperties": false
200
+ },
201
+ {
202
+ "type": "object",
203
+ "properties": {
204
+ "key": {
205
+ "type": "string",
206
+ "maxLength": 50,
207
+ "pattern": "^custom:.*"
208
+ },
209
+ "value": {
210
+ "anyOf": [
211
+ {
212
+ "type": "string"
213
+ },
214
+ {
215
+ "type": "array",
216
+ "items": {
217
+ "type": "string"
218
+ }
219
+ }
220
+ ]
221
+ }
222
+ },
223
+ "required": [
224
+ "key",
225
+ "value"
226
+ ],
227
+ "additionalProperties": false
228
+ },
229
+ {
230
+ "type": "object",
231
+ "properties": {
232
+ "key": {
233
+ "type": "string",
234
+ "const": "source"
235
+ },
236
+ "value": {
237
+ "description": "Source type indicating type of pack",
238
+ "type": "string",
239
+ "enum": [
240
+ "mitigationPack"
241
+ ]
242
+ }
243
+ },
244
+ "required": [
245
+ "key",
246
+ "value"
247
+ ],
248
+ "additionalProperties": false
249
+ },
250
+ {
251
+ "type": "object",
252
+ "properties": {
253
+ "key": {
254
+ "type": "string",
255
+ "const": "mitigationPackId"
256
+ },
257
+ "value": {
258
+ "description": "Identifier for the mitigation pack",
259
+ "type": "string",
260
+ "minLength": 1,
261
+ "maxLength": 30
262
+ }
263
+ },
264
+ "required": [
265
+ "key",
266
+ "value"
267
+ ],
268
+ "additionalProperties": false
269
+ },
270
+ {
271
+ "type": "object",
272
+ "properties": {
273
+ "key": {
274
+ "type": "string",
275
+ "const": "mitigationPackMitigationId"
276
+ },
277
+ "value": {
278
+ "description": "UUID v4 identifier for the specific mitigation within the pack",
279
+ "type": "string",
280
+ "maxLength": 36
281
+ }
282
+ },
283
+ "required": [
284
+ "key",
285
+ "value"
286
+ ],
287
+ "additionalProperties": false
288
+ }
289
+ ]
290
+ }
291
+ },
292
+ "tags": {
293
+ "description": "Categorization tags",
294
+ "type": "array",
295
+ "items": {
296
+ "description": "Tag value",
297
+ "type": "string",
298
+ "minLength": 1,
299
+ "maxLength": 30
300
+ }
301
+ },
302
+ "content": {
303
+ "description": "Mitigation. Plain-text",
304
+ "type": "string",
305
+ "maxLength": 1000
306
+ },
307
+ "status": {
308
+ "description": "Status of the mitigation",
309
+ "type": "string",
310
+ "enum": [
311
+ "mitigationIdentified",
312
+ "mitigationInProgress",
313
+ "mitigationResolved",
314
+ "mitigationResolvedWillNotAction"
315
+ ]
316
+ }
317
+ },
318
+ "required": [
319
+ "id",
320
+ "numericId",
321
+ "content"
322
+ ],
323
+ "additionalProperties": false
324
+ }
325
+ },
326
+ "assumptionLinks": {
327
+ "description": "Links between assumptions and threats/mitigations",
328
+ "type": "array",
329
+ "items": {
330
+ "type": "object",
331
+ "properties": {
332
+ "type": {
333
+ "anyOf": [
334
+ {
335
+ "type": "string",
336
+ "const": "Mitigation"
337
+ },
338
+ {
339
+ "type": "string",
340
+ "const": "Threat"
341
+ }
342
+ ]
343
+ },
344
+ "assumptionId": {
345
+ "description": "UUID for the assumption",
346
+ "type": "string",
347
+ "minLength": 36,
348
+ "maxLength": 36
349
+ },
350
+ "linkedId": {
351
+ "description": "UUID of the linked threat or mitigation",
352
+ "type": "string",
353
+ "minLength": 36,
354
+ "maxLength": 36
355
+ }
356
+ },
357
+ "required": [
358
+ "type",
359
+ "assumptionId",
360
+ "linkedId"
361
+ ],
362
+ "additionalProperties": false
363
+ }
364
+ },
365
+ "mitigationLinks": {
366
+ "description": "Links between mitigations and threats",
367
+ "type": "array",
368
+ "items": {
369
+ "type": "object",
370
+ "properties": {
371
+ "mitigationId": {
372
+ "description": "UUID for the mitigation",
373
+ "type": "string",
374
+ "minLength": 36,
375
+ "maxLength": 36
376
+ },
377
+ "linkedId": {
378
+ "description": "UUID of the linked threat or assumption",
379
+ "type": "string",
380
+ "minLength": 36,
381
+ "maxLength": 36
382
+ }
383
+ },
384
+ "required": [
385
+ "mitigationId",
386
+ "linkedId"
387
+ ],
388
+ "additionalProperties": false
389
+ }
390
+ },
391
+ "threats": {
392
+ "description": "Threats for the application being threat modeled",
393
+ "type": "array",
394
+ "items": {
395
+ "type": "object",
396
+ "properties": {
397
+ "id": {
398
+ "description": "UUID v4 identifier",
399
+ "type": "string",
400
+ "maxLength": 36
401
+ },
402
+ "numericId": {
403
+ "description": "Numeric identifier for display purposes",
404
+ "type": "number"
405
+ },
406
+ "displayOrder": {
407
+ "description": "Order for displaying threats",
408
+ "type": "number"
409
+ },
410
+ "metadata": {
411
+ "description": "Additional metadata as key-value pairs for threats",
412
+ "type": "array",
413
+ "items": {
414
+ "anyOf": [
415
+ {
416
+ "type": "object",
417
+ "properties": {
418
+ "key": {
419
+ "type": "string",
420
+ "const": "Comments"
421
+ },
422
+ "value": {
423
+ "description": "Comment value",
424
+ "type": "string",
425
+ "maxLength": 1000
426
+ }
427
+ },
428
+ "required": [
429
+ "key",
430
+ "value"
431
+ ],
432
+ "additionalProperties": false
433
+ },
434
+ {
435
+ "type": "object",
436
+ "properties": {
437
+ "key": {
438
+ "type": "string",
439
+ "maxLength": 50,
440
+ "pattern": "^custom:.*"
441
+ },
442
+ "value": {
443
+ "anyOf": [
444
+ {
445
+ "type": "string"
446
+ },
447
+ {
448
+ "type": "array",
449
+ "items": {
450
+ "type": "string"
451
+ }
452
+ }
453
+ ]
454
+ }
455
+ },
456
+ "required": [
457
+ "key",
458
+ "value"
459
+ ],
460
+ "additionalProperties": false
461
+ },
462
+ {
463
+ "type": "object",
464
+ "properties": {
465
+ "key": {
466
+ "type": "string",
467
+ "const": "source"
468
+ },
469
+ "value": {
470
+ "description": "Source type indicating type of pack",
471
+ "type": "string",
472
+ "enum": [
473
+ "threatPack"
474
+ ]
475
+ }
476
+ },
477
+ "required": [
478
+ "key",
479
+ "value"
480
+ ],
481
+ "additionalProperties": false
482
+ },
483
+ {
484
+ "type": "object",
485
+ "properties": {
486
+ "key": {
487
+ "type": "string",
488
+ "const": "STRIDE"
489
+ },
490
+ "value": {
491
+ "type": "array",
492
+ "items": {
493
+ "type": "string",
494
+ "enum": [
495
+ "S",
496
+ "T",
497
+ "R",
498
+ "I",
499
+ "D",
500
+ "E"
501
+ ]
502
+ }
503
+ }
504
+ },
505
+ "required": [
506
+ "key",
507
+ "value"
508
+ ],
509
+ "additionalProperties": false
510
+ },
511
+ {
512
+ "type": "object",
513
+ "properties": {
514
+ "key": {
515
+ "type": "string",
516
+ "const": "Priority"
517
+ },
518
+ "value": {
519
+ "type": "string",
520
+ "enum": [
521
+ "High",
522
+ "Medium",
523
+ "Low"
524
+ ]
525
+ }
526
+ },
527
+ "required": [
528
+ "key",
529
+ "value"
530
+ ],
531
+ "additionalProperties": false
532
+ },
533
+ {
534
+ "type": "object",
535
+ "properties": {
536
+ "key": {
537
+ "type": "string",
538
+ "const": "threatPackId"
539
+ },
540
+ "value": {
541
+ "description": "Identifier for the threat pack",
542
+ "type": "string",
543
+ "minLength": 1,
544
+ "maxLength": 30
545
+ }
546
+ },
547
+ "required": [
548
+ "key",
549
+ "value"
550
+ ],
551
+ "additionalProperties": false
552
+ },
553
+ {
554
+ "type": "object",
555
+ "properties": {
556
+ "key": {
557
+ "type": "string",
558
+ "const": "threatPackThreatId"
559
+ },
560
+ "value": {
561
+ "description": "UUID v4 identifier for the specific threat within the pack",
562
+ "type": "string",
563
+ "maxLength": 36
564
+ }
565
+ },
566
+ "required": [
567
+ "key",
568
+ "value"
569
+ ],
570
+ "additionalProperties": false
571
+ },
572
+ {
573
+ "type": "object",
574
+ "properties": {
575
+ "key": {
576
+ "type": "string",
577
+ "const": "threatPackMitigationCandidateId"
578
+ },
579
+ "value": {
580
+ "description": "UUID v4 identifier for the mitigation candidate from the threat pack",
581
+ "type": "string",
582
+ "maxLength": 36
583
+ }
584
+ },
585
+ "required": [
586
+ "key",
587
+ "value"
588
+ ],
589
+ "additionalProperties": false
590
+ }
591
+ ]
592
+ }
593
+ },
594
+ "tags": {
595
+ "description": "Categorization tags",
596
+ "type": "array",
597
+ "items": {
598
+ "description": "Tag value",
599
+ "type": "string",
600
+ "minLength": 1,
601
+ "maxLength": 30
602
+ }
603
+ },
604
+ "threatSource": {
605
+ "description": "The entity taking action. For example: An actor (a useful default), An internet-based actor, An internal or external actor.",
606
+ "type": "string",
607
+ "maxLength": 200
608
+ },
609
+ "prerequisites": {
610
+ "description": "Conditions or requirements that must be met for a threat source's action to be viable. For example: -with access to another user's token. -who has administrator access -with user permissions - in a mitm position -with a network path to the API. If no prerequistes known return empty string, if know return but first word must be lower case",
611
+ "type": "string",
612
+ "maxLength": 200
613
+ },
614
+ "threatAction": {
615
+ "description": "The action being performed by the threat source. For example: -spoof another user -tamper with data stored in the database -make thousands of concurrent requests. first word must be lower case",
616
+ "type": "string",
617
+ "maxLength": 200
618
+ },
619
+ "threatImpact": {
620
+ "description": "What impact this has on the system.The direct impact of a successful threat action. For example: - unauthorized access to the user's bank account information -modifying the username for the all-time high score. -a web application being unable to handle other user requests.if know return but first word must be lower case",
621
+ "type": "string",
622
+ "maxLength": 200
623
+ },
624
+ "impactedGoal": {
625
+ "description": "The information security or business objective that is negatively affected. This is most commonly the CIA triad: -confidentiality, -integrity, -availability. If not known return empty string in array, else strings in array first word must be lower case",
626
+ "type": "array",
627
+ "items": {
628
+ "type": "string",
629
+ "maxLength": 200
630
+ }
631
+ },
632
+ "impactedAssets": {
633
+ "description": "List of assets affected by this threat. If not known return empty string in array, else strings in array first word must be lower case",
634
+ "type": "array",
635
+ "items": {
636
+ "type": "string",
637
+ "maxLength": 200
638
+ }
639
+ },
640
+ "statement": {
641
+ "description": "concatenate the above as follows into a one of the following permutations based on if the default is available or not - trim any repated white space into a single white space: 1/ A/an [threat_source] [prerequisites] can [threat_action], 2/ A/an [threat_source] [prerequisites] can [threat_action], which leads to [threat_impact], 3/ A/an [threat_source] [prerequisites] can [threat_action], resulting in reduced [impacted_goal], 4/ A/An [threat_source] [prerequisites] can [threat_action], which leads to [threat_impact], resulting in reduced [impacted_goal], 5/ A/An [threat_source] [prerequisites] can [threat_action], negatively impacting [impacted_assets], 6/ A/An [threat_source] [prerequisites] can [threat_action], which leads to [threat_impact], negatively impacting [impacted_assets], 7/ A/An [threat_source] [prerequisites] can [threat_action], resulting in reduced [impacted_goal] of [impacted_assets], 8/ A/An [threat_source] [prerequisites] can [threat_action], which leads to [threat_impact], resulting in reduced [impacted_goal] of [impacted_assets]",
642
+ "type": "string",
643
+ "maxLength": 1400
644
+ },
645
+ "customTemplate": {
646
+ "description": "Custom template used for threat statement generation. Example: A [threatSource] [prerequisites] can [threatAction]",
647
+ "type": "string",
648
+ "maxLength": 200
649
+ },
650
+ "status": {
651
+ "description": "Status of the threat",
652
+ "type": "string",
653
+ "enum": [
654
+ "threatIdentified",
655
+ "threatResolved",
656
+ "threatResolvedNotUseful"
657
+ ]
658
+ }
659
+ },
660
+ "required": [
661
+ "id",
662
+ "numericId"
663
+ ],
664
+ "additionalProperties": false
665
+ }
666
+ },
667
+ "brainstorm": {
668
+ "description": "Brainstorm data for this threat model. Including: assumptions, mitigitations, threat sources, threat prerequisites, threat actions, threat impacts, impacted goals, and impacted assets",
669
+ "type": "object",
670
+ "properties": {
671
+ "assumptions": {
672
+ "description": "Assumptions about the design, threats and migations of the application being threat modeled",
673
+ "type": "array",
674
+ "items": {
675
+ "type": "object",
676
+ "properties": {
677
+ "id": {
678
+ "description": "UUID v4 identifier",
679
+ "type": "string",
680
+ "maxLength": 36
681
+ },
682
+ "content": {
683
+ "description": "Brainstorm item for assumption. Assumption about the design, threats and migations of the application being threat modeled. Plain-text",
684
+ "type": "string",
685
+ "maxLength": 200
686
+ },
687
+ "createdAt": {
688
+ "description": "ISO 8601 UTC timestamp when the item was created (e.g., \"2024-01-15T14:30:45.123Z\")",
689
+ "type": "string",
690
+ "format": "date-time",
691
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
692
+ },
693
+ "createdBy": {
694
+ "description": "Identifier of who created this item (user email, ID, display name, or \"ai-agent\"). AI agents should use \"ai-agent\" as the default value.",
695
+ "type": "string",
696
+ "maxLength": 50
697
+ },
698
+ "groupId": {
699
+ "description": "UUID v4 identifier of the group this item belongs to. If not provided, item is not grouped.",
700
+ "type": "string",
701
+ "maxLength": 36
702
+ }
703
+ },
704
+ "required": [
705
+ "id",
706
+ "content",
707
+ "createdAt"
708
+ ],
709
+ "additionalProperties": false
710
+ }
711
+ },
712
+ "threatSources": {
713
+ "description": "Brainstormed threat sources for the application being threat modeled",
714
+ "type": "array",
715
+ "items": {
716
+ "type": "object",
717
+ "properties": {
718
+ "id": {
719
+ "description": "UUID v4 identifier",
720
+ "type": "string",
721
+ "maxLength": 36
722
+ },
723
+ "content": {
724
+ "description": "Brainstorm item for threat source. The entity taking action. For example: An actor (a useful default), An internet-based actor, An internal or external actor. Plain-text",
725
+ "type": "string",
726
+ "maxLength": 200
727
+ },
728
+ "createdAt": {
729
+ "description": "ISO 8601 UTC timestamp when the item was created (e.g., \"2024-01-15T14:30:45.123Z\")",
730
+ "type": "string",
731
+ "format": "date-time",
732
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
733
+ },
734
+ "createdBy": {
735
+ "description": "Identifier of who created this item (user email, ID, display name, or \"ai-agent\"). AI agents should use \"ai-agent\" as the default value.",
736
+ "type": "string",
737
+ "maxLength": 50
738
+ },
739
+ "groupId": {
740
+ "description": "UUID v4 identifier of the group this item belongs to. If not provided, item is not grouped.",
741
+ "type": "string",
742
+ "maxLength": 36
743
+ }
744
+ },
745
+ "required": [
746
+ "id",
747
+ "content",
748
+ "createdAt"
749
+ ],
750
+ "additionalProperties": false
751
+ }
752
+ },
753
+ "threatPrerequisites": {
754
+ "description": "Brainstormed prerequisites for threats against the application being threat modeled",
755
+ "type": "array",
756
+ "items": {
757
+ "type": "object",
758
+ "properties": {
759
+ "id": {
760
+ "description": "UUID v4 identifier",
761
+ "type": "string",
762
+ "maxLength": 36
763
+ },
764
+ "content": {
765
+ "description": "Brainstorm item for threat prerequisite. Conditions or requirements that must be met for a threat source's action to be viable. For example: -with access to another user's token. -who has administrator access -with user permissions - in a mitm position -with a network path to the API. If no prerequistes known return empty string, if know return but first word must be lower case. Plain-text",
766
+ "type": "string",
767
+ "maxLength": 200
768
+ },
769
+ "createdAt": {
770
+ "description": "ISO 8601 UTC timestamp when the item was created (e.g., \"2024-01-15T14:30:45.123Z\")",
771
+ "type": "string",
772
+ "format": "date-time",
773
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
774
+ },
775
+ "createdBy": {
776
+ "description": "Identifier of who created this item (user email, ID, display name, or \"ai-agent\"). AI agents should use \"ai-agent\" as the default value.",
777
+ "type": "string",
778
+ "maxLength": 50
779
+ },
780
+ "groupId": {
781
+ "description": "UUID v4 identifier of the group this item belongs to. If not provided, item is not grouped.",
782
+ "type": "string",
783
+ "maxLength": 36
784
+ }
785
+ },
786
+ "required": [
787
+ "id",
788
+ "content",
789
+ "createdAt"
790
+ ],
791
+ "additionalProperties": false
792
+ }
793
+ },
794
+ "threatActions": {
795
+ "description": "Brainstormed threat actions against the application being threat modeled",
796
+ "type": "array",
797
+ "items": {
798
+ "type": "object",
799
+ "properties": {
800
+ "id": {
801
+ "description": "UUID v4 identifier",
802
+ "type": "string",
803
+ "maxLength": 36
804
+ },
805
+ "content": {
806
+ "description": "Brainstorm item for threat action. The action being performed by the threat source. For example: -spoof another user -tamper with data stored in the database -make thousands of concurrent requests. first word must be lower case. Plain-text",
807
+ "type": "string",
808
+ "maxLength": 200
809
+ },
810
+ "createdAt": {
811
+ "description": "ISO 8601 UTC timestamp when the item was created (e.g., \"2024-01-15T14:30:45.123Z\")",
812
+ "type": "string",
813
+ "format": "date-time",
814
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
815
+ },
816
+ "createdBy": {
817
+ "description": "Identifier of who created this item (user email, ID, display name, or \"ai-agent\"). AI agents should use \"ai-agent\" as the default value.",
818
+ "type": "string",
819
+ "maxLength": 50
820
+ },
821
+ "groupId": {
822
+ "description": "UUID v4 identifier of the group this item belongs to. If not provided, item is not grouped.",
823
+ "type": "string",
824
+ "maxLength": 36
825
+ }
826
+ },
827
+ "required": [
828
+ "id",
829
+ "content",
830
+ "createdAt"
831
+ ],
832
+ "additionalProperties": false
833
+ }
834
+ },
835
+ "threatImpacts": {
836
+ "description": "Brainstormed threat impacts for the application being threat modeled",
837
+ "type": "array",
838
+ "items": {
839
+ "type": "object",
840
+ "properties": {
841
+ "id": {
842
+ "description": "UUID v4 identifier",
843
+ "type": "string",
844
+ "maxLength": 36
845
+ },
846
+ "content": {
847
+ "description": "Brainstorm item for threat impact. What impact this has on the system.The direct impact of a successful threat action. For example: - unauthorized access to the user's bank account information -modifying the username for the all-time high score. -a web application being unable to handle other user requests.if know return but first word must be lower case. Plain-text",
848
+ "type": "string",
849
+ "maxLength": 200
850
+ },
851
+ "createdAt": {
852
+ "description": "ISO 8601 UTC timestamp when the item was created (e.g., \"2024-01-15T14:30:45.123Z\")",
853
+ "type": "string",
854
+ "format": "date-time",
855
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
856
+ },
857
+ "createdBy": {
858
+ "description": "Identifier of who created this item (user email, ID, display name, or \"ai-agent\"). AI agents should use \"ai-agent\" as the default value.",
859
+ "type": "string",
860
+ "maxLength": 50
861
+ },
862
+ "groupId": {
863
+ "description": "UUID v4 identifier of the group this item belongs to. If not provided, item is not grouped.",
864
+ "type": "string",
865
+ "maxLength": 36
866
+ }
867
+ },
868
+ "required": [
869
+ "id",
870
+ "content",
871
+ "createdAt"
872
+ ],
873
+ "additionalProperties": false
874
+ }
875
+ },
876
+ "assets": {
877
+ "description": "Brainstormed assets for the application being threat modeled",
878
+ "type": "array",
879
+ "items": {
880
+ "type": "object",
881
+ "properties": {
882
+ "id": {
883
+ "description": "UUID v4 identifier",
884
+ "type": "string",
885
+ "maxLength": 36
886
+ },
887
+ "content": {
888
+ "description": "Brainstorm item for asset. List of assets affected by this threat. If not known return empty string in array, else strings in array first word must be lower case. Plain-text",
889
+ "type": "string",
890
+ "maxLength": 200
891
+ },
892
+ "createdAt": {
893
+ "description": "ISO 8601 UTC timestamp when the item was created (e.g., \"2024-01-15T14:30:45.123Z\")",
894
+ "type": "string",
895
+ "format": "date-time",
896
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
897
+ },
898
+ "createdBy": {
899
+ "description": "Identifier of who created this item (user email, ID, display name, or \"ai-agent\"). AI agents should use \"ai-agent\" as the default value.",
900
+ "type": "string",
901
+ "maxLength": 50
902
+ },
903
+ "groupId": {
904
+ "description": "UUID v4 identifier of the group this item belongs to. If not provided, item is not grouped.",
905
+ "type": "string",
906
+ "maxLength": 36
907
+ }
908
+ },
909
+ "required": [
910
+ "id",
911
+ "content",
912
+ "createdAt"
913
+ ],
914
+ "additionalProperties": false
915
+ }
916
+ },
917
+ "mitigations": {
918
+ "description": "Mitigations for the application being threat modeled",
919
+ "type": "array",
920
+ "items": {
921
+ "type": "object",
922
+ "properties": {
923
+ "id": {
924
+ "description": "UUID v4 identifier",
925
+ "type": "string",
926
+ "maxLength": 36
927
+ },
928
+ "content": {
929
+ "description": "Brainstorm item for mitigation. Mitigation for the application being threat modeled. Plain-text",
930
+ "type": "string",
931
+ "maxLength": 200
932
+ },
933
+ "createdAt": {
934
+ "description": "ISO 8601 UTC timestamp when the item was created (e.g., \"2024-01-15T14:30:45.123Z\")",
935
+ "type": "string",
936
+ "format": "date-time",
937
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
938
+ },
939
+ "createdBy": {
940
+ "description": "Identifier of who created this item (user email, ID, display name, or \"ai-agent\"). AI agents should use \"ai-agent\" as the default value.",
941
+ "type": "string",
942
+ "maxLength": 50
943
+ },
944
+ "groupId": {
945
+ "description": "UUID v4 identifier of the group this item belongs to. If not provided, item is not grouped.",
946
+ "type": "string",
947
+ "maxLength": 36
948
+ }
949
+ },
950
+ "required": [
951
+ "id",
952
+ "content",
953
+ "createdAt"
954
+ ],
955
+ "additionalProperties": false
956
+ }
957
+ }
958
+ },
959
+ "additionalProperties": false
960
+ }
961
+ },
962
+ "required": [
963
+ "schema"
964
+ ],
965
+ "additionalProperties": false
966
+ }