@lingjingai/scriptctl 0.49.15 → 0.50.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 (390) hide show
  1. package/README.md +8 -2
  2. package/changes/0.49.16.md +15 -0
  3. package/changes/0.50.0.md +63 -0
  4. package/changes/unreleased.md +2 -1
  5. package/dist/cli.js +26 -5
  6. package/dist/cli.js.map +1 -1
  7. package/dist/domain/authoring/apply.d.ts +1 -33
  8. package/dist/domain/authoring/apply.js +1 -783
  9. package/dist/domain/authoring/apply.js.map +1 -1
  10. package/dist/domain/authoring/export.d.ts +1 -7
  11. package/dist/domain/authoring/export.js +1 -84
  12. package/dist/domain/authoring/export.js.map +1 -1
  13. package/dist/domain/authoring/parser.d.ts +2 -3
  14. package/dist/domain/authoring/parser.js +2 -914
  15. package/dist/domain/authoring/parser.js.map +1 -1
  16. package/dist/domain/authoring/serializer.d.ts +1 -2
  17. package/dist/domain/authoring/serializer.js +1 -243
  18. package/dist/domain/authoring/serializer.js.map +1 -1
  19. package/dist/domain/authoring/shared/bracket.d.ts +4 -0
  20. package/dist/domain/authoring/shared/bracket.js +95 -0
  21. package/dist/domain/authoring/shared/bracket.js.map +1 -0
  22. package/dist/domain/authoring/shared/types.d.ts +12 -0
  23. package/dist/domain/authoring/shared/types.js +2 -0
  24. package/dist/domain/authoring/shared/types.js.map +1 -0
  25. package/dist/domain/authoring/types.d.ts +2 -87
  26. package/dist/domain/authoring/types.js +2 -1
  27. package/dist/domain/authoring/types.js.map +1 -1
  28. package/dist/domain/authoring/v3/apply.d.ts +33 -0
  29. package/dist/domain/authoring/v3/apply.js +784 -0
  30. package/dist/domain/authoring/v3/apply.js.map +1 -0
  31. package/dist/domain/authoring/v3/export.d.ts +7 -0
  32. package/dist/domain/authoring/v3/export.js +85 -0
  33. package/dist/domain/authoring/v3/export.js.map +1 -0
  34. package/dist/domain/authoring/v3/parser.d.ts +3 -0
  35. package/dist/domain/authoring/v3/parser.js +823 -0
  36. package/dist/domain/authoring/v3/parser.js.map +1 -0
  37. package/dist/domain/authoring/v3/serializer.d.ts +2 -0
  38. package/dist/domain/authoring/v3/serializer.js +244 -0
  39. package/dist/domain/authoring/v3/serializer.js.map +1 -0
  40. package/dist/domain/authoring/v3/types.d.ts +76 -0
  41. package/dist/domain/authoring/v3/types.js +2 -0
  42. package/dist/domain/authoring/v3/types.js.map +1 -0
  43. package/dist/domain/authoring/v4/apply.d.ts +40 -0
  44. package/dist/domain/authoring/v4/apply.js +451 -0
  45. package/dist/domain/authoring/v4/apply.js.map +1 -0
  46. package/dist/domain/authoring/v4/parser.d.ts +2 -0
  47. package/dist/domain/authoring/v4/parser.js +729 -0
  48. package/dist/domain/authoring/v4/parser.js.map +1 -0
  49. package/dist/domain/authoring/v4/serializer.d.ts +6 -0
  50. package/dist/domain/authoring/v4/serializer.js +280 -0
  51. package/dist/domain/authoring/v4/serializer.js.map +1 -0
  52. package/dist/domain/authoring/v4/types.d.ts +50 -0
  53. package/dist/domain/authoring/v4/types.js +2 -0
  54. package/dist/domain/authoring/v4/types.js.map +1 -0
  55. package/dist/domain/ingest/apply-plan.d.ts +1 -1
  56. package/dist/domain/ingest/assembler.d.ts +9 -0
  57. package/dist/domain/ingest/assembler.js +98 -36
  58. package/dist/domain/ingest/assembler.js.map +1 -1
  59. package/dist/domain/ingest/asset-audit.d.ts +50 -0
  60. package/dist/domain/ingest/asset-audit.js +196 -0
  61. package/dist/domain/ingest/asset-audit.js.map +1 -0
  62. package/dist/domain/ingest/production-validation.d.ts +5 -4
  63. package/dist/domain/ingest/production-validation.js +10 -25
  64. package/dist/domain/ingest/production-validation.js.map +1 -1
  65. package/dist/domain/ingest/records.d.ts +1 -1
  66. package/dist/domain/ingest/records.js +1 -1
  67. package/dist/domain/ingest/records.js.map +1 -1
  68. package/dist/domain/ingest/serial-context.d.ts +1 -1
  69. package/dist/domain/ingest/validation.d.ts +1 -11
  70. package/dist/domain/ingest/validation.js +1 -199
  71. package/dist/domain/ingest/validation.js.map +1 -1
  72. package/dist/domain/ingest/video-apply.js +68 -45
  73. package/dist/domain/ingest/video-apply.js.map +1 -1
  74. package/dist/domain/script/address.d.ts +1 -32
  75. package/dist/domain/script/address.js +1 -144
  76. package/dist/domain/script/address.js.map +1 -1
  77. package/dist/domain/script/dispatch.d.ts +14 -0
  78. package/dist/domain/script/dispatch.js +47 -0
  79. package/dist/domain/script/dispatch.js.map +1 -0
  80. package/dist/domain/script/lookups.d.ts +1 -33
  81. package/dist/domain/script/lookups.js +1 -316
  82. package/dist/domain/script/lookups.js.map +1 -1
  83. package/dist/domain/script/parse.d.ts +1 -3
  84. package/dist/domain/script/parse.js +1 -164
  85. package/dist/domain/script/parse.js.map +1 -1
  86. package/dist/domain/script/patch/apply.d.ts +1 -2
  87. package/dist/domain/script/patch/apply.js +1 -30
  88. package/dist/domain/script/patch/apply.js.map +1 -1
  89. package/dist/domain/script/patch/helpers.d.ts +1 -17
  90. package/dist/domain/script/patch/helpers.js +1 -210
  91. package/dist/domain/script/patch/helpers.js.map +1 -1
  92. package/dist/domain/script/patch/inline-speaker.d.ts +1 -2
  93. package/dist/domain/script/patch/inline-speaker.js +1 -49
  94. package/dist/domain/script/patch/inline-speaker.js.map +1 -1
  95. package/dist/domain/script/patch/ops-action.d.ts +1 -12
  96. package/dist/domain/script/patch/ops-action.js +1 -366
  97. package/dist/domain/script/patch/ops-action.js.map +1 -1
  98. package/dist/domain/script/patch/ops-asset.d.ts +1 -14
  99. package/dist/domain/script/patch/ops-asset.js +1 -364
  100. package/dist/domain/script/patch/ops-asset.js.map +1 -1
  101. package/dist/domain/script/patch/ops-dialogue.d.ts +1 -2
  102. package/dist/domain/script/patch/ops-dialogue.js +1 -25
  103. package/dist/domain/script/patch/ops-dialogue.js.map +1 -1
  104. package/dist/domain/script/patch/ops-extend.d.ts +1 -8
  105. package/dist/domain/script/patch/ops-extend.js +1 -110
  106. package/dist/domain/script/patch/ops-extend.js.map +1 -1
  107. package/dist/domain/script/patch/ops-meta.d.ts +1 -5
  108. package/dist/domain/script/patch/ops-meta.js +1 -81
  109. package/dist/domain/script/patch/ops-meta.js.map +1 -1
  110. package/dist/domain/script/patch/ops-scene.d.ts +1 -6
  111. package/dist/domain/script/patch/ops-scene.js +1 -350
  112. package/dist/domain/script/patch/ops-scene.js.map +1 -1
  113. package/dist/domain/script/patch/ops-state.d.ts +1 -8
  114. package/dist/domain/script/patch/ops-state.js +1 -164
  115. package/dist/domain/script/patch/ops-state.js.map +1 -1
  116. package/dist/domain/script/patch/registry.d.ts +1 -2
  117. package/dist/domain/script/patch/registry.js +1 -52
  118. package/dist/domain/script/patch/registry.js.map +1 -1
  119. package/dist/domain/script/patch/types.d.ts +1 -10
  120. package/dist/domain/script/patch/types.js +1 -1
  121. package/dist/domain/script/patch/types.js.map +1 -1
  122. package/dist/domain/script/refs.d.ts +1 -4
  123. package/dist/domain/script/refs.js +1 -63
  124. package/dist/domain/script/refs.js.map +1 -1
  125. package/dist/domain/script/scene-refs.d.ts +1 -3
  126. package/dist/domain/script/scene-refs.js +1 -34
  127. package/dist/domain/script/scene-refs.js.map +1 -1
  128. package/dist/domain/script/schema.d.ts +1 -6
  129. package/dist/domain/script/schema.js +1 -55
  130. package/dist/domain/script/schema.js.map +1 -1
  131. package/dist/domain/script/selector.d.ts +1 -45
  132. package/dist/domain/script/selector.js +1 -184
  133. package/dist/domain/script/selector.js.map +1 -1
  134. package/dist/domain/script/shared/regex.d.ts +2 -0
  135. package/dist/domain/script/shared/regex.js +7 -0
  136. package/dist/domain/script/shared/regex.js.map +1 -0
  137. package/dist/domain/script/shared/types.d.ts +18 -0
  138. package/dist/domain/script/shared/types.js +9 -0
  139. package/dist/domain/script/shared/types.js.map +1 -0
  140. package/dist/domain/script/shared/validation.d.ts +10 -0
  141. package/dist/domain/script/shared/validation.js +2 -0
  142. package/dist/domain/script/shared/validation.js.map +1 -0
  143. package/dist/domain/script/types.d.ts +1 -123
  144. package/dist/domain/script/types.js +1 -8
  145. package/dist/domain/script/types.js.map +1 -1
  146. package/dist/domain/script/v3/address.d.ts +32 -0
  147. package/dist/domain/script/v3/address.js +145 -0
  148. package/dist/domain/script/v3/address.js.map +1 -0
  149. package/dist/domain/script/v3/lookups.d.ts +33 -0
  150. package/dist/domain/script/v3/lookups.js +317 -0
  151. package/dist/domain/script/v3/lookups.js.map +1 -0
  152. package/dist/domain/script/v3/ordinal.d.ts +8 -0
  153. package/dist/domain/script/v3/ordinal.js +92 -0
  154. package/dist/domain/script/v3/ordinal.js.map +1 -0
  155. package/dist/domain/script/v3/parse.d.ts +3 -0
  156. package/dist/domain/script/v3/parse.js +165 -0
  157. package/dist/domain/script/v3/parse.js.map +1 -0
  158. package/dist/domain/script/v3/patch/apply.d.ts +2 -0
  159. package/dist/domain/script/v3/patch/apply.js +31 -0
  160. package/dist/domain/script/v3/patch/apply.js.map +1 -0
  161. package/dist/domain/script/v3/patch/helpers.d.ts +17 -0
  162. package/dist/domain/script/v3/patch/helpers.js +211 -0
  163. package/dist/domain/script/v3/patch/helpers.js.map +1 -0
  164. package/dist/domain/script/v3/patch/inline-speaker.d.ts +2 -0
  165. package/dist/domain/script/v3/patch/inline-speaker.js +50 -0
  166. package/dist/domain/script/v3/patch/inline-speaker.js.map +1 -0
  167. package/dist/domain/script/v3/patch/ops-action.d.ts +12 -0
  168. package/dist/domain/script/v3/patch/ops-action.js +367 -0
  169. package/dist/domain/script/v3/patch/ops-action.js.map +1 -0
  170. package/dist/domain/script/v3/patch/ops-asset.d.ts +14 -0
  171. package/dist/domain/script/v3/patch/ops-asset.js +365 -0
  172. package/dist/domain/script/v3/patch/ops-asset.js.map +1 -0
  173. package/dist/domain/script/v3/patch/ops-dialogue.d.ts +2 -0
  174. package/dist/domain/script/v3/patch/ops-dialogue.js +26 -0
  175. package/dist/domain/script/v3/patch/ops-dialogue.js.map +1 -0
  176. package/dist/domain/script/v3/patch/ops-extend.d.ts +8 -0
  177. package/dist/domain/script/v3/patch/ops-extend.js +111 -0
  178. package/dist/domain/script/v3/patch/ops-extend.js.map +1 -0
  179. package/dist/domain/script/v3/patch/ops-meta.d.ts +5 -0
  180. package/dist/domain/script/v3/patch/ops-meta.js +82 -0
  181. package/dist/domain/script/v3/patch/ops-meta.js.map +1 -0
  182. package/dist/domain/script/v3/patch/ops-scene.d.ts +6 -0
  183. package/dist/domain/script/v3/patch/ops-scene.js +351 -0
  184. package/dist/domain/script/v3/patch/ops-scene.js.map +1 -0
  185. package/dist/domain/script/v3/patch/ops-state.d.ts +8 -0
  186. package/dist/domain/script/v3/patch/ops-state.js +165 -0
  187. package/dist/domain/script/v3/patch/ops-state.js.map +1 -0
  188. package/dist/domain/script/v3/patch/registry.d.ts +2 -0
  189. package/dist/domain/script/v3/patch/registry.js +53 -0
  190. package/dist/domain/script/v3/patch/registry.js.map +1 -0
  191. package/dist/domain/script/v3/patch/types.d.ts +10 -0
  192. package/dist/domain/script/v3/patch/types.js +2 -0
  193. package/dist/domain/script/v3/patch/types.js.map +1 -0
  194. package/dist/domain/script/v3/refs.d.ts +4 -0
  195. package/dist/domain/script/v3/refs.js +64 -0
  196. package/dist/domain/script/v3/refs.js.map +1 -0
  197. package/dist/domain/script/v3/scene-refs.d.ts +3 -0
  198. package/dist/domain/script/v3/scene-refs.js +35 -0
  199. package/dist/domain/script/v3/scene-refs.js.map +1 -0
  200. package/dist/domain/script/v3/schema.d.ts +6 -0
  201. package/dist/domain/script/v3/schema.js +56 -0
  202. package/dist/domain/script/v3/schema.js.map +1 -0
  203. package/dist/domain/script/v3/selector.d.ts +44 -0
  204. package/dist/domain/script/v3/selector.js +180 -0
  205. package/dist/domain/script/v3/selector.js.map +1 -0
  206. package/dist/domain/script/v3/types.d.ts +106 -0
  207. package/dist/domain/script/v3/types.js +2 -0
  208. package/dist/domain/script/v3/types.js.map +1 -0
  209. package/dist/domain/script/v3/validation.d.ts +3 -0
  210. package/dist/domain/script/v3/validation.js +200 -0
  211. package/dist/domain/script/v3/validation.js.map +1 -0
  212. package/dist/domain/script/v4/address.d.ts +61 -0
  213. package/dist/domain/script/v4/address.js +100 -0
  214. package/dist/domain/script/v4/address.js.map +1 -0
  215. package/dist/domain/script/v4/factory.d.ts +2 -0
  216. package/dist/domain/script/v4/factory.js +13 -0
  217. package/dist/domain/script/v4/factory.js.map +1 -0
  218. package/dist/domain/script/v4/from-v3.d.ts +29 -0
  219. package/dist/domain/script/v4/from-v3.js +307 -0
  220. package/dist/domain/script/v4/from-v3.js.map +1 -0
  221. package/dist/domain/script/v4/ids.d.ts +27 -0
  222. package/dist/domain/script/v4/ids.js +63 -0
  223. package/dist/domain/script/v4/ids.js.map +1 -0
  224. package/dist/domain/script/v4/ordinal.d.ts +3 -0
  225. package/dist/domain/script/v4/ordinal.js +67 -0
  226. package/dist/domain/script/v4/ordinal.js.map +1 -0
  227. package/dist/domain/script/v4/parse.d.ts +3 -0
  228. package/dist/domain/script/v4/parse.js +18 -0
  229. package/dist/domain/script/v4/parse.js.map +1 -0
  230. package/dist/domain/script/v4/patch/apply.d.ts +3 -0
  231. package/dist/domain/script/v4/patch/apply.js +24 -0
  232. package/dist/domain/script/v4/patch/apply.js.map +1 -0
  233. package/dist/domain/script/v4/patch/helpers.d.ts +32 -0
  234. package/dist/domain/script/v4/patch/helpers.js +139 -0
  235. package/dist/domain/script/v4/patch/helpers.js.map +1 -0
  236. package/dist/domain/script/v4/patch/ops-action.d.ts +13 -0
  237. package/dist/domain/script/v4/patch/ops-action.js +379 -0
  238. package/dist/domain/script/v4/patch/ops-action.js.map +1 -0
  239. package/dist/domain/script/v4/patch/ops-asset.d.ts +17 -0
  240. package/dist/domain/script/v4/patch/ops-asset.js +617 -0
  241. package/dist/domain/script/v4/patch/ops-asset.js.map +1 -0
  242. package/dist/domain/script/v4/patch/ops-extend.d.ts +11 -0
  243. package/dist/domain/script/v4/patch/ops-extend.js +86 -0
  244. package/dist/domain/script/v4/patch/ops-extend.js.map +1 -0
  245. package/dist/domain/script/v4/patch/ops-meta.d.ts +5 -0
  246. package/dist/domain/script/v4/patch/ops-meta.js +49 -0
  247. package/dist/domain/script/v4/patch/ops-meta.js.map +1 -0
  248. package/dist/domain/script/v4/patch/ops-scene-ref.d.ts +3 -0
  249. package/dist/domain/script/v4/patch/ops-scene-ref.js +98 -0
  250. package/dist/domain/script/v4/patch/ops-scene-ref.js.map +1 -0
  251. package/dist/domain/script/v4/patch/ops-structure.d.ts +6 -0
  252. package/dist/domain/script/v4/patch/ops-structure.js +236 -0
  253. package/dist/domain/script/v4/patch/ops-structure.js.map +1 -0
  254. package/dist/domain/script/v4/patch/registry.d.ts +2 -0
  255. package/dist/domain/script/v4/patch/registry.js +50 -0
  256. package/dist/domain/script/v4/patch/registry.js.map +1 -0
  257. package/dist/domain/script/v4/patch/schema.d.ts +7 -0
  258. package/dist/domain/script/v4/patch/schema.js +75 -0
  259. package/dist/domain/script/v4/patch/schema.js.map +1 -0
  260. package/dist/domain/script/v4/patch/types.d.ts +10 -0
  261. package/dist/domain/script/v4/patch/types.js +2 -0
  262. package/dist/domain/script/v4/patch/types.js.map +1 -0
  263. package/dist/domain/script/v4/selector.d.ts +11 -0
  264. package/dist/domain/script/v4/selector.js +125 -0
  265. package/dist/domain/script/v4/selector.js.map +1 -0
  266. package/dist/domain/script/v4/types.d.ts +120 -0
  267. package/dist/domain/script/v4/types.js +2 -0
  268. package/dist/domain/script/v4/types.js.map +1 -0
  269. package/dist/domain/script/v4/validation.d.ts +2 -0
  270. package/dist/domain/script/v4/validation.js +378 -0
  271. package/dist/domain/script/v4/validation.js.map +1 -0
  272. package/dist/help-text.js +146 -114
  273. package/dist/help-text.js.map +1 -1
  274. package/dist/llm/config.js +2 -0
  275. package/dist/llm/config.js.map +1 -1
  276. package/dist/llm/registry.d.ts +1 -0
  277. package/dist/llm/registry.js +3 -0
  278. package/dist/llm/registry.js.map +1 -1
  279. package/dist/llm/tasks/ingest/asset-audit.d.ts +6 -0
  280. package/dist/llm/tasks/ingest/asset-audit.js +164 -0
  281. package/dist/llm/tasks/ingest/asset-audit.js.map +1 -0
  282. package/dist/llm/tasks/ingest/asset-curate.d.ts +1 -1
  283. package/dist/llm/types.d.ts +1 -1
  284. package/dist/llm/types.js.map +1 -1
  285. package/dist/usecases/ingest/command.js +1 -1
  286. package/dist/usecases/ingest/final-asset-audit.d.ts +39 -0
  287. package/dist/usecases/ingest/final-asset-audit.js +88 -0
  288. package/dist/usecases/ingest/final-asset-audit.js.map +1 -0
  289. package/dist/usecases/ingest/pipeline.js +62 -11
  290. package/dist/usecases/ingest/pipeline.js.map +1 -1
  291. package/dist/usecases/ingest/serial-govern.d.ts +2 -1
  292. package/dist/usecases/ingest/serial-govern.js +11 -4
  293. package/dist/usecases/ingest/serial-govern.js.map +1 -1
  294. package/dist/usecases/ingest/video-pipeline.js +100 -14
  295. package/dist/usecases/ingest/video-pipeline.js.map +1 -1
  296. package/dist/usecases/ingest/view-server.js +2 -2
  297. package/dist/usecases/ingest/view-server.js.map +1 -1
  298. package/dist/usecases/script/actions.js +101 -5
  299. package/dist/usecases/script/actions.js.map +1 -1
  300. package/dist/usecases/script/actors.js +16 -7
  301. package/dist/usecases/script/actors.js.map +1 -1
  302. package/dist/usecases/script/alias.js +7 -6
  303. package/dist/usecases/script/alias.js.map +1 -1
  304. package/dist/usecases/script/assets.js +18 -2
  305. package/dist/usecases/script/assets.js.map +1 -1
  306. package/dist/usecases/script/audit-assets.d.ts +4 -0
  307. package/dist/usecases/script/audit-assets.js +40 -0
  308. package/dist/usecases/script/audit-assets.js.map +1 -0
  309. package/dist/usecases/script/command-constraints.d.ts +36 -0
  310. package/dist/usecases/script/command-constraints.js +115 -0
  311. package/dist/usecases/script/command-constraints.js.map +1 -0
  312. package/dist/usecases/script/context.js +31 -4
  313. package/dist/usecases/script/context.js.map +1 -1
  314. package/dist/usecases/script/create.js +2 -2
  315. package/dist/usecases/script/create.js.map +1 -1
  316. package/dist/usecases/script/delete.js +6 -3
  317. package/dist/usecases/script/delete.js.map +1 -1
  318. package/dist/usecases/script/describe.js +7 -4
  319. package/dist/usecases/script/describe.js.map +1 -1
  320. package/dist/usecases/script/dialogue.js +15 -5
  321. package/dist/usecases/script/dialogue.js.map +1 -1
  322. package/dist/usecases/script/dispatch.d.ts +3 -0
  323. package/dist/usecases/script/dispatch.js +10 -0
  324. package/dist/usecases/script/dispatch.js.map +1 -0
  325. package/dist/usecases/script/do.js +74 -11
  326. package/dist/usecases/script/do.js.map +1 -1
  327. package/dist/usecases/script/emotion.js +14 -3
  328. package/dist/usecases/script/emotion.js.map +1 -1
  329. package/dist/usecases/script/episodes.js +15 -4
  330. package/dist/usecases/script/episodes.js.map +1 -1
  331. package/dist/usecases/script/export-authoring.js +35 -11
  332. package/dist/usecases/script/export-authoring.js.map +1 -1
  333. package/dist/usecases/script/extend.js +23 -15
  334. package/dist/usecases/script/extend.js.map +1 -1
  335. package/dist/usecases/script/ids.js +53 -10
  336. package/dist/usecases/script/ids.js.map +1 -1
  337. package/dist/usecases/script/insert.js +74 -38
  338. package/dist/usecases/script/insert.js.map +1 -1
  339. package/dist/usecases/script/lib.d.ts +50 -1
  340. package/dist/usecases/script/lib.js +599 -61
  341. package/dist/usecases/script/lib.js.map +1 -1
  342. package/dist/usecases/script/locations.js +16 -7
  343. package/dist/usecases/script/locations.js.map +1 -1
  344. package/dist/usecases/script/merge.js +8 -5
  345. package/dist/usecases/script/merge.js.map +1 -1
  346. package/dist/usecases/script/move.js +24 -5
  347. package/dist/usecases/script/move.js.map +1 -1
  348. package/dist/usecases/script/parenthetical.d.ts +3 -0
  349. package/dist/usecases/script/parenthetical.js +55 -0
  350. package/dist/usecases/script/parenthetical.js.map +1 -0
  351. package/dist/usecases/script/props.js +16 -7
  352. package/dist/usecases/script/props.js.map +1 -1
  353. package/dist/usecases/script/refs.js +44 -0
  354. package/dist/usecases/script/refs.js.map +1 -1
  355. package/dist/usecases/script/rename.js +7 -4
  356. package/dist/usecases/script/rename.js.map +1 -1
  357. package/dist/usecases/script/scenes.js +32 -6
  358. package/dist/usecases/script/scenes.js.map +1 -1
  359. package/dist/usecases/script/script-patch.js +180 -16
  360. package/dist/usecases/script/script-patch.js.map +1 -1
  361. package/dist/usecases/script/session.d.ts +3 -0
  362. package/dist/usecases/script/session.js +25 -5
  363. package/dist/usecases/script/session.js.map +1 -1
  364. package/dist/usecases/script/split.js +12 -6
  365. package/dist/usecases/script/split.js.map +1 -1
  366. package/dist/usecases/script/states.js +45 -1
  367. package/dist/usecases/script/states.js.map +1 -1
  368. package/dist/usecases/script/synopsis.js +11 -4
  369. package/dist/usecases/script/synopsis.js.map +1 -1
  370. package/dist/usecases/script/v3/mutations.d.ts +2 -0
  371. package/dist/usecases/script/v3/mutations.js +5 -0
  372. package/dist/usecases/script/v3/mutations.js.map +1 -0
  373. package/dist/usecases/script/v4/mutations.d.ts +2 -0
  374. package/dist/usecases/script/v4/mutations.js +6 -0
  375. package/dist/usecases/script/v4/mutations.js.map +1 -0
  376. package/dist/usecases/script/v4/queries.d.ts +14 -0
  377. package/dist/usecases/script/v4/queries.js +154 -0
  378. package/dist/usecases/script/v4/queries.js.map +1 -0
  379. package/dist/usecases/script/working-copy.js +3 -3
  380. package/dist/usecases/script/working-copy.js.map +1 -1
  381. package/dist/usecases/script/write-authoring.js +99 -5
  382. package/dist/usecases/script/write-authoring.js.map +1 -1
  383. package/package.json +3 -2
  384. package/skills/scriptctl/SKILL.md +126 -283
  385. package/skills/scriptctl/references/atomic-edit-workflow.md +45 -0
  386. package/skills/scriptctl/references/bulk-authoring.md +35 -154
  387. package/skills/scriptctl/references/ingest-workflow.md +12 -11
  388. package/skills/scriptctl/references/production-writing-standard.md +38 -67
  389. package/skills/scriptctl/references/state-reference-repair.md +19 -42
  390. package/skills/scriptctl/references/atomic-write-workflow.md +0 -176
