@lingjingai/scriptctl 0.49.16 → 0.51.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 (525) hide show
  1. package/README.md +8 -2
  2. package/changes/0.50.0.md +63 -0
  3. package/changes/0.51.0.md +24 -0
  4. package/dist/cli/register-batch.d.ts +3 -0
  5. package/dist/cli/register-batch.js +28 -0
  6. package/dist/cli/register-batch.js.map +1 -0
  7. package/dist/cli/register-edits.d.ts +4 -0
  8. package/dist/cli/register-edits.js +226 -0
  9. package/dist/cli/register-edits.js.map +1 -0
  10. package/dist/cli/register-query.d.ts +4 -0
  11. package/dist/cli/register-query.js +93 -0
  12. package/dist/cli/register-query.js.map +1 -0
  13. package/dist/cli/register-tools.d.ts +3 -0
  14. package/dist/cli/register-tools.js +23 -0
  15. package/dist/cli/register-tools.js.map +1 -0
  16. package/dist/cli/register-workflows.d.ts +4 -0
  17. package/dist/cli/register-workflows.js +71 -0
  18. package/dist/cli/register-workflows.js.map +1 -0
  19. package/dist/cli/registry.d.ts +14 -0
  20. package/dist/cli/registry.js +65 -0
  21. package/dist/cli/registry.js.map +1 -0
  22. package/dist/cli.d.ts +3 -0
  23. package/dist/cli.js +146 -575
  24. package/dist/cli.js.map +1 -1
  25. package/dist/common.d.ts +12 -38
  26. package/dist/common.js +5 -11
  27. package/dist/common.js.map +1 -1
  28. package/dist/domain/authoring/apply.d.ts +1 -33
  29. package/dist/domain/authoring/apply.js +1 -783
  30. package/dist/domain/authoring/apply.js.map +1 -1
  31. package/dist/domain/authoring/export.d.ts +1 -7
  32. package/dist/domain/authoring/export.js +1 -84
  33. package/dist/domain/authoring/export.js.map +1 -1
  34. package/dist/domain/authoring/parser.d.ts +2 -3
  35. package/dist/domain/authoring/parser.js +2 -914
  36. package/dist/domain/authoring/parser.js.map +1 -1
  37. package/dist/domain/authoring/serializer.d.ts +1 -2
  38. package/dist/domain/authoring/serializer.js +1 -243
  39. package/dist/domain/authoring/serializer.js.map +1 -1
  40. package/dist/domain/authoring/shared/bracket.d.ts +4 -0
  41. package/dist/domain/authoring/shared/bracket.js +95 -0
  42. package/dist/domain/authoring/shared/bracket.js.map +1 -0
  43. package/dist/domain/authoring/shared/types.d.ts +12 -0
  44. package/dist/domain/authoring/shared/types.js +2 -0
  45. package/dist/domain/authoring/shared/types.js.map +1 -0
  46. package/dist/domain/authoring/types.d.ts +2 -87
  47. package/dist/domain/authoring/types.js +2 -1
  48. package/dist/domain/authoring/types.js.map +1 -1
  49. package/dist/domain/authoring/v3/apply.d.ts +33 -0
  50. package/dist/domain/authoring/v3/apply.js +784 -0
  51. package/dist/domain/authoring/v3/apply.js.map +1 -0
  52. package/dist/domain/authoring/v3/export.d.ts +7 -0
  53. package/dist/domain/authoring/v3/export.js +85 -0
  54. package/dist/domain/authoring/v3/export.js.map +1 -0
  55. package/dist/domain/authoring/v3/parser.d.ts +3 -0
  56. package/dist/domain/authoring/v3/parser.js +823 -0
  57. package/dist/domain/authoring/v3/parser.js.map +1 -0
  58. package/dist/domain/authoring/v3/serializer.d.ts +2 -0
  59. package/dist/domain/authoring/v3/serializer.js +244 -0
  60. package/dist/domain/authoring/v3/serializer.js.map +1 -0
  61. package/dist/domain/authoring/v3/types.d.ts +76 -0
  62. package/dist/domain/authoring/v3/types.js +2 -0
  63. package/dist/domain/authoring/v3/types.js.map +1 -0
  64. package/dist/domain/authoring/v4/apply.d.ts +40 -0
  65. package/dist/domain/authoring/v4/apply.js +451 -0
  66. package/dist/domain/authoring/v4/apply.js.map +1 -0
  67. package/dist/domain/authoring/v4/parser.d.ts +2 -0
  68. package/dist/domain/authoring/v4/parser.js +729 -0
  69. package/dist/domain/authoring/v4/parser.js.map +1 -0
  70. package/dist/domain/authoring/v4/serializer.d.ts +6 -0
  71. package/dist/domain/authoring/v4/serializer.js +280 -0
  72. package/dist/domain/authoring/v4/serializer.js.map +1 -0
  73. package/dist/domain/authoring/v4/types.d.ts +50 -0
  74. package/dist/domain/authoring/v4/types.js +2 -0
  75. package/dist/domain/authoring/v4/types.js.map +1 -0
  76. package/dist/domain/ingest/apply-plan.d.ts +1 -1
  77. package/dist/domain/ingest/assembler.d.ts +9 -0
  78. package/dist/domain/ingest/assembler.js +98 -36
  79. package/dist/domain/ingest/assembler.js.map +1 -1
  80. package/dist/domain/ingest/asset-audit.d.ts +50 -0
  81. package/dist/domain/ingest/asset-audit.js +196 -0
  82. package/dist/domain/ingest/asset-audit.js.map +1 -0
  83. package/dist/domain/ingest/production-validation.d.ts +5 -4
  84. package/dist/domain/ingest/production-validation.js +10 -25
  85. package/dist/domain/ingest/production-validation.js.map +1 -1
  86. package/dist/domain/ingest/records.d.ts +1 -1
  87. package/dist/domain/ingest/records.js +1 -1
  88. package/dist/domain/ingest/records.js.map +1 -1
  89. package/dist/domain/ingest/serial-context.d.ts +1 -1
  90. package/dist/domain/ingest/validation.d.ts +1 -11
  91. package/dist/domain/ingest/validation.js +1 -199
  92. package/dist/domain/ingest/validation.js.map +1 -1
  93. package/dist/domain/ingest/video-apply.js +68 -45
  94. package/dist/domain/ingest/video-apply.js.map +1 -1
  95. package/dist/domain/script/address.d.ts +1 -32
  96. package/dist/domain/script/address.js +1 -144
  97. package/dist/domain/script/address.js.map +1 -1
  98. package/dist/domain/script/dispatch.d.ts +14 -0
  99. package/dist/domain/script/dispatch.js +45 -0
  100. package/dist/domain/script/dispatch.js.map +1 -0
  101. package/dist/domain/script/lookups.d.ts +1 -33
  102. package/dist/domain/script/lookups.js +1 -316
  103. package/dist/domain/script/lookups.js.map +1 -1
  104. package/dist/domain/script/parse.d.ts +1 -3
  105. package/dist/domain/script/parse.js +1 -164
  106. package/dist/domain/script/parse.js.map +1 -1
  107. package/dist/domain/script/patch/apply.d.ts +1 -2
  108. package/dist/domain/script/patch/apply.js +1 -30
  109. package/dist/domain/script/patch/apply.js.map +1 -1
  110. package/dist/domain/script/patch/helpers.d.ts +1 -17
  111. package/dist/domain/script/patch/helpers.js +1 -210
  112. package/dist/domain/script/patch/helpers.js.map +1 -1
  113. package/dist/domain/script/patch/inline-speaker.d.ts +1 -2
  114. package/dist/domain/script/patch/inline-speaker.js +1 -49
  115. package/dist/domain/script/patch/inline-speaker.js.map +1 -1
  116. package/dist/domain/script/patch/ops-action.d.ts +1 -12
  117. package/dist/domain/script/patch/ops-action.js +1 -366
  118. package/dist/domain/script/patch/ops-action.js.map +1 -1
  119. package/dist/domain/script/patch/ops-asset.d.ts +1 -14
  120. package/dist/domain/script/patch/ops-asset.js +1 -364
  121. package/dist/domain/script/patch/ops-asset.js.map +1 -1
  122. package/dist/domain/script/patch/ops-dialogue.d.ts +1 -2
  123. package/dist/domain/script/patch/ops-dialogue.js +1 -25
  124. package/dist/domain/script/patch/ops-dialogue.js.map +1 -1
  125. package/dist/domain/script/patch/ops-extend.d.ts +1 -8
  126. package/dist/domain/script/patch/ops-extend.js +1 -110
  127. package/dist/domain/script/patch/ops-extend.js.map +1 -1
  128. package/dist/domain/script/patch/ops-meta.d.ts +1 -5
  129. package/dist/domain/script/patch/ops-meta.js +1 -81
  130. package/dist/domain/script/patch/ops-meta.js.map +1 -1
  131. package/dist/domain/script/patch/ops-scene.d.ts +1 -6
  132. package/dist/domain/script/patch/ops-scene.js +1 -350
  133. package/dist/domain/script/patch/ops-scene.js.map +1 -1
  134. package/dist/domain/script/patch/ops-state.d.ts +1 -8
  135. package/dist/domain/script/patch/ops-state.js +1 -164
  136. package/dist/domain/script/patch/ops-state.js.map +1 -1
  137. package/dist/domain/script/patch/registry.d.ts +1 -2
  138. package/dist/domain/script/patch/registry.js +1 -52
  139. package/dist/domain/script/patch/registry.js.map +1 -1
  140. package/dist/domain/script/patch/types.d.ts +1 -10
  141. package/dist/domain/script/patch/types.js +1 -1
  142. package/dist/domain/script/patch/types.js.map +1 -1
  143. package/dist/domain/script/refs.d.ts +1 -4
  144. package/dist/domain/script/refs.js +1 -63
  145. package/dist/domain/script/refs.js.map +1 -1
  146. package/dist/domain/script/scene-refs.d.ts +1 -3
  147. package/dist/domain/script/scene-refs.js +1 -34
  148. package/dist/domain/script/scene-refs.js.map +1 -1
  149. package/dist/domain/script/schema.d.ts +1 -6
  150. package/dist/domain/script/schema.js +1 -55
  151. package/dist/domain/script/schema.js.map +1 -1
  152. package/dist/domain/script/selector.d.ts +1 -45
  153. package/dist/domain/script/selector.js +1 -184
  154. package/dist/domain/script/selector.js.map +1 -1
  155. package/dist/domain/script/shared/regex.d.ts +2 -0
  156. package/dist/domain/script/shared/regex.js +7 -0
  157. package/dist/domain/script/shared/regex.js.map +1 -0
  158. package/dist/domain/script/shared/types.d.ts +18 -0
  159. package/dist/domain/script/shared/types.js +9 -0
  160. package/dist/domain/script/shared/types.js.map +1 -0
  161. package/dist/domain/script/shared/validation.d.ts +10 -0
  162. package/dist/domain/script/shared/validation.js +2 -0
  163. package/dist/domain/script/shared/validation.js.map +1 -0
  164. package/dist/domain/script/shared.js +4 -6
  165. package/dist/domain/script/shared.js.map +1 -1
  166. package/dist/domain/script/types.d.ts +1 -123
  167. package/dist/domain/script/types.js +1 -8
  168. package/dist/domain/script/types.js.map +1 -1
  169. package/dist/domain/script/v3/address.d.ts +32 -0
  170. package/dist/domain/script/v3/address.js +136 -0
  171. package/dist/domain/script/v3/address.js.map +1 -0
  172. package/dist/domain/script/v3/lookups.d.ts +33 -0
  173. package/dist/domain/script/v3/lookups.js +316 -0
  174. package/dist/domain/script/v3/lookups.js.map +1 -0
  175. package/dist/domain/script/v3/ordinal.d.ts +8 -0
  176. package/dist/domain/script/v3/ordinal.js +91 -0
  177. package/dist/domain/script/v3/ordinal.js.map +1 -0
  178. package/dist/domain/script/v3/parse.d.ts +3 -0
  179. package/dist/domain/script/v3/parse.js +164 -0
  180. package/dist/domain/script/v3/parse.js.map +1 -0
  181. package/dist/domain/script/v3/patch/apply.d.ts +2 -0
  182. package/dist/domain/script/v3/patch/apply.js +31 -0
  183. package/dist/domain/script/v3/patch/apply.js.map +1 -0
  184. package/dist/domain/script/v3/patch/helpers.d.ts +17 -0
  185. package/dist/domain/script/v3/patch/helpers.js +209 -0
  186. package/dist/domain/script/v3/patch/helpers.js.map +1 -0
  187. package/dist/domain/script/v3/patch/inline-speaker.d.ts +2 -0
  188. package/dist/domain/script/v3/patch/inline-speaker.js +50 -0
  189. package/dist/domain/script/v3/patch/inline-speaker.js.map +1 -0
  190. package/dist/domain/script/v3/patch/ops-action.d.ts +12 -0
  191. package/dist/domain/script/v3/patch/ops-action.js +367 -0
  192. package/dist/domain/script/v3/patch/ops-action.js.map +1 -0
  193. package/dist/domain/script/v3/patch/ops-asset.d.ts +14 -0
  194. package/dist/domain/script/v3/patch/ops-asset.js +365 -0
  195. package/dist/domain/script/v3/patch/ops-asset.js.map +1 -0
  196. package/dist/domain/script/v3/patch/ops-dialogue.d.ts +2 -0
  197. package/dist/domain/script/v3/patch/ops-dialogue.js +26 -0
  198. package/dist/domain/script/v3/patch/ops-dialogue.js.map +1 -0
  199. package/dist/domain/script/v3/patch/ops-extend.d.ts +8 -0
  200. package/dist/domain/script/v3/patch/ops-extend.js +111 -0
  201. package/dist/domain/script/v3/patch/ops-extend.js.map +1 -0
  202. package/dist/domain/script/v3/patch/ops-meta.d.ts +5 -0
  203. package/dist/domain/script/v3/patch/ops-meta.js +82 -0
  204. package/dist/domain/script/v3/patch/ops-meta.js.map +1 -0
  205. package/dist/domain/script/v3/patch/ops-scene.d.ts +6 -0
  206. package/dist/domain/script/v3/patch/ops-scene.js +351 -0
  207. package/dist/domain/script/v3/patch/ops-scene.js.map +1 -0
  208. package/dist/domain/script/v3/patch/ops-state.d.ts +8 -0
  209. package/dist/domain/script/v3/patch/ops-state.js +165 -0
  210. package/dist/domain/script/v3/patch/ops-state.js.map +1 -0
  211. package/dist/domain/script/v3/patch/registry.d.ts +2 -0
  212. package/dist/domain/script/v3/patch/registry.js +53 -0
  213. package/dist/domain/script/v3/patch/registry.js.map +1 -0
  214. package/dist/domain/script/v3/patch/types.d.ts +10 -0
  215. package/dist/domain/script/v3/patch/types.js +2 -0
  216. package/dist/domain/script/v3/patch/types.js.map +1 -0
  217. package/dist/domain/script/v3/refs.d.ts +4 -0
  218. package/dist/domain/script/v3/refs.js +64 -0
  219. package/dist/domain/script/v3/refs.js.map +1 -0
  220. package/dist/domain/script/v3/scene-refs.d.ts +3 -0
  221. package/dist/domain/script/v3/scene-refs.js +35 -0
  222. package/dist/domain/script/v3/scene-refs.js.map +1 -0
  223. package/dist/domain/script/v3/schema.d.ts +6 -0
  224. package/dist/domain/script/v3/schema.js +56 -0
  225. package/dist/domain/script/v3/schema.js.map +1 -0
  226. package/dist/domain/script/v3/selector.d.ts +44 -0
  227. package/dist/domain/script/v3/selector.js +178 -0
  228. package/dist/domain/script/v3/selector.js.map +1 -0
  229. package/dist/domain/script/v3/types.d.ts +106 -0
  230. package/dist/domain/script/v3/types.js +2 -0
  231. package/dist/domain/script/v3/types.js.map +1 -0
  232. package/dist/domain/script/v3/validation.d.ts +3 -0
  233. package/dist/domain/script/v3/validation.js +200 -0
  234. package/dist/domain/script/v3/validation.js.map +1 -0
  235. package/dist/domain/script/v4/address.d.ts +61 -0
  236. package/dist/domain/script/v4/address.js +99 -0
  237. package/dist/domain/script/v4/address.js.map +1 -0
  238. package/dist/domain/script/v4/factory.d.ts +2 -0
  239. package/dist/domain/script/v4/factory.js +13 -0
  240. package/dist/domain/script/v4/factory.js.map +1 -0
  241. package/dist/domain/script/v4/from-v3.d.ts +29 -0
  242. package/dist/domain/script/v4/from-v3.js +307 -0
  243. package/dist/domain/script/v4/from-v3.js.map +1 -0
  244. package/dist/domain/script/v4/ids.d.ts +27 -0
  245. package/dist/domain/script/v4/ids.js +62 -0
  246. package/dist/domain/script/v4/ids.js.map +1 -0
  247. package/dist/domain/script/v4/ordinal.d.ts +3 -0
  248. package/dist/domain/script/v4/ordinal.js +66 -0
  249. package/dist/domain/script/v4/ordinal.js.map +1 -0
  250. package/dist/domain/script/v4/parse.d.ts +3 -0
  251. package/dist/domain/script/v4/parse.js +17 -0
  252. package/dist/domain/script/v4/parse.js.map +1 -0
  253. package/dist/domain/script/v4/patch/apply.d.ts +3 -0
  254. package/dist/domain/script/v4/patch/apply.js +24 -0
  255. package/dist/domain/script/v4/patch/apply.js.map +1 -0
  256. package/dist/domain/script/v4/patch/helpers.d.ts +32 -0
  257. package/dist/domain/script/v4/patch/helpers.js +138 -0
  258. package/dist/domain/script/v4/patch/helpers.js.map +1 -0
  259. package/dist/domain/script/v4/patch/ops-action.d.ts +13 -0
  260. package/dist/domain/script/v4/patch/ops-action.js +376 -0
  261. package/dist/domain/script/v4/patch/ops-action.js.map +1 -0
  262. package/dist/domain/script/v4/patch/ops-asset.d.ts +17 -0
  263. package/dist/domain/script/v4/patch/ops-asset.js +617 -0
  264. package/dist/domain/script/v4/patch/ops-asset.js.map +1 -0
  265. package/dist/domain/script/v4/patch/ops-extend.d.ts +11 -0
  266. package/dist/domain/script/v4/patch/ops-extend.js +86 -0
  267. package/dist/domain/script/v4/patch/ops-extend.js.map +1 -0
  268. package/dist/domain/script/v4/patch/ops-meta.d.ts +5 -0
  269. package/dist/domain/script/v4/patch/ops-meta.js +49 -0
  270. package/dist/domain/script/v4/patch/ops-meta.js.map +1 -0
  271. package/dist/domain/script/v4/patch/ops-scene-ref.d.ts +3 -0
  272. package/dist/domain/script/v4/patch/ops-scene-ref.js +98 -0
  273. package/dist/domain/script/v4/patch/ops-scene-ref.js.map +1 -0
  274. package/dist/domain/script/v4/patch/ops-structure.d.ts +6 -0
  275. package/dist/domain/script/v4/patch/ops-structure.js +236 -0
  276. package/dist/domain/script/v4/patch/ops-structure.js.map +1 -0
  277. package/dist/domain/script/v4/patch/registry.d.ts +2 -0
  278. package/dist/domain/script/v4/patch/registry.js +50 -0
  279. package/dist/domain/script/v4/patch/registry.js.map +1 -0
  280. package/dist/domain/script/v4/patch/schema.d.ts +7 -0
  281. package/dist/domain/script/v4/patch/schema.js +75 -0
  282. package/dist/domain/script/v4/patch/schema.js.map +1 -0
  283. package/dist/domain/script/v4/patch/types.d.ts +10 -0
  284. package/dist/domain/script/v4/patch/types.js +2 -0
  285. package/dist/domain/script/v4/patch/types.js.map +1 -0
  286. package/dist/domain/script/v4/selector.d.ts +11 -0
  287. package/dist/domain/script/v4/selector.js +124 -0
  288. package/dist/domain/script/v4/selector.js.map +1 -0
  289. package/dist/domain/script/v4/types.d.ts +120 -0
  290. package/dist/domain/script/v4/types.js +2 -0
  291. package/dist/domain/script/v4/types.js.map +1 -0
  292. package/dist/domain/script/v4/validation.d.ts +2 -0
  293. package/dist/domain/script/v4/validation.js +378 -0
  294. package/dist/domain/script/v4/validation.js.map +1 -0
  295. package/dist/infra/ingest/video-discovery.js +7 -4
  296. package/dist/infra/ingest/video-discovery.js.map +1 -1
  297. package/dist/infra/script-output-store.js +6 -11
  298. package/dist/infra/script-output-store.js.map +1 -1
  299. package/dist/infra/script-working-copy.js +15 -16
  300. package/dist/infra/script-working-copy.js.map +1 -1
  301. package/dist/llm/config.js +5 -4
  302. package/dist/llm/config.js.map +1 -1
  303. package/dist/llm/registry.d.ts +1 -0
  304. package/dist/llm/registry.js +3 -0
  305. package/dist/llm/registry.js.map +1 -1
  306. package/dist/llm/router.js +6 -8
  307. package/dist/llm/router.js.map +1 -1
  308. package/dist/llm/tasks/ingest/asset-audit.d.ts +6 -0
  309. package/dist/llm/tasks/ingest/asset-audit.js +164 -0
  310. package/dist/llm/tasks/ingest/asset-audit.js.map +1 -0
  311. package/dist/llm/tasks/ingest/asset-curate.d.ts +1 -1
  312. package/dist/llm/tasks/ingest/text-normalize.js +3 -3
  313. package/dist/llm/tasks/ingest/text-normalize.js.map +1 -1
  314. package/dist/llm/tasks/ingest/video-serial.js +3 -3
  315. package/dist/llm/tasks/ingest/video-serial.js.map +1 -1
  316. package/dist/llm/types.d.ts +1 -1
  317. package/dist/llm/types.js.map +1 -1
  318. package/dist/output.d.ts +2 -3
  319. package/dist/output.js +72 -109
  320. package/dist/output.js.map +1 -1
  321. package/dist/usecases/changelog.d.ts +2 -2
  322. package/dist/usecases/changelog.js +28 -36
  323. package/dist/usecases/changelog.js.map +1 -1
  324. package/dist/usecases/doctor.d.ts +2 -2
  325. package/dist/usecases/doctor.js +3 -5
  326. package/dist/usecases/doctor.js.map +1 -1
  327. package/dist/usecases/ingest/command.d.ts +2 -2
  328. package/dist/usecases/ingest/command.js +23 -6
  329. package/dist/usecases/ingest/command.js.map +1 -1
  330. package/dist/usecases/ingest/final-asset-audit.d.ts +39 -0
  331. package/dist/usecases/ingest/final-asset-audit.js +88 -0
  332. package/dist/usecases/ingest/final-asset-audit.js.map +1 -0
  333. package/dist/usecases/ingest/pass5-extract.js +5 -4
  334. package/dist/usecases/ingest/pass5-extract.js.map +1 -1
  335. package/dist/usecases/ingest/pass5-govern.js +13 -11
  336. package/dist/usecases/ingest/pass5-govern.js.map +1 -1
  337. package/dist/usecases/ingest/pipeline.js +77 -23
  338. package/dist/usecases/ingest/pipeline.js.map +1 -1
  339. package/dist/usecases/ingest/serial-govern.d.ts +2 -1
  340. package/dist/usecases/ingest/serial-govern.js +16 -8
  341. package/dist/usecases/ingest/serial-govern.js.map +1 -1
  342. package/dist/usecases/ingest/status.d.ts +2 -2
  343. package/dist/usecases/ingest/status.js +1 -1
  344. package/dist/usecases/ingest/status.js.map +1 -1
  345. package/dist/usecases/ingest/video-pipeline.js +121 -29
  346. package/dist/usecases/ingest/video-pipeline.js.map +1 -1
  347. package/dist/usecases/ingest/view-command.d.ts +2 -2
  348. package/dist/usecases/ingest/view-command.js +7 -6
  349. package/dist/usecases/ingest/view-command.js.map +1 -1
  350. package/dist/usecases/ingest/view-server.d.ts +2 -2
  351. package/dist/usecases/ingest/view-server.js +9 -7
  352. package/dist/usecases/ingest/view-server.js.map +1 -1
  353. package/dist/usecases/script/actions.d.ts +2 -2
  354. package/dist/usecases/script/actions.js +106 -11
  355. package/dist/usecases/script/actions.js.map +1 -1
  356. package/dist/usecases/script/actor.d.ts +2 -2
  357. package/dist/usecases/script/actor.js +3 -4
  358. package/dist/usecases/script/actor.js.map +1 -1
  359. package/dist/usecases/script/actors.d.ts +2 -2
  360. package/dist/usecases/script/actors.js +18 -9
  361. package/dist/usecases/script/actors.js.map +1 -1
  362. package/dist/usecases/script/add-actor.d.ts +2 -2
  363. package/dist/usecases/script/add-episode.d.ts +2 -2
  364. package/dist/usecases/script/add-location.d.ts +2 -2
  365. package/dist/usecases/script/add-prop.d.ts +2 -2
  366. package/dist/usecases/script/alias.d.ts +2 -2
  367. package/dist/usecases/script/alias.js +13 -14
  368. package/dist/usecases/script/alias.js.map +1 -1
  369. package/dist/usecases/script/assets.d.ts +2 -2
  370. package/dist/usecases/script/assets.js +29 -5
  371. package/dist/usecases/script/assets.js.map +1 -1
  372. package/dist/usecases/script/audit-assets.d.ts +4 -0
  373. package/dist/usecases/script/audit-assets.js +37 -0
  374. package/dist/usecases/script/audit-assets.js.map +1 -0
  375. package/dist/usecases/script/command-constraints.d.ts +36 -0
  376. package/dist/usecases/script/command-constraints.js +114 -0
  377. package/dist/usecases/script/command-constraints.js.map +1 -0
  378. package/dist/usecases/script/context.d.ts +2 -2
  379. package/dist/usecases/script/context.js +34 -8
  380. package/dist/usecases/script/context.js.map +1 -1
  381. package/dist/usecases/script/create.d.ts +2 -2
  382. package/dist/usecases/script/create.js +5 -6
  383. package/dist/usecases/script/create.js.map +1 -1
  384. package/dist/usecases/script/delete.d.ts +2 -2
  385. package/dist/usecases/script/delete.js +15 -15
  386. package/dist/usecases/script/delete.js.map +1 -1
  387. package/dist/usecases/script/describe.d.ts +2 -2
  388. package/dist/usecases/script/describe.js +13 -12
  389. package/dist/usecases/script/describe.js.map +1 -1
  390. package/dist/usecases/script/dialogue.d.ts +2 -2
  391. package/dist/usecases/script/dialogue.js +18 -9
  392. package/dist/usecases/script/dialogue.js.map +1 -1
  393. package/dist/usecases/script/dispatch.d.ts +3 -0
  394. package/dist/usecases/script/dispatch.js +10 -0
  395. package/dist/usecases/script/dispatch.js.map +1 -0
  396. package/dist/usecases/script/do.d.ts +2 -2
  397. package/dist/usecases/script/do.js +105 -45
  398. package/dist/usecases/script/do.js.map +1 -1
  399. package/dist/usecases/script/emotion.d.ts +2 -2
  400. package/dist/usecases/script/emotion.js +14 -3
  401. package/dist/usecases/script/emotion.js.map +1 -1
  402. package/dist/usecases/script/episodes.d.ts +2 -2
  403. package/dist/usecases/script/episodes.js +19 -8
  404. package/dist/usecases/script/episodes.js.map +1 -1
  405. package/dist/usecases/script/export-authoring.d.ts +2 -2
  406. package/dist/usecases/script/export-authoring.js +47 -26
  407. package/dist/usecases/script/export-authoring.js.map +1 -1
  408. package/dist/usecases/script/extend.d.ts +2 -2
  409. package/dist/usecases/script/extend.js +43 -31
  410. package/dist/usecases/script/extend.js.map +1 -1
  411. package/dist/usecases/script/ids.d.ts +2 -2
  412. package/dist/usecases/script/ids.js +68 -21
  413. package/dist/usecases/script/ids.js.map +1 -1
  414. package/dist/usecases/script/importance.d.ts +2 -2
  415. package/dist/usecases/script/importance.js +3 -4
  416. package/dist/usecases/script/importance.js.map +1 -1
  417. package/dist/usecases/script/insert.d.ts +2 -2
  418. package/dist/usecases/script/insert.js +80 -46
  419. package/dist/usecases/script/insert.js.map +1 -1
  420. package/dist/usecases/script/issues.d.ts +2 -2
  421. package/dist/usecases/script/issues.js +10 -2
  422. package/dist/usecases/script/issues.js.map +1 -1
  423. package/dist/usecases/script/lib.d.ts +62 -7
  424. package/dist/usecases/script/lib.js +782 -184
  425. package/dist/usecases/script/lib.js.map +1 -1
  426. package/dist/usecases/script/locations.d.ts +2 -2
  427. package/dist/usecases/script/locations.js +18 -9
  428. package/dist/usecases/script/locations.js.map +1 -1
  429. package/dist/usecases/script/merge.d.ts +2 -2
  430. package/dist/usecases/script/merge.js +17 -17
  431. package/dist/usecases/script/merge.js.map +1 -1
  432. package/dist/usecases/script/move.d.ts +2 -2
  433. package/dist/usecases/script/move.js +30 -13
  434. package/dist/usecases/script/move.js.map +1 -1
  435. package/dist/usecases/script/parenthetical.d.ts +3 -0
  436. package/dist/usecases/script/parenthetical.js +52 -0
  437. package/dist/usecases/script/parenthetical.js.map +1 -0
  438. package/dist/usecases/script/props.d.ts +2 -2
  439. package/dist/usecases/script/props.js +18 -9
  440. package/dist/usecases/script/props.js.map +1 -1
  441. package/dist/usecases/script/refs.d.ts +2 -2
  442. package/dist/usecases/script/refs.js +61 -11
  443. package/dist/usecases/script/refs.js.map +1 -1
  444. package/dist/usecases/script/rename.d.ts +2 -2
  445. package/dist/usecases/script/rename.js +13 -12
  446. package/dist/usecases/script/rename.js.map +1 -1
  447. package/dist/usecases/script/replace.d.ts +2 -2
  448. package/dist/usecases/script/replace.js +6 -8
  449. package/dist/usecases/script/replace.js.map +1 -1
  450. package/dist/usecases/script/role.d.ts +2 -2
  451. package/dist/usecases/script/role.js +3 -4
  452. package/dist/usecases/script/role.js.map +1 -1
  453. package/dist/usecases/script/scenes.d.ts +2 -2
  454. package/dist/usecases/script/scenes.js +35 -7
  455. package/dist/usecases/script/scenes.js.map +1 -1
  456. package/dist/usecases/script/script-patch.d.ts +2 -2
  457. package/dist/usecases/script/script-patch.js +219 -72
  458. package/dist/usecases/script/script-patch.js.map +1 -1
  459. package/dist/usecases/script/script-validate.d.ts +2 -2
  460. package/dist/usecases/script/script-validate.js +11 -7
  461. package/dist/usecases/script/script-validate.js.map +1 -1
  462. package/dist/usecases/script/session.d.ts +3 -0
  463. package/dist/usecases/script/session.js +74 -65
  464. package/dist/usecases/script/session.js.map +1 -1
  465. package/dist/usecases/script/split.d.ts +2 -2
  466. package/dist/usecases/script/split.js +18 -14
  467. package/dist/usecases/script/split.js.map +1 -1
  468. package/dist/usecases/script/state-add.d.ts +2 -2
  469. package/dist/usecases/script/state-add.js +3 -4
  470. package/dist/usecases/script/state-add.js.map +1 -1
  471. package/dist/usecases/script/state-delete.d.ts +2 -2
  472. package/dist/usecases/script/state-delete.js +3 -4
  473. package/dist/usecases/script/state-delete.js.map +1 -1
  474. package/dist/usecases/script/state-rename.d.ts +2 -2
  475. package/dist/usecases/script/state-rename.js +3 -4
  476. package/dist/usecases/script/state-rename.js.map +1 -1
  477. package/dist/usecases/script/states.d.ts +2 -2
  478. package/dist/usecases/script/states.js +91 -20
  479. package/dist/usecases/script/states.js.map +1 -1
  480. package/dist/usecases/script/summary.d.ts +2 -2
  481. package/dist/usecases/script/summary.js +21 -2
  482. package/dist/usecases/script/summary.js.map +1 -1
  483. package/dist/usecases/script/synopsis-generate.d.ts +2 -2
  484. package/dist/usecases/script/synopsis-generate.js +38 -39
  485. package/dist/usecases/script/synopsis-generate.js.map +1 -1
  486. package/dist/usecases/script/synopsis.d.ts +2 -2
  487. package/dist/usecases/script/synopsis.js +20 -16
  488. package/dist/usecases/script/synopsis.js.map +1 -1
  489. package/dist/usecases/script/transition.d.ts +2 -2
  490. package/dist/usecases/script/transition.js +3 -4
  491. package/dist/usecases/script/transition.js.map +1 -1
  492. package/dist/usecases/script/type.d.ts +2 -2
  493. package/dist/usecases/script/type.js +3 -4
  494. package/dist/usecases/script/type.js.map +1 -1
  495. package/dist/usecases/script/v3/mutations.d.ts +2 -0
  496. package/dist/usecases/script/v3/mutations.js +5 -0
  497. package/dist/usecases/script/v3/mutations.js.map +1 -0
  498. package/dist/usecases/script/v4/mutations.d.ts +2 -0
  499. package/dist/usecases/script/v4/mutations.js +6 -0
  500. package/dist/usecases/script/v4/mutations.js.map +1 -0
  501. package/dist/usecases/script/v4/queries.d.ts +15 -0
  502. package/dist/usecases/script/v4/queries.js +191 -0
  503. package/dist/usecases/script/v4/queries.js.map +1 -0
  504. package/dist/usecases/script/working-copy.d.ts +4 -4
  505. package/dist/usecases/script/working-copy.js +98 -94
  506. package/dist/usecases/script/working-copy.js.map +1 -1
  507. package/dist/usecases/script/worldview.d.ts +2 -2
  508. package/dist/usecases/script/worldview.js +3 -4
  509. package/dist/usecases/script/worldview.js.map +1 -1
  510. package/dist/usecases/script/write-authoring.d.ts +2 -2
  511. package/dist/usecases/script/write-authoring.js +125 -50
  512. package/dist/usecases/script/write-authoring.js.map +1 -1
  513. package/dist/usecases/update.d.ts +2 -2
  514. package/dist/usecases/update.js +32 -47
  515. package/dist/usecases/update.js.map +1 -1
  516. package/package.json +3 -2
  517. package/skills/scriptctl/SKILL.md +128 -282
  518. package/skills/scriptctl/references/atomic-edit-workflow.md +23 -38
  519. package/skills/scriptctl/references/bulk-authoring.md +35 -154
  520. package/skills/scriptctl/references/ingest-workflow.md +12 -11
  521. package/skills/scriptctl/references/production-writing-standard.md +38 -67
  522. package/skills/scriptctl/references/state-reference-repair.md +19 -42
  523. package/dist/help-text.d.ts +0 -2
  524. package/dist/help-text.js +0 -1112
  525. package/dist/help-text.js.map +0 -1
