@godv61/dsh-task-engine 0.6.1 → 0.8.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # dsh-task-engine
2
2
 
3
- 一个**可安装、项目无关、硬约束**的工程化交付引擎,把「需求评审 → 设计 → 开发 → 交付 → 代码审核」这套流程做成 DeepSeek Harness 的一个 bundle。同事 `dsh plugin add` 装一下就能在自己项目里用——**不需要**每个项目手写 `.agents` / `.claude` / `.harness`,也**不需要**建预设(`eng-delivery` 技能带 `whenToUse`,模型遇到开发类请求会自己加载并走 `dev_task`)。
3
+ 一个**可安装、项目无关、硬约束**的工程化交付引擎,把「需求评审 → 设计 → 开发 → 交付 → 代码审核」这套流程做成 DeepSeek Harness 的一个 bundle。**按预设激活**:装 bundle 后在目标预设的 `agent.cordis.yml` 加一行,该预设的会话才挂上 `dev_task` 工具、内置技能和人设;换到别的预设(不加那行)就完全不激活——不需要每个项目手写 `.agents` / `.claude` / `.harness`。
4
4
 
5
5
  核心是一个 `dev_task` 工具 + 内置技能。工具的硬约束在代码里执行,不是"提醒模型":
6
6
 
@@ -14,17 +14,21 @@
14
14
  ## 目录
15
15
 
16
16
  ```
17
- cordis.patch.yml bundle 声明 + host 组合 patch(一行,注册本插件,双端)
17
+ cordis.patch.yml bundle 声明 + host 组合 patch(一行,只挂 host 半:Remote 控制器 + 工作台 UI)
18
18
  defaults/eng.json 内置默认工作流(可被项目 .dsh/eng.json 覆盖)
19
19
  hooks/commit-msg git 提交门禁钩子(install_hook 装进 .git/hooks/)
20
20
  src/engine.ts 纯函数状态机 + 配置校验(无 harness 依赖,双端复用)
21
- src/index.ts 插件(host):注册 dev_task 工具 + 技能 + 挂 task-engine Remote 控制器
22
- src/controller.ts Host 端 Remote 控制器:网页读写 .dsh/eng.json
23
- src/client/ 浏览器半:设置页「工程流程配置」(表单 + 实时校验 + 保存 + 挂载/新建)
21
+ src/index.ts host 入口:只挂 task-engine Remote 控制器(配置面板用,非模型可见)
22
+ src/agent.ts agent 入口(./agent 出品):在调用它的预设 scope 里注册 dev_task + 内置技能
23
+ src/dev-task.ts dev_task 工具定义 + 全部文件系统辅助(模型门禁,随 agent 入口激活)
24
+ src/shipped-skills.ts 内置技能扫描 + 注册(随 agent 入口激活)
25
+ src/controller.ts Host 端 Remote 控制器:网页读写 .dsh/eng.json + skill/rule
26
+ src/client/ 浏览器半:全屏工作台(流程配置 / 技能 skill / 规则 rule 三个标签页)
24
27
  skills/ 内置技能库(需求分析/方案设计/实现/验证/审核/提交/交付编排)
25
28
  rules/ 内置规则库(编码规范/提交规范/安全红线)
29
+ preset/agent.cordis.yml 预设接入片段(persona 行 + agent 行,复制进你的预设)
26
30
  preset/preset.yml 预设元数据
27
- preset/persona.md 预设 persona 文案(复制粘贴用)
31
+ preset/persona.md 预设 persona 文案
28
32
  ```
29
33
 
30
34
  ## 构建
@@ -48,17 +52,23 @@ dsh plugin --profile <name> add github:<你的org>/dsh-task-engine
48
52
  dsh plugin --profile <name> add .
49
53
  ```
50
54
 
51
- ## 启用
55
+ ## 启用(按预设激活)
52
56
 
53
- 装完即用:`eng-delivery` 技能带 `whenToUse`,模型遇到开发、改 bug、加功能、评审、提交类请求会先加载它,再按技能铁律走 `dev_task`——不需要预设。
57
+ 装 bundle 只挂 host 半(配置工作台),**不**给任何会话挂 `dev_task` 或技能——流程惰性待命。要在哪个预设激活,就在那个预设的 `agent.cordis.yml` 加一行:
54
58
 
55
- ### 可选:专用「工程化开发引擎」预设
59
+ 1. 复制一个预设(GUI 预设管理里复制 `standard` → `eng`,落在 `~/.dsh/.agent-presets/eng/`)。
60
+ 2. 打开 `eng` 的 `agent.cordis.yml`,做两处改动(可直接照抄 `preset/agent.cordis.yml` 片段):
61
+ - `persona` 行换成工程化人设(`preset/persona.md` 的内容);
62
+ - 追加一行 agent 入口:
63
+ ```yaml
64
+ - id: task-engine-agent
65
+ name: '@godv61/dsh-task-engine/agent'
66
+ ```
67
+ 3. 新会话选 `eng`:挂上 `dev_task` 工具 + 内置技能 + 工程化人设,模型走完整流程。
68
+ - 换回 `standard` / `minimal` / 其它**没加那行**的预设:没有 `dev_task`、没有内置技能、没有工程化人设——流程完全不介入。
69
+ - 侧边栏「工程流程」全屏工作台仍在(host 半),随时供人查看/配置 `.dsh/eng.json` 和 skill/rule,与激活与否无关。
56
70
 
57
- 想要团队有个固定人设(新会话选它即进入工程化流程),才需要建预设:
58
-
59
- 1. 复制 `standard` 预设为 `eng`(GUI 预设管理里的「复制」,或手动建 `~/.dsh/.agent-presets/eng/` 目录)。
60
- 2. 把该预设的 persona 换成 `preset/persona.md` 内容。
61
- 3. 新会话选「工程化开发引擎」。`dev_task` 工具与 `eng-delivery` 技能由 bundle 提供。
71
+ 这一层对称由 DSH 的工具/技能 scope 机制保证:host 半从不把 `dev_task` 注册进全局工具层,agent 半只在命名它的预设 scope 里注册——不是一个“开关”,而是两个不同层的注册位置。
62
72
 
63
73
  ## 项目配置(让流程贴合你的项目)
64
74
 
@@ -121,4 +131,6 @@ dsh plugin --profile <name> add .
121
131
  - **真实模型端到端(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` 路径冒烟全绿。
122
132
  - **网页图形化配置界面(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
133
  - **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` 校验(未知阶段/空名)与合并已单测通过。
124
- - **配置页精简 + 自建 skill 可观测(0.6.1)**:设置页的流转/产物/提交规则/新建默认折叠,「节点挂载」从六阶段全平铺改成「选一个阶段再看它挂了什么」;新建成功提示带回显路径(`.dsh/skills/<name>/SKILL.md` 或 `$DSH_HOME/…`),挂载清单给非内置的 skill/rule 标「(项目)/(用户)」来源。修复 `listSkills` 依赖 host skill registry 导致项目 `.dsh/skills` 自建技能不显示的问题——改为与 `listRules` 一致,直接扫「内置 + 项目 + 用户」三层目录。浏览器 e2e 全绿。
134
+ - **配置页精简 + 自建 skill 可观测(0.6.1)**:设置页的流转/产物/提交规则/新建默认折叠,「节点挂载」从六阶段全平铺改成「选一个阶段再看它挂了什么」;新建成功提示带回显路径(`.dsh/skills/<name>/SKILL.md` 或 `$DSH_HOME/…`),挂载清单给非内置的 skill/rule 标「(项目)/(用户)」来源。修复 `listSkills` 依赖 host skill registry 导致项目 `.dsh/skills` 自建技能不显示的问题——改为与 `listRules` 一致,直接扫「内置 + 项目 + 用户」三层目录。浏览器 e2e 全绿。
135
+ - **全屏工作台 + 在线编辑(0.7.0)**:配置页从设置弹窗迁出,改为侧边栏 `sidebar.footer.action`「工程流程」按钮,点开 `shell.overlay` 全屏工作台(触发按钮与覆盖层共享一个 store 控制开关)。工作台分「流程配置 / 技能 skill / 规则 rule」三个标签页;技能和规则列表支持在线编辑——`readSkill`/`readRule` 读回正文、改 description/whenToUse/正文、`writeSkill`/`writeRule` 写回;内置项只读,项目/用户项可原地编辑,新建同时支持项目级/用户级。旧的 `settings.section` 入口移除,统一走侧边栏按钮。浏览器 e2e 全绿。
136
+ - **按预设激活(0.8.0)**:`dev_task` 工具与内置技能从 host 全局层拆到 agent 层。host 入口只挂 `task-engine` Remote 控制器 + 工作台 UI(`src/index.ts`);新增 `src/agent.ts`(`./agent` 出品)、`src/dev-task.ts`、`src/shipped-skills.ts`,由预设的 `agent.cordis.yml` 命名后,在**该预设的 scope** 里注册工具与技能。实机 boot 验证:`standard` 会话工具目录不含 `dev_task`(26 个工具),加了 `@godv61/dsh-task-engine/agent` 行的 `eng` 会话含 `dev_task`(27 个工具)且描述正确,换回 `standard` 再次不含——切换预设即切换流程激活状态。
package/cordis.patch.yml CHANGED
@@ -1,10 +1,11 @@
1
- # dsh-task-engine bundle: one host-plane row that registers the `dev_task` tool
2
- # and the shipped engineering skills. The agent-plane opt-in (persona + routing)
3
- # lives in `preset/` and is copied into a preset by whoever enables the engine.
4
- #
5
- # Host row + global tools/skills registries means: install the bundle once and the
6
- # capability is dormant-available to every agent; the preset decides whether an
7
- # agent actually routes its work through it.
1
+ # dsh-task-engine bundle: one host-plane row that mounts the `task-engine`
2
+ # Remote namespace (what the browser workbench reads/writes) plus, via
3
+ # `dsh.client`, the workbench UI. This host row registers NO model-facing tool
4
+ # and NO skill — `dev_task` and the shipped skills live on the AGENT plane,
5
+ # behind the `@godv61/dsh-task-engine/agent` entry. A preset's
6
+ # `agent.cordis.yml` names that agent row to activate the flow for its
7
+ # sessions; presets that never name it get neither the tool nor the skills
8
+ # (the workbench stays available so a human can still configure the flow).
8
9
  - insert:
9
10
  - id: task-engine
10
11
  name: '@godv61/dsh-task-engine'
package/lib/agent.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Agent half of dsh-task-engine: registers the model-facing `dev_task` tool and
3
+ * the shipped engineering skills onto the calling (preset) scope. Name this row
4
+ * from a preset's `agent.cordis.yml` to activate the delivery flow for that
5
+ * preset's sessions; presets that never name it see neither the tool nor the
6
+ * skills.
7
+ *
8
+ * @module dsh-task-engine/agent
9
+ */
10
+ import type { Context } from '@deepseek-ai/cordis';
11
+ export declare const name = "task-engine-agent";
12
+ export declare const inject: string[];
13
+ export declare function apply(ctx: Context): void;
package/lib/agent.js ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Agent half of dsh-task-engine: registers the model-facing `dev_task` tool and
3
+ * the shipped engineering skills onto the calling (preset) scope. Name this row
4
+ * from a preset's `agent.cordis.yml` to activate the delivery flow for that
5
+ * preset's sessions; presets that never name it see neither the tool nor the
6
+ * skills.
7
+ *
8
+ * @module dsh-task-engine/agent
9
+ */
10
+ import { registerDevTask } from "./dev-task.js";
11
+ import { registerShippedSkills } from "./shipped-skills.js";
12
+ export const name = 'task-engine-agent';
13
+ export const inject = ['tools', 'fs'];
14
+ export function apply(ctx) {
15
+ registerDevTask(ctx);
16
+ registerShippedSkills(ctx);
17
+ }
18
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,MAAM,CAAC,MAAM,IAAI,GAAG,mBAAmB,CAAA;AACvC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AAErC,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,eAAe,CAAC,GAAG,CAAC,CAAA;IACpB,qBAAqB,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC"}