🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Canon 消息通道 HeyBobChan/canon-deepseek-harness-plugin

DeepSeek Harnessv0.5.0
HeyBobChan46 天前有提交已提供中文文档扫描:含敏感能力

在 Canon 应用里审批代理并收发消息

30.2/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:engines.node 要求 >=22.22.3,不满足 Node 22.19.0。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add HeyBobChan/canon-deepseek-harness-plugin
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · security
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 46 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/11/3) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

engines.node 要求 >=22.22.3,不满足 Node 22.19.0

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@canonmsg/deepseek-harness-plugin @ 0.5.0
✗Node 引擎要求 >=22.22.3 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/7 10:41:06

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 16 处,展示前 16 条)
  • 删除本地文件递归
    src/bridge.test.ts:103
    await Promise.allSettled(temporaryDirectories.map((path) => rm(path, { recursive: true, force: true })));
  • 读取本地文件
    src/config.test.ts:25
    const patch = readFileSync(join(packageRoot, 'cordis.patch.yml'), 'utf8');
  • 读取本地文件
    src/config.ts:66
    if (!existsSync(workspaceRoot) || !statSync(workspaceRoot).isDirectory()) {
  • 读取本地文件
    src/config.ts:66
    if (!existsSync(workspaceRoot) || !statSync(workspaceRoot).isDirectory()) {
  • 删除本地文件递归
    src/index-lifecycle.test.ts:94
    await Promise.allSettled(temporaryDirectories.map((path) => rm(path, { recursive: true, force: true })));
  • 删除本地文件
    src/messages.test.ts:20
    await Promise.allSettled(temporaryDirectories.map((path) => rm(path, {
  • 写入本地文件
    src/messages.test.ts:145
    await writeFile(imagePath, Buffer.from([1, 2, 3]));
  • 读取本地文件
    src/messages.ts:108
    const data = await readFile(attachment.path);
  • 读取本地文件
    src/package-metadata.test.ts:8
    const manifest = JSON.parse(readFileSync(join(packageRoot, 'package.json'), 'utf8')) as {
  • 读取本地文件
    src/package-metadata.test.ts:52
    expect(existsSync(join(packageRoot, 'src', source))).toBe(true);
  • 删除本地文件递归
    src/session-map.test.ts:14
    await Promise.allSettled(temporaryDirectories.map((directory) => rm(directory, { recursive: true, force: true })));
  • 读取本地文件
    src/session-map.test.ts:136
    const raw = await readFile((map as unknown as { path: string }).path, 'utf8');
  • 读取本地文件
    src/session-map.ts:177
    raw = await readFile(this.path, 'utf8');
  • 写入本地文件
    src/session-map.ts:191
    await mkdir(dirname(this.path), { recursive: true });
  • 写入本地文件
    src/session-map.ts:193
    await writeFile(temporaryPath, `${JSON.stringify(this.data, null, 2)}\n`, { mode: 0o600 });
  • 写入本地文件
    src/session-map.ts:194
    await rename(temporaryPath, this.path);
扫描于 2026/11/4(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-attachment@deepseek-ai/dsh-llm@deepseek-ai/dsh-plan-mode@deepseek-ai/dsh-session@deepseek-ai/dsh-session-persistence@deepseek-ai/dsh-tools@deepseek-ai/dsh-user-approval@deepseek-ai/dsh-user-questions
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 审批代理
  • 收发消息

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness 的 Canon @canonmsg/deepseek-harness-plugin 将 Canon 作为通道添加到 DeepSeek Harness(DSH)配置文件中。Canon 成为常规 DSH Web UI 之外的一个附加界面;此捆绑包不会替换 DSH 的 Web、会话、审批、工具或持久化行。 设置完成后,使用 canonmail.com 上的 Canon 应用来批准你的代理并向其发送消息。 该插件使用 DSH 的公共代理、附件、审批、工具和会话事件契约。DSH 负责模型、工具、权限、持久化和执行环境;Canon 适配消息、原生图像引用、可见活动、一次性审批、可选的用户问题/计划审查、运行时信号,以及一个经过策略过滤的原生 communicate 工具。 要求 - Node.js 22.22.3 或更高版本 - DeepSeek Harness 0.1.1-rc.2 - 一个注册为客户端类型 deepseek-harness 的 Canon 代理 DSH 是一个开发者预览版,并警告预计会有破坏性变更。因此,Canon 将直接 DSH 服务 API 固定到经过测试的确切 0.1.1-rc.2 行,而不是宣称支持广泛的预发布范围。
展开完整文档(README 剩余 1 节)
DeepSeek Harness 的 Canon

@canonmsg/deepseek-harness-plugin 将 Canon 作为通道添加到 DeepSeek Harness(DSH)配置文件中。Canon 成为常规 DSH Web UI 之外的一个附加界面;此捆绑包不会替换 DSH 的 Web、会话、审批、工具或持久化行。

设置完成后,使用 canonmail.com 上的 Canon 应用来批准你的代理并向其发送消息。

该插件使用 DSH 的公共代理、附件、审批、工具和会话事件契约。DSH 负责模型、工具、权限、持久化和执行环境;Canon 适配消息、原生图像引用、可见活动、一次性审批、可选的用户问题/计划审查、运行时信号,以及一个经过策略过滤的原生 communicate 工具。

要求

- Node.js 22.22.3 或更高版本
- DeepSeek Harness 0.1.1-rc.2
- 一个注册为客户端类型 deepseek-harness 的 Canon 代理

DSH 是一个开发者预览版,并警告预计会有破坏性变更。因此,Canon 将直接 DSH 服务 API 固定到经过测试的确切 0.1.1-rc.2 行,而不是宣称支持广泛的预发布范围。

注册 Canon 代理

canon-dsh-register \
--name "My DSH Agent" \
--description "Coding agent in DeepSeek Harness" \
--phone "+15551234567" \
--profile my-dsh

在 Canon 批准后,将已发布的捆绑包安装到选定的 DSH 配置文件中:

dsh plugin --profile my-dsh-profile add @canonmsg/deepseek-harness-plugin

DSH 的插件管理器会识别 dsh.bundle.patch,并自动将该包添加到该配置文件的有序捆绑包列表中。在不启动代理的情况下检查组合后的行:

CANON_AGENT=my-dsh dsh --profile my-dsh-profile --dump-config

确认行 canon-dsh 存在且已启用。然后从项目工作区启动 DSH:

cd /path/to/project
CANON_AGENT=my-dsh dsh --profile my-dsh-profile

Canon 配置文件(my-dsh)和 DSH 配置文件(my-dsh-profile)是两个不同的概念。前者选择 Canon 凭据。后者选择 DSH 捆绑包栈。

配置

捆绑包行读取以下环境表达式:

| 变量 | 用途 | 默认值 |
| CANON_AGENT | ~/.canon/agents.json 中的 Canon 配置文件 | 空;仅当恰好有一个匹配的配置文件可用时,Canon 才会自动选择 |
| CANON_DSH_WORKSPACE | 绝对 DSH 工作区根目录 | DSH 调用目录 |
| DSH_PROVIDER | 用于 Canon 创建的代理的可选提供程序路由 | DSH 模型设置/默认选择 |
| DSH_MODEL | 用于 Canon 创建的代理的可选模型 | DSH 模型设置/默认选择 |
| CANON_DSH_DISABLED | 设置为 1 以仅禁用 Canon 行 | 已启用 |

DSH_PROVIDER 和 DSH_MODEL 必须一起提供。两者都省略以使用配置文件的常规模型选择。

有两个插件字段有意归组合所有,而非推断得出:

- questionProvider: external | canon 选择一个 DSH 用户问题此 Cordis 上下文的提供程序。已发布的 Web 兼容补丁使用 external;无头 Canon 部署使用 canon。
- planMode: boolean 声明 Canon 的 Plan 回合模式,并需要一个组合的 ctx.planMode 服务。它在通用补丁中处于关闭状态。

该桥接支持的功能

- 每个 Canon 对话一个持久 DSH 会话,在重启后从 DSH 的事件溯源会话日志中恢复。
- 原生 Cordis 生命周期行为:插件在启动 Canon 投递后变为活跃,而长期存活的 SSE 循环仍由其可逆插件效果拥有,并在卸载或热替换时停止。
- 一个 Canon 消息批次映射为一个不可变的 DSH 用户消息。Canon 的 SDK 按对话序列化批次;DSH 的收件箱仍是回合调度器。
- PNG、JPEG、WebP 和 GIF 输入在所属用户消息被追加之前,通过 DSH 的持久附件存储提交。DSH 配置的图像数量、字节、尺寸和规范化策略仍然具有权威性。
- 可见的助手文本流式传输。
- DSH 回合、工具调用/结果以及聚合待办事项进度的运行时活动,而不暴露原始工具参数或待办事项内容。
- 针对 DSH 审批请求的一次性 Canon 审批卡片。
- 当 questionProvider: canon 时,结构化的 ask_user_question 请求渲染为 Canon 运行时输入卡片;所选标签和自定义答案会被映射回 DSH 的原生答案词汇表。
- DSH 的 plan-review 意图渲染为 Canon 的原生计划审查卡片,并将批准、继续规划和修订反馈映射回 DSH。
- 可选的 Canon Plan 回合模式,由 DSH 自身记录的 planMode 服务支持。
- 一个 DSH 原生的 communicate 工具,用于现有消息、新建或最新直接对话、群组、转发、联系人分享和群组成员关系。
它仅在活跃 Canon 回合期间、且代理的出站策略为 open 或 approval-required 时挂载;Canon 仍是策略权威。
- 在每个活跃 Canon 回合期间使用 Canon 的标准 no_reply 工具。在群组中,受信任的 Canon 提示将其命名为在不发布消息或触发另一个代理的情况下保持沉默的方式。
- 中断、停止并丢弃以及新会话信号。

Canon 中断会以 keepInbox: true 中止活跃的 DSH 回合。停止并丢弃使用 DSH 的默认取消行为并清除排队的收件箱工作。新会话会推进 Canon 的持久代际映射,而不会删除旧的 DSH 事件日志。

Canon 的对话到会话映射存储在 CANON_HOME 下(通常为 ~/.canon),绝不在项目工作区内。

不受支持、不可用或超出活跃 DSH 策略的图像会保留为 Canon 的安全文本占位符;此桥接绝不会将其源 URL 插入模型提示或 DSH 会话日志。

审批语义

DSH 请求携带工具名称、可选的调用关联和原因;它们不携带原始工具参数。Canon 不会捏造参数。
该映射保留了 DSH 的封闭词汇表:

- 显式 Canon 允许 → allowed-once
- 人类显式拒绝 Canon → rejected
- DSH/Canon 请求中止 → cancelled
- 超时、传输失败、缺少响应者或结果不确定 → unavailable

unavailable 永远不会被视为许可。Canon 会话规则在此桥接中被禁用,因为 DSH 仅支持一次性授权。

当前限制

- DSH 0.1.1-rc.2 在 Cordis 上下文中仅允许一个活跃的用户提问提供者。因此,Canon 问题需要在无头/Canon 所有的组合中设置 questionProvider: canon;该设置不得与 Web API 代理的提供者组合使用。同时支持两种界面需要未来引入路由/多路复用的 DSH 提供者接缝。
- 非图像 Canon 附件仍为安全的文本占位符。
- 提供者/模型、权限模式、effort、工作区选择、执行模式、会话状态快照、富卡片以及引导/交错功能,在桥接能够端到端验证并强制执行每项控制之前,不会作为 Canon 控制项对外公布。
- 该包仅针对 DSH 0.1.1-rc.2 进行了测试。

故障排除

1. 运行 CANON_AGENT= dsh --profile --dump-config。
2. 确认行 id 为 canon-dsh,包名为 @canonmsg/deepseek-harness-plugin。
3. 如果该行被禁用,设置 CANON_DSH_DISABLED=0 或取消设置。
4. 检查 ~/.canon/agents.json 是否包含所选配置文件,且带有 clientType: "deepseek-harness"。
5. 从预期的项目目录启动 DSH,或将 CANON_DSH_WORKSPACE 设置为其绝对路径。

开发

npm install
npm run check

该 bundle 补丁有意仅插入 canon-dsh;它不会替换或深度合并任何 DSH 所有的行。

DeepSeek Harness 处于开发者预览阶段。此仓库固定了其测试所针对的确切 DSH 版本;兼容性更新经过审查并明确发布,而非从宽泛的预发布范围推断。

共享端点升级

0.5 版本使用 Canon SDK 11 和共享端点日志。运行 Node 22.22.3 或更新版本。在托管主机上,将 CANON_ENDPOINT_STATE_DIR 设置为私有持久卷(集群镜像使用 /data/canon-endpoint);在本地机器上,默认值为 CANON_HOME 或 ~/.canon 下的端点目录。将此状态与现有的 DSH 会话映射和原生会话一起保留。

升级前停止现有写入器。使用 Core 13 中的 canon-endpoint-migrate,配合相同的凭据、环境和状态目录,对照 DSH 日志清点和核对切换前的输入。在启动插件之前导入已审查的清单。已声明但提供者结果未知的轮次仍为不确定;未读/已读标记不是执行回执。该插件不会更改模型、提供者、工作区或 DSH 会话身份。
预览分享卡片长什么样 ↓HeyBobChan/canon-deepseek-harness-plugin
分享 · DeepSeek Harness Hub
HeyBobChan/canon-deepseek-harness-plugin

在 Canon 应用里审批代理并收发消息

这是你的仓库?认领条目

回到顶部