证据快照复核于 2026-09-16GitHub 数据核对日期: 2026-08-21
证据已验证Plugin Bundle集成与连接Web Profile

AstrBot Ingress for DeepSeek Harness

将 AstrBot 聊天渠道(含 OneBot/QQ)连接到本地 DeepSeek Harness 编程智能体。

快速了解

它能做什么

将 AstrBot 聊天渠道(含 OneBot/QQ)连接到本地 DeepSeek Harness 编程智能体。

本站提供的是中文说明,不代表该项目或 Plugin 自身提供中文界面;语言支持请以上游文档为准。

使用场景
集成与连接集成消息工作流自动化
适配技术
deepseek-harnessastrbotonebot
兼容性

Web Profile
Not declared in supplied evidence

可信度与状态

证据已验证
核对日期 2026/9/12 UTC 14:18

有代码证据的贡献

它为 DSH 增加什么

AstrBot HTTP 入站桥接

让 AstrBot 聊天渠道向本地 DeepSeek Harness 智能体发送编程任务,并接收结果、进度、提问和附件。

机制证据
QQ 文件发送

内置技能指导智能体用 SEND_FILE 标记将工作区中已有的文件作为聊天附件发回。

机制证据

选择前先看

这个 web profile 插件提供本地 HTTP 入站服务:AstrBot 继续负责消息渠道,DeepSeek Harness 负责处理编程任务。它支持在聊天中处理会话命令、进度、审批和提问,并支持附件传入与工作区文件作为附件传回。

适合谁

已经使用 AstrBot,且希望通过 QQ、OneBot 或支持的官方消息渠道驱动本地 DeepSeek Harness 编程智能体的用户。

常见任务

  • 在聊天中通过 /dsh 发送编程任务,并继续已绑定的会话。
  • 在聊天中接收智能体结果、报错、审批提问和可配置的进度更新。
  • 把图片或文件传入当前工作区,并把生成的工作区文件作为附件发回。
  • 在 AstrBot 位于 Docker、Harness 入站服务位于宿主机时,按文档配置自动发现和令牌。

权限与数据

连接 AstrBot 与 DeepSeek Harness 的本地 HTTP 桥接。

权限
  • 监听本地 HTTP 主机和端口;文档默认值为 127.0.0.1:3188。
  • 文档中的绑定和入站接口使用 Bearer 令牌。
  • 为处理附件和文件发送而读取、写入与当前工作区相关的文件。
数据处理
  • 传入的聊天消息和附件会转交给本地 Harness 智能体。
  • 信标文件保存实际端口和令牌,用于同机自动发现。
  • 启用可选诊断追踪时会写入本地追踪日志。
外部服务
  • AstrBot 及其配置的 IM/OneBot 渠道。
  • DeepSeek Harness web profile。
凭据
  • 自动读取同机信标不可用时,AstrBot 需要配置入站令牌。

局限

  • 需要另行安装 AstrBot 侧插件;仅安装此包不会成为聊天网关。
  • 提供的证据未声明 Harness 版本范围。
  • 文档默认仅监听本机,并不建议将服务暴露到 localhost 之外。
  • 附件大小限制和容器路径映射可能需要额外配置。

DSHub 已核对

  • 已验证固定 Git 源、包结构和 Git bundle 分发。
  • 包清单声明 MIT 许可证及 @deepseek-ai/cordis 对等依赖。
  • 文档说明了 web profile 安装命令和本地监听配置。

DSHub 未核对

  • 未实际执行安装、运行、特定 Harness 版本兼容性或 AstrBot 互操作性验证。
  • 提供的证据中未找到 npm registry 的对应包版本。

固定版本安装

安装 AstrBot Ingress for DeepSeek Harness

这个Plugin Bundle没有 DSH Plugin 安装操作,请根据源码文档使用真实交付方式。

访问源码项目

维护者原文

项目 README

查看 commit c70fab9 对应的 README
维护者编写的上游内容原文于 2026/9/12README.md 获取,正文和仓库相对媒体固定到 commit c70fab920bdb,内容哈希为 7cade4231d43。以下是未经 DSHub 翻译的上游原文,语言可能与当前页面不同;第三方托管的 badge 可能独立更新。

dsh-astrbot-ingress

HTTP ingress that lets AstrBot drive a local DeepSeek Harness agent: AstrBot stays the IM gateway, DSH does the coding.

AstrBot 接到本机 DeepSeek Harness:AstrBot 继续当 IM(OneBot / 官方渠道),DSH 当写代码的脑。

