ai-sdlc 0.2.0-alpha.2 → 0.2.0-alpha.21
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/dist/agents/implementation.d.ts +62 -0
- package/dist/agents/implementation.d.ts.map +1 -1
- package/dist/agents/implementation.js +502 -89
- package/dist/agents/implementation.js.map +1 -1
- package/dist/agents/planning.js +2 -2
- package/dist/agents/planning.js.map +1 -1
- package/dist/agents/refinement.js +2 -2
- package/dist/agents/refinement.js.map +1 -1
- package/dist/agents/research.js +2 -2
- package/dist/agents/research.js.map +1 -1
- package/dist/agents/review.d.ts +12 -0
- package/dist/agents/review.d.ts.map +1 -1
- package/dist/agents/review.js +100 -9
- package/dist/agents/review.js.map +1 -1
- package/dist/agents/rework.js +3 -3
- package/dist/agents/rework.js.map +1 -1
- package/dist/agents/state-assessor.d.ts +3 -3
- package/dist/agents/state-assessor.d.ts.map +1 -1
- package/dist/agents/state-assessor.js +6 -6
- package/dist/agents/state-assessor.js.map +1 -1
- package/dist/agents/verification.d.ts +11 -0
- package/dist/agents/verification.d.ts.map +1 -1
- package/dist/agents/verification.js +74 -1
- package/dist/agents/verification.js.map +1 -1
- package/dist/cli/commands/migrate.js +1 -1
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands.d.ts +56 -2
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +806 -171
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +23 -10
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/formatting.js +1 -1
- package/dist/cli/formatting.js.map +1 -1
- package/dist/cli/runner.d.ts.map +1 -1
- package/dist/cli/runner.js +39 -20
- package/dist/cli/runner.js.map +1 -1
- package/dist/core/auth.d.ts +51 -2
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +267 -7
- package/dist/core/auth.js.map +1 -1
- package/dist/core/client.d.ts +6 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +34 -2
- package/dist/core/client.js.map +1 -1
- package/dist/core/config.d.ts +36 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +161 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/conflict-detector.d.ts +108 -0
- package/dist/core/conflict-detector.d.ts.map +1 -0
- package/dist/core/conflict-detector.js +413 -0
- package/dist/core/conflict-detector.js.map +1 -0
- package/dist/core/git-utils.d.ts +28 -0
- package/dist/core/git-utils.d.ts.map +1 -0
- package/dist/core/git-utils.js +146 -0
- package/dist/core/git-utils.js.map +1 -0
- package/dist/core/index.d.ts +16 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/kanban.d.ts +1 -6
- package/dist/core/kanban.d.ts.map +1 -1
- package/dist/core/kanban.js +10 -49
- package/dist/core/kanban.js.map +1 -1
- package/dist/core/logger.d.ts +92 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +221 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/story.d.ts +108 -20
- package/dist/core/story.d.ts.map +1 -1
- package/dist/core/story.js +340 -59
- package/dist/core/story.js.map +1 -1
- package/dist/core/workflow-state.d.ts +45 -6
- package/dist/core/workflow-state.d.ts.map +1 -1
- package/dist/core/workflow-state.js +185 -12
- package/dist/core/workflow-state.js.map +1 -1
- package/dist/core/worktree.d.ts +77 -0
- package/dist/core/worktree.d.ts.map +1 -0
- package/dist/core/worktree.js +246 -0
- package/dist/core/worktree.js.map +1 -0
- package/dist/index.js +49 -3
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +110 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +3 -1
package/dist/core/story.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Story, StoryFrontmatter, StoryStatus, ReviewAttempt, Config } from '../types/index.js';
|
|
1
|
+
import { Story, StoryFrontmatter, StoryStatus, ReviewAttempt, Config, LockOptions } from '../types/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* Parse a story markdown file into a Story object
|
|
4
4
|
*
|
|
@@ -7,19 +7,41 @@ import { Story, StoryFrontmatter, StoryStatus, ReviewAttempt, Config } from '../
|
|
|
7
7
|
*/
|
|
8
8
|
export declare function parseStory(filePath: string): Story;
|
|
9
9
|
/**
|
|
10
|
-
* Write a story back to disk
|
|
10
|
+
* Write a story back to disk with file locking for atomic updates.
|
|
11
|
+
*
|
|
12
|
+
* This function acquires an exclusive lock before writing to prevent race conditions
|
|
13
|
+
* from concurrent processes. The lock is always released, even if an error occurs.
|
|
14
|
+
*
|
|
15
|
+
* **IMPORTANT:** Do not nest locks on the same file to avoid deadlock. Batch multiple
|
|
16
|
+
* updates into a single writeStory() call instead.
|
|
17
|
+
*
|
|
18
|
+
* @param story - Story object to write
|
|
19
|
+
* @param options - Lock options (timeout, retries, stale threshold)
|
|
20
|
+
* @throws Error if file is locked by another process or filesystem is read-only
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Good: Batch updates
|
|
25
|
+
* story.frontmatter.status = 'in-progress';
|
|
26
|
+
* story.frontmatter.priority = 1;
|
|
27
|
+
* await writeStory(story);
|
|
28
|
+
*
|
|
29
|
+
* // Bad: Nested locks (potential deadlock)
|
|
30
|
+
* await writeStory(story); // holds lock
|
|
31
|
+
* await writeStory(story); // tries to acquire same lock = deadlock
|
|
32
|
+
* ```
|
|
11
33
|
*/
|
|
12
|
-
export declare function writeStory(story: Story): void
|
|
34
|
+
export declare function writeStory(story: Story, options?: LockOptions): Promise<void>;
|
|
13
35
|
/**
|
|
14
36
|
* Update story status in frontmatter without moving files
|
|
15
37
|
* This is the preferred method in the new folder-per-story architecture
|
|
16
38
|
*/
|
|
17
|
-
export declare function updateStoryStatus(story: Story, newStatus: StoryStatus): Story
|
|
39
|
+
export declare function updateStoryStatus(story: Story, newStatus: StoryStatus): Promise<Story>;
|
|
18
40
|
/**
|
|
19
41
|
* Move a story to a different kanban folder
|
|
20
42
|
* @deprecated Use updateStoryStatus() instead. Will be removed in v2.0
|
|
21
43
|
*/
|
|
22
|
-
export declare function moveStory(story: Story, toFolder: string, sdlcRoot: string): Story
|
|
44
|
+
export declare function moveStory(story: Story, toFolder: string, sdlcRoot: string): Promise<Story>;
|
|
23
45
|
/**
|
|
24
46
|
* Move a story to blocked status with reason and timestamp
|
|
25
47
|
* In the new architecture, this only updates frontmatter - file path remains unchanged
|
|
@@ -27,11 +49,20 @@ export declare function moveStory(story: Story, toFolder: string, sdlcRoot: stri
|
|
|
27
49
|
* @param storyPath - Absolute path to the story file
|
|
28
50
|
* @param reason - Reason for blocking (e.g., "Max refinement attempts (2/2) reached")
|
|
29
51
|
*/
|
|
30
|
-
export declare function moveToBlocked(storyPath: string, reason: string): void
|
|
52
|
+
export declare function moveToBlocked(storyPath: string, reason: string): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Generate a unique story ID in sequential format (S-0001, S-0002, etc.)
|
|
55
|
+
* Scans the stories folder to find the highest existing number.
|
|
56
|
+
*
|
|
57
|
+
* @param storiesFolder - Path to the stories directory
|
|
58
|
+
* @returns Sequential story ID like "S-0001"
|
|
59
|
+
*/
|
|
60
|
+
export declare function generateStoryId(storiesFolder?: string): string;
|
|
31
61
|
/**
|
|
32
|
-
* Generate a
|
|
62
|
+
* Generate a legacy story ID (for backwards compatibility/fallback)
|
|
63
|
+
* @deprecated Use generateStoryId() instead
|
|
33
64
|
*/
|
|
34
|
-
export declare function
|
|
65
|
+
export declare function generateLegacyStoryId(): string;
|
|
35
66
|
/**
|
|
36
67
|
* Create a slug from a title
|
|
37
68
|
*/
|
|
@@ -42,19 +73,19 @@ export declare function slugify(title: string): string;
|
|
|
42
73
|
* Creates stories/{id}/story.md with slug and priority in frontmatter.
|
|
43
74
|
* Priority uses gaps (10, 20, 30...) for easy insertion without renumbering.
|
|
44
75
|
*/
|
|
45
|
-
export declare function createStory(title: string, sdlcRoot: string, options?: Partial<StoryFrontmatter>): Story
|
|
76
|
+
export declare function createStory(title: string, sdlcRoot: string, options?: Partial<StoryFrontmatter>): Promise<Story>;
|
|
46
77
|
/**
|
|
47
78
|
* Update story frontmatter field
|
|
48
79
|
*/
|
|
49
|
-
export declare function updateStoryField<K extends keyof StoryFrontmatter>(story: Story, field: K, value: StoryFrontmatter[K]): Story
|
|
80
|
+
export declare function updateStoryField<K extends keyof StoryFrontmatter>(story: Story, field: K, value: StoryFrontmatter[K]): Promise<Story>;
|
|
50
81
|
/**
|
|
51
82
|
* Append content to a section in the story
|
|
52
83
|
*/
|
|
53
|
-
export declare function appendToSection(story: Story, section: string, content: string): Story
|
|
84
|
+
export declare function appendToSection(story: Story, section: string, content: string): Promise<Story>;
|
|
54
85
|
/**
|
|
55
86
|
* Record a refinement attempt in the story's frontmatter
|
|
56
87
|
*/
|
|
57
|
-
export declare function recordRefinementAttempt(story: Story, agentType: string, reviewFeedback: string): Story
|
|
88
|
+
export declare function recordRefinementAttempt(story: Story, agentType: string, reviewFeedback: string): Promise<Story>;
|
|
58
89
|
/**
|
|
59
90
|
* Get the current refinement count for a story
|
|
60
91
|
*/
|
|
@@ -66,7 +97,7 @@ export declare function canRetryRefinement(story: Story, maxAttempts: number): b
|
|
|
66
97
|
/**
|
|
67
98
|
* Reset phase completion flags for rework
|
|
68
99
|
*/
|
|
69
|
-
export declare function resetPhaseCompletion(story: Story, phase: 'research' | 'plan' | 'implement'): Story
|
|
100
|
+
export declare function resetPhaseCompletion(story: Story, phase: 'research' | 'plan' | 'implement'): Promise<Story>;
|
|
70
101
|
/**
|
|
71
102
|
* Get the latest review feedback from the story content
|
|
72
103
|
*/
|
|
@@ -74,7 +105,7 @@ export declare function getLatestReviewFeedback(story: Story): string | null;
|
|
|
74
105
|
/**
|
|
75
106
|
* Append refinement feedback to the story content
|
|
76
107
|
*/
|
|
77
|
-
export declare function appendRefinementNote(story: Story, iteration: number, feedback: string): Story
|
|
108
|
+
export declare function appendRefinementNote(story: Story, iteration: number, feedback: string): Promise<Story>;
|
|
78
109
|
/**
|
|
79
110
|
* Get the effective maximum retries for a story (story-specific or config default)
|
|
80
111
|
*/
|
|
@@ -87,15 +118,15 @@ export declare function isAtMaxRetries(story: Story, config: Config, maxIteratio
|
|
|
87
118
|
/**
|
|
88
119
|
* Increment the retry count for a story
|
|
89
120
|
*/
|
|
90
|
-
export declare function incrementRetryCount(story: Story): Story
|
|
121
|
+
export declare function incrementRetryCount(story: Story): Promise<Story>;
|
|
91
122
|
/**
|
|
92
123
|
* Reset RPIV cycle for a story (keep research, reset plan/implementation/reviews)
|
|
93
124
|
*/
|
|
94
|
-
export declare function resetRPIVCycle(story: Story, reason: string): Story
|
|
125
|
+
export declare function resetRPIVCycle(story: Story, reason: string): Promise<Story>;
|
|
95
126
|
/**
|
|
96
127
|
* Append a review attempt to the story's review history
|
|
97
128
|
*/
|
|
98
|
-
export declare function appendReviewHistory(story: Story, attempt: ReviewAttempt): Story
|
|
129
|
+
export declare function appendReviewHistory(story: Story, attempt: ReviewAttempt): Promise<Story>;
|
|
99
130
|
/**
|
|
100
131
|
* Get the latest review attempt from a story's history
|
|
101
132
|
*/
|
|
@@ -103,17 +134,74 @@ export declare function getLatestReviewAttempt(story: Story): ReviewAttempt | nu
|
|
|
103
134
|
/**
|
|
104
135
|
* Mark a story as complete (all workflow flags set to true)
|
|
105
136
|
*/
|
|
106
|
-
export declare function markStoryComplete(story: Story): Story
|
|
137
|
+
export declare function markStoryComplete(story: Story): Promise<Story>;
|
|
107
138
|
/**
|
|
108
139
|
* Snapshot max_retries from config to story frontmatter (for mid-cycle config change protection)
|
|
109
140
|
*/
|
|
110
|
-
export declare function snapshotMaxRetries(story: Story, config: Config): Story
|
|
141
|
+
export declare function snapshotMaxRetries(story: Story, config: Config): Promise<Story>;
|
|
142
|
+
/**
|
|
143
|
+
* Get the current implementation retry count for a story
|
|
144
|
+
*/
|
|
145
|
+
export declare function getImplementationRetryCount(story: Story): number;
|
|
146
|
+
/**
|
|
147
|
+
* Get the effective maximum implementation retries for a story (story-specific or config default)
|
|
148
|
+
* Story-specific overrides are capped at the upper bound to prevent resource exhaustion
|
|
149
|
+
*/
|
|
150
|
+
export declare function getEffectiveMaxImplementationRetries(story: Story, config: Config): number;
|
|
151
|
+
/**
|
|
152
|
+
* Check if a story has reached its maximum implementation retry limit.
|
|
153
|
+
* maxRetries represents the number of RETRY attempts allowed after the initial attempt.
|
|
154
|
+
* So with maxRetries=1, you get 1 initial attempt + 1 retry = 2 total attempts.
|
|
155
|
+
*/
|
|
156
|
+
export declare function isAtMaxImplementationRetries(story: Story, config: Config): boolean;
|
|
157
|
+
/**
|
|
158
|
+
* Reset implementation retry count to 0
|
|
159
|
+
*/
|
|
160
|
+
export declare function resetImplementationRetryCount(story: Story): Promise<Story>;
|
|
161
|
+
/**
|
|
162
|
+
* Increment the implementation retry count for a story
|
|
163
|
+
*/
|
|
164
|
+
export declare function incrementImplementationRetryCount(story: Story): Promise<Story>;
|
|
165
|
+
/**
|
|
166
|
+
* Sanitize story ID for safe path construction.
|
|
167
|
+
* Prevents path traversal attacks by rejecting dangerous characters.
|
|
168
|
+
*
|
|
169
|
+
* SECURITY: This function is CRITICAL for preventing path traversal vulnerabilities.
|
|
170
|
+
* Use this before constructing ANY file paths with user-provided story IDs.
|
|
171
|
+
*
|
|
172
|
+
* @param storyId - Story ID to sanitize (e.g., 'S-0001')
|
|
173
|
+
* @returns Sanitized story ID safe for path construction
|
|
174
|
+
* @throws Error if storyId contains dangerous characters or patterns
|
|
175
|
+
*/
|
|
176
|
+
export declare function sanitizeStoryId(storyId: string): string;
|
|
111
177
|
/**
|
|
112
178
|
* Sanitize user-controlled text for safe display and storage.
|
|
113
179
|
* Removes ANSI escape sequences, control characters, and potential injection vectors.
|
|
114
180
|
* Truncates to 200 characters maximum.
|
|
115
181
|
*/
|
|
116
182
|
export declare function sanitizeReasonText(text: string): string;
|
|
183
|
+
/**
|
|
184
|
+
* Find a story by ID using O(1) direct path lookup
|
|
185
|
+
* Falls back to searching old folder structure for backwards compatibility
|
|
186
|
+
*
|
|
187
|
+
* This function is the internal lookup mechanism. Use getStory() for external access.
|
|
188
|
+
*
|
|
189
|
+
* @param sdlcRoot - Root directory of the SDLC workspace
|
|
190
|
+
* @param storyId - Story ID (e.g., 'S-0001')
|
|
191
|
+
* @returns Story object or null if not found
|
|
192
|
+
*/
|
|
193
|
+
export declare function findStoryById(sdlcRoot: string, storyId: string): Story | null;
|
|
194
|
+
/**
|
|
195
|
+
* Retrieves a story by ID, resolving its current location across all folders.
|
|
196
|
+
* This is the single source of truth for story lookup - use this instead of
|
|
197
|
+
* directly calling parseStory() with cached paths.
|
|
198
|
+
*
|
|
199
|
+
* @param sdlcRoot - Root directory of the SDLC workspace
|
|
200
|
+
* @param storyId - Story ID (e.g., 'S-0001')
|
|
201
|
+
* @returns Fully parsed Story object with current path and metadata
|
|
202
|
+
* @throws Error if story ID not found in any folder
|
|
203
|
+
*/
|
|
204
|
+
export declare function getStory(sdlcRoot: string, storyId: string): Story;
|
|
117
205
|
/**
|
|
118
206
|
* Unblock a story and set status back to in-progress
|
|
119
207
|
* In the new architecture, this only updates frontmatter - file path remains unchanged
|
|
@@ -125,5 +213,5 @@ export declare function sanitizeReasonText(text: string): string;
|
|
|
125
213
|
*/
|
|
126
214
|
export declare function unblockStory(storyId: string, sdlcRoot: string, options?: {
|
|
127
215
|
resetRetries?: boolean;
|
|
128
|
-
}): Story
|
|
216
|
+
}): Promise<Story>;
|
|
129
217
|
//# sourceMappingURL=story.d.ts.map
|
package/dist/core/story.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"story.d.ts","sourceRoot":"","sources":["../../src/core/story.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"story.d.ts","sourceRoot":"","sources":["../../src/core/story.ts"],"names":[],"mappings":"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"}
|