ai-sdlc 0.2.1-alpha.1 → 0.3.0-alpha.10
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 +78 -6
- package/dist/agents/implementation.d.ts +30 -1
- package/dist/agents/implementation.d.ts.map +1 -1
- package/dist/agents/implementation.js +110 -23
- package/dist/agents/implementation.js.map +1 -1
- package/dist/agents/review.d.ts +49 -1
- package/dist/agents/review.d.ts.map +1 -1
- package/dist/agents/review.js +318 -46
- package/dist/agents/review.js.map +1 -1
- package/dist/agents/rework.d.ts.map +1 -1
- package/dist/agents/rework.js +3 -1
- package/dist/agents/rework.js.map +1 -1
- package/dist/agents/verification.d.ts.map +1 -1
- package/dist/agents/verification.js +26 -12
- package/dist/agents/verification.js.map +1 -1
- package/dist/cli/batch-processor.d.ts +64 -0
- package/dist/cli/batch-processor.d.ts.map +1 -0
- package/dist/cli/batch-processor.js +85 -0
- package/dist/cli/batch-processor.js.map +1 -0
- package/dist/cli/batch-validator.d.ts +80 -0
- package/dist/cli/batch-validator.d.ts.map +1 -0
- package/dist/cli/batch-validator.js +121 -0
- package/dist/cli/batch-validator.js.map +1 -0
- package/dist/cli/commands.d.ts +11 -0
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +772 -46
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +5 -0
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/dependency-resolver.d.ts +49 -0
- package/dist/cli/dependency-resolver.d.ts.map +1 -0
- package/dist/cli/dependency-resolver.js +133 -0
- package/dist/cli/dependency-resolver.js.map +1 -0
- package/dist/cli/epic-processor.d.ts +16 -0
- package/dist/cli/epic-processor.d.ts.map +1 -0
- package/dist/cli/epic-processor.js +361 -0
- package/dist/cli/epic-processor.js.map +1 -0
- package/dist/cli/formatting.d.ts +15 -0
- package/dist/cli/formatting.d.ts.map +1 -1
- package/dist/cli/formatting.js +19 -0
- package/dist/cli/formatting.js.map +1 -1
- 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/cli/runner.d.ts.map +1 -1
- package/dist/cli/runner.js +17 -2
- package/dist/cli/runner.js.map +1 -1
- package/dist/cli/table-renderer.d.ts.map +1 -1
- package/dist/cli/table-renderer.js +5 -1
- package/dist/cli/table-renderer.js.map +1 -1
- package/dist/core/client.d.ts +19 -1
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +191 -5
- package/dist/core/client.js.map +1 -1
- package/dist/core/config.d.ts +13 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +117 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/git-utils.d.ts +19 -0
- package/dist/core/git-utils.d.ts.map +1 -1
- package/dist/core/git-utils.js +58 -0
- package/dist/core/git-utils.js.map +1 -1
- package/dist/core/kanban.d.ts +125 -1
- package/dist/core/kanban.d.ts.map +1 -1
- package/dist/core/kanban.js +363 -4
- package/dist/core/kanban.js.map +1 -1
- package/dist/core/process-manager.d.ts +15 -0
- package/dist/core/process-manager.d.ts.map +1 -0
- package/dist/core/process-manager.js +132 -0
- package/dist/core/process-manager.js.map +1 -0
- package/dist/core/story.d.ts +24 -0
- package/dist/core/story.d.ts.map +1 -1
- package/dist/core/story.js +78 -0
- package/dist/core/story.js.map +1 -1
- package/dist/core/worktree.d.ts +111 -2
- package/dist/core/worktree.d.ts.map +1 -1
- package/dist/core/worktree.js +310 -2
- package/dist/core/worktree.js.map +1 -1
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +184 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -1
- package/package.json +2 -2
- package/templates/story.md +5 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { findStoryById } from '../core/story.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parse comma-separated story ID list
|
|
4
|
+
* Handles whitespace and filters empty strings
|
|
5
|
+
*
|
|
6
|
+
* @param input - Raw comma-separated string (e.g., "S-001, S-002 , S-003")
|
|
7
|
+
* @returns Array of trimmed story IDs
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* parseStoryIdList("S-001,S-002,S-003") // => ["S-001", "S-002", "S-003"]
|
|
11
|
+
* parseStoryIdList("S-001, S-002 , S-003") // => ["S-001", "S-002", "S-003"]
|
|
12
|
+
* parseStoryIdList("") // => []
|
|
13
|
+
*/
|
|
14
|
+
export function parseStoryIdList(input) {
|
|
15
|
+
if (!input || input.trim() === '') {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
return input
|
|
19
|
+
.split(',')
|
|
20
|
+
.map(id => id.trim())
|
|
21
|
+
.filter(id => id.length > 0);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Deduplicate story IDs while preserving order
|
|
25
|
+
* First occurrence is kept, subsequent duplicates are removed
|
|
26
|
+
*
|
|
27
|
+
* @param storyIds - Array of story IDs (may contain duplicates)
|
|
28
|
+
* @returns Array with duplicates removed
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* deduplicateStoryIds(["S-001", "S-002", "S-001"]) // => ["S-001", "S-002"]
|
|
32
|
+
* deduplicateStoryIds(["S-001", "S-001", "S-001"]) // => ["S-001"]
|
|
33
|
+
*/
|
|
34
|
+
export function deduplicateStoryIds(storyIds) {
|
|
35
|
+
const seen = new Set();
|
|
36
|
+
const result = [];
|
|
37
|
+
for (const id of storyIds) {
|
|
38
|
+
const normalized = id.toUpperCase(); // Case-insensitive deduplication
|
|
39
|
+
if (!seen.has(normalized)) {
|
|
40
|
+
seen.add(normalized);
|
|
41
|
+
result.push(id);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Validate story ID format
|
|
48
|
+
* Story IDs must match pattern: S-\d+ (e.g., S-001, S-123)
|
|
49
|
+
*
|
|
50
|
+
* @param storyId - Story ID to validate
|
|
51
|
+
* @returns true if format is valid, false otherwise
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* validateStoryIdFormat("S-001") // => true
|
|
55
|
+
* validateStoryIdFormat("S-123") // => true
|
|
56
|
+
* validateStoryIdFormat("s-001") // => true (case-insensitive)
|
|
57
|
+
* validateStoryIdFormat("INVALID") // => false
|
|
58
|
+
* validateStoryIdFormat("S-") // => false
|
|
59
|
+
*/
|
|
60
|
+
export function validateStoryIdFormat(storyId) {
|
|
61
|
+
return /^S-\d+$/i.test(storyId);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Validate all story IDs in a batch
|
|
65
|
+
* Checks format and existence for each story
|
|
66
|
+
*
|
|
67
|
+
* @param storyIds - Array of story IDs to validate
|
|
68
|
+
* @param sdlcRoot - Root directory of .ai-sdlc
|
|
69
|
+
* @returns BatchValidationResult with valid IDs and errors
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* const result = validateStoryIds(["S-001", "S-002", "INVALID"], sdlcRoot);
|
|
73
|
+
* if (result.valid) {
|
|
74
|
+
* // All stories exist and are valid
|
|
75
|
+
* processStories(result.validStoryIds);
|
|
76
|
+
* } else {
|
|
77
|
+
* // Show errors
|
|
78
|
+
* result.errors.forEach(err => console.log(err.message));
|
|
79
|
+
* }
|
|
80
|
+
*/
|
|
81
|
+
export function validateStoryIds(storyIds, sdlcRoot) {
|
|
82
|
+
const result = {
|
|
83
|
+
valid: true,
|
|
84
|
+
validStoryIds: [],
|
|
85
|
+
errors: [],
|
|
86
|
+
};
|
|
87
|
+
for (const storyId of storyIds) {
|
|
88
|
+
// Check format
|
|
89
|
+
if (!validateStoryIdFormat(storyId)) {
|
|
90
|
+
result.valid = false;
|
|
91
|
+
result.errors.push({
|
|
92
|
+
storyId,
|
|
93
|
+
message: `Invalid story ID format: ${storyId} (expected format: S-001, S-123, etc.)`,
|
|
94
|
+
});
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
// Check existence
|
|
98
|
+
try {
|
|
99
|
+
const story = findStoryById(sdlcRoot, storyId);
|
|
100
|
+
if (!story) {
|
|
101
|
+
result.valid = false;
|
|
102
|
+
result.errors.push({
|
|
103
|
+
storyId,
|
|
104
|
+
message: `Story not found: ${storyId}`,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
result.validStoryIds.push(storyId);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
result.valid = false;
|
|
113
|
+
result.errors.push({
|
|
114
|
+
storyId,
|
|
115
|
+
message: `Error validating story ${storyId}: ${error instanceof Error ? error.message : String(error)}`,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=batch-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-validator.js","sourceRoot":"","sources":["../../src/cli/batch-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAyBjD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAkB;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,iCAAiC;QACtE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAkB,EAClB,QAAgB;IAEhB,MAAM,MAAM,GAA0B;QACpC,KAAK,EAAE,IAAI;QACX,aAAa,EAAE,EAAE;QACjB,MAAM,EAAE,EAAE;KACX,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,eAAe;QACf,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBACjB,OAAO;gBACP,OAAO,EAAE,4BAA4B,OAAO,wCAAwC;aACrF,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gBACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACjB,OAAO;oBACP,OAAO,EAAE,oBAAoB,OAAO,EAAE;iBACvC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBACjB,OAAO;gBACP,OAAO,EAAE,0BAA0B,OAAO,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aACxG,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/cli/commands.d.ts
CHANGED
|
@@ -61,11 +61,16 @@ export declare function run(options: {
|
|
|
61
61
|
dryRun?: boolean;
|
|
62
62
|
continue?: boolean;
|
|
63
63
|
story?: string;
|
|
64
|
+
batch?: string;
|
|
65
|
+
epic?: string;
|
|
66
|
+
maxConcurrent?: string;
|
|
64
67
|
step?: string;
|
|
65
68
|
maxIterations?: string;
|
|
66
69
|
watch?: boolean;
|
|
67
70
|
force?: boolean;
|
|
68
71
|
worktree?: boolean;
|
|
72
|
+
clean?: boolean;
|
|
73
|
+
keepWorktrees?: boolean;
|
|
69
74
|
}): Promise<void>;
|
|
70
75
|
/**
|
|
71
76
|
* Phase information for RPIV display
|
|
@@ -138,6 +143,12 @@ export declare function migrate(options: {
|
|
|
138
143
|
backup?: boolean;
|
|
139
144
|
force?: boolean;
|
|
140
145
|
}): Promise<void>;
|
|
146
|
+
/**
|
|
147
|
+
* Security: Escape shell arguments for safe use in commands
|
|
148
|
+
* For use with execSync when shell execution is required
|
|
149
|
+
* @internal Exported for testing
|
|
150
|
+
*/
|
|
151
|
+
export declare function escapeShellArg(arg: string): string;
|
|
141
152
|
/**
|
|
142
153
|
* List all ai-sdlc managed worktrees
|
|
143
154
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
|