@godv61/dsh-task-engine 0.19.1 → 0.20.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/.p0-test.mjs +292 -0
- package/README.md +8 -5
- package/docs/manual.html +26 -16
- package/hooks/commit-msg +377 -224
- package/lib/client.js +12 -9
- package/lib/client.js.map +2 -2
- package/lib/controller.d.ts +2 -0
- package/lib/controller.js +11 -0
- package/lib/controller.js.map +1 -1
- package/lib/dev-task.js +52 -5
- package/lib/dev-task.js.map +1 -1
- package/lib/engine.d.ts +28 -5
- package/lib/engine.js +37 -7
- package/lib/engine.js.map +1 -1
- package/lib/hook.d.ts +12 -0
- package/lib/hook.js +258 -0
- package/lib/hook.js.map +1 -0
- package/lib/workflows.js +2 -2
- package/lib/workflows.js.map +1 -1
- package/package.json +4 -3
- package/skills/code-verify/SKILL.md +1 -1
package/lib/hook.js
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Commit-msg hook source — the SINGLE source the installed hook is generated from.
|
|
3
|
+
*
|
|
4
|
+
* `build-hook.mjs` bundles this file (plus the pure {@link ../engine} and
|
|
5
|
+
* {@link ../workflows} modules it imports) into a self-contained CommonJS
|
|
6
|
+
* `hooks/commit-msg`. The gate logic therefore lives in exactly one place
|
|
7
|
+
* (`engine.ts` + `workflows.ts`); the hook no longer hand-mirrors it. Edit this
|
|
8
|
+
* file and rebuild — never edit `hooks/commit-msg` directly.
|
|
9
|
+
*
|
|
10
|
+
* @module dsh-task-engine/hook
|
|
11
|
+
*/
|
|
12
|
+
import { execSync } from 'node:child_process';
|
|
13
|
+
import fs from 'node:fs';
|
|
14
|
+
import path from 'node:path';
|
|
15
|
+
import { checkFileScope, commitCheckpoint, validateCommitMessage, } from "./engine.js";
|
|
16
|
+
import { resolveFlow } from "./workflows.js";
|
|
17
|
+
const messageFile = process.argv[2];
|
|
18
|
+
function refuse(reason) {
|
|
19
|
+
console.error('');
|
|
20
|
+
console.error('dsh-task-engine 提交门禁拒绝: ' + reason);
|
|
21
|
+
console.error('请先用 dev_task 走完前置阶段(或修正提交消息),再提交。');
|
|
22
|
+
console.error('');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
function readJson(abs) {
|
|
26
|
+
try {
|
|
27
|
+
return JSON.parse(fs.readFileSync(abs, 'utf8'));
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Fill every field missing from a legacy task record so the engine's pure
|
|
35
|
+
* functions (`commitCheckpoint`, `checkFileScope`) never read an absent field.
|
|
36
|
+
*/
|
|
37
|
+
function normalizeTask(task) {
|
|
38
|
+
return {
|
|
39
|
+
schema: 1,
|
|
40
|
+
id: String(task.id ?? ''),
|
|
41
|
+
title: String(task.title ?? ''),
|
|
42
|
+
branch: String(task.branch ?? ''),
|
|
43
|
+
work_size: task.work_size ?? 'standard',
|
|
44
|
+
risk_level: task.risk_level ?? 'standard',
|
|
45
|
+
stage: String(task.stage ?? ''),
|
|
46
|
+
requirement_confirmed: task.requirement_confirmed === true,
|
|
47
|
+
solution_confirmed: task.solution_confirmed === true,
|
|
48
|
+
items: Array.isArray(task.items) ? task.items : [],
|
|
49
|
+
verification: task.verification ?? { passed: false, evidence: [] },
|
|
50
|
+
review: task.review ?? { outcome: 'pending' },
|
|
51
|
+
artifacts: task.artifacts ?? {},
|
|
52
|
+
files: Array.isArray(task.files) ? task.files : [],
|
|
53
|
+
commits: Array.isArray(task.commits) ? task.commits : [],
|
|
54
|
+
...(task.flow !== undefined ? { flow: task.flow } : {}),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function loadTasks() {
|
|
58
|
+
const dir = path.join(process.cwd(), '.dsh');
|
|
59
|
+
if (!fs.existsSync(dir))
|
|
60
|
+
return [];
|
|
61
|
+
const out = [];
|
|
62
|
+
const names = fs.readdirSync(dir).filter(name => name.startsWith('task-') && name.endsWith('.json'));
|
|
63
|
+
for (const name of names) {
|
|
64
|
+
const json = readJson(path.join(dir, name));
|
|
65
|
+
if (json !== undefined && json.id !== undefined)
|
|
66
|
+
out.push({ file: path.join(dir, name), task: normalizeTask(json) });
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
function currentBranch() {
|
|
71
|
+
try {
|
|
72
|
+
return execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf8' }).trim();
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return '';
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The commit's touched paths with their git status (e.g. `M`, `A`, `D`, `T`,
|
|
80
|
+
* `R100`). Read as raw bytes under `quotePath=false` so non-ASCII filenames
|
|
81
|
+
* survive verbatim; `ACMRDT` includes deletions and type changes so every
|
|
82
|
+
* touched path — plus a rename's old and new path — is held to the declared
|
|
83
|
+
* scope. The status is surfaced on refusal for audit.
|
|
84
|
+
*/
|
|
85
|
+
function stagedEntries() {
|
|
86
|
+
try {
|
|
87
|
+
const raw = execSync('git -c core.quotePath=false diff --cached --name-status -z --diff-filter=ACMRDT', { encoding: 'utf8' });
|
|
88
|
+
const parts = raw.split('\0');
|
|
89
|
+
const entries = [];
|
|
90
|
+
let i = 0;
|
|
91
|
+
while (i < parts.length) {
|
|
92
|
+
const status = parts[i];
|
|
93
|
+
if (status === undefined || status === '') {
|
|
94
|
+
i++;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (status.startsWith('R') || status.startsWith('C')) {
|
|
98
|
+
// rename/copy carry `<status><score>\0<oldpath>\0<newpath>`; both paths
|
|
99
|
+
// are in the commit, so both are scope-checked.
|
|
100
|
+
const from = parts[i + 1];
|
|
101
|
+
const to = parts[i + 2];
|
|
102
|
+
if (from !== undefined && from !== '')
|
|
103
|
+
entries.push({ status, path: from });
|
|
104
|
+
if (to !== undefined && to !== '')
|
|
105
|
+
entries.push({ status, path: to });
|
|
106
|
+
i += 3;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
const path = parts[i + 1];
|
|
110
|
+
if (path !== undefined && path !== '')
|
|
111
|
+
entries.push({ status, path });
|
|
112
|
+
i += 2;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return entries;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function fileMtime(file) {
|
|
122
|
+
try {
|
|
123
|
+
return fs.statSync(file).mtimeMs;
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return 0;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/** Fallback only for pattern-less flows: newest task on the branch, else the sole task. */
|
|
130
|
+
function pickTask(tasks, branch) {
|
|
131
|
+
if (tasks.length === 0)
|
|
132
|
+
return undefined;
|
|
133
|
+
const byBranch = tasks.find(({ task }) => task.branch === branch);
|
|
134
|
+
if (byBranch)
|
|
135
|
+
return byBranch.task;
|
|
136
|
+
if (tasks.length === 1)
|
|
137
|
+
return tasks[0].task;
|
|
138
|
+
const sorted = [...tasks].sort((a, b) => fileMtime(b.file) - fileMtime(a.file));
|
|
139
|
+
return sorted[0].task;
|
|
140
|
+
}
|
|
141
|
+
function readCommitMessage(file) {
|
|
142
|
+
return fs.readFileSync(file, 'utf8')
|
|
143
|
+
.split('\n')
|
|
144
|
+
.filter(line => !line.startsWith('#'))
|
|
145
|
+
.join('\n')
|
|
146
|
+
.trim();
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Extract the task id from the leading `【…】` of the summary, independent of the
|
|
150
|
+
* live config (the hook must locate the task before it knows that task's frozen
|
|
151
|
+
* config). Pattern-less flows simply carry no `【…】` here.
|
|
152
|
+
*/
|
|
153
|
+
function extractTaskId(message) {
|
|
154
|
+
const match = /^【([^【】\s]+)】/.exec(message);
|
|
155
|
+
return match ? match[1] : undefined;
|
|
156
|
+
}
|
|
157
|
+
/** The standard preset, applied when the project has no `.dsh/eng.json` at all. */
|
|
158
|
+
function defaultConfig() {
|
|
159
|
+
const resolved = resolveFlow('standard');
|
|
160
|
+
if (!resolved.ok)
|
|
161
|
+
throw new Error('built-in "standard" preset is missing');
|
|
162
|
+
return resolved.config;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Resolve the project's live workflow — used only as a FALLBACK when a legacy
|
|
166
|
+
* task record carries no frozen snapshot. Mirrors `dev_task` `resolveWorkflow`:
|
|
167
|
+
* no file → standard; missing/unknown `flow` → fail closed (never silent fallback).
|
|
168
|
+
*/
|
|
169
|
+
function loadWorkflow(parsed) {
|
|
170
|
+
if (parsed === undefined)
|
|
171
|
+
return defaultConfig();
|
|
172
|
+
const flow = parsed.flow;
|
|
173
|
+
if (typeof flow !== 'string' || flow.trim() === '') {
|
|
174
|
+
refuse('项目 .dsh/eng.json 缺 "flow" 字段——设为 standard|agile|minimal,或删除该文件');
|
|
175
|
+
}
|
|
176
|
+
const override = typeof parsed.stage_bindings === 'object' && parsed.stage_bindings !== null && !Array.isArray(parsed.stage_bindings)
|
|
177
|
+
? { stage_bindings: parsed.stage_bindings }
|
|
178
|
+
: undefined;
|
|
179
|
+
const resolved = resolveFlow(flow, override);
|
|
180
|
+
if (!resolved.ok) {
|
|
181
|
+
refuse(`未知流程 "${resolved.flow}"(已知流程:${resolved.knownFlows.join('、')})`);
|
|
182
|
+
}
|
|
183
|
+
return resolved.config;
|
|
184
|
+
}
|
|
185
|
+
// --- gather project state (fallback config) ---
|
|
186
|
+
const cwd = process.cwd();
|
|
187
|
+
const configPath = path.join(cwd, '.dsh', 'eng.json');
|
|
188
|
+
let config;
|
|
189
|
+
if (fs.existsSync(configPath)) {
|
|
190
|
+
let raw = '';
|
|
191
|
+
try {
|
|
192
|
+
raw = fs.readFileSync(configPath, 'utf8');
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
raw = '';
|
|
196
|
+
}
|
|
197
|
+
let parsed;
|
|
198
|
+
try {
|
|
199
|
+
parsed = JSON.parse(raw);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
refuse('invalid JSON in .dsh/eng.json: ' + (error instanceof Error ? error.message : String(error)));
|
|
203
|
+
}
|
|
204
|
+
config = loadWorkflow(parsed);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
config = loadWorkflow(undefined);
|
|
208
|
+
}
|
|
209
|
+
// --- the gate ---
|
|
210
|
+
if (!messageFile) {
|
|
211
|
+
process.exit(0);
|
|
212
|
+
}
|
|
213
|
+
const message = readCommitMessage(messageFile);
|
|
214
|
+
const tasks = loadTasks();
|
|
215
|
+
// Locate the task by id from the summary first; only then read its frozen config.
|
|
216
|
+
const taskId = extractTaskId(message);
|
|
217
|
+
let state;
|
|
218
|
+
if (taskId !== undefined) {
|
|
219
|
+
const found = tasks.find(({ task }) => task.id === taskId);
|
|
220
|
+
if (!found) {
|
|
221
|
+
refuse(`提交消息里的任务 id "${taskId}" 找不到对应的任务记录(.dsh/task-<id>.json)`);
|
|
222
|
+
}
|
|
223
|
+
state = found.task;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
state = pickTask(tasks, currentBranch());
|
|
227
|
+
}
|
|
228
|
+
if (!state) {
|
|
229
|
+
refuse('没有找到 dev_task 任务记录(.dsh/task-*.json)——请先 dev_task operation=create 建立任务');
|
|
230
|
+
}
|
|
231
|
+
// Check this task against its frozen snapshot, not the live .dsh/eng.json
|
|
232
|
+
// (which may have drifted mid-task). Fall back to the live config only for
|
|
233
|
+
// legacy records that predate the snapshot field.
|
|
234
|
+
if (state.flow !== undefined && state.flow.config !== undefined) {
|
|
235
|
+
config = state.flow.config;
|
|
236
|
+
}
|
|
237
|
+
const verdict = validateCommitMessage(message, config);
|
|
238
|
+
if (!verdict.ok) {
|
|
239
|
+
refuse(verdict.errors?.[0] ?? 'commit summary does not match the configured pattern');
|
|
240
|
+
}
|
|
241
|
+
const checkpoint = commitCheckpoint(state, config);
|
|
242
|
+
if (!checkpoint.allowed) {
|
|
243
|
+
refuse((checkpoint.reason ?? 'commit checkpoint rejected') + '(当前阶段: ' + state.stage + ')');
|
|
244
|
+
}
|
|
245
|
+
const entries = stagedEntries();
|
|
246
|
+
const scope = checkFileScope(state, entries.map(entry => entry.path), config);
|
|
247
|
+
if (!scope.ok) {
|
|
248
|
+
if (scope.noScope) {
|
|
249
|
+
refuse('任务没有声明文件范围(files 为空)——先用 dev_task operation=scope 声明本任务涉及的文件');
|
|
250
|
+
}
|
|
251
|
+
const described = scope.outside.map(outside => {
|
|
252
|
+
const entry = entries.find(candidate => candidate.path === outside);
|
|
253
|
+
return entry === undefined ? outside : `${entry.status}\t${outside}`;
|
|
254
|
+
});
|
|
255
|
+
refuse('提交了任务范围之外的文件: ' + described.join(', '));
|
|
256
|
+
}
|
|
257
|
+
process.exit(0);
|
|
258
|
+
//# sourceMappingURL=hook.js.map
|
package/lib/hook.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"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"}
|
package/lib/workflows.js
CHANGED
|
@@ -34,7 +34,7 @@ const STANDARD = {
|
|
|
34
34
|
commit: {
|
|
35
35
|
policy: 'task',
|
|
36
36
|
message_pattern: '^【(\\S+)】【(?:TASK|T\\d+)】.+',
|
|
37
|
-
message_hint: '【<
|
|
37
|
+
message_hint: '【<task_id>】【TASK/T1】说明 —— 第一段填本任务 id(如 GREET-001),写结果不写空泛动作',
|
|
38
38
|
checkpoints: ['交付'],
|
|
39
39
|
file_scope: true,
|
|
40
40
|
},
|
|
@@ -62,7 +62,7 @@ const AGILE = {
|
|
|
62
62
|
commit: {
|
|
63
63
|
policy: 'item',
|
|
64
64
|
message_pattern: '^【(\\S+)】【T\\d+】.+',
|
|
65
|
-
message_hint: '【<
|
|
65
|
+
message_hint: '【<task_id>】【T1】说明 —— 第一段填本任务 id',
|
|
66
66
|
checkpoints: ['交付'],
|
|
67
67
|
file_scope: true,
|
|
68
68
|
},
|
package/lib/workflows.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../src/workflows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAwBH,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAA0B;IACjD,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,uCAAuC,EAAE;IACvF,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,2BAA2B,EAAE;IACxE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE;CACnE,CAAA;AAED,4DAA4D;AAC5D,MAAM,QAAQ,GAAmB;IAC/B,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;IAChD,WAAW,EAAE,MAAM;IACnB,WAAW,EAAE;QACX,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,0BAA0B,EAAE,mBAAmB,CAAC,EAAE;QACvF,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,uBAAuB,EAAE,mBAAmB,CAAC,EAAE;QAClF,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;QAClD,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;QAClD,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAAE;KAC7E;IACD,SAAS,EAAE;QACT,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE;QAC5F,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE;QACpF,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE;KAChF;IACD,MAAM,EAAE;QACN,MAAM,EAAE,MAAM;QACd,eAAe,EAAE,6BAA6B;QAC9C,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../src/workflows.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@godv61/dsh-task-engine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
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",
|
|
@@ -31,7 +31,8 @@
|
|
|
31
31
|
"rules/**",
|
|
32
32
|
"preset/**",
|
|
33
33
|
"docs/**",
|
|
34
|
-
"README.md"
|
|
34
|
+
"README.md",
|
|
35
|
+
".p0-test.mjs"
|
|
35
36
|
],
|
|
36
37
|
"license": "MIT",
|
|
37
38
|
"publishConfig": {
|
|
@@ -50,7 +51,7 @@
|
|
|
50
51
|
}
|
|
51
52
|
},
|
|
52
53
|
"scripts": {
|
|
53
|
-
"build": "tsc -p tsconfig.json && node build-client.mjs",
|
|
54
|
+
"build": "tsc -p tsconfig.json && node build-client.mjs && node build-hook.mjs",
|
|
54
55
|
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.client.json --noEmit",
|
|
55
56
|
"test": "node .p0-test.mjs",
|
|
56
57
|
"prepare": "npm run build"
|
|
@@ -7,7 +7,7 @@ description: 交付验证节点:执行目标测试、编译与契约检查,
|
|
|
7
7
|
|
|
8
8
|
1. `dev_task`(operation=status)读风险等级与验收条件。
|
|
9
9
|
2. 执行聚焦验证:目标测试、受影响模块编译、契约检查与必要人工步骤,不默认叠加 clean/package 全家桶。
|
|
10
|
-
3. 结果用 `dev_task`(operation=verify
|
|
10
|
+
3. 结果用 `dev_task`(operation=verify)记录:`high_risk` 必须传 `command`(真实验证命令,由引擎运行并把退出码当客观结论,不得自报 passed);常规风险可用 `passed` + `evidence` 文本。
|
|
11
11
|
4. 环境受阻时如实记"未编译/未联调";high_risk 核心行为无法验证时不得通过。
|
|
12
12
|
|
|
13
13
|
验证失败不得 advance。
|