Repository navigation
六条实测缺陷反馈(rc.8):预设默认值不跟随复用会话 / 归档单向 / 审批无超时 / 持久 bash 多字节碎裂 等 #3614
Replies: 2 comments
|
六条里两条我们已有验证,补上证据链: 2. 归档单向:与 #3546 同缺口(archiveSession 存在但无 unarchive/delete 入口,社区已有 dsh-archived-sessions / dsh-session-manager 回收站等轮子)。我们的分析:删除语义建议做成"归档 → TTL 自动清理"而不是直接 delete;官方落地前,dsh-shelf(会话导出/归档 CLI)和 dsh-disk-audit(磁盘占用与超大文件)可以立即缓解"归档后无入口"和"无法清理"。详见 #3546 回复。 4. 持久 bash 多字节碎裂:与 #3174/#3522 同一持久通道的已知脆弱面——持久 bash 会话的读取侧是按 chunk 消费的,多字节 UTF-8 字符恰好在 chunk 边界被切开会碎裂(首字节进入上一块、续字节进入下一块),若解析器不跨块保存解码状态就会稳定复现中文/emoji 输出乱码。建议:读取侧改成保留 partial 多字节序列的流式解码(如把 chunk 交给 TextDecoder 的 stream 模式或等价带 state 的解析器),并配一个"边界切分多字节字符"的回归测试。这条与 #3174 的 tmpfs 不对称、#3522 的 300s stall 同属"持久 bash 通道缺系统性测试"的大类。 |
|
六条都很实,zoahdev 已覆盖 #3(归档单向,#3546 同缺口)与 #6(持久 bash 多字节碎裂,#3174/#3522 同族),我补**缺陷 #1(预设默认值不跟随复用空白会话)**的源码侧确认与最小修复路径——这是六条里唯一还没被覆盖的。 rc.8 源码确认(你的"两条规则都不覆盖"判断成立):
真空确认:空白会话复用 = "不是 created"(不吃新默认)也不 "running"(不显示当前预设语义),两条规则之间确实没有 watcher 在对齐。你的"recompose 到当前默认"建议方向对。 最小修复路径(按官方既有语义,不新增概念): 在复用空白会话的入口(host 侧 attach/reuse 路径)加一个对齐步骤: 要点:
这条和 #2(settings/document-updated 事件不达宿主层注入插件)其实同源:预设默认值变化缺少一个到达"该被影响会话"的通知通道。修 #2 的事件语义 + 这条的对齐触发,可以合并成"设置变更 → 存量空白会话对齐"一个改动。 附:你的备注(rc.7→rc.8 预设 [disabled]→[active] 翻转)建议单开一条独立帖——"升级重写用户预设物化文件导致权限面变宽"是安全敏感问题,值得官方明确 release note 承诺,埋在 6 条汇总里容易被忽略。 |
Uh oh!
There was an error while loading. Please reload this page.
DSH 缺陷反馈汇总(6 项)· 2026-08-20
1. 空白会话复用不跟随默认预设(设计缺口)
现象:修改
agent-presets.default后点「新对话」,工作区优先复用同 cwd 的空白会话,该会话仍用创建时的旧预设。表现像设置没生效;新对话页的模式 chip 也显示旧预设。复现:① 工作区有一个空白会话(预设 A);② 设置里把默认改为 B;③ 点新对话 → 复用旧空白会话 → 实际跑的是 A。
证据(三条官方设计原文之间存在真空):
dsh-host-apiproxy/lib/types/api/sessions.d.ts:"Clients hide blank Sessions from lists and reuse them for New Session on the same workspace."dsh-agent-presets/lib/index.js(defaultId注释):"changing the default takes effect on the next session created and leaves every running session on the preset it was composed from."dsh-client-ui-agent-preset/lib/client.jsseat-store)只覆盖用户显式点选,且load()显示值staged ?? currentSession()?.agentPreset ?? fallback优先取会话旧值。建议:复用空白会话时,若其预设与当前默认不一致且用户未显式选择过,recompose 到当前默认(官方已有
agentPresets.selectRPC 与空白会话可换预设的完整语义,缺的只是触发);或host 在首个 turn 前对齐。2. settings/document-updated 事件不达宿主层注入插件
现象:通过 loader 注入(非 bundles 装配)的宿主层插件监听
settings/document-updated,外部修改 settings.yaml 后事件不触发(疑似 scope 隔离)。影响:依赖设置热更新的插件拿不到通知。我们为绕过 #1 写的本地补丁最终只能靠
agent/pre-step+ 轮询。建议:明确事件 scope 语义,或向宿主层插件广播设置变更。
3. 归档功能单向,无恢复入口(rc.8)
现象:归档会话后从列表/搜索全部消失("excluded everywhere"),无归档分区、无恢复 UI。数据仍在磁盘,只能手动改
workspace.json找回。建议:归档分区 + 恢复入口;或至少 CLI/API 层提供 unarchive。
4. 提权审批弹窗无超时兜底
现象:提权审批弹窗出现时人不在/没看到,turn 无限期卡在等待审批(实测单次卡数小时)。
建议:审批超时自动拒绝并回写可恢复状态;或提供非交互等待策略配置。
5. 工作区外写文件逐次提权,并行写=多弹窗
现象:agent 写工作区外路径(如知识库目录)每次都弹提权审批;并行多个写操作 = 多个弹窗连续打断。
建议:同会话一次批准宽权限(路径/操作粒度),或写操作合并一次提权。
6. 持久 bash 工具多字节字符间歇性碎裂 → 命令挂死(确认非偶发)
现象:persistent bash 执行含中文(多字节 UTF-8)的命令时间歇性挂死超时,输出尾部出现游离的
dsh>提示符。8-16 首记,8-20 单日复现 3 次。证据:
__DSH_PERSISTENT_BASH_START_<uuid>__/__DSH_PERSISTENT_BASH_END_<uuid>__标记与stty -echo。DSH 协作白板工作流.md被执行层碎裂解析为DSH -echo.md(grep 报错原文)——疑似 pty 写入按字节块切分时把多字节 UTF-8 序列从中间切断,碎裂字节被当作 shell 转义/选项,引号不闭合 → 永久等待输入。建议:pty 写入侧保证 UTF-8 序列原子性(按字符边界切块);REPL 包装层的标记与 stty 控制序列不应泄漏进模型可见输出。
附:rc.7→rc.8 变化实证备注
升级后观察到本地 profile 预设里 tool-bash/tool-fs/tool-goal/tool-todo/tool-workflow/ralph/plan-mode 等从 [disabled] 变为 [active](权限面变宽)。经 npm pack 全量 diff 核实:发布包预设文件几乎无变化(仅新增 pwsh 行与注释),该翻转系本地 profile 预设重新物化所致。若升级流程会重写用户预设物化文件,建议在 release notes 中提示权限面可能变化。
All reactions