specpilot 1.0.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/LICENSE +21 -0
- package/README.md +430 -0
- package/cli.js +3 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +67 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +72 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +6 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +53 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/migrate.d.ts +8 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +55 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/specify.d.ts +8 -0
- package/dist/commands/specify.d.ts.map +1 -0
- package/dist/commands/specify.js +194 -0
- package/dist/commands/specify.js.map +1 -0
- package/dist/commands/validate.d.ts +7 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +54 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +28 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/projectMigrator.d.ts +25 -0
- package/dist/utils/projectMigrator.d.ts.map +1 -0
- package/dist/utils/projectMigrator.js +227 -0
- package/dist/utils/projectMigrator.js.map +1 -0
- package/dist/utils/specGenerator.d.ts +45 -0
- package/dist/utils/specGenerator.d.ts.map +1 -0
- package/dist/utils/specGenerator.js +1109 -0
- package/dist/utils/specGenerator.js.map +1 -0
- package/dist/utils/specValidator.d.ts +33 -0
- package/dist/utils/specValidator.d.ts.map +1 -0
- package/dist/utils/specValidator.js +425 -0
- package/dist/utils/specValidator.js.map +1 -0
- package/dist/utils/templateEngine.d.ts +22 -0
- package/dist/utils/templateEngine.d.ts.map +1 -0
- package/dist/utils/templateEngine.js +213 -0
- package/dist/utils/templateEngine.js.map +1 -0
- package/dist/utils/templateRegistry.d.ts +14 -0
- package/dist/utils/templateRegistry.d.ts.map +1 -0
- package/dist/utils/templateRegistry.js +101 -0
- package/dist/utils/templateRegistry.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProjectMigrator = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
class ProjectMigrator {
|
|
7
|
+
async validateSource(projectDir, sourceType) {
|
|
8
|
+
const sourceDir = (0, path_1.join)(projectDir, this.getSourceDirName(sourceType));
|
|
9
|
+
return (0, fs_1.existsSync)(sourceDir);
|
|
10
|
+
}
|
|
11
|
+
async createBackup(projectDir) {
|
|
12
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
13
|
+
const backupDir = (0, path_1.join)(projectDir, `backup-${timestamp}`);
|
|
14
|
+
(0, fs_1.mkdirSync)(backupDir, { recursive: true });
|
|
15
|
+
// Copy all files and directories
|
|
16
|
+
const items = (0, fs_1.readdirSync)(projectDir);
|
|
17
|
+
for (const item of items) {
|
|
18
|
+
if (item.startsWith('backup-'))
|
|
19
|
+
continue; // Skip existing backups
|
|
20
|
+
const sourcePath = (0, path_1.join)(projectDir, item);
|
|
21
|
+
const targetPath = (0, path_1.join)(backupDir, item);
|
|
22
|
+
const stat = (0, fs_1.statSync)(sourcePath);
|
|
23
|
+
if (stat.isDirectory()) {
|
|
24
|
+
this.copyDirectory(sourcePath, targetPath);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
(0, fs_1.copyFileSync)(sourcePath, targetPath);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async migrate(projectDir, options) {
|
|
32
|
+
const result = {
|
|
33
|
+
filesMigrated: 0,
|
|
34
|
+
filesMerged: 0,
|
|
35
|
+
filesCreated: 0,
|
|
36
|
+
warnings: []
|
|
37
|
+
};
|
|
38
|
+
const sourceDir = (0, path_1.join)(projectDir, this.getSourceDirName(options.from));
|
|
39
|
+
const targetDir = (0, path_1.join)(projectDir, this.getTargetDirName(options.to));
|
|
40
|
+
if (!(0, fs_1.existsSync)(sourceDir)) {
|
|
41
|
+
throw new Error(`Source directory ${sourceDir} does not exist`);
|
|
42
|
+
}
|
|
43
|
+
// Create target directory
|
|
44
|
+
(0, fs_1.mkdirSync)(targetDir, { recursive: true });
|
|
45
|
+
// Migrate files based on source type
|
|
46
|
+
if (options.from === 'complex' || options.from === 'project-spec') {
|
|
47
|
+
await this.migrateFromComplex(sourceDir, targetDir, result);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
await this.migrateFromSimple(sourceDir, targetDir, result);
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
getSourceDirName(sourceType) {
|
|
55
|
+
switch (sourceType) {
|
|
56
|
+
case 'complex':
|
|
57
|
+
case 'project-spec':
|
|
58
|
+
return '.project-spec';
|
|
59
|
+
case 'simple':
|
|
60
|
+
return '.specs';
|
|
61
|
+
default:
|
|
62
|
+
return sourceType;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
getTargetDirName(targetType) {
|
|
66
|
+
switch (targetType) {
|
|
67
|
+
case 'simple':
|
|
68
|
+
return '.specs';
|
|
69
|
+
case 'complex':
|
|
70
|
+
return '.project-spec';
|
|
71
|
+
default:
|
|
72
|
+
return targetType;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async migrateFromComplex(sourceDir, targetDir, result) {
|
|
76
|
+
const files = (0, fs_1.readdirSync)(sourceDir, { recursive: true });
|
|
77
|
+
for (const file of files) {
|
|
78
|
+
if (typeof file !== 'string')
|
|
79
|
+
continue;
|
|
80
|
+
const sourcePath = (0, path_1.join)(sourceDir, file);
|
|
81
|
+
const stat = (0, fs_1.statSync)(sourcePath);
|
|
82
|
+
if (stat.isDirectory())
|
|
83
|
+
continue; // Skip directories
|
|
84
|
+
const fileName = file.split('/').pop() || file;
|
|
85
|
+
const targetPath = this.mapComplexToSimpleFile(fileName, targetDir);
|
|
86
|
+
if (targetPath) {
|
|
87
|
+
try {
|
|
88
|
+
// Check if target file already exists
|
|
89
|
+
if ((0, fs_1.existsSync)(targetPath)) {
|
|
90
|
+
await this.mergeFileContent(sourcePath, targetPath);
|
|
91
|
+
result.filesMerged++;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
(0, fs_1.copyFileSync)(sourcePath, targetPath);
|
|
95
|
+
result.filesMigrated++;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
result.warnings.push(`Failed to migrate ${file}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Create any missing files
|
|
104
|
+
await this.createMissingSimpleFiles(targetDir, result);
|
|
105
|
+
}
|
|
106
|
+
async migrateFromSimple(sourceDir, targetDir, result) {
|
|
107
|
+
// For now, just copy all files
|
|
108
|
+
const files = (0, fs_1.readdirSync)(sourceDir);
|
|
109
|
+
for (const file of files) {
|
|
110
|
+
const sourcePath = (0, path_1.join)(sourceDir, file);
|
|
111
|
+
const targetPath = (0, path_1.join)(targetDir, file);
|
|
112
|
+
if ((0, fs_1.existsSync)(targetPath)) {
|
|
113
|
+
result.warnings.push(`Target file ${file} already exists, skipping`);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
(0, fs_1.copyFileSync)(sourcePath, targetPath);
|
|
117
|
+
result.filesMigrated++;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
mapComplexToSimpleFile(fileName, targetDir) {
|
|
121
|
+
const mapping = {
|
|
122
|
+
// Direct mappings
|
|
123
|
+
'project.yaml': (0, path_1.join)(targetDir, 'project.yaml'),
|
|
124
|
+
'architecture.md': (0, path_1.join)(targetDir, 'architecture.md'),
|
|
125
|
+
'requirements.md': (0, path_1.join)(targetDir, 'requirements.md'),
|
|
126
|
+
'api.yaml': (0, path_1.join)(targetDir, 'api.yaml'),
|
|
127
|
+
'tests.md': (0, path_1.join)(targetDir, 'tests.md'),
|
|
128
|
+
'tasks.md': (0, path_1.join)(targetDir, 'tasks.md'),
|
|
129
|
+
'context.md': (0, path_1.join)(targetDir, 'context.md'),
|
|
130
|
+
'prompts.md': (0, path_1.join)(targetDir, 'prompts.md'),
|
|
131
|
+
'docs.md': (0, path_1.join)(targetDir, 'docs.md'),
|
|
132
|
+
// Complex structure mappings
|
|
133
|
+
'config/project.yaml': (0, path_1.join)(targetDir, 'project.yaml'),
|
|
134
|
+
'specs/architecture/architecture.md': (0, path_1.join)(targetDir, 'architecture.md'),
|
|
135
|
+
'specs/features/requirements.md': (0, path_1.join)(targetDir, 'requirements.md'),
|
|
136
|
+
'specs/technical/api.yaml': (0, path_1.join)(targetDir, 'api.yaml'),
|
|
137
|
+
'specs/technical/tests.md': (0, path_1.join)(targetDir, 'tests.md'),
|
|
138
|
+
'tools/tasks.md': (0, path_1.join)(targetDir, 'tasks.md'),
|
|
139
|
+
'docs/context.md': (0, path_1.join)(targetDir, 'context.md'),
|
|
140
|
+
'docs/prompts.md': (0, path_1.join)(targetDir, 'prompts.md'),
|
|
141
|
+
'docs/docs.md': (0, path_1.join)(targetDir, 'docs.md'),
|
|
142
|
+
};
|
|
143
|
+
return mapping[fileName] || null;
|
|
144
|
+
}
|
|
145
|
+
async mergeFileContent(sourcePath, targetPath) {
|
|
146
|
+
const sourceContent = (0, fs_1.readFileSync)(sourcePath, 'utf-8');
|
|
147
|
+
const targetContent = (0, fs_1.readFileSync)(targetPath, 'utf-8');
|
|
148
|
+
// Simple merge strategy: append source content to target with separator
|
|
149
|
+
const mergedContent = targetContent + '\n\n---\n\n' + sourceContent;
|
|
150
|
+
(0, fs_1.writeFileSync)(targetPath, mergedContent);
|
|
151
|
+
}
|
|
152
|
+
async createMissingSimpleFiles(targetDir, result) {
|
|
153
|
+
const requiredFiles = [
|
|
154
|
+
'project.yaml',
|
|
155
|
+
'architecture.md',
|
|
156
|
+
'requirements.md',
|
|
157
|
+
'api.yaml',
|
|
158
|
+
'tests.md',
|
|
159
|
+
'tasks.md',
|
|
160
|
+
'context.md',
|
|
161
|
+
'prompts.md',
|
|
162
|
+
'docs.md'
|
|
163
|
+
];
|
|
164
|
+
for (const file of requiredFiles) {
|
|
165
|
+
const filePath = (0, path_1.join)(targetDir, file);
|
|
166
|
+
if (!(0, fs_1.existsSync)(filePath)) {
|
|
167
|
+
await this.createDefaultFile(filePath, file);
|
|
168
|
+
result.filesCreated++;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async createDefaultFile(filePath, fileName) {
|
|
173
|
+
let content = '';
|
|
174
|
+
switch (fileName) {
|
|
175
|
+
case 'project.yaml':
|
|
176
|
+
content = `# Project Configuration
|
|
177
|
+
name: "migrated-project"
|
|
178
|
+
version: "1.0.0"
|
|
179
|
+
language: "typescript"
|
|
180
|
+
description: "Migrated from complex structure"
|
|
181
|
+
|
|
182
|
+
rules:
|
|
183
|
+
- "MANDATE: Update .specs/prompts.md with ALL AI interactions and development prompts by default"
|
|
184
|
+
- "MANDATE: Maintain chronological prompt history for complete development traceability"`;
|
|
185
|
+
break;
|
|
186
|
+
case 'prompts.md':
|
|
187
|
+
content = `# Development Prompts Log
|
|
188
|
+
|
|
189
|
+
## Overview
|
|
190
|
+
This file contains ALL AI interactions and development prompts, maintaining complete traceability of the development process.
|
|
191
|
+
|
|
192
|
+
**🚨 MANDATE**: This file MUST be updated with every AI interaction during development.
|
|
193
|
+
|
|
194
|
+
## Migration Note
|
|
195
|
+
This file was created during migration from complex to simplified structure.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
*Last updated: ${new Date().toISOString().split('T')[0]}*`;
|
|
199
|
+
break;
|
|
200
|
+
default:
|
|
201
|
+
content = `# ${fileName.replace('.md', '').replace('.yaml', '')}
|
|
202
|
+
|
|
203
|
+
[Content migrated from complex structure]
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
*Last updated: ${new Date().toISOString().split('T')[0]}*`;
|
|
207
|
+
}
|
|
208
|
+
(0, fs_1.writeFileSync)(filePath, content);
|
|
209
|
+
}
|
|
210
|
+
copyDirectory(source, target) {
|
|
211
|
+
(0, fs_1.mkdirSync)(target, { recursive: true });
|
|
212
|
+
const files = (0, fs_1.readdirSync)(source);
|
|
213
|
+
for (const file of files) {
|
|
214
|
+
const sourcePath = (0, path_1.join)(source, file);
|
|
215
|
+
const targetPath = (0, path_1.join)(target, file);
|
|
216
|
+
const stat = (0, fs_1.statSync)(sourcePath);
|
|
217
|
+
if (stat.isDirectory()) {
|
|
218
|
+
this.copyDirectory(sourcePath, targetPath);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
(0, fs_1.copyFileSync)(sourcePath, targetPath);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
exports.ProjectMigrator = ProjectMigrator;
|
|
227
|
+
//# sourceMappingURL=projectMigrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectMigrator.js","sourceRoot":"","sources":["../../src/utils/projectMigrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { TemplateEngine } from './templateEngine';
|
|
2
|
+
export interface SpecGeneratorOptions {
|
|
3
|
+
projectName: string;
|
|
4
|
+
language: string;
|
|
5
|
+
framework?: string;
|
|
6
|
+
targetDir: string;
|
|
7
|
+
specsName: string;
|
|
8
|
+
author?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class SpecGenerator {
|
|
12
|
+
private templateEngine;
|
|
13
|
+
constructor(templateEngine: TemplateEngine);
|
|
14
|
+
generateSpecs(options: SpecGeneratorOptions): Promise<void>;
|
|
15
|
+
private generateProjectYaml;
|
|
16
|
+
private generateArchitectureMd;
|
|
17
|
+
private generateRequirementsMd;
|
|
18
|
+
private getTechnicalRequirements;
|
|
19
|
+
private generateApiYaml;
|
|
20
|
+
private generateTestsMd;
|
|
21
|
+
private getTestFramework;
|
|
22
|
+
private getIntegrationTestFramework;
|
|
23
|
+
private getE2ETestFramework;
|
|
24
|
+
private generateTasksMd;
|
|
25
|
+
private generateContextMd;
|
|
26
|
+
private generatePromptsMd;
|
|
27
|
+
private generateDocsMd;
|
|
28
|
+
private getPrerequisites;
|
|
29
|
+
private getInstallCommand;
|
|
30
|
+
private getEnvironmentSetup;
|
|
31
|
+
private getCodeStandards;
|
|
32
|
+
private getProjectStructure;
|
|
33
|
+
private getAvailableScripts;
|
|
34
|
+
private getDatabaseUrl;
|
|
35
|
+
private getAuthenticationDocs;
|
|
36
|
+
private getMigrationCommands;
|
|
37
|
+
private getBackupCommands;
|
|
38
|
+
private getBuildCommand;
|
|
39
|
+
private getDeployCommand;
|
|
40
|
+
private getTroubleshootingCommands;
|
|
41
|
+
private getLanguageDocsUrl;
|
|
42
|
+
private getFrameworkDocsUrl;
|
|
43
|
+
private getLintingTools;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=specGenerator.d.ts.map
|
|
@@ -0,0 +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;YA0BnD,mBAAmB;YAUnB,sBAAsB;YAUtB,sBAAsB;IA6EpC,OAAO,CAAC,wBAAwB;YAgClB,eAAe;YAmJf,eAAe;IAsG7B,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,mBAAmB;YAOb,eAAe;YA+Ef,iBAAiB;YAgGjB,iBAAiB;YAsJjB,cAAc;IA4M5B,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,mBAAmB;IAgC3B,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,eAAe;CAMxB"}
|