@lingjingai/scriptctl 0.63.14 → 0.63.16

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 (781) hide show
  1. package/README.md +12 -1
  2. package/changes/0.63.15.md +15 -0
  3. package/dist/bin.js +1 -20844
  4. package/dist/chunk-YOCQDDQC.js +823 -0
  5. package/dist/cli.d.ts +214 -5
  6. package/dist/cli.js +1 -187
  7. package/dist/review-agent.js +60 -3593
  8. package/package.json +17 -9
  9. package/skills/scriptctl/SKILL.md +2 -0
  10. package/skills/scriptctl/references/ingest-workflow.md +4 -0
  11. package/skills/scriptctl/references/production-writing-standard.md +10 -1
  12. package/skills/scriptctl/references/state-reference-repair.md +8 -0
  13. package/dist/bin.d.ts +0 -2
  14. package/dist/bin.js.map +0 -7
  15. package/dist/cli/register-authoring.d.ts +0 -4
  16. package/dist/cli/register-authoring.js +0 -35
  17. package/dist/cli/register-authoring.js.map +0 -1
  18. package/dist/cli/register-review.d.ts +0 -3
  19. package/dist/cli/register-review.js +0 -20
  20. package/dist/cli/register-review.js.map +0 -1
  21. package/dist/cli/register-script.d.ts +0 -3
  22. package/dist/cli/register-script.js +0 -297
  23. package/dist/cli/register-script.js.map +0 -1
  24. package/dist/cli/register-tools.d.ts +0 -3
  25. package/dist/cli/register-tools.js +0 -23
  26. package/dist/cli/register-tools.js.map +0 -1
  27. package/dist/cli/register-workflows.d.ts +0 -4
  28. package/dist/cli/register-workflows.js +0 -108
  29. package/dist/cli/register-workflows.js.map +0 -1
  30. package/dist/cli/registry.d.ts +0 -14
  31. package/dist/cli/registry.js +0 -65
  32. package/dist/cli/registry.js.map +0 -1
  33. package/dist/cli.js.map +0 -1
  34. package/dist/common.d.ts +0 -93
  35. package/dist/common.js +0 -240
  36. package/dist/common.js.map +0 -1
  37. package/dist/domain/authoring/apply.d.ts +0 -1
  38. package/dist/domain/authoring/apply.js +0 -2
  39. package/dist/domain/authoring/apply.js.map +0 -1
  40. package/dist/domain/authoring/export.d.ts +0 -1
  41. package/dist/domain/authoring/export.js +0 -2
  42. package/dist/domain/authoring/export.js.map +0 -1
  43. package/dist/domain/authoring/parser.d.ts +0 -2
  44. package/dist/domain/authoring/parser.js +0 -3
  45. package/dist/domain/authoring/parser.js.map +0 -1
  46. package/dist/domain/authoring/serializer.d.ts +0 -1
  47. package/dist/domain/authoring/serializer.js +0 -2
  48. package/dist/domain/authoring/serializer.js.map +0 -1
  49. package/dist/domain/authoring/shared/bracket.d.ts +0 -4
  50. package/dist/domain/authoring/shared/bracket.js +0 -95
  51. package/dist/domain/authoring/shared/bracket.js.map +0 -1
  52. package/dist/domain/authoring/shared/types.d.ts +0 -12
  53. package/dist/domain/authoring/shared/types.js +0 -2
  54. package/dist/domain/authoring/shared/types.js.map +0 -1
  55. package/dist/domain/authoring/types.d.ts +0 -2
  56. package/dist/domain/authoring/types.js +0 -3
  57. package/dist/domain/authoring/types.js.map +0 -1
  58. package/dist/domain/authoring/v3/apply.d.ts +0 -33
  59. package/dist/domain/authoring/v3/apply.js +0 -784
  60. package/dist/domain/authoring/v3/apply.js.map +0 -1
  61. package/dist/domain/authoring/v3/export.d.ts +0 -7
  62. package/dist/domain/authoring/v3/export.js +0 -85
  63. package/dist/domain/authoring/v3/export.js.map +0 -1
  64. package/dist/domain/authoring/v3/parser.d.ts +0 -3
  65. package/dist/domain/authoring/v3/parser.js +0 -823
  66. package/dist/domain/authoring/v3/parser.js.map +0 -1
  67. package/dist/domain/authoring/v3/serializer.d.ts +0 -2
  68. package/dist/domain/authoring/v3/serializer.js +0 -244
  69. package/dist/domain/authoring/v3/serializer.js.map +0 -1
  70. package/dist/domain/authoring/v3/types.d.ts +0 -76
  71. package/dist/domain/authoring/v3/types.js +0 -2
  72. package/dist/domain/authoring/v3/types.js.map +0 -1
  73. package/dist/domain/authoring/v4/apply.d.ts +0 -40
  74. package/dist/domain/authoring/v4/apply.js +0 -451
  75. package/dist/domain/authoring/v4/apply.js.map +0 -1
  76. package/dist/domain/authoring/v4/parser.d.ts +0 -2
  77. package/dist/domain/authoring/v4/parser.js +0 -729
  78. package/dist/domain/authoring/v4/parser.js.map +0 -1
  79. package/dist/domain/authoring/v4/serializer.d.ts +0 -6
  80. package/dist/domain/authoring/v4/serializer.js +0 -280
  81. package/dist/domain/authoring/v4/serializer.js.map +0 -1
  82. package/dist/domain/authoring/v4/types.d.ts +0 -50
  83. package/dist/domain/authoring/v4/types.js +0 -2
  84. package/dist/domain/authoring/v4/types.js.map +0 -1
  85. package/dist/domain/creative-draft/compose.d.ts +0 -18
  86. package/dist/domain/creative-draft/compose.js +0 -448
  87. package/dist/domain/creative-draft/compose.js.map +0 -1
  88. package/dist/domain/ingest/apply-plan.d.ts +0 -23
  89. package/dist/domain/ingest/apply-plan.js +0 -210
  90. package/dist/domain/ingest/apply-plan.js.map +0 -1
  91. package/dist/domain/ingest/assembler.d.ts +0 -65
  92. package/dist/domain/ingest/assembler.js +0 -263
  93. package/dist/domain/ingest/assembler.js.map +0 -1
  94. package/dist/domain/ingest/asset-audit.d.ts +0 -50
  95. package/dist/domain/ingest/asset-audit.js +0 -196
  96. package/dist/domain/ingest/asset-audit.js.map +0 -1
  97. package/dist/domain/ingest/chunker.d.ts +0 -9
  98. package/dist/domain/ingest/chunker.js +0 -49
  99. package/dist/domain/ingest/chunker.js.map +0 -1
  100. package/dist/domain/ingest/environment.d.ts +0 -3
  101. package/dist/domain/ingest/environment.js +0 -32
  102. package/dist/domain/ingest/environment.js.map +0 -1
  103. package/dist/domain/ingest/evidence.d.ts +0 -5
  104. package/dist/domain/ingest/evidence.js +0 -66
  105. package/dist/domain/ingest/evidence.js.map +0 -1
  106. package/dist/domain/ingest/govern.d.ts +0 -3
  107. package/dist/domain/ingest/govern.js +0 -157
  108. package/dist/domain/ingest/govern.js.map +0 -1
  109. package/dist/domain/ingest/jsonl-parser.d.ts +0 -6
  110. package/dist/domain/ingest/jsonl-parser.js +0 -204
  111. package/dist/domain/ingest/jsonl-parser.js.map +0 -1
  112. package/dist/domain/ingest/markdown-parser.d.ts +0 -6
  113. package/dist/domain/ingest/markdown-parser.js +0 -187
  114. package/dist/domain/ingest/markdown-parser.js.map +0 -1
  115. package/dist/domain/ingest/production-validation.d.ts +0 -8
  116. package/dist/domain/ingest/production-validation.js +0 -37
  117. package/dist/domain/ingest/production-validation.js.map +0 -1
  118. package/dist/domain/ingest/records.d.ts +0 -72
  119. package/dist/domain/ingest/records.js +0 -10
  120. package/dist/domain/ingest/records.js.map +0 -1
  121. package/dist/domain/ingest/renumber.d.ts +0 -14
  122. package/dist/domain/ingest/renumber.js +0 -130
  123. package/dist/domain/ingest/renumber.js.map +0 -1
  124. package/dist/domain/ingest/serial-context.d.ts +0 -93
  125. package/dist/domain/ingest/serial-context.js +0 -355
  126. package/dist/domain/ingest/serial-context.js.map +0 -1
  127. package/dist/domain/ingest/state-identity.d.ts +0 -2
  128. package/dist/domain/ingest/state-identity.js +0 -3
  129. package/dist/domain/ingest/state-identity.js.map +0 -1
  130. package/dist/domain/ingest/state-reconcile.d.ts +0 -12
  131. package/dist/domain/ingest/state-reconcile.js +0 -92
  132. package/dist/domain/ingest/state-reconcile.js.map +0 -1
  133. package/dist/domain/ingest/validation.d.ts +0 -1
  134. package/dist/domain/ingest/validation.js +0 -2
  135. package/dist/domain/ingest/validation.js.map +0 -1
  136. package/dist/domain/ingest/video-apply.d.ts +0 -4
  137. package/dist/domain/ingest/video-apply.js +0 -128
  138. package/dist/domain/ingest/video-apply.js.map +0 -1
  139. package/dist/domain/ingest/video-context.d.ts +0 -64
  140. package/dist/domain/ingest/video-context.js +0 -480
  141. package/dist/domain/ingest/video-context.js.map +0 -1
  142. package/dist/domain/ingest/video-records.d.ts +0 -57
  143. package/dist/domain/ingest/video-records.js +0 -9
  144. package/dist/domain/ingest/video-records.js.map +0 -1
  145. package/dist/domain/ingest/video-serial-md.d.ts +0 -81
  146. package/dist/domain/ingest/video-serial-md.js +0 -297
  147. package/dist/domain/ingest/video-serial-md.js.map +0 -1
  148. package/dist/domain/ingest/video-source-evolution.d.ts +0 -25
  149. package/dist/domain/ingest/video-source-evolution.js +0 -40
  150. package/dist/domain/ingest/video-source-evolution.js.map +0 -1
  151. package/dist/domain/ingest/video-state-evidence.d.ts +0 -66
  152. package/dist/domain/ingest/video-state-evidence.js +0 -385
  153. package/dist/domain/ingest/video-state-evidence.js.map +0 -1
  154. package/dist/domain/ingest/video-timestamp.d.ts +0 -8
  155. package/dist/domain/ingest/video-timestamp.js +0 -26
  156. package/dist/domain/ingest/video-timestamp.js.map +0 -1
  157. package/dist/domain/loom/checkpointer.d.ts +0 -3
  158. package/dist/domain/loom/checkpointer.js +0 -30
  159. package/dist/domain/loom/checkpointer.js.map +0 -1
  160. package/dist/domain/loom/index.d.ts +0 -45
  161. package/dist/domain/loom/index.js +0 -277
  162. package/dist/domain/loom/index.js.map +0 -1
  163. package/dist/domain/loom/types.d.ts +0 -101
  164. package/dist/domain/loom/types.js +0 -2
  165. package/dist/domain/loom/types.js.map +0 -1
  166. package/dist/domain/script/address.d.ts +0 -1
  167. package/dist/domain/script/address.js +0 -2
  168. package/dist/domain/script/address.js.map +0 -1
  169. package/dist/domain/script/dispatch.d.ts +0 -18
  170. package/dist/domain/script/dispatch.js +0 -55
  171. package/dist/domain/script/dispatch.js.map +0 -1
  172. package/dist/domain/script/lookups.d.ts +0 -1
  173. package/dist/domain/script/lookups.js +0 -2
  174. package/dist/domain/script/lookups.js.map +0 -1
  175. package/dist/domain/script/migrations/registry.d.ts +0 -4
  176. package/dist/domain/script/migrations/registry.js +0 -76
  177. package/dist/domain/script/migrations/registry.js.map +0 -1
  178. package/dist/domain/script/migrations/types.d.ts +0 -17
  179. package/dist/domain/script/migrations/types.js +0 -2
  180. package/dist/domain/script/migrations/types.js.map +0 -1
  181. package/dist/domain/script/migrations/v3-to-v4.d.ts +0 -3
  182. package/dist/domain/script/migrations/v3-to-v4.js +0 -57
  183. package/dist/domain/script/migrations/v3-to-v4.js.map +0 -1
  184. package/dist/domain/script/names.d.ts +0 -1
  185. package/dist/domain/script/names.js +0 -2
  186. package/dist/domain/script/names.js.map +0 -1
  187. package/dist/domain/script/parse.d.ts +0 -1
  188. package/dist/domain/script/parse.js +0 -2
  189. package/dist/domain/script/parse.js.map +0 -1
  190. package/dist/domain/script/patch/apply.d.ts +0 -1
  191. package/dist/domain/script/patch/apply.js +0 -2
  192. package/dist/domain/script/patch/apply.js.map +0 -1
  193. package/dist/domain/script/patch/helpers.d.ts +0 -1
  194. package/dist/domain/script/patch/helpers.js +0 -2
  195. package/dist/domain/script/patch/helpers.js.map +0 -1
  196. package/dist/domain/script/patch/inline-speaker.d.ts +0 -1
  197. package/dist/domain/script/patch/inline-speaker.js +0 -2
  198. package/dist/domain/script/patch/inline-speaker.js.map +0 -1
  199. package/dist/domain/script/patch/ops-action.d.ts +0 -1
  200. package/dist/domain/script/patch/ops-action.js +0 -2
  201. package/dist/domain/script/patch/ops-action.js.map +0 -1
  202. package/dist/domain/script/patch/ops-asset.d.ts +0 -1
  203. package/dist/domain/script/patch/ops-asset.js +0 -2
  204. package/dist/domain/script/patch/ops-asset.js.map +0 -1
  205. package/dist/domain/script/patch/ops-dialogue.d.ts +0 -1
  206. package/dist/domain/script/patch/ops-dialogue.js +0 -2
  207. package/dist/domain/script/patch/ops-dialogue.js.map +0 -1
  208. package/dist/domain/script/patch/ops-extend.d.ts +0 -1
  209. package/dist/domain/script/patch/ops-extend.js +0 -2
  210. package/dist/domain/script/patch/ops-extend.js.map +0 -1
  211. package/dist/domain/script/patch/ops-meta.d.ts +0 -1
  212. package/dist/domain/script/patch/ops-meta.js +0 -2
  213. package/dist/domain/script/patch/ops-meta.js.map +0 -1
  214. package/dist/domain/script/patch/ops-scene.d.ts +0 -1
  215. package/dist/domain/script/patch/ops-scene.js +0 -2
  216. package/dist/domain/script/patch/ops-scene.js.map +0 -1
  217. package/dist/domain/script/patch/ops-state.d.ts +0 -1
  218. package/dist/domain/script/patch/ops-state.js +0 -2
  219. package/dist/domain/script/patch/ops-state.js.map +0 -1
  220. package/dist/domain/script/patch/registry.d.ts +0 -1
  221. package/dist/domain/script/patch/registry.js +0 -2
  222. package/dist/domain/script/patch/registry.js.map +0 -1
  223. package/dist/domain/script/patch/types.d.ts +0 -1
  224. package/dist/domain/script/patch/types.js +0 -2
  225. package/dist/domain/script/patch/types.js.map +0 -1
  226. package/dist/domain/script/refs.d.ts +0 -1
  227. package/dist/domain/script/refs.js +0 -2
  228. package/dist/domain/script/refs.js.map +0 -1
  229. package/dist/domain/script/scene-refs.d.ts +0 -1
  230. package/dist/domain/script/scene-refs.js +0 -2
  231. package/dist/domain/script/scene-refs.js.map +0 -1
  232. package/dist/domain/script/schema.d.ts +0 -1
  233. package/dist/domain/script/schema.js +0 -2
  234. package/dist/domain/script/schema.js.map +0 -1
  235. package/dist/domain/script/selector.d.ts +0 -1
  236. package/dist/domain/script/selector.js +0 -2
  237. package/dist/domain/script/selector.js.map +0 -1
  238. package/dist/domain/script/shared/regex.d.ts +0 -2
  239. package/dist/domain/script/shared/regex.js +0 -7
  240. package/dist/domain/script/shared/regex.js.map +0 -1
  241. package/dist/domain/script/shared/types.d.ts +0 -1
  242. package/dist/domain/script/shared/types.js +0 -5
  243. package/dist/domain/script/shared/types.js.map +0 -1
  244. package/dist/domain/script/shared/validation.d.ts +0 -1
  245. package/dist/domain/script/shared/validation.js +0 -3
  246. package/dist/domain/script/shared/validation.js.map +0 -1
  247. package/dist/domain/script/shared.d.ts +0 -15
  248. package/dist/domain/script/shared.js +0 -35
  249. package/dist/domain/script/shared.js.map +0 -1
  250. package/dist/domain/script/text-util.d.ts +0 -7
  251. package/dist/domain/script/text-util.js +0 -95
  252. package/dist/domain/script/text-util.js.map +0 -1
  253. package/dist/domain/script/timestamp.d.ts +0 -1
  254. package/dist/domain/script/timestamp.js +0 -3
  255. package/dist/domain/script/timestamp.js.map +0 -1
  256. package/dist/domain/script/types.d.ts +0 -1
  257. package/dist/domain/script/types.js +0 -2
  258. package/dist/domain/script/types.js.map +0 -1
  259. package/dist/domain/script/v3/address.d.ts +0 -32
  260. package/dist/domain/script/v3/address.js +0 -136
  261. package/dist/domain/script/v3/address.js.map +0 -1
  262. package/dist/domain/script/v3/lookups.d.ts +0 -33
  263. package/dist/domain/script/v3/lookups.js +0 -316
  264. package/dist/domain/script/v3/lookups.js.map +0 -1
  265. package/dist/domain/script/v3/ordinal.d.ts +0 -8
  266. package/dist/domain/script/v3/ordinal.js +0 -91
  267. package/dist/domain/script/v3/ordinal.js.map +0 -1
  268. package/dist/domain/script/v3/parse.d.ts +0 -3
  269. package/dist/domain/script/v3/parse.js +0 -164
  270. package/dist/domain/script/v3/parse.js.map +0 -1
  271. package/dist/domain/script/v3/patch/apply.d.ts +0 -2
  272. package/dist/domain/script/v3/patch/apply.js +0 -31
  273. package/dist/domain/script/v3/patch/apply.js.map +0 -1
  274. package/dist/domain/script/v3/patch/helpers.d.ts +0 -15
  275. package/dist/domain/script/v3/patch/helpers.js +0 -155
  276. package/dist/domain/script/v3/patch/helpers.js.map +0 -1
  277. package/dist/domain/script/v3/patch/inline-speaker.d.ts +0 -2
  278. package/dist/domain/script/v3/patch/inline-speaker.js +0 -50
  279. package/dist/domain/script/v3/patch/inline-speaker.js.map +0 -1
  280. package/dist/domain/script/v3/patch/ops-action.d.ts +0 -12
  281. package/dist/domain/script/v3/patch/ops-action.js +0 -355
  282. package/dist/domain/script/v3/patch/ops-action.js.map +0 -1
  283. package/dist/domain/script/v3/patch/ops-asset.d.ts +0 -14
  284. package/dist/domain/script/v3/patch/ops-asset.js +0 -347
  285. package/dist/domain/script/v3/patch/ops-asset.js.map +0 -1
  286. package/dist/domain/script/v3/patch/ops-dialogue.d.ts +0 -2
  287. package/dist/domain/script/v3/patch/ops-dialogue.js +0 -21
  288. package/dist/domain/script/v3/patch/ops-dialogue.js.map +0 -1
  289. package/dist/domain/script/v3/patch/ops-extend.d.ts +0 -8
  290. package/dist/domain/script/v3/patch/ops-extend.js +0 -122
  291. package/dist/domain/script/v3/patch/ops-extend.js.map +0 -1
  292. package/dist/domain/script/v3/patch/ops-meta.d.ts +0 -5
  293. package/dist/domain/script/v3/patch/ops-meta.js +0 -82
  294. package/dist/domain/script/v3/patch/ops-meta.js.map +0 -1
  295. package/dist/domain/script/v3/patch/ops-scene.d.ts +0 -6
  296. package/dist/domain/script/v3/patch/ops-scene.js +0 -351
  297. package/dist/domain/script/v3/patch/ops-scene.js.map +0 -1
  298. package/dist/domain/script/v3/patch/ops-state.d.ts +0 -8
  299. package/dist/domain/script/v3/patch/ops-state.js +0 -155
  300. package/dist/domain/script/v3/patch/ops-state.js.map +0 -1
  301. package/dist/domain/script/v3/patch/ops-timestamp.d.ts +0 -6
  302. package/dist/domain/script/v3/patch/ops-timestamp.js +0 -47
  303. package/dist/domain/script/v3/patch/ops-timestamp.js.map +0 -1
  304. package/dist/domain/script/v3/patch/registry.d.ts +0 -2
  305. package/dist/domain/script/v3/patch/registry.js +0 -56
  306. package/dist/domain/script/v3/patch/registry.js.map +0 -1
  307. package/dist/domain/script/v3/patch/types.d.ts +0 -10
  308. package/dist/domain/script/v3/patch/types.js +0 -2
  309. package/dist/domain/script/v3/patch/types.js.map +0 -1
  310. package/dist/domain/script/v3/refs.d.ts +0 -4
  311. package/dist/domain/script/v3/refs.js +0 -64
  312. package/dist/domain/script/v3/refs.js.map +0 -1
  313. package/dist/domain/script/v3/scene-refs.d.ts +0 -3
  314. package/dist/domain/script/v3/scene-refs.js +0 -35
  315. package/dist/domain/script/v3/scene-refs.js.map +0 -1
  316. package/dist/domain/script/v3/schema.d.ts +0 -6
  317. package/dist/domain/script/v3/schema.js +0 -58
  318. package/dist/domain/script/v3/schema.js.map +0 -1
  319. package/dist/domain/script/v3/selector.d.ts +0 -44
  320. package/dist/domain/script/v3/selector.js +0 -178
  321. package/dist/domain/script/v3/selector.js.map +0 -1
  322. package/dist/domain/script/v3/types.d.ts +0 -106
  323. package/dist/domain/script/v3/types.js +0 -2
  324. package/dist/domain/script/v3/types.js.map +0 -1
  325. package/dist/domain/script/v3/validation.d.ts +0 -2
  326. package/dist/domain/script/v3/validation.js +0 -2
  327. package/dist/domain/script/v3/validation.js.map +0 -1
  328. package/dist/domain/script/v4/address.d.ts +0 -61
  329. package/dist/domain/script/v4/address.js +0 -99
  330. package/dist/domain/script/v4/address.js.map +0 -1
  331. package/dist/domain/script/v4/factory.d.ts +0 -2
  332. package/dist/domain/script/v4/factory.js +0 -13
  333. package/dist/domain/script/v4/factory.js.map +0 -1
  334. package/dist/domain/script/v4/from-v3.d.ts +0 -29
  335. package/dist/domain/script/v4/from-v3.js +0 -307
  336. package/dist/domain/script/v4/from-v3.js.map +0 -1
  337. package/dist/domain/script/v4/ids.d.ts +0 -5
  338. package/dist/domain/script/v4/ids.js +0 -41
  339. package/dist/domain/script/v4/ids.js.map +0 -1
  340. package/dist/domain/script/v4/ordinal.d.ts +0 -3
  341. package/dist/domain/script/v4/ordinal.js +0 -66
  342. package/dist/domain/script/v4/ordinal.js.map +0 -1
  343. package/dist/domain/script/v4/parse.d.ts +0 -5
  344. package/dist/domain/script/v4/parse.js +0 -196
  345. package/dist/domain/script/v4/parse.js.map +0 -1
  346. package/dist/domain/script/v4/patch/apply.d.ts +0 -3
  347. package/dist/domain/script/v4/patch/apply.js +0 -24
  348. package/dist/domain/script/v4/patch/apply.js.map +0 -1
  349. package/dist/domain/script/v4/patch/helpers.d.ts +0 -32
  350. package/dist/domain/script/v4/patch/helpers.js +0 -138
  351. package/dist/domain/script/v4/patch/helpers.js.map +0 -1
  352. package/dist/domain/script/v4/patch/ops-action.d.ts +0 -13
  353. package/dist/domain/script/v4/patch/ops-action.js +0 -351
  354. package/dist/domain/script/v4/patch/ops-action.js.map +0 -1
  355. package/dist/domain/script/v4/patch/ops-asset.d.ts +0 -17
  356. package/dist/domain/script/v4/patch/ops-asset.js +0 -556
  357. package/dist/domain/script/v4/patch/ops-asset.js.map +0 -1
  358. package/dist/domain/script/v4/patch/ops-extend.d.ts +0 -11
  359. package/dist/domain/script/v4/patch/ops-extend.js +0 -103
  360. package/dist/domain/script/v4/patch/ops-extend.js.map +0 -1
  361. package/dist/domain/script/v4/patch/ops-meta.d.ts +0 -5
  362. package/dist/domain/script/v4/patch/ops-meta.js +0 -49
  363. package/dist/domain/script/v4/patch/ops-meta.js.map +0 -1
  364. package/dist/domain/script/v4/patch/ops-scene-ref.d.ts +0 -3
  365. package/dist/domain/script/v4/patch/ops-scene-ref.js +0 -74
  366. package/dist/domain/script/v4/patch/ops-scene-ref.js.map +0 -1
  367. package/dist/domain/script/v4/patch/ops-structure.d.ts +0 -6
  368. package/dist/domain/script/v4/patch/ops-structure.js +0 -236
  369. package/dist/domain/script/v4/patch/ops-structure.js.map +0 -1
  370. package/dist/domain/script/v4/patch/ops-timestamp.d.ts +0 -6
  371. package/dist/domain/script/v4/patch/ops-timestamp.js +0 -40
  372. package/dist/domain/script/v4/patch/ops-timestamp.js.map +0 -1
  373. package/dist/domain/script/v4/patch/registry.d.ts +0 -2
  374. package/dist/domain/script/v4/patch/registry.js +0 -53
  375. package/dist/domain/script/v4/patch/registry.js.map +0 -1
  376. package/dist/domain/script/v4/patch/schema.d.ts +0 -7
  377. package/dist/domain/script/v4/patch/schema.js +0 -77
  378. package/dist/domain/script/v4/patch/schema.js.map +0 -1
  379. package/dist/domain/script/v4/patch/types.d.ts +0 -10
  380. package/dist/domain/script/v4/patch/types.js +0 -2
  381. package/dist/domain/script/v4/patch/types.js.map +0 -1
  382. package/dist/domain/script/v4/selector.d.ts +0 -11
  383. package/dist/domain/script/v4/selector.js +0 -124
  384. package/dist/domain/script/v4/selector.js.map +0 -1
  385. package/dist/domain/script/v4/types.d.ts +0 -120
  386. package/dist/domain/script/v4/types.js +0 -2
  387. package/dist/domain/script/v4/types.js.map +0 -1
  388. package/dist/domain/script/v4/validation.d.ts +0 -2
  389. package/dist/domain/script/v4/validation.js +0 -2
  390. package/dist/domain/script/v4/validation.js.map +0 -1
  391. package/dist/failures.d.ts +0 -58
  392. package/dist/failures.js +0 -96
  393. package/dist/failures.js.map +0 -1
  394. package/dist/infra/converters.d.ts +0 -9
  395. package/dist/infra/converters.js +0 -689
  396. package/dist/infra/converters.js.map +0 -1
  397. package/dist/infra/env.d.ts +0 -2
  398. package/dist/infra/env.js +0 -81
  399. package/dist/infra/env.js.map +0 -1
  400. package/dist/infra/episode-title.d.ts +0 -4
  401. package/dist/infra/episode-title.js +0 -129
  402. package/dist/infra/episode-title.js.map +0 -1
  403. package/dist/infra/ingest/review-renderer.d.ts +0 -1
  404. package/dist/infra/ingest/review-renderer.js +0 -440
  405. package/dist/infra/ingest/review-renderer.js.map +0 -1
  406. package/dist/infra/ingest/source-resolver.d.ts +0 -21
  407. package/dist/infra/ingest/source-resolver.js +0 -51
  408. package/dist/infra/ingest/source-resolver.js.map +0 -1
  409. package/dist/infra/ingest/text-reader.d.ts +0 -3
  410. package/dist/infra/ingest/text-reader.js +0 -27
  411. package/dist/infra/ingest/text-reader.js.map +0 -1
  412. package/dist/infra/ingest/video-discovery.d.ts +0 -8
  413. package/dist/infra/ingest/video-discovery.js +0 -69
  414. package/dist/infra/ingest/video-discovery.js.map +0 -1
  415. package/dist/infra/ingest/video-source-snapshot.d.ts +0 -4
  416. package/dist/infra/ingest/video-source-snapshot.js +0 -47
  417. package/dist/infra/ingest/video-source-snapshot.js.map +0 -1
  418. package/dist/infra/ingest/video-state-evidence.d.ts +0 -14
  419. package/dist/infra/ingest/video-state-evidence.js +0 -140
  420. package/dist/infra/ingest/video-state-evidence.js.map +0 -1
  421. package/dist/infra/ingest/video-transcode.d.ts +0 -7
  422. package/dist/infra/ingest/video-transcode.js +0 -98
  423. package/dist/infra/ingest/video-transcode.js.map +0 -1
  424. package/dist/infra/ingest/workspace-lock.d.ts +0 -1
  425. package/dist/infra/ingest/workspace-lock.js +0 -32
  426. package/dist/infra/ingest/workspace-lock.js.map +0 -1
  427. package/dist/infra/ingest/workspace-store.d.ts +0 -18
  428. package/dist/infra/ingest/workspace-store.js +0 -70
  429. package/dist/infra/ingest/workspace-store.js.map +0 -1
  430. package/dist/infra/llm/anthropic-model.d.ts +0 -11
  431. package/dist/infra/llm/anthropic-model.js +0 -130
  432. package/dist/infra/llm/anthropic-model.js.map +0 -1
  433. package/dist/infra/llm/doubao-model.d.ts +0 -60
  434. package/dist/infra/llm/doubao-model.js +0 -249
  435. package/dist/infra/llm/doubao-model.js.map +0 -1
  436. package/dist/infra/llm/failure-mapping.d.ts +0 -6
  437. package/dist/infra/llm/failure-mapping.js +0 -146
  438. package/dist/infra/llm/failure-mapping.js.map +0 -1
  439. package/dist/infra/llm/gemini-upload.d.ts +0 -13
  440. package/dist/infra/llm/gemini-upload.js +0 -138
  441. package/dist/infra/llm/gemini-upload.js.map +0 -1
  442. package/dist/infra/llm/gemini-video-model.d.ts +0 -50
  443. package/dist/infra/llm/gemini-video-model.js +0 -371
  444. package/dist/infra/llm/gemini-video-model.js.map +0 -1
  445. package/dist/infra/llm/openai-compatible-model.d.ts +0 -14
  446. package/dist/infra/llm/openai-compatible-model.js +0 -207
  447. package/dist/infra/llm/openai-compatible-model.js.map +0 -1
  448. package/dist/infra/llm/retry.d.ts +0 -8
  449. package/dist/infra/llm/retry.js +0 -41
  450. package/dist/infra/llm/retry.js.map +0 -1
  451. package/dist/infra/local-script-output-store.d.ts +0 -43
  452. package/dist/infra/local-script-output-store.js +0 -168
  453. package/dist/infra/local-script-output-store.js.map +0 -1
  454. package/dist/infra/script-output-api.d.ts +0 -50
  455. package/dist/infra/script-output-api.js +0 -251
  456. package/dist/infra/script-output-api.js.map +0 -1
  457. package/dist/infra/script-output-store.d.ts +0 -152
  458. package/dist/infra/script-output-store.js +0 -114
  459. package/dist/infra/script-output-store.js.map +0 -1
  460. package/dist/infra/script-working-copy.d.ts +0 -23
  461. package/dist/infra/script-working-copy.js +0 -157
  462. package/dist/infra/script-working-copy.js.map +0 -1
  463. package/dist/infra/storage.d.ts +0 -35
  464. package/dist/infra/storage.js +0 -91
  465. package/dist/infra/storage.js.map +0 -1
  466. package/dist/llm/composition.d.ts +0 -5
  467. package/dist/llm/composition.js +0 -5
  468. package/dist/llm/composition.js.map +0 -1
  469. package/dist/llm/config.d.ts +0 -28
  470. package/dist/llm/config.js +0 -231
  471. package/dist/llm/config.js.map +0 -1
  472. package/dist/llm/registry.d.ts +0 -43
  473. package/dist/llm/registry.js +0 -69
  474. package/dist/llm/registry.js.map +0 -1
  475. package/dist/llm/router.d.ts +0 -46
  476. package/dist/llm/router.js +0 -512
  477. package/dist/llm/router.js.map +0 -1
  478. package/dist/llm/tasks/ingest/arc-summary.d.ts +0 -8
  479. package/dist/llm/tasks/ingest/arc-summary.js +0 -26
  480. package/dist/llm/tasks/ingest/arc-summary.js.map +0 -1
  481. package/dist/llm/tasks/ingest/asset-audit.d.ts +0 -6
  482. package/dist/llm/tasks/ingest/asset-audit.js +0 -158
  483. package/dist/llm/tasks/ingest/asset-audit.js.map +0 -1
  484. package/dist/llm/tasks/ingest/asset-curate.d.ts +0 -13
  485. package/dist/llm/tasks/ingest/asset-curate.js +0 -45
  486. package/dist/llm/tasks/ingest/asset-curate.js.map +0 -1
  487. package/dist/llm/tasks/ingest/asset-extract.d.ts +0 -12
  488. package/dist/llm/tasks/ingest/asset-extract.js +0 -51
  489. package/dist/llm/tasks/ingest/asset-extract.js.map +0 -1
  490. package/dist/llm/tasks/ingest/asset-govern.d.ts +0 -22
  491. package/dist/llm/tasks/ingest/asset-govern.js +0 -143
  492. package/dist/llm/tasks/ingest/asset-govern.js.map +0 -1
  493. package/dist/llm/tasks/ingest/body-start.d.ts +0 -10
  494. package/dist/llm/tasks/ingest/body-start.js +0 -41
  495. package/dist/llm/tasks/ingest/body-start.js.map +0 -1
  496. package/dist/llm/tasks/ingest/episode-assets.d.ts +0 -29
  497. package/dist/llm/tasks/ingest/episode-assets.js +0 -282
  498. package/dist/llm/tasks/ingest/episode-assets.js.map +0 -1
  499. package/dist/llm/tasks/ingest/mention-resolve.d.ts +0 -9
  500. package/dist/llm/tasks/ingest/mention-resolve.js +0 -39
  501. package/dist/llm/tasks/ingest/mention-resolve.js.map +0 -1
  502. package/dist/llm/tasks/ingest/name-fix.d.ts +0 -9
  503. package/dist/llm/tasks/ingest/name-fix.js +0 -56
  504. package/dist/llm/tasks/ingest/name-fix.js.map +0 -1
  505. package/dist/llm/tasks/ingest/state-reconcile.d.ts +0 -8
  506. package/dist/llm/tasks/ingest/state-reconcile.js +0 -44
  507. package/dist/llm/tasks/ingest/state-reconcile.js.map +0 -1
  508. package/dist/llm/tasks/ingest/text-normalize.d.ts +0 -10
  509. package/dist/llm/tasks/ingest/text-normalize.js +0 -122
  510. package/dist/llm/tasks/ingest/text-normalize.js.map +0 -1
  511. package/dist/llm/tasks/ingest/video-serial.d.ts +0 -24
  512. package/dist/llm/tasks/ingest/video-serial.js +0 -416
  513. package/dist/llm/tasks/ingest/video-serial.js.map +0 -1
  514. package/dist/llm/tasks/schemas.d.ts +0 -9
  515. package/dist/llm/tasks/schemas.js +0 -466
  516. package/dist/llm/tasks/schemas.js.map +0 -1
  517. package/dist/llm/types.d.ts +0 -178
  518. package/dist/llm/types.js +0 -44
  519. package/dist/llm/types.js.map +0 -1
  520. package/dist/output.d.ts +0 -3
  521. package/dist/output.js +0 -94
  522. package/dist/output.js.map +0 -1
  523. package/dist/package-root.d.ts +0 -2
  524. package/dist/package-root.js +0 -38
  525. package/dist/package-root.js.map +0 -1
  526. package/dist/review-agent.js.map +0 -7
  527. package/dist/usecases/changelog.d.ts +0 -9
  528. package/dist/usecases/changelog.js +0 -134
  529. package/dist/usecases/changelog.js.map +0 -1
  530. package/dist/usecases/doctor.d.ts +0 -2
  531. package/dist/usecases/doctor.js +0 -231
  532. package/dist/usecases/doctor.js.map +0 -1
  533. package/dist/usecases/ingest/body-start.d.ts +0 -8
  534. package/dist/usecases/ingest/body-start.js +0 -36
  535. package/dist/usecases/ingest/body-start.js.map +0 -1
  536. package/dist/usecases/ingest/command.d.ts +0 -5
  537. package/dist/usecases/ingest/command.js +0 -183
  538. package/dist/usecases/ingest/command.js.map +0 -1
  539. package/dist/usecases/ingest/failure.d.ts +0 -26
  540. package/dist/usecases/ingest/failure.js +0 -153
  541. package/dist/usecases/ingest/failure.js.map +0 -1
  542. package/dist/usecases/ingest/fanout.d.ts +0 -10
  543. package/dist/usecases/ingest/fanout.js +0 -23
  544. package/dist/usecases/ingest/fanout.js.map +0 -1
  545. package/dist/usecases/ingest/final-asset-audit.d.ts +0 -39
  546. package/dist/usecases/ingest/final-asset-audit.js +0 -88
  547. package/dist/usecases/ingest/final-asset-audit.js.map +0 -1
  548. package/dist/usecases/ingest/generate-video-state-evidence.d.ts +0 -23
  549. package/dist/usecases/ingest/generate-video-state-evidence.js +0 -124
  550. package/dist/usecases/ingest/generate-video-state-evidence.js.map +0 -1
  551. package/dist/usecases/ingest/pass4-mention-resolve.d.ts +0 -11
  552. package/dist/usecases/ingest/pass4-mention-resolve.js +0 -52
  553. package/dist/usecases/ingest/pass4-mention-resolve.js.map +0 -1
  554. package/dist/usecases/ingest/pass5-extract.d.ts +0 -7
  555. package/dist/usecases/ingest/pass5-extract.js +0 -51
  556. package/dist/usecases/ingest/pass5-extract.js.map +0 -1
  557. package/dist/usecases/ingest/pass5-govern.d.ts +0 -13
  558. package/dist/usecases/ingest/pass5-govern.js +0 -157
  559. package/dist/usecases/ingest/pass5-govern.js.map +0 -1
  560. package/dist/usecases/ingest/pipeline.d.ts +0 -28
  561. package/dist/usecases/ingest/pipeline.js +0 -335
  562. package/dist/usecases/ingest/pipeline.js.map +0 -1
  563. package/dist/usecases/ingest/publish-command.d.ts +0 -1
  564. package/dist/usecases/ingest/publish-command.js +0 -4
  565. package/dist/usecases/ingest/publish-command.js.map +0 -1
  566. package/dist/usecases/ingest/serial-govern.d.ts +0 -40
  567. package/dist/usecases/ingest/serial-govern.js +0 -488
  568. package/dist/usecases/ingest/serial-govern.js.map +0 -1
  569. package/dist/usecases/ingest/skip-video-episode.d.ts +0 -4
  570. package/dist/usecases/ingest/skip-video-episode.js +0 -120
  571. package/dist/usecases/ingest/skip-video-episode.js.map +0 -1
  572. package/dist/usecases/ingest/status.d.ts +0 -61
  573. package/dist/usecases/ingest/status.js +0 -347
  574. package/dist/usecases/ingest/status.js.map +0 -1
  575. package/dist/usecases/ingest/timings.d.ts +0 -51
  576. package/dist/usecases/ingest/timings.js +0 -68
  577. package/dist/usecases/ingest/timings.js.map +0 -1
  578. package/dist/usecases/ingest/usage-report.d.ts +0 -125
  579. package/dist/usecases/ingest/usage-report.js +0 -248
  580. package/dist/usecases/ingest/usage-report.js.map +0 -1
  581. package/dist/usecases/ingest/video-pipeline.d.ts +0 -81
  582. package/dist/usecases/ingest/video-pipeline.js +0 -548
  583. package/dist/usecases/ingest/video-pipeline.js.map +0 -1
  584. package/dist/usecases/ingest/video-skip-state.d.ts +0 -29
  585. package/dist/usecases/ingest/video-skip-state.js +0 -148
  586. package/dist/usecases/ingest/video-skip-state.js.map +0 -1
  587. package/dist/usecases/ingest/view-command.d.ts +0 -4
  588. package/dist/usecases/ingest/view-command.js +0 -67
  589. package/dist/usecases/ingest/view-command.js.map +0 -1
  590. package/dist/usecases/ingest/view-server.d.ts +0 -29
  591. package/dist/usecases/ingest/view-server.js +0 -364
  592. package/dist/usecases/ingest/view-server.js.map +0 -1
  593. package/dist/usecases/script/action-span.d.ts +0 -10
  594. package/dist/usecases/script/action-span.js +0 -42
  595. package/dist/usecases/script/action-span.js.map +0 -1
  596. package/dist/usecases/script/actions.d.ts +0 -3
  597. package/dist/usecases/script/actions.js +0 -184
  598. package/dist/usecases/script/actions.js.map +0 -1
  599. package/dist/usecases/script/actor.d.ts +0 -3
  600. package/dist/usecases/script/actor.js +0 -26
  601. package/dist/usecases/script/actor.js.map +0 -1
  602. package/dist/usecases/script/actors.d.ts +0 -3
  603. package/dist/usecases/script/actors.js +0 -25
  604. package/dist/usecases/script/actors.js.map +0 -1
  605. package/dist/usecases/script/add-actor.d.ts +0 -3
  606. package/dist/usecases/script/add-actor.js +0 -13
  607. package/dist/usecases/script/add-actor.js.map +0 -1
  608. package/dist/usecases/script/add-episode.d.ts +0 -3
  609. package/dist/usecases/script/add-episode.js +0 -9
  610. package/dist/usecases/script/add-episode.js.map +0 -1
  611. package/dist/usecases/script/add-location.d.ts +0 -3
  612. package/dist/usecases/script/add-location.js +0 -11
  613. package/dist/usecases/script/add-location.js.map +0 -1
  614. package/dist/usecases/script/add-prop.d.ts +0 -3
  615. package/dist/usecases/script/add-prop.js +0 -11
  616. package/dist/usecases/script/add-prop.js.map +0 -1
  617. package/dist/usecases/script/alias.d.ts +0 -3
  618. package/dist/usecases/script/alias.js +0 -39
  619. package/dist/usecases/script/alias.js.map +0 -1
  620. package/dist/usecases/script/assets.d.ts +0 -3
  621. package/dist/usecases/script/assets.js +0 -46
  622. package/dist/usecases/script/assets.js.map +0 -1
  623. package/dist/usecases/script/audit-assets.d.ts +0 -4
  624. package/dist/usecases/script/audit-assets.js +0 -37
  625. package/dist/usecases/script/audit-assets.js.map +0 -1
  626. package/dist/usecases/script/command-constraints.d.ts +0 -38
  627. package/dist/usecases/script/command-constraints.js +0 -143
  628. package/dist/usecases/script/command-constraints.js.map +0 -1
  629. package/dist/usecases/script/compose-creative-draft.d.ts +0 -3
  630. package/dist/usecases/script/compose-creative-draft.js +0 -106
  631. package/dist/usecases/script/compose-creative-draft.js.map +0 -1
  632. package/dist/usecases/script/context.d.ts +0 -3
  633. package/dist/usecases/script/context.js +0 -52
  634. package/dist/usecases/script/context.js.map +0 -1
  635. package/dist/usecases/script/create.d.ts +0 -3
  636. package/dist/usecases/script/create.js +0 -27
  637. package/dist/usecases/script/create.js.map +0 -1
  638. package/dist/usecases/script/delete.d.ts +0 -3
  639. package/dist/usecases/script/delete.js +0 -88
  640. package/dist/usecases/script/delete.js.map +0 -1
  641. package/dist/usecases/script/describe.d.ts +0 -3
  642. package/dist/usecases/script/describe.js +0 -32
  643. package/dist/usecases/script/describe.js.map +0 -1
  644. package/dist/usecases/script/dialogue.d.ts +0 -3
  645. package/dist/usecases/script/dialogue.js +0 -30
  646. package/dist/usecases/script/dialogue.js.map +0 -1
  647. package/dist/usecases/script/dispatch.d.ts +0 -3
  648. package/dist/usecases/script/dispatch.js +0 -10
  649. package/dist/usecases/script/dispatch.js.map +0 -1
  650. package/dist/usecases/script/do.d.ts +0 -3
  651. package/dist/usecases/script/do.js +0 -186
  652. package/dist/usecases/script/do.js.map +0 -1
  653. package/dist/usecases/script/emotion.d.ts +0 -3
  654. package/dist/usecases/script/emotion.js +0 -24
  655. package/dist/usecases/script/emotion.js.map +0 -1
  656. package/dist/usecases/script/episodes.d.ts +0 -3
  657. package/dist/usecases/script/episodes.js +0 -62
  658. package/dist/usecases/script/episodes.js.map +0 -1
  659. package/dist/usecases/script/export-authoring.d.ts +0 -4
  660. package/dist/usecases/script/export-authoring.js +0 -326
  661. package/dist/usecases/script/export-authoring.js.map +0 -1
  662. package/dist/usecases/script/extend.d.ts +0 -3
  663. package/dist/usecases/script/extend.js +0 -94
  664. package/dist/usecases/script/extend.js.map +0 -1
  665. package/dist/usecases/script/ids.d.ts +0 -3
  666. package/dist/usecases/script/ids.js +0 -148
  667. package/dist/usecases/script/ids.js.map +0 -1
  668. package/dist/usecases/script/importance.d.ts +0 -3
  669. package/dist/usecases/script/importance.js +0 -16
  670. package/dist/usecases/script/importance.js.map +0 -1
  671. package/dist/usecases/script/insert.d.ts +0 -3
  672. package/dist/usecases/script/insert.js +0 -127
  673. package/dist/usecases/script/insert.js.map +0 -1
  674. package/dist/usecases/script/issues.d.ts +0 -3
  675. package/dist/usecases/script/issues.js +0 -35
  676. package/dist/usecases/script/issues.js.map +0 -1
  677. package/dist/usecases/script/lib.d.ts +0 -152
  678. package/dist/usecases/script/lib.js +0 -1654
  679. package/dist/usecases/script/lib.js.map +0 -1
  680. package/dist/usecases/script/locations.d.ts +0 -3
  681. package/dist/usecases/script/locations.js +0 -25
  682. package/dist/usecases/script/locations.js.map +0 -1
  683. package/dist/usecases/script/merge.d.ts +0 -3
  684. package/dist/usecases/script/merge.js +0 -43
  685. package/dist/usecases/script/merge.js.map +0 -1
  686. package/dist/usecases/script/migrate.d.ts +0 -3
  687. package/dist/usecases/script/migrate.js +0 -210
  688. package/dist/usecases/script/migrate.js.map +0 -1
  689. package/dist/usecases/script/move.d.ts +0 -3
  690. package/dist/usecases/script/move.js +0 -50
  691. package/dist/usecases/script/move.js.map +0 -1
  692. package/dist/usecases/script/parenthetical.d.ts +0 -3
  693. package/dist/usecases/script/parenthetical.js +0 -52
  694. package/dist/usecases/script/parenthetical.js.map +0 -1
  695. package/dist/usecases/script/props.d.ts +0 -3
  696. package/dist/usecases/script/props.js +0 -25
  697. package/dist/usecases/script/props.js.map +0 -1
  698. package/dist/usecases/script/refs.d.ts +0 -3
  699. package/dist/usecases/script/refs.js +0 -111
  700. package/dist/usecases/script/refs.js.map +0 -1
  701. package/dist/usecases/script/rename.d.ts +0 -3
  702. package/dist/usecases/script/rename.js +0 -35
  703. package/dist/usecases/script/rename.js.map +0 -1
  704. package/dist/usecases/script/replace.d.ts +0 -3
  705. package/dist/usecases/script/replace.js +0 -33
  706. package/dist/usecases/script/replace.js.map +0 -1
  707. package/dist/usecases/script/review.d.ts +0 -3
  708. package/dist/usecases/script/review.js +0 -187
  709. package/dist/usecases/script/review.js.map +0 -1
  710. package/dist/usecases/script/role.d.ts +0 -3
  711. package/dist/usecases/script/role.js +0 -16
  712. package/dist/usecases/script/role.js.map +0 -1
  713. package/dist/usecases/script/scenes.d.ts +0 -3
  714. package/dist/usecases/script/scenes.js +0 -66
  715. package/dist/usecases/script/scenes.js.map +0 -1
  716. package/dist/usecases/script/script-patch.d.ts +0 -3
  717. package/dist/usecases/script/script-patch.js +0 -321
  718. package/dist/usecases/script/script-patch.js.map +0 -1
  719. package/dist/usecases/script/script-validate.d.ts +0 -3
  720. package/dist/usecases/script/script-validate.js +0 -27
  721. package/dist/usecases/script/script-validate.js.map +0 -1
  722. package/dist/usecases/script/session.d.ts +0 -62
  723. package/dist/usecases/script/session.js +0 -567
  724. package/dist/usecases/script/session.js.map +0 -1
  725. package/dist/usecases/script/split.d.ts +0 -3
  726. package/dist/usecases/script/split.js +0 -41
  727. package/dist/usecases/script/split.js.map +0 -1
  728. package/dist/usecases/script/state-add.d.ts +0 -3
  729. package/dist/usecases/script/state-add.js +0 -22
  730. package/dist/usecases/script/state-add.js.map +0 -1
  731. package/dist/usecases/script/state-delete.d.ts +0 -3
  732. package/dist/usecases/script/state-delete.js +0 -22
  733. package/dist/usecases/script/state-delete.js.map +0 -1
  734. package/dist/usecases/script/state-rename.d.ts +0 -3
  735. package/dist/usecases/script/state-rename.js +0 -16
  736. package/dist/usecases/script/state-rename.js.map +0 -1
  737. package/dist/usecases/script/states.d.ts +0 -3
  738. package/dist/usecases/script/states.js +0 -197
  739. package/dist/usecases/script/states.js.map +0 -1
  740. package/dist/usecases/script/summary.d.ts +0 -3
  741. package/dist/usecases/script/summary.js +0 -72
  742. package/dist/usecases/script/summary.js.map +0 -1
  743. package/dist/usecases/script/synopsis-generate.d.ts +0 -115
  744. package/dist/usecases/script/synopsis-generate.js +0 -776
  745. package/dist/usecases/script/synopsis-generate.js.map +0 -1
  746. package/dist/usecases/script/synopsis.d.ts +0 -3
  747. package/dist/usecases/script/synopsis.js +0 -45
  748. package/dist/usecases/script/synopsis.js.map +0 -1
  749. package/dist/usecases/script/timestamp-filter.d.ts +0 -4
  750. package/dist/usecases/script/timestamp-filter.js +0 -55
  751. package/dist/usecases/script/timestamp-filter.js.map +0 -1
  752. package/dist/usecases/script/timestamp.d.ts +0 -3
  753. package/dist/usecases/script/timestamp.js +0 -11
  754. package/dist/usecases/script/timestamp.js.map +0 -1
  755. package/dist/usecases/script/transition.d.ts +0 -3
  756. package/dist/usecases/script/transition.js +0 -23
  757. package/dist/usecases/script/transition.js.map +0 -1
  758. package/dist/usecases/script/type.d.ts +0 -3
  759. package/dist/usecases/script/type.js +0 -23
  760. package/dist/usecases/script/type.js.map +0 -1
  761. package/dist/usecases/script/v3/mutations.d.ts +0 -2
  762. package/dist/usecases/script/v3/mutations.js +0 -5
  763. package/dist/usecases/script/v3/mutations.js.map +0 -1
  764. package/dist/usecases/script/v4/mutations.d.ts +0 -2
  765. package/dist/usecases/script/v4/mutations.js +0 -6
  766. package/dist/usecases/script/v4/mutations.js.map +0 -1
  767. package/dist/usecases/script/v4/queries.d.ts +0 -15
  768. package/dist/usecases/script/v4/queries.js +0 -196
  769. package/dist/usecases/script/v4/queries.js.map +0 -1
  770. package/dist/usecases/script/working-copy.d.ts +0 -5
  771. package/dist/usecases/script/working-copy.js +0 -399
  772. package/dist/usecases/script/working-copy.js.map +0 -1
  773. package/dist/usecases/script/worldview.d.ts +0 -3
  774. package/dist/usecases/script/worldview.js +0 -17
  775. package/dist/usecases/script/worldview.js.map +0 -1
  776. package/dist/usecases/script/write-authoring.d.ts +0 -3
  777. package/dist/usecases/script/write-authoring.js +0 -263
  778. package/dist/usecases/script/write-authoring.js.map +0 -1
  779. package/dist/usecases/update.d.ts +0 -13
  780. package/dist/usecases/update.js +0 -128
  781. package/dist/usecases/update.js.map +0 -1
