@defai.digital/ax-cli 3.2.0 → 3.3.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 (77) hide show
  1. package/.ax-cli/memory.json +8 -1
  2. package/README.md +8 -2
  3. package/config/models.yaml +13 -0
  4. package/dist/agent/context-manager.d.ts +5 -5
  5. package/dist/agent/context-manager.js +19 -9
  6. package/dist/agent/context-manager.js.map +1 -1
  7. package/dist/agent/llm-agent.d.ts +0 -2
  8. package/dist/agent/llm-agent.js +7 -50
  9. package/dist/agent/llm-agent.js.map +1 -1
  10. package/dist/agent/subagent.js +2 -1
  11. package/dist/agent/subagent.js.map +1 -1
  12. package/dist/commands/doctor.js +2 -2
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/frontend.d.ts +9 -0
  15. package/dist/commands/frontend.js +645 -0
  16. package/dist/commands/frontend.js.map +1 -0
  17. package/dist/commands/mcp.js +409 -3
  18. package/dist/commands/mcp.js.map +1 -1
  19. package/dist/commands/models.js +2 -2
  20. package/dist/commands/models.js.map +1 -1
  21. package/dist/commands/setup.js +15 -13
  22. package/dist/commands/setup.js.map +1 -1
  23. package/dist/constants.d.ts +1 -0
  24. package/dist/constants.js +1 -0
  25. package/dist/constants.js.map +1 -1
  26. package/dist/hooks/use-enhanced-input.js +16 -3
  27. package/dist/hooks/use-enhanced-input.js.map +1 -1
  28. package/dist/hooks/use-input-handler.js +7 -3
  29. package/dist/hooks/use-input-handler.js.map +1 -1
  30. package/dist/index.js +5 -2
  31. package/dist/index.js.map +1 -1
  32. package/dist/llm/client.d.ts +1 -0
  33. package/dist/llm/types.d.ts +49 -22
  34. package/dist/llm/types.js +12 -8
  35. package/dist/llm/types.js.map +1 -1
  36. package/dist/mcp/config.d.ts +1 -1
  37. package/dist/mcp/config.js +2 -2
  38. package/dist/mcp/config.js.map +1 -1
  39. package/dist/mcp/health.d.ts +111 -0
  40. package/dist/mcp/health.js +244 -0
  41. package/dist/mcp/health.js.map +1 -0
  42. package/dist/mcp/templates.d.ts +52 -0
  43. package/dist/mcp/templates.js +624 -0
  44. package/dist/mcp/templates.js.map +1 -0
  45. package/dist/schemas/api-schemas.d.ts +2 -1
  46. package/dist/schemas/api-schemas.js +6 -4
  47. package/dist/schemas/api-schemas.js.map +1 -1
  48. package/dist/tools/bash.js +25 -10
  49. package/dist/tools/bash.js.map +1 -1
  50. package/dist/ui/components/api-key-input.js +2 -2
  51. package/dist/ui/components/api-key-input.js.map +1 -1
  52. package/dist/ui/components/chat-history.js +14 -7
  53. package/dist/ui/components/chat-history.js.map +1 -1
  54. package/dist/ui/components/chat-input.js +12 -7
  55. package/dist/ui/components/chat-input.js.map +1 -1
  56. package/dist/ui/components/chat-interface.js +64 -53
  57. package/dist/ui/components/chat-interface.js.map +1 -1
  58. package/dist/ui/components/keyboard-hints.js +3 -2
  59. package/dist/ui/components/keyboard-hints.js.map +1 -1
  60. package/dist/ui/components/quick-actions.js +1 -0
  61. package/dist/ui/components/quick-actions.js.map +1 -1
  62. package/dist/ui/components/reasoning-display.js +14 -4
  63. package/dist/ui/components/reasoning-display.js.map +1 -1
  64. package/dist/ui/components/toast-notification.d.ts +29 -0
  65. package/dist/ui/components/toast-notification.js +15 -1
  66. package/dist/ui/components/toast-notification.js.map +1 -1
  67. package/dist/ui/components/welcome-panel.js +21 -2
  68. package/dist/ui/components/welcome-panel.js.map +1 -1
  69. package/dist/utils/config-loader.d.ts +1 -0
  70. package/dist/utils/config-loader.js.map +1 -1
  71. package/dist/utils/setup-validator.js +1 -0
  72. package/dist/utils/setup-validator.js.map +1 -1
  73. package/dist/utils/text-utils.d.ts +1 -0
  74. package/dist/utils/text-utils.js +12 -0
  75. package/dist/utils/text-utils.js.map +1 -1
  76. package/package.json +1 -2
  77. package/vitest.config.ts +1 -0
