GM-HZ/dsh-workflow--packages-dsh1

@gm-hz/dsh-dag-workflow-host

Cordis service provider that integrates DSH with the DAG workflow core

包名
@gm-hz/dsh-dag-workflow-host
版本
0.1.0
许可证
MIT
最近更新
2026年8月23日

安装

此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗

@gm-hz/dsh-dag-workflow-host

@gm-hz/dsh-dag-workflow-core 装配成 DSH 原生 Cordis 服务。插件发布:

  • ctx.workflowNodes:可处置的 Workflow 节点注册服务。
  • ctx.workflowTemplates:默认内存 Catalog provider;生产环境可替换为 SQLite provider。
  • ctx.workflowRuns:默认内存 Run Store provider;生产环境可替换为 SQLite provider。
  • ctx.dagWorkflowEngine:holder-owned DAG run 服务。
  • dag-workflow/event:供 Host/UI 观察的实时运行事件。
  • dsh-dag-workflow/* Session 摘要事件:用于重放顶层 run/node 状态。
  • 八个 workflow_* authoring tools 与 model/user 均可调用的 bundled workflow-builder Skill。

装配

import * as DagWorkflow from '@gm-hz/dsh-dag-workflow-host'

await ctx.plugin(DagWorkflow)

传入 { catalog: 'external', runStore: 'external' } 可跳过默认内存 provider,并显式装配 SqliteWorkflowTemplatesProviderSqliteWorkflowRunsProvider

生产环境可以同时配置 scoped secret bridge 与自动恢复 authority:

await ctx.plugin(DagWorkflow, {
  catalog: 'external',
  runStore: 'external',
  resolveSecret: ({ ref, parent, signal }) => credentials.resolve(ref, { agent: parent, signal }),
  recovery: {
    reference: parent => sessionIdOf(parent),
    resolve: (ownerRef, { signal }) => agents.resolveSession(ownerRef, signal),
  },
})

reference 只返回可持久化的查找键;Agent object 永不进入数据库。启动协调器只恢复 running + ownerRef + valid Agent,paused run 等待操作者。secret 原值只进入瞬时节点输入,若节点输出包含原值则拒绝 checkpoint。

插件声明 inject = ['tools', 'subagents', 'approval', 'skills']dsh.tool@1 始终调用当前 Cordis scope 下的 ctx.tools.execute()dsh.agent@1 使用 ctx.subagents.start() 并始终 dispose holder-owned run;dsh.human-approval@1 使用 ctx.approval.request()。三者都传入发起运行的 owning Agent、caller-owned signal 和稳定的 run/node call id。

core.subworkflow@1core.foreach@1 还会读取 ctx.workflowTemplates 中的精确 published revision。每个 child 是同一 ctx.workflowRuns 中的确定性 run;子流程暂停时父流程进入 paused/needs_attention,不会把未知副作用误报成普通失败。

Authoring tools 包括 workflow_nodes_listworkflow_draft_create/read/updateworkflow_validateworkflow_diffworkflow_publishworkflow_run。它们作为普通 DSH tools 重新经过 scope、guard、approval 与 observer policy;published run 必须指定精确 revision。Skill 只引导调用这些工具,不自行读写 Catalog。

const run = ctx.dagWorkflowEngine.start({
  template,
  inputs: { message: 'hello' },
  parent: agent,
})

const result = await run.result
await run.dispose()

const recovered = ctx.dagWorkflowEngine.resume({
  runId: run.id,
  parent: agent,
  unknownNodeResolutions: { call: 'retry' },
})

parent 在公共类型上接受任意 object,以兼容 DSH 尚未同步发布的 Agent 类型版本;运行边界会验证它确实暴露可追加的 Session。Provider 对 Tools/Agent 使用窄结构桥接,唯一硬 peer dependency 是与当前 Harness 一致的 @deepseek-ai/cordis@^4.0.1

生命周期

  • 无效模板与输入在 run 发布前同步抛错。
  • 已发布 run 的 result 始终 resolve。
  • consumer 持有并最终 dispose() run。
  • Provider 卸载时取消并等待全部活跃 run 收敛。
  • Session 写入、实时事件 listener 和 request observer 的错误全部被隔离,不改变运行结果。

Cordis Service 不能使用 JavaScript 原生 #private 字段:服务由 Proxy 暴露,方法中的 this 是代理。实现统一使用 TypeScript private,这个约束也适用于后续 Catalog、Store 和 Canvas RPC service。