helix-lang 12.0.0 → 13.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 (69) hide show
  1. package/dist/bin/helix.js +81 -3
  2. package/dist/bin/helix.js.map +1 -1
  3. package/dist/commands/collaborate/client.d.ts +31 -0
  4. package/dist/commands/collaborate/client.d.ts.map +1 -0
  5. package/dist/commands/collaborate/client.js +212 -0
  6. package/dist/commands/collaborate/client.js.map +1 -0
  7. package/dist/commands/collaborate/server.d.ts +4 -2
  8. package/dist/commands/collaborate/server.d.ts.map +1 -1
  9. package/dist/commands/collaborate/server.js +23 -5
  10. package/dist/commands/collaborate/server.js.map +1 -1
  11. package/dist/commands/init.d.ts +13 -0
  12. package/dist/commands/init.d.ts.map +1 -0
  13. package/dist/commands/init.js +121 -0
  14. package/dist/commands/init.js.map +1 -0
  15. package/dist/commands/web.d.ts +6 -0
  16. package/dist/commands/web.d.ts.map +1 -0
  17. package/dist/commands/web.js +322 -0
  18. package/dist/commands/web.js.map +1 -0
  19. package/dist/core/registry.d.ts +5 -1
  20. package/dist/core/registry.d.ts.map +1 -1
  21. package/dist/core/registry.js +25 -8
  22. package/dist/core/registry.js.map +1 -1
  23. package/library/calendar-view/components/calendar/CalendarDay.tsx +45 -0
  24. package/library/calendar-view/components/calendar/CalendarView.tsx +80 -0
  25. package/library/calendar-view/manifest.json +11 -0
  26. package/library/chat-interface/app/api/chat/route.ts +19 -0
  27. package/library/chat-interface/components/chat/ChatWindow.tsx +81 -0
  28. package/library/chat-interface/components/chat/MessageBubble.tsx +31 -0
  29. package/library/chat-interface/components/chat/TypingIndicator.tsx +15 -0
  30. package/library/chat-interface/manifest.json +13 -0
  31. package/library/form-wizard/components/wizard/FormWizard.tsx +70 -0
  32. package/library/form-wizard/components/wizard/WizardProgress.tsx +36 -0
  33. package/library/form-wizard/components/wizard/WizardStep.tsx +9 -0
  34. package/library/form-wizard/manifest.json +12 -0
  35. package/library/image-gallery/components/gallery/ImageGallery.tsx +50 -0
  36. package/library/image-gallery/components/gallery/Lightbox.tsx +55 -0
  37. package/library/image-gallery/manifest.json +11 -0
  38. package/library/kanban-board/components/kanban/KanbanBoard.tsx +65 -0
  39. package/library/kanban-board/components/kanban/KanbanCard.tsx +50 -0
  40. package/library/kanban-board/components/kanban/KanbanColumn.tsx +43 -0
  41. package/library/kanban-board/manifest.json +12 -0
  42. package/library/pricing-table/components/pricing/PricingCard.tsx +73 -0
  43. package/library/pricing-table/components/pricing/PricingTable.tsx +51 -0
  44. package/library/pricing-table/manifest.json +11 -0
  45. package/library/rich-text-editor/components/editor/EditorToolbar.tsx +55 -0
  46. package/library/rich-text-editor/components/editor/RichTextEditor.tsx +55 -0
  47. package/library/rich-text-editor/manifest.json +11 -0
  48. package/library/search-command/components/search/CommandPalette.tsx +118 -0
  49. package/library/search-command/components/search/useCommandPalette.ts +20 -0
  50. package/library/search-command/manifest.json +11 -0
  51. package/library/settings-panel/components/settings/SettingsPanel.tsx +48 -0
  52. package/library/settings-panel/components/settings/SettingsSection.tsx +17 -0
  53. package/library/settings-panel/components/settings/ToggleSetting.tsx +35 -0
  54. package/library/settings-panel/manifest.json +12 -0
  55. package/library/stats-cards/components/stats/Sparkline.tsx +28 -0
  56. package/library/stats-cards/components/stats/StatCard.tsx +52 -0
  57. package/library/stats-cards/components/stats/StatsGrid.tsx +17 -0
  58. package/library/stats-cards/manifest.json +12 -0
  59. package/package.json +2 -1
  60. package/templates/blog/blueprint.helix +50 -0
  61. package/templates/blog/config.json +8 -0
  62. package/templates/dashboard/blueprint.helix +56 -0
  63. package/templates/dashboard/config.json +8 -0
  64. package/templates/ecommerce/blueprint.helix +69 -0
  65. package/templates/ecommerce/config.json +8 -0
  66. package/templates/saas/blueprint.helix +73 -0
  67. package/templates/saas/config.json +8 -0
  68. package/templates/todo/blueprint.helix +24 -0
  69. package/templates/todo/config.json +8 -0
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/commands/collaborate/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/commands/collaborate/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Helix Command: init
3
+ * Initialize a new project from a template blueprint
4
+ */
5
+ /**
6
+ * List all available templates
7
+ */
8
+ export declare function listTemplates(): Promise<void>;
9
+ /**
10
+ * Initialize a project from a template
11
+ */
12
+ export declare function initFromTemplate(templateName: string, projectName?: string): Promise<void>;
13
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBnD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsChG"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /**
3
+ * Helix Command: init
4
+ * Initialize a new project from a template blueprint
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.listTemplates = listTemplates;
44
+ exports.initFromTemplate = initFromTemplate;
45
+ const chalk_1 = __importDefault(require("chalk"));
46
+ const fs = __importStar(require("fs-extra"));
47
+ const path = __importStar(require("path"));
48
+ const TEMPLATES_DIR = path.resolve(__dirname, '..', '..', 'templates');
49
+ /**
50
+ * List all available templates
51
+ */
52
+ async function listTemplates() {
53
+ const templates = await loadTemplates();
54
+ if (templates.length === 0) {
55
+ console.log(chalk_1.default.yellow('No templates found.'));
56
+ return;
57
+ }
58
+ console.log(chalk_1.default.cyan('\n📋 Available Templates\n'));
59
+ for (const t of templates) {
60
+ console.log(chalk_1.default.white(` ${chalk_1.default.bold(t.name.padEnd(14))} ${t.title}`));
61
+ console.log(chalk_1.default.gray(`${''.padEnd(16)}${t.description}`));
62
+ console.log(chalk_1.default.gray(`${''.padEnd(16)}Theme: ${t.theme} | DB: ${t.db} | Tags: ${t.tags.join(', ')}`));
63
+ console.log('');
64
+ }
65
+ console.log(chalk_1.default.gray(` Usage: helix init <template> [project-name]\n`));
66
+ }
67
+ /**
68
+ * Initialize a project from a template
69
+ */
70
+ async function initFromTemplate(templateName, projectName) {
71
+ const templates = await loadTemplates();
72
+ const template = templates.find(t => t.name === templateName.toLowerCase());
73
+ if (!template) {
74
+ console.error(chalk_1.default.red(`❌ Template "${templateName}" not found.`));
75
+ console.log(chalk_1.default.gray('Available templates:'));
76
+ for (const t of templates) {
77
+ console.log(chalk_1.default.gray(` • ${t.name} — ${t.title}`));
78
+ }
79
+ process.exit(1);
80
+ }
81
+ const name = projectName || `${template.name}-app`;
82
+ const templateDir = path.join(TEMPLATES_DIR, template.name);
83
+ const blueprintPath = path.join(templateDir, 'blueprint.helix');
84
+ if (!fs.existsSync(blueprintPath)) {
85
+ console.error(chalk_1.default.red(`❌ Template blueprint not found: ${blueprintPath}`));
86
+ process.exit(1);
87
+ }
88
+ const blueprint = await fs.readFile(blueprintPath, 'utf-8');
89
+ console.log(chalk_1.default.cyan(`\n🧬 Initializing from template: ${chalk_1.default.bold(template.title)}\n`));
90
+ console.log(chalk_1.default.gray(` Theme: ${template.theme}`));
91
+ console.log(chalk_1.default.gray(` Database: ${template.db}`));
92
+ console.log(chalk_1.default.gray(` Project: ${name}\n`));
93
+ // Import spawnApp and run with the blueprint as the prompt
94
+ const { spawnApp } = await Promise.resolve().then(() => __importStar(require('./spawn.js')));
95
+ await spawnApp(`${template.title}: ${template.description}`, {
96
+ theme: template.theme,
97
+ db: template.db,
98
+ });
99
+ }
100
+ async function loadTemplates() {
101
+ if (!fs.existsSync(TEMPLATES_DIR))
102
+ return [];
103
+ const dirs = await fs.readdir(TEMPLATES_DIR, { withFileTypes: true });
104
+ const templates = [];
105
+ for (const dir of dirs) {
106
+ if (!dir.isDirectory())
107
+ continue;
108
+ const configPath = path.join(TEMPLATES_DIR, dir.name, 'config.json');
109
+ if (!fs.existsSync(configPath))
110
+ continue;
111
+ try {
112
+ const config = await fs.readJSON(configPath);
113
+ templates.push(config);
114
+ }
115
+ catch {
116
+ // Skip malformed configs
117
+ }
118
+ }
119
+ return templates.sort((a, b) => a.name.localeCompare(b.name));
120
+ }
121
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Helix Command: web
3
+ * Browser-based dashboard for managing Helix projects
4
+ */
5
+ export declare function startWebDashboard(port?: number): Promise<void>;
6
+ //# sourceMappingURL=web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC1E"}
@@ -0,0 +1,322 @@
1
+ "use strict";
2
+ /**
3
+ * Helix Command: web
4
+ * Browser-based dashboard for managing Helix projects
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.startWebDashboard = startWebDashboard;
44
+ const chalk_1 = __importDefault(require("chalk"));
45
+ const http = __importStar(require("http"));
46
+ const fs = __importStar(require("fs-extra"));
47
+ const path = __importStar(require("path"));
48
+ const HELIX_ROOT = path.resolve(__dirname, '..', '..');
49
+ const BUILDS_DIR = path.join(HELIX_ROOT, 'builds');
50
+ const TEMPLATES_DIR = path.join(HELIX_ROOT, 'templates');
51
+ async function startWebDashboard(port = 4000) {
52
+ const server = http.createServer(async (req, res) => {
53
+ const url = new URL(req.url || '/', `http://localhost:${port}`);
54
+ // CORS for local dev
55
+ res.setHeader('Access-Control-Allow-Origin', '*');
56
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS');
57
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
58
+ if (req.method === 'OPTIONS') {
59
+ res.writeHead(200);
60
+ res.end();
61
+ return;
62
+ }
63
+ try {
64
+ // API Routes
65
+ if (url.pathname === '/api/projects') {
66
+ return await handleProjects(req, res);
67
+ }
68
+ if (url.pathname.startsWith('/api/project/')) {
69
+ return await handleProjectDetail(req, res, url.pathname.split('/').pop());
70
+ }
71
+ if (url.pathname === '/api/templates') {
72
+ return await handleTemplates(res);
73
+ }
74
+ if (url.pathname === '/api/models') {
75
+ return await handleModels(res);
76
+ }
77
+ if (url.pathname === '/api/status') {
78
+ return json(res, { status: 'ok', version: '12.1.0', builds: BUILDS_DIR });
79
+ }
80
+ // Serve dashboard UI
81
+ return serveDashboard(res);
82
+ }
83
+ catch (err) {
84
+ json(res, { error: err.message }, 500);
85
+ }
86
+ });
87
+ server.listen(port, () => {
88
+ console.log(chalk_1.default.cyan(`\n🌐 Helix Dashboard running at ${chalk_1.default.bold(`http://localhost:${port}`)}\n`));
89
+ console.log(chalk_1.default.gray(' Press Ctrl+C to stop\n'));
90
+ });
91
+ }
92
+ // ── API Handlers ─────────────────────────────────────────────────────
93
+ async function handleProjects(_req, res) {
94
+ if (!fs.existsSync(BUILDS_DIR)) {
95
+ return json(res, { projects: [] });
96
+ }
97
+ const dirs = await fs.readdir(BUILDS_DIR, { withFileTypes: true });
98
+ const projects = [];
99
+ for (const dir of dirs) {
100
+ if (!dir.isDirectory())
101
+ continue;
102
+ const projectPath = path.join(BUILDS_DIR, dir.name);
103
+ const configPath = path.join(projectPath, 'helix.config.json');
104
+ let config = {};
105
+ if (fs.existsSync(configPath)) {
106
+ try {
107
+ config = await fs.readJSON(configPath);
108
+ }
109
+ catch { }
110
+ }
111
+ const stat = await fs.stat(projectPath);
112
+ const hasBlueprint = fs.existsSync(path.join(projectPath, 'blueprint.helix'));
113
+ const hasPrisma = fs.existsSync(path.join(projectPath, 'prisma', 'schema.prisma'));
114
+ projects.push({
115
+ name: dir.name,
116
+ path: projectPath,
117
+ prompt: config.prompt || '',
118
+ generatedAt: config.generatedAt || stat.birthtime.toISOString(),
119
+ hasBlueprint,
120
+ hasPrisma,
121
+ });
122
+ }
123
+ json(res, { projects: projects.sort((a, b) => b.generatedAt.localeCompare(a.generatedAt)) });
124
+ }
125
+ async function handleProjectDetail(_req, res, name) {
126
+ const projectPath = path.join(BUILDS_DIR, name);
127
+ if (!fs.existsSync(projectPath)) {
128
+ return json(res, { error: 'Project not found' }, 404);
129
+ }
130
+ let config = {};
131
+ const configPath = path.join(projectPath, 'helix.config.json');
132
+ if (fs.existsSync(configPath)) {
133
+ try {
134
+ config = await fs.readJSON(configPath);
135
+ }
136
+ catch { }
137
+ }
138
+ let blueprint = '';
139
+ const bpPath = path.join(projectPath, 'blueprint.helix');
140
+ if (fs.existsSync(bpPath)) {
141
+ blueprint = await fs.readFile(bpPath, 'utf-8');
142
+ }
143
+ let prismaSchema = '';
144
+ const prismaPath = path.join(projectPath, 'prisma', 'schema.prisma');
145
+ if (fs.existsSync(prismaPath)) {
146
+ prismaSchema = await fs.readFile(prismaPath, 'utf-8');
147
+ }
148
+ json(res, { name, path: projectPath, config, blueprint, prismaSchema });
149
+ }
150
+ async function handleTemplates(res) {
151
+ if (!fs.existsSync(TEMPLATES_DIR)) {
152
+ return json(res, { templates: [] });
153
+ }
154
+ const dirs = await fs.readdir(TEMPLATES_DIR, { withFileTypes: true });
155
+ const templates = [];
156
+ for (const dir of dirs) {
157
+ if (!dir.isDirectory())
158
+ continue;
159
+ const configPath = path.join(TEMPLATES_DIR, dir.name, 'config.json');
160
+ if (!fs.existsSync(configPath))
161
+ continue;
162
+ try {
163
+ templates.push(await fs.readJSON(configPath));
164
+ }
165
+ catch { }
166
+ }
167
+ json(res, { templates });
168
+ }
169
+ async function handleModels(res) {
170
+ const models = [
171
+ { id: 'deepseek/deepseek-chat-v3-0324', name: 'DeepSeek V3', type: 'primary' },
172
+ { id: 'meta-llama/llama-3.3-70b-instruct', name: 'Llama 3.3 70B', type: 'fallback' },
173
+ { id: 'qwen/qwen3-235b-a22b', name: 'Qwen 235B', type: 'research' },
174
+ ];
175
+ // Check Ollama
176
+ try {
177
+ const response = await fetch('http://localhost:11434/api/tags', { signal: AbortSignal.timeout(2000) });
178
+ if (response.ok) {
179
+ const data = await response.json();
180
+ if (data.models) {
181
+ for (const m of data.models) {
182
+ models.push({ id: `ollama/${m.name}`, name: m.name, type: 'local' });
183
+ }
184
+ }
185
+ }
186
+ }
187
+ catch { }
188
+ json(res, { models });
189
+ }
190
+ // ── Dashboard UI ─────────────────────────────────────────────────────
191
+ function serveDashboard(res) {
192
+ res.writeHead(200, { 'Content-Type': 'text/html' });
193
+ res.end(DASHBOARD_HTML);
194
+ }
195
+ function json(res, data, status = 200) {
196
+ res.writeHead(status, { 'Content-Type': 'application/json' });
197
+ res.end(JSON.stringify(data));
198
+ }
199
+ const DASHBOARD_HTML = `<!DOCTYPE html>
200
+ <html lang="en">
201
+ <head>
202
+ <meta charset="UTF-8">
203
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
204
+ <title>Helix Dashboard</title>
205
+ <style>
206
+ * { margin: 0; padding: 0; box-sizing: border-box; }
207
+ body { font-family: system-ui, -apple-system, sans-serif; background: linear-gradient(135deg, #0f0f1a, #1a0a2e, #0d1117); color: #e2e8f0; min-height: 100vh; }
208
+ .container { max-width: 1200px; margin: 0 auto; padding: 2rem; }
209
+ header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem; padding-bottom: 1rem; border-bottom: 1px solid rgba(255,255,255,0.1); }
210
+ header h1 { font-size: 1.5rem; color: #fff; }
211
+ header h1 span { color: #6366f1; }
212
+ .badge { background: rgba(99,102,241,0.2); color: #a5b4fc; padding: 0.25rem 0.75rem; border-radius: 1rem; font-size: 0.75rem; }
213
+ .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); gap: 1.5rem; }
214
+ .card { background: rgba(255,255,255,0.05); backdrop-filter: blur(10px); border: 1px solid rgba(255,255,255,0.1); border-radius: 0.75rem; padding: 1.5rem; transition: border-color 0.2s; cursor: pointer; }
215
+ .card:hover { border-color: rgba(99,102,241,0.4); }
216
+ .card h3 { font-size: 1.1rem; color: #fff; margin-bottom: 0.5rem; }
217
+ .card p { color: #94a3b8; font-size: 0.875rem; line-height: 1.5; }
218
+ .card .meta { display: flex; gap: 0.75rem; margin-top: 0.75rem; font-size: 0.75rem; color: #64748b; }
219
+ .card .meta span { display: flex; align-items: center; gap: 0.25rem; }
220
+ .tabs { display: flex; gap: 0.5rem; margin-bottom: 1.5rem; }
221
+ .tab { padding: 0.5rem 1rem; border-radius: 0.5rem; border: 1px solid rgba(255,255,255,0.1); background: transparent; color: #94a3b8; cursor: pointer; font-size: 0.875rem; }
222
+ .tab.active { background: rgba(99,102,241,0.2); color: #a5b4fc; border-color: rgba(99,102,241,0.3); }
223
+ .empty { text-align: center; padding: 4rem; color: #64748b; }
224
+ .empty h2 { font-size: 1.25rem; color: #94a3b8; margin-bottom: 0.5rem; }
225
+ .detail { background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.1); border-radius: 0.75rem; padding: 1.5rem; margin-top: 1.5rem; }
226
+ .detail h2 { color: #fff; margin-bottom: 1rem; }
227
+ pre { background: rgba(0,0,0,0.3); padding: 1rem; border-radius: 0.5rem; overflow-x: auto; font-size: 0.8rem; line-height: 1.6; color: #a5b4fc; }
228
+ .back { color: #6366f1; cursor: pointer; font-size: 0.875rem; margin-bottom: 1rem; display: inline-block; }
229
+ .back:hover { text-decoration: underline; }
230
+ .status { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 0.5rem; }
231
+ .status.green { background: #10b981; }
232
+ .status.blue { background: #6366f1; }
233
+ </style>
234
+ </head>
235
+ <body>
236
+ <div class="container">
237
+ <header>
238
+ <h1><span>Helix</span> Dashboard</h1>
239
+ <span class="badge">v12.1.0</span>
240
+ </header>
241
+ <div class="tabs">
242
+ <button class="tab active" onclick="showTab('projects')">Projects</button>
243
+ <button class="tab" onclick="showTab('templates')">Templates</button>
244
+ <button class="tab" onclick="showTab('models')">AI Models</button>
245
+ </div>
246
+ <div id="content">Loading...</div>
247
+ </div>
248
+ <script>
249
+ let currentTab = 'projects';
250
+ let projectDetail = null;
251
+
252
+ async function api(path) {
253
+ const res = await fetch('/api/' + path);
254
+ return res.json();
255
+ }
256
+
257
+ function showTab(tab) {
258
+ currentTab = tab;
259
+ projectDetail = null;
260
+ document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
261
+ document.querySelector('.tab:nth-child(' + ({projects:1,templates:2,models:3}[tab]) + ')').classList.add('active');
262
+ render();
263
+ }
264
+
265
+ async function render() {
266
+ const el = document.getElementById('content');
267
+
268
+ if (projectDetail) {
269
+ const data = await api('project/' + projectDetail);
270
+ el.innerHTML = '<span class="back" onclick="projectDetail=null;render()">← Back to projects</span>' +
271
+ '<div class="detail"><h2>' + data.name + '</h2>' +
272
+ '<p style="color:#94a3b8;margin-bottom:1rem">' + (data.config.prompt || 'No prompt') + '</p>' +
273
+ (data.blueprint ? '<h3 style="color:#a5b4fc;margin:1rem 0 0.5rem">Blueprint</h3><pre>' + esc(data.blueprint) + '</pre>' : '') +
274
+ (data.prismaSchema ? '<h3 style="color:#a5b4fc;margin:1rem 0 0.5rem">Prisma Schema</h3><pre>' + esc(data.prismaSchema) + '</pre>' : '') +
275
+ '</div>';
276
+ return;
277
+ }
278
+
279
+ if (currentTab === 'projects') {
280
+ const data = await api('projects');
281
+ if (data.projects.length === 0) {
282
+ el.innerHTML = '<div class="empty"><h2>No projects yet</h2><p>Run <code>helix spawn "your idea"</code> to create one</p></div>';
283
+ } else {
284
+ el.innerHTML = '<div class="grid">' + data.projects.map(p =>
285
+ '<div class="card" onclick="projectDetail=\\'' + p.name + '\\';render()">' +
286
+ '<h3>' + p.name + '</h3>' +
287
+ '<p>' + (p.prompt ? p.prompt.substring(0, 100) : 'No prompt') + '</p>' +
288
+ '<div class="meta">' +
289
+ '<span><span class="status green"></span>' + (p.hasBlueprint ? 'Blueprint' : 'No blueprint') + '</span>' +
290
+ '<span><span class="status blue"></span>' + (p.hasPrisma ? 'Database' : 'No DB') + '</span>' +
291
+ '<span>' + new Date(p.generatedAt).toLocaleDateString() + '</span>' +
292
+ '</div></div>'
293
+ ).join('') + '</div>';
294
+ }
295
+ } else if (currentTab === 'templates') {
296
+ const data = await api('templates');
297
+ el.innerHTML = '<div class="grid">' + data.templates.map(t =>
298
+ '<div class="card">' +
299
+ '<h3>' + t.title + '</h3>' +
300
+ '<p>' + t.description + '</p>' +
301
+ '<div class="meta"><span>Theme: ' + t.theme + '</span><span>DB: ' + t.db + '</span><span>' + t.tags.join(', ') + '</span></div>' +
302
+ '<p style="margin-top:0.75rem;font-size:0.75rem;color:#6366f1">helix init ' + t.name + '</p>' +
303
+ '</div>'
304
+ ).join('') + '</div>';
305
+ } else if (currentTab === 'models') {
306
+ const data = await api('models');
307
+ el.innerHTML = '<div class="grid">' + data.models.map(m =>
308
+ '<div class="card">' +
309
+ '<h3>' + m.name + '</h3>' +
310
+ '<p style="font-family:monospace;font-size:0.8rem">' + m.id + '</p>' +
311
+ '<div class="meta"><span class="badge">' + m.type + '</span></div>' +
312
+ '</div>'
313
+ ).join('') + '</div>';
314
+ }
315
+ }
316
+
317
+ function esc(s) { return s.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); }
318
+ render();
319
+ </script>
320
+ </body>
321
+ </html>`;
322
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"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"}
@@ -25,9 +25,13 @@ export declare class PluginRegistry {
25
25
  */
