agileflow 3.1.0 → 3.2.1
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 +10 -0
- package/README.md +57 -85
- package/lib/dashboard-automations.js +130 -0
- package/lib/dashboard-git.js +254 -0
- package/lib/dashboard-inbox.js +64 -0
- package/lib/dashboard-protocol.js +1 -0
- package/lib/dashboard-server.js +114 -924
- package/lib/dashboard-session.js +136 -0
- package/lib/dashboard-status.js +72 -0
- package/lib/dashboard-terminal.js +354 -0
- package/lib/dashboard-websocket.js +88 -0
- package/lib/drivers/codex-driver.ts +4 -4
- package/lib/logger.js +106 -0
- package/package.json +4 -2
- package/scripts/agileflow-configure.js +2 -2
- package/scripts/agileflow-welcome.js +409 -434
- package/scripts/claude-tmux.sh +80 -2
- package/scripts/context-loader.js +4 -9
- package/scripts/lib/browser-qa-evidence.js +409 -0
- package/scripts/lib/browser-qa-status.js +192 -0
- package/scripts/lib/command-prereqs.js +280 -0
- package/scripts/lib/configure-detect.js +92 -2
- package/scripts/lib/configure-features.js +295 -1
- package/scripts/lib/context-formatter.js +468 -233
- package/scripts/lib/context-loader.js +27 -15
- package/scripts/lib/damage-control-utils.js +8 -1
- package/scripts/lib/feature-catalog.js +321 -0
- package/scripts/lib/portable-tasks-cli.js +274 -0
- package/scripts/lib/portable-tasks.js +479 -0
- package/scripts/lib/signal-detectors.js +1 -1
- package/scripts/lib/team-events.js +86 -1
- package/scripts/obtain-context.js +28 -4
- package/scripts/smart-detect.js +17 -0
- package/scripts/strip-ai-attribution.js +63 -0
- package/scripts/team-manager.js +7 -2
- package/scripts/welcome-deferred.js +437 -0
- package/src/core/agents/browser-qa.md +328 -0
- package/src/core/agents/perf-analyzer-assets.md +174 -0
- package/src/core/agents/perf-analyzer-bundle.md +165 -0
- package/src/core/agents/perf-analyzer-caching.md +160 -0
- package/src/core/agents/perf-analyzer-compute.md +165 -0
- package/src/core/agents/perf-analyzer-memory.md +182 -0
- package/src/core/agents/perf-analyzer-network.md +157 -0
- package/src/core/agents/perf-analyzer-queries.md +155 -0
- package/src/core/agents/perf-analyzer-rendering.md +156 -0
- package/src/core/agents/perf-consensus.md +280 -0
- package/src/core/agents/security-analyzer-api.md +199 -0
- package/src/core/agents/security-analyzer-auth.md +160 -0
- package/src/core/agents/security-analyzer-authz.md +168 -0
- package/src/core/agents/security-analyzer-deps.md +147 -0
- package/src/core/agents/security-analyzer-infra.md +176 -0
- package/src/core/agents/security-analyzer-injection.md +148 -0
- package/src/core/agents/security-analyzer-input.md +191 -0
- package/src/core/agents/security-analyzer-secrets.md +175 -0
- package/src/core/agents/security-consensus.md +276 -0
- package/src/core/agents/test-analyzer-assertions.md +181 -0
- package/src/core/agents/test-analyzer-coverage.md +183 -0
- package/src/core/agents/test-analyzer-fragility.md +185 -0
- package/src/core/agents/test-analyzer-integration.md +155 -0
- package/src/core/agents/test-analyzer-maintenance.md +173 -0
- package/src/core/agents/test-analyzer-mocking.md +178 -0
- package/src/core/agents/test-analyzer-patterns.md +189 -0
- package/src/core/agents/test-analyzer-structure.md +177 -0
- package/src/core/agents/test-consensus.md +294 -0
- package/src/core/commands/{legal/audit.md → audit/legal.md} +13 -13
- package/src/core/commands/{logic/audit.md → audit/logic.md} +12 -12
- package/src/core/commands/audit/performance.md +443 -0
- package/src/core/commands/audit/security.md +443 -0
- package/src/core/commands/audit/test.md +442 -0
- package/src/core/commands/babysit.md +505 -463
- package/src/core/commands/browser-qa.md +240 -0
- package/src/core/commands/configure.md +8 -8
- package/src/core/commands/research/ask.md +42 -9
- package/src/core/commands/research/import.md +14 -8
- package/src/core/commands/research/list.md +17 -16
- package/src/core/commands/research/synthesize.md +8 -8
- package/src/core/commands/research/view.md +28 -4
- package/src/core/commands/whats-new.md +2 -2
- package/src/core/experts/devops/expertise.yaml +13 -2
- package/src/core/experts/documentation/expertise.yaml +26 -4
- package/src/core/profiles/COMPARISON.md +170 -0
- package/src/core/profiles/README.md +178 -0
- package/src/core/profiles/claude-code.yaml +111 -0
- package/src/core/profiles/codex.yaml +103 -0
- package/src/core/profiles/cursor.yaml +134 -0
- package/src/core/profiles/examples.js +250 -0
- package/src/core/profiles/loader.js +235 -0
- package/src/core/profiles/windsurf.yaml +159 -0
- package/src/core/teams/logic-audit.json +6 -0
- package/src/core/teams/perf-audit.json +71 -0
- package/src/core/teams/security-audit.json +71 -0
- package/src/core/teams/test-audit.json +71 -0
- package/src/core/templates/browser-qa-spec.yaml +94 -0
- package/src/core/templates/command-prerequisites.yaml +169 -0
- package/src/core/templates/damage-control-patterns.yaml +9 -0
- package/tools/cli/installers/ide/_base-ide.js +33 -3
- package/tools/cli/installers/ide/claude-code.js +2 -69
- package/tools/cli/installers/ide/codex.js +9 -9
- package/tools/cli/installers/ide/cursor.js +165 -4
- package/tools/cli/installers/ide/windsurf.js +237 -6
- package/tools/cli/lib/content-transformer.js +234 -9
- package/tools/cli/lib/docs-setup.js +1 -1
- package/tools/cli/lib/ide-generator.js +357 -0
- package/tools/cli/lib/ide-registry.js +2 -2
- package/scripts/tmux-task-name.sh +0 -105
- package/scripts/tmux-task-watcher.sh +0 -344
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Windsurf IDE Capability Profile
|
|
2
|
+
# Wave 13+ - Most comprehensive hooks but no true sub-agent spawning
|
|
3
|
+
# Reference: Cross-IDE Compatibility Findings (20260220)
|
|
4
|
+
|
|
5
|
+
ide:
|
|
6
|
+
id: windsurf
|
|
7
|
+
name: Windsurf
|
|
8
|
+
displayName: Windsurf
|
|
9
|
+
description: Codeium's AI editor with native worktrees and 11 lifecycle hooks
|
|
10
|
+
configDir: .windsurf
|
|
11
|
+
configDirGlobal: ~/.codeium/windsurf
|
|
12
|
+
instructionsFile: WINDSURF.md
|
|
13
|
+
fileFormat: markdown
|
|
14
|
+
commandPrefix: "/"
|
|
15
|
+
agentPrefix: "agileflow-"
|
|
16
|
+
|
|
17
|
+
paths:
|
|
18
|
+
commands: .windsurf/workflows/
|
|
19
|
+
agents: null # Uses workflows + cascades instead
|
|
20
|
+
skills: .windsurf/skills/*/SKILL.md
|
|
21
|
+
rules: .windsurf/rules/
|
|
22
|
+
workflows: .windsurf/workflows/
|
|
23
|
+
hooks: .windsurf/hooks.json
|
|
24
|
+
hooksGlobal: ~/.codeium/windsurf/hooks.json
|
|
25
|
+
mcp: ~/.codeium/windsurf/mcp_config.json
|
|
26
|
+
mcpGlobal: true # MCP config is global-only
|
|
27
|
+
|
|
28
|
+
capabilities:
|
|
29
|
+
core:
|
|
30
|
+
fileOperations: true # Native file read/write
|
|
31
|
+
shell: true # Native shell (4-level auto-execution)
|
|
32
|
+
fileSearch: true # Native search + analyze tools
|
|
33
|
+
interactiveInput: true # Conversational only (no structured menus)
|
|
34
|
+
subAgents: false # No true sub-agent spawning
|
|
35
|
+
nestedSubAgents: false # Parallel Cascades via worktrees instead
|
|
36
|
+
planning:
|
|
37
|
+
planMode: true # Native via "megaplan" keyword
|
|
38
|
+
planModeEditable: true # Editable plans in ~/.windsurf/plans/
|
|
39
|
+
lifecycle:
|
|
40
|
+
hooks: true # 9 lifecycle events (per official docs Feb 2026)
|
|
41
|
+
hookEvents:
|
|
42
|
+
- pre_read_code
|
|
43
|
+
- post_read_code
|
|
44
|
+
- pre_write_code
|
|
45
|
+
- post_write_code
|
|
46
|
+
- pre_run_command
|
|
47
|
+
- post_run_command
|
|
48
|
+
- pre_mcp_tool_use
|
|
49
|
+
- post_mcp_tool_use
|
|
50
|
+
- pre_user_prompt
|
|
51
|
+
external:
|
|
52
|
+
webSearch: true # Web Search tool
|
|
53
|
+
webFetch: true # URL Read and View Chunk
|
|
54
|
+
mcp: true # Full MCP support
|
|
55
|
+
mcpToolLimit: 100 # 100-tool cap
|
|
56
|
+
browser: true # Browser Preview (in-IDE)
|
|
57
|
+
collaboration:
|
|
58
|
+
taskTracking: false # Conversation-embedded only (not persistent)
|
|
59
|
+
persistentTasks: false
|
|
60
|
+
worktrees: true # Native worktrees (up to 20 per workspace)
|
|
61
|
+
maxWorktrees: 20
|
|
62
|
+
|
|
63
|
+
toolNames:
|
|
64
|
+
# Interactive
|
|
65
|
+
askUser: null # Conversational only
|
|
66
|
+
# Delegation
|
|
67
|
+
spawnAgent: null # Use workflows + cascades instead
|
|
68
|
+
# Planning
|
|
69
|
+
planModeEnter: null # Native, use "megaplan" keyword
|
|
70
|
+
planModeExit: null # Native
|
|
71
|
+
# Execution
|
|
72
|
+
bash: run_command
|
|
73
|
+
# Files
|
|
74
|
+
read: read_file
|
|
75
|
+
write: write_file
|
|
76
|
+
edit: edit_file
|
|
77
|
+
# Search
|
|
78
|
+
glob: search_files
|
|
79
|
+
grep: search_codebase
|
|
80
|
+
# Web
|
|
81
|
+
webSearch: web_search
|
|
82
|
+
webFetch: url_read
|
|
83
|
+
# Cascades
|
|
84
|
+
cascade: null # Use /workflow-name chaining
|
|
85
|
+
|
|
86
|
+
workflowModel:
|
|
87
|
+
format: markdown
|
|
88
|
+
maxCharacters: 12000 # Hard limit per workflow file
|
|
89
|
+
splitStrategy: "Split large workflows into multiple files"
|
|
90
|
+
chaining: "Use /workflow-name in instructions to chain workflows"
|
|
91
|
+
cascades: "Use @cascade to run multiple workflows in parallel"
|
|
92
|
+
|
|
93
|
+
skillModel:
|
|
94
|
+
format: markdown
|
|
95
|
+
frontmatterFormat: yaml
|
|
96
|
+
spec: "agentskills.io"
|
|
97
|
+
fields:
|
|
98
|
+
- name
|
|
99
|
+
- description
|
|
100
|
+
- model
|
|
101
|
+
- requiredCapabilities
|
|
102
|
+
|
|
103
|
+
frontmatter:
|
|
104
|
+
workflows:
|
|
105
|
+
format: null # Workflows are commands, not structured prompts
|
|
106
|
+
rules:
|
|
107
|
+
format: markdown
|
|
108
|
+
fields:
|
|
109
|
+
- description
|
|
110
|
+
- globs
|
|
111
|
+
- alwaysApply
|
|
112
|
+
skills:
|
|
113
|
+
format: yaml
|
|
114
|
+
fields:
|
|
115
|
+
- name
|
|
116
|
+
- description
|
|
117
|
+
- model
|
|
118
|
+
- requiredCapabilities
|
|
119
|
+
|
|
120
|
+
limits:
|
|
121
|
+
maxFileSize: 0 # 0 = unlimited
|
|
122
|
+
maxCommandLength: 0 # 0 = unlimited
|
|
123
|
+
maxWorkflowSize: 12000 # Hard limit per workflow file
|
|
124
|
+
maxToolsPerMCP: 100 # MCP tool limit
|
|
125
|
+
maxWorktreesPerWorkspace: 20
|
|
126
|
+
autoExecutionLevels: 4 # Shell auto-execution levels
|
|
127
|
+
|
|
128
|
+
installation:
|
|
129
|
+
supportsFileOps: true
|
|
130
|
+
supportsHooks: true # Native
|
|
131
|
+
supportsMCP: true # Global-only config
|
|
132
|
+
commandsRequireApproval: false
|
|
133
|
+
skillsCanBeNestedDirs: true
|
|
134
|
+
projectLevelMCP: false # MCP config is global-only
|
|
135
|
+
|
|
136
|
+
worktreeModel:
|
|
137
|
+
supported: true
|
|
138
|
+
maxConcurrent: 20
|
|
139
|
+
useCase: "Parallel feature branches or multi-task execution"
|
|
140
|
+
gitIntegration: "Native git worktree support"
|
|
141
|
+
hostedOn: "Wave 13+"
|
|
142
|
+
|
|
143
|
+
cascadeModel:
|
|
144
|
+
description: "Run multiple workflows in parallel"
|
|
145
|
+
syntax: "@cascade /workflow1 /workflow2"
|
|
146
|
+
useCase: "Execute independent tasks without blocking"
|
|
147
|
+
limitSubstitution: "Use cascades instead of Task tool"
|
|
148
|
+
|
|
149
|
+
notes:
|
|
150
|
+
- "Windsurf has the most comprehensive hooks (11 events)"
|
|
151
|
+
- "NO true sub-agent spawning; use workflow chaining or cascades"
|
|
152
|
+
- "12,000 character limit per workflow - split large commands"
|
|
153
|
+
- "MCP config is global-only (in ~/.codeium/windsurf/mcp_config.json)"
|
|
154
|
+
- "Conversational input, no structured menus"
|
|
155
|
+
- "Native worktrees enable parallel development (up to 20 per workspace)"
|
|
156
|
+
- "Skills follow agentskills.io specification"
|
|
157
|
+
- "Use 'megaplan' keyword for advanced planning"
|
|
158
|
+
- "100-tool MCP limit; good balance between capability and performance"
|
|
159
|
+
- "Plan files stored in ~/.windsurf/plans/ (user's home, not project)"
|
|
@@ -20,6 +20,12 @@
|
|
|
20
20
|
"domain": "control-flow",
|
|
21
21
|
"description": "Analyzes dead code, unreachable branches, and missing returns"
|
|
22
22
|
},
|
|
23
|
+
{
|
|
24
|
+
"agent": "agileflow-logic-analyzer-invariant",
|
|
25
|
+
"role": "analyzer",
|
|
26
|
+
"domain": "invariants",
|
|
27
|
+
"description": "Analyzes pre/post conditions, state consistency, and contract violations"
|
|
28
|
+
},
|
|
23
29
|
{
|
|
24
30
|
"agent": "agileflow-logic-analyzer-race",
|
|
25
31
|
"role": "analyzer",
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "perf-audit",
|
|
3
|
+
"description": "Multi-perspective performance bottleneck analysis team for finding optimization opportunities",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"lead": {
|
|
6
|
+
"agent": "agileflow-perf-consensus",
|
|
7
|
+
"delegate_mode": true,
|
|
8
|
+
"plan_approval": false
|
|
9
|
+
},
|
|
10
|
+
"teammates": [
|
|
11
|
+
{
|
|
12
|
+
"agent": "agileflow-perf-analyzer-queries",
|
|
13
|
+
"role": "analyzer",
|
|
14
|
+
"domain": "queries",
|
|
15
|
+
"description": "Analyzes N+1 queries, unindexed lookups, missing pagination, ORM anti-patterns"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"agent": "agileflow-perf-analyzer-rendering",
|
|
19
|
+
"role": "analyzer",
|
|
20
|
+
"domain": "rendering",
|
|
21
|
+
"description": "Analyzes unnecessary re-renders, missing memoization, expensive computations in render"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"agent": "agileflow-perf-analyzer-memory",
|
|
25
|
+
"role": "analyzer",
|
|
26
|
+
"domain": "memory",
|
|
27
|
+
"description": "Analyzes memory leaks, event listener cleanup, growing collections, closure captures"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"agent": "agileflow-perf-analyzer-bundle",
|
|
31
|
+
"role": "analyzer",
|
|
32
|
+
"domain": "bundle",
|
|
33
|
+
"description": "Analyzes large imports, missing tree-shaking, absent dynamic imports, duplicate deps"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"agent": "agileflow-perf-analyzer-compute",
|
|
37
|
+
"role": "analyzer",
|
|
38
|
+
"domain": "compute",
|
|
39
|
+
"description": "Analyzes sync I/O, CPU-intensive loops, blocking operations, algorithmic inefficiency"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"agent": "agileflow-perf-analyzer-network",
|
|
43
|
+
"role": "analyzer",
|
|
44
|
+
"domain": "network",
|
|
45
|
+
"description": "Analyzes HTTP waterfall, missing batching, no compression, large payloads"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"agent": "agileflow-perf-analyzer-caching",
|
|
49
|
+
"role": "analyzer",
|
|
50
|
+
"domain": "caching",
|
|
51
|
+
"description": "Analyzes missing memoization, redundant computations, no HTTP cache headers"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"agent": "agileflow-perf-analyzer-assets",
|
|
55
|
+
"role": "analyzer",
|
|
56
|
+
"domain": "assets",
|
|
57
|
+
"description": "Analyzes unoptimized images, render-blocking resources, missing lazy loading"
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"quality_gates": {
|
|
61
|
+
"teammate_idle": {
|
|
62
|
+
"tests": false,
|
|
63
|
+
"lint": false,
|
|
64
|
+
"types": false
|
|
65
|
+
},
|
|
66
|
+
"task_completed": {
|
|
67
|
+
"require_validator_approval": false
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"tags": ["analysis", "performance", "optimization", "audit"]
|
|
71
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "security-audit",
|
|
3
|
+
"description": "Multi-perspective security vulnerability analysis team for finding exploitable weaknesses",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"lead": {
|
|
6
|
+
"agent": "agileflow-security-consensus",
|
|
7
|
+
"delegate_mode": true,
|
|
8
|
+
"plan_approval": false
|
|
9
|
+
},
|
|
10
|
+
"teammates": [
|
|
11
|
+
{
|
|
12
|
+
"agent": "agileflow-security-analyzer-injection",
|
|
13
|
+
"role": "analyzer",
|
|
14
|
+
"domain": "injection",
|
|
15
|
+
"description": "Analyzes SQL injection, command injection, NoSQL injection, template injection"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"agent": "agileflow-security-analyzer-auth",
|
|
19
|
+
"role": "analyzer",
|
|
20
|
+
"domain": "authentication",
|
|
21
|
+
"description": "Analyzes weak hashing, JWT flaws, session fixation, broken auth flows"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"agent": "agileflow-security-analyzer-authz",
|
|
25
|
+
"role": "analyzer",
|
|
26
|
+
"domain": "authorization",
|
|
27
|
+
"description": "Analyzes IDOR, privilege escalation, path traversal, CORS, CSRF"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"agent": "agileflow-security-analyzer-secrets",
|
|
31
|
+
"role": "analyzer",
|
|
32
|
+
"domain": "secrets-crypto",
|
|
33
|
+
"description": "Analyzes hardcoded credentials, weak crypto, insecure randomness"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"agent": "agileflow-security-analyzer-input",
|
|
37
|
+
"role": "analyzer",
|
|
38
|
+
"domain": "input-validation",
|
|
39
|
+
"description": "Analyzes XSS, prototype pollution, SSRF, file upload, ReDoS"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"agent": "agileflow-security-analyzer-deps",
|
|
43
|
+
"role": "analyzer",
|
|
44
|
+
"domain": "dependencies",
|
|
45
|
+
"description": "Analyzes known CVEs, typosquatting, overly permissive version ranges"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"agent": "agileflow-security-analyzer-infra",
|
|
49
|
+
"role": "analyzer",
|
|
50
|
+
"domain": "infrastructure",
|
|
51
|
+
"description": "Analyzes Docker security, security headers, HTTPS, exposed endpoints"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"agent": "agileflow-security-analyzer-api",
|
|
55
|
+
"role": "analyzer",
|
|
56
|
+
"domain": "api-security",
|
|
57
|
+
"description": "Analyzes mass assignment, data exposure, rate limiting, GraphQL"
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"quality_gates": {
|
|
61
|
+
"teammate_idle": {
|
|
62
|
+
"tests": false,
|
|
63
|
+
"lint": false,
|
|
64
|
+
"types": false
|
|
65
|
+
},
|
|
66
|
+
"task_completed": {
|
|
67
|
+
"require_validator_approval": false
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"tags": ["analysis", "security", "vulnerabilities", "audit"]
|
|
71
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "test-audit",
|
|
3
|
+
"description": "Multi-perspective test quality analysis team for finding test suite weaknesses",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"lead": {
|
|
6
|
+
"agent": "agileflow-test-consensus",
|
|
7
|
+
"delegate_mode": true,
|
|
8
|
+
"plan_approval": false
|
|
9
|
+
},
|
|
10
|
+
"teammates": [
|
|
11
|
+
{
|
|
12
|
+
"agent": "agileflow-test-analyzer-coverage",
|
|
13
|
+
"role": "analyzer",
|
|
14
|
+
"domain": "coverage",
|
|
15
|
+
"description": "Analyzes untested critical paths, missing error path tests, low branch coverage"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"agent": "agileflow-test-analyzer-fragility",
|
|
19
|
+
"role": "analyzer",
|
|
20
|
+
"domain": "fragility",
|
|
21
|
+
"description": "Analyzes timing-dependent tests, order-dependent tests, environment-dependent tests"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"agent": "agileflow-test-analyzer-mocking",
|
|
25
|
+
"role": "analyzer",
|
|
26
|
+
"domain": "mocking",
|
|
27
|
+
"description": "Analyzes over-mocking, mock leakage, testing mocks instead of code"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"agent": "agileflow-test-analyzer-assertions",
|
|
31
|
+
"role": "analyzer",
|
|
32
|
+
"domain": "assertions",
|
|
33
|
+
"description": "Analyzes weak assertions, missing negative tests, snapshot overuse"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"agent": "agileflow-test-analyzer-structure",
|
|
37
|
+
"role": "analyzer",
|
|
38
|
+
"domain": "structure",
|
|
39
|
+
"description": "Analyzes test organization, naming clarity, code duplication, file length"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"agent": "agileflow-test-analyzer-integration",
|
|
43
|
+
"role": "analyzer",
|
|
44
|
+
"domain": "integration",
|
|
45
|
+
"description": "Analyzes missing API tests, absent E2E coverage, unit-only test suites"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"agent": "agileflow-test-analyzer-maintenance",
|
|
49
|
+
"role": "analyzer",
|
|
50
|
+
"domain": "maintenance",
|
|
51
|
+
"description": "Analyzes dead tests, outdated assertions, tests passing for wrong reasons"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"agent": "agileflow-test-analyzer-patterns",
|
|
55
|
+
"role": "analyzer",
|
|
56
|
+
"domain": "patterns",
|
|
57
|
+
"description": "Analyzes anti-patterns: testing privates, deep mock chains, God test objects"
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"quality_gates": {
|
|
61
|
+
"teammate_idle": {
|
|
62
|
+
"tests": false,
|
|
63
|
+
"lint": false,
|
|
64
|
+
"types": false
|
|
65
|
+
},
|
|
66
|
+
"task_completed": {
|
|
67
|
+
"require_validator_approval": false
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"tags": ["analysis", "testing", "quality", "audit"]
|
|
71
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Browser QA Test Spec Template
|
|
2
|
+
# Part of AgileFlow Bowser Four-Layer Browser Automation
|
|
3
|
+
#
|
|
4
|
+
# Usage: Copy this template and fill in your scenario details.
|
|
5
|
+
# Place specs in: .agileflow/ui-review/specs/ or docs/07-testing/agentic/
|
|
6
|
+
# Run with: /agileflow:browser-qa SCENARIO=<path-to-this-file>
|
|
7
|
+
#
|
|
8
|
+
# Schema Version: 1.0.0
|
|
9
|
+
|
|
10
|
+
# --- Required Fields ---
|
|
11
|
+
|
|
12
|
+
# Unique test identifier (format: AGENTIC-NNN)
|
|
13
|
+
test_id: AGENTIC-001
|
|
14
|
+
|
|
15
|
+
# Associated user story (optional, links results to status.json)
|
|
16
|
+
story_id: US-XXXX
|
|
17
|
+
|
|
18
|
+
# Human-readable name for this test scenario
|
|
19
|
+
name: "Example User Login Flow"
|
|
20
|
+
|
|
21
|
+
# What this test validates
|
|
22
|
+
description: "Verify that a user can log in with valid credentials and reach the dashboard"
|
|
23
|
+
|
|
24
|
+
# --- Configuration ---
|
|
25
|
+
|
|
26
|
+
# Base URL of the application under test
|
|
27
|
+
url: http://localhost:3000
|
|
28
|
+
|
|
29
|
+
# Maximum time for entire scenario (default: 60s)
|
|
30
|
+
timeout: 60s
|
|
31
|
+
|
|
32
|
+
# Retry attempts on failure before marking as failed (default: 2)
|
|
33
|
+
max_retries: 2
|
|
34
|
+
|
|
35
|
+
# Minimum pass rate to consider validated (default: 0.80)
|
|
36
|
+
pass_rate_threshold: 0.80
|
|
37
|
+
|
|
38
|
+
# Browsers to test against (default: [chromium])
|
|
39
|
+
browsers:
|
|
40
|
+
- chromium
|
|
41
|
+
|
|
42
|
+
# --- Test Steps ---
|
|
43
|
+
# Each step has: name, action, and action-specific fields
|
|
44
|
+
# Supported actions: navigate, click, fill, assert, wait, screenshot
|
|
45
|
+
#
|
|
46
|
+
# Optional per-step fields:
|
|
47
|
+
# wait_for: CSS selector to wait for before proceeding
|
|
48
|
+
# screenshot: true/false - capture screenshot after this step
|
|
49
|
+
# timeout: per-step timeout override
|
|
50
|
+
|
|
51
|
+
steps:
|
|
52
|
+
- name: Navigate to login page
|
|
53
|
+
action: navigate
|
|
54
|
+
url: /login
|
|
55
|
+
wait_for: "[data-testid='login-form']"
|
|
56
|
+
screenshot: true
|
|
57
|
+
|
|
58
|
+
- name: Fill email field
|
|
59
|
+
action: fill
|
|
60
|
+
fields:
|
|
61
|
+
- selector: "[data-testid='email-input']"
|
|
62
|
+
value: "test@example.com"
|
|
63
|
+
|
|
64
|
+
- name: Fill password field
|
|
65
|
+
action: fill
|
|
66
|
+
fields:
|
|
67
|
+
- selector: "[data-testid='password-input']"
|
|
68
|
+
value: "testpassword123"
|
|
69
|
+
|
|
70
|
+
- name: Click login button
|
|
71
|
+
action: click
|
|
72
|
+
selector: "[data-testid='login-button']"
|
|
73
|
+
screenshot: true
|
|
74
|
+
|
|
75
|
+
- name: Verify dashboard loaded
|
|
76
|
+
action: assert
|
|
77
|
+
assertion: "User sees the dashboard page with a welcome message"
|
|
78
|
+
wait_for: "[data-testid='dashboard']"
|
|
79
|
+
screenshot: true
|
|
80
|
+
|
|
81
|
+
# --- Expected Result ---
|
|
82
|
+
# Natural language description of what success looks like
|
|
83
|
+
expected_result: "User is logged in and sees the dashboard with their name displayed"
|
|
84
|
+
|
|
85
|
+
# --- Metadata ---
|
|
86
|
+
# Optional fields for tracking and reporting
|
|
87
|
+
|
|
88
|
+
metadata:
|
|
89
|
+
author: AG-BROWSER-QA
|
|
90
|
+
created: "2026-02-16"
|
|
91
|
+
tags:
|
|
92
|
+
- authentication
|
|
93
|
+
- critical-path
|
|
94
|
+
priority: high
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# command-prerequisites.yaml
|
|
2
|
+
#
|
|
3
|
+
# Declarative prerequisites for AgileFlow commands.
|
|
4
|
+
# Checked before command execution to warn about unmet requirements.
|
|
5
|
+
#
|
|
6
|
+
# Schema:
|
|
7
|
+
# commands.<name>.prerequisites[]:
|
|
8
|
+
# signal - Dot-path into extracted signals (e.g. git.branch, statusJson)
|
|
9
|
+
# description - Human-readable explanation of what's needed
|
|
10
|
+
# fix - Actionable instruction to resolve
|
|
11
|
+
# severity - critical (will fail) | high (poor results) | medium (suboptimal)
|
|
12
|
+
#
|
|
13
|
+
# Signals are extracted by smart-detect.js extractSignals() and include:
|
|
14
|
+
# git.branch, git.onFeatureBranch, git.isClean, git.filesChanged
|
|
15
|
+
# statusJson, storyCount, story, story.epic
|
|
16
|
+
# packageJson, tests.hasTestSetup
|
|
17
|
+
# files.playwright, files.tsconfig, files.coverage, files.ciConfig
|
|
18
|
+
|
|
19
|
+
version: "1.0.0"
|
|
20
|
+
|
|
21
|
+
settings:
|
|
22
|
+
fail_open: true
|
|
23
|
+
max_warnings: 5
|
|
24
|
+
|
|
25
|
+
commands:
|
|
26
|
+
verify:
|
|
27
|
+
prerequisites:
|
|
28
|
+
- signal: tests.hasTestSetup
|
|
29
|
+
description: "Test framework must be configured (scripts.test in package.json)"
|
|
30
|
+
fix: "Add a test script to package.json, e.g. \"test\": \"jest\" or \"test\": \"vitest\""
|
|
31
|
+
severity: critical
|
|
32
|
+
|
|
33
|
+
babysit:
|
|
34
|
+
prerequisites:
|
|
35
|
+
- signal: statusJson
|
|
36
|
+
description: "status.json must exist with stories to work on"
|
|
37
|
+
fix: "Run: /agileflow:story to create stories, or /agileflow:epic to plan an epic"
|
|
38
|
+
severity: critical
|
|
39
|
+
|
|
40
|
+
pr:
|
|
41
|
+
prerequisites:
|
|
42
|
+
- signal: git.onFeatureBranch
|
|
43
|
+
description: "Must be on a feature branch (not main/master)"
|
|
44
|
+
fix: "Create a feature branch: git checkout -b feat/your-feature"
|
|
45
|
+
severity: critical
|
|
46
|
+
- signal: story
|
|
47
|
+
description: "An active story should be set for PR description"
|
|
48
|
+
fix: "Run: /agileflow:status to set a current story"
|
|
49
|
+
severity: high
|
|
50
|
+
|
|
51
|
+
deploy:
|
|
52
|
+
prerequisites:
|
|
53
|
+
- signal: git.branch
|
|
54
|
+
description: "Git repository must be initialized"
|
|
55
|
+
fix: "Run: git init"
|
|
56
|
+
severity: critical
|
|
57
|
+
- signal: packageJson
|
|
58
|
+
description: "package.json must exist for deployment configuration"
|
|
59
|
+
fix: "Run: npm init -y"
|
|
60
|
+
severity: critical
|
|
61
|
+
|
|
62
|
+
audit:
|
|
63
|
+
prerequisites:
|
|
64
|
+
- signal: story
|
|
65
|
+
description: "An active story is needed to audit completion"
|
|
66
|
+
fix: "Run: /agileflow:status to set a current story"
|
|
67
|
+
severity: critical
|
|
68
|
+
- signal: statusJson
|
|
69
|
+
description: "status.json must exist with story data"
|
|
70
|
+
fix: "Run: /agileflow:story to create stories"
|
|
71
|
+
severity: critical
|
|
72
|
+
|
|
73
|
+
board:
|
|
74
|
+
prerequisites:
|
|
75
|
+
- signal: statusJson
|
|
76
|
+
description: "status.json must exist to display the board"
|
|
77
|
+
fix: "Run: /agileflow:story to create your first story"
|
|
78
|
+
severity: critical
|
|
79
|
+
- signal: storyCount
|
|
80
|
+
description: "At least one story must exist"
|
|
81
|
+
fix: "Run: /agileflow:story to create a story"
|
|
82
|
+
severity: high
|
|
83
|
+
|
|
84
|
+
sprint:
|
|
85
|
+
prerequisites:
|
|
86
|
+
- signal: statusJson
|
|
87
|
+
description: "status.json must exist for sprint planning"
|
|
88
|
+
fix: "Run: /agileflow:story to create stories first"
|
|
89
|
+
severity: critical
|
|
90
|
+
- signal: storyCount
|
|
91
|
+
description: "Stories are needed for sprint planning"
|
|
92
|
+
fix: "Run: /agileflow:epic to break down features into stories"
|
|
93
|
+
severity: high
|
|
94
|
+
|
|
95
|
+
browser-qa:
|
|
96
|
+
prerequisites:
|
|
97
|
+
- signal: files.playwright
|
|
98
|
+
description: "Playwright must be configured (playwright.config.ts or .js)"
|
|
99
|
+
fix: "Run: npm init playwright@latest"
|
|
100
|
+
severity: critical
|
|
101
|
+
|
|
102
|
+
review:
|
|
103
|
+
prerequisites:
|
|
104
|
+
- signal: git.onFeatureBranch
|
|
105
|
+
description: "Must be on a feature branch for code review"
|
|
106
|
+
fix: "Create a feature branch: git checkout -b feat/your-feature"
|
|
107
|
+
severity: critical
|
|
108
|
+
- signal: git.filesChanged
|
|
109
|
+
description: "There should be changed files to review"
|
|
110
|
+
fix: "Make some code changes before requesting a review"
|
|
111
|
+
severity: high
|
|
112
|
+
|
|
113
|
+
baseline:
|
|
114
|
+
prerequisites:
|
|
115
|
+
- signal: tests.hasTestSetup
|
|
116
|
+
description: "Test framework must be configured to establish a baseline"
|
|
117
|
+
fix: "Add a test script to package.json"
|
|
118
|
+
severity: critical
|
|
119
|
+
- signal: git.branch
|
|
120
|
+
description: "Git repository must be initialized"
|
|
121
|
+
fix: "Run: git init"
|
|
122
|
+
severity: high
|
|
123
|
+
|
|
124
|
+
metrics:
|
|
125
|
+
prerequisites:
|
|
126
|
+
- signal: statusJson
|
|
127
|
+
description: "status.json must exist for metrics calculation"
|
|
128
|
+
fix: "Run: /agileflow:story to start tracking work"
|
|
129
|
+
severity: critical
|
|
130
|
+
- signal: storyCount
|
|
131
|
+
description: "Stories are needed to compute metrics"
|
|
132
|
+
fix: "Run: /agileflow:story to create stories"
|
|
133
|
+
severity: high
|
|
134
|
+
|
|
135
|
+
velocity:
|
|
136
|
+
prerequisites:
|
|
137
|
+
- signal: statusJson
|
|
138
|
+
description: "status.json must exist for velocity tracking"
|
|
139
|
+
fix: "Run: /agileflow:story to start tracking work"
|
|
140
|
+
severity: critical
|
|
141
|
+
- signal: storyCount
|
|
142
|
+
description: "Completed stories are needed for velocity calculation"
|
|
143
|
+
fix: "Complete some stories to build velocity history"
|
|
144
|
+
severity: high
|
|
145
|
+
|
|
146
|
+
compress:
|
|
147
|
+
prerequisites:
|
|
148
|
+
- signal: statusJson
|
|
149
|
+
description: "status.json must exist to compress"
|
|
150
|
+
fix: "No status.json to compress - create stories first with /agileflow:story"
|
|
151
|
+
severity: critical
|
|
152
|
+
|
|
153
|
+
retro:
|
|
154
|
+
prerequisites:
|
|
155
|
+
- signal: statusJson
|
|
156
|
+
description: "status.json must exist for retrospective data"
|
|
157
|
+
fix: "Run: /agileflow:story to start tracking work"
|
|
158
|
+
severity: critical
|
|
159
|
+
- signal: storyCount
|
|
160
|
+
description: "Stories are needed for meaningful retrospective"
|
|
161
|
+
fix: "Complete some stories before running a retrospective"
|
|
162
|
+
severity: high
|
|
163
|
+
|
|
164
|
+
changelog:
|
|
165
|
+
prerequisites:
|
|
166
|
+
- signal: git.branch
|
|
167
|
+
description: "Git repository must be initialized with commit history"
|
|
168
|
+
fix: "Run: git init && git add -A && git commit -m 'initial commit'"
|
|
169
|
+
severity: critical
|
|
@@ -228,6 +228,15 @@ agileflowProtections:
|
|
|
228
228
|
#
|
|
229
229
|
# =====================================================
|
|
230
230
|
|
|
231
|
+
# ─── Release Process Enforcement ───
|
|
232
|
+
# Forces use of ./scripts/release.sh instead of manual commands
|
|
233
|
+
releaseProtections:
|
|
234
|
+
- pattern: '\bnpm\s+version\s+'
|
|
235
|
+
reason: "Use ./scripts/release.sh instead of npm version"
|
|
236
|
+
|
|
237
|
+
- pattern: '\bgit\s+tag\s+v\d+\.\d+\.\d+'
|
|
238
|
+
reason: "Use ./scripts/release.sh instead of manual git tag"
|
|
239
|
+
|
|
231
240
|
# ─── Project-Specific Patterns (add yours below) ───
|
|
232
241
|
# customPatterns:
|
|
233
242
|
# - pattern: 'your-pattern-here'
|