mycontext-cli 2.0.34 → 2.0.36

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.
@@ -0,0 +1,233 @@
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.GenerateDesignPromptCommand = void 0;
40
+ exports.registerGenerateDesignPromptCommand = registerGenerateDesignPromptCommand;
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const fs = __importStar(require("fs-extra"));
43
+ const path_1 = __importDefault(require("path"));
44
+ const fileNames_1 = require("../constants/fileNames");
45
+ const spinner_1 = require("../utils/spinner");
46
+ const logger_1 = require("../utils/logger");
47
+ class GenerateDesignPromptCommand {
48
+ constructor() {
49
+ this.spinner = new spinner_1.EnhancedSpinner("Generating design prompt...");
50
+ }
51
+ async execute(options) {
52
+ const projectPath = process.cwd();
53
+ const contextDir = path_1.default.join(projectPath, ".mycontext");
54
+ this.spinner.start();
55
+ // Check if .mycontext directory exists
56
+ if (!fs.existsSync(contextDir)) {
57
+ this.spinner.fail("No .mycontext directory found");
58
+ console.log(chalk_1.default.red("\n❌ No .mycontext directory found. Run 'mycontext generate context' first."));
59
+ return;
60
+ }
61
+ // Load all context files
62
+ const context = await this.loadContextFiles(contextDir);
63
+ // Generate the design prompt
64
+ const prompt = this.generateDesignPrompt(context, options.format || "general");
65
+ // Determine output path
66
+ const outputPath = options.output
67
+ ? path_1.default.resolve(options.output)
68
+ : path_1.default.join(contextDir, "design-prompt.txt");
69
+ // Write the prompt
70
+ await fs.writeFile(outputPath, prompt, "utf8");
71
+ this.spinner.succeed("Design prompt generated");
72
+ console.log(chalk_1.default.green(`\n✅ Design prompt saved to: ${outputPath}`));
73
+ console.log(chalk_1.default.blue("\n💡 Copy this prompt and paste it into your AI design tool (Stitch, etc.)"));
74
+ console.log(chalk_1.default.gray(`\n📋 Prompt length: ${prompt.length} characters (${Math.ceil(prompt.length / 1000)}k)`));
75
+ // Also output to console if requested
76
+ if (options.format === "api") {
77
+ console.log(chalk_1.default.yellow("\n📡 API JSON format:"));
78
+ console.log(JSON.stringify({
79
+ prompt,
80
+ metadata: {
81
+ generatedAt: new Date().toISOString(),
82
+ format: options.format,
83
+ contextFiles: Object.keys(context).filter((key) => context[key]),
84
+ },
85
+ }, null, 2));
86
+ }
87
+ }
88
+ async loadContextFiles(contextDir) {
89
+ const context = {};
90
+ const files = [
91
+ { key: "prd", file: fileNames_1.CONTEXT_FILES.PRD },
92
+ { key: "features", file: fileNames_1.CONTEXT_FILES.FEATURES },
93
+ { key: "userFlows", file: fileNames_1.CONTEXT_FILES.USER_FLOWS },
94
+ { key: "edgeCases", file: fileNames_1.CONTEXT_FILES.EDGE_CASES },
95
+ { key: "technicalSpecs", file: fileNames_1.CONTEXT_FILES.TECHNICAL_SPECS },
96
+ { key: "branding", file: fileNames_1.CONTEXT_FILES.BRANDING },
97
+ { key: "projectStructure", file: fileNames_1.CONTEXT_FILES.PROJECT_STRUCTURE },
98
+ ];
99
+ for (const { key, file } of files) {
100
+ const filePath = path_1.default.join(contextDir, file);
101
+ if (fs.existsSync(filePath)) {
102
+ try {
103
+ const content = fs.readFileSync(filePath, "utf8");
104
+ // Clean up markdown headers and metadata for cleaner prompt
105
+ const cleaned = this.cleanContent(content);
106
+ if (cleaned.trim()) {
107
+ context[key] = cleaned;
108
+ }
109
+ }
110
+ catch (error) {
111
+ logger_1.logger.warn(`Could not load ${file}`);
112
+ }
113
+ }
114
+ }
115
+ // Load component list if exists
116
+ const componentListPath = path_1.default.join(contextDir, fileNames_1.CONTEXT_FILES.COMPONENT_LIST);
117
+ if (fs.existsSync(componentListPath)) {
118
+ try {
119
+ const componentList = JSON.parse(fs.readFileSync(componentListPath, "utf8"));
120
+ context.componentList = JSON.stringify(componentList, null, 2);
121
+ }
122
+ catch (error) {
123
+ logger_1.logger.warn("Could not load component list");
124
+ }
125
+ }
126
+ return context;
127
+ }
128
+ cleanContent(content) {
129
+ // Remove metadata footers
130
+ return content
131
+ .replace(/---\s*\n[\s\S]*?Generated by:.*?\n[\s\S]*?---/g, "")
132
+ .replace(/\*\*Generated\*\*:.*?\n/g, "")
133
+ .replace(/\*\*Source Context Files\*\*:.*?\n/g, "")
134
+ .replace(/## Document Information[\s\S]*?$/g, "")
135
+ .replace(/## Context File References[\s\S]*?$/g, "")
136
+ .trim();
137
+ }
138
+ generateDesignPrompt(context, format) {
139
+ const sections = [];
140
+ // Header
141
+ sections.push("# App Design Context");
142
+ sections.push("This document contains all the context needed to design beautiful, production-ready UI screens for this application.");
143
+ sections.push("");
144
+ // PRD Section (most important)
145
+ if (context.prd) {
146
+ sections.push("## Product Requirements Document (PRD)");
147
+ sections.push(context.prd);
148
+ sections.push("");
149
+ }
150
+ // Features Section
151
+ if (context.features) {
152
+ sections.push("## Features & User Actions");
153
+ sections.push(context.features);
154
+ sections.push("");
155
+ }
156
+ // User Flows Section
157
+ if (context.userFlows) {
158
+ sections.push("## User Flows");
159
+ sections.push(context.userFlows);
160
+ sections.push("");
161
+ }
162
+ // Branding Section (critical for design)
163
+ if (context.branding) {
164
+ sections.push("## Brand Guidelines & Design System");
165
+ sections.push(context.branding);
166
+ sections.push("");
167
+ }
168
+ // Technical Specs (for understanding constraints)
169
+ if (context.technicalSpecs) {
170
+ sections.push("## Technical Specifications");
171
+ sections.push(context.technicalSpecs);
172
+ sections.push("");
173
+ }
174
+ // Edge Cases (for comprehensive design)
175
+ if (context.edgeCases) {
176
+ sections.push("## Edge Cases & Error States");
177
+ sections.push(context.edgeCases);
178
+ sections.push("");
179
+ }
180
+ // Component List (if exists)
181
+ if (context.componentList) {
182
+ sections.push("## Required Components");
183
+ sections.push("The following components should be included in the design:");
184
+ sections.push("```json");
185
+ sections.push(context.componentList);
186
+ sections.push("```");
187
+ sections.push("");
188
+ }
189
+ // Project Structure (for context)
190
+ if (context.projectStructure) {
191
+ sections.push("## Project Structure");
192
+ sections.push(context.projectStructure);
193
+ sections.push("");
194
+ }
195
+ // Format-specific instructions
196
+ if (format === "stitch") {
197
+ sections.push("---");
198
+ sections.push("");
199
+ sections.push("## Design Instructions for Stitch");
200
+ sections.push("");
201
+ sections.push("Please create beautiful, modern UI designs for this application based on the context above.");
202
+ sections.push("");
203
+ sections.push("Design Requirements:");
204
+ sections.push("- Follow the brand guidelines and design system specified above");
205
+ sections.push("- Create designs for all user flows and features mentioned");
206
+ sections.push("- Include all required components from the component list");
207
+ sections.push("- Consider edge cases and error states in your designs");
208
+ sections.push("- Ensure designs are mobile-first and responsive");
209
+ sections.push("- Use modern UI/UX best practices and accessibility standards");
210
+ }
211
+ else if (format === "general") {
212
+ sections.push("---");
213
+ sections.push("");
214
+ sections.push("Use this context to design beautiful UI screens for this application.");
215
+ sections.push("Focus on the user flows, features, and brand guidelines provided above.");
216
+ }
217
+ return sections.join("\n");
218
+ }
219
+ }
220
+ exports.GenerateDesignPromptCommand = GenerateDesignPromptCommand;
221
+ function registerGenerateDesignPromptCommand(program) {
222
+ program
223
+ .command("generate:design-prompt")
224
+ .alias("gdp")
225
+ .description("Generate a design prompt optimized for AI design tools (Stitch, etc.)")
226
+ .option("-o, --output <path>", "Output file path (default: .mycontext/design-prompt.txt)")
227
+ .option("-f, --format <format>", "Output format: stitch, general, or api (default: general)")
228
+ .action(async (options) => {
229
+ const command = new GenerateDesignPromptCommand();
230
+ await command.execute(options);
231
+ });
232
+ }
233
+ //# sourceMappingURL=generate-design-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-design-prompt.js","sourceRoot":"","sources":["../../src/commands/generate-design-prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { Command } from "commander";
2
+ interface SampleDataOptions {
3
+ count?: number;
4
+ types?: string;
5
+ output?: string;
6
+ verbose?: boolean;
7
+ }
8
+ /**
9
+ * Generate realistic sample data based on project types and schema
10
+ * Uses AI to create contextual, realistic test data for screens and previews
11
+ */
12
+ export declare class GenerateSampleDataCommand {
13
+ private spinner;
14
+ private aiClient;
15
+ constructor();
16
+ execute(options: SampleDataOptions): Promise<void>;
17
+ /**
18
+ * Load context files to understand what sample data to generate
19
+ */
20
+ private loadContext;
21
+ /**
22
+ * Generate sample data using AI based on project context
23
+ */
24
+ private generateSampleData;
25
+ /**
26
+ * Build comprehensive prompt for sample data generation
27
+ */
28
+ private buildSampleDataPrompt;
29
+ /**
30
+ * Generate fallback sample data when AI fails
31
+ */
32
+ private generateFallbackData;
33
+ /**
34
+ * Show summary of generated data
35
+ */
36
+ private showSummary;
37
+ }
38
+ /**
39
+ * Register the generate:sample-data command
40
+ */
41
+ export declare function registerGenerateSampleDataCommand(program: Command): void;
42
+ export {};
43
+ //# sourceMappingURL=generate-sample-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-sample-data.d.ts","sourceRoot":"","sources":["../../src/commands/generate-sample-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAOD;;;GAGG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAAiB;;IAO3B,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDxD;;OAEG;YACW,WAAW;IAsCzB;;OAEG;YACW,kBAAkB;IAoChC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4C7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiD5B;;OAEG;IACH,OAAO,CAAC,WAAW;CAkBpB;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwBxE"}
@@ -0,0 +1,268 @@
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.GenerateSampleDataCommand = void 0;
40
+ exports.registerGenerateSampleDataCommand = registerGenerateSampleDataCommand;
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const fs = __importStar(require("fs-extra"));
43
+ const path_1 = __importDefault(require("path"));
44
+ const fileNames_1 = require("../constants/fileNames");
45
+ const spinner_1 = require("../utils/spinner");
46
+ const logger_1 = require("../utils/logger");
47
+ const hybridAIClient_1 = require("../utils/hybridAIClient");
48
+ /**
49
+ * Generate realistic sample data based on project types and schema
50
+ * Uses AI to create contextual, realistic test data for screens and previews
51
+ */
52
+ class GenerateSampleDataCommand {
53
+ constructor() {
54
+ this.spinner = new spinner_1.EnhancedSpinner("Generating sample data...");
55
+ this.aiClient = new hybridAIClient_1.HybridAIClient();
56
+ }
57
+ async execute(options) {
58
+ const projectPath = process.cwd();
59
+ const contextDir = path_1.default.join(projectPath, ".mycontext");
60
+ this.spinner.start();
61
+ // Check if .mycontext directory exists
62
+ if (!fs.existsSync(contextDir)) {
63
+ this.spinner.fail("No .mycontext directory found");
64
+ console.log(chalk_1.default.red("\n❌ No .mycontext directory found. Run 'mycontext init' first."));
65
+ return;
66
+ }
67
+ try {
68
+ // Load context files for understanding what data to generate
69
+ const context = await this.loadContext(contextDir, projectPath);
70
+ // Generate sample data using AI
71
+ const sampleData = await this.generateSampleData(context, options);
72
+ // Determine output path
73
+ const outputPath = options.output
74
+ ? path_1.default.resolve(options.output)
75
+ : path_1.default.join(contextDir, "sample-data.json");
76
+ // Write sample data
77
+ await fs.writeFile(outputPath, JSON.stringify(sampleData, null, 2), "utf8");
78
+ this.spinner.succeed("Sample data generated");
79
+ console.log(chalk_1.default.green(`\n✅ Sample data saved to: ${outputPath}`));
80
+ console.log(chalk_1.default.blue("\n💡 This data will be used for realistic screen previews and testing"));
81
+ // Show summary
82
+ this.showSummary(sampleData);
83
+ }
84
+ catch (error) {
85
+ this.spinner.fail("Sample data generation failed");
86
+ logger_1.logger.error("Error generating sample data:", error.message);
87
+ throw error;
88
+ }
89
+ }
90
+ /**
91
+ * Load context files to understand what sample data to generate
92
+ */
93
+ async loadContext(contextDir, projectPath) {
94
+ const context = {};
95
+ // Load PRD for project understanding
96
+ const prdPath = path_1.default.join(contextDir, fileNames_1.CONTEXT_FILES.PRD);
97
+ if (fs.existsSync(prdPath)) {
98
+ context.prd = fs.readFileSync(prdPath, "utf8");
99
+ }
100
+ // Load types definition
101
+ const typesPath = path_1.default.join(contextDir, fileNames_1.CONTEXT_FILES.TYPES);
102
+ if (fs.existsSync(typesPath)) {
103
+ context.types = fs.readFileSync(typesPath, "utf8");
104
+ }
105
+ // Load InstantDB schema if exists
106
+ const schemaPath = path_1.default.join(projectPath, "instant.schema.ts");
107
+ if (fs.existsSync(schemaPath)) {
108
+ context.schema = fs.readFileSync(schemaPath, "utf8");
109
+ }
110
+ // Load features for understanding use cases
111
+ const featuresPath = path_1.default.join(contextDir, fileNames_1.CONTEXT_FILES.FEATURES);
112
+ if (fs.existsSync(featuresPath)) {
113
+ context.features = fs.readFileSync(featuresPath, "utf8");
114
+ }
115
+ return context;
116
+ }
117
+ /**
118
+ * Generate sample data using AI based on project context
119
+ */
120
+ async generateSampleData(context, options) {
121
+ const count = options.count || 10;
122
+ // Build prompt for AI
123
+ const prompt = this.buildSampleDataPrompt(context, count, options.types);
124
+ if (options.verbose) {
125
+ logger_1.logger.info("Generating sample data with AI...");
126
+ }
127
+ // Use AI to generate sample data
128
+ const response = await this.aiClient.generateText(prompt, {
129
+ temperature: 0.8, // Higher temperature for more variety in sample data
130
+ maxTokens: 4000,
131
+ });
132
+ // Parse response (AI should return JSON)
133
+ try {
134
+ const responseText = response.text;
135
+ // Extract JSON from response
136
+ const jsonMatch = responseText.match(/```json\n([\s\S]*?)\n```/);
137
+ if (jsonMatch && jsonMatch[1]) {
138
+ return JSON.parse(jsonMatch[1]);
139
+ }
140
+ // Try to parse as direct JSON
141
+ return JSON.parse(responseText);
142
+ }
143
+ catch (error) {
144
+ logger_1.logger.warn("Could not parse AI response as JSON, using fallback data");
145
+ return this.generateFallbackData(context, count);
146
+ }
147
+ }
148
+ /**
149
+ * Build comprehensive prompt for sample data generation
150
+ */
151
+ buildSampleDataPrompt(context, count, types) {
152
+ let prompt = `You are a data generator. Generate realistic, production-quality sample data for testing and previews.
153
+
154
+ IMPORTANT:
155
+ - Generate VALID JSON only
156
+ - Use realistic, varied data (names, emails, dates, etc.)
157
+ - Match the data types and schema provided
158
+ - Include ${count} items for each data type
159
+ - Make data contextually relevant to the project
160
+ - Output ONLY JSON, wrapped in \`\`\`json code blocks
161
+
162
+ `;
163
+ if (context.prd) {
164
+ prompt += `\n## PROJECT CONTEXT:\n${context.prd.substring(0, 2000)}\n`;
165
+ }
166
+ if (context.types) {
167
+ prompt += `\n## TYPE DEFINITIONS:\n${context.types}\n`;
168
+ }
169
+ if (context.schema) {
170
+ prompt += `\n## DATABASE SCHEMA:\n${context.schema}\n`;
171
+ }
172
+ if (context.features) {
173
+ prompt += `\n## FEATURES (for context):\n${context.features.substring(0, 1000)}\n`;
174
+ }
175
+ if (types) {
176
+ prompt += `\n## SPECIFIC TYPES TO GENERATE:\n${types}\n`;
177
+ }
178
+ else {
179
+ prompt += `\n## GENERATE DATA FOR:\n- users (with realistic names, emails, avatars, roles)\n- Any other entities defined in the schema/types\n`;
180
+ }
181
+ prompt += `\nGenerate realistic sample data matching the above context. Return as JSON with keys for each entity type.`;
182
+ return prompt;
183
+ }
184
+ /**
185
+ * Generate fallback sample data when AI fails
186
+ */
187
+ generateFallbackData(context, count) {
188
+ const data = {
189
+ users: [],
190
+ };
191
+ // Generate basic user data
192
+ const firstNames = [
193
+ "Alice",
194
+ "Bob",
195
+ "Charlie",
196
+ "Diana",
197
+ "Eve",
198
+ "Frank",
199
+ "Grace",
200
+ "Henry",
201
+ "Ivy",
202
+ "Jack",
203
+ ];
204
+ const lastNames = [
205
+ "Smith",
206
+ "Johnson",
207
+ "Williams",
208
+ "Brown",
209
+ "Jones",
210
+ "Garcia",
211
+ "Miller",
212
+ "Davis",
213
+ "Rodriguez",
214
+ "Martinez",
215
+ ];
216
+ for (let i = 0; i < Math.min(count, 10); i++) {
217
+ const firstName = firstNames[i % firstNames.length];
218
+ const lastName = lastNames[i % lastNames.length];
219
+ data.users.push({
220
+ id: `user-${i + 1}`,
221
+ name: `${firstName} ${lastName}`,
222
+ email: `${firstName.toLowerCase()}.${lastName.toLowerCase()}@example.com`,
223
+ avatar: `https://i.pravatar.cc/150?img=${i + 1}`,
224
+ role: i === 0 ? "admin" : "user",
225
+ createdAt: new Date(Date.now() - Math.random() * 365 * 24 * 60 * 60 * 1000).toISOString(),
226
+ });
227
+ }
228
+ return data;
229
+ }
230
+ /**
231
+ * Show summary of generated data
232
+ */
233
+ showSummary(data) {
234
+ console.log(chalk_1.default.yellow("\n📊 Generated Sample Data:"));
235
+ Object.keys(data).forEach((key) => {
236
+ const items = data[key];
237
+ if (Array.isArray(items)) {
238
+ console.log(chalk_1.default.gray(` ${key}: ${items.length} items`));
239
+ }
240
+ else {
241
+ console.log(chalk_1.default.gray(` ${key}: ${typeof items}`));
242
+ }
243
+ });
244
+ console.log(chalk_1.default.gray("\n💡 Use this data with 'mycontext generate:screens' for realistic previews"));
245
+ }
246
+ }
247
+ exports.GenerateSampleDataCommand = GenerateSampleDataCommand;
248
+ /**
249
+ * Register the generate:sample-data command
250
+ */
251
+ function registerGenerateSampleDataCommand(program) {
252
+ program
253
+ .command("generate:sample-data")
254
+ .alias("gsd")
255
+ .description("Generate realistic sample data based on types and schema for screen previews")
256
+ .option("-c, --count <number>", "Number of items per type", "10")
257
+ .option("-t, --types <types>", "Comma-separated list of data types to generate")
258
+ .option("-o, --output <path>", "Output file path (default: .mycontext/sample-data.json)")
259
+ .option("-v, --verbose", "Show detailed output")
260
+ .action(async (options) => {
261
+ const command = new GenerateSampleDataCommand();
262
+ await command.execute({
263
+ ...options,
264
+ count: options.count ? parseInt(options.count) : 10,
265
+ });
266
+ });
267
+ }
268
+ //# sourceMappingURL=generate-sample-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-sample-data.js","sourceRoot":"","sources":["../../src/commands/generate-sample-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { Command } from "commander";
2
+ interface ScreenGenerationOptions {
3
+ format?: string;
4
+ output?: string;
5
+ screen?: string;
6
+ all?: boolean;
7
+ includeScreenshot?: boolean;
8
+ screenshot?: boolean;
9
+ verbose?: boolean;
10
+ open?: boolean;
11
+ }
12
+ /**
13
+ * Generate visual screens (HTML/PNG) using Gemini API + nanobanana-style generation
14
+ * Reads context from .mycontext/ and generates screens with realistic previews
15
+ */
16
+ export declare class GenerateScreensCommand {
17
+ private spinner;
18
+ private geminiClient;
19
+ constructor();
20
+ execute(screenName?: string, options?: ScreenGenerationOptions): Promise<void>;
21
+ /**
22
+ * Load context files for screen generation
23
+ */
24
+ private loadContext;
25
+ /**
26
+ * Determine which screens to generate based on options and context
27
+ */
28
+ private determineScreens;
29
+ /**
30
+ * Extract screen names from user flows
31
+ */
32
+ private extractScreenNamesFromFlows;
33
+ /**
34
+ * Generate a single screen
35
+ */
36
+ private generateScreen;
37
+ /**
38
+ * Update screens manifest file
39
+ */
40
+ private updateScreensManifest;
41
+ /**
42
+ * Open generated screen in browser
43
+ */
44
+ private openInBrowser;
45
+ }
46
+ /**
47
+ * Register the generate:screens command
48
+ */
49
+ export declare function registerGenerateScreensCommand(program: Command): void;
50
+ export {};
51
+ //# sourceMappingURL=generate-screens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-screens.d.ts","sourceRoot":"","sources":["../../src/commands/generate-screens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,UAAU,uBAAuB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAWD;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAe;;IAO7B,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;IA8FxF;;OAEG;YACW,WAAW;IAgDzB;;OAEG;YACW,gBAAgB;IAkC9B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAqBnC;;OAEG;YACW,cAAc;IA+D5B;;OAEG;YACW,qBAAqB;IAsCnC;;OAEG;YACW,aAAa;CA4B5B;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2BrE"}