본문으로 건너뛰기
9

dsh-channel-octo

90le/dsh-channel-octo

Connects Octo direct messages, groups, and topics to DeepSeek Harness Web, with separate conversations, channel settings, and reply progress cards. Needs an Octo bot token and Node.js 24 or 26, and ships switched off until you enable it; private chats are admitted by a local allowlist or Octo friendship, and groups and topics need an explicit @mention.

설치

dsh plugin --profile web add github:90le/dsh-channel-octo

README

DSH Channel Octo

在 DeepSeek Harness Web 中并列加载的 Octo IM 插件。使用宿主模型和原生会话,支持私聊、群聊和子区的文字、文件与媒体附件,以及展示卡、确认卡和动态回复进度。可选本地白名单或 Octo 好友与成员准入。见基础方案与完整能力及验收计划。

Octo 会话在哪里

在侧栏打开「Octo」。它可以单独运行,也可以和 IM Connect 的「频道」页并存;无需安装、降级或锁定任何 IM Connect 版本。Octo 复用可用的 DSH 工作区菜单和会话操作,并按 Bot、私聊、群主区和子区分组。任务页仅隐藏完全由 Octo 会话占用的工作区,保留真实关联。Bot 管理和消息规则仍在「设置 → Octo 渠道」。

进度卡与附件

每个 Bot 可在「设置 → 消息行为 → 进度卡」选择执行时的默认折叠、展开列表或全部展开。旧账号保持默认折叠;保存后只影响新任务,不撤销当前审批、不切换会话或重连。等待回答/审批保持执行态,成功、失败、停止或超时结束后统一折叠。正式环境使用的精细展示卡支持三级展开;只提供官方 Registry 模板的环境按模板能力展开外层,其子项初始状态由模板固定。

0.26.11 的进度保持单张卡片持续更新,默认折叠。标题箭头展开外层,最右侧双箭头一次展开/收起全部子项;各工具和分析摘要可单独折叠。顶部显示实际工具调用次数;工具标题加粗、分析摘要浅色小字,详情缩进显示真实工具名及一句话结果或错误原因,不显示单个工具耗时,状态只显示在右侧一次;分析只取公开过程说明的首行,最终回答不复制到进度卡。取消外层步骤计数、重复状态与常驻解释。长任务优先保留执行中/未成功操作,收拢较早记录并明确提示数量;异常过多时也说明未展示数量,卡片不无限增长。不展示原始命令、输出或内部思考。沿用服务端批准图标和明确 400 时的简洁卡回退;发送结果不明时不重复创建。无变化时每 5 秒更新总耗时(受网络和服务端限流影响时延后),结束即停止。客户端更新帧仍可能重置手动展开状态;旧卡片不会批量重写。

「允许处理文件附件」控制接收和处理含附件消息,也参与文件交付授权;与工具的写入权限分开。「只读」可以同时开启附件,用于读取和分析,不会因此开放工作区文件的创建、修改或删除。交付已有文件仍受工具范围与文件交付规则约束。关闭附件时,整条含附件的消息(包括配文)跳过,纯文字消息不受影响。传输过程中插件仍可暂存附件,这不同于允许 Agent 修改工作区。

列表轮询复用未变化的状态与会话数据;按 Bot、类型筛选时重新计算对应目录,避免无变化时反复构造树。

子智能体与后台任务

主对话一轮结束不等于整项请求结束。插件等待本轮关联的子智能体、后台任务和主对话续跑,在同一张卡上持续显示进度,最终只交付确认后的回复。等待子任务时保留每 5 秒耗时刷新;本轮独占执行时,停止或取消会等待关联子任务释放,阻止停止通知再次唤醒原任务。

仅接收本轮已确认归属的回传;共享 Web 会话混入其他来源输入时不向 Octo 转发。宿主配置静默通知或自动唤醒受限时,会给出单独的诊断,不绕过宿主的唤醒设置,也不承诺已停留通知能在释放执行环境或重启后恢复。

共享 Web 执行环境同时包含本轮与其他子任务时,宿主整树等待可能延长等待时间;忙碌团队成员混入不同来源的输入时,不承诺逐请求分离其结果。

Octo CLI 指引

「设置 → Octo 渠道 → Octo CLI」提供官方工具说明、npm / Bun / pnpm / Go 安装命令及复制反馈、命令目录查询和官方认证文档链接。应在实际运行 Agent 的环境安装;此页不执行安装、不读取或转交 Bot 凭据。插件负责连接与对话路由,CLI 提供可供 Agent 或脚本调用的 Octo 操作。最新安装方法以官方仓库为准。