@@ -1,200 +1,2 @@
1
- // Deterministic Script v3 structural + referential validator (§9.9, revised).
2
- // Enforces v3 invariants: plain-text content, single scene-level location,
3
- // scene-level actors/props with materialized state, no legacy v2 fields
4
- // (state_changes / action.actor_id / scene.context / speakers[] / content spans).
5
- import { ACTION_TYPES, IMPORTANCE_TIERS, NON_ACTOR_SPEAKER_KINDS } from "../script/types.js";
6
- import { canonicalNameKey } from "../script/names.js";
7
- const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
8
- const isArr = (v) => Array.isArray(v);
9
- const isStr = (v) => typeof v === "string";
10
- const ACTION_LEGACY = ["state_changes", "actor_id", "speakers", "lines"];
11
- export function validateScriptV3(doc) {
12
- const errors = [];
13
- const warnings = [];
14
- const err = (code, path, message) => errors.push({ code, path, message });
15
- if (!isObj(doc))
16
- return { ok: false, errors: [{ code: "not_object", path: "$", message: "script must be an object" }], warnings };
17
- if (doc.version !== 3)
18
- err("version", "$.version", "version must be 3");
19
- for (const key of ["title", "worldview", "style"])
20
- if (!isStr(doc[key]))
21
- err("field", `$.${key}`, `${key} must be a string`);
22
- const stateIds = new Map();
23
- const idKind = new Map();
24
- const actorNames = new Map();
25
- const collect = (list, kind, idField, nameField, path) => {
26
- if (!isArr(list)) {
27
- err("field", path, `${path} must be an array`);
28
- return;
29
- }
30
- list.forEach((raw, i) => {
31
- const p = `${path}[${i}]`;
32
- if (!isObj(raw)) {
33
- err("asset", p, "asset must be an object");
34
- return;
35
- }
36
- const id = raw[idField];
37
- if (!isStr(id)) {
38
- err("asset_id", `${p}.${idField}`, `${idField} required`);
39
- return;
40
- }
41
- if (idKind.has(id))
42
- err("dup_id", `${p}.${idField}`, `duplicate id ${id}`);
43
- idKind.set(id, kind);
44
- if (!isStr(raw[nameField]))
45
- err("asset_name", `${p}.${nameField}`, `${nameField} required`);
46
- else if (kind === "actor") {
47
- const nameKey = canonicalNameKey(raw[nameField]);
48
- const existingId = actorNames.get(nameKey);
49
- if (existingId !== undefined) {
50
- err("dup_actor_name", `${p}.${nameField}`, `actor name ${raw[nameField]} already belongs to ${existingId}`);
51
- }
52
- else {
53
- actorNames.set(nameKey, id);
54
- }
55
- }
56
- if (!isStr(raw.importance) || !IMPORTANCE_TIERS.includes(raw.importance))
57
- err("importance", `${p}.importance`, `importance must be one of ${IMPORTANCE_TIERS.join("|")}`);
58
- if (!isStr(raw.description))
59
- err("asset_desc", `${p}.description`, "description must be a string");
60
- const ids = new Set();
61
- let defaults = 0;
62
- if (!isArr(raw.states) || raw.states.length === 0)
63
- err("states", `${p}.states`, "states must be a non-empty array");
64
- else
65
- raw.states.forEach((st, j) => {
66
- const sp = `${p}.states[${j}]`;
67
- if (!isObj(st) || !isStr(st.state_id)) {
68
- err("state_id", sp, "state_id required");
69
- return;
70
- }
71
- if (ids.has(st.state_id))
72
- err("dup_state", sp, `duplicate state_id ${st.state_id}`);
73
- ids.add(st.state_id);
74
- if (st.state_id === "default")
75
- defaults++;
76
- if (!isStr(st.state_name))
77
- err("state_name", `${sp}.state_name`, "state_name required");
78
- });
79
- if (isArr(raw.states) && defaults !== 1)
80
- err("default_state", `${p}.states`, `exactly one 'default' state required, found ${defaults}`);
81
- stateIds.set(id, ids);
82
- });
83
- };
84
- collect(doc.actors, "actor", "actor_id", "actor_name", "$.actors");
85
- collect(doc.locations, "location", "location_id", "location_name", "$.locations");
86
- collect(doc.props, "prop", "prop_id", "prop_name", "$.props");
87
- const refState = (assetId, stateId, kind, path) => {
88
- if (idKind.get(assetId) !== kind) {
89
- err("ref", path, `${kind} ${assetId} not found`);
90
- return;
91
- }
92
- if (stateId !== undefined && (!isStr(stateId) || !stateIds.get(assetId)?.has(stateId)))
93
- err("state_ref", path, `state ${String(stateId)} not materialized on ${assetId}`);
94
- };
95
- const checkEntityList = (list, kind, idField, path) => {
96
- if (list === undefined) {
97
- err("field", path, `${path} required (may be empty array)`);
98
- return;
99
- }
100
- if (!isArr(list)) {
101
- err("field", path, `${path} must be an array`);
102
- return;
103
- }
104
- list.forEach((ref, i) => {
105
- if (!isObj(ref) || !isStr(ref[idField])) {
106
- err("ref", `${path}[${i}]`, `${idField} required`);
107
- return;
108
- }
109
- refState(ref[idField], ref.state_id, kind, `${path}[${i}]`);
110
- });
111
- };
112
- const checkAction = (action, path, sceneActorIds) => {
113
- if (!isObj(action)) {
114
- err("action", path, "action must be an object");
115
- return;
116
- }
117
- for (const bad of ACTION_LEGACY)
118
- if (bad in action)
119
- err("legacy_field", `${path}.${bad}`, `v3 forbids action.${bad}`);
120
- const type = action.type;
121
- if (!isStr(type) || !ACTION_TYPES.includes(type))
122
- err("action_type", `${path}.type`, `invalid action type ${String(type)}`);
123
- if (!isStr(action.content))
124
- err("content", `${path}.content`, "content must be a plain-text string");
125
- if (type === "dialogue" || type === "inner_thought") {
126
- const sp = action.speaker;
127
- if (!isObj(sp))
128
- err("speaker", `${path}.speaker`, "dialogue/inner_thought needs a speaker");
129
- else if ("kind" in sp) {
130
- if (!isStr(sp.kind) || !NON_ACTOR_SPEAKER_KINDS.includes(sp.kind))
131
- err("speaker_kind", `${path}.speaker.kind`, "invalid non-actor speaker kind");
132
- }
133
- else if (isStr(sp.actor_id)) {
134
- refState(sp.actor_id, sp.state_id, "actor", `${path}.speaker`);
135
- if (!sceneActorIds.has(sp.actor_id)) {
136
- err("actor_not_in_scene", `${path}.speaker.actor_id`, `actor ${sp.actor_id} is not referenced by this scene`);
137
- }
138
- }
139
- else
140
- err("speaker", `${path}.speaker`, "speaker needs actor_id or kind");
141
- }
142
- };
143
- const episodes = doc.episodes;
144
- if (!isArr(episodes))
145
- err("episodes", "$.episodes", "episodes must be an array");
146
- else
147
- episodes.forEach((ep, ei) => {
148
- const ep_p = `$.episodes[${ei}]`;
149
- if (!isObj(ep) || !isStr(ep.episode_id)) {
150
- err("episode_id", ep_p, "episode_id required");
151
- return;
152
- }
153
- if (!isArr(ep.scenes)) {
154
- err("scenes", `${ep_p}.scenes`, "scenes must be an array");
155
- return;
156
- }
157
- ep.scenes.forEach((sc, si) => {
158
- const sc_p = `${ep_p}.scenes[${si}]`;
159
- if (!isObj(sc)) {
160
- err("scene", sc_p, "scene must be an object");
161
- return;
162
- }
163
- if ("context" in sc)
164
- err("legacy_field", `${sc_p}.context`, "v3 forbids scene.context");
165
- if (!isStr(sc.scene_id))
166
- err("scene_id", sc_p, "scene_id required");
167
- const loc = sc.location;
168
- if (loc !== null) {
169
- if (!isObj(loc) || !isStr(loc.location_id))
170
- err("location", `${sc_p}.location`, "location must be null or {location_id}");
171
- else
172
- refState(loc.location_id, loc.state_id, "location", `${sc_p}.location`);
173
- }
174
- checkEntityList(sc.actors, "actor", "actor_id", `${sc_p}.actors`);
175
- checkEntityList(sc.props, "prop", "prop_id", `${sc_p}.props`);
176
- if (isArr(sc.props)) {
177
- const propIds = new Set();
178
- sc.props.forEach((ref, i) => {
179
- if (!isObj(ref) || !isStr(ref.prop_id))
180
- return;
181
- if (propIds.has(ref.prop_id))
182
- err("dup_prop_ref", `${sc_p}.props[${i}]`, `duplicate prop ref ${ref.prop_id}`);
183
- propIds.add(ref.prop_id);
184
- });
185
- }
186
- const sceneActorIds = new Set(isArr(sc.actors)
187
- ? sc.actors
188
- .filter((ref) => isObj(ref))
189
- .map((ref) => ref.actor_id)
190
- .filter((id) => isStr(id))
191
- : []);
192
- if (!isArr(sc.actions))
193
- err("actions", `${sc_p}.actions`, "actions must be an array");
194
- else
195
- sc.actions.forEach((a, ai) => checkAction(a, `${sc_p}.actions[${ai}]`, sceneActorIds));
196
- });
197
- });
198
- return { ok: errors.length === 0, errors, warnings };
199
- }
1
+ export * from "../script/v3/validation.js";
200
2
  //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/domain/ingest/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/domain/ingest/validation.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
