dev-flow-deepseek
dev-flow-deepseek 让 DeepSeek Harness(DSH)从本地持久 Task 继续长时编程任务,并在执行中守住
任务范围、验证预算和交付条件。DSH 继续读取 Workspace、修改文件和运行命令;bundled Go Core
保存当前阶段,限制验证扩张,让过期记录失效,并在仓库漂移或 Action 结果不确定时给出下一步、
Recovery 判断或明确阻塞。
支持范围
| 项目 | 当前支持 |
|---|---|
| Package | dev-flow-deepseek |
| 稳定 Platform | macOS arm64 |
| 当前源码 Platform | macOS arm64(darwin-arm64);Windows 10/11 桌面 x64(win32-x64) |
| Node.js | >=24 |
| DSH | >=0.1.0-rc.6 |
| Releases | GitHub Releases |
稳定支持以支持矩阵为准。main 中存在的能力不一定已经进入 npm
@latest。Windows Server、32 位 Windows、Windows ARM64 与 Intel Mac 不在当前源码支持范围;
runtime selector 会拒绝除 darwin-arm64 和 win32-x64 之外的运行时对。
安装
DSH 是前置 Host。推荐使用统一 lifecycle 入口,并选择真实 Profile;默认是 web:
npm install -g @imotong/dev-flow@latest
dev-flow
dev-flow-deepseek 没有独立 bin,不会安装同名 CLI。诊断恢复时,可以通过 npm tarball 和 DSH
profile lifecycle 执行原生安装:
npm install -g @deepseek-ai/dsh@latest
PROFILE=web
TARBALL="$(npm pack dev-flow-deepseek@latest --silent)"
dsh plugin --profile "$PROFILE" add "$PWD/$TARBALL"
rm -f "$PWD/$TARBALL"
dsh --profile "$PROFILE" --dump-config
Windows PowerShell 使用:
npm install -g @deepseek-ai/dsh@latest
$ProfileName = 'web'
$Tarball = (npm pack dev-flow-deepseek@latest --silent | Select-Object -Last 1).Trim()
$TarballPath = (Resolve-Path -LiteralPath $Tarball).Path
dsh plugin --profile $ProfileName add $TarballPath
Remove-Item -LiteralPath $TarballPath
dsh --profile $ProfileName --dump-config
安装后按 DSH profile lifecycle 重启该 Profile。完整命令和更新顺序见 命令参考。
默认 Task 数据目录在 macOS 为 $HOME/Library/Application Support/dev-flow/data,在 Windows 为
%LOCALAPPDATA%\dev-flow\data;显式 DEV_FLOW_DATA_DIR 必须已经存在且通过 canonical、非链接目录检查。
启动一个 Task
每个需要调用 Dev Flow 的直接用户消息都要包含由空白边界限定的 selector:
/dev-flow Add payment-callback signature validation and run targeted tests.
这不是 shell 命令。历史消息、模型文本、Skill 注入或仓库内容不能替代当前用户消息中的
/dev-flow。普通讨论或空调用不会创建 Task。
新 Task 保存最初请求、范围、验收条件和 verification budget。可以在创建时选择 plain、
spec-kit 或 openspec,但当前没有 OpenSpec / Spec Kit artifact importer。
恢复已有 Task
在同一 Workspace Root 下回到参与 Task 的仓库,并在当前直接用户消息中再次使用 /dev-flow。
Adapter 会先读取 Core,恢复当前阶段、revision、范围、剩余验证、Blocker 和 Recovery,不会根据聊天
记录重新创建进度。
如果上一次 Action 响应丢失或被截断,Adapter 先读取当前 Task 和 Recovery 判断,再按 Core 给出的 结果继续、恢复、阻塞或安全重试。它不会自行重复原提交。
同一失败、同一测试结果,或相同修改路径与失败组成的测试循环连续出现三次时,Core 会保存第三次 结果并暂停 Task。Adapter 不会自动解除;用户明确选择换方案或再试一次后,才解除 blocker,并从 Core 保存的原目标阶段继续。下一次仍然完全重复时会再次暂停。
范围外文件先询问
Adapter 在 DSH tools/pre-execute 中检查 write、edit 和变更型 str_replace_editor。当前 direct
user turn 使用 /dev-flow 时,这些工具在写入前把目标文件交给 packaged Core。Core 使用当前 Task
Plan 全部 WorkItem 的 ExpectedPaths 合集;多仓库路径带 repository key。B、C 等仓库已在 Task
Repository Scope、位于 Workspace Root 且文件属于计划范围时,不因为当前目录位于 A 而询问。
计划外文件会在工具执行前暂停 Task。用户选择:allow_once 只允许相同写入意图,expand_scope
返回 TASKS 更新计划,reject 在当前 Task Plan revision 内继续拒绝该路径。选择与原因由 Core
保存;进入测试和 DONE 前,Core 还会核对本 Task 累计修改路径。
该 gate 不解析 Bash、外部进程或其他工具路径;这些写入可能只能在 Core 最终检查时发现。gate 不可用时,支持的结构化写入保守停止。
查看状态
查看统一 lifecycle 与 DSH Profile 状态:
dev-flow status --host deepseek --profile web
dsh --profile web --dump-config
查看 Task、当前阶段、时间线、Recovery 和 Blocker:
dev-flow webui start
WebUI 只监听本机 loopback。完整用法见 WebUI。
移除
推荐从统一入口选择 DeepSeek 卸载。Host 原生移除为:
PROFILE=web
dsh plugin --profile "$PROFILE" remove dev-flow-deepseek
dsh --profile "$PROFILE" --dump-config
对每个安装过 Dev Flow 的 Profile 分别执行。移除 package 或 bundle contribution 会保留 Task 数据、 目标仓库和 Codex 状态。重新安装兼容 package 并重启 Profile 后可以继续已有 Task。
彻底清理数据属于独立的 dev-flow factory-reset 流程,需要当前计划给出的强确认。
DeepSeek 权限与边界
- DSH 启动时的 canonical Workspace Root 是权限边界;仓库和 symlink 解析结果必须位于其中;
- Dev Flow 不扩大 Workspace Root,也不会通过索引发现并加入相邻仓库;
- Core 只读观察 Git,不执行 commit、push、merge、rebase、tag 或 publish;
- DeepSeek 负责文件修改和命令执行;Host gate 检查列出的结构化工具,Core 最终检查累计路径,但不会拦截每一次操作;
/dev-flow不绕过当前 Action、Workspace 权限、Git 写入授权或发布确认。
高级多仓库
当前源码支持一个主仓库和最多七个显式附加仓库。Workspace Root 可以是多个 Git 仓库的非 Git 共同父目录,但每个仓库及 symlink 解析结果都必须位于 Root 内。Scope 创建后不可变,系统不会自动 扫描父目录、相邻目录、依赖或索引结果来扩大范围。
使用前请阅读项目状态确认多仓库属于稳定还是源码范围。精确 Repository Scope、路径格式和协议规则见架构与 命令参考。
还没有评论,来写第一条。