From b8ea18e568f12f488d27b6d9f8706236101dac0f Mon Sep 17 00:00:00 2001 From: thzxx Date: Sun, 12 Jul 2026 08:04:53 +0800 Subject: [PATCH] =?UTF-8?q?v0.16.2:=20=E4=BC=98=E5=8C=96=E9=99=84=E4=BB=B6?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E8=AF=8D=E6=A0=BC=E5=BC=8F=20=E2=80=94=20?= =?UTF-8?q?=E5=8E=BBbase64/=E7=9C=9F=E5=AE=9E=E6=96=87=E4=BB=B6=E5=90=8D/?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=96=87=E5=AD=97=E5=89=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++--- package-lock.json | 4 ++-- package.json | 2 +- src/main/menu.ts | 2 +- src/renderer/components/input-area.ts | 34 +++++++++------------------ src/renderer/index.html | 2 +- src/renderer/types.d.ts | 1 + 7 files changed, 20 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 88ab12f..92591da 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@

- version + version electron typescript license @@ -253,7 +253,7 @@ npm start ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist ``` -产出:`release/Metona Ollama Setup v0.16.1.exe` +产出:`release/Metona Ollama Setup v0.16.2.exe` ## 🛠️ 常用命令 @@ -501,7 +501,7 @@ npm start ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist ``` -Output: `release/Metona Ollama Setup v0.16.1.exe` +Output: `release/Metona Ollama Setup v0.16.2.exe` ## 🛠️ Common Commands diff --git a/package-lock.json b/package-lock.json index a5d3009..ab52dfd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "metona-ollama-desktop", - "version": "0.16.1", + "version": "0.16.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "metona-ollama-desktop", - "version": "0.16.1", + "version": "0.16.2", "license": "MIT", "dependencies": { "ffmpeg-static": "^5.2.0", diff --git a/package.json b/package.json index 1db113c..b54cd9a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "metona-ollama-desktop", - "version": "0.16.1", + "version": "0.16.2", "description": "Metona Ollama - TypeScript + Electron 桌面 AI 聊天客户端", "main": "dist/main/main.js", "author": "thzxx", diff --git a/src/main/menu.ts b/src/main/menu.ts index e59ea70..4dc1630 100644 --- a/src/main/menu.ts +++ b/src/main/menu.ts @@ -101,7 +101,7 @@ export function createMenu(): void { dialog.showMessageBox(mainWindow!, { type: 'info', title: '关于 Metona Ollama', - message: 'Metona Ollama Desktop v0.16.1', + message: 'Metona Ollama Desktop v0.16.2', detail: 'TypeScript + Electron Ollama AI 聊天客户端\n\nhttps://gitee.com/thzxx/metona-ollama', icon: getIconPath() }); diff --git a/src/renderer/components/input-area.ts b/src/renderer/components/input-area.ts index 3a7267d..6242d24 100644 --- a/src/renderer/components/input-area.ts +++ b/src/renderer/components/input-area.ts @@ -925,17 +925,7 @@ function buildPlanConfirmHtml(plan: string, steps: string[]): string { `; } -/** Base64 编码(支持 UTF-8) */ -function base64Encode(str: string): string { - const bytes = new TextEncoder().encode(str); - let binary = ''; - for (let i = 0; i < bytes.length; i++) { - binary += String.fromCharCode(bytes[i]); - } - return btoa(binary); -} - -function buildFileContentParts(fileContents: Array<{ language: string; content: string }>): string[] { +function buildFileContentParts(fileContents: Array<{ name: string; language: string; content: string }>): string[] { const numCtx = state.get(KEYS.NUM_CTX, 24576); const fileBudget = Math.floor(numCtx * FILE_TOKEN_BUDGET_RATIO); let usedTokens = 0; @@ -963,10 +953,9 @@ function buildFileContentParts(fileContents: Array<{ language: string; content: usedTokens += finalTokens; return JSON.stringify({ - file_name: `文件 ${i + 1}/${fileContents.length}`, + file_name: f.name, file_type: lang, - context_encode: 'base64', - context: base64Encode(text), + context: text, }); }).filter(Boolean); } @@ -1127,10 +1116,12 @@ async function sendMessageWithAgentLoop(text: string, currentSession: ChatSessio // ── 聊天卡片:只显示用户自己的文字 + 附件视觉预览(缩略图/文件卡片/视频帧),不含代码生成的文本标记 ── const displayContent = text || ''; - // ── Ollama API 用:附件 JSON 结构化数据在前,用户文字消息始终在最后 ── + // ── Ollama API 用:用户文字消息在最前,附件 JSON 结构化数据在后 ── const apiParts: string[] = []; + // 用户文字始终放最前 + if (text) apiParts.push(text); if (userFiles.length > 0) { - const fileContents = pendingFiles.map(f => ({ language: f.language, content: f.content })); + const fileContents = pendingFiles.map(f => ({ name: f.name, language: f.language, content: f.content })); const fileParts = buildFileContentParts(fileContents); apiParts.push(...fileParts); logInfo('📄 文件内容已注入', `${fileParts.length} 段, 共 ${fileContents.reduce((s, f) => s + f.content.length, 0)} 字符`); @@ -1150,8 +1141,7 @@ async function sendMessageWithAgentLoop(text: string, currentSession: ChatSessio apiParts.push(JSON.stringify({ file_name: v.name, file_type: v.name.split('.').pop() || 'video', - context_encode: 'base64', - context: base64Encode(JSON.stringify({ + context: JSON.stringify({ frame_count: v.count, fps: 1, duration: Math.round(v.dur), @@ -1161,13 +1151,11 @@ async function sendMessageWithAgentLoop(text: string, currentSession: ChatSessio timestamp: f.timestampSeconds, image_index: imageStart + fi, })), - })), + }), })); imageStart += v.count; } } - // 用户文字始终放最后 - if (text) apiParts.push(text); apiContentForModel = apiParts.join('\n\n'); const msg: ChatMessage = { @@ -1184,7 +1172,7 @@ async function sendMessageWithAgentLoop(text: string, currentSession: ChatSessio } if (userFiles.length > 0) { msg.files = userFiles; - msg._fileContents = pendingFiles.map(f => ({ language: f.language, content: f.content })); + msg._fileContents = pendingFiles.map(f => ({ name: f.name, language: f.language, content: f.content })); } msgsToAdd.push(msg); } else if (text || pendingFiles.length > 0) { @@ -1196,7 +1184,7 @@ async function sendMessageWithAgentLoop(text: string, currentSession: ChatSessio }; if (userFiles.length > 0) { msg.files = userFiles; - msg._fileContents = pendingFiles.map(f => ({ language: f.language, content: f.content })); + msg._fileContents = pendingFiles.map(f => ({ name: f.name, language: f.language, content: f.content })); } msgsToAdd.push(msg); } diff --git a/src/renderer/index.html b/src/renderer/index.html index f17cbb9..9b16d3d 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -28,7 +28,7 @@

Metona Ollama - v0.16.1 + v0.16.2