@godv61/dsh-task-engine 0.5.2 → 0.6.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/README.md +24 -3
- package/defaults/eng.json +19 -12
- package/hooks/commit-msg +11 -11
- package/lib/client.js +521 -20
- package/lib/client.js.map +4 -4
- package/lib/controller.d.ts +79 -3
- package/lib/controller.js +178 -3
- package/lib/controller.js.map +1 -1
- package/lib/engine.d.ts +11 -0
- package/lib/engine.js +22 -0
- package/lib/engine.js.map +1 -1
- package/lib/index.js +89 -3
- package/lib/index.js.map +1 -1
- package/package.json +3 -2
- package/rules/coding-conventions.md +7 -0
- package/rules/commit-conventions.md +6 -0
- package/rules/security-redlines.md +6 -0
- package/skills/code-commit/SKILL.md +13 -0
- package/skills/code-implement/SKILL.md +16 -0
- package/skills/code-review/SKILL.md +13 -0
- package/skills/code-verify/SKILL.md +13 -0
- package/skills/requirement-analysis/SKILL.md +16 -0
- package/skills/solution-design/SKILL.md +16 -0
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
- **产物门**:每个阶段可声明必交产物 + 必填字段(需求说明 / 设计文档 / 评审记录…),字段没填全 → 不让流转。
|
|
10
10
|
- **提交门禁**:到检查点才能提交,消息必须匹配 `message_pattern`,`manual` 策略永不自动提交。
|
|
11
11
|
- **文件范围**:任务声明 `files`(本任务该改的文件),提交碰了范围外的文件 → 工具和 git 钩子都拒绝。
|
|
12
|
+
- **skill / rule 挂载(0.6.0)**:每个阶段可挂「这个阶段用什么 skill」+「守哪条 rule」;模型走到该阶段时,`dev_task` 只**渐进披露**这阶段挂载的内容,不一次性全给。内置一套通用库,也能在网页里新建自己的 skill/rule。
|
|
12
13
|
|
|
13
14
|
## 目录
|
|
14
15
|
|
|
@@ -19,8 +20,9 @@ hooks/commit-msg git 提交门禁钩子(install_hook 装进 .git/hooks/
|
|
|
19
20
|
src/engine.ts 纯函数状态机 + 配置校验(无 harness 依赖,双端复用)
|
|
20
21
|
src/index.ts 插件(host):注册 dev_task 工具 + 技能 + 挂 task-engine Remote 控制器
|
|
21
22
|
src/controller.ts Host 端 Remote 控制器:网页读写 .dsh/eng.json
|
|
22
|
-
src/client/ 浏览器半:设置页「工程流程配置」(表单 + 实时校验 +
|
|
23
|
-
skills/
|
|
23
|
+
src/client/ 浏览器半:设置页「工程流程配置」(表单 + 实时校验 + 保存 + 挂载/新建)
|
|
24
|
+
skills/ 内置技能库(需求分析/方案设计/实现/验证/审核/提交/交付编排)
|
|
25
|
+
rules/ 内置规则库(编码规范/提交规范/安全红线)
|
|
24
26
|
preset/preset.yml 预设元数据
|
|
25
27
|
preset/persona.md 预设 persona 文案(复制粘贴用)
|
|
26
28
|
```
|
|
@@ -86,6 +88,24 @@ dsh plugin --profile <name> add .
|
|
|
86
88
|
|
|
87
89
|
> 纯 headless 装机不受影响(只是没有这个页);Web profile 需要包含 `@deepseek-ai/dsh-web-app`。
|
|
88
90
|
|
|
91
|
+
## skill / rule 挂载(0.6.0)
|
|
92
|
+
|
|
93
|
+
流程不止"走到哪个阶段",还有"这个阶段该用哪本手册"。每个阶段可以在 `stage_bindings` 里挂 skill 和 rule:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"stage_bindings": {
|
|
98
|
+
"需求评审": { "skills": ["requirement-analysis"], "rules": ["security-redlines"] },
|
|
99
|
+
"开发": { "skills": ["code-implement"], "rules": ["coding-conventions"] }
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
- **渐进披露**:模型走到某阶段时,`dev_task`(`status` / `advance`)只返回**这个阶段**挂载的 skill 名 + rule 内容;skill 用 DSH 的 `skill` 工具按名加载,rule 直接把正文给出。阶段推进到哪,才给哪。
|
|
105
|
+
- **三层来源**:技能和规则都来自「内置 + 项目 + 用户」三层——内置(本包 `skills/`、`rules/`)、项目(`.dsh/skills/`、`.dsh/rules/`)、用户(`$DSH_HOME/skills/`、`$DSH_HOME/rules/`),同名时项目优先于用户优先于内置。
|
|
106
|
+
- **网页新建**:设置页「新建 skill / rule」填 name + description + 正文,即可写进项目 `.dsh/`(团队共享)或用户 `$DSH_HOME/`(个人全局),写好后自动出现在挂载清单里。
|
|
107
|
+
- **内置库**:6 个节点技能(`requirement-analysis` / `solution-design` / `code-implement` / `code-verify` / `code-review` / `code-commit`)+ 3 条规则(`coding-conventions` / `commit-conventions` / `security-redlines`),开箱即用;想加项目专属的,用 DSH 原生技能机制或网页新建即可。
|
|
108
|
+
|
|
89
109
|
## git 提交门禁(防止绕过)
|
|
90
110
|
|
|
91
111
|
默认提交是「工具校验 + 模型执行 git」,模型理论上能绕过 `dev_task` 直接 `git commit`。装个机械钩子彻底封死:
|
|
@@ -99,4 +119,5 @@ dsh plugin --profile <name> add .
|
|
|
99
119
|
|
|
100
120
|
- **脚本级已验证**:strict `tsc` typecheck/build 零错误;`dsh plugin add` 装进独立实例、`--dump-config` 确认 `task-engine` 进组合树;`validateWorkflow`(配置校验)、`artifacts_present`(产物门)、`file_scope`(文件范围门)、`hooks/commit-msg`(机械门禁)单测/冒烟全过——非法配置逐条报错、产物没填全挡流转、范围外文件挡提交、钩子该放放该拦拦。
|
|
101
121
|
- **真实模型端到端(0.4.1)**:headless + NewAPI DeepSeek 下让真模型走 `dev_task` 全流程,抓到并修掉一个真实 bug——`readText`/`writeText` 调 `fs.resolve()` 漏了 `await`,把 `Promise<FsTarget>` 当 `target` 传给了读写方法,导致 create/record/advance/commit 全部写不了任务文件、读永远返回 undefined。0.4.1 修复(`await fs.resolve(relPath)`),并把 `task_id` 在 create 也必填的说明补进工具 schema 与技能。修复后走真实 `ctx.fs` 路径冒烟全绿。
|
|
102
|
-
- **网页图形化配置界面(0.5.0)**:新增 `src/client/` 设置页「工程流程配置」+ Host 端 `task-engine` Remote 控制器;`@godv61/dsh-task-engine` 升级为双端包(`dsh.client` manifest + `./client` 出品,`exports` 暴露)。已实机验证:`dsh web` 起服务后 boot 数据里 `@godv61/dsh-task-engine` 以 `inject:["@deepseek-ai/dsh-api-gateway"]` 进入 application batch、`/plugins/…/client.js` 正常服务;headless 冒烟确认 boot + `dev_task` 未被新控制器破坏。浏览器点击级 e2e 留到发布后用真浏览器收尾。
|
|
122
|
+
- **网页图形化配置界面(0.5.0)**:新增 `src/client/` 设置页「工程流程配置」+ Host 端 `task-engine` Remote 控制器;`@godv61/dsh-task-engine` 升级为双端包(`dsh.client` manifest + `./client` 出品,`exports` 暴露)。已实机验证:`dsh web` 起服务后 boot 数据里 `@godv61/dsh-task-engine` 以 `inject:["@deepseek-ai/dsh-api-gateway"]` 进入 application batch、`/plugins/…/client.js` 正常服务;headless 冒烟确认 boot + `dev_task` 未被新控制器破坏。浏览器点击级 e2e 留到发布后用真浏览器收尾。
|
|
123
|
+
- **skill/rule 挂载与渐进披露(0.6.0)**:`WorkflowConfig` 新增 `stage_bindings`(每阶段挂 skills/rules,可选字段),`dev_task` 的 `status`/`advance` 按当前阶段披露挂载的 skill 名 + rule 正文;内置 6 技能 + 3 规则库;Host 控制器新增 `listSkills`/`listRules`/`writeSkill`/`writeRule`;设置页新增「节点挂载」和「新建 skill / rule」两块,同时补上 `dev_task` 缺失的 `items` 操作(更新实施项状态)。引擎层 `stage_bindings` 校验(未知阶段/空名)与合并已单测通过。
|
package/defaults/eng.json
CHANGED
|
@@ -1,24 +1,31 @@
|
|
|
1
1
|
{
|
|
2
|
-
"stages": ["
|
|
3
|
-
"start_stage": "
|
|
2
|
+
"stages": ["需求评审", "设计", "开发", "交付", "代码审核", "完成"],
|
|
3
|
+
"start_stage": "需求评审",
|
|
4
4
|
"transitions": [
|
|
5
|
-
{ "from": "
|
|
6
|
-
{ "from": "
|
|
7
|
-
{ "from": "
|
|
8
|
-
{ "from": "
|
|
9
|
-
{ "from": "
|
|
5
|
+
{ "from": "需求评审", "to": "设计", "requires": ["requirement_confirmation", "artifacts_present"] },
|
|
6
|
+
{ "from": "设计", "to": "开发", "requires": ["solution_confirmation", "artifacts_present"] },
|
|
7
|
+
{ "from": "开发", "to": "交付", "requires": ["todos_done"] },
|
|
8
|
+
{ "from": "交付", "to": "代码审核", "requires": ["verified"] },
|
|
9
|
+
{ "from": "代码审核", "to": "完成", "requires": ["review_passed", "artifacts_present"] }
|
|
10
10
|
],
|
|
11
11
|
"artifacts": [
|
|
12
|
-
{ "stage": "
|
|
13
|
-
{ "stage": "
|
|
14
|
-
{ "stage": "
|
|
12
|
+
{ "stage": "需求评审", "id": "requirement", "name": "需求说明", "fields": ["scope", "acceptance_criteria"] },
|
|
13
|
+
{ "stage": "设计", "id": "design", "name": "设计文档", "fields": ["approach", "risks", "impact"] },
|
|
14
|
+
{ "stage": "代码审核", "id": "review", "name": "评审记录", "fields": ["conclusion", "issues"] }
|
|
15
15
|
],
|
|
16
16
|
"commit": {
|
|
17
17
|
"policy": "task",
|
|
18
18
|
"message_pattern": "^【(\\S+)】【(?:TASK|T\\d+)】.+",
|
|
19
19
|
"message_hint": "【<module>】【TASK/T1】说明 —— 写结果,不写空泛动作",
|
|
20
|
-
"checkpoints": ["
|
|
20
|
+
"checkpoints": ["交付"],
|
|
21
21
|
"file_scope": true
|
|
22
22
|
},
|
|
23
|
-
"high_risk_requires_verification": true
|
|
23
|
+
"high_risk_requires_verification": true,
|
|
24
|
+
"stage_bindings": {
|
|
25
|
+
"需求评审": { "skills": ["requirement-analysis"], "rules": ["security-redlines"] },
|
|
26
|
+
"设计": { "skills": ["solution-design"] },
|
|
27
|
+
"开发": { "skills": ["code-implement"], "rules": ["coding-conventions"] },
|
|
28
|
+
"交付": { "skills": ["code-verify", "code-commit"], "rules": ["coding-conventions", "commit-conventions"] },
|
|
29
|
+
"代码审核": { "skills": ["code-review"], "rules": ["security-redlines"] }
|
|
30
|
+
}
|
|
24
31
|
}
|
package/hooks/commit-msg
CHANGED
|
@@ -33,25 +33,25 @@ function readJson(abs) {
|
|
|
33
33
|
|
|
34
34
|
// Mirrors defaults/eng.json — keep in sync.
|
|
35
35
|
const DEFAULTS = {
|
|
36
|
-
stages: ['
|
|
37
|
-
start_stage: '
|
|
36
|
+
stages: ['需求评审', '设计', '开发', '交付', '代码审核', '完成'],
|
|
37
|
+
start_stage: '需求评审',
|
|
38
38
|
transitions: [
|
|
39
|
-
{ from: '
|
|
40
|
-
{ from: '
|
|
41
|
-
{ from: '
|
|
42
|
-
{ from: '
|
|
43
|
-
{ from: '
|
|
39
|
+
{ from: '需求评审', to: '设计', requires: ['requirement_confirmation', 'artifacts_present'] },
|
|
40
|
+
{ from: '设计', to: '开发', requires: ['solution_confirmation', 'artifacts_present'] },
|
|
41
|
+
{ from: '开发', to: '交付', requires: ['todos_done'] },
|
|
42
|
+
{ from: '交付', to: '代码审核', requires: ['verified'] },
|
|
43
|
+
{ from: '代码审核', to: '完成', requires: ['review_passed', 'artifacts_present'] },
|
|
44
44
|
],
|
|
45
45
|
artifacts: [
|
|
46
|
-
{ stage: '
|
|
47
|
-
{ stage: '
|
|
48
|
-
{ stage: '
|
|
46
|
+
{ stage: '需求评审', id: 'requirement', name: '需求说明', fields: ['scope', 'acceptance_criteria'] },
|
|
47
|
+
{ stage: '设计', id: 'design', name: '设计文档', fields: ['approach', 'risks', 'impact'] },
|
|
48
|
+
{ stage: '代码审核', id: 'review', name: '评审记录', fields: ['conclusion', 'issues'] },
|
|
49
49
|
],
|
|
50
50
|
commit: {
|
|
51
51
|
policy: 'task',
|
|
52
52
|
message_pattern: '^【(\\S+)】【(?:TASK|T\\d+)】.+',
|
|
53
53
|
message_hint: '【<module>】【TASK/T1】说明',
|
|
54
|
-
checkpoints: ['
|
|
54
|
+
checkpoints: ['交付'],
|
|
55
55
|
file_scope: true,
|
|
56
56
|
},
|
|
57
57
|
high_risk_requires_verification: true,
|