@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.
- package/.well-known/ai-compliance.json +16 -0
- package/COMPLIANCE.md +64 -0
- package/data/data-integrity.test.ts +75 -0
- package/data/eval/eval-mappings.json +33 -0
- package/data/llm/model-pricing.json +15 -0
- package/data/llm/model-routing.json +36 -0
- package/data/onboarding/risk-profile.json +17 -0
- package/data/regulations/eu-ai-act/README.md +245 -0
- package/data/regulations/eu-ai-act/applicability-tree.json +160 -0
- package/data/regulations/eu-ai-act/cross-mapping.json +175 -0
- package/data/regulations/eu-ai-act/localization.json +186 -0
- package/data/regulations/eu-ai-act/obligations.json +3981 -0
- package/data/regulations/eu-ai-act/regulation-meta.json +482 -0
- package/data/regulations/eu-ai-act/scoring.json +342 -0
- package/data/regulations/eu-ai-act/technical-requirements.json +2590 -0
- package/data/regulations/eu-ai-act/timeline.json +160 -0
- package/data/regulations/jurisdictions/at.json +15 -0
- package/data/regulations/jurisdictions/be.json +15 -0
- package/data/regulations/jurisdictions/bg.json +15 -0
- package/data/regulations/jurisdictions/cy.json +15 -0
- package/data/regulations/jurisdictions/cz.json +15 -0
- package/data/regulations/jurisdictions/de.json +15 -0
- package/data/regulations/jurisdictions/dk.json +15 -0
- package/data/regulations/jurisdictions/ee.json +15 -0
- package/data/regulations/jurisdictions/es.json +15 -0
- package/data/regulations/jurisdictions/fi.json +15 -0
- package/data/regulations/jurisdictions/fr.json +15 -0
- package/data/regulations/jurisdictions/gr.json +15 -0
- package/data/regulations/jurisdictions/hr.json +15 -0
- package/data/regulations/jurisdictions/hu.json +15 -0
- package/data/regulations/jurisdictions/ie.json +15 -0
- package/data/regulations/jurisdictions/is.json +15 -0
- package/data/regulations/jurisdictions/it.json +15 -0
- package/data/regulations/jurisdictions/li.json +15 -0
- package/data/regulations/jurisdictions/lt.json +15 -0
- package/data/regulations/jurisdictions/lu.json +15 -0
- package/data/regulations/jurisdictions/lv.json +15 -0
- package/data/regulations/jurisdictions/mt.json +15 -0
- package/data/regulations/jurisdictions/nl.json +15 -0
- package/data/regulations/jurisdictions/no.json +15 -0
- package/data/regulations/jurisdictions/pl.json +15 -0
- package/data/regulations/jurisdictions/pt.json +15 -0
- package/data/regulations/jurisdictions/ro.json +15 -0
- package/data/regulations/jurisdictions/se.json +15 -0
- package/data/regulations/jurisdictions/si.json +15 -0
- package/data/regulations/jurisdictions/sk.json +15 -0
- package/data/scanner/check-id-categories.json +81 -0
- package/data/scanner/confidence-params.json +16 -0
- package/data/scanner/limits.json +4 -0
- package/data/schemas/http-contract-sample.json +79 -0
- package/data/schemas/http-contract.json +144 -0
- package/data/semgrep-rules/bare-call.yaml +37 -0
- package/data/semgrep-rules/injection.yaml +73 -0
- package/data/semgrep-rules/missing-error-handling.yaml +58 -0
- package/data/semgrep-rules/unsafe-deser.yaml +65 -0
- package/data/templates/eu-ai-act/ai-literacy.md +184 -0
- package/data/templates/eu-ai-act/art5-screening.md +131 -0
- package/data/templates/eu-ai-act/data-governance.md +145 -0
- package/data/templates/eu-ai-act/declaration-of-conformity.md +161 -0
- package/data/templates/eu-ai-act/fria.md +127 -0
- package/data/templates/eu-ai-act/gpai-systemic-risk.md +150 -0
- package/data/templates/eu-ai-act/gpai-transparency.md +166 -0
- package/data/templates/eu-ai-act/incident-report.md +188 -0
- package/data/templates/eu-ai-act/instructions-for-use.md +202 -0
- package/data/templates/eu-ai-act/monitoring-policy.md +110 -0
- package/data/templates/eu-ai-act/qms.md +180 -0
- package/data/templates/eu-ai-act/risk-management-system.md +123 -0
- package/data/templates/eu-ai-act/technical-documentation.md +287 -0
- package/data/templates/eu-ai-act/worker-notification.md +143 -0
- package/data/templates/policies/biometrics-ai-policy.md +214 -0
- package/data/templates/policies/critical-infra-ai-policy.md +228 -0
- package/data/templates/policies/education-ai-policy.md +184 -0
- package/data/templates/policies/finance-ai-policy.md +191 -0
- package/data/templates/policies/healthcare-ai-policy.md +197 -0
- package/data/templates/policies/hr-ai-policy.md +178 -0
- package/data/templates/policies/legal-ai-policy.md +189 -0
- package/data/templates/policies/migration-ai-policy.md +239 -0
- package/engine.log +7 -0
- package/package.json +74 -0
- package/src/composition-root.ts +791 -0
- package/src/data/eval/conformity-tests.test.ts +122 -0
- package/src/data/eval/ct-1-transparency.ts +106 -0
- package/src/data/eval/ct-10-gpai.ts +25 -0
- package/src/data/eval/ct-11-industry.ts +42 -0
- package/src/data/eval/ct-2-oversight.ts +41 -0
- package/src/data/eval/ct-3-explanation.ts +14 -0
- package/src/data/eval/ct-4-bias.ts +83 -0
- package/src/data/eval/ct-5-accuracy.ts +41 -0
- package/src/data/eval/ct-6-robustness.ts +81 -0
- package/src/data/eval/ct-7-prohibited.ts +52 -0
- package/src/data/eval/ct-8-logging.ts +68 -0
- package/src/data/eval/ct-9-risk-awareness.ts +33 -0
- package/src/data/eval/deterministic-evaluator.ts +120 -0
- package/src/data/eval/index.ts +55 -0
- package/src/data/eval/judge-prompts.ts +146 -0
- package/src/data/eval/llm-judged-tests.ts +279 -0
- package/src/data/eval/llm-tests.test.ts +83 -0
- package/src/data/eval/remediation/ct-1-transparency.ts +91 -0
- package/src/data/eval/remediation/ct-10-gpai.ts +94 -0
- package/src/data/eval/remediation/ct-11-industry.ts +94 -0
- package/src/data/eval/remediation/ct-2-oversight.ts +71 -0
- package/src/data/eval/remediation/ct-3-explanation.ts +70 -0
- package/src/data/eval/remediation/ct-4-bias.ts +70 -0
- package/src/data/eval/remediation/ct-5-accuracy.ts +70 -0
- package/src/data/eval/remediation/ct-6-robustness.ts +70 -0
- package/src/data/eval/remediation/ct-7-prohibited.ts +94 -0
- package/src/data/eval/remediation/ct-8-logging.ts +94 -0
- package/src/data/eval/remediation/ct-9-risk-awareness.ts +94 -0
- package/src/data/eval/remediation/index.ts +89 -0
- package/src/data/eval/remediation/owasp-art5.ts +15 -0
- package/src/data/eval/remediation/owasp-llm01.ts +72 -0
- package/src/data/eval/remediation/owasp-llm02.ts +72 -0
- package/src/data/eval/remediation/owasp-llm03.ts +15 -0
- package/src/data/eval/remediation/owasp-llm04.ts +15 -0
- package/src/data/eval/remediation/owasp-llm05.ts +15 -0
- package/src/data/eval/remediation/owasp-llm06.ts +15 -0
- package/src/data/eval/remediation/owasp-llm07.ts +15 -0
- package/src/data/eval/remediation/owasp-llm08.ts +15 -0
- package/src/data/eval/remediation/owasp-llm09.ts +15 -0
- package/src/data/eval/remediation/owasp-llm10.ts +15 -0
- package/src/data/eval/remediation/remediation.test.ts +229 -0
- package/src/data/eval/remediation/test-mapping.ts +290 -0
- package/src/data/eval/security-rubrics.ts +381 -0
- package/src/data/finding-explanations.json +453 -0
- package/src/data/industry-patterns.ts +161 -0
- package/src/data/registry-cards.ts +368 -0
- package/src/data/regulation/index.ts +5 -0
- package/src/data/regulation/jurisdiction-data.test.ts +73 -0
- package/src/data/regulation/jurisdiction-data.ts +65 -0
- package/src/data/regulation/regulation-data.ts +19 -0
- package/src/data/regulation/regulation-loader.test.ts +107 -0
- package/src/data/regulation/regulation-loader.ts +56 -0
- package/src/data/scanner-constants.ts +46 -0
- package/src/data/schemas/schemas-core.ts +140 -0
- package/src/data/schemas/schemas-supplementary.ts +211 -0
- package/src/data/schemas/schemas.ts +28 -0
- package/src/data/security/attack-probes.test.ts +62 -0
- package/src/data/security/attack-probes.ts +496 -0
- package/src/data/security/eu-ai-act-security.ts +40 -0
- package/src/data/security/index.ts +19 -0
- package/src/data/security/mitre-atlas.test.ts +43 -0
- package/src/data/security/mitre-atlas.ts +93 -0
- package/src/data/security/nist-ai-rmf.ts +43 -0
- package/src/data/security/owasp-llm-top10.test.ts +60 -0
- package/src/data/security/owasp-llm-top10.ts +138 -0
- package/src/data/template-registry.ts +53 -0
- package/src/data/tool-versions.json +22 -0
- package/src/domain/audit/audit-package.test.ts +152 -0
- package/src/domain/audit/audit-package.ts +166 -0
- package/src/domain/audit/audit-trail.test.ts +121 -0
- package/src/domain/audit/audit-trail.ts +174 -0
- package/src/domain/audit/index.ts +8 -0
- package/src/domain/audit/permissions-matrix.test.ts +136 -0
- package/src/domain/audit/permissions-matrix.ts +121 -0
- package/src/domain/certification/adversarial/bias-tests.ts +95 -0
- package/src/domain/certification/adversarial/evaluators.ts +304 -0
- package/src/domain/certification/adversarial/index.ts +11 -0
- package/src/domain/certification/adversarial/prompt-injection.ts +103 -0
- package/src/domain/certification/adversarial/safety-boundary.ts +132 -0
- package/src/domain/certification/aiuc1-readiness.test.ts +236 -0
- package/src/domain/certification/aiuc1-readiness.ts +298 -0
- package/src/domain/certification/aiuc1-requirements.ts +235 -0
- package/src/domain/certification/index.ts +10 -0
- package/src/domain/certification/redteam-runner.test.ts +97 -0
- package/src/domain/certification/redteam-runner.ts +205 -0
- package/src/domain/certification/test-runner.test.ts +232 -0
- package/src/domain/certification/test-runner.ts +289 -0
- package/src/domain/cost/cost-estimator.test.ts +187 -0
- package/src/domain/cost/cost-estimator.ts +133 -0
- package/src/domain/disclaimer.test.ts +52 -0
- package/src/domain/disclaimer.ts +39 -0
- package/src/domain/documents/ai-enricher.test.ts +120 -0
- package/src/domain/documents/ai-enricher.ts +159 -0
- package/src/domain/documents/document-generator.test.ts +318 -0
- package/src/domain/documents/document-generator.ts +239 -0
- package/src/domain/documents/index.ts +9 -0
- package/src/domain/documents/passport-helpers.ts +25 -0
- package/src/domain/documents/policy-generator.test.ts +252 -0
- package/src/domain/documents/policy-generator.ts +94 -0
- package/src/domain/documents/worker-notification-generator.test.ts +162 -0
- package/src/domain/documents/worker-notification-generator.ts +141 -0
- package/src/domain/eval/adapters/adapter-port.ts +94 -0
- package/src/domain/eval/adapters/adapters.test.ts +303 -0
- package/src/domain/eval/adapters/anthropic-adapter.ts +57 -0
- package/src/domain/eval/adapters/auto-detect.ts +104 -0
- package/src/domain/eval/adapters/create-chat-adapter.ts +106 -0
- package/src/domain/eval/adapters/custom-adapter.ts +74 -0
- package/src/domain/eval/adapters/http-adapter.ts +66 -0
- package/src/domain/eval/adapters/index.ts +7 -0
- package/src/domain/eval/adapters/ollama-adapter.ts +48 -0
- package/src/domain/eval/adapters/openai-adapter.ts +58 -0
- package/src/domain/eval/adapters/with-timeout.ts +25 -0
- package/src/domain/eval/conformity-score.test.ts +161 -0
- package/src/domain/eval/conformity-score.ts +135 -0
- package/src/domain/eval/eval-constants.ts +55 -0
- package/src/domain/eval/eval-evidence.test.ts +85 -0
- package/src/domain/eval/eval-evidence.ts +103 -0
- package/src/domain/eval/eval-fix-generator.test.ts +421 -0
- package/src/domain/eval/eval-fix-generator.ts +205 -0
- package/src/domain/eval/eval-passport.test.ts +82 -0
- package/src/domain/eval/eval-passport.ts +89 -0
- package/src/domain/eval/eval-remediation-report.test.ts +682 -0
- package/src/domain/eval/eval-remediation-report.ts +170 -0
- package/src/domain/eval/eval-report.ts +108 -0
- package/src/domain/eval/eval-runner.test.ts +609 -0
- package/src/domain/eval/eval-runner.ts +593 -0
- package/src/domain/eval/eval-to-findings.test.ts +293 -0
- package/src/domain/eval/eval-to-findings.ts +83 -0
- package/src/domain/eval/index.ts +31 -0
- package/src/domain/eval/llm-judge.test.ts +139 -0
- package/src/domain/eval/llm-judge.ts +168 -0
- package/src/domain/eval/remediation-types.ts +90 -0
- package/src/domain/eval/security-integration.test.ts +196 -0
- package/src/domain/eval/security-integration.ts +136 -0
- package/src/domain/eval/types.test.ts +173 -0
- package/src/domain/eval/types.ts +244 -0
- package/src/domain/eval/verdict-utils.ts +45 -0
- package/src/domain/fixer/create-fixer.ts +101 -0
- package/src/domain/fixer/diff.ts +70 -0
- package/src/domain/fixer/fix-history.ts +23 -0
- package/src/domain/fixer/fixer.test.ts +306 -0
- package/src/domain/fixer/index.ts +9 -0
- package/src/domain/fixer/strategies/bandit-fix.ts +61 -0
- package/src/domain/fixer/strategies/bias-testing.ts +49 -0
- package/src/domain/fixer/strategies/ci-compliance.ts +57 -0
- package/src/domain/fixer/strategies/content-marking.ts +45 -0
- package/src/domain/fixer/strategies/cve-upgrade.ts +66 -0
- package/src/domain/fixer/strategies/data-governance.ts +65 -0
- package/src/domain/fixer/strategies/disclosure.ts +69 -0
- package/src/domain/fixer/strategies/doc-code-sync.ts +53 -0
- package/src/domain/fixer/strategies/documentation.ts +59 -0
- package/src/domain/fixer/strategies/error-handler.ts +63 -0
- package/src/domain/fixer/strategies/hitl-gate.ts +67 -0
- package/src/domain/fixer/strategies/index.ts +61 -0
- package/src/domain/fixer/strategies/kill-switch-test.ts +85 -0
- package/src/domain/fixer/strategies/kill-switch.ts +53 -0
- package/src/domain/fixer/strategies/license-fix.ts +57 -0
- package/src/domain/fixer/strategies/log-retention.ts +40 -0
- package/src/domain/fixer/strategies/logging.ts +59 -0
- package/src/domain/fixer/strategies/metadata.ts +45 -0
- package/src/domain/fixer/strategies/permission-guard.ts +84 -0
- package/src/domain/fixer/strategies/record-keeping.ts +69 -0
- package/src/domain/fixer/strategies/secret-rotation.ts +52 -0
- package/src/domain/fixer/strategies.test.ts +341 -0
- package/src/domain/fixer/template-engine.test.ts +64 -0
- package/src/domain/fixer/template-engine.ts +38 -0
- package/src/domain/fixer/types.ts +88 -0
- package/src/domain/frameworks/aiuc1-framework.test.ts +159 -0
- package/src/domain/frameworks/aiuc1-framework.ts +126 -0
- package/src/domain/frameworks/collect-foundation-metrics.test.ts +96 -0
- package/src/domain/frameworks/collect-foundation-metrics.ts +34 -0
- package/src/domain/frameworks/eu-ai-act-framework.test.ts +117 -0
- package/src/domain/frameworks/eu-ai-act-framework.ts +100 -0
- package/src/domain/frameworks/framework-registry.test.ts +91 -0
- package/src/domain/frameworks/framework-registry.ts +38 -0
- package/src/domain/frameworks/index.ts +8 -0
- package/src/domain/frameworks/mitre-atlas-framework.test.ts +53 -0
- package/src/domain/frameworks/mitre-atlas-framework.ts +53 -0
- package/src/domain/frameworks/owasp-llm-framework.test.ts +77 -0
- package/src/domain/frameworks/owasp-llm-framework.ts +54 -0
- package/src/domain/frameworks/score-plugin-framework.ts +117 -0
- package/src/domain/fria/fria-generator.test.ts +273 -0
- package/src/domain/fria/fria-generator.ts +366 -0
- package/src/domain/import/promptfoo-importer.test.ts +103 -0
- package/src/domain/import/promptfoo-importer.ts +151 -0
- package/src/domain/onboarding/guided-onboarding.test.ts +144 -0
- package/src/domain/onboarding/guided-onboarding.ts +135 -0
- package/src/domain/passport/builder/domain-mapper.ts +9 -0
- package/src/domain/passport/builder/manifest-builder.test.ts +546 -0
- package/src/domain/passport/builder/manifest-builder.ts +535 -0
- package/src/domain/passport/builder/manifest-diff.test.ts +105 -0
- package/src/domain/passport/builder/manifest-diff.ts +89 -0
- package/src/domain/passport/builder/manifest-files.ts +17 -0
- package/src/domain/passport/crypto-signer.test.ts +93 -0
- package/src/domain/passport/crypto-signer.ts +157 -0
- package/src/domain/passport/discovery/agent-discovery.test.ts +296 -0
- package/src/domain/passport/discovery/agent-discovery.ts +325 -0
- package/src/domain/passport/discovery/autonomy-analyzer.test.ts +141 -0
- package/src/domain/passport/discovery/autonomy-analyzer.ts +113 -0
- package/src/domain/passport/discovery/permission-scanner.test.ts +191 -0
- package/src/domain/passport/discovery/permission-scanner.ts +414 -0
- package/src/domain/passport/export/a2a-mapper.ts +75 -0
- package/src/domain/passport/export/aiuc1-mapper.ts +126 -0
- package/src/domain/passport/export/export.test.ts +207 -0
- package/src/domain/passport/export/index.ts +41 -0
- package/src/domain/passport/export/nist-mapper.ts +227 -0
- package/src/domain/passport/import/a2a-importer.test.ts +133 -0
- package/src/domain/passport/import/a2a-importer.ts +156 -0
- package/src/domain/passport/import/index.ts +2 -0
- package/src/domain/passport/index.ts +32 -0
- package/src/domain/passport/obligation-field-map.test.ts +113 -0
- package/src/domain/passport/obligation-field-map.ts +117 -0
- package/src/domain/passport/passport-validator.test.ts +156 -0
- package/src/domain/passport/passport-validator.ts +126 -0
- package/src/domain/passport/scan-to-compliance.test.ts +336 -0
- package/src/domain/passport/scan-to-compliance.ts +166 -0
- package/src/domain/passport/test-generator.test.ts +93 -0
- package/src/domain/passport/test-generator.ts +136 -0
- package/src/domain/proxy/index.ts +11 -0
- package/src/domain/proxy/json-rpc.test.ts +72 -0
- package/src/domain/proxy/json-rpc.ts +53 -0
- package/src/domain/proxy/policy-engine.test.ts +259 -0
- package/src/domain/proxy/policy-engine.ts +137 -0
- package/src/domain/proxy/proxy-bridge.ts +125 -0
- package/src/domain/proxy/proxy-interceptor.test.ts +184 -0
- package/src/domain/proxy/proxy-interceptor.ts +120 -0
- package/src/domain/proxy/proxy-types.ts +35 -0
- package/src/domain/registry/compute-agent-score.test.ts +279 -0
- package/src/domain/registry/compute-agent-score.ts +162 -0
- package/src/domain/reporter/audit-report.test.ts +87 -0
- package/src/domain/reporter/audit-report.ts +116 -0
- package/src/domain/reporter/badge-generator.test.ts +54 -0
- package/src/domain/reporter/badge-generator.ts +40 -0
- package/src/domain/reporter/compliance-md.ts +45 -0
- package/src/domain/reporter/index.ts +7 -0
- package/src/domain/reporter/pdf-renderer.ts +282 -0
- package/src/domain/reporter/share.test.ts +92 -0
- package/src/domain/reporter/share.ts +80 -0
- package/src/domain/scanner/ast/swc-analyzer.test.ts +49 -0
- package/src/domain/scanner/ast/swc-analyzer.ts +124 -0
- package/src/domain/scanner/attestations.ts +97 -0
- package/src/domain/scanner/checks/ai-disclosure.test.ts +90 -0
- package/src/domain/scanner/checks/ai-disclosure.ts +54 -0
- package/src/domain/scanner/checks/ai-literacy.ts +163 -0
- package/src/domain/scanner/checks/behavioral-constraints.test.ts +167 -0
- package/src/domain/scanner/checks/behavioral-constraints.ts +86 -0
- package/src/domain/scanner/checks/compliance-metadata.ts +63 -0
- package/src/domain/scanner/checks/content-marking.ts +74 -0
- package/src/domain/scanner/checks/dep-deep-scan.test.ts +318 -0
- package/src/domain/scanner/checks/dep-deep-scan.ts +137 -0
- package/src/domain/scanner/checks/documentation.test.ts +88 -0
- package/src/domain/scanner/checks/documentation.ts +79 -0
- package/src/domain/scanner/checks/git-history.test.ts +120 -0
- package/src/domain/scanner/checks/git-history.ts +163 -0
- package/src/domain/scanner/checks/gpai-systemic-risk.test.ts +84 -0
- package/src/domain/scanner/checks/gpai-systemic-risk.ts +98 -0
- package/src/domain/scanner/checks/gpai-transparency.ts +94 -0
- package/src/domain/scanner/checks/index.ts +28 -0
- package/src/domain/scanner/checks/industry/index.ts +40 -0
- package/src/domain/scanner/checks/industry/industry.test.ts +287 -0
- package/src/domain/scanner/checks/interaction-logging.test.ts +113 -0
- package/src/domain/scanner/checks/interaction-logging.ts +142 -0
- package/src/domain/scanner/checks/nhi-scanner.test.ts +158 -0
- package/src/domain/scanner/checks/nhi-scanner.ts +78 -0
- package/src/domain/scanner/checks/passport-completeness.test.ts +127 -0
- package/src/domain/scanner/checks/passport-completeness.ts +82 -0
- package/src/domain/scanner/checks/passport-presence.test.ts +56 -0
- package/src/domain/scanner/checks/passport-presence.ts +78 -0
- package/src/domain/scanner/checks/pattern-check-factory.ts +70 -0
- package/src/domain/scanner/checks/permission-scanner.test.ts +279 -0
- package/src/domain/scanner/checks/permission-scanner.ts +90 -0
- package/src/domain/scanner/checks/presence-check-factory.test.ts +124 -0
- package/src/domain/scanner/checks/presence-check-factory.ts +275 -0
- package/src/domain/scanner/compliance-diff.test.ts +165 -0
- package/src/domain/scanner/compliance-diff.ts +138 -0
- package/src/domain/scanner/confidence.test.ts +235 -0
- package/src/domain/scanner/confidence.ts +156 -0
- package/src/domain/scanner/constants.ts +13 -0
- package/src/domain/scanner/create-scanner.ts +573 -0
- package/src/domain/scanner/cross-layer.test.ts +372 -0
- package/src/domain/scanner/cross-layer.ts +232 -0
- package/src/domain/scanner/data/ai-packages.ts +82 -0
- package/src/domain/scanner/debt-calculator.test.ts +89 -0
- package/src/domain/scanner/debt-calculator.ts +111 -0
- package/src/domain/scanner/drift.test.ts +191 -0
- package/src/domain/scanner/drift.ts +73 -0
- package/src/domain/scanner/evidence-store.test.ts +207 -0
- package/src/domain/scanner/evidence-store.ts +195 -0
- package/src/domain/scanner/evidence.test.ts +104 -0
- package/src/domain/scanner/evidence.ts +71 -0
- package/src/domain/scanner/external/bandit-runner.test.ts +45 -0
- package/src/domain/scanner/external/bandit-runner.ts +90 -0
- package/src/domain/scanner/external/checks.ts +321 -0
- package/src/domain/scanner/external/dedup.test.ts +79 -0
- package/src/domain/scanner/external/dedup.ts +94 -0
- package/src/domain/scanner/external/detect-secrets-runner.test.ts +58 -0
- package/src/domain/scanner/external/detect-secrets-runner.ts +81 -0
- package/src/domain/scanner/external/external-scanner.test.ts +221 -0
- package/src/domain/scanner/external/external-scanner.ts +36 -0
- package/src/domain/scanner/external/finding-mapper.test.ts +95 -0
- package/src/domain/scanner/external/finding-mapper.ts +138 -0
- package/src/domain/scanner/external/index.ts +15 -0
- package/src/domain/scanner/external/mappings.ts +93 -0
- package/src/domain/scanner/external/modelscan-runner.test.ts +35 -0
- package/src/domain/scanner/external/modelscan-runner.ts +101 -0
- package/src/domain/scanner/external/path-utils.ts +8 -0
- package/src/domain/scanner/external/runner-port.ts +45 -0
- package/src/domain/scanner/external/semgrep-runner.test.ts +52 -0
- package/src/domain/scanner/external/semgrep-runner.ts +94 -0
- package/src/domain/scanner/external/types.ts +32 -0
- package/src/domain/scanner/finding-attribution.test.ts +444 -0
- package/src/domain/scanner/finding-attribution.ts +195 -0
- package/src/domain/scanner/finding-explainer.test.ts +157 -0
- package/src/domain/scanner/finding-explainer.ts +73 -0
- package/src/domain/scanner/fix-diff-builder.test.ts +272 -0
- package/src/domain/scanner/fix-diff-builder.ts +477 -0
- package/src/domain/scanner/import-graph.test.ts +162 -0
- package/src/domain/scanner/import-graph.ts +198 -0
- package/src/domain/scanner/languages/adapter.test.ts +105 -0
- package/src/domain/scanner/languages/adapter.ts +239 -0
- package/src/domain/scanner/layers/index.ts +24 -0
- package/src/domain/scanner/layers/layer1-files.ts +54 -0
- package/src/domain/scanner/layers/layer2-docs.test.ts +1207 -0
- package/src/domain/scanner/layers/layer2-docs.ts +297 -0
- package/src/domain/scanner/layers/layer2-parsing.ts +217 -0
- package/src/domain/scanner/layers/layer3-config.test.ts +187 -0
- package/src/domain/scanner/layers/layer3-config.ts +279 -0
- package/src/domain/scanner/layers/layer3-parsers.ts +73 -0
- package/src/domain/scanner/layers/layer4-patterns.test.ts +397 -0
- package/src/domain/scanner/layers/layer4-patterns.ts +216 -0
- package/src/domain/scanner/layers/layer5-docs.test.ts +99 -0
- package/src/domain/scanner/layers/layer5-docs.ts +250 -0
- package/src/domain/scanner/layers/layer5-llm.test.ts +146 -0
- package/src/domain/scanner/layers/layer5-llm.ts +262 -0
- package/src/domain/scanner/layers/layer5-targeted.test.ts +93 -0
- package/src/domain/scanner/layers/layer5-targeted.ts +233 -0
- package/src/domain/scanner/layers/lockfile-parsers.test.ts +320 -0
- package/src/domain/scanner/layers/lockfile-parsers.ts +184 -0
- package/src/domain/scanner/regulation-version.test.ts +54 -0
- package/src/domain/scanner/regulation-version.ts +23 -0
- package/src/domain/scanner/role-filter.test.ts +116 -0
- package/src/domain/scanner/role-filter.ts +51 -0
- package/src/domain/scanner/rules/banned-packages-data.ts +553 -0
- package/src/domain/scanner/rules/banned-packages-sdk.ts +65 -0
- package/src/domain/scanner/rules/banned-packages.test.ts +249 -0
- package/src/domain/scanner/rules/banned-packages.ts +55 -0
- package/src/domain/scanner/rules/comment-filter.test.ts +115 -0
- package/src/domain/scanner/rules/comment-filter.ts +297 -0
- package/src/domain/scanner/rules/index.ts +9 -0
- package/src/domain/scanner/rules/nhi-patterns.test.ts +128 -0
- package/src/domain/scanner/rules/nhi-patterns.ts +60 -0
- package/src/domain/scanner/rules/pattern-rules.ts +1152 -0
- package/src/domain/scanner/sbom.test.ts +136 -0
- package/src/domain/scanner/sbom.ts +103 -0
- package/src/domain/scanner/scan-cache.test.ts +136 -0
- package/src/domain/scanner/scan-cache.ts +115 -0
- package/src/domain/scanner/scanner.test.ts +125 -0
- package/src/domain/scanner/score-calculator.test.ts +363 -0
- package/src/domain/scanner/score-calculator.ts +189 -0
- package/src/domain/scanner/security-score.test.ts +107 -0
- package/src/domain/scanner/security-score.ts +116 -0
- package/src/domain/scanner/source-filter.ts +24 -0
- package/src/domain/scanner/validators.ts +223 -0
- package/src/domain/shared/compliance-constants.ts +48 -0
- package/src/domain/shared/disclosure-patterns.ts +16 -0
- package/src/domain/shared/index.ts +6 -0
- package/src/domain/shared/parse-dependencies.ts +21 -0
- package/src/domain/supply-chain/dependency-analyzer.ts +138 -0
- package/src/domain/supply-chain/index.ts +3 -0
- package/src/domain/supply-chain/supply-chain.test.ts +211 -0
- package/src/domain/supply-chain/types.ts +32 -0
- package/src/domain/whatif/config-fixer.ts +187 -0
- package/src/domain/whatif/index.ts +6 -0
- package/src/domain/whatif/scenario-engine.ts +121 -0
- package/src/domain/whatif/simulate-actions.test.ts +161 -0
- package/src/domain/whatif/simulate-actions.ts +114 -0
- package/src/domain/whatif/whatif.test.ts +135 -0
- package/src/e2e/gaps-e2e.test.ts +259 -0
- package/src/e2e/smoke.test.ts +101 -0
- package/src/hooks/hooks-export.test.ts +81 -0
- package/src/hooks/installer.ts +113 -0
- package/src/http/cors.test.ts +38 -0
- package/src/http/create-router.ts +259 -0
- package/src/http/routes/agent.route.ts +380 -0
- package/src/http/routes/audit.route.ts +66 -0
- package/src/http/routes/badge.route.ts +23 -0
- package/src/http/routes/cert.route.ts +66 -0
- package/src/http/routes/chat.route.ts +228 -0
- package/src/http/routes/cost.route.ts +33 -0
- package/src/http/routes/debt.route.ts +29 -0
- package/src/http/routes/disclaimer.route.ts +64 -0
- package/src/http/routes/eval.route.ts +161 -0
- package/src/http/routes/events.route.test.ts +108 -0
- package/src/http/routes/events.route.ts +71 -0
- package/src/http/routes/external-scan.route.ts +24 -0
- package/src/http/routes/file.route.ts +54 -0
- package/src/http/routes/fix.route.ts +219 -0
- package/src/http/routes/frameworks.route.test.ts +66 -0
- package/src/http/routes/frameworks.route.ts +36 -0
- package/src/http/routes/git.route.ts +27 -0
- package/src/http/routes/guided-onboarding.route.ts +65 -0
- package/src/http/routes/import.route.ts +64 -0
- package/src/http/routes/jurisdiction.route.ts +22 -0
- package/src/http/routes/obligations.route.test.ts +122 -0
- package/src/http/routes/obligations.route.ts +110 -0
- package/src/http/routes/onboarding.route.ts +53 -0
- package/src/http/routes/provider.route.ts +42 -0
- package/src/http/routes/proxy.route.ts +40 -0
- package/src/http/routes/redteam.route.ts +84 -0
- package/src/http/routes/report.route.ts +29 -0
- package/src/http/routes/scan.route.ts +104 -0
- package/src/http/routes/share.route.ts +44 -0
- package/src/http/routes/shell.route.ts +27 -0
- package/src/http/routes/status.route.ts +66 -0
- package/src/http/routes/supply-chain.route.ts +121 -0
- package/src/http/routes/sync.route.ts +328 -0
- package/src/http/routes/tools.route.ts +29 -0
- package/src/http/routes/whatif.route.ts +96 -0
- package/src/http/utils/validation.ts +31 -0
- package/src/index.ts +1 -0
- package/src/infra/bundle-fetcher.ts +77 -0
- package/src/infra/cache-storage.ts +34 -0
- package/src/infra/event-bus.ts +31 -0
- package/src/infra/file-collector.ts +61 -0
- package/src/infra/file-ops-adapter.ts +95 -0
- package/src/infra/file-watcher.test.ts +90 -0
- package/src/infra/file-watcher.ts +106 -0
- package/src/infra/git-adapter.ts +93 -0
- package/src/infra/git-history-adapter.ts +41 -0
- package/src/infra/headless-browser.ts +178 -0
- package/src/infra/llm-adapter.test.ts +83 -0
- package/src/infra/llm-adapter.ts +86 -0
- package/src/infra/logger.ts +27 -0
- package/src/infra/project-config.test.ts +74 -0
- package/src/infra/project-config.ts +35 -0
- package/src/infra/rate-limiter.test.ts +36 -0
- package/src/infra/rate-limiter.ts +34 -0
- package/src/infra/retry.ts +46 -0
- package/src/infra/saas-client.ts +123 -0
- package/src/infra/search-adapter.ts +113 -0
- package/src/infra/shell-adapter.ts +68 -0
- package/src/infra/tool-manager.test.ts +99 -0
- package/src/infra/tool-manager.ts +197 -0
- package/src/llm/agents/agent-modes.test.ts +44 -0
- package/src/llm/agents/modes.ts +68 -0
- package/src/llm/routing/cost-routing.test.ts +37 -0
- package/src/llm/routing/cost-tracker.ts +74 -0
- package/src/llm/routing/model-routing.test.ts +79 -0
- package/src/llm/routing/model-routing.ts +38 -0
- package/src/llm/routing/pricing.ts +19 -0
- package/src/llm/sse-protocol.ts +77 -0
- package/src/llm/tool-definitions.ts +83 -0
- package/src/llm/tool-executors.ts +80 -0
- package/src/llm/tools/types.ts +13 -0
- package/src/mcp/create-mcp-stack.ts +82 -0
- package/src/mcp/handlers.ts +245 -0
- package/src/mcp/index.ts +28 -0
- package/src/mcp/mcp-server.test.ts +80 -0
- package/src/mcp/server.ts +79 -0
- package/src/mcp/tools.ts +48 -0
- package/src/onboarding/auto-detect.ts +164 -0
- package/src/onboarding/onboarding.test.ts +89 -0
- package/src/onboarding/profile.ts +169 -0
- package/src/onboarding/questions.ts +112 -0
- package/src/onboarding/wizard.ts +66 -0
- package/src/output/github-issue.ts +32 -0
- package/src/output/json-output.ts +67 -0
- package/src/ports/browser.port.ts +23 -0
- package/src/ports/events.port.ts +28 -0
- package/src/ports/llm.port.ts +23 -0
- package/src/ports/logger.port.ts +6 -0
- package/src/ports/process.port.ts +6 -0
- package/src/ports/scanner.port.ts +15 -0
- package/src/server.ts +134 -0
- package/src/services/badge-service.ts +67 -0
- package/src/services/chat-service.test.ts +162 -0
- package/src/services/chat-service.ts +152 -0
- package/src/services/cost-service.ts +52 -0
- package/src/services/debt-service.ts +65 -0
- package/src/services/eval-integration.test.ts +132 -0
- package/src/services/eval-service.test.ts +373 -0
- package/src/services/eval-service.ts +463 -0
- package/src/services/external-scan-service.ts +60 -0
- package/src/services/file-service.ts +37 -0
- package/src/services/fix-service.test.ts +470 -0
- package/src/services/fix-service.ts +648 -0
- package/src/services/framework-service.test.ts +159 -0
- package/src/services/framework-service.ts +67 -0
- package/src/services/onboarding-service.ts +165 -0
- package/src/services/passport-audit.ts +244 -0
- package/src/services/passport-documents.ts +258 -0
- package/src/services/passport-service-utils.ts +72 -0
- package/src/services/passport-service.test.ts +251 -0
- package/src/services/passport-service.ts +339 -0
- package/src/services/proxy-service.ts +81 -0
- package/src/services/report-service.ts +72 -0
- package/src/services/scan-service.test.ts +470 -0
- package/src/services/scan-service.ts +335 -0
- package/src/services/share-service.ts +108 -0
- package/src/services/shared/backup.ts +23 -0
- package/src/services/status-service.ts +38 -0
- package/src/services/undo-service.test.ts +190 -0
- package/src/services/undo-service.ts +144 -0
- package/src/test-helpers/factories.ts +116 -0
- package/src/types/common.schemas.ts +147 -0
- package/src/types/common.types.ts +292 -0
- package/src/types/contract.test.ts +217 -0
- package/src/types/errors.ts +52 -0
- package/src/types/framework.types.ts +87 -0
- package/src/types/passport-schemas.ts +241 -0
- package/src/types/passport.types.ts +296 -0
- package/src/version.ts +1 -0
- package/tsconfig.json +20 -0
- package/vitest.config.ts +9 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Role, Finding } from '../../types/common.types.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Static mapping: checkId → required role.
|
|
5
|
+
* Checks NOT listed here apply to 'both' (all roles).
|
|
6
|
+
*/
|
|
7
|
+
const CHECK_ROLE: ReadonlyMap<string, Role> = new Map([
|
|
8
|
+
// Provider-only (org builds AI system)
|
|
9
|
+
['qms', 'provider'],
|
|
10
|
+
['gpai-transparency', 'provider'],
|
|
11
|
+
['gpai-systemic-risk', 'provider'],
|
|
12
|
+
['l3-missing-bias-testing', 'provider'],
|
|
13
|
+
['l4-data-governance', 'provider'],
|
|
14
|
+
['l4-content-marking', 'provider'],
|
|
15
|
+
['l4-gpai-transparency', 'provider'],
|
|
16
|
+
['l4-conformity-assessment', 'provider'],
|
|
17
|
+
['content-marking', 'provider'],
|
|
18
|
+
|
|
19
|
+
// Deployer-only (org uses AI system)
|
|
20
|
+
['monitoring-policy', 'deployer'],
|
|
21
|
+
['worker-notification', 'deployer'],
|
|
22
|
+
['incident-report', 'deployer'],
|
|
23
|
+
['fria', 'deployer'],
|
|
24
|
+
['l4-deployer-monitoring', 'deployer'],
|
|
25
|
+
['l4-record-keeping', 'deployer'],
|
|
26
|
+
]);
|
|
27
|
+
|
|
28
|
+
/** Get the required role for a check. Unlisted checks → 'both'. */
|
|
29
|
+
export const getCheckRole = (checkId: string): Role =>
|
|
30
|
+
CHECK_ROLE.get(checkId) ?? 'both';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Filter findings by project role.
|
|
34
|
+
* Findings for an inapplicable role become type: 'skip' (visible but not scored).
|
|
35
|
+
* If projectRole is 'both', all findings pass through unchanged.
|
|
36
|
+
*/
|
|
37
|
+
export const filterFindingsByRole = (
|
|
38
|
+
findings: readonly Finding[],
|
|
39
|
+
projectRole: Role,
|
|
40
|
+
): readonly Finding[] => {
|
|
41
|
+
if (projectRole === 'both') return findings;
|
|
42
|
+
return findings.map(f => {
|
|
43
|
+
const role = getCheckRole(f.checkId);
|
|
44
|
+
if (role === 'both' || role === projectRole) return f;
|
|
45
|
+
return {
|
|
46
|
+
...f,
|
|
47
|
+
type: 'skip' as const,
|
|
48
|
+
message: `Skipped: ${role}-only check (project role: ${projectRole})`,
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
};
|
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
export interface BannedPackage {
|
|
2
|
+
readonly name: string;
|
|
3
|
+
readonly ecosystem: 'npm' | 'pip' | 'cargo' | 'go' | 'any';
|
|
4
|
+
readonly reason: string;
|
|
5
|
+
readonly obligationId: string;
|
|
6
|
+
readonly article: string;
|
|
7
|
+
readonly penalty: string;
|
|
8
|
+
readonly prohibitedWhen: string;
|
|
9
|
+
readonly verifyMessage: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const BANNED_PACKAGES: readonly BannedPackage[] = [
|
|
13
|
+
// --- Art. 5(1)(a): Subliminal/manipulative/deceptive techniques ---
|
|
14
|
+
{
|
|
15
|
+
name: 'subliminal-ai',
|
|
16
|
+
ecosystem: 'any',
|
|
17
|
+
reason: 'Subliminal manipulation',
|
|
18
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
19
|
+
article: 'Art. 5(1)(a)',
|
|
20
|
+
penalty: '€35M or 7% turnover',
|
|
21
|
+
prohibitedWhen: 'Used as subliminal or manipulative technique to distort behavior beyond person\'s awareness, causing significant harm',
|
|
22
|
+
verifyMessage: 'Does this influence user decisions through techniques they are not aware of?',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: 'dark-patterns',
|
|
26
|
+
ecosystem: 'npm',
|
|
27
|
+
reason: 'Deceptive design patterns',
|
|
28
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
29
|
+
article: 'Art. 5(1)(a)',
|
|
30
|
+
penalty: '€35M or 7% turnover',
|
|
31
|
+
prohibitedWhen: 'Used as subliminal or manipulative technique to distort behavior beyond person\'s awareness, causing significant harm',
|
|
32
|
+
verifyMessage: 'Does this influence user decisions through techniques they are not aware of?',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'deceptive-design',
|
|
36
|
+
ecosystem: 'npm',
|
|
37
|
+
reason: 'Deceptive design toolkit',
|
|
38
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
39
|
+
article: 'Art. 5(1)(a)',
|
|
40
|
+
penalty: '€35M or 7% turnover',
|
|
41
|
+
prohibitedWhen: 'Used as subliminal or manipulative technique to distort behavior beyond person\'s awareness, causing significant harm',
|
|
42
|
+
verifyMessage: 'Does this influence user decisions through techniques they are not aware of?',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'nudge-ai',
|
|
46
|
+
ecosystem: 'any',
|
|
47
|
+
reason: 'AI-based behavioral nudging',
|
|
48
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
49
|
+
article: 'Art. 5(1)(a)',
|
|
50
|
+
penalty: '€35M or 7% turnover',
|
|
51
|
+
prohibitedWhen: 'Used as subliminal or manipulative technique to distort behavior beyond person\'s awareness, causing significant harm',
|
|
52
|
+
verifyMessage: 'Does this influence user decisions through techniques they are not aware of?',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'manipulative-ux',
|
|
56
|
+
ecosystem: 'npm',
|
|
57
|
+
reason: 'Manipulative UX patterns',
|
|
58
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
59
|
+
article: 'Art. 5(1)(a)',
|
|
60
|
+
penalty: '€35M or 7% turnover',
|
|
61
|
+
prohibitedWhen: 'Used as subliminal or manipulative technique to distort behavior beyond person\'s awareness, causing significant harm',
|
|
62
|
+
verifyMessage: 'Does this influence user decisions through techniques they are not aware of?',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'subliminal-messaging',
|
|
66
|
+
ecosystem: 'any',
|
|
67
|
+
reason: 'Subliminal messaging toolkit',
|
|
68
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
69
|
+
article: 'Art. 5(1)(a)',
|
|
70
|
+
penalty: '€35M or 7% turnover',
|
|
71
|
+
prohibitedWhen: 'Used as subliminal or manipulative technique to distort behavior beyond person\'s awareness, causing significant harm',
|
|
72
|
+
verifyMessage: 'Does this influence user decisions through techniques they are not aware of?',
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
// --- Art. 5(1)(b): Exploitation of vulnerabilities ---
|
|
76
|
+
{
|
|
77
|
+
name: 'vulnerability-exploitation',
|
|
78
|
+
ecosystem: 'any',
|
|
79
|
+
reason: 'Exploits age/disability/social vulnerabilities',
|
|
80
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
81
|
+
article: 'Art. 5(1)(b)',
|
|
82
|
+
penalty: '€35M or 7% turnover',
|
|
83
|
+
prohibitedWhen: 'Exploits vulnerabilities due to age, disability, or social/economic situation to distort behavior, causing significant harm',
|
|
84
|
+
verifyMessage: 'Does this target or exploit vulnerable groups (children, elderly, disabled)?',
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
// --- Art. 5(1)(c): Social scoring ---
|
|
88
|
+
{
|
|
89
|
+
name: 'social-credit-score',
|
|
90
|
+
ecosystem: 'any',
|
|
91
|
+
reason: 'Social scoring',
|
|
92
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
93
|
+
article: 'Art. 5(1)(c)',
|
|
94
|
+
penalty: '€35M or 7% turnover',
|
|
95
|
+
prohibitedWhen: 'Evaluates or classifies persons based on social behavior or personal characteristics, leading to detrimental treatment unrelated to the original context',
|
|
96
|
+
verifyMessage: 'Does this aggregate personal behavior into a score that affects access to services?',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'social-score',
|
|
100
|
+
ecosystem: 'any',
|
|
101
|
+
reason: 'Social behavior scoring',
|
|
102
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
103
|
+
article: 'Art. 5(1)(c)',
|
|
104
|
+
penalty: '€35M or 7% turnover',
|
|
105
|
+
prohibitedWhen: 'Evaluates or classifies persons based on social behavior or personal characteristics, leading to detrimental treatment unrelated to the original context',
|
|
106
|
+
verifyMessage: 'Does this aggregate personal behavior into a score that affects access to services?',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'reputation-score',
|
|
110
|
+
ecosystem: 'any',
|
|
111
|
+
reason: 'Person reputation scoring',
|
|
112
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
113
|
+
article: 'Art. 5(1)(c)',
|
|
114
|
+
penalty: '€35M or 7% turnover',
|
|
115
|
+
prohibitedWhen: 'Evaluates or classifies persons based on social behavior or personal characteristics, leading to detrimental treatment unrelated to the original context',
|
|
116
|
+
verifyMessage: 'Does this aggregate personal behavior into a score that affects access to services?',
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'citizen-score',
|
|
120
|
+
ecosystem: 'any',
|
|
121
|
+
reason: 'Citizen scoring system',
|
|
122
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
123
|
+
article: 'Art. 5(1)(c)',
|
|
124
|
+
penalty: '€35M or 7% turnover',
|
|
125
|
+
prohibitedWhen: 'Evaluates or classifies persons based on social behavior or personal characteristics, leading to detrimental treatment unrelated to the original context',
|
|
126
|
+
verifyMessage: 'Does this aggregate personal behavior into a score that affects access to services?',
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: 'trust-score',
|
|
130
|
+
ecosystem: 'any',
|
|
131
|
+
reason: 'Social trust scoring',
|
|
132
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
133
|
+
article: 'Art. 5(1)(c)',
|
|
134
|
+
penalty: '€35M or 7% turnover',
|
|
135
|
+
prohibitedWhen: 'Evaluates or classifies persons based on social behavior or personal characteristics, leading to detrimental treatment unrelated to the original context',
|
|
136
|
+
verifyMessage: 'Does this aggregate personal behavior into a score that affects access to services?',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: 'behavior-score',
|
|
140
|
+
ecosystem: 'any',
|
|
141
|
+
reason: 'Behavioral scoring of persons',
|
|
142
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
143
|
+
article: 'Art. 5(1)(c)',
|
|
144
|
+
penalty: '€35M or 7% turnover',
|
|
145
|
+
prohibitedWhen: 'Evaluates or classifies persons based on social behavior or personal characteristics, leading to detrimental treatment unrelated to the original context',
|
|
146
|
+
verifyMessage: 'Does this aggregate personal behavior into a score that affects access to services?',
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: 'credit-social',
|
|
150
|
+
ecosystem: 'any',
|
|
151
|
+
reason: 'Social credit scoring',
|
|
152
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
153
|
+
article: 'Art. 5(1)(c)',
|
|
154
|
+
penalty: '€35M or 7% turnover',
|
|
155
|
+
prohibitedWhen: 'Evaluates or classifies persons based on social behavior or personal characteristics, leading to detrimental treatment unrelated to the original context',
|
|
156
|
+
verifyMessage: 'Does this aggregate personal behavior into a score that affects access to services?',
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
// --- Art. 5(1)(d): Individual criminal risk prediction ---
|
|
160
|
+
{
|
|
161
|
+
name: 'predpol',
|
|
162
|
+
ecosystem: 'any',
|
|
163
|
+
reason: 'Predictive policing based on profiling',
|
|
164
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
165
|
+
article: 'Art. 5(1)(d)',
|
|
166
|
+
penalty: '€35M or 7% turnover',
|
|
167
|
+
prohibitedWhen: 'Assesses risk of criminal offence based solely on profiling or personality traits, without objective verifiable facts',
|
|
168
|
+
verifyMessage: 'Does this predict criminality based on personal characteristics rather than verified facts?',
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: 'predictive-policing',
|
|
172
|
+
ecosystem: 'any',
|
|
173
|
+
reason: 'Predictive policing',
|
|
174
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
175
|
+
article: 'Art. 5(1)(d)',
|
|
176
|
+
penalty: '€35M or 7% turnover',
|
|
177
|
+
prohibitedWhen: 'Assesses risk of criminal offence based solely on profiling or personality traits, without objective verifiable facts',
|
|
178
|
+
verifyMessage: 'Does this predict criminality based on personal characteristics rather than verified facts?',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
name: 'crime-prediction',
|
|
182
|
+
ecosystem: 'any',
|
|
183
|
+
reason: 'Criminal risk prediction via profiling',
|
|
184
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
185
|
+
article: 'Art. 5(1)(d)',
|
|
186
|
+
penalty: '€35M or 7% turnover',
|
|
187
|
+
prohibitedWhen: 'Assesses risk of criminal offence based solely on profiling or personality traits, without objective verifiable facts',
|
|
188
|
+
verifyMessage: 'Does this predict criminality based on personal characteristics rather than verified facts?',
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
name: 'precrime',
|
|
192
|
+
ecosystem: 'any',
|
|
193
|
+
reason: 'Pre-crime risk assessment',
|
|
194
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
195
|
+
article: 'Art. 5(1)(d)',
|
|
196
|
+
penalty: '€35M or 7% turnover',
|
|
197
|
+
prohibitedWhen: 'Assesses risk of criminal offence based solely on profiling or personality traits, without objective verifiable facts',
|
|
198
|
+
verifyMessage: 'Does this predict criminality based on personal characteristics rather than verified facts?',
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
name: 'recidivism-predictor',
|
|
202
|
+
ecosystem: 'any',
|
|
203
|
+
reason: 'Recidivism prediction via profiling',
|
|
204
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
205
|
+
article: 'Art. 5(1)(d)',
|
|
206
|
+
penalty: '€35M or 7% turnover',
|
|
207
|
+
prohibitedWhen: 'Assesses risk of criminal offence based solely on profiling or personality traits, without objective verifiable facts',
|
|
208
|
+
verifyMessage: 'Does this predict criminality based on personal characteristics rather than verified facts?',
|
|
209
|
+
},
|
|
210
|
+
|
|
211
|
+
// --- Art. 5(1)(e): Untargeted facial scraping ---
|
|
212
|
+
{
|
|
213
|
+
name: 'clearview-ai',
|
|
214
|
+
ecosystem: 'any',
|
|
215
|
+
reason: 'Untargeted facial scraping from internet/CCTV',
|
|
216
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
217
|
+
article: 'Art. 5(1)(e)',
|
|
218
|
+
penalty: '€35M or 7% turnover',
|
|
219
|
+
prohibitedWhen: 'Creates or expands facial recognition databases through untargeted scraping from internet or CCTV footage',
|
|
220
|
+
verifyMessage: 'Does this collect facial images from public sources without individual consent?',
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
name: 'face-scraper',
|
|
224
|
+
ecosystem: 'any',
|
|
225
|
+
reason: 'Facial image scraping toolkit',
|
|
226
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
227
|
+
article: 'Art. 5(1)(e)',
|
|
228
|
+
penalty: '€35M or 7% turnover',
|
|
229
|
+
prohibitedWhen: 'Creates or expands facial recognition databases through untargeted scraping from internet or CCTV footage',
|
|
230
|
+
verifyMessage: 'Does this collect facial images from public sources without individual consent?',
|
|
231
|
+
},
|
|
232
|
+
|
|
233
|
+
// --- Art. 5(1)(f): Emotion recognition in workplace/education ---
|
|
234
|
+
{
|
|
235
|
+
name: 'deepface',
|
|
236
|
+
ecosystem: 'pip',
|
|
237
|
+
reason: 'Emotion recognition',
|
|
238
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
239
|
+
article: 'Art. 5(1)(f)',
|
|
240
|
+
penalty: '€35M or 7% turnover',
|
|
241
|
+
prohibitedWhen: 'Infers emotions in workplace or educational settings, except for medical or safety purposes',
|
|
242
|
+
verifyMessage: 'Is this used to detect emotions of employees or students? (Medical/safety use is exempt)',
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
name: 'fer',
|
|
246
|
+
ecosystem: 'pip',
|
|
247
|
+
reason: 'Facial Emotion Recognition',
|
|
248
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
249
|
+
article: 'Art. 5(1)(f)',
|
|
250
|
+
penalty: '€35M or 7% turnover',
|
|
251
|
+
prohibitedWhen: 'Infers emotions in workplace or educational settings, except for medical or safety purposes',
|
|
252
|
+
verifyMessage: 'Is this used to detect emotions of employees or students? (Medical/safety use is exempt)',
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
name: 'emotion-recognition',
|
|
256
|
+
ecosystem: 'npm',
|
|
257
|
+
reason: 'Emotion recognition',
|
|
258
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
259
|
+
article: 'Art. 5(1)(f)',
|
|
260
|
+
penalty: '€35M or 7% turnover',
|
|
261
|
+
prohibitedWhen: 'Infers emotions in workplace or educational settings, except for medical or safety purposes',
|
|
262
|
+
verifyMessage: 'Is this used to detect emotions of employees or students? (Medical/safety use is exempt)',
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
name: 'py-feat',
|
|
266
|
+
ecosystem: 'pip',
|
|
267
|
+
reason: 'Facial expression analysis (emotion recognition)',
|
|
268
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
269
|
+
article: 'Art. 5(1)(f)',
|
|
270
|
+
penalty: '€35M or 7% turnover',
|
|
271
|
+
prohibitedWhen: 'Infers emotions in workplace or educational settings, except for medical or safety purposes',
|
|
272
|
+
verifyMessage: 'Is this used to detect emotions of employees or students? (Medical/safety use is exempt)',
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
name: 'emopy',
|
|
276
|
+
ecosystem: 'pip',
|
|
277
|
+
reason: 'Emotion recognition from facial expressions',
|
|
278
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
279
|
+
article: 'Art. 5(1)(f)',
|
|
280
|
+
penalty: '€35M or 7% turnover',
|
|
281
|
+
prohibitedWhen: 'Infers emotions in workplace or educational settings, except for medical or safety purposes',
|
|
282
|
+
verifyMessage: 'Is this used to detect emotions of employees or students? (Medical/safety use is exempt)',
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
name: 'affectiva',
|
|
286
|
+
ecosystem: 'any',
|
|
287
|
+
reason: 'Emotion AI / affective computing',
|
|
288
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
289
|
+
article: 'Art. 5(1)(f)',
|
|
290
|
+
penalty: '€35M or 7% turnover',
|
|
291
|
+
prohibitedWhen: 'Infers emotions in workplace or educational settings, except for medical or safety purposes',
|
|
292
|
+
verifyMessage: 'Is this used to detect emotions of employees or students? (Medical/safety use is exempt)',
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
name: 'emotion-api',
|
|
296
|
+
ecosystem: 'any',
|
|
297
|
+
reason: 'Emotion detection API client',
|
|
298
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
299
|
+
article: 'Art. 5(1)(f)',
|
|
300
|
+
penalty: '€35M or 7% turnover',
|
|
301
|
+
prohibitedWhen: 'Infers emotions in workplace or educational settings, except for medical or safety purposes',
|
|
302
|
+
verifyMessage: 'Is this used to detect emotions of employees or students? (Medical/safety use is exempt)',
|
|
303
|
+
},
|
|
304
|
+
|
|
305
|
+
// --- Art. 5(1)(g): Biometric categorization by protected characteristics ---
|
|
306
|
+
{
|
|
307
|
+
name: 'face-api.js',
|
|
308
|
+
ecosystem: 'npm',
|
|
309
|
+
reason: 'Biometric identification / categorization',
|
|
310
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
311
|
+
article: 'Art. 5(1)(g)',
|
|
312
|
+
penalty: '€35M or 7% turnover',
|
|
313
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
314
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
name: 'insightface',
|
|
318
|
+
ecosystem: 'pip',
|
|
319
|
+
reason: 'Biometric face analysis and categorization',
|
|
320
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
321
|
+
article: 'Art. 5(1)(g)',
|
|
322
|
+
penalty: '€35M or 7% turnover',
|
|
323
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
324
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
name: 'arcface',
|
|
328
|
+
ecosystem: 'pip',
|
|
329
|
+
reason: 'Face recognition / biometric categorization',
|
|
330
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
331
|
+
article: 'Art. 5(1)(g)',
|
|
332
|
+
penalty: '€35M or 7% turnover',
|
|
333
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
334
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
name: 'openface',
|
|
338
|
+
ecosystem: 'any',
|
|
339
|
+
reason: 'Open-source face recognition',
|
|
340
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
341
|
+
article: 'Art. 5(1)(g)',
|
|
342
|
+
penalty: '€35M or 7% turnover',
|
|
343
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
344
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
name: 'compreface',
|
|
348
|
+
ecosystem: 'any',
|
|
349
|
+
reason: 'Face recognition / biometric ID service',
|
|
350
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
351
|
+
article: 'Art. 5(1)(g)',
|
|
352
|
+
penalty: '€35M or 7% turnover',
|
|
353
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
354
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
name: 'amazon-rekognition',
|
|
358
|
+
ecosystem: 'any',
|
|
359
|
+
reason: 'Cloud biometric identification',
|
|
360
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
361
|
+
article: 'Art. 5(1)(g)',
|
|
362
|
+
penalty: '€35M or 7% turnover',
|
|
363
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
364
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
name: '@azure/cognitiveservices-face',
|
|
368
|
+
ecosystem: 'npm',
|
|
369
|
+
reason: 'Cloud biometric face API',
|
|
370
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
371
|
+
article: 'Art. 5(1)(g)',
|
|
372
|
+
penalty: '€35M or 7% turnover',
|
|
373
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
374
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
name: 'azure-cognitiveservices-vision-face',
|
|
378
|
+
ecosystem: 'pip',
|
|
379
|
+
reason: 'Cloud biometric face API',
|
|
380
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
381
|
+
article: 'Art. 5(1)(g)',
|
|
382
|
+
penalty: '€35M or 7% turnover',
|
|
383
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
384
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
name: 'google-cloud-vision',
|
|
388
|
+
ecosystem: 'pip',
|
|
389
|
+
reason: 'Cloud biometric identification',
|
|
390
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
391
|
+
article: 'Art. 5(1)(g)',
|
|
392
|
+
penalty: '€35M or 7% turnover',
|
|
393
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
394
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
name: 'clarifai',
|
|
398
|
+
ecosystem: 'any',
|
|
399
|
+
reason: 'Visual biometric recognition',
|
|
400
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
401
|
+
article: 'Art. 5(1)(g)',
|
|
402
|
+
penalty: '€35M or 7% turnover',
|
|
403
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
404
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
name: 'kairos',
|
|
408
|
+
ecosystem: 'any',
|
|
409
|
+
reason: 'Face recognition API',
|
|
410
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
411
|
+
article: 'Art. 5(1)(g)',
|
|
412
|
+
penalty: '€35M or 7% turnover',
|
|
413
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
414
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
name: 'luxand',
|
|
418
|
+
ecosystem: 'any',
|
|
419
|
+
reason: 'Face recognition SDK',
|
|
420
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
421
|
+
article: 'Art. 5(1)(g)',
|
|
422
|
+
penalty: '€35M or 7% turnover',
|
|
423
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
424
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
name: 'facepp',
|
|
428
|
+
ecosystem: 'any',
|
|
429
|
+
reason: 'Face++ biometric recognition',
|
|
430
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
431
|
+
article: 'Art. 5(1)(g)',
|
|
432
|
+
penalty: '€35M or 7% turnover',
|
|
433
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
434
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
name: 'deepid',
|
|
438
|
+
ecosystem: 'pip',
|
|
439
|
+
reason: 'Deep face identification',
|
|
440
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
441
|
+
article: 'Art. 5(1)(g)',
|
|
442
|
+
penalty: '€35M or 7% turnover',
|
|
443
|
+
prohibitedWhen: 'Categorizes persons by biometric data to infer race, political opinions, trade union membership, religious beliefs, sex life, or sexual orientation',
|
|
444
|
+
verifyMessage: 'Does this classify people by protected characteristics (race, religion, sexual orientation)?',
|
|
445
|
+
},
|
|
446
|
+
|
|
447
|
+
// --- Art. 5(1)(h): Real-time remote biometric ID in public spaces ---
|
|
448
|
+
{
|
|
449
|
+
name: 'real-time-facial',
|
|
450
|
+
ecosystem: 'any',
|
|
451
|
+
reason: 'Real-time facial recognition in public spaces',
|
|
452
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
453
|
+
article: 'Art. 5(1)(h)',
|
|
454
|
+
penalty: '€35M or 7% turnover',
|
|
455
|
+
prohibitedWhen: 'Real-time remote biometric identification in publicly accessible spaces for law enforcement, except for targeted search for specific victims, prevention of imminent threat, or specific serious crimes',
|
|
456
|
+
verifyMessage: 'Is this used for real-time biometric identification in public spaces? (Specific law enforcement exceptions may apply)',
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
name: 'crowd-face',
|
|
460
|
+
ecosystem: 'any',
|
|
461
|
+
reason: 'Crowd facial recognition',
|
|
462
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
463
|
+
article: 'Art. 5(1)(h)',
|
|
464
|
+
penalty: '€35M or 7% turnover',
|
|
465
|
+
prohibitedWhen: 'Real-time remote biometric identification in publicly accessible spaces for law enforcement, except for targeted search for specific victims, prevention of imminent threat, or specific serious crimes',
|
|
466
|
+
verifyMessage: 'Is this used for real-time biometric identification in public spaces? (Specific law enforcement exceptions may apply)',
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
name: 'surveillance-ai',
|
|
470
|
+
ecosystem: 'any',
|
|
471
|
+
reason: 'AI surveillance system',
|
|
472
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
473
|
+
article: 'Art. 5(1)(h)',
|
|
474
|
+
penalty: '€35M or 7% turnover',
|
|
475
|
+
prohibitedWhen: 'Real-time remote biometric identification in publicly accessible spaces for law enforcement, except for targeted search for specific victims, prevention of imminent threat, or specific serious crimes',
|
|
476
|
+
verifyMessage: 'Is this used for real-time biometric identification in public spaces? (Specific law enforcement exceptions may apply)',
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
name: 'mass-surveillance',
|
|
480
|
+
ecosystem: 'any',
|
|
481
|
+
reason: 'Mass surveillance toolkit',
|
|
482
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
483
|
+
article: 'Art. 5(1)(h)',
|
|
484
|
+
penalty: '€35M or 7% turnover',
|
|
485
|
+
prohibitedWhen: 'Real-time remote biometric identification in publicly accessible spaces for law enforcement, except for targeted search for specific victims, prevention of imminent threat, or specific serious crimes',
|
|
486
|
+
verifyMessage: 'Is this used for real-time biometric identification in public spaces? (Specific law enforcement exceptions may apply)',
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
name: 'live-biometric',
|
|
490
|
+
ecosystem: 'any',
|
|
491
|
+
reason: 'Live biometric identification',
|
|
492
|
+
obligationId: 'eu-ai-act-OBL-002',
|
|
493
|
+
article: 'Art. 5(1)(h)',
|
|
494
|
+
penalty: '€35M or 7% turnover',
|
|
495
|
+
prohibitedWhen: 'Real-time remote biometric identification in publicly accessible spaces for law enforcement, except for targeted search for specific victims, prevention of imminent threat, or specific serious crimes',
|
|
496
|
+
verifyMessage: 'Is this used for real-time biometric identification in public spaces? (Specific law enforcement exceptions may apply)',
|
|
497
|
+
},
|
|
498
|
+
];
|
|
499
|
+
|
|
500
|
+
export interface ProhibitedPattern {
|
|
501
|
+
readonly regex: RegExp;
|
|
502
|
+
readonly reason: string;
|
|
503
|
+
readonly article: string;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
export const PROHIBITED_PATTERNS: readonly ProhibitedPattern[] = [
|
|
507
|
+
// Art. 5(1)(a) — Subliminal/manipulative/deceptive techniques
|
|
508
|
+
{ regex: /subliminal.*messag/i, reason: 'Subliminal messaging', article: 'Art. 5(1)(a)' },
|
|
509
|
+
{ regex: /manipulat(e|ive|ion).*behavio(r|ur)/i, reason: 'Behavioral manipulation', article: 'Art. 5(1)(a)' },
|
|
510
|
+
{ regex: /dark.?pattern.*ai/i, reason: 'AI-powered dark patterns', article: 'Art. 5(1)(a)' },
|
|
511
|
+
{ regex: /deceptive.*ai.*technique/i, reason: 'Deceptive AI technique', article: 'Art. 5(1)(a)' },
|
|
512
|
+
{ regex: /covert.*persuasion/i, reason: 'Covert persuasion technique', article: 'Art. 5(1)(a)' },
|
|
513
|
+
|
|
514
|
+
// Art. 5(1)(b) — Exploitation of vulnerabilities (age, disability, social/economic situation)
|
|
515
|
+
{ regex: /exploit.*(vulnerab|elderly|disabled|minors?|children)/i, reason: 'Exploitation of vulnerable groups', article: 'Art. 5(1)(b)' },
|
|
516
|
+
{ regex: /target.*(elderly|senior|disabled|impair|minor|child)/i, reason: 'Targeting vulnerable persons', article: 'Art. 5(1)(b)' },
|
|
517
|
+
{ regex: /age.?based.*(manipulat|exploit|target)/i, reason: 'Age-based exploitation', article: 'Art. 5(1)(b)' },
|
|
518
|
+
{ regex: /disability.*(exploit|manipulat|target)/i, reason: 'Disability-based exploitation', article: 'Art. 5(1)(b)' },
|
|
519
|
+
{ regex: /economic.?vulnerab.*(exploit|target)/i, reason: 'Economic vulnerability exploitation', article: 'Art. 5(1)(b)' },
|
|
520
|
+
|
|
521
|
+
// Art. 5(1)(c) — Social scoring
|
|
522
|
+
{ regex: /social.*scor(e|ing)/i, reason: 'Social scoring system', article: 'Art. 5(1)(c)' },
|
|
523
|
+
{ regex: /citizen.*rating/i, reason: 'Citizen rating system', article: 'Art. 5(1)(c)' },
|
|
524
|
+
{ regex: /behavio(r|ur).*rating.*system/i, reason: 'Behavioral rating system', article: 'Art. 5(1)(c)' },
|
|
525
|
+
|
|
526
|
+
// Art. 5(1)(d) — Criminal risk prediction based on profiling
|
|
527
|
+
{ regex: /predictive.*polic/i, reason: 'Predictive policing', article: 'Art. 5(1)(d)' },
|
|
528
|
+
{ regex: /crime.*predict/i, reason: 'Criminal risk prediction', article: 'Art. 5(1)(d)' },
|
|
529
|
+
{ regex: /recidivism.*predict/i, reason: 'Recidivism prediction', article: 'Art. 5(1)(d)' },
|
|
530
|
+
{ regex: /criminal.*profil/i, reason: 'Criminal profiling', article: 'Art. 5(1)(d)' },
|
|
531
|
+
|
|
532
|
+
// Art. 5(1)(e) — Untargeted facial scraping
|
|
533
|
+
{ regex: /facial.*scrap(e|ing)/i, reason: 'Facial image scraping', article: 'Art. 5(1)(e)' },
|
|
534
|
+
{ regex: /face.*harvest/i, reason: 'Face data harvesting', article: 'Art. 5(1)(e)' },
|
|
535
|
+
{ regex: /scrape.*face.*image/i, reason: 'Scraping facial images', article: 'Art. 5(1)(e)' },
|
|
536
|
+
|
|
537
|
+
// Art. 5(1)(f) — Emotion recognition in workplace/education
|
|
538
|
+
{ regex: /emotion.*recogni(tion|ze|zer).*real.?time/i, reason: 'Real-time emotion recognition', article: 'Art. 5(1)(f)' },
|
|
539
|
+
{ regex: /emotion.*detect.*work(place|er|force)/i, reason: 'Workplace emotion detection', article: 'Art. 5(1)(f)' },
|
|
540
|
+
{ regex: /emotion.*detect.*school|classroom.*emotion/i, reason: 'Education emotion detection', article: 'Art. 5(1)(f)' },
|
|
541
|
+
{ regex: /affect(ive)?.?comput.*employ/i, reason: 'Affective computing for employees', article: 'Art. 5(1)(f)' },
|
|
542
|
+
|
|
543
|
+
// Art. 5(1)(g) — Biometric categorization by sensitive characteristics
|
|
544
|
+
{ regex: /biometric.*categori[sz]/i, reason: 'Biometric categorization', article: 'Art. 5(1)(g)' },
|
|
545
|
+
{ regex: /infer.*(race|religion|politic|sexual.?orient)/i, reason: 'Inferring sensitive attributes', article: 'Art. 5(1)(g)' },
|
|
546
|
+
{ regex: /biometric.*(race|ethnic|gender)/i, reason: 'Biometric sensitive classification', article: 'Art. 5(1)(g)' },
|
|
547
|
+
|
|
548
|
+
// Art. 5(1)(h) — Real-time remote biometric identification in public spaces
|
|
549
|
+
{ regex: /mass.*surveillance/i, reason: 'Mass surveillance', article: 'Art. 5(1)(h)' },
|
|
550
|
+
{ regex: /real.?time.*biometric.*identif/i, reason: 'Real-time biometric identification', article: 'Art. 5(1)(h)' },
|
|
551
|
+
{ regex: /live.*face.*recogni(tion|ze)/i, reason: 'Live facial recognition', article: 'Art. 5(1)(h)' },
|
|
552
|
+
{ regex: /public.*space.*biometric/i, reason: 'Public space biometric ID', article: 'Art. 5(1)(h)' },
|
|
553
|
+
];
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export const AI_SDK_PACKAGES: ReadonlyMap<string, string> = new Map([
|
|
2
|
+
// npm
|
|
3
|
+
['openai', 'OpenAI'],
|
|
4
|
+
['@anthropic-ai/sdk', 'Anthropic'],
|
|
5
|
+
['anthropic', 'Anthropic'],
|
|
6
|
+
['@google/generative-ai', 'Google AI'],
|
|
7
|
+
['@google-cloud/aiplatform', 'Google Vertex AI'],
|
|
8
|
+
['cohere-ai', 'Cohere'],
|
|
9
|
+
['@mistralai/mistralai', 'Mistral'],
|
|
10
|
+
['ai', 'Vercel AI SDK'],
|
|
11
|
+
['@ai-sdk/openai', 'Vercel AI SDK (OpenAI)'],
|
|
12
|
+
['@ai-sdk/anthropic', 'Vercel AI SDK (Anthropic)'],
|
|
13
|
+
['@ai-sdk/google', 'Vercel AI SDK (Google)'],
|
|
14
|
+
['@ai-sdk/mistral', 'Vercel AI SDK (Mistral)'],
|
|
15
|
+
['@ai-sdk/amazon-bedrock', 'Vercel AI SDK (Bedrock)'],
|
|
16
|
+
['langchain', 'LangChain'],
|
|
17
|
+
['@langchain/core', 'LangChain Core'],
|
|
18
|
+
['@langchain/openai', 'LangChain (OpenAI)'],
|
|
19
|
+
['@langchain/anthropic', 'LangChain (Anthropic)'],
|
|
20
|
+
['@langchain/community', 'LangChain (Community)'],
|
|
21
|
+
['llamaindex', 'LlamaIndex'],
|
|
22
|
+
['replicate', 'Replicate'],
|
|
23
|
+
['huggingface', 'Hugging Face'],
|
|
24
|
+
['@huggingface/inference', 'Hugging Face Inference'],
|
|
25
|
+
['@openclaw/sdk', 'OpenClaw'],
|
|
26
|
+
['groq-sdk', 'Groq'],
|
|
27
|
+
['ollama', 'Ollama'],
|
|
28
|
+
['@aws-sdk/client-bedrock-runtime', 'Amazon Bedrock'],
|
|
29
|
+
['@azure/openai', 'Azure OpenAI'],
|
|
30
|
+
// pip
|
|
31
|
+
['google-generativeai', 'Google AI'],
|
|
32
|
+
['cohere', 'Cohere'],
|
|
33
|
+
['mistralai', 'Mistral'],
|
|
34
|
+
['llama-index', 'LlamaIndex'],
|
|
35
|
+
['transformers', 'Hugging Face Transformers'],
|
|
36
|
+
['torch', 'PyTorch'],
|
|
37
|
+
['tensorflow', 'TensorFlow'],
|
|
38
|
+
['crewai', 'CrewAI'],
|
|
39
|
+
['pyautogen', 'AutoGen'],
|
|
40
|
+
['groq', 'Groq'],
|
|
41
|
+
['together', 'Together AI'],
|
|
42
|
+
['fireworks-ai', 'Fireworks AI'],
|
|
43
|
+
['litellm', 'LiteLLM'],
|
|
44
|
+
['semantic-kernel', 'Semantic Kernel'],
|
|
45
|
+
['haystack-ai', 'Haystack'],
|
|
46
|
+
['instructor', 'Instructor'],
|
|
47
|
+
['dspy-ai', 'DSPy'],
|
|
48
|
+
['phidata', 'Phidata'],
|
|
49
|
+
['boto3', 'AWS SDK (Bedrock)'],
|
|
50
|
+
['deepseek-sdk', 'DeepSeek'],
|
|
51
|
+
// cargo
|
|
52
|
+
['async-openai', 'OpenAI (Rust)'],
|
|
53
|
+
['llm', 'LLM (Rust)'],
|
|
54
|
+
// go
|
|
55
|
+
['github.com/sashabaranov/go-openai', 'OpenAI (Go)'],
|
|
56
|
+
['github.com/anthropics/anthropic-sdk-go', 'Anthropic (Go)'],
|
|
57
|
+
]);
|
|
58
|
+
|
|
59
|
+
export const BIAS_TESTING_PACKAGES: ReadonlySet<string> = new Set([
|
|
60
|
+
'fairlearn',
|
|
61
|
+
'aif360',
|
|
62
|
+
'aequitas',
|
|
63
|
+
'responsibleai',
|
|
64
|
+
'@responsible-ai/fairness',
|
|
65
|
+
]);
|