specpilot 1.5.0 → 1.6.2

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.
Files changed (40) hide show
  1. package/README.md +45 -26
  2. package/dist/cli.js +23 -7
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/archive.d.ts +5 -0
  5. package/dist/commands/archive.d.ts.map +1 -0
  6. package/dist/commands/archive.js +52 -0
  7. package/dist/commands/archive.js.map +1 -0
  8. package/dist/commands/init.d.ts +1 -0
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js +48 -0
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/refine.d.ts +8 -0
  13. package/dist/commands/refine.d.ts.map +1 -0
  14. package/dist/commands/refine.js +286 -0
  15. package/dist/commands/refine.js.map +1 -0
  16. package/dist/utils/logger.d.ts.map +1 -1
  17. package/dist/utils/logger.js +24 -11
  18. package/dist/utils/logger.js.map +1 -1
  19. package/dist/utils/specArchiver.d.ts +20 -0
  20. package/dist/utils/specArchiver.d.ts.map +1 -0
  21. package/dist/utils/specArchiver.js +124 -0
  22. package/dist/utils/specArchiver.js.map +1 -0
  23. package/dist/utils/specFileGenerator.d.ts +2 -0
  24. package/dist/utils/specFileGenerator.d.ts.map +1 -1
  25. package/dist/utils/specFileGenerator.js +129 -1
  26. package/dist/utils/specFileGenerator.js.map +1 -1
  27. package/dist/utils/specGenerator.js +1 -1
  28. package/dist/utils/specGenerator.js.map +1 -1
  29. package/dist/utils/specTreePrinter.d.ts +8 -0
  30. package/dist/utils/specTreePrinter.d.ts.map +1 -0
  31. package/dist/utils/specTreePrinter.js +38 -0
  32. package/dist/utils/specTreePrinter.js.map +1 -0
  33. package/dist/utils/specValidator.d.ts +3 -0
  34. package/dist/utils/specValidator.d.ts.map +1 -1
  35. package/dist/utils/specValidator.js +81 -4
  36. package/dist/utils/specValidator.js.map +1 -1
  37. package/dist/utils/templateEngine.d.ts.map +1 -1
  38. package/dist/utils/templateEngine.js +8 -0
  39. package/dist/utils/templateEngine.js.map +1 -1
  40. package/package.json +3 -3
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.refineCommand = refineCommand;
7
+ const path_1 = require("path");
8
+ const fs_1 = require("fs");
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ const templateEngine_1 = require("../utils/templateEngine");
12
+ const specGenerator_1 = require("../utils/specGenerator");
13
+ const logger_1 = require("../utils/logger");
14
+ async function refineCommand(description, options) {
15
+ const logger = new logger_1.Logger();
16
+ try {
17
+ logger.info('📝 Refining project specifications...');
18
+ // Get description if not provided
19
+ let projectDescription = description;
20
+ if (!projectDescription && options.prompts) {
21
+ const response = await inquirer_1.default.prompt([{
22
+ type: 'input',
23
+ name: 'description',
24
+ message: 'Describe what you want to build:',
25
+ validate: (input) => input.length > 0 || 'Description is required'
26
+ }]);
27
+ projectDescription = response.description;
28
+ }
29
+ if (!projectDescription) {
30
+ logger.error('❌ No description provided. Use --help for usage information.');
31
+ process.exit(1);
32
+ }
33
+ // Find .specs directory
34
+ const specsDir = (0, path_1.join)(options.dir, options.specsName);
35
+ if (!(0, fs_1.existsSync)(specsDir)) {
36
+ logger.error(`❌ Specs directory not found: ${specsDir}`);
37
+ logger.info('💡 Run "specpilot init" first to create the project structure.');
38
+ process.exit(1);
39
+ }
40
+ // Read existing project.yaml to get current context
41
+ const projectYamlPath = (0, path_1.join)(specsDir, 'project', 'project.yaml');
42
+ if (!(0, fs_1.existsSync)(projectYamlPath)) {
43
+ logger.error('❌ project.yaml not found. Please ensure this is a valid SDD project.');
44
+ process.exit(1);
45
+ }
46
+ const projectYaml = (0, fs_1.readFileSync)(projectYamlPath, 'utf-8');
47
+ const projectName = extractProjectName(projectYaml);
48
+ const language = extractLanguage(projectYaml);
49
+ const framework = extractFramework(projectYaml);
50
+ logger.info(`🔍 Found project: ${projectName} (${language}${framework ? ` + ${framework}` : ''})`);
51
+ // ── Collect pending changes (without writing yet) ────────────
52
+ const pendingChanges = [];
53
+ const requirementsPath = (0, path_1.join)(specsDir, 'project', 'requirements.md');
54
+ if ((0, fs_1.existsSync)(requirementsPath)) {
55
+ const before = (0, fs_1.readFileSync)(requirementsPath, 'utf-8');
56
+ const after = updateRequirementsWithDescription(before, projectDescription, options.update);
57
+ if (after !== before) {
58
+ pendingChanges.push({ filePath: requirementsPath, label: 'requirements.md', before, after });
59
+ }
60
+ }
61
+ const contextPath = (0, path_1.join)(specsDir, 'development', 'context.md');
62
+ if ((0, fs_1.existsSync)(contextPath)) {
63
+ const before = (0, fs_1.readFileSync)(contextPath, 'utf-8');
64
+ const after = updateContextWithSpecification(before, projectDescription);
65
+ if (after !== before) {
66
+ pendingChanges.push({ filePath: contextPath, label: 'context.md', before, after });
67
+ }
68
+ }
69
+ const promptsPath = (0, path_1.join)(specsDir, 'development', 'prompts.md');
70
+ if ((0, fs_1.existsSync)(promptsPath)) {
71
+ const before = (0, fs_1.readFileSync)(promptsPath, 'utf-8');
72
+ const after = updatePromptsLog(before, projectDescription);
73
+ if (after !== before) {
74
+ pendingChanges.push({ filePath: promptsPath, label: 'prompts.md', before, after });
75
+ }
76
+ }
77
+ if (pendingChanges.length === 0) {
78
+ logger.info('ℹ️ No changes detected — spec files are already up to date.');
79
+ return;
80
+ }
81
+ // ── Show diff preview ────────────────────────────────────────
82
+ console.log('');
83
+ logger.info(chalk_1.default.blue.bold('📋 Proposed changes:'));
84
+ console.log('');
85
+ for (const change of pendingChanges) {
86
+ console.log(chalk_1.default.cyan(`── ${change.label} ──`));
87
+ printSimpleDiff(change.before, change.after);
88
+ console.log('');
89
+ }
90
+ // ── Ask for confirmation (unless --no-prompts) ───────────────
91
+ if (options.prompts) {
92
+ const { confirmed } = await inquirer_1.default.prompt([{
93
+ type: 'confirm',
94
+ name: 'confirmed',
95
+ message: `Apply changes to ${pendingChanges.length} file(s)?`,
96
+ default: true,
97
+ }]);
98
+ if (!confirmed) {
99
+ logger.info('❌ Aborted — no files were modified.');
100
+ return;
101
+ }
102
+ }
103
+ // ── Apply changes ────────────────────────────────────────────
104
+ for (const change of pendingChanges) {
105
+ (0, fs_1.writeFileSync)(change.filePath, change.after);
106
+ logger.success(`✅ Updated ${change.label}`);
107
+ }
108
+ // If update flag is set, regenerate specs with new context
109
+ if (options.update) {
110
+ logger.info('🔄 Regenerating specifications with updated context...');
111
+ const templateEngine = new templateEngine_1.TemplateEngine();
112
+ const specGenerator = new specGenerator_1.SpecGenerator(templateEngine);
113
+ await specGenerator.generateSpecs({
114
+ projectName: projectName || 'updated-project',
115
+ language: language || 'typescript',
116
+ framework: framework,
117
+ targetDir: options.dir,
118
+ specsName: options.specsName,
119
+ description: projectDescription
120
+ });
121
+ logger.success('✅ Regenerated specifications with new description');
122
+ }
123
+ logger.success(`🎯 Specifications refined successfully!`);
124
+ logger.info(`📁 Specs location: ${specsDir}`);
125
+ logger.info(`📋 Description: "${projectDescription}"`);
126
+ // Show next steps with logo
127
+ const nextStepsContent = [
128
+ chalk_1.default.blue.bold('Specifications Refined'),
129
+ '',
130
+ chalk_1.default.green('✅ Successfully refined project specifications'),
131
+ chalk_1.default.white(`📁 Location: ${specsDir}`),
132
+ chalk_1.default.white(`📋 Description: "${projectDescription}"`),
133
+ '',
134
+ chalk_1.default.cyan('📖 Next steps:'),
135
+ chalk_1.default.white(` # Review updated specifications in ${options.specsName}/`),
136
+ chalk_1.default.white(' specpilot validate # Validate your specifications'),
137
+ chalk_1.default.white(' # Continue development based on the updated requirements')
138
+ ];
139
+ logger.displayWithLogo(nextStepsContent);
140
+ }
141
+ catch (error) {
142
+ logger.error(`❌ Failed to refine specifications: ${error instanceof Error ? error.message : 'Unknown error'}`);
143
+ process.exit(1);
144
+ }
145
+ }
146
+ function extractProjectName(yamlContent) {
147
+ const match = yamlContent.match(/name:\s*(.+)/);
148
+ return match ? match[1].trim() : undefined;
149
+ }
150
+ function extractLanguage(yamlContent) {
151
+ const match = yamlContent.match(/language:\s*(.+)/);
152
+ return match ? match[1].trim() : undefined;
153
+ }
154
+ function extractFramework(yamlContent) {
155
+ const match = yamlContent.match(/framework:\s*(.+)/);
156
+ return match ? match[1].trim() : undefined;
157
+ }
158
+ function updateRequirementsWithDescription(currentContent, description, replace = false) {
159
+ const descriptionSection = `## Project Overview
160
+ ${description}
161
+
162
+ ## Functional Requirements
163
+ `;
164
+ if (replace || !currentContent.includes('## Project Overview')) {
165
+ // Replace or add the project overview section
166
+ const lines = currentContent.split('\n');
167
+ const overviewIndex = lines.findIndex(line => line.includes('## Project Overview'));
168
+ if (overviewIndex !== -1) {
169
+ // Find the end of the overview section
170
+ let endIndex = overviewIndex + 1;
171
+ while (endIndex < lines.length && !lines[endIndex].startsWith('## ')) {
172
+ endIndex++;
173
+ }
174
+ // Replace the overview section
175
+ lines.splice(overviewIndex, endIndex - overviewIndex, ...descriptionSection.split('\n'));
176
+ }
177
+ else {
178
+ // Add after title
179
+ const titleIndex = lines.findIndex(line => line.startsWith('# '));
180
+ if (titleIndex !== -1) {
181
+ lines.splice(titleIndex + 1, 0, '', descriptionSection);
182
+ }
183
+ }
184
+ return lines.join('\n');
185
+ }
186
+ else {
187
+ // Append to existing overview
188
+ return currentContent.replace(/(## Project Overview[\s\S]*?)(\n## |\n*$)/, `$1\n\n### Additional Context\n${description}$2`);
189
+ }
190
+ }
191
+ function updateContextWithSpecification(currentContent, description) {
192
+ const specEntry = `### Latest Specification Update
193
+ **Date**: ${new Date().toISOString().split('T')[0]}
194
+ **Description**: ${description}
195
+ **Source**: specpilot refine command
196
+
197
+ `;
198
+ // Add to the Project Memory section
199
+ if (currentContent.includes('## Project Memory')) {
200
+ return currentContent.replace(/(## Project Memory[\s\S]*?)(\n## |\n*$)/, `$1\n${specEntry}$2`);
201
+ }
202
+ else {
203
+ // Add new section
204
+ return currentContent + '\n\n## Project Memory\n' + specEntry;
205
+ }
206
+ }
207
+ function updatePromptsLog(currentContent, description) {
208
+ const promptEntry = `### Specification Update (${new Date().toISOString().split('T')[0]})
209
+
210
+ #### Prompt: Project Specification
211
+ **Prompt**: "${description}"
212
+
213
+ **Context**: User provided specification description via specpilot refine command
214
+
215
+ **Response**:
216
+ - Updated requirements.md with project description
217
+ - Updated context.md with specification details
218
+ - Logged interaction in prompts.md
219
+
220
+ **Files Modified**: requirements.md, context.md, prompts.md
221
+
222
+ **Next Actions**: Review and validate updated specifications
223
+
224
+ ---
225
+
226
+ `;
227
+ // Add to the Latest Entries section
228
+ if (currentContent.includes('## Latest Entries')) {
229
+ return currentContent.replace(/(## Latest Entries[\s\S]*?)(\n## |\n*$)/, `$1\n${promptEntry}$2`);
230
+ }
231
+ else {
232
+ // Add after Overview
233
+ return currentContent.replace(/(## Overview[\s\S]*?)(\n## |\n*$)/, `$1\n\n## Latest Entries\n${promptEntry}$2`);
234
+ }
235
+ }
236
+ /**
237
+ * Print a simple line-level diff between two strings.
238
+ * Added lines are green with "+", removed lines are red with "−".
239
+ * Only changed regions (with 2 lines of context) are shown.
240
+ */
241
+ function printSimpleDiff(before, after) {
242
+ const oldLines = before.split('\n');
243
+ const newLines = after.split('\n');
244
+ const maxLen = Math.max(oldLines.length, newLines.length);
245
+ const CONTEXT = 2;
246
+ // Find which line indices have changes
247
+ const changedIndices = new Set();
248
+ for (let i = 0; i < maxLen; i++) {
249
+ if (oldLines[i] !== newLines[i]) {
250
+ changedIndices.add(i);
251
+ }
252
+ }
253
+ if (changedIndices.size === 0)
254
+ return;
255
+ // Expand to include context lines
256
+ const visibleIndices = new Set();
257
+ for (const idx of changedIndices) {
258
+ for (let c = idx - CONTEXT; c <= idx + CONTEXT; c++) {
259
+ if (c >= 0 && c < maxLen)
260
+ visibleIndices.add(c);
261
+ }
262
+ }
263
+ const sortedIndices = [...visibleIndices].sort((a, b) => a - b);
264
+ let lastPrinted = -2;
265
+ for (const i of sortedIndices) {
266
+ if (i > lastPrinted + 1) {
267
+ console.log(chalk_1.default.gray(' ...'));
268
+ }
269
+ lastPrinted = i;
270
+ const ol = oldLines[i];
271
+ const nl = newLines[i];
272
+ if (ol === nl) {
273
+ // Context line — unchanged
274
+ console.log(chalk_1.default.gray(` ${ol ?? ''}`));
275
+ }
276
+ else {
277
+ if (ol !== undefined) {
278
+ console.log(chalk_1.default.red(`- ${ol}`));
279
+ }
280
+ if (nl !== undefined) {
281
+ console.log(chalk_1.default.green(`+ ${nl}`));
282
+ }
283
+ }
284
+ }
285
+ }
286
+ //# sourceMappingURL=refine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refine.js","sourceRoot":"","sources":["../../src/commands/refine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAIA,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAMnB;IAEF,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO5B,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAYxC,cAAc,IAAI,IAAI;IAqBtB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAoCtL,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAsCxJ,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAuBnF,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,GAAE,OAAc,GAAG,IAAI;IAgBnF,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CASlD"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAMA,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAOnB;IAIF,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO5B,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAYxC,cAAc,IAAI,IAAI;IA4BtB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAoCtL,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAsCxJ,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IA0BnF,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,GAAE,OAAc,GAAG,IAAI;IAgBnF,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CASlD"}
@@ -5,16 +5,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Logger = void 0;
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
+ const path_1 = require("path");
9
+ const specTreePrinter_1 = require("./specTreePrinter");
8
10
  // eslint-disable-next-line @typescript-eslint/no-var-requires
9
11
  const pkg = require('../../package.json');
10
12
  class Logger {
11
13
  constructor() {
12
14
  this.logo = [
13
- '███████ ██████  ███████  ██████ ██████  ██ ██  ██████  ████████ ',
14
- '██      ██   ██ ██      ██      ██   ██ ██ ██  ██    ██    ██    ',
15
- '███████ ██████  █████  ██  ██████  ██ ██  ██  ██  ██  ',
16
- '     ██ ██      ██     ██  ██      ██ ██  ██  ██  ██  ',
17
- '███████ ██  ███████  ██████ ██  ██ ███████  ██████   ██  ',
15
+ '███████╗██████╗ ███████╗ ██████╗██████╗ ██╗██╗ ██████╗ ████████╗',
16
+ '██╔════╝██╔══██╗██╔════╝██╔════╝██╔══██╗██║██║ ██╔═══██╗╚══██╔══╝',
17
+ '███████╗██████╔╝█████╗ ██║ ██████╔╝██║██║ ██║ ██║ ██║',
18
+ '╚════██║██╔═══╝ ██╔══╝ ██║ ██╔═══╝ ██║██║ ██║ ██║ ██║',
19
+ '███████║██║ ███████╗╚██████╗██║ ██║███████╗╚██████╔╝ ██║',
20
+ '╚══════╝╚═╝ ╚══════╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝',
18
21
  ];
19
22
  }
20
23
  info(message) {
@@ -37,7 +40,7 @@ class Logger {
37
40
  // Display with logo on top and content below
38
41
  displayWithLogo(content) {
39
42
  // First print the logo
40
- console.log(chalk_1.default.blue(this.logo.join('\n')));
43
+ console.log(chalk_1.default.blueBright(this.logo.join('\n')));
41
44
  // Then print a separator line
42
45
  console.log('');
43
46
  // Then print the content
@@ -51,12 +54,19 @@ class Logger {
51
54
  chalk_1.default.green('✓ Welcome to Specification-Driven Development'),
52
55
  '',
53
56
  chalk_1.default.cyan('Available Commands:'),
54
- chalk_1.default.white(' • init - Initialize new SDD project'),
55
- chalk_1.default.white(' • validate - Validate project specifications'),
56
- chalk_1.default.white(' • add-specs- Add specs to existing project'),
57
- chalk_1.default.white(' • list - Show available templates'),
57
+ chalk_1.default.white(' • init|i [options] <name> - Initialize new SDD project'),
58
+ chalk_1.default.white(' • init --dry-run - Preview files that would be created without writing'),
59
+ chalk_1.default.white(' • add-specs|add [options] - Add specs to existing project'),
60
+ chalk_1.default.white(' • validate|v [options] - Validate specification files'),
61
+ chalk_1.default.white(' • archive|ar [options] - Archive oversized prompts.md / tasks.md entries'),
62
+ chalk_1.default.white(' • list|ls [options] - Show available templates'),
63
+ chalk_1.default.white(' • migrate|m [options] - Migrate between spec versions'),
64
+ chalk_1.default.white(' • refine|ref [options] [desc]- Refine project specifications from natural language description'),
58
65
  '',
59
- chalk_1.default.yellow('⚠️ Tip: Use --help for detailed command options'),
66
+ chalk_1.default.cyan('Aliases:'),
67
+ chalk_1.default.white(' init→i validate→v migrate→m list→ls refine→ref archive→ar add-specs→add'),
68
+ '',
69
+ chalk_1.default.yellow('⚠️ Tip: Use --help for detailed command options, e.g. specpilot init --help'),
60
70
  '',
61
71
  chalk_1.default.gray('Ready for your next project! 🚀')
62
72
  ];
@@ -137,6 +147,9 @@ class Logger {
137
147
  chalk_1.default.white(`📁 Location: ${targetDir}`),
138
148
  chalk_1.default.white(`📋 Specs: ${specsPath}`),
139
149
  '',
150
+ chalk_1.default.cyan.bold('Generated specs:'),
151
+ ...(0, specTreePrinter_1.getSpecTreeLines)((0, path_1.basename)(specsPath)),
152
+ '',
140
153
  chalk_1.default.cyan('🚀 Next steps to populate your specs with AI:'),
141
154
  chalk_1.default.white('1. Open .specs/README.md for full guidance'),
142
155
  chalk_1.default.white('2. Copy the onboarding prompt from .specs/development/prompts.md'),
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface ArchiveEntry {
2
+ file: string;
3
+ archiveFile: string;
4
+ linesMoved: number;
5
+ }
6
+ export interface ArchiveResult {
7
+ entries: ArchiveEntry[];
8
+ dryRun: boolean;
9
+ }
10
+ export declare class SpecArchiver {
11
+ private findSpecsDir;
12
+ archive(projectDir: string, options: {
13
+ dryRun: boolean;
14
+ }): Promise<ArchiveResult>;
15
+ private buildTimestampedBlock;
16
+ private extractFrontMatter;
17
+ private archivePrompts;
18
+ private archiveTasks;
19
+ }
20
+ //# sourceMappingURL=specArchiver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specArchiver.d.ts","sourceRoot":"","sources":["../../src/utils/specArchiver.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;CACjB;AAaD,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY;IAQd,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAiBvF,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,YAAY;CA2CrB"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SpecArchiver = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const SPECS_DIR_CANDIDATES = ['.specs', '.project-spec', 'specs', 'specifications'];
7
+ /** Trim prompts.md to this many total lines after archiving. */
8
+ const PROMPTS_LINE_LIMIT = 300;
9
+ const PROMPTS_KEEP_LINES = 250;
10
+ /** Archive tasks.md Completed section when it exceeds this many lines. */
11
+ const COMPLETED_LINE_LIMIT = 150;
12
+ /** How many Completed entries to retain in the active file. */
13
+ const COMPLETED_KEEP_ENTRIES = 100;
14
+ class SpecArchiver {
15
+ findSpecsDir(projectDir) {
16
+ for (const name of SPECS_DIR_CANDIDATES) {
17
+ const p = (0, path_1.join)(projectDir, name);
18
+ if ((0, fs_1.existsSync)(p))
19
+ return p;
20
+ }
21
+ return null;
22
+ }
23
+ async archive(projectDir, options) {
24
+ const specsDir = this.findSpecsDir(projectDir);
25
+ if (!specsDir) {
26
+ throw new Error('No .specs directory found. Run `specpilot init` first.');
27
+ }
28
+ const result = { entries: [], dryRun: options.dryRun };
29
+ const promptsEntry = this.archivePrompts(specsDir, options.dryRun);
30
+ if (promptsEntry)
31
+ result.entries.push(promptsEntry);
32
+ const tasksEntry = this.archiveTasks(specsDir, options.dryRun);
33
+ if (tasksEntry)
34
+ result.entries.push(tasksEntry);
35
+ return result;
36
+ }
37
+ buildTimestampedBlock(content) {
38
+ const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
39
+ return `## Archived on ${now}\n\n${content.trimEnd()}\n\n---\n\n`;
40
+ }
41
+ extractFrontMatter(lines) {
42
+ if (lines[0]?.trim() !== '---') {
43
+ return { preamble: [], body: lines };
44
+ }
45
+ const closeIdx = lines.findIndex((l, i) => i > 0 && l.trim() === '---');
46
+ if (closeIdx === -1) {
47
+ return { preamble: [], body: lines };
48
+ }
49
+ return {
50
+ preamble: lines.slice(0, closeIdx + 1),
51
+ body: lines.slice(closeIdx + 1),
52
+ };
53
+ }
54
+ archivePrompts(specsDir, dryRun) {
55
+ const filePath = (0, path_1.join)(specsDir, 'development', 'prompts.md');
56
+ if (!(0, fs_1.existsSync)(filePath))
57
+ return null;
58
+ const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
59
+ const allLines = content.split('\n');
60
+ if (allLines.length <= PROMPTS_LINE_LIMIT)
61
+ return null;
62
+ const { preamble, body } = this.extractFrontMatter(allLines);
63
+ // Determine how many body lines to retain so total stays near PROMPTS_KEEP_LINES
64
+ const keepBodyCount = Math.max(50, PROMPTS_KEEP_LINES - preamble.length);
65
+ if (body.length <= keepBodyCount)
66
+ return null;
67
+ const archiveLines = body.slice(0, body.length - keepBodyCount);
68
+ const keepLines = body.slice(body.length - keepBodyCount);
69
+ const linesMoved = archiveLines.length;
70
+ const archivePath = (0, path_1.join)(specsDir, 'development', 'prompts-archive.md');
71
+ const block = this.buildTimestampedBlock(archiveLines.join('\n'));
72
+ if (!dryRun) {
73
+ const existing = (0, fs_1.existsSync)(archivePath) ? (0, fs_1.readFileSync)(archivePath, 'utf-8') : '';
74
+ (0, fs_1.writeFileSync)(archivePath, existing + block);
75
+ (0, fs_1.writeFileSync)(filePath, [...preamble, ...keepLines].join('\n'));
76
+ }
77
+ return {
78
+ file: 'development/prompts.md',
79
+ archiveFile: 'development/prompts-archive.md',
80
+ linesMoved,
81
+ };
82
+ }
83
+ archiveTasks(specsDir, dryRun) {
84
+ const filePath = (0, path_1.join)(specsDir, 'planning', 'tasks.md');
85
+ if (!(0, fs_1.existsSync)(filePath))
86
+ return null;
87
+ const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
88
+ const allLines = content.split('\n');
89
+ const completedIdx = allLines.findIndex(l => l.trim() === '## Completed');
90
+ if (completedIdx === -1)
91
+ return null;
92
+ // Section size consistent with specValidator's check
93
+ const sectionSize = allLines.length - completedIdx;
94
+ if (sectionSize <= COMPLETED_LINE_LIMIT)
95
+ return null;
96
+ // Skip past the ## Completed heading and any notes/blank lines to find numbered entries
97
+ let entryStartIdx = completedIdx + 1;
98
+ while (entryStartIdx < allLines.length && !/^\d+\./.test(allLines[entryStartIdx])) {
99
+ entryStartIdx++;
100
+ }
101
+ if (entryStartIdx >= allLines.length)
102
+ return null;
103
+ const entryLines = allLines.slice(entryStartIdx);
104
+ if (entryLines.length <= COMPLETED_KEEP_ENTRIES)
105
+ return null;
106
+ const archiveEntries = entryLines.slice(0, entryLines.length - COMPLETED_KEEP_ENTRIES);
107
+ const keepEntries = entryLines.slice(entryLines.length - COMPLETED_KEEP_ENTRIES);
108
+ const linesMoved = archiveEntries.length;
109
+ const archivePath = (0, path_1.join)(specsDir, 'planning', 'tasks-archive.md');
110
+ const block = this.buildTimestampedBlock(archiveEntries.join('\n'));
111
+ if (!dryRun) {
112
+ const existing = (0, fs_1.existsSync)(archivePath) ? (0, fs_1.readFileSync)(archivePath, 'utf-8') : '';
113
+ (0, fs_1.writeFileSync)(archivePath, existing + block);
114
+ (0, fs_1.writeFileSync)(filePath, [...allLines.slice(0, entryStartIdx), ...keepEntries].join('\n'));
115
+ }
116
+ return {
117
+ file: 'planning/tasks.md',
118
+ archiveFile: 'planning/tasks-archive.md',
119
+ linesMoved,
120
+ };
121
+ }
122
+ }
123
+ exports.SpecArchiver = SpecArchiver;
124
+ //# sourceMappingURL=specArchiver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specArchiver.js","sourceRoot":"","sources":["../../src/utils/specArchiver.ts"],"names":[],"mappings":"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"}
@@ -21,5 +21,7 @@ export declare class SpecFileGenerator {
21
21
  private generateContextMd;
22
22
  private generatePromptsMd;
23
23
  private generateTestsMd;
24
+ private generateThreatModelMd;
25
+ private generateSecurityDecisionsMd;
24
26
  }
25
27
  //# sourceMappingURL=specFileGenerator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"specFileGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/specFileGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnE;;;GAGG;AACH,qBAAa,iBAAiB;IAChB,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,cAAc;IAIlD,OAAO,CAAC,kBAAkB,CAwCqE;IAE/F,OAAO,CAAC,uBAAuB,CAuCgE;IAE/F,oEAAoE;IAC9D,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAc9D,gBAAgB;YAMhB,mBAAmB;YAUnB,sBAAsB;YAUtB,sBAAsB;YA8BtB,eAAe;YAmEf,eAAe;YAkDf,iBAAiB;YAmEjB,cAAc;YA6Ed,iBAAiB;YA2BjB,iBAAiB;YAoOjB,eAAe;CA0B9B"}
1
+ {"version":3,"file":"specFileGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/specFileGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnE;;;GAGG;AACH,qBAAa,iBAAiB;IAChB,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,cAAc;IAIlD,OAAO,CAAC,kBAAkB,CAwCqE;IAE/F,OAAO,CAAC,uBAAuB,CAuCgE;IAE/F,oEAAoE;IAC9D,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAkB9D,gBAAgB;YAMhB,mBAAmB;YAUnB,sBAAsB;YAUtB,sBAAsB;YAsCtB,eAAe;YAmEf,eAAe;YAkDf,iBAAiB;YAmEjB,cAAc;YA6Ed,iBAAiB;YA2BjB,iBAAiB;YAgPjB,eAAe;YA0Bf,qBAAqB;YA2DrB,2BAA2B;CAiD1C"}