[Bug] worktree 模式在含大量被忽略文件的仓库中必然失败:Git 命令输出超过限制(OUTPUT_LIMIT)

版本:Qoder 桌面版 0.3.3(macOS,Apple Silicon)

现象
在一个 git 仓库中,用 worktree 模式(从当前工作树创建新工作区)新建会话,发送第一条消息后会话立即变为 error、无任何回复,提示:

Git 命令输出超过限制,请缩小操作范围后重试。

日志错误:ChatSessionWorktreeCreationError,errorCode: OUTPUT_LIMIT,失败阶段 stage: git_creation(约 4 秒后失败)。同仓库下多个会话 100% 复现;「当前工作区」模式正常。

复现条件

  1. 仓库包含大量被 .gitignore 忽略的文件(例如多个 node_modules,合计约 27 万个文件);
  2. 仓库根目录存在 .worktreeinclude 文件(用于声明需要复制进新 worktree 的被忽略文件,如本地环境配置文件);
  3. worktree 模式新建会话并发送任意消息。

原因定位(分析应用包 app.asar 内的实现)
worktree 创建时「复制 .worktreeinclude 声明文件」这一步的实现是:

  1. 先执行 git ls-files --others --ignored --exclude-standard -z 列出仓库全部被忽略文件;
  2. 再执行 git ls-files --others --ignored --exclude-from=.worktreeinclude -z 列出 include 声明的文件;
  3. 两者求交集后复制。

这两条 git 命令的 maxBufferBytes 上限是 16MB(应用内常量 V8e = 16 * 1024 * 1024)。第 1 步在此类仓库中输出实测约 38MB,超出上限后 Node 抛 ERR_CHILD_PROCESS_STDIO_MAXBUFFER,被映射为 OUTPUT_LIMIT,导致整个会话创建失败。
而实际需要的只是第 2 步的结果(本例中仅 1 个文件),无需先全量枚举被忽略文件。

期望

  • 不要全量枚举被忽略文件(可直接用 --exclude-from=.worktreeinclude,或对每个模式用 check-ignore 判断,或流式处理/提高上限);
  • 至少该步骤失败不应导致整个会话无法启动。

影响:node_modules 较大的仓库中,worktree 模式 100% 不可用。