@lingjingai/scriptctl 0.63.13 → 0.63.15

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 (778) hide show
  1. package/README.md +7 -1
  2. package/changes/0.63.14.md +7 -0
  3. package/changes/0.63.15.md +15 -0
  4. package/dist/bin.js +1 -20812
  5. package/dist/chunk-3LPIMYYI.js +823 -0
  6. package/dist/cli.d.ts +214 -5
  7. package/dist/cli.js +1 -187
  8. package/dist/review-agent.js +56 -3593
  9. package/package.json +12 -5
  10. package/dist/bin.d.ts +0 -2
  11. package/dist/bin.js.map +0 -7
  12. package/dist/cli/register-authoring.d.ts +0 -4
  13. package/dist/cli/register-authoring.js +0 -35
  14. package/dist/cli/register-authoring.js.map +0 -1
  15. package/dist/cli/register-review.d.ts +0 -3
  16. package/dist/cli/register-review.js +0 -20
  17. package/dist/cli/register-review.js.map +0 -1
  18. package/dist/cli/register-script.d.ts +0 -3
  19. package/dist/cli/register-script.js +0 -297
  20. package/dist/cli/register-script.js.map +0 -1
  21. package/dist/cli/register-tools.d.ts +0 -3
  22. package/dist/cli/register-tools.js +0 -23
  23. package/dist/cli/register-tools.js.map +0 -1
  24. package/dist/cli/register-workflows.d.ts +0 -4
  25. package/dist/cli/register-workflows.js +0 -108
  26. package/dist/cli/register-workflows.js.map +0 -1
  27. package/dist/cli/registry.d.ts +0 -14
  28. package/dist/cli/registry.js +0 -65
  29. package/dist/cli/registry.js.map +0 -1
  30. package/dist/cli.js.map +0 -1
  31. package/dist/common.d.ts +0 -93
  32. package/dist/common.js +0 -240
  33. package/dist/common.js.map +0 -1
  34. package/dist/domain/authoring/apply.d.ts +0 -1
  35. package/dist/domain/authoring/apply.js +0 -2
  36. package/dist/domain/authoring/apply.js.map +0 -1
  37. package/dist/domain/authoring/export.d.ts +0 -1
  38. package/dist/domain/authoring/export.js +0 -2
  39. package/dist/domain/authoring/export.js.map +0 -1
  40. package/dist/domain/authoring/parser.d.ts +0 -2
  41. package/dist/domain/authoring/parser.js +0 -3
  42. package/dist/domain/authoring/parser.js.map +0 -1
  43. package/dist/domain/authoring/serializer.d.ts +0 -1
  44. package/dist/domain/authoring/serializer.js +0 -2
  45. package/dist/domain/authoring/serializer.js.map +0 -1
  46. package/dist/domain/authoring/shared/bracket.d.ts +0 -4
  47. package/dist/domain/authoring/shared/bracket.js +0 -95
  48. package/dist/domain/authoring/shared/bracket.js.map +0 -1
  49. package/dist/domain/authoring/shared/types.d.ts +0 -12
  50. package/dist/domain/authoring/shared/types.js +0 -2
  51. package/dist/domain/authoring/shared/types.js.map +0 -1
  52. package/dist/domain/authoring/types.d.ts +0 -2
  53. package/dist/domain/authoring/types.js +0 -3
  54. package/dist/domain/authoring/types.js.map +0 -1
  55. package/dist/domain/authoring/v3/apply.d.ts +0 -33
  56. package/dist/domain/authoring/v3/apply.js +0 -784
  57. package/dist/domain/authoring/v3/apply.js.map +0 -1
  58. package/dist/domain/authoring/v3/export.d.ts +0 -7
  59. package/dist/domain/authoring/v3/export.js +0 -85
  60. package/dist/domain/authoring/v3/export.js.map +0 -1
  61. package/dist/domain/authoring/v3/parser.d.ts +0 -3
  62. package/dist/domain/authoring/v3/parser.js +0 -823
  63. package/dist/domain/authoring/v3/parser.js.map +0 -1
  64. package/dist/domain/authoring/v3/serializer.d.ts +0 -2
  65. package/dist/domain/authoring/v3/serializer.js +0 -244
  66. package/dist/domain/authoring/v3/serializer.js.map +0 -1
  67. package/dist/domain/authoring/v3/types.d.ts +0 -76
  68. package/dist/domain/authoring/v3/types.js +0 -2
  69. package/dist/domain/authoring/v3/types.js.map +0 -1
  70. package/dist/domain/authoring/v4/apply.d.ts +0 -40
  71. package/dist/domain/authoring/v4/apply.js +0 -451
  72. package/dist/domain/authoring/v4/apply.js.map +0 -1
  73. package/dist/domain/authoring/v4/parser.d.ts +0 -2
  74. package/dist/domain/authoring/v4/parser.js +0 -729
  75. package/dist/domain/authoring/v4/parser.js.map +0 -1
  76. package/dist/domain/authoring/v4/serializer.d.ts +0 -6
  77. package/dist/domain/authoring/v4/serializer.js +0 -280
  78. package/dist/domain/authoring/v4/serializer.js.map +0 -1
  79. package/dist/domain/authoring/v4/types.d.ts +0 -50
  80. package/dist/domain/authoring/v4/types.js +0 -2
  81. package/dist/domain/authoring/v4/types.js.map +0 -1
  82. package/dist/domain/creative-draft/compose.d.ts +0 -18
  83. package/dist/domain/creative-draft/compose.js +0 -448
  84. package/dist/domain/creative-draft/compose.js.map +0 -1
  85. package/dist/domain/ingest/apply-plan.d.ts +0 -23
  86. package/dist/domain/ingest/apply-plan.js +0 -210
  87. package/dist/domain/ingest/apply-plan.js.map +0 -1
  88. package/dist/domain/ingest/assembler.d.ts +0 -65
  89. package/dist/domain/ingest/assembler.js +0 -263
  90. package/dist/domain/ingest/assembler.js.map +0 -1
  91. package/dist/domain/ingest/asset-audit.d.ts +0 -50
  92. package/dist/domain/ingest/asset-audit.js +0 -196
  93. package/dist/domain/ingest/asset-audit.js.map +0 -1
  94. package/dist/domain/ingest/chunker.d.ts +0 -9
  95. package/dist/domain/ingest/chunker.js +0 -49
  96. package/dist/domain/ingest/chunker.js.map +0 -1
  97. package/dist/domain/ingest/environment.d.ts +0 -3
  98. package/dist/domain/ingest/environment.js +0 -32
  99. package/dist/domain/ingest/environment.js.map +0 -1
  100. package/dist/domain/ingest/evidence.d.ts +0 -5
  101. package/dist/domain/ingest/evidence.js +0 -66
  102. package/dist/domain/ingest/evidence.js.map +0 -1
  103. package/dist/domain/ingest/govern.d.ts +0 -3
  104. package/dist/domain/ingest/govern.js +0 -157
  105. package/dist/domain/ingest/govern.js.map +0 -1
  106. package/dist/domain/ingest/jsonl-parser.d.ts +0 -6
  107. package/dist/domain/ingest/jsonl-parser.js +0 -204
  108. package/dist/domain/ingest/jsonl-parser.js.map +0 -1
  109. package/dist/domain/ingest/markdown-parser.d.ts +0 -6
  110. package/dist/domain/ingest/markdown-parser.js +0 -187
  111. package/dist/domain/ingest/markdown-parser.js.map +0 -1
  112. package/dist/domain/ingest/production-validation.d.ts +0 -8
  113. package/dist/domain/ingest/production-validation.js +0 -37
  114. package/dist/domain/ingest/production-validation.js.map +0 -1
  115. package/dist/domain/ingest/records.d.ts +0 -72
  116. package/dist/domain/ingest/records.js +0 -10
  117. package/dist/domain/ingest/records.js.map +0 -1
  118. package/dist/domain/ingest/renumber.d.ts +0 -14
  119. package/dist/domain/ingest/renumber.js +0 -130
  120. package/dist/domain/ingest/renumber.js.map +0 -1
  121. package/dist/domain/ingest/serial-context.d.ts +0 -93
  122. package/dist/domain/ingest/serial-context.js +0 -355
  123. package/dist/domain/ingest/serial-context.js.map +0 -1
  124. package/dist/domain/ingest/state-identity.d.ts +0 -2
  125. package/dist/domain/ingest/state-identity.js +0 -3
  126. package/dist/domain/ingest/state-identity.js.map +0 -1
  127. package/dist/domain/ingest/state-reconcile.d.ts +0 -12
  128. package/dist/domain/ingest/state-reconcile.js +0 -92
  129. package/dist/domain/ingest/state-reconcile.js.map +0 -1
  130. package/dist/domain/ingest/validation.d.ts +0 -1
  131. package/dist/domain/ingest/validation.js +0 -2
  132. package/dist/domain/ingest/validation.js.map +0 -1
  133. package/dist/domain/ingest/video-apply.d.ts +0 -4
  134. package/dist/domain/ingest/video-apply.js +0 -128
  135. package/dist/domain/ingest/video-apply.js.map +0 -1
  136. package/dist/domain/ingest/video-context.d.ts +0 -64
  137. package/dist/domain/ingest/video-context.js +0 -480
  138. package/dist/domain/ingest/video-context.js.map +0 -1
  139. package/dist/domain/ingest/video-records.d.ts +0 -57
  140. package/dist/domain/ingest/video-records.js +0 -9
  141. package/dist/domain/ingest/video-records.js.map +0 -1
  142. package/dist/domain/ingest/video-serial-md.d.ts +0 -81
  143. package/dist/domain/ingest/video-serial-md.js +0 -297
  144. package/dist/domain/ingest/video-serial-md.js.map +0 -1
  145. package/dist/domain/ingest/video-source-evolution.d.ts +0 -25
  146. package/dist/domain/ingest/video-source-evolution.js +0 -40
  147. package/dist/domain/ingest/video-source-evolution.js.map +0 -1
  148. package/dist/domain/ingest/video-state-evidence.d.ts +0 -66
  149. package/dist/domain/ingest/video-state-evidence.js +0 -385
  150. package/dist/domain/ingest/video-state-evidence.js.map +0 -1
  151. package/dist/domain/ingest/video-timestamp.d.ts +0 -8
  152. package/dist/domain/ingest/video-timestamp.js +0 -26
  153. package/dist/domain/ingest/video-timestamp.js.map +0 -1
  154. package/dist/domain/loom/checkpointer.d.ts +0 -3
  155. package/dist/domain/loom/checkpointer.js +0 -30
  156. package/dist/domain/loom/checkpointer.js.map +0 -1
  157. package/dist/domain/loom/index.d.ts +0 -45
  158. package/dist/domain/loom/index.js +0 -277
  159. package/dist/domain/loom/index.js.map +0 -1
  160. package/dist/domain/loom/types.d.ts +0 -101
  161. package/dist/domain/loom/types.js +0 -2
  162. package/dist/domain/loom/types.js.map +0 -1
  163. package/dist/domain/script/address.d.ts +0 -1
  164. package/dist/domain/script/address.js +0 -2
  165. package/dist/domain/script/address.js.map +0 -1
  166. package/dist/domain/script/dispatch.d.ts +0 -18
  167. package/dist/domain/script/dispatch.js +0 -55
  168. package/dist/domain/script/dispatch.js.map +0 -1
  169. package/dist/domain/script/lookups.d.ts +0 -1
  170. package/dist/domain/script/lookups.js +0 -2
  171. package/dist/domain/script/lookups.js.map +0 -1
  172. package/dist/domain/script/migrations/registry.d.ts +0 -4
  173. package/dist/domain/script/migrations/registry.js +0 -76
  174. package/dist/domain/script/migrations/registry.js.map +0 -1
  175. package/dist/domain/script/migrations/types.d.ts +0 -17
  176. package/dist/domain/script/migrations/types.js +0 -2
  177. package/dist/domain/script/migrations/types.js.map +0 -1
  178. package/dist/domain/script/migrations/v3-to-v4.d.ts +0 -3
  179. package/dist/domain/script/migrations/v3-to-v4.js +0 -57
  180. package/dist/domain/script/migrations/v3-to-v4.js.map +0 -1
  181. package/dist/domain/script/names.d.ts +0 -1
  182. package/dist/domain/script/names.js +0 -2
  183. package/dist/domain/script/names.js.map +0 -1
  184. package/dist/domain/script/parse.d.ts +0 -1
  185. package/dist/domain/script/parse.js +0 -2
  186. package/dist/domain/script/parse.js.map +0 -1
  187. package/dist/domain/script/patch/apply.d.ts +0 -1
  188. package/dist/domain/script/patch/apply.js +0 -2
  189. package/dist/domain/script/patch/apply.js.map +0 -1
  190. package/dist/domain/script/patch/helpers.d.ts +0 -1
  191. package/dist/domain/script/patch/helpers.js +0 -2
  192. package/dist/domain/script/patch/helpers.js.map +0 -1
  193. package/dist/domain/script/patch/inline-speaker.d.ts +0 -1
  194. package/dist/domain/script/patch/inline-speaker.js +0 -2
  195. package/dist/domain/script/patch/inline-speaker.js.map +0 -1
  196. package/dist/domain/script/patch/ops-action.d.ts +0 -1
  197. package/dist/domain/script/patch/ops-action.js +0 -2
  198. package/dist/domain/script/patch/ops-action.js.map +0 -1
  199. package/dist/domain/script/patch/ops-asset.d.ts +0 -1
  200. package/dist/domain/script/patch/ops-asset.js +0 -2
  201. package/dist/domain/script/patch/ops-asset.js.map +0 -1
  202. package/dist/domain/script/patch/ops-dialogue.d.ts +0 -1
  203. package/dist/domain/script/patch/ops-dialogue.js +0 -2
  204. package/dist/domain/script/patch/ops-dialogue.js.map +0 -1
  205. package/dist/domain/script/patch/ops-extend.d.ts +0 -1
  206. package/dist/domain/script/patch/ops-extend.js +0 -2
  207. package/dist/domain/script/patch/ops-extend.js.map +0 -1
  208. package/dist/domain/script/patch/ops-meta.d.ts +0 -1
  209. package/dist/domain/script/patch/ops-meta.js +0 -2
  210. package/dist/domain/script/patch/ops-meta.js.map +0 -1
  211. package/dist/domain/script/patch/ops-scene.d.ts +0 -1
  212. package/dist/domain/script/patch/ops-scene.js +0 -2
  213. package/dist/domain/script/patch/ops-scene.js.map +0 -1
  214. package/dist/domain/script/patch/ops-state.d.ts +0 -1
  215. package/dist/domain/script/patch/ops-state.js +0 -2
  216. package/dist/domain/script/patch/ops-state.js.map +0 -1
  217. package/dist/domain/script/patch/registry.d.ts +0 -1
  218. package/dist/domain/script/patch/registry.js +0 -2
  219. package/dist/domain/script/patch/registry.js.map +0 -1
  220. package/dist/domain/script/patch/types.d.ts +0 -1
  221. package/dist/domain/script/patch/types.js +0 -2
  222. package/dist/domain/script/patch/types.js.map +0 -1
  223. package/dist/domain/script/refs.d.ts +0 -1
  224. package/dist/domain/script/refs.js +0 -2
  225. package/dist/domain/script/refs.js.map +0 -1
  226. package/dist/domain/script/scene-refs.d.ts +0 -1
  227. package/dist/domain/script/scene-refs.js +0 -2
  228. package/dist/domain/script/scene-refs.js.map +0 -1
  229. package/dist/domain/script/schema.d.ts +0 -1
  230. package/dist/domain/script/schema.js +0 -2
  231. package/dist/domain/script/schema.js.map +0 -1
  232. package/dist/domain/script/selector.d.ts +0 -1
  233. package/dist/domain/script/selector.js +0 -2
  234. package/dist/domain/script/selector.js.map +0 -1
  235. package/dist/domain/script/shared/regex.d.ts +0 -2
  236. package/dist/domain/script/shared/regex.js +0 -7
  237. package/dist/domain/script/shared/regex.js.map +0 -1
  238. package/dist/domain/script/shared/types.d.ts +0 -1
  239. package/dist/domain/script/shared/types.js +0 -5
  240. package/dist/domain/script/shared/types.js.map +0 -1
  241. package/dist/domain/script/shared/validation.d.ts +0 -1
  242. package/dist/domain/script/shared/validation.js +0 -3
  243. package/dist/domain/script/shared/validation.js.map +0 -1
  244. package/dist/domain/script/shared.d.ts +0 -15
  245. package/dist/domain/script/shared.js +0 -35
  246. package/dist/domain/script/shared.js.map +0 -1
  247. package/dist/domain/script/text-util.d.ts +0 -7
  248. package/dist/domain/script/text-util.js +0 -95
  249. package/dist/domain/script/text-util.js.map +0 -1
  250. package/dist/domain/script/timestamp.d.ts +0 -1
  251. package/dist/domain/script/timestamp.js +0 -3
  252. package/dist/domain/script/timestamp.js.map +0 -1
  253. package/dist/domain/script/types.d.ts +0 -1
  254. package/dist/domain/script/types.js +0 -2
  255. package/dist/domain/script/types.js.map +0 -1
  256. package/dist/domain/script/v3/address.d.ts +0 -32
  257. package/dist/domain/script/v3/address.js +0 -136
  258. package/dist/domain/script/v3/address.js.map +0 -1
  259. package/dist/domain/script/v3/lookups.d.ts +0 -33
  260. package/dist/domain/script/v3/lookups.js +0 -316
  261. package/dist/domain/script/v3/lookups.js.map +0 -1
  262. package/dist/domain/script/v3/ordinal.d.ts +0 -8
  263. package/dist/domain/script/v3/ordinal.js +0 -91
  264. package/dist/domain/script/v3/ordinal.js.map +0 -1
  265. package/dist/domain/script/v3/parse.d.ts +0 -3
  266. package/dist/domain/script/v3/parse.js +0 -164
  267. package/dist/domain/script/v3/parse.js.map +0 -1
  268. package/dist/domain/script/v3/patch/apply.d.ts +0 -2
  269. package/dist/domain/script/v3/patch/apply.js +0 -31
  270. package/dist/domain/script/v3/patch/apply.js.map +0 -1
  271. package/dist/domain/script/v3/patch/helpers.d.ts +0 -15
  272. package/dist/domain/script/v3/patch/helpers.js +0 -155
  273. package/dist/domain/script/v3/patch/helpers.js.map +0 -1
  274. package/dist/domain/script/v3/patch/inline-speaker.d.ts +0 -2
  275. package/dist/domain/script/v3/patch/inline-speaker.js +0 -50
  276. package/dist/domain/script/v3/patch/inline-speaker.js.map +0 -1
  277. package/dist/domain/script/v3/patch/ops-action.d.ts +0 -12
  278. package/dist/domain/script/v3/patch/ops-action.js +0 -355
  279. package/dist/domain/script/v3/patch/ops-action.js.map +0 -1
  280. package/dist/domain/script/v3/patch/ops-asset.d.ts +0 -14
  281. package/dist/domain/script/v3/patch/ops-asset.js +0 -347
  282. package/dist/domain/script/v3/patch/ops-asset.js.map +0 -1
  283. package/dist/domain/script/v3/patch/ops-dialogue.d.ts +0 -2
  284. package/dist/domain/script/v3/patch/ops-dialogue.js +0 -21
  285. package/dist/domain/script/v3/patch/ops-dialogue.js.map +0 -1
  286. package/dist/domain/script/v3/patch/ops-extend.d.ts +0 -8
  287. package/dist/domain/script/v3/patch/ops-extend.js +0 -122
  288. package/dist/domain/script/v3/patch/ops-extend.js.map +0 -1
  289. package/dist/domain/script/v3/patch/ops-meta.d.ts +0 -5
  290. package/dist/domain/script/v3/patch/ops-meta.js +0 -82
  291. package/dist/domain/script/v3/patch/ops-meta.js.map +0 -1
  292. package/dist/domain/script/v3/patch/ops-scene.d.ts +0 -6
  293. package/dist/domain/script/v3/patch/ops-scene.js +0 -351
  294. package/dist/domain/script/v3/patch/ops-scene.js.map +0 -1
  295. package/dist/domain/script/v3/patch/ops-state.d.ts +0 -8
  296. package/dist/domain/script/v3/patch/ops-state.js +0 -155
  297. package/dist/domain/script/v3/patch/ops-state.js.map +0 -1
  298. package/dist/domain/script/v3/patch/ops-timestamp.d.ts +0 -6
  299. package/dist/domain/script/v3/patch/ops-timestamp.js +0 -47
  300. package/dist/domain/script/v3/patch/ops-timestamp.js.map +0 -1
  301. package/dist/domain/script/v3/patch/registry.d.ts +0 -2
  302. package/dist/domain/script/v3/patch/registry.js +0 -56
  303. package/dist/domain/script/v3/patch/registry.js.map +0 -1
  304. package/dist/domain/script/v3/patch/types.d.ts +0 -10
  305. package/dist/domain/script/v3/patch/types.js +0 -2
  306. package/dist/domain/script/v3/patch/types.js.map +0 -1
  307. package/dist/domain/script/v3/refs.d.ts +0 -4
  308. package/dist/domain/script/v3/refs.js +0 -64
  309. package/dist/domain/script/v3/refs.js.map +0 -1
  310. package/dist/domain/script/v3/scene-refs.d.ts +0 -3
  311. package/dist/domain/script/v3/scene-refs.js +0 -35
  312. package/dist/domain/script/v3/scene-refs.js.map +0 -1
  313. package/dist/domain/script/v3/schema.d.ts +0 -6
  314. package/dist/domain/script/v3/schema.js +0 -58
  315. package/dist/domain/script/v3/schema.js.map +0 -1
  316. package/dist/domain/script/v3/selector.d.ts +0 -44
  317. package/dist/domain/script/v3/selector.js +0 -178
  318. package/dist/domain/script/v3/selector.js.map +0 -1
  319. package/dist/domain/script/v3/types.d.ts +0 -106
  320. package/dist/domain/script/v3/types.js +0 -2
  321. package/dist/domain/script/v3/types.js.map +0 -1
  322. package/dist/domain/script/v3/validation.d.ts +0 -2
  323. package/dist/domain/script/v3/validation.js +0 -2
  324. package/dist/domain/script/v3/validation.js.map +0 -1
  325. package/dist/domain/script/v4/address.d.ts +0 -61
  326. package/dist/domain/script/v4/address.js +0 -99
  327. package/dist/domain/script/v4/address.js.map +0 -1
  328. package/dist/domain/script/v4/factory.d.ts +0 -2
  329. package/dist/domain/script/v4/factory.js +0 -13
  330. package/dist/domain/script/v4/factory.js.map +0 -1
  331. package/dist/domain/script/v4/from-v3.d.ts +0 -29
  332. package/dist/domain/script/v4/from-v3.js +0 -307
  333. package/dist/domain/script/v4/from-v3.js.map +0 -1
  334. package/dist/domain/script/v4/ids.d.ts +0 -5
  335. package/dist/domain/script/v4/ids.js +0 -41
  336. package/dist/domain/script/v4/ids.js.map +0 -1
  337. package/dist/domain/script/v4/ordinal.d.ts +0 -3
  338. package/dist/domain/script/v4/ordinal.js +0 -66
  339. package/dist/domain/script/v4/ordinal.js.map +0 -1
  340. package/dist/domain/script/v4/parse.d.ts +0 -5
  341. package/dist/domain/script/v4/parse.js +0 -196
  342. package/dist/domain/script/v4/parse.js.map +0 -1
  343. package/dist/domain/script/v4/patch/apply.d.ts +0 -3
  344. package/dist/domain/script/v4/patch/apply.js +0 -24
  345. package/dist/domain/script/v4/patch/apply.js.map +0 -1
  346. package/dist/domain/script/v4/patch/helpers.d.ts +0 -32
  347. package/dist/domain/script/v4/patch/helpers.js +0 -138
  348. package/dist/domain/script/v4/patch/helpers.js.map +0 -1
  349. package/dist/domain/script/v4/patch/ops-action.d.ts +0 -13
  350. package/dist/domain/script/v4/patch/ops-action.js +0 -351
  351. package/dist/domain/script/v4/patch/ops-action.js.map +0 -1
  352. package/dist/domain/script/v4/patch/ops-asset.d.ts +0 -17
  353. package/dist/domain/script/v4/patch/ops-asset.js +0 -556
  354. package/dist/domain/script/v4/patch/ops-asset.js.map +0 -1
  355. package/dist/domain/script/v4/patch/ops-extend.d.ts +0 -11
  356. package/dist/domain/script/v4/patch/ops-extend.js +0 -103
  357. package/dist/domain/script/v4/patch/ops-extend.js.map +0 -1
  358. package/dist/domain/script/v4/patch/ops-meta.d.ts +0 -5
  359. package/dist/domain/script/v4/patch/ops-meta.js +0 -49
  360. package/dist/domain/script/v4/patch/ops-meta.js.map +0 -1
  361. package/dist/domain/script/v4/patch/ops-scene-ref.d.ts +0 -3
  362. package/dist/domain/script/v4/patch/ops-scene-ref.js +0 -74
  363. package/dist/domain/script/v4/patch/ops-scene-ref.js.map +0 -1
  364. package/dist/domain/script/v4/patch/ops-structure.d.ts +0 -6
  365. package/dist/domain/script/v4/patch/ops-structure.js +0 -236
  366. package/dist/domain/script/v4/patch/ops-structure.js.map +0 -1
  367. package/dist/domain/script/v4/patch/ops-timestamp.d.ts +0 -6
  368. package/dist/domain/script/v4/patch/ops-timestamp.js +0 -40
  369. package/dist/domain/script/v4/patch/ops-timestamp.js.map +0 -1
  370. package/dist/domain/script/v4/patch/registry.d.ts +0 -2
  371. package/dist/domain/script/v4/patch/registry.js +0 -53
  372. package/dist/domain/script/v4/patch/registry.js.map +0 -1
  373. package/dist/domain/script/v4/patch/schema.d.ts +0 -7
  374. package/dist/domain/script/v4/patch/schema.js +0 -77
  375. package/dist/domain/script/v4/patch/schema.js.map +0 -1
  376. package/dist/domain/script/v4/patch/types.d.ts +0 -10
  377. package/dist/domain/script/v4/patch/types.js +0 -2
  378. package/dist/domain/script/v4/patch/types.js.map +0 -1
  379. package/dist/domain/script/v4/selector.d.ts +0 -11
  380. package/dist/domain/script/v4/selector.js +0 -124
  381. package/dist/domain/script/v4/selector.js.map +0 -1
  382. package/dist/domain/script/v4/types.d.ts +0 -120
  383. package/dist/domain/script/v4/types.js +0 -2
  384. package/dist/domain/script/v4/types.js.map +0 -1
  385. package/dist/domain/script/v4/validation.d.ts +0 -2
  386. package/dist/domain/script/v4/validation.js +0 -2
  387. package/dist/domain/script/v4/validation.js.map +0 -1
  388. package/dist/failures.d.ts +0 -58
  389. package/dist/failures.js +0 -96
  390. package/dist/failures.js.map +0 -1
  391. package/dist/infra/converters.d.ts +0 -9
  392. package/dist/infra/converters.js +0 -689
  393. package/dist/infra/converters.js.map +0 -1
  394. package/dist/infra/env.d.ts +0 -2
  395. package/dist/infra/env.js +0 -81
  396. package/dist/infra/env.js.map +0 -1
  397. package/dist/infra/episode-title.d.ts +0 -4
  398. package/dist/infra/episode-title.js +0 -129
  399. package/dist/infra/episode-title.js.map +0 -1
  400. package/dist/infra/ingest/review-renderer.d.ts +0 -1
  401. package/dist/infra/ingest/review-renderer.js +0 -440
  402. package/dist/infra/ingest/review-renderer.js.map +0 -1
  403. package/dist/infra/ingest/source-resolver.d.ts +0 -21
  404. package/dist/infra/ingest/source-resolver.js +0 -51
  405. package/dist/infra/ingest/source-resolver.js.map +0 -1
  406. package/dist/infra/ingest/text-reader.d.ts +0 -3
  407. package/dist/infra/ingest/text-reader.js +0 -27
  408. package/dist/infra/ingest/text-reader.js.map +0 -1
  409. package/dist/infra/ingest/video-discovery.d.ts +0 -8
  410. package/dist/infra/ingest/video-discovery.js +0 -69
  411. package/dist/infra/ingest/video-discovery.js.map +0 -1
  412. package/dist/infra/ingest/video-source-snapshot.d.ts +0 -4
  413. package/dist/infra/ingest/video-source-snapshot.js +0 -47
  414. package/dist/infra/ingest/video-source-snapshot.js.map +0 -1
  415. package/dist/infra/ingest/video-state-evidence.d.ts +0 -14
  416. package/dist/infra/ingest/video-state-evidence.js +0 -140
  417. package/dist/infra/ingest/video-state-evidence.js.map +0 -1
  418. package/dist/infra/ingest/video-transcode.d.ts +0 -7
  419. package/dist/infra/ingest/video-transcode.js +0 -98
  420. package/dist/infra/ingest/video-transcode.js.map +0 -1
  421. package/dist/infra/ingest/workspace-lock.d.ts +0 -1
  422. package/dist/infra/ingest/workspace-lock.js +0 -32
  423. package/dist/infra/ingest/workspace-lock.js.map +0 -1
  424. package/dist/infra/ingest/workspace-store.d.ts +0 -18
  425. package/dist/infra/ingest/workspace-store.js +0 -70
  426. package/dist/infra/ingest/workspace-store.js.map +0 -1
  427. package/dist/infra/llm/anthropic-model.d.ts +0 -11
  428. package/dist/infra/llm/anthropic-model.js +0 -130
  429. package/dist/infra/llm/anthropic-model.js.map +0 -1
  430. package/dist/infra/llm/doubao-model.d.ts +0 -60
  431. package/dist/infra/llm/doubao-model.js +0 -249
  432. package/dist/infra/llm/doubao-model.js.map +0 -1
  433. package/dist/infra/llm/failure-mapping.d.ts +0 -6
  434. package/dist/infra/llm/failure-mapping.js +0 -146
  435. package/dist/infra/llm/failure-mapping.js.map +0 -1
  436. package/dist/infra/llm/gemini-upload.d.ts +0 -13
  437. package/dist/infra/llm/gemini-upload.js +0 -138
  438. package/dist/infra/llm/gemini-upload.js.map +0 -1
  439. package/dist/infra/llm/gemini-video-model.d.ts +0 -50
  440. package/dist/infra/llm/gemini-video-model.js +0 -371
  441. package/dist/infra/llm/gemini-video-model.js.map +0 -1
  442. package/dist/infra/llm/openai-compatible-model.d.ts +0 -14
  443. package/dist/infra/llm/openai-compatible-model.js +0 -207
  444. package/dist/infra/llm/openai-compatible-model.js.map +0 -1
  445. package/dist/infra/llm/retry.d.ts +0 -8
  446. package/dist/infra/llm/retry.js +0 -41
  447. package/dist/infra/llm/retry.js.map +0 -1
  448. package/dist/infra/local-script-output-store.d.ts +0 -43
  449. package/dist/infra/local-script-output-store.js +0 -168
  450. package/dist/infra/local-script-output-store.js.map +0 -1
  451. package/dist/infra/script-output-api.d.ts +0 -50
  452. package/dist/infra/script-output-api.js +0 -251
  453. package/dist/infra/script-output-api.js.map +0 -1
  454. package/dist/infra/script-output-store.d.ts +0 -152
  455. package/dist/infra/script-output-store.js +0 -114
  456. package/dist/infra/script-output-store.js.map +0 -1
  457. package/dist/infra/script-working-copy.d.ts +0 -23
  458. package/dist/infra/script-working-copy.js +0 -157
  459. package/dist/infra/script-working-copy.js.map +0 -1
  460. package/dist/infra/storage.d.ts +0 -35
  461. package/dist/infra/storage.js +0 -91
  462. package/dist/infra/storage.js.map +0 -1
  463. package/dist/llm/composition.d.ts +0 -5
  464. package/dist/llm/composition.js +0 -5
  465. package/dist/llm/composition.js.map +0 -1
  466. package/dist/llm/config.d.ts +0 -28
  467. package/dist/llm/config.js +0 -231
  468. package/dist/llm/config.js.map +0 -1
  469. package/dist/llm/registry.d.ts +0 -43
  470. package/dist/llm/registry.js +0 -69
  471. package/dist/llm/registry.js.map +0 -1
  472. package/dist/llm/router.d.ts +0 -46
  473. package/dist/llm/router.js +0 -512
  474. package/dist/llm/router.js.map +0 -1
  475. package/dist/llm/tasks/ingest/arc-summary.d.ts +0 -8
  476. package/dist/llm/tasks/ingest/arc-summary.js +0 -26
  477. package/dist/llm/tasks/ingest/arc-summary.js.map +0 -1
  478. package/dist/llm/tasks/ingest/asset-audit.d.ts +0 -6
  479. package/dist/llm/tasks/ingest/asset-audit.js +0 -158
  480. package/dist/llm/tasks/ingest/asset-audit.js.map +0 -1
  481. package/dist/llm/tasks/ingest/asset-curate.d.ts +0 -13
  482. package/dist/llm/tasks/ingest/asset-curate.js +0 -45
  483. package/dist/llm/tasks/ingest/asset-curate.js.map +0 -1
  484. package/dist/llm/tasks/ingest/asset-extract.d.ts +0 -12
  485. package/dist/llm/tasks/ingest/asset-extract.js +0 -51
  486. package/dist/llm/tasks/ingest/asset-extract.js.map +0 -1
  487. package/dist/llm/tasks/ingest/asset-govern.d.ts +0 -22
  488. package/dist/llm/tasks/ingest/asset-govern.js +0 -143
  489. package/dist/llm/tasks/ingest/asset-govern.js.map +0 -1
  490. package/dist/llm/tasks/ingest/body-start.d.ts +0 -10
  491. package/dist/llm/tasks/ingest/body-start.js +0 -41
  492. package/dist/llm/tasks/ingest/body-start.js.map +0 -1
  493. package/dist/llm/tasks/ingest/episode-assets.d.ts +0 -29
  494. package/dist/llm/tasks/ingest/episode-assets.js +0 -282
  495. package/dist/llm/tasks/ingest/episode-assets.js.map +0 -1
  496. package/dist/llm/tasks/ingest/mention-resolve.d.ts +0 -9
  497. package/dist/llm/tasks/ingest/mention-resolve.js +0 -39
  498. package/dist/llm/tasks/ingest/mention-resolve.js.map +0 -1
  499. package/dist/llm/tasks/ingest/name-fix.d.ts +0 -9
  500. package/dist/llm/tasks/ingest/name-fix.js +0 -56
  501. package/dist/llm/tasks/ingest/name-fix.js.map +0 -1
  502. package/dist/llm/tasks/ingest/state-reconcile.d.ts +0 -8
  503. package/dist/llm/tasks/ingest/state-reconcile.js +0 -44
  504. package/dist/llm/tasks/ingest/state-reconcile.js.map +0 -1
  505. package/dist/llm/tasks/ingest/text-normalize.d.ts +0 -10
  506. package/dist/llm/tasks/ingest/text-normalize.js +0 -122
  507. package/dist/llm/tasks/ingest/text-normalize.js.map +0 -1
  508. package/dist/llm/tasks/ingest/video-serial.d.ts +0 -14
  509. package/dist/llm/tasks/ingest/video-serial.js +0 -391
  510. package/dist/llm/tasks/ingest/video-serial.js.map +0 -1
  511. package/dist/llm/tasks/schemas.d.ts +0 -9
  512. package/dist/llm/tasks/schemas.js +0 -466
  513. package/dist/llm/tasks/schemas.js.map +0 -1
  514. package/dist/llm/types.d.ts +0 -178
  515. package/dist/llm/types.js +0 -44
  516. package/dist/llm/types.js.map +0 -1
  517. package/dist/output.d.ts +0 -3
  518. package/dist/output.js +0 -94
  519. package/dist/output.js.map +0 -1
  520. package/dist/package-root.d.ts +0 -2
  521. package/dist/package-root.js +0 -38
  522. package/dist/package-root.js.map +0 -1
  523. package/dist/review-agent.js.map +0 -7
  524. package/dist/usecases/changelog.d.ts +0 -9
  525. package/dist/usecases/changelog.js +0 -134
  526. package/dist/usecases/changelog.js.map +0 -1
  527. package/dist/usecases/doctor.d.ts +0 -2
  528. package/dist/usecases/doctor.js +0 -231
  529. package/dist/usecases/doctor.js.map +0 -1
  530. package/dist/usecases/ingest/body-start.d.ts +0 -8
  531. package/dist/usecases/ingest/body-start.js +0 -36
  532. package/dist/usecases/ingest/body-start.js.map +0 -1
  533. package/dist/usecases/ingest/command.d.ts +0 -5
  534. package/dist/usecases/ingest/command.js +0 -183
  535. package/dist/usecases/ingest/command.js.map +0 -1
  536. package/dist/usecases/ingest/failure.d.ts +0 -26
  537. package/dist/usecases/ingest/failure.js +0 -151
  538. package/dist/usecases/ingest/failure.js.map +0 -1
  539. package/dist/usecases/ingest/fanout.d.ts +0 -10
  540. package/dist/usecases/ingest/fanout.js +0 -23
  541. package/dist/usecases/ingest/fanout.js.map +0 -1
  542. package/dist/usecases/ingest/final-asset-audit.d.ts +0 -39
  543. package/dist/usecases/ingest/final-asset-audit.js +0 -88
  544. package/dist/usecases/ingest/final-asset-audit.js.map +0 -1
  545. package/dist/usecases/ingest/generate-video-state-evidence.d.ts +0 -23
  546. package/dist/usecases/ingest/generate-video-state-evidence.js +0 -124
  547. package/dist/usecases/ingest/generate-video-state-evidence.js.map +0 -1
  548. package/dist/usecases/ingest/pass4-mention-resolve.d.ts +0 -11
  549. package/dist/usecases/ingest/pass4-mention-resolve.js +0 -52
  550. package/dist/usecases/ingest/pass4-mention-resolve.js.map +0 -1
  551. package/dist/usecases/ingest/pass5-extract.d.ts +0 -7
  552. package/dist/usecases/ingest/pass5-extract.js +0 -51
  553. package/dist/usecases/ingest/pass5-extract.js.map +0 -1
  554. package/dist/usecases/ingest/pass5-govern.d.ts +0 -13
  555. package/dist/usecases/ingest/pass5-govern.js +0 -157
  556. package/dist/usecases/ingest/pass5-govern.js.map +0 -1
  557. package/dist/usecases/ingest/pipeline.d.ts +0 -28
  558. package/dist/usecases/ingest/pipeline.js +0 -335
  559. package/dist/usecases/ingest/pipeline.js.map +0 -1
  560. package/dist/usecases/ingest/publish-command.d.ts +0 -1
  561. package/dist/usecases/ingest/publish-command.js +0 -4
  562. package/dist/usecases/ingest/publish-command.js.map +0 -1
  563. package/dist/usecases/ingest/serial-govern.d.ts +0 -40
  564. package/dist/usecases/ingest/serial-govern.js +0 -488
  565. package/dist/usecases/ingest/serial-govern.js.map +0 -1
  566. package/dist/usecases/ingest/skip-video-episode.d.ts +0 -4
  567. package/dist/usecases/ingest/skip-video-episode.js +0 -120
  568. package/dist/usecases/ingest/skip-video-episode.js.map +0 -1
  569. package/dist/usecases/ingest/status.d.ts +0 -61
  570. package/dist/usecases/ingest/status.js +0 -347
  571. package/dist/usecases/ingest/status.js.map +0 -1
  572. package/dist/usecases/ingest/timings.d.ts +0 -51
  573. package/dist/usecases/ingest/timings.js +0 -68
  574. package/dist/usecases/ingest/timings.js.map +0 -1
  575. package/dist/usecases/ingest/usage-report.d.ts +0 -125
  576. package/dist/usecases/ingest/usage-report.js +0 -248
  577. package/dist/usecases/ingest/usage-report.js.map +0 -1
  578. package/dist/usecases/ingest/video-pipeline.d.ts +0 -81
  579. package/dist/usecases/ingest/video-pipeline.js +0 -547
  580. package/dist/usecases/ingest/video-pipeline.js.map +0 -1
  581. package/dist/usecases/ingest/video-skip-state.d.ts +0 -29
  582. package/dist/usecases/ingest/video-skip-state.js +0 -148
  583. package/dist/usecases/ingest/video-skip-state.js.map +0 -1
  584. package/dist/usecases/ingest/view-command.d.ts +0 -4
  585. package/dist/usecases/ingest/view-command.js +0 -67
  586. package/dist/usecases/ingest/view-command.js.map +0 -1
  587. package/dist/usecases/ingest/view-server.d.ts +0 -29
  588. package/dist/usecases/ingest/view-server.js +0 -364
  589. package/dist/usecases/ingest/view-server.js.map +0 -1
  590. package/dist/usecases/script/action-span.d.ts +0 -10
  591. package/dist/usecases/script/action-span.js +0 -42
  592. package/dist/usecases/script/action-span.js.map +0 -1
  593. package/dist/usecases/script/actions.d.ts +0 -3
  594. package/dist/usecases/script/actions.js +0 -184
  595. package/dist/usecases/script/actions.js.map +0 -1
  596. package/dist/usecases/script/actor.d.ts +0 -3
  597. package/dist/usecases/script/actor.js +0 -26
  598. package/dist/usecases/script/actor.js.map +0 -1
  599. package/dist/usecases/script/actors.d.ts +0 -3
  600. package/dist/usecases/script/actors.js +0 -25
  601. package/dist/usecases/script/actors.js.map +0 -1
  602. package/dist/usecases/script/add-actor.d.ts +0 -3
  603. package/dist/usecases/script/add-actor.js +0 -13
  604. package/dist/usecases/script/add-actor.js.map +0 -1
  605. package/dist/usecases/script/add-episode.d.ts +0 -3
  606. package/dist/usecases/script/add-episode.js +0 -9
  607. package/dist/usecases/script/add-episode.js.map +0 -1
  608. package/dist/usecases/script/add-location.d.ts +0 -3
  609. package/dist/usecases/script/add-location.js +0 -11
  610. package/dist/usecases/script/add-location.js.map +0 -1
  611. package/dist/usecases/script/add-prop.d.ts +0 -3
  612. package/dist/usecases/script/add-prop.js +0 -11
  613. package/dist/usecases/script/add-prop.js.map +0 -1
  614. package/dist/usecases/script/alias.d.ts +0 -3
  615. package/dist/usecases/script/alias.js +0 -39
  616. package/dist/usecases/script/alias.js.map +0 -1
  617. package/dist/usecases/script/assets.d.ts +0 -3
  618. package/dist/usecases/script/assets.js +0 -46
  619. package/dist/usecases/script/assets.js.map +0 -1
  620. package/dist/usecases/script/audit-assets.d.ts +0 -4
  621. package/dist/usecases/script/audit-assets.js +0 -37
  622. package/dist/usecases/script/audit-assets.js.map +0 -1
  623. package/dist/usecases/script/command-constraints.d.ts +0 -38
  624. package/dist/usecases/script/command-constraints.js +0 -143
  625. package/dist/usecases/script/command-constraints.js.map +0 -1
  626. package/dist/usecases/script/compose-creative-draft.d.ts +0 -3
  627. package/dist/usecases/script/compose-creative-draft.js +0 -106
  628. package/dist/usecases/script/compose-creative-draft.js.map +0 -1
  629. package/dist/usecases/script/context.d.ts +0 -3
  630. package/dist/usecases/script/context.js +0 -52
  631. package/dist/usecases/script/context.js.map +0 -1
  632. package/dist/usecases/script/create.d.ts +0 -3
  633. package/dist/usecases/script/create.js +0 -27
  634. package/dist/usecases/script/create.js.map +0 -1
  635. package/dist/usecases/script/delete.d.ts +0 -3
  636. package/dist/usecases/script/delete.js +0 -88
  637. package/dist/usecases/script/delete.js.map +0 -1
  638. package/dist/usecases/script/describe.d.ts +0 -3
  639. package/dist/usecases/script/describe.js +0 -32
  640. package/dist/usecases/script/describe.js.map +0 -1
  641. package/dist/usecases/script/dialogue.d.ts +0 -3
  642. package/dist/usecases/script/dialogue.js +0 -30
  643. package/dist/usecases/script/dialogue.js.map +0 -1
  644. package/dist/usecases/script/dispatch.d.ts +0 -3
  645. package/dist/usecases/script/dispatch.js +0 -10
  646. package/dist/usecases/script/dispatch.js.map +0 -1
  647. package/dist/usecases/script/do.d.ts +0 -3
  648. package/dist/usecases/script/do.js +0 -186
  649. package/dist/usecases/script/do.js.map +0 -1
  650. package/dist/usecases/script/emotion.d.ts +0 -3
  651. package/dist/usecases/script/emotion.js +0 -24
  652. package/dist/usecases/script/emotion.js.map +0 -1
  653. package/dist/usecases/script/episodes.d.ts +0 -3
  654. package/dist/usecases/script/episodes.js +0 -62
  655. package/dist/usecases/script/episodes.js.map +0 -1
  656. package/dist/usecases/script/export-authoring.d.ts +0 -4
  657. package/dist/usecases/script/export-authoring.js +0 -326
  658. package/dist/usecases/script/export-authoring.js.map +0 -1
  659. package/dist/usecases/script/extend.d.ts +0 -3
  660. package/dist/usecases/script/extend.js +0 -94
  661. package/dist/usecases/script/extend.js.map +0 -1
  662. package/dist/usecases/script/ids.d.ts +0 -3
  663. package/dist/usecases/script/ids.js +0 -148
  664. package/dist/usecases/script/ids.js.map +0 -1
  665. package/dist/usecases/script/importance.d.ts +0 -3
  666. package/dist/usecases/script/importance.js +0 -16
  667. package/dist/usecases/script/importance.js.map +0 -1
  668. package/dist/usecases/script/insert.d.ts +0 -3
  669. package/dist/usecases/script/insert.js +0 -127
  670. package/dist/usecases/script/insert.js.map +0 -1
  671. package/dist/usecases/script/issues.d.ts +0 -3
  672. package/dist/usecases/script/issues.js +0 -35
  673. package/dist/usecases/script/issues.js.map +0 -1
  674. package/dist/usecases/script/lib.d.ts +0 -152
  675. package/dist/usecases/script/lib.js +0 -1654
  676. package/dist/usecases/script/lib.js.map +0 -1
  677. package/dist/usecases/script/locations.d.ts +0 -3
  678. package/dist/usecases/script/locations.js +0 -25
  679. package/dist/usecases/script/locations.js.map +0 -1
  680. package/dist/usecases/script/merge.d.ts +0 -3
  681. package/dist/usecases/script/merge.js +0 -43
  682. package/dist/usecases/script/merge.js.map +0 -1
  683. package/dist/usecases/script/migrate.d.ts +0 -3
  684. package/dist/usecases/script/migrate.js +0 -210
  685. package/dist/usecases/script/migrate.js.map +0 -1
  686. package/dist/usecases/script/move.d.ts +0 -3
  687. package/dist/usecases/script/move.js +0 -50
  688. package/dist/usecases/script/move.js.map +0 -1
  689. package/dist/usecases/script/parenthetical.d.ts +0 -3
  690. package/dist/usecases/script/parenthetical.js +0 -52
  691. package/dist/usecases/script/parenthetical.js.map +0 -1
  692. package/dist/usecases/script/props.d.ts +0 -3
  693. package/dist/usecases/script/props.js +0 -25
  694. package/dist/usecases/script/props.js.map +0 -1
  695. package/dist/usecases/script/refs.d.ts +0 -3
  696. package/dist/usecases/script/refs.js +0 -111
  697. package/dist/usecases/script/refs.js.map +0 -1
  698. package/dist/usecases/script/rename.d.ts +0 -3
  699. package/dist/usecases/script/rename.js +0 -35
  700. package/dist/usecases/script/rename.js.map +0 -1
  701. package/dist/usecases/script/replace.d.ts +0 -3
  702. package/dist/usecases/script/replace.js +0 -33
  703. package/dist/usecases/script/replace.js.map +0 -1
  704. package/dist/usecases/script/review.d.ts +0 -3
  705. package/dist/usecases/script/review.js +0 -187
  706. package/dist/usecases/script/review.js.map +0 -1
  707. package/dist/usecases/script/role.d.ts +0 -3
  708. package/dist/usecases/script/role.js +0 -16
  709. package/dist/usecases/script/role.js.map +0 -1
  710. package/dist/usecases/script/scenes.d.ts +0 -3
  711. package/dist/usecases/script/scenes.js +0 -66
  712. package/dist/usecases/script/scenes.js.map +0 -1
  713. package/dist/usecases/script/script-patch.d.ts +0 -3
  714. package/dist/usecases/script/script-patch.js +0 -321
  715. package/dist/usecases/script/script-patch.js.map +0 -1
  716. package/dist/usecases/script/script-validate.d.ts +0 -3
  717. package/dist/usecases/script/script-validate.js +0 -27
  718. package/dist/usecases/script/script-validate.js.map +0 -1
  719. package/dist/usecases/script/session.d.ts +0 -62
  720. package/dist/usecases/script/session.js +0 -567
  721. package/dist/usecases/script/session.js.map +0 -1
  722. package/dist/usecases/script/split.d.ts +0 -3
  723. package/dist/usecases/script/split.js +0 -41
  724. package/dist/usecases/script/split.js.map +0 -1
  725. package/dist/usecases/script/state-add.d.ts +0 -3
  726. package/dist/usecases/script/state-add.js +0 -22
  727. package/dist/usecases/script/state-add.js.map +0 -1
  728. package/dist/usecases/script/state-delete.d.ts +0 -3
  729. package/dist/usecases/script/state-delete.js +0 -22
  730. package/dist/usecases/script/state-delete.js.map +0 -1
  731. package/dist/usecases/script/state-rename.d.ts +0 -3
  732. package/dist/usecases/script/state-rename.js +0 -16
  733. package/dist/usecases/script/state-rename.js.map +0 -1
  734. package/dist/usecases/script/states.d.ts +0 -3
  735. package/dist/usecases/script/states.js +0 -197
  736. package/dist/usecases/script/states.js.map +0 -1
  737. package/dist/usecases/script/summary.d.ts +0 -3
  738. package/dist/usecases/script/summary.js +0 -72
  739. package/dist/usecases/script/summary.js.map +0 -1
  740. package/dist/usecases/script/synopsis-generate.d.ts +0 -115
  741. package/dist/usecases/script/synopsis-generate.js +0 -776
  742. package/dist/usecases/script/synopsis-generate.js.map +0 -1
  743. package/dist/usecases/script/synopsis.d.ts +0 -3
  744. package/dist/usecases/script/synopsis.js +0 -45
  745. package/dist/usecases/script/synopsis.js.map +0 -1
  746. package/dist/usecases/script/timestamp-filter.d.ts +0 -4
  747. package/dist/usecases/script/timestamp-filter.js +0 -55
  748. package/dist/usecases/script/timestamp-filter.js.map +0 -1
  749. package/dist/usecases/script/timestamp.d.ts +0 -3
  750. package/dist/usecases/script/timestamp.js +0 -11
  751. package/dist/usecases/script/timestamp.js.map +0 -1
  752. package/dist/usecases/script/transition.d.ts +0 -3
  753. package/dist/usecases/script/transition.js +0 -23
  754. package/dist/usecases/script/transition.js.map +0 -1
  755. package/dist/usecases/script/type.d.ts +0 -3
  756. package/dist/usecases/script/type.js +0 -23
  757. package/dist/usecases/script/type.js.map +0 -1
  758. package/dist/usecases/script/v3/mutations.d.ts +0 -2
  759. package/dist/usecases/script/v3/mutations.js +0 -5
  760. package/dist/usecases/script/v3/mutations.js.map +0 -1
  761. package/dist/usecases/script/v4/mutations.d.ts +0 -2
  762. package/dist/usecases/script/v4/mutations.js +0 -6
  763. package/dist/usecases/script/v4/mutations.js.map +0 -1
  764. package/dist/usecases/script/v4/queries.d.ts +0 -15
  765. package/dist/usecases/script/v4/queries.js +0 -196
  766. package/dist/usecases/script/v4/queries.js.map +0 -1
  767. package/dist/usecases/script/working-copy.d.ts +0 -5
  768. package/dist/usecases/script/working-copy.js +0 -399
  769. package/dist/usecases/script/working-copy.js.map +0 -1
  770. package/dist/usecases/script/worldview.d.ts +0 -3
  771. package/dist/usecases/script/worldview.js +0 -17
  772. package/dist/usecases/script/worldview.js.map +0 -1
  773. package/dist/usecases/script/write-authoring.d.ts +0 -3
  774. package/dist/usecases/script/write-authoring.js +0 -263
  775. package/dist/usecases/script/write-authoring.js.map +0 -1
  776. package/dist/usecases/update.d.ts +0 -13
  777. package/dist/usecases/update.js +0 -128
  778. package/dist/usecases/update.js.map +0 -1
