Evidence snapshot reviewed Sep 16, 2026GitHub checked Aug 21, 2026
Evidence-verifiedPlugin BundleIntegrations & ConnectionsWeb Profile

AstrBot Ingress for DeepSeek Harness

Connect AstrBot chat channels, including OneBot/QQ, to a local DeepSeek Harness coding agent.

At a glance

What it does

Connect AstrBot chat channels, including OneBot/QQ, to a local DeepSeek Harness coding agent.

Use cases
Integrations & ConnectionsIntegrationsMessagingWorkflow Automation
Works with
Deepseek HarnessAstrbotOnebot
Compatibility

Web Profile
Not declared in supplied evidence

Trust & status

Evidence-verified
Checked Sep 12, 2026, 2:18 PM UTC

Code-evidenced contributions

What it adds to DSH

Model ToolsAstrBot HTTP ingress

Lets AstrBot chat channels send coding tasks to a local DeepSeek Harness agent and receive results, progress, prompts, and attachments.

Mechanism evidence
SkillsQQ file delivery

A bundled skill instructs agents to return existing workspace files as chat attachments using a SEND_FILE marker.

Mechanism evidence

Before you choose it

This web-profile plugin runs a local HTTP ingress so AstrBot remains the messaging gateway while DeepSeek Harness handles coding work. It supports session commands, task progress, approvals and questions in chat, plus inbound attachments and outbound workspace-file delivery.

Best for

DeepSeek Harness users who already operate AstrBot and want to drive a local coding agent from QQ, OneBot, or supported official messaging channels.

Common tasks

  • Send a coding task from a chat with /dsh and continue the bound session.
  • Receive agent results, errors, approval questions, and configurable progress updates in chat.
  • Pass images or files into the active workspace and send generated workspace files back as attachments.
  • Run AstrBot in Docker while the Harness ingress runs on the host, using the documented discovery and token configuration.

Permissions and data

Local HTTP bridge between AstrBot and DeepSeek Harness.

Permissions
  • Listens on a local HTTP host and port; the documented default is 127.0.0.1:3188.
  • Uses a bearer token for documented binding and inbound endpoints.
  • Reads and writes files associated with the active workspace to handle attachments and file delivery.
Data handling
  • Incoming chat messages and attachments are forwarded to the local Harness agent.
  • A beacon file contains the actual port and token for same-machine discovery.
  • Optional diagnostic tracing writes a local trace log when enabled.
External services
  • AstrBot and its configured IM/OneBot channels.
  • DeepSeek Harness web profile.
Credentials
  • AstrBot needs the ingress token when automatic same-machine beacon discovery is unavailable.

Limitations

  • Requires separate AstrBot-side plugin setup; this bundle alone is not the chat gateway.
  • No Harness version range is declared in the supplied evidence.
  • The documented default binds locally; exposing the service beyond localhost is discouraged by the project documentation.
  • Attachment size limits and container path mappings may require configuration.

What DSHub checked

  • Pinned Git source, package structure, and Git bundle distribution are verified.
  • Package manifest declares MIT licensing and a peer dependency on @deepseek-ai/cordis.
  • Documentation describes the web-profile install command and local listener configuration.

What DSHub did not check

  • Installation, runtime operation, compatibility with a particular Harness release, and AstrBot interoperability were not executed.
  • The npm registry package version was not found in supplied evidence.

Pinned install

Install AstrBot Ingress for DeepSeek Harness

This plugin bundle does not have a DSH Plugin install action. Use its source documentation for the delivery method.

Visit the source project

Maintainer source

Project README

View at commit c70fab9
Maintainer-authored contentCaptured from README.md on Sep 12, 2026. The text and repository-relative media are fixed to commit c70fab920bdb with content hash 7cade4231d43; provider-hosted badges may update independently. README commands are upstream documentation; the DSHub copy action above is the verified, version-pinned install.

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

Operate deliberately

Install and manage

Prerequisites and target Profile

Target Web Profile

Delivery Dsh Bundle Git — CCYellowStar2/dsh-astrbot-ingress#c70fab920bdbc54533c73c2dd11a7b9bb0d7b2a6

Verify, update, and remove

Show lifecycle commands
Verify
dsh plugin --profile web list

Compatibility and access

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

Review compatibility evidence

Risk facts

Network

Receives authenticated HTTP messages and downloads inbound URL attachments.

Evidence
Credentials

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

Evidence
Files

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

Evidence
Evidence and editorial reviewManifest, Bundle patch, distribution and freshness

Immutable evidence

Review status and source activity

AI reviewed

Use the pinned Git source rather than relying on npm availability; review local token and attachment-handling settings before deployment.

AI reviewed Sep 12, 2026, 2:19 PM UTCGitHub facts last checked Sep 12, 2026, 2:19 PM UTC

No material source change has been recorded since this evidence baseline.

Next step

Follow the Plugin installation workflow

Subscribe to material changes for AstrBot Ingress for DeepSeek Harness