Commit Graph

803 Commits

Author SHA1 Message Date
34bb5d61cc fix(personalization): 修复子智能体最大执行轮次保存丢失,多智能体豁免该上限
- sanitize_personalization_payload 白名单注册 sub_agent_max_turns /
  sub_agent_compress_threshold_tokens(此前保存时被静默丢弃,刷新回默认)
- PUT /api/multiagent/settings 恢复默认由 pop() 改为写显式 null,
  绕开 save 的 fallback=existing 复活旧值问题
- task.py:multi_agent_mode 任务一律不设轮次上限(含历史任务恢复),
  该设置仅对传统后台子智能体生效
- 个人中心文案标明适用范围
2026-08-12 19:14:22 +08:00
ff927d6739 refactor(files): 下线独立 /file-manager 页面及其写操作端点
- 删除页面路由:/file-manager、/file-manager/editor、/file-preview/<path>
- 删除写端点:/api/gui/files/{create,delete,rename,copy,move,upload,download/batch}
- 保留主 SPA 共享端点:/api/files、entries、text、download、/api/project/files/search
- 拆除前端入口链:QuickMenu → InputComposer → App.vue → openGuiFileManager
- 删除 static/file_manager/ 目录(git 历史可恢复)
- sanitize_filename_preserve_unicode 迁至 server/utils_common.py,
  清理 5 个拆分文件的死 import,修复 api_v1/chat 上传的引用来源
- 安全收益:create/rename 路径穿越与 preview 存储型 XSS 随页面物理消解
2026-08-12 19:14:01 +08:00
99f4d3d1dd fix(server): 对话级主任务门闸,修复并发主任务交叉写入对话历史
事故:socketio 用户任务(不在 task_manager 注册)与完成通知轮询器
派发的通知任务并发写入共享 conversation_history,产生 assistant 乱序段,
导致 Kimi API 400(tool_call_id is not found)与通知永久丢失。

- 新增 server/main_task_gate.py:对话级主任务门闸(单写者不变量,
  一个 WebTerminal 同一时刻只允许一个主聊天任务)
- process_message_task 作为唯一入口获取/认领门闸,拿不到即拒绝;
  通知链 token 经 session_data 移交,失败释放并回滚通知标记;
  _run_chat_task finally 兜底释放防泄漏
- execute_tool_calls 改守护包装(try/finally 复位 _tool_loop_active),
  杜绝并发交错导致标志卡死
