@complior/engine 0.9.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 (594) hide show
  1. package/.well-known/ai-compliance.json +16 -0
  2. package/COMPLIANCE.md +64 -0
  3. package/data/data-integrity.test.ts +75 -0
  4. package/data/eval/eval-mappings.json +33 -0
  5. package/data/llm/model-pricing.json +15 -0
  6. package/data/llm/model-routing.json +36 -0
  7. package/data/onboarding/risk-profile.json +17 -0
  8. package/data/regulations/eu-ai-act/README.md +245 -0
  9. package/data/regulations/eu-ai-act/applicability-tree.json +160 -0
  10. package/data/regulations/eu-ai-act/cross-mapping.json +175 -0
  11. package/data/regulations/eu-ai-act/localization.json +186 -0
  12. package/data/regulations/eu-ai-act/obligations.json +3981 -0
  13. package/data/regulations/eu-ai-act/regulation-meta.json +482 -0
  14. package/data/regulations/eu-ai-act/scoring.json +342 -0
  15. package/data/regulations/eu-ai-act/technical-requirements.json +2590 -0
  16. package/data/regulations/eu-ai-act/timeline.json +160 -0
  17. package/data/regulations/jurisdictions/at.json +15 -0
  18. package/data/regulations/jurisdictions/be.json +15 -0
  19. package/data/regulations/jurisdictions/bg.json +15 -0
  20. package/data/regulations/jurisdictions/cy.json +15 -0
  21. package/data/regulations/jurisdictions/cz.json +15 -0
  22. package/data/regulations/jurisdictions/de.json +15 -0
  23. package/data/regulations/jurisdictions/dk.json +15 -0
  24. package/data/regulations/jurisdictions/ee.json +15 -0
  25. package/data/regulations/jurisdictions/es.json +15 -0
  26. package/data/regulations/jurisdictions/fi.json +15 -0
  27. package/data/regulations/jurisdictions/fr.json +15 -0
  28. package/data/regulations/jurisdictions/gr.json +15 -0
  29. package/data/regulations/jurisdictions/hr.json +15 -0
  30. package/data/regulations/jurisdictions/hu.json +15 -0
  31. package/data/regulations/jurisdictions/ie.json +15 -0
  32. package/data/regulations/jurisdictions/is.json +15 -0
  33. package/data/regulations/jurisdictions/it.json +15 -0
  34. package/data/regulations/jurisdictions/li.json +15 -0
  35. package/data/regulations/jurisdictions/lt.json +15 -0
  36. package/data/regulations/jurisdictions/lu.json +15 -0
  37. package/data/regulations/jurisdictions/lv.json +15 -0
  38. package/data/regulations/jurisdictions/mt.json +15 -0
  39. package/data/regulations/jurisdictions/nl.json +15 -0
  40. package/data/regulations/jurisdictions/no.json +15 -0
  41. package/data/regulations/jurisdictions/pl.json +15 -0
  42. package/data/regulations/jurisdictions/pt.json +15 -0
  43. package/data/regulations/jurisdictions/ro.json +15 -0
  44. package/data/regulations/jurisdictions/se.json +15 -0
  45. package/data/regulations/jurisdictions/si.json +15 -0
  46. package/data/regulations/jurisdictions/sk.json +15 -0
  47. package/data/scanner/check-id-categories.json +81 -0
  48. package/data/scanner/confidence-params.json +16 -0
  49. package/data/scanner/limits.json +4 -0
  50. package/data/schemas/http-contract-sample.json +79 -0
  51. package/data/schemas/http-contract.json +144 -0
  52. package/data/semgrep-rules/bare-call.yaml +37 -0
  53. package/data/semgrep-rules/injection.yaml +73 -0
  54. package/data/semgrep-rules/missing-error-handling.yaml +58 -0
  55. package/data/semgrep-rules/unsafe-deser.yaml +65 -0
  56. package/data/templates/eu-ai-act/ai-literacy.md +184 -0
  57. package/data/templates/eu-ai-act/art5-screening.md +131 -0
  58. package/data/templates/eu-ai-act/data-governance.md +145 -0
  59. package/data/templates/eu-ai-act/declaration-of-conformity.md +161 -0
  60. package/data/templates/eu-ai-act/fria.md +127 -0
  61. package/data/templates/eu-ai-act/gpai-systemic-risk.md +150 -0
  62. package/data/templates/eu-ai-act/gpai-transparency.md +166 -0
  63. package/data/templates/eu-ai-act/incident-report.md +188 -0
  64. package/data/templates/eu-ai-act/instructions-for-use.md +202 -0
  65. package/data/templates/eu-ai-act/monitoring-policy.md +110 -0
  66. package/data/templates/eu-ai-act/qms.md +180 -0
  67. package/data/templates/eu-ai-act/risk-management-system.md +123 -0
  68. package/data/templates/eu-ai-act/technical-documentation.md +287 -0
  69. package/data/templates/eu-ai-act/worker-notification.md +143 -0
  70. package/data/templates/policies/biometrics-ai-policy.md +214 -0
  71. package/data/templates/policies/critical-infra-ai-policy.md +228 -0
  72. package/data/templates/policies/education-ai-policy.md +184 -0
  73. package/data/templates/policies/finance-ai-policy.md +191 -0
  74. package/data/templates/policies/healthcare-ai-policy.md +197 -0
  75. package/data/templates/policies/hr-ai-policy.md +178 -0
  76. package/data/templates/policies/legal-ai-policy.md +189 -0
  77. package/data/templates/policies/migration-ai-policy.md +239 -0
  78. package/engine.log +7 -0
  79. package/package.json +74 -0
  80. package/src/composition-root.ts +791 -0
  81. package/src/data/eval/conformity-tests.test.ts +122 -0
  82. package/src/data/eval/ct-1-transparency.ts +106 -0
  83. package/src/data/eval/ct-10-gpai.ts +25 -0
  84. package/src/data/eval/ct-11-industry.ts +42 -0
  85. package/src/data/eval/ct-2-oversight.ts +41 -0
  86. package/src/data/eval/ct-3-explanation.ts +14 -0
  87. package/src/data/eval/ct-4-bias.ts +83 -0
  88. package/src/data/eval/ct-5-accuracy.ts +41 -0
  89. package/src/data/eval/ct-6-robustness.ts +81 -0
  90. package/src/data/eval/ct-7-prohibited.ts +52 -0
  91. package/src/data/eval/ct-8-logging.ts +68 -0
  92. package/src/data/eval/ct-9-risk-awareness.ts +33 -0
  93. package/src/data/eval/deterministic-evaluator.ts +120 -0
  94. package/src/data/eval/index.ts +55 -0
  95. package/src/data/eval/judge-prompts.ts +146 -0
  96. package/src/data/eval/llm-judged-tests.ts +279 -0
  97. package/src/data/eval/llm-tests.test.ts +83 -0
  98. package/src/data/eval/remediation/ct-1-transparency.ts +91 -0
  99. package/src/data/eval/remediation/ct-10-gpai.ts +94 -0
  100. package/src/data/eval/remediation/ct-11-industry.ts +94 -0
  101. package/src/data/eval/remediation/ct-2-oversight.ts +71 -0
  102. package/src/data/eval/remediation/ct-3-explanation.ts +70 -0
  103. package/src/data/eval/remediation/ct-4-bias.ts +70 -0
  104. package/src/data/eval/remediation/ct-5-accuracy.ts +70 -0
  105. package/src/data/eval/remediation/ct-6-robustness.ts +70 -0
  106. package/src/data/eval/remediation/ct-7-prohibited.ts +94 -0
  107. package/src/data/eval/remediation/ct-8-logging.ts +94 -0
  108. package/src/data/eval/remediation/ct-9-risk-awareness.ts +94 -0
  109. package/src/data/eval/remediation/index.ts +89 -0
  110. package/src/data/eval/remediation/owasp-art5.ts +15 -0
  111. package/src/data/eval/remediation/owasp-llm01.ts +72 -0
  112. package/src/data/eval/remediation/owasp-llm02.ts +72 -0
  113. package/src/data/eval/remediation/owasp-llm03.ts +15 -0
  114. package/src/data/eval/remediation/owasp-llm04.ts +15 -0
  115. package/src/data/eval/remediation/owasp-llm05.ts +15 -0
  116. package/src/data/eval/remediation/owasp-llm06.ts +15 -0
  117. package/src/data/eval/remediation/owasp-llm07.ts +15 -0
  118. package/src/data/eval/remediation/owasp-llm08.ts +15 -0
  119. package/src/data/eval/remediation/owasp-llm09.ts +15 -0
  120. package/src/data/eval/remediation/owasp-llm10.ts +15 -0
  121. package/src/data/eval/remediation/remediation.test.ts +229 -0
  122. package/src/data/eval/remediation/test-mapping.ts +290 -0
  123. package/src/data/eval/security-rubrics.ts +381 -0
  124. package/src/data/finding-explanations.json +453 -0
  125. package/src/data/industry-patterns.ts +161 -0
  126. package/src/data/registry-cards.ts +368 -0
  127. package/src/data/regulation/index.ts +5 -0
  128. package/src/data/regulation/jurisdiction-data.test.ts +73 -0
  129. package/src/data/regulation/jurisdiction-data.ts +65 -0
  130. package/src/data/regulation/regulation-data.ts +19 -0
  131. package/src/data/regulation/regulation-loader.test.ts +107 -0
  132. package/src/data/regulation/regulation-loader.ts +56 -0
  133. package/src/data/scanner-constants.ts +46 -0
  134. package/src/data/schemas/schemas-core.ts +140 -0
  135. package/src/data/schemas/schemas-supplementary.ts +211 -0
  136. package/src/data/schemas/schemas.ts +28 -0
  137. package/src/data/security/attack-probes.test.ts +62 -0
  138. package/src/data/security/attack-probes.ts +496 -0
  139. package/src/data/security/eu-ai-act-security.ts +40 -0
  140. package/src/data/security/index.ts +19 -0
  141. package/src/data/security/mitre-atlas.test.ts +43 -0
  142. package/src/data/security/mitre-atlas.ts +93 -0
  143. package/src/data/security/nist-ai-rmf.ts +43 -0
  144. package/src/data/security/owasp-llm-top10.test.ts +60 -0
  145. package/src/data/security/owasp-llm-top10.ts +138 -0
  146. package/src/data/template-registry.ts +53 -0
  147. package/src/data/tool-versions.json +22 -0
  148. package/src/domain/audit/audit-package.test.ts +152 -0
  149. package/src/domain/audit/audit-package.ts +166 -0
  150. package/src/domain/audit/audit-trail.test.ts +121 -0
  151. package/src/domain/audit/audit-trail.ts +174 -0
  152. package/src/domain/audit/index.ts +8 -0
  153. package/src/domain/audit/permissions-matrix.test.ts +136 -0
  154. package/src/domain/audit/permissions-matrix.ts +121 -0
  155. package/src/domain/certification/adversarial/bias-tests.ts +95 -0
  156. package/src/domain/certification/adversarial/evaluators.ts +304 -0
  157. package/src/domain/certification/adversarial/index.ts +11 -0
  158. package/src/domain/certification/adversarial/prompt-injection.ts +103 -0
  159. package/src/domain/certification/adversarial/safety-boundary.ts +132 -0
  160. package/src/domain/certification/aiuc1-readiness.test.ts +236 -0
  161. package/src/domain/certification/aiuc1-readiness.ts +298 -0
  162. package/src/domain/certification/aiuc1-requirements.ts +235 -0
  163. package/src/domain/certification/index.ts +10 -0
  164. package/src/domain/certification/redteam-runner.test.ts +97 -0
  165. package/src/domain/certification/redteam-runner.ts +205 -0
  166. package/src/domain/certification/test-runner.test.ts +232 -0
  167. package/src/domain/certification/test-runner.ts +289 -0
  168. package/src/domain/cost/cost-estimator.test.ts +187 -0
  169. package/src/domain/cost/cost-estimator.ts +133 -0
  170. package/src/domain/disclaimer.test.ts +52 -0
  171. package/src/domain/disclaimer.ts +39 -0
  172. package/src/domain/documents/ai-enricher.test.ts +120 -0
  173. package/src/domain/documents/ai-enricher.ts +159 -0
  174. package/src/domain/documents/document-generator.test.ts +318 -0
  175. package/src/domain/documents/document-generator.ts +239 -0
  176. package/src/domain/documents/index.ts +9 -0
  177. package/src/domain/documents/passport-helpers.ts +25 -0
  178. package/src/domain/documents/policy-generator.test.ts +252 -0
  179. package/src/domain/documents/policy-generator.ts +94 -0
  180. package/src/domain/documents/worker-notification-generator.test.ts +162 -0
  181. package/src/domain/documents/worker-notification-generator.ts +141 -0
  182. package/src/domain/eval/adapters/adapter-port.ts +94 -0
  183. package/src/domain/eval/adapters/adapters.test.ts +303 -0
  184. package/src/domain/eval/adapters/anthropic-adapter.ts +57 -0
  185. package/src/domain/eval/adapters/auto-detect.ts +104 -0
  186. package/src/domain/eval/adapters/create-chat-adapter.ts +106 -0
  187. package/src/domain/eval/adapters/custom-adapter.ts +74 -0
  188. package/src/domain/eval/adapters/http-adapter.ts +66 -0
  189. package/src/domain/eval/adapters/index.ts +7 -0
  190. package/src/domain/eval/adapters/ollama-adapter.ts +48 -0
  191. package/src/domain/eval/adapters/openai-adapter.ts +58 -0
  192. package/src/domain/eval/adapters/with-timeout.ts +25 -0
  193. package/src/domain/eval/conformity-score.test.ts +161 -0
  194. package/src/domain/eval/conformity-score.ts +135 -0
  195. package/src/domain/eval/eval-constants.ts +55 -0
  196. package/src/domain/eval/eval-evidence.test.ts +85 -0
  197. package/src/domain/eval/eval-evidence.ts +103 -0
  198. package/src/domain/eval/eval-fix-generator.test.ts +421 -0
  199. package/src/domain/eval/eval-fix-generator.ts +205 -0
  200. package/src/domain/eval/eval-passport.test.ts +82 -0
  201. package/src/domain/eval/eval-passport.ts +89 -0
  202. package/src/domain/eval/eval-remediation-report.test.ts +682 -0
  203. package/src/domain/eval/eval-remediation-report.ts +170 -0
  204. package/src/domain/eval/eval-report.ts +108 -0
  205. package/src/domain/eval/eval-runner.test.ts +609 -0
  206. package/src/domain/eval/eval-runner.ts +593 -0
  207. package/src/domain/eval/eval-to-findings.test.ts +293 -0
  208. package/src/domain/eval/eval-to-findings.ts +83 -0
  209. package/src/domain/eval/index.ts +31 -0
  210. package/src/domain/eval/llm-judge.test.ts +139 -0
  211. package/src/domain/eval/llm-judge.ts +168 -0
  212. package/src/domain/eval/remediation-types.ts +90 -0
  213. package/src/domain/eval/security-integration.test.ts +196 -0
  214. package/src/domain/eval/security-integration.ts +136 -0
  215. package/src/domain/eval/types.test.ts +173 -0
  216. package/src/domain/eval/types.ts +244 -0
  217. package/src/domain/eval/verdict-utils.ts +45 -0
  218. package/src/domain/fixer/create-fixer.ts +101 -0
  219. package/src/domain/fixer/diff.ts +70 -0
  220. package/src/domain/fixer/fix-history.ts +23 -0
  221. package/src/domain/fixer/fixer.test.ts +306 -0
  222. package/src/domain/fixer/index.ts +9 -0
  223. package/src/domain/fixer/strategies/bandit-fix.ts +61 -0
  224. package/src/domain/fixer/strategies/bias-testing.ts +49 -0
  225. package/src/domain/fixer/strategies/ci-compliance.ts +57 -0
  226. package/src/domain/fixer/strategies/content-marking.ts +45 -0
  227. package/src/domain/fixer/strategies/cve-upgrade.ts +66 -0
  228. package/src/domain/fixer/strategies/data-governance.ts +65 -0
  229. package/src/domain/fixer/strategies/disclosure.ts +69 -0
  230. package/src/domain/fixer/strategies/doc-code-sync.ts +53 -0
  231. package/src/domain/fixer/strategies/documentation.ts +59 -0
  232. package/src/domain/fixer/strategies/error-handler.ts +63 -0
  233. package/src/domain/fixer/strategies/hitl-gate.ts +67 -0
  234. package/src/domain/fixer/strategies/index.ts +61 -0
  235. package/src/domain/fixer/strategies/kill-switch-test.ts +85 -0
  236. package/src/domain/fixer/strategies/kill-switch.ts +53 -0
  237. package/src/domain/fixer/strategies/license-fix.ts +57 -0
  238. package/src/domain/fixer/strategies/log-retention.ts +40 -0
  239. package/src/domain/fixer/strategies/logging.ts +59 -0
  240. package/src/domain/fixer/strategies/metadata.ts +45 -0
  241. package/src/domain/fixer/strategies/permission-guard.ts +84 -0
  242. package/src/domain/fixer/strategies/record-keeping.ts +69 -0
  243. package/src/domain/fixer/strategies/secret-rotation.ts +52 -0
  244. package/src/domain/fixer/strategies.test.ts +341 -0
  245. package/src/domain/fixer/template-engine.test.ts +64 -0
  246. package/src/domain/fixer/template-engine.ts +38 -0
  247. package/src/domain/fixer/types.ts +88 -0
  248. package/src/domain/frameworks/aiuc1-framework.test.ts +159 -0
  249. package/src/domain/frameworks/aiuc1-framework.ts +126 -0
  250. package/src/domain/frameworks/collect-foundation-metrics.test.ts +96 -0
  251. package/src/domain/frameworks/collect-foundation-metrics.ts +34 -0
  252. package/src/domain/frameworks/eu-ai-act-framework.test.ts +117 -0
  253. package/src/domain/frameworks/eu-ai-act-framework.ts +100 -0
  254. package/src/domain/frameworks/framework-registry.test.ts +91 -0
  255. package/src/domain/frameworks/framework-registry.ts +38 -0
  256. package/src/domain/frameworks/index.ts +8 -0
  257. package/src/domain/frameworks/mitre-atlas-framework.test.ts +53 -0
  258. package/src/domain/frameworks/mitre-atlas-framework.ts +53 -0
  259. package/src/domain/frameworks/owasp-llm-framework.test.ts +77 -0
  260. package/src/domain/frameworks/owasp-llm-framework.ts +54 -0
  261. package/src/domain/frameworks/score-plugin-framework.ts +117 -0
  262. package/src/domain/fria/fria-generator.test.ts +273 -0
  263. package/src/domain/fria/fria-generator.ts +366 -0
  264. package/src/domain/import/promptfoo-importer.test.ts +103 -0
  265. package/src/domain/import/promptfoo-importer.ts +151 -0
  266. package/src/domain/onboarding/guided-onboarding.test.ts +144 -0
  267. package/src/domain/onboarding/guided-onboarding.ts +135 -0
  268. package/src/domain/passport/builder/domain-mapper.ts +9 -0
  269. package/src/domain/passport/builder/manifest-builder.test.ts +546 -0
  270. package/src/domain/passport/builder/manifest-builder.ts +535 -0
  271. package/src/domain/passport/builder/manifest-diff.test.ts +105 -0
  272. package/src/domain/passport/builder/manifest-diff.ts +89 -0
  273. package/src/domain/passport/builder/manifest-files.ts +17 -0
  274. package/src/domain/passport/crypto-signer.test.ts +93 -0
  275. package/src/domain/passport/crypto-signer.ts +157 -0
  276. package/src/domain/passport/discovery/agent-discovery.test.ts +296 -0
  277. package/src/domain/passport/discovery/agent-discovery.ts +325 -0
  278. package/src/domain/passport/discovery/autonomy-analyzer.test.ts +141 -0
  279. package/src/domain/passport/discovery/autonomy-analyzer.ts +113 -0
  280. package/src/domain/passport/discovery/permission-scanner.test.ts +191 -0
  281. package/src/domain/passport/discovery/permission-scanner.ts +414 -0
  282. package/src/domain/passport/export/a2a-mapper.ts +75 -0
  283. package/src/domain/passport/export/aiuc1-mapper.ts +126 -0
  284. package/src/domain/passport/export/export.test.ts +207 -0
  285. package/src/domain/passport/export/index.ts +41 -0
  286. package/src/domain/passport/export/nist-mapper.ts +227 -0
  287. package/src/domain/passport/import/a2a-importer.test.ts +133 -0
  288. package/src/domain/passport/import/a2a-importer.ts +156 -0
  289. package/src/domain/passport/import/index.ts +2 -0
  290. package/src/domain/passport/index.ts +32 -0
  291. package/src/domain/passport/obligation-field-map.test.ts +113 -0
  292. package/src/domain/passport/obligation-field-map.ts +117 -0
  293. package/src/domain/passport/passport-validator.test.ts +156 -0
  294. package/src/domain/passport/passport-validator.ts +126 -0
  295. package/src/domain/passport/scan-to-compliance.test.ts +336 -0
  296. package/src/domain/passport/scan-to-compliance.ts +166 -0
  297. package/src/domain/passport/test-generator.test.ts +93 -0
  298. package/src/domain/passport/test-generator.ts +136 -0
  299. package/src/domain/proxy/index.ts +11 -0
  300. package/src/domain/proxy/json-rpc.test.ts +72 -0
  301. package/src/domain/proxy/json-rpc.ts +53 -0
  302. package/src/domain/proxy/policy-engine.test.ts +259 -0
  303. package/src/domain/proxy/policy-engine.ts +137 -0
  304. package/src/domain/proxy/proxy-bridge.ts +125 -0
  305. package/src/domain/proxy/proxy-interceptor.test.ts +184 -0
  306. package/src/domain/proxy/proxy-interceptor.ts +120 -0
  307. package/src/domain/proxy/proxy-types.ts +35 -0
  308. package/src/domain/registry/compute-agent-score.test.ts +279 -0
  309. package/src/domain/registry/compute-agent-score.ts +162 -0
  310. package/src/domain/reporter/audit-report.test.ts +87 -0
  311. package/src/domain/reporter/audit-report.ts +116 -0
  312. package/src/domain/reporter/badge-generator.test.ts +54 -0
  313. package/src/domain/reporter/badge-generator.ts +40 -0
  314. package/src/domain/reporter/compliance-md.ts +45 -0
  315. package/src/domain/reporter/index.ts +7 -0
  316. package/src/domain/reporter/pdf-renderer.ts +282 -0
  317. package/src/domain/reporter/share.test.ts +92 -0
  318. package/src/domain/reporter/share.ts +80 -0
  319. package/src/domain/scanner/ast/swc-analyzer.test.ts +49 -0
  320. package/src/domain/scanner/ast/swc-analyzer.ts +124 -0
  321. package/src/domain/scanner/attestations.ts +97 -0
  322. package/src/domain/scanner/checks/ai-disclosure.test.ts +90 -0
  323. package/src/domain/scanner/checks/ai-disclosure.ts +54 -0
  324. package/src/domain/scanner/checks/ai-literacy.ts +163 -0
  325. package/src/domain/scanner/checks/behavioral-constraints.test.ts +167 -0
  326. package/src/domain/scanner/checks/behavioral-constraints.ts +86 -0
  327. package/src/domain/scanner/checks/compliance-metadata.ts +63 -0
  328. package/src/domain/scanner/checks/content-marking.ts +74 -0
  329. package/src/domain/scanner/checks/dep-deep-scan.test.ts +318 -0
  330. package/src/domain/scanner/checks/dep-deep-scan.ts +137 -0
  331. package/src/domain/scanner/checks/documentation.test.ts +88 -0
  332. package/src/domain/scanner/checks/documentation.ts +79 -0
  333. package/src/domain/scanner/checks/git-history.test.ts +120 -0
  334. package/src/domain/scanner/checks/git-history.ts +163 -0
  335. package/src/domain/scanner/checks/gpai-systemic-risk.test.ts +84 -0
  336. package/src/domain/scanner/checks/gpai-systemic-risk.ts +98 -0
  337. package/src/domain/scanner/checks/gpai-transparency.ts +94 -0
  338. package/src/domain/scanner/checks/index.ts +28 -0
  339. package/src/domain/scanner/checks/industry/index.ts +40 -0
  340. package/src/domain/scanner/checks/industry/industry.test.ts +287 -0
  341. package/src/domain/scanner/checks/interaction-logging.test.ts +113 -0
  342. package/src/domain/scanner/checks/interaction-logging.ts +142 -0
  343. package/src/domain/scanner/checks/nhi-scanner.test.ts +158 -0
  344. package/src/domain/scanner/checks/nhi-scanner.ts +78 -0
  345. package/src/domain/scanner/checks/passport-completeness.test.ts +127 -0
  346. package/src/domain/scanner/checks/passport-completeness.ts +82 -0
  347. package/src/domain/scanner/checks/passport-presence.test.ts +56 -0
  348. package/src/domain/scanner/checks/passport-presence.ts +78 -0
  349. package/src/domain/scanner/checks/pattern-check-factory.ts +70 -0
  350. package/src/domain/scanner/checks/permission-scanner.test.ts +279 -0
  351. package/src/domain/scanner/checks/permission-scanner.ts +90 -0
  352. package/src/domain/scanner/checks/presence-check-factory.test.ts +124 -0
  353. package/src/domain/scanner/checks/presence-check-factory.ts +275 -0
  354. package/src/domain/scanner/compliance-diff.test.ts +165 -0
  355. package/src/domain/scanner/compliance-diff.ts +138 -0
  356. package/src/domain/scanner/confidence.test.ts +235 -0
  357. package/src/domain/scanner/confidence.ts +156 -0
  358. package/src/domain/scanner/constants.ts +13 -0
  359. package/src/domain/scanner/create-scanner.ts +573 -0
  360. package/src/domain/scanner/cross-layer.test.ts +372 -0
  361. package/src/domain/scanner/cross-layer.ts +232 -0
  362. package/src/domain/scanner/data/ai-packages.ts +82 -0
  363. package/src/domain/scanner/debt-calculator.test.ts +89 -0
  364. package/src/domain/scanner/debt-calculator.ts +111 -0
  365. package/src/domain/scanner/drift.test.ts +191 -0
  366. package/src/domain/scanner/drift.ts +73 -0
  367. package/src/domain/scanner/evidence-store.test.ts +207 -0
  368. package/src/domain/scanner/evidence-store.ts +195 -0
  369. package/src/domain/scanner/evidence.test.ts +104 -0
  370. package/src/domain/scanner/evidence.ts +71 -0
  371. package/src/domain/scanner/external/bandit-runner.test.ts +45 -0
  372. package/src/domain/scanner/external/bandit-runner.ts +90 -0
  373. package/src/domain/scanner/external/checks.ts +321 -0
  374. package/src/domain/scanner/external/dedup.test.ts +79 -0
  375. package/src/domain/scanner/external/dedup.ts +94 -0
  376. package/src/domain/scanner/external/detect-secrets-runner.test.ts +58 -0
  377. package/src/domain/scanner/external/detect-secrets-runner.ts +81 -0
  378. package/src/domain/scanner/external/external-scanner.test.ts +221 -0
  379. package/src/domain/scanner/external/external-scanner.ts +36 -0
  380. package/src/domain/scanner/external/finding-mapper.test.ts +95 -0
  381. package/src/domain/scanner/external/finding-mapper.ts +138 -0
  382. package/src/domain/scanner/external/index.ts +15 -0
  383. package/src/domain/scanner/external/mappings.ts +93 -0
  384. package/src/domain/scanner/external/modelscan-runner.test.ts +35 -0
  385. package/src/domain/scanner/external/modelscan-runner.ts +101 -0
  386. package/src/domain/scanner/external/path-utils.ts +8 -0
  387. package/src/domain/scanner/external/runner-port.ts +45 -0
  388. package/src/domain/scanner/external/semgrep-runner.test.ts +52 -0
  389. package/src/domain/scanner/external/semgrep-runner.ts +94 -0
  390. package/src/domain/scanner/external/types.ts +32 -0
  391. package/src/domain/scanner/finding-attribution.test.ts +444 -0
  392. package/src/domain/scanner/finding-attribution.ts +195 -0
  393. package/src/domain/scanner/finding-explainer.test.ts +157 -0
  394. package/src/domain/scanner/finding-explainer.ts +73 -0
  395. package/src/domain/scanner/fix-diff-builder.test.ts +272 -0
  396. package/src/domain/scanner/fix-diff-builder.ts +477 -0
  397. package/src/domain/scanner/import-graph.test.ts +162 -0
  398. package/src/domain/scanner/import-graph.ts +198 -0
  399. package/src/domain/scanner/languages/adapter.test.ts +105 -0
  400. package/src/domain/scanner/languages/adapter.ts +239 -0
  401. package/src/domain/scanner/layers/index.ts +24 -0
  402. package/src/domain/scanner/layers/layer1-files.ts +54 -0
  403. package/src/domain/scanner/layers/layer2-docs.test.ts +1207 -0
  404. package/src/domain/scanner/layers/layer2-docs.ts +297 -0
  405. package/src/domain/scanner/layers/layer2-parsing.ts +217 -0
  406. package/src/domain/scanner/layers/layer3-config.test.ts +187 -0
  407. package/src/domain/scanner/layers/layer3-config.ts +279 -0
  408. package/src/domain/scanner/layers/layer3-parsers.ts +73 -0
  409. package/src/domain/scanner/layers/layer4-patterns.test.ts +397 -0
  410. package/src/domain/scanner/layers/layer4-patterns.ts +216 -0
  411. package/src/domain/scanner/layers/layer5-docs.test.ts +99 -0
  412. package/src/domain/scanner/layers/layer5-docs.ts +250 -0
  413. package/src/domain/scanner/layers/layer5-llm.test.ts +146 -0
  414. package/src/domain/scanner/layers/layer5-llm.ts +262 -0
  415. package/src/domain/scanner/layers/layer5-targeted.test.ts +93 -0
  416. package/src/domain/scanner/layers/layer5-targeted.ts +233 -0
  417. package/src/domain/scanner/layers/lockfile-parsers.test.ts +320 -0
  418. package/src/domain/scanner/layers/lockfile-parsers.ts +184 -0
  419. package/src/domain/scanner/regulation-version.test.ts +54 -0
  420. package/src/domain/scanner/regulation-version.ts +23 -0
  421. package/src/domain/scanner/role-filter.test.ts +116 -0
  422. package/src/domain/scanner/role-filter.ts +51 -0
  423. package/src/domain/scanner/rules/banned-packages-data.ts +553 -0
  424. package/src/domain/scanner/rules/banned-packages-sdk.ts +65 -0
  425. package/src/domain/scanner/rules/banned-packages.test.ts +249 -0
  426. package/src/domain/scanner/rules/banned-packages.ts +55 -0
  427. package/src/domain/scanner/rules/comment-filter.test.ts +115 -0
  428. package/src/domain/scanner/rules/comment-filter.ts +297 -0
  429. package/src/domain/scanner/rules/index.ts +9 -0
  430. package/src/domain/scanner/rules/nhi-patterns.test.ts +128 -0
  431. package/src/domain/scanner/rules/nhi-patterns.ts +60 -0
  432. package/src/domain/scanner/rules/pattern-rules.ts +1152 -0
  433. package/src/domain/scanner/sbom.test.ts +136 -0
  434. package/src/domain/scanner/sbom.ts +103 -0
  435. package/src/domain/scanner/scan-cache.test.ts +136 -0
  436. package/src/domain/scanner/scan-cache.ts +115 -0
  437. package/src/domain/scanner/scanner.test.ts +125 -0
  438. package/src/domain/scanner/score-calculator.test.ts +363 -0
  439. package/src/domain/scanner/score-calculator.ts +189 -0
  440. package/src/domain/scanner/security-score.test.ts +107 -0
  441. package/src/domain/scanner/security-score.ts +116 -0
  442. package/src/domain/scanner/source-filter.ts +24 -0
  443. package/src/domain/scanner/validators.ts +223 -0
  444. package/src/domain/shared/compliance-constants.ts +48 -0
  445. package/src/domain/shared/disclosure-patterns.ts +16 -0
  446. package/src/domain/shared/index.ts +6 -0
  447. package/src/domain/shared/parse-dependencies.ts +21 -0
  448. package/src/domain/supply-chain/dependency-analyzer.ts +138 -0
  449. package/src/domain/supply-chain/index.ts +3 -0
  450. package/src/domain/supply-chain/supply-chain.test.ts +211 -0
  451. package/src/domain/supply-chain/types.ts +32 -0
  452. package/src/domain/whatif/config-fixer.ts +187 -0
  453. package/src/domain/whatif/index.ts +6 -0
  454. package/src/domain/whatif/scenario-engine.ts +121 -0
  455. package/src/domain/whatif/simulate-actions.test.ts +161 -0
  456. package/src/domain/whatif/simulate-actions.ts +114 -0
  457. package/src/domain/whatif/whatif.test.ts +135 -0
  458. package/src/e2e/gaps-e2e.test.ts +259 -0
  459. package/src/e2e/smoke.test.ts +101 -0
  460. package/src/hooks/hooks-export.test.ts +81 -0
  461. package/src/hooks/installer.ts +113 -0
  462. package/src/http/cors.test.ts +38 -0
  463. package/src/http/create-router.ts +259 -0
  464. package/src/http/routes/agent.route.ts +380 -0
  465. package/src/http/routes/audit.route.ts +66 -0
  466. package/src/http/routes/badge.route.ts +23 -0
  467. package/src/http/routes/cert.route.ts +66 -0
  468. package/src/http/routes/chat.route.ts +228 -0
  469. package/src/http/routes/cost.route.ts +33 -0
  470. package/src/http/routes/debt.route.ts +29 -0
  471. package/src/http/routes/disclaimer.route.ts +64 -0
  472. package/src/http/routes/eval.route.ts +161 -0
  473. package/src/http/routes/events.route.test.ts +108 -0
  474. package/src/http/routes/events.route.ts +71 -0
  475. package/src/http/routes/external-scan.route.ts +24 -0
  476. package/src/http/routes/file.route.ts +54 -0
  477. package/src/http/routes/fix.route.ts +219 -0
  478. package/src/http/routes/frameworks.route.test.ts +66 -0
  479. package/src/http/routes/frameworks.route.ts +36 -0
  480. package/src/http/routes/git.route.ts +27 -0
  481. package/src/http/routes/guided-onboarding.route.ts +65 -0
  482. package/src/http/routes/import.route.ts +64 -0
  483. package/src/http/routes/jurisdiction.route.ts +22 -0
  484. package/src/http/routes/obligations.route.test.ts +122 -0
  485. package/src/http/routes/obligations.route.ts +110 -0
  486. package/src/http/routes/onboarding.route.ts +53 -0
  487. package/src/http/routes/provider.route.ts +42 -0
  488. package/src/http/routes/proxy.route.ts +40 -0
  489. package/src/http/routes/redteam.route.ts +84 -0
  490. package/src/http/routes/report.route.ts +29 -0
  491. package/src/http/routes/scan.route.ts +104 -0
  492. package/src/http/routes/share.route.ts +44 -0
  493. package/src/http/routes/shell.route.ts +27 -0
  494. package/src/http/routes/status.route.ts +66 -0
  495. package/src/http/routes/supply-chain.route.ts +121 -0
  496. package/src/http/routes/sync.route.ts +328 -0
  497. package/src/http/routes/tools.route.ts +29 -0
  498. package/src/http/routes/whatif.route.ts +96 -0
  499. package/src/http/utils/validation.ts +31 -0
  500. package/src/index.ts +1 -0
  501. package/src/infra/bundle-fetcher.ts +77 -0
  502. package/src/infra/cache-storage.ts +34 -0
  503. package/src/infra/event-bus.ts +31 -0
  504. package/src/infra/file-collector.ts +61 -0
  505. package/src/infra/file-ops-adapter.ts +95 -0
  506. package/src/infra/file-watcher.test.ts +90 -0
  507. package/src/infra/file-watcher.ts +106 -0
  508. package/src/infra/git-adapter.ts +93 -0
  509. package/src/infra/git-history-adapter.ts +41 -0
  510. package/src/infra/headless-browser.ts +178 -0
  511. package/src/infra/llm-adapter.test.ts +83 -0
  512. package/src/infra/llm-adapter.ts +86 -0
  513. package/src/infra/logger.ts +27 -0
  514. package/src/infra/project-config.test.ts +74 -0
  515. package/src/infra/project-config.ts +35 -0
  516. package/src/infra/rate-limiter.test.ts +36 -0
  517. package/src/infra/rate-limiter.ts +34 -0
  518. package/src/infra/retry.ts +46 -0
  519. package/src/infra/saas-client.ts +123 -0
  520. package/src/infra/search-adapter.ts +113 -0
  521. package/src/infra/shell-adapter.ts +68 -0
  522. package/src/infra/tool-manager.test.ts +99 -0
  523. package/src/infra/tool-manager.ts +197 -0
  524. package/src/llm/agents/agent-modes.test.ts +44 -0
  525. package/src/llm/agents/modes.ts +68 -0
  526. package/src/llm/routing/cost-routing.test.ts +37 -0
  527. package/src/llm/routing/cost-tracker.ts +74 -0
  528. package/src/llm/routing/model-routing.test.ts +79 -0
  529. package/src/llm/routing/model-routing.ts +38 -0
  530. package/src/llm/routing/pricing.ts +19 -0
  531. package/src/llm/sse-protocol.ts +77 -0
  532. package/src/llm/tool-definitions.ts +83 -0
  533. package/src/llm/tool-executors.ts +80 -0
  534. package/src/llm/tools/types.ts +13 -0
  535. package/src/mcp/create-mcp-stack.ts +82 -0
  536. package/src/mcp/handlers.ts +245 -0
  537. package/src/mcp/index.ts +28 -0
  538. package/src/mcp/mcp-server.test.ts +80 -0
  539. package/src/mcp/server.ts +79 -0
  540. package/src/mcp/tools.ts +48 -0
  541. package/src/onboarding/auto-detect.ts +164 -0
  542. package/src/onboarding/onboarding.test.ts +89 -0
  543. package/src/onboarding/profile.ts +169 -0
  544. package/src/onboarding/questions.ts +112 -0
  545. package/src/onboarding/wizard.ts +66 -0
  546. package/src/output/github-issue.ts +32 -0
  547. package/src/output/json-output.ts +67 -0
  548. package/src/ports/browser.port.ts +23 -0
  549. package/src/ports/events.port.ts +28 -0
  550. package/src/ports/llm.port.ts +23 -0
  551. package/src/ports/logger.port.ts +6 -0
  552. package/src/ports/process.port.ts +6 -0
  553. package/src/ports/scanner.port.ts +15 -0
  554. package/src/server.ts +134 -0
  555. package/src/services/badge-service.ts +67 -0
  556. package/src/services/chat-service.test.ts +162 -0
  557. package/src/services/chat-service.ts +152 -0
  558. package/src/services/cost-service.ts +52 -0
  559. package/src/services/debt-service.ts +65 -0
  560. package/src/services/eval-integration.test.ts +132 -0
  561. package/src/services/eval-service.test.ts +373 -0
  562. package/src/services/eval-service.ts +463 -0
  563. package/src/services/external-scan-service.ts +60 -0
  564. package/src/services/file-service.ts +37 -0
  565. package/src/services/fix-service.test.ts +470 -0
  566. package/src/services/fix-service.ts +648 -0
  567. package/src/services/framework-service.test.ts +159 -0
  568. package/src/services/framework-service.ts +67 -0
  569. package/src/services/onboarding-service.ts +165 -0
  570. package/src/services/passport-audit.ts +244 -0
  571. package/src/services/passport-documents.ts +258 -0
  572. package/src/services/passport-service-utils.ts +72 -0
  573. package/src/services/passport-service.test.ts +251 -0
  574. package/src/services/passport-service.ts +339 -0
  575. package/src/services/proxy-service.ts +81 -0
  576. package/src/services/report-service.ts +72 -0
  577. package/src/services/scan-service.test.ts +470 -0
  578. package/src/services/scan-service.ts +335 -0
  579. package/src/services/share-service.ts +108 -0
  580. package/src/services/shared/backup.ts +23 -0
  581. package/src/services/status-service.ts +38 -0
  582. package/src/services/undo-service.test.ts +190 -0
  583. package/src/services/undo-service.ts +144 -0
  584. package/src/test-helpers/factories.ts +116 -0
  585. package/src/types/common.schemas.ts +147 -0
  586. package/src/types/common.types.ts +292 -0
  587. package/src/types/contract.test.ts +217 -0
  588. package/src/types/errors.ts +52 -0
  589. package/src/types/framework.types.ts +87 -0
  590. package/src/types/passport-schemas.ts +241 -0
  591. package/src/types/passport.types.ts +296 -0
  592. package/src/version.ts +1 -0
  593. package/tsconfig.json +20 -0
  594. package/vitest.config.ts +9 -0
