@lingjingai/scriptctl 0.63.20 → 0.64.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
@@ -45,6 +45,31 @@ Script v4 的新节点使用类型前缀加 6 位 Bitcoin Base58 的 NanoID。
45
45
  1-based `@` 序号定位,修改使用查询返回的正式 ID。已有 Script v3 按显式
46
46
  `version: 3` 继续走原有查询、写入、authoring 和 publish 实现,不改写旧 ID。
47
47
 
48
+ ## 剧本审核的证据类型
49
+
50
+ `scriptctl review` 按本次提供的原稿选择审核方式。没有 `-s` 时仅做剧本内部一致性检查,不因剧本来自 ingest 就声称核对过原稿。审核包含证据支持的修复,修改在逐集结果事件发出前保存。
51
+
52
+ | 输入 | 审核方式 | 默认 profile |
53
+ |---|---|---|
54
+ | 仅 `-p script.json` | 内部结构、引用、人物与状态的一致性 | `review-agent` |
55
+ | `-s` 文本 ingest 工作区或对应 txt/md/docx | 原文行窗口、遗漏、说话人、心声类型和语义忠实度 | `review-text` |
56
+ | `-s` 漫画 ingest 工作区或对应 PDF | 原页、画格、气泡与正文对照 | `review-comic` |
57
+ | `-s` 视频/分集目录或完整 `--video` 列表 | 原声、画面、ASR 与时间轴 | `review-agent` |
58
+
59
+ 纯剧本使用独立 prompt 和工具,不要求时间戳,不生成缺失剧情;遇到无法判定哪一版正确的设定矛盾时保留原文并报告未解决项。需要事实依据的警告不靠猜测补齐。
60
+
61
+ ## 原文审核
62
+
63
+ `scriptctl review -p <workspace/script.json> -s <文本 ingest 工作区>` 读取 `pass1/source.txt`,使用 manifest 的 SHA-256 核实原文快照。也可以传对应的 `.txt`、`.md` 或 `.docx`,此时剧本旁需要完整 ingest 工作区;输入按 ingest 相同规则规范化并核对摘要。默认 `review-text` 使用现有官方 Gemini 渠道,`--model` 可选择已有 profile。
64
+
65
+ 文本 Agent 使用 `source` 定位 action 的候选原文窗口、`text_range` 读取带行号的原文、`search_source` 查找完整原稿。先读本集全部原文检查遗漏,再逐条反查 action。台词保留原文语言,动作允许忠实的简体中文转述;合法翻译、拆分和合并不作为错误。
66
+
67
+ 文本来源存于 `extend.scriptctl.source`,包含 `kind: "text"`、`document_id` 和 `ranges`。`start_line` / `end_line` 是**完整规范化原文的 1-based 闭区间**,包含前言偏移。ingest 保存的是 chunk 窗口,可能对应多条 action;它是定位线索,不是逐句精确标注。审核可依据实际原文缩小或修正窗口,新增 action 同时写入来源。
68
+
69
+ 既有 v4 产物通过 `v4_identity_map.json` 和 `pass1/body_start.json` 恢复来源,按稳定 ID 对应,不按当前行序或正文相似度猜测。保留这些文件以及 `manifest.json`、`pass1/source.txt`。缺失来源或摘要不符时停止,不转为纯剧本审核。
70
+
71
+ `.review/text/episode-N.json` 与 `global.json` 保存 findings、用量和已读/未读行窗口;读取记录不代表内容正确。未读完本集原文会留下 unresolved。文本审核使用 `--episodes`、`--converge-only`、`--max-steps` 和 `--episode-timeout-ms`,不执行 ASR 或视频校时。
72
+
48
73
  ## 原视频审核的全剧 ASR 校时与补漏
49
74
 
50
75
  `scriptctl review -p <script.json> -s <视频目录>`(或按集排序的完整 `--video` 列表)逐集执行「豆包 Flash ASR → Gemini 对比 → 校时落盘 → Mastra 审核 → 落盘」。`--concurrency` 控制同时进行的整集流程,默认 **5 集并发**。需要 `ffmpeg` 和 `SD_AUDIO_APIKEY`;ASR 协议与 Redraw `subtitle_realign/asr.py` 一致,使用每集完整音轨,以本集 00:00 为原点。
@@ -61,7 +86,17 @@ Gemini 接收左侧带时间戳、行锚点的亚洲格式剧本正文,以及
61
86
 
62
87
  `asr-started` / `asr-transcribed` / `asr-compared` NDJSON 按集报告进度与证据;`asr-compared` 不代表修改已落盘,带 `episode_number` 的 `asr-applied` 表示本集校时已经保存。之后的 `episode` 报告本集完成或失败,已有修改已保存;`done.statistics.fixed` 包含自动校时条数,`usage_total` 汇总对比与审核 Gemini 用量。
