vite-plugin-opencode-assistant 1.0.43 → 1.0.47
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/es/client/composables/useSessions.js +7 -1
- package/es/core/api.d.ts +2 -1
- package/es/core/api.js +44 -164
- package/lib/client/composables/useSessions.js +7 -1
- package/lib/client.js +179 -179
- package/lib/core/api.d.ts +2 -1
- package/lib/core/api.js +44 -164
- package/package.json +4 -4
|
@@ -55,7 +55,13 @@ function useSessions(options) {
|
|
|
55
55
|
try {
|
|
56
56
|
const response = yield fetch(SESSIONS_API_PATH);
|
|
57
57
|
const data = yield response.json();
|
|
58
|
-
sessions.value = data.filter((s) =>
|
|
58
|
+
sessions.value = data.filter((s) => {
|
|
59
|
+
var _a2;
|
|
60
|
+
if (s.title === "__chrome_mcp_warmup__") return false;
|
|
61
|
+
if (s.parentID) return false;
|
|
62
|
+
if ((_a2 = s.time) == null ? void 0 : _a2.archived) return false;
|
|
63
|
+
return true;
|
|
64
|
+
}).map((s) => {
|
|
59
65
|
var _a2;
|
|
60
66
|
return __spreadProps(__spreadValues({}, s), {
|
|
61
67
|
updatedAt: ((_a2 = s.time) == null ? void 0 : _a2.updated) || Date.now()
|
package/es/core/api.d.ts
CHANGED
|
@@ -18,10 +18,11 @@ export declare class OpenCodeAPI {
|
|
|
18
18
|
} | null>;
|
|
19
19
|
deleteSession(sessionId: string, retries?: number): Promise<void>;
|
|
20
20
|
getToolIds(retries?: number): Promise<string[]>;
|
|
21
|
+
private executeWarmupChromeMcp;
|
|
21
22
|
warmupChromeMcp(projectDir: string, viteOrigin?: string): Promise<void>;
|
|
22
|
-
getOrCreateSession(projectDir: string): Promise<string>;
|
|
23
23
|
retryWarmupChromeMcp(projectDir: string, viteOrigin?: string): Promise<{
|
|
24
24
|
success: boolean;
|
|
25
25
|
error?: ChromeMcpWarmupError;
|
|
26
26
|
}>;
|
|
27
|
+
getOrCreateSession(projectDir: string): Promise<string>;
|
|
27
28
|
}
|
package/es/core/api.js
CHANGED
|
@@ -317,10 +317,9 @@ class OpenCodeAPI {
|
|
|
317
317
|
throw lastError;
|
|
318
318
|
});
|
|
319
319
|
}
|
|
320
|
-
|
|
320
|
+
executeWarmupChromeMcp(projectDir, operation, viteOrigin) {
|
|
321
321
|
return __async(this, null, function* () {
|
|
322
|
-
|
|
323
|
-
const timer = log.timer("warmupChromeMcp", { viteOrigin });
|
|
322
|
+
const timer = log.timer(`${operation}WarmupChromeMcp`, { viteOrigin, operation });
|
|
324
323
|
let warmupSessionId = null;
|
|
325
324
|
let freeModel = null;
|
|
326
325
|
const chromeAvailable = yield checkChromeDevToolsAvailable();
|
|
@@ -330,14 +329,14 @@ class OpenCodeAPI {
|
|
|
330
329
|
"Chrome DevTools Protocol is not available",
|
|
331
330
|
"Chrome remote debugging is not enabled or not running on port 9222. Please enable Chrome remote debugging first."
|
|
332
331
|
);
|
|
333
|
-
log.warn(
|
|
332
|
+
log.warn(`Chrome DevTools not available for ${operation}`, {
|
|
334
333
|
port: CHROME_DEVTOOLS_PORT,
|
|
335
334
|
hint: "Enable Chrome remote debugging at chrome://inspect/#remote-debugging"
|
|
336
335
|
});
|
|
337
|
-
timer.end(
|
|
338
|
-
|
|
336
|
+
timer.end(`Chrome DevTools not available for ${operation}`);
|
|
337
|
+
return { success: false, error };
|
|
339
338
|
}
|
|
340
|
-
log.debug(
|
|
339
|
+
log.debug(`Chrome DevTools is available, proceeding with ${operation} warmup`);
|
|
341
340
|
try {
|
|
342
341
|
const warmupSession = yield this.createSession(
|
|
343
342
|
projectDir,
|
|
@@ -347,12 +346,12 @@ class OpenCodeAPI {
|
|
|
347
346
|
warmupSessionId = warmupSession.id;
|
|
348
347
|
freeModel = yield this.getCheapestModel();
|
|
349
348
|
if (freeModel) {
|
|
350
|
-
log.debug(
|
|
349
|
+
log.debug(`Using cheapest model for ${operation} warmup`, {
|
|
351
350
|
providerID: freeModel.providerID,
|
|
352
351
|
modelID: freeModel.modelID
|
|
353
352
|
});
|
|
354
353
|
} else {
|
|
355
|
-
log.debug(
|
|
354
|
+
log.debug(`No model available for ${operation}, using default model`);
|
|
356
355
|
}
|
|
357
356
|
const WARMUP_TIMEOUT = 6e4;
|
|
358
357
|
const data = yield this.createHttpRequest(
|
|
@@ -394,24 +393,33 @@ class OpenCodeAPI {
|
|
|
394
393
|
`AI responded with: ${responseText.substring(0, 200)}`
|
|
395
394
|
);
|
|
396
395
|
}
|
|
397
|
-
timer.end(
|
|
396
|
+
timer.end(`Chrome MCP ${operation} warmed up successfully`);
|
|
397
|
+
return { success: true };
|
|
398
398
|
} catch (e) {
|
|
399
399
|
if (e instanceof ChromeMcpWarmupError) {
|
|
400
400
|
if (e.type === ChromeMcpWarmupErrorType.SESSION_ERROR) {
|
|
401
401
|
timer.end("Session creation failed");
|
|
402
402
|
}
|
|
403
|
-
|
|
403
|
+
if (freeModel && (e.type === ChromeMcpWarmupErrorType.AI_RESPONSE_ERROR || e.type === ChromeMcpWarmupErrorType.AI_TIMEOUT)) {
|
|
404
|
+
this.markModelAsFailed(freeModel.providerID, freeModel.modelID);
|
|
405
|
+
log.debug(`Marked model as failed due to ${operation} ChromeMcpWarmupError`, {
|
|
406
|
+
providerID: freeModel.providerID,
|
|
407
|
+
modelID: freeModel.modelID,
|
|
408
|
+
errorType: e.type
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
log.warn(`Chrome MCP ${operation} warmup failed: ${e.type}`, __spreadValues({
|
|
404
412
|
message: e.message,
|
|
405
413
|
details: e.details
|
|
406
414
|
}, freeModel && {
|
|
407
415
|
model: `${freeModel.providerID}/${freeModel.modelID}`
|
|
408
416
|
}));
|
|
409
|
-
timer.end(`Chrome MCP warmup failed: ${e.type}`);
|
|
410
|
-
|
|
417
|
+
timer.end(`Chrome MCP ${operation} warmup failed: ${e.type}`);
|
|
418
|
+
return { success: false, error: e };
|
|
411
419
|
}
|
|
412
420
|
if (freeModel) {
|
|
413
421
|
this.markModelAsFailed(freeModel.providerID, freeModel.modelID);
|
|
414
|
-
log.debug(
|
|
422
|
+
log.debug(`Marked model as failed due to ${operation} warmup error`, {
|
|
415
423
|
providerID: freeModel.providerID,
|
|
416
424
|
modelID: freeModel.modelID,
|
|
417
425
|
error: e instanceof Error ? e.message : String(e)
|
|
@@ -422,28 +430,28 @@ class OpenCodeAPI {
|
|
|
422
430
|
const error2 = new ChromeMcpWarmupError(
|
|
423
431
|
ChromeMcpWarmupErrorType.AI_TIMEOUT,
|
|
424
432
|
"AI response timeout",
|
|
425
|
-
"AI did not respond within
|
|
433
|
+
"AI did not respond within 60 seconds. Please check if the OpenCode AI model is properly configured and available."
|
|
426
434
|
);
|
|
427
|
-
log.warn(
|
|
435
|
+
log.warn(`Chrome MCP ${operation} warmup timeout`, __spreadValues({
|
|
428
436
|
error: errorMessage
|
|
429
437
|
}, freeModel && {
|
|
430
438
|
model: `${freeModel.providerID}/${freeModel.modelID}`
|
|
431
439
|
}));
|
|
432
|
-
timer.end(
|
|
433
|
-
|
|
440
|
+
timer.end(`Chrome MCP ${operation} warmup timeout`);
|
|
441
|
+
return { success: false, error: error2 };
|
|
434
442
|
}
|
|
435
443
|
const error = new ChromeMcpWarmupError(
|
|
436
444
|
ChromeMcpWarmupErrorType.UNKNOWN,
|
|
437
|
-
|
|
445
|
+
`Unknown error during Chrome MCP ${operation} warmup`,
|
|
438
446
|
errorMessage
|
|
439
447
|
);
|
|
440
|
-
log.warn(
|
|
448
|
+
log.warn(`Chrome MCP ${operation} warmup failed with unknown error`, __spreadValues({
|
|
441
449
|
error: errorMessage
|
|
442
450
|
}, freeModel && {
|
|
443
451
|
model: `${freeModel.providerID}/${freeModel.modelID}`
|
|
444
452
|
}));
|
|
445
|
-
timer.end(
|
|
446
|
-
|
|
453
|
+
timer.end(`Chrome MCP ${operation} warmup failed`);
|
|
454
|
+
return { success: false, error };
|
|
447
455
|
} finally {
|
|
448
456
|
if (warmupSessionId) {
|
|
449
457
|
try {
|
|
@@ -458,6 +466,20 @@ class OpenCodeAPI {
|
|
|
458
466
|
}
|
|
459
467
|
});
|
|
460
468
|
}
|
|
469
|
+
warmupChromeMcp(projectDir, viteOrigin) {
|
|
470
|
+
return __async(this, null, function* () {
|
|
471
|
+
if (!this.warmupChromeMcpConfig) return;
|
|
472
|
+
const result = yield this.executeWarmupChromeMcp(projectDir, "warmup", viteOrigin);
|
|
473
|
+
if (!result.success) {
|
|
474
|
+
throw result.error;
|
|
475
|
+
}
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
retryWarmupChromeMcp(projectDir, viteOrigin) {
|
|
479
|
+
return __async(this, null, function* () {
|
|
480
|
+
return this.executeWarmupChromeMcp(projectDir, "retry", viteOrigin);
|
|
481
|
+
});
|
|
482
|
+
}
|
|
461
483
|
getOrCreateSession(projectDir) {
|
|
462
484
|
return __async(this, null, function* () {
|
|
463
485
|
const timer = log.timer("getOrCreateSession", { projectDir });
|
|
@@ -479,148 +501,6 @@ class OpenCodeAPI {
|
|
|
479
501
|
return url;
|
|
480
502
|
});
|
|
481
503
|
}
|
|
482
|
-
retryWarmupChromeMcp(projectDir, viteOrigin) {
|
|
483
|
-
return __async(this, null, function* () {
|
|
484
|
-
const timer = log.timer("retryWarmupChromeMcp", { viteOrigin });
|
|
485
|
-
let warmupSessionId = null;
|
|
486
|
-
let freeModel = null;
|
|
487
|
-
const chromeAvailable = yield checkChromeDevToolsAvailable();
|
|
488
|
-
if (!chromeAvailable) {
|
|
489
|
-
const error = new ChromeMcpWarmupError(
|
|
490
|
-
ChromeMcpWarmupErrorType.CHROME_NOT_CONNECTED,
|
|
491
|
-
"Chrome DevTools Protocol is not available",
|
|
492
|
-
"Chrome remote debugging is not enabled or not running on port 9222. Please enable Chrome remote debugging first."
|
|
493
|
-
);
|
|
494
|
-
log.warn("Chrome DevTools not available for retry", {
|
|
495
|
-
port: CHROME_DEVTOOLS_PORT,
|
|
496
|
-
hint: "Enable Chrome remote debugging at chrome://inspect/#remote-debugging"
|
|
497
|
-
});
|
|
498
|
-
timer.end("Chrome DevTools not available for retry");
|
|
499
|
-
return { success: false, error };
|
|
500
|
-
}
|
|
501
|
-
log.debug("Chrome DevTools is available, proceeding with retry warmup");
|
|
502
|
-
try {
|
|
503
|
-
const warmupSession = yield this.createSession(
|
|
504
|
-
projectDir,
|
|
505
|
-
DEFAULT_RETRIES,
|
|
506
|
-
"__chrome_mcp_warmup__"
|
|
507
|
-
);
|
|
508
|
-
warmupSessionId = warmupSession.id;
|
|
509
|
-
freeModel = yield this.getCheapestModel();
|
|
510
|
-
if (freeModel) {
|
|
511
|
-
log.debug("Using cheapest model for retry warmup", {
|
|
512
|
-
providerID: freeModel.providerID,
|
|
513
|
-
modelID: freeModel.modelID
|
|
514
|
-
});
|
|
515
|
-
} else {
|
|
516
|
-
log.debug("No model available for retry, using default model");
|
|
517
|
-
}
|
|
518
|
-
const WARMUP_TIMEOUT = 6e4;
|
|
519
|
-
const data = yield this.createHttpRequest(
|
|
520
|
-
{
|
|
521
|
-
hostname: this.hostname,
|
|
522
|
-
port: this.getPort(),
|
|
523
|
-
path: `/session/${warmupSessionId}/message`,
|
|
524
|
-
method: "POST",
|
|
525
|
-
headers: { "Content-Type": "application/json" }
|
|
526
|
-
},
|
|
527
|
-
JSON.stringify(__spreadValues({
|
|
528
|
-
parts: [
|
|
529
|
-
{
|
|
530
|
-
type: "text",
|
|
531
|
-
text: "Test if the chrome-devtools_list_pages tool is available. If available, reply with: ready. If not available, explain why."
|
|
532
|
-
}
|
|
533
|
-
]
|
|
534
|
-
}, freeModel && {
|
|
535
|
-
model: {
|
|
536
|
-
providerID: freeModel.providerID,
|
|
537
|
-
modelID: freeModel.modelID
|
|
538
|
-
}
|
|
539
|
-
})),
|
|
540
|
-
WARMUP_TIMEOUT
|
|
541
|
-
);
|
|
542
|
-
log.debug("Chrome MCP warmup response:", { data });
|
|
543
|
-
const responseText = extractTextFromResponse(data);
|
|
544
|
-
if (!responseText) {
|
|
545
|
-
throw new ChromeMcpWarmupError(
|
|
546
|
-
ChromeMcpWarmupErrorType.AI_RESPONSE_ERROR,
|
|
547
|
-
"AI did not respond to the warmup request",
|
|
548
|
-
"Empty response from AI"
|
|
549
|
-
);
|
|
550
|
-
}
|
|
551
|
-
const lowerResponse = responseText.toLowerCase();
|
|
552
|
-
if (!lowerResponse.includes("ready")) {
|
|
553
|
-
throw new ChromeMcpWarmupError(
|
|
554
|
-
ChromeMcpWarmupErrorType.AI_RESPONSE_ERROR,
|
|
555
|
-
"AI response does not indicate success",
|
|
556
|
-
`AI responded with: ${responseText.substring(0, 200)}`
|
|
557
|
-
);
|
|
558
|
-
}
|
|
559
|
-
timer.end("Chrome MCP warmed up successfully");
|
|
560
|
-
return { success: true };
|
|
561
|
-
} catch (e) {
|
|
562
|
-
if (e instanceof ChromeMcpWarmupError) {
|
|
563
|
-
if (e.type === ChromeMcpWarmupErrorType.SESSION_ERROR) {
|
|
564
|
-
timer.end("Session creation failed");
|
|
565
|
-
}
|
|
566
|
-
log.warn(`Chrome MCP warmup retry failed: ${e.type}`, __spreadValues({
|
|
567
|
-
message: e.message,
|
|
568
|
-
details: e.details
|
|
569
|
-
}, freeModel && {
|
|
570
|
-
model: `${freeModel.providerID}/${freeModel.modelID}`
|
|
571
|
-
}));
|
|
572
|
-
timer.end(`Chrome MCP warmup retry failed: ${e.type}`);
|
|
573
|
-
return { success: false, error: e };
|
|
574
|
-
}
|
|
575
|
-
if (freeModel) {
|
|
576
|
-
this.markModelAsFailed(freeModel.providerID, freeModel.modelID);
|
|
577
|
-
log.debug("Marked model as failed due to retry warmup error", {
|
|
578
|
-
providerID: freeModel.providerID,
|
|
579
|
-
modelID: freeModel.modelID,
|
|
580
|
-
error: e instanceof Error ? e.message : String(e)
|
|
581
|
-
});
|
|
582
|
-
}
|
|
583
|
-
const errorMessage = e instanceof Error ? e.message : String(e);
|
|
584
|
-
if (errorMessage.includes("timeout") || errorMessage.includes("Timeout")) {
|
|
585
|
-
const error2 = new ChromeMcpWarmupError(
|
|
586
|
-
ChromeMcpWarmupErrorType.AI_TIMEOUT,
|
|
587
|
-
"AI response timeout",
|
|
588
|
-
"AI did not respond within 60 seconds. Please check if the OpenCode AI model is properly configured and available."
|
|
589
|
-
);
|
|
590
|
-
log.warn("Chrome MCP warmup retry timeout", __spreadValues({
|
|
591
|
-
error: errorMessage
|
|
592
|
-
}, freeModel && {
|
|
593
|
-
model: `${freeModel.providerID}/${freeModel.modelID}`
|
|
594
|
-
}));
|
|
595
|
-
timer.end("Chrome MCP warmup retry timeout");
|
|
596
|
-
return { success: false, error: error2 };
|
|
597
|
-
}
|
|
598
|
-
const error = new ChromeMcpWarmupError(
|
|
599
|
-
ChromeMcpWarmupErrorType.UNKNOWN,
|
|
600
|
-
"Unknown error during Chrome MCP warmup retry",
|
|
601
|
-
errorMessage
|
|
602
|
-
);
|
|
603
|
-
log.warn("Chrome MCP warmup retry failed with unknown error", __spreadValues({
|
|
604
|
-
error: errorMessage
|
|
605
|
-
}, freeModel && {
|
|
606
|
-
model: `${freeModel.providerID}/${freeModel.modelID}`
|
|
607
|
-
}));
|
|
608
|
-
timer.end("Chrome MCP warmup retry failed");
|
|
609
|
-
return { success: false, error };
|
|
610
|
-
} finally {
|
|
611
|
-
if (warmupSessionId) {
|
|
612
|
-
try {
|
|
613
|
-
yield this.deleteSession(warmupSessionId, 5);
|
|
614
|
-
} catch (e) {
|
|
615
|
-
log.warn("Failed to delete warmup session after retries", {
|
|
616
|
-
error: e,
|
|
617
|
-
warmupSessionId
|
|
618
|
-
});
|
|
619
|
-
}
|
|
620
|
-
}
|
|
621
|
-
}
|
|
622
|
-
});
|
|
623
|
-
}
|
|
624
504
|
}
|
|
625
505
|
export {
|
|
626
506
|
OpenCodeAPI
|
|
@@ -75,7 +75,13 @@ function useSessions(options) {
|
|
|
75
75
|
try {
|
|
76
76
|
const response = yield fetch(import_shared.SESSIONS_API_PATH);
|
|
77
77
|
const data = yield response.json();
|
|
78
|
-
sessions.value = data.filter((s) =>
|
|
78
|
+
sessions.value = data.filter((s) => {
|
|
79
|
+
var _a2;
|
|
80
|
+
if (s.title === "__chrome_mcp_warmup__") return false;
|
|
81
|
+
if (s.parentID) return false;
|
|
82
|
+
if ((_a2 = s.time) == null ? void 0 : _a2.archived) return false;
|
|
83
|
+
return true;
|
|
84
|
+
}).map((s) => {
|
|
79
85
|
var _a2;
|
|
80
86
|
return __spreadProps(__spreadValues({}, s), {
|
|
81
87
|
updatedAt: ((_a2 = s.time) == null ? void 0 : _a2.updated) || Date.now()
|