claude-code-workflow 7.2.29 → 7.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ccw/workflows/cli-templates/schemas/plan-overview-base-schema.json +2 -2
- package/.ccw/workflows/cli-templates/schemas/task-schema.json +14 -7
- package/.claude/agents/action-planning-agent.md +7 -4
- package/.claude/agents/cli-explore-agent.md +77 -63
- package/.claude/agents/cli-lite-planning-agent.md +11 -10
- package/.claude/agents/issue-plan-agent.md +421 -426
- package/.claude/commands/workflow/spec/setup.md +1 -1
- package/.claude/commands/workflow-skill.md +130 -0
- package/.claude/skills/ccw-chain/SKILL.md +92 -0
- package/.claude/skills/ccw-chain/chains/ccw-cycle.json +31 -0
- package/.claude/skills/ccw-chain/chains/ccw-exploration.json +58 -0
- package/.claude/skills/ccw-chain/chains/ccw-issue.json +44 -0
- package/.claude/skills/ccw-chain/chains/ccw-lightweight.json +71 -0
- package/.claude/skills/ccw-chain/chains/ccw-main.json +65 -0
- package/.claude/skills/ccw-chain/chains/ccw-standard.json +51 -0
- package/.claude/skills/ccw-chain/chains/ccw-team.json +15 -0
- package/.claude/skills/ccw-chain/chains/ccw-with-file.json +47 -0
- package/.claude/skills/ccw-chain/specs/auto-mode.md +47 -0
- package/.claude/skills/chain-loader/SKILL.md +78 -0
- package/.claude/skills/chain-loader/phases/01-analyze-skill.md +53 -0
- package/.claude/skills/chain-loader/phases/02-design-graph.md +73 -0
- package/.claude/skills/chain-loader/phases/03-generate-validate.md +75 -0
- package/.claude/skills/chain-loader/specs/chain-schema.md +126 -0
- package/.claude/skills/chain-loader/specs/design-patterns.md +99 -0
- package/.claude/skills/chain-loader/templates/chain-json.md +63 -0
- package/.claude/skills/review-cycle/phases/review-module.md +764 -764
- package/.claude/skills/review-cycle/phases/review-session.md +775 -775
- package/.claude/skills/workflow-multi-cli-plan/SKILL.md +2 -2
- package/.claude/skills/workflow-plan/SKILL.md +1 -0
- package/.claude/skills/workflow-plan/phases/01-session-discovery.md +19 -2
- package/.claude/skills/workflow-plan/phases/02-context-gathering.md +2 -2
- package/.claude/skills/workflow-plan/phases/03-conflict-resolution.md +422 -422
- package/.claude/skills/workflow-plan/phases/04-task-generation.md +9 -1
- package/.claude/skills/workflow-plan/phases/05-plan-verify.md +395 -395
- package/.claude/skills/workflow-tdd-plan/phases/02-context-gathering.md +407 -407
- package/.claude/skills/workflow-tdd-plan/phases/04-conflict-resolution.md +426 -426
- package/.claude/skills/workflow-test-fix/phases/02-test-context-gather.md +493 -493
- package/.codex/skills/analyze-with-file/SKILL.md +383 -134
- package/.codex/skills/brainstorm/SKILL.md +3 -3
- package/.codex/skills/brainstorm-with-file/SKILL.md +208 -88
- package/.codex/skills/clean/SKILL.md +1 -1
- package/.codex/skills/csv-wave-pipeline/SKILL.md +2 -2
- package/.codex/skills/investigate/orchestrator.md +24 -0
- package/.codex/skills/issue-discover/SKILL.md +374 -361
- package/.codex/skills/issue-discover/phases/01-issue-new.md +1 -1
- package/.codex/skills/issue-discover/phases/02-discover.md +2 -2
- package/.codex/skills/issue-discover/phases/03-discover-by-prompt.md +1 -1
- package/.codex/skills/issue-discover/phases/04-quick-execute.md +2 -2
- package/.codex/skills/parallel-dev-cycle/SKILL.md +44 -37
- package/.codex/skills/project-documentation-workflow/SKILL.md +1 -1
- package/.codex/skills/review-cycle/SKILL.md +31 -12
- package/.codex/skills/roadmap-with-file/SKILL.md +141 -133
- package/.codex/skills/security-audit/orchestrator.md +29 -0
- package/.codex/skills/session-sync/SKILL.md +1 -1
- package/.codex/skills/ship/orchestrator.md +24 -0
- package/.codex/skills/spec-add/SKILL.md +5 -5
- package/.codex/skills/spec-generator/SKILL.md +33 -2
- package/.codex/skills/spec-generator/phases/01-5-requirement-clarification.md +3 -3
- package/.codex/skills/spec-generator/phases/01-discovery.md +1 -1
- package/.codex/skills/spec-generator/phases/02-product-brief.md +1 -1
- package/.codex/skills/spec-generator/phases/03-requirements.md +1 -1
- package/.codex/skills/spec-generator/phases/04-architecture.md +1 -1
- package/.codex/skills/spec-generator/phases/05-epics-stories.md +1 -1
- package/.codex/skills/spec-generator/phases/06-readiness-check.md +1 -1
- package/.codex/skills/spec-generator/phases/07-issue-export.md +1 -1
- package/.codex/skills/spec-setup/SKILL.md +669 -669
- package/.codex/skills/team-arch-opt/specs/team-config.json +1 -1
- package/.codex/skills/team-brainstorm/SKILL.md +259 -259
- package/.codex/skills/team-coordinate/SKILL.md +359 -359
- package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +1 -1
- package/.codex/skills/team-designer/SKILL.md +27 -1
- package/.codex/skills/team-designer/phases/01-requirements-analysis.md +2 -2
- package/.codex/skills/team-designer/phases/02-scaffold-generation.md +1 -1
- package/.codex/skills/team-designer/phases/04-validation.md +1 -1
- package/.codex/skills/team-executor/SKILL.md +218 -218
- package/.codex/skills/team-frontend/SKILL.md +227 -227
- package/.codex/skills/team-frontend-debug/SKILL.md +278 -278
- package/.codex/skills/team-frontend-debug/roles/coordinator/commands/analyze.md +2 -2
- package/.codex/skills/team-interactive-craft/SKILL.md +220 -220
- package/.codex/skills/team-interactive-craft/roles/coordinator/role.md +209 -209
- package/.codex/skills/team-issue/SKILL.md +269 -269
- package/.codex/skills/team-issue/roles/coordinator/role.md +1 -1
- package/.codex/skills/team-lifecycle-v4/SKILL.md +305 -305
- package/.codex/skills/team-motion-design/SKILL.md +222 -222
- package/.codex/skills/team-motion-design/roles/coordinator/role.md +210 -210
- package/.codex/skills/team-perf-opt/SKILL.md +258 -258
- package/.codex/skills/team-perf-opt/specs/team-config.json +1 -1
- package/.codex/skills/team-planex/SKILL.md +216 -216
- package/.codex/skills/team-quality-assurance/SKILL.md +229 -229
- package/.codex/skills/team-review/SKILL.md +227 -227
- package/.codex/skills/team-roadmap-dev/SKILL.md +238 -238
- package/.codex/skills/team-roadmap-dev/roles/coordinator/commands/roadmap-discuss.md +5 -5
- package/.codex/skills/team-tech-debt/SKILL.md +206 -206
- package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +1 -1
- package/.codex/skills/team-testing/SKILL.md +237 -237
- package/.codex/skills/team-ui-polish/SKILL.md +218 -218
- package/.codex/skills/team-ui-polish/roles/coordinator/role.md +213 -213
- package/.codex/skills/team-uidesign/SKILL.md +219 -219
- package/.codex/skills/team-uidesign/roles/coordinator/role.md +2 -2
- package/.codex/skills/team-ultra-analyze/SKILL.md +260 -260
- package/.codex/skills/team-ultra-analyze/roles/coordinator/commands/monitor.md +1 -1
- package/.codex/skills/team-ultra-analyze/roles/coordinator/role.md +1 -1
- package/.codex/skills/team-ux-improve/SKILL.md +227 -227
- package/.codex/skills/team-ux-improve/roles/coordinator/role.md +1 -1
- package/.codex/skills/team-ux-improve/specs/team-config.json +1 -1
- package/.codex/skills/team-visual-a11y/SKILL.md +319 -319
- package/.codex/skills/team-visual-a11y/roles/coordinator/role.md +213 -213
- package/.codex/skills/workflow-execute/SKILL.md +5 -5
- package/.codex/skills/workflow-lite-planex/SKILL.md +3 -3
- package/.codex/skills/workflow-plan/SKILL.md +3 -3
- package/.codex/skills/workflow-tdd-plan/SKILL.md +4 -4
- package/.codex/skills/workflow-test-fix-cycle/SKILL.md +403 -402
- package/README.md +14 -0
- package/ccw/dist/cli.d.ts.map +1 -1
- package/ccw/dist/cli.js +16 -0
- package/ccw/dist/cli.js.map +1 -1
- package/ccw/dist/commands/chain-loader.d.ts +2 -0
- package/ccw/dist/commands/chain-loader.d.ts.map +1 -0
- package/ccw/dist/commands/chain-loader.js +11 -0
- package/ccw/dist/commands/chain-loader.js.map +1 -0
- package/ccw/dist/commands/install.d.ts.map +1 -1
- package/ccw/dist/commands/install.js +52 -1
- package/ccw/dist/commands/install.js.map +1 -1
- package/ccw/dist/commands/launcher.d.ts +2 -0
- package/ccw/dist/commands/launcher.d.ts.map +1 -0
- package/ccw/dist/commands/launcher.js +434 -0
- package/ccw/dist/commands/launcher.js.map +1 -0
- package/ccw/dist/core/routes/litellm-api-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/litellm-api-routes.js +0 -23
- package/ccw/dist/core/routes/litellm-api-routes.js.map +1 -1
- package/ccw/dist/tools/chain-loader.d.ts +10 -0
- package/ccw/dist/tools/chain-loader.d.ts.map +1 -0
- package/ccw/dist/tools/chain-loader.js +1054 -0
- package/ccw/dist/tools/chain-loader.js.map +1 -0
- package/ccw/dist/tools/index.d.ts.map +1 -1
- package/ccw/dist/tools/index.js +2 -0
- package/ccw/dist/tools/index.js.map +1 -1
- package/ccw/dist/tools/json-builder.js +20 -0
- package/ccw/dist/tools/json-builder.js.map +1 -1
- package/ccw/dist/tools/skill-context-loader.d.ts.map +1 -1
- package/ccw/dist/tools/skill-context-loader.js +12 -26
- package/ccw/dist/tools/skill-context-loader.js.map +1 -1
- package/ccw/dist/types/chain-types.d.ts +112 -0
- package/ccw/dist/types/chain-types.d.ts.map +1 -0
- package/ccw/dist/types/chain-types.js +5 -0
- package/ccw/dist/types/chain-types.js.map +1 -0
- package/ccw/dist/utils/chain-visualizer.d.ts +13 -0
- package/ccw/dist/utils/chain-visualizer.d.ts.map +1 -0
- package/ccw/dist/utils/chain-visualizer.js +164 -0
- package/ccw/dist/utils/chain-visualizer.js.map +1 -0
- package/ccw/scripts/prepublish-clean.mjs +0 -1
- package/package.json +1 -3
- package/.claude/commands/cli/cli-init.md +0 -441
- package/.claude/commands/cli/codex-review.md +0 -361
- package/.claude/commands/flow-create.md +0 -663
- package/.claude/skills/team-edict.zip +0 -0
- package/ccw-litellm/README.md +0 -180
- package/ccw-litellm/pyproject.toml +0 -35
- package/ccw-litellm/src/ccw_litellm/__init__.py +0 -47
- package/ccw-litellm/src/ccw_litellm/cli.py +0 -108
- package/ccw-litellm/src/ccw_litellm/clients/__init__.py +0 -12
- package/ccw-litellm/src/ccw_litellm/clients/litellm_embedder.py +0 -270
- package/ccw-litellm/src/ccw_litellm/clients/litellm_llm.py +0 -198
- package/ccw-litellm/src/ccw_litellm/config/__init__.py +0 -22
- package/ccw-litellm/src/ccw_litellm/config/loader.py +0 -343
- package/ccw-litellm/src/ccw_litellm/config/models.py +0 -162
- package/ccw-litellm/src/ccw_litellm/interfaces/__init__.py +0 -14
- package/ccw-litellm/src/ccw_litellm/interfaces/embedder.py +0 -52
- package/ccw-litellm/src/ccw_litellm/interfaces/llm.py +0 -45
|
@@ -1,213 +1,213 @@
|
|
|
1
|
-
# Coordinator Role
|
|
2
|
-
|
|
3
|
-
Visual Accessibility Team coordinator. Orchestrate pipeline: analyze -> dispatch -> spawn -> monitor -> report. Manages parallel fan-in (3 auditors), remediation synthesis, fix implementation, and optional re-audit GC loop.
|
|
4
|
-
|
|
5
|
-
## Scope Lock (READ FIRST -- overrides all other sections)
|
|
6
|
-
|
|
7
|
-
**You are a dispatcher, not a doer.** Your ONLY outputs are:
|
|
8
|
-
- Session state files (`.workflow/.team/` directory)
|
|
9
|
-
- `spawn_agent` / `wait_agent` / `close_agent` / `send_message` / `assign_task` calls
|
|
10
|
-
- Status reports to the user / `request_user_input` prompts
|
|
11
|
-
|
|
12
|
-
**FORBIDDEN** (even if the task seems trivial):
|
|
13
|
-
```
|
|
14
|
-
WRONG: Read/Grep/Glob on project source code -- worker work
|
|
15
|
-
WRONG: Bash("ccw cli ...") -- worker work
|
|
16
|
-
WRONG: Edit/Write on project source files -- worker work
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Self-check gate**: Before ANY tool call, ask: "Is this orchestration or project work? If project work -> STOP -> spawn worker."
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Identity
|
|
24
|
-
- **Name**: coordinator | **Tag**: [coordinator]
|
|
25
|
-
- **Responsibility**: Analyze scope -> Create session -> Dispatch tasks -> Monitor progress -> Report results
|
|
26
|
-
|
|
27
|
-
## Boundaries
|
|
28
|
-
|
|
29
|
-
### MUST
|
|
30
|
-
- All output (team_msg, logs) must carry `[coordinator]` identifier
|
|
31
|
-
- Use `team_worker` agent type for all worker spawns (NOT `general-purpose`)
|
|
32
|
-
- Dispatch tasks with proper dependency chains and deps in tasks.json
|
|
33
|
-
- Spawn COLOR-001, TYPO-001, FOCUS-001 in PARALLEL (no deps between them)
|
|
34
|
-
- Monitor worker progress via wait_agent and process results
|
|
35
|
-
- Handle Generator-Critic loops with max 2 iterations
|
|
36
|
-
- Maintain session state persistence (tasks.json)
|
|
37
|
-
- **Always proceed through full Phase 1-5 workflow, never skip to direct execution**
|
|
38
|
-
- Use `send_message` for supplementary context (non-interrupting) and `assign_task` for triggering new work
|
|
39
|
-
- Use `list_agents` for session resume health checks and cleanup verification
|
|
40
|
-
|
|
41
|
-
### MUST NOT
|
|
42
|
-
- Implement domain logic (auditing, planning, fixing) -- workers handle this
|
|
43
|
-
- Spawn workers without creating tasks first
|
|
44
|
-
- Skip sync points when configured
|
|
45
|
-
- Force-advance pipeline past failed audit
|
|
46
|
-
- Modify source code or design artifacts directly -- delegate to workers
|
|
47
|
-
- Omit `[coordinator]` identifier in any output
|
|
48
|
-
- Call CLI tools (ccw cli) -- only workers use CLI
|
|
49
|
-
|
|
50
|
-
## Command Execution Protocol
|
|
51
|
-
|
|
52
|
-
When coordinator needs to execute a command (analyze, dispatch, monitor):
|
|
53
|
-
|
|
54
|
-
1. Read `commands/<command>.md`
|
|
55
|
-
2. Follow the workflow defined in the command
|
|
56
|
-
3. Commands are inline execution guides, NOT separate agents
|
|
57
|
-
4. Execute synchronously, complete before proceeding
|
|
58
|
-
|
|
59
|
-
## Entry Router
|
|
60
|
-
|
|
61
|
-
| Detection | Condition | Handler |
|
|
62
|
-
|-----------|-----------|---------|
|
|
63
|
-
| Status check | Args contain "check" or "status" | -> handleCheck (monitor.md) |
|
|
64
|
-
| Manual resume | Args contain "resume" or "continue" | -> handleResume (monitor.md) |
|
|
65
|
-
| Capability gap | Message contains "capability_gap" | -> handleAdapt (monitor.md) |
|
|
66
|
-
| Pipeline complete | All tasks have status "completed" | -> handleComplete (monitor.md) |
|
|
67
|
-
| Interrupted session | Active/paused session exists in .workflow/.team/VA-* | -> Phase 0 |
|
|
68
|
-
| New session | None of above | -> Phase 1 |
|
|
69
|
-
|
|
70
|
-
For check/resume/adapt/complete: load `@commands/monitor.md`, execute matched handler, STOP.
|
|
71
|
-
|
|
72
|
-
## Phase 0: Session Resume Check
|
|
73
|
-
|
|
74
|
-
1. Scan `.workflow/.team/VA-*/tasks.json` for active/paused sessions
|
|
75
|
-
2. No sessions -> Phase 1
|
|
76
|
-
3. Single session -> reconcile (read tasks.json, reset in_progress->pending, kick first ready task)
|
|
77
|
-
4. Multiple -> request_user_input for selection
|
|
78
|
-
|
|
79
|
-
## Phase 1: Requirement Clarification
|
|
80
|
-
|
|
81
|
-
TEXT-LEVEL ONLY. No source code reading.
|
|
82
|
-
|
|
83
|
-
1. Parse task description from arguments
|
|
84
|
-
2. Detect audit scope:
|
|
85
|
-
|
|
86
|
-
| Signal | Pipeline Mode |
|
|
87
|
-
|--------|---------------|
|
|
88
|
-
| "audit only", "no fixes", "assessment" | audit-only |
|
|
89
|
-
| "full audit", "fix", "remediate", "full cycle" | full |
|
|
90
|
-
| Unclear | ask user |
|
|
91
|
-
|
|
92
|
-
3. Ask for missing parameters if scope unclear:
|
|
93
|
-
```
|
|
94
|
-
request_user_input({
|
|
95
|
-
questions: [
|
|
96
|
-
{ question: "Accessibility audit scope?", header: "Scope", options: [
|
|
97
|
-
{ label: "Audit only", description: "Color + typography + focus audit with remediation plan" },
|
|
98
|
-
{ label: "Full cycle", description: "Audit + fix + re-audit verification" }
|
|
99
|
-
]},
|
|
100
|
-
{ question: "Target?", header: "Target", options: [
|
|
101
|
-
{ label: "URL (rendered page)" },
|
|
102
|
-
{ label: "Component path (source)" },
|
|
103
|
-
{ label: "Full site" }
|
|
104
|
-
]}
|
|
105
|
-
]
|
|
106
|
-
})
|
|
107
|
-
```
|
|
108
|
-
4. Delegate to `@commands/analyze.md` -> output scope context
|
|
109
|
-
5. Record: pipeline_mode, target, wcag_level
|
|
110
|
-
|
|
111
|
-
## Phase 2: Create Session + Initialize
|
|
112
|
-
|
|
113
|
-
1. Resolve workspace paths (MUST do first):
|
|
114
|
-
- `project_root` = result of `Bash({ command: "pwd" })`
|
|
115
|
-
- `skill_root` = `<project_root>/.codex/skills/team-visual-a11y`
|
|
116
|
-
2. Generate session ID: `VA-<slug>-<YYYY-MM-DD>`
|
|
117
|
-
3. Create session folder structure:
|
|
118
|
-
```
|
|
119
|
-
.workflow/.team/VA-<slug>-<date>/audits/color/
|
|
120
|
-
.workflow/.team/VA-<slug>-<date>/audits/typography/
|
|
121
|
-
.workflow/.team/VA-<slug>-<date>/audits/focus/
|
|
122
|
-
.workflow/.team/VA-<slug>-<date>/remediation/
|
|
123
|
-
.workflow/.team/VA-<slug>-<date>/fixes/
|
|
124
|
-
.workflow/.team/VA-<slug>-<date>/re-audit/
|
|
125
|
-
.workflow/.team/VA-<slug>-<date>/evidence/
|
|
126
|
-
.workflow/.team/VA-<slug>-<date>/.msg/
|
|
127
|
-
```
|
|
128
|
-
4. Initialize `.msg/meta.json` via team_msg state_update with pipeline metadata
|
|
129
|
-
5. Write initial tasks.json:
|
|
130
|
-
```json
|
|
131
|
-
{
|
|
132
|
-
"session_id": "<id>",
|
|
133
|
-
"pipeline_mode": "<audit-only|full>",
|
|
134
|
-
"target": "<target>",
|
|
135
|
-
"wcag_level": "<AA|AAA>",
|
|
136
|
-
"created_at": "<ISO timestamp>",
|
|
137
|
-
"gc_rounds": 0,
|
|
138
|
-
"max_gc_rounds": 2,
|
|
139
|
-
"active_agents": {},
|
|
140
|
-
"tasks": {}
|
|
141
|
-
}
|
|
142
|
-
```
|
|
143
|
-
6. Do NOT spawn workers yet - deferred to Phase 4
|
|
144
|
-
|
|
145
|
-
## Phase 3: Create Task Chain
|
|
146
|
-
|
|
147
|
-
Delegate to `@commands/dispatch.md`. Task chains by mode:
|
|
148
|
-
|
|
149
|
-
| Mode | Task Chain |
|
|
150
|
-
|------|------------|
|
|
151
|
-
| audit-only | [COLOR-001 + TYPO-001 + FOCUS-001 parallel] -> REMED-001 |
|
|
152
|
-
| full | [COLOR-001 + TYPO-001 + FOCUS-001 parallel] -> REMED-001 -> FIX-001 -> [COLOR-002 + FOCUS-002 parallel] |
|
|
153
|
-
|
|
154
|
-
## Phase 4: Spawn-and-Wait
|
|
155
|
-
|
|
156
|
-
**CRITICAL**: Spawn COLOR-001, TYPO-001, FOCUS-001 in PARALLEL (all 3 have NO deps).
|
|
157
|
-
|
|
158
|
-
Delegate to `@commands/monitor.md#handleSpawnNext`:
|
|
159
|
-
1. Find ready tasks (pending + deps resolved)
|
|
160
|
-
2. Spawn team_worker agents via spawn_agent, wait_agent for results
|
|
161
|
-
3. Output status summary
|
|
162
|
-
4. STOP
|
|
163
|
-
|
|
164
|
-
## Phase 5: Report + Completion Action
|
|
165
|
-
|
|
166
|
-
1. Read session state -> collect all results
|
|
167
|
-
2. List deliverables:
|
|
168
|
-
|
|
169
|
-
| Deliverable | Path |
|
|
170
|
-
|-------------|------|
|
|
171
|
-
| Color Audit | <session>/audits/color/color-audit-001.md |
|
|
172
|
-
| Typography Audit | <session>/audits/typography/typo-audit-001.md |
|
|
173
|
-
| Focus Audit | <session>/audits/focus/focus-audit-001.md |
|
|
174
|
-
| Remediation Plan | <session>/remediation/remediation-plan.md |
|
|
175
|
-
| Fix Summary | <session>/fixes/fix-summary-001.md (full mode) |
|
|
176
|
-
| Re-audit Color | <session>/re-audit/color-audit-002.md (full mode) |
|
|
177
|
-
| Re-audit Focus | <session>/re-audit/focus-audit-002.md (full mode) |
|
|
178
|
-
| Evidence | <session>/evidence/*.png (if Chrome DevTools used) |
|
|
179
|
-
|
|
180
|
-
3. Calculate: completed_tasks, gc_rounds, issues_found, issues_fixed, wcag_compliance_level
|
|
181
|
-
4. Output pipeline summary with [coordinator] prefix
|
|
182
|
-
5. Execute completion action:
|
|
183
|
-
```
|
|
184
|
-
request_user_input({
|
|
185
|
-
questions: [{ question: "Pipeline complete. What next?", header: "Completion", options: [
|
|
186
|
-
{ label: "Archive & Clean", description: "Archive session and clean up resources" },
|
|
187
|
-
{ label: "Keep Active", description: "Keep session for follow-up work" },
|
|
188
|
-
{ label: "Export Results", description: "Export deliverables to specified location" }
|
|
189
|
-
]}]
|
|
190
|
-
})
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
## v4 Coordination Patterns
|
|
194
|
-
|
|
195
|
-
### Message Semantics
|
|
196
|
-
- **send_message**: Queue supplementary info to a running agent. Does NOT interrupt current processing. Use for: sharing upstream results, context enrichment, FYI notifications.
|
|
197
|
-
- **assign_task**: Assign new work and trigger processing. Use for: waking idle agents, redirecting work, requesting new output.
|
|
198
|
-
|
|
199
|
-
### Agent Lifecycle Management
|
|
200
|
-
- **list_agents({})**: Returns all running agents. Use in handleResume to reconcile session state with actual running agents. Use in handleComplete to verify clean shutdown.
|
|
201
|
-
- **Named targeting**: Workers spawned with `task_name: "<task-id>"` can be addressed by name in send_message, assign_task, and close_agent calls.
|
|
202
|
-
|
|
203
|
-
## Error Handling
|
|
204
|
-
|
|
205
|
-
| Error | Resolution |
|
|
206
|
-
|-------|------------|
|
|
207
|
-
| Task timeout | Log, mark failed, ask user to retry or skip |
|
|
208
|
-
| Worker crash | Reset task to pending, respawn worker |
|
|
209
|
-
| Dependency cycle | Detect, report to user, halt |
|
|
210
|
-
| Invalid scope | Reject with error, ask to clarify |
|
|
211
|
-
| Session corruption | Attempt recovery, fallback to manual reconciliation |
|
|
212
|
-
| GC loop stuck > 2 rounds | Escalate to user: accept / try one more / terminate |
|
|
213
|
-
| Chrome DevTools unavailable | Mark in meta.json, auditors degrade to static analysis |
|
|
1
|
+
# Coordinator Role
|
|
2
|
+
|
|
3
|
+
Visual Accessibility Team coordinator. Orchestrate pipeline: analyze -> dispatch -> spawn -> monitor -> report. Manages parallel fan-in (3 auditors), remediation synthesis, fix implementation, and optional re-audit GC loop.
|
|
4
|
+
|
|
5
|
+
## Scope Lock (READ FIRST -- overrides all other sections)
|
|
6
|
+
|
|
7
|
+
**You are a dispatcher, not a doer.** Your ONLY outputs are:
|
|
8
|
+
- Session state files (`.workflow/.team/` directory)
|
|
9
|
+
- `spawn_agent` / `wait_agent` / `close_agent` / `send_message` / `assign_task` calls
|
|
10
|
+
- Status reports to the user / `request_user_input` prompts
|
|
11
|
+
|
|
12
|
+
**FORBIDDEN** (even if the task seems trivial):
|
|
13
|
+
```
|
|
14
|
+
WRONG: Read/Grep/Glob on project source code -- worker work
|
|
15
|
+
WRONG: Bash("ccw cli ...") -- worker work
|
|
16
|
+
WRONG: Edit/Write on project source files -- worker work
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Self-check gate**: Before ANY tool call, ask: "Is this orchestration or project work? If project work -> STOP -> spawn worker."
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Identity
|
|
24
|
+
- **Name**: coordinator | **Tag**: [coordinator]
|
|
25
|
+
- **Responsibility**: Analyze scope -> Create session -> Dispatch tasks -> Monitor progress -> Report results
|
|
26
|
+
|
|
27
|
+
## Boundaries
|
|
28
|
+
|
|
29
|
+
### MUST
|
|
30
|
+
- All output (team_msg, logs) must carry `[coordinator]` identifier
|
|
31
|
+
- Use `team_worker` agent type for all worker spawns (NOT `general-purpose`)
|
|
32
|
+
- Dispatch tasks with proper dependency chains and deps in tasks.json
|
|
33
|
+
- Spawn COLOR-001, TYPO-001, FOCUS-001 in PARALLEL (no deps between them)
|
|
34
|
+
- Monitor worker progress via wait_agent and process results
|
|
35
|
+
- Handle Generator-Critic loops with max 2 iterations
|
|
36
|
+
- Maintain session state persistence (tasks.json)
|
|
37
|
+
- **Always proceed through full Phase 1-5 workflow, never skip to direct execution**
|
|
38
|
+
- Use `send_message` for supplementary context (non-interrupting) and `assign_task` for triggering new work
|
|
39
|
+
- Use `list_agents` for session resume health checks and cleanup verification
|
|
40
|
+
|
|
41
|
+
### MUST NOT
|
|
42
|
+
- Implement domain logic (auditing, planning, fixing) -- workers handle this
|
|
43
|
+
- Spawn workers without creating tasks first
|
|
44
|
+
- Skip sync points when configured
|
|
45
|
+
- Force-advance pipeline past failed audit
|
|
46
|
+
- Modify source code or design artifacts directly -- delegate to workers
|
|
47
|
+
- Omit `[coordinator]` identifier in any output
|
|
48
|
+
- Call CLI tools (ccw cli) -- only workers use CLI
|
|
49
|
+
|
|
50
|
+
## Command Execution Protocol
|
|
51
|
+
|
|
52
|
+
When coordinator needs to execute a command (analyze, dispatch, monitor):
|
|
53
|
+
|
|
54
|
+
1. Read `commands/<command>.md`
|
|
55
|
+
2. Follow the workflow defined in the command
|
|
56
|
+
3. Commands are inline execution guides, NOT separate agents
|
|
57
|
+
4. Execute synchronously, complete before proceeding
|
|
58
|
+
|
|
59
|
+
## Entry Router
|
|
60
|
+
|
|
61
|
+
| Detection | Condition | Handler |
|
|
62
|
+
|-----------|-----------|---------|
|
|
63
|
+
| Status check | Args contain "check" or "status" | -> handleCheck (monitor.md) |
|
|
64
|
+
| Manual resume | Args contain "resume" or "continue" | -> handleResume (monitor.md) |
|
|
65
|
+
| Capability gap | Message contains "capability_gap" | -> handleAdapt (monitor.md) |
|
|
66
|
+
| Pipeline complete | All tasks have status "completed" | -> handleComplete (monitor.md) |
|
|
67
|
+
| Interrupted session | Active/paused session exists in .workflow/.team/VA-* | -> Phase 0 |
|
|
68
|
+
| New session | None of above | -> Phase 1 |
|
|
69
|
+
|
|
70
|
+
For check/resume/adapt/complete: load `@commands/monitor.md`, execute matched handler, STOP.
|
|
71
|
+
|
|
72
|
+
## Phase 0: Session Resume Check
|
|
73
|
+
|
|
74
|
+
1. Scan `.workflow/.team/VA-*/tasks.json` for active/paused sessions
|
|
75
|
+
2. No sessions -> Phase 1
|
|
76
|
+
3. Single session -> reconcile (read tasks.json, reset in_progress->pending, kick first ready task)
|
|
77
|
+
4. Multiple -> request_user_input for selection
|
|
78
|
+
|
|
79
|
+
## Phase 1: Requirement Clarification
|
|
80
|
+
|
|
81
|
+
TEXT-LEVEL ONLY. No source code reading.
|
|
82
|
+
|
|
83
|
+
1. Parse task description from arguments
|
|
84
|
+
2. Detect audit scope:
|
|
85
|
+
|
|
86
|
+
| Signal | Pipeline Mode |
|
|
87
|
+
|--------|---------------|
|
|
88
|
+
| "audit only", "no fixes", "assessment" | audit-only |
|
|
89
|
+
| "full audit", "fix", "remediate", "full cycle" | full |
|
|
90
|
+
| Unclear | ask user |
|
|
91
|
+
|
|
92
|
+
3. Ask for missing parameters if scope unclear:
|
|
93
|
+
```
|
|
94
|
+
functions.request_user_input({
|
|
95
|
+
questions: [
|
|
96
|
+
{ question: "Accessibility audit scope?", header: "Scope", options: [
|
|
97
|
+
{ label: "Audit only", description: "Color + typography + focus audit with remediation plan" },
|
|
98
|
+
{ label: "Full cycle", description: "Audit + fix + re-audit verification" }
|
|
99
|
+
]},
|
|
100
|
+
{ question: "Target?", header: "Target", options: [
|
|
101
|
+
{ label: "URL (rendered page)" },
|
|
102
|
+
{ label: "Component path (source)" },
|
|
103
|
+
{ label: "Full site" }
|
|
104
|
+
]}
|
|
105
|
+
]
|
|
106
|
+
})
|
|
107
|
+
```
|
|
108
|
+
4. Delegate to `@commands/analyze.md` -> output scope context
|
|
109
|
+
5. Record: pipeline_mode, target, wcag_level
|
|
110
|
+
|
|
111
|
+
## Phase 2: Create Session + Initialize
|
|
112
|
+
|
|
113
|
+
1. Resolve workspace paths (MUST do first):
|
|
114
|
+
- `project_root` = result of `Bash({ command: "pwd" })`
|
|
115
|
+
- `skill_root` = `<project_root>/.codex/skills/team-visual-a11y`
|
|
116
|
+
2. Generate session ID: `VA-<slug>-<YYYY-MM-DD>`
|
|
117
|
+
3. Create session folder structure:
|
|
118
|
+
```
|
|
119
|
+
.workflow/.team/VA-<slug>-<date>/audits/color/
|
|
120
|
+
.workflow/.team/VA-<slug>-<date>/audits/typography/
|
|
121
|
+
.workflow/.team/VA-<slug>-<date>/audits/focus/
|
|
122
|
+
.workflow/.team/VA-<slug>-<date>/remediation/
|
|
123
|
+
.workflow/.team/VA-<slug>-<date>/fixes/
|
|
124
|
+
.workflow/.team/VA-<slug>-<date>/re-audit/
|
|
125
|
+
.workflow/.team/VA-<slug>-<date>/evidence/
|
|
126
|
+
.workflow/.team/VA-<slug>-<date>/.msg/
|
|
127
|
+
```
|
|
128
|
+
4. Initialize `.msg/meta.json` via team_msg state_update with pipeline metadata
|
|
129
|
+
5. Write initial tasks.json:
|
|
130
|
+
```json
|
|
131
|
+
{
|
|
132
|
+
"session_id": "<id>",
|
|
133
|
+
"pipeline_mode": "<audit-only|full>",
|
|
134
|
+
"target": "<target>",
|
|
135
|
+
"wcag_level": "<AA|AAA>",
|
|
136
|
+
"created_at": "<ISO timestamp>",
|
|
137
|
+
"gc_rounds": 0,
|
|
138
|
+
"max_gc_rounds": 2,
|
|
139
|
+
"active_agents": {},
|
|
140
|
+
"tasks": {}
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
6. Do NOT spawn workers yet - deferred to Phase 4
|
|
144
|
+
|
|
145
|
+
## Phase 3: Create Task Chain
|
|
146
|
+
|
|
147
|
+
Delegate to `@commands/dispatch.md`. Task chains by mode:
|
|
148
|
+
|
|
149
|
+
| Mode | Task Chain |
|
|
150
|
+
|------|------------|
|
|
151
|
+
| audit-only | [COLOR-001 + TYPO-001 + FOCUS-001 parallel] -> REMED-001 |
|
|
152
|
+
| full | [COLOR-001 + TYPO-001 + FOCUS-001 parallel] -> REMED-001 -> FIX-001 -> [COLOR-002 + FOCUS-002 parallel] |
|
|
153
|
+
|
|
154
|
+
## Phase 4: Spawn-and-Wait
|
|
155
|
+
|
|
156
|
+
**CRITICAL**: Spawn COLOR-001, TYPO-001, FOCUS-001 in PARALLEL (all 3 have NO deps).
|
|
157
|
+
|
|
158
|
+
Delegate to `@commands/monitor.md#handleSpawnNext`:
|
|
159
|
+
1. Find ready tasks (pending + deps resolved)
|
|
160
|
+
2. Spawn team_worker agents via spawn_agent, wait_agent for results
|
|
161
|
+
3. Output status summary
|
|
162
|
+
4. STOP
|
|
163
|
+
|
|
164
|
+
## Phase 5: Report + Completion Action
|
|
165
|
+
|
|
166
|
+
1. Read session state -> collect all results
|
|
167
|
+
2. List deliverables:
|
|
168
|
+
|
|
169
|
+
| Deliverable | Path |
|
|
170
|
+
|-------------|------|
|
|
171
|
+
| Color Audit | <session>/audits/color/color-audit-001.md |
|
|
172
|
+
| Typography Audit | <session>/audits/typography/typo-audit-001.md |
|
|
173
|
+
| Focus Audit | <session>/audits/focus/focus-audit-001.md |
|
|
174
|
+
| Remediation Plan | <session>/remediation/remediation-plan.md |
|
|
175
|
+
| Fix Summary | <session>/fixes/fix-summary-001.md (full mode) |
|
|
176
|
+
| Re-audit Color | <session>/re-audit/color-audit-002.md (full mode) |
|
|
177
|
+
| Re-audit Focus | <session>/re-audit/focus-audit-002.md (full mode) |
|
|
178
|
+
| Evidence | <session>/evidence/*.png (if Chrome DevTools used) |
|
|
179
|
+
|
|
180
|
+
3. Calculate: completed_tasks, gc_rounds, issues_found, issues_fixed, wcag_compliance_level
|
|
181
|
+
4. Output pipeline summary with [coordinator] prefix
|
|
182
|
+
5. Execute completion action:
|
|
183
|
+
```
|
|
184
|
+
functions.request_user_input({
|
|
185
|
+
questions: [{ question: "Pipeline complete. What next?", header: "Completion", options: [
|
|
186
|
+
{ label: "Archive & Clean", description: "Archive session and clean up resources" },
|
|
187
|
+
{ label: "Keep Active", description: "Keep session for follow-up work" },
|
|
188
|
+
{ label: "Export Results", description: "Export deliverables to specified location" }
|
|
189
|
+
]}]
|
|
190
|
+
})
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## v4 Coordination Patterns
|
|
194
|
+
|
|
195
|
+
### Message Semantics
|
|
196
|
+
- **send_message**: Queue supplementary info to a running agent. Does NOT interrupt current processing. Use for: sharing upstream results, context enrichment, FYI notifications.
|
|
197
|
+
- **assign_task**: Assign new work and trigger processing. Use for: waking idle agents, redirecting work, requesting new output.
|
|
198
|
+
|
|
199
|
+
### Agent Lifecycle Management
|
|
200
|
+
- **list_agents({})**: Returns all running agents. Use in handleResume to reconcile session state with actual running agents. Use in handleComplete to verify clean shutdown.
|
|
201
|
+
- **Named targeting**: Workers spawned with `task_name: "<task-id>"` can be addressed by name in send_message, assign_task, and close_agent calls.
|
|
202
|
+
|
|
203
|
+
## Error Handling
|
|
204
|
+
|
|
205
|
+
| Error | Resolution |
|
|
206
|
+
|-------|------------|
|
|
207
|
+
| Task timeout | Log, mark failed, ask user to retry or skip |
|
|
208
|
+
| Worker crash | Reset task to pending, respawn worker |
|
|
209
|
+
| Dependency cycle | Detect, report to user, halt |
|
|
210
|
+
| Invalid scope | Reject with error, ask to clarify |
|
|
211
|
+
| Session corruption | Attempt recovery, fallback to manual reconciliation |
|
|
212
|
+
| GC loop stuck > 2 rounds | Escalate to user: accept / try one more / terminate |
|
|
213
|
+
| Chrome DevTools unavailable | Mark in meta.json, auditors degrade to static analysis |
|
|
@@ -213,7 +213,7 @@ if (isResumeMode) {
|
|
|
213
213
|
return { id, path: s, progress: `${done}/${total} tasks` }
|
|
214
214
|
})
|
|
215
215
|
|
|
216
|
-
const answer = request_user_input({
|
|
216
|
+
const answer = functions.request_user_input({
|
|
217
217
|
questions: [{
|
|
218
218
|
header: "Session",
|
|
219
219
|
id: "session",
|
|
@@ -546,7 +546,7 @@ if (!AUTO_YES) {
|
|
|
546
546
|
console.log(` Wave ${w}: ${waveTasks.map(t => `${t.id}(${t.agent})`).join(', ')}`)
|
|
547
547
|
}
|
|
548
548
|
|
|
549
|
-
const answer = request_user_input({
|
|
549
|
+
const answer = functions.request_user_input({
|
|
550
550
|
questions: [{
|
|
551
551
|
header: "Confirm",
|
|
552
552
|
id: "confirm_execute",
|
|
@@ -891,7 +891,7 @@ Bash(`cd "${sessionFolder}" && jq '.status = "${sessionStatus}" | .completed_at
|
|
|
891
891
|
if (AUTO_YES) {
|
|
892
892
|
console.log(` [--yes] Session ${sessionId} ${sessionStatus}.`)
|
|
893
893
|
} else {
|
|
894
|
-
const nextStep = request_user_input({
|
|
894
|
+
const nextStep = functions.request_user_input({
|
|
895
895
|
questions: [{
|
|
896
896
|
header: "Next Step",
|
|
897
897
|
id: "next_step",
|
|
@@ -922,7 +922,7 @@ if (AUTO_YES) {
|
|
|
922
922
|
console.log(`\n## Phase 6: Post-Implementation Review\n`)
|
|
923
923
|
|
|
924
924
|
const reviewType = AUTO_YES ? 'quality' : (() => {
|
|
925
|
-
const answer = request_user_input({
|
|
925
|
+
const answer = functions.request_user_input({
|
|
926
926
|
questions: [{
|
|
927
927
|
header: "Review Type",
|
|
928
928
|
id: "review_type",
|
|
@@ -966,7 +966,7 @@ console.log(` Review complete: ${sessionFolder}/REVIEW-${reviewType}.md`)
|
|
|
966
966
|
|
|
967
967
|
// Post-review options
|
|
968
968
|
if (!AUTO_YES) {
|
|
969
|
-
const postReview = request_user_input({
|
|
969
|
+
const postReview = functions.request_user_input({
|
|
970
970
|
questions: [{
|
|
971
971
|
header: "Post Review",
|
|
972
972
|
id: "post_review",
|
|
@@ -292,7 +292,7 @@ REQUIREMENT: ${requirement}" --tool gemini --mode analysis --rule planning-break
|
|
|
292
292
|
console.log(`\n## Exploration Plan (${angles.length} angles)\n`)
|
|
293
293
|
angles.forEach(a => console.log(` - [${a.id}] ${a.angle}: ${a.focus}`))
|
|
294
294
|
|
|
295
|
-
const answer = request_user_input({
|
|
295
|
+
const answer = functions.request_user_input({
|
|
296
296
|
questions: [{
|
|
297
297
|
question: "Approve exploration angles?",
|
|
298
298
|
header: "Validation",
|
|
@@ -588,7 +588,7 @@ ${wt.map(t => ` - [${t.id}] ${t.title} (scope: ${t.scope}, from: ${t.context_fr
|
|
|
588
588
|
}).join('\n')}
|
|
589
589
|
`)
|
|
590
590
|
|
|
591
|
-
const answer = request_user_input({
|
|
591
|
+
const answer = functions.request_user_input({
|
|
592
592
|
questions: [{
|
|
593
593
|
question: `Proceed with ${decomposedTasks.length} tasks across ${maxWave} waves?`,
|
|
594
594
|
header: "Confirm",
|
|
@@ -989,7 +989,7 @@ ${[...new Set(finalTasks.flatMap(t => (t.files_modified || '').split(';')).filte
|
|
|
989
989
|
|
|
990
990
|
```javascript
|
|
991
991
|
if (!AUTO_YES && failed.length > 0) {
|
|
992
|
-
const answer = request_user_input({
|
|
992
|
+
const answer = functions.request_user_input({
|
|
993
993
|
questions: [{
|
|
994
994
|
question: `${failed.length} tasks failed. Next action?`,
|
|
995
995
|
header: "Next Step",
|
|
@@ -209,7 +209,7 @@ if (existingSessionId) {
|
|
|
209
209
|
sessionFolder = sessions[0]
|
|
210
210
|
sessionId = sessions[0].split('/').pop()
|
|
211
211
|
} else {
|
|
212
|
-
const answer = request_user_input({
|
|
212
|
+
const answer = functions.request_user_input({
|
|
213
213
|
questions: [{
|
|
214
214
|
question: "Multiple sessions found. Select one:",
|
|
215
215
|
header: "Session",
|
|
@@ -328,7 +328,7 @@ TASK DESCRIPTION: ${taskDescription}" --tool gemini --mode analysis --rule analy
|
|
|
328
328
|
console.log(` Strategy: ${c.strategy} | Impact: ${c.impact}`)
|
|
329
329
|
})
|
|
330
330
|
|
|
331
|
-
const answer = request_user_input({
|
|
331
|
+
const answer = functions.request_user_input({
|
|
332
332
|
questions: [{
|
|
333
333
|
question: "Accept conflict resolution strategies?",
|
|
334
334
|
header: "Conflicts",
|
|
@@ -481,7 +481,7 @@ Integrate ${uniqueModules.length} module plans into unified IMPL_PLAN.md.
|
|
|
481
481
|
console.log(` [--yes] Auto-verifying plan...`)
|
|
482
482
|
// → Fall through to Phase 5
|
|
483
483
|
} else {
|
|
484
|
-
const nextStep = request_user_input({
|
|
484
|
+
const nextStep = functions.request_user_input({
|
|
485
485
|
questions: [{
|
|
486
486
|
question: "Plan generated. What's next?",
|
|
487
487
|
header: "Next Step",
|
|
@@ -228,7 +228,7 @@ if (existingSessionId) {
|
|
|
228
228
|
sessionFolder = sessions[0]
|
|
229
229
|
sessionId = sessions[0].split('/').pop()
|
|
230
230
|
} else {
|
|
231
|
-
const answer = request_user_input({
|
|
231
|
+
const answer = functions.request_user_input({
|
|
232
232
|
questions: [{
|
|
233
233
|
question: "Multiple sessions found. Select one:",
|
|
234
234
|
header: "Session",
|
|
@@ -421,7 +421,7 @@ TASK DESCRIPTION: ${taskDescription}" --tool gemini --mode analysis --rule analy
|
|
|
421
421
|
console.log(` Strategy: ${c.strategy} | Impact: ${c.impact}`)
|
|
422
422
|
})
|
|
423
423
|
|
|
424
|
-
const answer = request_user_input({
|
|
424
|
+
const answer = functions.request_user_input({
|
|
425
425
|
questions: [{
|
|
426
426
|
question: "Accept conflict resolution strategies?",
|
|
427
427
|
header: "Conflicts",
|
|
@@ -554,7 +554,7 @@ if (validationErrors.length > 0) {
|
|
|
554
554
|
validationErrors.forEach(e => console.log(` - ${e}`))
|
|
555
555
|
|
|
556
556
|
if (!AUTO_YES) {
|
|
557
|
-
const answer = request_user_input({
|
|
557
|
+
const answer = functions.request_user_input({
|
|
558
558
|
questions: [{
|
|
559
559
|
question: "TDD structure validation failed. Continue anyway?",
|
|
560
560
|
header: "Validation",
|
|
@@ -587,7 +587,7 @@ if (AUTO_YES) {
|
|
|
587
587
|
console.log(` [--yes] Auto-verifying TDD compliance...`)
|
|
588
588
|
// → Fall through to Phase 7
|
|
589
589
|
} else {
|
|
590
|
-
const nextStep = request_user_input({
|
|
590
|
+
const nextStep = functions.request_user_input({
|
|
591
591
|
questions: [{
|
|
592
592
|
question: "TDD plan generated. What's next?",
|
|
593
593
|
header: "Next Step",
|