@lingjingai/scriptctl 0.36.4 → 0.37.2
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.36.5.md +13 -0
- package/changes/0.37.0.md +17 -0
- package/changes/0.37.1.md +13 -0
- package/changes/0.37.2.md +13 -0
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/domain/ingest/assembler.js +14 -6
- package/dist/domain/ingest/assembler.js.map +1 -1
- package/dist/domain/ingest/asset-state-md-parser.d.ts +2 -0
- package/dist/domain/ingest/asset-state-md-parser.js +133 -0
- package/dist/domain/ingest/asset-state-md-parser.js.map +1 -0
- package/dist/domain/ingest/serial-context.d.ts +95 -0
- package/dist/domain/ingest/serial-context.js +219 -0
- package/dist/domain/ingest/serial-context.js.map +1 -0
- package/dist/domain/ingest/state-reconcile.d.ts +1 -0
- package/dist/domain/ingest/state-reconcile.js +2 -0
- package/dist/domain/ingest/state-reconcile.js.map +1 -1
- package/dist/help-text.js +1 -1
- package/dist/llm/config.js +9 -3
- package/dist/llm/config.js.map +1 -1
- package/dist/llm/registry.d.ts +1 -0
- package/dist/llm/registry.js +4 -0
- package/dist/llm/registry.js.map +1 -1
- package/dist/llm/tasks/ingest/episode-assets.d.ts +8 -0
- package/dist/llm/tasks/ingest/episode-assets.js +46 -0
- package/dist/llm/tasks/ingest/episode-assets.js.map +1 -0
- package/dist/llm/types.d.ts +1 -1
- package/dist/llm/types.js.map +1 -1
- package/dist/usecases/ingest/pipeline.js +40 -46
- package/dist/usecases/ingest/pipeline.js.map +1 -1
- package/dist/usecases/ingest/serial-govern.d.ts +23 -0
- package/dist/usecases/ingest/serial-govern.js +169 -0
- package/dist/usecases/ingest/serial-govern.js.map +1 -0
- package/dist/usecases/ingest/status.js +17 -1
- package/dist/usecases/ingest/status.js.map +1 -1
- package/dist/usecases/ingest/view-command.js +15 -0
- package/dist/usecases/ingest/view-command.js.map +1 -1
- package/dist/usecases/ingest/view-server.d.ts +16 -0
- package/dist/usecases/ingest/view-server.js +220 -0
- package/dist/usecases/ingest/view-server.js.map +1 -0
- package/package.json +1 -1
- package/skills/scriptctl/SKILL.md +1 -1
- package/skills/scriptctl/references/ingest-workflow.md +4 -2
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
// Text ingest pipeline (§6): pass1-prepare → pass2-normalize (fanout) →
|
|
2
|
-
// pass3-merge → compile (deterministic assembler) →
|
|
3
|
-
//
|
|
4
|
-
//
|
|
2
|
+
// pass3-merge → pass4-mention-resolve → compile (deterministic assembler) →
|
|
3
|
+
// pass5-extract → SERIAL govern. The front (through assemble+extract) handles the
|
|
4
|
+
// context-local body in parallel; the serial govern pass then walks episodes in
|
|
5
|
+
// order carrying a running context to decide identity/importance/durable-states
|
|
6
|
+
// WITH plot understanding (see serial-govern.ts), replacing the old parallel
|
|
7
|
+
// curate/recall/refine/state-reconcile compensation. Workspace lifecycle per §5.3.
|
|
5
8
|
import * as fs from "node:fs";
|
|
6
9
|
import * as path from "node:path";
|
|
7
10
|
import { CliError, EXIT_INPUT, sha256Text } from "../../common.js";
|
|
8
|
-
import { assemble
|
|
11
|
+
import { assemble } from "../../domain/ingest/assembler.js";
|
|
9
12
|
import { chunkSource } from "../../domain/ingest/chunker.js";
|
|
10
13
|
import { parseJsonl } from "../../domain/ingest/jsonl-parser.js";
|
|
11
14
|
import { renumberIds } from "../../domain/ingest/renumber.js";
|
|
@@ -15,9 +18,7 @@ import { readTextSource } from "../../infra/ingest/text-reader.js";
|
|
|
15
18
|
import { WorkspaceStore } from "../../infra/ingest/workspace-store.js";
|
|
16
19
|
import { runTextNormalize, parseNormalizeOutput } from "../../llm/tasks/ingest/text-normalize.js";
|
|
17
20
|
import { mapSettled } from "./fanout.js";
|
|
18
|
-
import {
|
|
19
|
-
import { runExtractPass } from "./pass5-extract.js";
|
|
20
|
-
import { runGovern } from "./pass5-govern.js";
|
|
21
|
+
import { runSerialGovern } from "./serial-govern.js";
|
|
21
22
|
const PIPELINE_VERSION = "1";
|
|
22
23
|
const pad = (n) => String(n).padStart(3, "0");
|
|
23
24
|
const serializeJsonl = (records) => records.map((r) => JSON.stringify(r)).join("\n") + "\n";
|
|
@@ -34,9 +35,9 @@ function checkLifecycle(store, sourceSha, force) {
|
|
|
34
35
|
});
|
|
35
36
|
}
|
|
36
37
|
if (force) {
|
|
37
|
-
for (const dir of ["pass1", "pass2", "pass3", "pass5"])
|
|
38
|
+
for (const dir of ["pass1", "pass2", "pass3", "pass5", "serial"])
|
|
38
39
|
fs.rmSync(store.path(dir), { recursive: true, force: true });
|
|
39
|
-
for (const f of ["script.initial.json", "script.json", "validation.json", "notes.json", "issues.json", "provisional_assets.json"])
|
|
40
|
+
for (const f of ["body.json", "script.initial.json", "script.json", "validation.json", "notes.json", "issues.json", "provisional_assets.json"])
|
|
40
41
|
fs.rmSync(store.path(f), { force: true });
|
|
41
42
|
}
|
|
42
43
|
}
|
|
@@ -88,61 +89,54 @@ export async function runTextIngest(opts) {
|
|
|
88
89
|
nextSteps: ["Inspect pass2/chunk_NNN.error.json and rerun `scriptctl ingest` to resume."],
|
|
89
90
|
});
|
|
90
91
|
}
|
|
91
|
-
// pass3 merge → pass4 mention-resolve →
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
//
|
|
95
|
-
|
|
96
|
-
// assemble tail is done"; --force clears them to force a full recompute.
|
|
97
|
-
let initial;
|
|
98
|
-
let assets;
|
|
92
|
+
// pass3 merge → pass4 mention-resolve → assemble = the name-based BODY (正文).
|
|
93
|
+
// NO asset extraction / id assignment here — the serial pass discovers assets,
|
|
94
|
+
// 造型 and per-scene presence itself from the body. Reuse body.json on a rerun so
|
|
95
|
+
// a serial failure doesn't redo pass3/pass4/assemble.
|
|
96
|
+
let body;
|
|
99
97
|
let recordCount;
|
|
100
98
|
let noteCount;
|
|
101
|
-
if (!opts.force && store.has("
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
recordCount = store.has("pass4/script.jsonl") ? parseJsonl(store.readText("pass4/script.jsonl")).length : 0;
|
|
99
|
+
if (!opts.force && store.has("body.json")) {
|
|
100
|
+
body = store.readJson("body.json");
|
|
101
|
+
recordCount = store.has("pass3/script.jsonl") ? parseJsonl(store.readText("pass3/script.jsonl")).length : 0;
|
|
105
102
|
noteCount = store.has("notes.json") ? store.readJson("notes.json").length : 0;
|
|
106
103
|
reused++;
|
|
107
104
|
}
|
|
108
105
|
else {
|
|
109
|
-
// pass3: merge in chunk order.
|
|
106
|
+
// pass3: merge in chunk order. Content is kept VERBATIM — no pronoun resolution
|
|
107
|
+
// (dialogue must stay word-for-word as spoken); the serial pass resolves
|
|
108
|
+
// identity from context instead of rewriting the body.
|
|
110
109
|
const merged = [];
|
|
111
110
|
for (const s of settled)
|
|
112
111
|
if (s.ok)
|
|
113
112
|
merged.push(...s.value);
|
|
114
113
|
store.writeText("pass3/script.jsonl", serializeJsonl(merged));
|
|
115
114
|
const reparsed = parseJsonl(store.readText("pass3/script.jsonl")); // round-trip validation
|
|
116
|
-
//
|
|
117
|
-
const { records: resolvedRecords } = await runMentionResolvePass(reparsed, { executor: opts.executor, concurrency: opts.concurrency ?? 80, ...(opts.signal ? { signal: opts.signal } : {}) });
|
|
118
|
-
store.writeText("pass4/script.jsonl", serializeJsonl(resolvedRecords));
|
|
119
|
-
// compile: assemble name-based skeleton (plain-text content; scene cast =
|
|
120
|
-
// declared 人物 ∪ speakers).
|
|
115
|
+
// compile: assemble the name-based body (scenes + actions).
|
|
121
116
|
const title = deriveTitle(resolved.path);
|
|
122
|
-
const assembled = assemble(
|
|
117
|
+
const assembled = assemble(reparsed, { title });
|
|
123
118
|
store.writeJson("notes.json", assembled.notes);
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
// assign provisional ids + evidence roster → provisional script.initial.json.
|
|
127
|
-
const prov = assignProvisionalIds(extracted);
|
|
128
|
-
initial = prov.script;
|
|
129
|
-
assets = prov.assets;
|
|
130
|
-
store.writeJson("script.initial.json", initial);
|
|
131
|
-
store.writeJson("provisional_assets.json", assets);
|
|
119
|
+
body = assembled.script;
|
|
120
|
+
store.writeJson("body.json", body);
|
|
132
121
|
recordCount = merged.length;
|
|
133
122
|
noteCount = assembled.notes.length;
|
|
134
123
|
}
|
|
135
|
-
//
|
|
136
|
-
//
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
// --force (
|
|
140
|
-
const
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
124
|
+
// Serial govern: context starts EMPTY and grows per episode; the model reads each
|
|
125
|
+
// episode's body + context-so-far and reports discovered entities / importance /
|
|
126
|
+
// 造型 / per-scene presence. The final v3 is built from that registry. Every step
|
|
127
|
+
// persists the full context md (= prompt) and the model's `# 更新` md; resume
|
|
128
|
+
// replays cached `# 更新` (no LLM). Cleared by --force (serial dir wiped).
|
|
129
|
+
const pad3 = (n) => String(n).padStart(3, "0");
|
|
130
|
+
const serialCheckpoint = {
|
|
131
|
+
readUpdate: (ep) => (store.has(`serial/ep_${pad3(ep)}.md`) ? store.readText(`serial/ep_${pad3(ep)}.md`) : undefined),
|
|
132
|
+
writeStep: (ep, contextMd, updateMd) => {
|
|
133
|
+
store.writeText(`serial/context_${pad3(ep)}.md`, contextMd);
|
|
134
|
+
store.writeText(`serial/ep_${pad3(ep)}.md`, updateMd);
|
|
135
|
+
},
|
|
144
136
|
};
|
|
145
|
-
const
|
|
137
|
+
const serial = await runSerialGovern(body, { executor: opts.executor, checkpoint: serialCheckpoint, force: opts.force ?? false, ...(opts.signal ? { signal: opts.signal } : {}) });
|
|
138
|
+
const governed = serial.doc;
|
|
139
|
+
reused += serial.reused;
|
|
146
140
|
// Final clean numbering: contiguous per-kind asset ids + per-asset state ids.
|
|
147
141
|
const { script: renumbered, idMap } = renumberIds(governed);
|
|
148
142
|
store.writeJson("id_map.json", idMap);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/usecases/ingest/pipeline.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/usecases/ingest/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type NameScript, type NameScene } from "../../domain/ingest/assembler.js";
|
|
2
|
+
import type { LlmTaskExecutor } from "../../llm/types.js";
|
|
3
|
+
export interface SerialCheckpoint {
|
|
4
|
+
readUpdate(episode: number): string | undefined;
|
|
5
|
+
writeStep(episode: number, contextMd: string, updateMd: string): void;
|
|
6
|
+
}
|
|
7
|
+
export interface SerialGovernOptions {
|
|
8
|
+
executor: LlmTaskExecutor;
|
|
9
|
+
signal?: AbortSignal;
|
|
10
|
+
checkpoint?: SerialCheckpoint;
|
|
11
|
+
force?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface SerialGovernResult {
|
|
14
|
+
doc: Record<string, unknown>;
|
|
15
|
+
episodes: number;
|
|
16
|
+
reused: number;
|
|
17
|
+
}
|
|
18
|
+
export declare function runSerialGovern(body: NameScript, opts: SerialGovernOptions): Promise<SerialGovernResult>;
|
|
19
|
+
export declare function renderEpisodeBody(ep: {
|
|
20
|
+
episode_id: string;
|
|
21
|
+
title?: string;
|
|
22
|
+
scenes: NameScene[];
|
|
23
|
+
}): string;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// Serial governance orchestrator (§ serial), incremental. Input is the name-based
|
|
2
|
+
// body (assembled NameScript) — NOT the roster. It walks episodes IN ORDER with a
|
|
3
|
+
// context that starts EMPTY: per episode the model reads that episode's body plus
|
|
4
|
+
// the context-so-far and reports discovered entities / importance / 造型 / and per
|
|
5
|
+
// scene who is present in which look. Nothing is seeded from the front's extracted
|
|
6
|
+
// assets/states.
|
|
7
|
+
//
|
|
8
|
+
// The final v3 is built FROM the accumulated registry: the serial scene refs are
|
|
9
|
+
// injected into the body, assignProvisionalIds mints ids + assets, the registry's
|
|
10
|
+
// importance/descriptions/looks are overlaid, and governDeterministic materializes.
|
|
11
|
+
// Per-episode md checkpoint + transient-retry as before.
|
|
12
|
+
import { CliError, EXIT_INPUT } from "../../common.js";
|
|
13
|
+
import { assignProvisionalIds } from "../../domain/ingest/assembler.js";
|
|
14
|
+
import { governDeterministic } from "../../domain/ingest/govern.js";
|
|
15
|
+
import { parseUpdateMarkdown } from "../../domain/ingest/asset-state-md-parser.js";
|
|
16
|
+
import { emptyContext, applyDelta, compact, render, resolveCanon, resolveLook, findEntity, baseLook } from "../../domain/ingest/serial-context.js";
|
|
17
|
+
import { runEpisodeAssets } from "../../llm/tasks/ingest/episode-assets.js";
|
|
18
|
+
const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
19
|
+
const isArr = (v) => Array.isArray(v);
|
|
20
|
+
const norm = (s) => s.normalize("NFC").replace(/\s+/g, " ").trim();
|
|
21
|
+
const RETRYABLE = new Set(["timeout", "rate_limited", "request_failed", "endpoint"]);
|
|
22
|
+
const isTransient = (e) => !!e && typeof e === "object" && "code" in e && RETRYABLE.has(String(e.code));
|
|
23
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
24
|
+
async function episodeUpdate(executor, epNo, contextMd, bodyMd, signal) {
|
|
25
|
+
for (let attempt = 1;; attempt++) {
|
|
26
|
+
try {
|
|
27
|
+
return (await runEpisodeAssets(executor, contextMd, bodyMd, signal)).markdown;
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
if (isTransient(e) && attempt < 3 && !signal?.aborted) {
|
|
31
|
+
await sleep(3000 * attempt);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
throw new CliError("INGEST SERIAL FAILED", `serial govern failed at episode ${epNo}.`, {
|
|
35
|
+
exitCode: EXIT_INPUT, errorCode: "INGEST_SERIAL_FAILED",
|
|
36
|
+
received: [e instanceof Error ? e.message : String(e)],
|
|
37
|
+
nextSteps: [`Rerun \`scriptctl ingest\` to resume from episode ${epNo} (earlier episodes are cached).`],
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export async function runSerialGovern(body, opts) {
|
|
43
|
+
const ctx = emptyContext();
|
|
44
|
+
const episodes = body.episodes ?? [];
|
|
45
|
+
let reused = 0;
|
|
46
|
+
for (let i = 0; i < episodes.length; i++) {
|
|
47
|
+
const ep = episodes[i];
|
|
48
|
+
const epNo = i + 1;
|
|
49
|
+
const contextMd = render(ctx, epNo);
|
|
50
|
+
const bodyMd = renderEpisodeBody(ep);
|
|
51
|
+
const cached = opts.force ? undefined : opts.checkpoint?.readUpdate(epNo);
|
|
52
|
+
let updateMd;
|
|
53
|
+
if (cached !== undefined) {
|
|
54
|
+
updateMd = cached;
|
|
55
|
+
reused++;
|
|
56
|
+
}
|
|
57
|
+
else
|
|
58
|
+
updateMd = await episodeUpdate(opts.executor, epNo, contextMd, bodyMd, opts.signal);
|
|
59
|
+
opts.checkpoint?.writeStep(epNo, contextMd, updateMd);
|
|
60
|
+
applyDelta(ctx, parseUpdateMarkdown(updateMd), epNo);
|
|
61
|
+
compact(ctx);
|
|
62
|
+
}
|
|
63
|
+
return { doc: finalize(body, ctx), episodes: episodes.length, reused };
|
|
64
|
+
}
|
|
65
|
+
const SPACE = { interior: "内", exterior: "外" };
|
|
66
|
+
const TIME = { day: "日", night: "夜" };
|
|
67
|
+
// Render one episode's body as readable 正文 — scene id + time/space + the action/
|
|
68
|
+
// dialogue lines (speaker by name). NO declared cast/props/location: the model
|
|
69
|
+
// infers presence and looks from the text itself.
|
|
70
|
+
export function renderEpisodeBody(ep) {
|
|
71
|
+
const out = [`# ${ep.episode_id}${ep.title ? ` ${ep.title}` : ""}`];
|
|
72
|
+
for (const sc of ep.scenes) {
|
|
73
|
+
out.push(`## ${sc.scene_id}`);
|
|
74
|
+
const env = [SPACE[sc.environment?.space ?? ""], TIME[sc.environment?.time ?? ""]].filter(Boolean).join(" ");
|
|
75
|
+
if (env)
|
|
76
|
+
out.push(`时空:${env}`);
|
|
77
|
+
for (const ac of sc.actions) {
|
|
78
|
+
const sp = ac.speaker ? ("name" in ac.speaker ? ac.speaker.name : `[${ac.speaker.kind}]`) : "";
|
|
79
|
+
const emo = ac.emotion ? `(${ac.emotion})` : "";
|
|
80
|
+
if (ac.type === "dialogue")
|
|
81
|
+
out.push(`${sp}${emo}:${ac.content}`);
|
|
82
|
+
else if (ac.type === "inner_thought")
|
|
83
|
+
out.push(`${sp}(心)${emo}:${ac.content}`);
|
|
84
|
+
else if (ac.type === "transition")
|
|
85
|
+
out.push(`【转场】${ac.content}`);
|
|
86
|
+
else
|
|
87
|
+
out.push(ac.content);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return out.join("\n");
|
|
91
|
+
}
|
|
92
|
+
// Build the final v3 doc from the body + accumulated registry. Inject serial scene
|
|
93
|
+
// refs (canonical names + look as state), mint ids via assignProvisionalIds, overlay
|
|
94
|
+
// registry importance/description/aliases/look-descriptions, then materialize.
|
|
95
|
+
function finalize(body, ctx) {
|
|
96
|
+
const doc = JSON.parse(JSON.stringify(body));
|
|
97
|
+
for (const ep of doc.episodes) {
|
|
98
|
+
for (const sc of ep.scenes) {
|
|
99
|
+
const ref = ctx.scenes[sc.scene_id];
|
|
100
|
+
if (ref) {
|
|
101
|
+
sc.location = ref.location ? { name: resolveCanon(ctx, ref.location) } : null;
|
|
102
|
+
sc.actors = ref.actors.map((a) => nameStateRef(ctx, a));
|
|
103
|
+
sc.props = ref.props.map((p) => nameStateRef(ctx, p));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
sc.location = null;
|
|
107
|
+
sc.actors = [];
|
|
108
|
+
sc.props = [];
|
|
109
|
+
}
|
|
110
|
+
for (const ac of sc.actions)
|
|
111
|
+
if (ac.speaker && "name" in ac.speaker)
|
|
112
|
+
ac.speaker.name = resolveCanon(ctx, ac.speaker.name);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const script = assignProvisionalIds(doc).script;
|
|
116
|
+
overlay(script, ctx);
|
|
117
|
+
const governed = governDeterministic(script);
|
|
118
|
+
renameSyntheticDefault(governed);
|
|
119
|
+
return governed;
|
|
120
|
+
}
|
|
121
|
+
// Scene ref → {name, state}. An explicit look resolves to its canonical look name;
|
|
122
|
+
// no look falls back to the entity's baseline 常态 look (so an ordinary scene never
|
|
123
|
+
// inherits a dramatic outfit, and 常态 — being the most frequent — becomes default).
|
|
124
|
+
function nameStateRef(ctx, a) {
|
|
125
|
+
const canon = resolveCanon(ctx, a.name);
|
|
126
|
+
const e = findEntity(ctx, canon);
|
|
127
|
+
const look = a.look ? (e ? resolveLook(e, a.look) : a.look) : (e ? baseLook(e) : undefined);
|
|
128
|
+
return look ? { name: canon, state: look } : { name: canon };
|
|
129
|
+
}
|
|
130
|
+
// Assets with no discovered look keep a synthetic default whose name leaked as the
|
|
131
|
+
// literal "default"; relabel it to 常态 for a meaningful baseline.
|
|
132
|
+
function renameSyntheticDefault(script) {
|
|
133
|
+
for (const listKey of ["actors", "locations", "props"]) {
|
|
134
|
+
for (const asset of isArr(script[listKey]) ? script[listKey] : []) {
|
|
135
|
+
if (!isObj(asset))
|
|
136
|
+
continue;
|
|
137
|
+
for (const st of isArr(asset.states) ? asset.states : []) {
|
|
138
|
+
if (isObj(st) && st.state_id === "default" && st.state_name === "default")
|
|
139
|
+
st.state_name = "常态";
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Stamp registry meta onto the minted assets: importance (background if the model
|
|
145
|
+
// never classified), description, aliases, and per-look state descriptions.
|
|
146
|
+
function overlay(script, ctx) {
|
|
147
|
+
for (const [listKey, nameKey] of [["actors", "actor_name"], ["locations", "location_name"], ["props", "prop_name"]]) {
|
|
148
|
+
for (const asset of isArr(script[listKey]) ? script[listKey] : []) {
|
|
149
|
+
if (!isObj(asset))
|
|
150
|
+
continue;
|
|
151
|
+
const e = findEntity(ctx, String(asset[nameKey]));
|
|
152
|
+
asset.importance = (e?.importance ?? "background");
|
|
153
|
+
if (e) {
|
|
154
|
+
if (e.description)
|
|
155
|
+
asset.description = e.description;
|
|
156
|
+
if (e.aliases.length)
|
|
157
|
+
asset.aliases = [...new Set([...(isArr(asset.aliases) ? asset.aliases : []), ...e.aliases])];
|
|
158
|
+
for (const st of isArr(asset.states) ? asset.states : []) {
|
|
159
|
+
if (!isObj(st) || st.state_id === "default")
|
|
160
|
+
continue;
|
|
161
|
+
const look = e.looks.find((l) => norm(l.name) === norm(String(st.state_name)));
|
|
162
|
+
if (look?.description)
|
|
163
|
+
st.description = look.description;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=serial-govern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serial-govern.js","sourceRoot":"","sources":["../../../src/usecases/ingest/serial-govern.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,kFAAkF;AAClF,kFAAkF;AAClF,iFAAiF;AACjF,mFAAmF;AACnF,iBAAiB;AACjB,EAAE;AACF,iFAAiF;AACjF,kFAAkF;AAClF,oFAAoF;AACpF,yDAAyD;AAEzD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAmC,MAAM,kCAAkC,CAAC;AACzG,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAsB,MAAM,uCAAuC,CAAC;AACvK,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAY5E,MAAM,KAAK,GAAG,CAAC,CAAU,EAAY,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjG,MAAM,KAAK,GAAG,CAAC,CAAU,EAAkB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/D,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAEnF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;AACrF,MAAM,WAAW,GAAG,CAAC,CAAU,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAE,CAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;AACjJ,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAEnF,KAAK,UAAU,aAAa,CAAC,QAAyB,EAAE,IAAY,EAAE,SAAiB,EAAE,MAAc,EAAE,MAAoB;IAC3H,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBAAC,MAAM,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YACjG,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,mCAAmC,IAAI,GAAG,EAAE;gBACrF,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,sBAAsB;gBACvD,QAAQ,EAAE,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtD,SAAS,EAAE,CAAC,qDAAqD,IAAI,iCAAiC,CAAC;aACxG,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAgB,EAAE,IAAyB;IAC/E,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IACrC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAErC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1E,IAAI,QAAgB,CAAC;QACrB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAAC,QAAQ,GAAG,MAAM,CAAC;YAAC,MAAM,EAAE,CAAC;QAAC,CAAC;;YACrD,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzF,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEtD,UAAU,CAAC,GAAG,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,KAAK,GAA2B,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AACvE,MAAM,IAAI,GAA2B,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAE9D,iFAAiF;AACjF,+EAA+E;AAC/E,kDAAkD;AAClD,MAAM,UAAU,iBAAiB,CAAC,EAA+D;IAC/F,MAAM,GAAG,GAAa,CAAC,KAAK,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7G,IAAI,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAC/B,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/F,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;iBAC7D,IAAI,EAAE,CAAC,IAAI,KAAK,eAAe;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;iBAC1E,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY;gBAAE,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;;gBAC5D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,mFAAmF;AACnF,qFAAqF;AACrF,+EAA+E;AAC/E,SAAS,QAAQ,CAAC,IAAgB,EAAE,GAAkB;IACpD,MAAM,GAAG,GAAe,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,GAAG,EAAE,CAAC;gBACR,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC9E,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxD,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBAAC,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC;gBAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,CAAC;YAC7D,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO;gBAAE,IAAI,EAAE,CAAC,OAAO,IAAI,MAAM,IAAI,EAAE,CAAC,OAAO;oBAAE,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5H,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC7C,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,mFAAmF;AACnF,kFAAkF;AAClF,mFAAmF;AACnF,SAAS,YAAY,CAAC,GAAkB,EAAE,CAAkC;IAC1E,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5F,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC/D,CAAC;AAED,mFAAmF;AACnF,iEAAiE;AACjE,SAAS,sBAAsB,CAAC,MAAW;IACzC,KAAK,MAAM,OAAO,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAU,EAAE,CAAC;QAChE,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,OAAO,CAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACjF,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC5B,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACzD,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS;oBAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC;YAClG,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,4EAA4E;AAC5E,SAAS,OAAO,CAAC,MAAW,EAAE,GAAkB;IAC9C,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAU,EAAE,CAAC;QAC7H,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,OAAO,CAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACjF,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC5B,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClD,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,UAAU,IAAI,YAAY,CAAe,CAAC;YACjE,IAAI,CAAC,EAAE,CAAC;gBACN,IAAI,CAAC,CAAC,WAAW;oBAAE,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;gBACrD,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM;oBAAE,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,OAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjI,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBACzD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,KAAK,SAAS;wBAAE,SAAS;oBACtD,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC/E,IAAI,IAAI,EAAE,WAAW;wBAAE,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC3D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -57,6 +57,16 @@ function collectErrors(root, pass) {
|
|
|
57
57
|
return ref;
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
|
+
// Episode count for the serial pass bar; derived from the assembled body.
|
|
61
|
+
function readEpisodeCount(root) {
|
|
62
|
+
try {
|
|
63
|
+
const s = JSON.parse(fs.readFileSync(path.join(root, "body.json"), "utf-8"));
|
|
64
|
+
return Array.isArray(s.episodes) ? s.episodes.length : 0;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
60
70
|
function textPasses(root, manifest) {
|
|
61
71
|
const total = manifest.chunks ?? 0;
|
|
62
72
|
const normalize = {
|
|
@@ -64,9 +74,15 @@ function textPasses(root, manifest) {
|
|
|
64
74
|
done: countSuffix(root, "pass2", ".md"),
|
|
65
75
|
failed: countSuffix(root, "pass2", ".error.json"),
|
|
66
76
|
};
|
|
77
|
+
// Serial govern: one `serial/ep_NNN.md` per finished episode (context_NNN.md
|
|
78
|
+
// also lives there, so match the ep_ prefix, not just the .md suffix).
|
|
79
|
+
const epTotal = readEpisodeCount(root);
|
|
80
|
+
const serialDone = listSuffix(root, "serial", ".md").filter((n) => n.startsWith("ep_")).length;
|
|
81
|
+
const serial = { total: epTotal, done: serialDone, failed: 0 };
|
|
67
82
|
const passes = [
|
|
68
83
|
{ name: "normalize", done: total > 0 && normalize.done >= total && normalize.failed === 0, unit: normalize },
|
|
69
|
-
{ name: "assemble", done: has(root, "
|
|
84
|
+
{ name: "assemble", done: has(root, "body.json") },
|
|
85
|
+
{ name: "serial", done: epTotal > 0 && serialDone >= epTotal, unit: serial },
|
|
70
86
|
{ name: "govern", done: has(root, "script.json") },
|
|
71
87
|
];
|
|
72
88
|
return { passes, units: normalize };
|
|
@@ -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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"}
|
|
@@ -7,6 +7,7 @@ import * as path from "node:path";
|
|
|
7
7
|
import { CliError, EXIT_INPUT, EXIT_OK } from "../../common.js";
|
|
8
8
|
import { renderReviewHtml } from "../../infra/ingest/review-renderer.js";
|
|
9
9
|
import { WorkspaceStore } from "../../infra/ingest/workspace-store.js";
|
|
10
|
+
import { runViewServer } from "./view-server.js";
|
|
10
11
|
const strOf = (v) => (v === null || v === undefined ? "" : String(v));
|
|
11
12
|
const pad = (n) => String(n).padStart(3, "0");
|
|
12
13
|
// Symlink each episode's media into <ws>/src/ep_NNN.mp4 (best-effort; the review
|
|
@@ -33,6 +34,20 @@ function linkMedia(store) {
|
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
export async function commandView(opts) {
|
|
37
|
+
// --watch: live monitor server (progress + artifacts + context, auto-refresh),
|
|
38
|
+
// runs until Ctrl-C. Works while ingest is still running (no script.json yet).
|
|
39
|
+
// Local-only: it blocks on a web server + opens a browser, which would hang a
|
|
40
|
+
// headless sandbox run — refuse there (the sandbox injects SANDBOX_PROJECT_GROUP_NO).
|
|
41
|
+
if (opts["watch"]) {
|
|
42
|
+
if ((process.env.SANDBOX_PROJECT_GROUP_NO ?? "").trim()) {
|
|
43
|
+
throw new CliError("VIEW WATCH UNAVAILABLE", "`view --watch` runs a local web server and opens a browser; it is local-only and unavailable in the sandbox.", {
|
|
44
|
+
exitCode: EXIT_INPUT,
|
|
45
|
+
errorCode: "VIEW_WATCH_SANDBOX",
|
|
46
|
+
nextSteps: ["Use `scriptctl ingest status` for progress in the sandbox; run `view --watch` on your local machine."],
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return runViewServer(opts);
|
|
50
|
+
}
|
|
36
51
|
const workspacePath = strOf(opts["workspace_path"] || "workspace");
|
|
37
52
|
const store = new WorkspaceStore(path.resolve(workspacePath));
|
|
38
53
|
if (!store.has("script.json")) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-command.js","sourceRoot":"","sources":["../../../src/usecases/ingest/view-command.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,kFAAkF;AAClF,gFAAgF;AAEhF,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAe,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"view-command.js","sourceRoot":"","sources":["../../../src/usecases/ingest/view-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Report } from "../../common.js";
|
|
2
|
+
type Dict = Record<string, unknown>;
|
|
3
|
+
interface FileMeta {
|
|
4
|
+
rel: string;
|
|
5
|
+
size: number;
|
|
6
|
+
mtime: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function listArtifacts(root: string): Record<string, FileMeta[]>;
|
|
9
|
+
export declare function readSafe(root: string, rel: string): {
|
|
10
|
+
ok: true;
|
|
11
|
+
text: string;
|
|
12
|
+
} | {
|
|
13
|
+
ok: false;
|
|
14
|
+
};
|
|
15
|
+
export declare function runViewServer(opts: Dict): Promise<[Report, number]>;
|
|
16
|
+
export {};
|