@@ -1,169 +1,50 @@
1
1
  # 文件化批量写作
2
2
 
3
- 这套接口给 LLM 直接生成和修改,不要求人编辑 JSON。authoring 文件使用 XML 风格块表达结构边界,块内使用 `[type|slot...] content` 行表达高密度字段。
3
+ 完整剧本、集、场和连续 Action 区间使用 `.scriptctl` authoring 文件。
4
4
 
5
- ## 固定工作流
5
+ ## 固定流程
6
6
 
7
- 1. 既有远端剧本先 `checkout` 到 `--script-path`。
8
- 2. 修改本地既有剧本时,新 ID 用 `ids --kind ... --count ...` 查询候选值;它不预留 ID。全新剧本没有可供 `ids` 读取的本地文件,直接从各 kind 的 `_001` 开始分配 canonical ID。
9
- 3. 修改既有内容先用 typed `export` 导出完整目标;从零写时直接生成完整 `.scriptctl` 文件。
10
- 4. `write FILE --create|--replace` 只做计划。
11
- 5. 从计划读取完整 `plan_digest`。
12
- 6. `write FILE --create|--replace --apply --plan DIGEST` 原子落盘。
13
- 7. `validate` 后按需 `publish`。
7
+ 1. 既有目标先 `export`;新节点 ID 用 `ids` 生成候选。
8
+ 2. 修改导出文件或生成完整 create 文件。
9
+ 3. `write FILE --create|--replace` 生成计划。
10
+ 4. 审阅所有目标、目标内变化、全局保留/新增/删除 ID、未触及 sibling、声明、
11
+ 保留的孤立资产和 validation。
12
+ 5. 使用相同文件与 mode 执行
13
+ `write FILE --create|--replace --apply --plan <digest>`。
14
14
 