@@ -1,122 +0,0 @@
1
- // ingest.text-normalize task (§3.3/§pass2). The cheap model converts one source
2
- // chunk directly into structured records. Source spans are assigned locally at
3
- // chunk granularity; the model never supplies or guesses them.
4
- import { CliError, EXIT_RUNTIME } from "../../../common.js";
5
- import { JsonlParseError, parseJsonl } from "../../../domain/ingest/jsonl-parser.js";
6
- export const TEXT_NORMALIZE_SYSTEM = [
7
- "你是剧本规范化器。把给定的源文本块转换成结构化剧本记录。",
8
- "最高优先级是正文零丢失:原文中的每一条动作、环境描写、对白、内心独白、画外音、字幕和转场都必须完整进入 records。禁止因内容重复、次要、过渡性强、篇幅长、使用外语或难以分类而省略。",
9
- "逐行处理原文,并在输出前逐行自检正文是否全部承载。一个原文段落含多句时必须保留全部句子;可以拆成多条记录,但禁止截断、摘要、合并后漏句或只保留段落前半段。动作翻译只能改变表达语言,不能减少事实。不要输出自检过程。",
10
- "这是供中文编剧复核的标准稿:dialogue 和 inner_thought 的 content 逐字保留源文本实际语言与夹杂语言,绝不翻译;除此以外,action、transition、note、emotion 以及场景的通用地点描述都使用自然、准确的简体中文。人物姓名在 speaker.name、scene.actors、action 和后续资产登记中都必须沿用源文本的原始拼写,不翻译、不音译、不改成中文名;品牌和没有通行译名的其他专名保留原文。不得把整句外语动作或环境描述原样留在 action 中。",
11
- "只输出一个标准 JSON 对象,格式必须是 {\"records\":[...]}。必须使用双引号,不要 Markdown、代码围栏、JSONL、注释或解释。",
12
- "records 按源文本发生顺序排列,只放源文本中实际存在的内容;不要臆造边界,不要提供 source 字段。",
13
- "",
14
- "严格保持源文本顺序,绝不重排:块开头若在任何『集/场』标记之前就有正文(上一块没写完的戏),",
15
- "必须把这些正文原位放在 records 最前面;episode 只在源文本明确集边界处写入。标准剧本沿用原有场界;小说和非标准文本依据地点切换、明显跳时、叙事线切换、明确转场或持久视觉状态变化建立 scene。",
16
- "绝不要把靠后出现的集边界提到开头。",
17
- "场号(如 `场3-2`)绝不是集边界;只有原文明确写出 `第N集` 或 `N集` 时才能输出 episode。",
18
- "",
19
- "记录类型:",
20
- "- 集边界:{\"kind\":\"episode\",\"episode\":19,\"title\":\"可选标题\"}。episode 必须取源文本写明的集号;书名、括号、标题文字都不能混进 episode。",
21
- "- 场边界:{\"kind\":\"scene\",\"environment\":{\"space\":\"interior\",\"time\":\"day\"},\"location\":{\"name\":\"客厅\"},\"actors\":[],\"props\":[]}。不要输出 scene 编号字段,系统会自行连续编号。每个 scene 都必须填写 environment.time,只能使用 day|night|dawn|dusk;依次对应日/夜/晨/昏。",
22
- "- 动作/环境:{\"kind\":\"action\",\"content\":\"忠实转换成简体中文的可拍摄描述\"}。",
23
- "- 对白:{\"kind\":\"dialogue\",\"speaker\":{\"name\":\"甲\"},\"content\":\"原话\",\"emotion\":\"可选\"}。",
24
- "- 内心独白/画外音:{\"kind\":\"inner_thought\",\"speaker\":{\"name\":\"甲\"},\"content\":\"原话\",\"emotion\":\"可选\"}。",
25
- "- 转场:{\"kind\":\"transition\",\"content\":\"忠实转换成简体中文的转场文字\"}。常见格式词也要翻译,例如 `FLASHBACK` → `闪回`、`BACK TO PRESENT` → `回到现实`。",
26
- "- 批注:{\"kind\":\"note\",\"content\":\"忠实转换成简体中文的批注\",\"category\":\"author_note|format_note|unclassified\"}。",
27
- "action、dialogue、inner_thought、transition、note 的 content 必须是非空字符串;不得输出 content 为空的占位记录。原文没有对应正文时就不要创建该记录。",
28
- "",
29
- "转换规则:",
30
- " 源 `场3-2 日/内 客厅` → 一个 scene;space 只用 interior/exterior,time 只用 day/night/dawn/dusk。白天/日间归 day,夜晚/夜间归 night,清晨/黎明归 dawn,黄昏/傍晚归 dusk。原文未直接写明时,根据照明、作息、天空和上下文判断;不得省略或写空串。",
31
- " 源 `人物:甲【白衣,昏迷】,乙` → scene.actors=[{\"name\":\"甲\",\"state\":\"白衣,昏迷\"},{\"name\":\"乙\"}]。",
32
- " 源 `道具:婚书,玉佩` → scene.props=[{\"name\":\"婚书\"},{\"name\":\"玉佩\"}]。",
33
- " 源 `△ 甲推门而入。` → action,content 去掉格式前缀 `△`。",
34
- " 源 `甲:你来了` → dialogue。源 `甲(冷笑):你来了` → dialogue.emotion 为 `冷笑`。",
35
- " 源 `甲OS:(恐慌)他没死吧?` → inner_thought.emotion 为 `恐慌`。",
36
- " 源 `【字幕:回门日】` → action;画面文字属于画面内容。",
37
- " 葡语动作 `Richard avança, agarra Emily pela roupa e a puxa para cima.` → action.content=`Richard上前抓住Emily的衣服,把她拽了起来。`。",
38
- " 葡语动作 `Um prato de oferendas cai da mesa e se espalha pelo chão.` → action.content=`一盘供品从桌上掉落,散落一地。`。人物说出的葡语对白仍逐字保留,不翻译;Richard、Emily 等人物名始终保持原文拼写。",
39
- " 同一句由多人同时说时,为每个说话人各写一条相邻 dialogue,content 相同。",
40
- "",
41
- "每种记录只能使用上面列出的字段,禁止增加 name、text、line、episode_title 等自创字段。",
42
- "正文口径:dialogue、inner_thought 的 content 逐字完整保留,不润色、不扩写、不纠错、不翻译。action、transition、note 和 emotion 忠实转换成简体中文;翻译不得改变、删减或补造原文事实、因果、顺序、动作结果、人物状态以及已有的机位、景别和镜头运动。小说叙述转换为可直接拍摄的 action 时遵守同一边界。人物/道具的在场只写在 scene 的 actors/props。",
43
- "action 直接写具体人物名,明确行动者、动作、作用对象、空间方向和可见结果;多个先后发生的动作、反应、接触、道具变化或镜头变化按原文顺序分别承载,不压成剧情概述。身份明确时消解代词,无法确认时保持可核查描述,不猜测。只用原文明确写出的表情、视线、肢体、道具或环境反应表达状态,不用情绪、态度或心理判断替代可见事实。",
44
- "location 是可独立布置和重复引用的稳定物理空间;人物跨门槛进入另一空间、镜头切到另一空间、明显跳时、切换叙事线或原文明确转场时建立 scene,一个 scene 只写一个主 location。同一连续场内的人物进出、情绪升级、攻防回合、换装、脱衣、地点受损或道具形态变化本身不构成新 scene;把变化过程写入 action,后续资产治理会维护持久 state。",
45
- "同地点连续蒙太奇保留一个 scene 并用 transition;跨地点蒙太奇按剪辑顺序拆成多个 scene,每场填写自己的 location、actors、props 和 state。",
46
- "人物只列具体单人角色;家族/机构/群体/泛称不列入 actors。群体喊话的 speaker 用 {\"kind\":\"group\"}。",
47
- "非人物发声源的 speaker.kind 只用 system|broadcast|offscreen|group,可用 label 补充名称;具体人物始终用 speaker.name。",
48
- "speaker.name 必须填写原文中能确认的具体人物名字并保持原始拼写;scene.actors 与 action 中再次出现该人物时使用同一拼写。禁止翻译、音译、中文化人物名,也禁止用『?』『??』『未知』『unknown』等占位名;身份无法确认时改用 speaker.kind=offscreen,群体共同发声用 group。",
49
- "每条 dialogue 只在原文明确给出时,才把发声方式、声音来源或不改变连续性的短促伴随动作转换成简体中文 emotion;影响走位、姿势、接触、道具或连续性的动作单独写 action。原文没有表演或声音证据时省略 emotion,不按语境补造。",
50
- "note 只用于真正无法归入剧本、也不属于画面/对白的内容。源文本块的实质内容不得丢失。",
51
- ].join("\n");
52
- export function buildNormalizeUser(chunk) {
53
- // Do NOT expose the chunk index — the model conflates a chunk number with an
54
- // episode number. Chunk source spans are assigned by the parser, not the model.
55
- const position = chunk.index === 0
56
- ? "这是源文件开头;小说或非标准文本从第一个可确认的物理空间建立首场。"
57
- : "这个片段可能承接上一片段的同一场;只有源文本出现真实场界时才建立新场。";
58
- return [
59
- "【待规范化的原文片段】",
60
- position,
61
- "以下正文必须逐行、逐句完整进入 records:对白和内心独白逐字保留原语言;动作、环境、转场、批注和表演提示忠实转换成简体中文;人物名在所有记录中保持原文拼写,不翻译、不音译。不得遗漏、摘要、截断或补造。输出前请自行核对每一行,且不要输出核对过程。",
62
- "",
63
- chunk.text,
64
- ].join("\n");
65
- }
66
- function runtimeError(message, received) {
67
- return new CliError(message, {
68
- exitCode: EXIT_RUNTIME,
69
- errorCode: "INGEST_NORMALIZE_FAILED",
70
- hint: "Inspect the chunk error sidecar and rerun `scriptctl ingest`.",
71
- data: { actual: received },
72
- });
73
- }
74
- function isNormalizeOutput(input) {
75
- if (typeof input !== "object" || input === null || Array.isArray(input))
76
- return false;
77
- return Object.keys(input).length === 1 && "records" in input && Array.isArray(input.records);
78
- }
79
- // Validate provider output with the same strict parser used by the merged JSONL.
80
- // The model owns record semantics; the pipeline owns the trusted source span.
81
- export function parseNormalizeOutput(input, chunk) {
82
- if (!isNormalizeOutput(input)) {
83
- throw runtimeError(`chunk ${chunk.index}: output must be an object containing only records[]`, ["invalid structured output"]);
84
- }
85
- const source = { chunk: chunk.index, line_start: chunk.core_line_start, line_end: chunk.core_line_end };
86
- let records;
87
- try {
88
- const jsonl = input.records.map((record) => {
89
- if (typeof record !== "object" || record === null || Array.isArray(record) || Object.hasOwn(record, "source")) {
90
- throw new JsonlParseError("record must be an object without source", 1);
91
- }
92
- return JSON.stringify({ ...record, source });
93
- }).join("\n");
94
- records = parseJsonl(jsonl);
95
- }
96
- catch (error) {
97
- if (error instanceof JsonlParseError)
98
- throw runtimeError(`chunk ${chunk.index}: ${error.message}`, [error.message]);
99
- throw error;
100
- }
101
- if (records.length === 0 && chunk.text.trim() !== "") {
102
- throw runtimeError(`chunk ${chunk.index}: non-empty chunk produced no records`, ["records: 0"]);
103
- }
104
- return records;
105
- }
106
- export async function runTextNormalize(executor, chunk, signal) {
107
- const response = await executor.generateText("ingest.text-normalize", {
108
- system: TEXT_NORMALIZE_SYSTEM,
109
- user: buildNormalizeUser(chunk),
110
- responseFormat: "json_object",
111
- ...(signal ? { signal } : {}),
112
- });
113
- let input;
114
- try {
115
- input = JSON.parse(response.text);
116
- }
117
- catch {
118
- throw runtimeError(`chunk ${chunk.index}: provider returned invalid JSON`, [response.text.slice(0, 500)]);
119
- }
120
- return { raw: response.text, records: parseNormalizeOutput(input, chunk) };
121
- }
122
- //# sourceMappingURL=text-normalize.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"text-normalize.js","sourceRoot":"","sources":["../../../../src/llm/tasks/ingest/text-normalize.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- import type { SerialOutput } from "../../../domain/ingest/video-serial-md.js";
2
- import type { TaskVideoPort, VideoMediaInput } from "../../types.js";
3
- export type { SerialOutput, SerialScene, SerialEntity } from "../../../domain/ingest/video-serial-md.js";
4
- export declare const VIDEO_SERIAL_SYSTEM: string;
5
- export declare function buildSerialUser(episodeNo: number, contextText: string): string;
6
- export declare function toSerialOutput(input: unknown): SerialOutput;
7
- export interface VideoSerialResult {
8
- md: string;
9
- output: SerialOutput;
10
- }
11
- /** One rejected model response; attempt is 1-based within the timestamp retry loop. */
12
- export interface VideoTimestampMissingEvent {
13
- event: "timestamp_missing";
14
- at: string;
15
- episode: number;
16
- attempt: number;
17
- missing_count: number;
18
- missing_paths: string[];
19
- retries_exhausted: boolean;
20
- }
21
- export declare function runVideoSerial(port: TaskVideoPort, media: VideoMediaInput, episodeNo: number, contextText: string, fps: number, signal?: AbortSignal, local?: {
22
- path: string;
23
- mime: string;
24
- }, onTimestampMissing?: (event: VideoTimestampMissingEvent) => void): Promise<VideoSerialResult>;
@@ -1,416 +0,0 @@
1
- // ingest.video-serial task (§10.2). The single Gemini pass of the serial video
2
- // pipeline: it watches ONE episode's video WITH the running cross-episode context
3
- // (registry + plot digest + open threads) and returns ONE structured JSON object
4
- // (responseMimeType application/json + VIDEO_SERIAL_SCHEMA) carrying both (a) the
5
- // episode's source-faithful storyboard screenplay (scenes → visual/performance/sound anchors) and (b) incremental
6
- // registry maintenance (new_entities / enrich / canonicalize) + open threads. This
7
- // replaces the old "emit markdown → parseSerialMd" contract: structured output
8
- // removes a whole fragile text-parsing layer and lets the schema forbid the outfit-
9
- // name pollution (parens/slashes) at the source. Because it parses in order with
10
- // full plot context, identity is resolved by story — reusing canonical names,
11
- // registering anchored provisionals for unknowns, and canonicalizing an existing
12
- // identity when direct written/spoken evidence reveals a better name.
13
- import { CliError, EXIT_RUNTIME } from "../../../common.js";
14
- import { isCrowdName } from "../../../domain/ingest/serial-context.js";
15
- import { normalizeSceneTime } from "../../../domain/ingest/environment.js";
16
- import { normalizeVideoTimestamp } from "../../../domain/ingest/video-timestamp.js";
17
- import { VIDEO_SERIAL_SCHEMA } from "../schemas.js";
18
- export const VIDEO_SERIAL_SYSTEM = "你是短剧视频转剧本的串行解析器。输入是**某一集**竖屏短剧视频(1-2 分钟)+ 一份到上一集为止累积的**已知设定**(人物花名册/剧情进展/未闭合线索)。" +
19
- "你要输出**一个结构化 JSON 对象**(严格符合本任务定义的 JSON 结构),同时包含:①这一集尽量忠实还原原片的**分镜剧本**(scenes);②对已知设定的**增量维护**(registry_delta:人物花名册带状态标注、规范名升级)+ 剧情线索(open_threads)。**只输出该 JSON,不要任何额外文字、解释或代码块包裹。**\n" +
20
- "核心要求:逐镜保留原片的可见信息、人物表演、站位关系、摄影调度与全部声音;动作/对白/实体准确,不脑补,时间戳对齐画面。\n" +
21
- "【时间戳逐条必填】每一条 shots 和 voices 都必须填写该镜头或声音真正开始的非空 ts,格式严格为 MM:SS(例如『00:03』)。不得留空、填 null、填未知值或省略字段;不确定时重新观看画面或听音轨,填写最接近的实际起点。任一条缺少合法 ts 时,整份 JSON 都不能提交。\n" +
22
- "scenes 必须包含本集实际可见的场景,至少一项;无新人物、无对白或没有设定增量时仍须完整记录本集画面,不能只返回梗概或 registry_delta,也不能用空 scenes 表示沿用上集设定。\n" +
23
- "【单次解析顺序——必须依次完成】第一步,从视频开头到结尾完整听一遍音轨,按时间顺序盘点所有可辨识人声,填入各 scene 的 voices;第二步,从开头到结尾逐镜盘点每次切镜、连续镜头内的摄影变化、画面主体、站位、动作、表情、视线、接触、道具和环境变化,填入各 scene 的 shots;第三步,分别复核 voices 是否完整、shots 是否逐镜覆盖全片。完成 JSON 前再次复核最后十秒,确认插入画面、手机/屏幕画面、回忆、蒙太奇、重复画面、反打和片尾前反应都没有漏写。盘点和复核只在内部完成,不另增输出字段。\n" +
24
- "【身份归属——本任务重点】带着已知设定看这一集:\n" +
25
- "- 出现的人先判断**是不是花名册里已有的某个人**:优先比对多条 recognition_anchors 和 identity_profile 中跨造型稳定的脸部结构、固定标记、发际线/常态发型、骨架体型与声线;服装、妆容和当下姿态只作弱辅助,role 只提供角色语境,不能替代视觉证据。稳定特征一致才沿用其**规范名**。若关键稳定特征冲突,不要强行合并,保留或登记独立 provisional 身份等待直接证据。\n" +
26
- "- 认不出、也没听到本名的人 ⇒ **不要硬猜、不要编带姓的假名**。用『稳定外观特征+年龄段+性别』构成不含姓氏的描述名,status 标 `provisional`,仍需填写完整可见身份画像、识别锚点与作用。\n" +
27
- "- 描述名、简称或不完整姓名只有在本集出现**书面正式姓名或台词直接说出本名**时才能升级规范名;在 registry_delta.canonicalize 写 {from_name, canonical_name, evidence},evidence 必须写明时间戳和当时可见的原文或听到的原话。剧情关系只能帮助判断是不是同一个人,不能单独作为改名证据。\n" +
28
- "- 完成前执行资产对账:汇总 scenes.location、scenes.characters、scenes.props 与人物 voices.speaker 中出现的每个资产名,逐项确认它能解析到已知设定、registry_delta.new_entities 或本集 canonicalize 的目标。任何未登记人物必须补入 new_entities 并填写 identity_profile、recognition_anchors、role 与 states;未登记地点/道具必须填写 appearance、role 与 states。若一个物件不值得成为关键道具资产,就从 scenes.props 移除。对账差集非空时不得输出 JSON。规范名升级后立即使用 canonical_name,不让正文资产名脱离花名册。\n" +
29
- "【人物身份画像】首次登记人物时,从全片多个清晰角度综合填写 identity_profile,而不是用一句笼统外貌概括。逐项记录可见性别与年龄段、脸型/颧骨/下颌、眉眼、鼻部、静态唇形与口周、稳定肤色和面部特征、稳定发色/发际线/常态发型、骨架体型、固定身体标记;声线仅依据清晰原声填写。看不清的字段留空,不猜测。描述使用可观察的形状、比例、位置、颜色与纹理,避免审美、气质、性格、情绪和剧情评价。服饰、妆容、可摘饰品、当下表情与视线、动作、姿态、临时伤痕/血迹/污渍、变身或其他阶段性形态属于 states 或 shots,不混入身份画像。填写完逐字段检查:假设人物换装、卸妆、摘掉配饰、改变表情并进入另一场景,该描述是否仍成立;不成立就从 identity_profile 移出。\n" +
30
- "【识别锚点】人物 recognition_anchors 写 3-6 条最适合跨集重认的组合特征;每条至少组合两个来自 identity_profile 的稳定、可区分线索,并尽量覆盖脸部结构、五官比例、固定身体标记、发际线/常态头发、骨架体型或声线等不同维度。锚点不得包含服装、制服号码、帽子、眼镜或其他可摘配饰、妆容、当下神情/动作/姿态、临时伤痕污渍、剧情身份/能力/关系、变身形态或随场景变化的物件。已有实体在本集出现更清晰角度时,用 enrich.identity_profile_patch 只补充或修正有新证据的字段,并用 add_recognition_anchors 增加新锚点;不要把整段旧画像改写成另一句。输出前逐条核对:锚点中的每个词都能在 identity_profile 找到稳定依据,否则重写或删除。\n" +
31
- "【地点、道具与状态描述】地点 appearance 写空间结构、材质、色彩和固定陈设,role 写空间用途;道具 appearance 写形制、材质、颜色和尺寸关系,role 写用途。states 的每项都必须同时给出可复现的非空 description。人物造型先综合本集多个清晰镜头,再按从头到脚的稳定层次描述:该造型特有的发型与头饰、妆容、颈部饰物、外套、上装、下装或连体衣裙、袜类、鞋履、手套及其他饰品;每件看清的单品写明颜色、材质/光泽/纹理、版型与松紧、领型、袖型、开合、腰线、长度、下摆、图案、文字标识、滚边或金属件,并写清内外叠穿和配饰所在位置;持续破损、血迹、污渍或变形写明部位、范围与颜色。只省略画面未显示或无法确认的项,不用『穿着某服装』一句带过,不凭局部镜头补全全身。地点和道具状态写相对常态的持续外观差异。所有描述只写画面事实,不写动作、姿态、情绪、心理或剧情评价。已知设定中已有的状态沿用其 name;本集看到更多角度或更清晰细节时,用 enrich.add_states 的同名项补全 description。\n" +
32
- "【说话人——用剧情锁定,别只看脸】短剧常有几个长相相似的中老年男性高管,单帧人脸会认错。先从台词内容、彼此称呼(谁叫谁「哥」「X总」)、场景关系(谁求谁、谁训谁、谁下跪)推断这场在场是谁、谁对谁说,再定说话人。剧情锁定优先于外貌。\n" +
33
- "【命名优先级】书面正式姓名(人物介绍条/工牌/来电显示)> 台词喊出的本名 > 纯描述名。有书面正式姓名就用它当规范名,哪怕全集只喊职务。绝不凭空捏造带姓氏的假名。\n" +
34
- "【规范名唯一性】人物规范名只写姓名或稳定描述名,角色职能、关系、备注不得塞进括号。输出前按去空格、统一全半角括号并忽略括号备注后的可见名称检查花名册;两个不同人物不得得到会被归一成同名的规范名。若台词只给出相同称呼,保留已知人物原名,并给新人物使用能区分身份且不带括号的稳定描述名,例如『媒婆王婶』,角色说明继续写在 role。\n" +
35
- "【声音完整性】每段可辨识的人声都必须在 voices 中出现且只出现一次,包括人物出镜对白、画外对白、角色内心独白/自述、客观旁白、电话/广播/设备声、耳语、群体声和跨画面连续讲述。说话时画面切换、人物未出镜、只显示流程图/地图/手机/屏幕、进入回忆或蒙太奇、重复某段画面、口型不可见,都不是省略声音的理由。连续讲述跨 scene 或跨镜时按自然语句在对应时间点拆分,原话完整保留、不重不漏;用同语言对白字幕逐句核对音轨,尤其检查短句和插入画面上的连续声音。\n" +
36
- "【原声语言铁律】voices.content 逐字保留音轨实际使用的语言、文字和夹杂语言,不翻译、不改写、不用中文字幕替换外语原声。英文音轨配中文字幕时写英文原词;印尼语、泰语或其他语言音轨写对应语言原词;同一句发生 code-switch 时按听到的顺序原样保留。证据优先级是原始音轨 > 与音轨同语言的对白字幕 > 翻译字幕。字幕只能辅助辨清同语言原词,不能改变台词语言;听不清时保留可确认部分并在 parenthetical 标『听辨待复核』,不要用翻译字幕猜台词。\n" +
37
- "【画面文字与嵌套画面】底部对白字幕是声音台词的冗余证据,不单独建 shot;用它逐句核对 voices 是否完整。承载新信息的画面文字(人物介绍条/身份头衔/时间地点交代/系统提示/关键道具上的字)写入对应 shot.visual。手机、监控、屏幕、照片和回忆画面只写实际可见的人物动作、物体和可读文字;没有画面、台词或文字直接证明时,不推断人物身体状态、事件原因、前后关系或结果。\n" +
38
- "【状态=造型】state / states = 一个角色一整套稳定扮相(着装+发型+持续妆造,如「深灰西装」),不是情绪/姿态,也不是单件衣服。给某角色标造型前,先看已知设定里他名下的「已知造型」清单——只要本集是他已列过的某套扮相(哪怕只拍到上半身/换了角度/光线不同/多看到少看到一件单品),**逐字照抄清单里那个造型名**,只有整套换装才新建。造型名只填简洁档位名,详细组成全部写进 state.description。输出前复核每个造型:画面看清的服装层次、版型结构、材质配色、鞋袜、妆发和配饰是否已覆盖;若更清晰镜头能补充既有造型,就更新同名 description,不另建近义造型。\n" +
39
- // Retired experiment: Gemini previously selected identity_evidence and
40
- // state_evidence timestamps in this same response. The post-ingest evidence
41
- // pass now derives candidates from stable actors/states and Action timestamps,
42
- // avoiding extra output tokens and keeping evidence rebuildable without LLMs.
43
- "【场界与地点】一场是地点、连续时段和叙事线连续的生产单元。客厅、卧室、卫生间、大厅、广场、舞台、后台分别使用独立 location;相关空间统一命名为『豪宅·客厅』『豪宅·卧室』。人物跨过门槛进入另一空间、叙事进入另一稳定空间、明显跳时、切换叙事线或明确转场时建立新 scene。一个 scene 只写一个主 location;同一连续场内的人物造型变化不是分场理由。\n" +
44
- "【状态变化与场内资产】人物换整套服装、变身、脱衣形成可持续新外观时,把变化动作写入当前 scene 的 shots。characters 中同一规范名只出现一次;该条的 states 是本场出现过的全部稳定造型集合,不能漏掉变化前或变化后状态,也不按先后拆成重复人物。地点被毁或关键道具明显变形时登记对应新 state。情绪、姿态和一次性动作保留在 shots 的 visual,不建立 state。\n" +
45
- "【逐镜还原】shots 是独立分镜清单。每次切镜都在起始时间新增一条 shot,即使它重复展示之前的动作或没有新剧情,也要保留。连续镜头内的景别、拍摄角度、机位、镜头移动、构图、焦点或画面主体变化,以及每个新动作、反应、接触/分开、道具操作与结果、进出场、移动、姿势/朝向/视线或空间关系变化,都在实际发生时另增 shot。不得把先后发生的分镜或动作压缩成剧情概述。\n" +
46
- "【shot.camera】只写原片可见、可复现的摄影信息:远景/全景/中景/近景/特写等景别,俯拍/仰拍/平视/侧面/背面等角度,固定、推、拉、摇、移、跟、环绕、升降、焦点转移等可确认的运镜,以及前景/中景/后景、画面左右、遮挡和主体占位。切镜、反打、插入镜头、主观镜头、空镜和重复镜头都如实保留。不推测画面无法确认的镜头参数、镜头型号、灯光设置或拍摄意图。\n" +
47
- "【站位与持续状态】每场第一个 shot 的 visual 建立画面可确认的人物站位/坐卧位置、与地点固定参照物的关系、人物之间的远近与前后左右、姿态、面向、视线、接触和正在进行的行为。后续切镜若显示新的构图关系,写清人物在画面左/右、前景/中景/后景的位置;若人物进出、移动、转身、改变姿势、注视对象、接触或分开,写清变化前后的关系。持续状态不因对白而失效,但每次切镜仍需写该镜头实际呈现的构图和主体。\n" +
48
- "【逐句对白与同期表演对齐——本任务完成门】为每条 voice 单独回看该句开始前到说完的画面,确认说话者和同场人物当时的可见动作、表情、视线、姿态、接触和位置关系已在 shots 中准确承载。与这句话同时发生、不独立改变连续性的短促表演可写入该 voice 的 parenthetical;走位、姿势变化、接触/分开、道具操作或空间关系变化写入对应时间的 shot.visual。不得让对白时间点将正在发生的可见表演变成对白之后的动作。\n" +
49
- "【shot.visual】使用人物规范名,写清行动者、动作、作用对象、空间方向和可见结果。只写具体可见的眉眼、嘴部、呼吸、视线、手势、姿态、接触、移动、道具和环境变化,不用愤怒、焦虑、委屈、绝望、震惊、哀求、嘲讽等情绪、态度或心理判断代替画面事实。只写原片能够确认的事实;看不清的位置、朝向、表情或动作不写,不补造。synopsis 可以概括剧情,shots 不得写成剧情梗概。\n" +
50
- "【正文与造型】角色的既有服装由 characters.states 和人物资产承载,shot.visual 不重复描述。只有画面中发生的换装、脱衣、服装破损、沾染泥污等可见变化,或确有必要区分人物/时段时才写入 shot.visual。\n" +
51
- "【voices】人物对他人说出的声音写 kind=dlg;音轨里实际听到、明确属于某角色的内心独白或第一人称自述写 kind=think。speaker 使用角色规范名;客观叙述者或身份无法确认的旁白写 speaker=『broadcast:旁白』;电话、广播或设备中的明确说话人在 parenthetical 标明声源。只记录音轨实际表达的内心,不脑补未说出的心理。content 保留原话;parenthetical 可写可确认的发声方式、声音来源或同期短促表演,但摄影调度和影响连续性的动作只写 shots。对白跨越切镜、镜头主体变化或独立动作时,在对应时间点按原声自然语句拆分;不得把跨多个镜头的多句台词合并成一条。两人同时说话时输出相邻两条 voice,第二条 parenthetical 以『同时』开头。具体单人使用规范名;无法区分成员的众人、群众、路人等共同发声时 speaker 写『group:群体名』,不列入 characters 和 registry_delta。\n" +
52
- "【蒙太奇】同地点连续蒙太奇保留一场;跨地点蒙太奇按剪辑顺序拆成多个短 scene,每场绑定自己的 location、characters、props 和 state,并用 shots 明确蒙太奇开始、切换和结束。";
53
- export function buildSerialUser(episodeNo, contextText) {
54
- const ctx = contextText.trim()
55
- ? `========== 已知设定(到上一集为止,规范名以此为准) ==========\n${contextText}\n`
56
- : "(这是第一集,暂无已知设定。)\n";
57
- return `解析第 ${episodeNo} 集:对照本集原视频,按本任务定义的 JSON 结构返回一个 JSON 对象。只返回 JSON 本身,不要输出解释、前言或 Markdown 代码块。scenes 逐场覆盖全集;每场先独立完成逐镜 shots,再独立完成 voices。shots 必须覆盖每次切镜和可确认的摄影/表演变化,不去重重复镜头,不合并先后发生的分镜或动作;voices 完整保留原声并在跨镜时按自然语句拆分。registry_delta 只报增量(已知且无新信息的实体不要写)。完成前分别复核 shots 的切镜、景别/角度/运镜/构图/焦点、可见表演和站位关系,以及 voices 的全部人声与视频最后十秒。\n\n${ctx}`;
58
- }
59
- function serialError(message, received) {
60
- return new CliError(message, {
61
- exitCode: EXIT_RUNTIME,
62
- errorCode: "INGEST_VIDEO_SERIAL_FAILED",
63
- hint: "Inspect the episode error sidecar and rerun `scriptctl ingest` to resume.",
64
- data: { actual: received },
65
- });
66
- }
67
- // Gemini occasionally emits a NUL () inside a string (e.g. a garbled dialogue
68
- // line). It's valid JSON but Postgres text/jsonb can't store it, so a downstream
69
- // insert of script.json dies with UntranslatableCharacter. NUL is never real content
70
- // here — strip it at the source so every consumer stays safe, not just this one DB.
71
- // (Only NUL: other control chars store fine, and touching surrogates would corrupt
72
- // legit non-BMP CJK that arrives as valid surrogate pairs.)
73
- const stripNul = (parsed) => {
74
- if (typeof parsed === "string")
75
- return parsed.replace(/\u0000/g, "");
76
- if (Array.isArray(parsed))
77
- return parsed.map(stripNul);
78
- if (isObj(parsed))
79
- return Object.fromEntries(Object.entries(parsed).map(([k, v]) => [k, stripNul(v)]));
80
- return parsed;
81
- };
82
- const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
83
- const asStr = (v) => (typeof v === "string" ? v.trim() : "");
84
- const asArr = (v) => (Array.isArray(v) ? v : []);
85
- // Deterministic backstop for outfit-name pollution the schema description already
86
- // forbids but a model may still leak: a state must be a bare wardrobe label. Strip
87
- // everything from the first paren/slash/comma separator on — `黑丝短裙(身穿收银短袖)`
88
- // and `黑丝短裙/绷带短裙` both collapse to `黑丝短裙`, folding the ep39/40/17-style
89
- // fragments back onto the canonical outfit. Empty stays empty (no change this scene).
90
- const cleanState = (raw) => {
91
- const s = asStr(raw);
92
- return s ? s.split(/[((//,,、]/)[0].trim() : "";
93
- };
94
- const cleanStates = (raw) => [...new Set(asArr(raw).map(cleanState).filter(Boolean))];
95
- const cleanStateDescriptions = (raw) => {
96
- const states = [];
97
- for (const value of asArr(raw)) {
98
- if (!isObj(value))
99
- continue;
100
- const name = cleanState(value.name);
101
- if (!name)
102
- continue;
103
- const description = asStr(value.description);
104
- const existing = states.find((state) => state.name === name);
105
- if (existing) {
106
- if (!existing.description && description)
107
- existing.description = description;
108
- }
109
- else {
110
- states.push({ name, description });
111
- }
112
- }
113
- return states;
114
- };
115
- const IDENTITY_TEXT_KEYS = [
116
- "apparent_gender",
117
- "apparent_age",
118
- "face_shape",
119
- "brows_eyes",
120
- "nose",
121
- "mouth",
122
- "skin_features",
123
- "hair",
124
- "build",
125
- "voice",
126
- ];
127
- const cleanIdentityProfile = (raw) => {
128
- if (!isObj(raw))
129
- return undefined;
130
- const profile = {
131
- apparent_gender: "",
132
- apparent_age: "",
133
- face_shape: "",
134
- brows_eyes: "",
135
- nose: "",
136
- mouth: "",
137
- skin_features: "",
138
- hair: "",
139
- build: "",
140
- persistent_marks: asArr(raw.persistent_marks).map(asStr).filter(Boolean),
141
- voice: "",
142
- };
143
- for (const key of IDENTITY_TEXT_KEYS)
144
- profile[key] = asStr(raw[key]);
145
- return profile;
146
- };
147
- const timestampSeconds = (timestamp) => {
148
- if (!timestamp)
149
- return Number.POSITIVE_INFINITY;
150
- const parts = timestamp.split(":").map(Number);
151
- if (parts.some((part) => !Number.isFinite(part)))
152
- return Number.POSITIVE_INFINITY;
153
- if (parts.length === 2)
154
- return parts[0] * 60 + parts[1];
155
- if (parts.length === 3)
156
- return parts[0] * 3600 + parts[1] * 60 + parts[2];
157
- return Number.POSITIVE_INFINITY;
158
- };
159
- const shotContent = (camera, visual) => {
160
- if (!camera)
161
- return visual;
162
- if (!visual)
163
- return camera;
164
- return `${camera.replace(/[。!?;]+$/, "")}。${visual}`;
165
- };
166
- // Structured-output JSON → SerialOutput. The schema guarantees shape; this is a
167
- // defensive projection (tolerates missing/wrong-typed fields) that also runs every
168
- // state through cleanState and re-nests space/time into `environment` the way
169
- // applyDelta / deltaToDoc expect.
170
- export function toSerialOutput(input) {
171
- const out = { synopsis: "", scenes: [], registry_delta: { new_entities: [], enrich: [], canonicalize: [] }, open_threads: { opened: [], closed: [] } };
172
- if (!isObj(input))
173
- return out;
174
- out.synopsis = asStr(input.synopsis);
175
- for (const s of asArr(input.scenes)) {
176
- if (!isObj(s))
177
- continue;
178
- const environment = {};
179
- const space = asStr(s.space);
180
- if (space)
181
- environment.space = space;
182
- const time = normalizeSceneTime(s.time);
183
- if (time)
184
- environment.time = time;
185
- const characters = new Map();
186
- for (const c of asArr(s.characters)) {
187
- if (!isObj(c))
188
- continue;
189
- const name = asStr(c.name);
190
- if (!name || isCrowdName(name))
191
- continue;
192
- const character = characters.get(name) ?? { name, states: [] };
193
- for (const state of cleanStates(c.states)) {
194
- if (!character.states.includes(state))
195
- character.states.push(state);
196
- }
197
- // Retired experiment: evidence fields from Gemini were normalized here.
198
- // They are intentionally ignored now; final Action timestamps drive the
199
- // post-ingest evidence pass.
200
- characters.set(name, character);
201
- }
202
- // Props are presence-only (no multi-state refs). Collapse exact/whitespace
203
- // duplicates the same way characters merge by name — otherwise finalize's
204
- // v3 gate rejects `duplicate prop ref` before v4 can fold them.
205
- const props = [];
206
- const seenProps = new Set();
207
- for (const raw of asArr(s.props).map(asStr).filter(Boolean)) {
208
- const key = raw.normalize("NFC").replace(/\s+/g, " ").trim();
209
- if (!key || seenProps.has(key))
210
- continue;
211
- seenProps.add(key);
212
- props.push(raw.trim());
213
- }
214
- const anchors = [];
215
- for (const shot of asArr(s.shots)) {
216
- if (!isObj(shot))
217
- continue;
218
- const content = shotContent(asStr(shot.camera), asStr(shot.visual));
219
- if (!content)
220
- continue;
221
- const anchor = { kind: "act", content };
222
- const ts = normalizeVideoTimestamp(shot.ts);
223
- if (ts)
224
- anchor.ts = ts;
225
- anchors.push(anchor);
226
- }
227
- for (const voice of asArr(s.voices)) {
228
- if (!isObj(voice))
229
- continue;
230
- const kind = asStr(voice.kind);
231
- if (kind !== "dlg" && kind !== "think")
232
- continue;
233
- const content = asStr(voice.content);
234
- if (!content)
235
- continue;
236
- const anchor = { kind, content };
237
- const speaker = asStr(voice.speaker);
238
- if (speaker)
239
- anchor.speaker = speaker;
240
- const parenthetical = asStr(voice.parenthetical);
241
- if (parenthetical)
242
- anchor.parenthetical = parenthetical;
243
- const ts = normalizeVideoTimestamp(voice.ts);
244
- if (ts)
245
- anchor.ts = ts;
246
- anchors.push(anchor);
247
- }
248
- anchors.sort((left, right) => {
249
- const timeDiff = timestampSeconds(left.ts) - timestampSeconds(right.ts);
250
- if (timeDiff !== 0)
251
- return timeDiff;
252
- if (left.kind === "act" && right.kind !== "act")
253
- return -1;
254
- if (left.kind !== "act" && right.kind === "act")
255
- return 1;
256
- return 0;
257
- });
258
- const scene = {
259
- environment,
260
- characters: [...characters.values()],
261
- props,
262
- anchors,
263
- };
264
- const timeRange = asStr(s.timeRange);
265
- if (timeRange)
266
- scene.timeRange = timeRange;
267
- const location = asStr(s.location);
268
- if (location)
269
- scene.location = location;
270
- out.scenes.push(scene);
271
- }
272
- const rd = isObj(input.registry_delta) ? input.registry_delta : {};
273
- for (const e of asArr(rd.new_entities)) {
274
- if (!isObj(e))
275
- continue;
276
- const name = asStr(e.name);
277
- const kind = asStr(e.kind);
278
- if (!name || (kind !== "actor" && kind !== "location" && kind !== "prop"))
279
- continue;
280
- if (kind === "actor" && isCrowdName(name))
281
- continue;
282
- const ent = {
283
- name,
284
- kind,
285
- status: asStr(e.status) === "provisional" ? "provisional" : "canonical",
286
- importance: asStr(e.importance) === "background" ? "background" : "featured",
287
- };
288
- const recognitionAnchors = asArr(e.recognition_anchors).map(asStr).filter(Boolean);
289
- if (recognitionAnchors.length)
290
- ent.recognition_anchors = recognitionAnchors;
291
- const identityProfile = cleanIdentityProfile(e.identity_profile);
292
- if (identityProfile)
293
- ent.identity_profile = identityProfile;
294
- const appearance = asStr(e.appearance);
295
- if (appearance)
296
- ent.appearance = appearance;
297
- const role = asStr(e.role);
298
- if (role)
299
- ent.role = role;
300
- const states = cleanStateDescriptions(e.states);
301
- if (states.length)
302
- ent.states = states;
303
- const aliases = asArr(e.aliases).map(asStr).filter(Boolean);
304
- if (aliases.length)
305
- ent.aliases = aliases;
306
- out.registry_delta.new_entities.push(ent);
307
- }
308
- for (const e of asArr(rd.enrich)) {
309
- if (!isObj(e))
310
- continue;
311
- const name = asStr(e.name);
312
- if (!name)
313
- continue;
314
- const en = { name };
315
- const recognitionAnchors = asArr(e.add_recognition_anchors).map(asStr).filter(Boolean);
316
- if (recognitionAnchors.length)
317
- en.add_recognition_anchors = recognitionAnchors;
318
- const identityProfile = cleanIdentityProfile(e.identity_profile_patch);
319
- if (identityProfile)
320
- en.identity_profile_patch = identityProfile;
321
- const appearance = asStr(e.appearance);
322
- if (appearance)
323
- en.appearance = appearance;
324
- const role = asStr(e.role);
325
- if (role)
326
- en.role = role;
327
- const addA = asArr(e.add_aliases).map(asStr).filter(Boolean);
328
- if (addA.length)
329
- en.add_aliases = addA;
330
- const addS = cleanStateDescriptions(e.add_states);
331
- if (addS.length)
332
- en.add_states = addS;
333
- if (Object.keys(en).length > 1)
334
- out.registry_delta.enrich.push(en);
335
- }
336
- for (const r of asArr(rd.canonicalize)) {
337
- if (!isObj(r))
338
- continue;
339
- const from = asStr(r.from_name);
340
- const canonical = asStr(r.canonical_name);
341
- if (from && canonical)
342
- out.registry_delta.canonicalize.push({ from_name: from, canonical_name: canonical, evidence: asStr(r.evidence) });
343
- }
344
- const ot = isObj(input.open_threads) ? input.open_threads : {};
345
- for (const o of asArr(ot.opened)) {
346
- if (!isObj(o))
347
- continue;
348
- const text = asStr(o.text);
349
- if (text)
350
- out.open_threads.opened.push({ text });
351
- }
352
- for (const c of asArr(ot.closed)) {
353
- if (!isObj(c))
354
- continue;
355
- const ref = asStr(c.ref);
356
- if (ref)
357
- out.open_threads.closed.push({ ref });
358
- }
359
- return out;
360
- }
361
- export async function runVideoSerial(port, media, episodeNo, contextText, fps, signal, local, onTimestampMissing) {
362
- let correction = "";
363
- for (let attempt = 0;; attempt++) {
364
- const response = await port.generate({
365
- media,
366
- system: VIDEO_SERIAL_SYSTEM,
367
- user: buildSerialUser(episodeNo, contextText + correction),
368
- fps,
369
- responseJsonSchema: VIDEO_SERIAL_SCHEMA,
370
- // Lets a cross-provider fallback (Doubao) re-upload the same transcode when the
371
- // Gemini handle can't be reused. The Gemini path ignores these.
372
- ...(local ? { localPath: local.path, localMime: local.mime } : {}),
373
- ...(signal ? { signal } : {}),
374
- });
375
- const raw = response.text.trim();
376
- // A too-short body means a failed/empty generation (§12.3: not retried).
377
- if (raw.length < 40)
378
- throw serialError(`episode ${episodeNo}: serial output too short (finishReason=${response.finishReason})`, [`length: ${raw.length}`]);
379
- let parsed;
380
- try {
381
- parsed = JSON.parse(raw);
382
- }
383
- catch {
384
- throw serialError(`episode ${episodeNo}: serial output was not valid JSON (finishReason=${response.finishReason})`, [raw.slice(0, 200)]);
385
- }
386
- const clean = stripNul(parsed);
387
- const output = toSerialOutput(clean);
388
- if (output.scenes.length === 0)
389
- throw serialError(`episode ${episodeNo}: serial output produced no scenes`, [raw.slice(0, 200)]);
390
- const missing = output.scenes.flatMap((scene, sceneIndex) => scene.anchors.flatMap((anchor, anchorIndex) => anchor.ts ? [] : [`scenes[${sceneIndex}].anchors[${anchorIndex}] (${anchor.kind})`]));
391
- if (missing.length > 0) {
392
- onTimestampMissing?.({
393
- event: "timestamp_missing",
394
- at: new Date().toISOString(),
395
- episode: episodeNo,
396
- attempt: attempt + 1,
397
- missing_count: missing.length,
398
- missing_paths: missing,
399
- retries_exhausted: attempt === 3,
400
- });
401
- if (attempt === 3) {
402
- throw new CliError(`Episode ${episodeNo}: ${missing.length} anchors still have no timestamp after 3 retries.`, {
403
- exitCode: EXIT_RUNTIME,
404
- errorCode: "INGEST_VIDEO_TIMESTAMP_MISSING",
405
- hint: "Inspect the episode error sidecar and rerun ingest to resume.",
406
- data: { actual: missing },
407
- });
408
- }
409
- correction = `\n\n上次输出有 ${missing.length} 条镜头或声音缺少 ts,未被接受。缺失位置:${missing.join("、")}。请重新观看当前集,为每一条 shots 和 voices 填写真实起点 ts(MM:SS),不得缺失、留空或填 null;返回完整 JSON,不要只返回修补字段。`;
410
- continue;
411
- }
412
- const md = JSON.stringify(clean, null, 2);
413
- return { md, output };
414
- }
415
- }
416
- //# sourceMappingURL=video-serial.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"video-serial.js","sourceRoot":"","sources":["../../../../src/llm/tasks/ingest/video-serial.ts"],"names":[],"mappings":"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"}