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.
Files changed (92) hide show
  1. package/README.md +128 -133
  2. package/dist/README.md +128 -133
  3. package/dist/cli.js +76 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/doctor.d.ts +18 -0
  6. package/dist/commands/doctor.d.ts.map +1 -0
  7. package/dist/commands/doctor.js +53 -0
  8. package/dist/commands/doctor.js.map +1 -0
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js +99 -2
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/core/brain/BrainClient.d.ts +2 -0
  13. package/dist/core/brain/BrainClient.d.ts.map +1 -1
  14. package/dist/core/brain/BrainClient.js +19 -0
  15. package/dist/core/brain/BrainClient.js.map +1 -1
  16. package/dist/doctor/DoctorEngine.d.ts +5 -0
  17. package/dist/doctor/DoctorEngine.d.ts.map +1 -0
  18. package/dist/doctor/DoctorEngine.js +491 -0
  19. package/dist/doctor/DoctorEngine.js.map +1 -0
  20. package/dist/doctor/api.d.ts +4 -0
  21. package/dist/doctor/api.d.ts.map +1 -0
  22. package/dist/doctor/api.js +19 -0
  23. package/dist/doctor/api.js.map +1 -0
  24. package/dist/doctor/rules/dead-code-rules.d.ts +3 -0
  25. package/dist/doctor/rules/dead-code-rules.d.ts.map +1 -0
  26. package/dist/doctor/rules/dead-code-rules.js +269 -0
  27. package/dist/doctor/rules/dead-code-rules.js.map +1 -0
  28. package/dist/doctor/rules/index.d.ts +11 -0
  29. package/dist/doctor/rules/index.d.ts.map +1 -0
  30. package/dist/doctor/rules/index.js +21 -0
  31. package/dist/doctor/rules/index.js.map +1 -0
  32. package/dist/doctor/rules/nextjs-rules.d.ts +3 -0
  33. package/dist/doctor/rules/nextjs-rules.d.ts.map +1 -0
  34. package/dist/doctor/rules/nextjs-rules.js +357 -0
  35. package/dist/doctor/rules/nextjs-rules.js.map +1 -0
  36. package/dist/doctor/rules/node-rules.d.ts +3 -0
  37. package/dist/doctor/rules/node-rules.d.ts.map +1 -0
  38. package/dist/doctor/rules/node-rules.js +290 -0
  39. package/dist/doctor/rules/node-rules.js.map +1 -0
  40. package/dist/doctor/rules/turbo-rules.d.ts +3 -0
  41. package/dist/doctor/rules/turbo-rules.d.ts.map +1 -0
  42. package/dist/doctor/rules/turbo-rules.js +215 -0
  43. package/dist/doctor/rules/turbo-rules.js.map +1 -0
  44. package/dist/doctor/types.d.ts +87 -0
  45. package/dist/doctor/types.d.ts.map +1 -0
  46. package/dist/doctor/types.js +6 -0
  47. package/dist/doctor/types.js.map +1 -0
  48. package/dist/package.json +4 -4
  49. package/dist/services/ContextSyncer.d.ts +40 -0
  50. package/dist/services/ContextSyncer.d.ts.map +1 -0
  51. package/dist/services/ContextSyncer.js +219 -0
  52. package/dist/services/ContextSyncer.js.map +1 -0
  53. package/dist/services/ProjectScanner.d.ts +74 -0
  54. package/dist/services/ProjectScanner.d.ts.map +1 -0
  55. package/dist/services/ProjectScanner.js +343 -0
  56. package/dist/services/ProjectScanner.js.map +1 -0
  57. package/dist/services/ScaffoldAgent.d.ts +35 -0
  58. package/dist/services/ScaffoldAgent.d.ts.map +1 -0
  59. package/dist/services/ScaffoldAgent.js +228 -0
  60. package/dist/services/ScaffoldAgent.js.map +1 -0
  61. package/dist/tui/PlanningMode.d.ts +42 -0
  62. package/dist/tui/PlanningMode.d.ts.map +1 -0
  63. package/dist/tui/PlanningMode.js +401 -0
  64. package/dist/tui/PlanningMode.js.map +1 -0
  65. package/dist/tui/TUIClient.d.ts +20 -0
  66. package/dist/tui/TUIClient.d.ts.map +1 -0
  67. package/dist/tui/TUIClient.js +50 -0
  68. package/dist/tui/TUIClient.js.map +1 -0
  69. package/dist/types/mega-context.d.ts +118 -0
  70. package/dist/types/mega-context.d.ts.map +1 -0
  71. package/dist/types/mega-context.js +3 -0
  72. package/dist/types/mega-context.js.map +1 -0
  73. package/dist/types/tui.d.ts +29 -0
  74. package/dist/types/tui.d.ts.map +1 -0
  75. package/dist/types/tui.js +8 -0
  76. package/dist/types/tui.js.map +1 -0
  77. package/dist/types/unified-context.d.ts +102 -0
  78. package/dist/types/unified-context.d.ts.map +1 -0
  79. package/dist/types/unified-context.js +50 -0
  80. package/dist/types/unified-context.js.map +1 -0
  81. package/dist/utils/FileGenerator.d.ts +5 -0
  82. package/dist/utils/FileGenerator.d.ts.map +1 -1
  83. package/dist/utils/FileGenerator.js +48 -0
  84. package/dist/utils/FileGenerator.js.map +1 -1
  85. package/dist/utils/deepMerge.d.ts +14 -0
  86. package/dist/utils/deepMerge.d.ts.map +1 -0
  87. package/dist/utils/deepMerge.js +87 -0
  88. package/dist/utils/deepMerge.js.map +1 -0
  89. package/dist/utils/fileSystem.d.ts.map +1 -1
  90. package/dist/utils/fileSystem.js +32 -4
  91. package/dist/utils/fileSystem.js.map +1 -1
  92. package/package.json +24 -22
