@avi770/testteam 2.0.0 → 3.2.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/CHANGELOG.md +188 -3
- package/README.md +111 -20
- package/bin/testteam.js +32 -4
- package/dist/agents/01-analyst.d.ts +2 -2
- package/dist/agents/01-analyst.js +1 -1
- package/dist/agents/02-seed-architect.d.ts +2 -2
- package/dist/agents/02-seed-architect.js +2 -2
- package/dist/agents/03-test-generator.d.ts +2 -2
- package/dist/agents/03-test-generator.js +2 -2
- package/dist/agents/04-unit-runner.d.ts +2 -2
- package/dist/agents/04-unit-runner.d.ts.map +1 -1
- package/dist/agents/04-unit-runner.js +12 -3
- package/dist/agents/04-unit-runner.js.map +1 -1
- package/dist/agents/05-browser-crawler.d.ts +2 -2
- package/dist/agents/05-browser-crawler.d.ts.map +1 -1
- package/dist/agents/05-browser-crawler.js +24 -12
- package/dist/agents/05-browser-crawler.js.map +1 -1
- package/dist/agents/06-api-exerciser.d.ts +2 -2
- package/dist/agents/06-api-exerciser.js +2 -2
- package/dist/agents/07-security-scout.d.ts +2 -2
- package/dist/agents/07-security-scout.js +2 -2
- package/dist/agents/08-a11y-guardian.d.ts +2 -2
- package/dist/agents/08-a11y-guardian.d.ts.map +1 -1
- package/dist/agents/08-a11y-guardian.js +9 -5
- package/dist/agents/08-a11y-guardian.js.map +1 -1
- package/dist/agents/09-healer.d.ts +2 -2
- package/dist/agents/09-healer.js +2 -2
- package/dist/agents/10-reporter.d.ts +2 -2
- package/dist/agents/10-reporter.d.ts.map +1 -1
- package/dist/agents/10-reporter.js +55 -27
- package/dist/agents/10-reporter.js.map +1 -1
- package/dist/agents/100-error-handling-auditor.d.ts +63 -0
- package/dist/agents/100-error-handling-auditor.d.ts.map +1 -0
- package/dist/agents/100-error-handling-auditor.js +334 -0
- package/dist/agents/100-error-handling-auditor.js.map +1 -0
- package/dist/agents/101-rate-limit-auditor.d.ts +72 -0
- package/dist/agents/101-rate-limit-auditor.d.ts.map +1 -0
- package/dist/agents/101-rate-limit-auditor.js +295 -0
- package/dist/agents/101-rate-limit-auditor.js.map +1 -0
- package/dist/agents/102-dockerfile-auditor.d.ts +62 -0
- package/dist/agents/102-dockerfile-auditor.d.ts.map +1 -0
- package/dist/agents/102-dockerfile-auditor.js +337 -0
- package/dist/agents/102-dockerfile-auditor.js.map +1 -0
- package/dist/agents/103-ci-workflow-auditor.d.ts +57 -0
- package/dist/agents/103-ci-workflow-auditor.d.ts.map +1 -0
- package/dist/agents/103-ci-workflow-auditor.js +247 -0
- package/dist/agents/103-ci-workflow-auditor.js.map +1 -0
- package/dist/agents/104-n-plus-one-detector.d.ts +57 -0
- package/dist/agents/104-n-plus-one-detector.d.ts.map +1 -0
- package/dist/agents/104-n-plus-one-detector.js +329 -0
- package/dist/agents/104-n-plus-one-detector.js.map +1 -0
- package/dist/agents/105-unbounded-query-auditor.d.ts +50 -0
- package/dist/agents/105-unbounded-query-auditor.d.ts.map +1 -0
- package/dist/agents/105-unbounded-query-auditor.js +284 -0
- package/dist/agents/105-unbounded-query-auditor.js.map +1 -0
- package/dist/agents/106-hardcoded-config-auditor.d.ts +54 -0
- package/dist/agents/106-hardcoded-config-auditor.d.ts.map +1 -0
- package/dist/agents/106-hardcoded-config-auditor.js +251 -0
- package/dist/agents/106-hardcoded-config-auditor.js.map +1 -0
- package/dist/agents/107-open-redirect-detector.d.ts +52 -0
- package/dist/agents/107-open-redirect-detector.d.ts.map +1 -0
- package/dist/agents/107-open-redirect-detector.js +263 -0
- package/dist/agents/107-open-redirect-detector.js.map +1 -0
- package/dist/agents/108-sql-injection-detector.d.ts +51 -0
- package/dist/agents/108-sql-injection-detector.d.ts.map +1 -0
- package/dist/agents/108-sql-injection-detector.js +323 -0
- package/dist/agents/108-sql-injection-detector.js.map +1 -0
- package/dist/agents/109-path-traversal-detector.d.ts +51 -0
- package/dist/agents/109-path-traversal-detector.d.ts.map +1 -0
- package/dist/agents/109-path-traversal-detector.js +244 -0
- package/dist/agents/109-path-traversal-detector.js.map +1 -0
- package/dist/agents/11-fixer.d.ts +4 -2
- package/dist/agents/11-fixer.d.ts.map +1 -1
- package/dist/agents/11-fixer.js +52 -11
- package/dist/agents/11-fixer.js.map +1 -1
- package/dist/agents/110-mass-assignment-detector.d.ts +52 -0
- package/dist/agents/110-mass-assignment-detector.d.ts.map +1 -0
- package/dist/agents/110-mass-assignment-detector.js +199 -0
- package/dist/agents/110-mass-assignment-detector.js.map +1 -0
- package/dist/agents/111-dynamic-eval-detector.d.ts +46 -0
- package/dist/agents/111-dynamic-eval-detector.d.ts.map +1 -0
- package/dist/agents/111-dynamic-eval-detector.js +233 -0
- package/dist/agents/111-dynamic-eval-detector.js.map +1 -0
- package/dist/agents/112-taint-tracker.d.ts +226 -0
- package/dist/agents/112-taint-tracker.d.ts.map +1 -0
- package/dist/agents/112-taint-tracker.js +1273 -0
- package/dist/agents/112-taint-tracker.js.map +1 -0
- package/dist/agents/113-response-contract-auditor.d.ts +92 -0
- package/dist/agents/113-response-contract-auditor.d.ts.map +1 -0
- package/dist/agents/113-response-contract-auditor.js +694 -0
- package/dist/agents/113-response-contract-auditor.js.map +1 -0
- package/dist/agents/114-static-a11y-auditor.d.ts +66 -0
- package/dist/agents/114-static-a11y-auditor.d.ts.map +1 -0
- package/dist/agents/114-static-a11y-auditor.js +377 -0
- package/dist/agents/114-static-a11y-auditor.js.map +1 -0
- package/dist/agents/115-multihop-taint-tracker.d.ts +84 -0
- package/dist/agents/115-multihop-taint-tracker.d.ts.map +1 -0
- package/dist/agents/115-multihop-taint-tracker.js +340 -0
- package/dist/agents/115-multihop-taint-tracker.js.map +1 -0
- package/dist/agents/116-runtime-contract-capture.d.ts +79 -0
- package/dist/agents/116-runtime-contract-capture.d.ts.map +1 -0
- package/dist/agents/116-runtime-contract-capture.js +274 -0
- package/dist/agents/116-runtime-contract-capture.js.map +1 -0
- package/dist/agents/117-aria-rule-engine.d.ts +52 -0
- package/dist/agents/117-aria-rule-engine.d.ts.map +1 -0
- package/dist/agents/117-aria-rule-engine.js +415 -0
- package/dist/agents/117-aria-rule-engine.js.map +1 -0
- package/dist/agents/118-insecure-crypto-auditor.d.ts +48 -0
- package/dist/agents/118-insecure-crypto-auditor.d.ts.map +1 -0
- package/dist/agents/118-insecure-crypto-auditor.js +232 -0
- package/dist/agents/118-insecure-crypto-auditor.js.map +1 -0
- package/dist/agents/119-secrets-scanner.d.ts +44 -0
- package/dist/agents/119-secrets-scanner.d.ts.map +1 -0
- package/dist/agents/119-secrets-scanner.js +242 -0
- package/dist/agents/119-secrets-scanner.js.map +1 -0
- package/dist/agents/12-ux-inspector.d.ts +2 -2
- package/dist/agents/12-ux-inspector.d.ts.map +1 -1
- package/dist/agents/12-ux-inspector.js +8 -4
- package/dist/agents/12-ux-inspector.js.map +1 -1
- package/dist/agents/120-async-safety-auditor.d.ts +48 -0
- package/dist/agents/120-async-safety-auditor.d.ts.map +1 -0
- package/dist/agents/120-async-safety-auditor.js +250 -0
- package/dist/agents/120-async-safety-auditor.js.map +1 -0
- package/dist/agents/13-performance-profiler.d.ts +2 -2
- package/dist/agents/13-performance-profiler.d.ts.map +1 -1
- package/dist/agents/13-performance-profiler.js +5 -4
- package/dist/agents/13-performance-profiler.js.map +1 -1
- package/dist/agents/14-data-integrity-auditor.d.ts +2 -2
- package/dist/agents/14-data-integrity-auditor.js +4 -4
- package/dist/agents/14-data-integrity-auditor.js.map +1 -1
- package/dist/agents/15-regression-sentinel.d.ts +6 -4
- package/dist/agents/15-regression-sentinel.d.ts.map +1 -1
- package/dist/agents/15-regression-sentinel.js +5 -4
- package/dist/agents/15-regression-sentinel.js.map +1 -1
- package/dist/agents/16-chaos-agent.d.ts +2 -2
- package/dist/agents/16-chaos-agent.d.ts.map +1 -1
- package/dist/agents/16-chaos-agent.js +11 -4
- package/dist/agents/16-chaos-agent.js.map +1 -1
- package/dist/agents/17-documentation-validator.d.ts +2 -2
- package/dist/agents/17-documentation-validator.d.ts.map +1 -1
- package/dist/agents/17-documentation-validator.js +5 -2
- package/dist/agents/17-documentation-validator.js.map +1 -1
- package/dist/agents/18-integration-watchdog.d.ts +2 -2
- package/dist/agents/18-integration-watchdog.d.ts.map +1 -1
- package/dist/agents/18-integration-watchdog.js +5 -2
- package/dist/agents/18-integration-watchdog.js.map +1 -1
- package/dist/agents/19-tenant-isolation-auditor.d.ts +2 -2
- package/dist/agents/19-tenant-isolation-auditor.js +4 -4
- package/dist/agents/19-tenant-isolation-auditor.js.map +1 -1
- package/dist/agents/20-workflow-completion-tester.d.ts +2 -2
- package/dist/agents/20-workflow-completion-tester.d.ts.map +1 -1
- package/dist/agents/20-workflow-completion-tester.js +10 -6
- package/dist/agents/20-workflow-completion-tester.js.map +1 -1
- package/dist/agents/21-state-session-tester.d.ts +2 -2
- package/dist/agents/21-state-session-tester.d.ts.map +1 -1
- package/dist/agents/21-state-session-tester.js +15 -5
- package/dist/agents/21-state-session-tester.js.map +1 -1
- package/dist/agents/22-email-notification-verifier.d.ts +2 -2
- package/dist/agents/22-email-notification-verifier.js +2 -2
- package/dist/agents/23-migration-tester.d.ts +2 -2
- package/dist/agents/23-migration-tester.js +1 -1
- package/dist/agents/24-signup-onboarding-tester.d.ts +2 -2
- package/dist/agents/24-signup-onboarding-tester.d.ts.map +1 -1
- package/dist/agents/24-signup-onboarding-tester.js +13 -10
- package/dist/agents/24-signup-onboarding-tester.js.map +1 -1
- package/dist/agents/25-crud-flow-tester.d.ts +2 -2
- package/dist/agents/25-crud-flow-tester.d.ts.map +1 -1
- package/dist/agents/25-crud-flow-tester.js +12 -6
- package/dist/agents/25-crud-flow-tester.js.map +1 -1
- package/dist/agents/26-form-validator.d.ts +2 -2
- package/dist/agents/26-form-validator.d.ts.map +1 -1
- package/dist/agents/26-form-validator.js +12 -6
- package/dist/agents/26-form-validator.js.map +1 -1
- package/dist/agents/27-search-filter-tester.d.ts +2 -2
- package/dist/agents/27-search-filter-tester.d.ts.map +1 -1
- package/dist/agents/27-search-filter-tester.js +12 -6
- package/dist/agents/27-search-filter-tester.js.map +1 -1
- package/dist/agents/28-navigation-routing-tester.d.ts +2 -2
- package/dist/agents/28-navigation-routing-tester.d.ts.map +1 -1
- package/dist/agents/28-navigation-routing-tester.js +12 -6
- package/dist/agents/28-navigation-routing-tester.js.map +1 -1
- package/dist/agents/29-responsive-interaction-tester.d.ts +2 -2
- package/dist/agents/29-responsive-interaction-tester.d.ts.map +1 -1
- package/dist/agents/29-responsive-interaction-tester.js +12 -6
- package/dist/agents/29-responsive-interaction-tester.js.map +1 -1
- package/dist/agents/30-multi-user-scenario-tester.d.ts +2 -2
- package/dist/agents/30-multi-user-scenario-tester.d.ts.map +1 -1
- package/dist/agents/30-multi-user-scenario-tester.js +20 -13
- package/dist/agents/30-multi-user-scenario-tester.js.map +1 -1
- package/dist/agents/31-load-tester.d.ts +2 -2
- package/dist/agents/31-load-tester.js +2 -2
- package/dist/agents/32-memory-leak-detector.d.ts +2 -2
- package/dist/agents/32-memory-leak-detector.d.ts.map +1 -1
- package/dist/agents/32-memory-leak-detector.js +5 -4
- package/dist/agents/32-memory-leak-detector.js.map +1 -1
- package/dist/agents/33-bundle-analyzer.d.ts +2 -2
- package/dist/agents/33-bundle-analyzer.js +1 -1
- package/dist/agents/34-xss-scanner.d.ts +2 -2
- package/dist/agents/34-xss-scanner.d.ts.map +1 -1
- package/dist/agents/34-xss-scanner.js +12 -6
- package/dist/agents/34-xss-scanner.js.map +1 -1
- package/dist/agents/35-csrf-tester.d.ts +2 -2
- package/dist/agents/35-csrf-tester.js +2 -2
- package/dist/agents/36-auth-fuzzer.d.ts +2 -2
- package/dist/agents/36-auth-fuzzer.js +2 -2
- package/dist/agents/37-dependency-scanner.d.ts +2 -2
- package/dist/agents/37-dependency-scanner.js +1 -1
- package/dist/agents/38-secrets-scanner.d.ts +2 -2
- package/dist/agents/38-secrets-scanner.d.ts.map +1 -1
- package/dist/agents/38-secrets-scanner.js +39 -4
- package/dist/agents/38-secrets-scanner.js.map +1 -1
- package/dist/agents/39-api-contract-tester.d.ts +2 -2
- package/dist/agents/39-api-contract-tester.js +2 -2
- package/dist/agents/40-rate-limit-tester.d.ts +2 -2
- package/dist/agents/40-rate-limit-tester.js +2 -2
- package/dist/agents/41-api-pagination-tester.d.ts +2 -2
- package/dist/agents/41-api-pagination-tester.js +2 -2
- package/dist/agents/42-graphql-tester.d.ts +2 -2
- package/dist/agents/42-graphql-tester.js +2 -2
- package/dist/agents/43-data-consistency-checker.d.ts +2 -2
- package/dist/agents/43-data-consistency-checker.js +3 -3
- package/dist/agents/44-backup-recovery-tester.d.ts +2 -2
- package/dist/agents/44-backup-recovery-tester.js +1 -1
- package/dist/agents/45-data-privacy-scanner.d.ts +2 -2
- package/dist/agents/45-data-privacy-scanner.js +3 -3
- package/dist/agents/46-seo-auditor.d.ts +2 -2
- package/dist/agents/46-seo-auditor.d.ts.map +1 -1
- package/dist/agents/46-seo-auditor.js +12 -6
- package/dist/agents/46-seo-auditor.js.map +1 -1
- package/dist/agents/47-social-preview-tester.d.ts +2 -2
- package/dist/agents/47-social-preview-tester.d.ts.map +1 -1
- package/dist/agents/47-social-preview-tester.js +12 -6
- package/dist/agents/47-social-preview-tester.js.map +1 -1
- package/dist/agents/48-lighthouse-auditor.d.ts +2 -2
- package/dist/agents/48-lighthouse-auditor.d.ts.map +1 -1
- package/dist/agents/48-lighthouse-auditor.js +5 -4
- package/dist/agents/48-lighthouse-auditor.js.map +1 -1
- package/dist/agents/49-i18n-tester.d.ts +2 -2
- package/dist/agents/49-i18n-tester.d.ts.map +1 -1
- package/dist/agents/49-i18n-tester.js +12 -6
- package/dist/agents/49-i18n-tester.js.map +1 -1
- package/dist/agents/50-timezone-tester.d.ts +2 -2
- package/dist/agents/50-timezone-tester.d.ts.map +1 -1
- package/dist/agents/50-timezone-tester.js +40 -33
- package/dist/agents/50-timezone-tester.js.map +1 -1
- package/dist/agents/51-error-recovery-tester.d.ts +2 -2
- package/dist/agents/51-error-recovery-tester.d.ts.map +1 -1
- package/dist/agents/51-error-recovery-tester.js +12 -7
- package/dist/agents/51-error-recovery-tester.js.map +1 -1
- package/dist/agents/52-offline-mode-tester.d.ts +2 -2
- package/dist/agents/52-offline-mode-tester.d.ts.map +1 -1
- package/dist/agents/52-offline-mode-tester.js +12 -7
- package/dist/agents/52-offline-mode-tester.js.map +1 -1
- package/dist/agents/53-graceful-degradation-tester.d.ts +2 -2
- package/dist/agents/53-graceful-degradation-tester.d.ts.map +1 -1
- package/dist/agents/53-graceful-degradation-tester.js +10 -3
- package/dist/agents/53-graceful-degradation-tester.js.map +1 -1
- package/dist/agents/54-websocket-tester.d.ts +2 -2
- package/dist/agents/54-websocket-tester.d.ts.map +1 -1
- package/dist/agents/54-websocket-tester.js +12 -6
- package/dist/agents/54-websocket-tester.js.map +1 -1
- package/dist/agents/55-realtime-sync-tester.d.ts +2 -2
- package/dist/agents/55-realtime-sync-tester.d.ts.map +1 -1
- package/dist/agents/55-realtime-sync-tester.js +101 -96
- package/dist/agents/55-realtime-sync-tester.js.map +1 -1
- package/dist/agents/56-file-upload-tester.d.ts +2 -2
- package/dist/agents/56-file-upload-tester.d.ts.map +1 -1
- package/dist/agents/56-file-upload-tester.js +17 -13
- package/dist/agents/56-file-upload-tester.js.map +1 -1
- package/dist/agents/57-export-tester.d.ts +2 -2
- package/dist/agents/57-export-tester.d.ts.map +1 -1
- package/dist/agents/57-export-tester.js +8 -4
- package/dist/agents/57-export-tester.js.map +1 -1
- package/dist/agents/58-payment-flow-tester.d.ts +2 -2
- package/dist/agents/58-payment-flow-tester.d.ts.map +1 -1
- package/dist/agents/58-payment-flow-tester.js +8 -4
- package/dist/agents/58-payment-flow-tester.js.map +1 -1
- package/dist/agents/59-ssl-tls-auditor.d.ts +2 -2
- package/dist/agents/59-ssl-tls-auditor.js +2 -2
- package/dist/agents/60-dns-cdn-tester.d.ts +2 -2
- package/dist/agents/60-dns-cdn-tester.js +2 -2
- package/dist/agents/61-docker-health-checker.d.ts +2 -2
- package/dist/agents/61-docker-health-checker.js +1 -1
- package/dist/agents/62-env-config-validator.d.ts +2 -2
- package/dist/agents/62-env-config-validator.js +1 -1
- package/dist/agents/63-log-quality-auditor.d.ts +2 -2
- package/dist/agents/63-log-quality-auditor.js +1 -1
- package/dist/agents/64-analytics-tracker-tester.d.ts +2 -2
- package/dist/agents/64-analytics-tracker-tester.d.ts.map +1 -1
- package/dist/agents/64-analytics-tracker-tester.js +8 -4
- package/dist/agents/64-analytics-tracker-tester.js.map +1 -1
- package/dist/agents/65-gdpr-compliance-tester.d.ts +2 -2
- package/dist/agents/65-gdpr-compliance-tester.d.ts.map +1 -1
- package/dist/agents/65-gdpr-compliance-tester.js +55 -40
- package/dist/agents/65-gdpr-compliance-tester.js.map +1 -1
- package/dist/agents/66-soc2-control-validator.d.ts +2 -2
- package/dist/agents/66-soc2-control-validator.d.ts.map +1 -1
- package/dist/agents/66-soc2-control-validator.js +29 -21
- package/dist/agents/66-soc2-control-validator.js.map +1 -1
- package/dist/agents/67-wcag-aaa-tester.d.ts +2 -2
- package/dist/agents/67-wcag-aaa-tester.d.ts.map +1 -1
- package/dist/agents/67-wcag-aaa-tester.js +12 -6
- package/dist/agents/67-wcag-aaa-tester.js.map +1 -1
- package/dist/agents/68-dead-code-detector.d.ts +2 -2
- package/dist/agents/68-dead-code-detector.d.ts.map +1 -1
- package/dist/agents/68-dead-code-detector.js +6 -3
- package/dist/agents/68-dead-code-detector.js.map +1 -1
- package/dist/agents/69-type-safety-auditor.d.ts +2 -2
- package/dist/agents/69-type-safety-auditor.js +1 -1
- package/dist/agents/70-complexity-analyzer.d.ts +2 -2
- package/dist/agents/70-complexity-analyzer.js +1 -1
- package/dist/agents/71-unit-testing-agent.d.ts +15 -0
- package/dist/agents/71-unit-testing-agent.d.ts.map +1 -0
- package/dist/agents/71-unit-testing-agent.js +220 -0
- package/dist/agents/71-unit-testing-agent.js.map +1 -0
- package/dist/agents/72-integration-testing-agent.d.ts +13 -0
- package/dist/agents/72-integration-testing-agent.d.ts.map +1 -0
- package/dist/agents/72-integration-testing-agent.js +243 -0
- package/dist/agents/72-integration-testing-agent.js.map +1 -0
- package/dist/agents/73-system-testing-agent.d.ts +11 -0
- package/dist/agents/73-system-testing-agent.d.ts.map +1 -0
- package/dist/agents/73-system-testing-agent.js +175 -0
- package/dist/agents/73-system-testing-agent.js.map +1 -0
- package/dist/agents/74-acceptance-testing-agent.d.ts +13 -0
- package/dist/agents/74-acceptance-testing-agent.d.ts.map +1 -0
- package/dist/agents/74-acceptance-testing-agent.js +254 -0
- package/dist/agents/74-acceptance-testing-agent.js.map +1 -0
- package/dist/agents/75-sanity-testing-agent.d.ts +15 -0
- package/dist/agents/75-sanity-testing-agent.d.ts.map +1 -0
- package/dist/agents/75-sanity-testing-agent.js +240 -0
- package/dist/agents/75-sanity-testing-agent.js.map +1 -0
- package/dist/agents/76-regression-testing-agent.d.ts +14 -0
- package/dist/agents/76-regression-testing-agent.d.ts.map +1 -0
- package/dist/agents/76-regression-testing-agent.js +230 -0
- package/dist/agents/76-regression-testing-agent.js.map +1 -0
- package/dist/agents/77-browser-load-testing-agent.d.ts +11 -0
- package/dist/agents/77-browser-load-testing-agent.d.ts.map +1 -0
- package/dist/agents/77-browser-load-testing-agent.js +128 -0
- package/dist/agents/77-browser-load-testing-agent.js.map +1 -0
- package/dist/agents/78-stress-testing-agent.d.ts +11 -0
- package/dist/agents/78-stress-testing-agent.d.ts.map +1 -0
- package/dist/agents/78-stress-testing-agent.js +146 -0
- package/dist/agents/78-stress-testing-agent.js.map +1 -0
- package/dist/agents/79-endurance-testing-agent.d.ts +12 -0
- package/dist/agents/79-endurance-testing-agent.d.ts.map +1 -0
- package/dist/agents/79-endurance-testing-agent.js +165 -0
- package/dist/agents/79-endurance-testing-agent.js.map +1 -0
- package/dist/agents/80-usability-testing-agent.d.ts +11 -0
- package/dist/agents/80-usability-testing-agent.d.ts.map +1 -0
- package/dist/agents/80-usability-testing-agent.js +196 -0
- package/dist/agents/80-usability-testing-agent.js.map +1 -0
- package/dist/agents/81-compatibility-testing-agent.d.ts +11 -0
- package/dist/agents/81-compatibility-testing-agent.d.ts.map +1 -0
- package/dist/agents/81-compatibility-testing-agent.js +224 -0
- package/dist/agents/81-compatibility-testing-agent.js.map +1 -0
- package/dist/agents/82-exploratory-testing-agent.d.ts +14 -0
- package/dist/agents/82-exploratory-testing-agent.d.ts.map +1 -0
- package/dist/agents/82-exploratory-testing-agent.js +345 -0
- package/dist/agents/82-exploratory-testing-agent.js.map +1 -0
- package/dist/agents/83-static-analysis-agent.d.ts +14 -0
- package/dist/agents/83-static-analysis-agent.d.ts.map +1 -0
- package/dist/agents/83-static-analysis-agent.js +261 -0
- package/dist/agents/83-static-analysis-agent.js.map +1 -0
- package/dist/agents/84-governance-testing-agent.d.ts +28 -0
- package/dist/agents/84-governance-testing-agent.d.ts.map +1 -0
- package/dist/agents/84-governance-testing-agent.js +591 -0
- package/dist/agents/84-governance-testing-agent.js.map +1 -0
- package/dist/agents/85-stagehand-agent.d.ts +22 -0
- package/dist/agents/85-stagehand-agent.d.ts.map +1 -0
- package/dist/agents/85-stagehand-agent.js +81 -0
- package/dist/agents/85-stagehand-agent.js.map +1 -0
- package/dist/agents/86-browser-use-agent.d.ts +31 -0
- package/dist/agents/86-browser-use-agent.d.ts.map +1 -0
- package/dist/agents/86-browser-use-agent.js +121 -0
- package/dist/agents/86-browser-use-agent.js.map +1 -0
- package/dist/agents/87-connection-mapper.d.ts +93 -0
- package/dist/agents/87-connection-mapper.d.ts.map +1 -0
- package/dist/agents/87-connection-mapper.js +658 -0
- package/dist/agents/87-connection-mapper.js.map +1 -0
- package/dist/agents/88-localhost-walkthrough.d.ts +272 -0
- package/dist/agents/88-localhost-walkthrough.d.ts.map +1 -0
- package/dist/agents/88-localhost-walkthrough.js +1203 -0
- package/dist/agents/88-localhost-walkthrough.js.map +1 -0
- package/dist/agents/89-repair-retest.d.ts +63 -0
- package/dist/agents/89-repair-retest.d.ts.map +1 -0
- package/dist/agents/89-repair-retest.js +227 -0
- package/dist/agents/89-repair-retest.js.map +1 -0
- package/dist/agents/90-response-shape-validator.d.ts +35 -0
- package/dist/agents/90-response-shape-validator.d.ts.map +1 -0
- package/dist/agents/90-response-shape-validator.js +156 -0
- package/dist/agents/90-response-shape-validator.js.map +1 -0
- package/dist/agents/91-boundary-fuzzer.d.ts +99 -0
- package/dist/agents/91-boundary-fuzzer.d.ts.map +1 -0
- package/dist/agents/91-boundary-fuzzer.js +0 -0
- package/dist/agents/91-boundary-fuzzer.js.map +1 -0
- package/dist/agents/92-repair-simulator.d.ts +89 -0
- package/dist/agents/92-repair-simulator.d.ts.map +1 -0
- package/dist/agents/92-repair-simulator.js +401 -0
- package/dist/agents/92-repair-simulator.js.map +1 -0
- package/dist/agents/93-env-var-auditor.d.ts +64 -0
- package/dist/agents/93-env-var-auditor.d.ts.map +1 -0
- package/dist/agents/93-env-var-auditor.js +435 -0
- package/dist/agents/93-env-var-auditor.js.map +1 -0
- package/dist/agents/94-schema-validator.d.ts +148 -0
- package/dist/agents/94-schema-validator.d.ts.map +1 -0
- package/dist/agents/94-schema-validator.js +567 -0
- package/dist/agents/94-schema-validator.js.map +1 -0
- package/dist/agents/95-contract-drift.d.ts +87 -0
- package/dist/agents/95-contract-drift.d.ts.map +1 -0
- package/dist/agents/95-contract-drift.js +335 -0
- package/dist/agents/95-contract-drift.js.map +1 -0
- package/dist/agents/96-cookie-security-auditor.d.ts +86 -0
- package/dist/agents/96-cookie-security-auditor.d.ts.map +1 -0
- package/dist/agents/96-cookie-security-auditor.js +339 -0
- package/dist/agents/96-cookie-security-auditor.js.map +1 -0
- package/dist/agents/97-healthcheck-validator.d.ts +62 -0
- package/dist/agents/97-healthcheck-validator.d.ts.map +1 -0
- package/dist/agents/97-healthcheck-validator.js +204 -0
- package/dist/agents/97-healthcheck-validator.js.map +1 -0
- package/dist/agents/98-cors-csp-auditor.d.ts +70 -0
- package/dist/agents/98-cors-csp-auditor.d.ts.map +1 -0
- package/dist/agents/98-cors-csp-auditor.js +308 -0
- package/dist/agents/98-cors-csp-auditor.js.map +1 -0
- package/dist/agents/99-logging-hygiene-auditor.d.ts +67 -0
- package/dist/agents/99-logging-hygiene-auditor.d.ts.map +1 -0
- package/dist/agents/99-logging-hygiene-auditor.js +325 -0
- package/dist/agents/99-logging-hygiene-auditor.js.map +1 -0
- package/dist/agents/base-agent.d.ts +75 -3
- package/dist/agents/base-agent.d.ts.map +1 -1
- package/dist/agents/base-agent.js +112 -1
- package/dist/agents/base-agent.js.map +1 -1
- package/dist/agents/browser-use-client.d.ts +68 -0
- package/dist/agents/browser-use-client.d.ts.map +1 -0
- package/dist/agents/browser-use-client.js +92 -0
- package/dist/agents/browser-use-client.js.map +1 -0
- package/dist/agents/lib/source-scan.d.ts +53 -0
- package/dist/agents/lib/source-scan.d.ts.map +1 -0
- package/dist/agents/lib/source-scan.js +279 -0
- package/dist/agents/lib/source-scan.js.map +1 -0
- package/dist/agents/registry.d.ts +27 -8
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +365 -151
- package/dist/agents/registry.js.map +1 -1
- package/dist/agents/stagehand-runner.d.ts +104 -0
- package/dist/agents/stagehand-runner.d.ts.map +1 -0
- package/dist/agents/stagehand-runner.js +153 -0
- package/dist/agents/stagehand-runner.js.map +1 -0
- package/dist/bridge/agent-registry.d.ts +21 -0
- package/dist/bridge/agent-registry.d.ts.map +1 -0
- package/dist/bridge/agent-registry.js +224 -0
- package/dist/bridge/agent-registry.js.map +1 -0
- package/dist/bridge/api-contract-reader.d.ts +55 -0
- package/dist/bridge/api-contract-reader.d.ts.map +1 -0
- package/dist/bridge/api-contract-reader.js +103 -0
- package/dist/bridge/api-contract-reader.js.map +1 -0
- package/dist/bridge/compliance-reader.d.ts +47 -0
- package/dist/bridge/compliance-reader.d.ts.map +1 -0
- package/dist/bridge/compliance-reader.js +91 -0
- package/dist/bridge/compliance-reader.js.map +1 -0
- package/dist/bridge/data-integrity-reader.d.ts +77 -0
- package/dist/bridge/data-integrity-reader.d.ts.map +1 -0
- package/dist/bridge/data-integrity-reader.js +110 -0
- package/dist/bridge/data-integrity-reader.js.map +1 -0
- package/dist/bridge/design-reader.d.ts +51 -0
- package/dist/bridge/design-reader.d.ts.map +1 -0
- package/dist/bridge/design-reader.js +105 -0
- package/dist/bridge/design-reader.js.map +1 -0
- package/dist/bridge/file-scanner.d.ts +21 -0
- package/dist/bridge/file-scanner.d.ts.map +1 -0
- package/dist/bridge/file-scanner.js +117 -0
- package/dist/bridge/file-scanner.js.map +1 -0
- package/dist/bridge/finding-normalize.d.ts +24 -0
- package/dist/bridge/finding-normalize.d.ts.map +1 -0
- package/dist/bridge/finding-normalize.js +46 -0
- package/dist/bridge/finding-normalize.js.map +1 -0
- package/dist/bridge/http-client.d.ts +44 -0
- package/dist/bridge/http-client.d.ts.map +1 -0
- package/dist/bridge/http-client.js +130 -0
- package/dist/bridge/http-client.js.map +1 -0
- package/dist/bridge/knowledge-reader.d.ts +10 -0
- package/dist/bridge/knowledge-reader.d.ts.map +1 -0
- package/dist/bridge/knowledge-reader.js +46 -0
- package/dist/bridge/knowledge-reader.js.map +1 -0
- package/dist/bridge/loop-engine-reader.d.ts +77 -0
- package/dist/bridge/loop-engine-reader.d.ts.map +1 -0
- package/dist/bridge/loop-engine-reader.js +73 -0
- package/dist/bridge/loop-engine-reader.js.map +1 -0
- package/dist/bridge/playwright-pool.d.ts +33 -0
- package/dist/bridge/playwright-pool.d.ts.map +1 -0
- package/dist/bridge/playwright-pool.js +89 -0
- package/dist/bridge/playwright-pool.js.map +1 -0
- package/dist/bridge/rate-limiter.d.ts +40 -0
- package/dist/bridge/rate-limiter.d.ts.map +1 -0
- package/dist/bridge/rate-limiter.js +33 -0
- package/dist/bridge/rate-limiter.js.map +1 -0
- package/dist/bridge/reliability-reader.d.ts +67 -0
- package/dist/bridge/reliability-reader.d.ts.map +1 -0
- package/dist/bridge/reliability-reader.js +146 -0
- package/dist/bridge/reliability-reader.js.map +1 -0
- package/dist/bridge/router.d.ts +26 -0
- package/dist/bridge/router.d.ts.map +1 -0
- package/dist/bridge/router.js +137 -0
- package/dist/bridge/router.js.map +1 -0
- package/dist/bridge/run-stream.d.ts +47 -0
- package/dist/bridge/run-stream.d.ts.map +1 -0
- package/dist/bridge/run-stream.js +67 -0
- package/dist/bridge/run-stream.js.map +1 -0
- package/dist/bridge/runs-reader.d.ts +41 -0
- package/dist/bridge/runs-reader.d.ts.map +1 -0
- package/dist/bridge/runs-reader.js +185 -0
- package/dist/bridge/runs-reader.js.map +1 -0
- package/dist/bridge/sentinel-reader.d.ts +55 -0
- package/dist/bridge/sentinel-reader.d.ts.map +1 -0
- package/dist/bridge/sentinel-reader.js +88 -0
- package/dist/bridge/sentinel-reader.js.map +1 -0
- package/dist/bridge/server.d.ts +83 -0
- package/dist/bridge/server.d.ts.map +1 -0
- package/dist/bridge/server.js +1103 -0
- package/dist/bridge/server.js.map +1 -0
- package/dist/bridge/shell-executor.d.ts +49 -0
- package/dist/bridge/shell-executor.d.ts.map +1 -0
- package/dist/bridge/shell-executor.js +181 -0
- package/dist/bridge/shell-executor.js.map +1 -0
- package/dist/bridge/tech-debt-reader.d.ts +57 -0
- package/dist/bridge/tech-debt-reader.d.ts.map +1 -0
- package/dist/bridge/tech-debt-reader.js +119 -0
- package/dist/bridge/tech-debt-reader.js.map +1 -0
- package/dist/bridge/types.d.ts +63 -0
- package/dist/bridge/types.d.ts.map +1 -0
- package/dist/bridge/types.js +7 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/clients/agent-mvp.d.ts +68 -0
- package/dist/clients/agent-mvp.d.ts.map +1 -0
- package/dist/clients/agent-mvp.js +102 -0
- package/dist/clients/agent-mvp.js.map +1 -0
- package/dist/clients/llm-council.d.ts +47 -0
- package/dist/clients/llm-council.d.ts.map +1 -0
- package/dist/clients/llm-council.js +52 -0
- package/dist/clients/llm-council.js.map +1 -0
- package/dist/clients/total-recall.d.ts +37 -0
- package/dist/clients/total-recall.d.ts.map +1 -0
- package/dist/clients/total-recall.js +239 -0
- package/dist/clients/total-recall.js.map +1 -0
- package/dist/core/agent-contract.d.ts +21 -0
- package/dist/core/agent-contract.d.ts.map +1 -0
- package/dist/core/agent-contract.js +18 -0
- package/dist/core/agent-contract.js.map +1 -0
- package/dist/core/api-contract/api-contract-validator.d.ts +178 -0
- package/dist/core/api-contract/api-contract-validator.d.ts.map +1 -0
- package/dist/core/api-contract/api-contract-validator.js +796 -0
- package/dist/core/api-contract/api-contract-validator.js.map +1 -0
- package/dist/core/api-contract/index.d.ts +16 -0
- package/dist/core/api-contract/index.d.ts.map +1 -0
- package/dist/core/api-contract/index.js +24 -0
- package/dist/core/api-contract/index.js.map +1 -0
- package/dist/core/api-contract/types.d.ts +235 -0
- package/dist/core/api-contract/types.d.ts.map +1 -0
- package/dist/core/api-contract/types.js +27 -0
- package/dist/core/api-contract/types.js.map +1 -0
- package/dist/core/blackboard/blackboard.d.ts +34 -0
- package/dist/core/blackboard/blackboard.d.ts.map +1 -0
- package/dist/core/blackboard/blackboard.js +133 -0
- package/dist/core/blackboard/blackboard.js.map +1 -0
- package/dist/core/blackboard/coordination.d.ts +27 -0
- package/dist/core/blackboard/coordination.d.ts.map +1 -0
- package/dist/core/blackboard/coordination.js +31 -0
- package/dist/core/blackboard/coordination.js.map +1 -0
- package/dist/core/blackboard/direct-channel.d.ts +26 -0
- package/dist/core/blackboard/direct-channel.d.ts.map +1 -0
- package/dist/core/blackboard/direct-channel.js +26 -0
- package/dist/core/blackboard/direct-channel.js.map +1 -0
- package/dist/core/blackboard/index.d.ts +10 -0
- package/dist/core/blackboard/index.d.ts.map +1 -0
- package/dist/core/blackboard/index.js +4 -0
- package/dist/core/blackboard/index.js.map +1 -0
- package/dist/core/blackboard/types.d.ts +36 -0
- package/dist/core/blackboard/types.d.ts.map +1 -0
- package/dist/core/blackboard/types.js +2 -0
- package/dist/core/blackboard/types.js.map +1 -0
- package/dist/core/canvas/schema.d.ts +81 -0
- package/dist/core/canvas/schema.d.ts.map +1 -0
- package/dist/core/canvas/schema.js +144 -0
- package/dist/core/canvas/schema.js.map +1 -0
- package/dist/core/canvas/store.d.ts +41 -0
- package/dist/core/canvas/store.d.ts.map +1 -0
- package/dist/core/canvas/store.js +121 -0
- package/dist/core/canvas/store.js.map +1 -0
- package/dist/core/ci-output.d.ts +1 -1
- package/dist/core/ci-output.d.ts.map +1 -1
- package/dist/core/ci-output.js +2 -0
- package/dist/core/ci-output.js.map +1 -1
- package/dist/core/cli.d.ts +15 -1
- package/dist/core/cli.d.ts.map +1 -1
- package/dist/core/cli.js +416 -35
- package/dist/core/cli.js.map +1 -1
- package/dist/core/compliance/auditor.d.ts +119 -0
- package/dist/core/compliance/auditor.d.ts.map +1 -0
- package/dist/core/compliance/auditor.js +577 -0
- package/dist/core/compliance/auditor.js.map +1 -0
- package/dist/core/compliance/index.d.ts +11 -0
- package/dist/core/compliance/index.d.ts.map +1 -0
- package/dist/core/compliance/index.js +10 -0
- package/dist/core/compliance/index.js.map +1 -0
- package/dist/core/compliance/types.d.ts +174 -0
- package/dist/core/compliance/types.d.ts.map +1 -0
- package/dist/core/compliance/types.js +12 -0
- package/dist/core/compliance/types.js.map +1 -0
- package/dist/core/conductor/conductor.d.ts +37 -0
- package/dist/core/conductor/conductor.d.ts.map +1 -0
- package/dist/core/conductor/conductor.js +96 -0
- package/dist/core/conductor/conductor.js.map +1 -0
- package/dist/core/conductor/index.d.ts +9 -0
- package/dist/core/conductor/index.d.ts.map +1 -0
- package/dist/core/conductor/index.js +3 -0
- package/dist/core/conductor/index.js.map +1 -0
- package/dist/core/conductor/model-router.d.ts +17 -0
- package/dist/core/conductor/model-router.d.ts.map +1 -0
- package/dist/core/conductor/model-router.js +29 -0
- package/dist/core/conductor/model-router.js.map +1 -0
- package/dist/core/conductor/types.d.ts +33 -0
- package/dist/core/conductor/types.d.ts.map +1 -0
- package/dist/core/conductor/types.js +2 -0
- package/dist/core/conductor/types.js.map +1 -0
- package/dist/core/config.d.ts +148 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +53 -4
- package/dist/core/config.js.map +1 -1
- package/dist/core/data-integrity/data-integrity.d.ts +291 -0
- package/dist/core/data-integrity/data-integrity.d.ts.map +1 -0
- package/dist/core/data-integrity/data-integrity.js +892 -0
- package/dist/core/data-integrity/data-integrity.js.map +1 -0
- package/dist/core/data-integrity/index.d.ts +16 -0
- package/dist/core/data-integrity/index.d.ts.map +1 -0
- package/dist/core/data-integrity/index.js +17 -0
- package/dist/core/data-integrity/index.js.map +1 -0
- package/dist/core/data-integrity/types.d.ts +236 -0
- package/dist/core/data-integrity/types.d.ts.map +1 -0
- package/dist/core/data-integrity/types.js +14 -0
- package/dist/core/data-integrity/types.js.map +1 -0
- package/dist/core/disaster-recovery/index.d.ts +13 -0
- package/dist/core/disaster-recovery/index.d.ts.map +1 -0
- package/dist/core/disaster-recovery/index.js +3 -0
- package/dist/core/disaster-recovery/index.js.map +1 -0
- package/dist/core/disaster-recovery/simulator.d.ts +158 -0
- package/dist/core/disaster-recovery/simulator.d.ts.map +1 -0
- package/dist/core/disaster-recovery/simulator.js +553 -0
- package/dist/core/disaster-recovery/simulator.js.map +1 -0
- package/dist/core/disaster-recovery/types.d.ts +299 -0
- package/dist/core/disaster-recovery/types.d.ts.map +1 -0
- package/dist/core/disaster-recovery/types.js +33 -0
- package/dist/core/disaster-recovery/types.js.map +1 -0
- package/dist/core/escalation/heal-or-ask.d.ts +20 -0
- package/dist/core/escalation/heal-or-ask.d.ts.map +1 -0
- package/dist/core/escalation/heal-or-ask.js +19 -0
- package/dist/core/escalation/heal-or-ask.js.map +1 -0
- package/dist/core/escalation/index.d.ts +9 -0
- package/dist/core/escalation/index.d.ts.map +1 -0
- package/dist/core/escalation/index.js +3 -0
- package/dist/core/escalation/index.js.map +1 -0
- package/dist/core/escalation/pause-gate.d.ts +48 -0
- package/dist/core/escalation/pause-gate.d.ts.map +1 -0
- package/dist/core/escalation/pause-gate.js +96 -0
- package/dist/core/escalation/pause-gate.js.map +1 -0
- package/dist/core/escalation/types.d.ts +33 -0
- package/dist/core/escalation/types.d.ts.map +1 -0
- package/dist/core/escalation/types.js +9 -0
- package/dist/core/escalation/types.js.map +1 -0
- package/dist/core/evidence.d.ts +32 -1
- package/dist/core/evidence.d.ts.map +1 -1
- package/dist/core/evidence.js +99 -1
- package/dist/core/evidence.js.map +1 -1
- package/dist/core/feature-bdd/fix.d.ts +84 -0
- package/dist/core/feature-bdd/fix.d.ts.map +1 -0
- package/dist/core/feature-bdd/fix.js +121 -0
- package/dist/core/feature-bdd/fix.js.map +1 -0
- package/dist/core/feature-bdd/generate.d.ts +96 -0
- package/dist/core/feature-bdd/generate.d.ts.map +1 -0
- package/dist/core/feature-bdd/generate.js +228 -0
- package/dist/core/feature-bdd/generate.js.map +1 -0
- package/dist/core/feature-bdd/llm-provider.d.ts +92 -0
- package/dist/core/feature-bdd/llm-provider.d.ts.map +1 -0
- package/dist/core/feature-bdd/llm-provider.js +187 -0
- package/dist/core/feature-bdd/llm-provider.js.map +1 -0
- package/dist/core/feature-bdd/run.d.ts +56 -0
- package/dist/core/feature-bdd/run.d.ts.map +1 -0
- package/dist/core/feature-bdd/run.js +175 -0
- package/dist/core/feature-bdd/run.js.map +1 -0
- package/dist/core/feature-bdd/schema.d.ts +111 -0
- package/dist/core/feature-bdd/schema.d.ts.map +1 -0
- package/dist/core/feature-bdd/schema.js +272 -0
- package/dist/core/feature-bdd/schema.js.map +1 -0
- package/dist/core/feature-bdd/store.d.ts +145 -0
- package/dist/core/feature-bdd/store.d.ts.map +1 -0
- package/dist/core/feature-bdd/store.js +470 -0
- package/dist/core/feature-bdd/store.js.map +1 -0
- package/dist/core/finding-correlation.d.ts +55 -0
- package/dist/core/finding-correlation.d.ts.map +1 -0
- package/dist/core/finding-correlation.js +96 -0
- package/dist/core/finding-correlation.js.map +1 -0
- package/dist/core/fix-loop.d.ts +20 -1
- package/dist/core/fix-loop.d.ts.map +1 -1
- package/dist/core/fix-loop.js +34 -0
- package/dist/core/fix-loop.js.map +1 -1
- package/dist/core/governance/calibration.d.ts +31 -0
- package/dist/core/governance/calibration.d.ts.map +1 -0
- package/dist/core/governance/calibration.js +78 -0
- package/dist/core/governance/calibration.js.map +1 -0
- package/dist/core/governance/degradation.d.ts +35 -0
- package/dist/core/governance/degradation.d.ts.map +1 -0
- package/dist/core/governance/degradation.js +25 -0
- package/dist/core/governance/degradation.js.map +1 -0
- package/dist/core/governance/ethical-constraint.d.ts +55 -0
- package/dist/core/governance/ethical-constraint.d.ts.map +1 -0
- package/dist/core/governance/ethical-constraint.js +98 -0
- package/dist/core/governance/ethical-constraint.js.map +1 -0
- package/dist/core/governance/index.d.ts +9 -0
- package/dist/core/governance/index.d.ts.map +1 -0
- package/dist/core/governance/index.js +9 -0
- package/dist/core/governance/index.js.map +1 -0
- package/dist/core/harness/audit-log.d.ts +12 -0
- package/dist/core/harness/audit-log.d.ts.map +1 -0
- package/dist/core/harness/audit-log.js +62 -0
- package/dist/core/harness/audit-log.js.map +1 -0
- package/dist/core/harness/authorization.d.ts +24 -0
- package/dist/core/harness/authorization.d.ts.map +1 -0
- package/dist/core/harness/authorization.js +48 -0
- package/dist/core/harness/authorization.js.map +1 -0
- package/dist/core/harness/harness.d.ts +64 -0
- package/dist/core/harness/harness.d.ts.map +1 -0
- package/dist/core/harness/harness.js +188 -0
- package/dist/core/harness/harness.js.map +1 -0
- package/dist/core/harness/index.d.ts +10 -0
- package/dist/core/harness/index.d.ts.map +1 -0
- package/dist/core/harness/index.js +4 -0
- package/dist/core/harness/index.js.map +1 -0
- package/dist/core/harness/types.d.ts +88 -0
- package/dist/core/harness/types.d.ts.map +1 -0
- package/dist/core/harness/types.js +2 -0
- package/dist/core/harness/types.js.map +1 -0
- package/dist/core/health-check.d.ts +6 -0
- package/dist/core/health-check.d.ts.map +1 -1
- package/dist/core/health-check.js +14 -2
- package/dist/core/health-check.js.map +1 -1
- package/dist/core/init.d.ts.map +1 -1
- package/dist/core/init.js +58 -18
- package/dist/core/init.js.map +1 -1
- package/dist/core/knowledge/cached-map.d.ts +17 -0
- package/dist/core/knowledge/cached-map.d.ts.map +1 -0
- package/dist/core/knowledge/cached-map.js +23 -0
- package/dist/core/knowledge/cached-map.js.map +1 -0
- package/dist/core/knowledge/index.d.ts +10 -0
- package/dist/core/knowledge/index.d.ts.map +1 -0
- package/dist/core/knowledge/index.js +4 -0
- package/dist/core/knowledge/index.js.map +1 -0
- package/dist/core/knowledge/system-map.d.ts +50 -0
- package/dist/core/knowledge/system-map.d.ts.map +1 -0
- package/dist/core/knowledge/system-map.js +121 -0
- package/dist/core/knowledge/system-map.js.map +1 -0
- package/dist/core/knowledge/traversal.d.ts +12 -0
- package/dist/core/knowledge/traversal.d.ts.map +1 -0
- package/dist/core/knowledge/traversal.js +37 -0
- package/dist/core/knowledge/traversal.js.map +1 -0
- package/dist/core/knowledge/types.d.ts +41 -0
- package/dist/core/knowledge/types.d.ts.map +1 -0
- package/dist/core/knowledge/types.js +2 -0
- package/dist/core/knowledge/types.js.map +1 -0
- package/dist/core/license-gen.d.ts +1 -1
- package/dist/core/license-gen.d.ts.map +1 -1
- package/dist/core/license-gen.js +10 -5
- package/dist/core/license-gen.js.map +1 -1
- package/dist/core/license.d.ts +12 -2
- package/dist/core/license.d.ts.map +1 -1
- package/dist/core/license.js +104 -28
- package/dist/core/license.js.map +1 -1
- package/dist/core/loop-engine/circuit-breaker.d.ts +24 -0
- package/dist/core/loop-engine/circuit-breaker.d.ts.map +1 -0
- package/dist/core/loop-engine/circuit-breaker.js +48 -0
- package/dist/core/loop-engine/circuit-breaker.js.map +1 -0
- package/dist/core/loop-engine/demo.d.ts +35 -0
- package/dist/core/loop-engine/demo.d.ts.map +1 -0
- package/dist/core/loop-engine/demo.js +71 -0
- package/dist/core/loop-engine/demo.js.map +1 -0
- package/dist/core/loop-engine/event-store.d.ts +8 -0
- package/dist/core/loop-engine/event-store.d.ts.map +1 -0
- package/dist/core/loop-engine/event-store.js +9 -0
- package/dist/core/loop-engine/event-store.js.map +1 -0
- package/dist/core/loop-engine/index.d.ts +11 -0
- package/dist/core/loop-engine/index.d.ts.map +1 -0
- package/dist/core/loop-engine/index.js +11 -0
- package/dist/core/loop-engine/index.js.map +1 -0
- package/dist/core/loop-engine/kernel.d.ts +66 -0
- package/dist/core/loop-engine/kernel.d.ts.map +1 -0
- package/dist/core/loop-engine/kernel.js +196 -0
- package/dist/core/loop-engine/kernel.js.map +1 -0
- package/dist/core/loop-engine/tracing.d.ts +12 -0
- package/dist/core/loop-engine/tracing.d.ts.map +1 -0
- package/dist/core/loop-engine/tracing.js +15 -0
- package/dist/core/loop-engine/tracing.js.map +1 -0
- package/dist/core/loop-engine/types.d.ts +92 -0
- package/dist/core/loop-engine/types.d.ts.map +1 -0
- package/dist/core/loop-engine/types.js +21 -0
- package/dist/core/loop-engine/types.js.map +1 -0
- package/dist/core/messages.d.ts +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +101 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/orchestrator.d.ts +87 -7
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +399 -33
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/phase-gate.d.ts +2 -2
- package/dist/core/quality-score/calculator.d.ts +125 -0
- package/dist/core/quality-score/calculator.d.ts.map +1 -0
- package/dist/core/quality-score/calculator.js +489 -0
- package/dist/core/quality-score/calculator.js.map +1 -0
- package/dist/core/quality-score/from-run.d.ts +27 -0
- package/dist/core/quality-score/from-run.d.ts.map +1 -0
- package/dist/core/quality-score/from-run.js +64 -0
- package/dist/core/quality-score/from-run.js.map +1 -0
- package/dist/core/quality-score/index.d.ts +9 -0
- package/dist/core/quality-score/index.d.ts.map +1 -0
- package/dist/core/quality-score/index.js +9 -0
- package/dist/core/quality-score/index.js.map +1 -0
- package/dist/core/quality-score/types.d.ts +225 -0
- package/dist/core/quality-score/types.d.ts.map +1 -0
- package/dist/core/quality-score/types.js +26 -0
- package/dist/core/quality-score/types.js.map +1 -0
- package/dist/core/report-html-script.d.ts +3 -0
- package/dist/core/report-html-script.d.ts.map +1 -0
- package/dist/core/report-html-script.js +47 -0
- package/dist/core/report-html-script.js.map +1 -0
- package/dist/core/report-html-styles.d.ts +3 -0
- package/dist/core/report-html-styles.d.ts.map +1 -0
- package/dist/core/report-html-styles.js +231 -0
- package/dist/core/report-html-styles.js.map +1 -0
- package/dist/core/report-html.d.ts +1 -1
- package/dist/core/report-html.d.ts.map +1 -1
- package/dist/core/report-html.js +5 -280
- package/dist/core/report-html.js.map +1 -1
- package/dist/core/report-upload.d.ts +8 -0
- package/dist/core/report-upload.d.ts.map +1 -1
- package/dist/core/report-upload.js +17 -4
- package/dist/core/report-upload.js.map +1 -1
- package/dist/core/run-counter.d.ts.map +1 -1
- package/dist/core/run-counter.js +25 -1
- package/dist/core/run-counter.js.map +1 -1
- package/dist/core/run-events/emitter.d.ts +112 -0
- package/dist/core/run-events/emitter.d.ts.map +1 -0
- package/dist/core/run-events/emitter.js +234 -0
- package/dist/core/run-events/emitter.js.map +1 -0
- package/dist/core/run-events/frame-sink.d.ts +24 -0
- package/dist/core/run-events/frame-sink.d.ts.map +1 -0
- package/dist/core/run-events/frame-sink.js +32 -0
- package/dist/core/run-events/frame-sink.js.map +1 -0
- package/dist/core/run-events/index.d.ts +7 -0
- package/dist/core/run-events/index.d.ts.map +1 -0
- package/dist/core/run-events/index.js +5 -0
- package/dist/core/run-events/index.js.map +1 -0
- package/dist/core/run-events/loop-event-sink.d.ts +56 -0
- package/dist/core/run-events/loop-event-sink.d.ts.map +1 -0
- package/dist/core/run-events/loop-event-sink.js +60 -0
- package/dist/core/run-events/loop-event-sink.js.map +1 -0
- package/dist/core/run-events/sse.d.ts +47 -0
- package/dist/core/run-events/sse.d.ts.map +1 -0
- package/dist/core/run-events/sse.js +64 -0
- package/dist/core/run-events/sse.js.map +1 -0
- package/dist/core/run-events/types.d.ts +147 -0
- package/dist/core/run-events/types.d.ts.map +1 -0
- package/dist/core/run-events/types.js +17 -0
- package/dist/core/run-events/types.js.map +1 -0
- package/dist/core/run-mode/capture.d.ts +37 -0
- package/dist/core/run-mode/capture.d.ts.map +1 -0
- package/dist/core/run-mode/capture.js +43 -0
- package/dist/core/run-mode/capture.js.map +1 -0
- package/dist/core/run-mode/index.d.ts +9 -0
- package/dist/core/run-mode/index.d.ts.map +1 -0
- package/dist/core/run-mode/index.js +3 -0
- package/dist/core/run-mode/index.js.map +1 -0
- package/dist/core/run-mode/run-mode.d.ts +35 -0
- package/dist/core/run-mode/run-mode.d.ts.map +1 -0
- package/dist/core/run-mode/run-mode.js +51 -0
- package/dist/core/run-mode/run-mode.js.map +1 -0
- package/dist/core/run-mode/types.d.ts +36 -0
- package/dist/core/run-mode/types.d.ts.map +1 -0
- package/dist/core/run-mode/types.js +15 -0
- package/dist/core/run-mode/types.js.map +1 -0
- package/dist/core/run-quota.d.ts +22 -0
- package/dist/core/run-quota.d.ts.map +1 -0
- package/dist/core/run-quota.js +44 -0
- package/dist/core/run-quota.js.map +1 -0
- package/dist/core/security-audit/index.d.ts +9 -0
- package/dist/core/security-audit/index.d.ts.map +1 -0
- package/dist/core/security-audit/index.js +10 -0
- package/dist/core/security-audit/index.js.map +1 -0
- package/dist/core/security-audit/sentinel.d.ts +196 -0
- package/dist/core/security-audit/sentinel.d.ts.map +1 -0
- package/dist/core/security-audit/sentinel.js +725 -0
- package/dist/core/security-audit/sentinel.js.map +1 -0
- package/dist/core/security-audit/types.d.ts +240 -0
- package/dist/core/security-audit/types.d.ts.map +1 -0
- package/dist/core/security-audit/types.js +42 -0
- package/dist/core/security-audit/types.js.map +1 -0
- package/dist/core/tech-debt/index.d.ts +11 -0
- package/dist/core/tech-debt/index.d.ts.map +1 -0
- package/dist/core/tech-debt/index.js +11 -0
- package/dist/core/tech-debt/index.js.map +1 -0
- package/dist/core/tech-debt/tech-debt-tracker.d.ts +46 -0
- package/dist/core/tech-debt/tech-debt-tracker.d.ts.map +1 -0
- package/dist/core/tech-debt/tech-debt-tracker.js +533 -0
- package/dist/core/tech-debt/tech-debt-tracker.js.map +1 -0
- package/dist/core/tech-debt/types.d.ts +263 -0
- package/dist/core/tech-debt/types.d.ts.map +1 -0
- package/dist/core/tech-debt/types.js +2 -0
- package/dist/core/tech-debt/types.js.map +1 -0
- package/dist/core/tester/diff-planner.d.ts +18 -0
- package/dist/core/tester/diff-planner.d.ts.map +1 -0
- package/dist/core/tester/diff-planner.js +37 -0
- package/dist/core/tester/diff-planner.js.map +1 -0
- package/dist/core/tester/honest-report.d.ts +13 -0
- package/dist/core/tester/honest-report.d.ts.map +1 -0
- package/dist/core/tester/honest-report.js +64 -0
- package/dist/core/tester/honest-report.js.map +1 -0
- package/dist/core/tester/index.d.ts +9 -0
- package/dist/core/tester/index.d.ts.map +1 -0
- package/dist/core/tester/index.js +3 -0
- package/dist/core/tester/index.js.map +1 -0
- package/dist/core/tester/types.d.ts +55 -0
- package/dist/core/tester/types.d.ts.map +1 -0
- package/dist/core/tester/types.js +8 -0
- package/dist/core/tester/types.js.map +1 -0
- package/dist/core/triggers/index.d.ts +9 -0
- package/dist/core/triggers/index.d.ts.map +1 -0
- package/dist/core/triggers/index.js +3 -0
- package/dist/core/triggers/index.js.map +1 -0
- package/dist/core/triggers/trigger-bus.d.ts +49 -0
- package/dist/core/triggers/trigger-bus.d.ts.map +1 -0
- package/dist/core/triggers/trigger-bus.js +167 -0
- package/dist/core/triggers/trigger-bus.js.map +1 -0
- package/dist/core/triggers/types.d.ts +56 -0
- package/dist/core/triggers/types.d.ts.map +1 -0
- package/dist/core/triggers/types.js +13 -0
- package/dist/core/triggers/types.js.map +1 -0
- package/dist/core/trust.d.ts +12 -0
- package/dist/core/trust.d.ts.map +1 -0
- package/dist/core/trust.js +13 -0
- package/dist/core/trust.js.map +1 -0
- package/dist/core/types.d.ts +24 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/ui-ux/index.d.ts +12 -0
- package/dist/core/ui-ux/index.d.ts.map +1 -0
- package/dist/core/ui-ux/index.js +13 -0
- package/dist/core/ui-ux/index.js.map +1 -0
- package/dist/core/ui-ux/orchestrator.d.ts +206 -0
- package/dist/core/ui-ux/orchestrator.d.ts.map +1 -0
- package/dist/core/ui-ux/orchestrator.js +672 -0
- package/dist/core/ui-ux/orchestrator.js.map +1 -0
- package/dist/core/ui-ux/types.d.ts +339 -0
- package/dist/core/ui-ux/types.d.ts.map +1 -0
- package/dist/core/ui-ux/types.js +17 -0
- package/dist/core/ui-ux/types.js.map +1 -0
- package/dist/enterprise/audit-trail.d.ts +31 -0
- package/dist/enterprise/audit-trail.d.ts.map +1 -0
- package/dist/enterprise/audit-trail.js +111 -0
- package/dist/enterprise/audit-trail.js.map +1 -0
- package/dist/enterprise/sla.d.ts +26 -0
- package/dist/enterprise/sla.d.ts.map +1 -0
- package/dist/enterprise/sla.js +101 -0
- package/dist/enterprise/sla.js.map +1 -0
- package/dist/helpers/element-discovery.js +1 -1
- package/dist/helpers/element-discovery.js.map +1 -1
- package/dist/helpers/env-resolver.d.ts +2 -2
- package/dist/helpers/quality-gate.d.ts.map +1 -1
- package/dist/helpers/quality-gate.js +21 -3
- package/dist/helpers/quality-gate.js.map +1 -1
- package/dist/helpers/shape-fingerprint.d.ts +18 -0
- package/dist/helpers/shape-fingerprint.d.ts.map +1 -0
- package/dist/helpers/shape-fingerprint.js +40 -0
- package/dist/helpers/shape-fingerprint.js.map +1 -0
- package/dist/sdk/custom-agent.d.ts +51 -0
- package/dist/sdk/custom-agent.d.ts.map +1 -0
- package/dist/sdk/custom-agent.js +94 -0
- package/dist/sdk/custom-agent.js.map +1 -0
- package/dist/sdk/index.d.ts +5 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +3 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/loader.d.ts +28 -0
- package/dist/sdk/loader.d.ts.map +1 -0
- package/dist/sdk/loader.js +140 -0
- package/dist/sdk/loader.js.map +1 -0
- package/package.json +46 -20
- package/agents/01-analyst.ts +0 -100
- package/agents/02-seed-architect.ts +0 -59
- package/agents/03-test-generator.ts +0 -191
- package/agents/04-unit-runner.ts +0 -160
- package/agents/05-browser-crawler.ts +0 -790
- package/agents/06-api-exerciser.ts +0 -311
- package/agents/07-security-scout.ts +0 -188
- package/agents/08-a11y-guardian.ts +0 -212
- package/agents/09-healer.ts +0 -228
- package/agents/10-reporter.ts +0 -266
- package/agents/11-fixer.ts +0 -253
- package/agents/12-ux-inspector.ts +0 -444
- package/agents/13-performance-profiler.ts +0 -271
- package/agents/14-data-integrity-auditor.ts +0 -417
- package/agents/15-regression-sentinel.ts +0 -307
- package/agents/16-chaos-agent.ts +0 -228
- package/agents/17-documentation-validator.ts +0 -266
- package/agents/18-integration-watchdog.ts +0 -178
- package/agents/19-tenant-isolation-auditor.ts +0 -199
- package/agents/20-workflow-completion-tester.ts +0 -203
- package/agents/21-state-session-tester.ts +0 -262
- package/agents/22-email-notification-verifier.ts +0 -244
- package/agents/23-migration-tester.ts +0 -80
- package/agents/24-signup-onboarding-tester.ts +0 -429
- package/agents/25-crud-flow-tester.ts +0 -302
- package/agents/26-form-validator.ts +0 -297
- package/agents/27-search-filter-tester.ts +0 -326
- package/agents/28-navigation-routing-tester.ts +0 -425
- package/agents/29-responsive-interaction-tester.ts +0 -350
- package/agents/30-multi-user-scenario-tester.ts +0 -319
- package/agents/31-load-tester.ts +0 -134
- package/agents/32-memory-leak-detector.ts +0 -194
- package/agents/33-bundle-analyzer.ts +0 -132
- package/agents/34-xss-scanner.ts +0 -191
- package/agents/35-csrf-tester.ts +0 -82
- package/agents/36-auth-fuzzer.ts +0 -194
- package/agents/37-dependency-scanner.ts +0 -176
- package/agents/38-secrets-scanner.ts +0 -137
- package/agents/39-api-contract-tester.ts +0 -199
- package/agents/40-rate-limit-tester.ts +0 -94
- package/agents/41-api-pagination-tester.ts +0 -97
- package/agents/42-graphql-tester.ts +0 -222
- package/agents/43-data-consistency-checker.ts +0 -205
- package/agents/44-backup-recovery-tester.ts +0 -152
- package/agents/45-data-privacy-scanner.ts +0 -125
- package/agents/46-seo-auditor.ts +0 -294
- package/agents/47-social-preview-tester.ts +0 -232
- package/agents/48-lighthouse-auditor.ts +0 -213
- package/agents/49-i18n-tester.ts +0 -198
- package/agents/50-timezone-tester.ts +0 -173
- package/agents/51-error-recovery-tester.ts +0 -155
- package/agents/52-offline-mode-tester.ts +0 -180
- package/agents/53-graceful-degradation-tester.ts +0 -156
- package/agents/54-websocket-tester.ts +0 -151
- package/agents/55-realtime-sync-tester.ts +0 -194
- package/agents/56-file-upload-tester.ts +0 -194
- package/agents/57-export-tester.ts +0 -174
- package/agents/58-payment-flow-tester.ts +0 -183
- package/agents/59-ssl-tls-auditor.ts +0 -141
- package/agents/60-dns-cdn-tester.ts +0 -117
- package/agents/61-docker-health-checker.ts +0 -111
- package/agents/62-env-config-validator.ts +0 -152
- package/agents/63-log-quality-auditor.ts +0 -136
- package/agents/64-analytics-tracker-tester.ts +0 -165
- package/agents/65-gdpr-compliance-tester.ts +0 -215
- package/agents/66-soc2-control-validator.ts +0 -210
- package/agents/67-wcag-aaa-tester.ts +0 -241
- package/agents/68-dead-code-detector.ts +0 -135
- package/agents/69-type-safety-auditor.ts +0 -164
- package/agents/70-complexity-analyzer.ts +0 -179
- package/agents/__tests__/01-analyst.test.ts +0 -188
- package/agents/__tests__/02-seed-architect.test.ts +0 -152
- package/agents/__tests__/03-test-generator-full.test.ts +0 -321
- package/agents/__tests__/03-test-generator.test.ts +0 -318
- package/agents/__tests__/04-unit-runner.test.ts +0 -320
- package/agents/__tests__/05-browser-crawler-beta.test.ts +0 -492
- package/agents/__tests__/05-browser-crawler-release.test.ts +0 -412
- package/agents/__tests__/05-browser-crawler-uat.test.ts +0 -578
- package/agents/__tests__/05-browser-crawler.test.ts +0 -518
- package/agents/__tests__/06-api-exerciser.test.ts +0 -619
- package/agents/__tests__/07-security-scout.test.ts +0 -382
- package/agents/__tests__/08-a11y-guardian.test.ts +0 -530
- package/agents/__tests__/09-healer.test.ts +0 -384
- package/agents/__tests__/10-reporter.test.ts +0 -366
- package/agents/__tests__/11-fixer.test.ts +0 -406
- package/agents/__tests__/12-ux-inspector-extended.test.ts +0 -465
- package/agents/__tests__/12-ux-inspector.test.ts +0 -443
- package/agents/__tests__/13-performance-profiler.test.ts +0 -411
- package/agents/__tests__/14-data-integrity-auditor-extended.test.ts +0 -573
- package/agents/__tests__/14-data-integrity-auditor.test.ts +0 -407
- package/agents/__tests__/15-regression-sentinel.test.ts +0 -657
- package/agents/__tests__/16-chaos-agent.test.ts +0 -427
- package/agents/__tests__/17-documentation-validator.test.ts +0 -402
- package/agents/__tests__/18-integration-watchdog.test.ts +0 -263
- package/agents/__tests__/19-tenant-isolation-auditor.test.ts +0 -400
- package/agents/__tests__/20-workflow-completion-tester.test.ts +0 -586
- package/agents/__tests__/21-state-session-tester.test.ts +0 -374
- package/agents/__tests__/22-email-notification-verifier.test.ts +0 -441
- package/agents/__tests__/23-migration-tester.test.ts +0 -145
- package/agents/__tests__/24-signup-onboarding-tester.test.ts +0 -274
- package/agents/__tests__/25-crud-flow-tester.test.ts +0 -322
- package/agents/__tests__/26-form-validator.test.ts +0 -345
- package/agents/__tests__/27-search-filter-tester.test.ts +0 -311
- package/agents/__tests__/28-navigation-routing-tester.test.ts +0 -328
- package/agents/__tests__/29-responsive-interaction-tester.test.ts +0 -297
- package/agents/__tests__/30-multi-user-scenario-tester.test.ts +0 -328
- package/agents/__tests__/31-load-tester.test.ts +0 -189
- package/agents/__tests__/32-memory-leak-detector.test.ts +0 -251
- package/agents/__tests__/33-bundle-analyzer.test.ts +0 -237
- package/agents/__tests__/34-xss-scanner.test.ts +0 -258
- package/agents/__tests__/35-csrf-tester.test.ts +0 -200
- package/agents/__tests__/36-auth-fuzzer.test.ts +0 -214
- package/agents/__tests__/37-dependency-scanner.test.ts +0 -266
- package/agents/__tests__/38-secrets-scanner.test.ts +0 -224
- package/agents/__tests__/39-api-contract-tester.test.ts +0 -312
- package/agents/__tests__/40-rate-limit-tester.test.ts +0 -192
- package/agents/__tests__/41-api-pagination-tester.test.ts +0 -198
- package/agents/__tests__/42-graphql-tester.test.ts +0 -252
- package/agents/__tests__/43-data-consistency-checker.test.ts +0 -232
- package/agents/__tests__/44-backup-recovery-tester.test.ts +0 -222
- package/agents/__tests__/45-data-privacy-scanner.test.ts +0 -223
- package/agents/__tests__/46-seo-auditor.test.ts +0 -261
- package/agents/__tests__/47-social-preview-tester.test.ts +0 -245
- package/agents/__tests__/48-lighthouse-auditor.test.ts +0 -276
- package/agents/__tests__/49-i18n-tester.test.ts +0 -201
- package/agents/__tests__/50-timezone-tester.test.ts +0 -172
- package/agents/__tests__/51-error-recovery-tester.test.ts +0 -162
- package/agents/__tests__/52-offline-mode-tester.test.ts +0 -164
- package/agents/__tests__/53-graceful-degradation-tester.test.ts +0 -168
- package/agents/__tests__/54-websocket-tester.test.ts +0 -157
- package/agents/__tests__/55-realtime-sync-tester.test.ts +0 -181
- package/agents/__tests__/56-file-upload-tester.test.ts +0 -172
- package/agents/__tests__/57-export-tester.test.ts +0 -169
- package/agents/__tests__/58-payment-flow-tester.test.ts +0 -182
- package/agents/__tests__/59-ssl-tls-auditor.test.ts +0 -179
- package/agents/__tests__/60-dns-cdn-tester.test.ts +0 -176
- package/agents/__tests__/61-docker-health-checker.test.ts +0 -150
- package/agents/__tests__/62-env-config-validator.test.ts +0 -166
- package/agents/__tests__/63-log-quality-auditor.test.ts +0 -175
- package/agents/__tests__/64-analytics-tracker-tester.test.ts +0 -158
- package/agents/__tests__/65-gdpr-compliance-tester.test.ts +0 -174
- package/agents/__tests__/66-soc2-control-validator.test.ts +0 -183
- package/agents/__tests__/67-wcag-aaa-tester.test.ts +0 -190
- package/agents/__tests__/68-dead-code-detector.test.ts +0 -174
- package/agents/__tests__/69-type-safety-auditor.test.ts +0 -173
- package/agents/__tests__/70-complexity-analyzer.test.ts +0 -177
- package/agents/__tests__/base-agent.test.ts +0 -188
- package/agents/__tests__/registry.test.ts +0 -218
- package/agents/base-agent.ts +0 -77
- package/agents/registry.ts +0 -277
- package/baselines/api-schemas/.gitkeep +0 -0
- package/baselines/performance/.gitkeep +0 -0
- package/baselines/screenshots/.gitkeep +0 -0
- package/core/__tests__/ci-output.test.ts +0 -430
- package/core/__tests__/cli.test.ts +0 -387
- package/core/__tests__/config.test.ts +0 -78
- package/core/__tests__/cost-tracker.test.ts +0 -158
- package/core/__tests__/evidence.test.ts +0 -265
- package/core/__tests__/fix-loop.test.ts +0 -210
- package/core/__tests__/health-check.test.ts +0 -44
- package/core/__tests__/init.test.ts +0 -609
- package/core/__tests__/integration.test.ts +0 -204
- package/core/__tests__/license-gen.test.ts +0 -227
- package/core/__tests__/license.test.ts +0 -326
- package/core/__tests__/multi-browser.test.ts +0 -278
- package/core/__tests__/orchestrator.test.ts +0 -520
- package/core/__tests__/phase-gate.test.ts +0 -43
- package/core/__tests__/report-html.test.ts +0 -398
- package/core/__tests__/report-upload.test.ts +0 -325
- package/core/__tests__/run-counter.test.ts +0 -234
- package/core/ci-output.ts +0 -240
- package/core/cli.ts +0 -232
- package/core/config.ts +0 -178
- package/core/cost-tracker.ts +0 -59
- package/core/evidence.ts +0 -132
- package/core/fix-loop.ts +0 -85
- package/core/health-check.ts +0 -54
- package/core/init.ts +0 -546
- package/core/license-gen.ts +0 -212
- package/core/license.ts +0 -208
- package/core/messages.ts +0 -67
- package/core/multi-browser.ts +0 -136
- package/core/orchestrator.ts +0 -356
- package/core/phase-gate.ts +0 -55
- package/core/report-html.ts +0 -657
- package/core/report-upload.ts +0 -188
- package/core/run-counter.ts +0 -175
- package/core/types.ts +0 -57
- package/dist/core/multi-browser.d.ts +0 -36
- package/dist/core/multi-browser.d.ts.map +0 -1
- package/dist/core/multi-browser.js +0 -88
- package/dist/core/multi-browser.js.map +0 -1
- package/helpers/__tests__/api-client.test.ts +0 -199
- package/helpers/__tests__/element-discovery.test.ts +0 -202
- package/helpers/__tests__/form-filler-extended.test.ts +0 -212
- package/helpers/__tests__/form-filler.test.ts +0 -99
- package/helpers/__tests__/modal-handler.test.ts +0 -152
- package/helpers/__tests__/navigation.test.ts +0 -214
- package/helpers/__tests__/quality-gate.test.ts +0 -117
- package/helpers/__tests__/screenshot.test.ts +0 -139
- package/helpers/__tests__/seed-validator.test.ts +0 -114
- package/helpers/api-client.ts +0 -111
- package/helpers/element-discovery.ts +0 -105
- package/helpers/env-resolver.ts +0 -69
- package/helpers/form-filler.ts +0 -126
- package/helpers/modal-handler.ts +0 -108
- package/helpers/navigation.ts +0 -100
- package/helpers/quality-gate.ts +0 -180
- package/helpers/screenshot.ts +0 -111
- package/helpers/seed-validator.ts +0 -70
|
@@ -0,0 +1,672 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI/UX Design Sub-Orchestrator (Agent #15 — "The Designer").
|
|
3
|
+
*
|
|
4
|
+
* Coordinates the design toolchain: composes engine agents (#8/#67 a11y,
|
|
5
|
+
* #12 UX Inspector, #29 Responsive, #80 Usability), enforces brand rules,
|
|
6
|
+
* gates on visual diff (skip unchanged screens), validates design-system
|
|
7
|
+
* conformance, generates mockup alternatives, and emits A/B hypotheses to
|
|
8
|
+
* Experiment Runner (#6). Reports a `DesignAuditReport` up to Master
|
|
9
|
+
* Orchestrator (#26) and a `DesignQualitySignal` to Quality Score (#14).
|
|
10
|
+
*
|
|
11
|
+
* Hard rules (enforced here, not just advisory):
|
|
12
|
+
* 1. A11y violations are BLOCKING — uxScore = 0 and a11yGatePassed = false.
|
|
13
|
+
* 2. UI changes are NEVER auto-shipped — mockups carry `requiresHumanApproval: true`.
|
|
14
|
+
* 3. Unchanged screens are SKIPPED (visual-diff gate, improvement #1).
|
|
15
|
+
* 4. Off-design-system values are FLAGGED (improvement #2).
|
|
16
|
+
* 5. Every suggestion becomes a testable hypothesis for #6 (improvement #10).
|
|
17
|
+
*
|
|
18
|
+
* Pure functions are exported separately so tests can exercise them directly
|
|
19
|
+
* without constructing the full orchestrator.
|
|
20
|
+
*
|
|
21
|
+
* Spec: blueprint/agents/15-ui-ux-design.md
|
|
22
|
+
*/
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Internal constants
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
const DEFAULT_MOTION_BUDGET_MS = 300;
|
|
27
|
+
const DEFAULT_MIN_MOCKUPS = 2;
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Pure helpers (exported for unit tests)
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
/**
|
|
32
|
+
* Visual-diff gate (improvement #1).
|
|
33
|
+
*
|
|
34
|
+
* Compares the current content hash to the previous snapshot.
|
|
35
|
+
* Returns `skipped: true` iff the hash is unchanged.
|
|
36
|
+
* New screens (no previous snapshot) are NOT skipped.
|
|
37
|
+
*/
|
|
38
|
+
export function evaluateDiffGate(current, previous) {
|
|
39
|
+
if (previous === null) {
|
|
40
|
+
return {
|
|
41
|
+
screenId: current.screenId,
|
|
42
|
+
skipped: false,
|
|
43
|
+
previousHash: null,
|
|
44
|
+
currentHash: current.contentHash,
|
|
45
|
+
reason: 'new-screen',
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const unchanged = previous.contentHash === current.contentHash;
|
|
49
|
+
return {
|
|
50
|
+
screenId: current.screenId,
|
|
51
|
+
skipped: unchanged,
|
|
52
|
+
previousHash: previous.contentHash,
|
|
53
|
+
currentHash: current.contentHash,
|
|
54
|
+
reason: unchanged ? 'unchanged' : 'hash-changed',
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Map severity strings from engine agents to `IssueSeverity`.
|
|
59
|
+
*
|
|
60
|
+
* Fail-CLOSED on unknown input: a malformed/unrecognised severity (e.g. a
|
|
61
|
+
* typo'd 'critcal', or an empty string) is treated conservatively as 'high'
|
|
62
|
+
* rather than 'info'. Mapping garbage to 'info' would grant it the 0-point
|
|
63
|
+
* "free pass" deduction in usability/responsive scoring and silently
|
|
64
|
+
* under-report a finding that may in fact be critical. The five known values
|
|
65
|
+
* (including 'info') map to themselves.
|
|
66
|
+
*/
|
|
67
|
+
export function mapSeverity(raw) {
|
|
68
|
+
switch (raw) {
|
|
69
|
+
case 'critical': return 'critical';
|
|
70
|
+
case 'high': return 'high';
|
|
71
|
+
case 'medium': return 'medium';
|
|
72
|
+
case 'low': return 'low';
|
|
73
|
+
case 'info': return 'info';
|
|
74
|
+
default: return 'high';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Valid responsive breakpoints — whitelist for fail-closed validation. */
|
|
78
|
+
const VALID_BREAKPOINTS = new Set([
|
|
79
|
+
'mobile',
|
|
80
|
+
'tablet',
|
|
81
|
+
'desktop',
|
|
82
|
+
]);
|
|
83
|
+
/**
|
|
84
|
+
* Validate an engine-provided breakpoint string against the known set.
|
|
85
|
+
*
|
|
86
|
+
* Unknown or absent values fall back to 'desktop' via a REAL membership check —
|
|
87
|
+
* not a blind `as Breakpoint` cast that would let an invalid runtime value
|
|
88
|
+
* (e.g. "widescreen") masquerade as a typed Breakpoint and flow downstream.
|
|
89
|
+
* The cast after the `.has()` guard is sound: the runtime check has already
|
|
90
|
+
* proven `raw` is one of the three valid breakpoints.
|
|
91
|
+
*/
|
|
92
|
+
export function toBreakpoint(raw) {
|
|
93
|
+
return raw !== undefined && VALID_BREAKPOINTS.has(raw)
|
|
94
|
+
? raw
|
|
95
|
+
: 'desktop';
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Convert axe-core-style impact strings to the `A11yViolation['impact']` enum.
|
|
99
|
+
* Unknown values default to 'minor' (never silently inflates to critical).
|
|
100
|
+
*/
|
|
101
|
+
export function mapAxeImpact(impact) {
|
|
102
|
+
switch (impact.toLowerCase()) {
|
|
103
|
+
case 'critical': return 'critical';
|
|
104
|
+
case 'serious': return 'serious';
|
|
105
|
+
case 'moderate': return 'moderate';
|
|
106
|
+
default: return 'minor';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Map a core `FindingSeverity` to the `A11yViolation['impact']` enum.
|
|
111
|
+
*
|
|
112
|
+
* `composeA11yViolations` receives `A11yEngineFinding`s whose `.severity` is a
|
|
113
|
+
* core `FindingSeverity` (`Pick<Finding, 'severity'>`) — NOT an axe-core impact
|
|
114
|
+
* string. Engine agents #8/#67 have already mapped axe impact → severity
|
|
115
|
+
* (agent #8: serious→high, moderate→medium, minor→low). This is the inverse of
|
|
116
|
+
* that map, so the axe→severity→impact round-trip preserves fidelity: a
|
|
117
|
+
* serious a11y finding (stored as severity 'high') surfaces as impact 'serious'
|
|
118
|
+
* rather than collapsing to 'minor'. Unknown → 'minor' (never inflates).
|
|
119
|
+
*
|
|
120
|
+
* (Historically the reader/orchestrator called `mapAxeImpact(f.severity)` here,
|
|
121
|
+
* which only recognises axe strings, so every non-'critical' severity — the
|
|
122
|
+
* common case — silently degraded to 'minor'. Only the dashboard's S6 posture
|
|
123
|
+
* view reads `.impact`, so this correction has no other consumer.)
|
|
124
|
+
*/
|
|
125
|
+
export function severityToImpact(severity) {
|
|
126
|
+
switch (severity.toLowerCase()) {
|
|
127
|
+
case 'critical': return 'critical';
|
|
128
|
+
case 'high': return 'serious';
|
|
129
|
+
case 'medium': return 'moderate';
|
|
130
|
+
case 'low': return 'minor';
|
|
131
|
+
case 'info': return 'minor';
|
|
132
|
+
default: return 'minor';
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Compose engine-agent a11y findings into structured `A11yViolation[]`.
|
|
137
|
+
*
|
|
138
|
+
* ALL violations produced here carry `blocking: true` — the type system enforces
|
|
139
|
+
* this and callers cannot downgrade them (spec: "a11y is a hard floor").
|
|
140
|
+
*/
|
|
141
|
+
export function composeA11yViolations(engineOutput, screenId) {
|
|
142
|
+
return engineOutput.findings.map((f) => {
|
|
143
|
+
// Extract axe rule id from the finding id where possible.
|
|
144
|
+
// Engine agents encode it as "<agentId>-axe-<module>-<ruleId>".
|
|
145
|
+
const parts = f.id.split('-');
|
|
146
|
+
const ruleId = parts.length >= 4 ? parts.slice(3).join('-') : f.id;
|
|
147
|
+
const violation = {
|
|
148
|
+
ruleId,
|
|
149
|
+
description: f.description,
|
|
150
|
+
impact: severityToImpact(f.severity),
|
|
151
|
+
nodes: [screenId],
|
|
152
|
+
helpUrl: f.suggestedFix ?? `https://dequeuniversity.com/rules/axe/${ruleId}`,
|
|
153
|
+
blocking: true, // STRUCTURAL — cannot be set to false by callers
|
|
154
|
+
};
|
|
155
|
+
return violation;
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Check a computed style map against the token registry (improvement #2).
|
|
160
|
+
*
|
|
161
|
+
* `computedStyles` is a map of `cssProperty -> computedValue` for one screen.
|
|
162
|
+
* Values not present in the registry are returned as `OffSystemValue` entries.
|
|
163
|
+
*
|
|
164
|
+
* Must-Fix #6: The `nearestToken` field reports the FIRST color token found in
|
|
165
|
+
* the registry when the off-system value is a hex color — it is NOT a
|
|
166
|
+
* color-distance-based nearest match. The field is preserved for callers that
|
|
167
|
+
* display a "did you mean?" hint; its approximate nature is documented here.
|
|
168
|
+
* A full chroma-distance implementation is a phase-2 enhancement.
|
|
169
|
+
*/
|
|
170
|
+
export function checkTokenConformance(screenId, computedStyles, tokenRegistry) {
|
|
171
|
+
const registeredValues = new Set(tokenRegistry.map((t) => t.value.toLowerCase()));
|
|
172
|
+
const offSystem = [];
|
|
173
|
+
for (const [prop, value] of computedStyles) {
|
|
174
|
+
const normalised = value.trim().toLowerCase();
|
|
175
|
+
if (!registeredValues.has(normalised)) {
|
|
176
|
+
// Return the first color token as a hint when the off-system value is a hex color.
|
|
177
|
+
// This is a registry-order hint, not a chroma-distance nearest-match.
|
|
178
|
+
const firstColorToken = normalised.startsWith('#')
|
|
179
|
+
? tokenRegistry.find((t) => t.category === 'color')?.name
|
|
180
|
+
: undefined;
|
|
181
|
+
offSystem.push({
|
|
182
|
+
cssProperty: prop,
|
|
183
|
+
computedValue: value,
|
|
184
|
+
nearestToken: firstColorToken,
|
|
185
|
+
element: screenId,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
screenId,
|
|
191
|
+
offSystemValues: offSystem,
|
|
192
|
+
conformant: offSystem.length === 0,
|
|
193
|
+
// Real denominator for the brand-conformance ratio: how many declarations
|
|
194
|
+
// were actually inspected. 0 here => "no brand data" (scored N/A downstream,
|
|
195
|
+
// never a free perfect pass).
|
|
196
|
+
checkedCount: computedStyles.size,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Compute the usability score for one screen (improvement #5).
|
|
201
|
+
*
|
|
202
|
+
* Derives a 0..100 score from UX engine findings mapped to Nielsen heuristics,
|
|
203
|
+
* fused with Watcher friction points (improvement #6 — real-user grounded).
|
|
204
|
+
* Score is truncated (never rounded up) per Avi's QA standard.
|
|
205
|
+
*
|
|
206
|
+
* Math: each heuristic violation deducts points based on severity:
|
|
207
|
+
* critical -20, high -10, medium -5, low -2
|
|
208
|
+
* Watcher friction deduction: frictionPoints.length * 2 (applied ONCE, outside the loop)
|
|
209
|
+
* Cognitive load = violations.length + friction (clamped 0..10).
|
|
210
|
+
*
|
|
211
|
+
* Must-Fix #2: Watcher friction deduction is applied ONCE per screen (outside
|
|
212
|
+
* the findings loop). The previous implementation applied it inside the loop,
|
|
213
|
+
* causing it to accumulate N*friction for N findings — inflating deductions by
|
|
214
|
+
* 2× per additional finding. An empty findings list would also silently ignore
|
|
215
|
+
* friction entirely.
|
|
216
|
+
*/
|
|
217
|
+
export function computeUsabilityScore(screenId, uxOutput, watcherFrictionPoints) {
|
|
218
|
+
const heuristicMap = {
|
|
219
|
+
'error-boundary': 'help-users-recover',
|
|
220
|
+
'loading-stuck': 'visibility-of-system-status',
|
|
221
|
+
'empty-state': 'recognition-over-recall',
|
|
222
|
+
'form-validation': 'error-prevention',
|
|
223
|
+
'truncated-text': 'aesthetic-minimalist',
|
|
224
|
+
};
|
|
225
|
+
const violations = [];
|
|
226
|
+
let deduction = 0;
|
|
227
|
+
for (const f of uxOutput.findings) {
|
|
228
|
+
const severity = mapSeverity(f.severity);
|
|
229
|
+
// Heuristic inference from finding id keyword
|
|
230
|
+
let heuristic = 'help-documentation';
|
|
231
|
+
for (const [keyword, h] of Object.entries(heuristicMap)) {
|
|
232
|
+
if (f.id.includes(keyword)) {
|
|
233
|
+
heuristic = h;
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const severityDeduction = severity === 'critical' ? 20 :
|
|
238
|
+
severity === 'high' ? 10 :
|
|
239
|
+
severity === 'medium' ? 5 :
|
|
240
|
+
severity === 'low' ? 2 :
|
|
241
|
+
0;
|
|
242
|
+
deduction += severityDeduction;
|
|
243
|
+
violations.push({ heuristic, description: f.description, severity });
|
|
244
|
+
}
|
|
245
|
+
// Must-Fix #2: Watcher friction deduction is applied ONCE per screen,
|
|
246
|
+
// outside the per-finding loop, so it does not compound with finding count.
|
|
247
|
+
deduction += watcherFrictionPoints.length * 2;
|
|
248
|
+
// Clamp base score to [0, 100], truncate (never round up)
|
|
249
|
+
const rawScore = Math.max(0, 100 - deduction);
|
|
250
|
+
const score = Math.trunc(rawScore * 100) / 100; // truncate to 2 dp
|
|
251
|
+
// Cognitive load: 1 per violation + 1 per friction point, clamped 0..10
|
|
252
|
+
const cognitiveLoad = Math.min(10, violations.length + watcherFrictionPoints.length);
|
|
253
|
+
return {
|
|
254
|
+
screenId,
|
|
255
|
+
score,
|
|
256
|
+
cognitiveLoad,
|
|
257
|
+
violations,
|
|
258
|
+
watcherFrictionPoints: [...watcherFrictionPoints],
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Compose responsive engine output into structured `ResponsiveResult` (improvement #9).
|
|
263
|
+
*/
|
|
264
|
+
export function composeResponsiveResult(screenId, engineOutput) {
|
|
265
|
+
const issues = engineOutput.findings.map((f) => {
|
|
266
|
+
const bp = toBreakpoint(f.breakpoint);
|
|
267
|
+
return {
|
|
268
|
+
breakpoint: bp,
|
|
269
|
+
description: f.description,
|
|
270
|
+
severity: mapSeverity(f.severity),
|
|
271
|
+
};
|
|
272
|
+
});
|
|
273
|
+
return {
|
|
274
|
+
screenId,
|
|
275
|
+
issues,
|
|
276
|
+
passed: issues.filter((i) => i.severity === 'critical' || i.severity === 'high').length === 0,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/** Severity ordering for ranked output (0 = highest priority). */
|
|
280
|
+
const SEVERITY_RANK = {
|
|
281
|
+
critical: 0,
|
|
282
|
+
high: 1,
|
|
283
|
+
medium: 2,
|
|
284
|
+
low: 3,
|
|
285
|
+
info: 4,
|
|
286
|
+
};
|
|
287
|
+
/**
|
|
288
|
+
* Build visual design issues from brand conformance check.
|
|
289
|
+
*
|
|
290
|
+
* Checks each `OffSystemValue` against `BrandGuidelines` and emits a
|
|
291
|
+
* `VisualDesignIssue` per violation. The color/font/spacing checks are
|
|
292
|
+
* deterministic against the provided guidelines (improvement #3 — brand memory).
|
|
293
|
+
*
|
|
294
|
+
* Output is RANKED by severity (critical → info) so the most important fixes
|
|
295
|
+
* surface first regardless of input order — the spec's "ranked fixes" rule is
|
|
296
|
+
* enforced here, not left to caller input order.
|
|
297
|
+
*/
|
|
298
|
+
export function buildBrandConformanceIssues(offSystemValues, brandGuidelines) {
|
|
299
|
+
const issues = [];
|
|
300
|
+
for (const osv of offSystemValues) {
|
|
301
|
+
const prop = osv.cssProperty.toLowerCase();
|
|
302
|
+
let category = 'consistency';
|
|
303
|
+
let detected = false;
|
|
304
|
+
if (prop === 'color' || prop === 'background-color' || prop === 'border-color') {
|
|
305
|
+
const normalised = osv.computedValue.toLowerCase();
|
|
306
|
+
if (!brandGuidelines.allowedColors.includes(normalised)) {
|
|
307
|
+
category = 'brand-adherence';
|
|
308
|
+
detected = true;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
else if (prop === 'font-family') {
|
|
312
|
+
// Match the PRIMARY font in the stack as a WHOLE token (case-insensitive),
|
|
313
|
+
// NOT a substring — otherwise an off-brand "MyInterFont" would pass merely
|
|
314
|
+
// by containing an allowed "Inter". Strip quotes and take the first family.
|
|
315
|
+
const primaryFont = osv.computedValue
|
|
316
|
+
.split(',')[0]
|
|
317
|
+
.trim()
|
|
318
|
+
.replace(/^["']|["']$/g, '')
|
|
319
|
+
.toLowerCase();
|
|
320
|
+
const onBrand = brandGuidelines.allowedFonts.some((f) => f.toLowerCase() === primaryFont);
|
|
321
|
+
if (!onBrand) {
|
|
322
|
+
category = 'typography';
|
|
323
|
+
detected = true;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
else if (prop === 'margin' || prop === 'padding' || prop === 'gap') {
|
|
327
|
+
// Check against spacing scale (px values as strings like "16px").
|
|
328
|
+
const pxMatch = osv.computedValue.match(/^(\d+(?:\.\d+)?)px$/);
|
|
329
|
+
if (pxMatch !== null) {
|
|
330
|
+
const pxVal = parseFloat(pxMatch[1]);
|
|
331
|
+
if (!brandGuidelines.spacingScale.includes(pxVal)) {
|
|
332
|
+
category = 'spacing';
|
|
333
|
+
detected = true;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
else if (/\d/.test(osv.computedValue)) {
|
|
337
|
+
// A NUMERIC spacing value in a non-px unit (rem/em/%/vh/…) that is already
|
|
338
|
+
// off-registry. We cannot verify it against the px spacing scale, so we
|
|
339
|
+
// fail CLOSED and flag it rather than let an off-brand spacing value escape
|
|
340
|
+
// silently. Bare keywords (auto/inherit) contain no digit and are skipped.
|
|
341
|
+
category = 'spacing';
|
|
342
|
+
detected = true;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
if (detected) {
|
|
346
|
+
issues.push({
|
|
347
|
+
category,
|
|
348
|
+
description: `Off-brand value "${osv.computedValue}" on property "${osv.cssProperty}" (element: ${osv.element})`,
|
|
349
|
+
suggestedFix: osv.nearestToken !== undefined
|
|
350
|
+
? `Replace with design token "${osv.nearestToken}"`
|
|
351
|
+
: `Use a value from the brand ${category} scale`,
|
|
352
|
+
severity: category === 'brand-adherence' ? 'high' : 'medium',
|
|
353
|
+
element: osv.element,
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
// Rank by severity (critical first) so the highest-priority fixes lead.
|
|
358
|
+
issues.sort((a, b) => SEVERITY_RANK[a.severity] - SEVERITY_RANK[b.severity]);
|
|
359
|
+
return issues;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Generate mockup alternative stubs for a flagged screen (improvement #4).
|
|
363
|
+
*
|
|
364
|
+
* In production the orchestrator would invoke Figma MCP / Canva / image-gen here.
|
|
365
|
+
* This layer returns deterministic stubs with `requiresHumanApproval: true` so the
|
|
366
|
+
* type system enforces the "never auto-ships UI" contract.
|
|
367
|
+
*
|
|
368
|
+
* `count` must be at least 2 (spec requirement). Callers should pass
|
|
369
|
+
* `config.minMockupAlternatives ?? 2`.
|
|
370
|
+
*/
|
|
371
|
+
export function generateMockupAlternatives(screenId, issueDescriptions, source, count, now) {
|
|
372
|
+
const safeCount = Math.max(2, count);
|
|
373
|
+
const ts = new Date(now()).toISOString();
|
|
374
|
+
return Array.from({ length: safeCount }, (_, i) => {
|
|
375
|
+
const id = `${screenId}-alt-${i + 1}`;
|
|
376
|
+
const rationale = issueDescriptions[i] !== undefined
|
|
377
|
+
? `Alternative ${i + 1}: addresses "${issueDescriptions[i]}"`
|
|
378
|
+
: `Alternative ${i + 1}: improved visual hierarchy and spacing`;
|
|
379
|
+
const alt = {
|
|
380
|
+
id,
|
|
381
|
+
screenId,
|
|
382
|
+
rationale,
|
|
383
|
+
source,
|
|
384
|
+
assetUrl: `design://mockup/${screenId}/${id}?ts=${ts}`,
|
|
385
|
+
approvalStatus: null, // pending human decision
|
|
386
|
+
requiresHumanApproval: true, // STRUCTURAL — cannot be set to false
|
|
387
|
+
};
|
|
388
|
+
return alt;
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Emit an Experiment Runner (#6) hypothesis from an accepted mockup (improvement #10).
|
|
393
|
+
*
|
|
394
|
+
* Every suggestion is a testable A/B hypothesis. The orchestrator emits one per
|
|
395
|
+
* accepted mockup alternative; #6 owns the experiment lifecycle from here.
|
|
396
|
+
*/
|
|
397
|
+
export function emitExperimentHypothesis(mockup, expectedImpact, now) {
|
|
398
|
+
return {
|
|
399
|
+
id: `hyp-${mockup.id}-${now()}`,
|
|
400
|
+
screenId: mockup.screenId,
|
|
401
|
+
change: mockup.rationale,
|
|
402
|
+
expectedImpact,
|
|
403
|
+
emittedAt: new Date(now()).toISOString(),
|
|
404
|
+
mockupId: mockup.id,
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Compute the design quality signal for #14 (improvement #2 / #7).
|
|
409
|
+
*
|
|
410
|
+
* Sub-scores:
|
|
411
|
+
* a11y: 0 if any violation, else 1 (hard floor — improvement #7)
|
|
412
|
+
* visual: 1 - (criticalIssues * 0.25 + highIssues * 0.10) clamped [0,1]
|
|
413
|
+
* usability: uxScore.score / 100
|
|
414
|
+
* responsive: 1 - (failedScreenRatio)
|
|
415
|
+
* brandConformance: 1 - (offSystemCount / declarationsChecked), or N/A (null)
|
|
416
|
+
* when nothing was checked
|
|
417
|
+
*
|
|
418
|
+
* Overall uxScore = mean of the sub-scores that were actually MEASURED (brand
|
|
419
|
+
* conformance only participates when there was brand data), then clamped to 0
|
|
420
|
+
* when any a11y violation exists (a11y = hard floor). Truncated, never rounded up.
|
|
421
|
+
*/
|
|
422
|
+
export function computeDesignQualitySignal(componentId, a11yViolations, visualIssues, usabilityScore, responsiveResults, tokenConformanceResults, scoredAt) {
|
|
423
|
+
function trunc2(n) {
|
|
424
|
+
return Math.trunc(n * 100) / 100;
|
|
425
|
+
}
|
|
426
|
+
function clamp01(n) {
|
|
427
|
+
return Math.max(0, Math.min(1, n));
|
|
428
|
+
}
|
|
429
|
+
const a11yScore = a11yViolations.length === 0 ? 1 : 0;
|
|
430
|
+
const criticalVisual = visualIssues.filter((i) => i.severity === 'critical').length;
|
|
431
|
+
const highVisual = visualIssues.filter((i) => i.severity === 'high').length;
|
|
432
|
+
const visualScore = clamp01(1 - (criticalVisual * 0.25 + highVisual * 0.10));
|
|
433
|
+
const usabilityNorm = clamp01(usabilityScore / 100);
|
|
434
|
+
const totalResponsive = responsiveResults.length;
|
|
435
|
+
const failedResponsive = responsiveResults.filter((r) => !r.passed).length;
|
|
436
|
+
const responsiveScore = totalResponsive > 0
|
|
437
|
+
? clamp01(1 - failedResponsive / totalResponsive)
|
|
438
|
+
: 1;
|
|
439
|
+
// Honest brand-conformance ratio: off-system declarations as a fraction of the
|
|
440
|
+
// TOTAL declarations actually checked (checkedCount). This replaces the old
|
|
441
|
+
// `1 - offSystemTotal / (offSystemTotal + numResults)` fudge whose +1-per-result
|
|
442
|
+
// denominator could never reach 0 and structurally softened bad brand scores.
|
|
443
|
+
//
|
|
444
|
+
// Fail-CLOSED on missing data: when nothing was checked (totalChecked === 0 —
|
|
445
|
+
// e.g. no computed styles were supplied) brandConformance is N/A (null) and is
|
|
446
|
+
// EXCLUDED from the mean. It is NOT scored as a perfect 1; absent evidence must
|
|
447
|
+
// never read as a pass.
|
|
448
|
+
const totalChecked = tokenConformanceResults.reduce((acc, r) => acc + r.checkedCount, 0);
|
|
449
|
+
const offSystemTotal = tokenConformanceResults.reduce((acc, r) => acc + r.offSystemValues.length, 0);
|
|
450
|
+
const brandScore = totalChecked > 0
|
|
451
|
+
? clamp01(1 - offSystemTotal / totalChecked)
|
|
452
|
+
: null;
|
|
453
|
+
// Mean over the sub-scores that were actually measured. Brand conformance only
|
|
454
|
+
// participates when there was brand data to measure (null => omitted).
|
|
455
|
+
const measuredSubScores = [a11yScore, visualScore, usabilityNorm, responsiveScore];
|
|
456
|
+
if (brandScore !== null) {
|
|
457
|
+
measuredSubScores.push(brandScore);
|
|
458
|
+
}
|
|
459
|
+
const rawMean = measuredSubScores.reduce((acc, n) => acc + n, 0) / measuredSubScores.length;
|
|
460
|
+
// A11y hard floor: if any violation, uxScore = 0 regardless of other sub-scores.
|
|
461
|
+
const uxScore = a11yViolations.length > 0 ? 0 : trunc2(rawMean);
|
|
462
|
+
return {
|
|
463
|
+
componentId,
|
|
464
|
+
uxScore,
|
|
465
|
+
breakdown: {
|
|
466
|
+
visualDesign: trunc2(visualScore),
|
|
467
|
+
usability: trunc2(usabilityNorm),
|
|
468
|
+
a11y: a11yScore,
|
|
469
|
+
responsive: trunc2(responsiveScore),
|
|
470
|
+
brandConformance: brandScore === null ? null : trunc2(brandScore),
|
|
471
|
+
},
|
|
472
|
+
scoredAt,
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
// ---------------------------------------------------------------------------
|
|
476
|
+
// DesignOrchestrator — stateful, event-driven sub-orchestrator
|
|
477
|
+
// ---------------------------------------------------------------------------
|
|
478
|
+
/**
|
|
479
|
+
* Design sub-orchestrator for Agent #15.
|
|
480
|
+
*
|
|
481
|
+
* Maintains a snapshot cache for visual-diff gating (improvement #1).
|
|
482
|
+
* All mutation methods are pure-functional over their inputs; side-effects
|
|
483
|
+
* (tool invocations, MCP calls) are expected to happen at the *caller* level
|
|
484
|
+
* (the run engine), keeping this class deterministic and testable.
|
|
485
|
+
*
|
|
486
|
+
* Usage pattern:
|
|
487
|
+
* const orchestrator = new DesignOrchestrator(config);
|
|
488
|
+
* const report = orchestrator.audit(runId, screens, a11yOut, uxOut, responsiveOut);
|
|
489
|
+
* // Report is immutable; caller routes to Dashboard, #14, #26.
|
|
490
|
+
*/
|
|
491
|
+
export class DesignOrchestrator {
|
|
492
|
+
config;
|
|
493
|
+
/** Snapshot cache: screenId → last known hash. Visual-diff gate (improvement #1). */
|
|
494
|
+
snapshotCache = new Map();
|
|
495
|
+
constructor(config = {}) {
|
|
496
|
+
this.config = {
|
|
497
|
+
brandGuidelines: config.brandGuidelines,
|
|
498
|
+
tokenRegistry: config.tokenRegistry ?? [],
|
|
499
|
+
motionBudgetMs: config.motionBudgetMs ?? DEFAULT_MOTION_BUDGET_MS,
|
|
500
|
+
minMockupAlternatives: Math.max(2, config.minMockupAlternatives ?? DEFAULT_MIN_MOCKUPS),
|
|
501
|
+
clock: config.clock ?? (() => Date.now()),
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
// -------------------------------------------------------------------------
|
|
505
|
+
// Snapshot cache management (visual-diff gate)
|
|
506
|
+
// -------------------------------------------------------------------------
|
|
507
|
+
/** Update the cached snapshot for a screen (called after each audit). */
|
|
508
|
+
updateSnapshot(snapshot) {
|
|
509
|
+
this.snapshotCache.set(snapshot.screenId, snapshot);
|
|
510
|
+
}
|
|
511
|
+
/** Return the cached snapshot for a screen, or null if unseen. */
|
|
512
|
+
getSnapshot(screenId) {
|
|
513
|
+
return this.snapshotCache.get(screenId) ?? null;
|
|
514
|
+
}
|
|
515
|
+
// -------------------------------------------------------------------------
|
|
516
|
+
// Core audit pipeline
|
|
517
|
+
// -------------------------------------------------------------------------
|
|
518
|
+
/**
|
|
519
|
+
* Run a full design audit for one pipeline pass.
|
|
520
|
+
*
|
|
521
|
+
* @param runId - Unique identifier for this pipeline run.
|
|
522
|
+
* @param screens - Current screen snapshots (hash = current state).
|
|
523
|
+
* @param a11yOutput - Composed output from engine agents #8 / #67.
|
|
524
|
+
* @param uxOutput - Composed output from engine agents #12 / #80.
|
|
525
|
+
* @param responsiveOutput - Composed output from engine agent #29.
|
|
526
|
+
* @param watcherFriction - Real-user friction points from Watcher (#2), keyed
|
|
527
|
+
* PER SCREEN (`screenId -> friction descriptions`).
|
|
528
|
+
* A flat global list is wrong: friction recorded on
|
|
529
|
+
* one screen must not penalize every other screen's
|
|
530
|
+
* usability score.
|
|
531
|
+
* @param computedStyles - Per-screen CSS computed-style map for token check.
|
|
532
|
+
* @param motionReviews - Optional motion/animation reviews (phase-2).
|
|
533
|
+
*
|
|
534
|
+
* Returns a fully-immutable `DesignAuditReport`. Never auto-ships anything.
|
|
535
|
+
*/
|
|
536
|
+
audit(runId, screens, a11yOutput, uxOutput, responsiveOutput, watcherFriction = new Map(), computedStyles = new Map(), motionReviews = []) {
|
|
537
|
+
const now = this.config.clock;
|
|
538
|
+
const auditedAt = new Date(now()).toISOString();
|
|
539
|
+
// --- Step 1: Visual-diff gate (improvement #1) ---
|
|
540
|
+
const diffGateResults = [];
|
|
541
|
+
const skippedScreens = [];
|
|
542
|
+
const auditedScreenIds = [];
|
|
543
|
+
for (const screen of screens) {
|
|
544
|
+
const previous = this.getSnapshot(screen.screenId);
|
|
545
|
+
const gateResult = evaluateDiffGate(screen, previous);
|
|
546
|
+
diffGateResults.push(gateResult);
|
|
547
|
+
if (gateResult.skipped) {
|
|
548
|
+
skippedScreens.push(screen.screenId);
|
|
549
|
+
}
|
|
550
|
+
else {
|
|
551
|
+
auditedScreenIds.push(screen.screenId);
|
|
552
|
+
// Update snapshot cache for next run
|
|
553
|
+
this.updateSnapshot(screen);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
// --- Step 2: A11y violations (hard floor — improvement #7) ---
|
|
557
|
+
// Must-Fix #4: filter strictly on f.module === screenId. Removed the
|
|
558
|
+
// `|| auditedScreenIds.length <= 1` shortcut and the first-screen fallback
|
|
559
|
+
// that was dumping all a11y findings onto screen[0] in multi-screen runs.
|
|
560
|
+
// Each finding is attributed only to the screen whose id matches f.module.
|
|
561
|
+
// Findings whose module does not match any audited screen are silently
|
|
562
|
+
// dropped (they belong to a skipped or unknown screen).
|
|
563
|
+
const allA11yViolations = [];
|
|
564
|
+
for (const screenId of auditedScreenIds) {
|
|
565
|
+
const screenFindings = {
|
|
566
|
+
findings: a11yOutput.findings.filter((f) => f.module === screenId),
|
|
567
|
+
};
|
|
568
|
+
allA11yViolations.push(...composeA11yViolations(screenFindings, screenId));
|
|
569
|
+
}
|
|
570
|
+
// --- Step 3: Token conformance (improvement #2) ---
|
|
571
|
+
const tokenConformance = [];
|
|
572
|
+
for (const screenId of auditedScreenIds) {
|
|
573
|
+
const styles = computedStyles.get(screenId) ?? new Map();
|
|
574
|
+
tokenConformance.push(checkTokenConformance(screenId, styles, this.config.tokenRegistry));
|
|
575
|
+
}
|
|
576
|
+
// --- Step 4: Visual design issues (brand conformance — improvement #3) ---
|
|
577
|
+
const allOffSystem = tokenConformance.flatMap((r) => r.offSystemValues);
|
|
578
|
+
const visualDesignIssues = this.config.brandGuidelines
|
|
579
|
+
? [...buildBrandConformanceIssues(allOffSystem, this.config.brandGuidelines)]
|
|
580
|
+
: allOffSystem.map((osv) => ({
|
|
581
|
+
category: 'consistency',
|
|
582
|
+
description: `Off-system value "${osv.computedValue}" on "${osv.cssProperty}"`,
|
|
583
|
+
suggestedFix: osv.nearestToken
|
|
584
|
+
? `Use token "${osv.nearestToken}"`
|
|
585
|
+
: 'Replace with a registered design token',
|
|
586
|
+
severity: 'medium',
|
|
587
|
+
element: osv.element,
|
|
588
|
+
}));
|
|
589
|
+
// --- Step 5: Usability scores (improvement #5 + #6) ---
|
|
590
|
+
// Must-Fix #4: filter strictly on f.module === screenId (no length<=1 shortcut).
|
|
591
|
+
// BLOCKER fix: friction is attributed PER SCREEN — a friction point recorded
|
|
592
|
+
// on one screen must NOT deduct from every other screen's usability score.
|
|
593
|
+
const usabilityScores = [];
|
|
594
|
+
for (const screenId of auditedScreenIds) {
|
|
595
|
+
const screenUxOutput = {
|
|
596
|
+
findings: uxOutput.findings.filter((f) => f.module === screenId),
|
|
597
|
+
};
|
|
598
|
+
const screenFriction = watcherFriction.get(screenId) ?? [];
|
|
599
|
+
usabilityScores.push(computeUsabilityScore(screenId, screenUxOutput, screenFriction));
|
|
600
|
+
}
|
|
601
|
+
// --- Step 6: Responsive results (improvement #9) ---
|
|
602
|
+
// Must-Fix #4: filter strictly on f.module === sid (no length<=1 shortcut).
|
|
603
|
+
const responsiveResults = auditedScreenIds.map((sid) => {
|
|
604
|
+
const filtered = {
|
|
605
|
+
findings: responsiveOutput.findings.filter((f) => f.module === sid),
|
|
606
|
+
};
|
|
607
|
+
return composeResponsiveResult(sid, filtered);
|
|
608
|
+
});
|
|
609
|
+
// --- Step 7: Mockup alternatives (improvement #4 — ≥2 per flagged screen) ---
|
|
610
|
+
// A screen is flagged on its OWN issues only. The visual-issue test is
|
|
611
|
+
// per-screen (`i.element === sid`), not the aggregate `visualDesignIssues
|
|
612
|
+
// .length > 0` — otherwise a single off-brand value on one screen would flag
|
|
613
|
+
// (and generate mockups for) every audited screen.
|
|
614
|
+
const mockupAlternatives = [];
|
|
615
|
+
const flaggedScreens = auditedScreenIds.filter((sid) => allA11yViolations.some((v) => v.nodes.includes(sid)) ||
|
|
616
|
+
visualDesignIssues.some((i) => i.element === sid) ||
|
|
617
|
+
(usabilityScores.find((u) => u.screenId === sid)?.score ?? 100) < 70);
|
|
618
|
+
for (const screenId of flaggedScreens) {
|
|
619
|
+
// Mockup rationales reference THIS screen's own issues, not a global pool.
|
|
620
|
+
const descriptions = [
|
|
621
|
+
...visualDesignIssues
|
|
622
|
+
.filter((i) => i.element === screenId)
|
|
623
|
+
.slice(0, 3)
|
|
624
|
+
.map((i) => i.description),
|
|
625
|
+
...allA11yViolations
|
|
626
|
+
.filter((v) => v.nodes.includes(screenId))
|
|
627
|
+
.slice(0, 3)
|
|
628
|
+
.map((v) => v.description),
|
|
629
|
+
];
|
|
630
|
+
mockupAlternatives.push(...generateMockupAlternatives(screenId, descriptions, 'figma', this.config.minMockupAlternatives, now));
|
|
631
|
+
}
|
|
632
|
+
// --- Step 8: Experiment hypotheses (improvement #10) ---
|
|
633
|
+
const experimentHypotheses = [];
|
|
634
|
+
for (const mockup of mockupAlternatives) {
|
|
635
|
+
experimentHypotheses.push(emitExperimentHypothesis(mockup, `Improve usability score and reduce a11y violations on "${mockup.screenId}"`, now));
|
|
636
|
+
}
|
|
637
|
+
// --- Step 9: Design quality signals (feeds #14) ---
|
|
638
|
+
const meanUsabilityScore = usabilityScores.length > 0
|
|
639
|
+
? usabilityScores.reduce((acc, u) => acc + u.score, 0) / usabilityScores.length
|
|
640
|
+
: 100;
|
|
641
|
+
const qualitySignals = auditedScreenIds.map((sid) => {
|
|
642
|
+
const usScore = usabilityScores.find((u) => u.screenId === sid)?.score
|
|
643
|
+
?? meanUsabilityScore;
|
|
644
|
+
// BLOCKER fix: attribute a11y + visual issues PER SCREEN. Passing the
|
|
645
|
+
// aggregate arrays here let ONE screen's a11y violation (the hard floor)
|
|
646
|
+
// zero EVERY screen's uxScore, and one screen's visual issue depress all
|
|
647
|
+
// the others. Each signal now sees only its own screen's issues.
|
|
648
|
+
const screenA11y = allA11yViolations.filter((v) => v.nodes.includes(sid));
|
|
649
|
+
const screenVisual = visualDesignIssues.filter((i) => i.element === sid);
|
|
650
|
+
return computeDesignQualitySignal(sid, screenA11y, screenVisual, usScore, responsiveResults.filter((r) => r.screenId === sid), tokenConformance.filter((r) => r.screenId === sid), auditedAt);
|
|
651
|
+
});
|
|
652
|
+
// --- A11y gate (improvement #7 — blocks the report) ---
|
|
653
|
+
const a11yGatePassed = allA11yViolations.length === 0;
|
|
654
|
+
return {
|
|
655
|
+
runId,
|
|
656
|
+
auditedAt,
|
|
657
|
+
skippedScreens,
|
|
658
|
+
diffGateResults,
|
|
659
|
+
a11yViolations: allA11yViolations,
|
|
660
|
+
visualDesignIssues,
|
|
661
|
+
tokenConformance,
|
|
662
|
+
usabilityScores,
|
|
663
|
+
responsiveResults,
|
|
664
|
+
motionReviews,
|
|
665
|
+
mockupAlternatives,
|
|
666
|
+
experimentHypotheses,
|
|
667
|
+
qualitySignals,
|
|
668
|
+
a11yGatePassed,
|
|
669
|
+
};
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
//# sourceMappingURL=orchestrator.js.map
|