@majkapp/plugin-kit 1.3.6 → 1.3.8
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/dist/mcp-dom-agent.js +60 -0
- package/dist/plugin-kit.d.ts.map +1 -1
- package/dist/plugin-kit.js +71 -6
- package/package.json +1 -1
package/dist/mcp-dom-agent.js
CHANGED
|
@@ -74,17 +74,34 @@
|
|
|
74
74
|
|
|
75
75
|
async function captureScreenshot(options = {}) {
|
|
76
76
|
try {
|
|
77
|
+
// Debug: Check if html2canvas is available
|
|
78
|
+
console.log('[MCP DOM Agent] Screenshot capture started');
|
|
79
|
+
console.log('[MCP DOM Agent] html2canvas available:', typeof html2canvas !== 'undefined');
|
|
80
|
+
console.log('[MCP DOM Agent] window.html2canvas:', window.html2canvas);
|
|
81
|
+
|
|
77
82
|
// Use html2canvas if available, otherwise use basic canvas approach
|
|
78
83
|
if (typeof html2canvas !== 'undefined') {
|
|
84
|
+
console.log('[MCP DOM Agent] Using html2canvas for real screenshot');
|
|
79
85
|
const canvas = await html2canvas(document.body, {
|
|
80
86
|
allowTaint: true,
|
|
81
87
|
useCORS: true,
|
|
82
88
|
logging: false,
|
|
83
89
|
...options
|
|
84
90
|
});
|
|
91
|
+
console.log('[MCP DOM Agent] html2canvas capture successful');
|
|
85
92
|
return canvas.toDataURL('image/png');
|
|
86
93
|
} else {
|
|
87
94
|
// Fallback: Use basic canvas API to capture visible viewport
|
|
95
|
+
console.warn('[MCP DOM Agent] html2canvas not available, using fallback');
|
|
96
|
+
console.log('[MCP DOM Agent] Checking document scripts:');
|
|
97
|
+
const scripts = document.querySelectorAll('script');
|
|
98
|
+
scripts.forEach((script, idx) => {
|
|
99
|
+
console.log(` Script ${idx}:`, {
|
|
100
|
+
src: script.src || 'inline',
|
|
101
|
+
hasContent: script.textContent?.length || 0,
|
|
102
|
+
contains_html2canvas: script.textContent?.includes('html2canvas') || false
|
|
103
|
+
});
|
|
104
|
+
});
|
|
88
105
|
return captureViewportScreenshot(options);
|
|
89
106
|
}
|
|
90
107
|
} catch (error) {
|
|
@@ -259,6 +276,22 @@
|
|
|
259
276
|
// Listen for file picker results from parent window
|
|
260
277
|
window.addEventListener('message', function (ev) {
|
|
261
278
|
const msg = ev.data;
|
|
279
|
+
|
|
280
|
+
// Log ALL incoming messages for debugging
|
|
281
|
+
if (msg && msg.type && msg.type.startsWith('majk:file-picker:')) {
|
|
282
|
+
console.log('[MCP DOM Agent] Received postMessage:', {
|
|
283
|
+
type: msg.type,
|
|
284
|
+
requestId: msg.requestId,
|
|
285
|
+
success: msg.success,
|
|
286
|
+
hasResult: !!msg.result,
|
|
287
|
+
hasResults: !!msg.results,
|
|
288
|
+
hasError: !!msg.error,
|
|
289
|
+
errorName: msg.error?.name,
|
|
290
|
+
errorMessage: msg.error?.message,
|
|
291
|
+
fullMessage: msg
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
|
|
262
295
|
if (!msg) return;
|
|
263
296
|
|
|
264
297
|
// Handle directory picker result
|
|
@@ -267,10 +300,23 @@
|
|
|
267
300
|
if (pending) {
|
|
268
301
|
pendingFilePickerRequests.delete(msg.requestId);
|
|
269
302
|
if (msg.success) {
|
|
303
|
+
console.log('[MCP DOM Agent] Directory picker SUCCESS - resolving promise', {
|
|
304
|
+
requestId: msg.requestId,
|
|
305
|
+
result: msg.result
|
|
306
|
+
});
|
|
270
307
|
pending.resolve(msg.result);
|
|
271
308
|
} else {
|
|
309
|
+
console.log('[MCP DOM Agent] Directory picker FAILED - rejecting promise', {
|
|
310
|
+
requestId: msg.requestId,
|
|
311
|
+
error: msg.error
|
|
312
|
+
});
|
|
272
313
|
pending.reject(new Error(msg.error?.message || 'Directory picker failed'));
|
|
273
314
|
}
|
|
315
|
+
} else {
|
|
316
|
+
console.warn('[MCP DOM Agent] Received directory picker result but no pending request found', {
|
|
317
|
+
requestId: msg.requestId,
|
|
318
|
+
pendingRequestIds: Array.from(pendingFilePickerRequests.keys())
|
|
319
|
+
});
|
|
274
320
|
}
|
|
275
321
|
}
|
|
276
322
|
|
|
@@ -305,6 +351,12 @@
|
|
|
305
351
|
async function showDirectoryPickerBridge(options) {
|
|
306
352
|
const requestId = 'file-picker-' + (filePickerRequestId++);
|
|
307
353
|
|
|
354
|
+
console.log('[MCP DOM Agent] Sending directory picker request:', {
|
|
355
|
+
requestId,
|
|
356
|
+
options,
|
|
357
|
+
pendingRequests: pendingFilePickerRequests.size
|
|
358
|
+
});
|
|
359
|
+
|
|
308
360
|
return new Promise((resolve, reject) => {
|
|
309
361
|
pendingFilePickerRequests.set(requestId, { resolve, reject });
|
|
310
362
|
|
|
@@ -401,4 +453,12 @@
|
|
|
401
453
|
}
|
|
402
454
|
|
|
403
455
|
console.log('[MCP DOM Agent] Initialized v1.1.0 with File Picker Bridge');
|
|
456
|
+
console.log('[MCP DOM Agent] Initialized v1.0.0');
|
|
457
|
+
console.log('[MCP DOM Agent] html2canvas detected:', typeof html2canvas !== 'undefined');
|
|
458
|
+
console.log('[MCP DOM Agent] Screenshot support:', typeof html2canvas !== 'undefined' ? 'FULL' : 'FALLBACK');
|
|
459
|
+
|
|
460
|
+
// Debug: Log all inline scripts to help debug injection
|
|
461
|
+
const inlineScripts = Array.from(document.querySelectorAll('script:not([src])')).length;
|
|
462
|
+
const externalScripts = Array.from(document.querySelectorAll('script[src]')).length;
|
|
463
|
+
console.log('[MCP DOM Agent] Scripts in document:', { inline: inlineScripts, external: externalScripts });
|
|
404
464
|
})();
|
package/dist/plugin-kit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-kit.d.ts","sourceRoot":"","sources":["../src/plugin-kit.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,aAAa,EAGb,eAAe,EACf,QAAQ,EACR,WAAW,EACX,WAAW,EACX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,WAAW,EACX,KAAK,EACL,UAAU,EACV,SAAS,EACT,aAAa,EAIb,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,iBAAiB,EAGjB,sBAAsB,EACvB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin-kit.d.ts","sourceRoot":"","sources":["../src/plugin-kit.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin-kit.js
CHANGED
|
@@ -398,17 +398,59 @@ function serveSpa(ui, req, res, ctx) {
|
|
|
398
398
|
`window.__MAJK_IFRAME_BASE__=${JSON.stringify(ui.base)};` +
|
|
399
399
|
`window.__MAJK_PLUGIN_ID__=${JSON.stringify(ctx.pluginId)};` +
|
|
400
400
|
`</script>`;
|
|
401
|
+
// Inject html2canvas library (inline from node_modules)
|
|
402
|
+
const html2canvasScript = BuiltPlugin.html2canvasScript
|
|
403
|
+
? `<script>${BuiltPlugin.html2canvasScript}</script>`
|
|
404
|
+
: '';
|
|
401
405
|
// Inject MCP DOM Agent script
|
|
402
406
|
const mcpScript = BuiltPlugin.mcpDomAgentScript
|
|
403
407
|
? `<script>${BuiltPlugin.mcpDomAgentScript}</script>`
|
|
404
408
|
: '';
|
|
405
|
-
|
|
409
|
+
// Debug logging
|
|
410
|
+
if (html2canvasScript) {
|
|
411
|
+
ctx.logger.debug(`[React SPA] Injecting html2canvas (${(BuiltPlugin.html2canvasScript?.length || 0) / 1024} KB)`);
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
ctx.logger.warn('[React SPA] html2canvas NOT injected - script not loaded');
|
|
415
|
+
}
|
|
416
|
+
if (mcpScript) {
|
|
417
|
+
ctx.logger.debug('[React SPA] Injecting MCP DOM Agent');
|
|
418
|
+
}
|
|
419
|
+
const allInjections = configInject + html2canvasScript + mcpScript;
|
|
406
420
|
const injected = html.replace('</head>', `${allInjections}</head>`);
|
|
407
421
|
content = Buffer.from(injected, 'utf-8');
|
|
408
422
|
}
|
|
409
423
|
res.writeHead(200, corsHeaders({ 'Content-Type': getContentType(targetFile) }));
|
|
410
424
|
res.end(content);
|
|
411
425
|
}
|
|
426
|
+
/**
|
|
427
|
+
* Load html2canvas library from node_modules
|
|
428
|
+
*/
|
|
429
|
+
function loadHtml2CanvasScript() {
|
|
430
|
+
try {
|
|
431
|
+
// Try multiple possible paths for html2canvas
|
|
432
|
+
const possiblePaths = [
|
|
433
|
+
// When running from dist/ (after build)
|
|
434
|
+
path_1.default.join(__dirname, '..', 'node_modules', 'html2canvas', 'dist', 'html2canvas.min.js'),
|
|
435
|
+
// When running from src/ (development)
|
|
436
|
+
path_1.default.join(__dirname, '..', '..', 'node_modules', 'html2canvas', 'dist', 'html2canvas.min.js'),
|
|
437
|
+
// When installed as a dependency in user's project
|
|
438
|
+
path_1.default.join(__dirname, '..', '..', '..', 'html2canvas', 'dist', 'html2canvas.min.js'),
|
|
439
|
+
];
|
|
440
|
+
for (const scriptPath of possiblePaths) {
|
|
441
|
+
if (fs_1.default.existsSync(scriptPath)) {
|
|
442
|
+
log(`[html2canvas] Loaded from: ${scriptPath}`);
|
|
443
|
+
return fs_1.default.readFileSync(scriptPath, 'utf-8');
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
log('[html2canvas] Script file not found in any expected location');
|
|
447
|
+
return '';
|
|
448
|
+
}
|
|
449
|
+
catch (error) {
|
|
450
|
+
log(`[html2canvas] Failed to load script: ${error.message}`);
|
|
451
|
+
return '';
|
|
452
|
+
}
|
|
453
|
+
}
|
|
412
454
|
/**
|
|
413
455
|
* Load MCP DOM Agent script
|
|
414
456
|
*/
|
|
@@ -584,7 +626,17 @@ class BuiltPlugin {
|
|
|
584
626
|
context.logger.info(`🌐 HTTP Port: ${context.http.port}`);
|
|
585
627
|
context.logger.info(`🔗 Base URL: ${context.http.baseUrl}`);
|
|
586
628
|
context.logger.info('═══════════════════════════════════════════════════════');
|
|
587
|
-
// Load MCP DOM Agent
|
|
629
|
+
// Load html2canvas and MCP DOM Agent scripts once for all plugins
|
|
630
|
+
if (!BuiltPlugin.html2canvasScript) {
|
|
631
|
+
BuiltPlugin.html2canvasScript = loadHtml2CanvasScript();
|
|
632
|
+
if (BuiltPlugin.html2canvasScript) {
|
|
633
|
+
const sizeKB = (BuiltPlugin.html2canvasScript.length / 1024).toFixed(2);
|
|
634
|
+
context.logger.info(`✅ html2canvas library loaded (${sizeKB} KB) - screenshot support enabled`);
|
|
635
|
+
}
|
|
636
|
+
else {
|
|
637
|
+
context.logger.warn('⚠️ html2canvas not found - screenshots will use fallback mode');
|
|
638
|
+
}
|
|
639
|
+
}
|
|
588
640
|
if (!BuiltPlugin.mcpDomAgentScript) {
|
|
589
641
|
BuiltPlugin.mcpDomAgentScript = loadMcpDomAgentScript();
|
|
590
642
|
if (BuiltPlugin.mcpDomAgentScript) {
|
|
@@ -949,18 +1001,30 @@ class BuiltPlugin {
|
|
|
949
1001
|
return;
|
|
950
1002
|
}
|
|
951
1003
|
}
|
|
952
|
-
// Inject MCP DOM Agent script into HTML screens
|
|
1004
|
+
// Inject html2canvas and MCP DOM Agent script into HTML screens
|
|
953
1005
|
if (BuiltPlugin.mcpDomAgentScript) {
|
|
1006
|
+
const html2canvasScript = BuiltPlugin.html2canvasScript
|
|
1007
|
+
? `<script>${BuiltPlugin.html2canvasScript}</script>`
|
|
1008
|
+
: '';
|
|
954
1009
|
const mcpScript = `<script>${BuiltPlugin.mcpDomAgentScript}</script>`;
|
|
1010
|
+
const allScripts = html2canvasScript + mcpScript;
|
|
1011
|
+
// Debug logging
|
|
1012
|
+
if (html2canvasScript) {
|
|
1013
|
+
this.context.logger.debug(`[HTML Screen] Injecting html2canvas (${(BuiltPlugin.html2canvasScript?.length || 0) / 1024} KB)`);
|
|
1014
|
+
}
|
|
1015
|
+
else {
|
|
1016
|
+
this.context.logger.warn('[HTML Screen] html2canvas NOT injected - script not loaded');
|
|
1017
|
+
}
|
|
1018
|
+
this.context.logger.debug('[HTML Screen] Injecting MCP DOM Agent');
|
|
955
1019
|
// Try to inject before </body>, fallback to </head>, fallback to end of HTML
|
|
956
1020
|
if (htmlContent.includes('</body>')) {
|
|
957
|
-
htmlContent = htmlContent.replace('</body>', `${
|
|
1021
|
+
htmlContent = htmlContent.replace('</body>', `${allScripts}</body>`);
|
|
958
1022
|
}
|
|
959
1023
|
else if (htmlContent.includes('</head>')) {
|
|
960
|
-
htmlContent = htmlContent.replace('</head>', `${
|
|
1024
|
+
htmlContent = htmlContent.replace('</head>', `${allScripts}</head>`);
|
|
961
1025
|
}
|
|
962
1026
|
else {
|
|
963
|
-
htmlContent +=
|
|
1027
|
+
htmlContent += allScripts;
|
|
964
1028
|
}
|
|
965
1029
|
}
|
|
966
1030
|
res.end(htmlContent);
|
|
@@ -1114,6 +1178,7 @@ class BuiltPlugin {
|
|
|
1114
1178
|
}
|
|
1115
1179
|
// MCP DOM Agent script (loaded once at startup, accessible to serveSpa function)
|
|
1116
1180
|
BuiltPlugin.mcpDomAgentScript = null;
|
|
1181
|
+
BuiltPlugin.html2canvasScript = null;
|
|
1117
1182
|
/**
|
|
1118
1183
|
* Group tools by scope
|
|
1119
1184
|
*/
|