@lingjingai/scriptctl 0.60.13 → 0.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/changes/0.61.0.md +19 -0
  2. package/dist/cli/register-script.d.ts +3 -0
  3. package/dist/cli/register-script.js +256 -0
  4. package/dist/cli/register-script.js.map +1 -0
  5. package/dist/cli/register-workflows.js +37 -42
  6. package/dist/cli/register-workflows.js.map +1 -1
  7. package/dist/cli.js +2 -6
  8. package/dist/cli.js.map +1 -1
  9. package/dist/domain/ingest/environment.d.ts +2 -3
  10. package/dist/domain/ingest/environment.js +1 -4
  11. package/dist/domain/ingest/environment.js.map +1 -1
  12. package/dist/domain/script/names.d.ts +1 -1
  13. package/dist/domain/script/names.js +1 -3
  14. package/dist/domain/script/names.js.map +1 -1
  15. package/dist/domain/script/shared/types.d.ts +1 -18
  16. package/dist/domain/script/shared/types.js +4 -8
  17. package/dist/domain/script/shared/types.js.map +1 -1
  18. package/dist/domain/script/shared/validation.d.ts +1 -12
  19. package/dist/domain/script/shared/validation.js +2 -22
  20. package/dist/domain/script/shared/validation.js.map +1 -1
  21. package/dist/domain/script/timestamp.d.ts +1 -23
  22. package/dist/domain/script/timestamp.js +2 -126
  23. package/dist/domain/script/timestamp.js.map +1 -1
  24. package/dist/domain/script/v3/validation.d.ts +2 -3
  25. package/dist/domain/script/v3/validation.js +1 -232
  26. package/dist/domain/script/v3/validation.js.map +1 -1
  27. package/dist/domain/script/v4/ids.d.ts +2 -24
  28. package/dist/domain/script/v4/ids.js +19 -40
  29. package/dist/domain/script/v4/ids.js.map +1 -1
  30. package/dist/domain/script/v4/validation.d.ts +2 -2
  31. package/dist/domain/script/v4/validation.js +1 -410
  32. package/dist/domain/script/v4/validation.js.map +1 -1
  33. package/dist/usecases/script/action-span.d.ts +3 -19
  34. package/dist/usecases/script/action-span.js +19 -146
  35. package/dist/usecases/script/action-span.js.map +1 -1
  36. package/package.json +4 -3
  37. package/skills/scriptctl/SKILL.md +148 -214
  38. package/skills/scriptctl/references/ingest-workflow.md +1 -1
  39. package/skills/scriptctl/references/state-reference-repair.md +23 -19
  40. package/skills/scriptctl/references/video-transcript-repair.md +27 -29
  41. package/dist/cli/register-batch.d.ts +0 -3
  42. package/dist/cli/register-batch.js +0 -28
  43. package/dist/cli/register-batch.js.map +0 -1
  44. package/dist/cli/register-edits.d.ts +0 -4
  45. package/dist/cli/register-edits.js +0 -234
  46. package/dist/cli/register-edits.js.map +0 -1
  47. package/dist/cli/register-query.d.ts +0 -4
  48. package/dist/cli/register-query.js +0 -95
  49. package/dist/cli/register-query.js.map +0 -1
  50. package/skills/scriptctl/references/atomic-edit-workflow.md +0 -47
  51. package/skills/scriptctl/references/bulk-authoring.md +0 -50
@@ -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 { parseTimestamp, TimestampParseError, } from "../../domain/script/timestamp.js";
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 script.episodes.flatMap((episode, episodeIndex) => episode.scenes.flatMap((scene) => scene.actions.map((action, actionIndex) => ({
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 script.episodes.flatMap((episode, episodeIndex) => episode.scenes.flatMap((scene) => scene.actions.map((action) => ({
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
- function parsePointTimestamp(point) {
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 parseTimestamp(point.timestamp ?? "");
17
+ return resolveSpan(timeline, selectedAddresses);
29
18
  }
30
19
  catch (error) {
31
- if (!(error instanceof TimestampParseError))
20
+ const detail = error;
21
+ if (!detail?.code?.startsWith("ACTION_SPAN_"))
32
22
  throw error;
33
- throw new CliError(`Action ${point.address} has an invalid stored timestamp.`, {
34
- exitCode: EXIT_INPUT,
35
- errorCode: "ACTION_SPAN_TIMESTAMP_INVALID",
36
- hint: `Fix it with \`scriptctl timestamp ${point.address} --set <time>\` or remove it.`,
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":"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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lingjingai/scriptctl",
3
- "version": "0.60.13",
3
+ "version": "0.61.0",
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 && tsc",
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",
@@ -35,6 +35,7 @@
35
35
  "dependencies": {
36
36
  "@anthropic-ai/sdk": "^0.111.0",
37
37
  "@google/genai": "^2.11.0",
38
+ "@lingjingai/screenplay": "workspace:*",
38
39
  "commander": "^12.1.0",
39
40
  "fast-json-patch": "^3.1.1",
40
41
  "fast-xml-parser": "^5.9.0",