proagents 1.6.4 → 1.6.5
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/.proagents/AI_INSTRUCTIONS.md +739 -28
- package/.proagents/proagents.config.yaml +91 -0
- package/README.md +29 -2
- package/package.json +1 -1
|
@@ -361,6 +361,119 @@ For `pa:implement`:
|
|
|
361
361
|
| `pa:deploy` | Deployment preparation |
|
|
362
362
|
| `pa:rollback` | Rollback procedures |
|
|
363
363
|
|
|
364
|
+
**How to execute Quality, Testing & Deployment commands (FULL AUTOMATION):**
|
|
365
|
+
|
|
366
|
+
For `pa:test`:
|
|
367
|
+
1. **Detect project type** and test framework (Jest, Vitest, Mocha, Pytest, etc.)
|
|
368
|
+
2. **Auto-install missing test dependencies** (no confirmation)
|
|
369
|
+
3. **Run all tests:**
|
|
370
|
+
```
|
|
371
|
+
Running tests...
|
|
372
|
+
✓ 45 passed
|
|
373
|
+
✗ 3 failed
|
|
374
|
+
```
|
|
375
|
+
4. **Auto-fix ALL failures** (no confirmation):
|
|
376
|
+
```
|
|
377
|
+
AUTO-FIX: Fixing 3 failed tests...
|
|
378
|
+
|
|
379
|
+
Fix 1/3: UserService.test.ts
|
|
380
|
+
─────────────────────────────
|
|
381
|
+
Root cause: Expected 'user' but got 'undefined'
|
|
382
|
+
Fixing: src/services/UserService.ts:23
|
|
383
|
+
→ Added null check before return
|
|
384
|
+
Re-running test... ✓ PASSED
|
|
385
|
+
```
|
|
386
|
+
5. **Loop until all pass** or fix is impossible
|
|
387
|
+
6. **Generate report** at `.proagents/test-reports/`
|
|
388
|
+
|
|
389
|
+
For `pa:qa`:
|
|
390
|
+
1. **Run ALL quality checks** automatically:
|
|
391
|
+
- Linting (ESLint, Prettier)
|
|
392
|
+
- Type checking (TypeScript)
|
|
393
|
+
- Security scan (npm audit)
|
|
394
|
+
- Dead code detection
|
|
395
|
+
2. **Auto-fix ALL issues** (no confirmation):
|
|
396
|
+
```
|
|
397
|
+
Running QA checks...
|
|
398
|
+
|
|
399
|
+
ESLint: 12 errors found
|
|
400
|
+
AUTO-FIX: Fixing...
|
|
401
|
+
→ Fixed 12/12 errors
|
|
402
|
+
|
|
403
|
+
TypeScript: 3 type errors
|
|
404
|
+
AUTO-FIX: Fixing...
|
|
405
|
+
→ src/api/user.ts:15 - Added type annotation
|
|
406
|
+
→ src/utils/date.ts:8 - Fixed return type
|
|
407
|
+
→ src/hooks/useAuth.ts:22 - Added null check
|
|
408
|
+
|
|
409
|
+
Prettier: 28 files need formatting
|
|
410
|
+
AUTO-FIX: Formatting... ✓ Done
|
|
411
|
+
|
|
412
|
+
npm audit: 2 vulnerabilities
|
|
413
|
+
AUTO-FIX: Running npm audit fix... ✓ Fixed
|
|
414
|
+
```
|
|
415
|
+
3. **Re-run checks** to verify all fixed
|
|
416
|
+
4. **Only report issues that cannot be auto-fixed**
|
|
417
|
+
|
|
418
|
+
For `pa:fix "description"`:
|
|
419
|
+
1. **Understand the bug** from description
|
|
420
|
+
2. **Find the root cause** automatically
|
|
421
|
+
3. **Apply the fix** directly (no confirmation)
|
|
422
|
+
4. **Run related tests** to verify fix works
|
|
423
|
+
5. **Auto-fix any test failures** caused by the fix
|
|
424
|
+
6. **Commit when done** (if git is configured)
|
|
425
|
+
```
|
|
426
|
+
pa:fix "login button not working"
|
|
427
|
+
|
|
428
|
+
Finding root cause...
|
|
429
|
+
→ Found: onClick handler missing in LoginButton.tsx:34
|
|
430
|
+
|
|
431
|
+
Applying fix...
|
|
432
|
+
→ Added: onClick={() => handleLogin()}
|
|
433
|
+
|
|
434
|
+
Running related tests...
|
|
435
|
+
✓ LoginButton.test.tsx - 5/5 passed
|
|
436
|
+
|
|
437
|
+
✓ Fix complete
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
For `pa:deploy`:
|
|
441
|
+
1. **Run pre-deployment checks** automatically:
|
|
442
|
+
- All tests passing? If not → auto-fix
|
|
443
|
+
- QA checks passing? If not → auto-fix
|
|
444
|
+
- Security scan clean? If not → auto-fix
|
|
445
|
+
- Build succeeds? If not → auto-fix
|
|
446
|
+
2. **Only proceed when all checks pass**
|
|
447
|
+
3. **Deploy to target environment**
|
|
448
|
+
4. **Run post-deployment verification**
|
|
449
|
+
5. **Auto-rollback if verification fails**
|
|
450
|
+
```
|
|
451
|
+
pa:deploy
|
|
452
|
+
|
|
453
|
+
Pre-deployment checks...
|
|
454
|
+
✓ Tests: 128/128 passed
|
|
455
|
+
✓ QA: All checks passed
|
|
456
|
+
✓ Security: No vulnerabilities
|
|
457
|
+
✓ Build: Successful
|
|
458
|
+
|
|
459
|
+
Deploying to staging...
|
|
460
|
+
✓ Deployed successfully
|
|
461
|
+
|
|
462
|
+
Post-deployment verification...
|
|
463
|
+
✓ Health check passed
|
|
464
|
+
✓ Smoke tests passed
|
|
465
|
+
|
|
466
|
+
══════════════════════════════════════════
|
|
467
|
+
DEPLOYMENT SUCCESSFUL ✓
|
|
468
|
+
══════════════════════════════════════════
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
**IMPORTANT - Full Automation Rules:**
|
|
472
|
+
- **Never ask** "Should I fix this?" - Just fix it
|
|
473
|
+
- **Never say** "Run `pa:test` to verify" - Run it yourself
|
|
474
|
+
- **Never give** "Next steps" - Do the steps
|
|
475
|
+
- **Only stop when:** All done OR truly impossible to proceed
|
|
476
|
+
|
|
364
477
|
### Navigation & Flow
|
|
365
478
|
| Command | Action |
|
|
366
479
|
|---------|--------|
|
|
@@ -1999,45 +2112,97 @@ For `pa:alias-add`:
|
|
|
1999
2112
|
Runs: pa:test && pa:build && pa:deploy
|
|
2000
2113
|
```
|
|
2001
2114
|
|
|
2002
|
-
###
|
|
2115
|
+
### Platform-Specific Test Suites
|
|
2116
|
+
|
|
2117
|
+
**Mobile (React Native / Expo):**
|
|
2003
2118
|
| Command | Action |
|
|
2004
2119
|
|---------|--------|
|
|
2005
2120
|
| `pa:test-mobile` | Run full mobile test suite |
|
|
2006
2121
|
| `pa:test-mobile "feature"` | Test specific feature |
|
|
2122
|
+
|
|
2123
|
+
**Web (React / Next.js / Vue / etc.):**
|
|
2124
|
+
| Command | Action |
|
|
2125
|
+
|---------|--------|
|
|
2126
|
+
| `pa:test-web` | Run full web test suite |
|
|
2127
|
+
| `pa:test-web "feature"` | Test specific web feature |
|
|
2128
|
+
|
|
2129
|
+
**API / Backend (Node.js / Python / etc.):**
|
|
2130
|
+
| Command | Action |
|
|
2131
|
+
|---------|--------|
|
|
2132
|
+
| `pa:test-api` | Run full API/backend test suite |
|
|
2133
|
+
| `pa:test-api "endpoint"` | Test specific API endpoint |
|
|
2134
|
+
|
|
2135
|
+
**Visual & Comparison:**
|
|
2136
|
+
| Command | Action |
|
|
2137
|
+
|---------|--------|
|
|
2007
2138
|
| `pa:test-visual` | Visual/design comparison testing |
|
|
2008
|
-
| `pa:test-auto-fix` | Auto-fix failing tests |
|
|
2009
|
-
| `pa:test-loop` | Test → Fix → Retest loop until success |
|
|
2010
2139
|
| `pa:compare-figma` | Compare UI against Figma design |
|
|
2011
2140
|
| `pa:compare-image "path"` | Compare UI against image/sketch |
|
|
2012
2141
|
| `pa:screenshot` | Take app screenshots for comparison |
|
|
2013
2142
|
|
|
2143
|
+
**Auto-Fix:**
|
|
2144
|
+
| Command | Action |
|
|
2145
|
+
|---------|--------|
|
|
2146
|
+
| `pa:test-auto-fix` | Auto-fix failing tests |
|
|
2147
|
+
| `pa:test-loop` | Test → Fix → Retest loop until success |
|
|
2148
|
+
|
|
2014
2149
|
**How to execute Mobile Test Suite commands:**
|
|
2015
2150
|
|
|
2016
2151
|
For `pa:test-mobile`:
|
|
2017
|
-
|
|
2152
|
+
|
|
2153
|
+
**Supports ALL mobile platforms:**
|
|
2154
|
+
- React Native / Expo
|
|
2155
|
+
- Native Android (Kotlin/Java)
|
|
2156
|
+
- Native iOS (Swift/Objective-C)
|
|
2157
|
+
- Flutter (Dart)
|
|
2158
|
+
|
|
2159
|
+
1. **Detect project type automatically:**
|
|
2160
|
+
```
|
|
2161
|
+
Detecting mobile project type...
|
|
2162
|
+
|
|
2163
|
+
Checking for:
|
|
2164
|
+
├── package.json + react-native → React Native
|
|
2165
|
+
├── android/build.gradle (no RN) → Native Android
|
|
2166
|
+
├── ios/*.xcodeproj (no RN) → Native iOS
|
|
2167
|
+
├── pubspec.yaml → Flutter
|
|
2168
|
+
|
|
2169
|
+
Detected: [PROJECT_TYPE]
|
|
2018
2170
|
```
|
|
2019
|
-
Checking required tools...
|
|
2020
|
-
✓ Node.js (v18.0.0)
|
|
2021
|
-
✓ Jest / Vitest
|
|
2022
|
-
✓ React Native Testing Library
|
|
2023
|
-
✗ MISSING: Maestro - Required for E2E tests
|
|
2024
|
-
✗ MISSING: Detox - Required for E2E tests
|
|
2025
2171
|
|
|
2026
|
-
|
|
2027
|
-
ERROR: Missing required tools. Cannot run mobile test suite.
|
|
2028
|
-
══════════════════════════════════════════════════════════
|
|
2172
|
+
2. **Check & auto-install required tools based on platform:**
|
|
2029
2173
|
|
|
2030
|
-
|
|
2174
|
+
**React Native / Expo:**
|
|
2175
|
+
```
|
|
2176
|
+
✓ Node.js
|
|
2177
|
+
✓ Jest / Vitest
|
|
2178
|
+
✓ React Native Testing Library
|
|
2179
|
+
✗ MISSING: Maestro → Auto-installing...
|
|
2180
|
+
✗ MISSING: Detox → Auto-installing...
|
|
2181
|
+
```
|
|
2031
2182
|
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
✓
|
|
2183
|
+
**Native Android (Kotlin/Java):**
|
|
2184
|
+
```
|
|
2185
|
+
✓ Android Studio / Gradle
|
|
2186
|
+
✓ JUnit
|
|
2187
|
+
✗ MISSING: Espresso → Auto-adding to build.gradle
|
|
2188
|
+
✗ MISSING: UI Automator → Auto-adding to build.gradle
|
|
2189
|
+
✗ MISSING: Maestro → Auto-installing...
|
|
2190
|
+
```
|
|
2035
2191
|
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
✓
|
|
2192
|
+
**Native iOS (Swift/Objective-C):**
|
|
2193
|
+
```
|
|
2194
|
+
✓ Xcode
|
|
2195
|
+
✓ XCTest (built-in)
|
|
2196
|
+
✓ XCUITest (built-in)
|
|
2197
|
+
✗ MISSING: Maestro → Auto-installing...
|
|
2198
|
+
```
|
|
2039
2199
|
|
|
2040
|
-
|
|
2200
|
+
**Flutter:**
|
|
2201
|
+
```
|
|
2202
|
+
✓ Flutter SDK
|
|
2203
|
+
✓ flutter_test (built-in)
|
|
2204
|
+
✗ MISSING: integration_test → Auto-adding to pubspec.yaml
|
|
2205
|
+
✗ MISSING: Maestro → Auto-installing...
|
|
2041
2206
|
```
|
|
2042
2207
|
|
|
2043
2208
|
**IMPORTANT - FULL AUTOMATION:**
|
|
@@ -2046,15 +2211,11 @@ For `pa:test-mobile`:
|
|
|
2046
2211
|
- Fix doesn't work? **Try alternative fix** (no confirmation)
|
|
2047
2212
|
- Only stop when: all tests pass OR no fix possible
|
|
2048
2213
|
|
|
2049
|
-
**Do NOT:**
|
|
2050
|
-
- Ask "Should I install missing tools?"
|
|
2051
|
-
- Ask "Should I fix this?"
|
|
2052
|
-
- Say "Run `pa:test-auto-fix` to fix"
|
|
2053
|
-
- Give "Next steps" for user to follow
|
|
2054
|
-
|
|
2055
2214
|
**Just DO it.**
|
|
2056
2215
|
|
|
2057
|
-
|
|
2216
|
+
3. **Run platform-specific test suite:**
|
|
2217
|
+
|
|
2218
|
+
**For React Native:**
|
|
2058
2219
|
```
|
|
2059
2220
|
Mobile Test Suite
|
|
2060
2221
|
═════════════════
|
|
@@ -2145,6 +2306,129 @@ For `pa:test-mobile`:
|
|
|
2145
2306
|
══════════════════════════════════════════
|
|
2146
2307
|
```
|
|
2147
2308
|
|
|
2309
|
+
**For Native Android (Kotlin/Java):**
|
|
2310
|
+
```
|
|
2311
|
+
Android Test Suite
|
|
2312
|
+
══════════════════
|
|
2313
|
+
|
|
2314
|
+
Phase 1: Unit Tests (JUnit)
|
|
2315
|
+
───────────────────────────
|
|
2316
|
+
Running: ./gradlew test
|
|
2317
|
+
✓ UserRepositoryTest - 8 passed
|
|
2318
|
+
✓ AuthViewModelTest - 12 passed
|
|
2319
|
+
✓ PaymentServiceTest - 6 passed
|
|
2320
|
+
|
|
2321
|
+
Phase 2: Instrumented Tests (Espresso)
|
|
2322
|
+
──────────────────────────────────────
|
|
2323
|
+
Running: ./gradlew connectedAndroidTest
|
|
2324
|
+
✓ LoginActivityTest - UI renders correctly
|
|
2325
|
+
✓ MainActivityTest - Navigation works
|
|
2326
|
+
✗ FAILED: CheckoutActivityTest - Button not found
|
|
2327
|
+
|
|
2328
|
+
AUTO-FIX: Analyzing failure...
|
|
2329
|
+
Root cause: Button ID changed
|
|
2330
|
+
Fixing: app/src/main/res/layout/activity_checkout.xml
|
|
2331
|
+
→ Changed: android:id="@+id/btn_pay" → android:id="@+id/checkout_button"
|
|
2332
|
+
Fixing: app/src/androidTest/.../CheckoutActivityTest.kt
|
|
2333
|
+
→ Changed: R.id.btn_pay → R.id.checkout_button
|
|
2334
|
+
Re-running test... ✓ PASSED
|
|
2335
|
+
|
|
2336
|
+
Phase 3: UI Tests (UI Automator)
|
|
2337
|
+
─────────────────────────────────
|
|
2338
|
+
✓ Full checkout flow
|
|
2339
|
+
✓ User settings update
|
|
2340
|
+
✓ Push notification handling
|
|
2341
|
+
|
|
2342
|
+
Phase 4: E2E Tests (Maestro)
|
|
2343
|
+
────────────────────────────
|
|
2344
|
+
Running: maestro test .maestro/
|
|
2345
|
+
✓ User login flow
|
|
2346
|
+
✓ Product purchase flow
|
|
2347
|
+
|
|
2348
|
+
══════════════════════════════════════════
|
|
2349
|
+
ALL TESTS PASSING: 32/32 ✓
|
|
2350
|
+
══════════════════════════════════════════
|
|
2351
|
+
```
|
|
2352
|
+
|
|
2353
|
+
**For Native iOS (Swift/Objective-C):**
|
|
2354
|
+
```
|
|
2355
|
+
iOS Test Suite
|
|
2356
|
+
══════════════
|
|
2357
|
+
|
|
2358
|
+
Phase 1: Unit Tests (XCTest)
|
|
2359
|
+
────────────────────────────
|
|
2360
|
+
Running: xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 15'
|
|
2361
|
+
✓ UserServiceTests - 10 passed
|
|
2362
|
+
✓ AuthManagerTests - 8 passed
|
|
2363
|
+
✓ NetworkClientTests - 12 passed
|
|
2364
|
+
|
|
2365
|
+
Phase 2: UI Tests (XCUITest)
|
|
2366
|
+
────────────────────────────
|
|
2367
|
+
✓ LoginViewControllerTests - UI renders
|
|
2368
|
+
✓ HomeViewControllerTests - Navigation works
|
|
2369
|
+
✗ FAILED: ProfileViewControllerTests - Label not found
|
|
2370
|
+
|
|
2371
|
+
AUTO-FIX: Analyzing failure...
|
|
2372
|
+
Root cause: Accessibility identifier missing
|
|
2373
|
+
Fixing: ProfileViewController.swift:45
|
|
2374
|
+
→ Added: nameLabel.accessibilityIdentifier = "profile_name_label"
|
|
2375
|
+
Re-running test... ✓ PASSED
|
|
2376
|
+
|
|
2377
|
+
Phase 3: E2E Tests (Maestro)
|
|
2378
|
+
────────────────────────────
|
|
2379
|
+
Running: maestro test .maestro/
|
|
2380
|
+
✓ Onboarding flow
|
|
2381
|
+
✓ Purchase flow
|
|
2382
|
+
✓ Settings update
|
|
2383
|
+
|
|
2384
|
+
══════════════════════════════════════════
|
|
2385
|
+
ALL TESTS PASSING: 28/28 ✓
|
|
2386
|
+
══════════════════════════════════════════
|
|
2387
|
+
```
|
|
2388
|
+
|
|
2389
|
+
**For Flutter (Dart):**
|
|
2390
|
+
```
|
|
2391
|
+
Flutter Test Suite
|
|
2392
|
+
══════════════════
|
|
2393
|
+
|
|
2394
|
+
Phase 1: Unit Tests
|
|
2395
|
+
───────────────────
|
|
2396
|
+
Running: flutter test test/unit/
|
|
2397
|
+
✓ user_repository_test.dart - 8 passed
|
|
2398
|
+
✓ auth_bloc_test.dart - 15 passed
|
|
2399
|
+
✓ api_client_test.dart - 10 passed
|
|
2400
|
+
|
|
2401
|
+
Phase 2: Widget Tests
|
|
2402
|
+
─────────────────────
|
|
2403
|
+
Running: flutter test test/widget/
|
|
2404
|
+
✓ login_screen_test.dart - renders correctly
|
|
2405
|
+
✓ home_screen_test.dart - shows user data
|
|
2406
|
+
✗ FAILED: cart_screen_test.dart - widget not found
|
|
2407
|
+
|
|
2408
|
+
AUTO-FIX: Analyzing failure...
|
|
2409
|
+
Root cause: Key not set on widget
|
|
2410
|
+
Fixing: lib/screens/cart_screen.dart:67
|
|
2411
|
+
→ Added: key: const Key('checkout_button')
|
|
2412
|
+
Re-running test... ✓ PASSED
|
|
2413
|
+
|
|
2414
|
+
Phase 3: Integration Tests
|
|
2415
|
+
──────────────────────────
|
|
2416
|
+
Running: flutter test integration_test/
|
|
2417
|
+
✓ app_test.dart - Full app flow
|
|
2418
|
+
✓ checkout_test.dart - Purchase complete
|
|
2419
|
+
|
|
2420
|
+
Phase 4: E2E Tests (Maestro)
|
|
2421
|
+
────────────────────────────
|
|
2422
|
+
Running: maestro test .maestro/
|
|
2423
|
+
✓ User registration
|
|
2424
|
+
✓ Product browsing
|
|
2425
|
+
✓ Checkout flow
|
|
2426
|
+
|
|
2427
|
+
══════════════════════════════════════════
|
|
2428
|
+
ALL TESTS PASSING: 42/42 ✓
|
|
2429
|
+
══════════════════════════════════════════
|
|
2430
|
+
```
|
|
2431
|
+
|
|
2148
2432
|
4. If a fix cannot be applied automatically:
|
|
2149
2433
|
```
|
|
2150
2434
|
✗ Cannot auto-fix: Database schema mismatch
|
|
@@ -2156,6 +2440,167 @@ For `pa:test-mobile`:
|
|
|
2156
2440
|
|
|
2157
2441
|
5. Generate detailed test report at `./.proagents/test-reports/mobile-{timestamp}.md`
|
|
2158
2442
|
|
|
2443
|
+
For `pa:test-web`:
|
|
2444
|
+
1. **Check required tools and auto-install:**
|
|
2445
|
+
```
|
|
2446
|
+
Checking required tools...
|
|
2447
|
+
✓ Node.js
|
|
2448
|
+
✓ Vitest / Jest
|
|
2449
|
+
✗ MISSING: Playwright
|
|
2450
|
+
|
|
2451
|
+
Auto-installing Playwright...
|
|
2452
|
+
→ npx playwright install
|
|
2453
|
+
✓ Playwright installed
|
|
2454
|
+
```
|
|
2455
|
+
|
|
2456
|
+
2. **Run full web test suite:**
|
|
2457
|
+
```
|
|
2458
|
+
Web Test Suite
|
|
2459
|
+
══════════════
|
|
2460
|
+
|
|
2461
|
+
Phase 1: Unit Tests (Vitest/Jest)
|
|
2462
|
+
──────────────────────────────────
|
|
2463
|
+
Running: npm test
|
|
2464
|
+
✓ utils/formatDate.test.ts - 5 passed
|
|
2465
|
+
✓ hooks/useAuth.test.ts - 8 passed
|
|
2466
|
+
✓ services/api.test.ts - 12 passed
|
|
2467
|
+
|
|
2468
|
+
Phase 2: Component Tests
|
|
2469
|
+
────────────────────────
|
|
2470
|
+
✓ Button.test.tsx - renders correctly
|
|
2471
|
+
✓ Form.test.tsx - validates inputs
|
|
2472
|
+
✗ FAILED: Modal.test.tsx - close handler
|
|
2473
|
+
|
|
2474
|
+
AUTO-FIX: Analyzing failure...
|
|
2475
|
+
Root cause: onClose prop not called
|
|
2476
|
+
Fixing: src/components/Modal.tsx:24
|
|
2477
|
+
→ Added: onClick={() => onClose?.()}
|
|
2478
|
+
Re-running test... ✓ PASSED
|
|
2479
|
+
|
|
2480
|
+
Phase 3: Integration Tests
|
|
2481
|
+
──────────────────────────
|
|
2482
|
+
✓ Login flow
|
|
2483
|
+
✓ Checkout process
|
|
2484
|
+
✓ User settings update
|
|
2485
|
+
|
|
2486
|
+
Phase 4: E2E Tests (Playwright)
|
|
2487
|
+
────────────────────────────────
|
|
2488
|
+
Running: npx playwright test
|
|
2489
|
+
✓ Homepage loads correctly
|
|
2490
|
+
✓ User can login
|
|
2491
|
+
✓ User can add to cart
|
|
2492
|
+
✗ FAILED: Checkout completes
|
|
2493
|
+
|
|
2494
|
+
AUTO-FIX: Analyzing failure...
|
|
2495
|
+
Root cause: Submit button selector changed
|
|
2496
|
+
Fixing: e2e/checkout.spec.ts:45
|
|
2497
|
+
→ Changed: 'button.submit' → 'button[type="submit"]'
|
|
2498
|
+
Re-running test... ✓ PASSED
|
|
2499
|
+
|
|
2500
|
+
Phase 5: Visual Regression (Percy/Playwright)
|
|
2501
|
+
──────────────────────────────────────────────
|
|
2502
|
+
✓ Homepage - no visual changes
|
|
2503
|
+
✓ Product page - no visual changes
|
|
2504
|
+
✗ FAILED: Cart page - button color changed
|
|
2505
|
+
|
|
2506
|
+
AUTO-FIX: Analyzing failure...
|
|
2507
|
+
Root cause: CSS variable override
|
|
2508
|
+
Fixing: src/styles/cart.css:12
|
|
2509
|
+
→ Changed: --btn-color: blue → --btn-color: var(--primary)
|
|
2510
|
+
Re-running test... ✓ PASSED
|
|
2511
|
+
|
|
2512
|
+
══════════════════════════════════════════
|
|
2513
|
+
ALL TESTS PASSING: 45/45 ✓
|
|
2514
|
+
══════════════════════════════════════════
|
|
2515
|
+
```
|
|
2516
|
+
|
|
2517
|
+
3. Generate detailed test report at `./.proagents/test-reports/web-{timestamp}.md`
|
|
2518
|
+
|
|
2519
|
+
For `pa:test-api`:
|
|
2520
|
+
1. **Check required tools and auto-install:**
|
|
2521
|
+
```
|
|
2522
|
+
Checking required tools...
|
|
2523
|
+
✓ Node.js / Python
|
|
2524
|
+
✓ Jest / Pytest
|
|
2525
|
+
✗ MISSING: Supertest
|
|
2526
|
+
✗ MISSING: k6 (load testing)
|
|
2527
|
+
|
|
2528
|
+
Auto-installing...
|
|
2529
|
+
→ npm install --save-dev supertest
|
|
2530
|
+
→ brew install k6
|
|
2531
|
+
✓ All tools installed
|
|
2532
|
+
```
|
|
2533
|
+
|
|
2534
|
+
2. **Run full API test suite:**
|
|
2535
|
+
```
|
|
2536
|
+
API Test Suite
|
|
2537
|
+
══════════════
|
|
2538
|
+
|
|
2539
|
+
Phase 1: Unit Tests
|
|
2540
|
+
───────────────────
|
|
2541
|
+
✓ UserService - 12 tests passed
|
|
2542
|
+
✓ AuthService - 8 tests passed
|
|
2543
|
+
✓ PaymentService - 15 tests passed
|
|
2544
|
+
|
|
2545
|
+
Phase 2: Integration Tests
|
|
2546
|
+
──────────────────────────
|
|
2547
|
+
Testing: GET /api/users
|
|
2548
|
+
✓ Returns 200 with user list
|
|
2549
|
+
✓ Supports pagination
|
|
2550
|
+
✓ Filters by role
|
|
2551
|
+
|
|
2552
|
+
Testing: POST /api/auth/login
|
|
2553
|
+
✓ Returns token on valid credentials
|
|
2554
|
+
✓ Returns 401 on invalid password
|
|
2555
|
+
✗ FAILED: Returns 429 on rate limit
|
|
2556
|
+
|
|
2557
|
+
AUTO-FIX: Analyzing failure...
|
|
2558
|
+
Root cause: Rate limiter not configured in test env
|
|
2559
|
+
Fixing: src/middleware/rateLimit.ts:8
|
|
2560
|
+
→ Added: if (process.env.NODE_ENV === 'test') return next()
|
|
2561
|
+
Re-running test... ✓ PASSED
|
|
2562
|
+
|
|
2563
|
+
Phase 3: Contract Tests
|
|
2564
|
+
───────────────────────
|
|
2565
|
+
Validating OpenAPI spec...
|
|
2566
|
+
✓ GET /api/users matches schema
|
|
2567
|
+
✓ POST /api/users matches schema
|
|
2568
|
+
✗ FAILED: PUT /api/users/:id - missing field
|
|
2569
|
+
|
|
2570
|
+
AUTO-FIX: Analyzing failure...
|
|
2571
|
+
Root cause: Response missing 'updatedAt' field
|
|
2572
|
+
Fixing: src/controllers/userController.ts:89
|
|
2573
|
+
→ Added: updatedAt: user.updatedAt to response
|
|
2574
|
+
Re-running test... ✓ PASSED
|
|
2575
|
+
|
|
2576
|
+
Phase 4: Load Tests (k6)
|
|
2577
|
+
────────────────────────
|
|
2578
|
+
Running: k6 run loadtest.js
|
|
2579
|
+
✓ 100 VUs, 30s duration
|
|
2580
|
+
✓ p95 response time: 145ms (< 200ms threshold)
|
|
2581
|
+
✓ Error rate: 0.1% (< 1% threshold)
|
|
2582
|
+
✓ Throughput: 850 req/s
|
|
2583
|
+
|
|
2584
|
+
Phase 5: Security Tests
|
|
2585
|
+
───────────────────────
|
|
2586
|
+
✓ SQL injection: Protected
|
|
2587
|
+
✓ XSS: Protected
|
|
2588
|
+
✓ CSRF: Protected
|
|
2589
|
+
✗ FAILED: Rate limiting on /api/auth/login
|
|
2590
|
+
|
|
2591
|
+
AUTO-FIX: Analyzing failure...
|
|
2592
|
+
Root cause: Rate limit too high (1000 req/min)
|
|
2593
|
+
Fixing: src/config/security.ts:15
|
|
2594
|
+
→ Changed: loginRateLimit: 1000 → loginRateLimit: 10
|
|
2595
|
+
Re-running test... ✓ PASSED
|
|
2596
|
+
|
|
2597
|
+
══════════════════════════════════════════
|
|
2598
|
+
ALL TESTS PASSING: 52/52 ✓
|
|
2599
|
+
══════════════════════════════════════════
|
|
2600
|
+
```
|
|
2601
|
+
|
|
2602
|
+
3. Generate detailed test report at `./.proagents/test-reports/api-{timestamp}.md`
|
|
2603
|
+
|
|
2159
2604
|
For `pa:test-visual`:
|
|
2160
2605
|
1. Take screenshots of all screens/components
|
|
2161
2606
|
2. Compare against design references:
|
|
@@ -2261,6 +2706,65 @@ For `pa:test-auto-fix`:
|
|
|
2261
2706
|
Running verification tests...
|
|
2262
2707
|
```
|
|
2263
2708
|
|
|
2709
|
+
4. **Learn from fixes** - Store successful fixes for future use:
|
|
2710
|
+
```
|
|
2711
|
+
Saving fix patterns to .proagents/.learning/fixes.json...
|
|
2712
|
+
|
|
2713
|
+
New patterns learned:
|
|
2714
|
+
┌────────────────────┬────────────────────────────────────────┐
|
|
2715
|
+
│ Error Pattern │ Fix Pattern │
|
|
2716
|
+
├────────────────────┼────────────────────────────────────────┤
|
|
2717
|
+
│ "undefined" error │ Add null check before access │
|
|
2718
|
+
│ testID not found │ Add testID prop to component │
|
|
2719
|
+
│ color mismatch │ Use design token instead of hex │
|
|
2720
|
+
│ rate limit fail │ Disable in test environment │
|
|
2721
|
+
│ schema mismatch │ Add missing field to response │
|
|
2722
|
+
└────────────────────┴────────────────────────────────────────┘
|
|
2723
|
+
|
|
2724
|
+
✓ 5 fix patterns saved
|
|
2725
|
+
```
|
|
2726
|
+
|
|
2727
|
+
**Auto-Fix Intelligence:**
|
|
2728
|
+
|
|
2729
|
+
The AI learns from previous fixes to apply them faster:
|
|
2730
|
+
|
|
2731
|
+
1. **Pattern Database** - Stored in `.proagents/.learning/`:
|
|
2732
|
+
```
|
|
2733
|
+
.proagents/.learning/
|
|
2734
|
+
├── fixes.json # Successful fix patterns
|
|
2735
|
+
├── errors.json # Common error patterns
|
|
2736
|
+
└── project-patterns.json # Project-specific patterns
|
|
2737
|
+
```
|
|
2738
|
+
|
|
2739
|
+
2. **Fix Matching** - When a test fails:
|
|
2740
|
+
```
|
|
2741
|
+
Analyzing failure: "Cannot read property 'id' of undefined"
|
|
2742
|
+
|
|
2743
|
+
Checking learned patterns...
|
|
2744
|
+
✓ Match found: "undefined property access"
|
|
2745
|
+
|
|
2746
|
+
Applying known fix:
|
|
2747
|
+
→ Add optional chaining: user?.id
|
|
2748
|
+
|
|
2749
|
+
Confidence: 95% (applied 12 times before, 100% success rate)
|
|
2750
|
+
```
|
|
2751
|
+
|
|
2752
|
+
3. **Learning from Corrections** - If AI fix is wrong:
|
|
2753
|
+
```
|
|
2754
|
+
User corrected fix:
|
|
2755
|
+
- AI suggested: user?.id ?? 'default'
|
|
2756
|
+
- User changed to: user?.id || throw new Error('User required')
|
|
2757
|
+
|
|
2758
|
+
Learning...
|
|
2759
|
+
→ Updated pattern: In auth contexts, throw error instead of default
|
|
2760
|
+
→ Saved to .proagents/.learning/corrections.json
|
|
2761
|
+
```
|
|
2762
|
+
|
|
2763
|
+
4. **Project-Specific Learning**:
|
|
2764
|
+
- Learns project conventions (e.g., "this project uses Zod for validation")
|
|
2765
|
+
- Remembers file structure patterns
|
|
2766
|
+
- Knows which solutions worked in this codebase
|
|
2767
|
+
|
|
2264
2768
|
For `pa:test-loop`:
|
|
2265
2769
|
1. Run complete Test → Fix → Retest cycle:
|
|
2266
2770
|
```
|
|
@@ -2512,6 +3016,213 @@ mobile_testing:
|
|
|
2512
3016
|
└── auto-fix-log.md # Log of all auto-fixes
|
|
2513
3017
|
```
|
|
2514
3018
|
|
|
3019
|
+
### Custom Testing Tools Configuration
|
|
3020
|
+
|
|
3021
|
+
Users can configure their own testing tools in `proagents.config.yaml`. **AI MUST check and use these custom tools** instead of defaults.
|
|
3022
|
+
|
|
3023
|
+
**Read custom tools from config:**
|
|
3024
|
+
```yaml
|
|
3025
|
+
# proagents.config.yaml → testing.tools section
|
|
3026
|
+
testing:
|
|
3027
|
+
tools:
|
|
3028
|
+
unit:
|
|
3029
|
+
command: "npm test" # Custom unit test command
|
|
3030
|
+
framework: "jest" # jest | vitest | mocha | pytest | junit | xctest
|
|
3031
|
+
integration:
|
|
3032
|
+
command: "npm run test:integration"
|
|
3033
|
+
framework: "jest"
|
|
3034
|
+
e2e:
|
|
3035
|
+
command: "npx playwright test"
|
|
3036
|
+
framework: "playwright" # playwright | cypress | maestro | detox
|
|
3037
|
+
visual:
|
|
3038
|
+
command: "npx percy exec -- npm test"
|
|
3039
|
+
framework: "percy" # percy | chromatic | applitools
|
|
3040
|
+
load:
|
|
3041
|
+
command: "k6 run loadtest.js"
|
|
3042
|
+
framework: "k6" # k6 | artillery | locust | jmeter
|
|
3043
|
+
security:
|
|
3044
|
+
command: "npm audit && snyk test"
|
|
3045
|
+
framework: "snyk" # snyk | npm-audit | owasp-zap
|
|
3046
|
+
|
|
3047
|
+
auto_install: true # Auto-install missing tools
|
|
3048
|
+
|
|
3049
|
+
custom_commands: # User shortcuts
|
|
3050
|
+
"test:quick": "npm test -- --onlyChanged"
|
|
3051
|
+
"test:ci": "npm test -- --coverage --ci"
|
|
3052
|
+
```
|
|
3053
|
+
|
|
3054
|
+
**How AI uses custom tools:**
|
|
3055
|
+
|
|
3056
|
+
For `pa:test`, `pa:test-mobile`, `pa:test-web`, `pa:test-api`:
|
|
3057
|
+
|
|
3058
|
+
1. **Read proagents.config.yaml first:**
|
|
3059
|
+
```
|
|
3060
|
+
Loading test configuration...
|
|
3061
|
+
|
|
3062
|
+
Custom tools configured:
|
|
3063
|
+
├── Unit: npm test (jest)
|
|
3064
|
+
├── Integration: npm run test:integration (jest)
|
|
3065
|
+
├── E2E: npx playwright test (playwright)
|
|
3066
|
+
├── Visual: npx percy exec -- npm test (percy)
|
|
3067
|
+
├── Load: k6 run loadtest.js (k6)
|
|
3068
|
+
└── Security: npm audit && snyk test (snyk)
|
|
3069
|
+
```
|
|
3070
|
+
|
|
3071
|
+
2. **Use custom command instead of default:**
|
|
3072
|
+
```
|
|
3073
|
+
Running Unit Tests
|
|
3074
|
+
══════════════════
|
|
3075
|
+
|
|
3076
|
+
Using custom command: npm test
|
|
3077
|
+
Framework: jest
|
|
3078
|
+
|
|
3079
|
+
> npm test
|
|
3080
|
+
|
|
3081
|
+
PASS src/__tests__/auth.test.ts
|
|
3082
|
+
PASS src/__tests__/user.test.ts
|
|
3083
|
+
...
|
|
3084
|
+
```
|
|
3085
|
+
|
|
3086
|
+
3. **Auto-install if tool missing and auto_install: true:**
|
|
3087
|
+
```
|
|
3088
|
+
Tool not found: k6
|
|
3089
|
+
Config: auto_install: true
|
|
3090
|
+
|
|
3091
|
+
Installing k6...
|
|
3092
|
+
✓ k6 installed successfully
|
|
3093
|
+
|
|
3094
|
+
Running load tests...
|
|
3095
|
+
```
|
|
3096
|
+
|
|
3097
|
+
4. **Support custom_commands shortcuts:**
|
|
3098
|
+
```
|
|
3099
|
+
User runs: pa:test quick
|
|
3100
|
+
|
|
3101
|
+
Checking custom_commands...
|
|
3102
|
+
Found: "test:quick" → "npm test -- --onlyChanged"
|
|
3103
|
+
|
|
3104
|
+
Running: npm test -- --onlyChanged
|
|
3105
|
+
```
|
|
3106
|
+
|
|
3107
|
+
**Mobile Testing Tools (platform-specific):**
|
|
3108
|
+
|
|
3109
|
+
For `pa:test-mobile`, read the `testing.mobile` section:
|
|
3110
|
+
|
|
3111
|
+
```yaml
|
|
3112
|
+
# proagents.config.yaml → testing.mobile section
|
|
3113
|
+
testing:
|
|
3114
|
+
mobile:
|
|
3115
|
+
# React Native / Expo
|
|
3116
|
+
react_native:
|
|
3117
|
+
unit:
|
|
3118
|
+
command: "npm test"
|
|
3119
|
+
framework: "jest"
|
|
3120
|
+
component:
|
|
3121
|
+
command: "npm test -- --testPathPattern=components"
|
|
3122
|
+
framework: "@testing-library/react-native"
|
|
3123
|
+
e2e:
|
|
3124
|
+
command: "maestro test .maestro/"
|
|
3125
|
+
framework: "maestro" # maestro | detox | appium
|
|
3126
|
+
|
|
3127
|
+
# Native Android (Kotlin/Java)
|
|
3128
|
+
android:
|
|
3129
|
+
unit:
|
|
3130
|
+
command: "./gradlew test"
|
|
3131
|
+
framework: "junit"
|
|
3132
|
+
integration:
|
|
3133
|
+
command: "./gradlew connectedAndroidTest"
|
|
3134
|
+
framework: "espresso"
|
|
3135
|
+
e2e:
|
|
3136
|
+
command: "maestro test .maestro/"
|
|
3137
|
+
framework: "maestro"
|
|
3138
|
+
|
|
3139
|
+
# Native iOS (Swift/Objective-C)
|
|
3140
|
+
ios:
|
|
3141
|
+
unit:
|
|
3142
|
+
command: "xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 15'"
|
|
3143
|
+
framework: "xctest"
|
|
3144
|
+
e2e:
|
|
3145
|
+
command: "maestro test .maestro/"
|
|
3146
|
+
framework: "maestro"
|
|
3147
|
+
|
|
3148
|
+
# Flutter
|
|
3149
|
+
flutter:
|
|
3150
|
+
unit:
|
|
3151
|
+
command: "flutter test"
|
|
3152
|
+
framework: "flutter_test"
|
|
3153
|
+
integration:
|
|
3154
|
+
command: "flutter test integration_test/"
|
|
3155
|
+
framework: "integration_test"
|
|
3156
|
+
e2e:
|
|
3157
|
+
command: "maestro test .maestro/"
|
|
3158
|
+
framework: "maestro"
|
|
3159
|
+
```
|
|
3160
|
+
|
|
3161
|
+
**How AI uses mobile tools:**
|
|
3162
|
+
|
|
3163
|
+
1. **Detect platform first:**
|
|
3164
|
+
```
|
|
3165
|
+
Detecting mobile project type...
|
|
3166
|
+
|
|
3167
|
+
Checking for:
|
|
3168
|
+
├── package.json + react-native → React Native
|
|
3169
|
+
├── android/build.gradle (no RN) → Native Android
|
|
3170
|
+
├── ios/*.xcodeproj (no RN) → Native iOS
|
|
3171
|
+
├── pubspec.yaml → Flutter
|
|
3172
|
+
|
|
3173
|
+
Detected: React Native
|
|
3174
|
+
```
|
|
3175
|
+
|
|
3176
|
+
2. **Read platform-specific config:**
|
|
3177
|
+
```
|
|
3178
|
+
Loading config: testing.mobile.react_native
|
|
3179
|
+
|
|
3180
|
+
Tools:
|
|
3181
|
+
├── Unit: npm test (jest)
|
|
3182
|
+
├── Component: npm test -- --testPathPattern=components
|
|
3183
|
+
└── E2E: maestro test .maestro/ (maestro)
|
|
3184
|
+
```
|
|
3185
|
+
|
|
3186
|
+
3. **Run with configured commands:**
|
|
3187
|
+
```
|
|
3188
|
+
Running React Native Test Suite
|
|
3189
|
+
═══════════════════════════════
|
|
3190
|
+
|
|
3191
|
+
Phase 1: Unit Tests
|
|
3192
|
+
> npm test
|
|
3193
|
+
✓ 45 tests passed
|
|
3194
|
+
|
|
3195
|
+
Phase 2: Component Tests
|
|
3196
|
+
> npm test -- --testPathPattern=components
|
|
3197
|
+
✓ 23 tests passed
|
|
3198
|
+
|
|
3199
|
+
Phase 3: E2E Tests
|
|
3200
|
+
> maestro test .maestro/
|
|
3201
|
+
✓ 12 flows passed
|
|
3202
|
+
```
|
|
3203
|
+
|
|
3204
|
+
**Default fallbacks (if no custom config):**
|
|
3205
|
+
|
|
3206
|
+
| Test Type | Detect From | Default Command |
|
|
3207
|
+
|-----------|-------------|-----------------|
|
|
3208
|
+
| Unit | package.json scripts | `npm test` or `npx jest` |
|
|
3209
|
+
| Integration | test files | `npm run test:integration` |
|
|
3210
|
+
| E2E | playwright.config / cypress.json | `npx playwright test` or `npx cypress run` |
|
|
3211
|
+
| Visual | percy.yml / chromatic | `npx percy exec` |
|
|
3212
|
+
| Load | k6 / artillery config | `k6 run` or `artillery run` |
|
|
3213
|
+
| Security | package.json | `npm audit` |
|
|
3214
|
+
|
|
3215
|
+
**Mobile fallbacks (if no custom config):**
|
|
3216
|
+
|
|
3217
|
+
| Platform | Unit | E2E |
|
|
3218
|
+
|----------|------|-----|
|
|
3219
|
+
| React Native | `npm test` (jest) | `maestro test` or `detox test` |
|
|
3220
|
+
| Android | `./gradlew test` | `./gradlew connectedAndroidTest` |
|
|
3221
|
+
| iOS | `xcodebuild test` | `maestro test` |
|
|
3222
|
+
| Flutter | `flutter test` | `flutter test integration_test/` |
|
|
3223
|
+
|
|
3224
|
+
**IMPORTANT:** Always check `proagents.config.yaml` FIRST before using defaults.
|
|
3225
|
+
|
|
2515
3226
|
### AI Platform Management
|
|
2516
3227
|
| Command | Action |
|
|
2517
3228
|
|---------|--------|
|
|
@@ -102,6 +102,97 @@ testing:
|
|
|
102
102
|
parallel: true
|
|
103
103
|
max_workers: 4
|
|
104
104
|
|
|
105
|
+
# Custom Testing Tools (override defaults)
|
|
106
|
+
# Define your own tools for each test type
|
|
107
|
+
tools:
|
|
108
|
+
# Unit testing
|
|
109
|
+
unit:
|
|
110
|
+
command: "npm test" # or: pytest, go test, ./gradlew test
|
|
111
|
+
framework: "jest" # jest | vitest | mocha | pytest | junit | xctest | flutter_test
|
|
112
|
+
# install: "npm install" # optional: auto-install command
|
|
113
|
+
|
|
114
|
+
# Integration testing
|
|
115
|
+
integration:
|
|
116
|
+
command: "npm run test:integration"
|
|
117
|
+
framework: "jest"
|
|
118
|
+
|
|
119
|
+
# E2E testing
|
|
120
|
+
e2e:
|
|
121
|
+
command: "npx playwright test" # or: maestro test, detox test, ./gradlew connectedTest
|
|
122
|
+
framework: "playwright" # playwright | cypress | maestro | detox | espresso | xcuitest
|
|
123
|
+
# install: "npx playwright install"
|
|
124
|
+
|
|
125
|
+
# Visual testing
|
|
126
|
+
visual:
|
|
127
|
+
command: "npx percy exec -- npm test"
|
|
128
|
+
framework: "percy" # percy | chromatic | applitools | custom
|
|
129
|
+
|
|
130
|
+
# Load testing
|
|
131
|
+
load:
|
|
132
|
+
command: "k6 run loadtest.js"
|
|
133
|
+
framework: "k6" # k6 | artillery | locust | jmeter
|
|
134
|
+
|
|
135
|
+
# Security testing
|
|
136
|
+
security:
|
|
137
|
+
command: "npm audit && snyk test"
|
|
138
|
+
framework: "snyk" # snyk | npm-audit | owasp-zap
|
|
139
|
+
|
|
140
|
+
# Mobile Testing Tools (platform-specific)
|
|
141
|
+
mobile:
|
|
142
|
+
# React Native / Expo
|
|
143
|
+
react_native:
|
|
144
|
+
unit:
|
|
145
|
+
command: "npm test"
|
|
146
|
+
framework: "jest"
|
|
147
|
+
component:
|
|
148
|
+
command: "npm test -- --testPathPattern=components"
|
|
149
|
+
framework: "@testing-library/react-native"
|
|
150
|
+
e2e:
|
|
151
|
+
command: "maestro test .maestro/"
|
|
152
|
+
framework: "maestro" # maestro | detox | appium
|
|
153
|
+
# alternative: "npx detox test -c ios.sim.release"
|
|
154
|
+
|
|
155
|
+
# Native Android (Kotlin/Java)
|
|
156
|
+
android:
|
|
157
|
+
unit:
|
|
158
|
+
command: "./gradlew test"
|
|
159
|
+
framework: "junit" # junit | junit5 | kotest
|
|
160
|
+
integration:
|
|
161
|
+
command: "./gradlew connectedAndroidTest"
|
|
162
|
+
framework: "espresso"
|
|
163
|
+
e2e:
|
|
164
|
+
command: "maestro test .maestro/"
|
|
165
|
+
framework: "maestro" # maestro | espresso | ui-automator
|
|
166
|
+
|
|
167
|
+
# Native iOS (Swift/Objective-C)
|
|
168
|
+
ios:
|
|
169
|
+
unit:
|
|
170
|
+
command: "xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 15'"
|
|
171
|
+
framework: "xctest"
|
|
172
|
+
e2e:
|
|
173
|
+
command: "maestro test .maestro/"
|
|
174
|
+
framework: "maestro" # maestro | xcuitest
|
|
175
|
+
|
|
176
|
+
# Flutter
|
|
177
|
+
flutter:
|
|
178
|
+
unit:
|
|
179
|
+
command: "flutter test"
|
|
180
|
+
framework: "flutter_test"
|
|
181
|
+
integration:
|
|
182
|
+
command: "flutter test integration_test/"
|
|
183
|
+
framework: "integration_test"
|
|
184
|
+
e2e:
|
|
185
|
+
command: "maestro test .maestro/"
|
|
186
|
+
framework: "maestro"
|
|
187
|
+
|
|
188
|
+
# Auto-install missing tools
|
|
189
|
+
auto_install: true
|
|
190
|
+
|
|
191
|
+
# Custom test commands (shortcuts)
|
|
192
|
+
custom_commands:
|
|
193
|
+
"test:quick": "npm test -- --onlyChanged"
|
|
194
|
+
"test:ci": "npm test -- --coverage --ci"
|
|
195
|
+
|
|
105
196
|
# Security Configuration
|
|
106
197
|
security:
|
|
107
198
|
require_review: true
|
package/README.md
CHANGED
|
@@ -109,6 +109,22 @@ npx proagents init --list-templates # Show all templates
|
|
|
109
109
|
- **Decision Log** - Track architectural decisions with reasoning
|
|
110
110
|
- **Context File** - Persistent project knowledge AI reads every session
|
|
111
111
|
|
|
112
|
+
### Full Automation
|
|
113
|
+
|
|
114
|
+
ProAgents follows **"ALWAYS DO, NEVER JUST TELL"** principle:
|
|
115
|
+
|
|
116
|
+
| Instead of | ProAgents does |
|
|
117
|
+
|------------|----------------|
|
|
118
|
+
| "Run `npm test`" | Actually runs the tests |
|
|
119
|
+
| "Create a test file" | Creates the file |
|
|
120
|
+
| "Fix the bug by..." | Fixes the bug directly |
|
|
121
|
+
| "Next steps: 1. 2. 3." | Does all steps automatically |
|
|
122
|
+
|
|
123
|
+
**Auto-fix intelligence:**
|
|
124
|
+
- Learns from previous fixes
|
|
125
|
+
- Applies known patterns automatically
|
|
126
|
+
- Stores successful fixes in `.proagents/.learning/`
|
|
127
|
+
|
|
112
128
|
### File Protection
|
|
113
129
|
|
|
114
130
|
- **Watch List** - Critical files require confirmation before AI modifies
|
|
@@ -408,10 +424,15 @@ Type these in any AI assistant (Claude, ChatGPT, Gemini, Cursor, etc.):
|
|
|
408
424
|
| `pa:alias-add` | Add custom alias |
|
|
409
425
|
| `pa:alias-remove` | Remove custom alias |
|
|
410
426
|
|
|
411
|
-
###
|
|
427
|
+
### Platform-Specific Test Suites
|
|
428
|
+
|
|
429
|
+
**Fully automated**: Auto-install tools, run tests, auto-fix failures, loop until all pass.
|
|
430
|
+
|
|
412
431
|
| Command | Description |
|
|
413
432
|
|---------|-------------|
|
|
414
|
-
| `pa:test-mobile` |
|
|
433
|
+
| `pa:test-mobile` | Full mobile test suite (React Native, Android, iOS, Flutter) |
|
|
434
|
+
| `pa:test-web` | Full web test suite (React/Next.js/Vue) |
|
|
435
|
+
| `pa:test-api` | Full API test suite (Node.js/Python) |
|
|
415
436
|
| `pa:test-visual` | Visual/design comparison testing |
|
|
416
437
|
| `pa:test-auto-fix` | Auto-fix failing tests |
|
|
417
438
|
| `pa:test-loop` | Test → Fix → Retest until all pass |
|
|
@@ -419,6 +440,12 @@ Type these in any AI assistant (Claude, ChatGPT, Gemini, Cursor, etc.):
|
|
|
419
440
|
| `pa:compare-image` | Compare UI against image/sketch |
|
|
420
441
|
| `pa:screenshot` | Capture app screenshots |
|
|
421
442
|
|
|
443
|
+
**What these commands do:**
|
|
444
|
+
- Check required tools → Auto-install if missing
|
|
445
|
+
- Run all tests (unit, integration, e2e)
|
|
446
|
+
- Auto-fix failures (no confirmation needed)
|
|
447
|
+
- Loop until all pass or fix is impossible
|
|
448
|
+
|
|
422
449
|
### Custom Commands
|
|
423
450
|
| Command | Description |
|
|
424
451
|
|---------|-------------|
|