多 Bot 助理

在「设置 → Octo 渠道 → Bot 账号 → 设置」使用「账号连接 / 专属助理 / 消息行为 / 高级管理」页签。创建 Bot 时自动创建一位专属助理,工作区、模型、Agent 预设、权限和工具范围在「专属助理」直接编辑。现有账号与历史会话保留。更改执行权限等运行配置可能开启新会话,旧会话仍可查看。

「专属助理」页签的 AGENTS.md 和 SOUL.md 是插件管理的提示词文件,只注入对应助理的 Octo 回合,不覆盖项目目录的同名文件,也不赋予工具权限。

「更换 Bot 令牌」仅用于同一个 Bot 的令牌轮换。要连接另一个 Bot,请使用「添加账号」。令牌有效但与当前 Bot 不一致时,验证会明确提示;验证不会替换当前保存的凭据。

本地检查

要求 Node.js 24 或 26。运行时使用 ws 连接 Octo,用 mdast-util-from-markdown 保留 Markdown 段落及识别正文提及。

npm ci
npm test
npm pack --dry-run

隔离试用

以 DSH 0.2.2-rc.1 或 0.2.1-rc.5 为兼容目标。在临时 DSH_HOME 的 web profile 中,从已验证的工作树 npm pack,再执行:

dsh plugin --profile web add /absolute/path/dsh-channel-octo-0.26.11.tgz

包安装后默认关闭 Octo 收发。若使用专用测试 Bot,给 DSH 进程注入 DSH_OCTO_BOT_TOKEN,在测试 profile 的 cordis.patch.yml 中追加以下覆盖。确保工作目录已存在,状态目录仅服务账号可读写(Linux 上模式 0700)。使用实际 Octo API 前缀,例如以 /api 结尾的 HTTPS 地址;Bot 和 Space 必须与校验接口返回值一致。

- id: dsh-channel-octo
  config:
    enabled: true
    apiBase: https://octo.example.invalid/api
    botUid: TEST_BOT_UID
    spaceId: TEST_SPACE_ID
    allowedUids: [TEST_USER_UID]
    allowedGroupIds: []
    allowedThreadIds: []
    threadRuleMode: thread-only
    cwd: /absolute/test-workspace
    stateDir: /absolute/private-octo-state
    waitSeconds: 15
    timeoutMs: 120000

默认仍采用本地用户和频道白名单,群与子区要求明确 @。群聊与子区只接受 User Bot(bf_)。显式配置子区时填完整通道 ID:32 位十六进制父群 ID、四个下划线、15–20 位数字短 ID;群 ID 不会自动放行旗下子区。升级前停止消费者并备份状态目录;私聊、群聊和默认子区模式沿用旧会话。

要让 Octo 好友及群友无需逐个配置 UID,在同一配置中设置:

    senderPolicy: octo
    channelPolicy: joined
    mentionPolicy: octo
  • senderPolicy: octo:删除或清空 allowedUids。私聊由 Octo 检查好友关系(User Bot 的所有者也可直接私聊);群与子区检查父群成员身份。只需要取消逐人白名单时,可以继续用 channelPolicy: allowlist 控制开放哪些群或子区。
  • channelPolicy: joined:删除或清空 allowedGroupIds 和 allowedThreadIds。接收 Bot 在绑定 Space 已加入的普通群及 Octo 实际投递到 Bot 的子区。
  • mentionPolicy: octo:自动用 WebSocket 接收消息。明确 @ 仍有效;免 @ 仅在 Octo 返回父群有效开关为开、发送者是已确认的普通成员、且消息未 @ 其他人时触发。只想开放给好友和群友但保留必需 @,可省略此项。

WebSocket 注册占用该 Bot 的连接,同一 Bot 只运行一个消费者。旧模式仍可使用 transport: events;如需在必需 @ 模式使用实时接收,可设置 transport: websocket。短时断线会重连,已登记频道会按持久起点有界补读。0.19 为 User Bot 增加离线新私聊及群/子区明确 @ 消息的发现;依赖事件和历史均仍可读取,详情见下方边界。

主区每轮读群规则。默认子区仅加载本区规则;设置 threadRuleMode: inherit-group 后,该插件允许的子区先读本区规则,再读父群规则,有冲突时以子区为准。父群继承会使用独立的子区会话,切回默认模式不会携带继承模式的历史。详见群规则边界。

需要为测试 profile 设置可用的 DSH 模型。使用独立 Bot,不与其他连接程序同时消费其事件;启用后会确认该 Bot 收到的事件,超出当前支持范围的事件不进入模型。暂停时将 enabled 改回 false 并按环境流程重载 Web;本地状态和会话保留。

