Commit Graph

490 Commits

Author SHA1 Message Date
d2e4422c80 feat(chat): 文件卡片新增 HTML 全屏预览
- 抽取 showHtmlSandbox/showHtmlFullscreen 共享模块(CSP/守卫/srcdoc/overlay)
- ShowFileCard 对 .html/.htm 增加预览按钮,复用卡片全屏 overlay
- 全屏 payload 支持 title/notice,检测到外部资源引用时顶栏提示
2026-08-05 02:54:58 +08:00
ea232d6ac6 fix(sidebar): 修复移动端对话「...」菜单点击无反应
- 触屏首次 tap 只应用 hover(按钮显现)并吞掉 click:@media (hover: none) 下「...」按钮与工作区操作按钮常显
- 菜单 fixed 定位受 .mobile-panel-sheet 常驻 transform 影响相对面板错位、被 overflow 裁剪:三处菜单 Teleport 到 body,样式选择器提为顶层,z-index 提升至 2300(高于移动端遮罩 2000)
2026-08-05 02:10:34 +08:00
2db77fe663 feat(chat): show_html 卡片工具栏改为 ⋯ 菜单并新增全屏预览 2026-08-05 01:03:03 +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
677604b538 fix(chat): 运行中逐帧贴底锁,修复块外框与内容移动不同步 2026-08-03 23:18:49 +08:00
ca0d87d9b9 fix(frontend): skill 引用渲染与提取兼容 Windows 反斜杠路径
后端 /api/skills 返回 Path.resolve() 字符串(Windows 为反斜杠),而 USER_SKILL_LINK_RE(ChatArea 气泡渲染)与 SKILL_MARKDOWN_LINK_RE(shared.ts 发送兜底提取)硬编码正斜杠 /.astrion/skills/,导致 / 菜单插入的 skill 引用在消息发出后 fallback 为原始文本。两处正则路径分隔符改 [\\/],对存量反斜杠消息同样生效(渲染侧修复)。@ 文件引用不受影响(路径段 [^)\\n]+ 本就能匹配反斜杠,已 Playwright 实测确认)。
2026-08-02 00:00:16 +08:00
2da6c87245 feat(sub-agent): 子智能体最大轮次支持个人空间自定义
- 原 task.py 硬编码 max_turns=50,改为从任务记录读取(None=默认50、0=无上限、N=N轮)

- 个人空间-子智能体新增「最大执行轮次」设置项,PUT /api/multiagent/settings 支持 sub_agent_max_turns(null 删键恢复默认,负数 400)

- 多智能体与传统后台两条创建链路均接入该配置
2026-07-31 22:40:20 +08:00
89effa71a8 fix(frontend): 修复工具参数换行、记忆片段溢出与右侧侧边栏拖拽
- 工具参数区补 white-space: pre-wrap,多行参数(如 run_command 指令)真实换行而非挤作一团被动折行

- 记忆搜索匹配片段改逐行渲染 + nowrap/ellipsis 截断(pre 不换行会溢出容器),悬停 title 看全文

- 恢复 resize-handle--right-panels 基础样式(b593d638 删 _left-panel.scss 时误删,手柄零宽导致 git/终端面板无法拖宽),热区扩至 10px

- FilePreviewPanel 新增左缘拖拽调宽(320-860px,localStorage 持久化),此前从未有过该能力
2026-07-31 22:39:18 +08:00
510fb8497f fix(host): 修复零工作区新部署的前端死锁
- 后端新增 NoWorkspaceError,零工作区时 /api/status 等接口返回
  503 code=no_workspace,与 resource_busy 区分
- 前端 /api/status 失败时识别 no_workspace,进入工作区引导降级流程:
  直接确定宿主机模式、显示侧边栏工作区入口并引导创建第一个工作区,
  不再因初始化中断导致按钮永不显示