- build_messages 增加孤儿 tool 消息剥离防御层(止血,不替代门闸)
- AGENTS.md 新增 §12 记录门闸架构与改代码硬约束
2026-08-12 18:01:32 +08:00
70d2bceb45 feat(chat): 编辑摘要卡片文件列表限高 5 行 + 内部滚动
原先全量渲染无高度限制,编辑文件多时卡片撑爆消息流。现 160px 封顶
(32px x 5 行),超出内部滚动,滚动条隐藏(同 QuickDock 惯例)。
2026-08-12 11:24:12 +08:00
dd08845bbc fix(quickdock): 子智能体/后台指令/文件行选中态由近黑改为 hover 色
is-active 原先使用 --surface-soft,dark 主题下为 #0f0f0f 近黑色,违反
大面积色块禁近黑规范;改为 var(--hover-bg),点击选中与 hover 视觉一致。
2026-08-12 11:23:57 +08:00
4b78fd6d40 fix(input): 输入栏 + 按钮改 SVG 图标,修复视觉重心偏下
原为裸文本 + 字形(font-size 20px),flex 居中的是行框而非字形光学
中心,hover 背景块下可见偏下。改用项目既有 SVG 加号(16x16,stroke 2),
与 WorkspaceSwitcher 同路径。
2026-08-12 11:23:41 +08:00
011f9e14bc fix(file-manager): direct 执行环境下文件工具不再误拦授权范围外路径
run_command 是否走沙箱只看执行环境,而 read_file/write_file/edit_file 是
进程内文件操作不走 OS 沙箱,唯一防线是 FileManager._ensure_host_access
的授权路径检查,但它不知道执行环境,导致完全访问权限(direct)下仍按
授权列表拦截。现 FileManager 同步 host_execution_mode,direct 时与
run_command 语义对齐直接放行,sandbox 模式检查保持不变。
2026-08-12 11:23:27 +08:00
8da4a596eb fix(frontend): 空对话与显式新建路由下 has_images/has_videos 不应用残留状态
status 中的值来自 terminal 残留的旧对话上下文,空对话语义上无图片/视频,
直接置 false,否则误拦 handleModelSelect 的图片/视频能力检查。
2026-08-12 11:23:06 +08:00
55e0dcfb4f feat(modify-history): 新增文件修改留痕——编辑实时落盘 diff、开关与 prompt 注入 2026-08-12 02:20:40 +08:00
4d2fe0a91f docs: AGENTS.md 约定视觉验证默认由用户完成 2026-08-12 02:20:30 +08:00
9a2469e3fb chore(input): 输入栏类型切换器移除人形 SVG 图标改为纯文字 2026-08-12 02:20:17 +08:00
a33c3fa6af fix(sidebar): 深色模式类型切换选中态配色,双类型常驻缓存修复切换动画 2026-08-12 02:20:03 +08:00
ee03b34c41 docs: AGENTS.md 设计规范新增大面积色块禁纯黑条款 2026-08-11 23:39:02 +08:00
492b738859 refactor(ui): 打勾框收敛为 FancyCheck 单一组件并修复残缺路径
- 新增 components/common/FancyCheck.vue 作为全局唯一打勾框实现(checked/size/accent-checked)
- 修复个人空间「编辑摘要实时显示」开关 d 路径中段缺失导致对勾渲染变长
- 38 处内联 SVG 全部改为组件引用,删除四处重复的 fancy 样式
2026-08-11 23:39:01 +08:00
79f8ffa368 feat(chat): 编辑摘要卡片弹窗改为锚定定位并修复深色近黑样式
- 弹窗水平相对编辑卡片居中,垂直优先锚定条目上方(空间不足自动翻到下方),高度吃满可用空间
- 行 hover 改用 --hover-bg(深色提亮),弹窗头部去近黑衬底改用分隔线
- 行高亮 is-active 仅钉住态挂载,修复 hover 消失延迟
2026-08-11 23:38:47 +08:00
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
d4301a0f56 fix(sidebar): 修复收起时透明对话列表可误触切换、类型切换器未隐藏的问题 2026-08-11 19:03:38 +08:00
d3ec94e7e8 feat(sidebar): 分组模式统一顶部对话类型切换器,列表切换改推挤动画
- 分段控件(普通对话/多智能体)在分组模式下也显示在搜索框下方,移除工作区标题行单字切换按钮
- 列表切换移除 Transition out-in(消除空白期),改为同步推挤滑动:新面板绝对定位从侧边滑入顶出旧面板,去掉 opacity 淡入淡出
- 切换时重置列表滚动位置;同步更新 AGENTS.md 描述
2026-08-11 18:14:22 +08:00
9fff41650d feat(chat): 输入栏附件系统增强——粘贴图片、文件附加、图片灯箱与文件预览联动
- 输入框支持直接粘贴图片(Tiptap handlePaste,复用拖拽三路分发)
- 文件附加:拖拽/粘贴/选择的普通文件以文件块(FileChips)附加到输入栏,
  随消息发送;后端在主消息 metadata.files 记录并插入 hidden file_paths
  通知消息告知模型文件位置;运行中队列/自动续发/引导全链路携带 files
- 文件块视觉:196x60 与图片同排同高同圆角,类型彩色图标(文档/表格/
  演示/PDF/文本/代码/压缩包),深色提亮变体,SVG 删除按钮与图片统一
- 图片大图预览灯箱(ImageLightbox):最大 1100x780 不铺满全屏,移动端适配
- 文件块点击 → 快捷窗口文件预览面板(复用 /api/file/content)
- 预览面板:hover 灰行在横向滚动下贯穿整行(qd-code 宽度锚定内容全宽);
  新增设置项「预览窗口自动换行显示」(默认关闭,换行模式逐行渲染 +
  行级 content-visibility 屏外跳过渲染优化)
- SVG 从图片链路剔除(isImageFile 排除 + 图片选择器白名单),按普通文件处理
2026-08-11 17:16:56 +08:00
b51b2597a8 fix(personalization): 修复拖选文字松开落在遮罩上误关抽屉的问题
- 个人空间抽屉与角色编辑弹窗的遮罩关闭由 click.self/mousedown.self
  改为「按下与松开都发生在遮罩上」的成对判定
