DeepSeek Harness Hub
← 返回列表

aleleppy/leppy-loop-deepseek

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

用于 DeepSeek Harness 的 Leppy Loop

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/10 · 已提供中文文档

DeepSeek Harness 的原生 Leppy Loop 捆绑包

综合分
29.1
GitHub 分
29.1
用户评分
★ Stars
0
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add aleleppy/leppy-loop-deepseek
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-agent-spine-demo@deepseek-ai/dsh-compaction-basic@deepseek-ai/dsh-credentials-local@deepseek-ai/dsh-llm-deepseek@deepseek-ai/dsh-llm-pi-ai@deepseek-ai/dsh-sandbox@deepseek-ai/dsh-sandbox-local@deepseek-ai/dsh-sandbox-policy@deepseek-ai/dsh-sdk-client@deepseek-ai/dsh-sdk-jsonrpc-demo@deepseek-ai/dsh-sdk-jsonrpc-server@deepseek-ai/dsh-sdk-protocol
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

用于 DeepSeek Harness 的 Leppy Loop

Português (Brasil)

Leppy Loop 是一个原生外部 Cordis 包,它为每个 worker 行使用全新的 DeepSeek Harness 进程和会话,执行一个受跟踪的 Markdown 检查清单。控制器负责 Git 同步、隔离的 worktree、检查清单状态转换、关闭、门禁、持久恢复状态以及进程租约。普通 worker 拥有整个隔离仓库:声明的 paths= 是上下文而非强制约束,本地命令和 Git 均可用,生成或忽略的文件绝不会阻止采纳。只有控制性检查清单和远程发布仍处于 worker 权限之外。

版本 0.3.54 固定到 DeepSeek Harness 0.1.1-rc.2,上游提交 b150a551b8d465e31e418e1b2eaf5e79bbb7d28e。它注册了一个 Host 端 /leppy-loop 命令、一个始终可发现的、经授权验证的控制器工具、一个仅限模型的 leppy-loop-operator 生命周期技能(不会与人类命令冲突),以及浏览器卡片,且无需修补 Harness。

安装

需要 Node 22.19+、Git 和 pnpm 10.28.1。DeepSeek Harness 将插件管理转发给 PATH 上找到的 pnpm;pnpm 11 需要单独的原生构建批准步骤,对于 0.3.54 不声称是安装兼容的组合。在 Harness Models 页面中为所选模型提供方配置凭据,然后构建并将 tarball 安装到 Web 主机所使用的 profile 中。Worker 会自动复用该提供方、模型 profile 和凭据;当选择其他提供方时,不需要 DEEPSEEK_API_KEY:

pnpm install --frozen-lockfile
pnpm gate
pnpm pack
npx @deepseek-ai/dsh@0.1.1-rc.2 plugin --profile web add ./leppy-loop-deepseek-0.3.54.tgz

更改 profile 后,重启现有的 dsh web 进程。浏览器刷新无法组合新安装的 Host 插件。已发布的 GitHub Release tarball 可以替代本地 .tgz 路径;不声称已在插件注册表中发布。

快速开始

创建并提交一个受跟踪的检查清单,例如 examples/feature.task.md,然后用普通的人类语言调用一个生命周期——绝不要使用路径、引用、运行 ID、指纹、作用域、循环或修复标志:

/leppy-loop
/leppy-loop finish the capability adoption and open a pull request
/leppy-loop run this locally; do not publish
/leppy-loop status
/leppy-loop stop
斜杠命令在铸造一个生命周期许可并排队一个简短的 AI 解析器回合后返回。同一个许可可以为单个会话、规范仓库和运行驱动最多十六次顺序控制器转换,因此 AI 可以恢复可恢复的工作、选择有界门修复、协调发布并对后台完成做出反应,而无需向人类请求特定阶段的斜杠命令。一旦十六次全部消耗完,只有一次全新的直接人类调用才能为该确切运行追加一个零消耗的下一个预算纪元,且需在实时作业、仓库锁和签名租约结算之后;模型无法重置它。同一时间只能有一个转换在进行中。一旦绑定,该许可使用 HMAC 必需标记、链式收据和经过身份验证的单调头:准入在作业开始前持久化,在斜杠确认前降级为仅本地,Stop 撤销在终止前生效。它在 Host 重启后重新水合;DSH_HOME 下仅追加的 Host 拥有的高水位锚点拒绝协同的本地头/前缀回滚,损坏的现代权威会被隔离,可变的 run.json 永远不是权威,已消耗的转换在崩溃后无法重放;它仍然在 24 小时后过期,不能跨会话/仓库/运行,也不能扩大修复范围、合并或部署。明确的 do not publish/仅本地语言会阻止实现期间的发布。完成后 Leppy 询问一次;人类的肯定回答会签署一份新的同运行发布续期,仅允许控制器拥有的分支推送和 PR 创建/协调,绝不合并或部署。

