@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,23 @@
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 commandStateAdd(opts) {
5
+ const args = asList(opts["_args"]);
6
+ if (args.length < 2) {
7
+ throw new CliError("VERB BLOCKED: state-add args missing", "state-add args missing.", {
8
+ exitCode: EXIT_USAGE,
9
+ required: ["<asset-addr> <state-name>"],
10
+ received: args,
11
+ nextSteps: ["Example: scriptctl state-add actor:act_001 \"震惊\""],
12
+ errorCode: "ARGS_MISSING",
13
+ });
14
+ }
15
+ return applySingleScriptOp(opts, {
16
+ op: "state.add",
17
+ target: args[0],
18
+ name: args[1],
19
+ description: opts["description"],
20
+ state_id: opts["state_id"],
21
+ });
22
+ }
23
+ //# sourceMappingURL=state-add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-add.js","sourceRoot":"","sources":["../../../src/usecases/script/state-add.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,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,sCAAsC,EAAE,yBAAyB,EAAE;YACpF,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,CAAC,2BAA2B,CAAC;YACvC,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,CAAC,mDAAmD,CAAC;YAChE,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,mBAAmB,CAAC,IAAI,EAAE;QAC/B,EAAE,EAAE,WAAW;QACf,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACf,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACb,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;QAChC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;KAC3B,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 commandStateChange(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,24 @@
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
+ import { stateChangeTemplate } from "./lib.js";
5
+ export async function commandStateChange(opts) {
6
+ const args = asList(opts["_args"]);
7
+ const selectorMode = selectionHasAnyFilter(opts);
8
+ // Single-point: `state-change <at> <target>`; selector: `state-change <target>`.
9
+ const target = strOf(selectorMode ? args[0] : args[1]);
10
+ if (!target) {
11
+ throw new CliError("VERB BLOCKED: state-change args missing", "state-change args missing.", {
12
+ exitCode: EXIT_USAGE,
13
+ required: [selectorMode ? "<asset-addr> (with a selection)" : "<action-addr> <asset-addr>"],
14
+ received: args,
15
+ nextSteps: ["Example: scriptctl state-change ep_001/scn_001#3 actor:act_001 --to st_shock | scriptctl state-change --in ep_005/scn_002#0..#9 actor:act_001 --to st_shock --apply"],
16
+ errorCode: "ARGS_MISSING",
17
+ });
18
+ }
19
+ const template = stateChangeTemplate(target, { to: opts["to"], from: opts["from"], effective: opts["effective"], clear: Boolean(opts["clear"]) });
20
+ if (selectorMode)
21
+ return applySelectorEdits(opts, template, "state-change");
22
+ return applySingleScriptOp(opts, { ...template, at: args[0] });
23
+ }
24
+ //# sourceMappingURL=state-change.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-change.js","sourceRoot":"","sources":["../../../src/usecases/script/state-change.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;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAU;IACjD,MAAM,IAAI,GAAG,MAAM,CAAS,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACjD,iFAAiF;IACjF,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAAC,yCAAyC,EAAE,4BAA4B,EAAE;YAC1F,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,4BAA4B,CAAC;YAC3F,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,CAAC,uKAAuK,CAAC;YACpL,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAClJ,IAAI,YAAY;QAAE,OAAO,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC5E,OAAO,mBAAmB,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACjE,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 commandStateDelete(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,23 @@
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 commandStateDelete(opts) {
5
+ const args = asList(opts["_args"]);
6
+ if (args.length < 1) {
7
+ throw new CliError("VERB BLOCKED: state-delete address missing", "state-delete address missing.", {
8
+ exitCode: EXIT_USAGE,
9
+ required: ["<state-addr>"],
10
+ received: ["<empty>"],
11
+ nextSteps: ["Example: scriptctl state-delete actor:act_001/st_calm --strategy remove"],
12
+ errorCode: "ARGS_MISSING",
13
+ });
14
+ }
15
+ return applySingleScriptOp(opts, {
16
+ op: "state.delete",
17
+ target: args[0],
18
+ strategy: opts["strategy"],
19
+ replacement: opts["replacement"],
20
+ });
21
+ }
22
+ // ----- scene context ref ----------------------------------------------------
23
+ //# sourceMappingURL=state-delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-delete.js","sourceRoot":"","sources":["../../../src/usecases/script/state-delete.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,kBAAkB,CAAC,IAAU;IACjD,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,4CAA4C,EAAE,+BAA+B,EAAE;YAChG,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,CAAC,cAAc,CAAC;YAC1B,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,SAAS,EAAE,CAAC,yEAAyE,CAAC;YACtF,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,mBAAmB,CAAC,IAAI,EAAE;QAC/B,EAAE,EAAE,cAAc;QAClB,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACf,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;QAC1B,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;KACjC,CAAC,CAAC;AACL,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 commandStateRename(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,17 @@
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 commandStateRename(opts) {
5
+ const args = asList(opts["_args"]);
6
+ if (args.length < 2) {
7
+ throw new CliError("VERB BLOCKED: state-rename args missing", "state-rename args missing.", {
8
+ exitCode: EXIT_USAGE,
9
+ required: ["<state-addr> <new-name>"],
10
+ received: args,
11
+ nextSteps: ["Example: scriptctl state-rename actor:act_001/st_calm \"平静(新)\""],
12
+ errorCode: "ARGS_MISSING",
13
+ });
14
+ }
15
+ return applySingleScriptOp(opts, { op: "state.rename", target: args[0], name: args[1] });
16
+ }
17
+ //# sourceMappingURL=state-rename.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-rename.js","sourceRoot":"","sources":["../../../src/usecases/script/state-rename.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,kBAAkB,CAAC,IAAU;IACjD,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,yCAAyC,EAAE,4BAA4B,EAAE;YAC1F,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,CAAC,yBAAyB,CAAC;YACrC,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,CAAC,iEAAiE,CAAC;YAC9E,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,mBAAmB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3F,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 commandSummary(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,45 @@
1
+ import { EXIT_OK, } from "../../common.js";
2
+ import { asList, strOf, } from "../../domain/script/shared.js";
3
+ import { loadScriptForEdit, } from "./session.js";
4
+ import { buildReport, synopsisPreview, } from "./lib.js";
5
+ export async function commandSummary(opts) {
6
+ const session = await loadScriptForEdit(opts);
7
+ const script = session.script;
8
+ const episodes = asList(script["episodes"]);
9
+ const scenes = [];
10
+ for (const ep of episodes)
11
+ scenes.push(...asList(ep["scenes"]));
12
+ const actions = [];
13
+ for (const scene of scenes)
14
+ actions.push(...asList(scene["actions"]));
15
+ const lines = [
16
+ `title: ${script["title"] || "-"}`,
17
+ `episodes: ${episodes.length}`,
18
+ `scenes: ${scenes.length}`,
19
+ `actions: ${actions.length}`,
20
+ `actors: ${asList(script["actors"]).length}`,
21
+ `locations: ${asList(script["locations"]).length}`,
22
+ `props: ${asList(script["props"]).length}`,
23
+ `speakers: ${asList(script["speakers"]).length}`,
24
+ ];
25
+ const logline = strOf(script["logline"]).trim();
26
+ if (logline)
27
+ lines.push(`logline: ${logline}`);
28
+ const theme = strOf(script["theme"]).trim();
29
+ if (theme)
30
+ lines.push(`theme: ${theme}`);
31
+ const synopsis = strOf(script["synopsis"]).trim();
32
+ if (synopsis)
33
+ lines.push(`synopsis: ${synopsisPreview(synopsis, 120)}`);
34
+ const mainCharacters = asList(script["main_characters"])
35
+ .map((c) => strOf(c["name"]).trim())
36
+ .filter((n) => n);
37
+ if (mainCharacters.length > 0)
38
+ lines.push(`main characters: ${mainCharacters.slice(0, 6).join(", ")}`);
39
+ return [buildReport("query.summary", "SCRIPT SUMMARY", lines, session.artifactLabel, ["Use plural-noun queries (episodes / scenes / actions / actors / ...) or edit verbs to act on the script."]), EXIT_OK];
40
+ }
41
+ // ----- episodes -------------------------------------------------------------
42
+ // An episode is in scope when the selector is empty, when an episode-level
43
+ // region covers it (probe with a scn=0 id, which only matches episode regions
44
+ // and so also covers scene-less episodes), or when any of its scenes matches.
45
+ //# sourceMappingURL=summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/usecases/script/summary.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 commandTransition(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,24 @@
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
+ import { transitionTemplate } from "./lib.js";
5
+ export async function commandTransition(opts) {
6
+ const args = asList(opts["_args"]);
7
+ const selectorMode = selectionHasAnyFilter(opts);
8
+ const target = strOf(selectorMode ? args[0] : args[1]);
9
+ if (!target) {
10
+ throw new CliError("VERB BLOCKED: transition args missing", "transition args missing.", {
11
+ exitCode: EXIT_USAGE,
12
+ required: [selectorMode ? "<asset-addr> (with a selection)" : "<action-addr> <asset-addr>"],
13
+ received: args,
14
+ nextSteps: ["Example: scriptctl transition ep_001/scn_001#3 actor:act_001 --process \"...\" --contrast \"...\" | scriptctl transition --in ep_005..ep_006 --has transition actor:act_001 --clear --apply"],
15
+ errorCode: "ARGS_MISSING",
16
+ });
17
+ }
18
+ const template = transitionTemplate(target, { process: opts["process"], contrast: opts["contrast"], clear: Boolean(opts["clear"]) });
19
+ if (selectorMode)
20
+ return applySelectorEdits(opts, template, "transition");
21
+ return applySingleScriptOp(opts, { ...template, at: args[0] });
22
+ }
23
+ // ----- dialogue / speaker ---------------------------------------------------
24
+ //# sourceMappingURL=transition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transition.js","sourceRoot":"","sources":["../../../src/usecases/script/transition.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;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAU;IAChD,MAAM,IAAI,GAAG,MAAM,CAAS,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAAC,uCAAuC,EAAE,0BAA0B,EAAE;YACtF,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,4BAA4B,CAAC;YAC3F,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,CAAC,+LAA+L,CAAC;YAC5M,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACrI,IAAI,YAAY;QAAE,OAAO,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC1E,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 commandType(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,24 @@
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 commandType(opts) {
5
+ const args = asList(opts["_args"]);
6
+ const selectorMode = selectionHasAnyFilter(opts);
7
+ // Single-point: `type <at> <type>` (value = args[1]). Selector: `type <type>`
8
+ // (value = args[0]); --type stays a filter predicate, not the new value.
9
+ const typeVal = strOf(selectorMode ? args[0] : args[1]).trim();
10
+ if (!typeVal) {
11
+ throw new CliError("VERB BLOCKED: Type args missing", "Type args missing.", {
12
+ exitCode: EXIT_USAGE,
13
+ required: [selectorMode ? "<type> (with a selection)" : "<action ref> <type>"],
14
+ received: args,
15
+ nextSteps: ["Example: scriptctl type ep_001/scn_001#3 dialogue | scriptctl type --in ep_001 dialogue --apply"],
16
+ errorCode: "ARGS_MISSING",
17
+ });
18
+ }
19
+ const template = { op: "action.type.set", type: typeVal };
20
+ if (selectorMode)
21
+ return applySelectorEdits(opts, template, "type");
22
+ return applySingleScriptOp(opts, { ...template, at: args[0] });
23
+ }
24
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../../../src/usecases/script/type.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,WAAW,CAAC,IAAU;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAS,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACjD,8EAA8E;IAC9E,yEAAyE;IACzE,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAAC,iCAAiC,EAAE,oBAAoB,EAAE;YAC1E,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,qBAAqB,CAAC;YAC9E,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,CAAC,mGAAmG,CAAC;YAChH,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAS,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAChE,IAAI,YAAY;QAAE,OAAO,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpE,OAAO,mBAAmB,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACjE,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 commandWorldview(opts: Dict): Promise<[Report, number]>;
@@ -0,0 +1,18 @@
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 commandWorldview(opts) {
5
+ const args = asList(opts["_args"]);
6
+ if (args.length < 1) {
7
+ throw new CliError("VERB BLOCKED: Worldview value missing", "Worldview value missing.", {
8
+ exitCode: EXIT_USAGE,
9
+ required: ["<value>"],
10
+ received: ["<empty>"],
11
+ nextSteps: ["Example: scriptctl worldview 现代"],
12
+ errorCode: "ARGS_MISSING",
13
+ });
14
+ }
15
+ return applySingleScriptOp(opts, { op: "meta.worldview.set", worldview: args[0] });
16
+ }
17
+ // ----- state management -----------------------------------------------------
18
+ //# sourceMappingURL=worldview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worldview.js","sourceRoot":"","sources":["../../../src/usecases/script/worldview.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,gBAAgB,CAAC,IAAU;IAC/C,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,uCAAuC,EAAE,0BAA0B,EAAE;YACtF,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,SAAS,EAAE,CAAC,iCAAiC,CAAC;YAC9C,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,mBAAmB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,+EAA+E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lingjingai/scriptctl",
3
- "version": "0.19.2",
3
+ "version": "0.21.0",
4
4
  "description": "剧本阶段统一 CLI:直转外部素材到 script.json,以及当前最终剧本的读取、校验、原子编辑与批量 patch 精修。",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,78 +0,0 @@