- 修复在输入框内拖选文字、松开落在遮罩上时被误判为点击遮罩,
  导致抽屉/角色编辑器意外关闭、表单内容丢失
2026-08-11 11:21:30 +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
59a9f6ab62 feat(multi-agent): create_custom_agent 支持同 role_id 覆盖更新
- 同 role_id 重复创建时由报错改为覆盖式保存,结果中返回 overwritten 标记
- 覆盖仅影响之后新创建的实例,运行中实例 prompt 已快照冻结不受影响
- 工具 description 与结果格式化文案同步说明该语义
2026-08-11 01:51:22 +08:00
d5b1e2c3af docs: 对话类型统一重构方案(消除多智能体模式全局状态) 2026-08-09 18:15:42 +08:00
165c771cc7 fix(server,static): 网络权限实例级快照与快捷窗口跨对话残留消闪
网络权限此前以进程级 os.environ 为唯一真相:每个 WebTerminal 初始化
都把 env 重置为默认值(切 full 后任何新 terminal 创建即失效),多实例
并发互相覆盖;后台指令与持久终端 shell 直接读 env,导致权限不生效或
跨工作区串扰。

- 唯一真相改为 WebTerminal 实例属性,init/set 不再写 env
- 后台 run_command: create_background_command 快照传入执行线程
- 持久终端 shell: 注入 network_permission_getter 实时取所属终端实例的值
- 快捷窗口: backgroundCommand/subAgent store 在 fetch 前同步剔除
  conversation_id 不属于当前对话的残留记录,消除「旧对话数据闪一下
  再清空」造成的“任务被停了”误解(后端任务实际一直在运行)

验证: py_compile 通过;冒烟 6 用例 OK;前端构建成功
2026-08-08 23:59:45 +08:00
be061bec78 fix(server): 停止标志改为任务级隔离,修复并行对话互相停止
stop_flags 此前以 user:{username} 级共享 entry:任务启动时兜底复用并
mutate 共享 entry(task/loop 引用被后启动任务覆盖),stop 标志经用户级
key 广播——停任意一个对话,同用户所有并行对话(含跨工作区、传统与
多智能体混合)全部停止,cancel_task 还可能取消错 task 对象。

- state.py: get_stop_flag 新增 include_user 参数;clear_stop_flag 仅在
  user 级索引仍指向本任务 entry 时才清理
- chat_flow.py process_message_task: 每任务新建独立 entry,不再复用
- 8 处运行期检查点(流式/工具循环/重试等待/两个 poll/主循环)改为
  include_user=False,只查任务级 key
- socket 链路(connect 恢复/disconnect/stop_task)保留用户级索引语义

验证: 冒烟 6 用例 OK;并行场景 9 断言脚本验证通过
2026-08-08 23:59:23 +08:00
045cc72c43 feat(ask-user): 弹窗新增「不回答」选项
- 弹窗 footer 新增「✕ 不回答」按钮,只跳过当前查看的问题,
  其余问题保持待回答
- 后端 answer() 支持 dismissed 类型答案,跳过非空校验
- 模型侧工具结果返回「用户没有回答或不想回答这个问题,
  请直接输出内容向用户提问」,引导模型改为在对话中提问
2026-08-07 14:31:05 +08:00
1cd3a742af fix(agent): 修复工具结果system_message注入夹断tool序列导致的API 400
- execute_tool_calls 循环内改为收集 pending_tool_system_messages,
  整轮工具结束后统一注入,避免并行 tool_calls 中途插入 user 消息
- terminate_sub_agent handler 摘除结果中的 system_message,
  主智能体自行终结子智能体时不再注入冗余 user 消息
2026-08-07 14:11:22 +08:00
dd2f00276d refactor(input): 移除多智能体模式切换的运行中任务限制 2026-08-07 11:54:45 +08:00
d2dd097248 fix(chat): 修复移动端运行期滚动脱锁失效,流式渲染分块防重建
- ChatArea: 新增触摸手势脱锁(手指下拉>8px 视为脱锁意图),与桌面端 wheel-up 同路径;嵌套滚动容器内触摸不解除外层锁定
- ChatArea: 展开锚定改为按条件跳过——仅贴底锁定中的运行态块交给逐帧追底,手动展开(含脱锁后历史块)走锚定,修复外框与内容移动不同步
- scroll: 脱锁标志重置改为严格贴底判定(<=4px),nearBottom 70px 容差与意图冷却期内不再误清脱锁标志,修复移动端第一次上滑必被拽回底部
- lifecycle: 移动端视口 watcher 提前到路由/对话加载前,避免加载期按桌面布局渲染
- MarkdownRenderer: 文本段按顶层块分片渲染+分段级缓存,流式期间已完成前缀块 DOM 不再重设,保护 show_file 卡片/表格/KaTeX 不被反复重建
- view_image: 工具结果携带 size,前端按 path 走 /api/file/content 加载原图,图片限高 480px 防长截图占满对话区
2026-08-07 11:32:20 +08:00
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
a7a40a8a2f fix(utils): 原子写重试预算上调至8次/4.75s,索引保存失败留证与日志落盘
- replace_with_retry: attempts 6→8,新增 max_delay 参数(默认1.6s),覆盖 Defender/Search 索引器持续持锁超过原1.55s预算的场景
2026-08-03 22:18:41 +08:00
3ceace2762 fix(skills): skill 文件读取等待同步窗口,避免并发全量同步误判不存在
工作区 skills 目录会被并发全量同步(rmtree+重建)短暂清空:每个新对话级 terminal 实例各触发一次同步(标记 _skills_synced_project_path 挂实例),实测新会话开始 2.5s 内并发 4 次全量同步,_resolve_workspace_skill_path 一次 is_file() 失败即 400「skill 文件不存在」。新增 wait_skill_file_ready(复用同步锁有界等待本轮重建 + 200ms 轮询,预算 2.5s),读方改走该原语;补 4 项单测(共 7 项全过)。缓存踩踏/rmtree 全量重建等架构层竞态按决议暂不处理,方向见项目记忆 conversation_vs_workspace_terminal。
2026-08-02 00:00:41 +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
32633f7eec docs(agents): 修正冒烟测试命令,Windows 上 stdlib test 包遮蔽本地 test 目录 2026-08-01 10:45:53 +08:00
a136e818d7 fix(mcp): stdio 客户端改用读线程+队列,修复 Windows select 管道 WinError 10038 2026-08-01 10:45:29 +08:00
dc61bd92dc refactor(runtime-mode): 运行期模式切换通知改为基线漂移检测机制 2026-08-01 10:02:24 +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
2c2c5aba4d fix(modules): 修复 Windows UTF-8 编码链(对照 Codex #7290 类问题)
- persistent_terminal 解码写死 GBK 改为 UTF-8 优先 + GBK 回退逐块自适应,GBK 边界感知 + _pending_bytes 暂存半字,进程结束冲刷

- start.py:Windows 默认 cmd.exe 启动后注入 chcp 65001,与 PYTHONIOENCODING=utf-8 对齐,消除输出/解码自相矛盾

- 5 处 subprocess text=True 补 encoding=utf-8(后台命令x3、MCP stdio、版本管理、病毒扫描、容器管理),照 server/status/git.py 示范

- main.py:补 PYTHONUTF8/PYTHONIOENCODING 兜底 + stdout/stderr reconfigure;修复 print 中被双重编码固化的 emoji

- docx 验证器 XML 改二进制读取,由 lxml 按声明自解码
2026-07-31 22:39:51 +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
7aab7da8aa fix(windows): 超时终止链弃用 CTRL_BREAK_EVENT,修复后端自杀式崩溃
根因(日志实证):沙箱命令超时后 _interrupt_subprocess 发送的
CTRL_BREAK_EVENT 会投递到本进程自身(即使子进程带
CREATE_NEW_PROCESS_GROUP),无保护的后端收到后直接终止,
终端仅显示 ^C、无任何报错。沙箱 git 病态缓慢导致频繁超时,
是该崩溃的触发器(已由上一个提交的 git 配置修复)。

- terminal_ops/run.py: Windows 超时中断直接 taskkill /F /T 杀整棵树
  (抽出共用 _taskkill_tree),不再尝试 CTRL_BREAK 优雅中断
- background_command_manager.py: _terminate_pid 同步弃用 CTRL_BREAK
- 拆除全部 [SBX-DEBUG] 诊断埋点,删除 modules/sbx_debug.py
  (探针会吞掉 Ctrl+C,诊断任务完成,归还正常信号行为)
2026-07-31 19:33:43 +08:00
5ef0a04ed0 fix(windows): 沙箱发行版 git 增加 autocrlf/checkStat/trustctime 配置 2026-07-31 18:19:51 +08:00
04c9db8a5b feat(windows): 沙箱最小根文件系统与崩溃排查调试埋点 2026-07-31 17:51:05 +08:00
77be044c44 fix(versioning): 修复首改文件 diff 基准丢失导致全文件计新增
根因:track_edit 在编辑前备份的 v1(修改前内容)只存在于该消息的
中间行,make_snapshot 用最终行(v2 修改后内容)整体替换该行后,
v1 不再被任何快照引用。对会话中首次被跟踪的文件,diff 配对找不到
上一条消息里的基准,按 added 处理并把全文件计为新增(+479 -0)。
26f31a09 修的是重复行配对,未覆盖这一数据丢失路径,故跨平台复现。

修复(不改数据模型,纯读取侧恢复):
- 新增 _resolve_diff_base_backup:优先用上一条消息快照里的备份;
  缺失时利用备份名确定性(sha256(绝对路径)@vN)与版本逐文件连续的
  不变量,回退到 v(N-1) 作为消息前状态(新建文件 v1 不落盘,自然
  仍判 added);首次出现即 v1 说明消息未改动该文件,与自身比较得 0。
- get_diff_stats / get_file_diff_stats / get_file_patch_lines 三处
  统一走该解析;旧 state 数据(v1 备份文件仍在)透明愈合,亦兼容
  MAX_SNAPSHOTS 逐出旧行的场景。
- 新增 5 个回归测试(生产顺序:track_edit 先于写入);修正 2 个旧
  测试的模拟顺序使其与生产一致(原顺序先写后 track,把新建文件
  误模拟成 v1 首现)。

验证:11/11 通过;旧代码跑新测试 4/5 失败(复现);用事故对话
conv_20260731_114736_581 真实数据只读复算,#1 由 +479/-0 added
修正为 +4/-1 modified(与实际编辑一致),#2 保持 +0/-0;全量测试
失败/错误数与 HEAD 基线完全相同(2+10,均为预存在/环境问题)。
2026-07-31 04:39:35 +00:00
1760ca66f3 docs(repo): AGENTS.md 运行环境边界补充 Windows 环境位置 2026-07-31 03:59:56 +00:00
493ac160eb fix(windows): 平台适配与稳定性修复(进程终止/编码/原子写/事件竞态/子智能体)
- 进程终止:Windows 用 CTRL_BREAK + taskkill /F /T 替代不存在的 killpg/SIGKILL,
  超时/取消全路径有界;_is_pid_alive 改 ctypes(原 os.kill(pid,0) 在 Windows 会真杀进程);
  reader 任务 finally 收口,消除 Task was destroyed but it is pending / unclosed transport
- 子智能体调度链:_run_coro 超时 60s + 失败 cancel/close 防幽灵协程;create 改先调度后提交、
  失败回滚;state 归属守卫 + 新建 120s 宽限期防误标已终止;_ensure_event_loop 加锁;
  子智能体 todo 改 per-agent 隔离存储,不再串到主智能体前端
- 子智能体执行环境(execution_env_text.py):创建/切换/恢复三时点注入环境说明,
  Windows 下 sandbox=WSL2 bash、direct=cmd;inject_notification 纯通知不触发新一轮工作,
  tool 序列中延迟到安全点 flush;传统子智能体按既定语义不通知
- 编码:git 侧边栏 subprocess 显式 utf-8 + errors=replace(修中文 Windows GBK
  _readerthread 崩溃导致侧边栏空白);check_environment/install_package 用 self.python_cmd
- 安全/路径:permission.py Windows deny 列表生效 + 驱动器根拦截;路径比较统一 normcase;
  /tmp 白名单平台分流;正斜杠判断归一化;os-release 平台守卫;PowerShell -ExecutionPolicy Bypass
- 稳定性:任务事件轮询持锁快照(修 deque mutated during iteration);
  原子写新增 replace_with_retry(修 WinError 5/32 瞬时持锁);
  共享文件兜底链 symlink→os.link 硬链接→copy2
- 部署:新增 _bootstrap.bat / setup.bat / start.bat Windows 启动脚本
2026-07-31 11:33:57 +08:00
3bb47ff857 docs(repo): 恢复追踪 AGENTS.md 与 agentskills/,AGENTS.md 完成脱敏 2026-07-30 22:43:01 +08:00