dsh-issue2pr 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -23,7 +23,7 @@
23
23
  ## ✨ 特性总览
24
24
 
25
25
  - 🔗 **11 阶段全链路**:Issue 分析 → 检索 → 代码理解 → 根因假设 → 任务规划 → 编码 → 补丁管线 → 测试 → 审查 → PR 构建,一步不省。
26
- - 🚦 **人工复核门**:P5 / P6 / P9 / P11 四道关键门控,`approve` 放行、`reject` 带意见打回重跑;复核模式可选每阶段 / 仅关键 / 全自动。
26
+ - 🚦 **人工复核门**:P5 / P6 / P9 / P11 四道关键门控,`approve` 放行、`reject` 带意见打回重跑;复核模式可选每阶段 / 仅关键 / 全自动。打回委托阶段会**先清空旧外部产物**(防止过期 patch 复用);委托阶段放行前必须通过**机器验证**(拿到委外结果 + 对 HEAD 基线可应用),全自动模式下就绪后由插件**自动验证并放行**,不空手放行也不带病放行。
27
27
  - 🧾 **产物证据链**:每个阶段落盘一份编号产物(`01-*.json` … `10-pr-description.md`),输入来自上游产物、输出去往下游契约,可独立审查、可打回重做。
28
28
  - 🔁 **可回滚**:Patch Pipeline 带台账(ledger),只撤销 Agent 引入的修改,不碰用户自己的代码。
29
29
  - 🧪 **真实测试**:结果必须来自真实工具执行——在克隆的仓库里跑真实测试命令,完整输出落盘可回溯。
@@ -39,7 +39,7 @@
39
39
  <img src="docs/assets/pipeline.svg" alt="11 阶段流水线:主流程 P1→P9→P11,复核门 P5/P6/P9/P11,失败旁路 P10" width="100%">
40
40
  </div>
41
41
 
42
- 一次 **Run** 就是一条证据链:发起时从触发源读入 Issue 原文,主流程 `P1→P9→P11` 依次推进,每步落盘产物;任何阶段失败立即停下并进入 P10 分类旁路;到达复核门时等待人工 `approve / reject`,打回的意见会传回该阶段重新执行。
42
+ 一次 **Run** 就是一条证据链:发起时从触发源读入 Issue 原文,主流程 `P1→P9→P11` 依次推进,每步落盘产物;任何阶段失败立即停下并进入 P10 分类旁路;到达复核门时等待人工 `approve / reject`,打回的意见会传回该阶段重新执行(该阶段的旧外部产物同时清场;P7 应用补丁前会把工作区重置回基线,打回重跑不会残留上一轮补丁)。
43
43
 
44
44
  ### 阶段一览
45
45
 
@@ -77,7 +77,7 @@
77
77
  | --- | --- |
78
78
  | `every` | 每个阶段完成后都进入复核门 |
79
79
  | `key-only` | 仅 P5 / P6 / P9 / P11 四道关键门停(推荐) |
80
- | `auto` | 全自动推进,不停留 |
80
+ | `auto` | 全自动推进,不停留(委托阶段例外:见下方「委外产物验证」) |
81
81
 
82
82
  **P6 执行模式 `p6Mode`** —— 决定代码由谁写:
83
83
 
@@ -87,6 +87,13 @@
87
87
  | `session` | 生成任务包交给 DSH 会话执行,人工完成后通过复核门放行 |
88
88
  | `claude` | 任务包自动委托 Claude Code CLI 无人值守执行(`--add-dir` 写产物目录,停止/删除时杀进程树),失败回退等人工会话 |
89
89
 
90
+ **委外产物验证(拿到结果 + 验证 ok 才往下流转)** —— 委托阶段(`session` / `claude` / 各阶段委托开关)的放行不看「文件存在」,看「产物可用」,验证分两层:
91
+
92
+ 1. **结构完整**:补丁清单与 P7 应用清单完全同口径;逐份补丁存在、非空、形如 unified diff;`coder-report.json` 可解析且清单与文件一致。
93
+ 2. **应用性演练**:用一次性 git 索引从 `HEAD` 构建基线,按应用序逐份 `git apply --cached` 演练——不碰工作区,语义与 P7(重置后顺序应用)完全一致;对基线不可应用的补丁在此拦截。
94
+
95
+ 三种放行路径同一验证口径:**人工门**(`every` / `key-only`)`approve` 时必须验证通过;**全自动**(`auto`)插件轮询产物就绪(默认 5s)自动验证,通过即放行并落 `auto-approve` 审计记录,连续 3 次不过(产物稳定存在但不可用)则 Run 显式失败并走 P10 归因;**advance 直通**(如 `claude` 同步执行完)验证不过就地失败,绝不把坏补丁带进 P7。
96
+
90
97
  ### 委外智能体:多方式发现 + 测试门禁