全局可发现的 leppy_loop_control 工具接收技术检查清单/基础/运行/恢复/发布事实,而人类界面保持简单。每个现有运行的解析器回合都以只读 status 开始;只有当它返回没有实时作业时,才可进行一个转换。Status 返回确切的经过身份验证的检查清单和基础,而 continue 在省略时会在控制器侧推导两者,而不是要求模型重复或猜测它们。只读 preflight 在开始前验证规范作用域和权威基础。该工具将未绑定的许可恰好一次绑定到第一个运行,根据实时 HMAC 身份验证的控制器验证每个继续,使用累积转换预算,并将每个转换转移到所有者围栏的 ctx.jobs。status 从不信任记住的作业 ID,并且仅向签名的拥有会话暴露持久控制器:没有所有者围栏 Host 作业的持久 running 状态被报告为 orphaned。门指纹、控制器/检查清单身份、收据和有界修复周期仍由控制器强制执行;可变工作器在其他方面拥有隔离的仓库,并且仍然无法推送或调用远程发布。
默认的 adaptive worker 策略在普通 OpenAI Codex 任务中使用 high 级别的 gpt-5.6-terra,然后在任务停滞时的收尾和恢复中使用 low 级别的 gpt-5.6-sol。终端 SDK 可用性失败会在同一个 controller 作业中获得最多三个全新的自主恢复 worker;只有反复出现的运行时不可用才会以回执形式停滞。干净的 no-op 完成会直接关闭 checklist,而脏的仓库范围工作会由 controller 采纳,无需仪式性的重试或手动提交。内联 model=/effort= 元数据和仅 CLI 的 --model/--effort 选项优先。使用 --worker-policy selected、terra-high 或 sol-low 选择另一种全局行为。默认 transcript 上限为 8192 KiB,并可通过 --worker-transcript-limit-kb 配置。恢复回执包含 --recover-run ,因此即使较早的失败运行仍然存在,恢复也保持确定性。精确的已认证恢复会从保留的运行 worktree 中解析并 lint controller,因此接收方源代码检出可能已切换分支、移除了该 checklist,或包含无关的脏更改;全新运行仍要求干净的源代码检出和受跟踪的 checklist。失败的本地阶段门禁会自动重新打开其相邻的 closure,最多进行三个限定范围的 AI 修复周期。如果未更改的门禁仍然失败——或没有可修复的 closure——controller 会将非零回执作为参考证据提交,并在同一个作业中继续推进,而不是反复折腾恢复转换。普通恢复会在 controller 崩溃后采用 HMAC 绑定的门禁证据,而不会重新运行它。较旧的停滞 controller 会在禁用修复的情况下,对未更改的门禁恰好重新运行一次,以生成当前证据;脏的/已移动的 worktree 以及缺失、格式错误、伪造或不匹配的已认证证据会失败关闭。预先存在的根级或嵌套 Svelte 验证缓存会在 HMAC 下自动隔离,在门禁之后逐字节恢复,并在崩溃后恢复,因此生成的 manifest 变动无需操作员仪式,也不会擦除被忽略的 WIP。当有意选择时,显式重试或修复仍可在同一个活动生命周期许可内使用。当失败的门禁证明原始 closure 遗漏了必需的生成产物或依赖项时,直接人类可以通过 --repair-path  添加现有 worktree 范围;这些添加会被验证、持久化、记录回执,并且仅授予该重新打开的修复 worker。Worker 根命令可以省略 cwd 或使用 cwd=".",而更改文件提交验证仍限于有效范围。直接修复调用默认会串联最多三个全新的 closure/门禁周期,将每个新失败的 receipt 传递给下一个 worker;--repair-cycles  可更改此硬性上限。它会在成功、worker 失败、脏状态、指纹更改、取消或耗尽时立即停止,而不是无限循环。自主解析器必须报告停滞/失败结果并停止;它绝不能编辑保留的 worktree、委托修复、发布或围绕 controller 进行集成。提供确切的运行 ID 还可以在其保留的分支/worktree 中,于下一个打开的 checklist 行上继续已完成的选择性运行;已完成的运行绝不会被隐式选择。
对于普通任务和闭包,LEPPY_OUTCOME、验证结果和 Git 仪式都是建议性遥测。缺失或格式错误的报告会降级为散文式证据;普通的 blocked/failed 处置不会阻止采纳,除非 worker 明确发出 disposition: "implementation-impossible"。工具失败限制提供轮次背压,而控制器会保留安全的工作,并可能启动新的有界 worker。失败的本地阶段门结果在有界修复后仍作为可见的建议性证据;发布冲突和最终发布门、生命周期权威、检查清单完整性以及未合并的 Git 状态仍然严格。

