@lingjingai/scriptctl 0.19.2 → 0.21.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 (210) hide show
  1. package/dist/cli.js +99 -11
  2. package/dist/cli.js.map +1 -1
  3. package/dist/common.d.ts +4 -1
  4. package/dist/common.js +37 -27
  5. package/dist/common.js.map +1 -1
  6. package/dist/domain/direct-core.d.ts +6 -3
  7. package/dist/domain/direct-core.js +89 -72
  8. package/dist/domain/direct-core.js.map +1 -1
  9. package/dist/domain/script/address.d.ts +30 -0
  10. package/dist/domain/script/address.js +141 -0
  11. package/dist/domain/script/address.js.map +1 -0
  12. package/dist/domain/script/lookups.d.ts +33 -0
  13. package/dist/domain/script/lookups.js +309 -0
  14. package/dist/domain/script/lookups.js.map +1 -0
  15. package/dist/domain/script/patch/apply.d.ts +4 -0
  16. package/dist/domain/script/patch/apply.js +38 -0
  17. package/dist/domain/script/patch/apply.js.map +1 -0
  18. package/dist/domain/script/patch/helpers.d.ts +11 -0
  19. package/dist/domain/script/patch/helpers.js +141 -0
  20. package/dist/domain/script/patch/helpers.js.map +1 -0
  21. package/dist/domain/script/patch/ops-action.d.ts +12 -0
  22. package/dist/domain/script/patch/ops-action.js +371 -0
  23. package/dist/domain/script/patch/ops-action.js.map +1 -0
  24. package/dist/domain/script/patch/ops-asset.d.ts +13 -0
  25. package/dist/domain/script/patch/ops-asset.js +363 -0
  26. package/dist/domain/script/patch/ops-asset.js.map +1 -0
  27. package/dist/domain/script/patch/ops-dialogue.d.ts +5 -0
  28. package/dist/domain/script/patch/ops-dialogue.js +233 -0
  29. package/dist/domain/script/patch/ops-dialogue.js.map +1 -0
  30. package/dist/domain/script/patch/ops-meta.d.ts +3 -0
  31. package/dist/domain/script/patch/ops-meta.js +47 -0
  32. package/dist/domain/script/patch/ops-meta.js.map +1 -0
  33. package/dist/domain/script/patch/ops-scene.d.ts +6 -0
  34. package/dist/domain/script/patch/ops-scene.js +345 -0
  35. package/dist/domain/script/patch/ops-scene.js.map +1 -0
  36. package/dist/domain/script/patch/ops-state.d.ts +8 -0
  37. package/dist/domain/script/patch/ops-state.js +146 -0
  38. package/dist/domain/script/patch/ops-state.js.map +1 -0
  39. package/dist/domain/script/patch/registry.d.ts +2 -0
  40. package/dist/domain/script/patch/registry.js +50 -0
  41. package/dist/domain/script/patch/registry.js.map +1 -0
  42. package/dist/domain/script/patch/types.d.ts +10 -0
  43. package/dist/domain/script/patch/types.js +2 -0
  44. package/dist/domain/script/patch/types.js.map +1 -0
  45. package/dist/domain/script/refs.d.ts +4 -0
  46. package/dist/domain/script/refs.js +152 -0
  47. package/dist/domain/script/refs.js.map +1 -0
  48. package/dist/domain/script/schema.d.ts +6 -0
  49. package/dist/domain/script/schema.js +53 -0
  50. package/dist/domain/script/schema.js.map +1 -0
  51. package/dist/domain/script/selector.d.ts +45 -0
  52. package/dist/domain/script/selector.js +187 -0
  53. package/dist/domain/script/selector.js.map +1 -0
  54. package/dist/domain/script/shared.d.ts +15 -0
  55. package/dist/domain/script/shared.js +37 -0
  56. package/dist/domain/script/shared.js.map +1 -0
  57. package/dist/domain/script/validate.d.ts +22 -0
  58. package/dist/domain/script/validate.js +844 -0
  59. package/dist/domain/script/validate.js.map +1 -0
  60. package/dist/help-text.js +21 -4
  61. package/dist/help-text.js.map +1 -1
  62. package/dist/infra/providers.d.ts +2 -0
  63. package/dist/infra/providers.js +81 -35
  64. package/dist/infra/providers.js.map +1 -1
  65. package/dist/output.d.ts +1 -1
  66. package/dist/output.js +11 -1
  67. package/dist/output.js.map +1 -1
  68. package/dist/usecases/direct.js +1 -1
  69. package/dist/usecases/direct.js.map +1 -1
  70. package/dist/usecases/parse.js +1 -1
  71. package/dist/usecases/parse.js.map +1 -1
  72. package/dist/usecases/script/actions.d.ts +3 -0
  73. package/dist/usecases/script/actions.js +71 -0
  74. package/dist/usecases/script/actions.js.map +1 -0
  75. package/dist/usecases/script/actor.d.ts +3 -0
  76. package/dist/usecases/script/actor.js +27 -0
  77. package/dist/usecases/script/actor.js.map +1 -0
  78. package/dist/usecases/script/actors.d.ts +3 -0
  79. package/dist/usecases/script/actors.js +15 -0
  80. package/dist/usecases/script/actors.js.map +1 -0
  81. package/dist/usecases/script/add-actor.d.ts +3 -0
  82. package/dist/usecases/script/add-actor.js +13 -0
  83. package/dist/usecases/script/add-actor.js.map +1 -0
  84. package/dist/usecases/script/add-episode.d.ts +3 -0
  85. package/dist/usecases/script/add-episode.js +9 -0
  86. package/dist/usecases/script/add-episode.js.map +1 -0
  87. package/dist/usecases/script/add-location.d.ts +3 -0
  88. package/dist/usecases/script/add-location.js +11 -0
  89. package/dist/usecases/script/add-location.js.map +1 -0
  90. package/dist/usecases/script/add-prop.d.ts +3 -0
  91. package/dist/usecases/script/add-prop.js +11 -0
  92. package/dist/usecases/script/add-prop.js.map +1 -0
  93. package/dist/usecases/script/add-speaker.d.ts +3 -0
  94. package/dist/usecases/script/add-speaker.js +22 -0
  95. package/dist/usecases/script/add-speaker.js.map +1 -0
  96. package/dist/usecases/script/alias.d.ts +3 -0
  97. package/dist/usecases/script/alias.js +40 -0
  98. package/dist/usecases/script/alias.js.map +1 -0
  99. package/dist/usecases/script/assets.d.ts +3 -0
  100. package/dist/usecases/script/assets.js +21 -0
  101. package/dist/usecases/script/assets.js.map +1 -0
  102. package/dist/usecases/script/context.d.ts +3 -0
  103. package/dist/usecases/script/context.js +20 -0
  104. package/dist/usecases/script/context.js.map +1 -0
  105. package/dist/usecases/script/create.d.ts +3 -0
  106. package/dist/usecases/script/create.js +81 -0
  107. package/dist/usecases/script/create.js.map +1 -0
  108. package/dist/usecases/script/delete.d.ts +3 -0
  109. package/dist/usecases/script/delete.js +79 -0
  110. package/dist/usecases/script/delete.js.map +1 -0
  111. package/dist/usecases/script/describe.d.ts +3 -0
  112. package/dist/usecases/script/describe.js +31 -0
  113. package/dist/usecases/script/describe.js.map +1 -0
  114. package/dist/usecases/script/dialogue.d.ts +3 -0
  115. package/dist/usecases/script/dialogue.js +28 -0
  116. package/dist/usecases/script/dialogue.js.map +1 -0
  117. package/dist/usecases/script/do.d.ts +3 -0
  118. package/dist/usecases/script/do.js +130 -0
  119. package/dist/usecases/script/do.js.map +1 -0
  120. package/dist/usecases/script/episodes.d.ts +3 -0
  121. package/dist/usecases/script/episodes.js +36 -0
  122. package/dist/usecases/script/episodes.js.map +1 -0
  123. package/dist/usecases/script/export.d.ts +3 -0
  124. package/dist/usecases/script/export.js +117 -0
  125. package/dist/usecases/script/export.js.map +1 -0
  126. package/dist/usecases/script/insert.d.ts +3 -0
  127. package/dist/usecases/script/insert.js +87 -0
  128. package/dist/usecases/script/insert.js.map +1 -0
  129. package/dist/usecases/script/issues.d.ts +3 -0
  130. package/dist/usecases/script/issues.js +27 -0
  131. package/dist/usecases/script/issues.js.map +1 -0
  132. package/dist/usecases/script/lib.d.ts +77 -0
  133. package/dist/usecases/script/lib.js +849 -0
  134. package/dist/usecases/script/lib.js.map +1 -0
  135. package/dist/usecases/script/locations.d.ts +3 -0
  136. package/dist/usecases/script/locations.js +15 -0
  137. package/dist/usecases/script/locations.js.map +1 -0
  138. package/dist/usecases/script/merge.d.ts +3 -0
  139. package/dist/usecases/script/merge.js +43 -0
  140. package/dist/usecases/script/merge.js.map +1 -0
  141. package/dist/usecases/script/move.d.ts +3 -0
  142. package/dist/usecases/script/move.js +33 -0
  143. package/dist/usecases/script/move.js.map +1 -0
  144. package/dist/usecases/script/overlap.d.ts +3 -0
  145. package/dist/usecases/script/overlap.js +21 -0
  146. package/dist/usecases/script/overlap.js.map +1 -0
  147. package/dist/usecases/script/props.d.ts +3 -0
  148. package/dist/usecases/script/props.js +15 -0
  149. package/dist/usecases/script/props.js.map +1 -0
  150. package/dist/usecases/script/refs.d.ts +3 -0
  151. package/dist/usecases/script/refs.js +61 -0
  152. package/dist/usecases/script/refs.js.map +1 -0
  153. package/dist/usecases/script/rename.d.ts +3 -0
  154. package/dist/usecases/script/rename.js +17 -0
  155. package/dist/usecases/script/rename.js.map +1 -0
  156. package/dist/usecases/script/replace.d.ts +3 -0
  157. package/dist/usecases/script/replace.js +35 -0
  158. package/dist/usecases/script/replace.js.map +1 -0
  159. package/dist/usecases/script/role.d.ts +3 -0
  160. package/dist/usecases/script/role.js +17 -0
  161. package/dist/usecases/script/role.js.map +1 -0
  162. package/dist/usecases/script/scenes.d.ts +3 -0
  163. package/dist/usecases/script/scenes.js +45 -0
  164. package/dist/usecases/script/scenes.js.map +1 -0
  165. package/dist/usecases/script/script-patch.d.ts +3 -0
  166. package/dist/usecases/script/script-patch.js +187 -0
  167. package/dist/usecases/script/script-patch.js.map +1 -0
  168. package/dist/usecases/script/script-validate.d.ts +3 -0
  169. package/dist/usecases/script/script-validate.js +30 -0
  170. package/dist/usecases/script/script-validate.js.map +1 -0
  171. package/dist/usecases/script/session.d.ts +44 -0
  172. package/dist/usecases/script/session.js +527 -0
  173. package/dist/usecases/script/session.js.map +1 -0
  174. package/dist/usecases/script/speakers.d.ts +3 -0
  175. package/dist/usecases/script/speakers.js +28 -0
  176. package/dist/usecases/script/speakers.js.map +1 -0
  177. package/dist/usecases/script/split.d.ts +3 -0
  178. package/dist/usecases/script/split.js +37 -0
  179. package/dist/usecases/script/split.js.map +1 -0
  180. package/dist/usecases/script/state-add.d.ts +3 -0
  181. package/dist/usecases/script/state-add.js +23 -0
  182. package/dist/usecases/script/state-add.js.map +1 -0
  183. package/dist/usecases/script/state-change.d.ts +3 -0
  184. package/dist/usecases/script/state-change.js +24 -0
  185. package/dist/usecases/script/state-change.js.map +1 -0
  186. package/dist/usecases/script/state-delete.d.ts +3 -0
  187. package/dist/usecases/script/state-delete.js +23 -0
  188. package/dist/usecases/script/state-delete.js.map +1 -0
  189. package/dist/usecases/script/state-rename.d.ts +3 -0
  190. package/dist/usecases/script/state-rename.js +17 -0
  191. package/dist/usecases/script/state-rename.js.map +1 -0
  192. package/dist/usecases/script/summary.d.ts +3 -0
  193. package/dist/usecases/script/summary.js +45 -0
  194. package/dist/usecases/script/summary.js.map +1 -0
  195. package/dist/usecases/script/transition.d.ts +3 -0
  196. package/dist/usecases/script/transition.js +24 -0
  197. package/dist/usecases/script/transition.js.map +1 -0
  198. package/dist/usecases/script/type.d.ts +3 -0
  199. package/dist/usecases/script/type.js +24 -0
  200. package/dist/usecases/script/type.js.map +1 -0
  201. package/dist/usecases/script/worldview.d.ts +3 -0
  202. package/dist/usecases/script/worldview.js +18 -0
  203. package/dist/usecases/script/worldview.js.map +1 -0
  204. package/package.json +1 -1
  205. package/dist/domain/script-core.d.ts +0 -78
  206. package/dist/domain/script-core.js +0 -3026
  207. package/dist/domain/script-core.js.map +0 -1
  208. package/dist/usecases/script.d.ts +0 -67
  209. package/dist/usecases/script.js +0 -2348
  210. package/dist/usecases/script.js.map +0 -1
