mycontext-cli 1.0.95 → 2.0.1
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 +268 -295
- package/dist/agents/implementations/ClaudeAgentWorkflow.d.ts.map +1 -1
- package/dist/agents/implementations/ClaudeAgentWorkflow.js +38 -3
- package/dist/agents/implementations/ClaudeAgentWorkflow.js.map +1 -1
- package/dist/agents/implementations/WorkflowAgent.d.ts +8 -0
- package/dist/agents/implementations/WorkflowAgent.d.ts.map +1 -1
- package/dist/agents/implementations/WorkflowAgent.js +105 -11
- package/dist/agents/implementations/WorkflowAgent.js.map +1 -1
- package/dist/agents/interfaces/SubAgent.d.ts +5 -0
- package/dist/agents/interfaces/SubAgent.d.ts.map +1 -1
- package/dist/commands/build-app.d.ts +5 -0
- package/dist/commands/build-app.d.ts.map +1 -1
- package/dist/commands/build-app.js +127 -4
- package/dist/commands/build-app.js.map +1 -1
- package/dist/commands/compile-prd.d.ts.map +1 -1
- package/dist/commands/compile-prd.js +18 -54
- package/dist/commands/compile-prd.js.map +1 -1
- package/dist/commands/enhance.d.ts +21 -0
- package/dist/commands/enhance.d.ts.map +1 -1
- package/dist/commands/enhance.js +155 -12
- package/dist/commands/enhance.js.map +1 -1
- package/dist/commands/generate-components.d.ts +43 -0
- package/dist/commands/generate-components.d.ts.map +1 -1
- package/dist/commands/generate-components.js +270 -0
- package/dist/commands/generate-components.js.map +1 -1
- package/dist/constants/fileNames.d.ts +68 -0
- package/dist/constants/fileNames.d.ts.map +1 -0
- package/dist/constants/fileNames.js +102 -0
- package/dist/constants/fileNames.js.map +1 -0
- package/dist/interfaces/AIClient.d.ts +198 -0
- package/dist/interfaces/AIClient.d.ts.map +1 -0
- package/dist/interfaces/AIClient.js +40 -0
- package/dist/interfaces/AIClient.js.map +1 -0
- package/dist/package.json +4 -3
- package/dist/types/index.d.ts +423 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/agentDefinitions.d.ts +60 -0
- package/dist/utils/agentDefinitions.d.ts.map +1 -0
- package/dist/utils/agentDefinitions.js +344 -0
- package/dist/utils/agentDefinitions.js.map +1 -0
- package/dist/utils/aiClientFactory.d.ts +93 -0
- package/dist/utils/aiClientFactory.d.ts.map +1 -0
- package/dist/utils/aiClientFactory.js +290 -0
- package/dist/utils/aiClientFactory.js.map +1 -0
- package/dist/utils/aiClientRouter.d.ts +121 -0
- package/dist/utils/aiClientRouter.d.ts.map +1 -0
- package/dist/utils/aiClientRouter.js +401 -0
- package/dist/utils/aiClientRouter.js.map +1 -0
- package/dist/utils/buildValidator.d.ts +72 -0
- package/dist/utils/buildValidator.d.ts.map +1 -0
- package/dist/utils/buildValidator.js +338 -0
- package/dist/utils/buildValidator.js.map +1 -0
- package/dist/utils/claudeAgentClient.d.ts +79 -11
- package/dist/utils/claudeAgentClient.d.ts.map +1 -1
- package/dist/utils/claudeAgentClient.js +306 -1
- package/dist/utils/claudeAgentClient.js.map +1 -1
- package/dist/utils/claudeClient.d.ts +7 -3
- package/dist/utils/claudeClient.d.ts.map +1 -1
- package/dist/utils/claudeClient.js +28 -5
- package/dist/utils/claudeClient.js.map +1 -1
- package/dist/utils/completeArchitectureEngine.d.ts +67 -0
- package/dist/utils/completeArchitectureEngine.d.ts.map +1 -0
- package/dist/utils/completeArchitectureEngine.js +329 -0
- package/dist/utils/completeArchitectureEngine.js.map +1 -0
- package/dist/utils/contextLoader.d.ts +1 -12
- package/dist/utils/contextLoader.d.ts.map +1 -1
- package/dist/utils/contextLoader.js +29 -150
- package/dist/utils/contextLoader.js.map +1 -1
- package/dist/utils/contextManager.d.ts +2 -12
- package/dist/utils/contextManager.d.ts.map +1 -1
- package/dist/utils/contextManager.js +11 -6
- package/dist/utils/contextManager.js.map +1 -1
- package/dist/utils/mcpTools.d.ts +164 -0
- package/dist/utils/mcpTools.d.ts.map +1 -0
- package/dist/utils/mcpTools.js +385 -0
- package/dist/utils/mcpTools.js.map +1 -0
- package/dist/utils/progressTracker.d.ts +121 -0
- package/dist/utils/progressTracker.d.ts.map +1 -0
- package/dist/utils/progressTracker.js +334 -0
- package/dist/utils/progressTracker.js.map +1 -0
- package/dist/utils/routeGenerator.d.ts +56 -0
- package/dist/utils/routeGenerator.d.ts.map +1 -0
- package/dist/utils/routeGenerator.js +231 -0
- package/dist/utils/routeGenerator.js.map +1 -0
- package/dist/utils/serverActionGenerator.d.ts +56 -0
- package/dist/utils/serverActionGenerator.d.ts.map +1 -0
- package/dist/utils/serverActionGenerator.js +258 -0
- package/dist/utils/serverActionGenerator.js.map +1 -0
- package/dist/utils/streamingHandler.d.ts +98 -0
- package/dist/utils/streamingHandler.d.ts.map +1 -0
- package/dist/utils/streamingHandler.js +259 -0
- package/dist/utils/streamingHandler.js.map +1 -0
- package/dist/utils/validationGates.d.ts +58 -0
- package/dist/utils/validationGates.d.ts.map +1 -0
- package/dist/utils/validationGates.js +390 -0
- package/dist/utils/validationGates.js.map +1 -0
- package/package.json +4 -3
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.BuildAppCommand = void 0;
|
|
8
8
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
10
11
|
const WorkflowAgent_1 = require("../agents/implementations/WorkflowAgent");
|
|
11
12
|
class BuildAppCommand {
|
|
12
13
|
constructor() {
|
|
@@ -15,13 +16,51 @@ class BuildAppCommand {
|
|
|
15
16
|
// The new agent-based workflow provides better coordination, error handling, and user interaction
|
|
16
17
|
}
|
|
17
18
|
async execute(options) {
|
|
18
|
-
const { description, output = "mycontext-app", framework = "nextjs", withTests = false, verbose = false, existing = false, migrate = false, interactive = false, skipValidation = false, maxRetries = 3, } = options;
|
|
19
|
+
const { description, output = "mycontext-app", framework = "nextjs", withTests = false, verbose = false, existing = false, migrate = false, interactive = false, skipValidation = false, maxRetries = 3, completeArchitecture = false, architectureType = "nextjs-app-router", serverActions = true, routes = true, } = options;
|
|
19
20
|
console.log(chalk_1.default.blue.bold("🚀 Building Complete App with MyContext\n"));
|
|
20
21
|
console.log(chalk_1.default.gray(`Description: ${description}`));
|
|
21
22
|
console.log(chalk_1.default.gray(`Output: ${output}`));
|
|
22
23
|
console.log(chalk_1.default.gray(`Framework: ${framework}`));
|
|
23
24
|
console.log(chalk_1.default.gray(`Interactive Mode: ${interactive ? "Enabled" : "Disabled"}`));
|
|
24
|
-
console.log(chalk_1.default.gray(`Max Retries: ${maxRetries}
|
|
25
|
+
console.log(chalk_1.default.gray(`Max Retries: ${maxRetries}`));
|
|
26
|
+
if (completeArchitecture) {
|
|
27
|
+
console.log(chalk_1.default.blue.bold("\n🏗️ Complete Architecture Mode"));
|
|
28
|
+
console.log(chalk_1.default.gray(`Architecture Type: ${architectureType}`));
|
|
29
|
+
console.log(chalk_1.default.gray(`Server Actions: ${serverActions ? "Yes" : "No"}`));
|
|
30
|
+
console.log(chalk_1.default.gray(`Routes: ${routes ? "Yes" : "No"}`));
|
|
31
|
+
}
|
|
32
|
+
console.log();
|
|
33
|
+
// Interactive prompts for complete architecture
|
|
34
|
+
let finalCompleteArchitecture = completeArchitecture;
|
|
35
|
+
let finalArchitectureType = architectureType;
|
|
36
|
+
if (interactive && !completeArchitecture) {
|
|
37
|
+
const architecturePrompts = await (0, prompts_1.default)([
|
|
38
|
+
{
|
|
39
|
+
type: "confirm",
|
|
40
|
+
name: "useCompleteArch",
|
|
41
|
+
message: "Generate complete architecture (components + actions + routes)?",
|
|
42
|
+
initial: true,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: (prev) => (prev ? "select" : null),
|
|
46
|
+
name: "archType",
|
|
47
|
+
message: "Choose architecture type:",
|
|
48
|
+
choices: [
|
|
49
|
+
{ title: "Next.js App Router (Recommended)", value: "nextjs-app-router" },
|
|
50
|
+
{ title: "Next.js Pages Router", value: "nextjs-pages" },
|
|
51
|
+
{ title: "React SPA", value: "react-spa" },
|
|
52
|
+
],
|
|
53
|
+
initial: 0,
|
|
54
|
+
},
|
|
55
|
+
]);
|
|
56
|
+
if (architecturePrompts.useCompleteArch) {
|
|
57
|
+
finalCompleteArchitecture = true;
|
|
58
|
+
finalArchitectureType = architecturePrompts.archType || architectureType;
|
|
59
|
+
console.log(chalk_1.default.blue.bold("\n🏗️ Complete Architecture Mode Enabled"));
|
|
60
|
+
console.log(chalk_1.default.gray(`Architecture Type: ${finalArchitectureType}`));
|
|
61
|
+
console.log();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
25
64
|
try {
|
|
26
65
|
// Use the new WorkflowAgent for agent-based, interactive workflow
|
|
27
66
|
const workflowInput = {
|
|
@@ -32,18 +71,35 @@ class BuildAppCommand {
|
|
|
32
71
|
interactive,
|
|
33
72
|
skipValidation,
|
|
34
73
|
maxRetries,
|
|
74
|
+
// Complete Architecture Options
|
|
75
|
+
completeArchitecture: finalCompleteArchitecture,
|
|
76
|
+
architectureType: finalArchitectureType,
|
|
77
|
+
generateServerActions: serverActions,
|
|
78
|
+
generateRoutes: routes,
|
|
79
|
+
selfDocumenting: finalCompleteArchitecture, // Auto-enable if complete architecture
|
|
35
80
|
};
|
|
36
81
|
const result = await this.workflowAgent.run(workflowInput);
|
|
37
82
|
if (result.success) {
|
|
38
83
|
console.log(chalk_1.default.green.bold("\n✅ App built successfully with MyContext!"));
|
|
39
84
|
console.log(chalk_1.default.yellow(`\n📁 Output directory: ${path_1.default.resolve(result.projectPath)}`));
|
|
40
|
-
|
|
85
|
+
if (finalCompleteArchitecture) {
|
|
86
|
+
console.log(chalk_1.default.green.bold("\n🏗️ Complete Architecture Generated:"));
|
|
87
|
+
console.log(chalk_1.default.gray(` ✅ Components with self-documentation`));
|
|
88
|
+
if (serverActions) {
|
|
89
|
+
console.log(chalk_1.default.gray(` ✅ Server actions in actions/`));
|
|
90
|
+
}
|
|
91
|
+
if (routes) {
|
|
92
|
+
console.log(chalk_1.default.gray(` ✅ Next.js routes in app/`));
|
|
93
|
+
}
|
|
94
|
+
console.log(chalk_1.default.gray(` ✅ Architecture plan in .mycontext/`));
|
|
95
|
+
}
|
|
96
|
+
console.log(chalk_1.default.yellow(`\n🚀 To start the app:`));
|
|
41
97
|
console.log(chalk_1.default.gray(` cd ${result.projectPath}`));
|
|
42
98
|
console.log(chalk_1.default.gray(` pnpm dev`));
|
|
43
99
|
console.log(chalk_1.default.yellow(`\n🌐 To preview:`));
|
|
44
100
|
console.log(chalk_1.default.gray(` mycontext preview components --project ${result.projectPath}`));
|
|
45
101
|
// Show workflow statistics
|
|
46
|
-
if (interactive) {
|
|
102
|
+
if (interactive || verbose) {
|
|
47
103
|
console.log(chalk_1.default.blue(`\n📊 Workflow Statistics:`));
|
|
48
104
|
console.log(chalk_1.default.gray(` • Completed Steps: ${result.completedSteps.length}`));
|
|
49
105
|
console.log(chalk_1.default.gray(` • User Interactions: ${result.userInteractions}`));
|
|
@@ -73,9 +129,76 @@ class BuildAppCommand {
|
|
|
73
129
|
console.log(chalk_1.default.gray(` • Verify API keys are configured (optional)`));
|
|
74
130
|
console.log(chalk_1.default.gray(` • Review the generated files in .mycontext/`));
|
|
75
131
|
console.log(chalk_1.default.gray(` • Try running individual commands manually`));
|
|
132
|
+
if (finalCompleteArchitecture) {
|
|
133
|
+
console.log(chalk_1.default.yellow(`\n🏗️ Complete Architecture Troubleshooting:`));
|
|
134
|
+
console.log(chalk_1.default.gray(` • Ensure component list exists (.mycontext/04-component-list.json)`));
|
|
135
|
+
console.log(chalk_1.default.gray(` • Check that PRD and context files are generated`));
|
|
136
|
+
console.log(chalk_1.default.gray(` • Try basic generation first without --complete-architecture`));
|
|
137
|
+
console.log(chalk_1.default.gray(` • Review architecture plan in .mycontext/architecture-plan.json`));
|
|
138
|
+
}
|
|
76
139
|
throw error;
|
|
77
140
|
}
|
|
78
141
|
}
|
|
142
|
+
// Help text method
|
|
143
|
+
static getHelpText() {
|
|
144
|
+
return `
|
|
145
|
+
${chalk_1.default.blue.bold("🚀 MyContext Build App Command")}
|
|
146
|
+
|
|
147
|
+
${chalk_1.default.yellow("Usage:")}
|
|
148
|
+
mycontext build-app --description "<description>" [options]
|
|
149
|
+
|
|
150
|
+
${chalk_1.default.yellow("Basic Options:")}
|
|
151
|
+
--description <desc> Application description (required)
|
|
152
|
+
--output <dir> Output directory (default: mycontext-app)
|
|
153
|
+
--framework <name> Framework: nextjs|react|vue|angular (default: nextjs)
|
|
154
|
+
--with-tests Include test generation
|
|
155
|
+
--interactive Interactive mode with prompts
|
|
156
|
+
--verbose Detailed output
|
|
157
|
+
--max-retries <n> Maximum retry attempts (default: 3)
|
|
158
|
+
--skip-validation Skip validation steps
|
|
159
|
+
|
|
160
|
+
${chalk_1.default.yellow("🏗️ Complete Architecture Options:")}
|
|
161
|
+
--complete-architecture Generate full-stack architecture
|
|
162
|
+
--architecture-type nextjs-app-router (default) | nextjs-pages | react-spa
|
|
163
|
+
--server-actions Generate server actions (default: true with --complete-architecture)
|
|
164
|
+
--routes Generate Next.js routes (default: true with --complete-architecture)
|
|
165
|
+
|
|
166
|
+
${chalk_1.default.yellow("📖 Examples:")}
|
|
167
|
+
${chalk_1.default.gray("# Basic build")}
|
|
168
|
+
${chalk_1.default.cyan("mycontext build-app --description \"E-commerce platform\"")}
|
|
169
|
+
|
|
170
|
+
${chalk_1.default.gray("# Complete architecture")}
|
|
171
|
+
${chalk_1.default.cyan("mycontext build-app --description \"E-commerce platform\" --complete-architecture")}
|
|
172
|
+
|
|
173
|
+
${chalk_1.default.gray("# Interactive with architecture")}
|
|
174
|
+
${chalk_1.default.cyan("mycontext build-app --description \"E-commerce platform\" --interactive")}
|
|
175
|
+
|
|
176
|
+
${chalk_1.default.gray("# Specific architecture type")}
|
|
177
|
+
${chalk_1.default.cyan("mycontext build-app --description \"Blog\" --complete-architecture --architecture-type nextjs-pages")}
|
|
178
|
+
|
|
179
|
+
${chalk_1.default.yellow("🎯 What Gets Generated:")}
|
|
180
|
+
|
|
181
|
+
${chalk_1.default.gray("Basic Mode:")}
|
|
182
|
+
• Project structure
|
|
183
|
+
• Context files (PRD, types, brand)
|
|
184
|
+
• Basic React components
|
|
185
|
+
• Component documentation
|
|
186
|
+
|
|
187
|
+
${chalk_1.default.gray("Complete Architecture Mode:")}
|
|
188
|
+
• Everything from Basic Mode, plus:
|
|
189
|
+
• Server actions with validation
|
|
190
|
+
• Next.js App Router routes
|
|
191
|
+
• Self-documenting components
|
|
192
|
+
• Complete architecture plan
|
|
193
|
+
• Production-ready structure
|
|
194
|
+
|
|
195
|
+
${chalk_1.default.yellow("💡 Tips:")}
|
|
196
|
+
• Use ${chalk_1.default.cyan("--interactive")} for guided setup
|
|
197
|
+
• Use ${chalk_1.default.cyan("--complete-architecture")} for full-stack apps
|
|
198
|
+
• Review generated files in .mycontext/ directory
|
|
199
|
+
• Check architecture-plan.json for complete overview
|
|
200
|
+
`;
|
|
201
|
+
}
|
|
79
202
|
}
|
|
80
203
|
exports.BuildAppCommand = BuildAppCommand;
|
|
81
204
|
//# sourceMappingURL=build-app.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-app.js","sourceRoot":"","sources":["../../src/commands/build-app.ts"],"names":[],"mappings":";;;;;;;AAEA,kDAA0B;AAE1B,gDAAwB;AAExB,2EAAwE;
|
|
1
|
+
{"version":3,"file":"build-app.js","sourceRoot":"","sources":["../../src/commands/build-app.ts"],"names":[],"mappings":";;;;;;;AAEA,kDAA0B;AAE1B,gDAAwB;AAExB,sDAA8B;AAC9B,2EAAwE;AAqBxE,MAAa,eAAe;IAA5B;QACU,kBAAa,GAAG,IAAI,6BAAa,EAAE,CAAC;QA0P5C,yEAAyE;QACzE,kGAAkG;IACpG,CAAC;IA1PC,KAAK,CAAC,OAAO,CAAC,OAAwB;QACpC,MAAM,EACJ,WAAW,EACX,MAAM,GAAG,eAAe,EACxB,SAAS,GAAG,QAAQ,EACpB,SAAS,GAAG,KAAK,EACjB,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,EACf,WAAW,GAAG,KAAK,EACnB,cAAc,GAAG,KAAK,EACtB,UAAU,GAAG,CAAC,EACd,oBAAoB,GAAG,KAAK,EAC5B,gBAAgB,GAAG,mBAAmB,EACtC,aAAa,GAAG,IAAI,EACpB,MAAM,GAAG,IAAI,GACd,GAAG,OAAO,CAAC;QAEZ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,WAAW,EAAE,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,qBAAqB,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CACxE,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC,CAAC;QAEtD,IAAI,oBAAoB,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,gBAAgB,EAAE,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,gDAAgD;QAChD,IAAI,yBAAyB,GAAG,oBAAoB,CAAC;QACrD,IAAI,qBAAqB,GAAG,gBAAgB,CAAC;QAE7C,IAAI,WAAW,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACzC,MAAM,mBAAmB,GAAG,MAAM,IAAA,iBAAO,EAAC;gBACxC;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE,iEAAiE;oBAC1E,OAAO,EAAE,IAAI;iBACd;gBACD;oBACE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;oBACxC,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,2BAA2B;oBACpC,OAAO,EAAE;wBACP,EAAE,KAAK,EAAE,kCAAkC,EAAE,KAAK,EAAE,mBAAmB,EAAE;wBACzE,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,cAAc,EAAE;wBACxD,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;qBAC3C;oBACD,OAAO,EAAE,CAAC;iBACX;aACF,CAAC,CAAC;YAEH,IAAI,mBAAmB,CAAC,eAAe,EAAE,CAAC;gBACxC,yBAAyB,GAAG,IAAI,CAAC;gBACjC,qBAAqB,GAAG,mBAAmB,CAAC,QAAQ,IAAI,gBAAgB,CAAC;gBAEzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,qBAAqB,EAAE,CAAC,CAAC,CAAC;gBACvE,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,kEAAkE;YAClE,MAAM,aAAa,GAAG;gBACpB,WAAW;gBACX,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,SAAmD;gBAC9D,SAAS;gBACT,WAAW;gBACX,cAAc;gBACd,UAAU;gBACV,gCAAgC;gBAChC,oBAAoB,EAAE,yBAAyB;gBAC/C,gBAAgB,EAAE,qBAAqB;gBACvC,qBAAqB,EAAE,aAAa;gBACpC,cAAc,EAAE,MAAM;gBACtB,eAAe,EAAE,yBAAyB,EAAE,uCAAuC;aACpF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAE3D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAC/D,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CACV,0BAA0B,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAC7D,CACF,CAAC;gBAEF,IAAI,yBAAyB,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;oBACzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;oBACnE,IAAI,aAAa,EAAE,CAAC;wBAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;oBAC7D,CAAC;oBACD,IAAI,MAAM,EAAE,CAAC;wBACX,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;oBACzD,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;gBACnE,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CACR,6CAA6C,MAAM,CAAC,WAAW,EAAE,CAClE,CACF,CAAC;gBAEF,2BAA2B;gBAC3B,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;oBACrD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CACpE,CAAC;oBACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,2BAA2B,MAAM,CAAC,gBAAgB,EAAE,CAAC,CACjE,CAAC;oBACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;oBACtE,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CACpE,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBACnD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAC5D,CAAC;gBAEF,0CAA0C;gBAC1C,IAAI,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;oBACpD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAC5D,CAAC;oBACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CACnE,CAAC;oBACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAC/D,CAAC;gBACJ,CAAC;gBAED,MAAM,IAAI,KAAK,CACb,wBAAwB,MAAM,CAAC,WAAW,CAAC,MAAM,eAAe,CACjE,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CACP,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACrE,CACF,CAAC;YAEF,6BAA6B;YAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;YAEzE,IAAI,yBAAyB,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC,CAAC;gBAC3E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC,CAAC;gBACjG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;gBAC/E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC,CAAC;gBAC3F,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC,CAAC;YAChG,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,CAAC,WAAW;QAChB,OAAO;EACT,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC;;EAEjD,eAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;;;EAGtB,eAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC;;;;;;;;;;EAU9B,eAAK,CAAC,MAAM,CAAC,qCAAqC,CAAC;;;;;;EAMnD,eAAK,CAAC,MAAM,CAAC,cAAc,CAAC;IAC1B,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC;IAC3B,eAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC;;IAEvE,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC;IACrC,eAAK,CAAC,IAAI,CAAC,mFAAmF,CAAC;;IAE/F,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC;IAC7C,eAAK,CAAC,IAAI,CAAC,yEAAyE,CAAC;;IAErF,eAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC;IAC1C,eAAK,CAAC,IAAI,CAAC,qGAAqG,CAAC;;EAEnH,eAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC;;IAErC,eAAK,CAAC,IAAI,CAAC,aAAa,CAAC;;;;;;IAMzB,eAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC;;;;;;;;EAQ3C,eAAK,CAAC,MAAM,CAAC,UAAU,CAAC;UAChB,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC;UAC3B,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC;;;CAG9C,CAAC;IACA,CAAC;CAIF;AA7PD,0CA6PC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-prd.d.ts","sourceRoot":"","sources":["../../src/commands/compile-prd.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compile-prd.d.ts","sourceRoot":"","sources":["../../src/commands/compile-prd.ts"],"names":[],"mappings":"AAQA,UAAU,iBAAiB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAiB;;IAM3B,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;YAmH1C,iBAAiB;YAkCjB,gBAAgB;YAiBhB,WAAW;IA6BzB,OAAO,CAAC,cAAc;IA+CtB,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,yBAAyB;CAWlC"}
|
|
@@ -42,6 +42,7 @@ const fs = __importStar(require("fs-extra"));
|
|
|
42
42
|
const path_1 = __importDefault(require("path"));
|
|
43
43
|
const hybridAIClient_1 = require("../utils/hybridAIClient");
|
|
44
44
|
const spinner_1 = require("../utils/spinner");
|
|
45
|
+
const fileNames_1 = require("../constants/fileNames");
|
|
45
46
|
class CompilePRDCommand {
|
|
46
47
|
constructor() {
|
|
47
48
|
this.aiClient = new hybridAIClient_1.HybridAIClient();
|
|
@@ -62,9 +63,9 @@ class CompilePRDCommand {
|
|
|
62
63
|
return;
|
|
63
64
|
}
|
|
64
65
|
// Check if PRD already exists
|
|
65
|
-
const prdPath = path_1.default.join(contextDir,
|
|
66
|
+
const prdPath = path_1.default.join(contextDir, fileNames_1.CONTEXT_FILES.PRD);
|
|
66
67
|
if ((await fs.pathExists(prdPath)) && !options.force) {
|
|
67
|
-
console.log(chalk_1.default.yellow(
|
|
68
|
+
console.log(chalk_1.default.yellow(`⚠️ PRD already exists at .mycontext/${fileNames_1.CONTEXT_FILES.PRD}`));
|
|
68
69
|
console.log(chalk_1.default.yellow("Use --force to overwrite existing PRD.\n"));
|
|
69
70
|
return;
|
|
70
71
|
}
|
|
@@ -102,62 +103,25 @@ class CompilePRDCommand {
|
|
|
102
103
|
}
|
|
103
104
|
}
|
|
104
105
|
async checkContextFiles(contextDir) {
|
|
105
|
-
// Primary naming scheme (expected by compile-prd)
|
|
106
|
-
const primaryFiles = [
|
|
107
|
-
"01a-features.md",
|
|
108
|
-
"01b-user-flows.md",
|
|
109
|
-
"01c-edge-cases.md",
|
|
110
|
-
"01d-technical-specs.md",
|
|
111
|
-
];
|
|
112
|
-
// Alternative naming scheme (what might be generated)
|
|
113
|
-
const alternativeFiles = [
|
|
114
|
-
"01a-brief.md",
|
|
115
|
-
"01b-requirements.md",
|
|
116
|
-
"01c-flows.md",
|
|
117
|
-
];
|
|
118
106
|
const existing = [];
|
|
119
107
|
const missing = [];
|
|
120
108
|
const mapping = {};
|
|
121
|
-
//
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
// Map alternative files to primary expectations
|
|
134
|
-
const altMapping = {
|
|
135
|
-
"01a-brief.md": "01a-features.md",
|
|
136
|
-
"01b-requirements.md": "01b-user-flows.md",
|
|
137
|
-
"01c-flows.md": "01c-edge-cases.md",
|
|
138
|
-
};
|
|
139
|
-
for (const altFile of alternativeFiles) {
|
|
140
|
-
if (await fs.pathExists(path_1.default.join(contextDir, altFile))) {
|
|
141
|
-
const primaryFile = altMapping[altFile];
|
|
142
|
-
if (missing.includes(primaryFile)) {
|
|
143
|
-
existing.push(primaryFile);
|
|
144
|
-
mapping[primaryFile] = altFile;
|
|
145
|
-
missing.splice(missing.indexOf(primaryFile), 1);
|
|
146
|
-
}
|
|
109
|
+
// Use standardized required files
|
|
110
|
+
const requiredFiles = fileNames_1.REQUIRED_FILES.COMPILE_PRD;
|
|
111
|
+
// Check for each required file and its variants
|
|
112
|
+
for (const canonicalFile of requiredFiles) {
|
|
113
|
+
const variants = (0, fileNames_1.getAllFileNameVariants)(canonicalFile);
|
|
114
|
+
let found = false;
|
|
115
|
+
for (const variant of variants) {
|
|
116
|
+
if (await fs.pathExists(path_1.default.join(contextDir, variant))) {
|
|
117
|
+
existing.push(canonicalFile);
|
|
118
|
+
mapping[canonicalFile] = variant;
|
|
119
|
+
found = true;
|
|
120
|
+
break;
|
|
147
121
|
}
|
|
148
122
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
const flowsFile = path_1.default.join(contextDir, "01c-flows.md");
|
|
152
|
-
if (await fs.pathExists(flowsFile)) {
|
|
153
|
-
const flowsContent = await fs.readFile(flowsFile, "utf-8");
|
|
154
|
-
if (flowsContent.includes("Technical Requirements") ||
|
|
155
|
-
flowsContent.includes("Non-Functional Requirements")) {
|
|
156
|
-
existing.push("01d-technical-specs.md");
|
|
157
|
-
mapping["01d-technical-specs.md"] = "01c-flows.md";
|
|
158
|
-
missing.splice(missing.indexOf("01d-technical-specs.md"), 1);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
123
|
+
if (!found) {
|
|
124
|
+
missing.push(canonicalFile);
|
|
161
125
|
}
|
|
162
126
|
}
|
|
163
127
|
return { existing, missing, mapping };
|
|
@@ -182,7 +146,7 @@ class CompilePRDCommand {
|
|
|
182
146
|
maxTokens: 4000,
|
|
183
147
|
});
|
|
184
148
|
const content = this.formatPRDContent(response.text, contextData, mapping);
|
|
185
|
-
await fs.writeFile(path_1.default.join(contextDir,
|
|
149
|
+
await fs.writeFile(path_1.default.join(contextDir, fileNames_1.CONTEXT_FILES.PRD), content);
|
|
186
150
|
spinner.succeed("PRD compiled");
|
|
187
151
|
}
|
|
188
152
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-prd.js","sourceRoot":"","sources":["../../src/commands/compile-prd.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAA0B;AAC1B,6CAA+B;AAC/B,gDAAwB;AACxB,4DAAyD;AACzD,8CAAmD;
|
|
1
|
+
{"version":3,"file":"compile-prd.js","sourceRoot":"","sources":["../../src/commands/compile-prd.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAA0B;AAC1B,6CAA+B;AAC/B,gDAAwB;AACxB,4DAAyD;AACzD,8CAAmD;AACnD,sDAA+F;AAQ/F,MAAa,iBAAiB;IAG5B;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,+BAAc,EAAE,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA0B;QACtC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACzD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAExD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CACR,sEAAsE,CACvE,CACF,CAAC;QAEF,+BAA+B;QAC/B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAChE,CAAC;YACF,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACpC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAC1C,CAAC;YACF,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CACP,2FAA2F,CAC5F,CACF,CAAC;YACF,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,IAAI,CACR,gFAAgF,CACjF,CACF,CAAC;YACF,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,IAAI,CACR,8EAA8E,CAC/E,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,8BAA8B;QAC9B,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,yBAAa,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CAAC,wCAAwC,yBAAa,CAAC,GAAG,EAAE,CAAC,CAC1E,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,qBAAqB;YACrB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAC7C,UAAU,EACV,YAAY,CAAC,QAAQ,EACrB,YAAY,CAAC,OAAO,CACrB,CAAC;YAEF,uDAAuD;YACvD,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CACrE,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,MAAM,CAC5C,CAAC;YACF,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBACjD,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE;oBACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC;gBACxD,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YAED,eAAe;YACf,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;YAEtE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CACzE,CAAC;YAEF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,+CAA+C,CAAC,CACjE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CACjE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAChE,CAAC;YACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CACR,wFAAwF,CACzF,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CACR,kEAAkE,CACnE,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CACR,gEAAgE,CACjE,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CACR,gFAAgF,CACjF,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,UAAkB;QAKhD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,OAAO,GAA2B,EAAE,CAAC;QAE3C,kCAAkC;QAClC,MAAM,aAAa,GAAG,0BAAc,CAAC,WAAW,CAAC;QAEjD,gDAAgD;QAChD,KAAK,MAAM,aAAa,IAAI,aAAa,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAA,kCAAsB,EAAC,aAAa,CAAC,CAAC;YACvD,IAAI,KAAK,GAAG,KAAK,CAAC;YAElB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;oBACxD,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC7B,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC;oBACjC,KAAK,GAAG,IAAI,CAAC;oBACb,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,UAAkB,EAClB,KAAe,EACf,OAA+B;QAE/B,MAAM,WAAW,GAA2B,EAAE,CAAC;QAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;YACzC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QAC9B,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,UAAkB,EAClB,WAAmC,EACnC,OAA+B;QAE/B,MAAM,OAAO,GAAG,IAAI,yBAAe,CAAC,qCAAqC,CAAC,CAAC;QAC3E,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE;gBACxD,WAAW,EAAE,GAAG;gBAChB,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CACnC,QAAQ,CAAC,IAAI,EACb,WAAW,EACX,OAAO,CACR,CAAC;YACF,MAAM,EAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,yBAAa,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YAEtE,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACvC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,WAAmC;QACxD,MAAM,QAAQ,GAAG,WAAW,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,WAAW,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,SAAS,GAAG,WAAW,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,cAAc,GAAG,WAAW,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC;QAEnE,OAAO;;;;;EAKT,QAAQ;;;EAGR,SAAS;;;EAGT,SAAS;;;EAGT,cAAc;;;;;;;;;;;;;;;;;;;;;;;;kHAwBkG,CAAC;IACjH,CAAC;IAEO,gBAAgB,CACtB,QAAgB,EAChB,WAAmC,EACnC,OAA+B;QAE/B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzD,OAAO;;EAET,QAAQ;;;;;;mBAMS,SAAS;8BACE,YAAY;;;;;;;EAOxC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;aACvB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;YACzC,MAAM,WAAW,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;YACzD,OAAO,UAAU,KAAK,IAAI;gBACxB,CAAC,CAAC,OAAO,IAAI,cAAc,UAAU,SAAS,WAAW,EAAE;gBAC3D,CAAC,CAAC,OAAO,IAAI,QAAQ,WAAW,EAAE,CAAC;QACvC,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC;;;;CAIZ,CAAC;IACA,CAAC;IAEO,yBAAyB,CAAC,QAAgB;QAChD,MAAM,YAAY,GAA2B;YAC3C,iBAAiB,EAAE,iDAAiD;YACpE,mBAAmB,EAAE,8CAA8C;YACnE,mBAAmB,EAAE,iDAAiD;YACtE,wBAAwB,EACtB,qDAAqD;SACxD,CAAC;QAEF,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,2BAA2B,CAAC;IAC/D,CAAC;CACF;AA3SD,8CA2SC"}
|
|
@@ -14,8 +14,29 @@ export interface EnhancementOptions {
|
|
|
14
14
|
}
|
|
15
15
|
export declare class EnhanceCommand {
|
|
16
16
|
private enhancementAgent;
|
|
17
|
+
private useAgentSDK;
|
|
17
18
|
constructor();
|
|
18
19
|
execute(target: string, options: EnhancementOptions): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* NEW: Enhance component using Agent SDK with refactoring agent
|
|
22
|
+
*/
|
|
23
|
+
private enhanceWithAgentSDK;
|
|
24
|
+
/**
|
|
25
|
+
* Extract code from agent response
|
|
26
|
+
*/
|
|
27
|
+
private extractCodeFromResponse;
|
|
28
|
+
/**
|
|
29
|
+
* Parse changes from response
|
|
30
|
+
*/
|
|
31
|
+
private parseChangesFromResponse;
|
|
32
|
+
/**
|
|
33
|
+
* Parse quality score from response
|
|
34
|
+
*/
|
|
35
|
+
private parseScoreFromResponse;
|
|
36
|
+
/**
|
|
37
|
+
* Parse suggestions from response
|
|
38
|
+
*/
|
|
39
|
+
private parseSuggestionsFromResponse;
|
|
19
40
|
private printNextCommands;
|
|
20
41
|
private enhanceSingleComponent;
|
|
21
42
|
private enhanceComponentGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enhance.d.ts","sourceRoot":"","sources":["../../src/commands/enhance.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"enhance.d.ts","sourceRoot":"","sources":["../../src/commands/enhance.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAiB;;IAM9B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CzE;;OAEG;YACW,mBAAmB;IAmFjC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAK/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAgBhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAK9B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAkBpC,OAAO,CAAC,iBAAiB;YAYX,sBAAsB;YAmFtB,qBAAqB;YAiFrB,oBAAoB;IA4BlC,OAAO,CAAC,oBAAoB;YAiBd,qBAAqB;IAYnC,OAAO,CAAC,yBAAyB;IA+BjC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA2ChC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAkB9B;AAKD,eAAO,MAAM,OAAO,SAkChB,CAAC"}
|
package/dist/commands/enhance.js
CHANGED
|
@@ -12,8 +12,10 @@ const path_1 = __importDefault(require("path"));
|
|
|
12
12
|
const spinner_1 = require("../utils/spinner");
|
|
13
13
|
const EnhancementAgent_1 = require("../agents/implementations/EnhancementAgent");
|
|
14
14
|
const contextLoader_1 = require("../utils/contextLoader");
|
|
15
|
+
const aiClientFactory_1 = require("../utils/aiClientFactory");
|
|
15
16
|
class EnhanceCommand {
|
|
16
17
|
constructor() {
|
|
18
|
+
this.useAgentSDK = true; // NEW: Use Agent SDK by default
|
|
17
19
|
this.enhancementAgent = new EnhancementAgent_1.EnhancementAgent();
|
|
18
20
|
}
|
|
19
21
|
async execute(target, options) {
|
|
@@ -55,6 +57,124 @@ class EnhanceCommand {
|
|
|
55
57
|
process.exit(1);
|
|
56
58
|
}
|
|
57
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* NEW: Enhance component using Agent SDK with refactoring agent
|
|
62
|
+
*/
|
|
63
|
+
async enhanceWithAgentSDK(componentCode, componentName, prompt, options, spinner) {
|
|
64
|
+
// Get Agent SDK client
|
|
65
|
+
const agentClient = await (0, aiClientFactory_1.getAgentClient)();
|
|
66
|
+
// Build context for enhancement
|
|
67
|
+
const enhancementPrompt = `
|
|
68
|
+
Refactor and enhance the following React component:
|
|
69
|
+
|
|
70
|
+
Component Name: ${componentName}
|
|
71
|
+
|
|
72
|
+
Current Code:
|
|
73
|
+
\`\`\`tsx
|
|
74
|
+
${componentCode}
|
|
75
|
+
\`\`\`
|
|
76
|
+
|
|
77
|
+
Enhancement Requirements:
|
|
78
|
+
${prompt}
|
|
79
|
+
|
|
80
|
+
Please provide:
|
|
81
|
+
1. Enhanced component code with improvements
|
|
82
|
+
2. List of changes made
|
|
83
|
+
3. Quality score (0-100)
|
|
84
|
+
4. Accessibility suggestions
|
|
85
|
+
5. Performance suggestions
|
|
86
|
+
|
|
87
|
+
Focus on:
|
|
88
|
+
- Clean code principles
|
|
89
|
+
- React best practices
|
|
90
|
+
- TypeScript type safety
|
|
91
|
+
- Performance optimizations
|
|
92
|
+
- Accessibility improvements
|
|
93
|
+
`;
|
|
94
|
+
// Use refactoring agent with streaming
|
|
95
|
+
spinner.updateText('🤖 Using refactoring agent...');
|
|
96
|
+
const result = await agentClient.useAgent('refactoring', enhancementPrompt, {
|
|
97
|
+
workingDirectory: process.cwd(),
|
|
98
|
+
}, {
|
|
99
|
+
model: 'claude-3-5-sonnet-20241022',
|
|
100
|
+
temperature: options.temperature || 0.2,
|
|
101
|
+
maxTokens: options.maxTokens || 4000,
|
|
102
|
+
});
|
|
103
|
+
// Parse the response
|
|
104
|
+
const enhancedCode = this.extractCodeFromResponse(result.content);
|
|
105
|
+
const changes = this.parseChangesFromResponse(result.content);
|
|
106
|
+
const score = this.parseScoreFromResponse(result.content);
|
|
107
|
+
const suggestions = this.parseSuggestionsFromResponse(result.content);
|
|
108
|
+
return {
|
|
109
|
+
enhancedComponent: enhancedCode || componentCode,
|
|
110
|
+
originalComponent: componentCode,
|
|
111
|
+
validation: {
|
|
112
|
+
score: score,
|
|
113
|
+
isValid: true,
|
|
114
|
+
errors: [],
|
|
115
|
+
warnings: [],
|
|
116
|
+
},
|
|
117
|
+
changes: {
|
|
118
|
+
totalChanges: changes.length,
|
|
119
|
+
addedLines: changes.filter((c) => c.type === 'add').length,
|
|
120
|
+
removedLines: changes.filter((c) => c.type === 'remove').length,
|
|
121
|
+
modifiedLines: changes.filter((c) => c.type === 'modify').length,
|
|
122
|
+
},
|
|
123
|
+
suggestions: {
|
|
124
|
+
accessibility: suggestions.accessibility || [],
|
|
125
|
+
performance: suggestions.performance || [],
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Extract code from agent response
|
|
131
|
+
*/
|
|
132
|
+
extractCodeFromResponse(response) {
|
|
133
|
+
const codeBlockMatch = response.match(/```(?:tsx?|typescript|jsx?)\n([\s\S]*?)\n```/);
|
|
134
|
+
return codeBlockMatch ? codeBlockMatch[1] : null;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Parse changes from response
|
|
138
|
+
*/
|
|
139
|
+
parseChangesFromResponse(response) {
|
|
140
|
+
const changes = [];
|
|
141
|
+
const changesSection = response.match(/changes made:?\n([\s\S]*?)(?:\n\n|quality score)/i);
|
|
142
|
+
if (changesSection) {
|
|
143
|
+
const lines = changesSection[1].split('\n');
|
|
144
|
+
lines.forEach(line => {
|
|
145
|
+
if (line.trim().startsWith('-') || line.trim().startsWith('•')) {
|
|
146
|
+
changes.push({ type: 'modify', description: line.trim().substring(1).trim() });
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
return changes;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Parse quality score from response
|
|
154
|
+
*/
|
|
155
|
+
parseScoreFromResponse(response) {
|
|
156
|
+
const scoreMatch = response.match(/quality score:?\s*(\d+)/i);
|
|
157
|
+
return scoreMatch ? parseInt(scoreMatch[1]) : 85;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Parse suggestions from response
|
|
161
|
+
*/
|
|
162
|
+
parseSuggestionsFromResponse(response) {
|
|
163
|
+
const accessibilityMatch = response.match(/accessibility suggestions?:?\n([\s\S]*?)(?:\n\n|performance)/i);
|
|
164
|
+
const performanceMatch = response.match(/performance suggestions?:?\n([\s\S]*?)(?:\n\n|$)/i);
|
|
165
|
+
const parseSuggestions = (text) => {
|
|
166
|
+
if (!text)
|
|
167
|
+
return [];
|
|
168
|
+
return text.split('\n')
|
|
169
|
+
.map(line => line.trim())
|
|
170
|
+
.filter(line => line.startsWith('-') || line.startsWith('•'))
|
|
171
|
+
.map(line => line.substring(1).trim());
|
|
172
|
+
};
|
|
173
|
+
return {
|
|
174
|
+
accessibility: parseSuggestions(accessibilityMatch?.[1]),
|
|
175
|
+
performance: parseSuggestions(performanceMatch?.[1]),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
58
178
|
printNextCommands() {
|
|
59
179
|
try {
|
|
60
180
|
console.log("");
|
|
@@ -78,18 +198,41 @@ class EnhanceCommand {
|
|
|
78
198
|
const componentName = path_1.default.basename(fullPath, path_1.default.extname(fullPath));
|
|
79
199
|
// Get enhancement prompt
|
|
80
200
|
const prompt = await this.getEnhancementPrompt(options);
|
|
81
|
-
spinner.updateText("Enhancing component...");
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
201
|
+
spinner.updateText("Enhancing component with Agent SDK...");
|
|
202
|
+
let result;
|
|
203
|
+
// NEW: Try Agent SDK first
|
|
204
|
+
if (this.useAgentSDK) {
|
|
205
|
+
try {
|
|
206
|
+
result = await this.enhanceWithAgentSDK(componentCode, componentName, prompt, options, spinner);
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
console.log(chalk_1.default.yellow('⚠️ Agent SDK failed, falling back to standard enhancement'));
|
|
210
|
+
// Fallback to standard enhancement
|
|
211
|
+
result = await this.enhancementAgent.run({
|
|
212
|
+
currentComponent: componentCode,
|
|
213
|
+
userPrompt: prompt,
|
|
214
|
+
designContext: this.extractDesignContext(componentCode),
|
|
215
|
+
constraints: {
|
|
216
|
+
maxDependencies: 5,
|
|
217
|
+
targetFramework: "react",
|
|
218
|
+
uiLibrary: "shadcn",
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
// Use standard enhancement agent
|
|
225
|
+
result = await this.enhancementAgent.run({
|
|
226
|
+
currentComponent: componentCode,
|
|
227
|
+
userPrompt: prompt,
|
|
228
|
+
designContext: this.extractDesignContext(componentCode),
|
|
229
|
+
constraints: {
|
|
230
|
+
maxDependencies: 5,
|
|
231
|
+
targetFramework: "react",
|
|
232
|
+
uiLibrary: "shadcn",
|
|
233
|
+
},
|
|
234
|
+
});
|
|
235
|
+
}
|
|
93
236
|
// Track usage
|
|
94
237
|
await this.trackEnhancementUsage(componentName, "single", result.validation.score);
|
|
95
238
|
// Save enhanced component
|