diff --git a/renderer/src/api/message-bridge.ts b/renderer/src/api/message-bridge.ts index 3efd991..1198cd2 100644 --- a/renderer/src/api/message-bridge.ts +++ b/renderer/src/api/message-bridge.ts @@ -7,6 +7,11 @@ export interface VSCodeMessage { callbackId?: string; } +export interface RestFulResponse { + code: number; + msg: any; +} + export type MessageHandler = (message: VSCodeMessage) => void; export type CommandHandler = (data: any) => void; @@ -135,6 +140,25 @@ class MessageBridge { return () => commandHandlers.delete(wrapperCommandHandler); } + /** + * @description do as axios does + * @param command + * @param data + * @returns + */ + public commandRequest(command: string, data?: any) { + return new Promise((resolve, reject) => { + this.addCommandListener(command, (data) => { + resolve(data as RestFulResponse); + }, { once: true }); + + this.postMessage({ + command, + data + }); + }); + } + public destroy() { this.ws?.close(); this.handlers.clear(); @@ -151,6 +175,7 @@ export function useMessageBridge() { return { postMessage: bridge.postMessage.bind(bridge), addCommandListener: bridge.addCommandListener.bind(bridge), + commandRequest: bridge.commandRequest.bind(bridge), isConnected: bridge.isConnected }; } \ No newline at end of file diff --git a/renderer/src/components/main-panel/chat/index.vue b/renderer/src/components/main-panel/chat/index.vue index 5ae05c1..06757de 100644 --- a/renderer/src/components/main-panel/chat/index.vue +++ b/renderer/src/components/main-panel/chat/index.vue @@ -82,7 +82,7 @@ import { TaskLoop } from './task-loop'; import { llmManager, llms } from '@/views/setting/llm'; import * as Message from './message'; -import Setting from './setting.vue'; +import Setting from './options/setting.vue'; import KCuteTextarea from '@/components/k-cute-textarea/index.vue'; import { provide } from 'vue'; diff --git a/renderer/src/components/main-panel/chat/markdown-highlight.ts b/renderer/src/components/main-panel/chat/markdown/markdown-highlight.ts similarity index 100% rename from renderer/src/components/main-panel/chat/markdown-highlight.ts rename to renderer/src/components/main-panel/chat/markdown/markdown-highlight.ts diff --git a/renderer/src/components/main-panel/chat/markdown-katex.ts b/renderer/src/components/main-panel/chat/markdown/markdown-katex.ts similarity index 100% rename from renderer/src/components/main-panel/chat/markdown-katex.ts rename to renderer/src/components/main-panel/chat/markdown/markdown-katex.ts diff --git a/renderer/src/components/main-panel/chat/markdown.ts b/renderer/src/components/main-panel/chat/markdown/markdown.ts similarity index 100% rename from renderer/src/components/main-panel/chat/markdown.ts rename to renderer/src/components/main-panel/chat/markdown/markdown.ts diff --git a/renderer/src/components/main-panel/chat/prism/index.d.ts b/renderer/src/components/main-panel/chat/markdown/prism/index.d.ts similarity index 100% rename from renderer/src/components/main-panel/chat/prism/index.d.ts rename to renderer/src/components/main-panel/chat/markdown/prism/index.d.ts diff --git a/renderer/src/components/main-panel/chat/prism/index.js b/renderer/src/components/main-panel/chat/markdown/prism/index.js similarity index 100% rename from renderer/src/components/main-panel/chat/prism/index.js rename to renderer/src/components/main-panel/chat/markdown/prism/index.js diff --git a/renderer/src/components/main-panel/chat/prism/prism.css b/renderer/src/components/main-panel/chat/markdown/prism/prism.css similarity index 100% rename from renderer/src/components/main-panel/chat/prism/prism.css rename to renderer/src/components/main-panel/chat/markdown/prism/prism.css diff --git a/renderer/src/components/main-panel/chat/message/assistant.vue b/renderer/src/components/main-panel/chat/message/assistant.vue index ef7d5e1..b548d25 100644 --- a/renderer/src/components/main-panel/chat/message/assistant.vue +++ b/renderer/src/components/main-panel/chat/message/assistant.vue @@ -8,7 +8,7 @@ + + \ No newline at end of file diff --git a/renderer/src/components/main-panel/chat/options/model.vue b/renderer/src/components/main-panel/chat/options/model.vue new file mode 100644 index 0000000..2f227be --- /dev/null +++ b/renderer/src/components/main-panel/chat/options/model.vue @@ -0,0 +1,67 @@ + + + + + \ No newline at end of file diff --git a/renderer/src/components/main-panel/chat/options/setting.vue b/renderer/src/components/main-panel/chat/options/setting.vue new file mode 100644 index 0000000..08e7f2a --- /dev/null +++ b/renderer/src/components/main-panel/chat/options/setting.vue @@ -0,0 +1,201 @@ + + + + + \ No newline at end of file diff --git a/renderer/src/components/main-panel/chat/options/system-prompt.ts b/renderer/src/components/main-panel/chat/options/system-prompt.ts new file mode 100644 index 0000000..80fdeba --- /dev/null +++ b/renderer/src/components/main-panel/chat/options/system-prompt.ts @@ -0,0 +1,19 @@ +import { useMessageBridge } from "@/api/message-bridge"; +import { ref } from "vue"; + +interface SystemPrompt { + name: string; + content: string; +} + +export const systemPrompt = ref({ + name: '默认', + content: '你是一个AI助手, 你可以回答任何问题。' +}); + +export function saveSystemPrompts() { + const bridge = useMessageBridge(); + return new Promise(resolve => { + + }) +} \ No newline at end of file diff --git a/renderer/src/components/main-panel/chat/options/system-prompt.vue b/renderer/src/components/main-panel/chat/options/system-prompt.vue new file mode 100644 index 0000000..c325d88 --- /dev/null +++ b/renderer/src/components/main-panel/chat/options/system-prompt.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/renderer/src/components/main-panel/chat/options/temperature.vue b/renderer/src/components/main-panel/chat/options/temperature.vue new file mode 100644 index 0000000..4085013 --- /dev/null +++ b/renderer/src/components/main-panel/chat/options/temperature.vue @@ -0,0 +1,42 @@ + + + + + \ No newline at end of file diff --git a/renderer/src/components/main-panel/chat/options/tool-use.vue b/renderer/src/components/main-panel/chat/options/tool-use.vue new file mode 100644 index 0000000..cf2a087 --- /dev/null +++ b/renderer/src/components/main-panel/chat/options/tool-use.vue @@ -0,0 +1,85 @@ + + + + + \ No newline at end of file diff --git a/renderer/src/components/main-panel/chat/options/websearch.vue b/renderer/src/components/main-panel/chat/options/websearch.vue new file mode 100644 index 0000000..0db4824 --- /dev/null +++ b/renderer/src/components/main-panel/chat/options/websearch.vue @@ -0,0 +1,26 @@ + + + + + \ No newline at end of file diff --git a/renderer/src/components/main-panel/chat/setting.vue b/renderer/src/components/main-panel/chat/setting.vue deleted file mode 100644 index 056ae08..0000000 --- a/renderer/src/components/main-panel/chat/setting.vue +++ /dev/null @@ -1,438 +0,0 @@ - - - - - \ No newline at end of file diff --git a/renderer/src/components/main-panel/resource/resource-templates.vue b/renderer/src/components/main-panel/resource/resource-templates.vue index 757bb8d..3321a62 100644 --- a/renderer/src/components/main-panel/resource/resource-templates.vue +++ b/renderer/src/components/main-panel/resource/resource-templates.vue @@ -75,7 +75,7 @@ onMounted(() => { const targetResource = resourcesManager.templates.find(template => template.name === tabStorage.currentResourceName); if (targetResource === undefined) { - tabStorage.currentResourceName = resourcesManager.templates[0].name; + tabStorage.currentResourceName = resourcesManager.templates[0]?.name; tabStorage.lastResourceReadResponse = undefined; } }, { once: false }); diff --git a/renderer/src/components/main-panel/tool/tool-logger.vue b/renderer/src/components/main-panel/tool/tool-logger.vue index 68a400b..504ee86 100644 --- a/renderer/src/components/main-panel/tool/tool-logger.vue +++ b/renderer/src/components/main-panel/tool/tool-logger.vue @@ -40,7 +40,7 @@ import { defineComponent, defineProps, computed, ref } from 'vue'; import { useI18n } from 'vue-i18n'; import { tabs } from '../panel'; import { ToolStorage } from './tools'; -import { markdownToHtml } from '../chat/markdown'; +import { markdownToHtml } from '../chat/markdown/markdown'; defineComponent({ name: 'tool-logger' }); const { t } = useI18n(); diff --git a/renderer/src/hook/util.ts b/renderer/src/hook/util.ts index 1b02cba..a119385 100644 --- a/renderer/src/hook/util.ts +++ b/renderer/src/hook/util.ts @@ -23,25 +23,6 @@ export function getCurrentTime() { return timeStr; } - -export function getBase64StringByFilename(filename: string) { - const bridge = useMessageBridge(); - - return new Promise(resolve => { - bridge.addCommandListener('ocr/get-ocr-image', data => { - const { code, msg = {} } = data; - resolve(msg.base64String); - }, { once: true}); - - bridge.postMessage({ - command: 'ocr/get-ocr-image', - data: { - filename - } - }); - }); -} - const blobUrlCache = new Map(); export async function getBlobUrlByFilename(filename: string) { @@ -50,7 +31,13 @@ export async function getBlobUrlByFilename(filename: string) { return blobUrlCache.get(filename); } - const base64String = await getBase64StringByFilename(filename); + const bridge = useMessageBridge(); + const res = await bridge.commandRequest('ocr/get-ocr-image', { filename }); + if (res?.code !== 200) { + return ''; + } + + const base64String = res?.msg?.base64String; if (!base64String) { return ''; diff --git a/renderer/src/main.ts b/renderer/src/main.ts index 68f97c3..0a3a09b 100644 --- a/renderer/src/main.ts +++ b/renderer/src/main.ts @@ -4,7 +4,7 @@ import router from "./router"; import i18n from './i18n'; import ElementPlus from 'element-plus'; import 'element-plus/dist/index.css'; -import "@/components/main-panel/chat/prism/prism.css"; +import "@/components/main-panel/chat/markdown/prism/prism.css"; import 'katex/dist/katex.min.css'; createApp(App) diff --git a/service/src/mcp/client.controller.ts b/service/src/mcp/client.controller.ts index c5c78f6..9ed3ef1 100644 --- a/service/src/mcp/client.controller.ts +++ b/service/src/mcp/client.controller.ts @@ -72,6 +72,7 @@ export class ClientController { @Controller('resources/templates/list') async listResourceTemplates(client: RequestClientType, data: any, webview: PostMessageble) { + if (!client) { return { code: 501,