specpilot 1.1.2 → 1.1.3

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
@@ -256,10 +262,13 @@ ai-context:
256
262
 
257
263
  - **Flexible Structure**: Generates `.specs` with customizable, production-ready layout
258
264
  - **Language Support**: Templates for TypeScript and Python
265
+ - **Existing Project Support**: Add `.specs` to existing projects with `add-specs` command
266
+ - **Intelligent Analysis**: Auto-detect language/framework, scan TODOs/FIXMEs, analyze tests
259
267
  - **Spec Validation**: Built-in validation with optional auto-fix
260
268
  - **AI Integration**: Dedicated prompts tracking for development cycles
261
269
  - **Migration Support**: Helps transition older structures
262
270
  - **Template Listing**: Discover available language/framework combinations
271
+ - **Developer Attribution**: Prompts for developer name and personalizes generated specs
263
272
 
264
273
  ## Project Structure
265
274
 
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,iBA+H7D"}
@@ -0,0 +1,132 @@
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 steps:'));
111
+ console.log(` # Review and customize your specs:`);
112
+ console.log(` ${chalk_1.default.dim('cd')} .specs`);
113
+ console.log(` ${chalk_1.default.dim('#')} Edit project/requirements.md`);
114
+ console.log(` ${chalk_1.default.dim('#')} Update project/project.yaml`);
115
+ if (analysis && analysis.todos.length > 0) {
116
+ console.log(` ${chalk_1.default.dim('#')} Check planning/tasks.md for discovered TODOs`);
117
+ }
118
+ console.log(` \n specpilot validate ${chalk_1.default.dim('# Validate your specifications')}`);
119
+ }
120
+ catch (error) {
121
+ logger.error(`❌ Failed to add specs: ${error instanceof Error ? error.message : 'Unknown error'}`);
122
+ process.exit(1);
123
+ }
124
+ }
125
+ function getFrameworksForLanguage(language) {
126
+ const frameworks = {
127
+ typescript: ['react', 'express', 'next', 'nest', 'vue', 'angular'],
128
+ python: ['fastapi', 'django', 'flask', 'streamlit']
129
+ };
130
+ return frameworks[language] || [];
131
+ }
132
+ //# 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,iBAqInE"}
@@ -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,7 +146,8 @@ 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}`);
@@ -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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"}
@@ -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"}
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CodeAnalyzer = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ class CodeAnalyzer {
7
+ constructor() {
8
+ this.excludeDirs = ['node_modules', 'dist', 'build', '.git', '__pycache__', 'venv', '.venv', 'env'];
9
+ this.codeExtensions = ['.ts', '.tsx', '.js', '.jsx', '.py', '.java', '.go', '.rs'];
10
+ }
11
+ async analyzeCodebase(projectDir = process.cwd()) {
12
+ return {
13
+ todos: this.findTodos(projectDir),
14
+ tests: this.analyzeTests(projectDir),
15
+ architecture: this.extractArchitecture(projectDir)
16
+ };
17
+ }
18
+ findTodos(dir, todos = []) {
19
+ try {
20
+ const items = (0, fs_1.readdirSync)(dir);
21
+ for (const item of items) {
22
+ const fullPath = (0, path_1.join)(dir, item);
23
+ try {
24
+ const stat = (0, fs_1.statSync)(fullPath);
25
+ if (stat.isDirectory()) {
26
+ if (!this.excludeDirs.includes(item)) {
27
+ this.findTodos(fullPath, todos);
28
+ }
29
+ }
30
+ else if (this.codeExtensions.includes((0, path_1.extname)(item))) {
31
+ const content = (0, fs_1.readFileSync)(fullPath, 'utf-8');
32
+ const lines = content.split('\n');
33
+ lines.forEach((line, index) => {
34
+ const todoMatch = line.match(/\/\/\s*(TODO|FIXME|HACK|NOTE):?\s*(.+)/i) ||
35
+ line.match(/#\s*(TODO|FIXME|HACK|NOTE):?\s*(.+)/i);
36
+ if (todoMatch) {
37
+ todos.push({
38
+ file: fullPath.replace(dir + '/', ''),
39
+ line: index + 1,
40
+ type: todoMatch[1].toUpperCase(),
41
+ text: todoMatch[2].trim()
42
+ });
43
+ }
44
+ });
45
+ }
46
+ }
47
+ catch (error) {
48
+ // Skip files that can't be read
49
+ continue;
50
+ }
51
+ }
52
+ }
53
+ catch (error) {
54
+ // Skip directories that can't be read
55
+ }
56
+ return todos;
57
+ }
58
+ analyzeTests(dir) {
59
+ const testFiles = [];
60
+ let testCount = 0;
61
+ let hasE2E = false;
62
+ let hasUnit = false;
63
+ let hasIntegration = false;
64
+ let framework;
65
+ this.findTestFiles(dir, testFiles);
66
+ // Detect test framework
67
+ if (testFiles.some(f => f.includes('.spec.') || f.includes('.test.'))) {
68
+ framework = this.detectTestFramework(dir);
69
+ }
70
+ // Count tests and categorize
71
+ testFiles.forEach(file => {
72
+ try {
73
+ const content = (0, fs_1.readFileSync)((0, path_1.join)(dir, file), 'utf-8');
74
+ // Count test cases
75
+ const testMatches = content.match(/\b(test|it|describe)\s*\(/g);
76
+ if (testMatches) {
77
+ testCount += testMatches.length;
78
+ }
79
+ // Categorize tests
80
+ if (file.includes('e2e') || file.includes('integration')) {
81
+ hasE2E = true;
82
+ }
83
+ else if (file.includes('integration')) {
84
+ hasIntegration = true;
85
+ }
86
+ else {
87
+ hasUnit = true;
88
+ }
89
+ }
90
+ catch (error) {
91
+ // Skip files that can't be read
92
+ }
93
+ });
94
+ return {
95
+ framework,
96
+ testFiles,
97
+ testCount,
98
+ hasE2E,
99
+ hasUnit,
100
+ hasIntegration
101
+ };
102
+ }
103
+ findTestFiles(dir, testFiles) {
104
+ try {
105
+ const items = (0, fs_1.readdirSync)(dir);
106
+ for (const item of items) {
107
+ const fullPath = (0, path_1.join)(dir, item);
108
+ try {
109
+ const stat = (0, fs_1.statSync)(fullPath);
110
+ if (stat.isDirectory()) {
111
+ if (!this.excludeDirs.includes(item)) {
112
+ this.findTestFiles(fullPath, testFiles);
113
+ }
114
+ }
115
+ else if (this.isTestFile(item)) {
116
+ testFiles.push(fullPath.replace(dir + '/', ''));
117
+ }
118
+ }
119
+ catch (error) {
120
+ continue;
121
+ }
122
+ }
123
+ }
124
+ catch (error) {
125
+ // Skip directories that can't be read
126
+ }
127
+ }
128
+ isTestFile(filename) {
129
+ return filename.includes('.test.') ||
130
+ filename.includes('.spec.') ||
131
+ filename.includes('_test.') ||
132
+ filename.startsWith('test_');
133
+ }
134
+ detectTestFramework(dir) {
135
+ try {
136
+ const packageJsonPath = (0, path_1.join)(dir, 'package.json');
137
+ if ((0, fs_1.statSync)(packageJsonPath).isFile()) {
138
+ const pkg = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
139
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
140
+ if (deps.jest)
141
+ return 'jest';
142
+ if (deps.mocha)
143
+ return 'mocha';
144
+ if (deps.vitest)
145
+ return 'vitest';
146
+ if (deps.jasmine)
147
+ return 'jasmine';
148
+ if (deps.cypress)
149
+ return 'cypress';
150
+ if (deps.playwright)
151
+ return 'playwright';
152
+ }
153
+ }
154
+ catch (error) {
155
+ // No package.json or can't read it
156
+ }
157
+ // Check for Python test frameworks
158
+ try {
159
+ const requirementsPath = (0, path_1.join)(dir, 'requirements.txt');
160
+ if ((0, fs_1.statSync)(requirementsPath).isFile()) {
161
+ const content = (0, fs_1.readFileSync)(requirementsPath, 'utf-8');
162
+ if (content.includes('pytest'))
163
+ return 'pytest';
164
+ if (content.includes('unittest'))
165
+ return 'unittest';
166
+ }
167
+ }
168
+ catch (error) {
169
+ // No requirements.txt
170
+ }
171
+ return undefined;
172
+ }
173
+ extractArchitecture(dir) {
174
+ const components = [];
175
+ const fileTypes = {};
176
+ const directories = this.buildDirectoryTree(dir, components, fileTypes);
177
+ return {
178
+ components: [...new Set(components)],
179
+ directories,
180
+ fileTypes
181
+ };
182
+ }
183
+ buildDirectoryTree(dir, components, fileTypes, depth = 0, prefix = '') {
184
+ let result = '';
185
+ if (depth > 3)
186
+ return result; // Limit recursion depth
187
+ try {
188
+ const items = (0, fs_1.readdirSync)(dir);
189
+ for (const item of items) {
190
+ const fullPath = (0, path_1.join)(dir, item);
191
+ try {
192
+ const stat = (0, fs_1.statSync)(fullPath);
193
+ if (stat.isDirectory()) {
194
+ if (!this.excludeDirs.includes(item)) {
195
+ result += `${prefix}${item}/\n`;
196
+ result += this.buildDirectoryTree(fullPath, components, fileTypes, depth + 1, prefix + ' ');
197
+ }
198
+ }
199
+ else {
200
+ const ext = (0, path_1.extname)(item);
201
+ if (this.codeExtensions.includes(ext)) {
202
+ fileTypes[ext] = (fileTypes[ext] || 0) + 1;
203
+ // Extract component names (files that might be components)
204
+ if (item.match(/component|service|controller|model|view|page/i)) {
205
+ components.push(item.replace(ext, ''));
206
+ }
207
+ }
208
+ // Add files to tree
209
+ result += `${prefix}${item}\n`;
210
+ }
211
+ }
212
+ catch (error) {
213
+ continue;
214
+ }
215
+ }
216
+ }
217
+ catch (error) {
218
+ // Skip directories that can't be read
219
+ }
220
+ return result;
221
+ }
222
+ }
223
+ exports.CodeAnalyzer = CodeAnalyzer;
224
+ //# sourceMappingURL=codeAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeAnalyzer.js","sourceRoot":"","sources":["../../src/utils/codeAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface ProjectInfo {
2
+ name: string;
3
+ version: string;
4
+ language: string;
5
+ framework?: string;
6
+ author?: string;
7
+ description?: string;
8
+ dependencies: string[];
9
+ }
10
+ export declare class ProjectDetector {
11
+ detectProject(projectDir?: string): Promise<ProjectInfo | null>;
12
+ private detectNodeProject;
13
+ private detectPythonProject;
14
+ private detectLanguage;
15
+ private detectFramework;
16
+ private detectPythonFramework;
17
+ private extractAuthor;
18
+ private extractPythonDependencies;
19
+ }
20
+ //# sourceMappingURL=projectDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectDetector.d.ts","sourceRoot":"","sources":["../../src/utils/projectDetector.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBAAa,eAAe;IACpB,aAAa,CAAC,UAAU,GAAE,MAAsB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAuBpF,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,mBAAmB;IA0C3B,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,yBAAyB;CAiBlC"}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProjectDetector = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ class ProjectDetector {
7
+ async detectProject(projectDir = process.cwd()) {
8
+ // Try to detect Node.js/TypeScript project
9
+ const packageJsonPath = (0, path_1.join)(projectDir, 'package.json');
10
+ if ((0, fs_1.existsSync)(packageJsonPath)) {
11
+ return this.detectNodeProject(packageJsonPath);
12
+ }
13
+ // Try to detect Python project
14
+ const setupPyPath = (0, path_1.join)(projectDir, 'setup.py');
15
+ const pyprojectPath = (0, path_1.join)(projectDir, 'pyproject.toml');
16
+ const requirementsPath = (0, path_1.join)(projectDir, 'requirements.txt');
17
+ if ((0, fs_1.existsSync)(pyprojectPath)) {
18
+ return this.detectPythonProject(pyprojectPath, 'pyproject.toml');
19
+ }
20
+ else if ((0, fs_1.existsSync)(setupPyPath)) {
21
+ return this.detectPythonProject(setupPyPath, 'setup.py');
22
+ }
23
+ else if ((0, fs_1.existsSync)(requirementsPath)) {
24
+ return this.detectPythonProject(requirementsPath, 'requirements.txt');
25
+ }
26
+ return null;
27
+ }
28
+ detectNodeProject(packageJsonPath) {
29
+ const pkg = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
30
+ return {
31
+ name: pkg.name || 'unknown-project',
32
+ version: pkg.version || '1.0.0',
33
+ language: this.detectLanguage(pkg),
34
+ framework: this.detectFramework(pkg),
35
+ author: this.extractAuthor(pkg.author),
36
+ description: pkg.description || '',
37
+ dependencies: Object.keys(pkg.dependencies || {})
38
+ };
39
+ }
40
+ detectPythonProject(filePath, fileType) {
41
+ const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
42
+ if (fileType === 'pyproject.toml') {
43
+ // Basic TOML parsing for name and version
44
+ const nameMatch = content.match(/name\s*=\s*["']([^"']+)["']/);
45
+ const versionMatch = content.match(/version\s*=\s*["']([^"']+)["']/);
46
+ return {
47
+ name: nameMatch ? nameMatch[1] : 'unknown-project',
48
+ version: versionMatch ? versionMatch[1] : '1.0.0',
49
+ language: 'python',
50
+ framework: this.detectPythonFramework(content),
51
+ description: '',
52
+ dependencies: this.extractPythonDependencies(content)
53
+ };
54
+ }
55
+ else if (fileType === 'requirements.txt') {
56
+ // Parse requirements.txt
57
+ return {
58
+ name: 'unknown-project',
59
+ version: '1.0.0',
60
+ language: 'python',
61
+ framework: this.detectPythonFramework(content),
62
+ description: '',
63
+ dependencies: content.split('\n').filter(line => line.trim() && !line.startsWith('#'))
64
+ };
65
+ }
66
+ else {
67
+ // setup.py - basic parsing
68
+ const nameMatch = content.match(/name\s*=\s*["']([^"']+)["']/);
69
+ const versionMatch = content.match(/version\s*=\s*["']([^"']+)["']/);
70
+ return {
71
+ name: nameMatch ? nameMatch[1] : 'unknown-project',
72
+ version: versionMatch ? versionMatch[1] : '1.0.0',
73
+ language: 'python',
74
+ framework: this.detectPythonFramework(content),
75
+ description: '',
76
+ dependencies: this.extractPythonDependencies(content)
77
+ };
78
+ }
79
+ }
80
+ detectLanguage(pkg) {
81
+ // Check if TypeScript is in devDependencies
82
+ if (pkg.devDependencies?.typescript || pkg.dependencies?.typescript) {
83
+ return 'typescript';
84
+ }
85
+ // Check for TypeScript-specific fields or config
86
+ if (pkg.types || pkg.typings) {
87
+ return 'typescript';
88
+ }
89
+ // Default to JavaScript for Node.js projects without TypeScript
90
+ return 'javascript';
91
+ }
92
+ detectFramework(pkg) {
93
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
94
+ // React
95
+ if (deps.react)
96
+ return 'react';
97
+ // Next.js
98
+ if (deps.next)
99
+ return 'next';
100
+ // Vue
101
+ if (deps.vue)
102
+ return 'vue';
103
+ // Angular
104
+ if (deps['@angular/core'])
105
+ return 'angular';
106
+ // Express
107
+ if (deps.express)
108
+ return 'express';
109
+ // NestJS
110
+ if (deps['@nestjs/core'])
111
+ return 'nest';
112
+ return undefined;
113
+ }
114
+ detectPythonFramework(content) {
115
+ const lowerContent = content.toLowerCase();
116
+ if (lowerContent.includes('fastapi'))
117
+ return 'fastapi';
118
+ if (lowerContent.includes('django'))
119
+ return 'django';
120
+ if (lowerContent.includes('flask'))
121
+ return 'flask';
122
+ if (lowerContent.includes('streamlit'))
123
+ return 'streamlit';
124
+ return undefined;
125
+ }
126
+ extractAuthor(author) {
127
+ if (typeof author === 'string') {
128
+ return author;
129
+ }
130
+ else if (typeof author === 'object' && author.name) {
131
+ return author.name;
132
+ }
133
+ return undefined;
134
+ }
135
+ extractPythonDependencies(content) {
136
+ const deps = [];
137
+ const lines = content.split('\n');
138
+ for (const line of lines) {
139
+ const trimmed = line.trim();
140
+ if (trimmed && !trimmed.startsWith('#')) {
141
+ // Extract package name (before ==, >=, etc.)
142
+ const match = trimmed.match(/^([a-zA-Z0-9_-]+)/);
143
+ if (match) {
144
+ deps.push(match[1]);
145
+ }
146
+ }
147
+ }
148
+ return deps;
149
+ }
150
+ }
151
+ exports.ProjectDetector = ProjectDetector;
152
+ //# sourceMappingURL=projectDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectDetector.js","sourceRoot":"","sources":["../../src/utils/projectDetector.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,27 @@ export interface SpecGeneratorOptions {
7
7
  specsName: string;
8
8
  author?: string;
9
9
  description?: string;
10
+ analysis?: {
11
+ todos: Array<{
12
+ file: string;
13
+ line: number;
14
+ text: string;
15
+ type: string;
16
+ }>;
17
+ tests: {
18
+ framework?: string;
19
+ testFiles: string[];
20
+ testCount: number;
21
+ hasE2E: boolean;
22
+ hasUnit: boolean;
23
+ hasIntegration: boolean;
24
+ };
25
+ architecture: {
26
+ components: string[];
27
+ directories: string;
28
+ fileTypes: Record<string, number>;
29
+ };
30
+ };
10
31
  }
11
32
  export declare class SpecGenerator {
12
33
  private templateEngine;
@@ -1 +1 @@
1
- {"version":3,"file":"specGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/specGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAmB,MAAM,kBAAkB,CAAC;AAEnE,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,cAAc;IAE5C,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;YAiCnD,mBAAmB;YAUnB,sBAAsB;YAUtB,sBAAsB;YA8BtB,eAAe;YAcf,eAAe;YA8Bf,iBAAiB;YA6BjB,cAAc;YA4Bd,iBAAiB;YA2BjB,qBAAqB;YA0BrB,iBAAiB;YA4BjB,eAAe;YA0Bf,4BAA4B;CA+C3C"}
1
+ {"version":3,"file":"specGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/specGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAmB,MAAM,kBAAkB,CAAC;AAEnE,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACzE,KAAK,EAAE;YACL,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,SAAS,EAAE,MAAM,EAAE,CAAC;YACpB,SAAS,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,OAAO,CAAC;YAChB,OAAO,EAAE,OAAO,CAAC;YACjB,cAAc,EAAE,OAAO,CAAC;SACzB,CAAC;QACF,YAAY,EAAE;YACZ,UAAU,EAAE,MAAM,EAAE,CAAC;YACrB,WAAW,EAAE,MAAM,CAAC;YACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACnC,CAAC;KACH,CAAC;CACH;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,cAAc;IAE5C,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;YAkCnD,mBAAmB;YAUnB,sBAAsB;YAUtB,sBAAsB;YA8BtB,eAAe;YAcf,eAAe;YA8Bf,iBAAiB;YA6BjB,cAAc;YA4Bd,iBAAiB;YA2BjB,qBAAqB;YA0BrB,iBAAiB;YAwCjB,eAAe;YA0Bf,4BAA4B;CA+C3C"}
@@ -20,7 +20,8 @@ class SpecGenerator {
20
20
  author: options.author || 'Your Name',
21
21
  description: options.description || `A ${options.language} project${options.framework ? ` using ${options.framework}` : ''}`,
22
22
  lastUpdated: '2025-10-05',
23
- contributors: [options.author || 'Your Name']
23
+ contributors: [options.author || 'Your Name'],
24
+ architecture: options.analysis?.architecture
24
25
  };
25
26
  // Write spec files in correct subfolders
26
27
  await this.generateProjectYaml((0, path_1.join)(specsDir, 'project'), context);
@@ -233,6 +234,18 @@ This file (prompts.md) contains ALL AI interactions for {{projectName}}. Update
233
234
 
234
235
  **🚨 MANDATE**: Update with every AI interaction.
235
236
 
237
+ ## First-Use Onboarding Prompt
238
+ Use the following prompt the very first time you partner with an AI agent after generating the .specs folder:
239
+
240
+ ~~~
241
+ Act as the specification-driven co-pilot for this repository. We just generated the \`.specs/\` directory with SpecPilot SDD. Your job is to inspect the current codebase and fill in every \`.specs\` file with high-signal, implementation-aware details.
242
+ - First, map the project's language, framework, major modules, and any existing tests.
243
+ - Then propose or refine the entries for: \`project/project.yaml\`, \`project/requirements.md\`, \`architecture/architecture.md\`, \`architecture/api.yaml\`, \`planning/tasks.md\`, \`planning/roadmap.md\`, \`quality/tests.md\`, \`development/docs.md\`, \`development/context.md\`, and \`development/prompts.md\`.
244
+ - Capture requirements, architecture decisions, API surface, test strategy, and development context so another engineer (or AI) could continue the project confidently.
245
+ - Highlight any gaps or risks you uncover in the code.
246
+ Use markdown where appropriate, keep IDs stable (e.g., \`REQ-001\`, \`TASK-001\`), and make sure everything is internally consistent. When you're done, summarize what changed and call out anything that needs human follow-up.
247
+ ~~~
248
+
236
249
  ## Cross-References
237
250
  - Context: ./context.md
238
251
  - Project config: ../project/project.yaml
@@ -1 +1 @@
1
- {"version":3,"file":"specGenerator.js","sourceRoot":"","sources":["../../src/utils/specGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"specGenerator.js","sourceRoot":"","sources":["../../src/utils/specGenerator.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,11 @@ export interface TemplateContext {
4
4
  framework?: string;
5
5
  author?: string;
6
6
  description?: string;
7
+ architecture?: {
8
+ components: string[];
9
+ directories: string;
10
+ fileTypes: Record<string, number>;
11
+ };
7
12
  [key: string]: any;
8
13
  }
9
14
  export declare class TemplateEngine {
@@ -1 +1 @@
1
- {"version":3,"file":"templateEngine.d.ts","sourceRoot":"","sources":["../../src/utils/templateEngine.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAsD;;IAMvE,OAAO,CAAC,eAAe;IAWvB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAUtD,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM;IAS9D,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM;IAK1E,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK7F,OAAO,CAAC,yBAAyB;IAkCjC,OAAO,CAAC,sBAAsB;IA6C9B,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,uBAAuB;CAuDhC"}
1
+ {"version":3,"file":"templateEngine.d.ts","sourceRoot":"","sources":["../../src/utils/templateEngine.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE;QACb,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACnC,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAsD;;IAMvE,OAAO,CAAC,eAAe;IAcvB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAUtD,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM;IAS9D,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM;IAK1E,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK7F,OAAO,CAAC,yBAAyB;IAsCjC,OAAO,CAAC,sBAAsB;IA8C9B,OAAO,CAAC,oBAAoB;IAmD5B,OAAO,CAAC,uBAAuB;CAiFhC"}
@@ -44,10 +44,11 @@ class TemplateEngine {
44
44
  registerHelpers() {
45
45
  // Register custom Handlebars helpers
46
46
  Handlebars.registerHelper('uppercase', (str) => str.toUpperCase());
47
- Handlebars.registerHelper('lowercase', (str) => str.toLowerCase());
47
+ Handlebars.registerHelper('lowercase', (str) => str.slice(1));
48
48
  Handlebars.registerHelper('capitalize', (str) => str.charAt(0).toUpperCase() + str.slice(1));
49
49
  Handlebars.registerHelper('currentDate', () => new Date().toISOString().split('T')[0]);
50
50
  Handlebars.registerHelper('currentYear', () => new Date().getFullYear());
51
+ Handlebars.registerHelper('join', (array, separator) => Array.isArray(array) ? array.join(separator) : '');
51
52
  }
52
53
  loadTemplate(templatePath, name) {
53
54
  try {
@@ -79,13 +80,17 @@ class TemplateEngine {
79
80
  const templates = {
80
81
  // Project.yaml templates
81
82
  'typescript-project.yaml': this.getProjectYamlTemplate('typescript'),
83
+ 'javascript-project.yaml': this.getProjectYamlTemplate('javascript'),
82
84
  'python-project.yaml': this.getProjectYamlTemplate('python'),
83
85
  // Architecture templates
84
86
  'typescript-architecture.md': this.getArchitectureTemplate('typescript'),
87
+ 'javascript-architecture.md': this.getArchitectureTemplate('javascript'),
85
88
  'python-architecture.md': this.getArchitectureTemplate('python'),
86
89
  // Framework-specific variations
87
90
  'typescript-react-project.yaml': this.getProjectYamlTemplate('typescript', 'react'),
88
91
  'typescript-express-project.yaml': this.getProjectYamlTemplate('typescript', 'express'),
92
+ 'javascript-react-project.yaml': this.getProjectYamlTemplate('javascript', 'react'),
93
+ 'javascript-express-project.yaml': this.getProjectYamlTemplate('javascript', 'express'),
89
94
  'python-django-project.yaml': this.getProjectYamlTemplate('python', 'django'),
90
95
  'python-fastapi-project.yaml': this.getProjectYamlTemplate('python', 'fastapi'),
91
96
  };
@@ -141,6 +146,7 @@ team:
141
146
  # Build and Deployment
142
147
  build:
143
148
  ${language === 'typescript' ? 'command: "npm run build"' : ''}
149
+ ${language === 'javascript' ? 'command: "npm start"' : ''}
144
150
  ${language === 'python' ? 'command: "python -m build"' : ''}
145
151
 
146
152
  # Dependencies (framework-specific)
@@ -170,6 +176,23 @@ ${this.getDependencySection(language, framework)}`;
170
176
  - "@types/helmet"