26
26
  private isBuiltIn;
27
27
  /**
28
- * Register an external plugin
28
+ * Register an external plugin using require.resolve for reliable path resolution
29
29
  */
30
30
  private registerExternalPlugin;
31
+ /**
32
+ * Install a plugin by name (wraps npm install)
33
+ */
34
+ installPlugin(name: string): Promise<void>;
31
35
  /**
32
36
  * Get all registered plugins
33
37
  */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAoB/D;;GAEG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,OAAO,CAA+C;IAC9D,OAAO,CAAC,aAAa,CAA2C;IAEhE,OAAO;IAOP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC;;;OAGG;IACG,cAAc,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBxE;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;YACW,sBAAsB;IAgCpC;;OAEG;IACH,UAAU,IAAI,mBAAmB,EAAE;IAInC;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAI1D;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAgCpE;;OAEG;IACH,WAAW,IAAI,IAAI;CAiBtB;AAGD,eAAO,MAAM,WAAW,sBAAqC,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAoB/D;;GAEG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,OAAO,CAA+C;IAC9D,OAAO,CAAC,aAAa,CAA2C;IAEhE,OAAO;IAOP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC;;;OAGG;IACG,cAAc,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBxE;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;YACW,sBAAsB;IAgCpC;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAahD;;OAEG;IACH,UAAU,IAAI,mBAAmB,EAAE;IAInC;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAI1D;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAgCpE;;OAEG;IACH,WAAW,IAAI,IAAI;CAiBtB;AAGD,eAAO,MAAM,WAAW,sBAAqC,CAAC"}
