|
|
56a0acdad2
|
feat(chat): 新增本次工作编辑摘要卡片——工作段末尾显示合并diff,支持显示时机设置
- write/edit 成功后以首次编辑前内容为基线重算净变化 diff,实时写入发起工作的 user 消息 metadata.edit_summary(含带行号上下文的 diff 行),随对话持久化,异常停止保留最后一刻状态
- 消息流工作段末尾渲染卡片(已编辑 N 个文件 + 各文件 +-),居中弹窗展示合并 diff(复用现有 diff 样式),桌面 hover 浮窗/点击钉住,移动端点击模态
- 个人空间新增「编辑摘要实时显示」开关(默认关闭=工作完成后才显示)
- edit_summary_updated 事件 socket + 任务事件流双通道实时更新
|
2026-08-11 21:05:06 +08:00 |
|
|
|
1c339d2e6f
|
refactor(conversation): 多智能体从全局模式重构为对话不可变类型属性
- 废除「多智能体模式」全局状态,多智能体改为对话创建时确定的不可变属性
- URL 统一为 /<conv_id>,旧 /multiagent/* 由前端 bootstrap 重定向到裸路径
- 前端拆分为三个语义单一状态:currentConversationType(当前对话类型)、
newConversationType(空对话待创建类型)、sidebarConversationType(列表过滤器)
- 输入栏底行 + 右侧新增对话类型选择器,发送时按类型选择创建接口
- 侧边栏新增类型切换 UI:平铺模式分段控件、分组模式单字切换按钮,
列表区域左右滑动过渡动画
- 清理跨文件主题补丁:_overlays.scss 中覆盖输入栏/对话区/侧边栏/右侧面板的
dark/light 变体(含 !important)全部删除(-363 行),按组件回迁到
_composer/_chat-area/_conversation/_right-panel 各自文件内的主题变体块
- AGENTS.md §11 同步重写为新模型并新增 11.0 前端对话类型模型说明;
§5.5 新增第 10 条「主题变体必须与基础定义同文件(禁止跨文件补丁覆盖)」
|
2026-08-11 11:21:16 +08:00 |
|
|
|
79b916f44c
|
fix(chat): 修复 show_html 流式渲染回归并加固卡片沙箱
- renderMarkdownText 透传 isStreaming:恢复 js=off 实时渲染与 js=on 渲染中占位(回归根因:MarkdownRenderer 未透传流式标志)
- js=on 沙箱加固:srcdoc 强制注入 CSP meta(connect-src 'none' 等)与滚动守卫脚本(scrollIntoView/focus 内部化),iframe 加 allow="fullscreen 'none'"
- 卡片尺寸从 JS 内联像素改为 CSS min()+aspect-ratio 自适应:流式/历史宽度一致,resize 自动跟随
- 修复卡片 wrapper 叠加 margin 导致底部圆角被 overflow:hidden 裁切
|
2026-08-05 00:10:47 +08:00 |
|
|
|
04bd93646b
|
fix(chat): /new 页面隔离运行中对话的任务接管与事件推送
对话运行期间进入 /new 会把最近一次用户输入与后续 AI 输出/工具
调用渲染到空白页,刷新/重复进入均复现,任务结束后才正常。
根因是显式新建路由(currentConversationId 为空)下三层隔离缺失:
- restoreTaskState 经 loadRunningTask(null) 接管任意运行中任务并
全量重放事件、恢复轮询(刷新后复现的根因)
- handleTaskEvent 的对话不匹配守卫要求当前对话 id 为真才生效,
空 id 被绕过
- socket 的 thinking/text 六个流式处理器不做 conversation_id 检查
修复:显式新建路由下 restoreTaskState 直接返回;事件守卫把
"空 id + 显式新建路由"判为不匹配;流式处理器补对话守卫。
从 /new 发送消息不受影响(先建对话改路由,后才启动轮询)。
|
2026-07-29 12:36:03 +08:00 |
|
|
|
0aa8af8618
|
fix(chat): 显式新建对话路由隔离后端残留上下文
/new 与 /multiagent/new 上不再被 terminal 状态快照、对话广播事件
拽回上一个对话;个性化默认值在显式新建路由下保持权威。
|
2026-07-28 18:43:19 +08:00 |
|
|
|
cf51ab0555
|
refactor(cleanup): 移除余额查询功能、清理前端调试日志、规整终端输出
|
2026-07-25 12:07:04 +08:00 |
|
|
|
b593d63856
|
feat(frontend): 侧边栏紧凑化与挤压式重设计,移除工作区面板功能拆分
- 对话侧边栏:行高/字号/圆角紧凑化,fixed 覆盖式改为文档流挤压式展开,移除工作区/虚拟显示器按钮
- 新增 WorkspaceSwitcher 浮层组件:列表即切换器,内联重命名/删除确认/新建表单动画,「…」菜单 fixed 逃逸裁切,刚好 7 行内部滚动
- 移除 LeftPanel 及两个旧工作区对话框:管理工作区迁入侧边栏,文件管理迁入输入栏 + 菜单(最多 4 项滚动)
- 个人空间移除默认隐藏工作区/隐藏快捷窗口设置项;删除 panelMode 门控轮询(QuickDock 常驻轮询 + socket 推送替代)
- 修复 flex 压缩导致菜单行高失效、分组对话 viewport 裁切最后一行、action-wrap 撑高对话项、/new 残留最近对话待办(无对话 id 不再请求 todo-list)
- 工作区入口按钮改内联 layers 图标并统一 18px,host/docker 模式 localStorage 缓存避免按钮首屏延迟出现
|
2026-07-23 16:47:49 +08:00 |
|
|
|
eb037ccb7c
|
fix(quickdock): 修复快捷窗口 live 链路、raw 对象响应式与刷新误播动画
|
2026-07-22 19:33:34 +08:00 |
|
|
|
3ea8d9ad00
|
fix(frontend): 修复推理滑块动画卡顿、快捷窗口待办跨对话串数据、输入框高度回退
- EffortSlider: 圆钮/填充改走 transform + clip-path 合成器属性,rAF 直写 DOM 绕过 Vue 响应式,消除每帧重渲染与 reflow
- useLegacySocket: todo_updated 全局广播按 conversation_id 过滤,不再串入子智能体待办;移除用事件 conv id 覆盖当前对话 id 的危险逻辑
- watchers: 修复 currentConversationId 重复键互相覆盖导致清空逻辑从未注册的问题,合并为单个 watcher(/new 页面不再残留待办)
- InputComposer: 输入框最大高度 6 行 -> 10 行
|
2026-07-22 11:19:09 +08:00 |
|
|
|
171833e4d1
|
feat(quickdock): 新增对话区右侧快捷窗口(待办/子智能体/后台指令/文件记录)
- 四窗口固定顺序占位布局,空时收起到 0 宽;动画区分「运行中新出现」与「切换/加载」
- 文件记录:edit/write 埋点写入对话 metadata.edited_files,预览走既有 /api/file/content
- 详情面板:lastDetail/lastStatus 快照、首次填充静态+瞬间到底、终态四色分类
- 数据通道全部走 REST 轮询(带 conversation_id 对话级隔离),含 demo 与设计文档
|
2026-07-22 00:52:36 +08:00 |
|
|
|
a4eb688814
|
feat(server,static): 对话运行状态 REST 对账与 conversation 级 WebTerminal 隔离
议题1 运行状态对账:
- 后端新增 GET /api/conversations/<id>/running-status 聚合主任务/子智能体/
后台命令/多智能体四类运行状态
- 前端 3 个 1s probe 收敛为单个 2.5s 对账循环,事件为主、对账纠偏,
清理方向连续 2 次确认,恢复方向立即接管,修复轮询 404 卡死
议题4 conversation 级隔离:
- terminal 缓存键改为 username::workspace::conversation 三段,
每个对话独立 WebTerminal/文件管理/终端/子智能体
- 同工作区多对话可并行运行,互斥维度从工作区改为同对话
- socket 终端面板按对话过滤广播,terminal 工具每对话最多 3 个
- 常驻内存 + 24h TTL 回收器(无活动且无运行任务才回收)
- 子智能体 restore 按 owner_conversation_id 过滤,避免多 manager 重复恢复
|
2026-07-20 01:05:17 +08:00 |
|
|
|
351cd311c2
|
fix(multi-agent): 修复压缩404、prompt冻结串扰、子智能体状态串扰及/multiagent/new跳转问题
|
2026-07-14 23:22:06 +08:00 |
|
|
|
ae70e4902e
|
refactor(stop-button): 拆分停止按钮和后台任务控制
停止按钮现在只停主智能体,与后台任务无关。
- 后端 cancel_task 简化:移除两段式判断、force_stop参数、is_ma_mode分支
- 删除 _force_stop_multi_agent 方法
- 新增 /api/sub_agents/stop_all 接口(mode=terminate/soft_stop)
- 前端 stopTask 移除 forceStop 概念,只取消主智能体
- 取消期间不再二次点击终结子智能体
子智能体停止按钮:
- InputComposer state bar 加'x个子智能体运行中'按钮
- 独立浮层显示,不依赖 git 栏(参考 askuser 方案)
- 点击传统模式弹窗终结;多智能体弹窗软停止
- App.vue 新增 handleStopAllSubAgents 调 ui.confirmDialog
后台指令停止按钮:
- LeftPanel 后台指令标签右边加停止按钮
- 仅当 panelMode=backgroundCommands 且存在运行中后台指令时显示
- 调 backgroundCommandStore.stopAllCommands 无二次确认
showStopIcon 只看主对话 streaming 状态:
- 后台任务在跑但主对话空闲时显示发送按钮
- 多智能体 / 传统模式统一处理
子智能体 store 加 stopAllAgents(mode) action 调新 API
useLegacySocket task_stopped handler 简化:
- 移除 multi_agent_reloaded 重载
- 移除'再次按下停止按钮以结束后台任务'提示
- 保留 has_running_multi_agent/sub_agents 用于 taskInProgress 判定
清理调试日志:[TaskCancel][stop_debug], [STOP_DEBUG] 全部去掉
保留 ma_debug 框架用于多智能体调试
|
2026-07-14 18:34:56 +08:00 |
|
|
|
30bfb79cbd
|
wip(multi-agent): 停止按钮软停止链路调试日志+对话切换500修复+子智能体进度面板+多智能体软停止机制
|
2026-07-14 17:50:15 +08:00 |
|
|
|
e29ccb318e
|
fix(multi-agent): 修复情况2主消息池派发链路
修复多智能体模式下主智能体空闲时收不到子智能体输出推送的一系列 bug:
1. poll_multi_agent_notifications 死锁:原实现先等所有 running 实例
退出再 drain 消息池,导致 ask_master 在 await 期间永远等不到主对话
回答。改为池优先:pool 有消息立即派发,不管 running 状态。
2. _dispatch_multi_agent_idle_messages 缺 import:调用
inject_multi_agent_master_message 但文件顶部从未导入,NameError
被外层 except 吞掉,task 永远建不起来。
3. dispatch 内调试日志引用 rec 错位:dispatch_ma_idle_sender_user_message
被放到 create_chat_task 之前,触发 UnboundLocalError,task 同样建不起来。
4. session_data['auto_user_message_payload'] / preceding_user_notices
payload 漏写 auto_message_type:前端 isMultiAgentMessage() 只认
auto_message_type.startsWith('multi_agent_'),空字符串走 fallback
通知渲染。
5. dispatch 第①步重复持久化:对包含 last 的全部消息都调
inject_multi_agent_master_message 落盘,之后 task 又在 handle_task_with_sender
再 add_conversation,导致历史里出现两条相同 user 消息(前一条多智能体渲染,
后一条通知渲染)。前置 N-1 条只持久化一次,最后一条交给后续 task 自己持久化。
6. last 赋值时机错位:last_emit_payload 在 last=parsed_messages[-1] 之前引用,
UnboundLocalError 再次吃掉后续链路。
7. handle_task_with_sender 多智能体分支漏写 visibility='chat':
_user_message_ui_defaults('sub_agent') 默认 visibility='compact',
透传到落盘 metadata 后,前端从后端加载历史时走通知渲染分支。显式
user_message_metadata['visibility']='chat' 强制走多智能体专用渲染。
|
2026-07-13 20:05:02 +08:00 |
|
|
|
7f2ad9144d
|
fix(multi-agent): 修复子智能体状态误判、后台任务隔离与 idle 等待异常
|
2026-07-12 18:39:21 +08:00 |
|
|
|
5244768494
|
feat(sidebar): 侧边栏按工作区/项目分组显示对话
- 新增个人化设置 group_sidebar_by_workspace / sidebar_pinned_workspaces /
sidebar_workspace_order,支持分组视图、置顶、排序
- 后端 conversation API 支持 workspace_id 参数,用于获取/创建/加载/删除
指定工作区的对话,避免切换视图时 session 漂移
- server/context.py 新增 update_session 参数,临时解析目标 terminal 时不污染
当前会话
- 前端 ConversationSidebar 实现分组折叠、运行中指示器、新建/更多操作菜单、
动画同步
- config/terminal.py 默认 TERMINAL_SANDBOX_MODE 由 docker 改为 host
|
2026-07-11 01:51:01 +08:00 |
|
|
|
2b2ff44fcd
|
Fix: user message timestamp from backend, bubble action layout
|
2026-06-28 01:48:18 +08:00 |
|
|
|
737c4d61a2
|
fix(chat): 修复流式代码块闪烁、复制错位及数学公式实时多行渲染
- 将聊天消息中的代码块提取为独立 Vue 组件,稳定 key 避免流式输出时重建
- 代码块复制按钮直接复制当前组件内容,全局复制逻辑改为按容器查找
- 预处理 LaTeX 公式占位符并在组件 onUpdated 中实时渲染,支持多行 49888...49888
- 公式块过长时提供横向滚动,渲染后主动追底避免滚动锁定失效
|
2026-06-27 23:11:09 +08:00 |
|
|
|
e4a663594d
|
feat: Android App 原生 PDF 预览与前端 show_file 卡片
- 集成 AndroidPdfViewer (mhiew fork) 实现不依赖浏览器的 PDF 预览
- 新增 PdfPreviewActivity 与 JS Bridge (AndroidPdfBridge)
- ShowFileCard 在 Android App 内对 PDF 显示「预览」按钮,不内嵌 iframe
- 新增 /api/file/content 后端接口用于文件内容 inline 预览
- 前端支持 <show_file> 标签与 download:// 链接渲染
- 更新 Android 版本号至 1.0.35
|
2026-06-24 00:06:10 +08:00 |
|
|
|
53b3669f1d
|
fix(stop): 强停止按钮两段式逻辑与 work_timer 持久化
|
2026-06-23 19:27:50 +08:00 |
|
|
|
09af37055a
|
fix: 右侧面板拖拽与终端滚动
- 修复仅打开终端面板时右侧无法左右拖动的问题
- 修复切换终端会话后未自动滚动到最新输出的问题
|
2026-06-19 17:45:09 +08:00 |
|
|
|
edb557bdd3
|
feat(chat): 优化块展开/折叠滚动锚定,避免 stick-to-bottom 弹簧追底顿挫
|
2026-06-17 15:24:15 +08:00 |
|
|
|
2e54f2c343
|
feat(terminal): 实时终端改造为侧边栏面板,支持拖拽分割与自动开关
- 将实时终端从独立页面改造为 Vue3 侧边栏面板,与 Git 面板上下排列
- 使用 xterm.js + Grid 布局,支持三主题配色适配
- 上下拖拽分割条,动态调整终端/Git 面板比例
- 输入栏上方新增终端数量按钮,点击快捷打开
- 个人空间新增「自动打开终端面板」开关(外观与显示分类)
- REST API /api/terminals 获取终端列表,多时机自动刷新
- 有终端自动打开面板,无终端自动关闭
|
2026-06-12 00:18:27 +08:00 |
|
|
|
0d4f6c9e56
|
fix(frontend): 修复对话压缩后页面抽搐、重复显示与滚动重置
三管齐下,消除 in-place 压缩触发的多余重载:
1. handleTaskEvent: _rebuildingFromScratch 重放时跳过
compression_finished/compression_state/shallow_compression,
打破 restoreTaskState 重放 → 再次触发压缩完成的无限循环。
2. handleCompressionFinished + compressConversation:
in-place 压缩(对话 id 不变)跳过 loadConversation +
restoreTaskState + loadConversationsList,
避免 resetAllStates 重置滚动状态和清空消息列表。
3. useLegacySocket conversation_loaded:
同对话 clear_ui 跳过 resetAllStates + fetchAndDisplayHistory,
避免后端 Socket.IO 推送触发二次重置。
|
2026-06-08 14:14:19 +08:00 |
|
|
|
f50d87fc79
|
feat(chat): render streaming code blocks
|
2026-06-07 03:34:00 +08:00 |
|
|
|
6f78277a03
|
feat(ui): add project git status panel
|
2026-05-31 17:27:24 +08:00 |
|
|
|
32865f6d6e
|
fix(ui): refine message visibility and goal approval flow
|
2026-05-30 16:30:05 +08:00 |
|
|
|
cd82c6d658
|
fix(ui,runtime,search): merge runtime/frontend stabilization into main
|
2026-05-27 16:38:19 +08:00 |
|
|
|
16473c824d
|
chore: 合并多项独立 WIP 改动
- cli: 增加 layoutRefreshTick 与 IME 输入组件,处理 slash_menu 光标偏移
- config/auto_approval: 切到 opencode 中转端点
- modules/approval_agent: 调试 transcript 增加 trace / final_result 字段
- static/useLegacySocket: 重试 toast 显示具体错误信息
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-23 02:01:36 +08:00 |
|
|
|
9dfb1567d2
|
fix: render user media previews from media store refs
|
2026-04-27 12:57:13 +08:00 |
|
|
|
9199f5ca7c
|
fix: unify show cards rendering and prompt constraints
|
2026-04-26 18:13:24 +08:00 |
|
|
|
24c702c0af
|
fix(show_html): add js mode with sandbox iframe rendering
|
2026-04-26 17:13:08 +08:00 |
|
|
|
383e68188c
|
fix: stabilize show_html rendering and restore conversation mode state
|
2026-04-26 01:04:23 +08:00 |
|
|
|
33d270ff63
|
fix: stabilize show_html streaming rendering and recovery
|
2026-04-25 23:17:07 +08:00 |
|
|
|
1c928d7518
|
chore: backup snapshot before show_html scroll rework
|
2026-04-25 20:39:52 +08:00 |
|
|
|
46404095dd
|
fix: reduce chat debug noise and stabilize auto-scroll behavior
|
2026-04-25 16:35:09 +08:00 |
|
|
|
13400f62d5
|
feat: add manage_personalization tool and fix personalization sync
|
2026-04-13 20:22:06 +08:00 |
|
|
|
78df2249cf
|
fix: stabilize markdown code block selection and copy
|
2026-04-12 19:59:28 +08:00 |
|
|
|
0eeec08320
|
fix(desktop): 禁用审批面板拖拽展开
- 电脑端审批面板不再支持拖拽屏幕边缘展开
- 仅保留移动端的手动打开方式
|
2026-04-12 13:42:28 +08:00 |
|
|
|
8be1c37b6a
|
refactor(frontend): 整理应用逻辑层与状态管理
|
2026-04-10 14:34:01 +08:00 |
|
|
|
8da1a3d46d
|
chore(socket): add legacy socket backup snapshot
|
2026-04-04 19:47:46 +08:00 |
|
|
|
6697da9581
|
fix: 修复轮询机制下对话标题不自动更新的问题
- 后端:在标题生成后将 conversation_changed 事件添加到任务事件流
- 前端:在 taskPolling 中添加 conversation_changed 事件处理
- 前端:同步更新当前对话标题和对话列表中的标题
- 兼容:保留 WebSocket 的标题更新逻辑以向后兼容
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-04-04 15:12:18 +08:00 |
|
|
|
aeb782d479
|
refactor: 清理WebSocket遗留代码,标记为废弃
Phase 2 WebSocket代码清理:
前端 (useLegacySocket.ts):
1. 添加文件头注释说明架构变更
- 聊天流式事件已废弃,改用 REST API 轮询
- 保留系统事件、配额事件、对话事件、子智能体事件
- 标记待清理的流式处理代码
2. 简化 ai_message_start 事件处理器
- 只保留子智能体模式的处理
- 删除复杂的流式状态管理逻辑
3. 保留备份文件 useLegacySocket.ts.backup
- 用于紧急回退
后端 (socket_handlers.py):
1. 标记 handle_message 为废弃
- 添加废弃警告和迁移指南
- 返回错误提示引导用户使用 REST API
- 保留原代码用于紧急回退(注释掉)
2. 说明新架构优势
- 支持分布式部署
- 更好的错误恢复
- 减少 WebSocket 连接压力
注意:
- 未删除大量流式处理代码,只添加注释标记
- 保留向后兼容性,避免破坏现有功能
- 后续可逐步清理标记为废弃的代码
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-04-04 01:15:31 +08:00 |
|
|
|
f3179e2a97
|
feat: 优化滚动锁定和个性化称呼功能
滚动锁定优化:
- 滚动锁定默认始终启用,不再根据输出状态自动解锁
- 深色模式下锁定图标显示为白色,与箭头图标保持一致
个性化称呼功能:
- AI 助手名称根据个性化设置中的"自称"动态显示
- 用户名称根据个性化设置中的"称呼"动态显示
- 页面初始化时自动加载个性化设置,无需打开个人空间
- 在"模型行为"中新增"使用自定义称呼"开关
- 开关关闭时显示默认的"AI Assistant"和"用户"
- 修复保存后开关状态被重置的问题
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-03-13 12:10:08 +08:00 |
|
|
|
ed82fc966e
|
fix: improve sub-agent ui and state
|
2026-03-11 15:40:28 +08:00 |
|
|
|
b68dee9d98
|
chore: snapshot current changes
|
2026-03-10 23:48:40 +08:00 |
|
|
|
a4d3160b0a
|
fix: 修复页面加载时出现两次动画的问题
问题原因:
- Socket 事件(conversation_changed, status_update 等)在初始化期间与 bootstrapRoute 并发执行
- loadConversationsList 在初始化期间自动加载第一个对话
- 导致 currentConversationId 被多次设置,触发多次历史加载和动画
解决方案:
- 在 Socket 事件处理中添加 initialRouteResolved 检查
- 初始化完成前,Socket 事件不修改 currentConversationId
- loadConversationsList 在初始化完成前不自动加载对话
- 确保所有数据(历史、文件树、思考模式等)在同一时间加载完成
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-03-09 16:59:56 +08:00 |
|
|
|
801d20591c
|
feat: 实现 REST API + 轮询模式,支持页面刷新后任务继续执行
主要改进:
- 新增 REST API 任务管理接口 (/api/tasks)
- 实现 150ms 轮询机制,提供流畅的流式输出体验
- 支持页面刷新后自动恢复任务状态
- WebSocket 断开时检测 REST API 任务,避免误停止
- 修复堆叠块融合问题,刷新后内容正确合并
- 修复思考块展开/折叠逻辑,只展开正在流式输出的块
- 修复工具块重复显示问题,通过注册机制实现状态更新
- 修复历史不完整导致内容丢失的问题
- 新增 tool_intent 事件处理,支持打字机效果显示
- 修复对话列表排序时 None 值比较错误
技术细节:
- 前端:新增 taskPolling.ts 和 task store 处理轮询逻辑
- 后端:TaskManager 管理任务生命周期和事件存储
- 状态恢复:智能判断是否需要从头重建,避免内容重复
- 工具块注册:恢复时注册到 toolActionIndex,支持状态更新
- Intent 显示:0.5-1秒打字机效果,历史加载直接显示
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-03-08 03:12:46 +08:00 |
|
|
|
877bcc2fad
|
fix: improve api error diagnostics and raise model quotas
|
2026-03-06 17:02:19 +08:00 |
|