@su-record/vibe 2.7.10 → 2.7.12
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/.env.example +37 -37
- package/CLAUDE.md +126 -222
- package/LICENSE +21 -21
- package/README.md +580 -580
- package/agents/architect-low.md +41 -41
- package/agents/architect-medium.md +59 -59
- package/agents/architect.md +80 -80
- package/agents/build-error-resolver.md +115 -115
- package/agents/compounder.md +261 -261
- package/agents/diagrammer.md +178 -178
- package/agents/docs/api-documenter.md +99 -99
- package/agents/docs/changelog-writer.md +93 -93
- package/agents/e2e-tester.md +266 -266
- package/agents/explorer-low.md +42 -42
- package/agents/explorer-medium.md +59 -59
- package/agents/explorer.md +48 -48
- package/agents/implementer-low.md +43 -43
- package/agents/implementer-medium.md +52 -52
- package/agents/implementer.md +54 -54
- package/agents/junior-mentor.md +141 -141
- package/agents/planning/requirements-analyst.md +84 -84
- package/agents/planning/ux-advisor.md +83 -83
- package/agents/qa/acceptance-tester.md +86 -86
- package/agents/qa/edge-case-finder.md +93 -93
- package/agents/refactor-cleaner.md +143 -143
- package/agents/research/best-practices-agent.md +199 -199
- package/agents/research/codebase-patterns-agent.md +157 -157
- package/agents/research/framework-docs-agent.md +188 -188
- package/agents/research/security-advisory-agent.md +213 -213
- package/agents/review/architecture-reviewer.md +107 -107
- package/agents/review/complexity-reviewer.md +116 -116
- package/agents/review/data-integrity-reviewer.md +88 -88
- package/agents/review/git-history-reviewer.md +103 -103
- package/agents/review/performance-reviewer.md +86 -86
- package/agents/review/python-reviewer.md +150 -150
- package/agents/review/rails-reviewer.md +139 -139
- package/agents/review/react-reviewer.md +144 -144
- package/agents/review/security-reviewer.md +80 -80
- package/agents/review/simplicity-reviewer.md +140 -140
- package/agents/review/test-coverage-reviewer.md +116 -116
- package/agents/review/typescript-reviewer.md +127 -127
- package/agents/searcher.md +54 -54
- package/agents/simplifier.md +120 -120
- package/agents/tester.md +49 -49
- package/agents/ui/ui-a11y-auditor.md +93 -93
- package/agents/ui/ui-antipattern-detector.md +94 -94
- package/agents/ui/ui-dataviz-advisor.md +69 -69
- package/agents/ui/ui-design-system-gen.md +57 -57
- package/agents/ui/ui-industry-analyzer.md +49 -49
- package/agents/ui/ui-layout-architect.md +65 -65
- package/agents/ui/ui-stack-implementer.md +68 -68
- package/agents/ui/ux-compliance-reviewer.md +81 -81
- package/agents/ui-previewer.md +260 -260
- package/commands/vibe.run.md +83 -0
- package/commands/vibe.spec.review.md +558 -558
- package/commands/vibe.utils.md +413 -413
- package/commands/vibe.voice.md +79 -79
- package/dist/cli/auth.d.ts +1 -1
- package/dist/cli/auth.d.ts.map +1 -1
- package/dist/cli/auth.js +15 -7
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/collaborator.js +52 -52
- package/dist/cli/commands/evolution.js +12 -12
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +62 -56
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +9 -6
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/remove.js +14 -14
- package/dist/cli/commands/sentinel.js +27 -27
- package/dist/cli/commands/skills.d.ts +13 -0
- package/dist/cli/commands/skills.d.ts.map +1 -0
- package/dist/cli/commands/skills.js +83 -0
- package/dist/cli/commands/skills.js.map +1 -0
- package/dist/cli/commands/slack.js +10 -10
- package/dist/cli/commands/telegram.js +12 -12
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +3 -0
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/detect.js +32 -32
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +64 -47
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/llm/claude-commands.js +16 -16
- package/dist/cli/llm/config.js +18 -18
- package/dist/cli/llm/gemini-commands.js +47 -47
- package/dist/cli/llm/gpt-commands.js +19 -19
- package/dist/cli/llm/help.js +21 -21
- package/dist/cli/postinstall/constants.d.ts +8 -0
- package/dist/cli/postinstall/constants.d.ts.map +1 -1
- package/dist/cli/postinstall/constants.js +33 -0
- package/dist/cli/postinstall/constants.js.map +1 -1
- package/dist/cli/postinstall/cursor-agents.js +32 -32
- package/dist/cli/postinstall/cursor-rules.js +83 -83
- package/dist/cli/postinstall/cursor-skills.js +743 -743
- package/dist/cli/postinstall/index.d.ts +1 -1
- package/dist/cli/postinstall/index.d.ts.map +1 -1
- package/dist/cli/postinstall/index.js +1 -1
- package/dist/cli/postinstall/index.js.map +1 -1
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +5 -0
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/dist/cli/setup/Provisioner.js +42 -42
- package/dist/cli/types.d.ts +1 -0
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/infra/lib/DeepInit.js +24 -24
- package/dist/infra/lib/IterationTracker.js +11 -11
- package/dist/infra/lib/PythonParser.js +108 -108
- package/dist/infra/lib/ReviewRace.js +96 -96
- package/dist/infra/lib/SkillFrontmatter.js +28 -28
- package/dist/infra/lib/SkillQualityGate.js +9 -9
- package/dist/infra/lib/SkillRepository.js +159 -159
- package/dist/infra/lib/UltraQA.js +99 -99
- package/dist/infra/lib/autonomy/AuditStore.js +41 -41
- package/dist/infra/lib/autonomy/ConfirmationStore.js +30 -30
- package/dist/infra/lib/autonomy/EventOutbox.js +38 -38
- package/dist/infra/lib/autonomy/PolicyEngine.js +18 -18
- package/dist/infra/lib/autonomy/SecuritySentinel.js +1 -1
- package/dist/infra/lib/autonomy/SuggestionStore.js +33 -33
- package/dist/infra/lib/embedding/VectorStore.js +22 -22
- package/dist/infra/lib/evolution/AgentAnalyzer.js +10 -10
- package/dist/infra/lib/evolution/DescriptionOptimizer.d.ts +79 -0
- package/dist/infra/lib/evolution/DescriptionOptimizer.d.ts.map +1 -0
- package/dist/infra/lib/evolution/DescriptionOptimizer.js +259 -0
- package/dist/infra/lib/evolution/DescriptionOptimizer.js.map +1 -0
- package/dist/infra/lib/evolution/GenerationRegistry.js +36 -36
- package/dist/infra/lib/evolution/InsightStore.js +90 -90
- package/dist/infra/lib/evolution/RollbackManager.js +5 -5
- package/dist/infra/lib/evolution/SkillBenchmark.d.ts +81 -0
- package/dist/infra/lib/evolution/SkillBenchmark.d.ts.map +1 -0
- package/dist/infra/lib/evolution/SkillBenchmark.js +233 -0
- package/dist/infra/lib/evolution/SkillBenchmark.js.map +1 -0
- package/dist/infra/lib/evolution/SkillClassifier.d.ts +35 -0
- package/dist/infra/lib/evolution/SkillClassifier.d.ts.map +1 -0
- package/dist/infra/lib/evolution/SkillClassifier.js +167 -0
- package/dist/infra/lib/evolution/SkillClassifier.js.map +1 -0
- package/dist/infra/lib/evolution/SkillEvalRunner.d.ts +102 -0
- package/dist/infra/lib/evolution/SkillEvalRunner.d.ts.map +1 -0
- package/dist/infra/lib/evolution/SkillEvalRunner.js +256 -0
- package/dist/infra/lib/evolution/SkillEvalRunner.js.map +1 -0
- package/dist/infra/lib/evolution/SkillGapDetector.js +10 -10
- package/dist/infra/lib/evolution/UsageTracker.js +28 -28
- package/dist/infra/lib/evolution/__tests__/eval.test.d.ts +2 -0
- package/dist/infra/lib/evolution/__tests__/eval.test.d.ts.map +1 -0
- package/dist/infra/lib/evolution/__tests__/eval.test.js +539 -0
- package/dist/infra/lib/evolution/__tests__/eval.test.js.map +1 -0
- package/dist/infra/lib/evolution/index.d.ts +8 -0
- package/dist/infra/lib/evolution/index.d.ts.map +1 -1
- package/dist/infra/lib/evolution/index.js +5 -0
- package/dist/infra/lib/evolution/index.js.map +1 -1
- package/dist/infra/lib/gemini/constants.js +14 -14
- package/dist/infra/lib/gemini/orchestration.js +5 -5
- package/dist/infra/lib/gpt/oauth.js +44 -44
- package/dist/infra/lib/gpt/orchestration.js +4 -4
- package/dist/infra/lib/memory/KnowledgeGraph.js +4 -4
- package/dist/infra/lib/memory/MemorySearch.js +57 -57
- package/dist/infra/lib/memory/MemoryStorage.js +181 -181
- package/dist/infra/lib/memory/ObservationStore.js +28 -28
- package/dist/infra/lib/memory/ReflectionStore.js +30 -30
- package/dist/infra/lib/memory/SessionRAGRetriever.js +7 -7
- package/dist/infra/lib/memory/SessionRAGStore.js +225 -225
- package/dist/infra/lib/memory/SessionSummarizer.js +9 -9
- package/dist/infra/orchestrator/AgentManager.js +12 -12
- package/dist/infra/orchestrator/AgentRegistry.js +65 -65
- package/dist/infra/orchestrator/MultiLlmResearch.js +8 -8
- package/dist/infra/orchestrator/SwarmOrchestrator.test.js +16 -16
- package/dist/infra/orchestrator/parallelResearch.js +24 -24
- package/dist/tools/convention/analyzeComplexity.test.js +115 -115
- package/dist/tools/convention/validateCodeQuality.test.js +104 -104
- package/dist/tools/memory/createMemoryTimeline.js +10 -10
- package/dist/tools/memory/getMemoryGraph.js +12 -12
- package/dist/tools/memory/getSessionContext.js +9 -9
- package/dist/tools/memory/linkMemories.js +14 -14
- package/dist/tools/memory/listMemories.js +4 -4
- package/dist/tools/memory/recallMemory.js +4 -4
- package/dist/tools/memory/saveMemory.js +4 -4
- package/dist/tools/memory/searchMemoriesAdvanced.js +23 -23
- package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
- package/dist/tools/semantic/astGrep.test.js +6 -6
- package/dist/tools/spec/prdParser.test.js +171 -171
- package/dist/tools/spec/specGenerator.js +169 -169
- package/dist/tools/spec/traceabilityMatrix.js +64 -64
- package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
- package/hooks/gemini-hooks.json +73 -73
- package/hooks/hooks.json +137 -137
- package/hooks/scripts/code-check.js +70 -70
- package/hooks/scripts/context-save.js +212 -212
- package/hooks/scripts/hud-status.js +291 -291
- package/hooks/scripts/keyword-detector.js +214 -214
- package/hooks/scripts/llm-orchestrate.js +646 -646
- package/hooks/scripts/post-edit.js +32 -32
- package/hooks/scripts/pre-tool-guard.js +125 -125
- package/hooks/scripts/prompt-dispatcher.js +185 -185
- package/hooks/scripts/sentinel-guard.js +104 -104
- package/hooks/scripts/session-start.js +106 -106
- package/hooks/scripts/stop-notify.js +209 -209
- package/hooks/scripts/utils.js +100 -100
- package/languages/csharp-unity.md +515 -515
- package/languages/gdscript-godot.md +470 -470
- package/languages/ruby-rails.md +489 -489
- package/languages/typescript-angular.md +433 -433
- package/languages/typescript-astro.md +416 -416
- package/languages/typescript-electron.md +406 -406
- package/languages/typescript-nestjs.md +524 -524
- package/languages/typescript-svelte.md +407 -407
- package/languages/typescript-tauri.md +365 -365
- package/package.json +121 -121
- package/skills/agents-md/SKILL.md +120 -120
- package/skills/arch-guard/SKILL.md +180 -0
- package/skills/brand-assets/SKILL.md +146 -146
- package/skills/capability-loop/SKILL.md +167 -0
- package/skills/characterization-test/SKILL.md +206 -206
- package/skills/commerce-patterns/SKILL.md +59 -59
- package/skills/commit-push-pr/SKILL.md +75 -75
- package/skills/context7-usage/SKILL.md +105 -105
- package/skills/core-capabilities/SKILL.md +48 -48
- package/skills/e2e-commerce/SKILL.md +57 -57
- package/skills/exec-plan/SKILL.md +147 -0
- package/skills/frontend-design/SKILL.md +73 -73
- package/skills/git-worktree/SKILL.md +72 -72
- package/skills/handoff/SKILL.md +109 -109
- package/skills/parallel-research/SKILL.md +87 -87
- package/skills/priority-todos/SKILL.md +63 -63
- package/skills/seo-checklist/SKILL.md +57 -57
- package/skills/techdebt/SKILL.md +122 -122
- package/skills/tool-fallback/SKILL.md +103 -103
- package/skills/typescript-advanced-types/SKILL.md +65 -65
- package/skills/ui-ux-pro-max/SKILL.md +206 -206
- package/skills/vercel-react-best-practices/SKILL.md +59 -59
- package/skills/video-production/SKILL.md +51 -51
- package/vibe/config.json +29 -29
- package/vibe/constitution.md +227 -227
- package/vibe/rules/principles/communication-guide.md +98 -98
- package/vibe/rules/principles/development-philosophy.md +52 -52
- package/vibe/rules/principles/quick-start.md +102 -102
- package/vibe/rules/quality/bdd-contract-testing.md +393 -393
- package/vibe/rules/quality/checklist.md +276 -276
- package/vibe/rules/quality/performance.md +236 -236
- package/vibe/rules/quality/testing-strategy.md +440 -440
- package/vibe/rules/standards/anti-patterns.md +541 -541
- package/vibe/rules/standards/code-structure.md +291 -291
- package/vibe/rules/standards/complexity-metrics.md +313 -313
- package/vibe/rules/standards/git-workflow.md +237 -237
- package/vibe/rules/standards/naming-conventions.md +198 -198
- package/vibe/rules/standards/security.md +305 -305
- package/vibe/rules/writing/document-style.md +74 -74
- package/vibe/setup.sh +31 -31
- package/vibe/templates/constitution-template.md +252 -252
- package/vibe/templates/contract-backend-template.md +526 -526
- package/vibe/templates/contract-frontend-template.md +599 -599
- package/vibe/templates/feature-template.md +96 -96
- package/vibe/templates/spec-template.md +221 -221
- package/vibe/ui-ux-data/charts.csv +26 -26
- package/vibe/ui-ux-data/colors.csv +97 -97
- package/vibe/ui-ux-data/icons.csv +101 -101
- package/vibe/ui-ux-data/landing.csv +31 -31
- package/vibe/ui-ux-data/products.csv +96 -96
- package/vibe/ui-ux-data/react-performance.csv +45 -45
- package/vibe/ui-ux-data/stacks/astro.csv +54 -54
- package/vibe/ui-ux-data/stacks/flutter.csv +53 -53
- package/vibe/ui-ux-data/stacks/html-tailwind.csv +56 -56
- package/vibe/ui-ux-data/stacks/jetpack-compose.csv +53 -53
- package/vibe/ui-ux-data/stacks/nextjs.csv +53 -53
- package/vibe/ui-ux-data/stacks/nuxt-ui.csv +51 -51
- package/vibe/ui-ux-data/stacks/nuxtjs.csv +59 -59
- package/vibe/ui-ux-data/stacks/react-native.csv +52 -52
- package/vibe/ui-ux-data/stacks/react.csv +54 -54
- package/vibe/ui-ux-data/stacks/shadcn.csv +61 -61
- package/vibe/ui-ux-data/stacks/svelte.csv +54 -54
- package/vibe/ui-ux-data/stacks/swiftui.csv +51 -51
- package/vibe/ui-ux-data/stacks/vue.csv +50 -50
- package/vibe/ui-ux-data/styles.csv +68 -68
- package/vibe/ui-ux-data/typography.csv +57 -57
- package/vibe/ui-ux-data/ui-reasoning.csv +101 -101
- package/vibe/ui-ux-data/ux-guidelines.csv +99 -99
- package/vibe/ui-ux-data/version.json +31 -31
- package/vibe/ui-ux-data/web-interface.csv +31 -31
package/agents/e2e-tester.md
CHANGED
|
@@ -1,266 +1,266 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: End-to-end testing with Playwright automation
|
|
3
|
-
argument-hint: "test scenario or URL"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# /vibe.e2e
|
|
7
|
-
|
|
8
|
-
**E2E Test Automation** - Playwright-based browser testing
|
|
9
|
-
|
|
10
|
-
## Usage
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
/vibe.e2e # Run all E2E tests
|
|
14
|
-
/vibe.e2e "login flow" # Test specific scenario
|
|
15
|
-
/vibe.e2e http://localhost:3000/login # Test specific URL
|
|
16
|
-
/vibe.e2e --visual # Visual regression testing
|
|
17
|
-
/vibe.e2e --record # Record test video
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Core Features
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
24
|
-
│ 🎭 Playwright E2E Testing │
|
|
25
|
-
├─────────────────────────────────────────────────────────────────┤
|
|
26
|
-
│ │
|
|
27
|
-
│ ✅ Screenshot Capture - Record UI state │
|
|
28
|
-
│ ✅ Console Error Collection - Detect JS errors │
|
|
29
|
-
│ ✅ Network Monitoring - Detect API failures │
|
|
30
|
-
│ ✅ Visual Regression - Compare screenshots │
|
|
31
|
-
│ ✅ Video Recording - Bug reproduction evidence │
|
|
32
|
-
│ ✅ Accessibility Check - Detect a11y violations │
|
|
33
|
-
│ │
|
|
34
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Process
|
|
38
|
-
|
|
39
|
-
### Phase 1: Environment Setup
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
# Check Playwright installation
|
|
43
|
-
npx playwright --version
|
|
44
|
-
|
|
45
|
-
# Install browsers if needed
|
|
46
|
-
npx playwright install chromium
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### Phase 2: Test Scenario Analysis
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
📋 Scenario Detection
|
|
53
|
-
├── .claude/vibe/features/{feature}.feature → Extract BDD scenarios
|
|
54
|
-
├── .claude/vibe/specs/{feature}.md → Check acceptance criteria
|
|
55
|
-
└── Analyze existing e2e/*.spec.ts
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### Phase 3: Test Execution
|
|
59
|
-
|
|
60
|
-
**Single Page Test:**
|
|
61
|
-
```typescript
|
|
62
|
-
// Auto-generated test
|
|
63
|
-
import { test, expect } from '@playwright/test';
|
|
64
|
-
|
|
65
|
-
test('login flow', async ({ page }) => {
|
|
66
|
-
// Navigate
|
|
67
|
-
await page.goto('http://localhost:3000/login');
|
|
68
|
-
|
|
69
|
-
// Screenshot: initial state
|
|
70
|
-
await page.screenshot({ path: 'screenshots/login-initial.png' });
|
|
71
|
-
|
|
72
|
-
// Fill form
|
|
73
|
-
await page.fill('[data-testid="email"]', 'test@example.com');
|
|
74
|
-
await page.fill('[data-testid="password"]', 'password123');
|
|
75
|
-
|
|
76
|
-
// Submit
|
|
77
|
-
await page.click('[data-testid="submit"]');
|
|
78
|
-
|
|
79
|
-
// Wait for navigation
|
|
80
|
-
await page.waitForURL('**/dashboard');
|
|
81
|
-
|
|
82
|
-
// Screenshot: success state
|
|
83
|
-
await page.screenshot({ path: 'screenshots/login-success.png' });
|
|
84
|
-
|
|
85
|
-
// Assertions
|
|
86
|
-
await expect(page.locator('h1')).toContainText('Dashboard');
|
|
87
|
-
});
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
**Console Error Collection:**
|
|
91
|
-
```typescript
|
|
92
|
-
test.beforeEach(async ({ page }) => {
|
|
93
|
-
// Collect console errors
|
|
94
|
-
page.on('console', msg => {
|
|
95
|
-
if (msg.type() === 'error') {
|
|
96
|
-
console.log(`Console Error: ${msg.text()}`);
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
// Collect network failures
|
|
101
|
-
page.on('requestfailed', request => {
|
|
102
|
-
console.log(`Request failed: ${request.url()}`);
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### Phase 4: Visual Regression (--visual)
|
|
108
|
-
|
|
109
|
-
```
|
|
110
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
111
|
-
│ 👁️ Visual Regression Test │
|
|
112
|
-
├─────────────────────────────────────────────────────────────────┤
|
|
113
|
-
│ │
|
|
114
|
-
│ Comparing screenshots: │
|
|
115
|
-
│ │
|
|
116
|
-
│ ├── login-page.png │
|
|
117
|
-
│ │ ├── Baseline: .claude/vibe/e2e/baseline/login-page.png │
|
|
118
|
-
│ │ ├── Current: .claude/vibe/e2e/current/login-page.png │
|
|
119
|
-
│ │ └── Diff: ✅ 0.02% (threshold: 1%) │
|
|
120
|
-
│ │ │
|
|
121
|
-
│ ├── dashboard.png │
|
|
122
|
-
│ │ ├── Baseline: .claude/vibe/e2e/baseline/dashboard.png │
|
|
123
|
-
│ │ ├── Current: .claude/vibe/e2e/current/dashboard.png │
|
|
124
|
-
│ │ └── Diff: ❌ 5.3% (threshold: 1%) │
|
|
125
|
-
│ │ └── .claude/vibe/e2e/diff/dashboard-diff.png │
|
|
126
|
-
│ │ │
|
|
127
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Phase 5: Accessibility Check
|
|
131
|
-
|
|
132
|
-
```typescript
|
|
133
|
-
import { injectAxe, checkA11y } from 'axe-playwright';
|
|
134
|
-
|
|
135
|
-
test('accessibility check', async ({ page }) => {
|
|
136
|
-
await page.goto('/login');
|
|
137
|
-
await injectAxe(page);
|
|
138
|
-
await checkA11y(page, null, {
|
|
139
|
-
detailedReport: true,
|
|
140
|
-
detailedReportOptions: { html: true }
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
### Phase 6: Bug Reproduction (Optional)
|
|
146
|
-
|
|
147
|
-
Link with bug reports:
|
|
148
|
-
|
|
149
|
-
```
|
|
150
|
-
/vibe.e2e --reproduce "User sees blank page after login"
|
|
151
|
-
|
|
152
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
153
|
-
│ 🐛 Bug Reproduction Mode │
|
|
154
|
-
├─────────────────────────────────────────────────────────────────┤
|
|
155
|
-
│ │
|
|
156
|
-
│ Steps executed: │
|
|
157
|
-
│ 1. ✅ Navigate to /login │
|
|
158
|
-
│ 2. ✅ Enter credentials │
|
|
159
|
-
│ 3. ✅ Click login button │
|
|
160
|
-
│ 4. ❌ Dashboard shows blank │
|
|
161
|
-
│ │
|
|
162
|
-
│ Evidence collected: │
|
|
163
|
-
│ ├── 📸 screenshots/bug-step-1.png │
|
|
164
|
-
│ ├── 📸 screenshots/bug-step-2.png │
|
|
165
|
-
│ ├── 📸 screenshots/bug-step-3.png │
|
|
166
|
-
│ ├── 📸 screenshots/bug-step-4-FAIL.png │
|
|
167
|
-
│ ├── 🎥 videos/bug-reproduction.webm │
|
|
168
|
-
│ └── 📋 logs/console-errors.txt │
|
|
169
|
-
│ │
|
|
170
|
-
│ Console Errors Found: │
|
|
171
|
-
│ └── TypeError: Cannot read property 'user' of undefined │
|
|
172
|
-
│ at Dashboard.tsx:42 │
|
|
173
|
-
│ │
|
|
174
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
## Output
|
|
178
|
-
|
|
179
|
-
```
|
|
180
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
181
|
-
│ 🎭 E2E TEST RESULTS │
|
|
182
|
-
├─────────────────────────────────────────────────────────────────┤
|
|
183
|
-
│ │
|
|
184
|
-
│ Test Suite: Login Flow │
|
|
185
|
-
│ Duration: 12.3s │
|
|
186
|
-
│ Browser: Chromium 120 │
|
|
187
|
-
│ │
|
|
188
|
-
│ Results: │
|
|
189
|
-
│ ├── ✅ Passed: 8 │
|
|
190
|
-
│ ├── ❌ Failed: 1 │
|
|
191
|
-
│ └── ⏭️ Skipped: 0 │
|
|
192
|
-
│ │
|
|
193
|
-
│ Failed Tests: │
|
|
194
|
-
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
|
|
195
|
-
│ ❌ "should show error for invalid password" │
|
|
196
|
-
│ Expected: "Invalid password" message │
|
|
197
|
-
│ Actual: No error message displayed │
|
|
198
|
-
│ 📸 Screenshot: .claude/vibe/e2e/failures/invalid-password.png │
|
|
199
|
-
│ │
|
|
200
|
-
│ Console Errors: 2 │
|
|
201
|
-
│ ├── TypeError at Dashboard.tsx:42 │
|
|
202
|
-
│ └── 404 at /api/user/preferences │
|
|
203
|
-
│ │
|
|
204
|
-
│ Accessibility Issues: 3 │
|
|
205
|
-
│ ├── [serious] Form input missing label │
|
|
206
|
-
│ ├── [moderate] Color contrast insufficient │
|
|
207
|
-
│ └── [minor] Missing skip link │
|
|
208
|
-
│ │
|
|
209
|
-
│ Artifacts: │
|
|
210
|
-
│ ├── 📸 Screenshots: .claude/vibe/e2e/screenshots/ │
|
|
211
|
-
│ ├── 🎥 Video: .claude/vibe/e2e/videos/ │
|
|
212
|
-
│ └── 📋 Report: .claude/vibe/e2e/report.html │
|
|
213
|
-
│ │
|
|
214
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
## Configuration
|
|
218
|
-
|
|
219
|
-
`.claude/vibe/e2e/config.json`:
|
|
220
|
-
|
|
221
|
-
```json
|
|
222
|
-
{
|
|
223
|
-
"baseURL": "http://localhost:3000",
|
|
224
|
-
"browsers": ["chromium"],
|
|
225
|
-
"viewport": { "width": 1280, "height": 720 },
|
|
226
|
-
"video": "retain-on-failure",
|
|
227
|
-
"screenshot": "only-on-failure",
|
|
228
|
-
"trace": "retain-on-failure",
|
|
229
|
-
"visualRegression": {
|
|
230
|
-
"enabled": true,
|
|
231
|
-
"threshold": 0.01
|
|
232
|
-
},
|
|
233
|
-
"accessibility": {
|
|
234
|
-
"enabled": true,
|
|
235
|
-
"rules": ["wcag2aa"]
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
## Integration with Review
|
|
241
|
-
|
|
242
|
-
Auto-suggest after `/vibe.review`:
|
|
243
|
-
|
|
244
|
-
```
|
|
245
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
246
|
-
│ 💡 E2E Test Recommended │
|
|
247
|
-
├─────────────────────────────────────────────────────────────────┤
|
|
248
|
-
│ │
|
|
249
|
-
│ UI changes detected in this PR: │
|
|
250
|
-
│ - src/components/LoginForm.tsx │
|
|
251
|
-
│ - src/pages/Dashboard.tsx │
|
|
252
|
-
│ │
|
|
253
|
-
│ Run E2E tests? /vibe.e2e "login flow" │
|
|
254
|
-
│ │
|
|
255
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
## Related Commands
|
|
259
|
-
|
|
260
|
-
- `/vibe.review` - Code review
|
|
261
|
-
- `/vibe.verify` - SPEC verification
|
|
262
|
-
- `/vibe.compound` - Document test results
|
|
263
|
-
|
|
264
|
-
---
|
|
265
|
-
|
|
266
|
-
ARGUMENTS: $ARGUMENTS
|
|
1
|
+
---
|
|
2
|
+
description: End-to-end testing with Playwright automation
|
|
3
|
+
argument-hint: "test scenario or URL"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /vibe.e2e
|
|
7
|
+
|
|
8
|
+
**E2E Test Automation** - Playwright-based browser testing
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
/vibe.e2e # Run all E2E tests
|
|
14
|
+
/vibe.e2e "login flow" # Test specific scenario
|
|
15
|
+
/vibe.e2e http://localhost:3000/login # Test specific URL
|
|
16
|
+
/vibe.e2e --visual # Visual regression testing
|
|
17
|
+
/vibe.e2e --record # Record test video
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Core Features
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
24
|
+
│ 🎭 Playwright E2E Testing │
|
|
25
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
26
|
+
│ │
|
|
27
|
+
│ ✅ Screenshot Capture - Record UI state │
|
|
28
|
+
│ ✅ Console Error Collection - Detect JS errors │
|
|
29
|
+
│ ✅ Network Monitoring - Detect API failures │
|
|
30
|
+
│ ✅ Visual Regression - Compare screenshots │
|
|
31
|
+
│ ✅ Video Recording - Bug reproduction evidence │
|
|
32
|
+
│ ✅ Accessibility Check - Detect a11y violations │
|
|
33
|
+
│ │
|
|
34
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Process
|
|
38
|
+
|
|
39
|
+
### Phase 1: Environment Setup
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Check Playwright installation
|
|
43
|
+
npx playwright --version
|
|
44
|
+
|
|
45
|
+
# Install browsers if needed
|
|
46
|
+
npx playwright install chromium
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Phase 2: Test Scenario Analysis
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
📋 Scenario Detection
|
|
53
|
+
├── .claude/vibe/features/{feature}.feature → Extract BDD scenarios
|
|
54
|
+
├── .claude/vibe/specs/{feature}.md → Check acceptance criteria
|
|
55
|
+
└── Analyze existing e2e/*.spec.ts
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Phase 3: Test Execution
|
|
59
|
+
|
|
60
|
+
**Single Page Test:**
|
|
61
|
+
```typescript
|
|
62
|
+
// Auto-generated test
|
|
63
|
+
import { test, expect } from '@playwright/test';
|
|
64
|
+
|
|
65
|
+
test('login flow', async ({ page }) => {
|
|
66
|
+
// Navigate
|
|
67
|
+
await page.goto('http://localhost:3000/login');
|
|
68
|
+
|
|
69
|
+
// Screenshot: initial state
|
|
70
|
+
await page.screenshot({ path: 'screenshots/login-initial.png' });
|
|
71
|
+
|
|
72
|
+
// Fill form
|
|
73
|
+
await page.fill('[data-testid="email"]', 'test@example.com');
|
|
74
|
+
await page.fill('[data-testid="password"]', 'password123');
|
|
75
|
+
|
|
76
|
+
// Submit
|
|
77
|
+
await page.click('[data-testid="submit"]');
|
|
78
|
+
|
|
79
|
+
// Wait for navigation
|
|
80
|
+
await page.waitForURL('**/dashboard');
|
|
81
|
+
|
|
82
|
+
// Screenshot: success state
|
|
83
|
+
await page.screenshot({ path: 'screenshots/login-success.png' });
|
|
84
|
+
|
|
85
|
+
// Assertions
|
|
86
|
+
await expect(page.locator('h1')).toContainText('Dashboard');
|
|
87
|
+
});
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Console Error Collection:**
|
|
91
|
+
```typescript
|
|
92
|
+
test.beforeEach(async ({ page }) => {
|
|
93
|
+
// Collect console errors
|
|
94
|
+
page.on('console', msg => {
|
|
95
|
+
if (msg.type() === 'error') {
|
|
96
|
+
console.log(`Console Error: ${msg.text()}`);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// Collect network failures
|
|
101
|
+
page.on('requestfailed', request => {
|
|
102
|
+
console.log(`Request failed: ${request.url()}`);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Phase 4: Visual Regression (--visual)
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
111
|
+
│ 👁️ Visual Regression Test │
|
|
112
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
113
|
+
│ │
|
|
114
|
+
│ Comparing screenshots: │
|
|
115
|
+
│ │
|
|
116
|
+
│ ├── login-page.png │
|
|
117
|
+
│ │ ├── Baseline: .claude/vibe/e2e/baseline/login-page.png │
|
|
118
|
+
│ │ ├── Current: .claude/vibe/e2e/current/login-page.png │
|
|
119
|
+
│ │ └── Diff: ✅ 0.02% (threshold: 1%) │
|
|
120
|
+
│ │ │
|
|
121
|
+
│ ├── dashboard.png │
|
|
122
|
+
│ │ ├── Baseline: .claude/vibe/e2e/baseline/dashboard.png │
|
|
123
|
+
│ │ ├── Current: .claude/vibe/e2e/current/dashboard.png │
|
|
124
|
+
│ │ └── Diff: ❌ 5.3% (threshold: 1%) │
|
|
125
|
+
│ │ └── .claude/vibe/e2e/diff/dashboard-diff.png │
|
|
126
|
+
│ │ │
|
|
127
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Phase 5: Accessibility Check
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
import { injectAxe, checkA11y } from 'axe-playwright';
|
|
134
|
+
|
|
135
|
+
test('accessibility check', async ({ page }) => {
|
|
136
|
+
await page.goto('/login');
|
|
137
|
+
await injectAxe(page);
|
|
138
|
+
await checkA11y(page, null, {
|
|
139
|
+
detailedReport: true,
|
|
140
|
+
detailedReportOptions: { html: true }
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Phase 6: Bug Reproduction (Optional)
|
|
146
|
+
|
|
147
|
+
Link with bug reports:
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
/vibe.e2e --reproduce "User sees blank page after login"
|
|
151
|
+
|
|
152
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
153
|
+
│ 🐛 Bug Reproduction Mode │
|
|
154
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
155
|
+
│ │
|
|
156
|
+
│ Steps executed: │
|
|
157
|
+
│ 1. ✅ Navigate to /login │
|
|
158
|
+
│ 2. ✅ Enter credentials │
|
|
159
|
+
│ 3. ✅ Click login button │
|
|
160
|
+
│ 4. ❌ Dashboard shows blank │
|
|
161
|
+
│ │
|
|
162
|
+
│ Evidence collected: │
|
|
163
|
+
│ ├── 📸 screenshots/bug-step-1.png │
|
|
164
|
+
│ ├── 📸 screenshots/bug-step-2.png │
|
|
165
|
+
│ ├── 📸 screenshots/bug-step-3.png │
|
|
166
|
+
│ ├── 📸 screenshots/bug-step-4-FAIL.png │
|
|
167
|
+
│ ├── 🎥 videos/bug-reproduction.webm │
|
|
168
|
+
│ └── 📋 logs/console-errors.txt │
|
|
169
|
+
│ │
|
|
170
|
+
│ Console Errors Found: │
|
|
171
|
+
│ └── TypeError: Cannot read property 'user' of undefined │
|
|
172
|
+
│ at Dashboard.tsx:42 │
|
|
173
|
+
│ │
|
|
174
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Output
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
181
|
+
│ 🎭 E2E TEST RESULTS │
|
|
182
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
183
|
+
│ │
|
|
184
|
+
│ Test Suite: Login Flow │
|
|
185
|
+
│ Duration: 12.3s │
|
|
186
|
+
│ Browser: Chromium 120 │
|
|
187
|
+
│ │
|
|
188
|
+
│ Results: │
|
|
189
|
+
│ ├── ✅ Passed: 8 │
|
|
190
|
+
│ ├── ❌ Failed: 1 │
|
|
191
|
+
│ └── ⏭️ Skipped: 0 │
|
|
192
|
+
│ │
|
|
193
|
+
│ Failed Tests: │
|
|
194
|
+
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
|
|
195
|
+
│ ❌ "should show error for invalid password" │
|
|
196
|
+
│ Expected: "Invalid password" message │
|
|
197
|
+
│ Actual: No error message displayed │
|
|
198
|
+
│ 📸 Screenshot: .claude/vibe/e2e/failures/invalid-password.png │
|
|
199
|
+
│ │
|
|
200
|
+
│ Console Errors: 2 │
|
|
201
|
+
│ ├── TypeError at Dashboard.tsx:42 │
|
|
202
|
+
│ └── 404 at /api/user/preferences │
|
|
203
|
+
│ │
|
|
204
|
+
│ Accessibility Issues: 3 │
|
|
205
|
+
│ ├── [serious] Form input missing label │
|
|
206
|
+
│ ├── [moderate] Color contrast insufficient │
|
|
207
|
+
│ └── [minor] Missing skip link │
|
|
208
|
+
│ │
|
|
209
|
+
│ Artifacts: │
|
|
210
|
+
│ ├── 📸 Screenshots: .claude/vibe/e2e/screenshots/ │
|
|
211
|
+
│ ├── 🎥 Video: .claude/vibe/e2e/videos/ │
|
|
212
|
+
│ └── 📋 Report: .claude/vibe/e2e/report.html │
|
|
213
|
+
│ │
|
|
214
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Configuration
|
|
218
|
+
|
|
219
|
+
`.claude/vibe/e2e/config.json`:
|
|
220
|
+
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"baseURL": "http://localhost:3000",
|
|
224
|
+
"browsers": ["chromium"],
|
|
225
|
+
"viewport": { "width": 1280, "height": 720 },
|
|
226
|
+
"video": "retain-on-failure",
|
|
227
|
+
"screenshot": "only-on-failure",
|
|
228
|
+
"trace": "retain-on-failure",
|
|
229
|
+
"visualRegression": {
|
|
230
|
+
"enabled": true,
|
|
231
|
+
"threshold": 0.01
|
|
232
|
+
},
|
|
233
|
+
"accessibility": {
|
|
234
|
+
"enabled": true,
|
|
235
|
+
"rules": ["wcag2aa"]
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Integration with Review
|
|
241
|
+
|
|
242
|
+
Auto-suggest after `/vibe.review`:
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
246
|
+
│ 💡 E2E Test Recommended │
|
|
247
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
248
|
+
│ │
|
|
249
|
+
│ UI changes detected in this PR: │
|
|
250
|
+
│ - src/components/LoginForm.tsx │
|
|
251
|
+
│ - src/pages/Dashboard.tsx │
|
|
252
|
+
│ │
|
|
253
|
+
│ Run E2E tests? /vibe.e2e "login flow" │
|
|
254
|
+
│ │
|
|
255
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## Related Commands
|
|
259
|
+
|
|
260
|
+
- `/vibe.review` - Code review
|
|
261
|
+
- `/vibe.verify` - SPEC verification
|
|
262
|
+
- `/vibe.compound` - Document test results
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
ARGUMENTS: $ARGUMENTS
|
package/agents/explorer-low.md
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
# Explorer Agent - Low Tier (Haiku)
|
|
2
|
-
|
|
3
|
-
Fast codebase exploration for simple searches.
|
|
4
|
-
|
|
5
|
-
## Role
|
|
6
|
-
|
|
7
|
-
- Quick file/pattern search
|
|
8
|
-
- Basic structure analysis
|
|
9
|
-
- Simple dependency checking
|
|
10
|
-
|
|
11
|
-
## Model
|
|
12
|
-
|
|
13
|
-
**Haiku** - Optimized for fast, simple searches
|
|
14
|
-
|
|
15
|
-
## When to Use
|
|
16
|
-
|
|
17
|
-
- Single file lookups
|
|
18
|
-
- Simple pattern matching
|
|
19
|
-
- Quick structure overview
|
|
20
|
-
- Cost-sensitive operations
|
|
21
|
-
|
|
22
|
-
## Usage
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
Task(model: "haiku", subagent_type: "Explore", prompt: "Find files matching *.ts in src/")
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Process
|
|
29
|
-
|
|
30
|
-
1. Quick pattern match (Glob)
|
|
31
|
-
2. Basic content scan (Grep)
|
|
32
|
-
3. Return file list
|
|
33
|
-
|
|
34
|
-
## Output
|
|
35
|
-
|
|
36
|
-
```markdown
|
|
37
|
-
## Quick Search Results
|
|
38
|
-
|
|
39
|
-
### Files Found
|
|
40
|
-
- src/index.ts
|
|
41
|
-
- src/utils/helper.ts
|
|
42
|
-
```
|
|
1
|
+
# Explorer Agent - Low Tier (Haiku)
|
|
2
|
+
|
|
3
|
+
Fast codebase exploration for simple searches.
|
|
4
|
+
|
|
5
|
+
## Role
|
|
6
|
+
|
|
7
|
+
- Quick file/pattern search
|
|
8
|
+
- Basic structure analysis
|
|
9
|
+
- Simple dependency checking
|
|
10
|
+
|
|
11
|
+
## Model
|
|
12
|
+
|
|
13
|
+
**Haiku** - Optimized for fast, simple searches
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- Single file lookups
|
|
18
|
+
- Simple pattern matching
|
|
19
|
+
- Quick structure overview
|
|
20
|
+
- Cost-sensitive operations
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Task(model: "haiku", subagent_type: "Explore", prompt: "Find files matching *.ts in src/")
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Process
|
|
29
|
+
|
|
30
|
+
1. Quick pattern match (Glob)
|
|
31
|
+
2. Basic content scan (Grep)
|
|
32
|
+
3. Return file list
|
|
33
|
+
|
|
34
|
+
## Output
|
|
35
|
+
|
|
36
|
+
```markdown
|
|
37
|
+
## Quick Search Results
|
|
38
|
+
|
|
39
|
+
### Files Found
|
|
40
|
+
- src/index.ts
|
|
41
|
+
- src/utils/helper.ts
|
|
42
|
+
```
|