diff --git a/app/src/api/message-bridge.ts b/app/src/api/message-bridge.ts index 91ceef2..7b2e0c7 100644 --- a/app/src/api/message-bridge.ts +++ b/app/src/api/message-bridge.ts @@ -67,8 +67,10 @@ class MessageBridge { this.isConnected.value = false; }; - this.postMessage = (message) => { + this.postMessage = (message) => { if (this.ws?.readyState === WebSocket.OPEN) { + console.log(message); + this.ws.send(JSON.stringify(message)); } }; @@ -105,7 +107,7 @@ class MessageBridge { return () => commandHandlers.delete(commandHandler); } - public destroy() { + public destroy() { this.ws?.close(); this.handlers.clear(); } @@ -118,10 +120,6 @@ const messageBridge = new MessageBridge(); export function useMessageBridge() { const bridge = messageBridge; - onUnmounted(() => { - bridge.destroy(); - }); - return { postMessage: bridge.postMessage.bind(bridge), addCommandListener: bridge.addCommandListener.bind(bridge), diff --git a/app/src/components/main-panel/panel.ts b/app/src/components/main-panel/panel.ts index 35a7419..d6cbccf 100644 --- a/app/src/components/main-panel/panel.ts +++ b/app/src/components/main-panel/panel.ts @@ -1,8 +1,7 @@ import { reactive } from 'vue'; - +import Resource from './resource/index.vue'; import Chat from './chat/index.vue'; -import Resource from './chat/index.vue'; import Prompt from './prompt/index.vue'; import Tool from './tool/index.vue'; diff --git a/app/src/components/main-panel/resource/index.vue b/app/src/components/main-panel/resource/index.vue index 994ebc6..aed794e 100644 --- a/app/src/components/main-panel/resource/index.vue +++ b/app/src/components/main-panel/resource/index.vue @@ -1,16 +1,23 @@ \ No newline at end of file diff --git a/app/src/components/main-panel/resource/resource-templates.vue b/app/src/components/main-panel/resource/resource-templates.vue new file mode 100644 index 0000000..85b5767 --- /dev/null +++ b/app/src/components/main-panel/resource/resource-templates.vue @@ -0,0 +1,94 @@ + + + + + \ No newline at end of file diff --git a/app/src/components/main-panel/resource/resources.ts b/app/src/components/main-panel/resource/resources.ts new file mode 100644 index 0000000..8048baa --- /dev/null +++ b/app/src/components/main-panel/resource/resources.ts @@ -0,0 +1,11 @@ +import { ResourceTemplate, ResourceTemplatesListResponse } from '@/hook/type'; +import { reactive } from 'vue'; + + +export const resourcesManager = reactive<{ + current: ResourceTemplate | undefined + templates: ResourceTemplate[] +}>({ + current: undefined, + templates: [] +}); diff --git a/app/src/components/sidebar/sidebar-item-container.vue b/app/src/components/sidebar/sidebar-item-container.vue index c5e9748..96f7ba9 100644 --- a/app/src/components/sidebar/sidebar-item-container.vue +++ b/app/src/components/sidebar/sidebar-item-container.vue @@ -29,9 +29,7 @@ function isActive(name: string) { return route.name === name; } -function gotoOption(ident: string) { - console.log(router); - +function gotoOption(ident: string) { router.push('/' + ident); } diff --git a/app/src/hook/type.ts b/app/src/hook/type.ts new file mode 100644 index 0000000..4c027a9 --- /dev/null +++ b/app/src/hook/type.ts @@ -0,0 +1,110 @@ +// ==================== 基础类型定义 ==================== +export interface SchemaProperty { + title: string; + type: string; +} + +export interface InputSchema { + type: string; + properties: Record; + required?: string[]; + title?: string; +} + +export interface Argument { + name: string; + required: boolean; +} + +export interface Content { + uri: string; + mimeType: string; + text: string; +} + +export interface MessageContent { + type: string; + text: string; +} + +export interface CasualRestAPI { + code: number + msg: T +} + +// ==================== 响应接口定义 ==================== +export interface ToolsListResponse { + tools: Array<{ + name: string; + description: string; + inputSchema: InputSchema; + }>; +} + +export interface PromptsListResponse { + prompts: Array<{ + name: string; + description: string; + arguments: Argument[]; + }>; +} + +export interface ResourceTemplate { + uriTemplate: string; + name: string; + description: string; +} + +export interface ResourceTemplatesListResponse { + resourceTemplates: ResourceTemplate[] +} + +export interface ResourcesListResponse { + resources: any[]; // 根据示例返回空数组,可进一步定义具体类型 +} + +export interface ResourcesReadResponse { + contents: Content[]; +} + +export interface PromptsGetResponse { + messages: Array<{ + role: string; + content: MessageContent; + }>; +} + +// ==================== 请求接口定义 ==================== +export interface BaseRequest { + method: string; + params: Record; +} + +export interface ResourcesReadRequest extends BaseRequest { + method: 'resources/read'; + params: { + uri: string; + }; +} + +export interface PromptsGetRequest extends BaseRequest { + method: 'prompts/get'; + params: { + name: string; + arguments: Record; + }; +} + +// ==================== 合并类型定义 ==================== +export type APIResponse = + | ToolsListResponse + | PromptsListResponse + | ResourceTemplatesListResponse + | ResourcesListResponse + | ResourcesReadResponse + | PromptsGetResponse; + +export type APIRequest = + | BaseRequest + | ResourcesReadRequest + | PromptsGetRequest; \ No newline at end of file diff --git a/app/src/views/connect/connection-log.vue b/app/src/views/connect/connection-log.vue index 83052d8..1b7a503 100644 --- a/app/src/views/connect/connection-log.vue +++ b/app/src/views/connect/connection-log.vue @@ -36,7 +36,7 @@ const { t } = useI18n(); user-select: text; cursor: text; font-size: 15px; - line-height: 1.3; + line-height: 1.5; background-color: var(--sidebar); } \ No newline at end of file diff --git a/app/src/views/debug/index.vue b/app/src/views/debug/index.vue index 2c29cfd..a2a5c52 100644 --- a/app/src/views/debug/index.vue +++ b/app/src/views/debug/index.vue @@ -1,7 +1,16 @@ @@ -11,7 +20,7 @@ import { defineComponent } from 'vue'; import Welcome from './welcome.vue'; import { tabs } from '@/components/main-panel/panel'; -defineComponent({ name: 'TEMPLATE_NAME' }); +defineComponent({ name: 'debug' });