@lingjingai/scriptctl 0.56.0 → 0.57.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/changes/0.57.0.md +14 -0
- package/changes/0.57.1.md +13 -0
- package/dist/cli/register-workflows.js +8 -0
- package/dist/cli/register-workflows.js.map +1 -1
- package/dist/domain/ingest/video-apply.js +15 -1
- package/dist/domain/ingest/video-apply.js.map +1 -1
- package/dist/domain/ingest/video-context.d.ts +2 -0
- package/dist/domain/ingest/video-context.js +8 -1
- package/dist/domain/ingest/video-context.js.map +1 -1
- package/dist/domain/ingest/video-serial-md.js +14 -1
- package/dist/domain/ingest/video-serial-md.js.map +1 -1
- package/dist/infra/ingest/workspace-lock.d.ts +1 -0
- package/dist/infra/ingest/workspace-lock.js +32 -0
- package/dist/infra/ingest/workspace-lock.js.map +1 -0
- package/dist/llm/tasks/ingest/video-serial.js +13 -1
- package/dist/llm/tasks/ingest/video-serial.js.map +1 -1
- package/dist/usecases/ingest/command.js +5 -0
- package/dist/usecases/ingest/command.js.map +1 -1
- package/dist/usecases/ingest/skip-video-episode.d.ts +4 -0
- package/dist/usecases/ingest/skip-video-episode.js +112 -0
- package/dist/usecases/ingest/skip-video-episode.js.map +1 -0
- package/dist/usecases/ingest/status.d.ts +12 -0
- package/dist/usecases/ingest/status.js +36 -8
- package/dist/usecases/ingest/status.js.map +1 -1
- package/dist/usecases/ingest/video-pipeline.d.ts +38 -0
- package/dist/usecases/ingest/video-pipeline.js +83 -34
- package/dist/usecases/ingest/video-pipeline.js.map +1 -1
- package/dist/usecases/ingest/video-skip-state.d.ts +29 -0
- package/dist/usecases/ingest/video-skip-state.js +148 -0
- package/dist/usecases/ingest/video-skip-state.js.map +1 -0
- package/package.json +1 -1
- package/skills/scriptctl/SKILL.md +2 -2
- package/skills/scriptctl/references/ingest-workflow.md +26 -4
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
import { CliError, EXIT_INPUT, EXIT_OK } from "../../common.js";
|
|
3
|
+
import { emptyContext } from "../../domain/ingest/video-context.js";
|
|
4
|
+
import { emptyV4IdentityMap } from "../../domain/script/v4/from-v3.js";
|
|
5
|
+
import { withIngestWorkspaceLock } from "../../infra/ingest/workspace-lock.js";
|
|
6
|
+
import { WorkspaceStore } from "../../infra/ingest/workspace-store.js";
|
|
7
|
+
import { parseIngestErrorSidecar } from "./failure.js";
|
|
8
|
+
import { deriveIngestStatus } from "./status.js";
|
|
9
|
+
import { deriveVideoTitle, migrateVideoManifest, publishFinalizedVideoWorkspace, readCurrentVideoManifest, } from "./video-pipeline.js";
|
|
10
|
+
import { assertVideoSkipSources, readVideoSkipLedger, reconcileVideoSkips, writeVideoSkipLedger, } from "./video-skip-state.js";
|
|
11
|
+
function inputError(message, code, hint, actual) {
|
|
12
|
+
return new CliError(message, {
|
|
13
|
+
exitCode: EXIT_INPUT,
|
|
14
|
+
errorCode: code,
|
|
15
|
+
hint,
|
|
16
|
+
data: { actual },
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function episodeOf(value) {
|
|
20
|
+
const episode = Number(value);
|
|
21
|
+
if (!Number.isInteger(episode) || episode <= 0) {
|
|
22
|
+
throw inputError("--episode must be a positive integer.", "INGEST_SKIP_EPISODE_INVALID", "Pass the current next_episode from `scriptctl ingest status`.", [String(value)]);
|
|
23
|
+
}
|
|
24
|
+
return episode;
|
|
25
|
+
}
|
|
26
|
+
async function skipVideoEpisodeUnlocked(workspacePath, episode, reason) {
|
|
27
|
+
const store = new WorkspaceStore(workspacePath);
|
|
28
|
+
if (!store.has("manifest.json")) {
|
|
29
|
+
throw inputError("The ingest workspace does not exist.", "INGEST_SKIP_WORKSPACE_MISSING", "Run video ingest first, then retry the failed episode or skip it.", [workspacePath]);
|
|
30
|
+
}
|
|
31
|
+
const header = store.readJson("manifest.json");
|
|
32
|
+
if (header.source?.kind === "text") {
|
|
33
|
+
throw inputError("Only video ingest episodes can be skipped.", "INGEST_SKIP_WRONG_PIPELINE", "Use skip only with a video ingest workspace.", [workspacePath]);
|
|
34
|
+
}
|
|
35
|
+
const manifest = readCurrentVideoManifest(store);
|
|
36
|
+
if (!manifest) {
|
|
37
|
+
throw inputError("The video ingest manifest is missing.", "INGEST_SKIP_WORKSPACE_MISSING", "Run video ingest first.", [workspacePath]);
|
|
38
|
+
}
|
|
39
|
+
const sourceEpisode = manifest.episodes.find((candidate) => candidate.episode === episode);
|
|
40
|
+
if (!sourceEpisode) {
|
|
41
|
+
throw inputError("The requested episode is not in the video source.", "INGEST_SKIP_EPISODE_NOT_FOUND", "Pass an episode listed in manifest.json.", [`episode=${episode}`]);
|
|
42
|
+
}
|
|
43
|
+
const ledger = readVideoSkipLedger(store);
|
|
44
|
+
assertVideoSkipSources(ledger.episodes, manifest.episodes);
|
|
45
|
+
let ctx = store.has("context.json") ? store.readJson("context.json") : emptyContext();
|
|
46
|
+
const existing = ledger.episodes.find((record) => record.episode === episode);
|
|
47
|
+
if (existing) {
|
|
48
|
+
const currentManifest = migrateVideoManifest(store, manifest);
|
|
49
|
+
ctx = reconcileVideoSkips(store, ctx, ledger.episodes);
|
|
50
|
+
const identityMap = store.has("v4_identity_map.json")
|
|
51
|
+
? store.readJson("v4_identity_map.json")
|
|
52
|
+
: emptyV4IdentityMap();
|
|
53
|
+
publishFinalizedVideoWorkspace(store, currentManifest.episodes, ctx, deriveVideoTitle(currentManifest.source.path), identityMap, ledger.episodes);
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
const nextEpisode = ctx.lastEpisode + 1;
|
|
57
|
+
if (episode !== nextEpisode) {
|
|
58
|
+
throw inputError("Only the next unresolved video episode can be skipped.", "INGEST_SKIP_NOT_NEXT", "Read status.next_episode and skip exactly that episode.", [`requested=${episode}`, `next_episode=${nextEpisode}`]);
|
|
59
|
+
}
|
|
60
|
+
const episodeRel = `ep/ep_${String(episode).padStart(3, "0")}`;
|
|
61
|
+
if (store.has(`${episodeRel}.json`)) {
|
|
62
|
+
throw inputError("A parsed episode cannot be skipped.", "INGEST_SKIP_ALREADY_PARSED", "Continue ingest from the next unresolved episode.", [`episode=${episode}`]);
|
|
63
|
+
}
|
|
64
|
+
if (!store.has(`${episodeRel}.error.json`)) {
|
|
65
|
+
throw inputError("The episode has no recorded ingest failure.", "INGEST_SKIP_FAILURE_REQUIRED", "Run ingest for this episode first; a typed error sidecar is required before manual skip.", [`episode=${episode}`]);
|
|
66
|
+
}
|
|
67
|
+
const sidecar = parseIngestErrorSidecar(store.readJson(`${episodeRel}.error.json`));
|
|
68
|
+
if (!sidecar || sidecar.unit.episode !== episode) {
|
|
69
|
+
throw inputError("The episode error sidecar is invalid.", "INGEST_SKIP_FAILURE_INVALID", "Regenerate the typed failure by rerunning video ingest.", [`${episodeRel}.error.json`]);
|
|
70
|
+
}
|
|
71
|
+
const record = {
|
|
72
|
+
episode,
|
|
73
|
+
skipped_at: new Date().toISOString(),
|
|
74
|
+
reason,
|
|
75
|
+
source_sha256: sourceEpisode.sha256,
|
|
76
|
+
failure: sidecar.failure,
|
|
77
|
+
attempts: sidecar.attempts,
|
|
78
|
+
};
|
|
79
|
+
const currentManifest = migrateVideoManifest(store, manifest);
|
|
80
|
+
writeVideoSkipLedger(store, { schema_version: 1, episodes: [...ledger.episodes, record] });
|
|
81
|
+
ctx = reconcileVideoSkips(store, ctx, [...ledger.episodes, record]);
|
|
82
|
+
const identityMap = store.has("v4_identity_map.json")
|
|
83
|
+
? store.readJson("v4_identity_map.json")
|
|
84
|
+
: emptyV4IdentityMap();
|
|
85
|
+
publishFinalizedVideoWorkspace(store, currentManifest.episodes, ctx, deriveVideoTitle(currentManifest.source.path), identityMap, [...ledger.episodes, record]);
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
export async function commandSkipVideoEpisode(opts) {
|
|
89
|
+
const workspacePath = path.resolve(typeof opts["workspace_path"] === "string" ? opts["workspace_path"] : "workspace");
|
|
90
|
+
const episode = episodeOf(opts["episode"]);
|
|
91
|
+
const reason = typeof opts["reason"] === "string" ? opts["reason"].trim() : "";
|
|
92
|
+
if (!reason) {
|
|
93
|
+
throw inputError("--reason is required.", "INGEST_SKIP_REASON_REQUIRED", "Record why this episode cannot be parsed.", ["--reason <text>"]);
|
|
94
|
+
}
|
|
95
|
+
const changed = await withIngestWorkspaceLock(workspacePath, () => skipVideoEpisodeUnlocked(workspacePath, episode, reason));
|
|
96
|
+
const status = deriveIngestStatus(workspacePath);
|
|
97
|
+
return [{
|
|
98
|
+
text: changed
|
|
99
|
+
? `Episode ${episode} skipped; ingest can continue at episode ${status.next_episode ?? "end"}.`
|
|
100
|
+
: `Episode ${episode} was already skipped; no changes made.`,
|
|
101
|
+
data: {
|
|
102
|
+
workspace: workspacePath,
|
|
103
|
+
episode,
|
|
104
|
+
changed,
|
|
105
|
+
skipped_episodes: status.skipped_episodes ?? [],
|
|
106
|
+
complete: status.complete ?? false,
|
|
107
|
+
next_episode: status.next_episode ?? null,
|
|
108
|
+
script_path: path.join(workspacePath, "script.json"),
|
|
109
|
+
},
|
|
110
|
+
}, EXIT_OK];
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=skip-video-episode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skip-video-episode.js","sourceRoot":"","sources":["../../../src/usecases/ingest/skip-video-episode.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,13 @@ export interface IngestFailureSummary {
|
|
|
21
21
|
terminal: number;
|
|
22
22
|
by_type: Partial<Record<FailureType, number>>;
|
|
23
23
|
}
|
|
24
|
+
export interface IngestSkipSummary {
|
|
25
|
+
episode: number;
|
|
26
|
+
skipped_at: string;
|
|
27
|
+
reason: string;
|
|
28
|
+
failure_type: FailureType;
|
|
29
|
+
failure_code: string;
|
|
30
|
+
}
|
|
24
31
|
export interface IngestStatus {
|
|
25
32
|
workspace: string;
|
|
26
33
|
exists: boolean;
|
|
@@ -43,6 +50,11 @@ export interface IngestStatus {
|
|
|
43
50
|
remaining?: number;
|
|
44
51
|
complete?: boolean;
|
|
45
52
|
next_episode?: number | null;
|
|
53
|
+
parsed?: number;
|
|
54
|
+
skipped?: number;
|
|
55
|
+
skipped_episodes?: number[];
|
|
56
|
+
has_skips?: boolean;
|
|
57
|
+
skips?: IngestSkipSummary[];
|
|
46
58
|
}
|
|
47
59
|
export declare function deriveIngestStatus(workspacePath: string): IngestStatus;
|
|
48
60
|
export declare function commandIngestStatus(opts: Dict): [CommandOutput, number];
|
|
@@ -8,8 +8,10 @@ import * as fs from "node:fs";
|
|
|
8
8
|
import * as path from "node:path";
|
|
9
9
|
import { EXIT_OK } from "../../common.js";
|
|
10
10
|
import { createOperationalFailure, } from "../../failures.js";
|
|
11
|
+
import { WorkspaceStore } from "../../infra/ingest/workspace-store.js";
|
|
11
12
|
import { parseIngestErrorSidecar, } from "./failure.js";
|
|
12
13
|
import { summarizeTimings } from "./timings.js";
|
|
14
|
+
import { readVideoSkipLedger } from "./video-skip-state.js";
|
|
13
15
|
const strOf = (v) => (v === null || v === undefined ? "" : String(v));
|
|
14
16
|
function readTimings(root) {
|
|
15
17
|
try {
|
|
@@ -65,8 +67,11 @@ function legacyError(pass, unit, message) {
|
|
|
65
67
|
};
|
|
66
68
|
}
|
|
67
69
|
// Collect the error sidecars a failed run leaves behind (cleared on unit success).
|
|
68
|
-
function collectErrors(root, pass) {
|
|
69
|
-
return listSuffix(root, pass, ".error.json").
|
|
70
|
+
function collectErrors(root, pass, ignoredUnits = new Set()) {
|
|
71
|
+
return listSuffix(root, pass, ".error.json").filter((name) => {
|
|
72
|
+
const unit = name.replace(/\.error\.json$/, "");
|
|
73
|
+
return !ignoredUnits.has(unit);
|
|
74
|
+
}).map((name) => {
|
|
70
75
|
const unit = name.replace(/\.error\.json$/, "");
|
|
71
76
|
try {
|
|
72
77
|
const value = JSON.parse(fs.readFileSync(path.join(root, pass, name), "utf-8"));
|
|
@@ -139,16 +144,20 @@ function textPasses(root, manifest) {
|
|
|
139
144
|
];
|
|
140
145
|
return { passes, units: normalize };
|
|
141
146
|
}
|
|
142
|
-
function videoPasses(root, manifest) {
|
|
147
|
+
function videoPasses(root, manifest, skips) {
|
|
143
148
|
const total = manifest.episodes?.length ?? 0;
|
|
149
|
+
const skippedEpisodes = new Set(skips.map((record) => record.episode));
|
|
144
150
|
let acceptedPrefix = 0;
|
|
151
|
+
let parsed = 0;
|
|
145
152
|
try {
|
|
146
153
|
const context = JSON.parse(fs.readFileSync(path.join(root, "context.json"), "utf-8"));
|
|
147
154
|
const lastEpisode = typeof context.lastEpisode === "number" && Number.isInteger(context.lastEpisode)
|
|
148
155
|
? Math.min(Math.max(context.lastEpisode, 0), total)
|
|
149
156
|
: 0;
|
|
150
157
|
for (let episode = 1; episode <= lastEpisode; episode += 1) {
|
|
151
|
-
if (
|
|
158
|
+
if (has(root, `ep/ep_${String(episode).padStart(3, "0")}.json`))
|
|
159
|
+
parsed += 1;
|
|
160
|
+
else if (!skippedEpisodes.has(episode))
|
|
152
161
|
break;
|
|
153
162
|
acceptedPrefix = episode;
|
|
154
163
|
}
|
|
@@ -161,13 +170,16 @@ function videoPasses(root, manifest) {
|
|
|
161
170
|
const serial = {
|
|
162
171
|
total,
|
|
163
172
|
done: acceptedPrefix,
|
|
164
|
-
failed:
|
|
173
|
+
failed: listSuffix(root, "ep", ".error.json").filter((name) => {
|
|
174
|
+
const match = name.match(/^ep_(\d+)\.error\.json$/);
|
|
175
|
+
return !match || !skippedEpisodes.has(Number(match[1]));
|
|
176
|
+
}).length,
|
|
165
177
|
};
|
|
166
178
|
const passes = [
|
|
167
179
|
{ name: "serial", done: total > 0 && serial.done >= total && serial.failed === 0, unit: serial },
|
|
168
180
|
{ name: "finalize", done: readFinalizedVideoEpisodeCount(root) === acceptedPrefix },
|
|
169
181
|
];
|
|
170
|
-
return { passes, units: serial };
|
|
182
|
+
return { passes, units: serial, parsed };
|
|
171
183
|
}
|
|
172
184
|
export function deriveIngestStatus(workspacePath) {
|
|
173
185
|
const root = path.resolve(workspacePath);
|
|
@@ -180,9 +192,12 @@ export function deriveIngestStatus(workspacePath) {
|
|
|
180
192
|
};
|
|
181
193
|
}
|
|
182
194
|
const kind = manifest.source?.kind === "text" ? "text" : "video";
|
|
183
|
-
const
|
|
195
|
+
const skipRecords = kind === "video" ? readVideoSkipLedger(new WorkspaceStore(root)).episodes : [];
|
|
196
|
+
const video = kind === "video" ? videoPasses(root, manifest, skipRecords) : null;
|
|
197
|
+
const { passes, units } = kind === "text" ? textPasses(root, manifest) : video;
|
|
184
198
|
const errorPasses = kind === "text" ? ["pass2"] : ["ep"];
|
|
185
|
-
const
|
|
199
|
+
const skippedUnits = new Set(skipRecords.map((record) => `ep_${String(record.episode).padStart(3, "0")}`));
|
|
200
|
+
const errors = errorPasses.flatMap((pass) => collectErrors(root, pass, skippedUnits));
|
|
186
201
|
const script = has(root, "script.json");
|
|
187
202
|
const validation = readValidation(root);
|
|
188
203
|
if (validation && !validation.ok) {
|
|
@@ -215,6 +230,17 @@ export function deriveIngestStatus(workspacePath) {
|
|
|
215
230
|
remaining: Math.max(0, units.total - units.done),
|
|
216
231
|
complete: units.total > 0 && units.done >= units.total && units.failed === 0,
|
|
217
232
|
next_episode: units.done >= units.total ? null : units.done + 1,
|
|
233
|
+
parsed: video?.parsed ?? 0,
|
|
234
|
+
skipped: skipRecords.filter((record) => record.episode <= units.done).length,
|
|
235
|
+
skipped_episodes: skipRecords.map((record) => record.episode),
|
|
236
|
+
has_skips: skipRecords.length > 0,
|
|
237
|
+
skips: skipRecords.map((record) => ({
|
|
238
|
+
episode: record.episode,
|
|
239
|
+
skipped_at: record.skipped_at,
|
|
240
|
+
reason: record.reason,
|
|
241
|
+
failure_type: record.failure.failure_type,
|
|
242
|
+
failure_code: record.failure.failure_code,
|
|
243
|
+
})),
|
|
218
244
|
}
|
|
219
245
|
: {};
|
|
220
246
|
return {
|
|
@@ -238,6 +264,8 @@ function humanLines(s) {
|
|
|
238
264
|
lines.push(timingLine(s.timings));
|
|
239
265
|
if (s.validation)
|
|
240
266
|
lines.push(`validation: ${s.validation.ok ? "ok" : `${s.validation.errors} errors`}, ${s.validation.warnings} warnings`);
|
|
267
|
+
if (s.has_skips)
|
|
268
|
+
lines.push(`skipped episodes: ${s.skipped_episodes?.join(", ")}`);
|
|
241
269
|
if (s.state === "failed") {
|
|
242
270
|
for (const error of s.errors.slice(0, 3)) {
|
|
243
271
|
lines.push(`${error.unit}: ${error.failure_type}/${error.failure_code} · ${error.retryable ? "retryable" : "terminal"}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/usecases/ingest/status.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/usecases/ingest/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
+
import { type VideoSourceEpisodeIdentity } from "../../domain/ingest/video-source-evolution.js";
|
|
2
|
+
import { type V4IdentityMap } from "../../domain/script/v4/from-v3.js";
|
|
3
|
+
import { validateScriptV4 } from "../../domain/script/v4/validation.js";
|
|
4
|
+
import { type RunContext } from "../../domain/ingest/video-context.js";
|
|
5
|
+
import type { VideoEpisodeDoc } from "../../domain/ingest/video-records.js";
|
|
6
|
+
import { WorkspaceStore } from "../../infra/ingest/workspace-store.js";
|
|
1
7
|
import { type LlmTaskExecutor, type VideoUploadMode } from "../../llm/types.js";
|
|
8
|
+
import { type VideoSkipRecord } from "./video-skip-state.js";
|
|
9
|
+
export declare const VIDEO_PIPELINE_VERSION = "13";
|
|
2
10
|
export interface VideoIngestOptions {
|
|
3
11
|
sourcePath: string;
|
|
4
12
|
workspacePath: string;
|
|
@@ -14,6 +22,8 @@ export interface VideoIngestReport {
|
|
|
14
22
|
episodes: number;
|
|
15
23
|
processed: number;
|
|
16
24
|
reused: number;
|
|
25
|
+
skipped: number;
|
|
26
|
+
skippedEpisodes: number[];
|
|
17
27
|
completed: number;
|
|
18
28
|
remaining: number;
|
|
19
29
|
complete: boolean;
|
|
@@ -31,5 +41,33 @@ export interface VideoIngestReport {
|
|
|
31
41
|
warnings: number;
|
|
32
42
|
};
|
|
33
43
|
}
|
|
44
|
+
export type VideoSourceKind = "video-file" | "video-directory";
|
|
45
|
+
export interface VideoIngestManifest {
|
|
46
|
+
version: 2;
|
|
47
|
+
pipeline_version: string;
|
|
48
|
+
updated: string;
|
|
49
|
+
source: {
|
|
50
|
+
kind: VideoSourceKind;
|
|
51
|
+
path: string;
|
|
52
|
+
sha256: string;
|
|
53
|
+
};
|
|
54
|
+
episodes: VideoSourceEpisodeIdentity[];
|
|
55
|
+
fps: number;
|
|
56
|
+
}
|
|
34
57
|
export declare function assertInlineVideoSize(filePath: string, episode: number): void;
|
|
58
|
+
export declare function readCurrentVideoManifest(store: WorkspaceStore): VideoIngestManifest | null;
|
|
59
|
+
export declare function migrateVideoManifest(store: WorkspaceStore, manifest: VideoIngestManifest): VideoIngestManifest;
|
|
60
|
+
interface FinalizeResult {
|
|
61
|
+
initial: Record<string, unknown>;
|
|
62
|
+
final: Record<string, unknown>;
|
|
63
|
+
idMap: unknown;
|
|
64
|
+
validation: ReturnType<typeof validateScriptV4>;
|
|
65
|
+
identityMap: V4IdentityMap;
|
|
66
|
+
}
|
|
67
|
+
export declare function finalizeVideoScript(docs: VideoEpisodeDoc[], ctx: RunContext, title: string, priorIdentity: V4IdentityMap, skips?: readonly VideoSkipRecord[]): FinalizeResult;
|
|
68
|
+
export declare function publishFinalizedVideoWorkspace(store: WorkspaceStore, episodes: ReadonlyArray<{
|
|
69
|
+
episode: number;
|
|
70
|
+
}>, ctx: RunContext, title: string, identityMap: V4IdentityMap, skips: readonly VideoSkipRecord[]): FinalizeResult;
|
|
35
71
|
export declare function runVideoIngest(opts: VideoIngestOptions): Promise<VideoIngestReport>;
|
|
72
|
+
export declare function deriveVideoTitle(sourcePath: string): string;
|
|
73
|
+
export {};
|
|
@@ -31,11 +31,14 @@ import { discoverEpisodes } from "../../infra/ingest/video-discovery.js";
|
|
|
31
31
|
import { snapshotVideoSource, videoSourceFingerprint, } from "../../infra/ingest/video-source-snapshot.js";
|
|
32
32
|
import { transcodeForUpload } from "../../infra/ingest/video-transcode.js";
|
|
33
33
|
import { WorkspaceStore } from "../../infra/ingest/workspace-store.js";
|
|
34
|
+
import { withIngestWorkspaceLock } from "../../infra/ingest/workspace-lock.js";
|
|
34
35
|
import { runVideoSerial } from "../../llm/tasks/ingest/video-serial.js";
|
|
35
36
|
import { MAX_INLINE_VIDEO_BYTES, } from "../../llm/types.js";
|
|
36
37
|
import { UsageLedger } from "./usage-report.js";
|
|
37
38
|
import { createEpisodeErrorSidecar, recoveryHint } from "./failure.js";
|
|
38
|
-
|
|
39
|
+
import { assertVideoSkipSources, markSkippedEpisodes, readAcceptedVideoDocs, readVideoSkipLedger, reconcileVideoSkips, } from "./video-skip-state.js";
|
|
40
|
+
export const VIDEO_PIPELINE_VERSION = "13"; // manual skip ledger + crash-safe skipped context checkpoints
|
|
41
|
+
const COMPATIBLE_VIDEO_PIPELINE_VERSIONS = new Set(["12", VIDEO_PIPELINE_VERSION]);
|
|
39
42
|
const pad = (n) => String(n).padStart(3, "0");
|
|
40
43
|
function fileSize(p) {
|
|
41
44
|
try {
|
|
@@ -75,20 +78,31 @@ function sourceMismatch(reason) {
|
|
|
75
78
|
data: { actual: [reason] },
|
|
76
79
|
});
|
|
77
80
|
}
|
|
78
|
-
function
|
|
81
|
+
export function readCurrentVideoManifest(store) {
|
|
79
82
|
if (!store.has("manifest.json"))
|
|
80
83
|
return null;
|
|
81
84
|
const header = store.readJson("manifest.json");
|
|
82
|
-
if (header.pipeline_version
|
|
85
|
+
if (!header.pipeline_version || !COMPATIBLE_VIDEO_PIPELINE_VERSIONS.has(header.pipeline_version)) {
|
|
83
86
|
throw new CliError("This workspace uses an incompatible video-ingest pipeline.", {
|
|
84
87
|
exitCode: EXIT_INPUT,
|
|
85
88
|
errorCode: "INGEST_PIPELINE_MISMATCH",
|
|
86
89
|
hint: "Choose a fresh --workspace-path and run ingest again.",
|
|
87
|
-
data: { actual: [`workspace pipeline ${header.pipeline_version ?? "(missing)"}; current ${
|
|
90
|
+
data: { actual: [`workspace pipeline ${header.pipeline_version ?? "(missing)"}; current ${VIDEO_PIPELINE_VERSION}`] },
|
|
88
91
|
});
|
|
89
92
|
}
|
|
90
93
|
return store.readJson("manifest.json");
|
|
91
94
|
}
|
|
95
|
+
export function migrateVideoManifest(store, manifest) {
|
|
96
|
+
if (manifest.pipeline_version === VIDEO_PIPELINE_VERSION)
|
|
97
|
+
return manifest;
|
|
98
|
+
const migrated = {
|
|
99
|
+
...manifest,
|
|
100
|
+
pipeline_version: VIDEO_PIPELINE_VERSION,
|
|
101
|
+
updated: new Date().toISOString(),
|
|
102
|
+
};
|
|
103
|
+
store.writeJson("manifest.json", migrated);
|
|
104
|
+
return migrated;
|
|
105
|
+
}
|
|
92
106
|
function checkSourceRoot(previous, sourceKind, sourcePath) {
|
|
93
107
|
if (!previous)
|
|
94
108
|
return;
|
|
@@ -118,6 +132,7 @@ function checkLifecycle(store, previous, episodes, force) {
|
|
|
118
132
|
"timing.jsonl",
|
|
119
133
|
"usage.json",
|
|
120
134
|
"v4_identity_map.json",
|
|
135
|
+
"skipped.json",
|
|
121
136
|
])
|
|
122
137
|
fs.rmSync(store.path(f), { force: true });
|
|
123
138
|
}
|
|
@@ -155,6 +170,23 @@ function renameDocs(docs, alias) {
|
|
|
155
170
|
for (const sc of c.scenes) {
|
|
156
171
|
for (const ch of sc.characters)
|
|
157
172
|
ch.name = applyRename(ch.name, alias) ?? ch.name;
|
|
173
|
+
if (sc.location)
|
|
174
|
+
sc.location = applyRename(sc.location, alias) ?? sc.location;
|
|
175
|
+
// Rename props through the alias map, then collapse any pairs that now
|
|
176
|
+
// share a canonical name (surface A + surface B → same entity).
|
|
177
|
+
const renamedProps = [];
|
|
178
|
+
const seenProps = new Set();
|
|
179
|
+
for (const prop of sc.props) {
|
|
180
|
+
const name = (applyRename(prop, alias) ?? prop).trim();
|
|
181
|
+
if (!name)
|
|
182
|
+
continue;
|
|
183
|
+
const key = name.normalize("NFC").replace(/\s+/g, " ").trim().toLowerCase();
|
|
184
|
+
if (seenProps.has(key))
|
|
185
|
+
continue;
|
|
186
|
+
seenProps.add(key);
|
|
187
|
+
renamedProps.push(name);
|
|
188
|
+
}
|
|
189
|
+
sc.props = renamedProps;
|
|
158
190
|
for (const an of sc.anchors) {
|
|
159
191
|
an.speaker = applyRename(an.speaker, alias);
|
|
160
192
|
if (an.kind === "act")
|
|
@@ -198,7 +230,7 @@ function videoIdentityKeys(assets, registry) {
|
|
|
198
230
|
}
|
|
199
231
|
// Deterministic tail shared with text ingest. Pure (no LLM); ms-fast, so it runs
|
|
200
232
|
// after every episode (streaming) and once at the end (gated on validation).
|
|
201
|
-
function
|
|
233
|
+
export function finalizeVideoScript(docs, ctx, title, priorIdentity, skips = []) {
|
|
202
234
|
const alias = buildAliasMap(ctx.registry);
|
|
203
235
|
const renamed = renameDocs(docs, alias);
|
|
204
236
|
const nameScript = docsToNameScript(renamed, title);
|
|
@@ -217,23 +249,41 @@ function finalizeScript(docs, ctx, title, priorIdentity) {
|
|
|
217
249
|
...identityKeys,
|
|
218
250
|
});
|
|
219
251
|
const scriptV4 = converted.script;
|
|
252
|
+
markSkippedEpisodes(scriptV4, skips);
|
|
220
253
|
const structuralValidation = validateScriptV4(scriptV4);
|
|
221
254
|
const validation = {
|
|
222
255
|
...structuralValidation,
|
|
223
|
-
warnings: [
|
|
256
|
+
warnings: [
|
|
257
|
+
...structuralValidation.warnings,
|
|
258
|
+
...validateProductionStandard(scriptV4),
|
|
259
|
+
...skips.map((record) => ({
|
|
260
|
+
code: "episode_skipped",
|
|
261
|
+
path: `$.episodes[${record.episode - 1}]`,
|
|
262
|
+
message: `Episode ${record.episode} was manually skipped: ${record.reason}`,
|
|
263
|
+
})),
|
|
264
|
+
],
|
|
224
265
|
};
|
|
225
266
|
return { initial: script, final: scriptV4, idMap, validation, identityMap: converted.identityMap };
|
|
226
267
|
}
|
|
227
|
-
function
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
268
|
+
export function publishFinalizedVideoWorkspace(store, episodes, ctx, title, identityMap, skips) {
|
|
269
|
+
const finalized = finalizeVideoScript(readAcceptedVideoDocs(store, episodes, ctx.lastEpisode, skips), ctx, title, identityMap, skips.filter((record) => record.episode <= ctx.lastEpisode));
|
|
270
|
+
const { initial, final, idMap, validation } = finalized;
|
|
271
|
+
store.writeJson("script.initial.json", initial);
|
|
272
|
+
store.writeJson("id_map.json", idMap);
|
|
273
|
+
store.writeJson("validation.json", validation);
|
|
274
|
+
store.writeJson("v4_identity_map.json", finalized.identityMap);
|
|
275
|
+
if (!validation.ok) {
|
|
276
|
+
throw new CliError("Final script.json failed validation.", {
|
|
277
|
+
exitCode: EXIT_INPUT,
|
|
278
|
+
errorCode: "INGEST_VALIDATION_FAILED",
|
|
279
|
+
hint: "Inspect validation.json.",
|
|
280
|
+
data: { actual: validation.errors.slice(0, 5).map((error) => `${error.path}: ${error.message}`) },
|
|
281
|
+
});
|
|
233
282
|
}
|
|
234
|
-
|
|
283
|
+
store.writeJson("script.json", final);
|
|
284
|
+
return finalized;
|
|
235
285
|
}
|
|
236
|
-
|
|
286
|
+
async function runVideoIngestUnlocked(opts) {
|
|
237
287
|
const resolved = resolveSource(opts.sourcePath);
|
|
238
288
|
if (resolved.kind === "text")
|
|
239
289
|
throw new CliError("runVideoIngest received a text source.", {
|
|
@@ -257,14 +307,14 @@ export async function runVideoIngest(opts) {
|
|
|
257
307
|
const sig = opts.signal;
|
|
258
308
|
const store = new WorkspaceStore(opts.workspacePath);
|
|
259
309
|
store.ensure();
|
|
260
|
-
const previousManifest =
|
|
310
|
+
const previousManifest = readCurrentVideoManifest(store);
|
|
261
311
|
const sourcePath = path.resolve(resolved.path);
|
|
262
312
|
checkSourceRoot(previousManifest, resolved.kind, sourcePath);
|
|
263
313
|
const sourceEpisodes = snapshotVideoSource(episodes);
|
|
264
314
|
checkLifecycle(store, previousManifest, sourceEpisodes, force);
|
|
265
315
|
const manifest = {
|
|
266
316
|
version: 2,
|
|
267
|
-
pipeline_version:
|
|
317
|
+
pipeline_version: VIDEO_PIPELINE_VERSION,
|
|
268
318
|
updated: new Date().toISOString(),
|
|
269
319
|
source: {
|
|
270
320
|
kind: resolved.kind,
|
|
@@ -279,8 +329,13 @@ export async function runVideoIngest(opts) {
|
|
|
279
329
|
let runStatus = "failed";
|
|
280
330
|
try {
|
|
281
331
|
let port = null;
|
|
282
|
-
const title =
|
|
332
|
+
const title = deriveVideoTitle(opts.sourcePath);
|
|
283
333
|
let ctx = !force && store.has("context.json") ? store.readJson("context.json") : emptyContext();
|
|
334
|
+
const skipLedger = readVideoSkipLedger(store);
|
|
335
|
+
assertVideoSkipSources(skipLedger.episodes, sourceEpisodes);
|
|
336
|
+
if (!force)
|
|
337
|
+
reconcileVideoSkips(store, ctx, skipLedger.episodes);
|
|
338
|
+
const skippedEpisodes = new Set(skipLedger.episodes.map((record) => record.episode));
|
|
284
339
|
let identityMap = !force && store.has("v4_identity_map.json")
|
|
285
340
|
? store.readJson("v4_identity_map.json")
|
|
286
341
|
: emptyV4IdentityMap();
|
|
@@ -289,6 +344,8 @@ export async function runVideoIngest(opts) {
|
|
|
289
344
|
// ===== Stage S: serial per-episode parse =====
|
|
290
345
|
for (const e of episodes) {
|
|
291
346
|
const rel = `ep/ep_${pad(e.episode)}.json`;
|
|
347
|
+
if (!force && skippedEpisodes.has(e.episode) && e.episode <= ctx.lastEpisode)
|
|
348
|
+
continue;
|
|
292
349
|
// Resume: skip only when the episode's content exists AND the running context
|
|
293
350
|
// already accounts for it (a crash between the two writes → rerun this ep).
|
|
294
351
|
if (!force && store.has(rel) && e.episode <= ctx.lastEpisode) {
|
|
@@ -393,7 +450,7 @@ export async function runVideoIngest(opts) {
|
|
|
393
450
|
// Streaming: rebuild script.json incrementally so the editor sees it grow.
|
|
394
451
|
// Best-effort — the gated finalize below is authoritative.
|
|
395
452
|
try {
|
|
396
|
-
const streaming =
|
|
453
|
+
const streaming = finalizeVideoScript(readAcceptedVideoDocs(store, episodes, ctx.lastEpisode, skipLedger.episodes), ctx, title, identityMap, skipLedger.episodes.filter((record) => record.episode <= ctx.lastEpisode));
|
|
397
454
|
if (streaming.validation.ok) {
|
|
398
455
|
identityMap = streaming.identityMap;
|
|
399
456
|
// Publish the identity checkpoint first. A crash may leave the map ahead
|
|
@@ -409,21 +466,8 @@ export async function runVideoIngest(opts) {
|
|
|
409
466
|
const remaining = episodes.length - completed;
|
|
410
467
|
const complete = remaining === 0;
|
|
411
468
|
const nextEpisode = complete ? null : episodes[completed]?.episode ?? null;
|
|
412
|
-
const finalized =
|
|
413
|
-
const {
|
|
414
|
-
store.writeJson("script.initial.json", initial);
|
|
415
|
-
store.writeJson("id_map.json", idMap);
|
|
416
|
-
store.writeJson("validation.json", validation);
|
|
417
|
-
store.writeJson("v4_identity_map.json", finalized.identityMap);
|
|
418
|
-
if (!validation.ok) {
|
|
419
|
-
throw new CliError("Final script.json failed validation.", {
|
|
420
|
-
exitCode: EXIT_INPUT,
|
|
421
|
-
errorCode: "INGEST_VALIDATION_FAILED",
|
|
422
|
-
hint: "Inspect validation.json.",
|
|
423
|
-
data: { actual: validation.errors.slice(0, 5).map((e) => `${e.path}: ${e.message}`) },
|
|
424
|
-
});
|
|
425
|
-
}
|
|
426
|
-
store.writeJson("script.json", final);
|
|
469
|
+
const finalized = publishFinalizedVideoWorkspace(store, episodes.slice(0, completed), ctx, title, identityMap, skipLedger.episodes);
|
|
470
|
+
const { final, validation } = finalized;
|
|
427
471
|
const g = final;
|
|
428
472
|
runStatus = "succeeded";
|
|
429
473
|
return {
|
|
@@ -431,6 +475,8 @@ export async function runVideoIngest(opts) {
|
|
|
431
475
|
episodes: episodes.length,
|
|
432
476
|
processed,
|
|
433
477
|
reused,
|
|
478
|
+
skipped: skipLedger.episodes.length,
|
|
479
|
+
skippedEpisodes: skipLedger.episodes.map((record) => record.episode),
|
|
434
480
|
completed,
|
|
435
481
|
remaining,
|
|
436
482
|
complete,
|
|
@@ -445,7 +491,10 @@ export async function runVideoIngest(opts) {
|
|
|
445
491
|
usage.finish(runStatus);
|
|
446
492
|
}
|
|
447
493
|
}
|
|
448
|
-
function
|
|
494
|
+
export async function runVideoIngest(opts) {
|
|
495
|
+
return withIngestWorkspaceLock(opts.workspacePath, () => runVideoIngestUnlocked(opts));
|
|
496
|
+
}
|
|
497
|
+
export function deriveVideoTitle(sourcePath) {
|
|
449
498
|
const base = path.basename(sourcePath, path.extname(sourcePath));
|
|
450
499
|
return base || "";
|
|
451
500
|
}
|