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
package/lib/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/lib/core/api.js
CHANGED
|
@@ -335,10 +335,9 @@ class OpenCodeAPI {
|
|
|
335
335
|
throw lastError;
|
|
336
336
|
});
|
|
337
337
|
}
|
|
338
|
-
|
|
338
|
+
executeWarmupChromeMcp(projectDir, operation, viteOrigin) {
|
|
339
339
|
return __async(this, null, function* () {
|
|
340
|
-
|
|
341
|
-
const timer = log.timer("warmupChromeMcp", { viteOrigin });
|
|
340
|
+
const timer = log.timer(`${operation}WarmupChromeMcp`, { viteOrigin, operation });
|
|
342
341
|
let warmupSessionId = null;
|
|
343
342
|
let freeModel = null;
|
|
344
343
|
const chromeAvailable = yield (0, import_shared.checkChromeDevToolsAvailable)();
|
|
@@ -348,14 +347,14 @@ class OpenCodeAPI {
|
|
|
348
347
|
"Chrome DevTools Protocol is not available",
|
|
349
348
|
"Chrome remote debugging is not enabled or not running on port 9222. Please enable Chrome remote debugging first."
|
|
350
349
|
);
|
|
351
|
-
log.warn(
|
|
350
|
+
log.warn(`Chrome DevTools not available for ${operation}`, {
|
|
352
351
|
port: import_shared.CHROME_DEVTOOLS_PORT,
|
|
353
352
|
hint: "Enable Chrome remote debugging at chrome://inspect/#remote-debugging"
|
|
354
353
|
});
|
|
355
|
-
timer.end(
|
|
356
|
-
|
|
354
|
+
timer.end(`Chrome DevTools not available for ${operation}`);
|
|
355
|
+
return { success: false, error };
|
|
357
356
|
}
|
|
358
|
-
log.debug(
|
|
357
|
+
log.debug(`Chrome DevTools is available, proceeding with ${operation} warmup`);
|
|
359
358
|
try {
|
|
360
359
|
const warmupSession = yield this.createSession(
|
|
361
360
|
projectDir,
|
|
@@ -365,12 +364,12 @@ class OpenCodeAPI {
|
|
|
365
364
|
warmupSessionId = warmupSession.id;
|
|
366
365
|
freeModel = yield this.getCheapestModel();
|
|
367
366
|
if (freeModel) {
|
|
368
|
-
log.debug(
|
|
367
|
+
log.debug(`Using cheapest model for ${operation} warmup`, {
|
|
369
368
|
providerID: freeModel.providerID,
|
|
370
369
|
modelID: freeModel.modelID
|
|
371
370
|
});
|
|
372
371
|
} else {
|
|
373
|
-
log.debug(
|
|
372
|
+
log.debug(`No model available for ${operation}, using default model`);
|
|
374
373
|
}
|
|
375
374
|
const WARMUP_TIMEOUT = 6e4;
|
|
376
375
|
const data = yield this.createHttpRequest(
|
|
@@ -412,24 +411,33 @@ class OpenCodeAPI {
|
|
|
412
411
|
`AI responded with: ${responseText.substring(0, 200)}`
|
|
413
412
|
);
|
|
414
413
|
}
|
|
415
|
-
timer.end(
|
|
414
|
+
timer.end(`Chrome MCP ${operation} warmed up successfully`);
|
|
415
|
+
return { success: true };
|
|
416
416
|
} catch (e) {
|
|
417
417
|
if (e instanceof import_shared.ChromeMcpWarmupError) {
|
|
418
418
|
if (e.type === import_shared.ChromeMcpWarmupErrorType.SESSION_ERROR) {
|
|
419
419
|
timer.end("Session creation failed");
|
|
420
420
|
}
|
|
421
|
-
|
|
421
|
+
if (freeModel && (e.type === import_shared.ChromeMcpWarmupErrorType.AI_RESPONSE_ERROR || e.type === import_shared.ChromeMcpWarmupErrorType.AI_TIMEOUT)) {
|
|
422
|
+
this.markModelAsFailed(freeModel.providerID, freeModel.modelID);
|
|
423
|
+
log.debug(`Marked model as failed due to ${operation} ChromeMcpWarmupError`, {
|
|
424
|
+
providerID: freeModel.providerID,
|
|
425
|
+
modelID: freeModel.modelID,
|
|
426
|
+
errorType: e.type
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
log.warn(`Chrome MCP ${operation} warmup failed: ${e.type}`, __spreadValues({
|
|
422
430
|
message: e.message,
|
|
423
431
|
details: e.details
|
|
424
432
|
}, freeModel && {
|
|
425
433
|
model: `${freeModel.providerID}/${freeModel.modelID}`
|
|
426
434
|
}));
|
|
427
|
-
timer.end(`Chrome MCP warmup failed: ${e.type}`);
|
|
428
|
-
|
|
435
|
+
timer.end(`Chrome MCP ${operation} warmup failed: ${e.type}`);
|
|
436
|
+
return { success: false, error: e };
|
|
429
437
|
}
|
|
430
438
|
if (freeModel) {
|
|
431
439
|
this.markModelAsFailed(freeModel.providerID, freeModel.modelID);
|
|
432
|
-
log.debug(
|
|
440
|
+
log.debug(`Marked model as failed due to ${operation} warmup error`, {
|
|
433
441
|
providerID: freeModel.providerID,
|
|
434
442
|
modelID: freeModel.modelID,
|
|
435
443
|
error: e instanceof Error ? e.message : String(e)
|
|
@@ -440,28 +448,28 @@ class OpenCodeAPI {
|
|
|
440
448
|
const error2 = new import_shared.ChromeMcpWarmupError(
|
|
441
449
|
import_shared.ChromeMcpWarmupErrorType.AI_TIMEOUT,
|
|
442
450
|
"AI response timeout",
|
|
443
|
-
"AI did not respond within
|
|
451
|
+
"AI did not respond within 60 seconds. Please check if the OpenCode AI model is properly configured and available."
|
|
444
452
|
);
|
|
445
|
-
log.warn(
|
|
453
|
+
log.warn(`Chrome MCP ${operation} warmup timeout`, __spreadValues({
|
|
446
454
|
error: errorMessage
|
|
447
455
|
}, freeModel && {
|
|
448
456
|
model: `${freeModel.providerID}/${freeModel.modelID}`
|
|
449
457
|
}));
|
|
450
|
-
timer.end(
|
|
451
|
-
|
|
458
|
+
timer.end(`Chrome MCP ${operation} warmup timeout`);
|
|
459
|
+
return { success: false, error: error2 };
|
|
452
460
|
}
|
|
453
461
|
const error = new import_shared.ChromeMcpWarmupError(
|
|
454
462
|
import_shared.ChromeMcpWarmupErrorType.UNKNOWN,
|
|
455
|
-
|
|
463
|
+
`Unknown error during Chrome MCP ${operation} warmup`,
|
|
456
464
|
errorMessage
|
|
457
465
|
);
|
|
458
|
-
log.warn(
|
|
466
|
+
log.warn(`Chrome MCP ${operation} warmup failed with unknown error`, __spreadValues({
|
|
459
467
|
error: errorMessage
|
|
460
468
|
}, freeModel && {
|
|
461
469
|
model: `${freeModel.providerID}/${freeModel.modelID}`
|
|
462
470
|
}));
|
|
463
|
-
timer.end(
|
|
464
|
-
|
|
471
|
+
timer.end(`Chrome MCP ${operation} warmup failed`);
|
|
472
|
+
return { success: false, error };
|
|
465
473
|
} finally {
|
|
466
474
|
if (warmupSessionId) {
|
|
467
475
|
try {
|
|
@@ -476,6 +484,20 @@ class OpenCodeAPI {
|
|
|
476
484
|
}
|
|
477
485
|
});
|
|
478
486
|
}
|
|
487
|
+
warmupChromeMcp(projectDir, viteOrigin) {
|
|
488
|
+
return __async(this, null, function* () {
|
|
489
|
+
if (!this.warmupChromeMcpConfig) return;
|
|
490
|
+
const result = yield this.executeWarmupChromeMcp(projectDir, "warmup", viteOrigin);
|
|
491
|
+
if (!result.success) {
|
|
492
|
+
throw result.error;
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
retryWarmupChromeMcp(projectDir, viteOrigin) {
|
|
497
|
+
return __async(this, null, function* () {
|
|
498
|
+
return this.executeWarmupChromeMcp(projectDir, "retry", viteOrigin);
|
|
499
|
+
});
|
|
500
|
+
}
|
|
479
501
|
getOrCreateSession(projectDir) {
|
|
480
502
|
return __async(this, null, function* () {
|
|
481
503
|
const timer = log.timer("getOrCreateSession", { projectDir });
|
|
@@ -497,148 +519,6 @@ class OpenCodeAPI {
|
|
|
497
519
|
return url;
|
|
498
520
|
});
|
|
499
521
|
}
|
|
500
|
-
retryWarmupChromeMcp(projectDir, viteOrigin) {
|
|
501
|
-
return __async(this, null, function* () {
|
|
502
|
-
const timer = log.timer("retryWarmupChromeMcp", { viteOrigin });
|
|
503
|
-
let warmupSessionId = null;
|
|
504
|
-
let freeModel = null;
|
|
505
|
-
const chromeAvailable = yield (0, import_shared.checkChromeDevToolsAvailable)();
|
|
506
|
-
if (!chromeAvailable) {
|
|
507
|
-
const error = new import_shared.ChromeMcpWarmupError(
|
|
508
|
-
import_shared.ChromeMcpWarmupErrorType.CHROME_NOT_CONNECTED,
|
|
509
|
-
"Chrome DevTools Protocol is not available",
|
|
510
|
-
"Chrome remote debugging is not enabled or not running on port 9222. Please enable Chrome remote debugging first."
|
|
511
|
-
);
|
|
512
|
-
log.warn("Chrome DevTools not available for retry", {
|
|
513
|
-
port: import_shared.CHROME_DEVTOOLS_PORT,
|
|
514
|
-
hint: "Enable Chrome remote debugging at chrome://inspect/#remote-debugging"
|
|
515
|
-
});
|
|
516
|
-
timer.end("Chrome DevTools not available for retry");
|
|
517
|
-
return { success: false, error };
|
|
518
|
-
}
|
|
519
|
-
log.debug("Chrome DevTools is available, proceeding with retry warmup");
|
|
520
|
-
try {
|
|
521
|
-
const warmupSession = yield this.createSession(
|
|
522
|
-
projectDir,
|
|
523
|
-
import_shared.DEFAULT_RETRIES,
|
|
524
|
-
"__chrome_mcp_warmup__"
|
|
525
|
-
);
|
|
526
|
-
warmupSessionId = warmupSession.id;
|
|
527
|
-
freeModel = yield this.getCheapestModel();
|
|
528
|
-
if (freeModel) {
|
|
529
|
-
log.debug("Using cheapest model for retry warmup", {
|
|
530
|
-
providerID: freeModel.providerID,
|
|
531
|
-
modelID: freeModel.modelID
|
|
532
|
-
});
|
|
533
|
-
} else {
|
|
534
|
-
log.debug("No model available for retry, using default model");
|
|
535
|
-
}
|
|
536
|
-
const WARMUP_TIMEOUT = 6e4;
|
|
537
|
-
const data = yield this.createHttpRequest(
|
|
538
|
-
{
|
|
539
|
-
hostname: this.hostname,
|
|
540
|
-
port: this.getPort(),
|
|
541
|
-
path: `/session/${warmupSessionId}/message`,
|
|
542
|
-
method: "POST",
|
|
543
|
-
headers: { "Content-Type": "application/json" }
|
|
544
|
-
},
|
|
545
|
-
JSON.stringify(__spreadValues({
|
|
546
|
-
parts: [
|
|
547
|
-
{
|
|
548
|
-
type: "text",
|
|
549
|
-
text: "Test if the chrome-devtools_list_pages tool is available. If available, reply with: ready. If not available, explain why."
|
|
550
|
-
}
|
|
551
|
-
]
|
|
552
|
-
}, freeModel && {
|
|
553
|
-
model: {
|
|
554
|
-
providerID: freeModel.providerID,
|
|
555
|
-
modelID: freeModel.modelID
|
|
556
|
-
}
|
|
557
|
-
})),
|
|
558
|
-
WARMUP_TIMEOUT
|
|
559
|
-
);
|
|
560
|
-
log.debug("Chrome MCP warmup response:", { data });
|
|
561
|
-
const responseText = (0, import_shared.extractTextFromResponse)(data);
|
|
562
|
-
if (!responseText) {
|
|
563
|
-
throw new import_shared.ChromeMcpWarmupError(
|
|
564
|
-
import_shared.ChromeMcpWarmupErrorType.AI_RESPONSE_ERROR,
|
|
565
|
-
"AI did not respond to the warmup request",
|
|
566
|
-
"Empty response from AI"
|
|
567
|
-
);
|
|
568
|
-
}
|
|
569
|
-
const lowerResponse = responseText.toLowerCase();
|
|
570
|
-
if (!lowerResponse.includes("ready")) {
|
|
571
|
-
throw new import_shared.ChromeMcpWarmupError(
|
|
572
|
-
import_shared.ChromeMcpWarmupErrorType.AI_RESPONSE_ERROR,
|
|
573
|
-
"AI response does not indicate success",
|
|
574
|
-
`AI responded with: ${responseText.substring(0, 200)}`
|
|
575
|
-
);
|
|
576
|
-
}
|
|
577
|
-
timer.end("Chrome MCP warmed up successfully");
|
|
578
|
-
return { success: true };
|
|
579
|
-
} catch (e) {
|
|
580
|
-
if (e instanceof import_shared.ChromeMcpWarmupError) {
|
|
581
|
-
if (e.type === import_shared.ChromeMcpWarmupErrorType.SESSION_ERROR) {
|
|
582
|
-
timer.end("Session creation failed");
|
|
583
|
-
}
|
|
584
|
-
log.warn(`Chrome MCP warmup retry failed: ${e.type}`, __spreadValues({
|
|
585
|
-
message: e.message,
|
|
586
|
-
details: e.details
|
|
587
|
-
}, freeModel && {
|
|
588
|
-
model: `${freeModel.providerID}/${freeModel.modelID}`
|
|
589
|
-
}));
|
|
590
|
-
timer.end(`Chrome MCP warmup retry failed: ${e.type}`);
|
|
591
|
-
return { success: false, error: e };
|
|
592
|
-
}
|
|
593
|
-
if (freeModel) {
|
|
594
|
-
this.markModelAsFailed(freeModel.providerID, freeModel.modelID);
|
|
595
|
-
log.debug("Marked model as failed due to retry warmup error", {
|
|
596
|
-
providerID: freeModel.providerID,
|
|
597
|
-
modelID: freeModel.modelID,
|
|
598
|
-
error: e instanceof Error ? e.message : String(e)
|
|
599
|
-
});
|
|
600
|
-
}
|
|
601
|
-
const errorMessage = e instanceof Error ? e.message : String(e);
|
|
602
|
-
if (errorMessage.includes("timeout") || errorMessage.includes("Timeout")) {
|
|
603
|
-
const error2 = new import_shared.ChromeMcpWarmupError(
|
|
604
|
-
import_shared.ChromeMcpWarmupErrorType.AI_TIMEOUT,
|
|
605
|
-
"AI response timeout",
|
|
606
|
-
"AI did not respond within 60 seconds. Please check if the OpenCode AI model is properly configured and available."
|
|
607
|
-
);
|
|
608
|
-
log.warn("Chrome MCP warmup retry timeout", __spreadValues({
|
|
609
|
-
error: errorMessage
|
|
610
|
-
}, freeModel && {
|
|
611
|
-
model: `${freeModel.providerID}/${freeModel.modelID}`
|
|
612
|
-
}));
|
|
613
|
-
timer.end("Chrome MCP warmup retry timeout");
|
|
614
|
-
return { success: false, error: error2 };
|
|
615
|
-
}
|
|
616
|
-
const error = new import_shared.ChromeMcpWarmupError(
|
|
617
|
-
import_shared.ChromeMcpWarmupErrorType.UNKNOWN,
|
|
618
|
-
"Unknown error during Chrome MCP warmup retry",
|
|
619
|
-
errorMessage
|
|
620
|
-
);
|
|
621
|
-
log.warn("Chrome MCP warmup retry failed with unknown error", __spreadValues({
|
|
622
|
-
error: errorMessage
|
|
623
|
-
}, freeModel && {
|
|
624
|
-
model: `${freeModel.providerID}/${freeModel.modelID}`
|
|
625
|
-
}));
|
|
626
|
-
timer.end("Chrome MCP warmup retry failed");
|
|
627
|
-
return { success: false, error };
|
|
628
|
-
} finally {
|
|
629
|
-
if (warmupSessionId) {
|
|
630
|
-
try {
|
|
631
|
-
yield this.deleteSession(warmupSessionId, 5);
|
|
632
|
-
} catch (e) {
|
|
633
|
-
log.warn("Failed to delete warmup session after retries", {
|
|
634
|
-
error: e,
|
|
635
|
-
warmupSessionId
|
|
636
|
-
});
|
|
637
|
-
}
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
});
|
|
641
|
-
}
|
|
642
522
|
}
|
|
643
523
|
// Annotate the CommonJS export names for ESM import in node:
|
|
644
524
|
0 && (module.exports = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vite-plugin-opencode-assistant",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.47",
|
|
4
4
|
"description": "Embed OpenCode Web UI in your Vite dev server for real-time code modification and preview",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
"license": "MIT",
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"unplugin-vue-inspector": "^2.4.0",
|
|
39
|
-
"@vite-plugin-opencode-assistant/
|
|
40
|
-
"@vite-plugin-opencode-assistant/
|
|
41
|
-
"@vite-plugin-opencode-assistant/components": "1.0.
|
|
39
|
+
"@vite-plugin-opencode-assistant/opencode": "1.0.47",
|
|
40
|
+
"@vite-plugin-opencode-assistant/shared": "1.0.47",
|
|
41
|
+
"@vite-plugin-opencode-assistant/components": "1.0.47"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"vite": ">=4.0.0"
|