@@ -116,24 +116,25 @@ class PluginRegistry {
116
116
  return BUILT_IN_GENERATORS.some(p => p.name === name);
117
117
  }
118
118
  /**
119
- * Register an external plugin
119
+ * Register an external plugin using require.resolve for reliable path resolution
120
120
  */
121
121
  async registerExternalPlugin(name, version, projectPath) {
122
- const modulePath = path.join(projectPath, "node_modules", name);
123
- if (!fs.existsSync(modulePath)) {
124
- console.log(chalk_1.default.yellow(`⚠️ Plugin ${name} not found in node_modules`));
125
- return;
126
- }
127
122
  try {
123
+ // Use require.resolve to find the actual module path — handles symlinks,
124
+ // yarn PnP, and nested node_modules correctly
125
+ const resolvedEntry = require.resolve(name, { paths: [projectPath] });
126
+ const modulePath = path.dirname(resolvedEntry);
128
127
  // Read plugin's package.json to get target
129
128
  const pluginPkgPath = path.join(modulePath, "package.json");
130
- const pluginPkg = await fs.readJSON(pluginPkgPath);
129
+ const pluginPkg = fs.existsSync(pluginPkgPath)
130
+ ? await fs.readJSON(pluginPkgPath)
131
+ : {};
131
132
  const target = pluginPkg.helix?.target || name.replace("helix-gen-", "");
132
133
  this.plugins.set(target, {
133
134
  name,
134
135
  target,
135
136
  version,
136
- modulePath,
137
+ modulePath: resolvedEntry,
137
138
  isBuiltIn: false,
138
139
  });
139
140
  console.log(chalk_1.default.green(`✓ Plugin loaded: ${name} (target: ${target})`));
@@ -142,6 +143,22 @@ class PluginRegistry {
142
143
  console.log(chalk_1.default.yellow(`⚠️ Could not load plugin ${name}: ${error}`));
143
144
  }
144
145
  }
146
+ /**
147
+ * Install a plugin by name (wraps npm install)
148
+ */
149
+ async installPlugin(name) {
150
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
151
+ const execa = require("execa");
152
+ console.log(chalk_1.default.cyan(`\n📦 Installing plugin: ${name}\n`));
153
+ try {
154
+ await execa("npm", ["install", name], { stdio: "inherit" });
155
+ console.log(chalk_1.default.green(`\n✅ Plugin installed: ${name}`));
156
+ console.log(chalk_1.default.gray(` Run \`helix plugin list\` to verify.\n`));
157
+ }
158
+ catch (err) {
159
+ console.error(chalk_1.default.red(`❌ Failed to install ${name}: ${err.message}`));
160
+ }
161
+ }
145
162
  /**
146
163
  * Get all registered plugins
147
164
  */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}