tirtc-device-builder 0.3.0 → 0.4.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,668 +1,815 @@
1
1
  # TiRTC Device Builder
2
2
 
3
- TiRTC Device Builder 是一个面向设备开发者的 Codex Plugin 仓库。它把不同芯片平台的开发流程拆成独立 Skill,根据开发板型号、原理图、BSP、引脚表和外设示例生成、移植、编译和验证 TiRTC 设备工程。
3
+ TiRTC Device Builder 用于把 ESP32-S3 开发板接入 TiRTC。输入可以只有开发板型号,也可以包含原理图、BSP、引脚表和外设示例。安装后的 Codex Skill 会先检查环境、整理有依据的硬件事实,再生成独立的 ESP-IDF 工程并完成板级移植和编译。烧录和实机验证只有在开发者明确给出目标串口并授权后才会执行。
4
4
 
5
- 仓库当前包含:
5
+ 当前仓库提供一个 Skill:
6
6
 
7
- | Skill | 平台 | 能力 |
7
+ | Skill | 平台 | 主要用途 |
8
8
  |---|---|---|
9
- | `tirtc-esp32-builder` | ESP32-S3 / ESP-IDF 5.5.x | 环境诊断、Hardware IR、H5 实时查看/对讲、AI 对讲工程生成、编译、烧录和分层验收 |
9
+ | `tirtc-esp32-builder` | ESP32-S3、ESP-IDF 5.5.x | 环境检查、Hardware IR、工程生成、板级媒体移植、编译、烧录和分层验收 |
10
10
 
11
- 后续平台以新的同级 Skill 加入,例如 `skills/tirtc-taixin-builder/`。每个平台独立维护 SDK、构建工具、板级适配和验收约束。
11
+ 开发者不需要克隆 `tirtc-server-example`,也不用登录 npm。工程模板、协议文档和 TiRTC SDK 已打包在独立的 ESP32 Device Kit 中,安装命令会自动下载并校验。
12
12
 
