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 @@
-
+
@@ -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 @@