2026-07-30 15:21:02 +08:00
a0ea599c05 fix(ui): 模型列表加载与工作区状态解耦
loadInitialData 先请求 /api/status 再拉取模型列表,未创建工作区时
status 503 导致 fetchModels 不执行、模型选择器为空。现将 fetchModels
提前到 status 请求之前,无工作区也能看到已配置的模型。
2026-07-29 23:21:13 +08:00
7342a4e198 style(chat): 折叠块外壳背景改透明,修复深色下边框观感
--surface-card 在深色主题下比聊天区底色更黑,实色背景会放大
半透明 hairline 边框的亮度差;shell 与 stacked-more 统一改透明。
2026-07-29 12:36:15 +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
4596c67967 fix(chat): 修复工具调用期间刷新页面导致对话记录重复显示
思考→工具调用(无文本输出)期间刷新时,服务端因文件态末条 assistant
带 tool_calls 判定 needs_rebuild=True(replay_from=0),但前端忽略该
判定自行重算:renderHistoryMessages 已把进行中工具状态改写为 'stale',
hasInProgressActions 的状态清单不含 'stale',误判走 follow 分支后从
事件 0 全量重放并新建 assistant,同一段运行记录显示两遍(伴随
"已恢复连接"弹窗)。

needsRebuild 计算对服务端判定取 OR(bootstrapReplay.needs_rebuild 与
decision_inputs.has_pending_tool_calls):重建是安全方向,拿不准就重建。
2026-07-29 12:10:14 +08:00
91347d5245 fix(quickdock): 详情面板补回子智能体 Tokens 显示,列表统一最新在底部
- 详情面板头部恢复上下文 token 显示(数据源=列表轮询自带的 current_context_tokens,
  即旧工作区面板被移除前所用字段),格式 x.xk Tokens,快照防关闭动画闪烁
- 子智能体/后台指令列表前端统一按 created_at 升序(后端均返回倒序),
  快捷窗口四窗口一致最新条目在底部
- 文件窗口加 hydrated 守卫:移动端↔桌面端重挂时水合渲染一律静态,
  修复 editedFilesLive 残留 true 导致全部行重播进入动画
