tirtc-devtools-cli 0.0.5 → 0.0.7

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.
Files changed (37) hide show
  1. package/README.md +4 -2
  2. package/USAGE.md +152 -365
  3. package/dist/devtools/cli/src/config.d.ts +4 -13
  4. package/dist/devtools/cli/src/config.js +7 -19
  5. package/dist/devtools/cli/src/facade.d.ts +39 -154
  6. package/dist/devtools/cli/src/facade.js +9 -23
  7. package/dist/devtools/cli/src/guide.js +7 -9
  8. package/dist/devtools/cli/src/index.js +146 -248
  9. package/dist/devtools/cli/src/progress.d.ts +19 -0
  10. package/dist/devtools/cli/src/progress.js +63 -0
  11. package/dist/devtools/cli/src/token_command.d.ts +7 -0
  12. package/dist/devtools/cli/src/token_command.js +139 -0
  13. package/package.json +1 -1
  14. package/vendor/app-server/bin/native/macos-arm64/credential_napi.node +0 -0
  15. package/vendor/app-server/bin/native/macos-arm64/runtime_host_napi.node +0 -0
  16. package/vendor/app-server/bin/runtime/macos-arm64/include/tirtc/trp.h +30 -17
  17. package/vendor/app-server/bin/runtime/macos-arm64/lib/libmatrix_runtime_audio.a +0 -0
  18. package/vendor/app-server/bin/runtime/macos-arm64/lib/libmatrix_runtime_credential.a +0 -0
  19. package/vendor/app-server/bin/runtime/macos-arm64/lib/libmatrix_runtime_facade.a +0 -0
  20. package/vendor/app-server/bin/runtime/macos-arm64/lib/libmatrix_runtime_foundation_http.a +0 -0
  21. package/vendor/app-server/bin/runtime/macos-arm64/lib/libmatrix_runtime_foundation_logging.a +0 -0
  22. package/vendor/app-server/bin/runtime/macos-arm64/lib/libmatrix_runtime_media.a +0 -0
  23. package/vendor/app-server/bin/runtime/macos-arm64/lib/libmatrix_runtime_transport.a +0 -0
  24. package/vendor/app-server/bin/runtime/macos-arm64/lib/libmatrix_runtime_video.a +0 -0
  25. package/vendor/app-server/bin/runtime/macos-arm64/manifest.txt +10 -10
  26. package/vendor/app-server/dist/host/HostProtocol.d.ts +7 -5
  27. package/vendor/app-server/dist/host/HostProtocol.js +21 -10
  28. package/vendor/app-server/dist/host/HostServer.d.ts +2 -2
  29. package/vendor/app-server/dist/host/HostServer.js +93 -35
  30. package/vendor/app-server/dist/host/HostState.d.ts +0 -5
  31. package/vendor/app-server/dist/host/HostState.js +0 -1
  32. package/vendor/app-server/dist/host/RuntimeAdapter.d.ts +12 -0
  33. package/vendor/app-server/dist/host/RuntimeAdapter.js +42 -3
  34. package/vendor/app-server/dist/host/RuntimeSendWorker.d.ts +4 -0
  35. package/vendor/app-server/dist/host/RuntimeSendWorker.js +17 -0
  36. package/vendor/app-server/dist/protocol/contract.d.ts +72 -14
  37. package/vendor/app-server/dist/protocol/contract.js +11 -8
package/README.md CHANGED
@@ -6,11 +6,13 @@
6
6
 
7
7
  关于 `tirtc-devtools-cli` 命令的详细使用方法、参数说明与示例,请参考 [USAGE.md](./USAGE.md)。
8
8
 
9
+ 如果要先快速确认当前 binary 暴露了哪些命令面,直接运行:`node devtools/cli/bin/tirtc-devtools-cli.js --help`。
10
+
9
11
  ## 负责什么
10
12
 
11
13
  - **唯一用户产品门面**:提供 `tirtc-devtools-cli` 命令族,覆盖常见的 RTC 测试操作,让内部研发、外部开发者和 AI agent 脚本无需手写底层协议。
12
14
  - **配置解析与翻译**:负责解析用户传入的 CLI 参数和 TOML 配置文件,进行本地必填校验、脱敏,并翻译为 App Server 协议的 request。
13
- - **产品级 Observability**:将底层的运行时事件和状态翻译为结构化输出 (JSON) 或友好的终端日志输出。
15
+ - **产品级 Observability**:将底层的运行时事件和状态翻译为结构化输出 (JSON) 或友好的终端日志输出;对长耗时命令补轻量进度提示。
14
16
  - **调试期工具内聚**:承接调试期必要工具(如 token bootstrap、二维码与媒体预处理)的产品化入口,避免把调试流程散落在 runtime 或外部手工步骤中。
15
17
  - **本地 token 工具**:提供直接签发 token、打印组合 JSON、单独 token 与本地二维码 PNG 路径的公开 CLI 能力,服务本地联调与体验验证。
