specpilot 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -128,7 +128,7 @@ npm install -g specpilot
128
128
 
129
129
  ```bash
130
130
  specpilot --version
131
- # Should output: 1.1.1 (or current version)
131
+ # Should output: 1.1.2 (or current version)
132
132
 
133
133
  specpilot --help
134
134
  # Shows available commands
@@ -158,6 +158,12 @@ specpilot init my-project --no-prompts
158
158
  ### Additional Commands
159
159
 
160
160
  ```bash
161
+ # Add .specs folder to an existing project
162
+ specpilot add-specs
163
+ specpilot add-specs --lang typescript --framework react
164
+ specpilot add-specs --no-analysis # Skip codebase analysis
165
+ specpilot add-specs --no-prompts # Non-interactive mode
166
+
161
167
  # Validate project specs
162
168
  specpilot validate --verbose
163
169
  specpilot validate --fix
@@ -165,13 +171,22 @@ specpilot validate --fix
165
171
  # List available templates
166
172
  specpilot list
167
173
 
168
- # Migrate legacy structures (when applicable)
174
+ # Migrate legacy structures (only if you have old .project-spec folder)
175
+ # Note: Only use this if you're upgrading from an older SpecPilot version
169
176
  specpilot migrate --from complex --to simple --backup
170
177
 
171
178
  # Generate or update specs from a natural language description
172
179
  specpilot specify "A simple REST API for todos" --update
173
180
  ```
174
181
 
182
+ #### When to Use Which Command
183
+
184
+ - **`specpilot init <name>`** - Starting a brand new project from scratch
185
+ - **`specpilot add-specs`** - Adding specifications to an existing codebase
186
+ - **`specpilot migrate`** - Upgrading from old .project-spec structure (legacy)
187
+ - **`specpilot validate`** - Checking your specs for errors
188
+ - **`specpilot specify`** - Generating specs from natural language description
189
+
175
190
  > Tip: Run `specpilot --help` or `specpilot <command> --help` for full options.
176
191
 
177
192
  ## Configuration
@@ -256,10 +271,13 @@ ai-context:
256
271
 
257
272
  - **Flexible Structure**: Generates `.specs` with customizable, production-ready layout
258
273
  - **Language Support**: Templates for TypeScript and Python
274
+ - **Existing Project Support**: Add `.specs` to existing projects with `add-specs` command
275
+ - **Intelligent Analysis**: Auto-detect language/framework, scan TODOs/FIXMEs, analyze tests
259
276
  - **Spec Validation**: Built-in validation with optional auto-fix
260
277
  - **AI Integration**: Dedicated prompts tracking for development cycles
261
278
  - **Migration Support**: Helps transition older structures
262
279
  - **Template Listing**: Discover available language/framework combinations
280
+ - **Developer Attribution**: Prompts for developer name and personalizes generated specs
263
281
 
264
282
  ## Project Structure
265
283
 
@@ -311,14 +329,34 @@ specpilot validate --fix
311
329
 
312
330
  #### Migration Issues
313
331
 
332
+ **Error: "Source structure 'complex' not found"**
333
+
334
+ This means you're trying to migrate from a structure that doesn't exist in your project.
335
+
314
336
  ```bash
315
- # Show CLI version
316
- specpilot --version
337
+ # Check what's in your project directory
338
+ ls -la
317
339
 
318
- # Migrate legacy structure
340
+ # For NEW projects, use:
341
+ specpilot init my-project
342
+
343
+ # For EXISTING projects without specs:
344
+ specpilot add-specs
345
+
346
+ # Only use migrate if you have an old .project-spec folder:
319
347
  specpilot migrate --from complex --to simple --backup
320
348
  ```
321
349
 
350
+ **When to use migrate:**
351
+ - You have an old `.project-spec` folder from a previous SpecPilot version
352
+ - You're upgrading between SpecPilot structure versions
353
+ - You need to convert between specification formats
354
+
355
+ **When NOT to use migrate:**
356
+ - Starting a new project (use `init` instead)
357
+ - Adding specs to existing code (use `add-specs` instead)
358
+ - Your project has no specification folder yet
359
+
322
360
  ### Debug Mode
323
361
 
324
362
  ```bash
package/dist/cli.js CHANGED
@@ -7,6 +7,7 @@ const validate_1 = require("./commands/validate");
7
7
  const migrate_1 = require("./commands/migrate");
8
8
  const list_1 = require("./commands/list");
9
9
  const specify_1 = require("./commands/specify");
10
+ const add_specs_1 = require("./commands/add-specs");
10
11
  const packageJson = require('../package.json');
11
12
  commander_1.program
12
13
  .name('specpilot')
@@ -62,6 +63,17 @@ commander_1.program
62
63
  .option('--no-prompts', 'Skip interactive prompts')
63
64
  .option('-u, --update', 'Regenerate specs with new description')
64
65
  .action(specify_1.specifyCommand);
66
+ // Add-specs command
67
+ commander_1.program
68
+ .command('add-specs')
69
+ .alias('add')
70
+ .description('Add .specs folder to an existing project')
71
+ .option('-l, --lang <language>', 'Programming language (typescript, python)')
72
+ .option('-f, --framework <framework>', 'Framework (react, express, django, etc.)')
73
+ .option('--no-analysis', 'Skip codebase analysis')
74
+ .option('--deep-analysis', 'Perform thorough codebase analysis')
75
+ .option('--no-prompts', 'Skip interactive prompts')
76
+ .action(add_specs_1.addSpecsCommand);
65
77
  // Parse command line arguments
66
78
  commander_1.program.parse();
67
79
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,kDAAsD;AACtD,gDAAoD;AACpD,0CAA8C;AAC9C,gDAAoD;AAEpD,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,mBAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,qEAAqE,CAAC;KAClF,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,qBAAqB;AACrB,mBAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,GAAG,CAAC;KACV,WAAW,CAAC,8BAA8B,CAAC;KAC3C,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;KAC7C,MAAM,CAAC,uBAAuB,EAAE,2CAA2C,EAAE,YAAY,CAAC;KAC1F,MAAM,CAAC,6BAA6B,EAAE,kDAAkD,CAAC;KACzF,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,GAAG,CAAC;KACxD,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,QAAQ,CAAC;KAChE,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC;KAClD,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,mBAAmB;AACnB,mBAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,KAAK,CAAC,GAAG,CAAC;KACV,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,uBAAuB,EAAE,mBAAmB,EAAE,GAAG,CAAC;KACzD,MAAM,CAAC,OAAO,EAAE,wBAAwB,CAAC;KACzC,MAAM,CAAC,WAAW,EAAE,kCAAkC,CAAC;KACvD,MAAM,CAAC,0BAAe,CAAC,CAAC;AAE3B,kBAAkB;AAClB,mBAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,KAAK,CAAC,GAAG,CAAC;KACV,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,uBAAuB,EAAE,mBAAmB,EAAE,GAAG,CAAC;KACzD,MAAM,CAAC,oBAAoB,EAAE,0CAA0C,EAAE,SAAS,CAAC;KACnF,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,EAAE,QAAQ,CAAC;KACjE,MAAM,CAAC,UAAU,EAAE,gCAAgC,CAAC;KACpD,MAAM,CAAC,wBAAc,CAAC,CAAC;AAE1B,yBAAyB;AACzB,mBAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;KACjD,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;KAC5C,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,kBAAkB;AAClB,mBAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,KAAK,CAAC,MAAM,CAAC;KACb,WAAW,CAAC,gEAAgE,CAAC;KAC7E,QAAQ,CAAC,eAAe,EAAE,+CAA+C,CAAC;KAC1E,MAAM,CAAC,uBAAuB,EAAE,mBAAmB,EAAE,GAAG,CAAC;KACzD,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,QAAQ,CAAC;KAChE,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC;KAClD,MAAM,CAAC,cAAc,EAAE,uCAAuC,CAAC;KAC/D,MAAM,CAAC,wBAAc,CAAC,CAAC;AAE1B,+BAA+B;AAC/B,mBAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface AddSpecsOptions {
2
+ lang?: string;
3
+ framework?: string;
4
+ noAnalysis: boolean;
5
+ deepAnalysis: boolean;
6
+ prompts: boolean;
7
+ }
8
+ export declare function addSpecsCommand(options: AddSpecsOptions): Promise<void>;
9
+ //# sourceMappingURL=add-specs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-specs.d.ts","sourceRoot":"","sources":["../../src/commands/add-specs.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,iBAuH7D"}
@@ -0,0 +1,124 @@
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.addSpecsCommand = addSpecsCommand;
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 projectDetector_1 = require("../utils/projectDetector");
12
+ const codeAnalyzer_1 = require("../utils/codeAnalyzer");
13
+ const templateEngine_1 = require("../utils/templateEngine");
14
+ const specGenerator_1 = require("../utils/specGenerator");
15
+ const logger_1 = require("../utils/logger");
16
+ async function addSpecsCommand(options) {
17
+ const logger = new logger_1.Logger();
18
+ try {
19
+ logger.info('šŸ” Analyzing existing project...');
20
+ const projectDir = process.cwd();
21
+ const specsDir = (0, path_1.join)(projectDir, '.specs');
22
+ // Check if .specs already exists
23
+ if ((0, fs_1.existsSync)(specsDir)) {
24
+ logger.error('āŒ .specs folder already exists in this directory');
25
+ logger.info('šŸ’” Use `specpilot validate` to check existing specs');
26
+ process.exit(1);
27
+ }
28
+ // Detect project information
29
+ const detector = new projectDetector_1.ProjectDetector();
30
+ let projectInfo = await detector.detectProject(projectDir);
31
+ if (!projectInfo && !options.lang) {
32
+ logger.error('āŒ Could not auto-detect project type');
33
+ logger.info('šŸ’” Please specify language: --lang typescript or --lang python');
34
+ process.exit(1);
35
+ }
36
+ // Use provided options or detected values
37
+ const language = options.lang || projectInfo?.language || 'typescript';
38
+ let framework = options.framework || projectInfo?.framework;
39
+ // Validate language
40
+ const supportedLanguages = ['typescript', 'javascript', 'python'];
41
+ if (!supportedLanguages.includes(language)) {
42
+ logger.error(`āŒ Language "${language}" is not supported`);
43
+ logger.info(`šŸ’” Supported languages: ${supportedLanguages.join(', ')}`);
44
+ process.exit(1);
45
+ }
46
+ // Prompt for missing information
47
+ if (!framework && options.prompts) {
48
+ const frameworks = getFrameworksForLanguage(language);
49
+ if (frameworks.length > 0) {
50
+ const response = await inquirer_1.default.prompt([{
51
+ type: 'list',
52
+ name: 'framework',
53
+ message: 'Choose a framework:',
54
+ choices: ['none', ...frameworks]
55
+ }]);
56
+ framework = response.framework === 'none' ? undefined : response.framework;
57
+ }
58
+ }
59
+ // Get developer name
60
+ let developerName = projectInfo?.author || 'Your Name';
61
+ if (options.prompts) {
62
+ const nameResponse = await inquirer_1.default.prompt([{
63
+ type: 'input',
64
+ name: 'developerName',
65
+ message: 'Enter your name (for spec file attribution):',
66
+ default: developerName
67
+ }]);
68
+ developerName = nameResponse.developerName.trim() || developerName;
69
+ }
70
+ // Analyze codebase if requested
71
+ let analysis = null;
72
+ if (!options.noAnalysis) {
73
+ logger.info('šŸ“Š Analyzing codebase...');
74
+ const analyzer = new codeAnalyzer_1.CodeAnalyzer();
75
+ analysis = await analyzer.analyzeCodebase(projectDir);
76
+ // Show analysis summary
77
+ if (projectInfo) {
78
+ logger.info(chalk_1.default.green(`āœ… Detected ${projectInfo.language}${projectInfo.framework ? `/${projectInfo.framework}` : ''} project`));
79
+ }
80
+ if (analysis.todos.length > 0) {
81
+ logger.info(chalk_1.default.yellow(`šŸ“ Found ${analysis.todos.length} TODOs/FIXMEs`));
82
+ }
83
+ if (analysis.tests.testCount > 0) {
84
+ logger.info(chalk_1.default.cyan(`🧪 Detected ${analysis.tests.framework || 'unknown'} testing framework with ${analysis.tests.testCount} tests`));
85
+ }
86
+ if (analysis.architecture.components.length > 0) {
87
+ logger.info(chalk_1.default.blue(`šŸ—ļø Extracted ${analysis.architecture.components.length} components`));
88
+ }
89
+ }
90
+ // Initialize template engine and spec generator
91
+ const templateEngine = new templateEngine_1.TemplateEngine();
92
+ const specGenerator = new specGenerator_1.SpecGenerator(templateEngine);
93
+ // Generate .specs directory structure
94
+ const projectName = projectInfo?.name || 'my-project';
95
+ const description = projectInfo?.description ||
96
+ `A ${language} project${framework ? ` using ${framework}` : ''}`;
97
+ await specGenerator.generateSpecs({
98
+ projectName,
99
+ language,
100
+ framework,
101
+ targetDir: projectDir,
102
+ specsName: '.specs',
103
+ author: developerName,
104
+ description,
105
+ analysis: (!options.noAnalysis && analysis) ? analysis : undefined
106
+ });
107
+ logger.success('āœ… .specs folder created successfully!');
108
+ logger.info(`šŸ“ Location: ${specsDir}`);
109
+ // Show next steps
110
+ console.log(chalk_1.default.cyan('\nļæ½ Next: Open .specs/README.md and follow the Quick Start steps to populate your specs with AI.'));
111
+ }
112
+ catch (error) {
113
+ logger.error(`āŒ Failed to add specs: ${error instanceof Error ? error.message : 'Unknown error'}`);
114
+ process.exit(1);
115
+ }
116
+ }
117
+ function getFrameworksForLanguage(language) {
118
+ const frameworks = {
119
+ typescript: ['react', 'express', 'next', 'nest', 'vue', 'angular'],
120
+ python: ['fastapi', 'django', 'flask', 'streamlit']
121
+ };
122
+ return frameworks[language] || [];
123
+ }
124
+ //# sourceMappingURL=add-specs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-specs.js","sourceRoot":"","sources":["../../src/commands/add-specs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,iBA+EnE"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,iBAiInE"}
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
@@ -8,6 +41,7 @@ const path_1 = require("path");
8
41
  const fs_1 = require("fs");