成功确认发送后,本地队列表只保留去重及投递记录,原生 DSH 会话仍保存对话。异常时查看服务中的 dsh-channel-octo 日志和状态库 jobs 的 state、issue 字段。对于 review,先在 Octo 查实际送达情况;插件不会自动重放不确定的任务或回复。

0.24.0

  • 新增 octo_group_mention_preference:在群或子区查询 Octo 免 @ 设置与 DSH 的实际触发模式。
  • 新增 octo_messages_send_richtext:按明确请求,将有序文字和显式提供的 HTTPS 图片合为一条当前会话的原生消息,返回投递回执。工作区文件仍通过现有附件交付。

0.23.0

  • 每个 Bot 默认最多同时处理 4 个会话,可在「渠道设置 → 回复体验 → 并行会话数」设为 1–8。每个私聊对端、群主区和子区独立排队;同一群或子区一次只运行一个回合。群内同一权限范围沿用频道会话,工作区工具权限不同的回合仍使用独立 DSH 会话。
  • WebSocket 插话模式下,只允许当前发起人的实时普通文字进入正在运行的回合。其他成员按顺序排队;相邻的同一人普通补充可合并入自己的回合。命令、引用、附件和恢复消息单独处理。每条会话独立绑定问题、表单、审批、进度和 /stop。并行会话若选了同一工作区,仍会使用同一个目录。
  • 新增 octo_groups_info_joined 与 octo_groups_members_joined。Bot 所有者在自己的私聊可查询指定群资料和分页成员,需要是该群的当前群主或管理员。

0.22.0

  • 获准使用工具的群主区或子区回合,可以向同一父群的另一活跃子区发送文字、文件与展示卡。成员身份和目标频道权限实时核验。
  • Bot 所有者的私聊新增空间成员、已加入群、子区、目标解析和授权范围查询。Registry 卡片工具只使用当前部署公布且可写的展示模板。
  • 群或子区中明确 @ Bot,可用 /webhook create 名称 或 /webhook rotate ID 发起申请。打开 DSH 账号设置 → 管理 Webhook → 聊天请求,核对并确认。一次性密钥只在该管理页面显示。
  • 代发默认关闭。只有在管理员已验证部署契约、设置 oboSendContract 和精确频道白名单、用户授予代发权限后,才可从所有者私聊发起并在卡片内确认。普通聊天文字不能批准代发。

0.21.0

  • 默认回复时限 600 秒,可按秒、分、小时、天设置或不限时,明确保存的旧值保留。
  • /stop 取消自己在当前频道正在处理的任务;停止后续回复和文件发送,并保留已确认的交付。移除 /card、/choose 两个演示命令,展示卡和提问卡功能仍可正常使用。
  • 群/子区规则进入当前 Octo 回合的系统提示,支持子区优先的继承模式;极简预设在本轮输入附加规则。引用单独标明来源、类型和可用附件。
  • 修复群消息锚点查询因个别相邻消息不可见而整体失败的问题。另明确提示子区规则无法用 Bot 接口清空。

0.20.0

免 @ 模式新增群与活跃子区目录恢复:User Bot 离线期间在尚未登记的群或子区收到消息,重新连接后可从目录发现,再读取当前历史处理。目录只确定地址,不直接作为消息执行;仍遵循当前空间、群/子区、成员及工具权限。无需额外加入或关注子区。

首次启用记录时间界限,已有频道不重置;新增频道逐页检查现存历史,仅接纳启用后的消息。进度持久保存,各群轮流推进,失败会在账号页提示。目录列表每分钟检查;首次检查较长历史可能需要更多时间。已归档且未发现的子区、App 普通私聊、历史保留与时钟偏差等边界见能力核对。

同时修复恢复任务执行前、交付前的权限复查与设置变化竞争;过滤附加历史和引用中的过期正文。App Bot 建连初期收信也按活跃人类及精确消息可见性校验。1735 项完整回归通过;原生联调与部署证据见接入方案。

0.19.0

User Bot 的 WebSocket 连接由同一 worker 辅助读取 Bot 事件,用来发现离线期间的新私聊、群或子区点名消息。只登记频道和持久确认责任,实际正文从当前历史接口读取,再按现有好友/成员、群触发及工具权限执行。不会直接执行过期事件正文,也不把它当成当前提问答案或插话。

