<!-- codsh-publication:grok-cli-dsh-rewrite:ticket-59 --> ## Parent https://github.com/Blackman99/codsh/issues/132 **Ticket:** 59 **Status:** ready-for-agent **User Stories:** 44, 61(见父规格) ## What to build 用户通过配置的替代后端使用参考暴露的远程克隆/工作树体验,看到进度并能继续在正确目录工作。 ## Acceptance criteria - [ ] 将 Grove 等服务相关客户端行为逐项对应到真实替代方案,公开标注协议/性能差异而非宣称复制私有服务。 - [ ] 克隆深度、凭据来源、目录冲突、失败清理、worktree 类型与功能开关按清单可验证。 - [ ] 取消或重连不破坏已有仓库,远端结果与本地显示及运行工作目录一致。 - [ ] 对实际替代后端完成从克隆到 dsh 文件工具操作的演示;没有可用后端时最终完整交付保持阻塞。 ## Blocked by - #174 — Ticket 42: Git worktree 隔离与结果应用 - #190 — Ticket 58: 远程工作区连接与执行 ## Delivery contract 用户于2026-09-20批准当前测试与任务拆分。按父规格的已安装产物/真实终端和公开协议测试验收;实际实现须带适用的文档、Changeset及必要检查。ready-for-agent表示任务已定义,不表示前置任务已完成,也不授权自动开始本轮实施、购买付费资源或发布软件版本。
Activity
feat(rust): clone with git as the Grove substitute, and the Grove wor…
Blackman99 commentedon Sep 25, 2026
已实现并快进推送到
rewrite/grok-dsh-20260920:9bd0449491d2ff998be76e5a881cae8d7b9048ff(快进范围ab67660..9bd0449)。Rebase 说明:分支起点是
14edaca(#190)。开发期间 #176(ab67660)先合入,rebase 了一次。冲突只有两处:package.json的test:rust:pty链(保留 #176 的 monitor,在 remote 之后追加 clone)和packages/cli/bin/rust.mjs的启动器环境白名单(保留 #176 的CODSH_TEST_MONITOR_TIME_SCALE、CODSH_MOCK_MONITOR_TRACE,并追加本票的 7 个变量)。两边的新增都保留了。下列检查都在最终基线上重跑;#176 的 monitor PTY 也一起跑了,通过。实现内容
codsh --rust clone [-b BRANCH] [--cone PATH]... [--full-history] [--debug] [--debug-file FILE] <URL> [DIR]:用普通 git 代替参考实现的 Grove 懒克隆。开关顺序与参考一致:GROK_CLONE/GROVE_CLONE→GROK_GROVE或$GROK_HOME/config.toml的[cli] grove→ Grove 的~/.config/grove/config.toml中的[clone] enabled。都没设置时退出码 2,并说明用哪个设置打开。--leader-socket会被明确拒绝(没有 Grove 守护进程)。--depth=1 --single-branch --no-tags。--full-history获取全部历史、分支和标签。git fetch --deepen/--unshallow只加深所选分支,与参考文档一致。本地路径会让 git 忽略深度,摘要会如实说明,并提示改用file://。--filter=blob:none。服务器不支持过滤时,摘要会写明 blob 已全部获取。--cone:真实的 sparse-checkout,不是投影。GIT_SSH_COMMAND),或者GROVE_AUTH_TOKEN。令牌通过GIT_CONFIG_COUNT作为 https Authorization 头传给 git,只发给 https 和本机回环 http,不会写进.git/config,也不会传给 dsh 或远端。从不使用codsh --rust login。GROVE_TOKEN_ROTATION因为没有守护进程,报告为已忽略。凭据被拒报告为unavailable,退出码 4。-b不同则退出码 3。--remote ssh://…/base(codsh 扩展,基于 [Grok/dsh 58] 远程工作区连接与执行 #190 的 SSH 远端):在远端按远端自己的开关和 git 凭据执行同样的克隆。GROVE_AUTH_TOKEN不发送。连接关闭会取消远端克隆并删除未完成的目录。下一步提示是codsh --rust --remote <url>/<dir>,远端会话的 cwd 就是这个克隆。GROK_WORKTREE_TYPE→[cli] grove_worktree/nfs_worktree/worktree_type→GROK_GROVE/[cli] grove。Grove 请求记录在工作树记录里(worktree show显示 strategy 和请求来源,子代理工作树也会记录),并回退为带完整检出的普通 git 工作树,与参考实现在 Grove 不可达时回退 copy 的行为一致。启动提示会如实说明这一点。检查(干净环境、最终基线
9bd0449)cargo fmt --check通过;pnpm typecheck通过。-D warnings:只有两处已存在的filesystem_sandbox(tail_marker、needless_return)报错;加-A dead_code -A clippy::needless_return后无告警。cargo test --workspace --no-fail-fast:bin 623 通过、3 失败(含新增 7 个 clone 单元测试和更新后的 worktree 测试);其余 crate 498 + 42 + 61 + 2 + 379 + 61 全部通过,2 个 ignored。3 个失败都是已存在问题:filesystem_sandbox2 个、voice::substitute_route…(时序偶发)。privacy::drafts_stay_local…这次通过。pnpm test(带CODSH_TEST_OPENSSH):98 个文件,2521 通过、1 跳过、3 失败。失败的是reference-evidence2 个(负载下 5 秒超时)和rust-plan1 个(负载下等待超时),用--testTimeout=60000单独重跑 24/24 通过。新增的scripts/rust-clone.spec.mjs10/10 通过,其中 3 个用真实 sshd。pnpm run build:rust之后):新增的rust-clone-pty-test.py通过(终端上可见 git 进度和摘要;在克隆里启动 TUI,文件工具修改克隆内的文件;git 卡在传输时按 Ctrl-C,空目标保持为空、不留暂存目录、退出码 130;重复克隆不改变任何东西)。worktree、remote、monitor 的 PTY 也通过。git http-backend,以及无特权运行的 OpenSSH 10.0 sshd。没有使用付费服务或官方设施。未验证 / 限制
expired-static和carrier-stale不适用,只有unavailable。#191 阻塞的只有 #211,它仍被其他 13 个未关闭的票阻塞,所以本票关闭后没有新解锁的后续票。