@lingjingai/scriptctl 0.20.0 → 0.22.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 (208) hide show
  1. package/dist/cli.js +105 -11
  2. package/dist/cli.js.map +1 -1
  3. package/dist/common.d.ts +1 -0
  4. package/dist/common.js.map +1 -1
  5. package/dist/domain/script/address.d.ts +30 -0
  6. package/dist/domain/script/address.js +141 -0
  7. package/dist/domain/script/address.js.map +1 -0
  8. package/dist/domain/script/lookups.d.ts +33 -0
  9. package/dist/domain/script/lookups.js +309 -0
  10. package/dist/domain/script/lookups.js.map +1 -0
  11. package/dist/domain/script/patch/apply.d.ts +4 -0
  12. package/dist/domain/script/patch/apply.js +38 -0
  13. package/dist/domain/script/patch/apply.js.map +1 -0
  14. package/dist/domain/script/patch/helpers.d.ts +11 -0
  15. package/dist/domain/script/patch/helpers.js +141 -0
  16. package/dist/domain/script/patch/helpers.js.map +1 -0
  17. package/dist/domain/script/patch/ops-action.d.ts +12 -0
  18. package/dist/domain/script/patch/ops-action.js +371 -0
  19. package/dist/domain/script/patch/ops-action.js.map +1 -0
  20. package/dist/domain/script/patch/ops-asset.d.ts +13 -0
  21. package/dist/domain/script/patch/ops-asset.js +363 -0
  22. package/dist/domain/script/patch/ops-asset.js.map +1 -0
  23. package/dist/domain/script/patch/ops-dialogue.d.ts +5 -0
  24. package/dist/domain/script/patch/ops-dialogue.js +233 -0
  25. package/dist/domain/script/patch/ops-dialogue.js.map +1 -0
  26. package/dist/domain/script/patch/ops-meta.d.ts +3 -0
  27. package/dist/domain/script/patch/ops-meta.js +47 -0
  28. package/dist/domain/script/patch/ops-meta.js.map +1 -0
  29. package/dist/domain/script/patch/ops-scene.d.ts +6 -0
  30. package/dist/domain/script/patch/ops-scene.js +345 -0
  31. package/dist/domain/script/patch/ops-scene.js.map +1 -0
  32. package/dist/domain/script/patch/ops-state.d.ts +8 -0
  33. package/dist/domain/script/patch/ops-state.js +146 -0
  34. package/dist/domain/script/patch/ops-state.js.map +1 -0
  35. package/dist/domain/script/patch/registry.d.ts +2 -0
  36. package/dist/domain/script/patch/registry.js +50 -0
  37. package/dist/domain/script/patch/registry.js.map +1 -0
  38. package/dist/domain/script/patch/types.d.ts +10 -0
  39. package/dist/domain/script/patch/types.js +2 -0
  40. package/dist/domain/script/patch/types.js.map +1 -0
  41. package/dist/domain/script/refs.d.ts +4 -0
  42. package/dist/domain/script/refs.js +152 -0
  43. package/dist/domain/script/refs.js.map +1 -0
  44. package/dist/domain/script/schema.d.ts +6 -0
  45. package/dist/domain/script/schema.js +53 -0
  46. package/dist/domain/script/schema.js.map +1 -0
  47. package/dist/domain/script/selector.d.ts +45 -0
  48. package/dist/domain/script/selector.js +187 -0
  49. package/dist/domain/script/selector.js.map +1 -0
  50. package/dist/domain/script/shared.d.ts +15 -0
  51. package/dist/domain/script/shared.js +37 -0
  52. package/dist/domain/script/shared.js.map +1 -0
  53. package/dist/domain/script/validate.d.ts +22 -0
  54. package/dist/domain/script/validate.js +844 -0
  55. package/dist/domain/script/validate.js.map +1 -0
  56. package/dist/help-text.js +33 -8
  57. package/dist/help-text.js.map +1 -1
  58. package/dist/infra/script-output-store.d.ts +46 -10
  59. package/dist/infra/script-output-store.js +83 -11
  60. package/dist/infra/script-output-store.js.map +1 -1
  61. package/dist/output.d.ts +1 -1
  62. package/dist/output.js +11 -1
  63. package/dist/output.js.map +1 -1
  64. package/dist/usecases/direct.js +1 -1
  65. package/dist/usecases/direct.js.map +1 -1
  66. package/dist/usecases/doctor.js +32 -22
  67. package/dist/usecases/doctor.js.map +1 -1
  68. package/dist/usecases/parse.js +10 -3
  69. package/dist/usecases/parse.js.map +1 -1
  70. package/dist/usecases/script/actions.d.ts +3 -0
  71. package/dist/usecases/script/actions.js +71 -0
  72. package/dist/usecases/script/actions.js.map +1 -0
  73. package/dist/usecases/script/actor.d.ts +3 -0
  74. package/dist/usecases/script/actor.js +27 -0
  75. package/dist/usecases/script/actor.js.map +1 -0
  76. package/dist/usecases/script/actors.d.ts +3 -0
  77. package/dist/usecases/script/actors.js +15 -0
  78. package/dist/usecases/script/actors.js.map +1 -0
  79. package/dist/usecases/script/add-actor.d.ts +3 -0
  80. package/dist/usecases/script/add-actor.js +13 -0
  81. package/dist/usecases/script/add-actor.js.map +1 -0
  82. package/dist/usecases/script/add-episode.d.ts +3 -0
  83. package/dist/usecases/script/add-episode.js +9 -0
  84. package/dist/usecases/script/add-episode.js.map +1 -0
  85. package/dist/usecases/script/add-location.d.ts +3 -0
  86. package/dist/usecases/script/add-location.js +11 -0
  87. package/dist/usecases/script/add-location.js.map +1 -0
  88. package/dist/usecases/script/add-prop.d.ts +3 -0
  89. package/dist/usecases/script/add-prop.js +11 -0
  90. package/dist/usecases/script/add-prop.js.map +1 -0
  91. package/dist/usecases/script/add-speaker.d.ts +3 -0
  92. package/dist/usecases/script/add-speaker.js +22 -0
  93. package/dist/usecases/script/add-speaker.js.map +1 -0
  94. package/dist/usecases/script/alias.d.ts +3 -0
  95. package/dist/usecases/script/alias.js +40 -0
  96. package/dist/usecases/script/alias.js.map +1 -0
  97. package/dist/usecases/script/assets.d.ts +3 -0
  98. package/dist/usecases/script/assets.js +21 -0
  99. package/dist/usecases/script/assets.js.map +1 -0
  100. package/dist/usecases/script/context.d.ts +3 -0
  101. package/dist/usecases/script/context.js +20 -0
  102. package/dist/usecases/script/context.js.map +1 -0
  103. package/dist/usecases/script/create.d.ts +3 -0
  104. package/dist/usecases/script/create.js +67 -0
  105. package/dist/usecases/script/create.js.map +1 -0
  106. package/dist/usecases/script/delete.d.ts +3 -0
  107. package/dist/usecases/script/delete.js +79 -0
  108. package/dist/usecases/script/delete.js.map +1 -0
  109. package/dist/usecases/script/describe.d.ts +3 -0
  110. package/dist/usecases/script/describe.js +31 -0
  111. package/dist/usecases/script/describe.js.map +1 -0
  112. package/dist/usecases/script/dialogue.d.ts +3 -0
  113. package/dist/usecases/script/dialogue.js +28 -0
  114. package/dist/usecases/script/dialogue.js.map +1 -0
  115. package/dist/usecases/script/do.d.ts +3 -0
  116. package/dist/usecases/script/do.js +130 -0
  117. package/dist/usecases/script/do.js.map +1 -0
  118. package/dist/usecases/script/episodes.d.ts +3 -0
  119. package/dist/usecases/script/episodes.js +36 -0
  120. package/dist/usecases/script/episodes.js.map +1 -0
  121. package/dist/usecases/script/export.d.ts +3 -0
  122. package/dist/usecases/script/export.js +117 -0
  123. package/dist/usecases/script/export.js.map +1 -0
  124. package/dist/usecases/script/insert.d.ts +3 -0
  125. package/dist/usecases/script/insert.js +87 -0
  126. package/dist/usecases/script/insert.js.map +1 -0
  127. package/dist/usecases/script/issues.d.ts +3 -0
  128. package/dist/usecases/script/issues.js +27 -0
  129. package/dist/usecases/script/issues.js.map +1 -0
  130. package/dist/usecases/script/lib.d.ts +77 -0
  131. package/dist/usecases/script/lib.js +849 -0
  132. package/dist/usecases/script/lib.js.map +1 -0
  133. package/dist/usecases/script/locations.d.ts +3 -0
  134. package/dist/usecases/script/locations.js +15 -0
  135. package/dist/usecases/script/locations.js.map +1 -0
  136. package/dist/usecases/script/merge.d.ts +3 -0
  137. package/dist/usecases/script/merge.js +43 -0
  138. package/dist/usecases/script/merge.js.map +1 -0
  139. package/dist/usecases/script/move.d.ts +3 -0
  140. package/dist/usecases/script/move.js +33 -0
  141. package/dist/usecases/script/move.js.map +1 -0
  142. package/dist/usecases/script/overlap.d.ts +3 -0
  143. package/dist/usecases/script/overlap.js +21 -0
  144. package/dist/usecases/script/overlap.js.map +1 -0
  145. package/dist/usecases/script/props.d.ts +3 -0
  146. package/dist/usecases/script/props.js +15 -0
  147. package/dist/usecases/script/props.js.map +1 -0
  148. package/dist/usecases/script/refs.d.ts +3 -0
  149. package/dist/usecases/script/refs.js +61 -0
  150. package/dist/usecases/script/refs.js.map +1 -0
  151. package/dist/usecases/script/rename.d.ts +3 -0
  152. package/dist/usecases/script/rename.js +17 -0
  153. package/dist/usecases/script/rename.js.map +1 -0
  154. package/dist/usecases/script/replace.d.ts +3 -0
  155. package/dist/usecases/script/replace.js +35 -0
  156. package/dist/usecases/script/replace.js.map +1 -0
  157. package/dist/usecases/script/role.d.ts +3 -0
  158. package/dist/usecases/script/role.js +17 -0
  159. package/dist/usecases/script/role.js.map +1 -0
  160. package/dist/usecases/script/scenes.d.ts +3 -0
  161. package/dist/usecases/script/scenes.js +45 -0
  162. package/dist/usecases/script/scenes.js.map +1 -0
  163. package/dist/usecases/script/script-patch.d.ts +3 -0
  164. package/dist/usecases/script/script-patch.js +187 -0
  165. package/dist/usecases/script/script-patch.js.map +1 -0
  166. package/dist/usecases/script/script-validate.d.ts +3 -0
  167. package/dist/usecases/script/script-validate.js +30 -0
  168. package/dist/usecases/script/script-validate.js.map +1 -0
  169. package/dist/usecases/script/session.d.ts +56 -0
  170. package/dist/usecases/script/session.js +568 -0
  171. package/dist/usecases/script/session.js.map +1 -0
  172. package/dist/usecases/script/speakers.d.ts +3 -0
  173. package/dist/usecases/script/speakers.js +28 -0
  174. package/dist/usecases/script/speakers.js.map +1 -0
  175. package/dist/usecases/script/split.d.ts +3 -0
  176. package/dist/usecases/script/split.js +37 -0
  177. package/dist/usecases/script/split.js.map +1 -0
  178. package/dist/usecases/script/state-add.d.ts +3 -0
  179. package/dist/usecases/script/state-add.js +23 -0
  180. package/dist/usecases/script/state-add.js.map +1 -0
  181. package/dist/usecases/script/state-change.d.ts +3 -0
  182. package/dist/usecases/script/state-change.js +24 -0
  183. package/dist/usecases/script/state-change.js.map +1 -0
  184. package/dist/usecases/script/state-delete.d.ts +3 -0
  185. package/dist/usecases/script/state-delete.js +23 -0
  186. package/dist/usecases/script/state-delete.js.map +1 -0
  187. package/dist/usecases/script/state-rename.d.ts +3 -0
  188. package/dist/usecases/script/state-rename.js +17 -0
  189. package/dist/usecases/script/state-rename.js.map +1 -0
  190. package/dist/usecases/script/summary.d.ts +3 -0
  191. package/dist/usecases/script/summary.js +45 -0
  192. package/dist/usecases/script/summary.js.map +1 -0
  193. package/dist/usecases/script/transition.d.ts +3 -0
  194. package/dist/usecases/script/transition.js +24 -0
  195. package/dist/usecases/script/transition.js.map +1 -0
  196. package/dist/usecases/script/type.d.ts +3 -0
  197. package/dist/usecases/script/type.js +24 -0
  198. package/dist/usecases/script/type.js.map +1 -0
  199. package/dist/usecases/script/worldview.d.ts +3 -0
  200. package/dist/usecases/script/worldview.js +18 -0
  201. package/dist/usecases/script/worldview.js.map +1 -0
  202. package/package.json +1 -1
  203. package/dist/domain/script-core.d.ts +0 -78
  204. package/dist/domain/script-core.js +0 -3026
  205. package/dist/domain/script-core.js.map +0 -1
  206. package/dist/usecases/script.d.ts +0 -67
  207. package/dist/usecases/script.js +0 -2348
  208. package/dist/usecases/script.js.map +0 -1
