@lingjingai/scriptctl 0.66.16 → 0.66.18
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 +12 -6
- package/changes/0.66.17.md +6 -0
- package/changes/0.66.18.md +3 -0
- package/dist/bin.js +1 -1
- package/dist/{chunk-MMH5EEBU.js → chunk-QCTGU6FJ.js} +144 -144
- package/dist/cli.js +1 -1
- package/dist/review-agent.js +185 -185
- package/package.json +17 -18
- package/skills/scriptctl/SKILL.md +9 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lingjingai/scriptctl",
|
|
3
|
-
"version": "0.66.
|
|
3
|
+
"version": "0.66.18",
|
|
4
4
|
"description": "剧本阶段统一 CLI:素材转 Script v4,并兼容 Script v3 的本地写作、精修、校验和发布。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -22,20 +22,6 @@
|
|
|
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
|
-
},
|
|
39
25
|
"dependencies": {
|
|
40
26
|
"@anthropic-ai/sdk": "^0.111.0",
|
|
41
27
|
"@google/genai": "^2.11.0",
|
|
@@ -53,8 +39,8 @@
|
|
|
53
39
|
"zod": "^4.5.4"
|
|
54
40
|
},
|
|
55
41
|
"devDependencies": {
|
|
56
|
-
"@lingjingai/review-agent": "
|
|
57
|
-
"@lingjingai/screenplay": "
|
|
42
|
+
"@lingjingai/review-agent": "0.1.0",
|
|
43
|
+
"@lingjingai/screenplay": "0.1.0",
|
|
58
44
|
"@types/jsdom": "^30.0.0",
|
|
59
45
|
"@types/node": "^20.14.0",
|
|
60
46
|
"@types/proper-lockfile": "^4.1.4",
|
|
@@ -82,5 +68,18 @@
|
|
|
82
68
|
"@ai-sdk/openai-compatible": "^3.0.48",
|
|
83
69
|
"@ai-sdk/provider": "^4.0.4",
|
|
84
70
|
"@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"
|
|
85
84
|
}
|
|
86
|
-
}
|
|
85
|
+
}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
name: scriptctl
|
|
3
3
|
description: "剧本 script.json 的本地阅读、定位、原子修改、整场整集回写、素材 ingest 与 revision publish CLI。处理 Script v3/v4、剧本资产与 state、Action、场景引用或视频证据核对时使用。"
|
|
4
4
|
metadata:
|
|
5
|
-
version: "0.32.
|
|
6
|
-
scriptctl_version: "0.66.
|
|
5
|
+
version: "0.32.3"
|
|
6
|
+
scriptctl_version: "0.66.17"
|
|
7
7
|
author: "official"
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -240,7 +240,11 @@ 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
|
-
|
|
243
|
+
视频和纯剧本审核使用 `review-agent`,文本和漫画使用 `review-text`、`review-comic`;主 Agent 默认共用 MSUICODE Vertex → MSUICODE GCP → MSUICODE T3 → NNYYAI(均为 `gemini-3.8-flash`)→ LiteLLM `grok-4.7-packy` → `grok-4.6-packy` → `grok-4.5-packy`。MSUICODE 地址为 `http://15.204.107.123:3000`,三个来源分别读取 `MSUICODE_VERTEX_API_KEY`、`MSUICODE_GCP_API_KEY`、`MSUICODE_T3_API_KEY`;NNYYAI 读取 `NNYYAI_API_KEY`。主渠道密钥必需,额外渠道仅在配置对应密钥时参与。Grok 读取 `PROJECT_LITELLM_GATEWAY_BASE_URL` 和 `PROJECT_LITELLM_GATEWAY_API_KEY`。普通服务错误按配置顺序切换;Gemini 返回明确的内容拦截时,本轮 Agent 跳过所有剩余 Gemini 渠道,直接进入 Grok;这一状态只作用于当前 Agent 会话。各模型沿用 provider 的 `maxAttempts`,内置最多三次。模型切换发生在当前调用内,保留成功的工具操作;用量记录实际渠道和模型,Gemini 思考签名只在生成它的渠道内复用。自定义 profile 的 `fallbacks` 按声明顺序执行。`--no-fallback` 或 `SCRIPTCTL_REVIEW_SINGLE_MODEL=1` 仅使用选定模型。
|
|
244
|
+
|
|
245
|
+
独立的 ASR JSON 比对和原片视频核验使用 `review-media`:NNYYAI Gemini 3.8 → 3.7 → 3.6 Flash → 豆包,凭据为 `NNYYAI_API_KEY`、`ARK_API_KEY`,`ARK_MODEL` 可指定豆包端点。显式 `--model` 或自定义配置仍决定媒体主渠道。豆包 Flash ASR 继续读取 `SD_AUDIO_APIKEY`。
|
|
246
|
+
|
|
247
|
+
全剧收敛审核必须成功执行 `validate` 才能正常结束;未完成时在同一会话内继续,保留已有工具操作,并共用原步数和总时间预算。整集默认 15 分钟总时限,耗尽后结束本轮审核。
|
|
244
248
|
|
|
245
249
|
`review` 一个进程审完整本剧:剧本只解析一次进内存,按集扇出,最后单线程做全剧收敛。
|
|
246
250
|
给 `-s` 按来源选择文本、漫画或视频核对,不给就检查剧本内部一致性,
|
|
@@ -251,7 +255,7 @@ agent 是否就绪。**Agent 不要自己调 `review` 去审自己正在改的
|
|
|
251
255
|
agent 并直接改文件。
|
|
252
256
|
抽帧工具的时间参数始终是 JSON 数组,单帧也一样;参数调用错误回传给审核 agent 修正,不作为图片结果处理,也不据此把整集标记完成。
|
|
253
257
|
|
|
254
|
-
漫画 review 的 `-s` 支持漫画 ingest 工作区,或原 PDF 文件/目录(剧本旁需有 ingest `manifest.json`)。通过 `document_id` 和 PDF SHA-256 核实来源,保留 Script v4 的页码/区域扩展字段。默认 `review-comic` profile
|
|
258
|
+
漫画 review 的 `-s` 支持漫画 ingest 工作区,或原 PDF 文件/目录(剧本旁需有 ingest `manifest.json`)。通过 `document_id` 和 PDF SHA-256 核实来源,保留 Script v4 的页码/区域扩展字段。默认 `review-comic` profile 采用上述主 Agent 渠道链,需要 `MSUICODE_VERTEX_API_KEY`;自定义 LLM 配置需定义该 profile 或用 `--model` 显式指定。`--episodes` 指定逐话审核范围;全剧收敛保留全部原稿,`--no-converge` 时只要求所选话的 PDF。`--converge-only` 仅处理全局身份与资产一致性。
|
|
255
259
|
|
|
256
260
|
漫画 Agent 使用原页及局部图片逐页检查遗漏,再对照 action 核对正文、说话人、心声类别、顺序和来源。需要 `pdftoppm`;图片在 `review-pages/`,结果在 `.review/comic/episode-N.json` 和 `global.json`。新增 action 同时写来源,跨页引用保留全部页与区域。`viewed_pages` 只记录图片已加载;未看完整页集会留下 unresolved,不能据此宣称整话通过。漫画不生成时间戳,不执行 ASR;运行由 `--max-steps` 和 `--episode-timeout-ms` 限制。视频保留原有 ASR、校时和媒体预算流程。
|
|
257
261
|
|
|
@@ -259,7 +263,7 @@ agent 并直接改文件。
|
|
|
259
263
|
|
|
260
264
|
纯剧本使用独立的审核指令与剧本工具:检查内部结构、引用和设定冲突,不要求时间戳;需要外部事实才能判定的内容保持 unresolved。`review --check` 的 `review_kind` 明确本次选择 script / text / comic / video。
|
|
261
265
|
|
|
262
|
-
文本 review 的 `-s` 指向文本 ingest 工作区,或对应的 txt/md/docx(剧本旁需有完整工作区)。原文快照为 `pass1/source.txt`,通过 manifest 的 SHA-256 核验;既有 v4 产物按 `v4_identity_map.json`、`pass1/body_start.json` 恢复原文位置。保留这些文件,不按正文相似度或当前 action 序号猜来源。默认 `review-text` profile
|
|
266
|
+
文本 review 的 `-s` 指向文本 ingest 工作区,或对应的 txt/md/docx(剧本旁需有完整工作区)。原文快照为 `pass1/source.txt`,通过 manifest 的 SHA-256 核验;既有 v4 产物按 `v4_identity_map.json`、`pass1/body_start.json` 恢复原文位置。保留这些文件,不按正文相似度或当前 action 序号猜来源。默认 `review-text` profile 使用上述主 Agent 渠道链,`--model` 可显式选择已有 profile。
|
|
263
267
|
|
|
264
268
|
文本 Agent 先用 `text_range` 顺序读本集原文检查遗漏,再以 `source` / `search_source` 反查 action。来源是完整规范化原文的 1-based 闭区间,保存于 `extend.scriptctl.source.ranges`(`start_line` / `end_line`)。ingest 提供 chunk 级候选窗口,需读原文确认;台词保持原语言,动作允许忠实的简体中文转述。插入遗漏内容必须同时绑定原文。`.review/text/episode-N.json` 和 `global.json` 保存结论与已读/未读行窗口,加载不代表正确,未读完整保留 unresolved。
|
|
265
269
|
|