claude-symphony 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -12
- package/assets/claude_symphony.webp +0 -0
- package/assets/claude_symphony_ascii.txt +8 -0
- package/bin/create.js +80 -69
- package/package.json +3 -2
- package/template/.claude/commands/benchmark.md +32 -32
- package/template/.claude/commands/brainstorm.md +33 -33
- package/template/.claude/commands/checkpoint.md +42 -42
- package/template/.claude/commands/codex.md +52 -52
- package/template/.claude/commands/collaborate.md +47 -47
- package/template/.claude/commands/context.md +77 -77
- package/template/.claude/commands/deploy.md +50 -50
- package/template/.claude/commands/fork.md +46 -46
- package/template/.claude/commands/gemini.md +43 -43
- package/template/.claude/commands/handoff.md +42 -42
- package/template/.claude/commands/implement.md +42 -42
- package/template/.claude/commands/init-project.md +25 -25
- package/template/.claude/commands/next.md +67 -67
- package/template/.claude/commands/planning.md +38 -38
- package/template/.claude/commands/qa.md +47 -47
- package/template/.claude/commands/refactor.md +50 -50
- package/template/.claude/commands/research.md +31 -31
- package/template/.claude/commands/restore.md +53 -53
- package/template/.claude/commands/run-stage.md +45 -45
- package/template/.claude/commands/stages.md +49 -49
- package/template/.claude/commands/status.md +41 -41
- package/template/.claude/commands/tasks.md +33 -33
- package/template/.claude/commands/test.md +45 -45
- package/template/.claude/commands/ui-ux.md +31 -31
- package/template/.claude/commands/validate.md +81 -81
- package/template/.claude/hooks/ai-selector.sh +39 -39
- package/template/.claude/hooks/auto-checkpoint.sh +30 -30
- package/template/.claude/hooks/output-validator.sh +45 -45
- package/template/.claude/hooks/post-stage.sh +28 -28
- package/template/.claude/hooks/pre-stage.sh +47 -47
- package/template/.claude/hooks/session-start.sh +27 -27
- package/template/.claude/hooks/statusline.sh +24 -24
- package/template/.claude/hooks/stop.sh +26 -26
- package/template/.claude/settings.json +32 -32
- package/template/.claude/skills/ai-collaboration/README.md +31 -31
- package/template/.claude/skills/ai-collaboration/debate.md +66 -66
- package/template/.claude/skills/ai-collaboration/parallel.md +34 -34
- package/template/.claude/skills/ai-collaboration/prompts/CLAUDE.md +59 -63
- package/template/.claude/skills/auto-checkpoint/README.md +46 -46
- package/template/.claude/skills/auto-checkpoint/prompts/CLAUDE.md +68 -72
- package/template/.claude/skills/auto-checkpoint/rollback.md +95 -95
- package/template/.claude/skills/auto-checkpoint/trigger.md +37 -37
- package/template/.claude/skills/context-compression/README.md +69 -69
- package/template/.claude/skills/context-compression/analyze.md +74 -74
- package/template/.claude/skills/context-compression/compress.md +103 -103
- package/template/.claude/skills/context-compression/prompts/compression.md +78 -78
- package/template/.claude/skills/output-validator/README.md +33 -33
- package/template/.claude/skills/output-validator/prompts/CLAUDE.md +74 -78
- package/template/.claude/skills/output-validator/validate.md +76 -76
- package/template/.claude/skills/smart-handoff/README.md +35 -35
- package/template/.claude/skills/smart-handoff/extract.md +42 -42
- package/template/.claude/skills/smart-handoff/prompts/CLAUDE.md +52 -54
- package/template/.claude/skills/smart-handoff/summarize.md +55 -55
- package/template/.claude/skills/stage-transition/README.md +50 -50
- package/template/.claude/skills/stage-transition/handoff-gen.md +89 -89
- package/template/.claude/skills/stage-transition/prompts/transition.md +74 -74
- package/template/.claude/skills/stage-transition/validate.md +41 -41
- package/template/CLAUDE.md +334 -335
- package/template/config/ai_benchmarking.yaml +22 -22
- package/template/config/ai_collaboration.yaml +18 -18
- package/template/config/ai_logging.yaml +50 -50
- package/template/config/auto_checkpoint.yaml +32 -32
- package/template/config/context.yaml +20 -20
- package/template/config/git.yaml +51 -51
- package/template/config/handoff_intelligence.yaml +23 -23
- package/template/config/mcp_fallbacks.yaml +71 -71
- package/template/config/memory_integration.yaml +23 -23
- package/template/config/model_enforcement.yaml +53 -53
- package/template/config/models.yaml +24 -24
- package/template/config/output_validation.yaml +44 -44
- package/template/config/pipeline.yaml +25 -25
- package/template/config/pipeline_forking.yaml +40 -40
- package/template/config/qa_logging.yaml +67 -67
- package/template/config/smart_rollback.yaml +48 -48
- package/template/config/stage_personas.yaml +154 -154
- package/template/config/workflow.yaml +16 -16
- package/template/scripts/ai-benchmark.sh +41 -41
- package/template/scripts/codex-wrapper.sh +32 -32
- package/template/scripts/context-manager.sh +136 -136
- package/template/scripts/create-checkpoint.sh +34 -34
- package/template/scripts/gemini-wrapper.sh +31 -31
- package/template/scripts/init-project.sh +40 -40
- package/template/scripts/list-stages.sh +30 -30
- package/template/scripts/next-stage.sh +67 -67
- package/template/scripts/output-validate.sh +2 -2
- package/template/scripts/pipeline-fork.sh +68 -68
- package/template/scripts/pre-run-check.sh +84 -84
- package/template/scripts/restore-checkpoint.sh +50 -50
- package/template/scripts/run-stage.sh +44 -44
- package/template/scripts/show-status.sh +30 -30
- package/template/scripts/smart-handoff.sh +70 -70
- package/template/stages/01-brainstorm/CLAUDE.md +70 -74
- package/template/stages/01-brainstorm/README.md +54 -54
- package/template/stages/01-brainstorm/config.yaml +18 -18
- package/template/stages/01-brainstorm/prompts/collaboration.md +24 -24
- package/template/stages/01-brainstorm/prompts/ideation.md +41 -41
- package/template/stages/01-brainstorm/prompts/persona.md +50 -50
- package/template/stages/01-brainstorm/prompts/requirements.md +55 -55
- package/template/stages/01-brainstorm/prompts/validation.md +28 -28
- package/template/stages/01-brainstorm/templates/ideas.md +47 -47
- package/template/stages/01-brainstorm/templates/requirements_analysis.md +61 -61
- package/template/stages/02-research/CLAUDE.md +72 -76
- package/template/stages/02-research/config.yaml +12 -12
- package/template/stages/02-research/prompts/collaboration.md +29 -29
- package/template/stages/02-research/prompts/feasibility.md +38 -38
- package/template/stages/02-research/prompts/market_analysis.md +29 -29
- package/template/stages/02-research/prompts/tech_stack.md +34 -34
- package/template/stages/02-research/prompts/validation.md +29 -29
- package/template/stages/03-planning/CLAUDE.md +88 -92
- package/template/stages/03-planning/config.yaml +10 -10
- package/template/stages/03-planning/prompts/architecture.md +43 -43
- package/template/stages/03-planning/prompts/collaboration.md +34 -34
- package/template/stages/03-planning/prompts/validation.md +34 -34
- package/template/stages/04-ui-ux/CLAUDE.md +68 -72
- package/template/stages/04-ui-ux/config.yaml +5 -5
- package/template/stages/04-ui-ux/prompts/collaboration.md +35 -35
- package/template/stages/04-ui-ux/prompts/validation.md +30 -30
- package/template/stages/05-task-management/CLAUDE.md +81 -85
- package/template/stages/05-task-management/config.yaml +17 -17
- package/template/stages/05-task-management/prompts/collaboration.md +30 -30
- package/template/stages/05-task-management/prompts/validation.md +33 -33
- package/template/stages/05-task-management/templates/notion_integration.md +70 -70
- package/template/stages/05-task-management/templates/parallel_groups.yaml +64 -64
- package/template/stages/05-task-management/templates/task_schema.yaml +33 -33
- package/template/stages/06-implementation/CLAUDE.md +117 -121
- package/template/stages/06-implementation/config.yaml +10 -10
- package/template/stages/06-implementation/prompts/collaboration.md +29 -29
- package/template/stages/06-implementation/prompts/validation.md +36 -36
- package/template/stages/07-refactoring/CLAUDE.md +120 -124
- package/template/stages/07-refactoring/config.yaml +11 -11
- package/template/stages/07-refactoring/prompts/collaboration.md +36 -36
- package/template/stages/07-refactoring/prompts/validation.md +40 -40
- package/template/stages/08-qa/CLAUDE.md +80 -84
- package/template/stages/08-qa/config.yaml +7 -7
- package/template/stages/08-qa/prompts/collaboration.md +34 -34
- package/template/stages/08-qa/prompts/validation.md +41 -41
- package/template/stages/09-testing/CLAUDE.md +86 -90
- package/template/stages/09-testing/config.yaml +10 -10
- package/template/stages/09-testing/prompts/collaboration.md +38 -38
- package/template/stages/09-testing/prompts/validation.md +41 -41
- package/template/stages/10-deployment/CLAUDE.md +86 -90
- package/template/stages/10-deployment/config.yaml +11 -11
- package/template/stages/10-deployment/prompts/collaboration.md +37 -37
- package/template/stages/10-deployment/prompts/validation.md +54 -54
- package/template/stages/10-deployment/templates/github-actions-cd.yaml +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# create-checkpoint.sh -
|
|
2
|
+
# create-checkpoint.sh - Checkpoint creation
|
|
3
3
|
# claude-symphony workflow pipeline
|
|
4
4
|
|
|
5
5
|
set -e
|
|
@@ -10,74 +10,74 @@ PROGRESS_FILE="$PROJECT_ROOT/state/progress.json"
|
|
|
10
10
|
TIMESTAMP=$(date +%Y%m%d-%H%M)
|
|
11
11
|
TIMESTAMP_ISO=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
12
12
|
|
|
13
|
-
#
|
|
13
|
+
# Color definitions
|
|
14
14
|
RED='\033[0;31m'
|
|
15
15
|
GREEN='\033[0;32m'
|
|
16
16
|
YELLOW='\033[1;33m'
|
|
17
17
|
BLUE='\033[0;34m'
|
|
18
18
|
NC='\033[0m' # No Color
|
|
19
19
|
|
|
20
|
-
#
|
|
20
|
+
# Check current stage
|
|
21
21
|
if command -v jq &> /dev/null; then
|
|
22
22
|
CURRENT_STAGE=$(jq -r '.current_stage' "$PROGRESS_FILE")
|
|
23
23
|
else
|
|
24
|
-
echo -e "${RED}
|
|
24
|
+
echo -e "${RED}Error:${NC} jq is required."
|
|
25
25
|
exit 1
|
|
26
26
|
fi
|
|
27
27
|
|
|
28
28
|
if [ -z "$CURRENT_STAGE" ] || [ "$CURRENT_STAGE" == "null" ]; then
|
|
29
|
-
echo -e "${RED}
|
|
29
|
+
echo -e "${RED}Error:${NC} No stage currently in progress."
|
|
30
30
|
exit 1
|
|
31
31
|
fi
|
|
32
32
|
|
|
33
|
-
#
|
|
33
|
+
# Default description
|
|
34
34
|
if [ -z "$DESCRIPTION" ]; then
|
|
35
|
-
DESCRIPTION="
|
|
35
|
+
DESCRIPTION="Checkpoint - $CURRENT_STAGE"
|
|
36
36
|
fi
|
|
37
37
|
|
|
38
|
-
#
|
|
38
|
+
# Generate checkpoint ID
|
|
39
39
|
STAGE_NUM=$(echo "$CURRENT_STAGE" | cut -d'-' -f1)
|
|
40
40
|
CP_ID="CP-$STAGE_NUM-$TIMESTAMP"
|
|
41
41
|
|
|
42
42
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
43
|
-
echo "💾
|
|
43
|
+
echo "💾 Creating checkpoint: $CP_ID"
|
|
44
44
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
45
|
-
echo "
|
|
46
|
-
echo "
|
|
45
|
+
echo " Stage: $CURRENT_STAGE"
|
|
46
|
+
echo " Description: $DESCRIPTION"
|
|
47
47
|
echo ""
|
|
48
48
|
|
|
49
|
-
#
|
|
49
|
+
# Create checkpoint directory
|
|
50
50
|
CP_DIR="$PROJECT_ROOT/state/checkpoints/$CP_ID"
|
|
51
51
|
mkdir -p "$CP_DIR"
|
|
52
52
|
|
|
53
|
-
# 1.
|
|
54
|
-
echo -e "${BLUE}[1/4]
|
|
53
|
+
# 1. Copy state files
|
|
54
|
+
echo -e "${BLUE}[1/4] Copying state files${NC}"
|
|
55
55
|
cp "$PROGRESS_FILE" "$CP_DIR/progress.json"
|
|
56
|
-
echo -e "${GREEN}✓${NC} progress.json
|
|
56
|
+
echo -e "${GREEN}✓${NC} progress.json copied"
|
|
57
57
|
|
|
58
|
-
# 2.
|
|
59
|
-
echo -e "${BLUE}[2/4]
|
|
58
|
+
# 2. Copy stage outputs
|
|
59
|
+
echo -e "${BLUE}[2/4] Copying stage output files${NC}"
|
|
60
60
|
STAGE_DIR="$PROJECT_ROOT/stages/$CURRENT_STAGE"
|
|
61
61
|
if [ -d "$STAGE_DIR/outputs" ]; then
|
|
62
62
|
cp -r "$STAGE_DIR/outputs" "$CP_DIR/outputs"
|
|
63
63
|
FILE_COUNT=$(find "$CP_DIR/outputs" -type f | wc -l)
|
|
64
|
-
echo -e "${GREEN}✓${NC} outputs
|
|
64
|
+
echo -e "${GREEN}✓${NC} outputs copied ($FILE_COUNT files)"
|
|
65
65
|
else
|
|
66
66
|
mkdir -p "$CP_DIR/outputs"
|
|
67
|
-
echo -e "${YELLOW}⚠${NC} outputs
|
|
67
|
+
echo -e "${YELLOW}⚠${NC} No outputs directory (empty directory created)"
|
|
68
68
|
fi
|
|
69
69
|
|
|
70
|
-
# 3. HANDOFF.md
|
|
71
|
-
echo -e "${BLUE}[3/4] HANDOFF.md
|
|
70
|
+
# 3. Copy HANDOFF.md (if exists)
|
|
71
|
+
echo -e "${BLUE}[3/4] Copying HANDOFF.md${NC}"
|
|
72
72
|
if [ -f "$STAGE_DIR/HANDOFF.md" ]; then
|
|
73
73
|
cp "$STAGE_DIR/HANDOFF.md" "$CP_DIR/"
|
|
74
|
-
echo -e "${GREEN}✓${NC} HANDOFF.md
|
|
74
|
+
echo -e "${GREEN}✓${NC} HANDOFF.md copied"
|
|
75
75
|
else
|
|
76
|
-
echo -e "${YELLOW}⚠${NC} HANDOFF.md
|
|
76
|
+
echo -e "${YELLOW}⚠${NC} No HANDOFF.md"
|
|
77
77
|
fi
|
|
78
78
|
|
|
79
|
-
# 4.
|
|
80
|
-
echo -e "${BLUE}[4/4]
|
|
79
|
+
# 4. Generate metadata
|
|
80
|
+
echo -e "${BLUE}[4/4] Generating metadata${NC}"
|
|
81
81
|
cat > "$CP_DIR/metadata.json" << EOF
|
|
82
82
|
{
|
|
83
83
|
"id": "$CP_ID",
|
|
@@ -88,29 +88,29 @@ cat > "$CP_DIR/metadata.json" << EOF
|
|
|
88
88
|
}
|
|
89
89
|
EOF
|
|
90
90
|
|
|
91
|
-
#
|
|
91
|
+
# Add file list
|
|
92
92
|
if command -v jq &> /dev/null; then
|
|
93
93
|
FILES=$(find "$CP_DIR" -type f -not -name "metadata.json" | jq -R -s -c 'split("\n") | map(select(length > 0))')
|
|
94
94
|
jq ".files = $FILES" "$CP_DIR/metadata.json" > "$CP_DIR/metadata.json.tmp" && mv "$CP_DIR/metadata.json.tmp" "$CP_DIR/metadata.json"
|
|
95
95
|
fi
|
|
96
|
-
echo -e "${GREEN}✓${NC}
|
|
96
|
+
echo -e "${GREEN}✓${NC} Metadata generated"
|
|
97
97
|
|
|
98
|
-
# 5. progress.json
|
|
98
|
+
# 5. Add checkpoint to progress.json
|
|
99
99
|
echo ""
|
|
100
|
-
echo -e "${BLUE}
|
|
100
|
+
echo -e "${BLUE}Updating state${NC}"
|
|
101
101
|
jq ".checkpoints += [{\"id\": \"$CP_ID\", \"stage\": \"$CURRENT_STAGE\", \"description\": \"$DESCRIPTION\", \"created_at\": \"$TIMESTAMP_ISO\"}] | \
|
|
102
102
|
.stages.\"$CURRENT_STAGE\".checkpoint_id = \"$CP_ID\"" \
|
|
103
103
|
"$PROGRESS_FILE" > "${PROGRESS_FILE}.tmp" && mv "${PROGRESS_FILE}.tmp" "$PROGRESS_FILE"
|
|
104
|
-
echo -e "${GREEN}✓${NC} progress.json
|
|
104
|
+
echo -e "${GREEN}✓${NC} progress.json updated"
|
|
105
105
|
|
|
106
|
-
#
|
|
106
|
+
# Completion message
|
|
107
107
|
echo ""
|
|
108
108
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
109
|
-
echo -e "${GREEN}✓${NC}
|
|
109
|
+
echo -e "${GREEN}✓${NC} Checkpoint creation complete!"
|
|
110
110
|
echo ""
|
|
111
111
|
echo " ID: $CP_ID"
|
|
112
|
-
echo "
|
|
112
|
+
echo " Location: state/checkpoints/$CP_ID/"
|
|
113
113
|
echo ""
|
|
114
|
-
echo -e "${BLUE}
|
|
114
|
+
echo -e "${BLUE}Restore command:${NC}"
|
|
115
115
|
echo " scripts/restore-checkpoint.sh $CP_ID"
|
|
116
116
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
@@ -1,96 +1,96 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# gemini-wrapper.sh - tmux
|
|
2
|
+
# gemini-wrapper.sh - tmux-based Gemini CLI wrapper
|
|
3
3
|
# claude-symphony workflow pipeline
|
|
4
|
-
# tmux wait-for
|
|
4
|
+
# tmux wait-for channel-based synchronization (no polling, immediate response)
|
|
5
5
|
|
|
6
6
|
SESSION_NAME="ax-gemini"
|
|
7
7
|
CHANNEL="ax-gemini-done-$$"
|
|
8
8
|
OUTPUT_FILE="/tmp/ax-gemini-output-$$"
|
|
9
9
|
PROMPT="$1"
|
|
10
|
-
TIMEOUT="${2:-300}" #
|
|
10
|
+
TIMEOUT="${2:-300}" # Default 5 minute timeout
|
|
11
11
|
|
|
12
|
-
#
|
|
12
|
+
# Color definitions
|
|
13
13
|
RED='\033[0;31m'
|
|
14
14
|
GREEN='\033[0;32m'
|
|
15
15
|
YELLOW='\033[1;33m'
|
|
16
16
|
BLUE='\033[0;34m'
|
|
17
17
|
NC='\033[0m' # No Color
|
|
18
18
|
|
|
19
|
-
#
|
|
19
|
+
# Usage
|
|
20
20
|
if [ -z "$PROMPT" ]; then
|
|
21
|
-
echo "
|
|
22
|
-
echo "
|
|
21
|
+
echo "Usage: $0 \"<prompt>\" [timeout_seconds]"
|
|
22
|
+
echo "Example: $0 \"Find Claude Code related posts on Reddit\" 300"
|
|
23
23
|
exit 1
|
|
24
24
|
fi
|
|
25
25
|
|
|
26
|
-
# tmux
|
|
26
|
+
# Check tmux
|
|
27
27
|
if ! command -v tmux &> /dev/null; then
|
|
28
|
-
echo -e "${RED}
|
|
29
|
-
echo "
|
|
28
|
+
echo -e "${RED}Error:${NC} tmux is not installed."
|
|
29
|
+
echo "Install: brew install tmux (macOS) or apt install tmux (Ubuntu)"
|
|
30
30
|
exit 1
|
|
31
31
|
fi
|
|
32
32
|
|
|
33
|
-
# Gemini CLI
|
|
33
|
+
# Check Gemini CLI
|
|
34
34
|
if ! command -v gemini &> /dev/null; then
|
|
35
|
-
echo -e "${YELLOW}
|
|
36
|
-
echo "
|
|
35
|
+
echo -e "${YELLOW}Warning:${NC} gemini CLI is not installed."
|
|
36
|
+
echo "Running in simulation mode without Gemini CLI."
|
|
37
37
|
echo ""
|
|
38
|
-
echo "[
|
|
38
|
+
echo "[Simulation] Gemini response:"
|
|
39
39
|
echo "---"
|
|
40
|
-
echo "Gemini CLI
|
|
41
|
-
echo "
|
|
40
|
+
echo "Actual response will be displayed when Gemini CLI is installed."
|
|
41
|
+
echo "Prompt: $PROMPT"
|
|
42
42
|
exit 0
|
|
43
43
|
fi
|
|
44
44
|
|
|
45
|
-
#
|
|
45
|
+
# Cleanup temporary files
|
|
46
46
|
cleanup() {
|
|
47
47
|
rm -f "$OUTPUT_FILE"
|
|
48
48
|
}
|
|
49
49
|
trap cleanup EXIT
|
|
50
50
|
|
|
51
51
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
52
|
-
echo -e "${BLUE}🤖 Gemini CLI
|
|
52
|
+
echo -e "${BLUE}🤖 Gemini CLI Call${NC}"
|
|
53
53
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
54
|
-
echo "
|
|
55
|
-
echo "
|
|
54
|
+
echo " Session: $SESSION_NAME"
|
|
55
|
+
echo " Timeout: ${TIMEOUT}s"
|
|
56
56
|
echo ""
|
|
57
57
|
|
|
58
|
-
# tmux
|
|
58
|
+
# Check/create tmux session
|
|
59
59
|
if ! tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
|
|
60
|
-
echo -e "${YELLOW}⚠${NC}
|
|
60
|
+
echo -e "${YELLOW}⚠${NC} Creating new tmux session: $SESSION_NAME"
|
|
61
61
|
tmux new-session -d -s "$SESSION_NAME"
|
|
62
62
|
sleep 1
|
|
63
63
|
fi
|
|
64
64
|
|
|
65
|
-
#
|
|
65
|
+
# Escape prompt
|
|
66
66
|
ESCAPED_PROMPT=$(printf '%s' "$PROMPT" | sed 's/"/\\"/g' | sed "s/'/'\\\\''/g")
|
|
67
67
|
|
|
68
|
-
# Gemini CLI
|
|
69
|
-
echo -e "${BLUE}Gemini
|
|
68
|
+
# Execute Gemini CLI + signal channel on completion
|
|
69
|
+
echo -e "${BLUE}Calling Gemini...${NC}"
|
|
70
70
|
tmux send-keys -t "$SESSION_NAME" "gemini \"$ESCAPED_PROMPT\" 2>&1 | tee $OUTPUT_FILE; tmux wait-for -S $CHANNEL" Enter
|
|
71
71
|
|
|
72
|
-
#
|
|
72
|
+
# Background timer for timeout handling
|
|
73
73
|
(sleep "$TIMEOUT" && tmux wait-for -S "$CHANNEL" 2>/dev/null) &
|
|
74
74
|
TIMER_PID=$!
|
|
75
75
|
|
|
76
|
-
#
|
|
76
|
+
# Wait for channel signal (blocking)
|
|
77
77
|
tmux wait-for "$CHANNEL"
|
|
78
78
|
kill $TIMER_PID 2>/dev/null || true
|
|
79
79
|
|
|
80
|
-
#
|
|
80
|
+
# Output results
|
|
81
81
|
echo ""
|
|
82
82
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
83
|
-
echo -e "${GREEN}📄 Gemini
|
|
83
|
+
echo -e "${GREEN}📄 Gemini Response:${NC}"
|
|
84
84
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
85
85
|
|
|
86
86
|
if [[ -f "$OUTPUT_FILE" ]]; then
|
|
87
87
|
cat "$OUTPUT_FILE"
|
|
88
88
|
else
|
|
89
|
-
echo -e "${RED}
|
|
89
|
+
echo -e "${RED}Error:${NC} Failed to capture output."
|
|
90
90
|
exit 1
|
|
91
91
|
fi
|
|
92
92
|
|
|
93
93
|
echo ""
|
|
94
94
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
95
|
-
echo -e "${GREEN}✓${NC} Gemini
|
|
95
|
+
echo -e "${GREEN}✓${NC} Gemini call completed"
|
|
96
96
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# init-project.sh -
|
|
2
|
+
# init-project.sh - New project initialization
|
|
3
3
|
# claude-symphony workflow pipeline
|
|
4
4
|
|
|
5
5
|
set -e
|
|
@@ -8,42 +8,42 @@ PROJECT_NAME="$1"
|
|
|
8
8
|
PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
9
9
|
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
10
10
|
|
|
11
|
-
#
|
|
11
|
+
# Color definitions
|
|
12
12
|
RED='\033[0;31m'
|
|
13
13
|
GREEN='\033[0;32m'
|
|
14
14
|
YELLOW='\033[1;33m'
|
|
15
15
|
BLUE='\033[0;34m'
|
|
16
16
|
NC='\033[0m' # No Color
|
|
17
17
|
|
|
18
|
-
#
|
|
18
|
+
# Usage
|
|
19
19
|
if [ -z "$PROJECT_NAME" ]; then
|
|
20
|
-
echo "
|
|
21
|
-
echo "
|
|
20
|
+
echo "Usage: $0 <project-name>"
|
|
21
|
+
echo "Example: $0 my-saas-app"
|
|
22
22
|
exit 1
|
|
23
23
|
fi
|
|
24
24
|
|
|
25
|
-
#
|
|
25
|
+
# Validate project name
|
|
26
26
|
if ! [[ "$PROJECT_NAME" =~ ^[a-z0-9-]+$ ]]; then
|
|
27
|
-
echo -e "${RED}
|
|
27
|
+
echo -e "${RED}Error:${NC} Project name can only contain lowercase letters, numbers, and hyphens."
|
|
28
28
|
exit 1
|
|
29
29
|
fi
|
|
30
30
|
|
|
31
31
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
32
|
-
echo "🚀
|
|
32
|
+
echo "🚀 Project initialization: $PROJECT_NAME"
|
|
33
33
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
34
34
|
|
|
35
|
-
# 1.
|
|
35
|
+
# 1. Create project directory
|
|
36
36
|
PROJECT_DIR="$PROJECT_ROOT/projects/$PROJECT_NAME"
|
|
37
37
|
|
|
38
38
|
if [ -d "$PROJECT_DIR" ]; then
|
|
39
|
-
echo -e "${RED}
|
|
39
|
+
echo -e "${RED}Error:${NC} Project '$PROJECT_NAME' already exists."
|
|
40
40
|
exit 1
|
|
41
41
|
fi
|
|
42
42
|
|
|
43
43
|
mkdir -p "$PROJECT_DIR"
|
|
44
|
-
echo -e "${GREEN}✓${NC}
|
|
44
|
+
echo -e "${GREEN}✓${NC} Project directory created: $PROJECT_DIR"
|
|
45
45
|
|
|
46
|
-
# 2.
|
|
46
|
+
# 2. Initialize state file
|
|
47
47
|
PROGRESS_FILE="$PROJECT_ROOT/state/progress.json"
|
|
48
48
|
|
|
49
49
|
if command -v jq &> /dev/null; then
|
|
@@ -52,58 +52,58 @@ if command -v jq &> /dev/null; then
|
|
|
52
52
|
.pipeline.updated_at = \"$TIMESTAMP\" | \
|
|
53
53
|
.current_stage = \"01-brainstorm\"" \
|
|
54
54
|
"$PROGRESS_FILE" > "${PROGRESS_FILE}.tmp" && mv "${PROGRESS_FILE}.tmp" "$PROGRESS_FILE"
|
|
55
|
-
echo -e "${GREEN}✓${NC}
|
|
55
|
+
echo -e "${GREEN}✓${NC} State file updated"
|
|
56
56
|
else
|
|
57
|
-
echo -e "${YELLOW}⚠${NC} jq
|
|
57
|
+
echo -e "${YELLOW}⚠${NC} jq not installed - manual state file update required"
|
|
58
58
|
fi
|
|
59
59
|
|
|
60
|
-
# 3.
|
|
60
|
+
# 3. Create input file template
|
|
61
61
|
BRAINSTORM_DIR="$PROJECT_ROOT/stages/01-brainstorm"
|
|
62
62
|
mkdir -p "$BRAINSTORM_DIR/inputs"
|
|
63
63
|
|
|
64
64
|
cat > "$BRAINSTORM_DIR/inputs/project_brief.md" << 'EOF'
|
|
65
65
|
# Project Brief
|
|
66
66
|
|
|
67
|
-
##
|
|
67
|
+
## Project Name
|
|
68
68
|
{{PROJECT_NAME}}
|
|
69
69
|
|
|
70
|
-
##
|
|
71
|
-
[
|
|
70
|
+
## One-Line Description
|
|
71
|
+
[Describe the project in one line]
|
|
72
72
|
|
|
73
|
-
##
|
|
74
|
-
[
|
|
73
|
+
## Problem Definition
|
|
74
|
+
[What problem are you solving?]
|
|
75
75
|
|
|
76
|
-
##
|
|
77
|
-
[
|
|
76
|
+
## Target Users
|
|
77
|
+
[Who are the main users?]
|
|
78
78
|
|
|
79
|
-
##
|
|
80
|
-
1. [
|
|
81
|
-
2. [
|
|
82
|
-
3. [
|
|
79
|
+
## Core Features (Draft)
|
|
80
|
+
1. [Feature 1]
|
|
81
|
+
2. [Feature 2]
|
|
82
|
+
3. [Feature 3]
|
|
83
83
|
|
|
84
|
-
##
|
|
85
|
-
[
|
|
84
|
+
## Success Criteria
|
|
85
|
+
[What are the criteria for project success?]
|
|
86
86
|
|
|
87
|
-
##
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
87
|
+
## Constraints
|
|
88
|
+
- Timeline:
|
|
89
|
+
- Budget:
|
|
90
|
+
- Technology:
|
|
91
91
|
|
|
92
|
-
##
|
|
93
|
-
- [URL
|
|
92
|
+
## References
|
|
93
|
+
- [URL or document]
|
|
94
94
|
EOF
|
|
95
95
|
|
|
96
96
|
sed -i '' "s/{{PROJECT_NAME}}/$PROJECT_NAME/g" "$BRAINSTORM_DIR/inputs/project_brief.md" 2>/dev/null || \
|
|
97
97
|
sed -i "s/{{PROJECT_NAME}}/$PROJECT_NAME/g" "$BRAINSTORM_DIR/inputs/project_brief.md"
|
|
98
98
|
|
|
99
|
-
echo -e "${GREEN}✓${NC}
|
|
99
|
+
echo -e "${GREEN}✓${NC} Project brief template created: stages/01-brainstorm/inputs/project_brief.md"
|
|
100
100
|
|
|
101
|
-
# 4.
|
|
101
|
+
# 4. Completion message
|
|
102
102
|
echo ""
|
|
103
103
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
104
|
-
echo -e "${GREEN}✓${NC}
|
|
104
|
+
echo -e "${GREEN}✓${NC} Project '$PROJECT_NAME' initialization complete!"
|
|
105
105
|
echo ""
|
|
106
|
-
echo -e "${BLUE}
|
|
107
|
-
echo "1. stages/01-brainstorm/inputs/project_brief.md
|
|
108
|
-
echo "2. /run-stage 01-brainstorm
|
|
106
|
+
echo -e "${BLUE}Next steps:${NC}"
|
|
107
|
+
echo "1. Fill out stages/01-brainstorm/inputs/project_brief.md"
|
|
108
|
+
echo "2. Run /run-stage 01-brainstorm"
|
|
109
109
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# list-stages.sh -
|
|
2
|
+
# list-stages.sh - Stage list and details display
|
|
3
3
|
# claude-symphony workflow pipeline
|
|
4
4
|
|
|
5
5
|
set -e
|
|
@@ -8,7 +8,7 @@ PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
|
8
8
|
PROGRESS_FILE="$PROJECT_ROOT/state/progress.json"
|
|
9
9
|
STAGES_DIR="$PROJECT_ROOT/stages"
|
|
10
10
|
|
|
11
|
-
#
|
|
11
|
+
# Color definitions
|
|
12
12
|
RED='\033[0;31m'
|
|
13
13
|
GREEN='\033[0;32m'
|
|
14
14
|
YELLOW='\033[1;33m'
|
|
@@ -18,7 +18,7 @@ WHITE='\033[1;37m'
|
|
|
18
18
|
GRAY='\033[0;90m'
|
|
19
19
|
NC='\033[0m' # No Color
|
|
20
20
|
|
|
21
|
-
#
|
|
21
|
+
# Options and arguments handling
|
|
22
22
|
OUTPUT_JSON=false
|
|
23
23
|
FILTER_PENDING=false
|
|
24
24
|
FILTER_COMPLETED=false
|
|
@@ -35,27 +35,27 @@ while [[ "$#" -gt 0 ]]; do
|
|
|
35
35
|
shift
|
|
36
36
|
done
|
|
37
37
|
|
|
38
|
-
# jq
|
|
38
|
+
# Check jq
|
|
39
39
|
if ! command -v jq &> /dev/null; then
|
|
40
|
-
echo -e "${RED}
|
|
40
|
+
echo -e "${RED}Error:${NC} jq is required."
|
|
41
41
|
exit 1
|
|
42
42
|
fi
|
|
43
43
|
|
|
44
|
-
#
|
|
44
|
+
# Stage info arrays
|
|
45
45
|
declare -a STAGE_IDS=("01-brainstorm" "02-research" "03-planning" "04-ui-ux" "05-task-management" "06-implementation" "07-refactoring" "08-qa" "09-testing" "10-deployment")
|
|
46
46
|
declare -a STAGE_NAMES=("brainstorm" "research" "planning" "ui-ux" "task-management" "implementation" "refactoring" "qa" "testing" "deployment")
|
|
47
47
|
declare -a STAGE_AI=("Gemini+Claude" "Claude+MCP" "Gemini" "Gemini" "ClaudeCode" "ClaudeCode" "Codex" "ClaudeCode" "Codex" "ClaudeCode")
|
|
48
48
|
declare -a STAGE_MODES=("YOLO" "Plan Mode" "Plan Mode" "Plan Mode" "Plan Mode" "Plan+Sandbox" "Deep Dive" "Plan+Sandbox" "Playwright" "Headless")
|
|
49
49
|
declare -a STAGE_SHORTCUTS=("brainstorm" "research" "planning" "ui-ux" "tasks" "implement" "refactor" "qa" "test" "deploy")
|
|
50
50
|
|
|
51
|
-
#
|
|
51
|
+
# Get current stage
|
|
52
52
|
if [ -f "$PROGRESS_FILE" ]; then
|
|
53
53
|
CURRENT_STAGE=$(jq -r '.current_stage // "none"' "$PROGRESS_FILE")
|
|
54
54
|
else
|
|
55
55
|
CURRENT_STAGE="none"
|
|
56
56
|
fi
|
|
57
57
|
|
|
58
|
-
#
|
|
58
|
+
# Return status icon
|
|
59
59
|
status_icon() {
|
|
60
60
|
case $1 in
|
|
61
61
|
completed) echo "✅" ;;
|
|
@@ -66,13 +66,13 @@ status_icon() {
|
|
|
66
66
|
esac
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
#
|
|
69
|
+
# Show specific stage details
|
|
70
70
|
show_stage_detail() {
|
|
71
71
|
local num=$1
|
|
72
72
|
local idx=$((num - 1))
|
|
73
73
|
|
|
74
74
|
if [ $idx -lt 0 ] || [ $idx -ge 10 ]; then
|
|
75
|
-
echo -e "${RED}
|
|
75
|
+
echo -e "${RED}Error:${NC} Please enter a valid stage number (01-10)"
|
|
76
76
|
exit 1
|
|
77
77
|
fi
|
|
78
78
|
|
|
@@ -84,7 +84,7 @@ show_stage_detail() {
|
|
|
84
84
|
local STAGE_PATH="$STAGES_DIR/$STAGE_ID"
|
|
85
85
|
local CONFIG_PATH="$STAGE_PATH/config.yaml"
|
|
86
86
|
|
|
87
|
-
#
|
|
87
|
+
# Get status
|
|
88
88
|
if [ -f "$PROGRESS_FILE" ]; then
|
|
89
89
|
STATUS=$(jq -r ".stages.\"$STAGE_ID\".status // \"pending\"" "$PROGRESS_FILE")
|
|
90
90
|
else
|
|
@@ -98,9 +98,9 @@ show_stage_detail() {
|
|
|
98
98
|
echo -e "Mode: ${CYAN}$MODE${NC}"
|
|
99
99
|
echo -e "Status: $(status_icon $STATUS) $STATUS"
|
|
100
100
|
|
|
101
|
-
# config.yaml
|
|
101
|
+
# Get additional info from config.yaml
|
|
102
102
|
if [ -f "$CONFIG_PATH" ]; then
|
|
103
|
-
# timeout
|
|
103
|
+
# Extract timeout (use yq if available, otherwise grep)
|
|
104
104
|
if command -v yq &> /dev/null; then
|
|
105
105
|
TIMEOUT=$(yq -r '.timeout // "60"' "$CONFIG_PATH")
|
|
106
106
|
CHECKPOINT=$(yq -r '.checkpoint_required // false' "$CONFIG_PATH")
|
|
@@ -108,9 +108,9 @@ show_stage_detail() {
|
|
|
108
108
|
TIMEOUT=$(grep "timeout:" "$CONFIG_PATH" 2>/dev/null | head -1 | awk '{print $2}' || echo "60")
|
|
109
109
|
CHECKPOINT=$(grep "checkpoint_required:" "$CONFIG_PATH" 2>/dev/null | head -1 | awk '{print $2}' || echo "false")
|
|
110
110
|
fi
|
|
111
|
-
echo -e "Timeout: ${TIMEOUT}
|
|
111
|
+
echo -e "Timeout: ${TIMEOUT}min"
|
|
112
112
|
if [ "$CHECKPOINT" == "true" ]; then
|
|
113
|
-
echo -e "Checkpoint: ${YELLOW}
|
|
113
|
+
echo -e "Checkpoint: ${YELLOW}Required${NC}"
|
|
114
114
|
fi
|
|
115
115
|
fi
|
|
116
116
|
|
|
@@ -129,7 +129,7 @@ show_stage_detail() {
|
|
|
129
129
|
echo -e " ${GRAY}• $PREV_STAGE/outputs/*${NC}"
|
|
130
130
|
fi
|
|
131
131
|
if [ -z "$(find "$STAGE_PATH/inputs" -type f 2>/dev/null)" ] && [ $idx -eq 0 ]; then
|
|
132
|
-
echo " (
|
|
132
|
+
echo " (None - first stage)"
|
|
133
133
|
fi
|
|
134
134
|
|
|
135
135
|
echo ""
|
|
@@ -144,28 +144,28 @@ show_stage_detail() {
|
|
|
144
144
|
done
|
|
145
145
|
fi
|
|
146
146
|
if [ -d "$STAGE_PATH/templates" ]; then
|
|
147
|
-
echo -e " ${GRAY}(
|
|
147
|
+
echo -e " ${GRAY}(Reference templates: templates/)${NC}"
|
|
148
148
|
fi
|
|
149
149
|
|
|
150
150
|
echo ""
|
|
151
151
|
|
|
152
152
|
# Quick Commands
|
|
153
153
|
echo -e "${BLUE}[Quick Commands]${NC}"
|
|
154
|
-
echo " • /$SHORTCUT -
|
|
155
|
-
printf " • /run-stage %02d -
|
|
154
|
+
echo " • /$SHORTCUT - Start this stage directly"
|
|
155
|
+
printf " • /run-stage %02d - Start after checking prerequisites\n" "$num"
|
|
156
156
|
|
|
157
157
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
#
|
|
160
|
+
# Show specific stage details
|
|
161
161
|
if [ -n "$STAGE_NUM" ]; then
|
|
162
|
-
#
|
|
162
|
+
# Remove leading zeros
|
|
163
163
|
STAGE_NUM=$((10#$STAGE_NUM))
|
|
164
164
|
show_stage_detail "$STAGE_NUM"
|
|
165
165
|
exit 0
|
|
166
166
|
fi
|
|
167
167
|
|
|
168
|
-
# JSON
|
|
168
|
+
# JSON output
|
|
169
169
|
if [ "$OUTPUT_JSON" = true ]; then
|
|
170
170
|
echo "["
|
|
171
171
|
for i in "${!STAGE_IDS[@]}"; do
|
|
@@ -183,7 +183,7 @@ if [ "$OUTPUT_JSON" = true ]; then
|
|
|
183
183
|
exit 0
|
|
184
184
|
fi
|
|
185
185
|
|
|
186
|
-
#
|
|
186
|
+
# Display list
|
|
187
187
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
188
188
|
echo -e "📋 ${WHITE}Pipeline Stages${NC}"
|
|
189
189
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
@@ -196,13 +196,13 @@ for i in "${!STAGE_IDS[@]}"; do
|
|
|
196
196
|
AI="${STAGE_AI[$i]}"
|
|
197
197
|
MODE="${STAGE_MODES[$i]}"
|
|
198
198
|
|
|
199
|
-
#
|
|
199
|
+
# Get status
|
|
200
200
|
STATUS="pending"
|
|
201
201
|
if [ -f "$PROGRESS_FILE" ]; then
|
|
202
202
|
STATUS=$(jq -r ".stages.\"$STAGE_ID\".status // \"pending\"" "$PROGRESS_FILE")
|
|
203
203
|
fi
|
|
204
204
|
|
|
205
|
-
#
|
|
205
|
+
# Filtering
|
|
206
206
|
if [ "$FILTER_PENDING" = true ] && [ "$STATUS" != "pending" ]; then
|
|
207
207
|
continue
|
|
208
208
|
fi
|
|
@@ -213,7 +213,7 @@ for i in "${!STAGE_IDS[@]}"; do
|
|
|
213
213
|
ICON=$(status_icon "$STATUS")
|
|
214
214
|
NUM=$(printf "%02d" $((i + 1)))
|
|
215
215
|
|
|
216
|
-
#
|
|
216
|
+
# Mark current stage
|
|
217
217
|
if [ "$STAGE_ID" == "$CURRENT_STAGE" ]; then
|
|
218
218
|
ARROW=" ${YELLOW}←${NC}"
|
|
219
219
|
else
|
|
@@ -225,7 +225,7 @@ done
|
|
|
225
225
|
|
|
226
226
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
227
227
|
|
|
228
|
-
#
|
|
228
|
+
# Next step guidance
|
|
229
229
|
if [ "$CURRENT_STAGE" != "none" ] && [ -n "$CURRENT_STAGE" ]; then
|
|
230
230
|
CURRENT_NUM=$(echo "$CURRENT_STAGE" | cut -d'-' -f1)
|
|
231
231
|
CURRENT_NUM=$((10#$CURRENT_NUM))
|
|
@@ -233,13 +233,13 @@ if [ "$CURRENT_STAGE" != "none" ] && [ -n "$CURRENT_STAGE" ]; then
|
|
|
233
233
|
|
|
234
234
|
if [ $NEXT_NUM -le 10 ]; then
|
|
235
235
|
NEXT_SHORTCUT="${STAGE_SHORTCUTS[$((NEXT_NUM - 1))]}"
|
|
236
|
-
printf "
|
|
236
|
+
printf "Current: ${CYAN}%s${NC} | Next: ${GREEN}/run-stage %02d${NC} or ${GREEN}/%s${NC}\n" \
|
|
237
237
|
"$CURRENT_STAGE" "$NEXT_NUM" "$NEXT_SHORTCUT"
|
|
238
238
|
else
|
|
239
|
-
echo -e "
|
|
239
|
+
echo -e "Current: ${CYAN}$CURRENT_STAGE${NC} | ${GREEN}Pipeline complete!${NC}"
|
|
240
240
|
fi
|
|
241
241
|
else
|
|
242
|
-
echo -e "
|
|
242
|
+
echo -e "Start: ${GREEN}/init-project [name]${NC} or ${GREEN}/run-stage 01${NC}"
|
|
243
243
|
fi
|
|
244
244
|
|
|
245
245
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|