16
18
 
@@ -49,4 +51,4 @@
49
51
 
50
52
  - 本地测试配置文件路径:`devtools/cli/tests/.local/runtime-backed.e2e.local.json`(必需,已在 `.gitignore` 忽略)。
51
53
  - 示例模板:`devtools/cli/tests/runtime-backed.e2e.config.example.json`。
52
- - 推荐先运行 `tirtc-devtools-cli media assets prepare --source .refers/simple.mp4 --output-root ./.tmp/tirtc-devtools-cli/assets`,再把 `assetsDir` 指向返回的 `assets_dir`。
54
+ - CLI server-only 正式 E2E 现在直接读取 `mp4Path`,由 `service start` 内部自动 prepare;不再要求先手工 prepare 再维护 `assetsDir`。
package/USAGE.md CHANGED
@@ -2,435 +2,222 @@
2
2
 
3
3
  `tirtc-devtools-cli` 是基于 `app-server/host` 的命令行门面,用来控制会话、服务、连接、流、命令通道与调试工具。
4
4
 
5
- ## 一、先说清楚关系
5
+ ## 一、关系
6
6
 
7
- - Runtime:底层内核能力(transport/audio/video/media/facade)。
8
- - App Server:把 Runtime 组织成稳定控制面协议(Host 进程)。
9
- - CLI(`devtools/cli`):面向用户的命令行门面,通过协议控制 App Server。
7
+ - Runtime:底层 transport/audio/video/media 能力。
8
+ - App Server:把 Runtime 组织成稳定控制面协议。
9
+ - CLI:面向用户的命令行门面,通过协议驱动 App Server。
10
10
 
11
- 也就是说:CLI 不是独立重做一套 RTC 能力,而是消费 App Server;App Server 再消费 Runtime。
12
-
13
- ## 二、如何编译“最新”CLI
14
-
15
- 你提到的重点是对的:不仅要“安装”,还要能拿到**最新源码构建产物**。
16
-
17
- ### 1) 开发态构建(最快)
11
+ ## 二、开发态构建
18
12
 
19
13
  ```bash
20
- npm --prefix app-server ci && \
21
- npm --prefix devtools/cli ci && \
22
- npm --prefix app-server run build && \
23
- npm --prefix devtools/cli run build
14
+ npm --prefix app-server ci
15
+ npm --prefix devtools/cli ci
16
+ npm --prefix app-server run build
17
+ npm --prefix devtools/cli run build
24
18
  ```
25
19
 
26
- 构建后可直接运行:
20
+ 运行入口:
27
21
 
28
22
  ```bash
29
23
  node devtools/cli/bin/tirtc-devtools-cli.js --help
30
24
  ```
31
25
 
32
- ### 2) 发布态打包(可分发二进制)
26
+ ## 三、Help 菜单速览
33
27
 
34
- 按统一链路执行(先准备 runtime,再打包产品):
28
+ 安装或构建完成后,先用 help 菜单确认当前 binary 暴露的命令面:
35
29
 
36
30
  ```bash
37
- ./runtime/script/prepare_product_runtime.sh --platform macos-arm64 --consumer both
38
- ./app-server/script/package.sh
39
- ./devtools/cli/script/package.sh
31
+ node devtools/cli/bin/tirtc-devtools-cli.js --help
40
32
  ```
41
33
 
42
- 产物位置:
43
-
44
- - App Server:`app-server/bin/dist/`
45
- - CLI:`devtools/cli/bin/dist/`
34
+ 当前顶层 help 快照:
35
+
36
+ ```text
37
+ Usage: tirtc-devtools-cli [options] [command]
38
+
39
+ TiRTC DevTools CLI
40
+
41
+ Options:
42
+ --config <path> 配置文件路径(TOML)
43
+ --json 以机器可读 JSON 输出(便于脚本集成)
44
+ --session <sessionId> 指定会话 ID;除 service start/connect 外必须传
45
+ -h, --help display help for command
46
+
47
+ Commands:
48
+ host Host 基础能力(状态、停止)
49
+ init 新手第一步:生成 CLI 配置模板
50
+ media 媒体素材辅助:prepare local assets
51
+ service 服务端能力:启动/停止服务,等待远端接入
52
+ connection 客户端能力:主动连接远端 peer
53
+ token Token 工具:签发 token,并输出可直接使用的 JSON 与本地二维码 PNG
54
+ stream 流控制:发送/接收/消息
55
+ output 输出挂载:文件等消费者 attach/detach
56
+ command 命令通道:发送命令与事件跟踪
57
+ debug 调试工具:连接 bootstrap 二维码
58
+ events 事件订阅:实时观察 Host 事件
59
+ logs 日志导出:导出运行日志
60
+ report 报告查看/导出:验收证据
61
+ guide 新手入口:按场景给出可执行步骤
62
+ ```
46
63
 