首次真正启动恢复时记录时间界限;旧积压不自动执行,重启保留原界限。初始化最多扫描 20 页,再按时间界限过滤;前扫新消息与回查固定旧区间交替进行,持续有新消息也不会阻止较小 ID 的回查。分页使用不等待请求,单条确认失败独立退避。已发现但历史暂缺的消息持续阻止该频道放行,直到读到有效内容或明确撤回记录;其他频道可继续处理。账号页显示初始化或恢复失败状态。

这不是全量离线同步:未知免 @ 群/子区消息、App Bot 普通私聊、服务端未入队/已过期或被其他消费者确认的消息,不在此发现保证内。时钟偏差与秒级时间边界、持续高负载、历史保留和迟发布仍有局限。不要用同一 Bot 启动第二个消费者。正式 Octo 客户端的长期离线验收单独跟踪。

1583 项完整回归及 Debian 同版本原生宿主的 User Bot、App Bot、跨进程表单和离线发现四组隔离验证通过。离线发现使用真实 DSH 三次进程启动,确认当前正文、工具结果、文件字节、完整说明及重复消息不再执行;Octo 与模型使用合成接口,不代替正式客户端验收。

0.18.0

新增 octo_form_publish 与 octo_form_manage:发出稍后填写的表单、查看状态和取消。发布立即返回,机器人可以结束本轮并处理其他消息;原填写人稍后提交,会在原 DSH 会话开启新回合。支持私聊、群聊、子区及 App Bot 私聊,仍受账号工具范围与权限策略约束。普通 octo_form 和原生提问继续在当前回合等待。

表单绑定、状态、回调去重与待确认回执保存在本机 SQLite。重启后保留;已删除/归档的会话不会被重建,工作区、模型或工具权限变化后不按新配置执行旧表单。取消仅阻止尚未提交的表单,不停止已运行任务;过期和无效提交不触发新任务。取消/过期卡片会尝试移除按钮,真实业务终态由持久记录决定。

跟随宿主默认模型时也检查模型变化;加载原会话后再次核对实际模型。迟到提交只确认回执,不转到新聊天;执行中断后提示在 DSH 检查,不自动重跑。1513 项完整回归和 Debian 同版本原生宿主的 User Bot、App Bot、跨进程表单续接通过;正式客户端验收另计。

默认有效 24 小时,可选 15 分钟至 7 天;这是插件的有效期,离线回调还依赖 Octo 部署的事件保留和可用性,不能承诺离线 7 天一定恢复。每账号最多 50 张、每原会话最多 10 张待填写表单。延后提交要求客户端支持交互卡,不把普通文字猜作旧表单答案。正式客户端验收独立记录。

0.17.0

新增 App Bot 私聊接入:账号面板按令牌类型选择官方身份接口,可添加、编辑、停用、删除及更换同身份令牌。App Bot 使用 WebSocket 收消息、事件队列接交互卡回调;保留工作区、模型、预设、权限和工具范围配置。服务端管理应用的私聊范围,不要求填写虚构的 Space。

App Bot 支持当前私聊的 11 项频道操作,以及文件、完整说明、进度卡、提问和表单。每条输入、卡片答案、工具及交付重新核验当前人类、好友关系和官方单条私聊消息访问权;不能仅凭好友检查绕过应用空间限制。群聊、子区、空间搜索、授权搜索、跨会话发送、语音服务和原生命令菜单不作为 App 能力显示。插件自身的斜杠命令仍可用;User Bot 的 52 项频道操作保持。

正式 App Bot 注册、客户端卡片显示与真实消息验收仍单独跟踪;合成接口和真实 DSH 宿主测试不等于正式 Octo 客户端验收。

0.16.0

新增联系人名称查询 messages.resolve_people,并将既有指定目标发送扩展到第三方私聊;频道操作共 52 项。用户可在获准使用工具的私聊中,明确要求 Bot 向同一空间内的联系人发送文字、工作区文件/图片附完整说明或展示卡。查询支持分页及重名候选,目录结果不代表好友关系;实际投递由 Octo 再检查 Bot 与收件人的好友权限,不读取收件人的聊天记录作为发送预检,不使用用户代发。

既有群聊和子区发送保持不变。另修复发送请求已经获得有效回执、但同时取消任务或更改设置时丢失回执的问题:保留已确认的消息编号,停止余下交付,不把已送达内容当成失败重发。正式客户端复验及 App Bot 等未完成项目继续见能力矩阵。

0.15.0

修复任务完成后仍按旧权限投递的问题。最终文字、文件、图文和展示卡在发送前重新核对当前账号和频道准入;文件在申请上传、上传字节与发布消息之间分别检查。任务期间更改工作区、工具权限或停用账号,会停止剩余交付,保留已确认回执,不自动重发。已生成的回复记录不含凭据的配置摘要,重启恢复时也会核对;修改账号名称或发送方式不会丢弃正常回复。

