CCYellowStar2/dsh-astrbot-ingress0

dsh-astrbot-ingress

提供HTTP入口让AstrBot驱动DSH智能体

AI 分析

适合需要通过AstrBot将DSH智能体接入OneBot或官方即时通讯软件的用户。

包名
dsh-astrbot-ingress
版本
0.3.8
许可证
MIT
最近更新
2026年9月12日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:CCYellowStar2/dsh-astrbot-ingress

配置

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 / port127.0.0.1 / 3188默认只监听本机
cwd默认工作区;留空则用 DSH 已登记的第一个
maxMessageChars1500单条消息上限(超出自动切块)
approvalTimeoutSec600审批 / 提问等你回答的上限
progressModedigest过程怎么发(见下)
progressIntervalSec60digest 的汇报间隔(10-300),必须小于 AstrBot 的 timeout_sec
reasoningModefirst-line思考内容:off / 只发第一行 / full 全文
showToolCallsfull 档是否发工具行;digest 档是否把工具次数写进汇报
toolLineBatch5full 档连续工具行并成一条(1 = 每条单发)
beacon把实际端口与 token 写进 %DSH_HOME%/astrbot-ingress.json(0600),供同机 AstrBot 自动发现;不想写就设 false
inboundUrlMaxMb200URL 入站的单文件上限(AstrBot 侧 inbound_url_max_mb 也要够)
inboundUrlTimeoutMs60000单个 URL 的下载超时
outboundUrlMaxMb200出站文件「拉取凭证」的单文件上限(AstrBot 侧 outbound_pull_max_mb 也要够)
endGraceMs1200每条助手消息的最后一段只压这么久等 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_modedirectauto(出站文件有拉取兜底;出站图片 / 视频要共享目录时才填 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_candidatesURL 入站的候选(裸端口或完整地址)。宿主机映射端口不是 6185 时写这里,如 10000;插件会让 DSH 侧先真取一次,第一个通的才用
ingress_url_candidatesingress 地址的额外候选;留空时内置 host.docker.internal:3188 / 127.0.0.1:3188,自动探测
outbound_pull出站文件本地看不到时从 ingress 拉(Docker 下免挂盘)
inbound_url_modeautoauto=只有 >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