47
- ### 3) 一键验收(推荐)
64
+ 常用子菜单 help:
48
65
 
49
66
  ```bash
50
- ./script/acceptance_app_server_devtools.sh
67
+ node devtools/cli/bin/tirtc-devtools-cli.js service --help
68
+ node devtools/cli/bin/tirtc-devtools-cli.js stream --help
69
+ node devtools/cli/bin/tirtc-devtools-cli.js command --help
70
+ node devtools/cli/bin/tirtc-devtools-cli.js token issue --help
71
+ ```
72
+
73
+ 当前关键子菜单快照:
74
+
75
+ ```text
76
+ $ node ... service --help
77
+ Commands:
78
+ start 启动 server-only 会话(必须显式提供 --config)
79
+ stop 停止服务端监听
80
+
81
+ $ node ... stream --help
82
+ Commands:
83
+ list 查看流快照列表
84
+ send 发送流:绑定 prepared local assets 并发起上行
85
+ receive 接收流:声明并接收下行
86
+ message <send> <streamId> <payload> 发送 UTF-8 字符串型 stream message
87
+
88
+ $ node ... command --help
89
+ Commands:
90
+ send <commandId> <kind> <payloadEncoding> <payload> 发送字符串型命令并等待响应
91
+ tail 持续监听命令相关事件
92
+
93
+ $ node ... token issue --help
94
+ Options:
95
+ --access-id <accessId>
96
+ --secret-key <secretKey>
97
+ --local-id <localId>
98
+ --openapi-entry <url>
99
+ --service-entry <entry>
100
+ --user-ttl-seconds <seconds>
101
+ --channel-ttl-seconds <seconds>
102
+ --qr-error-correction-level <level>
103
+ --ascii-max-columns <columns>
51
104
  ```
52
105
 
53
- ## 三、全局参数
106
+ ## 四、全局参数
54
107
 
55
108
  - `--config <path>`:TOML 配置文件路径。
56
109
  - `--json`:结构化 JSON 输出。
57
- - `--session <sessionId>`:指定会话(除 `service start` / `connection connect` 外必须显式传)。
110
+ - `--session <sessionId>`:除 `service start` / `connection connect` 外,其余业务命令必须显式提供。
58
111
 
59
- ## 四、会话模型
112
+ ## 五、会话模型
60
113
 
61
114
  一个 session = 一个常驻 Host 进程 + 一个 endpoint runtime 实例。
62
115
 
63
- - `tirtc-devtools-cli host session start`:创建会话,返回 `sessionId`
64
- - `tirtc-devtools-cli host session list`:查看会话
65
- - `tirtc-devtools-cli host session stop <sessionId>`:停止会话
66
-
67
- 设计约束:
68
-
69
- - 单机同一时刻只允许一个 `service` 会话;再次 `service start` 会直接失败并提示先停止已有服务会话。
70
- - `service start`:自动创建一个 session(也可通过 `--session` 绑定已有 session)。
71
- - `connection connect`:总是创建新的 session(不支持复用已有 session),允许多个 client 会话并行。
72
- - 除上述两条入口命令外,其他业务命令都必须显式传 `--session <sessionId>`。
73
-
74
- ## 五、命令总览
75
-
76
- ### Config
77
-
78
- 用途:初始化 CLI 配置文件,作为后续 `service/debug/logging` 等命令的参数来源。
79
-
80
- - `tirtc-devtools-cli init [outputPath]`:生成配置模板;不传路径时默认写入 `./.tmp/tirtc-devtools-cli/config.toml`。
81
-
82
- ### Host
83
-
84
- 用途:管理 Host 进程生命周期与会话健康状态。
85
-
86
- - `tirtc-devtools-cli host status`:查看当前 Host/service/connection/artifact 状态。
87
- - `tirtc-devtools-cli host stop`:停止当前 `--session` 对应的 Host 进程。
88
- - `tirtc-devtools-cli host stop --all`:停止全部 session 对应 Host,并清理本机 orphan host 进程。
89
-
90
- ### Service
91
-
92
- 用途:控制服务端角色(等待远端连接的一侧)。
93
-
94
- - `tirtc-devtools-cli service start [serviceEntry] [license]`:启动服务并进入等待连接状态。
95
- - `tirtc-devtools-cli service stop`:停止服务。
96
-
97
- 说明:`license` 必填;`serviceEntry` 可省略,省略时走 runtime/core/transport 默认值。
98
-
99
- `debug bootstrap qrcode` / `debug bootstrap qrcode-from-config` 默认复用当前唯一活跃 session;多 session 时请显式传 `--session`。
100
-
101
- ### Connection
102
-
103
- 用途:控制客户端侧连接动作(主动连接/断开)。
104
-
105
- - `tirtc-devtools-cli connection show`:查看当前连接状态。
106
- - `tirtc-devtools-cli connection connect [serviceEntry] <peerId> [token]`:主动发起连接(不传 token 时自动签发)。
107
- - `tirtc-devtools-cli connection disconnect`:主动断开连接。
108
-
109
- 说明:`connect` 每次都会新建一个 session;省略 `serviceEntry` 时,Host 回退到 runtime 配置默认值。
110
-
111
- 自动签发补充:
116
+ - `host session start`:创建会话。
117
+ - `host session list`:查看会话。
118
+ - `host session stop <sessionId>`:停止会话。
119
+ - `service start`:默认创建 `service` 会话;可通过 `--session` 绑定已有空闲会话。
120
+ - `connection connect`:总是创建新的 `client` 会话,不允许复用 `--session`。
112
121
 
