figma-console-mcp 0.1.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.
- package/LICENSE +21 -0
- package/README.md +328 -0
- package/dist/browser/base.d.ts +50 -0
- package/dist/browser/base.d.ts.map +1 -0
- package/dist/browser/base.js +6 -0
- package/dist/browser/base.js.map +1 -0
- package/dist/browser/local.d.ts +66 -0
- package/dist/browser/local.d.ts.map +1 -0
- package/dist/browser/local.js +223 -0
- package/dist/browser/local.js.map +1 -0
- package/dist/cloudflare/browser/base.js +5 -0
- package/dist/cloudflare/browser/cloudflare.js +156 -0
- package/dist/cloudflare/browser-manager.js +157 -0
- package/dist/cloudflare/core/config.js +161 -0
- package/dist/cloudflare/core/console-monitor.js +382 -0
- package/dist/cloudflare/core/enrichment/enrichment-service.js +272 -0
- package/dist/cloudflare/core/enrichment/index.js +7 -0
- package/dist/cloudflare/core/enrichment/relationship-mapper.js +351 -0
- package/dist/cloudflare/core/enrichment/style-resolver.js +326 -0
- package/dist/cloudflare/core/figma-api.js +273 -0
- package/dist/cloudflare/core/figma-desktop-connector.js +383 -0
- package/dist/cloudflare/core/figma-style-extractor.js +311 -0
- package/dist/cloudflare/core/figma-tools.js +2299 -0
- package/dist/cloudflare/core/logger.js +53 -0
- package/dist/cloudflare/core/snippet-injector.js +96 -0
- package/dist/cloudflare/core/types/enriched.js +5 -0
- package/dist/cloudflare/core/types/index.js +4 -0
- package/dist/cloudflare/index.js +1059 -0
- package/dist/cloudflare/test-browser.js +88 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +141 -0
- package/dist/config.js.map +1 -0
- package/dist/core/config.d.ts +17 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +162 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/console-monitor.d.ts +81 -0
- package/dist/core/console-monitor.d.ts.map +1 -0
- package/dist/core/console-monitor.js +383 -0
- package/dist/core/console-monitor.js.map +1 -0
- package/dist/core/enrichment/enrichment-service.d.ts +52 -0
- package/dist/core/enrichment/enrichment-service.d.ts.map +1 -0
- package/dist/core/enrichment/enrichment-service.js +273 -0
- package/dist/core/enrichment/enrichment-service.js.map +1 -0
- package/dist/core/enrichment/index.d.ts +8 -0
- package/dist/core/enrichment/index.d.ts.map +1 -0
- package/dist/core/enrichment/index.js +8 -0
- package/dist/core/enrichment/index.js.map +1 -0
- package/dist/core/enrichment/relationship-mapper.d.ts +106 -0
- package/dist/core/enrichment/relationship-mapper.d.ts.map +1 -0
- package/dist/core/enrichment/relationship-mapper.js +352 -0
- package/dist/core/enrichment/relationship-mapper.js.map +1 -0
- package/dist/core/enrichment/style-resolver.d.ts +80 -0
- package/dist/core/enrichment/style-resolver.d.ts.map +1 -0
- package/dist/core/enrichment/style-resolver.js +327 -0
- package/dist/core/enrichment/style-resolver.js.map +1 -0
- package/dist/core/figma-api.d.ts +137 -0
- package/dist/core/figma-api.d.ts.map +1 -0
- package/dist/core/figma-api.js +274 -0
- package/dist/core/figma-api.js.map +1 -0
- package/dist/core/figma-desktop-connector.d.ts +52 -0
- package/dist/core/figma-desktop-connector.d.ts.map +1 -0
- package/dist/core/figma-desktop-connector.js +384 -0
- package/dist/core/figma-desktop-connector.js.map +1 -0
- package/dist/core/figma-style-extractor.d.ts +76 -0
- package/dist/core/figma-style-extractor.d.ts.map +1 -0
- package/dist/core/figma-style-extractor.js +312 -0
- package/dist/core/figma-style-extractor.js.map +1 -0
- package/dist/core/figma-tools.d.ts +15 -0
- package/dist/core/figma-tools.d.ts.map +1 -0
- package/dist/core/figma-tools.js +2300 -0
- package/dist/core/figma-tools.js.map +1 -0
- package/dist/core/logger.d.ts +22 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +54 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/snippet-injector.d.ts +24 -0
- package/dist/core/snippet-injector.d.ts.map +1 -0
- package/dist/core/snippet-injector.js +97 -0
- package/dist/core/snippet-injector.js.map +1 -0
- package/dist/core/types/enriched.d.ts +213 -0
- package/dist/core/types/enriched.d.ts.map +1 -0
- package/dist/core/types/enriched.js +6 -0
- package/dist/core/types/enriched.js.map +1 -0
- package/dist/core/types/index.d.ts +112 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +5 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/local.d.ts +57 -0
- package/dist/local.d.ts.map +1 -0
- package/dist/local.js +668 -0
- package/dist/local.js.map +1 -0
- package/dist/logger.d.ts +22 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +45 -0
- package/dist/logger.js.map +1 -0
- package/dist/server.d.ts +40 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +99 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/index.d.ts +15 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +184 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types/index.d.ts +102 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/figma-desktop-bridge/README.md +232 -0
- package/figma-desktop-bridge/code.js +133 -0
- package/figma-desktop-bridge/manifest.json +13 -0
- package/figma-desktop-bridge/ui.html +200 -0
- package/package.json +77 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test script to verify Browser Rendering API access
|
|
3
|
+
* Run with: npx wrangler dev and visit /test-browser
|
|
4
|
+
*/
|
|
5
|
+
import puppeteer from '@cloudflare/puppeteer';
|
|
6
|
+
export async function testBrowserRendering(env) {
|
|
7
|
+
const results = {
|
|
8
|
+
timestamp: new Date().toISOString(),
|
|
9
|
+
tests: [],
|
|
10
|
+
};
|
|
11
|
+
// Test 1: Check BROWSER binding exists
|
|
12
|
+
results.tests.push({
|
|
13
|
+
name: 'BROWSER binding exists',
|
|
14
|
+
passed: !!env.BROWSER,
|
|
15
|
+
details: env.BROWSER ? 'BROWSER binding found' : 'BROWSER binding missing',
|
|
16
|
+
});
|
|
17
|
+
if (!env.BROWSER) {
|
|
18
|
+
return {
|
|
19
|
+
...results,
|
|
20
|
+
overall: 'FAILED',
|
|
21
|
+
message: 'BROWSER binding not found. Check wrangler.jsonc configuration.',
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
// Test 2: Try to launch browser
|
|
25
|
+
try {
|
|
26
|
+
const browser = await puppeteer.launch(env.BROWSER, { keep_alive: 60000 });
|
|
27
|
+
results.tests.push({
|
|
28
|
+
name: 'Browser launch',
|
|
29
|
+
passed: true,
|
|
30
|
+
details: 'Successfully launched browser instance',
|
|
31
|
+
});
|
|
32
|
+
// Test 3: Try to create page
|
|
33
|
+
try {
|
|
34
|
+
const page = await browser.newPage();
|
|
35
|
+
results.tests.push({
|
|
36
|
+
name: 'Create browser page',
|
|
37
|
+
passed: true,
|
|
38
|
+
details: 'Successfully created new page',
|
|
39
|
+
});
|
|
40
|
+
// Test 4: Try to navigate
|
|
41
|
+
try {
|
|
42
|
+
await page.goto('https://example.com', { waitUntil: 'networkidle0' });
|
|
43
|
+
results.tests.push({
|
|
44
|
+
name: 'Navigate to URL',
|
|
45
|
+
passed: true,
|
|
46
|
+
details: 'Successfully navigated to example.com',
|
|
47
|
+
});
|
|
48
|
+
// Test 5: Get page title
|
|
49
|
+
const title = await page.title();
|
|
50
|
+
results.tests.push({
|
|
51
|
+
name: 'Read page content',
|
|
52
|
+
passed: true,
|
|
53
|
+
details: `Page title: "${title}"`,
|
|
54
|
+
});
|
|
55
|
+
await page.close();
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
results.tests.push({
|
|
59
|
+
name: 'Navigate to URL',
|
|
60
|
+
passed: false,
|
|
61
|
+
error: error instanceof Error ? error.message : String(error),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
results.tests.push({
|
|
67
|
+
name: 'Create browser page',
|
|
68
|
+
passed: false,
|
|
69
|
+
error: error instanceof Error ? error.message : String(error),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
await browser.close();
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
results.tests.push({
|
|
76
|
+
name: 'Browser launch',
|
|
77
|
+
passed: false,
|
|
78
|
+
error: error instanceof Error ? error.message : String(error),
|
|
79
|
+
hint: 'Browser Rendering API may not be enabled on your account',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
const allPassed = results.tests.every((test) => test.passed);
|
|
83
|
+
return {
|
|
84
|
+
...results,
|
|
85
|
+
overall: allPassed ? 'PASSED' : 'FAILED',
|
|
86
|
+
summary: `${results.tests.filter((t) => t.passed).length}/${results.tests.length} tests passed`,
|
|
87
|
+
};
|
|
88
|
+
}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration management for Figma Console MCP server
|
|
3
|
+
*/
|
|
4
|
+
import type { ServerConfig } from './types/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Load configuration from file or use defaults
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadConfig(): ServerConfig;
|
|
9
|
+
/**
|
|
10
|
+
* Validate configuration
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateConfig(config: ServerConfig): void;
|
|
13
|
+
/**
|
|
14
|
+
* Get configuration with validation
|
|
15
|
+
*/
|
|
16
|
+
export declare function getConfig(): ServerConfig;
|
|
17
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA6CrD;;GAEG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAqBzC;AA0BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAkCzD;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,YAAY,CAIxC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration management for Figma Console MCP server
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadConfig = loadConfig;
|
|
7
|
+
exports.validateConfig = validateConfig;
|
|
8
|
+
exports.getConfig = getConfig;
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const os_1 = require("os");
|
|
11
|
+
const path_1 = require("path");
|
|
12
|
+
/**
|
|
13
|
+
* Default configuration values
|
|
14
|
+
*/
|
|
15
|
+
const DEFAULT_CONFIG = {
|
|
16
|
+
browser: {
|
|
17
|
+
headless: false,
|
|
18
|
+
args: [
|
|
19
|
+
'--disable-blink-features=AutomationControlled',
|
|
20
|
+
'--disable-dev-shm-usage',
|
|
21
|
+
'--no-sandbox', // Note: Only use in trusted environments
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
console: {
|
|
25
|
+
bufferSize: 1000,
|
|
26
|
+
filterLevels: ['log', 'info', 'warn', 'error', 'debug'],
|
|
27
|
+
truncation: {
|
|
28
|
+
maxStringLength: 500,
|
|
29
|
+
maxArrayLength: 10,
|
|
30
|
+
maxObjectDepth: 3,
|
|
31
|
+
removeDuplicates: true,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
screenshots: {
|
|
35
|
+
defaultFormat: 'png',
|
|
36
|
+
quality: 90,
|
|
37
|
+
storePath: (0, path_1.join)(process.env.TMPDIR || '/tmp', 'figma-console-mcp', 'screenshots'),
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Possible config file locations (checked in order)
|
|
42
|
+
*/
|
|
43
|
+
const CONFIG_PATHS = [
|
|
44
|
+
// Environment variable override
|
|
45
|
+
process.env.FIGMA_CONSOLE_CONFIG,
|
|
46
|
+
// Project-local config
|
|
47
|
+
(0, path_1.join)(process.cwd(), '.figma-console-mcp.json'),
|
|
48
|
+
(0, path_1.join)(process.cwd(), 'figma-console-mcp.json'),
|
|
49
|
+
// User home config
|
|
50
|
+
(0, path_1.join)((0, os_1.homedir)(), '.config', 'figma-console-mcp', 'config.json'),
|
|
51
|
+
(0, path_1.join)((0, os_1.homedir)(), '.figma-console-mcp.json'),
|
|
52
|
+
].filter((path) => path !== undefined);
|
|
53
|
+
/**
|
|
54
|
+
* Load configuration from file or use defaults
|
|
55
|
+
*/
|
|
56
|
+
function loadConfig() {
|
|
57
|
+
// Try to load from config file
|
|
58
|
+
for (const configPath of CONFIG_PATHS) {
|
|
59
|
+
if ((0, fs_1.existsSync)(configPath)) {
|
|
60
|
+
try {
|
|
61
|
+
const fileContent = (0, fs_1.readFileSync)(configPath, 'utf-8');
|
|
62
|
+
const userConfig = JSON.parse(fileContent);
|
|
63
|
+
// Deep merge with defaults
|
|
64
|
+
const config = mergeConfig(DEFAULT_CONFIG, userConfig);
|
|
65
|
+
return config;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error(`Failed to load config from ${configPath}:`, error);
|
|
69
|
+
// Continue to next config path
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// No config file found, use defaults
|
|
74
|
+
return DEFAULT_CONFIG;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Deep merge two configuration objects
|
|
78
|
+
*/
|
|
79
|
+
function mergeConfig(defaults, overrides) {
|
|
80
|
+
return {
|
|
81
|
+
browser: {
|
|
82
|
+
...defaults.browser,
|
|
83
|
+
...(overrides.browser || {}),
|
|
84
|
+
},
|
|
85
|
+
console: {
|
|
86
|
+
...defaults.console,
|
|
87
|
+
...(overrides.console || {}),
|
|
88
|
+
truncation: {
|
|
89
|
+
...defaults.console.truncation,
|
|
90
|
+
...(overrides.console?.truncation || {}),
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
screenshots: {
|
|
94
|
+
...defaults.screenshots,
|
|
95
|
+
...(overrides.screenshots || {}),
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Validate configuration
|
|
101
|
+
*/
|
|
102
|
+
function validateConfig(config) {
|
|
103
|
+
// Validate browser config
|
|
104
|
+
if (!Array.isArray(config.browser.args)) {
|
|
105
|
+
throw new Error('browser.args must be an array');
|
|
106
|
+
}
|
|
107
|
+
// Validate console config
|
|
108
|
+
if (config.console.bufferSize <= 0) {
|
|
109
|
+
throw new Error('console.bufferSize must be positive');
|
|
110
|
+
}
|
|
111
|
+
if (!Array.isArray(config.console.filterLevels)) {
|
|
112
|
+
throw new Error('console.filterLevels must be an array');
|
|
113
|
+
}
|
|
114
|
+
// Validate truncation config
|
|
115
|
+
const { truncation } = config.console;
|
|
116
|
+
if (truncation.maxStringLength <= 0) {
|
|
117
|
+
throw new Error('console.truncation.maxStringLength must be positive');
|
|
118
|
+
}
|
|
119
|
+
if (truncation.maxArrayLength <= 0) {
|
|
120
|
+
throw new Error('console.truncation.maxArrayLength must be positive');
|
|
121
|
+
}
|
|
122
|
+
if (truncation.maxObjectDepth <= 0) {
|
|
123
|
+
throw new Error('console.truncation.maxObjectDepth must be positive');
|
|
124
|
+
}
|
|
125
|
+
// Validate screenshot config
|
|
126
|
+
if (!['png', 'jpeg'].includes(config.screenshots.defaultFormat)) {
|
|
127
|
+
throw new Error('screenshots.defaultFormat must be "png" or "jpeg"');
|
|
128
|
+
}
|
|
129
|
+
if (config.screenshots.quality < 0 || config.screenshots.quality > 100) {
|
|
130
|
+
throw new Error('screenshots.quality must be between 0 and 100');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get configuration with validation
|
|
135
|
+
*/
|
|
136
|
+
function getConfig() {
|
|
137
|
+
const config = loadConfig();
|
|
138
|
+
validateConfig(config);
|
|
139
|
+
return config;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration management for Figma Console MCP server
|
|
3
|
+
*/
|
|
4
|
+
import type { ServerConfig } from './types/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Load configuration from file or use defaults
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadConfig(): ServerConfig;
|
|
9
|
+
/**
|
|
10
|
+
* Validate configuration
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateConfig(config: ServerConfig): void;
|
|
13
|
+
/**
|
|
14
|
+
* Get configuration with validation
|
|
15
|
+
*/
|
|
16
|
+
export declare function getConfig(): ServerConfig;
|
|
17
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAqErD;;GAEG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAqBzC;AA+BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAkCzD;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,YAAY,CAIxC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration management for Figma Console MCP server
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync, existsSync } from 'fs';
|
|
5
|
+
import { homedir } from 'os';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
/**
|
|
8
|
+
* Auto-detect server mode based on environment
|
|
9
|
+
*/
|
|
10
|
+
function detectMode() {
|
|
11
|
+
// If running in Workers environment, return cloudflare
|
|
12
|
+
if (typeof globalThis !== 'undefined' && 'caches' in globalThis) {
|
|
13
|
+
return 'cloudflare';
|
|
14
|
+
}
|
|
15
|
+
// Explicit env var override
|
|
16
|
+
const modeEnv = process.env.FIGMA_MCP_MODE?.toLowerCase();
|
|
17
|
+
if (modeEnv === 'local' || modeEnv === 'cloudflare') {
|
|
18
|
+
return modeEnv;
|
|
19
|
+
}
|
|
20
|
+
// Default to local for Node.js environments
|
|
21
|
+
return 'local';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Default configuration values
|
|
25
|
+
*/
|
|
26
|
+
const DEFAULT_CONFIG = {
|
|
27
|
+
mode: detectMode(),
|
|
28
|
+
browser: {
|
|
29
|
+
headless: false,
|
|
30
|
+
args: [
|
|
31
|
+
'--disable-blink-features=AutomationControlled',
|
|
32
|
+
'--disable-dev-shm-usage',
|
|
33
|
+
'--no-sandbox', // Note: Only use in trusted environments
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
console: {
|
|
37
|
+
bufferSize: 1000,
|
|
38
|
+
filterLevels: ['log', 'info', 'warn', 'error', 'debug'],
|
|
39
|
+
truncation: {
|
|
40
|
+
maxStringLength: 500,
|
|
41
|
+
maxArrayLength: 10,
|
|
42
|
+
maxObjectDepth: 3,
|
|
43
|
+
removeDuplicates: true,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
screenshots: {
|
|
47
|
+
defaultFormat: 'png',
|
|
48
|
+
quality: 90,
|
|
49
|
+
storePath: join(process.env.TMPDIR || '/tmp', 'figma-console-mcp', 'screenshots'),
|
|
50
|
+
},
|
|
51
|
+
local: {
|
|
52
|
+
debugHost: process.env.FIGMA_DEBUG_HOST || 'localhost',
|
|
53
|
+
debugPort: parseInt(process.env.FIGMA_DEBUG_PORT || '9222', 10),
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Possible config file locations (checked in order)
|
|
58
|
+
*/
|
|
59
|
+
const CONFIG_PATHS = [
|
|
60
|
+
// Environment variable override
|
|
61
|
+
process.env.FIGMA_CONSOLE_CONFIG,
|
|
62
|
+
// Project-local config
|
|
63
|
+
join(process.cwd(), '.figma-console-mcp.json'),
|
|
64
|
+
join(process.cwd(), 'figma-console-mcp.json'),
|
|
65
|
+
// User home config
|
|
66
|
+
join(homedir(), '.config', 'figma-console-mcp', 'config.json'),
|
|
67
|
+
join(homedir(), '.figma-console-mcp.json'),
|
|
68
|
+
].filter((path) => path !== undefined);
|
|
69
|
+
/**
|
|
70
|
+
* Load configuration from file or use defaults
|
|
71
|
+
*/
|
|
72
|
+
export function loadConfig() {
|
|
73
|
+
// Try to load from config file
|
|
74
|
+
for (const configPath of CONFIG_PATHS) {
|
|
75
|
+
if (existsSync(configPath)) {
|
|
76
|
+
try {
|
|
77
|
+
const fileContent = readFileSync(configPath, 'utf-8');
|
|
78
|
+
const userConfig = JSON.parse(fileContent);
|
|
79
|
+
// Deep merge with defaults
|
|
80
|
+
const config = mergeConfig(DEFAULT_CONFIG, userConfig);
|
|
81
|
+
return config;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error(`Failed to load config from ${configPath}:`, error);
|
|
85
|
+
// Continue to next config path
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// No config file found, use defaults
|
|
90
|
+
return DEFAULT_CONFIG;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Deep merge two configuration objects
|
|
94
|
+
*/
|
|
95
|
+
function mergeConfig(defaults, overrides) {
|
|
96
|
+
return {
|
|
97
|
+
mode: overrides.mode || defaults.mode,
|
|
98
|
+
browser: {
|
|
99
|
+
...defaults.browser,
|
|
100
|
+
...(overrides.browser || {}),
|
|
101
|
+
},
|
|
102
|
+
console: {
|
|
103
|
+
...defaults.console,
|
|
104
|
+
...(overrides.console || {}),
|
|
105
|
+
truncation: {
|
|
106
|
+
...defaults.console.truncation,
|
|
107
|
+
...(overrides.console?.truncation || {}),
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
screenshots: {
|
|
111
|
+
...defaults.screenshots,
|
|
112
|
+
...(overrides.screenshots || {}),
|
|
113
|
+
},
|
|
114
|
+
local: {
|
|
115
|
+
...defaults.local,
|
|
116
|
+
...(overrides.local || {}),
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Validate configuration
|
|
122
|
+
*/
|
|
123
|
+
export function validateConfig(config) {
|
|
124
|
+
// Validate browser config
|
|
125
|
+
if (!Array.isArray(config.browser.args)) {
|
|
126
|
+
throw new Error('browser.args must be an array');
|
|
127
|
+
}
|
|
128
|
+
// Validate console config
|
|
129
|
+
if (config.console.bufferSize <= 0) {
|
|
130
|
+
throw new Error('console.bufferSize must be positive');
|
|
131
|
+
}
|
|
132
|
+
if (!Array.isArray(config.console.filterLevels)) {
|
|
133
|
+
throw new Error('console.filterLevels must be an array');
|
|
134
|
+
}
|
|
135
|
+
// Validate truncation config
|
|
136
|
+
const { truncation } = config.console;
|
|
137
|
+
if (truncation.maxStringLength <= 0) {
|
|
138
|
+
throw new Error('console.truncation.maxStringLength must be positive');
|
|
139
|
+
}
|
|
140
|
+
if (truncation.maxArrayLength <= 0) {
|
|
141
|
+
throw new Error('console.truncation.maxArrayLength must be positive');
|
|
142
|
+
}
|
|
143
|
+
if (truncation.maxObjectDepth <= 0) {
|
|
144
|
+
throw new Error('console.truncation.maxObjectDepth must be positive');
|
|
145
|
+
}
|
|
146
|
+
// Validate screenshot config
|
|
147
|
+
if (!['png', 'jpeg'].includes(config.screenshots.defaultFormat)) {
|
|
148
|
+
throw new Error('screenshots.defaultFormat must be "png" or "jpeg"');
|
|
149
|
+
}
|
|
150
|
+
if (config.screenshots.quality < 0 || config.screenshots.quality > 100) {
|
|
151
|
+
throw new Error('screenshots.quality must be between 0 and 100');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Get configuration with validation
|
|
156
|
+
*/
|
|
157
|
+
export function getConfig() {
|
|
158
|
+
const config = loadConfig();
|
|
159
|
+
validateConfig(config);
|
|
160
|
+
return config;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Console Monitor
|
|
3
|
+
* Captures and manages console logs from Figma plugins via Chrome DevTools Protocol
|
|
4
|
+
* Monitors both main page console AND Web Worker consoles (where Figma plugins run)
|
|
5
|
+
*/
|
|
6
|
+
import type { ConsoleLogEntry, ConsoleConfig } from './types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Console Monitor
|
|
9
|
+
* Listens to page console events and maintains a circular buffer of logs
|
|
10
|
+
* Also monitors Web Workers to capture Figma plugin console logs
|
|
11
|
+
*/
|
|
12
|
+
export declare class ConsoleMonitor {
|
|
13
|
+
private logs;
|
|
14
|
+
private config;
|
|
15
|
+
private isMonitoring;
|
|
16
|
+
private page;
|
|
17
|
+
private workers;
|
|
18
|
+
constructor(config: ConsoleConfig);
|
|
19
|
+
/**
|
|
20
|
+
* Start monitoring console logs on a page
|
|
21
|
+
* Accepts any puppeteer Page type (puppeteer-core or @cloudflare/puppeteer)
|
|
22
|
+
*/
|
|
23
|
+
startMonitoring(page: any): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Attach console listeners to a Web Worker
|
|
26
|
+
* This captures Figma plugin console logs
|
|
27
|
+
*/
|
|
28
|
+
private attachWorkerListeners;
|
|
29
|
+
/**
|
|
30
|
+
* Process console message from Puppeteer
|
|
31
|
+
* @param msg - Console message from page or worker
|
|
32
|
+
* @param context - Where the message came from ('page' or 'worker')
|
|
33
|
+
* @param workerUrl - URL of the worker (if context is 'worker')
|
|
34
|
+
*/
|
|
35
|
+
private processConsoleMessage;
|
|
36
|
+
/**
|
|
37
|
+
* Determine if log is from plugin or Figma based on URL
|
|
38
|
+
*/
|
|
39
|
+
private determineSource;
|
|
40
|
+
/**
|
|
41
|
+
* Add log to circular buffer
|
|
42
|
+
*/
|
|
43
|
+
private addLog;
|
|
44
|
+
/**
|
|
45
|
+
* Truncate string to max length
|
|
46
|
+
*/
|
|
47
|
+
private truncateString;
|
|
48
|
+
/**
|
|
49
|
+
* Truncate value (string, array, object) intelligently
|
|
50
|
+
* Based on AgentDesk pattern to prevent context overflow
|
|
51
|
+
*/
|
|
52
|
+
private truncateValue;
|
|
53
|
+
/**
|
|
54
|
+
* Get logs with optional filtering
|
|
55
|
+
*/
|
|
56
|
+
getLogs(options?: {
|
|
57
|
+
count?: number;
|
|
58
|
+
level?: ConsoleLogEntry['level'] | 'all';
|
|
59
|
+
since?: number;
|
|
60
|
+
}): ConsoleLogEntry[];
|
|
61
|
+
/**
|
|
62
|
+
* Clear log buffer
|
|
63
|
+
*/
|
|
64
|
+
clear(): number;
|
|
65
|
+
/**
|
|
66
|
+
* Stop monitoring
|
|
67
|
+
*/
|
|
68
|
+
stopMonitoring(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Get monitoring status
|
|
71
|
+
*/
|
|
72
|
+
getStatus(): {
|
|
73
|
+
isMonitoring: boolean;
|
|
74
|
+
logCount: number;
|
|
75
|
+
bufferSize: number;
|
|
76
|
+
workerCount: number;
|
|
77
|
+
oldestTimestamp: number;
|
|
78
|
+
newestTimestamp: number;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=console-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-monitor.d.ts","sourceRoot":"","sources":["../../src/core/console-monitor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAQvE;;;;GAIG;AACH,qBAAa,cAAc;IAC1B,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,OAAO,CAA6B;gBAEhC,MAAM,EAAE,aAAa;IAIjC;;;OAGG;IACG,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA4I/C;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAgC7B;;;;;OAKG;YACW,qBAAqB;IAqEnC;;OAEG;IACH,OAAO,CAAC,eAAe;IA4BvB;;OAEG;IACH,OAAO,CAAC,MAAM;IAWd;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAqDrB;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACzC,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,eAAe,EAAE;IAqBrB;;OAEG;IACH,KAAK,IAAI,MAAM;IAOf;;OAEG;IACH,cAAc,IAAI,IAAI;IAWtB;;OAEG;IACH,SAAS;;;;;;;;CAUT"}
|