DEEPSEEK HARNESS 插件工具包

让业务包只写业务。

连接、推送、委托、校验——这几件与业务无关、却每个项目都要重写一遍的事,收进一个包里,默认安全,按需启用。

快速开始 阅读文档

v0.1.0 · 尚未发布到 npm

六个 Service

默认安全

  • 密钥只从环境变量、钥匙串或 dsh 凭据文件读取,不传给本包启动的任何子进程;钉钉、飞书的凭据由 dws、lark-cli 自己管理。
  • 来自 WebSocket 的数据和 Agent 的输出都视为不可信:Agent 默认只读、在独立的空目录中运行,输出经过 Schema 与业务白名单校验后才应触发副作用。
  • 只允许 wss://,不关闭证书校验,不跟随重定向。
  • 日志和错误统一脱敏,不记录鉴权头、API Key、webhook token 与完整消息正文。

阅读安全说明

按需启用

六个 Service 在本包的 bundle 中以禁用状态注册。只有在 Profile 的 cordis.patch.yml 中启用的 Service 才会加载并校验配置;未启用的 Service 不影响其他部分。

- id: agent-kit-ws
  disabled: false
- id: agent-kit-feishu
  disabled: false
  config:
    identity: bot
    defaultTarget: { chatId: oc_xxxx }
- id: agent-kit-notify
  disabled: false
  config:
    channel: feishu

装了可选的运维工具 @mc/dsh-agent-kit-admin 时,也可以用 setup 交互式生成这段配置,或在 dsh Web 的设置页里直接勾选。

业务包长这样

业务包只 inject 用到的 Service,协议、路由、模板和流程留在自己的代码里。发通知用 ctx.notify,渠道留给运维切换。

export const inject = ['agentWs', 'notify', 'agentTasks', 'jev']

export function apply(ctx: Context, config: Config) {
  ctx.agentWs.connect<Frame>({
    url: config.url,
    headers: async () => ({ 'X-Token': await getToken() }),
    onMessage: async (frame, { signal }) => {
      // 委托:外部数据用 untrusted() 包裹,Agent 默认只读
      const draft = await ctx.agentTasks.run<Result>({
        provider: 'claude-code',
        title: `classify ${frame.id}`,
        prompt: [CLASSIFY_INSTRUCTIONS, untrusted('event', frame.input)],
        outputSchema: ResultSchema,
        signal,
      })

      // 校验:用 Jev 判断候选结果是否与输入相符
      const { answers } = await ctx.jev.judge({
        state: { input: frame.input, candidate: draft.output },
        questions: { wrong: noul('候选结果与输入证据不符') },
        signal,
      })

      // 通知:不相符时告警;发到钉钉还是飞书由 agent-kit-notify 的 channel 决定
      if (answers.wrong.noul >= 0.7) {
        await ctx.notify.send({ title: '需要人工复核', markdown: render(frame, draft), idempotencyKey: frame.id })
      }
    },
  })
}

了解它与 dsh 的关系

三步开始

$dsh plugin --profile my-agent add @mc/dsh-agent-kit @mc/dsh-agent-kit-admin
$npx @mc/dsh-agent-kit-admin setup --profile my-agent
$npx @mc/dsh-agent-kit-admin doctor --profile my-agent

@mc/dsh-agent-kit-admin 是可选的运维工具(setup、doctor 与设置页);不装它时,直接编辑 cordis.patch.yml 即可。

完整的快速开始