@lingjingai/scriptctl 0.61.0 → 0.61.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.61.1.md +15 -0
- package/changes/0.61.2.md +10 -0
- package/dist/bin.js +16126 -11
- package/dist/bin.js.map +7 -1
- package/dist/cli/register-review.d.ts +3 -0
- package/dist/cli/register-review.js +19 -0
- package/dist/cli/register-review.js.map +1 -0
- package/dist/cli.js +4 -10
- package/dist/cli.js.map +1 -1
- package/dist/llm/config.js +4 -0
- package/dist/llm/config.js.map +1 -1
- package/dist/output.js +5 -0
- package/dist/output.js.map +1 -1
- package/dist/package-root.d.ts +2 -0
- package/dist/package-root.js +38 -0
- package/dist/package-root.js.map +1 -0
- package/dist/review-agent.js +2955 -0
- package/dist/review-agent.js.map +7 -0
- package/dist/usecases/changelog.js +3 -8
- package/dist/usecases/changelog.js.map +1 -1
- package/dist/usecases/script/review.d.ts +3 -0
- package/dist/usecases/script/review.js +185 -0
- package/dist/usecases/script/review.js.map +1 -0
- package/dist/usecases/update.js +2 -14
- package/dist/usecases/update.js.map +1 -1
- package/package.json +10 -3
- package/skills/scriptctl/SKILL.md +11 -2
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
4
3
|
import { CliError, EXIT_INPUT, EXIT_OK, EXIT_USAGE } from "../common.js";
|
|
4
|
+
import { packageRoot, packageVersion } from "../package-root.js";
|
|
5
5
|
const VERSION_RE = /^\d+\.\d+\.\d+$/;
|
|
6
6
|
const UNRELEASED = "unreleased";
|
|
7
|
-
function repoRoot() {
|
|
8
|
-
return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
9
|
-
}
|
|
10
7
|
function changesDir() {
|
|
11
|
-
return path.join(
|
|
8
|
+
return path.join(packageRoot(), "changes");
|
|
12
9
|
}
|
|
13
10
|
function readPackageVersion() {
|
|
14
|
-
|
|
15
|
-
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
16
|
-
return pkg.version ?? "0.0.0";
|
|
11
|
+
return packageVersion();
|
|
17
12
|
}
|
|
18
13
|
function versionParts(version) {
|
|
19
14
|
if (!VERSION_RE.test(version)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changelog.js","sourceRoot":"","sources":["../../src/usecases/changelog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"changelog.js","sourceRoot":"","sources":["../../src/usecases/changelog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// `scriptctl review`: one process reviews a whole script against its original
|
|
2
|
+
// video. The agent itself lives in @lingjingai/review-agent and is loaded by a
|
|
3
|
+
// dynamic import so that every other command keeps its ~0.09s start-up.
|
|
4
|
+
//
|
|
5
|
+
// Progress is NDJSON on stdout, one line per episode as it finishes, because
|
|
6
|
+
// the caller persists per-episode results and must not lose them if the run
|
|
7
|
+
// is interrupted.
|
|
8
|
+
import * as fs from "node:fs";
|
|
9
|
+
import * as path from "node:path";
|
|
10
|
+
import { fileURLToPath } from "node:url";
|
|
11
|
+
import { CliError, EXIT_INPUT, EXIT_OK, EXIT_RUNTIME } from "../../common.js";
|
|
12
|
+
import { scriptJsonPath } from "../../common.js";
|
|
13
|
+
import { loadLlmConfig } from "../../llm/config.js";
|
|
14
|
+
import { strOf } from "../../domain/script/shared.js";
|
|
15
|
+
const DEFAULT_PROFILE = "review-agent";
|
|
16
|
+
function resolveProfile(llm, override) {
|
|
17
|
+
const name = override || DEFAULT_PROFILE;
|
|
18
|
+
const model = llm.models[name];
|
|
19
|
+
if (!model) {
|
|
20
|
+
throw new CliError(`LLM profile "${name}" is not defined.`, {
|
|
21
|
+
exitCode: EXIT_INPUT,
|
|
22
|
+
errorCode: "REVIEW_PROFILE_UNKNOWN",
|
|
23
|
+
hint: `Define it under models, or pick one of: ${Object.keys(llm.models).join(", ")}.`,
|
|
24
|
+
data: { expected: ["a defined models entry"], actual: [name] },
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const provider = llm.providers[model.provider];
|
|
28
|
+
if (!provider) {
|
|
29
|
+
throw new CliError(`Provider "${model.provider}" is not defined.`, {
|
|
30
|
+
exitCode: EXIT_INPUT,
|
|
31
|
+
errorCode: "REVIEW_PROVIDER_UNKNOWN",
|
|
32
|
+
hint: `Available providers: ${Object.keys(llm.providers).join(", ")}.`,
|
|
33
|
+
data: { expected: ["a defined providers entry"], actual: [model.provider] },
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const apiKey = (process.env[provider.apiKeyEnv] ?? "").trim();
|
|
37
|
+
if (!apiKey) {
|
|
38
|
+
throw new CliError(`${provider.apiKeyEnv} is not set.`, {
|
|
39
|
+
exitCode: EXIT_INPUT,
|
|
40
|
+
errorCode: "REVIEW_API_KEY_MISSING",
|
|
41
|
+
hint: `Export ${provider.apiKeyEnv} for provider ${model.provider}.`,
|
|
42
|
+
data: { expected: [provider.apiKeyEnv], actual: ["<empty>"] },
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return { provider: model.provider, model: model.model, baseUrl: provider.baseUrl, apiKey };
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The agent bundle sits next to this file in dist. It is loaded by path rather
|
|
49
|
+
* than by package name so that a published scriptctl needs no resolvable
|
|
50
|
+
* `@lingjingai/review-agent` — the bundle IS the package.
|
|
51
|
+
*/
|
|
52
|
+
async function loadAgent() {
|
|
53
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
54
|
+
// In the shipped bundle this module is dist/bin.js, so the sibling is
|
|
55
|
+
// dist/review-agent.js; under tsc output it is dist/usecases/script/, so the
|
|
56
|
+
// package name resolves through node_modules instead.
|
|
57
|
+
const bundled = path.join(here, "review-agent.js");
|
|
58
|
+
const specifier = fs.existsSync(bundled) ? bundled : "@lingjingai/review-agent";
|
|
59
|
+
try {
|
|
60
|
+
return await import(specifier);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
throw new CliError("The review agent is not installed.", {
|
|
64
|
+
exitCode: EXIT_RUNTIME,
|
|
65
|
+
errorCode: "REVIEW_AGENT_MISSING",
|
|
66
|
+
hint: "Reinstall scriptctl without --omit=optional, or install @mastra/core and @ai-sdk/google.",
|
|
67
|
+
data: { expected: ["@lingjingai/review-agent"], actual: [String(error.message).slice(0, 200)] },
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function episodeList(raw) {
|
|
72
|
+
const trimmed = raw.trim();
|
|
73
|
+
if (!trimmed)
|
|
74
|
+
return undefined;
|
|
75
|
+
const numbers = trimmed.split(",").map((part) => Number(part.trim()));
|
|
76
|
+
if (numbers.some((value) => !Number.isInteger(value) || value < 1)) {
|
|
77
|
+
throw new CliError("--episodes takes a comma-separated list of 1-based episode numbers.", {
|
|
78
|
+
exitCode: EXIT_INPUT,
|
|
79
|
+
errorCode: "REVIEW_EPISODES_INVALID",
|
|
80
|
+
hint: "For example: --episodes 1,2,5",
|
|
81
|
+
data: { expected: ["1-based episode numbers"], actual: [trimmed] },
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return numbers;
|
|
85
|
+
}
|
|
86
|
+
function positive(opts, key, fallback) {
|
|
87
|
+
const raw = opts[key];
|
|
88
|
+
if (raw === undefined)
|
|
89
|
+
return fallback;
|
|
90
|
+
const value = Number(raw);
|
|
91
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
92
|
+
throw new CliError(`--${key.replace(/_/g, "-")} must be a positive number.`, {
|
|
93
|
+
exitCode: EXIT_INPUT,
|
|
94
|
+
errorCode: "REVIEW_OPTION_INVALID",
|
|
95
|
+
hint: `Pass a positive number for --${key.replace(/_/g, "-")}.`,
|
|
96
|
+
data: { expected: ["a positive number"], actual: [String(raw)] },
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return value;
|
|
100
|
+
}
|
|
101
|
+
export async function commandReview(opts) {
|
|
102
|
+
const llm = loadLlmConfig(strOf(opts["llm_config"]).trim() || undefined);
|
|
103
|
+
const override = strOf(opts["model"]).trim();
|
|
104
|
+
const profile = resolveProfile(llm, override);
|
|
105
|
+
// --check answers "can this run at all" without spending a token: it is what
|
|
106
|
+
// replaces `codex login status` in the caller's preflight.
|
|
107
|
+
if (opts["check"]) {
|
|
108
|
+
const agent = await loadAgent();
|
|
109
|
+
const ok = typeof agent.reviewScript === "function";
|
|
110
|
+
return [{
|
|
111
|
+
text: ok
|
|
112
|
+
? `ready: ${profile.provider}/${profile.model}`
|
|
113
|
+
: "the review agent bundle is present but exports no reviewScript",
|
|
114
|
+
data: {
|
|
115
|
+
ready: ok,
|
|
116
|
+
provider: profile.provider,
|
|
117
|
+
model: profile.model,
|
|
118
|
+
llm_config: llm.sourcePath ?? "builtin",
|
|
119
|
+
},
|
|
120
|
+
}, ok ? EXIT_OK : EXIT_RUNTIME];
|
|
121
|
+
}
|
|
122
|
+
const scriptPath = scriptJsonPath(opts);
|
|
123
|
+
if (!fs.existsSync(scriptPath)) {
|
|
124
|
+
throw new CliError("Local script file not found.", {
|
|
125
|
+
exitCode: EXIT_INPUT,
|
|
126
|
+
errorCode: "SCRIPT_NOT_FOUND",
|
|
127
|
+
hint: "Run `scriptctl checkout`, `scriptctl create`, or pass --script-path to an existing script.",
|
|
128
|
+
data: { expected: ["existing local script JSON"], actual: [scriptPath] },
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
const videos = (Array.isArray(opts["video"]) ? opts["video"] : [])
|
|
132
|
+
.map((value) => value.trim())
|
|
133
|
+
.filter((value) => value.length > 0);
|
|
134
|
+
const missing = videos.filter((value) => !fs.existsSync(value));
|
|
135
|
+
if (missing.length > 0) {
|
|
136
|
+
throw new CliError("A --video path does not exist.", {
|
|
137
|
+
exitCode: EXIT_INPUT,
|
|
138
|
+
errorCode: "REVIEW_SOURCE_NOT_FOUND",
|
|
139
|
+
hint: "Pass --video once per episode, in episode order.",
|
|
140
|
+
data: { expected: ["existing video files"], actual: missing.slice(0, 5) },
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
const source = strOf(opts["source_path"]).trim();
|
|
144
|
+
if (source && !fs.existsSync(source)) {
|
|
145
|
+
throw new CliError("Video source not found.", {
|
|
146
|
+
exitCode: EXIT_INPUT,
|
|
147
|
+
errorCode: "REVIEW_SOURCE_NOT_FOUND",
|
|
148
|
+
hint: "Pass -s to a video file or a directory of per-episode videos, or omit it for a script-only review.",
|
|
149
|
+
data: { expected: ["existing video file or directory"], actual: [source] },
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
const { reviewScript } = await loadAgent();
|
|
153
|
+
const write = (event) => process.stdout.write(JSON.stringify(event) + "\n");
|
|
154
|
+
try {
|
|
155
|
+
await reviewScript({
|
|
156
|
+
scriptPath,
|
|
157
|
+
...(source ? { source } : {}),
|
|
158
|
+
...(videos.length > 0 ? { videos } : {}),
|
|
159
|
+
...(episodeList(strOf(opts["episodes"])) ? { episodes: episodeList(strOf(opts["episodes"])) } : {}),
|
|
160
|
+
concurrency: positive(opts, "concurrency", 5),
|
|
161
|
+
converge: opts["converge"] !== false,
|
|
162
|
+
apiKey: profile.apiKey,
|
|
163
|
+
model: profile.model,
|
|
164
|
+
mediaModel: profile.model,
|
|
165
|
+
...(profile.baseUrl ? { baseUrl: profile.baseUrl } : {}),
|
|
166
|
+
maxSteps: positive(opts, "max_steps", 60),
|
|
167
|
+
mediaBudget: positive(opts, "media_budget", 1),
|
|
168
|
+
episodeTimeoutMs: positive(opts, "episode_timeout_ms", 8 * 60_000),
|
|
169
|
+
onEvent: write,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
if (error instanceof CliError)
|
|
174
|
+
throw error;
|
|
175
|
+
throw new CliError("Review failed.", {
|
|
176
|
+
exitCode: EXIT_RUNTIME,
|
|
177
|
+
errorCode: "REVIEW_FAILED",
|
|
178
|
+
hint: "Read the last NDJSON lines on stdout for the episode that failed.",
|
|
179
|
+
data: { expected: ["a completed review run"], actual: [String(error.message).slice(0, 300)] },
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
// Every result already left as NDJSON; the envelope would only repeat it.
|
|
183
|
+
return [{ text: "", data: {} }, EXIT_OK];
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/usecases/script/review.ts"],"names":[],"mappings":"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"}
|
package/dist/usecases/update.js
CHANGED
|
@@ -1,23 +1,11 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
-
import * as fs from "node:fs";
|
|
3
|
-
import * as path from "node:path";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
2
|
import { CliError, EXIT_OK, EXIT_RUNTIME } from "../common.js";
|
|
3
|
+
import { packageVersion } from "../package-root.js";
|
|
6
4
|
const UPDATE_PACKAGE = "@lingjingai/scriptctl";
|
|
7
5
|
const UPDATE_LATEST_SPEC = `${UPDATE_PACKAGE}@latest`;
|
|
8
6
|
const UPDATE_COMMAND = "npm";
|
|
9
|
-
function packageRoot() {
|
|
10
|
-
return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
11
|
-
}
|
|
12
7
|
function readInstalledVersion() {
|
|
13
|
-
|
|
14
|
-
if (typeof pkg !== "object"
|
|
15
|
-
|| pkg === null
|
|
16
|
-
|| !("version" in pkg)
|
|
17
|
-
|| typeof pkg.version !== "string") {
|
|
18
|
-
throw new Error("scriptctl package.json does not contain a string version");
|
|
19
|
-
}
|
|
20
|
-
return pkg.version;
|
|
8
|
+
return packageVersion();
|
|
21
9
|
}
|
|
22
10
|
export function patchPackageSpec(version) {
|
|
23
11
|
const match = /^(\d+)\.(\d+)\.\d+/.exec(version);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/usecases/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/usecases/update.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lingjingai/scriptctl",
|
|
3
|
-
"version": "0.61.
|
|
3
|
+
"version": "0.61.2",
|
|
4
4
|
"description": "剧本阶段统一 CLI:素材转 Script v4,并兼容 Script v3 的本地写作、精修、校验和发布。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"node": ">=20"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
|
-
"build": "pnpm --filter @lingjingai/screenplay build && tsc",
|
|
22
|
+
"build": "pnpm --filter @lingjingai/screenplay build && pnpm --filter @lingjingai/review-agent build && tsc && node scripts/bundle.mjs",
|
|
23
23
|
"clean": "rm -rf dist packages/screenplay/dist",
|
|
24
24
|
"postinstall": "node scripts/install-skill.mjs",
|
|
25
25
|
"install-skill": "node scripts/install-skill.mjs",
|
|
@@ -35,7 +35,6 @@
|
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@anthropic-ai/sdk": "^0.111.0",
|
|
37
37
|
"@google/genai": "^2.11.0",
|
|
38
|
-
"@lingjingai/screenplay": "workspace:*",
|
|
39
38
|
"commander": "^12.1.0",
|
|
40
39
|
"fast-json-patch": "^3.1.1",
|
|
41
40
|
"fast-xml-parser": "^5.9.0",
|
|
@@ -47,9 +46,12 @@
|
|
|
47
46
|
"yaml": "^2.8.1"
|
|
48
47
|
},
|
|
49
48
|
"devDependencies": {
|
|
49
|
+
"@lingjingai/review-agent": "workspace:*",
|
|
50
|
+
"@lingjingai/screenplay": "workspace:*",
|
|
50
51
|
"@types/node": "^20.14.0",
|
|
51
52
|
"@types/proper-lockfile": "^4.1.4",
|
|
52
53
|
"c8": "^11.0.0",
|
|
54
|
+
"esbuild": "^0.28.2",
|
|
53
55
|
"typescript": "^5.5.0",
|
|
54
56
|
"vitest": "^2.0.0"
|
|
55
57
|
},
|
|
@@ -62,5 +64,10 @@
|
|
|
62
64
|
"license": "MIT",
|
|
63
65
|
"publishConfig": {
|
|
64
66
|
"access": "public"
|
|
67
|
+
},
|
|
68
|
+
"optionalDependencies": {
|
|
69
|
+
"@ai-sdk/google": "^4.0.63",
|
|
70
|
+
"@mastra/core": "^1.64.0",
|
|
71
|
+
"zod": "^4.5.4"
|
|
65
72
|
}
|
|
66
73
|
}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
name: scriptctl
|
|
3
3
|
description: "剧本 script.json 的本地阅读、定位、原子修改、整场整集回写、素材 ingest 与 revision publish CLI。处理 Script v3/v4、剧本资产与 state、Action、场景引用或视频证据核对时使用。"
|
|
4
4
|
metadata:
|
|
5
|
-
version: "0.
|
|
6
|
-
scriptctl_version: "0.61.
|
|
5
|
+
version: "0.31.1"
|
|
6
|
+
scriptctl_version: "0.61.2"
|
|
7
7
|
author: "official"
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -186,6 +186,7 @@ scriptctl write + -f /tmp/ep51.txt -p "$S" # `+` 追加新集
|
|
|
186
186
|
scriptctl ingest -s <素材> -w <workspace> # 素材转 Script v4
|
|
187
187
|
scriptctl synopsis generate -p "$S" --apply # LLM 补全剧与分集梗概
|
|
188
188
|
scriptctl audit-assets -p "$S" # LLM 全剧资产一致性审计
|
|
189
|
+
scriptctl review -p "$S" -s <视频目录> # 派发 agent 逐集审核并修正
|
|
189
190
|
scriptctl create --title "…" -p "$S" # 从零建空剧本
|
|
190
191
|
scriptctl view -w <workspace> # 渲染或起审阅页
|
|
191
192
|
scriptctl checkout / status / publish # 远端工作副本
|
|
@@ -193,6 +194,14 @@ scriptctl checkout / status / publish # 远端工作副本
|
|
|
193
194
|
|
|
194
195
|
`ingest` 见 [references/ingest-workflow.md](references/ingest-workflow.md)。
|
|
195
196
|
|
|
197
|
+
`review` 一个进程审完整本剧:剧本只解析一次进内存,按集扇出,最后单线程做全剧收敛。
|
|
198
|
+
给 `-s` 就按原视频拉片核对(agent 自己切片段送模型看画面和听原声),不给就纯剧本审核,
|
|
199
|
+
媒体工具不注册。每集**先落盘再输出**一行 NDJSON 到 stdout(`{"type":"episode",…}`,末行
|
|
200
|
+
`{"type":"done",…}`)——收到一行就代表那一集的修改已经在文件里,中途挂掉只丢没报告的集。
|
|
201
|
+
`--episodes 3,7` 续跑指定集,`--concurrency` 控同时在飞的集数,`--check` 只验模型与
|
|
202
|
+
agent 是否就绪。**Agent 不要自己调 `review` 去审自己正在改的剧本**——它会派发另一个
|
|
203
|
+
agent 并直接改文件。
|
|
204
|
+
|
|
196
205
|
## 版本边界
|
|
197
206
|
|
|
198
207
|
读取 `script.json.version`:`4` 是新建与 ingest 的默认方言,`3` 是线上既有项目的
|