This commit is contained in:
锦恢 2025-04-11 14:15:12 +08:00
parent d23d9f6638
commit 6416f293a4
11 changed files with 72 additions and 62 deletions

View File

@ -68,8 +68,6 @@ function initProduce() {
// tab
loadPanels();
//
doConnect();
}
onMounted(() => {

View File

@ -48,11 +48,6 @@ class MessageBridge {
this.postMessage = (message) => vscode.postMessage(message);
this.isConnected.value = true;
this.postMessage({
command: 'init',
data: {}
});
}
// WebSocket 环境连接

View File

@ -22,30 +22,36 @@ export function loadPanels() {
const bridge = useMessageBridge();
bridge.addCommandListener('panel/load', data => {
const persistTab = data.msg as SaveTab;
if (data.code !== 200) {
pinkLog('tabs 加载失败');
console.log(data.msg);
} else {
const persistTab = data.msg as SaveTab;
console.log('receive persist tab', persistTab);
if (persistTab.tabs.length === 0) {
// 空的,直接返回不需要管
return;
pinkLog('tabs 加载成功');
if (persistTab.tabs.length === 0) {
// 空的,直接返回不需要管
return;
}
tabs.activeIndex = 0;
tabs.content = [];
for (const tab of persistTab.tabs || []) {
tabs.content.push({
name: tab.name,
icon: tab.icon,
type: tab.type,
componentIndex: tab.componentIndex,
component: markRaw(debugModes[tab.componentIndex]),
storage: tab.storage
});
}
tabs.activeIndex = persistTab.currentIndex;
}
tabs.activeIndex = 0;
tabs.content = [];
for (const tab of persistTab.tabs || []) {
tabs.content.push({
name: tab.name,
icon: tab.icon,
type: tab.type,
componentIndex: tab.componentIndex,
component: markRaw(debugModes[tab.componentIndex]),
storage: tab.storage
});
}
tabs.activeIndex = persistTab.currentIndex;
}, { once: true });

View File

@ -5,18 +5,23 @@ import I18n from '@/i18n/index';
export function loadSetting() {
const bridge = useMessageBridge();
bridge.addCommandListener('setting/load', data => {
const persistConfig = data.msg;
console.log('receive persist config', persistConfig);
llmManager.currentModelIndex = persistConfig.MODEL_INDEX;
I18n.global.locale.value = persistConfig.LANG;
persistConfig.LLM_INFO.forEach((element: any) => {
llms.push(element);
});
bridge.addCommandListener('setting/load', data => {
if (data.code !== 200) {
pinkLog('配置加载失败');
console.log(data.msg);
} else {
const persistConfig = data.msg;
pinkLog('配置加载成功');
llmManager.currentModelIndex = persistConfig.MODEL_INDEX;
I18n.global.locale.value = persistConfig.LANG;
persistConfig.LLM_INFO.forEach((element: any) => {
llms.push(element);
});
}
}, { once: true });
@ -37,7 +42,7 @@ export function saveSetting(saveHandler?: () => void) {
bridge.addCommandListener('setting/save', data => {
const saveStatusCode = data.code;
pinkLog('配置保存状态:' + saveStatusCode);
if (saveHandler) {
saveHandler();
}

View File

@ -13,6 +13,11 @@ export interface WebSocketResponse {
error?: string;
}
export interface PostMessageble {
postMessage(message: any): void;
onDidReceiveMessage(callback: MessageHandler): { dispose: () => void };
}
// 监听器回调类型
export type MessageHandler = (message: any) => void;

View File

@ -1,4 +1,4 @@
import { VSCodeWebViewLike } from "../adapter";
import { PostMessageble } from "../adapter";
import { MCPClient } from "./connect";
// ==================== 接口定义 ====================
@ -23,7 +23,7 @@ export interface CallToolOption {
*/
export async function listPrompts(
client: MCPClient | undefined,
webview: VSCodeWebViewLike
webview: PostMessageble
) {
if (!client) {
const connectResult = {
@ -56,7 +56,7 @@ export async function listPrompts(
export async function getPrompt(
client: MCPClient | undefined,
option: GetPromptOption,
webview: VSCodeWebViewLike
webview: PostMessageble
) {
if (!client) {
const connectResult = {
@ -88,7 +88,7 @@ export async function getPrompt(
*/
export async function listResources(
client: MCPClient | undefined,
webview: VSCodeWebViewLike
webview: PostMessageble
) {
if (!client) {
const connectResult = {
@ -121,7 +121,7 @@ export async function listResources(
*/
export async function listResourceTemplates(
client: MCPClient | undefined,
webview: VSCodeWebViewLike
webview: PostMessageble
) {
if (!client) {
const connectResult = {
@ -155,7 +155,7 @@ export async function listResourceTemplates(
export async function readResource(
client: MCPClient | undefined,
option: ReadResourceOption,
webview: VSCodeWebViewLike
webview: PostMessageble
) {
if (!client) {
const connectResult = {
@ -187,7 +187,7 @@ export async function readResource(
*/
export async function listTools(
client: MCPClient | undefined,
webview: VSCodeWebViewLike
webview: PostMessageble
) {
if (!client) {
const connectResult = {
@ -223,7 +223,7 @@ export async function listTools(
export async function callTool(
client: MCPClient | undefined,
option: CallToolOption,
webview: VSCodeWebViewLike
webview: PostMessageble
) {
if (!client) {
const connectResult = {

View File

@ -1,5 +1,5 @@
import { VSCodeWebViewLike } from '../adapter';
import { PostMessageble } from '../adapter';
import { connect, MCPClient, type MCPOptions } from './connect';
import { callTool, getPrompt, listPrompts, listResources, listResourceTemplates, listTools, readResource } from './handler';
import { chatCompletionHandler } from './llm';
@ -11,7 +11,7 @@ import { ping } from './util';
// TODO: 支持更多的 client
let client: MCPClient | undefined = undefined;
async function connectHandler(option: MCPOptions, webview: VSCodeWebViewLike) {
async function connectHandler(option: MCPOptions, webview: PostMessageble) {
try {
client = await connect(option);
const connectResult = {
@ -34,7 +34,7 @@ async function connectHandler(option: MCPOptions, webview: VSCodeWebViewLike) {
}
export function messageController(command: string, data: any, webview: VSCodeWebViewLike) {
export function messageController(command: string, data: any, webview: PostMessageble) {
switch (command) {
case 'connect':
connectHandler(data, webview);

View File

@ -1,9 +1,10 @@
import { OpenAI } from 'openai';
import { MCPClient } from './connect';
import { PostMessageble } from '../adapter';
let currentStream: AsyncIterable<any> | null = null;
export async function chatCompletionHandler(client: MCPClient | undefined, data: any, webview: { postMessage: (message: any) => void }) {
export async function chatCompletionHandler(client: MCPClient | undefined, data: any, webview: PostMessageble) {
if (!client) {
const connectResult = {
code: 501,
@ -99,7 +100,7 @@ export async function chatCompletionHandler(client: MCPClient | undefined, data:
}
// 处理中止消息的函数
export function handleAbortMessage(webview: { postMessage: (message: any) => void }) {
export function handleAbortMessage(webview: PostMessageble) {
if (currentStream) {
// 标记流已中止
currentStream = null;

View File

@ -1,8 +1,8 @@
import { VSCodeWebViewLike } from '../adapter';
import { PostMessageble } from '../adapter';
import { loadConfig, loadTabSaveConfig, saveConfig, saveTabSaveConfig } from '../util';
import { MCPClient } from './connect';
export async function panelSaveHandler(client: MCPClient | undefined, data: any, webview: VSCodeWebViewLike) {
export async function panelSaveHandler(client: MCPClient | undefined, data: any, webview: PostMessageble) {
if (!client) {
const connectResult = {
code: 501,
@ -35,7 +35,7 @@ export async function panelSaveHandler(client: MCPClient | undefined, data: any,
}
}
export async function panelLoadHandler(client: MCPClient | undefined, webview: VSCodeWebViewLike) {
export async function panelLoadHandler(client: MCPClient | undefined, webview: PostMessageble) {
if (!client) {
const connectResult = {
code: 501,

View File

@ -1,8 +1,8 @@
import { VSCodeWebViewLike } from '../adapter';
import { PostMessageble } from '../adapter';
import { loadConfig, saveConfig } from '../util';
import { MCPClient } from './connect';
export async function settingSaveHandler(client: MCPClient | undefined, data: any, webview: VSCodeWebViewLike) {
export async function settingSaveHandler(client: MCPClient | undefined, data: any, webview: PostMessageble) {
if (!client) {
const connectResult = {
code: 501,
@ -35,7 +35,7 @@ export async function settingSaveHandler(client: MCPClient | undefined, data: an
}
}
export async function settingLoadHandler(client: MCPClient | undefined, webview: VSCodeWebViewLike) {
export async function settingLoadHandler(client: MCPClient | undefined, webview: PostMessageble) {
if (!client) {
const connectResult = {
code: 501,

View File

@ -1,7 +1,7 @@
import { VSCodeWebViewLike } from "../adapter";
import { PostMessageble } from "../adapter";
import { MCPClient } from "./connect";
export function ping(client: MCPClient | undefined, webview: VSCodeWebViewLike) {
export function ping(client: MCPClient | undefined, webview: PostMessageble) {
if (!client) {
const connectResult = {
code: 501,