@lingjingai/scriptctl 0.60.13 → 0.61.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.61.0.md +19 -0
- package/changes/0.61.1.md +15 -0
- package/dist/bin.js +16127 -11
- package/dist/bin.js.map +7 -1
- package/dist/cli/{register-batch.d.ts → register-review.d.ts} +1 -1
- package/dist/cli/register-review.js +19 -0
- package/dist/cli/register-review.js.map +1 -0
- package/dist/cli/register-script.d.ts +3 -0
- package/dist/cli/register-script.js +256 -0
- package/dist/cli/register-script.js.map +1 -0
- package/dist/cli/register-workflows.js +37 -42
- package/dist/cli/register-workflows.js.map +1 -1
- package/dist/cli.js +6 -16
- package/dist/cli.js.map +1 -1
- package/dist/domain/ingest/environment.d.ts +2 -3
- package/dist/domain/ingest/environment.js +1 -4
- package/dist/domain/ingest/environment.js.map +1 -1
- package/dist/domain/script/names.d.ts +1 -1
- package/dist/domain/script/names.js +1 -3
- package/dist/domain/script/names.js.map +1 -1
- package/dist/domain/script/shared/types.d.ts +1 -18
- package/dist/domain/script/shared/types.js +4 -8
- package/dist/domain/script/shared/types.js.map +1 -1
- package/dist/domain/script/shared/validation.d.ts +1 -12
- package/dist/domain/script/shared/validation.js +2 -22
- package/dist/domain/script/shared/validation.js.map +1 -1
- package/dist/domain/script/timestamp.d.ts +1 -23
- package/dist/domain/script/timestamp.js +2 -126
- package/dist/domain/script/timestamp.js.map +1 -1
- package/dist/domain/script/v3/validation.d.ts +2 -3
- package/dist/domain/script/v3/validation.js +1 -232
- package/dist/domain/script/v3/validation.js.map +1 -1
- package/dist/domain/script/v4/ids.d.ts +2 -24
- package/dist/domain/script/v4/ids.js +19 -40
- package/dist/domain/script/v4/ids.js.map +1 -1
- package/dist/domain/script/v4/validation.d.ts +2 -2
- package/dist/domain/script/v4/validation.js +1 -410
- package/dist/domain/script/v4/validation.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 +2956 -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/action-span.d.ts +3 -19
- package/dist/usecases/script/action-span.js +19 -146
- package/dist/usecases/script/action-span.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 +11 -3
- package/skills/scriptctl/SKILL.md +157 -214
- package/skills/scriptctl/references/ingest-workflow.md +1 -1
- package/skills/scriptctl/references/state-reference-repair.md +23 -19
- package/skills/scriptctl/references/video-transcript-repair.md +27 -29
- package/dist/cli/register-batch.js +0 -28
- package/dist/cli/register-batch.js.map +0 -1
- package/dist/cli/register-edits.d.ts +0 -4
- package/dist/cli/register-edits.js +0 -234
- package/dist/cli/register-edits.js.map +0 -1
- package/dist/cli/register-query.d.ts +0 -4
- package/dist/cli/register-query.js +0 -95
- package/dist/cli/register-query.js.map +0 -1
- package/skills/scriptctl/references/atomic-edit-workflow.md +0 -47
- package/skills/scriptctl/references/bulk-authoring.md +0 -50
|
@@ -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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"}
|
|
@@ -1,25 +1,9 @@
|
|
|
1
1
|
import { type CommandOutput } from "../../common.js";
|
|
2
|
+
import { type SpanPoint, type SpanRow } from "@lingjingai/screenplay";
|
|
2
3
|
import type { ScriptV3 } from "../../domain/script/v3/types.js";
|
|
3
4
|
import type { ScriptV4 } from "../../domain/script/v4/types.js";
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
episodeId: string;
|
|
7
|
-
episodeNo: number;
|
|
8
|
-
timestamp?: string;
|
|
9
|
-
}
|
|
10
|
-
export interface ActionSpanRow extends Record<string, unknown> {
|
|
11
|
-
episode_id: string;
|
|
12
|
-
ep_no: number;
|
|
13
|
-
start_timestamp: string;
|
|
14
|
-
last_selected_timestamp: string;
|
|
15
|
-
end_timestamp: string;
|
|
16
|
-
end_open: boolean;
|
|
17
|
-
end_exclusive: true;
|
|
18
|
-
start_action: string;
|
|
19
|
-
last_action: string;
|
|
20
|
-
end_boundary_action: string;
|
|
21
|
-
matched_actions: number;
|
|
22
|
-
}
|
|
5
|
+
export type ActionSpanPoint = SpanPoint;
|
|
6
|
+
export type ActionSpanRow = SpanRow;
|
|
23
7
|
export declare function actionSpanPointsV3(script: ScriptV3): ActionSpanPoint[];
|
|
24
8
|
export declare function actionSpanPointsV4(script: ScriptV4): ActionSpanPoint[];
|
|
25
9
|
export declare function resolveActionSpan(timeline: readonly ActionSpanPoint[], selectedAddresses: readonly string[]): ActionSpanRow;
|
|
@@ -1,162 +1,35 @@
|
|
|
1
|
+
// The span logic lives in `@lingjingai/screenplay` so the SDK's `span` tool and
|
|
2
|
+
// this command compute it from one definition. Only the error mapping onto
|
|
3
|
+
// scriptctl's CliError stays here.
|
|
1
4
|
import { CliError, EXIT_INPUT, EXIT_RUNTIME, } from "../../common.js";
|
|
2
|
-
import {
|
|
3
|
-
function actionTimestamp(extend) {
|
|
4
|
-
const timestamp = extend?.timestamp;
|
|
5
|
-
if (typeof timestamp !== "string")
|
|
6
|
-
return undefined;
|
|
7
|
-
const trimmed = timestamp.trim();
|
|
8
|
-
return trimmed || undefined;
|
|
9
|
-
}
|
|
5
|
+
import { SPAN_COLUMNS, parse, resolveSpan, spanPoints, } from "@lingjingai/screenplay";
|
|
10
6
|
export function actionSpanPointsV3(script) {
|
|
11
|
-
return
|
|
12
|
-
address: `${episode.episode_id}/${scene.scene_id}#${actionIndex}`,
|
|
13
|
-
episodeId: episode.episode_id,
|
|
14
|
-
episodeNo: episodeIndex + 1,
|
|
15
|
-
timestamp: actionTimestamp(action.extend),
|
|
16
|
-
}))));
|
|
7
|
+
return spanPoints(parse(script));
|
|
17
8
|
}
|
|
18
9
|
export function actionSpanPointsV4(script) {
|
|
19
|
-
return
|
|
20
|
-
address: action.action_id,
|
|
21
|
-
episodeId: episode.episode_id,
|
|
22
|
-
episodeNo: episodeIndex + 1,
|
|
23
|
-
timestamp: actionTimestamp(action.extend),
|
|
24
|
-
}))));
|
|
10
|
+
return spanPoints(parse(script));
|
|
25
11
|
}
|
|
26
|
-
|
|
12
|
+
// Only an inconsistent selection is our own bug; every other span failure is
|
|
13
|
+
// something the caller can fix in the script or the selector.
|
|
14
|
+
const RUNTIME_CODES = new Set(["ACTION_SPAN_SELECTION_INCONSISTENT"]);
|
|
15
|
+
export function resolveActionSpan(timeline, selectedAddresses) {
|
|
27
16
|
try {
|
|
28
|
-
return
|
|
17
|
+
return resolveSpan(timeline, selectedAddresses);
|
|
29
18
|
}
|
|
30
19
|
catch (error) {
|
|
31
|
-
|
|
20
|
+
const detail = error;
|
|
21
|
+
if (!detail?.code?.startsWith("ACTION_SPAN_"))
|
|
32
22
|
throw error;
|
|
33
|
-
throw new CliError(
|
|
34
|
-
exitCode: EXIT_INPUT,
|
|
35
|
-
errorCode:
|
|
36
|
-
hint
|
|
37
|
-
data: {
|
|
38
|
-
expected: ["valid action.extend.timestamp"],
|
|
39
|
-
actual: [`${point.address}: ${JSON.stringify(point.timestamp ?? "")}`],
|
|
40
|
-
},
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
function nonMonotonic(previous, current) {
|
|
45
|
-
throw new CliError("Action timestamps run backward within the selected episode.", {
|
|
46
|
-
exitCode: EXIT_INPUT,
|
|
47
|
-
errorCode: "ACTION_SPAN_TIMESTAMP_NON_MONOTONIC",
|
|
48
|
-
hint: "Fix the stored timestamps so they do not move backward in document order, then rerun `actions --span`.",
|
|
49
|
-
data: {
|
|
50
|
-
actual: [
|
|
51
|
-
`${previous.address}: ${previous.timestamp}`,
|
|
52
|
-
`${current.address}: ${current.timestamp}`,
|
|
53
|
-
],
|
|
54
|
-
},
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
export function resolveActionSpan(timeline, selectedAddresses) {
|
|
58
|
-
if (selectedAddresses.length === 0) {
|
|
59
|
-
throw new CliError("The action selection matched nothing.", {
|
|
60
|
-
exitCode: EXIT_INPUT,
|
|
61
|
-
errorCode: "ACTION_SPAN_NO_MATCH",
|
|
62
|
-
hint: "Check the selector with `scriptctl actions` and rerun with `--span`.",
|
|
63
|
-
data: { actual: ["0 matched actions"] },
|
|
23
|
+
throw new CliError(detail.message ?? "Action span failed.", {
|
|
24
|
+
exitCode: RUNTIME_CODES.has(detail.code) ? EXIT_RUNTIME : EXIT_INPUT,
|
|
25
|
+
errorCode: detail.code,
|
|
26
|
+
...(detail.hint ? { hint: detail.hint } : {}),
|
|
27
|
+
...(detail.data ? { data: detail.data } : {}),
|
|
64
28
|
});
|
|
65
29
|
}
|
|
66
|
-
const selectedSet = new Set(selectedAddresses);
|
|
67
|
-
const selected = timeline.filter((point) => selectedSet.has(point.address));
|
|
68
|
-
if (selected.length !== selectedSet.size) {
|
|
69
|
-
throw new CliError("The resolved action selection is inconsistent with the script timeline.", {
|
|
70
|
-
exitCode: EXIT_RUNTIME,
|
|
71
|
-
errorCode: "ACTION_SPAN_SELECTION_INCONSISTENT",
|
|
72
|
-
data: {
|
|
73
|
-
expected: [`${selectedSet.size} timeline actions`],
|
|
74
|
-
actual: [`${selected.length} timeline actions`],
|
|
75
|
-
},
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
const episodeIds = new Set(selected.map((point) => point.episodeId));
|
|
79
|
-
if (episodeIds.size !== 1) {
|
|
80
|
-
throw new CliError("An action timestamp span must stay within one episode.", {
|
|
81
|
-
exitCode: EXIT_INPUT,
|
|
82
|
-
errorCode: "ACTION_SPAN_CROSSES_EPISODES",
|
|
83
|
-
hint: "Split the selector into one `actions --span` call per episode.",
|
|
84
|
-
data: { actual: [...episodeIds] },
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
const first = selected[0];
|
|
88
|
-
const last = selected[selected.length - 1];
|
|
89
|
-
if (!first.timestamp) {
|
|
90
|
-
throw new CliError(`The first selected Action ${first.address} has no timestamp.`, {
|
|
91
|
-
exitCode: EXIT_INPUT,
|
|
92
|
-
errorCode: "ACTION_SPAN_START_TIMESTAMP_MISSING",
|
|
93
|
-
hint: `Set it with \`scriptctl timestamp ${first.address} --set <time>\`, then rerun.`,
|
|
94
|
-
data: { actual: [first.address] },
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
const start = parsePointTimestamp(first);
|
|
98
|
-
let previousStampedPoint = first;
|
|
99
|
-
let previousTimestamp = start;
|
|
100
|
-
let lastSelectedTimestamp = "";
|
|
101
|
-
for (const point of selected) {
|
|
102
|
-
if (!point.timestamp)
|
|
103
|
-
continue;
|
|
104
|
-
const timestamp = parsePointTimestamp(point);
|
|
105
|
-
if (timestamp.milliseconds < previousTimestamp.milliseconds) {
|
|
106
|
-
nonMonotonic(previousStampedPoint, point);
|
|
107
|
-
}
|
|
108
|
-
previousStampedPoint = point;
|
|
109
|
-
previousTimestamp = timestamp;
|
|
110
|
-
if (point.address === last.address)
|
|
111
|
-
lastSelectedTimestamp = timestamp.canonical;
|
|
112
|
-
}
|
|
113
|
-
const lastTimelineIndex = timeline.findIndex((point) => point.address === last.address);
|
|
114
|
-
let boundary;
|
|
115
|
-
let boundaryTimestamp;
|
|
116
|
-
for (let index = lastTimelineIndex + 1; index < timeline.length; index += 1) {
|
|
117
|
-
const candidate = timeline[index];
|
|
118
|
-
if (candidate.episodeId !== first.episodeId)
|
|
119
|
-
break;
|
|
120
|
-
if (!candidate.timestamp)
|
|
121
|
-
continue;
|
|
122
|
-
const timestamp = parsePointTimestamp(candidate);
|
|
123
|
-
if (timestamp.milliseconds < previousTimestamp.milliseconds) {
|
|
124
|
-
nonMonotonic(previousStampedPoint, candidate);
|
|
125
|
-
}
|
|
126
|
-
if (timestamp.milliseconds === previousTimestamp.milliseconds)
|
|
127
|
-
continue;
|
|
128
|
-
boundary = candidate;
|
|
129
|
-
boundaryTimestamp = timestamp;
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
return {
|
|
133
|
-
episode_id: first.episodeId,
|
|
134
|
-
ep_no: first.episodeNo,
|
|
135
|
-
start_timestamp: start.canonical,
|
|
136
|
-
last_selected_timestamp: lastSelectedTimestamp,
|
|
137
|
-
end_timestamp: boundaryTimestamp?.canonical ?? "",
|
|
138
|
-
end_open: boundaryTimestamp === undefined,
|
|
139
|
-
end_exclusive: true,
|
|
140
|
-
start_action: first.address,
|
|
141
|
-
last_action: last.address,
|
|
142
|
-
end_boundary_action: boundary?.address ?? "",
|
|
143
|
-
matched_actions: selected.length,
|
|
144
|
-
};
|
|
145
30
|
}
|
|
146
31
|
export function actionSpanOutput(row) {
|
|
147
|
-
const rowColumns = [
|
|
148
|
-
"episode_id",
|
|
149
|
-
"ep_no",
|
|
150
|
-
"start_timestamp",
|
|
151
|
-
"last_selected_timestamp",
|
|
152
|
-
"end_timestamp",
|
|
153
|
-
"end_open",
|
|
154
|
-
"end_exclusive",
|
|
155
|
-
"start_action",
|
|
156
|
-
"last_action",
|
|
157
|
-
"end_boundary_action",
|
|
158
|
-
"matched_actions",
|
|
159
|
-
];
|
|
32
|
+
const rowColumns = [...SPAN_COLUMNS];
|
|
160
33
|
return {
|
|
161
34
|
text: rowColumns.map((column) => String(row[column])).join("\t"),
|
|
162
35
|
data: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-span.js","sourceRoot":"","sources":["../../../src/usecases/script/action-span.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,UAAU,EACV,YAAY,GAEb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"action-span.js","sourceRoot":"","sources":["../../../src/usecases/script/action-span.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2EAA2E;AAC3E,mCAAmC;AACnC,OAAO,EACL,QAAQ,EACR,UAAU,EACV,YAAY,GAEb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,YAAY,EACZ,KAAK,EACL,WAAW,EACX,UAAU,GAGX,MAAM,wBAAwB,CAAC;AAOhC,MAAM,UAAU,kBAAkB,CAAC,MAAgB;IACjD,OAAO,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAgB;IACjD,OAAO,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,6EAA6E;AAC7E,8DAA8D;AAC9D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC;AAEtE,MAAM,UAAU,iBAAiB,CAC/B,QAAoC,EACpC,iBAAoC;IAEpC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAA2E,CAAC;QAC3F,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC;YAAE,MAAM,KAAK,CAAC;QAC3D,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,qBAAqB,EAAE;YAC1D,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU;YACpE,SAAS,EAAE,MAAM,CAAC,IAAI;YACtB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAgC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAkB;IACjD,MAAM,UAAU,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IACrC,OAAO;QACL,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAChE,IAAI,EAAE;YACJ,EAAE,EAAE,mBAAmB;YACvB,WAAW,EAAE,UAAU;YACvB,IAAI,EAAE,CAAC,GAAG,CAAC;SACZ;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -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":"AAAA,8EAA8E;AAC9E,+EAA+E;AAC/E,wEAAwE;AACxE,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,kBAAkB;AAClB,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAA0B,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAa,KAAK,EAAE,MAAM,+BAA+B,CAAC;AASjE,MAAM,eAAe,GAAG,cAAc,CAAC;AAEvC,SAAS,cAAc,CAAC,GAAsB,EAAE,QAAgB;IAC9D,MAAM,IAAI,GAAG,QAAQ,IAAI,eAAe,CAAC;IACzC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,QAAQ,CAAC,gBAAgB,IAAI,mBAAmB,EAAE;YAC1D,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,wBAAwB;YACnC,IAAI,EAAE,2CAA2C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACtF,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;SAC/D,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,QAAQ,CAAC,aAAa,KAAK,CAAC,QAAQ,mBAAmB,EAAE;YACjE,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,yBAAyB;YACpC,IAAI,EAAE,wBAAwB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACtE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;SAC5E,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAAC,GAAG,QAAQ,CAAC,SAAS,cAAc,EAAE;YACtD,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,wBAAwB;YACnC,IAAI,EAAE,UAAU,QAAQ,CAAC,SAAS,iBAAiB,KAAK,CAAC,QAAQ,GAAG;YACpE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;SAC9D,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7F,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,SAAS;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,sEAAsE;IACtE,6EAA6E;IAC7E,sDAAsD;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;IAChF,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,SAAS,CAA8C,CAAC;IAC9E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAAC,oCAAoC,EAAE;YACvD,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,sBAAsB;YACjC,IAAI,EAAE,0FAA0F;YAChG,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,0BAA0B,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;SAC3G,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACtE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,QAAQ,CAAC,qEAAqE,EAAE;YACxF,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,yBAAyB;YACpC,IAAI,EAAE,+BAA+B;YACrC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE;SACnE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAU,EAAE,GAAW,EAAE,QAAgB;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,6BAA6B,EAAE;YAC3E,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,uBAAuB;YAClC,IAAI,EAAE,gCAAgC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG;YAC/D,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;SACjE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAU;IAC5C,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE9C,6EAA6E;IAC7E,2DAA2D;IAC3D,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,YAAY,KAAK,UAAU,CAAC;QACpD,OAAO,CAAC;gBACN,IAAI,EAAE,EAAE;oBACN,CAAC,CAAC,UAAU,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE;oBAC/C,CAAC,CAAC,gEAAgE;gBACpE,IAAI,EAAE;oBACJ,KAAK,EAAE,EAAE;oBACT,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;iBACxC;aACF,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,QAAQ,CAAC,8BAA8B,EAAE;YACjD,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,kBAAkB;YAC7B,IAAI,EAAE,4FAA4F;YAClG,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,4BAA4B,CAAC,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE;SACzE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAa,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,QAAQ,CAAC,gCAAgC,EAAE;YACnD,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,yBAAyB;YACpC,IAAI,EAAE,kDAAkD;YACxD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;SAC1E,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,QAAQ,CAAC,yBAAyB,EAAE;YAC5C,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,yBAAyB;YACpC,IAAI,EAAE,oGAAoG;YAC1G,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,kCAAkC,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;SAC3E,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAErF,IAAI,CAAC;QACH,MAAM,YAAY,CAAC;YACjB,UAAU;YACV,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpG,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;YAC7C,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK;YACpC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,KAAK;YACzB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC;YACzC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;YAC9C,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,EAAE,CAAC,GAAG,MAAM,CAAC;YAClE,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,QAAQ;YAAE,MAAM,KAAK,CAAC;QAC3C,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE;YACnC,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,eAAe;YAC1B,IAAI,EAAE,mEAAmE;YACzE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;SACzG,CAAC,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC"}
|
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.
|
|
3
|
+
"version": "0.61.1",
|
|
4
4
|
"description": "剧本阶段统一 CLI:素材转 Script v4,并兼容 Script v3 的本地写作、精修、校验和发布。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"node": ">=20"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
|
-
"build": "tsc",
|
|
23
|
-
"clean": "rm -rf dist",
|
|
22
|
+
"build": "pnpm --filter @lingjingai/screenplay build && pnpm --filter @lingjingai/review-agent build && tsc && node scripts/bundle.mjs",
|
|
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",
|
|
26
26
|
"prepublishOnly": "pnpm run clean && pnpm run build",
|
|
@@ -46,9 +46,12 @@
|
|
|
46
46
|
"yaml": "^2.8.1"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
+
"@lingjingai/review-agent": "workspace:*",
|
|
50
|
+
"@lingjingai/screenplay": "workspace:*",
|
|
49
51
|
"@types/node": "^20.14.0",
|
|
50
52
|
"@types/proper-lockfile": "^4.1.4",
|
|
51
53
|
"c8": "^11.0.0",
|
|
54
|
+
"esbuild": "^0.28.2",
|
|
52
55
|
"typescript": "^5.5.0",
|
|
53
56
|
"vitest": "^2.0.0"
|
|
54
57
|
},
|
|
@@ -61,5 +64,10 @@
|
|
|
61
64
|
"license": "MIT",
|
|
62
65
|
"publishConfig": {
|
|
63
66
|
"access": "public"
|
|
67
|
+
},
|
|
68
|
+
"optionalDependencies": {
|
|
69
|
+
"@ai-sdk/google": "^4.0.63",
|
|
70
|
+
"@mastra/core": "^1.64.0",
|
|
71
|
+
"zod": "^4.5.4"
|
|
64
72
|
}
|
|
65
73
|
}
|