# dsh-openbiliclaw

> 把 OpenBiliClaw 本地推荐 Agent 的消费侧搬进 DSH Web 界面，左栏按钮呼出抽屉面板，并向 Agent 注册 22 个 openbiliclaw_* 工具让推荐/反馈/画像闭环。

## Metadata

- Author: [@whiteguo233](https://github.com/whiteguo233)
- Repo: <https://github.com/whiteguo233/dsh-openbiliclaw.git>
- GitHub: [whiteguo233/dsh-openbiliclaw](https://github.com/whiteguo233/dsh-openbiliclaw)
- Stars: 48
- Language: JavaScript
- License: [BSD-3-Clause](https://spdx.org/licenses/BSD-3-Clause.html)
- Topics: `agent-bridge`, `deepseek-harness`, `dsh`, `dsh-plugin`, `openbiliclaw`
- Forks: 4
- Open Issues: 1
- Last push: 2026-08-17T13:46:21.000Z
- Added: 2026-08-19T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:whiteguo233/dsh-openbiliclaw
```

## Wiki

## 一句话定位
把本地运行的 OpenBiliClaw 个性化推荐 Agent 集成进 DSH 的 Web GUI——左侧栏点开右侧抽屉即可看到推荐/收藏/对话/画像/设置，同时向 DSH Agent 注册 22 个工具，让 Agent 也能读取推荐、回应探测、保存内容，形成"推荐 → 反馈 → 画像 → 更准的推荐"的闭环。

## 核心能力
- 在 DSH 左侧栏底部追加 OpenBiliClaw 按钮，点击从右侧滑出抽屉面板（推荐/内容库/对话/画像/设置/通知）
- 向 DSH Agent 注册 22 个 `openbiliclaw_*` 工具，覆盖推荐拉取、追加、换一批、提交反馈、惊喜卡片、对话、画像、保存/移除/列表、运行时状态等
- 自动加载 `openbiliclaw-adapter` skill（解析仓库内 SKILL.md frontmatter），让 Agent 在需要时可作为长期指令调用 bridge
- 通过 HTTP 调用运行中的 OpenBiliClaw 后端 `serve-api` 的 `/api/agent-bridge` 端点（基于 agent-bridge/v2 JSON 协议），避免每次 fork Python 进程
- 面板体验覆盖深色模式跟随、跨平台封面代理（含失败回退为文本/媒体占位）、WebSocket 实时推送、消息抽屉与「同步到平台」进度

## 技术实现
- **语言**: TypeScript（Node 侧 ESM）+ React 18（浏览器侧面板）
- **关键依赖**: `@deepseek-ai/cordis ^4.0.1`（插件挂载）、`@deepseek-ai/dsh-tools ^0.1.0-rc.6`（tool 注册）、`@deepseek-ai/dsh-client-runtime / dsh-client-ui-slots ^0.1.0-rc.6`（slot/theme 注入）、原生 `fetch`（与后端 HTTP 通信）
- **架构模式**: 同时声明 `dsh.bundle.patch`（cordis 行插入 node 半）与 `dsh.client.inject`（浏览器半注入 runtime + ui-slots）；Node 半通过 `ctx.tools.register` / `ctx.skills.register` 注册 22 个工具与 1 个 skill；Browser 半通过 `PanelLayoutController` 在帧 grid 中追加一列并重写 `grid-template-columns`（push 中心列而非 overlay），仅侧栏按钮走 `sidebar.footer.action` slot
- **入口文件**: `src/index.ts`（node 半）/ `src/client/index.ts`（browser half）/ `cordis.patch.yml`（cordis 注入声明）

## 适用场景
已在本地部署 OpenBiliClaw 并希望"不离开 DSH"就完成消费侧操作的用户：在 DSH 会话中边聊需求，边通过右侧抽屉查看跨平台推荐（小红书 / B 站 / 抖音 / YouTube / X / 知乎 / Reddit / Linux.do / V2EX / 微博），处理收藏/稍后看、回复兴趣/回避探测、查看画像，Agent 也可借助注册的 22 个工具把推荐上下文纳入回答，让"我看什么 → 你怎么想 → 我再推荐"全程闭环在 DSH 内。

## 前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DeepSeek Harness（DSH）| 0.1.0-rc.6+ | 插件 peer ABI 与 `dsh-*` 包 `@deepseek-ai/cordis ^4.0.1` 对齐；README 提示不要在同 profile 混用 0.0.1 时代的工具包 |
| OpenBiliClaw 后端 | 启用 Agent Bridge v2 | 默认监听 `127.0.0.1:8420`；本插件只做消费侧，爬取/源管理仍由主项目承担 |
| Node | 未声明 | package.json 未声明 `engines` 字段 |
| 平台 | 跨平台 | 仅声明 `dsh.client.platform: "web"`，无 `os`/`cpu` 限制 |
| 原生模块 | 无 | 全部依赖为 JS/TS 包，无 `node-pty` / `node:sqlite` 等原生依赖 |

## 安装方式
```bash
dsh plugin --profile web add github:whiteguo233/dsh-openbiliclaw
```

## 配置项
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| `apiUrl` | string | OpenBiliClaw 后端 serve-api 的根地址；node 半的所有 bridge 工具走 `<apiUrl>/api/agent-bridge`。地址末尾不要带 `/api`。 | `http://127.0.0.1:8420` |
| `workdir` | string（必填） | OpenBiliClaw 主项目根目录；用于解析 `config.toml` / `data/` 与读取 `SKILL.md`。 | `/Users/white/workspace/OpenBiliClaw` |
| `skillPath` | string | adapter skill 文件绝对路径；找不到时只打 warn 不报错，工具仍可工作但 DSH 中无 skill 元数据。 | `<workdir>/skills/openbiliclaw-adapter/SKILL.md` |
| `timeoutMs` | number | 单次 bridge HTTP 调用超时（毫秒），应用到所有 22 个工具。 | `300000`（5 分钟）|

> 面板内的"设置 → 通用 → 连接"可改后端地址（保存到 localStorage，立即生效）；该地址用于浏览器侧的 `/api/*` 直接调用，与上表 `apiUrl`（Node 侧）是两套配置。

## 常见问题

**Q: 这个插件和官方 DSH 的设置面板冲突吗？**

A: 不冲突。插件只新增内容：在侧栏底部加按钮、在帧 grid 追加最右侧一列（推开中心列，不覆盖），不改动 DSH 自带的列布局。面板挂载失败时只 `console.error`，不影响 DSH 主流程。

**Q: 22 个工具是 Agent 自动会用，还是要我在对话里点名？**

A: DSH Agent 会按需调用。`openbiliclaw_recommend` / `openbiliclaw_chat` / `openbiliclaw_get_profile` 等可在需要时被 LLM 选为工具调用；要严格控范围也可在对话里显式点名。

**Q: `requestId` 是必须的吗？**

A: 仅对写操作类工具强制要求（`openbiliclaw_submit_feedback` / `openbiliclaw_respond_delight`）。重试同一动作必须复用同一个 `requestId`（最长 400 字符），不同动作之间不要复用——这是后端的幂等键，复用错了会丢反馈或写错条目。

**Q: 怎么看到"惊喜推荐"（proactive delight）？**

A: 两种方式：面板会在 WebSocket 推送里收到 `delight.candidate` 事件并直接渲染在抽屉顶部；Agent 侧可调用 `openbiliclaw_get_delight` 拉取当前待处理卡，或调用 `openbiliclaw_respond_delight` 用 `view/like/dislike/dismiss/chat` 应答（`dismiss` 会将该条永久从推荐中剔除）。

**Q: 兴趣/回避探测会主动弹给我吗？**

A: 后端会通过 WebSocket 推送 `interest.probe` / `avoidance.probe` 事件，面板用乐观状态机立即反馈；Agent 侧也能调用 `openbiliclaw_next_probe` / `openbiliclaw_next_avoidance_probe` 取下一个待回答问题，并用 `openbiliclaw_respond_interest_probe` / `openbiliclaw_respond_avoidance_probe` 答复（`confirm/reject/defer/chat`，reject 兴趣会有 30 天冷却）。

**Q: 收藏的内容会同步到 B 站账号吗？**

A: `openbiliclaw_save_local` / `openbiliclaw_remove_saved` / `openbiliclaw_list_saved` 全部只写本地 SQLite，不会同步到外部账号。面板里的"同步到平台"按钮走主项目的同步接口，需要登录 B 站账号才会成功；非 B 站平台条目标注为"仅本地保存"。

## 上手难度
入门 — 把 `workdir` 填对、确保 OpenBiliClaw 后端开启 Agent Bridge v2，其他配置都有合理默认值，开箱即可使用面板与 Agent 工具。

## 已知问题与限制
- README 列出的配置项 `pythonBin` / `stdoutMaxBytes` 在源码中**不存在**：当前实现走 HTTP（`src/bridge.ts:74-99`），不调用 Python 子进程，也无输出字节上限；按 README 写配置不会生效也不会报错。
- 插件消费侧有意**不**包含爬取、平台源管理、账号同步、`sync-saved` 等写副作用能力（`src/index.ts:7-10` 注释明示），这些仍需在主项目 / 浏览器扩展 / 手机版内操作。
- 当 `skillPath` 指向的文件读不到时，DSH skill 注册会**静默跳过**（仅打 warn），工具可工作但 LLM 看不到 skill 元数据；`workdir` 配错会触发该分支。
- README 与 package.json 均未声明 Node 版本要求；若 DSH 主机 Node 版本过低，可能影响其他 `dsh-*` 同级依赖；建议遵循 DSH 文档推荐的 Node 版本。
- 浏览器面板采用 DOM 层扩展帧 grid（`PanelLayoutController` 改写 `grid-template-columns`），不依赖官方 `aside` slot；如果未来 DSH 帧结构变化，可能需调整 `panel.module.css` / `layout.ts`（源码注释 `src/client/index.ts:4-7` 已注明此风险）。

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [dsh-openbiliclaw](https://deepseek-plugin.org/plugins/whiteguo233/dsh-openbiliclaw)
Wiki generated by AI (model: `MiniMax-M3`)