@@ -0,0 +1,71 @@
1
+ import { CliError, EXIT_OK, EXIT_USAGE, } from "../../common.js";
2
+ import { asList, strOf, } from "../../domain/script/shared.js";
3
+ import { loadScriptForEdit, } from "./session.js";
4
+ import { formatInspectAction, buildReport, resolveActionTargets, selectionHasAnyFilter, } from "./lib.js";
5
+ export async function commandActions(opts) {
6
+ const session = await loadScriptForEdit(opts);
7
+ const script = session.script;
8
+ const contextN = (() => {
9
+ const n = opts["context"];
10
+ if (n === undefined || n === null || n === "")
11
+ return 0;
12
+ const parsed = Number(n);
13
+ return Number.isFinite(parsed) && parsed >= 0 ? Math.floor(parsed) : 0;
14
+ })();
15
+ if (!selectionHasAnyFilter(opts)) {
16
+ throw new CliError("QUERY BLOCKED: actions filter missing", "actions filter missing.", {
17
+ exitCode: EXIT_USAGE,
18
+ required: ["at least one of --in / --grep / --type / --actor / --speaker / --has"],
19
+ received: ["<empty>"],
20
+ nextSteps: ["Add a filter — dumping every action across all episodes is too large."],
21
+ errorCode: "ACTIONS_FILTER_MISSING",
22
+ });
23
+ }
24
+ const allInScope = resolveActionTargets(script, opts);
25
+ const matchKeys = new Set(allInScope.map((h) => `${h.epId}/${h.sceneId}#${h.idx}`));
26
+ // --context N: expand matches to include neighbors within each scene. `lines`
27
+ // (text) and `rows` (machine) are both built from the SAME displayed set so
28
+ // `--format addr` / `.rows[].addr` never disagree with the human output.
29
+ let displayed;
30
+ if (contextN > 0 && matchKeys.size > 0) {
31
+ displayed = [];
32
+ const matchBySceneIdx = new Map();
33
+ for (const k of matchKeys) {
34
+ const [scene, idxStr] = k.split("#");
35
+ const set = matchBySceneIdx.get(scene) ?? new Set();
36
+ set.add(parseInt(idxStr, 10));
37
+ matchBySceneIdx.set(scene, set);
38
+ }
39
+ for (const ep of asList(script["episodes"])) {
40
+ const epId = strOf(ep["episode_id"]);
41
+ for (const scene of asList(ep["scenes"])) {
42
+ const sceneId = strOf(scene["scene_id"]);
43
+ const matchIdxSet = matchBySceneIdx.get(`${epId}/${sceneId}`);
44
+ if (!matchIdxSet)
45
+ continue;
46
+ const actions = asList(scene["actions"]);
47
+ for (let i = 0; i < actions.length; i++) {
48
+ if (![...matchIdxSet].some((m) => Math.abs(i - m) <= contextN))
49
+ continue;
50
+ displayed.push({ epId, sceneId, idx: i, action: actions[i] });
51
+ }
52
+ }
53
+ }
54
+ }
55
+ else {
56
+ displayed = allInScope;
57
+ }
58
+ const lines = displayed.map((h) => formatInspectAction(h.epId, h.sceneId, h.idx, h.action));
59
+ const report = buildReport("query.actions", "ACTIONS", lines, session.artifactLabel, ["Use `scriptctl replace <addr>` or `scriptctl type <addr> <type>` etc. to edit."]);
60
+ // Structured rows: the address as a first-class field (no string-slicing) so
61
+ // `--json | jq '.rows[].addr'` and `--format addr` get clean machine output.
62
+ report.rows = displayed.map((h) => ({
63
+ addr: `${h.epId}/${h.sceneId}#${h.idx}`,
64
+ type: strOf(h.action["type"]),
65
+ actor: strOf(h.action["actor_id"]) || null,
66
+ content: strOf(h.action["content"]),
67
+ }));
68
+ return [report, EXIT_OK];
69
+ }
70
+ // ----- actors / locations / props / assets ----------------------------------
71
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/usecases/script/actions.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 commandActor(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,27 @@
1
+ import { CliError, EXIT_USAGE, } from "../../common.js";
2
+ import { asList, strOf, } from "../../domain/script/shared.js";
3
+ import { applySingleScriptOp, applySelectorEdits, selectionHasAnyFilter, } from "./lib.js";
4
+ export async function commandActor(opts) {
5
+ const args = asList(opts["_args"]);
6
+ const selectorMode = selectionHasAnyFilter(opts);
7
+ // Single-point: `actor <at> <actor_id|none>` (value = args[1]). Selector:
8
+ // `actor <actor_id|none>` (value = args[0]); --actor stays a filter predicate.
9
+ const actorVal = selectorMode ? args[0] : args[1];
10
+ if (actorVal === undefined || strOf(actorVal).trim() === "") {
11
+ // Empty string is almost always a shell-expansion accident ("$ACTOR" unset);
12
+ // demand the literal token `none` to clear.
13
+ throw new CliError("VERB BLOCKED: actor_id empty", "actor_id is empty.", {
14
+ exitCode: EXIT_USAGE,
15
+ required: [selectorMode ? "<actor_id|none> (with a selection)" : "<action ref> <actor_id|none>"],
16
+ received: args,
17
+ nextSteps: ["Example: scriptctl actor ep_001/scn_001#3 act_002 | scriptctl actor --in ep_001 --speaker spk_001 act_002 --apply"],
18
+ errorCode: actorVal === undefined ? "ARGS_MISSING" : "ACTOR_ID_EMPTY",
19
+ });
20
+ }
21
+ const template = { op: "action.actor.set", actor_id: actorVal };
22
+ if (selectorMode)
23
+ return applySelectorEdits(opts, template, "actor");
24
+ return applySingleScriptOp(opts, { ...template, at: args[0] });
25
+ }
26
+ // ----- structural (multipolar delete / move / insert) -----------------------
27
+ //# sourceMappingURL=actor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor.js","sourceRoot":"","sources":["../../../src/usecases/script/actor.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,QAAQ,EAKR,UAAU,GASX,MAAM,iBAAiB,CAAC;AAmCzB,OAAO,EACL,MAAM,EAIN,KAAK,GACN,MAAM,+BAA+B,CAAC;AAMvC,OAAO,EAC+I,mBAAmB,EAAmC,kBAAkB,EAA0M,qBAAqB,GAC5b,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAU;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAS,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACjD,0EAA0E;IAC1E,+EAA+E;IAC/E,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC5D,6EAA6E;QAC7E,4CAA4C;QAC5C,MAAM,IAAI,QAAQ,CAAC,8BAA8B,EAAE,oBAAoB,EAAE;YACvE,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,8BAA8B,CAAC;YAChG,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,CAAC,qHAAqH,CAAC;YAClI,SAAS,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB;SACtE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAS,EAAE,EAAE,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACtE,IAAI,YAAY;QAAE,OAAO,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrE,OAAO,mBAAmB,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,+EAA+E"}
@@ -0,0 +1,3 @@
1
+ import { type Report } from "../../common.js";
2
+ import { type Dict } from "../../domain/script/shared.js";
3
+ export declare function commandActors(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,15 @@
1
+ import { EXIT_OK, } from "../../common.js";
2
+ import { parseInSelector, } from "../../domain/script/selector.js";
3
+ import { strOf, } from "../../domain/script/shared.js";
4
+ import { loadScriptForEdit, } from "./session.js";
5
+ import { buildReport, listAssetsByKind, } from "./lib.js";
6
+ export async function commandActors(opts) {
7
+ const session = await loadScriptForEdit(opts);
8
+ const lines = listAssetsByKind(session.script, "actor", {
9
+ id: strOf(opts["id"]).trim(),
10
+ name: strOf(opts["name"]).trim(),
11
+ selector: parseInSelector(strOf(opts["in"])),
12
+ });
13
+ return [buildReport("query.actors", "ACTORS", lines, session.artifactLabel, ["Use `scriptctl rename actor:<id>` / `describe` / `merge` to edit."]), EXIT_OK];
14
+ }
15
+ //# sourceMappingURL=actors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actors.js","sourceRoot":"","sources":["../../../src/usecases/script/actors.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,OAAO,GAWR,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAIL,eAAe,GAGhB,MAAM,iCAAiC,CAAC;AAwBzC,OAAO,EAKL,KAAK,GACN,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,iBAAiB,GAElB,MAAM,cAAc,CAAC;AACtB,OAAO,EACwS,WAAW,EAAqI,gBAAgB,GAC9c,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAU;IAC5C,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;QACtD,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE;QAChC,QAAQ,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KAC7C,CAAC,CAAC;IACH,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,EACxE,CAAC,mEAAmE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACrF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Report } from "../../common.js";
2
+ import { type Dict } from "../../domain/script/shared.js";
3
+ export declare function commandAddActor(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,13 @@
1
+ import { applySingleScriptOp, requireNameArg, } from "./lib.js";
2
+ export async function commandAddActor(opts) {
3
+ const name = requireNameArg(opts, "add-actor", "Example: scriptctl add-actor \"林夏\" --role 主角");
4
+ return applySingleScriptOp(opts, {
5
+ op: "actor.add",
6
+ name,
7
+ actor_id: opts["id"],
8
+ role_type: opts["role"],
9
+ description: opts["description"],
10
+ aliases: opts["alias"],
11
+ });
12
+ }
13
+ //# sourceMappingURL=add-actor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-actor.js","sourceRoot":"","sources":["../../../src/usecases/script/add-actor.ts"],"names":[],"mappings":"AAmEA,OAAO,EAC+I,mBAAmB,EAA6U,cAAc,GACngB,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAU;IAC9C,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,+CAA+C,CAAC,CAAC;IAChG,OAAO,mBAAmB,CAAC,IAAI,EAAE;QAC/B,EAAE,EAAE,WAAW;QACf,IAAI;QACJ,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;QACpB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC;QACvB,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;QAChC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;KACvB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Report } from "../../common.js";
2
+ import { type Dict } from "../../domain/script/shared.js";
3
+ export declare function commandAddEpisode(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,9 @@
1
+ import { applySingleScriptOp, } from "./lib.js";
2
+ export async function commandAddEpisode(opts) {
3
+ return applySingleScriptOp(opts, {
4
+ op: "episode.add",
5
+ episode_id: opts["id"],
6
+ title: opts["title"],
7
+ });
8
+ }
9
+ //# sourceMappingURL=add-episode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-episode.js","sourceRoot":"","sources":["../../../src/usecases/script/add-episode.ts"],"names":[],"mappings":"AAmEA,OAAO,EAC+I,mBAAmB,GACxK,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAU;IAChD,OAAO,mBAAmB,CAAC,IAAI,EAAE;QAC/B,EAAE,EAAE,aAAa;QACjB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;QACtB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;KACrB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Report } from "../../common.js";
2
+ import { type Dict } from "../../domain/script/shared.js";
3
+ export declare function commandAddLocation(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,11 @@
1
+ import { applySingleScriptOp, requireNameArg, } from "./lib.js";
2
+ export async function commandAddLocation(opts) {
3
+ const name = requireNameArg(opts, "add-location", "Example: scriptctl add-location \"教室\"");
4
+ return applySingleScriptOp(opts, {
5
+ op: "location.add",
6
+ name,
7
+ location_id: opts["id"],
8
+ description: opts["description"],
9
+ });
10
+ }
11
+ //# sourceMappingURL=add-location.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-location.js","sourceRoot":"","sources":["../../../src/usecases/script/add-location.ts"],"names":[],"mappings":"AAmEA,OAAO,EAC+I,mBAAmB,EAA6U,cAAc,GACngB,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAU;IACjD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,wCAAwC,CAAC,CAAC;IAC5F,OAAO,mBAAmB,CAAC,IAAI,EAAE;QAC/B,EAAE,EAAE,cAAc;QAClB,IAAI;QACJ,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;QACvB,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;KACjC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Report } from "../../common.js";
2
+ import { type Dict } from "../../domain/script/shared.js";
3
+ export declare function commandAddProp(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,11 @@
1
+ import { applySingleScriptOp, requireNameArg, } from "./lib.js";
2
+ export async function commandAddProp(opts) {
3
+ const name = requireNameArg(opts, "add-prop", "Example: scriptctl add-prop \"怀表\"");
4
+ return applySingleScriptOp(opts, {
5
+ op: "prop.add",
6
+ name,
7
+ prop_id: opts["id"],
8
+ description: opts["description"],
9
+ });
10
+ }
11
+ //# sourceMappingURL=add-prop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-prop.js","sourceRoot":"","sources":["../../../src/usecases/script/add-prop.ts"],"names":[],"mappings":"AAmEA,OAAO,EAC+I,mBAAmB,EAA6U,cAAc,GACngB,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAU;IAC7C,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,oCAAoC,CAAC,CAAC;IACpF,OAAO,mBAAmB,CAAC,IAAI,EAAE;QAC/B,EAAE,EAAE,UAAU;QACd,IAAI;QACJ,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;QACnB,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;KACjC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Report } from "../../common.js";
2
+ import { type Dict } from "../../domain/script/shared.js";
3
+ export declare function commandAddSpeaker(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,22 @@
1
+ import { applySingleScriptOp, } from "./lib.js";
2
+ export async function commandAddSpeaker(opts) {
3
+ return applySingleScriptOp(opts, {
4
+ op: "speaker.add",
5
+ kind: opts["kind"],
6
+ name: opts["name"],
7
+ source_id: opts["source_id"],
8
+ voice_desc: opts["voice_desc"],
9
+ speaker_id: opts["speaker_id"],
10
+ });
11
+ }
12
+ // ----- create (blank scaffold) ----------------------------------------------
13
+ // Create an empty schema-v2 script as the starting point for building a script
14
+ // bottom-up with the atomic add/insert verbs (instead of direct/parse/write
15
+ // assembly). Targets the same three destinations as the edit verbs:
16
+ // --script-path <file> local JSON file
17
+ // --draft the direct intermediate (script.initial.json)
18
+ // --project-group-no DB-backed script-output (first write at revision 0)
19
+ // Refuses to clobber an existing target (local: pass --force to overwrite; DB:
20
+ // edit the existing script instead). Validates in incomplete-tolerant mode, so
21
+ // the blank scaffold reports passed.
22
+ //# sourceMappingURL=add-speaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-speaker.js","sourceRoot":"","sources":["../../../src/usecases/script/add-speaker.ts"],"names":[],"mappings":"AAmEA,OAAO,EAC+I,mBAAmB,GACxK,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAU;IAChD,OAAO,mBAAmB,CAAC,IAAI,EAAE;QAC/B,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;QAC5B,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;QAC9B,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAE/E,+EAA+E;AAC/E,4EAA4E;AAC5E,oEAAoE;AACpE,0CAA0C;AAC1C,wEAAwE;AACxE,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,qCAAqC"}
@@ -0,0 +1,3 @@
1
+ import { type Report } from "../../common.js";
2
+ import { type Dict } from "../../domain/script/shared.js";
3
+ export declare function commandAlias(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,40 @@
1
+ import { CliError, EXIT_USAGE, } from "../../common.js";
2
+ import { asList, } from "../../domain/script/shared.js";
3
+ import { applySingleScriptOp, } from "./lib.js";
4
+ export async function commandAlias(opts) {
5
+ const args = asList(opts["_args"]);
6
+ if (args.length < 1) {
7
+ throw new CliError("VERB BLOCKED: Asset address missing", "Asset address missing.", {
8
+ exitCode: EXIT_USAGE,
9
+ required: ["<asset-addr>"],
10
+ received: ["<empty>"],
11
+ nextSteps: ["Example: scriptctl alias actor:act_001 --add \"陈总\""],
12
+ errorCode: "ARGS_MISSING",
13
+ });
14
+ }
15
+ // appendStr collectors default to []; empty arrays are truthy, so we MUST
16
+ // check `.length === 0` rather than `!add` (which is always false here).
17
+ // Without this, passing only --add still runs the remove op with alias=[]
18
+ // and crashes mid-write at op layer after the add already succeeded.
19
+ const add = asList(opts["add"]);
20
+ const remove = asList(opts["remove"]);
21
+ if (add.length === 0 && remove.length === 0) {
22
+ throw new CliError("VERB BLOCKED: --add or --remove required", "--add or --remove required.", {
23
+ exitCode: EXIT_USAGE,
24
+ required: ["--add <alias> and/or --remove <alias>"],
25
+ received: ["<empty>"],
26
+ nextSteps: ["Pass --add and/or --remove at least once."],
27
+ errorCode: "ALIAS_EMPTY",
28
+ });
29
+ }
30
+ // Run only the ops that have content; either one of them solo, or both.
31
+ let lastReport = null;
32
+ if (add.length > 0) {
33
+ lastReport = await applySingleScriptOp(opts, { op: "asset.alias.add", target: args[0], alias: add });
34
+ }
35
+ if (remove.length > 0) {
36
+ lastReport = await applySingleScriptOp(opts, { op: "asset.alias.remove", target: args[0], alias: remove });
37
+ }
38
+ return lastReport;
39
+ }
40
+ //# sourceMappingURL=alias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias.js","sourceRoot":"","sources":["../../../src/usecases/script/alias.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,QAAQ,EAKR,UAAU,GASX,MAAM,iBAAiB,CAAC;AAmCzB,OAAO,EACL,MAAM,GAKP,MAAM,+BAA+B,CAAC;AAMvC,OAAO,EAC+I,mBAAmB,GACxK,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAU;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAS,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAAC,qCAAqC,EAAE,wBAAwB,EAAE;YAClF,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,CAAC,cAAc,CAAC;YAC1B,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,SAAS,EAAE,CAAC,qDAAqD,CAAC;YAClE,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,0EAA0E;IAC1E,yEAAyE;IACzE,0EAA0E;IAC1E,qEAAqE;IACrE,MAAM,GAAG,GAAG,MAAM,CAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAS,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,QAAQ,CAAC,0CAA0C,EAAE,6BAA6B,EAAE;YAC5F,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,CAAC,uCAAuC,CAAC;YACnD,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,SAAS,EAAE,CAAC,2CAA2C,CAAC;YACxD,SAAS,EAAE,aAAa;SACzB,CAAC,CAAC;IACL,CAAC;IACD,wEAAwE;IACxE,IAAI,UAAU,GAA4B,IAAI,CAAC;IAC/C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,UAAU,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,UAAU,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7G,CAAC;IACD,OAAO,UAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Report } from "../../common.js";
2
+ import { type Dict } from "../../domain/script/shared.js";
3
+ export declare function commandAssets(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,21 @@
1
+ import { EXIT_OK, } from "../../common.js";
2
+ import { parseInSelector, } from "../../domain/script/selector.js";
3
+ import { strOf, } from "../../domain/script/shared.js";
4
+ import { loadScriptForEdit, } from "./session.js";
5
+ import { buildReport, listAssetsByKind, } from "./lib.js";
6
+ export async function commandAssets(opts) {
7
+ const session = await loadScriptForEdit(opts);
8
+ const kindFilter = strOf(opts["kind"]).trim();
9
+ const nameOpt = strOf(opts["name"]).trim();
10
+ const idOpt = strOf(opts["id"]).trim();
11
+ const selector = parseInSelector(strOf(opts["in"]));
12
+ const lines = [];
13
+ for (const kind of ["actor", "location", "prop"]) {
14
+ if (kindFilter && kindFilter !== kind)
15
+ continue;
16
+ lines.push(...listAssetsByKind(session.script, kind, { id: idOpt, name: nameOpt, selector }));
17
+ }
18
+ return [buildReport("query.assets", "ASSETS", lines, session.artifactLabel, ["Use `scriptctl actors` / `locations` / `props` for kind-scoped views."]), EXIT_OK];
19
+ }
20
+ // ----- speakers -------------------------------------------------------------
21
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../src/usecases/script/assets.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,OAAO,GAWR,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAIL,eAAe,GAGhB,MAAM,iCAAiC,CAAC;AAwBzC,OAAO,EAKL,KAAK,GACN,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,iBAAiB,GAElB,MAAM,cAAc,CAAC;AACtB,OAAO,EACwS,WAAW,EAAqI,gBAAgB,GAC9c,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAU;IAC5C,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAU,EAAE,CAAC;QAC1D,IAAI,UAAU,IAAI,UAAU,KAAK,IAAI;YAAE,SAAS;QAChD,KAAK,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,EACxE,CAAC,uEAAuE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACzF,CAAC;AAED,+EAA+E"}
@@ -0,0 +1,3 @@
1
+ import { type Report } from "../../common.js";
2
+ import { type Dict } from "../../domain/script/shared.js";
3
+ export declare function commandContext(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,20 @@
1
+ import { CliError, EXIT_USAGE, } from "../../common.js";
2
+ import { asList, strOf, } from "../../domain/script/shared.js";
3
+ import { applySingleScriptOp, } from "./lib.js";
4
+ import { contextTemplate } from "./lib.js";
5
+ export async function commandContext(opts) {
6
+ const args = asList(opts["_args"]);
7
+ if (args.length < 2) {
8
+ throw new CliError("VERB BLOCKED: context args missing", "context args missing.", {
9
+ exitCode: EXIT_USAGE,
10
+ required: ["<scene-addr> <asset-addr>"],
11
+ received: args,
12
+ nextSteps: ["Example: scriptctl context ep_001/scn_001 actor:act_001 --state st_calm"],
13
+ errorCode: "ARGS_MISSING",
14
+ });
15
+ }
16
+ const template = contextTemplate(strOf(args[1]), { state: opts["state"], clear: Boolean(opts["clear"]), remove: Boolean(opts["remove"]) });
17
+ return applySingleScriptOp(opts, { ...template, at: args[0] });
18
+ }
19
+ // ----- state change / transition --------------------------------------------
20
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/usecases/script/context.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,QAAQ,EAKR,UAAU,GASX,MAAM,iBAAiB,CAAC;AAmCzB,OAAO,EACL,MAAM,EAIN,KAAK,GACN,MAAM,+BAA+B,CAAC;AAMvC,OAAO,EAC+I,mBAAmB,GACxK,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAU;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAS,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAAC,oCAAoC,EAAE,uBAAuB,EAAE;YAChF,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,CAAC,2BAA2B,CAAC;YACvC,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,CAAC,yEAAyE,CAAC;YACtF,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3I,OAAO,mBAAmB,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,+EAA+E"}
@@ -0,0 +1,3 @@
1
+ import { type Report } from "../../common.js";
2
+ import { type Dict } from "../../domain/script/shared.js";
3
+ export declare function commandCreate(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,67 @@
1
+ import * as path from "node:path";
2
+ import { CliError, EXIT_INPUT, EXIT_NEEDS_AGENT, EXIT_OK, directDir, exists, writeJson, } from "../../common.js";
3
+ import { blankScript } from "../../domain/script/lookups.js";
4
+ import { ScriptOutputApiError, } from "../../infra/script-output-store.js";
5
+ import { strOf, } from "../../domain/script/shared.js";
6
+ import { ScriptEditSession, scriptOutputClient, apiErrorToCli, currentRevisionOrZero, validateSession, syncValidationResult, assertTargetCoherent, requestIdForScriptWrite, } from "./session.js";
7
+ import { blankCreateReport, } from "./lib.js";
8
+ export async function commandCreate(opts) {
9
+ const workspace = strOf(opts["workspace_path"] || "workspace");
10
+ const force = Boolean(opts["force"]);
11
+ const title = strOf(opts["title"]).trim();
12
+ const script = blankScript(title);
13
+ // Same conflict gate as loadScriptForEdit — create has its own write path, so
14
+ // without this a store flag (--remote/--local/--project-group-no) combined with
15
+ // --draft/--script-path would be silently dropped onto the local-file branch.
16
+ assertTargetCoherent(opts);
17
+ const draft = Boolean(opts["draft"]);
18
+ const scriptPathOpt = strOf(opts["script_path"]).trim();
19
+ const localPath = draft ? path.join(directDir(workspace), "script.initial.json") : (scriptPathOpt || null);
20
+ if (localPath) {
21
+ if (exists(localPath) && !force) {
22
+ throw new CliError("CREATE BLOCKED: target already exists", "A script already exists at the target.", {
23
+ exitCode: EXIT_INPUT,
24
+ required: ["a non-existent target, or --force to overwrite"],
25
+ received: [localPath],
26
+ nextSteps: ["Edit the existing script with the atomic verbs, or pass --force to overwrite with a blank scaffold."],
27
+ errorCode: "SCRIPT_EXISTS",
28
+ });
29
+ }
30
+ writeJson(localPath, script);
31
+ const session = new ScriptEditSession({ workspace, scriptPath: localPath, script });
32
+ const validation = validateSession(session);
33
+ const passed = Boolean(validation["passed"]);
34
+ return [blankCreateReport(session, validation, null), passed ? EXIT_OK : EXIT_NEEDS_AGENT];
35
+ }
36
+ // DB mode: first write must be at revision 0. We never silently overwrite a
37
+ // populated DB script with a blank one — that would destroy work.
38
+ const client = scriptOutputClient(opts);
39
+ const baseRevision = await currentRevisionOrZero(client);
40
+ if (baseRevision > 0) {
41
+ throw new CliError("CREATE BLOCKED: DB script already exists", "A script already exists for this project.", {
42
+ exitCode: EXIT_INPUT,
43
+ required: ["an empty project (no published script)"],
44
+ received: [`revision=${baseRevision}`],
45
+ nextSteps: ["Edit the existing script with the atomic verbs instead of creating a blank one."],
46
+ errorCode: "SCRIPT_EXISTS",
47
+ });
48
+ }
49
+ const requestId = requestIdForScriptWrite(opts, "script.create", { script });
50
+ let res;
51
+ try {
52
+ res = await client.replaceScript({ requestId, baseRevision, script, source: "ctl" });
53
+ }
54
+ catch (exc) {
55
+ if (exc instanceof ScriptOutputApiError) {
56
+ throw apiErrorToCli("SCRIPT API BLOCKED: Create write failed", exc);
57
+ }
58
+ throw exc;
59
+ }
60
+ const revision = Number(res["revision"] ?? 0);
61
+ const session = new ScriptEditSession({ workspace, script, client, projectGroupNo: client.projectGroupNo, revision });
62
+ const validation = validateSession(session);
63
+ await syncValidationResult(session, validation, revision);
64
+ const passed = Boolean(validation["passed"]);
65
+ return [blankCreateReport(session, validation, Boolean(res["idempotent"])), passed ? EXIT_OK : EXIT_NEEDS_AGENT];
66
+ }
67
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/usecases/script/create.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 commandDelete(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,79 @@
1
+ import { CliError, EXIT_USAGE, } from "../../common.js";
2
+ import { parseAnyAddress, } from "../../domain/script/address.js";
3
+ import { asList, } from "../../domain/script/shared.js";
4
+ import { applySingleScriptOp, } from "./lib.js";
5
+ export async function commandDelete(opts) {
6
+ const args = asList(opts["_args"]);
7
+ if (args.length < 1) {
8
+ throw new CliError("VERB BLOCKED: Address missing", "Address missing.", {
9
+ exitCode: EXIT_USAGE,
10
+ required: ["address"],
11
+ received: ["<empty>"],
12
+ nextSteps: ["Pass an address (action / scene / asset / speaker)."],
13
+ errorCode: "ADDRESS_MISSING",
14
+ });
15
+ }
16
+ const addr = parseAnyAddress(args[0]);
17
+ // Per-kind flag whitelist — silently ignoring wrong-kind flags hid real
18
+ // misuse (e.g. `delete actor:X --force` did NOT bypass ref protection, but
19
+ // the user assumed it did). Surface the mismatch with an explicit error.
20
+ const flagsUsed = {
21
+ strategy: opts["strategy"] !== undefined,
22
+ replacement: opts["replacement"] !== undefined,
23
+ force: Boolean(opts["force"]),
24
+ };
25
+ function rejectFlags(kind, allowed) {
26
+ const allow = new Set(allowed);
27
+ const bad = [];
28
+ for (const f of ["strategy", "replacement", "force"]) {
29
+ if (flagsUsed[f] && !allow.has(f))
30
+ bad.push(`--${f}`);
31
+ }
32
+ if (bad.length > 0) {
33
+ throw new CliError("VERB BLOCKED: flag not applicable", `${bad.join(", ")} cannot be used with ${kind} delete.`, {
34
+ exitCode: EXIT_USAGE,
35
+ required: [`for ${kind} delete: ${allowed.length === 0 ? "no extra flags" : allowed.map((f) => `--${f}`).join(" / ")}`],
36
+ received: bad,
37
+ nextSteps: ["Drop the unsupported flag(s) and retry."],
38
+ errorCode: "DELETE_FLAG_INVALID",
39
+ });
40
+ }
41
+ }
42
+ const op = (() => {
43
+ if (addr.kind === "action") {
44
+ rejectFlags("action", []);
45
+ return { op: "action.delete", at: args[0] };
46
+ }
47
+ if (addr.kind === "scene") {
48
+ rejectFlags("scene", ["force"]);
49
+ return { op: "scene.delete", at: args[0], force: Boolean(opts["force"]) };
50
+ }
51
+ if (addr.kind === "asset") {
52
+ rejectFlags("asset", ["strategy", "replacement"]);
53
+ return {
54
+ op: "asset.delete",
55
+ target: args[0],
56
+ strategy: opts["strategy"],
57
+ replacement: opts["replacement"],
58
+ };
59
+ }
60
+ if (addr.kind === "speaker") {
61
+ rejectFlags("speaker", ["strategy", "replacement"]);
62
+ return {
63
+ op: "speaker.delete",
64
+ target: addr.speakerId,
65
+ strategy: opts["strategy"],
66
+ replacement: opts["replacement"],
67
+ };
68
+ }
69
+ throw new CliError("VERB BLOCKED: delete cannot operate on this address", "delete cannot operate on this address.", {
70
+ exitCode: EXIT_USAGE,
71
+ required: ["action / scene / asset / speaker address"],
72
+ received: [args[0]],
73
+ nextSteps: ["Use a supported address."],
74
+ errorCode: "ADDRESS_UNSUPPORTED",
75
+ });
76
+ })();
77
+ return applySingleScriptOp(opts, op);
78
+ }
79
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/usecases/script/delete.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 commandDescribe(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,31 @@
1
+ import { CliError, EXIT_USAGE, } from "../../common.js";
2
+ import { parseAnyAddress, } from "../../domain/script/address.js";
3
+ import { asList, } from "../../domain/script/shared.js";
4
+ import { applySingleScriptOp, } from "./lib.js";
5
+ export async function commandDescribe(opts) {
6
+ const args = asList(opts["_args"]);
7
+ if (args.length < 2) {
8
+ throw new CliError("VERB BLOCKED: Describe args missing", "Describe args missing.", {
9
+ exitCode: EXIT_USAGE,
10
+ required: ["<addr> <text>"],
11
+ received: args,
12
+ nextSteps: ["Example: scriptctl describe actor:act_001 \"男主\" or scriptctl describe actor:act_001/st_calm \"...\""],
13
+ errorCode: "ARGS_MISSING",
14
+ });
15
+ }
16
+ const addr = parseAnyAddress(args[0]);
17
+ if (addr.kind === "state") {
18
+ return applySingleScriptOp(opts, { op: "state.describe", target: args[0], description: args[1] });
19
+ }
20
+ if (addr.kind === "asset") {
21
+ return applySingleScriptOp(opts, { op: "asset.describe", target: args[0], description: args[1] });
22
+ }
23
+ throw new CliError("VERB BLOCKED: describe address invalid", "describe address invalid.", {
24
+ exitCode: EXIT_USAGE,
25
+ required: ["asset address (e.g. actor:act_001) or state address (e.g. actor:act_001/st_calm)"],
26
+ received: [args[0]],
27
+ nextSteps: ["Use a supported address."],
28
+ errorCode: "ADDRESS_UNSUPPORTED",
29
+ });
30
+ }
31
+ //# sourceMappingURL=describe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe.js","sourceRoot":"","sources":["../../../src/usecases/script/describe.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,QAAQ,EAKR,UAAU,GASX,MAAM,iBAAiB,CAAC;AAYzB,OAAO,EACL,eAAe,GAKhB,MAAM,gCAAgC,CAAC;AAiBxC,OAAO,EACL,MAAM,GAKP,MAAM,+BAA+B,CAAC;AAMvC,OAAO,EAC+I,mBAAmB,GACxK,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAU;IAC9C,MAAM,IAAI,GAAG,MAAM,CAAS,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAAC,qCAAqC,EAAE,wBAAwB,EAAE;YAClF,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,CAAC,eAAe,CAAC;YAC3B,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,CAAC,sGAAsG,CAAC;YACnH,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,mBAAmB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,mBAAmB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,MAAM,IAAI,QAAQ,CAAC,wCAAwC,EAAE,2BAA2B,EAAE;QACxF,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,CAAC,kFAAkF,CAAC;QAC9F,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;QACpB,SAAS,EAAE,CAAC,0BAA0B,CAAC;QACvC,SAAS,EAAE,qBAAqB;KACjC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Report } from "../../common.js";
2
+ import { type Dict } from "../../domain/script/shared.js";
3
+ export declare function commandDialogue(opts: Dict): Promise<[Report, number]>;