1
- type Dict = Record<string, unknown>;
2
- export declare function findAction(script: Dict, epId: string, sceneId: string, actionIndex: number): Dict;
3
- export declare function findEpisode(script: Dict, epId: string): Dict;
4
- export declare function findScene(script: Dict, epId: string, sceneId: string): Dict;
5
- /**
6
- * Minimal schema-v2 script skeleton: every required top-level field present,
7
- * all collections empty. It is the starting point for building a script
8
- * bottom-up with the atomic add/insert verbs instead of assembling it from
9
- * source material (direct) or md (parse). `worldview`/`style`/`title` are
10
- * present-but-empty so the field-presence checks pass; they get filled in
11
- * later via `worldview` / `patch`. A blank script validates clean: NO_EPISODES
12
- * is a completeness warning (`incomplete_ok`), not a blocker.
13
- */
14
- export declare function blankScript(title?: string): Dict;
15
- /**
16
- * Validate a script's schema and asset wiring.
17
- *
18
- * Pass either:
19
- * - `scriptPath: string` (or null → default to direct's script.initial.json), or
20
- * - `opts.scriptData: Dict` to validate an in-memory object without writing to disk.
21
- *
22
- * Callers that already have the script as a parsed object (episode draft / publish
23
- * after assembly) should prefer `scriptData` to avoid the write-validate-rm dance.
24
- *
25
- * Completeness issues (no episodes, empty episode/scene, scene without location,
26
- * missing asset description) are emitted as warnings (`incomplete_ok`), not
27
- * errors — an unfinished but structurally-sound script passes. Only integrity
28
- * violations (dangling refs, dup ids, invalid enums, missing ids/names) fail it.
29
- */
30
- export declare function validateScript(workspace: string, scriptPath?: string | null, opts?: {
31
- requireSource?: boolean;
32
- scriptData?: Dict;
33
- persist?: boolean;
34
- }): Dict;
35
- export declare function assetKeys(assetType: string): [string, string, string];
36
- export declare function ensureRefId(script: Dict, assetType: string, rawId: unknown, opts?: {
37
- allowNone?: boolean;
38
- }): string | null;
39
- export declare function parseAssetTarget(raw: unknown): [string, string];
40
- export declare function parseStateTarget(raw: unknown): [string, string, string];
41
- export declare function parseSceneRef(raw: unknown): [string, string];
42
- export declare function parseActionRef(raw: unknown): [string, string, number];
43
- export declare function collectStateRefs(script: Dict, kind: string, targetId: string, stateId: string): Dict[];
44
- export type AnyAddress = {
45
- kind: "action";
46
- episodeId: string;
47
- sceneId: string;
48
- actionIndex: number;
49
- } | {
50
- kind: "scene";
51
- episodeId: string;
52
- sceneId: string;
53
- } | {
54
- kind: "asset";
55
- assetKind: string;
56
- assetId: string;
57
- } | {
58
- kind: "state";
59
- assetKind: string;
60
- assetId: string;
61
- stateId: string;
62
- } | {
63
- kind: "episode";
64
- episodeId: string;
65
- } | {
66
- kind: "speaker";
67
- speakerId: string;
68
- };
69
- export declare function parseAnyAddress(raw: unknown): AnyAddress;
70
- export declare function collectAssetRefs(script: Dict, kind: string, targetId: string): Dict[];
71
- export interface PatchOpFieldSchema {
72
- required: string[];
73
- optional: string[];
74
- description: string;
75
- }
76
- export declare const PATCH_OP_SCHEMA: Record<string, PatchOpFieldSchema>;
77
- export declare function applyPatchOperations(script: Dict, sourceText: string, operations: Dict[]): string[];
78
- export {};