15
- `write` 只接受命名文件,不读 stdin。digest 绑定源文件的精确字节、mode、解析后的正式目标和当前本地 Script v3 语义哈希。每次 plan/apply 均持有按 script 文件划分的独占锁;apply 在锁内重新校验基线。
15
+ 确认码绑定精确源文件、mode、解析目标和当前本地基线,不保存为计划文件。
16
16
 
17
- canonical export 原样写回属于 no-op,即使目标中已有校验错误也可以生成计划;计划会继续报告这些既有错误。稿件实际改变目标时,目标内既有错误和新错误仍会阻断写入。
17
+ ## 方言
18
18
 
19
- ## 根结构
19
+ - 无基线 `--create` 使用 Script v4。
20
+ - 已有文件按显式 `script.version` 选择 V3 或 V4 parser、serializer、validator 和 apply。
21
+ - V4 target、replacement 节点和 Action 都携带正式 ID。
22
+ - V4 scene 中同一资产只声明一次,状态写成完整集合。
23
+ - V4 speaking Action 使用
24
+ `[dlg|action-id|speaker|parenthetical?]` 或
25
+ `[think|action-id|speaker|parenthetical?]`。
20
26
 
21
- ```text
22
- <authoring version=1>
27
+ ## Target
23
28
 
24
- <create>
25
- ...create-only asset/state declarations...
26
- </create>
29
+ 一个文件包含一个或多个同类 target:
27
30
 
28
- ...one or more homogeneous targets...
31
+ - `script`
32
+ - `episode`
33
+ - `episode-span`
34
+ - `scene`
35
+ - `scene-span`
36
+ - `action-span`
29
37
 
30
- </authoring>
31
- ```
38
+ 区间包含两端,端点正反等价,并按写入前的当前文档顺序解析。replace 批次必须按
39
+ 当前文档顺序排列且互不重叠。span replacement 至少包含一个对应节点;纯删除使用
40
+ 显式 delete 原子操作。
32
41
 