@@ -0,0 +1,16 @@
1
+ {
2
+ "version": "1.0",
3
+ "scanner": "complior/1.0.0",
4
+ "scannedAt": "[SCAN_DATE]",
5
+ "organization": "[TO BE SET]",
6
+ "ai_systems": [
7
+ {
8
+ "name": "[TO BE SET]",
9
+ "provider": "[TO BE SET]",
10
+ "risk_level": "[TO BE SET]",
11
+ "compliance_score": 0
12
+ }
13
+ ],
14
+ "jurisdiction": "EU",
15
+ "regulation": "EU AI Act (Regulation (EU) 2024/1689)"
16
+ }
package/COMPLIANCE.md ADDED
@@ -0,0 +1,64 @@
1
+ # Compliance Report
2
+
3
+ > Generated by Complior v1.0.0 on 2026-03-15T18:52:53.383Z
4
+
5
+ ## Score
6
+
7
+ | Metric | Value |
8
+ |--------|-------|
9
+ | Total Score | **22.18%** |
10
+ | Zone | red |
11
+ | Checks | 93 total, 56 passed, 36 failed |
12
+
13
+ ## Findings Summary
14
+
15
+ | Check ID | Severity | Message |
16
+ |----------|----------|---------|
17
+ | l3-banned-emotion-recognition | critical | Art. 5 REVIEW: "emotion-recognition" detected — Emotion recognition. Prohibited under Art. 5(1)(f) when: Infers emotions in workplace or educational settings, except for medical or safety purposes. Verify: Is this used to detect emotions of employees or students? (Medical/safety use is exempt) |
18
+ | cross-permission-passport-mismatch | critical | 14 undeclared permission(s) with unwrapped LLM calls — compounding governance failure per Art. 26(4) |
19
+ | undeclared-permission | high | Tool 'kb_search' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
20
+ | undeclared-permission | high | Tool 'ticket_history' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
21
+ | undeclared-permission | high | Tool 'kb_search' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
22
+ | undeclared-permission | high | Tool 'ticket_history' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
23
+ | undeclared-permission | high | Tool 'kb_search' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
24
+ | undeclared-permission | high | Tool 'ticket_history' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
25
+ | undeclared-permission | high | Tool 'kb_search' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
26
+ | undeclared-permission | high | Tool 'ticket_history' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
27
+ | undeclared-permission | high | Tool 'kb_search' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
28
+ | undeclared-permission | high | Tool 'ticket_history' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
29
+ | undeclared-permission | high | Tool 'kb_search' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
30
+ | undeclared-permission | high | Tool 'ticket_history' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
31
+ | undeclared-permission | high | Tool 'kb_search' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
32
+ | undeclared-permission | high | Tool 'ticket_history' (langchain) used in code but not declared in Agent Passport — Art. 26(4) |
33
+ | art5-screening | high | No art. 5 screening document found (Art. 5) |
34
+ | technical-documentation | high | No technical documentation found (Art. 11) |
35
+ | declaration-of-conformity | high | No declaration of conformity found (Art. 47) |
36
+ | risk-management | high | No risk management documentation found (Art. 9) |
37
+ | ai-literacy | medium | No AI literacy policy or training documentation found (Art. 4) |
38
+ | incident-report | medium | No incident report template found (Art. 73) |
39
+ | monitoring-policy | medium | No monitoring policy found (Art. 26) |
40
+ | data-governance | medium | No data governance documentation found (Art. 10) |
41
+ | qms | medium | No quality management system found (Art. 17) |
42
+ | instructions-for-use | medium | No instructions for use found (Art. 13) |
43
+ | l4-bare-llm | medium | WARNING: Anthropic bare API call in src/chat/anthropic.ts:8 — eu-ai-act-OBL-015 Art. 50(1) |
44
+ | l4-bare-llm | medium | WARNING: OpenAI bare API call in src/chat/handler.ts:11 — eu-ai-act-OBL-015 Art. 50(1) |
45
+ | l4-security-risk | medium | WARNING: Unsafe eval() with user input in src/screening/hr-filter.ts:16 — eu-ai-act-OBL-008 Art. 15(4) |
46
+ | l4-security-risk | medium | WARNING: Unsafe eval() with user input in src/security/unsafe-eval.ts:11 — eu-ai-act-OBL-008 Art. 15(4) |
47
+ | l4-security-risk | medium | WARNING: Unsafe pickle deserialization in src/security/unsafe-pickle.py:14 — eu-ai-act-OBL-008 Art. 15(4) |
48
+ | cross-banned-with-wrapper | medium | Prohibited package detected but compliance controls (disclosure, oversight, kill-switch) are present. Review whether usage falls under an Art. 5 exception. |
49
+ | cross-logging-no-retention | medium | AI logging implemented in code but no log retention configuration found. Art. 12 requires log retention >= 180 days. |
50
+ | l3-missing-bias-testing | low | AI SDKs detected but no bias testing library found. Consider adding fairlearn, aif360, or aequitas. |
51
+ | l3-log-retention | low | docker-compose.yml: Logging configured but no retention policy found. Ensure >= 180 days retention (Art. 12). |
52
+ | cross-kill-switch-no-test | low | AI kill switch pattern found in code but no automated tests detected for it. Safety mechanisms should be tested. |
53
+
54
+ ## Top Issues
55
+
56
+ 1. **[CRITICAL]** l3-banned-emotion-recognition: Art. 5 REVIEW: "emotion-recognition" detected — Emotion recognition. Prohibited under Art. 5(1)(f) when: Infers emotions in workplace or educational settings, except for medical or safety purposes. Verify: Is this used to detect emotions of employees or students? (Medical/safety use is exempt)
57
+ 2. **[CRITICAL]** cross-permission-passport-mismatch: 14 undeclared permission(s) with unwrapped LLM calls — compounding governance failure per Art. 26(4)
58
+ 3. **[HIGH]** undeclared-permission: Tool 'kb_search' (langchain) used in code but not declared in Agent Passport — Art. 26(4)
59
+ 4. **[HIGH]** undeclared-permission: Tool 'ticket_history' (langchain) used in code but not declared in Agent Passport — Art. 26(4)
60
+ 5. **[HIGH]** undeclared-permission: Tool 'kb_search' (langchain) used in code but not declared in Agent Passport — Art. 26(4)
61
+
62
+ ---
63
+
64
+ ![Compliance Badge](.complior/badge.svg)
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Smoke tests for extracted JSON data files.
3
+ * Validates structure and constraints to catch data corruption early.
4
+ */
5
+ import { describe, it, expect } from 'vitest';
6
+ import limits from './scanner/limits.json' with { type: 'json' };
7
+ import pricing from './llm/model-pricing.json' with { type: 'json' };
8
+ import routing from './llm/model-routing.json' with { type: 'json' };
9
+ import confidence from './scanner/confidence-params.json' with { type: 'json' };
10
+ import checkIds from './scanner/check-id-categories.json' with { type: 'json' };
11
+ import evalMappings from './eval/eval-mappings.json' with { type: 'json' };
12
+ import riskProfile from './onboarding/risk-profile.json' with { type: 'json' };
13
+
14
+ const OBL_ID_RE = /^OBL-\d{3}$/;
15
+
16
+ describe('data integrity', () => {
17
+ it('scanner/limits.json has positive limits', () => {
18
+ expect(limits.max_files).toBeGreaterThan(0);
19
+ expect(limits.max_file_size_bytes).toBeGreaterThan(0);
20
+ });
21
+
22
+ it('llm/model-pricing.json has positive input/output for all models', () => {
23
+ const models = Object.entries(pricing.models);
24
+ expect(models.length).toBeGreaterThanOrEqual(10);
25
+ for (const [name, p] of models) {
26
+ expect(p.input, `${name} input`).toBeGreaterThan(0);
27
+ expect(p.output, `${name} output`).toBeGreaterThan(0);
28
+ }
29
+ });
30
+
31
+ it('llm/model-routing.json covers all task types for every provider', () => {
32
+ const taskTypes = Object.keys(routing.task_reasons);
33
+ expect(taskTypes.length).toBeGreaterThanOrEqual(6);
34
+ for (const [provider, tasks] of Object.entries(routing.model_map)) {
35
+ for (const tt of taskTypes) {
36
+ expect((tasks as Record<string, string>)[tt], `${provider}.${tt}`).toBeTruthy();
37
+ }
38
+ }
39
+ });
40
+
41
+ it('scanner/confidence-params.json has all 5 layers and 5 multipliers', () => {
42
+ expect(Object.keys(confidence.layer_weights)).toEqual(['L1', 'L2', 'L3', 'L4', 'L5']);
43
+ expect(Object.keys(confidence.score_multipliers)).toEqual([
44
+ 'PASS', 'LIKELY_PASS', 'UNCERTAIN', 'LIKELY_FAIL', 'FAIL',
45
+ ]);
46
+ });
47
+
48
+ it('scanner/check-id-categories.json has non-empty mapping', () => {
49
+ const entries = Object.entries(checkIds.mapping);
50
+ expect(entries.length).toBeGreaterThanOrEqual(70);
51
+ for (const [id, cat] of entries) {
52
+ expect(cat, `category for ${id}`).toBeTruthy();
53
+ }
54
+ });
55
+
56
+ it('eval/eval-mappings.json has valid priority/article/fine/timeline entries', () => {
57
+ expect(Object.keys(evalMappings.priority_order)).toEqual(['critical', 'high', 'medium', 'low']);
58
+ expect(Object.keys(evalMappings.category_articles).length).toBeGreaterThanOrEqual(10);
59
+ expect(Object.keys(evalMappings.priority_timeline)).toEqual(['critical', 'high', 'medium', 'low']);
60
+ });
61
+
62
+ it('onboarding/risk-profile.json has valid OBL-IDs', () => {
63
+ for (const id of riskProfile.base_obligations) {
64
+ expect(id, `base ${id}`).toMatch(OBL_ID_RE);
65
+ }
66
+ for (const id of riskProfile.high_risk_extra_obligations) {
67
+ expect(id, `extra ${id}`).toMatch(OBL_ID_RE);
68
+ }
69
+ for (const [domain, ids] of Object.entries(riskProfile.domain_obligations)) {
70
+ for (const id of ids) {
71
+ expect(id, `${domain} ${id}`).toMatch(OBL_ID_RE);
72
+ }
73
+ }
74
+ });
75
+ });
@@ -0,0 +1,33 @@
1
+ {
2
+ "priority_order": {
3
+ "critical": 0,
4
+ "high": 1,
5
+ "medium": 2,
6
+ "low": 3
7
+ },
8
+ "category_articles": {
9
+ "transparency": "Art.50",
10
+ "oversight": "Art.14",
11
+ "explanation": "Art.13",
12
+ "bias": "Art.10",
13
+ "accuracy": "Art.15",
14
+ "robustness": "Art.15",
15
+ "prohibited": "Art.5",
16
+ "logging": "Art.12",
17
+ "risk-awareness": "Art.9",
18
+ "gpai": "Art.52",
19
+ "industry": "Art.6"
20
+ },
21
+ "category_fines": {
22
+ "transparency": "up to 35M EUR",
23
+ "prohibited": "up to 35M EUR or 7% worldwide turnover",
24
+ "bias": "up to 35M EUR",
25
+ "oversight": "up to 15M EUR"
26
+ },
27
+ "priority_timeline": {
28
+ "critical": "this week",
29
+ "high": "next week",
30
+ "medium": "this month",
31
+ "low": "backlog"
32
+ }
33
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "models": {
3
+ "claude-opus-4": { "input": 15.0, "output": 75.0 },
4
+ "claude-sonnet-4": { "input": 3.0, "output": 15.0 },
5
+ "claude-sonnet-4-20250514": { "input": 3.0, "output": 15.0 },
6
+ "claude-haiku-4": { "input": 0.80, "output": 4.0 },
7
+ "gpt-4o": { "input": 2.50, "output": 10.0 },
8
+ "gpt-4o-mini": { "input": 0.15, "output": 0.60 },
9
+ "o1": { "input": 15.0, "output": 60.0 },
10
+ "gemini-2.0-flash": { "input": 0.10, "output": 0.40 },
11
+ "gemini-2.0-pro": { "input": 1.25, "output": 5.0 },
12
+ "mistral-large": { "input": 2.0, "output": 6.0 },
13
+ "mistral-small": { "input": 0.20, "output": 0.60 }
14
+ }
15
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "model_map": {
3
+ "openai": {
4
+ "qa": "gpt-4o-mini",
5
+ "code": "gpt-4o",
6
+ "report": "gpt-4o",
7
+ "classify": "gpt-4o-mini",
8
+ "chat": "gpt-4o",
9
+ "document-generation": "gpt-4o"
10
+ },
11
+ "anthropic": {
12
+ "qa": "claude-haiku-4-5-20251001",
13
+ "code": "claude-sonnet-4-5-20250929",
14
+ "report": "claude-sonnet-4-5-20250929",
15
+ "classify": "claude-haiku-4-5-20251001",
16
+ "chat": "claude-sonnet-4-5-20250929",
17
+ "document-generation": "claude-sonnet-4-5-20250929"
18
+ },
19
+ "openrouter": {
20
+ "qa": "anthropic/claude-haiku-4.5",
21
+ "code": "anthropic/claude-sonnet-4.5",
22
+ "report": "anthropic/claude-sonnet-4.5",
23
+ "classify": "anthropic/claude-haiku-4.5",
24
+ "chat": "anthropic/claude-sonnet-4.5",
25
+ "document-generation": "anthropic/claude-sonnet-4.5"
26
+ }
27
+ },
28
+ "task_reasons": {
29
+ "qa": "Fast, cheap model for simple Q&A",
30
+ "code": "Balanced model for code generation",
31
+ "report": "Powerful model for detailed reports",
32
+ "classify": "Fast model for classification tasks",
33
+ "chat": "Balanced model for interactive chat",
34
+ "document-generation": "Powerful model for detailed document creation"
35
+ }
36
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "high_risk_domains": ["healthcare", "finance", "hr", "education", "law_enforcement", "justice"],
3
+ "domain_obligations": {
4
+ "healthcare": ["OBL-070", "OBL-071", "OBL-072"],
5
+ "finance": ["OBL-073", "OBL-074", "OBL-075", "OBL-076"],
6
+ "hr": ["OBL-064", "OBL-065", "OBL-066"],
7
+ "education": ["OBL-067", "OBL-068", "OBL-069"],
8
+ "content": ["OBL-089", "OBL-090"],
9
+ "customer_service": ["OBL-091"]
10
+ },
11
+ "base_obligations": [
12
+ "OBL-001", "OBL-002", "OBL-003", "OBL-004", "OBL-005",
13
+ "OBL-006", "OBL-007", "OBL-008", "OBL-009", "OBL-010",
14
+ "OBL-011", "OBL-012", "OBL-013", "OBL-014", "OBL-015"
15
+ ],
16
+ "high_risk_extra_obligations": ["OBL-016", "OBL-017", "OBL-018", "OBL-019", "OBL-020"]
17
+ }
@@ -0,0 +1,245 @@
1
+ # EU AI Act Compliance Framework — README
2
+
3
+ > **Version:** 4.0-full-coverage
4
+ > **Дата:** 2026-02-18
5
+ > **Закон:** EU AI Act (Regulation (EU) 2024/1689)
6
+ > **Покрытие:** ~95% actionable obligations
7
+ > **Next review:** 2026-03-01
8
+
9
+ ---
10
+
11
+ ## Что это
12
+
13
+ 11 файлов, 421 KB — полная машиночитаемая база знаний по EU AI Act для платформы Complior.ai.
14
+
15
+ Обработаны: 34 статьи закона, 5 Annexes (II, III, IV, XI, XII), Codes of Practice (по декабрь 2025), Commission Guidelines (февраль 2025). Obligations decomposed по 13 industry domains.
16
+
17
+ Это **data layer**, не документация. Загружается в engine и используется scanner'ом, fixer'ом, scoring engine, onboarding wizard, SEO generator и knowledge loader.
18
+
19
+ ---
20
+
21
+ ## Числа
22
+
23
+ | Метрика | Значение |
24
+ |---------|----------|
25
+ | Obligations (обязательств) | **108** |
26
+ | — critical severity | 37 |
27
+ | — high severity | 57 |
28
+ | — medium severity | 12 |
29
+ | — low severity | 2 |
30
+ | — applies to provider | 48 |
31
+ | — applies to deployer | 17 |
32
+ | — applies to both | 43 |
33
+ | — CLI-checkable (scanner может проверить) | 85 (79%) |
34
+ | — SDK feature needed | 33 (31%) |
35
+ | — document template needed | 40 (37%) |
36
+ | — has what_not_to_do (антипаттерны) | **108 (100%)** |
37
+ | Tech specs for scanner | **89** |
38
+ | — CLI coverage | **85/85 (100%)** |
39
+ | Scoring categories (base) | 8 |
40
+ | Scoring categories (domain) | 13 |
41
+ | Risk levels | 5 |
42
+ | Classification questions | 8 |
43
+ | Roles defined | 8 |
44
+ | Key definitions | 20 |
45
+ | Applicability tree questions | 7 |
46
+ | Cross-regulation mappings | 8 |
47
+ | Timeline events (2024–2030) | 18 |
48
+ | Localization terms × 7 languages | 8 × 7 = 56 |
49
+ | Document templates (audit-ready) | 8 |
50
+ | Marketing assets | 7 |
51
+ | Industry domains covered | **13** |
52
+
53
+ ---
54
+
55
+ ## Структура файлов
56
+
57
+ ```
58
+ complior/engine/data/regulations/eu-ai-act/
59
+
60
+ ├── README.md ← этот файл
61
+
62
+ │ ── ЯДРО (engine загружает при старте) ──
63
+ ├── obligations.json ← 108 обязательств (191 KB)
64
+ ├── technical-requirements.json ← 89 tech specs для scanner (111 KB)
65
+ ├── scoring.json ← алгоритм скоринга (14 KB)
66
+ ├── regulation-meta.json ← метаданные + роли + риски (34 KB)
67
+
68
+ │ ── ВСПОМОГАТЕЛЬНЫЕ ──
69
+ ├── applicability-tree.json ← decision tree Quick Check (9 KB)
70
+ ├── cross-mapping.json ← маппинг на другие законы (8 KB)
71
+ ├── timeline.json ← 18 дедлайнов 2024–2030 (9 KB)
72
+ ├── localization.json ← термины на 7 языках (7 KB)
73
+
74
+ │ ── ДОКУМЕНТЫ И КОНТЕНТ ──
75
+ ├── templates-part1.md ← шаблоны 1–2: AI Literacy + Art. 5 Screening (14 KB)
76
+ ├── templates-part2.md ← шаблоны 3–8: FRIA, Worker, TechDoc, Incident, CE, Monitoring (12 KB)
77
+ └── marketing-content.md ← Quick Check, Penalty Calc, Blog, FAQ, LinkedIn, SEO pages (12 KB)
78
+ ```
79
+
80
+ При переименовании убрать `-v3-production` суффикс.
81
+
82
+ ---
83
+
84
+ ## 13 Industry Domains
85
+
86
+ Каждое domain obligation содержит специфику для отрасли: какие запрещённые практики актуальны, какие bias-тесты нужны, какие смежные законы пересекаются.
87
+
88
+ | # | Domain | Obl | Annex | Ключевая специфика |
89
+ |---|--------|-----|-------|-------------------|
90
+ | 1 | **HR / Employment** | 3 | III.4 | Recruitment bias, workplace emotion recognition PROHIBITED (Art. 5(1)(f)), works council notification (DE/NL/AT), GDPR employee data |
91
+ | 2 | **Finance / Credit / Insurance** | 4 | III.5 | Credit scoring FRIA mandatory (Art. 27), insurance pricing fairness, proxy discrimination, MiFID II intersection |
92
+ | 3 | **Healthcare / Medical** | 3 | II+III | Dual AI Act + MDR conformity, clinical validation, health advice disclaimers, GDPR Art. 9, demographic accuracy |
93
+ | 4 | **Education** | 3 | III.3 | Admissions bias, proctoring emotion recognition PROHIBITED, tutoring minors protection |
94
+ | 5 | **Law Enforcement** | 2 | III.6 | Real-time biometric ID PROHIBITED (Art. 5(1)(h)), predictive policing bias, maximum penalties (€35M) |
95
+ | 6 | **Justice / Legal** | 2 | III.8 | Advisory-only judicial AI, highest explainability, legal practice client disclosure |
96
+ | 7 | **Migration / Border** | 2 | III.7 | Refugee Convention intersection, asylum human review, AFSJ extended deadline (2030) |
97
+ | 8 | **Critical Infrastructure** | 1 | III.2 | Failsafe mechanisms, NIS2 intersection, redundancy, public safety at scale |
98
+ | 9 | **Biometric** | 1 | III.1 | 4 Art. 5 prohibitions, double human verification (Art. 14(5)), GDPR Art. 9 special category |
99
+ | 10 | **Content Generation** | 2 | Art.50 | C2PA machine-readable marking, deepfake visible labeling, watermark robustness |
100
+ | 11 | **Customer Service** | 1 | Art.50 | Chatbot AI disclosure, human escalation option |
101
+ | 12 | **Marketing / Advertising** | 1 | Art.5 | AI manipulation = prohibited (max penalty), user opt-out, DSA intersection |
102
+ | 13 | **Transport / Autonomous** | 1 | II+III | Fail-safe behavior, type-approval dual framework, diverse condition testing |
103
+
104
+ Plus **82 generic (cross-domain) obligations** applying to all AI systems regardless of industry.
105
+
106
+ ---
107
+
108
+ ## Что означает каждый файл
109
+
110
+ ### 1. obligations.json — ЯДРО (191 KB, 108 obligations)
111
+
112
+ Каждое обязательство: 27 полей. Ключевые:
113
+
114
+ - `obligation_id` — уникальный ID (`eu-ai-act-OBL-HR-001`)
115
+ - `applies_to_role` — `deployer` / `provider` / `both`
116
+ - `applies_to_risk_level` — фильтр по уровню риска
117
+ - `what_to_do` — конкретные действия (5–8 пунктов)
118
+ - `what_not_to_do` — антипаттерны (3–5 пунктов)
119
+ - `evidence_required` — что показать аудитору
120
+ - `cli_check_possible` — может ли scanner проверить в коде
121
+ - `severity` — critical / high / medium / low
122
+ - `automation_approach` — как scanner автоматизирует (конкретные файлы и паттерны)
123
+
124
+ ### 2. technical-requirements.json — SCANNER DATA (111 KB, 89 specs)
125
+
126
+ 100% coverage всех CLI-checkable obligations. Каждый spec:
127
+
128
+ - `positive_signals` — паттерны кода = compliance
129
+ - `negative_signals` — паттерны кода = нарушение
130
+ - `warning_message` — сообщение разработчику
131
+ - `fix_suggestion` — как исправить
132
+ - `severity` — error / warning / info
133
+
134
+ ### 3. scoring.json — COMPLIANCE SCORE (14 KB)
135
+
136
+ 8 base categories (always applied) + 13 domain categories (applied when company operates in domain). Critical cap: any critical = 0% → total max 40%. Thresholds: Red 0–49%, Yellow 50–79%, Green 80–100%. Certificate: 85% + all criticals 100%.
137
+
138
+ ### 4. regulation-meta.json — LAW METADATA (34 KB)
139
+
140
+ ID, name, jurisdiction, 6 enforcement dates, penalties, 20 definitions, 8 roles, 5 risk levels, 8 classification questions.
141
+
142
+ ### 5. applicability-tree.json — QUICK CHECK (9 KB)
143
+
144
+ 7 questions: does EU AI Act apply to this company? Results: applies / does-not-apply / partially-applies.
145
+
146
+ ### 6. cross-mapping.json — MULTI-JURISDICTION (8 KB)
147
+
148
+ 8 cross-regulation mappings + strictest_rule_wins_matrix. Framework — fills when new jurisdictions processed.
149
+
150
+ ### 7. timeline.json — DEADLINES (9 KB)
151
+
152
+ 18 dates (2024–2030). Amendments. Codes of Practice. 7 monitoring URLs.
153
+
154
+ ### 8. localization.json — 7 LANGUAGES (7 KB)
155
+
156
+ 8 terms in DE, FR, ES, IT, NL, PT, PL. Cultural notes per market.
157
+
158
+ ### 9–10. templates — 8 AUDIT-READY DOCUMENTS (26 KB)
159
+
160
+ Templates 1–2 (AI Literacy + Art. 5 Screening) **already required since Feb 2025**. Templates 3–8 (FRIA, Worker Notification, Tech Documentation, Incident Report, Declaration, Monitoring Policy) due Aug 2026.
161
+
162
+ ### 11. marketing-content.md — 7 MARKETING ASSETS (12 KB)
163
+
164
+ Quick Check tool, Penalty Calculator, Blog outline, Comparison table, FAQ, LinkedIn post, Programmatic SEO template.
165
+
166
+ ---
167
+
168
+ ## Как файлы связаны
169
+
170
+ ```
171
+ regulation-meta.json
172
+ ├── roles ──────── filter obligations by role
173
+ ├── risk_levels ── filter by risk level
174
+ └── questions ──── onboarding quiz
175
+
176
+
177
+ obligations.json (108)
178
+ ├── cli_check=true ──► technical-requirements.json (89) ──► SCANNER
179
+ ├── sdk_needed=true ──► SDK middleware
180
+ ├── template_needed=true ──► templates-*.md ──► FIXER
181
+ ├── severity + category ──► scoring.json ──► SCORE
182
+ ├── cross_mapping ──► cross-mapping.json ──► STRICTEST RULE WINS
183
+ ├── deadline ──► timeline.json ──► COUNTDOWN
184
+ └── what_to_do + what_not_to_do ──► FINDINGS + FIX ACTIONS
185
+
186
+ applicability-tree.json ──► Quick Check
187
+ localization.json ──► UI labels (7 languages)
188
+ marketing-content.md ──► Website SEO + blog + tools
189
+ ```
190
+
191
+ ---
192
+
193
+ ## Использование по компонентам
194
+
195
+ | Component | Files used | How |
196
+ |-----------|-----------|-----|
197
+ | **Scanner** | obligations.json + technical-requirements.json | Load CLI-checkable obligations → match positive/negative signals → output findings |
198
+ | **Fixer** | obligations.json + templates-*.md | what_to_do actions → generate documents + code fixes |
199
+ | **Score Calculator** | scoring.json + obligations.json | Map results to categories → weighted score → threshold |
200
+ | **Onboarding** | applicability-tree.json + regulation-meta.json | Quick Check → risk classification → role → personalized obligation list |
201
+ | **SEO Generator** | marketing-content.md + obligations.json | Programmatic pages, per-obligation pages, FAQ, comparisons |
202
+ | **Knowledge Loader** | obligations.json + timeline.json + regulation-meta.json | On-demand context for LLM agents |
203
+
204
+ ---
205
+
206
+ ## Добавление новой юрисдикции
207
+
208
+ 1. Use same 12-stage prompt + text of new law
209
+ 2. Receive 11 files → `engine/data/regulations/[jurisdiction-id]/`
210
+ 3. Fill `cross_regulation_mapping` per obligation
211
+ 4. Strictest-rule-wins engine picks stricter requirement automatically
212
+
213
+ | # | Jurisdiction | Status |
214
+ |---|-------------|--------|
215
+ | 1 | EU AI Act | ✅ Done |
216
+ | 2 | Colorado SB 205 | ⏳ Next |
217
+ | 3 | NYC LL 144 | 📋 Planned |
218
+ | 4 | California SB 1001 | 📋 Planned |
219
+ | 5 | WCAG 2.2 AA (EAA) | 📋 Planned |
220
+ | 6 | EU Cyber Resilience Act | 📋 Planned |
221
+
222
+ ---
223
+
224
+ ## Что осталось
225
+
226
+ | Item | Priority |
227
+ |------|----------|
228
+ | Colorado SB 205 processing | P0 |
229
+ | Templates 9–15 (Inventory, Model Card, Copyright, Data Gov, Corrective, Training Summary, Checklist) | P1 |
230
+ | GPAI Code of Practice decomposition | P1 |
231
+ | Commission guidelines on high-risk classification (expected Feb 2026) | P0 |
232
+ | Content marking Code of Practice update | P1 |
233
+ | National authority directory per Member State | P1 |
234
+ | Harmonised standards (CEN/CENELEC, expected 2027) | P2 |
235
+
236
+ ---
237
+
238
+ ## Version history
239
+
240
+ | Version | Date | Obligations | Tech specs | Change |
241
+ |---------|------|------------|-----------|--------|
242
+ | 1.0 | 2026-02-17 | 25 | 6 | Initial framework |
243
+ | 2.0 | 2026-02-17 | 64 | 14 | Sub-decomposition |
244
+ | 3.0 | 2026-02-17 | 69 | 53 | Deployer expansion, 100% CLI coverage, what_not_to_do |
245
+ | **4.0** | **2026-02-18** | **108** | **89** | **13 domains, ~95% law coverage, full production** |