Beta v0.4.34
Pre-release
Pre-release
Changelog v0.4.34 - 2026-07-11
修复 (Bug Fixes)
修复新建对话后 tokens/llm-selection 404、界面回退到旧会话的问题(issue #147)
问题描述
- 现象:工作区内点击“新建对话”后,新会话界面短暂出现又回退到旧会话;新会话的
tokens与llm-selection接口返回 404;连续点击会在后端遗留多个草稿会话。 - 原因:v0.4.34 的 release merge(
0448e6b)在解决useSessionOrchestrator.ts冲突时取了功能分支上的旧版本,把主干上 4 个新建会话修复(2a72168、847e1f2、5f8e4e6、78547fc)静默回退;同一次合并还删除了后端回归测试test_execute_stream_binds_unbound_draft_to_workspace。
改动内容
- 恢复
handleNewSession调用POST /api/sessions/create创建后端会话元数据(失败不阻塞 UI,前端继续乐观切换)。 - 恢复“新建对话总是创建全新 session”:不再复用 available-draft 预热草稿,空会话时也不复用当前 sessionId。
- 补回被合并删除的后端回归测试
test_execute_stream_binds_unbound_draft_to_workspace。
文件变更
apps/web/src/pages/WorkspacePage/hooks/useCodeExecutor/useSessionOrchestrator.tsapps/backend/tests/test_agent_execute_stream_lazy_create.py
修复手动压缩被反增检测静默丢弃的问题
问题描述
- 现象:用户手动触发上下文压缩(
/compact)后无任何效果,history.json不产生压缩快照与摘要。 - 原因:压缩的反增检测要求压缩后总 token 至少降低 5%,但检测口径包含 system prompt 等不参与压缩的固定开销;当固定开销占比高时(日常会话的常见情况),可压缩内容占比小,总降幅必然达不到 5%,导致 LLM 摘要已生成却被静默回滚。
改动内容
- 手动强制压缩(
force=True)跳过反增检测:用户显式触发且摘要已产出,不再因降幅不显著而丢弃。 - 自动触发(达到上下文阈值)保持原有反增检测不变,仍用于避免无效压缩循环。
- 补充单元测试覆盖两条路径:force 跳过检测、自动触发仍被拦截。
文件变更
apps/backend/app/services/agent/runtime_backends/aiasys/session_compaction.pyapps/backend/tests/test_compaction.py
功能 (Features)
安装脚本 Windows 分支改为优先 NSIS exe
问题描述
- 现象:
apps/desktop/scripts/install.cjs的 Windows 分支一直走绿色版 zip 解压逻辑,与桌面打包产物的实际主推格式(NSIS exe)不一致;本地验证时经常出现 Agent 生成 zip 安装命令而不是 exe。 - 影响:规范文档、脚本行为、打包产物三者口径不统一,增加人工确认成本。
改动内容
apps/desktop/scripts/install.cjsWindows 分支改为优先识别.exeNSIS 安装包并静默安装,.zip绿色版降级为 fallback。- 更新
docs/guides/getting-started/desktop-app.md和AGENTS.md中"桌面打包优先"的表述,统一为 NSIS exe 优先。
文件变更
apps/desktop/scripts/install.cjsdocs/guides/getting-started/desktop-app.mdAGENTS.md
功能 (Features)
新增文件编辑保存快捷键(Ctrl+S / Cmd+S)
问题描述
- 现象:在代码编辑器、Markdown/HTML/Code 预览的源编辑模式下修改文件后,只能通过点击“保存”按钮提交,缺少用户熟悉的全局保存快捷键。
- 影响:与 VS Code、Obsidian 等工具的交互习惯不一致,频繁点击保存按钮降低编辑效率。
改动内容
- 新增通用 hook
useSaveShortcut,统一拦截Ctrl+S(Windows/Linux)和Cmd+S(macOS),在满足条件时调用保存回调。 CodeEditorPanel接入快捷键:仅当文件可编辑、存在未保存修改且不在保存中时响应。FilePreviewPanel的 Markdown / HTML / Code 源编辑模式接入快捷键:仅在源编辑模式、可编辑且有未保存修改时响应。- 保存中状态自动忽略重复触发,避免重复提交。
文件变更
apps/web/src/hooks/useSaveShortcut.ts(新增)apps/web/src/components/editor/CodeEditorPanel.tsxapps/web/src/components/layout/WorkspaceSidebar/preview/FilePreviewPanel.tsx
新增保存快捷键单元测试
改动内容
- 新增
useSaveShortcut单测文件,覆盖以下场景:Ctrl+S触发保存Cmd+S触发保存- 仅修饰键(无 S)不触发
enabled=false时不触发isSaving=true时不触发
文件变更
apps/web/src/hooks/__tests__/useSaveShortcut.test.mjs(新增)
新增保存快捷键端到端测试
改动内容
- 新增 Playwright e2e 测试,验证在代码编辑器和 Markdown 预览源编辑模式下按下
Ctrl+S后文件内容正确持久化。 - 测试覆盖创建文件、进入编辑模式、修改内容、快捷键保存、API 回读验证的完整链路。
文件变更
apps/web/e2e/lifecycle/workspace-file-save-shortcut.spec.ts(新增)
新增 PowerShell 版本感知与提示词注入
问题描述
- 现象:Windows 上 Agent 默认按 PowerShell 7(pwsh)语法生成命令,但用户系统实际是 PowerShell 5.1(powershell.exe),
&&、三元运算符、??等写法在 5.1 直接报错;经 WSL 互操作时语法混用报错更多。 - 影响:Agent 生成 shell 命令时无法感知宿主真实 PowerShell 版本,命令执行反复失败。
改动内容
- 后端自动检测宿主 PowerShell 环境(pwsh 与 powershell 的路径、版本),生成
${POWERSHELL_SECTION}提示词段落注入 system prompt:检测到 5.1 时明确禁用&&/ 三元 /??等 7+ 专属语法,检测到 7+ 时提示经 WSL/旧版互操作需使用 5.1 兼容写法。 - 设置页「环境增强」面板新增 PowerShell 目标版本选择(自动 / 强制 5.1 / 强制 7+),偏好持久化到
DATA_DIR/shell_preferences.json,固定 5.1 时提示词中的路径与规则同步切换。 - 新增
PUT /api/system/shell-environment/powershell-target接口保存目标版本。
文件变更
apps/backend/app/services/shell_environment.pyapps/backend/app/services/agent/config.pyapps/backend/app/agents/local_sandbox_agent_config/general_host_prompt.mdapps/backend/app/api/routes/system.pyapps/web/src/config/api.tsapps/web/src/components/settings/ShellEnvironmentPanel.tsx
代码质量 (Code Quality)
- 移除
apps/web/src/components/editor/CodeEditorPanel.tsx中替换为 hook 后遗留的未使用useEffect导入。 - 优化
FilePreviewPanel中编辑模式启用条件,统一为canEditScope && sourceViewMode === "source" && hasUnsavedChanges && !isSaving,避免在阅读模式下无意义监听快捷键。
架构重构 (Architecture)
前端弹窗底层从 Radix UI 迁移到 Base UI
问题描述
- 现象:版本管理弹窗等场景下,点击详情后关闭弹窗,后续界面全部无法点击,页面处于卡死状态。
- 影响:Radix Dialog 的 overlay 清理与路由切换存在竞态,
document.body.style.pointerEvents等样式可能残留,导致全局交互失效。
改动内容
- 将
dialog、alert-dialog、sheet、dropdown-menu四个封装组件从 Radix UI 迁移到 Base UI。 - 保留原有业务代码 import 路径不变,通过封装层映射 Base UI 的
DialogRoot/DialogPopup/DialogBackdrop等 primitive。 - 对
DropdownMenuTrigger增加asChild兼容,对DialogContent增加onEscapeKeyDown/onPointerDownOutside/onOpenAutoFocus兼容,避免业务代码大面积修改。 - 前端构建通过,TypeScript 类型检查无错误。
文件变更
apps/web/src/components/ui/dialog.tsxapps/web/src/components/ui/alert-dialog.tsxapps/web/src/components/ui/sheet.tsxapps/web/src/components/ui/dropdown-menu.tsx
测试 (Tests)
新增 PowerShell 提示词注入单元测试
改动内容
- 新增 17 个用例,覆盖:pwsh / powershell 检测与优先级、目标版本偏好持久化与校验(auto / 5.1 / 7+)、5.1 与 7+ 两种提示词段落内容、模板
${POWERSHELL_SECTION}占位符注入、env_info注入渲染链路。
文件变更
apps/backend/tests/test_powershell_prompt_section.py(新增)
新增新建会话回归端到端测试(issue #147)
改动内容
- 新增 Playwright lifecycle 测试:工作区内点击「新建对话」后,断言新会话的
tokens/llm-selection接口返回 200、URL 停留在新 session、界面不回退到旧会话。 - 已在回退代码(修复前)上验证测试失败、在修复后代码上验证通过,双向确认有效。
文件变更
apps/web/e2e/lifecycle/conversation-create-flow.spec.ts(新增)
重写过期的新建工作区端到端测试
问题描述
workspace-create-flow.spec.ts写于 v0.4.2 时期,断言的「工作区启动面板」「资产」按钮等入口在产品改版后已不存在,4 个用例全部失败但长期未被发现,新建工作区核心旅程实际处于无有效 e2e 覆盖状态。
改动内容
- 按当前 UX 重写为 2 个用例:
- 弹窗基本信息校验:任务名称/任务说明、空名称禁用创建按钮、无历史沙盒控件。
- 创建核心旅程:弹窗创建工作区 → 路由进入新工作区 → 输入框可用 → 新会话 tokens 接口 200 → 侧边栏出现新工作区。
- 无 id 访问
/workspace的工作区首页场景由既有workspace-home.spec.ts覆盖,不再重复。
文件变更
apps/web/e2e/lifecycle/workspace-create-flow.spec.ts(重写)
What's Changed
- fix(session,backend,desktop): 修复同一工作区新建会话 400 及 Bug Swarm 首轮 P0/P1 问题 by @li-xiu-qi in #141
- docs(readme): 将社区与联系图片替换为飞书文档 by @RachelJ-Li in #144
- release: v0.4.34 Base UI migration and workspace improvements by @li-xiu-qi in #145
- release: v0.4.34 强制重新发布 by @li-xiu-qi in #149
- fix(backend): PowerShell auto 检测同时存在 7+ 和 5.1 时按 5.1 兼容 by @li-xiu-qi in #150
- fix(web): 删除全部工作区后停留在零工作区页面 by @li-xiu-qi in #151
- fix(ui): 统一 DropdownMenuItem 高亮/悬停背景色 by @li-xiu-qi in #152
- release: v0.4.34 补丁合集(PowerShell / 删除工作区 / 下拉菜单样式) by @li-xiu-qi in #153
- release: v0.4.34 强制重新发布 - PowerShell 检测策略修正 by @li-xiu-qi in #154
Full Changelog: v0.4.33...v0.4.34