113
- - 若命令行和 `[connection].token` 都为空,且 TOML 提供 `[connection.auto_token]` 的 `access_id/secret_key`,CLI 会传 `tokenMode=auto`,由 App Server 在连接前实时签发新 token。
114
- - `local_id` 可选;缺省时 App Server 侧回退为本次连接使用的 `peer_id`。
115
- - 若手动 token 与自动签发配置都缺失,命令会失败。
122
+ ## 六、server-only 正式入口
116
123
 
117
- ### Token
124
+ ### 1. 配置真相
118
125
 
119
- 用途:直接签发 token,并把调试所需的核心信息一次性输出到控制台,同时在本地生成二维码 PNG。
126
+ server-only 正式路径只认 `[server] + [logging]`:
120
127
 
121
- - `tirtc-devtools-cli token issue <peerId>`:签发 token;默认从环境变量读取凭据,并使用 `peerId` 作为默认 `localId`。
122
-
123
- 可选参数:
124
-
125
- - `--access-id <accessId>`:显式传 access id;不传时读取 `TIRTC_CONN_ACCESS_ID`。
126
- - `--secret-key <secretKey>`:显式传 secret key;不传时读取 `TIRTC_CONN_SECRET_KEY`。
127
- - `--local-id <localId>`:显式传 local id;不传时默认使用 `peerId`。
128
- - `--openapi-entry <url>`:覆盖默认 openapi entry。
129
- - `--service-entry <entry>`:附加到组合 payload,便于扫码后直接连到目标服务。
130
- - `--user-ttl-seconds <seconds>`:覆盖 user token ttl。
131
- - `--channel-ttl-seconds <seconds>`:覆盖 channel token ttl。
132
- - `--qr-error-correction-level <level>`:设置二维码纠错级别,可选 `L/M/Q/H`,默认 `M`。
133
- - `--ascii-max-columns <columns>`:显式限制 ASCII 二维码最大宽度;不传时优先读取当前终端宽度或 `COLUMNS`。
134
-
135
- 默认输出四部分:
128
+ ```toml
129
+ [server]
130
+ service_entry = ""
131
+ license = "runtime-license"
132
+ mp4_path = "/Users/allenfeng/Development/Repositories/tirtc-nexus/tirtc-matrix/.refers/simple.mp4"
133
+ video_stream_id = 11
134
+ audio_stream_id = 10
136
135
 
137
- - `Issued Token Summary`:面向人类阅读的摘要,快速确认 local/peer/entry/ttl。
138
- - `Token`:单独罗列 token 字符串,便于复制粘贴。
139
- - `Payload JSON`:组合 JSON,对方或 Agent 可直接复制使用。
140
- - `QR Code ASCII`:非 `--json` 模式下尽量输出 ASCII 二维码;如果终端宽度不足,会提示改看 PNG。
141
- - `QR Code PNG`:基于组合 JSON 生成的本地 PNG 文件绝对路径。适合人工打开图片后扫码。
136
+ [logging]
137
+ root_dir = "./.tmp/tirtc-devtools-cli/logging"
138
+ console_mirror = true
139
+ level = "info"
140
+ ```
142
141
 
143
142
  说明:
144
143
 
145
- - 组合 JSON 的 `type` 固定为 `tirtc-connect-token`。
146
- - PNG 二维码承载的是组合 JSON,不再暴露 `secret_key`。
147
- - CLI 不会在最终 JSON、控制台输出或二维码内容里打印 `access_id` 和 `secret_key`。
148
- - `--json` 模式下只输出 `payload`、`payloadJson`、`token` 和 `qrCodePngPath`,不输出 ASCII 二维码。
149
- - 如果觉得 ASCII 二维码太密,可把纠错级别从默认 `M` 调低到 `L`;如果希望更耐遮挡,可调高到 `Q` 或 `H`,但二维码会更密。
144
+ - `license`、`mp4_path`、`video_stream_id`、`audio_stream_id` 必填。
145
+ - `service_entry` 可留空,回退到底层默认值。
146
+ - `[service]`、`[stream.request_policy]`、`[streams.send]` 不再属于正式合同。
150
147
 