13
- ## 能力边界
13
+ - npm 包:[tirtc-device-builder](https://www.npmjs.com/package/tirtc-device-builder)
14
+ - GitHub 仓库:[tangeai/tirtc-device-builder](https://github.com/tangeai/tirtc-device-builder)
15
+ - ESP32 Device Kit:[kit-esp32s3-v1.0.0](https://github.com/tangeai/tirtc-device-builder/releases/tag/kit-esp32s3-v1.0.0)
14
16
 
15
- ESP32 开发资源以独立、带版本和 SHA-256 的 Device Kit 发布。Kit 的事实源是公开的 [ThingConnect 示例仓库](https://github.com/tangeai/tirtc-server-example),但普通开发者不需要克隆该服务端仓库。Device Kit 不包含设备凭证、板卡 BSP 或用户媒体。
17
+ 文档导航:
16
18
 
17
- ## 维护者:发布最小 ESP32 资源包
19
+ - [新用户快速开始](#新用户快速开始)
20
+ - [准备板卡资料](#准备板卡资料)
21
+ - [依赖和支持范围](#依赖和支持范围)
22
+ - [安装方式和默认目录](#安装方式和目录)
23
+ - [检查、生成和编译](#常用检查和开发命令)
24
+ - [烧录和实机验收](#烧录和验收)
25
+ - [常见问题](#常见问题)
18
26
 
19
- 最小资源包只包含工程生成器、`esp32-h5-ai` 模板、`platform_client`、`runtime_config`、`wifi_manager`、TiRTC ESP32-S3 SDK 2.3.0 和相关设备协议文档。打包命令会检查白名单资源、记录源码提交、生成确定性压缩包和 SHA-256:
27
+ ## 新用户快速开始
20
28
 
21
- ```bash
22
- cd /home/workspace/tirtc-device-builder
23
-
24
- npm run pack:esp32-kit -- \
25
- --source /home/workspace/tirtc-server-example/thing-connect \
26
- --kit-version 1.0.0
27
- ```
29
+ ### 1. 确认 Node.js
28
30
 
29
- 输出文件位于 `dist/`:
31
+ 安装命令依赖 Node.js 18 或更高版本:
30
32
 
31
- ```text
32
- tirtc-esp32s3-kit-1.0.0.tar.gz
33
- tirtc-esp32s3-kit-1.0.0.tar.gz.sha256
33
+ ```bash
34
+ node --version
35
+ npm --version
34
36
  ```
35
37
 
36
- 从 `dist/` 目录校验附件:
38
+ `node --version` 应输出 `v18.x` 或更高版本。如果终端提示找不到 `node` 或 `npm`,先从 [Node.js 官方下载页](https://nodejs.org/en/download) 安装受支持版本,再打开一个新终端。
39
+
40
+ ### 2. 安装并检查开发环境
37
41
 
38
42
  ```bash
39
- cd /home/workspace/tirtc-device-builder/dist
40
- sha256sum -c tirtc-esp32s3-kit-1.0.0.tar.gz.sha256
43
+ npx --yes tirtc-device-builder@latest setup esp32 --install
41
44
  ```
42
45
 
43
- 发布前使用独立标签,并把两个文件作为 GitHub Release 附件上传:
46
+ 这条命令会:
44
47
 
45
- ```bash
46
- git tag -a kit-esp32s3-v1.0.0 -m "TiRTC ESP32-S3 Device Kit 1.0.0"
47
- git push origin kit-esp32s3-v1.0.0
48
+ - 把 `tirtc-esp32-builder` 安装到 Codex Skill 目录;
49
+ - 下载 ESP32 Device Kit 并校验 SHA-256;
50
+ - 复用当前可用的 ESP-IDF 5.5.x,找不到时安装 ESP-IDF 5.5.4;
51
+ - 安装 Espressif 管理的 ESP32-S3 工具链;
52
+ - 写入只包含本地路径的 `config.json` 和 `env.sh`;
53
+ - 激活托管环境并运行 Doctor。
48
54
 
49
- gh release create kit-esp32s3-v1.0.0 \
50
- dist/tirtc-esp32s3-kit-1.0.0.tar.gz \
51
- dist/tirtc-esp32s3-kit-1.0.0.tar.gz.sha256 \
52
- --repo tangeai/tirtc-device-builder \
53
- --verify-tag \
54
- --latest=false \
55
- --title "TiRTC ESP32-S3 Device Kit 1.0.0" \
56
- --notes "ESP-IDF 5.5.x;TiRTC SDK 2.3.0;包含 H5/AI 工程生成资源。"
55
+ 安装器只写入当前用户有权限的目录,不执行 `sudo`,也不修改 `.bashrc`、`.zshrc` 等 shell 配置。如果缺少系统软件,它会停下来说明缺少什么;补齐后重新执行同一条命令即可继续。
56
+
57
+ 安装成功时,输出末尾应包含:
58
+
59
+ ```text
60
+ OVERALL: PASS
61
+ SETUP: READY
62
+ Start a new Codex session and invoke $tirtc-esp32-builder.
57
63
  ```
58
64
 
59
- 模板工程提供配网、绑定、MQTT、TiRTC、H5 和 AI 会话骨架。具体开发板仍需接入摄像头、H.264 编码器、麦克风、扬声器、Codec、I2S 和按键。工程编译成功不等于 Web 已经出图或 AI 对讲已通过实机验收。
65
+ 如果看到 `OVERALL: NEEDS_SETUP`、`MISS` 或 `FAIL`,先看[常见问题](#常见问题)。
60
66
 
61
- ## 推荐:一键检查和安装
67
+ ### 3. 重新打开 Codex
62
68
 
63
- 新人先执行一条只读命令:
69
+ Skill 在 Codex 会话启动时被发现。安装完成后,关闭当前 Codex 会话,再打开一个新会话。
64
70
 
65
- ```bash
66
- npx tirtc-device-builder@latest setup esp32
67
- ```
71
+ ### 4. 把板卡和目标告诉 Codex
68
72
 
69
- 环境完整时它直接运行 Doctor 并输出 `SETUP: READY`。存在缺失项时,它会显示具体状态和下一条命令:
73
+ 把你已经掌握的信息填进下面的提示词即可,不用先查齐所有硬件参数。路径请使用绝对路径,不确定的内容写“未知”。可直接复制的版本见[开发板接入提示词](skills/tirtc-esp32-builder/assets/developer-intake-prompt.md)。
70
74
 
71
- ```bash
72
- npx tirtc-device-builder@latest setup esp32 --install
73
- ```
75
+ ```text
76
+ 请使用 $tirtc-esp32-builder 完成这块开发板的 TiRTC 移植。
74
77
 
75
- `--install` 自动完成:
78
+ 开发板:
79
+ - 厂商、完整型号、PCB/硬件版本:<填写>
80
+ - 资料与手中实物是否对应:<是/否/未知>
76
81
 
77
- - 安装 `tirtc-esp32-builder` 到 Codex Skill 目录;
78
- - 下载并校验 ESP32 Device Kit 1.0.0,缓存后供多个工程复用;
79
- - 复用已激活的 ESP-IDF 5.5.x,缺失时安装固定版本 ESP-IDF 5.5.4;
80
- - 安装 Espressif 管理的 ESP32-S3 工具链;
81
- - 生成只包含路径的 `config.json` 和 `env.sh`;
82
- - 自动激活安装环境并重新运行 Doctor。
82
+ 资料:
83
+ - <原理图、BSP/厂商示例、数据手册或产品页;一行一个>
83
84
 
84
- 默认托管目录是 `~/.tirtc-device-builder`。自动安装不执行 `sudo`、不修改 `.bashrc` 或 `.zshrc`、不覆盖已有但内容不完整的目录。缺少 Git、Python 或其他系统依赖时,它会停止并给出可复制的系统安装命令;修复后重复同一条 `--install` 命令即可从断点继续。
85
+ 目标:
86
+ - 功能:<例如 H5 实时音视频、H5 对讲、AI 双向语音>
87
+ - 视频:<MJPEG/H264/H265/根据合同和硬件证据选择>
88
+ - Wi-Fi:<指定方案/根据 BSP 选择>
89
+ - 设备绑定:<指定方案/根据平台合同选择>
85
90
 
86
- 需要自定义位置时:
91
+ 工程:<输出目录或现有工程的绝对路径>
87
92
 
88
- ```bash
89
- npx tirtc-device-builder@latest setup esp32 --install \
90
- --root /absolute/path/tirtc-dev
93
+ 请先运行 Doctor,分析全部资料并生成 Hardware IR v2。资料不足时列出最小补充项;达到 READY_TO_PORT 后再生成、适配和编译,并输出 TIRTC_PORTING_REPORT.md。
94
+ 本轮不访问串口、不烧录、不擦除 NVS,也不要把任何凭证写入源码或报告。
91
95
  ```
92
96
 
93
- 安装完成后启动新的 Codex 会话,只需输入板卡和目标:
97
+ 手头只有型号也可以开始:
94
98
 
95
99
  ```text
96
100
  $tirtc-esp32-builder
97
101
 
98
- 开发板:<厂商> <完整型号> <PCB 版本>
99
- 板卡资料:/absolute/path/board-materials
100
- 输出工程:/absolute/path/my-esp32-device
101
- 目标:H5 实时音视频、H5 对讲、AI 双向对讲
102
-
103
- 使用一键安装产生的托管环境。先分析资料并生成 Hardware IR,
104
- 达到 READY_TO_PORT 后生成和编译;本轮不烧录。
102
+ 分析 <厂商> <完整型号> <PCB 版本>,目标是 H5 实时音视频、
103
+ H5 对讲和 AI 双向对讲。
104
+ 先给出板卡资料清单、Hardware IR、能力结论和最小缺失项;
105
+ 本轮不生成工程、不烧录。
105
106
  ```
106
107
 
107
- 到这里,新人只需要“执行 `setup --install` → 重启 Codex → 输入板卡需求”。下面保留完整流程,供自定义目录、手动安装和故障排查使用。
108
+ 只有型号时,Skill 会先调查公开资料并列出缺口,不会猜测 GPIO、器件或媒体能力。要进入代码移植,通常还需要准确的板卡版本、原理图,以及能在实物上运行的 BSP 或外设示例。
108
109
 
109
- ## 完整手动流程和排障
110
+ ## 工作范围
110
111
 
111
- 推荐先跑通“安装 → 环境 → 板卡分析 → 生成 → 编译”,确认报告无误后再单独授权烧录和实机验收。整个过程使用同一份板卡事实,避免在代码生成阶段猜测引脚、器件或媒体能力。
112
+ 整个流程从板卡资料核对开始,以分层验收报告结束:
112
113
 
113
114
  ```text
114
- 板卡型号/原理图/BSP
115
- ↓
116
- Hardware IR(硬件事实与来源)
117
- ↓
118
- 能力门禁(READY_TO_PORT 才进入实现)
119
- ↓
120
- 独立 ESP-IDF 工程 + 板级媒体适配
121
- ↓
122
- 编译 → 授权烧录 → 配网绑定 → H5/AI 验收
123
- ↓
124
- TIRTC_PORTING_REPORT.md
125
- ```
115
+ 开发板型号、原理图、BSP、数据手册
116
+ │
117
+ ▼
118
+ Hardware IR:硬件事实、来源和未知项
119
+ │
120
+ ▼
121
+ 能力门禁:能否支持 H5 / AI
122
+ │
123
+ ▼
124
+ 独立 ESP-IDF 工程与板级媒体适配
125
+ │
126
+ ▼
127
+ 编译 → 授权烧录 → 分层实机验收
128
+ │
129
+ ▼
130
+ TIRTC_PORTING_REPORT.md
131
+ ```
132
+
133
+ Skill 负责:
134
+
135
+ - 检查 Node.js 之外的 ESP-IDF、编译器、TiRTC SDK、工程配置和串口;
136
+ - 从原理图、BSP、数据手册和实测示例中提取有来源的硬件事实;
137
+ - 生成并校验 `hardware-ir.json`,把冲突和未知项留在报告里;
138
+ - 判断视频、上行音频、下行播放和 AI 会话是否具备移植条件;
139
+ - 生成带 TiRTC SDK 的独立 ESP-IDF 工程;
140
+ - 把摄像头、所选 MJPEG/H.264/H.265 路径、麦克风、Codec、I2S、功放和按键接到板级 adapter;
141
+ - 运行测试和 `idf.py build`,记录固件路径、版本和 SHA-256;
142
+ - 在用户明确给出芯片、工程和串口后烧录;
143
+ - 分别验证启动、上线、本地媒体、H5、AI 和稳定性;
144
+ - 输出 `TIRTC_PORTING_REPORT.md`,每一层都标成 `PASS`、`FAIL` 或 `SKIP`。
145
+
146
+ ### Skill 不猜硬件
147
+
148
+ 模板工程提供配网、绑定、MQTT、TiRTC、H5 和 AI 会话骨架,但不会内置所有开发板的产品驱动。每块开发板仍要根据自身资料接入:
149
+
150
+ - 摄像头和所选 MJPEG/H.264/H.265 完整媒体路径;
151
+ - 麦克风采集路径;
152
+ - Codec、I2S、功放和扬声器播放路径;
153
+ - 板级电源、时钟、复位和使能控制;
154
+ - 需要用于 AI 会话的实体按键或其他触发方式。
155
+
156
+ 编译成功只代表构建层通过。只有拿到浏览器画面、实体扬声器声音和双向 AI 音频的实测证据,报告才能把对应能力标为 `PASS`。
157
+
158
+ ## 准备板卡资料
159
+
160
+ 板卡资料要和手上的实物版本对应。建议为每块板、每个 PCB 版本单独建目录,避免混入相似型号的文档。
161
+
162
+ 建议按下面的结构整理:
163
+
164
+ ```text
165
+ board-materials/
166
+ ├── BOARD.md
167
+ ├── schematic/
168
+ │ └── board-rev-a.pdf
169
+ ├── bom/
170
+ │ └── board-rev-a.xlsx
171
+ ├── bsp/
172
+ │ └── README.md
173
+ ├── datasheets/
174
+ │ ├── camera-sensor.pdf
175
+ │ ├── audio-codec.pdf
176
+ │ └── amplifier.pdf
177
+ └── examples/
178
+ ├── camera/
179
+ ├── audio-record/
180
+ └── audio-playback/
181
+ ```
182
+
183
+ `BOARD.md` 至少记录:
184
+
185
+ ```markdown
186
+ # 板卡身份
187
+
188
+ - 厂商:
189
+ - 完整销售型号:
190
+ - 模组型号:
191
+ - PCB 丝印:
192
+ - 硬件版本:
193
+ - Flash / PSRAM:
194
+
195
+ # 资料来源
196
+
197
+ - 产品页:
198
+ - 原理图名称和版本:
199
+ - BSP 仓库、commit 或 tag:
200
+ - 已在实物上验证的示例:
201
+
202
+ # 开发目标
203
+
204
+ - H5 实时视频:
205
+ - H5 实时音频:
206
+ - H5 下行对讲:
207
+ - AI 双向对讲:
208
+
209
+ # 媒体与接入合同
210
+
211
+ - H5 支持/选定的视频 profile:
212
+ - 音频格式与 stream ID:
213
+ - 板卡/BSP 支持的 Wi-Fi 凭证方法:
214
+ - 本工程选择的凭证方法和重配入口:
215
+ - ThingConnect 绑定、已绑定跳过和清除方式:
216
+ ```
217
+
218
+ 不同能力需要的证据不一样:
219
+
220
+ | 资料 | 用来确认什么 | 重要程度 |
221
+ |---|---|---|
222
+ | 板卡身份 | 厂商、完整型号、模组、PCB 丝印和硬件版本 | 必需 |
223
+ | 原理图或网表 | GPIO、电源、复位、时钟、I2C、I2S、SPI、摄像头和音频链路 | 必需 |
224
+ | BSP 或厂商示例 | 实际初始化顺序、驱动版本、ESP-IDF 版本和可工作的管脚定义 | 必需 |
225
+ | 摄像头和编码资料 | Sensor、输入接口、所选 MJPEG/H.264/H.265 输出边界与刷新/关键帧控制 | H5 视频必需 |
226
+ | 音频资料 | 麦克风类型、Codec/ADC/DAC、采样率、位宽、声道、MCLK/BCLK/LRCK、功放使能 | 对讲必需 |
227
+ | 配网/绑定资料 | 可用 Wi-Fi 凭证方法、凭证存储/重配、可用绑定方法、已有绑定状态和清除入口 | 上线必需 |
228
+ | 数据手册 | 器件寄存器、时序、电气限制和版本差异 | 推荐 |
229
+ | 实测小工程 | 证明摄像头、录音、播放或编码确实在该 PCB 版本工作 | 强烈推荐 |
126
230
 
127
- ### 第 0 步:确认当前支持范围
231
+ 提供 BSP 时,请同时注明可复现的 commit、tag 或压缩包版本,以及它使用的 ESP-IDF 版本。只有一个持续变化的仓库首页,后续很难追溯代码与实物不一致的原因。
128
232
 
129
- 当前可直接生成的基线是:
233
+ 不要放进资料包的内容包括 Wi-Fi 密码、设备密钥、MQTT/WHIP token、证书、生产配置和真实用户音视频。
130
234
 
131
- | 项目 | 当前基线 |
235
+ ## 依赖和支持范围
236
+
237
+ ### 当前版本基线
238
+
239
+ | 项目 | 当前要求 |
132
240
  |---|---|
133
241
  | 芯片 | ESP32-S3 |
134
- | 模组 | ESP32-S3-WROOM-1-N16R8,或资源与配置经过确认的兼容板 |
242
+ | 参考模组 | ESP32-S3-WROOM-1-N16R8,或资源和配置经过确认的兼容板 |
135
243
  | ESP-IDF | 5.5.x |
244
+ | 自动安装版本 | ESP-IDF v5.5.4 |
136
245
  | TiRTC SDK | `espressif-esp32s3/2.3.0` |
137
- | 业务 | H5 实时音视频、H5 对讲、AI 双向语音 |
138
- | 工程生成 | 使用本地缓存的 ESP32 Device Kit 1.0.0 |
139
- | 烧录 | 必须明确给出串口并授权 |
246
+ | ESP32 Device Kit | 1.0.0 |
247
+ | Node.js | 18 或更高版本 |
248
+ | 支持自动安装的系统 | Linux、WSL、macOS |
249
+ | 原生 Windows | 使用 Espressif 官方安装器准备 ESP-IDF,再重新运行检查 |
140
250
 
141
- “板上有摄像头”不等于可以输出 H5 视频。H5 视频还需要可用的 H.264 Annex-B 编码输出、SPS/PPS、IDR 和关键帧请求控制;对讲还需要完整的麦克风采集、G.711 A-law 8 kHz 编码、下行解码、I2S/Codec/功放和扬声器路径。
251
+ 当前生成器只支持 ESP32-S3。Flash 或 PSRAM 不是 16 MB / 8 MB 时,需要重新评估 `sdkconfig.defaults`、分区表、DMA 和媒体缓存预算。名称相近的芯片不会被自动当作 ESP32-S3 处理。
142
252
 
143
- 当前生成器只支持 ESP32-S3,TiRTC SDK 也必须匹配 `espressif-esp32s3` 平台。Flash/PSRAM 不是 16 MB/8 MB 时,需要先调整 `sdkconfig.defaults`、分区表和板级资源预算并重新评估;Skill 不会把相似型号静默当作当前板卡。
253
+ ### 本机软件
144
254
 
145
- ### 第 1 步:固定工作路径
255
+ `setup esp32 --install` 会检查以下基础命令:
146
256
 
147
- 下面的命令以 Linux、Ubuntu 或 WSL 的 Bash 为例。先把所有路径改成自己的绝对路径;路径可以不同,但后续必须始终使用同一组值。
257
+ | 命令 | 用途 |
258
+ |---|---|
259
+ | `python3` | ESP-IDF、工程生成器和检查脚本 |
260
+ | `git` | 获取固定版本的 ESP-IDF |
261
+ | `bash` | 激活和安装 ESP-IDF |
262
+ | `tar` | 解包并验证 Device Kit |
148
263
 
149
- ```bash
150
- export TIRTC_WORKSPACE=/home/your-user/workspace
151
- export TIRTC_BOARD_DOCS="$TIRTC_WORKSPACE/board-materials"
152
- export TIRTC_PROJECT_DIR="$TIRTC_WORKSPACE/my-esp32-device"
264
+ Doctor 还会检查 `cmake`、`ninja`、`idf.py` 和 `xtensa-esp32s3-elf-gcc`。安装器不会调用系统包管理器;缺少基础命令时,需要开发者按当前操作系统安装。
153
265
 
154
- source ~/.tirtc-device-builder/env.sh
155
- ```
156
-
157
- 逐项确认:
266
+ Ubuntu、Debian 或 WSL 可以参考:
158
267
 
159
268
  ```bash
160
- printf 'workspace: %s\n' "$TIRTC_WORKSPACE"
161
- printf 'ESP32 Device Kit: %s\n' "$TIRTC_THING_CONNECT_ROOT"
162
- printf 'board docs: %s\n' "$TIRTC_BOARD_DOCS"
163
- printf 'output project: %s\n' "$TIRTC_PROJECT_DIR"
269
+ sudo apt-get update
270
+ sudo apt-get install -y git python3 python3-venv bash tar
164
271
  ```
165
272
 
166
- 注意:
273
+ ### 网络和业务环境
274
+
275
+ 首次安装通常需要访问:
276
+
277
+ - npm 官方 Registry,用于取得 `tirtc-device-builder`;
278
+ - GitHub Release,用于下载 ESP32 Device Kit;
279
+ - Espressif 的 GitHub 仓库和工具下载地址,用于安装 ESP-IDF 与工具链。
167
280
 
168
- - `TIRTC_PROJECT_DIR` 是待生成的新目录,生成前不能已经存在;生成器不会覆盖旧工程。
169
- - 板卡资料和输出工程使用不同目录。
170
- - 不要把 Wi-Fi 密码、设备密钥、MQTT/WHIP token 或真实用户音视频放入板卡资料目录和 Git 仓库。
171
- - 新开终端后需要重新设置这些变量,除非开发者自行把它们加入 shell 配置。
281
+ H5 和 AI 的端到端验收还需要可访问的 ThingConnect 服务、可用账号、设备绑定条件、浏览器和外网。缺少其中一项,不影响工程生成和编译,但对应验收层要记录为 `SKIP`。
172
282
 
173
- ### 第 2 步:准备板卡资料包
283
+ ### 媒体约束
174
284
 
175
- 创建资料目录,把原始资料按来源保存,不要先手工改写原理图或 BSP:
285
+ H5 视频要先从前端和服务端支持的合同中选择一种 profile。MJPEG 提交完整 JPEG 帧;H.264/H.265 按合同提交 Annex-B access unit、参数集,并实现刷新或关键帧控制。板上有摄像头 Sensor,只能证明图像有来源,不能证明浏览器一定能持续出图。
286
+
287
+ 当前音频基线使用 G.711 A-law、8 kHz、单声道。对讲还要有可靠的下行队列、A-law 解码、Codec/I2S/功放播放和会话停止清理。没有可用的全双工和 AEC 证据时,应按半双工设计 AI 对讲。
288
+
289
+ ## 安装方式和目录
290
+
291
+ ### 推荐:用 npx 一次检查并安装
176
292
 
177
293
  ```bash
178
- mkdir -p "$TIRTC_BOARD_DOCS"
294
+ npx --yes tirtc-device-builder@latest setup esp32 --install
179
295
  ```
180
296
 
181
- 最有利于一次完成的资料如下:
297
+ `npx` 会临时取得最新 CLI 并运行,不要求全局安装。它适合这种低频的安装和诊断工具,也避免用户机器里长期保留旧版本命令。
182
298
 
183
- | 优先级 | 资料 | 需要明确的内容 |
184
- |---|---|---|
185
- | 必需 | 板卡身份 | 厂商、完整型号、模组型号、PCB 丝印和硬件版本 |
186
- | 必需 | 原理图或网表 | 摄像头、麦克风、Codec、功放、I2S、I2C、SPI、时钟、复位、电源使能和 GPIO |
187
- | 必需 | BSP 或厂商示例 | 可复现的 Git commit/tag、ESP-IDF 版本、能工作的外设初始化与管脚定义 |
188
- | 视频必需 | 摄像头/编码资料 | Sensor 型号、输入接口、H.264 编码位置、Annex-B 输出、SPS/PPS、IDR 控制 |
189
- | 对讲必需 | 音频资料 | 麦克风类型、Codec/ADC/DAC、采样率、位宽、声道、MCLK/BCLK/LRCK、功放使能 |
190
- | 推荐 | 器件数据手册 | Sensor、Codec、功放、时钟和电源芯片的准确型号与版本 |
191
- | 推荐 | 最小实测工程 | 已在该 PCB 版本运行的摄像头、录音、播放或编码示例及其构建命令 |
299
+ ### 也可以全局安装
192
300
 
193
- 资料不完整也可以先调用 Skill。它会把未知事实写成 `null`,并列出进入下一步所需的最小补充项。不同 PCB 版本按不同板卡处理;不能只给“ESP32-S3”而省略载板型号和版本。
301
+ ```bash
302
+ npm install --global tirtc-device-builder@latest
303
+ tirtc-device-builder setup esp32 --install
304
+ ```
305
+
306
+ 安装命令是 `npm install`,不要写成 `npm --install`。
194
307
 
195
- ### 第 3 步:安装 Node.js 和 Skill
308
+ 只执行 `npm install --global tirtc-device-builder` 会安装 CLI,不会准备完整开发环境。随后还要运行 `setup esp32 --install`,由它安装 Codex Skill、下载 Device Kit,并在需要时安装 ESP-IDF。npm 包没有 `preinstall`、`install` 或 `postinstall` 生命周期脚本,因此不会在安装 CLI 时改动这些目录。
196
309
 
197
- 使用 npm 安装 Skill 只需要 Node.js 18 或更高版本。普通使用者不需要执行 `npm login`;登录只用于维护者发布 npm 包。
310
+ 安装公开包不需要执行 `npm login`;这个命令只和维护者发布新版本有关。
198
311
 
199
- 先检查版本和 npm 官方源:
312
+ ### 只安装 Skill
313
+
314
+ 如果 ESP-IDF 和 Device Kit 已经由团队统一准备,可以只复制 Codex Skill:
200
315
 
201
316
  ```bash
202
- node --version
203
- npm --version
204
- npm config get registry
317
+ npx --yes tirtc-device-builder@latest install esp32
205
318
  ```
206
319
 
207
- 预期:
320
+ 这条命令不安装 ESP-IDF,也不下载 Device Kit。完整的新用户环境仍建议使用 `setup esp32 --install`。
208
321
 
209
- - Node.js 输出 `v18.x` 或更高版本;
210
- - npm registry 输出 `https://registry.npmjs.org/`。
322
+ ### 默认目录
211
323
 
212
- 如果 `node` 或 `npm` 不存在,先从 [Node.js 官方下载页](https://nodejs.org/en/download) 安装受支持版本,重新打开终端,再重复版本检查。
324
+ | 内容 | 默认位置 |
325
+ |---|---|
326
+ | Codex Skill | `${CODEX_HOME:-~/.codex}/skills/tirtc-esp32-builder` |
327
+ | 托管根目录 | `~/.tirtc-device-builder` |
328
+ | Device Kit | `~/.tirtc-device-builder/kits/esp32s3/1.0.0` |
329
+ | ESP-IDF | `~/.tirtc-device-builder/esp-idf-v5.5.4` |
330
+ | Espressif 工具 | `~/.tirtc-device-builder/espressif` |
331
+ | 安装记录 | `~/.tirtc-device-builder/config.json` |
332
+ | 环境入口 | `~/.tirtc-device-builder/env.sh` |
213
333
 
214
- 如果 registry 不是官方源,可为当前用户切换:
334
+ 新开终端后,用下面的命令激活托管环境:
215
335
 
216
336
  ```bash
217
- npm config set registry https://registry.npmjs.org/
337
+ source ~/.tirtc-device-builder/env.sh
338
+ idf.py --version
339
+ printf '%s\n' "$TIRTC_THING_CONNECT_ROOT"
218
340
  ```
219
341
 
220
- 确认 npm 包可访问并安装当前稳定版本:
342
+ `env.sh` 只设置 ESP-IDF、工具链和 Device Kit 路径,不包含设备凭证。
343
+
344
+ ### 自定义目录或复用已有环境
345
+
346
+ 把所有托管文件放到指定目录:
221
347
 
222
348
  ```bash
223
- npm view tirtc-device-builder version
224
- npx tirtc-device-builder@latest list
225
- npx tirtc-device-builder@latest install esp32
349
+ npx --yes tirtc-device-builder@latest setup esp32 --install \
350
+ --root /absolute/path/tirtc-dev
226
351
  ```
227
352
 
228
- 成功时最后会看到类似输出:
353
+ 自定义根目录后,环境入口也随之变为 `/absolute/path/tirtc-dev/env.sh`。
229
354
 
230
- ```text
231
- Installed tirtc-esp32-builder <version> to /home/.../.codex/skills/tirtc-esp32-builder
232
- Start a new Codex session, then invoke $tirtc-esp32-builder.
233
- ```
355
+ 复用已有 ESP-IDF 5.5.x:
234
356
 
235
- 默认安装位置是 `${CODEX_HOME:-~/.codex}/skills/tirtc-esp32-builder`。安装完成后关闭当前 Codex 会话并启动一个新会话,让 Codex 重新发现 Skill。
357
+ ```bash
358
+ npx --yes tirtc-device-builder@latest setup esp32 --install \
359
+ --idf-dir /absolute/path/esp-idf
360
+ ```
236
361
 
237
- 如果目标目录已经存在,安装器会保护已有内容并退出。先确认目录中的本地修改是否需要保留;只有确定要替换时才执行:
362
+ 复用已经解包的 Device Kit,或维护者本地的完整 ThingConnect 工作区:
238
363
 
239
364
  ```bash
240
- npx tirtc-device-builder@latest install esp32 --force
365
+ npx --yes tirtc-device-builder@latest setup esp32 --install \
366
+ --thing-connect-root /absolute/path/to/device-kit-or-thing-connect
241
367
  ```
242
368
 
243
- 自定义 Skill 根目录时使用绝对路径:
369
+ 从本地 Device Kit 压缩包安装,适合内网或离线转交:
244
370
 
245
371
  ```bash
246
- npx tirtc-device-builder@latest install esp32 \
247
- --skills-dir /absolute/path/to/skills
372
+ npx --yes tirtc-device-builder@latest setup esp32 --install \
373
+ --kit-archive /absolute/path/tirtc-esp32s3-kit-1.0.0.tar.gz
248
374
  ```
249
375
 
250
- 如果 npm 包尚未发布或当前网络无法访问 npm,可从 GitHub 安装固定版本。在 Codex 对话中输入:
376
+ 安装器仍会核对固定的 SHA-256、目录结构、清单和每个资源文件,不接受未经验证的同名压缩包。
251
377
 
252
- ```text
253
- $skill-installer
378
+ ### 更新已安装的 Skill
254
379
 
255
- 安装:
256
- https://github.com/tangeai/tirtc-device-builder/tree/v0.3.0/skills/tirtc-esp32-builder
380
+ 默认安装不会覆盖已有 Skill,以免丢失本地修改。确认这些修改不需要保留后,可用最新 npm 包替换:
381
+
382
+ ```bash
383
+ npx --yes tirtc-device-builder@latest setup esp32 --install --force-skill
257
384
  ```
258
385
 
259
- Linux/macOS 也可以执行:
386
+ 该命令只替换 Skill;同版本且已通过校验的 Device Kit 和 ESP-IDF 会继续复用。自定义脚本或规则请提前备份。
387
+
388
+ ## 常用检查和开发命令
389
+
390
+ ### 查看当前状态
260
391
 
261
392
  ```bash
262
- python3 ~/.codex/skills/.system/skill-installer/scripts/install-skill-from-github.py \
263
- --repo tangeai/tirtc-device-builder \
264
- --ref v0.3.0 \
265
- --path skills/tirtc-esp32-builder
393
+ npx --yes tirtc-device-builder@latest setup esp32
266
394
  ```
267
395
 
268
- 仓库根目录还包含 `.codex-plugin/plugin.json`,可作为 skills-only Plugin 使用。直接从 npm 或 GitHub 安装不依赖 Plugin Directory 审核。
396
+ `setup esp32` 的检查逻辑不会安装开发组件、修改 shell 配置、生成工程或烧录。第一次运行 `npx` 时,npm 可能会把 CLI 下载到自己的缓存。
269
397
 
270
- ### 第 4 步:准备 ESP32 Device Kit
398
+ 环境完整时,它会运行 Doctor 并输出 `SETUP: READY`。环境不完整时,它输出 `OVERALL: NEEDS_SETUP` 和下一条建议命令。
271
399
 
272
- Device Kit 包含生成新工程需要的最小资源:
400
+ 查看 CLI 和当前平台:
273
401
 
274
- - ESP32-S3 H5/AI 工程生成器;
275
- - 起步模板和平台公共组件;
276
- - TiRTC ESP32-S3 SDK 头文件、静态库和构建契约;
277
- - H5、AI、设备接入和会话协议文档。
402
+ ```bash
403
+ npx --yes tirtc-device-builder@latest --help
404
+ npx --yes tirtc-device-builder@latest list
405
+ npx --yes tirtc-device-builder@latest setup esp32 --help
406
+ ```
278
407
 
279
- 一键安装会下载固定 Release、校验 SHA-256,并缓存到 `~/.tirtc-device-builder/kits/esp32s3/1.0.0/`。不需要克隆 `tirtc-server-example`:
408
+ ### 生成工程前运行 Doctor
280
409
 
281
410
  ```bash
282
- npx tirtc-device-builder@latest setup esp32 --install
283
411
  source ~/.tirtc-device-builder/env.sh
412
+
413
+ npx --yes tirtc-device-builder@latest doctor esp32 \
414
+ --expected-idf 5.5 \
415
+ --target esp32s3 \
416
+ --thing-connect-root "$TIRTC_THING_CONNECT_ROOT" \
417
+ --require-workspace
284
418
  ```
285
419
 
286
- 维护者刚生成 Release、附件还没有上传时,可以使用本地包完成同样的安装验证:
420
+ 生成前应看到:
287
421
 
288
- ```bash
289
- npx tirtc-device-builder@latest setup esp32 --install \
290
- --kit-archive /absolute/path/tirtc-esp32s3-kit-1.0.0.tar.gz
291
- ```
422
+ | 检查项 | 合格结果 |
423
+ |---|---|
424
+ | Python、Git | `PASS` |
425
+ | `idf.py` | `PASS`,版本为 5.5.x |
426
+ | target compiler | `PASS`,找到 ESP32-S3 编译器 |
427
+ | ESP32 Device Kit | `PASS` |
428
+ | TiRTC SDK | `PASS` |
429
+ | serial discovery | 未接板时允许 `WARN` |
430
+ | OVERALL | `PASS` |
292
431
 
293
- 验证关键文件:
432
+ 已经安装 Skill 时,也能直接调用同一份脚本:
294
433
 
295
434
  ```bash
296
- ls -l "$TIRTC_THING_CONNECT_ROOT/device-sim/scripts/create_esp32_project.py"
297
- ls -l "$TIRTC_THING_CONNECT_ROOT/device-sim/sdk/espressif-esp32s3/2.3.0/include/tirtc/tiRTC.h"
298
- ls -l "$TIRTC_THING_CONNECT_ROOT/device-sim/sdk/espressif-esp32s3/2.3.0/lib/libTiRTC.a"
299
- ls -l "$TIRTC_THING_CONNECT_ROOT/device-sim/sdk/espressif-esp32s3/2.3.0/manifest/build-contract.env"
435
+ python3 ~/.codex/skills/tirtc-esp32-builder/scripts/doctor.py \
436
+ --expected-idf 5.5 \
437
+ --target esp32s3 \
438
+ --thing-connect-root "$TIRTC_THING_CONNECT_ROOT" \
439
+ --require-workspace
300
440
  ```
301
441
 
302
- 四条命令都应显示真实文件。资源来源版本记录在 Kit 清单中:
442
+ ### 检查 Hardware IR
443
+
444
+ 下面的工具通常由 Codex 调用,开发者也可以手工复核:
303
445
 
304
446
  ```bash
305
- python3 -m json.tool "$TIRTC_THING_CONNECT_ROOT/manifest.json"
447
+ python3 ~/.codex/skills/tirtc-esp32-builder/scripts/hardware_ir.py init \
448
+ /absolute/path/hardware-ir.json
449
+
450
+ python3 ~/.codex/skills/tirtc-esp32-builder/scripts/hardware_ir.py validate \
451
+ /absolute/path/hardware-ir.json
452
+
453
+ python3 ~/.codex/skills/tirtc-esp32-builder/scripts/hardware_ir.py assess --strict \
454
+ /absolute/path/hardware-ir.json
306
455
  ```
307
456
 
308
- 生成器会把必要模块和 TiRTC SDK 复制到新工程的 `third_party/tirtc/`,所以已生成的工程可以移动并独立编译。一个已校验的 Kit 缓存可以供多个工程使用。
457
+ 能力门禁有四种状态:
309
458
 
310
- ### 第 5 步:检查或安装 ESP-IDF 5.5.x
459
+ | 状态 | 含义 | 怎么处理 |
460
+ |---|---|---|
461
+ | `NEEDS_CONFIRMATION` | 关键事实未知、冲突或只有单一来源 | 补原理图、BSP、数据手册或实测证据 |
462
+ | `BLOCKED` | 现有硬件或 SDK 已确认不满足 | 更换硬件,补编码/播放路径,或取得匹配 SDK |
463
+ | `READY_TO_PORT` | 资料足以开始生成和板级实现 | 进入工程生成与编译 |
464
+ | `HIL_VERIFIED` | 已完成端到端实机验证 | 固定版本并保存证据 |
311
465
 
312
- 先检查当前终端,不要因为环境未激活而重复安装:
466
+ `assess --strict` 在条件不足时返回非零,这是门禁在阻止过早生成,不代表脚本损坏。
467
+
468
+ Hardware IR v2 只有在运行证据绑定到同一固件 SHA-256 时才会给出 `HIL_VERIFIED`:
313
469
 
314
470
  ```bash
315
- command -v idf.py
316
- idf.py --version
317
- command -v xtensa-esp32s3-elf-gcc
471
+ python3 ~/.codex/skills/tirtc-esp32-builder/scripts/hardware_ir.py assess \
472
+ /absolute/path/hardware-ir.json \
473
+ --artifact-sha256 <64-character-sha256> --strict
318
474
  ```
319
475
 
320
- 如果 `idf.py --version` 输出 `ESP-IDF v5.5.x`,并且能找到 `xtensa-esp32s3-elf-gcc`,直接进入第 6 步。
476
+ ### 生成和编译
321
477
 
322
- 如果 ESP-IDF 已安装但当前终端找不到 `idf.py`,执行该安装目录自带的 `export.sh`。例如:
478
+ 建议让 Skill 完成生成、适配和编译。需要人工复现时,先激活环境,并确认输出目录尚不存在:
323
479
 
324
480
  ```bash
325
- source /absolute/path/to/esp-idf/export.sh
326
- idf.py --version
327
- command -v xtensa-esp32s3-elf-gcc
481
+ source ~/.tirtc-device-builder/env.sh
482
+
483
+ python3 "$TIRTC_THING_CONNECT_ROOT/device-sim/scripts/create_esp32_project.py" \
484
+ /absolute/path/my-esp32-device \
485
+ --name my_esp32_device
328
486
  ```
329
487
 
330
- 每个新终端都需要重新执行 `source .../export.sh`。Skill 的环境检查不会自动修改 `.bashrc`、`.zshrc` 等持久 shell 配置。
488
+ `--name` 只能包含小写字母、数字和下划线。生成器不会覆盖已有目录。
331
489
 
332
- 在 Ubuntu/Debian/WSL 中首次安装时,以下命令安装当前基线 `v5.5.4`。下载、系统包安装和磁盘写入应由开发者在确认目录后执行:
490
+ 工程生成后再做项目级检查:
333
491
 
334
492
  ```bash
335
- sudo apt-get update
336
- sudo apt-get install -y git wget flex bison gperf python3 python3-pip \
337
- python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util \
338
- libusb-1.0-0
493
+ python3 ~/.codex/skills/tirtc-esp32-builder/scripts/doctor.py \
494
+ --expected-idf 5.5 \
495
+ --target esp32s3 \
496
+ --project /absolute/path/my-esp32-device
497
+ ```
339
498
 
340
- mkdir -p "$TIRTC_WORKSPACE/toolchains"
341
- git clone -b v5.5.4 --recursive \
342
- https://github.com/espressif/esp-idf.git \
343
- "$TIRTC_WORKSPACE/toolchains/esp-idf-v5.5.4"
499
+ `TiRTC build contract` 为 `PASS` 后编译:
344
500
 
345
- "$TIRTC_WORKSPACE/toolchains/esp-idf-v5.5.4/install.sh" esp32s3
346
- source "$TIRTC_WORKSPACE/toolchains/esp-idf-v5.5.4/export.sh"
501
+ ```bash
502
+ cd /absolute/path/my-esp32-device
503
+ idf.py set-target esp32s3
504
+ idf.py build
505
+ ```
347
506
 
348
- idf.py --version
349
- command -v xtensa-esp32s3-elf-gcc
507
+ 生成器会把 TiRTC SDK 复制到工程的 `third_party/tirtc/`。此后工程不再依赖 `tirtc-server-example`,但换机编译仍需准备兼容的 ESP-IDF 5.5.x 工具链。
508
+
509
+ 检查尚未完成的产品适配点:
510
+
511
+ ```bash
512
+ rg -n 'TODO\(product-' main components
350
513
  ```
351
514
 
352
- 最后两条命令必须分别显示 ESP-IDF 5.5.x 和 ESP32-S3 编译器路径。macOS、原生 Windows 或依赖版本有变化时,以 [Espressif ESP-IDF 5.5.4 Get Started](https://docs.espressif.com/projects/esp-idf/en/v5.5.4/esp32s3/get-started/index.html) 为准。
515
+ 常见适配内容包括麦克风采集、G.711 A-law 编码、所选视频 profile 输出与刷新请求、下行音频播放、实体按键和会话停止后的资源清理。
353
516
 
354
- ### 第 6 步:生成工程前运行 Doctor
517
+ ## 烧录和验收
355
518
 
356
- 不安装 Skill 也可以通过 npm CLI 调用同一个检查脚本:
519
+ ### 烧录前确认串口
520
+
521
+ Linux 常见串口是 `/dev/ttyACM0` 或 `/dev/ttyUSB0`:
357
522
 
358
523
  ```bash
359
- npx tirtc-device-builder@latest doctor esp32 \
360
- --expected-idf 5.5 \
361
- --target esp32s3 \
362
- --thing-connect-root "$TIRTC_THING_CONNECT_ROOT" \
363
- --require-workspace
524
+ ls -l /dev/ttyACM* /dev/ttyUSB*
364
525
  ```
365
526
 
366
- 已经安装 Skill 时也可以直接执行:
527
+ 把实际端口交给 Doctor:
367
528
 
368
529
  ```bash
369
530
  python3 ~/.codex/skills/tirtc-esp32-builder/scripts/doctor.py \
370
531
  --expected-idf 5.5 \
371
532
  --target esp32s3 \
372
- --thing-connect-root "$TIRTC_THING_CONNECT_ROOT" \
373
- --require-workspace
533
+ --project /absolute/path/my-esp32-device \
534
+ --serial-port /dev/ttyACM0
374
535
  ```
375
536
 
376
- 生成前的合格结果应满足:
537
+ `serial port` 为 `PASS` 后,再单独向 Skill 授权:
377
538
 
378
- | 检查项 | 期望 |
379
- |---|---|
380
- | Python、Git | `PASS` |
381
- | `idf.py` | `PASS`,版本为 5.5.x |
382
- | target compiler | `PASS`,找到 ESP32-S3 编译器 |
383
- | ESP32 Device Kit | `PASS` |
384
- | TiRTC SDK | `PASS` |
385
- | serial discovery | 还未接板时允许 `WARN` |
386
- | OVERALL | `PASS` |
539
+ ```text
540
+ $tirtc-esp32-builder
387
541
 
388
- `doctor.py` 是只读检查:不安装软件、不修改 shell 配置、不生成工程,也不烧录设备。
542
+ 我确认目标芯片是 ESP32-S3,工程是 /absolute/path/my-esp32-device,
543
+ 串口是 /dev/ttyACM0。授权本轮烧录该设备并打开串口监视。
544
+ 不要擦除其他串口设备,不要在日志中输出 Wi-Fi 密码或设备密钥。
545
+ 烧录后执行 L2 Boot 检查并更新 TIRTC_PORTING_REPORT.md。
546
+ ```
389
547
 
390
- 常见检查失败:
548
+ 也可以人工烧录:
391
549
 
392
- - `idf.py not found`:当前终端没有激活 ESP-IDF,先执行 `source <idf-dir>/export.sh`。
393
- - `target compiler ... not found`:ESP-IDF 环境未激活,或安装时没有包含 `esp32s3`。
394
- - `ESP32 Device Kit ... not found`:先执行一键安装,或传入 Kit 根目录;兼容路径也可以是完整仓库根目录或其 `thing-connect/` 子目录。
395
- - `TiRTC SDK ... missing`:检查仓库是否拉取完整,以及 SDK 的头文件、静态库和 `manifest/build-contract.env` 是否存在。
396
- - `serial discovery: no serial device detected`:生成和编译阶段可以继续;烧录前必须解决。
550
+ ```bash
551
+ cd /absolute/path/my-esp32-device
552
+ idf.py -p /dev/ttyACM0 flash monitor
553
+ ```
397
554
 
398
- 不要在一个空目录上提前使用 `--project`。如果看到:
555
+ 使用 `Ctrl+]` 退出 ESP-IDF Monitor。多个串口同时存在时,需要通过 USB 拔插、设备标识或芯片探测确认目标,不能默认烧录第一个端口。
399
556
 
400
- ```text
401
- FAIL TiRTC build contract [required]: no sdkconfig or sdkconfig.defaults in ...
402
- ```
557
+ ### Wi-Fi 凭证和设备绑定
403
558
 
404
- 表示传入目录还不是已生成的 ESP-IDF 工程,或者 `--project` 路径给错了。先让 Skill/生成器创建工程;生成后目录中应有 `sdkconfig.defaults`,再运行项目级 Doctor。
559
+ SoftAP 是可选方案,不是接入前提。Hardware IR 要根据 BSP 的实际能力和产品要求,选择 SoftAP、BLE、SmartConfig、安全工厂/NVS 注入、不纳入版本控制的开发配置,或有文档的自定义方案。SSID 和密码不应写死在源码中。
405
560
 
406
- ### 第 7 步:在新 Codex 会话中调用 Skill
561
+ 无论选择哪种方法,都要有当前 PCB/BSP 的支持证据,凭证不能进入 Git、源码或报告,并且要保留清除或重配入口。没有 SoftAP、但支持工厂 NVS 注入的设备同样可以接入。只要工程提交了明文密码,Hardware IR v2 门禁就会判为 `BLOCKED`。
407
562
 
408
- 只给出板卡型号也可以启动分析,但提供完整资料更容易一次进入开发。建议复制下面的提示词,逐项替换尖括号内容和绝对路径:
563
+ Wi-Fi 配网和 ThingConnect 设备绑定是两套独立流程。绑定可以选择验证码、工厂预绑定、开发凭证,或平台合同允许的 custom 方案。验收时要分开检查:
409
564
 
410
- ```text
411
- 请使用 $tirtc-esp32-builder 完成这块板的 TiRTC 移植。
565
+ 1. 没有 Wi-Fi 凭证时,设备进入选定的配网或注入流程。
566
+ 2. 已联网但尚未绑定时,设备进入选定的绑定流程;只有验证码方案需要显示验证码。
567
+ 3. NVS 已保存绑定时,日志应明确说明复用已有绑定并跳过首次绑定,不能据此判断“绑定流程缺失”。
568
+ 4. 分别验证只清设备绑定和只清 Wi-Fi 凭证的入口。
569
+ 5. `status` 确认 platform、MQTT、TiRTC 和 runtime 状态。
412
570
 
413
- 板卡:
414
- - 厂商:<厂商>
415
- - 完整型号:<型号>
416
- - 模组:<例如 ESP32-S3-WROOM-1-N16R8>
417
- - PCB 丝印/硬件版本:<版本>
571
+ 具体命令和 UI 由生成工程及所选方案决定,不能直接照搬另一块板。生产凭证、设备 secret 和 token 不得写入源码、脚本、Hardware IR、报告或 Git。
418
572
 
419
- 输入资料:
420
- - 原理图或网表:/absolute/path/board-materials/<file>
421
- - BOM:/absolute/path/board-materials/<file>
422
- - BSP/厂商示例:/absolute/path/vendor-bsp
423
- - 摄像头/Codec/功放数据手册:/absolute/path/board-materials/<files>
424
- - Device Kit:使用 `setup esp32 --install` 生成的托管环境
573
+ ### 验证 H5 实时查看和对讲
425
574
 
426
- 目标:
427
- - H5 实时视频和音频
428
- - H5 下行语音对讲
429
- - AI 双向语音对讲
575
+ 1. 串口 `status` 显示 runtime 为 `waiting`。
576
+ 2. 在体验平台打开该设备的实时查看入口。
577
+ 3. 确认所选 MJPEG/H.264/H.265 视频持续显示,音频和视频发送计数持续增长。
578
+ 4. 发起 H5 对讲,确认 stream 14 下行计数增长,实体扬声器可以听到声音。
579
+ 5. 触发浏览器重连或刷新请求,确认 MJPEG 提交下一张完整 JPEG,或 H.264/H.265 产生合同要求的刷新/关键帧,画面能够恢复。
430
580
 
431
- 输出:
432
- - 新工程目录:/absolute/path/my-esp32-device
433
- - Hardware IR:放在新工程同级或工程内的明确路径
434
- - 报告:/absolute/path/my-esp32-device/TIRTC_PORTING_REPORT.md
581
+ 视频、声音和重连要分别保留证据。浏览器偶尔出现一帧,不能算作持续实时查看通过。
435
582
 
436
- 执行要求:
437
- 1. 先运行环境 Doctor,并核对 ESP-IDF 5.5.x、esp32s3 工具链和 TiRTC SDK。
438
- 2. 完整分析我提供的每份资料,记录来源、版本、冲突和未知项。
439
- 3. 生成、校验并严格评估 Hardware IR;不要从相似板型猜测管脚或器件。
440
- 4. 每项能力达到 READY_TO_PORT 后,生成独立工程并把板级采集、编码、播放、按键放在 starter_media/板级 adapter。
441
- 5. 运行相关测试和 idf.py build,保留实际命令、结果、固件路径和 SHA-256。
442
- 6. 本轮不烧录、不写设备凭证;需要下载、安装或修改系统环境时先说明具体动作。
443
- 7. 最后生成 TIRTC_PORTING_REPORT.md,所有验收层级使用 PASS、FAIL 或 SKIP,不能用编译成功代替 H5/AI 实机通过。
444
- ```
583
+ ### 验证 AI 对讲
445
584
 
446
- 如果只有型号和网页资料,可先用:
585
+ 1. 先确认 H5 或其他会话没有占用媒体资源。
586
+ 2. 串口输入 `ai-start`,观察状态从 `ai-connecting` 进入 `ai-active`。
587
+ 3. 确认 `start_session` 成功后,设备才开始发送麦克风音频。
588
+ 4. 确认上行语音被 AI 接收,下行 AI 音频能从实体扬声器播放。
589
+ 5. 输入 `ai-stop`,确认发送 `end_session`,媒体任务停止,状态回到 `waiting`。
590
+ 6. 再次打开 H5,确认实时音视频可以重新连接。
447
591
 
448
- ```text
449
- $tirtc-esp32-builder
592
+ 如果产品使用实体按键启动 AI,会话状态和验收条件相同,只是触发方式从串口命令换成板级按键。
450
593
 
451
- 分析 <厂商> <完整型号> <PCB 版本>,目标是 H5 实时音视频、H5 对讲和 AI 双向对讲。
452
- 先输出板卡资料清单、Hardware IR、能力结论和最小缺失项;本轮不生成工程、不烧录。
453
- ```
594
+ ### 分层验收
595
+
596
+ 每一层都要有独立证据。缺少硬件、账号、浏览器、服务或网络时,写 `SKIP`,并注明后续补测条件。
597
+
598
+ | 层级 | 通过条件 |
599
+ |---|---|
600
+ | L-1 Environment | Doctor 必需项和项目构建契约通过 |
601
+ | L0 Generate | 新工程和 Hardware IR 存在,没有覆盖旧目录 |
602
+ | L1 Build | `idf.py build` 成功,固件和 SHA-256 已记录 |
603
+ | L2 Boot | 指定串口烧录成功,无 panic 或反复重启 |
604
+ | L3 Online | 所选 Wi-Fi 凭证和设备绑定流程、MQTT 与 TiRTC 就绪 |
605
+ | L4 Media | 摄像头、麦克风、扬声器的本地路径和计数正常 |
606
+ | L5 H5 | 浏览器持续收到声明的音视频,下行对讲到达实体扬声器 |
607
+ | L6 AI | token、WHIP、`start_session`、双向音频、停止和 H5 恢复正常 |
608
+ | L7 Stability | 按需求完成反复会话、弱网、资源和长稳测试 |
454
609
 
455
- Skill 会选择以下三条分支之一:
610
+ 一份完整交付通常包含:
456
611
 
457
- - 已支持板卡:校验已有 Hardware IR 和 adapter 后重新生成、编译和验收;
458
- - 新板卡:逐份提取原理图/BSP/数据手册事实,建立 Hardware IR,再决定是否实现;
459
- - 已有 ESP-IDF 工程:先检查目标、配置、组件、驱动和最小外设示例,再隔离可复用板级代码。
612
+ - 生成工程的绝对路径;
613
+ - `hardware-ir.json` 和关键事实来源;
614
+ - 能力评估与剩余阻塞项;
615
+ - 固件文件、构建命令、版本和 SHA-256;
616
+ - 明确到芯片和串口的烧录记录;
617
+ - 脱敏后的构建、启动和验收日志;
618
+ - `TIRTC_PORTING_REPORT.md`;
619
+ - L-1 到 L7 的 `PASS`、`FAIL` 或 `SKIP`。
620
+
621
+ 任务只做到生成和编译时,报告应明确停在 L1。
622
+
623
+ ## 常见问题
460
624
 
461
- ### 第 8 步:检查 Hardware IR 和能力门禁
625
+ ### 找不到 `node`、`npm` 或 `npx`
462
626
 
463
- 默认 Hardware IR 工具位于:
627
+ 安装 Node.js 18 或更高版本,重新打开终端,再检查:
464
628
 
465
629
  ```bash
466
- python3 ~/.codex/skills/tirtc-esp32-builder/scripts/hardware_ir.py init \
467
- /absolute/path/hardware-ir.json
630
+ node --version
631
+ npm --version
632
+ npx --version
633
+ ```
468
634
 
469
- python3 ~/.codex/skills/tirtc-esp32-builder/scripts/hardware_ir.py validate \
470
- /absolute/path/hardware-ir.json
635
+ ### npm 使用了镜像源,提示 404 或找不到包
471
636
 
472
- python3 ~/.codex/skills/tirtc-esp32-builder/scripts/hardware_ir.py assess --strict \
473
- /absolute/path/hardware-ir.json
637
+ 查看当前 Registry:
638
+
639
+ ```bash
640
+ npm config get registry
474
641
  ```
475
642
 
476
- 通常由 Codex 执行这些命令,开发者只需检查结果:
643
+ 如果不是 `https://registry.npmjs.org/`,切回官方源后重试:
477
644
 
478
- | 状态 | 含义 | 下一步 |
479
- |---|---|---|
480
- | `NEEDS_CONFIRMATION` | 关键事实未知或只有单一来源 | 补原理图、BSP、数据手册或实测证据 |
481
- | `BLOCKED` | 已确认当前硬件/SDK 不满足 | 换硬件、补编码/播放路径或取得匹配 SDK |
482
- | `READY_TO_PORT` | 资料已足够,可以生成并实现板级适配 | 进入生成和编译 |
483
- | `HIL_VERIFIED` | 该功能已完成端到端实机验证 | 保存证据和版本 |
645
+ ```bash
646
+ npm config set registry https://registry.npmjs.org/
647
+ npm view tirtc-device-builder version
648
+ ```
484
649
 
485
- `assess --strict` 返回非零不一定表示脚本坏了;当任一请求能力尚未达到 `READY_TO_PORT` 时,它会用退出码阻止过早生成。先处理输出中的具体原因。
650
+ ### `npm login` 提示无法打开浏览器
486
651
 
487
- ### 第 9 步:生成、实现和编译
652
+ 普通使用者不需要登录 npm。直接执行:
488
653
 
489
- 推荐让 Skill 自动执行。需要人工复现生成步骤时,确保 `TIRTC_PROJECT_DIR` 不存在,再运行:
654
+ ```bash
655
+ npx --yes tirtc-device-builder@latest setup esp32 --install
656
+ ```
657
+
658
+ `npm login` 只供维护者发布包,与安装公开包无关。
659
+
660
+ ### 输出 `OVERALL: NEEDS_SETUP`
661
+
662
+ 这表示只读检查发现环境尚未准备完整。按输出提示执行安装:
490
663
 
491
664
  ```bash
492
- python3 "$TIRTC_THING_CONNECT_ROOT/device-sim/scripts/create_esp32_project.py" \
493
- "$TIRTC_PROJECT_DIR" \
494
- --name my_esp32_device
665
+ npx --yes tirtc-device-builder@latest setup esp32 --install
495
666
  ```
496
667
 
497
- `--name` 只能包含小写字母、数字和下划线。生成器拒绝覆盖已存在目录;需要重做时应先选择新的输出目录或人工备份旧工程。
668
+ ### 提示缺少 `python3`、`git`、`bash` 或 `tar`
669
+
670
+ 安装器不会运行 `sudo`。请用当前系统的包管理器补齐这些命令,再执行 `setup esp32 --install`。安装可以续跑,已经完成的部分会被复用。
671
+
672
+ ### `idf.py not found`
498
673
 
499
- 进入工程,激活 ESP-IDF,再检查 SDK 构建契约。下面的 `source` 路径只适用于按第 5 步安装到示例目录的情况;已有安装应替换为其真实 `export.sh` 路径:
674
+ 当前终端没有激活 ESP-IDF。使用一键环境时执行:
500
675
 
501
676
  ```bash
502
- cd "$TIRTC_PROJECT_DIR"
503
- source "$TIRTC_WORKSPACE/toolchains/esp-idf-v5.5.4/export.sh"
677
+ source ~/.tirtc-device-builder/env.sh
678
+ idf.py --version
679
+ ```
504
680
 
505
- python3 ~/.codex/skills/tirtc-esp32-builder/scripts/doctor.py \
506
- --expected-idf 5.5 \
507
- --target esp32s3 \
508
- --project "$TIRTC_PROJECT_DIR"
681
+ 使用已有 ESP-IDF 时执行它自己的 `export.sh`:
682
+
683
+ ```bash
684
+ source /absolute/path/esp-idf/export.sh
509
685
  ```
510
686
 
511
- 项目级 Doctor 的 `TiRTC build contract` 必须为 `PASS`。随后构建:
687
+ ### ESP-IDF 版本不是 5.5.x
688
+
689
+ 不要用错误版本继续编译预编译 SDK。让安装器使用新的托管目录,或明确传入正确版本:
512
690
 
513
691
  ```bash
514
- idf.py set-target esp32s3
515
- idf.py build
692
+ npx --yes tirtc-device-builder@latest setup esp32 --install \
693
+ --idf-dir /absolute/path/esp-idf-v5.5.4
516
694
  ```
517
695
 
518
- 构建成功只证明 L1 Build 通过。真正的板卡移植还要完成 `components/starter_media/` 中的产品适配点:
696
+ 如果指定目录已存在但内容不完整或版本错误,安装器会拒绝覆盖。换一个空的新路径,或先人工备份原目录。
519
697
 
520
- - 麦克风采集并提交 G.711 A-law、8 kHz、单声道帧;
521
- - 摄像头采集并提交 H.264 Annex-B access unit;
522
- - 收到关键帧请求时让编码器产生 IDR;
523
- - 把下行 A-law 音频放入有界队列,解码后写入 Codec/I2S/功放;
524
- - 把实体按键映射到 AI 开始/停止;
525
- - 停止会话时有界停止采集/播放任务并清空旧 generation 数据。
698
+ ### 安装完成后 Codex 找不到 Skill
526
699
 
527
- 检查仍未完成的产品适配点:
700
+ 关闭当前 Codex 会话并重新打开。再检查默认文件是否存在:
528
701
 
529
702
  ```bash
530
- rg -n 'TODO\(product-' main components
703
+ ls -l ~/.codex/skills/tirtc-esp32-builder/SKILL.md
531
704
  ```
532
705
 
533
- 编译产物位于 `build/`。报告至少记录 ESP-IDF、TiRTC SDK、BSP/adapter 版本,实际构建命令、返回码、固件文件和 SHA-256。
706
+ 设置过 `CODEX_HOME` 或 `--skills-dir` 时,要检查对应目录。不要同时把 Skill 安装到多个位置。
534
707
 
535
- ### 第 10 步:明确授权后烧录
708
+ ### 已有 Skill,安装器拒绝覆盖
536
709
 
537
- 先连接开发板并确定唯一串口。Linux 常见端口为 `/dev/ttyACM0` 或 `/dev/ttyUSB0`:
710
+ 安装器检测到本地已有 Skill,因此没有直接覆盖。确认可以替换后执行:
538
711
 
539
712
  ```bash
540
- ls -l /dev/ttyACM* /dev/ttyUSB*
713
+ npx --yes tirtc-device-builder@latest setup esp32 --install --force-skill
541
714
  ```
542
715
 
543
- 用实际端口运行 Doctor:
716
+ 如果只使用 `install esp32` 子命令,对应选项是 `--force`。
717
+
718
+ ### Device Kit 下载失败
719
+
720
+ 确认能访问 npm 和 GitHub Release。受限网络中,可以在另一台机器下载公开 Release 附件,再传到开发机:
544
721
 
545
722
  ```bash
546
- python3 ~/.codex/skills/tirtc-esp32-builder/scripts/doctor.py \
547
- --expected-idf 5.5 \
548
- --target esp32s3 \
549
- --project "$TIRTC_PROJECT_DIR" \
550
- --serial-port /dev/ttyACM0
723
+ npx --yes tirtc-device-builder@latest setup esp32 --install \
724
+ --kit-archive /absolute/path/tirtc-esp32s3-kit-1.0.0.tar.gz
551
725
  ```
552
726
 
553
- `serial port` 必须为 `PASS`。如果设备存在但无权限,按系统规范配置串口用户组并重新登录;不要用长期放宽所有设备权限的方式绕过。
727
+ 安装器会校验 SHA-256 和内部文件清单。如果校验不一致,请重新获取官方 Release 附件,不要跳过校验。
554
728
 
555
- 让 Skill 烧录时发起第二次、独立且明确的请求:
729
+ ### 提示 `refusing to overwrite incomplete directory`
556
730
 
557
- ```text
558
- $tirtc-esp32-builder
731
+ 目标路径已经存在,但不是完整的 Device Kit 或 ESP-IDF。安装器不会删除或覆盖该目录。请先检查并备份,再改用新的 `--root` 或 `--idf-dir` 路径。
559
732
 
560
- 我确认目标芯片是 ESP32-S3,目标工程是 /absolute/path/my-esp32-device,
561
- 目标串口是 /dev/ttyACM0。授权本轮烧录该设备并打开串口监视;
562
- 不要擦除其他串口设备,不要在日志中输出 Wi-Fi 密码或设备密钥。
563
- 烧录后执行 L2 Boot 检查并更新 TIRTC_PORTING_REPORT.md。
564
- ```
733
+ ### Doctor 报 `no sdkconfig or sdkconfig.defaults`
565
734
 
566
- 也可以人工执行:
735
+ 典型输出是:
567
736
 
568
- ```bash
569
- cd "$TIRTC_PROJECT_DIR"
570
- idf.py -p /dev/ttyACM0 flash monitor
737
+ ```text
738
+ FAIL TiRTC build contract [required]: no sdkconfig or sdkconfig.defaults in ...
571
739
  ```
572
740
 
573
- ESP-IDF Monitor 中使用 `Ctrl+]` 退出。多个串口同时存在时,必须根据 USB 拔插、设备标识或芯片探测结果确认目标,不能选择第一个端口直接写入。
741
+ `--project` 指向的目录还不是已生成的 ESP-IDF 工程,或者路径写错了。生成前不要传 `--project`;生成后确认工程中存在 `sdkconfig.defaults`,再运行项目级 Doctor。
574
742
 
575
- WSL 不一定自动获得 USB 串口。Doctor 看不到端口时,先按 [Microsoft 的 WSL USB 连接说明](https://learn.microsoft.com/windows/wsl/connect-usb) 把目标设备附加到当前 WSL 实例,再重新运行串口检查。
743
+ ### `WARN serial discovery: no serial device detected`
576
744
 
577
- ### 第 11 步:首次配网和绑定
745
+ 没有连接开发板时,这是正常警告,不影响生成和编译。烧录前必须让串口检查变成 `PASS`。
578
746
 
579
- 固件首次启动且没有 Wi-Fi 配置时:
747
+ 设备已连接但没有权限时,按操作系统规范把当前用户加入串口用户组并重新登录。Ubuntu 常见用户组是 `dialout`。不要长期把串口权限放宽给所有用户。
580
748
 
581
- 1. 在手机或电脑连接 `TiRTC-Setup-XXXX`。
582
- 2. 输入默认密码 `tirtc1234`。
583
- 3. 打开 `http://192.168.4.1`,填写设备要连接的 Wi-Fi。
584
- 4. 设备重启并联网后,在串口查看绑定验证码和体验平台地址。
585
- 5. 登录体验平台,在设备绑定入口输入验证码。
586
- 6. 回到串口输入 `status`,确认 platform、MQTT、TiRTC 均已就绪,runtime 处于 `waiting`。
749
+ WSL 默认不一定能看到 USB 设备。按 [Microsoft WSL USB 连接说明](https://learn.microsoft.com/windows/wsl/connect-usb) 将设备附加到当前 WSL 实例,再运行 Doctor。
587
750
 
588
- 也可以在串口输入:
751
+ ### Hardware IR 一直是 `NEEDS_CONFIRMATION`
589
752
 
590
- ```text
591
- wifi-set <ssid> <password>
592
- wifi-clear
593
- status
594
- restart
753
+ 先查看各个未知项要求什么来源。常见缺口包括准确的 PCB 版本、摄像头数据格式、所选视频 profile 的完整输出路径、Codec 时钟、功放使能脚、配网方法和可工作的厂商示例。不要从相似开发板复制管脚来填补这些信息。
754
+
755
+ ### 工程能编译,浏览器没有画面
756
+
757
+ 先确认摄像头输出是否真正进入选定的视频路径。MJPEG 要逐次提交完整 JPEG;H.264/H.265 要符合合同规定的 Annex-B、参数集和刷新帧行为。同时检查持续发送计数、丢帧和队列水位。Sensor 能输出 JPEG、RGB 或裸 YUV,不等于 H5 视频链路已经打通。
758
+
759
+ ### 工程能编译,但 H5 或 AI 没有声音
760
+
761
+ 分别检查上行和下行,不要把它们当成同一条链路:
762
+
763
+ - 上行:麦克风、采样率、声道、G.711 A-law 编码、发送时机;
764
+ - 下行:stream 14、队列边界、A-law 解码、I2S/Codec、功放使能、扬声器;
765
+ - AI:`start_session` 成功后才发送音频,停止时清理旧 generation 数据;
766
+ - 全双工:没有 AEC 和硬件证据时先验证半双工。
767
+
768
+ ### 原生 Windows 无法自动安装 ESP-IDF
769
+
770
+ 自动安装当前支持 Linux、WSL 和 macOS。原生 Windows 请使用 Espressif 官方安装器准备 ESP-IDF 5.5.x 和 ESP32-S3 工具链,再运行:
771
+
772
+ ```powershell
773
+ npx --yes tirtc-device-builder@latest setup esp32
595
774
  ```
596
775
 
597
- `tirtc-set <device_id> <device_secret> [client_id]` 只用于受控底层联调。正常流程使用验证码绑定,真实凭证不能写入源码、脚本、报告或 Git。
776
+ 也可以在 WSL 中完成整个流程,但烧录前要先把 USB 设备连接到 WSL。
598
777
 
599
- ### 第 12 步:按层验收 H5 和 AI
778
+ ## 使用边界
600
779
 
601
- 验收时不要跨级宣告成功。缺少账号、浏览器、服务、外网、板卡或仪器时,对应项记录为 `SKIP`,并写明补测条件。
780
+ ### 必须克隆 `tirtc-server-example` 吗?
602
781
 
603
- | 层级 | 必须看到的证据 |
604
- |---|---|
605
- | L-1 Environment | Doctor 的必需项和项目构建契约通过 |
606
- | L0 Generate | 新工程和 Hardware IR 存在,未覆盖旧目录 |
607
- | L1 Build | `idf.py build` 成功并记录固件及 SHA-256 |
608
- | L2 Boot | 指定串口烧录成功,无 panic/反复重启 |
609
- | L3 Online | 配网、验证码绑定、MQTT、TiRTC 就绪 |
610
- | L4 Media | 摄像头、麦克风、扬声器本地路径和计数正常 |
611
- | L5 H5 | 浏览器持续收到声明的视频/音频,对讲到达设备扬声器 |
612
- | L6 AI | token、WHIP、`start_session`、双向音频、停止和 H5 恢复正常 |
613
- | L7 Stability | 按需求完成反复会话、弱网、资源和长稳测试 |
782
+ 不需要。普通开发所需的生成器、模板、协议文档、TiRTC 头文件和 `libTiRTC.a` 都在版本化的 ESP32 Device Kit 中。一键安装会下载公开 Release,并把路径写进 `env.sh`。
614
783
 
615
- H5 验收:
784
+ `--thing-connect-root` 主要用于维护模板、协议或 Device Kit 的开发者复用完整源码工作区。
616
785
 
617
- 1. 串口 `status` 显示 runtime 为 `waiting`。
618
- 2. 在体验平台打开该设备的实时查看入口。
619
- 3. 确认 H.264 视频持续显示,音频/视频发送计数持续增长。
620
- 4. 发起 H5 对讲,确认 stream 14 下行计数增长且实体扬声器可听。
621
- 5. 触发浏览器重连或关键帧请求,确认板端编码器产生新的 IDR,画面恢复。
786
+ ### 为什么推荐 `npx`,不是安装一个 npm 包就结束?
622
787
 
623
- AI 验收:
788
+ `npx` 适合运行低频的安装和诊断命令,也可以明确选择 `@latest`。全局 `npm install` 同样可用,但只负责安装 CLI。
624
789
 
625
- 1. 确认 H5/其他会话没有占用媒体资源。
626
- 2. 串口输入 `ai-start`,观察状态从 `ai-connecting` 进入 `ai-active`。
627
- 3. 确认只有 `start_session` 成功后才开始发送麦克风音频。
628
- 4. 确认上行麦克风被 AI 接收,下行 AI 音频在扬声器播放。
629
- 5. 输入 `ai-stop`,确认发送 `end_session`、媒体任务停止,状态回到 `waiting`。
630
- 6. 再次打开 H5,确认 H5 可以重新连接并恢复音视频。
790
+ Skill、Device Kit 和 ESP-IDF 会写到 npm 包目录之外,也可能占用较多磁盘和下载时间,因此统一由显式命令 `setup esp32 --install` 安装。开发者可以提前看到安装计划和目标目录;以后卸载或升级 CLI,也不会误删开发环境。
631
791
 
632
- ### 第 13 步:检查最终交付物
792
+ ### 只给开发板型号能不能自动完成全部代码?
633
793
 
634
- 一次完整交付至少包含:
794
+ 可以先分析,但不能保证直接完成硬件移植。型号足以定位候选资料;GPIO、器件版本、所选视频 profile、音频时钟和配网能力仍需可信来源。资料不足时,Skill 会给出最小补充清单,不会拿相似板型的数据填空。
635
795
 
636
- - 生成的 ESP-IDF 工程绝对路径;
637
- - `hardware-ir.json` 及每条关键事实的来源;
638
- - 能力评估结果和剩余阻塞项;
639
- - `build/` 中的固件产物及 SHA-256;
640
- - 明确到芯片和串口的烧录记录;
641
- - 脱敏后的构建、启动和验收日志;
642
- - `TIRTC_PORTING_REPORT.md`;
643
- - L-1 到 L7 的 `PASS`、`FAIL` 或 `SKIP` 证据。
796
+ ### 能接入已有 ESP-IDF 工程吗?
797
+
798
+ 可以。把现有工程路径、目标芯片、ESP-IDF 版本、BSP 和已验证的外设示例交给 Skill。它会先检查组件、配置、SDK 构建合同和媒体接入边界,再决定复用哪些板级代码。
644
799
 
645
- 如果只完成生成和编译,报告应明确停在 L1;不能写成“Web 已出图”或“AI 对讲已完成”。
800
+ ### 生成的工程可以移走吗?
646
801
 
647
- ### 一次成功检查清单
802
+ 可以。TiRTC SDK 会复制到工程的 `third_party/tirtc/`。移动后仍需在新机器上激活兼容的 ESP-IDF 5.5.x,并重新运行项目级 Doctor 和构建。
648
803
 
649
- 开始下一阶段前逐项确认:
804
+ ### 能支持 ESP32 之外的芯片吗?
650
805
 
651
- - [ ] 板卡厂商、完整型号、模组、PCB 版本一致。
652
- - [ ] 原理图/BOM/BSP/数据手册路径均为绝对路径且可读。
653
- - [ ] Node.js 版本不低于 18,Skill 已安装并重启 Codex。
654
- - [ ] ESP32 Device Kit 的生成器、TiRTC 头文件、静态库和构建契约存在。
655
- - [ ] 当前终端已激活 ESP-IDF 5.5.x 和 ESP32-S3 工具链。
656
- - [ ] 生成前 Doctor 的 `OVERALL` 为 `PASS`。
657
- - [ ] 所有请求能力均为 `READY_TO_PORT` 或 `HIL_VERIFIED`。
658
- - [ ] 输出目录不存在,旧工程未被覆盖。
659
- - [ ] 项目级 Doctor 的 `TiRTC build contract` 为 `PASS`。
660
- - [ ] `idf.py build` 成功,但尚未把它当作实机功能通过。
661
- - [ ] 烧录前已确认唯一串口并明确授权。
662
- - [ ] 配网、绑定、H5、AI 分层验收均保留脱敏证据。
663
- - [ ] 最终报告中的每个 `SKIP` 都有原因和最小下一步。
806
+ 仓库允许每个平台使用独立 Skill,但当前公开版本只实现 ESP32-S3。泰芯或其他平台需要新增 `skills/<platform-skill>/`,并分别维护 SDK、工具链、板级 adapter 和验收约束。
664
807
 
665
- ## 开发与验证
808
+ ## 给仓库维护者
809
+
810
+ 以下命令只供仓库维护者使用。
811
+
812
+ ### 本地验证
666
813
 
667
814
  ```bash
668
815
  npm ci --ignore-scripts
@@ -670,10 +817,9 @@ npm test
670
817
  npm pack --dry-run
671
818
  ```
672
819
 
673
- `npm pack --dry-run` 展示实际进入公开 tarball 的文件;发布前必须确认其中没有
674
- SDK 二进制、凭证、板卡私有资料、构建产物或用户媒体。
820
+ `npm pack --dry-run` 用于核对公开 tarball。包内不应出现 Device Kit 二进制、设备凭证、板卡私有资料、构建产物或用户媒体。
675
821
 
676
- 本地安装了 Codex 系统校验器时,还可以运行:
822
+ 本机安装了 Codex 系统校验器时,还可以运行:
677
823
 
678
824
  ```bash
679
825
  python3 ~/.codex/skills/.system/skill-creator/scripts/quick_validate.py \
@@ -682,20 +828,72 @@ python3 ~/.codex/skills/.system/skill-creator/scripts/quick_validate.py \
682
828
  python3 ~/.codex/skills/.system/plugin-creator/scripts/validate_plugin.py .
683
829
  ```
684
830
 
685
- ## 增加新平台
831
+ ### 打包 ESP32 Device Kit
832
+
833
+ ```bash
834
+ npm run pack:esp32-kit -- \
835
+ --source /absolute/path/tirtc-server-example/thing-connect \
836
+ --kit-version 1.0.0
837
+ ```
838
+
839
+ 输出位于 `dist/`:
840
+
841
+ ```text
842
+ tirtc-esp32s3-kit-1.0.0.tar.gz
843
+ tirtc-esp32s3-kit-1.0.0.tar.gz.sha256
844
+ ```
845
+
846
+ 校验后使用独立的 `kit-esp32s3-v<version>` 标签发布 GitHub Release:
847
+
848
+ ```bash
849
+ gh --version
850
+ gh release --help
851
+
852
+ cd dist
853
+ sha256sum -c tirtc-esp32s3-kit-1.0.0.tar.gz.sha256
854
+ cd ..
855
+
856
+ git tag -a kit-esp32s3-v1.0.0 -m "TiRTC ESP32-S3 Device Kit 1.0.0"
857
+ git push origin kit-esp32s3-v1.0.0
858
+
859
+ gh release create kit-esp32s3-v1.0.0 \
860
+ dist/tirtc-esp32s3-kit-1.0.0.tar.gz \
861
+ dist/tirtc-esp32s3-kit-1.0.0.tar.gz.sha256 \
862
+ --repo tangeai/tirtc-device-builder \
863
+ --verify-tag \
864
+ --latest=false \
865
+ --title "TiRTC ESP32-S3 Device Kit 1.0.0" \
866
+ --notes "ESP-IDF 5.5.x;TiRTC SDK 2.3.0;包含 H5/AI 工程生成资源。"
867
+ ```
868
+
869
+ `gh release --help` 如果提示 `No such command 'release'`,当前系统安装的不是 GitHub 官方 CLI。先按 [GitHub CLI 官方安装说明](https://github.com/cli/cli/blob/trunk/docs/install_linux.md) 安装或替换,再登录并发布 Release。
870
+
871
+ ### 发布 npm
872
+
873
+ `package.json` 版本与 Git 标签必须一致。推送 `v<package-version>` 标签后,`.github/workflows/publish.yml` 通过 npm Trusted Publishing 发布:
874
+
875
+ ```bash
876
+ npm test
877
+ git tag -a v0.4.0 -m "v0.4.0"
878
+ git push origin v0.4.0
879
+ ```
880
+
881
+ 不要重复发布已经存在的 npm 版本。版本变化同步更新 `package.json`、`.codex-plugin/plugin.json` 和发布说明。
882
+
883
+ ### 增加新平台
686
884
 
687
- 每个平台使用 `skills/<platform-skill>/` 独立目录。新 Skill 需要:
885
+ 每个平台放在独立的 `skills/<platform-skill>/` 目录,并写清楚:
688
886
 
689
- - 明确芯片、SDK、工具链和不适用范围;
690
- - 使用来源可追溯的硬件事实,不从相似型号静默推断;
691
- - 把平台驱动隔离在板级 adapter,不复制 H5/AI 会话状态机;
692
- - 区分编译、烧录启动、设备上线、媒体链路和端到端业务验收;
693
- - 对下载、工具链安装、串口烧录和凭证写入保留明确授权边界。
887
+ - 芯片、SDK、工具链和不适用范围;
888
+ - Hardware IR 需要的事实和来源;
889
+ - 板级媒体 adapter 与公共会话逻辑的边界;
890
+ - 编译、启动、上线、媒体、业务和稳定性验收;
891
+ - 下载、工具链安装、串口烧录和凭证写入的授权边界。
694
892
 
695
- 共享逻辑只在两个以上平台出现相同不变量后抽取,避免形成只转发参数的公共层。
893
+ 等两个以上平台出现相同且稳定的约束后,再提取共享逻辑,避免公共层只做参数转发。
696
894
 
697
895
  ## 安全与许可证
698
896
 
699
- 不要在 Issue、日志或报告中提交设备密钥、Wi-Fi 密码、MQTT/WHIP token、证书或用户音视频。安全问题按 [SECURITY.md](SECURITY.md) 私下报告。
897
+ 不要在 Issue、日志或报告中提交设备密钥、Wi-Fi 密码、MQTT/WHIP token、证书、生产配置或用户音视频。安全问题按 [SECURITY.md](SECURITY.md) 私下报告。
700
898
 
701
- 本仓库源码使用 MIT License,见 [LICENSE](LICENSE)。ThingConnect、TiRTC SDK、ESP-IDF、厂商 BSP、芯片资料和其他第三方内容使用各自的许可证;本仓库许可证不会替代它们。
899
+ 本仓库源码使用 [MIT License](LICENSE)。ThingConnect、TiRTC SDK、ESP-IDF、厂商 BSP、芯片资料和其他第三方内容使用各自的许可证,本仓库许可证不会替代它们。版本差异见 [CHANGELOG.md](CHANGELOG.md)。