63
88
 
64
- `--episodes` 只对所选集执行 ASR、校时和审核,适合失败集重试;`--converge-only` 只做全剧收敛。无视频的纯文本审核不执行 ASR;`--check` 只检查配置与 bundle,不发 ASR/Gemini 请求。服务失败不自动换模型或重提请求。
89
+ `--episodes` 只对所选集执行 ASR、校时和审核,适合失败集重试;`--converge-only` 只做全剧收敛。纯剧本和原文对照审核不执行 ASR;`--check` 返回所选 `review_kind`,只检查配置与 bundle,不发 ASR/Gemini 请求。
90
+
91
+ ## 原漫画审核
92
+
93
+ `scriptctl review -p <workspace/script.json> -s <漫画 ingest 工作区>` 对照原 PDF 逐话审核并修正。也可以把 `-s` 指向原 PDF 或 PDF 目录,此时 `manifest.json` 必须位于剧本旁。来源通过 `document_id` 和 manifest 中的 PDF SHA-256 匹配,不按文件名重新配话;文件移动或改名后可以显式传入内容相同的 PDF。`--episodes 1,3` 只要求所选话的来源可用。缺少 manifest、来源映射或原文件内容变化时停止并报错。
94
+
95
+ 漫画使用独立的 `review-comic` profile(默认 NNYYAI `gemini-3.8-flash`,`NNYYAI_API_KEY`),支持现有 Gemini 型号切换及已配置的豆包恢复路由,不进入官方 Google 渠道。自定义 LLM 配置需要定义该 profile,或用 `--model` 选择有显式服务地址的 profile。视频和纯剧本仍使用 `review-agent`。
96
+
97
+ 漫画 Agent 逐页看原稿并反向核对 action,使用 `source` 定位、`pages` 看完整原页、`region` 看清晰局部,核对遗漏、重复、文字、人物、心声类型及阅读顺序。需要 Poppler(`pdftoppm`);局部图按显示页的 CropBox/旋转归一化坐标渲染。正文修改保留来源;插入遗漏内容必须同时提供 `extend.scriptctl.source` 页码及区域。跨页内容使用同一条 action 的多个来源区域,不添加时间戳。
98
+
99
+ `.review/comic/episode-N.json` 保存逐话 findings、用量和原页加载记录,`global.json` 保存最后的全剧收敛结果。`viewed_pages` 仅表示整页图片已加载,不代表内容正确或小字已看清;未加载完全部页时报告未解决项。图片证据保存在剧本旁的 `review-pages/`。漫画不执行 ASR、校时或视频媒体预算;`--max-steps` 和 `--episode-timeout-ms` 限制审核运行。逐话结果在剧本与报告落盘后才发出,未提供 `-s` 仍是纯剧本审核。
65
100
 
66
101
  ## 退出码
67
102
 
@@ -0,0 +1,16 @@
1
+ # 0.64.0
2
+
3
+ ## Added
4
+ - `scriptctl review` supports source-grounded comic review from PDF ingest workspaces or original PDFs, with page/region evidence, source-preserving repairs, per-episode reports, and a dedicated NNYYAI `review-comic` profile.
5
+ - `scriptctl review` supports original-text comparison from text ingest workspaces or matching txt/md/docx sources, with line-window evidence, omission checks, and per-episode coverage reports.
6
+
7
+ ## Changed
8
+ - Source-less `scriptctl review` uses dedicated script-consistency instructions and tools, without requiring timestamps or original-media evidence.
9
+ - Text ingest preserves full-source line windows on actions. Existing v4 ingest workspaces can recover those windows through stable identity mappings during text review.
10
+ - `scriptctl review --check` reports the selected `review_kind` (`script`, `text`, `comic`, or `video`).
11
+
12
+ ## Fixed
13
+ - None.
14
+
15
+ ## Breaking
16
+ - None.
package/dist/bin.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{b as s}from"./chunk-OYTWFCNO.js";import{Console as r}from"node:console";var o=new r({stdout:process.stderr,stderr:process.stderr});console.debug=o.debug.bind(o);console.info=o.info.bind(o);console.log=o.log.bind(o);s(process.argv.slice(2)).then(e=>{process.exitCode=e}).catch(e=>{console.error(e),process.exitCode=70});
2
+ import{b as s}from"./chunk-5T4VIFJR.js";import{Console as r}from"node:console";var o=new r({stdout:process.stderr,stderr:process.stderr});console.debug=o.debug.bind(o);console.info=o.info.bind(o);console.log=o.log.bind(o);s(process.argv.slice(2)).then(e=>{process.exitCode=e}).catch(e=>{console.error(e),process.exitCode=70});