dingtalk-dsh-assistant 0.5.13 → 0.5.14
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 +20 -0
- package/README.md +20 -8
- package/package.json +6 -3
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,25 @@
|
|
|
4
4
|
|
|
5
5
|
## [未发布]
|
|
6
6
|
|
|
7
|
+
## [0.5.14] - 2026-09-10
|
|
8
|
+
|
|
9
|
+
### 新增
|
|
10
|
+
|
|
11
|
+
- 为常驻会话增加只读状态短答路径;在任务、职责和 Topic 快照保持一致时,直接复用当前模型生成简短答复,减少完整协调回合的等待。
|
|
12
|
+
- 持久化叶子报告的接收、处理和通知状态;重启后可恢复尚未通知的结果,失败报告按原提交身份显式重试。
|
|
13
|
+
|
|
14
|
+
### 变更
|
|
15
|
+
|
|
16
|
+
- 常驻与叶子统一使用带版本和来源的当前事实、阶段计划与审批快照;任务输入变化只使受影响阶段失效,历史结果保留为历史事实。
|
|
17
|
+
- 审阅与流程正文只从当前 Session 可见的结构化工具结果复用;压缩或内容变化后重新读取,避免重复注入和过期上下文继续生效。
|
|
18
|
+
- 发布和数据变更流程增加生产只读基线、依赖全集、隔离演练、停止条件及精确批准范围的前置检查。
|
|
19
|
+
|
|
20
|
+
### 修复
|
|
21
|
+
|
|
22
|
+
- 修复叶子等待审批期间重复提交报告、报告处理后通知失败导致重复执行,以及并发唤醒遗漏后续报告的问题。
|
|
23
|
+
- 修复协调审阅在重启、重试耗尽和通知恢复时重复调用模型或产生孤立请求的问题。
|
|
24
|
+
- 修复活动心跳导致状态短答快照无意义失效,以及工具 Schema 与运行时 Zod 契约漂移的问题。
|
|
25
|
+
|
|
7
26
|
## [0.5.13] - 2026-09-08
|
|
8
27
|
|
|
9
28
|
### 新增
|
|
@@ -195,6 +214,7 @@
|
|
|
195
214
|
- assistant、observer 与发行包统一使用同一个产品版本号。
|
|
196
215
|
- Node.js 最低版本与实际 zstd Runtime 要求一致,调整为 24。
|
|
197
216
|
|
|
217
|
+
[0.5.14]: https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases/tag/v0.5.14
|
|
198
218
|
[0.5.13]: https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases/tag/v0.5.13
|
|
199
219
|
[0.5.12]: https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases/tag/v0.5.12
|
|
200
220
|
[0.5.11]: https://github.com/HiQ-AI/dingtalk-dsh-assistant/releases/tag/v0.5.11
|
package/README.md
CHANGED
|
@@ -184,13 +184,13 @@ pwsh -NoProfile -File .\scripts\start-web.ps1
|
|
|
184
184
|
|
|
185
185
|

