v0.11.1: Agent Loop稳定性增强 + 6个系统工具 + 搜索引擎替换
【Agent Loop 稳定性】 - P0-1: 工具消息硬限制40条,超出自动删旧 - P0-2: 截断周期从5轮缩短为3轮 - P1-1: 增量记忆提取改为fire-and-forget - P1-2: TOOLS_WITH_DATA_DEPS精简为仅web_fetch - P2: 重复检测改为注入警告而非强制终止 - Final Answer检测增强: >300字自动放行 + 收紧反过早停止 【新增工具】(40→44) - datetime: 系统精确时间(中文日期+时段+人性化) - calculator: 安全数学计算(递归下降解析器) - random: 随机数/随机选择(int/float/pick/string) - uuid: UUID v4生成(crypto.randomUUID) - json_format: JSON格式化+验证+键排序 - hash: MD5/SHA1/SHA256/SHA384/SHA512 【搜索引擎替换】 - Google+DuckDuckGo → 搜狗+360搜索 - 四引擎变为: Bing+百度+搜狗+360搜索 【删除】 - 联网搜索代理全部代码(search-proxy/ + 7文件代理逻辑) - https-proxy-agent依赖 【UI】 - 模型栏: 上下文总长(蓝色)+剩余上下文(绿色)实时显示 - 设置面板上下文长度移至模型栏 - SOUL.md/AGENT.md精简为纯抽象定义 【系统提示词】 - OS环境信息改为从preload同步获取真实值(os.homedir/os.arch/os.userInfo)
This commit is contained in:
@@ -435,6 +435,7 @@ async function handleRetry(): Promise<void> {
|
||||
}
|
||||
renderMessages();
|
||||
await saveCurrentSession();
|
||||
if (loopStats?.prompt_eval_count) updateCtxRemain(loopStats.prompt_eval_count);
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
@@ -594,6 +595,33 @@ function stopGeneration(): void {
|
||||
if (abortController) abortController.abort();
|
||||
}
|
||||
|
||||
/** 更新剩余上下文显示 */
|
||||
function updateCtxRemain(promptEvalCount?: number): void {
|
||||
const el = document.querySelector('#ctxRemain') as HTMLElement;
|
||||
if (!el) return;
|
||||
const total = state.get<number>(KEYS.NUM_CTX, 0);
|
||||
if (!total || !promptEvalCount || promptEvalCount <= 0) {
|
||||
el.style.display = 'none';
|
||||
return;
|
||||
}
|
||||
const remain = total - promptEvalCount;
|
||||
if (remain <= 0) {
|
||||
el.style.display = 'inline-flex';
|
||||
el.textContent = '⚠ 上下文已满';
|
||||
el.style.color = 'var(--danger, #e74c3c)';
|
||||
} else {
|
||||
el.style.display = 'inline-flex';
|
||||
el.style.color = '';
|
||||
const fmt = remain >= 1024 ? `${(remain / 1024).toFixed(0)}K` : String(remain);
|
||||
el.textContent = `剩余 ${fmt}`;
|
||||
}
|
||||
}
|
||||
|
||||
export function clearCtxRemain(): void {
|
||||
const el = document.querySelector('#ctxRemain') as HTMLElement;
|
||||
if (el) el.style.display = 'none';
|
||||
}
|
||||
|
||||
/** Token 预算比例:文件内容最多占用上下文窗口的比例 */
|
||||
const FILE_TOKEN_BUDGET_RATIO = 0.3;
|
||||
|
||||
@@ -1006,6 +1034,8 @@ async function sendMessageWithAgentLoop(text: string, currentSession: ChatSessio
|
||||
}
|
||||
renderMessages();
|
||||
await saveCurrentSession();
|
||||
// 更新剩余上下文
|
||||
if (loopStats?.prompt_eval_count) updateCtxRemain(loopStats.prompt_eval_count);
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
|
||||
Reference in New Issue
Block a user