@godv61/dsh-task-engine 0.27.1 → 0.28.0
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/.acceptance.mjs +11 -11
- package/.assessment-batch1.mjs +14 -14
- package/.codex-project-test.mjs +80 -80
- package/.enforce-test.mjs +12 -12
- package/.evidence-test.mjs +8 -8
- package/.filter-test.mjs +6 -6
- package/.freeze-test.mjs +44 -44
- package/.p0-test.mjs +21 -21
- package/.preset-test.mjs +11 -1
- package/.revision-test.mjs +16 -16
- package/.roundtrip-test.mjs +247 -247
- package/.workflow-test.mjs +119 -119
- package/README.md +14 -14
- package/cordis.patch.yml +158 -9
- package/docs/CHANGELOG.md +39 -33
- package/docs/configuration.md +22 -22
- package/docs/development.md +1 -1
- package/docs/faq.md +5 -5
- package/docs/manual.html +41 -41
- package/docs/resource-install.md +5 -5
- package/docs/roadmap.md +2 -2
- package/package.json +13 -15
- package/preset/agent.cordis.yml +3 -3
- package/preset/persona.md +2 -2
- package/scripts/verify-package.mjs +3 -3
- package/skills/eng-delivery/SKILL.md +17 -17
package/docs/configuration.md
CHANGED
|
@@ -24,42 +24,42 @@
|
|
|
24
24
|
}
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
`stage_bindings` 的键是当前流程中的阶段名称,`skill_refs` 只保存技能引用。项目级技能(包括从 `.agents/skills` 发现的 Codex 技能)的 `skill_profiles` 在 `.dsh/eng.json` 中保存唯一的规则列表和证据类型;用户级技能的规则配置保存在 `$DSH_HOME/skills/<技能名>/profile.json`,所有项目和会话共用。用户级技能只能关联用户级规则,避免引用某个项目独有的规则。
|
|
27
|
+
`stage_bindings` 的键是当前流程中的阶段名称,`skill_refs` 只保存技能引用。项目级技能(包括从 `.agents/skills` 发现的 Codex 技能)的 `skill_profiles` 在 `.dsh/eng.json` 中保存唯一的规则列表和证据类型;用户级技能的规则配置保存在 `$DSH_HOME/skills/<技能名>/profile.json`,所有项目和会话共用。用户级技能只能关联用户级规则,避免引用某个项目独有的规则。
|
|
28
28
|
|
|
29
29
|
```json
|
|
30
30
|
{
|
|
31
31
|
"flow": "standard",
|
|
32
32
|
"stage_bindings": {
|
|
33
33
|
"开发": {
|
|
34
|
-
"skill_refs": [{ "source": "project", "name": "my-implementation" }]
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
"skill_profiles": {
|
|
38
|
-
"project:my-implementation": {
|
|
39
|
-
"rules": [{ "source": "project", "name": "api-contract" }],
|
|
40
|
-
"evidence": "none"
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
34
|
+
"skill_refs": [{ "source": "project", "name": "my-implementation" }]
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"skill_profiles": {
|
|
38
|
+
"project:my-implementation": {
|
|
39
|
+
"rules": [{ "source": "project", "name": "api-contract" }],
|
|
40
|
+
"evidence": "none"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
**规则挂载在技能下,节点不提供规则追加、禁用或覆盖。** 在工作台“技能”页或流程页的技能规则侧栏配置规则;同一技能挂到任何节点,都是同一套规则。需要不同规则组合时,复制成另一个独立技能。旧版把规则内联在各节点技能绑定的配置仍可读取;保存后会转为上述格式。若旧内联绑定与 `skill_profiles` 同时存在,明确配置的技能档案优先,所有节点使用它的规则和凭证;若没有技能档案而同一旧技能在不同节点的规则不同,系统会要求先复制为独立技能,不会任意选一套覆盖另一套。
|
|
46
|
+
**规则挂载在技能下,节点不提供规则追加、禁用或覆盖。** 在工作台“技能”页或流程页的技能规则侧栏配置规则;同一技能挂到任何节点,都是同一套规则。需要不同规则组合时,复制成另一个独立技能。旧版把规则内联在各节点技能绑定的配置仍可读取;保存后会转为上述格式。若旧内联绑定与 `skill_profiles` 同时存在,明确配置的技能档案优先,所有节点使用它的规则和凭证;若没有技能档案而同一旧技能在不同节点的规则不同,系统会要求先复制为独立技能,不会任意选一套覆盖另一套。
|
|
47
|
+
|
|
48
|
+
规则引用带来源(`bundled:` / `project:` / `user:`),因此同名资源不会被混淆。同一份规则可被多个技能引用,不需要复制正文;编辑共享规则时界面会显示受影响的技能。
|
|
49
|
+
|
|
50
|
+
项目技能可来自 `.dsh/skills/<名称>/SKILL.md`(引用来源 `project:`)或 `.agents/skills/<名称>/SKILL.md`(引用来源 `codex-project:`)。工作台会扫描这两个项目目录;新建技能仍默认写入 `.dsh/skills`。Codex 项目技能的正文在工作台中只读,可在原文件编辑;其规则配置仍属于该技能,存于项目 `.dsh/eng.json`,规则正文可引用项目 `.dsh/rules`。例如,节点使用 `codex-project:my-skill`,对应 `skill_profiles["codex-project:my-skill"].rules` 可引用 `project:api-contract`。Codex 自身 `.codex/rules/*.rules` 是命令权限配置,并非这里的 Markdown 规则。
|
|
47
51
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
项目技能可来自 `.dsh/skills/<名称>/SKILL.md`(引用来源 `project:`)或 `.agents/skills/<名称>/SKILL.md`(引用来源 `codex-project:`)。工作台会扫描这两个项目目录;新建技能仍默认写入 `.dsh/skills`。Codex 项目技能的正文在工作台中只读,可在原文件编辑;其规则配置仍属于该技能,存于项目 `.dsh/eng.json`,规则正文可引用项目 `.dsh/rules`。例如,节点使用 `codex-project:my-skill`,对应 `skill_profiles["codex-project:my-skill"].rules` 可引用 `project:api-contract`。Codex 自身 `.codex/rules/*.rules` 是命令权限配置,并非这里的 Markdown 规则。
|
|
52
|
+
[最小配置示例](../defaults/eng.json)仅选择流程,不绑定技能或规则。
|
|
51
53
|
|
|
52
|
-
|
|
54
|
+
**预设不带任何绑定。** 一个只写了 `flow` 的配置就是字面意思:节点没有绑定,阶段仍按流程骨架流转。工作台的「采用推荐配置」只填写可修改的提交文本、产物字段和评审深度,不添加或覆盖技能与规则。项目级技能和规则放在 `.dsh/skills/` 与 `.dsh/rules/`;同一份规则可由多个技能引用。
|
|
53
55
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
插件只内置会话编排技能 `eng-delivery`,不提供阶段业务技能或业务规则。它由会话预设使用,不显示在阶段技能列表。工作台可以安装或新建项目级、用户级资源。
|
|
56
|
+
插件只内置会话编排技能 `eng-delivery`,不提供阶段业务技能或业务规则。它由会话预设使用,不显示在阶段技能列表。工作台可以安装或新建项目级、用户级资源。
|
|
57
57
|
|
|
58
|
-
进入阶段后,`dev_task` 按稳定的资源引用读取并披露该阶段技能和规则的最新正文。DSH 技能仍检查 Harness 的 skill 工具成功加载记录;Codex 项目技能使用 `dev_task operation=load_skill`(`skill_name` 传 `codex-project:<名称>`)加载技能及所挂规则,并检查这次加载记录。技能可声明证据类型(`command` / `artifact` / `review` / `manual` / `none`)。`manual` 通过宿主人工审批记录,不要求执行命令;`artifact` 需要该阶段有产物定义且必填字段完整。未声明时沿用命令回执。`status.skill_obligations` 中的 `command_receipts_required` 列出需要命令回执的技能。
|
|
58
|
+
进入阶段后,`dev_task` 按稳定的资源引用读取并披露该阶段技能和规则的最新正文。DSH 技能仍检查 Harness 的 skill 工具成功加载记录;Codex 项目技能使用 `dev_task operation=load_skill`(`skill_name` 传 `codex-project:<名称>`)加载技能及所挂规则,并检查这次加载记录。技能可声明证据类型(`command` / `artifact` / `review` / `manual` / `none`)。`manual` 通过宿主人工审批记录,不要求执行命令;`artifact` 需要该阶段有产物定义且必填字段完整。未声明时沿用命令回执。`status.skill_obligations` 中的 `command_receipts_required` 列出需要命令回执的技能。
|
|
59
59
|
|
|
60
60
|
挂在终态(例如"完成")的技能在进入终态前执行。测试技能通常建议挂在"交付";现有"完成"绑定也会在审核阶段执行后才放行。标准流程 v2 在审核通过后提交,并核对真实 Git HEAD。修改文件或声明范围后,旧验证回执失效。
|
|
61
61
|
|
|
62
|
-
资源管理保留不同来源的同名条目,避免来源误标和误操作。DSH 技能通过 Harness 的 skill 工具加载;Codex 项目技能通过 `dev_task load_skill` 按来源和任务读取。
|
|
62
|
+
资源管理保留不同来源的同名条目,避免来源误标和误操作。DSH 技能通过 Harness 的 skill 工具加载;Codex 项目技能通过 `dev_task load_skill` 按来源和任务读取。
|
|
63
63
|
|
|
64
64
|
### 旧配置迁移
|
|
65
65
|
|
|
@@ -75,6 +75,6 @@
|
|
|
75
75
|
|
|
76
76
|
新任务记录创建时的完整流程快照,后续按该快照执行。修改项目配置影响之后创建的任务,不会自动迁移进行中的任务。
|
|
77
77
|
|
|
78
|
-
任务开始时会保存所引用技能和规则正文的**审计副本**,但运行时按原来的来源与名称重新读取:项目级资源可随时编辑,同项目的其他会话及进行中的任务在下一次交互读取最新正文;用户级资源在所有项目和会话中同理。状态机会继续使用任务创建时的流程快照。正文变化会在 `status` 中提示;删除仍被绑定的资源会阻止阶段流转。已记录的验证或人工确认不会因为正文编辑自动失效,修改约束后应重新检查这些结果。资源类型、来源和名称共同构成身份,因此同名技能和规则不会混淆。缺失的必需资源会阻止新任务创建;已完成任务若需返工,使用 `revise` 显式重开。
|
|
78
|
+
任务开始时会保存所引用技能和规则正文的**审计副本**,但运行时按原来的来源与名称重新读取:项目级资源可随时编辑,同项目的其他会话及进行中的任务在下一次交互读取最新正文;用户级资源在所有项目和会话中同理。状态机会继续使用任务创建时的流程快照。正文变化会在 `status` 中提示;删除仍被绑定的资源会阻止阶段流转。已记录的验证或人工确认不会因为正文编辑自动失效,修改约束后应重新检查这些结果。资源类型、来源和名称共同构成身份,因此同名技能和规则不会混淆。缺失的必需资源会阻止新任务创建;已完成任务若需返工,使用 `revise` 显式重开。
|
|
79
79
|
|
|
80
80
|
下一步:[资源安装](resource-install.md) · [常见问题](faq.md)
|
package/docs/development.md
CHANGED
|
@@ -25,7 +25,7 @@ CI 在 Windows 的 Node 22/24 上运行。每次功能修改选择相关验证
|
|
|
25
25
|
| 位置 | 职责 |
|
|
26
26
|
| :--- | :--- |
|
|
27
27
|
| [src/engine.ts](../src/engine.ts) | 状态机、阶段条件和提交规则检查。 |
|
|
28
|
-
| [src/workflows.ts](../src/workflows.ts) | 三套流程骨架及可选的推荐配置。 |
|
|
28
|
+
| [src/workflows.ts](../src/workflows.ts) | 三套流程骨架及可选的推荐配置。 |
|
|
29
29
|
| [src/dev-task.ts](../src/dev-task.ts) | 模型使用的 dev_task 工具与任务文件操作。 |
|
|
30
30
|
| [src/controller.ts](../src/controller.ts) | 工作台读取配置、任务和资源的 Remote 控制器。 |
|
|
31
31
|
| [src/resource-import.ts](../src/resource-import.ts) | 导入校验、安装预览、独占写入与失败清理。 |
|
package/docs/faq.md
CHANGED
|
@@ -16,19 +16,19 @@
|
|
|
16
16
|
|
|
17
17
|
## 安装资源后就会自动使用吗?
|
|
18
18
|
|
|
19
|
-
还需要为技能配置规则,再到“流程配置”选择阶段并挂载技能。任务执行时按阶段披露对应内容;安装行为本身不会执行资源中的脚本。
|
|
19
|
+
还需要为技能配置规则,再到“流程配置”选择阶段并挂载技能。任务执行时按阶段披露对应内容;安装行为本身不会执行资源中的脚本。
|
|
20
20
|
|
|
21
21
|
## 改了流程,原来的任务会变化吗?
|
|
22
22
|
|
|
23
23
|
任务保存创建时的流程快照。修改项目配置不会自动改变进行中的任务;新任务使用保存后的配置。
|
|
24
24
|
|
|
25
|
-
## 能移除推荐技能、修改内置规则吗?
|
|
26
|
-
|
|
27
|
-
流程预设没有强制技能绑定。当前安装包只保留会话编排技能 `eng-delivery`,不再附带业务技能和规则;它只负责按 `dev_task` 的状态与门禁编排,不决定业务方法。用户的业务技能可建在项目 `.dsh/skills`,也可使用同项目 `.agents/skills` 中已有的 Codex 技能;规则仍由用户配置在技能下。不同来源的同名资源分别引用。
|
|
25
|
+
## 能移除推荐技能、修改内置规则吗?
|
|
26
|
+
|
|
27
|
+
流程预设没有强制技能绑定。当前安装包只保留会话编排技能 `eng-delivery`,不再附带业务技能和规则;它只负责按 `dev_task` 的状态与门禁编排,不决定业务方法。用户的业务技能可建在项目 `.dsh/skills`,也可使用同项目 `.agents/skills` 中已有的 Codex 技能;规则仍由用户配置在技能下。不同来源的同名资源分别引用。
|
|
28
28
|
|
|
29
29
|
## 工具显示验证或审核通过,能完全相信吗?
|
|
30
30
|
|
|
31
|
-
新建任务的验证需要真实命令回执,要求退出码为 0 且未超时、中止或被沙箱拒绝;代码修改后需重验。技能按配置记录加载情况及所需的命令、产物、审核或人工批准证据;审核和实施项结论仍需判断。命令覆盖是否充分、审核是否准确仍需判断,不能把一个成功退出码当作全部需求已验证。
|
|
31
|
+
新建任务的验证需要真实命令回执,要求退出码为 0 且未超时、中止或被沙箱拒绝;代码修改后需重验。技能按配置记录加载情况及所需的命令、产物、审核或人工批准证据;审核和实施项结论仍需判断。命令覆盖是否充分、审核是否准确仍需判断,不能把一个成功退出码当作全部需求已验证。
|
|
32
32
|
|
|
33
33
|
## 验证命令被沙箱阻止怎么办?
|
|
34
34
|
|
package/docs/manual.html
CHANGED
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
<header class="hero">
|
|
36
36
|
<p class="eyebrow">DSH · ENGINEERING DELIVERY ENGINE</p>
|
|
37
37
|
<h1>工程化交付引擎 使用手册</h1>
|
|
38
|
-
<p class="lead">这是一套装在 DeepSeek Harness 里的工程流程约束。流程预设规定阶段与门禁;技能、规则、提交文本和产物字段由使用者配置。在个人工作台里选择流程,把规则配置在技能下,再把技能挂到相应阶段。</p>
|
|
38
|
+
<p class="lead">这是一套装在 DeepSeek Harness 里的工程流程约束。流程预设规定阶段与门禁;技能、规则、提交文本和产物字段由使用者配置。在个人工作台里选择流程,把规则配置在技能下,再把技能挂到相应阶段。</p>
|
|
39
39
|
<div class="badges">
|
|
40
|
-
<span class="badge">流程与工作方法分离</span>
|
|
40
|
+
<span class="badge">流程与工作方法分离</span>
|
|
41
41
|
<span class="badge">standard / agile / minimal</span>
|
|
42
42
|
<span class="badge">需求、方案人工确认</span>
|
|
43
43
|
<span class="badge">范围受控本地提交</span>
|
|
@@ -72,15 +72,15 @@
|
|
|
72
72
|
<pre><code>开发请求
|
|
73
73
|
→ dev_task(统一入口,硬约束在代码里执行)
|
|
74
74
|
→ eng-delivery(编排:读状态 → 选阶段 → 推进)
|
|
75
|
-
→ 按所选流程进入当前阶段
|
|
76
|
-
→ 读取该阶段由使用者绑定的技能和规则
|
|
77
|
-
→ 检查门禁并推进到下一阶段</code></pre>
|
|
75
|
+
→ 按所选流程进入当前阶段
|
|
76
|
+
→ 读取该阶段由使用者绑定的技能和规则
|
|
77
|
+
→ 检查门禁并推进到下一阶段</code></pre>
|
|
78
78
|
<div class="callout">
|
|
79
79
|
<p><strong>它不是常驻程序。</strong>只有你在「工程化开发引擎」预设的会话里提出开发请求时,才触发 <code>dev_task</code> 和这套门禁;换到别的预设,流程完全不介入。</p>
|
|
80
80
|
</div>
|
|
81
|
-
<p>三样东西分工明确:<strong>流程预设</strong>决定「走哪条流水线、有哪些守卫」,<strong>Skill</strong> 决定「这一站做什么」,<strong>Rule</strong> 归属技能,决定该技能遵守什么。任务状态单独落盘,负责「跨会话恢复到哪一步」。推荐配置需要显式采用;采用后完全由使用者增删修改。</p>
|
|
81
|
+
<p>三样东西分工明确:<strong>流程预设</strong>决定「走哪条流水线、有哪些守卫」,<strong>Skill</strong> 决定「这一站做什么」,<strong>Rule</strong> 归属技能,决定该技能遵守什么。任务状态单独落盘,负责「跨会话恢复到哪一步」。推荐配置需要显式采用;采用后完全由使用者增删修改。</p>
|
|
82
82
|
<div class="callout warn">
|
|
83
|
-
<p><strong>诚实边界:</strong>阶段流转、文件范围、任务绑定、流程快照 hash、钩子完整性、敏感路径风险策略是<b>代码硬校验</b>;提交格式仅在用户配置后校验。高风险任务的验证依据真实命令回执。审核结论、实施项完成及回执命令的覆盖面仍需人工或 CI 判断;需求确认、方案确认和风险降级由人工批准。</p>
|
|
83
|
+
<p><strong>诚实边界:</strong>阶段流转、文件范围、任务绑定、流程快照 hash、钩子完整性、敏感路径风险策略是<b>代码硬校验</b>;提交格式仅在用户配置后校验。高风险任务的验证依据真实命令回执。审核结论、实施项完成及回执命令的覆盖面仍需人工或 CI 判断;需求确认、方案确认和风险降级由人工批准。</p>
|
|
84
84
|
</div>
|
|
85
85
|
</section>
|
|
86
86
|
|
|
@@ -105,7 +105,7 @@ pnpm install && pnpm run build && pnpm dsh web</code></pre>
|
|
|
105
105
|
<p><code>dsh plugin --profile <name> add <package></code> 会在 <code>$DSH_HOME/profiles/<name>/</code> 里执行 <code>pnpm add</code>,并自动识别插件声明的 <code>dsh.bundle.patch</code>,把它挂进该 profile 的插件层栈——<b>不要</b>手写 <code>npm i</code> 装到别处,那样不会挂载。</p>
|
|
106
106
|
<p>装完<b>重启 <code>dsh web</code></b> 生效,自动完成两件事:侧边栏多出「工程流程」工作台;预设列表多出「工程化开发引擎」。</p>
|
|
107
107
|
<h3>2.4 启用</h3>
|
|
108
|
-
<p>新建会话 → 预设选「工程化开发引擎」。这个会话会启用 <code>dev_task</code> 与编排技能 <code>eng-delivery</code>,按配置的流程走。</p>
|
|
108
|
+
<p>新建会话 → 预设选「工程化开发引擎」。这个会话会启用 <code>dev_task</code> 与编排技能 <code>eng-delivery</code>,按配置的流程走。</p>
|
|
109
109
|
<div class="callout"><p>想「正式开发」就选它;想「让 AI 自由探索」就选 <code>standard</code>。切换预设本身就是开关,零配置。</p></div>
|
|
110
110
|
</section>
|
|
111
111
|
|
|
@@ -114,7 +114,7 @@ pnpm install && pnpm run build && pnpm dsh web</code></pre>
|
|
|
114
114
|
<pre><code>D:\workspace\
|
|
115
115
|
├─ AGENTS.md ← init 生成的项目描述(DSH 每会话自动注入)
|
|
116
116
|
├─ .dsh\
|
|
117
|
-
│ ├─ eng.json ← 流程预设 + 节点技能 + 技能规则(团队共享,可进 git)
|
|
117
|
+
│ ├─ eng.json ← 流程预设 + 节点技能 + 技能规则(团队共享,可进 git)
|
|
118
118
|
│ ├─ skills\ ← 项目级 skill
|
|
119
119
|
│ ├─ rules\ ← 项目级 rule
|
|
120
120
|
│ └─ task-*.json ← 每个任务的状态快照
|
|
@@ -125,12 +125,12 @@ pnpm install && pnpm run build && pnpm dsh web</code></pre>
|
|
|
125
125
|
<table>
|
|
126
126
|
<thead><tr><th>路径</th><th>作用</th><th>何时读取或修改</th></tr></thead>
|
|
127
127
|
<tbody>
|
|
128
|
-
<tr><td><code>.dsh/eng.json</code></td><td>流程、阶段技能引用及技能规则配置</td><td>新任务创建时读取并冻结;工作台保存时写入</td></tr>
|
|
129
|
-
<tr><td><code>.dsh/skills/</code></td><td>项目级 DSH skill(团队共享)</td><td>新建默认写入这里;节点挂载命中时按需读取</td></tr>
|
|
130
|
-
<tr><td><code>.agents/skills/</code></td><td>项目级 Codex skill(团队共享)</td><td>工作台自动发现;通过 dev_task load_skill 读取技能与所挂规则</td></tr>
|
|
128
|
+
<tr><td><code>.dsh/eng.json</code></td><td>流程、阶段技能引用及技能规则配置</td><td>新任务创建时读取并冻结;工作台保存时写入</td></tr>
|
|
129
|
+
<tr><td><code>.dsh/skills/</code></td><td>项目级 DSH skill(团队共享)</td><td>新建默认写入这里;节点挂载命中时按需读取</td></tr>
|
|
130
|
+
<tr><td><code>.agents/skills/</code></td><td>项目级 Codex skill(团队共享)</td><td>工作台自动发现;通过 dev_task load_skill 读取技能与所挂规则</td></tr>
|
|
131
131
|
<tr><td><code>.dsh/rules/</code></td><td>项目级 rule(团队共享)</td><td>节点挂载命中时按需读取</td></tr>
|
|
132
132
|
<tr><td><code>.dsh/task-*.json</code></td><td>当前任务的有效状态快照</td><td>确认、实施、验证、评审、切换阶段时更新</td></tr>
|
|
133
|
-
<tr><td><code>$DSH_HOME/skills/ · rules/</code></td><td>用户级 skill / rule</td><td>引用显式记录来源,同名资源互不混淆</td></tr>
|
|
133
|
+
<tr><td><code>$DSH_HOME/skills/ · rules/</code></td><td>用户级 skill / rule</td><td>引用显式记录来源,同名资源互不混淆</td></tr>
|
|
134
134
|
</tbody>
|
|
135
135
|
</table>
|
|
136
136
|
</div>
|
|
@@ -138,14 +138,14 @@ pnpm install && pnpm run build && pnpm dsh web</code></pre>
|
|
|
138
138
|
|
|
139
139
|
<section id="flows">
|
|
140
140
|
<h2>4. 三套流程预设</h2>
|
|
141
|
-
<p>阶段图和流转门禁随预设固化;提交消息格式、产物字段及技能规则由使用者配置。需要一份起点时,可显式「采用推荐配置」。</p>
|
|
141
|
+
<p>阶段图和流转门禁随预设固化;提交消息格式、产物字段及技能规则由使用者配置。需要一份起点时,可显式「采用推荐配置」。</p>
|
|
142
142
|
<div class="table-wrap">
|
|
143
143
|
<table>
|
|
144
144
|
<thead><tr><th>预设</th><th>阶段顺序</th><th>适用</th><th>守卫强度</th></tr></thead>
|
|
145
145
|
<tbody>
|
|
146
|
-
<tr><td><code>standard</code> 完整研发</td><td>需求评审 → 设计 → 开发 → 交付 → 代码审核 → 完成</td><td>新功能、跨模块及高风险任务</td><td>人工确认 + 验证门 + 评审门</td></tr>
|
|
147
|
-
<tr><td><code>agile</code> 日常迭代</td><td>需求 → 开发 → 交付 → 审查</td><td>常规功能与缺陷修复</td><td>四阶段,终态需审查通过</td></tr>
|
|
148
|
-
<tr><td><code>minimal</code> 快速修改</td><td>开发 → 交付</td><td>局部低风险改动</td><td>实施项与交付门禁</td></tr>
|
|
146
|
+
<tr><td><code>standard</code> 完整研发</td><td>需求评审 → 设计 → 开发 → 交付 → 代码审核 → 完成</td><td>新功能、跨模块及高风险任务</td><td>人工确认 + 验证门 + 评审门</td></tr>
|
|
147
|
+
<tr><td><code>agile</code> 日常迭代</td><td>需求 → 开发 → 交付 → 审查</td><td>常规功能与缺陷修复</td><td>四阶段,终态需审查通过</td></tr>
|
|
148
|
+
<tr><td><code>minimal</code> 快速修改</td><td>开发 → 交付</td><td>局部低风险改动</td><td>实施项与交付门禁</td></tr>
|
|
149
149
|
</tbody>
|
|
150
150
|
</table>
|
|
151
151
|
</div>
|
|
@@ -158,7 +158,7 @@ pnpm install && pnpm run build && pnpm dsh web</code></pre>
|
|
|
158
158
|
|
|
159
159
|
<section id="skills">
|
|
160
160
|
<h2>5. Skills:这一步做什么</h2>
|
|
161
|
-
<p>插件仅内置 <code>eng-delivery</code>,用于会话编排。项目级与用户级业务技能由使用者自行创建或安装;工作台也可发现当前项目 <code>.agents/skills</code> 中已有的 Codex 技能。挂到节点后,走到那一步才加载。</p>
|
|
161
|
+
<p>插件仅内置 <code>eng-delivery</code>,用于会话编排。项目级与用户级业务技能由使用者自行创建或安装;工作台也可发现当前项目 <code>.agents/skills</code> 中已有的 Codex 技能。挂到节点后,走到那一步才加载。</p>
|
|
162
162
|
<div class="table-wrap">
|
|
163
163
|
<table>
|
|
164
164
|
<thead><tr><th>Skill</th><th>职责</th><th>不负责</th></tr></thead>
|
|
@@ -171,35 +171,35 @@ pnpm install && pnpm run build && pnpm dsh web</code></pre>
|
|
|
171
171
|
|
|
172
172
|
<section id="rules">
|
|
173
173
|
<h2>6. Rules:这一步守什么</h2>
|
|
174
|
-
<p>Rule 是纯正文的约束,配置在技能下。节点引用技能,任务走到该节点时才读取技能及其规则的最新正文;预设不会自动绑定它们。插件不内置业务规则。团队可创建自己的技能和共享规则,再决定哪些节点使用技能;提交消息格式在项目配置中设置。</p>
|
|
174
|
+
<p>Rule 是纯正文的约束,配置在技能下。节点引用技能,任务走到该节点时才读取技能及其规则的最新正文;预设不会自动绑定它们。插件不内置业务规则。团队可创建自己的技能和共享规则,再决定哪些节点使用技能;提交消息格式在项目配置中设置。</p>
|
|
175
175
|
</section>
|
|
176
176
|
|
|
177
177
|
<section id="configure">
|
|
178
|
-
<p>当前版本支持三个内置流程,阶段可选择技能,技能可绑定规则。可视化自定义流程不在当前计划内。</p>
|
|
178
|
+
<p>当前版本支持三个内置流程,阶段可选择技能,技能可绑定规则。可视化自定义流程不在当前计划内。</p>
|
|
179
179
|
<h2>7. 配置流程与挂载</h2>
|
|
180
180
|
<p>侧边栏点「工程流程」打开工作台,五个标签页:<strong>项目初始化 / 流程配置 / 任务 / 技能 skill / 规则 rule</strong>,默认落在「项目初始化」(详见第 8 节)。日常配流程只需在「流程配置」页做两件事:</p>
|
|
181
181
|
<ol>
|
|
182
|
-
<li><strong>选流程预设</strong>:standard / agile / minimal;如需现成起点,可单独点击「采用推荐配置」。</li>
|
|
183
|
-
<li><strong>给节点选技能</strong>:先选节点,再用双栏选择器挑选技能;点技能的规则配置,在右侧栏绑定规则与证据类型,最后保存。</li>
|
|
182
|
+
<li><strong>选流程预设</strong>:standard / agile / minimal;如需现成起点,可单独点击「采用推荐配置」。</li>
|
|
183
|
+
<li><strong>给节点选技能</strong>:先选节点,再用双栏选择器挑选技能;点技能的规则配置,在右侧栏绑定规则与证据类型,最后保存。</li>
|
|
184
184
|
</ol>
|
|
185
|
-
<p>「技能」和「规则」页提供搜索、来源筛选、新建、安装、查看、编辑与删除。点「安装技能」选择含 <code>SKILL.md</code> 的文件夹;点「安装规则」选择一个 <code>.md</code> 文件。选择后先显示预览:名称、正文、文件数、体积、目标路径和同名冲突。确认项目或个人范围后点击「确认安装」;预览本身不写入文件,改变范围后需要重新预览。</p>
|
|
186
|
-
<p>新建项目资源默认写入工作区 <code>.dsh/skills</code> 或 <code>.dsh/rules</code>;个人资源写入 <code>$DSH_HOME</code> 对应目录。当前项目 <code>.agents/skills</code> 中已有的 Codex 技能也会显示,其正文在工作台只读,可编辑原文件;规则仍配置在该技能下,规则正文可引用项目 <code>.dsh/rules</code>。浏览器选择的是浏览器所在电脑的文件;高级目录模式读取 Harness 主机的目录。技能保留脚本、references、模板和二进制资源,排除常见缓存;上限 1000 文件、100 MB、单文件 20 MB、20 层目录,<code>SKILL.md</code> 和规则正文上限 1 MB。拒绝覆盖同名资源;主机扫描拒绝符号链接和 junction。浏览器上传不提供源链接元数据。</p>
|
|
185
|
+
<p>「技能」和「规则」页提供搜索、来源筛选、新建、安装、查看、编辑与删除。点「安装技能」选择含 <code>SKILL.md</code> 的文件夹;点「安装规则」选择一个 <code>.md</code> 文件。选择后先显示预览:名称、正文、文件数、体积、目标路径和同名冲突。确认项目或个人范围后点击「确认安装」;预览本身不写入文件,改变范围后需要重新预览。</p>
|
|
186
|
+
<p>新建项目资源默认写入工作区 <code>.dsh/skills</code> 或 <code>.dsh/rules</code>;个人资源写入 <code>$DSH_HOME</code> 对应目录。当前项目 <code>.agents/skills</code> 中已有的 Codex 技能也会显示,其正文在工作台只读,可编辑原文件;规则仍配置在该技能下,规则正文可引用项目 <code>.dsh/rules</code>。浏览器选择的是浏览器所在电脑的文件;高级目录模式读取 Harness 主机的目录。技能保留脚本、references、模板和二进制资源,排除常见缓存;上限 1000 文件、100 MB、单文件 20 MB、20 层目录,<code>SKILL.md</code> 和规则正文上限 1 MB。拒绝覆盖同名资源;主机扫描拒绝符号链接和 junction。浏览器上传不提供源链接元数据。</p>
|
|
187
187
|
<p>资源删除前会显示名称与实际目标路径,确认后永久删除;可点击「保留」取消。任务台账支持搜索、风险与阶段筛选,并显示验证、审核和更新时间。流程配置读取与保存失败时显示错误,损坏任务记录不会被静默视为没有任务。</p>
|
|
188
188
|
<pre><code>// .dsh/eng.json 等价内容
|
|
189
189
|
{
|
|
190
190
|
"flow": "standard",
|
|
191
191
|
"stage_bindings": {
|
|
192
|
-
"开发": { "skill_refs": [{ "source": "project", "name": "my-implementation" }] }
|
|
193
|
-
},
|
|
194
|
-
"skill_profiles": {
|
|
195
|
-
"project:my-implementation": {
|
|
196
|
-
"rules": [{ "source": "project", "name": "my-coding-rule" }],
|
|
197
|
-
"evidence": "none"
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}</code></pre>
|
|
192
|
+
"开发": { "skill_refs": [{ "source": "project", "name": "my-implementation" }] }
|
|
193
|
+
},
|
|
194
|
+
"skill_profiles": {
|
|
195
|
+
"project:my-implementation": {
|
|
196
|
+
"rules": [{ "source": "project", "name": "my-coding-rule" }],
|
|
197
|
+
"evidence": "none"
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}</code></pre>
|
|
201
201
|
<div class="callout warn"><p>页面实时校验:挂到不存在的阶段、空名等会红字提示并置灰保存;保存前主机再校验一遍。错误的配置存不进去。</p></div>
|
|
202
|
-
<p>技能和规则引用包含 <code>source</code> 与 <code>name</code>;内置、项目、用户目录中的同名资源可以区分。旧版节点级规则迁移时会保留为待分配规则并继续生效,建议逐条归到对应技能。</p>
|
|
202
|
+
<p>技能和规则引用包含 <code>source</code> 与 <code>name</code>;内置、项目、用户目录中的同名资源可以区分。旧版节点级规则迁移时会保留为待分配规则并继续生效,建议逐条归到对应技能。</p>
|
|
203
203
|
</section>
|
|
204
204
|
|
|
205
205
|
<section id="init">
|
|
@@ -259,7 +259,7 @@ pnpm install && pnpm run build && pnpm dsh web</code></pre>
|
|
|
259
259
|
</tbody>
|
|
260
260
|
</table>
|
|
261
261
|
</div>
|
|
262
|
-
<p>新任务离开阶段前检查绑定技能是否成功加载;Codex 项目技能通过 <code>dev_task load_skill</code> 加载其正文及所挂规则。技能可以声明 <code>command</code>、<code>artifact</code>、<code>review</code>、<code>manual</code> 或 <code>none</code> 证据类型。只有需要命令回执的技能才出现在 <code>command_receipts_required</code> 中。挂在终态的技能在进入终态前执行。命令成功只证明该命令通过,不证明覆盖完整;文件变动后须重新验证。任务的流程配置按创建时的快照执行,Skill/Rule 正文在下一次交互读取最新版本。</p>
|
|
262
|
+
<p>新任务离开阶段前检查绑定技能是否成功加载;Codex 项目技能通过 <code>dev_task load_skill</code> 加载其正文及所挂规则。技能可以声明 <code>command</code>、<code>artifact</code>、<code>review</code>、<code>manual</code> 或 <code>none</code> 证据类型。只有需要命令回执的技能才出现在 <code>command_receipts_required</code> 中。挂在终态的技能在进入终态前执行。命令成功只证明该命令通过,不证明覆盖完整;文件变动后须重新验证。任务的流程配置按创建时的快照执行,Skill/Rule 正文在下一次交互读取最新版本。</p>
|
|
263
263
|
<h3>贯穿全程的硬规则</h3>
|
|
264
264
|
<ul>
|
|
265
265
|
<li>阶段是硬状态:status 说你在哪,就只做那一步,绝不倒带重走、绝不跳。</li>
|
|
@@ -300,7 +300,7 @@ pnpm install && pnpm run build && pnpm dsh web</code></pre>
|
|
|
300
300
|
<li>差异没变时复用有效证据,不重复跑相同命令。</li>
|
|
301
301
|
<li>无法联调外部系统时必须如实写「未联调」,不能把编译成功说成功能通过。</li>
|
|
302
302
|
<li><code>high_risk</code> 任务过验证门必须跑真实命令回执(引擎运行命令、取退出码,非自报通过)。</li>
|
|
303
|
-
<li><code>verify</code> 不带 <code>command</code> 时引擎自动选命令:<code>.dsh/eng.json</code> 的 <code>verify_command</code> 优先,其次按项目语言用默认(node → <code>npm test</code>、java → <code>mvn -q test</code>、python → <code>python -m pytest</code>、go → <code>go test ./...</code>、rust → <code>cargo test</code>);新任务若没有可用默认命令,须显式提供真实命令。跑命令依赖宿主 shell 服务,未挂载会明确报错。</li>
|
|
303
|
+
<li><code>verify</code> 不带 <code>command</code> 时引擎自动选命令:<code>.dsh/eng.json</code> 的 <code>verify_command</code> 优先,其次按项目语言用默认(node → <code>npm test</code>、java → <code>mvn -q test</code>、python → <code>python -m pytest</code>、go → <code>go test ./...</code>、rust → <code>cargo test</code>);新任务若没有可用默认命令,须显式提供真实命令。跑命令依赖宿主 shell 服务,未挂载会明确报错。</li>
|
|
304
304
|
<li><b>验证命令始终在任务记录的项目根运行</b>(任务创建时自动发现并固化 <code>root</code>),不是会话当前目录——monorepo 里会话停在子目录时,<code>npm test</code> 等也会在放清单文件的项目根执行;回执记录的 <code>root</code> 与任务根强校验,不一致直接拒绝。</li>
|
|
305
305
|
</ul>
|
|
306
306
|
<h3>评审</h3>
|
|
@@ -316,7 +316,7 @@ pnpm install && pnpm run build && pnpm dsh web</code></pre>
|
|
|
316
316
|
</tbody>
|
|
317
317
|
</table>
|
|
318
318
|
</div>
|
|
319
|
-
<p>流程骨架不规定提交消息格式;若采用推荐配置,会写入 <code>【任务 id】【TASK】结果说明</code> 等文本约定,之后可修改或删除。文件范围门禁按所选流程与任务配置检查。可安装本地提交钩子,让普通 <code>git commit</code> 经过相同的门禁:</p>
|
|
319
|
+
<p>流程骨架不规定提交消息格式;若采用推荐配置,会写入 <code>【任务 id】【TASK】结果说明</code> 等文本约定,之后可修改或删除。文件范围门禁按所选流程与任务配置检查。可安装本地提交钩子,让普通 <code>git commit</code> 经过相同的门禁:</p>
|
|
320
320
|
<pre><code>dev_task operation=install_hook # 装入 .git/hooks/commit-msg,装上后任何 git commit 都被同一套规则校验
|
|
321
321
|
dev_task operation=verify_hook # 随时比对安装钩子与内置门禁的 hash,被替换/篡改立即报错</code></pre>
|
|
322
322
|
<p><strong>钩子的额外硬校验(0.21/0.22):</strong>① 任务记录的流程快照带 SHA-256 hash,被手改过的快照一律拒绝提交;② 触及敏感路径(<code>.env</code>、credentials、secrets、<code>.git</code>;<code>.dsh</code> 的任务记录与流程配置由快照 hash 与豁免保护,项目级 rules/skills 属常规内容)的提交,要求任务为 <code>high_risk</code> 且验证有真实命令回执,否则拒绝;③ 删除、类型变换、重命名的旧·新路径都受范围检查。</p>
|
|
@@ -359,12 +359,12 @@ risk_level: high_risk // 涉及鉴权,验证要加证据
|
|
|
359
359
|
<div class="callout danger">
|
|
360
360
|
<p>引擎只允许:读取仓库事实、修改<b>已确认任务范围内</b>的文件、按策略创建<b>范围受控的本地提交</b>。远程 push / 合并 / 发布、数据库写入,需人单独决定。</p>
|
|
361
361
|
</div>
|
|
362
|
-
<details open><summary>切换预设就是开关吗?</summary><div>是。选「工程化开发引擎」才启用 <code>dev_task</code> 与编排技能;工作台中的 <code>standard</code>、<code>agile</code>、<code>minimal</code> 则选择该工具使用的流程骨架。</div></details>
|
|
363
|
-
<details><summary>技能和规则由谁提供?</summary><div>插件只内置用于会话编排的 <code>eng-delivery</code>。项目或个人技能与规则由你创建或安装;规则挂在技能下,再把技能挂到节点。空绑定时流程门禁照常运行。</div></details>
|
|
362
|
+
<details open><summary>切换预设就是开关吗?</summary><div>是。选「工程化开发引擎」才启用 <code>dev_task</code> 与编排技能;工作台中的 <code>standard</code>、<code>agile</code>、<code>minimal</code> 则选择该工具使用的流程骨架。</div></details>
|
|
363
|
+
<details><summary>技能和规则由谁提供?</summary><div>插件只内置用于会话编排的 <code>eng-delivery</code>。项目或个人技能与规则由你创建或安装;规则挂在技能下,再把技能挂到节点。空绑定时流程门禁照常运行。</div></details>
|
|
364
364
|
<details><summary>任务文档要不要提交?</summary><div>要。<code>.dsh/task-*.json</code> 是团队共享、跨会话恢复的任务事实,随分支提交——引擎已豁免 <code>.dsh/task-*.json</code> 与 <code>.dsh/eng.json</code>,不受文件范围门拦截;忽略它别人只能看到代码,看不到确认内容和进度。</div></details>
|
|
365
365
|
<details><summary>一个会话能同时做两个需求吗?</summary><div>一个任务对应一份状态文档、一个分支。新需求保存当前进度后切新分支,切回原分支即可恢复。</div></details>
|
|
366
366
|
<details><summary>提交被拒是怎么回事?</summary><div>通常是四类:没建 dev_task 任务、阶段没到提交检查点、消息格式不符、提交文件不在任务范围内。按拒绝原因修正即可。</div></details>
|
|
367
|
-
<details><summary>git 钩子能防住所有绕过吗?</summary><div>不能。<code>.git/hooks/commit-msg</code> 提供<b>本地即时反馈</b>,拦常规 <code>git commit</code>(校验任务、阶段、范围、消息、快照 hash、敏感路径),但挡不住 <code>git commit --no-verify</code>、<code>core.hooksPath</code> 替换或直接手改任务记录。若项目需要强制约束,应在自己的受保护分支和 CI 中配置独立检查;插件本身不会自动为使用者仓库安装远程 CI 门禁。</div></details>
|
|
367
|
+
<details><summary>git 钩子能防住所有绕过吗?</summary><div>不能。<code>.git/hooks/commit-msg</code> 提供<b>本地即时反馈</b>,拦常规 <code>git commit</code>(校验任务、阶段、范围、消息、快照 hash、敏感路径),但挡不住 <code>git commit --no-verify</code>、<code>core.hooksPath</code> 替换或直接手改任务记录。若项目需要强制约束,应在自己的受保护分支和 CI 中配置独立检查;插件本身不会自动为使用者仓库安装远程 CI 门禁。</div></details>
|
|
368
368
|
<details><summary>任务记录被手改会怎样?</summary><div>流程快照内容与保存的 SHA-256 不一致时会被拒绝;任务记录本身没有签名,能同时修改内容与 hash 的本地用户仍可伪造。文件版本与 <code>revision</code> 检查用于阻止并发覆盖,不提供身份认证。0.23.0 在读取内容前取得文件版本,使读取期间发生的并发写入也被拒绝。多用户隔离和可信状态签名需要 Harness 支持。</div></details>
|
|
369
369
|
<details><summary>Remote 如何限制工作区?</summary><div>有 <code>workspaceRegistry.resolveByPath</code> 的 Harness 使用主机注册目录;未注册路径拒绝。旧主机保留绝对路径和系统目录检查,并提供严格注册 API。工作区注册不等于当前会话授权;共享多用户部署仍需要调用上下文和主机权限边界。</div></details>
|
|
370
370
|
<details><summary>dev_task 写文件被沙箱拒绝(file access denied)怎么办?</summary><div>沙箱按调用策略放行写入,偶发的越界误判可用一次性升级重试:同一操作加 <code>sandbox_permissions: "workspace-write"(或 "danger-full-access")</code> 并配 <code>justification</code>(一句话说明原因),升级需要<b>人工批准</b>;无审批服务时直接拒绝。日常任务记录写入默认已在会话工作区内放行,通常无需升级。</div></details>
|
|
@@ -372,7 +372,7 @@ risk_level: high_risk // 涉及鉴权,验证要加证据
|
|
|
372
372
|
<p>状态查询中的 <code>evidence_blockers</code> 列出过期验证和附加技能回执;<code>commit.allowed</code> 同时检查这些阻塞及技能执行义务。<code>legal_next</code> 是流程定义的候选去向,不表示所有门禁已通过。</p>
|
|
373
373
|
<details><summary>记录需求时提示字段不存在怎么办?</summary><div>先读取 <code>status.artifact_requirements</code>,按当前阶段列出的字段填写。标准需求为 <code>scope</code> 和 <code>acceptance_criteria</code>,敏捷流程只有 <code>scope</code>。疑问、假设或待确认取舍写入字段正文,不新增字段名。错误输入整次不保存,修正后再提交;不需要修改流程配置或历史任务记录。</div></details>
|
|
374
374
|
<details><summary>验证命令被沙箱阻止怎么办?</summary><div><code>verify</code> 与 <code>skill_result</code> 默认使用会话权限。原命令被沙箱阻止后,用相同命令和 <code>sandbox_permissions: "danger-full-access"</code>、<code>justification</code> 申请单次重试。审批显示命令,批准后才执行;拒绝、取消或审批不可用时不执行、不写回执。授权只对本次调用生效,不改变会话权限。以本次回执的实际模式和退出码判断结果。</div></details>
|
|
375
|
-
<p class="stamp">适用于当前研发版 · 最后更新:2026-09-26</p>
|
|
375
|
+
<p class="stamp">适用于当前研发版 · 最后更新:2026-09-26</p>
|
|
376
376
|
</section>
|
|
377
377
|
</main>
|
|
378
378
|
</div>
|
package/docs/resource-install.md
CHANGED
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
|
|
24
24
|
| 范围 | 技能 | 规则 |
|
|
25
25
|
| :--- | :--- | :--- |
|
|
26
|
-
| 项目 | 工作区 `.dsh/skills` | 工作区 `.dsh/rules` |
|
|
27
|
-
| 个人 | `$DSH_HOME/skills` | `$DSH_HOME/rules` |
|
|
28
|
-
|
|
29
|
-
工作台还会自动发现当前项目 `.agents/skills/<名称>/SKILL.md` 中的 Codex 技能。它保留在原目录,正文可查看;要改正文请编辑原文件。可在 DSH 工作台给该技能挂多条 `.dsh/rules` 规则;新建技能和规则仍默认存入 `.dsh`。
|
|
30
|
-
|
|
26
|
+
| 项目 | 工作区 `.dsh/skills` | 工作区 `.dsh/rules` |
|
|
27
|
+
| 个人 | `$DSH_HOME/skills` | `$DSH_HOME/rules` |
|
|
28
|
+
|
|
29
|
+
工作台还会自动发现当前项目 `.agents/skills/<名称>/SKILL.md` 中的 Codex 技能。它保留在原目录,正文可查看;要改正文请编辑原文件。可在 DSH 工作台给该技能挂多条 `.dsh/rules` 规则;新建技能和规则仍默认存入 `.dsh`。
|
|
30
|
+
|
|
31
31
|
`DSH_HOME` 默认是用户主目录下的 `.dsh`。删除确认框显示实际路径;确认删除后不经过回收站。内置资源只读,项目和个人资源可以查看、编辑和删除。
|
|
32
32
|
|
|
33
33
|
## 格式与大小限制
|
package/docs/roadmap.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
| 能力 | 状态 |
|
|
11
11
|
| :--- | :--- |
|
|
12
12
|
| 三个内置流程(`standard`、`agile`、`minimal`) | ✅ 已发布,开箱即用 |
|
|
13
|
-
| 阶段选择技能、规则归属技能 | ✅ 已发布 |
|
|
13
|
+
| 阶段选择技能、规则归属技能 | ✅ 已发布 |
|
|
14
14
|
| 任务台账、验证与审核回执、提交门禁 | ✅ 已发布 |
|
|
15
15
|
| 项目级与个人级资源安装、来源保留 | ✅ 已发布 |
|
|
16
16
|
| **自由编辑流程阶段与条件** | ❌ **不在计划内** |
|
|
@@ -31,4 +31,4 @@
|
|
|
31
31
|
## 产品范围
|
|
32
32
|
|
|
33
33
|
本项目服务本机个人开发工作台。多用户服务器的会话权限架构不列为当前版本的必修项。日常改进优先
|
|
34
|
-
解决工作区目标清晰、文件误操作、任务连续性和操作反馈。
|
|
34
|
+
解决工作区目标清晰、文件误操作、任务连续性和操作反馈。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@godv61/dsh-task-engine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.28.0",
|
|
4
4
|
"description": "Workflow engine for DeepSeek Harness: a `dev_task` tool that hard-gates stage transitions and commit scope/message, per-node skill bindings with progressive disclosure, and a workbench to configure flows and mount skills. A preset is a flow SKELETON — state control only — and one reasonable engineering setup is offered separately for explicit adoption; which skills run, which rules they follow and what a commit message must look like stay the user's decisions.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
".enforce-test.mjs",
|
|
50
50
|
".evidence-test.mjs",
|
|
51
51
|
".roundtrip-test.mjs",
|
|
52
|
-
".filter-test.mjs",
|
|
53
|
-
".codex-project-test.mjs"
|
|
52
|
+
".filter-test.mjs",
|
|
53
|
+
".codex-project-test.mjs"
|
|
54
54
|
],
|
|
55
55
|
"license": "MIT",
|
|
56
56
|
"publishConfig": {
|
|
@@ -71,26 +71,24 @@
|
|
|
71
71
|
"scripts": {
|
|
72
72
|
"build": "tsc -p tsconfig.json && node build-client.mjs && node build-hook.mjs",
|
|
73
73
|
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.client.json --noEmit",
|
|
74
|
-
"test": "node .p0-test.mjs && node .acceptance.mjs && node .hook-consistency.mjs && node --test .resource-test.mjs .workflow-test.mjs .hook-test.mjs .preset-test.mjs .assessment-batch1.mjs .e2e-presets.mjs .revision-test.mjs .freeze-test.mjs .enforce-test.mjs .evidence-test.mjs .roundtrip-test.mjs .filter-test.mjs .codex-project-test.mjs",
|
|
74
|
+
"test": "node .p0-test.mjs && node .acceptance.mjs && node .hook-consistency.mjs && node --test .resource-test.mjs .workflow-test.mjs .hook-test.mjs .preset-test.mjs .assessment-batch1.mjs .e2e-presets.mjs .revision-test.mjs .freeze-test.mjs .enforce-test.mjs .evidence-test.mjs .roundtrip-test.mjs .filter-test.mjs .codex-project-test.mjs",
|
|
75
75
|
"verify:package": "node scripts/verify-package.mjs",
|
|
76
76
|
"verify:dsh": "node scripts/verify-dsh-compat.mjs",
|
|
77
77
|
"prepare": "npm run build"
|
|
78
78
|
},
|
|
79
79
|
"peerDependencies": {
|
|
80
80
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
81
|
-
"@deepseek-ai/dsh-
|
|
82
|
-
"@deepseek-ai/dsh-
|
|
83
|
-
"@deepseek-ai/dsh-
|
|
84
|
-
"@deepseek-ai/dsh-typert-protocol": "^0.1.2-rc.1 || ^0.1.3-alpha.1 || ^0.1.6-alpha.2 || ^0.1.7-alpha.1"
|
|
81
|
+
"@deepseek-ai/dsh-llm": "^0.1.2-rc.1 || ^0.1.3-alpha.1 || ^0.1.6-alpha.2 || ^0.1.7-alpha.1 || ^0.2.0-rc.2",
|
|
82
|
+
"@deepseek-ai/dsh-tools": "^0.1.2-rc.1 || ^0.1.3-alpha.1 || ^0.1.6-alpha.2 || ^0.1.7-alpha.1 || ^0.2.0-rc.2",
|
|
83
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.2-rc.1 || ^0.1.3-alpha.1 || ^0.1.6-alpha.2 || ^0.1.7-alpha.1 || ^0.2.0-rc.2"
|
|
85
84
|
},
|
|
86
85
|
"devDependencies": {
|
|
87
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
88
|
-
"@deepseek-ai/dsh-agent-default-model": "^0.
|
|
89
|
-
"@deepseek-ai/dsh-
|
|
90
|
-
"@deepseek-ai/dsh-
|
|
91
|
-
"@deepseek-ai/dsh-
|
|
92
|
-
"@deepseek-ai/dsh-
|
|
93
|
-
"@deepseek-ai/dsh-typert-protocol": "^0.1.2-rc.1",
|
|
86
|
+
"@deepseek-ai/cordis": "^4.0.4",
|
|
87
|
+
"@deepseek-ai/dsh-agent-default-model": "^0.2.0-rc.2",
|
|
88
|
+
"@deepseek-ai/dsh-fs": "^0.2.0-rc.2",
|
|
89
|
+
"@deepseek-ai/dsh-llm": "^0.2.0-rc.2",
|
|
90
|
+
"@deepseek-ai/dsh-tools": "^0.2.0-rc.2",
|
|
91
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.2.0-rc.2",
|
|
94
92
|
"@types/node": "^22.0.0",
|
|
95
93
|
"@types/react": "~18.3.1",
|
|
96
94
|
"esbuild": "^0.24.0",
|
package/preset/agent.cordis.yml
CHANGED
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
text: |-
|
|
15
15
|
You are an engineering-delivery coding agent, powered by the {{model}} model, running on DeepSeek Harness. Your working directory is {{cwd}}.
|
|
16
16
|
|
|
17
|
-
本仓库使用 `dev_task` 管理工程任务的状态机。项目根 `.dsh/eng.json` 选择流程骨架,并可配置阶段技能、技能规则、产物字段和提交文本;没有配置的业务方法不能自动补齐。任何开发类请求开始前,先加载 `eng-delivery` 并读取当前任务状态。
|
|
17
|
+
本仓库使用 `dev_task` 管理工程任务的状态机。项目根 `.dsh/eng.json` 选择流程骨架,并可配置阶段技能、技能规则、产物字段和提交文本;没有配置的业务方法不能自动补齐。任何开发类请求开始前,先加载 `eng-delivery` 并读取当前任务状态。
|
|
18
18
|
|
|
19
|
-
阶段流转、确认、验证、评审、任务完成及受控提交通过 `dev_task`;它拒绝时按返回的条件修正,不绕过。具体工作方法以当前任务冻结的用户配置为准,远程操作或发布由用户明确决定。
|
|
19
|
+
阶段流转、确认、验证、评审、任务完成及受控提交通过 `dev_task`;它拒绝时按返回的条件修正,不绕过。具体工作方法以当前任务冻结的用户配置为准,远程操作或发布由用户明确决定。
|
|
20
20
|
|
|
21
21
|
- id: task-engine-agent
|
|
22
|
-
name: '@godv61/dsh-task-engine/agent'
|
|
22
|
+
name: '@godv61/dsh-task-engine/agent'
|
package/preset/persona.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
You are an engineering-delivery coding agent, powered by the {{model}} model, running on DeepSeek Harness. Your working directory is {{cwd}}.
|
|
2
2
|
|
|
3
|
-
本仓库使用 `dev_task` 管理工程任务的状态机。项目根 `.dsh/eng.json` 选择流程骨架,并可配置阶段技能、技能规则、产物字段和提交文本;没有配置的业务方法不能自动补齐。任何开发类请求开始前,先加载 `eng-delivery` 并读取当前任务状态。
|
|
3
|
+
本仓库使用 `dev_task` 管理工程任务的状态机。项目根 `.dsh/eng.json` 选择流程骨架,并可配置阶段技能、技能规则、产物字段和提交文本;没有配置的业务方法不能自动补齐。任何开发类请求开始前,先加载 `eng-delivery` 并读取当前任务状态。
|
|
4
4
|
|
|
5
|
-
阶段流转、确认、验证、评审、任务完成及受控提交通过 `dev_task`;它拒绝时按返回的条件修正,不绕过。具体工作方法以当前任务冻结的用户配置为准,远程操作或发布由用户明确决定。
|
|
5
|
+
阶段流转、确认、验证、评审、任务完成及受控提交通过 `dev_task`;它拒绝时按返回的条件修正,不绕过。具体工作方法以当前任务冻结的用户配置为准,远程操作或发布由用户明确决定。
|
|
@@ -39,9 +39,9 @@ execSync(`tar -xzf "${tgzPath}"`, { cwd: tmp, stdio: 'pipe' })
|
|
|
39
39
|
const pkgDir = join(tmp, 'package')
|
|
40
40
|
const listing = execSync(`tar -tzf "${tgzPath}"`, { encoding: 'utf8' })
|
|
41
41
|
.trim().split(/\r?\n/u).map(line => line.replace(/^package\//u, ''))
|
|
42
|
-
check('extract', existsSync(join(pkgDir, 'package.json')))
|
|
43
|
-
check('only the orchestration skill ships', listing.filter(line => /^skills\/[^/]+\/SKILL\.md$/u.test(line)).join(',') === 'skills/eng-delivery/SKILL.md')
|
|
44
|
-
check('no bundled business rules ship', !listing.some(line => line.startsWith('rules/')))
|
|
42
|
+
check('extract', existsSync(join(pkgDir, 'package.json')))
|
|
43
|
+
check('only the orchestration skill ships', listing.filter(line => /^skills\/[^/]+\/SKILL\.md$/u.test(line)).join(',') === 'skills/eng-delivery/SKILL.md')
|
|
44
|
+
check('no bundled business rules ship', !listing.some(line => line.startsWith('rules/')))
|
|
45
45
|
|
|
46
46
|
// 3. files whitelist sanity
|
|
47
47
|
for (const required of ['hooks/commit-msg', 'lib/index.js', 'lib/client.js', 'lib/client.d.ts', 'preset/enable.mjs', 'README.md', '.p0-test.mjs', '.acceptance.mjs', '.hook-consistency.mjs', '.resource-test.mjs', '.workflow-test.mjs', '.hook-test.mjs', '.preset-test.mjs', '.assessment-batch1.mjs', '.e2e-presets.mjs', '.revision-test.mjs', '.freeze-test.mjs', '.enforce-test.mjs', '.evidence-test.mjs', '.roundtrip-test.mjs', '.filter-test.mjs']) {
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: eng-delivery
|
|
3
|
-
description: 使用 dev_task 读取任务状态、执行流程门禁与完成条件;具体技能、规则、产物和提交文本以用户配置为准。
|
|
4
|
-
whenToUse: 在启用工程化交付会话预设后,开始或继续开发任务时先读取状态;阶段流转与完成必须通过 dev_task。
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# 工程流程编排
|
|
8
|
-
|
|
9
|
-
`dev_task` 是任务状态、阶段流转与门禁的唯一事实来源。流程预设决定阶段图与守卫;项目配置决定阶段使用哪些技能、每个技能遵守哪些规则,以及产物字段和提交文本。没有绑定时仅执行状态机,不自行补充技能或规则。
|
|
10
|
-
|
|
11
|
-
1. 先调用 `dev_task`(operation=status)查找当前工作区和分支的任务;有多个候选时让使用者明确目标。没有任务时按实际需求调用 `create`,已有任务则从返回的 `stage` 继续。
|
|
12
|
-
2. 读取 `status.bindings`、`skill_obligations`、`artifact_requirements`、`legal_next` 和 `commit`。只加载当前及即将进入的终态实际绑定的技能,遵守本次交互读取的最新规则正文;没有绑定时不自行补上技能或规则。
|
|
13
|
-
3. 技能要求的证据以其配置和 `status.skill_obligations` 为准:仅对 `command_receipts_required` 列出的技能通过带真实命令的 `skill_result` 记录;`manual` 通过人工审批记录;`artifact`、`review` 与 `none` 按对应阶段操作或无需额外回执处理。不要把所有技能都当成命令型技能。技能加载成功不等于要求的证据已经完成。
|
|
14
|
-
4. 需要记录产物时,只使用 `artifact_requirements` 给出的 id 与字段。按当前流程要求完成确认、实施项、验证和审核,再调用 `advance`;被拒绝时按返回的阻塞原因修正,不改任务文件绕过门禁。
|
|
15
|
-
5. 只在 `status.commit` 允许的检查点申请提交,并按任务创建时的流程配置校验文件范围与消息。提交后按工具要求回写真实 Git HEAD。到达终态后调用 `complete`,以其完成条件为准;需要返工时使用 `revise`。
|
|
16
|
-
|
|
17
|
-
不同流程的阶段数与守卫不同,不把某一预设的阶段顺序或提交格式当作所有项目的默认工作方法。用户修改流程配置只影响之后创建的任务;进行中的任务继续遵守创建时的阶段与门禁,但在下次交互读取所引用技能和规则的最新正文。
|
|
1
|
+
---
|
|
2
|
+
name: eng-delivery
|
|
3
|
+
description: 使用 dev_task 读取任务状态、执行流程门禁与完成条件;具体技能、规则、产物和提交文本以用户配置为准。
|
|
4
|
+
whenToUse: 在启用工程化交付会话预设后,开始或继续开发任务时先读取状态;阶段流转与完成必须通过 dev_task。
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 工程流程编排
|
|
8
|
+
|
|
9
|
+
`dev_task` 是任务状态、阶段流转与门禁的唯一事实来源。流程预设决定阶段图与守卫;项目配置决定阶段使用哪些技能、每个技能遵守哪些规则,以及产物字段和提交文本。没有绑定时仅执行状态机,不自行补充技能或规则。
|
|
10
|
+
|
|
11
|
+
1. 先调用 `dev_task`(operation=status)查找当前工作区和分支的任务;有多个候选时让使用者明确目标。没有任务时按实际需求调用 `create`,已有任务则从返回的 `stage` 继续。
|
|
12
|
+
2. 读取 `status.bindings`、`skill_obligations`、`artifact_requirements`、`legal_next` 和 `commit`。只加载当前及即将进入的终态实际绑定的技能,遵守本次交互读取的最新规则正文;没有绑定时不自行补上技能或规则。
|
|
13
|
+
3. 技能要求的证据以其配置和 `status.skill_obligations` 为准:仅对 `command_receipts_required` 列出的技能通过带真实命令的 `skill_result` 记录;`manual` 通过人工审批记录;`artifact`、`review` 与 `none` 按对应阶段操作或无需额外回执处理。不要把所有技能都当成命令型技能。技能加载成功不等于要求的证据已经完成。
|
|
14
|
+
4. 需要记录产物时,只使用 `artifact_requirements` 给出的 id 与字段。按当前流程要求完成确认、实施项、验证和审核,再调用 `advance`;被拒绝时按返回的阻塞原因修正,不改任务文件绕过门禁。
|
|
15
|
+
5. 只在 `status.commit` 允许的检查点申请提交,并按任务创建时的流程配置校验文件范围与消息。提交后按工具要求回写真实 Git HEAD。到达终态后调用 `complete`,以其完成条件为准;需要返工时使用 `revise`。
|
|
16
|
+
|
|
17
|
+
不同流程的阶段数与守卫不同,不把某一预设的阶段顺序或提交格式当作所有项目的默认工作方法。用户修改流程配置只影响之后创建的任务;进行中的任务继续遵守创建时的阶段与门禁,但在下次交互读取所引用技能和规则的最新正文。
|