@godv61/dsh-task-engine 0.23.6 → 0.23.8
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/.preset-test.mjs +102 -13
- package/README.md +6 -5
- package/docs/CHANGELOG.md +23 -3
- package/docs/README.md +41 -29
- package/docs/configuration.md +1 -1
- package/docs/development.md +3 -3
- package/docs/faq.md +8 -8
- package/docs/getting-started.md +3 -1
- package/docs/listing/godv61__dsh-task-engine.yml +6 -6
- package/docs/listing/submission.md +84 -9
- package/docs/manual.html +2 -2
- package/docs/{release-0.23.0.md → releases/0.23.0.md} +3 -3
- package/docs/{release-0.23.1.md → releases/0.23.1.md} +2 -2
- package/docs/{release-0.23.2.md → releases/0.23.2.md} +3 -3
- package/docs/roadmap.md +34 -33
- package/docs/testing/0.23.0//346/265/213/350/257/225/346/212/245/345/221/212.md +1 -1
- package/docs/testing/0.23.1//346/265/213/350/257/225/346/212/245/345/221/212.md +1 -1
- package/docs/testing/0.23.2//346/265/213/350/257/225/346/212/245/345/221/212.md +1 -1
- package/lib/seed-preset.d.ts +61 -3
- package/lib/seed-preset.js +63 -13
- package/lib/seed-preset.js.map +1 -1
- package/package.json +5 -5
package/.preset-test.mjs
CHANGED
|
@@ -20,37 +20,50 @@ import { mkdtempSync, readFileSync, rmSync, writeFileSync, mkdirSync, existsSync
|
|
|
20
20
|
import { tmpdir } from 'node:os'
|
|
21
21
|
import { join, resolve, sep } from 'node:path'
|
|
22
22
|
import { test } from 'node:test'
|
|
23
|
-
import { derivedEngComposition, wasSeeded } from './lib/seed-preset.js'
|
|
23
|
+
import { derivedEngComposition, wasSeeded, applyPersona, personaFieldOf } from './lib/seed-preset.js'
|
|
24
24
|
|
|
25
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* The live derivation resolves `@deepseek-ai/dsh-agent-presets`, a PEER the
|
|
27
|
+
* running harness provides. In a consumer's install it may be absent or a
|
|
28
|
+
* different version, so the assertions that read a real `standard` skip when it
|
|
29
|
+
* is unavailable rather than failing �?the fixture-driven cases below cover the
|
|
30
|
+
* logic itself and always run.
|
|
31
|
+
*/
|
|
26
32
|
const derived = derivedEngComposition()
|
|
33
|
+
const liveSource = derived !== undefined
|
|
34
|
+
const live = { skip: liveSource ? false : 'no resolvable @deepseek-ai/dsh-agent-presets in this install' }
|
|
27
35
|
|
|
28
|
-
test('the derivation reads a readable standard composition', () => {
|
|
29
|
-
assert.ok(derived !== undefined, 'standard must be resolvable
|
|
36
|
+
test('the derivation reads a readable standard composition', live, () => {
|
|
37
|
+
assert.ok(derived !== undefined, 'standard must be resolvable when a peer provides it')
|
|
30
38
|
assert.ok(derived.text.length > 0, 'the derived composition must not be empty')
|
|
31
39
|
})
|
|
32
40
|
|
|
33
|
-
test('the engineering persona replaces the shipped one', () => {
|
|
41
|
+
test('the engineering persona replaces the shipped one', live, () => {
|
|
34
42
|
assert.equal(derived.personaApplied, true, 'the persona row must be found and rewritten')
|
|
35
43
|
assert.match(derived.text, /engineering-delivery coding agent/u, 'the persona body must be the engineering one')
|
|
36
|
-
|
|
44
|
+
// The shipped prose must be gone, in whichever field the source used.
|
|
45
|
+
assert.doesNotMatch(derived.text, /You are a coding agent powered by the \{\{model\}\} model/u,
|
|
46
|
+
'the shipped persona prose must be replaced, not merely shadowed')
|
|
37
47
|
})
|
|
38
48
|
|
|
39
|
-
test('the persona row
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
//
|
|
49
|
+
test('the derived persona row is well formed and never sets complete', live, () => {
|
|
50
|
+
// Which field is correct depends on the running harness, so assert the SHAPE
|
|
51
|
+
// (a block scalar under `config:`) rather than one field name �?the field
|
|
52
|
+
// itself is pinned by the two fixtures below.
|
|
53
|
+
assert.match(derived.text, /- id: persona\n {2}name: '@deepseek-ai\/dsh-persona'\n {2}config:\n(?: {4}suffix: .*\n)? {4}(?:text|prefix): [|>]-/u,
|
|
54
|
+
'the persona row must carry a block scalar under config')
|
|
55
|
+
// `complete: true` would make this prose the ENTIRE system prompt and
|
|
43
56
|
// suppress every other section, silently gutting the agent.
|
|
44
57
|
assert.doesNotMatch(derived.text, /complete: true/u, 'complete must not be set')
|
|
45
58
|
})
|
|
46
59
|
|
|
47
|
-
test('the agent row is appended exactly once', () => {
|
|
60
|
+
test('the agent row is appended exactly once', live, () => {
|
|
48
61
|
const matches = derived.text.match(/id: task-engine-agent/gu) ?? []
|
|
49
62
|
assert.equal(matches.length, 1, 'task-engine-agent must appear once')
|
|
50
63
|
assert.match(derived.text, /name: '@godv61\/dsh-task-engine\/agent'/u, 'the row must name the agent entry')
|
|
51
64
|
})
|
|
52
65
|
|
|
53
|
-
test('every top-level row of standard survives the derivation', () => {
|
|
66
|
+
test('every top-level row of standard survives the derivation', live, () => {
|
|
54
67
|
// The point of deriving rather than hand-writing: the preset must inherit the
|
|
55
68
|
// harness's whole tool roster, not a remembered subset of it.
|
|
56
69
|
const ids = (text) => (text.match(/^- id: (\S+)$/gmu) ?? []).map(line => line.replace(/^- id: /u, ''))
|
|
@@ -65,8 +78,84 @@ test('a composition carrying the agent row is recognised as seeded', () => {
|
|
|
65
78
|
assert.equal(wasSeeded('- id: persona\n name: y\n'), false, 'a hand-authored composition is not ours')
|
|
66
79
|
})
|
|
67
80
|
|
|
68
|
-
test('re-deriving is stable: the same standard yields the same text', () => {
|
|
81
|
+
test('re-deriving is stable: the same standard yields the same text', live, () => {
|
|
69
82
|
// Idempotence is what lets the seed run on every boot without rewriting.
|
|
70
83
|
const again = derivedEngComposition()
|
|
71
84
|
assert.equal(again.text, derived.text, 'two derivations of one source must agree')
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
// The persona plugin renamed `text` to `prefix`/`suffix` in DSH commit 40792330c0
|
|
88
|
+
// (2026-09-06, first shipped in dsh-v0.1.3-alpha.2). The two schemas are mutually
|
|
89
|
+
// exclusive: a preset written with `prefix` is rejected by an older persona
|
|
90
|
+
// plugin with "$.text missing required value", and vice versa. The seed must
|
|
91
|
+
// therefore follow whichever field the SOURCE composition uses, which is what
|
|
92
|
+
// these two fixtures pin.
|
|
93
|
+
const PERSONA_FIXTURE_LEGACY = [
|
|
94
|
+
'- id: persona',
|
|
95
|
+
" name: '@deepseek-ai/dsh-persona'",
|
|
96
|
+
' config:',
|
|
97
|
+
' text: >-',
|
|
98
|
+
' You are a coding agent powered by the {{model}} model.',
|
|
99
|
+
'',
|
|
100
|
+
'- id: agent-instructions',
|
|
101
|
+
" name: '@deepseek-ai/dsh-agent-instructions'",
|
|
102
|
+
'',
|
|
103
|
+
].join('\n')
|
|
104
|
+
|
|
105
|
+
const PERSONA_FIXTURE_MODERN = [
|
|
106
|
+
'- id: persona',
|
|
107
|
+
" name: '@deepseek-ai/dsh-persona'",
|
|
108
|
+
' config:',
|
|
109
|
+
' suffix: Your working directory is {{cwd}}.',
|
|
110
|
+
' prefix: >-',
|
|
111
|
+
' You are a coding agent powered by the {{model}} model.',
|
|
112
|
+
'',
|
|
113
|
+
'- id: agent-instructions',
|
|
114
|
+
" name: '@deepseek-ai/dsh-agent-instructions'",
|
|
115
|
+
'',
|
|
116
|
+
].join('\n')
|
|
117
|
+
|
|
118
|
+
/** Read the scalar keys of a persona row's `config:` mapping. */
|
|
119
|
+
function personaConfig(text) {
|
|
120
|
+
const lines = text.split('\n')
|
|
121
|
+
const start = lines.findIndex(line => line.trimEnd() === '- id: persona')
|
|
122
|
+
assert.ok(start >= 0, 'the fixture must carry a persona row')
|
|
123
|
+
let end = start + 1
|
|
124
|
+
while (end < lines.length && !/^- /u.test(lines[end] ?? '')) end++
|
|
125
|
+
const config = {}
|
|
126
|
+
for (const line of lines.slice(start, end)) {
|
|
127
|
+
const match = /^ {4}([a-z]+):(.*)$/u.exec(line)
|
|
128
|
+
if (match !== null) config[match[1]] = match[2].trim()
|
|
129
|
+
}
|
|
130
|
+
return config
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
test('the persona field follows the source schema, both generations', () => {
|
|
134
|
+
assert.equal(personaFieldOf(PERSONA_FIXTURE_LEGACY), 'text', 'a text-based source is detected')
|
|
135
|
+
assert.equal(personaFieldOf(PERSONA_FIXTURE_MODERN), 'prefix', 'a prefix-based source is detected')
|
|
136
|
+
|
|
137
|
+
const legacy = applyPersona(PERSONA_FIXTURE_LEGACY, 'ENGINEER')
|
|
138
|
+
assert.equal(legacy.applied, true, 'the legacy persona row is rewritten')
|
|
139
|
+
const legacyConfig = personaConfig(legacy.text)
|
|
140
|
+
assert.equal(legacyConfig.text, '>-', 'the legacy shape keeps `text`, never `prefix`')
|
|
141
|
+
assert.equal(legacyConfig.prefix, undefined, 'no prefix field is introduced for an old harness')
|
|
142
|
+
|
|
143
|
+
const modern = applyPersona(PERSONA_FIXTURE_MODERN, 'ENGINEER')
|
|
144
|
+
const modernConfig = personaConfig(modern.text)
|
|
145
|
+
assert.equal(modernConfig.prefix, '>-', 'the modern shape uses `prefix`')
|
|
146
|
+
assert.equal(modernConfig.text, undefined, 'no text field is introduced for a new harness')
|
|
147
|
+
assert.equal(modernConfig.suffix, 'Your working directory is {{cwd}}.', 'the shipped suffix is carried over')
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
test('the rewritten persona row keeps valid indentation for both shapes', () => {
|
|
151
|
+
// A mis-indented `suffix:` under `config:` silently changes the YAML shape,
|
|
152
|
+
// so assert the exact lines rather than trusting the mapping parse alone.
|
|
153
|
+
const modern = applyPersona(PERSONA_FIXTURE_MODERN, 'ENGINEER').text
|
|
154
|
+
assert.match(modern, /- id: persona\n {2}name: '@deepseek-ai\/dsh-persona'\n {2}config:\n {4}suffix: /u,
|
|
155
|
+
'suffix sits at four spaces under config')
|
|
156
|
+
assert.match(modern, /\n {4}prefix: [|>]-\n {6}ENGINEER\n/u, 'prefix and its body are indented correctly')
|
|
157
|
+
|
|
158
|
+
const legacy = applyPersona(PERSONA_FIXTURE_LEGACY, 'ENGINEER').text
|
|
159
|
+
assert.match(legacy, /- id: persona\n {2}name: '@deepseek-ai\/dsh-persona'\n {2}config:\n {4}text: [|>]-\n {6}ENGINEER\n/u,
|
|
160
|
+
'the legacy row is indented correctly')
|
|
72
161
|
})
|
package/README.md
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
<p align="center">
|
|
11
11
|
<a href="https://www.npmjs.com/package/@godv61/dsh-task-engine"><img src="https://img.shields.io/npm/v/%40godv61%2Fdsh-task-engine?style=flat-square&color=238636" alt="npm version" /></a>
|
|
12
12
|
<a href="https://github.com/godv61/dsh-task-engine/actions/workflows/verify.yml"><img src="https://github.com/godv61/dsh-task-engine/actions/workflows/verify.yml/badge.svg" alt="Package verification CI" /></a>
|
|
13
|
+
<a href="https://awesome-dsh-plugin.com"><img src="https://awesome-dsh-plugin.com/badge.svg" alt="Awesome DSH Plugin" /></a>
|
|
13
14
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-64748b?style=flat-square" alt="MIT license" /></a>
|
|
14
15
|
</p>
|
|
15
16
|
|
|
@@ -65,7 +66,7 @@ dsh plugin --profile web add @godv61/dsh-task-engine
|
|
|
65
66
|
| **敏捷轻量** `agile` | 需求 → 开发 → 交付 → 审查 | 希望保留任务记录、减少阶段和产物的迭代。 |
|
|
66
67
|
| **纯代码** `minimal` | 开发 → 交付 | 已明确做法的小改动。 |
|
|
67
68
|
|
|
68
|
-
|
|
69
|
+
当前版本的阶段顺序和检查条件由预设固定,默认技能/规则绑定只能追加。**可视化自定义流程不在计划内**——它把流程设计的负担转嫁给使用者,而三个内置流程已覆盖个人项目的常见需要,详见[功能规划](docs/roadmap.md)。
|
|
69
70
|
|
|
70
71
|
## 把自己的技能和规则带进来
|
|
71
72
|
|
|
@@ -90,7 +91,7 @@ dsh plugin --profile web add @godv61/dsh-task-engine
|
|
|
90
91
|
| 完整操作说明 | [HTML 手册](docs/manual.html)(下载后在浏览器打开) |
|
|
91
92
|
| 当前能力与常见问题 | [常见问题](docs/faq.md) |
|
|
92
93
|
| 本地开发与验证 | [开发指南](docs/development.md) |
|
|
93
|
-
| 真实项目回归修复 | [0.23.1 发布说明](docs/
|
|
94
|
+
| 真实项目回归修复 | [0.23.1 发布说明](docs/releases/0.23.1.md) · [回归迭代说明](docs/workflow-regression.md) |
|
|
94
95
|
| 版本变化与验证记录 | [更新日志](docs/CHANGELOG.md) · [0.23.1 测试说明](docs/testing/0.23.1/测试报告.md) |
|
|
95
96
|
|
|
96
97
|
## 能力说明
|
|
@@ -101,9 +102,9 @@ dsh plugin --profile web add @godv61/dsh-task-engine
|
|
|
101
102
|
|
|
102
103
|
小修正允许主代理处理,仍须审核和验证。遇到沙箱权限拒绝应使用宿主审批或报告阻塞,不能靠反复切换命令规避。
|
|
103
104
|
|
|
104
|
-
状态查询会列出过期验证和附加技能回执;`commit.allowed` 同时检查这些阻塞,文件变化后先补验证再申请提交。
|
|
105
|
-
|
|
106
|
-
验证命令的单次权限重试先审批后执行,不改变会话权限;操作方式见[验证权限说明](docs/faq.md#验证命令被沙箱阻止怎么办)。
|
|
105
|
+
状态查询会列出过期验证和附加技能回执;`commit.allowed` 同时检查这些阻塞,文件变化后先补验证再申请提交。
|
|
106
|
+
|
|
107
|
+
验证命令的单次权限重试先审批后执行,不改变会话权限;操作方式见[验证权限说明](docs/faq.md#验证命令被沙箱阻止怎么办)。
|
|
107
108
|
|
|
108
109
|
记录需求、方案或评审前,模型可从 `artifact_requirements` 获取当前阶段允许的字段和缺项,避免猜测字段名。
|
|
109
110
|
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,26 @@
|
|
|
4
4
|
|
|
5
5
|
按版本查阅功能变化。当前使用方式以[项目首页](../README.md)和使用指南为准;历史条目中的实现方式、限制与测试数量可能已被后续版本替代。
|
|
6
6
|
|
|
7
|
+
## 0.23.8
|
|
8
|
+
|
|
9
|
+
- **更正文档中与代码不符的陈述**,不改动任何运行时行为:
|
|
10
|
+
- 可视化自定义流程在五个位置(`roadmap.md`、`faq.md`、`configuration.md`、项目首页、HTML 手册)被描述为“规划中/尚未发布”,但它**不在计划内**——它把流程设计的负担转嫁给使用者,而三个内置流程已覆盖个人项目的常见需要;`main` 上不存在该能力的实现。现改为明确说明不实现的理由。
|
|
11
|
+
- `development.md` 曾称“已存在的 eng 预设不会被自动覆盖”。该行为自 0.23.6 起已改变:预设**每次启动都从运行中 harness 的 `standard` 重新派生**,判断依据是文件里有没有本插件的 agent 行——插件生成的会被更新,手工编辑过的原样保留。`enable` 脚本仍直接拒绝覆盖,这是旧表述显得合理的原因。
|
|
12
|
+
- `getting-started.md` 的安装命令写死 `@0.23.0`(落后七个版本),改为安装 `latest` 并说明如何主动固定版本。
|
|
13
|
+
- 描述**当前**行为的 FAQ 条目以引入版本号开头(如“0.23.1 …”),读起来像历史而非当前行为,已去掉版本前缀。
|
|
14
|
+
- `roadmap.md` 的“当前 npm 版本为 0.23.0”与 `manual.html` 页脚的“0.23.2-rc.1”改为指向更新日志。
|
|
15
|
+
- 文档目录重组:发布说明移入 `docs/releases/`,文档索引拆为“开始使用 / 参与开发 / 历史记录”三段。**没有删除任何文件**——旧的发布说明与测试报告是被更新日志引用的逐版本快照,且带有各自的范围声明(例如 0.23.1 报告写明“不等同业务项目端到端验收”),保留它们才能追溯当时的验证边界。
|
|
16
|
+
- 更正 0.23.7 条目的一处描述错误:文中说旧格式产出 `text: |-`,实际**沿用源预设的 `>-`(折叠标量)**。所有随包发布的 `standard` 都使用 `>-`,而 0.23.7 的实现是照写源的标量风格——`>-` 会把正文内的单个换行折叠为空格,与 `|-` 语义不同,因此这条描述当时会误导读者。
|
|
17
|
+
|
|
18
|
+
> 本版仅文档变更,`src/`、`package.json` 与测试均未改动;功能行为与 0.23.7 完全一致。
|
|
19
|
+
|
|
20
|
+
## 0.23.7
|
|
21
|
+
|
|
22
|
+
- **修复 persona 字段在旧版 DSH 上不兼容**。`@deepseek-ai/dsh-persona` 在提交 `40792330c0`(2026-09-06,首次随 `dsh-v0.1.3-alpha.2` 发布)把配置字段从 `text` 改名为 `prefix`/`suffix`,两个 schema 互斥:写 `prefix` 的预设会被旧版 persona 插件以 `$.text missing required value` 整份拒绝,反之亦然。0.23.6 的派生逻辑**硬编码了 `prefix`**,因此在 `dsh-v0.1.3-alpha.1` 及更早的 harness 上,`eng` 预设挂载失败、新会话无法创建。现在改为**读取源预设自己使用的字段**再照写——`standard` 就是运行中 harness 的格式权威。已用两个版本的真实 `standard` 验证:`v0.1.3-alpha.1` 产出 `text: |-`,`v0.1.6-alpha.2` 产出 `suffix` + `prefix: |-`,两者 YAML 均解析通过。
|
|
23
|
+
- 顺带修复派生时的缩进:`suffix:` 此前被写到错误的层级,使新格式的 persona 段落 YAML 结构改变。新格式下同时保留源预设的 `suffix`(它声明工作目录),旧格式则不引入该字段。
|
|
24
|
+
- peer 范围补上 `|| ^0.1.7-alpha.1`。DSH `0.1.7-alpha.1` 修复了 0.1.6 中导致所有工具调用失败的问题(`ctx.tools[TOOL_RUNTIME_SCHEDULER]` 为 `undefined`,社区在讨论 #7035 / #7194 报告,官方确认修复);peer 范围需要跟着覆盖该版本。
|
|
25
|
+
- `.preset-test.mjs` 增至 9 项:新增两组 persona fixture,分别断言 `text` 与 `prefix` 两种 schema 下的字段选择、`suffix` 保留与缩进正确性。已反向验证:把字段选择改回硬编码 `prefix`,两项断言立即失败。
|
|
26
|
+
|
|
7
27
|
## 0.23.6
|
|
8
28
|
|
|
9
29
|
- **修复「工程化开发引擎」预设加载失败**。`seed-preset.ts` 用 `@deepseek-ai/dsh-agent-presets` 导出的 `SHIPPED_PRESET_ROOT` 常量定位源预设,而该常量是 `fileURLToPath(new URL('../presets/', import.meta.url))`——它锁在**插件自己依赖树**里的那份包上,可能和**正在运行的** DSH 不同版本。于是派生出的预设携带运行中 harness 早已替换掉的行:DSH 2026-09-13 把 `workflow-worker-thread` 换成了 `workflow-ptc`,而该包同时退出了 `apps/cli` 的依赖,预设因此报 `row "workflow-worker-thread" names a plugin that cannot be resolved`,整个预设显示「加载失败」,任何新会话都无法启用任务流程。现在改为在**调用时**用 `createRequire` 从插件自身位置解析,跟随宿主的安装图。
|
|
@@ -34,14 +54,14 @@
|
|
|
34
54
|
- 修复 verify / skill_result 先执行命令后审批、批准权限未传入 shell 的问题;拒绝、取消或审批不可用时不执行命令。
|
|
35
55
|
- 审批显示实际验证命令;批准模式只用于本次命令和回执写入,不改变会话策略,也不重复申请保存回执的审批。
|
|
36
56
|
- 修正提交规则与手册中的模块名示例,第一段使用当前任务 id,第二段使用 status 的 commit.label;自定义格式以任务冻结流程为准。
|
|
37
|
-
- dshtest 首轮在 0.23.1 复现权限问题;修复后连续两轮完整开发、验证、审核、本地提交及归档回退通过。专项覆盖审批拒绝、原命令批准执行、证据过期和单次权限恢复,详见[发布说明](
|
|
57
|
+
- dshtest 首轮在 0.23.1 复现权限问题;修复后连续两轮完整开发、验证、审核、本地提交及归档回退通过。专项覆盖审批拒绝、原命令批准执行、证据过期和单次权限恢复,详见[发布说明](releases/0.23.2.md)与[测试报告](testing/0.23.2/测试报告.md)。
|
|
38
58
|
|
|
39
59
|
## 0.23.1
|
|
40
60
|
|
|
41
61
|
- 汇总本轮候选版的资源来源、Windows 技能加载、实施审核保留、派工状态、真实技能/验证/提交回执及状态一致性修复。
|
|
42
62
|
- 新增 status.artifact_requirements,提前披露当前阶段的记录字段和缺项;未知字段拒绝时给出恢复指引,整次写入保持不变。
|
|
43
63
|
- 需求技能按预设实际字段记录,修正敏捷流程误用标准字段的问题;小修正、权限恢复、契约核对和测试证据说明同步更新。
|
|
44
|
-
- 旧任务保留冻结流程,新任务使用标准 v2 和执行证据门禁。实际能力及未覆盖边界见[发布说明](
|
|
64
|
+
- 旧任务保留冻结流程,新任务使用标准 v2 和执行证据门禁。实际能力及未覆盖边界见[发布说明](releases/0.23.1.md)与[测试说明](testing/0.23.1/测试报告.md)。
|
|
45
65
|
|
|
46
66
|
以下 rc 条目为本轮迭代历史,已汇总至 0.23.1;“尚未发布”描述的是当时状态。
|
|
47
67
|
|
|
@@ -86,7 +106,7 @@
|
|
|
86
106
|
- 加强导入校验与失败清理,修复任务并发写入的版本读取次序。
|
|
87
107
|
- 优先使用 Harness 已注册的工作区,补充发布包行为测试和 Node 22/24 CI。
|
|
88
108
|
|
|
89
|
-
[完整发布说明](
|
|
109
|
+
[完整发布说明](releases/0.23.0.md) · [测试报告](testing/0.23.0/测试报告.md)
|
|
90
110
|
|
|
91
111
|
## 早期版本
|
|
92
112
|
|
package/docs/README.md
CHANGED
|
@@ -1,29 +1,41 @@
|
|
|
1
|
-
# 使用文档
|
|
2
|
-
|
|
3
|
-
[← 返回项目首页](../README.md)
|
|
4
|
-
|
|
5
|
-
DSH Task Engine 是 DeepSeek Harness 的个人工程流程工作台。先完成安装,再按需要配置流程、技能和规则。
|
|
6
|
-
|
|
7
|
-
## 开始使用
|
|
8
|
-
|
|
9
|
-
| 文档 | 内容 |
|
|
10
|
-
| :--- | :--- |
|
|
11
|
-
| [安装与启用](getting-started.md) | 安装到 Web profile、启用工程会话、确认安装结果。 |
|
|
12
|
-
| [流程配置](configuration.md) | 三个内置流程、阶段绑定、配置文件与任务快照。 |
|
|
13
|
-
| [技能与规则安装](resource-install.md) | 系统文件选择、安装预览、项目/个人范围和格式要求。 |
|
|
14
|
-
| [常见问题](faq.md) | 预设区别、资源使用、项目目录与能力限制。 |
|
|
15
|
-
| [完整 HTML 手册](manual.html) | 详细操作、工具说明与任务走查;下载后在浏览器中打开。 |
|
|
16
|
-
|
|
17
|
-
## 参与开发
|
|
18
|
-
|
|
19
|
-
| 文档 | 内容 |
|
|
20
|
-
| :--- | :--- |
|
|
21
|
-
| [开发指南](development.md) | 构建、测试、包结构与可选 host 接入。 |
|
|
22
|
-
| [功能规划](roadmap.md) |
|
|
23
|
-
| [更新日志](CHANGELOG.md) |
|
|
24
|
-
| [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
1
|
+
# 使用文档
|
|
2
|
+
|
|
3
|
+
[← 返回项目首页](../README.md)
|
|
4
|
+
|
|
5
|
+
DSH Task Engine 是 DeepSeek Harness 的个人工程流程工作台。先完成安装,再按需要配置流程、技能和规则。
|
|
6
|
+
|
|
7
|
+
## 开始使用
|
|
8
|
+
|
|
9
|
+
| 文档 | 内容 |
|
|
10
|
+
| :--- | :--- |
|
|
11
|
+
| [安装与启用](getting-started.md) | 安装到 Web profile、启用工程会话、确认安装结果。 |
|
|
12
|
+
| [流程配置](configuration.md) | 三个内置流程、阶段绑定、配置文件与任务快照。 |
|
|
13
|
+
| [技能与规则安装](resource-install.md) | 系统文件选择、安装预览、项目/个人范围和格式要求。 |
|
|
14
|
+
| [常见问题](faq.md) | 预设区别、资源使用、项目目录与能力限制。 |
|
|
15
|
+
| [完整 HTML 手册](manual.html) | 详细操作、工具说明与任务走查;下载后在浏览器中打开。 |
|
|
16
|
+
|
|
17
|
+
## 参与开发
|
|
18
|
+
|
|
19
|
+
| 文档 | 内容 |
|
|
20
|
+
| :--- | :--- |
|
|
21
|
+
| [开发指南](development.md) | 构建、测试、包结构与可选 host 接入。 |
|
|
22
|
+
| [功能规划](roadmap.md) | 已发布能力与规划中的范围。 |
|
|
23
|
+
| [更新日志](CHANGELOG.md) | 按版本查阅变化;**这是版本信息的唯一权威来源**。 |
|
|
24
|
+
| [插件收录材料](listing/submission.md) | Awesome DSH Plugin 的提交条件、条目内容与收录结果。 |
|
|
25
|
+
|
|
26
|
+
## 历史记录
|
|
27
|
+
|
|
28
|
+
以下文档是**各自版本当时的快照**,用于追溯当时的验证范围与已知边界。其中的测试数量、
|
|
29
|
+
实现细节和界面描述可能已被后续版本替代——当前行为以「开始使用」和[更新日志](CHANGELOG.md)为准。
|
|
30
|
+
|
|
31
|
+
| 文档 | 内容 |
|
|
32
|
+
| :--- | :--- |
|
|
33
|
+
| [0.23.2 验证记录](testing/0.23.2/测试报告.md) | 两轮完整开发、归档回退与门禁专项的实际结果。 |
|
|
34
|
+
| [0.23.2 发布说明](releases/0.23.2.md) | 验证命令单次审批修复、提交指引与管控边界。 |
|
|
35
|
+
| [0.23.1 验证记录](testing/0.23.1/测试报告.md) | 自动化、安装包与实机证据的适用范围。 |
|
|
36
|
+
| [0.23.1 发布说明](releases/0.23.1.md) | 真实项目发现的问题、修复及能力边界。 |
|
|
37
|
+
| [0.23.1 回归迭代说明](workflow-regression.md) | 真实项目逐轮问题的处理记录。 |
|
|
38
|
+
| [0.23.0 验证记录](testing/0.23.0/测试报告.md) | 资源导入、工作台交互与包入口的验证。 |
|
|
39
|
+
| [0.23.0 发布说明](releases/0.23.0.md) | 早期安装交互及界面调整。 |
|
|
40
|
+
|
|
41
|
+
> 0.23.3 起的版本变化全部记录在[更新日志](CHANGELOG.md)中,不再单独出具发布说明。
|
package/docs/configuration.md
CHANGED
package/docs/development.md
CHANGED
|
@@ -18,7 +18,7 @@ npm run verify:package
|
|
|
18
18
|
|
|
19
19
|
`build` 生成 host、浏览器客户端与提交钩子;`typecheck` 检查 host 和 client 两个编译面。`verify:package` 将 tarball 安装到干净临时项目,检查包入口、客户端注册、包内测试和 CLI 语法。
|
|
20
20
|
|
|
21
|
-
CI 在 Windows 的 Node 22/24
|
|
21
|
+
CI 在 Windows 的 Node 22/24 上运行。每次功能修改选择相关验证;文档排版调整只需要文档、链接和渲染检查。测试数量随版本变化,当前值以本地 `npm test` 与 `npm run verify:package` 的输出为准,不在此处固定。
|
|
22
22
|
|
|
23
23
|
## 代码导航
|
|
24
24
|
|
|
@@ -44,10 +44,10 @@ Host 入口挂载工作台控制器,并在 eng 预设不存在时生成“工
|
|
|
44
44
|
name: '@godv61/dsh-task-engine/agent'
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
eng 预设由插件在每次启动时**从当前 Harness 的 `standard` 预设重新派生**,因此 Harness 升级后预设会跟着更新。判断依据是文件里是否带有本插件写入的 agent 行:**插件自己生成的会被更新,手工编辑过的原样保留**。配套的 `enable` 脚本行为更保守——目标已存在时直接拒绝,不覆盖。
|
|
48
48
|
|
|
49
49
|
## 可选 host 接入
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
Host 入口优先使用 Harness 的 `workspaceRegistry.resolveByPath` 获取已登记工作区。旧 host 可以通过插件导出的 `registerWorkspace` 和 `enableStrictWorkspaces` 配置注册目录及严格模式,接口定义见 [src/controller.ts](../src/controller.ts)。注册范围不等于会话身份鉴权;个人本机使用不要求为此改造 Harness。
|
|
52
52
|
|
|
53
53
|
发布前保持 README、使用手册和实际代码一致;不要将规划中的功能描述为已经可用。
|
package/docs/faq.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
## 能自己增删流程阶段吗?
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
不支持,且**不打算支持**。可以选择三个内置流程(`standard`、`agile`、`minimal`)并为阶段追加资源,但阶段与条件本身固定。让使用者自行设计流程会把流程设计的负担转嫁给使用者,而内置流程已覆盖个人项目的常见需要。详见[功能规划](roadmap.md)。
|
|
16
16
|
|
|
17
17
|
## 安装资源后就会自动使用吗?
|
|
18
18
|
|
|
@@ -24,17 +24,17 @@
|
|
|
24
24
|
|
|
25
25
|
## 能移除默认技能、覆盖内置规则吗?
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
预设绑定只能追加,内置资源只读且同名优先。需要自建资源时使用新名称;同名资源会同时保留在各自来源,绑定选择按名称去重。
|
|
28
28
|
|
|
29
29
|
## 工具显示验证或审核通过,能完全相信吗?
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
新建任务的验证需要真实命令回执,要求退出码为 0 且未超时、中止或被沙箱拒绝;代码修改后需重验。附加技能记录加载、命令和场景证据;审核和实施项结论仍由模型记录。命令覆盖是否充分、审核是否准确仍需判断,不能把一个成功退出码当作全部需求已验证。
|
|
32
32
|
|
|
33
|
-
## 验证命令被沙箱阻止怎么办?
|
|
34
|
-
|
|
35
|
-
`verify` 和 `skill_result` 默认使用会话沙箱策略。原命令因权限受阻时,可携带 `sandbox_permissions: "danger-full-access"` 与 `justification` 申请单次重试;审批显示实际命令,批准后才执行,不改变后续调用的会话权限。拒绝、取消或缺少审批服务均不运行命令、不写入回执。不要用另一条简单命令替代原验收。详见验证技能说明。
|
|
36
|
-
|
|
37
|
-
## 本地提交钩子有什么作用?
|
|
33
|
+
## 验证命令被沙箱阻止怎么办?
|
|
34
|
+
|
|
35
|
+
`verify` 和 `skill_result` 默认使用会话沙箱策略。原命令因权限受阻时,可携带 `sandbox_permissions: "danger-full-access"` 与 `justification` 申请单次重试;审批显示实际命令,批准后才执行,不改变后续调用的会话权限。拒绝、取消或缺少审批服务均不运行命令、不写入回执。不要用另一条简单命令替代原验收。详见验证技能说明。
|
|
36
|
+
|
|
37
|
+
## 本地提交钩子有什么作用?
|
|
38
38
|
|
|
39
39
|
它在普通 git commit 时检查任务、阶段、消息和文件范围。`--no-verify`、替换 hooksPath 或直接修改本地数据仍可能绕过检查;项目需要更强的提交约束时,应结合自己的 CI 和人工审核。
|
|
40
40
|
|
package/docs/getting-started.md
CHANGED
|
@@ -15,10 +15,12 @@ dsh plugin --profile web add @godv61/dsh-task-engine
|
|
|
15
15
|
如果你正在 Harness 源码目录开发,使用:
|
|
16
16
|
|
|
17
17
|
```sh
|
|
18
|
-
pnpm dsh plugin --profile web add @godv61/dsh-task-engine
|
|
18
|
+
pnpm dsh plugin --profile web add @godv61/dsh-task-engine
|
|
19
19
|
pnpm dsh web --no-open
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
+
不写版本号会安装 npm 上的 `latest`;需要固定版本时再追加 `@<版本>`。
|
|
23
|
+
|
|
22
24
|
已有 Web 进程时,先关闭该进程再启动,避免端口冲突。通过 `dsh plugin` 安装会将插件加入对应 profile;仅在任意目录执行 `npm install` 不会完成工作台挂载。
|
|
23
25
|
|
|
24
26
|
## 2. 检查安装结果
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
url: https://github.com/godv61/dsh-task-engine
|
|
2
|
-
name: godv61/dsh-task-engine
|
|
3
|
-
category: workflow
|
|
4
|
-
description:
|
|
5
|
-
en: Preset engineering workflows
|
|
6
|
-
zh: 为 DeepSeek Harness
|
|
1
|
+
url: https://github.com/godv61/dsh-task-engine
|
|
2
|
+
name: godv61/dsh-task-engine
|
|
3
|
+
category: workflow
|
|
4
|
+
description:
|
|
5
|
+
en: 'Preset engineering workflows for DeepSeek Harness: a dev_task tool that gates stage transitions, artifacts, verification, review and commit scope, plus a web workbench for installing project or user skills and rules.'
|
|
6
|
+
zh: '为 DeepSeek Harness 提供预设工程流程:dev_task 工具把阶段流转、产物、验证、审核与提交范围做成硬门禁,并带一个安装项目级与个人级技能和规则的工作台。'
|
|
@@ -1,9 +1,84 @@
|
|
|
1
|
-
# 插件收录申请
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
# 插件收录申请
|
|
2
|
+
|
|
3
|
+
**已收录:** [PR #5681](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/5681)
|
|
4
|
+
于 2026-09-22 15:45:57 UTC 被维护者 `fkysly` 合并,**无修改要求**(0 条评审评论)。
|
|
5
|
+
条目已在列表的 `main` 上,中英两个 README 均已生成对应行。
|
|
6
|
+
|
|
7
|
+
提交时 `check`(7m40s)与 `Submission gate` 两项 CI 全部通过。PR 只新增
|
|
8
|
+
`data/plugins/godv61__dsh-task-engine.yml`(+6 行),未触碰生成出来的 README。
|
|
9
|
+
|
|
10
|
+
条目页:[awesome-dsh-plugin.com](https://awesome-dsh-plugin.com)
|
|
11
|
+
|
|
12
|
+
目标:[awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin)。
|
|
13
|
+
|
|
14
|
+
## 提交内容
|
|
15
|
+
|
|
16
|
+
按[贡献指南](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/blob/main/contributing.md),
|
|
17
|
+
PR **只新增一个文件**:`data/plugins/godv61__dsh-task-engine.yml`,内容复制本目录同名 YAML。
|
|
18
|
+
|
|
19
|
+
**标题:** `Add godv61/dsh-task-engine`
|
|
20
|
+
|
|
21
|
+
**分类:** `workflow` —— 插件本身提供工程流程预设与阶段门禁,分类与实际行为一致。
|
|
22
|
+
|
|
23
|
+
> 注意:`data/plugins/` 下的条目文件是数据源,仓库根的两个 README 由脚本生成。
|
|
24
|
+
> **不要手工编辑 README**,也不要往 `data/screenshots.json` 加键(新约定是插件仓库自己放 `screenshots.json`)。
|
|
25
|
+
|
|
26
|
+
## PR 正文
|
|
27
|
+
|
|
28
|
+
> Adds `godv61/dsh-task-engine` under `workflow`.
|
|
29
|
+
>
|
|
30
|
+
> The plugin adds a `dev_task` tool that holds an engineering state machine: three preset flows
|
|
31
|
+
> (`standard`, `agile`, `minimal`) with transitions gated on human confirmation, artifact
|
|
32
|
+
> completeness, implementation items, real verification receipts, and review outcome — plus a
|
|
33
|
+
> commit gate that checks stage, message format and file scope. A web workbench installs project- or
|
|
34
|
+
> user-level skills and rules, binds them to individual stages, and shows the task ledger.
|
|
35
|
+
>
|
|
36
|
+
> Repository includes source, a `dsh.bundle` manifest with `cordis.patch.yml`, user documentation,
|
|
37
|
+
> and a test suite (146 P0 assertions, 52 `node:test` cases including an end-to-end commit-hook
|
|
38
|
+
> suite). Published on npm; `repository` points back at this repo.
|
|
39
|
+
|
|
40
|
+
## 提交前的自查(对照指南逐条)
|
|
41
|
+
|
|
42
|
+
| 指南要求 | 本仓库状态 |
|
|
43
|
+
| :--- | :--- |
|
|
44
|
+
| `package.json` 声明 `dsh.bundle` | ✅ `"bundle": { "patch": "./cordis.patch.yml" }` |
|
|
45
|
+
| 仓库根有 `cordis.patch.yml` | ✅ |
|
|
46
|
+
| 真实可用代码(非占位/纯 README) | ✅ host 与 client 两个面均已实现并有测试 |
|
|
47
|
+
| 仓库创建满 1 天 | ✅ 创建于 2026-09-15 08:10:50 UTC |
|
|
48
|
+
| 已有 `dsh-plugin` topic | ✅ |
|
|
49
|
+
| 活跃维护 | ✅ |
|
|
50
|
+
| `repository` 指回本仓库 | ✅ `git+https://github.com/godv61/dsh-task-engine.git` |
|
|
51
|
+
| npm 包 `repository` 回指同一仓库 | ✅ |
|
|
52
|
+
| 非纯聚合包(自带行为) | ✅ 自带 `dev_task` 工具与工作台 UI |
|
|
53
|
+
| 描述不含 `: `(冒号+空格) | ✅ 已加引号 |
|
|
54
|
+
| 官方包用 `peerDependencies` | ✅ `@deepseek-ai/dsh-*` 均在 peer 中 |
|
|
55
|
+
| peer 范围带显式预发布分支 | ✅ `^0.1.2-rc.1 \|\| ^0.1.3-alpha.1 \|\| ^0.1.6-alpha.2 \|\| ^0.1.7-alpha.1` |
|
|
56
|
+
|
|
57
|
+
**关于 peer 范围**:指南特别警告过「不带显式预发布分支的范围会静默排除 harness 的预发布构建」。
|
|
58
|
+
本插件用的是显式 `||` 分支形式,正是指南推荐写法。
|
|
59
|
+
|
|
60
|
+
## 描述准确性
|
|
61
|
+
|
|
62
|
+
指南说明描述会被**当作对代码的声明并逐句核对**,因此上面那行只写了可验证的事实:
|
|
63
|
+
|
|
64
|
+
| 描述中的说法 | 代码依据 |
|
|
65
|
+
| :--- | :--- |
|
|
66
|
+
| `dev_task` 工具 | `src/dev-task.ts` 的 `defineTool` |
|
|
67
|
+
| 阶段流转门禁 | `src/engine.ts` 的 `assertAdvance` / `legalTargets` |
|
|
68
|
+
| 产物门禁 | guard `artifacts_present` + `ArtifactDef` |
|
|
69
|
+
| 验证门禁 | guard `verified` + 真实命令回执 |
|
|
70
|
+
| 审核门禁 | guard `review_passed` |
|
|
71
|
+
| 提交范围校验 | `checkFileScope` + `hooks/commit-msg` |
|
|
72
|
+
| 三个预设流程 | `FLOW_OPTIONS`:`standard` / `agile` / `minimal` |
|
|
73
|
+
| 工作台安装技能与规则 | `src/client/` 的 `ResourceManager` 等 |
|
|
74
|
+
|
|
75
|
+
**描述里刻意不写具体数字**(如「7 个技能、3 条规则」):这类数字会随版本变化,
|
|
76
|
+
写死反而容易变成不准确声明。
|
|
77
|
+
|
|
78
|
+
## 备注
|
|
79
|
+
|
|
80
|
+
本目录此前一份材料提到「仓库创建满 24 小时」与手工核对 `created_at`。指南现已说明
|
|
81
|
+
**该门槛由 CI 自动检查**,无需在 PR 里论证,故此处不再展开。
|
|
82
|
+
|
|
83
|
+
截图可选:可在本仓库根放 `screenshots.json` 声明,市场会自动读取,无需在本列表仓库提交图片。
|
|
84
|
+
当前未声明,市场会从 README 自动抽取。
|
package/docs/manual.html
CHANGED
|
@@ -193,7 +193,7 @@ pnpm install && pnpm run build && pnpm dsh web</code></pre>
|
|
|
193
193
|
</section>
|
|
194
194
|
|
|
195
195
|
<section id="configure">
|
|
196
|
-
<p
|
|
196
|
+
<p>当前版本支持三个内置流程及追加阶段资源。可视化自定义流程曾列入评估,结论是不实现:它把流程设计的负担转嫁给使用者,而三个内置流程已覆盖个人项目的常见需要。</p>
|
|
197
197
|
<h2>7. 配置流程与挂载</h2>
|
|
198
198
|
<p>侧边栏点「工程流程」打开工作台,五个标签页:<strong>项目初始化 / 流程配置 / 任务 / 技能 skill / 规则 rule</strong>,默认落在「项目初始化」(详见第 8 节)。日常配流程只需在「流程配置」页做两件事:</p>
|
|
199
199
|
<ol>
|
|
@@ -385,7 +385,7 @@ risk_level: high_risk // 涉及鉴权,验证要加证据
|
|
|
385
385
|
<p>状态查询中的 <code>evidence_blockers</code> 列出过期验证和附加技能回执;<code>commit.allowed</code> 同时检查这些阻塞及技能执行义务。<code>legal_next</code> 是流程定义的候选去向,不表示所有门禁已通过。</p>
|
|
386
386
|
<details><summary>记录需求时提示字段不存在怎么办?</summary><div>先读取 <code>status.artifact_requirements</code>,按当前阶段列出的字段填写。标准需求为 <code>scope</code> 和 <code>acceptance_criteria</code>,敏捷流程只有 <code>scope</code>。疑问、假设或待确认取舍写入字段正文,不新增字段名。错误输入整次不保存,修正后再提交;不需要修改流程配置或历史任务记录。</div></details>
|
|
387
387
|
<details><summary>验证命令被沙箱阻止怎么办?</summary><div><code>verify</code> 与 <code>skill_result</code> 默认使用会话权限。原命令被沙箱阻止后,用相同命令和 <code>sandbox_permissions: "danger-full-access"</code>、<code>justification</code> 申请单次重试。审批显示命令,批准后才执行;拒绝、取消或审批不可用时不执行、不写回执。授权只对本次调用生效,不改变会话权限。以本次回执的实际模式和退出码判断结果。</div></details>
|
|
388
|
-
<p class="stamp"
|
|
388
|
+
<p class="stamp">适用于插件 0.23.7 及之后 · 最后更新:2026-09-23</p>
|
|
389
389
|
</section>
|
|
390
390
|
</main>
|
|
391
391
|
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 0.23.0 修改清单与发布说明
|
|
2
2
|
|
|
3
|
-
[← 文档导航](README.md)
|
|
3
|
+
[← 文档导航](../README.md)
|
|
4
4
|
|
|
5
5
|
## 本次实现
|
|
6
6
|
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
|
|
26
26
|
## 后续建议
|
|
27
27
|
|
|
28
|
-
后续优先讨论可视化自定义流程、资源导入反馈和资源维护。详细范围见[功能规划](roadmap.md)。产品定位为个人本机工作台,会话级服务器隔离不列为当前版本必修项。
|
|
28
|
+
后续优先讨论可视化自定义流程、资源导入反馈和资源维护。详细范围见[功能规划](../roadmap.md)。产品定位为个人本机工作台,会话级服务器隔离不列为当前版本必修项。
|
|
29
29
|
|
|
30
30
|
## 验证与发布
|
|
31
31
|
|
|
32
|
-
以[测试报告](testing/0.23.0/测试报告.md)记录实际结果。源代码与 npm 发布各自验证;GitHub CI 未完成时不能称已通过。市场 PR 只添加 `data/plugins/godv61__dsh-task-engine.yml`,按[贡献指南](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/blob/main/contributing.md)检查,npm 关联来自 package.json repository。
|
|
32
|
+
以[测试报告](../testing/0.23.0/测试报告.md)记录实际结果。源代码与 npm 发布各自验证;GitHub CI 未完成时不能称已通过。市场 PR 只添加 `data/plugins/godv61__dsh-task-engine.yml`,按[贡献指南](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/blob/main/contributing.md)检查,npm 关联来自 package.json repository。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 0.23.1:真实项目回归后的流程修复
|
|
2
2
|
|
|
3
|
-
[← 文档导航](README.md)
|
|
3
|
+
[← 文档导航](../README.md)
|
|
4
4
|
|
|
5
5
|
本版集中修复真实开发中暴露的资源来源、技能执行、审核记录、验证与提交问题,并改善错误提示。仍使用三个预设流程,不包含自定义流程编排。
|
|
6
6
|
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
|
|
46
46
|
## 验证结果与边界
|
|
47
47
|
|
|
48
|
-
自动化及安装包结果见 [0.23.1 测试说明](testing/0.23.1/测试报告.md)。候选版 rc.3 在一项真实需求中完成了需求/方案审批、8个实施项双阶段审核、测试技能执行、真实验证和本地提交回写。rc.5 与本次字段提示修复有定向回归及包验证,未再次执行整轮真实需求。
|
|
48
|
+
自动化及安装包结果见 [0.23.1 测试说明](../testing/0.23.1/测试报告.md)。候选版 rc.3 在一项真实需求中完成了需求/方案审批、8个实施项双阶段审核、测试技能执行、真实验证和本地提交回写。rc.5 与本次字段提示修复有定向回归及包验证,未再次执行整轮真实需求。
|
|
49
49
|
|
|
50
50
|
该实机过程包含观察方纠正契约、复现异步缺陷和修订报告的干预,不能称为完全自主交付。业务结构树真实联调仍有环境与请求差异待核实,不能用插件本地闭环证明业务端到端可用。
|
|
51
51
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 0.23.2 发布说明
|
|
2
2
|
|
|
3
|
-
[← 文档导航](README.md)
|
|
3
|
+
[← 文档导航](../README.md)
|
|
4
4
|
|
|
5
5
|
本版修复验证命令的单次权限审批,并统一提交消息指引。
|
|
6
6
|
|
|
@@ -16,6 +16,6 @@
|
|
|
16
16
|
|
|
17
17
|
## 验证范围与管控边界
|
|
18
18
|
|
|
19
|
-
实机测试使用独立 `dshtest` 仓库与标准流程,由 DSH 编写业务代码,观察者审阅审批、执行独立验收并修复插件。每轮业务代码、任务台账与会话日志保留在本地归档,完成轮次回退到同一空业务基线。结果与干预见[测试报告](testing/0.23.2/测试报告.md)。本次不代表 QMS 页面、数据库或生产环境验收。
|
|
19
|
+
实机测试使用独立 `dshtest` 仓库与标准流程,由 DSH 编写业务代码,观察者审阅审批、执行独立验收并修复插件。每轮业务代码、任务台账与会话日志保留在本地归档,完成轮次回退到同一空业务基线。结果与干预见[测试报告](../testing/0.23.2/测试报告.md)。本次不代表 QMS 页面、数据库或生产环境验收。
|
|
20
20
|
|
|
21
|
-
插件控制 `dev_task` 的阶段、证据与提交登记;通用文件编辑工具不会逐次经过该状态机,模型也可能错误解读证据。直接 Git 提交的机械约束需要安装[提交钩子](manual.html),本次独立业务轮次验证的是通过 `dev_task` 完成的受控路径。不要把技能指引等同于对所有工具调用的强制拦截。
|
|
21
|
+
插件控制 `dev_task` 的阶段、证据与提交登记;通用文件编辑工具不会逐次经过该状态机,模型也可能错误解读证据。直接 Git 提交的机械约束需要安装[提交钩子](../manual.html),本次独立业务轮次验证的是通过 `dev_task` 完成的受控路径。不要把技能指引等同于对所有工具调用的强制拦截。
|
package/docs/roadmap.md
CHANGED
|
@@ -1,33 +1,34 @@
|
|
|
1
|
-
# 功能规划
|
|
2
|
-
|
|
3
|
-
[← 文档导航](README.md)
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
## 后续体验方向
|
|
25
|
-
|
|
26
|
-
- 资源导入:文件选择取消、大包进度、分块上传与取消。
|
|
27
|
-
- 资源维护:来源与版本记录、升级差异预览、备份和恢复。
|
|
28
|
-
- 工作台:未保存内容保护、台账扩展、语言与可访问性完善。
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
## 产品范围
|
|
32
|
-
|
|
33
|
-
|
|
1
|
+
# 功能规划
|
|
2
|
+
|
|
3
|
+
[← 文档导航](README.md)
|
|
4
|
+
|
|
5
|
+
本页记录**讨论中的方向,不代表已发布功能**;是否实现、何时实现都在开始编码前单独确认。
|
|
6
|
+
已发布的能力与版本变化见[更新日志](CHANGELOG.md)。
|
|
7
|
+
|
|
8
|
+
## 当前能力边界
|
|
9
|
+
|
|
10
|
+
| 能力 | 状态 |
|
|
11
|
+
| :--- | :--- |
|
|
12
|
+
| 三个内置流程(`standard`、`agile`、`minimal`) | ✅ 已发布,开箱即用 |
|
|
13
|
+
| 阶段资源绑定(技能、规则挂到具体阶段) | ✅ 已发布 |
|
|
14
|
+
| 任务台账、验证与审核回执、提交门禁 | ✅ 已发布 |
|
|
15
|
+
| 项目级与个人级资源安装、来源保留 | ✅ 已发布 |
|
|
16
|
+
| **自由编辑流程阶段与条件** | ❌ **不在计划内** |
|
|
17
|
+
|
|
18
|
+
**关于自定义流程**:让使用者自行设计阶段、条件与提交流程曾被评估,结论是**不列入计划**——
|
|
19
|
+
它把流程设计的负担转嫁给使用者,而三个内置流程已覆盖个人项目的常见需要。代码中不存在该能力的
|
|
20
|
+
实现;相关尝试保留在非发布分支,不在 `main` 上。
|
|
21
|
+
|
|
22
|
+
需要调整时,可修改项目根目录的 `.dsh/eng.json` 改变阶段资源绑定,或直接在三个内置流程中选择。
|
|
23
|
+
|
|
24
|
+
## 后续体验方向
|
|
25
|
+
|
|
26
|
+
- 资源导入:文件选择取消、大包进度、分块上传与取消。
|
|
27
|
+
- 资源维护:来源与版本记录、升级差异预览、备份和恢复。
|
|
28
|
+
- 工作台:未保存内容保护、台账扩展、语言与可访问性完善。
|
|
29
|
+
- 项目展示:真实工作台截图、案例和收录信息。
|
|
30
|
+
|
|
31
|
+
## 产品范围
|
|
32
|
+
|
|
33
|
+
本项目服务本机个人开发工作台。多用户服务器的会话权限架构不列为当前版本的必修项。日常改进优先
|
|
34
|
+
解决工作区目标清晰、文件误操作、任务连续性和操作反馈。
|
|
@@ -39,4 +39,4 @@
|
|
|
39
39
|
|
|
40
40
|
实机技能附件与规则文件均核对 SHA-256 一致,两个一次性资源已清理并确认目标不存在;源码 fixture 留在评测工作目录,不进入发布仓库。源历史 163 个 blob 和当前待发布文件的常见凭据模式扫描无命中;模式扫描不保证发现所有形式的秘密。
|
|
41
41
|
|
|
42
|
-
完整修改与后续建议见[发布说明](../../
|
|
42
|
+
完整修改与后续建议见[发布说明](../../releases/0.23.0.md)。收录指南要求仓库创建满一天,申请材料已准备,提交与合并应分别确认。
|
package/lib/seed-preset.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Seed the `eng` preset into the user's `.agent-presets` root.
|
|
3
3
|
*
|
|
4
|
-
* Installing the bundle must put a pickable "
|
|
4
|
+
* Installing the bundle must put a pickable "工程化开发引�? preset in the preset
|
|
5
5
|
* picker without anyone hand-copying a composition. The preset is the shipped
|
|
6
6
|
* `standard` composition with three edits: the persona is replaced by the
|
|
7
7
|
* engineering persona, `task-engine-agent` is appended, and nothing else changes
|
|
8
|
-
*
|
|
8
|
+
* �?so a session on it has every tool `standard` has, plus `dev_task`.
|
|
9
9
|
*
|
|
10
10
|
* The seed DERIVES the composition from the `standard` that is running, and
|
|
11
11
|
* RE-DERIVES it whenever that source moves. The earlier version copied once and
|
|
@@ -35,6 +35,59 @@
|
|
|
35
35
|
declare const LEGACY_PERSONA_BLOCK: string;
|
|
36
36
|
/** The persona fragment the seed itself wrote into `eng`, in the old `text:` form. */
|
|
37
37
|
declare const SEEDED_PERSONA_MARKER = " text: |-\n";
|
|
38
|
+
/**
|
|
39
|
+
* Which persona config field the RUNNING harness expects.
|
|
40
|
+
*
|
|
41
|
+
* `@deepseek-ai/dsh-persona` renamed `text` to `prefix`/`suffix` in
|
|
42
|
+
* `40792330c0` (2026-09-06, first shipped in `dsh-v0.1.3-alpha.2`). The two
|
|
43
|
+
* schemas are mutually exclusive: a preset written with `prefix` is rejected
|
|
44
|
+
* outright by an older persona plugin with `$.text missing required value`, and
|
|
45
|
+
* `text` is rejected by the newer one. The seed therefore cannot hardcode
|
|
46
|
+
* either name �?it reads which one the source composition already uses, since
|
|
47
|
+
* that composition is what the running harness mounts.
|
|
48
|
+
*/
|
|
49
|
+
type PersonaField = 'text' | 'prefix';
|
|
50
|
+
/** The block-scalar styles a persona row may use, kept verbatim from the source. */
|
|
51
|
+
type ScalarStyle = '|-' | '>-' | '|' | '>';
|
|
52
|
+
/**
|
|
53
|
+
* Detect the persona field and its block-scalar style from the source's own
|
|
54
|
+
* persona row.
|
|
55
|
+
*
|
|
56
|
+
* The style is part of the value, not decoration: `>-` folds the single
|
|
57
|
+
* newlines inside the payload back into spaces, while `|-` preserves them. The
|
|
58
|
+
* shipped presets all use `>-`, so writing `|-` would silently change how the
|
|
59
|
+
* persona prose renders.
|
|
60
|
+
* @param composition - the `standard` composition text.
|
|
61
|
+
* @returns the field name and scalar style, defaulting to the older `text`/`>-`.
|
|
62
|
+
*/
|
|
63
|
+
declare function personaShapeOf(composition: string): {
|
|
64
|
+
field: PersonaField;
|
|
65
|
+
style: ScalarStyle;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Detect the persona field from the source composition's own persona row.
|
|
69
|
+
* @param composition - the `standard` composition text.
|
|
70
|
+
* @returns the field name, defaulting to `text` for the pre-2026-09-06 shape.
|
|
71
|
+
*/
|
|
72
|
+
declare function personaFieldOf(composition: string): PersonaField;
|
|
73
|
+
/**
|
|
74
|
+
* Replace the persona row's config with the engineering persona, keeping the
|
|
75
|
+
* field name the running harness uses.
|
|
76
|
+
*
|
|
77
|
+
* The persona schema has moved (`text:` �?`prefix`/`suffix`), so this rewrites
|
|
78
|
+
* the whole `config:` block of the `persona` row rather than matching one
|
|
79
|
+
* historical phrasing, and writes whichever field
|
|
80
|
+
* {@link personaFieldOf} found in the source. A `suffix:` row is preserved when
|
|
81
|
+
* the source had one, because the newer schema renders it after first-party
|
|
82
|
+
* guidance and dropping it would change the system prompt's shape.
|
|
83
|
+
* @param composition - the `standard` composition text.
|
|
84
|
+
* @param persona - the engineering persona prose.
|
|
85
|
+
* @returns the rewritten text plus whether the row was found.
|
|
86
|
+
*/
|
|
87
|
+
declare function applyPersona(composition: string, persona: string): {
|
|
88
|
+
text: string;
|
|
89
|
+
applied: boolean;
|
|
90
|
+
};
|
|
38
91
|
/**
|
|
39
92
|
* Whether an existing `eng` composition is one this package previously seeded,
|
|
40
93
|
* as opposed to something the user has since edited by hand. Only a previously
|
|
@@ -48,7 +101,7 @@ declare function wasSeeded(composition: string): boolean;
|
|
|
48
101
|
*
|
|
49
102
|
* Failures are swallowed: a seed that cannot write must not stop the bundle's
|
|
50
103
|
* host half (its Remote controller and workbench) from loading. A preset that
|
|
51
|
-
* was deleted by the user stays deleted
|
|
104
|
+
* was deleted by the user stays deleted �?re-derivation only touches a file the
|
|
52
105
|
* seed itself created.
|
|
53
106
|
*/
|
|
54
107
|
export declare function seedEngPreset(): void;
|
|
@@ -64,5 +117,10 @@ export declare function derivedEngComposition(): {
|
|
|
64
117
|
} | undefined;
|
|
65
118
|
/** Exported for tests: whether a composition is one this seed owns. */
|
|
66
119
|
export { wasSeeded };
|
|
120
|
+
/**
|
|
121
|
+
* Exported for tests: apply the persona rewrite to an arbitrary composition, so
|
|
122
|
+
* both persona schema generations can be asserted without swapping harnesses.
|
|
123
|
+
*/
|
|
124
|
+
export { applyPersona, personaFieldOf, personaShapeOf };
|
|
67
125
|
/** Exported for tests: the pre-2026-09-06 persona phrasing this seed must still recognise. */
|
|
68
126
|
export { LEGACY_PERSONA_BLOCK, SEEDED_PERSONA_MARKER };
|
package/lib/seed-preset.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Seed the `eng` preset into the user's `.agent-presets` root.
|
|
3
3
|
*
|
|
4
|
-
* Installing the bundle must put a pickable "
|
|
4
|
+
* Installing the bundle must put a pickable "工程化开发引�? preset in the preset
|
|
5
5
|
* picker without anyone hand-copying a composition. The preset is the shipped
|
|
6
6
|
* `standard` composition with three edits: the persona is replaced by the
|
|
7
7
|
* engineering persona, `task-engine-agent` is appended, and nothing else changes
|
|
8
|
-
*
|
|
8
|
+
* �?so a session on it has every tool `standard` has, plus `dev_task`.
|
|
9
9
|
*
|
|
10
10
|
* The seed DERIVES the composition from the `standard` that is running, and
|
|
11
11
|
* RE-DERIVES it whenever that source moves. The earlier version copied once and
|
|
@@ -57,7 +57,7 @@ function dshHome() {
|
|
|
57
57
|
* time from the installed DSH rather than from a build-time constant.
|
|
58
58
|
*
|
|
59
59
|
* `@deepseek-ai/dsh-agent-presets` also exports `SHIPPED_PRESET_ROOT`, but that
|
|
60
|
-
* is `fileURLToPath(new URL('../presets/', import.meta.url))`
|
|
60
|
+
* is `fileURLToPath(new URL('../presets/', import.meta.url))` �?a constant baked
|
|
61
61
|
* into whichever copy of the package the *plugin* resolves. Under a real install
|
|
62
62
|
* that is the plugin's own dependency tree, which can sit at a different DSH
|
|
63
63
|
* version than the one running: the seed then copies an obsolete `standard`,
|
|
@@ -88,12 +88,50 @@ function personaBody() {
|
|
|
88
88
|
return readFileSync(fileURLToPath(new URL('../preset/persona.md', import.meta.url)), 'utf8').trimEnd();
|
|
89
89
|
}
|
|
90
90
|
/**
|
|
91
|
-
*
|
|
91
|
+
* Detect the persona field and its block-scalar style from the source's own
|
|
92
|
+
* persona row.
|
|
92
93
|
*
|
|
93
|
-
* The
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
94
|
+
* The style is part of the value, not decoration: `>-` folds the single
|
|
95
|
+
* newlines inside the payload back into spaces, while `|-` preserves them. The
|
|
96
|
+
* shipped presets all use `>-`, so writing `|-` would silently change how the
|
|
97
|
+
* persona prose renders.
|
|
98
|
+
* @param composition - the `standard` composition text.
|
|
99
|
+
* @returns the field name and scalar style, defaulting to the older `text`/`>-`.
|
|
100
|
+
*/
|
|
101
|
+
function personaShapeOf(composition) {
|
|
102
|
+
const lines = composition.split('\n');
|
|
103
|
+
const start = lines.findIndex(line => line.trimEnd() === '- id: persona');
|
|
104
|
+
if (start < 0)
|
|
105
|
+
return { field: 'text', style: '>-' };
|
|
106
|
+
let end = start + 1;
|
|
107
|
+
while (end < lines.length && !/^- /u.test(lines[end] ?? ''))
|
|
108
|
+
end++;
|
|
109
|
+
for (const line of lines.slice(start, end)) {
|
|
110
|
+
const match = /^\s+(text|prefix):\s*([|>][-+]?)\s*$/u.exec(line);
|
|
111
|
+
if (match === null)
|
|
112
|
+
continue;
|
|
113
|
+
return { field: match[1], style: (match[2] ?? '>-') };
|
|
114
|
+
}
|
|
115
|
+
return { field: 'text', style: '>-' };
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Detect the persona field from the source composition's own persona row.
|
|
119
|
+
* @param composition - the `standard` composition text.
|
|
120
|
+
* @returns the field name, defaulting to `text` for the pre-2026-09-06 shape.
|
|
121
|
+
*/
|
|
122
|
+
function personaFieldOf(composition) {
|
|
123
|
+
return personaShapeOf(composition).field;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Replace the persona row's config with the engineering persona, keeping the
|
|
127
|
+
* field name the running harness uses.
|
|
128
|
+
*
|
|
129
|
+
* The persona schema has moved (`text:` �?`prefix`/`suffix`), so this rewrites
|
|
130
|
+
* the whole `config:` block of the `persona` row rather than matching one
|
|
131
|
+
* historical phrasing, and writes whichever field
|
|
132
|
+
* {@link personaFieldOf} found in the source. A `suffix:` row is preserved when
|
|
133
|
+
* the source had one, because the newer schema renders it after first-party
|
|
134
|
+
* guidance and dropping it would change the system prompt's shape.
|
|
97
135
|
* @param composition - the `standard` composition text.
|
|
98
136
|
* @param persona - the engineering persona prose.
|
|
99
137
|
* @returns the rewritten text plus whether the row was found.
|
|
@@ -109,15 +147,22 @@ function applyPersona(composition, persona) {
|
|
|
109
147
|
end++;
|
|
110
148
|
// Keep the row's identity lines (`- id`, ` name:`); drop only its config.
|
|
111
149
|
const header = lines.slice(start, end).filter(line => !/^\s{2,}config:/u.test(line) && !/^\s{4,}\S/u.test(line));
|
|
150
|
+
const { field, style } = personaShapeOf(composition);
|
|
151
|
+
// The shipped suffix names the working directory; carry it over verbatim.
|
|
152
|
+
const suffixLine = lines.slice(start, end).find(line => /^\s+suffix:/u.test(line));
|
|
112
153
|
const indented = persona.split('\n').map(line => (line === '' ? '' : ` ${line}`));
|
|
113
|
-
// `complete` is deliberately NOT set: it would make this
|
|
154
|
+
// `complete` is deliberately NOT set: it would make this prose the entire
|
|
114
155
|
// system prompt, suppressing the suffix and every other section.
|
|
115
|
-
const
|
|
116
|
-
...header.filter(line => line !== ''),
|
|
156
|
+
const config = [
|
|
117
157
|
' config:',
|
|
118
|
-
|
|
158
|
+
// Carry the shipped suffix verbatim under `config:`, keeping its own
|
|
159
|
+
// indentation: it names the working directory and the newer persona schema
|
|
160
|
+
// renders it after first-party guidance.
|
|
161
|
+
...(field === 'prefix' && suffixLine !== undefined ? [` ${suffixLine.trim()}`] : []),
|
|
162
|
+
` ${field}: ${style}`,
|
|
119
163
|
...indented,
|
|
120
164
|
];
|
|
165
|
+
const body = [...header.filter(line => line !== ''), ...config];
|
|
121
166
|
return { text: [...lines.slice(0, start), ...body, ...lines.slice(end)].join('\n'), applied: true };
|
|
122
167
|
}
|
|
123
168
|
/** Append the agent row when the composition does not already name it. */
|
|
@@ -159,7 +204,7 @@ function deriveComposition() {
|
|
|
159
204
|
*
|
|
160
205
|
* Failures are swallowed: a seed that cannot write must not stop the bundle's
|
|
161
206
|
* host half (its Remote controller and workbench) from loading. A preset that
|
|
162
|
-
* was deleted by the user stays deleted
|
|
207
|
+
* was deleted by the user stays deleted �?re-derivation only touches a file the
|
|
163
208
|
* seed itself created.
|
|
164
209
|
*/
|
|
165
210
|
export function seedEngPreset() {
|
|
@@ -203,6 +248,11 @@ export function derivedEngComposition() {
|
|
|
203
248
|
}
|
|
204
249
|
/** Exported for tests: whether a composition is one this seed owns. */
|
|
205
250
|
export { wasSeeded };
|
|
251
|
+
/**
|
|
252
|
+
* Exported for tests: apply the persona rewrite to an arbitrary composition, so
|
|
253
|
+
* both persona schema generations can be asserted without swapping harnesses.
|
|
254
|
+
*/
|
|
255
|
+
export { applyPersona, personaFieldOf, personaShapeOf };
|
|
206
256
|
/** Exported for tests: the pre-2026-09-06 persona phrasing this seed must still recognise. */
|
|
207
257
|
export { LEGACY_PERSONA_BLOCK, SEEDED_PERSONA_MARKER };
|
|
208
258
|
//# sourceMappingURL=seed-preset.js.map
|
package/lib/seed-preset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed-preset.js","sourceRoot":"","sources":["../src/seed-preset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC;;;GAGG;AACH,MAAM,oBAAoB,GACxB,gBAAgB;MACd,mGAAmG,CAAA;AAEvG,sFAAsF;AACtF,MAAM,qBAAqB,GAAG,gBAAgB,CAAA;AAC9C,4EAA4E;AAC5E,MAAM,YAAY,GAAG,mBAAmB,CAAA;AACxC,4EAA4E;AAC5E,MAAM,SAAS,GAAG,sEAAsE,CAAA;AACxF,+CAA+C;AAC/C,MAAM,WAAW,GACf,iBAAiB;MACf,sFAAsF,CAAA;AAE1F,8DAA8D;AAC9D,SAAS,OAAO;IACd,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAA;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAClG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAA;IAChC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;AAChE,CAAC;AAED,4DAA4D;AAC5D,SAAS,WAAW;IAClB,OAAO,YAAY,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAA;AACxG,CAAC;
|
|
1
|
+
{"version":3,"file":"seed-preset.js","sourceRoot":"","sources":["../src/seed-preset.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.23.
|
|
3
|
+
"version": "0.23.8",
|
|
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",
|
|
@@ -68,10 +68,10 @@
|
|
|
68
68
|
},
|
|
69
69
|
"peerDependencies": {
|
|
70
70
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
71
|
-
"@deepseek-ai/dsh-agent-presets": "^0.1.2-rc.1 || ^0.1.3-alpha.1 || ^0.1.6-alpha.2",
|
|
72
|
-
"@deepseek-ai/dsh-llm": "^0.1.2-rc.1 || ^0.1.3-alpha.1 || ^0.1.6-alpha.2",
|
|
73
|
-
"@deepseek-ai/dsh-tools": "^0.1.2-rc.1 || ^0.1.3-alpha.1 || ^0.1.6-alpha.2",
|
|
74
|
-
"@deepseek-ai/dsh-typert-protocol": "^0.1.2-rc.1 || ^0.1.3-alpha.1 || ^0.1.6-alpha.2"
|
|
71
|
+
"@deepseek-ai/dsh-agent-presets": "^0.1.2-rc.1 || ^0.1.3-alpha.1 || ^0.1.6-alpha.2 || ^0.1.7-alpha.1",
|
|
72
|
+
"@deepseek-ai/dsh-llm": "^0.1.2-rc.1 || ^0.1.3-alpha.1 || ^0.1.6-alpha.2 || ^0.1.7-alpha.1",
|
|
73
|
+
"@deepseek-ai/dsh-tools": "^0.1.2-rc.1 || ^0.1.3-alpha.1 || ^0.1.6-alpha.2 || ^0.1.7-alpha.1",
|
|
74
|
+
"@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"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
77
|
"@deepseek-ai/cordis": "^4.0.2",
|