2026-07-29 11:45:08 +08:00
4a8c38d24a feat(memory): 新增项目记忆检索工具 search_project_memory
- 后端:关键词全文检索 .astrion/memory/*.md(名称+10/描述+5/正文加权),
  返回 top-N 与带行号片段;注册为主 agent 只读工具,子智能体工具集同步;
  memory_system 模板与多智能体 prompt 增加检索指引(第二触点)
- 工具 description 含硬性触发条件、query 撰写指引、负例与防重试契约
- 前端:新增 notebook-search 组合图标(notebook 轮廓开口 + 右下角放大镜);
  工具详情渲染命中记忆的名称/描述/行号片段;活动汇总归入 memory_read
- 重构:ToolAction.vue 删除约 1600 行重复渲染函数,统一委托
  toolRenderers.ts(与 StackedBlocks/MinimalBlocks 同一实现)
2026-07-29 02:00:01 +08:00
a1e05032a2 fix(quickdock): 进页与切换对话时快捷窗口静态呈现,修复跨工作区输入栏跳动
- 设置与内容状态改为 localStorage 同步缓存(主题缓存同模式):
  自动展开设置、全局内容状态、按对话 ID 内容状态(LRU 上限 50)
- 三态乐观掩码:assumedActive 生效时 hasContent 完全由缓存假定值
  决定(含假定无内容),dock 与对话区同刻切换收起/展开
- 无过渡窗口重写为可重入机制:初始加载与切换对话(flush:sync)
  两个时机开启,按 filesSyncSeq/todoSyncSeq 序号推进精确关窗
- 跨工作区点选对话时保持当前对话视图冻结,不再经过空对话
  中间态,消除输入栏先上后下
2026-07-28 23:24:19 +08:00
0aa8af8618 fix(chat): 显式新建对话路由隔离后端残留上下文
/new 与 /multiagent/new 上不再被 terminal 状态快照、对话广播事件
拽回上一个对话;个性化默认值在显式新建路由下保持权威。
2026-07-28 18:43:19 +08:00
3c66c6b05f refactor(naming): 移除代码中的第三方产品名
- DeepSeekClient → APIClient(含 7 个 mixin,38 个文件)
- --claude-* CSS 变量全部替换为新语义 token,删除 _tokens.scss 兼容别名
- build_openai_tools → build_llm_tools
- login/register.html 主题 key claude → classic;terminal.html 变量改 --app- 前缀
- 注释中的 Claude 归因描述中性化
- 顺带删除误跟踪的 __pycache__ .pyc 缓存
2026-07-28 18:43:03 +08:00
0eaa8ba450 feat(quickdock): 新增快捷窗口自动展开设置,修复展开按钮与动画
- 个人空间·外观与显示新增「快捷窗口自动展开」开关(默认开);
  关闭后新内容到达不再自动展开,只能通过右侧悬浮按钮手动展开;
  设置切换立即生效
- 展开/收起悬浮按钮无内容时也常显;线条色对齐左侧对话记录侧边栏
  (--claude-text),移除 hover 与展开态变色
- 修复展开动画方向:empty 态保留上下 padding,消除 padding-top
  过渡带来的垂直分量,展开恢复为纯横向从右到左
2026-07-28 12:49:24 +08:00
ce3979d9c7 fix(frontend): 自定义工具指南 md 移入前端源码树,修复构建失败
doc/ 目录在公开发布清洗中已取消追踪,但 CustomToolsGuideApp.vue
仍以 ?raw 方式 import 其中的 custom_tools_guide.md,导致克隆/
同步 main 后 vite 构建无法解析该文件。将指南移入 static/src/admin/
与使用方同目录,import 改为相对路径。
2026-07-28 01:00:36 +08:00
f1fcba1da0 perf(chat): 折叠块跳过子树渲染,根治窗口拖拽卡顿
- 极简模式(0fr)与堆叠/思维链(max-height:0)折叠只裁视觉,DOM 仍全量
  参与布局,几千节点的步骤组在窗口拖拽时逐帧重排导致卡顿;
  折叠态改为 content-visibility:hidden + contain-intrinsic-size:0
  跳过整个子树渲染
- 过渡列表加入 content-visibility + transition-behavior:allow-discrete,
  隐藏翻转延迟到收起动画结束后生效,展开立即恢复;不支持的引擎
  退化为立即跳过,动画本体不受影响
- 删除 .stacked-block .collapsible-content 冗余 transition 规则:
  特异性更高且漏写 content-visibility,曾致收起时内容瞬间消失、
  块高瞬间坍塌而外壳慢一拍
- 堆叠块收放改为纯容器裁切、不淡出,与极简模式一致
2026-07-27 23:58:55 +08:00
8741edec18 feat(chat): 快捷导航三态自适应布局与快捷窗口手动收起
- 左侧输入跳转导航支持钉死/居中/隐藏三态:随轨宽空白自适应,
  波浪宽度按可用空白比例压缩避免遮挡消息;滚动位置同步高亮当前阅读轮次
- QuickDock 新增悬浮展开/收起按钮,userCollapsed 与无内容自动收起相互独立
- 轨宽/空白经 ResizeObserver 实测校准,兼容 macOS 经典滚动条宽度差异
2026-07-27 20:07:03 +08:00
eaa312acd4 fix(quickdock): 移除后台指令详情首行命令高亮 2026-07-26 00:56:26 +08:00
7ed54456d6 feat(chat): 对话区左侧用户输入快捷跳转导航 2026-07-26 00:56:08 +08:00
87a6a03943 feat(settings): 新建对话按钮行为可选,移除根目录创建文件与诊断日志入口 2026-07-26 00:55:46 +08:00
64902b124a feat(admin): 二级密码未配置时显示设置引导页,登录 Docker 报错改为原地弹窗 2026-07-25 16:52:42 +08:00
cf51ab0555 refactor(cleanup): 移除余额查询功能、清理前端调试日志、规整终端输出 2026-07-25 12:07:04 +08:00
bb420b0d04 chore(repo): 公开发布准备——取消追踪非源码文件并重写配置文档
- 取消追踪 552 个文件(运行态数据、密钥历史、实验/归档目录、
  agentskills/easyagent/demo/android-webview-app 等不公开内容)
- .gitignore 追加公开发布排除项与 cache/ 忽略
- 重写 README.md:mac 为主/开发中声明、web/host 双模式、Docker 镜像、
  数据存储、settings.json/custom_models.json 配置说明
- .env.example 删除失效项(AGENT_API_* 等),标注推荐 settings.json
- 新增 config/custom_models.json.example(Kimi-K3 蓝本 + DeepSeek 示例)
- 修复 utils/perf_log.py 硬编码本机路径(改走 config.paths.LOGS_DIR)
2026-07-25 00:44:15 +08:00
a900d6cc61 fix(sidebar): 修复删除工作区不生效与控制台 TDZ 报错
- ConversationSidebar: immediate watcher 在 setup 阶段同步执行,却引用了
  之后才声明的 isGroupByWorkspaceActive,触发 TDZ ReferenceError;
  调整声明顺序并加注释防回退
- WorkspaceSwitcher: onDocClick 为捕获阶段监听,未排除 teleport 到 body
  的二级菜单,点击菜单项(删除/重命名)会先关闭整个浮层,导致内联
  确认框永远不可见、删除流程无法走完;补充 .ws-menu-floating 排除
- WorkspaceSwitcher: 删除确认按钮区靠右对齐
2026-07-23 21:55:14 +08:00
f25523e441 fix(sidebar): 侧边栏样式与动画修复,对话搜索重构为后端跨工作区聚合
- 对话条目:修复「…」按钮因 action-wrap 宽度未随 32px 列同步而溢出条目圆角外(并移除无效的分组列宽覆盖)
- 工作区入口按钮:移除右侧当前工作区名称
- 切换工作区:重排期间禁用子对话 FLIP 位移与展开折叠过渡,全部瞬间移动(不影响新建/复制/删除动画)
- 删除动画:before-leave 用 offsetTop 锁定离场元素原位,修复 flex 容器 absolute 静态位置跳到顶部导致非首条删除无左滑
- 个人空间:修复「按项目分组对话」勾选框 SVG path 多重复一段导致描边错位
- 搜索:改为后端 /api/conversations/search(标题+首条用户消息首句匹配,带实例级缓存),分组模式 all_workspaces=1 跨工作区搜索并按工作区分类展示;移除前端 N+1 预览请求与 project_path 噪音匹配
2026-07-23 19:26:55 +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
15779be939 fix(quickdock): 修复待办窗口在移动端↔桌面端切换后被吞不恢复
TodoWindow 的 visible/rows 由 watch(todoList) 驱动但缺少 immediate: true,
视口切换导致 QuickDock 整体 v-if 卸载重挂时,store 中 todoList 未变化
watch 不触发,visible 永远停留在初始 false。与 RunnerWindow/FileWindow
对齐补上 immediate: true,重挂载时按现有数据立即初始化。
2026-07-23 00:51:08 +08:00
2b84a7adf8 perf(chat): 对话区 virtua 窗口化渲染,解决挤压卡顿与全量渲染
- v-for 全量渲染改为 virtua Virtualizer 窗口化,只挂载可视区+buffer 消息块
- 追底引擎 resize 弹簧动画改 instant:拖拽挤压时逐帧瞬时吸底,内容向上生长
- 消息按对象身份(WeakMap)分配稳定 key,支撑 virtua 逐项高度缓存
- 用户气泡随滚动重挂载时补测量/补观察,保证折叠状态正确恢复
- 滚动追踪日志默认关闭(逐scroll事件日志本身是每帧开销),排障可显式开启
- 修复 2 处依赖 DOM 层级的 CSS 结构选择器
- 新增依赖 virtua(~3kB)
2026-07-23 00:21:49 +08:00
f953127613 fix(frontend): 修复引导/压缩等运行期注入消息场景下刷新导致运行记录重复显示
刷新恢复运行中任务时,重建判据只看最后一条消息:当运行区间中夹着
运行期注入的 user 消息(运行中引导/通知、多智能体内联消息、压缩续接
引导语)时,引导前的静态 assistant 段未被清空,而事件重放从 0 重建
整个任务内容,导致同一段运行记录显示两遍。

修复:重建前先界定本次运行区间(越过 assistant 与运行期注入 user 消
息,直到任务发起消息),复用区间内第一条 assistant 作为重放容器并
移除区间其余部分(注入消息与后续分段由事件流按原序重建),同时绑定
currentMessageIndex 使容器复用真正生效。
2026-07-22 22:20:25 +08:00
eb037ccb7c fix(quickdock): 修复快捷窗口 live 链路、raw 对象响应式与刷新误播动画 2026-07-22 19:33:34 +08:00
165bcdb264 feat(quickdock): 文件预览接入 Prism 语法高亮,修复深色模式运算符底色与 show_file 高亮失效 2026-07-22 19:33:21 +08:00
5cb18ab987 feat(quickdock): 计数器只显示总数、输出内容加浅底色块、修复点击展开详情误选文字 2026-07-22 15:03:19 +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
1901aeb82f feat(personalization): 新增隐藏工具审核面板选项
- 个人空间「工具」页新增开关,默认开启
- 自动审核模式下开启时,后台审核工具不再自动展开审核面板
  (实时审批事件与待审批轮询两处自动展开均拦截,含移动端 overlay)
- 手动批准模式不受影响,面板照常弹出等待人工操作
2026-07-21 17:13:19 +08:00
9618148ed3 refactor(execution): 移除执行环境 TTL 自动回退机制
- 后端:移除 host_execution_direct_until、_refresh_execution_mode_by_ttl
  及 HOST_EXECUTION_DIRECT_TTL_SECONDS 配置,切换执行环境后一直生效
- 前端:移除到期定时同步、回退检测、自动回退 toast 及权限自动降级逻辑
- 文档:AGENTS.md 与 host_sandbox_and_permission_model.md 同步更新
2026-07-21 17:12:57 +08:00
5969d04c99 feat(input): 精简输入栏版本控制与权限显示
- 版本控制按钮只显示「版本控制」,不再显示开/关状态
- 权限按钮去掉「权限:」前缀,右侧新增执行环境标签
  (沙箱=次要色 / 完全访问=警示黄),仅在宿主机模式显示
2026-07-21 17:11:58 +08:00
794742e981 fix(static): 子智能体停止请求携带 conversation_id,修复误报无权限
terminateSubAgent/stopAllAgents 此前不带 conversation_id,with_terminal
落到工作区级服务 terminal,其 current_conversation_id 是最近加载的对话,
与目标任务所属对话不一致时后端返回 403「无权限停止该子智能体任务」。
补上后会请求命中对话级 terminal,权限校验通过,且终结操作直接作用于
持有活实例的 manager(优先直接 cancel,不再依赖 control.json 兜底)。
2026-07-21 16:16:41 +08:00
265f71e297 fix(static): 修复运行期加载对话进度块周期性重复显示
对账循环把 pending/cancel_requested 的活任务误判为「缺轮询」(服务端活跃
集合含 pending/cancel_requested,而 hasActiveTask 只认 running),每 2.5s
触发一次「清去重 + 偏移归零」的全量事件重放;思考/文本/tool_preparing 块
创建无幂等,每轮重放整份追加,十几份后页面卡死。

A: 对账 resume 增加 alreadyTrackingMain 判定(同任务且轮询在跑则不介入,
   仅幂等对齐 taskInProgress 标志位)
B: resumeTask 收编 resetOffset——同任务且轮询在跑时拒绝归零事件偏移,
   仅冷启动恢复(不同任务或轮询已停)允许归零
D: startThinkingAction/startTextAction/handleToolPreparing 幂等创建,
   已有流式块/同 id 块时复用而非新建,作为去重集合被清后的最后防线
2026-07-21 14:39:42 +08:00
c9c3eedd82 feat: 移除实验性间隔思考模式,推理强度前置到前端
- 彻底移除「每 N 次请求强制思考」的间隔调度机制(思考/非思考交替导致缓存命中率极低)
- 运行模式收敛为 fast/thinking:原 deep 改名 thinking,历史数据读取时映射
- 新增推理强度五档滑块(low/medium/high/xhigh/max + 默认不传参),置于模型/模式弹窗
- 模型配置新增 reasoning_effort 开关;档位会话级持久化到对话 meta,随对话保存/恢复
- 个人空间新增「默认推理强度」;新用户默认运行模式改为 thinking
- 滑块交互:JS 插值驱动(点击/拖动/吸附全程平滑),首帧档位语义定位无闪烁
- 保存链路:前端防抖 600ms + conversation_id 兜底,修复 /new 发消息丢档位、切对话恢复错误
2026-07-21 13:47:53 +08:00
858ff45187 feat(static): 进入对话统一走 bootstrap 协议(方案B)
新增 enterConversation 单一入口:一次 GET bootstrap 拿全量数据,
restoreTaskState 增加快速路径(注入 task/events 跳过三次串行请求与
4s 死等,消除运行中刷新的两段式体验);needsRebuild 仍前端重算保证
恢复行为与现状等价。PUT load 保留后端兼容、前端不再调用。
2026-07-20 22:31:01 +08:00
cb877b4b67 fix(static): 对话级并行后调整输入栏锁定与发送守卫
- displayLockEngaged 不再因当前对话有运行中任务而硬锁输入栏,仅压缩期间锁定;
- 同对话运行守卫后移到 composerBusy 分支之后,避免刷新后对账未恢复时误发新任务。
2026-07-20 15:51:21 +08:00
bd06f96d07 fix(server,static): 修复执行环境/权限模式切换对当前对话不生效
对话级 terminal 隔离后,模式切换请求未携带 conversation_id,
落在工作区级服务 terminal 上;而任务实际运行在对话级 terminal,
且 load_conversation 每次都会从对话 metadata 恢复创建时冻结的模式,
导致旧对话模式永远无法改变、新对话继承服务 terminal 的瞬时模式。

- 前端 permission.ts:权限/执行环境/网络权限的 POST 与 GET
  均携带当前 conversation_id,路由到对话级 terminal 并持久化到正确对话
- 后端 permission.py:切换时同步工作区级服务 terminal 的内存态
  (persist=False),保证新建对话继承最新模式而非过期模式
- 附带修复:运行期间切换的 pending 队列此前排在错误的 terminal 上,
  任务工具循环永远消费不到
2026-07-20 14:25:49 +08:00
1289c31dfe fix(model): 修复重启后进入对话模型回变为默认模型
对话级隔离后存在四处模型覆盖/错存路径:
1. 对话级 terminal 绑定加载用 restore_model=False,重启后新建的
   对话级 terminal 丢失对话保存的模型 -> 绑定加载恢复模型
2. /api/model 把工作区级 terminal 的陈旧 current_conversation_id
   当目标保存,模型写到错误对话或丢失(且用陈旧 history 全量保存
   有覆盖新消息风险)-> 仅当请求显式携带 conversation_id 且与
   terminal 当前对话一致时才持久化
3. 前端切换模型不携带 conversation_id -> handleModelSelect 带上
4. _apply_workspace_personalization_preferences 把 session 全局模型
   /个性化默认模型覆盖到对话级 terminal -> 对话级 terminal 跳过,
   其模型由绑定加载权威确定
2026-07-20 02:20:06 +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