sdd-agent-pack 1.1.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,126 +2,168 @@
2
2
 
3
3
  Lightweight installer for SDD (Software Driven Development) workflow assets into application repositories.
4
4
 
5
- SDD Agent Pack installs the instructions, skills, hooks, prompts, templates, and supporting files that AI coding agents need to follow the SDD workflow in your project.
5
+ SDD Agent Pack installs the instructions, skills, hooks, orchestration scripts, and templates that AI coding agents need to follow the SDD workflow in your project.
6
6
 
7
7
  ## How It Works
8
8
 
9
- 1. **Install** — Run `sdd-agent-pack init` in your application repository
10
- 2. **Define** — Create `tasks.md` with your epics and tasks, and design documents in `specs/`
11
- 3. **Implement** — An AI agent reads your SDD documents and implements epics systematically
9
+ SDD Agent Pack is **not** an autonomous runtime it's an installer that equips your repo with:
12
10
 
13
- The AI coding agent itself is the execution engine. SDD Agent Pack provides the instructions and controls that guide the agent.
11
+ - **Skills** Keyword-triggered instructions that guide AI agents through the SDD workflow
12
+ - **Orchestration scripts** — Shell and Python scripts that feed epics one at a time to an agent
13
+ - **Hooks** — Quality gates that prevent agents from finishing with failing tests
14
+ - **Templates** — SDD document templates (tasks.md, constitution.md)
15
+
16
+ The **orchestration script** is the key piece: instead of asking an agent to "implement all epics" (which overwhelms LLM-based agents), it reads `tasks.md` and feeds each incomplete epic to the agent **one at a time**.
14
17
 
15
18
  ## Quick Start
16
19
 
17
20
  ### Prerequisites
18
21
 
19
- - **Node.js 18+** — The installer requires Node.js (not Python)
22
+ - **Node.js 18+** — Required for the installer
20
23
  - **Git** — Your project must be a Git repository
21
24
  - **An SDD project** — With `tasks.md` and `specs/` documents
22
25
 
23
- ### Install in your project
26
+ ### 1. Install
24
27
 
25
28
  ```bash
26
29
  npx sdd-agent-pack init
27
30
  ```
28
31
 
29
- This creates `.sdd-agent-pack/` in your project with all the assets AI agents need.
32
+ This installs everything shown below and also:
33
+ - Cleans up any old artifacts from previous versions
34
+ - Tries to install the OpenHands CLI and Python dependencies automatically
35
+ - Updates AGENTS.md with SDD workflow instructions
36
+
37
+ ### 2. Define your epics
38
+
39
+ Create `tasks.md` and `specs/` with your epics and design documents.
40
+
41
+ ### 3. Run the orchestration
42
+
43
+ ```bash
44
+ bash .sdd-agent-pack/scripts/orchestrate.sh
45
+ ```
46
+
47
+ This loops through all incomplete epics in tasks.md, feeding each one to OpenHands individually.
30
48
 
31
49
  ### What gets installed
32
50
 
33
51
  ```
34
- .sdd-agent-pack/
35
- ├── skills/ OpenHands microagents for the SDD workflow
36
- ├── prompts/ Workflow prompts
37
- ├── hooks/ Quality enforcement hooks
38
- ├── docs/ Workflow documentation
39
- ├── templates/ SDD document templates (tasks.md, constitution.md)
40
- └── config/ Agent configuration
52
+ .sdd-agent-pack/ — Core assets (managed by the installer)
53
+ ├── skills/ SDD workflow skills (keyword-triggered)
54
+ ├── scripts/ Epic orchestration scripts
55
+ ├── orchestrate.sh Bash version (needs OpenHands CLI)
56
+ │ └── orchestrate.py Python version (needs OpenHands SDK)
57
+ ├── prompts/ Workflow prompts
58
+ ├── hooks/ Quality enforcement hooks
59
+ ├── docs/ — Workflow documentation
60
+ ├── templates/ — SDD document templates
61
+ └── config/ — Agent configuration
62
+
63
+ .agents/skills/ — OpenHands skill bridge (auto-installed)
64
+ ├── sdd-epic-workflow/
65
+ ├── sdd-implementation/
66
+ ├── sdd-context/
67
+ ├── sdd-testing/
68
+ └── sdd-completion/
69
+
70
+ .openhands/ — OpenHands hook bridge (auto-installed)
71
+ ├── hooks.json — Registers stop hook for quality gates
72
+ └── setup.sh — Auto-runs on session start
41
73
  ```
42
74
 
43
- AGENTS.md is also updated with a managed SDD Agent Pack section.
44
-
45
75
  ### Commands
46
76
 
47
77
  | Command | Description |
48
78
  |---------|-------------|
49
79
  | `init` | Install SDD Agent Pack in the current repository |
50
- | `update` | Update SDD Agent Pack assets |
51
- | `uninstall` | Remove SDD Agent Pack assets safely |
80
+ | `update` | Update installed assets to the latest version |
81
+ | `uninstall` | Remove all SDD Agent Pack assets safely |
52
82
  | `doctor` | Validate installation and environment |
53
83
  | `status` | Show installation status |
54
84
  | `help` | Show all commands |
55
85
 
56
- ## Why SDD Agent Pack?
86
+ ## How to Use This
57
87
 
58
- SDD Agent Pack replaces the previous `sdd-autopilot` runtime application. Instead of a Python-based autonomous orchestrator that managed LLM calls, providers, and execution loops, this is a **lightweight installer** that equips AI agents with the instructions they need.
88
+ ### The Core Problem This Solves
59
89
 
60
- ### What changed
90
+ **LLM-based agents cannot autonomously iterate through a multi-epic `tasks.md`.** If you tell an agent to "implement all 31 epics," it treats that as a single massive objective — it gets overwhelmed, keeps asking for permission, and never completes the work. This is a known limitation of all current coding agents (OpenHands, Claude Code, Copilot, etc.).
61
91
 
62
- | Old (sdd-autopilot) | New (SDD Agent Pack) |
63
- |---------------------|---------------------|
64
- | Python/uv runtime | Node.js/TypeScript CLI |
65
- | Autonomous orchestrator | Repository installer |
66
- | LLM provider management | Agent instruction files |
67
- | API key management | Not needed (agent handles this) |
68
- | Budget tracking | Not needed (agent handles this) |
69
- | Custom slash commands | Standard agent workflow |
92
+ The solution is an **external orchestration loop**: a script that reads `tasks.md`, extracts one epic, feeds it to the agent, waits for completion, then moves to the next.
70
93
 
