@avi770/testteam 1.2.0 → 3.0.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 +53 -1
- package/README.md +72 -7
- package/agents/15-regression-sentinel.ts +3 -2
- package/agents/24-signup-onboarding-tester.ts +429 -0
- package/agents/25-crud-flow-tester.ts +302 -0
- package/agents/26-form-validator.ts +297 -0
- package/agents/27-search-filter-tester.ts +326 -0
- package/agents/28-navigation-routing-tester.ts +425 -0
- package/agents/29-responsive-interaction-tester.ts +350 -0
- package/agents/30-multi-user-scenario-tester.ts +319 -0
- package/agents/31-load-tester.ts +134 -0
- package/agents/32-memory-leak-detector.ts +194 -0
- package/agents/33-bundle-analyzer.ts +132 -0
- package/agents/34-xss-scanner.ts +191 -0
- package/agents/35-csrf-tester.ts +82 -0
- package/agents/36-auth-fuzzer.ts +194 -0
- package/agents/37-dependency-scanner.ts +176 -0
- package/agents/38-secrets-scanner.ts +137 -0
- package/agents/39-api-contract-tester.ts +199 -0
- package/agents/40-rate-limit-tester.ts +94 -0
- package/agents/41-api-pagination-tester.ts +97 -0
- package/agents/42-graphql-tester.ts +222 -0
- package/agents/43-data-consistency-checker.ts +205 -0
- package/agents/44-backup-recovery-tester.ts +152 -0
- package/agents/45-data-privacy-scanner.ts +125 -0
- package/agents/46-seo-auditor.ts +294 -0
- package/agents/47-social-preview-tester.ts +232 -0
- package/agents/48-lighthouse-auditor.ts +213 -0
- package/agents/49-i18n-tester.ts +198 -0
- package/agents/50-timezone-tester.ts +173 -0
- package/agents/51-error-recovery-tester.ts +155 -0
- package/agents/52-offline-mode-tester.ts +180 -0
- package/agents/53-graceful-degradation-tester.ts +156 -0
- package/agents/54-websocket-tester.ts +151 -0
- package/agents/55-realtime-sync-tester.ts +194 -0
- package/agents/56-file-upload-tester.ts +194 -0
- package/agents/57-export-tester.ts +174 -0
- package/agents/58-payment-flow-tester.ts +183 -0
- package/agents/59-ssl-tls-auditor.ts +141 -0
- package/agents/60-dns-cdn-tester.ts +117 -0
- package/agents/61-docker-health-checker.ts +111 -0
- package/agents/62-env-config-validator.ts +152 -0
- package/agents/63-log-quality-auditor.ts +136 -0
- package/agents/64-analytics-tracker-tester.ts +165 -0
- package/agents/65-gdpr-compliance-tester.ts +215 -0
- package/agents/66-soc2-control-validator.ts +210 -0
- package/agents/67-wcag-aaa-tester.ts +241 -0
- package/agents/68-dead-code-detector.ts +135 -0
- package/agents/69-type-safety-auditor.ts +164 -0
- package/agents/70-complexity-analyzer.ts +179 -0
- package/agents/__tests__/24-signup-onboarding-tester.test.ts +274 -0
- package/agents/__tests__/25-crud-flow-tester.test.ts +322 -0
- package/agents/__tests__/26-form-validator.test.ts +345 -0
- package/agents/__tests__/27-search-filter-tester.test.ts +311 -0
- package/agents/__tests__/28-navigation-routing-tester.test.ts +328 -0
- package/agents/__tests__/29-responsive-interaction-tester.test.ts +297 -0
- package/agents/__tests__/30-multi-user-scenario-tester.test.ts +328 -0
- package/agents/__tests__/31-load-tester.test.ts +189 -0
- package/agents/__tests__/32-memory-leak-detector.test.ts +251 -0
- package/agents/__tests__/33-bundle-analyzer.test.ts +237 -0
- package/agents/__tests__/34-xss-scanner.test.ts +258 -0
- package/agents/__tests__/35-csrf-tester.test.ts +200 -0
- package/agents/__tests__/36-auth-fuzzer.test.ts +214 -0
- package/agents/__tests__/37-dependency-scanner.test.ts +266 -0
- package/agents/__tests__/38-secrets-scanner.test.ts +224 -0
- package/agents/__tests__/39-api-contract-tester.test.ts +312 -0
- package/agents/__tests__/40-rate-limit-tester.test.ts +192 -0
- package/agents/__tests__/41-api-pagination-tester.test.ts +198 -0
- package/agents/__tests__/42-graphql-tester.test.ts +252 -0
- package/agents/__tests__/43-data-consistency-checker.test.ts +232 -0
- package/agents/__tests__/44-backup-recovery-tester.test.ts +222 -0
- package/agents/__tests__/45-data-privacy-scanner.test.ts +223 -0
- package/agents/__tests__/46-seo-auditor.test.ts +261 -0
- package/agents/__tests__/47-social-preview-tester.test.ts +245 -0
- package/agents/__tests__/48-lighthouse-auditor.test.ts +276 -0
- package/agents/__tests__/49-i18n-tester.test.ts +201 -0
- package/agents/__tests__/50-timezone-tester.test.ts +172 -0
- package/agents/__tests__/51-error-recovery-tester.test.ts +162 -0
- package/agents/__tests__/52-offline-mode-tester.test.ts +164 -0
- package/agents/__tests__/53-graceful-degradation-tester.test.ts +168 -0
- package/agents/__tests__/54-websocket-tester.test.ts +157 -0
- package/agents/__tests__/55-realtime-sync-tester.test.ts +181 -0
- package/agents/__tests__/56-file-upload-tester.test.ts +172 -0
- package/agents/__tests__/57-export-tester.test.ts +169 -0
- package/agents/__tests__/58-payment-flow-tester.test.ts +182 -0
- package/agents/__tests__/59-ssl-tls-auditor.test.ts +179 -0
- package/agents/__tests__/60-dns-cdn-tester.test.ts +176 -0
- package/agents/__tests__/61-docker-health-checker.test.ts +150 -0
- package/agents/__tests__/62-env-config-validator.test.ts +166 -0
- package/agents/__tests__/63-log-quality-auditor.test.ts +175 -0
- package/agents/__tests__/64-analytics-tracker-tester.test.ts +158 -0
- package/agents/__tests__/65-gdpr-compliance-tester.test.ts +174 -0
- package/agents/__tests__/66-soc2-control-validator.test.ts +183 -0
- package/agents/__tests__/67-wcag-aaa-tester.test.ts +190 -0
- package/agents/__tests__/68-dead-code-detector.test.ts +174 -0
- package/agents/__tests__/69-type-safety-auditor.test.ts +173 -0
- package/agents/__tests__/70-complexity-analyzer.test.ts +177 -0
- package/agents/__tests__/registry.test.ts +13 -13
- package/agents/base-agent.ts +8 -0
- package/agents/registry.ts +171 -28
- package/core/__tests__/integration.test.ts +4 -4
- package/core/__tests__/orchestrator.test.ts +17 -16
- package/core/cli.ts +128 -6
- package/core/license.ts +208 -211
- package/core/orchestrator.ts +78 -5
- package/dist/agents/15-regression-sentinel.d.ts +2 -1
- package/dist/agents/15-regression-sentinel.d.ts.map +1 -1
- package/dist/agents/15-regression-sentinel.js +2 -2
- package/dist/agents/15-regression-sentinel.js.map +1 -1
- package/dist/agents/24-signup-onboarding-tester.d.ts +35 -0
- package/dist/agents/24-signup-onboarding-tester.d.ts.map +1 -0
- package/dist/agents/24-signup-onboarding-tester.js +357 -0
- package/dist/agents/24-signup-onboarding-tester.js.map +1 -0
- package/dist/agents/25-crud-flow-tester.d.ts +11 -0
- package/dist/agents/25-crud-flow-tester.d.ts.map +1 -0
- package/dist/agents/25-crud-flow-tester.js +253 -0
- package/dist/agents/25-crud-flow-tester.js.map +1 -0
- package/dist/agents/26-form-validator.d.ts +12 -0
- package/dist/agents/26-form-validator.d.ts.map +1 -0
- package/dist/agents/26-form-validator.js +257 -0
- package/dist/agents/26-form-validator.js.map +1 -0
- package/dist/agents/27-search-filter-tester.d.ts +20 -0
- package/dist/agents/27-search-filter-tester.d.ts.map +1 -0
- package/dist/agents/27-search-filter-tester.js +267 -0
- package/dist/agents/27-search-filter-tester.js.map +1 -0
- package/dist/agents/28-navigation-routing-tester.d.ts +32 -0
- package/dist/agents/28-navigation-routing-tester.d.ts.map +1 -0
- package/dist/agents/28-navigation-routing-tester.js +363 -0
- package/dist/agents/28-navigation-routing-tester.js.map +1 -0
- package/dist/agents/29-responsive-interaction-tester.d.ts +26 -0
- package/dist/agents/29-responsive-interaction-tester.d.ts.map +1 -0
- package/dist/agents/29-responsive-interaction-tester.js +272 -0
- package/dist/agents/29-responsive-interaction-tester.js.map +1 -0
- package/dist/agents/30-multi-user-scenario-tester.d.ts +24 -0
- package/dist/agents/30-multi-user-scenario-tester.d.ts.map +1 -0
- package/dist/agents/30-multi-user-scenario-tester.js +254 -0
- package/dist/agents/30-multi-user-scenario-tester.js.map +1 -0
- package/dist/agents/31-load-tester.d.ts +12 -0
- package/dist/agents/31-load-tester.d.ts.map +1 -0
- package/dist/agents/31-load-tester.js +110 -0
- package/dist/agents/31-load-tester.js.map +1 -0
- package/dist/agents/32-memory-leak-detector.d.ts +12 -0
- package/dist/agents/32-memory-leak-detector.d.ts.map +1 -0
- package/dist/agents/32-memory-leak-detector.js +167 -0
- package/dist/agents/32-memory-leak-detector.js.map +1 -0
- package/dist/agents/33-bundle-analyzer.d.ts +10 -0
- package/dist/agents/33-bundle-analyzer.d.ts.map +1 -0
- package/dist/agents/33-bundle-analyzer.js +111 -0
- package/dist/agents/33-bundle-analyzer.js.map +1 -0
- package/dist/agents/34-xss-scanner.d.ts +11 -0
- package/dist/agents/34-xss-scanner.d.ts.map +1 -0
- package/dist/agents/34-xss-scanner.js +164 -0
- package/dist/agents/34-xss-scanner.js.map +1 -0
- package/dist/agents/35-csrf-tester.d.ts +11 -0
- package/dist/agents/35-csrf-tester.d.ts.map +1 -0
- package/dist/agents/35-csrf-tester.js +70 -0
- package/dist/agents/35-csrf-tester.js.map +1 -0
- package/dist/agents/36-auth-fuzzer.d.ts +13 -0
- package/dist/agents/36-auth-fuzzer.d.ts.map +1 -0
- package/dist/agents/36-auth-fuzzer.js +163 -0
- package/dist/agents/36-auth-fuzzer.js.map +1 -0
- package/dist/agents/37-dependency-scanner.d.ts +11 -0
- package/dist/agents/37-dependency-scanner.d.ts.map +1 -0
- package/dist/agents/37-dependency-scanner.js +139 -0
- package/dist/agents/37-dependency-scanner.js.map +1 -0
- package/dist/agents/38-secrets-scanner.d.ts +11 -0
- package/dist/agents/38-secrets-scanner.d.ts.map +1 -0
- package/dist/agents/38-secrets-scanner.js +116 -0
- package/dist/agents/38-secrets-scanner.js.map +1 -0
- package/dist/agents/39-api-contract-tester.d.ts +12 -0
- package/dist/agents/39-api-contract-tester.d.ts.map +1 -0
- package/dist/agents/39-api-contract-tester.js +142 -0
- package/dist/agents/39-api-contract-tester.js.map +1 -0
- package/dist/agents/40-rate-limit-tester.d.ts +12 -0
- package/dist/agents/40-rate-limit-tester.d.ts.map +1 -0
- package/dist/agents/40-rate-limit-tester.js +79 -0
- package/dist/agents/40-rate-limit-tester.js.map +1 -0
- package/dist/agents/41-api-pagination-tester.d.ts +12 -0
- package/dist/agents/41-api-pagination-tester.d.ts.map +1 -0
- package/dist/agents/41-api-pagination-tester.js +79 -0
- package/dist/agents/41-api-pagination-tester.js.map +1 -0
- package/dist/agents/42-graphql-tester.d.ts +13 -0
- package/dist/agents/42-graphql-tester.d.ts.map +1 -0
- package/dist/agents/42-graphql-tester.js +187 -0
- package/dist/agents/42-graphql-tester.js.map +1 -0
- package/dist/agents/43-data-consistency-checker.d.ts +11 -0
- package/dist/agents/43-data-consistency-checker.d.ts.map +1 -0
- package/dist/agents/43-data-consistency-checker.js +176 -0
- package/dist/agents/43-data-consistency-checker.js.map +1 -0
- package/dist/agents/44-backup-recovery-tester.d.ts +11 -0
- package/dist/agents/44-backup-recovery-tester.d.ts.map +1 -0
- package/dist/agents/44-backup-recovery-tester.js +128 -0
- package/dist/agents/44-backup-recovery-tester.js.map +1 -0
- package/dist/agents/45-data-privacy-scanner.d.ts +11 -0
- package/dist/agents/45-data-privacy-scanner.d.ts.map +1 -0
- package/dist/agents/45-data-privacy-scanner.js +100 -0
- package/dist/agents/45-data-privacy-scanner.js.map +1 -0
- package/dist/agents/46-seo-auditor.d.ts +12 -0
- package/dist/agents/46-seo-auditor.d.ts.map +1 -0
- package/dist/agents/46-seo-auditor.js +275 -0
- package/dist/agents/46-seo-auditor.js.map +1 -0
- package/dist/agents/47-social-preview-tester.d.ts +11 -0
- package/dist/agents/47-social-preview-tester.d.ts.map +1 -0
- package/dist/agents/47-social-preview-tester.js +219 -0
- package/dist/agents/47-social-preview-tester.js.map +1 -0
- package/dist/agents/48-lighthouse-auditor.d.ts +11 -0
- package/dist/agents/48-lighthouse-auditor.d.ts.map +1 -0
- package/dist/agents/48-lighthouse-auditor.js +192 -0
- package/dist/agents/48-lighthouse-auditor.js.map +1 -0
- package/dist/agents/49-i18n-tester.d.ts +13 -0
- package/dist/agents/49-i18n-tester.d.ts.map +1 -0
- package/dist/agents/49-i18n-tester.js +172 -0
- package/dist/agents/49-i18n-tester.js.map +1 -0
- package/dist/agents/50-timezone-tester.d.ts +11 -0
- package/dist/agents/50-timezone-tester.d.ts.map +1 -0
- package/dist/agents/50-timezone-tester.js +152 -0
- package/dist/agents/50-timezone-tester.js.map +1 -0
- package/dist/agents/51-error-recovery-tester.d.ts +11 -0
- package/dist/agents/51-error-recovery-tester.d.ts.map +1 -0
- package/dist/agents/51-error-recovery-tester.js +134 -0
- package/dist/agents/51-error-recovery-tester.js.map +1 -0
- package/dist/agents/52-offline-mode-tester.d.ts +12 -0
- package/dist/agents/52-offline-mode-tester.d.ts.map +1 -0
- package/dist/agents/52-offline-mode-tester.js +161 -0
- package/dist/agents/52-offline-mode-tester.js.map +1 -0
- package/dist/agents/53-graceful-degradation-tester.d.ts +12 -0
- package/dist/agents/53-graceful-degradation-tester.d.ts.map +1 -0
- package/dist/agents/53-graceful-degradation-tester.js +130 -0
- package/dist/agents/53-graceful-degradation-tester.js.map +1 -0
- package/dist/agents/54-websocket-tester.d.ts +10 -0
- package/dist/agents/54-websocket-tester.d.ts.map +1 -0
- package/dist/agents/54-websocket-tester.js +132 -0
- package/dist/agents/54-websocket-tester.js.map +1 -0
- package/dist/agents/55-realtime-sync-tester.d.ts +11 -0
- package/dist/agents/55-realtime-sync-tester.d.ts.map +1 -0
- package/dist/agents/55-realtime-sync-tester.js +175 -0
- package/dist/agents/55-realtime-sync-tester.js.map +1 -0
- package/dist/agents/56-file-upload-tester.d.ts +12 -0
- package/dist/agents/56-file-upload-tester.d.ts.map +1 -0
- package/dist/agents/56-file-upload-tester.js +166 -0
- package/dist/agents/56-file-upload-tester.js.map +1 -0
- package/dist/agents/57-export-tester.d.ts +11 -0
- package/dist/agents/57-export-tester.d.ts.map +1 -0
- package/dist/agents/57-export-tester.js +155 -0
- package/dist/agents/57-export-tester.js.map +1 -0
- package/dist/agents/58-payment-flow-tester.d.ts +11 -0
- package/dist/agents/58-payment-flow-tester.d.ts.map +1 -0
- package/dist/agents/58-payment-flow-tester.js +159 -0
- package/dist/agents/58-payment-flow-tester.js.map +1 -0
- package/dist/agents/59-ssl-tls-auditor.d.ts +10 -0
- package/dist/agents/59-ssl-tls-auditor.d.ts.map +1 -0
- package/dist/agents/59-ssl-tls-auditor.js +132 -0
- package/dist/agents/59-ssl-tls-auditor.js.map +1 -0
- package/dist/agents/60-dns-cdn-tester.d.ts +10 -0
- package/dist/agents/60-dns-cdn-tester.d.ts.map +1 -0
- package/dist/agents/60-dns-cdn-tester.js +105 -0
- package/dist/agents/60-dns-cdn-tester.js.map +1 -0
- package/dist/agents/61-docker-health-checker.d.ts +10 -0
- package/dist/agents/61-docker-health-checker.d.ts.map +1 -0
- package/dist/agents/61-docker-health-checker.js +95 -0
- package/dist/agents/61-docker-health-checker.js.map +1 -0
- package/dist/agents/62-env-config-validator.d.ts +10 -0
- package/dist/agents/62-env-config-validator.d.ts.map +1 -0
- package/dist/agents/62-env-config-validator.js +132 -0
- package/dist/agents/62-env-config-validator.js.map +1 -0
- package/dist/agents/63-log-quality-auditor.d.ts +9 -0
- package/dist/agents/63-log-quality-auditor.d.ts.map +1 -0
- package/dist/agents/63-log-quality-auditor.js +121 -0
- package/dist/agents/63-log-quality-auditor.js.map +1 -0
- package/dist/agents/64-analytics-tracker-tester.d.ts +10 -0
- package/dist/agents/64-analytics-tracker-tester.d.ts.map +1 -0
- package/dist/agents/64-analytics-tracker-tester.js +146 -0
- package/dist/agents/64-analytics-tracker-tester.js.map +1 -0
- package/dist/agents/65-gdpr-compliance-tester.d.ts +13 -0
- package/dist/agents/65-gdpr-compliance-tester.d.ts.map +1 -0
- package/dist/agents/65-gdpr-compliance-tester.js +186 -0
- package/dist/agents/65-gdpr-compliance-tester.js.map +1 -0
- package/dist/agents/66-soc2-control-validator.d.ts +14 -0
- package/dist/agents/66-soc2-control-validator.d.ts.map +1 -0
- package/dist/agents/66-soc2-control-validator.js +178 -0
- package/dist/agents/66-soc2-control-validator.js.map +1 -0
- package/dist/agents/67-wcag-aaa-tester.d.ts +13 -0
- package/dist/agents/67-wcag-aaa-tester.d.ts.map +1 -0
- package/dist/agents/67-wcag-aaa-tester.js +207 -0
- package/dist/agents/67-wcag-aaa-tester.js.map +1 -0
- package/dist/agents/68-dead-code-detector.d.ts +9 -0
- package/dist/agents/68-dead-code-detector.d.ts.map +1 -0
- package/dist/agents/68-dead-code-detector.js +116 -0
- package/dist/agents/68-dead-code-detector.js.map +1 -0
- package/dist/agents/69-type-safety-auditor.d.ts +9 -0
- package/dist/agents/69-type-safety-auditor.d.ts.map +1 -0
- package/dist/agents/69-type-safety-auditor.js +148 -0
- package/dist/agents/69-type-safety-auditor.js.map +1 -0
- package/dist/agents/70-complexity-analyzer.d.ts +10 -0
- package/dist/agents/70-complexity-analyzer.d.ts.map +1 -0
- package/dist/agents/70-complexity-analyzer.js +154 -0
- package/dist/agents/70-complexity-analyzer.js.map +1 -0
- package/dist/agents/base-agent.d.ts +3 -1
- package/dist/agents/base-agent.d.ts.map +1 -1
- package/dist/agents/base-agent.js +7 -1
- package/dist/agents/base-agent.js.map +1 -1
- package/dist/agents/registry.d.ts +5 -4
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +170 -29
- package/dist/agents/registry.js.map +1 -1
- package/dist/clients/agent-mvp.d.ts +66 -0
- package/dist/clients/agent-mvp.d.ts.map +1 -0
- package/dist/clients/agent-mvp.js +91 -0
- package/dist/clients/agent-mvp.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 +224 -0
- package/dist/clients/total-recall.js.map +1 -0
- package/dist/core/cli.d.ts +3 -0
- package/dist/core/cli.d.ts.map +1 -1
- package/dist/core/cli.js +122 -6
- package/dist/core/cli.js.map +1 -1
- package/dist/core/license.js +2 -5
- package/dist/core/license.js.map +1 -1
- package/dist/core/orchestrator.d.ts +10 -1
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +66 -5
- package/dist/core/orchestrator.js.map +1 -1
- package/package.json +2 -2
|
@@ -62,21 +62,21 @@ describe('Orchestrator', () => {
|
|
|
62
62
|
const orchestrator = new Orchestrator(stubConfig);
|
|
63
63
|
const plan = orchestrator.dryRun('alpha');
|
|
64
64
|
|
|
65
|
-
expect(plan.map(e => e.agentId)).toEqual([1, 2, 23, 3, 4, 5]);
|
|
65
|
+
expect(plan.map(e => e.agentId)).toEqual([1, 2, 23, 24, 3, 4, 5, 37, 38, 62, 68, 69, 70]);
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
it('returns the correct agent IDs for beta', () => {
|
|
69
69
|
const orchestrator = new Orchestrator(stubConfig);
|
|
70
70
|
const plan = orchestrator.dryRun('beta');
|
|
71
71
|
|
|
72
|
-
expect(plan.map(e => e.agentId)).toEqual([5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22]);
|
|
72
|
+
expect(plan.map(e => e.agentId)).toEqual([5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70]);
|
|
73
73
|
});
|
|
74
74
|
|
|
75
75
|
it('returns the correct agent IDs for uat', () => {
|
|
76
76
|
const orchestrator = new Orchestrator(stubConfig);
|
|
77
77
|
const plan = orchestrator.dryRun('uat');
|
|
78
78
|
|
|
79
|
-
expect(plan.map(e => e.agentId)).toEqual([5, 6, 12, 13, 14, 15, 18, 19, 20, 21, 22, 17]);
|
|
79
|
+
expect(plan.map(e => e.agentId)).toEqual([5, 6, 12, 13, 14, 15, 18, 19, 20, 21, 22, 17, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70]);
|
|
80
80
|
});
|
|
81
81
|
|
|
82
82
|
it('returns the correct agent IDs for release', () => {
|
|
@@ -163,12 +163,12 @@ describe('Orchestrator', () => {
|
|
|
163
163
|
|
|
164
164
|
it('skips unregistered agents and includes them in skippedAgents', async () => {
|
|
165
165
|
const orchestrator = new Orchestrator(stubConfig, tmpDir);
|
|
166
|
-
// Register only agent 1, not
|
|
166
|
+
// Register only agent 1, not the others in alpha dispatch
|
|
167
167
|
orchestrator.registerAgent(1, createMockAgent(1));
|
|
168
168
|
|
|
169
169
|
const result = await orchestrator.runPhase('alpha');
|
|
170
170
|
|
|
171
|
-
expect(result.skippedAgents).toEqual(expect.arrayContaining([2, 23, 3, 4, 5]));
|
|
171
|
+
expect(result.skippedAgents).toEqual(expect.arrayContaining([2, 23, 24, 3, 4, 5, 37, 38, 62, 68, 69, 70]));
|
|
172
172
|
expect(result.skippedAgents).not.toContain(1);
|
|
173
173
|
});
|
|
174
174
|
|
|
@@ -255,7 +255,7 @@ describe('Orchestrator', () => {
|
|
|
255
255
|
|
|
256
256
|
it('free tier blocks beta phase', async () => {
|
|
257
257
|
const orchestrator = createOrchestratorWithTier('free');
|
|
258
|
-
registerPhaseAgents(orchestrator, [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22]);
|
|
258
|
+
registerPhaseAgents(orchestrator, [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70]);
|
|
259
259
|
|
|
260
260
|
const result = await orchestrator.runPhase('beta');
|
|
261
261
|
|
|
@@ -266,7 +266,7 @@ describe('Orchestrator', () => {
|
|
|
266
266
|
|
|
267
267
|
it('free tier blocks uat phase', async () => {
|
|
268
268
|
const orchestrator = createOrchestratorWithTier('free');
|
|
269
|
-
registerPhaseAgents(orchestrator, [5, 6, 12, 13, 14, 15, 18, 19, 20, 21, 22, 17]);
|
|
269
|
+
registerPhaseAgents(orchestrator, [5, 6, 12, 13, 14, 15, 18, 19, 20, 21, 22, 17, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70]);
|
|
270
270
|
|
|
271
271
|
const result = await orchestrator.runPhase('uat');
|
|
272
272
|
|
|
@@ -321,8 +321,8 @@ describe('Orchestrator', () => {
|
|
|
321
321
|
|
|
322
322
|
it('free tier skips pro agents with info finding', async () => {
|
|
323
323
|
const orchestrator = createOrchestratorWithTier('free');
|
|
324
|
-
// Alpha phase: [1, 2, 23, 3, 4, 5]. Agent 23
|
|
325
|
-
registerPhaseAgents(orchestrator, [1, 2, 23, 3, 4, 5]);
|
|
324
|
+
// Alpha phase: [1, 2, 23, 24, 3, 4, 5]. Agent 23 and 24 are pro tier.
|
|
325
|
+
registerPhaseAgents(orchestrator, [1, 2, 23, 24, 3, 4, 5]);
|
|
326
326
|
|
|
327
327
|
const result = await orchestrator.runPhase('alpha');
|
|
328
328
|
|
|
@@ -360,11 +360,11 @@ describe('Orchestrator', () => {
|
|
|
360
360
|
it('pro tier skips enterprise agents with info finding', async () => {
|
|
361
361
|
const orchestrator = createOrchestratorWithTier('pro');
|
|
362
362
|
// Beta phase includes enterprise agents: 14, 16, 18, 19
|
|
363
|
-
registerPhaseAgents(orchestrator, [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22]);
|
|
363
|
+
registerPhaseAgents(orchestrator, [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70]);
|
|
364
364
|
|
|
365
365
|
const result = await orchestrator.runPhase('beta');
|
|
366
366
|
|
|
367
|
-
// Enterprise agents 14, 16, 18, 19 should be skipped
|
|
367
|
+
// Enterprise agents 14, 16, 18, 19, 30 should be skipped
|
|
368
368
|
expect(result.skippedAgents).toContain(14);
|
|
369
369
|
expect(result.skippedAgents).toContain(16);
|
|
370
370
|
expect(result.skippedAgents).toContain(18);
|
|
@@ -384,7 +384,7 @@ describe('Orchestrator', () => {
|
|
|
384
384
|
it('pro tier allows all phases but gates enterprise agents', async () => {
|
|
385
385
|
const orchestrator = createOrchestratorWithTier('pro');
|
|
386
386
|
// UAT includes enterprise agents: 14, 18, 19, 20
|
|
387
|
-
registerPhaseAgents(orchestrator, [5, 6, 12, 13, 14, 15, 18, 19, 20, 21, 22, 17]);
|
|
387
|
+
registerPhaseAgents(orchestrator, [5, 6, 12, 13, 14, 15, 18, 19, 20, 21, 22, 17, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70]);
|
|
388
388
|
|
|
389
389
|
const result = await orchestrator.runPhase('uat');
|
|
390
390
|
|
|
@@ -397,12 +397,13 @@ describe('Orchestrator', () => {
|
|
|
397
397
|
expect(result.agentResults[18].status).toBe('skipped');
|
|
398
398
|
expect(result.agentResults[19].status).toBe('skipped');
|
|
399
399
|
expect(result.agentResults[20].status).toBe('skipped');
|
|
400
|
+
expect(result.agentResults[30].status).toBe('skipped');
|
|
400
401
|
});
|
|
401
402
|
|
|
402
403
|
it('enterprise tier allows all agents', async () => {
|
|
403
404
|
const orchestrator = createOrchestratorWithTier('enterprise');
|
|
404
405
|
// Beta phase: all agents should run
|
|
405
|
-
registerPhaseAgents(orchestrator, [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22]);
|
|
406
|
+
registerPhaseAgents(orchestrator, [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70]);
|
|
406
407
|
|
|
407
408
|
const result = await orchestrator.runPhase('beta');
|
|
408
409
|
|
|
@@ -430,7 +431,7 @@ describe('Orchestrator', () => {
|
|
|
430
431
|
orchestrator._getLicenseTier = () => 'enterprise';
|
|
431
432
|
|
|
432
433
|
// Register all alpha agents
|
|
433
|
-
for (const id of [1, 2, 23, 3, 4, 5]) {
|
|
434
|
+
for (const id of [1, 2, 23, 24, 3, 4, 5]) {
|
|
434
435
|
orchestrator.registerAgent(id, createMockAgent(id, { durationMs: 100000 }));
|
|
435
436
|
}
|
|
436
437
|
|
|
@@ -450,7 +451,7 @@ describe('Orchestrator', () => {
|
|
|
450
451
|
|
|
451
452
|
const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => undefined);
|
|
452
453
|
|
|
453
|
-
for (const id of [1, 2, 23, 3, 4, 5]) {
|
|
454
|
+
for (const id of [1, 2, 23, 24, 3, 4, 5]) {
|
|
454
455
|
orchestrator.registerAgent(id, createMockAgent(id, { durationMs: 100000 }));
|
|
455
456
|
}
|
|
456
457
|
|
|
@@ -466,7 +467,7 @@ describe('Orchestrator', () => {
|
|
|
466
467
|
orchestrator._getLicenseTier = () => 'enterprise';
|
|
467
468
|
|
|
468
469
|
// Beta phase has parallel-safe agents: 6, 7, 8, 12, 13, etc.
|
|
469
|
-
for (const id of [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22]) {
|
|
470
|
+
for (const id of [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70]) {
|
|
470
471
|
orchestrator.registerAgent(id, createMockAgent(id));
|
|
471
472
|
}
|
|
472
473
|
|
package/core/cli.ts
CHANGED
|
@@ -6,6 +6,8 @@ import { registerAllAgents } from '../agents/registry';
|
|
|
6
6
|
import { runInitWizard } from './init';
|
|
7
7
|
import { determineExitCode, writeCISummary, detectCIEnvironment } from './ci-output';
|
|
8
8
|
import type { ExitCode } from './ci-output';
|
|
9
|
+
import { TotalRecallClient } from '../clients/total-recall';
|
|
10
|
+
import { AgentMvpClient } from '../clients/agent-mvp';
|
|
9
11
|
import * as path from 'path';
|
|
10
12
|
|
|
11
13
|
const PHASES: readonly Phase[] = ['alpha', 'beta', 'uat', 'release'];
|
|
@@ -15,6 +17,9 @@ interface ParsedArgs {
|
|
|
15
17
|
dryRun: boolean;
|
|
16
18
|
agent: number | null;
|
|
17
19
|
configPath: string;
|
|
20
|
+
recallQuery: string | null;
|
|
21
|
+
reputation: boolean;
|
|
22
|
+
coaching: string | null;
|
|
18
23
|
}
|
|
19
24
|
|
|
20
25
|
function printUsage(): void {
|
|
@@ -27,6 +32,9 @@ Options:
|
|
|
27
32
|
--dry-run Show dispatch plan without executing
|
|
28
33
|
--agent <id> Run a single agent by ID
|
|
29
34
|
--config <path> Path to config file (default: testteam.config.ts)
|
|
35
|
+
--recall <query> Query Total Recall memory and print results
|
|
36
|
+
--reputation Query agent reputations and print a table
|
|
37
|
+
--coaching <agentId> Query coaching flags for an agent
|
|
30
38
|
--help Show this help message
|
|
31
39
|
`.trim());
|
|
32
40
|
}
|
|
@@ -37,6 +45,9 @@ export function parseArgs(argv: string[]): ParsedArgs {
|
|
|
37
45
|
let dryRun = false;
|
|
38
46
|
let agent: number | null = null;
|
|
39
47
|
let configPath = 'testteam.config.ts';
|
|
48
|
+
let recallQuery: string | null = null;
|
|
49
|
+
let reputation = false;
|
|
50
|
+
let coaching: string | null = null;
|
|
40
51
|
|
|
41
52
|
for (let i = 0; i < args.length; i++) {
|
|
42
53
|
const arg = args[i];
|
|
@@ -67,6 +78,25 @@ export function parseArgs(argv: string[]): ParsedArgs {
|
|
|
67
78
|
throw new Error('--config requires a path argument');
|
|
68
79
|
}
|
|
69
80
|
break;
|
|
81
|
+
case '--recall': {
|
|
82
|
+
const value = args[++i];
|
|
83
|
+
if (!value) {
|
|
84
|
+
throw new Error('--recall requires a query argument');
|
|
85
|
+
}
|
|
86
|
+
recallQuery = value;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case '--reputation':
|
|
90
|
+
reputation = true;
|
|
91
|
+
break;
|
|
92
|
+
case '--coaching': {
|
|
93
|
+
const value = args[++i];
|
|
94
|
+
if (!value) {
|
|
95
|
+
throw new Error('--coaching requires an agent ID argument');
|
|
96
|
+
}
|
|
97
|
+
coaching = value;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
70
100
|
case '--help':
|
|
71
101
|
printUsage();
|
|
72
102
|
process.exit(0);
|
|
@@ -76,7 +106,16 @@ export function parseArgs(argv: string[]): ParsedArgs {
|
|
|
76
106
|
}
|
|
77
107
|
}
|
|
78
108
|
|
|
79
|
-
return { phase, dryRun, agent, configPath };
|
|
109
|
+
return { phase, dryRun, agent, configPath, recallQuery, reputation, coaching };
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async function checkMahAvailability(baseUrl = 'http://localhost:3300'): Promise<boolean> {
|
|
113
|
+
try {
|
|
114
|
+
const res = await fetch(`${baseUrl}/health`);
|
|
115
|
+
return res.ok;
|
|
116
|
+
} catch {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
80
119
|
}
|
|
81
120
|
|
|
82
121
|
async function loadConfig(configPath: string): Promise<TestTeamConfig> {
|
|
@@ -112,7 +151,54 @@ export async function main(argv: string[] = process.argv): Promise<number> {
|
|
|
112
151
|
return 1;
|
|
113
152
|
}
|
|
114
153
|
|
|
115
|
-
const { phase, dryRun, configPath } = parsed;
|
|
154
|
+
const { phase, dryRun, configPath, recallQuery, reputation, coaching } = parsed;
|
|
155
|
+
|
|
156
|
+
// Handle --recall: query Total Recall and exit
|
|
157
|
+
if (recallQuery) {
|
|
158
|
+
const tr = new TotalRecallClient();
|
|
159
|
+
const available = await tr.isAvailable();
|
|
160
|
+
if (!available) {
|
|
161
|
+
console.error('Total Recall is not running at http://localhost:3777');
|
|
162
|
+
return 1;
|
|
163
|
+
}
|
|
164
|
+
const results = await tr.recallFindings(recallQuery);
|
|
165
|
+
console.log(JSON.stringify(results, null, 2));
|
|
166
|
+
return 0;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Handle --coaching: query Agent-MVP coaching flags for a specific agent and exit
|
|
170
|
+
if (coaching) {
|
|
171
|
+
const mvp = new AgentMvpClient();
|
|
172
|
+
const mvpAvailable = await mvp.isAvailable();
|
|
173
|
+
if (!mvpAvailable) {
|
|
174
|
+
console.error('Agent-MVP is not running at http://localhost:3200');
|
|
175
|
+
return 1;
|
|
176
|
+
}
|
|
177
|
+
const flags = await mvp.getCoachingFlags(coaching);
|
|
178
|
+
if (flags.length > 0) {
|
|
179
|
+
console.log(JSON.stringify(flags, null, 2));
|
|
180
|
+
} else {
|
|
181
|
+
console.log(`No coaching flags for agent "${coaching}".`);
|
|
182
|
+
}
|
|
183
|
+
return 0;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Handle --reputation: query Agent-MVP for all agent reputations and exit
|
|
187
|
+
if (reputation) {
|
|
188
|
+
const mvp = new AgentMvpClient();
|
|
189
|
+
const mvpAvailable = await mvp.isAvailable();
|
|
190
|
+
if (!mvpAvailable) {
|
|
191
|
+
console.error('Agent-MVP is not running at http://localhost:3200');
|
|
192
|
+
return 1;
|
|
193
|
+
}
|
|
194
|
+
const leaderboard = await mvp.getReputation('leaderboard');
|
|
195
|
+
if (leaderboard) {
|
|
196
|
+
console.log(JSON.stringify(leaderboard, null, 2));
|
|
197
|
+
} else {
|
|
198
|
+
console.log('No reputation data available.');
|
|
199
|
+
}
|
|
200
|
+
return 0;
|
|
201
|
+
}
|
|
116
202
|
|
|
117
203
|
if (!dryRun && !phase) {
|
|
118
204
|
console.error('--phase is required unless using --dry-run');
|
|
@@ -120,6 +206,10 @@ export async function main(argv: string[] = process.argv): Promise<number> {
|
|
|
120
206
|
return 1;
|
|
121
207
|
}
|
|
122
208
|
|
|
209
|
+
// Startup banner
|
|
210
|
+
console.log('TestTeam v3.0.0 — Learning Agents');
|
|
211
|
+
console.log('─'.repeat(40));
|
|
212
|
+
|
|
123
213
|
// Load and validate config
|
|
124
214
|
let rawConfig: TestTeamConfig;
|
|
125
215
|
try {
|
|
@@ -131,6 +221,33 @@ export async function main(argv: string[] = process.argv): Promise<number> {
|
|
|
131
221
|
|
|
132
222
|
const config = validateConfig(rawConfig);
|
|
133
223
|
|
|
224
|
+
// Initialize Total Recall (optional — continues normally if unavailable)
|
|
225
|
+
const totalRecall = new TotalRecallClient();
|
|
226
|
+
const trAvailable = await totalRecall.isAvailable();
|
|
227
|
+
if (trAvailable) {
|
|
228
|
+
await totalRecall.startSession();
|
|
229
|
+
console.log('[Total Recall] Connected — findings will be stored in memory');
|
|
230
|
+
} else {
|
|
231
|
+
console.log('[Total Recall] Not available at http://localhost:3777 — running without memory');
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Initialize Agent-MVP client (optional ��� continues normally if unavailable)
|
|
235
|
+
const agentMvp = new AgentMvpClient();
|
|
236
|
+
const mvpAvailable = await agentMvp.isAvailable();
|
|
237
|
+
if (mvpAvailable) {
|
|
238
|
+
console.log('[Agent-MVP] Connected — agent scores will be reported');
|
|
239
|
+
} else {
|
|
240
|
+
console.log('[Agent-MVP] Not available at http://localhost:3200 — running without scoring');
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Check MAH availability (optional — informational only)
|
|
244
|
+
const mahAvailable = await checkMahAvailability();
|
|
245
|
+
if (mahAvailable) {
|
|
246
|
+
console.log('[MAH] Connected — multi-agent hub active');
|
|
247
|
+
} else {
|
|
248
|
+
console.log('[MAH] Not available at http://localhost:3300 — running without hub');
|
|
249
|
+
}
|
|
250
|
+
|
|
134
251
|
// Shared run directory so all phases write results to the same location.
|
|
135
252
|
// This ensures the Reporter (Agent 10, release phase) can read results
|
|
136
253
|
// from prior phases (alpha, beta, uat).
|
|
@@ -142,8 +259,8 @@ export async function main(argv: string[] = process.argv): Promise<number> {
|
|
|
142
259
|
: [phase];
|
|
143
260
|
|
|
144
261
|
for (const p of targetPhases) {
|
|
145
|
-
const phaseOrchestrator = new Orchestrator(config, sharedRunDir);
|
|
146
|
-
registerAllAgents(phaseOrchestrator, config, p, sharedRunDir);
|
|
262
|
+
const phaseOrchestrator = new Orchestrator(config, sharedRunDir, mvpAvailable ? agentMvp : undefined);
|
|
263
|
+
registerAllAgents(phaseOrchestrator, config, p, sharedRunDir, trAvailable ? totalRecall : undefined);
|
|
147
264
|
const plan = phaseOrchestrator.dryRun(p);
|
|
148
265
|
console.log(`\nPhase: ${p}`);
|
|
149
266
|
for (const entry of plan) {
|
|
@@ -166,8 +283,8 @@ export async function main(argv: string[] = process.argv): Promise<number> {
|
|
|
166
283
|
for (const p of targetPhases) {
|
|
167
284
|
console.log(`\nRunning phase: ${p}`);
|
|
168
285
|
try {
|
|
169
|
-
const phaseOrchestrator = new Orchestrator(config, sharedRunDir);
|
|
170
|
-
registerAllAgents(phaseOrchestrator, config, p, sharedRunDir);
|
|
286
|
+
const phaseOrchestrator = new Orchestrator(config, sharedRunDir, mvpAvailable ? agentMvp : undefined);
|
|
287
|
+
registerAllAgents(phaseOrchestrator, config, p, sharedRunDir, trAvailable ? totalRecall : undefined);
|
|
171
288
|
const result = await phaseOrchestrator.runPhase(p);
|
|
172
289
|
|
|
173
290
|
if (result.skippedAgents.length > 0) {
|
|
@@ -195,6 +312,11 @@ export async function main(argv: string[] = process.argv): Promise<number> {
|
|
|
195
312
|
}
|
|
196
313
|
}
|
|
197
314
|
|
|
315
|
+
// Close Total Recall session
|
|
316
|
+
if (trAvailable) {
|
|
317
|
+
await totalRecall.endSession().catch(() => {});
|
|
318
|
+
}
|
|
319
|
+
|
|
198
320
|
// Determine structured exit code:
|
|
199
321
|
// - 0: All gates passed, no advisory failures
|
|
200
322
|
// - 1: Blocking agent failures (or runtime errors)
|