151
- 推荐默认做法:
148
+ ### 2. 启动命令
152
149
 
153
150
  ```bash
154
- export TIRTC_CONN_ACCESS_ID="<ACCESS_ID>"
155
- export TIRTC_CONN_SECRET_KEY="<SECRET_KEY>"
156
- tirtc-devtools-cli --json token issue "<PEER_ID>"
151
+ node devtools/cli/bin/tirtc-devtools-cli.js --config ./server.toml --json service start
157
152
  ```
158
153
 
159
- 只有在你明确需要覆盖环境变量时,才额外传 `--access-id` 和 `--secret-key`。
160
- 只有在你明确需要不同的本地用户标识时,才额外传 `--local-id`。
161
-
162
- ### Stream
163
-
164
- 用途:管理音视频流的发送/接收与远端请求策略。
165
-
166
- - `tirtc-devtools-cli stream list`:列出当前流状态。
167
- - `tirtc-devtools-cli media assets prepare --source <mp4> --output-root <dir>`:把 MP4 prepare 为 local assets。
168
- - `tirtc-devtools-cli stream send start <streamId> <media> <assets_dir>`:启动发送流并绑定 prepared local assets。
169
- - `tirtc-devtools-cli stream send stop <streamId>`:停止发送流。
170
- - `tirtc-devtools-cli stream receive start <streamId> <media>`:启动接收流。
171
- - `tirtc-devtools-cli stream receive stop <streamId>`:停止接收流。
172
- - `tirtc-devtools-cli stream request-policy get`:查看远端请求策略。
173
- - `tirtc-devtools-cli stream request-policy set <manual|auto-if-bound>`:设置远端请求策略。
174
-
175
- `request-policy` 行为:
176
-
177
- - `manual`:只上报远端请求事件,由上层显式决定是否发流。
178
- - `auto-if-bound`:如果本地已通过 `stream send start` 绑定 `(streamId, media, assets_dir)`,远端请求到达后自动启动发送。
179
-
180
- 发送链路说明:
181
-
182
- - `stream/sendStart` 走 runtime-backed 真实发送路径。
183
- - 实际链路:`prepared local assets -> A/V PTS 对齐 -> 真实 uplink (runtime-backed transport)`。
184
- - 返回字段中的 `source.local_assets.assets_dir` 可用于验收与排障。
185
-
186
- ### Output
187
-
188
- 用途:把流内容挂到具体消费端(文件、预览页等)。
189
-
190
- - `tirtc-devtools-cli output attach <streamId> <consumer> <mediaView> <format> <delivery> [targetPath] [maxFiles]`:附加输出消费。
191
- - `tirtc-devtools-cli output detach <outputId>`:移除输出消费。
192
-
193
- `output attach` 当前最小稳定组合(CLI 前置校验):
194
-
195
- - `consumer=web_preview`:`delivery` 必须是 `artifact_path`,`format` 推荐 `jpeg`/`pcm`(兼容旧值 `h264`/`g711a`)。
196
- - `consumer=file_sink`:`delivery` 必须是 `file`,`format` 必须是 `mp4`。
197
-
198
- `web_preview` 用法(音视频一起预览):
199
-
200
- - 先在客户端会话中启动接收(必须两路都起):
201
- - `tirtc-devtools-cli stream receive start <videoStreamId> video`
202
- - `tirtc-devtools-cli stream receive start <audioStreamId> audio`
203
- - 再挂接两路输出到同一个预览页:
204
- - `tirtc-devtools-cli output attach <videoStreamId> web_preview encoded jpeg artifact_path [videoTargetPath]`
205
- - `tirtc-devtools-cli output attach <audioStreamId> web_preview encoded pcm artifact_path [audioTargetPath]`
206
- - 两次 `output attach` 返回的 `result.preview.url` 应一致;用该 URL 在 Chrome 打开本地预览。
207
- - 页面打开后会自动触发 `GET /preview/start?token=...`;若浏览器拦截自动播放音频,请手动点击 `Start Stream` 解锁。
208
- - 可通过 `GET /preview/status?token=...` 查看 audio/video source 启动状态与 frame 计数。
209
-
210
- ### Command
211
-
212
- 用途:发送业务命令与实时观察命令事件。
213
-
214
- - `tirtc-devtools-cli command send <commandId> <kind> <payloadEncoding> <payload>`:发送命令。
215
- - `tirtc-devtools-cli command send-json <commandId> <kind> <payloadJson>`:以 JSON-first 形态发送命令。
216
- - `tirtc-devtools-cli command tail`:持续监听命令相关事件。
154
+ `service start` 固定流程:
217
155
 
