English · 中文
本页是日常参考:控件在哪、每个字段做什么、实例跨重启怎么表现、存储与安全怎么配。
内容对应 0.4.0 / DeepSeek Harness 0.2.1-rc.2。
驱动插件有三种等价方式:
| 控制面 | 用途 |
|---|---|
| 设置 → A2A 连接 | 主 UI:创建/编辑/启停/删除,查看对端、会话、任务 |
/a2a 命令 |
DSH 聊天会话里的文字备用路线 |
仅回环 /a2a/api |
脚本、测试、集成;见 HTTP API |
三者调用同一个 facade,所以状态不会互相矛盾。面板每 3 秒自动刷新。
每张卡片显示名称、端点路径、preset 徽章、鉴权状态、派生技能 chips,以及实时 AgentCard URL。操作:
| 操作 | 效果 |
|---|---|
| 启用 / 停用 | 注册或注销卡片与端点路由;记录与会话池保留 |
| 编辑 | 改名称/描述/版本/preset/token;重建卡片/技能并换装活实例 |
| 删除 | dispose 活实例并删除持久化记录 |
| 清除鉴权 | 删除已存 Bearer Token,以匿名实例重建 |
创建/编辑表单有名称、版本、preset、Bearer Token、描述。技能创建后显示,不需要手填。 preset 选择器只列真实 roster 预设,并预选部署默认。
添加是两阶段流程:
已连接卡片显示状态点、导入技能数、工具数,失败时显示 lastError。操作:
启用/停用、刷新(重读卡片并重注册工具)、编辑(名称/preset/超时/token)、删除。
Token 通过凭据服务单独存储;编辑时 token 留空会保留原值。入站表单有清除鉴权;
出站没有清除按钮:通过 outbound.setAuth 提交空 token;编辑表单里 token 留空会保留原值。
三张表:
contextId 一行:实例、preset、运行中/空闲、任务/活跃数、流式、首次/最近时间、
取消活跃、关闭。语义:
contextId 的下一个任务会重新打开新句柄。/a2a 命令参考命令在 DSH 聊天会话里使用。列表与状态类输出 JSON。
| 命令 | 用途 |
|---|---|
/a2a status |
整插件快照 |
/a2a presets |
Agent preset 名单 |
/a2a inbound list |
入站实例 |
/a2a inbound create <name> [preset] [description] |
创建入站实例 |
/a2a inbound remove <id> |
删除 |
/a2a inbound enable\|disable <id> |
启停路由 |
/a2a outbound list |
出站实例 |
/a2a outbound create <agentCardUrl> [name] [preset] |
创建出站连接 |
/a2a outbound remove <id> |
删除 |
/a2a outbound enable\|disable <id> |
启停 |
/a2a outbound refresh <id> |
重读远端卡片 |
/a2a tasks |
任务列表 |
/a2a task get <taskId> |
单条任务 |
/a2a task cancel <taskId> |
取消任务 |
/a2a sessions |
按上下文的会话视图 |
/a2a session cancel <contextId> |
取消该上下文的活跃任务 |
/a2a session close <contextId> |
释放该上下文的活会话 |
/a2a peers |
入站对端注册表 |
/a2a help |
用法 |
参数以空白分隔。入站描述是可选 preset 之后的剩余单词;需要更丰富的字段时用面板或 HTTP API。
插件配置刻意最小。实例不在 cordis.patch.yml 里配置;它们存在于 a2a 域,由面板管理。
- id: a2a
config:
baseUrl: http://127.0.0.1:3080 # 可选;省略时从 webServer 派生
subagentProvider: in-process # 默认
defaultTimeoutMs: 60000 # 默认出站超时
inboundTimeoutMs: 600000 # 每个入站任务的执行预算;0 关闭
requestsPerMinute: 120 # 每个入站来源的限流;0 关闭
maxConcurrentTasks: 32 # 每个入站实例的并发上限;0 关闭
maxBodyBytes: 1048576 # 入站 HTTP 请求体上限
outboundRefreshMs: 300000 # AgentCard 自动刷新间隔;0 关闭
| 字段 | 默认 | 含义 |
|---|---|---|
baseUrl |
web server 端口,其次 DSH_A2A_PORT,最后 3000 |
所有入站 AgentCard 的对外 base URL |
subagentProvider |
in-process |
subagent 执行器接缝的 provider 名 |
defaultTimeoutMs |
60000 |
出站连接每次调用的默认超时 |
inboundTimeoutMs |
600000 |
每个入站任务的执行预算;超时落 FAILED |
requestsPerMinute |
120 |
每个入站来源的滑动窗口限流;超限返回 HTTP 429 |
maxConcurrentTasks |
32 |
每个入站实例的并发任务上限 |
maxBodyBytes |
1048576 |
入站 A2A 请求体上限 |
outboundRefreshMs |
300000 |
启用中的出站连接自动刷新 AgentCard 的间隔 |
入站会话工作目录是 $DSH_HOME/a2a-sessions(启动时创建)。DSH_HOME 默认 ~/.dsh。
只有 storageDomain 是必需的。其余服务都是探测式可选;缺少某个只会让对应能力空闲,
不会让整个插件挂掉。
| 服务 | 使用方 | 缺失时的效果 |
|---|---|---|
storageDomain |
两端 | 必需;插件不挂载 |
webServer |
入站路由、面板 API | 入站端点/卡片与面板 API 空闲 |
agents |
入站 session 执行器 | 入站任务走 refuse 执行器 |
attachments |
入站图片/文件 part | 原始附件降级为占位文本 |
agentPresets |
preset 选择、技能派生 | preset 默认与派生技能退化为 chat |
skills |
技能派生 | 卡片回退到 chat |
credentials |
token 存储/解析 | GUI 写 token 失败;外部 export 的环境变量仍可用 |
subagents |
subagent 执行器 | subagent 执行器不接线 |
tools |
出站工具注册 | 出站连接无法注册工具 |
commands |
/a2a |
聊天命令不注册 |
基础 web profile 已挂载全部。自定义组合若想要完整能力,应包含
storageDomain、webServer、agents、agentPresets、skills、tools、commands。
a2a 域默认走 profile 的 JSON 后端。表与内容见核心概念。
只把 a2a 域路由到 SQLite:
- id: storage-domain
config:
backend: json
routes:
a2a: sqlite
- insert:
- id: storage-sqlite
name: '@deepseek-ai/dsh-storage-sqlite'
config:
path: /absolute/path/to/a2a.sqlite
运维注意:
DSH_HOME 只允许一个写者。 两个 DSH 进程共享 home 会写同一个 JSON 域;
不要让两个实例指向同一个存储根。version 字段守护。升级前备份 JSON/SQLite 文件。$DSH_HOME/sessions/...;
插件的工作目录是 $DSH_HOME/a2a-sessions。/a2a/api 可远程调用。a2a 域或 AgentCard。升级:
dsh plugin --profile web add @hanphone/dsh-a2a@latest
安装后重启 dsh web。实例与任务在域里,升级后保留;活跃会话不保留。
卸载:
dsh plugin --profile web remove @hanphone/dsh-a2a
卸载不会删除 a2a 域数据。只有确认要丢弃实例定义与任务历史时,才删除域行(或存储文件)。
插件为支持的 DSH 版本声明 peer 范围。DSH 0.1.7+ 会跑 peer 预检,范围不覆盖运行时版本就拒绝加载。 预检报错时,把插件与 harness 一起升级;不要在没有跑兼容性流程的情况下擅自放宽范围。
精确范围、验证流程与发布记录见 Harness 兼容性。