@@ -0,0 +1,228 @@
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.ScaffoldAgent = void 0;
40
+ const spinner_1 = require("../utils/spinner");
41
+ const fileSystem_1 = require("../utils/fileSystem");
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const child_process_1 = require("child_process");
44
+ const path = __importStar(require("path"));
45
+ const fs = __importStar(require("fs-extra"));
46
+ class ScaffoldAgent {
47
+ constructor() {
48
+ this.fs = new fileSystem_1.FileSystemManager();
49
+ this.spinner = new spinner_1.EnhancedSpinner("Refining architecture...");
50
+ }
51
+ /**
52
+ * Deterministically scaffold the project from the MegaContext
53
+ */
54
+ async scaffold(context) {
55
+ console.log(chalk_1.default.blue(`\n🚀 Scaling up to 100% deterministic scaffold for: ${context.project.name}\n`));
56
+ const projectPath = path.resolve(process.cwd(), context.project.name);
57
+ // 1. Framework Scaffold (Next.js)
58
+ if (!fs.existsSync(projectPath)) {
59
+ this.spinner.updateText("Bootstrapping Next.js + InstantDB...");
60
+ this.spinner.start();
61
+ try {
62
+ // Using a more deterministic install command (pnpm dlx create-next-app)
63
+ // We use --no-eslint --no-tailwind --no-src-dir etc to have full control?
64
+ // For now, let's stick to standard recommended setup but fast
65
+ (0, child_process_1.execSync)(`pnpm dlx create-next-app@latest ${context.project.name} --typescript --tailwind --eslint --app --no-src-dir --import-alias "@/*" --use-pnpm`, {
66
+ stdio: "ignore"
67
+ });
68
+ this.spinner.success({ text: "Next.js shell created." });
69
+ }
70
+ catch (e) {
71
+ this.spinner.error({ text: "Failed to scaffold Next.js app." });
72
+ throw e;
73
+ }
74
+ }
75
+ // 2. Install InstantDB
76
+ this.spinner.updateText("Installing InstantDB SDK...");
77
+ this.spinner.start();
78
+ (0, child_process_1.execSync)("pnpm add @instantdb/react @instantdb/admin", { cwd: projectPath, stdio: "ignore" });
79
+ this.spinner.success({ text: "InstantDB SDK installed." });
80
+ // 3. Generate Schema
81
+ this.spinner.updateText("Generating InstantDB Schema...");
82
+ this.spinner.start();
83
+ await this.generateSchemaFile(projectPath, context);
84
+ this.spinner.success({ text: "Schema generated from MegaContext." });
85
+ // 4. Generate Routes & Pages
86
+ this.spinner.updateText("Generating Route Structure...");
87
+ this.spinner.start();
88
+ await this.generateRoutes(projectPath, context);
89
+ this.spinner.success({ text: "Routes & Layouts generated." });
90
+ // 5. Persist "Living Brain"
91
+ this.spinner.updateText("Initializing Living Brain (.mycontext)...");
92
+ this.spinner.start();
93
+ await this.saveContext(projectPath, context);
94
+ await this.createAlign(projectPath);
95
+ await this.createReadme(projectPath, context);
96
+ await this.createEnvFile(projectPath);
97
+ this.spinner.success({ text: "Context, Utils, & .env saved." });
98
+ console.log(chalk_1.default.green(`\n✅ Project "${context.project.name}" is ready!`));
99
+ console.log(chalk_1.default.gray(` cd ${context.project.name} && pnpm dev`));
100
+ }
101
+ /**
102
+ * Generate instant.schema.ts
103
+ */
104
+ async generateSchemaFile(projectPath, context) {
105
+ // This would actually generate the full TS file content based on context.database.entities
106
+ // For prototype, we generate a stub
107
+ const schemaContent = `
108
+ import { i } from "@instantdb/react";
109
+
110
+ export const graph = i.graph(
111
+ "${context.project.id}",
112
+ {
113
+ ${Object.entries(context.database.entities).map(([name, def]) => `${name}: i.entity({
114
+ ${Object.keys(def.fields).map(f => `${f}: i.string()`).join(",\n ")}
115
+ })`).join(",\n ")}
116
+ }
117
+ );
118
+ `;
119
+ await fs.ensureDir(path.join(projectPath, "lib"));
120
+ await fs.writeFile(path.join(projectPath, "lib", "instant.schema.ts"), schemaContent);
121
+ }
122
+ /**
123
+ * Generate Next.js App Router structure
124
+ */
125
+ async generateRoutes(projectPath, context) {
126
+ const appDir = path.join(projectPath, "app");
127
+ for (const [routePath, routeNode] of Object.entries(context.routing.routes)) {
128
+ if (routeNode.type === "page") {
129
+ const relativePath = routePath === "/" ? "" : routePath.slice(1); // remove leading slash
130
+ const targetDir = path.join(appDir, relativePath);
131
+ await fs.ensureDir(targetDir);
132
+ const pageContent = `
133
+ export default function Page() {
134
+ return (
135
+ <div className="container mx-auto py-10">
136
+ <h1 className="text-4xl font-bold">${routeNode.ui?.title || "Page"}</h1>
137
+ <p className="mt-4 text-muted-foreground">${routeNode.ui?.description || ""}</p>
138
+ {/* Components: ${routeNode.ui?.components?.map(c => c.name).join(", ")} */}
139
+ </div>
140
+ );
141
+ }
142
+ `;
143
+ await fs.writeFile(path.join(targetDir, "page.tsx"), pageContent);
144
+ }
145
+ }
146
+ }
147
+ // ... existing methods ...
148
+ /**
149
+ * Create .env file with API keys
150
+ */
151
+ async createEnvFile(projectPath) {
152
+ // Collect specific keys we care about
153
+ const keys = [];
154
+ if (process.env.GEMINI_API_KEY)
155
+ keys.push(`GEMINI_API_KEY=${process.env.GEMINI_API_KEY}`);
156
+ if (process.env.GOOGLE_API_KEY)
157
+ keys.push(`GOOGLE_API_KEY=${process.env.GOOGLE_API_KEY}`);
158
+ if (process.env.OPENROUTER_API_KEY)
159
+ keys.push(`OPENROUTER_API_KEY=${process.env.OPENROUTER_API_KEY}`);
160
+ // Default InstantDB App ID (Placeholder)
161
+ keys.push(`NEXT_PUBLIC_INSTANT_APP_ID=${process.env.NEXT_PUBLIC_INSTANT_APP_ID || "YOUR_APP_ID_HERE"}`);
162
+ if (keys.length > 0) {
163
+ await fs.writeFile(path.join(projectPath, ".env"), keys.join("\n"));
164
+ }
165
+ }
166
+ /**
167
+ * Save the MegaContext to .mycontext/context.json
168
+ */
169
+ async saveContext(projectPath, context) {
170
+ const contextDir = path.join(projectPath, ".mycontext");
171
+ await fs.ensureDir(contextDir);
172
+ await fs.writeJSON(path.join(contextDir, "context.json"), context, { spaces: 2 });
173
+ }
174
+ /**
175
+ * Create the .mycontext/ALIGN file
176
+ */
177
+ async createAlign(projectPath) {
178
+ const alignContent = `# MyContext Alignment Guard [SYNC]
179
+ Any changes to code, architecture, or features MUST be synchronized with:
180
+ 1. \`.mycontext/context.json\` (Source of Truth / Living Brain)
181
+ 2. \`README.md\` (Human-facing orientation & usage)
182
+
183
+ [PHILOSOPHY: DETERMINISTIC SCAFFOLDING]:
184
+ - **Next.js + InstantDB First**: We are built for Next.js full-stack projects using InstantDB as the backend.
185
+ - **Mega Context (100% Knowledge)**:
186
+ - Before ANY code is generated, the MegaContext must be 100% populated.
187
+
188
+ [PROJECT SCANNER — CONTEXT SYNC]:
189
+ - Run \`mycontext scan --assess\` to compare actual code against planned context.json.
190
+ - Identifies routes/components/entities in code but missing from context, and vice versa.
191
+ - Use during development to keep context.json aligned with reality.
192
+ `;
193
+ const contextDir = path.join(projectPath, ".mycontext");
194
+ await fs.ensureDir(contextDir);
195
+ await fs.writeFile(path.join(contextDir, "ALIGN"), alignContent);
196
+ }
197
+ /**
198
+ * Generate a README.md based on the context
199
+ */
200
+ async createReadme(projectPath, context) {
201
+ const readmeContent = `# ${context.project.name}
202
+
203
+ ${context.project.description}
204
+
205
+ ## Tech Stack
206
+ - **Framework**: Next.js (App Router)
207
+ - **Backend**: InstantDB
208
+ - **Styling**: TailwindCSS + ShadCN
209
+
210
+ ## Computed Architecture
211
+ - **Roles**: ${context.auth.roles.map(r => r.name).join(", ")}
212
+ - **Entities**: ${Object.keys(context.database.entities).join(", ")}
213
+ - **Routes**: ${Object.keys(context.routing.routes).join(", ")}
214
+
215
+ ## Getting Started
216
+
217
+ \`\`\`bash
218
+ pnpm install
219
+ pnpm dev
220
+ \`\`\`
221
+
222
+ Generated by MyContext CLI 🚀
223
+ `;
224
+ await fs.writeFile(path.join(projectPath, "README.md"), readmeContent);
225
+ }
226
+ }
227
+ exports.ScaffoldAgent = ScaffoldAgent;
228
+ //# sourceMappingURL=ScaffoldAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScaffoldAgent.js","sourceRoot":"","sources":["../../src/services/ScaffoldAgent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { TUIClient } from "./TUIClient";
2
+ import { MegaContext } from "../types/mega-context";
3
+ export declare class PlanningMode {
4
+ private client;
5
+ private projectPath;
6
+ constructor(client: TUIClient, projectPath?: string);
7
+ /**
8
+ * Start the AI-driven interview process.
9
+ * If existing context is found, enters refinement mode.
10
+ * Otherwise, starts fresh.
11
+ */
12
+ start(): Promise<MegaContext>;
13
+ /**
14
+ * Load existing context.json if present (schema-agnostic)
15
+ */
16
+ private loadExistingContext;
17
+ /**
18
+ * REFINEMENT MODE: Schema-agnostic — works with MegaContext OR Brain format
19
+ */
20
+ private startRefinementMode;
21
+ /**
22
+ * FRESH MODE: Original clean-slate interview
23
+ */
24
+ private startFreshMode;
25
+ /**
26
+ * Get or initialize AICore safely
27
+ */
28
+ private getAICore;
29
+ /**
30
+ * Ensure an API key is available for AI generation
31
+ */
32
+ private ensureApiKey;
33
+ /**
34
+ * Show API key help
35
+ */
36
+ private showApiKeyHelp;
37
+ /**
38
+ * Present the context to the user and allow edits
39
+ */
40
+ private reviewAndRefine;
41
+ }
42
+ //# sourceMappingURL=PlanningMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanningMode.d.ts","sourceRoot":"","sources":["../../src/tui/PlanningMode.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAOpD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,SAAS,EAAE,WAAW,GAAE,MAAsB;IAKlE;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC;IAWnC;;OAEG;YACW,mBAAmB;IAajC;;OAEG;YACW,mBAAmB;IAwKjC;;OAEG;YACW,cAAc;IAiF5B;;OAEG;IACH,OAAO,CAAC,SAAS;IAYjB;;OAEG;YACW,YAAY;IAiC1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;YACW,eAAe;CAmC9B"}