控制器在解释模型仪式之前,会从控制器观察到的 Git 状态协调普通工作。它只拒绝未合并状态或分支/检查清单漂移,暂存仓库范围的 WIP,并创建、修订或合并一个常规提交。被忽略/生成的状态不是采纳不变量;遗留的已认证待处理或中断提交会被直接采纳,而无需分离的普通验证 worker。

在 Windows 上,直接 Playwright 验证无法在 Harness WRITE_RESTRICTED 令牌内创建其嵌套的 libuv 命名管道。Leppy 在第一次已认证的 playwright 调用后报告 LEPPY_WINDOWS_NAMED_PIPE_UNAVAILABLE,而不是重试或隐藏 argv。该失败仍作为建议性证据可见;普通控制器可以在没有分离验证的情况下采纳仓库范围的工作。WSL2 + bubblewrap 仍然是可选的验证执行器,没有不受限的回退。配置可移植的受跟踪 .leppy-loop.json 或 Host 本地未提交的 .leppy-loop.local.json(本地文件优先)。全新运行的源清洁性只允许那个确切的有界私有未跟踪文件;其他所有 WIP 条目仍然阻止启动:

{
"validationExecutor": {
"kind": "wsl2",
"distribution": "Ubuntu",
"envFile": ".env",
"envAllowlist": ["E2E_BACKEND_URL", "E2E_SYSTEM_KEY", "E2E_TENANT_URI"],
"envPrefixes": ["PUBLIC_"],
"envAliases": { "BACKEND_URL": "E2E_BACKEND_URL" },
"prepareScripts": ["prepare"],
"seedPaths": ["src/reflector/backup.json", "src/reflector/controllers", "src/reflector/enums.ts", "src/reflector/fields.ts", "src/reflector/mocked-params.svelte.ts"],
"webServerTimeoutMs": 600000,
"playwrightConfig": "playwright.config.ts"
}
}
配置中只列出环境变量名,从不包含其值。env 源必须物理解析为确切 repoRoot 内的一个私有常规文件,且至多 64 KiB。执行器归档已认证的待处理提交 OID,并精确证明候选根/HEAD;它不会挂载 Windows 工作树。可选的 seedPaths 仅接受由 Host 生成的显式基线,这些基线被受跟踪仓库的 .gitignore 权威忽略,并且在候选根和源根中都未被跟踪;然后在拒绝目标符号链接拓扑、链接、硬链接、特殊文件、逃逸、超过 10,000 个文件或超过 256 MiB 之后,在归档提取之前复制一个稳定的句柄绑定快照;结果会生成 SHA-256 回执。依赖安装始终使用 npm ci --ignore-scripts;在依赖树变为只读之前(确切的私有 Vite 缓存挂载除外),以及在运行任何显式命名的 prepareScripts 或 prepareBins 之前,会认证规范注册表锁条目、包身份、依赖边和直接 Playwright 启动器。有界的 webServerTimeoutMs(180000–900000)要求确切的 playwrightConfig 路径,并为较慢的干净 Linux 构建创建私有包装器,而不假设使用 TypeScript 或编辑候选文件。所选发行版自有的 wslpath 会解析暂存路径,而不是假设 /mnt/。在 WSL 内部,胶囊会屏蔽 Host 挂载、主目录、可变发行版状态和 WSL 互操作,仅向候选提供私有的可写工作区/主目录/临时目录/缓存,认证实时挂载表,并仅暴露最小只读发行版运行时(/usr、工具链库和 /etc),同时屏蔽 WSL 子挂载,并在其中运行 npm、Web 服务器、Playwright worker 和 Chromium。wsl.exe、指定的发行版、Linux Node/npm、findmnt 和 bubblewrap 是显式的 Host 先决条件。网络保持共享,与现有的网络非目标一致。

