@lingjingai/scriptctl 0.71.0 → 0.72.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lingjingai/scriptctl",
3
- "version": "0.71.0",
3
+ "version": "0.72.0",
4
4
  "description": "剧本阶段统一 CLI:素材转 Script v4,并兼容 Script v3 的本地写作、精修、校验和发布。",
5
5
  "type": "module",
6
6
  "bin": {
@@ -22,6 +22,20 @@
22
22
  "engines": {
23
23
  "node": ">=22.22.0"
24
24
  },
25
+ "scripts": {
26
+ "build": "pnpm run clean && pnpm --filter @lingjingai/screenplay build && pnpm --filter @lingjingai/review-agent build && tsc && node scripts/bundle.mjs",
27
+ "clean": "rm -rf dist packages/screenplay/dist packages/review-agent/dist",
28
+ "postinstall": "node scripts/install-skill.mjs",
29
+ "install-skill": "node scripts/install-skill.mjs",
30
+ "prepublishOnly": "pnpm run build",
31
+ "pretest": "pnpm run build",
32
+ "test": "vitest run",
33
+ "pretest:coverage": "pnpm run build",
34
+ "test:coverage": "c8 --reporter=text --reporter=html --reporter=lcov --report-dir=coverage vitest run",
35
+ "test:watch": "vitest",
36
+ "typecheck": "tsc --noEmit",
37
+ "surface:snapshot": "node scripts/scriptctl-surface-snapshot.mjs"
38
+ },
25
39
  "dependencies": {
26
40
  "@anthropic-ai/sdk": "^0.111.0",
27
41
  "@google/genai": "^2.11.0",
@@ -39,8 +53,8 @@
39
53
  "zod": "^4.5.4"
40
54
  },
41
55
  "devDependencies": {
42
- "@lingjingai/review-agent": "0.1.0",
43
- "@lingjingai/screenplay": "0.1.0",
56
+ "@lingjingai/review-agent": "workspace:*",
57
+ "@lingjingai/screenplay": "workspace:*",
44
58
  "@types/jsdom": "^30.0.0",
45
59
  "@types/node": "^20.14.0",
46
60
  "@types/proper-lockfile": "^4.1.4",
@@ -68,18 +82,5 @@
68
82
  "@ai-sdk/openai-compatible": "^3.0.48",
69
83
  "@ai-sdk/provider": "^4.0.4",
70
84
  "@mastra/core": "^1.64.0"
71
- },
72
- "scripts": {
73
- "build": "pnpm run clean && pnpm --filter @lingjingai/screenplay build && pnpm --filter @lingjingai/review-agent build && tsc && node scripts/bundle.mjs",
74
- "clean": "rm -rf dist packages/screenplay/dist packages/review-agent/dist",
75
- "postinstall": "node scripts/install-skill.mjs",
76
- "install-skill": "node scripts/install-skill.mjs",
77
- "pretest": "pnpm run build",
78
- "test": "vitest run",
79
- "pretest:coverage": "pnpm run build",
80
- "test:coverage": "c8 --reporter=text --reporter=html --reporter=lcov --report-dir=coverage vitest run",
81
- "test:watch": "vitest",
82
- "typecheck": "tsc --noEmit",
83
- "surface:snapshot": "node scripts/scriptctl-surface-snapshot.mjs"
84
85
  }
85
- }
86
+ }
@@ -227,7 +227,7 @@ scriptctl checkout / status / publish # 远端工作副本
227
227
  GrsAI 使用 `GRSAI_API_KEY` 和 base64 视频,每个型号最多尝试 3 次;未配置密钥或主渠道已为该 GrsAI 地址时跳过此段。
228
228
  主渠道视频上传失败时,也从 GrsAI 开始使用本地视频继续请求。
229
229
  主渠道 Gemini 按 provider 的 `maxAttempts` 重试暂时性错误,豆包最多尝试 3 次;明确拒绝时换模型,用户取消时停止。
