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.
- package/README.md +71 -342
- package/dist/agents/implementations/CodeGenSubAgent.d.ts.map +1 -1
- package/dist/agents/implementations/CodeGenSubAgent.js +67 -14
- package/dist/agents/implementations/CodeGenSubAgent.js.map +1 -1
- package/dist/agents/implementations/DesignPipelineAgent.d.ts +80 -0
- package/dist/agents/implementations/DesignPipelineAgent.d.ts.map +1 -0
- package/dist/agents/implementations/DesignPipelineAgent.js +1406 -0
- package/dist/agents/implementations/DesignPipelineAgent.js.map +1 -0
- package/dist/agents/implementations/FeatureAssemblyAgent.d.ts +67 -0
- package/dist/agents/implementations/FeatureAssemblyAgent.d.ts.map +1 -0
- package/dist/agents/implementations/FeatureAssemblyAgent.js +564 -0
- package/dist/agents/implementations/FeatureAssemblyAgent.js.map +1 -0
- package/dist/agents/implementations/PromptConstructorAgent.d.ts +10 -0
- package/dist/agents/implementations/PromptConstructorAgent.d.ts.map +1 -1
- package/dist/agents/implementations/PromptConstructorAgent.js +172 -12
- package/dist/agents/implementations/PromptConstructorAgent.js.map +1 -1
- package/dist/agents/implementations/RoleBasedGenerator.d.ts +52 -0
- package/dist/agents/implementations/RoleBasedGenerator.d.ts.map +1 -0
- package/dist/agents/implementations/RoleBasedGenerator.js +370 -0
- package/dist/agents/implementations/RoleBasedGenerator.js.map +1 -0
- package/dist/cli.js +111 -56
- package/dist/cli.js.map +1 -1
- package/dist/clients/ClaudeSDKClient.d.ts +48 -0
- package/dist/clients/ClaudeSDKClient.d.ts.map +1 -0
- package/dist/clients/ClaudeSDKClient.js +158 -0
- package/dist/clients/ClaudeSDKClient.js.map +1 -0
- package/dist/clients/MyContextAIClient.d.ts +73 -0
- package/dist/clients/MyContextAIClient.d.ts.map +1 -0
- package/dist/clients/MyContextAIClient.js +280 -0
- package/dist/clients/MyContextAIClient.js.map +1 -0
- package/dist/clients/ProviderChain.d.ts +87 -0
- package/dist/clients/ProviderChain.d.ts.map +1 -0
- package/dist/clients/ProviderChain.js +246 -0
- package/dist/clients/ProviderChain.js.map +1 -0
- package/dist/clients/XAIClient.d.ts +48 -0
- package/dist/clients/XAIClient.d.ts.map +1 -0
- package/dist/clients/XAIClient.js +152 -0
- package/dist/clients/XAIClient.js.map +1 -0
- package/dist/commands/assemble-features.d.ts +40 -0
- package/dist/commands/assemble-features.d.ts.map +1 -0
- package/dist/commands/assemble-features.js +383 -0
- package/dist/commands/assemble-features.js.map +1 -0
- package/dist/commands/clone-starter.d.ts +32 -0
- package/dist/commands/clone-starter.d.ts.map +1 -0
- package/dist/commands/clone-starter.js +218 -0
- package/dist/commands/clone-starter.js.map +1 -0
- package/dist/commands/design-analyze.d.ts +46 -0
- package/dist/commands/design-analyze.d.ts.map +1 -0
- package/dist/commands/design-analyze.js +232 -0
- package/dist/commands/design-analyze.js.map +1 -0
- package/dist/commands/generate-components.d.ts +11 -0
- package/dist/commands/generate-components.d.ts.map +1 -1
- package/dist/commands/generate-components.js +342 -12
- package/dist/commands/generate-components.js.map +1 -1
- package/dist/commands/generate-context-files.d.ts +9 -0
- package/dist/commands/generate-context-files.d.ts.map +1 -1
- package/dist/commands/generate-context-files.js +57 -0
- package/dist/commands/generate-context-files.js.map +1 -1
- package/dist/commands/generate.d.ts +5 -0
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +109 -2
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +32 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/preview-components.d.ts +12 -0
- package/dist/commands/preview-components.d.ts.map +1 -0
- package/dist/commands/preview-components.js +122 -0
- package/dist/commands/preview-components.js.map +1 -0
- package/dist/commands/refine-component.d.ts +43 -0
- package/dist/commands/refine-component.d.ts.map +1 -0
- package/dist/commands/refine-component.js +313 -0
- package/dist/commands/refine-component.js.map +1 -0
- package/dist/commands/review-context.d.ts +47 -0
- package/dist/commands/review-context.d.ts.map +1 -0
- package/dist/commands/review-context.js +335 -0
- package/dist/commands/review-context.js.map +1 -0
- package/dist/commands/setup-complete.d.ts.map +1 -1
- package/dist/commands/setup-complete.js +38 -2
- package/dist/commands/setup-complete.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +86 -7
- package/dist/commands/workflow.js.map +1 -1
- package/dist/config/intent-dictionary.json +3700 -0
- package/dist/package.json +12 -1
- package/dist/services/ContextValidator.d.ts +99 -0
- package/dist/services/ContextValidator.d.ts.map +1 -0
- package/dist/services/ContextValidator.js +433 -0
- package/dist/services/ContextValidator.js.map +1 -0
- package/dist/services/IntentEnricher.d.ts +61 -0
- package/dist/services/IntentEnricher.d.ts.map +1 -0
- package/dist/services/IntentEnricher.js +318 -0
- package/dist/services/IntentEnricher.js.map +1 -0
- package/dist/services/IntentValidator.d.ts +114 -0
- package/dist/services/IntentValidator.d.ts.map +1 -0
- package/dist/services/IntentValidator.js +680 -0
- package/dist/services/IntentValidator.js.map +1 -0
- package/dist/services/MutationLogger.d.ts +54 -0
- package/dist/services/MutationLogger.d.ts.map +1 -0
- package/dist/services/MutationLogger.js +164 -0
- package/dist/services/MutationLogger.js.map +1 -0
- package/dist/services/RegressionRunner.d.ts +49 -0
- package/dist/services/RegressionRunner.d.ts.map +1 -0
- package/dist/services/RegressionRunner.js +285 -0
- package/dist/services/RegressionRunner.js.map +1 -0
- package/dist/services/TriggerLogger.d.ts +101 -0
- package/dist/services/TriggerLogger.d.ts.map +1 -0
- package/dist/services/TriggerLogger.js +263 -0
- package/dist/services/TriggerLogger.js.map +1 -0
- package/dist/types/design-pipeline.d.ts +300 -0
- package/dist/types/design-pipeline.d.ts.map +1 -0
- package/dist/types/design-pipeline.js +9 -0
- package/dist/types/design-pipeline.js.map +1 -0
- package/dist/types/feature-bundle.d.ts +239 -0
- package/dist/types/feature-bundle.d.ts.map +1 -0
- package/dist/types/feature-bundle.js +9 -0
- package/dist/types/feature-bundle.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/intent-dictionary.d.ts +525 -0
- package/dist/types/intent-dictionary.d.ts.map +1 -0
- package/dist/types/intent-dictionary.js +11 -0
- package/dist/types/intent-dictionary.js.map +1 -0
- package/dist/types/role-permissions.d.ts +167 -0
- package/dist/types/role-permissions.d.ts.map +1 -0
- package/dist/types/role-permissions.js +9 -0
- package/dist/types/role-permissions.js.map +1 -0
- package/dist/utils/contextEnricher.d.ts +41 -0
- package/dist/utils/contextEnricher.d.ts.map +1 -0
- package/dist/utils/contextEnricher.js +327 -0
- package/dist/utils/contextEnricher.js.map +1 -0
- package/dist/utils/designFallbacks.d.ts +48 -0
- package/dist/utils/designFallbacks.d.ts.map +1 -0
- package/dist/utils/designFallbacks.js +885 -0
- package/dist/utils/designFallbacks.js.map +1 -0
- package/dist/utils/designManifestManager.d.ts +89 -0
- package/dist/utils/designManifestManager.d.ts.map +1 -0
- package/dist/utils/designManifestManager.js +533 -0
- package/dist/utils/designManifestManager.js.map +1 -0
- package/dist/utils/designPipelineStateManager.d.ts +63 -0
- package/dist/utils/designPipelineStateManager.d.ts.map +1 -0
- package/dist/utils/designPipelineStateManager.js +174 -0
- package/dist/utils/designPipelineStateManager.js.map +1 -0
- package/dist/utils/envExampleGenerator.d.ts.map +1 -1
- package/dist/utils/envExampleGenerator.js +41 -171
- package/dist/utils/envExampleGenerator.js.map +1 -1
- package/dist/utils/featureBundleManager.d.ts +90 -0
- package/dist/utils/featureBundleManager.d.ts.map +1 -0
- package/dist/utils/featureBundleManager.js +340 -0
- package/dist/utils/featureBundleManager.js.map +1 -0
- package/dist/utils/githubCloner.d.ts +93 -0
- package/dist/utils/githubCloner.d.ts.map +1 -0
- package/dist/utils/githubCloner.js +305 -0
- package/dist/utils/githubCloner.js.map +1 -0
- package/dist/utils/hybridAIClient.d.ts.map +1 -1
- package/dist/utils/hybridAIClient.js +21 -0
- package/dist/utils/hybridAIClient.js.map +1 -1
- package/dist/utils/openRouterClient.d.ts +10 -0
- package/dist/utils/openRouterClient.d.ts.map +1 -0
- package/dist/utils/openRouterClient.js +61 -0
- package/dist/utils/openRouterClient.js.map +1 -0
- package/dist/utils/rolePermissionMapper.d.ts +89 -0
- package/dist/utils/rolePermissionMapper.d.ts.map +1 -0
- package/dist/utils/rolePermissionMapper.js +337 -0
- package/dist/utils/rolePermissionMapper.js.map +1 -0
- package/dist/utils/unifiedDesignContextLoader.d.ts +76 -0
- package/dist/utils/unifiedDesignContextLoader.d.ts.map +1 -0
- package/dist/utils/unifiedDesignContextLoader.js +344 -0
- package/dist/utils/unifiedDesignContextLoader.js.map +1 -0
- 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"}
|