218
- `command send-json` 约束:
156
+ 1. 读取并校验 `[server]`。
157
+ 2. 对 `mp4_path` 执行 prepare。
158
+ 3. 调用 `service/start`。
159
+ 4. 自动调用两次 `stream/sendStart`:一次音频、一次视频。
160
+ 5. 返回 `autoApplied` 摘要:`preparedAssetsDir`、固定 `mediaSendPolicy=AUTO_ON_CONNECTED`、以及音视频 sendStart 结果。
219
161
 
220
- - `payloadJson` 必须是合法 JSON 文本。
221
- - CLI 固定按 `payloadEncoding=json` 下发给 Host。
162
+ `--json` 模式下,CLI 会在 `stderr` 输出轻量进度提示:先显示 MP4 prepare,再显示 service start,避免长时间静默。
222
163
 
223
- ### Debug Bootstrap 二维码
164
+ ### 3. 自动发送语义
224
165
 
225
- 用途:生成客户端扫码连接所需的 bootstrap 二维码(只包含连接信息,不签发 token)。
166
+ - App Server server 角色固定使用 `AUTO_ON_CONNECTED`。
167
+ - CLI 不再暴露 request-policy 配置或命令。
168
+ - 一旦远端请求对应 media,已绑定的发送流会自动转为 `active`。
226
169
 
227
- - `tirtc-devtools-cli debug bootstrap qrcode <accessId> <secretKey> <peerId> [serviceEntry]`:按命令参数生成二维码。
228
- - `tirtc-devtools-cli debug bootstrap qrcode-from-config`:按 `[debug.connect_bootstrap]` 配置生成二维码。
229
-
230
- 二维码产物会落到 Host artifact 的 `debug/` 目录。
231
-
232
- ### 观测与报告
233
-
234
- 用途:做运行观测与验收证据导出。
235
-
236
- - `tirtc-devtools-cli events tail`:实时查看事件流。
237
- - `tirtc-devtools-cli logs export <outputPath>`:导出日志。
238
- - `tirtc-devtools-cli report show`:查看报告。
239
- - `tirtc-devtools-cli report export <outputPath>`:导出报告。
240
-
241
- ## 六、服务端操作指引(对接安卓扫码)
242
-
243
- 目标:只操作 CLI 服务端,启动后自动待推流;安卓端扫码拿到 bootstrap 信息,自行签发 token 后连接并观看音视频。
244
-
245
- ### 1) 启动服务端
170
+ ## 七、connection connect
246
171
 
247
172
  ```bash
248
- node devtools/cli/bin/tirtc-devtools-cli.js service start "" "runtime-license"
249
- ```
250
-
251
- 记下返回里的 `sessionId`。
252
-
253
- ### 2) 让服务端进入“自动按需发流”
254
-
255
- ```bash
256
- 编辑 `--config` 指向的 TOML:
257
- [stream.request_policy]
258
- mode = "auto-if-bound"
259
-
260
- [streams.send]
261
- assets_dir = "./.tmp/tirtc-devtools-cli/assets/<prepared-assets-id>"
262
- audio_stream_id = 10
263
- video_stream_id = 11
264
-
265
- 再执行 service start(CLI 会自动应用 request_policy + send 绑定)。
173
+ node devtools/cli/bin/tirtc-devtools-cli.js --config ./server.toml --json connection connect <serviceEntry> <peerId> [token]
266
174
  ```
267
175
 
268
176
  说明:
269
- - `auto-if-bound` 表示远端请求到达后,若本地已配置并应用发送绑定,服务端会自动开始对应发送。
270
- - `[streams.send]` 只配置一次 prepared assets 目录;音视频都从同一个 local assets 输入读取。
271
- - `audio_stream_id` 与 `video_stream_id` 必须与客户端请求的 stream id 一致。
272
-
273
- ### 3) 生成给安卓扫码的 bootstrap 二维码
274
-
275
- ```bash
276
- node devtools/cli/bin/tirtc-devtools-cli.js --session <SESSION_ID> debug bootstrap qrcode \
277
- "<access-id>" "<secret-key>" "<peer-id>" "<service-entry>"
278
- ```
279
-
280
- 命令会在 Host artifact 的 `debug/` 目录下生成:
281
- - `*.qr.png`(扫码图)
282
-
283
- ### 4) 安卓端扫码后的预期流程(安卓实现不在本仓库)
284
-
285
- - 安卓扫描二维码,解析出 bootstrap JSON。
286
- - 使用 `access_id + secret_key` 在客户端侧(或你们外部签发服务)签发连接 token。
287
- - 使用签发后的 token + `peer_id`(必要时加 `service_entry`)建立连接。
288
- - 连接成功后请求接收对应流(例如 `10/video`、`11/audio`),即可看到服务端已绑定的媒体内容。
289
-
290
- ### 4.1) 本地直接签发 token(公开调试入口)
291
-
292
- ```bash
293
- node devtools/cli/bin/tirtc-devtools-cli.js token issue \
294
- "<access-id>" "<secret-key>" "<local-id>" "<peer-id>" \
295
- --service-entry "<service-entry>"
296
- ```
297
-
298
- 输出包含:
299
-
300
- - 一份可直接复制的组合 JSON
301
- - 单独的 token 字符串
302
- - 同一份组合 JSON 对应的本地二维码 PNG 路径
303
-
304
- 二维码内容示例:
305
-
306
- ```json
307
- {
308
- "version": 1,
309
- "type": "tirtc-connect-token",
310
- "peer_id": "<peer-id>",
311
- "local_id": "<local-id>",
312
- "service_entry": "<service-entry>",
313
- "token": "<issued-token>",
314
- "openapi_entry": "http://api-test-tirtc.tange365.com",
315
- "user_ttl_seconds": 86400,
316
- "channel_ttl_seconds": 300,
317
- "generated_at": "<iso8601>"
318
- }
319
- ```
320
-
321
- ### 5) Web Preview 手动控制(建议验收路径)
322
-
323
- - 在客户端会话 attach 两路 `web_preview` 后,打开返回的 `preview.url`。
324
- - 页面默认只建立事件连接,不会自动起流。
325
- - 点击 `Start Stream`:触发服务端开始推送音视频。
326
- - 点击 `Stop Stream`:触发服务端停止推送。
327
- - 关闭页面:会自动触发一次 stop 请求(作为兜底)。
328
-
329
- ## 六点四、二维码内容协议(安卓对齐)
330
-
331
- `debug bootstrap qrcode*` 生成的 payload 是一个 JSON 字符串,字段如下:
332
-
333
- ```json
334
- {
335
- "version": 1,
336
- "type": "tirtc-connect-bootstrap",
337
- "access_id": "<access-id>",
338
- "secret_key": "<secret-key>",
339
- "peer_id": "<peer-id>",
340
- "service_entry": "<service-entry>"
341
- }
342
- ```
343
-
344
- 字段约束:
345
- - `version`: 固定 `1`。
346
- - `type`: 固定 `tirtc-connect-bootstrap`。
347
- - `access_id`: 客户端签发 token 所需。
348
- - `secret_key`: 客户端签发 token 所需。
349
- - `peer_id`: 目标服务端 peer 标识。
350
- - `service_entry`: 可选;为空或缺失时,客户端按自身默认 entry 策略处理。
351
-
352
- 注意:
353
- - 该二维码不包含 token,也不在 App Server 侧签发 token。
354
- - token 签发职责在客户端或外部系统。
355
-
356
-
357
- ## 六点五、日志配置与实时观测
358
177
 
359
- `[logging]` 段默认已在模板里生成:
178
+ - 若未显式传 `token`,CLI 会尝试使用 `[connection.auto_token]` 触发 App Server 自动签发。
179
+ - 若命令行、省略 token、且配置也缺自动签发凭据,则命令失败。
360
180
 
361
- - `root_dir`:会话日志根目录(默认 `./.tmp/tirtc-devtools-cli/logging`)
362
- - `console_mirror`:是否把 Host 关键日志镜像到当前命令终端
363
- - `level`:日志级别预留位(当前 Host 以统一关键路径日志为主)
181
+ ## 八、stream / output / command
364
182
 
365
- 日志目录结构:
366
-
367
- - `<root_dir>/<session_id>/host.process.log`(Host 进程 stdio)
368
- - `<root_dir>/<session_id>/runtime.host.log`(Host 侧结构化运行日志)
369
- - `<root_dir>/<session_id>/uplink/*.transport-uplink.log`(发送 worker 日志)
370
-
371
- 实时观察:
372
-
373
- - `node devtools/cli/bin/tirtc-devtools-cli.js --session <SESSION_ID> events tail`
374
- - 输出中包含 `family=logs` / `kind=host.line` 的实时日志事件
375
-
376
- ## 六点六、配置格式说明
377
-
378
- - 推荐使用 TOML(支持注释,便于人工维护)
379
- - `init` 默认生成 TOML 模板:`.tmp/tirtc-devtools-cli/config.toml`
183
+ ### Stream
380
184
 
381
- ## 七、本地 E2E 配置(必需)
185
+ - `stream list`
186
+ - `stream send start <streamId> <media> <assets_dir>`
187
+ - `stream send stop <streamId>`
188
+ - `stream message send <streamId> <payload>`
189
+ - `stream receive start <streamId> <media>`
190
+ - `stream receive stop <streamId>`
382
191
 
383
- 创建本地测试配置(已被 git ignore):
192
+ `stream message send` 是字符串型 payload contract;当前 Host/runtime-backed adapter 至少保证连接存在时可接受请求并落事件。
384
193
 