9
42
  const chalk_1 = __importDefault(require("chalk"));
10
43
  const inquirer_1 = __importDefault(require("inquirer"));
44
+ const yaml = __importStar(require("js-yaml"));
11
45
  const templateEngine_1 = require("../utils/templateEngine");
12
46
  const specGenerator_1 = require("../utils/specGenerator");
13
47
  const logger_1 = require("../utils/logger");
@@ -29,7 +63,7 @@ async function initCommand(name, options) {
29
63
  process.exit(1);
30
64
  }
31
65
  // Validate supported language
32
- const supportedLanguages = ['typescript', 'python'];
66
+ const supportedLanguages = ['typescript', 'javascript', 'python'];
33
67
  if (!supportedLanguages.includes(options.lang)) {
34
68
  logger.error(`āŒ Language "${options.lang}" is not supported`);
35
69
  logger.info(`šŸ’” Supported languages: ${supportedLanguages.join(', ')}`);
@@ -49,11 +83,60 @@ async function initCommand(name, options) {
49
83
  framework = response.framework === 'none' ? undefined : response.framework;
50
84
  }
51
85
  }
86
+ // Get developer name for spec attribution
87
+ let developerName = 'Your Name'; // default
88
+ if (options.prompts) {
89
+ const nameResponse = await inquirer_1.default.prompt([{
90
+ type: 'input',
91
+ name: 'developerName',
92
+ message: 'Enter your name (for spec file attribution):',
93
+ default: 'Your Name'
94
+ }]);
95
+ developerName = nameResponse.developerName.trim() || 'Your Name';
96
+ }
52
97
  // Create project directory
