文件最后提交记录最后更新时间
fix(webui): 同步模式按会话门控实时事件,避免实时输出串进当前打开的其它会话 sync 模式下 webui 跟随 /live 总线,但把实时会话的 user/text/tool_*/state/ permission_request 事件无条件追加到"当前打开的页面"——哪怕用户从侧栏打开的是另一个 历史会话。于是 TUI 一输入,实时输出就串进了正在看的会话页面;刷新时按真实会话从磁盘 重载,串进去的内容消失。 新增 liveSessionIdRef(来自 snapshot 的 session_id),重构 onLiveEvent:snapshot 与 provider(进程级、与会话无关)先处理不门控,其余实时内容事件加门控——当 当前查看会话(activeIdRef) !== 实时会话(liveSessionIdRef) 时直接 return 不渲染。 查看实时会话时一切照旧;打开别的历史会话则实时输出/spinner/审批卡片都不再误入该页面。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> 2 天前
fix(webui): 连续审批时第二个审批卡片不弹出导致任务卡死 审批为「发了即返回」的 POST,后端收到决定后才跑工具、再在同一条 SSE 流上 推下一个 permission_request。当被批准的工具是瞬时的(如 Read_file 0.00s), 下一个请求会在决定 POST 仍在 await 时到达并占用唯一的 pending 槽位,而卡片 的 onDone 无条件 setPending(null),把这个它从未处理过的新请求清掉——第二个 工具永远停在「等待批准…」、卡片不再弹出,任务卡死。 修复:抽出纯函数 resolvePendingAfterDecision,仅当槽位仍是本卡片刚决定的 请求(按 call_id 匹配)时才清空;若已被更新的请求替换则保留它。实时(/live) 与非 sync(/chat) 两条路径同改,消除重复的同款缺陷。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> 4 天前
fix(webui): 落地页输入框默认 4 行高 新建对话落地页的输入框此前与会话内底部共用 2 行高,显得偏小。改为针对 落地页加作用域样式 .landing-inner .message-input { min-height: 6em } (line-height 1.5 → 6em 即 4 行);会话内底部输入框仍维持 2 行。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> 2 天前
feat(live): webui↔TUI 模型双向实时同步 + 修复同步模式 TUI 审批不生效 模型同步:此前 webui 下拉框只改本地态、且仅在发消息时才把 provider 带给后端 (LIVE_PROVIDER),TUI 的活动模型与头部完全收不到通知。新增一条贯穿四层的 模型变更广播: - core:LiveEvent::ProviderChanged + LiveSession::notify_provider_changed; AgentEvent::ProviderChanged。 - daemon:live_set_provider(设 LIVE_PROVIDER + 广播);POST /live/provider 端点(持久化 default_provider 到 config.toml + 广播,下拉框一变即生效,不必先 发消息);/live 快照新增 provider 字段,新 tab 连上即回显正确模型。 - tuix:live_sync 转发 ProviderChanged;handle_agent_event 据此更新 default_provider/model_name + 通知 agent + 刷新头部(已是该 provider 则跳过, 避免自身 /model 切换的回声);/model 选择器切换后 live_set_provider 广播给 webui(反向)。 - webui:postLiveProvider;下拉框变更即在 sync 下上报;收到 provider/snapshot 即 setProvider(不回调 onChange,避免回环)。 切换发起方落盘一次(webui→端点;TUI→选择器 save_and_reload),TUI 收到广播只 做内存态同步,不二次落盘。 审批修复:同步模式下,工具这一轮跑在进程内 LiveSession 协调器(DaemonTurnExecutor) 里,审批只能经 LiveSession::approve 投递(webui /live/permission 即如此)。但 TUI 的 handle_approval_key 无条件把决定发给 TUI 自己的 agent——而同步模式下该 agent 没跑这一轮,决定石沉大海:工具一直 Running 卡死、webui 审批卡片也不关。新增 deliver_approval:sync_forwarder 存在时把决定投给 current_live_session().approve (A 降级为 Allow,与 webui 一致),否则照旧发 TUI agent;Ctrl+C 拒绝同样改走它。 工具随之继续并广播 ToolCallResult,触发 webui 侧清卡片逻辑,两个症状一并解决。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> 2 天前
fix(webui): 清除对端/回合结束后残留的审批卡片,修复任务已完成 webui 仍卡住 同步模式下 TUI 与 webui 同时弹出 write_file 等需审批工具的卡片。若在 TUI 侧批准,后端执行工具并广播 tool_result + state(idle),webui 工具行更新为 「完成」、busy 复位,但审批卡片(livePending)只由卡片自身 onDone 清除——对端批准 永不触发 onDone,卡片一直残留,看起来像任务卡死,刷新后才恢复。write_file 复现 是因为只读工具自动放行、不弹审批。 live 路径:收到 tool_result(call_id 匹配)或 state{running:false} 时清掉 livePending。 /chat 路径:新增 onPermissionResolved 回调,在 tool_result、done/stopped/error 以及 用户中止/连接错误(流被掐断、不再有终止事件)时清掉 App 的审批卡片。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> 2 天前
docs(site): 新增 webui 远程访问使用引导,webui 与官网加入口 - site: 新增 docs/{zh,en}/webui-remote-access.html 双语指南(蒲公英组网→/webui --host 绑定虚拟 IP→远程访问面板扫码,含安全须知与排错表); 注册到进阶分组(build-search-index.mjs)、docs.js 侧栏 i18n,所有页面侧栏加链接并重建搜索索引。 - webui: 远程访问面板新增「使用引导」链接,按当前语言跳官网指南;i18n 补 remote.guide(zh/en)。 - webui: 修复 .btn 在 <a> 上文字不居中(改 inline-flex 居中 + box-sizing),「下载蒲公英」按钮恢复居中。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> 3 天前
feat(webui): 前端脚手架 Preact+Vite+Tailwind 搭建 webui/ 前端项目骨架:Preact 10 + Vite 5 + Tailwind CSS 3, 输出至 webui/dist/(由 rust-embed 嵌入 daemon)。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> 6 天前
feat(webui): 通栏侧栏 + 左下角设置(深浅主题/中英语言/模型配置)+ 全应用 i18n - 侧栏改为全高通栏:品牌「atomcode」移到侧栏顶部,收起按钮在其右侧; 收起为 rail 时不显示品牌;放大品牌字号、去掉 ▲、深底白字/浅底黑字 - 设置入口从右上角移到侧栏左下角(rail 收起态在底部);新建 SettingsPanel 取代只读 ConfigPanel,含三块:主题(浅色/深色/跟随系统)、语言(中文/English)、模型配置 - 新增 i18n:i18n.ts(zh/en 目录) + settings.tsx(SettingsProvider/useT), 主题写入 <html data-theme> 并 localStorage 持久化,全部界面文案中英可切换 - 终条简短回复去掉多余的时间线橙色末端点 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> 5 天前
fix(webui): 带图消息历史展示缩略图而非 VL 识别文字 VL 预处理后保留原图存为 MultiPart{VL文字, 原图}(非视觉模型在 provider 层降级为纯文本,VL 文字仍送达模型);历史序列化时剥离 [图片内容(由…识别)] 文案,只返回用户原文,前端据 images 渲染缩略图。 4 天前