230
- 豆包 Seed 2.1 Turbo 使用 BytePlus Ark,读取 `DOUBAO_TURBO_API_KEY`;`DOUBAO_TURBO_MODEL` 可指定端点,默认 `ep-20261028172514-tlxzc`。
230
+ 豆包后备路由先使用火山 Seed 2.1 Lite(`https://ark.cn-beijing.volces.com/api/v3`),读取 `ARK_API_KEY`;`DOUBAO_LITE_MODEL` 可指定端点,默认 `ep-20261029164743-gt8dh`。Lite 失败后使用 BytePlus Seed 2.1 Turbo,读取 `DOUBAO_TURBO_API_KEY`;`DOUBAO_TURBO_MODEL` 可指定端点,默认 `ep-20261028172514-tlxzc`。缺少对应密钥时跳过该路。
231
231
  已完成集和跨集 context 保留,同 source、同 workspace 重跑会从失败集续接。
232
232
 
233
233
  有原视频的 `review --review-strategy batch` 启用可选联合审核:豆包 Flash ASR → Gemini 对比 → Mastra 联合核对校时与内容 → 落盘。`--concurrency` 控制整集流程并发,默认 5;需要 `SD_AUDIO_APIKEY`、ffmpeg 和按集对应的视频。Agent 一次收到本集完整正文、相关人物状态卡、相邻集梗概与尚未写入的 ASR 建议,用 `read_many` 集中补读,`apply_changes` 一起修正关联字段并返回最终回读和校验,`record_findings` 记录实质结论。已核实的词级时间保留原精度;出现原音与整集 ASR 的具体冲突时,`asr_window` 对至多 15 秒的声音重识别并返回本集绝对句/词时间,共用媒体核验预算。画面约数用于判断内容和先后,证据矛盾保留原文并记录 unresolved。单集失败保留已执行修改,其他集继续。默认 `legacy` 使用先写入 ASR 时间、再逐项审核的流程。批量方式的成本随上下文、缓存与取证次数变化;证据冲突和重要分段边界需人工复核后验收。
@@ -240,9 +240,9 @@ ASR 返回有效语句后,程序将整集对白与心声按顺序拼接,与
240
240
 
241
241
  `.review/asr/episode-N/` 保存成功 ASR 缓存及每次对比的正文、原始响应、前后时间与缺漏报告。源视频经 ffprobe 确认无音轨时,发出 `asr-skipped`(`reason=source_no_audio`),保留台词与时间并继续画面审核;分集结果保留“ASR 校时未执行”的未解决项,说明无法核验实际发声时间、漏词或无字幕画外音。探测、解码及服务错误仍作为失败集处理。`asr-compared` 仅表示对比完成,带 `episode_number` 的 `asr-applied` 表示本集校时已落盘,不等于 Agent 审核完成。`--episodes` 只重跑指定集的 ASR 和审核,`--converge-only` 只做全剧收敛。纯剧本和原文对照审核不执行 ASR;`--check` 不发模型请求。
242
242
 
243
- 视频和纯剧本审核使用 `review-agent`,文本和漫画使用 `review-text`、`review-comic`;主 Agent 每次请求按 MSUICODE Vertex → GCP → T3 → 兔子 → 豆包 Seed 2.1 Turbo 的顺序调用,Gemini 渠道均为 `gemini-3.8-flash`。MSUICODE 地址为 `http://15.204.107.123:3000`,分别读取 `MSUICODE_VERTEX_API_KEY`、`MSUICODE_GCP_API_KEY`、`MSUICODE_T3_API_KEY`;兔子读取 `TUZI_API_KEY`,豆包读取 `DOUBAO_TURBO_API_KEY`。主渠道密钥必需,额外渠道仅在配置对应密钥时参与。普通服务错误按顺序切换;Gemini 明确内容拦截时,当前这一步跳过剩余 Gemini 渠道交给豆包,下一步重新从首选渠道开始。各模型沿用 provider 的 `maxAttempts`,内置最多三次。切换保留成功的工具操作,用量记录实际渠道和模型,Gemini 思考签名只在生成它的渠道内复用。逐集与全剧审核都要求成功调用 `validate` 后才结束。自定义 profile 使用声明的 `fallbacks` 顺序。`--no-fallback` 或 `SCRIPTCTL_REVIEW_SINGLE_MODEL=1` 仅使用选定模型。
243
+ 视频和纯剧本审核使用 `review-agent`,文本和漫画使用 `review-text`、`review-comic`;主 Agent 每次请求按 MSUICODE Vertex → GCP → T3 → 兔子 → 豆包 Seed 2.1 Lite → Turbo 的顺序调用,Gemini 渠道均为 `gemini-3.8-flash`。MSUICODE 地址为 `http://15.204.107.123:3000`,分别读取 `MSUICODE_VERTEX_API_KEY`、`MSUICODE_GCP_API_KEY`、`MSUICODE_T3_API_KEY`;兔子读取 `TUZI_API_KEY`,Lite 读取 `ARK_API_KEY`,Turbo 读取 `DOUBAO_TURBO_API_KEY`。主渠道密钥必需,额外渠道仅在配置对应密钥时参与。普通服务错误按顺序切换;Gemini 明确内容拦截时,当前这一步跳过剩余 Gemini 渠道交给豆包,下一步重新从首选渠道开始。各模型沿用 provider 的 `maxAttempts`,内置最多三次。切换保留成功的工具操作,用量记录实际渠道和模型,Gemini 思考签名只在生成它的渠道内复用。逐集与全剧审核都要求成功调用 `validate` 后才结束。自定义 profile 使用声明的 `fallbacks` 顺序。`--no-fallback` 或 `SCRIPTCTL_REVIEW_SINGLE_MODEL=1` 仅使用选定模型。
244
244
 
