@godv61/dsh-task-engine 0.14.0 → 0.17.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.
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Built-in engineering workflows. A workflow is a complete, engine-resolved
3
+ * `WorkflowConfig` a project adopts by id: the stage graph, transition guards,
4
+ * artifacts, commit rule, and default skill/rule bindings are all baked in
5
+ * here. A project overrides only its stage bindings (which skill/rule each
6
+ * node mounts); every other field is a fixed property of the chosen preset, so
7
+ * a project cannot hand-edit the gate semantics.
8
+ *
9
+ * @module dsh-task-engine/workflows
10
+ */
11
+ /** The selectable preset workflows (shown in the workbench flow picker). */
12
+ export const FLOW_OPTIONS = [
13
+ { id: 'standard', label: '标准研发', description: '需求评审 → 设计 → 开发 → 交付 → 代码审核,含产物门 + 确认门' },
14
+ { id: 'agile', label: '敏捷轻量', description: '需求 → 开发 → 交付 → 审查,四阶段、少产物' },
15
+ { id: 'minimal', label: '纯代码', description: '开发 → 交付,两阶段,只留提交门禁' },
16
+ ];
17
+ /** Standard review-gated delivery: the default workflow. */
18
+ const STANDARD = {
19
+ stages: ['需求评审', '设计', '开发', '交付', '代码审核', '完成'],
20
+ start_stage: '需求评审',
21
+ transitions: [
22
+ { from: '需求评审', to: '设计', requires: ['requirement_confirmation', 'artifacts_present'] },
23
+ { from: '设计', to: '开发', requires: ['solution_confirmation', 'artifacts_present'] },
24
+ { from: '开发', to: '交付', requires: ['todos_done'] },
25
+ { from: '交付', to: '代码审核', requires: ['verified'] },
26
+ { from: '代码审核', to: '完成', requires: ['review_passed', 'artifacts_present'] },
27
+ ],
28
+ artifacts: [
29
+ { stage: '需求评审', id: 'requirement', name: '需求说明', fields: ['scope', 'acceptance_criteria'] },
30
+ { stage: '设计', id: 'design', name: '设计文档', fields: ['approach', 'risks', 'impact'] },
31
+ { stage: '代码审核', id: 'review', name: '评审记录', fields: ['conclusion', 'issues'] },
32
+ ],
33
+ commit: {
34
+ policy: 'task',
35
+ message_pattern: '^【(\\S+)】【(?:TASK|T\\d+)】.+',
36
+ message_hint: '【<module>】【TASK/T1】说明 —— 写结果,不写空泛动作',
37
+ checkpoints: ['交付'],
38
+ file_scope: true,
39
+ },
40
+ high_risk_requires_verification: true,
41
+ stage_bindings: {
42
+ '需求评审': { skills: ['requirement-analysis'], rules: ['security-redlines'] },
43
+ '设计': { skills: ['solution-design'] },
44
+ '开发': { skills: ['code-implement'], rules: ['coding-conventions'] },
45
+ '交付': { skills: ['code-verify', 'code-commit'], rules: ['coding-conventions', 'commit-conventions'] },
46
+ '代码审核': { skills: ['code-review'], rules: ['security-redlines'] },
47
+ },
48
+ };
49
+ /** Lighter four-stage flow with few artifacts, for fast-moving projects. */
50
+ const AGILE = {
51
+ stages: ['需求', '开发', '交付', '审查'],
52
+ start_stage: '需求',
53
+ transitions: [
54
+ { from: '需求', to: '开发', requires: ['requirement_confirmation'] },
55
+ { from: '开发', to: '交付', requires: ['todos_done'] },
56
+ { from: '交付', to: '审查', requires: [] },
57
+ ],
58
+ artifacts: [
59
+ { stage: '需求', id: 'requirement', name: '需求说明', fields: ['scope'] },
60
+ ],
61
+ commit: {
62
+ policy: 'item',
63
+ message_pattern: '^【(\\S+)】【T\\d+】.+',
64
+ message_hint: '【<module>】【T1】说明',
65
+ checkpoints: ['交付'],
66
+ file_scope: true,
67
+ },
68
+ high_risk_requires_verification: false,
69
+ stage_bindings: {
70
+ '需求': { skills: ['requirement-analysis'] },
71
+ '开发': { skills: ['code-implement'], rules: ['coding-conventions'] },
72
+ '交付': { skills: ['code-verify', 'code-commit'], rules: ['commit-conventions'] },
73
+ '审查': { skills: ['code-review'] },
74
+ },
75
+ };
76
+ /** Minimal two-stage flow: only a commit gate, no artifact doors. */
77
+ const MINIMAL = {
78
+ stages: ['开发', '交付'],
79
+ start_stage: '开发',
80
+ transitions: [
81
+ { from: '开发', to: '交付', requires: ['todos_done'] },
82
+ ],
83
+ artifacts: [],
84
+ commit: {
85
+ policy: 'task',
86
+ message_pattern: '',
87
+ message_hint: '无格式要求',
88
+ checkpoints: ['交付'],
89
+ file_scope: false,
90
+ },
91
+ high_risk_requires_verification: false,
92
+ stage_bindings: {
93
+ '开发': { skills: ['code-implement'] },
94
+ '交付': { skills: ['code-commit'], rules: ['commit-conventions'] },
95
+ },
96
+ };
97
+ export const FLOW_CONFIGS = {
98
+ standard: STANDARD,
99
+ agile: AGILE,
100
+ minimal: MINIMAL,
101
+ };
102
+ /** Whether `flow` names a built-in workflow. */
103
+ export function isKnownFlow(flow) {
104
+ return Object.prototype.hasOwnProperty.call(FLOW_CONFIGS, flow);
105
+ }
106
+ /**
107
+ * Resolve a preset workflow plus a project's stage-binding override into the
108
+ * complete engine config. Unknown `flow` ids fall back to `standard` when
109
+ * reading (a stale file must not break the gate); writes reject unknown ids
110
+ * before calling this.
111
+ * @param flow - workflow id from the project's `.dsh/eng.json`.
112
+ * @param override - optional whole `stage_bindings` map replacing the preset default.
113
+ * @returns the resolved workflow, always structurally complete.
114
+ */
115
+ export function resolveFlowConfig(flow, override) {
116
+ const base = FLOW_CONFIGS[flow] ?? STANDARD;
117
+ if (override?.stage_bindings !== undefined) {
118
+ return { ...base, stage_bindings: { ...override.stage_bindings } };
119
+ }
120
+ return base;
121
+ }
122
+ //# sourceMappingURL=workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../src/workflows.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@godv61/dsh-task-engine",
3
- "version": "0.14.0",
4
- "description": "Config-driven engineering delivery engine for DeepSeek Harness: a `dev_task` tool that hard-gates workflow stage transitions and commit scope/message, stage-level skill/rule bindings with progressive disclosure, a full-screen workbench to edit each workspace's flow, and preset-scoped activation — the tool and skills activate only for sessions on a preset that names the agent row.",
3
+ "version": "0.17.0",
4
+ "description": "Preset-workflow engineering delivery engine for DeepSeek Harness: a `dev_task` tool that hard-gates stage transitions and commit scope/message, per-node skill/rule bindings with progressive disclosure, a workbench to pick a flow preset and mount skills/rules, and preset-scoped activation — the tool and skills activate only for sessions on a preset that names the agent row.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -30,6 +30,7 @@
30
30
  "skills/**",