|
|
186
186
|
|
|
187
|
-
1. 设置 Agent
|
|
187
|
+
1. 设置 Agent 名称和别名,多个名称使用英文逗号分隔。群职责定义本群身份关系、负责范围和介入要求;需要作为任务称呼的名字同时加入别名配置。DWS 登录人姓名不享有特殊准入或静默规则。
|
|
188
188
|
2. 设置 Agent 工作区绝对目录。DSH 会从该目录原生发现 `AGENTS.md`。
|
|
189
189
|
3. 设置默认模型、推理深度和叶子任务并行上限,默认并行上限为 5。
|
|
190
190
|
4. 按需设置网络代理。
|
|
191
|
-
5. 叶子通用执行规范已内置,“叶子会话提示词”可留空,仅用于补充个人或团队的通用偏好与约束;已有自定义内容会保留并追加。任务流程提示词默认逐项折叠,点击名称展开编辑名称、适用说明、流程和验收要求。叶子像使用 Skill 一样根据任务目标匹配索引、按需组合加载,不限制固定类型或流程数量;加载即记录,压缩/恢复后重新注入当前组合,并可随阶段变化增减。常驻主 Session
|
|
191
|
+
5. 叶子通用执行规范已内置,“叶子会话提示词”可留空,仅用于补充个人或团队的通用偏好与约束;已有自定义内容会保留并追加。任务流程提示词默认逐项折叠,点击名称展开编辑名称、适用说明、流程和验收要求。叶子像使用 Skill 一样根据任务目标匹配索引、按需组合加载,不限制固定类型或流程数量;加载即记录,压缩/恢复后重新注入当前组合,并可随阶段变化增减。常驻主 Session 不常驻加载这些正文,只在计划或完成审阅请求中通过流程引用按需读取同一版本。
|
|
192
192
|
|
|
193
|
-
|
|
193
|
+
叶子的 `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` 参数,原进度不变;核对该项真实证据并按回执修正,确认接受后再推进下一阶段。
|
|
194
194
|
6. 通过群名称模糊搜索添加常驻群,并为每个群配置会话职责。
|
|
195
195
|
|
|
196
196
|
确认页面的环境检查显示 DWS 已安装、已登录后,再在实际 profile 中启用:
|
|
@@ -237,7 +237,7 @@ Task 可设置独立的简短标题用于看板展示;标题与 objective 分
|
|
|
237
237
|
|
|
238
238
|
运行看板 Header 的高度和字体规格与 Session 页面一致。各页不再重复显示页面标题和子标题;任务列按 Header 与主内容实际占用计算剩余视口高度,卡片在列内独立滚动,页面本身不会因状态桶高度产生额外补白或纵向滚动。
|
|
239
239
|
|
|
240
|
-
Runtime 使用 DSH 原生 subagent 和 Goal 创建叶子 Session。Task 保存标题、目标、验收标准、执行状态、结果,以及 `topicRefs: [{topicId, revision}]` 和 `inputVersion`;不保存 sourceMessageId、triggerHistory、messageHistory 或群消息正文副本。`group_task_context_get` 返回执行约定与 Topic 引用,原始上下文由 `group_topic_context_get` 按固定 revision 分页读取。只有确实影响任务的新增信息才推进 inputVersion,不向每个关联 Task 广播全部讨论。运行中和等待中的 Task 接纳上下文时继续原轮次;完成或归档 Task
|
|
240
|
+
Runtime 使用 DSH 原生 subagent 和 Goal 创建叶子 Session。Task 保存标题、目标、验收标准、执行状态、结果,以及 `topicRefs: [{topicId, revision}]` 和 `inputVersion`;不保存 sourceMessageId、triggerHistory、messageHistory 或群消息正文副本。`group_task_context_get` 返回执行约定与 Topic 引用,原始上下文由 `group_topic_context_get` 按固定 revision 分页读取。只有确实影响任务的新增信息才推进 inputVersion,不向每个关联 Task 广播全部讨论。运行中和等待中的 Task 接纳上下文时继续原轮次;完成或归档 Task 只有被明确重开才开启新轮次。目标发生实质变化时,续接动作必须同时提交概括当前完整目标的新标题;Runtime 原子更新目标和标题,并由 objectiveHistory、titleHistory 与 runHistory 保留旧值。普通信息补充、等待恢复和异常唤醒不修改标题,归档不删除历史。
|
|
241
241
|
|
|
242
242
|
消息的 `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 在读完前拒绝决策。
|
|
243
243
|
|
|
@@ -249,7 +249,11 @@ Runtime 使用 DSH 原生 subagent 和 Goal 创建叶子 Session。Task 保存
|
|
|
249
249
|
|
|
250
250
|
人工 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` 发起业务动作。
|
|
251
251
|
|
|
252
|
-
取消入口 `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
|
|
252
|
+
取消入口 `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 补充会合并固定版本引用,不覆盖此前执行依据。
|
|
253
|
+
|
|
254
|
+
叶子报告通过可选 submissionId 或规范内容身份持久接纳,同 ID 不同内容拒绝。input-wait/review-wait 代表已保存、尚未批准推进;叶子等待 Runtime 事件,不重复提交探测状态。旧版本合法报告只归历史,不覆盖新目标;输入解除或重启从持久记录恢复,审阅和通知复用稳定身份。最终接受、阶段通过与业务验收仍独立核对。
|
|
255
|
+
|
|
256
|
+
生产发布与数据变更流程的前置核验、离线 revision 候选和配置 CAS 操作见[发布准备证据与流程修订](docs/ops/release-preflight-evidence.md)。缺基础对象为 FAIL,证据或依赖清单不完整为 UNKNOWN,均不能进入生产执行;检查脚本 PASS 仅表示证据契约完整。
|
|
253
257
|
|
|
254
258
|
Topic 查询的 `processing` 提供最新未完成意图的 decisionId、status、appliedOperations、totalOperations 和有界 error,不返回动作正文。Observer 对应显示处理失败或处理中及动作进度,便于区分消息已接收、Topic 已决策与动作实际完成。
|
|
255
259
|
|
|
@@ -265,15 +269,23 @@ Topic 查询的 `processing` 提供最新未完成意图的 decisionId、status
|
|
|
265
269
|
|
|
266
270
|
### 完成通知
|
|
267
271
|
|
|
268
|
-
任务完成后,叶子把结构化结果交回主会话。主会话结合 Task 所引用 Topic 固定版本的消息时间线选择最适合承接结果的历史消息,并通过结构化 `atOpenDingTalkIds` 通知所有确实需要获知结果或采取后续行动的参与人;Runtime 只接受所引用 Topic 版本中的消息和稳定人员 ID
|
|
272
|
+
任务完成后,叶子把结构化结果交回主会话。主会话结合 Task 所引用 Topic 固定版本的消息时间线选择最适合承接结果的历史消息,并通过结构化 `atOpenDingTalkIds` 通知所有确实需要获知结果或采取后续行动的参与人;Runtime 只接受所引用 Topic 版本中的消息和稳定人员 ID。发送前后均回读钉钉真实消息;包括组织未授权在内的读取失败不能绕过回读,发送受理或空回执不能代替送达证据。未确认的记录保持 pending。Outbox 记录尝试次数、最近尝试时间、失败环节和原因,看板区分待发送、发送受阻、投递异常与待回读。
|
|
269
273
|
|
|
270
274
|
任务进度、阻塞和完成通知只有 Runtime 一个群聊发送出口;叶子会话不得自行调用 DWS 向来源群发送通知。叶子提交完成结果后,Runtime 会把摘要、证据、交付物、部署信息和Task 所引用 Topic 固定版本的消息时间线交给常驻主会话组织群通知。叶子根据 DSH 注入的 Skill 描述自主选择适用 Skill;Runtime 不绑定具体 Skill,只要求已加载的 Skill 完成其资格判断、必要操作和验证闭环。工作区规则授权范围内的内部维护不扩大业务 Task 授权,也不得借此修改未授权的业务代码、业务数据、环境或外部系统。通知可合并重复表述,但必须保留不同关注点、限定条件、失败项和未验证/未部署边界,不能为了简短只复述摘要。Web 与内部恢复来源只用于触发内部操作,不得伪造群消息或参与人;历史 Task 必须经离线迁移生成可追溯 Topic 引用,不猜测缺失历史。同事或其 AI 助理发送的回复、任务回执和状态通知不会按文案或发送者在模型外过滤,而是进入常驻模型,由模型结合引用、上下文和任务索引决定忽略、回答或关联任务。判断复用已有任务还是新建任务时,必须综合消息前后文、连续消息的信息组、当时场景,以及候选任务的目标、动作范围、状态、完整消息历史和已记录上下文;关键词、词面重合或标题相似只用于寻找候选任务,不能直接作为关联或新建结论。
|
|
271
275
|
|
|
272
276
|
群消息中的图片、文档、文件、链接或其他外部资源如果承载任务所需信息,Resident 必须先完整读取。无法访问、下载、解析或读取不完整时,Resident 会先明确回复未获取到的具体信息并要求重新提供,不创建、不续接、不重开 Task;不得根据文件名、链接标题、缩略图或零散文字猜测资源正文。Runtime 还会对已知附件读取失败执行硬拦截,避免模型误判后提前启动任务。
|
|
273
277
|
|
|
274
|
-
叶子提交 `completed` 后,Runtime
|
|
278
|
+
叶子提交 `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`,缺口反馈给原叶子继续执行,不生成完成通知。
|
|
279
|
+
|
|
280
|
+
除群成员明确撤销整个任务并提交 `task-cancel` 外,`running` 和 `waiting`(包括阻塞中)任务收到新增信息时只追加 `task-context`,继续同一执行轮次;只有 `completed` 任务(包括已归档展示)才允许 reopen 并初始化下一轮。完成轮次的 Session 空闲回收同时绑定 handle、Task 状态和 runSequence,不会释放已经重开的新轮次。普通阶段 checkpoint 由 Host 校验版本、顺序和证据后直接确认;计划、冲突、范围或风险变化等需要语义判断的 checkpoint 才交给 Resident。相同未审阅 checkpoint 以持久 checkpointId 复用同一审阅;Supervisor 只恢复该请求,不重复追加。scope-conflict、evidence-gap、risk-changed 在无计划、已拒绝或旧流程失效时仍可报告,不能携带完成项或修改剩余进度;新异常可抢占未确认审阅,旧待审项归档,迟到审阅不得回写。完成审阅发起时即记录 completion-review-requested,拒绝或失败也保留时间与关联尝试标识,Task 完成、通知入队及真实送达分别记录。
|
|
281
|
+
|
|
282
|
+
### 只读状态问答与模型重试
|
|
283
|
+
|
|
284
|
+
已明确关联 Task 的简单状态问答可使用独立、无工具的短模型请求,读取当前 Topic 增量、Task 事实快照、审批边界及回复候选;执行动作、授权、复杂冲突或上下文不足时交回常驻处理。短请求沿用当前 Provider、模型和推理设置,提交仍通过 Task 集合、事实版本、策略、Topic 及回复候选校验,并复用原有 Outbox。
|
|
285
|
+
|
|
286
|
+
直接调用 DSH `LlmRuntime` 不经过 `agent/request-error`,不能假定 AgentLoop 的重试插件会替短请求重试。短问答 handler 是这一条调用链唯一的重试执行者:通过 `prepareCall()` 获取原生 Provider policy,遵守可重试错误码、次数、指数退避、抖动和 Retry-After;所有尝试共享同一请求与输入身份,并受总30秒模型预算限制。失败的部分正文不会提交;耗尽、不可重试或超时才交回常驻。遥测分别记录尝试次数、累计 usage、原生 finish kind/code/status,不记录 Provider 原始错误正文或凭据。
|
|
275
287
|
|
|
276
|
-
|
|
288
|
+
重试规则的确定性测试与真实模型测量见[性能测量记录](docs/acceptance/resident-leaf-coordination-repair/performance-measurement.md)。短模型往返不含路由和钉钉发送,不能代替端到端响应指标。
|
|
277
289
|
|
|
278
290
|
## Web 运行看板
|
|
279
291
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dingtalk-dsh-assistant",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.14",
|
|
4
4
|
"description": "在 DeepSeek Harness 中运行的钉钉群聊个人助理与任务看板",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -41,16 +41,19 @@
|
|
|
41
41
|
"node": ">=24"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@zzusp/dingtalk-dsh-assistant": "0.5.
|
|
45
|
-
"@zzusp/dingtalk-dsh-observer": "0.5.
|
|
44
|
+
"@zzusp/dingtalk-dsh-assistant": "0.5.14",
|
|
45
|
+
"@zzusp/dingtalk-dsh-observer": "0.5.14"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@deepseek-ai/cordis": "4.0.2",
|
|
49
49
|
"@deepseek-ai/dsh-agent": "0.1.2-rc.1",
|
|
50
50
|
"@deepseek-ai/dsh-agent-instructions": "0.1.2-rc.1",
|
|
51
|
+
"@deepseek-ai/dsh-agent-loop": "0.1.2-rc.1",
|
|
51
52
|
"@deepseek-ai/dsh-attachment": "0.1.2-rc.1",
|
|
52
53
|
"@deepseek-ai/dsh-code-runtime": "0.1.2-rc.1",
|
|
53
54
|
"@deepseek-ai/dsh-fs": "0.1.2-rc.1",
|
|
55
|
+
"@deepseek-ai/dsh-goal": "0.1.2-rc.1",
|
|
56
|
+
"@deepseek-ai/dsh-goal-round-driver": "0.1.2-rc.1",
|
|
54
57
|
"@deepseek-ai/dsh-home-paths": "0.1.2-rc.1",
|
|
55
58
|
"@deepseek-ai/dsh-invariants": "0.1.2-rc.1",
|
|
56
59
|
"@deepseek-ai/dsh-llm": "0.1.2-rc.1",
|