ai-sdlc 0.3.0-alpha.3 → 0.3.0-alpha.4
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 +58 -0
- package/dist/cli/commands.d.ts +3 -0
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +13 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/dependency-resolver.d.ts +47 -0
- package/dist/cli/dependency-resolver.d.ts.map +1 -0
- package/dist/cli/dependency-resolver.js +130 -0
- package/dist/cli/dependency-resolver.js.map +1 -0
- package/dist/cli/epic-processor.d.ts +15 -0
- package/dist/cli/epic-processor.d.ts.map +1 -0
- package/dist/cli/epic-processor.js +324 -0
- package/dist/cli/epic-processor.js.map +1 -0
- package/dist/cli/progress-dashboard.d.ts +58 -0
- package/dist/cli/progress-dashboard.d.ts.map +1 -0
- package/dist/cli/progress-dashboard.js +216 -0
- package/dist/cli/progress-dashboard.js.map +1 -0
- package/dist/core/config.d.ts +5 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +14 -0
- package/dist/core/config.js.map +1 -1
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +63 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@ Agent-first SDLC workflow manager using Claude Agent SDK. A Kanban-style board w
|
|
|
9
9
|
- **Kanban-style story management** (Backlog → Ready → In Progress → Done)
|
|
10
10
|
- **AI-powered agents** for each workflow stage (refine, research, plan, implement, review)
|
|
11
11
|
- **Full SDLC automation** with `--auto --story` - takes a story from idea to reviewed code
|
|
12
|
+
- **Epic processing** with `--epic` - parallel execution of related stories with dependency resolution
|
|
12
13
|
- **TDD Mode** - Optional Test-Driven Development with Red-Green-Refactor cycles
|
|
13
14
|
- **Resume workflows** after interruption with `--continue`
|
|
14
15
|
- **Daemon mode** - Watch for and process new stories with `--watch`
|
|
@@ -49,6 +50,7 @@ ai-sdlc run --auto --story implement-user-authentication
|
|
|
49
50
|
| `ai-sdlc run --story <id> --step <phase>` | Run specific phase (refine/research/plan/implement/review) |
|
|
50
51
|
| `ai-sdlc run --continue` | Resume after interruption |
|
|
51
52
|
| `ai-sdlc run --watch` | Daemon mode - watch for new stories |
|
|
53
|
+
| `ai-sdlc run --epic <epic-id>` | Process all stories in an epic with parallel execution |
|
|
52
54
|
| `ai-sdlc details <id>` | Show story details |
|
|
53
55
|
| `ai-sdlc config [key] [value]` | View/set configuration |
|
|
54
56
|
|
|
@@ -67,6 +69,62 @@ Refine → Research → Plan → Implement → Review → Create PR → Done
|
|
|
67
69
|
- `[V]` Reviews complete
|
|
68
70
|
- `[!]` Blocked
|
|
69
71
|
|
|
72
|
+
## Epic Processing
|
|
73
|
+
|
|
74
|
+
Process multiple related stories in parallel with automatic dependency resolution. Epics use git worktrees for isolation and execute independent stories concurrently.
|
|
75
|
+
|
|
76
|
+
**Label Format:** Stories are grouped using `epic-{epic-id}` labels (e.g., `epic-ticketing-integration`)
|
|
77
|
+
|
|
78
|
+
**Basic Usage:**
|
|
79
|
+
```bash
|
|
80
|
+
# Process all stories in an epic (uses default concurrency: 3)
|
|
81
|
+
ai-sdlc run --epic ticketing-integration
|
|
82
|
+
|
|
83
|
+
# Dry run - show execution plan without running
|
|
84
|
+
ai-sdlc run --epic ticketing-integration --dry-run
|
|
85
|
+
|
|
86
|
+
# Adjust concurrency limit
|
|
87
|
+
ai-sdlc run --epic ticketing-integration --max-concurrent 5
|
|
88
|
+
|
|
89
|
+
# Keep worktrees for debugging
|
|
90
|
+
ai-sdlc run --epic ticketing-integration --keep-worktrees
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Dependency Management:**
|
|
94
|
+
Add dependencies to story frontmatter to control execution order:
|
|
95
|
+
```yaml
|
|
96
|
+
---
|
|
97
|
+
id: S-0075
|
|
98
|
+
dependencies: [S-0073, S-0074]
|
|
99
|
+
labels: [epic-ticketing-integration]
|
|
100
|
+
---
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Features:**
|
|
104
|
+
- **Automatic parallelization** - Independent stories run concurrently
|
|
105
|
+
- **Dependency resolution** - Stories wait for dependencies to complete
|
|
106
|
+
- **Real-time dashboard** - Live progress tracking for all stories
|
|
107
|
+
- **Failure handling** - Failed stories don't block independent work
|
|
108
|
+
- **Worktree isolation** - Each story runs in its own git worktree
|
|
109
|
+
|
|
110
|
+
**Requirements:**
|
|
111
|
+
- Worktrees must be enabled in `.ai-sdlc.json`: `"worktree": { "enabled": true }`
|
|
112
|
+
- Stories must have matching `epic-{epic-id}` label
|
|
113
|
+
|
|
114
|
+
**Configuration:**
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"epic": {
|
|
118
|
+
"maxConcurrent": 3,
|
|
119
|
+
"keepWorktrees": false,
|
|
120
|
+
"continueOnFailure": true
|
|
121
|
+
},
|
|
122
|
+
"worktree": {
|
|
123
|
+
"enabled": true
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
70
128
|
## Configuration
|
|
71
129
|
|
|
72
130
|
Configure ai-sdlc behavior via a `.ai-sdlc.json` file in your project root. If no configuration file exists, ai-sdlc uses sensible defaults.
|
package/dist/cli/commands.d.ts
CHANGED
|
@@ -62,12 +62,15 @@ export declare function run(options: {
|
|
|
62
62
|
continue?: boolean;
|
|
63
63
|
story?: string;
|
|
64
64
|
batch?: string;
|
|
65
|
+
epic?: string;
|
|
66
|
+
maxConcurrent?: string;
|
|
65
67
|
step?: string;
|
|
66
68
|
maxIterations?: string;
|
|
67
69
|
watch?: boolean;
|
|
68
70
|
force?: boolean;
|
|
69
71
|
worktree?: boolean;
|
|
70
72
|
clean?: boolean;
|
|
73
|
+
keepWorktrees?: boolean;
|
|
71
74
|
}): Promise<void>;
|
|
72
75
|
/**
|
|
73
76
|
* Phase information for RPIV display
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,EAAU,UAAU,EAA0H,eAAe,EAAE,MAAM,mBAAmB,CAAC;AA4BvM;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAyB1C;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmF1E;AA2DD;;GAEG;AACH,wBAAsB,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyGpF;AA6HD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EAC/B,cAAc,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EACpC,WAAW,EAAE,KAAK,GAAG,IAAI,GACxB,OAAO,CAKT;AA0GD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,KAAK,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,eAAe,CAAC,CA8H1B;AA+JD;;GAEG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/commands.js
CHANGED
|
@@ -798,6 +798,19 @@ export async function run(options) {
|
|
|
798
798
|
await startDaemon({ maxIterations: maxIterationsOverride });
|
|
799
799
|
return; // Daemon runs indefinitely
|
|
800
800
|
}
|
|
801
|
+
// Handle epic mode
|
|
802
|
+
if (options.epic) {
|
|
803
|
+
const { processEpic } = await import('./epic-processor.js');
|
|
804
|
+
const maxConcurrent = options.maxConcurrent ? parseInt(options.maxConcurrent, 10) : undefined;
|
|
805
|
+
const exitCode = await processEpic({
|
|
806
|
+
epicId: options.epic,
|
|
807
|
+
maxConcurrent,
|
|
808
|
+
dryRun: options.dryRun,
|
|
809
|
+
force: options.force,
|
|
810
|
+
keepWorktrees: options.keepWorktrees,
|
|
811
|
+
});
|
|
812
|
+
process.exit(exitCode);
|
|
813
|
+
}
|
|
801
814
|
// Handle batch mode
|
|
802
815
|
if (options.batch) {
|
|
803
816
|
// Validate batch options first
|