53
98
  const targetDir = (0, path_1.join)(options.dir, projectName);
54
99
  if (!(0, fs_1.existsSync)(targetDir)) {
55
100
  (0, fs_1.mkdirSync)(targetDir, { recursive: true });
56
101
  }
102
+ // Check for existing .specs folder
103
+ const specsDir = (0, path_1.join)(targetDir, options.specsName);
104
+ if ((0, fs_1.existsSync)(specsDir)) {
105
+ logger.error(`āŒ Cannot initialize: ${options.specsName} folder already exists in ${targetDir}`);
106
+ // Try to read existing project info
107
+ const projectYamlPath = (0, path_1.join)(specsDir, 'project', 'project.yaml');
108
+ const requirementsMdPath = (0, path_1.join)(specsDir, 'project', 'requirements.md');
109
+ let projectInfo = '';
110
+ if ((0, fs_1.existsSync)(projectYamlPath)) {
111
+ try {
112
+ const projectData = yaml.load((0, fs_1.readFileSync)(projectYamlPath, 'utf8'));
113
+ projectInfo += `\nšŸ“‹ Existing Project: ${projectData.name || 'Unknown'}`;
114
+ projectInfo += `\nšŸ”– Version: ${projectData.version || 'Unknown'}`;
115
+ projectInfo += `\nšŸ’» Language: ${projectData.language || 'Unknown'}`;
116
+ projectInfo += `\nšŸ—ļø Framework: ${projectData.framework || 'Unknown'}`;
117
+ projectInfo += `\nšŸ‘¤ Author: ${projectData.author || 'Unknown'}`;
118
+ }
119
+ catch (error) {
120
+ projectInfo += '\nāš ļø Could not read project.yaml';
121
+ }
122
+ }
123
+ if ((0, fs_1.existsSync)(requirementsMdPath)) {
124
+ try {
125
+ const requirementsContent = (0, fs_1.readFileSync)(requirementsMdPath, 'utf8');
126
+ const lines = requirementsContent.split('\n').slice(0, 5); // First 5 lines
127
+ projectInfo += `\nšŸ“ Requirements Preview:\n${lines.join('\n')}`;
128
+ }
129
+ catch (error) {
130
+ projectInfo += '\nāš ļø Could not read requirements.md';
131
+ }
132
+ }
133
+ logger.info(chalk_1.default.yellow(projectInfo));
134
+ logger.info(chalk_1.default.cyan('\nšŸ’” To continue with this project:'));
135
+ logger.info(` cd ${targetDir}`);
136
+ logger.info(` specpilot validate # Check current specs`);
137
+ logger.info(` # Edit ${options.specsName}/project/requirements.md`);
138
+ process.exit(1);
139
+ }
57
140
  // Initialize template engine and spec generator