@@ -0,0 +1,645 @@
1
+ /**
2
+ * Frontend development workflow commands
3
+ * Specialized commands for design-to-code workflows with Figma integration
4
+ */
5
+ import { Command } from 'commander';
6
+ import chalk from 'chalk';
7
+ import { getMCPManager } from '../llm/tools.js';
8
+ import { extractErrorMessage } from '../utils/error-handler.js';
9
+ /**
10
+ * Parse Figma URL to extract file ID and node ID
11
+ */
12
+ function parseFigmaUrl(url) {
13
+ // Examples:
14
+ // https://figma.com/file/abc123xyz/Design-System
15
+ // https://figma.com/file/abc123xyz?node-id=1:234
16
+ // https://www.figma.com/design/abc123xyz/Design-System?node-id=1:234
17
+ const patterns = [
18
+ // New design URLs
19
+ /figma\.com\/design\/([a-zA-Z0-9-_]+)/,
20
+ // Classic file URLs
21
+ /figma\.com\/file\/([a-zA-Z0-9-_]+)/,
22
+ ];
23
+ let fileId;
24
+ for (const pattern of patterns) {
25
+ const match = url.match(pattern);
26
+ if (match) {
27
+ fileId = match[1];
28
+ break;
29
+ }
30
+ }
31
+ if (!fileId) {
32
+ throw new Error('Invalid Figma URL. Expected format: https://figma.com/file/[file-id] or https://figma.com/design/[file-id]');
33
+ }
34
+ // Extract node ID if present
35
+ const nodeIdMatch = url.match(/node-id=([^&]+)/);
36
+ const nodeId = nodeIdMatch ? nodeIdMatch[1] : undefined;
37
+ return { fileId, nodeId };
38
+ }
39
+ /**
40
+ * Validate that Figma MCP server is connected
41
+ */
42
+ async function ensureFigmaConnected() {
43
+ const manager = getMCPManager();
44
+ const servers = manager.getServers();
45
+ if (!servers.includes('figma')) {
46
+ console.log(chalk.yellow('\nāš ļø Figma MCP server is not connected.'));
47
+ console.log();
48
+ console.log(chalk.blue('To use frontend commands, you need to set up Figma integration:'));
49
+ console.log();
50
+ console.log('1. Generate a Figma access token:');
51
+ console.log(chalk.gray(' https://figma.com/settings → Personal access tokens'));
52
+ console.log();
53
+ console.log('2. Set the environment variable:');
54
+ console.log(chalk.cyan(' export FIGMA_ACCESS_TOKEN="your_token"'));
55
+ console.log();
56
+ console.log('3. Add Figma MCP server:');
57
+ console.log(chalk.cyan(' ax-cli mcp add figma --template'));
58
+ console.log();
59
+ throw new Error('Figma MCP server not connected. Please set up Figma integration first.');
60
+ }
61
+ // Verify Figma tools are available
62
+ const tools = manager.getTools().filter(t => t.serverName === 'figma');
63
+ if (tools.length === 0) {
64
+ throw new Error('Figma MCP server is connected but no tools are available. Try reconnecting: ax-cli mcp remove figma && ax-cli mcp add figma --template');
65
+ }
66
+ }
67
+ /**
68
+ * Build a specialized prompt for design-to-code workflow
69
+ */
70
+ function buildDesignToCodePrompt(params) {
71
+ const { fileId, nodeId, framework, typescript, cssType, outputDir, includeTests, includeStorybook } = params;
72
+ const nodeInfo = nodeId ? `node ID ${nodeId}` : 'the entire file';
73
+ return `
74
+ Using the Figma MCP server, retrieve the design for:
75
+ - File ID: ${fileId}
76
+ ${nodeId ? `- Node ID: ${nodeId}` : ''}
77
+
78
+ Generate a ${framework}${typescript ? ' TypeScript' : ' JavaScript'} component from ${nodeInfo} with:
79
+
80
+ **Component Requirements:**
81
+ 1. Match the exact structure and layout from the Figma design
82
+ 2. Use ${cssType} for styling that precisely matches the design specifications
83
+ 3. Create a props interface derived from design variants (if any)
84
+ 4. Include proper accessibility attributes (ARIA labels, semantic HTML, keyboard navigation)
85
+ 5. Implement responsive behavior based on Figma constraints/auto-layout
86
+ ${includeTests ? `6. Generate unit tests using ${framework === 'react' || framework === 'solid' ? 'Testing Library' : framework === 'vue' ? 'Vue Test Utils' : framework === 'angular' ? 'Jasmine/Karma' : 'Vitest'}` : ''}
87
+ ${includeStorybook ? '7. Create Storybook stories showcasing all variants and states' : ''}
88
+
89
+ **Extract and Apply from Figma:**
90
+ - Layout system (Flexbox, Grid, Auto-layout)
91
+ - Spacing (padding, margin, gap) - use exact pixel values
92
+ - Colors - reference design tokens or use exact hex/rgb values
93
+ - Typography (font family, size, weight, line height, letter spacing)
94
+ - Border radius, shadows, effects
95
+ - Interactive states (hover, active, focus, disabled)
96
+ - Responsive breakpoints (if multiple frames exist)
97
+
98
+ **Component Structure:**
99
+ - Create clean, maintainable component code
100
+ - Use composition for complex components
101
+ - Separate concerns (logic, presentation, styles)
102
+ - Follow ${framework} best practices and conventions
103
+ ${framework === 'angular' ? `
104
+ **Angular-Specific:**
105
+ - Use Angular component decorators (@Component)
106
+ - Implement proper change detection strategy
107
+ - Use Angular directives and pipes where appropriate
108
+ - Follow Angular style guide conventions
109
+ ` : framework === 'solid' ? `
110
+ **Solid.js-Specific:**
111
+ - Use createSignal for reactive state
112
+ - Leverage fine-grained reactivity
113
+ - Use Show, For, and other Solid control flow components
114
+ - Follow Solid.js reactivity patterns
115
+ ` : framework === 'vue' ? `
116
+ **Vue-Specific:**
117
+ - Use Composition API (setup script)
118
+ - Leverage Vue 3 reactivity (ref, reactive, computed)
119
+ - Use template syntax for clean markup
120
+ - Follow Vue 3 best practices
121
+ ` : `
122
+ **React-Specific:**
123
+ - Use functional components with hooks
124
+ - Leverage useState, useEffect, useMemo where appropriate
125
+ - Follow React composition patterns
126
+ - Implement proper key props for lists
127
+ `}
128
+
129
+ **Output Location:**
130
+ Save all generated files to: ${outputDir}/
131
+
132
+ **File Structure:**
133
+ ${framework === 'angular' ? `
134
+ ${typescript ? `
135
+ - component-name.component.ts (component class)
136
+ - component-name.component.html (template)
137
+ - component-name.component.${cssType === 'scss' || cssType === 'tailwind' ? 'scss' : 'css'} (styles)
138
+ ${includeTests ? '- component-name.component.spec.ts (unit tests)' : ''}
139
+ - index.ts (barrel export)
140
+ ` : `
141
+ - component-name.component.js (component class)
142
+ - component-name.component.html (template)
143
+ - component-name.component.css (styles)
144
+ ${includeTests ? '- component-name.component.spec.js (unit tests)' : ''}
145
+ - index.js (barrel export)
146
+ `}
147
+ ` : framework === 'vue' ? `
148
+ - Component.vue (single-file component)
149
+ ${includeTests ? `- Component.spec.${typescript ? 'ts' : 'js'} (unit tests)` : ''}
150
+ ${includeStorybook ? `- Component.stories.${typescript ? 'ts' : 'js'} (Storybook stories)` : ''}
151
+ - index.${typescript ? 'ts' : 'js'} (barrel export)
152
+ ` : typescript ? `
153
+ - Component.${framework === 'solid' ? 'tsx' : 'tsx'} (main component)
154
+ - Component.module.${cssType === 'modules' ? 'css' : cssType} (styles)
155
+ ${includeTests ? '- Component.test.tsx (unit tests)' : ''}
156
+ ${includeStorybook ? '- Component.stories.tsx (Storybook stories)' : ''}
157
+ - index.ts (barrel export)
158
+ ` : `
159
+ - Component.${framework === 'solid' ? 'jsx' : 'jsx'} (main component)
160
+ - Component.module.${cssType === 'modules' ? 'css' : cssType} (styles)
161
+ ${includeTests ? '- Component.test.jsx (unit tests)' : ''}
162
+ ${includeStorybook ? '- Component.stories.jsx (Storybook stories)' : ''}
163
+ - index.js (barrel export)
164
+ `}
165
+
166
+ After generating the component, show me:
167
+ 1. A summary of what was created
168
+ 2. The component props interface
169
+ 3. Any design decisions or assumptions made
170
+ 4. Suggestions for improvements or next steps
171
+ `.trim();
172
+ }
173
+ /**
174
+ * Build a prompt for token extraction
175
+ */
176
+ function buildTokenExtractionPrompt(params) {
177
+ const { fileId, format, outputFile, categories } = params;
178
+ const categoryList = categories.includes('all')
179
+ ? 'all design tokens (colors, typography, spacing, effects, etc.)'
180
+ : categories.join(', ');
181
+ return `
182
+ Using the Figma MCP server, extract ${categoryList} from file ID: ${fileId}
183
+
184
+ **Requirements:**
185
+ 1. Use the Figma MCP tools to retrieve all design variables/styles
186
+ 2. Organize tokens by category (colors, typography, spacing, etc.)
187
+ 3. Generate a ${format} file with proper formatting
188
+
189
+ **Output Format: ${format}**
190
+ ${format === 'css' ? `
191
+ - CSS custom properties (CSS variables)
192
+ - Group by category with comments
193
+ - Use semantic naming (--color-primary-500, --spacing-md)
194
+ - Include fallback values where appropriate
195
+ ` : ''}
196
+ ${format === 'scss' ? `
197
+ - SCSS variables
198
+ - Group by category with comments
199
+ - Use semantic naming ($color-primary-500, $spacing-md)
200
+ - Include mixins for common patterns
201
+ ` : ''}
202
+ ${format === 'json' ? `
203
+ - Structured JSON object
204
+ - Nested by category
205
+ - Include metadata (name, value, description)
206
+ - Use camelCase for keys
207
+ ` : ''}
208
+ ${format === 'js' || format === 'ts' ? `
209
+ - ES module exports
210
+ - Typed objects (if TypeScript)
211
+ - Group by category
212
+ - Include JSDoc comments
213
+ ` : ''}
214
+
215
+ **Token Categories:**
216
+ ${categories.includes('all') || categories.includes('colors') ? `
217
+ **Colors:**
218
+ - Palette colors (primary, secondary, neutral, etc.)
219
+ - Semantic colors (success, warning, error, info)
220
+ - Text colors
221
+ - Background colors
222
+ - Border colors
223
+ ` : ''}
224
+ ${categories.includes('all') || categories.includes('typography') ? `
225
+ **Typography:**
226
+ - Font families
227
+ - Font sizes
228
+ - Font weights
229
+ - Line heights
230
+ - Letter spacing
231
+ ` : ''}
232
+ ${categories.includes('all') || categories.includes('spacing') ? `
233
+ **Spacing:**
234
+ - Padding values
235
+ - Margin values
236
+ - Gap values
237
+ - Use consistent scale (e.g., 4px, 8px, 16px, 24px...)
238
+ ` : ''}
239
+ ${categories.includes('all') || categories.includes('effects') ? `
240
+ **Effects:**
241
+ - Box shadows
242
+ - Text shadows
243
+ - Border radius values
244
+ - Opacity values
245
+ ` : ''}
246
+
247
+ **Output:**
248
+ Save the generated tokens to: ${outputFile}
249
+
250
+ After extraction, show me:
251
+ 1. Summary of extracted tokens (how many of each category)
252
+ 2. Any naming conventions applied
253
+ 3. Suggestions for usage in the codebase
254
+ `.trim();
255
+ }
256
+ /**
257
+ * Build a prompt for component generation
258
+ */
259
+ function buildComponentGenerationPrompt(params) {
260
+ const { componentName, source, fileId, nodeId, framework, typescript, cssType, outputDir } = params;
261
+ if (source === 'figma') {
262
+ if (!fileId) {
263
+ throw new Error('Figma file ID is required when source is "figma"');
264
+ }
265
+ return `
266
+ Using the Figma MCP server, find and generate a component named "${componentName}":
267
+
268
+ **Search Process:**
269
+ 1. Search for components in Figma file ${fileId} that match the name "${componentName}"
270
+ ${nodeId ? `2. Use node ID ${nodeId} if searching by name fails` : '2. If multiple matches, show options and ask which one to use'}
271
+
272
+ **Generation:**
273
+ Generate a ${framework}${typescript ? ' TypeScript' : ''} component using ${cssType} for styling.
274
+
275
+ Follow the same requirements as design-to-code:
276
+ - Match exact Figma design
277
+ - Include all variants and states
278
+ - Proper accessibility
279
+ - Responsive behavior
280
+ - Clean, maintainable code
281
+
282
+ Save to: ${outputDir}/${componentName}/
283
+ `.trim();
284
+ }
285
+ // For other sources (template, scratch)
286
+ return `
287
+ Generate a ${framework}${typescript ? ' TypeScript' : ''} component named "${componentName}":
288
+
289
+ **Component Type:** ${source === 'template' ? 'Based on common component patterns' : 'From scratch'}
290
+
291
+ **Requirements:**
292
+ 1. Create a well-structured, production-ready component
293
+ 2. Use ${cssType} for styling
294
+ 3. Include proper TypeScript types (if applicable)
295
+ 4. Add accessibility attributes
296
+ 5. Follow ${framework} best practices
297
+
298
+ **Variants to include:**
299
+ - Default state
300
+ - Hover state
301
+ - Active state
302
+ - Disabled state
303
+ - Loading state (if applicable)
304
+
305
+ Save to: ${outputDir}/${componentName}/
306
+ `.trim();
307
+ }
308
+ /**
309
+ * Build a prompt for visual design comparison
310
+ */
311
+ function buildVisualComparisonPrompt(params) {
312
+ const { fileId, nodeId, filePaths, model, exportScreenshot, outputFormat } = params;
313
+ const nodeInfo = nodeId ? ` (node ID: ${nodeId})` : '';
314
+ return `
315
+ **Visual Design Comparison Task**
316
+
317
+ Using the Figma MCP server and ${model} vision capabilities, perform a comprehensive visual comparison between the Figma design and the current implementation.
318
+
319
+ **Step 1: Export Design from Figma**
320
+ ${exportScreenshot ? `
321
+ - Use Figma MCP to export a screenshot of the design from file ${fileId}${nodeInfo}
322
+ - Export at 2x resolution for detailed comparison
323
+ - Save temporarily for vision analysis
324
+ ` : `
325
+ - I will provide the Figma design screenshot separately
326
+ - File ID: ${fileId}${nodeInfo}
327
+ `}
328
+
329
+ **Step 2: Read Implementation Files**
330
+ Read and analyze the following implementation files:
331
+ ${filePaths.map(path => `- ${path}`).join('\n')}
332
+
333
+ **Step 3: Visual Comparison Analysis**
334
+ Using ${model} vision model, compare the Figma design screenshot with the implementation and analyze:
335
+
336
+ **Layout & Structure:**
337
+ - Component positioning and alignment
338
+ - Grid/flexbox layout accuracy
339
+ - Spacing between elements (padding, margins)
340
+ - Element dimensions and aspect ratios
341
+ - Responsive behavior considerations
342
+
343
+ **Visual Styling:**
344
+ - Color accuracy (backgrounds, borders, text, shadows)
345
+ - Typography (font family, size, weight, line-height)
346
+ - Border radius and shape consistency
347
+ - Box shadows and elevation
348
+ - Image and icon rendering
349
+
350
+ **Component States:**
351
+ - Default state matching
352
+ - Hover state implementation
353
+ - Active state styling
354
+ - Disabled state (if applicable)
355
+ - Focus states and accessibility
356
+
357
+ **Accessibility:**
358
+ - Color contrast ratios
359
+ - ARIA attributes presence
360
+ - Semantic HTML usage
361
+ - Keyboard navigation support
362
+
363
+ **Step 4: Generate Diff Report**
364
+ Create a detailed comparison report in ${outputFormat} format with:
365
+
366
+ 1. **Overall Similarity Score**: 0-100% match
367
+ 2. **Critical Differences**: Issues that significantly affect visual appearance
368
+ 3. **Minor Differences**: Small discrepancies that could be improved
369
+ 4. **Recommendations**: Specific code changes to match design exactly
370
+ 5. **Accessibility Gaps**: Missing or incorrect accessibility features
371
+
372
+ **Output Format: ${outputFormat}**
373
+ ${outputFormat === 'markdown' ? `
374
+ Use clear markdown formatting with:
375
+ - Headings for sections
376
+ - Code blocks for suggested changes
377
+ - Screenshots or visual descriptions where helpful
378
+ - Bullet points for lists
379
+ ` : outputFormat === 'html' ? `
380
+ Generate HTML with:
381
+ - Styled sections with headings
382
+ - Code blocks with syntax highlighting
383
+ - Side-by-side comparison tables
384
+ - Color swatches for color differences
385
+ ` : `
386
+ Generate JSON with structure:
387
+ {
388
+ "similarityScore": 0-100,
389
+ "criticalDifferences": [...],
390
+ "minorDifferences": [...],
391
+ "recommendations": [...],
392
+ "accessibilityGaps": [...]
393
+ }
394
+ `}
395
+
396
+ **Important Notes:**
397
+ - Be specific with measurements (e.g., "8px too much padding" not "padding is off")
398
+ - Reference exact color codes (#hex or rgb values)
399
+ - Suggest exact CSS changes to fix discrepancies
400
+ - Prioritize user-visible differences over minor implementation details
401
+ `.trim();
402
+ }
403
+ /**
404
+ * Create the frontend command group
405
+ */
406
+ export function createFrontendCommand() {
407
+ const frontendCmd = new Command('frontend');
408
+ frontendCmd.description('Front-end development workflows with MCP integration');
409
+ // Design to code command
410
+ frontendCmd
411
+ .command('design-to-code <figma-url>')
412
+ .description('Convert Figma designs to code')
413
+ .option('--framework <name>', 'Target framework (react, vue, svelte, angular, solid)', 'react')
414
+ .option('--typescript', 'Generate TypeScript', true)
415
+ .option('--no-typescript', 'Generate JavaScript')
416
+ .option('--css <type>', 'CSS solution (modules, styled, tailwind, emotion, scss)', 'modules')
417
+ .option('--output <dir>', 'Output directory', 'src/components')
418
+ .option('--test', 'Generate test files', false)
419
+ .option('--storybook', 'Generate Storybook stories', false)
420
+ .action(async (figmaUrl, options) => {
421
+ try {
422
+ console.log(chalk.blue.bold('\nšŸŽØ Design-to-Code Workflow\n'));
423
+ // Ensure Figma is connected
424
+ await ensureFigmaConnected();
425
+ // Parse Figma URL
426
+ console.log(chalk.gray('Parsing Figma URL...'));
427
+ const { fileId, nodeId } = parseFigmaUrl(figmaUrl);
428
+ console.log(chalk.green(`āœ“ File ID: ${fileId}`));
429
+ if (nodeId) {
430
+ console.log(chalk.green(`āœ“ Node ID: ${nodeId}`));
431
+ }
432
+ console.log();
433
+ // Build the prompt
434
+ const prompt = buildDesignToCodePrompt({
435
+ fileId,
436
+ nodeId,
437
+ framework: options.framework,
438
+ typescript: options.typescript,
439
+ cssType: options.css,
440
+ outputDir: options.output,
441
+ includeTests: options.test,
442
+ includeStorybook: options.storybook
443
+ });
444
+ // Display configuration
445
+ console.log(chalk.blue('Configuration:'));
446
+ console.log(chalk.gray(` Framework: ${options.framework}`));
447
+ console.log(chalk.gray(` Language: ${options.typescript ? 'TypeScript' : 'JavaScript'}`));
448
+ console.log(chalk.gray(` Styling: ${options.css}`));
449
+ console.log(chalk.gray(` Output: ${options.output}/`));
450
+ console.log(chalk.gray(` Tests: ${options.test ? 'Yes' : 'No'}`));
451
+ console.log(chalk.gray(` Storybook: ${options.storybook ? 'Yes' : 'No'}`));
452
+ console.log();
453
+ // Show the prompt that will be sent to the AI
454
+ console.log(chalk.blue('šŸ¤– Sending request to AI agent...\n'));
455
+ // In a real implementation, this would call the LLMAgent
456
+ // For now, show the prompt
457
+ console.log(chalk.yellow('Prompt to be executed:'));
458
+ console.log(chalk.gray('─'.repeat(80)));
459
+ console.log(prompt);
460
+ console.log(chalk.gray('─'.repeat(80)));
461
+ console.log();
462
+ console.log(chalk.green('āœ… To execute this workflow, run:'));
463
+ console.log(chalk.cyan(` ax-cli -p "${prompt.substring(0, 100)}..."`));
464
+ console.log();
465
+ }
466
+ catch (error) {
467
+ console.error(chalk.red(`\nāŒ Error: ${extractErrorMessage(error)}\n`));
468
+ process.exit(1);
469
+ }
470
+ });
471
+ // Extract tokens command
472
+ frontendCmd
473
+ .command('extract-tokens <file-id>')
474
+ .description('Extract design tokens from Figma')
475
+ .option('--format <type>', 'Output format (css, scss, json, js, ts)', 'css')
476
+ .option('--output <file>', 'Output file path', 'src/styles/design-tokens.css')
477
+ .option('--categories <list>', 'Token categories (colors, typography, spacing, effects, all)', 'all')
478
+ .action(async (fileId, options) => {
479
+ try {
480
+ console.log(chalk.blue.bold('\nšŸŽØ Design Token Extraction\n'));
481
+ // Ensure Figma is connected
482
+ await ensureFigmaConnected();
483
+ // Parse categories
484
+ const categories = options.categories.split(',').map((c) => c.trim());
485
+ // Build the prompt
486
+ const prompt = buildTokenExtractionPrompt({
487
+ fileId,
488
+ format: options.format,
489
+ outputFile: options.output,
490
+ categories
491
+ });
492
+ // Display configuration
493
+ console.log(chalk.blue('Configuration:'));
494
+ console.log(chalk.gray(` File ID: ${fileId}`));
495
+ console.log(chalk.gray(` Format: ${options.format}`));
496
+ console.log(chalk.gray(` Output: ${options.output}`));
497
+ console.log(chalk.gray(` Categories: ${categories.join(', ')}`));
498
+ console.log();
499
+ console.log(chalk.blue('šŸ¤– Sending request to AI agent...\n'));
500
+ // Show the prompt
501
+ console.log(chalk.yellow('Prompt to be executed:'));
502
+ console.log(chalk.gray('─'.repeat(80)));
503
+ console.log(prompt);
504
+ console.log(chalk.gray('─'.repeat(80)));
505
+ console.log();
506
+ console.log(chalk.green('āœ… To execute this workflow, run:'));
507
+ console.log(chalk.cyan(` ax-cli -p "${prompt.substring(0, 100)}..."`));
508
+ console.log();
509
+ }
510
+ catch (error) {
511
+ console.error(chalk.red(`\nāŒ Error: ${extractErrorMessage(error)}\n`));
512
+ process.exit(1);
513
+ }
514
+ });
515
+ // Generate component command
516
+ frontendCmd
517
+ .command('gen-component <name>')
518
+ .description('Generate a component from Figma or template')
519
+ .option('--source <type>', 'Component source (figma, template, scratch)', 'figma')
520
+ .option('--file-id <id>', 'Figma file ID (required if source is figma)')
521
+ .option('--node-id <id>', 'Figma node ID (optional)')
522
+ .option('--framework <name>', 'Target framework (react, vue, svelte, angular, solid)', 'react')
523
+ .option('--typescript', 'Generate TypeScript', true)
524
+ .option('--no-typescript', 'Generate JavaScript')
525
+ .option('--css <type>', 'CSS solution (modules, styled, tailwind, emotion)', 'modules')
526
+ .option('--output <dir>', 'Output directory', 'src/components')
527
+ .action(async (name, options) => {
528
+ try {
529
+ console.log(chalk.blue.bold(`\nšŸ”§ Component Generation: ${name}\n`));
530
+ // If source is figma, ensure it's connected
531
+ if (options.source === 'figma') {
532
+ await ensureFigmaConnected();
533
+ if (!options.fileId) {
534
+ console.error(chalk.red('āŒ --file-id is required when source is "figma"'));
535
+ console.log();
536
+ console.log(chalk.blue('Usage:'));
537
+ console.log(chalk.cyan(` ax-cli frontend gen-component ${name} --source figma --file-id abc123xyz`));
538
+ console.log();
539
+ process.exit(1);
540
+ }
541
+ }
542
+ // Build the prompt
543
+ const prompt = buildComponentGenerationPrompt({
544
+ componentName: name,
545
+ source: options.source,
546
+ fileId: options.fileId,
547
+ nodeId: options.nodeId,
548
+ framework: options.framework,
549
+ typescript: options.typescript,
550
+ cssType: options.css,
551
+ outputDir: options.output
552
+ });
553
+ // Display configuration
554
+ console.log(chalk.blue('Configuration:'));
555
+ console.log(chalk.gray(` Component: ${name}`));
556
+ console.log(chalk.gray(` Source: ${options.source}`));
557
+ if (options.fileId) {
558
+ console.log(chalk.gray(` Figma File: ${options.fileId}`));
559
+ }
560
+ if (options.nodeId) {
561
+ console.log(chalk.gray(` Figma Node: ${options.nodeId}`));
562
+ }
563
+ console.log(chalk.gray(` Framework: ${options.framework}`));
564
+ console.log(chalk.gray(` Language: ${options.typescript ? 'TypeScript' : 'JavaScript'}`));
565
+ console.log(chalk.gray(` Styling: ${options.css}`));
566
+ console.log(chalk.gray(` Output: ${options.output}/${name}/`));
567
+ console.log();
568
+ console.log(chalk.blue('šŸ¤– Sending request to AI agent...\n'));
569
+ // Show the prompt
570
+ console.log(chalk.yellow('Prompt to be executed:'));
571
+ console.log(chalk.gray('─'.repeat(80)));
572
+ console.log(prompt);
573
+ console.log(chalk.gray('─'.repeat(80)));
574
+ console.log();
575
+ console.log(chalk.green('āœ… To execute this workflow, run:'));
576
+ console.log(chalk.cyan(` ax-cli -p "${prompt.substring(0, 100)}..."`));
577
+ console.log();
578
+ }
579
+ catch (error) {
580
+ console.error(chalk.red(`\nāŒ Error: ${extractErrorMessage(error)}\n`));
581
+ process.exit(1);
582
+ }
583
+ });
584
+ // Compare design command with visual comparison
585
+ frontendCmd
586
+ .command('compare-design <figma-url>')
587
+ .description('Compare implementation with Figma design using visual AI')
588
+ .option('--file <path>', 'Implementation file(s) to compare (comma-separated)', 'src/components')
589
+ .option('--model <name>', 'Vision model to use', 'glm-4.5v')
590
+ .option('--export-screenshot', 'Export screenshot from Figma', true)
591
+ .option('--format <type>', 'Output format (markdown, html, json)', 'markdown')
592
+ .action(async (figmaUrl, options) => {
593
+ try {
594
+ console.log(chalk.blue.bold('\nšŸ” Visual Design Comparison\n'));
595
+ // Validate Figma connection
596
+ await ensureFigmaConnected();
597
+ // Parse Figma URL
598
+ const { fileId, nodeId } = parseFigmaUrl(figmaUrl);
599
+ // Split file paths if multiple
600
+ const filePaths = options.file.split(',').map((f) => f.trim());
601
+ // Build the visual comparison prompt
602
+ const prompt = buildVisualComparisonPrompt({
603
+ fileId,
604
+ nodeId,
605
+ filePaths,
606
+ model: options.model,
607
+ exportScreenshot: options.exportScreenshot,
608
+ outputFormat: options.format
609
+ });
610
+ // Display configuration
611
+ console.log(chalk.blue('Configuration:'));
612
+ console.log(chalk.gray(` Figma File ID: ${fileId}`));
613
+ if (nodeId) {
614
+ console.log(chalk.gray(` Figma Node ID: ${nodeId}`));
615
+ }
616
+ console.log(chalk.gray(` Implementation Files: ${filePaths.join(', ')}`));
617
+ console.log(chalk.gray(` Vision Model: ${options.model}`));
618
+ console.log(chalk.gray(` Export Screenshot: ${options.exportScreenshot ? 'Yes' : 'No'}`));
619
+ console.log(chalk.gray(` Output Format: ${options.format}`));
620
+ console.log();
621
+ console.log(chalk.blue('šŸ¤– Sending request to AI agent with vision capabilities...\n'));
622
+ // Show the prompt
623
+ console.log(chalk.yellow('Visual Comparison Prompt:'));
624
+ console.log(chalk.gray('─'.repeat(80)));
625
+ console.log(prompt);
626
+ console.log(chalk.gray('─'.repeat(80)));
627
+ console.log();
628
+ console.log(chalk.green('āœ… To execute this visual comparison, run:'));
629
+ console.log(chalk.cyan(` ax-cli -p "${prompt.substring(0, 100)}..." --model ${options.model}`));
630
+ console.log();
631
+ console.log(chalk.blue('šŸ“‹ What this will do:'));
632
+ console.log(chalk.gray(' 1. Export screenshot from Figma design'));
633
+ console.log(chalk.gray(' 2. Read your implementation files'));
634
+ console.log(chalk.gray(' 3. Use GLM-4.5V vision model to compare visual appearance'));
635
+ console.log(chalk.gray(' 4. Generate detailed difference report'));
636
+ console.log();
637
+ }
638
+ catch (error) {
639
+ console.error(chalk.red(`\nāŒ Error: ${extractErrorMessage(error)}\n`));
640
+ process.exit(1);
641
+ }
642
+ });
643
+ return frontendCmd;
644
+ }
645
+ //# sourceMappingURL=frontend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontend.js","sourceRoot":"","sources":["../../src/commands/frontend.ts"],"names":[],"mappings":"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"}