pnpm gate 会在带有 WSL2 的 Windows 发布 Host 上自动运行真实的 Chromium/隔离/取消边界;非 Windows CI 会记录显式的平台跳过。仅针对该边界,直接运行 pnpm test:wsl-capsule。集成源仍被排除在发布的运行时 tarball 之外。
截至 0.3.49 的版本会在普通 worker 之前记录被忽略路径的 HMAC 绑定快照;0.3.50 不再为可变 worker 调用该机制。在 worker 稳定后,它会在变更前对完整增量进行分类:未更改的既有被忽略 WIP 会被保留,已更改/已删除/被替换的 WIP 会失败关闭且不移动任何内容,已跟踪的提升仍受正常候选范围验证约束,只有基线中不存在的常规文件叶子可以被原子重命名为私有隔离区。事务引用在其首次移动之前进入已认证的活动状态。崩溃恢复在移动任何条目之前会重新验证每个源/目标对、物理私有根和父目录、链接计数、指纹以及同设备约束。没有存储快照的旧式尝试仅在规范空摘要适用,或有界搜索找到精确的当前指纹子集且其 SHA-256 等于已认证的非空基线摘要时才会恢复。只有已认证的活动任务/尝试/基线身份可以使用防抖动迁移桥。在桥接作业开始之前,规范化终端和完整尝试身份会进入一个幂等、受锁保护的 HMAC prepared 准入。该准备会绑定其规范化请求摘要和目标生命周期 epoch/transition,因此作业前失败会在没有 worker 的情况下重试,而已经处于最终预算槽位的回执会被复用而不是递增;运行器要求它,并在对账前将其原子提升为 consumed,此后重放会被拒绝。最终的仅基线迁移可以在精确历史子集证明中包含所有当前普通未跟踪路径,但绝不将未经证明的普通路径视为可接受的 worker 输出:范围外影响会在采用前由控制器丢弃。其基础规则分类器使用一个隔离的 Git 目录,其中可变/全局排除为空,并且一个共享内容预算覆盖所有候选类别。精确前驱无匹配失败最多证明 39 个指纹,并且可以接受一次四新增/100,000 候选迁移;其规范终端可以接受一次提升感知迁移,该迁移仅用自已认证活动尝试基线以来新跟踪且仍被忽略的精确路径来扩充候选。该终端可以接受一次基础忽略迁移,用于当前普通未跟踪路径,这些路径已根据来自已认证基线的字节精确常规 .gitignore blob 被证明为被忽略。基础忽略终端会接受一次最终迁移,用于那些曾被这些基础规则忽略但当前不再被忽略的新跟踪路径;重命名检测被禁用,因此精确重命名目标仍作为 Added 候选。符号链接/gitlink 规则、检出转换属性、非规范路径字节和平台歧义分隔符会失败关闭。更宽的快照保留三新增/10,000 候选。输入上限为 128 KiB UTF-8,累计候选序列化/哈希上限为 512 MiB;候选和隔离内容在每个流式阶段独立上限为 512 MiB。任何不匹配或限制都会在回执或移动之前失败关闭。
在释放 worker 之前,控制器会自行物化一个可用的 npm 树。它首先优先选择一份等同、结构最新的源 node_modules,作为显式的可信本地状态边界。如果该副本不可用,则可以在私有暂存区中,使用 Host 自有的 npm-cli.js 安装一个非 workspace 的 npm lock,其包固定到无凭据的 HTTPS 源并具有受支持的完整性摘要;inBundle 子项仅通过显式的递归声明链被接受,该链最终指向这样一个完整性固定的 tarball。该 npm ci 会获得隔离的配置/缓存、白名单环境、无生命周期脚本/审计/资助、实时进程树取消以及文件/字节/深度配额。两条路径都会拒绝意外的包/shims/隐藏载荷、外部链接和硬链接,验证完整树,并且通常在不替换或删除目标的情况下发布。对于经过身份验证的 ENOTCACHED 或缺失模块情况,仓库锁定的 runner 可以原子地隔离无效的现有目标,物化精确的 worktree lock,发布并验证新的物理树,然后丢弃隔离。一个持久的、身份绑定的 transaction 仅采用其验证后的 published 阶段;更早的崩溃/失败阶段会保留原始隔离,仅移除身份已证明的控制器目标并重试,而绝不会在无主竞争之上恢复、删除或替换。待处理的 transaction receipt 会在 worker 释放前于仓库锁下恢复,并且设置错误会保留证据。缺失、无效或中断的依赖树会被自动修复,无需单独的摘要授权生命周期转换。