58
141
  const templateEngine = new templateEngine_1.TemplateEngine();
59
142
  const specGenerator = new specGenerator_1.SpecGenerator(templateEngine);
@@ -63,17 +146,14 @@ async function initCommand(name, options) {
63
146
  language: options.lang,
64
147
  framework,
65
148
  targetDir,
66
- specsName: options.specsName
149
+ specsName: options.specsName,
150
+ author: developerName
67
151
  });
68
152
  logger.success(`āœ… Project "${projectName}" initialized successfully!`);
69
153
  logger.info(`šŸ“ Location: ${targetDir}`);
70
154
  logger.info(`šŸ“‹ Specs: ${(0, path_1.join)(targetDir, options.specsName)}`);
71
155
  // Show next steps
72
- console.log(chalk_1.default.cyan('\nšŸ“– Next steps:'));
73
- console.log(` cd ${projectName}`);
74
- console.log(` # Edit ${options.specsName}/requirements.md to define your project`);
75
- console.log(` # Update ${options.specsName}/project.yaml with your configuration`);
76
- console.log(` specpilot validate # Validate your specifications`);
156
+ console.log(chalk_1.default.cyan('\nšŸš€ Next: Open .specs/README.md and follow the Quick Start steps to populate your specs with AI.'));
77
157
  }