当前 51 个频道操作保持不变。原生问答、审批、表单、群成员与规则、授权检索、指定群/子区文字、文件和展示卡均继续回归;正式 Octo 客户端显示与未完成能力单独记录在能力矩阵。

发布前 1006 项自动测试全部通过、无跳过,其中 65 项覆盖交付期间配置变化、部分回执、进度卡与恢复。最终源码在 Windows 和 Debian 同版本隔离 DSH Web 中均通过完整联调,使用合成 Octo/模型,不替代正式客户端验收。

0.14.0

新增 messages.send_target_file 和 messages.send_target_card,频道操作共 51 项。在获准使用 DSH 工具的私聊中,可按用户明确要求向指定群或子区交付工作区文件、图片或结构化展示卡。文件仅接受当前工作区相对路径,仍核对附件开关、权限与文件边界;名称目标须先解析,有歧义时请用户选择。发送前后不改变会话归属。

文件说明作为完整文字/Markdown独立发送。文件成功而说明未确认时,返回文件回执和部分投递状态,不重发整个文件;图片使用原生图片消息。展示卡按服务端能力配置保留内容并降级不支持的元素,不包含回调按钮。获取上传地址、上传字节和发布消息分别核对当前权限。修复官方旧版 HTTP 400 包装内部发送失败的判断,展示卡和图文不再把未知投递当成确定拒绝后重复发送。

0.14.0 发布前 941 项完整回归通过、无跳过;Windows 和 Debian 同版本隔离 DSH 均验证指定群文件、完整说明、子区展示卡及原生回执/最终回复,并回归既有群工具、审批、问答和表单。正式 Octo 多客户端渲染、真实授权检索及其他未完成能力仍见能力矩阵。