@@ -0,0 +1,187 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { CliError, EXIT_INPUT, EXIT_NEEDS_AGENT, EXIT_OK, EXIT_USAGE, directDir, exists, readJson, } from "../../common.js";
4
+ import { applyPatchOperations } from "../../domain/script/patch/apply.js";
5
+ import { PATCH_OP_SCHEMA } from "../../domain/script/schema.js";
6
+ import { summarizeIssues, } from "../direct.js";
7
+ import { asList, strOf, } from "../../domain/script/shared.js";
8
+ import { loadScriptForEdit, validateSession, saveScriptSession, syncValidationResult, scriptSourceText, patchOperationsFromPayload, } from "./session.js";
9
+ export async function commandScriptPatch(opts) {
10
+ // --schema: dump op schemas as JSON; no script load, no file required.
11
+ // `--schema <op>` narrows to a single op; bare `--schema` dumps all.
12
+ const schemaOpt = opts["schema"];
13
+ if (schemaOpt !== undefined && schemaOpt !== false) {
14
+ const specificOp = typeof schemaOpt === "string" && schemaOpt !== "" ? schemaOpt : null;
15
+ if (specificOp) {
16
+ const entry = PATCH_OP_SCHEMA[specificOp];
17
+ if (!entry) {
18
+ throw new CliError("SCRIPT PATCH BLOCKED: Unknown op", "Unknown op.", {
19
+ exitCode: EXIT_USAGE,
20
+ required: ["existing dot-style op name (e.g. asset.rename)"],
21
+ received: [specificOp],
22
+ nextSteps: ["Run `scriptctl patch --schema` (no value) to list all ops."],
23
+ errorCode: "PATCH_OP_UNKNOWN",
24
+ });
25
+ }
26
+ const report = {
27
+ title: `PATCH OP SCHEMA: ${specificOp}`,
28
+ op: "patch.schema",
29
+ changed: false,
30
+ summary: entry.description,
31
+ result: [
32
+ `op: ${specificOp}`,
33
+ `required: ${entry.required.join(", ") || "(none)"}`,
34
+ `optional: ${entry.optional.join(", ") || "(none)"}`,
35
+ ],
36
+ body: JSON.stringify({ op: specificOp, ...entry }, null, 2),
37
+ next: ["Construct a patch file with these fields and run `scriptctl patch <file>`."],
38
+ };
39
+ return [report, EXIT_OK];
40
+ }
41
+ const ops = Object.keys(PATCH_OP_SCHEMA).sort();
42
+ const report = {
43
+ title: "PATCH OP SCHEMA",
44
+ op: "patch.schema",
45
+ changed: false,
46
+ summary: `${ops.length} dot-style ops supported`,
47
+ result: ops.map((name) => {
48
+ const e = PATCH_OP_SCHEMA[name];
49
+ return `${name}: required=[${e.required.join(",")}] optional=[${e.optional.join(",")}]`;
50
+ }),
51
+ body: JSON.stringify(PATCH_OP_SCHEMA, null, 2),
52
+ next: ["Use `scriptctl patch --schema <op>` for a single op, or write a patch file and run `scriptctl patch <file>`."],
53
+ };
54
+ return [report, EXIT_OK];
55
+ }
56
+ const workspace = strOf(opts["workspace_path"] || "workspace");
57
+ const patchPath = strOf(opts["patch"]);
58
+ if (!patchPath) {
59
+ throw new CliError("SCRIPT PATCH BLOCKED: Patch file missing", "Patch file missing.", {
60
+ exitCode: EXIT_USAGE,
61
+ required: ["<file> positional argument"],
62
+ received: ["<empty>"],
63
+ nextSteps: ["Pass a patch JSON file, or use --schema to inspect op definitions."],
64
+ errorCode: "PATCH_FILE_MISSING",
65
+ });
66
+ }
67
+ // `patch -` reads ops JSON from stdin — the machine/jq pipeline收口
68
+ // (`scriptctl actions … --json | jq '[…]' | scriptctl patch -`), no temp file.
69
+ let payload;
70
+ if (patchPath === "-") {
71
+ let raw;
72
+ if (process.stdin.isTTY) {
73
+ throw new CliError("SCRIPT PATCH BLOCKED: no stdin", "no patch JSON piped to stdin.", {
74
+ exitCode: EXIT_INPUT,
75
+ required: ["piped JSON ops on stdin"],
76
+ received: ["<tty, no pipe>"],
77
+ nextSteps: ["Pipe ops JSON: … | scriptctl patch -"],
78
+ errorCode: "PATCH_NOT_FOUND",
79
+ });
80
+ }
81
+ try {
82
+ raw = fs.readFileSync(0, "utf-8");
83
+ }
84
+ catch {
85
+ throw new CliError("SCRIPT PATCH BLOCKED: no stdin", "no patch JSON on stdin.", {
86
+ exitCode: EXIT_INPUT,
87
+ required: ["piped JSON ops on stdin"],
88
+ received: ["<no stdin>"],
89
+ nextSteps: ["Pipe ops JSON: … | scriptctl patch -"],
90
+ errorCode: "PATCH_NOT_FOUND",
91
+ });
92
+ }
93
+ try {
94
+ payload = JSON.parse(raw);
95
+ }
96
+ catch (exc) {
97
+ throw new CliError("SCRIPT PATCH BLOCKED: Patch JSON invalid", "Patch JSON invalid.", {
98
+ exitCode: EXIT_USAGE,
99
+ required: ["valid JSON patch"],
100
+ received: [`<stdin>: ${exc.message}`],
101
+ nextSteps: ["Fix the JSON your producer emits."],
102
+ errorCode: "PATCH_JSON_INVALID",
103
+ });
104
+ }
105
+ }
106
+ else {
107
+ if (!exists(patchPath)) {
108
+ throw new CliError("SCRIPT PATCH BLOCKED: Patch file not found", "Patch file not found.", {
109
+ exitCode: EXIT_INPUT,
110
+ required: ["existing patch JSON file"],
111
+ received: [patchPath],
112
+ nextSteps: ["Write patch JSON and rerun, or pipe via stdin with `-`."],
113
+ errorCode: "PATCH_NOT_FOUND",
114
+ });
115
+ }
116
+ try {
117
+ payload = readJson(patchPath);
118
+ }
119
+ catch (exc) {
120
+ throw new CliError("SCRIPT PATCH BLOCKED: Patch JSON invalid", "Patch JSON invalid.", {
121
+ exitCode: EXIT_USAGE,
122
+ required: ["valid JSON patch"],
123
+ received: [`${patchPath}: ${exc.message}`],
124
+ nextSteps: ["Fix patch JSON and rerun."],
125
+ errorCode: "PATCH_JSON_INVALID",
126
+ });
127
+ }
128
+ }
129
+ const operations = patchOperationsFromPayload(payload);
130
+ const dryRun = Boolean(opts["dry_run"]);
131
+ const session = await loadScriptForEdit(opts);
132
+ const script = session.script;
133
+ const applied = applyPatchOperations(script, scriptSourceText(workspace), operations);
134
+ if (dryRun) {
135
+ // Validate the in-memory mutated script WITHOUT calling saveScriptSession.
136
+ // Run validate but skip syncValidationResult (which writes to remote) too.
137
+ const validation = validateSession(session);
138
+ const passed = Boolean(validation["passed"]);
139
+ const report = {
140
+ title: passed ? "SCRIPT PATCH DRY-RUN PASSED" : "SCRIPT PATCH DRY-RUN: Validation needs repair",
141
+ op: "script.patch.dry-run",
142
+ changed: false,
143
+ summary: `would apply ${applied.length} operation(s) — no write performed`,
144
+ warnings: passed ? [] : summarizeIssues(asList(validation["issues"])),
145
+ result: [
146
+ `operations: ${applied.length}`,
147
+ `validation: ${passed ? "would pass" : "would need repair"}`,
148
+ "dry-run: no remote/local write performed",
149
+ ],
150
+ issues: summarizeIssues(asList(validation["issues"])),
151
+ artifacts: [session.artifactLabel],
152
+ next: [passed ? "Re-run without --dry-run to commit." : "Resolve validation issues before committing."],
153
+ };
154
+ return [report, passed ? EXIT_OK : EXIT_NEEDS_AGENT];
155
+ }
156
+ const [newRevision, idempotent] = await saveScriptSession(session, opts, applied.length === 1 ? applied[0] : "script.patch");
157
+ const validation = validateSession(session);
158
+ await syncValidationResult(session, validation, newRevision);
159
+ const passed = Boolean(validation["passed"]);
160
+ const resultLines = [
161
+ `operations: ${applied.length}`,
162
+ `validation: ${passed ? "passed" : "needs repair"}`,
163
+ ];
164
+ if (session.remote) {
165
+ resultLines.push(`revision: ${newRevision}`);
166
+ resultLines.push(`idempotent: ${String(idempotent).toLowerCase()}`);
167
+ }
168
+ const report = {
169
+ title: passed ? "SCRIPT PATCH APPLIED" : "SCRIPT PATCH APPLIED: Validation needs repair",
170
+ op: applied.length === 1 ? applied[0] : "script.patch",
171
+ changed: applied.length > 0,
172
+ summary: `applied ${applied.length} operation(s)`,
173
+ warnings: passed ? [] : summarizeIssues(asList(validation["issues"])),
174
+ result: resultLines,
175
+ issues: summarizeIssues(asList(validation["issues"])),
176
+ artifacts: [session.artifactLabel, path.join(directDir(workspace), "validation.json")],
177
+ next: [passed ? "Continue editing the final script." : "Inspect issues and apply another patch."],
178
+ };
179
+ return [report, passed ? EXIT_OK : EXIT_NEEDS_AGENT];
180
+ }
181
+ // ---------------------------------------------------------------------------
182
+ // command_batch — run one non-structural op across every action a selector matches
183
+ // ---------------------------------------------------------------------------
184
+ // Per-action errors that simply mean "this op doesn't apply here" during a
185
+ // selector sweep (the action has no match / is overlap dialogue). Counted as
186
+ // skipped rather than aborting the whole edit. Anything else is fatal.
187
+ //# sourceMappingURL=script-patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-patch.js","sourceRoot":"","sources":["../../../src/usecases/script/script-patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type Report } from "../../common.js";
2
+ import { type Dict } from "../../domain/script/shared.js";
3
+ export declare function commandScriptValidate(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,30 @@
1
+ import * as path from "node:path";
2
+ import { EXIT_NEEDS_AGENT, EXIT_OK, directDir, } from "../../common.js";
3
+ import { summarizeIssues, } from "../direct.js";
4
+ import { asList, strOf, } from "../../domain/script/shared.js";
5
+ import { loadScriptForEdit, validateSession, syncValidationResult, } from "./session.js";
6
+ export async function commandScriptValidate(opts) {
7
+ const workspace = strOf(opts["workspace_path"] || "workspace");
8
+ const session = await loadScriptForEdit(opts);
9
+ const validation = validateSession(session);
10
+ await syncValidationResult(session, validation);
11
+ const stats = validation["stats"] ?? {};
12
+ const passed = Boolean(validation["passed"]);
13
+ const report = {
14
+ title: passed ? "SCRIPT VALIDATE PASSED" : "SCRIPT VALIDATE NEEDS REPAIR",
15
+ op: "script.validate",
16
+ changed: false,
17
+ summary: `episodes=${stats["episodes"] ?? 0}, scenes=${stats["scenes"] ?? 0}, actions=${stats["actions"] ?? 0}`,
18
+ result: [
19
+ `episodes: ${stats["episodes"] ?? 0}`,
20
+ `scenes: ${stats["scenes"] ?? 0}`,
21
+ `actions: ${stats["actions"] ?? 0}`,
22
+ `speakers: ${stats["speakers"] ?? 0}`,
23
+ ],
24
+ issues: summarizeIssues(asList(validation["issues"])),
25
+ artifacts: [session.artifactLabel, path.join(directDir(workspace), "validation.json")],
26
+ next: [passed ? "Continue editing the final script." : "Inspect issues and apply a script patch."],
27
+ };
28
+ return [report, passed ? EXIT_OK : EXIT_NEEDS_AGENT];
29
+ }
30
+ //# sourceMappingURL=script-validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-validate.js","sourceRoot":"","sources":["../../../src/usecases/script/script-validate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EAGL,gBAAgB,EAChB,OAAO,EAIP,SAAS,GAOV,MAAM,iBAAiB,CAAC;AA6BzB,OAAO,EAEL,eAAe,GAEhB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,MAAM,EAIN,KAAK,GACN,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,iBAAiB,EAAE,eAAe,EAAqB,oBAAoB,GAE5E,MAAM,cAAc,CAAC;AAKtB,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAU;IACpD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,WAAW,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,KAAK,GAAI,UAAU,CAAC,OAAO,CAAU,IAAI,EAAE,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAW;QACrB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,8BAA8B;QACzE,EAAE,EAAE,iBAAiB;QACrB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,YAAY,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QAC/G,MAAM,EAAE;YACN,aAAa,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACrC,WAAW,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACjC,YAAY,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACnC,aAAa,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;SACtC;QACD,MAAM,EAAE,eAAe,CAAC,MAAM,CAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3D,SAAS,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACtF,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,0CAA0C,CAAC;KACnG,CAAC;IACF,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { CliError } from "../../common.js";
2
+ import { ScriptOutputApiError, type ScriptOutputStore } from "../../infra/script-output-store.js";
3
+ import { type Dict } from "../../domain/script/shared.js";
4
+ export declare function parseBound(v: unknown): number | null;
5
+ interface EpisodeCharCounts {
6
+ total: number;
7
+ dialogue: number;
8
+ action: number;
9
+ }
10
+ export declare function episodeCharCounts(scenes: Dict[]): EpisodeCharCounts;
11
+ export declare class ScriptEditSession {
12
+ workspace: string;
13
+ script: Dict;
14
+ scriptPath: string | null;
15
+ client: ScriptOutputStore | null;
16
+ projectGroupNo: string | null;
17
+ revision: number | null;
18
+ constructor(opts: {
19
+ workspace: string;
20
+ script: Dict;
21
+ scriptPath?: string | null;
22
+ client?: ScriptOutputStore | null;
23
+ projectGroupNo?: string | null;
24
+ revision?: number | null;
25
+ });
26
+ get remote(): boolean;
27
+ get artifactLabel(): string;
28
+ }
29
+ export declare function scriptOutputClient(opts: Dict): ScriptOutputStore;
30
+ export declare function apiErrorToCli(title: string, exc: ScriptOutputApiError): CliError;
31
+ export declare function currentRevisionOrZero(client: ScriptOutputStore): Promise<number>;
32
+ export declare function loadRemoteScript(opts: Dict, workspace: string): Promise<ScriptEditSession>;
33
+ export declare function loadScriptForEdit(opts: Dict): Promise<ScriptEditSession>;
34
+ export declare function validateSession(session: ScriptEditSession, opts?: {
35
+ requireSource?: boolean;
36
+ }): Dict;
37
+ export declare function syncValidationResult(session: ScriptEditSession, validation: Dict, revision?: number | null): Promise<void>;
38
+ export declare function requestIdForScriptWrite(opts: Dict, op: string, payload: {
39
+ script: Dict;
40
+ }): string;
41
+ export declare function saveScriptSession(session: ScriptEditSession, opts: Dict, op: string): Promise<[number | null, boolean]>;
42
+ export declare function scriptSourceText(workspace: string): string;
43
+ export declare function patchOperationsFromPayload(payload: unknown): Dict[];
44
+ export {};