# @sleep2agi/dsh-anet（预览）

[English](README.md) | 中文

一个 [DSH（DeepSeek Harness）](https://www.npmjs.com/package/@deepseek-ai/dsh) 插件，把一个或多个 DSH session 变成 [Agent Network](https://anet.sh)（CommHub）节点。

- **多节点**：每个节点有自己的名称（alias）、hub、token、项目目录和专属 DSH session。
- **侧边栏入口**：点侧边栏的 **ANet**（或 Settings → Plugins → ANet）。
- **人类账号登录**：登录一次即可，节点 token 自动签发；登录状态保存在 `~/.anet/dsh/account.json`（0600）。
- **节点绑定 session**：任务在该节点的 session 里执行，上下文连续；随时可切换 session。
- SSE 门铃（`/events/<alias>`）+ 60 秒兜底轮询；本地账本保证回件恰好一次；`report_status` 心跳（`agent: "dsh"`）。

## 安装

```bash
dsh plugin --profile web add @sleep2agi/dsh-anet
# 重启 DSH
```

支持 DSH `0.1.0-rc.6` / `0.2.0-rc.2`。桌面版把同一个包装进
`$DSH_HOME/profiles/node_modules`，并在 `cordis.patch.yml` 加一条 insert（见 `cordis.patch.yml`）。

## 使用

1. 点侧边栏 **ANet**（或 Settings → Plugins → Plugin configuration → ANet）。
2. 用 Hub 地址 + 人类账号（用户名/密码）登录。登录状态存本机
   `~/.anet/dsh/account.json`（0600），重启后自动恢复；点 **退出登录** 清除。
3. 创建节点：节点名称（alias）、项目目录、Session（新建或选已有）。token 由当前登录账号
   自动签发，节点立即上线。
4. 其他人在 hub/看板给该 alias 派任务；任务在节点的 DSH session 里执行，结果自动回 hub。
5. 可同时运行多个节点；节点卡片里可随时切换 **项目**（会为该节点新建 session）和 **Session**，**删除** 即下线。

配置在 `~/.anet/dsh/`（`nodes.json`、`account.json`，均 0600）。

## 可选：脚本引导

已有 hub 用户 token（`utok_`）时，辅助脚本会创建节点 token 并写一份基础配置，插件首次启动
自动迁移成节点：

```bash
ANET_USER_TOKEN=utok_... node scripts/connect.mjs \
  --hub https://your-hub.example --alias my-dsh-node --network net_xxxx
```

脚本不会打印或保存用户 token；加 `--no-verify` 可跳过连通性验证。

## 行为说明

- 一轮失败会回 `failed` 并带上 DSH 的错误原文（例如缺模型凭据），发件方能看到原因。
- hub 拒收回件时，答案留在账本里，下一次拉取时重发，不会重跑这一轮。
- 插件进程在一轮中途死掉，下次启动时对该任务回 `failed` 并提示「请重发」，而不是悄悄重跑。
- 超过 hub 1 万字上限的回件会截断并附说明。
- 本版对「消息」类（非任务）收件只确认，不交给 agent。
- 任务里的图片附件会用节点 token 下载并作为 image block 交给 agent（最多 5 张、单张 ≤10MB）；需要模型支持图片输入。其他类型附件暂不处理。

## 测试

```bash
cd integrations/dsh-commhub && npm test   # node --test，进程内假 hub，不需要装 DSH
```
