helix-lang 11.0.0

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 (193) hide show
  1. package/README.md +168 -0
  2. package/dist/architect.d.ts +14 -0
  3. package/dist/architect.d.ts.map +1 -0
  4. package/dist/architect.js +127 -0
  5. package/dist/architect.js.map +1 -0
  6. package/dist/bin/helix.d.ts +20 -0
  7. package/dist/bin/helix.d.ts.map +1 -0
  8. package/dist/bin/helix.js +921 -0
  9. package/dist/bin/helix.js.map +1 -0
  10. package/dist/commands/collaborate/index.d.ts +2 -0
  11. package/dist/commands/collaborate/index.d.ts.map +1 -0
  12. package/dist/commands/collaborate/index.js +129 -0
  13. package/dist/commands/collaborate/index.js.map +1 -0
  14. package/dist/commands/collaborate/server.d.ts +31 -0
  15. package/dist/commands/collaborate/server.d.ts.map +1 -0
  16. package/dist/commands/collaborate/server.js +159 -0
  17. package/dist/commands/collaborate/server.js.map +1 -0
  18. package/dist/commands/deploy/index.d.ts +25 -0
  19. package/dist/commands/deploy/index.d.ts.map +1 -0
  20. package/dist/commands/deploy/index.js +130 -0
  21. package/dist/commands/deploy/index.js.map +1 -0
  22. package/dist/commands/deploy/platforms/fly.d.ts +9 -0
  23. package/dist/commands/deploy/platforms/fly.d.ts.map +1 -0
  24. package/dist/commands/deploy/platforms/fly.js +68 -0
  25. package/dist/commands/deploy/platforms/fly.js.map +1 -0
  26. package/dist/commands/deploy/platforms/railway.d.ts +9 -0
  27. package/dist/commands/deploy/platforms/railway.d.ts.map +1 -0
  28. package/dist/commands/deploy/platforms/railway.js +115 -0
  29. package/dist/commands/deploy/platforms/railway.js.map +1 -0
  30. package/dist/commands/deploy/platforms/vercel.d.ts +10 -0
  31. package/dist/commands/deploy/platforms/vercel.d.ts.map +1 -0
  32. package/dist/commands/deploy/platforms/vercel.js +126 -0
  33. package/dist/commands/deploy/platforms/vercel.js.map +1 -0
  34. package/dist/commands/deploy.d.ts +6 -0
  35. package/dist/commands/deploy.d.ts.map +1 -0
  36. package/dist/commands/deploy.js +56 -0
  37. package/dist/commands/deploy.js.map +1 -0
  38. package/dist/commands/evolve/analyzers/performance.d.ts +13 -0
  39. package/dist/commands/evolve/analyzers/performance.d.ts.map +1 -0
  40. package/dist/commands/evolve/analyzers/performance.js +591 -0
  41. package/dist/commands/evolve/analyzers/performance.js.map +1 -0
  42. package/dist/commands/evolve/analyzers/security.d.ts +21 -0
  43. package/dist/commands/evolve/analyzers/security.d.ts.map +1 -0
  44. package/dist/commands/evolve/analyzers/security.js +280 -0
  45. package/dist/commands/evolve/analyzers/security.js.map +1 -0
  46. package/dist/commands/evolve/index.d.ts +2 -0
  47. package/dist/commands/evolve/index.d.ts.map +1 -0
  48. package/dist/commands/evolve/index.js +122 -0
  49. package/dist/commands/evolve/index.js.map +1 -0
  50. package/dist/commands/generate.d.ts +6 -0
  51. package/dist/commands/generate.d.ts.map +1 -0
  52. package/dist/commands/generate.js +277 -0
  53. package/dist/commands/generate.js.map +1 -0
  54. package/dist/commands/install.d.ts +2 -0
  55. package/dist/commands/install.d.ts.map +1 -0
  56. package/dist/commands/install.js +176 -0
  57. package/dist/commands/install.js.map +1 -0
  58. package/dist/commands/library/index.d.ts +27 -0
  59. package/dist/commands/library/index.d.ts.map +1 -0
  60. package/dist/commands/library/index.js +126 -0
  61. package/dist/commands/library/index.js.map +1 -0
  62. package/dist/commands/migrate.d.ts +5 -0
  63. package/dist/commands/migrate.d.ts.map +1 -0
  64. package/dist/commands/migrate.js +258 -0
  65. package/dist/commands/migrate.js.map +1 -0
  66. package/dist/commands/new.d.ts +6 -0
  67. package/dist/commands/new.d.ts.map +1 -0
  68. package/dist/commands/new.js +195 -0
  69. package/dist/commands/new.js.map +1 -0
  70. package/dist/commands/preflight.d.ts +20 -0
  71. package/dist/commands/preflight.d.ts.map +1 -0
  72. package/dist/commands/preflight.js +182 -0
  73. package/dist/commands/preflight.js.map +1 -0
  74. package/dist/commands/preview.d.ts +13 -0
  75. package/dist/commands/preview.d.ts.map +1 -0
  76. package/dist/commands/preview.js +260 -0
  77. package/dist/commands/preview.js.map +1 -0
  78. package/dist/commands/run.d.ts +6 -0
  79. package/dist/commands/run.d.ts.map +1 -0
  80. package/dist/commands/run.js +96 -0
  81. package/dist/commands/run.js.map +1 -0
  82. package/dist/commands/spawn.d.ts +11 -0
  83. package/dist/commands/spawn.d.ts.map +1 -0
  84. package/dist/commands/spawn.js +916 -0
  85. package/dist/commands/spawn.js.map +1 -0
  86. package/dist/compiler.d.ts +12 -0
  87. package/dist/compiler.d.ts.map +1 -0
  88. package/dist/compiler.js +92 -0
  89. package/dist/compiler.js.map +1 -0
  90. package/dist/core/file-writer.d.ts +36 -0
  91. package/dist/core/file-writer.d.ts.map +1 -0
  92. package/dist/core/file-writer.js +268 -0
  93. package/dist/core/file-writer.js.map +1 -0
  94. package/dist/core/registry.d.ts +57 -0
  95. package/dist/core/registry.d.ts.map +1 -0
  96. package/dist/core/registry.js +222 -0
  97. package/dist/core/registry.js.map +1 -0
  98. package/dist/core/self-healing.d.ts +47 -0
  99. package/dist/core/self-healing.d.ts.map +1 -0
  100. package/dist/core/self-healing.js +250 -0
  101. package/dist/core/self-healing.js.map +1 -0
  102. package/dist/core/types.d.ts +126 -0
  103. package/dist/core/types.d.ts.map +1 -0
  104. package/dist/core/types.js +7 -0
  105. package/dist/core/types.js.map +1 -0
  106. package/dist/generators/databases/mongodb.d.ts +10 -0
  107. package/dist/generators/databases/mongodb.d.ts.map +1 -0
  108. package/dist/generators/databases/mongodb.js +83 -0
  109. package/dist/generators/databases/mongodb.js.map +1 -0
  110. package/dist/generators/databases/redis.d.ts +2 -0
  111. package/dist/generators/databases/redis.d.ts.map +1 -0
  112. package/dist/generators/databases/redis.js +140 -0
  113. package/dist/generators/databases/redis.js.map +1 -0
  114. package/dist/generators/flutter.d.ts +32 -0
  115. package/dist/generators/flutter.d.ts.map +1 -0
  116. package/dist/generators/flutter.js +628 -0
  117. package/dist/generators/flutter.js.map +1 -0
  118. package/dist/openrouter.d.ts +68 -0
  119. package/dist/openrouter.d.ts.map +1 -0
  120. package/dist/openrouter.js +241 -0
  121. package/dist/openrouter.js.map +1 -0
  122. package/dist/page-generator.d.ts +22 -0
  123. package/dist/page-generator.d.ts.map +1 -0
  124. package/dist/page-generator.js +192 -0
  125. package/dist/page-generator.js.map +1 -0
  126. package/dist/parser.d.ts +76 -0
  127. package/dist/parser.d.ts.map +1 -0
  128. package/dist/parser.js +691 -0
  129. package/dist/parser.js.map +1 -0
  130. package/dist/prompts/master-architect.d.ts +9 -0
  131. package/dist/prompts/master-architect.d.ts.map +1 -0
  132. package/dist/prompts/master-architect.js +150 -0
  133. package/dist/prompts/master-architect.js.map +1 -0
  134. package/dist/researcher.d.ts +12 -0
  135. package/dist/researcher.d.ts.map +1 -0
  136. package/dist/researcher.js +85 -0
  137. package/dist/researcher.js.map +1 -0
  138. package/dist/self-heal.d.ts +29 -0
  139. package/dist/self-heal.d.ts.map +1 -0
  140. package/dist/self-heal.js +260 -0
  141. package/dist/self-heal.js.map +1 -0
  142. package/dist/services/SupabaseDeployer.d.ts +9 -0
  143. package/dist/services/SupabaseDeployer.d.ts.map +1 -0
  144. package/dist/services/SupabaseDeployer.js +50 -0
  145. package/dist/services/SupabaseDeployer.js.map +1 -0
  146. package/dist/test-generator.d.ts +18 -0
  147. package/dist/test-generator.d.ts.map +1 -0
  148. package/dist/test-generator.js +180 -0
  149. package/dist/test-generator.js.map +1 -0
  150. package/dist/themes/index.d.ts +52 -0
  151. package/dist/themes/index.d.ts.map +1 -0
  152. package/dist/themes/index.js +273 -0
  153. package/dist/themes/index.js.map +1 -0
  154. package/dist/types.d.ts +9 -0
  155. package/dist/types.d.ts.map +1 -0
  156. package/dist/types.js +81 -0
  157. package/dist/types.js.map +1 -0
  158. package/dist/utils/constitutional-validator.d.ts +73 -0
  159. package/dist/utils/constitutional-validator.d.ts.map +1 -0
  160. package/dist/utils/constitutional-validator.js +249 -0
  161. package/dist/utils/constitutional-validator.js.map +1 -0
  162. package/library/auth-flow/app/api/auth/[...nextauth]/route.ts +31 -0
  163. package/library/auth-flow/app/api/auth/login/route.ts +90 -0
  164. package/library/auth-flow/app/api/auth/register/route.ts +91 -0
  165. package/library/auth-flow/components/auth/AuthMiddleware.tsx +139 -0
  166. package/library/auth-flow/components/auth/LoginForm.tsx +125 -0
  167. package/library/auth-flow/components/auth/RegisterForm.tsx +168 -0
  168. package/library/auth-flow/components/auth/nextauth-config.ts +99 -0
  169. package/library/auth-flow/manifest.json +29 -0
  170. package/library/auth-flow/schema.prisma +45 -0
  171. package/library/dashboard-analytics/components/dashboard/ActivityFeed.tsx +109 -0
  172. package/library/dashboard-analytics/components/dashboard/LineChart.tsx +180 -0
  173. package/library/dashboard-analytics/components/dashboard/StatsCard.tsx +47 -0
  174. package/library/dashboard-analytics/components/dashboard/SummaryGrid.tsx +39 -0
  175. package/library/dashboard-analytics/manifest.json +19 -0
  176. package/library/data-table/components/table/BulkActions.tsx +59 -0
  177. package/library/data-table/components/table/ColumnToggle.tsx +65 -0
  178. package/library/data-table/components/table/DataTable.tsx +318 -0
  179. package/library/data-table/components/table/ExportCSV.tsx +52 -0
  180. package/library/data-table/components/table/SearchFilter.tsx +48 -0
  181. package/library/data-table/manifest.json +20 -0
  182. package/library/file-upload/app/api/upload/route.ts +107 -0
  183. package/library/file-upload/components/upload/DropZone.tsx +268 -0
  184. package/library/file-upload/components/upload/FilePreview.tsx +82 -0
  185. package/library/file-upload/components/upload/UploadProgress.tsx +92 -0
  186. package/library/file-upload/components/upload/fileStorage.ts +142 -0
  187. package/library/file-upload/manifest.json +21 -0
  188. package/library/notification-system/app/api/notifications/route.ts +121 -0
  189. package/library/notification-system/components/notifications/NotificationBell.tsx +154 -0
  190. package/library/notification-system/components/notifications/NotificationProvider.tsx +161 -0
  191. package/library/notification-system/components/notifications/Toast.tsx +112 -0
  192. package/library/notification-system/manifest.json +20 -0
  193. package/package.json +66 -0
