thzxx
|
8973ea6d47
|
feat: 升级至 v0.3.11 — 流式输出性能优化 12 项,解决长内容卡死
针对 AI 流式输出长内容时应用卡死问题,实施 12 项性能优化:
渲染层优化(F1/F3/F7):
- F1: React.memo 包裹 MessageItem/AssistantMessage,跳过历史消息重渲染
- F3: 流式时用纯文本渲染,避免 ReactMarkdown 全量重解析 O(n²)
- F7: useMemo 缓存 ReactMarkdown 元素,非流式时复用实例
滚动与布局(F2/F4/F10/F12):
- F2: 滚动节流 rAF + 100ms throttle + trailing 兜底,避免高频布局
- F4: CSS content-visibility 准虚拟滚动,跳过不可见区域布局
- F10: CSS contain 隔离 markdown 布局计算
- F12: 滚动容器 transform: translateZ(0) GPU 加速
状态与 IPC 批处理(F5/F8/F9):
- F5: 渲染进程 text_delta rAF 批处理,合并多次 store 写入
- F8: 主进程 text_delta 32ms 节流合并,降低 IPC 频率
- F9: reasoning_delta traceSteps thought 走 rAF 批处理
代码清理(F11):
- F11: 移除 rehypeRaw,节省 raw HTML 解析开销 + 防 AI 输出注入
验证:tsc --noEmit 通过,flush 逻辑在 done/error/cleanup 三处正确执行。
v0.3.11
|
2026-07-21 14:38:27 +08:00 |
|
thzxx
|
cd681b949a
|
feat: 升级至 v0.3.10 — LLM 配置批量保存 + workspace.path 失败感知 + provider 切换防御性修复
- 新增 config:setBatch IPC:批量写入 8 个 LLM 字段后统一 reloadAdapter,
解决设置页串行 config:set 在中间态触发"LLM 配置不完整"错误的问题
- SettingsModal.handleSave 和 OnboardingWizard.handleNext 改用 setBatch
- workspace.path 写入独立文件失败时返回 success:false(config:set 和 setBatch 一致),
避免用户误以为保存成功但下次启动仍使用旧路径
- setBatch 将 provider 切换清空 apiKey 的逻辑移到循环前执行,
消除对 entries 中 llm.provider 必须出现在 llm.apiKey 之前的隐含顺序依赖
v0.3.10
|
2026-07-21 13:14:42 +08:00 |
|
thzxx
|
64af91bde9
|
feat: 升级至 v0.3.9 — 工具批量审批 + run_command 频率限制优化 + Toast 规范
1. 工具批量审批:解决并行工具审批弹框覆盖问题,新增批量 IPC 通道和列表 UI,支持同工具多次调用分组展示;2. 审批弹框健壮性:超时 toast 防风暴、agent 状态同步清空、ErrorBoundary 防白屏;3. run_command maxFrequency 从 3 调整为 10;4. 开发规范新增 Toast 通知铁律(必须使用 MeToast)
v0.3.9
|
2026-07-21 11:43:41 +08:00 |
|
thzxx
|
76bd72b702
|
fix(trace): TraceViewer 出现滚动条时自动滚到底部
新增 scrollContainerRef + useEffect,监听 traceSteps / agentStatus /
groups.length 变化时自动滚到底部,与 MessageList 同款 throttle 80ms 模式,
避免流式事件高频触发导致滚动卡顿。
v0.3.8
|
2026-07-20 22:08:14 +08:00 |
|
thzxx
|
5ec32f33da
|
fix(trace): Trace Viewer 改为按 runId 分组渲染,显示所有轮次
修复 v0.3.8 引入的"覆盖"问题:sendMessage 清空 traceSteps 导致
前一条消息的 trace 被永久丢失。
方案 A+ — 既不叠加也不覆盖,按 runId 分组展示所有轮次:
- agent-store.ts: 回退 sendMessage 的 traceSteps: [] 清空(保留历史)
保留 tokenUsage 重置(当前 run 统计应该重置)
- TraceViewer.tsx: 重写渲染逻辑
- 新增 groupByRun 工具函数,按 runId 分组 + 计算轮次序号
- 每个 run 独立 section,带"第 N 轮"标题 + 状态徽标(进行中/已完成)+ 步数
- 当前 run 高亮(primary 边框 + 浅色背景 + MessageSquare 图标)
- 历史 run 弱化(divider 边框 + 透明背景 + 0.85 透明度)
- 顶部统计"共 N 轮"
- isCurrent 判定改为"当前 run 的最后一个 step"(之前是"全局最后一个")
useAgentStream 的 runId 隔离逻辑(v0.3.8 已加)无需改动,
正好支撑多 run 共存设计:isSameIteration 校验 runId,跨 run 孤立
TERMINATED 跳过不创建 step。
冒烟测试场景:
- 多轮对话 → 每轮独立显示,不再叠加
- 历史 trace 不丢失 → 切换会话回来仍可见所有轮次
- 当前 run 高亮 → 视觉聚焦"正在进行的活动"
|
2026-07-20 21:57:03 +08:00 |
|
thzxx
|
dde21f0b3f
|
feat: 升级至 v0.3.8 — Trace Viewer 叠加修复 + LLM 配置校验改造 + toast 反馈统一
- Trace Viewer 叠加渲染修复
- sendMessage 补 traceSteps/tokenUsage 重置(止血)
- TraceStep 加 runId 字段,useAgentStream 按 runId 判定同迭代(稳健改造)
- LLM 配置校验中等改造(SettingsModal LLMSettings)
- 取消 onChange 实时落库,改为本地 state + Save 按钮统一提交
- 字段级 inline error:Base URL http(s):// 正则、Model 空格校验、contextWindow ≥ 4096
- Provider 切换清空 Model(之前只清 apiKey)
- 保存结果改用 metona-toast(不再用 Alert)
- toast 反馈机制全面统一(15 处问题修复)
- ContextMenu: 原生 confirm/prompt 改 MUI Dialog(新增 useDialogStore + ContextMenuDialogHost)
- ContextMenu: 抽 copyWithToast helper 替代散落 7 处静默失败
- OnboardingWizard: 配置保存失败静默改 toast.error
- useKeyboardShortcuts: Ctrl+N / Ctrl+Shift+C 失败补 toast
- SettingsModal: inheritFiles 失败 toast.warning、handleApply 失败 toast.error
- LogsSettings: resultAlert Alert 改 toast(保留 Dialog 确认)
- MemoryViewer: 删除失败改 toast(加载/搜索保留 Alert)
- TaskList: create/update/delete/无会话改 toast
- agent-store: sendMessage/session 失败补 toast(保留 system message)
- 删除当前会话同步清空 ChatPanel/DetailPanel
- Sidebar confirmDelete + ContextMenu delete 均补 agent-store 重置
- 修复 useSessionStore.removeSession 不触发 agent-store 同步的遗漏
|
2026-07-20 21:22:20 +08:00 |
|
thzxx
|
ceb8ee644d
|
feat: 升级至 v0.3.7 — 前后端状态同步与错误处理全量修复
核心引擎修复:
- CE-1: 上下文压缩摘要 role 从 system 改为 user,避免被 adapter 过滤
- CE-2: 工具失败时优先使用 error 字段(engine/openai-format/ollama 三处)
- P0-1: DeadLoopError 终止时正确传 error 参数,前端可见 ERROR 事件
- MT-1: 新增 waitForAbort 方法,abortSession 等待 run 结束再返回
- MT-2: TERMINATED 状态到达时标记步骤完成,避免 Trace Viewer 转圈
- MT-3: 压缩边界检测孤立 tool 消息,避免 API 400 错误
- isRetryableError 与 catch 分支统一 toLowerCase
IPC 与主进程修复:
- P0-2: createAdapter 配置缺失返回 null,FALLBACK_ADAPTER 兜底
- P0-3: reloadAdapter 失败返回 success:false 通知前端
- P1-5: 校验失败发 ERROR+DONE 流事件,防止 isStreaming 卡死
- P1-6: configLoaded 标志,配置加载前禁用发送按钮
- P1-7: MCP initialize 移到 agentLoop 后,完成后同步工具
- P2-11: beforeLoad 在 loadURL 前注册 IPC handler
- P2-12: provider 切换竞态保护
前端状态同步修复:
- clearSessions 后同步清空前端会话与消息状态
- clearMemories 通过 memoryVersion 触发 MemoryViewer 重新加载
- ContextMenu 4 个 session 操作补全 IPC 调用与 try/catch
- useConfig 配置保存失败回滚 UI 并提示
- handleToggle 工具切换失败回滚单个工具状态
错误处理全量补全:
- 所有 await window.metona 调用补全 try/catch 与 toast 反馈
- MCP addServer/toggleServer/removeServer 检查返回值
- showItemInFolder 检查返回值(handleOpen/handleOpenInFolder)
- sse-stream/ollama NDJSON 解析失败改为 log.warn
- adapter throwHttpError 带 status 属性供 isRetryableError 判断
|
2026-07-16 22:40:32 +08:00 |
|
thzxx
|
656c6b7af1
|
feat: 升级至 v0.3.4 — 接入 Xiaomi MiMo Provider + 文档全量校准
新增 MiMo (小米) LLM Provider 适配器,支持 mimo-v2.5-pro 和 mimo-v2.5 两个文本模型,复用 OpenAI 兼容 SSE 流式解析,支持 Thinking 模式和 Function Calling。同步校准全量 docs 文档与 README 使其与实际代码一致。
主要变更:
- 新增 mimo.adapter.ts 适配器(SSE + thinking.type + max_completion_tokens)
- 修复 thinking 逻辑 bug:禁用思考时未传 temperature/top_p
- 补全 sse-stream.ts 的 MiMo 缓存字段映射(prompt_tokens_details.cached_tokens)
- 补全 sse-stream.ts 的 finish_reason 映射(repetition_truncation)
- 注册 MiMo 适配器到 adapters/index.ts、main.ts 工厂
- handlers.ts 添加 mimo.contextWindow 热重载触发
- database.service.ts seed 添加 mimo 默认配置
- SettingsModal/OnboardingWizard/Header 添加 MiMo Provider UI
- constants.ts PROVIDER_LABELS 添加 mimo
- .env.example 添加 MIMO_API_KEY/MIMO_BASE_URL
- 反向修改 4 个 docs HTML 设计文档(工具数量/版本日期/适配器列表/数据库表)
- 反向修改 Agent网络工具通用设计-v2.md 附录 B 文件索引
- 完全重写 README.md(v0.3.4、27 工具、4 适配器、9 表)
|
2026-07-15 22:28:09 +08:00 |
|
thzxx
|
4554177db0
|
feat: 升级至 v0.3.3 — 新增 delete_file 工具 + 文件工具全面优化
## 主要变更
### 1. 新增 delete_file 工具(26 → 27 个)
- 支持:删除文件/空目录(默认)/递归删除非空目录(recursive: true)
- 5 层安全防护:
* isPathWithinWorkspace — 路径遍历防护
* isProtectedWorkspaceFile — MEMORY.md 拦截
* 工作空间根目录保护 — 禁止删除 workspace 本身
* 递归删除需显式开启 — 默认仅删空目录
* riskLevel: HIGH + requiresPermission — 破坏性操作必须确认
- 友好错误处理:ENOTEMPTY 时提示设置 recursive: true
### 2. 文件工具全面优化(6 个工具)
- 抽取共享代码到 file-guard.ts:
* safeResolvePath — 合并路径遍历 + MEMORY.md 校验
* matchGlob — 简易通配符匹配
* extractErrorMessage — 统一错误提取
* MAX_FILE_SIZE_BYTES (10MB) / FILE_TOOL_TIMEOUT_MS (15s) / MAX_LINE_LENGTH (10000)
- read_file:stat 预检 + 超长行截断 + 二进制检测 + 大小上限
- write_file:原子写入(临时文件+rename)+ 内容大小上限 + append 返回 new_file_size
- list_directory:1000 结果上限 + modified time + include_hidden 参数 + 提前终止优化
- search_files:regex lastIndex 修复 + context_lines + include_hidden + 大文件跳过
- file_editor:dry_run 预览模式 + 文件大小上限
### 3. 审计修复(1 FAIL + 3 WARN)
- FAIL: isBinaryFile 用 bytesRead 限制循环,修复 < 8KB 文本误判为二进制
- WARN-1: file-editor dry_run preview 分模式计算,修复 insert 范围过大
- WARN-2: write_file 允许空字符串创建空文件
- WARN-3: list_directory listDir 提前终止,避免大目录全量遍历
|
2026-07-14 21:42:46 +08:00 |
|
thzxx
|
0fc589e73b
|
feat: 升级至 v0.3.2 — 工具体系扩展至 26 个 + Context Window 可配置化
## 主要变更
### 1. Context Window 可配置化(v0.3.1 延续)
- DeepSeek/Agnes contextWindow 不再写死 1M,可在设置中配置(min 4096)
- 修复 Engine 128K vs Adapter 1M 不一致 bug,Engine 从 adapter.getContextWindow() 读取
- 热重载 configSig 加入 contextWindow,配置变化即时生效
### 2. 新增 11 个工具(15 → 26 个)
- Git 工具集(4):git_status, git_diff, git_log, git_commit
- 开发工具集(3):lint_code, run_tests, project_info
- HTTP 请求(1):http_request(Node 18+ fetch + AbortController)
- TODO 管理(1):todo_write(会话级内存 + LRU 淘汰)
- 结构化思考(1):think(无副作用思考空间)
- 图片查看(1):view_image(base64 data URL,多模态 LLM 支持)
### 3. 审计修复(2 FAIL + 14 WARN)
- FAIL-1: registry.ts truncateResult 添加 dataUrl 白名单(图片不被截断)
- FAIL-2: todo.ts 添加 LRU 策略 + clearSession 静态方法
- WARN-1: run_tests filter 字符白名单校验,防 cmd 元字符注入
- WARN-2: dataUrl 检测前置到 stringify 之前,避免大图片无意义序列化
- WARN-3: todo.ts 实现真正 LRU(访问刷新位置,非 FIFO)
- WARN-4: git_diff maxBuffer 提升至 5MB,支持超大变更集
- WARN-5: log.info 移至 DelegateTaskTool 注册后,输出正确的 26
- WARN-6: riskColors 添加 critical: 'error' 键
- WARN-7: 所有 execFileAsync 显式设置 encoding: 'utf-8'
- WARN-8: git_log --author 拆分为独立参数
- WARN-9: todo_write 权限从 WRITE 改为 READ
- WARN-10: description 区分与 task_manager 的不同用途
### 4. PolicyEngine 策略
- 新增 11 条策略,26 个工具 + mcp_* 全覆盖
- git_commit: WRITE + requireConfirmation
- todo_write: READ(内存操作)
|
2026-07-14 21:15:54 +08:00 |
|
thzxx
|
e4d81d8247
|
feat: 升级至 v0.3.1 — 全量代码审计修复 + 安全增强
本次升级基于完整代码审查,修复 Critical/High/Medium/Low 四级共 96 项问题,
并通过返工审计修复 10 项遗留问题,tsc 双端类型检查零错误。
Critical (10/10 完成):
- C-4: command.ts 接入 shell-quote 进行 token-level 注入检测,替代原有正则匹配
可防御 r"m" -rf /、$'rm'、$(echo rm) 等字符串拼接绕过
High (11/11 完成):
- 竞态保护、Promise.allSettled、AbortController 资源泄漏、IPC 参数校验等
Medium (55/55 完成):
- 事务保护、敏感数据脱敏、枚举校验、MUI v9 Stack prop 迁移、
React 组件 cancelled 标志、类型收窄等
Low (20/20 完成):
- 辅助方法提取(flushToolCallBuffer/scoreAndPushMemory/tryAddColumn 等)
- nanoid 统一替代 Date.now()+Math.random()
- confirm() 替换为 MUI Dialog、useMemo 缓存、魔法数字命名化等
返工审计修复 (10/10 完成):
- L-11: LogsSettings 残留的原生 confirm()/alert() 全部替换为 MUI Dialog/Alert
- M-53: MemoryViewer handleSearch 独立 ref,修复 searching 状态卡死
- M-42: 脱敏短值(length <= 4)泄露修复
- M-47: tasks:update 补全 title/description 类型校验
- L-9: ollama.adapter 非流式路径 nanoid 统一
- M-45: audit:query limit 策略与 memory:listAll 一致化
- SettingsModal handleConfirmRemove 补全 try/catch + loadServers cleanup
- L-15: CommandPalette useMemo 补全 sessions 响应式依赖
- useAgentStream 事件类型补全 seq/timestamp 字段
新增依赖: shell-quote + @types/shell-quote
版本号: 0.3.0 -> 0.3.1
|
2026-07-13 22:36:58 +08:00 |
|
thzxx
|
4f5f570ac8
|
fix: 修复多轮对话400/Provider通知反复弹出/浏览器环境隔离三大缺陷
1. 多轮对话第二次发消息 AI 不响应 (CRITICAL)
handlers.ts: 保存 tool 结果消息到数据库,DeepSeek API 要求 assistant 有 tool_calls 时后续必须有对应 tool 结果消息
openai-format.ts: assistant 有 tool_calls 时 content 设为 null (API 规范,空字符串会导致 400)
agent-store.ts: 前端加载历史时过滤 tool 消息,避免冗余卡片
2. Provider 切换通知每次发消息都弹出
main.ts: reloadAdapter 添加配置签名比较 (lastConfigSig),配置未变化时幂等返回 true,不再重建 adapter 或发 toast
3. 浏览器工具无环境隔离
browser-window-manager.ts: 独立 partition 隔离 Cookie/存储; 恢复 webSecurity,CORS 通过 webRequest 处理; setWindowOpenHandler 拦截 window.open; 并发互斥锁串行化 open 调用; destroy() 改用 win.destroy() + clearStorageData 清理残留
|
2026-07-12 21:21:55 +08:00 |
|
thzxx
|
d39f390be4
|
fix: 补全5个工具的权限策略 — task_manager/delegate_task 等不再被拦截
根因:DEFAULT_POLICIES 只配置了10个工具的策略,file_editor、code_search、
diff_viewer、task_manager、delegate_task 这5个工具未配置策略,
PolicyEngine.checkAuthorization 对无策略工具返回 authorized: false,
导致 "Blocked: No policy configured for tool" 错误。
新增策略(按工具风险级别配置):
- file_editor: WRITE + deniedPatterns(系统目录/MEMORY.md) + requireConfirmation + maxFrequency 10
- code_search: READ(只读搜索)
- diff_viewer: READ(只读对比)
- task_manager: WRITE(数据库读写,低风险)
- delegate_task: EXTERNAL_ACTION + maxFrequency 5(启动 SubAgent)
|
2026-07-12 20:23:56 +08:00 |
|
thzxx
|
ab9ef79a41
|
fix: 修复详情栏标签页点击无响应 — setDetailTab 对象简写引用了不存在的变量
根因:setDetailTab: (tab) => set({ detailTab })
对象简写 { detailTab } 等同于 { detailTab: detailTab },会查找变量 detailTab,
但参数名是 tab,作用域中不存在 detailTab 变量,每次点击 Tab 都抛 ReferenceError。
错误在 onChange 事件回调中抛出,React 不用 ErrorBoundary 捕获事件异常,
所以应用不崩溃,只是 Tab 永远不响应。
修复:set({ detailTab: tab }) — 显式赋值,避免简写陷阱
|
2026-07-12 20:09:55 +08:00 |
|
thzxx
|
025f00171b
|
feat: 升级至 v0.3.0 — 安全增强、死循环检测、六轮全面审计修复
大版本迭代,新增安全增强、Agent Loop 增强、UI/UX 增强,经六轮全面审计修复所有问题。
新增功能:
- OutputValidator 事实一致性检查 + 幻觉检测
- PromptInjectionDefender 语义级检测(指令性动词密度、角色边界、分隔符嵌套)
- DeadLoopError 死循环检测(连续3轮相同工具调用自动终止)
- PolicyEngine maxFrequency 滑动窗口频率限制
- MemoryManager TF-IDF 语义检索 + IDF 缓存原子替换
- 斜杠命令(/tool /memory /clear /export)+ 快捷键(Ctrl+B/J/Shift+F/N/[/])
- 专注模式(Ctrl+Shift+F)带面板状态快照保存/恢复
六轮审计修复(共修复 3 CRITICAL + 8 HIGH + 13 MEDIUM + 11 LOW):
CRITICAL:
- main.ts 传入 createAdapter 而非 reloadAdapter,导致 Provider 切换完全失效
- Ctrl+N/Ctrl+[/Ctrl+] 不同步 agent-store,导致消息发到错误会话
- engine.ts emit('error') 无监听器导致 DONE 事件丢失、前端卡死
HIGH:
- 死循环检测在工具执行之后(移入 PARSING 后 EXECUTING 前)
- deadLoop 事件前端未处理
- ConfirmationHook.clearPending 从未调用导致定时器泄漏
- engine.ts retry abort listener 未移除导致监听器堆积
- MCPManager JSON.parse 无 try-catch 导致初始化崩溃
- sendMessage 自动创建会话不同步 session-store
- setCurrentSession 竞态导致旧请求覆盖新会话数据
MEDIUM:
- toggleFocusMode 覆盖用户原有面板状态
- 正则检测可被常见词绕过
- 频率限制内存泄漏 + customPolicies 覆盖
- LIKE 回退转义未包含反斜杠
- OutputValidator 新功能未传入 toolResults/context
- MemoryConsolidator LLM 调用无超时保护
- AuditService 每次 log 都查询数据库
- browser-window-manager 超时后未停止页面加载
- output-validator URL 比较大小写敏感
- FileReader 无 onerror 导致 Promise 永久挂起
- /clear /export 不关闭斜杠菜单
- 专注模式下 toggleSidebar/toggleDetail 未恢复另一面板快照
LOW:
- abortPromise 事件监听器堆积
- RateLimitHook Map 内存泄漏
- memory.ts await 同步方法
- PolicyEngine 死代码清理
- Orchestrator sessionDepth 会话结束不清理
- workspace.service.ts 元数据插入边界问题
|
2026-07-12 19:46:47 +08:00 |
|
thzxx
|
3858f5ede3
|
feat: 工具执行超时可配置 + 修复硬编码盖过工具自定义超时的 bug
1. 新增 agent.toolExecutionTimeoutMs 配置(默认 120s,范围 10~600s),AgentSettings 加输入框
2. 修复 engine.ts 硬编码 120s 会盖过 delegate-task(5min)/web-search(5min) 等工具自定义 timeoutMs 的 bug:改为取 max(配置值, tool.timeoutMs)
3. main.ts 启动时从 ConfigService 加载;handlers.ts 监听 config:set 即时更新
|
2026-07-12 14:51:12 +08:00 |
|
thzxx
|
6d31498e6a
|
fix: 修复工作空间设置白屏 — DialogActions 未导入 + 加 ErrorBoundary
根因:WorkspaceSettings 的重启确认 Dialog 内使用了 DialogActions,但未在 import 中声明,运行时为 undefined,React.createElement(undefined) 抛错导致整个应用白屏
修复:1) 补充 DialogActions 导入;2) 给每个设置 Tab 包 ErrorBoundary,避免单 tab 渲染失败导致整体白屏
|
2026-07-12 14:35:03 +08:00 |
|
thzxx
|
4a5ddab80a
|
style: 优化工具管理自动执行行的可读性
背景改用 alpha(success.main, 0.12) 主题感知透明色,文字和按钮保持不透明;左侧加绿色状态条 + 圆点指示;取消自动按钮改为 contained error(危险动作更醒目);统一按钮字号 11、minWidth 72
|
2026-07-12 14:32:17 +08:00 |
|
thzxx
|
1eabed9b70
|
feat: 升级至 v0.2.3 — Token 估算优化、工具确认超时改进、工作空间标签页
1. Token 估算优化(核心改进):新增 token-estimator.ts 智能字符估算(中文 1.5 token/字、ASCII 0.25 token/字),替换三处旧的 length/2 粗略估算,中文场景准确度从 ~50% 提升到 ~90%
2. 工具确认超时改进:超时时间可配置(30s~600s)、超时 toast 通知、ConfirmationDialog 倒计时 UI(进度条 + 最后 10 秒红色脉冲动画)、SettingsModal 新增配置入口
3. 详情栏新增 Workspace 标签页:workspace:getInfo IPC + WorkspaceViewer 组件(文件预览、目录状态、在文件管理器打开)
|
2026-07-12 14:20:05 +08:00 |
|
thzxx
|
0363176215
|
feat: 工作空间切换校验 + 初始化检测 + 继承基础设置
新增功能:
- workspace:check IPC — 校验路径有效性 + 检测 4 个必需文件状态
- workspace:inheritFiles IPC — 从旧工作空间继承 SOUL/AGENTS/USERS 到新工作空间
- app:restart IPC — 渲染进程触发应用重启(app.relaunch + app.exit)
前端 WorkspaceSettings 改造:
- 选择文件夹后立即校验路径(是否存在、是否目录、4 个必需文件状态)
- 显示工作空间状态:
· 新工作空间 → 提示将自动创建 4 个文件
· 部分文件缺失 → 提示缺失文件将自动创建
· 已有工作空间 → 提示将直接加载现有配置
- 继承选项:当切换到新工作空间时,可勾选继承 SOUL/AGENTS/USERS.md
· MEMORY.md 不继承(记忆与工作空间项目上下文绑定)
· 继承白名单:仅允许 SOUL.md、AGENTS.md、USERS.md(防路径遍历)
- 确认切换按钮 + 取消按钮
- 切换完成后弹出重启确认对话框(立即重启 / 稍后手动重启)
安全考虑:
- workspace:inheritFiles 使用文件名白名单,防止路径遍历攻击
- workspace:check 返回 resolvedPath,前端只展示不直接用于文件操作
- app:restart 延迟 200ms 让 IPC 响应先返回
|
2026-07-12 13:59:31 +08:00 |
|
thzxx
|
aa13a98f63
|
feat: 升级至 v0.2.2 — 工作空间路径注入、Provider 切换修复、编码与样式优化
功能增强:
- System Prompt 注入当前工作空间路径到动态区(LLM 可使用绝对路径调用工具)
- ContextBuilder.buildSystemPrompt 新增 workspacePath 参数
Provider 切换修复:
- reloadAdapter 返回 boolean,失败时 sendMessage 中止发送
- 切换 Provider 时自动清空 apiKey(不同 Provider key 不通用)
- apiKey 为空时显示警告提示
- Provider 切换事件加 sessionId 字段
编码修复:
- run_command 使用 encoding: 'buffer' 获取原始字节
- 新增 decodeBuffer 智能解码:UTF-8 严格 → GBK → UTF-8 宽松
- 修复不响应 chcp 的 Windows 命令中文乱码问题
样式优化:
- 代码块底色改用主题变量(灰底主题色文字,双主题适配)
- 表格标题 th/td 底色和文字色改用主题变量
- CodeBlock 组件 pre 背景从 secondary.main 改为 background.default
- 设置面板已自动执行工具行 opacity 0.8→0.15(淡绿底,文字清晰)
版本号 0.2.1 → 0.2.2
|
2026-07-12 13:46:09 +08:00 |
|
thzxx
|
6e49c44742
|
style: 加宽侧边栏(260→300)和详情栏(320→360)
|
2026-07-12 13:03:11 +08:00 |
|
thzxx
|
3c5aea8fb7
|
feat: 升级至 v0.2.1 — 流式渲染修复、安全增强、工具自动执行
流式渲染修复:
- runId 机制防止 abort 后旧流事件污染新 run
- run lock 防止并发 run 污染引擎状态
- abort race 提前退出工具执行等待
- TERMINATED 状态通过 stateChange 发射
- tool_call_delta 流式参数拼接 + pending 占位替换
- 首轮卡片创建路径统一,traceStep 按 ID 精确匹配
- compressed 事件转发为 toast 通知
安全增强:
- ConfirmationHook 支持持久化自动执行(跨会话)
- 设置面板新增自动执行工具管理 UI
- SandboxManager 双重安全校验 fail-closed
- 审计日志链式哈希防篡改
- PromptInjectionDefender 中文注入标记清理
- scanCode 28 模式 + base64/$() 检测
- validatePath realpathSync 防符号链接逃逸
- code-search 使用 execFile 防命令注入
新增工具:
- file_editor、code_search、task_manager、diff_viewer
其他:
- Agent Loop 加 PARSING/REFLECTING 状态 + 指数退避重试
- MemoryManager TF-IDF 语义检索
- run_command Windows 中文编码修复(chcp 65001)
- 版本号 0.2.0 → 0.2.1
|
2026-07-12 12:54:52 +08:00 |
|
thzxx
|
469f53b623
|
chore: bump version to 0.1.4
|
2026-07-09 20:41:22 +08:00 |
|
thzxx
|
153468f8f9
|
fix: 切换 Provider 后不生效 + Ollama 模式 API Key 输入框仍显示
1. reloadAdapter 加 try-catch: 配置中间状态 createAdapter 抛异常时不阻断 IPC, 记录日志即可
2. sendMessage 时兜底调用 reloadAdapter: 确保每次发消息用最新 adapter, 不依赖 config:set 的逐字段 reload
3. Ollama 模式隐藏 API Key 输入框, 切换到 Ollama 时自动清空旧 key
4. 切换 Provider 时自动填充默认 URL(仅旧 URL 为默认值或空时)
|
2026-07-09 20:35:13 +08:00 |
|
thzxx
|
dc5f8aedcd
|
refactor: 内置搜索与 SearXNG 参数完全独立
内置模式: maxResults=30, fetchTop=5 固定默认值, 不读取 SearXNG 配置
SearXNG 模式: max_results/fetch_count 由配置面板控制
统一使用 useSearXNG 变量判断模式
|
2026-07-07 22:31:28 +08:00 |
|
thzxx
|
b07e226bc1
|
fix: SearXNG 配置完全失效 — 三层根因修复
根因1: 工具定义暴露 max_results/fetch_top 给 AI, AI 自行决定传 10 覆盖配置面板的 30
修复1: 从工具参数移除 max_results/fetch_top, 配置面板为唯一权威, AI 不可覆盖
根因2: 缓存 key 不含 maxResults/fetchTop, 配置变更后命中旧缓存返回错误结果数
修复2: 缓存 key 加入 maxResults 和 fetchTop
根因3: SearXNG API 用非标准 results_count 参数, 标准实例不认, 每页只返回约 10 条
修复3: 改用标准 pageno 分页, 多页获取直到达到 maxResults 或无更多结果
附加: 添加日志输出实际 maxResults/fetchTop 便于调试
|
2026-07-07 22:24:32 +08:00 |
|
thzxx
|
9b6bdaea32
|
fix: 状态指示器重叠与 Trace Viewer 状态丢失
1. StreamingIndicator: 最后一条是 assistant 消息时不显示'正在连接', 避免与 AssistantMessage 的'正在思考'重叠
2. useAgentStream: 跳过 INIT(iteration=0) 的 trace step, 引擎初始化无实际内容不应展示
3. useAgentStream: 状态转换追加到 states 数组而非覆盖 state 字段, 保留完整 THINKING->EXECUTING->OBSERVING 进度
4. TraceStep: header 显示状态进度链(如'思考 -> 执行 -> 观察')而非仅最终状态
5. agent-store: 旧数据兼容, 加载时为缺少 states 的 trace step 补全
|
2026-07-07 22:02:20 +08:00 |
|
thzxx
|
8718f5ac6f
|
fix: SearXNG max_results 配置被 AI 参数覆盖
根因: ?? 空值回退链让 AI 传入的 max_results:10 直接生效, 配置面板的 30 被跳过
修复: 改用 Math.max() 让配置面板作为下限, AI 参数不得低于配置值
同时修复 fetch_top 的相同问题
|
2026-07-07 21:45:26 +08:00 |
|
thzxx
|
725f40ca6c
|
chore: bump version to 0.1.3
|
2026-07-07 21:25:47 +08:00 |
|
thzxx
|
9ed4837950
|
fix: 上下文压缩阈值与摘要截断修复
1. engine: 压缩阈值改用 contextLength ?? contextWindow, Ollama 小 numCtx 时正确触发压缩
2. main: reloadAdapter 在 provider 切换时同步 contextLength, 非 Ollama 清除避免残留
3. engine: compressMessages 移除每条消息 500 字符截断, 摘要请求是独立 API 调用无需截断
4. delegate-task: 修复 items 缺少 description 的 TS2741 预存错误
|
2026-07-07 21:22:24 +08:00 |
|
thzxx
|
ed59305b5e
|
fix: Trace Viewer 内容渲染修复
1. useAgentStream: 每轮迭代只创建一个 TraceStep, 状态转换时更新而非新建; tool_result 反向搜索包含 toolCallId 的步骤, 修复工具结果丢失
2. TraceStep: 渲染工具状态图标/结果/错误/耗时; Thought 添加 maxHeight 200+滚动; 展开状态用户操作后不被自动覆盖
3. ToolResultBlock: 移除 500 字符截断, 改为 maxHeight 300+滚动
4. ToolCallCard: 参数区域添加 overflowY auto+wordBreak
|
2026-07-07 21:13:51 +08:00 |
|
thzxx
|
6f08759f63
|
v0.1.2: 全项目代码审查修复 + 子代理编排器 + 上下文压缩 + 并行工具执行
后端修复: Ollama adapter 移除死代码/修复超时硬编码/iteration硬编码/pullModel无超时/流异常断开补发DONE; SSE解析器支持非字符串arguments; Sandbox fail-closed安全加固; IPC移除未使用变量
新增功能: TaskOrchestrator子任务编排器; DelegateTaskTool委派工具; Agent Loop并行工具执行; 上下文自动压缩; 记忆检索注入System Prompt
前端修复: useAgentStream text_delta thought累积bug; 工具调用状态正确流转; 修复重复stateChange事件; TraceStep.thought正确填充
|
2026-07-06 22:48:33 +08:00 |
|
thzxx
|
8cdb93f8bf
|
feat: MEMORY.md 访问保护、格式简化及预存问题修复
MEMORY.md 保护: 新建 file-guard.ts 共享守卫模块; read_file/write_file/search_files/run_command 禁止访问根目录 MEMORY.md; permissions.ts 增加 deniedPatterns 深度防御。格式简化: 元数据从 # 注释改为 > 引用语法; 校验规则从 6 条简化为 3 条; context-builder extractContent 适配。预存问题: 修复路径遍历前缀碰撞漏洞; 移除 browser_extract 内容截断; SearXNG 配置实时读取; web_search/web_fetch 移除截断; 侧边栏动态获取工具列表; 版本号 0.1.1
|
2026-07-05 21:24:22 +08:00 |
|
thzxx
|
f4532a2bb2
|
refactor: 移除多余依赖,统一 MUI 为唯一 UI 库
- 移除 radix-ui、clsx、tailwind-merge、class-variance-authority、react-router-dom
- 前后端全面适配 MUI 组件,清理残留 Tailwind 工具类引用
- 优化 Agent Loop 引擎、IPC 处理器、Provider Adapter 等后端模块
- 新增 Agent 网络工具通用设计文档 v2
|
2026-07-05 19:15:48 +08:00 |
|
thzxx
|
ba85328c4f
|
fix: LLM 配置变更后立即生效 — 热重载 Provider Adapter
- AgentLoopEngine 新增 setAdapter() 热切换方法
- main.ts 提取 createAdapter 工厂函数
- IPC config:set 监听 LLM 相关 key 变更,触发热重载
- 覆盖 provider/model/apiKey/baseURL/numCtx 五个关键配置
|
2026-07-01 20:04:05 +08:00 |
|
thzxx
|
97a3d3d53b
|
fix: 全面修复审计问题并优化系统提示词
**崩溃/挂死修复 (5):**
- 统一 TrayManager.isQuitting 变量,修复 Cmd+Q 无法退出
- useAgentStream 闭包过期快照 → 每次 getState()
- Agnes chatStream 添加 AbortSignal.timeout
- SSE JSON.parse 添加 try-catch 保护
- Orchestrator setTools 污染 → save/restore 模式
**功能修复 (14):**
- 上下文压缩实现 (每5轮 COMPRESSING 状态)
- 修复 requestId 硬编码空串
- ConfigService.set() 保留已有 category
- MemoryManager 新增 working 类型搜索
- PromptInjectionDefender 补全 sanitize()
- Ollama: 补全 dynamicReminders + reasoningContent
- openai-format: 所有 assistant 消息保留 reasoningContent
- SSE: finish_reason 时提前 flush tool_calls
- DeepSeek thinking effort 映射注释
- Ollama done_reason load→stop
- RateLimitHook >= 边界修复
- WorkspaceService isValid 首次启动修复
- sessions:archive IPC handler
- 托盘/窗口图标路径生产环境修复
**系统提示词优化:**
- SOUL.md 存在时不显示兜底身份,原文放最前
- 兜底身份改为中文 (MetonaAI 自身描述)
- 用户文本在前,附件内容在后
**文件上传:**
- 非图片文件不再 base64 编码,保留 JSON 结构
- 用户文本优先于文件内容
**UI 修复:**
- 首页 Logo 路径修复 (public/ + 相对路径)
- TokenUsage contextWindow 动态计算 (Provider 感知)
- 切换 Provider 同步 contextWindow
- 托盘图标始终显示 Logo (状态由右键菜单展示)
|
2026-06-30 23:17:38 +08:00 |
|
thzxx
|
ad0cbc8d47
|
chore: 消息卡片时间加上年月日 (yyyy-MM-dd HH:mm)
|
2026-06-27 23:12:16 +08:00 |
|
thzxx
|
782bff5ea4
|
fix: audit_logs 表缺少 iteration 列导致写入失败
- CREATE TABLE 加入 iteration INTEGER
- 新增迁移 ALTER TABLE audit_logs ADD COLUMN iteration
|
2026-06-27 23:11:29 +08:00 |
|
thzxx
|
d8c559a010
|
style: 底部栏全局加粗
|
2026-06-27 23:08:17 +08:00 |
|
thzxx
|
f34ee258e8
|
style: TokenUsage + AgentMonitor 所有数值加粗 fontWeight:600
|
2026-06-27 23:07:11 +08:00 |
|
thzxx
|
2d276feda5
|
fix: 迭代计数修复 — stateChange 也携带迭代号,双通道同步
- IPC handler 将 stateChange 事件转发到渲染进程
- useAgentStream 同时监听 streamEvent 和 stateChange 更新迭代
- 切换会话/发消息时重置 currentIteration 为 0
- 添加 console.log 诊断日志
|
2026-06-27 23:06:14 +08:00 |
|
thzxx
|
4f20205aba
|
fix: 迭代计数不再卡住 — 发消息/切换会话时重置为0
|
2026-06-27 23:03:47 +08:00 |
|
thzxx
|
2de89ad631
|
fix: 代码块 [object Object] — rehype-highlight 替换 span 后 String() 失败
根因: rehype-highlight 将代码文本替换为 <span class='hljs-*'> 元素后,
children 变成 React 元素数组, String(children) → '[object Object]'
修复: extractTextContent 递归提取纯文本,绕过语法高亮 span
|
2026-06-27 23:00:16 +08:00 |
|
thzxx
|
15d59e9f8f
|
fix: 代码块显式设置浅色文字+高亮颜色,不再依赖 highlight.js 主题自动配色
|
2026-06-27 22:57:33 +08:00 |
|
thzxx
|
22f7ec39c5
|
fix: 代码块文字不可见 — 导入 highlight.js atom-one-dark 主题
|
2026-06-27 22:54:39 +08:00 |
|
thzxx
|
e7c564112c
|
chore: 消息输入框加高加大 (minH 36, fontSize 14)
|
2026-06-27 22:48:47 +08:00 |
|
thzxx
|
203552920a
|
chore: Sidebar 搜索框高度 34px
|
2026-06-27 22:47:43 +08:00 |
|
thzxx
|
354d13105f
|
refactor: Sidebar 搜索框从手写 InputBase+Stack 改为 MUI TextField
|
2026-06-27 22:46:19 +08:00 |
|
thzxx
|
2cf6422169
|
chore: 底部栏加高至36px,字体+图标加大
|
2026-06-27 22:44:32 +08:00 |
|