可变 worker 可以在经过身份验证的 worktree 沙箱内执行任何直接的本地 argv;验证/发布 worker 则保持狭窄。可执行文件查找会前置经过身份验证的根 node_modules/.bin,通过 Host 子进程服务解析命令,并使用相同的已清理环境。可变 worker 可以在其认为有用时使用包管理器、动态前端、依赖变更、生成器、本地 Git 和项目本地缓存。worker 在其他情况下通过裸名称调用已物化的工具。为了与通过 0.3.49 创建的运行保持升级兼容性,如果一次经过身份验证的先前 npx 失败在任务范围之外留下了一个完全未跟踪的物理 .npm-cache,仓库锁定的控制器可以在恢复保留的任务 WIP 之前,将该目录——不删除其字节——移入一个 HMAC 认证的、身份绑定的隔离 transaction。该兼容路径仅接受旧的已签名 receipt;没有 0.3.54 worker 会创建缓存基线或隔离 transaction。已跟踪、已暂存、已链接、有歧义、被重新创建或身份已更改的缓存状态会停滞关闭;跨设备 artifact 状态在 receipt 存在之前即被拒绝。每个 receipt 阶段都会在 worker 释放前进行协调,并且崩溃会恢复同一个 transaction。
当 Web 运行处于活动状态时,每个选中的行都会创建一张持久进度卡。Running、每任务尝试次数和已用时间使用各自独立的不可收缩元素,只有较长的任务标签会省略;终端输出会稳定在同一张卡片上。顺序行和持久拆分替换行都从 Attempt 1 开始,而对同一未更改行的显式恢复会推进其本地序号。单独的全局尝试身份对于租约、回执、事件和有界生命周期恢复保持累积。恢复的中断行会启动一张新的尝试卡。控制器本身显示为一张后台卡片,包含状态、已用时间和一个 Stop 按钮。/leppy-loop status 首先报告确切的 owner-fenced 活动作业;如果某个控制器的持久状态显示为 running 但没有这样的作业,则明确标记为 orphaned,绝不会分配猜测的 leppy-loop-* ID。否则,它会报告最新的已认证控制器,无论工作是停滞还是发布停滞。已解决的停滞保留其有界可操作细节,而不会退化为通用失败。浏览器计时器不写入每秒事件或模型 token。

发布首先从匹配的 fetch/push URL 推导出一个确切的 GitHub 仓库,并在任何 rebase、gate 或 push 之前,对完全同所有者的 OPEN 或 MERGED PR 进行协调;MERGED 协调可以执行只读 fetch,以证明其合并提交仍存在于实时请求的 base 中。否则,它会清理并查询实时远程 ref,而不是信任过期的跟踪分支。已删除的已配置 base 会失败关闭;AI 只能在同一生命周期内提供技术替代分支,绝不能使用不同的远程,并且只有当持久化的先前目标提交被纳入实时替代分支时,控制器才会接受它。OPEN 和 MERGED PR 协调应用相同的 base/ancestry 规则。所有 fetch、ls-remote 和 push 操作都使用经过验证的字面 URL,而不是可变的远程别名。已推送的控制器分支只能通过精确观察到的 OID force-with-lease 进行更新;在 push 之前立即重新检查 base OID、远程 head、干净工作树和 gate 验证的 HEAD,并在之后验证远程 head。在创建之前再次运行 PR 查找以吸收竞态。

如果精确 OID 的 rebase 因冲突而停止,最多三个新的恢复 worker 仅获得对未合并文件的精确路径读/写/删除访问权限,且没有提交或执行工具。控制器冻结 HEAD 和完整的 Git 索引,拒绝漂移或超出范围的编辑,自行暂存已解决的冲突,安全跳过空重放步骤,并重新运行最终 gate。现有的精确 PR 协调不执行远程变更,并且仅在控制器重新运行严格的最终 gate 后,才让先前的手动/打开/合并 PR 稳定持久的 Leppy 状态;本地咨询证据永远不够。Worker 不能 push 或使用 gh;Leppy 从不合并或部署。在允许发布之前,先安装并认证 GitHub CLI(gh auth status)。
检查清单契约

