@defai.digital/ax-cli 4.0.3 → 4.0.5

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 (60) hide show
  1. package/README.md +61 -2
  2. package/dist/commands/mcp.js +61 -28
  3. package/dist/commands/mcp.js.map +1 -1
  4. package/dist/design/figma-alias.d.ts +5 -0
  5. package/dist/design/figma-alias.js +11 -4
  6. package/dist/design/figma-alias.js.map +1 -1
  7. package/dist/design/figma-audit.js +9 -1
  8. package/dist/design/figma-audit.js.map +1 -1
  9. package/dist/design/figma-client.d.ts +4 -0
  10. package/dist/design/figma-client.js +44 -11
  11. package/dist/design/figma-client.js.map +1 -1
  12. package/dist/design/figma-tokens.js +19 -8
  13. package/dist/design/figma-tokens.js.map +1 -1
  14. package/dist/mcp/automatosx-loader.d.ts +16 -1
  15. package/dist/mcp/automatosx-loader.js +18 -8
  16. package/dist/mcp/automatosx-loader.js.map +1 -1
  17. package/dist/mcp/cancellation.d.ts +3 -0
  18. package/dist/mcp/cancellation.js +22 -3
  19. package/dist/mcp/cancellation.js.map +1 -1
  20. package/dist/mcp/content-length-transport.d.ts +3 -0
  21. package/dist/mcp/content-length-transport.js +32 -1
  22. package/dist/mcp/content-length-transport.js.map +1 -1
  23. package/dist/mcp/progress.d.ts +3 -0
  24. package/dist/mcp/progress.js +22 -4
  25. package/dist/mcp/progress.js.map +1 -1
  26. package/dist/mcp/schema-validator.d.ts +5 -0
  27. package/dist/mcp/schema-validator.js +46 -11
  28. package/dist/mcp/schema-validator.js.map +1 -1
  29. package/dist/mcp/templates.js +4 -1
  30. package/dist/mcp/templates.js.map +1 -1
  31. package/dist/sdk/errors.d.ts +7 -2
  32. package/dist/sdk/errors.js +17 -5
  33. package/dist/sdk/errors.js.map +1 -1
  34. package/dist/sdk/index.d.ts +5 -5
  35. package/dist/sdk/index.js +113 -31
  36. package/dist/sdk/index.js.map +1 -1
  37. package/dist/sdk/progress-reporter.d.ts +8 -0
  38. package/dist/sdk/progress-reporter.js +41 -6
  39. package/dist/sdk/progress-reporter.js.map +1 -1
  40. package/dist/sdk/testing.d.ts +20 -3
  41. package/dist/sdk/testing.js +177 -20
  42. package/dist/sdk/testing.js.map +1 -1
  43. package/dist/sdk/tool-registry.d.ts +32 -1
  44. package/dist/sdk/tool-registry.js +111 -13
  45. package/dist/sdk/tool-registry.js.map +1 -1
  46. package/dist/sdk/unified-logger.d.ts +6 -0
  47. package/dist/sdk/unified-logger.js +48 -8
  48. package/dist/sdk/unified-logger.js.map +1 -1
  49. package/dist/sdk/version.d.ts +1 -1
  50. package/dist/sdk/version.js +20 -6
  51. package/dist/sdk/version.js.map +1 -1
  52. package/dist/tools/design-tool.d.ts +9 -0
  53. package/dist/tools/design-tool.js +72 -35
  54. package/dist/tools/design-tool.js.map +1 -1
  55. package/dist/ui/components/diff-renderer.js +4 -4
  56. package/dist/ui/components/diff-renderer.js.map +1 -1
  57. package/dist/ui/themes/theme-registry.d.ts +3 -1
  58. package/dist/ui/themes/theme-registry.js +5 -3
  59. package/dist/ui/themes/theme-registry.js.map +1 -1
  60. package/package.json +1 -1
