@lingjingai/scriptctl 0.71.0 → 0.72.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 +9 -4
- package/changes/0.72.0.md +13 -0
- package/changes/0.72.1.md +25 -0
- package/dist/bin.js +1 -1
- package/dist/{chunk-FO4BIFWU.js → chunk-AI3ZKLDN.js} +136 -136
- package/dist/cli.js +1 -1
- package/dist/review-agent.js +354 -328
- package/package.json +18 -17
- package/skills/scriptctl/SKILL.md +12 -4
- package/skills/scriptctl/references/ingest-workflow.md +2 -2
package/README.md
CHANGED
|
@@ -82,9 +82,9 @@ Gemini 接收左侧带时间戳、行锚点的亚洲格式剧本正文,以及
|
|
|
82
82
|
|
|
83
83
|
剧本旁 `.review/asr/episode-N/` 保存按音频 SHA-256 复用的成功 ASR 响应,以及每次对比的 `script.txt`、`asr.txt`、`prompt.txt`、逐模型逐次响应和 `report.json`(含前后时间、台词、缺漏线索)。当前剧本每次重新对比,不缓存对比结论。
|
|
84
84
|
|
|
85
|
-
视频和纯剧本审核使用 `review-agent`,文本和漫画使用 `review-text`、`review-comic`;主 Agent 每次模型请求按 MSUICODE Vertex → GCP → T3 → 兔子(`TUZI_API_KEY`,`https://api.tu-zi.com`)→ 豆包 Seed 2.1 Turbo(`DOUBAO_TURBO_API_KEY`)的顺序使用,Gemini 渠道均为 `gemini-3.8-flash`。NNYYAI 不参与 Agent 工具调用:它会把并行函数调用拆成两段,并丢失工具循环的函数结果历史。Grok 也不在默认链中:长审核历史下它只回复计划而不调用工具。MSUICODE 地址为 `http://15.204.107.123:3000`,三个来源分别读取 `MSUICODE_VERTEX_API_KEY`、`MSUICODE_GCP_API_KEY`、`MSUICODE_T3_API_KEY`。主渠道密钥必需,额外渠道仅在配置对应密钥时参与。普通服务错误按顺序切换;Gemini 返回明确的内容拦截时,当前这一步跳过剩余 Gemini 渠道交给豆包,下一步重新从 Vertex 开始。各模型沿用 provider 的 `maxAttempts`,内置最多三次。模型切换发生在当前调用内,保留成功的工具操作;用量记录实际渠道和模型,Gemini 思考签名只在生成它的渠道内复用。逐集与全剧审核都要求成功调用 validate 后才结束;模型只回复计划而没有收口时会被要求继续,全部渠道都失败时直接结束。`--no-fallback` 或 `SCRIPTCTL_REVIEW_SINGLE_MODEL=1` 仅使用选定模型。
|
|
85
|
+
视频和纯剧本审核使用 `review-agent`,文本和漫画使用 `review-text`、`review-comic`;主 Agent 每次模型请求按 MSUICODE Vertex → GCP → T3 → 兔子(`TUZI_API_KEY`,`https://api.tu-zi.com`)→ 豆包 Seed 2.1 Lite(`ARK_API_KEY`)→ Turbo(`DOUBAO_TURBO_API_KEY`)的顺序使用,Gemini 渠道均为 `gemini-3.8-flash`。NNYYAI 不参与 Agent 工具调用:它会把并行函数调用拆成两段,并丢失工具循环的函数结果历史。Grok 也不在默认链中:长审核历史下它只回复计划而不调用工具。MSUICODE 地址为 `http://15.204.107.123:3000`,三个来源分别读取 `MSUICODE_VERTEX_API_KEY`、`MSUICODE_GCP_API_KEY`、`MSUICODE_T3_API_KEY`。主渠道密钥必需,额外渠道仅在配置对应密钥时参与。普通服务错误按顺序切换;Gemini 返回明确的内容拦截时,当前这一步跳过剩余 Gemini 渠道交给豆包,下一步重新从 Vertex 开始。各模型沿用 provider 的 `maxAttempts`,内置最多三次。模型切换发生在当前调用内,保留成功的工具操作;用量记录实际渠道和模型,Gemini 思考签名只在生成它的渠道内复用。逐集与全剧审核都要求成功调用 validate 后才结束;模型只回复计划而没有收口时会被要求继续,全部渠道都失败时直接结束。`--no-fallback` 或 `SCRIPTCTL_REVIEW_SINGLE_MODEL=1` 仅使用选定模型。
|
|
86
86
|
|
|
87
|
-
独立的 ASR JSON 比对和原片视频核验使用 `review-media`:NNYYAI Gemini 3.8 → 3.7 → 3.6 Flash →
|
|
87
|
+
独立的 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`。
|
|
88
88
|
|
|
89
89
|
全剧收敛审核必须成功执行 `validate` 才能正常结束;未完成时在同一会话内继续,保留已有工具操作,并共用原步数和总时间预算。整集默认 15 分钟总时限,耗尽后结束本轮审核。
|
|
90
90
|
|
|
@@ -176,7 +176,7 @@ Gemini provider 可设置 `videoResponseSchemaField: responseSchema`,用于 GR
|
|
|
176
176
|
内置 `ingest.video-serial` 首选 NNYYAI 次卡 `gemini-3.8-flash-anci`,读取 `NNYYAI_CI_API_KEY`;
|
|
177
177
|
`ingest.comic-serial` 使用普通 NNYYAI `gemini-3.8-flash`,读取 `NNYYAI_API_KEY`。两者地址均为 `https://api.nnyyai.com`,使用 base64 视频或 PDF 输入(Schema 字段为 `responseSchema`)。设置密钥后直接运行
|
|
178
178
|
`scriptctl ingest -s <视频或PDF文件或目录> -w <workspace>`。
|
|
179
|
-
默认视频请求先尝试次卡模型,然后切换到使用 `NNYYAI_API_KEY` 的普通 NNYYAI Gemini 3.8 / 3.7 / 3.6 Flash,随后使用 GrsAI(`https://grsai.dakka.com.cn
|
|
179
|
+
默认视频请求先尝试次卡模型,然后切换到使用 `NNYYAI_API_KEY` 的普通 NNYYAI Gemini 3.8 / 3.7 / 3.6 Flash,随后使用 GrsAI(`https://grsai.dakka.com.cn`)的同三个型号,最后依次进入火山豆包 Seed 2.1 Lite 和 BytePlus Turbo。GrsAI 使用独立的 `GRSAI_API_KEY`、base64 视频与 `responseSchema`,每个型号最多尝试 3 次;未配置密钥或主渠道已为该 GrsAI 地址时跳过此段。普通 NNYYAI 后备段仅在配置其密钥时启用。次卡视频上传失败时,从普通 NNYYAI 开始使用本地视频继续请求;自定义主渠道上传失败时从 GrsAI 开始。Lite 读取 `ARK_API_KEY`,Turbo 读取 `DOUBAO_TURBO_API_KEY`;缺少对应密钥时跳过该路。`DOUBAO_LITE_MODEL`、`DOUBAO_TURBO_MODEL` 可覆盖对应默认端点。
|
|
180
180
|
PDF 的 Gemini 型号切换使用同一主渠道,随后由已配置的豆包兜底。`review-agent` 主循环默认使用上述 MSUICODE → 兔子 → 豆包审核链;文本任务按各自 profile 路由。
|
|
181
181
|
显式 LLM 配置决定主渠道和模型,支持 GrsAI、Google Vertex 等 provider;视频同样按主渠道 → GrsAI → 豆包的顺序恢复。显式选择豆包时只调用豆包。
|
|
182
182
|
|
|
@@ -238,12 +238,17 @@ MIT
|
|
|
238
238
|
|
|
239
239
|
### 指定视频理解服务
|
|
240
240
|
|
|
241
|
-
默认视频请求按 NNYYAI 次卡 → 普通 NNYYAI 3.8 / 3.7 / 3.6 Flash → GrsAI 3.8 / 3.7 / 3.6 Flash → 豆包调用,各渠道使用自己的密钥。自定义主渠道先调用选定模型并补齐普通 Gemini Flash 型号,再进入 GrsAI
|
|
241
|
+
默认视频请求按 NNYYAI 次卡 → 普通 NNYYAI 3.8 / 3.7 / 3.6 Flash → GrsAI 3.8 / 3.7 / 3.6 Flash → 豆包调用,各渠道使用自己的密钥。自定义主渠道先调用选定模型并补齐普通 Gemini Flash 型号,再进入 GrsAI 和豆包;具体渠道、媒体传输和重试规则见上方环境变量说明。豆包后备路由按 Seed 2.1 Lite → Turbo 顺序调用。Lite 读取 `ARK_API_KEY`,`DOUBAO_LITE_MODEL` 可覆盖默认端点 `ep-20261029164743-gt8dh`;Turbo 读取 `DOUBAO_TURBO_API_KEY`,`DOUBAO_TURBO_MODEL` 可覆盖默认端点 `ep-20261028172514-tlxzc`。缺少对应密钥时跳过该路。完整模型链耗尽后才汇总报错,调用和用量按实际渠道、模型记录。直接选择豆包时只调用豆包:
|
|
242
242
|
|
|
243
243
|
```bash
|
|
244
244
|
# 豆包 Seed 2.1 Turbo:默认读取 DOUBAO_TURBO_API_KEY;模型也可通过 DOUBAO_TURBO_MODEL 设置
|
|
245
245
|
scriptctl ingest --source-path ./video.mp4 --video-provider doubao --provider-model ep-20261028172514-tlxzc
|
|
246
246
|
|
|
247
|
+
# 直接使用火山 Seed 2.1 Lite
|
|
248
|
+
scriptctl ingest --source-path ./video.mp4 --video-provider doubao \
|
|
249
|
+
--provider-model ep-20261029164743-gt8dh --provider-api-key-env ARK_API_KEY \
|
|
250
|
+
--provider-base-url https://ark.cn-beijing.volces.com/api/v3
|
|
251
|
+
|
|
247
252
|
# 使用自定义凭据来源和服务地址
|
|
248
253
|
scriptctl ingest --source-path ./video.mp4 --video-provider doubao \
|
|
249
254
|
--provider-model ep-your-endpoint --provider-api-key-env MY_DOUBAO_TURBO_API_KEY \
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# 0.72.0
|
|
2
|
+
|
|
3
|
+
## Added
|
|
4
|
+
- None.
|
|
5
|
+
|
|
6
|
+
## Changed
|
|
7
|
+
- 豆包后备路由按火山 Seed 2.1 Lite → BytePlus Turbo 顺序调用,覆盖拉片、文本/结构化工具、PDF、改编与审核。Lite 使用 `ARK_API_KEY`,默认端点 `ep-20261029164743-gt8dh`;媒体和文本后备路由可用 `DOUBAO_LITE_MODEL` 覆盖。Turbo 继续使用 `DOUBAO_TURBO_API_KEY`。缺少对应密钥时跳过该路,显式单模型调用保持单路。
|
|
8
|
+
|
|
9
|
+
## Fixed
|
|
10
|
+
- None.
|
|
11
|
+
|
|
12
|
+
## Breaking
|
|
13
|
+
- None.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# 0.72.1
|
|
2
|
+
|
|
3
|
+
## Added
|
|
4
|
+
- `reskin plan` 在方案核验之后排故事时间线:按集序给每个节拍写主线第几天、时段(晨、日、昏、夜)和在场人物,回忆、梦境另写它呈现的时间;原剧场次的日夜作为参考。随后按时间线逐个人物设计造型,排进这个人物出场的每个节拍:造型只依据人物设定、时间线和节拍设计,不读原剧造型,描述与这个人物的原剧造型重合过半的退回重新设计;只在一个节拍出场的人物用自己的外观作为唯一造型。已有方案再跑时只补这两层;节拍改写后,只补排改动的节拍和受影响人物的造型。
|
|
5
|
+
- `reskin review` 全剧收尾记录已完成的阶段首集接缝复核和人物造型统筹(含造型交来的正文问题),中断后再跑从记录接着做;有分集重新审过时记录作废,全剧收尾完成后删除。
|
|
6
|
+
- 换壳各步(`reskin analyze/paths/direction/plan/write/review/batch`)的 NDJSON 进度里,请求每离开一个模型渠道发一条 `route-failover`:`{"type":"route-failover","agent","from","to","reason","blocked","message"}`。换渠道时 `reason` 是失败原因(`timeout`、`http-<状态码>`、`network`、`error`);Gemini 内容拦截后转豆包时 `blocked: true`、`reason` 是拦截原因;因冷却跳过渠道时 `reason: "cooldown"`。
|
|
7
|
+
|
|
8
|
+
## Changed
|
|
9
|
+
- 换壳审核(逐集审核与全剧收尾)按批工作:`read_many` 一次读多个地址;`changes` 一次提交一组相关修改(edit、insert、move、ref、replace、del、look、asset,全剧收尾另有 merge),全部成功才写入,返回修改后的回读和最新程序检查结果;`findings` 一次记录多条结论。逐条的 read、edit、insert、ref、look、asset、finding、validate、issues 不再提供给换壳审核。审核仍先用 table、scan、check 逐步读取本集材料。
|
|
10
|
+
- `reskin review` 独立读稿只用 `read_many`、`find`、`refs` 和 `submit`,提交结论后结束;程序检查与结论记录留给随后的全剧修改。
|
|
11
|
+
- `reskin review` 独立读稿的题材常识只在新壳、目标市场或用户要求变化时重新整理,返修后的复读沿用上一次的。
|
|
12
|
+
- `reskin plan` 的人物设计只写长相、发型、体型和平常的穿着,造型改由时间线之后的造型层设计,不再逐套对应原剧造型。节拍写人物外观的变化和场合,不写衣服的款式、颜色和材质。
|
|
13
|
+
- `reskin write` 正文写到的衣着照本集资产里的造型描述写,节拍内容里的衣着说法以造型描述为准。
|
|
14
|
+
- `reskin review` 全剧收尾的造型统筹只核对偏离时间线的人物段落:一段剧情里每场引用的造型都正是时间线给这几拍排的造型时,这段不再核对;没有时间线的方案照旧逐段核对。
|
|
15
|
+
- `reskin write` 的结构表给每个节拍写明时间和在场人物的造型;本集资产列出本集排到的造型和前面各集写作中新增的造型,不再列原剧本集所用的造型。场景引用和每句台词按所在节拍的造型绑定;一场里换装后的台词用 `名字·造型` 写明。场头时段与节拍不一致、一场跨了两天、穿了没排的造型时,草稿退回修改。新剧本里的人物只保留方案设计的造型,原剧造型删除,引用移到默认造型;方案造型变化后,已写的集按时间线重新绑定。
|
|
16
|
+
- 换壳逐集审核和全剧收尾的程序检查报出时段与时间线不一致的场,以及引用了排给其他节拍的方案造型的场。
|
|
17
|
+
- 模型渠道用完自己的重试后因传输错误失败(超时、HTTP 408/429/5xx、连接错误),本进程的所有 Agent 在 `SCRIPTCTL_ROUTE_COOLDOWN_MS`(默认 10 分钟)内跳过它,直接从下一个渠道开始,到期后再试;剩下的最后一个可用渠道照常请求。卡住的 Gemini 流同样按这个时长冷却。
|
|
18
|
+
- 换壳和媒体审核的渠道里已配置 openai-compatible 的豆包渠道(provider `doubao`、`ark` 或 `ark-lite`)时,不再追加内置的豆包 Lite 与 Turbo,豆包只走配置的渠道;没有配置时照旧依次追加 Lite、Turbo。
|
|
19
|
+
|
|
20
|
+
## Fixed
|
|
21
|
+
- `reskin write` 一场里同一人物有两套造型时,台词按换装前后分别绑定,不再一律绑到排序靠前的那一套。
|
|
22
|
+
- 换壳的 openai-compatible 渠道 `baseUrl` 写成完整的 `.../chat/completions` 地址时,请求发到这个地址,不再重复拼接路径。
|
|
23
|
+
|
|
24
|
+
## Breaking
|
|
25
|
+
- None.
|
package/dist/bin.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{b as s}from"./chunk-
|
|
2
|
+
import{b as s}from"./chunk-AI3ZKLDN.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});
|