@@ -1,440 +0,0 @@
1
- // Review HTML renderer (§4 view / §10 pass6). Pure: Script v3 doc → the verified
2
- // cezhi-verify review UI (dual-tab 剧本审阅 / 资产总览, left video + right script
3
- // rows, click a row to seek, per-actor state×episode matrix, scene chips). The
4
- // HTML/CSS/JS is ported VERBATIM from the scaffold's 06_build_review_html; only
5
- // the data it reads is transformed here from v3 into the shape that UI expects
6
- // (asset_name / actor_names / actor_states / scene_num / location_name /
7
- // action.extend.timestamp). Video is referenced relatively as src/ep_NNN.mp4
8
- // (the view command symlinks the media into the workspace).
9
- const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
10
- const isArr = (v) => Array.isArray(v);
11
- const S = (v) => (typeof v === "string" ? v : "");
12
- const SPACE_EN_TO_ZH = { interior: "内", exterior: "外" };
13
- const TIME_EN_TO_ZH = { day: "日", night: "夜" };
14
- const epNum = (episodeId) => { const m = episodeId.match(/(\d+)/); return m ? Number(m[1]) : 0; };
15
- const scnNum = (sceneId) => { const m = sceneId.match(/(\d+)/); return m ? Number(m[1]) : 0; };
16
- function nameMap(list, idField, nameField) {
17
- const m = new Map();
18
- if (isArr(list))
19
- for (const a of list)
20
- if (isObj(a) && typeof a[idField] === "string")
21
- m.set(a[idField], S(a[nameField]));
22
- return m;
23
- }
24
- function stateNameMap(list, idField) {
25
- const m = new Map();
26
- if (isArr(list))
27
- for (const a of list) {
28
- if (!isObj(a) || typeof a[idField] !== "string")
29
- continue;
30
- const sm = new Map();
31
- for (const st of isArr(a.states) ? a.states : [])
32
- if (isObj(st) && typeof st.state_id === "string")
33
- sm.set(st.state_id, S(st.state_name));
34
- m.set(a[idField], sm);
35
- }
36
- return m;
37
- }
38
- // v3 speaker → display string (actor name, or kind[:label]).
39
- function speakerLabel(speaker, actorNames) {
40
- if (!isObj(speaker))
41
- return "";
42
- if (typeof speaker.actor_id === "string")
43
- return actorNames.get(speaker.actor_id) ?? speaker.actor_id;
44
- if (typeof speaker.kind === "string")
45
- return `${speaker.kind}${speaker.label ? `:${S(speaker.label)}` : ""}`;
46
- return "";
47
- }
48
- // Transform a v3 script into the scaffold review-model consumed by the UI JS.
49
- function toReviewModel(doc) {
50
- const actorNames = nameMap(doc.actors, "actor_id", "actor_name");
51
- const locNames = nameMap(doc.locations, "location_id", "location_name");
52
- const propNames = nameMap(doc.props, "prop_id", "prop_name");
53
- const actorStates = stateNameMap(doc.actors, "actor_id");
54
- const episodes = (isArr(doc.episodes) ? doc.episodes : []).filter(isObj).map((ep) => ({
55
- episode: epNum(S(ep.episode_id)),
56
- synopsis: S(ep.synopsis),
57
- scenes: (isArr(ep.scenes) ? ep.scenes : []).filter(isObj).map((sc) => {
58
- const loc = isObj(sc.location) ? (locNames.get(S(sc.location.location_id)) ?? S(sc.location.location_id)) : "";
59
- const anames = [];
60
- const astates = {};
61
- for (const r of isArr(sc.actors) ? sc.actors : []) {
62
- if (!isObj(r) || typeof r.actor_id !== "string")
63
- continue;
64
- const nm = actorNames.get(r.actor_id) ?? r.actor_id;
65
- if (!anames.includes(nm))
66
- anames.push(nm);
67
- // Show the state's name whenever it HAS one — including a named `default`.
68
- // In the video path `default` is the character's real main outfit (e.g.
69
- // 「京北大学白色球衣」), not an anonymous baseline, so excluding it hid the
70
- // dominant look under 「未标注」. A `default` with an empty name (the text
71
- // path's nameless baseline) still falls through to 未标注 as before.
72
- if (typeof r.state_id === "string") {
73
- const sn = actorStates.get(r.actor_id)?.get(r.state_id) ?? "";
74
- const label = sn || (r.state_id !== "default" ? r.state_id : "");
75
- if (label)
76
- astates[nm] = label;
77
- }
78
- }
79
- const pnames = [];
80
- for (const r of isArr(sc.props) ? sc.props : [])
81
- if (isObj(r) && typeof r.prop_id === "string") {
82
- const nm = propNames.get(r.prop_id) ?? r.prop_id;
83
- if (!pnames.includes(nm))
84
- pnames.push(nm);
85
- }
86
- const env = isObj(sc.environment) ? sc.environment : {};
87
- return {
88
- scene_num: scnNum(S(sc.scene_id)),
89
- location_name: loc,
90
- environment: { space: SPACE_EN_TO_ZH[S(env.space)] ?? S(env.space), time: TIME_EN_TO_ZH[S(env.time)] ?? S(env.time) },
91
- actor_names: anames,
92
- actor_states: astates,
93
- prop_names: pnames,
94
- actions: (isArr(sc.actions) ? sc.actions : []).filter(isObj).map((a) => ({
95
- type: S(a.type),
96
- content: S(a.content),
97
- speaker: speakerLabel(a.speaker, actorNames),
98
- emotion: typeof a.emotion === "string" ? a.emotion : undefined,
99
- extend: isObj(a.extend) && typeof a.extend.timestamp === "string" ? { timestamp: a.extend.timestamp } : undefined,
100
- })),
101
- };
102
- }),
103
- }));
104
- const actors = (isArr(doc.actors) ? doc.actors : []).filter(isObj).map((a) => ({
105
- asset_name: S(a.actor_name),
106
- description: S(a.description),
107
- extend: {},
108
- }));
109
- return { title: S(doc.title), actors, episodes };
110
- }
111
- export function renderReviewHtml(doc) {
112
- if (!isObj(doc))
113
- throw new Error("review renderer expects a script object");
114
- const model = toReviewModel(doc);
115
- const data = JSON.stringify(model);
116
- const title = S(model.title);
117
- return `<!DOCTYPE html>
118
- <html lang="zh">
119
- <head>
120
- <meta charset="utf-8">
121
- <title>剧本审阅器 · ${title}</title>
122
- <style>
123
- * { box-sizing: border-box; }
124
- html, body { margin: 0; height: 100%; font: 14px/1.6 -apple-system, "PingFang SC", system-ui, sans-serif; color: #1a1a1a; }
125
- body { display: flex; flex-direction: column; height: 100vh; background: #f5f5f7; }
126
- header { display: flex; align-items: center; gap: 12px; padding: 8px 14px; background: #fff; border-bottom: 1px solid #ddd; flex: none; }
127
- header h1 { font-size: 15px; margin: 0; font-weight: 600; }
128
- header select, header .nav { font-size: 13px; padding: 4px 8px; border: 1px solid #ccc; border-radius: 6px; background: #fff; cursor: pointer; }
129
- header .spacer { flex: 1; }
130
- header .hint { color: #888; font-size: 12px; }
131
- main { flex: 1; display: flex; min-height: 0; }
132
- .left { width: 42%; min-width: 320px; max-width: 620px; background: #000; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; position: relative; }
133
- .left video { width: 100%; height: auto; max-height: 72vh; background: #000; }
134
- .vbar { color: #ccc; font-size: 12px; padding: 6px 10px; width: 100%; display: flex; gap: 12px; align-items: center; background: #111; }
135
- .vbar b { color: #fff; font-variant-numeric: tabular-nums; }
136
- .right { flex: 1; overflow-y: auto; padding: 10px 4px 40vh 4px; background: #fafafa; }
137
- .syn { background: #fff7e6; border: 1px solid #ffe0a3; border-radius: 8px; padding: 10px 12px; margin: 8px 10px 14px; color: #5b4a1f; font-size: 13px; }
138
- .scene { margin: 0 10px 14px; border: 1px solid #e5e5e5; border-radius: 8px; overflow: hidden; background: #fff; }
139
- .scene-head { background: #eef2f7; padding: 6px 12px; font-size: 12px; color: #445; display: flex; gap: 14px; flex-wrap: wrap; }
140
- .scene-head .loc { font-weight: 600; color: #223; }
141
- .rows { }
142
- .row { display: flex; gap: 10px; padding: 5px 12px; border-top: 1px solid #f0f0f0; cursor: pointer; align-items: baseline; }
143
- .row:hover { background: #eef6ff; }
144
- .row.active { background: #d8ecff; }
145
- .row .ts { flex: none; width: 46px; color: #3a7; font-variant-numeric: tabular-nums; font-size: 12px; }
146
- .row .kind { flex: none; width: 58px; font-size: 12px; }
147
- .row .kind.act { color: #999; }
148
- .row .kind.dlg { color: #c60; font-weight: 600; }
149
- .row .kind.think { color: #96c; font-style: italic; }
150
- .row .body { flex: 1; }
151
- .row .spk { color: #c60; font-weight: 600; margin-right: 4px; }
152
- .row .emo { color: #a8a; font-size: 12px; margin-left: 4px; }
153
- .row .body .subtitle { color: #b00; } /* 画面字幕引述,红色标出 */
154
- /* ===== Tab ===== */
155
- header .tabs { display: flex; gap: 4px; }
156
- header .tab { font-size: 13px; padding: 5px 14px; border: 1px solid #ccc; border-radius: 6px; background: #fff; cursor: pointer; color: #555; }
157
- header .tab.active { background: #1a6dff; color: #fff; border-color: #1a6dff; font-weight: 600; }
158
- header .ep-ctl { display: flex; gap: 8px; align-items: center; }
159
- /* ===== 资产总览 ===== */
160
- .assets { flex: 1; overflow-y: auto; padding: 16px 18px 30vh; background: #f5f5f7; }
161
- .asset-sec { margin: 0 0 26px; }
162
- .asset-sec > h2 { font-size: 15px; margin: 4px 0 12px; color: #223; display: flex; align-items: center; gap: 8px; }
163
- .asset-sec > h2 .cnt { font-size: 12px; font-weight: 400; color: #888; background: #ececf0; padding: 1px 8px; border-radius: 10px; }
164
- .acard { background: #fff; border: 1px solid #e3e3e6; border-radius: 10px; padding: 14px 16px; margin-bottom: 12px; }
165
- .acard .ah { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
166
- .acard .ah .nm { font-size: 17px; font-weight: 700; color: #1a1a1a; }
167
- .acard .ah .id { font-size: 12px; color: #aaa; font-variant-numeric: tabular-nums; }
168
- .acard .ah .meta { margin-left: auto; font-size: 12px; color: #888; display: flex; gap: 6px; }
169
- .acard .ah .meta .tag { background: #f0f0f3; border-radius: 6px; padding: 1px 8px; }
170
- .acard .desc { font-size: 13px; color: #555; margin: 7px 0 4px; }
171
- .acard .anchor { font-size: 12px; color: #999; margin-bottom: 8px; }
172
- /* 状态×集 矩阵 */
173
- .mtx { overflow-x: auto; margin-top: 8px; border: 1px solid #eee; border-radius: 8px; }
174
- table.tl { border-collapse: collapse; font-size: 12px; width: 100%; }
175
- table.tl th, table.tl td { border: 1px solid #eee; padding: 5px 7px; text-align: center; white-space: nowrap; }
176
- table.tl thead th { background: #f7f7f9; color: #556; font-weight: 600; position: sticky; top: 0; }
177
- table.tl .stname { text-align: left; font-weight: 600; color: #333; background: #fafafa; position: sticky; left: 0; min-width: 130px; max-width: 220px; white-space: normal; }
178
- table.tl .stname.unmk { color: #999; font-weight: 400; }
179
- table.tl .stname .dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 6px; vertical-align: middle; }
180
- table.tl .stname .sc { color: #aaa; font-weight: 400; font-size: 11px; margin-left: 4px; }
181
- table.tl td.cell { color: #ccc; }
182
- table.tl td.hit { background: #fff0f0; }
183
- table.tl td.hit.unmk { background: #f2f2f2; }
184
- .scc { display: inline-block; min-width: 20px; margin: 1px; padding: 1px 6px; border-radius: 6px; font-variant-numeric: tabular-nums; cursor: pointer; }
185
- .scc.on { background: #f4c9c9; color: #7a1f1f; border: 1px solid #e8a9a9; }
186
- .scc.on.unmk { background: #dcdcdc; color: #555; border-color: #c9c9c9; }
187
- .scc.on:hover { filter: brightness(0.94); }
188
- </style>
189
- </head>
190
- <body>
191
- <header>
192
- <h1>${title || "剧本审阅器"}</h1>
193
- <div class="tabs">
194
- <button class="tab active" id="tab-script">剧本审阅</button>
195
- <button class="tab" id="tab-assets">资产总览</button>
196
- </div>
197
- <span class="ep-ctl">
198
- <select id="epsel"></select>
199
- <button class="nav" id="prev">◀ 上一集</button>
200
- <button class="nav" id="next">下一集 ▶</button>
201
- </span>
202
- <span class="spacer"></span>
203
- <span class="hint" id="hint">点任意剧本行 → 视频跳到该时间戳</span>
204
- </header>
205
- <main id="view-script">
206
- <div class="left">
207
- <video id="vid" controls preload="metadata"></video>
208
- <div class="vbar"><span>当前 <b id="cur">00:00</b></span><span id="epinfo"></span></div>
209
- </div>
210
- <div class="right" id="right"></div>
211
- </main>
212
- <div id="view-assets" class="assets" style="display:none"></div>
213
- <script>
214
- const SCRIPT = ${data};
215
- const eps = SCRIPT.episodes.slice().sort((a,b)=>a.episode-b.episode);
216
- const vid = document.getElementById('vid');
217
- const right = document.getElementById('right');
218
- const epsel = document.getElementById('epsel');
219
- const cur = document.getElementById('cur');
220
- const epinfo = document.getElementById('epinfo');
221
- let curEp = eps.length?eps[0].episode:1;
222
-
223
- function pad(n){return String(n).padStart(2,'0');}
224
- function fmt(sec){sec=Math.max(0,sec|0);return pad(sec/60|0)+':'+pad(sec%60);}
225
- function tsToSec(ts){if(!ts)return null;const m=String(ts).match(/(?:(\\d{1,2}):)?(\\d{1,2}):(\\d{2}(?:\\.\\d{1,3})?)/);return m?(+(m[1]||0))*3600+(+m[2])*60+(+m[3]):null;}
226
- function epId(n){return 'ep_'+String(n).padStart(3,'0');}
227
- function actKind(t){return t==='dialogue'?'dlg':t==='inner_thought'?'think':'act';}
228
- function actTs(a){return a && a.extend ? a.extend.timestamp : undefined;}
229
-
230
- function renderBody(content){
231
- const esc = content.replace(/&/g,'&amp;').replace(/</g,'&lt;');
232
- return esc.replace(/(画面(?:字幕|文字)[::][^。!?\\n]*)/g,'<span class="subtitle">$1</span>');
233
- }
234
-
235
- for(const e of eps){
236
- const o=document.createElement('option');
237
- o.value=e.episode; o.textContent='第 '+e.episode+' 集';
238
- epsel.appendChild(o);
239
- }
240
-
241
- function loadEp(n, targetScene){
242
- curEp=n;
243
- epsel.value=n;
244
- vid.src='src/'+epId(n)+'.mp4';
245
- const ep=eps.find(e=>e.episode===n);
246
- if(!ep)return;
247
- epinfo.textContent='第'+n+'集 · '+ep.scenes.length+'场';
248
- right.innerHTML='';
249
- if(ep.synopsis){const s=document.createElement('div');s.className='syn';s.textContent='梗概:'+ep.synopsis;right.appendChild(s);}
250
- for(const sc of ep.scenes){
251
- const box=document.createElement('div');box.className='scene';
252
- box.dataset.scene=sc.scene_num;
253
- const head=document.createElement('div');head.className='scene-head';
254
- const env=(sc.environment&&(sc.environment.space||'')+' '+(sc.environment.time||''))||'';
255
- const chNames=sc.actor_names||[]; const chSt=sc.actor_states||{};
256
- head.innerHTML='<span class="loc">场景'+sc.scene_num+' · '+(sc.location_name||'')+'</span>'+
257
- '<span>'+env+'</span>'+
258
- (chNames.length?'<span>角色: '+chNames.map(nm=>nm+(chSt[nm]?'('+chSt[nm]+')':'')).join('、')+'</span>':'');
259
- box.appendChild(head);
260
- const rows=document.createElement('div');rows.className='rows';
261
- for(const a of sc.actions){
262
- const ts=actTs(a); const kd=actKind(a.type); const sec=tsToSec(ts);
263
- const row=document.createElement('div');row.className='row';row.dataset.sec=sec==null?'':sec;
264
- const spk=a.speaker?'<span class="spk">'+a.speaker+'</span>':'';
265
- const emo=a.emotion?'<span class="emo">['+a.emotion+']</span>':'';
266
- row.innerHTML='<span class="ts">'+(ts||'')+'</span>'+
267
- '<span class="kind '+kd+'">'+kd+'</span>'+
268
- '<span class="body">'+spk+renderBody(a.content)+emo+'</span>';
269
- if(sec!=null)row.addEventListener('click',()=>{vid.currentTime=sec;vid.play();});
270
- rows.appendChild(row);
271
- }
272
- box.appendChild(rows);right.appendChild(box);
273
- }
274
- if(targetScene){
275
- const tb=right.querySelector('.scene[data-scene="'+targetScene+'"]');
276
- if(tb){tb.scrollIntoView({block:'start'}); tb.style.outline='2px solid #1a6dff'; setTimeout(()=>tb.style.outline='',1600);}
277
- } else { right.scrollTop=0; }
278
- }
279
-
280
- vid.addEventListener('timeupdate',()=>{
281
- cur.textContent=fmt(vid.currentTime);
282
- const t=vid.currentTime;
283
- const rows=[...right.querySelectorAll('.row')].filter(r=>r.dataset.sec!=='');
284
- let active=null;
285
- for(const r of rows){ if(+r.dataset.sec<=t+0.25) active=r; else break; }
286
- right.querySelectorAll('.row.active').forEach(r=>r.classList.remove('active'));
287
- if(active){active.classList.add('active');}
288
- });
289
-
290
- epsel.addEventListener('change',()=>loadEp(+epsel.value));
291
- document.getElementById('prev').addEventListener('click',()=>{const i=eps.findIndex(e=>e.episode===curEp);if(i>0)loadEp(eps[i-1].episode);});
292
- document.getElementById('next').addEventListener('click',()=>{const i=eps.findIndex(e=>e.episode===curEp);if(i<eps.length-1)loadEp(eps[i+1].episode);});
293
-
294
- if(eps.length)loadEp(curEp);
295
-
296
- // ===================== 资产总览 =====================
297
- const allEps = eps.map(e=>e.episode).sort((a,b)=>a-b);
298
- const actorMeta = {};
299
- for(const a of (SCRIPT.actors||[])){
300
- const ext=a.extend||{};
301
- actorMeta[a.asset_name]={role:a.description||'',anchor:ext.anchor||''};
302
- }
303
-
304
- function aggAssets(){
305
- const person={}, loc={}, prop={};
306
- const addP=(nm,st,n,idx)=>{(person[nm]=person[nm]||{});(person[nm][st]=person[nm][st]||new Map()).set(n+':'+idx,{n,idx});};
307
- const addX=(bag,nm,n,idx)=>{(bag[nm]=bag[nm]||new Map()).set(n+':'+idx,{n,idx});};
308
- for(const ep of eps){ const n=ep.episode;
309
- for(const sc of ep.scenes){ const idx=sc.scene_num;
310
- const names=sc.actor_names||[]; const st=sc.actor_states||{};
311
- for(const nm of names) addP(nm, st[nm]||'未标注', n, idx);
312
- if(sc.location_name) addX(loc, sc.location_name, n, idx);
313
- for(const p of (sc.prop_names||[])) addX(prop, p, n, idx);
314
- }
315
- }
316
- return {person,loc,prop};
317
- }
318
- const AG = aggAssets();
319
-
320
- function epsOf(occMaps){ const s=new Set(); for(const m of occMaps) for(const {n} of m.values()) s.add(n); return [...s].sort((a,b)=>a-b); }
321
- function sceneChips(occMap, unmk){
322
- const byEp={}; for(const {n,idx} of occMap.values()){(byEp[n]=byEp[n]||[]).push(idx);}
323
- return byEp;
324
- }
325
- function chipEl(n, idx, unmk){
326
- const c=document.createElement('span'); c.className='scc on'+(unmk?' unmk':''); c.textContent=idx;
327
- c.title='第'+n+'集 · 场'+idx+' → 跳转';
328
- c.addEventListener('click',(e)=>{e.stopPropagation();gotoScene(n,idx);});
329
- return c;
330
- }
331
- function gotoScene(n, idx){ switchTab('script'); loadEp(n, idx); }
332
-
333
- function personCard(name){
334
- const states=AG.person[name]; const stKeys=Object.keys(states);
335
- const involved=epsOf(Object.values(states));
336
- const card=document.createElement('div'); card.className='acard';
337
- const meta=actorMeta[name]||{};
338
- const totalScenes=new Set(); for(const m of Object.values(states)) for(const k of m.keys()) totalScenes.add(k);
339
- const head=document.createElement('div'); head.className='ah';
340
- head.innerHTML='<span class="nm">'+esc(name)+'</span>'+
341
- '<span class="meta"><span class="tag">'+totalScenes.size+' 场</span><span class="tag">'+involved.length+' 集</span><span class="tag">'+stKeys.length+' 状态</span></span>';
342
- card.appendChild(head);
343
- if(meta.role){const d=document.createElement('div');d.className='desc';d.textContent=meta.role;card.appendChild(d);}
344
- if(meta.anchor){const d=document.createElement('div');d.className='anchor';d.textContent='锚点:'+meta.anchor;card.appendChild(d);}
345
- const wrap=document.createElement('div'); wrap.className='mtx';
346
- const tb=document.createElement('table'); tb.className='tl';
347
- let thead='<thead><tr><th class="stname">状态\集</th>';
348
- for(const n of involved) thead+='<th>'+n+'</th>';
349
- thead+='</tr></thead>';
350
- const ordered=stKeys.filter(s=>s!=='未标注').sort((a,b)=>states[b].size-states[a].size);
351
- if(states['未标注']) ordered.push('未标注');
352
- const tbody=document.createElement('tbody');
353
- for(const st of ordered){
354
- const unmk=st==='未标注';
355
- const byEp=sceneChips(states[st], unmk);
356
- const tr=document.createElement('tr');
357
- const th=document.createElement('td'); th.className='stname'+(unmk?' unmk':'');
358
- th.innerHTML='<span class="dot" style="background:'+(unmk?'#bbb':'#d9534f')+'"></span>'+esc(st)+'<span class="sc">'+states[st].size+'</span>';
359
- tr.appendChild(th);
360
- for(const n of involved){
361
- const td=document.createElement('td'); td.className='cell'+(byEp[n]?' hit'+(unmk?' unmk':''):'');
362
- if(byEp[n]){ for(const idx of byEp[n].sort((a,b)=>a-b)) td.appendChild(chipEl(n,idx,unmk)); }
363
- tr.appendChild(td);
364
- }
365
- tbody.appendChild(tr);
366
- }
367
- tb.innerHTML=thead; tb.appendChild(tbody);
368
- wrap.appendChild(tb); card.appendChild(wrap);
369
- return card;
370
- }
371
-
372
- function occCard(name, occMap){
373
- const involved=epsOf([occMap]);
374
- const card=document.createElement('div'); card.className='acard';
375
- const head=document.createElement('div'); head.className='ah';
376
- head.innerHTML='<span class="nm">'+esc(name)+'</span>'+
377
- '<span class="meta"><span class="tag">'+occMap.size+' 场</span><span class="tag">'+involved.length+' 集</span></span>';
378
- card.appendChild(head);
379
- const wrap=document.createElement('div'); wrap.className='mtx';
380
- const tb=document.createElement('table'); tb.className='tl';
381
- let thead='<thead><tr><th class="stname">出现\集</th>';
382
- for(const n of involved) thead+='<th>'+n+'</th>'; thead+='</tr></thead>';
383
- const byEp=sceneChips(occMap,false);
384
- const tbody=document.createElement('tbody'); const tr=document.createElement('tr');
385
- const th=document.createElement('td'); th.className='stname';
386
- th.innerHTML='<span class="dot" style="background:#5b8def"></span>出现';
387
- tr.appendChild(th);
388
- for(const n of involved){ const td=document.createElement('td'); td.className='cell'+(byEp[n]?' hit':'');
389
- if(byEp[n]){ for(const idx of byEp[n].sort((a,b)=>a-b)) td.appendChild(chipEl(n,idx,false)); } tr.appendChild(td);}
390
- tbody.appendChild(tr); tb.innerHTML=thead; tb.appendChild(tbody);
391
- wrap.appendChild(tb); card.appendChild(wrap);
392
- return card;
393
- }
394
-
395
- function esc(s){return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;');}
396
-
397
- let assetsRendered=false;
398
- function renderAssets(){
399
- if(assetsRendered) return; assetsRendered=true;
400
- const root=document.getElementById('view-assets');
401
- const persons=Object.keys(AG.person).sort((a,b)=>{
402
- const ea=new Set(),eb=new Set();
403
- for(const m of Object.values(AG.person[a])) for(const {n} of m.values()) ea.add(n);
404
- for(const m of Object.values(AG.person[b])) for(const {n} of m.values()) eb.add(n);
405
- return eb.size-ea.size;
406
- });
407
- const secP=document.createElement('div'); secP.className='asset-sec';
408
- secP.innerHTML='<h2>人物 <span class="cnt">'+persons.length+'</span></h2>';
409
- for(const nm of persons) secP.appendChild(personCard(nm));
410
- root.appendChild(secP);
411
- const locs=Object.keys(AG.loc).sort((a,b)=>AG.loc[b].size-AG.loc[a].size);
412
- const secL=document.createElement('div'); secL.className='asset-sec';
413
- secL.innerHTML='<h2>场景 <span class="cnt">'+locs.length+'</span></h2>';
414
- for(const nm of locs) secL.appendChild(occCard(nm,AG.loc[nm]));
415
- root.appendChild(secL);
416
- const props=Object.keys(AG.prop).sort((a,b)=>AG.prop[b].size-AG.prop[a].size);
417
- const secD=document.createElement('div'); secD.className='asset-sec';
418
- secD.innerHTML='<h2>道具 <span class="cnt">'+props.length+'</span></h2>';
419
- for(const nm of props) secD.appendChild(occCard(nm,AG.prop[nm]));
420
- root.appendChild(secD);
421
- }
422
-
423
- const tabScript=document.getElementById('tab-script'), tabAssets=document.getElementById('tab-assets');
424
- const viewScript=document.getElementById('view-script'), viewAssets=document.getElementById('view-assets');
425
- const epCtl=document.querySelector('.ep-ctl'), hint=document.getElementById('hint');
426
- function switchTab(which){
427
- const asset=which==='assets';
428
- tabScript.classList.toggle('active',!asset); tabAssets.classList.toggle('active',asset);
429
- viewScript.style.display=asset?'none':'flex'; viewAssets.style.display=asset?'block':'none';
430
- epCtl.style.display=asset?'none':'flex';
431
- hint.textContent=asset?'点场号 → 跳回剧本审阅对应集/场':'点任意剧本行 → 视频跳到该时间戳';
432
- if(asset) renderAssets();
433
- }
434
- tabScript.addEventListener('click',()=>switchTab('script'));
435
- tabAssets.addEventListener('click',()=>switchTab('assets'));
436
- </script>
437
- </body>
438
- </html>`;
439
- }
440
- //# sourceMappingURL=review-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"review-renderer.js","sourceRoot":"","sources":["../../../src/infra/ingest/review-renderer.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- export declare const TEXT_EXTENSIONS: readonly [".txt", ".md", ".docx"];
2
- export declare const VIDEO_MIME: Readonly<Record<string, string>>;
3
- export type SourceKind = "text" | "video-file" | "video-directory";
4
- export declare class UnsupportedInputError extends Error {
5
- readonly received: string;
6
- constructor(received: string);
7
- }
8
- export type ResolvedSource = {
9
- kind: "text";
10
- path: string;
11
- ext: string;
12
- } | {
13
- kind: "video-file";
14
- path: string;
15
- ext: string;
16
- } | {
17
- kind: "video-directory";
18
- path: string;
19
- files: string[];
20
- };
21
- export declare function resolveSource(sourcePath: string): ResolvedSource;
@@ -1,51 +0,0 @@
1
- // Ingest source resolver (§3.2/§10.1). Classifies a source path into text or
2
- // video and enforces the strict input allowlist. PDF/JSON/XLSX are explicitly
3
- // unsupported here (they belong to other commands), returning a clear error.
4
- import * as fs from "node:fs";
5
- import * as path from "node:path";
6
- export const TEXT_EXTENSIONS = [".txt", ".md", ".docx"];
7
- // Common Gemini-ingestible video containers (§10.1); extension → MIME.
8
- export const VIDEO_MIME = {
9
- ".mp4": "video/mp4",
10
- ".mov": "video/mov",
11
- ".avi": "video/avi",
12
- ".mpeg": "video/mpeg",
13
- ".mpg": "video/mpg",
14
- ".webm": "video/webm",
15
- ".flv": "video/x-flv",
16
- ".wmv": "video/wmv",
17
- };
18
- export class UnsupportedInputError extends Error {
19
- received;
20
- constructor(received) {
21
- super(`Unsupported input: ${received}`);
22
- this.received = received;
23
- }
24
- }
25
- function ext(p) {
26
- return path.extname(p).toLowerCase();
27
- }
28
- function isVideoExt(e) {
29
- return Object.hasOwn(VIDEO_MIME, e);
30
- }
31
- export function resolveSource(sourcePath) {
32
- const stat = fs.statSync(sourcePath);
33
- if (stat.isDirectory()) {
34
- // Directory input is only for a set of video episodes (§10.1); scan one level.
35
- const entries = fs.readdirSync(sourcePath)
36
- .filter((name) => !name.startsWith("."))
37
- .filter((name) => isVideoExt(ext(name)))
38
- .sort()
39
- .map((name) => path.join(sourcePath, name));
40
- if (entries.length === 0)
41
- throw new UnsupportedInputError(`directory has no supported video files: ${sourcePath}`);
42
- return { kind: "video-directory", path: sourcePath, files: entries };
43
- }
44
- const e = ext(sourcePath);
45
- if (TEXT_EXTENSIONS.includes(e))
46
- return { kind: "text", path: sourcePath, ext: e };
47
- if (isVideoExt(e))
48
- return { kind: "video-file", path: sourcePath, ext: e };
49
- throw new UnsupportedInputError(`file extension ${e || "(none)"} is not supported by ingest (txt/md/docx/video only)`);
50
- }
51
- //# sourceMappingURL=source-resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"source-resolver.js","sourceRoot":"","sources":["../../../src/infra/ingest/source-resolver.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAE7E,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAU,CAAC;AAEjE,uEAAuE;AACvE,MAAM,CAAC,MAAM,UAAU,GAAqC;IAC1D,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,WAAW;CACpB,CAAC;AAIF,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACzB;IAArB,YAAqB,QAAgB;QACnC,KAAK,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;QADrB,aAAQ,GAAR,QAAQ,CAAQ;IAErC,CAAC;CACF;AAED,SAAS,GAAG,CAAC,CAAS;IACpB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC;AAOD,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,+EAA+E;QAC/E,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;aACvC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aACvC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;aACvC,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,qBAAqB,CAAC,2CAA2C,UAAU,EAAE,CAAC,CAAC;QACnH,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACvE,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,IAAK,eAAqC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC1G,IAAI,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IAC3E,MAAM,IAAI,qBAAqB,CAAC,kBAAkB,CAAC,IAAI,QAAQ,sDAAsD,CAAC,CAAC;AACzH,CAAC"}
@@ -1,3 +0,0 @@
1
- export declare class SourceDecodeError extends Error {
2
- }
3
- export declare function readTextSource(sourcePath: string, ext: string): Promise<string>;
@@ -1,27 +0,0 @@
1
- // Text source reader (§pass1-prepare). Strict UTF-8 decode (rejects invalid
2
- // bytes), BOM strip, CRLF/CR → LF. Markdown is preserved verbatim (order,
3
- // headings, lists) — no screenplay interpretation here. DOCX reuses the existing
4
- // OpenXML converter, then goes through the same normalization.
5
- import * as fs from "node:fs";
6
- import { convertDocx } from "../converters.js";
7
- export class SourceDecodeError extends Error {
8
- }
9
- function normalize(text) {
10
- return text.replace(/^/, "").replace(/\r\n?/g, "\n");
11
- }
12
- function decodeUtf8Strict(buf) {
13
- try {
14
- return new TextDecoder("utf-8", { fatal: true }).decode(buf);
15
- }
16
- catch {
17
- throw new SourceDecodeError("source is not valid UTF-8");
18
- }
19
- }
20
- export async function readTextSource(sourcePath, ext) {
21
- if (ext === ".docx") {
22
- const [text] = await convertDocx(sourcePath);
23
- return normalize(text);
24
- }
25
- return normalize(decodeUtf8Strict(fs.readFileSync(sourcePath)));
26
- }
27
- //# sourceMappingURL=text-reader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"text-reader.js","sourceRoot":"","sources":["../../../src/infra/ingest/text-reader.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,0EAA0E;AAC1E,iFAAiF;AACjF,+DAA+D;AAE/D,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,OAAO,iBAAkB,SAAQ,KAAK;CAAG;AAE/C,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,iBAAiB,CAAC,2BAA2B,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB,EAAE,GAAW;IAClE,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;QAC7C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC"}
@@ -1,8 +0,0 @@
1
- import { type ResolvedSource } from "./source-resolver.js";
2
- export interface VideoEpisode {
3
- episode: number;
4
- path: string;
5
- ext: string;
6
- mime: string;
7
- }
8
- export declare function discoverEpisodes(source: ResolvedSource): VideoEpisode[];
@@ -1,69 +0,0 @@
1
- // Video episode discovery (§10.1). Turns a resolved video source into a numbered
2
- // episode list. A single file is episode 1. In a directory: if every file
3
- // carries an episode number, reuse them (and reject duplicates); if none do,
4
- // natural-sort and assign ep 1..N; mixing numbered and unnumbered files fails
5
- // up front rather than guessing an order.
6
- import * as path from "node:path";
7
- import { CliError, EXIT_INPUT } from "../../common.js";
8
- import { VIDEO_MIME } from "./source-resolver.js";
9
- function ext(p) {
10
- return path.extname(p).toLowerCase();
11
- }
12
- function mimeFor(p) {
13
- return VIDEO_MIME[ext(p)] ?? "application/octet-stream";
14
- }
15
- // Prefer an explicit episode marker before falling back to the first run of
16
- // digits. Real series names commonly carry unrelated numbers (for example
17
- // `749局-第35集.mp4`); treating the title number as the episode collapses an
18
- // entire directory into one duplicate episode.
19
- function episodeNumber(file) {
20
- // Strip the extension first — `.mp4`/`.mpeg` carry digits that are not episode
21
- // numbers.
22
- const stem = path.basename(file, path.extname(file));
23
- const explicit = stem.match(/第\s*0*(\d+)\s*[集话回]/u)
24
- ?? stem.match(/(?:^|[._\-\s])(?:ep(?:isode)?|e)\s*[._\-\s]*0*(\d+)(?=$|[._\-\s])/iu);
25
- if (explicit)
26
- return Number(explicit[1]);
27
- const m = stem.match(/\d+/);
28
- return m ? Number(m[0]) : null;
29
- }
30
- function discoveryError(message, received) {
31
- return new CliError(message, {
32
- exitCode: EXIT_INPUT,
33
- errorCode: "INGEST_VIDEO_DISCOVERY",
34
- hint: "Name every episode file with a number, or none of them, and rerun `scriptctl ingest`.",
35
- data: { actual: received },
36
- });
37
- }
38
- function episode(file, n) {
39
- return { episode: n, path: file, ext: ext(file), mime: mimeFor(file) };
40
- }
41
- export function discoverEpisodes(source) {
42
- if (source.kind === "text") {
43
- throw new CliError("discoverEpisodes received a text source.", {
44
- exitCode: EXIT_INPUT,
45
- errorCode: "INGEST_WRONG_PIPELINE",
46
- });
47
- }
48
- if (source.kind === "video-file")
49
- return [episode(source.path, 1)];
50
- const files = source.files; // already one-level, allowlisted, sorted (source-resolver)
51
- const numbers = files.map(episodeNumber);
52
- const numbered = numbers.filter((n) => n !== null);
53
- if (numbered.length === 0) {
54
- // None numbered: keep the resolver's natural sort, assign 1..N.
55
- return files.map((file, i) => episode(file, i + 1));
56
- }
57
- if (numbered.length !== files.length) {
58
- const bad = files.filter((_, i) => numbers[i] === null).map((f) => path.basename(f));
59
- throw discoveryError("Some episode files carry a number and some do not.", [`unnumbered: ${bad.join(", ")}`]);
60
- }
61
- const seen = new Set();
62
- for (const n of numbered) {
63
- if (seen.has(n))
64
- throw discoveryError("Two episode files resolve to the same number.", [`duplicate episode: ${n}`]);
65
- seen.add(n);
66
- }
67
- return files.map((file, i) => episode(file, numbers[i])).sort((a, b) => a.episode - b.episode);
68
- }
69
- //# sourceMappingURL=video-discovery.js.map