385
- ```bash
386
- mkdir -p devtools/cli/tests/.local
387
- cp devtools/cli/tests/runtime-backed.e2e.config.example.json devtools/cli/tests/.local/runtime-backed.e2e.local.json
388
- ```
389
-
390
- 推荐输入(客户端自行签发 token):
391
-
392
- ```json
393
- {
394
- "assetsDir": "./.tmp/tirtc-devtools-cli/assets/<prepared-assets-id>",
395
- "license": "<license>",
396
- "peerId": "<peer-id>",
397
- "useFakeToken": false,
398
- "accessId": "<access-id>",
399
- "secretKey": "<secret-key>",
400
- "e2eToken": "<externally-issued-token>"
401
- }
402
- ```
194
+ ### Output
403
195
 
404
- 说明:
405
- - `useFakeToken=true` 时会走本地 fake token(不依赖 token 签发服务)。
406
- - `useFakeToken=false` 时必须提供外部签发 token(优先 `e2eToken`,否则读取环境变量 `TIRTC_E2E_TOKEN`)。
407
- - `debug bootstrap qrcode*` 仅生成客户端连接信息二维码(`access_id` / `secret_key` / `peer_id` / 可选 `service_entry`),不负责签发 token。
196
+ - `output attach <streamId> <consumer> <mediaView> <format> <delivery> [targetPath] [maxFiles]`
197
+ - `output detach <outputId>`
408
198
 
409
- ## 八、FFmpeg 说明
199
+ CLI 仍会在本地收紧最小组合矩阵:
410
200
 
411
- - FFmpeg 不入库(不纳入 git 版本管理)。
412
- - 打包时自动准备并放入:
413
- - `devtools/cli/bin/tools/<platform>/`
414
- - `devtools/cli/bin/dist/tools/<platform>/`
201
+ - `web_preview` 只允许 `delivery=artifact_path`,`format` 允许 `jpeg|pcm|h264|g711a`
202
+ - `file_sink` 只允许 `delivery=file`,`format=mp4`
415
203
 
416
- ## 九、新手入口
204
+ ### Command
417
205
 
418
- - `node devtools/cli/bin/tirtc-devtools-cli.js guide quickstart`
206
+ - `command send <commandId> <kind> <payloadEncoding> <payload>`
207
+ - `command tail`
419
208
 
420
- 会直接打印“服务端启动 -> 绑定自动发流 -> 生成 bootstrap 二维码 -> 客户端扫码签发 token 并连接 -> 打开 Web Preview 后手动 Start/Stop -> 观测报告”的最小闭环步骤。
209
+ `command send` 是统一的主动发送 surface。`send-json` 不再属于正式产品合同;如果要发 JSON,请把 JSON 文本作为 `payload` 传入。
421
210
 
422
- ## 十、常用验收命令
211
+ ## 九、token / debug / report
423
212
 
424
- - App Server:`./app-server/script/test.sh acceptance`
425
- - CLI:`./devtools/cli/script/test.sh acceptance`
426
- - 联合一键:`./script/acceptance_app_server_devtools.sh`
213
+ - `token issue <peerId>`:本地签发 token。
214
+ - `debug bootstrap qrcode ...` / `debug bootstrap qrcode-from-config`:生成联调用二维码。
215
+ - `events tail`:实时查看事件流。
216
+ - `logs export <outputPath>`:导出日志。
217
+ - `report show` / `report export <outputPath>`:查看或导出报告。
427
218
 
428
- ## 十一、退出码
219
+ ## 十、本地 E2E 配置
429
220
 
430
- - `0`:成功
431
- - `1`:内部错误
432
- - `2`:协议版本不匹配
433
- - `3`:未初始化
434
- - `4`:请求/参数错误
435
- - `7`:连接失败
436
- - `8`:流不存在
221
+ - CLI server/client E2E 本地配置文件:`devtools/cli/tests/.local/runtime-backed.e2e.local.json`
222
+ - 推荐字段:`mp4Path`、`serviceEntry`、`license`、`peerId`、`accessId`、`secretKey`、可选 `e2eToken`
223
+ - CLI server-only E2E 不再要求先手工 `media assets prepare` 再回填 `assetsDir`
@@ -1,7 +1,10 @@
1
1
  export type CliConfig = {
2
- service?: {
2
+ server?: {
3
3
  service_entry?: string;
4
4
  license?: string;
5
+ mp4_path?: string;
6
+ video_stream_id?: number;
7
+ audio_stream_id?: number;
5
8
  };
6
9
  connection?: {
7
10
  service_entry?: string;
@@ -16,18 +19,6 @@ export type CliConfig = {
16
19
  channel_ttl_seconds?: number;
17
20
  };
18
21
  };
19
- stream?: {
20
- request_policy?: {
21
- mode?: 'manual' | 'auto-if-bound';
22
- };
23
- };
24
- streams?: {
25
- send?: {
26
- assets_dir?: string;
27
- audio_stream_id?: number;
28
- video_stream_id?: number;
29
- };
30
- };
31
22
  logging?: {
32
23
  root_dir?: string;
33
24
  console_mirror?: boolean;