specweave 1.0.65 β 1.0.67
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/CLAUDE.md +1 -0
- package/dist/src/cli/commands/living-docs.d.ts.map +1 -1
- package/dist/src/cli/commands/living-docs.js +66 -13
- package/dist/src/cli/commands/living-docs.js.map +1 -1
- package/dist/src/core/auto/increment-planner.d.ts +42 -0
- package/dist/src/core/auto/increment-planner.d.ts.map +1 -0
- package/dist/src/core/auto/increment-planner.js +205 -0
- package/dist/src/core/auto/increment-planner.js.map +1 -0
- package/dist/src/core/auto/prompt-chunker.d.ts +47 -0
- package/dist/src/core/auto/prompt-chunker.d.ts.map +1 -0
- package/dist/src/core/auto/prompt-chunker.js +230 -0
- package/dist/src/core/auto/prompt-chunker.js.map +1 -0
- package/dist/src/core/background/living-docs-executor.d.ts +66 -0
- package/dist/src/core/background/living-docs-executor.d.ts.map +1 -0
- package/dist/src/core/background/living-docs-executor.js +224 -0
- package/dist/src/core/background/living-docs-executor.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/hooks/stop-auto.sh +71 -0
- package/plugins/specweave/scripts/jobs.js +23 -16
package/CLAUDE.md
CHANGED
|
@@ -393,6 +393,7 @@ After generation:
|
|
|
393
393
|
| No GITHUB_TOKEN | Check `.env` file or run `gh auth login` |
|
|
394
394
|
| Edits blocked in repositories/ | Add `"additionalDirectories":["repositories"]` + `Write(//**)`, `Edit(//**)` to `.claude/settings.json` |
|
|
395
395
|
| Path patterns not working | `//path` = absolute, `/path` = relative to settings file, `additionalDirectories` for explicit working dirs |
|
|
396
|
+
| **specweave/claude not found after Node upgrade** | **nvm users**: Global packages are lost when switching Node versions! Fix: `nvm reinstall-packages <old-version>` OR `npm install -g specweave @anthropic-ai/claude-code`. See [Node Version Management](/.specweave/docs/internal/operations/runbook-node-version-management.md) |
|
|
396
397
|
<!-- SW:END:troubleshooting -->
|
|
397
398
|
|
|
398
399
|
<!-- SW:SECTION:principles version="1.0.60" -->
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"living-docs.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/living-docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"living-docs.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/living-docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFjF"}
|
|
@@ -73,20 +73,73 @@ export async function livingDocsCommand(options) {
|
|
|
73
73
|
const dependsOn = options.dependsOn
|
|
74
74
|
? options.dependsOn.split(',').map(s => s.trim())
|
|
75
75
|
: undefined;
|
|
76
|
-
//
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
|
|
76
|
+
// Check if running in auto mode
|
|
77
|
+
const autoSessionPath = path.join(projectPath, '.specweave/state/auto-session.json');
|
|
78
|
+
const isAutoMode = fs.existsSync(autoSessionPath);
|
|
79
|
+
if (isAutoMode) {
|
|
80
|
+
// Auto mode: Use chunked execution
|
|
81
|
+
try {
|
|
82
|
+
await runChunkedLivingDocs(projectPath, userInputs);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
86
|
+
console.error(chalk.red(`\nFailed to execute living docs chunk: ${errorMessage}`));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
85
89
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
+
else {
|
|
91
|
+
// Traditional mode: Launch background job
|
|
92
|
+
try {
|
|
93
|
+
const { job, pid, isBackground } = await launchLivingDocsJob({
|
|
94
|
+
projectPath,
|
|
95
|
+
userInputs,
|
|
96
|
+
dependsOn,
|
|
97
|
+
foreground: options.foreground,
|
|
98
|
+
});
|
|
99
|
+
displayLaunchSuccess(job, pid, isBackground, userInputs);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
103
|
+
console.error(chalk.red(`\nFailed to launch Living Docs Builder: ${errorMessage}`));
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Run living docs in chunked mode for auto mode integration
|
|
110
|
+
*/
|
|
111
|
+
async function runChunkedLivingDocs(projectPath, userInputs) {
|
|
112
|
+
const { executeLivingDocsChunk, getProgressSummary, loadLivingDocsCheckpoint } = await import('../../core/background/living-docs-executor.js');
|
|
113
|
+
console.log(chalk.blue('\nπ Running Living Docs in Auto Mode (Chunked Execution)\n'));
|
|
114
|
+
// Load existing checkpoint or create new one
|
|
115
|
+
const checkpoint = loadLivingDocsCheckpoint(projectPath);
|
|
116
|
+
if (checkpoint) {
|
|
117
|
+
console.log(chalk.gray('Resuming from checkpoint...'));
|
|
118
|
+
console.log(chalk.gray(getProgressSummary(checkpoint)));
|
|
119
|
+
console.log('');
|
|
120
|
+
}
|
|
121
|
+
// Execute one chunk (2 hours max)
|
|
122
|
+
const result = await executeLivingDocsChunk({
|
|
123
|
+
projectPath,
|
|
124
|
+
maxDuration: 2 * 60 * 60 * 1000, // 2 hours
|
|
125
|
+
checkpoint: checkpoint || undefined,
|
|
126
|
+
stopOnPhaseComplete: true, // Yield control after each phase
|
|
127
|
+
});
|
|
128
|
+
// Display result
|
|
129
|
+
if (result.status === 'all_complete') {
|
|
130
|
+
console.log(chalk.green('\nβ
All Living Docs Phases Complete!\n'));
|
|
131
|
+
console.log(chalk.gray('All 8 phases of living docs update have been completed.'));
|
|
132
|
+
console.log(chalk.gray('Check .specweave/docs/internal/ for generated documentation.\n'));
|
|
133
|
+
}
|
|
134
|
+
else if (result.status === 'phase_complete') {
|
|
135
|
+
console.log(chalk.green(`\nβ
Phase ${result.currentPhase} Complete!\n`));
|
|
136
|
+
console.log(chalk.gray(`Next: Phase ${result.nextPhase}`));
|
|
137
|
+
console.log(chalk.gray('Stop hook will continue execution in next iteration.\n'));
|
|
138
|
+
}
|
|
139
|
+
else if (result.status === 'time_limit') {
|
|
140
|
+
console.log(chalk.yellow('\nβ° Time Limit Reached (2 hours)\n'));
|
|
141
|
+
console.log(chalk.gray(`Phase ${result.currentPhase} in progress...`));
|
|
142
|
+
console.log(chalk.gray('Checkpoint saved. Will resume in next iteration.\n'));
|
|
90
143
|
}
|
|
91
144
|
}
|
|
92
145
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"living-docs.js","sourceRoot":"","sources":["../../../../src/cli/commands/living-docs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"living-docs.js","sourceRoot":"","sources":["../../../../src/cli/commands/living-docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Increment Planning Algorithm
|
|
3
|
+
*
|
|
4
|
+
* Groups features into right-sized increments with dependency tracking.
|
|
5
|
+
*
|
|
6
|
+
* @module increment-planner
|
|
7
|
+
*/
|
|
8
|
+
import type { Feature } from './prompt-chunker.js';
|
|
9
|
+
export interface IncrementPlan {
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
features: Feature[];
|
|
14
|
+
estimatedTasks: number;
|
|
15
|
+
dependencies: string[];
|
|
16
|
+
priority: number;
|
|
17
|
+
}
|
|
18
|
+
export interface PlanningResult {
|
|
19
|
+
increments: IncrementPlan[];
|
|
20
|
+
totalFeatures: number;
|
|
21
|
+
totalTasks: number;
|
|
22
|
+
estimatedDuration: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Plan increments from extracted features
|
|
26
|
+
*
|
|
27
|
+
* @param features - Features extracted from prompt
|
|
28
|
+
* @returns Planned increments with dependencies
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const features = extractFeatures("Build e-commerce with auth, products, cart, checkout");
|
|
33
|
+
* const plan = planIncrements(features);
|
|
34
|
+
* // Returns: [
|
|
35
|
+
* // { id: "0001-authentication", features: [auth], tasks: 7 },
|
|
36
|
+
* // { id: "0002-products-and-cart", features: [products, cart], tasks: 14 },
|
|
37
|
+
* // { id: "0003-checkout", features: [checkout], tasks: 12 }
|
|
38
|
+
* // ]
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function planIncrements(features: Feature[]): PlanningResult;
|
|
42
|
+
//# sourceMappingURL=increment-planner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"increment-planner.d.ts","sourceRoot":"","sources":["../../../../src/core/auto/increment-planner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AASD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,cAAc,CAiDlE"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Increment Planning Algorithm
|
|
3
|
+
*
|
|
4
|
+
* Groups features into right-sized increments with dependency tracking.
|
|
5
|
+
*
|
|
6
|
+
* @module increment-planner
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Target task count per increment (sweet spot)
|
|
10
|
+
*/
|
|
11
|
+
const MIN_TASKS_PER_INCREMENT = 5;
|
|
12
|
+
const MAX_TASKS_PER_INCREMENT = 15;
|
|
13
|
+
const IDEAL_TASKS_PER_INCREMENT = 10;
|
|
14
|
+
/**
|
|
15
|
+
* Plan increments from extracted features
|
|
16
|
+
*
|
|
17
|
+
* @param features - Features extracted from prompt
|
|
18
|
+
* @returns Planned increments with dependencies
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const features = extractFeatures("Build e-commerce with auth, products, cart, checkout");
|
|
23
|
+
* const plan = planIncrements(features);
|
|
24
|
+
* // Returns: [
|
|
25
|
+
* // { id: "0001-authentication", features: [auth], tasks: 7 },
|
|
26
|
+
* // { id: "0002-products-and-cart", features: [products, cart], tasks: 14 },
|
|
27
|
+
* // { id: "0003-checkout", features: [checkout], tasks: 12 }
|
|
28
|
+
* // ]
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export function planIncrements(features) {
|
|
32
|
+
if (features.length === 0) {
|
|
33
|
+
throw new Error('No features provided for planning');
|
|
34
|
+
}
|
|
35
|
+
// Sort features by dependency and complexity
|
|
36
|
+
const sorted = topologicalSort(features);
|
|
37
|
+
// Group features into increments
|
|
38
|
+
const increments = [];
|
|
39
|
+
let currentGroup = [];
|
|
40
|
+
let currentTasks = 0;
|
|
41
|
+
let incrementId = 1;
|
|
42
|
+
for (const feature of sorted) {
|
|
43
|
+
const wouldExceed = currentTasks + feature.estimatedTasks > MAX_TASKS_PER_INCREMENT;
|
|
44
|
+
const hasMinimum = currentTasks >= MIN_TASKS_PER_INCREMENT;
|
|
45
|
+
if (currentGroup.length > 0 && wouldExceed && hasMinimum) {
|
|
46
|
+
// Commit current group as an increment
|
|
47
|
+
increments.push(createIncrement(incrementId++, currentGroup));
|
|
48
|
+
currentGroup = [feature];
|
|
49
|
+
currentTasks = feature.estimatedTasks;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Add to current group
|
|
53
|
+
currentGroup.push(feature);
|
|
54
|
+
currentTasks += feature.estimatedTasks;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Commit remaining group
|
|
58
|
+
if (currentGroup.length > 0) {
|
|
59
|
+
increments.push(createIncrement(incrementId, currentGroup));
|
|
60
|
+
}
|
|
61
|
+
// Identify dependencies between increments
|
|
62
|
+
identifyIncrementDependencies(increments);
|
|
63
|
+
// Calculate totals
|
|
64
|
+
const totalFeatures = features.length;
|
|
65
|
+
const totalTasks = features.reduce((sum, f) => sum + f.estimatedTasks, 0);
|
|
66
|
+
const estimatedDuration = estimateDuration(totalTasks);
|
|
67
|
+
return {
|
|
68
|
+
increments,
|
|
69
|
+
totalFeatures,
|
|
70
|
+
totalTasks,
|
|
71
|
+
estimatedDuration,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Topological sort of features based on dependencies
|
|
76
|
+
*/
|
|
77
|
+
function topologicalSort(features) {
|
|
78
|
+
const sorted = [];
|
|
79
|
+
const visited = new Set();
|
|
80
|
+
const visiting = new Set();
|
|
81
|
+
function visit(feature) {
|
|
82
|
+
if (visited.has(feature.name))
|
|
83
|
+
return;
|
|
84
|
+
if (visiting.has(feature.name)) {
|
|
85
|
+
// Circular dependency - skip for now
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
visiting.add(feature.name);
|
|
89
|
+
// Visit dependencies first
|
|
90
|
+
for (const depName of feature.dependencies) {
|
|
91
|
+
const depFeature = features.find((f) => f.name === depName);
|
|
92
|
+
if (depFeature) {
|
|
93
|
+
visit(depFeature);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
visiting.delete(feature.name);
|
|
97
|
+
visited.add(feature.name);
|
|
98
|
+
sorted.push(feature);
|
|
99
|
+
}
|
|
100
|
+
for (const feature of features) {
|
|
101
|
+
visit(feature);
|
|
102
|
+
}
|
|
103
|
+
return sorted;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Create an increment from a group of features
|
|
107
|
+
*/
|
|
108
|
+
function createIncrement(id, features) {
|
|
109
|
+
const paddedId = String(id).padStart(4, '0');
|
|
110
|
+
const name = generateIncrementName(features);
|
|
111
|
+
const slug = name.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
|
|
112
|
+
const description = features.map((f) => f.name).join(', ');
|
|
113
|
+
const estimatedTasks = features.reduce((sum, f) => sum + f.estimatedTasks, 0);
|
|
114
|
+
return {
|
|
115
|
+
id: `${paddedId}-${slug}`,
|
|
116
|
+
name,
|
|
117
|
+
description,
|
|
118
|
+
features,
|
|
119
|
+
estimatedTasks,
|
|
120
|
+
dependencies: [],
|
|
121
|
+
priority: id,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Generate a human-readable name for an increment
|
|
126
|
+
*/
|
|
127
|
+
function generateIncrementName(features) {
|
|
128
|
+
if (features.length === 1) {
|
|
129
|
+
return capitalizeWords(features[0].name.replace(/-/g, ' '));
|
|
130
|
+
}
|
|
131
|
+
// Try to find a common theme
|
|
132
|
+
const firstFeature = features[0].name;
|
|
133
|
+
if (firstFeature.includes('auth')) {
|
|
134
|
+
return 'User Authentication';
|
|
135
|
+
}
|
|
136
|
+
if (firstFeature.includes('product')) {
|
|
137
|
+
return 'Product Catalog';
|
|
138
|
+
}
|
|
139
|
+
if (firstFeature.includes('cart') || firstFeature.includes('checkout')) {
|
|
140
|
+
return 'Shopping Cart & Checkout';
|
|
141
|
+
}
|
|
142
|
+
// Default: use first 2 features
|
|
143
|
+
const names = features.slice(0, 2).map((f) => capitalizeWords(f.name.replace(/-/g, ' ')));
|
|
144
|
+
return names.join(' & ');
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Capitalize first letter of each word
|
|
148
|
+
*/
|
|
149
|
+
function capitalizeWords(str) {
|
|
150
|
+
return str
|
|
151
|
+
.split(' ')
|
|
152
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
153
|
+
.join(' ');
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Identify dependencies between increments based on feature dependencies
|
|
157
|
+
*/
|
|
158
|
+
function identifyIncrementDependencies(increments) {
|
|
159
|
+
for (let i = 0; i < increments.length; i++) {
|
|
160
|
+
const increment = increments[i];
|
|
161
|
+
// Check if any feature in this increment depends on features in earlier increments
|
|
162
|
+
for (const feature of increment.features) {
|
|
163
|
+
for (const depName of feature.dependencies) {
|
|
164
|
+
// Find which increment contains this dependency
|
|
165
|
+
for (let j = 0; j < i; j++) {
|
|
166
|
+
const earlierIncrement = increments[j];
|
|
167
|
+
if (earlierIncrement.features.some((f) => f.name === depName)) {
|
|
168
|
+
// This increment depends on an earlier one
|
|
169
|
+
if (!increment.dependencies.includes(earlierIncrement.id)) {
|
|
170
|
+
increment.dependencies.push(earlierIncrement.id);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Estimate duration based on task count
|
|
180
|
+
*/
|
|
181
|
+
function estimateDuration(totalTasks) {
|
|
182
|
+
// Assume ~30 minutes per task in auto mode
|
|
183
|
+
const hoursPerTask = 0.5;
|
|
184
|
+
const totalHours = totalTasks * hoursPerTask;
|
|
185
|
+
if (totalHours < 1) {
|
|
186
|
+
return '< 1 hour';
|
|
187
|
+
}
|
|
188
|
+
else if (totalHours < 4) {
|
|
189
|
+
return `${Math.ceil(totalHours)} hours`;
|
|
190
|
+
}
|
|
191
|
+
else if (totalHours < 8) {
|
|
192
|
+
return '~1 day';
|
|
193
|
+
}
|
|
194
|
+
else if (totalHours < 16) {
|
|
195
|
+
return '1-2 days';
|
|
196
|
+
}
|
|
197
|
+
else if (totalHours < 40) {
|
|
198
|
+
return `2-${Math.ceil(totalHours / 8)} days`;
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
const weeks = Math.ceil(totalHours / 40);
|
|
202
|
+
return `${weeks} ${weeks === 1 ? 'week' : 'weeks'}`;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=increment-planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"increment-planner.js","sourceRoot":"","sources":["../../../../src/core/auto/increment-planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Chunking for Auto Mode
|
|
3
|
+
*
|
|
4
|
+
* Analyzes large prompts and extracts discrete features for intelligent increment planning.
|
|
5
|
+
*
|
|
6
|
+
* @module prompt-chunker
|
|
7
|
+
*/
|
|
8
|
+
export interface Feature {
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
complexity: 'simple' | 'medium' | 'complex';
|
|
12
|
+
estimatedTasks: number;
|
|
13
|
+
dependencies: string[];
|
|
14
|
+
keywords: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface PromptAnalysis {
|
|
17
|
+
features: Feature[];
|
|
18
|
+
totalComplexity: number;
|
|
19
|
+
recommendedIncrements: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Extract discrete features from a natural language prompt
|
|
23
|
+
*
|
|
24
|
+
* @param prompt - User's natural language prompt
|
|
25
|
+
* @returns Analyzed features with complexity estimates
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const result = extractFeatures("Build e-commerce with auth, products, cart, checkout");
|
|
30
|
+
* // Returns 4 features: auth, products, cart, checkout
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function extractFeatures(prompt: string): Feature[];
|
|
34
|
+
/**
|
|
35
|
+
* Analyze full prompt and recommend increment structure
|
|
36
|
+
*
|
|
37
|
+
* @param prompt - User's natural language prompt
|
|
38
|
+
* @returns Full analysis with increment recommendations
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const analysis = analyzePrompt("Build e-commerce with auth, products, cart, checkout");
|
|
43
|
+
* console.log(analysis.recommendedIncrements); // 2-3 increments
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function analyzePrompt(prompt: string): PromptAnalysis;
|
|
47
|
+
//# sourceMappingURL=prompt-chunker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-chunker.d.ts","sourceRoot":"","sources":["../../../../src/core/auto/prompt-chunker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AA+DD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CA0BzD;AAqID;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAc5D"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Chunking for Auto Mode
|
|
3
|
+
*
|
|
4
|
+
* Analyzes large prompts and extracts discrete features for intelligent increment planning.
|
|
5
|
+
*
|
|
6
|
+
* @module prompt-chunker
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Feature boundary keywords that indicate separation
|
|
10
|
+
*/
|
|
11
|
+
const FEATURE_SEPARATORS = [
|
|
12
|
+
'and',
|
|
13
|
+
'with',
|
|
14
|
+
'including',
|
|
15
|
+
'also',
|
|
16
|
+
'plus',
|
|
17
|
+
'as well as',
|
|
18
|
+
',',
|
|
19
|
+
';',
|
|
20
|
+
];
|
|
21
|
+
/**
|
|
22
|
+
* Common architectural features that usually need to come first
|
|
23
|
+
*/
|
|
24
|
+
const FOUNDATIONAL_FEATURES = [
|
|
25
|
+
'auth',
|
|
26
|
+
'authentication',
|
|
27
|
+
'database',
|
|
28
|
+
'setup',
|
|
29
|
+
'infrastructure',
|
|
30
|
+
'config',
|
|
31
|
+
'configuration',
|
|
32
|
+
];
|
|
33
|
+
/**
|
|
34
|
+
* Complexity indicators
|
|
35
|
+
*/
|
|
36
|
+
const COMPLEXITY_INDICATORS = {
|
|
37
|
+
simple: ['button', 'link', 'page', 'view', 'display', 'show', 'list'],
|
|
38
|
+
medium: ['form', 'validation', 'api', 'endpoint', 'integration', 'filter', 'search'],
|
|
39
|
+
complex: [
|
|
40
|
+
'auth',
|
|
41
|
+
'payment',
|
|
42
|
+
'real-time',
|
|
43
|
+
'websocket',
|
|
44
|
+
'notification',
|
|
45
|
+
'dashboard',
|
|
46
|
+
'analytics',
|
|
47
|
+
'migration',
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Generic project type words to skip (not specific features)
|
|
52
|
+
*/
|
|
53
|
+
const GENERIC_TERMS = [
|
|
54
|
+
'app',
|
|
55
|
+
'application',
|
|
56
|
+
'website',
|
|
57
|
+
'site',
|
|
58
|
+
'platform',
|
|
59
|
+
'system',
|
|
60
|
+
'e-commerce',
|
|
61
|
+
'ecommerce',
|
|
62
|
+
'dashboard',
|
|
63
|
+
'portal',
|
|
64
|
+
];
|
|
65
|
+
/**
|
|
66
|
+
* Extract discrete features from a natural language prompt
|
|
67
|
+
*
|
|
68
|
+
* @param prompt - User's natural language prompt
|
|
69
|
+
* @returns Analyzed features with complexity estimates
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const result = extractFeatures("Build e-commerce with auth, products, cart, checkout");
|
|
74
|
+
* // Returns 4 features: auth, products, cart, checkout
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export function extractFeatures(prompt) {
|
|
78
|
+
const features = [];
|
|
79
|
+
// Normalize prompt
|
|
80
|
+
const normalized = prompt
|
|
81
|
+
.toLowerCase()
|
|
82
|
+
.replace(/\n/g, ' ')
|
|
83
|
+
.replace(/\s+/g, ' ')
|
|
84
|
+
.trim();
|
|
85
|
+
// Split by feature separators
|
|
86
|
+
const segments = splitByFeatureSeparators(normalized);
|
|
87
|
+
for (const segment of segments) {
|
|
88
|
+
if (segment.trim().length < 3)
|
|
89
|
+
continue; // Skip tiny fragments
|
|
90
|
+
const feature = analyzeSegment(segment);
|
|
91
|
+
if (feature && !isGenericTerm(feature.name)) {
|
|
92
|
+
features.push(feature);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Identify dependencies (auth typically comes before everything)
|
|
96
|
+
identifyDependencies(features);
|
|
97
|
+
return features;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if a feature name is a generic term that should be skipped
|
|
101
|
+
*/
|
|
102
|
+
function isGenericTerm(name) {
|
|
103
|
+
return GENERIC_TERMS.some((term) => name.includes(term) || term.includes(name));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Split prompt by feature separator keywords
|
|
107
|
+
*/
|
|
108
|
+
function splitByFeatureSeparators(prompt) {
|
|
109
|
+
// First, split by commas and semicolons
|
|
110
|
+
let segments = prompt.split(/[,;]+/).map((s) => s.trim());
|
|
111
|
+
// Then split by word separators (and, with, including, etc.)
|
|
112
|
+
const result = [];
|
|
113
|
+
for (const segment of segments) {
|
|
114
|
+
// Split by word separators but keep the segment structure
|
|
115
|
+
const wordSeps = /\s+(and|with|including|also|plus|as well as)\s+/i;
|
|
116
|
+
const parts = segment.split(wordSeps).filter((p) => {
|
|
117
|
+
// Filter out separator words themselves
|
|
118
|
+
const lower = p.toLowerCase().trim();
|
|
119
|
+
return lower && !['and', 'with', 'including', 'also', 'plus', 'as well as'].includes(lower);
|
|
120
|
+
});
|
|
121
|
+
result.push(...parts);
|
|
122
|
+
}
|
|
123
|
+
return result.map((s) => s.trim()).filter((s) => s.length > 0);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Analyze a segment to extract feature details
|
|
127
|
+
*/
|
|
128
|
+
function analyzeSegment(segment) {
|
|
129
|
+
// Extract feature name (usually the main noun/action)
|
|
130
|
+
const name = extractFeatureName(segment);
|
|
131
|
+
if (!name)
|
|
132
|
+
return null;
|
|
133
|
+
// Determine complexity
|
|
134
|
+
const complexity = estimateComplexity(segment);
|
|
135
|
+
// Estimate task count based on complexity
|
|
136
|
+
const estimatedTasks = complexity === 'simple' ? 3 : complexity === 'medium' ? 7 : 12;
|
|
137
|
+
// Extract keywords
|
|
138
|
+
const keywords = segment.split(/\s+/).filter((word) => word.length > 3);
|
|
139
|
+
return {
|
|
140
|
+
name,
|
|
141
|
+
description: segment,
|
|
142
|
+
complexity,
|
|
143
|
+
estimatedTasks,
|
|
144
|
+
dependencies: [],
|
|
145
|
+
keywords,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Extract the primary feature name from a segment
|
|
150
|
+
*/
|
|
151
|
+
function extractFeatureName(segment) {
|
|
152
|
+
// Remove common verbs and articles
|
|
153
|
+
let cleaned = segment.replace(/^(build|create|add|implement|make|setup|configure|develop|the|a|an)\s+/gi, '');
|
|
154
|
+
// Remove trailing articles/connectors
|
|
155
|
+
cleaned = cleaned.replace(/\s+(the|a|an|to|for|of)$/gi, '');
|
|
156
|
+
// Take first 1-3 words as feature name
|
|
157
|
+
const words = cleaned.trim().split(/\s+/).slice(0, 3);
|
|
158
|
+
const name = words.join('-').replace(/[^a-z0-9-]/g, '');
|
|
159
|
+
return name || segment.split(/\s+/)[0]; // Fallback to first word if cleaning produced empty
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Estimate complexity based on keywords
|
|
163
|
+
*/
|
|
164
|
+
function estimateComplexity(segment) {
|
|
165
|
+
const lower = segment.toLowerCase();
|
|
166
|
+
// Check for complex indicators
|
|
167
|
+
for (const indicator of COMPLEXITY_INDICATORS.complex) {
|
|
168
|
+
if (lower.includes(indicator))
|
|
169
|
+
return 'complex';
|
|
170
|
+
}
|
|
171
|
+
// Check for medium indicators
|
|
172
|
+
for (const indicator of COMPLEXITY_INDICATORS.medium) {
|
|
173
|
+
if (lower.includes(indicator))
|
|
174
|
+
return 'medium';
|
|
175
|
+
}
|
|
176
|
+
return 'simple';
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Identify dependencies between features
|
|
180
|
+
*/
|
|
181
|
+
function identifyDependencies(features) {
|
|
182
|
+
// Find foundational features
|
|
183
|
+
const foundationalFeatures = features.filter((f) => FOUNDATIONAL_FEATURES.some((keyword) => f.name.includes(keyword)));
|
|
184
|
+
// All non-foundational features depend on foundational ones
|
|
185
|
+
for (const feature of features) {
|
|
186
|
+
const isFoundational = foundationalFeatures.includes(feature);
|
|
187
|
+
if (!isFoundational) {
|
|
188
|
+
for (const foundation of foundationalFeatures) {
|
|
189
|
+
if (!feature.dependencies.includes(foundation.name)) {
|
|
190
|
+
feature.dependencies.push(foundation.name);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Payment depends on products/cart
|
|
196
|
+
const paymentFeatures = features.filter((f) => f.name.includes('payment') || f.name.includes('checkout'));
|
|
197
|
+
const productFeatures = features.filter((f) => f.name.includes('product') || f.name.includes('cart'));
|
|
198
|
+
for (const payment of paymentFeatures) {
|
|
199
|
+
for (const product of productFeatures) {
|
|
200
|
+
if (!payment.dependencies.includes(product.name)) {
|
|
201
|
+
payment.dependencies.push(product.name);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Analyze full prompt and recommend increment structure
|
|
208
|
+
*
|
|
209
|
+
* @param prompt - User's natural language prompt
|
|
210
|
+
* @returns Full analysis with increment recommendations
|
|
211
|
+
*
|
|
212
|
+
* @example
|
|
213
|
+
* ```typescript
|
|
214
|
+
* const analysis = analyzePrompt("Build e-commerce with auth, products, cart, checkout");
|
|
215
|
+
* console.log(analysis.recommendedIncrements); // 2-3 increments
|
|
216
|
+
* ```
|
|
217
|
+
*/
|
|
218
|
+
export function analyzePrompt(prompt) {
|
|
219
|
+
const features = extractFeatures(prompt);
|
|
220
|
+
// Calculate total complexity
|
|
221
|
+
const totalComplexity = features.reduce((sum, f) => sum + f.estimatedTasks, 0);
|
|
222
|
+
// Recommend increments (target 5-15 tasks per increment)
|
|
223
|
+
const recommendedIncrements = Math.max(1, Math.ceil(totalComplexity / 10));
|
|
224
|
+
return {
|
|
225
|
+
features,
|
|
226
|
+
totalComplexity,
|
|
227
|
+
recommendedIncrements,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=prompt-chunker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-chunker.js","sourceRoot":"","sources":["../../../../src/core/auto/prompt-chunker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH;;GAEG;AACH,MAAM,kBAAkB,GAAG;IACzB,KAAK;IACL,MAAM;IACN,WAAW;IACX,MAAM;IACN,MAAM;IACN,YAAY;IACZ,GAAG;IACH,GAAG;CACJ,CAAC;AAEF;;GAEG;AACH,MAAM,qBAAqB,GAAG;IAC5B,MAAM;IACN,gBAAgB;IAChB,UAAU;IACV,OAAO;IACP,gBAAgB;IAChB,QAAQ;IACR,eAAe;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,qBAAqB,GAAG;IAC5B,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;IACrE,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC;IACpF,OAAO,EAAE;QACP,MAAM;QACN,SAAS;QACT,WAAW;QACX,WAAW;QACX,cAAc;QACd,WAAW;QACX,WAAW;QACX,WAAW;KACZ;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,aAAa,GAAG;IACpB,KAAK;IACL,aAAa;IACb,SAAS;IACT,MAAM;IACN,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,WAAW;IACX,QAAQ;CACT,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,mBAAmB;IACnB,MAAM,UAAU,GAAG,MAAM;SACtB,WAAW,EAAE;SACb,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;IAEV,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;IAEtD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS,CAAC,sBAAsB;QAE/D,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAE/B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAClF,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,MAAc;IAC9C,wCAAwC;IACxC,IAAI,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE1D,6DAA6D;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,0DAA0D;QAC1D,MAAM,QAAQ,GAAG,kDAAkD,CAAC;QACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACjD,wCAAwC;YACxC,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;YACrC,OAAO,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAe;IACrC,sDAAsD;IACtD,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,uBAAuB;IACvB,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE/C,0CAA0C;IAC1C,MAAM,cAAc,GAAG,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,mBAAmB;IACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAExE,OAAO;QACL,IAAI;QACJ,WAAW,EAAE,OAAO;QACpB,UAAU;QACV,cAAc;QACd,YAAY,EAAE,EAAE;QAChB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAAe;IACzC,mCAAmC;IACnC,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAC3B,0EAA0E,EAC1E,EAAE,CACH,CAAC;IAEF,sCAAsC;IACtC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;IAE5D,uCAAuC;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAExD,OAAO,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,oDAAoD;AAC9F,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAEpC,+BAA+B;IAC/B,KAAK,MAAM,SAAS,IAAI,qBAAqB,CAAC,OAAO,EAAE,CAAC;QACtD,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAClD,CAAC;IAED,8BAA8B;IAC9B,KAAK,MAAM,SAAS,IAAI,qBAAqB,CAAC,MAAM,EAAE,CAAC;QACrD,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,QAAQ,CAAC;IACjD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,QAAmB;IAC/C,6BAA6B;IAC7B,MAAM,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACjD,qBAAqB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAClE,CAAC;IAEF,4DAA4D;IAC5D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,cAAc,GAAG,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,KAAK,MAAM,UAAU,IAAI,oBAAoB,EAAE,CAAC;gBAC9C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpD,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1G,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtG,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEzC,6BAA6B;IAC7B,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAE/E,yDAAyD;IACzD,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC;IAE3E,OAAO;QACL,QAAQ;QACR,eAAe;QACf,qBAAqB;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Living Docs Chunked Execution for Auto Mode
|
|
3
|
+
*
|
|
4
|
+
* Enables living docs to run in auto mode with:
|
|
5
|
+
* - Time-boxed chunks (2 hours max per iteration)
|
|
6
|
+
* - Checkpoint/resume across iterations
|
|
7
|
+
* - Stop hook integration
|
|
8
|
+
* - Phase-by-phase progress tracking
|
|
9
|
+
*/
|
|
10
|
+
export interface LivingDocsCheckpoint {
|
|
11
|
+
currentPhase: Phase;
|
|
12
|
+
completedPhases: Phase[];
|
|
13
|
+
phaseProgress: Record<string, any>;
|
|
14
|
+
startTime: string;
|
|
15
|
+
lastUpdate: string;
|
|
16
|
+
totalPhases: number;
|
|
17
|
+
}
|
|
18
|
+
export type Phase = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H';
|
|
19
|
+
export interface ChunkedExecutionOptions {
|
|
20
|
+
maxDuration: number;
|
|
21
|
+
checkpoint?: LivingDocsCheckpoint;
|
|
22
|
+
stopOnPhaseComplete: boolean;
|
|
23
|
+
projectPath: string;
|
|
24
|
+
}
|
|
25
|
+
export interface ChunkResult {
|
|
26
|
+
status: 'phase_complete' | 'time_limit' | 'all_complete';
|
|
27
|
+
currentPhase?: Phase;
|
|
28
|
+
nextPhase?: Phase;
|
|
29
|
+
progress?: Record<string, any>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Load checkpoint from filesystem
|
|
33
|
+
*/
|
|
34
|
+
export declare function loadLivingDocsCheckpoint(projectPath: string): LivingDocsCheckpoint | null;
|
|
35
|
+
/**
|
|
36
|
+
* Save checkpoint to filesystem
|
|
37
|
+
*/
|
|
38
|
+
export declare function saveLivingDocsCheckpoint(projectPath: string, checkpoint: LivingDocsCheckpoint): void;
|
|
39
|
+
/**
|
|
40
|
+
* Get next phase in sequence
|
|
41
|
+
*/
|
|
42
|
+
export declare function getNextPhase(currentPhase: Phase): Phase | null;
|
|
43
|
+
/**
|
|
44
|
+
* Get phase name for display
|
|
45
|
+
*/
|
|
46
|
+
export declare function getPhaseName(phase: Phase): string;
|
|
47
|
+
/**
|
|
48
|
+
* Initialize checkpoint for new execution
|
|
49
|
+
*/
|
|
50
|
+
export declare function initializeCheckpoint(): LivingDocsCheckpoint;
|
|
51
|
+
/**
|
|
52
|
+
* Execute living docs in chunked mode for auto mode integration
|
|
53
|
+
*
|
|
54
|
+
* This breaks the living docs update into time-boxed chunks that can be
|
|
55
|
+
* controlled by the auto mode stop hook.
|
|
56
|
+
*/
|
|
57
|
+
export declare function executeLivingDocsChunk(options: ChunkedExecutionOptions): Promise<ChunkResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Clean up checkpoint after completion
|
|
60
|
+
*/
|
|
61
|
+
export declare function cleanupCheckpoint(projectPath: string): void;
|
|
62
|
+
/**
|
|
63
|
+
* Get current progress summary
|
|
64
|
+
*/
|
|
65
|
+
export declare function getProgressSummary(checkpoint: LivingDocsCheckpoint): string;
|
|
66
|
+
//# sourceMappingURL=living-docs-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"living-docs-executor.d.ts","sourceRoot":"","sources":["../../../../src/core/background/living-docs-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,KAAK,CAAC;IACpB,eAAe,EAAE,KAAK,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,gBAAgB,GAAG,YAAY,GAAG,cAAc,CAAC;IACzD,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAeD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAczF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,oBAAoB,GAC/B,IAAI,CAeN;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,CAM9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,oBAAoB,CAS3D;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,WAAW,CAAC,CA4EtB;AAuCD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAW3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,oBAAoB,GAAG,MAAM,CAmB3E"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Living Docs Chunked Execution for Auto Mode
|
|
3
|
+
*
|
|
4
|
+
* Enables living docs to run in auto mode with:
|
|
5
|
+
* - Time-boxed chunks (2 hours max per iteration)
|
|
6
|
+
* - Checkpoint/resume across iterations
|
|
7
|
+
* - Stop hook integration
|
|
8
|
+
* - Phase-by-phase progress tracking
|
|
9
|
+
*/
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import * as fs from '../../utils/fs-native.js';
|
|
12
|
+
import { consoleLogger as logger } from '../../utils/logger.js';
|
|
13
|
+
const PHASE_NAMES = {
|
|
14
|
+
'A': 'Discovery',
|
|
15
|
+
'B': 'Deep Analysis',
|
|
16
|
+
'C': 'Org Synthesis',
|
|
17
|
+
'D': 'Architecture',
|
|
18
|
+
'E': 'Inconsistencies',
|
|
19
|
+
'F': 'Strategy',
|
|
20
|
+
'G': 'Enterprise',
|
|
21
|
+
'H': 'Diagrams',
|
|
22
|
+
};
|
|
23
|
+
const PHASE_ORDER = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'];
|
|
24
|
+
/**
|
|
25
|
+
* Load checkpoint from filesystem
|
|
26
|
+
*/
|
|
27
|
+
export function loadLivingDocsCheckpoint(projectPath) {
|
|
28
|
+
const checkpointPath = path.join(projectPath, '.specweave/state/living-docs-checkpoint.json');
|
|
29
|
+
if (!fs.existsSync(checkpointPath)) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const content = fs.readFileSync(checkpointPath, 'utf-8');
|
|
34
|
+
return JSON.parse(content);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
logger.warn(`Failed to load living docs checkpoint: ${error}`);
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Save checkpoint to filesystem
|
|
43
|
+
*/
|
|
44
|
+
export function saveLivingDocsCheckpoint(projectPath, checkpoint) {
|
|
45
|
+
const statePath = path.join(projectPath, '.specweave/state');
|
|
46
|
+
const checkpointPath = path.join(statePath, 'living-docs-checkpoint.json');
|
|
47
|
+
// Ensure state directory exists
|
|
48
|
+
if (!fs.existsSync(statePath)) {
|
|
49
|
+
fs.mkdirSync(statePath, { recursive: true });
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
fs.writeFileSync(checkpointPath, JSON.stringify(checkpoint, null, 2));
|
|
53
|
+
logger.info(`Living docs checkpoint saved: Phase ${checkpoint.currentPhase}`);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
logger.error(`Failed to save living docs checkpoint: ${error}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get next phase in sequence
|
|
61
|
+
*/
|
|
62
|
+
export function getNextPhase(currentPhase) {
|
|
63
|
+
const currentIndex = PHASE_ORDER.indexOf(currentPhase);
|
|
64
|
+
if (currentIndex === -1 || currentIndex >= PHASE_ORDER.length - 1) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return PHASE_ORDER[currentIndex + 1];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get phase name for display
|
|
71
|
+
*/
|
|
72
|
+
export function getPhaseName(phase) {
|
|
73
|
+
return PHASE_NAMES[phase] || phase;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Initialize checkpoint for new execution
|
|
77
|
+
*/
|
|
78
|
+
export function initializeCheckpoint() {
|
|
79
|
+
return {
|
|
80
|
+
currentPhase: 'A',
|
|
81
|
+
completedPhases: [],
|
|
82
|
+
phaseProgress: {},
|
|
83
|
+
startTime: new Date().toISOString(),
|
|
84
|
+
lastUpdate: new Date().toISOString(),
|
|
85
|
+
totalPhases: PHASE_ORDER.length,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Execute living docs in chunked mode for auto mode integration
|
|
90
|
+
*
|
|
91
|
+
* This breaks the living docs update into time-boxed chunks that can be
|
|
92
|
+
* controlled by the auto mode stop hook.
|
|
93
|
+
*/
|
|
94
|
+
export async function executeLivingDocsChunk(options) {
|
|
95
|
+
const startTime = Date.now();
|
|
96
|
+
const checkpoint = options.checkpoint || loadLivingDocsCheckpoint(options.projectPath) || initializeCheckpoint();
|
|
97
|
+
logger.info(`Starting living docs chunk: Phase ${checkpoint.currentPhase} (${getPhaseName(checkpoint.currentPhase)})`);
|
|
98
|
+
let currentPhase = checkpoint.currentPhase;
|
|
99
|
+
let phaseProgress = checkpoint.phaseProgress[currentPhase] || {};
|
|
100
|
+
// Time-boxed execution loop
|
|
101
|
+
while (Date.now() - startTime < options.maxDuration) {
|
|
102
|
+
// Execute current phase
|
|
103
|
+
// NOTE: This is a placeholder - actual implementation would call the real living docs builder
|
|
104
|
+
const phaseResult = await executePhase(currentPhase, phaseProgress, options.projectPath);
|
|
105
|
+
if (phaseResult.complete) {
|
|
106
|
+
// Phase completed
|
|
107
|
+
const updatedCheckpoint = {
|
|
108
|
+
...checkpoint,
|
|
109
|
+
completedPhases: [...checkpoint.completedPhases, currentPhase],
|
|
110
|
+
lastUpdate: new Date().toISOString(),
|
|
111
|
+
};
|
|
112
|
+
// Save checkpoint
|
|
113
|
+
saveLivingDocsCheckpoint(options.projectPath, updatedCheckpoint);
|
|
114
|
+
logger.info(`Phase ${currentPhase} (${getPhaseName(currentPhase)}) complete!`);
|
|
115
|
+
if (options.stopOnPhaseComplete) {
|
|
116
|
+
// Yield control back to auto mode
|
|
117
|
+
const nextPhase = getNextPhase(currentPhase);
|
|
118
|
+
if (!nextPhase) {
|
|
119
|
+
// All phases complete
|
|
120
|
+
return { status: 'all_complete' };
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
status: 'phase_complete',
|
|
124
|
+
currentPhase,
|
|
125
|
+
nextPhase,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// Move to next phase
|
|
129
|
+
currentPhase = getNextPhase(currentPhase);
|
|
130
|
+
if (!currentPhase) {
|
|
131
|
+
// All phases complete
|
|
132
|
+
return { status: 'all_complete' };
|
|
133
|
+
}
|
|
134
|
+
phaseProgress = {};
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// Phase still in progress
|
|
138
|
+
phaseProgress = phaseResult.progress;
|
|
139
|
+
// Update checkpoint with progress
|
|
140
|
+
const updatedCheckpoint = {
|
|
141
|
+
...checkpoint,
|
|
142
|
+
phaseProgress: {
|
|
143
|
+
...checkpoint.phaseProgress,
|
|
144
|
+
[currentPhase]: phaseProgress,
|
|
145
|
+
},
|
|
146
|
+
lastUpdate: new Date().toISOString(),
|
|
147
|
+
};
|
|
148
|
+
saveLivingDocsCheckpoint(options.projectPath, updatedCheckpoint);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Time limit reached
|
|
152
|
+
logger.info(`Living docs chunk time limit reached (${options.maxDuration}ms)`);
|
|
153
|
+
return {
|
|
154
|
+
status: 'time_limit',
|
|
155
|
+
currentPhase,
|
|
156
|
+
progress: phaseProgress,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Execute a single phase (or chunk of a phase)
|
|
161
|
+
*
|
|
162
|
+
* This is a placeholder that would integrate with the actual living docs builder.
|
|
163
|
+
* In real implementation, this would:
|
|
164
|
+
* 1. Load the living docs builder state
|
|
165
|
+
* 2. Execute the next batch of work for the current phase
|
|
166
|
+
* 3. Return progress information
|
|
167
|
+
*/
|
|
168
|
+
async function executePhase(phase, progress, projectPath) {
|
|
169
|
+
// PLACEHOLDER: Real implementation would call the actual living docs builder
|
|
170
|
+
// For now, we'll simulate phase execution
|
|
171
|
+
logger.info(`Executing phase ${phase} (${getPhaseName(phase)})`);
|
|
172
|
+
// This would be replaced with actual living docs builder logic:
|
|
173
|
+
// - Phase A: Discovery (scan file structure, detect repos)
|
|
174
|
+
// - Phase B: Deep Analysis (per-repo analysis)
|
|
175
|
+
// - Phase C: Org Synthesis (team structure inference)
|
|
176
|
+
// - Phase D: Architecture (ADR detection, system diagrams)
|
|
177
|
+
// - Phase E: Inconsistencies (broken links, spec-code gaps)
|
|
178
|
+
// - Phase F: Strategy (recommendations, tech debt)
|
|
179
|
+
// - Phase G: Enterprise (history, feature catalog, delivery docs)
|
|
180
|
+
// - Phase H: Diagrams (Mermaid visualizations)
|
|
181
|
+
// For MVP, we'll mark phase as complete immediately
|
|
182
|
+
// Real implementation would track partial progress and resume
|
|
183
|
+
return {
|
|
184
|
+
complete: true,
|
|
185
|
+
progress: {},
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Clean up checkpoint after completion
|
|
190
|
+
*/
|
|
191
|
+
export function cleanupCheckpoint(projectPath) {
|
|
192
|
+
const checkpointPath = path.join(projectPath, '.specweave/state/living-docs-checkpoint.json');
|
|
193
|
+
if (fs.existsSync(checkpointPath)) {
|
|
194
|
+
try {
|
|
195
|
+
fs.unlinkSync(checkpointPath);
|
|
196
|
+
logger.info('Living docs checkpoint cleaned up');
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
logger.warn(`Failed to cleanup checkpoint: ${error}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get current progress summary
|
|
205
|
+
*/
|
|
206
|
+
export function getProgressSummary(checkpoint) {
|
|
207
|
+
const completedCount = checkpoint.completedPhases.length;
|
|
208
|
+
const totalCount = checkpoint.totalPhases;
|
|
209
|
+
const percentage = Math.round((completedCount / totalCount) * 100);
|
|
210
|
+
const phaseList = PHASE_ORDER.map((phase) => {
|
|
211
|
+
const isComplete = checkpoint.completedPhases.includes(phase);
|
|
212
|
+
const isCurrent = phase === checkpoint.currentPhase;
|
|
213
|
+
const icon = isComplete ? 'β
' : isCurrent ? 'π' : 'β³';
|
|
214
|
+
return ` ${icon} Phase ${phase}: ${getPhaseName(phase)}`;
|
|
215
|
+
}).join('\n');
|
|
216
|
+
return `Living Docs Progress: ${completedCount}/${totalCount} phases (${percentage}%)
|
|
217
|
+
|
|
218
|
+
${phaseList}
|
|
219
|
+
|
|
220
|
+
Current: Phase ${checkpoint.currentPhase} (${getPhaseName(checkpoint.currentPhase)})
|
|
221
|
+
Started: ${checkpoint.startTime}
|
|
222
|
+
Last Update: ${checkpoint.lastUpdate}`;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=living-docs-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"living-docs-executor.js","sourceRoot":"","sources":["../../../../src/core/background/living-docs-executor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.67",
|
|
4
4
|
"description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -529,6 +529,77 @@ Continue with /sw:do to start the next increment."
|
|
|
529
529
|
fi
|
|
530
530
|
fi
|
|
531
531
|
|
|
532
|
+
# ============================================================================
|
|
533
|
+
# LIVING DOCS UPDATE CHECK
|
|
534
|
+
# ============================================================================
|
|
535
|
+
|
|
536
|
+
LIVING_DOCS_CHECKPOINT="$STATE_DIR/living-docs-checkpoint.json"
|
|
537
|
+
|
|
538
|
+
if [ -f "$LIVING_DOCS_CHECKPOINT" ]; then
|
|
539
|
+
CURRENT_PHASE=$(jq -r '.currentPhase // "unknown"' "$LIVING_DOCS_CHECKPOINT")
|
|
540
|
+
COMPLETED_PHASES=$(jq -r '.completedPhases | length' "$LIVING_DOCS_CHECKPOINT")
|
|
541
|
+
TOTAL_PHASES=$(jq -r '.totalPhases // 8' "$LIVING_DOCS_CHECKPOINT")
|
|
542
|
+
PHASE_NAMES=("A:Discovery" "B:Deep Analysis" "C:Org Synthesis" "D:Architecture" "E:Inconsistencies" "F:Strategy" "G:Enterprise" "H:Diagrams")
|
|
543
|
+
|
|
544
|
+
if [ "$COMPLETED_PHASES" -lt "$TOTAL_PHASES" ]; then
|
|
545
|
+
# Map phase letter to name
|
|
546
|
+
case "$CURRENT_PHASE" in
|
|
547
|
+
A) PHASE_NAME="Discovery" ;;
|
|
548
|
+
B) PHASE_NAME="Deep Analysis" ;;
|
|
549
|
+
C) PHASE_NAME="Org Synthesis" ;;
|
|
550
|
+
D) PHASE_NAME="Architecture" ;;
|
|
551
|
+
E) PHASE_NAME="Inconsistencies" ;;
|
|
552
|
+
F) PHASE_NAME="Strategy" ;;
|
|
553
|
+
G) PHASE_NAME="Enterprise" ;;
|
|
554
|
+
H) PHASE_NAME="Diagrams" ;;
|
|
555
|
+
*) PHASE_NAME="Unknown" ;;
|
|
556
|
+
esac
|
|
557
|
+
|
|
558
|
+
PROGRESS_PCT=$((COMPLETED_PHASES * 100 / TOTAL_PHASES))
|
|
559
|
+
|
|
560
|
+
# Build phase status list
|
|
561
|
+
PHASE_STATUS=""
|
|
562
|
+
for i in {0..7}; do
|
|
563
|
+
PHASE_LETTER=$(echo "${PHASE_NAMES[$i]}" | cut -d: -f1)
|
|
564
|
+
PHASE_LABEL=$(echo "${PHASE_NAMES[$i]}" | cut -d: -f2)
|
|
565
|
+
if [ $i -lt "$COMPLETED_PHASES" ]; then
|
|
566
|
+
PHASE_STATUS="${PHASE_STATUS} β
Phase $PHASE_LETTER: $PHASE_LABEL\n"
|
|
567
|
+
elif [ "$PHASE_LETTER" = "$CURRENT_PHASE" ]; then
|
|
568
|
+
PHASE_STATUS="${PHASE_STATUS} π Phase $PHASE_LETTER: $PHASE_LABEL (in progress)\n"
|
|
569
|
+
else
|
|
570
|
+
PHASE_STATUS="${PHASE_STATUS} β³ Phase $PHASE_LETTER: $PHASE_LABEL\n"
|
|
571
|
+
fi
|
|
572
|
+
done
|
|
573
|
+
|
|
574
|
+
# Log living docs progress
|
|
575
|
+
echo "{\"timestamp\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"event\":\"living_docs_progress\",\"phase\":\"$CURRENT_PHASE\",\"completed\":$COMPLETED_PHASES,\"total\":$TOTAL_PHASES}" >> "$LOGS_DIR/auto-iterations.log"
|
|
576
|
+
|
|
577
|
+
block "Living docs update in progress" "π LIVING DOCS UPDATE ($PROGRESS_PCT% complete)
|
|
578
|
+
|
|
579
|
+
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
580
|
+
Current Phase: $PHASE_NAME
|
|
581
|
+
Progress: $COMPLETED_PHASES/$TOTAL_PHASES phases complete
|
|
582
|
+
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
583
|
+
|
|
584
|
+
Phase Status:
|
|
585
|
+
$(echo -e "$PHASE_STATUS")
|
|
586
|
+
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
587
|
+
|
|
588
|
+
Continue with /sw:do to proceed with living docs update.
|
|
589
|
+
This will run for multiple iterations until all phases complete.
|
|
590
|
+
|
|
591
|
+
π‘ Living docs runs in chunked mode (2 hours/iteration) and saves
|
|
592
|
+
checkpoints after each phase. Safe to interrupt anytime!"
|
|
593
|
+
fi
|
|
594
|
+
|
|
595
|
+
# All phases complete - clean up and allow exit
|
|
596
|
+
if [ "$COMPLETED_PHASES" -eq "$TOTAL_PHASES" ]; then
|
|
597
|
+
rm -f "$LIVING_DOCS_CHECKPOINT"
|
|
598
|
+
echo "{\"timestamp\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"event\":\"living_docs_complete\",\"phases\":$TOTAL_PHASES}" >> "$LOGS_DIR/auto-iterations.log"
|
|
599
|
+
# Don't approve exit here - let normal task completion flow handle it
|
|
600
|
+
fi
|
|
601
|
+
fi
|
|
602
|
+
|
|
532
603
|
# Check for human gate pending
|
|
533
604
|
PENDING_GATE=$(echo "$SESSION" | jq -r '.humanGates.pending // null')
|
|
534
605
|
if [ "$PENDING_GATE" != "null" ]; then
|
|
@@ -70,12 +70,7 @@ try {
|
|
|
70
70
|
|
|
71
71
|
const jobs = state.jobs || [];
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
console.log('No background jobs found.');
|
|
75
|
-
process.exit(0);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// If specific job requested
|
|
73
|
+
// If specific job requested, check before general empty check
|
|
79
74
|
if (specificId) {
|
|
80
75
|
const job = jobs.find(j => j.id === specificId || j.id.startsWith(specificId));
|
|
81
76
|
if (!job) {
|
|
@@ -89,16 +84,24 @@ if (specificId) {
|
|
|
89
84
|
console.log(`Started: ${job.startedAt}`);
|
|
90
85
|
console.log(`Updated: ${job.updatedAt}`);
|
|
91
86
|
|
|
92
|
-
const p = job.progress;
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
87
|
+
const p = job.progress || {};
|
|
88
|
+
const current = p.current ?? 0;
|
|
89
|
+
const total = p.total ?? 0;
|
|
90
|
+
const pct = total > 0 ? Math.round((current / total) * 100) : 0;
|
|
91
|
+
console.log(`Progress: ${current}/${total} (${pct}%)`);
|
|
92
|
+
|
|
96
93
|
if (job.error) {
|
|
97
94
|
console.log(`Error: ${job.error}`);
|
|
98
95
|
}
|
|
99
96
|
process.exit(0);
|
|
100
97
|
}
|
|
101
98
|
|
|
99
|
+
// General empty check (only if no specific ID was requested)
|
|
100
|
+
if (jobs.length === 0) {
|
|
101
|
+
console.log('No background jobs found.');
|
|
102
|
+
process.exit(0);
|
|
103
|
+
}
|
|
104
|
+
|
|
102
105
|
// Group by status
|
|
103
106
|
const running = jobs.filter(j => j.status === 'running');
|
|
104
107
|
const paused = jobs.filter(j => j.status === 'paused');
|
|
@@ -111,12 +114,14 @@ console.log('\nπ Background Jobs\n');
|
|
|
111
114
|
if (running.length > 0) {
|
|
112
115
|
console.log(`π Running (${running.length}):`);
|
|
113
116
|
for (const job of running) {
|
|
114
|
-
const p = job.progress;
|
|
115
|
-
const
|
|
117
|
+
const p = job.progress || {};
|
|
118
|
+
const current = p.current ?? 0;
|
|
119
|
+
const total = p.total ?? 0;
|
|
120
|
+
const pct = total > 0 ? Math.round((current / total) * 100) : 0;
|
|
116
121
|
const elapsed = (Date.now() - new Date(job.startedAt).getTime()) / 1000;
|
|
117
|
-
const rate = elapsed > 0 ? (
|
|
122
|
+
const rate = elapsed > 0 ? (current / elapsed).toFixed(1) : '0';
|
|
118
123
|
console.log(` [${job.id.slice(0,8)}] ${job.type}`);
|
|
119
|
-
console.log(` Progress: ${
|
|
124
|
+
console.log(` Progress: ${current}/${total} (${pct}%) | Rate: ${rate}/s`);
|
|
120
125
|
}
|
|
121
126
|
console.log('');
|
|
122
127
|
}
|
|
@@ -125,8 +130,10 @@ if (running.length > 0) {
|
|
|
125
130
|
if (paused.length > 0) {
|
|
126
131
|
console.log(`βΈοΈ Paused (${paused.length}):`);
|
|
127
132
|
for (const job of paused) {
|
|
128
|
-
const p = job.progress;
|
|
129
|
-
const
|
|
133
|
+
const p = job.progress || {};
|
|
134
|
+
const current = p.current ?? 0;
|
|
135
|
+
const total = p.total ?? 0;
|
|
136
|
+
const pct = total > 0 ? Math.round((current / total) * 100) : 0;
|
|
130
137
|
console.log(` [${job.id.slice(0,8)}] ${job.type} - ${pct}%`);
|
|
131
138
|
}
|
|
132
139
|
console.log('');
|