@xiaou66/vite-plugin-vue-mcp-next 1.3.5 → 1.3.7
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/README.md +1 -1
- package/dist/index.cjs +36 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +36 -24
- package/dist/index.js.map +1 -1
- package/dist/runtime/client.cjs +220 -15
- package/dist/runtime/client.cjs.map +1 -1
- package/dist/runtime/client.d.cts +1 -1
- package/dist/runtime/client.d.ts +1 -1
- package/dist/runtime/client.js +220 -15
- package/dist/runtime/client.js.map +1 -1
- package/dist/{types-BKXdHkwk.d.cts → types-DA9dLKJ8.d.cts} +46 -1
- package/dist/{types-BKXdHkwk.d.ts → types-DA9dLKJ8.d.ts} +46 -1
- package/package.json +1 -1
- package/skills/vite-mcp-next/SKILL.md +2 -2
package/dist/runtime/client.cjs
CHANGED
|
@@ -139,7 +139,7 @@ var DEFAULT_OPTIONS = {
|
|
|
139
139
|
};
|
|
140
140
|
|
|
141
141
|
// src/runtime/consoleHook.ts
|
|
142
|
-
var
|
|
142
|
+
var import_nanoid2 = require("nanoid");
|
|
143
143
|
|
|
144
144
|
// src/shared/serialization.ts
|
|
145
145
|
var DEFAULT_PREVIEW_OPTIONS = {
|
|
@@ -303,7 +303,56 @@ function elementLabel(value) {
|
|
|
303
303
|
return `[Element:${name}${id}${className}]`;
|
|
304
304
|
}
|
|
305
305
|
|
|
306
|
+
// src/runtime/consoleArgRegistry.ts
|
|
307
|
+
var import_nanoid = require("nanoid");
|
|
308
|
+
var CONSOLE_ARG_ID_PREFIX = "console-arg-";
|
|
309
|
+
var MAX_CONSOLE_ARG_REFERENCES = 200;
|
|
310
|
+
var consoleArgReferences = /* @__PURE__ */ new Map();
|
|
311
|
+
function registerConsoleArg(value) {
|
|
312
|
+
const argId = `${CONSOLE_ARG_ID_PREFIX}${(0, import_nanoid.nanoid)()}`;
|
|
313
|
+
const kind = Array.isArray(value) ? "array" : "object";
|
|
314
|
+
const label = `[${kind === "array" ? "Array" : "Object"}:${argId}]`;
|
|
315
|
+
consoleArgReferences.set(argId, value);
|
|
316
|
+
trimConsoleArgReferences();
|
|
317
|
+
return { type: "object", kind, argId, label };
|
|
318
|
+
}
|
|
319
|
+
function inspectConsoleArg(request) {
|
|
320
|
+
if (!consoleArgReferences.has(request.argId)) {
|
|
321
|
+
return {
|
|
322
|
+
ok: false,
|
|
323
|
+
argId: request.argId,
|
|
324
|
+
error: "Console object reference not found or expired"
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
return {
|
|
328
|
+
ok: true,
|
|
329
|
+
argId: request.argId,
|
|
330
|
+
preview: createBoundedPreview(consoleArgReferences.get(request.argId), {
|
|
331
|
+
maxDepth: request.maxDepth,
|
|
332
|
+
maxKeys: request.maxKeys,
|
|
333
|
+
maxArrayItems: request.maxArrayItems,
|
|
334
|
+
maxStringLength: request.maxStringLength,
|
|
335
|
+
maxTotalNodes: request.maxTotalNodes
|
|
336
|
+
})
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
function trimConsoleArgReferences() {
|
|
340
|
+
while (consoleArgReferences.size > MAX_CONSOLE_ARG_REFERENCES) {
|
|
341
|
+
const [oldestArgId] = consoleArgReferences.keys();
|
|
342
|
+
if (!oldestArgId) {
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
consoleArgReferences.delete(oldestArgId);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
306
349
|
// src/runtime/consoleHook.ts
|
|
350
|
+
var MAX_MESSAGE_CHAR_LENGTH = 5e3;
|
|
351
|
+
var MAX_CONSECUTIVE_DUPLICATES = 50;
|
|
352
|
+
var MAX_SKIPPED_COUNT = 500;
|
|
353
|
+
var DEDUPE_ARG_SAMPLE_COUNT = 3;
|
|
354
|
+
var DEDUPE_STRING_PREFIX_LENGTH = 80;
|
|
355
|
+
var MAX_ARGUMENT_PREVIEW_COUNT = 3;
|
|
307
356
|
function installConsoleHook(options) {
|
|
308
357
|
const originalConsole = {
|
|
309
358
|
log: console.log,
|
|
@@ -312,14 +361,36 @@ function installConsoleHook(options) {
|
|
|
312
361
|
error: console.error,
|
|
313
362
|
debug: console.debug
|
|
314
363
|
};
|
|
364
|
+
let duplicateState;
|
|
315
365
|
const emit = (level, args) => {
|
|
366
|
+
const dedupe = createDedupeInfo(level, args);
|
|
367
|
+
if (duplicateState?.key === dedupe.key) {
|
|
368
|
+
duplicateState.count++;
|
|
369
|
+
if (duplicateState.count > MAX_CONSECUTIVE_DUPLICATES) {
|
|
370
|
+
duplicateState.skipped = Math.min(
|
|
371
|
+
duplicateState.skipped + 1,
|
|
372
|
+
MAX_SKIPPED_COUNT
|
|
373
|
+
);
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
} else {
|
|
377
|
+
flushSuppressedSummary(options, duplicateState);
|
|
378
|
+
duplicateState = {
|
|
379
|
+
key: dedupe.key,
|
|
380
|
+
level,
|
|
381
|
+
label: dedupe.label,
|
|
382
|
+
count: 1,
|
|
383
|
+
skipped: 0
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
const payload = createConsolePayload(args);
|
|
316
387
|
options.send({
|
|
317
|
-
id: (0,
|
|
388
|
+
id: (0, import_nanoid2.nanoid)(),
|
|
318
389
|
pageId: options.pageId,
|
|
319
390
|
source: "hook",
|
|
320
391
|
level,
|
|
321
|
-
message:
|
|
322
|
-
args: args
|
|
392
|
+
message: payload.message,
|
|
393
|
+
args: payload.args,
|
|
323
394
|
timestamp: Date.now()
|
|
324
395
|
});
|
|
325
396
|
};
|
|
@@ -331,7 +402,7 @@ function installConsoleHook(options) {
|
|
|
331
402
|
});
|
|
332
403
|
const onError = (event) => {
|
|
333
404
|
options.send({
|
|
334
|
-
id: (0,
|
|
405
|
+
id: (0, import_nanoid2.nanoid)(),
|
|
335
406
|
pageId: options.pageId,
|
|
336
407
|
source: "hook",
|
|
337
408
|
level: "error",
|
|
@@ -342,18 +413,145 @@ function installConsoleHook(options) {
|
|
|
342
413
|
};
|
|
343
414
|
window.addEventListener("error", onError);
|
|
344
415
|
return () => {
|
|
416
|
+
flushSuppressedSummary(options, duplicateState);
|
|
417
|
+
duplicateState = void 0;
|
|
345
418
|
Object.assign(console, originalConsole);
|
|
346
419
|
window.removeEventListener("error", onError);
|
|
347
420
|
};
|
|
348
421
|
}
|
|
422
|
+
function createDedupeInfo(level, args) {
|
|
423
|
+
const signatures = args.slice(0, DEDUPE_ARG_SAMPLE_COUNT).map((arg) => createValueSignature(arg));
|
|
424
|
+
const key = `${level}:${signatures.join("|")}`;
|
|
425
|
+
const label = createDedupeLabel(args, signatures);
|
|
426
|
+
return { key, label };
|
|
427
|
+
}
|
|
428
|
+
function createDedupeLabel(args, signatures) {
|
|
429
|
+
const [firstArg] = args;
|
|
430
|
+
if (typeof firstArg === "string") {
|
|
431
|
+
return sliceDedupeString(firstArg);
|
|
432
|
+
}
|
|
433
|
+
return signatures.join(" ") || "[empty]";
|
|
434
|
+
}
|
|
435
|
+
function createConsolePayload(args) {
|
|
436
|
+
const entries = args.map(createArgEntry);
|
|
437
|
+
const rawMessage = entries.map((entry) => entry.message).join(" ");
|
|
438
|
+
const oversizedInput = args.some(isOversizedString);
|
|
439
|
+
const oversizedMessage = rawMessage.length > MAX_MESSAGE_CHAR_LENGTH;
|
|
440
|
+
const message = oversizedMessage ? `${rawMessage.slice(0, MAX_MESSAGE_CHAR_LENGTH)}[Truncated]` : rawMessage;
|
|
441
|
+
const includeArgs = !oversizedInput && !oversizedMessage;
|
|
442
|
+
return {
|
|
443
|
+
message,
|
|
444
|
+
args: includeArgs ? entries.slice(0, MAX_ARGUMENT_PREVIEW_COUNT).map((entry) => entry.preview) : []
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
function createArgEntry(value) {
|
|
448
|
+
if (typeof value === "string") {
|
|
449
|
+
return {
|
|
450
|
+
message: truncateMessageString(value),
|
|
451
|
+
preview: value
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
if (value && typeof value === "object") {
|
|
455
|
+
const reference = registerConsoleArg(value);
|
|
456
|
+
return {
|
|
457
|
+
message: reference.label,
|
|
458
|
+
preview: reference
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
const preview = createPrimitivePreview(value);
|
|
462
|
+
return {
|
|
463
|
+
message: safeStringify(value),
|
|
464
|
+
preview
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
function createPrimitivePreview(value) {
|
|
468
|
+
if (value === null) {
|
|
469
|
+
return null;
|
|
470
|
+
}
|
|
471
|
+
if (typeof value === "number") {
|
|
472
|
+
return Number.isFinite(value) ? value : String(value);
|
|
473
|
+
}
|
|
474
|
+
if (typeof value === "bigint") {
|
|
475
|
+
return value.toString();
|
|
476
|
+
}
|
|
477
|
+
if (typeof value === "symbol") {
|
|
478
|
+
return value.description ? `[Symbol(${value.description})]` : "[Symbol]";
|
|
479
|
+
}
|
|
480
|
+
if (typeof value === "function") {
|
|
481
|
+
return value.name ? `[Function:${value.name}]` : "[Function]";
|
|
482
|
+
}
|
|
483
|
+
return value;
|
|
484
|
+
}
|
|
485
|
+
function flushSuppressedSummary(options, state) {
|
|
486
|
+
if (!state || state.skipped === 0) {
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
const skipped = state.skipped >= MAX_SKIPPED_COUNT ? `${String(MAX_SKIPPED_COUNT)}+` : String(state.skipped);
|
|
490
|
+
options.send({
|
|
491
|
+
id: (0, import_nanoid2.nanoid)(),
|
|
492
|
+
pageId: options.pageId,
|
|
493
|
+
source: "hook",
|
|
494
|
+
level: state.level,
|
|
495
|
+
message: `Suppressed ${skipped} duplicate ${state.level} logs: ${state.label}`,
|
|
496
|
+
args: [],
|
|
497
|
+
timestamp: Date.now()
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
function createValueSignature(value) {
|
|
501
|
+
if (value && typeof value === "object") {
|
|
502
|
+
return createObjectTypeLabel(value);
|
|
503
|
+
}
|
|
504
|
+
return createPrimitiveSignature(value);
|
|
505
|
+
}
|
|
506
|
+
function createObjectTypeLabel(value) {
|
|
507
|
+
if (Array.isArray(value)) {
|
|
508
|
+
return "[Array]";
|
|
509
|
+
}
|
|
510
|
+
return "[Object]";
|
|
511
|
+
}
|
|
512
|
+
function createPrimitiveSignature(value) {
|
|
513
|
+
if (typeof value === "string") {
|
|
514
|
+
return `string:${sliceDedupeString(value)}`;
|
|
515
|
+
}
|
|
516
|
+
if (value === null) {
|
|
517
|
+
return "null";
|
|
518
|
+
}
|
|
519
|
+
switch (typeof value) {
|
|
520
|
+
case "number":
|
|
521
|
+
case "boolean":
|
|
522
|
+
case "bigint":
|
|
523
|
+
case "undefined":
|
|
524
|
+
return `${typeof value}:${String(value)}`;
|
|
525
|
+
case "symbol":
|
|
526
|
+
return value.description ? `symbol:${sliceDedupeString(value.description)}` : "symbol";
|
|
527
|
+
case "function":
|
|
528
|
+
return value.name ? `function:${sliceDedupeString(value.name)}` : "function";
|
|
529
|
+
case "object":
|
|
530
|
+
return `object:${Object.prototype.toString.call(value)}`;
|
|
531
|
+
default:
|
|
532
|
+
return "unknown";
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
function isOversizedString(value) {
|
|
536
|
+
return typeof value === "string" && value.length > MAX_MESSAGE_CHAR_LENGTH;
|
|
537
|
+
}
|
|
538
|
+
function truncateMessageString(value) {
|
|
539
|
+
if (value.length <= MAX_MESSAGE_CHAR_LENGTH) {
|
|
540
|
+
return value;
|
|
541
|
+
}
|
|
542
|
+
return `${value.slice(0, MAX_MESSAGE_CHAR_LENGTH)}[Truncated]`;
|
|
543
|
+
}
|
|
544
|
+
function sliceDedupeString(value) {
|
|
545
|
+
return value.slice(0, DEDUPE_STRING_PREFIX_LENGTH);
|
|
546
|
+
}
|
|
349
547
|
|
|
350
548
|
// src/runtime/elementRegistry.ts
|
|
351
|
-
var
|
|
549
|
+
var import_nanoid3 = require("nanoid");
|
|
352
550
|
var RUNTIME_ELEMENT_ID_PREFIX = "runtime:vmcp_";
|
|
353
551
|
var RUNTIME_ELEMENT_ID_SIZE = 8;
|
|
354
552
|
var runtimeElementRegistry = createRuntimeElementRegistry();
|
|
355
553
|
function createRuntimeElementId() {
|
|
356
|
-
return `${RUNTIME_ELEMENT_ID_PREFIX}${(0,
|
|
554
|
+
return `${RUNTIME_ELEMENT_ID_PREFIX}${(0, import_nanoid3.nanoid)(RUNTIME_ELEMENT_ID_SIZE)}`;
|
|
357
555
|
}
|
|
358
556
|
function createRuntimeElementRegistry() {
|
|
359
557
|
const records = /* @__PURE__ */ new Map();
|
|
@@ -854,7 +1052,7 @@ function escapeSelector(value) {
|
|
|
854
1052
|
}
|
|
855
1053
|
|
|
856
1054
|
// src/runtime/networkHook.ts
|
|
857
|
-
var
|
|
1055
|
+
var import_nanoid4 = require("nanoid");
|
|
858
1056
|
|
|
859
1057
|
// src/shared/url.ts
|
|
860
1058
|
function parseRequestQuery(url) {
|
|
@@ -885,7 +1083,7 @@ function safeUrlPathname(url) {
|
|
|
885
1083
|
// src/runtime/networkHook.ts
|
|
886
1084
|
function createHookNetworkRecord(input) {
|
|
887
1085
|
return {
|
|
888
|
-
id: (0,
|
|
1086
|
+
id: (0, import_nanoid4.nanoid)(),
|
|
889
1087
|
pageId: input.pageId,
|
|
890
1088
|
source: "hook",
|
|
891
1089
|
url: input.url,
|
|
@@ -1040,12 +1238,12 @@ function safeReadXhrResponseText(xhr) {
|
|
|
1040
1238
|
}
|
|
1041
1239
|
|
|
1042
1240
|
// src/runtime/pageIdentity.ts
|
|
1043
|
-
var
|
|
1241
|
+
var import_nanoid5 = require("nanoid");
|
|
1044
1242
|
var RUNTIME_CLIENT_ID_STORAGE_KEY = "vite-plugin-vue-mcp-next:runtime-client-id";
|
|
1045
1243
|
var RUNTIME_CLIENT_ID_WINDOW_NAME_PREFIX = "vite-plugin-vue-mcp-next:runtime-client-id=";
|
|
1046
1244
|
var RUNTIME_CLIENT_ID_WINDOW_NAME_SEPARATOR = "\n";
|
|
1047
1245
|
function createRuntimeClientId() {
|
|
1048
|
-
return `runtime-client-${(0,
|
|
1246
|
+
return `runtime-client-${(0, import_nanoid5.nanoid)()}`;
|
|
1049
1247
|
}
|
|
1050
1248
|
function readRuntimeClientIdFromTabScope(tabScope) {
|
|
1051
1249
|
if (!tabScope) {
|
|
@@ -1094,7 +1292,7 @@ function getRuntimeClientId(storage, tabScope) {
|
|
|
1094
1292
|
}
|
|
1095
1293
|
}
|
|
1096
1294
|
function createRuntimePageId() {
|
|
1097
|
-
return `runtime-${(0,
|
|
1295
|
+
return `runtime-${(0, import_nanoid5.nanoid)()}`;
|
|
1098
1296
|
}
|
|
1099
1297
|
function getRuntimePageIdentity(input) {
|
|
1100
1298
|
return {
|
|
@@ -1114,7 +1312,7 @@ function getRuntimePageIdentity(input) {
|
|
|
1114
1312
|
}
|
|
1115
1313
|
|
|
1116
1314
|
// src/runtime/performanceHook.ts
|
|
1117
|
-
var
|
|
1315
|
+
var import_nanoid6 = require("nanoid");
|
|
1118
1316
|
|
|
1119
1317
|
// src/performance/summary.ts
|
|
1120
1318
|
function buildPerformanceSummary(input) {
|
|
@@ -1288,7 +1486,7 @@ function createPerformanceCollector(deps) {
|
|
|
1288
1486
|
};
|
|
1289
1487
|
}
|
|
1290
1488
|
function createRecordingId() {
|
|
1291
|
-
return `performance-${(0,
|
|
1489
|
+
return `performance-${(0, import_nanoid6.nanoid)()}`;
|
|
1292
1490
|
}
|
|
1293
1491
|
function startSession(state, deps, options) {
|
|
1294
1492
|
const recordingId = createRecordingId();
|
|
@@ -2152,7 +2350,14 @@ function createRuntimeDevtoolsRpc(getRpc) {
|
|
|
2152
2350
|
await bridge.manageStorage(options)
|
|
2153
2351
|
);
|
|
2154
2352
|
},
|
|
2155
|
-
onStorageUpdated: () => void 0
|
|
2353
|
+
onStorageUpdated: () => void 0,
|
|
2354
|
+
inspectConsoleArg(options) {
|
|
2355
|
+
if (!options.event) {
|
|
2356
|
+
return;
|
|
2357
|
+
}
|
|
2358
|
+
getRpc().onConsoleArgInspected(options.event, inspectConsoleArg(options));
|
|
2359
|
+
},
|
|
2360
|
+
onConsoleArgInspected: () => void 0
|
|
2156
2361
|
};
|
|
2157
2362
|
}
|
|
2158
2363
|
|