mycontext-cli 2.0.27 → 2.0.29

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.
Files changed (173) hide show
  1. package/README.md +71 -342
  2. package/dist/agents/implementations/CodeGenSubAgent.d.ts.map +1 -1
  3. package/dist/agents/implementations/CodeGenSubAgent.js +67 -14
  4. package/dist/agents/implementations/CodeGenSubAgent.js.map +1 -1
  5. package/dist/agents/implementations/DesignPipelineAgent.d.ts +80 -0
  6. package/dist/agents/implementations/DesignPipelineAgent.d.ts.map +1 -0
  7. package/dist/agents/implementations/DesignPipelineAgent.js +1406 -0
  8. package/dist/agents/implementations/DesignPipelineAgent.js.map +1 -0
  9. package/dist/agents/implementations/FeatureAssemblyAgent.d.ts +67 -0
  10. package/dist/agents/implementations/FeatureAssemblyAgent.d.ts.map +1 -0
  11. package/dist/agents/implementations/FeatureAssemblyAgent.js +564 -0
  12. package/dist/agents/implementations/FeatureAssemblyAgent.js.map +1 -0
  13. package/dist/agents/implementations/PromptConstructorAgent.d.ts +10 -0
  14. package/dist/agents/implementations/PromptConstructorAgent.d.ts.map +1 -1
  15. package/dist/agents/implementations/PromptConstructorAgent.js +172 -12
  16. package/dist/agents/implementations/PromptConstructorAgent.js.map +1 -1
  17. package/dist/agents/implementations/RoleBasedGenerator.d.ts +52 -0
  18. package/dist/agents/implementations/RoleBasedGenerator.d.ts.map +1 -0
  19. package/dist/agents/implementations/RoleBasedGenerator.js +370 -0
  20. package/dist/agents/implementations/RoleBasedGenerator.js.map +1 -0
  21. package/dist/cli.js +111 -56
  22. package/dist/cli.js.map +1 -1
  23. package/dist/clients/ClaudeSDKClient.d.ts +48 -0
  24. package/dist/clients/ClaudeSDKClient.d.ts.map +1 -0
  25. package/dist/clients/ClaudeSDKClient.js +158 -0
  26. package/dist/clients/ClaudeSDKClient.js.map +1 -0
  27. package/dist/clients/MyContextAIClient.d.ts +73 -0
  28. package/dist/clients/MyContextAIClient.d.ts.map +1 -0
  29. package/dist/clients/MyContextAIClient.js +280 -0
  30. package/dist/clients/MyContextAIClient.js.map +1 -0
  31. package/dist/clients/ProviderChain.d.ts +87 -0
  32. package/dist/clients/ProviderChain.d.ts.map +1 -0
  33. package/dist/clients/ProviderChain.js +246 -0
  34. package/dist/clients/ProviderChain.js.map +1 -0
  35. package/dist/clients/XAIClient.d.ts +48 -0
  36. package/dist/clients/XAIClient.d.ts.map +1 -0
  37. package/dist/clients/XAIClient.js +152 -0
  38. package/dist/clients/XAIClient.js.map +1 -0
  39. package/dist/commands/assemble-features.d.ts +40 -0
  40. package/dist/commands/assemble-features.d.ts.map +1 -0
  41. package/dist/commands/assemble-features.js +383 -0
  42. package/dist/commands/assemble-features.js.map +1 -0
  43. package/dist/commands/clone-starter.d.ts +32 -0
  44. package/dist/commands/clone-starter.d.ts.map +1 -0
  45. package/dist/commands/clone-starter.js +218 -0
  46. package/dist/commands/clone-starter.js.map +1 -0
  47. package/dist/commands/design-analyze.d.ts +46 -0
  48. package/dist/commands/design-analyze.d.ts.map +1 -0
  49. package/dist/commands/design-analyze.js +232 -0
  50. package/dist/commands/design-analyze.js.map +1 -0
  51. package/dist/commands/generate-components.d.ts +11 -0
  52. package/dist/commands/generate-components.d.ts.map +1 -1
  53. package/dist/commands/generate-components.js +342 -12
  54. package/dist/commands/generate-components.js.map +1 -1
  55. package/dist/commands/generate-context-files.d.ts +9 -0
  56. package/dist/commands/generate-context-files.d.ts.map +1 -1
  57. package/dist/commands/generate-context-files.js +57 -0
  58. package/dist/commands/generate-context-files.js.map +1 -1
  59. package/dist/commands/generate.d.ts +5 -0
  60. package/dist/commands/generate.d.ts.map +1 -1
  61. package/dist/commands/generate.js +109 -2
  62. package/dist/commands/generate.js.map +1 -1
  63. package/dist/commands/init.d.ts +1 -0
  64. package/dist/commands/init.d.ts.map +1 -1
  65. package/dist/commands/init.js +32 -10
  66. package/dist/commands/init.js.map +1 -1
  67. package/dist/commands/preview-components.d.ts +12 -0
  68. package/dist/commands/preview-components.d.ts.map +1 -0
  69. package/dist/commands/preview-components.js +122 -0
  70. package/dist/commands/preview-components.js.map +1 -0
  71. package/dist/commands/refine-component.d.ts +43 -0
  72. package/dist/commands/refine-component.d.ts.map +1 -0
  73. package/dist/commands/refine-component.js +313 -0
  74. package/dist/commands/refine-component.js.map +1 -0
  75. package/dist/commands/review-context.d.ts +47 -0
  76. package/dist/commands/review-context.d.ts.map +1 -0
  77. package/dist/commands/review-context.js +335 -0
  78. package/dist/commands/review-context.js.map +1 -0
  79. package/dist/commands/setup-complete.d.ts.map +1 -1
  80. package/dist/commands/setup-complete.js +38 -2
  81. package/dist/commands/setup-complete.js.map +1 -1
  82. package/dist/commands/workflow.d.ts.map +1 -1
  83. package/dist/commands/workflow.js +86 -7
  84. package/dist/commands/workflow.js.map +1 -1
  85. package/dist/config/intent-dictionary.json +3700 -0
  86. package/dist/package.json +12 -1
  87. package/dist/services/ContextValidator.d.ts +99 -0
  88. package/dist/services/ContextValidator.d.ts.map +1 -0
  89. package/dist/services/ContextValidator.js +433 -0
  90. package/dist/services/ContextValidator.js.map +1 -0
  91. package/dist/services/IntentEnricher.d.ts +61 -0
  92. package/dist/services/IntentEnricher.d.ts.map +1 -0
  93. package/dist/services/IntentEnricher.js +318 -0
  94. package/dist/services/IntentEnricher.js.map +1 -0
  95. package/dist/services/IntentValidator.d.ts +114 -0
  96. package/dist/services/IntentValidator.d.ts.map +1 -0
  97. package/dist/services/IntentValidator.js +680 -0
  98. package/dist/services/IntentValidator.js.map +1 -0
  99. package/dist/services/MutationLogger.d.ts +54 -0
  100. package/dist/services/MutationLogger.d.ts.map +1 -0
  101. package/dist/services/MutationLogger.js +164 -0
  102. package/dist/services/MutationLogger.js.map +1 -0
  103. package/dist/services/RegressionRunner.d.ts +49 -0
  104. package/dist/services/RegressionRunner.d.ts.map +1 -0
  105. package/dist/services/RegressionRunner.js +285 -0
  106. package/dist/services/RegressionRunner.js.map +1 -0
  107. package/dist/services/TriggerLogger.d.ts +101 -0
  108. package/dist/services/TriggerLogger.d.ts.map +1 -0
  109. package/dist/services/TriggerLogger.js +263 -0
  110. package/dist/services/TriggerLogger.js.map +1 -0
  111. package/dist/types/design-pipeline.d.ts +300 -0
  112. package/dist/types/design-pipeline.d.ts.map +1 -0
  113. package/dist/types/design-pipeline.js +9 -0
  114. package/dist/types/design-pipeline.js.map +1 -0
  115. package/dist/types/feature-bundle.d.ts +239 -0
  116. package/dist/types/feature-bundle.d.ts.map +1 -0
  117. package/dist/types/feature-bundle.js +9 -0
  118. package/dist/types/feature-bundle.js.map +1 -0
  119. package/dist/types/index.d.ts +2 -0
  120. package/dist/types/index.d.ts.map +1 -1
  121. package/dist/types/index.js +2 -0
  122. package/dist/types/index.js.map +1 -1
  123. package/dist/types/intent-dictionary.d.ts +525 -0
  124. package/dist/types/intent-dictionary.d.ts.map +1 -0
  125. package/dist/types/intent-dictionary.js +11 -0
  126. package/dist/types/intent-dictionary.js.map +1 -0
  127. package/dist/types/role-permissions.d.ts +167 -0
  128. package/dist/types/role-permissions.d.ts.map +1 -0
  129. package/dist/types/role-permissions.js +9 -0
  130. package/dist/types/role-permissions.js.map +1 -0
  131. package/dist/utils/contextEnricher.d.ts +41 -0
  132. package/dist/utils/contextEnricher.d.ts.map +1 -0
  133. package/dist/utils/contextEnricher.js +327 -0
  134. package/dist/utils/contextEnricher.js.map +1 -0
  135. package/dist/utils/designFallbacks.d.ts +48 -0
  136. package/dist/utils/designFallbacks.d.ts.map +1 -0
  137. package/dist/utils/designFallbacks.js +885 -0
  138. package/dist/utils/designFallbacks.js.map +1 -0
  139. package/dist/utils/designManifestManager.d.ts +89 -0
  140. package/dist/utils/designManifestManager.d.ts.map +1 -0
  141. package/dist/utils/designManifestManager.js +533 -0
  142. package/dist/utils/designManifestManager.js.map +1 -0
  143. package/dist/utils/designPipelineStateManager.d.ts +63 -0
  144. package/dist/utils/designPipelineStateManager.d.ts.map +1 -0
  145. package/dist/utils/designPipelineStateManager.js +174 -0
  146. package/dist/utils/designPipelineStateManager.js.map +1 -0
  147. package/dist/utils/envExampleGenerator.d.ts.map +1 -1
  148. package/dist/utils/envExampleGenerator.js +41 -171
  149. package/dist/utils/envExampleGenerator.js.map +1 -1
  150. package/dist/utils/featureBundleManager.d.ts +90 -0
  151. package/dist/utils/featureBundleManager.d.ts.map +1 -0
  152. package/dist/utils/featureBundleManager.js +340 -0
  153. package/dist/utils/featureBundleManager.js.map +1 -0
  154. package/dist/utils/githubCloner.d.ts +93 -0
  155. package/dist/utils/githubCloner.d.ts.map +1 -0
  156. package/dist/utils/githubCloner.js +305 -0
  157. package/dist/utils/githubCloner.js.map +1 -0
  158. package/dist/utils/hybridAIClient.d.ts.map +1 -1
  159. package/dist/utils/hybridAIClient.js +21 -0
  160. package/dist/utils/hybridAIClient.js.map +1 -1
  161. package/dist/utils/openRouterClient.d.ts +10 -0
  162. package/dist/utils/openRouterClient.d.ts.map +1 -0
  163. package/dist/utils/openRouterClient.js +61 -0
  164. package/dist/utils/openRouterClient.js.map +1 -0
  165. package/dist/utils/rolePermissionMapper.d.ts +89 -0
  166. package/dist/utils/rolePermissionMapper.d.ts.map +1 -0
  167. package/dist/utils/rolePermissionMapper.js +337 -0
  168. package/dist/utils/rolePermissionMapper.js.map +1 -0
  169. package/dist/utils/unifiedDesignContextLoader.d.ts +76 -0
  170. package/dist/utils/unifiedDesignContextLoader.d.ts.map +1 -0
  171. package/dist/utils/unifiedDesignContextLoader.js +344 -0
  172. package/dist/utils/unifiedDesignContextLoader.js.map +1 -0
  173. package/package.json +12 -1
@@ -0,0 +1,313 @@
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
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.RefineComponentCommand = void 0;
40
+ const chalk_1 = __importDefault(require("chalk"));
41
+ const prompts_1 = __importDefault(require("prompts"));
42
+ const fs = __importStar(require("fs-extra"));
43
+ const fileSystem_1 = require("../utils/fileSystem");
44
+ const hybridAIClient_1 = require("../utils/hybridAIClient");
45
+ const review_context_1 = require("./review-context");
46
+ const MutationLogger_1 = require("../services/MutationLogger");
47
+ const RegressionRunner_1 = require("../services/RegressionRunner");
48
+ class RefineComponentCommand {
49
+ constructor() {
50
+ this.fs = new fileSystem_1.FileSystemManager();
51
+ this.aiClient = new hybridAIClient_1.HybridAIClient();
52
+ this.mutationLogger = new MutationLogger_1.MutationLogger(process.cwd());
53
+ this.regressionRunner = new RegressionRunner_1.RegressionRunner(process.cwd(), "");
54
+ }
55
+ async execute(componentName, options) {
56
+ console.log(chalk_1.default.blue(`šŸ”§ Refining component: ${componentName}`));
57
+ try {
58
+ // Check if component exists
59
+ const componentPath = await this.findComponent(componentName);
60
+ if (!componentPath) {
61
+ console.log(chalk_1.default.red(`āŒ Component ${componentName} not found`));
62
+ return;
63
+ }
64
+ // Update regression runner with component path
65
+ this.regressionRunner = new RegressionRunner_1.RegressionRunner(process.cwd(), componentPath);
66
+ // Load current component and mutation history
67
+ const currentCode = await this.fs.readFile(componentPath);
68
+ const mutationHistory = await this.mutationLogger.getMutationHistory(componentPath);
69
+ const lastApprovedVersion = await this.mutationLogger.getLastApprovedVersion(componentPath);
70
+ // Get refinement instructions from user
71
+ const refinementInstructions = await this.getRefinementInstructions(componentName);
72
+ // Generate refined component with AI
73
+ const refinementResult = await this.generateRefinedComponent(componentName, currentCode, refinementInstructions, mutationHistory);
74
+ // Create mutation record
75
+ const mutationId = await this.mutationLogger.createMutationFromRefinement(componentPath, currentCode, refinementResult.new_file, refinementResult.chainOfThought, refinementResult.confidence, refinementResult.riskFlags);
76
+ // Run regression tests
77
+ console.log(chalk_1.default.blue("🧪 Running regression tests..."));
78
+ const testResults = await this.runRegressionTests(refinementResult.new_file, componentPath);
79
+ // Compare to baseline
80
+ const baselineComparison = await this.compareToBaseline(testResults, lastApprovedVersion);
81
+ // Show approval UI
82
+ const approved = await this.showApprovalUI(componentName, currentCode, refinementResult, testResults, baselineComparison);
83
+ if (approved) {
84
+ // Apply the refinement
85
+ await this.fs.writeFile(componentPath, refinementResult.new_file);
86
+ // Update mutation status
87
+ await this.mutationLogger.updateMutationStatus(mutationId, "applied");
88
+ // Save baseline for future comparisons
89
+ await this.regressionRunner.saveBaseline(testResults, componentPath);
90
+ console.log(chalk_1.default.green(`āœ… Component ${componentName} refined and applied successfully!`));
91
+ }
92
+ else {
93
+ // Mark mutation as rejected
94
+ await this.mutationLogger.updateMutationStatus(mutationId, "rejected", "User rejected");
95
+ console.log(chalk_1.default.yellow(`ā­ļø Refinement rejected`));
96
+ }
97
+ }
98
+ catch (error) {
99
+ console.error(chalk_1.default.red("āŒ Component refinement failed:"), error);
100
+ throw error;
101
+ }
102
+ }
103
+ /**
104
+ * Find component file path
105
+ */
106
+ async findComponent(componentName) {
107
+ const possiblePaths = [
108
+ `.mycontext/components/mobile/${componentName}.tsx`,
109
+ `.mycontext/components/desktop/${componentName}.tsx`,
110
+ `components/${componentName}.tsx`,
111
+ `src/components/${componentName}.tsx`,
112
+ ];
113
+ for (const possiblePath of possiblePaths) {
114
+ if (await this.fs.exists(possiblePath)) {
115
+ return possiblePath;
116
+ }
117
+ }
118
+ return null;
119
+ }
120
+ /**
121
+ * Get refinement instructions from user
122
+ */
123
+ async getRefinementInstructions(componentName) {
124
+ const response = await (0, prompts_1.default)({
125
+ type: "text",
126
+ name: "instructions",
127
+ message: `What improvements would you like to make to ${componentName}?`,
128
+ initial: "Improve accessibility, add loading states, and optimize performance",
129
+ });
130
+ return response.instructions || "General improvements";
131
+ }
132
+ /**
133
+ * Generate refined component with AI
134
+ */
135
+ async generateRefinedComponent(componentName, currentCode, instructions, mutationHistory) {
136
+ const historyContext = mutationHistory.length > 0
137
+ ? `\nPrevious refinements:\n${mutationHistory
138
+ .slice(-3)
139
+ .map((m) => `- ${m.timestamp}: ${m.chainOfThought}`)
140
+ .join("\n")}`
141
+ : "";
142
+ const prompt = `You are a code-refinement assistant for MyContext.
143
+ Input:
144
+ - ORIGINAL_FILE: \`\`\`${currentCode}\`\`\`
145
+ - CONTEXT: "Project uses shadcn/ui, Next.js App Router, InstantDB. Keep 'use client' placement rules."
146
+ - REFINEMENT: "${instructions}"
147
+ - HISTORY: ${historyContext}
148
+
149
+ Produce strictly JSON with fields:
150
+ {
151
+ "patch": "<git unified diff>",
152
+ "new_file": "<full updated file text>",
153
+ "tests": [ { "type":"unit","code":"...test code..." } ],
154
+ "explanation": "...",
155
+ "confidence": 0.x,
156
+ "risk_flags": []
157
+ }
158
+
159
+ Notes:
160
+ - Keep TypeScript types strict.
161
+ - Do not add new npm dependencies.
162
+ - Provide one-line summary and short chain-of-thought under explanation.
163
+ - Keep code <= 200 lines change when possible.`;
164
+ try {
165
+ const response = await this.aiClient.generateText(prompt, {
166
+ temperature: 0.3,
167
+ maxTokens: 4000,
168
+ });
169
+ // Parse JSON response
170
+ const jsonMatch = response.text.match(/\{[\s\S]*\}/);
171
+ if (!jsonMatch) {
172
+ throw new Error("No JSON found in response");
173
+ }
174
+ const result = JSON.parse(jsonMatch[0]);
175
+ return {
176
+ new_file: result.new_file || response.text,
177
+ explanation: result.explanation || "Component refined",
178
+ chainOfThought: result.explanation || "AI refinement applied",
179
+ confidence: result.confidence || 0.7,
180
+ riskFlags: result.risk_flags || [],
181
+ };
182
+ }
183
+ catch (error) {
184
+ console.log(chalk_1.default.yellow("āš ļø Could not parse AI response, using fallback"));
185
+ return {
186
+ new_file: currentCode,
187
+ explanation: "Fallback refinement",
188
+ chainOfThought: "AI parsing failed, using original code",
189
+ confidence: 0.3,
190
+ riskFlags: ["ai_parsing_failed"],
191
+ };
192
+ }
193
+ }
194
+ /**
195
+ * Run regression tests on refined component
196
+ */
197
+ async runRegressionTests(refinedCode, componentPath) {
198
+ // Write refined code to temporary file
199
+ const tempPath = `${componentPath}.tmp`;
200
+ await this.fs.writeFile(tempPath, refinedCode);
201
+ try {
202
+ // Update regression runner with temp path
203
+ const tempRegressionRunner = new RegressionRunner_1.RegressionRunner(process.cwd(), tempPath);
204
+ const results = await tempRegressionRunner.runRegressionSuite();
205
+ // Clean up temp file using fs-extra
206
+ await fs.remove(tempPath);
207
+ return results;
208
+ }
209
+ catch (error) {
210
+ // Clean up temp file using fs-extra
211
+ await fs.remove(tempPath);
212
+ throw error;
213
+ }
214
+ }
215
+ /**
216
+ * Compare test results to baseline
217
+ */
218
+ async compareToBaseline(currentResults, lastApprovedVersion) {
219
+ if (!lastApprovedVersion) {
220
+ return {
221
+ hasBaseline: false,
222
+ regressionDetected: false,
223
+ summary: "No baseline available for comparison",
224
+ };
225
+ }
226
+ // Simple comparison based on overall score
227
+ const baselineScore = 0.8; // Default baseline score
228
+ const currentScore = currentResults.overall.score;
229
+ const regressionDetected = currentScore < baselineScore * 0.9; // 10% tolerance
230
+ let summary = "";
231
+ if (regressionDetected) {
232
+ summary = `Regression detected: Score dropped from ${baselineScore.toFixed(2)} to ${currentScore.toFixed(2)}`;
233
+ }
234
+ else {
235
+ summary = `No regression: Score ${currentScore.toFixed(2)} (baseline: ${baselineScore.toFixed(2)})`;
236
+ }
237
+ return {
238
+ hasBaseline: true,
239
+ regressionDetected,
240
+ summary,
241
+ };
242
+ }
243
+ /**
244
+ * Show approval UI with test results
245
+ */
246
+ async showApprovalUI(componentName, originalCode, refinementResult, testResults, baselineComparison) {
247
+ console.log(chalk_1.default.cyan(`\nšŸ“ Component Refinement Proposal: ${componentName}`));
248
+ console.log(chalk_1.default.yellow("\nšŸ” Changes:"));
249
+ console.log(chalk_1.default.gray(` ${refinementResult.explanation}`));
250
+ console.log(chalk_1.default.yellow("\nšŸ“Š Test Results:"));
251
+ console.log(chalk_1.default.gray(` TypeScript: ${testResults.typecheck.passed
252
+ ? chalk_1.default.green("āœ… Pass")
253
+ : chalk_1.default.red("āŒ Fail")}`));
254
+ console.log(chalk_1.default.gray(` ESLint: ${testResults.lint.passed
255
+ ? chalk_1.default.green("āœ… Pass")
256
+ : chalk_1.default.red("āŒ Fail")}`));
257
+ console.log(chalk_1.default.gray(` Unit Tests: ${testResults.unit.passed}/${testResults.unit.total} passing`));
258
+ console.log(chalk_1.default.yellow("\nšŸ¤– AI Confidence:"));
259
+ console.log(chalk_1.default.gray(` ${(refinementResult.confidence * 100).toFixed(0)}%`));
260
+ if (refinementResult.riskFlags.length > 0) {
261
+ console.log(chalk_1.default.yellow("\nāš ļø Risk Flags:"));
262
+ refinementResult.riskFlags.forEach((flag) => {
263
+ console.log(chalk_1.default.gray(` - ${flag}`));
264
+ });
265
+ }
266
+ console.log(chalk_1.default.yellow("\nšŸ“ˆ Regression Check:"));
267
+ console.log(chalk_1.default.gray(` ${baselineComparison.summary}`));
268
+ const response = await (0, prompts_1.default)({
269
+ type: "select",
270
+ name: "action",
271
+ message: "What would you like to do?",
272
+ choices: [
273
+ { title: "Accept refinement", value: "accept" },
274
+ { title: "Reject refinement", value: "reject" },
275
+ { title: "View diff", value: "diff" },
276
+ { title: "Cancel", value: "cancel" },
277
+ ],
278
+ initial: 0,
279
+ });
280
+ if (response.action === "diff") {
281
+ // Show diff (simplified)
282
+ console.log(chalk_1.default.blue("\nšŸ“‹ Diff Preview:"));
283
+ console.log(chalk_1.default.gray(" [Diff would be shown here in a real implementation]"));
284
+ // Ask again after showing diff
285
+ const diffResponse = await (0, prompts_1.default)({
286
+ type: "select",
287
+ name: "action",
288
+ message: "After viewing the diff:",
289
+ choices: [
290
+ { title: "Accept refinement", value: "accept" },
291
+ { title: "Reject refinement", value: "reject" },
292
+ ],
293
+ initial: 0,
294
+ });
295
+ return diffResponse.action === "accept";
296
+ }
297
+ return response.action === "accept";
298
+ }
299
+ /**
300
+ * Check if component needs refinement based on approvals
301
+ */
302
+ static async needsRefinement(componentName) {
303
+ try {
304
+ const approval = await review_context_1.ReviewContextCommand.getFeatureApproval(componentName.toLowerCase().replace(/\s+/g, "-"));
305
+ return approval === false; // Component was rejected and needs refinement
306
+ }
307
+ catch (error) {
308
+ return false;
309
+ }
310
+ }
311
+ }
312
+ exports.RefineComponentCommand = RefineComponentCommand;
313
+ //# sourceMappingURL=refine-component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refine-component.js","sourceRoot":"","sources":["../../src/commands/refine-component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { CommandOptions } from "../types";
2
+ export interface ReviewContextOptions extends CommandOptions {
3
+ autoApprove?: boolean;
4
+ skipGaps?: boolean;
5
+ }
6
+ export declare class ReviewContextCommand {
7
+ private fs;
8
+ private contextValidator;
9
+ execute(options: ReviewContextOptions): Promise<void>;
10
+ /**
11
+ * Review critical gaps and get user input
12
+ */
13
+ private reviewGaps;
14
+ /**
15
+ * Handle gaps of a specific category
16
+ */
17
+ private handleGaps;
18
+ /**
19
+ * Review auto-generated features
20
+ */
21
+ private reviewFeatures;
22
+ /**
23
+ * Edit a feature
24
+ */
25
+ private editFeature;
26
+ /**
27
+ * Save approvals to file
28
+ */
29
+ private saveApprovals;
30
+ /**
31
+ * Update PRD with gap answers
32
+ */
33
+ private updatePRDWithAnswers;
34
+ /**
35
+ * Update a section in PRD content
36
+ */
37
+ private updatePRDSection;
38
+ /**
39
+ * Get approval status for a feature
40
+ */
41
+ static getFeatureApproval(featureId: string): Promise<boolean | null>;
42
+ /**
43
+ * Check if all critical gaps are addressed
44
+ */
45
+ static areCriticalGapsAddressed(): Promise<boolean>;
46
+ }
47
+ //# sourceMappingURL=review-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-context.d.ts","sourceRoot":"","sources":["../../src/commands/review-context.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAQ1C,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,EAAE,CAA2B;IACrC,OAAO,CAAC,gBAAgB,CAA0B;IAE5C,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkD3D;;OAEG;YACW,UAAU;IAwBxB;;OAEG;YACW,UAAU;IA0CxB;;OAEG;YACW,cAAc;IAgE5B;;OAEG;YACW,WAAW;IAkBzB;;OAEG;YACW,aAAa;IAsC3B;;OAEG;YACW,oBAAoB;IA+ClC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0BxB;;OAEG;WACU,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAkB3E;;OAEG;WACU,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC;CA8B1D"}