@@ -0,0 +1,628 @@
1
+ "use strict";
2
+ /**
3
+ * Helix Flutter Generator v11.0
4
+ * Generates Flutter mobile apps from natural language prompts
5
+ * Supports:
6
+ * - local (in-memory) and Supabase (cloud) database modes
7
+ * - OpenRouter AI integration with constitution-based persona extraction
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ var __importDefault = (this && this.__importDefault) || function (mod) {
43
+ return (mod && mod.__esModule) ? mod : { "default": mod };
44
+ };
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.generateFlutterApp = generateFlutterApp;
47
+ exports.regenerateFlutterDart = regenerateFlutterDart;
48
+ exports.parseFlutterPrompt = parseFlutterPrompt;
49
+ const execa = require("execa");
50
+ const fs = __importStar(require("fs-extra"));
51
+ const path = __importStar(require("path"));
52
+ const chalk_1 = __importDefault(require("chalk"));
53
+ const ora_1 = __importDefault(require("ora"));
54
+ const openrouter_1 = require("../openrouter");
55
+ /**
56
+ * Extract AI directives from a constitution file
57
+ * Looks for sections headed by "## AI DIRECTIVES" or "## AI CONSTITUTION"
58
+ */
59
+ function extractAIDirectives(constitution) {
60
+ // Look for ## AI DIRECTIVES or ## AI CONSTITUTION section
61
+ const patterns = [
62
+ /##\s*AI\s*DIRECTIVES[^\n]*\n([\s\S]*?)(?=\n##\s|\n#\s|$)/i,
63
+ /##\s*AI\s*CONSTITUTION[^\n]*\n([\s\S]*?)(?=\n##\s|\n#\s|$)/i,
64
+ /##\s*🤖\s*INSTRUCTIONS[^\n]*\n([\s\S]*?)(?=\n##\s|\n#\s|$)/i,
65
+ ];
66
+ for (const pattern of patterns) {
67
+ const match = constitution.match(pattern);
68
+ if (match && match[1]) {
69
+ return match[1].trim();
70
+ }
71
+ }
72
+ // Fallback: return default persona
73
+ return "You are a helpful strategic analyst.";
74
+ }
75
+ /**
76
+ * Generate a Flutter mobile app from a prompt
77
+ * @param prompt - Natural language description
78
+ * @param constitution - Optional context/guidelines
79
+ * @param db - Database type: 'local' or 'supabase'
80
+ * @param ai - AI provider: 'none' or 'openrouter'
81
+ */
82
+ async function generateFlutterApp(prompt, constitution, db = "local", ai = "none") {
83
+ console.log(chalk_1.default.magenta("\n📱 HELIX FLUTTER - Mobile App Generator\n"));
84
+ // Generate project name from prompt
85
+ const projectName = prompt
86
+ .toLowerCase()
87
+ .replace(/[^a-z0-9\s]/g, "")
88
+ .split(" ")
89
+ .slice(0, 3)
90
+ .join("_")
91
+ .substring(0, 30) || "helix_app";
92
+ const projectPath = path.join(process.cwd(), projectName);
93
+ // Check if directory exists
94
+ if (fs.existsSync(projectPath)) {
95
+ console.error(chalk_1.default.red(`❌ Directory "${projectName}" already exists`));
96
+ process.exit(1);
97
+ }
98
+ // Extract AI persona if OpenRouter mode is enabled
99
+ let aiPersona;
100
+ if (ai === "openrouter" && constitution) {
101
+ aiPersona = extractAIDirectives(constitution);
102
+ console.log(chalk_1.default.green("🧠 AI Persona extracted from constitution"));
103
+ }
104
+ // Phase 1: Create Flutter project
105
+ const spinner = (0, ora_1.default)("Creating Flutter project...").start();
106
+ try {
107
+ await execa("flutter", ["create", projectName, "--org", "com.helix"], {
108
+ cwd: process.cwd(),
109
+ stdio: "pipe",
110
+ });
111
+ spinner.succeed("Flutter project created");
112
+ }
113
+ catch (error) {
114
+ spinner.fail("Failed to create Flutter project");
115
+ console.error(chalk_1.default.red("Make sure Flutter is installed and in your PATH"));
116
+ process.exit(1);
117
+ }
118
+ // Phase 2: Add dependencies
119
+ const depSpinner = (0, ora_1.default)("Installing dependencies...").start();
120
+ try {
121
+ const deps = ["provider"];
122
+ // Add Supabase if cloud mode
123
+ if (db === "supabase") {
124
+ deps.push("supabase_flutter");
125
+ }
126
+ // Add AI dependencies if OpenRouter mode
127
+ if (ai === "openrouter") {
128
+ deps.push("http");
129
+ deps.push("flutter_markdown");
130
+ }
131
+ for (const dep of deps) {
132
+ await execa("flutter", ["pub", "add", dep], {
133
+ cwd: projectPath,
134
+ stdio: "pipe",
135
+ });
136
+ }
137
+ depSpinner.succeed(`Dependencies installed (${deps.join(", ")})`);
138
+ }
139
+ catch (error) {
140
+ depSpinner.fail("Failed to install dependencies");
141
+ }
142
+ // Phase 3: Generate main.dart with AI
143
+ const codeSpinner = (0, ora_1.default)("Generating Flutter code...").start();
144
+ try {
145
+ const mainDart = await generateMainDart(prompt, constitution, db, ai);
146
+ await fs.writeFile(path.join(projectPath, "lib", "main.dart"), mainDart);
147
+ codeSpinner.succeed("Flutter code generated");
148
+ }
149
+ catch (error) {
150
+ codeSpinner.fail("Failed to generate code");
151
+ console.error(error);
152
+ }
153
+ // Phase 4: Generate Supabase-specific files if cloud mode
154
+ if (db === "supabase") {
155
+ const supabaseSpinner = (0, ora_1.default)("Generating Supabase architecture...").start();
156
+ try {
157
+ // Generate supabase_service.dart
158
+ const servicesDir = path.join(projectPath, "lib", "services");
159
+ await fs.ensureDir(servicesDir);
160
+ const serviceCode = await generateSupabaseService(prompt);
161
+ await fs.writeFile(path.join(servicesDir, "supabase_service.dart"), serviceCode);
162
+ // Generate supabase_schema.sql
163
+ const schemaSQL = await generateSupabaseSchema(prompt);
164
+ await fs.writeFile(path.join(projectPath, "supabase_schema.sql"), schemaSQL);
165
+ supabaseSpinner.succeed("Supabase service & schema generated");
166
+ }
167
+ catch (error) {
168
+ supabaseSpinner.fail("Failed to generate Supabase files");
169
+ console.error(error);
170
+ }
171
+ }
172
+ // Phase 5: Generate OpenRouter AI files if AI mode
173
+ if (ai === "openrouter") {
174
+ const aiSpinner = (0, ora_1.default)("Generating AI architecture...").start();
175
+ try {
176
+ const servicesDir = path.join(projectPath, "lib", "services");
177
+ const screensDir = path.join(projectPath, "lib", "screens");
178
+ await fs.ensureDir(servicesDir);
179
+ await fs.ensureDir(screensDir);
180
+ // Generate ai_service.dart with extracted persona
181
+ const aiServiceCode = await generateAIService(aiPersona);
182
+ await fs.writeFile(path.join(servicesDir, "ai_service.dart"), aiServiceCode);
183
+ // Generate chat_screen.dart
184
+ const chatScreenCode = await generateChatScreen(prompt);
185
+ await fs.writeFile(path.join(screensDir, "chat_screen.dart"), chatScreenCode);
186
+ aiSpinner.succeed("AI service & chat screen generated");
187
+ }
188
+ catch (error) {
189
+ aiSpinner.fail("Failed to generate AI files");
190
+ console.error(error);
191
+ }
192
+ }
193
+ // Phase 6: Success message
194
+ console.log(chalk_1.default.green("\n✅ Flutter app created successfully!\n"));
195
+ console.log(chalk_1.default.cyan("Next steps:"));
196
+ console.log(chalk_1.default.white(` cd ${projectName}`));
197
+ if (db === "supabase") {
198
+ console.log(chalk_1.default.yellow("\n☁️ Supabase Setup Required:"));
199
+ console.log(chalk_1.default.white(" 1. Create a Supabase project at https://supabase.com"));
200
+ console.log(chalk_1.default.white(" 2. Run the SQL in supabase_schema.sql in the SQL Editor"));
201
+ console.log(chalk_1.default.white(" 3. Copy your URL and anon key to lib/main.dart"));
202
+ }
203
+ if (ai === "openrouter") {
204
+ console.log(chalk_1.default.green("\n🤖 OpenRouter Setup Required:"));
205
+ console.log(chalk_1.default.white(" 1. Get an API key from https://openrouter.ai"));
206
+ console.log(chalk_1.default.white(" 2. Add OPENROUTER_API_KEY to lib/services/ai_service.dart"));
207
+ console.log(chalk_1.default.white(" 3. The AI persona has been extracted from your constitution"));
208
+ }
209
+ console.log(chalk_1.default.white("\n flutter run"));
210
+ console.log("");
211
+ }
212
+ /**
213
+ * Regenerate main.dart for an EXISTING Flutter project
214
+ * Used by "helix generate blueprint.helix --target flutter"
215
+ */
216
+ async function regenerateFlutterDart(prompt, constitution, db = "local", ai = "none") {
217
+ console.log(chalk_1.default.magenta("\n📱 HELIX FLUTTER - Regenerating main.dart\n"));
218
+ // Check if we're in a Flutter project
219
+ const libPath = path.join(process.cwd(), "lib");
220
+ const pubspecPath = path.join(process.cwd(), "pubspec.yaml");
221
+ if (!fs.existsSync(pubspecPath)) {
222
+ // Not in a Flutter project - create a new one
223
+ console.log(chalk_1.default.yellow("⚠️ Not in a Flutter project. Creating new app..."));
224
+ await generateFlutterApp(prompt, constitution, db, ai);
225
+ return;
226
+ }
227
+ // Regenerate main.dart
228
+ const codeSpinner = (0, ora_1.default)("Regenerating Flutter code...").start();
229
+ try {
230
+ const mainDart = await generateMainDart(prompt, constitution, db, ai);
231
+ await fs.ensureDir(libPath);
232
+ await fs.writeFile(path.join(libPath, "main.dart"), mainDart);
233
+ codeSpinner.succeed("Flutter code regenerated");
234
+ }
235
+ catch (error) {
236
+ codeSpinner.fail("Failed to regenerate code");
237
+ console.error(error);
238
+ return;
239
+ }
240
+ console.log(chalk_1.default.green("\n✅ main.dart regenerated successfully!\n"));
241
+ console.log(chalk_1.default.cyan("Run your app:"));
242
+ console.log(chalk_1.default.white(" flutter run"));
243
+ console.log("");
244
+ }
245
+ /**
246
+ * Generate main.dart content using AI
247
+ */
248
+ async function generateMainDart(prompt, constitution, db = "local", ai = "none") {
249
+ // Build different system prompts based on database mode
250
+ const supabaseInstructions = db === "supabase" ? `
251
+ **SUPABASE CLOUD MODE (CRITICAL - MUST FOLLOW):**
252
+ You are generating a CLOUD-CONNECTED Flutter app using Supabase.
253
+
254
+ 1. **Configuration:** Add these constants at the TOP of the file (after imports):
255
+ const String SUPABASE_URL = 'YOUR_SUPABASE_URL';
256
+ const String SUPABASE_ANON_KEY = 'YOUR_SUPABASE_ANON_KEY';
257
+
258
+ 2. **Initialization:** In main(), initialize Supabase BEFORE runApp:
259
+ await Supabase.initialize(url: SUPABASE_URL, anonKey: SUPABASE_ANON_KEY);
260
+
261
+ 3. **Imports:** Include:
262
+ import 'package:supabase_flutter/supabase_flutter.dart';
263
+
264
+ 4. **Data Access:** Use SupabaseClient for ALL data operations:
265
+ - Get client: Supabase.instance.client
266
+ - Fetch: await client.from('table_name').select()
267
+ - Insert: await client.from('table_name').insert(data)
268
+ - Delete: await client.from('table_name').delete().eq('id', id)
269
+
270
+ 5. **Realtime:** Use StreamBuilder with Supabase realtime:
271
+ final stream = client.from('table_name').stream(primaryKey: ['id']);
272
+ StreamBuilder<List<Map<String, dynamic>>>(stream: stream, ...)
273
+
274
+ 6. **State Management:** The ChangeNotifier should:
275
+ - Initialize by fetching from Supabase
276
+ - Use Supabase for add/remove operations
277
+ - Subscribe to realtime changes
278
+
279
+ 7. **Table Name:** Use lowercase plural of the model (e.g., 'tasks', 'agents', 'items')
280
+
281
+ 8. **main() must be async:** void main() async { ... }
282
+ ` : "";
283
+ const openrouterInstructions = ai === "openrouter" ? `
284
+ **OPENROUTER AI INTEGRATION (CRITICAL - MUST FOLLOW):**
285
+ You are generating a Flutter app with AI chat capabilities.
286
+
287
+ 1. **Import AI Service:**
288
+ import 'services/ai_service.dart';
289
+ import 'screens/chat_screen.dart';
290
+
291
+ 2. **AI FAB:** Add a SECOND FloatingActionButton for AI Analysis:
292
+ FloatingActionButton.extended(
293
+ heroTag: 'ai_fab',
294
+ onPressed: () => Navigator.push(context, MaterialPageRoute(builder: (_) => ChatScreen(dataContext: _serializeData()))),
295
+ icon: Icon(Icons.psychology),
296
+ label: Text('AI Analyst'),
297
+ backgroundColor: Color(0xFF7F00FF),
298
+ )
299
+
300
+ 3. **Data Serialization:** Create a method that serializes current app data:
301
+ String _serializeData() {
302
+ // Convert current state to JSON string for AI context
303
+ return jsonEncode(items.map((i) => i.toJson()).toList());
304
+ }
305
+
306
+ 4. **FloatingActionButton Layout:** Use a Column or Stack with two FABs:
307
+ - Primary FAB: Add item (bottom right)
308
+ - AI FAB: Open AI chat (above primary, with heroTag)
309
+
310
+ 5. **Import json:** import 'dart:convert';
311
+ ` : "";
312
+ const systemPrompt = `You are a Senior Flutter Architect specializing in mobile app development.
313
+
314
+ TASK: Generate a COMPLETE, WORKING Flutter application in a SINGLE main.dart file.
315
+
316
+ STRICT REQUIREMENTS:
317
+ 1. OUTPUT: Generate ONLY the Dart code for lib/main.dart. No explanations, no markdown.
318
+ 2. TECH STACK:
319
+ - Use MaterialApp with useMaterial3: true
320
+ - Use Provider for state management (already imported)
321
+ - Use ChangeNotifier pattern
322
+ 3. THEME: Enforce 'Deep Void' Dark Mode:
323
+ - scaffoldBackgroundColor: Color(0xFF0a0a12)
324
+ - primaryColor: Color(0xFFFFD700) (gold accent)
325
+ - Card backgrounds: Color(0xFF1a1a2e)
326
+ - Text: Colors.white and Colors.white70
327
+ 4. ARCHITECTURE:
328
+ - Create a Data Model class for the main entity (with toJson method)
329
+ - Create a ChangeNotifier class for state management
330
+ - Wrap app in ChangeNotifierProvider
331
+ - Create a Scaffold with AppBar
332
+ - Add a FloatingActionButton that opens showModalBottomSheet for adding items
333
+ - Use ListView.builder with Card widgets for the list
334
+ - Each Card should have an onLongPress to delete
335
+ 5. IMPORTS: Include all necessary imports at the top:
336
+ import 'package:flutter/material.dart';
337
+ import 'package:provider/provider.dart';
338
+ ${supabaseInstructions}${openrouterInstructions}
339
+
340
+ **STRICT DART TYPING RULES (CRITICAL - MUST FOLLOW):**
341
+ 1. Text Widgets: You CANNOT pass a non-String variable directly to a Text widget.
342
+ - WRONG: Text(agent.rank)
343
+ - RIGHT: Text(agent.rank.toString())
344
+ - RIGHT: Text('\${agent.rank}')
345
+ 2. String Interpolation: Always use interpolation for mixed content.
346
+ - RIGHT: Text('Value: \${asset.value}')
347
+ - RIGHT: Text('Count: \${items.length}')
348
+ 3. Form Fields: When setting initialValue for TextFormField with numeric field, use .toString().
349
+ - RIGHT: initialValue: item.count.toString()
350
+ 4. NEVER assign an int, double, or num to a String variable without .toString().
351
+ 5. ALL model properties displayed in Text widgets MUST use .toString() or string interpolation.
352
+
353
+ ${constitution ? `CONSTITUTION/CONTEXT:\n${constitution}\n` : ""}
354
+
355
+ Generate a production-ready Flutter app based on the user's description. Make it visually polished with proper spacing, icons, and animations.`;
356
+ const dbHint = db === "supabase"
357
+ ? "\n\nIMPORTANT: This app uses SUPABASE for cloud database. Data must persist to Supabase, not local state. Use StreamBuilder for realtime updates."
358
+ : "";
359
+ const aiHint = ai === "openrouter"
360
+ ? "\n\nIMPORTANT: This app has AI integration. Add an 'AI Analyst' FAB that opens a ChatScreen. Include data serialization for context injection."
361
+ : "";
362
+ const userPrompt = `Create a Flutter mobile app for: "${prompt}"${dbHint}${aiHint}
363
+
364
+ Generate the complete main.dart file with:
365
+ - A data model class (with toJson method for serialization)
366
+ - A ChangeNotifier state class with add/remove methods${db === "supabase" ? " (using Supabase client)" : ""}
367
+ - A main widget with the Deep Void dark theme
368
+ - ${db === "supabase" ? "StreamBuilder listening to Supabase realtime" : "ListView with Cards showing the data"}
369
+ - FloatingActionButton to add new items via bottom sheet
370
+ ${ai === "openrouter" ? "- SECOND FloatingActionButton for 'AI Analyst' that navigates to ChatScreen" : ""}
371
+ - Form with TextFields for each property
372
+ - Delete on long press
373
+
374
+ Output ONLY the Dart code, no markdown or explanations.`;
375
+ const response = await (0, openrouter_1.createCompletion)(systemPrompt, userPrompt, {
376
+ model: openrouter_1.DEFAULT_MODEL,
377
+ maxTokens: 4096,
378
+ });
379
+ // Clean up the response - remove markdown if present
380
+ let code = response.trim();
381
+ if (code.startsWith("```dart")) {
382
+ code = code.slice(7);
383
+ }
384
+ else if (code.startsWith("```")) {
385
+ code = code.slice(3);
386
+ }
387
+ if (code.endsWith("```")) {
388
+ code = code.slice(0, -3);
389
+ }
390
+ return code.trim();
391
+ }
392
+ /**
393
+ * Generate Supabase service layer
394
+ */
395
+ async function generateSupabaseService(prompt) {
396
+ const systemPrompt = `You are a Senior Flutter Architect generating a Supabase service layer.
397
+
398
+ TASK: Generate a SupabaseService class in Dart.
399
+
400
+ REQUIREMENTS:
401
+ 1. OUTPUT: Generate ONLY the Dart code. No explanations, no markdown.
402
+ 2. IMPORTS:
403
+ import 'package:supabase_flutter/supabase_flutter.dart';
404
+ 3. CLASS STRUCTURE:
405
+ - Class name: SupabaseService
406
+ - Get client via: Supabase.instance.client
407
+ - Methods:
408
+ * getAll() - Fetch all records with .select()
409
+ * insert(Map<String, dynamic> data) - Insert new record
410
+ * delete(String id) - Delete by id
411
+ * subscribe() - Return realtime stream
412
+ 4. TABLE: Use lowercase plural based on the data model (guess from prompt)
413
+ 5. ERROR HANDLING: Include try-catch blocks
414
+
415
+ Generate clean, well-documented Dart code.`;
416
+ const response = await (0, openrouter_1.createCompletion)(systemPrompt, `Generate a Supabase service for: "${prompt}"`, {
417
+ model: openrouter_1.DEFAULT_MODEL,
418
+ maxTokens: 2048,
419
+ });
420
+ let code = response.trim();
421
+ if (code.startsWith("```dart")) {
422
+ code = code.slice(7);
423
+ }
424
+ else if (code.startsWith("```")) {
425
+ code = code.slice(3);
426
+ }
427
+ if (code.endsWith("```")) {
428
+ code = code.slice(0, -3);
429
+ }
430
+ return code.trim();
431
+ }
432
+ /**
433
+ * Generate Supabase PostgreSQL schema
434
+ */
435
+ async function generateSupabaseSchema(prompt) {
436
+ const systemPrompt = `You are a Senior Database Architect generating PostgreSQL schema for Supabase.
437
+
438
+ TASK: Generate a complete SQL schema file for Supabase.
439
+
440
+ REQUIREMENTS:
441
+ 1. OUTPUT: Generate ONLY valid PostgreSQL SQL. No explanations, no markdown.
442
+ 2. STRUCTURE:
443
+ - CREATE TABLE statement with appropriate columns
444
+ - Include: id (uuid, primary key, default gen_random_uuid())
445
+ - Include: created_at (timestamptz, default now())
446
+ - Include: updated_at (timestamptz, default now())
447
+ - Add relevant columns based on the app description
448
+ 3. ROW LEVEL SECURITY (CRITICAL):
449
+ - ALTER TABLE ... ENABLE ROW LEVEL SECURITY;
450
+ - Create policies for SELECT, INSERT, UPDATE, DELETE
451
+ - Use permissive policies allowing authenticated AND anon access (for demo)
452
+ Example:
453
+ CREATE POLICY "Allow public read" ON table_name FOR SELECT USING (true);
454
+ CREATE POLICY "Allow public insert" ON table_name FOR INSERT WITH CHECK (true);
455
+ CREATE POLICY "Allow public delete" ON table_name FOR DELETE USING (true);
456
+ 4. REALTIME:
457
+ - Add comment about enabling realtime in dashboard
458
+ 5. TABLE NAME: Use lowercase plural (e.g., tasks, agents, items)
459
+ 6. COLUMN TYPES: Use appropriate PostgreSQL types (text, integer, boolean, timestamptz, etc.)
460
+
461
+ Generate a production-ready PostgreSQL schema.`;
462
+ const response = await (0, openrouter_1.createCompletion)(systemPrompt, `Generate a Supabase PostgreSQL schema for: "${prompt}"`, {
463
+ model: openrouter_1.DEFAULT_MODEL,
464
+ maxTokens: 2048,
465
+ });
466
+ let code = response.trim();
467
+ if (code.startsWith("```sql")) {
468
+ code = code.slice(6);
469
+ }
470
+ else if (code.startsWith("```")) {
471
+ code = code.slice(3);
472
+ }
473
+ if (code.endsWith("```")) {
474
+ code = code.slice(0, -3);
475
+ }
476
+ // Add header comment
477
+ const header = `-- Helix Generated Supabase Schema
478
+ -- Generated for: ${prompt}
479
+ --
480
+ -- INSTRUCTIONS:
481
+ -- 1. Go to your Supabase project dashboard
482
+ -- 2. Navigate to SQL Editor
483
+ -- 3. Paste this entire file and run it
484
+ -- 4. Enable Realtime for the table in Table Editor > Realtime
485
+ --
486
+ -- ============================================================================
487
+
488
+ `;
489
+ return header + code.trim();
490
+ }
491
+ /**
492
+ * Generate OpenRouter AI service with persona injection
493
+ */
494
+ async function generateAIService(persona) {
495
+ const defaultPersona = "You are a helpful strategic analyst.";
496
+ const finalPersona = persona || defaultPersona;
497
+ // Escape the persona for Dart string
498
+ const escapedPersona = finalPersona
499
+ .replace(/\\/g, "\\\\")
500
+ .replace(/'/g, "\\'")
501
+ .replace(/\n/g, "\\n")
502
+ .replace(/\r/g, "");
503
+ const systemPrompt = `You are a Senior Flutter Architect generating an OpenRouter AI service.
504
+
505
+ TASK: Generate an OpenRouterService class in Dart for AI chat functionality.
506
+
507
+ REQUIREMENTS:
508
+ 1. OUTPUT: Generate ONLY the Dart code. No explanations, no markdown.
509
+ 2. IMPORTS:
510
+ import 'dart:convert';
511
+ import 'package:http/http.dart' as http;
512
+ 3. CONFIGURATION:
513
+ - const String OPENROUTER_API_KEY = 'YOUR_OPENROUTER_API_KEY';
514
+ - const String _endpoint = 'https://openrouter.ai/api/v1/chat/completions';
515
+ - const String _model = 'meta-llama/llama-3-8b-instruct:free';
516
+ 4. SYSTEM PERSONA (CRITICAL - HARD-CODE THIS EXACT TEXT):
517
+ const String _systemPersona = '''${escapedPersona}''';
518
+ 5. CLASS STRUCTURE:
519
+ - Class name: OpenRouterService
520
+ - Singleton pattern with static instance
521
+ - Method: Future<String> sendMessage(String userMessage, String dataContext)
522
+ * Creates messages array with:
523
+ - system message: _systemPersona + "\\n\\nCurrent Data Context: " + dataContext
524
+ - user message
525
+ * Makes POST request to _endpoint
526
+ * Parses response and returns assistant content
527
+ 6. ERROR HANDLING: Return error message on failure, don't throw
528
+ 7. HEADERS:
529
+ - 'Authorization': 'Bearer \$OPENROUTER_API_KEY'
530
+ - 'Content-Type': 'application/json'
531
+ - 'HTTP-Referer': 'https://helix-app.dev'
532
+ - 'X-Title': 'Helix AI'
533
+
534
+ Generate clean, well-documented Dart code.`;
535
+ const response = await (0, openrouter_1.createCompletion)(systemPrompt, `Generate an OpenRouter AI service with the embedded system persona.`, {
536
+ model: openrouter_1.DEFAULT_MODEL,
537
+ maxTokens: 2048,
538
+ });
539
+ let code = response.trim();
540
+ if (code.startsWith("```dart")) {
541
+ code = code.slice(7);
542
+ }
543
+ else if (code.startsWith("```")) {
544
+ code = code.slice(3);
545
+ }
546
+ if (code.endsWith("```")) {
547
+ code = code.slice(0, -3);
548
+ }
549
+ return code.trim();
550
+ }
551
+ /**
552
+ * Generate AI Chat Screen
553
+ */
554
+ async function generateChatScreen(prompt) {
555
+ const systemPrompt = `You are a Senior Flutter Architect generating an AI chat screen.
556
+
557
+ TASK: Generate a ChatScreen widget in Dart for AI conversation.
558
+
559
+ REQUIREMENTS:
560
+ 1. OUTPUT: Generate ONLY the Dart code. No explanations, no markdown.
561
+ 2. IMPORTS:
562
+ import 'package:flutter/material.dart';
563
+ import 'package:flutter_markdown/flutter_markdown.dart';
564
+ import '../services/ai_service.dart';
565
+ 3. WIDGET: ChatScreen (StatefulWidget)
566
+ - Constructor accepts: String dataContext (for app data context injection)
567
+ - State holds: List<Map<String, String>> messages, TextEditingController, bool isLoading
568
+ 4. THEME: Deep Void Dark Mode:
569
+ - Scaffold background: Color(0xFF0a0a12)
570
+ - User messages: Color(0xFF1a1a2e) with gold border
571
+ - AI messages: Color(0xFF0f0f1a) with purple accent
572
+ 5. UI STRUCTURE:
573
+ - AppBar with title "4See AI Analyst" and back button
574
+ - ListView.builder for messages
575
+ - Each message shows role (You/AI) and content (use MarkdownBody for AI)
576
+ - Bottom input area with TextField and send button
577
+ - Loading indicator when waiting for response
578
+ 6. SEND LOGIC:
579
+ - Add user message to list
580
+ - Call OpenRouterService.instance.sendMessage(userMessage, dataContext)
581
+ - Add AI response to list
582
+ 7. STYLING:
583
+ - Rounded message bubbles with proper padding
584
+ - Gold accent for user, purple for AI
585
+ - Smooth scroll to bottom on new message
586
+
587
+ Generate clean, visually polished Dart code.`;
588
+ const response = await (0, openrouter_1.createCompletion)(systemPrompt, `Generate an AI chat screen for an app about: "${prompt}"`, {
589
+ model: openrouter_1.DEFAULT_MODEL,
590
+ maxTokens: 2048,
591
+ });
592
+ let code = response.trim();
593
+ if (code.startsWith("```dart")) {
594
+ code = code.slice(7);
595
+ }
596
+ else if (code.startsWith("```")) {
597
+ code = code.slice(3);
598
+ }
599
+ if (code.endsWith("```")) {
600
+ code = code.slice(0, -3);
601
+ }
602
+ return code.trim();
603
+ }
604
+ /**
605
+ * Parse the prompt to extract data model structure
606
+ */
607
+ function parseFlutterPrompt(prompt) {
608
+ // Simple extraction - AI will handle the actual interpretation
609
+ const strands = [];
610
+ // Look for common patterns like "with X, Y, and Z fields"
611
+ const match = prompt.match(/with\s+(.+?)(?:\.|$)/i);
612
+ if (match) {
613
+ const fieldsStr = match[1];
614
+ const fields = fieldsStr.split(/,\s*|\s+and\s+/i).map(f => ({
615
+ name: f.trim().replace(/\s+/g, "_"),
616
+ type: "String"
617
+ }));
618
+ // Extract main entity name
619
+ const entityMatch = prompt.match(/(?:a|an)\s+(\w+)/i);
620
+ const entityName = entityMatch ? entityMatch[1] : "Item";
621
+ strands.push({
622
+ name: entityName.charAt(0).toUpperCase() + entityName.slice(1),
623
+ fields
624
+ });
625
+ }
626
+ return strands;
627
+ }
628
+ //# sourceMappingURL=flutter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flutter.js","sourceRoot":"","sources":["../../src/generators/flutter.ts"],"names":[],"mappings":"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"}