From 37d0194fabae15d121e86160ab84bfc01048b18e Mon Sep 17 00:00:00 2001 From: Kirigaya <1193466151@qq.com> Date: Mon, 31 Mar 2025 02:05:26 +0800 Subject: [PATCH] update --- app/src/App.vue | 9 +- app/src/api/message-bridge.ts | 16 +++- .../components/main-panel/resource/index.vue | 7 ++ .../main-panel/resource/resouce-reader.vue | 92 +++++++++++-------- .../main-panel/resource/resource-logger.vue | 61 ++++++++++++ .../resource/resource-templates.vue | 15 ++- .../main-panel/resource/resources.ts | 56 ++++++++++- app/src/i18n/ar.json | 5 +- app/src/i18n/de.json | 5 +- app/src/i18n/en.json | 5 +- app/src/i18n/fr.json | 5 +- app/src/i18n/ja.json | 5 +- app/src/i18n/ko.json | 5 +- app/src/i18n/ru.json | 5 +- app/src/i18n/zh-cn.json | 5 +- app/src/i18n/zh-tw.json | 5 +- app/src/views/connect/connection-log.vue | 1 - app/src/views/connect/index.vue | 2 +- 18 files changed, 233 insertions(+), 71 deletions(-) create mode 100644 app/src/components/main-panel/resource/resource-logger.vue diff --git a/app/src/App.vue b/app/src/App.vue index 8429f44..230cf96 100644 --- a/app/src/App.vue +++ b/app/src/App.vue @@ -22,7 +22,7 @@ const bridge = useMessageBridge(); bridge.addCommandListener('hello', data => { pinkLog(`${data.name} 上线`); pinkLog(`version: ${data.version}`); -}); +}, { once: true }); // 发送消息 @@ -47,14 +47,11 @@ onMounted(() => { connectionArgs.commandString = 'uv run mcp run ../servers/main.py'; connectionMethods.current = 'STDIO'; - let handler: (() => void); - handler = bridge.addCommandListener('connect', data => { + bridge.addCommandListener('connect', data => { const { code, msg } = data; connectionResult.success = (code === 200); connectionResult.logString = msg; - - handler(); - }); + }, { once: true }); setTimeout(() => { doConnect(); diff --git a/app/src/api/message-bridge.ts b/app/src/api/message-bridge.ts index 7b2e0c7..b91c875 100644 --- a/app/src/api/message-bridge.ts +++ b/app/src/api/message-bridge.ts @@ -12,6 +12,10 @@ export type CommandHandler = (data: any) => void; export const acquireVsCodeApi = (window as any)['acquireVsCodeApi']; +interface AddCommandListenerOption { + once: boolean // 只调用一次就销毁 +} + class MessageBridge { private ws: WebSocket | null = null; private handlers = new Map>(); @@ -94,17 +98,21 @@ class MessageBridge { /** * @description 注册一个命令的执行器 - * @param handler * @returns */ - public addCommandListener(command: string, commandHandler: CommandHandler) { + public addCommandListener(command: string, commandHandler: CommandHandler, option: AddCommandListenerOption) { if (!this.handlers.has(command)) { this.handlers.set(command, new Set()); } const commandHandlers = this.handlers.get(command)!; - commandHandlers.add(commandHandler); - return () => commandHandlers.delete(commandHandler); + const wrapperCommandHandler = option.once ? (data: any) => { + commandHandler(data); + commandHandlers.delete(wrapperCommandHandler); + } : commandHandler; + + commandHandlers.add(wrapperCommandHandler); + return () => commandHandlers.delete(wrapperCommandHandler); } public destroy() { diff --git a/app/src/components/main-panel/resource/index.vue b/app/src/components/main-panel/resource/index.vue index 885bad0..cdc74b2 100644 --- a/app/src/components/main-panel/resource/index.vue +++ b/app/src/components/main-panel/resource/index.vue @@ -16,6 +16,10 @@ + + @@ -24,6 +28,7 @@ import { defineProps } from 'vue'; import ResourceTemplates from './resource-templates.vue'; import ResourceReader from './resouce-reader.vue'; +import ResourceLogger from './resource-logger.vue'; const props = defineProps({ tabId: { @@ -40,6 +45,8 @@ const props = defineProps({ .resource-module { padding: 20px; height: 100%; + display: flex; + justify-content: space-between; } .resource-module .left { diff --git a/app/src/components/main-panel/resource/resouce-reader.vue b/app/src/components/main-panel/resource/resouce-reader.vue index 6b5aae9..b88978d 100644 --- a/app/src/components/main-panel/resource/resouce-reader.vue +++ b/app/src/components/main-panel/resource/resouce-reader.vue @@ -1,24 +1,27 @@