fix: 超时设置0值(禁用)无法保存的bug

- 保存值改用-1表示默认, 0表示禁用, 正数表示自定义秒数
- 修复parseSec区分空字符串和0值
- loadTimeoutSettings/main.ts初始化同步更新判断逻辑
- 补全types.d.ts中setTimeouts类型声明
This commit is contained in:
thzxx
2026-06-10 09:54:20 +08:00
parent 9559390d4d
commit 0489952ceb
3 changed files with 39 additions and 37 deletions
+13 -15
View File
@@ -362,30 +362,28 @@ async function init(): Promise<void> {
state.set('maxTurns', maxTurns);
(document.querySelector('#inputMaxTurns') as HTMLInputElement).value = String(maxTurns);
// ── v5.2 超时设置 ──
const httpTimeout = await db.getSetting<number>('httpTimeout', 0);
const streamTimeout = await db.getSetting<number>('streamTimeout', 0);
const mcpTimeout = await db.getSetting<number>('mcpTimeout', 0);
// ── v5.2 超时设置:-1=默认, 0=禁用, 正数=自定义 ──
const httpTimeout = await db.getSetting<number>('httpTimeout', -1);
const streamTimeout = await db.getSetting<number>('streamTimeout', -1);
const mcpTimeout = await db.getSetting<number>('mcpTimeout', -1);
// 应用流式超时到 stateagent-engine 读取)
state.set('streamTimeout', streamTimeout > 0 ? streamTimeout * 1000 : 300_000);
// 应用流式超时到 stateagent-engine 读取0=禁用
state.set('streamTimeout', streamTimeout >= 0 ? streamTimeout * 1000 : 300_000);
// 应用 HTTP 和 MCP 超时到主进程
const bridge = window.metonaDesktop;
if (bridge?.tool?.setTimeouts) {
await bridge.tool.setTimeouts({
http: httpTimeout > 0 ? httpTimeout * 1000 : 30_000,
mcp: mcpTimeout > 0 ? mcpTimeout * 1000 : 60_000,
http: httpTimeout >= 0 ? httpTimeout * 1000 : 30_000,
mcp: mcpTimeout >= 0 ? mcpTimeout * 1000 : 60_000,
});
}
// 恢复输入框显示
if (document.querySelector('#inputHttpTimeout')) {
(document.querySelector('#inputHttpTimeout') as HTMLInputElement).value = httpTimeout > 0 ? String(httpTimeout) : '';
(document.querySelector('#inputStreamTimeout') as HTMLInputElement).value = streamTimeout > 0 ? String(streamTimeout) : '';
(document.querySelector('#inputMCPTimeout') as HTMLInputElement).value = mcpTimeout > 0 ? String(mcpTimeout) : '';
}
logInit(`超时设置: HTTP=${httpTimeout||30}s 流式=${streamTimeout||300}s MCP=${mcpTimeout||60}s`);
// 恢复输入框显示(-1显示空, 0显示0, 正数显示数字)
(document.querySelector('#inputHttpTimeout') as HTMLInputElement).value = httpTimeout >= 0 ? String(httpTimeout) : '';
(document.querySelector('#inputStreamTimeout') as HTMLInputElement).value = streamTimeout >= 0 ? String(streamTimeout) : '';
(document.querySelector('#inputMCPTimeout') as HTMLInputElement).value = mcpTimeout >= 0 ? String(mcpTimeout) : '';
logInit(`超时设置: HTTP=${httpTimeout>=0?httpTimeout:30}s 流式=${streamTimeout>=0?streamTimeout:300}s MCP=${mcpTimeout>=0?mcpTimeout:60}s`);
// ── Tool Calling 设置 ──
const toolCallingEnabled = await db.getSetting('toolCallingEnabled', true);