245
- 独立的 ASR JSON 比对和原片视频核验使用 `review-media`:NNYYAI Gemini 3.8 → 3.7 → 3.6 Flash → 豆包,凭据为 `NNYYAI_API_KEY`、`DOUBAO_TURBO_API_KEY`,`DOUBAO_TURBO_MODEL` 可指定豆包端点。显式 `--model` 或自定义配置仍决定媒体主渠道。豆包 Flash ASR 继续读取 `SD_AUDIO_APIKEY`。
245
+ 独立的 ASR JSON 比对和原片视频核验使用 `review-media`:NNYYAI Gemini 3.8 → 3.7 → 3.6 Flash → 豆包 Seed 2.1 Lite → Turbo,凭据分别为 `NNYYAI_API_KEY`、`ARK_API_KEY`、`DOUBAO_TURBO_API_KEY`;`DOUBAO_LITE_MODEL`、`DOUBAO_TURBO_MODEL` 可覆盖对应豆包端点。显式 `--model` 或自定义配置仍决定媒体主渠道。豆包 Flash ASR 继续读取 `SD_AUDIO_APIKEY`。
246
246
 
247
247
  全剧收敛审核必须成功执行 `validate` 才能正常结束;未完成时在同一会话内继续,保留已有工具操作,并共用原步数和总时间预算。整集默认 15 分钟总时限,耗尽后结束本轮审核。
248
248
 
@@ -29,7 +29,7 @@ scriptctl ingest -s 漫画目录/ -w workspace
29
29
 
30
30
  支持单话 PDF、多话合集及 PDF 目录。先分段阅读原稿并识别实际章节,再按话连续转录;内部 episode 按阅读顺序编号,来源文件和原稿页范围保留在 manifest。章节识别结果保存在 workspace/sources,续跑复用。
31
31
  逐话维护人物身份、持续造型和剧情上下文。`--step` 只接受下一话,同源同工作区重跑从失败话续接,支持尾部追加。
32
- 模型通过 `ingest.comic-serial` 路由配置,内置为 NNYYAI `gemini-3.8-flash`(`NNYYAI_API_KEY`),通过 base64 直接提交 PDF 并使用 `responseSchema`。失败后在同一 NNYYAI 渠道按 3.8 / 3.7 / 3.6 Flash 补齐未尝试模型,最后使用豆包 PDF 理解(`DOUBAO_TURBO_API_KEY`、可选 `DOUBAO_TURBO_MODEL`)。自定义 PDF provider 可设置 `documentUploadMode`(`file-api` / `base64`)和 `documentResponseSchemaField`(`responseJsonSchema` / `responseSchema`)。模型切换保留同一 PDF 与 Schema,用户取消立即停止,实际模型与用量进入账本。合集识别按页数和体积分段提交。模型输入副本 `ep/*.input.pdf` 带坐标网格,帮助定位长条页内区域;原 PDF 和审阅图保持原样。
32
+ 模型通过 `ingest.comic-serial` 路由配置,内置为 NNYYAI `gemini-3.8-flash`(`NNYYAI_API_KEY`),通过 base64 直接提交 PDF 并使用 `responseSchema`。失败后在同一 NNYYAI 渠道按 3.8 / 3.7 / 3.6 Flash 补齐未尝试模型,随后依次使用豆包 Lite、Turbo PDF 理解(密钥分别为 `ARK_API_KEY`、`DOUBAO_TURBO_API_KEY`,可选端点覆盖分别为 `DOUBAO_LITE_MODEL`、`DOUBAO_TURBO_MODEL`);缺少对应密钥时跳过该路。自定义 PDF provider 可设置 `documentUploadMode`(`file-api` / `base64`)和 `documentResponseSchemaField`(`responseJsonSchema` / `responseSchema`)。模型切换保留同一 PDF 与 Schema,用户取消立即停止,实际模型与用量进入账本。合集识别按页数和体积分段提交。模型输入副本 `ep/*.input.pdf` 带坐标网格,帮助定位长条页内区域;原 PDF 和审阅图保持原样。
33
33
  资产引用缺失时,结合原稿和已生成正文补齐登记,保留转录正文;同源续跑可继续处理已保存的响应。