33
- `<create>` 可省略,但存在时只能有一个且必须在 targets 前。一个文件只能包含一种 target:
42
+ ## 声明
34
43
 
35
- ```text
36
- <script>...</script>
37
- <episode id=ep_007>...</episode>
38
- <episode-span from=ep_002 through=ep_004>...</episode-span>
39
- <scene id=scn_021 parent=ep_007>...</scene>
40
- <scene-span parent=ep_007 from=scn_010 through=scn_012>...</scene-span>
41
- <action-span parent=ep_007/scn_021 from=12 through=18>...</action-span>
42
- ```
44
+ `<create>` 放在 targets 前,声明本批次新增的 actor、location、prop 与 state。
45
+ 资产先声明,state 紧随 owner 或在 owner 已存在时作为 standalone state 声明。
46
+ 所有引用必须在最终提案中可解析。
43
47
 
44
- 属性不加引号。script 只能有一个且 create-only。episode/scene 支持 create 或 replace。三种 span 都是 replace-only,端点包含两端,replacement 必须非空。
48
+ ## 核验
45
49
 
46
- ## create-only 声明
47
-
48
- 声明按 actor、location、prop 分组;每个新资产后立刻写它的 states,第一条且唯一常态 state 必须是 `default`。引用既有资产的 standalone state 放在所有资产声明之后。state ID 在所属资产内唯一,完整身份是 typed owner 与 state ID,例如 `actor:act_001/st_001`。
49
-
50
- ```text
51
- <create>
52
- [aliases]
53
- [alias] 门卫
54
- [actor|act_010|王建国|featured|配角] 五十岁男性。
55
- [state|actor:act_010|default|常态] 深蓝色保安制服。
56
- [state|actor:act_010|st_010|雨衣] 黄色雨衣。
57
- [location|loc_003|旧教室|featured] 墙皮脱落。
58
- [state|location:loc_003|default|常态] 夜间无人使用。
59
- [prop|prp_004|工作证|featured] 蓝色塑封证件。
60
- [state|prop:prp_004|default|常态] 挂在胸前。
61
- </create>
62
- ```
63
-
64
- 重复提交完全相同的既有声明是 no-op;同 ID 不同定义是冲突。importance 只有 `featured|background`,actor role 只有 `主角|配角`。
65
- `[aliases]` 表示正式 aliases 数组存在;后续零到多条 `[alias]` 保留顺序,因此空数组也能无损导出。
66
-
67
- ## script 与 episode
68
-
69
- script metadata 固定顺序:
70
-
71
- ```text
72
- <script>
73
- [title] 剧名
74
- [worldview] 现代
75
- [worldview-raw] 可选原始世界观
76
- [style] 悬疑
77
- [synopsis] 可选全剧梗概
78
- [logline] 可选一句话梗概
79
- [theme] 可选主题
80
- [main-characters]
81
- [main-character|林夏|主角]
82
-
83
- <episode id=ep_001>
84
- [title] 第一集
85
- [synopsis] 可选分集梗概
86
- ...scenes...
87
- </episode>
88
- </script>
89
- ```
90
-
91
- 可选字段省略表示字段不存在;写成空 content 表示字段存在且值为空。
92
- `[main-characters]` 表示正式数组存在,后续零到多条 main-character,因此空数组也能无损往返。
93
-
94
- ## scene
95
-
96
- scene 成员固定为 environment、location、零到多条 cast、零到多条 prop、body。scene 的 body 可以为空,episode 也可以不含 scene,用于表达待填充骨架;`write` 会在计划中报告 warning。replace 把原本非空的 scene 或 episode 清空时会报告更明确的 cleared warning。每个非空 scene 引用都绑定具体 state。actor 引用允许重复并保留顺序;同一个 prop 不重复。
97
-
98
- ```text
99
- <scene id=scn_021 parent=ep_007>
100
- [environment|interior|night]
101
- [location|loc_003|default]
102
- [cast|act_001|st_before]
103
- [cast|act_001|st_after]
104
- [cast|act_010|default]
105
- [prop|prp_004|default]
106
-
107
- <body>
108
- [act|紧张] 林夏拉开衣柜。
109
- [dlg|act_001/st_after|压低声音] 谁在那里?
110
- [think|act_001/st_after|不安] 不能让他发现。
111
- [dlg|broadcast:] 不要回头。
112
- [trans] 画面切黑。
113
- </body>
114
- </scene>
115
- ```
116
-
117
- 嵌在 episode/scene-span 内的 scene 不写 parent;根 scene 必须写 parent。`location` 无槽位表示 `null`。非人物 speaker 是 `system|broadcast|offscreen|group`,可写 `kind:label`。普通写作不需要 `transition_prompt` 或 timestamp。
118
-
119
- 单条正文记录的 content 可以为空,但计划会报告 `authoring_empty_action_content` warning。`action-span` 的 replacement 仍必须至少包含一条 action;空 replacement 会被拒绝,纯删除使用显式 mutation。
120
-
121
- ## prefix modifiers 与 extensions
122
-
123
- modifier 必须紧贴其节点,顺序是零到多条 extend、零到多条 alias、最多一条 prompt:
124
-
125
- ```text
126
- [extensions]
127
- [extend|camera] {"lens":35,"locked":true}
128
- [prompt|actor:act_001|换装|由校服变为礼服]
129
- [act] 林夏拉开衣柜。
130
- ```
131
-
132
- `[extensions]` 表示正式 extend 对象存在,后续零到多条 extend,因此缺失与空对象可无损区分。`extend` 的 content 是单个 JSON value,key 唯一;仅 extensions 使用 JSON。canonical serializer 按 key 排序。`prompt` 的 target/process/contrast 都必填,仅在确实存在显式过渡提示时使用。
133
-
134
- ## span
135
-
136
- ```text
137
- <episode-span from=ep_002 through=ep_004>
138
- ...one or more complete episodes...
139
- </episode-span>
140
-
141
- <scene-span parent=ep_003 from=scn_010 through=scn_012>
142
- ...one or more complete scenes...
143
- </scene-span>
144
-
145
- <action-span parent=ep_003/scn_010 from=12 through=18>
146
- <body>
147
- ...one or more actions...
148
- </body>
149
- </action-span>
150
- ```
151
-
152
- episode/scene 端点按写入前本地脚本的真实数组位置解析,不比较 ID 数字。action index 零基且包含两端。一个文件中的多个 span 不得重叠,全部相对同一个写入前基线解析;replacement 数量可以与旧区间不同。action-span 只改 body,不改 scene refs。
153
-
154
- ## export
155
-
156
- ```bash
157
- scriptctl export script --output story.scriptctl
158
- scriptctl export episodes --in "ep_002..ep_004,ep_010" --output episodes.scriptctl
159
- scriptctl export episode-spans --in "ep_002..ep_004" --output episode-span.scriptctl
160
- scriptctl export scenes --in "ep_003/scn_010..ep_003/scn_012" --output scenes.scriptctl
161
- scriptctl export scene-spans --in "ep_003/scn_010..ep_003/scn_012" --output scene-span.scriptctl
162
- scriptctl export action-spans --in "ep_003/scn_010#12..ep_003/scn_010#18" --output actions.scriptctl
163
- ```
164
-
165
- 逗号分隔多个 point/range region。episodes/scenes 把区间展开成独立 targets;三种 span 命令的每个 region 产生一个 span target。跨 parent 的 scene/action span 直接拒绝。
166
-
167
- ## 转义
168
-
169
- tag 属性只接受 canonical ID/address 字符,不需要转义。record header 中可用 `\|`、`\]`、`\\`、`\n`;content 中只用 `\\`、`\n`。不支持注释或自由散文行。
50
+ apply 后用对应 `episodes`、`scenes`、`actions` 和 `refs` 读回,再运行 `validate`。
@@ -1,6 +1,6 @@
1
1
  # ingest workflow — 素材直转入库(文本 / 视频)
2
2
 
3
- 适用:有外部素材要**转成 v3 剧本并入库**。统一入口 `scriptctl ingest`,看 source 后缀**自动分流**文本 / 视频;两条管线在同一个 govern 收尾汇合,产出相同结构的 v3 `script.json`。视频、小说和非标准剧本统一执行 [production-writing-standard.md](production-writing-standard.md)。
3
+ 适用:有外部素材要**转成 Script v4 并入库**。统一入口 `scriptctl ingest`,按 source 类型自动分流文本 / 视频;两条管线最终都产出 v4 `script.json`。视频、小说和非标准剧本统一执行 [production-writing-standard.md](production-writing-standard.md)。
4
4
 
5
5
  ```
6
6
  ingest --source-path <file|dir> → 标准化复核 → view / ingest status → publish
@@ -22,18 +22,17 @@ scriptctl ingest --source-path uploads/正片/
22
22
 
23
23
  常用 flag:
24
24
  - `--workspace-path <dir>`:工作区根(manifest + 各 pass 目录 + 产物)。**不传默认 `<cwd>/workspace`**;显式传可放别处。`view` / `ingest status` 使用同一 workspace;publish 用 `--script-path <workspace>/script.json`。
25
- - `--concurrency <n>`:文本/归并 fanout 并发(文本默认 80,视频默认 30)。
26
- - `--video-concurrency <n>`:视频上传+转录并发。默认 10。
25
+ - `--concurrency <n>`:文本 fanout 并发,默认 30。视频逐集串行。
27
26
  - `--fps <n>`:视频采样帧率(>1 解锁亚秒级时间码)。默认 3。
28
27
  - `--force`:**同源**重跑,清掉产物重来(**不能换源**)。
29
28
 
30
29
  管线(了解即可,产物都在 `workspace/`):
31
- - **文本**:正文起点定位 → 切块 → 生产化归一(对白逐字保留;叙述转成具象 Action;按地点、时段、叙事线和持久状态变化分场)→ 合并组装 `body.json` → 串行资产/身份/state 治理 → 确定性编号v3 结构校验 + 生产规范 warning → `script.json`。逐块与串行窗口都有 checkpoint。
32
- - **视频**:逐集串行观看原视频,同时维护跨集人物花名册、剧情进展和造型;每集直接输出逐镜头 scenes + 资产增量确定性人物归一、群体发声归一、编号和 state 物化v3 结构校验 + 生产规范 warning → `script.json`。时间戳写入 `extend.timestamp`,逐集 `ep/*.json` 和 `context.json` 支持断点续跑。
30
+ - **文本**:正文起点定位 → 切块 → 生产化归一 合并组装 `body.json` → 串行资产/身份/state 治理 → V3 中间校验 稳定 V4 身份分配 V4 校验与生产规范 warning → `script.json`。
31
+ - **视频**:逐集串行观看原视频并维护跨集人物、剧情和造型上下文 确定性治理 V3 中间校验 稳定 V4 身份分配V4 校验与生产规范 warning → `script.json`。时间戳写入 `extend.timestamp`,逐集 `ep/*.json`、`context.json` 和身份映射支持断点续跑。
33
32
 
34
33
  ### 提取与解析原则
35
34
 
36
- - 先忠实提取源素材可验证的对白、动作、顺序、人物状态和场景切换,再整理成标准 v3 资产与正文。
35
+ - 先忠实提取源素材可验证的对白、动作、顺序、人物状态和场景切换,再整理成标准资产与正文。
37
36
  - 视频以画面和声音为准;小说与非标准剧本把叙述转换成可拍摄 Action,同时保留原文事实、因果和人物关系。
38
37
  - 保留对白原文;允许为结构化和可拍摄性规范化叙述措辞,同时保持事实、因果、顺序、动作结果和状态不变。
39
38
  - 将无法确认的人物身份、动作主体、地点和状态保留为待复核项,不补写源素材没有表达的事实。
@@ -47,7 +46,8 @@ scriptctl ingest --source-path uploads/正片/
47
46
  2. 用 `scenes --in <ep>` 检查唯一地点、场界、蒙太奇顺序和状态变化边界。
48
47
  3. 用 `actions --in <ep>` 检查说话人、群体发声、人物真名、动作链和可拍摄性。
49
48
  4. 视频对照画面与声音;文本对照原文,确认对白逐字保真,事实、因果、顺序、动作结果和状态没有改变或补造。
50
- 5. scriptctl 读写动词修正 `workspace/script.json`,再次运行 `validate`,完成内容复核后再 publish。
49
+ 5. 运行 `audit-assets --script-path workspace/script.json`,查看 `asset-audit.json` 中的人物身份重复、同义状态、未使用/落单状态、重复地点和道具建议。不要仅凭名称相似或低频就合并、删除。
50
+ 6. 用 scriptctl 读写动词修正 `workspace/script.json`,再次运行 `validate` 和 `audit-assets`,完成内容复核后再 publish。
51
51
 
52
52
  ## 三、看进度 / 自查
53
53
 
@@ -56,10 +56,11 @@ scriptctl ingest status # 人读:kind / state / 各 pass 进度(tra
56
56
  scriptctl ingest status --json # 机器:.status = {kind,state,phase,passes[],units,validation,errors[]}
57
57
  scriptctl view # 生成 workspace/review.html(视频版可点击定位到画面)
58
58
  scriptctl view --watch [--port N]# 实时监听面板:分阶段进度条 + 逐集 context/决策 + 产物树,自动刷新(跑中也能开)。🔴 仅本地用,**沙箱内不要用**(起阻塞服务+开浏览器,会挂住;沙箱看进度用 `ingest status`)
59
+ scriptctl audit-assets --script-path workspace/script.json # 全剧资产一致性复核;结果写 asset-audit.json
59
60
  scriptctl summary --script-path workspace/script.json # 抽完当普通剧本读
60
61
  ```
61
62
 
62
- `state`:`empty`(没开始)/ `incomplete`(在跑或中断、无硬错,重跑续)/ `failed`(有失败单元或校验没过)/ `ready`(`script.json` 生成且 v3 结构校验通过)。`validation.json` 的 production warning 标出仍需复核的内容规范问题。进度从工作区真实文件推导;它报的是管线事实,源素材一致性仍由复核完成门确认。
63
+ `state`:`empty`(没开始)/ `incomplete`(在跑或中断、无硬错,重跑续)/ `failed`(有失败单元或校验没过)/ `ready`(`script.json` 生成且 v4 结构校验通过)。`validation.json` 的 production/asset-audit warning 标出仍需复核的问题,`asset-audit.json` 保存完整证据和建议。进度从工作区真实文件推导;它报的是管线事实,资产合并结论和源素材一致性仍由复核完成门确认。
63
64
 
64
65
  ## 四、🔴 抖动与重跑(大规模转剧本的常态)
65
66
 
@@ -71,7 +72,7 @@ scriptctl summary --script-path workspace/script.json # 抽完当普通剧本
71
72
  | `INGEST_SERIAL_FAILED`(文本串行 govern) | 某集串行解析连试几次仍失败(模型抖动) | **直接重跑**,从该集续——前面各集已缓存不重跑 |
72
73
  | `INGEST_PIPELINE_MISMATCH` | 工作区的管线版本与当前版本不同 | 确认 source 未变化后,使用同一 source、同一 workspace 加 `--force` 完整重建 checkpoint |
73
74
  | `INGEST_SOURCE_MISMATCH` | 工作区是别的 source 建的 | 换一个新的 `--workspace-path`,**别 `--force` 硬覆盖** |
74
- | `INGEST_VALIDATION_FAILED` | 最终 v3 校验没过 | 看 `workspace/validation.json` 的具体报错,用读写动词修 `--script-path workspace/script.json` 再 `publish` |
75
+ | `INGEST_VALIDATION_FAILED` | 最终校验没过 | 看 `workspace/validation.json` 的具体报错,修复后再 `publish` |
75
76
  | 持续 401/403/404 / 模型路由错 | 网关/密钥/模型环境问题(不是抖动,重跑也不好) | 如实告诉用户,别反复空跑、别编造成功。视频需 `GEMINI_API_KEY` |
76
77
 
77
78
  🔴 **绝不**:清工作区、删 checkpoint、手塞/手改中间文件来"绕过"失败。重跑 = 唯一正解;成功单元不会重跑,贵的花名册归并(`roster.json`)也会复用。
@@ -83,7 +84,7 @@ scriptctl publish --script-path workspace/script.json
83
84
  scriptctl publish --script-path workspace/script.json --project-group-no 123
84
85
  ```
85
86
 
86
- - `publish` 读本地 `--script-path`(默认 `workspace/script.json`),**再跑一遍 v3 校验**,通过才发布。
87
+ - `publish` 读本地 `--script-path`(默认 `workspace/script.json`),按显式版本再次校验,通过才发布。
87
88
  - 沙箱里转完**必须 publish**,否则后端/前端看不到剧本。
88
89
  - 已管理工作副本 publish 采用 local-wins:CAS/网络失败后重拉 snapshot、重算 diff 并重试,最终远端内容以本地稿为准。
89
90
  - 已管理且内容未变时 publish 本地直接 no-op,不发网络请求。服务端不保存 requestId,也不提供 publish 幂等重试。
@@ -98,7 +99,7 @@ scriptctl publish --script-path workspace/script.json --project-group-no 123
98
99
 
99
100
  ## 七、抽完后的读写
100
101
 
101
- 抽取产物就是标准 v3 剧本,用 SKILL.md 里所有读写能力精修(目标指 `--script-path workspace/script.json`;远端稿先 checkout):
102
+ 抽取产物就是标准 v4 剧本,用 SKILL.md 里所有读写能力精修(目标指 `--script-path workspace/script.json`;远端稿先 checkout):
102
103
  - `summary` / `episodes` 看整本 + 分集梗概;`actions --in <ep>` 带 timestamp 看节奏。
103
104
  - `states <actor>` 看造型弧线;`actors --counts` 看出场频次决定 `importance`。
104
105
  - 归属/造型修正:`dialogue <at> --actor/--kind`、`scene-ref <ep/scn> <kind:id> --state`。
@@ -1,83 +1,54 @@
1
1
  # 标准剧本生产写作规范
2
2
 
3
- 适用:从零创作、视频提取、小说或非标准剧本解析、洗稿、对标仿写、转绘。目标是生成可供后期生产直接读取的 Schema v3 `script.json`。
3
+ 适用于从零创作、素材提取、小说解析、对标仿写和转绘。
4
4
 
5
- ## 一、输入原则
5
+ ## 资产与场
6
6
 
7
- - 从零创作时,根据题材、集纲、人物关系和世界观补全可执行正文。
8
- - 视频提取时,以画面和声音为准,保留可验证的对白、动作、人物状态、场景切换和时间顺序。
9
- - 小说与非标准剧本解析时,把叙述转换成结构化人物、地点、道具、scene 和 action,保留原文事实与因果关系。
10
- - 提取与解析保留对白原文;允许为结构化和可拍摄性规范化叙述措辞,同时保持事实、因果、顺序、动作结果和状态不变。
11
- - 洗稿、对标和转绘时,从原剧读取结构与节奏,只把新内容写入目标剧本。
12
- - 提取与解析遇到不确定信息时保留待复核标记;不为满足格式补写源素材没有表达的动作、身份、状态或镜头。
7
+ 1. 正文出现的可识别人物、地点和关键道具先注册为资产。
8
+ 2. 每个资产有且仅有一个 `default` state;需要独立视觉参考的持久变体再建 state。
9
+ 3. 每个 scene 绑定实际地点、全部在场人物、关键道具及本场适用状态。
10
+ 4. V4 同一资产在一场只引用一次,`state_ids` 可以包含多个状态且没有先后顺序。
11
+ 5. actor speaker 必须属于当前 scene;显式 speaker state 必须在该 actor 的场景状态集合中。
13
12
 
14
- ## 二、每集与每场的开写清单
13
+ ## Action 与对白
15
14
 
16
- 开始每一集和每一场前:
15
+ - Action 写可见、可拍摄的行为链:明确行动者、动作、对象、空间关系和结果。
16
+ - 动作描述使用唯一 `actor_name`,避免依赖上下文猜测“他、她、另一个人”等指代。
17
+ - dialogue / inner_thought 绑定 actor 或 `system|broadcast|offscreen|group` 非人物发声源。
18
+ - V4 的短表演提示写 `parenthetical`;字段可省略,也可显式保存空字符串。
19
+ - 影响走位、道具、状态或连续性的动作写成独立 Action。
20
+ - 同时说话用相邻 dialogue 表达;结构不声明对白重叠时间轴。
17
21
 
18
- 1. 读取现有人物、地点、道具及其 states。
19
- 2. 确定本场唯一地点、全部出场人物、全部使用道具和各自实际 state;同一人物需要多份画面引用时列出每一份引用。
20
- 3. 注册缺少的资产,定义需要独立视觉参考的持久状态。
21
- 4. 建立 scene,绑定地点、人物、道具及实际 state。
22
- 5. 读回 scene-ref,确认正文中的每项资产都能映射到本场引用。
23
- 6. 写入正文;发现新增资产或状态时,先完成资产与引用再继续。
22
+ ## 场界
24
23
 
25
- ## 三、人物、路人与群体
24
+ 同一地点、连续时段和连续叙事线保持同一 scene。地点切换、明显跳时或切换叙事线
25
+ 时新建 scene。情绪升级、攻防回合、人物进出和同场状态变化本身不构成分场。
26
26
 
27
- - 为承担独立对白、动作、道具交接或剧情结果的个体建立 actor;一次性小角色使用 `importance background`。
28
- - 将固定人数、固定服装、固定站位或跨场连续出现的群体拆成可识别人物资产。
29
- - 将无法区分成员、无需连续造型的环境人群写成群体 Action。
30
- - 将群体共同发声写成 `--kind group --label <群体名>`。`group` 只属于该条 dialogue,不创建 actor、state 或视觉参考资产。
31
- - 当某个群体成员开始独立说话或行动时,先为该成员建立 actor 并绑定到 scene。
32
- - 仅有 group 发声、没有可识别 actor 的场面直接使用 group speaker;scene 绑定实际 location 与关键道具,不创建虚假人物。
27
+ ## 提取与改写
33
28
 
34
- ## 四、地点、门口与关联空间
29
+ - 提取保留可验证的对白、动作、因果、顺序和状态,不补写素材没有表达的事实。
30
+ - 对标或转绘只从原剧读取结构与节奏,只向目标 `script.json` 写新内容。
31
+ - 每批落盘后读回目标并运行 `validate`;随后继续做内容、连续性和可拍摄性复核。
35
32
 
36
- - 将可独立布置、可独立生成参考图、可重复引用的稳定物理空间建立为 location。客厅、卧室、卫生间、大厅、广场分别建地点。
37
- - 使用“豪宅·客厅”“豪宅·卧室”“剧院·舞台”“剧院·后台”这类统一命名表达空间归属,并在 description 中写明共享建筑风格和连接关系。
38
- - 摄影机留在当前空间时,scene 继续引用当前地点;门内可见空间写入 Action。
39
- - 摄影机或主要表演进入另一空间时建立新 scene,并引用新地点。
40
- - 舞台与后台交叉剪辑按每次切换建立相邻 scene;连续跟拍跨过空间边界时在边界处切换 scene。
41
- - 当前每个 scene 只支持一个 location。画面需要同时使用两个正式地点参考图时,报告结构限制;“客厅/卧室”只会形成一个复合地点资产,不能代替两个地点引用。
42
- - 当前没有地点组、父地点或共享美术继承。统一命名和 description 是现阶段的归属约定。
33
+ ## 地点、关联空间与蒙太奇
43
34
 
44
- ## 五、地点时间与地点状态
35
+ - 将可独立布置、生成参考图和重复引用的稳定物理空间建立为 location;相关空间用“豪宅·客厅”“豪宅·卧室”等统一命名表达归属。
36
+ - 每个 scene 只绑定一个 location。摄影机或主要表演进入另一空间时新建 scene;一次性时间或光线写入 environment/Action,持久且可复用的视觉变化建立 location state。
37
+ - 跨地点蒙太奇按剪辑顺序建立多个短 scene,并用 transition 表达开始、切换和结束。
38
+ - 纯空镜 scene 绑定实际 location 与关键道具,不创建虚假人物。
45
39
 
46
- - 使用 scene 的 `environment.time` 表达白天、夜晚、黄昏等时间信息。
47
- - 当光线、布景、损毁或季节变化需要反复引用或独立生成视觉资产时,为 location 建立 state,例如“广场·夕阳”“大厅·停电”。
48
- - 将一次性的时间描述保留在 environment 或 Action 中;将持久、可复用的视觉变化建立为 state。
40
+ ## 版本化状态引用
49
41
 
50
- ## 六、Action dialogue
42
+ - V4 同一资产在一个 scene 只引用一次,以完整、非空、无序的 `state_ids` 集合表达本场可能使用的状态;状态的具体对白落点由下游判断。
43
+ - V3 保持单状态引用结构;若同一 actor 有重复引用,使用 `occurrence` 精确定位。
44
+ - 同一连续场内的状态变化不必分场;在场景状态集合中声明所需状态,并在 Action 中写清可见变化。
51
45
 
52
- - 将 Action 写成可拍摄的行为链:行动者真名 + 具体动作 + 作用对象 + 空间方向 + 可见结果。
53
- - 使用人物真名指明每个行动者;对白内容可以自然使用人称代词。
54
- - 根据生产需要补充景别、机位、镜头运动和画面焦点。
55
- - 将抽象心理和评价转换成表情、肢体、道具变化、环境反应或明确对白。
56
- - 为每条 dialogue 绑定 `--actor` 或非角色发声源。将情绪、语气和短促伴随动作写入 `emotion`;将影响走位、道具或连续性的动作单独写成 Action。
57
- - 两人同时说话时写成相邻两条 dialogue,第二条的 `emotion` 以“同时”开头。当前结构不提供对白重叠时间轴。
46
+ ## 完成门
58
47
 
59
- ## 七、蒙太奇与并行剪辑
60
-
61
- - 同一地点、同一组视觉状态下的快速动作组合写成同一 scene 的连续 Action。
62
- - 跨地点蒙太奇为每个地点建立短 scene,按剪辑顺序排列,并用 transition 标明蒙太奇开始、切换和结束。
63
- - 为蒙太奇中需要参考图或连续性的地点、人物、道具建立资产,并在各自 scene 绑定实际 state。
64
- - 当前没有 montage group。使用相邻 scene、transition 和统一文本标记表达组合关系。
65
- - 纯空镜或完全无人镜头单独建 scene,绑定实际 location 与关键道具,不创建虚假人物。
66
-
67
- ## 八、同场人物多引用与状态变化
68
-
69
- - 一个 scene 可重复引用同一 actor;每份引用独立绑定一个有效 state,可使用相同或不同 state。
70
- - 先用 `scene-ref <ep/scn> actor:<id> --state <state_id>` 建第一份引用,再用同一命令加 `--append` 建后续引用。
71
- - 同一 actor 已有多份引用时,用 1-based `--occurrence <n>` 精确修改、清除或删除某一份;不要省略 occurrence 让目标产生歧义。
72
- - 同一连续场内的造型变化保留在同一 scene:绑定变化前后所需的人物引用,在 Action 中写清变化顺序;需要生成过程画面时给该 Action 添加 `transition_prompt`。
73
- - 地点切换、明显跳时、叙事线切换或明确转场时建立新 scene。location 仍是单值引用。
74
-
75
- ## 九、完成门
76
-
77
- 1. 读回本集 `scenes` 与 `actions`。
78
- 2. 检查每场唯一地点、全部出场人物、道具和 state 引用。
79
- 3. 检查 Action 的真名、动作链、空间结果和可拍摄性。
80
- 4. 检查 dialogue 的说话人、emotion 和群体发声类型。
81
- 5. 检查场界、蒙太奇顺序、重复人物引用和状态变化顺序。
82
- 6. 提取与解析任务对照源素材复核对白原文,以及事实、因果、顺序、动作结果和状态。
83
- 7. 运行 `validate`。把结构通过与内容标准、源素材一致性分别报告。
48
+ 1. 读回本集 `scenes` 与 `actions`,检查每场地点、人物、道具和状态引用。
49
+ 2. 检查 Action 的真名、动作链、空间结果和可拍摄性,以及对白说话人与表演提示。
50
+ 3. 对照源素材复核对白原文、事实、因果、顺序、动作结果和状态。
51
+ 4. 运行 `validate`,确认结构与引用合法。
52
+ 5. 运行 `audit-assets`,检查重复人物、同义视觉状态、未使用/落单状态,以及重复地点和道具资产。
53
+ 6. 审计只提供建议;结合剧情身份、外观、对白归属、出现位置和跨集连续性确认后再合并或删除。
54
+ 7. 修复后重新运行 `validate` `audit-assets`,分别报告结构、资产审计、内容标准和源素材一致性。
@@ -1,61 +1,38 @@
1
- # State 引用修复核验(v3)
1
+ # State 引用修复
2
2
 
3
- 适用:合并 state、删除 state,或修 `STATE_NOT_MATERIALIZED` / 状态引用错连。重点不是只改 `states[]`,而是确认**引用该状态的场景 cast 引用**都被修好。
4
-
5
- > 造型(state)挂在**场景级 cast 引用**上(`scene.actors[]` / `props[]` / `location` 的 `state_id`),引用只有这一层。
6
-
7
- ## 操作语义
8
-
9
- 合并 state 使用 `state-delete --strategy replace`,删除源 state 并替换引用:
3
+ 先反查旧 state
10
4
 
11
5
  ```bash
12
- # 合并:把 st_old 的引用全指向 st_keep,再删 st_old(replacement 必须是同一资产已存在的 state_id)
13
- scriptctl state-delete actor:act_001/st_old --strategy replace --replacement st_keep
14
-
15
- # 真删除:删 st_old,引用它的场景 ref 的 state_id 被清掉
16
- scriptctl state-delete actor:act_001/st_old --strategy remove
6
+ scriptctl refs actA3kP9x/stB4xR8p --script-path "$SCRIPT"
17
7
  ```
18
8
 
19
- (`delete actor:act_001/st_old --strategy ...` 是等价写法。)
9
+ ## Script v4
20
10
 
21
- ## 必查流程
22
-
23
- 1. **操作前反查旧 state**,看谁在引用它:
11
+ 场景引用保存完整、非空的 `state_ids` 集合。替换 state 会在场景集合与 actor
12
+ speaker 上同步替换:
24
13
 
25
14
  ```bash
26
- scriptctl refs actor:act_001/st_old
15
+ scriptctl state-delete actA3kP9x/stB4xR8p \
16
+ --strategy replace --replacement default --script-path "$SCRIPT"
27
17
  ```
28
18
 
29
- 输出里是各场景 cast 引用(形如 `ep_001/scn_003.actors[0].state_id`)。
19
+ `--strategy remove` 会从每个集合移除该 state;若任何集合将变为空,命令拒绝,
20
+ 应先为该场写入另一个完整状态集合。speaker 上的可选 state 被移除后可省略,由
21
+ 下游依据场景集合判断具体对白落点。
30
22
 
31
- 2. **合并用 `replace`**,不要先裸删:
23
+ ## Script v3
32
24
 
33
- ```bash
34
- scriptctl state-delete actor:act_001/st_old --strategy replace --replacement st_keep
35
- ```
36
-
37
- 期望:`refs actor:act_001/st_old` 为空;`refs actor:act_001/st_keep` 包含应迁移的场景引用;`scriptctl validate` 通过。
38
-
39
- 3. **真删除用 `remove`**:
25
+ 使用 V3 state 地址和既有单值引用语义:
40
26
 
41
27
  ```bash
42
- scriptctl state-delete actor:act_001/st_old --strategy remove
28
+ scriptctl state-delete actor:act_001/st_002 \
29
+ --strategy replace --replacement st_001 --script-path "$SCRIPT"
43
30
  ```
44
31
 
45
- 期望:引用该 state 的场景 ref 被保留、但 `state_id` 被清(角色仍在场,只是没造型);`refs actor:act_001/st_old` 为空。这个结果是修复中间态:为该 ref 重新设置合法 state 前,CLI 会拒绝向该场继续插入正文。
46
-
47
- 4. **只想清某场的造型**(不删 state):
32
+ ## 核验
48
33
 
49
34
  ```bash
50
- scriptctl scene-ref ep_001/scn_003 actor:act_001 --clear # 保留在场,清造型
51
- scriptctl scene-ref ep_001/scn_003 actor:act_001 --remove # 整个移出该场
35
+ scriptctl refs <旧-state-address> --script-path "$SCRIPT"
36
+ scriptctl refs <新-state-address> --script-path "$SCRIPT"
37
+ scriptctl validate --script-path "$SCRIPT"
52
38
  ```
53
-
54
- `--clear` / `--state none` 只用于修复中间态;从零创作不能用它们跳过状态绑定。
55
-
56
- ## 核验要点
57
-
58
- - 引用只有一层:`scene.{actors|props}[].state_id` 和 `scene.location.state_id`。`replace`/`remove` 会自动处理这一层。
59
- - replacement 只能是**同一资产**上已存在的 state_id。
60
- - 改完固定两步复查:`scriptctl refs actor:<id>/<st>` 为空 + `scriptctl validate` 通过。
61
- - `STATE_NOT_MATERIALIZED`:某场引用了一个该资产上不存在的 state_id。用 `scriptctl states <asset>` 看合法 state_id,再 `scene-ref <ep/scn> <kind:id> --state <合法 id>` 修正。
@@ -1,2 +0,0 @@
1
- export declare function getHelp(command: readonly string[]): string | undefined;
2
- export declare const HELP: Map<string, string>;