mycontext-cli 4.2.0 → 4.2.2
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 +128 -133
- package/dist/README.md +128 -133
- package/dist/cli.js +76 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.d.ts +18 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +53 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +99 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/core/brain/BrainClient.d.ts +2 -0
- package/dist/core/brain/BrainClient.d.ts.map +1 -1
- package/dist/core/brain/BrainClient.js +19 -0
- package/dist/core/brain/BrainClient.js.map +1 -1
- package/dist/doctor/DoctorEngine.d.ts +5 -0
- package/dist/doctor/DoctorEngine.d.ts.map +1 -0
- package/dist/doctor/DoctorEngine.js +491 -0
- package/dist/doctor/DoctorEngine.js.map +1 -0
- package/dist/doctor/api.d.ts +4 -0
- package/dist/doctor/api.d.ts.map +1 -0
- package/dist/doctor/api.js +19 -0
- package/dist/doctor/api.js.map +1 -0
- package/dist/doctor/rules/dead-code-rules.d.ts +3 -0
- package/dist/doctor/rules/dead-code-rules.d.ts.map +1 -0
- package/dist/doctor/rules/dead-code-rules.js +269 -0
- package/dist/doctor/rules/dead-code-rules.js.map +1 -0
- package/dist/doctor/rules/index.d.ts +11 -0
- package/dist/doctor/rules/index.d.ts.map +1 -0
- package/dist/doctor/rules/index.js +21 -0
- package/dist/doctor/rules/index.js.map +1 -0
- package/dist/doctor/rules/nextjs-rules.d.ts +3 -0
- package/dist/doctor/rules/nextjs-rules.d.ts.map +1 -0
- package/dist/doctor/rules/nextjs-rules.js +357 -0
- package/dist/doctor/rules/nextjs-rules.js.map +1 -0
- package/dist/doctor/rules/node-rules.d.ts +3 -0
- package/dist/doctor/rules/node-rules.d.ts.map +1 -0
- package/dist/doctor/rules/node-rules.js +290 -0
- package/dist/doctor/rules/node-rules.js.map +1 -0
- package/dist/doctor/rules/turbo-rules.d.ts +3 -0
- package/dist/doctor/rules/turbo-rules.d.ts.map +1 -0
- package/dist/doctor/rules/turbo-rules.js +215 -0
- package/dist/doctor/rules/turbo-rules.js.map +1 -0
- package/dist/doctor/types.d.ts +87 -0
- package/dist/doctor/types.d.ts.map +1 -0
- package/dist/doctor/types.js +6 -0
- package/dist/doctor/types.js.map +1 -0
- package/dist/package.json +4 -4
- package/dist/services/ContextSyncer.d.ts +40 -0
- package/dist/services/ContextSyncer.d.ts.map +1 -0
- package/dist/services/ContextSyncer.js +219 -0
- package/dist/services/ContextSyncer.js.map +1 -0
- package/dist/services/ProjectScanner.d.ts +74 -0
- package/dist/services/ProjectScanner.d.ts.map +1 -0
- package/dist/services/ProjectScanner.js +343 -0
- package/dist/services/ProjectScanner.js.map +1 -0
- package/dist/services/ScaffoldAgent.d.ts +35 -0
- package/dist/services/ScaffoldAgent.d.ts.map +1 -0
- package/dist/services/ScaffoldAgent.js +228 -0
- package/dist/services/ScaffoldAgent.js.map +1 -0
- package/dist/tui/PlanningMode.d.ts +42 -0
- package/dist/tui/PlanningMode.d.ts.map +1 -0
- package/dist/tui/PlanningMode.js +401 -0
- package/dist/tui/PlanningMode.js.map +1 -0
- package/dist/tui/TUIClient.d.ts +20 -0
- package/dist/tui/TUIClient.d.ts.map +1 -0
- package/dist/tui/TUIClient.js +50 -0
- package/dist/tui/TUIClient.js.map +1 -0
- package/dist/types/mega-context.d.ts +118 -0
- package/dist/types/mega-context.d.ts.map +1 -0
- package/dist/types/mega-context.js +3 -0
- package/dist/types/mega-context.js.map +1 -0
- package/dist/types/tui.d.ts +29 -0
- package/dist/types/tui.d.ts.map +1 -0
- package/dist/types/tui.js +8 -0
- package/dist/types/tui.js.map +1 -0
- package/dist/types/unified-context.d.ts +102 -0
- package/dist/types/unified-context.d.ts.map +1 -0
- package/dist/types/unified-context.js +50 -0
- package/dist/types/unified-context.js.map +1 -0
- package/dist/utils/FileGenerator.d.ts +5 -0
- package/dist/utils/FileGenerator.d.ts.map +1 -1
- package/dist/utils/FileGenerator.js +48 -0
- package/dist/utils/FileGenerator.js.map +1 -1
- package/dist/utils/deepMerge.d.ts +14 -0
- package/dist/utils/deepMerge.d.ts.map +1 -0
- package/dist/utils/deepMerge.js +87 -0
- package/dist/utils/deepMerge.js.map +1 -0
- package/dist/utils/fileSystem.d.ts.map +1 -1
- package/dist/utils/fileSystem.js +32 -4
- package/dist/utils/fileSystem.js.map +1 -1
- package/package.json +24 -22
|
@@ -0,0 +1,401 @@
|
|
|
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.PlanningMode = void 0;
|
|
40
|
+
const uuid_1 = require("uuid");
|
|
41
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
42
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
43
|
+
const fs = __importStar(require("fs-extra"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const AICore_1 = require("../core/ai/AICore");
|
|
46
|
+
const spinner_1 = require("../utils/spinner");
|
|
47
|
+
const ProjectScanner_1 = require("../services/ProjectScanner");
|
|
48
|
+
const ContextSyncer_1 = require("../services/ContextSyncer");
|
|
49
|
+
const unified_context_1 = require("../types/unified-context");
|
|
50
|
+
const deepMerge_1 = require("../utils/deepMerge");
|
|
51
|
+
class PlanningMode {
|
|
52
|
+
constructor(client, projectPath = process.cwd()) {
|
|
53
|
+
this.client = client;
|
|
54
|
+
this.projectPath = projectPath;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Start the AI-driven interview process.
|
|
58
|
+
* If existing context is found, enters refinement mode.
|
|
59
|
+
* Otherwise, starts fresh.
|
|
60
|
+
*/
|
|
61
|
+
async start() {
|
|
62
|
+
// 1. Check for existing context (personalization)
|
|
63
|
+
const existingContext = await this.loadExistingContext();
|
|
64
|
+
if (existingContext) {
|
|
65
|
+
return this.startRefinementMode(existingContext);
|
|
66
|
+
}
|
|
67
|
+
return this.startFreshMode();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Load existing context.json if present (schema-agnostic)
|
|
71
|
+
*/
|
|
72
|
+
async loadExistingContext() {
|
|
73
|
+
const contextPath = path.join(this.projectPath, ".mycontext", "context.json");
|
|
74
|
+
try {
|
|
75
|
+
if (await fs.pathExists(contextPath)) {
|
|
76
|
+
const context = await fs.readJson(contextPath);
|
|
77
|
+
return context;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
// Corrupted or unreadable — treat as fresh
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* REFINEMENT MODE: Schema-agnostic — works with MegaContext OR Brain format
|
|
87
|
+
*/
|
|
88
|
+
async startRefinementMode(existingContext) {
|
|
89
|
+
console.log(chalk_1.default.green("🧠 Existing Living Brain detected!\n"));
|
|
90
|
+
// Use unified summary helper — works with any context shape
|
|
91
|
+
const summary = (0, unified_context_1.getContextSummary)(existingContext);
|
|
92
|
+
console.log(chalk_1.default.cyan("┌─────────────────────────────────────────┐"));
|
|
93
|
+
console.log(chalk_1.default.cyan("│") + chalk_1.default.bold.white(` 📋 Current Context: ${summary.name}`) + " ".repeat(Math.max(0, 22 - summary.name.length)) + chalk_1.default.cyan("│"));
|
|
94
|
+
console.log(chalk_1.default.cyan("├─────────────────────────────────────────┤"));
|
|
95
|
+
if (summary.entities.length > 0)
|
|
96
|
+
console.log(chalk_1.default.cyan("│") + chalk_1.default.gray(` Entities: ${summary.entities.slice(0, 5).join(", ")}${summary.entities.length > 5 ? "..." : ""}`.padEnd(40)) + chalk_1.default.cyan("│"));
|
|
97
|
+
if (summary.routes.length > 0)
|
|
98
|
+
console.log(chalk_1.default.cyan("│") + chalk_1.default.gray(` Routes: ${summary.routes.slice(0, 4).join(", ")}${summary.routes.length > 4 ? "..." : ""}`.padEnd(40)) + chalk_1.default.cyan("│"));
|
|
99
|
+
if (summary.roles.length > 0)
|
|
100
|
+
console.log(chalk_1.default.cyan("│") + chalk_1.default.gray(` Roles: ${summary.roles.join(", ")}`.padEnd(40)) + chalk_1.default.cyan("│"));
|
|
101
|
+
if (summary.components.length > 0)
|
|
102
|
+
console.log(chalk_1.default.cyan("│") + chalk_1.default.gray(` Components: ${summary.components.length} in Lego DB`.padEnd(39)) + chalk_1.default.cyan("│"));
|
|
103
|
+
if (summary.checkpoints.length > 0)
|
|
104
|
+
console.log(chalk_1.default.cyan("│") + chalk_1.default.gray(` Milestones: ${summary.checkpoints.filter(c => c.status === "complete").length}/${summary.checkpoints.length} complete`.padEnd(39)) + chalk_1.default.cyan("│"));
|
|
105
|
+
if (summary.capabilities.length > 0)
|
|
106
|
+
console.log(chalk_1.default.cyan("│") + chalk_1.default.gray(` Capabilities: ${summary.capabilities.join(", ")}`.padEnd(38)) + chalk_1.default.cyan("│"));
|
|
107
|
+
console.log(chalk_1.default.cyan("└─────────────────────────────────────────┘\n"));
|
|
108
|
+
const { action } = await (0, prompts_1.default)({
|
|
109
|
+
type: "select",
|
|
110
|
+
name: "action",
|
|
111
|
+
message: "What would you like to do?",
|
|
112
|
+
choices: [
|
|
113
|
+
{ title: "🔄 Refine & Evolve (describe changes to add)", value: "refine" },
|
|
114
|
+
{ title: "📂 Scan & Assess (compare code vs context)", value: "scan" },
|
|
115
|
+
{ title: "🔀 Sync (auto-update context.json + README)", value: "sync" },
|
|
116
|
+
{ title: "🆕 Start Fresh (wipe and regenerate)", value: "fresh" },
|
|
117
|
+
{ title: "❌ Cancel", value: "cancel" },
|
|
118
|
+
],
|
|
119
|
+
});
|
|
120
|
+
if (action === "cancel")
|
|
121
|
+
process.exit(0);
|
|
122
|
+
if (action === "fresh")
|
|
123
|
+
return this.startFreshMode();
|
|
124
|
+
// Sync mode — autonomous recontextualization
|
|
125
|
+
if (action === "sync") {
|
|
126
|
+
await this.ensureApiKey();
|
|
127
|
+
const syncer = new ContextSyncer_1.ContextSyncer(this.projectPath);
|
|
128
|
+
const result = await syncer.syncAll();
|
|
129
|
+
if (result.contextUpdated || result.readmeUpdated) {
|
|
130
|
+
console.log(chalk_1.default.green("\n✅ Sync complete!"));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log(chalk_1.default.yellow("\nℹ️ No changes needed."));
|
|
134
|
+
}
|
|
135
|
+
// Reload context and loop back
|
|
136
|
+
const refreshed = await this.loadExistingContext();
|
|
137
|
+
return this.startRefinementMode(refreshed || existingContext);
|
|
138
|
+
}
|
|
139
|
+
// Scan the real project structure
|
|
140
|
+
const scanner = new ProjectScanner_1.ProjectScanner(this.projectPath);
|
|
141
|
+
console.log(chalk_1.default.blue("\n📂 Scanning project structure...\n"));
|
|
142
|
+
const snapshot = await scanner.scan();
|
|
143
|
+
scanner.displaySnapshot(snapshot);
|
|
144
|
+
if (action === "scan") {
|
|
145
|
+
// Pure assessment mode — show diffs then loop back
|
|
146
|
+
await this.ensureApiKey();
|
|
147
|
+
console.log(chalk_1.default.blue("\n🧠 Assessing progress against context...\n"));
|
|
148
|
+
const report = await scanner.assessProgress(snapshot, existingContext);
|
|
149
|
+
scanner.displayReport(report);
|
|
150
|
+
// Ask if they want to merge suggestions
|
|
151
|
+
if (report.diffs.length > 0) {
|
|
152
|
+
const { merge } = await (0, prompts_1.default)({
|
|
153
|
+
type: "confirm",
|
|
154
|
+
name: "merge",
|
|
155
|
+
message: "Apply suggested context merge to evolve the plan?",
|
|
156
|
+
initial: true,
|
|
157
|
+
});
|
|
158
|
+
if (merge && Object.keys(report.suggestedContextMerge).length > 0) {
|
|
159
|
+
// DEEP merge (not shallow spread)
|
|
160
|
+
const merged = (0, deepMerge_1.deepMerge)(existingContext, report.suggestedContextMerge);
|
|
161
|
+
const contextPath = path.join(this.projectPath, ".mycontext", "context.json");
|
|
162
|
+
await fs.writeJson(contextPath, merged, { spaces: 2 });
|
|
163
|
+
console.log(chalk_1.default.green("✅ Context merged (deep) and saved!"));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Restart refinement menu
|
|
167
|
+
return this.startRefinementMode(existingContext);
|
|
168
|
+
}
|
|
169
|
+
// Refinement path — include file tree in prompt
|
|
170
|
+
const { refinement } = await (0, prompts_1.default)({
|
|
171
|
+
type: "text",
|
|
172
|
+
name: "refinement",
|
|
173
|
+
message: "Describe what you want to add or change:",
|
|
174
|
+
initial: "Add a notifications system with real-time alerts",
|
|
175
|
+
});
|
|
176
|
+
if (!refinement)
|
|
177
|
+
process.exit(0);
|
|
178
|
+
// Build a compact file tree for the prompt
|
|
179
|
+
const fileTreeCompact = snapshot.fileTree
|
|
180
|
+
.filter(f => f.type === "file")
|
|
181
|
+
.map(f => f.path)
|
|
182
|
+
.slice(0, 100)
|
|
183
|
+
.join("\n");
|
|
184
|
+
const keyFilesCompact = snapshot.keyFiles
|
|
185
|
+
.map(f => `--- ${f.path} ---\n${f.content}`)
|
|
186
|
+
.join("\n\n");
|
|
187
|
+
const spinner = new spinner_1.EnhancedSpinner("Evolving architecture with real project data...");
|
|
188
|
+
spinner.start();
|
|
189
|
+
const prompt = `
|
|
190
|
+
You have an EXISTING Next.js + InstantDB application.
|
|
191
|
+
|
|
192
|
+
PLANNED CONTEXT (context.json):
|
|
193
|
+
${JSON.stringify(existingContext, null, 2).substring(0, 3000)}
|
|
194
|
+
|
|
195
|
+
ACTUAL FILE STRUCTURE (${snapshot.stats.totalFiles} files):
|
|
196
|
+
${fileTreeCompact.substring(0, 2000)}
|
|
197
|
+
|
|
198
|
+
KEY FILES:
|
|
199
|
+
${keyFilesCompact.substring(0, 2000)}
|
|
200
|
+
|
|
201
|
+
The user wants to EVOLVE it with this request:
|
|
202
|
+
"${refinement}"
|
|
203
|
+
|
|
204
|
+
Generate a COMPLETE, UPDATED MegaContext JSON that:
|
|
205
|
+
1. PRESERVES all existing entities, routes, roles, and components
|
|
206
|
+
2. REFLECTS what actually exists in the codebase (fix any context drift)
|
|
207
|
+
3. ADDS the new features requested
|
|
208
|
+
4. Maintains consistency across the entire context
|
|
209
|
+
|
|
210
|
+
Return a valid MegaContext JSON with these sections:
|
|
211
|
+
- project (keep existing name & metadata)
|
|
212
|
+
- topLevelDesign (colors, fonts, radius)
|
|
213
|
+
- auth (roles, permissions — preserve existing + add new)
|
|
214
|
+
- database (entities, relationships — preserve existing + add new)
|
|
215
|
+
- routing (routes — preserve existing + add new)
|
|
216
|
+
- globalState (stores)
|
|
217
|
+
`;
|
|
218
|
+
try {
|
|
219
|
+
await this.ensureApiKey();
|
|
220
|
+
const ai = this.getAICore();
|
|
221
|
+
const generatedContext = await ai.generateStructuredText(prompt, "MegaContext");
|
|
222
|
+
// Preserve identity fields
|
|
223
|
+
generatedContext.project.id = existingContext.project?.id || (0, uuid_1.v4)();
|
|
224
|
+
generatedContext.project.contextPath = ".mycontext";
|
|
225
|
+
generatedContext.project.createdAt = existingContext.project?.createdAt || new Date().toISOString();
|
|
226
|
+
spinner.success({ text: "Architecture evolved!" });
|
|
227
|
+
return await this.reviewAndRefine(generatedContext);
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
spinner.error({ text: "AI generation failed." });
|
|
231
|
+
console.error(chalk_1.default.red(error.message));
|
|
232
|
+
this.showApiKeyHelp();
|
|
233
|
+
process.exit(1);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* FRESH MODE: Original clean-slate interview
|
|
238
|
+
*/
|
|
239
|
+
async startFreshMode() {
|
|
240
|
+
console.log(chalk_1.default.blue("Let's define your Next.js + InstantDB project."));
|
|
241
|
+
console.log(chalk_1.default.gray("I will generate a complete plan based on your description.\n"));
|
|
242
|
+
// 1. Initial Input
|
|
243
|
+
const initialInput = await (0, prompts_1.default)([
|
|
244
|
+
{
|
|
245
|
+
type: "text",
|
|
246
|
+
name: "name",
|
|
247
|
+
message: "Project Name:",
|
|
248
|
+
initial: "my-app",
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
type: "text",
|
|
252
|
+
name: "description",
|
|
253
|
+
message: "Describe your app idea:",
|
|
254
|
+
initial: "A task management app where users can create teams and assign tasks.",
|
|
255
|
+
},
|
|
256
|
+
]);
|
|
257
|
+
if (!initialInput.name)
|
|
258
|
+
process.exit(0);
|
|
259
|
+
// 2. AI Generation
|
|
260
|
+
const spinner = new spinner_1.EnhancedSpinner("Dreaming up the architecture...");
|
|
261
|
+
spinner.start();
|
|
262
|
+
const ALIGN_RULES = `
|
|
263
|
+
[PHILOSOPHY: DETERMINISTIC SCAFFOLDING]:
|
|
264
|
+
- **Next.js + InstantDB First**: We are built for Next.js full-stack projects using InstantDB as the backend.
|
|
265
|
+
- **Mega Context (100% Knowledge)**:
|
|
266
|
+
- Before ANY code is generated, the MegaContext must be 100% populated.
|
|
267
|
+
- Using: Routes, Users/Permissions, Pages, Server Actions, Client Components, Database Schema.
|
|
268
|
+
|
|
269
|
+
[LEGO ASSEMBLY]:
|
|
270
|
+
- **Component Registry**: Every component generated is stored in the Living DB.
|
|
271
|
+
`;
|
|
272
|
+
const prompt = `
|
|
273
|
+
Generate a complete 'MegaContext' JSON for a Next.js + InstantDB application based on this description:
|
|
274
|
+
"${initialInput.description}"
|
|
275
|
+
|
|
276
|
+
Project Name: "${initialInput.name}"
|
|
277
|
+
|
|
278
|
+
The JSON must adhere to the MegaContext structure and the following ALIGNMENT RULES:
|
|
279
|
+
${ALIGN_RULES}
|
|
280
|
+
|
|
281
|
+
- Uses InstantDB for backend.
|
|
282
|
+
- Uses Tailwind + Shadcn for styling.
|
|
283
|
+
- Define granular roles and permissions.
|
|
284
|
+
- Define a comprehensive database schema (InstantDB graph).
|
|
285
|
+
- Define all necessary routes (Next.js App Router).
|
|
286
|
+
|
|
287
|
+
Return valid JSON with sections: project, topLevelDesign, auth, database, routing, globalState.
|
|
288
|
+
`;
|
|
289
|
+
try {
|
|
290
|
+
await this.ensureApiKey();
|
|
291
|
+
const ai = this.getAICore();
|
|
292
|
+
const generatedContext = await ai.generateStructuredText(prompt, "MegaContext");
|
|
293
|
+
// Ensure critical fields are set
|
|
294
|
+
generatedContext.project.id = (0, uuid_1.v4)();
|
|
295
|
+
generatedContext.project.contextPath = ".mycontext";
|
|
296
|
+
generatedContext.project.createdAt = new Date().toISOString();
|
|
297
|
+
spinner.success({ text: "Architecture plan generated!" });
|
|
298
|
+
// 3. Review & Edit Loop
|
|
299
|
+
return await this.reviewAndRefine(generatedContext);
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
spinner.error({ text: "AI generation failed." });
|
|
303
|
+
console.error(chalk_1.default.red(error.message));
|
|
304
|
+
this.showApiKeyHelp();
|
|
305
|
+
process.exit(1);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Get or initialize AICore safely
|
|
310
|
+
*/
|
|
311
|
+
getAICore() {
|
|
312
|
+
try {
|
|
313
|
+
return AICore_1.AICore.getInstance();
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
// AICore not yet initialized — initialize with defaults
|
|
317
|
+
return AICore_1.AICore.getInstance({
|
|
318
|
+
fallbackEnabled: true,
|
|
319
|
+
workingDirectory: this.projectPath,
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Ensure an API key is available for AI generation
|
|
325
|
+
*/
|
|
326
|
+
async ensureApiKey() {
|
|
327
|
+
if (process.env.GEMINI_API_KEY ||
|
|
328
|
+
process.env.GOOGLE_API_KEY ||
|
|
329
|
+
process.env.GITHUB_TOKEN ||
|
|
330
|
+
process.env.MYCONTEXT_GITHUB_TOKEN ||
|
|
331
|
+
process.env.OPENROUTER_API_KEY ||
|
|
332
|
+
process.env.MYCONTEXT_OPENROUTER_API_KEY ||
|
|
333
|
+
process.env.ANTHROPIC_API_KEY ||
|
|
334
|
+
process.env.XAI_API_KEY) {
|
|
335
|
+
return; // At least one key exists
|
|
336
|
+
}
|
|
337
|
+
// No keys — prompt user
|
|
338
|
+
console.log(chalk_1.default.yellow("\n⚠️ No AI API keys found in environment."));
|
|
339
|
+
console.log(chalk_1.default.gray("You need at least one key to generate the architecture plan."));
|
|
340
|
+
this.showApiKeyHelp();
|
|
341
|
+
const response = await (0, prompts_1.default)({
|
|
342
|
+
type: "password",
|
|
343
|
+
name: "apiKey",
|
|
344
|
+
message: "Enter your Gemini API Key (free):",
|
|
345
|
+
});
|
|
346
|
+
if (response.apiKey) {
|
|
347
|
+
process.env.GEMINI_API_KEY = response.apiKey.trim();
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
console.log(chalk_1.default.red("❌ No API key provided. Exiting."));
|
|
351
|
+
process.exit(1);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Show API key help
|
|
356
|
+
*/
|
|
357
|
+
showApiKeyHelp() {
|
|
358
|
+
console.log(chalk_1.default.cyan("\n💡 Get a free key:"));
|
|
359
|
+
console.log(chalk_1.default.gray(" Gemini (Free): https://aistudio.google.com/apikey"));
|
|
360
|
+
console.log(chalk_1.default.gray(" OpenRouter: https://openrouter.ai/keys"));
|
|
361
|
+
console.log(chalk_1.default.gray(" GitHub Models: https://github.com/settings/tokens\n"));
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Present the context to the user and allow edits
|
|
365
|
+
*/
|
|
366
|
+
async reviewAndRefine(context) {
|
|
367
|
+
while (true) {
|
|
368
|
+
console.log(chalk_1.default.cyan("\n--- 📋 Plan Review ---"));
|
|
369
|
+
console.log(`Name: ${chalk_1.default.bold(context.project.name)}`);
|
|
370
|
+
if (context.auth?.roles?.length > 0)
|
|
371
|
+
console.log(`Roles: ${context.auth.roles.map((r) => r.name).join(", ")}`);
|
|
372
|
+
if (context.database?.entities)
|
|
373
|
+
console.log(`Entities: ${Object.keys(context.database.entities).join(", ")}`);
|
|
374
|
+
if (context.routing?.routes)
|
|
375
|
+
console.log(`Routes: ${Object.keys(context.routing.routes).join(", ")}`);
|
|
376
|
+
console.log(chalk_1.default.cyan("----------------------\n"));
|
|
377
|
+
const { action } = await (0, prompts_1.default)({
|
|
378
|
+
type: "select",
|
|
379
|
+
name: "action",
|
|
380
|
+
message: "What would you like to do?",
|
|
381
|
+
choices: [
|
|
382
|
+
{ title: "✅ Looks good, build it!", value: "approve" },
|
|
383
|
+
{ title: "📝 Edit Description & Regenerate", value: "regenerate" },
|
|
384
|
+
{ title: "❌ Cancel", value: "cancel" },
|
|
385
|
+
],
|
|
386
|
+
});
|
|
387
|
+
if (action === "approve") {
|
|
388
|
+
return context;
|
|
389
|
+
}
|
|
390
|
+
else if (action === "cancel") {
|
|
391
|
+
process.exit(0);
|
|
392
|
+
}
|
|
393
|
+
else if (action === "regenerate") {
|
|
394
|
+
console.log(chalk_1.default.yellow("Restarting generation..."));
|
|
395
|
+
return this.startFreshMode();
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
exports.PlanningMode = PlanningMode;
|
|
401
|
+
//# sourceMappingURL=PlanningMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlanningMode.js","sourceRoot":"","sources":["../../src/tui/PlanningMode.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAoC;AACpC,sDAA8B;AAC9B,kDAA0B;AAC1B,6CAA+B;AAC/B,2CAA6B;AAC7B,8CAA2C;AAC3C,8CAAmD;AAGnD,+DAA4D;AAC5D,6DAA0D;AAC1D,8DAA4F;AAC5F,kDAA+C;AAG/C,MAAa,YAAY;IAIvB,YAAY,MAAiB,EAAE,cAAsB,OAAO,CAAC,GAAG,EAAE;QAChE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,kDAAkD;QAClD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEzD,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;QAC9E,IAAI,CAAC;YACH,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAC/C,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,2CAA2C;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,eAA+B;QAC/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAEjE,4DAA4D;QAC5D,MAAM,OAAO,GAAG,IAAA,mCAAiB,EAAC,eAAe,CAAC,CAAC;QAEnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9J,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAChL,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5K,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACtH,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,UAAU,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAClI,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACpM,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9H,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;QAEzE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,iBAAO,EAAC;YAC/B,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,8CAA8C,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAC1E,EAAE,KAAK,EAAE,4CAA4C,EAAE,KAAK,EAAE,MAAM,EAAE;gBACtE,EAAE,KAAK,EAAE,6CAA6C,EAAE,KAAK,EAAE,MAAM,EAAE;gBACvE,EAAE,KAAK,EAAE,sCAAsC,EAAE,KAAK,EAAE,OAAO,EAAE;gBACjE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;aACvC;SACF,CAAC,CAAC;QAEH,IAAI,MAAM,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;QAErD,6CAA6C;QAC7C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,6BAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YAEtC,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACxD,CAAC;YAED,+BAA+B;YAC/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,mBAAmB,CAAC,SAAS,IAAI,eAAe,CAAC,CAAC;QAChE,CAAC;QAED,kCAAkC;QAClC,MAAM,OAAO,GAAG,IAAI,+BAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAElC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,mDAAmD;YACnD,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;YACvE,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAE9B,wCAAwC;YACxC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,iBAAO,EAAC;oBAC9B,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,mDAAmD;oBAC5D,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;gBACH,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClE,kCAAkC;oBAClC,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,eAAe,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC;oBACxE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;oBAC9E,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;oBACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;YACD,0BAA0B;YAC1B,OAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;QACnD,CAAC;QAED,gDAAgD;QAChD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,iBAAO,EAAC;YACnC,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,0CAA0C;YACnD,OAAO,EAAE,kDAAkD;SAC5D,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEjC,2CAA2C;QAC3C,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ;aACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;aAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAChB,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;aACb,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ;aACtC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;aAC3C,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,OAAO,GAAG,IAAI,yBAAe,CAAC,iDAAiD,CAAC,CAAC;QACvF,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,MAAM,MAAM,GAAG;;;;MAIb,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;;6BAEpC,QAAQ,CAAC,KAAK,CAAC,UAAU;MAChD,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;;;MAGlC,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;;;OAGjC,UAAU;;;;;;;;;;;;;;;KAeZ,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAE5B,MAAM,gBAAgB,GAAG,MAAM,EAAE,CAAC,sBAAsB,CACtD,MAAM,EACN,aAAa,CACd,CAAC;YAEF,2BAA2B;YAC3B,gBAAgB,CAAC,OAAO,CAAC,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE,IAAI,IAAA,SAAM,GAAE,CAAC;YACtE,gBAAgB,CAAC,OAAO,CAAC,WAAW,GAAG,YAAY,CAAC;YACpD,gBAAgB,CAAC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAEpG,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAAC;YAEnD,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC,CAAC;QAExF,mBAAmB;QACnB,MAAM,YAAY,GAAG,MAAM,IAAA,iBAAO,EAAC;YACjC;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,QAAQ;aAClB;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,yBAAyB;gBAClC,OAAO,EAAE,sEAAsE;aAChF;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAExC,mBAAmB;QACnB,MAAM,OAAO,GAAG,IAAI,yBAAe,CAAC,iCAAiC,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,MAAM,WAAW,GAAG;;;;;;;;;CASvB,CAAC;QAEE,MAAM,MAAM,GAAG;;OAEZ,YAAY,CAAC,WAAW;;qBAEV,YAAY,CAAC,IAAI;;;MAGhC,WAAW;;;;;;;;;KASZ,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAE5B,MAAM,gBAAgB,GAAG,MAAM,EAAE,CAAC,sBAAsB,CACtD,MAAM,EACN,aAAa,CACd,CAAC;YAEF,iCAAiC;YACjC,gBAAgB,CAAC,OAAO,CAAC,EAAE,GAAG,IAAA,SAAM,GAAE,CAAC;YACvC,gBAAgB,CAAC,OAAO,CAAC,WAAW,GAAG,YAAY,CAAC;YACpD,gBAAgB,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAE9D,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC,CAAC;YAE1D,wBAAwB;YACxB,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,SAAS;QACf,IAAI,CAAC;YACH,OAAO,eAAM,CAAC,WAAW,EAAE,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;YACxD,OAAO,eAAM,CAAC,WAAW,CAAC;gBACxB,eAAe,EAAE,IAAI;gBACrB,gBAAgB,EAAE,IAAI,CAAC,WAAW;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY;QACxB,IACE,OAAO,CAAC,GAAG,CAAC,cAAc;YAC1B,OAAO,CAAC,GAAG,CAAC,cAAc;YAC1B,OAAO,CAAC,GAAG,CAAC,YAAY;YACxB,OAAO,CAAC,GAAG,CAAC,sBAAsB;YAClC,OAAO,CAAC,GAAG,CAAC,kBAAkB;YAC9B,OAAO,CAAC,GAAG,CAAC,4BAA4B;YACxC,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC7B,OAAO,CAAC,GAAG,CAAC,WAAW,EACvB,CAAC;YACD,OAAO,CAAC,0BAA0B;QACpC,CAAC;QAED,wBAAwB;QACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAO,EAAC;YAC7B,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,mCAAmC;SAC7C,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC,CAAC;IACvF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,OAAoB;QAChD,OAAO,IAAI,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,SAAS,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEzD,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5E,IAAI,OAAO,CAAC,QAAQ,EAAE,QAAQ;gBAC5B,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChF,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM;gBACzB,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE3E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YAEpD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,iBAAO,EAAC;gBAC/B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,4BAA4B;gBACrC,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,SAAS,EAAE;oBACtD,EAAE,KAAK,EAAE,kCAAkC,EAAE,KAAK,EAAE,YAAY,EAAE;oBAClE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;iBACvC;aACF,CAAC,CAAC;YAEH,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,OAAO,CAAC;YACjB,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBACtD,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA3YD,oCA2YC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TUIMode } from "../types/tui";
|
|
2
|
+
export declare class TUIClient {
|
|
3
|
+
private state;
|
|
4
|
+
private planningMode;
|
|
5
|
+
private projectPath;
|
|
6
|
+
constructor(projectPath?: string);
|
|
7
|
+
/**
|
|
8
|
+
* Start the TUI in Planning Mode (Context Collection)
|
|
9
|
+
*/
|
|
10
|
+
startPlanningMode(): Promise<any>;
|
|
11
|
+
/**
|
|
12
|
+
* Switch modes
|
|
13
|
+
*/
|
|
14
|
+
updateMode(mode: TUIMode): void;
|
|
15
|
+
/**
|
|
16
|
+
* Display a branded header
|
|
17
|
+
*/
|
|
18
|
+
private displayHeader;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=TUIClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TUIClient.d.ts","sourceRoot":"","sources":["../../src/tui/TUIClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,OAAO,EAAE,MAAM,cAAc,CAAC;AAGjD,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,GAAE,MAAsB;IAe/C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC;IAQvC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,OAAO;IAKxB;;OAEG;IACH,OAAO,CAAC,aAAa;CAKtB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TUIClient = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const PlanningMode_1 = require("./PlanningMode");
|
|
9
|
+
class TUIClient {
|
|
10
|
+
constructor(projectPath = process.cwd()) {
|
|
11
|
+
this.projectPath = projectPath;
|
|
12
|
+
this.state = {
|
|
13
|
+
mode: "PLANNING",
|
|
14
|
+
input: "",
|
|
15
|
+
history: [],
|
|
16
|
+
contextStatus: {
|
|
17
|
+
megaContextComplete: false,
|
|
18
|
+
missingFields: [],
|
|
19
|
+
},
|
|
20
|
+
isProcessing: false,
|
|
21
|
+
};
|
|
22
|
+
this.planningMode = new PlanningMode_1.PlanningMode(this, this.projectPath);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Start the TUI in Planning Mode (Context Collection)
|
|
26
|
+
*/
|
|
27
|
+
async startPlanningMode() {
|
|
28
|
+
this.updateMode("PLANNING");
|
|
29
|
+
this.displayHeader("PLANNING MODE: Context Collection");
|
|
30
|
+
// Delegate to PlanningMode handler
|
|
31
|
+
return await this.planningMode.start();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Switch modes
|
|
35
|
+
*/
|
|
36
|
+
updateMode(mode) {
|
|
37
|
+
this.state.mode = mode;
|
|
38
|
+
console.clear();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Display a branded header
|
|
42
|
+
*/
|
|
43
|
+
displayHeader(title) {
|
|
44
|
+
console.log(chalk_1.default.cyan("========================================"));
|
|
45
|
+
console.log(chalk_1.default.bold.white(` MYCONTEXT | ${title}`));
|
|
46
|
+
console.log(chalk_1.default.cyan("========================================\n"));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.TUIClient = TUIClient;
|
|
50
|
+
//# sourceMappingURL=TUIClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TUIClient.js","sourceRoot":"","sources":["../../src/tui/TUIClient.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,iDAA8C;AAE9C,MAAa,SAAS;IAKpB,YAAY,cAAsB,OAAO,CAAC,GAAG,EAAE;QAC7C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG;YACX,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;YACX,aAAa,EAAE;gBACb,mBAAmB,EAAE,KAAK;gBAC1B,aAAa,EAAE,EAAE;aAClB;YACD,YAAY,EAAE,KAAK;SACpB,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,2BAAY,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,mCAAmC,CAAC,CAAC;QAExD,mCAAmC;QACnC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAa;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAa;QACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;IACxE,CAAC;CACF;AA/CD,8BA+CC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { ProjectConfig } from "./index";
|
|
2
|
+
/**
|
|
3
|
+
* MEGA CONTEXT (The Source of Truth)
|
|
4
|
+
*
|
|
5
|
+
* This interface represents the 100% complete state required to
|
|
6
|
+
* deterministically scaffold a Next.js + InstantDB project.
|
|
7
|
+
*
|
|
8
|
+
* "Deterministic" means:
|
|
9
|
+
* - No AI guessing during scaffold.
|
|
10
|
+
* - All routes, components, and data points are known.
|
|
11
|
+
* - If a field is missing, the TUI must prompt for it BEFORE generation.
|
|
12
|
+
*/
|
|
13
|
+
export interface MegaContext {
|
|
14
|
+
project: ProjectConfig & {
|
|
15
|
+
framework: "nextjs";
|
|
16
|
+
backend: "instantdb";
|
|
17
|
+
styling: "tailwind-shadcn";
|
|
18
|
+
};
|
|
19
|
+
topLevelDesign: {
|
|
20
|
+
theme: "light" | "dark" | "system";
|
|
21
|
+
colors: {
|
|
22
|
+
primary: string;
|
|
23
|
+
secondary: string;
|
|
24
|
+
accent: string;
|
|
25
|
+
background: string;
|
|
26
|
+
foreground: string;
|
|
27
|
+
};
|
|
28
|
+
fonts: {
|
|
29
|
+
heading: string;
|
|
30
|
+
body: string;
|
|
31
|
+
};
|
|
32
|
+
radius: number;
|
|
33
|
+
};
|
|
34
|
+
auth: {
|
|
35
|
+
provider: "instantdb" | "clerk" | "kinde" | "next-auth";
|
|
36
|
+
userModel: {
|
|
37
|
+
fields: Record<string, string>;
|
|
38
|
+
};
|
|
39
|
+
roles: RoleDefinition[];
|
|
40
|
+
permissions: PermissionRule[];
|
|
41
|
+
};
|
|
42
|
+
database: {
|
|
43
|
+
entities: Record<string, EntityDefinition>;
|
|
44
|
+
relationships: RelationshipDefinition[];
|
|
45
|
+
};
|
|
46
|
+
routing: {
|
|
47
|
+
routes: Record<string, RouteNode>;
|
|
48
|
+
};
|
|
49
|
+
globalState: {
|
|
50
|
+
stores: StoreDefinition[];
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export interface RoleDefinition {
|
|
54
|
+
name: string;
|
|
55
|
+
description: string;
|
|
56
|
+
extends?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface PermissionRule {
|
|
59
|
+
role: string;
|
|
60
|
+
resource: string;
|
|
61
|
+
action: "create" | "read" | "update" | "delete" | "manage";
|
|
62
|
+
condition?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface EntityDefinition {
|
|
65
|
+
name: string;
|
|
66
|
+
fields: Record<string, {
|
|
67
|
+
type: "string" | "number" | "boolean" | "json" | "date" | "ref";
|
|
68
|
+
required: boolean;
|
|
69
|
+
unique?: boolean;
|
|
70
|
+
indexed?: boolean;
|
|
71
|
+
}>;
|
|
72
|
+
}
|
|
73
|
+
export interface RelationshipDefinition {
|
|
74
|
+
from: string;
|
|
75
|
+
to: string;
|
|
76
|
+
type: "one-to-one" | "one-to-many" | "many-to-many";
|
|
77
|
+
inverseName: string;
|
|
78
|
+
}
|
|
79
|
+
export interface RouteNode {
|
|
80
|
+
path: string;
|
|
81
|
+
type: "page" | "layout" | "group";
|
|
82
|
+
isProtected: boolean;
|
|
83
|
+
allowedRoles?: string[];
|
|
84
|
+
ui?: {
|
|
85
|
+
title: string;
|
|
86
|
+
description: string;
|
|
87
|
+
layout?: "default" | "dashboard" | "auth";
|
|
88
|
+
components: ComponentUsage[];
|
|
89
|
+
};
|
|
90
|
+
data?: {
|
|
91
|
+
queries: DataQuery[];
|
|
92
|
+
mutations: DataMutation[];
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
export interface ComponentUsage {
|
|
96
|
+
name: string;
|
|
97
|
+
type: "shadcn" | "custom";
|
|
98
|
+
props?: Record<string, any>;
|
|
99
|
+
children?: ComponentUsage[];
|
|
100
|
+
}
|
|
101
|
+
export interface DataQuery {
|
|
102
|
+
name: string;
|
|
103
|
+
entity: string;
|
|
104
|
+
source: "server-component" | "client-hook";
|
|
105
|
+
filter?: Record<string, any>;
|
|
106
|
+
}
|
|
107
|
+
export interface DataMutation {
|
|
108
|
+
name: string;
|
|
109
|
+
description: string;
|
|
110
|
+
args: Record<string, string>;
|
|
111
|
+
inputEntity?: string;
|
|
112
|
+
}
|
|
113
|
+
export interface StoreDefinition {
|
|
114
|
+
name: string;
|
|
115
|
+
state: Record<string, string>;
|
|
116
|
+
actions: string[];
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=mega-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mega-context.d.ts","sourceRoot":"","sources":["../../src/types/mega-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;;;;;GAUG;AACH,MAAM,WAAW,WAAW;IAE1B,OAAO,EAAE,aAAa,GAAG;QACvB,SAAS,EAAE,QAAQ,CAAC;QACpB,OAAO,EAAE,WAAW,CAAC;QACrB,OAAO,EAAE,iBAAiB,CAAC;KAC5B,CAAC;IAGF,cAAc,EAAE;QACd,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;QACnC,MAAM,EAAE;YACN,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,MAAM,CAAC;YACf,UAAU,EAAE,MAAM,CAAC;YACnB,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,KAAK,EAAE;YACL,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;QACF,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAGF,IAAI,EAAE;QACJ,QAAQ,EAAE,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,CAAC;QACxD,SAAS,EAAE;YACT,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAChC,CAAC;QACF,KAAK,EAAE,cAAc,EAAE,CAAC;QACxB,WAAW,EAAE,cAAc,EAAE,CAAC;KAC/B,CAAC;IAIF,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC3C,aAAa,EAAE,sBAAsB,EAAE,CAAC;KACzC,CAAC;IAIF,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;KACnC,CAAC;IAIF,WAAW,EAAE;QACX,MAAM,EAAE,eAAe,EAAE,CAAC;KAC3B,CAAC;CACH;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QACrB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;QAChE,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,cAAc,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAGxB,EAAE,CAAC,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;QAC1C,UAAU,EAAE,cAAc,EAAE,CAAC;KAC9B,CAAC;IAGF,IAAI,CAAC,EAAE;QACL,OAAO,EAAE,SAAS,EAAE,CAAC;QACrB,SAAS,EAAE,YAAY,EAAE,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,kBAAkB,GAAG,aAAa,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mega-context.js","sourceRoot":"","sources":["../../src/types/mega-context.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI MODES & STATE
|
|
3
|
+
*
|
|
4
|
+
* Defines the state machine for the "Claude Code"-like TUI.
|
|
5
|
+
*/
|
|
6
|
+
export type TUIMode = "PLANNING" | "AGENT" | "AUTO_EDIT";
|
|
7
|
+
export interface TUIState {
|
|
8
|
+
mode: TUIMode;
|
|
9
|
+
input: string;
|
|
10
|
+
history: TUIHistoryItem[];
|
|
11
|
+
contextStatus: {
|
|
12
|
+
megaContextComplete: boolean;
|
|
13
|
+
missingFields: string[];
|
|
14
|
+
};
|
|
15
|
+
activeAgent?: string;
|
|
16
|
+
isProcessing: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface TUIHistoryItem {
|
|
19
|
+
role: "user" | "assistant" | "system";
|
|
20
|
+
content: string;
|
|
21
|
+
timestamp: number;
|
|
22
|
+
metadata?: {
|
|
23
|
+
mode: TUIMode;
|
|
24
|
+
command?: string;
|
|
25
|
+
output?: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export type TUISlashCommand = "/plan" | "/act" | "/edit" | "/review" | "/generate" | "/clear";
|
|
29
|
+
//# sourceMappingURL=tui.d.ts.map
|