91
98
 
92
99
  选 `claude` 模式后,项目页与配置页出现「委外智能体」绑定卡:
@@ -121,7 +128,7 @@ cd ~/.dsh/plugins
121
128
  git clone https://github.com/LONGSASASASASA/dsh-issue2pr.git dsh-issue2pr
122
129
  ```
123
130
 
124
- > 也可以通过 [dsh-plugin-manager](https://github.com/LONGSASASASASA) 插件安装与管理;审阅源码后可用 `dsh plugin --profile web add github:LONGSASASASASA/dsh-issue2pr#<commit>` 锁定 commit 安装。数据默认存放在 `~/.dsh/issue2pr/`(与插件目录分离,升级插件不丢数据)。
131
+ > 也可以通过 [dsh-plugin-manager](https://github.com/LONGSASASASASA) 插件安装与管理;审阅源码后可用 `dsh plugin --profile web add github:LONGSASASASASA/dsh-issue2pr#<commit>` 锁定 commit 安装。数据默认存放在 `~/.dsh/issue2pr/`(与插件目录分离,升级插件不丢数据):`projects/<slug>/repo` 是基线克隆,`projects/<slug>/worktrees/<runId>` 是每个 Run 的独立工作区(同项目并发 Run 互不污染,Run 删除时一并清理)。
125
132
 
126
133
  ### 五分钟跑通第一单
127
134
 
@@ -272,15 +279,12 @@ npm test # node --test,覆盖 API / 流水线 / 各阶段执行器 /
272
279
  | --- | --- |
273
280
  | `index.js` | REST API + 驱动循环(node 半,随宿主同生共死) |
274
281
  | `client.js` | 工作台 UI(web 半) |
275
- | `lib/pipeline.js` | 状态机核心:`advance` 推进、`applyReview` 复核 |
276
- | `lib/stageConfig.js` | 阶段能力表、配置合并、委托任务包 |
277
- | `lib/stages/p1…p11` | 11 个阶段执行器(输入契约 产物落盘) |
278
- | `lib/llm.js` | LLM 路由解析 + JSON 契约解析(失败重试一次) |
279
- | `lib/connections.js` | 托管连接、凭据注入与脱敏 |
280
- | `lib/agents.js` | 委外智能体发现与测试门禁 |
281
- | `lib/store.js` | 目录规则与产物读写(唯一允许写盘的地方) |
282
+ | `lib/core/` | 流水线骨架:`pipeline.js` 状态机(`advance` 推进、`applyReview` 复核)、`stageConfig.js` 阶段能力表与委托任务包、`store.js` 目录规则与产物读写(唯一允许写盘的地方) |
283
+ | `lib/stages/` | `p1…p11` 11 个阶段执行器(输入契约 → 产物落盘) |
284
+ | `lib/infra/` | 运行设施:`llm.js` LLM 路由与 JSON 契约解析(失败重试一次)、`connections.js` 托管连接与凭据注入脱敏、`repoState.js` 基线克隆与 per-Run worktree |
285
+ | `lib/delegate/` | 委外体系:`agents.js` 委外智能体发现与测试门禁、`delegateVerify.js` 委外产物机器验证 |
282
286
  | `lib/assistant.js` | 智能助手上下文聚合 |
283
- | `tests/` | 单测 + `e2e-live.mjs` 真实链路演练 |
287
+ | `tests/` | `unit/` 模块单测 · `stages/` 阶段执行器 · `integration/` API 与流水线装配 · `manual/` 人工演练(`e2e-live.mjs` 真实链路等,不入 npm test) |
284
288
 
285
289
  设计背后的完整调研(端到端架构、Sub-Agent 取舍、缓存与记忆边界、评测指标)见 [issue2pr-research.html](./issue2pr-research.html)。
286
290