@@ -36,52 +36,75 @@ function toSpeaker(raw) {
36
36
  // v3. Actor speakers are added to the scene cast (mirrors assemble()).
37
37
  export function docsToNameScript(docs, title) {
38
38
  let scn = 0;
39
- const episodes = docs.map((d, ei) => ({
40
- episode_id: `ep_${pad(ei + 1)}`,
41
- scenes: d.scenes.map((s) => {
42
- const env = {};
43
- const sp = SPACE_ZH_TO_EN[(s.environment.space ?? "").trim()];
44
- const tm = TIME_ZH_TO_EN[(s.environment.time ?? "").trim()];
45
- if (sp)
46
- env.space = sp;
47
- if (tm)
48
- env.time = tm;
49
- const actors = [];
50
- const ensureSpeakerActor = (name) => {
51
- if (!actors.some((actor) => actor.name === name))
52
- actors.push({ name });
53
- };
54
- for (const ch of s.characters) {
55
- if (ch.name && !isCrowdName(ch.name)) {
56
- actors.push(ch.state ? { name: ch.name, state: ch.state } : { name: ch.name });
39
+ const episodes = docs.map((d, ei) => {
40
+ const episodeIdentityKey = `video:episode:${d.episode}`;
41
+ const sceneIdentityOccurrences = new Map();
42
+ return {
43
+ identity_key: episodeIdentityKey,
44
+ episode_id: `ep_${pad(ei + 1)}`,
45
+ scenes: d.scenes.map((s) => {
46
+ const sceneAnchor = s.timeRange?.trim()
47
+ ? `time:${s.timeRange.trim()}`
48
+ : `index:${s.index}`;
49
+ const sceneOccurrence = (sceneIdentityOccurrences.get(sceneAnchor) ?? 0) + 1;
50
+ sceneIdentityOccurrences.set(sceneAnchor, sceneOccurrence);
51
+ const sceneIdentityKey = `${episodeIdentityKey}:scene:${sceneAnchor}:${sceneOccurrence}`;
52
+ const env = {};
53
+ const sp = SPACE_ZH_TO_EN[(s.environment.space ?? "").trim()];
54
+ const tm = TIME_ZH_TO_EN[(s.environment.time ?? "").trim()];
55
+ if (sp)
56
+ env.space = sp;
57
+ if (tm)
58
+ env.time = tm;
59
+ const actors = [];
60
+ const ensureSpeakerActor = (name) => {
61
+ if (!actors.some((actor) => actor.name === name))
62
+ actors.push({ name });
63
+ };
64
+ for (const ch of s.characters) {
65
+ if (ch.name && !isCrowdName(ch.name)) {
66
+ actors.push(ch.state ? { name: ch.name, state: ch.state } : { name: ch.name });
67
+ }
57
68
  }
58
- }
59
- const actions = s.anchors.map((a) => {
60
- const out = { type: KIND_TO_TYPE[a.kind] ?? "action", content: a.content };
61
- if ((a.kind === "dlg" || a.kind === "think") && a.speaker) {
62
- const spk = toSpeaker(a.speaker);
63
- out.speaker = spk;
64
- if ("name" in spk)
65
- ensureSpeakerActor(spk.name); // actor speaker is present
66
- }
67
- if (a.emotion)
68
- out.emotion = a.emotion;
69
- const ts = (a.ts ?? "").trim();
70
- if (ts)
71
- out.extend = { timestamp: ts };
72
- return out;
73
- });
74
- const loc = (s.location ?? "").trim();
75
- return {
76
- scene_id: `scn_${pad(++scn)}`,
77
- ...(env.space || env.time ? { environment: env } : {}),
78
- location: loc ? { name: loc } : null,
79
- actors,
80
- props: (s.props ?? []).filter(Boolean).map((p) => ({ name: p })),
81
- actions,
82
- };
83
- }),
84
- }));
69
+ const actionIdentityOccurrences = new Map();
70
+ const actions = s.anchors.map((a) => {
71
+ const timestamp = (a.ts ?? "").trim();
72
+ const actionAnchor = timestamp
73
+ ? `time:${timestamp}`
74
+ : `content:${JSON.stringify([a.kind, a.speaker ?? "", a.content])}`;
75
+ const actionOccurrence = (actionIdentityOccurrences.get(actionAnchor) ?? 0) + 1;
76
+ actionIdentityOccurrences.set(actionAnchor, actionOccurrence);
77
+ const out = {
78
+ identity_key: `${sceneIdentityKey}:action:${actionAnchor}:${actionOccurrence}`,
79
+ type: KIND_TO_TYPE[a.kind] ?? "action",
80
+ content: a.content,
81
+ };
82
+ if ((a.kind === "dlg" || a.kind === "think") && a.speaker) {
83
+ const spk = toSpeaker(a.speaker);
84
+ out.speaker = spk;
85
+ if ("name" in spk)
86
+ ensureSpeakerActor(spk.name); // actor speaker is present
87
+ }
88
+ if (a.emotion)
89
+ out.emotion = a.emotion;
90
+ const ts = (a.ts ?? "").trim();
91
+ if (ts)
92
+ out.extend = { timestamp: ts };
93
+ return out;
94
+ });
95
+ const loc = (s.location ?? "").trim();
96
+ return {
97
+ identity_key: sceneIdentityKey,
98
+ scene_id: `scn_${pad(++scn)}`,
99
+ ...(env.space || env.time ? { environment: env } : {}),
100
+ location: loc ? { name: loc } : null,
101
+ actors,
102
+ props: (s.props ?? []).filter(Boolean).map((p) => ({ name: p })),
103
+ actions,
104
+ };
105
+ }),
106
+ };
107
+ });
85
108
  return { title, episodes };
86
109
  }
87
110
  //# sourceMappingURL=video-apply.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"video-apply.js","sourceRoot":"","sources":["../../../src/domain/ingest/video-apply.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"video-apply.js","sourceRoot":"","sources":["../../../src/domain/ingest/video-apply.ts"],"names":[],"mappings":"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"}
@@ -1,32 +1 @@
1
- export declare function parseAssetTarget(raw: unknown): [string, string];
2
- export declare function parseStateTarget(raw: unknown): [string, string, string];
3
- export declare function parseSceneRef(raw: unknown): [string, string];
4
- export declare function parseActionRef(raw: unknown): [string, string, number];
5
- export type AnyAddress = {
6
- kind: "action";
7
- episodeId: string;
8
- sceneId: string;
9
- actionIndex: number;
10
- } | {
11
- kind: "scene";
12
- episodeId: string;
13
- sceneId: string;
14
- } | {
15
- kind: "asset";
16
- assetKind: string;
17
- assetId: string;
18
- } | {
19
- kind: "state";
20
- assetKind: string;
21
- assetId: string;
22
- stateId: string;
23
- } | {
24
- kind: "episode";
25
- episodeId: string;
26
- } | {
27
- kind: "speaker";
28
- speakerId: string;
29
- } | {
30
- kind: "global";
31
- };
32
- export declare function parseAnyAddress(raw: unknown): AnyAddress;
1
+ export * from "./v3/address.js";
@@ -1,145 +1,2 @@
1
- import { CliError, EXIT_USAGE, SCRIPT_TARGET_KINDS, } from "../../common.js";
2
- import { strOf } from "./shared.js";
3
- export function parseAssetTarget(raw) {
4
- const value = strOf(raw).trim();
5
- if (!value.includes(":")) {
6
- throw new CliError("SCRIPT OP BLOCKED: Target invalid", "Target invalid.", {
7
- exitCode: EXIT_USAGE,
8
- required: ["target: actor:<id>, location:<id>, or prop:<id>"],
9
- received: [value || "<empty>"],
10
- nextSteps: ["Use a concrete asset target."],
11
- errorCode: "TARGET_INVALID",
12
- });
13
- }
14
- const idx = value.indexOf(":");
15
- const kind = value.slice(0, idx).trim();
16
- const targetId = value.slice(idx + 1).trim();
17
- if (!SCRIPT_TARGET_KINDS.has(kind) || !targetId) {
18
- throw new CliError("SCRIPT OP BLOCKED: Target invalid", "Target invalid.", {
19
- exitCode: EXIT_USAGE,
20
- required: ["target: actor:<id>, location:<id>, or prop:<id>"],
21
- received: [value],
22
- nextSteps: ["Use actor, location, or prop with a non-empty id."],
23
- errorCode: "TARGET_INVALID",
24
- });
25
- }
26
- return [kind, targetId];
27
- }
28
- export function parseStateTarget(raw) {
29
- const value = strOf(raw).trim();
30
- if (!value.includes("/")) {
31
- throw new CliError("SCRIPT OP BLOCKED: State target invalid", "State target invalid.", {
32
- exitCode: EXIT_USAGE,
33
- required: ["state target: actor:<id>/<state_id>"],
34
- received: [value || "<empty>"],
35
- nextSteps: ["Use a concrete state target."],
36
- errorCode: "STATE_TARGET_INVALID",
37
- });
38
- }
39
- const lastSlash = value.lastIndexOf("/");
40
- const assetRaw = value.slice(0, lastSlash);
41
- const stateId = value.slice(lastSlash + 1).trim();
42
- const [kind, targetId] = parseAssetTarget(assetRaw);
43
- if (!stateId) {
44
- throw new CliError("SCRIPT OP BLOCKED: State target invalid", "State target invalid.", {
45
- exitCode: EXIT_USAGE,
46
- required: ["state_id after '/'"],
47
- received: [value],
48
- nextSteps: ["Use a non-empty state_id."],
49
- errorCode: "STATE_TARGET_INVALID",
50
- });
51
- }
52
- return [kind, targetId, stateId];
53
- }
54
- export function parseSceneRef(raw) {
55
- const value = strOf(raw).trim();
56
- if (!value.includes("/")) {
57
- throw new CliError("SCRIPT OP BLOCKED: Scene ref invalid", "Scene ref invalid.", {
58
- exitCode: EXIT_USAGE,
59
- required: ["scene ref: ep_001/scn_001"],
60
- received: [value || "<empty>"],
61
- nextSteps: ["Use ep_id/scn_id."],
62
- errorCode: "SCENE_REF_INVALID",
63
- });
64
- }
65
- const idx = value.indexOf("/");
66
- return [value.slice(0, idx).trim(), value.slice(idx + 1).trim()];
67
- }
68
- export function parseActionRef(raw) {
69
- const value = strOf(raw).trim();
70
- if (!value.includes("#")) {
71
- throw new CliError("SCRIPT OP BLOCKED: Action ref invalid", "Action ref invalid.", {
72
- exitCode: EXIT_USAGE,
73
- required: ["action ref: ep_001/scn_001#4"],
74
- received: [value || "<empty>"],
75
- nextSteps: ["Use ep_id/scn_id#action_index."],
76
- errorCode: "ACTION_REF_INVALID",
77
- });
78
- }
79
- const lastHash = value.lastIndexOf("#");
80
- const sceneRaw = value.slice(0, lastHash);
81
- const indexRaw = value.slice(lastHash + 1);
82
- const [epId, sceneId] = parseSceneRef(sceneRaw);
83
- const actionIndex = parseInt(indexRaw, 10);
84
- if (Number.isNaN(actionIndex)) {
85
- throw new CliError("SCRIPT OP BLOCKED: Action index invalid", "Action index invalid.", {
86
- exitCode: EXIT_USAGE,
87
- required: ["integer action index after '#'"],
88
- received: [value],
89
- nextSteps: ["Use a zero-based action index."],
90
- errorCode: "ACTION_INDEX_INVALID",
91
- });
92
- }
93
- return [epId, sceneId, actionIndex];
94
- }
95
- // Try each format in order. The order matters: action (has `#`) is checked
96
- // before scene (just `/`), and asset+state (has `:`) is checked before scene.
97
- // Episode and speaker are bare ids (no separators) distinguished by prefix;
98
- // `global` is the literal script-level sentinel.
99
- export function parseAnyAddress(raw) {
100
- const value = strOf(raw).trim();
101
- if (!value) {
102
- throw new CliError("ADDRESS BLOCKED: Address empty", "Address empty.", {
103
- exitCode: EXIT_USAGE,
104
- required: ["one of the supported address formats"],
105
- received: ["<empty>"],
106
- nextSteps: ["Pass an address like ep_001/scn_001#3, ep_001/scn_001, actor:act_001, actor:act_001/st_001, ep_001, spk_001, or global."],
107
- errorCode: "ADDRESS_EMPTY",
108
- });
109
- }
110
- if (value.includes("#")) {
111
- const [episodeId, sceneId, actionIndex] = parseActionRef(value);
112
- return { kind: "action", episodeId, sceneId, actionIndex };
113
- }
114
- if (value.includes(":")) {
115
- if (value.slice(value.indexOf(":") + 1).includes("/")) {
116
- const [assetKind, assetId, stateId] = parseStateTarget(value);
117
- return { kind: "state", assetKind, assetId, stateId };
118
- }
119
- const [assetKind, assetId] = parseAssetTarget(value);
120
- return { kind: "asset", assetKind, assetId };
121
- }
122
- if (value.includes("/")) {
123
- const [episodeId, sceneId] = parseSceneRef(value);
124
- return { kind: "scene", episodeId, sceneId };
125
- }
126
- if (value === "global") {
127
- return { kind: "global" };
128
- }
129
- if (/^ep_/.test(value)) {
130
- return { kind: "episode", episodeId: value };
131
- }
132
- if (/^spk_/.test(value)) {
133
- return { kind: "speaker", speakerId: value };
134
- }
135
- throw new CliError("ADDRESS BLOCKED: Address invalid", "Address invalid.", {
136
- exitCode: EXIT_USAGE,
137
- required: [
138
- "address: ep_NNN/scn_NNN#idx (action) | ep_NNN/scn_NNN (scene) | actor|location|prop:id (asset) | actor|location|prop:id/state_id (state) | ep_NNN (episode) | spk_XXX (speaker) | global (script-level)",
139
- ],
140
- received: [value],
141
- nextSteps: ["Use a recognized address format."],
142
- errorCode: "ADDRESS_INVALID",
143
- });
144
- }
1
+ export * from "./v3/address.js";
145
2
  //# sourceMappingURL=address.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/domain/script/address.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/domain/script/address.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ScriptV3 } from "./v3/types.js";
2
+ import type { ScriptV4 } from "./v4/types.js";
3
+ import type { ValidationResult } from "./shared/validation.js";
4
+ export type ScriptVersion = 3 | 4;
5
+ export type ScriptDocument = ScriptV3 | ScriptV4;
6
+ export interface ScriptDialect {
7
+ readonly version: ScriptVersion;
8
+ readonly require: (value: unknown) => ScriptDocument;
9
+ readonly validate: (value: unknown) => ValidationResult;
10
+ }
11
+ export declare function scriptVersionOf(value: unknown): ScriptVersion;
12
+ export declare function dialectFor(value: unknown): ScriptDialect;
13
+ export declare function requireScriptDocument(value: unknown): ScriptDocument;
14
+ export declare function validateScriptDocument(value: unknown): ValidationResult;
@@ -0,0 +1,47 @@
1
+ import { CliError, EXIT_INPUT } from "../../common.js";
2
+ import { requireScriptV3 } from "./v3/parse.js";
3
+ import { requireScriptV4 } from "./v4/parse.js";
4
+ import { validateScriptV4 } from "./v4/validation.js";
5
+ import { validateScriptV3 } from "./v3/validation.js";
6
+ const DIALECTS = {
7
+ 3: {
8
+ version: 3,
9
+ require: requireScriptV3,
10
+ validate: validateScriptV3,
11
+ },
12
+ 4: {
13
+ version: 4,
14
+ require: requireScriptV4,
15
+ validate: validateScriptV4,
16
+ },
17
+ };
18
+ export function scriptVersionOf(value) {
19
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
20
+ throw new CliError("SCRIPT BLOCKED: invalid document", "script.json must be an object with an explicit version.", {
21
+ exitCode: EXIT_INPUT,
22
+ errorCode: "SCRIPT_VERSION_MISSING",
23
+ required: ["version: 3 or version: 4"],
24
+ received: [Array.isArray(value) ? "array" : typeof value],
25
+ });
26
+ }
27
+ const version = value.version;
28
+ if (version === 3 || version === 4)
29
+ return version;
30
+ throw new CliError("SCRIPT BLOCKED: unsupported version", "script.json must declare version 3 or version 4.", {
31
+ exitCode: EXIT_INPUT,
32
+ errorCode: version === undefined ? "SCRIPT_VERSION_MISSING" : "SCRIPT_VERSION_UNSUPPORTED",
33
+ required: ["version: 3 or version: 4"],
34
+ received: [String(version)],
35
+ nextSteps: ["Use an explicit supported script version; scriptctl does not infer a version from document shape."],
36
+ });
37
+ }
38
+ export function dialectFor(value) {
39
+ return DIALECTS[scriptVersionOf(value)];
40
+ }
41
+ export function requireScriptDocument(value) {
42
+ return dialectFor(value).require(value);
43
+ }
44
+ export function validateScriptDocument(value) {
45
+ return dialectFor(value).validate(value);
46
+ }
47
+ //# sourceMappingURL=dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/domain/script/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AActD,MAAM,QAAQ,GAA6B;IACzC,CAAC,EAAE;QACD,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,gBAAgB;KAC3B;IACD,CAAC,EAAE;QACD,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,gBAAgB;KAC3B;CACF,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,QAAQ,CAAC,kCAAkC,EAAE,yDAAyD,EAAE;YAChH,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,wBAAwB;YACnC,QAAQ,EAAE,CAAC,0BAA0B,CAAC;YACtC,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC;SAC1D,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAI,KAAiC,CAAC,OAAO,CAAC;IAC3D,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACnD,MAAM,IAAI,QAAQ,CAAC,qCAAqC,EAAE,kDAAkD,EAAE;QAC5G,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,4BAA4B;QAC1F,QAAQ,EAAE,CAAC,0BAA0B,CAAC;QACtC,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3B,SAAS,EAAE,CAAC,mGAAmG,CAAC;KACjH,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC"}