71
- ## Documentation
94
+ ### Workflow Options
72
95
 
73
- - [Workflow](.sdd-agent-pack/docs/workflow.md) SDD workflow documentation (after install)
74
- - [SDD Agent Pack Spec](specs/sdd-agent-pack_spec.md) — Project specification
96
+ #### Option A: VS Code + Terminal (Recommended)
75
97
 
76
- ## License
98
+ This is the simplest approach. You run the orchestration script directly from **VS Code's integrated terminal**:
77
99
 
78
- MIT
79
- ```
80
- 1. Define epics and tasks in tasks.md
81
- 2. Run /autopilot-prepare in Copilot Chat (first time only)
82
- 3. Run /autopilot-start in Copilot Chat
83
- 4. Copilot implements each epic, runs tests, and advances autonomously
84
- 5. Repeat runs of /autopilot-start continue until all epics are complete
100
+ ```bash
101
+ # 1. Open VS Code in your project folder
102
+ # 2. Open a terminal (Ctrl+\` or Cmd+\`)
103
+ # 3. Run the orchestration script
104
+ bash .sdd-agent-pack/scripts/orchestrate.sh
85
105
  ```
86
106
 
87
- ## Frontmatter Schema
88
-
89
- Tasks and state are tracked in `tasks.md` frontmatter:
90
-
91
- ```yaml
92
- ---
93
- autopilot:
94
- initialized: true
95
- epics:
96
- - id: EPIC-001
97
- title: Authentication
98
- status: pending
99
- completion_notes:
100
- implemented: ["OAuth login"]
101
- files_created: ["src/auth/login.py"]
102
- tests_added: ["tests/test_auth.py"]
103
- architectural_decisions: ["Centralized session management"]
104
- future_context: ["User Management depends on auth state"]
105
- tasks:
106
- - title: Implement login
107
- status: pending
108
- ---
107
+ The script:
108
+ 1. Scans `tasks.md` for incomplete epics
109
+ 2. Calls `openhands --headless -t "Implement Epic X"` for each one
110
+ 3. Waits for each epic to complete before starting the next
111
+ 4. Reports progress as it goes
112
+
113
+ **You can walk away and let it run.** Check back later to see which epics are done.
114
+
115
+ #### Option B: VS Code + Python SDK
116
+
117
+ If you prefer Python over bash:
118
+
119
+ ```bash
120
+ pip install openhands-sdk openhands-tools
121
+ python .sdd-agent-pack/scripts/orchestrate.py
109
122
  ```
110
123
 
111
- ## Key Principles
124
+ #### Option C: OpenHands Cloud Web UI (Manual)
125
+
126
+ If you use OpenHands Cloud, you don't have direct terminal access — only the agent does. In that case, feed epics one at a time manually:
127
+
128
+ > "Implement epic TDS.2.1 from tasks.md following the SDD workflow."
129
+
130
+ Let the agent finish, then ask for the next one. Repeat until done.
112
131
 
113
- - **tasks.md frontmatter is the single source of truth** — No separate database or state store
114
- - **Copilot does implementation** — Autopilot only tracks state and runs tests
115
- - **Test enforcement gates completion** Epics cannot be marked complete until all tests pass
116
- - **Completion notes are project memory** — Every epic must have completion notes
117
- - **Keep it simple** No alternate planning artifacts or duplicate SDD documents
132
+ ### Can I use GitHub Copilot for orchestration?
133
+
134
+ Yes! You can ask Copilot (in VS Code Chat) to run the orchestration script for you:
135
+
136
+ > "Run the SDD orchestration script to implement the next epic."
137
+
138
+ Or you can run the script directly in the VS Code terminal yourself — it's one command.
139
+
140
+ ### Why not just use the agent directly?
141
+
142
+ Because agents can't autonomously loop through 31 epics. The orchestration script is the external loop that:
143
+ - Maintains focus (one epic at a time)
144
+ - Prevents context window overflow
145
+ - Eliminates permission-asking
146
+ - Provides clear progress tracking
118
147
 
119
148
  ## Documentation
120
149
 
121
- - [Copilot Autopilot](docs/copilot-autopilot.md) — Architecture, workflow, frontmatter schema, epic lifecycle, commands
122
- - [Copilot Hooks](docs/copilot-hooks.md) — Hook architecture, workflow, capabilities and limitations
123
- - [Architecture](docs/architecture.md) — System architecture and design
124
- - [User Guide](docs/user-guide.md) Complete user documentation
150
+ - [Specification](specs/sdd-agent-pack_spec.md) — Project architecture and design decisions
151
+ - [Workflow](assets/docs/workflow.md) — SDD workflow documentation
152
+
153
+ ## Why SDD Agent Pack?
154
+
155
+ SDD Agent Pack replaces the previous `sdd-autopilot` runtime application. Instead of a Python-based autonomous orchestrator that managed LLM calls, providers, and execution loops, this is a **lightweight installer** that equips AI agents with the instructions they need.
156
+
157
+ ### What changed
158
+
159
+ | Old (sdd-autopilot) | New (SDD Agent Pack) |
160
+ |---------------------|---------------------|
161
+ | Python/uv runtime | Node.js/TypeScript CLI |
162
+ | Autonomous orchestrator | Repository installer |
163
+ | LLM provider management | Agent instruction files + orchestration scripts |
164
+ | API key management | OpenHands CLI handles this |
165
+ | Budget tracking | Not needed (agent handles this) |
166
+ | Custom slash commands | Standard agent workflow |
125
167
 
126
168
  ## License
127
169
 
@@ -24,15 +24,48 @@ SDD Agent Pack installs the Software Driven Development (SDD) workflow into your
24
24
 
25
25
  ## Agent Workflow
26
26
 
27
- When you ask an agent to implement epics:
27
+ **Important:** AI agents cannot autonomously iterate through many epics — they
28
+ treat a large `tasks.md` as a single massive objective and keep asking for
29
+ permission. This is a known limitation.
28
30
 