31
31
  "rules/**",
32
32
  "preset/**",
33
+ "docs/**",
33
34
  "README.md"
34
35
  ],
35
36
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  # 通用编码规范
2
2
 
3
- - 复用相邻实现与现有类;单一调用方不为形式统一新增接口、Impl、DTO/VO、异常包装。
3
+ - 复用相邻实现与现有代码;单一调用方不为形式统一新增抽象层、包装层或额外分层。
4
4
  - 禁止空 catch、printStackTrace、调试输出;吞错必须写清原因。
5
5
  - 禁止无条件全表更新、删除或无边界查询。
6
6
  - 命名清晰表达意图;不引入超过当前技术基线的语法、框架或 API。
@@ -3,4 +3,4 @@
3
3
  - 禁止读取、展示或修改密码、Token、私钥和生产凭据。
4
4
  - 禁止把敏感请求体、文件正文或凭据写入日志。
5
5
  - 禁止用户输入直接拼接 SQL、表名、列名、排序、路径或命令。
6
- - 禁止 Controller 直接调用 Mapper;权限与核心业务校验不能只放在前端。
6
+ - 权限与关键业务校验必须在服务端执行,前端校验不是安全边界。
@@ -6,7 +6,11 @@ whenToUse: 开始任何开发、改 bug、加功能、代码评审或提交任
6
6
 
7
7
  # 工程化交付
8
8
 
9
- `dev_task` 工具是流程的唯一事实来源与硬约束。阶段、流转门槛、提交格式来自项目根 `.dsh/eng.json`(没有该文件则用 bundle 内置默认,见 `defaults/eng.json`)。
9
+ `dev_task` 工具是流程的唯一事实来源与硬约束。阶段顺序、流转门槛、提交格式来自所选流程预设(standard / agile / minimal);项目根 `.dsh/eng.json` 只声明 `flow`(选哪套预设)和 `stage_bindings`(每个节点挂哪些 skill / rule)。
10
+
11
+ ## 项目认知(可选前置)
12
+
13
+ 接手一个还不熟悉(尤其二开 / 遗留)的项目、且项目根没有 `AGENTS.md` 时,先 `dev_task`(operation=init)扫描项目并生成项目根的 `AGENTS.md` 描述文件——DSH 会把它自动注入到每个会话,之后每个任务开工自带项目认知。生成落盘前硬校验 200 行上限,只写「项目是什么 → 怎么跑 → 结构 → 约定 → 坑」,超限即精简;已有 `AGENTS.md` 时先读回、合并后再带 overwrite 重写,不裸覆盖。
10
14
 
11
15
  ## 入口
12
16
 
@@ -9,7 +9,7 @@ description: 设计节点:产出最小方案、改动点与技术选择,落
9
9
 
10
10
  1. `dev_task`(operation=status)读当前节点与待办。
11
11
  2. 产出最小方案:技术基线、修改位置与做法、明确保持不变的部分。
12
- 3. 单一调用方不为"以后可能复用"新增接口、Impl、DTO/VO 或异常包装;优先复用相邻实现。
12
+ 3. 不做投机性抽象:单一调用方不为"以后可能复用"新增抽象层或包装层,优先复用相邻实现;语言特定的分层与命名约定由项目挂载的 rule 约束,不在这里预设。
13
13
  4. 用 `dev_task`(operation=record, artifact=design, fields={approach, risks, impact})落设计文档。
14
14
  5. 完成后用 `dev_task`(operation=advance)流转;系统会向人发起「方案确认」审批,批准才放行。
15
15