账号管理参照 IM Connect 1.0.30。两个插件可共存,各自保留账号、会话与凭据。默认的文字模式可复用已经在 DSH Web 打开的空闲 Octo 会话。同回合混入其他来源的输入时不会向 Octo 转发。

  • 设置 → Octo 渠道 → Bot 账号:渠道卡片显示账号数量、连接状态和「接收消息」开关;添加与设置使用同一个双栏表单。每个账号独立选择 DSH 已登记的工作区、Agent 预设、模型、推理强度、权限、私聊准入和空闲新会话时间。已有服务器账号自动出现在列表中,沿用原有历史。
  • 添加、验证和更换令牌:在已登录的 DSH Web 页面可用,HTTP 和 HTTPS 均可。服务端固定 Octo API 地址;新令牌仅保存到 DSH 凭据库,不回显。移除接入保留 DSH 会话与历史。
  • 权限与工具范围:默认保留原有权限。「工具使用范围」独立选择 private(获准私聊)、owner(Bot 所有者全部已准入会话)或 admitted(所有已准入用户)。范围内使用所选 Agent 预设已挂载的 DSH 工具、插件与技能,包含群聊和子区;实际操作仍受权限策略约束。预设可选项由部署配置 hostPermissions 决定。普通群友可使用当前频道的 Octo 工具,不能因此访问工作区。「仅文字」不开放任何工具,「只读」不挂载 Octo 写操作;宿主审批仍由 DSH 处理。
  • 发送方式:默认排队。启用「插话发送」后,同一频道、同一获准使用 DSH 工具的用户可在 WebSocket 下补充文字。附件准备期间,补充要求与附件一起交给模型;模型已开始时,DSH 在可插话的下一步接收补充。插话不是立即终止已运行的工具,其他来源的消息继续排队。
  • 渠道设置:选择账号后独立配置群聊/子区名单、@ 触发、子区规则、进度和超时。普通配置保存后对新消息立即生效,不中断当前任务;修改工作区、模型或权限会在需要时开新 DSH 会话,旧会话仍可查看。
  • 侧栏 → Octo:有宿主扩展页签时,显示一个 Octo 页签;没有时,在侧栏底部提供「Octo 频道」入口。私聊、群聊和子区自动归档;可按类型筛选、搜索并打开原生 DSH 会话。原生 Octo 页签的「…」和右键打开同一组宿主会话操作。
  • 删除会话后继续聊天:频道列表以 DSH 原生会话是否存在为准,正常刷新会移除已删除项。下一条 Octo 消息自动创建新会话,不再尝试恢复已删除的会话;原消息的去重和投递回执保留。宿主读取失败、格式损坏或会话忙不会当成删除。
  • 进度:长回复优先使用 Octo 推理过程模板,或使用展示卡;卡片不可用时回退到“正在输入”。卡片显示 DSH 的真实步骤、工具执行结果、文件交付数量和耗时,不包含模型原始推理或工具参数。进度失败不阻止正文;明确失败有提示,旧任务不会自动重放。
  • 提问与回答:多题按顺序展示;提交后原卡显示收到的答案并关闭按钮,随后显示下一题。答题期间暂停模型执行计时,整组问题最多等待 15 分钟。服务重启会结束原等待,旧卡改为结束提示,需重新发起提问;不会把旧卡答案误当作新指令执行。
  • 表单:octo_form 可在原回合等待文字、数字、日期、时间、开关、单选/多选结果,最多 8 个字段、6 个提交按钮;原生提问也支持文字和多选卡。客户端不支持输入控件时提供文字填写格式;无效文字答案会提示检查,投递不明时不重复发卡。提交只代表回答,不代替工具审批。
  • 命令菜单:账号设置中可明确发布 /help /status /new /stop 或清空菜单。发布会替换此 Bot 的整个菜单,页面先显示确认;已发布过旧菜单的账号可重新发布。App Bot 不支持菜单发布。
  • 文件与说明:启用账号的文件选项后,已通过准入的私聊、群聊和子区可以接收文件、图片、GIF、语音和视频附件。图片是否可识别取决于所选模型。当前语音附件可通过 octo_voice_transcribe 调用 Octo 转写服务,服务未开放或超限会返回明确错误;不接受任意本地路径、其他消息或外部音频网址。发送须符合工具范围和权限,仅交付本轮通过 DSH 正式声明的工作区文件。文件独立发送,完整最终正文另发;带 Markdown 的图片说明也保留为文字消息。默认每个文件上限 16 MiB,语音服务可有更低限制;部署需配置确切的 mediaDownloadOrigins、mediaUploadOrigins HTTPS 来源。投递无法确认时不自动重发。
  • 群聊前文、成员与引用:触发后补充当前群或子区的近期可读消息及真实成员名称;不把群历史放进私聊。明确要求提及时,最终正文中的 @[uid:姓名] 核对当前成员后转为原生 @;代码和引用中的例子不触发通知。私聊普通回复不附加空引用,群回复仅在有消息序号、作者和摘要时附加完整引用。长正文按 Markdown 块分段,保留代码、链接和表格。详见消息兼容矩阵。
  • Octo 频道工具:可查询当前群成员、近期消息与搜索结果,读取或更新规则,管理子区、发送当前频道通知及编辑 Bot 自己的文字。管理动作每次核对请求者与 Bot 的实时权限。受限会话只挂载 Octo 工具,获准的会话保留 DSH 工具。普通私聊查询仅限本会话;另有下面三种独立授权检索,完整清单及官方接口缺口见能力矩阵。
  • 授权跨频道检索:获准使用 DSH 工具的用户可在私聊请求检索明确指定的 1–5 个群/子区的消息、文件或群摘要。需要 Octo 已有的旧式全局 OBO 授权;仅与 Bot 好友、同群或拥有 DSH 权限均不足以授权跨频道读取。当前官方授权创建入口通常限 Bot 创建者,新式策略授权不能代替此搜索授权。返回授权接口给出的有限摘要与文件元数据,不额外取全文、下载链接或附件。续页标识绑定账号、发起人、查询和目标,5 分钟过期,重配后失效;不提供无目标的全局发现。
  • 指定联系人/群/子区发送:在获准使用工具的私聊中明确说“把这段通知发给某人/某群/子区”,可先按名称查找目标,再以 Bot 身份发送文字、Markdown、工作区文件、图片及展示卡。联系人须为固定空间内的有效人类,实际发送检查 Bot 好友权限;群和子区须符合频道名单及你与 Bot 的当前成员身份,可使用原生 @,@所有人需群管理权限。重名或结果不完整时需确认具体目标。不会冒充你发言,不附加空引用;结果不明不自动重发。
  • 编辑已发内容:可修改当前会话中 Bot 自己发送的文字、图文消息和普通展示卡;不能用编辑工具改写进度卡、提问卡或带回调的卡片。读取原消息与实际编辑内容后重新核验身份和权限,写入未确认时不自动重试。
  • 卡片与安全命令:开启账号的私聊或群聊命令后,授权操作者可用 /help、/status、/new 和 /stop;群聊和子区需 Bot 所有者直接 @ Bot。/stop 无需等待任务队列,只取消你在同一频道的当前任务,停掉 DSH 支持取消的模型/工具操作和后续发送;排队的其他消息仍可处理。已完成的工具动作、已发内容或已经到达外部系统的请求无法撤回,共用 Web 回合中的其他来源不由 Octo 取消。卡片仍可直接用自然语言请求,按钮继续绑定账号、会话及操作者。
  • 回复时限:未指定时为 600 秒;可按秒、分钟、小时、天填写或选「不限时」。原来明确保存的值保留。「不限时」只关闭本插件的 DSH 执行计时,模型、工具和网络仍有各自的限制;等待提问或批准不计入执行时限。
  • 群和子区规则:每个来自 Octo 的相关回合读取当前规则,作为该回合的 DSH 系统提示附加段。群主区用群规则;子区可只用子区规则,或在「子区规则」选择「继承群规则,子区优先」。继承时保留不冲突的群规则,冲突按子区;规则不能改权限或覆盖宿主安全策略。引用和历史作为资料处理,不能成为规则。
  • 权限审批:本轮 DSH 工具发起的审批可在 Octo 中回答。展示已提交的真实工具参数,仅批准一次;拒绝、取消、超时、信息缺失或未完整展示均不执行。审批绑定原发起人、原频道和原生回合,参数含敏感内容时不在 IM 中批准;不改变宿主权限策略,不代替插件安装等其他审批流程。
  • 离线恢复:从此版本实际收到过的频道建立恢复起点,重连和定时检查按历史顺序补收、去重。恢复失败时暂存新消息并在账号页提示;撤回内容不从暂存区执行。升级前的旧聊天、新频道尚未收到的第一条消息和服务端已丢失的历史不在恢复保证内。
  • 身份与集成诊断:增加当前会话成员的单个/批量身份查询,以及当前群/子区的 Webhook 列表和投递记录。查询不增加跨群权限,不返回 Webhook 密钥或推送地址,不执行测试推送。
  • Webhook 管理:账号设置中打开「管理 Webhook」,选择当前 Bot 所在空间的群或子区,可创建、修改、启停、删除、轮换密钥、查看投递记录,并明确确认后发送测试消息。一次性令牌和适配器地址仅在当前已登录管理界面显示,默认遮盖,关闭或切换频道后清除;不会保存到模型、聊天记录或账号概览。HTTP 局域网入口也可使用,仍须登录与同源校验。模型工具另支持当前群/子区的修改、删除和明确请求的测试发送,实时核对请求者和 Bot 的管理权限。
  • 卡片历史清理:Bot 所有者可明确要求清除当前会话中 Bot 自己展示卡的修订历史;群内还要求群管理权限。保留当前卡片与服务端审计记录;不清理提问、审批、进度或 Registry 卡片,不会取消正在等待的交互。
  • 明确失败原因:按官方错误码区分权限不足、功能关闭、服务不可用和搜索边界,兼容部分接口 HTTP 400 内携带其他错误状态的情况。不暴露服务端原始错误、令牌或链接。会话忙、模型缺失、超时和附件失败分别给出中文提示;结果不明时先核对执行状态,不自动重放或要求直接重发。
  • 范围:User Bot(bf_)支持私聊、群聊及子区;App Bot(app_)为独立的当前私聊模式。没有任意 Adaptive Card 结构、原生逐字流、不受准入约束的跨频道发送或 Octo Drive/Docs。详见双方源码对照与验收边界。

自动测试覆盖权限校验、断线重连、收件确认和重复消息去重。隔离 DSH Web 与 IM Connect 共同加载,用模拟 Octo 和模型检查规则、会话隔离和进度卡更新。可另传 Playwright 模块与 Chromium 路径,验证浏览器设置页。

复跑宿主检查(需安装指定版本的 DSH CLI;脚本使用临时 DSH home 和测试凭据):

npm run smoke:web -- /absolute/path/to/dsh/lib/bin.js
npm run smoke:web -- /absolute/path/to/dsh/lib/bin.js events
DSH_OCTO_SMOKE_DELETE=1 npm run smoke:web -- /absolute/path/to/dsh/lib/bin.js websocket
DSH_OCTO_SMOKE_OWNER=1 npm run smoke:web -- /absolute/path/to/dsh/lib/bin.js websocket
DSH_OCTO_SMOKE_OWNER=1 DSH_OCTO_SMOKE_GROUP_TOOLS=1 npm run smoke:web -- /absolute/path/to/dsh/lib/bin.js websocket
DSH_OCTO_SMOKE_OWNER=1 DSH_OCTO_SMOKE_GROUP_TOOLS=1 DSH_OCTO_SMOKE_DELEGATED_SEARCH=1 npm run smoke:web -- /absolute/path/to/dsh/lib/bin.js websocket
npm run smoke:web -- /absolute/path/to/dsh/lib/bin.js websocket /absolute/path/to/playwright-core/index.mjs /absolute/path/to/chrome

浏览器验收默认与 IM Connect 1.0.30 共存。设置 DSH_OCTO_SMOKE_WEBHOOK_UI=1 加测 Webhook 独立管理窗口、确认与密钥清除,所有请求拦截到合成接口,不向正式频道发送测试。设置 DSH_OCTO_SMOKE_CODEX_UI=2.0.19 或 DSH_OCTO_SMOKE_AUTOMATION 可加测指定版本;可选的 DSH_OCTO_SMOKE_SCREENSHOTS 指向已存在的截图目录,截图只含测试账号和会话。

设置 DSH_OCTO_SMOKE_DIRECTORY_RECOVERY=1 单独运行免 @ 目录恢复场景:同一临时状态目录启动三次真实 DSH 进程,模拟首次空目录、离线新增群/第二页子区、当前历史补收以及重启重放。确认每条任务只执行一次,实际写入并展示文件,核对完整说明和文件字节。Octo/模型使用合成接口,不使用生产 Bot 凭据。

0.13.0 发布前:716 项完整回归通过、无跳过;中文进度名称补齐后 11 项进度测试通过。同版本 Debian 隔离 DSH 验证目标查找及群/子区原生提及发送、三类授权检索、绑定续页,并回归私聊/群聊提问、审批、文件及说明、表单、Webhook 工具和最终回复。所有新发送使用合成频道,未向正式群发送消息。

0.12.0 发布前:679 项完整回归通过、无跳过;随后新增精确子区独立名单测试,授权检索接口组 30 项通过。同版本 Debian 隔离 DSH 验证三类授权检索、绑定续页及原有私聊/群聊提问、审批、文件与说明、表单、Webhook 工具和最终回复。正式三个授权检索入口仅验证自代理被拒绝,未读取真实聊天;正式人类授权和索引可见性仍待验收。

0.11.0 共 628 项自动测试通过,无跳过,包含中英文管理窗口及 390px 窄屏检查。增加 Webhook 管理和当前频道操作、展示卡修订清理及明确错误反馈;修复启动时验证到的 Bot 所有者未同步给频道工具的问题。真实 DSH Web 与 IM Connect 共存的浏览器检查通过,管理窗口的桌面/窄屏截图另行目视检查;功能测试使用合成 Octo 数据,不代表正式平台写操作已经验收。

0.7.0 验证:182 项自动测试通过,无跳过,包含 DSH 0.2.1-rc.5 原生工具作用域测试。Debian 同版本隔离宿主验证了私聊三题回调、答案进入原生工具结果、答完后继续写文件及完整说明;另验证群成员工具、群提问回调、错误操作者拒绝、群工作区写入、结构化展示卡和最终正文。浏览器与 IM Connect 共存验收覆盖原生菜单、中文设置、连续快速修改的保存顺序、重新打开、令牌更换和账号移除。官方文本组件的 24 组浏览器检查复现了空引用条,未复现正文隐藏;生产客户端中“文件有说明但未显示”的反馈仍需实际复验。这些自动化检查使用模拟 Octo 和模型,不能代替真实平台权限和显示验收。

0.8.0 修复群/子区插话候选仍限私聊的问题;提问卡确认失败会持久保存重试,不因最后一张卡关闭而停止。新增当前频道文件、媒体、综合搜索和指定消息前后文,支持发送者与时间筛选;另增加当前语音附件转写工具。265 项自动测试通过,无跳过。官方完整消息列表另已复现“历史响应覆盖并发收到的正文”竞态;这属于客户端问题,插件投递成功不能替代客户端修复。

0.10.0 共 449 项自动测试通过,无跳过。包括真实加密线协议重连补读、暂存问答绑定、撤回抑制、混合队列排序、审批权限撤回与原生 DSH 宿主。Debian 同版本隔离测试通过审批卡批准后才写文件、群聊问答与表单、文件及完整说明交付。身份/Webhook 查询以合成接口验证,未在正式群执行 Webhook 操作;正式客户端仍须单独验收。

0.9.0 增加六类输入表单、原生文字/多选提问卡、已发富文本/展示卡编辑及账号命令菜单管理。332 项测试通过,无跳过;同版本 Debian 隔离 DSH 验证六类表单答案进入原工具结果,再完成群任务。补充了异步权限收紧检查、无效卡片答案转文字重答,以及未知卡片投递不重复发送的回归。客户端丢正文补丁及验证边界见 独立补丁说明,不随插件部署,也不代表已在正式客户端修复。

관련 플러그인