29
- 1. The agent discovers all SDD documentation
30
- 2. Identifies the next incomplete epic
31
+ Instead, feed epics **one at a time** using an external orchestration loop.
32
+
33
+ ### Option 1: Orchestration Script (Recommended)
34
+
35
+ Use one of the provided scripts in `.sdd-agent-pack/scripts/`:
36
+
37
+ ```bash
38
+ # Requires OpenHands CLI (https://docs.openhands.dev/openhands/usage/cli/installation)
39
+ bash .sdd-agent-pack/scripts/orchestrate.sh
40
+ ```
41
+
42
+ ```bash
43
+ # Requires OpenHands SDK (pip install openhands-sdk openhands-tools)
44
+ python .sdd-agent-pack/scripts/orchestrate.py
45
+ ```
46
+
47
+ These scripts:
48
+ 1. Parse `tasks.md` for incomplete epics
49
+ 2. Feed each epic to OpenHands one at a time
50
+ 3. Wait for each to complete before starting the next
51
+ 4. Continue until all epics are done
52
+
53
+ ### Option 2: Manual (Agent-by-Agent)
54
+
55
+ Ask the agent to implement a single epic:
56
+
57
+ > "Implement epic XXXXX from tasks.md following the SDD workflow."
58
+
59
+ Let the agent finish, then repeat for the next epic.
60
+
61
+ ### What the Agent Does Per Epic
62
+
63
+ 1. Reads all SDD documentation
64
+ 2. Identifies the current epic's requirements
31
65
  3. Reads the relevant specification
32
66
  4. Implements the code
33
67
  5. Creates and runs tests
34
68
  6. Updates tasks.md with completion notes
35
- 7. Moves to the next epic
36
69
 
37
70
  ## OpenHands Integration
38
71
 
@@ -1,12 +1,14 @@
1
1
  Implement the next incomplete epic from tasks.md using the SDD workflow.
2
2
 
3
+ IMPORTANT: Implement ONLY this one epic. Do NOT start the next one.
4
+
3
5
  Follow these steps:
4
6
  1. Read all SDD documentation (AGENTS.md, constitution.md, plan.md, specs/, tasks.md)
5
- 2. Identify the first incomplete epic
7
+ 2. Identify the current incomplete epic
6
8
  3. Read the epic specification
7
9
  4. Implement the code
8
10
  5. Create tests
9
11
  6. Run tests
10
12
  7. Fix any failures
11
13
  8. Update tasks.md with completion notes
