danmu-tui 0.4.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,19 +1,19 @@
1
1
  <p align="center">
2
- <a href="https://danmu.elazer.wang">
3
- <img src="website/public/logo-pixel.svg" alt="DANMU 官方 Logo" width="96" height="96">
2
+ <a href="https://danmu.elazer.wang/">
3
+ <img src="https://raw.githubusercontent.com/rockythink/shisui-danmu/main/website/public/logo-pixel.svg" alt="DANMU 官方 Logo" width="96" height="96">
4
4
  </a>
5
5
  </p>
6
6
 
7
7
  <h1 align="center">DANMU</h1>
8
8
 
9
9
  <p align="center">
10
- <strong>为知识型主播收束弹幕、问题与现场控制。</strong><br>
11
- 一块安静、快速、可恢复的直播互动终端。
10
+ <strong>面向知识型主播的免费开源弹幕与提问工作台。</strong><br>
11
+ 在终端里看互动、找问题、审核助手回复,保留每场记录。
12
12
  </p>
13
13
 
14
14
  <p align="center">
15
- <a href="https://danmu.elazer.wang"><strong>官方网站 · danmu.elazer.wang</strong></a>
16
- &nbsp;·&nbsp;
15
+ <a href="https://danmu.elazer.wang/">官方网站</a> ·
16
+ <a href="https://danmu.elazer.wang/guide/"><strong>使用手册</strong></a> ·
17
17
  <a href="https://github.com/rockythink/shisui-danmu/releases/latest">下载最新版</a>
18
18
  </p>
19
19
 
@@ -21,361 +21,209 @@
21
21
  <a href="https://github.com/rockythink/shisui-danmu/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/rockythink/shisui-danmu/ci.yml?style=flat-square&label=build&colorA=111827&colorB=4ADE80" alt="Build"></a>
22
22
  <a href="https://github.com/rockythink/shisui-danmu/releases/latest"><img src="https://img.shields.io/github/v/release/rockythink/shisui-danmu?style=flat-square&colorA=111827&colorB=22D3EE" alt="Release"></a>
23
23
  <a href="https://github.com/rockythink/shisui-danmu/blob/main/LICENSE"><img src="https://img.shields.io/github/license/rockythink/shisui-danmu?style=flat-square&colorA=111827&colorB=F472B6" alt="License"></a>
24
- <img src="https://img.shields.io/badge/Rust-1.89%2B-F8FAFC?style=flat-square&colorA=111827&logo=rust&logoColor=white" alt="Rust 1.89+">
25
- <img src="https://img.shields.io/badge/OBS_WebSocket-v5-FACC15?style=flat-square&colorA=111827" alt="OBS WebSocket v5">
26
24
  </p>
27
25
 
28
- <p align="center">
29
- macOS · Linux · Windows &nbsp;|&nbsp; Bilibili &nbsp;|&nbsp; Ratatui &nbsp;|&nbsp; MPL-2.0
30
- </p>
31
-
32
- ---
33
-
34
- **DANMU** 是面向知识型主播的免费开源弹幕与提问工作台。它把 B 站的历史弹幕、实时互动、重点问题、发送状态和有限 OBS 控制放进同一个终端界面,让主播少盯几个窗口,多留一点注意力给正在讲的内容。
35
-
36
- 它不是播放器,也不是另一套 OBS。它只解决直播时最容易失控的那一段:**看见互动、辨认问题、快速回应、保留现场。**
37
-
38
- ## v0.4.4 更新:历史逐条滚动,停播连续确认
39
-
40
- - **历史不再整页跳动**:每个滚轮事件移动一条消息;从回复选择接续当前位置,新消息到达时保留阅读锚点,`End` 返回实时。
41
- - **OBS 状态更明确**:连接状态统一为单个 `●`,绿色表示已连接,红色表示未连接。
42
- - **停播连续确认**:`/obs stop` 打开弹窗,默认选中“返回”;方向键确认后显示 3 秒倒计时,Esc 可取消,不再输入 `/obs confirm` 或 `/obs cancel`。
43
-
44
- 完整说明与安装包见 [v0.4.4 Release](https://github.com/rockythink/shisui-danmu/releases/tag/v0.4.4)。更新后重新启动 TUI。
45
-
46
- ### v0.4.3:互动可读,正文不动
47
-
48
- - 进场、点赞移到弹幕框底边,不挤动正文,也不占用弹幕历史缓存。
49
- - 提示姓名至少稳定展示 2 秒,同批合并,进场优先;重复互动仅按可靠用户 ID 合并。
50
- - 只保留当前批次与下一批摘要,不积压点名队列;历史浏览和回复选择保持稳定。
51
-
52
- 历史说明见 [v0.4.3 Release](https://github.com/rockythink/shisui-danmu/releases/tag/v0.4.3)。
26
+ <p align="center">macOS · Linux · Windows | Bilibili | Ratatui | MPL-2.0</p>
53
27
 
54
- ## 真实运行录屏
28
+ DANMU 把 B 站历史弹幕、实时互动、重点问题、发送状态和有限 OBS 控制放在同一个终端里。它不是播放器,也不是完整直播画布或另一套 OBS。
55
29
 
56
30
  <p align="center">
57
31
  <a href="https://danmu.elazer.wang/danmu-product-demo.mp4">
58
- <img src="assets/danmu-product-demo.gif" alt="DANMU 真实运行录屏:启动、实时弹幕与终端交互,完整 56 秒" width="100%">
32
+ <img src="https://raw.githubusercontent.com/rockythink/shisui-danmu/main/assets/danmu-product-demo.gif" alt="DANMU 基础功能实录:启动、实时弹幕与终端交互" width="100%">
59
33
  </a>
60
34
  </p>
61
35
 
62
- 录屏在 README 内自动循环播放;点击画面可观看清晰版 MP4。
36
+ 这是基础功能实录,**不代表已经展示 v0.5.0 的 AI 助手流程**。点击画面观看完整 MP4。
63
37
 
64
- <p align="center">
65
- <a href="https://danmu.elazer.wang"><strong>访问 DANMU 官网</strong></a>
66
- &nbsp;·&nbsp;
67
- <a href="https://danmu.elazer.wang/danmu-product-demo.mp4"><strong>观看完整 MP4(56 秒)</strong></a>
68
- </p>
69
-
70
- ## 为什么做 DANMU
38
+ ## v0.5.0 变化
71
39
 
72
- 知识型直播的难点通常不是“弹幕不够多”,而是信息密度太高:问题夹在闲聊里,历史接口与实时 WebSocket 偶尔漏包,主播还要同时确认推流、场景和麦克风状态。
40
+ - **本机 ACP 助手**:接入用户自己的原生 AI 工具,打开面板、连接模型、启动值班与允许公开发送分别控制。Pi 提供显式准备命令 `danmu setup pi`,不代装原生 Pi、不登录、不启动推理。
41
+ - **工作区与历史**:可编辑人设资料、按房间历史索引、跨场检索和维护副本;旧消息标记为 `↶`,不会重新进入 AI 队列。后台加载不阻塞主界面,修复先备份,不删除原始 Journal。
42
+ - **统一设置与账号**:`/settings` 汇集五类设置;主账号与独立助手号分开管理、分开发送队列,独立号失效不回退主号。审核与编辑保留人工草稿。
43
+ - **候选安全与发送诊断**:未知或重复本批目标整批拒绝,随后继续处理新消息;真实连接、协议、身份和磁盘错误仍明确暴露。发送未确认不自动补发。
44
+ - **低成本合批与轮次诊断**:普通空白、纯笑声和平台已识别纯表情可跳过;连续空轮后普通消息按 5–10 秒合批,点名不等合批但仍受单飞与授权限制。`/diag` 区分零候选、原生无正文、待审、拒绝和真正错误。
45
+ - **官网使用手册**:用 Astro Starlight 承载完整操作文档,提供章节导航与搜索;README 保持为产品入口。
73
46
 
74
- DANMU 把这些信号压缩成一块可扫读的终端界面:
47
+ 从 0.4.5 升级请沿用原安装渠道,运行 `danmu --version` 确认 `0.5.0`,再自行重启所有旧 TUI 实例。无需删除历史库。历史版本说明见 [Releases](https://github.com/rockythink/shisui-danmu/releases)。
75
48
 
76
- - **启动过程有反馈**:终端首帧出现后立即播放 DANMU Logo 动效,B 站客户端初始化、本地会话恢复与各项网络检查在动画期间并发执行;动画至少展示两秒,并展示作者 Elazer 与 `elazer.wang`;任一检查失败都会阻断启动,可选择重试、直接配置 OBS 密码或按 `S` 明确跳过;可随时按 `Ctrl+C` 退出;
77
- - **不漏重要互动**:历史窗口与实时流合并、去重,断线自动重连;
78
- - **问题留在眼前**:键盘选中弹幕、插入回复对象、设置重点消息;
79
- - **发送结果可确认**:长弹幕按 Unicode 字素安全分段,并等待主播身份回流;
80
- - **现场状态可感知**:直播状态、开播时长、看过、点赞、弹幕与在线人数分层显示;
81
- - **OBS 只做必要的事**:场景、推流、静音和单路麦克风电平,不复制完整控制台;
82
- - **结束后还有记录**:每场直播写入独立 Journal,可搜索并导出快照。
49
+ ## 安装与首次启动
83
50
 
84
- ## 快速开始
51
+ 任选一种渠道,安装后的命令都叫 `danmu`:
85
52
 
86
- ### 1. 安装
87
-
88
- 任选一种渠道;安装后的命令都叫 `danmu`。
89
-
90
- | 渠道 | 命令 | 适用环境 |
53
+ | 渠道 | 安装命令 | 适用环境 |
91
54
  | --- | --- | --- |
92
- | npm | `npm install -g danmu-tui` | 已安装 Node.js 18+ |
93
- | Bun | `bun install -g danmu-tui` | 已安装 Bun |
55
+ | npm | `npm install -g danmu-tui` | Node.js 18+ |
56
+ | Bun | `bun install -g danmu-tui` | Bun |
94
57
  | Homebrew | `brew install rockythink/tap/danmu` | macOS、Linux |
95
- | Cargo | `cargo install shisui-danmu --locked` | 已安装 Rust 1.89+ |
58
+ | Cargo | `cargo install shisui-danmu --locked` | Rust 1.89+ |
96
59
  | 安装脚本 | 见下方 | macOS、Linux、Windows Git Bash |
97
- | 手动下载 | [GitHub Releases](https://github.com/rockythink/shisui-danmu/releases/latest) | 全平台 |
98
-
99
- 产品名统一为 **DANMU**。为保持已有仓库链接和本地数据目录兼容,GitHub 仓库与 Cargo 包继续使用 `shisui-danmu`,npm 包使用 `danmu-tui`;所有渠道安装后的可执行命令均为 `danmu`。
100
-
101
- npm 与 Bun 安装的是同一份 Rust 原生程序,不是 JavaScript 重写;包内不运行 `postinstall` 下载脚本。无需全局安装也可以直接执行:
102
-
103
- ```bash
104
- npx danmu-tui <房间号>
105
- bunx danmu-tui <房间号>
106
- ```
107
-
108
- 无 Node、Bun、Homebrew 或 Rust 环境时,使用安装脚本:
60
+ | 预编译包 | [GitHub Releases](https://github.com/rockythink/shisui-danmu/releases/latest) | 下列五种平台构建 |
109
61
 
110
62
  ```bash
111
63
  curl -fsSL https://raw.githubusercontent.com/rockythink/shisui-danmu/main/script/install_release.sh | bash
112
64
  ```
113
65
 
114
- 脚本会识别操作系统与 CPU 架构,下载对应 GitHub Release,验证 SHA-256,并安装到 `~/.local/bin/danmu`。Windows 也可以下载 `shisui-danmu-windows-x86_64.zip`,校验同名 `.sha256` 后将 `danmu.exe` 放入 `PATH`。
66
+ 脚本按平台下载 Release、校验 SHA-256,默认安装到 `~/.local/bin/danmu`。npm/Bun 包同样运行 Rust 原生程序,不是 JavaScript 重写,也不通过 `postinstall` 下载二进制。
115
67
 
116
- ### 2. 进入直播间
117
-
118
- ```bash
119
- danmu <房间号>
120
- ```
68
+ | 平台 | Release 文件 |
69
+ | --- | --- |
70
+ | macOS Apple Silicon | `shisui-danmu-macos-aarch64.tar.gz` |
71
+ | macOS Intel | `shisui-danmu-macos-x86_64.tar.gz` |
72
+ | Linux x86_64 | `shisui-danmu-linux-x86_64.tar.gz` |
73
+ | Linux aarch64 | `shisui-danmu-linux-aarch64.tar.gz` |
74
+ | Windows x86_64 | `shisui-danmu-windows-x86_64.zip` |
121
75
 
122
- 也可以显式传参:
76
+ 每个压缩包都有同名 `.sha256`。以上是**基础 TUI** 的构建范围;内置 ACP Runner 要求 Unix,部分宿主还有更窄的平台限制,不宣传 Windows 内置 AI 可用。
123
77
 
124
78
  ```bash
125
- danmu --room <房间号>
79
+ danmu --version
80
+ danmu <房间号>
126
81
  ```
127
82
 
128
- 公开监看不需要登录。启动后按 `/` 打开命令面板,`↑/↓` 选择,`Enter` 执行。
129
-
130
- ### 3. 登录并发送弹幕(可选)
83
+ 公开监看无需登录。需要人工发送时,登录的是 DANMU,而不是浏览器:
131
84
 
132
85
  ```bash
133
86
  danmu --login
87
+ danmu <房间号>
134
88
  ```
135
89
 
136
- 使用哔哩哔哩客户端扫码。登录成功后重新运行 `danmu <房间号>`,直接在底部输入框发送弹幕。
137
-
138
- ```bash
139
- danmu --logout
140
- ```
90
+ 用哔哩哔哩客户端扫码;进入后在输入框写正文,按 Enter 发送,粘贴只插入内容。`danmu --logout` 只退出 DANMU 主账号。发送区的 `?` 表示送达未确认,不应当作确定失败自动重发。
141
91
 
142
- `--logout` 只清除 DANMU 自己的 B 站登录态,不读取浏览器 Cookie,也不与其他应用共享凭据。
92
+ 升级、PATH、启动自检及各渠道细节见 [安装与升级](https://danmu.elazer.wang/guide/#安装与升级)。
143
93
 
144
- ## 界面读法
94
+ ## 高频操作
145
95
 
146
- | 区域 | 内容 |
96
+ | 操作 | 入口 |
147
97
  | --- | --- |
148
- | 顶部第一行 | `LIVE / OFFLINE / ROTATING`、直播标题、已开播时长 |
149
- | 顶部第二行 | 主播身份、OBS 连接、麦克风静音状态 |
150
- | Ghost Stage | 历史与实时事件合并后的主信息流;重点消息显示在标题上 |
151
- | 临时互动提示 | 进场、点赞显示在 Ghost Stage 底边,姓名至少稳定展示 2 秒;同批最多展示 3 个完整名字,进场优先,空间足够时附加点赞摘要。进场批次最长展示 5 秒、点赞 3 秒;只保留当前批次和下一批摘要,不积压播报,也不挤动正文或占用弹幕历史缓存;关闭姓名显示同时隐藏提示中的名字 |
152
- | 通知区 | 登录、发送、重连、OBS 操作的进度、错误与可执行提示 |
153
- | 输入框顶栏 | 发送状态、业务计数,以及空间允许时的麦克风电平 |
154
- | 输入框 | Unicode 字素级编辑;最多四行,光标始终保持可见 |
98
+ | 搜索指令,返回时保留草稿与光标 | Ctrl+O 或 `/commands` |
99
+ | 设置与操作总菜单 | `/settings` |
100
+ | 切换消息布局 | Tab |
101
+ | 浏览历史 / 选择回复对象 | ↑↓ / Shift+↑↓ |
102
+ | 插入选中对象的 @ | 选择后 Enter |
103
+ | 取消当前操作 / 返回实时 | Esc;浏览或选择状态下 End 也返回实时 |
104
+ | 助手运行面板 / 候选审核 | Ctrl+G 或 `/ai` / `/review` |
105
+ | 暂停助手与撤销发送许可 | Ctrl+P 或 `/pause` |
106
+ | 重点消息 / 搜索归档 | `/pin` / `/find [关键词]` |
107
+ | 诊断与上轮摘要 | `/diag`,F1 或 `?` 展开详情 |
108
+ | 安全退出 | Ctrl+C 或 `/quit` |
155
109
 
156
- 底栏计数使用明确的数据口径:
110
+ 正常编辑输入时 End 是行尾。主界面可原生拖选文字,用终端复制快捷键复制;macOS 的 ⌘C 是复制,Ctrl+C 是退出。
157
111
 
158
- | 符号 | 含义 | 来源 |
159
- | --- | --- | --- |
160
- | `◉` | 累计看过 | `WATCHED_CHANGE.data.num` |
161
- | `♥` | 累计点赞 | `LIKE_INFO_V3_UPDATE.data.click_count` |
162
- | `▤` | 本次运行收到的实时弹幕数 | 本地会话计数 |
163
- | `●` | 当前在线人数 | 登录后读取 `getOnlineRank.data.onlineNum` |
112
+ OBS 从 `danmu --configure-obs` 或 `/settings obs` 配置。`/obs start` 会真的开始推流;`/obs stop` 需要确认,随后 3 秒内可按 Esc 取消。退出 DANMU 不会停止 OBS 推流。
164
113
 
165
- `MIC` 电平来自 OBS WebSocket v5 的 `InputVolumeMeters` 事件:约 50 ms 接收一次,在 Adapter 内聚合为 10 Hz;上升立即响应,回落平滑。界面空间不足时先缩短电平条,再隐藏数值,极窄或 OBS 断连时完全隐藏。
114
+ ## AI 与平台边界
166
115
 
167
- ## 键盘与命令
116
+ **程序开源免费,不等于外部模型免费。** 原生宿主的安装、登录、订阅、模型费用和搜索额度由用户及对应服务管理。
168
117
 
169
- ### 高频操作
118
+ 1. 在 `/settings` → AI助手 → 模型选择已安装、已认证的宿主;连接/同步只读取模型与思考档位,不开始值班。
119
+ 2. `/ai start` 开始处理新消息;先用 `/review` 阅读候选,完整看过后 Shift+Enter 批准。编辑中的 Enter 只保存,不发送。
120
+ 3. 自动发送必须由本人明确授权。保存过的自动偏好,仅在同房间、同发送 UID 且启动恢复检查通过时续用;暂停、身份或房间变化、身份失效会撤权。批量批准当前候选不授权未来候选。
170
121
 
171
- | 操作 | 按键 |
172
- | --- | --- |
173
- | 打开命令面板 | `/` |
174
- | 切换信息流 / 聊天布局 | `Tab` |
175
- | 浏览历史 | 鼠标滚轮,每次移动一条消息,不整页跳动 |
176
- | 回到最新消息 | `End` |
177
- | 选择回复对象 | `Shift+↑/↓` |
178
- | 插入 `@用户名` | 选择后按 `Enter` |
179
- | 取消选择或退出 | `Esc` |
180
- | 安全退出 | `Ctrl+C` 或 `/quit` |
181
- | 行首 / 行尾 | `Home` / `End`,或 `Ctrl+A/E` |
182
- | 删除到行首 / 删除前一个词 | `Ctrl+U/W` |
183
-
184
- ### TUI 命令
185
-
186
- | 命令 | 作用 |
187
- | --- | --- |
188
- | `/help` | 显示命令面板操作提示 |
189
- | `/login` · `/logout` | 扫码登录或清除独立登录态 |
190
- | `/layout` | 切换信息流与聊天布局 |
191
- | `/theme` | 打开主题选择;`/theme reload` 热加载自定义主题 |
192
- | `/names show\|hide` | 显示或隐藏用户名 |
193
- | `/time show\|hide` | 显示或隐藏消息时间 |
194
- | `/feature` | 将当前选中消息设为重点 |
195
- | `/archive [关键词]` | 搜索历史会话 |
196
- | `/obs` · `/obs status` | 检查或查看 OBS 状态 |
197
- | `/obs mute\|unmute` | 静音或取消静音所配置的麦克风 |
198
- | `/obs scene [名称]` | 列出或切换场景 |
199
- | `/obs config mic [名称]` | 列出或选择单路麦克风输入 |
200
- | `/obs start` | 开始推流 |
201
- | `/obs config password` | 隐藏输入并更新 TUI 私有 OBS 密码文件 |
202
- | `/obs stop` | 打开停播确认弹窗,默认选中“返回”;按 ↑ 选中“确认”并按 Enter,倒计时 3 秒后停止推流;确认与倒计时期间可按 Esc 返回 |
203
- | `/quit` | 安全退出并写入会话状态 |
204
-
205
- ## OBS 接入
122
+ Unix 用户接入官方 Node 版 Pi 前,先自行安装并认证 Pi,再执行:
206
123
 
207
- DANMU 使用 OBS 28+ 内置的 WebSocket v5,**不依赖 `obs-cli`、Python 或额外桥接进程**。
208
-
209
- 1. 在 OBS 中打开 **工具 → WebSocket 服务器设置**;
210
- 2. 启用 WebSocket 服务器,记下端口;如启用了身份验证,同时准备密码;
211
- 3. 运行配置向导:
124
+ ```bash
125
+ danmu setup pi
126
+ ```
212
127
 
213
- ```bash
214
- danmu --configure-obs
215
- ```
128
+ 这只准备应用私有的 `pi-acp@0.0.33`,需要 Node.js 20+ 与 npm;重复执行复用已准备适配器,不加载用户全局扩展,不替换不可用模型或思考档位。完整流程见 [Pi 接入示例](https://danmu.elazer.wang/guide/#pi接入示例)。
216
129
 
217
- 4. 依次填写主机、端口、默认直播场景、麦克风输入名和密码;
218
- 5. 进入 TUI 后运行 `/obs status` 验证连接。
130
+ 当前适配列表为 OMP、Gemini、Claude Code、Codex、OpenCode、Pi、Amp、GitHub Copilot CLI、DeepSeek Harness。**适配实现或隔离验证不等于九种宿主、所有真实模型均已验收。** 具体版本与限制见[开发接入向导](https://github.com/rockythink/shisui-danmu/blob/main/docs/agent-onboarding.md#九宿主接入与认证边界)。
219
131
 
220
- 启动自检发现 OBS 缺少密码时会停留在检查界面:按 `Enter` 直接隐藏输入密码并重新检查,或按 `S` 跳过本次故障继续进入弹幕台。其他网络检查失败时,`Enter` 表示重试。
132
+ 平台目前只接入 B 站。模型不能授权发送、操作电脑或自报送达;联网默认关闭,开启也仅准入搜索。麦克风状态不是语音内容识别。连续空轮合批不承诺固定省费比例、永不漏答或永不报错。
221
133
 
222
- OBS 密码不会写入系统“密码”/钥匙串或 `obs-control.json`。配置向导或 TUI 中的 `/obs config password` 会把密码写入 DANMU 私有的 `obs-password` 文件;macOS/Linux 权限固定为 `0600`。
134
+ ## 文档
223
135
 
224
- 一次性运行仍可使用 `OBS_API_PASSWORD` 环境变量覆盖本地密码。不使用 OBS 身份验证则无需设置。主机、端口、场景与输入名写入 DANMU 独立配置;停止推流始终需要二次确认。
136
+ - **[官网使用手册](https://danmu.elazer.wang/guide/)**:安装、设置、OBS、AI、审核、账号、成本、数据与排错。
137
+ - [故障排查](https://danmu.elazer.wang/guide/#故障排查):先看诊断、保留草稿和原始历史,不靠删库或重放旧消息解决问题。
138
+ - [命令参考](https://danmu.elazer.wang/guide/#命令参考与进一步阅读):完整 CLI、TUI 与高级隔离入口。
139
+ - [开发接入向导](https://github.com/rockythink/shisui-danmu/blob/main/docs/agent-onboarding.md)、[功能矩阵](https://github.com/rockythink/shisui-danmu/blob/main/docs/terminal-feature-matrix.md):实现契约与验证边界,不代替用户手册。
225
140
 
226
- ## 配置与主题
141
+ 用户手册只维护在官网的 Starlight 内容目录,随源码版本管理,不另维护一份 GitHub 操作手册。
227
142
 
228
- ### 启动参数
143
+ ## 高级集成
229
144
 
230
- ```text
231
- danmu [房间号]
232
- [--room <房间号>]
233
- [--single-line <true|false>]
234
- [--show-time <true|false>]
235
- [--show-name <true|false> | --hide-name]
236
- [--theme <主题名>]
237
- [--config <路径>]
238
- ```
145
+ <details>
146
+ <summary>外部 Agent、CLI/MCP 契约与隔离运行</summary>
239
147
 
240
- 运行 `danmu --help` 查看完整参数。
148
+ ### 连接已有实例
241
149
 
242
- ### TOML 配置
150
+ 外部 Agent 与 TUI 连接同一运行实例,不另启动 TUI、不读取平台凭据。用户须显式提供绝对私有目录:
243
151
 
244
- ```toml
245
- room_id = "123456"
246
- single_line = true
247
- chat_layout = false
248
- show_time = true
249
- show_name = true
152
+ ```bash
153
+ danmu --instance /绝对私有实例目录 <房间号>
250
154
  ```
251
155
 
252
- CLI 参数优先于 TOML。可通过 `--config <路径>` 使用指定配置文件。
253
-
254
- ### True Color 主题
255
-
256
- 内置四套深色主题:
156
+ 另一个终端或宿主连接该实例:
257
157
 
258
- - `shisui`
259
- - `catppuccin-mocha`
260
- - `tokyo-night`
261
- - `gruvbox-dark`
262
-
263
- ```text
264
- /theme
265
- /theme tokyo-night
266
- /theme reload
158
+ ```bash
159
+ danmu --instance /绝对私有实例目录 agent status '{}'
160
+ danmu --instance /绝对私有实例目录 mcp
267
161
  ```
268
162
 
269
- 首次运行会生成 `themes.json`。输入 `/theme` 可查看当前实际路径。复制现有主题对象并修改 ID、`label` 与十个 `#RRGGBB` 语义色,即可创建自定义主题;保存后执行 `/theme reload`,不必重启。
270
-
271
- ## 数据、凭据与恢复
272
-
273
- DANMU 使用独立命名空间,不读取商业 GUI、浏览器或其他直播工具的数据:
163
+ MCP 入口由宿主以 stdio 启动,stdout 只输出 JSON-RPC。没有 `--instance` 时基础 TUI 仍可使用,但不向外部 Agent 开放端点。
274
164
 
275
- - B 站 Cookie / CSRF:独立 `BilibiliAccount/session.json`,Unix 权限 `0600`;
276
- - OBS 密码:独立 `obs-password` 文件,Unix 权限 `0600`;可由 `OBS_API_PASSWORD` 临时覆盖;不使用系统钥匙串;
277
- - OBS 非敏感配置:独立 `obs-control.json`;
278
- - 主题与启动配置:平台配置目录中的 `shisui-danmu/`;
279
- - 会话记录:每场直播一个目录,持续追加 `journal.jsonl`;
280
- - 正常结束:额外生成 `snapshot.json` 与 `summary.md`;
281
- - 异常退出:下次进入同一房间时恢复未结束会话。
165
+ ### 共用业务契约
282
166
 
283
- Cookie、CSRF 和原始 B 站 payload 不进入领域事件或会话导出。
167
+ CLI:`danmu --instance DIR agent 操作 'JSON对象'`。MCP 工具名为 `danmu_操作`,宿主可能增加服务器名前缀。
284
168
 
285
- ## 架构
286
-
287
- ```mermaid
288
- graph LR
289
- B[Bilibili Adapter] --> D[Platform-neutral Domain]
290
- O[OBS WebSocket Adapter] --> T[Ratatui Terminal]
291
- D --> T
292
- D --> J[JSONL Session Journal]
293
- C[CLI / TOML / Theme Catalog] --> T
294
- ```
295
-
296
- - `src/bilibili/`:房间解析、历史补偿、WebSocket、账号与发送;
297
- - `src/domain/`:标准事件、会话、指标、去重与问题分类;
298
- - `src/obs.rs`、`src/obs/`:有限 OBS 控制与电平聚合;
299
- - `src/terminal/`:Ratatui 渲染、输入、二维码与电平表;
300
- - `src/persistence.rs`:追加式 Journal、恢复、搜索和导出。
169
+ | 操作 | 参数与结果 |
170
+ | --- | --- |
171
+ | `status` | 返回本场 `session`、`active`、`available`、`sending_enabled`、最新 `cursor`;不授权 |
172
+ | `messages` | `session`、`cursor`、`limit`(1..200,默认 50)、`wait_ms`(0..25000);返回到达顺序的稳定消息 ID、消费 `cursor`、`latest_cursor`、`oldest_cursor` 及 `gap`。空页是正常超时,不自动标黄 |
173
+ | `report` | `session`、`caller`、`request_id`、`message_id`、`state`(`processing` / `finished` / `failed`);不能自报 confirmed |
174
+ | `reply` | `session`、`caller`、`request_id`、原 `message_id`、`text`、`candidate`;`candidate=true` 等待 TUI 确认;受理不代表发送 |
175
+ | `result` | `session`、`caller`、`request_id`;查询 `awaiting_approval` / `accepted` / `sending` / `confirmed` / `uncertain` / `rejected` / `cancelled` |
301
176
 
302
- 平台协议只存在于 Adapter。领域 Module 不依赖 B 站原始字段。
177
+ 完整流程见[共享 danmu-duty Skill](https://github.com/rockythink/shisui-danmu/blob/main/agent-package/skills/danmu-duty/SKILL.md)。每场保留 512 项增量事件、4096 项幂等操作;超出窗口明确 `gap`,幂等记录满则拒绝新请求而非驱逐旧记录。同一操作重传必须保持 `caller`、`request_id` 与参数不变;不同调用者可合法回复同一原消息。
303
178
 
304
- ## 能力边界
179
+ 每次启动或新场都有独立随机 `session`;旧请求不跨场补发,预载历史不充当增量游标。外部工具不能开自动许可;生产启动恢复只采用本人先前保存、范围仍匹配且核验通过的授权,工具重连本身不恢复权限。
305
180
 
306
- DANMU 有意保持克制:
181
+ Unix 实例目录 0700、描述文件 0600;端点只绑定 127.0.0.1 随机端口,使用实例私有随机 token 与独占目录锁。同一系统用户不是抵御恶意本机代码的 OS 沙箱,不向不可信进程共享实例目录。
307
182
 
308
- **包含**:公开房间监看、历史与实时事件去重、自动重连、登录后发送、重点互动、会话归档、True Color 主题、有限 OBS 控制、单路麦克风电平。
183
+ ### MCP 取消语义
309
184
 
310
- **不包含**:播放器、完整直播画布、音频混音台、录制与 Replay Buffer、OBS 场景编辑器、商业 GUI。
185
+ 每连接最多 16 个未回收工具调用,完成后回收容量。`notifications/cancelled` 按当前连接的 JSON-RPC `requestId` 取消尚未完成的 `danmu_messages` 有限等待,释放读取连接,不再发送该取消请求的响应。未知或已完成 ID 忽略;完成早于取消时,允许已经发出的一次响应。
311
186
 
312
- 完整行为基线见 [终端舞台功能矩阵](docs/terminal-feature-matrix.md)。
187
+ 取消通知不撤销已提交回复,不开关发送许可。按 [MCP 取消规范](https://modelcontextprotocol.io/specification/2025-11-25/basic/utilities/cancellation),客户端应停止等待被取消 ID,而不是继续等待正常空页。发送结果不确定时查询原请求,不使用新 ID 猜测重发。
313
188
 
314
- ## 从源码构建
189
+ Runner 持有时 `status.driver=runner`。外部读/查保留,同一内置调用者 `danmu-assistant` 的 `report/reply` 返回 `runner_active`;其他独立调用者仍受原权限控制。不要换调用者绕过同一助手互斥;切换前由用户停止旧外部值班,DANMU 不抢停外部 Agent。
315
190
 
316
- 需要 Rust 1.89 或更高版本:
191
+ ### 外部配置生成器
317
192
 
318
- ```bash
319
- git clone https://github.com/rockythink/shisui-danmu.git
320
- cd shisui-danmu
321
- cargo build --release --locked
322
- ```
323
-
324
- 安装到 `~/.local/bin/danmu`:
325
-
326
- ```bash
327
- ./script/install_cli.sh
193
+ ```text
194
+ python3 script/agent_config.py --host HOST --binary /绝对路径/danmu --instance /绝对私有实例目录
328
195
  ```
329
196
 
330
- 或使用 Cargo:
331
-
332
- ```bash
333
- cargo install --locked --path .
334
- ```
197
+ 生成器只打印配置,不安装、不写宿主设置、不启动宿主。`HOST` 可选 `omp`、`claude`、`codex`、`opencode`、`gemini`、`cursor`、`vscode`、`amp`、`pi`;这是外部接入格式列表,不等同于内置 Runner 宿主列表。Amp 使用 `amp.mcpServers`;Pi 只输出明确标记的 CLI 示例,不安装 MCP 扩展。用户负责合并配置、信任服务器与限制宿主自身的其他能力。
335
198
 
336
- ## 开发与验证
199
+ ### 无房间隔离示例
337
200
 
338
201
  ```bash
339
- ./script/verify.sh
202
+ INSTANCE="$(mktemp -d /tmp/danmu-agent.XXXXXX)"
203
+ danmu --instance "$INSTANCE" local --assistant
340
204
  ```
341
205
 
342
- 完整门禁包含:
206
+ `local` 要求全新的空私有目录,只使用人工输入与 LocalTransport,不读取生产配置、不登录、不连接真实房间或 OBS。`--assistant` 只打开面板,不启动模型或授权。
343
207
 
344
- - `cargo fmt --check`
345
- - 严格 `clippy`
346
- - 全目标测试
347
- - Release 构建
348
- - CLI 冒烟
208
+ 在这个隔离 TUI 内可输入 `/event 观众甲 怎样理解增量游标?`,用 `/local confirmed|uncertain|rejected` 选择本地传输结果,用 `/session end|new` 演练场次切换。这些是本地 TUI 命令,不是外部 CLI/MCP 控制口;外部五操作不能启动 Runner、注入事件或批准发送。
349
209
 
350
- GitHub Actions 在 macOS、Linux、Windows 上执行对应 Rust 门禁。提交前请阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。
210
+ 工具/本地入口不能混用房间、登录、OBS、回放或生产配置参数。`setup pi` 独立执行,不接受 `--instance` 等 TUI 参数。退出只移除该实例端点并释放锁,保留记录;本地自动许可不保存为真实房间授权。
351
211
 
352
- ## Release 资产
212
+ </details>
353
213
 
354
- | 平台 | 文件 |
355
- | --- | --- |
356
- | macOS Apple Silicon | `shisui-danmu-macos-aarch64.tar.gz` |
357
- | macOS Intel | `shisui-danmu-macos-x86_64.tar.gz` |
358
- | Linux x86_64 | `shisui-danmu-linux-x86_64.tar.gz` |
359
- | Linux aarch64 | `shisui-danmu-linux-aarch64.tar.gz` |
360
- | Windows x86_64 | `shisui-danmu-windows-x86_64.zip` |
361
-
362
- 指定版本或安装目录:
363
-
364
- ```bash
365
- curl -fsSL https://raw.githubusercontent.com/rockythink/shisui-danmu/main/script/install_release.sh | \
366
- DANMU_VERSION=v0.4.4 DANMU_INSTALL_DIR="$HOME/bin" bash
367
- ```
214
+ ## 开发、贡献与许可
368
215
 
369
- 卸载:
216
+ 需要 Rust 1.89+;网站构建使用 Node.js 24。
370
217
 
371
218
  ```bash
372
- curl -fsSL https://raw.githubusercontent.com/rockythink/shisui-danmu/main/script/install_release.sh | bash -s -- --uninstall
219
+ git clone https://github.com/rockythink/shisui-danmu.git
220
+ cd shisui-danmu
221
+ ./script/verify.sh
222
+ ./script/install_cli.sh
373
223
  ```
374
224
 
375
- 卸载只删除可执行文件,不删除配置、系统凭据或会话日志。
376
-
377
- ## License、商标与安全
225
+ `verify.sh` 执行格式检查、严格 Clippy、全目标测试、Release 构建及 CLI 冒烟。CI 在 macOS、Linux、Windows 执行 Rust 门禁,并构建官网。平台协议留在 Adapter,领域模块不直接依赖 B 站协议字段。贡献前阅读 [CONTRIBUTING.md](https://github.com/rockythink/shisui-danmu/blob/main/CONTRIBUTING.md)。
378
226
 
379
- 源代码按 [Mozilla Public License 2.0](LICENSE) 发布,第三方组件见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。MPL-2.0 不授予 **DANMU** 名称、Logo、App 图标或其他品牌资产的商标许可,详见 [TRADEMARKS.md](TRADEMARKS.md)。
227
+ 源代码采用 [MPL-2.0](https://github.com/rockythink/shisui-danmu/blob/main/LICENSE),第三方说明见 [THIRD_PARTY_NOTICES.md](https://github.com/rockythink/shisui-danmu/blob/main/THIRD_PARTY_NOTICES.md)。开源许可不授予 DANMU 名称、Logo 或其他品牌资产的商标许可,详见 [TRADEMARKS.md](https://github.com/rockythink/shisui-danmu/blob/main/TRADEMARKS.md)。
380
228
 
381
- 安全问题请按 [SECURITY.md](SECURITY.md) 私下报告。不要在公开 Issue 中提交 B 站 Cookie、CSRF token、OBS 密码、系统凭据存储内容或本机会话日志。
229
+ 安全问题按 [SECURITY.md](https://github.com/rockythink/shisui-danmu/blob/main/SECURITY.md) 私下报告。不要在公开 Issue 中提交 Cookie、CSRF token、OBS 密码、模型认证、Bridge token 或含个人信息的历史记录。
@@ -1,5 +1,28 @@
1
1
  # Third-party notices
2
2
 
3
+ ## agent-client-protocol
4
+
5
+ - Repository: <https://github.com/agentclientprotocol/rust-sdk>
6
+ - Version: 2.1.0 (exact Cargo.lock pin; default features disabled).
7
+ - License: Apache-2.0
8
+ - Usage: official typed ACP v1 client, JSON-RPC correlation and dispatch. The
9
+ application retains bounded transport and native-host/business authorization.
10
+ - Transitive versions and license identifiers are captured in the 04-SDK
11
+ dependency evidence; no adapter or native Agent is bundled.
12
+
13
+ ## rusqlite / libsqlite3-sys
14
+
15
+ - Repository: <https://github.com/rusqlite/rusqlite>
16
+ - Locked versions: rusqlite 0.37.0, libsqlite3-sys 0.35.0.
17
+ - Rust binding license: MIT. Bundled SQLite implements the room-scoped persistent FTS5 history index.
18
+
19
+ ## toml_edit
20
+
21
+ - Repository: <https://github.com/toml-rs/toml>
22
+ - Locked version: 0.23.10+spec-1.0.0.
23
+ - License: MIT OR Apache-2.0.
24
+ - Usage: update TUI preferences without discarding user TOML comments or unrelated sections.
25
+
3
26
  ## obws
4
27
 
5
28
  - Repository: <https://forge.dnaka91.rocks/dnaka91/obws>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danmu-tui",
3
- "version": "0.4.4",
3
+ "version": "0.5.0",
4
4
  "description": "为知识型主播收束弹幕、问题与现场控制的原生终端工作台",
5
5
  "license": "MPL-2.0",
6
6
  "author": "Elazer <apps@elazer.wang>",
Binary file
Binary file
Binary file
Binary file
Binary file