@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 CHANGED
@@ -60,7 +60,7 @@ Script v4 的新节点使用类型前缀加 6 位 Bitcoin Base58 的 NanoID。
60
60
 
61
61
  ## 原文审核
62
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。
63
+ `scriptctl review -p <workspace/script.json> -s <文本 ingest 工作区>` 读取 `pass1/source.txt`,使用 manifest 的 SHA-256 核实原文快照。也可以传对应的 `.txt`、`.md` 或 `.docx`,此时剧本旁需要完整 ingest 工作区;输入按 ingest 相同规则规范化并核对摘要。默认 `review-text` 使用上述主 Agent 渠道链,`--model` 可选择已有 profile。
64
64
 
65
65
  文本 Agent 使用 `source` 定位 action 的候选原文窗口、`text_range` 读取带行号的原文、`search_source` 查找完整原稿。先读本集全部原文检查遗漏,再逐条反查 action。台词保留原文语言,动作允许忠实的简体中文转述;合法翻译、拆分和合并不作为错误。
66
66
 
@@ -82,7 +82,11 @@ 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`。主 Agent 的默认链为 NNYYAI Gemini 3.8 → 3.7 → 3.6 Flash → LiteLLM `grok-4.7-packy` → `grok-4.6-packy` → `grok-4.5-packy` → 火山方舟豆包;`review-text`、`review-comic` 同样在各自 Gemini 主渠道之后使用这组 Grok。Grok 使用 `PROJECT_LITELLM_GATEWAY_BASE_URL` 和 `PROJECT_LITELLM_GATEWAY_API_KEY`,未配置 gateway 密钥时跳过。独立的 ASR JSON 比对与原片视频核验使用已实现的 Gemini → 豆包协议,不向 Grok 发送这些请求。主渠道需要对应密钥;豆包使用 `ARK_API_KEY`,端点可通过 `ARK_MODEL` 指定。每个模型沿用 provider 的 `maxAttempts`(内置默认最多三次);不可重试的模型错误直接进入下一模型,可重试错误耗尽当前模型次数后再切换。整集默认总时限为 15 分钟,可用 `--episode-timeout-ms` 覆盖;总超时、取消、持久化失败不应靠换模型恢复。Mastra 在当前模型调用内切换,已执行成功的工具不重放,日志和用量记录实际渠道及模型。自定义 profile 可用 `fallbacks` 指定额外模型 profile,它们在主渠道 Gemini 型号耗尽后、豆包之前依次尝试。`--no-fallback` 或 `SCRIPTCTL_REVIEW_SINGLE_MODEL=1` 仅使用选定模型。 全剧收敛审核在成功执行 `validate` 前会继续同一 Agent 会话,保留已完成操作;完成检查只读取工具执行记录,不发起额外模型请求。所有继续步骤共用原 `maxSteps` 和总时限,预算耗尽仍未校验则报告失败。
85
+ 视频和纯剧本审核使用 `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` 仅使用选定模型。
86
+
87
+ 独立的 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`。
88
+
89
+ 全剧收敛审核必须成功执行 `validate` 才能正常结束;未完成时在同一会话内继续,保留已有工具操作,并共用原步数和总时间预算。整集默认 15 分钟总时限,耗尽后结束本轮审核。
86
90
 
87
91
  `asr-started` / `asr-transcribed` / `asr-compared` NDJSON 按集报告进度与证据;`asr-compared` 不代表修改已落盘,带 `episode_number` 的 `asr-applied` 表示本集校时已经保存。之后的 `episode` 报告本集完成或失败,已有修改已保存;`done.statistics.fixed` 包含自动校时条数,`usage_total` 汇总对比与审核 Gemini 用量。
88
92
 
@@ -92,7 +96,7 @@ Gemini 接收左侧带时间戳、行锚点的亚洲格式剧本正文,以及
92
96
 
93
97
  `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
98
 
95
- 漫画使用独立的 `review-comic` profile(默认 NNYYAI `gemini-3.8-flash`,`NNYYAI_API_KEY`),主 Agent 支持 Gemini 型号切换、已配置的 LiteLLM Grok 三档和豆包恢复路由,不进入官方 Google 渠道。自定义 LLM 配置需要定义该 profile,或用 `--model` 选择有显式服务地址的 profile。视频和纯剧本仍使用 `review-agent`。
99
+ 漫画使用独立的 `review-comic` profile,默认采用上述 MSUICODE → NNYYAI → Grok 主 Agent 渠道链。自定义 LLM 配置需要定义该 profile,或用 `--model` 选择有显式服务地址的 profile。视频和纯剧本仍使用 `review-agent`。
96
100
 
97
101
  漫画 Agent 逐页看原稿并反向核对 action,使用 `source` 定位、`pages` 看完整原页、`region` 看清晰局部,核对遗漏、重复、文字、人物、心声类型及阅读顺序。需要 Poppler(`pdftoppm`);局部图按显示页的 CropBox/旋转归一化坐标渲染。正文修改保留来源;插入遗漏内容必须同时提供 `extend.scriptctl.source` 页码及区域。跨页内容使用同一条 action 的多个来源区域,不添加时间戳。
98
102
 
@@ -115,7 +119,9 @@ Gemini 接收左侧带时间戳、行锚点的亚洲格式剧本正文,以及
115
119
  | `PROJECT_LITELLM_GATEWAY_API_KEY` | 内置 LLM 配置引用的 gateway key |
116
120
  | `PROJECT_LITELLM_GATEWAY_BASE_URL` | 内置配置的 gateway endpoint;OpenAI-compatible synopsis 必须配置 |
117
121
  | `SCRIPTCTL_LLM_CONFIG` | LLM 路由 YAML;优先级低于 `--llm-config` |
118
- | `NNYYAI_API_KEY` | 内置视频与漫画拉片、默认 `review-agent` 和 `review-comic` 的渠道密钥 |
122
+ | `NNYYAI_API_KEY` | 内置视频与漫画拉片、独立媒体核验及 Agent 的 NNYYAI 渠道密钥 |
123
+ | `MSUICODE_VERTEX_API_KEY` | 默认审核 Agent 的 MSUICODE Vertex 主渠道密钥 |
124
+ | `MSUICODE_GCP_API_KEY` / `MSUICODE_T3_API_KEY` | 审核 Agent 的 MSUICODE GCP / T3 后续渠道密钥 |
119
125
  | `GRSAI_API_KEY` | 视频拉片及显式选择 GrsAI profile 时使用的渠道密钥 |
120
126
  | `AWB_BASE_URL` | script-output gateway URL |
121
127
  | `LINGJING_AWB_ACCESS_KEY` | gateway 访问凭证 |
@@ -148,7 +154,7 @@ Gemini provider 可设置 `videoResponseSchemaField: responseSchema`,用于 GR
148
154
  从 `NNYYAI_API_KEY` 读取密钥,使用 base64 视频或 PDF 输入(Schema 字段为 `responseSchema`)。设置密钥后直接运行
149
155
  `scriptctl ingest -s <视频或PDF文件或目录> -w <workspace>`。
150
156
  视频请求先尝试配置的主模型,再在主渠道按 Gemini 3.8 / 3.7 / 3.6 Flash 补齐未试型号,随后使用 GrsAI(`https://grsai.dakka.com.cn`)的同三个型号,最后进入火山方舟豆包。GrsAI 使用独立的 `GRSAI_API_KEY`、base64 视频与 `responseSchema`,每个型号最多尝试 3 次;未配置密钥或主渠道已为该 GrsAI 地址时跳过此段。主渠道视频上传失败时,从 GrsAI 开始使用本地视频继续请求。豆包需要 `ARK_API_KEY`,`ARK_MODEL` 可覆盖默认端点。
151
- PDF 的 Gemini 型号切换使用同一主渠道,随后由已配置的豆包兜底。`review-agent` 主循环默认使用 NNYYAI → LiteLLM Grok → 豆包审核链;文本任务按各自 profile 路由。
157
+ PDF 的 Gemini 型号切换使用同一主渠道,随后由已配置的豆包兜底。`review-agent` 主循环默认使用 MSUICODE → NNYYAI → LiteLLM Grok 审核链;文本任务按各自 profile 路由。
152
158
  显式 LLM 配置决定主渠道和模型,支持 GrsAI、Google Vertex 等 provider;视频同样按主渠道 → GrsAI → 豆包的顺序恢复。显式选择豆包时只调用豆包。
153
159
 
154
160
  Gemini provider 的 `videoUploadMode: base64` 可指定视频默认传输方式;未设置时为 `file-api`,
@@ -230,7 +236,7 @@ scriptctl ingest --source-path ./video.mp4 --video-provider gemini
230
236
 
231
237
  ### Official Gemini via Vertex AI
232
238
 
233
- The built-in official Gemini provider uses `google-vertex` with Google Application Default Credentials (ADC). Set `GOOGLE_CLOUD_PROJECT` and configure ADC on each execution machine. All official calls use the global location; tokens refresh automatically. Video requests send inline media; text requests use the Vertex OpenAI-compatible API. A custom provider can declare `protocol: google-vertex`, `timeoutMs` and `maxAttempts` without an `apiKey` field. Custom Gemini gateways retain the `google-gemini` protocol and their own credentials.
239
+ The built-in official Gemini provider uses `google-vertex` with Google Application Default Credentials (ADC). Set `GOOGLE_CLOUD_PROJECT` and configure ADC on each execution machine; tokens refresh automatically. Video requests send inline media; text requests use the Vertex OpenAI-compatible API. A custom provider can declare `protocol: google-vertex`, `timeoutMs` and `maxAttempts` without an `apiKey` field. To use a Vertex API key, add `apiKey: { env: GOOGLE_API_KEY }` to that provider and set the named environment variable. Select the provider through the task profile in your LLM configuration. The project reads `VERTEX_PROJECT_ID`, falling back to `GOOGLE_CLOUD_PROJECT`; the location reads `VERTEX_LOCATION`, then `GOOGLE_CLOUD_LOCATION`, defaulting to `global`. Custom Gemini gateways retain the `google-gemini` protocol and their own credentials.
234
240
 
235
241
  ### 已授权的跨语言台词检查
236
242
 
@@ -0,0 +1,6 @@
1
+ # 0.66.17
2
+
3
+ - review 主 Agent 按 MSUICODE Vertex → GCP → T3 → NNYYAI 的顺序调用 Gemini 3.8 Flash,再依次使用 Grok 4.7 / 4.6 / 4.5 Packy;移除主 Agent 自动追加的豆包。
4
+ - Gemini 明确返回内容拦截时,本轮 Agent 直接跳过剩余 Gemini 渠道,进入 Grok;普通服务错误仍按渠道顺序恢复。
5
+ - 跨渠道切换保留成功的工具操作和实际用量,思考签名仅在原渠道复用。
6
+ - 拉片视频核验、ASR 和换壳写作保留原有模型路由。
@@ -0,0 +1,3 @@
1
+ # 0.66.18
2
+
3
+ - 审核工具返回的图片通过原生图片消息传给模型,避免 OpenAI 兼容渠道把 Base64 序列化为工具文本导致输入过长。保留全部图片、时间标签和工具调用对应关系,不改变审核范围、模型路由或输出额度。
package/dist/bin.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{b as s}from"./chunk-MMH5EEBU.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-QCTGU6FJ.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});