mycontext-cli 2.0.28 → 2.0.30
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 +106 -14
- package/dist/cli.js +89 -99
- package/dist/cli.js.map +1 -1
- package/dist/commands/generate-components.d.ts +10 -0
- package/dist/commands/generate-components.d.ts.map +1 -1
- package/dist/commands/generate-components.js +300 -3
- 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 +75 -1
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +223 -68
- 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/package.json +11 -2
- 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/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/templates/instantdb/db.template.ts +14 -0
- package/dist/templates/instantdb/home-client.template.tsx +127 -0
- package/dist/templates/instantdb/page.template.tsx +5 -0
- package/dist/templates/instantdb/perms.template.ts +9 -0
- package/dist/templates/instantdb/schema.template.ts +28 -0
- package/dist/templates/playbooks/instantdb-integration.md +851 -0
- package/dist/templates/playbooks/mpesa-integration.md +652 -0
- package/dist/templates/pm-integration-config.json +20 -0
- package/dist/templates/ui-spec-examples.md +318 -0
- package/dist/templates/ui-spec-templates.json +244 -0
- package/dist/utils/envExampleGenerator.d.ts.map +1 -1
- package/dist/utils/envExampleGenerator.js +9 -3
- package/dist/utils/envExampleGenerator.js.map +1 -1
- 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/package.json +11 -2
|
@@ -0,0 +1,335 @@
|
|
|
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.ReviewContextCommand = 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 path_1 = __importDefault(require("path"));
|
|
44
|
+
const fileSystem_1 = require("../utils/fileSystem");
|
|
45
|
+
const ContextValidator_1 = require("../services/ContextValidator");
|
|
46
|
+
class ReviewContextCommand {
|
|
47
|
+
constructor() {
|
|
48
|
+
this.fs = new fileSystem_1.FileSystemManager();
|
|
49
|
+
this.contextValidator = new ContextValidator_1.ContextValidator();
|
|
50
|
+
}
|
|
51
|
+
async execute(options) {
|
|
52
|
+
console.log(chalk_1.default.blue("🔍 Reviewing context files and auto-generated features..."));
|
|
53
|
+
try {
|
|
54
|
+
const contextDir = ".mycontext";
|
|
55
|
+
// Check if auto-generated.json exists
|
|
56
|
+
const autoGeneratedPath = path_1.default.join(contextDir, "auto-generated.json");
|
|
57
|
+
if (!(await this.fs.exists(autoGeneratedPath))) {
|
|
58
|
+
console.log(chalk_1.default.yellow("⚠️ No auto-generated features found. Run 'mycontext generate:context' first."));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// Load auto-generated data
|
|
62
|
+
const autoGeneratedData = JSON.parse(await this.fs.readFile(autoGeneratedPath));
|
|
63
|
+
const { features, gaps } = autoGeneratedData;
|
|
64
|
+
if (features.length === 0 && gaps.length === 0) {
|
|
65
|
+
console.log(chalk_1.default.green("✅ No features or gaps to review."));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Review critical gaps first
|
|
69
|
+
if (!options.skipGaps && gaps.length > 0) {
|
|
70
|
+
await this.reviewGaps(gaps, options);
|
|
71
|
+
}
|
|
72
|
+
// Review auto-generated features
|
|
73
|
+
if (features.length > 0) {
|
|
74
|
+
await this.reviewFeatures(features, options);
|
|
75
|
+
}
|
|
76
|
+
// Save approvals
|
|
77
|
+
await this.saveApprovals(contextDir, features, gaps);
|
|
78
|
+
console.log(chalk_1.default.green("✅ Context review completed!"));
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.error(chalk_1.default.red("❌ Context review failed:"), error);
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Review critical gaps and get user input
|
|
87
|
+
*/
|
|
88
|
+
async reviewGaps(gaps, options) {
|
|
89
|
+
const criticalGaps = gaps.filter((gap) => gap.category === "critical");
|
|
90
|
+
const importantGaps = gaps.filter((gap) => gap.category === "important");
|
|
91
|
+
const optionalGaps = gaps.filter((gap) => gap.category === "optional");
|
|
92
|
+
if (criticalGaps.length > 0) {
|
|
93
|
+
console.log(chalk_1.default.red("\n❌ Critical information missing:"));
|
|
94
|
+
await this.handleGaps(criticalGaps, "critical", options);
|
|
95
|
+
}
|
|
96
|
+
if (importantGaps.length > 0) {
|
|
97
|
+
console.log(chalk_1.default.yellow("\n⚠️ Important information missing:"));
|
|
98
|
+
await this.handleGaps(importantGaps, "important", options);
|
|
99
|
+
}
|
|
100
|
+
if (optionalGaps.length > 0) {
|
|
101
|
+
console.log(chalk_1.default.blue("\n💡 Optional improvements:"));
|
|
102
|
+
await this.handleGaps(optionalGaps, "optional", options);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Handle gaps of a specific category
|
|
107
|
+
*/
|
|
108
|
+
async handleGaps(gaps, category, options) {
|
|
109
|
+
for (const gap of gaps) {
|
|
110
|
+
console.log(chalk_1.default.yellow(`\n${gap.question}`));
|
|
111
|
+
console.log(chalk_1.default.gray(` ${gap.reasoning}`));
|
|
112
|
+
if (gap.suggestedAnswers && gap.suggestedAnswers.length > 0) {
|
|
113
|
+
const response = await (0, prompts_1.default)({
|
|
114
|
+
type: "select",
|
|
115
|
+
name: "answer",
|
|
116
|
+
message: "Choose an answer:",
|
|
117
|
+
choices: gap.suggestedAnswers.map((answer, index) => ({
|
|
118
|
+
title: answer,
|
|
119
|
+
value: answer,
|
|
120
|
+
description: `Option ${String.fromCharCode(97 + index)}`,
|
|
121
|
+
})),
|
|
122
|
+
initial: 0,
|
|
123
|
+
});
|
|
124
|
+
if (response.answer) {
|
|
125
|
+
// Store the answer for later use
|
|
126
|
+
gap.userAnswer = response.answer;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
const response = await (0, prompts_1.default)({
|
|
131
|
+
type: "text",
|
|
132
|
+
name: "answer",
|
|
133
|
+
message: "Please provide the missing information:",
|
|
134
|
+
validate: (value) => value.length > 0 ? true : "Please provide an answer",
|
|
135
|
+
});
|
|
136
|
+
if (response.answer) {
|
|
137
|
+
gap.userAnswer = response.answer;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Review auto-generated features
|
|
144
|
+
*/
|
|
145
|
+
async reviewFeatures(features, options) {
|
|
146
|
+
console.log(chalk_1.default.yellow("\n📋 Auto-generated Features Review"));
|
|
147
|
+
console.log(chalk_1.default.gray("Review each feature and decide whether to keep it:"));
|
|
148
|
+
for (const feature of features) {
|
|
149
|
+
console.log(chalk_1.default.blue(`\n${feature.feature}`));
|
|
150
|
+
console.log(chalk_1.default.gray(` Reasoning: ${feature.reasoning}`));
|
|
151
|
+
console.log(chalk_1.default.gray(` Confidence: ${feature.confidence}`));
|
|
152
|
+
console.log(chalk_1.default.gray(` Source: ${feature.contextSource}`));
|
|
153
|
+
if (options.autoApprove) {
|
|
154
|
+
feature.approved = true;
|
|
155
|
+
console.log(chalk_1.default.green(" ✅ Auto-approved"));
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const response = await (0, prompts_1.default)({
|
|
159
|
+
type: "select",
|
|
160
|
+
name: "action",
|
|
161
|
+
message: "What would you like to do?",
|
|
162
|
+
choices: [
|
|
163
|
+
{
|
|
164
|
+
title: "Accept",
|
|
165
|
+
value: "accept",
|
|
166
|
+
description: "Keep this feature",
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
title: "Reject",
|
|
170
|
+
value: "reject",
|
|
171
|
+
description: "Remove this feature",
|
|
172
|
+
},
|
|
173
|
+
{ title: "Edit", value: "edit", description: "Modify this feature" },
|
|
174
|
+
{ title: "Skip", value: "skip", description: "Decide later" },
|
|
175
|
+
],
|
|
176
|
+
initial: 0,
|
|
177
|
+
});
|
|
178
|
+
switch (response.action) {
|
|
179
|
+
case "accept":
|
|
180
|
+
feature.approved = true;
|
|
181
|
+
feature.modified = false;
|
|
182
|
+
console.log(chalk_1.default.green(" ✅ Accepted"));
|
|
183
|
+
break;
|
|
184
|
+
case "reject":
|
|
185
|
+
feature.approved = false;
|
|
186
|
+
feature.modified = false;
|
|
187
|
+
console.log(chalk_1.default.red(" ❌ Rejected"));
|
|
188
|
+
break;
|
|
189
|
+
case "edit":
|
|
190
|
+
await this.editFeature(feature);
|
|
191
|
+
break;
|
|
192
|
+
case "skip":
|
|
193
|
+
feature.approved = null;
|
|
194
|
+
console.log(chalk_1.default.yellow(" ⏭️ Skipped"));
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Edit a feature
|
|
201
|
+
*/
|
|
202
|
+
async editFeature(feature) {
|
|
203
|
+
const response = await (0, prompts_1.default)({
|
|
204
|
+
type: "text",
|
|
205
|
+
name: "editedFeature",
|
|
206
|
+
message: "Edit the feature description:",
|
|
207
|
+
initial: feature.feature,
|
|
208
|
+
validate: (value) => value.length > 0 ? true : "Please provide a description",
|
|
209
|
+
});
|
|
210
|
+
if (response.editedFeature) {
|
|
211
|
+
feature.feature = response.editedFeature;
|
|
212
|
+
feature.approved = true;
|
|
213
|
+
feature.modified = true;
|
|
214
|
+
console.log(chalk_1.default.green(" ✏️ Feature updated"));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Save approvals to file
|
|
219
|
+
*/
|
|
220
|
+
async saveApprovals(contextDir, features, gaps) {
|
|
221
|
+
const approvalsData = {
|
|
222
|
+
features: features.reduce((acc, feature) => {
|
|
223
|
+
acc[feature.id] = {
|
|
224
|
+
approved: feature.approved,
|
|
225
|
+
modified: feature.modified || false,
|
|
226
|
+
feature: feature.feature,
|
|
227
|
+
reasoning: feature.reasoning,
|
|
228
|
+
};
|
|
229
|
+
return acc;
|
|
230
|
+
}, {}),
|
|
231
|
+
gaps_addressed: gaps.reduce((acc, gap) => {
|
|
232
|
+
if (gap.userAnswer) {
|
|
233
|
+
acc[gap.id] = gap.userAnswer;
|
|
234
|
+
}
|
|
235
|
+
return acc;
|
|
236
|
+
}, {}),
|
|
237
|
+
timestamp: new Date().toISOString(),
|
|
238
|
+
version: "1.0",
|
|
239
|
+
};
|
|
240
|
+
await this.fs.writeFile(path_1.default.join(contextDir, "approvals.json"), JSON.stringify(approvalsData, null, 2));
|
|
241
|
+
// Update PRD with gap answers
|
|
242
|
+
await this.updatePRDWithAnswers(contextDir, gaps);
|
|
243
|
+
console.log(chalk_1.default.green(" 💾 Approvals saved to .mycontext/approvals.json"));
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Update PRD with gap answers
|
|
247
|
+
*/
|
|
248
|
+
async updatePRDWithAnswers(contextDir, gaps) {
|
|
249
|
+
const prdPath = path_1.default.join(contextDir, "01-prd.md");
|
|
250
|
+
if (!(await this.fs.exists(prdPath))) {
|
|
251
|
+
return; // No PRD to update
|
|
252
|
+
}
|
|
253
|
+
let prdContent = await this.fs.readFile(prdPath);
|
|
254
|
+
let hasUpdates = false;
|
|
255
|
+
for (const gap of gaps) {
|
|
256
|
+
if (gap.userAnswer) {
|
|
257
|
+
// Add answer to appropriate section based on gap ID
|
|
258
|
+
if (gap.id === "game-type") {
|
|
259
|
+
prdContent = this.updatePRDSection(prdContent, "## Game Mechanics", `- **Game Type**: ${gap.userAnswer}\n`);
|
|
260
|
+
hasUpdates = true;
|
|
261
|
+
}
|
|
262
|
+
else if (gap.id === "game-rules") {
|
|
263
|
+
prdContent = this.updatePRDSection(prdContent, "## Game Mechanics", `- **Core Rules**: ${gap.userAnswer}\n`);
|
|
264
|
+
hasUpdates = true;
|
|
265
|
+
}
|
|
266
|
+
else if (gap.id === "auth-method") {
|
|
267
|
+
prdContent = this.updatePRDSection(prdContent, "## Technical Requirements", `- **Authentication**: ${gap.userAnswer}\n`);
|
|
268
|
+
hasUpdates = true;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (hasUpdates) {
|
|
273
|
+
await this.fs.writeFile(prdPath, prdContent);
|
|
274
|
+
console.log(chalk_1.default.green(" 📝 PRD updated with gap answers"));
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Update a section in PRD content
|
|
279
|
+
*/
|
|
280
|
+
updatePRDSection(content, sectionHeader, newContent) {
|
|
281
|
+
const lines = content.split("\n");
|
|
282
|
+
const sectionIndex = lines.findIndex((line) => line.trim() === sectionHeader);
|
|
283
|
+
if (sectionIndex === -1) {
|
|
284
|
+
// Section doesn't exist, add it at the end
|
|
285
|
+
return content + `\n\n${sectionHeader}\n${newContent}`;
|
|
286
|
+
}
|
|
287
|
+
// Find the end of the section (next ## or end of file)
|
|
288
|
+
let endIndex = sectionIndex + 1;
|
|
289
|
+
while (endIndex < lines.length && !lines[endIndex]?.startsWith("##")) {
|
|
290
|
+
endIndex++;
|
|
291
|
+
}
|
|
292
|
+
// Insert the new content before the end of the section
|
|
293
|
+
lines.splice(endIndex, 0, newContent);
|
|
294
|
+
return lines.join("\n");
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Get approval status for a feature
|
|
298
|
+
*/
|
|
299
|
+
static async getFeatureApproval(featureId) {
|
|
300
|
+
try {
|
|
301
|
+
const approvalsPath = ".mycontext/approvals.json";
|
|
302
|
+
if (!(await fs.pathExists(approvalsPath))) {
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
const approvalsData = JSON.parse(await fs.readFile(approvalsPath, "utf8"));
|
|
306
|
+
const feature = approvalsData.features[featureId];
|
|
307
|
+
return feature ? feature.approved : null;
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Check if all critical gaps are addressed
|
|
315
|
+
*/
|
|
316
|
+
static async areCriticalGapsAddressed() {
|
|
317
|
+
try {
|
|
318
|
+
const autoGeneratedPath = ".mycontext/auto-generated.json";
|
|
319
|
+
const approvalsPath = ".mycontext/approvals.json";
|
|
320
|
+
if (!(await fs.pathExists(autoGeneratedPath)) ||
|
|
321
|
+
!(await fs.pathExists(approvalsPath))) {
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
const autoGeneratedData = JSON.parse(await fs.readFile(autoGeneratedPath, "utf8"));
|
|
325
|
+
const approvalsData = JSON.parse(await fs.readFile(approvalsPath, "utf8"));
|
|
326
|
+
const criticalGaps = autoGeneratedData.gaps.filter((gap) => gap.category === "critical");
|
|
327
|
+
return criticalGaps.every((gap) => approvalsData.gaps_addressed[gap.id]);
|
|
328
|
+
}
|
|
329
|
+
catch (error) {
|
|
330
|
+
return false;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
exports.ReviewContextCommand = ReviewContextCommand;
|
|
335
|
+
//# sourceMappingURL=review-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-context.js","sourceRoot":"","sources":["../../src/commands/review-context.ts"],"names":[],"mappings":"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"}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mycontext-cli",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.30",
|
|
4
4
|
"description": "Component-first visual builder with zero-error guarantees. Generate and validate React/Next.js components one at a time, preview them visually, then scale to complete applications using Claude Agent SDK.",
|
|
5
5
|
"main": "dist/cli.js",
|
|
6
6
|
"bin": {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"build:clean": "rm -rf dist && ([ \"$npm_config_loglevel\" = \"silent\" ] || echo '🧹 Cleaned build directory')",
|
|
13
13
|
"build:compile": "([ \"$npm_config_loglevel\" = \"silent\" ] || echo '🔨 Compiling TypeScript...') && tsc --noEmitOnError false",
|
|
14
14
|
"build:alias": "([ \"$npm_config_loglevel\" = \"silent\" ] || echo '🔗 Resolving path aliases...') && tsc-alias",
|
|
15
|
-
"build:copy": "([ \"$npm_config_loglevel\" = \"silent\" ] || echo '📋 Copying config files...') && cp -r src/config dist/ && cp package.json dist/ && ([ \"$npm_config_loglevel\" = \"silent\" ] || echo '✅ Build complete')",
|
|
15
|
+
"build:copy": "([ \"$npm_config_loglevel\" = \"silent\" ] || echo '📋 Copying config files...') && cp -r src/config dist/ && cp -r src/templates dist/ && cp package.json dist/ && ([ \"$npm_config_loglevel\" = \"silent\" ] || echo '✅ Build complete')",
|
|
16
16
|
"dev": "ts-node src/cli.ts",
|
|
17
17
|
"start": "node dist/cli.js",
|
|
18
18
|
"watch": "tsc --watch --pretty",
|
|
@@ -49,20 +49,28 @@
|
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@anthropic-ai/claude-agent-sdk": "^0.1.1",
|
|
52
|
+
"@huggingface/inference": "^4.11.1",
|
|
53
|
+
"@types/figlet": "^1.7.0",
|
|
52
54
|
"axios": "^1.6.0",
|
|
53
55
|
"chalk": "^5.3.0",
|
|
54
56
|
"commander": "^11.1.0",
|
|
57
|
+
"diff": "^8.0.2",
|
|
55
58
|
"dotenv": "^17.2.3",
|
|
56
59
|
"dotenv-expand": "^12.0.3",
|
|
60
|
+
"figlet": "^1.9.3",
|
|
57
61
|
"fs-extra": "^11.1.1",
|
|
58
62
|
"fuse.js": "^7.1.0",
|
|
59
63
|
"glob": "^10.3.10",
|
|
64
|
+
"gradient-string": "^3.0.0",
|
|
60
65
|
"inquirer": "^9.2.12",
|
|
66
|
+
"mdast-util-to-markdown": "^2.1.2",
|
|
61
67
|
"node-fetch": "^2.7.0",
|
|
62
68
|
"openai": "^6.2.0",
|
|
63
69
|
"ora": "^7.0.1",
|
|
64
70
|
"prompts": "^2.4.2",
|
|
71
|
+
"remark-parse": "^11.0.0",
|
|
65
72
|
"sonner": "^2.0.7",
|
|
73
|
+
"unified": "^11.0.5",
|
|
66
74
|
"uuid": "^9.0.1",
|
|
67
75
|
"zod": "^3.25.76"
|
|
68
76
|
},
|
|
@@ -79,6 +87,7 @@
|
|
|
79
87
|
"ts-jest": "^29.4.0",
|
|
80
88
|
"ts-node": "^10.9.0",
|
|
81
89
|
"tsc-alias": "^1.8.16",
|
|
90
|
+
"tsx": "^4.20.6",
|
|
82
91
|
"typescript": "^5.0.0"
|
|
83
92
|
},
|
|
84
93
|
"engines": {
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Validator Service
|
|
3
|
+
*
|
|
4
|
+
* Detects gaps in context files and tracks auto-generated features
|
|
5
|
+
* to ensure user approval before proceeding with generation.
|
|
6
|
+
*/
|
|
7
|
+
export interface ContextGap {
|
|
8
|
+
id: string;
|
|
9
|
+
category: "critical" | "important" | "optional";
|
|
10
|
+
question: string;
|
|
11
|
+
context: string;
|
|
12
|
+
suggestedAnswers?: string[];
|
|
13
|
+
reasoning: string;
|
|
14
|
+
userAnswer?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface AutoGeneratedFeature {
|
|
17
|
+
id: string;
|
|
18
|
+
feature: string;
|
|
19
|
+
reasoning: string;
|
|
20
|
+
confidence: "high" | "medium" | "low";
|
|
21
|
+
contextSource: string;
|
|
22
|
+
approved?: boolean | null;
|
|
23
|
+
modified?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface ContextValidationResult {
|
|
26
|
+
gaps: ContextGap[];
|
|
27
|
+
autoGeneratedFeatures: AutoGeneratedFeature[];
|
|
28
|
+
hasCriticalGaps: boolean;
|
|
29
|
+
canProceed: boolean;
|
|
30
|
+
}
|
|
31
|
+
export declare class ContextValidator {
|
|
32
|
+
private gaps;
|
|
33
|
+
private autoGeneratedFeatures;
|
|
34
|
+
/**
|
|
35
|
+
* Validate context files for completeness and detect gaps
|
|
36
|
+
*/
|
|
37
|
+
validateContext(contextFiles: {
|
|
38
|
+
prd?: string;
|
|
39
|
+
brand?: string;
|
|
40
|
+
techStack?: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
}): Promise<ContextValidationResult>;
|
|
43
|
+
/**
|
|
44
|
+
* Deduplicate gaps by ID
|
|
45
|
+
*/
|
|
46
|
+
private deduplicateGaps;
|
|
47
|
+
/**
|
|
48
|
+
* Deduplicate features by ID
|
|
49
|
+
*/
|
|
50
|
+
private deduplicateFeatures;
|
|
51
|
+
/**
|
|
52
|
+
* Analyze PRD for missing critical information
|
|
53
|
+
*/
|
|
54
|
+
private analyzePRDGaps;
|
|
55
|
+
/**
|
|
56
|
+
* Analyze initial description for gaps
|
|
57
|
+
*/
|
|
58
|
+
private analyzeDescriptionGaps;
|
|
59
|
+
/**
|
|
60
|
+
* Analyze tech stack for gaps
|
|
61
|
+
*/
|
|
62
|
+
private analyzeTechStackGaps;
|
|
63
|
+
/**
|
|
64
|
+
* Check for game-specific gaps
|
|
65
|
+
*/
|
|
66
|
+
private checkGameGaps;
|
|
67
|
+
/**
|
|
68
|
+
* Helper methods for text analysis
|
|
69
|
+
*/
|
|
70
|
+
private containsGameKeywords;
|
|
71
|
+
private mentionsUsers;
|
|
72
|
+
private mentionsAuth;
|
|
73
|
+
private mentionsDataPersistence;
|
|
74
|
+
private mentionsDatabase;
|
|
75
|
+
private mentionsPayments;
|
|
76
|
+
private isVagueGameDescription;
|
|
77
|
+
private isVagueAppDescription;
|
|
78
|
+
private mentionsTargetAudience;
|
|
79
|
+
private mentionsMultiplayer;
|
|
80
|
+
private mentionsDeployment;
|
|
81
|
+
private mentionsEnvironmentConfig;
|
|
82
|
+
/**
|
|
83
|
+
* Get gaps by category
|
|
84
|
+
*/
|
|
85
|
+
getGapsByCategory(category: "critical" | "important" | "optional"): ContextGap[];
|
|
86
|
+
/**
|
|
87
|
+
* Get auto-generated features by confidence
|
|
88
|
+
*/
|
|
89
|
+
getFeaturesByConfidence(confidence: "high" | "medium" | "low"): AutoGeneratedFeature[];
|
|
90
|
+
/**
|
|
91
|
+
* Add auto-generated feature
|
|
92
|
+
*/
|
|
93
|
+
addAutoGeneratedFeature(feature: Omit<AutoGeneratedFeature, "id">): void;
|
|
94
|
+
/**
|
|
95
|
+
* Generate unique ID for feature
|
|
96
|
+
*/
|
|
97
|
+
private generateFeatureId;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=ContextValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextValidator.d.ts","sourceRoot":"","sources":["../../src/services/ContextValidator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,qBAAqB,CAA8B;IAE3D;;OAEG;IACG,eAAe,CAAC,YAAY,EAAE;QAClC,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAwCpC;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAiEtB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkD9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmC5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,yBAAyB;IAYjC;;OAEG;IACH,iBAAiB,CACf,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,UAAU,GAC9C,UAAU,EAAE;IAIf;;OAEG;IACH,uBAAuB,CACrB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,GACpC,oBAAoB,EAAE;IAMzB;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,GAAG,IAAI;IAQxE;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAO1B"}
|