@@ -40,15 +40,26 @@ export class ToolRegistry {
40
40
  registerTool(source, definition, executor, options = {}) {
41
41
  const toolName = definition.function.name;
42
42
  // Check if tool already exists
43
- if (this.tools.has(toolName) && !options.allowOverwrite) {
43
+ const existingTool = this.tools.get(toolName);
44
+ if (existingTool && !options.allowOverwrite) {
44
45
  throw new Error(`Tool '${toolName}' is already registered. Use allowOverwrite: true to replace it.`);
45
46
  }
47
+ // If overwriting, remove from old source's set first
48
+ if (existingTool && existingTool.registeredBy !== source) {
49
+ const oldSourceSet = this.toolsBySource.get(existingTool.registeredBy);
50
+ if (oldSourceSet) {
51
+ oldSourceSet.delete(toolName);
52
+ }
53
+ }
54
+ // BUG FIX: Clone definition and tags to prevent external mutation of registry state
55
+ // Without this, external code could modify the definition/tags after registration
56
+ // and corrupt the internal registry state
46
57
  const registeredTool = {
47
- definition,
58
+ definition: this.cloneDefinition(definition),
48
59
  executor,
49
60
  registeredBy: source,
50
61
  registeredAt: Date.now(),
51
- tags: options.tags,
62
+ tags: options.tags ? [...options.tags] : undefined,
52
63
  };
53
64
  this.tools.set(toolName, registeredTool);
54
65
  const sourceSet = this.toolsBySource.get(source);
@@ -71,11 +82,43 @@ export class ToolRegistry {
71
82
  }
72
83
  return true;
73
84
  }
85
+ /**
86
+ * Deep clone an LLMTool definition to prevent external mutation
87
+ * @internal
88
+ */
89
+ cloneDefinition(def) {
90
+ return {
91
+ type: def.type,
92
+ function: {
93
+ name: def.function.name,
94
+ description: def.function.description,
95
+ parameters: JSON.parse(JSON.stringify(def.function.parameters)),
96
+ },
97
+ };
98
+ }
99
+ /**
100
+ * Deep clone a RegisteredTool to prevent external mutation
101
+ * @internal
102
+ */
103
+ cloneTool(tool) {
104
+ return {
105
+ definition: this.cloneDefinition(tool.definition),
106
+ executor: tool.executor, // Executor is a function, can't be cloned
107
+ registeredBy: tool.registeredBy,
108
+ registeredAt: tool.registeredAt,
109
+ tags: tool.tags ? [...tool.tags] : undefined,
110
+ };
111
+ }
74
112
  /**
75
113
  * Get a registered tool
114
+ *
115
+ * Returns a deep copy to prevent external mutation of registry state.
116
+ * Note: The executor function reference is shared (cannot be cloned).
76
117
  */
77
118
  getTool(toolName) {
78
- return this.tools.get(toolName);
119
+ const tool = this.tools.get(toolName);
120
+ // BUG FIX: Return deep copy to prevent external mutation
121
+ return tool ? this.cloneTool(tool) : undefined;
79
122
  }
80
123
  /**
81
124
  * Check if a tool is registered
@@ -85,27 +128,36 @@ export class ToolRegistry {
85
128
  }
86
129
  /**
87
130
  * Get all tool definitions (OpenAI format)
131
+ *
132
+ * Returns deep copies to prevent external mutation of registry state.
88
133
  */
89
134
  getAllToolDefinitions() {
90
- return Array.from(this.tools.values()).map(tool => tool.definition);
135
+ // BUG FIX: Return deep copies to prevent external mutation
136
+ return Array.from(this.tools.values()).map(tool => this.cloneDefinition(tool.definition));
91
137
  }
92
138
  /**
93
139
  * Get tool definitions from specific source
140
+ *
141
+ * Returns deep copies to prevent external mutation of registry state.
94
142
  */
95
143
  getToolDefinitionsBySource(source) {
96
144
  const toolNames = this.toolsBySource.get(source) || new Set();
145
+ // BUG FIX: Return deep copies to prevent external mutation
97
146
  return Array.from(toolNames)
98
147
  .map(name => this.tools.get(name))
99
148
  .filter((tool) => tool !== undefined)
100
- .map(tool => tool.definition);
149
+ .map(tool => this.cloneDefinition(tool.definition));
101
150
  }
102
151
  /**
103
152
  * Get tool definitions by tag
153
+ *
154
+ * Returns deep copies to prevent external mutation of registry state.
104
155
  */
105
156
  getToolDefinitionsByTag(tag) {
157
+ // BUG FIX: Return deep copies to prevent external mutation
106
158
  return Array.from(this.tools.values())
107
159
  .filter(tool => tool.tags?.includes(tag))
108
- .map(tool => tool.definition);
160
+ .map(tool => this.cloneDefinition(tool.definition));
109
161
  }
110
162
  /**
111
163
  * Execute a tool
@@ -119,13 +171,32 @@ export class ToolRegistry {
119
171
  };
120
172
  }
121
173
  try {
122
- const result = await tool.executor(args, context);
174
+ // BUG FIX: Clone args and context before passing to executor
175
+ // This prevents the executor from mutating the caller's objects
176
+ // which could cause subtle bugs if the caller reuses them
177
+ const clonedArgs = JSON.parse(JSON.stringify(args));
178
+ const clonedContext = {
179
+ source: context.source,
180
+ agentId: context.agentId,
181
+ metadata: context.metadata ? { ...context.metadata } : undefined,
182
+ };
183
+ const result = await tool.executor(clonedArgs, clonedContext);
123
184
  return result;
124
185
  }
125
186
  catch (error) {
187
+ // Preserve full error information for debugging
188
+ const errorMessage = error instanceof Error
189
+ ? `${error.message}${error.stack ? `\nStack: ${error.stack}` : ''}`
190
+ : 'Unknown execution error';
126
191
  return {
127
192
  success: false,
128
- error: error instanceof Error ? error.message : 'Unknown execution error',
193
+ error: errorMessage,
194
+ // Include structured error data for programmatic access
195
+ data: error instanceof Error ? {
196
+ errorName: error.name,
197
+ errorMessage: error.message,
198
+ errorStack: error.stack,
199
+ } : undefined,
129
200
  };
130
201
  }
131
202
  }
@@ -186,14 +257,17 @@ export class ToolRegistry {
186
257
  }
187
258
  /**
188
259
  * Export registry as JSON (excluding executors)
260
+ *
261
+ * Returns deep copies to prevent external mutation of registry state.
189
262
  */
190
263
  exportDefinitions() {
264
+ // BUG FIX: Return deep copies to prevent external mutation
191
265
  const tools = Array.from(this.tools.entries()).map(([name, tool]) => ({
192
266
  name,
193
- definition: tool.definition,
267
+ definition: this.cloneDefinition(tool.definition),
194
268
  registeredBy: tool.registeredBy,
195
269
  registeredAt: tool.registeredAt,
196
- tags: tool.tags,
270
+ tags: tool.tags ? [...tool.tags] : undefined,
197
271
  }));
198
272
  return {
199
273
  tools,
@@ -209,12 +283,36 @@ export function getToolRegistry() {
209
283
  }
210
284
  /**
211
285
  * Helper: Register multiple tools at once
286
+ *
287
+ * @param source - Source system registering the tools
288
+ * @param tools - Array of tool definitions with executors
289
+ * @returns Object with success status and any errors encountered
212
290
  */
213
291
  export function registerTools(source, tools) {
214
292
  const registry = getToolRegistry();
215
- for (const { definition, executor, options } of tools) {
216
- registry.registerTool(source, definition, executor, options);
293
+ const registered = [];
294
+ const errors = [];
295
+ for (let i = 0; i < tools.length; i++) {
296
+ const tool = tools[i];
297
+ // BUG FIX: Safely extract tool name to prevent crashes on malformed input
298
+ // Without this, accessing definition.function.name on null/undefined would throw
299
+ // and crash registration for all remaining tools
300
+ const toolName = tool?.definition?.function?.name ?? `unknown-tool-${i}`;
301
+ try {
302
+ if (!tool || !tool.definition || !tool.executor) {
303
+ throw new Error('Tool definition and executor are required');
304
+ }
305
+ registry.registerTool(source, tool.definition, tool.executor, tool.options);
306
+ registered.push(toolName);
307
+ }
308
+ catch (error) {
309
+ errors.push({
310
+ name: toolName,
311
+ error: error instanceof Error ? error.message : 'Unknown error',
312
+ });
313
+ }
217
314
  }
315
+ return { registered, errors };
218
316
  }
219
317
  /**
220
318
  * Helper: Create a simple tool executor from a function
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/sdk/tool-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/sdk/tool-registry.ts"],"names":[],"mappings":"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"}
@@ -102,10 +102,16 @@ export declare class UnifiedLogger extends EventEmitter {
102
102
  private trimLogs;
103
103
  /**
104
104
  * Get all logs (optionally filtered)
105
+ *
106
+ * Returns deep copies of log entries to prevent external mutation of internal state.
105
107
  */
106
108
  getLogs(filter?: LogFilter): LogEntry[];
107
109
  /**
108
110
  * Get recent logs (last N entries)
111
+ *
112
+ * @param count - Number of recent entries to return (must be positive)
113
+ * @param filter - Optional filter to apply before selecting recent entries
114
+ * @returns Array of recent log entries
109
115
  */
110
116
  getRecentLogs(count: number, filter?: LogFilter): LogEntry[];
111
117
  /**
@@ -68,24 +68,39 @@ export class UnifiedLogger extends EventEmitter {
68
68
  if (level < this.minLevel) {
69
69
  return;
70
70
  }
71
+ // BUG FIX: Clone data to prevent external mutation of stored log entries
72
+ // Without this, external code could modify the data object after logging
73
+ // and corrupt the internal log state
71
74
  const entry = {
72
75
  timestamp: Date.now(),
73
76
  level,
74
77
  source,
75
78
  message,
76
- data,
79
+ data: data ? { ...data } : undefined,
77
80
  error: error ? {
78
81
  message: error.message,
79
82
  stack: error.stack,
80
83
  name: error.name,
81
84
  } : undefined,
82
85
  };
86
+ // Trim logs BEFORE adding to prevent exceeding maxLogSize
87
+ // This ensures the array never grows beyond the limit
88
+ if (this.logs.length >= this.maxLogSize) {
89
+ // Remove oldest entries to make room (keep last maxLogSize - 1 entries)
90
+ this.logs = this.logs.slice(-(this.maxLogSize - 1));
91
+ }
83
92
  // Add to logs
84
93
  this.logs.push(entry);
85
- this.trimLogs();
86
- // Emit event
87
- this.emit('log', entry);
88
- this.emit(LogLevel[level].toLowerCase(), entry);
94
+ // BUG FIX: Emit separate copies of the entry to each event channel
95
+ // The stored entry must not be shared with listeners, as listeners could
96
+ // mutate it and corrupt internal state. Each emission gets its own copy.
97
+ const emitEntry = () => ({
98
+ ...entry,
99
+ data: entry.data ? { ...entry.data } : undefined,
100
+ error: entry.error ? { ...entry.error } : undefined,
101
+ });
102
+ this.emit('log', emitEntry());
103
+ this.emit(LogLevel[level].toLowerCase(), emitEntry());
89
104
  }
90
105
  /**
91
106
  * Log debug message
@@ -121,6 +136,8 @@ export class UnifiedLogger extends EventEmitter {
121
136
  }
122
137
  /**
123
138
  * Get all logs (optionally filtered)
139
+ *
140
+ * Returns deep copies of log entries to prevent external mutation of internal state.
124
141
  */
125
142
  getLogs(filter) {
126
143
  let filtered = [...this.logs];
@@ -135,7 +152,12 @@ export class UnifiedLogger extends EventEmitter {
135
152
  filtered = filtered.filter(log => log.source === source);
136
153
  }
137
154
  else if (source instanceof RegExp) {
138
- filtered = filtered.filter(log => source.test(log.source));
155
+ // Reset lastIndex before each filter to avoid stateful behavior with global regexes
156
+ // Global regexes maintain lastIndex state between test() calls which can cause flaky results
157
+ filtered = filtered.filter(log => {
158
+ source.lastIndex = 0;
159
+ return source.test(log.source);
160
+ });
139
161
  }
140
162
  }
141
163
  if (filter.since !== undefined) {
@@ -147,14 +169,32 @@ export class UnifiedLogger extends EventEmitter {
147
169
  filtered = filtered.filter(log => log.timestamp <= until);
148
170
  }
149
171
  }
150
- return filtered;
172
+ // BUG FIX: Return deep copies to prevent external mutation of internal log entries
173
+ // Without this, external code could modify the returned entries and corrupt internal state
174
+ return filtered.map(log => ({
175
+ ...log,
176
+ // Deep copy optional nested objects
177
+ data: log.data ? { ...log.data } : undefined,
178
+ error: log.error ? { ...log.error } : undefined,
179
+ }));
151
180
  }
152
181
  /**
153
182
  * Get recent logs (last N entries)
183
+ *
184
+ * @param count - Number of recent entries to return (must be positive)
185
+ * @param filter - Optional filter to apply before selecting recent entries
186
+ * @returns Array of recent log entries
154
187
  */
155
188
  getRecentLogs(count, filter) {
189
+ // Validate count is a positive integer
190
+ const validCount = typeof count === 'number' && isFinite(count) && count > 0
191
+ ? Math.floor(count)
192
+ : 0;
193
+ if (validCount === 0) {
194
+ return [];
195
+ }
156
196
  const logs = this.getLogs(filter);
157
- return logs.slice(-count);
197
+ return logs.slice(-validCount);
158
198
  }
159
199
  /**
160
200
  * Subscribe to all log events
@@ -1 +1 @@
1
- {"version":3,"file":"unified-logger.js","sourceRoot":"","sources":["../../src/sdk/unified-logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unified-logger.js","sourceRoot":"","sources":["../../src/sdk/unified-logger.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@
26
26
  * - Checking CLI compatibility
27
27
  * - Debugging CLI-specific issues
28
28
  */
29
- export declare const CLI_VERSION = "3.13.1";
29
+ export declare const CLI_VERSION = "4.0.5";
30
30
  /**
31
31
  * SDK library version (semantic versioning for API stability)
32
32
  *
@@ -26,7 +26,7 @@
26
26
  * - Checking CLI compatibility
27
27
  * - Debugging CLI-specific issues
28
28
  */
29
- export const CLI_VERSION = '3.13.1';
29
+ export const CLI_VERSION = '4.0.5';
30
30
  /**
31
31
  * SDK library version (semantic versioning for API stability)
32
32
  *
@@ -160,17 +160,31 @@ export function getVersionString() {
160
160
  * ```
161
161
  */
162
162
  export function isSDKVersionCompatible(minVersion) {
163
- // BUG FIX: Validate version string format before parsing
163
+ // Validate version string format before parsing
164
164
  if (typeof minVersion !== 'string' || !minVersion.trim()) {
165
165
  throw new Error(`Invalid version string: "${minVersion}"`);
166
166
  }
167
- const parts = minVersion.split('.');
168
- const [minMajor, minMinor = 0, minPatch = 0] = parts.map(Number);
169
- const [curMajor, curMinor = 0, curPatch = 0] = SDK_VERSION.split('.').map(Number);
170
- // BUG FIX: Check for NaN (invalid number in version string)
167
+ // Remove leading 'v' if present (e.g., "v1.2.3" -> "1.2.3")
168
+ const normalizedVersion = minVersion.trim().replace(/^v/i, '');
169
+ // Split and validate version parts
170
+ const parts = normalizedVersion.split('.');
171
+ // Warn about non-standard version formats (more or less than 3 parts)
172
+ if (parts.length > 3) {
173
+ console.warn(`[AX SDK] Version "${minVersion}" has more than 3 parts; extra parts will be ignored`);
174
+ }
175
+ const [minMajorStr, minMinorStr = '0', minPatchStr = '0'] = parts;
176
+ const minMajor = parseInt(minMajorStr, 10);
177
+ const minMinor = parseInt(minMinorStr, 10);
178
+ const minPatch = parseInt(minPatchStr, 10);
179
+ // Check for NaN (invalid number in version string)
171
180
  if (isNaN(minMajor) || isNaN(minMinor) || isNaN(minPatch)) {
172
181
  throw new Error(`Invalid version format: "${minVersion}" (must be semantic version like "1.2.3")`);
173
182
  }
183
+ // Validate version numbers are non-negative
184
+ if (minMajor < 0 || minMinor < 0 || minPatch < 0) {
185
+ throw new Error(`Invalid version format: "${minVersion}" (version numbers cannot be negative)`);
186
+ }
187
+ const [curMajor, curMinor = 0, curPatch = 0] = SDK_VERSION.split('.').map(Number);
174
188
  // Major version comparison
175
189
  if (curMajor > minMajor)
176
190
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/sdk/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAEnC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AAEjC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,WAAW,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,WAAW,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,UAAU;IAYxB,OAAO;QACL,UAAU,EAAE,WAAW;QACvB,UAAU,EAAE,WAAW;QACvB,UAAU,EAAE,eAAe;QAC3B,gBAAgB,EAAE,IAAI,WAAW,EAAE;QACnC,gBAAgB,EAAE,IAAI,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,WAAW,WAAW,UAAU,WAAW,GAAG,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,yDAAyD;IACzD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,4BAA4B,UAAU,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAElF,4DAA4D;IAC5D,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,4BAA4B,UAAU,2CAA2C,CAAC,CAAC;IACrG,CAAC;IAED,2BAA2B;IAC3B,IAAI,QAAQ,GAAG,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,QAAQ,GAAG,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEtC,2BAA2B;IAC3B,IAAI,QAAQ,GAAG,QAAQ;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,QAAQ,GAAG,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEtC,2BAA2B;IAC3B,OAAO,QAAQ,IAAI,QAAQ,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/sdk/version.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,15 @@ import { type MapOutputFormat } from '../design/index.js';
12
12
  * Design Tool for Figma integration
13
13
  */
14
14
  export declare class DesignTool {
15
+ /**
16
+ * Validate and get Figma access token
17
+ * Returns error result if token is not available
18
+ */
19
+ private validateFigmaToken;
20
+ /**
21
+ * Format Figma API errors with helpful messages
22
+ */
23
+ private formatFigmaError;
15
24
  /**
16
25
  * Map a Figma file structure
17
26
  */
@@ -12,18 +12,61 @@ import { extractErrorMessage } from '../utils/error-handler.js';
12
12
  * Design Tool for Figma integration
13
13
  */
14
14
  export class DesignTool {
15
+ /**
16
+ * Validate and get Figma access token
17
+ * Returns error result if token is not available
18
+ */
19
+ validateFigmaToken() {
20
+ if (!process.env.FIGMA_ACCESS_TOKEN) {
21
+ return {
22
+ success: false,
23
+ error: `FIGMA_ACCESS_TOKEN environment variable not set.
24
+
25
+ To fix this:
26
+ 1. Get a personal access token from https://www.figma.com/developers/api#access-tokens
27
+ 2. Set it using one of these methods:
28
+ - Run: export FIGMA_ACCESS_TOKEN="your_token"
29
+ - Add to your shell profile (~/.zshrc or ~/.bashrc)
30
+ - Use ax-cli mcp add figma --template --interactive`,
31
+ };
32
+ }
33
+ return null;
34
+ }
35
+ /**
36
+ * Format Figma API errors with helpful messages
37
+ */
38
+ formatFigmaError(error, operation) {
39
+ const message = extractErrorMessage(error);
40
+ // Check for common error patterns
41
+ if (message.includes('401') || message.includes('Unauthorized')) {
42
+ return `${operation}: Invalid or expired Figma access token. Please check your FIGMA_ACCESS_TOKEN.`;
43
+ }
44
+ if (message.includes('403') || message.includes('Forbidden')) {
45
+ return `${operation}: Access denied. You may not have permission to access this Figma file.`;
46
+ }
47
+ if (message.includes('404') || message.includes('Not Found')) {
48
+ return `${operation}: Figma file not found. Please check the file key is correct and you have access to the file.`;
49
+ }
50
+ if (message.includes('429') || message.includes('Rate limit')) {
51
+ return `${operation}: Figma API rate limit exceeded. Please wait a moment and try again.`;
52
+ }
53
+ if (message.includes('timeout') || message.includes('Timeout')) {
54
+ return `${operation}: Request timed out. The Figma file may be too large or the API is slow. Try again or use a smaller depth value.`;
55
+ }
56
+ if (message.includes('ENOTFOUND') || message.includes('network')) {
57
+ return `${operation}: Network error. Please check your internet connection.`;
58
+ }
59
+ return `${operation}: ${message}`;
60
+ }
15
61
  /**
16
62
  * Map a Figma file structure
17
63
  */
18
64
  async mapFile(fileKey, options = {}) {
65
+ // Validate token first
66
+ const tokenError = this.validateFigmaToken();
67
+ if (tokenError)
68
+ return tokenError;
19
69
  try {
20
- // Check for FIGMA_ACCESS_TOKEN
21
- if (!process.env.FIGMA_ACCESS_TOKEN) {
22
- return {
23
- success: false,
24
- error: 'FIGMA_ACCESS_TOKEN environment variable not set. Please set it with your Figma personal access token.',
25
- };
26
- }
27
70
  const client = getFigmaClient();
28
71
  const response = await client.getFile(fileKey, {
29
72
  depth: options.depth,
@@ -44,7 +87,7 @@ export class DesignTool {
44
87
  catch (error) {
45
88
  return {
46
89
  success: false,
47
- error: `Failed to map Figma file: ${extractErrorMessage(error)}`,
90
+ error: this.formatFigmaError(error, 'Failed to map Figma file'),
48
91
  };
49
92
  }
50
93
  }
@@ -52,13 +95,11 @@ export class DesignTool {
52
95
  * Extract design tokens from a Figma file
53
96
  */
54
97
  async extractTokens(fileKey, options = {}) {
98
+ // Validate token first
99
+ const tokenError = this.validateFigmaToken();
100
+ if (tokenError)
101
+ return tokenError;
55
102
  try {
56
- if (!process.env.FIGMA_ACCESS_TOKEN) {
57
- return {
58
- success: false,
59
- error: 'FIGMA_ACCESS_TOKEN environment variable not set.',
60
- };
61
- }
62
103
  const client = getFigmaClient();
63
104
  const response = await client.getLocalVariables(fileKey);
64
105
  const tokens = extractTokensFromVariables(response, {
@@ -75,7 +116,7 @@ export class DesignTool {
75
116
  catch (error) {
76
117
  return {
77
118
  success: false,
78
- error: `Failed to extract tokens: ${extractErrorMessage(error)}`,
119
+ error: this.formatFigmaError(error, 'Failed to extract tokens'),
79
120
  };
80
121
  }
81
122
  }
@@ -83,13 +124,11 @@ export class DesignTool {
83
124
  * Run design audit on a Figma file
84
125
  */
85
126
  async auditFile(fileKey, options = {}) {
127
+ // Validate token first
128
+ const tokenError = this.validateFigmaToken();
129
+ if (tokenError)
130
+ return tokenError;
86
131
  try {
87
- if (!process.env.FIGMA_ACCESS_TOKEN) {
88
- return {
89
- success: false,
90
- error: 'FIGMA_ACCESS_TOKEN environment variable not set.',
91
- };
92
- }
93
132
  const client = getFigmaClient();
94
133
  const response = await client.getFile(fileKey, {
95
134
  depth: options.depth,
@@ -119,7 +158,7 @@ export class DesignTool {
119
158
  catch (error) {
120
159
  return {
121
160
  success: false,
122
- error: `Failed to audit design: ${extractErrorMessage(error)}`,
161
+ error: this.formatFigmaError(error, 'Failed to audit design'),
123
162
  };
124
163
  }
125
164
  }
@@ -194,19 +233,17 @@ export class DesignTool {
194
233
  * Search for nodes in a Figma file
195
234
  */
196
235
  async searchNodes(fileKey, options) {
236
+ // Validate token first
237
+ const tokenError = this.validateFigmaToken();
238
+ if (tokenError)
239
+ return tokenError;
240
+ if (!options.name && !options.type && !options.text) {
241
+ return {
242
+ success: false,
243
+ error: 'At least one search option required: name, type, or text',
244
+ };
245
+ }
197
246
  try {
198
- if (!process.env.FIGMA_ACCESS_TOKEN) {
199
- return {
200
- success: false,
201
- error: 'FIGMA_ACCESS_TOKEN environment variable not set.',
202
- };
203
- }
204
- if (!options.name && !options.type && !options.text) {
205
- return {
206
- success: false,
207
- error: 'At least one search option required: name, type, or text',
208
- };
209
- }
210
247
  const client = getFigmaClient();
211
248
  const response = await client.getFile(fileKey);
212
249
  const mapResult = mapFigmaFile(response, fileKey);
@@ -254,7 +291,7 @@ export class DesignTool {
254
291
  catch (error) {
255
292
  return {
256
293
  success: false,
257
- error: `Failed to search nodes: ${extractErrorMessage(error)}`,
294
+ error: this.formatFigmaError(error, 'Failed to search nodes'),
258
295
  };
259
296
  }
260
297
  }