@casatwy/deyo 0.1.9 → 0.2.1

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
@@ -2,9 +2,11 @@
2
2
 
3
3
  `deyo` 是 [https://deyo.miaobi.fun](https://deyo.miaobi.fun) 的命令行工具。你可以直接在终端里提交音视频链接或本地音视频文件进行转写,并把结果输出到终端或保存到本地文件。
4
4
 
5
- 当前支持 8 类链接来源 + 本地音视频上传。链接来源包括小宇宙单集、喜马拉雅单集(含 `xima.tv` 短链)、B 站单视频、抖音单视频、小红书单视频笔记、YouTube 单视频、Apple Podcasts 单集和 Twitter/X 单条推文。其中喜马拉雅合集链接会返回 422 并提示选择单集,不会扣分钟或创建转写任务;Twitter/X 只有视频推文可转写,文本 / 图片推文会返回 422。B 站支持普通 BV 链接、`b23.tv` 短链、带 `bvid` 的 `player.bilibili.com/player.html` 嵌入播放器链接,以及可由 Whisper 解出 BV 页面的 `bilibili://video/...` App 分享视频链接;CLI 会识别并透传 App 链接,不在本地解码或推导 BV。
5
+ CLI `0.2.1` 在保留可选稳定正文事件的同时,改为在省略 `--language` 时请求服务端自动检测转写语言;只有用户明确指定语言时,CLI 才会把 `language` 字段发送给链接或本地文件任务。默认不会把正文写入进度日志;只有显式使用 `--stream-transcript --progress-format jsonl`,且最终格式为 `text` 时,才会在 stderr JSONL 中输出稳定的 Whisper 正文增量。stdout 或 `-O` 始终只接收最终 Whisper 原稿,CLI 本身不做 AI 整理。
6
6
 
7
- 本地文件转写只支持单个音频或视频文件。你可以直接传文件路径,也可以显式使用 `--file`;如果文件扩展名或系统识别不可靠,可以用 `--mime-type` 指定媒体类型。当前不支持目录、glob、stdin、批量队列或断点续传。
7
+ 当前支持 8 类链接来源 + 本地音视频上传。链接来源包括小宇宙单集、喜马拉雅单集(含 `xima.tv` 短链)、B 站单视频、抖音单视频、小红书单视频笔记、YouTube 单视频、Apple Podcasts 单集和 Twitter/X 单条推文。其中 YouTube 如果命中可直接使用的字幕,会直接输出字幕或文本结果,不进入完整转写、不扣分钟;喜马拉雅合集链接会返回 422 并提示选择单集,不会扣分钟或创建转写任务;抖音图文内容、小红书图文笔记、Twitter/X 文本或图片推文会返回不支持转写的提示。B 站支持普通 BV 链接、`b23.tv` 短链、带 `bvid` 的 `player.bilibili.com/player.html` 嵌入播放器链接,以及可由 Whisper 解出 BV 页面的 `bilibili://video/...` App 分享视频链接;CLI 会识别并透传 App 链接,不在本地解码或推导 BV。
8
+
9
+ 本地文件转写只支持单个普通音频或视频文件,固定作为 `upload` 来源提交。你可以直接传文件路径,也可以显式使用 `--file`;如果文件扩展名或系统识别不可靠,可以用 `--mime-type` 指定媒体类型。当前不支持目录、glob、stdin、批量队列或断点续传。
8
10
 
9
11
  ## 安装
10
12
 
@@ -24,6 +26,48 @@ pnpm add -g @casatwy/deyo
24
26
  deyo --help
25
27
  ```
26
28
 
29
+ ## 安装 Deyo Skill
30
+
31
+ Deyo CLI 和 Deyo Skill 是两个独立产物:CLI 负责登录、上传、转写、结构化进度和 Whisper 原稿;Skill 负责让 Codex、Claude、Gemini 或 OpenClaw 正确调用 CLI,并在普通 text 场景按约束整理正文。它们独立安装、独立版本、独立更新,版本号不要求相同。下一版 Skill 要求 CLI 至少为 `0.2.1`。
32
+
33
+ 先确认 CLI 版本,再交给 Deyo CLI 调用各平台的原生管理器安装 Skill:
34
+
35
+ ```bash
36
+ deyo --version
37
+ deyo skill install --platform codex
38
+ deyo skill install --platform claude
39
+ deyo skill install --platform gemini
40
+ deyo skill install --platform openclaw
41
+ ```
42
+
43
+ 默认 scope 为:Codex、Claude、Gemini 使用 `user`,OpenClaw 使用 `global`。Claude 也支持 `--scope workspace`,会映射到 Claude 的 project scope;OpenClaw 也支持 `--scope workspace`。Codex plugin 和 Gemini extension 的原生安装器没有对应的 workspace 安装能力,因此 CLI 会明确拒绝不支持的 scope,不会手写或覆盖平台 cache / lockfile。
44
+
45
+ 四个平台的安装行为如下:
46
+
47
+ - Codex:添加 `casatwy/deyo-skill` Git marketplace 并安装 `deyo@deyo-official`;新会话生效,后续由宿主刷新 marketplace。
48
+ - Claude:合并同名官方 marketplace 配置、设置 `autoUpdate: true`,再安装 `deyo@deyo-official`;运行 `/reload-plugins` 或开始新会话后生效。
49
+ - Gemini:从 Deyo 官方 Git 仓库安装 extension 并启用 `--auto-update`;不会添加固定 `--ref` 或跳过来源确认的 `--consent`,更新后重启 Gemini CLI。
50
+ - OpenClaw:使用 owner-qualified 的 `@casatwy/deyo`;默认只处理 global scope,workspace 安装时只处理当前 workspace。已有官方安装只会执行同一 scope 的单项 update,不使用 `--all` 或 `--force`。
51
+
52
+ 离线查看本地安装状态:
53
+
54
+ ```bash
55
+ deyo skill status
56
+ deyo skill status --platform codex
57
+ deyo skill status --platform claude --json
58
+ ```
59
+
60
+ `status` 只读取本地设置、安装 metadata 和 manifest;它不会启动平台 CLI、访问网络或触发更新。
61
+
62
+ 如果检测到旧版手工复制的 `deyo` Skill 目录,安装会停止并显示完整目录树 SHA-256。只有目录路径、文件、内容、类型、模式和 symlink 都与已知官方历史版本完全一致时,才允许把该摘要原样传回:
63
+
64
+ ```bash
65
+ deyo skill install --platform codex \
66
+ --replace-legacy sha256:<deyo-skill-status-显示的摘要>
67
+ ```
68
+
69
+ 迁移会先原子备份旧目录并复算摘要,再调用平台原生安装器;安装失败会恢复旧目录。只要存在本地修改、额外文件、未知来源或 symlink,CLI 都会保留现场并拒绝自动覆盖。
70
+
27
71
  ## 使用前准备
28
72
 
29
73
  在使用 CLI 之前,你需要先创建一个 Deyo API Key:
@@ -32,7 +76,20 @@ deyo --help
32
76
  2. 创建一个新的 API Key
33
77
  3. 复制这个 Key,后面登录 CLI 时会用到
34
78
 
35
- `deyo` 默认连接正式服务 `https://deyo.miaobi.fun`,普通用户不需要额外配置服务地址。
79
+ `deyo` 默认连接正式服务 `https://deyo.miaobi.fun`,普通用户不需要额外配置服务地址。只有你明确要连接本地或开发环境时,才需要临时传 `--base-url http://deyo.mac-studio`,或把同样的地址写入环境变量 / 本地配置。
80
+
81
+ API key 读取优先级:
82
+
83
+ 1. 命令行参数 `--api-key`
84
+ 2. 环境变量 `DEYO_API_KEY`
85
+ 3. 本地配置文件,也就是先执行 `deyo auth login` 保存的 key
86
+
87
+ 服务地址读取优先级:
88
+
89
+ 1. 命令行参数 `--base-url`
90
+ 2. 环境变量 `DEYO_BASE_URL`
91
+ 3. 本地配置文件,也就是 `deyo auth login --api-key ... --base-url ...` 保存的地址
92
+ 4. CLI 默认生产地址 `https://deyo.miaobi.fun`
36
93
 
37
94
  ## 首次登录
38
95
 
@@ -163,6 +220,14 @@ deyo --format srt -O ./transcript.srt 'https://www.youtube.com/watch?v=xxxx'
163
220
  deyo --progress-format jsonl -O ./transcript.txt 'https://www.youtube.com/watch?v=xxxx'
164
221
  ```
165
222
 
223
+ 让 AI 在转写过程中读取稳定正文事件(最终原稿仍只写入 `./transcript.txt`):
224
+
225
+ ```bash
226
+ deyo --format text --progress-format jsonl --stream-transcript -O ./transcript.txt 'https://www.youtube.com/watch?v=xxxx'
227
+ ```
228
+
229
+ `--stream-transcript` 默认关闭,只能与最终 `text` 和 `--progress-format jsonl` 一起使用。它不会给正文加标点、分段或纠错;如需整理,应由调用 CLI 的 AI 在独立文件中处理,不能把整理能力描述成 CLI 能力。
230
+
166
231
  如果输出文件名本身就是 `.srt`,也可以省略 `--format srt`,CLI 会自动识别格式。
167
232
 
168
233
  指定输出英文转写结果:
@@ -181,7 +246,7 @@ deyo --api-key 'deyo_sk_other' 'https://www.youtube.com/watch?v=xxxx'
181
246
 
182
247
  `--language <value>`
183
248
 
184
- 指定转写语言。默认是 `zh`,也就是中文输出。也可以写 `en`,英文输出。
249
+ 显式指定转写语言,例如 `zh` 或 `en`。省略该参数时,CLI 不会在链接任务或本地文件任务的请求体里发送 `language` 字段,由服务端和 Whisper 自动检测;不要根据终端语言或内容标题自行推断。
185
250
 
186
251
  `-O, --output <path>`
187
252
 
@@ -202,13 +267,19 @@ deyo --api-key 'deyo_sk_other' 'https://www.youtube.com/watch?v=xxxx'
202
267
  - `text`
203
268
  - `srt`
204
269
  - `vtt`
270
+ - `json`
271
+ - `verbose_json`
205
272
 
206
273
  如果你已经通过 `-O` 指定了输出文件名,CLI 会根据扩展名自动推断常见格式:
207
274
 
275
+ - `.txt` 会自动使用 `text`
208
276
  - `.srt` 会自动使用 `srt`
209
277
  - `.vtt` 会自动使用 `vtt`
278
+ - `.json` 会自动使用 `json`
210
279
  - 其他情况默认使用 `text`
211
280
 
281
+ `verbose_json` 不会通过文件扩展名自动推断;需要这个格式时请显式传 `--format verbose_json`。
282
+
212
283
  `--progress-format <value>`
213
284
 
214
285
  指定进度输出格式,支持:
@@ -226,23 +297,61 @@ deyo --api-key 'deyo_sk_other' 'https://www.youtube.com/watch?v=xxxx'
226
297
 
227
298
  本地文件上传会额外输出这些上传事件:`upload.hashing`、`upload.started`、`upload.progress`、`upload.completed`、`upload.checking`、`upload.ready`、`upload.aborted`、`upload.failed`。事件不会包含签名 URL、文件 hash 或分片 ETag。
228
299
 
300
+ 任务阶段会输出这些事件:`task.created`、`task.status_changed`、`task.progress`、`task.completed`、`task.failed`、`task.cancelled`、`task.result_written`、`task.notice`。如果 `task.created` 里出现 `mode: "subtitles"` 或 `resultReady: true`,通常表示命中字幕直出,不需要等待长时间完整转写。
301
+
302
+ `--stream-transcript`
303
+
304
+ 可选,默认关闭。只允许最终结果格式为 `text`,并且必须同时使用 `--progress-format jsonl`;非法组合会在任务启动前报错。开启后,stderr JSONL 会增加三类正文事件:
305
+
306
+ - `task.transcript.delta`:`{ event, taskId, sequence, source, startOffset, endOffset, text }`,其中 `source` 为 `sse`、`preview` 或 `result`。
307
+ - `task.transcript.reset`:`{ event, taskId, sequence, source, reason, text, characterCount }`,其中 `source` 同样为 `sse`、`preview` 或 `result`,`reason` 为 `non_prefix_snapshot` 或 `final_result_mismatch`,`text` 是完整修正版。
308
+ - `task.transcript.completed`:`{ event, taskId, sequence, source: "result", characterCount, sha256 }`。
309
+
310
+ `sequence` 在单次 CLI 进程内递增;`startOffset`、`endOffset` 和 `characterCount` 都按 Unicode code point 计数。`sha256` 是最终原稿精确 UTF-8 字节的 lowercase SHA-256。delta 只包含相对上一份稳定完整快照新增的文本;可变的 `pendingText` 不会进入这些事件。上游快照发生非前缀修正时会发送 reset,最终结果会重新对齐并以 completed 收尾。
311
+
312
+ 这些事件可能包含敏感正文,因此默认关闭。即使开启,stdout 或 `-O` 仍只包含最终 Whisper 原稿;JSONL 正文事件只写 stderr,CLI 不会在本地自动整理或覆盖用户目标文件。
313
+
229
314
  `--api-key <key>`
230
315
 
231
316
  为当前这一次命令临时指定 API Key。
232
317
  如果你已经执行过 `deyo auth login`,平时通常不需要再传。
233
- 当它和本地已保存配置同时存在时,会优先使用这次命令里传入的 `--api-key`。
318
+ 当它和环境变量、本地已保存配置同时存在时,会优先使用这次命令里传入的 `--api-key`。
319
+
320
+ `DEYO_API_KEY`
321
+
322
+ 可选。通过环境变量临时指定 API Key。它的优先级低于 `--api-key`,高于本地配置。
323
+
324
+ `--base-url <url>`
325
+
326
+ 可选。普通使用不需要传,默认使用生产服务和 CLI 默认配置。只有你明确要连接本地或开发环境时,才传 `--base-url http://deyo.mac-studio`。
327
+
328
+ `DEYO_BASE_URL`
329
+
330
+ 可选。通过环境变量临时指定服务地址。它的优先级低于 `--base-url`,高于本地配置和默认生产地址。
234
331
 
235
332
  ## 能力边界
236
333
 
237
334
  - 支持输入:8 类单条链接来源,或一个本地音频/视频文件。
238
335
  - 不支持输入:目录、glob、stdin、多个文件批量队列、断点续传。
336
+ - 本地文件固定作为 `upload` 来源提交,不需要传 `--source`;如果强行传其他来源,CLI 会直接报错。
239
337
  - API key 是 CLI 鉴权入口;没有 API key 时不能创建任务。
240
- - 完整转写会按账号分钟余额扣减;喜马拉雅合集、Twitter/X 文本 / 图片推文等不进入转写的分支不会扣分钟或创建转写任务。
338
+ - 完整转写会按账号分钟余额扣减;YouTube 字幕直出、喜马拉雅合集、抖音图文、小红书图文、Twitter/X 文本 / 图片推文等不进入完整转写的分支不会扣分钟或创建转写任务。
241
339
 
242
340
  `-v, --version`
243
341
 
244
342
  打印当前 CLI 版本号并退出,适合快速确认本机装的是哪个版本。
245
343
 
344
+ ## 常见排查
345
+
346
+ - `缺少 API key。请传 --api-key、设置 DEYO_API_KEY,或先执行 deyo auth login`:先在 `https://deyo.miaobi.fun/me/api-keys` 创建 key,再执行 `deyo auth login --api-key '...'`。
347
+ - `API key 无效或不存在`:重新创建新的 API key 后再登录。
348
+ - `剩余分钟不足`:完整转写会扣减分钟余额,需要先补充分钟包;YouTube 字幕直出不会走完整转写扣减。
349
+ - 本地文件无法识别 MIME:确认是单个普通音频或视频文件;必要时用 `--mime-type audio/mpeg`、`--mime-type video/mp4` 这类 `audio/*` 或 `video/*` 类型覆盖。
350
+ - 媒体检查失败、没有音频轨、ffprobe 失败:换一个包含可转写音轨的普通音视频文件后重试。
351
+ - 上传分片遇到签名过期或 403:CLI 会重新请求签名并重试;如果持续失败,重新运行命令。
352
+ - 任务创建后中断本地 CLI:这只会停止本地等待,不等于取消服务端转写任务;稍后可通过同一任务或历史记录继续查看结果。
353
+ - `--stream-transcript` 组合错误:确认最终格式是 `text`,并同时传入 `--progress-format jsonl`;SRT、VTT、JSON 和 `verbose_json` 不支持正文事件。
354
+
246
355
  ## 在 AI 工具中使用
247
356
 
248
357
  如果你希望让 AI 助手在你的本机环境里调用 `deyo`,可以参考官方安装页:
@@ -258,6 +367,8 @@ deyo --api-key 'deyo_sk_other' 'https://www.youtube.com/watch?v=xxxx'
258
367
 
259
368
  完成后,你就可以让 AI 直接帮你调用 `deyo` 提交链接转写或本地文件上传任务。对于需要在对话里持续同步进度的场景,AI 必须优先使用 `--progress-format jsonl`,读取 stderr 里的结构化事件,再把上传百分比、媒体检查、任务创建、状态切换、关键转写百分比和最终结果转述给你,不要粘贴原始 JSONL。
260
369
 
370
+ 如果你要求普通 `text` 整理稿,AI 应额外使用 `--stream-transcript`:让 CLI 把最终 Whisper 原稿写入权限受限的临时文件,仅从 stderr 读取稳定正文事件,按自然边界逐段整理和展示,并在终态重新基于完整原稿生成最终 cleaned `.txt`。明确要求 raw,或输出 SRT、VTT、JSON、`verbose_json` 时,不应启用正文整理。
371
+
261
372
  ## 更多帮助
262
373
 
263
374
  查看完整参数说明: