@lingjingai/scriptctl 0.48.0 → 0.49.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.
Files changed (42) hide show
  1. package/changes/0.49.0.md +17 -0
  2. package/changes/0.49.1.md +13 -0
  3. package/dist/bin.js +2 -2
  4. package/dist/bin.js.map +1 -1
  5. package/dist/domain/ingest/production-validation.d.ts +7 -0
  6. package/dist/domain/ingest/production-validation.js +52 -0
  7. package/dist/domain/ingest/production-validation.js.map +1 -0
  8. package/dist/domain/ingest/serial-context.js +11 -6
  9. package/dist/domain/ingest/serial-context.js.map +1 -1
  10. package/dist/domain/ingest/video-apply.js +6 -2
  11. package/dist/domain/ingest/video-apply.js.map +1 -1
  12. package/dist/domain/ingest/video-context.js +3 -0
  13. package/dist/domain/ingest/video-context.js.map +1 -1
  14. package/dist/domain/script/patch/helpers.js +0 -9
  15. package/dist/domain/script/patch/helpers.js.map +1 -1
  16. package/dist/help-text.js +1 -1
  17. package/dist/infra/llm/doubao-video-model.d.ts +56 -0
  18. package/dist/infra/llm/doubao-video-model.js +209 -0
  19. package/dist/infra/llm/doubao-video-model.js.map +1 -0
  20. package/dist/llm/router.d.ts +3 -0
  21. package/dist/llm/router.js +60 -3
  22. package/dist/llm/router.js.map +1 -1
  23. package/dist/llm/tasks/ingest/episode-assets.js +1 -1
  24. package/dist/llm/tasks/ingest/episode-assets.js.map +1 -1
  25. package/dist/llm/tasks/ingest/text-normalize.js +13 -5
  26. package/dist/llm/tasks/ingest/text-normalize.js.map +1 -1
  27. package/dist/llm/tasks/ingest/video-serial.d.ts +4 -1
  28. package/dist/llm/tasks/ingest/video-serial.js +15 -2
  29. package/dist/llm/tasks/ingest/video-serial.js.map +1 -1
  30. package/dist/llm/tasks/schemas.js +5 -5
  31. package/dist/llm/tasks/schemas.js.map +1 -1
  32. package/dist/llm/types.d.ts +2 -0
  33. package/dist/llm/types.js.map +1 -1
  34. package/dist/usecases/ingest/pipeline.js +15 -2
  35. package/dist/usecases/ingest/pipeline.js.map +1 -1
  36. package/dist/usecases/ingest/video-pipeline.js +16 -3
  37. package/dist/usecases/ingest/video-pipeline.js.map +1 -1
  38. package/package.json +1 -1
  39. package/skills/scriptctl/SKILL.md +23 -15
  40. package/skills/scriptctl/references/atomic-write-workflow.md +7 -3
  41. package/skills/scriptctl/references/ingest-workflow.md +30 -11
  42. package/skills/scriptctl/references/production-writing-standard.md +83 -0
@@ -0,0 +1,209 @@
1
+ // Doubao / Volcengine Ark video-understanding adapter — the LAST-resort fallback
2
+ // after the Gemini model chain is exhausted (§10.5). Ark is a different protocol:
3
+ // the Files API sets sampling fps at UPLOAD time (preprocess_configs[video][fps]),
4
+ // then the Responses API references the file by id. So this adapter can't fit the
5
+ // upload/generate split of VideoUnderstandingPort cleanly — it exposes one
6
+ // self-contained run(): upload the local transcode → poll ACTIVE → respond →
7
+ // best-effort delete. Transport only; it never builds business prompts. HTTP is
8
+ // reached through a narrow structural client so tests inject a fake.
9
+ import * as fs from "node:fs";
10
+ import * as path from "node:path";
11
+ import { LlmTransportError, } from "../../llm/types.js";
12
+ import { withTransientRetry } from "./retry.js";
13
+ const POLL_INTERVAL_MS = 2000;
14
+ function delay(ms) {
15
+ return new Promise((resolve) => setTimeout(resolve, ms));
16
+ }
17
+ function statusOf(error) {
18
+ if (error && typeof error === "object" && typeof error.status === "number") {
19
+ return error.status;
20
+ }
21
+ return null;
22
+ }
23
+ // Map an SDK/HTTP error to a transport error with the shared retry policy: retry
24
+ // only transient network/timeout/408/429/5xx.
25
+ function toArkError(error, signal, what) {
26
+ if (error instanceof LlmTransportError)
27
+ return error;
28
+ const message = error instanceof Error ? error.message : String(error);
29
+ const status = statusOf(error);
30
+ if (status !== null) {
31
+ const retryable = status === 408 || status === 429 || status >= 500;
32
+ const code = status === 401 || status === 403 ? "auth" : status === 429 ? "rate_limited" : "request_failed";
33
+ return new LlmTransportError(code, `Doubao ${what} failed.`, { retryable, details: [`status: ${status}`, message.slice(0, 500)] });
34
+ }
35
+ const aborted = signal?.aborted ?? false;
36
+ return new LlmTransportError(aborted ? "request_failed" : "timeout", `Doubao ${what} failed.`, {
37
+ retryable: !aborted,
38
+ details: [message.slice(0, 500)],
39
+ });
40
+ }
41
+ function arkUsage(u) {
42
+ if (!u)
43
+ return {};
44
+ const num = (v) => (typeof v === "number" ? v : undefined);
45
+ return { inputTokens: num(u.input_tokens), outputTokens: num(u.output_tokens) };
46
+ }
47
+ // Concatenate every output_text across message items (reasoning items carry no
48
+ // output_text, so they are naturally skipped).
49
+ function extractText(res) {
50
+ const parts = [];
51
+ for (const item of res.output ?? []) {
52
+ if (item.type !== "message")
53
+ continue;
54
+ for (const c of item.content ?? []) {
55
+ if (c.type === "output_text" && typeof c.text === "string")
56
+ parts.push(c.text);
57
+ }
58
+ }
59
+ return parts.join("").trim();
60
+ }
61
+ export class DoubaoVideoModel {
62
+ model;
63
+ timeoutMs;
64
+ maxAttempts;
65
+ client;
66
+ constructor(model, timeoutMs, maxAttempts, apiKey, baseUrl, client) {
67
+ this.model = model;
68
+ this.timeoutMs = timeoutMs;
69
+ this.maxAttempts = maxAttempts;
70
+ this.client = client ?? createArkClient(apiKey, baseUrl, timeoutMs);
71
+ }
72
+ // upload local transcode → poll ACTIVE → respond → best-effort delete.
73
+ async run(request) {
74
+ const { value: file } = await withTransientRetry(this.maxAttempts, async () => {
75
+ try {
76
+ return await this.client.uploadFile({ filePath: request.localPath, mimeType: request.localMime, fps: request.fps });
77
+ }
78
+ catch (error) {
79
+ throw toArkError(error, request.signal, "upload");
80
+ }
81
+ });
82
+ if (!file.id)
83
+ throw new LlmTransportError("invalid_response", "Doubao upload returned no file id.");
84
+ const active = await this.pollActive(file.id, request.signal);
85
+ try {
86
+ return await this.generateOnce(active, request);
87
+ }
88
+ finally {
89
+ await this.client.deleteFile({ id: active }).catch(() => { }); // cleanup is best-effort
90
+ }
91
+ }
92
+ async pollActive(id, signal) {
93
+ const deadline = Date.now() + this.timeoutMs;
94
+ let status = "processing";
95
+ while (status === "processing" || status === "") {
96
+ if (signal?.aborted)
97
+ throw new LlmTransportError("request_failed", "Doubao upload aborted.");
98
+ if (Date.now() >= deadline)
99
+ throw new LlmTransportError("timeout", "Doubao file processing timed out.");
100
+ await delay(POLL_INTERVAL_MS);
101
+ let file;
102
+ try {
103
+ file = await this.client.getFile({ id });
104
+ }
105
+ catch (error) {
106
+ throw toArkError(error, signal, "file poll");
107
+ }
108
+ status = (file.status ?? "").toLowerCase();
109
+ }
110
+ if (status === "failed" || status === "error") {
111
+ throw new LlmTransportError("invalid_response", "Doubao file processing failed.");
112
+ }
113
+ return id;
114
+ }
115
+ async generateOnce(fileId, request) {
116
+ const params = {
117
+ model: this.model,
118
+ max_output_tokens: request.maxOutputTokens,
119
+ input: [{ role: "user", content: [
120
+ { type: "input_video", file_id: fileId },
121
+ { type: "input_text", text: request.user },
122
+ ] }],
123
+ };
124
+ if (request.system?.trim())
125
+ params["instructions"] = request.system;
126
+ if (request.responseJsonSchema) {
127
+ params["text"] = { format: { type: "json_schema", name: "video_serial", schema: request.responseJsonSchema } };
128
+ }
129
+ const { value, attempts } = await withTransientRetry(this.maxAttempts, async () => {
130
+ let res;
131
+ try {
132
+ res = await this.client.createResponse(params, request.signal);
133
+ }
134
+ catch (error) {
135
+ throw toArkError(error, request.signal, "createResponse");
136
+ }
137
+ const status = (res.status ?? "").toLowerCase();
138
+ if (status === "incomplete") {
139
+ const reason = res.incomplete_details?.reason ?? "unknown";
140
+ if (reason === "max_output_tokens")
141
+ throw new LlmTransportError("truncated", "Doubao output was truncated.");
142
+ throw new LlmTransportError("content_filtered", `Doubao response incomplete (reason=${reason}).`);
143
+ }
144
+ const text = extractText(res);
145
+ if (!text)
146
+ throw new LlmTransportError("empty_response", "Doubao returned an empty response.", { retryable: true });
147
+ return { text, usage: arkUsage(res.usage), raw: res };
148
+ });
149
+ return { text: value.text, finishReason: "STOP", attempts, usage: value.usage, raw: value.raw };
150
+ }
151
+ }
152
+ // Real HTTP client over the Ark REST API using global fetch (Node 18+). No SDK
153
+ // dependency — the surface is tiny (4 calls) and multipart upload is trivial.
154
+ class HttpError extends Error {
155
+ status;
156
+ constructor(status, message) {
157
+ super(message);
158
+ this.status = status;
159
+ this.name = "HttpError";
160
+ }
161
+ }
162
+ function createArkClient(apiKey, baseUrl, timeoutMs) {
163
+ const root = baseUrl.replace(/\/$/, "");
164
+ const auth = { Authorization: `Bearer ${apiKey}` };
165
+ function signalFor(extra) {
166
+ const timeout = AbortSignal.timeout(timeoutMs);
167
+ return extra ? AbortSignal.any([extra, timeout]) : timeout;
168
+ }
169
+ async function readError(res) {
170
+ const body = await res.text().catch(() => "");
171
+ throw new HttpError(res.status, body.slice(0, 500));
172
+ }
173
+ return {
174
+ async uploadFile({ filePath, mimeType, fps }) {
175
+ const form = new FormData();
176
+ const bytes = fs.readFileSync(filePath);
177
+ form.append("file", new Blob([bytes], { type: mimeType }), path.basename(filePath));
178
+ form.append("purpose", "user_data");
179
+ form.append("preprocess_configs[video][fps]", String(fps));
180
+ const res = await fetch(`${root}/files`, { method: "POST", headers: auth, body: form, signal: signalFor() });
181
+ if (!res.ok)
182
+ await readError(res);
183
+ return (await res.json());
184
+ },
185
+ async getFile({ id }) {
186
+ const res = await fetch(`${root}/files/${id}`, { headers: auth, signal: signalFor() });
187
+ if (!res.ok)
188
+ await readError(res);
189
+ return (await res.json());
190
+ },
191
+ async createResponse(params, signal) {
192
+ const res = await fetch(`${root}/responses`, {
193
+ method: "POST",
194
+ headers: { ...auth, "Content-Type": "application/json" },
195
+ body: JSON.stringify(params),
196
+ signal: signalFor(signal),
197
+ });
198
+ if (!res.ok)
199
+ await readError(res);
200
+ return (await res.json());
201
+ },
202
+ async deleteFile({ id }) {
203
+ const res = await fetch(`${root}/files/${id}`, { method: "DELETE", headers: auth, signal: signalFor() });
204
+ if (!res.ok)
205
+ await readError(res);
206
+ },
207
+ };
208
+ }
209
+ //# sourceMappingURL=doubao-video-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao-video-model.js","sourceRoot":"","sources":["../../../src/infra/llm/doubao-video-model.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { DoubaoVideoModel } from "../infra/llm/doubao-video-model.js";
1
2
  import { type LlmModelConfig, type LlmProviderConfig, type ResolvedLlmConfig } from "./config.js";
2
3
  import type { LlmRouteInfo, LlmRouteUsage, LlmTaskExecutor, LlmTaskId, TaskVideoPort, TextGenerationRequest, TextGenerationResponse, ToolGenerationRequest, ToolGenerationResponse, VideoUnderstandingPort } from "./types.js";
3
4
  interface ResolvedRoute {
@@ -9,6 +10,7 @@ export declare class ModelRouter implements LlmTaskExecutor {
9
10
  private readonly config;
10
11
  private readonly adapters;
11
12
  private readonly videoAdapters;
13
+ private readonly doubaoAdapters;
12
14
  private readonly resolvedRoutes;
13
15
  private readonly usageByTask;
14
16
  constructor(config: ResolvedLlmConfig);
@@ -23,6 +25,7 @@ export declare class ModelRouter implements LlmTaskExecutor {
23
25
  private adapter;
24
26
  protected videoAdapter(route: ResolvedRoute, model?: string): VideoUnderstandingPort;
25
27
  videoPort(task: LlmTaskId): TaskVideoPort;
28
+ protected doubaoAdapter(): DoubaoVideoModel | null;
26
29
  generateText(task: LlmTaskId, request: Omit<TextGenerationRequest, "maxOutputTokens">): Promise<TextGenerationResponse>;
27
30
  generateTool(task: LlmTaskId, request: Omit<ToolGenerationRequest, "maxOutputTokens">): Promise<ToolGenerationResponse>;
28
31
  }
@@ -1,6 +1,7 @@
1
1
  import * as crypto from "node:crypto";
2
2
  import { CliError, EXIT_INPUT, EXIT_RUNTIME } from "../common.js";
3
3
  import { AnthropicModel } from "../infra/llm/anthropic-model.js";
4
+ import { DoubaoVideoModel } from "../infra/llm/doubao-video-model.js";
4
5
  import { GeminiVideoModel } from "../infra/llm/gemini-video-model.js";
5
6
  import { OpenAiCompatibleModel } from "../infra/llm/openai-compatible-model.js";
6
7
  import { loadLlmConfig } from "./config.js";
@@ -12,6 +13,17 @@ import { LlmTransportError } from "./types.js";
12
13
  // reused across every attempt — only generateContent reruns. Rate limits, capacity,
13
14
  // and per-model content filters differ between models, so a peer often succeeds.
14
15
  const VIDEO_FALLBACK_MODELS = ["gemini-3.1-pro-preview", "gemini-3.1-flash-lite", "gemini-3-flash-preview"];
16
+ // Cross-provider last resort after every Gemini model fails: Doubao on Volcengine
17
+ // Ark. Different protocol (Files API sets fps at upload; Responses API references
18
+ // the file id), so it re-uploads the local transcode to its own storage. Credential
19
+ // is ARK_API_KEY; absent → the fallback is silently skipped, Gemini stays the only path.
20
+ const DOUBAO_FALLBACK = {
21
+ model: "doubao-seed-2-1-pro-260628",
22
+ baseUrl: "https://ark.cn-beijing.volces.com/api/v3",
23
+ apiKeyEnv: "ARK_API_KEY",
24
+ timeoutMs: 600_000,
25
+ maxAttempts: 3,
26
+ };
15
27
  function normalizeBaseUrl(value) {
16
28
  return value?.trim().replace(/\/+$/, "") ?? "anthropic-sdk-default";
17
29
  }
@@ -49,6 +61,7 @@ export class ModelRouter {
49
61
  config;
50
62
  adapters = new Map();
51
63
  videoAdapters = new Map();
64
+ doubaoAdapters = new Map();
52
65
  resolvedRoutes = new Map();
53
66
  usageByTask = new Map();
54
67
  constructor(config) {
@@ -181,14 +194,58 @@ export class ModelRouter {
181
194
  throw error;
182
195
  const detail = error instanceof LlmTransportError ? `${error.message} [${error.code}]` : error instanceof Error ? error.message : String(error);
183
196
  failures.push(`${model}: ${detail}`);
184
- if (model !== chain[chain.length - 1])
185
- process.stderr.write(`⚠️ 模型 ${model} 失败,尝试下一个… (${detail})\n`);
197
+ process.stderr.write(`⚠️ 模型 ${model} 失败,尝试下一个… (${detail})\n`);
186
198
  }
187
199
  }
188
- throw new LlmTransportError("request_failed", `All ${chain.length} video models failed.`, { details: failures });
200
+ // Cross-provider last resort: Doubao (Ark). Needs ARK_API_KEY + the local file.
201
+ const doubao = this.doubaoAdapter();
202
+ if (doubao && request.localPath) {
203
+ try {
204
+ process.stderr.write(`↪️ Gemini 全部失败,回退到豆包 ${DOUBAO_FALLBACK.model}\n`);
205
+ const response = await doubao.run({
206
+ localPath: request.localPath,
207
+ localMime: request.localMime ?? "video/mp4",
208
+ user: request.user,
209
+ fps: request.fps,
210
+ maxOutputTokens: spec.maxOutputTokens,
211
+ ...(request.system ? { system: request.system } : {}),
212
+ ...(request.responseJsonSchema ? { responseJsonSchema: request.responseJsonSchema } : {}),
213
+ ...(request.signal ? { signal: request.signal } : {}),
214
+ });
215
+ this.recordCall(task, response.attempts, response.usage);
216
+ return response;
217
+ }
218
+ catch (error) {
219
+ if (request.signal?.aborted)
220
+ throw error;
221
+ const detail = error instanceof LlmTransportError ? `${error.message} [${error.code}]` : error instanceof Error ? error.message : String(error);
222
+ failures.push(`${DOUBAO_FALLBACK.model}: ${detail}`);
223
+ }
224
+ }
225
+ else if (!doubao) {
226
+ failures.push("doubao: skipped (ARK_API_KEY not set)");
227
+ }
228
+ else {
229
+ failures.push("doubao: skipped (no local file to re-upload)");
230
+ }
231
+ throw new LlmTransportError("request_failed", "All video models failed (Gemini chain + Doubao).", { details: failures });
189
232
  },
190
233
  };
191
234
  }
235
+ // The Doubao fallback adapter, or null when ARK_API_KEY is unset. Cached per key.
236
+ // Overridable in tests to inject a fake Ark client.
237
+ doubaoAdapter() {
238
+ const apiKey = (process.env[DOUBAO_FALLBACK.apiKeyEnv] ?? "").trim();
239
+ if (!apiKey)
240
+ return null;
241
+ const key = `doubao ${DOUBAO_FALLBACK.model}`;
242
+ const cached = this.doubaoAdapters.get(key);
243
+ if (cached)
244
+ return cached;
245
+ const adapter = new DoubaoVideoModel(DOUBAO_FALLBACK.model, DOUBAO_FALLBACK.timeoutMs, DOUBAO_FALLBACK.maxAttempts, apiKey, DOUBAO_FALLBACK.baseUrl);
246
+ this.doubaoAdapters.set(key, adapter);
247
+ return adapter;
248
+ }
192
249
  async generateText(task, request) {
193
250
  const spec = LLM_TASK_REGISTRY[task];
194
251
  if (spec.mode !== "text")
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/llm/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/llm/router.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ export const EPISODE_ASSETS_SYSTEM = [
21
21
  " · **同一个实体只登记一条,绝不拆成多条**。**不同的角色绝不互相列为别名**——哪怕关系密切、常同框:大牛 和 丹尼·克罗斯 是两个人,别把丹尼的名字写进大牛的 aliases,反之亦然。判据:aliases 只放**同一个人/物**的不同叫法,不放另一个角色。",
22
22
  " · kind=actor/location/prop。",
23
23
  " · description=一句话说明**这个实体本身是谁 / 什么身份 / 什么东西**,非空。**只写它自身的身份、角色、关系或外形,绝不写它所处的场景 / 环境 / 地点 / 当时在发生什么**——「夜晚,私人飞机,黑色轿车列队」「苏家餐厅,满桌酒菜」这类是场景旁白,**不是人物描述**,严禁抄进人物 description。原文有对这个实体的自我描写就照抄 / 概括;原文没写(尤其龙套)就据台词 / 称呼 / 戏份补一句最简身份(如『苏家中间人』『急诊护士』『赵长河的手下』),实在无信息就写最简类属(『白发老者』『黑衣保镖』)。场景的 description 才写环境;道具写物件本身。",
24
- " · **登记范围**:人物、地点——凡在【本段正文】里出现的都登记(含背景龙套,群体/复合名如 轿夫4名/众人 照登);但**同一个地方只登记一次**,它的其它写法用 merges 归过去,别把一个地方的多种写法登成多条。道具——**只登记关键道具**:①剧情关键(信物/线索/推动情节,如第一集丢了第三集寻回的手机)或 ②跨≥2场需稳定复现、要美术保持一致的物件;一次性/纯功能/视觉无需追踪的(随手打电话的手机、背景杯子/路人车)不登记。",
24
+ " · **登记范围**:人物——登记每个能独立说话、拿取或交接道具、推动动作的具体单人角色,背景龙套使用 importance=background;众人、群众、路人、轿夫4名等无法区分成员的群体不登记为 actor,群体共同发声由正文的 group speaker 承载。地点——每个可独立布置和重复引用的稳定物理空间各登记一次;客厅、卧室、卫生间、大厅、广场、舞台、后台分别登记,相关空间用『豪宅·客厅』『豪宅·卧室』表达归属。地点其它写法用 merges 归一。道具——**只登记关键道具**:①剧情关键(信物/线索/推动情节,如第一集丢了第三集寻回的手机)或 ②跨≥2场需稳定复现、要美术保持一致的物件;一次性/纯功能/视觉无需追踪的(随手打电话的手机、背景杯子/路人车)不登记。",
25
25
  " · 已登记过的实体不要重复登记;若它这段有了新叫法,用 merges 补,不用在 newEntities 再列一遍。",
26
26
  "**merges —— 本段冒出一个称呼,其实是某个【已知设定】里已登记实体的别名(尚未登记过这个称呼)**:{from: 本段这个称呼, into: 已登记实体的 canonical}。判据:(1) 字面变体(大骨=大骨头=大骨(BigBull)、苏若雪=若雪);(2) 剧情推断同一(上下文/外观/关系/连续动作,如前文『小骨』本段点名『杰克·莱德』)。**只有当 from 确实是 into 的另一叫法时才 merge;名字或外观相似但是不同角色(如同为骷髅但身份不同)绝不 merge。** from 已经是独立登记的实体时,不要 merge(系统不会合并两个已登记实体)。",
27
27
  " · **地点同样要 merge——判据一样:是不是同一个场**。同一个地方的不同写法要合成一条:①字面变体(『车轮旁』『矿车车轮旁』『矿车车轮』是同一处;带不带平台/区域前缀如『Dawnfall Online - 棺木铺』=『棺木铺』);②剧情确定同一处(同一场戏在同一空间发生)。**不是同一个场就各自独立**(矿轨修造铺 和 棺木铺 是两个地方,不合)。别因为写法带了长前缀就当成新地点。",
@@ -1 +1 @@
1
- {"version":3,"file":"episode-assets.js","sourceRoot":"","sources":["../../../../src/llm/tasks/ingest/episode-assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"episode-assets.js","sourceRoot":"","sources":["../../../../src/llm/tasks/ingest/episode-assets.ts"],"names":[],"mappings":"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"}
@@ -13,9 +13,9 @@ export const TEXT_NORMALIZE_SYSTEM = [
13
13
  "必须把这些正文**原位放在输出最前面**(不加任何头),`# 第N集`/`## 场景` 只在它在源文本里真正出现的位置输出。",
14
14
  "绝不要把靠后出现的 `# 第N集` 提到开头。",
15
15
  "",
16
- "结构(只有源文本里真的出现对应边界时才写,绝不臆造;块可能从一场戏中间开始,那就直接从正文写起):",
16
+ "结构边界以源文本可验证的信息为准。标准剧本沿用原有集/场边界;小说和非标准文本依据地点切换、明显跳时、叙事线切换、明确转场或持久视觉状态变化建立场界。片段从一场中间开始时直接承接正文。",
17
17
  "# 第N集 标题 (出现集边界时;标题可省)",
18
- "## 场景 (出现新场景/新地点/新时空时)",
18
+ "## 场景 (出现新地点/新时空/新叙事线/明确转场/持久视觉状态变化时)",
19
19
  "- 时空: 内 日 (紧跟场景头,可省;内|外 日|夜)",
20
20
  "- 地点: 地点名 (紧跟场景头,可省;地点是场级)",
21
21
  "- 人物: 甲【状态】, 乙, 丙 (本场在场的具体单人角色;【】内写整套外观状态,可省)",
@@ -39,11 +39,16 @@ export const TEXT_NORMALIZE_SYSTEM = [
39
39
  " 源 `【字幕:回门日】` → `字幕:回门日`(画面文字是动作,裸行)",
40
40
  "出现残留的 △ 前缀、裸『名:台词』(该转成 [dlg])就是错的。",
41
41
  "",
42
- "正文口径:**纯文本、逐字保留**,不加任何标注,不润色、不扩写、不纠错、不加戏。人物/道具的在场只写在场景头的 `- 人物`/`- 道具`,不要写进正文。",
42
+ "正文口径:对白和内心独白逐字保留。动作与环境叙述转换成可直接拍摄的 Action,保持原文事实、因果、顺序、动作结果和人物状态,不新增原文没有表达的事件。人物/道具的在场只写在场景头的 `- 人物`/`- 道具`。",
43
43
  "",
44
+ "- Action 直接写具体人物名,明确谁对谁做什么、动作方向、作用对象和可见结果。身份明确时把『他/她/它/他们/对方/其中一人/另一个人』改为人物名;无法确认主体时保留可核查描述并避免猜测。把抽象心理转换为原文已有的表情、肢体、道具或环境反应。原文含机位、景别或镜头运动时保留。",
45
+ "- location 是可独立布置和重复引用的稳定物理空间。客厅、卧室、卫生间、大厅、广场、舞台、后台分别建场;相关空间统一写成『豪宅·客厅』『豪宅·卧室』。人物跨过门槛进入另一空间、镜头切到另一空间时建立新场。一个场只写一个主 location。",
46
+ "- 持久造型、地点外观或关键道具形态发生变化时,在变化动作之后建立同地点的新场;变化前后分别在 `- 人物`/`- 地点`/`- 道具` 标注对应状态。情绪、姿态和一次性动作不建状态。",
47
+ "- 同地点连续蒙太奇保留一场并用 [trans] 标明;跨地点蒙太奇按剪辑顺序拆成多个短场,每场写自己的地点、人物、道具和状态。",
44
48
  "- 人物 只列**具体单人角色**;家族/机构/群体/泛称(顾家、大房、林家、众人、随从们、丫鬟们…)绝不列入 - 人物(群体喊话用 group 说话人或写进 act 旁白)。",
45
49
  "- 说话人:有名字/有台词/露脸的具体人物一律用角色名作 actor 说话人(如 [dlg|传旨太监]),全剧同一人保持一致;kind 枚举 system|broadcast|offscreen|group 只给真正无实体的声音(画外广播、无法归到具体人的群体喊话)。同一个人不要一会儿 system 一会儿 actor。",
46
- "- 画面上出现的文字(字幕/标题卡/人物介绍条/时间地点卡)是画面内容,用 > [act] 记录并把文字原样写进正文;与某句对白完全重复的冗余字幕并入对应 [dlg]。",
50
+ "- 每条对白提取原文可见的情绪、语气或短促伴随动作写入第三段 emotion;影响走位、道具或连续性的动作单独写 Action。两人同时说话时输出相邻两条 [dlg],第二条 emotion 以『同时』开头。原文没有情绪证据时使用与语境一致的最小表演提示。",
51
+ "- 画面上出现的文字(字幕/标题卡/人物介绍条/时间地点卡)是画面内容,按裸 Action 行记录并把文字原样写进正文;与某句对白完全重复的冗余字幕并入对应 [dlg]。",
47
52
  "- note 只用于真正无法归入剧本、也不属于画面/对白的内容;能归入 act/dlg 的绝不用 note。",
48
53
  "源文本块的实质内容不得丢失。",
49
54
  ].join("\n");
@@ -51,7 +56,10 @@ export function buildNormalizeUser(chunk) {
51
56
  // Do NOT expose the chunk index — the model conflates a chunk number with an
52
57
  // episode number (`#15` → `# 第15集`). Chunk source spans are assigned by the
53
58
  // parser, not the model.
54
- return ["【待规范化的原文片段(可能从一场戏中间开始)】", "", chunk.text].join("\n");
59
+ const position = chunk.index === 0
60
+ ? "这是源文件开头;小说或非标准文本从第一个可确认的物理空间建立首场。"
61
+ : "这个片段可能承接上一片段的同一场;只有源文本出现真实场界时才建立新场。";
62
+ return ["【待规范化的原文片段】", position, "", chunk.text].join("\n");
55
63
  }
56
64
  function runtimeError(message, received) {
57
65
  return new CliError("INGEST NORMALIZE FAILED", message, {
@@ -1 +1 @@
1
- {"version":3,"file":"text-normalize.js","sourceRoot":"","sources":["../../../../src/llm/tasks/ingest/text-normalize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"text-normalize.js","sourceRoot":"","sources":["../../../../src/llm/tasks/ingest/text-normalize.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,10 @@ export type { SerialOutput, SerialScene, SerialEntity } from "../../../domain/in
4
4
  export declare const VIDEO_SERIAL_SYSTEM: string;
5
5
  export declare function buildSerialUser(episodeNo: number, contextText: string): string;
6
6
  export declare function toSerialOutput(input: unknown): SerialOutput;
7
- export declare function runVideoSerial(port: TaskVideoPort, file: VideoFileHandle, episodeNo: number, contextText: string, fps: number, signal?: AbortSignal): Promise<{
7
+ export declare function runVideoSerial(port: TaskVideoPort, file: VideoFileHandle, episodeNo: number, contextText: string, fps: number, signal?: AbortSignal, local?: {
8
+ path: string;
9
+ mime: string;
10
+ }): Promise<{
8
11
  md: string;
9
12
  output: SerialOutput;
10
13
  }>;
@@ -11,6 +11,7 @@
11
11
  // registering anchored provisionals for unknowns, and issuing a `还原` once a later
12
12
  // episode reveals a provisional's real identity.
13
13
  import { CliError, EXIT_RUNTIME } from "../../../common.js";
14
+ import { isCrowdName } from "../../../domain/ingest/serial-context.js";
14
15
  import { VIDEO_SERIAL_SCHEMA } from "../schemas.js";
15
16
  export const VIDEO_SERIAL_SYSTEM = "你是短剧视频转剧本的串行解析器。输入是**某一集**竖屏短剧视频(1-2 分钟)+ 一份到上一集为止累积的**已知设定**(人物花名册/剧情进展/未闭合线索)。" +
16
17
  "你要输出**一个结构化 JSON 对象**(严格符合系统给定的输出 schema),同时包含:①这一集**逐镜头、高保真**的剧本(scenes);②对已知设定的**增量维护**(registry_delta:人物花名册带状态标注、身份还原)+ 剧情线索(open_threads)。**只输出该 JSON,不要任何额外文字、解释或代码块包裹。**\n" +
@@ -22,7 +23,12 @@ export const VIDEO_SERIAL_SYSTEM = "你是短剧视频转剧本的串行解析
22
23
  "【说话人——用剧情锁定,别只看脸】短剧常有几个长相相似的中老年男性高管,单帧人脸会认错。先从台词内容、彼此称呼(谁叫谁「哥」「X总」)、场景关系(谁求谁、谁训谁、谁下跪)推断这场在场是谁、谁对谁说,再定说话人。剧情锁定优先于外貌。\n" +
23
24
  "【命名优先级】书面正式姓名(人物介绍条/工牌/来电显示)> 台词喊出的本名 > 纯描述名。有书面正式姓名就用它当规范名,哪怕全集只喊职务。绝不凭空捏造带姓氏的假名。\n" +
24
25
  "【画面字幕铁律】每句台词底部压的对白字幕是台词的冗余复制,**必须丢弃**,只保留对应的 dlg,绝不在 act 里复述台词。只有承载新信息的画面文字(人物介绍条/身份头衔/时间地点交代/系统提示/关键道具上的字)才写进 act。\n" +
25
- "【状态=造型】state / states = 一个角色一整套稳定扮相(着装+发型+持续妆造,如「深灰西装」),不是情绪/姿态,也不是单件衣服。给某角色标造型前,先看已知设定里他名下的「已知造型」清单——只要本集是他已列过的某套扮相(哪怕只拍到上半身/换了角度/光线不同/多看到少看到一件单品),**逐字照抄清单里那个造型名**,只有整套换装才新建。**造型名只填档位名本身,绝不带括号、斜杠、逗号或任何描述文字**(描述放实体 appearance,不要塞进造型名)。";
26
+ "【状态=造型】state / states = 一个角色一整套稳定扮相(着装+发型+持续妆造,如「深灰西装」),不是情绪/姿态,也不是单件衣服。给某角色标造型前,先看已知设定里他名下的「已知造型」清单——只要本集是他已列过的某套扮相(哪怕只拍到上半身/换了角度/光线不同/多看到少看到一件单品),**逐字照抄清单里那个造型名**,只有整套换装才新建。**造型名只填档位名本身,绝不带括号、斜杠、逗号或任何描述文字**(描述放实体 appearance,不要塞进造型名)。\n" +
27
+ "【场界与地点】一场是地点、连续时段、叙事线和全部持久视觉状态连续的生产单元。客厅、卧室、卫生间、大厅、广场、舞台、后台分别使用独立 location;相关空间统一命名为『豪宅·客厅』『豪宅·卧室』。人物跨过门槛进入另一空间、镜头切到另一空间、明显跳时、切换叙事线、明确转场或持久状态变化时建立新 scene。一个 scene 只写一个主 location。\n" +
28
+ "【状态变化】人物换整套服装、变身、脱衣形成可持续新外观,地点被毁或关键道具明显变形时,把变化动作放在前一 scene 末尾,从下一 scene 起绑定新 state;同地点同时段也按状态边界拆场。情绪、姿态和一次性动作保留在 anchor,不建立 state。\n" +
29
+ "【动作】act 使用人物规范名,写清行动者、动作、作用对象、空间方向和可见结果;画面允许时补景别、机位、镜头运动和焦点。用画面可见的表情、肢体、道具或环境反应表达抽象心理。\n" +
30
+ "【对白与群体】dlg/think 保留原话,每条写可观察的情绪、语气或短促伴随动作。两人同时说话时输出相邻两条 dlg,第二条 emotion 以『同时』开头。具体单人使用规范名;无法区分成员的众人、群众、路人等共同发声时 speaker 写『group:群体名』,不列入 characters 和 registry_delta。\n" +
31
+ "【蒙太奇】同地点连续蒙太奇保留一场;跨地点蒙太奇按剪辑顺序拆成多个短 scene,每场绑定自己的 location、characters、props 和 state,并用 act 明确蒙太奇开始、切换和结束。";
26
32
  export function buildSerialUser(episodeNo, contextText) {
27
33
  const ctx = contextText.trim()
28
34
  ? `========== 已知设定(到上一集为止,规范名以此为准) ==========\n${contextText}\n`
@@ -91,6 +97,8 @@ export function toSerialOutput(input) {
91
97
  const name = asStr(c.name);
92
98
  if (!name)
93
99
  return [];
100
+ if (isCrowdName(name))
101
+ return [];
94
102
  const state = cleanState(c.state);
95
103
  return [state ? { name, state } : { name }];
96
104
  }),
@@ -130,6 +138,8 @@ export function toSerialOutput(input) {
130
138
  const kind = asStr(e.kind);
131
139
  if (!name || (kind !== "actor" && kind !== "location" && kind !== "prop"))
132
140
  continue;
141
+ if (kind === "actor" && isCrowdName(name))
142
+ continue;
133
143
  const ent = {
134
144
  name,
135
145
  kind,
@@ -205,13 +215,16 @@ export function toSerialOutput(input) {
205
215
  }
206
216
  // Returns the raw JSON text (pretty-printed, persisted for human review) alongside
207
217
  // the parsed SerialOutput the pipeline folds into context.
208
- export async function runVideoSerial(port, file, episodeNo, contextText, fps, signal) {
218
+ export async function runVideoSerial(port, file, episodeNo, contextText, fps, signal, local) {
209
219
  const response = await port.generate({
210
220
  file,
211
221
  system: VIDEO_SERIAL_SYSTEM,
212
222
  user: buildSerialUser(episodeNo, contextText),
213
223
  fps,
214
224
  responseJsonSchema: VIDEO_SERIAL_SCHEMA,
225
+ // Lets a cross-provider fallback (Doubao) re-upload the same transcode when the
226
+ // Gemini handle can't be reused. The Gemini path ignores these.
227
+ ...(local ? { localPath: local.path, localMime: local.mime } : {}),
215
228
  ...(signal ? { signal } : {}),
216
229
  });
217
230
  const raw = response.text.trim();