QQ / NapCat ──OneBot──▶ AstrBot ──HTTP──▶ 本插件 :3188 ──▶ ctx.agents

不绑定某一台电脑的盘符:同机、Docker、换工作区都只改配置。

快速开始(只有一个必填项)

# ① DSH 侧
dsh plugin --profile web add github:CCYellowStar2/dsh-astrbot-ingress
# 重启 dsh web;控制台出现 "listening on http://127.0.0.1:3188" 即成功

② AstrBot 侧装 astrbot_plugin_dsh (WebUI 插件页填仓库地址,或在插件市场搜「DSH 桥」),重载插件。

唯一要填的配置是 token:抄 %DSH_HOME%/dsh-astrbot-ingress/config.json 里的那段,粘进 AstrBot 插件配置的 token。(AstrBot 与 DSH 同一台机器时连这个都能留空 —— 插件会读 %DSH_HOME%/astrbot-ingress.json 这个信标文件。)

④ 回聊天窗口发 /dsh 你好

地址不用填ingress_url 留空时会自己探 —— 同机信标文件 → host.docker.internal:3188127.0.0.1:3188 → 你列的候选,/health 第一个通的才用。文件也不用挂盘:入站大附件走一次性 URL(/api/file/<token>,DSH 自己下载),出站文件这边看不到时插件向 ingress 要一次性凭证拉过来再发。

你的情况 除了 token 还要填什么
AstrBot 与 DSH 同一台机器 什么都不用token 也留空)
AstrBot 在 Docker、DSH 在宿主机(官方 compose) 只填 token
Linux 上的 Docker 同上 + compose 加 extra_hosts: ["host.docker.internal:host-gateway"]
宿主机映射端口不是 6185(如 6185 → 10000 inbound_url_candidates 填宿主端口(10000)—— 只影响走 URL 的那条入站通道
ingress 不在 3188 / 不在同一台机器 ingress_url(或 ingress_url_candidates
AstrBot 与协议端(NapCat/SnowLuma)分容器且挂载点不同名 send_protocol_path(+ 需要时 send_outbox_dir
# compose 里给 AstrBot 的那两行(Linux 才需要;Windows/macOS 的 Docker Desktop 自带)
services:
  astrbot:
    extra_hosts:
      - "host.docker.internal:host-gateway"

安装

1. DSH 侧插件

# 从 GitHub 直接装(plugin add 转发给 pnpm,支持 github: / git+https: / 本地路径)
dsh plugin --profile web add github:CCYellowStar2/dsh-astrbot-ingress

# 或先 clone,再装本地目录
git clone https://github.com/CCYellowStar2/dsh-astrbot-ingress
dsh plugin --profile web add ./dsh-astrbot-ingress

重启 dsh web,控制台应出现:

dsh-astrbot-ingress: listening on http://127.0.0.1:3188

Token 写在 %DSH_HOME%/dsh-astrbot-ingress/config.json(Linux/macOS 通常是 ~/.dsh/dsh-astrbot-ingress/config.json)。 顺手还会把实际端口 + token写进 %DSH_HOME%/astrbot-ingress.json(0600,每 30 秒刷新), 同机的 AstrBot 插件自动读它——所以同机部署不用手填地址和 token。

2. AstrBot 侧插件

astrbot_plugin_dsh/ 拷进 AstrBot 的 data/plugins/(或在 AstrBot WebUI 的插件页用仓库地址 https://github.com/CCYellowStar2/astrbot_plugin_dsh 安装),再重载插件。同机ingress_urltoken 留空即可(自动读上面的信标文件);AstrBot 在容器里:填 http://host.docker.internal:3188 与手抄的 token。插件自身的说明见 astrbot_plugin_dsh

配置

DSH 侧(profile 的 cordis.patch.yml

- id: dsh-astrbot-ingress
  config:
    host: 127.0.0.1
    port: 3188
    cwd: ''                   # 默认工作区;留空 = DSH 已登记的第一个工作区
    reasoningMode: first-line # off | first-line | full
    showToolCalls: true
    toolLineBatch: 5
    progressMode: digest      # digest | full | minimal
    progressIntervalSec: 60   # 10-300
    beacon: true              # 写 ~/.dsh/astrbot-ingress.json(端口+token)供同机 AstrBot 自动发现
默认 说明
host / port 127.0.0.1 / 3188 默认只监听本机
cwd 默认工作区;留空则用 DSH 已登记的第一个
maxMessageChars 1500 单条消息上限(超出自动切块)
approvalTimeoutSec 600 审批 / 提问等你回答的上限
progressMode digest 过程怎么发(见下)
progressIntervalSec 60 digest 的汇报间隔(10-300),必须小于 AstrBot 的 timeout_sec
reasoningMode first-line 思考内容:off / 只发第一行 / full 全文
showToolCalls full 档是否发工具行;digest 档是否把工具次数写进汇报
toolLineBatch 5 full 档连续工具行并成一条(1 = 每条单发)
beacon 把实际端口与 token 写进 %DSH_HOME%/astrbot-ingress.json(0600),供同机 AstrBot 自动发现;不想写就设 false
inboundUrlMaxMb 200 URL 入站的单文件上限(AstrBot 侧 inbound_url_max_mb 也要够)
inboundUrlTimeoutMs 60000 单个 URL 的下载超时
outboundUrlMaxMb 200 出站文件「拉取凭证」的单文件上限(AstrBot 侧 outbound_pull_max_mb 也要够)
endGraceMs 1200 每条助手消息的最后一段只压这么久等 turn/end 来拼 —— 本回合结束;等不到就先发正文。别设太大(设成几千毫秒就会重新出现「正文慢一拍」的手感)
traceLog 诊断追踪:把 adopt-turn / drop-stale / grace-flush / turn-end 写进 %DSH_HOME%/dsh-astrbot-ingress/trace.log(>1MB 自动归档 .old)。只在排查跨进程时序时开

过程档位通常由 AstrBot 侧的 progress_mode 逐次带过来,这里的值只是「请求没带」时的兜底:

群里看到
digest(默认) progressIntervalSec 秒一条 ⏳ 已跑 3 分钟 · 工具 7 次 · 最近:edit · bash
full 实时发思考首行 + 工具行 + 心跳摘要
minimal 过程不出声

三档都照发:最终结果、文件、报错、任务已停止、附件提示、权限确认,以及 —— 本回合结束

AstrBot 侧

同机 AstrBot 在 Docker、DSH 在宿主机
ingress_url 留空(自动读 %DSH_HOME%/astrbot-ingress.json 里的实际端口) 一般也留空(自动探 host.docker.internal:3188);只有 ingress 不在默认端口 / 不在本机才手填
token 留空(同上,从信标里读) 与 DSH config.json 相同(唯一的必填项
allow_users / allow_groups 空 = 仅管理员 同左
send_file_mode direct auto(出站文件有拉取兜底;出站图片 / 视频要共享目录时才填 shared
send_protocol_path 留空 出站图片 / 视频要落盘给协议端时填,如 /app/napcat/data/dsh-outbox/app/snowluma-data/dsh-outbox
send_outbox_dir 留空 仅当两边挂载点不同名时填(AstrBot 侧那个名字)
inbound_share_dir 留空 入站大文件(>12MB)暂存目录(AstrBot 侧)。同机留空即可 —— 自动用 DSH 当前工作区下的 .dsh-inbox;分容器才填,如 /mnt/d/proj/.dsh-inbox
inbound_dsh_prefix 留空 仅分容器时填:同一目录在 DSH 侧的写法,如 D:\proj\.dsh-inbox(同机两边是同一个路径)
inbound_url_base 留空 = 自动探测 URL 入站:DSH 能访问到的 AstrBot 基址(宿主视角),如 http://127.0.0.1:10000。填了就固定用它
inbound_url_candidates URL 入站的候选(裸端口或完整地址)。宿主机映射端口不是 6185 时写这里,如 10000;插件会让 DSH 侧先真取一次,第一个通的才用
ingress_url_candidates ingress 地址的额外候选;留空时内置 host.docker.internal:3188 / 127.0.0.1:3188,自动探测
outbound_pull 出站文件本地看不到时从 ingress 拉(Docker 下免挂盘)
inbound_url_mode auto auto=只有 >12MB 走 URL;always=全走;off=关
trace_delivery 诊断:每轮在 AstrBot 日志里多几行 [dsh-trace](排「慢一拍」「顺序不对」时开)

大多数情况不用管这一节:只填 token,出站文件走上面的 outbound_pull 兜底、入站大附件走 URL, 挂盘是可选的老办法。还有一种通用做法是填 AstrBot 主配置的 callback_api_base(协议端能访问到的地址, 如 http://astrbot:6185)—— 出站图片 / 视频也会注册成 URL 交给协议端下载。两者都没配、且协议端与 AstrBot 分容器时,才需要共享目录并填 send_protocol_path

要挂共享目录时,配置里填的都是容器内视角,在 compose 里把同一块盘挂成同一个路径最省事:

services:
  astrbot:
    volumes:
      - ./napcat-data:/app/napcat/data   # 出站:与协议端挂同一路径
      - "D:/:/mnt/d"                     # 入站:DSH 要能读到 AstrBot 写的附件
  napcat:
    volumes:
      - ./napcat-data:/app/napcat/data   # 与 AstrBot 完全相同的挂载点

容器里若设了 HTTP_PROXY,插件会 trust_env=False 直连,避免被代理成 502。完整的部署对照表见 astrbot_plugin_dsh

用法

唤醒词默认 /dsh(可改)。群聊需要管理员,或把群号填进 allow_groups

/dsh <任务>              /dsh status
/dsh ws [n|路径]         /dsh ls                 /dsh use <n|短id>
/dsh new                 /dsh end                /dsh stop
/dsh steer <话>          /dsh rename <标题>
/dsh model [n|provider/model] [effort]           /dsh perm [n|名字]
/dsh compact             /dsh last [N]           /dsh send <路径>
  • status 报上下文占用(百分比 / 已用 / 上限 / 剩余)与累计 token 构成
  • modelpermcompactws 只作用于当前绑定会话,且是 durable 的
  • last [N] 从会话日志补发最近 N 条助手回复,用于超时或重连后找回已跑完的结果
  • 会话默认一个群共用一条;要按人隔离就把 AstrBot 侧 session_scope 切成 user(想共用的人各自 /dsh use <同一个短id>

绑定之后引用机器人的回复即可续聊;官方 QQ 群还可以 @机器人 + 说话。带图 / 文件:/dsh 看看这张图 并附图,或(已绑定的会话里)直接发附件;官方 Bot 也可以引用一张图 + @机器人。附件经 HTTP 传到 DSH,落在当前工作区 .dsh-inbox/

DSH 反问(ask_user_question,含 plan 模式的计划确认)也会发到聊天窗口:回 11,3答 你的说法取消,或引用那条再说;QQ 与 DSH 网页并行,谁先答算谁的;超时与 取消 都不会替你选。

HTTP

接口 说明
GET /health 存活检查
GET /binding?umo=... 该会话是否已绑定 DSH(Bearer)
POST /inbound 入站消息(Bearer);JSON,附件可用 files[].data(base64)或共享目录路径

安全

  • 默认只绑 127.0.0.1,不要把 3188 暴露到公网
  • 出站文件限制在工作区内,并拒绝 .ssh / .env 等敏感路径段

开发

npm test        # node:test,跑 lib/pure.js 的纯函数单测

纯逻辑(分块、[SEND_FILE] 解析、消息抽取、路径校验、过程汇报文案)全在 lib/pure.js,与 cordis / 宿主无关,可直接单测;lib/index.js 只放插件装配与 I/O。改动记录见 CHANGELOG.md,实现取舍与排障笔记见 docs/design-notes.md

技能

skills/dsh-qq-send-file/SKILL.md 教模型用 [SEND_FILE: 绝对路径] 把文件发回聊天窗口。装上本插件并重启 dsh web 后会通过 ctx.skills.registerProvider 自动进技能目录(source=bundled),不必手工拷到 ~/.dsh/skills

有意识地管理

安装与管理

前置条件与目标 Profile

目标 Web Profile

交付方式 Git Bundle — CCYellowStar2/dsh-astrbot-ingress#c70fab920bdbc54533c73c2dd11a7b9bb0d7b2a6

验证、更新与移除

显示生命周期命令
验证
dsh plugin --profile web list

兼容性与访问范围

DeepSeek Harness web profile with AstrBot bridge Not declared in supplied evidence

检查兼容性证据

风险事实

网络

Receives authenticated HTTP messages and downloads inbound URL attachments.

证据
凭据

Stores the ingress port and token in a local beacon file for same-machine AstrBot discovery.

证据
文件

Transfers workspace files to chat when requested; documentation says sensitive path segments are rejected.

证据
证据与编辑审查Manifest、Bundle patch、分发与新鲜度

不可变证据

审查状态与源码活动

AI 已审查

请使用固定 Git 源安装,不要依赖 npm 可用性;部署前请检查本地令牌和附件处理设置。

AI 审查于 2026/9/12 UTC 14:19GitHub 事实核对日期: 2026/9/12 UTC 14:19

自当前证据基线以来,没有记录到重要源码变化。

下一步

按 Plugin 安装流程操作

订阅重要变化: AstrBot Ingress for DeepSeek Harness