78
158
  catch (error) {
79
159
  logger.error(`āŒ Failed to initialize project: ${error instanceof Error ? error.message : 'Unknown error'}`);
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,iBAqD3D"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,iBA8E3D"}
@@ -12,6 +12,30 @@ async function migrateCommand(options) {
12
12
  try {
13
13
  logger.info('šŸ”„ Starting project migration...');
14
14
  const migrator = new projectMigrator_1.ProjectMigrator();
15
+ // Check if migration is actually needed
16
+ const migrationNeeded = await migrator.checkMigrationNeeded(options.dir, options.from, options.to);
17
+ if (!migrationNeeded.needed) {
18
+ if (migrationNeeded.reason === 'no_source') {
19
+ logger.error(`āŒ Source structure "${options.from}" not found in ${options.dir}`);
20
+ console.log(chalk_1.default.yellow('\nšŸ’” When to use migrate:'));
21
+ console.log(' • Upgrading from old .project-spec to new .specs structure');
22
+ console.log(' • Converting between different specification formats\n');
23
+ console.log(chalk_1.default.cyan('šŸš€ For new projects, use:'));
24
+ console.log(chalk_1.default.white(' specpilot init my-project'));
25
+ console.log(chalk_1.default.cyan('\nšŸ“¦ For existing codebases without specs:'));
26
+ console.log(chalk_1.default.white(' specpilot add-specs'));
27
+ console.log(chalk_1.default.cyan('\nšŸ“– For help:'));
28
+ console.log(chalk_1.default.white(' specpilot migrate --help'));
29
+ process.exit(1);
30
+ }
31
+ else if (migrationNeeded.reason === 'already_migrated') {
32
+ logger.info('āœ… Project is already using the target structure.');
33
+ console.log(chalk_1.default.yellow(`\nāš ļø The "${options.to}" structure already exists.`));
34
+ console.log(chalk_1.default.cyan('\nNext steps:'));
35
+ console.log(' specpilot validate # Validate your specs');
36
+ process.exit(0);
37
+ }
38
+ }
15
39
  // Validate source structure exists
16
40
  const sourceExists = await migrator.validateSource(options.dir, options.from);
17
41
  if (!sourceExists) {
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":";;;;;AAcA,wCAqDC;AAhED,kDAA0B;AAC1B,8DAA2D;AAC3D,4CAAyC;AASlC,KAAK,UAAU,cAAc,CAAC,OAAuB;IAC1D,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAEhD,MAAM,QAAQ,GAAG,IAAI,iCAAe,EAAE,CAAC;QAEvC,mCAAmC;QACnC,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,uBAAuB,OAAO,CAAC,IAAI,kBAAkB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,6BAA6B;QAC7B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACrC,MAAM,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACrC,CAAC;QAED,oBAAoB;QACpB,MAAM,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,IAAI,SAAS,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YAClD,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,EAAE,EAAE,OAAO,CAAC,EAAE;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QAEtD,yBAAyB;QACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAExD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAe,EAAE,EAAE;gBAC3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAE/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":";;;;;AAcA,wCA8EC;AAzFD,kDAA0B;AAC1B,8DAA2D;AAC3D,4CAAyC;AASlC,KAAK,UAAU,cAAc,CAAC,OAAuB;IAC1D,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAEhD,MAAM,QAAQ,GAAG,IAAI,iCAAe,EAAE,CAAC;QAEvC,wCAAwC;QACxC,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAEnG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,eAAe,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC3C,MAAM,CAAC,KAAK,CAAC,uBAAuB,OAAO,CAAC,IAAI,kBAAkB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACjF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;gBAC5E,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;gBACxE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,IAAI,eAAe,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;gBACzD,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,cAAc,OAAO,CAAC,EAAE,6BAA6B,CAAC,CAAC,CAAC;gBACjF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,mCAAmC;QACnC,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,uBAAuB,OAAO,CAAC,IAAI,kBAAkB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,6BAA6B;QAC7B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACrC,MAAM,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACrC,CAAC;QAED,oBAAoB;QACpB,MAAM,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,IAAI,SAAS,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YAClD,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,EAAE,EAAE,OAAO,CAAC,EAAE;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QAEtD,yBAAyB;QACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAExD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAe,EAAE,EAAE;gBAC3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAE/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,37 @@
1
+ export interface TodoItem {
2
+ file: string;
3
+ line: number;
4
+ type: 'TODO' | 'FIXME' | 'HACK' | 'NOTE';
5
+ text: string;
6
+ }
7
+ export interface TestInfo {
8
+ framework?: string;
9
+ testFiles: string[];
10
+ testCount: number;
11
+ hasE2E: boolean;
12
+ hasUnit: boolean;
13
+ hasIntegration: boolean;
14
+ }
15
+ export interface ArchitectureInfo {
16
+ components: string[];
17
+ directories: string;
18
+ fileTypes: Record<string, number>;
19
+ }
20
+ export interface AnalysisResult {
21
+ todos: TodoItem[];
22
+ tests: TestInfo;
23
+ architecture: ArchitectureInfo;
24
+ }
25
+ export declare class CodeAnalyzer {
26
+ private excludeDirs;
27
+ private codeExtensions;
28
+ analyzeCodebase(projectDir?: string): Promise<AnalysisResult>;
29
+ private findTodos;
30
+ private analyzeTests;
31
+ private findTestFiles;
32
+ private isTestFile;
33
+ private detectTestFramework;
34
+ private extractArchitecture;
35
+ private buildDirectoryTree;
36
+ }
37
+ //# sourceMappingURL=codeAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeAnalyzer.d.ts","sourceRoot":"","sources":["../../src/utils/codeAnalyzer.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAoF;IACvG,OAAO,CAAC,cAAc,CAAgE;IAEhF,eAAe,CAAC,UAAU,GAAE,MAAsB,GAAG,OAAO,CAAC,cAAc,CAAC;IAQlF,OAAO,CAAC,SAAS;IA4CjB,OAAO,CAAC,YAAY;IAiDpB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,mBAAmB;IAiC3B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;CAgD3B"}