12
- 9. Continue to the next epic
14
+ 9. Stop — the orchestration loop handles advancing to the next epic
@@ -0,0 +1,206 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ SDD Agent Pack — Epic Orchestration Script (OpenHands SDK)
4
+
5
+ Reads tasks.md and feeds each incomplete epic to an OpenHands agent
6
+ one at a time. This avoids overwhelming the agent with the full scope.
7
+
8
+ Prerequisites:
9
+ pip install openhands-sdk openhands-tools
10
+
11
+ Usage:
12
+ # Process all incomplete epics
13
+ python .sdd-agent-pack/scripts/orchestrate.py
14
+
15
+ # Process a single epic
16
+ python .sdd-agent-pack/scripts/orchestrate.py --single "EPIC-001"
17
+
18
+ # Dry run — just list what would be done
19
+ python .sdd-agent-pack/scripts/orchestrate.py --dry-run
20
+
21
+ Environment variables:
22
+ LLM_API_KEY — Required. API key for your LLM provider.
23
+ LLM_MODEL — Model name (default: openhands/claude-sonnet-4-5-20250929)
24
+ LLM_BASE_URL — Optional. Custom base URL.
25
+ OPENHANDS_CLOUD — Set to "1" to use OpenHands Cloud remote workspace.
26
+ """
27
+
28
+ import os
29
+ import re
30
+ import sys
31
+ import argparse
32
+
33
+ TASKS_FILE = "specs/tasks.md"
34
+
35
+
36
+ def parse_epics(file_path: str) -> list[dict]:
37
+ """Parse incomplete epics from tasks.md frontmatter."""
38
+ if not os.path.exists(file_path):
39
+ print(f"✗ tasks.md not found at {file_path}")
40
+ print(" Run this from your repository root.")
41
+ sys.exit(1)
42
+
43
+ with open(file_path, "r") as f:
44
+ content = f.read()
45
+
46
+ epics = []
47
+
48
+ # Try YAML frontmatter format first
49
+ # Look for: status: pending or status: in-progress under an epic entry
50
+ frontmatter_match = re.search(
51
+ r"autopilot:\s*\n\s+epics:\s*\n(.+?)(?=\n\S|\Z)",
52
+ content,
53
+ re.DOTALL,
54
+ )
55
+
56
+ if frontmatter_match:
57
+ # Parse structured frontmatter
58
+ epic_pattern = re.compile(
59
+ r"- id:\s*(\S+)\s*\n\s+title:\s*(.+?)\s*\n\s+status:\s*(.+?)(?:\n|$)"
60
+ )
61
+ for match in epic_pattern.finditer(frontmatter_match.group(1)):
62
+ epic_id = match.group(1)
63
+ title = match.group(2).strip()
64
+ status = match.group(3).strip()
65
+ if status in ("pending", "in-progress"):
66
+ epics.append({"id": epic_id, "title": title, "status": status})
67
+ else:
68
+ # Fallback: parse markdown headings and status lines
69
+ lines = content.split("\n")
70
+ current_epic = None
71
+ for i, line in enumerate(lines):
72
+ heading_match = re.match(r"^#{2,4}\s+(.+)$", line)
73
+ if heading_match:
74
+ current_epic = heading_match.group(1).strip()
75
+ elif current_epic and re.search(
76
+ r"status:\s*(pending|in-progress)", line
77
+ ):
78
+ epics.append(
79
+ {"id": current_epic, "title": current_epic, "status": "pending"}
80
+ )
81
+ current_epic = None
82
+ elif current_epic and re.search(r"status:\s*complete", line):
83
+ current_epic = None
84
+
85
+ return epics
86
+
87
+
88
+ def build_prompt(epic: dict) -> str:
89
+ """Build a focused prompt for a single epic."""
90
+ return f"""You are working in a repository with the SDD (Software Driven Development) workflow.
91
+
92
+ Your task is to implement ONLY the following epic and nothing else.
93
+
94
+ Epic: {epic['id']} — {epic['title']}
95
+
96
+ Instructions:
97
+ 1. Read AGENTS.md for SDD workflow instructions
98
+ 2. Read the relevant spec documents in specs/
99
+ 3. Read tasks.md for context on what's already done
100
+ 4. Implement the epic completely — all code, all files
101
+ 5. Create and run tests
102
+ 6. Update tasks.md with completion notes
103
+ 7. Mark the epic as complete
104
+ 8. Do NOT ask for permission — execute autonomously
105
+ 9. Do NOT work on any other epic
106
+ """
107
+
108
+
109
+ def run_epic(epic: dict, use_cloud: bool) -> bool:
110
+ """Run a single epic through an OpenHands agent."""
111
+ from openhands.sdk import LLM, Agent, Conversation, Tool
112
+ from openhands.tools.file_editor import FileEditorTool
113
+ from openhands.tools.terminal import TerminalTool
114
+
115
+ model = os.getenv("LLM_MODEL", "openhands/claude-sonnet-4-5-20250929")
116
+ api_key = os.getenv("LLM_API_KEY")
117
+ base_url = os.getenv("LLM_BASE_URL", None)
118
+
119
+ if not api_key:
120
+ print("✗ LLM_API_KEY environment variable is required")
121
+ return False
122
+
123
+ llm = LLM(
124
+ model=model,
125
+ api_key=api_key,
126
+ base_url=base_url,
127
+ )
128
+
129
+ agent = Agent(
130
+ llm=llm,
131
+ tools=[
132
+ Tool(name=TerminalTool.name),
133
+ Tool(name=FileEditorTool.name),
134
+ ],
135
+ )
136
+
137
+ workspace = os.getcwd()
138
+ conversation = Conversation(agent=agent, workspace=workspace)
139
+
140
+ prompt = build_prompt(epic)
141
+ print(f" Prompting agent...")
142
+ conversation.send_message(prompt)
143
+ conversation.run()
144
+
145
+ cost = llm.metrics.accumulated_cost
146
+ print(f" Cost: ${cost:.4f}" if cost else "")
147
+ return True
148
+
149
+
150
+ def main():
151
+ parser = argparse.ArgumentParser(
152
+ description="SDD Agent Pack — Epic Orchestration Script"
153
+ )
154
+ parser.add_argument(
155
+ "--single",
156
+ metavar="EPIC_ID",
157
+ help="Run only a single epic (e.g., EPIC-001)",
158
+ )
159
+ parser.add_argument(
160
+ "--dry-run",
161
+ action="store_true",
162
+ help="List incomplete epics without running them",
163
+ )
164
+ parser.add_argument(
165
+ "--cloud",
166
+ action="store_true",
167
+ help="Use OpenHands Cloud remote workspace",
168
+ )
169
+ args = parser.parse_args()
170
+
171
+ print("━━━ SDD Agent Pack — Epic Orchestrator (SDK) ━━━\n")
172
+
173
+ epics = parse_epics(TASKS_FILE)
174
+
175
+ if not epics:
176
+ print("✓ All epics are complete! Nothing to do.")
177
+ return
178
+
179
+ # Filter by --single if provided
180
+ if args.single:
181
+ epics = [e for e in epics if args.single.lower() in e["id"].lower()]
182
+ if not epics:
183
+ print(f"✗ No epic matching '{args.single}' found")
184
+ sys.exit(1)
185
+
186
+ print(f"Found {len(epics)} incomplete epic(s):")
187
+ for i, epic in enumerate(epics, 1):
188
+ print(f" {i}. {epic['id']}: {epic['title']} ({epic['status']})")
189
+
190
+ if args.dry_run:
191
+ print("\nDry run — no epics executed.")
192
+ return
193
+
194
+ # Process each epic
195
+ for i, epic in enumerate(epics, 1):
196
+ print(f"\n━━━ [{i}/{len(epics)}] {epic['id']}: {epic['title']} ━━━\n")
197
+ success = run_epic(epic, args.cloud)
198
+ status = "✓" if success else "⚠"
199
+ print(f"\n{status} [{i}/{len(epics)}] {'Completed' if success else 'Failed'}: {epic['id']}")
200
+
201
+ print("\n━━━ All epics processed ━━━")
202
+ print("Run 'git status' to review changes before committing.")
203
+
204
+
205
+ if __name__ == "__main__":
206
+ main()
@@ -0,0 +1,133 @@
1
+ #!/bin/bash
2
+ # SDD Agent Pack — Epic Orchestration Script (Headless CLI)
3
+ #
4
+ # Reads tasks.md and feeds each incomplete epic to OpenHands headless mode
5
+ # one at a time. This avoids overwhelming the agent with the full scope.
6
+ #
7
+ # Prerequisites:
8
+ # - OpenHands CLI installed (https://docs.openhands.dev/openhands/usage/cli/installation)
9
+ # - LLM configured (openhands login or LLM_API_KEY env var)
10
+ # - Run from the repository root (where tasks.md lives)
11
+ #
12
+ # Usage:
13
+ # bash .sdd-agent-pack/scripts/orchestrate.sh
14
+ #
15
+ # To run a single epic by number:
16
+ # bash .sdd-agent-pack/scripts/orchestrate.sh --single EPIC-001
17
+
18
+ set -euo pipefail
19
+
20
+ TASKS_FILE="specs/tasks.md"
21
+ OPENHANDS_CMD="${OPENHANDS_CMD:-openhands}"
22
+ START_EPIC="${1:-}"
23
+
24
+ if [ ! -f "$TASKS_FILE" ]; then
25
+ echo "✗ tasks.md not found at $TASKS_FILE"
26
+ echo " Run this from your repository root."
27
+ exit 1
28
+ fi
29
+
30
+ # Check OpenHands CLI is available
31
+ if ! command -v "$OPENHANDS_CMD" &>/dev/null; then
32
+ echo "✗ OpenHands CLI not found ($OPENHANDS_CMD)"
33
+ echo " Install: https://docs.openhands.dev/openhands/usage/cli/installation"
34
+ exit 1
35
+ fi
36
+
37
+ echo "━━━ SDD Agent Pack — Epic Orchestrator ━━━"
38
+ echo ""
39
+
40
+ # Parse incomplete epics from tasks.md
41
+ # Looks for lines like: "### EPIC-001: Title" followed by "- [ ] ..."
42
+ echo "Scanning $TASKS_FILE for incomplete epics..."
43
+
44
+ epics=()
45
+ current_epic=""
46
+
47
+ while IFS= read -r line; do
48
+ if [[ "$line" =~ ^###[[:space:]]+(EPIC-[^:]+):(.+)$ ]] || [[ "$line" =~ ^###[[:space:]]+(T[^:]+):(.+)$ ]] || [[ "$line" =~ ^###[[:space:]]+([^:]+):(.+)$ ]]; then
49
+ current_epic="${BASH_REMATCH[1]}:${BASH_REMATCH[2]}"
50
+ current_epic="$(echo "$current_epic" | xargs)"
51
+ elif [[ "$line" =~ status:[[:space:]]*(pending|in-progress) ]] && [ -n "$current_epic" ]; then
52
+ epics+=("$current_epic")
53
+ current_epic=""
54
+ elif [[ "$line" =~ status:[[:space:]]*complete ]] || [[ "$line" =~ status:[[:space:]]*completed ]]; then
55
+ current_epic=""
56
+ fi
57
+ done < "$TASKS_FILE"
58
+
59
+ if [ ${#epics[@]} -eq 0 ]; then
60
+ echo "✓ All epics are complete! Nothing to do."
61
+ exit 0
62
+ fi
63
+
64
+ echo "Found ${#epics[@]} incomplete epic(s):"
65
+ for i in "${!epics[@]}"; do
66
+ echo " $((i+1)). ${epics[$i]}"
67
+ done
68
+ echo ""
69
+
70
+ # If --single was passed, filter to just that epic
71
+ if [ -n "${1:-}" ] && [ "$1" != "--single" ]; then
72
+ # Interpret as epic number or name
73
+ epic_filter="$1"
74
+ filtered=()
75
+ for epic in "${epics[@]}"; do
76
+ if [[ "$epic" == *"$epic_filter"* ]]; then
77
+ filtered+=("$epic")
78
+ fi
79
+ done
80
+ epics=("${filtered[@]}")
81
+ elif [ "${1:-}" = "--single" ] && [ -n "${2:-}" ]; then
82
+ filtered=()
83
+ for epic in "${epics[@]}"; do
84
+ if [[ "$epic" == *"$2"* ]]; then
85
+ filtered+=("$epic")
86
+ fi
87
+ done
88
+ epics=("${filtered[@]}")
89
+ fi
90
+
91
+ # Process each epic
92
+ total=${#epics[@]}
93
+ current=1
94
+
95
+ for epic in "${epics[@]}"; do
96
+ echo ""
97
+ echo "━━━ [$current/$total] Implementing: $epic ━━━"
98
+ echo ""
99
+
100
+ # Build the task prompt for this single epic
101
+ prompt="You are working in a repository with the SDD (Software Driven Development) workflow. Your task is to implement ONLY the following epic and nothing else. Follow all instructions in AGENTS.md and the SDD documentation.
102
+
103
+ Epic to implement: $epic
104
+
105
+ Instructions:
106
+ 1. Read AGENTS.md for context
107
+ 2. Read the relevant spec documents in specs/
108
+ 3. Implement the epic completely
109
+ 4. Create and run tests
110
+ 5. Update tasks.md with completion notes
111
+ 6. Mark the epic as complete
112
+ 7. Do NOT ask for permission — just do it
113
+ 8. Do NOT work on any other epic"
114
+
115
+ echo "Starting OpenHands (headless)..."
116
+ if $OPENHANDS_CMD --headless -t "$prompt" 2>&1; then
117
+ echo ""
118
+ echo "✓ [$current/$total] Epic completed: $epic"
119
+ else
120
+ exit_code=$?
121
+ echo ""
122
+ echo "⚠ [$current/$total] Epic finished with exit code $exit_code: $epic"
123
+ echo " Check the output above for errors."
124
+ echo " To resume, re-run: $0"
125
+ fi
126
+
127
+ current=$((current + 1))
128
+ done
129
+
130
+ echo ""
131
+ echo "━━━ All epics processed ━━━"
132
+ echo ""
133
+ echo "Run 'git status' to review changes before committing."
@@ -1,28 +1,49 @@
1
1
  ---
2
2
  name: sdd-epic-workflow
3
- description: Full epic implementation workflow from context to completion
3
+ description: Implement a single SDD epic with full lifecycle
4
4
  triggers:
5
5
  - sdd
6
6
  - epic
7
7
  - tasks.md
8
- - workflow
8
+ - implement
9
9
  ---
10
10
 
11
11
  # SDD Epic Workflow
12
12
 
13
- This skill orchestrates the complete epic lifecycle.
13
+ This skill implements a **single SDD epic** from end to end.
14
+
15
+ ## Important Limitation
16
+
17
+ **OpenHands agents cannot autonomously iterate through multiple epics.** The
18
+ agent will get overwhelmed by the scope and keep asking for permission. This
19
+ is a known limitation of LLM-based agents.
20
+
21
+ Instead, use the orchestration scripts in `.sdd-agent-pack/scripts/` to feed
22
+ epics one at a time:
23
+
24
+ ```bash
25
+ # Bash approach (requires OpenHands CLI)
26
+ bash .sdd-agent-pack/scripts/orchestrate.sh
27
+
28
+ # Python approach (requires OpenHands SDK)
29
+ python .sdd-agent-pack/scripts/orchestrate.py
30
+ ```
31
+
32
+ Or manually implement one epic at a time by asking the agent:
33
+
34
+ > "Implement epic XXXXX from tasks.md following the SDD workflow."
14
35
 
15
36
  ## Instructions
16
37
 
17
- When asked "Implement all remaining epics in tasks.md using the SDD Agent Pack workflow":
38
+ When asked to implement an epic:
18
39
 
19
- 1. **Read all SDD documentation** — AGENTS.md, constitution.md, plan.md, tasks.md, specs/.
40
+ 1. **Read all SDD documentation** — AGENTS.md, constitution.md (if present), plan.md (if present), tasks.md, specs/.
20
41
 
21
- 2. **Identify the next incomplete epic** — The first epic in tasks.md with status `pending`.
42
+ 2. **Understand the current epic** — Read its description, tasks, and dependencies.
22
43
 
23
- 3. **Read all referenced documentation** — Follow deep references between documents.
44
+ 3. **Read referenced specs** — Find and read the relevant design documents in specs/.
24
45
 
25
- 4. **Implement only that epic** — Focus on one epic at a time.
46
+ 4. **Implement the epic completely** — All code, all files, no shortcuts.
26
47
 
27
48
  5. **Create missing tests** — Every implementation must include tests.
28
49
 
@@ -30,10 +51,12 @@ When asked "Implement all remaining epics in tasks.md using the SDD Agent Pack w
30
51
 
31
52
  7. **Fix failures** — Iterate until all tests pass.
32
53
 
33
- 8. **Update tasks.md** — Mark the epic complete with completion notes.
34
-
35
- 9. **Add anti-regression notes** — Document what to watch for.
36
-
37
- 10. **Move to the next incomplete epic** — Continue until all epics are complete.
54
+ 8. **Update tasks.md** — Mark the epic complete with detailed completion notes:
55
+ - What was implemented
56
+ - Files created
57
+ - Files modified
58
+ - Tests added
59
+ - Key architectural decisions
60
+ - What the next epic needs to know
38
61
 
39
- **Do not stop after one epic.** Continue through all epics.
62
+ 9. **Stop** — Do NOT start the next epic. The orchestration loop handles that.
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SA8EpB,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SA2FpB,CAAC"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { Command } from 'commander';
5
5
  import { detectRepoRoot, isGitRepository, detectExistingInstallation } from '../utils/repo.js';
6
- import { backupFiles, createDirectories, installAssets, installOpenHandsBridge, updateAgentsMd, updateGitignore, validateInstallation } from '../utils/installer.js';
6
+ import { backupFiles, createDirectories, installAssets, installOpenHandsBridge, cleanOldArtifacts, setupEnvironment, updateAgentsMd, updateGitignore, validateInstallation } from '../utils/installer.js';
7
7
  import { term } from '../utils/console.js';
8
8
  export const initCommand = new Command('init')
9
9
  .description('Initialize SDD Agent Pack in the current repository')
@@ -30,35 +30,43 @@ export const initCommand = new Command('init')
30
30
  term.log(' Use --force to reinstall or "sdd-agent-pack update" to update');
31
31
  return;
32
32
  }
33
- // 4. Backup
33
+ // 4. Clean old artifacts from previous versions
34
+ await cleanOldArtifacts(repoRoot);
35
+ term.success('✓ Old artifacts cleaned');
36
+ // 5. Backup
34
37
  await backupFiles(repoRoot);
35
38
  term.success('✓ Backup created');
36
- // 5. Create directories
39
+ // 6. Create directories
37
40
  await createDirectories(repoRoot);
38
41
  term.success('✓ Directories created');
39
- // 6. Install assets
42
+ // 7. Install assets
40
43
  await installAssets(repoRoot);
41
44
  term.success('✓ Assets installed');
42
- // 6b. Install OpenHands bridge (skills + hooks + setup)
45
+ // 8. Install OpenHands bridge (skills + hooks + setup)
43
46
  await installOpenHandsBridge(repoRoot);
44
47
  term.success('✓ OpenHands bridge installed (.agents/skills/ + .openhands/)');
45
- // 7. Update AGENTS.md
48
+ // 9. Update AGENTS.md
46
49
  await updateAgentsMd(repoRoot);
47
50
  term.success('✓ AGENTS.md updated');
48
- // 8. Update .gitignore
51
+ // 10. Update .gitignore
49
52
  await updateGitignore(repoRoot);
50
53
  term.success('✓ .gitignore updated');
51
- // 9. Validate
54
+ // 11. Setup environment (Node deps, Python/uv, OpenHands CLI)
55
+ term.info(' Setting up environment (OpenHands CLI, Python deps)...');
56
+ await setupEnvironment(repoRoot);
57
+ term.success('✓ Environment setup complete');
58
+ // 12. Validate
52
59
  const valid = await validateInstallation(repoRoot);
53
60
  if (!valid) {
54
61
  term.error('✗ Installation validation failed');
55
62
  process.exit(1);
56
63
  }
57
64
  term.success('✓ Installation validated');
58
- // 10. Summary
65
+ // 13. Summary
59
66
  term.log('\n━━━ SDD Agent Pack installed successfully! ━━━\n');
60
67
  term.log('Installed:');
61
68
  term.log(' .sdd-agent-pack/skills/ — SDD workflow skills');
69
+ term.log(' .sdd-agent-pack/scripts/ — Epic orchestration scripts');
62
70
  term.log(' .sdd-agent-pack/prompts/ — Workflow prompts');
63
71
  term.log(' .sdd-agent-pack/hooks/ — Quality enforcement hooks');
64
72
  term.log(' .sdd-agent-pack/docs/ — Workflow documentation');
@@ -70,7 +78,10 @@ export const initCommand = new Command('init')
70
78
  term.log('\nNext steps:');
71
79
  term.log(' 1. Review .sdd-agent-pack/docs/ for workflow docs');
72
80
  term.log(' 2. Create or update tasks.md with your epics');
73
- term.log(' 3. Ask your AI agent to implement epics following the SDD workflow');
81
+ term.log(' 3. Run the orchestration script to implement epics:');
82
+ term.log(' bash .sdd-agent-pack/scripts/orchestrate.sh');
83
+ term.log(' Or for a single epic:');
84
+ term.log(' bash .sdd-agent-pack/scripts/orchestrate.sh "EPIC-001"');
74
85
  term.log('');
75
86
  });
76
87
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SAgDtB,CAAC"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SAiDtB,CAAC"}
@@ -42,6 +42,7 @@ export const statusCommand = new Command('status')
42
42
  term.log(` ${ok ? '✓' : '✗'} ${name}`);
43
43
  };
44
44
  componentStatus('SDD assets (.sdd-agent-pack/)', valid);
45
+ componentStatus('Scripts (.sdd-agent-pack/scripts/)', existsSync(join(repoRoot, '.sdd-agent-pack', 'scripts', 'orchestrate.sh')));
45
46
  componentStatus('AGENTS.md integration', valid);
46
47
  componentStatus('OpenHands skills bridge (.agents/skills/)', existsSync(join(repoRoot, '.agents', 'skills', 'sdd-epic-workflow', 'SKILL.md')));
47
48
  componentStatus('OpenHands hooks (.openhands/hooks.json)', existsSync(join(repoRoot, '.openhands', 'hooks.json')));
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;IAErC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAEvC,MAAM,SAAS,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAE3C,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;IAC5E,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC1B,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAW,EAAE,EAAE;QACpD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC;IACF,eAAe,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;IACxD,eAAe,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;IAChD,eAAe,CAAC,2CAA2C,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/I,eAAe,CAAC,yCAAyC,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACnH,eAAe,CAAC,uCAAuC,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAE/G,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACf,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SAgDtB,CAAC"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SAuDtB,CAAC"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { Command } from 'commander';
5
5
  import { detectRepoRoot, isGitRepository, detectExistingInstallation } from '../utils/repo.js';
6
- import { backupFiles, createDirectories, installAssets, installOpenHandsBridge, updateAgentsMd, updateGitignore, validateInstallation } from '../utils/installer.js';
6
+ import { backupFiles, createDirectories, installAssets, installOpenHandsBridge, cleanOldArtifacts, setupEnvironment, updateAgentsMd, updateGitignore, validateInstallation } from '../utils/installer.js';
7
7
  import { term } from '../utils/console.js';
8
8
  export const updateCommand = new Command('update')
9
9
  .description('Update SDD Agent Pack assets in the current repository')
@@ -26,6 +26,8 @@ export const updateCommand = new Command('update')
26
26
  term.log(' Run "sdd-agent-pack init" first');
27
27
  process.exit(1);
28
28
  }
29
+ await cleanOldArtifacts(repoRoot);
30
+ term.success('✓ Old artifacts cleaned');
29
31
  await backupFiles(repoRoot);
30
32
  term.success('✓ Backup created');
31
33
  await createDirectories(repoRoot);
@@ -37,6 +39,9 @@ export const updateCommand = new Command('update')
37
39
  term.success('✓ AGENTS.md updated');
38
40
  await updateGitignore(repoRoot);
39
41
  term.success('✓ .gitignore updated');
42
+ term.info(' Setting up environment (OpenHands CLI, Python deps)...');
43
+ await setupEnvironment(repoRoot);
44
+ term.success('✓ Environment setup complete');
40
45
  const valid = await validateInstallation(repoRoot);
41
46
  if (!valid) {
42
47
  term.error('✗ Validation failed after update');
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,sBAAsB,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACrK,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,aAAa,EAAE,0CAA0C,CAAC;KACjE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEjC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEjC,MAAM,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAE3C,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAEpC,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC1M,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,aAAa,EAAE,0CAA0C,CAAC;KACjE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAExC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEjC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEjC,MAAM,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAE3C,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAEpC,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAErC,IAAI,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IACvE,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC"}
@@ -8,6 +8,22 @@
8
8
  export declare function backupFiles(repoRoot: string): Promise<void>;
9
9
  /** Create required subdirectories inside .sdd-agent-pack */
10
10
  export declare function createDirectories(repoRoot: string): Promise<void>;
11
+ /**
12
+ * Clean up old artifacts from previous SDD Agent Pack versions or approaches.
13
+ * Removes files/dirs that are no longer needed by the current architecture.
14
+ */
15
+ export declare function cleanOldArtifacts(repoRoot: string): Promise<void>;
16
+ /**
17
+ * Set up the target repo environment for SDD workflow execution.
18
+ *
19
+ * Installs:
20
+ * 1. Node.js dependencies (if package.json exists)
21
+ * 2. Python environment with OpenHands SDK (via uv, if available)
22
+ * 3. OpenHands CLI (via pip/uv, if available)
23
+ *
24
+ * This is best-effort — failures are non-fatal.
25
+ */
26
+ export declare function setupEnvironment(repoRoot: string): Promise<void>;
11
27
  /**
12
28
  * Install OpenHands bridge files so the agent can discover SDD assets.
13
29
  *
@@ -1 +1 @@
1
- {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/utils/installer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiEH,oEAAoE;AACpE,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjE;AAED,4DAA4D;AAC5D,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKvE;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuE5E;AAED,oEAAoE;AACpE,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYnE;AAED,6DAA6D;AAC7D,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBpE;AAED,+CAA+C;AAC/C,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBrE;AAED,yDAAyD;AACzD,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgC7E;AAED,wCAAwC;AACxC,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUpE;AAED,uCAAuC;AACvC,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAElE;AAED,uDAAuD;AACvD,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYnE;AAED,oDAAoD;AACpD,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASpE;AAED,gFAAgF;AAChF,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC3E"}
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/utils/installer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiEH,oEAAoE;AACpE,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjE;AAED,4DAA4D;AAC5D,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKvE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CvE;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CtE;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuE5E;AAED,oEAAoE;AACpE,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BnE;AAED,6DAA6D;AAC7D,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBpE;AAED,+CAA+C;AAC/C,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBrE;AAED,yDAAyD;AACzD,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgC7E;AAED,wCAAwC;AACxC,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUpE;AAED,uCAAuC;AACvC,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAElE;AAED,uDAAuD;AACvD,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYnE;AAED,oDAAoD;AACpD,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASpE;AAED,gFAAgF;AAChF,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC3E"}
@@ -74,11 +74,114 @@ export async function backupFiles(repoRoot) {
74
74
  }
75
75
  /** Create required subdirectories inside .sdd-agent-pack */
76
76
  export async function createDirectories(repoRoot) {
77
- const dirs = ['skills', 'prompts', 'hooks', 'docs', 'templates', 'config'];
77
+ const dirs = ['skills', 'prompts', 'hooks', 'docs', 'templates', 'config', 'scripts'];
78
78
  for (const dir of dirs) {
79
79
  await ensureDir(join(repoRoot, '.sdd-agent-pack', dir));
80
80
  }
81
81
  }
82
+ /**
83
+ * Clean up old artifacts from previous SDD Agent Pack versions or approaches.
84
+ * Removes files/dirs that are no longer needed by the current architecture.
85
+ */
86
+ export async function cleanOldArtifacts(repoRoot) {
87
+ const removals = [
88
+ // Old backup dirs
89
+ join(repoRoot, '.sdd-agent-pack-backup'),
90
+ // Old autopilot state files
91
+ join(repoRoot, '.agents_tmp'),
92
+ join(repoRoot, '.autopilot'),
93
+ join(repoRoot, '.autopilot-state.json'),
94
+ join(repoRoot, '.autopilot-state.md'),
95
+ // Old autopilot docs (if empty after removal)
96
+ ];
97
+ for (const path of removals) {
98
+ if (existsSync(path)) {
99
+ try {
100
+ await remove(path);
101
+ }
102
+ catch {
103
+ // Non-critical — best-effort cleanup
104
+ }
105
+ }
106
+ }
107
+ // Clean empty .agents/skills/ subdirs that don't match current skills
108
+ const currentSkills = ['sdd-epic-workflow', 'sdd-implementation', 'sdd-context', 'sdd-testing', 'sdd-completion'];
109
+ const agentsSkills = join(repoRoot, '.agents', 'skills');
110
+ if (existsSync(agentsSkills)) {
111
+ try {
112
+ const { readdir } = await import('fs/promises');
113
+ const entries = await readdir(agentsSkills, { withFileTypes: true });
114
+ for (const entry of entries) {
115
+ if (entry.isDirectory() && !currentSkills.includes(entry.name)) {
116
+ const skillPath = join(agentsSkills, entry.name);
117
+ // Only remove if it looks like an SDD skill (has SKILL.md)
118
+ if (existsSync(join(skillPath, 'SKILL.md'))) {
119
+ await remove(skillPath);
120
+ }
121
+ }
122
+ }
123
+ }
124
+ catch {
125
+ // Non-critical
126
+ }
127
+ }
128
+ }
129
+ /**
130
+ * Set up the target repo environment for SDD workflow execution.
131
+ *
132
+ * Installs:
133
+ * 1. Node.js dependencies (if package.json exists)
134
+ * 2. Python environment with OpenHands SDK (via uv, if available)
135
+ * 3. OpenHands CLI (via pip/uv, if available)
136
+ *
137
+ * This is best-effort — failures are non-fatal.
138
+ */
139
+ export async function setupEnvironment(repoRoot) {
140
+ const { execSync } = await import('child_process');
141
+ // 1. Install Node.js deps
142
+ if (existsSync(join(repoRoot, 'package.json')) && !existsSync(join(repoRoot, 'node_modules'))) {
143
+ try {
144
+ execSync('npm install 2>/dev/null', { cwd: repoRoot, stdio: 'ignore', timeout: 60000 });
145
+ }
146
+ catch {
147
+ // Non-critical
148
+ }
149
+ }
150
+ // 2. Check/install Python + uv + OpenHands SDK + CLI
151
+ // We use uv because it's the recommended OpenHands installer
152
+ const hasUv = existsSync('/usr/local/bin/uv') || existsSync('/opt/homebrew/bin/uv');
153
+ const hasPip = existsSync('/usr/local/bin/pip3') || existsSync('/opt/homebrew/bin/pip3') || existsSync('/usr/bin/pip3');
154
+ // Check if OpenHands CLI is already available
155
+ try {
156
+ execSync('openhands --version 2>/dev/null', { stdio: 'ignore' });
157
+ return; // Already installed
158
+ }
159
+ catch {
160
+ // Not installed — try to set it up
161
+ }
162
+ // Try installing uv if missing (macOS/Linux)
163
+ if (!hasUv) {
164
+ try {
165
+ execSync('curl -LsSf https://astral.sh/uv/install.sh | sh 2>/dev/null', { stdio: 'ignore', timeout: 30000 });
166
+ }
167
+ catch {
168
+ // uv install failed — move on
169
+ }
170
+ }
171
+ // Try installing OpenHands CLI via uv or pip
172
+ const uvPath = '/root/.cargo/bin/uv'; // typical uv install path
173
+ const uvCmd = existsSync(uvPath) ? uvPath : 'uv';
174
+ const pipCmd = hasPip ? 'pip3' : 'pip';
175
+ for (const installer of [uvCmd, pipCmd]) {
176
+ try {
177
+ execSync(`${installer} install openhands 2>/dev/null`, { stdio: 'ignore', timeout: 120000 });
178
+ break; // Success
179
+ }
180
+ catch {
181
+ continue; // Try next installer
182
+ }
183
+ }
184
+ }
82
185
  /**
83
186
  * Install OpenHands bridge files so the agent can discover SDD assets.
84
187
  *
@@ -162,7 +265,7 @@ fi
162
265
  export async function installAssets(repoRoot) {
163
266
  const assetRoot = assetsDir();
164
267
  const packPath = join(repoRoot, '.sdd-agent-pack');
165
- const assetDirs = ['skills', 'prompts', 'hooks', 'docs', 'templates', 'config'];
268
+ const assetDirs = ['skills', 'prompts', 'hooks', 'docs', 'templates', 'config', 'scripts'];
166
269
  for (const dir of assetDirs) {
167
270
  const src = join(assetRoot, dir);
168
271
  const dest = join(packPath, dir);
@@ -170,6 +273,24 @@ export async function installAssets(repoRoot) {
170
273
  await copy(src, dest, { overwrite: true, errorOnExist: true });
171
274
  }
172
275
  }
276
+ // Make scripts executable
277
+ const scriptsToChmod = [
278
+ join(packPath, 'scripts', 'orchestrate.sh'),
279
+ join(packPath, 'scripts', 'orchestrate.py'),
280
+ join(packPath, 'hooks', 'stop-hook.sh'),
281
+ join(packPath, 'hooks', 'pre-implementation.sh'),
282
+ ];
283
+ for (const scriptPath of scriptsToChmod) {
284
+ if (existsSync(scriptPath)) {
285
+ try {
286
+ const { chmod } = await import('fs/promises');
287
+ await chmod(scriptPath, 0o755);
288
+ }
289
+ catch {
290
+ // Non-critical
291
+ }
292
+ }
293
+ }
173
294
  }
174
295
  /** Update AGENTS.md with a managed SDD Agent Pack section */
175
296
  export async function updateAgentsMd(repoRoot) {
@@ -218,7 +339,7 @@ export async function updateGitignore(repoRoot) {
218
339
  /** Validate the installation in the target repository */
219
340
  export async function validateInstallation(repoRoot) {
220
341
  const packPath = join(repoRoot, '.sdd-agent-pack');
221
- const requiredDirs = ['skills', 'prompts', 'hooks', 'docs', 'templates', 'config'];
342
+ const requiredDirs = ['skills', 'prompts', 'hooks', 'docs', 'templates', 'config', 'scripts'];
222
343
  // Check all required directories exist
223
344
  for (const dir of requiredDirs) {
224
345
  if (!existsSync(join(packPath, dir))) {
@@ -1 +1 @@
1
- {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/utils/installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/utils/installer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sdd-agent-pack",
3
- "version": "1.1.1",
3
+ "version": "1.3.0",
4
4
  "description": "Lightweight installer for SDD workflow assets into application repositories",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",