171
177
  - "typescript"
172
178
  - "ts-node"`;
179
+ }
180
+ if (language === 'javascript' && framework === 'react') {
181
+ return `dependencies:
182
+ runtime:
183
+ - "react"
184
+ - "react-dom"
185
+ development:
186
+ - "vite"`;
187
+ }
188
+ if (language === 'javascript' && framework === 'express') {
189
+ return `dependencies:
190
+ runtime:
191
+ - "express"
192
+ - "cors"
193
+ - "helmet"
194
+ development:
195
+ - "nodemon"`;
173
196
  }
174
197
  return `dependencies:
175
198
  runtime: []
@@ -198,15 +221,41 @@ This document outlines the architecture and design decisions for {{projectName}}
198
221
  ## Core Components
199
222
 
200
223
  ### Application Structure
224
+ {{#if architecture}}
225
+ {{#if architecture.directories}}
226
+ Based on analysis of the project structure:
227
+ \`\`\`
228
+ {{architecture.directories}}
229
+ \`\`\`
230
+
231
+ {{#if architecture.components}}
232
+ **Components found**: {{join architecture.components ", "}}
233
+ {{/if}}
234
+
235
+ {{#if architecture.fileTypes}}
236
+ **File types in project**:
237
+ {{#each architecture.fileTypes}}
238
+ - {{@key}}: {{this}} files
239
+ {{/each}}
240
+ {{/if}}
241
+ {{else}}
242
+ *Project structure analysis not available. Replace the placeholder below with your actual application structure.*
243
+
244
+ \`\`\`text
245
+ [ADD YOUR APPLICATION STRUCTURE TREE HERE]
201
246
  \`\`\`
202
- src/
203
- ├── components/ # Reusable components
204
- ├── services/ # Business logic
205
- ├── utils/ # Utility functions
206
- ├── types/ # Type definitions
207
- └── tests/ # Test files
247
+ {{/if}}
248
+ {{else}}
249
+ *No architecture analysis available. This template was generated without project analysis.*
250
+
251
+ **Application structure placeholder:**
252
+ \`\`\`text
253
+ [ADD YOUR APPLICATION STRUCTURE TREE HERE]
208
254
  \`\`\`
209
255
 
256
+ *Replace the placeholder with the directories and files that represent your real application structure. Include annotations for responsibilities when helpful.*
257
+ {{/if}}
258
+
210
259
  ## Design Decisions
211
260
 
212
261
  ### Decision 1: [Decision Title]
@@ -1 +1 @@
1
- {"version":3,"file":"templateEngine.js","sourceRoot":"","sources":["../../src/utils/templateEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templateEngine.js","sourceRoot":"","sources":["../../src/utils/templateEngine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specpilot",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "A CLI tool for initializing specification-driven development projects with flexible, production-ready structures.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {