dingtalk-dsh-assistant 0.5.15 → 2.0.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/CHANGELOG.md +48 -0
- package/README.md +134 -189
- package/package.json +41 -26
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,51 @@
|
|
|
4
4
|
|
|
5
5
|
## [未发布]
|
|
6
6
|
|
|
7
|
+
## [2.0.0] - 2026-10-16
|
|
8
|
+
|
|
9
|
+
### 新增与改进
|
|
10
|
+
|
|
11
|
+
- 任务执行会话自主使用 DSH 原生工具,群常驻协调、任务接续、人工介入与执行恢复形成统一链路;保留业务验收和外部效果核对。
|
|
12
|
+
- 看板增加完整执行会话列表、累计运行时长和可缩放时间轴;展示消息结论、耗时、阶段标记与独立提示,保留原有状态颜色。
|
|
13
|
+
- 任务上下文改用索引、去重与文件按需读取,减少重复注入;支持执行短名和阶段进度展示。
|
|
14
|
+
|
|
15
|
+
### 修复
|
|
16
|
+
|
|
17
|
+
- 修复历史引用及通知回声阻断消息处理、原任务续办、原生工具回执归属、执行 provider 恢复和文件前置拒绝后的纠正路径。
|
|
18
|
+
- 修复通知回读与对账、人工介入私聊及已答通知撤回、回复署名配置、任务归档入口和看板刷新后的页面恢复。
|
|
19
|
+
|
|
20
|
+
### 不兼容变化与升级边界
|
|
21
|
+
|
|
22
|
+
- 适配 DSH `0.2.1-alpha.2`,要求 Node.js 24+;宿主仍是预发布版本,不承诺其他 DSH 版本兼容。Assistant、Observer 与宿主服务依赖须保持一致。
|
|
23
|
+
- 本次因不兼容变化升级主版本:旧插件内置 Git/Run/节点固定自动化编排退出,改由原生任务与执行会话使用当前配置开放的工具和技能;删除 1.0.0 公开的 `./execution`、`./platform-host` npm 子路径导出,移除任务电子表格同步,并切换任务会话架构和 DSH 宿主依赖。依赖旧导出的集成须先改用当前受支持入口;依赖表格同步的实例须另行安排替代方案。既有实例须先阅读任务会话清洁启动、DSH 兼容及本地部署说明,排空旧调度并审阅历史未决效果;不能仅替换包或直接覆盖历史数据。
|
|
24
|
+
- 三个发行包统一为 `2.0.0`;全新安装使用根包 `dingtalk-dsh-assistant@2.0.0`。包发布不代表实例升级,也不代表历史告警已清除。
|
|
25
|
+
|
|
26
|
+
## [1.0.0] - 2026-09-29
|
|
27
|
+
|
|
28
|
+
### 新增
|
|
29
|
+
|
|
30
|
+
- 群聊 workflow-v2 使用持久消息事项、Topic 与 Task Owner,统一问答、调查和阶段编排;任务可以等待补充、取消、重执行及归档。
|
|
31
|
+
- SQLite 控制账保存任务控制事件、执行租约、阶段计划和外部效果;运行看板展示消息处理、节点、会话、历史执行与交付物,同一逻辑任务汇总为一张卡片。
|
|
32
|
+
- 任务完成以逐项领域业务验收和正式交付清单为依据;调查、通用处理、工程和外部操作各自核验承担的验收项,结构完整不能替代业务结果或渠道送达。
|
|
33
|
+
- 任务可生成或导入受信文件,并以真实附件发送到来源群;文件授权、不可变快照、消息回读及下载摘要校验独立验证。
|
|
34
|
+
- 新任务工作文件、中间产物、临时文件和交付物统一保存在 `tasks/<logicalTaskId>/{work,tmp,outputs}`;重执行复用任务根,原始 DSH 会话目录不动。
|
|
35
|
+
|
|
36
|
+
### 变更与升级边界
|
|
37
|
+
|
|
38
|
+
- 三个发行包统一升至 1.0.0。群聊工作流、领域合同及控制账是本次大版本的主要变化,不以产品版本号替代各存储和冻结工作流版本。
|
|
39
|
+
- 旧 JSON domain v8 必须先按工作流存储迁移说明零写自检、转换到独立 v9 目录并回读;v6/v7 先转换到 v8。已切换实例不重复迁移,升级后不得用旧快照覆盖新输入或外部效果。
|
|
40
|
+
- 新工作流使用代码注册的流程目录和领域合同,历史冻结定义按原摘要恢复;不批量改写历史输入、输出或补造验收回执。旧提示词数据保留,但不作为已切换群的新流程配置。
|
|
41
|
+
- 备份新增 Agent 工作区任务根,显式排除可再生工程依赖;历史任务默认保留旧路径。仅对用户指定的终态任务执行经自检、备份和逐文件核验的收纳迁移,不自动搬动全部历史文件。
|
|
42
|
+
- 部署通过正式维护、排空见证、完整备份、精确包安装和独立运行回读恢复派发;已封存但安装失败的实例有受控离线修复入口。
|
|
43
|
+
|
|
44
|
+
### 修复
|
|
45
|
+
|
|
46
|
+
- 修复已完成任务重复唤醒、合法无待办消息阻塞后续派发,以及维护期间消息领取和恢复问题。
|
|
47
|
+
- 完善消息拆分、连续消息关联、话题限制与任务动作来源核验;澄清已答后可受控恢复原消息,并保留已确认通知,避免重复询问。
|
|
48
|
+
- 消息和话题中的重复任务事实使用可逆引用共享,保留原文和权限边界;容量超限仍明确停止,不裁剪事实或扩大默认预算。
|
|
49
|
+
- 修复跨句原文文件交付授权误拒绝、复合验收项证据关联和完成验收顺序;群回复使用业务语言,插件身份及署名读取配置。
|
|
50
|
+
- 完善工程产物归档检查、远端提交身份核验和删除前证据快照,保留历史结果与输出入口。
|
|
51
|
+
|
|
7
52
|
- 协调请求增加 `superseded` 持久终态,完成与失效请求均可收口;相同恢复故障按稳定身份聚合计数,已失效的结果快照不再污染当前健康状态。
|
|
8
53
|
- 普通任务回复与完成通知复用同一引用和接收人规则;引用真实 Topic 消息时可省略 `atOpenDingTalkIds`,由 Runtime 推导被引用发送人。
|
|
9
54
|
- 人工介入批准显式绑定精确 requestedAction;处理意见与动作冲突时要求保持停等并重新澄清,看板按钮同步展示准确语义。
|
|
@@ -231,6 +276,7 @@
|
|
|
231
276
|
- assistant、observer 与发行包统一使用同一个产品版本号。
|
|
232
277
|
- Node.js 最低版本与实际 zstd Runtime 要求一致,调整为 24。
|
|
233
278
|
|
|
279
|
+
[1.0.0]: https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases/tag/v1.0.0
|
|
234
280
|
[0.5.15]: https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases/tag/v0.5.15
|
|
235
281
|
[0.5.14]: https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases/tag/v0.5.14
|
|
236
282
|
[0.5.13]: https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases/tag/v0.5.13
|
|
@@ -248,3 +294,5 @@
|
|
|
248
294
|
[0.5.1]: https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases/tag/v0.5.1
|
|
249
295
|
[0.5.0]: https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases/tag/v0.5.0
|
|
250
296
|
[0.4.0]: https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases/tag/v0.4.0
|
|
297
|
+
|
|
298
|
+
[2.0.0]: https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases/tag/v2.0.0
|
package/README.md
CHANGED
|
@@ -2,67 +2,99 @@
|
|
|
2
2
|
|
|
3
3
|
# DingTalk DSH Assistant
|
|
4
4
|
|
|
5
|
-
`dingtalk-dsh-assistant`
|
|
5
|
+
`dingtalk-dsh-assistant` 把钉钉群聊接入 [DeepSeek Harness(DSH)](https://github.com/deepseek-ai/DeepSeek-Harness)。当前 resident 使用“消息 → 话题 → 任务会话 → 独立执行会话”:消息只归属话题,既有话题协调器结合固定版本原文与新消息决定是否创建、续办、取消任务或仅讨论;任务会话持续负责完整目标,独立执行会话使用宿主实际工具完成受托工作。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
当前源码不再装配固定 workflow、DAG、阶段或节点调度器。按清洁启动使用全新任务库与 Resident domain,旧任务数据可恢复地移出运行路径;当前服务不读取、导入或兼容旧任务,也不重新发送旧通知。既有实例不能直接热切换,先读[任务会话清洁启动 Runbook](docs/ops/task-session-clean-start.md)。本文描述源码行为,不表示已发布、已部署或通过真实钉钉验收。
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## 任务责任与执行边界
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
- 原消息、话题单元、归属版本、摘要及决策操作记录继续持久保存。原路由与话题决策按角色使用原生协调会话,只解释、归属和交办真实来源,不执行业务工作;消息不直接保存任务关联。
|
|
12
|
+
- 每任务一个持久任务会话(Owner),独立维护当前目标、需求版本与控制版本。它可直接使用当前 Agent 配置提供的原生工具、按需读取技能,也可委派、读执行结果、取消执行及提交本轮结论;不另设统筹会话工具白名单。
|
|
13
|
+
- 每个受托执行有自己的 `executionId`、原生 Session、租约和工作目录。同任务可并行多个执行,同一执行只能单飞;续办沿原 Session 与递增输入版本,不伪造 Run/节点。
|
|
14
|
+
- 任务会话根据当前要求与真实结果自主判断继续、等待、提问或完成。Host 检查来源、版本、权限、未排空句柄与未决 operation 等一致性,不代替模型做业务阶段验收。
|
|
15
|
+
- 任务与执行会话均挂载实际配置的 DSH Agent preset,恢复时沿已持久选择;任务和动态执行会话均保留该配置的原生工具,不额外设置会话工具白名单;工作区指引、沙箱、审批及操作账身份仍以宿主和当前真实授权为准。会话可使用实际已配置的原生委派工具,具体操作仍须有当前用户授权。
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
话题决策先落原话题账,任务与用户来源再落 SQLite 账,然后创建会话。每任务沿配置工作区的 tasks/<taskId> 使用固定工作区,原生 workspaceRegistry 以任务标题显示;任务与独立执行会话的原生归属均为同一任务根目录。同一任务的任务会话与全部执行会话也在同一任务根目录实际运行,文件可共享;不同任务使用不同根目录。恢复保留相同工作区、运行目录和会话身份。任务会话标题使用任务标题,执行会话标题使用受托小目标名称。执行结果与唤醒任务会话的事件在同一事务提交;旧需求的迟到结果只作为历史证据,不能改变新要求。暂停或取消使旧分派权限失效,只有真实工具、会话及受管进程排空后才能释放执行占位。“取消请求已记录”不代表外部动作已撤销。
|
|
14
18
|
|
|
15
|
-
|
|
16
|
-
| --- | --- | --- |
|
|
17
|
-
| 参与方式 | 被 `@` 后响应 | 常驻群聊,主动判断并参与 |
|
|
18
|
-
| 上下文 | 当前消息或片段上下文 | 持续维护完整群聊上下文 |
|
|
19
|
-
| 工作范围 | 问答、检索等单次任务 | 讨论、方案、排障、工具执行、功能开发 |
|
|
20
|
-
| 任务处理 | 一次处理一件事 | 多个独立叶子任务并行推进 |
|
|
21
|
-
| 持续执行 | 回复结束后停止 | 通过 Goal 持续执行、等待、恢复和完成 |
|
|
22
|
-
| 结果交付 | 返回一次性答案 | 回到原群引用回复,保留证据与任务状态 |
|
|
19
|
+
## 持久账、通知与恢复
|
|
23
20
|
|
|
24
|
-
|
|
21
|
+
动态控制库独立记录 task、execution、operation、source、wake 和 notification,不依赖旧 Run/节点外键。命令回执和稳定分派键防重复;结果已写入原生日志而回调尚未落账时,恢复可以重收已确认提交,不再调用模型重做工作。
|
|
25
22
|
|
|
26
|
-
|
|
23
|
+
外部 operation 先持久登记再执行。`starting` 在重启后成为 `unknown`;原未知记录及其已有资源锁保留,不能换 ID 或换参数自动重放。新原生调用沿 DSH 自身的权限及并发合同,不再分配插件合成的通用写锁,也不因另一个操作未知而全局拒绝 GitHub/终端等查询;原操作对账和业务完成证据继续独立核验。
|
|
27
24
|
|
|
28
|
-
-
|
|
29
|
-
- `subagent`:主会话只协调,叶子会话独立执行任务。
|
|
30
|
-
- `Goal`:维持叶子任务的持续执行、恢复和完成状态。
|
|
31
|
-
- `systemPrompt.section`:向主会话注入群名称、群 ID、群职责与决策协议;向叶子会话注入任务流程和证据要求。
|
|
32
|
-
- Agent Registry 与原生 descriptor:在 DSH Web 中展示并打开常驻会话、叶子对话和轨迹。
|
|
33
|
-
- 默认模型、推理深度与权限 preset:由 DSH 原生服务保存和应用。
|
|
34
|
-
- storage domain:持久化群订阅、消息、Task、可靠投递、人工介入事项和告警。
|
|
35
|
-
- attachment service:将钉钉图片作为 DSH 原生多模态附件传入会话。
|
|
25
|
+
业务完成与通知送达是两件事。完成结论和唯一完成通知意图同事务提交;话题确认、必要业务问题、用户主动状态查询也使用独立通知账,并投影回原群消息发件箱。话题决策的全部任务动作落账后才准备回复,动作失败不发送成功承接表述;恢复按原动作和通知身份去重。话题固定历史中的自身通知只作为上下文,不作为用户授权来源;同账号手动输入仍须精确版本准入。发送后必须独立核对目标群、真实消息及身份/引用证据。ACK、工具返回成功或业务完成均不等于通知送达;未知通知只回读,不重发业务或原消息。Web-only 来源不自动转成群聊外发。
|
|
36
26
|
|
|
37
|
-
|
|
27
|
+
发信箱使用“待发送、发送中、待回读、待核对、已送达、已替代”等短状态;待回读表示进入发送后核验,待核对表示发送结果未知,已送达表示回读已确认。状态提示保留具体原因,异常及撤回记录单独展示。
|
|
28
|
+
|
|
29
|
+
收信箱处理状态按当前归类结果和话题处理版本展示为待归类、归类失败、话题处理中、已处理;不再展示旧工作流等待状态或“历史未记录处理过程”提示,已有处理记录仍可查看。
|
|
30
|
+
|
|
31
|
+
收信箱过滤已关联的自身通知及当前发送身份的 DWS 回流,保留底层历史;本人手动发送的正常消息仍经监听和历史补拉接纳。仅账号相同不能判定为通知。DWS 不返回原生 `@` 元数据时,只有精确发送状态 SUCCESS、消息 ID、发送者、原群、原生引用及完整正文全部吻合才确认送达,同时记录 `mentionVerification=unavailable`,不声称 `@` 已核验;明确不符的元数据仍拒绝。无精确回执的历史匹配继续要求原生 `@` 证据。
|
|
32
|
+
|
|
33
|
+
更新运行实现后,启动时因未知操作而停住、没有人工问题且执行均已排空的任务,会按实现摘要和需求/控制版本补一次持久恢复唤醒。原任务先只读对账,不清除未知效果保护或重放原命令;同一实现的定时恢复和再次重启不重复唤醒。
|
|
34
|
+
|
|
35
|
+
开始、普通进度和内部诊断不会逐条群发。群内最终结果引用来源消息并按受信身份提及相关用户,正文直接写答复,不再重复被原生引用的消息原文;原始编号、诊断与过程留在任务详情。
|
|
36
|
+
|
|
37
|
+
人工介入按 `audience` 分流:缺省 `operator`,插件/任务/底座/登录/工具能力等技术问题保留在现有 Web 人工介入页,并发给当前 DWS 登录人私聊;身份从同一 profile 的认证回读取得,不取业务需求提出人。仅明确需要需求提出人回答的业务信息或业务决定使用 `requester`,才在原群询问。真人可在私聊引用申请回复结果;Host 核验原通知、会话、真实作者和当前申请版本,再沿原任务继续。无当前登录身份或未授权外发时保留 Web 入口,不退回业务群。私聊发送结果未知只回读,不重发。
|
|
38
|
+
|
|
39
|
+
### 首版限制
|
|
40
|
+
|
|
41
|
+
- 动态原生执行的显式后台调用校验并立即返回原生 job 身份,服务可供同一执行的后续工具使用;前台超时提升仍收集终态。后台 operation 在真实终态前不结算,执行结束或取消时停止残留 job、记录终态并排空所属进程。原生 job_list/job_output 固定为读取;旧版误记未知的缺失 job 读取只按原收据核验失败,不重放生产者命令。缺少可核验身份不能视为成功,已启动不等于服务就绪或业务完成。传统工作流节点仍保持既有后台限制。模型服务故障按[Provider 恢复机制](docs/spec/execution-provider-recovery-mechanism.md)有限退避,不重放已成功操作或未知效果。
|
|
42
|
+
- 通过原生 subprocess 服务创建的进程按该 provider 的 `terminate` / `waitForExit` 合同排空;无法证明排空时保留占位。这个保证不超过 provider 的实际受管范围。
|
|
43
|
+
- 动态任务执行不再挂接插件的文件路径拦截;任务日志及当前已授权文件沿原生文件工具、sandbox/approval 和实际操作系统权限读取。工作区与原任务/会话归属不变。
|
|
44
|
+
- 通用执行依赖实际 preset 能力;旧工程、UAT、Bytebase、文件交付等固定流程不再是新任务入口。保留源码和历史合同不代表动态任务已自动接通这些旧适配器。
|
|
45
|
+
|
|
46
|
+
## 工作目录与原生日志
|
|
38
47
|
|
|
39
48
|
```text
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
49
|
+
<Agent工作区>/
|
|
50
|
+
.dsh/task-sessions.sqlite 默认动态控制库
|
|
51
|
+
.dsh/task-sessions.sqlite.initialized
|
|
52
|
+
tasks/.session-routes/ 原生日志持久路由
|
|
53
|
+
tasks/<taskId>/materials/ 共享材料
|
|
54
|
+
tasks/<taskId>/outputs/ 任务产物
|
|
55
|
+
tasks/<taskId>/tmp/
|
|
56
|
+
tasks/<taskId>/ 原生工作区及所有任务会话 header.cwd
|
|
57
|
+
tasks/<taskId>/work/ 工作文件容器
|
|
58
|
+
tasks/<taskId>/.dsh/sessions/ 该任务全部原生会话日志
|
|
59
|
+
groups/<groupId的摘要>/ 群会话 cwd
|
|
47
60
|
```
|
|
48
61
|
|
|
49
|
-
|
|
62
|
+
任务与执行的日志由官方 JSONL 后端直接写入任务目录,保持原生 replay、恢复和压缩能力;不是日志副本。群会话使用新 profile 配置的原生持久化根;旧会话不接入当前运行时,不能一概认定在 `%DSH_HOME%/sessions`。会话 ID、路由、控制库与工作目录需一致恢复。在线更换 Agent 工作区被拒绝;离线搬迁与恢复要求见[清洁启动 Runbook](docs/ops/task-session-clean-start.md#回退)。
|
|
63
|
+
|
|
64
|
+
## Web 看板与 HTTP 接口
|
|
65
|
+
|
|
66
|
+
任务页展示一项完整任务、唯一任务会话和动态执行列表;支持独立新建任务,不把内部执行拆成多个业务任务。详情包含结果、执行状态、日志入口和未决阻塞,不展示补充需求与取消任务控件;群消息续办和后端控制 API 仍保留。模型会话入口是阅读上下文,不是绕过 Host 直接修改任务的控制口。
|
|
67
|
+
|
|
68
|
+
- `GET /state/tasks/:taskId/detail`:当前任务及只读历史详情
|
|
69
|
+
- `GET /state/tasks/:taskId/executions`:动态执行或历史执行记录
|
|
70
|
+
- `POST /tasks`:Web 新任务,须配置受信 `webActorId`、指定订阅群并提供稳定 `requestId`
|
|
71
|
+
- `POST /tasks/:taskId/context`:补充要求,携带 `expectedRequirementRevision` 与 `expectedControlRevision`
|
|
72
|
+
- `POST /tasks/:taskId/cancel`:取消,携带 `expectedControlRevision`
|
|
73
|
+
|
|
74
|
+
Web 写入限制本机合法请求来源;操作者由 Host 配置,不接受模型提供身份。CAS 冲突须重新读任务,不能覆盖新版本。Web 的原始操作意图与来源同事务保存,重启不会交给群模型改判。
|
|
75
|
+
|
|
76
|
+
旧 `/workflows/*`、`/config/workflow-variables*`、`/config/workflow-bindings*`、工作流目录及旧阶段/重跑/暂停恢复/归档等写入口返回 HTTP 410。旧任务写入返回 `LEGACY_TASK_READONLY`;历史读取不赋予恢复权限。完整退役范围以 `http.js` 为准。
|
|
50
77
|
|
|
51
78
|
## 包结构
|
|
52
79
|
|
|
53
|
-
- `packages/dingtalk-dsh-assistant
|
|
54
|
-
-
|
|
55
|
-
- `
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
- `
|
|
59
|
-
- `
|
|
80
|
+
- `packages/dingtalk-dsh-assistant`:DWS 传输、群配置、任务会话服务、动态 SQLite 账与设置页面
|
|
81
|
+
- `packages/dingtalk-dsh-observer`:任务、来源消息、结果、执行会话和历史只读看板
|
|
82
|
+
- `task-resident-runtime.js`:不含旧调度器的 resident 传输/配置边界
|
|
83
|
+
- `task-session-service.js`、`task-session.js`:来源接纳、群关联、任务统筹与恢复
|
|
84
|
+
- `execution-session.js`:复用 DSH create/resume、preset、租约、工具与排空
|
|
85
|
+
- `dynamic-task-store.js`:事务账、效果锁、幂等回执、唤醒及通知
|
|
86
|
+
- `task-session-persistence.js`:官方原生日志的任务级持久路由
|
|
87
|
+
- `docs/ops/task-session-clean-start.md`:切换、核验、人工对账与恢复
|
|
88
|
+
|
|
89
|
+
旧 workflow/Goal/叶子调度文档仅供历史维护取证,不是当前 resident 的操作指引。不得同时装配旧 `workflow-service`、旧 Resident scheduler 或独立 execution 恢复进程写同一实例。
|
|
90
|
+
|
|
91
|
+
发布清单采用当前入口依赖的显式白名单。退役工作流、私人平台适配器、历史业务源码和个人技能均不进入 Assistant npm 包,旧 `./execution` 与 `./platform-host` 导出已移除;它们只保留在源码中作历史取证。通用群消息、资源清理和当前来源规则独立成模块,避免无关的旧引擎被传递打包。`test/task-session-package-native.test.js` 实际打包、解压,以已安装依赖运行解压产物的任务和 resident 健康检查;不等于已经部署用户实例。
|
|
60
92
|
|
|
61
93
|
## 环境要求
|
|
62
94
|
|
|
63
95
|
- Windows 11 与 PowerShell 7。
|
|
64
96
|
- Node.js 24 或更高版本。较低版本缺少 DSH Session JSONL 持久化所需的 zstd API。
|
|
65
|
-
-
|
|
97
|
+
- 本分支适配 DSH `0.2.1-alpha.2`(用户指定的预发布版本),并要求能够正常启动 `dsh web`。Assistant、Observer、DSH 核心及服务 peer 依赖必须保持相同版本,不能混装旧依赖树。升级与会话格式边界见 [DSH 兼容说明](docs/ops/dsh-0.2.1-alpha.2-compatibility.md)。
|
|
66
98
|
- 已安装并配置所选模型对应的 DSH provider。只有使用 ChatGPT/Codex 订阅时才需要 `dsh-codex-connect`。
|
|
67
99
|
- 已安装并登录 DWS。只有启用真实钉钉订阅时才需要。
|
|
68
100
|
|
|
@@ -70,35 +102,40 @@ DWS 群消息
|
|
|
70
102
|
|
|
71
103
|
### Skill 文件路径
|
|
72
104
|
|
|
73
|
-
|
|
105
|
+
插件不内置个人 Agent 设定、技能正文、业务技能名单或业务目录。技能使用已配置 DSH 原生 `dsh-skill`、`dsh-skill-filesystem`、`dsh-tool-skill`;没有配置这些能力时不会自动安装个人技能或回退加载仓库历史工作流。
|
|
74
106
|
|
|
75
|
-
|
|
76
|
-
|
|
107
|
+
DSH 根据 Session 的当前工作目录发现项目级 Skill,同时加载用户级 Skill。项目根是包含 `.git` 的最近祖先;没有 `.git` 时就是当前 Session cwd。每任务拥有独立的根目录 cwd,任务内所有会话共享此 cwd,因此不能假定 `<Agent工作区>/.agents/skills` 总会被自动发现。默认扫描顺序如下,靠前的同名 Skill 优先(不同 preset 的同名覆盖仍按 DSH 原生 scope 规则):
|
|
108
|
+
|
|
109
|
+
1. `<项目根>\.dsh\skills\<skill-name>\SKILL.md`
|
|
110
|
+
2. `<项目根>\.agents\skills\<skill-name>\SKILL.md`
|
|
77
111
|
3. profile 显式配置的 `customSkillDirs`
|
|
78
112
|
4. `%DSH_HOME%\skills\<skill-name>\SKILL.md`,`DSH_HOME` 默认是 `%USERPROFILE%\.dsh`
|
|
79
113
|
5. `%DSH_AGENTS_HOME%\skills\<skill-name>\SKILL.md`,`DSH_AGENTS_HOME` 默认是 `%USERPROFILE%\.agents`
|
|
80
114
|
|
|
81
|
-
|
|
115
|
+
给本机当前用户的 DSH 项目共享的 Skill,可安装到 `%DSH_AGENTS_HOME%\skills` 或默认 `%USERPROFILE%\.agents\skills`。只服务某个个人 Agent 的技能,配置该 Agent preset 内 `dsh-skill-filesystem` 的 `customSkillDirs` 为个人技能包的绝对目录;需要隔离时同时设 `includeDefaultRoots: false`。这些路径及正文保存在个人配置和插件仓库之外,不修改插件包。DSH 不扫描 `%USERPROFILE%\.codex\skills`。
|
|
116
|
+
|
|
117
|
+
复制时必须保留完整的 `<skill-name>` 目录,不能只复制 `SKILL.md`,因为 Skill 可能引用同目录下的 `references`、`scripts` 或其他资源。原生目录只提供名称和描述,正文在 `skill(name)` 调用后才进入对应会话。任务会话据此分派小目标,可通过 `task_delegate.skillNames` 传递相关名称;独立执行会话自行加载适用入口,再通过实际文件工具按需读取引用资料。群会话只负责路由,不加载业务技能。
|
|
118
|
+
|
|
119
|
+
Skill 不提供动作授权,不恢复固定 DAG、参数绑定、审批门槛或产物格式验收;任务会话仍负责整体完成判断。原生 loader 仅读取注册表与正文,附属脚本不会由 `skill` 自动执行。插件将所选可信 preset 中挂载的准确 `skill` 工具对象作为只读入口,后续同名替换不能继承任务会话调用许可或执行会话的只读效果分类;不要配置不受信任的 preset 插件代码。普通加载失败可纠正,不应生成未知外部写入。
|
|
82
120
|
|
|
83
|
-
|
|
121
|
+
验证是否真正加载时,应在任务及执行 Session JSONL 中分别确认廉价目录,以及实际 `tool/call` / 成功 `tool/result`;还应确认无关正文没有自动注入、执行能读取所需引用资料、任务和执行会话均能使用已配置的原生文件与终端工具,取消、提交和租约变化仍阻止失效动作。`test/task-session-skills-native.test.js` 使用真实 DSH registry、filesystem provider、tool-skill 和会话运行时覆盖这些边界;它不代表具体个人技能的业务效果或真实平台发布已验证。
|
|
84
122
|
|
|
85
123
|
## 安装到 DSH
|
|
86
124
|
|
|
125
|
+
2.0.0 起发行包包含任务会话架构切换。既有实例必须先按[任务会话清洁启动 Runbook](docs/ops/task-session-clean-start.md)停止旧调度、排空实际执行并审阅历史未决效果。历史版本安装方法仍见[大版本升级边界](docs/ops/npm-release.md#100-升级边界)与[更新日志](CHANGELOG.md)。
|
|
126
|
+
|
|
127
|
+
|
|
87
128
|
推荐让 Web、resident Runtime 和看板运行在同一个 DSH Web 进程中,避免两个进程同时写同一份 Session JSONL 和 storage domain。
|
|
88
129
|
|
|
89
|
-
|
|
130
|
+
全新安装使用根发行包;它会把 Assistant Runtime、Observer 看板和对应 bundle patch 一并装入 `web` profile。以 2.0.0 为例,生产或验收环境固定版本:
|
|
90
131
|
|
|
91
132
|
```powershell
|
|
92
|
-
dsh plugin --profile web add dingtalk-dsh-assistant@0.
|
|
133
|
+
dsh plugin --profile web add dingtalk-dsh-assistant@2.0.0 --save-exact
|
|
93
134
|
```
|
|
94
135
|
|
|
95
|
-
|
|
136
|
+
安装完成后必须重启 `dsh web`;仅看到依赖安装成功不代表插件 Runtime 已加载。已有 profile 升级前须先确认安装形态,不能在仍直接依赖两个内部包时只添加根包。
|
|
96
137
|
|
|
97
|
-
版本历史见 [CHANGELOG](CHANGELOG.md),发行资产见 [GitHub Releases](https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases)。设置页会通过 GitHub Release
|
|
98
|
-
|
|
99
|
-
```powershell
|
|
100
|
-
dsh plugin --profile web add @zzusp/dingtalk-dsh-assistant@latest @zzusp/dingtalk-dsh-observer@latest --save-exact
|
|
101
|
-
```
|
|
138
|
+
版本历史见 [CHANGELOG](CHANGELOG.md),发行资产见 [GitHub Releases](https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases)。设置页会通过 GitHub Release 检查新版本;“版本与更新”卡片提供可复制的升级提示词,引导先核对 profile、在途任务及[大版本升级边界](docs/ops/npm-release.md#100-升级边界),再按[本地部署规程](docs/ops/resident-review-local-deployment.md)安全切换。根包安装与旧式双内部包安装的精确命令见[安装手册](docs/manual/install-and-configure-dsh-web.md#二安装或升级正式版本)。检查失败会明确显示错误,不会误报为最新版本。
|
|
102
139
|
|
|
103
140
|
升级后重启 DSH Web,并依次确认:profile 中的包版本、`GET http://127.0.0.1:18998/health`、设置页/运行看板、真实群消息收发。四层证据不能互相替代。
|
|
104
141
|
|
|
@@ -115,8 +152,8 @@ dsh plugin --profile web add @zzusp/dingtalk-dsh-assistant@latest @zzusp/dingtal
|
|
|
115
152
|
```powershell
|
|
116
153
|
git clone https://github.com/HiQ-AI/dingtalk-dsh-assistant.git
|
|
117
154
|
Set-Location .\dingtalk-dsh-assistant
|
|
118
|
-
pnpm install
|
|
119
|
-
|
|
155
|
+
pnpm install --frozen-lockfile
|
|
156
|
+
node --test test/dynamic-task-store.test.js test/task-session-service-native.test.js test/task-session-http-integration.test.js
|
|
120
157
|
```
|
|
121
158
|
|
|
122
159
|
#### 2. 将插件加入 DSH Web profile
|
|
@@ -150,6 +187,8 @@ pnpm test
|
|
|
150
187
|
|
|
151
188
|
把 [`.dsh/profiles/resident/cordis.patch.yml`](.dsh/profiles/resident/cordis.patch.yml) 中的 resident 配置按需合并到实际使用的 Web profile patch。Web 基础 bundle 已包含 storage 相关插件,只覆盖 `storage-json` 配置并插入 `dingtalk-dsh-assistant/resident`,不要重复插入同名 storage 项。
|
|
152
189
|
|
|
190
|
+
参考 patch 不替代任务控制库初始化。首次使用须在实际 resident 配置中明确设置 `taskSessions.dbPath`、`instanceId` 与经过确认的一次性 `initialize: true`;确认初始化成功后改回 `false`。必须显式配置 `ownerActorId`、`webActorId` 及现场记录的 `ingressEpoch`;不接入旧任务库。完整配置字段与停机边界见[清洁启动 Runbook](docs/ops/task-session-clean-start.md#必填配置和时间边界)。
|
|
191
|
+
|
|
153
192
|
仓库模板有意保持以下安全默认值:
|
|
154
193
|
|
|
155
194
|
```yaml
|
|
@@ -161,11 +200,19 @@ dws:
|
|
|
161
200
|
|
|
162
201
|
不要把个人群 ID、DWS profile、Agent 名称、工作目录或职责写入仓库模板;这些内容应保存在本机 DSH 配置和插件 storage 中。
|
|
163
202
|
|
|
203
|
+
### 群回复署名
|
|
204
|
+
|
|
205
|
+
Agent 设置中的可选 `replySignature` 恢复读写;profile 的 `agentReplySignature` 仅在存储未设置时初始化。留空不追加,不从名称、群职责或历史报告推断私人身份。
|
|
206
|
+
|
|
207
|
+
Host 在完成、业务提问和实质性话题回复的完整正文组装后、通知持久化前统一落款一次。确认及中间消息不追加署名;模型仅生成正文。仅清理与当前配置精确相同的独立署名段落,保护引用、代码和业务列表,不替换其他姓名。通知的 digest、发送、重试和重启恢复沿用持久化正文,配置修改只影响新通知。
|
|
208
|
+
|
|
209
|
+
群职责继续承担业务范围、授权边界和语气要求。部署后应核实 Agent 署名配置,再清理现场职责中的重复署名要求;代码修复不会自动修改现场职责或补发历史通知。详细边界见[通用 Agent 身份边界](docs/spec/generic-agent-identity.md)。
|
|
210
|
+
|
|
164
211
|
#### 4. 安装 profile 依赖
|
|
165
212
|
|
|
166
213
|
```powershell
|
|
167
214
|
Set-Location "$env:USERPROFILE\.dsh\profiles\web"
|
|
168
|
-
pnpm install
|
|
215
|
+
pnpm install --frozen-lockfile
|
|
169
216
|
```
|
|
170
217
|
|
|
171
218
|
#### 5. 启动 DSH Web
|
|
@@ -179,161 +226,59 @@ pwsh -NoProfile -File .\scripts\start-web.ps1
|
|
|
179
226
|
|
|
180
227
|
`scripts/start-web.ps1` 使用当前用户的 `%USERPROFILE%\.dsh` 作为默认 `DSH_HOME`;若需要隔离 profile,可在启动前显式设置 `DSH_HOME`。脚本从当前项目根启动,并自动发现 `PATH` 中的 Node.js 和全局安装的 DSH。
|
|
181
228
|
|
|
182
|
-
##
|
|
229
|
+
## 首次配置与启动核验
|
|
183
230
|
|
|
184
|
-
|
|
231
|
+
1. 在实际 profile 中设置 Agent 工作区、Agent preset 和模型;在插件设置中维护名称/别名、群订阅及职责。个人群 ID、DWS profile、操作者身份与凭据不要提交到仓库。
|
|
232
|
+
2. 先按清洁启动 Runbook 初始化独立任务控制库;既有实例停稳旧执行并使用新 domain,确认 epoch 回补隔离后才开放新执行。不要用 `initialize: true` 绕过缺库或 epoch 身份不符。
|
|
233
|
+
3. 默认保持 `dws.enabled: false`、`dws.writesAuthorized: false`。通过隔离夹具后,分别批准真实订阅与外发;配置开关不是新业务授权。
|
|
234
|
+
4. 确认工作区根指引能通过 DSH 原生 `agent-instructions.projectRootMarkers` 被发现。插件不复制身份指引,也不把 Owner 提升为通用执行者。
|
|
235
|
+
5. 核对实际安装包、唯一进程/PID、`GET /health`、`GET /state/dws-bridge`、新任务与执行日志、重启恢复和真实消息回读。任何一层证据不能替代其余层。
|
|
185
236
|
|
|
186
|
-
|
|
237
|
+
启动脚本只负责启动,不证明旧工作已排空。既有 `restart-web.ps1`、`deploy-local.ps1` 及历史 maintenance/cutover 脚本可能依赖已退役接口,不能未经核对就用于这次架构切换。先执行[专用清洁启动步骤](docs/ops/task-session-clean-start.md#准备及隔离)。没有完成现场检查时,不报告部署或真实钉钉验收成功。
|
|
187
238
|
|
|
188
|
-
|
|
189
|
-
2. 设置 Agent 工作区绝对目录。DSH 会从该目录原生发现 `AGENTS.md`。
|
|
190
|
-
3. 设置默认模型、推理深度和叶子任务并行上限,默认并行上限为 5。
|
|
191
|
-
4. 按需设置网络代理。
|
|
192
|
-
5. 叶子通用执行规范已内置,“叶子会话提示词”可留空,仅用于补充个人或团队的通用偏好与约束;已有自定义内容会保留并追加。任务流程提示词默认逐项折叠,点击名称展开编辑名称、适用说明、流程和验收要求。叶子像使用 Skill 一样根据任务目标匹配索引、按需组合加载,不限制固定类型或流程数量;加载即记录,压缩/恢复后重新注入当前组合,并可随阶段变化增减。常驻主 Session 不常驻加载这些正文,只在计划或完成审阅请求中通过流程引用按需读取同一版本。
|
|
193
|
-
|
|
194
|
-
叶子的 `plan-confirmed` 必须用 `workflowAssessment` 绑定当前流程组合,说明沿用证据、不适用步骤以及例外依据。流程例外必须引用固定 Topic 中明确提出该要求的原始消息;主会话生成的目标、验收标准或旧摘要不能覆盖流程。常驻主会话结合可用流程索引和选择原因核查是否漏选,按需读取候选流程;允许有明确理由的无匹配和多个流程组合,不固化业务任务类型。读完已选流程后审阅计划,冲突时返回结构化拒绝。计划、阶段、审阅提交及最终落盘都核对当前启用流程的修订号;配置修改、停用或删除立即使受影响旧审阅失效,无需等待叶子重载。失效待审项归档到执行事件,历史证据保留,重新规划后才可推进。`stage-completed` 每次只提交上一检查点 `remainingItems` 的第一项,`completedItems` 不是累计历史。 checkpoint 按 kind 使用同源契约:plan-confirmed 才允许 workflowAssessment;stage-completed 必须有 stageTask 和非空 evidence;scope-conflict/evidence-gap/risk-changed 可用 stageTask/stageId 标明受影响阶段,但 completedItems 必须为空,不能推进阶段。工具 JSON Schema 由同一 Zod 投影到 DSH 支持的子集,kind/status 分支保留;长度及复杂关联约束由执行时 Zod 精确校验并返回字段路径。错误推进会返回 `accepted:false`、当前执行版本与 `expected` 参数,原进度不变;核对该项真实证据并按回执修正,确认接受后再推进下一阶段。
|
|
195
|
-
6. 通过群名称模糊搜索添加常驻群,并为每个群配置会话职责。
|
|
239
|
+
## 开发与测试
|
|
196
240
|
|
|
197
|
-
|
|
241
|
+
使用 Node.js 24+ 与锁定依赖:
|
|
198
242
|
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
writesAuthorized: false
|
|
243
|
+
```powershell
|
|
244
|
+
pnpm install --frozen-lockfile
|
|
245
|
+
node --test test/dynamic-task-store.test.js test/dynamic-execution-session-native.test.js test/task-session-persistence-native.test.js test/task-session-service-native.test.js test/task-session-http-integration.test.js test/task-filesystem-boundary-native.test.js test/task-notification-readback.test.js
|
|
203
246
|
```
|
|
204
247
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
完整的逐步安装、页面字段说明和“先收后发”验收流程见[安装插件并在 DSH Web 中完成配置](docs/manual/install-and-configure-dsh-web.md)。
|
|
208
|
-
|
|
209
|
-
## 群聊工作流
|
|
210
|
-
|
|
211
|
-
Topic 处理模型使用存储 domain v8。已有 v6/v7 数据必须先按[离线迁移与回退说明](docs/ops/topic-storage-migration.md)完成只读检查、独立目标转换和回读,再切换运行配置;不能直接用新 Runtime 打开旧存储。下文说明代码契约,不代表该版本已发布或本机 profile 已升级。
|
|
212
|
-
|
|
213
|
-
### 常驻主会话
|
|
214
|
-
|
|
215
|
-
每个群唯一绑定一个 resident Session。群名称、群 ID、职责和稳定决策协议通过 DSH `systemPrompt.section` 注入。消息明确指向已配置的 Agent 名称/别名、使用 `cc:`,或明确确认此前“是否需要我处理”的询问,并形成职责范围内的可验证目标时,主会话可以创建 Task;未明确指名但判断事项应形成任务时,主会话先在群里询问“这个事项是否需要我处理?”,收到肯定答复后再结合原消息和后续补充创建。Host 在接受 `new-task` 时再次校验群职责非空,并要求依据消息明确指向 Agent,或引用本插件此前持久化的 `task-proposal` 询问,不能只信任模型结论。主会话只负责选择 Task 路由;Runtime 使用原始群消息生成来源证据信封交给叶子,主会话生成的根因、完成度、方案优劣或排除性判断不作为叶子事实。
|
|
248
|
+
默认运行与修改直接相关的测试。需要全量回归时运行 `pnpm test`;它限定 `test/*.test.js`,避免扫描 `docs/tmp` 中已有隔离业务仓库。保留已有 `.test-runs/` 与 `docs/tmp/` 数据。
|
|
216
249
|
|
|
217
|
-
|
|
250
|
+
测试覆盖真实原生 Session/preset/持久化、事务故障注入、独立进程重启、取消与动态调度,但脚本化模型、隔离平台和测试进程不能代替现场 provider、OS 沙箱、生产服务或钉钉交付验收。测试接口只在显式 `testApiEnabled` 时启用,resident 不应直接暴露公网。
|
|
218
251
|
|
|
219
|
-
|
|
252
|
+
历史实现与运维资料仍保留在 `docs/spec`、`docs/api` 和 `docs/ops`。遇到与本文冲突的固定工作流、阶段验收、Owner 原生工具或权限自动提升说明,以当前任务会话源码及专用清洁启动 Runbook 为准;不要据旧资料恢复已退役的写入口。
|
|
220
253
|
|
|
221
|
-
|
|
254
|
+
宿主 DSH 联合升级的历史验收与配置接纳证据见 [PR170 归档规程](docs/ops/dsh-unified-host-upgrade.md)及[离线续接记录](docs/acceptance/dsh-unified-upgrade/continuation.md)。这些资料保留宿主 alpha2 修复来源;本次任务数据仍执行清洁启动,不恢复旧任务迁移。
|
|
222
255
|
|
|
223
|
-
|
|
256
|
+
任务统筹上下文只保留一份当前Host快照:旧快照及旧版历史标记在原生请求生命周期内退出模型surface,原始审计日志不删除。短文本直接展示;历史任务正文、重复材料及完整执行结果通过contentRef按需读取。执行目录保留身份、版本、目标、状态及结果入口,终态执行不再重复附带旧阶段进度;不能仅凭目录中的成功状态宣布业务完成。当前用户来源、作者、更正和约束保留,完整来源与执行目录始终可读。
|
|
224
257
|
|
|
225
|
-
|
|
258
|
+
当前运行中的原执行自行消费普通工具成功/失败,不逐条唤醒统筹。阶段成果、执行结束、真实未知效果、恢复/迟到结果和用户新指令仍触发统筹;已有十分钟真实日志巡检保留。统筹按阶段判断进展,避免连续工具调用造成重复快照和空等回合;正常工具/助手历史仍由原生上下文压缩管理,本机制不保证整个长期会话总长度恒定。
|
|
226
259
|
|
|
227
|
-
|
|
260
|
+
模型返回已识别的上游过载或fetch failed时,不标业务blocked、不消费唤醒,按现有退避沿原统筹会话继续;已提交决定优先。旧版已误标TASK_SESSION_NO_SUBMISSION的任务,仅在原session当前lease的末尾turn/end精确证明临时模型错误、任务排空且无业务问题时补一次持久唤醒;普通配置错误不自动恢复。
|
|
228
261
|
|
|
229
|
-
|
|
262
|
+
任务统筹wait等待排队、运行或未排空的小目标时,看板仍归执行中;真实问题、业务阻塞或暂停归等待中。
|
|
230
263
|
|
|
231
|
-
|
|
264
|
+
任务统筹遇到无法自行解决的事项或授权边界时调用task_request_human,持久登记具体问题、原因、证据和已尝试动作并进入等待中。人工介入页只对当前任务待答事项开放原文答复;答复按受信Web身份留存来源,核对请求和版本后沿同任务/会话唤醒进入执行中。原群中被明确路由为该任务补充的本人答复也按相同来源核对闭环。答复仅针对申请事项,不代表无限授权或已完成验收,未知效果保护仍有效。
|
|
232
265
|
|
|
233
|
-
|
|
266
|
+
明确交办“部署到UAT”已包含该任务在目标UAT的实际部署,不能先做准备再申请同一发布的“最终批准”。提交、集成、构建、镜像摘要核验、目标工作负载更新和验证按既有范围持续完成;需要人工时说明尚未满足的具体条件,不能只因规则含“需批准”就忽略已经收到的批准。用户后续暂停或缩小范围仍优先,生产及数据操作等越界事项不由UAT授权推导。
|
|
234
267
|
|
|
235
|
-
|
|
268
|
+
执行中的会话每10分钟进行一次真实日志巡检,十分钟时钟及观察序号保存在执行账中,重启不重置。Host从当前输入/租约对应的持久会话记录提取实际事件后唤醒统筹;统筹必须调用task_execution_progress读取记录,再对照目标判断进度和方向。最多返回最新8条、每条640字符的脱敏摘录及序号/摘要,未结束调用仅给引用;不重复注入整份日志。没有新日志不证明停止,running/进程存活不证明业务推进;不自动重放或取消。人工等待和暂停不会被巡检绕过。
|
|
236
269
|
|
|
237
|
-
|
|
270
|
+
任务会话记录的查看不拥有任务写入权。已注册的任务/执行会话只由Host原生create/resume取得写句柄;普通会话页面仍可读取历史,但其后台激活不能抢占这些会话。未排空任务的空重试不清除原故障告警。此约束针对会话生命周期归属,不限制会话已配置的原生业务工具。
|
|
238
271
|
|
|
239
|
-
|
|
272
|
+
原生网页读取和搜索沿固定工具对象身份识别为只读,普通读取错误不再进入未知写效果账。旧版误记的网页读取错误通过 task_operation_reconcile 核验原调用、参数/结果摘要及同轮正常结束记录,执行已排空且无活动会话/job 才转为 failed;保留原 unknown 审计,不重放请求、不视为读取成功。原生 edit/write 的读取、版本、文件类型/大小和字面匹配前置拒绝按 Host 结构化 FS 错误码记为 failed/noEffect,保留错误与结果摘要,由原会话读取当前文件、纠正请求后继续,不因这类错误转人工。旧文件 unknown 通过同一 task_operation_reconcile 核验原生日志 data.error 错误码、精确调用与同轮正常结束证据后转 failed,保留审计,不按错误文字或当前文件内容推断原调用成功。取消、IO/权限/沙箱、未知错误及缺失真实终态仍保留未知保护。
|
|
240
273
|
|
|
241
|
-
|
|
274
|
+
原生工具错误若仍为未知效果,模型不能凭错误文字自行清账。操作人可在当前技术申请的本机Web回复中显式提供 `nativeFailureResolutions`(原operationId及摘要);`POST /tasks/:taskId/human-requests/:requestId/reply/check` 零写核验原日志、正常回合结束、排空和绑定只读调查。正式reply在单个事务内记录受信来源、结算全部指定失败并答复申请,保留完整原账和 `partialEffectsPossible`,不标成功或无效果、不重放。未确认的写效果仍受unknown保护。
|
|
242
275
|
|
|
243
|
-
|
|
276
|
+
Web对原任务的补充、重开和取消沿已有话题继续,保留原文和独立意图收据。旧版本产生的Web重复话题可按原任务/applied关系在本机Check后归并;默认列表只展示当前话题,历史归并记录可通过includeMerged及原ID读取,不删除来源或重放动作。
|
|
244
277
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
消息的 `routingStatus` 表示待归类、已归类或归类失败;Topic 的 `processedRevision` 表示决策及所需动作已可靠落地;Task 的输入下发、输入确认与任务完成另行记录。任何一项均不能替代另一项。运行看板的“话题”页在左侧只展示名称与摘要,右侧分开展示完整标题、话题摘要、待解决问题和关联任务;固定版本消息列表直接展示并支持分页,每条消息所引用的上一条消息默认折叠。群消息状态由 `routingStatus`、Topic revision 与 `processedRevision` 投影为“待归类、话题处理中、已处理、归类失败”,不再把旧 `agentDeliveryStatus` 当成业务处理完成度。Task 卡片上的话题链接打开该任务接纳的版本。Topic 归属仅表示消息延续同一讨论目标,或实质改变该 Topic 的事实、范围、结论或动作;为回答问题查询旧分支、PR 或任务资料不会建立 Topic 归属。多 Topic 路由必须逐项声明关系和理由,并显式指定唯一动作主归属。Topic 决策信封和 `group_topic_context_get` 的单次完整 JSON 返回均限制为 40,000 字符;读取方按 `nextOffset`/`nextTextOffset` 连续读取分页或超长消息片段。`omittedDeltaMessageIds` 非空时,Resident 必须读完该固定 revision 的全部缺失增量,Host 在读完前拒绝决策。
|
|
248
|
-
|
|
249
|
-
常驻群聊主会话只负责上下文理解和结构化选路,不暴露 `get_goal`、`create_goal`、`update_goal`,也不注入 Goal 工具说明;其 DSH 文件权限 preset 固定为 `read-only`。Task 叶子会话由 Runtime 使用 DSH Goal 管理执行、阻塞、恢复与完成,权限 preset 为 `danger-full-access`,可按 Task objective 和工作区规则使用完整本机能力。DWS 群通知仍只有 Runtime 一个出口;叶子不得绕过结构化结果链路直接向来源群发送消息。
|
|
250
|
-
|
|
251
|
-
主会话向运行中或等待中的叶子传递任务上下文、目标修订、真人批复、恢复提示和结果驳回时统一使用 DSH `steer`,在叶子的下一个 step 边界插入,不使用 `followup` 排队到下一 Turn。
|
|
252
|
-
|
|
253
|
-
群成员明确撤销原任务授权,例如“不要处理、不用做、停止、取消、忽略刚才”时,Resident 将当前撤销消息关联到唯一的 queued、running 或 waiting Task,并提交 `task-cancel`,不得继续作为普通 `task-context` 发送给叶子。Runtime 在等待全局 Task 串行队列前同步调用 DSH `agent.cancel()`,立即中止叶子的当前 Turn 并清空尚未执行的输入;取消建立后拒绝叶子迟到提交的 checkpoint/result。任务随后持久化为已取消并归档,撤销消息及其归属保存在 Topic 历史;叶子 handle 的 dispose 在状态落盘后异步收敛,不阻塞群消息回复或 Web 取消响应,Runtime 关闭时仍会等待其完成。模糊讨论、普通目标收窄或只暂停某一步不能推断为取消整个 Task。
|
|
254
|
-
|
|
255
|
-
人工 Web Task 输入通过 `POST /tasks`、`POST /tasks/{taskId}/context` 和 `POST /tasks/{taskId}/reopen` 提交。三者均需由调用方提供稳定 `requestId` 与原始 `context`;新建还需 groupId、title、objective、acceptanceCriteria,可不提供 topicRefs,由 Runtime 建立 Web 来源 Topic。追加和重开需提供 topicRefs、inputVersion、runSequence,均从当前 Task/Topic 查询获得。相同 requestId 只可重试同一内容;版本或身份冲突返回 HTTP 409,持久接受但动作未完成返回 202。body 不接受 taskId、childSessionId 或伪造渠道来源。Resident 不持有这三个 Web 写入口,只通过带原始依据的 `group_decision_submit` 发起业务动作。
|
|
256
|
-
|
|
257
|
-
取消入口 `POST /tasks/{taskId}/cancel` 同样要求 requestId、topicRefs、inputVersion、runSequence,以 reason 保存人工原文。Web 来源不伪造钉钉引用或 @。Resident 已移除 `group_task_create`、`group_task_context_append`、`group_task_reopen` 直写工具;误归类通过 `group_topic_route_review` 提交修订,所有非空回复必须带 `replyReview.kind`。Task 补充输入按实际值判断范围变化,同值目标、验收和阶段数组不触发重规划。`preserve` 保留仍有效的已确认 checkpoints 及其原 inputVersion,不改写成新版本验收。确需否定既有进展时通过 `impactEvidence` 提供原始 basisMessageIds、原因与 affectedStageIds;从最早受影响阶段失效后续进展,保留此前证据,重新确认实际阶段顺序。明确影响证据不能被 preserve 忽略;未提供依据的同范围 replan 会被拒绝。阶段按稳定 stageId 关联,重复标题或冲突 ID 拒绝。跨 Topic 补充会合并固定版本引用,不覆盖此前执行依据。
|
|
258
|
-
|
|
259
|
-
叶子报告通过可选 submissionId 或规范内容身份持久接纳,同 ID 不同内容拒绝。input-wait/review-wait 代表已保存、尚未批准推进;叶子等待 Runtime 事件,不重复提交探测状态。旧版本合法报告只归历史,不覆盖新目标;输入解除或重启从持久记录恢复,审阅和通知复用稳定身份。最终接受、阶段通过与业务验收仍独立核对。
|
|
260
|
-
|
|
261
|
-
生产发布与数据变更流程的前置核验、离线 revision 候选和配置 CAS 操作见[发布准备证据与流程修订](docs/ops/release-preflight-evidence.md)。缺基础对象为 FAIL,证据或依赖清单不完整为 UNKNOWN,均不能进入生产执行;检查脚本 PASS 仅表示证据契约完整。
|
|
262
|
-
|
|
263
|
-
Topic 查询的 `processing` 提供最新未完成意图的 decisionId、status、appliedOperations、totalOperations 和有界 error,不返回动作正文。Observer 对应显示处理失败或处理中及动作进度,便于区分消息已接收、Topic 已决策与动作实际完成。
|
|
264
|
-
|
|
265
|
-
同一消息版本产生过已接受的 Task 动作或确认后,其执行归属保留在持久决策中;将消息从 Topic A 改归 Topic B 不会重新授予执行权。新的授权消息或新的事实版本需要重新判断,历史动作不会因归类修订而自动撤销。
|
|
266
|
-
|
|
267
|
-
Task 创建和重开时即生成稳定 `stagePlan`,主会话查询与叶子输入使用同一份阶段身份;阶段 ID 的存在不代表计划已批准。`affectedStageIds` 只接受真实 ID,不接受标题或猜测值。创建、重开和上下文修订在 Store 原子接纳点校验阶段及修订参数,接纳和执行共用参数规范化;错误参数不会生成决策、预约或确认,主会话可读取当前上下文后用同一请求纠正重提。
|
|
268
|
-
|
|
269
|
-
历史已接受的无效上下文修订,仅在整份决策都是 `task-context`、动作映射完整、所有动作未执行且 Task 幂等账本和执行版本均确认安全时,原子标记 `rejected` 并释放自身预约。原消息、Task、历史回复和 processedRevision 保留,Runtime 使用新的稳定请求身份重新判断尚未处理的输入。部分执行、含取消动作或结果不明的记录不会自动退回重放;存储错误仍按原错误链处理。`rejected` 是意图终态,不代表业务输入处理完成。
|
|
270
|
-
|
|
271
|
-
### 阻塞与人工介入
|
|
272
|
-
|
|
273
|
-
- 缺少任务信息:叶子进入 information waiting,由主会话结合 Task 所引用 Topic 固定版本的消息时间线,向真正能够补充该信息的一位或多位参与人询问。
|
|
274
|
-
- Task 遇到操作红线、环境异常或需要真人判断时进入 `human-intervention`,页面“人工介入”和 DWS 登录人本人私聊共享同一阻塞状态机。批准只对应阻塞单中精确列出的动作;处理意见可以收窄执行方式,不能授权另一动作,和原动作冲突时任务必须继续停住并提交范围冲突。
|
|
275
|
-
- waiting 不占 `maxConcurrentTasks` 执行名额;信息或人工回复到达时统一进入 FIFO queued,保留待恢复上下文。调度器把正在创建或恢复 Session 的 Task 计入容量,获得唯一名额后续接原叶子 Session 和 Goal。
|
|
276
|
-
- 钉钉人工处理必须引用阻塞消息并提供非空意见;明确回复“拒绝”“不同意”或“不批准”时记为不执行,其余回复使 Task 继续,并保留完整原文。Runtime 使用独立的个人 IM 实时订阅按被引用消息的 `messageId` 精确关联并恢复 Task,历史查询仅用于离线恢复;等待不设超时。
|
|
277
|
-
- 批准复用指纹绑定 taskId、runSequence、阻塞类别、规范化动作和风险;旧版本没有这些字段的记录不会自动授权当前轮次。
|
|
278
|
-
|
|
279
|
-
### 完成通知
|
|
280
|
-
|
|
281
|
-
任务完成后,叶子把结构化结果交回主会话。主会话结合 Task 所引用 Topic 固定版本的消息时间线选择最适合承接结果的历史消息,并通过结构化 `atOpenDingTalkIds` 通知所有确实需要获知结果或采取后续行动的参与人;Runtime 只接受所引用 Topic 版本中的消息和稳定人员 ID。发送前后均回读钉钉真实消息;包括组织未授权在内的读取失败不能绕过回读,发送受理或空回执不能代替送达证据。未确认的记录保持 pending。Outbox 记录尝试次数、最近尝试时间、失败环节和原因,看板区分待发送、发送受阻、投递异常与待回读。
|
|
282
|
-
|
|
283
|
-
任务进度、阻塞和完成通知只有 Runtime 一个群聊发送出口;叶子会话不得自行调用 DWS 向来源群发送通知。叶子提交完成结果后,Runtime 会把摘要、证据、交付物、部署信息和Task 所引用 Topic 固定版本的消息时间线交给常驻主会话组织群通知。叶子根据 DSH 注入的 Skill 描述自主选择适用 Skill;Runtime 不绑定具体 Skill,只要求已加载的 Skill 完成其资格判断、必要操作和验证闭环。工作区规则授权范围内的内部维护不扩大业务 Task 授权,也不得借此修改未授权的业务代码、业务数据、环境或外部系统。通知可合并重复表述,但必须保留不同关注点、限定条件、失败项和未验证/未部署边界,不能为了简短只复述摘要。Web 与内部恢复来源只用于触发内部操作,不得伪造群消息或参与人;历史 Task 必须经离线迁移生成可追溯 Topic 引用,不猜测缺失历史。同事或其 AI 助理发送的回复、任务回执和状态通知不会按文案或发送者在模型外过滤,而是进入常驻模型,由模型结合引用、上下文和任务索引决定忽略、回答或关联任务。判断复用已有任务还是新建任务时,必须综合消息前后文、连续消息的信息组、当时场景,以及候选任务的目标、动作范围、状态、完整消息历史和已记录上下文;关键词、词面重合或标题相似只用于寻找候选任务,不能直接作为关联或新建结论。
|
|
284
|
-
|
|
285
|
-
群消息中的图片、文档、文件、链接或其他外部资源如果承载任务所需信息,Resident 必须先完整读取。无法访问、下载、解析或读取不完整时,Resident 会先明确回复未获取到的具体信息并要求重新提供,不创建、不续接、不重开 Task;不得根据文件名、链接标题、缩略图或零散文字猜测资源正文。Runtime 还会对已知附件读取失败执行硬拦截,避免模型误判后提前启动任务。
|
|
286
|
-
|
|
287
|
-
叶子提交 `completed` 后,Runtime 会以 coordinator 内部上下文注入的方式,让常驻模型对照当前目标、runSequence、inputVersion 和 Topic 输入版本审查本轮结果和证据,并通过一次 `group_task_review_submit` 同时返回审阅回执与群通知草稿。审阅与回退通知最多内联 20 条、12,000 字符的相关 Topic 消息,整个请求限制为 40,000 字符。超长目标、验收、结果和索引保留 section 指针,通过 group_task_review_context_get 按 nextOffset 续读固定快照;长消息可通过同一工具或固定 Topic 原文分页读取。不能把截断片段当作完整证据。Runtime 只有在审阅通过且 Task 按当前版本原子完成后才将草稿写入发信箱;若期间出现新消息、Topic 或历史回复候选变化,则放弃旧草稿并重新协调。若新增或修订范围未完成、缺少验证,Task 保持 `running`,缺口反馈给原叶子继续执行,不生成完成通知。
|
|
288
|
-
|
|
289
|
-
除群成员明确撤销整个任务并提交 `task-cancel` 外,`running` 和 `waiting`(包括阻塞中)任务收到新增信息时只追加 `task-context`,继续同一执行轮次;只有 `completed` 任务(包括已归档展示)才允许 reopen 并初始化下一轮。完成轮次的 Session 空闲回收同时绑定 handle、Task 状态和 runSequence,不会释放已经重开的新轮次。Supervisor 发现 `running` Task 的叶子已 idle 时由 Runtime 幂等投递续执行请求;底层明确返回 Agent/Session unavailable 时,受控重建物理叶子并保留同一 Task、目标、Topic 固定版本和执行轮次,不让 Resident 绕用通用子代理消息接口。普通阶段 checkpoint 由 Host 校验版本、顺序和证据后直接确认;计划、冲突、范围或风险变化等需要语义判断的 checkpoint 才交给 Resident。相同未审阅 checkpoint 以持久 checkpointId 复用同一审阅;Supervisor 只恢复该请求,不重复追加。scope-conflict、evidence-gap、risk-changed 在无计划、已拒绝或旧流程失效时仍可报告,不能携带完成项或修改剩余进度;新异常可抢占未确认审阅,旧待审项归档,迟到审阅不得回写。完成审阅发起时即记录 completion-review-requested,拒绝或失败也保留时间与关联尝试标识,Task 完成、通知入队及真实送达分别记录。
|
|
290
|
-
|
|
291
|
-
### 只读状态问答与模型重试
|
|
292
|
-
|
|
293
|
-
已明确关联 Task 的简单状态问答可使用独立、无工具的短模型请求,读取当前 Topic 增量、Task 事实快照、审批边界及回复候选;执行动作、授权、复杂冲突或上下文不足时交回常驻处理。短请求沿用当前 Provider、模型和推理设置,提交仍通过 Task 集合、事实版本、策略、Topic 及回复候选校验,并复用原有 Outbox。
|
|
294
|
-
|
|
295
|
-
直接调用 DSH `LlmRuntime` 不经过 `agent/request-error`,不能假定 AgentLoop 的重试插件会替短请求重试。短问答 handler 是这一条调用链唯一的重试执行者:通过 `prepareCall()` 获取原生 Provider policy,遵守可重试错误码、次数、指数退避、抖动和 Retry-After;所有尝试共享同一请求与输入身份,并受总30秒模型预算限制。失败的部分正文不会提交;耗尽、不可重试或超时才交回常驻。遥测分别记录尝试次数、累计 usage、原生 finish kind/code/status,不记录 Provider 原始错误正文或凭据。
|
|
296
|
-
|
|
297
|
-
重试规则的确定性测试与真实模型测量见[性能测量记录](docs/acceptance/resident-leaf-coordination-repair/performance-measurement.md)。短模型往返不含路由和钉钉发送,不能代替端到端响应指标。
|
|
298
|
-
|
|
299
|
-
## Web 运行看板
|
|
300
|
-
|
|
301
|
-
`dingtalk-dsh-observer` 在 DSH Web header 中提供:
|
|
302
|
-
|
|
303
|
-

|
|
304
|
-
|
|
305
|
-
- 群聊会话:查看不同 resident Session 的分页收信箱和发信箱;状态固定在最左列,长内容最多显示两行,完整内容可通过悬停标题或详情查看。
|
|
306
|
-
- 任务看板:按待执行、执行中、等待中、已完成展示 Task,并打开 DSH 原生叶子对话和轨迹。活动任务卡片中的“任务”面板默认收起,只显示完成数/总数和进度;展开后显示各阶段任务、状态和耗时。执行轮次耗时统计不占用任务卡片空间,仍可通过 `/state/task-timings` 接口用于诊断。
|
|
307
|
-
- 任务表格同步:在“设置 → 插件 → 钉钉个人助理”填写钉钉在线电子表格地址,检查连接后选择目标工作表并启用。插件启动时立即同步,之后每 180 秒全量覆盖所选工作表;归档 Task 会在下一轮移除。所选工作表由插件托管,手工内容会被覆盖。
|
|
308
|
-
- 归档任务:查看已归档 Task,相关群消息仍可重新打开原任务。
|
|
309
|
-
- 人工介入:以与消息表格一致的状态列、行高和内容密度分页查看阻塞事项,并在页面明确选择“批准该事项并继续”或“不执行”。
|
|
310
|
-
- 告警:按类型查看当前异常和分页的已恢复历史。
|
|
311
|
-
|
|
312
|
-
看板不读取或重建 DSH Session JSONL,只通过插件状态接口展示业务投影;对话与轨迹仍由 DSH 原生页面负责。
|
|
313
|
-
|
|
314
|
-
## 状态与数据目录
|
|
315
|
-
|
|
316
|
-
正式运行使用标准用户级 `DSH_HOME`:
|
|
317
|
-
|
|
318
|
-
- 插件状态:`%USERPROFILE%\.dsh\storages\dingtalk-dsh-assistant\`
|
|
319
|
-
- DSH Session:`%USERPROFILE%\.dsh\sessions\`
|
|
320
|
-
- profile:`%USERPROFILE%\.dsh\profiles\`
|
|
321
|
-
|
|
322
|
-
仓库不提交本机 Session、消息、Task、授权记录、DWS profile、群 ID、打包产物或凭据。
|
|
323
|
-
|
|
324
|
-
## 开发与测试
|
|
325
|
-
|
|
326
|
-
```powershell
|
|
327
|
-
pnpm install
|
|
328
|
-
pnpm test
|
|
329
|
-
```
|
|
278
|
+
任务授权连续性:统筹和执行共同核对原始有权来源及近期补充,不以最初需求人身份过滤后续操作人指令。模型输入保留原始来源和最近19条来源(总计最多20条),完整来源可按目录读取;旧摘要不能覆盖新原文。技术恢复答复不新增授权,不自动撤销既有交办;后续明确暂停、撤销、改环境仍优先。已授权的必要准备继续完成,真实最终审批先准备后提出具体缺口;未知效果及原生权限拒绝继续有效。等待说明先说进度和具体缺口,再说需要用户决定什么,技术清单放证据。
|
|
330
279
|
|
|
331
|
-
|
|
280
|
+
话题决策通过 `topicUpdate.summary` 维护累计摘要,供历史话题检索及后续决策使用;已处理且摘要为空的话题沿现有只读摘要请求补齐,不重新执行任务或发送群回复。
|
|
332
281
|
|
|
333
|
-
|
|
282
|
+
通知回读允许已核验的 DWS 顶层无序列表项间换行(包括空行)消失;不删除正文中的空格、列表标记或段落边界,不变换代码围栏内列表。仍须独立核验原发送回执、目标群、发送者和原生引用;unknown 状态只回读,不重新发送。
|
|
334
283
|
|
|
335
|
-
|
|
336
|
-
- [任务 Supervisor](docs/spec/running-task-supervisor.md)
|
|
337
|
-
- [人工介入中心](docs/spec/authorization-approval-center.md)
|
|
338
|
-
- [钉钉人工介入回复实时生效](docs/spec/approval-reply-live-events.md)
|
|
339
|
-
- [运行看板](docs/spec/dingtalk-resident-observer.md)
|
|
284
|
+
执行续办以 `executionId` 保留会话身份;`task_delegate.key` 是单次委派请求的幂等键。同一请求重试复用原 key 与目标,已完成后的新输入、新步骤使用新的稳定请求 key,并保留原 executionId。相同 key 改目标仍拒绝;不得通过换 key 绕过未知操作保护或重放已完成动作。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dingtalk-dsh-assistant",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "在 DeepSeek Harness 中运行的钉钉群聊个人助理与任务看板",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -41,32 +41,47 @@
|
|
|
41
41
|
"node": ">=24"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@zzusp/dingtalk-dsh-assistant": "0.
|
|
45
|
-
"@zzusp/dingtalk-dsh-observer": "0.
|
|
44
|
+
"@zzusp/dingtalk-dsh-assistant": "2.0.0",
|
|
45
|
+
"@zzusp/dingtalk-dsh-observer": "2.0.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@deepseek-ai/cordis": "4.0.
|
|
49
|
-
"@deepseek-ai/
|
|
50
|
-
"@deepseek-ai/dsh-
|
|
51
|
-
"@deepseek-ai/dsh-
|
|
52
|
-
"@deepseek-ai/dsh-
|
|
53
|
-
"@deepseek-ai/dsh-
|
|
54
|
-
"@deepseek-ai/dsh-
|
|
55
|
-
"@deepseek-ai/dsh-
|
|
56
|
-
"@deepseek-ai/dsh-
|
|
57
|
-
"@deepseek-ai/dsh-
|
|
58
|
-
"@deepseek-ai/dsh-
|
|
59
|
-
"@deepseek-ai/dsh-
|
|
60
|
-
"@deepseek-ai/dsh-
|
|
61
|
-
"@deepseek-ai/dsh-
|
|
62
|
-
"@deepseek-ai/dsh-
|
|
63
|
-
"@deepseek-ai/dsh-
|
|
64
|
-
"@deepseek-ai/dsh-
|
|
65
|
-
"@deepseek-ai/dsh-
|
|
66
|
-
"@deepseek-ai/dsh-
|
|
67
|
-
"@deepseek-ai/dsh-
|
|
68
|
-
"@deepseek-ai/dsh-
|
|
69
|
-
"@deepseek-ai/dsh-
|
|
48
|
+
"@deepseek-ai/cordis": "4.0.5-alpha.1",
|
|
49
|
+
"@deepseek-ai/cordis-plugin-loader": "1.0.6-alpha.1",
|
|
50
|
+
"@deepseek-ai/dsh-commands": "0.2.1-alpha.2",
|
|
51
|
+
"@deepseek-ai/dsh-launch-environment": "0.2.1-alpha.2",
|
|
52
|
+
"@deepseek-ai/dsh-sandbox-policy": "0.2.1-alpha.2",
|
|
53
|
+
"@deepseek-ai/dsh-settings": "0.2.1-alpha.2",
|
|
54
|
+
"@deepseek-ai/dsh-shell": "0.2.1-alpha.2",
|
|
55
|
+
"@deepseek-ai/dsh-subprocess": "0.2.1-alpha.2",
|
|
56
|
+
"@deepseek-ai/dsh-util-time": "0.2.1-alpha.2",
|
|
57
|
+
"@deepseek-ai/dsh-util-values": "0.2.1-alpha.2",
|
|
58
|
+
"@deepseek-ai/dsh-agent": "0.2.1-alpha.2",
|
|
59
|
+
"@deepseek-ai/dsh-agent-instructions": "0.2.1-alpha.2",
|
|
60
|
+
"@deepseek-ai/dsh-agent-loop": "0.2.1-alpha.2",
|
|
61
|
+
"@deepseek-ai/dsh-attachment": "0.2.1-alpha.2",
|
|
62
|
+
"@deepseek-ai/dsh-credentials-local": "0.2.1-alpha.2",
|
|
63
|
+
"@deepseek-ai/dsh-fs": "0.2.1-alpha.2",
|
|
64
|
+
"@deepseek-ai/dsh-goal": "0.2.1-alpha.2",
|
|
65
|
+
"@deepseek-ai/dsh-goal-round-driver": "0.2.1-alpha.2",
|
|
66
|
+
"@deepseek-ai/dsh-home-paths": "0.2.1-alpha.2",
|
|
67
|
+
"@deepseek-ai/dsh-llm": "0.2.1-alpha.2",
|
|
68
|
+
"@deepseek-ai/dsh-permission-presets": "0.2.1-alpha.2",
|
|
69
|
+
"@deepseek-ai/dsh-sandbox": "0.2.1-alpha.2",
|
|
70
|
+
"@deepseek-ai/dsh-scope": "0.2.1-alpha.2",
|
|
71
|
+
"@deepseek-ai/dsh-session": "0.2.1-alpha.2",
|
|
72
|
+
"@deepseek-ai/dsh-session-persistence": "0.2.1-alpha.2",
|
|
73
|
+
"@deepseek-ai/dsh-session-projection": "0.2.1-alpha.2",
|
|
74
|
+
"@deepseek-ai/dsh-working-directory": "0.2.1-alpha.2",
|
|
75
|
+
"@deepseek-ai/dsh-session-persistence-jsonl": "0.2.1-alpha.2",
|
|
76
|
+
"@deepseek-ai/dsh-session-title": "0.2.1-alpha.2",
|
|
77
|
+
"@deepseek-ai/dsh-storage": "0.2.1-alpha.2",
|
|
78
|
+
"@deepseek-ai/dsh-storage-domain": "0.2.1-alpha.2",
|
|
79
|
+
"@deepseek-ai/dsh-storage-json": "0.2.1-alpha.2",
|
|
80
|
+
"@deepseek-ai/dsh-subagent": "0.2.1-alpha.2",
|
|
81
|
+
"@deepseek-ai/dsh-system-prompt": "0.2.1-alpha.2",
|
|
82
|
+
"@deepseek-ai/dsh-tools": "0.2.1-alpha.2",
|
|
83
|
+
"@deepseek-ai/dsh-user-approval": "0.2.1-alpha.2",
|
|
84
|
+
"js-yaml": "4.1.1",
|
|
70
85
|
"react": "^18.2.0",
|
|
71
86
|
"undici": "^7.16.0",
|
|
72
87
|
"zod": "^4.0.0"
|
|
@@ -75,6 +90,6 @@
|
|
|
75
90
|
"profile:install": "pwsh -NoProfile -File scripts/install-profile.ps1",
|
|
76
91
|
"profile:dump": "pwsh -NoProfile -File scripts/dump-profile.ps1",
|
|
77
92
|
"start": "pwsh -NoProfile -File scripts/start-resident.ps1",
|
|
78
|
-
"test": "node --test"
|
|
93
|
+
"test": "node --test --test-concurrency=4 \"test/*.test.js\""
|
|
79
94
|
}
|
|
80
95
|
}
|