mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-05 01:50:27 +08:00
fix(claude): 修复 ccw tool exec 命令格式 - 位置参数改为JSON格式
修复内容:
- 将位置参数格式改为JSON格式: ccw tool exec tool '{"param":"value"}'
- 修复双引号字符串内的JSON引号转义问题
- 更新deprecated脚本的使用示例
受影响文件:
- commands/memory/update-full.md, docs-full-cli.md, docs-related-cli.md, update-related.md
- commands/workflow/ui-design/generate.md, import-from-code.md
- scripts/*.sh (9个deprecated脚本)
- skills/command-guide/reference/* (通过analyze_commands.py自动同步)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -392,7 +392,7 @@ Generate individual `.task/IMPL-*.json` files with the following structure:
|
|||||||
// Pattern: Project structure analysis
|
// Pattern: Project structure analysis
|
||||||
{
|
{
|
||||||
"step": "analyze_project_architecture",
|
"step": "analyze_project_architecture",
|
||||||
"commands": ["bash(~/.claude/scripts/get_modules_by_depth.sh)"],
|
"commands": ["bash(ccw tool exec get_modules_by_depth '{}')"],
|
||||||
"output_to": "project_architecture"
|
"output_to": "project_architecture"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ Score = 0
|
|||||||
|
|
||||||
**1. Project Structure**:
|
**1. Project Structure**:
|
||||||
```bash
|
```bash
|
||||||
~/.claude/scripts/get_modules_by_depth.sh
|
ccw tool exec get_modules_by_depth '{}'
|
||||||
```
|
```
|
||||||
|
|
||||||
**2. Content Search**:
|
**2. Content Search**:
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ Phase 4: Output Generation
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Project structure
|
# Project structure
|
||||||
~/.claude/scripts/get_modules_by_depth.sh
|
ccw tool exec get_modules_by_depth '{}'
|
||||||
|
|
||||||
# Pattern discovery (adapt based on language)
|
# Pattern discovery (adapt based on language)
|
||||||
rg "^export (class|interface|function) " --type ts -n
|
rg "^export (class|interface|function) " --type ts -n
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ You are a context discovery specialist focused on gathering relevant project inf
|
|||||||
### 1. Reference Documentation (Project Standards)
|
### 1. Reference Documentation (Project Standards)
|
||||||
**Tools**:
|
**Tools**:
|
||||||
- `Read()` - Load CLAUDE.md, README.md, architecture docs
|
- `Read()` - Load CLAUDE.md, README.md, architecture docs
|
||||||
- `Bash(~/.claude/scripts/get_modules_by_depth.sh)` - Project structure
|
- `Bash(ccw tool exec get_modules_by_depth '{}')` - Project structure
|
||||||
- `Glob()` - Find documentation files
|
- `Glob()` - Find documentation files
|
||||||
|
|
||||||
**Use**: Phase 0 foundation setup
|
**Use**: Phase 0 foundation setup
|
||||||
@@ -82,7 +82,7 @@ mcp__code-index__set_project_path(process.cwd())
|
|||||||
mcp__code-index__refresh_index()
|
mcp__code-index__refresh_index()
|
||||||
|
|
||||||
// 2. Project Structure
|
// 2. Project Structure
|
||||||
bash(~/.claude/scripts/get_modules_by_depth.sh)
|
bash(ccw tool exec get_modules_by_depth '{}')
|
||||||
|
|
||||||
// 3. Load Documentation (if not in memory)
|
// 3. Load Documentation (if not in memory)
|
||||||
if (!memory.has("CLAUDE.md")) Read(CLAUDE.md)
|
if (!memory.has("CLAUDE.md")) Read(CLAUDE.md)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ You are a documentation update coordinator for complex projects. Orchestrate par
|
|||||||
|
|
||||||
## Core Mission
|
## Core Mission
|
||||||
|
|
||||||
Execute depth-parallel updates for all modules using `~/.claude/scripts/update_module_claude.sh`. **Every module path must be processed**.
|
Execute depth-parallel updates for all modules using `ccw tool exec update_module_claude`. **Every module path must be processed**.
|
||||||
|
|
||||||
## Input Context
|
## Input Context
|
||||||
|
|
||||||
@@ -42,12 +42,12 @@ TodoWrite([
|
|||||||
# 3. Launch parallel jobs (max 4)
|
# 3. Launch parallel jobs (max 4)
|
||||||
|
|
||||||
# Depth 5 example (Layer 3 - use multi-layer):
|
# Depth 5 example (Layer 3 - use multi-layer):
|
||||||
~/.claude/scripts/update_module_claude.sh "multi-layer" "./.claude/workflows/cli-templates/prompts/analysis" "gemini" &
|
ccw tool exec update_module_claude '{"strategy":"multi-layer","path":"./.claude/workflows/cli-templates/prompts/analysis","tool":"gemini"}' &
|
||||||
~/.claude/scripts/update_module_claude.sh "multi-layer" "./.claude/workflows/cli-templates/prompts/development" "gemini" &
|
ccw tool exec update_module_claude '{"strategy":"multi-layer","path":"./.claude/workflows/cli-templates/prompts/development","tool":"gemini"}' &
|
||||||
|
|
||||||
# Depth 1 example (Layer 2 - use single-layer):
|
# Depth 1 example (Layer 2 - use single-layer):
|
||||||
~/.claude/scripts/update_module_claude.sh "single-layer" "./src/auth" "gemini" &
|
ccw tool exec update_module_claude '{"strategy":"single-layer","path":"./src/auth","tool":"gemini"}' &
|
||||||
~/.claude/scripts/update_module_claude.sh "single-layer" "./src/api" "gemini" &
|
ccw tool exec update_module_claude '{"strategy":"single-layer","path":"./src/api","tool":"gemini"}' &
|
||||||
# ... up to 4 concurrent jobs
|
# ... up to 4 concurrent jobs
|
||||||
|
|
||||||
# 4. Wait for all depth jobs to complete
|
# 4. Wait for all depth jobs to complete
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ target/
|
|||||||
### Step 2: Workspace Analysis (MANDATORY FIRST)
|
### Step 2: Workspace Analysis (MANDATORY FIRST)
|
||||||
```bash
|
```bash
|
||||||
# Analyze workspace structure
|
# Analyze workspace structure
|
||||||
bash(~/.claude/scripts/get_modules_by_depth.sh json)
|
bash(ccw tool exec get_modules_by_depth '{"format":"json"}')
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step 3: Technology Detection
|
### Step 3: Technology Detection
|
||||||
|
|||||||
@@ -101,10 +101,10 @@ src/ (depth 1) → SINGLE STRATEGY
|
|||||||
Bash({command: "pwd && basename \"$(pwd)\" && git rev-parse --show-toplevel 2>/dev/null || pwd", run_in_background: false});
|
Bash({command: "pwd && basename \"$(pwd)\" && git rev-parse --show-toplevel 2>/dev/null || pwd", run_in_background: false});
|
||||||
|
|
||||||
// Get module structure with classification
|
// Get module structure with classification
|
||||||
Bash({command: "~/.claude/scripts/get_modules_by_depth.sh list | ~/.claude/scripts/classify-folders.sh", run_in_background: false});
|
Bash({command: "ccw tool exec get_modules_by_depth '{\"format\":\"list\"}' | ccw tool exec classify_folders '{}'", run_in_background: false});
|
||||||
|
|
||||||
// OR with path parameter
|
// OR with path parameter
|
||||||
Bash({command: "cd <target-path> && ~/.claude/scripts/get_modules_by_depth.sh list | ~/.claude/scripts/classify-folders.sh", run_in_background: false});
|
Bash({command: "cd <target-path> && ccw tool exec get_modules_by_depth '{\"format\":\"list\"}' | ccw tool exec classify_folders '{}'", run_in_background: false});
|
||||||
```
|
```
|
||||||
|
|
||||||
**Parse output** `depth:N|path:<PATH>|type:<code|navigation>|...` to extract module paths, types, and count.
|
**Parse output** `depth:N|path:<PATH>|type:<code|navigation>|...` to extract module paths, types, and count.
|
||||||
@@ -200,7 +200,7 @@ for (let layer of [3, 2, 1]) {
|
|||||||
let strategy = module.depth >= 3 ? "full" : "single";
|
let strategy = module.depth >= 3 ? "full" : "single";
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${module.path} && ~/.claude/scripts/generate_module_docs.sh "${strategy}" "." "${project_name}" "${tool}"`,
|
command: `cd ${module.path} && ccw tool exec generate_module_docs '{"strategy":"${strategy}","sourcePath":".","projectName":"${project_name}","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
@@ -263,7 +263,7 @@ MODULES:
|
|||||||
|
|
||||||
TOOLS (try in order): {{tool_1}}, {{tool_2}}, {{tool_3}}
|
TOOLS (try in order): {{tool_1}}, {{tool_2}}, {{tool_3}}
|
||||||
|
|
||||||
EXECUTION SCRIPT: ~/.claude/scripts/generate_module_docs.sh
|
EXECUTION SCRIPT: ccw tool exec generate_module_docs
|
||||||
- Accepts strategy parameter: full | single
|
- Accepts strategy parameter: full | single
|
||||||
- Accepts folder type detection: code | navigation
|
- Accepts folder type detection: code | navigation
|
||||||
- Tool execution via direct CLI commands (gemini/qwen/codex)
|
- Tool execution via direct CLI commands (gemini/qwen/codex)
|
||||||
@@ -273,7 +273,7 @@ EXECUTION FLOW (for each module):
|
|||||||
1. Tool fallback loop (exit on first success):
|
1. Tool fallback loop (exit on first success):
|
||||||
for tool in {{tool_1}} {{tool_2}} {{tool_3}}; do
|
for tool in {{tool_1}} {{tool_2}} {{tool_3}}; do
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/generate_module_docs.sh "{{strategy}}" "." "{{project_name}}" "${tool}"`,
|
command: `cd "{{module_path}}" && ccw tool exec generate_module_docs '{"strategy":"{{strategy}}","sourcePath":".","projectName":"{{project_name}}","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
exit_code=$?
|
exit_code=$?
|
||||||
@@ -322,7 +322,7 @@ let project_root = get_project_root();
|
|||||||
report("Generating project README.md...");
|
report("Generating project README.md...");
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${project_root} && ~/.claude/scripts/generate_module_docs.sh "project-readme" "." "${project_name}" "${tool}"`,
|
command: `cd ${project_root} && ccw tool exec generate_module_docs '{"strategy":"project-readme","sourcePath":".","projectName":"${project_name}","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
@@ -335,7 +335,7 @@ for (let tool of tool_order) {
|
|||||||
report("Generating ARCHITECTURE.md and EXAMPLES.md...");
|
report("Generating ARCHITECTURE.md and EXAMPLES.md...");
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${project_root} && ~/.claude/scripts/generate_module_docs.sh "project-architecture" "." "${project_name}" "${tool}"`,
|
command: `cd ${project_root} && ccw tool exec generate_module_docs '{"strategy":"project-architecture","sourcePath":".","projectName":"${project_name}","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
@@ -350,7 +350,7 @@ if (bash_result.stdout.includes("API_FOUND")) {
|
|||||||
report("Generating HTTP API documentation...");
|
report("Generating HTTP API documentation...");
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${project_root} && ~/.claude/scripts/generate_module_docs.sh "http-api" "." "${project_name}" "${tool}"`,
|
command: `cd ${project_root} && ccw tool exec generate_module_docs '{"strategy":"http-api","sourcePath":".","projectName":"${project_name}","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ Orchestrates context-aware documentation generation/update for changed modules u
|
|||||||
Bash({command: "pwd && basename \"$(pwd)\" && git rev-parse --show-toplevel 2>/dev/null || pwd", run_in_background: false});
|
Bash({command: "pwd && basename \"$(pwd)\" && git rev-parse --show-toplevel 2>/dev/null || pwd", run_in_background: false});
|
||||||
|
|
||||||
// Detect changed modules
|
// Detect changed modules
|
||||||
Bash({command: "~/.claude/scripts/detect_changed_modules.sh list", run_in_background: false});
|
Bash({command: "ccw tool exec detect_changed_modules '{\"format\":\"list\"}'", run_in_background: false});
|
||||||
|
|
||||||
// Cache git changes
|
// Cache git changes
|
||||||
Bash({command: "git add -A 2>/dev/null || true", run_in_background: false});
|
Bash({command: "git add -A 2>/dev/null || true", run_in_background: false});
|
||||||
@@ -123,7 +123,7 @@ for (let depth of sorted_depths.reverse()) { // N → 0
|
|||||||
return async () => {
|
return async () => {
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${module.path} && ~/.claude/scripts/generate_module_docs.sh "single" "." "${project_name}" "${tool}"`,
|
command: `cd ${module.path} && ccw tool exec generate_module_docs '{"strategy":"single","sourcePath":".","projectName":"${project_name}","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
@@ -207,21 +207,21 @@ EXECUTION:
|
|||||||
For each module above:
|
For each module above:
|
||||||
1. Try tool 1:
|
1. Try tool 1:
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/generate_module_docs.sh "single" "." "{{project_name}}" "{{tool_1}}"`,
|
command: `cd "{{module_path}}" && ccw tool exec generate_module_docs '{"strategy":"single","sourcePath":".","projectName":"{{project_name}}","tool":"{{tool_1}}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
→ Success: Report "✅ {{module_path}} docs generated with {{tool_1}}", proceed to next module
|
→ Success: Report "✅ {{module_path}} docs generated with {{tool_1}}", proceed to next module
|
||||||
→ Failure: Try tool 2
|
→ Failure: Try tool 2
|
||||||
2. Try tool 2:
|
2. Try tool 2:
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/generate_module_docs.sh "single" "." "{{project_name}}" "{{tool_2}}"`,
|
command: `cd "{{module_path}}" && ccw tool exec generate_module_docs '{"strategy":"single","sourcePath":".","projectName":"{{project_name}}","tool":"{{tool_2}}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
→ Success: Report "✅ {{module_path}} docs generated with {{tool_2}}", proceed to next module
|
→ Success: Report "✅ {{module_path}} docs generated with {{tool_2}}", proceed to next module
|
||||||
→ Failure: Try tool 3
|
→ Failure: Try tool 3
|
||||||
3. Try tool 3:
|
3. Try tool 3:
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/generate_module_docs.sh "single" "." "{{project_name}}" "{{tool_3}}"`,
|
command: `cd "{{module_path}}" && ccw tool exec generate_module_docs '{"strategy":"single","sourcePath":".","projectName":"{{project_name}}","tool":"{{tool_3}}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
→ Success: Report "✅ {{module_path}} docs generated with {{tool_3}}", proceed to next module
|
→ Success: Report "✅ {{module_path}} docs generated with {{tool_3}}", proceed to next module
|
||||||
|
|||||||
@@ -85,10 +85,10 @@ bash(jq '. + {"target_path":"{target_path}","project_root":"{project_root}","pro
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Run folder analysis
|
# 1. Run folder analysis
|
||||||
bash(~/.claude/scripts/get_modules_by_depth.sh | ~/.claude/scripts/classify-folders.sh)
|
bash(ccw tool exec get_modules_by_depth '{}' | ccw tool exec classify_folders '{}')
|
||||||
|
|
||||||
# 2. Get top-level directories (first 2 path levels)
|
# 2. Get top-level directories (first 2 path levels)
|
||||||
bash(~/.claude/scripts/get_modules_by_depth.sh | ~/.claude/scripts/classify-folders.sh | awk -F'|' '{print $1}' | sed 's|^\./||' | awk -F'/' '{if(NF>=2) print $1"/"$2; else if(NF==1) print $1}' | sort -u)
|
bash(ccw tool exec get_modules_by_depth '{}' | ccw tool exec classify_folders '{}' | awk -F'|' '{print $1}' | sed 's|^\./||' | awk -F'/' '{if(NF>=2) print $1"/"$2; else if(NF==1) print $1}' | sort -u)
|
||||||
|
|
||||||
# 3. Find existing docs (if directory exists)
|
# 3. Find existing docs (if directory exists)
|
||||||
bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${project_name} -type f -name "*.md" ! -path "*/README.md" ! -path "*/ARCHITECTURE.md" ! -path "*/EXAMPLES.md" ! -path "*/api/*" 2>/dev/null; fi)
|
bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${project_name} -type f -name "*.md" ! -path "*/README.md" ! -path "*/ARCHITECTURE.md" ! -path "*/EXAMPLES.md" ! -path "*/api/*" 2>/dev/null; fi)
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ Task(
|
|||||||
|
|
||||||
1. **Project Structure**
|
1. **Project Structure**
|
||||||
\`\`\`bash
|
\`\`\`bash
|
||||||
bash(~/.claude/scripts/get_modules_by_depth.sh)
|
bash(ccw tool exec get_modules_by_depth '{}')
|
||||||
\`\`\`
|
\`\`\`
|
||||||
|
|
||||||
2. **Core Documentation**
|
2. **Core Documentation**
|
||||||
|
|||||||
@@ -99,10 +99,10 @@ src/ (depth 1) → SINGLE-LAYER STRATEGY
|
|||||||
Bash({command: "git add -A 2>/dev/null || true", run_in_background: false});
|
Bash({command: "git add -A 2>/dev/null || true", run_in_background: false});
|
||||||
|
|
||||||
// Get module structure
|
// Get module structure
|
||||||
Bash({command: "~/.claude/scripts/get_modules_by_depth.sh list", run_in_background: false});
|
Bash({command: "ccw tool exec get_modules_by_depth '{\"format\":\"list\"}'", run_in_background: false});
|
||||||
|
|
||||||
// OR with --path
|
// OR with --path
|
||||||
Bash({command: "cd <target-path> && ~/.claude/scripts/get_modules_by_depth.sh list", run_in_background: false});
|
Bash({command: "cd <target-path> && ccw tool exec get_modules_by_depth '{\"format\":\"list\"}'", run_in_background: false});
|
||||||
```
|
```
|
||||||
|
|
||||||
**Parse output** `depth:N|path:<PATH>|...` to extract module paths and count.
|
**Parse output** `depth:N|path:<PATH>|...` to extract module paths and count.
|
||||||
@@ -185,7 +185,7 @@ for (let layer of [3, 2, 1]) {
|
|||||||
let strategy = module.depth >= 3 ? "multi-layer" : "single-layer";
|
let strategy = module.depth >= 3 ? "multi-layer" : "single-layer";
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${module.path} && ~/.claude/scripts/update_module_claude.sh "${strategy}" "." "${tool}"`,
|
command: `cd ${module.path} && ccw tool exec update_module_claude '{"strategy":"${strategy}","path":".","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
@@ -244,7 +244,7 @@ MODULES:
|
|||||||
|
|
||||||
TOOLS (try in order): {{tool_1}}, {{tool_2}}, {{tool_3}}
|
TOOLS (try in order): {{tool_1}}, {{tool_2}}, {{tool_3}}
|
||||||
|
|
||||||
EXECUTION SCRIPT: ~/.claude/scripts/update_module_claude.sh
|
EXECUTION SCRIPT: ccw tool exec update_module_claude
|
||||||
- Accepts strategy parameter: multi-layer | single-layer
|
- Accepts strategy parameter: multi-layer | single-layer
|
||||||
- Tool execution via direct CLI commands (gemini/qwen/codex)
|
- Tool execution via direct CLI commands (gemini/qwen/codex)
|
||||||
|
|
||||||
@@ -252,7 +252,7 @@ EXECUTION FLOW (for each module):
|
|||||||
1. Tool fallback loop (exit on first success):
|
1. Tool fallback loop (exit on first success):
|
||||||
for tool in {{tool_1}} {{tool_2}} {{tool_3}}; do
|
for tool in {{tool_1}} {{tool_2}} {{tool_3}}; do
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/update_module_claude.sh "{{strategy}}" "." "${tool}"`,
|
command: `cd "{{module_path}}" && ccw tool exec update_module_claude '{"strategy":"{{strategy}}","path":".","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
exit_code=$?
|
exit_code=$?
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ Orchestrates context-aware CLAUDE.md updates for changed modules using batched a
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// Detect changed modules
|
// Detect changed modules
|
||||||
Bash({command: "~/.claude/scripts/detect_changed_modules.sh list", run_in_background: false});
|
Bash({command: "ccw tool exec detect_changed_modules '{\"format\":\"list\"}'", run_in_background: false});
|
||||||
|
|
||||||
// Cache git changes
|
// Cache git changes
|
||||||
Bash({command: "git add -A 2>/dev/null || true", run_in_background: false});
|
Bash({command: "git add -A 2>/dev/null || true", run_in_background: false});
|
||||||
@@ -102,7 +102,7 @@ for (let depth of sorted_depths.reverse()) { // N → 0
|
|||||||
return async () => {
|
return async () => {
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${module.path} && ~/.claude/scripts/update_module_claude.sh "single-layer" "." "${tool}"`,
|
command: `cd ${module.path} && ccw tool exec update_module_claude '{"strategy":"single-layer","path":".","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
@@ -184,21 +184,21 @@ EXECUTION:
|
|||||||
For each module above:
|
For each module above:
|
||||||
1. Try tool 1:
|
1. Try tool 1:
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/update_module_claude.sh "single-layer" "." "{{tool_1}}"`,
|
command: `cd "{{module_path}}" && ccw tool exec update_module_claude '{"strategy":"single-layer","path":".","tool":"{{tool_1}}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
→ Success: Report "✅ {{module_path}} updated with {{tool_1}}", proceed to next module
|
→ Success: Report "✅ {{module_path}} updated with {{tool_1}}", proceed to next module
|
||||||
→ Failure: Try tool 2
|
→ Failure: Try tool 2
|
||||||
2. Try tool 2:
|
2. Try tool 2:
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/update_module_claude.sh "single-layer" "." "{{tool_2}}"`,
|
command: `cd "{{module_path}}" && ccw tool exec update_module_claude '{"strategy":"single-layer","path":".","tool":"{{tool_2}}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
→ Success: Report "✅ {{module_path}} updated with {{tool_2}}", proceed to next module
|
→ Success: Report "✅ {{module_path}} updated with {{tool_2}}", proceed to next module
|
||||||
→ Failure: Try tool 3
|
→ Failure: Try tool 3
|
||||||
3. Try tool 3:
|
3. Try tool 3:
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/update_module_claude.sh "single-layer" "." "{{tool_3}}"`,
|
command: `cd "{{module_path}}" && ccw tool exec update_module_claude '{"strategy":"single-layer","path":".","tool":"{{tool_3}}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
→ Success: Report "✅ {{module_path}} updated with {{tool_3}}", proceed to next module
|
→ Success: Report "✅ {{module_path}} updated with {{tool_3}}", proceed to next module
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ Analyze project for workflow initialization and generate .workflow/project.json.
|
|||||||
|
|
||||||
## MANDATORY FIRST STEPS
|
## MANDATORY FIRST STEPS
|
||||||
1. Execute: cat ~/.claude/workflows/cli-templates/schemas/project-json-schema.json (get schema reference)
|
1. Execute: cat ~/.claude/workflows/cli-templates/schemas/project-json-schema.json (get schema reference)
|
||||||
2. Execute: ~/.claude/scripts/get_modules_by_depth.sh (get project structure)
|
2. Execute: ccw tool exec get_modules_by_depth '{}' (get project structure)
|
||||||
|
|
||||||
## Task
|
## Task
|
||||||
Generate complete project.json with:
|
Generate complete project.json with:
|
||||||
|
|||||||
@@ -177,7 +177,7 @@ Execute **${angle}** diagnosis for bug root cause analysis. Analyze codebase fro
|
|||||||
|
|
||||||
## MANDATORY FIRST STEPS (Execute by Agent)
|
## MANDATORY FIRST STEPS (Execute by Agent)
|
||||||
**You (cli-explore-agent) MUST execute these steps in order:**
|
**You (cli-explore-agent) MUST execute these steps in order:**
|
||||||
1. Run: ~/.claude/scripts/get_modules_by_depth.sh (project structure)
|
1. Run: ccw tool exec get_modules_by_depth '{}' (project structure)
|
||||||
2. Run: rg -l "{error_keyword_from_bug}" --type ts (locate relevant files)
|
2. Run: rg -l "{error_keyword_from_bug}" --type ts (locate relevant files)
|
||||||
3. Execute: cat ~/.claude/workflows/cli-templates/schemas/diagnosis-json-schema.json (get output schema reference)
|
3. Execute: cat ~/.claude/workflows/cli-templates/schemas/diagnosis-json-schema.json (get output schema reference)
|
||||||
|
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ Execute **${angle}** exploration for task planning context. Analyze codebase fro
|
|||||||
|
|
||||||
## MANDATORY FIRST STEPS (Execute by Agent)
|
## MANDATORY FIRST STEPS (Execute by Agent)
|
||||||
**You (cli-explore-agent) MUST execute these steps in order:**
|
**You (cli-explore-agent) MUST execute these steps in order:**
|
||||||
1. Run: ~/.claude/scripts/get_modules_by_depth.sh (project structure)
|
1. Run: ccw tool exec get_modules_by_depth '{}' (project structure)
|
||||||
2. Run: rg -l "{keyword_from_task}" --type ts (locate relevant files)
|
2. Run: rg -l "{keyword_from_task}" --type ts (locate relevant files)
|
||||||
3. Execute: cat ~/.claude/workflows/cli-templates/schemas/explore-json-schema.json (get output schema reference)
|
3. Execute: cat ~/.claude/workflows/cli-templates/schemas/explore-json-schema.json (get output schema reference)
|
||||||
|
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ Execute **${angle}** exploration for task planning context. Analyze codebase fro
|
|||||||
|
|
||||||
## MANDATORY FIRST STEPS (Execute by Agent)
|
## MANDATORY FIRST STEPS (Execute by Agent)
|
||||||
**You (cli-explore-agent) MUST execute these steps in order:**
|
**You (cli-explore-agent) MUST execute these steps in order:**
|
||||||
1. Run: ~/.claude/scripts/get_modules_by_depth.sh (project structure)
|
1. Run: ccw tool exec get_modules_by_depth '{}' (project structure)
|
||||||
2. Run: rg -l "{keyword_from_task}" --type ts (locate relevant files)
|
2. Run: rg -l "{keyword_from_task}" --type ts (locate relevant files)
|
||||||
3. Execute: cat ~/.claude/workflows/cli-templates/schemas/explore-json-schema.json (get output schema reference)
|
3. Execute: cat ~/.claude/workflows/cli-templates/schemas/explore-json-schema.json (get output schema reference)
|
||||||
|
|
||||||
|
|||||||
@@ -320,7 +320,7 @@ Read({base_path}/prototypes/{target}-style-{style_id}-layout-{layout_id}.html)
|
|||||||
|
|
||||||
### Step 1: Run Preview Generation Script
|
### Step 1: Run Preview Generation Script
|
||||||
```bash
|
```bash
|
||||||
bash(~/.claude/scripts/ui-generate-preview.sh "{base_path}/prototypes")
|
bash(ccw tool exec ui_generate_preview '{"prototypesDir":"{base_path}/prototypes"}')
|
||||||
```
|
```
|
||||||
|
|
||||||
**Script generates**:
|
**Script generates**:
|
||||||
@@ -432,7 +432,7 @@ bash(test -f {base_path}/prototypes/compare.html && echo "exists")
|
|||||||
bash(mkdir -p {base_path}/prototypes)
|
bash(mkdir -p {base_path}/prototypes)
|
||||||
|
|
||||||
# Run preview script
|
# Run preview script
|
||||||
bash(~/.claude/scripts/ui-generate-preview.sh "{base_path}/prototypes")
|
bash(ccw tool exec ui_generate_preview '{"prototypesDir":"{base_path}/prototypes"}')
|
||||||
```
|
```
|
||||||
|
|
||||||
## Output Structure
|
## Output Structure
|
||||||
@@ -467,7 +467,7 @@ ERROR: Agent assembly failed
|
|||||||
→ Check inputs exist, validate JSON structure
|
→ Check inputs exist, validate JSON structure
|
||||||
|
|
||||||
ERROR: Script permission denied
|
ERROR: Script permission denied
|
||||||
→ chmod +x ~/.claude/scripts/ui-generate-preview.sh
|
→ Verify ccw tool is available: ccw tool list
|
||||||
```
|
```
|
||||||
|
|
||||||
### Recovery Strategies
|
### Recovery Strategies
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ echo " Output: $base_path"
|
|||||||
|
|
||||||
# 3. Discover files using script
|
# 3. Discover files using script
|
||||||
discovery_file="${intermediates_dir}/discovered-files.json"
|
discovery_file="${intermediates_dir}/discovered-files.json"
|
||||||
~/.claude/scripts/discover-design-files.sh "$source" "$discovery_file"
|
ccw tool exec discover_design_files '{"sourceDir":"'"$source"'","outputPath":"'"$discovery_file"'"}'
|
||||||
|
|
||||||
echo " Output: $discovery_file"
|
echo " Output: $discovery_file"
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# ⚠️ DEPRECATED: This script is deprecated.
|
||||||
|
# Please use: ccw tool exec classify_folders '{"path":".","outputFormat":"json"}'
|
||||||
|
# This file will be removed in a future version.
|
||||||
|
|
||||||
# Classify folders by type for documentation generation
|
# Classify folders by type for documentation generation
|
||||||
# Usage: get_modules_by_depth.sh | classify-folders.sh
|
# Usage: get_modules_by_depth.sh | classify-folders.sh
|
||||||
# Output: folder_path|folder_type|code:N|dirs:N
|
# Output: folder_path|folder_type|code:N|dirs:N
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# ⚠️ DEPRECATED: This script is deprecated.
|
||||||
|
# Please use: ccw tool exec convert_tokens_to_css '{"inputPath":"design-tokens.json","outputPath":"tokens.css"}'
|
||||||
|
# This file will be removed in a future version.
|
||||||
|
|
||||||
# Convert design-tokens.json to tokens.css with Google Fonts import and global font rules
|
# Convert design-tokens.json to tokens.css with Google Fonts import and global font rules
|
||||||
# Usage: cat design-tokens.json | ./convert_tokens_to_css.sh > tokens.css
|
# Usage: cat design-tokens.json | ./convert_tokens_to_css.sh > tokens.css
|
||||||
# Or: ./convert_tokens_to_css.sh < design-tokens.json > tokens.css
|
# Or: ./convert_tokens_to_css.sh < design-tokens.json > tokens.css
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# ⚠️ DEPRECATED: This script is deprecated.
|
||||||
|
# Please use: ccw tool exec detect_changed_modules '{"baseBranch":"main","format":"list"}'
|
||||||
|
# This file will be removed in a future version.
|
||||||
|
|
||||||
# Detect modules affected by git changes or recent modifications
|
# Detect modules affected by git changes or recent modifications
|
||||||
# Usage: detect_changed_modules.sh [format]
|
# Usage: detect_changed_modules.sh [format]
|
||||||
# format: list|grouped|paths (default: paths)
|
# format: list|grouped|paths (default: paths)
|
||||||
@@ -154,4 +158,4 @@ detect_changed_modules() {
|
|||||||
# Execute function if script is run directly
|
# Execute function if script is run directly
|
||||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||||
detect_changed_modules "$@"
|
detect_changed_modules "$@"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
# ⚠️ DEPRECATED: This script is deprecated.
|
||||||
|
# Please use: ccw tool exec discover_design_files '{"sourceDir":".","outputPath":"output.json"}'
|
||||||
|
# This file will be removed in a future version.
|
||||||
|
|
||||||
# discover-design-files.sh - Discover design-related files and output JSON
|
# discover-design-files.sh - Discover design-related files and output JSON
|
||||||
# Usage: discover-design-files.sh <source_dir> <output_json>
|
# Usage: discover-design-files.sh <source_dir> <output_json>
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# ⚠️ DEPRECATED: This script is deprecated.
|
||||||
|
# Please use: ccw tool exec generate_module_docs '{"path":".","strategy":"single-layer","tool":"gemini"}'
|
||||||
|
# This file will be removed in a future version.
|
||||||
|
|
||||||
# Generate documentation for modules and projects with multiple strategies
|
# Generate documentation for modules and projects with multiple strategies
|
||||||
# Usage: generate_module_docs.sh <strategy> <source_path> <project_name> [tool] [model]
|
# Usage: generate_module_docs.sh <strategy> <source_path> <project_name> [tool] [model]
|
||||||
# strategy: full|single|project-readme|project-architecture|http-api
|
# strategy: full|single|project-readme|project-architecture|http-api
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# ⚠️ DEPRECATED: This script is deprecated.
|
||||||
|
# Please use: ccw tool exec get_modules_by_depth '{"format":"list","path":"."}' OR ccw tool exec get_modules_by_depth '{}'
|
||||||
|
# This file will be removed in a future version.
|
||||||
|
|
||||||
# Get modules organized by directory depth (deepest first)
|
# Get modules organized by directory depth (deepest first)
|
||||||
# Usage: get_modules_by_depth.sh [format]
|
# Usage: get_modules_by_depth.sh [format]
|
||||||
# format: list|grouped|json (default: list)
|
# format: list|grouped|json (default: list)
|
||||||
@@ -163,4 +167,4 @@ get_modules_by_depth() {
|
|||||||
# Execute function if script is run directly
|
# Execute function if script is run directly
|
||||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||||
get_modules_by_depth "$@"
|
get_modules_by_depth "$@"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# ⚠️ DEPRECATED: This script is deprecated.
|
||||||
|
# Please use: ccw tool exec ui_generate_preview '{"designPath":"design-run-1","outputDir":"preview"}'
|
||||||
|
# This file will be removed in a future version.
|
||||||
|
|
||||||
#
|
#
|
||||||
# UI Generate Preview v2.0 - Template-Based Preview Generation
|
# UI Generate Preview v2.0 - Template-Based Preview Generation
|
||||||
# Purpose: Generate compare.html and index.html using template substitution
|
# Purpose: Generate compare.html and index.html using template substitution
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# ⚠️ DEPRECATED: This script is deprecated.
|
||||||
|
# Please use: ccw tool exec ui_instantiate_prototypes '{"designPath":"design-run-1","outputDir":"output"}'
|
||||||
|
# This file will be removed in a future version.
|
||||||
|
|
||||||
|
|
||||||
# UI Prototype Instantiation Script with Preview Generation (v3.0 - Auto-detect)
|
# UI Prototype Instantiation Script with Preview Generation (v3.0 - Auto-detect)
|
||||||
# Purpose: Generate S × L × P final prototypes from templates + interactive preview files
|
# Purpose: Generate S × L × P final prototypes from templates + interactive preview files
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# ⚠️ DEPRECATED: This script is deprecated.
|
||||||
|
# Please use: ccw tool exec update_module_claude '{"strategy":"single-layer","path":".","tool":"gemini"}'
|
||||||
|
# This file will be removed in a future version.
|
||||||
|
|
||||||
# Update CLAUDE.md for modules with two strategies
|
# Update CLAUDE.md for modules with two strategies
|
||||||
# Usage: update_module_claude.sh <strategy> <module_path> [tool] [model]
|
# Usage: update_module_claude.sh <strategy> <module_path> [tool] [model]
|
||||||
# strategy: single-layer|multi-layer
|
# strategy: single-layer|multi-layer
|
||||||
|
|||||||
@@ -509,24 +509,13 @@
|
|||||||
"name": "start",
|
"name": "start",
|
||||||
"command": "/workflow:session:start",
|
"command": "/workflow:session:start",
|
||||||
"description": "Discover existing sessions or start new workflow session with intelligent session management and conflict detection",
|
"description": "Discover existing sessions or start new workflow session with intelligent session management and conflict detection",
|
||||||
"arguments": "[--auto|--new] [optional: task description for new session]",
|
"arguments": "[--type <workflow|review|tdd|test|docs>] [--auto|--new] [optional: task description for new session]",
|
||||||
"category": "workflow",
|
"category": "workflow",
|
||||||
"subcategory": "session",
|
"subcategory": "session",
|
||||||
"usage_scenario": "general",
|
"usage_scenario": "general",
|
||||||
"difficulty": "Intermediate",
|
"difficulty": "Intermediate",
|
||||||
"file_path": "workflow/session/start.md"
|
"file_path": "workflow/session/start.md"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "workflow:status",
|
|
||||||
"command": "/workflow:status",
|
|
||||||
"description": "Generate on-demand views for project overview and workflow tasks with optional task-id filtering for detailed view",
|
|
||||||
"arguments": "[optional: --project|task-id|--validate|--dashboard]",
|
|
||||||
"category": "workflow",
|
|
||||||
"subcategory": null,
|
|
||||||
"usage_scenario": "session-management",
|
|
||||||
"difficulty": "Beginner",
|
|
||||||
"file_path": "workflow/status.md"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "tdd-plan",
|
"name": "tdd-plan",
|
||||||
"command": "/workflow:tdd-plan",
|
"command": "/workflow:tdd-plan",
|
||||||
|
|||||||
@@ -358,17 +358,6 @@
|
|||||||
"difficulty": "Intermediate",
|
"difficulty": "Intermediate",
|
||||||
"file_path": "workflow/review.md"
|
"file_path": "workflow/review.md"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "workflow:status",
|
|
||||||
"command": "/workflow:status",
|
|
||||||
"description": "Generate on-demand views for project overview and workflow tasks with optional task-id filtering for detailed view",
|
|
||||||
"arguments": "[optional: --project|task-id|--validate|--dashboard]",
|
|
||||||
"category": "workflow",
|
|
||||||
"subcategory": null,
|
|
||||||
"usage_scenario": "session-management",
|
|
||||||
"difficulty": "Beginner",
|
|
||||||
"file_path": "workflow/status.md"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "tdd-plan",
|
"name": "tdd-plan",
|
||||||
"command": "/workflow:tdd-plan",
|
"command": "/workflow:tdd-plan",
|
||||||
@@ -597,7 +586,7 @@
|
|||||||
"name": "start",
|
"name": "start",
|
||||||
"command": "/workflow:session:start",
|
"command": "/workflow:session:start",
|
||||||
"description": "Discover existing sessions or start new workflow session with intelligent session management and conflict detection",
|
"description": "Discover existing sessions or start new workflow session with intelligent session management and conflict detection",
|
||||||
"arguments": "[--auto|--new] [optional: task description for new session]",
|
"arguments": "[--type <workflow|review|tdd|test|docs>] [--auto|--new] [optional: task description for new session]",
|
||||||
"category": "workflow",
|
"category": "workflow",
|
||||||
"subcategory": "session",
|
"subcategory": "session",
|
||||||
"usage_scenario": "general",
|
"usage_scenario": "general",
|
||||||
|
|||||||
@@ -224,7 +224,7 @@
|
|||||||
"name": "start",
|
"name": "start",
|
||||||
"command": "/workflow:session:start",
|
"command": "/workflow:session:start",
|
||||||
"description": "Discover existing sessions or start new workflow session with intelligent session management and conflict detection",
|
"description": "Discover existing sessions or start new workflow session with intelligent session management and conflict detection",
|
||||||
"arguments": "[--auto|--new] [optional: task description for new session]",
|
"arguments": "[--type <workflow|review|tdd|test|docs>] [--auto|--new] [optional: task description for new session]",
|
||||||
"category": "workflow",
|
"category": "workflow",
|
||||||
"subcategory": "session",
|
"subcategory": "session",
|
||||||
"usage_scenario": "general",
|
"usage_scenario": "general",
|
||||||
@@ -713,17 +713,6 @@
|
|||||||
"usage_scenario": "session-management",
|
"usage_scenario": "session-management",
|
||||||
"difficulty": "Intermediate",
|
"difficulty": "Intermediate",
|
||||||
"file_path": "workflow/session/resume.md"
|
"file_path": "workflow/session/resume.md"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "workflow:status",
|
|
||||||
"command": "/workflow:status",
|
|
||||||
"description": "Generate on-demand views for project overview and workflow tasks with optional task-id filtering for detailed view",
|
|
||||||
"arguments": "[optional: --project|task-id|--validate|--dashboard]",
|
|
||||||
"category": "workflow",
|
|
||||||
"subcategory": null,
|
|
||||||
"usage_scenario": "session-management",
|
|
||||||
"difficulty": "Beginner",
|
|
||||||
"file_path": "workflow/status.md"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"testing": [
|
"testing": [
|
||||||
|
|||||||
@@ -43,22 +43,11 @@
|
|||||||
"difficulty": "Intermediate",
|
"difficulty": "Intermediate",
|
||||||
"file_path": "workflow/execute.md"
|
"file_path": "workflow/execute.md"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "workflow:status",
|
|
||||||
"command": "/workflow:status",
|
|
||||||
"description": "Generate on-demand views for project overview and workflow tasks with optional task-id filtering for detailed view",
|
|
||||||
"arguments": "[optional: --project|task-id|--validate|--dashboard]",
|
|
||||||
"category": "workflow",
|
|
||||||
"subcategory": null,
|
|
||||||
"usage_scenario": "session-management",
|
|
||||||
"difficulty": "Beginner",
|
|
||||||
"file_path": "workflow/status.md"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "start",
|
"name": "start",
|
||||||
"command": "/workflow:session:start",
|
"command": "/workflow:session:start",
|
||||||
"description": "Discover existing sessions or start new workflow session with intelligent session management and conflict detection",
|
"description": "Discover existing sessions or start new workflow session with intelligent session management and conflict detection",
|
||||||
"arguments": "[--auto|--new] [optional: task description for new session]",
|
"arguments": "[--type <workflow|review|tdd|test|docs>] [--auto|--new] [optional: task description for new session]",
|
||||||
"category": "workflow",
|
"category": "workflow",
|
||||||
"subcategory": "session",
|
"subcategory": "session",
|
||||||
"usage_scenario": "general",
|
"usage_scenario": "general",
|
||||||
|
|||||||
@@ -16,11 +16,9 @@ description: |
|
|||||||
color: yellow
|
color: yellow
|
||||||
---
|
---
|
||||||
|
|
||||||
You are a pure execution agent specialized in creating actionable implementation plans. You receive requirements and control flags from the command layer and execute planning tasks without complex decision-making logic.
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
**Agent Role**: Transform user requirements and brainstorming artifacts into structured, executable implementation plans with quantified deliverables and measurable acceptance criteria.
|
**Agent Role**: Pure execution agent that transforms user requirements and brainstorming artifacts into structured, executable implementation plans with quantified deliverables and measurable acceptance criteria. Receives requirements and control flags from the command layer and executes planning tasks without complex decision-making logic.
|
||||||
|
|
||||||
**Core Capabilities**:
|
**Core Capabilities**:
|
||||||
- Load and synthesize context from multiple sources (session metadata, context packages, brainstorming artifacts)
|
- Load and synthesize context from multiple sources (session metadata, context packages, brainstorming artifacts)
|
||||||
@@ -33,7 +31,7 @@ You are a pure execution agent specialized in creating actionable implementation
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 1. Execution Process
|
## 1. Input & Execution
|
||||||
|
|
||||||
### 1.1 Input Processing
|
### 1.1 Input Processing
|
||||||
|
|
||||||
@@ -50,7 +48,7 @@ You are a pure execution agent specialized in creating actionable implementation
|
|||||||
- **Control flags**: DEEP_ANALYSIS_REQUIRED, etc.
|
- **Control flags**: DEEP_ANALYSIS_REQUIRED, etc.
|
||||||
- **Task requirements**: Direct task description
|
- **Task requirements**: Direct task description
|
||||||
|
|
||||||
### 1.2 Two-Phase Execution Flow
|
### 1.2 Execution Flow
|
||||||
|
|
||||||
#### Phase 1: Context Loading & Assembly
|
#### Phase 1: Context Loading & Assembly
|
||||||
|
|
||||||
@@ -88,6 +86,27 @@ You are a pure execution agent specialized in creating actionable implementation
|
|||||||
6. Assess task complexity (simple/medium/complex)
|
6. Assess task complexity (simple/medium/complex)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**MCP Integration** (when `mcp_capabilities` available):
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Exa Code Context (mcp_capabilities.exa_code = true)
|
||||||
|
mcp__exa__get_code_context_exa(
|
||||||
|
query="TypeScript OAuth2 JWT authentication patterns",
|
||||||
|
tokensNum="dynamic"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Integration in flow_control.pre_analysis
|
||||||
|
{
|
||||||
|
"step": "local_codebase_exploration",
|
||||||
|
"action": "Explore codebase structure",
|
||||||
|
"commands": [
|
||||||
|
"bash(rg '^(function|class|interface).*[task_keyword]' --type ts -n --max-count 15)",
|
||||||
|
"bash(find . -name '*[task_keyword]*' -type f | grep -v node_modules | head -10)"
|
||||||
|
],
|
||||||
|
"output_to": "codebase_structure"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
**Context Package Structure** (fields defined by context-search-agent):
|
**Context Package Structure** (fields defined by context-search-agent):
|
||||||
|
|
||||||
**Always Present**:
|
**Always Present**:
|
||||||
@@ -169,30 +188,6 @@ if (contextPackage.brainstorm_artifacts?.role_analyses?.length > 0) {
|
|||||||
5. Update session state for execution readiness
|
5. Update session state for execution readiness
|
||||||
```
|
```
|
||||||
|
|
||||||
### 1.3 MCP Integration Guidelines
|
|
||||||
|
|
||||||
**Exa Code Context** (`mcp_capabilities.exa_code = true`):
|
|
||||||
```javascript
|
|
||||||
// Get best practices and examples
|
|
||||||
mcp__exa__get_code_context_exa(
|
|
||||||
query="TypeScript OAuth2 JWT authentication patterns",
|
|
||||||
tokensNum="dynamic"
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
**Integration in flow_control.pre_analysis**:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"step": "local_codebase_exploration",
|
|
||||||
"action": "Explore codebase structure",
|
|
||||||
"commands": [
|
|
||||||
"bash(rg '^(function|class|interface).*[task_keyword]' --type ts -n --max-count 15)",
|
|
||||||
"bash(find . -name '*[task_keyword]*' -type f | grep -v node_modules | head -10)"
|
|
||||||
],
|
|
||||||
"output_to": "codebase_structure"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. Output Specifications
|
## 2. Output Specifications
|
||||||
@@ -213,7 +208,11 @@ Generate individual `.task/IMPL-*.json` files with the following structure:
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Field Descriptions**:
|
**Field Descriptions**:
|
||||||
- `id`: Task identifier (format: `IMPL-N`)
|
- `id`: Task identifier
|
||||||
|
- Single module format: `IMPL-N` (e.g., IMPL-001, IMPL-002)
|
||||||
|
- Multi-module format: `IMPL-{prefix}{seq}` (e.g., IMPL-A1, IMPL-B1, IMPL-C1)
|
||||||
|
- Prefix: A, B, C... (assigned by module detection order)
|
||||||
|
- Sequence: 1, 2, 3... (per-module increment)
|
||||||
- `title`: Descriptive task name summarizing the work
|
- `title`: Descriptive task name summarizing the work
|
||||||
- `status`: Task state - `pending` (not started), `active` (in progress), `completed` (done), `blocked` (waiting on dependencies)
|
- `status`: Task state - `pending` (not started), `active` (in progress), `completed` (done), `blocked` (waiting on dependencies)
|
||||||
- `context_package_path`: Path to smart context package containing project structure, dependencies, and brainstorming artifacts catalog
|
- `context_package_path`: Path to smart context package containing project structure, dependencies, and brainstorming artifacts catalog
|
||||||
@@ -225,7 +224,8 @@ Generate individual `.task/IMPL-*.json` files with the following structure:
|
|||||||
"meta": {
|
"meta": {
|
||||||
"type": "feature|bugfix|refactor|test-gen|test-fix|docs",
|
"type": "feature|bugfix|refactor|test-gen|test-fix|docs",
|
||||||
"agent": "@code-developer|@action-planning-agent|@test-fix-agent|@universal-executor",
|
"agent": "@code-developer|@action-planning-agent|@test-fix-agent|@universal-executor",
|
||||||
"execution_group": "parallel-abc123|null"
|
"execution_group": "parallel-abc123|null",
|
||||||
|
"module": "frontend|backend|shared|null"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -234,6 +234,7 @@ Generate individual `.task/IMPL-*.json` files with the following structure:
|
|||||||
- `type`: Task category - `feature` (new functionality), `bugfix` (fix defects), `refactor` (restructure code), `test-gen` (generate tests), `test-fix` (fix failing tests), `docs` (documentation)
|
- `type`: Task category - `feature` (new functionality), `bugfix` (fix defects), `refactor` (restructure code), `test-gen` (generate tests), `test-fix` (fix failing tests), `docs` (documentation)
|
||||||
- `agent`: Assigned agent for execution
|
- `agent`: Assigned agent for execution
|
||||||
- `execution_group`: Parallelization group ID (tasks with same ID can run concurrently) or `null` for sequential tasks
|
- `execution_group`: Parallelization group ID (tasks with same ID can run concurrently) or `null` for sequential tasks
|
||||||
|
- `module`: Module identifier for multi-module projects (e.g., `frontend`, `backend`, `shared`) or `null` for single-module
|
||||||
|
|
||||||
**Test Task Extensions** (for type="test-gen" or type="test-fix"):
|
**Test Task Extensions** (for type="test-gen" or type="test-fix"):
|
||||||
|
|
||||||
@@ -391,7 +392,7 @@ Generate individual `.task/IMPL-*.json` files with the following structure:
|
|||||||
// Pattern: Project structure analysis
|
// Pattern: Project structure analysis
|
||||||
{
|
{
|
||||||
"step": "analyze_project_architecture",
|
"step": "analyze_project_architecture",
|
||||||
"commands": ["bash(~/.claude/scripts/get_modules_by_depth.sh)"],
|
"commands": ["bash(ccw tool exec get_modules_by_depth '{}')"],
|
||||||
"output_to": "project_architecture"
|
"output_to": "project_architecture"
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -604,10 +605,42 @@ Agent determines CLI tool usage per-step based on user semantics and task nature
|
|||||||
- Analysis results (technical approach, architecture decisions)
|
- Analysis results (technical approach, architecture decisions)
|
||||||
- Brainstorming artifacts (role analyses, guidance specifications)
|
- Brainstorming artifacts (role analyses, guidance specifications)
|
||||||
|
|
||||||
|
**Multi-Module Format** (when modules detected):
|
||||||
|
|
||||||
|
When multiple modules are detected (frontend/backend, etc.), organize IMPL_PLAN.md by module:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Implementation Plan
|
||||||
|
|
||||||
|
## Module A: Frontend (N tasks)
|
||||||
|
### IMPL-A1: [Task Title]
|
||||||
|
[Task details...]
|
||||||
|
|
||||||
|
### IMPL-A2: [Task Title]
|
||||||
|
[Task details...]
|
||||||
|
|
||||||
|
## Module B: Backend (N tasks)
|
||||||
|
### IMPL-B1: [Task Title]
|
||||||
|
[Task details...]
|
||||||
|
|
||||||
|
### IMPL-B2: [Task Title]
|
||||||
|
[Task details...]
|
||||||
|
|
||||||
|
## Cross-Module Dependencies
|
||||||
|
- IMPL-A1 → IMPL-B1 (Frontend depends on Backend API)
|
||||||
|
- IMPL-A2 → IMPL-B2 (UI state depends on Backend service)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Cross-Module Dependency Notation**:
|
||||||
|
- During parallel planning, use `CROSS::{module}::{pattern}` format
|
||||||
|
- Example: `depends_on: ["CROSS::B::api-endpoint"]`
|
||||||
|
- Integration phase resolves to actual task IDs: `CROSS::B::api → IMPL-B1`
|
||||||
|
|
||||||
### 2.3 TODO_LIST.md Structure
|
### 2.3 TODO_LIST.md Structure
|
||||||
|
|
||||||
Generate at `.workflow/active/{session_id}/TODO_LIST.md`:
|
Generate at `.workflow/active/{session_id}/TODO_LIST.md`:
|
||||||
|
|
||||||
|
**Single Module Format**:
|
||||||
```markdown
|
```markdown
|
||||||
# Tasks: {Session Topic}
|
# Tasks: {Session Topic}
|
||||||
|
|
||||||
@@ -621,30 +654,54 @@ Generate at `.workflow/active/{session_id}/TODO_LIST.md`:
|
|||||||
- `- [x]` = Completed task
|
- `- [x]` = Completed task
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Multi-Module Format** (hierarchical by module):
|
||||||
|
```markdown
|
||||||
|
# Tasks: {Session Topic}
|
||||||
|
|
||||||
|
## Module A (Frontend)
|
||||||
|
- [ ] **IMPL-A1**: [Task Title] → [📋](./.task/IMPL-A1.json)
|
||||||
|
- [ ] **IMPL-A2**: [Task Title] → [📋](./.task/IMPL-A2.json)
|
||||||
|
|
||||||
|
## Module B (Backend)
|
||||||
|
- [ ] **IMPL-B1**: [Task Title] → [📋](./.task/IMPL-B1.json)
|
||||||
|
- [ ] **IMPL-B2**: [Task Title] → [📋](./.task/IMPL-B2.json)
|
||||||
|
|
||||||
|
## Cross-Module Dependencies
|
||||||
|
- IMPL-A1 → IMPL-B1 (Frontend depends on Backend API)
|
||||||
|
|
||||||
|
## Status Legend
|
||||||
|
- `- [ ]` = Pending task
|
||||||
|
- `- [x]` = Completed task
|
||||||
|
```
|
||||||
|
|
||||||
**Linking Rules**:
|
**Linking Rules**:
|
||||||
- Todo items → task JSON: `[📋](./.task/IMPL-XXX.json)`
|
- Todo items → task JSON: `[📋](./.task/IMPL-XXX.json)`
|
||||||
- Completed tasks → summaries: `[✅](./.summaries/IMPL-XXX-summary.md)`
|
- Completed tasks → summaries: `[✅](./.summaries/IMPL-XXX-summary.md)`
|
||||||
- Consistent ID schemes: IMPL-XXX
|
- Consistent ID schemes: `IMPL-N` (single) or `IMPL-{prefix}{seq}` (multi-module)
|
||||||
|
|
||||||
### 2.4 Complexity-Based Structure Selection
|
### 2.4 Complexity & Structure Selection
|
||||||
|
|
||||||
Use `analysis_results.complexity` or task count to determine structure:
|
Use `analysis_results.complexity` or task count to determine structure:
|
||||||
|
|
||||||
**Simple Tasks** (≤5 tasks):
|
**Single Module Mode**:
|
||||||
- Flat structure: IMPL_PLAN.md + TODO_LIST.md + task JSONs
|
- **Simple Tasks** (≤5 tasks): Flat structure
|
||||||
- All tasks at same level
|
- **Medium Tasks** (6-12 tasks): Flat structure
|
||||||
|
- **Complex Tasks** (>12 tasks): Re-scope required (maximum 12 tasks hard limit)
|
||||||
|
|
||||||
**Medium Tasks** (6-12 tasks):
|
**Multi-Module Mode** (N+1 parallel planning):
|
||||||
- Flat structure: IMPL_PLAN.md + TODO_LIST.md + task JSONs
|
- **Per-module limit**: ≤9 tasks per module
|
||||||
- All tasks at same level
|
- **Total limit**: Sum of all module tasks ≤27 (3 modules × 9 tasks)
|
||||||
|
- **Task ID format**: `IMPL-{prefix}{seq}` (e.g., IMPL-A1, IMPL-B1)
|
||||||
|
- **Structure**: Hierarchical by module in IMPL_PLAN.md and TODO_LIST.md
|
||||||
|
|
||||||
**Complex Tasks** (>12 tasks):
|
**Multi-Module Detection Triggers**:
|
||||||
- **Re-scope required**: Maximum 12 tasks hard limit
|
- Explicit frontend/backend separation (`src/frontend`, `src/backend`)
|
||||||
- If analysis_results contains >12 tasks, consolidate or request re-scoping
|
- Monorepo structure (`packages/*`, `apps/*`)
|
||||||
|
- Context-package dependency clustering (2+ distinct module groups)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 3. Quality & Standards
|
## 3. Quality Standards
|
||||||
|
|
||||||
### 3.1 Quantification Requirements (MANDATORY)
|
### 3.1 Quantification Requirements (MANDATORY)
|
||||||
|
|
||||||
@@ -670,47 +727,46 @@ Use `analysis_results.complexity` or task count to determine structure:
|
|||||||
- [ ] Each implementation step has its own acceptance criteria
|
- [ ] Each implementation step has its own acceptance criteria
|
||||||
|
|
||||||
**Examples**:
|
**Examples**:
|
||||||
- ✅ GOOD: `"Implement 5 commands: [cmd1, cmd2, cmd3, cmd4, cmd5]"`
|
- GOOD: `"Implement 5 commands: [cmd1, cmd2, cmd3, cmd4, cmd5]"`
|
||||||
- ❌ BAD: `"Implement new commands"`
|
- BAD: `"Implement new commands"`
|
||||||
- ✅ GOOD: `"5 files created: verify by ls .claude/commands/*.md | wc -l = 5"`
|
- GOOD: `"5 files created: verify by ls .claude/commands/*.md | wc -l = 5"`
|
||||||
- ❌ BAD: `"All commands implemented successfully"`
|
- BAD: `"All commands implemented successfully"`
|
||||||
|
|
||||||
### 3.2 Planning Principles
|
### 3.2 Planning & Organization Standards
|
||||||
|
|
||||||
|
**Planning Principles**:
|
||||||
- Each stage produces working, testable code
|
- Each stage produces working, testable code
|
||||||
- Clear success criteria for each deliverable
|
- Clear success criteria for each deliverable
|
||||||
- Dependencies clearly identified between stages
|
- Dependencies clearly identified between stages
|
||||||
- Incremental progress over big bangs
|
- Incremental progress over big bangs
|
||||||
|
|
||||||
### 3.3 File Organization
|
**File Organization**:
|
||||||
|
|
||||||
- Session naming: `WFS-[topic-slug]`
|
- Session naming: `WFS-[topic-slug]`
|
||||||
- Task IDs: IMPL-XXX (flat structure only)
|
- Task IDs:
|
||||||
- Directory structure: flat task organization
|
- Single module: `IMPL-N` (e.g., IMPL-001, IMPL-002)
|
||||||
|
- Multi-module: `IMPL-{prefix}{seq}` (e.g., IMPL-A1, IMPL-B1)
|
||||||
### 3.4 Document Standards
|
- Directory structure: flat task organization (all tasks in `.task/`)
|
||||||
|
|
||||||
|
**Document Standards**:
|
||||||
- Proper linking between documents
|
- Proper linking between documents
|
||||||
- Consistent navigation and references
|
- Consistent navigation and references
|
||||||
|
|
||||||
---
|
### 3.3 Guidelines Checklist
|
||||||
|
|
||||||
## 4. Key Reminders
|
|
||||||
|
|
||||||
**ALWAYS:**
|
**ALWAYS:**
|
||||||
- **Apply Quantification Requirements**: All requirements, acceptance criteria, and modification points MUST include explicit counts and enumerations
|
- Apply Quantification Requirements to all requirements, acceptance criteria, and modification points
|
||||||
- **Load IMPL_PLAN template**: Read(~/.claude/workflows/cli-templates/prompts/workflow/impl-plan-template.txt) before generating IMPL_PLAN.md
|
- Load IMPL_PLAN template: `Read(~/.claude/workflows/cli-templates/prompts/workflow/impl-plan-template.txt)` before generating IMPL_PLAN.md
|
||||||
- **Use provided context package**: Extract all information from structured context
|
- Use provided context package: Extract all information from structured context
|
||||||
- **Respect memory-first rule**: Use provided content (already loaded from memory/file)
|
- Respect memory-first rule: Use provided content (already loaded from memory/file)
|
||||||
- **Follow 6-field schema**: All task JSONs must have id, title, status, context_package_path, meta, context, flow_control
|
- Follow 6-field schema: All task JSONs must have id, title, status, context_package_path, meta, context, flow_control
|
||||||
- **Map artifacts**: Use artifacts_inventory to populate task.context.artifacts array
|
- Map artifacts: Use artifacts_inventory to populate task.context.artifacts array
|
||||||
- **Add MCP integration**: Include MCP tool steps in flow_control.pre_analysis when capabilities available
|
- Add MCP integration: Include MCP tool steps in flow_control.pre_analysis when capabilities available
|
||||||
- **Validate task count**: Maximum 12 tasks hard limit, request re-scope if exceeded
|
- Validate task count: Maximum 12 tasks hard limit, request re-scope if exceeded
|
||||||
- **Use session paths**: Construct all paths using provided session_id
|
- Use session paths: Construct all paths using provided session_id
|
||||||
- **Link documents properly**: Use correct linking format (📋 for JSON, ✅ for summaries)
|
- Link documents properly: Use correct linking format (📋 for JSON, ✅ for summaries)
|
||||||
- **Run validation checklist**: Verify all quantification requirements before finalizing task JSONs
|
- Run validation checklist: Verify all quantification requirements before finalizing task JSONs
|
||||||
- **Apply 举一反三 principle**: Adapt pre-analysis patterns to task-specific needs dynamically
|
- Apply 举一反三 principle: Adapt pre-analysis patterns to task-specific needs dynamically
|
||||||
- **Follow template validation**: Complete IMPL_PLAN.md template validation checklist before finalization
|
- Follow template validation: Complete IMPL_PLAN.md template validation checklist before finalization
|
||||||
|
|
||||||
**NEVER:**
|
**NEVER:**
|
||||||
- Load files directly (use provided context package instead)
|
- Load files directly (use provided context package instead)
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ Score = 0
|
|||||||
|
|
||||||
**1. Project Structure**:
|
**1. Project Structure**:
|
||||||
```bash
|
```bash
|
||||||
~/.claude/scripts/get_modules_by_depth.sh
|
ccw tool exec get_modules_by_depth '{}'
|
||||||
```
|
```
|
||||||
|
|
||||||
**2. Content Search**:
|
**2. Content Search**:
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ Phase 4: Output Generation
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Project structure
|
# Project structure
|
||||||
~/.claude/scripts/get_modules_by_depth.sh
|
ccw tool exec get_modules_by_depth '{}'
|
||||||
|
|
||||||
# Pattern discovery (adapt based on language)
|
# Pattern discovery (adapt based on language)
|
||||||
rg "^export (class|interface|function) " --type ts -n
|
rg "^export (class|interface|function) " --type ts -n
|
||||||
|
|||||||
@@ -119,17 +119,6 @@ This agent processes **simplified inline [FLOW_CONTROL]** format from brainstorm
|
|||||||
- No dependency management
|
- No dependency management
|
||||||
- Used for temporary context preparation
|
- Used for temporary context preparation
|
||||||
|
|
||||||
### NOT Handled by This Agent
|
|
||||||
|
|
||||||
**JSON format** (used by code-developer, test-fix-agent):
|
|
||||||
```json
|
|
||||||
"flow_control": {
|
|
||||||
"pre_analysis": [...],
|
|
||||||
"implementation_approach": [...]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
This complete JSON format is stored in `.task/IMPL-*.json` files and handled by implementation agents, not conceptual-planning-agent.
|
|
||||||
|
|
||||||
### Role-Specific Analysis Dimensions
|
### Role-Specific Analysis Dimensions
|
||||||
|
|
||||||
@@ -146,14 +135,14 @@ This complete JSON format is stored in `.task/IMPL-*.json` files and handled by
|
|||||||
|
|
||||||
### Output Integration
|
### Output Integration
|
||||||
|
|
||||||
**Gemini Analysis Integration**: Pattern-based analysis results are integrated into the single role's output:
|
**Gemini Analysis Integration**: Pattern-based analysis results are integrated into role output documents:
|
||||||
- Enhanced `analysis.md` with codebase insights and architectural patterns
|
- Enhanced analysis documents with codebase insights and architectural patterns
|
||||||
- Role-specific technical recommendations based on existing conventions
|
- Role-specific technical recommendations based on existing conventions
|
||||||
- Pattern-based best practices from actual code examination
|
- Pattern-based best practices from actual code examination
|
||||||
- Realistic feasibility assessments based on current implementation
|
- Realistic feasibility assessments based on current implementation
|
||||||
|
|
||||||
**Codex Analysis Integration**: Autonomous analysis results provide comprehensive insights:
|
**Codex Analysis Integration**: Autonomous analysis results provide comprehensive insights:
|
||||||
- Enhanced `analysis.md` with autonomous development recommendations
|
- Enhanced analysis documents with autonomous development recommendations
|
||||||
- Role-specific strategy based on intelligent system understanding
|
- Role-specific strategy based on intelligent system understanding
|
||||||
- Autonomous development approaches and implementation guidance
|
- Autonomous development approaches and implementation guidance
|
||||||
- Self-guided optimization and integration recommendations
|
- Self-guided optimization and integration recommendations
|
||||||
@@ -229,26 +218,23 @@ Generate documents according to loaded role template specifications:
|
|||||||
|
|
||||||
**Output Location**: `.workflow/WFS-[session]/.brainstorming/[assigned-role]/`
|
**Output Location**: `.workflow/WFS-[session]/.brainstorming/[assigned-role]/`
|
||||||
|
|
||||||
**Required Files**:
|
**Output Files**:
|
||||||
- **analysis.md**: Main role perspective analysis incorporating user context and role template
|
- **analysis.md**: Index document with overview (optionally with `@` references to sub-documents)
|
||||||
- **File Naming**: MUST start with `analysis` prefix (e.g., `analysis.md`, `analysis-1.md`, `analysis-2.md`)
|
|
||||||
- **FORBIDDEN**: Never create `recommendations.md` or any file not starting with `analysis` prefix
|
- **FORBIDDEN**: Never create `recommendations.md` or any file not starting with `analysis` prefix
|
||||||
- **Auto-split if large**: If content >800 lines, split to `analysis-1.md`, `analysis-2.md` (max 3 files: analysis.md, analysis-1.md, analysis-2.md)
|
- **analysis-{slug}.md**: Section content documents (slug from section heading: lowercase, hyphens)
|
||||||
- **Content**: Includes both analysis AND recommendations sections within analysis files
|
- Maximum 5 sub-documents (merge related sections if needed)
|
||||||
- **[role-deliverables]/**: Directory for specialized role outputs as defined in planning role template (optional)
|
- **Content**: Analysis AND recommendations sections
|
||||||
|
|
||||||
**File Structure Example**:
|
**File Structure Example**:
|
||||||
```
|
```
|
||||||
.workflow/WFS-[session]/.brainstorming/system-architect/
|
.workflow/WFS-[session]/.brainstorming/system-architect/
|
||||||
├── analysis.md # Main system architecture analysis with recommendations
|
├── analysis.md # Index with overview + @references
|
||||||
├── analysis-1.md # (Optional) Continuation if content >800 lines
|
├── analysis-architecture-assessment.md # Section content
|
||||||
└── deliverables/ # (Optional) Additional role-specific outputs
|
├── analysis-technology-evaluation.md # Section content
|
||||||
├── technical-architecture.md # System design specifications
|
├── analysis-integration-strategy.md # Section content
|
||||||
├── technology-stack.md # Technology selection rationale
|
└── analysis-recommendations.md # Section content (max 5 sub-docs total)
|
||||||
└── scalability-plan.md # Scaling strategy
|
|
||||||
|
|
||||||
NOTE: ALL brainstorming output files MUST start with 'analysis' prefix
|
NOTE: ALL files MUST start with 'analysis' prefix. Max 5 sub-documents.
|
||||||
FORBIDDEN: recommendations.md, recommendations-*.md, or any non-'analysis' prefixed files
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Role-Specific Planning Process
|
## Role-Specific Planning Process
|
||||||
@@ -268,14 +254,10 @@ FORBIDDEN: recommendations.md, recommendations-*.md, or any non-'analysis' prefi
|
|||||||
- **Validate Against Template**: Ensure analysis meets role template requirements and standards
|
- **Validate Against Template**: Ensure analysis meets role template requirements and standards
|
||||||
|
|
||||||
### 3. Brainstorming Documentation Phase
|
### 3. Brainstorming Documentation Phase
|
||||||
- **Create analysis.md**: Generate comprehensive role perspective analysis in designated output directory
|
- **Create analysis.md**: Main document with overview (optionally with `@` references)
|
||||||
- **File Naming**: MUST start with `analysis` prefix (e.g., `analysis.md`, `analysis-1.md`, `analysis-2.md`)
|
- **Create sub-documents**: `analysis-{slug}.md` for major sections (max 5)
|
||||||
- **FORBIDDEN**: Never create `recommendations.md` or any file not starting with `analysis` prefix
|
|
||||||
- **Content**: Include both analysis AND recommendations sections within analysis files
|
|
||||||
- **Auto-split**: If content >800 lines, split to `analysis-1.md`, `analysis-2.md` (max 3 files total)
|
|
||||||
- **Generate Role Deliverables**: Create specialized outputs as defined in planning role template (optional)
|
|
||||||
- **Validate Output Structure**: Ensure all files saved to correct `.brainstorming/[role]/` directory
|
- **Validate Output Structure**: Ensure all files saved to correct `.brainstorming/[role]/` directory
|
||||||
- **Naming Validation**: Verify NO files with `recommendations` prefix exist
|
- **Naming Validation**: Verify ALL files start with `analysis` prefix
|
||||||
- **Quality Review**: Ensure outputs meet role template standards and user requirements
|
- **Quality Review**: Ensure outputs meet role template standards and user requirements
|
||||||
|
|
||||||
## Role-Specific Analysis Framework
|
## Role-Specific Analysis Framework
|
||||||
@@ -324,5 +306,3 @@ When analysis is complete, ensure:
|
|||||||
- **Relevance**: Directly addresses user's specified requirements
|
- **Relevance**: Directly addresses user's specified requirements
|
||||||
- **Actionability**: Provides concrete next steps and recommendations
|
- **Actionability**: Provides concrete next steps and recommendations
|
||||||
|
|
||||||
### Windows Path Format Guidelines
|
|
||||||
- **Quick Ref**: `C:\Users` → MCP: `C:\\Users` | Bash: `/c/Users` or `C:/Users`
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ You are a context discovery specialist focused on gathering relevant project inf
|
|||||||
### 1. Reference Documentation (Project Standards)
|
### 1. Reference Documentation (Project Standards)
|
||||||
**Tools**:
|
**Tools**:
|
||||||
- `Read()` - Load CLAUDE.md, README.md, architecture docs
|
- `Read()` - Load CLAUDE.md, README.md, architecture docs
|
||||||
- `Bash(~/.claude/scripts/get_modules_by_depth.sh)` - Project structure
|
- `Bash(ccw tool exec get_modules_by_depth '{}')` - Project structure
|
||||||
- `Glob()` - Find documentation files
|
- `Glob()` - Find documentation files
|
||||||
|
|
||||||
**Use**: Phase 0 foundation setup
|
**Use**: Phase 0 foundation setup
|
||||||
@@ -82,7 +82,7 @@ mcp__code-index__set_project_path(process.cwd())
|
|||||||
mcp__code-index__refresh_index()
|
mcp__code-index__refresh_index()
|
||||||
|
|
||||||
// 2. Project Structure
|
// 2. Project Structure
|
||||||
bash(~/.claude/scripts/get_modules_by_depth.sh)
|
bash(ccw tool exec get_modules_by_depth '{}')
|
||||||
|
|
||||||
// 3. Load Documentation (if not in memory)
|
// 3. Load Documentation (if not in memory)
|
||||||
if (!memory.has("CLAUDE.md")) Read(CLAUDE.md)
|
if (!memory.has("CLAUDE.md")) Read(CLAUDE.md)
|
||||||
@@ -449,7 +449,12 @@ Calculate risk level based on:
|
|||||||
{
|
{
|
||||||
"path": "system-architect/analysis.md",
|
"path": "system-architect/analysis.md",
|
||||||
"type": "primary",
|
"type": "primary",
|
||||||
"content": "# System Architecture Analysis\n\n## Overview\n..."
|
"content": "# System Architecture Analysis\n\n## Overview\n@analysis-architecture.md\n@analysis-recommendations.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "system-architect/analysis-architecture.md",
|
||||||
|
"type": "supplementary",
|
||||||
|
"content": "# Architecture Assessment\n\n..."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ You are a documentation update coordinator for complex projects. Orchestrate par
|
|||||||
|
|
||||||
## Core Mission
|
## Core Mission
|
||||||
|
|
||||||
Execute depth-parallel updates for all modules using `~/.claude/scripts/update_module_claude.sh`. **Every module path must be processed**.
|
Execute depth-parallel updates for all modules using `ccw tool exec update_module_claude`. **Every module path must be processed**.
|
||||||
|
|
||||||
## Input Context
|
## Input Context
|
||||||
|
|
||||||
@@ -42,12 +42,12 @@ TodoWrite([
|
|||||||
# 3. Launch parallel jobs (max 4)
|
# 3. Launch parallel jobs (max 4)
|
||||||
|
|
||||||
# Depth 5 example (Layer 3 - use multi-layer):
|
# Depth 5 example (Layer 3 - use multi-layer):
|
||||||
~/.claude/scripts/update_module_claude.sh "multi-layer" "./.claude/workflows/cli-templates/prompts/analysis" "gemini" &
|
ccw tool exec update_module_claude '{"strategy":"multi-layer","path":"./.claude/workflows/cli-templates/prompts/analysis","tool":"gemini"}' &
|
||||||
~/.claude/scripts/update_module_claude.sh "multi-layer" "./.claude/workflows/cli-templates/prompts/development" "gemini" &
|
ccw tool exec update_module_claude '{"strategy":"multi-layer","path":"./.claude/workflows/cli-templates/prompts/development","tool":"gemini"}' &
|
||||||
|
|
||||||
# Depth 1 example (Layer 2 - use single-layer):
|
# Depth 1 example (Layer 2 - use single-layer):
|
||||||
~/.claude/scripts/update_module_claude.sh "single-layer" "./src/auth" "gemini" &
|
ccw tool exec update_module_claude '{"strategy":"single-layer","path":"./src/auth","tool":"gemini"}' &
|
||||||
~/.claude/scripts/update_module_claude.sh "single-layer" "./src/api" "gemini" &
|
ccw tool exec update_module_claude '{"strategy":"single-layer","path":"./src/api","tool":"gemini"}' &
|
||||||
# ... up to 4 concurrent jobs
|
# ... up to 4 concurrent jobs
|
||||||
|
|
||||||
# 4. Wait for all depth jobs to complete
|
# 4. Wait for all depth jobs to complete
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ target/
|
|||||||
### Step 2: Workspace Analysis (MANDATORY FIRST)
|
### Step 2: Workspace Analysis (MANDATORY FIRST)
|
||||||
```bash
|
```bash
|
||||||
# Analyze workspace structure
|
# Analyze workspace structure
|
||||||
bash(~/.claude/scripts/get_modules_by_depth.sh json)
|
bash(ccw tool exec get_modules_by_depth '{"format":"json"}')
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step 3: Technology Detection
|
### Step 3: Technology Detection
|
||||||
|
|||||||
@@ -101,10 +101,10 @@ src/ (depth 1) → SINGLE STRATEGY
|
|||||||
Bash({command: "pwd && basename \"$(pwd)\" && git rev-parse --show-toplevel 2>/dev/null || pwd", run_in_background: false});
|
Bash({command: "pwd && basename \"$(pwd)\" && git rev-parse --show-toplevel 2>/dev/null || pwd", run_in_background: false});
|
||||||
|
|
||||||
// Get module structure with classification
|
// Get module structure with classification
|
||||||
Bash({command: "~/.claude/scripts/get_modules_by_depth.sh list | ~/.claude/scripts/classify-folders.sh", run_in_background: false});
|
Bash({command: "ccw tool exec get_modules_by_depth '{\"format\":\"list\"}' | ccw tool exec classify_folders '{}'", run_in_background: false});
|
||||||
|
|
||||||
// OR with path parameter
|
// OR with path parameter
|
||||||
Bash({command: "cd <target-path> && ~/.claude/scripts/get_modules_by_depth.sh list | ~/.claude/scripts/classify-folders.sh", run_in_background: false});
|
Bash({command: "cd <target-path> && ccw tool exec get_modules_by_depth '{\"format\":\"list\"}' | ccw tool exec classify_folders '{}'", run_in_background: false});
|
||||||
```
|
```
|
||||||
|
|
||||||
**Parse output** `depth:N|path:<PATH>|type:<code|navigation>|...` to extract module paths, types, and count.
|
**Parse output** `depth:N|path:<PATH>|type:<code|navigation>|...` to extract module paths, types, and count.
|
||||||
@@ -200,7 +200,7 @@ for (let layer of [3, 2, 1]) {
|
|||||||
let strategy = module.depth >= 3 ? "full" : "single";
|
let strategy = module.depth >= 3 ? "full" : "single";
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${module.path} && ~/.claude/scripts/generate_module_docs.sh "${strategy}" "." "${project_name}" "${tool}"`,
|
command: `cd ${module.path} && ccw tool exec generate_module_docs '{"strategy":"${strategy}","sourcePath":".","projectName":"${project_name}","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
@@ -263,7 +263,7 @@ MODULES:
|
|||||||
|
|
||||||
TOOLS (try in order): {{tool_1}}, {{tool_2}}, {{tool_3}}
|
TOOLS (try in order): {{tool_1}}, {{tool_2}}, {{tool_3}}
|
||||||
|
|
||||||
EXECUTION SCRIPT: ~/.claude/scripts/generate_module_docs.sh
|
EXECUTION SCRIPT: ccw tool exec generate_module_docs
|
||||||
- Accepts strategy parameter: full | single
|
- Accepts strategy parameter: full | single
|
||||||
- Accepts folder type detection: code | navigation
|
- Accepts folder type detection: code | navigation
|
||||||
- Tool execution via direct CLI commands (gemini/qwen/codex)
|
- Tool execution via direct CLI commands (gemini/qwen/codex)
|
||||||
@@ -273,7 +273,7 @@ EXECUTION FLOW (for each module):
|
|||||||
1. Tool fallback loop (exit on first success):
|
1. Tool fallback loop (exit on first success):
|
||||||
for tool in {{tool_1}} {{tool_2}} {{tool_3}}; do
|
for tool in {{tool_1}} {{tool_2}} {{tool_3}}; do
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/generate_module_docs.sh "{{strategy}}" "." "{{project_name}}" "${tool}"`,
|
command: `cd "{{module_path}}" && ccw tool exec generate_module_docs '{"strategy":"{{strategy}}","sourcePath":".","projectName":"{{project_name}}","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
exit_code=$?
|
exit_code=$?
|
||||||
@@ -322,7 +322,7 @@ let project_root = get_project_root();
|
|||||||
report("Generating project README.md...");
|
report("Generating project README.md...");
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${project_root} && ~/.claude/scripts/generate_module_docs.sh "project-readme" "." "${project_name}" "${tool}"`,
|
command: `cd ${project_root} && ccw tool exec generate_module_docs '{"strategy":"project-readme","sourcePath":".","projectName":"${project_name}","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
@@ -335,7 +335,7 @@ for (let tool of tool_order) {
|
|||||||
report("Generating ARCHITECTURE.md and EXAMPLES.md...");
|
report("Generating ARCHITECTURE.md and EXAMPLES.md...");
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${project_root} && ~/.claude/scripts/generate_module_docs.sh "project-architecture" "." "${project_name}" "${tool}"`,
|
command: `cd ${project_root} && ccw tool exec generate_module_docs '{"strategy":"project-architecture","sourcePath":".","projectName":"${project_name}","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
@@ -350,7 +350,7 @@ if (bash_result.stdout.includes("API_FOUND")) {
|
|||||||
report("Generating HTTP API documentation...");
|
report("Generating HTTP API documentation...");
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${project_root} && ~/.claude/scripts/generate_module_docs.sh "http-api" "." "${project_name}" "${tool}"`,
|
command: `cd ${project_root} && ccw tool exec generate_module_docs '{"strategy":"http-api","sourcePath":".","projectName":"${project_name}","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ Orchestrates context-aware documentation generation/update for changed modules u
|
|||||||
Bash({command: "pwd && basename \"$(pwd)\" && git rev-parse --show-toplevel 2>/dev/null || pwd", run_in_background: false});
|
Bash({command: "pwd && basename \"$(pwd)\" && git rev-parse --show-toplevel 2>/dev/null || pwd", run_in_background: false});
|
||||||
|
|
||||||
// Detect changed modules
|
// Detect changed modules
|
||||||
Bash({command: "~/.claude/scripts/detect_changed_modules.sh list", run_in_background: false});
|
Bash({command: "ccw tool exec detect_changed_modules '{\"format\":\"list\"}'", run_in_background: false});
|
||||||
|
|
||||||
// Cache git changes
|
// Cache git changes
|
||||||
Bash({command: "git add -A 2>/dev/null || true", run_in_background: false});
|
Bash({command: "git add -A 2>/dev/null || true", run_in_background: false});
|
||||||
@@ -123,7 +123,7 @@ for (let depth of sorted_depths.reverse()) { // N → 0
|
|||||||
return async () => {
|
return async () => {
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${module.path} && ~/.claude/scripts/generate_module_docs.sh "single" "." "${project_name}" "${tool}"`,
|
command: `cd ${module.path} && ccw tool exec generate_module_docs '{"strategy":"single","sourcePath":".","projectName":"${project_name}","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
@@ -207,21 +207,21 @@ EXECUTION:
|
|||||||
For each module above:
|
For each module above:
|
||||||
1. Try tool 1:
|
1. Try tool 1:
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/generate_module_docs.sh "single" "." "{{project_name}}" "{{tool_1}}"`,
|
command: `cd "{{module_path}}" && ccw tool exec generate_module_docs '{"strategy":"single","sourcePath":".","projectName":"{{project_name}}","tool":"{{tool_1}}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
→ Success: Report "✅ {{module_path}} docs generated with {{tool_1}}", proceed to next module
|
→ Success: Report "✅ {{module_path}} docs generated with {{tool_1}}", proceed to next module
|
||||||
→ Failure: Try tool 2
|
→ Failure: Try tool 2
|
||||||
2. Try tool 2:
|
2. Try tool 2:
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/generate_module_docs.sh "single" "." "{{project_name}}" "{{tool_2}}"`,
|
command: `cd "{{module_path}}" && ccw tool exec generate_module_docs '{"strategy":"single","sourcePath":".","projectName":"{{project_name}}","tool":"{{tool_2}}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
→ Success: Report "✅ {{module_path}} docs generated with {{tool_2}}", proceed to next module
|
→ Success: Report "✅ {{module_path}} docs generated with {{tool_2}}", proceed to next module
|
||||||
→ Failure: Try tool 3
|
→ Failure: Try tool 3
|
||||||
3. Try tool 3:
|
3. Try tool 3:
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/generate_module_docs.sh "single" "." "{{project_name}}" "{{tool_3}}"`,
|
command: `cd "{{module_path}}" && ccw tool exec generate_module_docs '{"strategy":"single","sourcePath":".","projectName":"{{project_name}}","tool":"{{tool_3}}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
→ Success: Report "✅ {{module_path}} docs generated with {{tool_3}}", proceed to next module
|
→ Success: Report "✅ {{module_path}} docs generated with {{tool_3}}", proceed to next module
|
||||||
|
|||||||
@@ -64,12 +64,17 @@ Lightweight planner that analyzes project structure, decomposes documentation wo
|
|||||||
```bash
|
```bash
|
||||||
# Get target path, project name, and root
|
# Get target path, project name, and root
|
||||||
bash(pwd && basename "$(pwd)" && git rev-parse --show-toplevel 2>/dev/null || pwd && date +%Y%m%d-%H%M%S)
|
bash(pwd && basename "$(pwd)" && git rev-parse --show-toplevel 2>/dev/null || pwd && date +%Y%m%d-%H%M%S)
|
||||||
|
```
|
||||||
|
|
||||||
# Create session directories (replace timestamp)
|
```javascript
|
||||||
bash(mkdir -p .workflow/active/WFS-docs-{timestamp}/.{task,process,summaries})
|
// Create docs session (type: docs)
|
||||||
|
SlashCommand(command="/workflow:session:start --type docs --new \"{project_name}-docs-{timestamp}\"")
|
||||||
|
// Parse output to get sessionId
|
||||||
|
```
|
||||||
|
|
||||||
# Create workflow-session.json (replace values)
|
```bash
|
||||||
bash(echo '{"session_id":"WFS-docs-{timestamp}","project":"{project} documentation","status":"planning","timestamp":"2024-01-20T14:30:22+08:00","path":".","target_path":"{target_path}","project_root":"{project_root}","project_name":"{project_name}","mode":"full","tool":"gemini","cli_execute":false}' | jq '.' > .workflow/active/WFS-docs-{timestamp}/workflow-session.json)
|
# Update workflow-session.json with docs-specific fields
|
||||||
|
bash(jq '. + {"target_path":"{target_path}","project_root":"{project_root}","project_name":"{project_name}","mode":"full","tool":"gemini","cli_execute":false}' .workflow/active/{sessionId}/workflow-session.json > tmp.json && mv tmp.json .workflow/active/{sessionId}/workflow-session.json)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Phase 2: Analyze Structure
|
### Phase 2: Analyze Structure
|
||||||
@@ -80,10 +85,10 @@ bash(echo '{"session_id":"WFS-docs-{timestamp}","project":"{project} documentati
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Run folder analysis
|
# 1. Run folder analysis
|
||||||
bash(~/.claude/scripts/get_modules_by_depth.sh | ~/.claude/scripts/classify-folders.sh)
|
bash(ccw tool exec get_modules_by_depth '{}' | ccw tool exec classify_folders '{}')
|
||||||
|
|
||||||
# 2. Get top-level directories (first 2 path levels)
|
# 2. Get top-level directories (first 2 path levels)
|
||||||
bash(~/.claude/scripts/get_modules_by_depth.sh | ~/.claude/scripts/classify-folders.sh | awk -F'|' '{print $1}' | sed 's|^\./||' | awk -F'/' '{if(NF>=2) print $1"/"$2; else if(NF==1) print $1}' | sort -u)
|
bash(ccw tool exec get_modules_by_depth '{}' | ccw tool exec classify_folders '{}' | awk -F'|' '{print $1}' | sed 's|^\./||' | awk -F'/' '{if(NF>=2) print $1"/"$2; else if(NF==1) print $1}' | sort -u)
|
||||||
|
|
||||||
# 3. Find existing docs (if directory exists)
|
# 3. Find existing docs (if directory exists)
|
||||||
bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${project_name} -type f -name "*.md" ! -path "*/README.md" ! -path "*/ARCHITECTURE.md" ! -path "*/EXAMPLES.md" ! -path "*/api/*" 2>/dev/null; fi)
|
bash(if [ -d .workflow/docs/\${project_name} ]; then find .workflow/docs/\${project_name} -type f -name "*.md" ! -path "*/README.md" ! -path "*/ARCHITECTURE.md" ! -path "*/EXAMPLES.md" ! -path "*/api/*" 2>/dev/null; fi)
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ Task(
|
|||||||
|
|
||||||
1. **Project Structure**
|
1. **Project Structure**
|
||||||
\`\`\`bash
|
\`\`\`bash
|
||||||
bash(~/.claude/scripts/get_modules_by_depth.sh)
|
bash(ccw tool exec get_modules_by_depth '{}')
|
||||||
\`\`\`
|
\`\`\`
|
||||||
|
|
||||||
2. **Core Documentation**
|
2. **Core Documentation**
|
||||||
|
|||||||
@@ -99,10 +99,10 @@ src/ (depth 1) → SINGLE-LAYER STRATEGY
|
|||||||
Bash({command: "git add -A 2>/dev/null || true", run_in_background: false});
|
Bash({command: "git add -A 2>/dev/null || true", run_in_background: false});
|
||||||
|
|
||||||
// Get module structure
|
// Get module structure
|
||||||
Bash({command: "~/.claude/scripts/get_modules_by_depth.sh list", run_in_background: false});
|
Bash({command: "ccw tool exec get_modules_by_depth '{\"format\":\"list\"}'", run_in_background: false});
|
||||||
|
|
||||||
// OR with --path
|
// OR with --path
|
||||||
Bash({command: "cd <target-path> && ~/.claude/scripts/get_modules_by_depth.sh list", run_in_background: false});
|
Bash({command: "cd <target-path> && ccw tool exec get_modules_by_depth '{\"format\":\"list\"}'", run_in_background: false});
|
||||||
```
|
```
|
||||||
|
|
||||||
**Parse output** `depth:N|path:<PATH>|...` to extract module paths and count.
|
**Parse output** `depth:N|path:<PATH>|...` to extract module paths and count.
|
||||||
@@ -185,7 +185,7 @@ for (let layer of [3, 2, 1]) {
|
|||||||
let strategy = module.depth >= 3 ? "multi-layer" : "single-layer";
|
let strategy = module.depth >= 3 ? "multi-layer" : "single-layer";
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${module.path} && ~/.claude/scripts/update_module_claude.sh "${strategy}" "." "${tool}"`,
|
command: `cd ${module.path} && ccw tool exec update_module_claude '{"strategy":"${strategy}","path":".","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
@@ -244,7 +244,7 @@ MODULES:
|
|||||||
|
|
||||||
TOOLS (try in order): {{tool_1}}, {{tool_2}}, {{tool_3}}
|
TOOLS (try in order): {{tool_1}}, {{tool_2}}, {{tool_3}}
|
||||||
|
|
||||||
EXECUTION SCRIPT: ~/.claude/scripts/update_module_claude.sh
|
EXECUTION SCRIPT: ccw tool exec update_module_claude
|
||||||
- Accepts strategy parameter: multi-layer | single-layer
|
- Accepts strategy parameter: multi-layer | single-layer
|
||||||
- Tool execution via direct CLI commands (gemini/qwen/codex)
|
- Tool execution via direct CLI commands (gemini/qwen/codex)
|
||||||
|
|
||||||
@@ -252,7 +252,7 @@ EXECUTION FLOW (for each module):
|
|||||||
1. Tool fallback loop (exit on first success):
|
1. Tool fallback loop (exit on first success):
|
||||||
for tool in {{tool_1}} {{tool_2}} {{tool_3}}; do
|
for tool in {{tool_1}} {{tool_2}} {{tool_3}}; do
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/update_module_claude.sh "{{strategy}}" "." "${tool}"`,
|
command: `cd "{{module_path}}" && ccw tool exec update_module_claude '{"strategy":"{{strategy}}","path":".","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
exit_code=$?
|
exit_code=$?
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ Orchestrates context-aware CLAUDE.md updates for changed modules using batched a
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// Detect changed modules
|
// Detect changed modules
|
||||||
Bash({command: "~/.claude/scripts/detect_changed_modules.sh list", run_in_background: false});
|
Bash({command: "ccw tool exec detect_changed_modules '{\"format\":\"list\"}'", run_in_background: false});
|
||||||
|
|
||||||
// Cache git changes
|
// Cache git changes
|
||||||
Bash({command: "git add -A 2>/dev/null || true", run_in_background: false});
|
Bash({command: "git add -A 2>/dev/null || true", run_in_background: false});
|
||||||
@@ -102,7 +102,7 @@ for (let depth of sorted_depths.reverse()) { // N → 0
|
|||||||
return async () => {
|
return async () => {
|
||||||
for (let tool of tool_order) {
|
for (let tool of tool_order) {
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd ${module.path} && ~/.claude/scripts/update_module_claude.sh "single-layer" "." "${tool}"`,
|
command: `cd ${module.path} && ccw tool exec update_module_claude '{"strategy":"single-layer","path":".","tool":"${tool}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
});
|
});
|
||||||
if (bash_result.exit_code === 0) {
|
if (bash_result.exit_code === 0) {
|
||||||
@@ -184,21 +184,21 @@ EXECUTION:
|
|||||||
For each module above:
|
For each module above:
|
||||||
1. Try tool 1:
|
1. Try tool 1:
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/update_module_claude.sh "single-layer" "." "{{tool_1}}"`,
|
command: `cd "{{module_path}}" && ccw tool exec update_module_claude '{"strategy":"single-layer","path":".","tool":"{{tool_1}}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
→ Success: Report "✅ {{module_path}} updated with {{tool_1}}", proceed to next module
|
→ Success: Report "✅ {{module_path}} updated with {{tool_1}}", proceed to next module
|
||||||
→ Failure: Try tool 2
|
→ Failure: Try tool 2
|
||||||
2. Try tool 2:
|
2. Try tool 2:
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/update_module_claude.sh "single-layer" "." "{{tool_2}}"`,
|
command: `cd "{{module_path}}" && ccw tool exec update_module_claude '{"strategy":"single-layer","path":".","tool":"{{tool_2}}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
→ Success: Report "✅ {{module_path}} updated with {{tool_2}}", proceed to next module
|
→ Success: Report "✅ {{module_path}} updated with {{tool_2}}", proceed to next module
|
||||||
→ Failure: Try tool 3
|
→ Failure: Try tool 3
|
||||||
3. Try tool 3:
|
3. Try tool 3:
|
||||||
Bash({
|
Bash({
|
||||||
command: `cd "{{module_path}}" && ~/.claude/scripts/update_module_claude.sh "single-layer" "." "{{tool_3}}"`,
|
command: `cd "{{module_path}}" && ccw tool exec update_module_claude '{"strategy":"single-layer","path":".","tool":"{{tool_3}}"}'`,
|
||||||
run_in_background: false
|
run_in_background: false
|
||||||
})
|
})
|
||||||
→ Success: Report "✅ {{module_path}} updated with {{tool_3}}", proceed to next module
|
→ Success: Report "✅ {{module_path}} updated with {{tool_3}}", proceed to next module
|
||||||
|
|||||||
@@ -2,452 +2,359 @@
|
|||||||
name: artifacts
|
name: artifacts
|
||||||
description: Interactive clarification generating confirmed guidance specification through role-based analysis and synthesis
|
description: Interactive clarification generating confirmed guidance specification through role-based analysis and synthesis
|
||||||
argument-hint: "topic or challenge description [--count N]"
|
argument-hint: "topic or challenge description [--count N]"
|
||||||
allowed-tools: TodoWrite(*), Read(*), Write(*), Glob(*)
|
allowed-tools: TodoWrite(*), Read(*), Write(*), Glob(*), AskUserQuestion(*)
|
||||||
---
|
---
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Six-phase workflow: **Automatic project context collection** → Extract topic challenges → Select roles → Generate task-specific questions → Detect conflicts → Generate confirmed guidance (declarative statements only).
|
Seven-phase workflow: **Context collection** → **Topic analysis** → **Role selection** → **Role questions** → **Conflict resolution** → **Final check** → **Generate specification**
|
||||||
|
|
||||||
|
All user interactions use AskUserQuestion tool (max 4 questions per call, multi-round).
|
||||||
|
|
||||||
**Input**: `"GOAL: [objective] SCOPE: [boundaries] CONTEXT: [background]" [--count N]`
|
**Input**: `"GOAL: [objective] SCOPE: [boundaries] CONTEXT: [background]" [--count N]`
|
||||||
**Output**: `.workflow/active/WFS-{topic}/.brainstorming/guidance-specification.md` (CONFIRMED/SELECTED format)
|
**Output**: `.workflow/active/WFS-{topic}/.brainstorming/guidance-specification.md`
|
||||||
**Core Principle**: Questions dynamically generated from project context + topic keywords/challenges, NOT from generic templates
|
**Core Principle**: Questions dynamically generated from project context + topic keywords, NOT generic templates
|
||||||
|
|
||||||
**Parameters**:
|
**Parameters**:
|
||||||
- `topic` (required): Topic or challenge description (structured format recommended)
|
- `topic` (required): Topic or challenge description (structured format recommended)
|
||||||
- `--count N` (optional): Number of roles user WANTS to select (system will recommend N+2 options for user to choose from, default: 3)
|
- `--count N` (optional): Number of roles to select (system recommends N+2 options, default: 3)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Reference
|
||||||
|
|
||||||
|
### Phase Summary
|
||||||
|
|
||||||
|
| Phase | Goal | AskUserQuestion | Storage |
|
||||||
|
|-------|------|-----------------|---------|
|
||||||
|
| 0 | Context collection | - | context-package.json |
|
||||||
|
| 1 | Topic analysis | 2-4 questions | intent_context |
|
||||||
|
| 2 | Role selection | 1 multi-select | selected_roles |
|
||||||
|
| 3 | Role questions | 3-4 per role | role_decisions[role] |
|
||||||
|
| 4 | Conflict resolution | max 4 per round | cross_role_decisions |
|
||||||
|
| 4.5 | Final check | progressive rounds | additional_decisions |
|
||||||
|
| 5 | Generate spec | - | guidance-specification.md |
|
||||||
|
|
||||||
|
### AskUserQuestion Pattern
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Single-select (Phase 1, 3, 4)
|
||||||
|
AskUserQuestion({
|
||||||
|
questions: [
|
||||||
|
{
|
||||||
|
question: "{问题文本}",
|
||||||
|
header: "{短标签}", // max 12 chars
|
||||||
|
multiSelect: false,
|
||||||
|
options: [
|
||||||
|
{ label: "{选项}", description: "{说明和影响}" },
|
||||||
|
{ label: "{选项}", description: "{说明和影响}" },
|
||||||
|
{ label: "{选项}", description: "{说明和影响}" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
// ... max 4 questions per call
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
// Multi-select (Phase 2)
|
||||||
|
AskUserQuestion({
|
||||||
|
questions: [{
|
||||||
|
question: "请选择 {count} 个角色",
|
||||||
|
header: "角色选择",
|
||||||
|
multiSelect: true,
|
||||||
|
options: [/* max 4 options per call */]
|
||||||
|
}]
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Multi-Round Execution
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const BATCH_SIZE = 4;
|
||||||
|
for (let i = 0; i < allQuestions.length; i += BATCH_SIZE) {
|
||||||
|
const batch = allQuestions.slice(i, i + BATCH_SIZE);
|
||||||
|
AskUserQuestion({ questions: batch });
|
||||||
|
// Store responses before next round
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Task Tracking
|
## Task Tracking
|
||||||
|
|
||||||
**⚠️ TodoWrite Rule**: EXTEND auto-parallel's task list (NOT replace/overwrite)
|
**TodoWrite Rule**: EXTEND auto-parallel's task list (NOT replace/overwrite)
|
||||||
|
|
||||||
**When called from auto-parallel**:
|
**When called from auto-parallel**:
|
||||||
- Find the artifacts parent task: "Execute artifacts command for interactive framework generation"
|
- Find artifacts parent task → Mark "in_progress"
|
||||||
- Mark parent task as "in_progress"
|
- APPEND sub-tasks (Phase 0-5) → Mark each as completes
|
||||||
- APPEND artifacts sub-tasks AFTER the parent task (Phase 0-5)
|
- When Phase 5 completes → Mark parent "completed"
|
||||||
- Mark each sub-task as it completes
|
- PRESERVE all other auto-parallel tasks
|
||||||
- When Phase 5 completes, mark parent task as "completed"
|
|
||||||
- **PRESERVE all other auto-parallel tasks** (role agents, synthesis)
|
|
||||||
|
|
||||||
**Standalone Mode**:
|
**Standalone Mode**:
|
||||||
```json
|
```json
|
||||||
[
|
[
|
||||||
{"content": "Initialize session (.workflow/active/ session check, parse --count parameter)", "status": "pending", "activeForm": "Initializing"},
|
{"content": "Initialize session", "status": "pending", "activeForm": "Initializing"},
|
||||||
{"content": "Phase 0: Automatic project context collection (call context-gather)", "status": "pending", "activeForm": "Phase 0 context collection"},
|
{"content": "Phase 0: Context collection", "status": "pending", "activeForm": "Phase 0"},
|
||||||
{"content": "Phase 1: Extract challenges, output 2-4 task-specific questions, wait for user input", "status": "pending", "activeForm": "Phase 1 topic analysis"},
|
{"content": "Phase 1: Topic analysis (2-4 questions)", "status": "pending", "activeForm": "Phase 1"},
|
||||||
{"content": "Phase 2: Recommend count+2 roles, output role selection, wait for user input", "status": "pending", "activeForm": "Phase 2 role selection"},
|
{"content": "Phase 2: Role selection", "status": "pending", "activeForm": "Phase 2"},
|
||||||
{"content": "Phase 3: Generate 3-4 questions per role, output and wait for answers (max 10 per round)", "status": "pending", "activeForm": "Phase 3 role questions"},
|
{"content": "Phase 3: Role questions (per role)", "status": "pending", "activeForm": "Phase 3"},
|
||||||
{"content": "Phase 4: Detect conflicts, output clarifications, wait for answers (max 10 per round)", "status": "pending", "activeForm": "Phase 4 conflict resolution"},
|
{"content": "Phase 4: Conflict resolution", "status": "pending", "activeForm": "Phase 4"},
|
||||||
{"content": "Phase 5: Transform Q&A to declarative statements, write guidance-specification.md", "status": "pending", "activeForm": "Phase 5 document generation"}
|
{"content": "Phase 4.5: Final clarification", "status": "pending", "activeForm": "Phase 4.5"},
|
||||||
|
{"content": "Phase 5: Generate specification", "status": "pending", "activeForm": "Phase 5"}
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
## User Interaction Protocol
|
---
|
||||||
|
|
||||||
### Question Output Format
|
|
||||||
|
|
||||||
All questions output as structured text (detailed format with descriptions):
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
【问题{N} - {短标签}】{问题文本}
|
|
||||||
a) {选项标签}
|
|
||||||
说明:{选项说明和影响}
|
|
||||||
b) {选项标签}
|
|
||||||
说明:{选项说明和影响}
|
|
||||||
c) {选项标签}
|
|
||||||
说明:{选项说明和影响}
|
|
||||||
|
|
||||||
请回答:{N}a 或 {N}b 或 {N}c
|
|
||||||
```
|
|
||||||
|
|
||||||
**Multi-select format** (Phase 2 role selection):
|
|
||||||
```markdown
|
|
||||||
【角色选择】请选择 {count} 个角色参与头脑风暴分析
|
|
||||||
|
|
||||||
a) {role-name} ({中文名})
|
|
||||||
推荐理由:{基于topic的相关性说明}
|
|
||||||
b) {role-name} ({中文名})
|
|
||||||
推荐理由:{基于topic的相关性说明}
|
|
||||||
...
|
|
||||||
|
|
||||||
支持格式:
|
|
||||||
- 分别选择:2a 2c 2d (选择第2题的a、c、d选项)
|
|
||||||
- 合并语法:2acd (选择a、c、d)
|
|
||||||
- 逗号分隔:2a,c,d
|
|
||||||
|
|
||||||
请输入选择:
|
|
||||||
```
|
|
||||||
|
|
||||||
### Input Parsing Rules
|
|
||||||
|
|
||||||
**Supported formats** (intelligent parsing):
|
|
||||||
|
|
||||||
1. **Space-separated**: `1a 2b 3c` → Q1:a, Q2:b, Q3:c
|
|
||||||
2. **Comma-separated**: `1a,2b,3c` → Q1:a, Q2:b, Q3:c
|
|
||||||
3. **Multi-select combined**: `2abc` → Q2: options a,b,c
|
|
||||||
4. **Multi-select spaces**: `2 a b c` → Q2: options a,b,c
|
|
||||||
5. **Multi-select comma**: `2a,b,c` → Q2: options a,b,c
|
|
||||||
6. **Natural language**: `问题1选a` → 1a (fallback parsing)
|
|
||||||
|
|
||||||
**Parsing algorithm**:
|
|
||||||
- Extract question numbers and option letters
|
|
||||||
- Validate question numbers match output
|
|
||||||
- Validate option letters exist for each question
|
|
||||||
- If ambiguous/invalid, output example format and request re-input
|
|
||||||
|
|
||||||
**Error handling** (lenient):
|
|
||||||
- Recognize common variations automatically
|
|
||||||
- If parsing fails, show example and wait for clarification
|
|
||||||
- Support re-input without penalty
|
|
||||||
|
|
||||||
### Batching Strategy
|
|
||||||
|
|
||||||
**Batch limits**:
|
|
||||||
- **Default**: Maximum 10 questions per round
|
|
||||||
- **Phase 2 (role selection)**: Display all recommended roles at once (count+2 roles)
|
|
||||||
- **Auto-split**: If questions > 10, split into multiple rounds with clear round indicators
|
|
||||||
|
|
||||||
**Round indicators**:
|
|
||||||
```markdown
|
|
||||||
===== 第 1 轮问题 (共2轮) =====
|
|
||||||
【问题1 - ...】...
|
|
||||||
【问题2 - ...】...
|
|
||||||
...
|
|
||||||
【问题10 - ...】...
|
|
||||||
|
|
||||||
请回答 (格式: 1a 2b ... 10c):
|
|
||||||
```
|
|
||||||
|
|
||||||
### Interaction Flow
|
|
||||||
|
|
||||||
**Standard flow**:
|
|
||||||
1. Output questions in formatted text
|
|
||||||
2. Output expected input format example
|
|
||||||
3. Wait for user input
|
|
||||||
4. Parse input with intelligent matching
|
|
||||||
5. If parsing succeeds → Store answers and continue
|
|
||||||
6. If parsing fails → Show error, example, and wait for re-input
|
|
||||||
|
|
||||||
**No question/option limits**: Text-based interaction removes previous 4-question and 4-option restrictions
|
|
||||||
|
|
||||||
## Execution Phases
|
## Execution Phases
|
||||||
|
|
||||||
### Session Management
|
### Session Management
|
||||||
|
|
||||||
- Check `.workflow/active/` for existing sessions
|
- Check `.workflow/active/` for existing sessions
|
||||||
- Multiple sessions → Prompt selection | Single → Use it | None → Create `WFS-[topic-slug]`
|
- Multiple → Prompt selection | Single → Use it | None → Create `WFS-[topic-slug]`
|
||||||
- Parse `--count N` parameter from user input (default: 3 if not specified)
|
- Parse `--count N` parameter (default: 3)
|
||||||
- Store decisions in `workflow-session.json` including count parameter
|
- Store decisions in `workflow-session.json`
|
||||||
|
|
||||||
### Phase 0: Automatic Project Context Collection
|
### Phase 0: Context Collection
|
||||||
|
|
||||||
**Goal**: Gather project architecture, documentation, and relevant code context BEFORE user interaction
|
**Goal**: Gather project context BEFORE user interaction
|
||||||
|
|
||||||
**Detection Mechanism** (execute first):
|
**Steps**:
|
||||||
```javascript
|
1. Check if `context-package.json` exists → Skip if valid
|
||||||
// Check if context-package already exists
|
2. Invoke `context-search-agent` (BRAINSTORM MODE - lightweight)
|
||||||
const contextPackagePath = `.workflow/active/WFS-{session-id}/.process/context-package.json`;
|
3. Output: `.workflow/active/WFS-{session-id}/.process/context-package.json`
|
||||||
|
|
||||||
if (file_exists(contextPackagePath)) {
|
**Graceful Degradation**: If agent fails, continue to Phase 1 without context
|
||||||
// Validate package
|
|
||||||
const package = Read(contextPackagePath);
|
|
||||||
if (package.metadata.session_id === session_id) {
|
|
||||||
console.log("✅ Valid context-package found, skipping Phase 0");
|
|
||||||
return; // Skip to Phase 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
**Implementation**: Invoke `context-search-agent` only if package doesn't exist
|
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
Task(
|
Task(
|
||||||
subagent_type="context-search-agent",
|
subagent_type="context-search-agent",
|
||||||
description="Gather project context for brainstorm",
|
description="Gather project context for brainstorm",
|
||||||
prompt=`
|
prompt=`
|
||||||
You are executing as context-search-agent (.claude/agents/context-search-agent.md).
|
Execute context-search-agent in BRAINSTORM MODE (Phase 1-2 only).
|
||||||
|
|
||||||
## Execution Mode
|
Session: ${session_id}
|
||||||
**BRAINSTORM MODE** (Lightweight) - Phase 1-2 only (skip deep analysis)
|
Task: ${task_description}
|
||||||
|
Output: .workflow/${session_id}/.process/context-package.json
|
||||||
|
|
||||||
## Session Information
|
Required fields: metadata, project_context, assets, dependencies, conflict_detection
|
||||||
- **Session ID**: ${session_id}
|
|
||||||
- **Task Description**: ${task_description}
|
|
||||||
- **Output Path**: .workflow/${session_id}/.process/context-package.json
|
|
||||||
|
|
||||||
## Mission
|
|
||||||
Execute complete context-search-agent workflow for implementation planning:
|
|
||||||
|
|
||||||
### Phase 1: Initialization & Pre-Analysis
|
|
||||||
1. **Detection**: Check for existing context-package (early exit if valid)
|
|
||||||
2. **Foundation**: Initialize code-index, get project structure, load docs
|
|
||||||
3. **Analysis**: Extract keywords, determine scope, classify complexity
|
|
||||||
|
|
||||||
### Phase 2: Multi-Source Context Discovery
|
|
||||||
Execute all 3 discovery tracks:
|
|
||||||
- **Track 1**: Reference documentation (CLAUDE.md, architecture docs)
|
|
||||||
- **Track 2**: Web examples (use Exa MCP for unfamiliar tech/APIs)
|
|
||||||
- **Track 3**: Codebase analysis (5-layer discovery: files, content, patterns, deps, config/tests)
|
|
||||||
|
|
||||||
### Phase 3: Synthesis, Assessment & Packaging
|
|
||||||
1. Apply relevance scoring and build dependency graph
|
|
||||||
2. Synthesize 3-source data (docs > code > web)
|
|
||||||
3. Integrate brainstorm artifacts (if .brainstorming/ exists, read content)
|
|
||||||
4. Perform conflict detection with risk assessment
|
|
||||||
5. Generate and validate context-package.json
|
|
||||||
|
|
||||||
## Output Requirements
|
|
||||||
Complete context-package.json with:
|
|
||||||
- **metadata**: task_description, keywords, complexity, tech_stack, session_id
|
|
||||||
- **project_context**: architecture_patterns, coding_conventions, tech_stack
|
|
||||||
- **assets**: {documentation[], source_code[], config[], tests[]} with relevance scores
|
|
||||||
- **dependencies**: {internal[], external[]} with dependency graph
|
|
||||||
- **brainstorm_artifacts**: {guidance_specification, role_analyses[], synthesis_output} with content
|
|
||||||
- **conflict_detection**: {risk_level, risk_factors, affected_modules[], mitigation_strategy}
|
|
||||||
|
|
||||||
## Quality Validation
|
|
||||||
Before completion verify:
|
|
||||||
- [ ] Valid JSON format with all required fields
|
|
||||||
- [ ] File relevance accuracy >80%
|
|
||||||
- [ ] Dependency graph complete (max 2 transitive levels)
|
|
||||||
- [ ] Conflict risk level calculated correctly
|
|
||||||
- [ ] No sensitive data exposed
|
|
||||||
- [ ] Total files ≤50 (prioritize high-relevance)
|
|
||||||
|
|
||||||
Execute autonomously following agent documentation.
|
|
||||||
Report completion with statistics.
|
|
||||||
`
|
`
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Graceful Degradation**:
|
### Phase 1: Topic Analysis
|
||||||
- If agent fails: Log warning, continue to Phase 1 without project context
|
|
||||||
- If package invalid: Re-run context-search-agent
|
|
||||||
|
|
||||||
### Phase 1: Topic Analysis & Intent Classification
|
**Goal**: Extract keywords/challenges enriched by Phase 0 context
|
||||||
|
|
||||||
**Goal**: Extract keywords/challenges to drive all subsequent question generation, **enriched by Phase 0 project context**
|
|
||||||
|
|
||||||
**Steps**:
|
**Steps**:
|
||||||
1. **Load Phase 0 context** (if available):
|
1. Load Phase 0 context (tech_stack, modules, conflict_risk)
|
||||||
- Read `.workflow/active/WFS-{session-id}/.process/context-package.json`
|
2. Deep topic analysis (entities, challenges, constraints, metrics)
|
||||||
- Extract: tech_stack, existing modules, conflict_risk, relevant files
|
3. Generate 2-4 context-aware probing questions
|
||||||
|
4. AskUserQuestion → Store to `session.intent_context`
|
||||||
|
|
||||||
2. **Deep topic analysis** (context-aware):
|
**Example**:
|
||||||
- Extract technical entities from topic + existing codebase
|
```javascript
|
||||||
- Identify core challenges considering existing architecture
|
AskUserQuestion({
|
||||||
- Consider constraints (timeline/budget/compliance)
|
questions: [
|
||||||
- Define success metrics based on current project state
|
{
|
||||||
|
question: "实时协作平台的主要技术挑战?",
|
||||||
3. **Generate 2-4 context-aware probing questions**:
|
header: "核心挑战",
|
||||||
- Reference existing tech stack in questions
|
multiSelect: false,
|
||||||
- Consider integration with existing modules
|
options: [
|
||||||
- Address identified conflict risks from Phase 0
|
{ label: "实时数据同步", description: "100+用户同时在线,状态同步复杂度高" },
|
||||||
- Target root challenges and trade-off priorities
|
{ label: "可扩展性架构", description: "用户规模增长时的系统扩展能力" },
|
||||||
|
{ label: "冲突解决机制", description: "多用户同时编辑的冲突处理策略" }
|
||||||
4. **User interaction**: Output questions using text format (see User Interaction Protocol), wait for user input
|
]
|
||||||
|
},
|
||||||
5. **Parse user answers**: Use intelligent parsing to extract answers from user input (support multiple formats)
|
{
|
||||||
|
question: "MVP阶段最关注的指标?",
|
||||||
6. **Storage**: Store answers to `session.intent_context` with `{extracted_keywords, identified_challenges, user_answers, project_context_used}`
|
header: "优先级",
|
||||||
|
multiSelect: false,
|
||||||
**Example Output**:
|
options: [
|
||||||
```markdown
|
{ label: "功能完整性", description: "实现所有核心功能" },
|
||||||
===== Phase 1: 项目意图分析 =====
|
{ label: "用户体验", description: "流畅的交互体验和响应速度" },
|
||||||
|
{ label: "系统稳定性", description: "高可用性和数据一致性" }
|
||||||
【问题1 - 核心挑战】实时协作平台的主要技术挑战?
|
]
|
||||||
a) 实时数据同步
|
}
|
||||||
说明:100+用户同时在线,状态同步复杂度高
|
]
|
||||||
b) 可扩展性架构
|
})
|
||||||
说明:用户规模增长时的系统扩展能力
|
|
||||||
c) 冲突解决机制
|
|
||||||
说明:多用户同时编辑的冲突处理策略
|
|
||||||
|
|
||||||
【问题2 - 优先级】MVP阶段最关注的指标?
|
|
||||||
a) 功能完整性
|
|
||||||
说明:实现所有核心功能
|
|
||||||
b) 用户体验
|
|
||||||
说明:流畅的交互体验和响应速度
|
|
||||||
c) 系统稳定性
|
|
||||||
说明:高可用性和数据一致性
|
|
||||||
|
|
||||||
请回答 (格式: 1a 2b):
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**User input examples**:
|
|
||||||
- `1a 2c` → Q1:a, Q2:c
|
|
||||||
- `1a,2c` → Q1:a, Q2:c
|
|
||||||
|
|
||||||
**⚠️ CRITICAL**: Questions MUST reference topic keywords. Generic "Project type?" violates dynamic generation.
|
**⚠️ CRITICAL**: Questions MUST reference topic keywords. Generic "Project type?" violates dynamic generation.
|
||||||
|
|
||||||
### Phase 2: Role Selection
|
### Phase 2: Role Selection
|
||||||
|
|
||||||
**⚠️ CRITICAL**: User MUST interact to select roles. NEVER auto-select without user confirmation.
|
**Goal**: User selects roles from intelligent recommendations
|
||||||
|
|
||||||
**Available Roles**:
|
**Available Roles**: data-architect, product-manager, product-owner, scrum-master, subject-matter-expert, system-architect, test-strategist, ui-designer, ux-expert
|
||||||
- data-architect (数据架构师)
|
|
||||||
- product-manager (产品经理)
|
|
||||||
- product-owner (产品负责人)
|
|
||||||
- scrum-master (敏捷教练)
|
|
||||||
- subject-matter-expert (领域专家)
|
|
||||||
- system-architect (系统架构师)
|
|
||||||
- test-strategist (测试策略师)
|
|
||||||
- ui-designer (UI 设计师)
|
|
||||||
- ux-expert (UX 专家)
|
|
||||||
|
|
||||||
**Steps**:
|
**Steps**:
|
||||||
1. **Intelligent role recommendation** (AI analysis):
|
1. Analyze Phase 1 keywords → Recommend count+2 roles with rationale
|
||||||
- Analyze Phase 1 extracted keywords and challenges
|
2. AskUserQuestion (multiSelect=true) → Store to `session.selected_roles`
|
||||||
- Use AI reasoning to determine most relevant roles for the specific topic
|
3. If count+2 > 4, split into multiple rounds
|
||||||
- Recommend count+2 roles (e.g., if user wants 3 roles, recommend 5 options)
|
|
||||||
- Provide clear rationale for each recommended role based on topic context
|
|
||||||
|
|
||||||
2. **User selection** (text interaction):
|
**Example**:
|
||||||
- Output all recommended roles at once (no batching needed for count+2 roles)
|
```javascript
|
||||||
- Display roles with labels and relevance rationale
|
AskUserQuestion({
|
||||||
- Wait for user input in multi-select format
|
questions: [{
|
||||||
- Parse user input (support multiple formats)
|
question: "请选择 3 个角色参与头脑风暴分析",
|
||||||
- **Storage**: Store selections to `session.selected_roles`
|
header: "角色选择",
|
||||||
|
multiSelect: true,
|
||||||
**Example Output**:
|
options: [
|
||||||
```markdown
|
{ label: "system-architect", description: "实时同步架构设计和技术选型" },
|
||||||
===== Phase 2: 角色选择 =====
|
{ label: "ui-designer", description: "协作界面用户体验和状态展示" },
|
||||||
|
{ label: "product-manager", description: "功能优先级和MVP范围决策" },
|
||||||
【角色选择】请选择 3 个角色参与头脑风暴分析
|
{ label: "data-architect", description: "数据同步模型和存储方案设计" }
|
||||||
|
]
|
||||||
a) system-architect (系统架构师)
|
}]
|
||||||
推荐理由:实时同步架构设计和技术选型的核心角色
|
})
|
||||||
b) ui-designer (UI设计师)
|
|
||||||
推荐理由:协作界面用户体验和实时状态展示
|
|
||||||
c) product-manager (产品经理)
|
|
||||||
推荐理由:功能优先级和MVP范围决策
|
|
||||||
d) data-architect (数据架构师)
|
|
||||||
推荐理由:数据同步模型和存储方案设计
|
|
||||||
e) ux-expert (UX专家)
|
|
||||||
推荐理由:多用户协作交互流程优化
|
|
||||||
|
|
||||||
支持格式:
|
|
||||||
- 分别选择:2a 2c 2d (选择a、c、d)
|
|
||||||
- 合并语法:2acd (选择a、c、d)
|
|
||||||
- 逗号分隔:2a,c,d (选择a、c、d)
|
|
||||||
|
|
||||||
请输入选择:
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**User input examples**:
|
**⚠️ CRITICAL**: User MUST interact. NEVER auto-select without confirmation.
|
||||||
- `2acd` → Roles: a, c, d (system-architect, product-manager, data-architect)
|
|
||||||
- `2a 2c 2d` → Same result
|
|
||||||
- `2a,c,d` → Same result
|
|
||||||
|
|
||||||
**Role Recommendation Rules**:
|
### Phase 3: Role-Specific Questions
|
||||||
- NO hardcoded keyword-to-role mappings
|
|
||||||
- Use intelligent analysis of topic, challenges, and requirements
|
|
||||||
- Consider role synergies and coverage gaps
|
|
||||||
- Explain WHY each role is relevant to THIS specific topic
|
|
||||||
- Default recommendation: count+2 roles for user to choose from
|
|
||||||
|
|
||||||
### Phase 3: Role-Specific Questions (Dynamic Generation)
|
|
||||||
|
|
||||||
**Goal**: Generate deep questions mapping role expertise to Phase 1 challenges
|
**Goal**: Generate deep questions mapping role expertise to Phase 1 challenges
|
||||||
|
|
||||||
**Algorithm**:
|
**Algorithm**:
|
||||||
```
|
1. FOR each selected role:
|
||||||
FOR each selected role:
|
- Map Phase 1 challenges to role domain
|
||||||
1. Map Phase 1 challenges to role domain:
|
- Generate 3-4 questions (implementation depth, trade-offs, edge cases)
|
||||||
- "real-time sync" + system-architect → State management pattern
|
- AskUserQuestion per role → Store to `session.role_decisions[role]`
|
||||||
- "100 users" + system-architect → Communication protocol
|
2. Process roles sequentially (one at a time for clarity)
|
||||||
- "low latency" + system-architect → Conflict resolution
|
3. If role needs > 4 questions, split into multiple rounds
|
||||||
|
|
||||||
2. Generate 3-4 questions per role probing implementation depth, trade-offs, edge cases:
|
**Example** (system-architect):
|
||||||
Q: "How handle real-time state sync for 100+ users?" (explores approach)
|
```javascript
|
||||||
Q: "How resolve conflicts when 2 users edit simultaneously?" (explores edge case)
|
AskUserQuestion({
|
||||||
Options: [Event Sourcing/Centralized/CRDT] (concrete, explain trade-offs for THIS use case)
|
questions: [
|
||||||
|
{
|
||||||
3. Output questions in text format per role:
|
question: "100+ 用户实时状态同步方案?",
|
||||||
- Display all questions for current role (3-4 questions, no 10-question limit)
|
header: "状态同步",
|
||||||
- Questions in Chinese (用中文提问)
|
multiSelect: false,
|
||||||
- Wait for user input
|
options: [
|
||||||
- Parse answers using intelligent parsing
|
{ label: "Event Sourcing", description: "完整事件历史,支持回溯,存储成本高" },
|
||||||
- Store answers to session.role_decisions[role]
|
{ label: "集中式状态管理", description: "实现简单,单点瓶颈风险" },
|
||||||
|
{ label: "CRDT", description: "去中心化,自动合并,学习曲线陡" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
question: "两个用户同时编辑冲突如何解决?",
|
||||||
|
header: "冲突解决",
|
||||||
|
multiSelect: false,
|
||||||
|
options: [
|
||||||
|
{ label: "自动合并", description: "用户无感知,可能产生意外结果" },
|
||||||
|
{ label: "手动解决", description: "用户控制,增加交互复杂度" },
|
||||||
|
{ label: "版本控制", description: "保留历史,需要分支管理" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
**Batching Strategy**:
|
### Phase 4: Conflict Resolution
|
||||||
- Each role outputs all its questions at once (typically 3-4 questions)
|
|
||||||
- No need to split per role (within 10-question batch limit)
|
|
||||||
- Multiple roles processed sequentially (one role at a time for clarity)
|
|
||||||
|
|
||||||
**Output Format**: Follow standard format from "User Interaction Protocol" section (single-choice question format)
|
**Goal**: Resolve ACTUAL conflicts from Phase 3 answers
|
||||||
|
|
||||||
**Example Topic-Specific Questions** (system-architect role for "real-time collaboration platform"):
|
|
||||||
- "100+ 用户实时状态同步方案?" → Options: Event Sourcing / 集中式状态管理 / CRDT
|
|
||||||
- "两个用户同时编辑冲突如何解决?" → Options: 自动合并 / 手动解决 / 版本控制
|
|
||||||
- "低延迟通信协议选择?" → Options: WebSocket / SSE / 轮询
|
|
||||||
- "系统扩展性架构方案?" → Options: 微服务 / 单体+缓存 / Serverless
|
|
||||||
|
|
||||||
**Quality Requirements**: See "Question Generation Guidelines" section for detailed rules
|
|
||||||
|
|
||||||
### Phase 4: Cross-Role Clarification (Conflict Detection)
|
|
||||||
|
|
||||||
**Goal**: Resolve ACTUAL conflicts from Phase 3 answers, not pre-defined relationships
|
|
||||||
|
|
||||||
**Algorithm**:
|
**Algorithm**:
|
||||||
```
|
|
||||||
1. Analyze Phase 3 answers for conflicts:
|
1. Analyze Phase 3 answers for conflicts:
|
||||||
- Contradictory choices: product-manager "fast iteration" vs system-architect "complex Event Sourcing"
|
- Contradictory choices (e.g., "fast iteration" vs "complex Event Sourcing")
|
||||||
- Missing integration: ui-designer "Optimistic updates" but system-architect didn't address conflict handling
|
- Missing integration (e.g., "Optimistic updates" but no conflict handling)
|
||||||
- Implicit dependencies: ui-designer "Live cursors" but no auth approach defined
|
- Implicit dependencies (e.g., "Live cursors" but no auth defined)
|
||||||
|
2. Generate clarification questions referencing SPECIFIC Phase 3 choices
|
||||||
2. FOR each detected conflict:
|
3. AskUserQuestion (max 4 per call, multi-round) → Store to `session.cross_role_decisions`
|
||||||
Generate clarification questions referencing SPECIFIC Phase 3 choices
|
|
||||||
|
|
||||||
3. Output clarification questions in text format:
|
|
||||||
- Batch conflicts into rounds (max 10 questions per round)
|
|
||||||
- Display questions with context from Phase 3 answers
|
|
||||||
- Questions in Chinese (用中文提问)
|
|
||||||
- Wait for user input
|
|
||||||
- Parse answers using intelligent parsing
|
|
||||||
- Store answers to session.cross_role_decisions
|
|
||||||
|
|
||||||
4. If NO conflicts: Skip Phase 4 (inform user: "未检测到跨角色冲突,跳过Phase 4")
|
4. If NO conflicts: Skip Phase 4 (inform user: "未检测到跨角色冲突,跳过Phase 4")
|
||||||
|
|
||||||
|
**Example**:
|
||||||
|
```javascript
|
||||||
|
AskUserQuestion({
|
||||||
|
questions: [{
|
||||||
|
question: "CRDT 与 UI 回滚期望冲突,如何解决?\n背景:system-architect选择CRDT,ui-designer期望回滚UI",
|
||||||
|
header: "架构冲突",
|
||||||
|
multiSelect: false,
|
||||||
|
options: [
|
||||||
|
{ label: "采用 CRDT", description: "保持去中心化,调整UI期望" },
|
||||||
|
{ label: "显示合并界面", description: "增加用户交互,展示冲突详情" },
|
||||||
|
{ label: "切换到 OT", description: "支持回滚,增加服务器复杂度" }
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
**Batching Strategy**:
|
### Phase 4.5: Final Clarification
|
||||||
- Maximum 10 clarification questions per round
|
|
||||||
- If conflicts > 10, split into multiple rounds
|
|
||||||
- Prioritize most critical conflicts first
|
|
||||||
|
|
||||||
**Output Format**: Follow standard format from "User Interaction Protocol" section (single-choice question format with background context)
|
**Purpose**: Ensure no important points missed before generating specification
|
||||||
|
|
||||||
**Example Conflict Detection** (from Phase 3 answers):
|
|
||||||
- **Architecture Conflict**: "CRDT 与 UI 回滚期望冲突,如何解决?"
|
|
||||||
- Background: system-architect chose CRDT, ui-designer expects rollback UI
|
|
||||||
- Options: 采用 CRDT / 显示合并界面 / 切换到 OT
|
|
||||||
- **Integration Gap**: "实时光标功能缺少身份认证方案"
|
|
||||||
- Background: ui-designer chose live cursors, no auth defined
|
|
||||||
- Options: OAuth 2.0 / JWT Token / Session-based
|
|
||||||
|
|
||||||
**Quality Requirements**: See "Question Generation Guidelines" section for conflict-specific rules
|
|
||||||
|
|
||||||
### Phase 5: Generate Guidance Specification
|
|
||||||
|
|
||||||
**Steps**:
|
**Steps**:
|
||||||
1. Load all decisions: `intent_context` + `selected_roles` + `role_decisions` + `cross_role_decisions`
|
1. Ask initial check:
|
||||||
2. Transform Q&A pairs to declarative: Questions → Headers, Answers → CONFIRMED/SELECTED statements
|
```javascript
|
||||||
3. Generate guidance-specification.md (template below) - **PRIMARY OUTPUT FILE**
|
AskUserQuestion({
|
||||||
4. Update workflow-session.json with **METADATA ONLY**:
|
questions: [{
|
||||||
- session_id (e.g., "WFS-topic-slug")
|
question: "在生成最终规范之前,是否有前面未澄清的重点需要补充?",
|
||||||
- selected_roles[] (array of role names, e.g., ["system-architect", "ui-designer", "product-manager"])
|
header: "补充确认",
|
||||||
- topic (original user input string)
|
multiSelect: false,
|
||||||
- timestamp (ISO-8601 format)
|
options: [
|
||||||
- phase_completed: "artifacts"
|
{ label: "无需补充", description: "前面的讨论已经足够完整" },
|
||||||
- count_parameter (number from --count flag)
|
{ label: "需要补充", description: "还有重要内容需要澄清" }
|
||||||
5. Validate: No interrogative sentences in .md file, all decisions traceable, no content duplication in .json
|
]
|
||||||
|
}]
|
||||||
|
})
|
||||||
|
```
|
||||||
|
2. If "需要补充":
|
||||||
|
- Analyze user's additional points
|
||||||
|
- Generate progressive questions (not role-bound, interconnected)
|
||||||
|
- AskUserQuestion (max 4 per round) → Store to `session.additional_decisions`
|
||||||
|
- Repeat until user confirms completion
|
||||||
|
3. If "无需补充": Proceed to Phase 5
|
||||||
|
|
||||||
**⚠️ CRITICAL OUTPUT SEPARATION**:
|
**Progressive Pattern**: Questions interconnected, each round informs next, continue until resolved.
|
||||||
- **guidance-specification.md**: Full guidance content (decisions, rationale, integration points)
|
|
||||||
- **workflow-session.json**: Session metadata ONLY (no guidance content, no decisions, no Q&A pairs)
|
|
||||||
- **NO content duplication**: Guidance stays in .md, metadata stays in .json
|
|
||||||
|
|
||||||
## Output Document Template
|
### Phase 5: Generate Specification
|
||||||
|
|
||||||
|
**Steps**:
|
||||||
|
1. Load all decisions: `intent_context` + `selected_roles` + `role_decisions` + `cross_role_decisions` + `additional_decisions`
|
||||||
|
2. Transform Q&A to declarative: Questions → Headers, Answers → CONFIRMED/SELECTED statements
|
||||||
|
3. Generate `guidance-specification.md`
|
||||||
|
4. Update `workflow-session.json` (metadata only)
|
||||||
|
5. Validate: No interrogative sentences, all decisions traceable
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Question Guidelines
|
||||||
|
|
||||||
|
### Core Principle
|
||||||
|
|
||||||
|
**Target**: 开发者(理解技术但需要从用户需求出发)
|
||||||
|
|
||||||
|
**Question Structure**: `[业务场景/需求前提] + [技术关注点]`
|
||||||
|
**Option Structure**: `标签:[技术方案] + 说明:[业务影响] + [技术权衡]`
|
||||||
|
|
||||||
|
### Quality Rules
|
||||||
|
|
||||||
|
**MUST Include**:
|
||||||
|
- ✅ All questions in Chinese (用中文提问)
|
||||||
|
- ✅ 业务场景作为问题前提
|
||||||
|
- ✅ 技术选项的业务影响说明
|
||||||
|
- ✅ 量化指标和约束条件
|
||||||
|
|
||||||
|
**MUST Avoid**:
|
||||||
|
- ❌ 纯技术选型无业务上下文
|
||||||
|
- ❌ 过度抽象的用户体验问题
|
||||||
|
- ❌ 脱离话题的通用架构问题
|
||||||
|
|
||||||
|
### Phase-Specific Requirements
|
||||||
|
|
||||||
|
| Phase | Focus | Key Requirements |
|
||||||
|
|-------|-------|------------------|
|
||||||
|
| 1 | 意图理解 | Reference topic keywords, 用户场景、业务约束、优先级 |
|
||||||
|
| 2 | 角色推荐 | Intelligent analysis (NOT keyword mapping), explain relevance |
|
||||||
|
| 3 | 角色问题 | Reference Phase 1 keywords, concrete options with trade-offs |
|
||||||
|
| 4 | 冲突解决 | Reference SPECIFIC Phase 3 choices, explain impact on both roles |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Output & Governance
|
||||||
|
|
||||||
|
### Output Template
|
||||||
|
|
||||||
**File**: `.workflow/active/WFS-{topic}/.brainstorming/guidance-specification.md`
|
**File**: `.workflow/active/WFS-{topic}/.brainstorming/guidance-specification.md`
|
||||||
|
|
||||||
@@ -478,9 +385,9 @@ FOR each selected role:
|
|||||||
|
|
||||||
## Next Steps
|
## Next Steps
|
||||||
**⚠️ Automatic Continuation** (when called from auto-parallel):
|
**⚠️ Automatic Continuation** (when called from auto-parallel):
|
||||||
- auto-parallel will assign agents to generate role-specific analysis documents
|
- auto-parallel assigns agents for role-specific analysis
|
||||||
- Each selected role gets dedicated conceptual-planning-agent
|
- Each selected role gets conceptual-planning-agent
|
||||||
- Agents read this guidance-specification.md for framework context
|
- Agents read this guidance-specification.md for context
|
||||||
|
|
||||||
## Appendix: Decision Tracking
|
## Appendix: Decision Tracking
|
||||||
| Decision ID | Category | Question | Selected | Phase | Rationale |
|
| Decision ID | Category | Question | Selected | Phase | Rationale |
|
||||||
@@ -490,95 +397,19 @@ FOR each selected role:
|
|||||||
| D-003+ | [Role] | [Q] | [A] | 3 | [Why] |
|
| D-003+ | [Role] | [Q] | [A] | 3 | [Why] |
|
||||||
```
|
```
|
||||||
|
|
||||||
## Question Generation Guidelines
|
### File Structure
|
||||||
|
|
||||||
### Core Principle: Developer-Facing Questions with User Context
|
|
||||||
|
|
||||||
**Target Audience**: 开发者(理解技术但需要从用户需求出发)
|
|
||||||
|
|
||||||
**Generation Philosophy**:
|
|
||||||
1. **Phase 1**: 用户场景、业务约束、优先级(建立上下文)
|
|
||||||
2. **Phase 2**: 基于话题分析的智能角色推荐(非关键词映射)
|
|
||||||
3. **Phase 3**: 业务需求 + 技术选型(需求驱动的技术决策)
|
|
||||||
4. **Phase 4**: 技术冲突的业务权衡(帮助开发者理解影响)
|
|
||||||
|
|
||||||
### Universal Quality Rules
|
|
||||||
|
|
||||||
**Question Structure** (all phases):
|
|
||||||
```
|
|
||||||
[业务场景/需求前提] + [技术关注点]
|
|
||||||
```
|
|
||||||
|
|
||||||
**Option Structure** (all phases):
|
|
||||||
```
|
|
||||||
标签:[技术方案简称] + (业务特征)
|
|
||||||
说明:[业务影响] + [技术权衡]
|
|
||||||
```
|
|
||||||
|
|
||||||
**MUST Include** (all phases):
|
|
||||||
- ✅ All questions in Chinese (用中文提问)
|
|
||||||
- ✅ 业务场景作为问题前提
|
|
||||||
- ✅ 技术选项的业务影响说明
|
|
||||||
- ✅ 量化指标和约束条件
|
|
||||||
|
|
||||||
**MUST Avoid** (all phases):
|
|
||||||
- ❌ 纯技术选型无业务上下文
|
|
||||||
- ❌ 过度抽象的用户体验问题
|
|
||||||
- ❌ 脱离话题的通用架构问题
|
|
||||||
|
|
||||||
### Phase-Specific Requirements
|
|
||||||
|
|
||||||
**Phase 1 Requirements**:
|
|
||||||
- Questions MUST reference topic keywords (NOT generic "Project type?")
|
|
||||||
- Focus: 用户使用场景(谁用?怎么用?多频繁?)、业务约束(预算、时间、团队、合规)
|
|
||||||
- Success metrics: 性能指标、用户体验目标
|
|
||||||
- Priority ranking: MVP vs 长期规划
|
|
||||||
|
|
||||||
**Phase 3 Requirements**:
|
|
||||||
- Questions MUST reference Phase 1 keywords (e.g., "real-time", "100 users")
|
|
||||||
- Options MUST be concrete approaches with relevance to topic
|
|
||||||
- Each option includes trade-offs specific to this use case
|
|
||||||
- Include 业务需求驱动的技术问题、量化指标(并发数、延迟、可用性)
|
|
||||||
|
|
||||||
**Phase 4 Requirements**:
|
|
||||||
- Questions MUST reference SPECIFIC Phase 3 choices in background context
|
|
||||||
- Options address the detected conflict directly
|
|
||||||
- Each option explains impact on both conflicting roles
|
|
||||||
- NEVER use static "Cross-Role Matrix" - ALWAYS analyze actual Phase 3 answers
|
|
||||||
- Focus: 技术冲突的业务权衡、帮助开发者理解不同选择的影响
|
|
||||||
|
|
||||||
## Validation Checklist
|
|
||||||
|
|
||||||
Generated guidance-specification.md MUST:
|
|
||||||
- ✅ No interrogative sentences (use CONFIRMED/SELECTED)
|
|
||||||
- ✅ Every decision traceable to user answer
|
|
||||||
- ✅ Cross-role conflicts resolved or documented
|
|
||||||
- ✅ Next steps concrete and specific
|
|
||||||
- ✅ All Phase 1-4 decisions in session metadata
|
|
||||||
|
|
||||||
## Update Mechanism
|
|
||||||
|
|
||||||
```
|
```
|
||||||
IF guidance-specification.md EXISTS:
|
.workflow/active/WFS-[topic]/
|
||||||
Prompt: "Regenerate completely / Update sections / Cancel"
|
├── workflow-session.json # Metadata ONLY
|
||||||
ELSE:
|
├── .process/
|
||||||
Run full Phase 1-5 flow
|
│ └── context-package.json # Phase 0 output
|
||||||
|
└── .brainstorming/
|
||||||
|
└── guidance-specification.md # Full guidance content
|
||||||
```
|
```
|
||||||
|
|
||||||
## Governance Rules
|
### Session Metadata
|
||||||
|
|
||||||
**Output Requirements**:
|
|
||||||
- All decisions MUST use CONFIRMED/SELECTED (NO "?" in decision sections)
|
|
||||||
- Every decision MUST trace to user answer
|
|
||||||
- Conflicts MUST be resolved (not marked "TBD")
|
|
||||||
- Next steps MUST be actionable
|
|
||||||
- Topic preserved as authoritative reference in session
|
|
||||||
|
|
||||||
**CRITICAL**: Guidance is single source of truth for downstream phases. Ambiguity violates governance.
|
|
||||||
|
|
||||||
## Storage Validation
|
|
||||||
|
|
||||||
**workflow-session.json** (metadata only):
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"session_id": "WFS-{topic-slug}",
|
"session_id": "WFS-{topic-slug}",
|
||||||
@@ -591,14 +422,31 @@ ELSE:
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**⚠️ Rule**: Session JSON stores ONLY metadata (session_id, selected_roles[], topic, timestamps). All guidance content goes to guidance-specification.md.
|
**⚠️ Rule**: Session JSON stores ONLY metadata. All guidance content goes to guidance-specification.md.
|
||||||
|
|
||||||
## File Structure
|
### Validation Checklist
|
||||||
|
|
||||||
|
- ✅ No interrogative sentences (use CONFIRMED/SELECTED)
|
||||||
|
- ✅ Every decision traceable to user answer
|
||||||
|
- ✅ Cross-role conflicts resolved or documented
|
||||||
|
- ✅ Next steps concrete and specific
|
||||||
|
- ✅ No content duplication between .json and .md
|
||||||
|
|
||||||
|
### Update Mechanism
|
||||||
|
|
||||||
```
|
```
|
||||||
.workflow/active/WFS-[topic]/
|
IF guidance-specification.md EXISTS:
|
||||||
├── workflow-session.json # Session metadata ONLY
|
Prompt: "Regenerate completely / Update sections / Cancel"
|
||||||
└── .brainstorming/
|
ELSE:
|
||||||
└── guidance-specification.md # Full guidance content
|
Run full Phase 0-5 flow
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Governance Rules
|
||||||
|
|
||||||
|
- All decisions MUST use CONFIRMED/SELECTED (NO "?" in decision sections)
|
||||||
|
- Every decision MUST trace to user answer
|
||||||
|
- Conflicts MUST be resolved (not marked "TBD")
|
||||||
|
- Next steps MUST be actionable
|
||||||
|
- Topic preserved as authoritative reference
|
||||||
|
|
||||||
|
**CRITICAL**: Guidance is single source of truth for downstream phases. Ambiguity violates governance.
|
||||||
|
|||||||
@@ -141,26 +141,10 @@ OUTPUT_LOCATION: .workflow/active/WFS-{session}/.brainstorming/{role}/
|
|||||||
TOPIC: {user-provided-topic}
|
TOPIC: {user-provided-topic}
|
||||||
|
|
||||||
## Flow Control Steps
|
## Flow Control Steps
|
||||||
1. **load_topic_framework**
|
1. load_topic_framework → .workflow/active/WFS-{session}/.brainstorming/guidance-specification.md
|
||||||
- Action: Load structured topic discussion framework
|
2. load_role_template → ~/.claude/workflows/cli-templates/planning-roles/{role}.md
|
||||||
- Command: Read(.workflow/active/WFS-{session}/.brainstorming/guidance-specification.md)
|
3. load_session_metadata → .workflow/active/WFS-{session}/workflow-session.json
|
||||||
- Output: topic_framework_content
|
4. load_style_skill (ui-designer only, if style_skill_package) → .claude/skills/style-{style_skill_package}/
|
||||||
|
|
||||||
2. **load_role_template**
|
|
||||||
- Action: Load {role-name} planning template
|
|
||||||
- Command: Read(~/.claude/workflows/cli-templates/planning-roles/{role}.md)
|
|
||||||
- Output: role_template_guidelines
|
|
||||||
|
|
||||||
3. **load_session_metadata**
|
|
||||||
- Action: Load session metadata and original user intent
|
|
||||||
- Command: Read(.workflow/active/WFS-{session}/workflow-session.json)
|
|
||||||
- Output: session_context (contains original user prompt as PRIMARY reference)
|
|
||||||
|
|
||||||
4. **load_style_skill** (ONLY for ui-designer role when style_skill_package exists)
|
|
||||||
- Action: Load style SKILL package for design system reference
|
|
||||||
- Command: Read(.claude/skills/style-{style_skill_package}/SKILL.md) AND Read(.workflow/reference_style/{style_skill_package}/design-tokens.json)
|
|
||||||
- Output: style_skill_content, design_tokens
|
|
||||||
- Usage: Apply design tokens in ui-designer analysis and artifacts
|
|
||||||
|
|
||||||
## Analysis Requirements
|
## Analysis Requirements
|
||||||
**Primary Reference**: Original user prompt from workflow-session.json is authoritative
|
**Primary Reference**: Original user prompt from workflow-session.json is authoritative
|
||||||
@@ -170,13 +154,9 @@ TOPIC: {user-provided-topic}
|
|||||||
**Template Integration**: Apply role template guidelines within framework structure
|
**Template Integration**: Apply role template guidelines within framework structure
|
||||||
|
|
||||||
## Expected Deliverables
|
## Expected Deliverables
|
||||||
1. **analysis.md**: Comprehensive {role-name} analysis addressing all framework discussion points
|
1. **analysis.md** (optionally with analysis-{slug}.md sub-documents)
|
||||||
- **File Naming**: MUST start with `analysis` prefix (e.g., `analysis.md`, `analysis-1.md`, `analysis-2.md`)
|
2. **Framework Reference**: @../guidance-specification.md
|
||||||
- **FORBIDDEN**: Never use `recommendations.md` or any filename not starting with `analysis`
|
3. **User Intent Alignment**: Validate against session_context
|
||||||
- **Auto-split if large**: If content >800 lines, split to `analysis-1.md`, `analysis-2.md` (max 3 files: analysis.md, analysis-1.md, analysis-2.md)
|
|
||||||
- **Content**: Includes both analysis AND recommendations sections within analysis files
|
|
||||||
2. **Framework Reference**: Include @../guidance-specification.md reference in analysis
|
|
||||||
3. **User Intent Alignment**: Validate analysis aligns with original user objectives from session_context
|
|
||||||
|
|
||||||
## Completion Criteria
|
## Completion Criteria
|
||||||
- Address each discussion point from guidance-specification.md with {role-name} expertise
|
- Address each discussion point from guidance-specification.md with {role-name} expertise
|
||||||
@@ -199,10 +179,10 @@ TOPIC: {user-provided-topic}
|
|||||||
- guidance-specification.md path
|
- guidance-specification.md path
|
||||||
|
|
||||||
**Validation**:
|
**Validation**:
|
||||||
- Each role creates `.workflow/active/WFS-{topic}/.brainstorming/{role}/analysis.md` (primary file)
|
- Each role creates `.workflow/active/WFS-{topic}/.brainstorming/{role}/analysis.md`
|
||||||
- If content is large (>800 lines), may split to `analysis-1.md`, `analysis-2.md` (max 3 files total)
|
- Optionally with `analysis-{slug}.md` sub-documents (max 5)
|
||||||
- **File naming pattern**: ALL files MUST start with `analysis` prefix (use `analysis*.md` for globbing)
|
- **File pattern**: `analysis*.md` for globbing
|
||||||
- **FORBIDDEN naming**: No `recommendations.md`, `recommendations-*.md`, or any non-`analysis` prefixed files
|
- **FORBIDDEN**: `recommendations.md` or any non-`analysis` prefixed files
|
||||||
- All N role analyses completed
|
- All N role analyses completed
|
||||||
|
|
||||||
**TodoWrite Update (Phase 2 agents dispatched - tasks attached in parallel)**:
|
**TodoWrite Update (Phase 2 agents dispatched - tasks attached in parallel)**:
|
||||||
@@ -453,12 +433,9 @@ CONTEXT_VARS:
|
|||||||
├── workflow-session.json # Session metadata ONLY
|
├── workflow-session.json # Session metadata ONLY
|
||||||
└── .brainstorming/
|
└── .brainstorming/
|
||||||
├── guidance-specification.md # Framework (Phase 1)
|
├── guidance-specification.md # Framework (Phase 1)
|
||||||
├── {role-1}/
|
├── {role}/
|
||||||
│ └── analysis.md # Role analysis (Phase 2)
|
│ ├── analysis.md # Main document (with optional @references)
|
||||||
├── {role-2}/
|
│ └── analysis-{slug}.md # Section documents (max 5)
|
||||||
│ └── analysis.md
|
|
||||||
├── {role-N}/
|
|
||||||
│ └── analysis.md
|
|
||||||
└── synthesis-specification.md # Integration (Phase 3)
|
└── synthesis-specification.md # Integration (Phase 3)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -2,325 +2,318 @@
|
|||||||
name: synthesis
|
name: synthesis
|
||||||
description: Clarify and refine role analyses through intelligent Q&A and targeted updates with synthesis agent
|
description: Clarify and refine role analyses through intelligent Q&A and targeted updates with synthesis agent
|
||||||
argument-hint: "[optional: --session session-id]"
|
argument-hint: "[optional: --session session-id]"
|
||||||
allowed-tools: Task(conceptual-planning-agent), TodoWrite(*), Read(*), Write(*), Edit(*), Glob(*)
|
allowed-tools: Task(conceptual-planning-agent), TodoWrite(*), Read(*), Write(*), Edit(*), Glob(*), AskUserQuestion(*)
|
||||||
---
|
---
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Three-phase workflow to eliminate ambiguities and enhance conceptual depth in role analyses:
|
Six-phase workflow to eliminate ambiguities and enhance conceptual depth in role analyses:
|
||||||
|
|
||||||
**Phase 1-2 (Main Flow)**: Session detection → File discovery → Path preparation
|
**Phase 1-2**: Session detection → File discovery → Path preparation
|
||||||
|
**Phase 3A**: Cross-role analysis agent → Generate recommendations
|
||||||
|
**Phase 4**: User selects enhancements → User answers clarifications (via AskUserQuestion)
|
||||||
|
**Phase 5**: Parallel update agents (one per role)
|
||||||
|
**Phase 6**: Context package update → Metadata update → Completion report
|
||||||
|
|
||||||
**Phase 3A (Analysis Agent)**: Cross-role analysis → Generate recommendations
|
All user interactions use AskUserQuestion tool (max 4 questions per call, multi-round).
|
||||||
|
|
||||||
**Phase 4 (Main Flow)**: User selects enhancements → User answers clarifications → Build update plan
|
|
||||||
|
|
||||||
**Phase 5 (Parallel Update Agents)**: Each agent updates ONE role document → Parallel execution
|
|
||||||
|
|
||||||
**Phase 6 (Main Flow)**: Metadata update → Completion report
|
|
||||||
|
|
||||||
**Key Features**:
|
|
||||||
- Multi-agent architecture (analysis agent + parallel update agents)
|
|
||||||
- Clear separation: Agent analysis vs Main flow interaction
|
|
||||||
- Parallel document updates (one agent per role)
|
|
||||||
- User intent alignment validation
|
|
||||||
|
|
||||||
**Document Flow**:
|
**Document Flow**:
|
||||||
- Input: `[role]/analysis*.md`, `guidance-specification.md`, session metadata
|
- Input: `[role]/analysis*.md`, `guidance-specification.md`, session metadata
|
||||||
- Output: Updated `[role]/analysis*.md` with Enhancements + Clarifications sections
|
- Output: Updated `[role]/analysis*.md` with Enhancements + Clarifications sections
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Reference
|
||||||
|
|
||||||
|
### Phase Summary
|
||||||
|
|
||||||
|
| Phase | Goal | Executor | Output |
|
||||||
|
|-------|------|----------|--------|
|
||||||
|
| 1 | Session detection | Main flow | session_id, brainstorm_dir |
|
||||||
|
| 2 | File discovery | Main flow | role_analysis_paths |
|
||||||
|
| 3A | Cross-role analysis | Agent | enhancement_recommendations |
|
||||||
|
| 4 | User interaction | Main flow + AskUserQuestion | update_plan |
|
||||||
|
| 5 | Document updates | Parallel agents | Updated analysis*.md |
|
||||||
|
| 6 | Finalization | Main flow | context-package.json, report |
|
||||||
|
|
||||||
|
### AskUserQuestion Pattern
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Enhancement selection (multi-select)
|
||||||
|
AskUserQuestion({
|
||||||
|
questions: [{
|
||||||
|
question: "请选择要应用的改进建议",
|
||||||
|
header: "改进选择",
|
||||||
|
multiSelect: true,
|
||||||
|
options: [
|
||||||
|
{ label: "EP-001: API Contract", description: "添加详细的请求/响应 schema 定义" },
|
||||||
|
{ label: "EP-002: User Intent", description: "明确用户需求优先级和验收标准" }
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
})
|
||||||
|
|
||||||
|
// Clarification questions (single-select, multi-round)
|
||||||
|
AskUserQuestion({
|
||||||
|
questions: [
|
||||||
|
{
|
||||||
|
question: "MVP 阶段的核心目标是什么?",
|
||||||
|
header: "用户意图",
|
||||||
|
multiSelect: false,
|
||||||
|
options: [
|
||||||
|
{ label: "快速验证", description: "最小功能集,快速上线获取反馈" },
|
||||||
|
{ label: "技术壁垒", description: "完善架构,为长期发展打基础" },
|
||||||
|
{ label: "功能完整", description: "覆盖所有规划功能,延迟上线" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Task Tracking
|
## Task Tracking
|
||||||
|
|
||||||
```json
|
```json
|
||||||
[
|
[
|
||||||
{"content": "Detect session and validate analyses", "status": "in_progress", "activeForm": "Detecting session"},
|
{"content": "Detect session and validate analyses", "status": "pending", "activeForm": "Detecting session"},
|
||||||
{"content": "Discover role analysis file paths", "status": "pending", "activeForm": "Discovering paths"},
|
{"content": "Discover role analysis file paths", "status": "pending", "activeForm": "Discovering paths"},
|
||||||
{"content": "Execute analysis agent (cross-role analysis)", "status": "pending", "activeForm": "Executing analysis agent"},
|
{"content": "Execute analysis agent (cross-role analysis)", "status": "pending", "activeForm": "Executing analysis"},
|
||||||
{"content": "Present enhancements for user selection", "status": "pending", "activeForm": "Presenting enhancements"},
|
{"content": "Present enhancements via AskUserQuestion", "status": "pending", "activeForm": "Selecting enhancements"},
|
||||||
{"content": "Generate and present clarification questions", "status": "pending", "activeForm": "Clarifying with user"},
|
{"content": "Clarification questions via AskUserQuestion", "status": "pending", "activeForm": "Clarifying"},
|
||||||
{"content": "Build update plan from user input", "status": "pending", "activeForm": "Building update plan"},
|
{"content": "Execute parallel update agents", "status": "pending", "activeForm": "Updating documents"},
|
||||||
{"content": "Execute parallel update agents (one per role)", "status": "pending", "activeForm": "Updating documents in parallel"},
|
{"content": "Update context package and metadata", "status": "pending", "activeForm": "Finalizing"}
|
||||||
{"content": "Update session metadata and generate report", "status": "pending", "activeForm": "Finalizing session"}
|
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Execution Phases
|
## Execution Phases
|
||||||
|
|
||||||
### Phase 1: Discovery & Validation
|
### Phase 1: Discovery & Validation
|
||||||
|
|
||||||
1. **Detect Session**: Use `--session` parameter or find `.workflow/active/WFS-*` directories
|
1. **Detect Session**: Use `--session` parameter or find `.workflow/active/WFS-*`
|
||||||
2. **Validate Files**:
|
2. **Validate Files**:
|
||||||
- `guidance-specification.md` (optional, warn if missing)
|
- `guidance-specification.md` (optional, warn if missing)
|
||||||
- `*/analysis*.md` (required, error if empty)
|
- `*/analysis*.md` (required, error if empty)
|
||||||
3. **Load User Intent**: Extract from `workflow-session.json` (project/description field)
|
3. **Load User Intent**: Extract from `workflow-session.json`
|
||||||
|
|
||||||
### Phase 2: Role Discovery & Path Preparation
|
### Phase 2: Role Discovery & Path Preparation
|
||||||
|
|
||||||
**Main flow prepares file paths for Agent**:
|
**Main flow prepares file paths for Agent**:
|
||||||
|
|
||||||
1. **Discover Analysis Files**:
|
1. **Discover Analysis Files**:
|
||||||
- Glob(.workflow/active/WFS-{session}/.brainstorming/*/analysis*.md)
|
- Glob: `.workflow/active/WFS-{session}/.brainstorming/*/analysis*.md`
|
||||||
- Supports: analysis.md, analysis-1.md, analysis-2.md, analysis-3.md
|
- Supports: analysis.md + analysis-{slug}.md (max 5)
|
||||||
- Validate: At least one file exists (error if empty)
|
|
||||||
|
|
||||||
2. **Extract Role Information**:
|
2. **Extract Role Information**:
|
||||||
- `role_analysis_paths`: Relative paths from brainstorm_dir
|
- `role_analysis_paths`: Relative paths
|
||||||
- `participating_roles`: Role names extracted from directory paths
|
- `participating_roles`: Role names from directories
|
||||||
|
|
||||||
3. **Pass to Agent** (Phase 3):
|
3. **Pass to Agent**: session_id, brainstorm_dir, role_analysis_paths, participating_roles
|
||||||
- `session_id`
|
|
||||||
- `brainstorm_dir`: .workflow/active/WFS-{session}/.brainstorming/
|
|
||||||
- `role_analysis_paths`: ["product-manager/analysis.md", "system-architect/analysis-1.md", ...]
|
|
||||||
- `participating_roles`: ["product-manager", "system-architect", ...]
|
|
||||||
|
|
||||||
**Main Flow Responsibility**: File discovery and path preparation only (NO file content reading)
|
|
||||||
|
|
||||||
### Phase 3A: Analysis & Enhancement Agent
|
### Phase 3A: Analysis & Enhancement Agent
|
||||||
|
|
||||||
**First agent call**: Cross-role analysis and generate enhancement recommendations
|
**Agent executes cross-role analysis**:
|
||||||
|
|
||||||
```bash
|
```javascript
|
||||||
Task(conceptual-planning-agent): "
|
Task(conceptual-planning-agent, `
|
||||||
## Agent Mission
|
## Agent Mission
|
||||||
Analyze role documents, identify conflicts/gaps, and generate enhancement recommendations
|
Analyze role documents, identify conflicts/gaps, generate enhancement recommendations
|
||||||
|
|
||||||
## Input from Main Flow
|
## Input
|
||||||
- brainstorm_dir: {brainstorm_dir}
|
- brainstorm_dir: ${brainstorm_dir}
|
||||||
- role_analysis_paths: {role_analysis_paths}
|
- role_analysis_paths: ${role_analysis_paths}
|
||||||
- participating_roles: {participating_roles}
|
- participating_roles: ${participating_roles}
|
||||||
|
|
||||||
## Execution Instructions
|
## Flow Control Steps
|
||||||
[FLOW_CONTROL]
|
1. load_session_metadata → Read workflow-session.json
|
||||||
|
2. load_role_analyses → Read all analysis files
|
||||||
|
3. cross_role_analysis → Identify consensus, conflicts, gaps, ambiguities
|
||||||
|
4. generate_recommendations → Format as EP-001, EP-002, ...
|
||||||
|
|
||||||
### Flow Control Steps
|
## Output Format
|
||||||
**AGENT RESPONSIBILITY**: Execute these analysis steps sequentially with context accumulation:
|
|
||||||
|
|
||||||
1. **load_session_metadata**
|
|
||||||
- Action: Load original user intent as primary reference
|
|
||||||
- Command: Read({brainstorm_dir}/../workflow-session.json)
|
|
||||||
- Output: original_user_intent (from project/description field)
|
|
||||||
|
|
||||||
2. **load_role_analyses**
|
|
||||||
- Action: Load all role analysis documents
|
|
||||||
- Command: For each path in role_analysis_paths: Read({brainstorm_dir}/{path})
|
|
||||||
- Output: role_analyses_content_map = {role_name: content}
|
|
||||||
|
|
||||||
3. **cross_role_analysis**
|
|
||||||
- Action: Identify consensus themes, conflicts, gaps, underspecified areas
|
|
||||||
- Output: consensus_themes, conflicting_views, gaps_list, ambiguities
|
|
||||||
|
|
||||||
4. **generate_recommendations**
|
|
||||||
- Action: Convert cross-role analysis findings into structured enhancement recommendations
|
|
||||||
- Format: EP-001, EP-002, ... (sequential numbering)
|
|
||||||
- Fields: id, title, affected_roles, category, current_state, enhancement, rationale, priority
|
|
||||||
- Taxonomy: Map to 9 categories (User Intent, Requirements, Architecture, UX, Feasibility, Risk, Process, Decisions, Terminology)
|
|
||||||
- Output: enhancement_recommendations (JSON array)
|
|
||||||
|
|
||||||
### Output to Main Flow
|
|
||||||
Return JSON array:
|
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
\"id\": \"EP-001\",
|
"id": "EP-001",
|
||||||
\"title\": \"API Contract Specification\",
|
"title": "API Contract Specification",
|
||||||
\"affected_roles\": [\"system-architect\", \"api-designer\"],
|
"affected_roles": ["system-architect", "api-designer"],
|
||||||
\"category\": \"Architecture\",
|
"category": "Architecture",
|
||||||
\"current_state\": \"High-level API descriptions\",
|
"current_state": "High-level API descriptions",
|
||||||
\"enhancement\": \"Add detailed contract definitions with request/response schemas\",
|
"enhancement": "Add detailed contract definitions",
|
||||||
\"rationale\": \"Enables precise implementation and testing\",
|
"rationale": "Enables precise implementation",
|
||||||
\"priority\": \"High\"
|
"priority": "High"
|
||||||
},
|
}
|
||||||
...
|
|
||||||
]
|
]
|
||||||
|
`)
|
||||||
"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Phase 4: Main Flow User Interaction
|
### Phase 4: User Interaction
|
||||||
|
|
||||||
**Main flow handles all user interaction via text output**:
|
**All interactions via AskUserQuestion (Chinese questions)**
|
||||||
|
|
||||||
**⚠️ CRITICAL**: ALL questions MUST use Chinese (所有问题必须用中文) for better user understanding
|
#### Step 1: Enhancement Selection
|
||||||
|
|
||||||
1. **Present Enhancement Options** (multi-select):
|
```javascript
|
||||||
```markdown
|
// If enhancements > 4, split into multiple rounds
|
||||||
===== Enhancement 选择 =====
|
const enhancements = [...]; // from Phase 3A
|
||||||
|
const BATCH_SIZE = 4;
|
||||||
|
|
||||||
请选择要应用的改进建议(可多选):
|
for (let i = 0; i < enhancements.length; i += BATCH_SIZE) {
|
||||||
|
const batch = enhancements.slice(i, i + BATCH_SIZE);
|
||||||
|
|
||||||
a) EP-001: API Contract Specification
|
AskUserQuestion({
|
||||||
影响角色:system-architect, api-designer
|
questions: [{
|
||||||
说明:添加详细的请求/响应 schema 定义
|
question: `请选择要应用的改进建议 (第${Math.floor(i/BATCH_SIZE)+1}轮)`,
|
||||||
|
header: "改进选择",
|
||||||
|
multiSelect: true,
|
||||||
|
options: batch.map(ep => ({
|
||||||
|
label: `${ep.id}: ${ep.title}`,
|
||||||
|
description: `影响: ${ep.affected_roles.join(', ')} | ${ep.enhancement}`
|
||||||
|
}))
|
||||||
|
}]
|
||||||
|
})
|
||||||
|
|
||||||
b) EP-002: User Intent Validation
|
// Store selections before next round
|
||||||
影响角色:product-manager, ux-expert
|
}
|
||||||
说明:明确用户需求优先级和验收标准
|
|
||||||
|
|
||||||
c) EP-003: Error Handling Strategy
|
// User can also skip: provide "跳过" option
|
||||||
影响角色:system-architect
|
|
||||||
说明:统一异常处理和降级方案
|
|
||||||
|
|
||||||
支持格式:1abc 或 1a 1b 1c 或 1a,b,c
|
|
||||||
请输入选择(可跳过输入 skip):
|
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Generate Clarification Questions** (based on analysis agent output):
|
#### Step 2: Clarification Questions
|
||||||
- ✅ **ALL questions in Chinese (所有问题必须用中文)**
|
|
||||||
- Use 9-category taxonomy scan results
|
|
||||||
- Prioritize most critical questions (no hard limit)
|
|
||||||
- Each with 2-4 options + descriptions
|
|
||||||
|
|
||||||
3. **Interactive Clarification Loop** (max 10 questions per round):
|
```javascript
|
||||||
```markdown
|
// Generate questions based on 9-category taxonomy scan
|
||||||
===== Clarification 问题 (第 1/2 轮) =====
|
// Categories: User Intent, Requirements, Architecture, UX, Feasibility, Risk, Process, Decisions, Terminology
|
||||||
|
|
||||||
【问题1 - 用户意图】MVP 阶段的核心目标是什么?
|
const clarifications = [...]; // from analysis
|
||||||
a) 快速验证市场需求
|
const BATCH_SIZE = 4;
|
||||||
说明:最小功能集,快速上线获取反馈
|
|
||||||
b) 建立技术壁垒
|
|
||||||
说明:完善架构,为长期发展打基础
|
|
||||||
c) 实现功能完整性
|
|
||||||
说明:覆盖所有规划功能,延迟上线
|
|
||||||
|
|
||||||
【问题2 - 架构决策】技术栈选择的优先考虑因素?
|
for (let i = 0; i < clarifications.length; i += BATCH_SIZE) {
|
||||||
a) 团队熟悉度
|
const batch = clarifications.slice(i, i + BATCH_SIZE);
|
||||||
说明:使用现有技术栈,降低学习成本
|
const currentRound = Math.floor(i / BATCH_SIZE) + 1;
|
||||||
b) 技术先进性
|
const totalRounds = Math.ceil(clarifications.length / BATCH_SIZE);
|
||||||
说明:采用新技术,提升竞争力
|
|
||||||
c) 生态成熟度
|
|
||||||
说明:选择成熟方案,保证稳定性
|
|
||||||
|
|
||||||
...(最多10个问题)
|
AskUserQuestion({
|
||||||
|
questions: batch.map(q => ({
|
||||||
|
question: q.question,
|
||||||
|
header: q.category.substring(0, 12),
|
||||||
|
multiSelect: false,
|
||||||
|
options: q.options.map(opt => ({
|
||||||
|
label: opt.label,
|
||||||
|
description: opt.description
|
||||||
|
}))
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
|
||||||
请回答 (格式: 1a 2b 3c...):
|
// Store answers before next round
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Wait for user input → Parse all answers in batch → Continue to next round if needed
|
### Question Guidelines
|
||||||
|
|
||||||
4. **Build Update Plan**:
|
**Target**: 开发者(理解技术但需要从用户需求出发)
|
||||||
```
|
|
||||||
|
**Question Structure**: `[跨角色分析发现] + [需要澄清的决策点]`
|
||||||
|
**Option Structure**: `标签:[具体方案] + 说明:[业务影响] + [技术权衡]`
|
||||||
|
|
||||||
|
**9-Category Taxonomy**:
|
||||||
|
|
||||||
|
| Category | Focus | Example Question Pattern |
|
||||||
|
|----------|-------|--------------------------|
|
||||||
|
| User Intent | 用户目标 | "MVP阶段核心目标?" + 验证/壁垒/完整性 |
|
||||||
|
| Requirements | 需求细化 | "功能优先级如何排序?" + 核心/增强/可选 |
|
||||||
|
| Architecture | 架构决策 | "技术栈选择考量?" + 熟悉度/先进性/成熟度 |
|
||||||
|
| UX | 用户体验 | "交互复杂度取舍?" + 简洁/丰富/渐进 |
|
||||||
|
| Feasibility | 可行性 | "资源约束下的范围?" + 最小/标准/完整 |
|
||||||
|
| Risk | 风险管理 | "风险容忍度?" + 保守/平衡/激进 |
|
||||||
|
| Process | 流程规范 | "迭代节奏?" + 快速/稳定/灵活 |
|
||||||
|
| Decisions | 决策确认 | "冲突解决方案?" + 方案A/方案B/折中 |
|
||||||
|
| Terminology | 术语统一 | "统一使用哪个术语?" + 术语A/术语B |
|
||||||
|
|
||||||
|
**Quality Rules**:
|
||||||
|
|
||||||
|
**MUST Include**:
|
||||||
|
- ✅ All questions in Chinese (用中文提问)
|
||||||
|
- ✅ 基于跨角色分析的具体发现
|
||||||
|
- ✅ 选项包含业务影响说明
|
||||||
|
- ✅ 解决实际的模糊点或冲突
|
||||||
|
|
||||||
|
**MUST Avoid**:
|
||||||
|
- ❌ 与角色分析无关的通用问题
|
||||||
|
- ❌ 重复已在 artifacts 阶段确认的内容
|
||||||
|
- ❌ 过于细节的实现级问题
|
||||||
|
|
||||||
|
#### Step 3: Build Update Plan
|
||||||
|
|
||||||
|
```javascript
|
||||||
update_plan = {
|
update_plan = {
|
||||||
"role1": {
|
"role1": {
|
||||||
"enhancements": [EP-001, EP-003],
|
"enhancements": ["EP-001", "EP-003"],
|
||||||
"clarifications": [
|
"clarifications": [
|
||||||
{"question": "...", "answer": "...", "category": "..."},
|
{"question": "...", "answer": "...", "category": "..."}
|
||||||
...
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"role2": {
|
"role2": {
|
||||||
"enhancements": [EP-002],
|
"enhancements": ["EP-002"],
|
||||||
"clarifications": [...]
|
"clarifications": [...]
|
||||||
},
|
}
|
||||||
...
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Phase 5: Parallel Document Update Agents
|
### Phase 5: Parallel Document Update Agents
|
||||||
|
|
||||||
**Parallel agent calls** (one per role needing updates):
|
**Execute in parallel** (one agent per role):
|
||||||
|
|
||||||
```bash
|
```javascript
|
||||||
# Execute in parallel using single message with multiple Task calls
|
// Single message with multiple Task calls for parallelism
|
||||||
|
Task(conceptual-planning-agent, `
|
||||||
Task(conceptual-planning-agent): "
|
|
||||||
## Agent Mission
|
## Agent Mission
|
||||||
Apply user-confirmed enhancements and clarifications to {role1} analysis document
|
Apply enhancements and clarifications to ${role} analysis
|
||||||
|
|
||||||
## Agent Intent
|
## Input
|
||||||
- **Goal**: Integrate synthesis results into role-specific analysis
|
- role: ${role}
|
||||||
- **Scope**: Update ONLY {role1}/analysis.md (isolated, no cross-role dependencies)
|
- analysis_path: ${brainstorm_dir}/${role}/analysis.md
|
||||||
- **Constraints**: Preserve original insights, add refinements without deletion
|
- enhancements: ${role_enhancements}
|
||||||
|
- clarifications: ${role_clarifications}
|
||||||
|
- original_user_intent: ${intent}
|
||||||
|
|
||||||
## Input from Main Flow
|
## Flow Control Steps
|
||||||
- role: {role1}
|
1. load_current_analysis → Read analysis file
|
||||||
- analysis_path: {brainstorm_dir}/{role1}/analysis.md
|
2. add_clarifications_section → Insert Q&A section
|
||||||
- enhancements: [EP-001, EP-003] (user-selected improvements)
|
3. apply_enhancements → Integrate into relevant sections
|
||||||
- clarifications: [{question, answer, category}, ...] (user-confirmed answers)
|
4. resolve_contradictions → Remove conflicts
|
||||||
- original_user_intent: {from session metadata}
|
5. enforce_terminology → Align terminology
|
||||||
|
6. validate_intent → Verify alignment with user intent
|
||||||
|
7. write_updated_file → Save changes
|
||||||
|
|
||||||
## Execution Instructions
|
## Output
|
||||||
[FLOW_CONTROL]
|
Updated ${role}/analysis.md
|
||||||
|
`)
|
||||||
### Flow Control Steps
|
|
||||||
**AGENT RESPONSIBILITY**: Execute these update steps sequentially:
|
|
||||||
|
|
||||||
1. **load_current_analysis**
|
|
||||||
- Action: Load existing role analysis document
|
|
||||||
- Command: Read({brainstorm_dir}/{role1}/analysis.md)
|
|
||||||
- Output: current_analysis_content
|
|
||||||
|
|
||||||
2. **add_clarifications_section**
|
|
||||||
- Action: Insert Clarifications section with Q&A
|
|
||||||
- Format: \"## Clarifications\\n### Session {date}\\n- **Q**: {question} (Category: {category})\\n **A**: {answer}\"
|
|
||||||
- Output: analysis_with_clarifications
|
|
||||||
|
|
||||||
3. **apply_enhancements**
|
|
||||||
- Action: Integrate EP-001, EP-003 into relevant sections
|
|
||||||
- Strategy: Locate section by category (Architecture → Architecture section, UX → User Experience section)
|
|
||||||
- Output: analysis_with_enhancements
|
|
||||||
|
|
||||||
4. **resolve_contradictions**
|
|
||||||
- Action: Remove conflicts between original content and clarifications/enhancements
|
|
||||||
- Output: contradiction_free_analysis
|
|
||||||
|
|
||||||
5. **enforce_terminology_consistency**
|
|
||||||
- Action: Align all terminology with user-confirmed choices from clarifications
|
|
||||||
- Output: terminology_consistent_analysis
|
|
||||||
|
|
||||||
6. **validate_user_intent_alignment**
|
|
||||||
- Action: Verify all updates support original_user_intent
|
|
||||||
- Output: validated_analysis
|
|
||||||
|
|
||||||
7. **write_updated_file**
|
|
||||||
- Action: Save final analysis document
|
|
||||||
- Command: Write({brainstorm_dir}/{role1}/analysis.md, validated_analysis)
|
|
||||||
- Output: File update confirmation
|
|
||||||
|
|
||||||
### Output
|
|
||||||
Updated {role1}/analysis.md with Clarifications section + enhanced content
|
|
||||||
")
|
|
||||||
|
|
||||||
Task(conceptual-planning-agent): "
|
|
||||||
## Agent Mission
|
|
||||||
Apply user-confirmed enhancements and clarifications to {role2} analysis document
|
|
||||||
|
|
||||||
## Agent Intent
|
|
||||||
- **Goal**: Integrate synthesis results into role-specific analysis
|
|
||||||
- **Scope**: Update ONLY {role2}/analysis.md (isolated, no cross-role dependencies)
|
|
||||||
- **Constraints**: Preserve original insights, add refinements without deletion
|
|
||||||
|
|
||||||
## Input from Main Flow
|
|
||||||
- role: {role2}
|
|
||||||
- analysis_path: {brainstorm_dir}/{role2}/analysis.md
|
|
||||||
- enhancements: [EP-002] (user-selected improvements)
|
|
||||||
- clarifications: [{question, answer, category}, ...] (user-confirmed answers)
|
|
||||||
- original_user_intent: {from session metadata}
|
|
||||||
|
|
||||||
## Execution Instructions
|
|
||||||
[FLOW_CONTROL]
|
|
||||||
|
|
||||||
### Flow Control Steps
|
|
||||||
**AGENT RESPONSIBILITY**: Execute same 7 update steps as {role1} agent (load → clarifications → enhancements → contradictions → terminology → validation → write)
|
|
||||||
|
|
||||||
### Output
|
|
||||||
Updated {role2}/analysis.md with Clarifications section + enhanced content
|
|
||||||
")
|
|
||||||
|
|
||||||
# ... repeat for each role in update_plan
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Agent Characteristics**:
|
**Agent Characteristics**:
|
||||||
- **Intent**: Integrate user-confirmed synthesis results (NOT generate new analysis)
|
- **Isolation**: Each agent updates exactly ONE role (parallel safe)
|
||||||
- **Isolation**: Each agent updates exactly ONE role (parallel execution safe)
|
- **Dependencies**: Zero cross-agent dependencies
|
||||||
- **Context**: Minimal - receives only role-specific enhancements + clarifications
|
|
||||||
- **Dependencies**: Zero cross-agent dependencies (full parallelism)
|
|
||||||
- **Validation**: All updates must align with original_user_intent
|
- **Validation**: All updates must align with original_user_intent
|
||||||
|
|
||||||
### Phase 6: Completion & Metadata Update
|
### Phase 6: Finalization
|
||||||
|
|
||||||
**Main flow finalizes**:
|
#### Step 1: Update Context Package
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Sync updated analyses to context-package.json
|
||||||
|
const context_pkg = Read(".workflow/active/WFS-{session}/.process/context-package.json")
|
||||||
|
|
||||||
|
// Update guidance-specification if exists
|
||||||
|
// Update synthesis-specification if exists
|
||||||
|
// Re-read all role analysis files
|
||||||
|
// Update metadata timestamps
|
||||||
|
|
||||||
|
Write(context_pkg_path, JSON.stringify(context_pkg))
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Step 2: Update Session Metadata
|
||||||
|
|
||||||
1. Wait for all parallel agents to complete
|
|
||||||
2. Update workflow-session.json:
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"phases": {
|
"phases": {
|
||||||
@@ -330,15 +323,13 @@ Updated {role2}/analysis.md with Clarifications section + enhanced content
|
|||||||
"completed_at": "timestamp",
|
"completed_at": "timestamp",
|
||||||
"participating_roles": [...],
|
"participating_roles": [...],
|
||||||
"clarification_results": {
|
"clarification_results": {
|
||||||
"enhancements_applied": ["EP-001", "EP-002", ...],
|
"enhancements_applied": ["EP-001", "EP-002"],
|
||||||
"questions_asked": 3,
|
"questions_asked": 3,
|
||||||
"categories_clarified": ["Architecture", "UX", ...],
|
"categories_clarified": ["Architecture", "UX"],
|
||||||
"roles_updated": ["role1", "role2", ...],
|
"roles_updated": ["role1", "role2"]
|
||||||
"outstanding_items": []
|
|
||||||
},
|
},
|
||||||
"quality_metrics": {
|
"quality_metrics": {
|
||||||
"user_intent_alignment": "validated",
|
"user_intent_alignment": "validated",
|
||||||
"requirement_coverage": "comprehensive",
|
|
||||||
"ambiguity_resolution": "complete",
|
"ambiguity_resolution": "complete",
|
||||||
"terminology_consistency": "enforced"
|
"terminology_consistency": "enforced"
|
||||||
}
|
}
|
||||||
@@ -347,7 +338,8 @@ Updated {role2}/analysis.md with Clarifications section + enhanced content
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Generate completion report (show to user):
|
#### Step 3: Completion Report
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
## ✅ Clarification Complete
|
## ✅ Clarification Complete
|
||||||
|
|
||||||
@@ -359,9 +351,11 @@ Updated {role2}/analysis.md with Clarifications section + enhanced content
|
|||||||
✅ PROCEED: `/workflow:plan --session WFS-{session-id}`
|
✅ PROCEED: `/workflow:plan --session WFS-{session-id}`
|
||||||
```
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
|
|
||||||
**Location**: `.workflow/active/WFS-{session}/.brainstorming/[role]/analysis*.md` (in-place updates)
|
**Location**: `.workflow/active/WFS-{session}/.brainstorming/[role]/analysis*.md`
|
||||||
|
|
||||||
**Updated Structure**:
|
**Updated Structure**:
|
||||||
```markdown
|
```markdown
|
||||||
@@ -381,116 +375,24 @@ Updated {role2}/analysis.md with Clarifications section + enhanced content
|
|||||||
- Ambiguities resolved, placeholders removed
|
- Ambiguities resolved, placeholders removed
|
||||||
- Consistent terminology
|
- Consistent terminology
|
||||||
|
|
||||||
### Phase 6: Update Context Package
|
---
|
||||||
|
|
||||||
**Purpose**: Sync updated role analyses to context-package.json to avoid stale cache
|
|
||||||
|
|
||||||
**Operations**:
|
|
||||||
```bash
|
|
||||||
context_pkg_path = ".workflow/active/WFS-{session}/.process/context-package.json"
|
|
||||||
|
|
||||||
# 1. Read existing package
|
|
||||||
context_pkg = Read(context_pkg_path)
|
|
||||||
|
|
||||||
# 2. Re-read brainstorm artifacts (now with synthesis enhancements)
|
|
||||||
brainstorm_dir = ".workflow/active/WFS-{session}/.brainstorming"
|
|
||||||
|
|
||||||
# 2.1 Update guidance-specification if exists
|
|
||||||
IF exists({brainstorm_dir}/guidance-specification.md):
|
|
||||||
context_pkg.brainstorm_artifacts.guidance_specification.content = Read({brainstorm_dir}/guidance-specification.md)
|
|
||||||
context_pkg.brainstorm_artifacts.guidance_specification.updated_at = NOW()
|
|
||||||
|
|
||||||
# 2.2 Update synthesis-specification if exists
|
|
||||||
IF exists({brainstorm_dir}/synthesis-specification.md):
|
|
||||||
IF context_pkg.brainstorm_artifacts.synthesis_output:
|
|
||||||
context_pkg.brainstorm_artifacts.synthesis_output.content = Read({brainstorm_dir}/synthesis-specification.md)
|
|
||||||
context_pkg.brainstorm_artifacts.synthesis_output.updated_at = NOW()
|
|
||||||
|
|
||||||
# 2.3 Re-read all role analysis files
|
|
||||||
role_analysis_files = Glob({brainstorm_dir}/*/analysis*.md)
|
|
||||||
context_pkg.brainstorm_artifacts.role_analyses = []
|
|
||||||
|
|
||||||
FOR file IN role_analysis_files:
|
|
||||||
role_name = extract_role_from_path(file) # e.g., "ui-designer"
|
|
||||||
relative_path = file.replace({brainstorm_dir}/, "")
|
|
||||||
|
|
||||||
context_pkg.brainstorm_artifacts.role_analyses.push({
|
|
||||||
"role": role_name,
|
|
||||||
"files": [{
|
|
||||||
"path": relative_path,
|
|
||||||
"type": "primary",
|
|
||||||
"content": Read(file),
|
|
||||||
"updated_at": NOW()
|
|
||||||
}]
|
|
||||||
})
|
|
||||||
|
|
||||||
# 3. Update metadata
|
|
||||||
context_pkg.metadata.updated_at = NOW()
|
|
||||||
context_pkg.metadata.synthesis_timestamp = NOW()
|
|
||||||
|
|
||||||
# 4. Write back
|
|
||||||
Write(context_pkg_path, JSON.stringify(context_pkg, indent=2))
|
|
||||||
|
|
||||||
REPORT: "✅ Updated context-package.json with synthesis results"
|
|
||||||
```
|
|
||||||
|
|
||||||
**TodoWrite Update**:
|
|
||||||
```json
|
|
||||||
{"content": "Update context package with synthesis results", "status": "completed", "activeForm": "Updating context package"}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Session Metadata
|
|
||||||
|
|
||||||
Update `workflow-session.json`:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"phases": {
|
|
||||||
"BRAINSTORM": {
|
|
||||||
"status": "clarification_completed",
|
|
||||||
"clarification_completed": true,
|
|
||||||
"completed_at": "timestamp",
|
|
||||||
"participating_roles": ["product-manager", "system-architect", ...],
|
|
||||||
"clarification_results": {
|
|
||||||
"questions_asked": 3,
|
|
||||||
"categories_clarified": ["Architecture & Design", ...],
|
|
||||||
"roles_updated": ["system-architect", "ui-designer", ...],
|
|
||||||
"outstanding_items": []
|
|
||||||
},
|
|
||||||
"quality_metrics": {
|
|
||||||
"user_intent_alignment": "validated",
|
|
||||||
"requirement_coverage": "comprehensive",
|
|
||||||
"ambiguity_resolution": "complete",
|
|
||||||
"terminology_consistency": "enforced",
|
|
||||||
"decision_transparency": "documented"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Quality Checklist
|
## Quality Checklist
|
||||||
|
|
||||||
**Content**:
|
**Content**:
|
||||||
- All role analyses loaded/analyzed
|
- ✅ All role analyses loaded/analyzed
|
||||||
- Cross-role analysis (consensus, conflicts, gaps)
|
- ✅ Cross-role analysis (consensus, conflicts, gaps)
|
||||||
- 9-category ambiguity scan
|
- ✅ 9-category ambiguity scan
|
||||||
- Questions prioritized
|
- ✅ Questions prioritized
|
||||||
- Clarifications documented
|
|
||||||
|
|
||||||
**Analysis**:
|
**Analysis**:
|
||||||
- User intent validated
|
- ✅ User intent validated
|
||||||
- Cross-role synthesis complete
|
- ✅ Cross-role synthesis complete
|
||||||
- Ambiguities resolved
|
- ✅ Ambiguities resolved
|
||||||
- Correct roles updated
|
- ✅ Terminology consistent
|
||||||
- Terminology consistent
|
|
||||||
- Contradictions removed
|
|
||||||
|
|
||||||
**Documents**:
|
**Documents**:
|
||||||
- Clarifications section formatted
|
- ✅ Clarifications section formatted
|
||||||
- Sections reflect answers
|
- ✅ Sections reflect answers
|
||||||
- No placeholders (TODO/TBD)
|
- ✅ No placeholders (TODO/TBD)
|
||||||
- Valid Markdown
|
- ✅ Valid Markdown
|
||||||
- Cross-references maintained
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ Analyze project for workflow initialization and generate .workflow/project.json.
|
|||||||
|
|
||||||
## MANDATORY FIRST STEPS
|
## MANDATORY FIRST STEPS
|
||||||
1. Execute: cat ~/.claude/workflows/cli-templates/schemas/project-json-schema.json (get schema reference)
|
1. Execute: cat ~/.claude/workflows/cli-templates/schemas/project-json-schema.json (get schema reference)
|
||||||
2. Execute: ~/.claude/scripts/get_modules_by_depth.sh (get project structure)
|
2. Execute: ccw tool exec get_modules_by_depth '{}' (get project structure)
|
||||||
|
|
||||||
## Task
|
## Task
|
||||||
Generate complete project.json with:
|
Generate complete project.json with:
|
||||||
@@ -122,7 +122,7 @@ Generate complete project.json with:
|
|||||||
1. Structural scan: get_modules_by_depth.sh, find, wc -l
|
1. Structural scan: get_modules_by_depth.sh, find, wc -l
|
||||||
2. Semantic analysis: Gemini for patterns/architecture
|
2. Semantic analysis: Gemini for patterns/architecture
|
||||||
3. Synthesis: Merge findings
|
3. Synthesis: Merge findings
|
||||||
4. ${regenerate ? 'Merge with preserved features/statistics from .workflow/project.json.backup' : ''}
|
4. ${regenerate ? 'Merge with preserved features/development_index/statistics from .workflow/project.json.backup' : ''}
|
||||||
5. Write JSON: Write('.workflow/project.json', jsonContent)
|
5. Write JSON: Write('.workflow/project.json', jsonContent)
|
||||||
6. Report: Return brief completion summary
|
6. Report: Return brief completion summary
|
||||||
|
|
||||||
|
|||||||
@@ -556,6 +556,58 @@ codex --full-auto exec "[Verify plan acceptance criteria at ${plan.json}]" --ski
|
|||||||
- `@{plan.json}` → `@${executionContext.session.artifacts.plan}`
|
- `@{plan.json}` → `@${executionContext.session.artifacts.plan}`
|
||||||
- `[@{exploration.json}]` → exploration files from artifacts (if exists)
|
- `[@{exploration.json}]` → exploration files from artifacts (if exists)
|
||||||
|
|
||||||
|
### Step 6: Update Development Index
|
||||||
|
|
||||||
|
**Trigger**: After all executions complete (regardless of code review)
|
||||||
|
|
||||||
|
**Skip Condition**: Skip if `.workflow/project.json` does not exist
|
||||||
|
|
||||||
|
**Operations**:
|
||||||
|
```javascript
|
||||||
|
const projectJsonPath = '.workflow/project.json'
|
||||||
|
if (!fileExists(projectJsonPath)) return // Silent skip
|
||||||
|
|
||||||
|
const projectJson = JSON.parse(Read(projectJsonPath))
|
||||||
|
|
||||||
|
// Initialize if needed
|
||||||
|
if (!projectJson.development_index) {
|
||||||
|
projectJson.development_index = { feature: [], enhancement: [], bugfix: [], refactor: [], docs: [] }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Detect category from keywords
|
||||||
|
function detectCategory(text) {
|
||||||
|
text = text.toLowerCase()
|
||||||
|
if (/\b(fix|bug|error|issue|crash)\b/.test(text)) return 'bugfix'
|
||||||
|
if (/\b(refactor|cleanup|reorganize)\b/.test(text)) return 'refactor'
|
||||||
|
if (/\b(doc|readme|comment)\b/.test(text)) return 'docs'
|
||||||
|
if (/\b(add|new|create|implement)\b/.test(text)) return 'feature'
|
||||||
|
return 'enhancement'
|
||||||
|
}
|
||||||
|
|
||||||
|
// Detect sub_feature from task file paths
|
||||||
|
function detectSubFeature(tasks) {
|
||||||
|
const dirs = tasks.map(t => t.file?.split('/').slice(-2, -1)[0]).filter(Boolean)
|
||||||
|
const counts = dirs.reduce((a, d) => { a[d] = (a[d] || 0) + 1; return a }, {})
|
||||||
|
return Object.entries(counts).sort((a, b) => b[1] - a[1])[0]?.[0] || 'general'
|
||||||
|
}
|
||||||
|
|
||||||
|
const category = detectCategory(`${planObject.summary} ${planObject.approach}`)
|
||||||
|
const entry = {
|
||||||
|
title: planObject.summary.slice(0, 60),
|
||||||
|
sub_feature: detectSubFeature(planObject.tasks),
|
||||||
|
date: new Date().toISOString().split('T')[0],
|
||||||
|
description: planObject.approach.slice(0, 100),
|
||||||
|
status: previousExecutionResults.every(r => r.status === 'completed') ? 'completed' : 'partial',
|
||||||
|
session_id: executionContext?.session?.id || null
|
||||||
|
}
|
||||||
|
|
||||||
|
projectJson.development_index[category].push(entry)
|
||||||
|
projectJson.statistics.last_updated = new Date().toISOString()
|
||||||
|
Write(projectJsonPath, JSON.stringify(projectJson, null, 2))
|
||||||
|
|
||||||
|
console.log(`✓ Development index: [${category}] ${entry.title}`)
|
||||||
|
```
|
||||||
|
|
||||||
## Best Practices
|
## Best Practices
|
||||||
|
|
||||||
**Input Modes**: In-memory (lite-plan), prompt (standalone), file (JSON/text)
|
**Input Modes**: In-memory (lite-plan), prompt (standalone), file (JSON/text)
|
||||||
|
|||||||
@@ -43,11 +43,11 @@ Phase 1: Bug Analysis & Diagnosis
|
|||||||
|- needsDiagnosis=true -> Launch parallel cli-explore-agents (1-4 based on severity)
|
|- needsDiagnosis=true -> Launch parallel cli-explore-agents (1-4 based on severity)
|
||||||
+- needsDiagnosis=false (hotfix) -> Skip directly to Phase 3 (Fix Planning)
|
+- needsDiagnosis=false (hotfix) -> Skip directly to Phase 3 (Fix Planning)
|
||||||
|
|
||||||
Phase 2: Clarification (optional)
|
Phase 2: Clarification (optional, multi-round)
|
||||||
|- Aggregate clarification_needs from all diagnosis angles
|
|- Aggregate clarification_needs from all diagnosis angles
|
||||||
|- Deduplicate similar questions
|
|- Deduplicate similar questions
|
||||||
+- Decision:
|
+- Decision:
|
||||||
|- Has clarifications -> AskUserQuestion (max 4 questions)
|
|- Has clarifications -> AskUserQuestion (max 4 questions per round, multiple rounds allowed)
|
||||||
+- No clarifications -> Skip to Phase 3
|
+- No clarifications -> Skip to Phase 3
|
||||||
|
|
||||||
Phase 3: Fix Planning (NO CODE EXECUTION - planning only)
|
Phase 3: Fix Planning (NO CODE EXECUTION - planning only)
|
||||||
@@ -71,18 +71,18 @@ Phase 5: Dispatch
|
|||||||
|
|
||||||
### Phase 1: Intelligent Multi-Angle Diagnosis
|
### Phase 1: Intelligent Multi-Angle Diagnosis
|
||||||
|
|
||||||
**Session Setup**:
|
**Session Setup** (MANDATORY - follow exactly):
|
||||||
```javascript
|
```javascript
|
||||||
// Helper: Get UTC+8 (China Standard Time) ISO string
|
// Helper: Get UTC+8 (China Standard Time) ISO string
|
||||||
const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
|
const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
|
||||||
|
|
||||||
const bugSlug = bug_description.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 40)
|
const bugSlug = bug_description.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 40)
|
||||||
const timestamp = getUtc8ISOString().replace(/[:.]/g, '-')
|
const dateStr = getUtc8ISOString().substring(0, 10) // Format: 2025-11-29
|
||||||
const shortTimestamp = timestamp.substring(0, 19).replace('T', '-')
|
|
||||||
const sessionId = `${bugSlug}-${shortTimestamp}`
|
const sessionId = `${bugSlug}-${dateStr}` // e.g., "user-avatar-upload-fails-2025-11-29"
|
||||||
const sessionFolder = `.workflow/.lite-fix/${sessionId}`
|
const sessionFolder = `.workflow/.lite-fix/${sessionId}`
|
||||||
|
|
||||||
bash(`mkdir -p ${sessionFolder}`)
|
bash(`mkdir -p ${sessionFolder} && test -d ${sessionFolder} && echo "SUCCESS: ${sessionFolder}" || echo "FAILED: ${sessionFolder}"`)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Diagnosis Decision Logic**:
|
**Diagnosis Decision Logic**:
|
||||||
@@ -177,7 +177,7 @@ Execute **${angle}** diagnosis for bug root cause analysis. Analyze codebase fro
|
|||||||
|
|
||||||
## MANDATORY FIRST STEPS (Execute by Agent)
|
## MANDATORY FIRST STEPS (Execute by Agent)
|
||||||
**You (cli-explore-agent) MUST execute these steps in order:**
|
**You (cli-explore-agent) MUST execute these steps in order:**
|
||||||
1. Run: ~/.claude/scripts/get_modules_by_depth.sh (project structure)
|
1. Run: ccw tool exec get_modules_by_depth '{}' (project structure)
|
||||||
2. Run: rg -l "{error_keyword_from_bug}" --type ts (locate relevant files)
|
2. Run: rg -l "{error_keyword_from_bug}" --type ts (locate relevant files)
|
||||||
3. Execute: cat ~/.claude/workflows/cli-templates/schemas/diagnosis-json-schema.json (get output schema reference)
|
3. Execute: cat ~/.claude/workflows/cli-templates/schemas/diagnosis-json-schema.json (get output schema reference)
|
||||||
|
|
||||||
@@ -216,7 +216,7 @@ Execute **${angle}** diagnosis for bug root cause analysis. Analyze codebase fro
|
|||||||
- fix_hints: Suggested fix approaches from ${angle} viewpoint
|
- fix_hints: Suggested fix approaches from ${angle} viewpoint
|
||||||
- dependencies: Dependencies relevant to ${angle} diagnosis
|
- dependencies: Dependencies relevant to ${angle} diagnosis
|
||||||
- constraints: ${angle}-specific limitations affecting fix
|
- constraints: ${angle}-specific limitations affecting fix
|
||||||
- clarification_needs: ${angle}-related ambiguities (with options array)
|
- clarification_needs: ${angle}-related ambiguities (options array + recommended index)
|
||||||
- _metadata.diagnosis_angle: "${angle}"
|
- _metadata.diagnosis_angle: "${angle}"
|
||||||
- _metadata.diagnosis_index: ${index + 1}
|
- _metadata.diagnosis_index: ${index + 1}
|
||||||
|
|
||||||
@@ -228,7 +228,7 @@ Execute **${angle}** diagnosis for bug root cause analysis. Analyze codebase fro
|
|||||||
- [ ] Fix hints are actionable (specific code changes, not generic advice)
|
- [ ] Fix hints are actionable (specific code changes, not generic advice)
|
||||||
- [ ] Reproduction steps are verifiable
|
- [ ] Reproduction steps are verifiable
|
||||||
- [ ] JSON output follows schema exactly
|
- [ ] JSON output follows schema exactly
|
||||||
- [ ] clarification_needs includes options array
|
- [ ] clarification_needs includes options + recommended
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
Write: ${sessionFolder}/diagnosis-${angle}.json
|
Write: ${sessionFolder}/diagnosis-${angle}.json
|
||||||
@@ -287,10 +287,12 @@ Angles diagnosed: ${diagnosisManifest.diagnoses.map(d => d.angle).join(', ')}
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Phase 2: Clarification (Optional)
|
### Phase 2: Clarification (Optional, Multi-Round)
|
||||||
|
|
||||||
**Skip if**: No diagnosis or `clarification_needs` is empty across all diagnoses
|
**Skip if**: No diagnosis or `clarification_needs` is empty across all diagnoses
|
||||||
|
|
||||||
|
**⚠️ CRITICAL**: AskUserQuestion tool limits max 4 questions per call. **MUST execute multiple rounds** to exhaust all clarification needs - do NOT stop at round 1.
|
||||||
|
|
||||||
**Aggregate clarification needs from all diagnosis angles**:
|
**Aggregate clarification needs from all diagnosis angles**:
|
||||||
```javascript
|
```javascript
|
||||||
// Load manifest and all diagnosis files
|
// Load manifest and all diagnosis files
|
||||||
@@ -327,18 +329,35 @@ function deduplicateClarifications(clarifications) {
|
|||||||
|
|
||||||
const uniqueClarifications = deduplicateClarifications(allClarifications)
|
const uniqueClarifications = deduplicateClarifications(allClarifications)
|
||||||
|
|
||||||
|
// Multi-round clarification: batch questions (max 4 per round)
|
||||||
|
// ⚠️ MUST execute ALL rounds until uniqueClarifications exhausted
|
||||||
if (uniqueClarifications.length > 0) {
|
if (uniqueClarifications.length > 0) {
|
||||||
AskUserQuestion({
|
const BATCH_SIZE = 4
|
||||||
questions: uniqueClarifications.map(need => ({
|
const totalRounds = Math.ceil(uniqueClarifications.length / BATCH_SIZE)
|
||||||
question: `[${need.source_angle}] ${need.question}\n\nContext: ${need.context}`,
|
|
||||||
header: need.source_angle,
|
for (let i = 0; i < uniqueClarifications.length; i += BATCH_SIZE) {
|
||||||
multiSelect: false,
|
const batch = uniqueClarifications.slice(i, i + BATCH_SIZE)
|
||||||
options: need.options.map(opt => ({
|
const currentRound = Math.floor(i / BATCH_SIZE) + 1
|
||||||
label: opt,
|
|
||||||
description: `Use ${opt} approach`
|
console.log(`### Clarification Round ${currentRound}/${totalRounds}`)
|
||||||
|
|
||||||
|
AskUserQuestion({
|
||||||
|
questions: batch.map(need => ({
|
||||||
|
question: `[${need.source_angle}] ${need.question}\n\nContext: ${need.context}`,
|
||||||
|
header: need.source_angle,
|
||||||
|
multiSelect: false,
|
||||||
|
options: need.options.map((opt, index) => {
|
||||||
|
const isRecommended = need.recommended === index
|
||||||
|
return {
|
||||||
|
label: isRecommended ? `${opt} ★` : opt,
|
||||||
|
description: isRecommended ? `Use ${opt} approach (Recommended)` : `Use ${opt} approach`
|
||||||
|
}
|
||||||
|
})
|
||||||
}))
|
}))
|
||||||
}))
|
})
|
||||||
})
|
|
||||||
|
// Store batch responses in clarificationContext before next round
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -568,7 +587,7 @@ SlashCommand(command="/workflow:lite-execute --in-memory --mode bugfix")
|
|||||||
## Session Folder Structure
|
## Session Folder Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
.workflow/.lite-fix/{bug-slug}-{timestamp}/
|
.workflow/.lite-fix/{bug-slug}-{YYYY-MM-DD}/
|
||||||
|- diagnosis-{angle1}.json # Diagnosis angle 1
|
|- diagnosis-{angle1}.json # Diagnosis angle 1
|
||||||
|- diagnosis-{angle2}.json # Diagnosis angle 2
|
|- diagnosis-{angle2}.json # Diagnosis angle 2
|
||||||
|- diagnosis-{angle3}.json # Diagnosis angle 3 (if applicable)
|
|- diagnosis-{angle3}.json # Diagnosis angle 3 (if applicable)
|
||||||
|
|||||||
@@ -43,11 +43,11 @@ Phase 1: Task Analysis & Exploration
|
|||||||
├─ needsExploration=true → Launch parallel cli-explore-agents (1-4 based on complexity)
|
├─ needsExploration=true → Launch parallel cli-explore-agents (1-4 based on complexity)
|
||||||
└─ needsExploration=false → Skip to Phase 2/3
|
└─ needsExploration=false → Skip to Phase 2/3
|
||||||
|
|
||||||
Phase 2: Clarification (optional)
|
Phase 2: Clarification (optional, multi-round)
|
||||||
├─ Aggregate clarification_needs from all exploration angles
|
├─ Aggregate clarification_needs from all exploration angles
|
||||||
├─ Deduplicate similar questions
|
├─ Deduplicate similar questions
|
||||||
└─ Decision:
|
└─ Decision:
|
||||||
├─ Has clarifications → AskUserQuestion (max 4 questions)
|
├─ Has clarifications → AskUserQuestion (max 4 questions per round, multiple rounds allowed)
|
||||||
└─ No clarifications → Skip to Phase 3
|
└─ No clarifications → Skip to Phase 3
|
||||||
|
|
||||||
Phase 3: Planning (NO CODE EXECUTION - planning only)
|
Phase 3: Planning (NO CODE EXECUTION - planning only)
|
||||||
@@ -71,18 +71,18 @@ Phase 5: Dispatch
|
|||||||
|
|
||||||
### Phase 1: Intelligent Multi-Angle Exploration
|
### Phase 1: Intelligent Multi-Angle Exploration
|
||||||
|
|
||||||
**Session Setup**:
|
**Session Setup** (MANDATORY - follow exactly):
|
||||||
```javascript
|
```javascript
|
||||||
// Helper: Get UTC+8 (China Standard Time) ISO string
|
// Helper: Get UTC+8 (China Standard Time) ISO string
|
||||||
const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
|
const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
|
||||||
|
|
||||||
const taskSlug = task_description.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 40)
|
const taskSlug = task_description.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 40)
|
||||||
const timestamp = getUtc8ISOString().replace(/[:.]/g, '-')
|
const dateStr = getUtc8ISOString().substring(0, 10) // Format: 2025-11-29
|
||||||
const shortTimestamp = timestamp.substring(0, 19).replace('T', '-')
|
|
||||||
const sessionId = `${taskSlug}-${shortTimestamp}`
|
const sessionId = `${taskSlug}-${dateStr}` // e.g., "implement-jwt-refresh-2025-11-29"
|
||||||
const sessionFolder = `.workflow/.lite-plan/${sessionId}`
|
const sessionFolder = `.workflow/.lite-plan/${sessionId}`
|
||||||
|
|
||||||
bash(`mkdir -p ${sessionFolder}`)
|
bash(`mkdir -p ${sessionFolder} && test -d ${sessionFolder} && echo "SUCCESS: ${sessionFolder}" || echo "FAILED: ${sessionFolder}"`)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Exploration Decision Logic**:
|
**Exploration Decision Logic**:
|
||||||
@@ -170,7 +170,7 @@ Execute **${angle}** exploration for task planning context. Analyze codebase fro
|
|||||||
|
|
||||||
## MANDATORY FIRST STEPS (Execute by Agent)
|
## MANDATORY FIRST STEPS (Execute by Agent)
|
||||||
**You (cli-explore-agent) MUST execute these steps in order:**
|
**You (cli-explore-agent) MUST execute these steps in order:**
|
||||||
1. Run: ~/.claude/scripts/get_modules_by_depth.sh (project structure)
|
1. Run: ccw tool exec get_modules_by_depth '{}' (project structure)
|
||||||
2. Run: rg -l "{keyword_from_task}" --type ts (locate relevant files)
|
2. Run: rg -l "{keyword_from_task}" --type ts (locate relevant files)
|
||||||
3. Execute: cat ~/.claude/workflows/cli-templates/schemas/explore-json-schema.json (get output schema reference)
|
3. Execute: cat ~/.claude/workflows/cli-templates/schemas/explore-json-schema.json (get output schema reference)
|
||||||
|
|
||||||
@@ -206,7 +206,7 @@ Execute **${angle}** exploration for task planning context. Analyze codebase fro
|
|||||||
- dependencies: Dependencies relevant to ${angle}
|
- dependencies: Dependencies relevant to ${angle}
|
||||||
- integration_points: Where to integrate from ${angle} viewpoint (include file:line locations)
|
- integration_points: Where to integrate from ${angle} viewpoint (include file:line locations)
|
||||||
- constraints: ${angle}-specific limitations/conventions
|
- constraints: ${angle}-specific limitations/conventions
|
||||||
- clarification_needs: ${angle}-related ambiguities (with options array)
|
- clarification_needs: ${angle}-related ambiguities (options array + recommended index)
|
||||||
- _metadata.exploration_angle: "${angle}"
|
- _metadata.exploration_angle: "${angle}"
|
||||||
|
|
||||||
## Success Criteria
|
## Success Criteria
|
||||||
@@ -217,7 +217,7 @@ Execute **${angle}** exploration for task planning context. Analyze codebase fro
|
|||||||
- [ ] Integration points include file:line locations
|
- [ ] Integration points include file:line locations
|
||||||
- [ ] Constraints are project-specific to ${angle}
|
- [ ] Constraints are project-specific to ${angle}
|
||||||
- [ ] JSON output follows schema exactly
|
- [ ] JSON output follows schema exactly
|
||||||
- [ ] clarification_needs includes options array
|
- [ ] clarification_needs includes options + recommended
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
Write: ${sessionFolder}/exploration-${angle}.json
|
Write: ${sessionFolder}/exploration-${angle}.json
|
||||||
@@ -276,10 +276,12 @@ Angles explored: ${explorationManifest.explorations.map(e => e.angle).join(', ')
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Phase 2: Clarification (Optional)
|
### Phase 2: Clarification (Optional, Multi-Round)
|
||||||
|
|
||||||
**Skip if**: No exploration or `clarification_needs` is empty across all explorations
|
**Skip if**: No exploration or `clarification_needs` is empty across all explorations
|
||||||
|
|
||||||
|
**⚠️ CRITICAL**: AskUserQuestion tool limits max 4 questions per call. **MUST execute multiple rounds** to exhaust all clarification needs - do NOT stop at round 1.
|
||||||
|
|
||||||
**Aggregate clarification needs from all exploration angles**:
|
**Aggregate clarification needs from all exploration angles**:
|
||||||
```javascript
|
```javascript
|
||||||
// Load manifest and all exploration files
|
// Load manifest and all exploration files
|
||||||
@@ -302,32 +304,40 @@ explorations.forEach(exp => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// Deduplicate by question similarity
|
// Deduplicate exact same questions only
|
||||||
function deduplicateClarifications(clarifications) {
|
const seen = new Set()
|
||||||
const unique = []
|
const dedupedClarifications = allClarifications.filter(c => {
|
||||||
clarifications.forEach(c => {
|
const key = c.question.toLowerCase()
|
||||||
const isDuplicate = unique.some(u =>
|
if (seen.has(key)) return false
|
||||||
u.question.toLowerCase() === c.question.toLowerCase()
|
seen.add(key)
|
||||||
)
|
return true
|
||||||
if (!isDuplicate) unique.push(c)
|
})
|
||||||
})
|
|
||||||
return unique
|
|
||||||
}
|
|
||||||
|
|
||||||
const uniqueClarifications = deduplicateClarifications(allClarifications)
|
// Multi-round clarification: batch questions (max 4 per round)
|
||||||
|
if (dedupedClarifications.length > 0) {
|
||||||
|
const BATCH_SIZE = 4
|
||||||
|
const totalRounds = Math.ceil(dedupedClarifications.length / BATCH_SIZE)
|
||||||
|
|
||||||
if (uniqueClarifications.length > 0) {
|
for (let i = 0; i < dedupedClarifications.length; i += BATCH_SIZE) {
|
||||||
AskUserQuestion({
|
const batch = dedupedClarifications.slice(i, i + BATCH_SIZE)
|
||||||
questions: uniqueClarifications.map(need => ({
|
const currentRound = Math.floor(i / BATCH_SIZE) + 1
|
||||||
question: `[${need.source_angle}] ${need.question}\n\nContext: ${need.context}`,
|
|
||||||
header: need.source_angle,
|
console.log(`### Clarification Round ${currentRound}/${totalRounds}`)
|
||||||
multiSelect: false,
|
|
||||||
options: need.options.map(opt => ({
|
AskUserQuestion({
|
||||||
label: opt,
|
questions: batch.map(need => ({
|
||||||
description: `Use ${opt} approach`
|
question: `[${need.source_angle}] ${need.question}\n\nContext: ${need.context}`,
|
||||||
|
header: need.source_angle.substring(0, 12),
|
||||||
|
multiSelect: false,
|
||||||
|
options: need.options.map((opt, index) => ({
|
||||||
|
label: need.recommended === index ? `${opt} ★` : opt,
|
||||||
|
description: need.recommended === index ? `Recommended` : `Use ${opt}`
|
||||||
|
}))
|
||||||
}))
|
}))
|
||||||
}))
|
})
|
||||||
})
|
|
||||||
|
// Store batch responses in clarificationContext before next round
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -552,7 +562,7 @@ SlashCommand(command="/workflow:lite-execute --in-memory")
|
|||||||
## Session Folder Structure
|
## Session Folder Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
.workflow/.lite-plan/{task-slug}-{timestamp}/
|
.workflow/.lite-plan/{task-slug}-{YYYY-MM-DD}/
|
||||||
├── exploration-{angle1}.json # Exploration angle 1
|
├── exploration-{angle1}.json # Exploration angle 1
|
||||||
├── exploration-{angle2}.json # Exploration angle 2
|
├── exploration-{angle2}.json # Exploration angle 2
|
||||||
├── exploration-{angle3}.json # Exploration angle 3 (if applicable)
|
├── exploration-{angle3}.json # Exploration angle 3 (if applicable)
|
||||||
|
|||||||
@@ -46,8 +46,7 @@ Automated fix orchestrator with **two-phase architecture**: AI-powered planning
|
|||||||
1. **Intelligent Planning**: AI-powered analysis identifies optimal grouping and execution strategy
|
1. **Intelligent Planning**: AI-powered analysis identifies optimal grouping and execution strategy
|
||||||
2. **Multi-stage Coordination**: Supports complex parallel + serial execution with dependency management
|
2. **Multi-stage Coordination**: Supports complex parallel + serial execution with dependency management
|
||||||
3. **Conservative Safety**: Mandatory test verification with automatic rollback on failure
|
3. **Conservative Safety**: Mandatory test verification with automatic rollback on failure
|
||||||
4. **Real-time Visibility**: Dashboard shows planning progress, stage timeline, and active agents
|
4. **Resume Support**: Checkpoint-based recovery for interrupted sessions
|
||||||
5. **Resume Support**: Checkpoint-based recovery for interrupted sessions
|
|
||||||
|
|
||||||
### Orchestrator Boundary (CRITICAL)
|
### Orchestrator Boundary (CRITICAL)
|
||||||
- **ONLY command** for automated review finding fixes
|
- **ONLY command** for automated review finding fixes
|
||||||
@@ -59,14 +58,14 @@ Automated fix orchestrator with **two-phase architecture**: AI-powered planning
|
|||||||
|
|
||||||
```
|
```
|
||||||
Phase 1: Discovery & Initialization
|
Phase 1: Discovery & Initialization
|
||||||
└─ Validate export file, create fix session structure, initialize state files → Generate fix-dashboard.html
|
└─ Validate export file, create fix session structure, initialize state files
|
||||||
|
|
||||||
Phase 2: Planning Coordination (@cli-planning-agent)
|
Phase 2: Planning Coordination (@cli-planning-agent)
|
||||||
├─ Analyze findings for patterns and dependencies
|
├─ Analyze findings for patterns and dependencies
|
||||||
├─ Group by file + dimension + root cause similarity
|
├─ Group by file + dimension + root cause similarity
|
||||||
├─ Determine execution strategy (parallel/serial/hybrid)
|
├─ Determine execution strategy (parallel/serial/hybrid)
|
||||||
├─ Generate fix timeline with stages
|
├─ Generate fix timeline with stages
|
||||||
└─ Output: fix-plan.json (dashboard auto-polls for status)
|
└─ Output: fix-plan.json
|
||||||
|
|
||||||
Phase 3: Execution Orchestration (Stage-based)
|
Phase 3: Execution Orchestration (Stage-based)
|
||||||
For each timeline stage:
|
For each timeline stage:
|
||||||
@@ -198,12 +197,10 @@ if (result.passRate < 100%) {
|
|||||||
- Session creation: Generate fix-session-id (`fix-{timestamp}`)
|
- Session creation: Generate fix-session-id (`fix-{timestamp}`)
|
||||||
- Directory structure: Create `{review-dir}/fixes/{fix-session-id}/` with subdirectories
|
- Directory structure: Create `{review-dir}/fixes/{fix-session-id}/` with subdirectories
|
||||||
- State files: Initialize active-fix-session.json (session marker)
|
- State files: Initialize active-fix-session.json (session marker)
|
||||||
- Dashboard generation: Create fix-dashboard.html from template (see Dashboard Generation below)
|
|
||||||
- TodoWrite initialization: Set up 4-phase tracking
|
- TodoWrite initialization: Set up 4-phase tracking
|
||||||
|
|
||||||
**Phase 2: Planning Coordination**
|
**Phase 2: Planning Coordination**
|
||||||
- Launch @cli-planning-agent with findings data and project context
|
- Launch @cli-planning-agent with findings data and project context
|
||||||
- Monitor planning progress (dashboard shows "Planning fixes..." indicator)
|
|
||||||
- Validate fix-plan.json output (schema conformance, includes metadata with session status)
|
- Validate fix-plan.json output (schema conformance, includes metadata with session status)
|
||||||
- Load plan into memory for execution phase
|
- Load plan into memory for execution phase
|
||||||
- TodoWrite update: Mark planning complete, start execution
|
- TodoWrite update: Mark planning complete, start execution
|
||||||
@@ -216,7 +213,6 @@ if (result.passRate < 100%) {
|
|||||||
- Assign agent IDs (agents update their fix-progress-{N}.json)
|
- Assign agent IDs (agents update their fix-progress-{N}.json)
|
||||||
- Handle agent failures gracefully (mark group as failed, continue)
|
- Handle agent failures gracefully (mark group as failed, continue)
|
||||||
- Advance to next stage only when current stage complete
|
- Advance to next stage only when current stage complete
|
||||||
- Dashboard polls and aggregates fix-progress-{N}.json files for display
|
|
||||||
|
|
||||||
**Phase 4: Completion & Aggregation**
|
**Phase 4: Completion & Aggregation**
|
||||||
- Collect final status from all fix-progress-{N}.json files
|
- Collect final status from all fix-progress-{N}.json files
|
||||||
@@ -224,7 +220,7 @@ if (result.passRate < 100%) {
|
|||||||
- Update fix-history.json with new session entry
|
- Update fix-history.json with new session entry
|
||||||
- Remove active-fix-session.json
|
- Remove active-fix-session.json
|
||||||
- TodoWrite completion: Mark all phases done
|
- TodoWrite completion: Mark all phases done
|
||||||
- Output summary to user with dashboard link
|
- Output summary to user
|
||||||
|
|
||||||
**Phase 5: Session Completion (Optional)**
|
**Phase 5: Session Completion (Optional)**
|
||||||
- If all findings fixed successfully (no failures):
|
- If all findings fixed successfully (no failures):
|
||||||
@@ -234,53 +230,12 @@ if (result.passRate < 100%) {
|
|||||||
- Output: "Some findings failed. Review fix-summary.md before completing session."
|
- Output: "Some findings failed. Review fix-summary.md before completing session."
|
||||||
- Do NOT auto-complete session
|
- Do NOT auto-complete session
|
||||||
|
|
||||||
### Dashboard Generation
|
|
||||||
|
|
||||||
**MANDATORY**: Dashboard MUST be generated from template during Phase 1 initialization
|
|
||||||
|
|
||||||
**Template Location**: `~/.claude/templates/fix-dashboard.html`
|
|
||||||
|
|
||||||
**⚠️ POST-GENERATION**: Orchestrator and agents MUST NOT read/write/modify fix-dashboard.html after creation
|
|
||||||
|
|
||||||
**Generation Steps**:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 1. Copy template to fix session directory
|
|
||||||
cp ~/.claude/templates/fix-dashboard.html ${sessionDir}/fixes/${fixSessionId}/fix-dashboard.html
|
|
||||||
|
|
||||||
# 2. Replace SESSION_ID placeholder
|
|
||||||
sed -i "s|{{SESSION_ID}}|${sessionId}|g" ${sessionDir}/fixes/${fixSessionId}/fix-dashboard.html
|
|
||||||
|
|
||||||
# 3. Replace REVIEW_DIR placeholder
|
|
||||||
sed -i "s|{{REVIEW_DIR}}|${reviewDir}|g" ${sessionDir}/fixes/${fixSessionId}/fix-dashboard.html
|
|
||||||
|
|
||||||
# 4. Start local server and output dashboard URL
|
|
||||||
cd ${sessionDir}/fixes/${fixSessionId} && python -m http.server 8766 --bind 127.0.0.1 &
|
|
||||||
echo "🔧 Fix Dashboard: http://127.0.0.1:8766/fix-dashboard.html"
|
|
||||||
echo " (Press Ctrl+C to stop server when done)"
|
|
||||||
```
|
|
||||||
|
|
||||||
**Dashboard Features**:
|
|
||||||
- Real-time progress tracking via JSON polling (3-second interval)
|
|
||||||
- Stage timeline visualization with parallel/serial execution modes
|
|
||||||
- Active groups and agents monitoring
|
|
||||||
- Flow control steps tracking for each agent
|
|
||||||
- Fix history drawer with session summaries
|
|
||||||
- Consumes new JSON structure (fix-plan.json with metadata + fix-progress-{N}.json)
|
|
||||||
|
|
||||||
**JSON Consumption**:
|
|
||||||
- `fix-plan.json`: Reads metadata field for session info, timeline stages, groups configuration
|
|
||||||
- `fix-progress-{N}.json`: Polls all progress files to aggregate real-time status
|
|
||||||
- `active-fix-session.json`: Detects active session on load
|
|
||||||
- `fix-history.json`: Loads historical fix sessions
|
|
||||||
|
|
||||||
### Output File Structure
|
### Output File Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
.workflow/active/WFS-{session-id}/.review/
|
.workflow/active/WFS-{session-id}/.review/
|
||||||
├── fix-export-{timestamp}.json # Exported findings (input)
|
├── fix-export-{timestamp}.json # Exported findings (input)
|
||||||
└── fixes/{fix-session-id}/
|
└── fixes/{fix-session-id}/
|
||||||
├── fix-dashboard.html # Interactive dashboard (generated once, auto-polls JSON)
|
|
||||||
├── fix-plan.json # Planning agent output (execution plan with metadata)
|
├── fix-plan.json # Planning agent output (execution plan with metadata)
|
||||||
├── fix-progress-1.json # Group 1 progress (planning agent init → agent updates)
|
├── fix-progress-1.json # Group 1 progress (planning agent init → agent updates)
|
||||||
├── fix-progress-2.json # Group 2 progress (planning agent init → agent updates)
|
├── fix-progress-2.json # Group 2 progress (planning agent init → agent updates)
|
||||||
@@ -291,10 +246,8 @@ echo " (Press Ctrl+C to stop server when done)"
|
|||||||
```
|
```
|
||||||
|
|
||||||
**File Producers**:
|
**File Producers**:
|
||||||
- **Orchestrator**: `fix-dashboard.html` (generated once from template during Phase 1)
|
|
||||||
- **Planning Agent**: `fix-plan.json` (with metadata), all `fix-progress-*.json` (initial state)
|
- **Planning Agent**: `fix-plan.json` (with metadata), all `fix-progress-*.json` (initial state)
|
||||||
- **Execution Agents**: Update assigned `fix-progress-{N}.json` in real-time
|
- **Execution Agents**: Update assigned `fix-progress-{N}.json` in real-time
|
||||||
- **Dashboard (Browser)**: Reads `fix-plan.json` + all `fix-progress-*.json`, aggregates in-memory every 3 seconds via JavaScript polling
|
|
||||||
|
|
||||||
|
|
||||||
### Agent Invocation Template
|
### Agent Invocation Template
|
||||||
@@ -347,7 +300,7 @@ For each group (G1, G2, G3, ...), generate fix-progress-{N}.json following templ
|
|||||||
- Flow control: Empty implementation_approach array
|
- Flow control: Empty implementation_approach array
|
||||||
- Errors: Empty array
|
- Errors: Empty array
|
||||||
|
|
||||||
**CRITICAL**: Ensure complete template structure for Dashboard consumption - all fields must be present.
|
**CRITICAL**: Ensure complete template structure - all fields must be present.
|
||||||
|
|
||||||
## Analysis Requirements
|
## Analysis Requirements
|
||||||
|
|
||||||
@@ -419,7 +372,7 @@ Task({
|
|||||||
description: `Fix ${group.findings.length} issues: ${group.group_name}`,
|
description: `Fix ${group.findings.length} issues: ${group.group_name}`,
|
||||||
prompt: `
|
prompt: `
|
||||||
## Task Objective
|
## Task Objective
|
||||||
Execute fixes for code review findings in group ${group.group_id}. Update progress file in real-time with flow control tracking for dashboard visibility.
|
Execute fixes for code review findings in group ${group.group_id}. Update progress file in real-time with flow control tracking.
|
||||||
|
|
||||||
## Assignment
|
## Assignment
|
||||||
- Group ID: ${group.group_id}
|
- Group ID: ${group.group_id}
|
||||||
@@ -549,7 +502,6 @@ When all findings processed:
|
|||||||
|
|
||||||
### Progress File Updates
|
### Progress File Updates
|
||||||
- **MUST update after every significant action** (before/after each step)
|
- **MUST update after every significant action** (before/after each step)
|
||||||
- **Dashboard polls every 3 seconds** - ensure writes are atomic
|
|
||||||
- **Always maintain complete structure** - never write partial updates
|
- **Always maintain complete structure** - never write partial updates
|
||||||
- **Use ISO 8601 timestamps** - e.g., "2025-01-25T14:36:00Z"
|
- **Use ISO 8601 timestamps** - e.g., "2025-01-25T14:36:00Z"
|
||||||
|
|
||||||
@@ -638,9 +590,17 @@ TodoWrite({
|
|||||||
1. **Trust AI Planning**: Planning agent's grouping and execution strategy are based on dependency analysis
|
1. **Trust AI Planning**: Planning agent's grouping and execution strategy are based on dependency analysis
|
||||||
2. **Conservative Approach**: Test verification is mandatory - no fixes kept without passing tests
|
2. **Conservative Approach**: Test verification is mandatory - no fixes kept without passing tests
|
||||||
3. **Parallel Efficiency**: Default 3 concurrent agents balances speed and resource usage
|
3. **Parallel Efficiency**: Default 3 concurrent agents balances speed and resource usage
|
||||||
4. **Monitor Dashboard**: Real-time stage timeline and agent status provide execution visibility
|
4. **Resume Support**: Fix sessions can resume from checkpoints after interruption
|
||||||
5. **Resume Support**: Fix sessions can resume from checkpoints after interruption
|
5. **Manual Review**: Always review failed fixes manually - may require architectural changes
|
||||||
6. **Manual Review**: Always review failed fixes manually - may require architectural changes
|
6. **Incremental Fixing**: Start with small batches (5-10 findings) before large-scale fixes
|
||||||
7. **Incremental Fixing**: Start with small batches (5-10 findings) before large-scale fixes
|
|
||||||
|
## Related Commands
|
||||||
|
|
||||||
|
### View Fix Progress
|
||||||
|
Use `ccw view` to open the workflow dashboard in browser:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ccw view
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -51,14 +51,12 @@ Independent multi-dimensional code review orchestrator with **hybrid parallel-it
|
|||||||
2. **Session-Integrated**: Review results tracked within workflow session for unified management
|
2. **Session-Integrated**: Review results tracked within workflow session for unified management
|
||||||
3. **Comprehensive Coverage**: Same 7 specialized dimensions as session review
|
3. **Comprehensive Coverage**: Same 7 specialized dimensions as session review
|
||||||
4. **Intelligent Prioritization**: Automatic identification of critical issues and cross-cutting concerns
|
4. **Intelligent Prioritization**: Automatic identification of critical issues and cross-cutting concerns
|
||||||
5. **Real-time Visibility**: JSON-based progress tracking with interactive HTML dashboard
|
5. **Unified Archive**: Review results archived with session for historical reference
|
||||||
6. **Unified Archive**: Review results archived with session for historical reference
|
|
||||||
|
|
||||||
### Orchestrator Boundary (CRITICAL)
|
### Orchestrator Boundary (CRITICAL)
|
||||||
- **ONLY command** for independent multi-dimensional module review
|
- **ONLY command** for independent multi-dimensional module review
|
||||||
- Manages: dimension coordination, aggregation, iteration control, progress tracking
|
- Manages: dimension coordination, aggregation, iteration control, progress tracking
|
||||||
- Delegates: Code exploration and analysis to @cli-explore-agent, dimension-specific reviews via Deep Scan mode
|
- Delegates: Code exploration and analysis to @cli-explore-agent, dimension-specific reviews via Deep Scan mode
|
||||||
- **⚠️ DASHBOARD CONSTRAINT**: Dashboard is generated ONCE during Phase 1 initialization. After initialization, orchestrator and agents MUST NOT read, write, or modify dashboard.html - it remains static for user interaction only.
|
|
||||||
|
|
||||||
## How It Works
|
## How It Works
|
||||||
|
|
||||||
@@ -66,7 +64,7 @@ Independent multi-dimensional code review orchestrator with **hybrid parallel-it
|
|||||||
|
|
||||||
```
|
```
|
||||||
Phase 1: Discovery & Initialization
|
Phase 1: Discovery & Initialization
|
||||||
└─ Resolve file patterns, validate paths, initialize state, create output structure → Generate dashboard.html
|
└─ Resolve file patterns, validate paths, initialize state, create output structure
|
||||||
|
|
||||||
Phase 2: Parallel Reviews (for each dimension)
|
Phase 2: Parallel Reviews (for each dimension)
|
||||||
├─ Launch 7 review agents simultaneously
|
├─ Launch 7 review agents simultaneously
|
||||||
@@ -90,7 +88,7 @@ Phase 4: Iterative Deep-Dive (optional)
|
|||||||
└─ Loop until no critical findings OR max iterations
|
└─ Loop until no critical findings OR max iterations
|
||||||
|
|
||||||
Phase 5: Completion
|
Phase 5: Completion
|
||||||
└─ Finalize review-progress.json → Output dashboard path
|
└─ Finalize review-progress.json
|
||||||
```
|
```
|
||||||
|
|
||||||
### Agent Roles
|
### Agent Roles
|
||||||
@@ -188,8 +186,8 @@ const CATEGORIES = {
|
|||||||
|
|
||||||
**Step 1: Session Creation**
|
**Step 1: Session Creation**
|
||||||
```javascript
|
```javascript
|
||||||
// Create workflow session for this review
|
// Create workflow session for this review (type: review)
|
||||||
SlashCommand(command="/workflow:session:start \"Code review for [target_pattern]\"")
|
SlashCommand(command="/workflow:session:start --type review \"Code review for [target_pattern]\"")
|
||||||
|
|
||||||
// Parse output
|
// Parse output
|
||||||
const sessionId = output.match(/SESSION_ID: (WFS-[^\s]+)/)[1];
|
const sessionId = output.match(/SESSION_ID: (WFS-[^\s]+)/)[1];
|
||||||
@@ -219,37 +217,9 @@ done
|
|||||||
|
|
||||||
**Step 4: Initialize Review State**
|
**Step 4: Initialize Review State**
|
||||||
- State initialization: Create `review-state.json` with metadata, dimensions, max_iterations, resolved_files (merged metadata + state)
|
- State initialization: Create `review-state.json` with metadata, dimensions, max_iterations, resolved_files (merged metadata + state)
|
||||||
- Progress tracking: Create `review-progress.json` for dashboard polling
|
- Progress tracking: Create `review-progress.json` for progress tracking
|
||||||
|
|
||||||
**Step 5: Dashboard Generation**
|
**Step 5: TodoWrite Initialization**
|
||||||
|
|
||||||
**Constraints**:
|
|
||||||
- **MANDATORY**: Dashboard MUST be generated from template: `~/.claude/templates/review-cycle-dashboard.html`
|
|
||||||
- **PROHIBITED**: Direct creation or custom generation without template
|
|
||||||
- **POST-GENERATION**: Orchestrator and agents MUST NOT read/write/modify dashboard.html after creation
|
|
||||||
|
|
||||||
**Generation Commands** (3 independent steps):
|
|
||||||
```bash
|
|
||||||
# Step 1: Copy template to output location
|
|
||||||
cp ~/.claude/templates/review-cycle-dashboard.html ${sessionDir}/.review/dashboard.html
|
|
||||||
|
|
||||||
# Step 2: Replace SESSION_ID placeholder
|
|
||||||
sed -i "s|{{SESSION_ID}}|${sessionId}|g" ${sessionDir}/.review/dashboard.html
|
|
||||||
|
|
||||||
# Step 3: Replace REVIEW_TYPE placeholder
|
|
||||||
sed -i "s|{{REVIEW_TYPE}}|module|g" ${sessionDir}/.review/dashboard.html
|
|
||||||
|
|
||||||
# Step 4: Replace REVIEW_DIR placeholder
|
|
||||||
sed -i "s|{{REVIEW_DIR}}|${reviewDir}|g" ${sessionDir}/.review/dashboard.html
|
|
||||||
|
|
||||||
# Output: Start local server and output dashboard URL
|
|
||||||
# Use Python HTTP server (available on most systems)
|
|
||||||
cd ${sessionDir}/.review && python -m http.server 8765 --bind 127.0.0.1 &
|
|
||||||
echo "📊 Dashboard: http://127.0.0.1:8765/dashboard.html"
|
|
||||||
echo " (Press Ctrl+C to stop server when done)"
|
|
||||||
```
|
|
||||||
|
|
||||||
**Step 6: TodoWrite Initialization**
|
|
||||||
- Set up progress tracking with hierarchical structure
|
- Set up progress tracking with hierarchical structure
|
||||||
- Mark Phase 1 completed, Phase 2 in_progress
|
- Mark Phase 1 completed, Phase 2 in_progress
|
||||||
|
|
||||||
@@ -280,7 +250,6 @@ echo " (Press Ctrl+C to stop server when done)"
|
|||||||
- Finalize review-progress.json with completion statistics
|
- Finalize review-progress.json with completion statistics
|
||||||
- Update review-state.json with completion_time and phase=complete
|
- Update review-state.json with completion_time and phase=complete
|
||||||
- TodoWrite completion: Mark all tasks done
|
- TodoWrite completion: Mark all tasks done
|
||||||
- Output: Dashboard path to user
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -301,12 +270,11 @@ echo " (Press Ctrl+C to stop server when done)"
|
|||||||
├── iterations/ # Deep-dive results
|
├── iterations/ # Deep-dive results
|
||||||
│ ├── iteration-1-finding-{uuid}.json
|
│ ├── iteration-1-finding-{uuid}.json
|
||||||
│ └── iteration-2-finding-{uuid}.json
|
│ └── iteration-2-finding-{uuid}.json
|
||||||
├── reports/ # Human-readable reports
|
└── reports/ # Human-readable reports
|
||||||
│ ├── security-analysis.md
|
├── security-analysis.md
|
||||||
│ ├── security-cli-output.txt
|
├── security-cli-output.txt
|
||||||
│ ├── deep-dive-1-{uuid}.md
|
├── deep-dive-1-{uuid}.md
|
||||||
│ └── ...
|
└── ...
|
||||||
└── dashboard.html # Interactive dashboard (primary output)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Session Context**:
|
**Session Context**:
|
||||||
@@ -772,23 +740,25 @@ TodoWrite({
|
|||||||
3. **Use Glob Wisely**: `src/auth/**` is more efficient than `src/**` with lots of irrelevant files
|
3. **Use Glob Wisely**: `src/auth/**` is more efficient than `src/**` with lots of irrelevant files
|
||||||
4. **Trust Aggregation Logic**: Auto-selection based on proven heuristics
|
4. **Trust Aggregation Logic**: Auto-selection based on proven heuristics
|
||||||
5. **Monitor Logs**: Check reports/ directory for CLI analysis insights
|
5. **Monitor Logs**: Check reports/ directory for CLI analysis insights
|
||||||
6. **Dashboard Polling**: Refresh every 5 seconds for real-time updates
|
|
||||||
7. **Export Results**: Use dashboard export for external tracking tools
|
|
||||||
|
|
||||||
## Related Commands
|
## Related Commands
|
||||||
|
|
||||||
|
### View Review Progress
|
||||||
|
Use `ccw view` to open the review dashboard in browser:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ccw view
|
||||||
|
```
|
||||||
|
|
||||||
### Automated Fix Workflow
|
### Automated Fix Workflow
|
||||||
After completing a module review, use the dashboard to select findings and export them for automated fixing:
|
After completing a module review, use the generated findings JSON for automated fixing:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Step 1: Complete review (this command)
|
# Step 1: Complete review (this command)
|
||||||
/workflow:review-module-cycle src/auth/**
|
/workflow:review-module-cycle src/auth/**
|
||||||
|
|
||||||
# Step 2: Open dashboard, select findings, and export
|
# Step 2: Run automated fixes using dimension findings
|
||||||
# Dashboard generates: fix-export-{timestamp}.json
|
/workflow:review-fix .workflow/active/WFS-{session-id}/.review/
|
||||||
|
|
||||||
# Step 3: Run automated fixes
|
|
||||||
/workflow:review-fix .workflow/active/WFS-{session-id}/.review/fix-export-{timestamp}.json
|
|
||||||
```
|
```
|
||||||
|
|
||||||
See `/workflow:review-fix` for automated fixing with smart grouping, parallel execution, and test verification.
|
See `/workflow:review-fix` for automated fixing with smart grouping, parallel execution, and test verification.
|
||||||
|
|||||||
@@ -45,13 +45,11 @@ Session-based multi-dimensional code review orchestrator with **hybrid parallel-
|
|||||||
1. **Comprehensive Coverage**: 7 specialized dimensions analyze all quality aspects simultaneously
|
1. **Comprehensive Coverage**: 7 specialized dimensions analyze all quality aspects simultaneously
|
||||||
2. **Intelligent Prioritization**: Automatic identification of critical issues and cross-cutting concerns
|
2. **Intelligent Prioritization**: Automatic identification of critical issues and cross-cutting concerns
|
||||||
3. **Actionable Insights**: Deep-dive iterations provide step-by-step remediation plans
|
3. **Actionable Insights**: Deep-dive iterations provide step-by-step remediation plans
|
||||||
4. **Real-time Visibility**: JSON-based progress tracking with interactive HTML dashboard
|
|
||||||
|
|
||||||
### Orchestrator Boundary (CRITICAL)
|
### Orchestrator Boundary (CRITICAL)
|
||||||
- **ONLY command** for comprehensive multi-dimensional review
|
- **ONLY command** for comprehensive multi-dimensional review
|
||||||
- Manages: dimension coordination, aggregation, iteration control, progress tracking
|
- Manages: dimension coordination, aggregation, iteration control, progress tracking
|
||||||
- Delegates: Code exploration and analysis to @cli-explore-agent, dimension-specific reviews via Deep Scan mode
|
- Delegates: Code exploration and analysis to @cli-explore-agent, dimension-specific reviews via Deep Scan mode
|
||||||
- **⚠️ DASHBOARD CONSTRAINT**: Dashboard is generated ONCE during Phase 1 initialization. After initialization, orchestrator and agents MUST NOT read, write, or modify dashboard.html - it remains static for user interaction only.
|
|
||||||
|
|
||||||
## How It Works
|
## How It Works
|
||||||
|
|
||||||
@@ -59,7 +57,7 @@ Session-based multi-dimensional code review orchestrator with **hybrid parallel-
|
|||||||
|
|
||||||
```
|
```
|
||||||
Phase 1: Discovery & Initialization
|
Phase 1: Discovery & Initialization
|
||||||
└─ Validate session, initialize state, create output structure → Generate dashboard.html
|
└─ Validate session, initialize state, create output structure
|
||||||
|
|
||||||
Phase 2: Parallel Reviews (for each dimension)
|
Phase 2: Parallel Reviews (for each dimension)
|
||||||
├─ Launch 7 review agents simultaneously
|
├─ Launch 7 review agents simultaneously
|
||||||
@@ -83,7 +81,7 @@ Phase 4: Iterative Deep-Dive (optional)
|
|||||||
└─ Loop until no critical findings OR max iterations
|
└─ Loop until no critical findings OR max iterations
|
||||||
|
|
||||||
Phase 5: Completion
|
Phase 5: Completion
|
||||||
└─ Finalize review-progress.json → Output dashboard path
|
└─ Finalize review-progress.json
|
||||||
```
|
```
|
||||||
|
|
||||||
### Agent Roles
|
### Agent Roles
|
||||||
@@ -199,36 +197,9 @@ git log --since="${sessionCreatedAt}" --name-only --pretty=format: | sort -u
|
|||||||
|
|
||||||
**Step 5: Initialize Review State**
|
**Step 5: Initialize Review State**
|
||||||
- State initialization: Create `review-state.json` with metadata, dimensions, max_iterations (merged metadata + state)
|
- State initialization: Create `review-state.json` with metadata, dimensions, max_iterations (merged metadata + state)
|
||||||
- Progress tracking: Create `review-progress.json` for dashboard polling
|
- Progress tracking: Create `review-progress.json` for progress tracking
|
||||||
|
|
||||||
**Step 6: Dashboard Generation**
|
**Step 6: TodoWrite Initialization**
|
||||||
|
|
||||||
**Constraints**:
|
|
||||||
- **MANDATORY**: Dashboard MUST be generated from template: `~/.claude/templates/review-cycle-dashboard.html`
|
|
||||||
- **PROHIBITED**: Direct creation or custom generation without template
|
|
||||||
- **POST-GENERATION**: Orchestrator and agents MUST NOT read/write/modify dashboard.html after creation
|
|
||||||
|
|
||||||
**Generation Commands** (3 independent steps):
|
|
||||||
```bash
|
|
||||||
# Step 1: Copy template to output location
|
|
||||||
cp ~/.claude/templates/review-cycle-dashboard.html ${sessionDir}/.review/dashboard.html
|
|
||||||
|
|
||||||
# Step 2: Replace SESSION_ID placeholder
|
|
||||||
sed -i "s|{{SESSION_ID}}|${sessionId}|g" ${sessionDir}/.review/dashboard.html
|
|
||||||
|
|
||||||
# Step 3: Replace REVIEW_TYPE placeholder
|
|
||||||
sed -i "s|{{REVIEW_TYPE}}|session|g" ${sessionDir}/.review/dashboard.html
|
|
||||||
|
|
||||||
# Step 4: Replace REVIEW_DIR placeholder
|
|
||||||
sed -i "s|{{REVIEW_DIR}}|${reviewDir}|g" ${sessionDir}/.review/dashboard.html
|
|
||||||
|
|
||||||
# Output: Start local server and output dashboard URL
|
|
||||||
cd ${sessionDir}/.review && python -m http.server 8765 --bind 127.0.0.1 &
|
|
||||||
echo "📊 Dashboard: http://127.0.0.1:8765/dashboard.html"
|
|
||||||
echo " (Press Ctrl+C to stop server when done)"
|
|
||||||
```
|
|
||||||
|
|
||||||
**Step 7: TodoWrite Initialization**
|
|
||||||
- Set up progress tracking with hierarchical structure
|
- Set up progress tracking with hierarchical structure
|
||||||
- Mark Phase 1 completed, Phase 2 in_progress
|
- Mark Phase 1 completed, Phase 2 in_progress
|
||||||
|
|
||||||
@@ -259,7 +230,6 @@ echo " (Press Ctrl+C to stop server when done)"
|
|||||||
- Finalize review-progress.json with completion statistics
|
- Finalize review-progress.json with completion statistics
|
||||||
- Update review-state.json with completion_time and phase=complete
|
- Update review-state.json with completion_time and phase=complete
|
||||||
- TodoWrite completion: Mark all tasks done
|
- TodoWrite completion: Mark all tasks done
|
||||||
- Output: Dashboard path to user
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -280,12 +250,11 @@ echo " (Press Ctrl+C to stop server when done)"
|
|||||||
├── iterations/ # Deep-dive results
|
├── iterations/ # Deep-dive results
|
||||||
│ ├── iteration-1-finding-{uuid}.json
|
│ ├── iteration-1-finding-{uuid}.json
|
||||||
│ └── iteration-2-finding-{uuid}.json
|
│ └── iteration-2-finding-{uuid}.json
|
||||||
├── reports/ # Human-readable reports
|
└── reports/ # Human-readable reports
|
||||||
│ ├── security-analysis.md
|
├── security-analysis.md
|
||||||
│ ├── security-cli-output.txt
|
├── security-cli-output.txt
|
||||||
│ ├── deep-dive-1-{uuid}.md
|
├── deep-dive-1-{uuid}.md
|
||||||
│ └── ...
|
└── ...
|
||||||
└── dashboard.html # Interactive dashboard (primary output)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Session Context**:
|
**Session Context**:
|
||||||
@@ -782,23 +751,25 @@ TodoWrite({
|
|||||||
2. **Parallel Execution**: ~60 minutes for full initial review (7 dimensions)
|
2. **Parallel Execution**: ~60 minutes for full initial review (7 dimensions)
|
||||||
3. **Trust Aggregation Logic**: Auto-selection based on proven heuristics
|
3. **Trust Aggregation Logic**: Auto-selection based on proven heuristics
|
||||||
4. **Monitor Logs**: Check reports/ directory for CLI analysis insights
|
4. **Monitor Logs**: Check reports/ directory for CLI analysis insights
|
||||||
5. **Dashboard Polling**: Refresh every 5 seconds for real-time updates
|
|
||||||
6. **Export Results**: Use dashboard export for external tracking tools
|
|
||||||
|
|
||||||
## Related Commands
|
## Related Commands
|
||||||
|
|
||||||
|
### View Review Progress
|
||||||
|
Use `ccw view` to open the review dashboard in browser:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ccw view
|
||||||
|
```
|
||||||
|
|
||||||
### Automated Fix Workflow
|
### Automated Fix Workflow
|
||||||
After completing a review, use the dashboard to select findings and export them for automated fixing:
|
After completing a review, use the generated findings JSON for automated fixing:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Step 1: Complete review (this command)
|
# Step 1: Complete review (this command)
|
||||||
/workflow:review-session-cycle
|
/workflow:review-session-cycle
|
||||||
|
|
||||||
# Step 2: Open dashboard, select findings, and export
|
# Step 2: Run automated fixes using dimension findings
|
||||||
# Dashboard generates: fix-export-{timestamp}.json
|
/workflow:review-fix .workflow/active/WFS-{session-id}/.review/
|
||||||
|
|
||||||
# Step 3: Run automated fixes
|
|
||||||
/workflow:review-fix .workflow/active/WFS-{session-id}/.review/fix-export-{timestamp}.json
|
|
||||||
```
|
```
|
||||||
|
|
||||||
See `/workflow:review-fix` for automated fixing with smart grouping, parallel execution, and test verification.
|
See `/workflow:review-fix` for automated fixing with smart grouping, parallel execution, and test verification.
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
---
|
---
|
||||||
name: start
|
name: start
|
||||||
description: Discover existing sessions or start new workflow session with intelligent session management and conflict detection
|
description: Discover existing sessions or start new workflow session with intelligent session management and conflict detection
|
||||||
argument-hint: [--auto|--new] [optional: task description for new session]
|
argument-hint: [--type <workflow|review|tdd|test|docs>] [--auto|--new] [optional: task description for new session]
|
||||||
examples:
|
examples:
|
||||||
- /workflow:session:start
|
- /workflow:session:start
|
||||||
- /workflow:session:start --auto "implement OAuth2 authentication"
|
- /workflow:session:start --auto "implement OAuth2 authentication"
|
||||||
- /workflow:session:start --new "fix login bug"
|
- /workflow:session:start --type review "Code review for auth module"
|
||||||
|
- /workflow:session:start --type tdd --auto "implement user authentication"
|
||||||
|
- /workflow:session:start --type test --new "test payment flow"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Start Workflow Session (/workflow:session:start)
|
# Start Workflow Session (/workflow:session:start)
|
||||||
@@ -17,6 +19,23 @@ Manages workflow sessions with three operation modes: discovery (manual), auto (
|
|||||||
1. **Project-level initialization** (first-time only): Creates `.workflow/project.json` for feature registry
|
1. **Project-level initialization** (first-time only): Creates `.workflow/project.json` for feature registry
|
||||||
2. **Session-level initialization** (always): Creates session directory structure
|
2. **Session-level initialization** (always): Creates session directory structure
|
||||||
|
|
||||||
|
## Session Types
|
||||||
|
|
||||||
|
The `--type` parameter classifies sessions for CCW dashboard organization:
|
||||||
|
|
||||||
|
| Type | Description | Default For |
|
||||||
|
|------|-------------|-------------|
|
||||||
|
| `workflow` | Standard implementation (default) | `/workflow:plan` |
|
||||||
|
| `review` | Code review sessions | `/workflow:review-module-cycle` |
|
||||||
|
| `tdd` | TDD-based development | `/workflow:tdd-plan` |
|
||||||
|
| `test` | Test generation/fix sessions | `/workflow:test-fix-gen` |
|
||||||
|
| `docs` | Documentation sessions | `/memory:docs` |
|
||||||
|
|
||||||
|
**Validation**: If `--type` is provided with invalid value, return error:
|
||||||
|
```
|
||||||
|
ERROR: Invalid session type. Valid types: workflow, review, tdd, test, docs
|
||||||
|
```
|
||||||
|
|
||||||
## Step 0: Initialize Project State (First-time Only)
|
## Step 0: Initialize Project State (First-time Only)
|
||||||
|
|
||||||
**Executed before all modes** - Ensures project-level state file exists by calling `/workflow:init`.
|
**Executed before all modes** - Ensures project-level state file exists by calling `/workflow:init`.
|
||||||
@@ -86,8 +105,8 @@ bash(mkdir -p .workflow/active/WFS-implement-oauth2-auth/.process)
|
|||||||
bash(mkdir -p .workflow/active/WFS-implement-oauth2-auth/.task)
|
bash(mkdir -p .workflow/active/WFS-implement-oauth2-auth/.task)
|
||||||
bash(mkdir -p .workflow/active/WFS-implement-oauth2-auth/.summaries)
|
bash(mkdir -p .workflow/active/WFS-implement-oauth2-auth/.summaries)
|
||||||
|
|
||||||
# Create metadata
|
# Create metadata (include type field, default to "workflow" if not specified)
|
||||||
bash(echo '{"session_id":"WFS-implement-oauth2-auth","project":"implement OAuth2 auth","status":"planning"}' > .workflow/active/WFS-implement-oauth2-auth/workflow-session.json)
|
bash(echo '{"session_id":"WFS-implement-oauth2-auth","project":"implement OAuth2 auth","status":"planning","type":"workflow","created_at":"2024-12-04T08:00:00Z"}' > .workflow/active/WFS-implement-oauth2-auth/workflow-session.json)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Output**: `SESSION_ID: WFS-implement-oauth2-auth`
|
**Output**: `SESSION_ID: WFS-implement-oauth2-auth`
|
||||||
@@ -143,7 +162,8 @@ bash(mkdir -p .workflow/active/WFS-fix-login-bug/.summaries)
|
|||||||
|
|
||||||
### Step 3: Create Metadata
|
### Step 3: Create Metadata
|
||||||
```bash
|
```bash
|
||||||
bash(echo '{"session_id":"WFS-fix-login-bug","project":"fix login bug","status":"planning"}' > .workflow/active/WFS-fix-login-bug/workflow-session.json)
|
# Include type field from --type parameter (default: "workflow")
|
||||||
|
bash(echo '{"session_id":"WFS-fix-login-bug","project":"fix login bug","status":"planning","type":"workflow","created_at":"2024-12-04T08:00:00Z"}' > .workflow/active/WFS-fix-login-bug/workflow-session.json)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Output**: `SESSION_ID: WFS-fix-login-bug`
|
**Output**: `SESSION_ID: WFS-fix-login-bug`
|
||||||
|
|||||||
@@ -1,352 +0,0 @@
|
|||||||
---
|
|
||||||
name: workflow:status
|
|
||||||
description: Generate on-demand views for project overview and workflow tasks with optional task-id filtering for detailed view
|
|
||||||
argument-hint: "[optional: --project|task-id|--validate|--dashboard]"
|
|
||||||
---
|
|
||||||
|
|
||||||
# Workflow Status Command (/workflow:status)
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
Generates on-demand views from project and session data. Supports multiple modes:
|
|
||||||
1. **Project Overview** (`--project`): Shows completed features and project statistics
|
|
||||||
2. **Workflow Tasks** (default): Shows current session task progress
|
|
||||||
3. **HTML Dashboard** (`--dashboard`): Generates interactive HTML task board with active and archived sessions
|
|
||||||
|
|
||||||
No synchronization needed - all views are calculated from current JSON state.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
```bash
|
|
||||||
/workflow:status # Show current workflow session overview
|
|
||||||
/workflow:status --project # Show project-level feature registry
|
|
||||||
/workflow:status impl-1 # Show specific task details
|
|
||||||
/workflow:status --validate # Validate workflow integrity
|
|
||||||
/workflow:status --dashboard # Generate HTML dashboard board
|
|
||||||
```
|
|
||||||
|
|
||||||
## Execution Process
|
|
||||||
|
|
||||||
```
|
|
||||||
Input Parsing:
|
|
||||||
└─ Decision (mode detection):
|
|
||||||
├─ --project flag → Project Overview Mode
|
|
||||||
├─ --dashboard flag → Dashboard Mode
|
|
||||||
├─ task-id argument → Task Details Mode
|
|
||||||
└─ No flags → Workflow Session Mode (default)
|
|
||||||
|
|
||||||
Project Overview Mode:
|
|
||||||
├─ Check project.json exists
|
|
||||||
├─ Read project data
|
|
||||||
├─ Parse and display overview + features
|
|
||||||
└─ Show recent archived sessions
|
|
||||||
|
|
||||||
Workflow Session Mode (default):
|
|
||||||
├─ Find active session
|
|
||||||
├─ Load session data
|
|
||||||
├─ Scan task files
|
|
||||||
└─ Display task progress
|
|
||||||
|
|
||||||
Dashboard Mode:
|
|
||||||
├─ Collect active sessions
|
|
||||||
├─ Collect archived sessions
|
|
||||||
├─ Generate HTML from template
|
|
||||||
└─ Write dashboard.html
|
|
||||||
```
|
|
||||||
|
|
||||||
## Implementation Flow
|
|
||||||
|
|
||||||
### Mode Selection
|
|
||||||
|
|
||||||
**Check for --project flag**:
|
|
||||||
- If `--project` flag present → Execute **Project Overview Mode**
|
|
||||||
- Otherwise → Execute **Workflow Session Mode** (default)
|
|
||||||
|
|
||||||
## Project Overview Mode
|
|
||||||
|
|
||||||
### Step 1: Check Project State
|
|
||||||
```bash
|
|
||||||
bash(test -f .workflow/project.json && echo "EXISTS" || echo "NOT_FOUND")
|
|
||||||
```
|
|
||||||
|
|
||||||
**If NOT_FOUND**:
|
|
||||||
```
|
|
||||||
No project state found.
|
|
||||||
Run /workflow:session:start to initialize project.
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 2: Read Project Data
|
|
||||||
```bash
|
|
||||||
bash(cat .workflow/project.json)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 3: Parse and Display
|
|
||||||
|
|
||||||
**Data Processing**:
|
|
||||||
```javascript
|
|
||||||
const projectData = JSON.parse(Read('.workflow/project.json'));
|
|
||||||
const features = projectData.features || [];
|
|
||||||
const stats = projectData.statistics || {};
|
|
||||||
const overview = projectData.overview || null;
|
|
||||||
|
|
||||||
// Sort features by implementation date (newest first)
|
|
||||||
const sortedFeatures = features.sort((a, b) =>
|
|
||||||
new Date(b.implemented_at) - new Date(a.implemented_at)
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
**Output Format** (with extended overview):
|
|
||||||
```
|
|
||||||
## Project: ${projectData.project_name}
|
|
||||||
Initialized: ${projectData.initialized_at}
|
|
||||||
|
|
||||||
${overview ? `
|
|
||||||
### Overview
|
|
||||||
${overview.description}
|
|
||||||
|
|
||||||
**Technology Stack**:
|
|
||||||
${overview.technology_stack.languages.map(l => `- ${l.name}${l.primary ? ' (primary)' : ''}: ${l.file_count} files`).join('\n')}
|
|
||||||
Frameworks: ${overview.technology_stack.frameworks.join(', ')}
|
|
||||||
|
|
||||||
**Architecture**:
|
|
||||||
Style: ${overview.architecture.style}
|
|
||||||
Patterns: ${overview.architecture.patterns.join(', ')}
|
|
||||||
|
|
||||||
**Key Components** (${overview.key_components.length}):
|
|
||||||
${overview.key_components.map(c => `- ${c.name} (${c.path})\n ${c.description}`).join('\n')}
|
|
||||||
|
|
||||||
---
|
|
||||||
` : ''}
|
|
||||||
|
|
||||||
### Completed Features (${stats.total_features})
|
|
||||||
|
|
||||||
${sortedFeatures.map(f => `
|
|
||||||
- ${f.title} (${f.timeline?.implemented_at || f.implemented_at})
|
|
||||||
${f.description}
|
|
||||||
Tags: ${f.tags?.join(', ') || 'none'}
|
|
||||||
Session: ${f.traceability?.session_id || f.session_id}
|
|
||||||
Archive: ${f.traceability?.archive_path || 'unknown'}
|
|
||||||
${f.traceability?.commit_hash ? `Commit: ${f.traceability.commit_hash}` : ''}
|
|
||||||
`).join('\n')}
|
|
||||||
|
|
||||||
### Project Statistics
|
|
||||||
- Total Features: ${stats.total_features}
|
|
||||||
- Total Sessions: ${stats.total_sessions}
|
|
||||||
- Last Updated: ${stats.last_updated}
|
|
||||||
|
|
||||||
### Quick Access
|
|
||||||
- View session details: /workflow:status
|
|
||||||
- Archive query: jq '.archives[] | select(.session_id == "SESSION_ID")' .workflow/archives/manifest.json
|
|
||||||
- Documentation: .workflow/docs/${projectData.project_name}/
|
|
||||||
|
|
||||||
### Query Commands
|
|
||||||
# Find by tag
|
|
||||||
cat .workflow/project.json | jq '.features[] | select(.tags[] == "auth")'
|
|
||||||
|
|
||||||
# View archive
|
|
||||||
cat ${feature.traceability.archive_path}/IMPL_PLAN.md
|
|
||||||
|
|
||||||
# List all tags
|
|
||||||
cat .workflow/project.json | jq -r '.features[].tags[]' | sort -u
|
|
||||||
```
|
|
||||||
|
|
||||||
**Empty State**:
|
|
||||||
```
|
|
||||||
## Project: ${projectData.project_name}
|
|
||||||
Initialized: ${projectData.initialized_at}
|
|
||||||
|
|
||||||
No features completed yet.
|
|
||||||
|
|
||||||
Complete your first workflow session to add features:
|
|
||||||
1. /workflow:plan "feature description"
|
|
||||||
2. /workflow:execute
|
|
||||||
3. /workflow:session:complete
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 4: Show Recent Sessions (Optional)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# List 5 most recent archived sessions
|
|
||||||
bash(ls -1t .workflow/archives/WFS-* 2>/dev/null | head -5 | xargs -I {} basename {})
|
|
||||||
```
|
|
||||||
|
|
||||||
**Output**:
|
|
||||||
```
|
|
||||||
### Recent Sessions
|
|
||||||
- WFS-auth-system (archived)
|
|
||||||
- WFS-payment-flow (archived)
|
|
||||||
- WFS-user-dashboard (archived)
|
|
||||||
|
|
||||||
Use /workflow:session:complete to archive current session.
|
|
||||||
```
|
|
||||||
|
|
||||||
## Workflow Session Mode (Default)
|
|
||||||
|
|
||||||
### Step 1: Find Active Session
|
|
||||||
```bash
|
|
||||||
find .workflow/active/ -name "WFS-*" -type d 2>/dev/null | head -1
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 2: Load Session Data
|
|
||||||
```bash
|
|
||||||
cat .workflow/active/WFS-session/workflow-session.json
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 3: Scan Task Files
|
|
||||||
```bash
|
|
||||||
find .workflow/active/WFS-session/.task/ -name "*.json" -type f 2>/dev/null
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 4: Generate Task Status
|
|
||||||
```bash
|
|
||||||
cat .workflow/active/WFS-session/.task/impl-1.json | jq -r '.status'
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 5: Count Task Progress
|
|
||||||
```bash
|
|
||||||
find .workflow/active/WFS-session/.task/ -name "*.json" -type f | wc -l
|
|
||||||
find .workflow/active/WFS-session/.summaries/ -name "*.md" -type f 2>/dev/null | wc -l
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 6: Display Overview
|
|
||||||
```markdown
|
|
||||||
# Workflow Overview
|
|
||||||
**Session**: WFS-session-name
|
|
||||||
**Progress**: 3/8 tasks completed
|
|
||||||
|
|
||||||
## Active Tasks
|
|
||||||
- [IN PROGRESS] impl-1: Current task in progress
|
|
||||||
- [ ] impl-2: Next pending task
|
|
||||||
|
|
||||||
## Completed Tasks
|
|
||||||
- [COMPLETED] impl-0: Setup completed
|
|
||||||
```
|
|
||||||
|
|
||||||
## Dashboard Mode (HTML Board)
|
|
||||||
|
|
||||||
### Step 1: Check for --dashboard flag
|
|
||||||
```bash
|
|
||||||
# If --dashboard flag present → Execute Dashboard Mode
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 2: Collect Workflow Data
|
|
||||||
|
|
||||||
**Collect Active Sessions**:
|
|
||||||
```bash
|
|
||||||
# Find all active sessions
|
|
||||||
find .workflow/active/ -name "WFS-*" -type d 2>/dev/null
|
|
||||||
|
|
||||||
# For each active session, read metadata and tasks
|
|
||||||
for session in $(find .workflow/active/ -name "WFS-*" -type d 2>/dev/null); do
|
|
||||||
cat "$session/workflow-session.json"
|
|
||||||
find "$session/.task/" -name "*.json" -type f 2>/dev/null
|
|
||||||
done
|
|
||||||
```
|
|
||||||
|
|
||||||
**Collect Archived Sessions**:
|
|
||||||
```bash
|
|
||||||
# Find all archived sessions
|
|
||||||
find .workflow/archives/ -name "WFS-*" -type d 2>/dev/null
|
|
||||||
|
|
||||||
# Read manifest if exists
|
|
||||||
cat .workflow/archives/manifest.json 2>/dev/null
|
|
||||||
|
|
||||||
# For each archived session, read metadata
|
|
||||||
for archive in $(find .workflow/archives/ -name "WFS-*" -type d 2>/dev/null); do
|
|
||||||
cat "$archive/workflow-session.json" 2>/dev/null
|
|
||||||
# Count completed tasks
|
|
||||||
find "$archive/.task/" -name "*.json" -type f 2>/dev/null | wc -l
|
|
||||||
done
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 3: Process and Structure Data
|
|
||||||
|
|
||||||
**Build data structure for dashboard**:
|
|
||||||
```javascript
|
|
||||||
const dashboardData = {
|
|
||||||
activeSessions: [],
|
|
||||||
archivedSessions: [],
|
|
||||||
generatedAt: new Date().toISOString()
|
|
||||||
};
|
|
||||||
|
|
||||||
// Process active sessions
|
|
||||||
for each active_session in active_sessions:
|
|
||||||
const sessionData = JSON.parse(Read(active_session/workflow-session.json));
|
|
||||||
const tasks = [];
|
|
||||||
|
|
||||||
// Load all tasks for this session
|
|
||||||
for each task_file in find(active_session/.task/*.json):
|
|
||||||
const taskData = JSON.parse(Read(task_file));
|
|
||||||
tasks.push({
|
|
||||||
task_id: taskData.task_id,
|
|
||||||
title: taskData.title,
|
|
||||||
status: taskData.status,
|
|
||||||
type: taskData.type
|
|
||||||
});
|
|
||||||
|
|
||||||
dashboardData.activeSessions.push({
|
|
||||||
session_id: sessionData.session_id,
|
|
||||||
project: sessionData.project,
|
|
||||||
status: sessionData.status,
|
|
||||||
created_at: sessionData.created_at || sessionData.initialized_at,
|
|
||||||
tasks: tasks
|
|
||||||
});
|
|
||||||
|
|
||||||
// Process archived sessions
|
|
||||||
for each archived_session in archived_sessions:
|
|
||||||
const sessionData = JSON.parse(Read(archived_session/workflow-session.json));
|
|
||||||
const taskCount = bash(find archived_session/.task/*.json | wc -l);
|
|
||||||
|
|
||||||
dashboardData.archivedSessions.push({
|
|
||||||
session_id: sessionData.session_id,
|
|
||||||
project: sessionData.project,
|
|
||||||
archived_at: sessionData.completed_at || sessionData.archived_at,
|
|
||||||
taskCount: parseInt(taskCount),
|
|
||||||
archive_path: archived_session
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 4: Generate HTML from Template
|
|
||||||
|
|
||||||
**Load template and inject data**:
|
|
||||||
```javascript
|
|
||||||
// Read the HTML template
|
|
||||||
const template = Read("~/.claude/templates/workflow-dashboard.html");
|
|
||||||
|
|
||||||
// Prepare data for injection
|
|
||||||
const dataJson = JSON.stringify(dashboardData, null, 2);
|
|
||||||
|
|
||||||
// Replace placeholder with actual data
|
|
||||||
const htmlContent = template.replace('{{WORKFLOW_DATA}}', dataJson);
|
|
||||||
|
|
||||||
// Ensure .workflow directory exists
|
|
||||||
bash(mkdir -p .workflow);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 5: Write HTML File
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Write the generated HTML to .workflow/dashboard.html
|
|
||||||
Write({
|
|
||||||
file_path: ".workflow/dashboard.html",
|
|
||||||
content: htmlContent
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 6: Display Success Message
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
Dashboard generated successfully!
|
|
||||||
|
|
||||||
Location: .workflow/dashboard.html
|
|
||||||
|
|
||||||
Open in browser:
|
|
||||||
file://$(pwd)/.workflow/dashboard.html
|
|
||||||
|
|
||||||
Features:
|
|
||||||
- 📊 Active sessions overview
|
|
||||||
- 📦 Archived sessions history
|
|
||||||
- 🔍 Search and filter
|
|
||||||
- 📈 Progress tracking
|
|
||||||
- 🎨 Dark/light theme
|
|
||||||
|
|
||||||
Refresh data: Re-run /workflow:status --dashboard
|
|
||||||
```
|
|
||||||
@@ -44,7 +44,7 @@ allowed-tools: SlashCommand(*), TodoWrite(*), Read(*), Bash(*)
|
|||||||
**Step 1.1: Dispatch** - Session discovery and initialization
|
**Step 1.1: Dispatch** - Session discovery and initialization
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
SlashCommand(command="/workflow:session:start --auto \"TDD: [structured-description]\"")
|
SlashCommand(command="/workflow:session:start --type tdd --auto \"TDD: [structured-description]\"")
|
||||||
```
|
```
|
||||||
|
|
||||||
**TDD Structured Format**:
|
**TDD Structured Format**:
|
||||||
|
|||||||
@@ -159,19 +159,19 @@ Read(".workflow/active/[sourceSessionId]/.process/context-package.json")
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// Session Mode - Include original task description to enable semantic CLI selection
|
// Session Mode - Include original task description to enable semantic CLI selection
|
||||||
SlashCommand(command="/workflow:session:start --new \"Test validation for [sourceSessionId]: [originalTaskDescription]\"")
|
SlashCommand(command="/workflow:session:start --type test --new \"Test validation for [sourceSessionId]: [originalTaskDescription]\"")
|
||||||
|
|
||||||
// Prompt Mode - User's description already contains their intent
|
// Prompt Mode - User's description already contains their intent
|
||||||
SlashCommand(command="/workflow:session:start --new \"Test generation for: [description]\"")
|
SlashCommand(command="/workflow:session:start --type test --new \"Test generation for: [description]\"")
|
||||||
```
|
```
|
||||||
|
|
||||||
**Input**: User argument (session ID, description, or file path)
|
**Input**: User argument (session ID, description, or file path)
|
||||||
|
|
||||||
**Expected Behavior**:
|
**Expected Behavior**:
|
||||||
- Creates new session: `WFS-test-[slug]`
|
- Creates new session: `WFS-test-[slug]`
|
||||||
- Writes `workflow-session.json` metadata:
|
- Writes `workflow-session.json` metadata with `type: "test"`
|
||||||
- **Session Mode**: Includes `workflow_type: "test_session"`, `source_session_id: "[sourceId]"`, description with original user intent
|
- **Session Mode**: Additionally includes `source_session_id: "[sourceId]"`, description with original user intent
|
||||||
- **Prompt Mode**: Includes `workflow_type: "test_session"` only (user's description already contains intent)
|
- **Prompt Mode**: Uses user's description (already contains intent)
|
||||||
- Returns new session ID
|
- Returns new session ID
|
||||||
|
|
||||||
**Parse Output**:
|
**Parse Output**:
|
||||||
@@ -579,11 +579,11 @@ WFS-test-[session]/
|
|||||||
**File**: `workflow-session.json`
|
**File**: `workflow-session.json`
|
||||||
|
|
||||||
**Session Mode** includes:
|
**Session Mode** includes:
|
||||||
- `workflow_type: "test_session"`
|
- `type: "test"` (set by session:start --type test)
|
||||||
- `source_session_id: "[sourceSessionId]"` (enables automatic cross-session context)
|
- `source_session_id: "[sourceSessionId]"` (enables automatic cross-session context)
|
||||||
|
|
||||||
**Prompt Mode** includes:
|
**Prompt Mode** includes:
|
||||||
- `workflow_type: "test_session"`
|
- `type: "test"` (set by session:start --type test)
|
||||||
- No `source_session_id` field
|
- No `source_session_id` field
|
||||||
|
|
||||||
### Execution Flow Diagram
|
### Execution Flow Diagram
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ Execute **${angle}** exploration for task planning context. Analyze codebase fro
|
|||||||
|
|
||||||
## MANDATORY FIRST STEPS (Execute by Agent)
|
## MANDATORY FIRST STEPS (Execute by Agent)
|
||||||
**You (cli-explore-agent) MUST execute these steps in order:**
|
**You (cli-explore-agent) MUST execute these steps in order:**
|
||||||
1. Run: ~/.claude/scripts/get_modules_by_depth.sh (project structure)
|
1. Run: ccw tool exec get_modules_by_depth '{}' (project structure)
|
||||||
2. Run: rg -l "{keyword_from_task}" --type ts (locate relevant files)
|
2. Run: rg -l "{keyword_from_task}" --type ts (locate relevant files)
|
||||||
3. Execute: cat ~/.claude/workflows/cli-templates/schemas/explore-json-schema.json (get output schema reference)
|
3. Execute: cat ~/.claude/workflows/cli-templates/schemas/explore-json-schema.json (get output schema reference)
|
||||||
|
|
||||||
@@ -171,7 +171,7 @@ Execute **${angle}** exploration for task planning context. Analyze codebase fro
|
|||||||
- dependencies: Dependencies relevant to ${angle}
|
- dependencies: Dependencies relevant to ${angle}
|
||||||
- integration_points: Where to integrate from ${angle} viewpoint (include file:line locations)
|
- integration_points: Where to integrate from ${angle} viewpoint (include file:line locations)
|
||||||
- constraints: ${angle}-specific limitations/conventions
|
- constraints: ${angle}-specific limitations/conventions
|
||||||
- clarification_needs: ${angle}-related ambiguities (with options array)
|
- clarification_needs: ${angle}-related ambiguities (options array + recommended index)
|
||||||
- _metadata.exploration_angle: "${angle}"
|
- _metadata.exploration_angle: "${angle}"
|
||||||
|
|
||||||
## Success Criteria
|
## Success Criteria
|
||||||
@@ -182,7 +182,7 @@ Execute **${angle}** exploration for task planning context. Analyze codebase fro
|
|||||||
- [ ] Integration points include file:line locations
|
- [ ] Integration points include file:line locations
|
||||||
- [ ] Constraints are project-specific to ${angle}
|
- [ ] Constraints are project-specific to ${angle}
|
||||||
- [ ] JSON output follows schema exactly
|
- [ ] JSON output follows schema exactly
|
||||||
- [ ] clarification_needs includes options array
|
- [ ] clarification_needs includes options + recommended
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
Write: ${sessionFolder}/exploration-${angle}.json
|
Write: ${sessionFolder}/exploration-${angle}.json
|
||||||
@@ -251,7 +251,7 @@ Execute all discovery tracks:
|
|||||||
### Phase 3: Synthesis, Assessment & Packaging
|
### Phase 3: Synthesis, Assessment & Packaging
|
||||||
1. Apply relevance scoring and build dependency graph
|
1. Apply relevance scoring and build dependency graph
|
||||||
2. **Synthesize 4-source data**: Merge findings from all sources (archive > docs > code > web). **Prioritize the context from `project.json`** for architecture and tech stack unless code analysis reveals it's outdated.
|
2. **Synthesize 4-source data**: Merge findings from all sources (archive > docs > code > web). **Prioritize the context from `project.json`** for architecture and tech stack unless code analysis reveals it's outdated.
|
||||||
3. **Populate `project_context`**: Directly use the `overview` from `project.json` to fill the `project_context` section of the output `context-package.json`. Include technology_stack, architecture, key_components, and entry_points.
|
3. **Populate `project_context`**: Directly use the `overview` from `project.json` to fill the `project_context` section of the output `context-package.json`. Include description, technology_stack, architecture, and key_components.
|
||||||
4. Integrate brainstorm artifacts (if .brainstorming/ exists, read content)
|
4. Integrate brainstorm artifacts (if .brainstorming/ exists, read content)
|
||||||
5. Perform conflict detection with risk assessment
|
5. Perform conflict detection with risk assessment
|
||||||
6. **Inject historical conflicts** from archive analysis into conflict_detection
|
6. **Inject historical conflicts** from archive analysis into conflict_detection
|
||||||
@@ -260,7 +260,7 @@ Execute all discovery tracks:
|
|||||||
## Output Requirements
|
## Output Requirements
|
||||||
Complete context-package.json with:
|
Complete context-package.json with:
|
||||||
- **metadata**: task_description, keywords, complexity, tech_stack, session_id
|
- **metadata**: task_description, keywords, complexity, tech_stack, session_id
|
||||||
- **project_context**: architecture_patterns, coding_conventions, tech_stack (sourced from `project.json` overview)
|
- **project_context**: description, technology_stack, architecture, key_components (sourced from `project.json` overview)
|
||||||
- **assets**: {documentation[], source_code[], config[], tests[]} with relevance scores
|
- **assets**: {documentation[], source_code[], config[], tests[]} with relevance scores
|
||||||
- **dependencies**: {internal[], external[]} with dependency graph
|
- **dependencies**: {internal[], external[]} with dependency graph
|
||||||
- **brainstorm_artifacts**: {guidance_specification, role_analyses[], synthesis_output} with content
|
- **brainstorm_artifacts**: {guidance_specification, role_analyses[], synthesis_output} with content
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ Generate implementation planning documents (IMPL_PLAN.md, task JSONs, TODO_LIST.
|
|||||||
## Core Philosophy
|
## Core Philosophy
|
||||||
- **Planning Only**: Generate planning documents (IMPL_PLAN.md, task JSONs, TODO_LIST.md) - does NOT implement code
|
- **Planning Only**: Generate planning documents (IMPL_PLAN.md, task JSONs, TODO_LIST.md) - does NOT implement code
|
||||||
- **Agent-Driven Document Generation**: Delegate plan generation to action-planning-agent
|
- **Agent-Driven Document Generation**: Delegate plan generation to action-planning-agent
|
||||||
|
- **N+1 Parallel Planning**: Auto-detect multi-module projects, enable parallel planning (2+1 or 3+1 mode)
|
||||||
- **Progressive Loading**: Load context incrementally (Core → Selective → On-Demand) due to analysis.md file size
|
- **Progressive Loading**: Load context incrementally (Core → Selective → On-Demand) due to analysis.md file size
|
||||||
- **Two-Phase Flow**: Discovery (context gathering) → Output (planning document generation)
|
|
||||||
- **Memory-First**: Reuse loaded documents from conversation memory
|
- **Memory-First**: Reuse loaded documents from conversation memory
|
||||||
- **Smart Selection**: Load synthesis_output OR guidance + relevant role analyses, NOT all role analyses
|
- **Smart Selection**: Load synthesis_output OR guidance + relevant role analyses, NOT all role analyses
|
||||||
- **MCP-Enhanced**: Use MCP tools for advanced code analysis and research
|
- **MCP-Enhanced**: Use MCP tools for advanced code analysis and research
|
||||||
@@ -28,22 +28,38 @@ Input Parsing:
|
|||||||
├─ Parse flags: --session
|
├─ Parse flags: --session
|
||||||
└─ Validation: session_id REQUIRED
|
└─ Validation: session_id REQUIRED
|
||||||
|
|
||||||
Phase 1: Context Preparation (Command)
|
Phase 1: Context Preparation & Module Detection (Command)
|
||||||
├─ Assemble session paths (metadata, context package, output dirs)
|
├─ Assemble session paths (metadata, context package, output dirs)
|
||||||
└─ Provide metadata (session_id, execution_mode, mcp_capabilities)
|
├─ Provide metadata (session_id, execution_mode, mcp_capabilities)
|
||||||
|
├─ Auto-detect modules from context-package + directory structure
|
||||||
|
└─ Decision:
|
||||||
|
├─ modules.length == 1 → Single Agent Mode (Phase 2A)
|
||||||
|
└─ modules.length >= 2 → Parallel Mode (Phase 2B + Phase 3)
|
||||||
|
|
||||||
Phase 2: Planning Document Generation (Agent)
|
Phase 2A: Single Agent Planning (Original Flow)
|
||||||
├─ Load context package (progressive loading strategy)
|
├─ Load context package (progressive loading strategy)
|
||||||
├─ Generate Task JSON Files (.task/IMPL-*.json)
|
├─ Generate Task JSON Files (.task/IMPL-*.json)
|
||||||
├─ Create IMPL_PLAN.md
|
├─ Create IMPL_PLAN.md
|
||||||
└─ Generate TODO_LIST.md
|
└─ Generate TODO_LIST.md
|
||||||
|
|
||||||
|
Phase 2B: N Parallel Planning (Multi-Module)
|
||||||
|
├─ Launch N action-planning-agents simultaneously (one per module)
|
||||||
|
├─ Each agent generates module-scoped tasks (IMPL-{prefix}{seq}.json)
|
||||||
|
├─ Task ID format: IMPL-A1, IMPL-A2... / IMPL-B1, IMPL-B2...
|
||||||
|
└─ Each module limited to ≤9 tasks
|
||||||
|
|
||||||
|
Phase 3: Integration (+1 Coordinator, Multi-Module Only)
|
||||||
|
├─ Collect all module task JSONs
|
||||||
|
├─ Resolve cross-module dependencies (CROSS::{module}::{pattern} → actual ID)
|
||||||
|
├─ Generate unified IMPL_PLAN.md (grouped by module)
|
||||||
|
└─ Generate TODO_LIST.md (hierarchical: module → tasks)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Document Generation Lifecycle
|
## Document Generation Lifecycle
|
||||||
|
|
||||||
### Phase 1: Context Preparation (Command Responsibility)
|
### Phase 1: Context Preparation & Module Detection (Command Responsibility)
|
||||||
|
|
||||||
**Command prepares session paths and metadata for planning document generation.**
|
**Command prepares session paths, metadata, and detects module structure.**
|
||||||
|
|
||||||
**Session Path Structure**:
|
**Session Path Structure**:
|
||||||
```
|
```
|
||||||
@@ -52,8 +68,12 @@ Phase 2: Planning Document Generation (Agent)
|
|||||||
├── .process/
|
├── .process/
|
||||||
│ └── context-package.json # Context package with artifact catalog
|
│ └── context-package.json # Context package with artifact catalog
|
||||||
├── .task/ # Output: Task JSON files
|
├── .task/ # Output: Task JSON files
|
||||||
├── IMPL_PLAN.md # Output: Implementation plan
|
│ ├── IMPL-A1.json # Multi-module: prefixed by module
|
||||||
└── TODO_LIST.md # Output: TODO list
|
│ ├── IMPL-A2.json
|
||||||
|
│ ├── IMPL-B1.json
|
||||||
|
│ └── ...
|
||||||
|
├── IMPL_PLAN.md # Output: Implementation plan (grouped by module)
|
||||||
|
└── TODO_LIST.md # Output: TODO list (hierarchical)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Command Preparation**:
|
**Command Preparation**:
|
||||||
@@ -66,9 +86,40 @@ Phase 2: Planning Document Generation (Agent)
|
|||||||
- `session_id`
|
- `session_id`
|
||||||
- `mcp_capabilities` (available MCP tools)
|
- `mcp_capabilities` (available MCP tools)
|
||||||
|
|
||||||
|
3. **Auto Module Detection** (determines single vs parallel mode):
|
||||||
|
```javascript
|
||||||
|
function autoDetectModules(contextPackage, projectRoot) {
|
||||||
|
// Priority 1: Explicit frontend/backend separation
|
||||||
|
if (exists('src/frontend') && exists('src/backend')) {
|
||||||
|
return [
|
||||||
|
{ name: 'frontend', prefix: 'A', paths: ['src/frontend'] },
|
||||||
|
{ name: 'backend', prefix: 'B', paths: ['src/backend'] }
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Priority 2: Monorepo structure
|
||||||
|
if (exists('packages/*') || exists('apps/*')) {
|
||||||
|
return detectMonorepoModules(); // Returns 2-3 main packages
|
||||||
|
}
|
||||||
|
|
||||||
|
// Priority 3: Context-package dependency clustering
|
||||||
|
const modules = clusterByDependencies(contextPackage.dependencies?.internal);
|
||||||
|
if (modules.length >= 2) return modules.slice(0, 3);
|
||||||
|
|
||||||
|
// Default: Single module (original flow)
|
||||||
|
return [{ name: 'main', prefix: '', paths: ['.'] }];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Decision Logic**:
|
||||||
|
- `modules.length == 1` → Phase 2A (Single Agent, original flow)
|
||||||
|
- `modules.length >= 2` → Phase 2B + Phase 3 (N+1 Parallel)
|
||||||
|
|
||||||
**Note**: CLI tool usage is now determined semantically by action-planning-agent based on user's task description, not by flags.
|
**Note**: CLI tool usage is now determined semantically by action-planning-agent based on user's task description, not by flags.
|
||||||
|
|
||||||
### Phase 2: Planning Document Generation (Agent Responsibility)
|
### Phase 2A: Single Agent Planning (Original Flow)
|
||||||
|
|
||||||
|
**Condition**: `modules.length == 1` (no multi-module detected)
|
||||||
|
|
||||||
**Purpose**: Generate IMPL_PLAN.md, task JSONs, and TODO_LIST.md - planning documents only, NOT code implementation.
|
**Purpose**: Generate IMPL_PLAN.md, task JSONs, and TODO_LIST.md - planning documents only, NOT code implementation.
|
||||||
|
|
||||||
@@ -132,7 +183,7 @@ Determine CLI tool usage per-step based on user's task description:
|
|||||||
|
|
||||||
## QUALITY STANDARDS
|
## QUALITY STANDARDS
|
||||||
Hard Constraints:
|
Hard Constraints:
|
||||||
- Task count <= 12 (hard limit - request re-scope if exceeded)
|
- Task count <= 18 (hard limit - request re-scope if exceeded)
|
||||||
- All requirements quantified (explicit counts and enumerated lists)
|
- All requirements quantified (explicit counts and enumerated lists)
|
||||||
- Acceptance criteria measurable (include verification commands)
|
- Acceptance criteria measurable (include verification commands)
|
||||||
- Artifact references mapped from context package
|
- Artifact references mapped from context package
|
||||||
@@ -148,4 +199,93 @@ Hard Constraints:
|
|||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
、
|
### Phase 2B: N Parallel Planning (Multi-Module)
|
||||||
|
|
||||||
|
**Condition**: `modules.length >= 2` (multi-module detected)
|
||||||
|
|
||||||
|
**Purpose**: Launch N action-planning-agents simultaneously, one per module, for parallel task generation.
|
||||||
|
|
||||||
|
**Parallel Agent Invocation**:
|
||||||
|
```javascript
|
||||||
|
// Launch N agents in parallel (one per module)
|
||||||
|
const planningTasks = modules.map(module =>
|
||||||
|
Task(
|
||||||
|
subagent_type="action-planning-agent",
|
||||||
|
description=`Plan ${module.name} module`,
|
||||||
|
prompt=`
|
||||||
|
## SCOPE
|
||||||
|
- Module: ${module.name} (${module.type})
|
||||||
|
- Focus Paths: ${module.paths.join(', ')}
|
||||||
|
- Task ID Prefix: IMPL-${module.prefix}
|
||||||
|
- Task Limit: ≤9 tasks
|
||||||
|
- Other Modules: ${otherModules.join(', ')}
|
||||||
|
- Cross-module deps format: "CROSS::{module}::{pattern}"
|
||||||
|
|
||||||
|
## SESSION PATHS
|
||||||
|
Input:
|
||||||
|
- Context Package: .workflow/active/{session-id}/.process/context-package.json
|
||||||
|
Output:
|
||||||
|
- Task Dir: .workflow/active/{session-id}/.task/
|
||||||
|
|
||||||
|
## INSTRUCTIONS
|
||||||
|
- Generate tasks ONLY for ${module.name} module
|
||||||
|
- Use task ID format: IMPL-${module.prefix}1, IMPL-${module.prefix}2, ...
|
||||||
|
- For cross-module dependencies, use: depends_on: ["CROSS::B::api-endpoint"]
|
||||||
|
- Maximum 9 tasks per module
|
||||||
|
`
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Execute all in parallel
|
||||||
|
await Promise.all(planningTasks);
|
||||||
|
```
|
||||||
|
|
||||||
|
**Output Structure** (direct to .task/):
|
||||||
|
```
|
||||||
|
.task/
|
||||||
|
├── IMPL-A1.json # Module A (e.g., frontend)
|
||||||
|
├── IMPL-A2.json
|
||||||
|
├── IMPL-B1.json # Module B (e.g., backend)
|
||||||
|
├── IMPL-B2.json
|
||||||
|
└── IMPL-C1.json # Module C (e.g., shared)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Task ID Naming**:
|
||||||
|
- Format: `IMPL-{prefix}{seq}.json`
|
||||||
|
- Prefix: A, B, C... (assigned by detection order)
|
||||||
|
- Sequence: 1, 2, 3... (per-module increment)
|
||||||
|
|
||||||
|
### Phase 3: Integration (+1 Coordinator, Multi-Module Only)
|
||||||
|
|
||||||
|
**Condition**: Only executed when `modules.length >= 2`
|
||||||
|
|
||||||
|
**Purpose**: Collect all module tasks, resolve cross-module dependencies, generate unified documents.
|
||||||
|
|
||||||
|
**Integration Logic**:
|
||||||
|
```javascript
|
||||||
|
// 1. Collect all module task JSONs
|
||||||
|
const allTasks = glob('.task/IMPL-*.json').map(loadJson);
|
||||||
|
|
||||||
|
// 2. Resolve cross-module dependencies
|
||||||
|
for (const task of allTasks) {
|
||||||
|
if (task.depends_on) {
|
||||||
|
task.depends_on = task.depends_on.map(dep => {
|
||||||
|
if (dep.startsWith('CROSS::')) {
|
||||||
|
// CROSS::B::api-endpoint → find matching IMPL-B* task
|
||||||
|
const [, targetModule, pattern] = dep.match(/CROSS::(\w+)::(.+)/);
|
||||||
|
return findTaskByModuleAndPattern(allTasks, targetModule, pattern);
|
||||||
|
}
|
||||||
|
return dep;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Generate unified IMPL_PLAN.md (grouped by module)
|
||||||
|
generateIMPL_PLAN(allTasks, modules);
|
||||||
|
|
||||||
|
// 4. Generate TODO_LIST.md (hierarchical structure)
|
||||||
|
generateTODO_LIST(allTasks, modules);
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: IMPL_PLAN.md and TODO_LIST.md structure definitions are in `action-planning-agent.md`.
|
||||||
|
|
||||||
|
|||||||
@@ -42,10 +42,10 @@ Autonomous TDD task JSON and IMPL_PLAN.md generation using action-planning-agent
|
|||||||
- Different tech stacks or domains within feature
|
- Different tech stacks or domains within feature
|
||||||
|
|
||||||
### Task Limits
|
### Task Limits
|
||||||
- **Maximum 10 tasks** (hard limit for TDD workflows)
|
- **Maximum 18 tasks** (hard limit for TDD workflows)
|
||||||
- **Feature-based**: Complete functional units with internal TDD cycles
|
- **Feature-based**: Complete functional units with internal TDD cycles
|
||||||
- **Hierarchy**: Flat (≤5 simple features) | Two-level (6-10 for complex features with sub-features)
|
- **Hierarchy**: Flat (≤5 simple features) | Two-level (6-10 for complex features with sub-features)
|
||||||
- **Re-scope**: If >10 tasks needed, break project into multiple TDD workflow sessions
|
- **Re-scope**: If >18 tasks needed, break project into multiple TDD workflow sessions
|
||||||
|
|
||||||
### TDD Cycle Mapping
|
### TDD Cycle Mapping
|
||||||
- **Old approach**: 1 feature = 3 tasks (TEST-N.M, IMPL-N.M, REFACTOR-N.M)
|
- **Old approach**: 1 feature = 3 tasks (TEST-N.M, IMPL-N.M, REFACTOR-N.M)
|
||||||
@@ -249,7 +249,7 @@ Refer to: @.claude/agents/action-planning-agent.md for:
|
|||||||
- Each task executes Red-Green-Refactor phases sequentially
|
- Each task executes Red-Green-Refactor phases sequentially
|
||||||
- Task count = Feature count (typically 5 features = 5 tasks)
|
- Task count = Feature count (typically 5 features = 5 tasks)
|
||||||
- Subtasks only when complexity >2500 lines or >6 files per cycle
|
- Subtasks only when complexity >2500 lines or >6 files per cycle
|
||||||
- **Maximum 10 tasks** (hard limit for TDD workflows)
|
- **Maximum 18 tasks** (hard limit for TDD workflows)
|
||||||
|
|
||||||
#### TDD Cycle Mapping
|
#### TDD Cycle Mapping
|
||||||
- **Simple features**: IMPL-N with internal Red-Green-Refactor phases
|
- **Simple features**: IMPL-N with internal Red-Green-Refactor phases
|
||||||
@@ -318,7 +318,7 @@ Refer to: @.claude/agents/action-planning-agent.md for:
|
|||||||
|
|
||||||
**Quality Gates** (Full checklist in action-planning-agent.md):
|
**Quality Gates** (Full checklist in action-planning-agent.md):
|
||||||
- ✓ Quantification requirements enforced (explicit counts, measurable acceptance, exact targets)
|
- ✓ Quantification requirements enforced (explicit counts, measurable acceptance, exact targets)
|
||||||
- ✓ Task count ≤10 (hard limit)
|
- ✓ Task count ≤18 (hard limit)
|
||||||
- ✓ Each task has meta.tdd_workflow: true
|
- ✓ Each task has meta.tdd_workflow: true
|
||||||
- ✓ Each task has exactly 3 implementation steps with tdd_phase field
|
- ✓ Each task has exactly 3 implementation steps with tdd_phase field
|
||||||
- ✓ Green phase includes test-fix cycle logic
|
- ✓ Green phase includes test-fix cycle logic
|
||||||
|
|||||||
@@ -212,7 +212,7 @@ PRIMARY requirements source - extract and map to task JSONs:
|
|||||||
|
|
||||||
## QUALITY STANDARDS
|
## QUALITY STANDARDS
|
||||||
Hard Constraints:
|
Hard Constraints:
|
||||||
- Task count: minimum 2, maximum 12
|
- Task count: minimum 2, maximum 18
|
||||||
- All requirements quantified from TEST_ANALYSIS_RESULTS.md
|
- All requirements quantified from TEST_ANALYSIS_RESULTS.md
|
||||||
- Test framework matches existing project framework
|
- Test framework matches existing project framework
|
||||||
- flow_control includes reusable_test_tools and test_commands from project
|
- flow_control includes reusable_test_tools and test_commands from project
|
||||||
|
|||||||
@@ -320,7 +320,7 @@ Read({base_path}/prototypes/{target}-style-{style_id}-layout-{layout_id}.html)
|
|||||||
|
|
||||||
### Step 1: Run Preview Generation Script
|
### Step 1: Run Preview Generation Script
|
||||||
```bash
|
```bash
|
||||||
bash(~/.claude/scripts/ui-generate-preview.sh "{base_path}/prototypes")
|
bash(ccw tool exec ui_generate_preview '{"prototypesDir":"{base_path}/prototypes"}')
|
||||||
```
|
```
|
||||||
|
|
||||||
**Script generates**:
|
**Script generates**:
|
||||||
@@ -432,7 +432,7 @@ bash(test -f {base_path}/prototypes/compare.html && echo "exists")
|
|||||||
bash(mkdir -p {base_path}/prototypes)
|
bash(mkdir -p {base_path}/prototypes)
|
||||||
|
|
||||||
# Run preview script
|
# Run preview script
|
||||||
bash(~/.claude/scripts/ui-generate-preview.sh "{base_path}/prototypes")
|
bash(ccw tool exec ui_generate_preview '{"prototypesDir":"{base_path}/prototypes"}')
|
||||||
```
|
```
|
||||||
|
|
||||||
## Output Structure
|
## Output Structure
|
||||||
@@ -467,7 +467,7 @@ ERROR: Agent assembly failed
|
|||||||
→ Check inputs exist, validate JSON structure
|
→ Check inputs exist, validate JSON structure
|
||||||
|
|
||||||
ERROR: Script permission denied
|
ERROR: Script permission denied
|
||||||
→ chmod +x ~/.claude/scripts/ui-generate-preview.sh
|
→ Verify ccw tool is available: ccw tool list
|
||||||
```
|
```
|
||||||
|
|
||||||
### Recovery Strategies
|
### Recovery Strategies
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ echo " Output: $base_path"
|
|||||||
|
|
||||||
# 3. Discover files using script
|
# 3. Discover files using script
|
||||||
discovery_file="${intermediates_dir}/discovered-files.json"
|
discovery_file="${intermediates_dir}/discovered-files.json"
|
||||||
~/.claude/scripts/discover-design-files.sh "$source" "$discovery_file"
|
ccw tool exec discover_design_files '{"sourceDir":"'"$source"'","outputPath":"'"$discovery_file"'"}'
|
||||||
|
|
||||||
echo " Output: $discovery_file"
|
echo " Output: $discovery_file"
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ RULES: Focus on direct relevance to task requirements
|
|||||||
"
|
"
|
||||||
|
|
||||||
# Program Architecture (MANDATORY before planning)
|
# Program Architecture (MANDATORY before planning)
|
||||||
~/.claude/scripts/get_modules_by_depth.sh
|
ccw tool exec get_modules_by_depth '{}'
|
||||||
|
|
||||||
# Content Search (rg preferred)
|
# Content Search (rg preferred)
|
||||||
rg "pattern" --type js -n # Search JS files with line numbers
|
rg "pattern" --type js -n # Search JS files with line numbers
|
||||||
|
|||||||
@@ -10,62 +10,81 @@
|
|||||||
- Complex API research → Exa Code Context
|
- Complex API research → Exa Code Context
|
||||||
- Real-time information needs → Exa Web Search
|
- Real-time information needs → Exa Web Search
|
||||||
|
|
||||||
## ⚡ Bash Text Processing (sed/awk)
|
## ⚡ CCW edit_file Tool (AI-Powered Editing)
|
||||||
|
|
||||||
**When to Use**: Edit tool fails 2+ times on same file
|
**When to Use**: Edit tool fails 2+ times on same file
|
||||||
|
|
||||||
### sed Quick Reference
|
### update Mode (Default)
|
||||||
|
|
||||||
|
**Best for**: Code block replacements, function rewrites, multi-line changes
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Replace first occurrence per line
|
ccw tool exec edit_file '{
|
||||||
sed 's/old/new/' file.txt
|
"path": "file.py",
|
||||||
|
"oldText": "def old():\n pass",
|
||||||
# Replace all occurrences (global)
|
"newText": "def new():\n return True"
|
||||||
sed 's/old/new/g' file.txt
|
}'
|
||||||
|
|
||||||
# In-place edit (modify file directly)
|
|
||||||
sed -i 's/old/new/g' file.txt
|
|
||||||
|
|
||||||
# Delete lines matching pattern
|
|
||||||
sed '/pattern/d' file.txt
|
|
||||||
|
|
||||||
# Insert line before match
|
|
||||||
sed '/pattern/i\new line' file.txt
|
|
||||||
|
|
||||||
# Insert line after match
|
|
||||||
sed '/pattern/a\new line' file.txt
|
|
||||||
|
|
||||||
# Replace on specific line number
|
|
||||||
sed '5s/old/new/' file.txt
|
|
||||||
|
|
||||||
# Multi-line replacement (escape newlines)
|
|
||||||
sed ':a;N;$!ba;s/old\npattern/new\ntext/g' file.txt
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### awk Quick Reference
|
**Features**:
|
||||||
|
- ✅ Exact text matching (precise and predictable)
|
||||||
|
- ✅ Auto line ending adaptation (CRLF/LF)
|
||||||
|
- ✅ Simple `oldText` → `newText` replacement
|
||||||
|
- ✅ No special markers needed
|
||||||
|
|
||||||
|
### line Mode (Precise Line Operations)
|
||||||
|
|
||||||
|
**Best for**: Config files, line insertions/deletions, precise line number control
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Print specific column
|
# Insert after specific line
|
||||||
awk '{print $1}' file.txt
|
ccw tool exec edit_file '{
|
||||||
|
"path": "config.txt",
|
||||||
|
"mode": "line",
|
||||||
|
"operation": "insert_after",
|
||||||
|
"line": 10,
|
||||||
|
"text": "new config line"
|
||||||
|
}'
|
||||||
|
|
||||||
# Print lines matching pattern
|
# Delete line range
|
||||||
awk '/pattern/' file.txt
|
ccw tool exec edit_file '{
|
||||||
|
"path": "log.txt",
|
||||||
|
"mode": "line",
|
||||||
|
"operation": "delete",
|
||||||
|
"line": 5,
|
||||||
|
"end_line": 8
|
||||||
|
}'
|
||||||
|
|
||||||
# Replace field value
|
# Replace specific line
|
||||||
awk '{$2="new"; print}' file.txt
|
ccw tool exec edit_file '{
|
||||||
|
"path": "script.sh",
|
||||||
# Conditional replacement
|
"mode": "line",
|
||||||
awk '/pattern/{gsub(/old/,"new")}1' file.txt
|
"operation": "replace",
|
||||||
|
"line": 3,
|
||||||
# Insert line after match
|
"text": "#!/bin/bash"
|
||||||
awk '/pattern/{print; print "new line"; next}1' file.txt
|
}'
|
||||||
|
|
||||||
# Multi-field operations
|
|
||||||
awk -F',' '{print $1, $3}' file.csv
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Operations**:
|
||||||
|
- `insert_before`: Insert text before specified line
|
||||||
|
- `insert_after`: Insert text after specified line
|
||||||
|
- `replace`: Replace line or line range
|
||||||
|
- `delete`: Delete line or line range
|
||||||
|
|
||||||
|
### Mode Selection Guide
|
||||||
|
|
||||||
|
| Scenario | Mode | Reason |
|
||||||
|
|----------|------|--------|
|
||||||
|
| Code refactoring | update | Content-driven replacement |
|
||||||
|
| Function rewrite | update | Simple oldText/newText |
|
||||||
|
| Config line change | line | Precise line number control |
|
||||||
|
| Insert at specific position | line | Exact line number needed |
|
||||||
|
| Delete line range | line | Line-based operation |
|
||||||
|
|
||||||
### Fallback Strategy
|
### Fallback Strategy
|
||||||
|
|
||||||
1. **Edit fails 2+ times** → Try sed for simple replacements
|
1. **Edit fails 1+ times** → Use `ccw tool exec edit_file` (update mode)
|
||||||
2. **sed fails** → Try awk for complex patterns
|
2. **update mode fails** → Try line mode with precise line numbers
|
||||||
3. **awk fails** → Use Write to recreate file
|
3. **All fails** → Use Write to recreate file
|
||||||
|
|
||||||
|
**Default mode**: update (exact matching with line ending adaptation)
|
||||||
|
|||||||
@@ -433,7 +433,7 @@ The `[FLOW_CONTROL]` marker indicates that a task or prompt contains flow contro
|
|||||||
"step": "load_context",
|
"step": "load_context",
|
||||||
"action": "Load project context and patterns",
|
"action": "Load project context and patterns",
|
||||||
"commands": [
|
"commands": [
|
||||||
"bash(~/.claude/scripts/get_modules_by_depth.sh)",
|
"bash(ccw tool exec get_modules_by_depth '{}')",
|
||||||
"Read(CLAUDE.md)"
|
"Read(CLAUDE.md)"
|
||||||
],
|
],
|
||||||
"output_to": "project_structure",
|
"output_to": "project_structure",
|
||||||
|
|||||||
Reference in New Issue
Block a user