@gitruck/cli 1.2.13 → 1.2.14

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.
@@ -0,0 +1,72 @@
1
+ # From footage to an editable project
2
+
3
+ [Back to README](../README.en.md) · [Command reference](reference.en.md) · [简体中文](workflow.md)
4
+
5
+ ## Choose an entry point
6
+
7
+ | Input | Entry point | First deliverable |
8
+ | --- | --- | --- |
9
+ | One or more talking-head recordings, optionally with external audio | `gtrk-talking-head` Skill; `gtrk oralcut` for a rough cut only | Aligned, joined and roughly edited project plus transcript |
10
+ | An existing script | `gtrk-voiceover` Skill | Voiceover, sentence timing and an audio-driven project |
11
+ | Podcast, interview, course or livestream replay | `gtrk-long2short`; `gtrk-live-slicing` Skill for long replays | A separate project for each highlight |
12
+ | Film, gameplay, travel or restaurant footage | `gtrk-narration`, or travel/food presets | A retold script, voiceover and assembled visuals |
13
+ | Location footage with live sound to preserve | `gtrk-vlog-docu` Skill | A documentary project alternating live sound and narration |
14
+
15
+ The per-source limit for `oralcut` / `long2short` is **2 hours**. Longer sources are rejected before extraction or upload; split long replays first. Tutorials: [talking heads](https://hocassian.feishu.cn/wiki/Y6Odw4Kz5iPKMxkOOPJc6FyOnpe) · [voiceover](https://hocassian.feishu.cn/wiki/CdpewYDOmialPLkjOmacI97Wnfd) · [long to short](https://hocassian.feishu.cn/wiki/Gls1wTebVi1tpDkeaK8cINqbnMb) · [narrated videos](https://hocassian.feishu.cn/wiki/CmtRwmqzYi5dRtkWKgDc7ApWnre).
16
+
17
+ ## Follow the production order
18
+
19
+ 1. **Set the content and production plan.** Check footage, script, aspect ratio, voice and visual direction. Listen to and adjust a voiceover before building its timeline.
20
+ 2. **Create the project and transcript.** Rough-cut, select highlights or build from voiceover. Review pacing and content before packaging.
21
+ 3. **Arrange visuals.** Dispatch segments and search platform or local footage. B-roll and AI reenactment clips are both base visuals and can be prepared separately.
22
+ 4. **Settle the composition.** Choose candidate tracks in the client and inspect faces, subjects and safe areas. You may explicitly defer missing AI clips, then revisit affected compositions when they return.
23
+ 5. **Add motion graphics.** Place titles, diagrams and transparent overlays around the settled footage without obscuring its subjects.
24
+ 6. **Music, captions and delivery.** Add captions after the timeline settles, then preview, check and export video or supported editing projects.
25
+
26
+ Optional stages can be skipped. Quick mode groups key decisions; ask for step-by-step progress when you want to review each stage. Checkpoints and cost confirmations follow the relevant Skill.
27
+
28
+ ## Where to chat and where to edit
29
+
30
+ Conversations currently happen in your own AI agent; the desktop client has no built-in AI chat. The agent creates or updates `.gtrk` through the CLI. The Windows client opens that same project for preview, selection and refinement.
31
+
32
+ Give further requests to your agent or make manual changes in the client. Scripts can also render an existing project with `gtrk render`; opening the desktop client is not a prerequisite for every render.
33
+
34
+ ## Deliverables and export boundaries
35
+
36
+ | Deliverable | How to use it | Boundary |
37
+ | --- | --- | --- |
38
+ | `gtrk/project.gtrk` | Open in the desktop client | Keeps the multitrack structure and supported motion graphics information |
39
+ | Jianying drafts from talking-head / long-to-short cuts | Configure the draft folder during setup; open from Jianying's project list | Requires both fixed filenames, `draft_content.json` and `draft_meta_info.json` |
40
+ | `xml/premiere.xml` from those cuts | Import into Premiere | Describes the corresponding rough cut; it does not promise lossless transfer of every later client effect |
41
+ | Jianying drafts exported by the client | Continue refining a packaged project | Preserves supported tracks and captions; graphics may be baked into video and are no longer editable as the original HTML |
42
+ | MP4 from `gtrk render` | Playback, review or publishing | Composites visible video overlays and graphics; hidden tracks stay out. This command does not export Jianying drafts |
43
+
44
+ Client-specific elements, complex effects and third-party formats are not universally interchangeable. Check the rendered video for final appearance, and keep `.gtrk` plus its media for further editing.
45
+
46
+ ## Uploads and costs
47
+
48
+ - **Talking-head and long-to-short project workflows:** originals stay local. Extracted audio is uploaded by default; visual assistance or smart split-screen uses a compressed proxy.
49
+ - **Local B-roll:** original media stays local. Understanding may send sampled frames; cloud arrangement uses structured information and is billed under its own rules.
50
+ - **Individual cloud tools:** upload requirements vary. Cloud video processing may require the video itself.
51
+ - **CLI rendering:** video composition is local. Uncached graphics require cloud rendering with a cost prompt. `--no-particles` skips those graphics while still compositing other visible video overlays.
52
+ - **AI generation:** external model services, separate production desks and your agent follow their own pricing.
53
+
54
+ Prices and free allowances may change. Check the [billing guide](https://hocassian.feishu.cn/wiki/Iq9NwC3briQ2TJkSrzPcm5Jensd) and runtime pricing.
55
+
56
+ ## Recovery and troubleshooting
57
+
58
+ | Situation | Action |
59
+ | --- | --- |
60
+ | Skills do not appear | Open a new agent session; use `gtrk skills install` if needed. Not every agent uses a `/` menu |
61
+ | Configuration, connection or runtime problem | Run `gtrk doctor`; check `gtrk deps status` before explicitly installing missing FFmpeg assets |
62
+ | Draft is missing in Jianying | Check the draft root and both fixed filenames listed above |
63
+ | Talking-head task completed, but results are missing | Use the recovery command below, or read `result.json` in the output folder before rerunning a cloud job |
64
+ | A long task timed out | Timeout does not mean cancellation. Keep `task.json` / `result.json` and query or recover by task ID |
65
+ | Upgrade needed | `gtrk upgrade` upgrades the CLI and refreshes Skills; `npm i -g` alone does not refresh agent Skills |
66
+ | An older project has compatibility problems | Check the [CHANGELOG](../CHANGELOG.md) and follow the relevant version instructions |
67
+
68
+ ```bash
69
+ gtrk oralcut-result <taskId> --out <output-directory>
70
+ ```
71
+
72
+ See the [command reference](reference.en.md) for parameters, JSON receipts, billing confirmation and recovery limits.
@@ -0,0 +1,72 @@
1
+ # 从素材到可编辑工程
2
+
3
+ [返回首页](../README.md) · [命令参考](reference.md) · [English](workflow.en.md)
4
+
5
+ ## 先选入口
6
+
7
+ | 输入 | 入口 | 首轮交付 |
8
+ | --- | --- | --- |
9
+ | 真人口播,一条或多条,可带外录音频 | `gtrk-talking-head` Skill;只粗剪用 `gtrk oralcut` | 对轨、拼段、粗剪后的工程与文稿 |
10
+ | 已有文字稿 | `gtrk-voiceover` Skill | 配音、句级时码与音频驱动工程 |
11
+ | 播客、访谈、课程或直播回放 | `gtrk-long2short`;超长直播用 `gtrk-live-slicing` Skill | 每个高光独立的剪辑工程 |
12
+ | 影视、游戏、旅拍或探店素材 | `gtrk-narration`,或旅拍、美食预设 | 提炼后的解说稿、配音与配画面工程 |
13
+ | 保留现场同期声的素材集 | `gtrk-vlog-docu` Skill | 同期声与旁白交替的纪实工程 |
14
+
15
+ `oralcut` / `long2short` 的单次源片上限为 **2 小时**,超过会在抽取与上传前拒绝;超长回放先分段。完整教程:[口播](https://hocassian.feishu.cn/wiki/Y6Odw4Kz5iPKMxkOOPJc6FyOnpe) · [配音](https://hocassian.feishu.cn/wiki/CdpewYDOmialPLkjOmacI97Wnfd) · [长剪短](https://hocassian.feishu.cn/wiki/Gls1wTebVi1tpDkeaK8cINqbnMb) · [解说](https://hocassian.feishu.cn/wiki/CmtRwmqzYi5dRtkWKgDc7ApWnre)。
16
+
17
+ ## 按创作顺序推进
18
+
19
+ 1. **确定内容和制作方案。** 核对素材、稿件、画幅、声音和视觉方向。配音先试听调整,满意后再建时间线。
20
+ 2. **拿到工程与文稿。** 粗剪、选段或从配音建工程;先检查节奏与内容,再继续包装。
21
+ 3. **安排画面。** 分段派单,检索平台或本地素材。B-roll 与 AI 再现片段都属于底层画面,可分别准备。
22
+ 4. **确定底层构图。** 在客户端挑选候选轨,检查人脸、主体和安全区。AI 片段未回轨时,可明确先跳过,并在回轨后复查相关构图。
23
+ 5. **叠加动效。** 按最终画面安排字卡、图解和透明叠层,避免遮住主体。
24
+ 6. **配乐、字幕与交付。** 时间线确定后上字幕,预览、质检、导出成片或支持的剪辑工程。
25
+
26
+ 可选环节可以省略。快速成片会集中确认关键选择;需要逐步看结果时,对 Agent 说“逐步来”。具体检查点与费用确认以对应 Skill 为准。
27
+
28
+ ## 在哪里对话,在哪里编辑
29
+
30
+ 当前在自己的 AI Agent 里对话,客户端没有内置 AI 对话框。Agent 通过 CLI 创建或修改 `.gtrk`;Windows 客户端打开同一工程,供你预览、挑选和精修。
31
+
32
+ 想调整某一步,可以把具体要求交回 Agent;想自己改,可以在客户端操作。自动化或脚本也可用 `gtrk render` 渲染已有工程,无需把“打开客户端”当作每次渲染的前置条件。
33
+
34
+ ## 交付物与导出边界
35
+
36
+ | 交付物 | 怎么用 | 边界 |
37
+ | --- | --- | --- |
38
+ | `gtrk/project.gtrk` | 客户端打开 | 保存多轨结构与支持的动态图等信息 |
39
+ | 口播/长剪短的剪映草稿 | 安装时配置草稿目录,完成后在剪映项目列表打开 | 草稿目录内需要固定名 `draft_content.json` 和 `draft_meta_info.json` 成对存在 |
40
+ | 口播/长剪短的 `xml/premiere.xml` | 在 Premiere 导入 | 是对应粗剪工程,不代表后续所有客户端效果都可无损互转 |
41
+ | 客户端导出的剪映草稿 | 完整包装后继续精修 | 按当前导出能力保留支持的轨道与字幕;动态图可能烤成视频素材,不能当作原 HTML 继续编辑 |
42
+ | `gtrk render` 输出的 MP4 | 播放、审核、发布 | 合成可见视频叠层与动态图;关闭的轨道不入片。该命令不导出剪映草稿 |
43
+
44
+ 客户端专有元素、复杂效果和第三方工程格式不能笼统视为全部兼容。需要保留最终视觉效果时,检查渲染成片;需要继续编辑时,同时保留 `.gtrk` 与素材。
45
+
46
+ ## 上传与费用
47
+
48
+ - **口播粗剪、长剪短工程流程:** 原片保留本地,默认上传抽出的音频。视觉辅助或智能分屏改传压缩代理。
49
+ - **本地 B-roll:** 原始素材保留本地;理解可能发送抽帧,云端编排使用结构化信息并按相应规则计费。
50
+ - **单点云端工具:** 上传要求取决于工具,例如云端视频处理可能需要视频本体。
51
+ - **CLI 渲染:** 视频合成在本地;未命中缓存的动态图需云端渲染,先提示费用。`--no-particles` 可跳过动态图,其他可见视频叠层仍正常合成。
52
+ - **AI 生成:** 外部模型服务、独立工作台与 Agent 的费用按各自规则结算。
53
+
54
+ 实际价格和免费额度会变化,查看[计费说明](https://hocassian.feishu.cn/wiki/Iq9NwC3briQ2TJkSrzPcm5Jensd)及运行时查询结果。
55
+
56
+ ## 常用恢复与排障
57
+
58
+ | 情况 | 处理 |
59
+ | --- | --- |
60
+ | Skills 未出现 | 新开 Agent 会话;必要时 `gtrk skills install`。不同 Agent 的 Skills 入口不一定是 `/` 菜单 |
61
+ | 配置、连接或环境有问题 | `gtrk doctor`;缺 FFmpeg 时先 `gtrk deps status`,再按提示显式安装 |
62
+ | 剪映里没有草稿 | 核对草稿根目录及两个固定文件名,详见上表 |
63
+ | 口播任务已完成,但结果丢失 | 使用下方恢复命令,或读取产物目录中的 `result.json`,不要先重跑云端 |
64
+ | 长任务等待超时 | 超时不等于任务取消;保存 `task.json` / `result.json`,按任务 ID 查询或恢复 |
65
+ | 需要升级 | `gtrk upgrade` 同时升级 CLI、刷新 Skills;仅 `npm i -g` 不会刷新 Agent 中的 Skills |
66
+ | 旧工程有兼容问题 | 先查 [CHANGELOG](../CHANGELOG.md),按对应版本说明修复 |
67
+
68
+ ```bash
69
+ gtrk oralcut-result <taskId> --out <output-directory>
70
+ ```
71
+
72
+ 详细参数、JSON 回执、计费确认和恢复限制见[命令参考](reference.md)。
package/package.json CHANGED
@@ -1,72 +1,78 @@
1
- {
2
- "name": "@gitruck/cli",
3
- "version": "1.2.13",
4
- "description": "同合云成片流水线 CLI —— agent 驱动云端任务、产物拉回本地、三方工程文件(客户端/剪映/PR)互通。",
5
- "license": "MIT",
6
- "author": "Gitruck (同合云)",
7
- "repository": {
8
- "type": "git",
9
- "url": "git+https://github.com/Gitruck/cli.git"
10
- },
11
- "homepage": "https://github.com/Gitruck/cli#readme",
12
- "bugs": {
13
- "url": "https://github.com/Gitruck/cli/issues"
14
- },
15
- "type": "module",
16
- "bin": {
17
- "gtrk": "dist/index.js"
18
- },
19
- "files": [
20
- "dist",
21
- "assets",
22
- "skills",
23
- "contracts",
24
- "AGENT.md",
25
- "README.md",
26
- "README.en.md",
27
- "LICENSE",
28
- "CHANGELOG.md"
29
- ],
30
- "engines": {
31
- "node": ">=20.6"
32
- },
33
- "publishConfig": {
34
- "access": "public",
35
- "registry": "https://registry.npmjs.org/"
36
- },
37
- "keywords": [
38
- "gitruck",
39
- "同合云",
40
- "video",
41
- "oral-cut",
42
- "口播剪辑",
43
- "cli",
44
- "jianying",
45
- "剪映",
46
- "agent"
47
- ],
48
- "scripts": {
49
- "gtrk": "bun run src/index.ts",
50
- "build": "bun build ./src/index.ts --target=node --minify --outfile dist/index.js",
51
- "typecheck": "tsc --noEmit",
52
- "prepublishOnly": "npm run typecheck && npm test && bun run build",
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/project-health.ts src/lib/contact-sheet.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-batch.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/cut-snap.ts src/lib/mg-coverage.ts src/lib/ai-drama-lay.ts src/lib/ai-drama-pack.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/commands/doctor.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/doctor-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
- "test:linux": "node scripts/test-linux.mjs",
55
- "openspec:gate": "node openspec/gate.mjs",
56
- "mg-registry:snapshot": "node scripts/mg-registry-snapshot.mjs",
57
- "text-template:snapshot": "node scripts/text-template-snapshot.mjs",
58
- "text-ir:parity": "node scripts/text-ir-parity.mjs",
59
- "text-ir:sync": "node scripts/text-ir-sync.mjs"
60
- },
61
- "devDependencies": {
62
- "@xmldom/xmldom": "^0.9.6",
63
- "bun-types": "^1.1.0",
64
- "commander": "^12.1.0",
65
- "esbuild": "^0.28.1",
66
- "typescript": "^5.6.0"
67
- },
68
- "dependencies": {
69
- "hash-wasm": "^4.12.0",
70
- "jszip": "^3.10.1"
71
- }
72
- }
1
+ {
2
+ "name": "@gitruck/cli",
3
+ "version": "1.2.14",
4
+ "description": "同合云成片流水线 CLI —— agent 驱动云端任务、产物拉回本地、三方工程文件(客户端/剪映/PR)互通。",
5
+ "license": "MIT",
6
+ "author": "Gitruck (同合云)",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/Gitruck/cli.git"
10
+ },
11
+ "homepage": "https://github.com/Gitruck/cli#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/Gitruck/cli/issues"
14
+ },
15
+ "type": "module",
16
+ "bin": {
17
+ "gtrk": "dist/index.js"
18
+ },
19
+ "files": [
20
+ "dist",
21
+ "assets",
22
+ "skills",
23
+ "contracts",
24
+ "AGENT.md",
25
+ "README.md",
26
+ "README.en.md",
27
+ "docs/reference.md",
28
+ "docs/reference.en.md",
29
+ "docs/workflow.md",
30
+ "docs/workflow.en.md",
31
+ "docs/development.md",
32
+ "docs/development.en.md",
33
+ "LICENSE",
34
+ "CHANGELOG.md"
35
+ ],
36
+ "engines": {
37
+ "node": ">=20.6"
38
+ },
39
+ "publishConfig": {
40
+ "access": "public",
41
+ "registry": "https://registry.npmjs.org/"
42
+ },
43
+ "keywords": [
44
+ "gitruck",
45
+ "同合云",
46
+ "video",
47
+ "oral-cut",
48
+ "口播剪辑",
49
+ "cli",
50
+ "jianying",
51
+ "剪映",
52
+ "agent"
53
+ ],
54
+ "scripts": {
55
+ "gtrk": "bun run src/index.ts",
56
+ "build": "bun build ./src/index.ts --target=node --minify --outfile dist/index.js",
57
+ "typecheck": "tsc --noEmit",
58
+ "prepublishOnly": "npm run typecheck && npm test && bun run build",
59
+ "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/online-broll-client.ts src/lib/online-search-journal.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/project-health.ts src/lib/contact-sheet.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-batch.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/cut-snap.ts src/lib/mg-coverage.ts src/lib/ai-drama-lay.ts src/lib/ai-drama-pack.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/commands/doctor.ts --bundle --platform=node --format=esm --external:commander --outfile=.test-build/doctor-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",
60
+ "test:linux": "node scripts/test-linux.mjs",
61
+ "openspec:gate": "node openspec/gate.mjs",
62
+ "mg-registry:snapshot": "node scripts/mg-registry-snapshot.mjs",
63
+ "text-template:snapshot": "node scripts/text-template-snapshot.mjs",
64
+ "text-ir:parity": "node scripts/text-ir-parity.mjs",
65
+ "text-ir:sync": "node scripts/text-ir-sync.mjs"
66
+ },
67
+ "devDependencies": {
68
+ "@xmldom/xmldom": "^0.9.6",
69
+ "bun-types": "^1.1.0",
70
+ "commander": "^12.1.0",
71
+ "esbuild": "^0.28.1",
72
+ "typescript": "^5.6.0"
73
+ },
74
+ "dependencies": {
75
+ "hash-wasm": "^4.12.0",
76
+ "jszip": "^3.10.1"
77
+ }
78
+ }