API 阶段

- [ ] 添加 src/api.ts | 完成:GET /health 返回 200 | model=deepseek-v4-pro | effort=high
- [ ] 更新文档 | 完成:README 记录 /health | paths=README.md
- [?] 收尾:检查 API 阶段 | paths=src,README.md
- [~] 门禁:聚焦项目门禁

标记与行类型:

| 标记 | 含义 |
|---|---|
| [ ] | 未完成的普通工作器任务 |
| [?] | 未完成的阶段收尾工作器 |
| [~] | 未完成的仅控制器阶段门禁 |
| [x] | 任意类型的已完成行 |

普通任务要求非空的 Done:。可选的 paths=a,b 元数据和路径形状的反引号仅提供非约束性上下文;格式错误的提示仍会导致预检失败,但缺少路径和测试范围是被接受的。首选规范管道格式,但也接受缩进的 Markdown 续行以及历史形式 [closure]/[gate]、Paths:、Paths EXATOS:、Paths permitidos: 和多行 Done:。[?] [human] 或 [?] [human/live] 检查点永远不会发送给工作器:运行会停滞并保留其工作树,直到人工将该行标记为完成并恢复确切的运行。提交便捷能力会暂存普通的仓库范围更改;被忽略的未跟踪文件保持未暂存,除非工作器通过本地 Git 明确将其作为目标。--task-match 是字面子字符串,而不是正则表达式。一个阶段可以省略收尾、门禁或两者;当两者都存在时,它们必须相邻,并且在自动化行中位于最后。复选框标记之外的 Markdown 会逐字节保留,但文件现有换行约定除外。

被跟踪的根 .leppy-loop.json 可以包含字符串 customInstructions;它会被追加到适用于每个工作器的 AGENTS.md/CLAUDE.md 指令中。无效形状会失败关闭,文件上限为 64 KiB,指令字符串上限为 32 KiB。干运行结果会通过面向模型的工具和直接命令文本包含所有 lint 诊断。

路径通过文件系统身份进行解析。遍历、绝对路径以及逃逸出工作树的符号链接/联接会被拒绝。控制检查清单始终对工作器拒绝访问。

CLI 启动选项

这些技术参数用于单独导出的 CLI 启动组合,而不是人类 Web 斜杠界面。

| 选项 | 默认值 |
|---|---:|
| --sync-max-seconds | 120 |
| --worker-timeout | 30 分钟 |
| --max-iterations | 64 |
| --worker-output-limit-kb | 192 KiB |
| --worker-transcript-limit-kb | 8192 KiB |
| --fetch / --no-fetch | 获取一次 |
| --task-match  | 第一个未完成行 |
| --recover-existing-wip | 禁用 |
| --provider、--model、--effort | Harness 当前选择 |
| --fallback-model | 无 |
| --artifacts-dir | /leppy-loop/runs |
模型会严格对照 ctx.llm.listModels(provider) 进行检查。Effort 会对照 ctx.llm.resolveModelInfo 返回的精确模型元数据进行检查。没有 AI 处置的运行时结果最多会获得三个新的恢复 worker;对于第一次分类的可用性重试,优先使用显式配置的 fallback。

执行语义

1. 源检出和受跟踪的 checklist 必须是干净的。
2. 控制器可选地 fetch 一次,将 --sync-branch 解析为权威基线,创建 leppy-loop/-,并创建一个同级 worktree。它在运行期间不再同步。
3. 每个普通行都会获得一个新的 worker 进程和 SDK 会话,并对完整的隔离仓库拥有权限。报告格式、验证、paths=、忽略状态和提交仪式都是建议性的;只有明确的实现不可能才会停止该行。
4. Closure 遵循相同的策略,并且可以是干净的空操作。仓库范围的修复会被自动采纳;生成的和被忽略的效果永远不会使其停滞。
5. Gate 没有普通 worker。控制器执行不透明命令,写入回执,并在失败时自动重新打开相邻的 closure 进行有界修复,然后重试未更改的 gate 指纹。达到限制时,它会对回执进行 HMAC 绑定,并以建议性证据继续推进;被忽略/生成的本地 gate 状态不受限制,而发布始终会重新运行其严格的最终 gate。

Leppy 与通用 Ralph 循环的不同之处在于,它使仓库 checklist 成为控制器拥有的状态机。Ralph 通常重复一个目标;Leppy 选择一行有类型的行,为其 worker 提供一个隔离的仓库,采纳生成的 Git 状态,并使 closure/gate 成为显式的阶段转换。

事件

events.jsonl 使用带版本的 envelope:

{"schemaVersion":1,"type":"start","runId":"...","timestamp":"...","phase":"worker","taskIndex":0,"attempt":1,"data":{}}

事件类型联合确切为:

run-start、start、done、recovery-start、recovery-done、gate-start、gate-end、stall、timeout、gate-failed、run-end。

该包导出 runLeppyLoop、executeLeppyLoopCommand、parseLeppyLoopCommandInput、parseChecklist、lintChecklist、HarnessWorkerAdapter、LeppyLoopOptions、RunResult、RunPreview 和 RunEvent。

恢复

持久状态位于 worktree 之外:run.json、runner.pid、events.jsonl、输出、transcript、回执、diff 摘要、resume.json、所有权证明和 HMAC worker 租约。git-common-dir 下的锁可防止同一仓库出现并发循环。

在超时、输出限制、transcript 限制或中断时,WIP 和当前打开的行会被保留。使用原始参数加上以下内容进行恢复:

--recover-existing-wip
恢复只采用一个匹配的运行,其所有权 HMAC、分支和工作树仍然匹配。只有在已签名租约、PID 和进程启动身份全部匹配时,才会终止活动工作进程。绝不按名称搜索或终止进程。

身份验证与密钥

该捆绑包从 Harness 凭据服务解析 DEEPSEEK_API_KEY,并仅将其提供给模型运行时环境。工具子进程接收经过凭据清理的环境。事件、输出、记录、错误、标头和包含凭据的 URL 都会经过递归脱敏处理。

安全边界

这是实用隔离,而非网络沙箱。可变工作进程拥有除控制清单之外的完整工作树。leppy_exec 在官方 workspace-write 沙箱下接受任何直接的本地 argv,包括 Git、PowerShell、包管理器和生成器。远程推送、PR 变更、发布和部署仍仅限控制器执行。

leppy_commit 仍然是用于单次约定式提交的便捷方式。通用的本地 Git 也可用,控制器会自动采用仓库范围的 WIP 并规范化提交结构。

官方沙箱不限制网络访问。一个已被允许作为焦点测试的恶意仓库脚本仍然可以使用网络,或执行操作系统账户所允许的行为。不要在不受信任的仓库上运行 Leppy Loop。参见 THREAT_MODEL.md。

成本与限制

每一行都会启动一个独立的上下文,因此共享的对话缓存会被有意丢弃,模型成本可能更高。版本 0.3.54 仅支持经过测试的 Harness 固定版本。不提供网络限制、自动推送、PR 变更、版本发布、包发布和部署。没有任何远程操作是自动的。

卸载

npx @deepseek-ai/dsh@0.1.1-rc.2 plugin --profile web remove leppy-loop-deepseek

移除后重启 Web 主机。如果你创建了专用的 CLI 配置文件,请单独移除它。工作树和保留的 WIP 绝不会被自动删除。

故障排除

- 源检出必须干净:提交或移动你的 WIP;Leppy 拒绝猜测所有权。
- 目录中缺少模型:使用 --dry-run,然后选择配置的提供程序返回的模型。
- 沙箱不可用:安装/修复 Harness 支持的平台后端。工作进程会故障关闭。
- 失败后门禁仍然打开:修复失败并再次显式调用该命令;恢复不会重放门禁。
- 恢复存在歧义:检查状态目录并手动选择。Leppy 不会采用无法证明的 WIP。
- 提交被拒绝:更改的文件超出了声明的任务路径、清单发生了更改、消息不符合约定式格式,或工作树不干净。

开发

pnpm install
pnpm gate
规范门禁除了 lint、类型检查、测试、构建和密钥扫描之外,还包括受支持主机的 WSL 胶囊边界、包检查和干净配置下的 install:smoke。

参见 ARCHITECTURE.md、CONTRIBUTING.md 和 SECURITY.md。

许可证

Apache-2.0。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群