specpilot 1.2.2 ā 1.5.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 +126 -378
- package/dist/cli.js +13 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/add-specs.d.ts.map +1 -1
- package/dist/commands/add-specs.js +6 -18
- package/dist/commands/add-specs.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +123 -48
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +26 -34
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +16 -11
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/specify.d.ts.map +1 -1
- package/dist/commands/specify.js +112 -20
- package/dist/commands/specify.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +35 -19
- package/dist/commands/validate.js.map +1 -1
- package/dist/utils/agentConfigGenerator.d.ts +15 -0
- package/dist/utils/agentConfigGenerator.d.ts.map +1 -0
- package/dist/utils/agentConfigGenerator.js +234 -0
- package/dist/utils/agentConfigGenerator.js.map +1 -0
- package/dist/utils/codeAnalyzer.js +10 -10
- package/dist/utils/codeAnalyzer.js.map +1 -1
- package/dist/utils/frameworks.d.ts +2 -0
- package/dist/utils/frameworks.d.ts.map +1 -0
- package/dist/utils/frameworks.js +11 -0
- package/dist/utils/frameworks.js.map +1 -0
- package/dist/utils/ideConfigGenerator.d.ts +20 -0
- package/dist/utils/ideConfigGenerator.d.ts.map +1 -0
- package/dist/utils/ideConfigGenerator.js +176 -0
- package/dist/utils/ideConfigGenerator.js.map +1 -0
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +145 -0
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/projectDetector.d.ts.map +1 -1
- package/dist/utils/projectDetector.js.map +1 -1
- package/dist/utils/projectMigrator.d.ts.map +1 -1
- package/dist/utils/projectMigrator.js +36 -33
- package/dist/utils/projectMigrator.js.map +1 -1
- package/dist/utils/specFileGenerator.d.ts +25 -0
- package/dist/utils/specFileGenerator.d.ts.map +1 -0
- package/dist/utils/specFileGenerator.js +677 -0
- package/dist/utils/specFileGenerator.js.map +1 -0
- package/dist/utils/specGenerator.d.ts +11 -14
- package/dist/utils/specGenerator.d.ts.map +1 -1
- package/dist/utils/specGenerator.js +24 -430
- package/dist/utils/specGenerator.js.map +1 -1
- package/dist/utils/specValidator.d.ts.map +1 -1
- package/dist/utils/specValidator.js +4 -6
- package/dist/utils/specValidator.js.map +1 -1
- package/dist/utils/templateEngine.d.ts +9 -3
- package/dist/utils/templateEngine.d.ts.map +1 -1
- package/dist/utils/templateEngine.js +36 -36
- package/dist/utils/templateEngine.js.map +1 -1
- package/package.json +8 -3
|
@@ -1 +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,
|
|
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,iBAwH7D"}
|
|
@@ -9,6 +9,7 @@ const fs_1 = require("fs");
|
|
|
9
9
|
const chalk_1 = __importDefault(require("chalk"));
|
|
10
10
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
11
11
|
const projectDetector_1 = require("../utils/projectDetector");
|
|
12
|
+
const frameworks_1 = require("../utils/frameworks");
|
|
12
13
|
const codeAnalyzer_1 = require("../utils/codeAnalyzer");
|
|
13
14
|
const templateEngine_1 = require("../utils/templateEngine");
|
|
14
15
|
const specGenerator_1 = require("../utils/specGenerator");
|
|
@@ -45,7 +46,7 @@ async function addSpecsCommand(options) {
|
|
|
45
46
|
}
|
|
46
47
|
// Prompt for missing information
|
|
47
48
|
if (!framework && options.prompts) {
|
|
48
|
-
const frameworks = getFrameworksForLanguage(language);
|
|
49
|
+
const frameworks = (0, frameworks_1.getFrameworksForLanguage)(language);
|
|
49
50
|
if (frameworks.length > 0) {
|
|
50
51
|
const response = await inquirer_1.default.prompt([{
|
|
51
52
|
type: 'list',
|
|
@@ -102,30 +103,17 @@ async function addSpecsCommand(options) {
|
|
|
102
103
|
specsName: '.specs',
|
|
103
104
|
author: developerName,
|
|
104
105
|
description,
|
|
105
|
-
analysis: (!options.noAnalysis && analysis) ? analysis : undefined
|
|
106
|
+
analysis: (!options.noAnalysis && analysis) ? analysis : undefined,
|
|
107
|
+
mode: 'existing',
|
|
106
108
|
});
|
|
107
109
|
logger.success('ā
.specs folder created successfully!');
|
|
108
110
|
logger.info(`š Location: ${specsDir}`);
|
|
109
|
-
// Show next steps
|
|
110
|
-
|
|
111
|
-
š Next steps to populate your specs with AI:
|
|
112
|
-
1. Open .specs/README.md for full guidance
|
|
113
|
-
2. Copy the onboarding prompt from .specs/development/prompts.md
|
|
114
|
-
3. Paste into your AI agent and run it
|
|
115
|
-
4. Review the generated spec files
|
|
116
|
-
|
|
117
|
-
Your project is now ready for AI-assisted development!`));
|
|
111
|
+
// Show next steps with logo
|
|
112
|
+
logger.displayInitSuccess(projectInfo?.name || 'Project', projectDir, specsDir);
|
|
118
113
|
}
|
|
119
114
|
catch (error) {
|
|
120
115
|
logger.error(`ā Failed to add specs: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
121
116
|
process.exit(1);
|
|
122
117
|
}
|
|
123
118
|
}
|
|
124
|
-
function getFrameworksForLanguage(language) {
|
|
125
|
-
const frameworks = {
|
|
126
|
-
typescript: ['react', 'express', 'next', 'nest', 'vue', 'angular'],
|
|
127
|
-
python: ['fastapi', 'django', 'flask', 'streamlit']
|
|
128
|
-
};
|
|
129
|
-
return frameworks[language] || [];
|
|
130
|
-
}
|
|
131
119
|
//# sourceMappingURL=add-specs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-specs.js","sourceRoot":"","sources":["../../src/commands/add-specs.ts"],"names":[],"mappings":";;;;;AAmBA,
|
|
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":"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,
|
|
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,iBAgOnE"}
|
package/dist/commands/init.js
CHANGED
|
@@ -42,38 +42,52 @@ const fs_1 = require("fs");
|
|
|
42
42
|
const chalk_1 = __importDefault(require("chalk"));
|
|
43
43
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
44
44
|
const yaml = __importStar(require("js-yaml"));
|
|
45
|
+
const frameworks_1 = require("../utils/frameworks");
|
|
45
46
|
const templateEngine_1 = require("../utils/templateEngine");
|
|
46
47
|
const specGenerator_1 = require("../utils/specGenerator");
|
|
47
48
|
const logger_1 = require("../utils/logger");
|
|
48
49
|
async function initCommand(name, options) {
|
|
49
50
|
const logger = new logger_1.Logger();
|
|
50
51
|
try {
|
|
51
|
-
logger.info('š Initializing SDD project...');
|
|
52
52
|
// Validate project name
|
|
53
53
|
if (!name || name.trim() === '') {
|
|
54
|
-
logger.
|
|
55
|
-
logger.info('š” Usage: specpilot init <project-name>');
|
|
54
|
+
logger.displayError('Invalid Project Name', 'Project name is required and cannot be empty\n\nš” Usage: specpilot init <project-name>');
|
|
56
55
|
process.exit(1);
|
|
57
56
|
}
|
|
58
57
|
const projectName = name.trim();
|
|
59
|
-
// Validate project name
|
|
60
|
-
if (
|
|
61
|
-
logger.
|
|
62
|
-
|
|
58
|
+
// Validate project name length (npm limit)
|
|
59
|
+
if (projectName.length > 214) {
|
|
60
|
+
logger.displayError('Invalid Project Name', 'Project name must be 214 characters or fewer');
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
// Validate project name with allowlist (prevents filesystem issues and Handlebars template injection)
|
|
64
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(projectName)) {
|
|
65
|
+
logger.displayError('Invalid Project Name', 'Project name must start with a letter or number and contain only letters, numbers, dots, hyphens, and underscores\n\nš” Example: my-project, app_v2, project.name');
|
|
63
66
|
process.exit(1);
|
|
64
67
|
}
|
|
65
68
|
// Validate supported language
|
|
66
69
|
const supportedLanguages = ['typescript', 'javascript', 'python'];
|
|
67
70
|
if (!supportedLanguages.includes(options.lang)) {
|
|
68
|
-
logger.
|
|
69
|
-
logger.info(`š” Supported languages: ${supportedLanguages.join(', ')}`);
|
|
71
|
+
logger.displayError('Unsupported Language', `Language "${options.lang}" is not supported\n\nš” Supported languages: ${supportedLanguages.join(', ')}`);
|
|
70
72
|
process.exit(1);
|
|
71
73
|
}
|
|
72
74
|
// Get framework if not provided and prompts enabled
|
|
73
75
|
let framework = options.framework;
|
|
74
76
|
if (!framework && options.prompts) {
|
|
75
|
-
const frameworks = getFrameworksForLanguage(options.lang);
|
|
77
|
+
const frameworks = (0, frameworks_1.getFrameworksForLanguage)(options.lang);
|
|
76
78
|
if (frameworks.length > 0) {
|
|
79
|
+
// Display logo before framework selection
|
|
80
|
+
const frameworkPromptContent = [
|
|
81
|
+
chalk_1.default.blue('š Initializing SDD project...'),
|
|
82
|
+
'',
|
|
83
|
+
chalk_1.default.blue.bold('Framework Selection'),
|
|
84
|
+
'',
|
|
85
|
+
chalk_1.default.white(`Project: ${projectName}`),
|
|
86
|
+
chalk_1.default.white(`Language: ${options.lang}`),
|
|
87
|
+
'',
|
|
88
|
+
chalk_1.default.cyan('Please choose a framework for your project:')
|
|
89
|
+
];
|
|
90
|
+
logger.displayWithLogo(frameworkPromptContent);
|
|
77
91
|
const response = await inquirer_1.default.prompt([{
|
|
78
92
|
type: 'list',
|
|
79
93
|
name: 'framework',
|
|
@@ -94,6 +108,73 @@ async function initCommand(name, options) {
|
|
|
94
108
|
}]);
|
|
95
109
|
developerName = nameResponse.developerName.trim() || 'Your Name';
|
|
96
110
|
}
|
|
111
|
+
// Get IDE/Agent preference for context configuration
|
|
112
|
+
let ide = 'vscode'; // default
|
|
113
|
+
if (options.prompts) {
|
|
114
|
+
const ideResponse = await inquirer_1.default.prompt([{
|
|
115
|
+
type: 'list',
|
|
116
|
+
name: 'ide',
|
|
117
|
+
message: 'Select your AI IDE/Agent for SpecPilot context:',
|
|
118
|
+
choices: ['vscode', 'Cursor', 'Windsurf', 'Antigravity', 'Kiro', 'Cowork', 'Codex']
|
|
119
|
+
}]);
|
|
120
|
+
ide = ideResponse.ide;
|
|
121
|
+
}
|
|
122
|
+
// Project context questions (helps AI generate better specs)
|
|
123
|
+
const NOT_SPECIFIED = 'Not specified ā use your judgment and mark as [ASSUMPTION]';
|
|
124
|
+
let projectContext = {
|
|
125
|
+
whatItDoes: NOT_SPECIFIED,
|
|
126
|
+
targetUsers: NOT_SPECIFIED,
|
|
127
|
+
expectedScale: NOT_SPECIFIED,
|
|
128
|
+
constraints: NOT_SPECIFIED,
|
|
129
|
+
};
|
|
130
|
+
if (options.prompts) {
|
|
131
|
+
console.log('');
|
|
132
|
+
console.log(chalk_1.default.blue.bold('š Project Context') + chalk_1.default.gray(' (helps AI generate better specs)'));
|
|
133
|
+
console.log('');
|
|
134
|
+
// Mandatory question ā re-prompt if empty
|
|
135
|
+
let whatItDoes = '';
|
|
136
|
+
while (!whatItDoes.trim()) {
|
|
137
|
+
const descResponse = await inquirer_1.default.prompt([{
|
|
138
|
+
type: 'input',
|
|
139
|
+
name: 'whatItDoes',
|
|
140
|
+
message: 'What does your project do? (required):',
|
|
141
|
+
}]);
|
|
142
|
+
whatItDoes = descResponse.whatItDoes.trim();
|
|
143
|
+
if (!whatItDoes) {
|
|
144
|
+
console.log(chalk_1.default.yellow(' This is required ā a brief sentence about what the project does.'));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Optional questions ā Enter to skip
|
|
148
|
+
const optionalResponse = await inquirer_1.default.prompt([
|
|
149
|
+
{
|
|
150
|
+
type: 'input',
|
|
151
|
+
name: 'targetUsers',
|
|
152
|
+
message: 'Who are the target users? (Enter to skip):',
|
|
153
|
+
default: '',
|
|
154
|
+
filter: (val) => val.trim(),
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'input',
|
|
158
|
+
name: 'expectedScale',
|
|
159
|
+
message: 'What\'s the expected scale? (Enter to skip):',
|
|
160
|
+
default: '',
|
|
161
|
+
filter: (val) => val.trim(),
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
type: 'input',
|
|
165
|
+
name: 'constraints',
|
|
166
|
+
message: 'Any key constraints or requirements? (Enter to skip):',
|
|
167
|
+
default: '',
|
|
168
|
+
filter: (val) => val.trim(),
|
|
169
|
+
},
|
|
170
|
+
]);
|
|
171
|
+
projectContext = {
|
|
172
|
+
whatItDoes,
|
|
173
|
+
targetUsers: optionalResponse.targetUsers || NOT_SPECIFIED,
|
|
174
|
+
expectedScale: optionalResponse.expectedScale || NOT_SPECIFIED,
|
|
175
|
+
constraints: optionalResponse.constraints || NOT_SPECIFIED,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
97
178
|
// Create project directory
|
|
98
179
|
const targetDir = (0, path_1.join)(options.dir, projectName);
|
|
99
180
|
if (!(0, fs_1.existsSync)(targetDir)) {
|
|
@@ -102,39 +183,47 @@ async function initCommand(name, options) {
|
|
|
102
183
|
// Check for existing .specs folder
|
|
103
184
|
const specsDir = (0, path_1.join)(targetDir, options.specsName);
|
|
104
185
|
if ((0, fs_1.existsSync)(specsDir)) {
|
|
105
|
-
logger.error(`ā Cannot initialize: ${options.specsName} folder already exists in ${targetDir}`);
|
|
106
186
|
// Try to read existing project info
|
|
107
187
|
const projectYamlPath = (0, path_1.join)(specsDir, 'project', 'project.yaml');
|
|
108
188
|
const requirementsMdPath = (0, path_1.join)(specsDir, 'project', 'requirements.md');
|
|
109
|
-
let projectInfo =
|
|
189
|
+
let projectInfo = `Project "${projectName}" already exists at ${targetDir}`;
|
|
110
190
|
if ((0, fs_1.existsSync)(projectYamlPath)) {
|
|
111
191
|
try {
|
|
112
192
|
const projectData = yaml.load((0, fs_1.readFileSync)(projectYamlPath, 'utf8'));
|
|
113
|
-
projectInfo += `\nš Existing Project
|
|
114
|
-
projectInfo += `\n
|
|
115
|
-
projectInfo += `\n
|
|
116
|
-
projectInfo += `\n
|
|
117
|
-
projectInfo += `\n
|
|
193
|
+
projectInfo += `\n\nš Existing Project Details:`;
|
|
194
|
+
projectInfo += `\n Name: ${projectData.name || 'Unknown'}`;
|
|
195
|
+
projectInfo += `\n Version: ${projectData.version || 'Unknown'}`;
|
|
196
|
+
projectInfo += `\n Language: ${projectData.language || 'Unknown'}`;
|
|
197
|
+
projectInfo += `\n Framework: ${projectData.framework || 'Unknown'}`;
|
|
198
|
+
projectInfo += `\n Author: ${projectData.author || 'Unknown'}`;
|
|
118
199
|
}
|
|
119
|
-
catch
|
|
120
|
-
projectInfo += '\nā ļø Could not read project.yaml';
|
|
200
|
+
catch {
|
|
201
|
+
projectInfo += '\n\nā ļø Could not read project.yaml';
|
|
121
202
|
}
|
|
122
203
|
}
|
|
123
204
|
if ((0, fs_1.existsSync)(requirementsMdPath)) {
|
|
124
205
|
try {
|
|
125
206
|
const requirementsContent = (0, fs_1.readFileSync)(requirementsMdPath, 'utf8');
|
|
126
207
|
const lines = requirementsContent.split('\n').slice(0, 5); // First 5 lines
|
|
127
|
-
projectInfo += `\nš Requirements Preview:\n${lines.join('\n')}`;
|
|
208
|
+
projectInfo += `\n\nš Requirements Preview:\n${lines.map(line => ` ${line}`).join('\n')}`;
|
|
128
209
|
}
|
|
129
|
-
catch
|
|
130
|
-
projectInfo += '\nā ļø Could not read requirements.md';
|
|
210
|
+
catch {
|
|
211
|
+
projectInfo += '\n\nā ļø Could not read requirements.md';
|
|
131
212
|
}
|
|
132
213
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
214
|
+
const existingProjectContent = [
|
|
215
|
+
chalk_1.default.blue('š Initializing SDD project...'),
|
|
216
|
+
'',
|
|
217
|
+
chalk_1.default.red.bold('Project Already Exists'),
|
|
218
|
+
'',
|
|
219
|
+
chalk_1.default.yellow(projectInfo),
|
|
220
|
+
'',
|
|
221
|
+
chalk_1.default.cyan('š” To continue with this project:'),
|
|
222
|
+
chalk_1.default.white(` cd ${targetDir}`),
|
|
223
|
+
chalk_1.default.white(' specpilot validate # Check current specs'),
|
|
224
|
+
chalk_1.default.white(` # Edit ${options.specsName}/project/requirements.md`)
|
|
225
|
+
];
|
|
226
|
+
logger.displayWithLogo(existingProjectContent);
|
|
138
227
|
process.exit(1);
|
|
139
228
|
}
|
|
140
229
|
// Initialize template engine and spec generator
|
|
@@ -147,31 +236,17 @@ async function initCommand(name, options) {
|
|
|
147
236
|
framework,
|
|
148
237
|
targetDir,
|
|
149
238
|
specsName: options.specsName,
|
|
150
|
-
author: developerName
|
|
239
|
+
author: developerName,
|
|
240
|
+
ide,
|
|
241
|
+
mode: 'new',
|
|
242
|
+
projectContext,
|
|
151
243
|
});
|
|
152
|
-
|
|
153
|
-
logger.
|
|
154
|
-
logger.info(`š Specs: ${(0, path_1.join)(targetDir, options.specsName)}`);
|
|
155
|
-
// Show next steps
|
|
156
|
-
console.log(chalk_1.default.cyan(`
|
|
157
|
-
š Next steps to populate your specs with AI:
|
|
158
|
-
1. Open .specs/README.md for full guidance
|
|
159
|
-
2. Copy the onboarding prompt from .specs/development/prompts.md
|
|
160
|
-
3. Paste into your AI agent and run it
|
|
161
|
-
4. Review the generated spec files
|
|
162
|
-
|
|
163
|
-
Your project is now ready for AI-assisted development!`));
|
|
244
|
+
// Show success with logo (includes initialization message and all details)
|
|
245
|
+
logger.displayInitSuccess(projectName, targetDir, (0, path_1.join)(targetDir, options.specsName));
|
|
164
246
|
}
|
|
165
247
|
catch (error) {
|
|
166
|
-
logger.
|
|
248
|
+
logger.displayError('Initialization Failed', error instanceof Error ? error.message : 'Unknown error');
|
|
167
249
|
process.exit(1);
|
|
168
250
|
}
|
|
169
251
|
}
|
|
170
|
-
function getFrameworksForLanguage(language) {
|
|
171
|
-
const frameworks = {
|
|
172
|
-
typescript: ['react', 'express', 'next', 'nest', 'vue', 'angular'],
|
|
173
|
-
python: ['fastapi', 'django', 'flask', 'streamlit']
|
|
174
|
-
};
|
|
175
|
-
return frameworks[language] || [];
|
|
176
|
-
}
|
|
177
252
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAuBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,iBAmBrD"}
|
package/dist/commands/list.js
CHANGED
|
@@ -1,49 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.listCommand = listCommand;
|
|
7
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
-
const templateRegistry_1 = require("../utils/templateRegistry");
|
|
9
4
|
const logger_1 = require("../utils/logger");
|
|
5
|
+
/** Static catalog of supported templates. All produce the same .specs/ file structure. */
|
|
6
|
+
const TEMPLATES = [
|
|
7
|
+
// TypeScript
|
|
8
|
+
{ name: 'generic', language: 'typescript', framework: undefined, description: 'Basic TypeScript project structure', files: ['project.yaml', 'architecture.md', 'requirements.md', 'api.yaml', 'tests.md', 'tasks.md', 'context.md', 'prompts.md', 'docs.md'] },
|
|
9
|
+
{ name: 'react', language: 'typescript', framework: 'react', description: 'React application with modern tooling', files: ['project.yaml', 'architecture.md', 'requirements.md', 'api.yaml', 'tests.md', 'tasks.md', 'context.md', 'prompts.md', 'docs.md'] },
|
|
10
|
+
{ name: 'express', language: 'typescript', framework: 'express', description: 'REST API server setup', files: ['project.yaml', 'architecture.md', 'requirements.md', 'api.yaml', 'tests.md', 'tasks.md', 'context.md', 'prompts.md', 'docs.md'] },
|
|
11
|
+
{ name: 'next', language: 'typescript', framework: 'next', description: 'Next.js full-stack application', files: ['project.yaml', 'architecture.md', 'requirements.md', 'api.yaml', 'tests.md', 'tasks.md', 'context.md', 'prompts.md', 'docs.md'] },
|
|
12
|
+
{ name: 'cli', language: 'typescript', framework: 'cli', description: 'Command-line tool development', files: ['project.yaml', 'architecture.md', 'requirements.md', 'api.yaml', 'tests.md', 'tasks.md', 'context.md', 'prompts.md', 'docs.md'] },
|
|
13
|
+
// Python
|
|
14
|
+
{ name: 'generic', language: 'python', framework: undefined, description: 'Basic Python project structure', files: ['project.yaml', 'architecture.md', 'requirements.md', 'api.yaml', 'tests.md', 'tasks.md', 'context.md', 'prompts.md', 'docs.md'] },
|
|
15
|
+
{ name: 'fastapi', language: 'python', framework: 'fastapi', description: 'Modern API development', files: ['project.yaml', 'architecture.md', 'requirements.md', 'api.yaml', 'tests.md', 'tasks.md', 'context.md', 'prompts.md', 'docs.md'] },
|
|
16
|
+
{ name: 'django', language: 'python', framework: 'django', description: 'Web application framework', files: ['project.yaml', 'architecture.md', 'requirements.md', 'api.yaml', 'tests.md', 'tasks.md', 'context.md', 'prompts.md', 'docs.md'] },
|
|
17
|
+
{ name: 'data-science', language: 'python', framework: 'data-science', description: 'Jupyter, pandas, scikit-learn setup', files: ['project.yaml', 'architecture.md', 'requirements.md', 'api.yaml', 'tests.md', 'tasks.md', 'context.md', 'prompts.md', 'docs.md'] },
|
|
18
|
+
// JavaScript
|
|
19
|
+
{ name: 'generic', language: 'javascript', framework: undefined, description: 'Basic JavaScript project structure', files: ['project.yaml', 'architecture.md', 'requirements.md', 'api.yaml', 'tests.md', 'tasks.md', 'context.md', 'prompts.md', 'docs.md'] },
|
|
20
|
+
{ name: 'react', language: 'javascript', framework: 'react', description: 'React application', files: ['project.yaml', 'architecture.md', 'requirements.md', 'api.yaml', 'tests.md', 'tasks.md', 'context.md', 'prompts.md', 'docs.md'] },
|
|
21
|
+
// Java
|
|
22
|
+
{ name: 'generic', language: 'java', framework: undefined, description: 'Basic Java project structure', files: ['project.yaml', 'architecture.md', 'requirements.md', 'api.yaml', 'tests.md', 'tasks.md', 'context.md', 'prompts.md', 'docs.md'] },
|
|
23
|
+
{ name: 'spring-boot', language: 'java', framework: 'spring-boot', description: 'Spring Boot application', files: ['project.yaml', 'architecture.md', 'requirements.md', 'api.yaml', 'tests.md', 'tasks.md', 'context.md', 'prompts.md', 'docs.md'] },
|
|
24
|
+
];
|
|
10
25
|
async function listCommand(options) {
|
|
11
26
|
const logger = new logger_1.Logger();
|
|
12
27
|
try {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
28
|
+
const templates = options.lang
|
|
29
|
+
? TEMPLATES.filter(t => t.language === options.lang)
|
|
30
|
+
: [...TEMPLATES];
|
|
16
31
|
if (templates.length === 0) {
|
|
17
|
-
logger.
|
|
32
|
+
logger.displayInfo('No Templates Found', 'ā ļø No templates found matching your criteria');
|
|
18
33
|
return;
|
|
19
34
|
}
|
|
20
|
-
|
|
21
|
-
const grouped = templates.reduce((acc, template) => {
|
|
22
|
-
if (!acc[template.language]) {
|
|
23
|
-
acc[template.language] = [];
|
|
24
|
-
}
|
|
25
|
-
acc[template.language].push(template);
|
|
26
|
-
return acc;
|
|
27
|
-
}, {});
|
|
28
|
-
Object.entries(grouped).forEach(([language, langTemplates]) => {
|
|
29
|
-
console.log(chalk_1.default.blue(`\nš¦ ${language.toUpperCase()}`));
|
|
30
|
-
langTemplates.forEach(template => {
|
|
31
|
-
const name = template.framework ?
|
|
32
|
-
`${template.name} (${template.framework})` :
|
|
33
|
-
template.name;
|
|
34
|
-
if (options.verbose) {
|
|
35
|
-
console.log(chalk_1.default.green(` ā ${name}`));
|
|
36
|
-
console.log(chalk_1.default.gray(` Description: ${template.description}`));
|
|
37
|
-
console.log(chalk_1.default.gray(` Files: ${template.files.join(', ')}`));
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
console.log(chalk_1.default.green(` ā ${name} - ${template.description}`));
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
});
|
|
35
|
+
logger.displayTemplates(templates, options.verbose);
|
|
44
36
|
}
|
|
45
37
|
catch (error) {
|
|
46
|
-
logger.
|
|
38
|
+
logger.displayError('Failed to List Templates', error instanceof Error ? error.message : 'Unknown error');
|
|
47
39
|
process.exit(1);
|
|
48
40
|
}
|
|
49
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAIA,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,iBAoF3D"}
|
package/dist/commands/migrate.js
CHANGED
|
@@ -55,21 +55,26 @@ async function migrateCommand(options) {
|
|
|
55
55
|
to: options.to
|
|
56
56
|
});
|
|
57
57
|
logger.success('ā
Migration completed successfully!');
|
|
58
|
-
// Show migration summary
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
// Show migration summary with logo
|
|
59
|
+
const summaryContent = [
|
|
60
|
+
chalk_1.default.blue.bold('Migration Summary'),
|
|
61
|
+
'',
|
|
62
|
+
chalk_1.default.white(`Files migrated: ${results.filesMigrated}`),
|
|
63
|
+
chalk_1.default.white(`Files merged: ${results.filesMerged}`),
|
|
64
|
+
chalk_1.default.white(`Files created: ${results.filesCreated}`)
|
|
65
|
+
];
|
|
63
66
|
if (results.warnings.length > 0) {
|
|
64
|
-
|
|
67
|
+
summaryContent.push('');
|
|
68
|
+
summaryContent.push(chalk_1.default.yellow('ā ļø Warnings:'));
|
|
65
69
|
results.warnings.forEach((warning) => {
|
|
66
|
-
|
|
70
|
+
summaryContent.push(chalk_1.default.yellow(` ⢠${warning}`));
|
|
67
71
|
});
|
|
68
72
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
+
summaryContent.push('');
|
|
74
|
+
summaryContent.push(chalk_1.default.cyan('š Next steps:'));
|
|
75
|
+
summaryContent.push(chalk_1.default.white(' specpilot validate # Validate migrated structure'));
|
|
76
|
+
summaryContent.push(chalk_1.default.white(' # Review .specs/ files and update as needed'));
|
|
77
|
+
logger.displayWithLogo(summaryContent);
|
|
73
78
|
}
|
|
74
79
|
catch (error) {
|
|
75
80
|
logger.error(`ā Migration failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specify.d.ts","sourceRoot":"","sources":["../../src/commands/specify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"specify.d.ts","sourceRoot":"","sources":["../../src/commands/specify.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAUD,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,cAAc,iBA0J5F"}
|