Repository navigation
workspace-changes: git snapshot in agent/turn-stopping can block turn/end for a minute on large workspaces #10601
Unanswered
zhang-guo-wen
asked this question in
Q&A
Replies: 1 comment
|
确认,而且卡点就是你说的那一处。
if (turnEnds && this.inbox.nextStep.length === 0) {
await this.dispatch.serial('agent/turn-stopping', { turn, signal })
signal.throwIfAborted()
}
if (turnEnds && this.inbox.nextStep.length === 0) break
有个可以直接改的点:这个插件在 两个方向,代价不同: 一是把快照挪出阻塞路径—— 二是保住精确性、只把等待变成可见—— 如果这条要走补丁,建议按一改,因为 28 秒的收尾对长会话是常态;按二改只是把体验问题从"卡住"变成"知道在等"。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
现象
每次模型回复结束后,界面上的「深度求索中」状态行仍会继续转圈、计秒十几秒到几十秒才消失。模型实际生成只用了 1.9 秒,但整轮迟迟不结束。
从 Session 日志看得很清楚(一次「你好」对话):
根本原因
@deepseek-ai/dsh-workspace-changes在agent/turn-stopping里同步等待一次完整的 git 工作区快照。该钩子是阻塞的,turn/end必须等它跑完才会写入,所以前端running标记在模型已经输出完毕之后仍保持为true。相关代码:
packages/core/agent-loop/src/agent.ts:361-364—await this.dispatch.serial('agent/turn-stopping', ...)packages/deliverables/workspace-changes/src/index.ts:155-157→recorder.stopping(turn)packages/deliverables/workspace-changes/src/recorder.ts:310→snapshotTree(...)packages/deliverables/workspace-changes/src/git.ts:165—git add --all --ignore-errors写私有 index关键点:慢的不是受跟踪文件,而是未跟踪文件
我在 Windows 11 + git 2.52.0.windows.1 上,对 DSH 源码仓库(16,347 个受跟踪文件)做了对照测量:
git ls-filesgit status --porcelaingit ls-files --others --exclude-standardgit add --allgit write-tree也就是说:受跟踪文件只有 1.6 万个,但工作区里有 12 万个未被
.gitignore覆盖的未跟踪文件(本例中.dsh-build-tmp/一个目录就贡献了 115,776 个,4.98 GB)。git add --all会为它们全部计算 blob 哈希并写入 index,这才是耗时来源。把相关目录补进
.gitignore后,未跟踪文件从 121,182 降到 67,单次快照从 67.7s 降到 0.17s,卡顿随之消失。想请教的问题
这是否是已知问题? 类似场景下是否有推荐的规避方式?
工作区快照是否必须同步阻塞
turn/end? 按代码,end()那条路径(turn/end之后)本来就是异步的,而stopping()是同步等待。能否把记录整体移到turn/end之后,让turn/end先落、workspace/changes事件后到?这样至少 UI 不会被拖住。是否考虑过限制
add --all的范围? 例如只快照受跟踪文件,或对未跟踪文件加数量/耗时预算,超过就退化记录(就像现有maxFiles/maxFileBytes那样)。现在--ignore-errors会让超长路径被静默跳过,快照实际是不完整的,但没有提示。Agent Note 里的性能结论是否是在 macOS/Linux 上测的?
2026-09-11-turn-changed-files-card中写「一万个文件约 60ms,stat 缓存在 index 里对耗时没有可测量的影响」。这个结论在 Windows + 大量未跟踪文件时不成立——我在本机测到 66 秒。如果 Windows 是支持目标平台,这条结论可能需要补充平台条件和未跟踪文件数量的前提。环境
.git约 1.1 GB@deepseek-ai/dsh-workspace-changes0.2.1-rc.2感谢!
All reactions