34
34
  每条 action 用 `extend.scriptctl.source` 保存 `document_id`、`pages` 和 `regions`。多话合集的页码以对应章节 PDF 为准,manifest 的 start_page/end_page 对应原文件页范围。每个 region 包含物理页码 `page`、区域类型 `kind`(`panel` / `bubble` / `text`)及 `box`(`top/left/bottom/right`,相对完整物理页归一化为 0–1000)。分离的画格和跨页气泡可关联多个区域。
35
35
  对白、心声和画面文字保留原文;动作叙述使用简体中文。页码覆盖和 Script 校验通过后才接受本话,仍需对照原页抽查漏格、说话人及小字。
@@ -105,7 +105,7 @@ scriptctl ingest -s uploads/正片/ -w workspaces/正片 \
105
105
  - 自定义 Gemini 主渠道先使用配置的主模型,再按 `gemini-3.8-flash → gemini-3.7-flash → gemini-3.6-flash` 在同渠道尝试尚未调用的模型,保留主渠道的服务地址、凭据和模型名前缀。每个模型按 provider 的 `maxAttempts` 重试暂时性错误;明确拒绝时直接换模型,用户取消时立即停止。
106
106
  - 视频的主渠道模型耗尽后,依次尝试 GrsAI(`https://grsai.dakka.com.cn`)的 `gemini-3.8-flash → gemini-3.7-flash → gemini-3.6-flash`,再进入豆包。GrsAI 使用独立的 `GRSAI_API_KEY`、base64 视频和 `responseSchema`,每个型号最多尝试 3 次;未配置密钥或主渠道已为该 GrsAI 地址时跳过此段。视频 CLI 的地址、凭据和模型覆盖只作用于主渠道。
107
107
  - 视频在主渠道的模型间复用媒体;切到普通 NNYYAI 或 GrsAI 时复用 base64 内容,或从本地转码文件读取内容。次卡 Files API 上传失败时,从普通 NNYYAI 开始继续请求;自定义主渠道上传失败时从 GrsAI 开始。豆包重新上传同一本地视频。默认路由与显式 Gemini provider/model 覆盖均使用该链;直接选择豆包时只调用豆包。
108
- - 豆包 Seed 2.1 Turbo 使用 BytePlus Ark `https://ark.ap-southeast.bytepluses.com/api/v3` 和 `DOUBAO_TURBO_API_KEY`,最多尝试 3 次;`DOUBAO_TURBO_MODEL` 可指定端点,默认 `ep-20261028172514-tlxzc`。文本、结构化工具和 PDF 请求在主渠道 Gemini 型号耗尽后进入豆包。
108
+ - 豆包后备路由先使用火山 Seed 2.1 Lite(`https://ark.cn-beijing.volces.com/api/v3`、`ARK_API_KEY`),默认端点 `ep-20261029164743-gt8dh`,可用 `DOUBAO_LITE_MODEL` 覆盖;失败后使用 BytePlus Seed 2.1 Turbo。各路最多尝试 3 次,缺少对应密钥则跳过。Turbo 使用 `https://ark.ap-southeast.bytepluses.com/api/v3` 和 `DOUBAO_TURBO_API_KEY`;`DOUBAO_TURBO_MODEL` 可指定端点,默认 `ep-20261028172514-tlxzc`。文本、结构化工具和 PDF 请求在主渠道 Gemini 型号耗尽后进入豆包。
109
109
  - `--provider-base-url` 指向 Gemini Developer API 兼容的服务根地址;`file-api` 模式要求该服务同时兼容 Files API。
110
110
 
111
111
  常用 flag: