@gitruck/cli 1.2.10 → 1.2.12
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/CHANGELOG.md +165 -6
- package/dist/index.js +217 -213
- package/package.json +2 -2
- package/skills/gtrk-narration/SKILL.md +4 -0
- package/skills/gtrk-transcript/SKILL.md +33 -6
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gitruck/cli",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.12",
|
|
4
4
|
"description": "同合云成片流水线 CLI —— agent 驱动云端任务、产物拉回本地、三方工程文件(客户端/剪映/PR)互通。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Gitruck (同合云)",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"build": "bun build ./src/index.ts --target=node --minify --outfile dist/index.js",
|
|
51
51
|
"typecheck": "tsc --noEmit",
|
|
52
52
|
"prepublishOnly": "npm run typecheck && npm test && bun run build",
|
|
53
|
-
"test": "esbuild src/lib/compliance-notice.ts src/lib/config.ts src/lib/crash-report.ts src/lib/log.ts src/lib/read-json.ts src/lib/enum-catalog.ts src/lib/first-run-tutorial.ts src/lib/desktop-client-hint.ts src/lib/command-path.ts src/lib/user-path.ts src/lib/runtime-channel.ts src/lib/self-install.ts src/lib/chunk-upload.ts src/lib/upload-cache.ts src/lib/upload-submit.ts src/lib/render.ts src/lib/cloud.ts src/lib/materialize.ts src/lib/jianying.ts src/lib/clip-brief.ts src/lib/media.ts src/lib/projection.ts src/lib/reproject.ts src/lib/splitdoc.ts src/lib/gtrk-writeback.ts src/lib/gtrk-patch.ts src/lib/frame-domain.ts src/lib/clock-adapter.ts src/lib/gtrk-invariants.ts src/lib/column-config.ts src/lib/third-party-catalog.ts src/lib/mg-adopt.ts src/lib/mg-registry.ts src/lib/matrix.ts src/lib/matrix-material.ts src/lib/matrix-fetch.ts src/lib/matrix-lay.ts src/lib/arrange-metering.ts src/lib/arrange-wire.ts src/lib/arrange-apply.ts src/lib/arrange-client.ts src/lib/arrange-gate.ts src/lib/arrange-decision-pin.ts src/lib/arrange-qc.ts src/lib/arrange-qc-bind.ts src/lib/rate-limit-wait.ts src/lib/embed-client.ts src/lib/describe.ts src/lib/highlight-rubric.ts src/lib/local-index.ts src/lib/index-decode.ts src/lib/local-search.ts src/lib/qc.ts src/lib/alignment-qc.ts src/lib/bgm-history.ts src/lib/image-move.ts src/lib/cloud-render-guard.ts src/lib/outdir-guard.ts src/lib/landing-wait.ts src/lib/material-integrity.ts src/lib/solid-png.ts src/lib/mask-raster.ts src/lib/mg-lint.ts src/lib/mg-visual-job.ts src/lib/mg-track-identity.ts src/lib/particle-identity.ts src/lib/text-ir/compile.ts src/lib/text-ir/validate.ts src/lib/text-ir/compile-local.ts src/lib/text-templates.ts src/lib/text-ir-client.ts src/lib/mg-lay.ts src/lib/mg-render.ts src/lib/particle-qtrle.ts src/lib/tool-descriptors.ts src/lib/tool-runner.ts src/lib/tool-pricing.ts src/lib/transcript.ts src/lib/runtime-assets.ts src/lib/subtitle-lay.ts src/lib/caption-align.ts src/lib/subtitle-line-split-client.ts src/lib/audio-align.ts src/lib/audio-tighten.ts src/lib/ai-drama-lay.ts src/lib/desk-locate.ts src/lib/pip-lay.ts --bundle --platform=node --format=esm --external:bun:sqlite --outdir=.test-build --out-extension:.js=.mjs && esbuild src/lib/text-ir/compile.ts --bundle --platform=node --format=esm --outfile=.test-build/text-ir-compile.mjs && esbuild src/commands/split.ts --bundle --platform=node --format=esm --outdir=.test-build --out-extension:.js=.mjs && esbuild src/commands/patch.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/patch-cmd.mjs && esbuild src/commands/matrix.ts --bundle --platform=node --format=esm --external:bun:sqlite --outfile=.test-build/matrix-cmd.mjs && esbuild src/commands/mg.ts --bundle --platform=node --format=esm --outfile=.test-build/mg-cmd.mjs && esbuild src/commands/mg-text.ts --bundle --platform=node --format=esm --outfile=.test-build/mg-text-cmd.mjs && esbuild src/commands/tool.ts --bundle --platform=node --format=esm --outfile=.test-build/tool-cmd.mjs && esbuild src/commands/transcript.ts --bundle --platform=node --format=esm --outfile=.test-build/transcript-cmd.mjs && esbuild src/commands/project.ts --bundle --platform=node --format=esm --outfile=.test-build/project-cmd.mjs && esbuild src/commands/audio.ts --bundle --platform=node --format=esm --outfile=.test-build/audio-cmd.mjs && esbuild src/commands/subtitle.ts --bundle --platform=node --format=esm --outfile=.test-build/subtitle-cmd.mjs && esbuild src/commands/ai-drama.ts --bundle --platform=node --format=esm --outfile=.test-build/ai-drama-cmd.mjs && esbuild src/commands/feedback.ts --bundle --platform=node --format=esm --outfile=.test-build/feedback-cmd.mjs && esbuild src/commands/music-visualizer.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/music-visualizer-cmd.mjs && esbuild src/commands/long2short.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/long2short-cmd.mjs && esbuild src/commands/oralcut.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/oralcut-cmd.mjs && esbuild src/commands/oralcut-result.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/oralcut-result-cmd.mjs && esbuild src/commands/skills.ts --bundle --platform=node --format=esm --outfile=.test-build/skills-cmd.mjs && esbuild src/commands/qc.ts --bundle --platform=node --format=esm --external:commander --external:bun:sqlite --outfile=.test-build/qc-cmd.mjs && esbuild src/lib/convert/ir_to_jsx.ts src/lib/convert/ir_to_am.ts src/lib/convert/ir_to_nv.ts src/lib/convert/am_parse.ts src/lib/convert/nv_parse.ts src/lib/convert/parse.ts src/lib/convert/download.ts src/lib/convert/bake_ops.ts --bundle --platform=node --format=esm --outdir=.test-build/convert --out-extension:.js=.mjs && esbuild src/lib/mad/selector.ts src/lib/mad/techniques.ts src/lib/mad/beat.ts src/lib/mad/scan.ts src/lib/mad/data.ts src/lib/mad/pool.ts src/lib/mad/cloud-beat.ts src/lib/mad/mad.ts --bundle --platform=node --format=esm --outdir=.test-build/mad --out-extension:.js=.mjs && node --import ./test/helpers/test-home.mjs --test \"test/*.test.mjs\"",
|
|
53
|
+
"test": "node scripts/workspace-pollution-gate.mjs --snapshot && esbuild src/lib/compliance-notice.ts src/lib/config.ts src/lib/crash-report.ts src/lib/log.ts src/lib/read-json.ts src/lib/sidecar-write.ts src/lib/user-config.ts src/lib/enum-catalog.ts src/lib/first-run-tutorial.ts src/lib/desktop-client-hint.ts src/lib/command-path.ts src/lib/user-path.ts src/lib/runtime-channel.ts src/lib/self-install.ts src/lib/chunk-upload.ts src/lib/upload-cache.ts src/lib/upload-submit.ts src/lib/render.ts src/lib/cloud.ts src/lib/materialize.ts src/lib/jianying.ts src/lib/clip-brief.ts src/lib/media.ts src/lib/projection.ts src/lib/reproject.ts src/lib/splitdoc.ts src/lib/gtrk-writeback.ts src/lib/gtrk-patch.ts src/lib/frame-domain.ts src/lib/clock-adapter.ts src/lib/gtrk-invariants.ts src/lib/column-config.ts src/lib/third-party-catalog.ts src/lib/mg-adopt.ts src/lib/mg-registry.ts src/lib/matrix.ts src/lib/matrix-material.ts src/lib/matrix-fetch.ts src/lib/matrix-lay.ts src/lib/arrange-metering.ts src/lib/arrange-wire.ts src/lib/arrange-apply.ts src/lib/arrange-client.ts src/lib/arrange-gate.ts src/lib/arrange-decision-pin.ts src/lib/arrange-qc.ts src/lib/arrange-qc-bind.ts src/lib/rate-limit-wait.ts src/lib/embed-client.ts src/lib/describe.ts src/lib/highlight-rubric.ts src/lib/local-index.ts src/lib/index-decode.ts src/lib/local-search.ts src/lib/qc.ts src/lib/alignment-qc.ts src/lib/bgm-history.ts src/lib/image-move.ts src/lib/cloud-render-guard.ts src/lib/outdir-guard.ts src/lib/landing-wait.ts src/lib/material-integrity.ts src/lib/solid-png.ts src/lib/mask-raster.ts src/lib/mg-lint.ts src/lib/mg-visual-job.ts src/lib/mg-track-identity.ts src/lib/particle-identity.ts src/lib/text-ir/compile.ts src/lib/text-ir/validate.ts src/lib/text-ir/compile-local.ts src/lib/text-templates.ts src/lib/text-ir-client.ts src/lib/mg-lay.ts src/lib/mg-render.ts src/lib/particle-qtrle.ts src/lib/tool-descriptors.ts src/lib/tool-runner.ts src/lib/tool-pricing.ts src/lib/transcript.ts src/lib/runtime-assets.ts src/lib/subtitle-lay.ts src/lib/caption-align.ts src/lib/subtitle-line-split-client.ts src/lib/audio-align.ts src/lib/audio-tighten.ts src/lib/ai-drama-lay.ts src/lib/desk-locate.ts src/lib/pip-lay.ts --bundle --platform=node --format=esm --external:bun:sqlite --outdir=.test-build --out-extension:.js=.mjs && esbuild src/lib/text-ir/compile.ts --bundle --platform=node --format=esm --outfile=.test-build/text-ir-compile.mjs && esbuild src/commands/split.ts --bundle --platform=node --format=esm --outdir=.test-build --out-extension:.js=.mjs && esbuild src/commands/patch.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/patch-cmd.mjs && esbuild src/commands/matrix.ts --bundle --platform=node --format=esm --external:bun:sqlite --outfile=.test-build/matrix-cmd.mjs && esbuild src/commands/mg.ts --bundle --platform=node --format=esm --outfile=.test-build/mg-cmd.mjs && esbuild src/commands/mg-text.ts --bundle --platform=node --format=esm --outfile=.test-build/mg-text-cmd.mjs && esbuild src/commands/tool.ts --bundle --platform=node --format=esm --outfile=.test-build/tool-cmd.mjs && esbuild src/commands/transcript.ts --bundle --platform=node --format=esm --outfile=.test-build/transcript-cmd.mjs && esbuild src/commands/project.ts --bundle --platform=node --format=esm --outfile=.test-build/project-cmd.mjs && esbuild src/commands/audio.ts --bundle --platform=node --format=esm --outfile=.test-build/audio-cmd.mjs && esbuild src/commands/subtitle.ts --bundle --platform=node --format=esm --outfile=.test-build/subtitle-cmd.mjs && esbuild src/commands/ai-drama.ts --bundle --platform=node --format=esm --outfile=.test-build/ai-drama-cmd.mjs && esbuild src/commands/feedback.ts --bundle --platform=node --format=esm --outfile=.test-build/feedback-cmd.mjs && esbuild src/commands/music-visualizer.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/music-visualizer-cmd.mjs && esbuild src/commands/long2short.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/long2short-cmd.mjs && esbuild src/commands/oralcut.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/oralcut-cmd.mjs && esbuild src/commands/oralcut-result.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/oralcut-result-cmd.mjs && esbuild src/commands/skills.ts --bundle --platform=node --format=esm --outfile=.test-build/skills-cmd.mjs && esbuild src/commands/qc.ts --bundle --platform=node --format=esm --external:commander --external:bun:sqlite --outfile=.test-build/qc-cmd.mjs && esbuild src/lib/convert/ir_to_jsx.ts src/lib/convert/ir_to_am.ts src/lib/convert/ir_to_nv.ts src/lib/convert/am_parse.ts src/lib/convert/nv_parse.ts src/lib/convert/parse.ts src/lib/convert/download.ts src/lib/convert/bake_ops.ts --bundle --platform=node --format=esm --outdir=.test-build/convert --out-extension:.js=.mjs && esbuild src/lib/mad/selector.ts src/lib/mad/techniques.ts src/lib/mad/beat.ts src/lib/mad/scan.ts src/lib/mad/data.ts src/lib/mad/pool.ts src/lib/mad/cloud-beat.ts src/lib/mad/mad.ts --bundle --platform=node --format=esm --outdir=.test-build/mad --out-extension:.js=.mjs && node --import ./test/helpers/test-home.mjs --test \"test/*.test.mjs\" && node scripts/workspace-pollution-gate.mjs --verify",
|
|
54
54
|
"test:linux": "node scripts/test-linux.mjs",
|
|
55
55
|
"openspec:gate": "node openspec/gate.mjs",
|
|
56
56
|
"mg-registry:snapshot": "node scripts/mg-registry-snapshot.mjs",
|
|
@@ -56,6 +56,10 @@ description: 通用解说视频创作图纸(解说链正本)——把「一
|
|
|
56
56
|
> ⇒ 粤语 **SHOULD** 如实填 `zh-HK`(元数据诚实 + 备将来链路切换),但 **MUST NOT 以「粤语语种传错」
|
|
57
57
|
> 为由重跑转写**:`la` 进 ASR 缓存键(`asr_result_cache.py:71-75`),换码必然 cache miss,
|
|
58
58
|
> 白扣一次时长换回同一份结果。
|
|
59
|
+
> ⟲ **2026-09-19 订正**:上段「写死 `word_level: true`」已过时。现口径按产物消费面分流
|
|
60
|
+
> (cli `adjust-transcript-json-word-level`):**无 `--json`** ⇒ 句级、走自部署引擎 + 服务端纠错(小工具用法);
|
|
61
|
+
> **`--json`**(本图纸的用法)⇒ 字级,transcript.json 带 `words[]`,字幕拆行后时间按语音贴。
|
|
62
|
+
> 粤语在 `--json` 路照旧落厂商字级腿;无 `--json` 路的粤语代价见 `switch-transcript-to-selfhosted-asr`。
|
|
59
63
|
|
|
60
64
|
## 三、时序铺排三档(本图纸的技术正本)
|
|
61
65
|
|
|
@@ -32,22 +32,49 @@ description: 将用户本地视频或音频(自备配音)转成一个飞书
|
|
|
32
32
|
## 工作流
|
|
33
33
|
|
|
34
34
|
1. 确认用户给的是本地视频路径;需要时再接受输出文件路径或识别语言。
|
|
35
|
-
|
|
35
|
+
|
|
36
|
+
2. **先判用途,再决定带不带 `--json`。这一步 MUST NOT 跳过,也 MUST NOT 无脑恒带。**
|
|
37
|
+
|
|
38
|
+
`--json` 不是「输出格式」开关,**它决定服务端用哪个引擎**(2026-09-19 起,cli change `adjust-transcript-json-word-level`):
|
|
39
|
+
|
|
40
|
+
| 用途 | 命令 | 落腿 |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| **只要一份能读的文字稿**(默认,含「转文字/提取文稿/出妙记/整理成文档」) | 不带 `--json` | 自部署引擎 + 服务端纠错,句级时码 |
|
|
43
|
+
| **产物要喂工程**(`project init` 兜底路 / `split` 拆分 / `subtitle` 字幕按语音贴时间) | 带 `--json` | 厂商字级腿,`utterances[].words[]` 承载字级 |
|
|
36
44
|
|
|
37
45
|
```bash
|
|
38
|
-
|
|
39
|
-
|
|
46
|
+
# 默认:只要文字稿
|
|
47
|
+
gtrk transcript "D:/素材/采访视频.mp4" --out "D:/素材/采访视频-transcript.md"
|
|
40
48
|
|
|
41
|
-
|
|
49
|
+
# 要喂工程时才加 --json
|
|
50
|
+
gtrk transcript "D:/配音/旁白.mp3" --json
|
|
51
|
+
```
|
|
42
52
|
|
|
43
|
-
|
|
53
|
+
可选参数:`--out <file>`、`--lang zh-CN`、`--ffmpeg-path <dir>`、`--reupload`。
|
|
54
|
+
|
|
55
|
+
> 🔴 **恒带 `--json` 会把「只想要文字稿」的请求也送进厂商付费腿**,且用户拿不到任何额外好处
|
|
56
|
+
> —— Markdown 只渲染句子,`words[]` 一个字都不被读。2026-09-19 一次 254 条的批量转写因此
|
|
57
|
+
> 有 122 条走错了腿,实测发现。**拿不准就不带**:真需要字级时,消费方(`split` / `subtitle`)
|
|
58
|
+
> 会明确报错要 `words[]`,那时补跑一次即可;反过来多付的钱收不回来。
|
|
59
|
+
> 用户明确说「要建工程 / 要拆分 / 要字幕」才算「喂工程」;只说「转个文字稿」不算。
|
|
60
|
+
|
|
61
|
+
3. 取产物路径,分两种形态:
|
|
62
|
+
- **带 `--json`**:解析 stdout 的唯一 JSON。仅当 `ok:true` 时继续;保存 `taskId`、`output`、
|
|
63
|
+
`transcriptJson`(句级时码稿路径,建工程时交给 `gtrk project init --transcript`),并检查 `summaryPending:true`。
|
|
64
|
+
人读进度在 stderr,不要把日志当成结果 JSON。
|
|
65
|
+
- **不带 `--json`**:stdout 末尾是人读行 `带时码文字稿已生成:<路径>`,**没有结果 JSON**。
|
|
66
|
+
⇒ 优先显式传 `--out`,这样路径由你指定、无需从日志里抠;缺省路径是 `<源文件同目录>/<源文件名>-transcript.md`。
|
|
67
|
+
判成功用**退出码 + 产物文件存在且非空**,MUST NOT 只看日志里有没有那行字。
|
|
68
|
+
此形态下 `summaryPending` 恒为真(Markdown 里的 `<!-- gtrk:agent-summary-pending -->` 就是判据),
|
|
69
|
+
且**不产 `transcript.json`**。
|
|
44
70
|
4. 完整读取 `output` 指向的 Markdown,必须覆盖完整转写内容,不能只看开头几段。
|
|
45
71
|
5. 若 `summaryPending:true`,只编辑 `## 总结` 与 `## 文字记录` 之间的内容:删除 `<!-- gtrk:agent-summary-pending -->` 及提示语,写入 3–7 条忠于原文的语义要点。不得改动 `## 文字记录` 和 `## 纯文本`,不得创建第二个文件。
|
|
46
72
|
6. 写回后验证:
|
|
47
73
|
- `## 总结`、`## 文字记录`、`## 纯文本` 各出现一次且顺序正确;
|
|
48
74
|
- `gtrk:agent-summary-pending` 已消失;
|
|
49
75
|
- 时间戳文字记录和纯文本仍完整;
|
|
50
|
-
-
|
|
76
|
+
- 返回用户的路径仍是第 3 步拿到的**同一个**产物路径(带 `--json` 时是结果 JSON 的 `output`,
|
|
77
|
+
不带时是你传的 `--out` 或那条缺省路径)——MUST NOT 换成副本或新建文件。
|
|
51
78
|
|
|
52
79
|
## 总结标准
|
|
53
80
|
|