@lingjingai/scriptctl 0.63.14 → 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 (777) hide show
  1. package/README.md +7 -1
  2. package/changes/0.63.15.md +15 -0
  3. package/dist/bin.js +1 -20844
  4. package/dist/chunk-3LPIMYYI.js +823 -0
  5. package/dist/cli.d.ts +214 -5
  6. package/dist/cli.js +1 -187
  7. package/dist/review-agent.js +56 -3593
  8. package/package.json +12 -5
  9. package/dist/bin.d.ts +0 -2
  10. package/dist/bin.js.map +0 -7
  11. package/dist/cli/register-authoring.d.ts +0 -4
  12. package/dist/cli/register-authoring.js +0 -35
  13. package/dist/cli/register-authoring.js.map +0 -1
  14. package/dist/cli/register-review.d.ts +0 -3
  15. package/dist/cli/register-review.js +0 -20
  16. package/dist/cli/register-review.js.map +0 -1
  17. package/dist/cli/register-script.d.ts +0 -3
  18. package/dist/cli/register-script.js +0 -297
  19. package/dist/cli/register-script.js.map +0 -1
  20. package/dist/cli/register-tools.d.ts +0 -3
  21. package/dist/cli/register-tools.js +0 -23
  22. package/dist/cli/register-tools.js.map +0 -1
  23. package/dist/cli/register-workflows.d.ts +0 -4
  24. package/dist/cli/register-workflows.js +0 -108
  25. package/dist/cli/register-workflows.js.map +0 -1
  26. package/dist/cli/registry.d.ts +0 -14
  27. package/dist/cli/registry.js +0 -65
  28. package/dist/cli/registry.js.map +0 -1
  29. package/dist/cli.js.map +0 -1
  30. package/dist/common.d.ts +0 -93
  31. package/dist/common.js +0 -240
  32. package/dist/common.js.map +0 -1
  33. package/dist/domain/authoring/apply.d.ts +0 -1
  34. package/dist/domain/authoring/apply.js +0 -2
  35. package/dist/domain/authoring/apply.js.map +0 -1
  36. package/dist/domain/authoring/export.d.ts +0 -1
  37. package/dist/domain/authoring/export.js +0 -2
  38. package/dist/domain/authoring/export.js.map +0 -1
  39. package/dist/domain/authoring/parser.d.ts +0 -2
  40. package/dist/domain/authoring/parser.js +0 -3
  41. package/dist/domain/authoring/parser.js.map +0 -1
  42. package/dist/domain/authoring/serializer.d.ts +0 -1
  43. package/dist/domain/authoring/serializer.js +0 -2
  44. package/dist/domain/authoring/serializer.js.map +0 -1
  45. package/dist/domain/authoring/shared/bracket.d.ts +0 -4
  46. package/dist/domain/authoring/shared/bracket.js +0 -95
  47. package/dist/domain/authoring/shared/bracket.js.map +0 -1
  48. package/dist/domain/authoring/shared/types.d.ts +0 -12
  49. package/dist/domain/authoring/shared/types.js +0 -2
  50. package/dist/domain/authoring/shared/types.js.map +0 -1
  51. package/dist/domain/authoring/types.d.ts +0 -2
  52. package/dist/domain/authoring/types.js +0 -3
  53. package/dist/domain/authoring/types.js.map +0 -1
  54. package/dist/domain/authoring/v3/apply.d.ts +0 -33
  55. package/dist/domain/authoring/v3/apply.js +0 -784
  56. package/dist/domain/authoring/v3/apply.js.map +0 -1
  57. package/dist/domain/authoring/v3/export.d.ts +0 -7
  58. package/dist/domain/authoring/v3/export.js +0 -85
  59. package/dist/domain/authoring/v3/export.js.map +0 -1
  60. package/dist/domain/authoring/v3/parser.d.ts +0 -3
  61. package/dist/domain/authoring/v3/parser.js +0 -823
  62. package/dist/domain/authoring/v3/parser.js.map +0 -1
  63. package/dist/domain/authoring/v3/serializer.d.ts +0 -2
  64. package/dist/domain/authoring/v3/serializer.js +0 -244
  65. package/dist/domain/authoring/v3/serializer.js.map +0 -1
  66. package/dist/domain/authoring/v3/types.d.ts +0 -76
  67. package/dist/domain/authoring/v3/types.js +0 -2
  68. package/dist/domain/authoring/v3/types.js.map +0 -1
  69. package/dist/domain/authoring/v4/apply.d.ts +0 -40
  70. package/dist/domain/authoring/v4/apply.js +0 -451
  71. package/dist/domain/authoring/v4/apply.js.map +0 -1
  72. package/dist/domain/authoring/v4/parser.d.ts +0 -2
  73. package/dist/domain/authoring/v4/parser.js +0 -729
  74. package/dist/domain/authoring/v4/parser.js.map +0 -1
  75. package/dist/domain/authoring/v4/serializer.d.ts +0 -6
  76. package/dist/domain/authoring/v4/serializer.js +0 -280
  77. package/dist/domain/authoring/v4/serializer.js.map +0 -1
  78. package/dist/domain/authoring/v4/types.d.ts +0 -50
  79. package/dist/domain/authoring/v4/types.js +0 -2
  80. package/dist/domain/authoring/v4/types.js.map +0 -1
  81. package/dist/domain/creative-draft/compose.d.ts +0 -18
  82. package/dist/domain/creative-draft/compose.js +0 -448
  83. package/dist/domain/creative-draft/compose.js.map +0 -1
  84. package/dist/domain/ingest/apply-plan.d.ts +0 -23
  85. package/dist/domain/ingest/apply-plan.js +0 -210
  86. package/dist/domain/ingest/apply-plan.js.map +0 -1
  87. package/dist/domain/ingest/assembler.d.ts +0 -65
  88. package/dist/domain/ingest/assembler.js +0 -263
  89. package/dist/domain/ingest/assembler.js.map +0 -1
  90. package/dist/domain/ingest/asset-audit.d.ts +0 -50
  91. package/dist/domain/ingest/asset-audit.js +0 -196
  92. package/dist/domain/ingest/asset-audit.js.map +0 -1
  93. package/dist/domain/ingest/chunker.d.ts +0 -9
  94. package/dist/domain/ingest/chunker.js +0 -49
  95. package/dist/domain/ingest/chunker.js.map +0 -1
  96. package/dist/domain/ingest/environment.d.ts +0 -3
  97. package/dist/domain/ingest/environment.js +0 -32
  98. package/dist/domain/ingest/environment.js.map +0 -1
  99. package/dist/domain/ingest/evidence.d.ts +0 -5
  100. package/dist/domain/ingest/evidence.js +0 -66
  101. package/dist/domain/ingest/evidence.js.map +0 -1
  102. package/dist/domain/ingest/govern.d.ts +0 -3
  103. package/dist/domain/ingest/govern.js +0 -157
  104. package/dist/domain/ingest/govern.js.map +0 -1
  105. package/dist/domain/ingest/jsonl-parser.d.ts +0 -6
  106. package/dist/domain/ingest/jsonl-parser.js +0 -204
  107. package/dist/domain/ingest/jsonl-parser.js.map +0 -1
  108. package/dist/domain/ingest/markdown-parser.d.ts +0 -6
  109. package/dist/domain/ingest/markdown-parser.js +0 -187
  110. package/dist/domain/ingest/markdown-parser.js.map +0 -1
  111. package/dist/domain/ingest/production-validation.d.ts +0 -8
  112. package/dist/domain/ingest/production-validation.js +0 -37
  113. package/dist/domain/ingest/production-validation.js.map +0 -1
  114. package/dist/domain/ingest/records.d.ts +0 -72
  115. package/dist/domain/ingest/records.js +0 -10
  116. package/dist/domain/ingest/records.js.map +0 -1
  117. package/dist/domain/ingest/renumber.d.ts +0 -14
  118. package/dist/domain/ingest/renumber.js +0 -130
  119. package/dist/domain/ingest/renumber.js.map +0 -1
  120. package/dist/domain/ingest/serial-context.d.ts +0 -93
  121. package/dist/domain/ingest/serial-context.js +0 -355
  122. package/dist/domain/ingest/serial-context.js.map +0 -1
  123. package/dist/domain/ingest/state-identity.d.ts +0 -2
  124. package/dist/domain/ingest/state-identity.js +0 -3
  125. package/dist/domain/ingest/state-identity.js.map +0 -1
  126. package/dist/domain/ingest/state-reconcile.d.ts +0 -12
  127. package/dist/domain/ingest/state-reconcile.js +0 -92
  128. package/dist/domain/ingest/state-reconcile.js.map +0 -1
  129. package/dist/domain/ingest/validation.d.ts +0 -1
  130. package/dist/domain/ingest/validation.js +0 -2
  131. package/dist/domain/ingest/validation.js.map +0 -1
  132. package/dist/domain/ingest/video-apply.d.ts +0 -4
  133. package/dist/domain/ingest/video-apply.js +0 -128
  134. package/dist/domain/ingest/video-apply.js.map +0 -1
  135. package/dist/domain/ingest/video-context.d.ts +0 -64
  136. package/dist/domain/ingest/video-context.js +0 -480
  137. package/dist/domain/ingest/video-context.js.map +0 -1
  138. package/dist/domain/ingest/video-records.d.ts +0 -57
  139. package/dist/domain/ingest/video-records.js +0 -9
  140. package/dist/domain/ingest/video-records.js.map +0 -1
  141. package/dist/domain/ingest/video-serial-md.d.ts +0 -81
  142. package/dist/domain/ingest/video-serial-md.js +0 -297
  143. package/dist/domain/ingest/video-serial-md.js.map +0 -1
  144. package/dist/domain/ingest/video-source-evolution.d.ts +0 -25
  145. package/dist/domain/ingest/video-source-evolution.js +0 -40
  146. package/dist/domain/ingest/video-source-evolution.js.map +0 -1
  147. package/dist/domain/ingest/video-state-evidence.d.ts +0 -66
  148. package/dist/domain/ingest/video-state-evidence.js +0 -385
  149. package/dist/domain/ingest/video-state-evidence.js.map +0 -1
  150. package/dist/domain/ingest/video-timestamp.d.ts +0 -8
  151. package/dist/domain/ingest/video-timestamp.js +0 -26
  152. package/dist/domain/ingest/video-timestamp.js.map +0 -1
  153. package/dist/domain/loom/checkpointer.d.ts +0 -3
  154. package/dist/domain/loom/checkpointer.js +0 -30
  155. package/dist/domain/loom/checkpointer.js.map +0 -1
  156. package/dist/domain/loom/index.d.ts +0 -45
  157. package/dist/domain/loom/index.js +0 -277
  158. package/dist/domain/loom/index.js.map +0 -1
  159. package/dist/domain/loom/types.d.ts +0 -101
  160. package/dist/domain/loom/types.js +0 -2
  161. package/dist/domain/loom/types.js.map +0 -1
  162. package/dist/domain/script/address.d.ts +0 -1
  163. package/dist/domain/script/address.js +0 -2
  164. package/dist/domain/script/address.js.map +0 -1
  165. package/dist/domain/script/dispatch.d.ts +0 -18
  166. package/dist/domain/script/dispatch.js +0 -55
  167. package/dist/domain/script/dispatch.js.map +0 -1
  168. package/dist/domain/script/lookups.d.ts +0 -1
  169. package/dist/domain/script/lookups.js +0 -2
  170. package/dist/domain/script/lookups.js.map +0 -1
  171. package/dist/domain/script/migrations/registry.d.ts +0 -4
  172. package/dist/domain/script/migrations/registry.js +0 -76
  173. package/dist/domain/script/migrations/registry.js.map +0 -1
  174. package/dist/domain/script/migrations/types.d.ts +0 -17
  175. package/dist/domain/script/migrations/types.js +0 -2
  176. package/dist/domain/script/migrations/types.js.map +0 -1
  177. package/dist/domain/script/migrations/v3-to-v4.d.ts +0 -3
  178. package/dist/domain/script/migrations/v3-to-v4.js +0 -57
  179. package/dist/domain/script/migrations/v3-to-v4.js.map +0 -1
  180. package/dist/domain/script/names.d.ts +0 -1
  181. package/dist/domain/script/names.js +0 -2
  182. package/dist/domain/script/names.js.map +0 -1
  183. package/dist/domain/script/parse.d.ts +0 -1
  184. package/dist/domain/script/parse.js +0 -2
  185. package/dist/domain/script/parse.js.map +0 -1
  186. package/dist/domain/script/patch/apply.d.ts +0 -1
  187. package/dist/domain/script/patch/apply.js +0 -2
  188. package/dist/domain/script/patch/apply.js.map +0 -1
  189. package/dist/domain/script/patch/helpers.d.ts +0 -1
  190. package/dist/domain/script/patch/helpers.js +0 -2
  191. package/dist/domain/script/patch/helpers.js.map +0 -1
  192. package/dist/domain/script/patch/inline-speaker.d.ts +0 -1
  193. package/dist/domain/script/patch/inline-speaker.js +0 -2
  194. package/dist/domain/script/patch/inline-speaker.js.map +0 -1
  195. package/dist/domain/script/patch/ops-action.d.ts +0 -1
  196. package/dist/domain/script/patch/ops-action.js +0 -2
  197. package/dist/domain/script/patch/ops-action.js.map +0 -1
  198. package/dist/domain/script/patch/ops-asset.d.ts +0 -1
  199. package/dist/domain/script/patch/ops-asset.js +0 -2
  200. package/dist/domain/script/patch/ops-asset.js.map +0 -1
  201. package/dist/domain/script/patch/ops-dialogue.d.ts +0 -1
  202. package/dist/domain/script/patch/ops-dialogue.js +0 -2
  203. package/dist/domain/script/patch/ops-dialogue.js.map +0 -1
  204. package/dist/domain/script/patch/ops-extend.d.ts +0 -1
  205. package/dist/domain/script/patch/ops-extend.js +0 -2
  206. package/dist/domain/script/patch/ops-extend.js.map +0 -1
  207. package/dist/domain/script/patch/ops-meta.d.ts +0 -1
  208. package/dist/domain/script/patch/ops-meta.js +0 -2
  209. package/dist/domain/script/patch/ops-meta.js.map +0 -1
  210. package/dist/domain/script/patch/ops-scene.d.ts +0 -1
  211. package/dist/domain/script/patch/ops-scene.js +0 -2
  212. package/dist/domain/script/patch/ops-scene.js.map +0 -1
  213. package/dist/domain/script/patch/ops-state.d.ts +0 -1
  214. package/dist/domain/script/patch/ops-state.js +0 -2
  215. package/dist/domain/script/patch/ops-state.js.map +0 -1
  216. package/dist/domain/script/patch/registry.d.ts +0 -1
  217. package/dist/domain/script/patch/registry.js +0 -2
  218. package/dist/domain/script/patch/registry.js.map +0 -1
  219. package/dist/domain/script/patch/types.d.ts +0 -1
  220. package/dist/domain/script/patch/types.js +0 -2
  221. package/dist/domain/script/patch/types.js.map +0 -1
  222. package/dist/domain/script/refs.d.ts +0 -1
  223. package/dist/domain/script/refs.js +0 -2
  224. package/dist/domain/script/refs.js.map +0 -1
  225. package/dist/domain/script/scene-refs.d.ts +0 -1
  226. package/dist/domain/script/scene-refs.js +0 -2
  227. package/dist/domain/script/scene-refs.js.map +0 -1
  228. package/dist/domain/script/schema.d.ts +0 -1
  229. package/dist/domain/script/schema.js +0 -2
  230. package/dist/domain/script/schema.js.map +0 -1
  231. package/dist/domain/script/selector.d.ts +0 -1
  232. package/dist/domain/script/selector.js +0 -2
  233. package/dist/domain/script/selector.js.map +0 -1
  234. package/dist/domain/script/shared/regex.d.ts +0 -2
  235. package/dist/domain/script/shared/regex.js +0 -7
  236. package/dist/domain/script/shared/regex.js.map +0 -1
  237. package/dist/domain/script/shared/types.d.ts +0 -1
  238. package/dist/domain/script/shared/types.js +0 -5
  239. package/dist/domain/script/shared/types.js.map +0 -1
  240. package/dist/domain/script/shared/validation.d.ts +0 -1
  241. package/dist/domain/script/shared/validation.js +0 -3
  242. package/dist/domain/script/shared/validation.js.map +0 -1
  243. package/dist/domain/script/shared.d.ts +0 -15
  244. package/dist/domain/script/shared.js +0 -35
  245. package/dist/domain/script/shared.js.map +0 -1
  246. package/dist/domain/script/text-util.d.ts +0 -7
  247. package/dist/domain/script/text-util.js +0 -95
  248. package/dist/domain/script/text-util.js.map +0 -1
  249. package/dist/domain/script/timestamp.d.ts +0 -1
  250. package/dist/domain/script/timestamp.js +0 -3
  251. package/dist/domain/script/timestamp.js.map +0 -1
  252. package/dist/domain/script/types.d.ts +0 -1
  253. package/dist/domain/script/types.js +0 -2
  254. package/dist/domain/script/types.js.map +0 -1
  255. package/dist/domain/script/v3/address.d.ts +0 -32
  256. package/dist/domain/script/v3/address.js +0 -136
  257. package/dist/domain/script/v3/address.js.map +0 -1
  258. package/dist/domain/script/v3/lookups.d.ts +0 -33
  259. package/dist/domain/script/v3/lookups.js +0 -316
  260. package/dist/domain/script/v3/lookups.js.map +0 -1
  261. package/dist/domain/script/v3/ordinal.d.ts +0 -8
  262. package/dist/domain/script/v3/ordinal.js +0 -91
  263. package/dist/domain/script/v3/ordinal.js.map +0 -1
  264. package/dist/domain/script/v3/parse.d.ts +0 -3
  265. package/dist/domain/script/v3/parse.js +0 -164
  266. package/dist/domain/script/v3/parse.js.map +0 -1
  267. package/dist/domain/script/v3/patch/apply.d.ts +0 -2
  268. package/dist/domain/script/v3/patch/apply.js +0 -31
  269. package/dist/domain/script/v3/patch/apply.js.map +0 -1
  270. package/dist/domain/script/v3/patch/helpers.d.ts +0 -15
  271. package/dist/domain/script/v3/patch/helpers.js +0 -155
  272. package/dist/domain/script/v3/patch/helpers.js.map +0 -1
  273. package/dist/domain/script/v3/patch/inline-speaker.d.ts +0 -2
  274. package/dist/domain/script/v3/patch/inline-speaker.js +0 -50
  275. package/dist/domain/script/v3/patch/inline-speaker.js.map +0 -1
  276. package/dist/domain/script/v3/patch/ops-action.d.ts +0 -12
  277. package/dist/domain/script/v3/patch/ops-action.js +0 -355
  278. package/dist/domain/script/v3/patch/ops-action.js.map +0 -1
  279. package/dist/domain/script/v3/patch/ops-asset.d.ts +0 -14
  280. package/dist/domain/script/v3/patch/ops-asset.js +0 -347
  281. package/dist/domain/script/v3/patch/ops-asset.js.map +0 -1
  282. package/dist/domain/script/v3/patch/ops-dialogue.d.ts +0 -2
  283. package/dist/domain/script/v3/patch/ops-dialogue.js +0 -21
  284. package/dist/domain/script/v3/patch/ops-dialogue.js.map +0 -1
  285. package/dist/domain/script/v3/patch/ops-extend.d.ts +0 -8
  286. package/dist/domain/script/v3/patch/ops-extend.js +0 -122
  287. package/dist/domain/script/v3/patch/ops-extend.js.map +0 -1
  288. package/dist/domain/script/v3/patch/ops-meta.d.ts +0 -5
  289. package/dist/domain/script/v3/patch/ops-meta.js +0 -82
  290. package/dist/domain/script/v3/patch/ops-meta.js.map +0 -1
  291. package/dist/domain/script/v3/patch/ops-scene.d.ts +0 -6
  292. package/dist/domain/script/v3/patch/ops-scene.js +0 -351
  293. package/dist/domain/script/v3/patch/ops-scene.js.map +0 -1
  294. package/dist/domain/script/v3/patch/ops-state.d.ts +0 -8
  295. package/dist/domain/script/v3/patch/ops-state.js +0 -155
  296. package/dist/domain/script/v3/patch/ops-state.js.map +0 -1
  297. package/dist/domain/script/v3/patch/ops-timestamp.d.ts +0 -6
  298. package/dist/domain/script/v3/patch/ops-timestamp.js +0 -47
  299. package/dist/domain/script/v3/patch/ops-timestamp.js.map +0 -1
  300. package/dist/domain/script/v3/patch/registry.d.ts +0 -2
  301. package/dist/domain/script/v3/patch/registry.js +0 -56
  302. package/dist/domain/script/v3/patch/registry.js.map +0 -1
  303. package/dist/domain/script/v3/patch/types.d.ts +0 -10
  304. package/dist/domain/script/v3/patch/types.js +0 -2
  305. package/dist/domain/script/v3/patch/types.js.map +0 -1
  306. package/dist/domain/script/v3/refs.d.ts +0 -4
  307. package/dist/domain/script/v3/refs.js +0 -64
  308. package/dist/domain/script/v3/refs.js.map +0 -1
  309. package/dist/domain/script/v3/scene-refs.d.ts +0 -3
  310. package/dist/domain/script/v3/scene-refs.js +0 -35
  311. package/dist/domain/script/v3/scene-refs.js.map +0 -1
  312. package/dist/domain/script/v3/schema.d.ts +0 -6
  313. package/dist/domain/script/v3/schema.js +0 -58
  314. package/dist/domain/script/v3/schema.js.map +0 -1
  315. package/dist/domain/script/v3/selector.d.ts +0 -44
  316. package/dist/domain/script/v3/selector.js +0 -178
  317. package/dist/domain/script/v3/selector.js.map +0 -1
  318. package/dist/domain/script/v3/types.d.ts +0 -106
  319. package/dist/domain/script/v3/types.js +0 -2
  320. package/dist/domain/script/v3/types.js.map +0 -1
  321. package/dist/domain/script/v3/validation.d.ts +0 -2
  322. package/dist/domain/script/v3/validation.js +0 -2
  323. package/dist/domain/script/v3/validation.js.map +0 -1
  324. package/dist/domain/script/v4/address.d.ts +0 -61
  325. package/dist/domain/script/v4/address.js +0 -99
  326. package/dist/domain/script/v4/address.js.map +0 -1
  327. package/dist/domain/script/v4/factory.d.ts +0 -2
  328. package/dist/domain/script/v4/factory.js +0 -13
  329. package/dist/domain/script/v4/factory.js.map +0 -1
  330. package/dist/domain/script/v4/from-v3.d.ts +0 -29
  331. package/dist/domain/script/v4/from-v3.js +0 -307
  332. package/dist/domain/script/v4/from-v3.js.map +0 -1
  333. package/dist/domain/script/v4/ids.d.ts +0 -5
  334. package/dist/domain/script/v4/ids.js +0 -41
  335. package/dist/domain/script/v4/ids.js.map +0 -1
  336. package/dist/domain/script/v4/ordinal.d.ts +0 -3
  337. package/dist/domain/script/v4/ordinal.js +0 -66
  338. package/dist/domain/script/v4/ordinal.js.map +0 -1
  339. package/dist/domain/script/v4/parse.d.ts +0 -5
  340. package/dist/domain/script/v4/parse.js +0 -196
  341. package/dist/domain/script/v4/parse.js.map +0 -1
  342. package/dist/domain/script/v4/patch/apply.d.ts +0 -3
  343. package/dist/domain/script/v4/patch/apply.js +0 -24
  344. package/dist/domain/script/v4/patch/apply.js.map +0 -1
  345. package/dist/domain/script/v4/patch/helpers.d.ts +0 -32
  346. package/dist/domain/script/v4/patch/helpers.js +0 -138
  347. package/dist/domain/script/v4/patch/helpers.js.map +0 -1
  348. package/dist/domain/script/v4/patch/ops-action.d.ts +0 -13
  349. package/dist/domain/script/v4/patch/ops-action.js +0 -351
  350. package/dist/domain/script/v4/patch/ops-action.js.map +0 -1
  351. package/dist/domain/script/v4/patch/ops-asset.d.ts +0 -17
  352. package/dist/domain/script/v4/patch/ops-asset.js +0 -556
  353. package/dist/domain/script/v4/patch/ops-asset.js.map +0 -1
  354. package/dist/domain/script/v4/patch/ops-extend.d.ts +0 -11
  355. package/dist/domain/script/v4/patch/ops-extend.js +0 -103
  356. package/dist/domain/script/v4/patch/ops-extend.js.map +0 -1
  357. package/dist/domain/script/v4/patch/ops-meta.d.ts +0 -5
  358. package/dist/domain/script/v4/patch/ops-meta.js +0 -49
  359. package/dist/domain/script/v4/patch/ops-meta.js.map +0 -1
  360. package/dist/domain/script/v4/patch/ops-scene-ref.d.ts +0 -3
  361. package/dist/domain/script/v4/patch/ops-scene-ref.js +0 -74
  362. package/dist/domain/script/v4/patch/ops-scene-ref.js.map +0 -1
  363. package/dist/domain/script/v4/patch/ops-structure.d.ts +0 -6
  364. package/dist/domain/script/v4/patch/ops-structure.js +0 -236
  365. package/dist/domain/script/v4/patch/ops-structure.js.map +0 -1
  366. package/dist/domain/script/v4/patch/ops-timestamp.d.ts +0 -6
  367. package/dist/domain/script/v4/patch/ops-timestamp.js +0 -40
  368. package/dist/domain/script/v4/patch/ops-timestamp.js.map +0 -1
  369. package/dist/domain/script/v4/patch/registry.d.ts +0 -2
  370. package/dist/domain/script/v4/patch/registry.js +0 -53
  371. package/dist/domain/script/v4/patch/registry.js.map +0 -1
  372. package/dist/domain/script/v4/patch/schema.d.ts +0 -7
  373. package/dist/domain/script/v4/patch/schema.js +0 -77
  374. package/dist/domain/script/v4/patch/schema.js.map +0 -1
  375. package/dist/domain/script/v4/patch/types.d.ts +0 -10
  376. package/dist/domain/script/v4/patch/types.js +0 -2
  377. package/dist/domain/script/v4/patch/types.js.map +0 -1
  378. package/dist/domain/script/v4/selector.d.ts +0 -11
  379. package/dist/domain/script/v4/selector.js +0 -124
  380. package/dist/domain/script/v4/selector.js.map +0 -1
  381. package/dist/domain/script/v4/types.d.ts +0 -120
  382. package/dist/domain/script/v4/types.js +0 -2
  383. package/dist/domain/script/v4/types.js.map +0 -1
  384. package/dist/domain/script/v4/validation.d.ts +0 -2
  385. package/dist/domain/script/v4/validation.js +0 -2
  386. package/dist/domain/script/v4/validation.js.map +0 -1
  387. package/dist/failures.d.ts +0 -58
  388. package/dist/failures.js +0 -96
  389. package/dist/failures.js.map +0 -1
  390. package/dist/infra/converters.d.ts +0 -9
  391. package/dist/infra/converters.js +0 -689
  392. package/dist/infra/converters.js.map +0 -1
  393. package/dist/infra/env.d.ts +0 -2
  394. package/dist/infra/env.js +0 -81
  395. package/dist/infra/env.js.map +0 -1
  396. package/dist/infra/episode-title.d.ts +0 -4
  397. package/dist/infra/episode-title.js +0 -129
  398. package/dist/infra/episode-title.js.map +0 -1
  399. package/dist/infra/ingest/review-renderer.d.ts +0 -1
  400. package/dist/infra/ingest/review-renderer.js +0 -440
  401. package/dist/infra/ingest/review-renderer.js.map +0 -1
  402. package/dist/infra/ingest/source-resolver.d.ts +0 -21
  403. package/dist/infra/ingest/source-resolver.js +0 -51
  404. package/dist/infra/ingest/source-resolver.js.map +0 -1
  405. package/dist/infra/ingest/text-reader.d.ts +0 -3
  406. package/dist/infra/ingest/text-reader.js +0 -27
  407. package/dist/infra/ingest/text-reader.js.map +0 -1
  408. package/dist/infra/ingest/video-discovery.d.ts +0 -8
  409. package/dist/infra/ingest/video-discovery.js +0 -69
  410. package/dist/infra/ingest/video-discovery.js.map +0 -1
  411. package/dist/infra/ingest/video-source-snapshot.d.ts +0 -4
  412. package/dist/infra/ingest/video-source-snapshot.js +0 -47
  413. package/dist/infra/ingest/video-source-snapshot.js.map +0 -1
  414. package/dist/infra/ingest/video-state-evidence.d.ts +0 -14
  415. package/dist/infra/ingest/video-state-evidence.js +0 -140
  416. package/dist/infra/ingest/video-state-evidence.js.map +0 -1
  417. package/dist/infra/ingest/video-transcode.d.ts +0 -7
  418. package/dist/infra/ingest/video-transcode.js +0 -98
  419. package/dist/infra/ingest/video-transcode.js.map +0 -1
  420. package/dist/infra/ingest/workspace-lock.d.ts +0 -1
  421. package/dist/infra/ingest/workspace-lock.js +0 -32
  422. package/dist/infra/ingest/workspace-lock.js.map +0 -1
  423. package/dist/infra/ingest/workspace-store.d.ts +0 -18
  424. package/dist/infra/ingest/workspace-store.js +0 -70
  425. package/dist/infra/ingest/workspace-store.js.map +0 -1
  426. package/dist/infra/llm/anthropic-model.d.ts +0 -11
  427. package/dist/infra/llm/anthropic-model.js +0 -130
  428. package/dist/infra/llm/anthropic-model.js.map +0 -1
  429. package/dist/infra/llm/doubao-model.d.ts +0 -60
  430. package/dist/infra/llm/doubao-model.js +0 -249
  431. package/dist/infra/llm/doubao-model.js.map +0 -1
  432. package/dist/infra/llm/failure-mapping.d.ts +0 -6
  433. package/dist/infra/llm/failure-mapping.js +0 -146
  434. package/dist/infra/llm/failure-mapping.js.map +0 -1
  435. package/dist/infra/llm/gemini-upload.d.ts +0 -13
  436. package/dist/infra/llm/gemini-upload.js +0 -138
  437. package/dist/infra/llm/gemini-upload.js.map +0 -1
  438. package/dist/infra/llm/gemini-video-model.d.ts +0 -50
  439. package/dist/infra/llm/gemini-video-model.js +0 -371
  440. package/dist/infra/llm/gemini-video-model.js.map +0 -1
  441. package/dist/infra/llm/openai-compatible-model.d.ts +0 -14
  442. package/dist/infra/llm/openai-compatible-model.js +0 -207
  443. package/dist/infra/llm/openai-compatible-model.js.map +0 -1
  444. package/dist/infra/llm/retry.d.ts +0 -8
  445. package/dist/infra/llm/retry.js +0 -41
  446. package/dist/infra/llm/retry.js.map +0 -1
  447. package/dist/infra/local-script-output-store.d.ts +0 -43
  448. package/dist/infra/local-script-output-store.js +0 -168
  449. package/dist/infra/local-script-output-store.js.map +0 -1
  450. package/dist/infra/script-output-api.d.ts +0 -50
  451. package/dist/infra/script-output-api.js +0 -251
  452. package/dist/infra/script-output-api.js.map +0 -1
  453. package/dist/infra/script-output-store.d.ts +0 -152
  454. package/dist/infra/script-output-store.js +0 -114
  455. package/dist/infra/script-output-store.js.map +0 -1
  456. package/dist/infra/script-working-copy.d.ts +0 -23
  457. package/dist/infra/script-working-copy.js +0 -157
  458. package/dist/infra/script-working-copy.js.map +0 -1
  459. package/dist/infra/storage.d.ts +0 -35
  460. package/dist/infra/storage.js +0 -91
  461. package/dist/infra/storage.js.map +0 -1
  462. package/dist/llm/composition.d.ts +0 -5
  463. package/dist/llm/composition.js +0 -5
  464. package/dist/llm/composition.js.map +0 -1
  465. package/dist/llm/config.d.ts +0 -28
  466. package/dist/llm/config.js +0 -231
  467. package/dist/llm/config.js.map +0 -1
  468. package/dist/llm/registry.d.ts +0 -43
  469. package/dist/llm/registry.js +0 -69
  470. package/dist/llm/registry.js.map +0 -1
  471. package/dist/llm/router.d.ts +0 -46
  472. package/dist/llm/router.js +0 -512
  473. package/dist/llm/router.js.map +0 -1
  474. package/dist/llm/tasks/ingest/arc-summary.d.ts +0 -8
  475. package/dist/llm/tasks/ingest/arc-summary.js +0 -26
  476. package/dist/llm/tasks/ingest/arc-summary.js.map +0 -1
  477. package/dist/llm/tasks/ingest/asset-audit.d.ts +0 -6
  478. package/dist/llm/tasks/ingest/asset-audit.js +0 -158
  479. package/dist/llm/tasks/ingest/asset-audit.js.map +0 -1
  480. package/dist/llm/tasks/ingest/asset-curate.d.ts +0 -13
  481. package/dist/llm/tasks/ingest/asset-curate.js +0 -45
  482. package/dist/llm/tasks/ingest/asset-curate.js.map +0 -1
  483. package/dist/llm/tasks/ingest/asset-extract.d.ts +0 -12
  484. package/dist/llm/tasks/ingest/asset-extract.js +0 -51
  485. package/dist/llm/tasks/ingest/asset-extract.js.map +0 -1
  486. package/dist/llm/tasks/ingest/asset-govern.d.ts +0 -22
  487. package/dist/llm/tasks/ingest/asset-govern.js +0 -143
  488. package/dist/llm/tasks/ingest/asset-govern.js.map +0 -1
  489. package/dist/llm/tasks/ingest/body-start.d.ts +0 -10
  490. package/dist/llm/tasks/ingest/body-start.js +0 -41
  491. package/dist/llm/tasks/ingest/body-start.js.map +0 -1
  492. package/dist/llm/tasks/ingest/episode-assets.d.ts +0 -29
  493. package/dist/llm/tasks/ingest/episode-assets.js +0 -282
  494. package/dist/llm/tasks/ingest/episode-assets.js.map +0 -1
  495. package/dist/llm/tasks/ingest/mention-resolve.d.ts +0 -9
  496. package/dist/llm/tasks/ingest/mention-resolve.js +0 -39
  497. package/dist/llm/tasks/ingest/mention-resolve.js.map +0 -1
  498. package/dist/llm/tasks/ingest/name-fix.d.ts +0 -9
  499. package/dist/llm/tasks/ingest/name-fix.js +0 -56
  500. package/dist/llm/tasks/ingest/name-fix.js.map +0 -1
  501. package/dist/llm/tasks/ingest/state-reconcile.d.ts +0 -8
  502. package/dist/llm/tasks/ingest/state-reconcile.js +0 -44
  503. package/dist/llm/tasks/ingest/state-reconcile.js.map +0 -1
  504. package/dist/llm/tasks/ingest/text-normalize.d.ts +0 -10
  505. package/dist/llm/tasks/ingest/text-normalize.js +0 -122
  506. package/dist/llm/tasks/ingest/text-normalize.js.map +0 -1
  507. package/dist/llm/tasks/ingest/video-serial.d.ts +0 -24
  508. package/dist/llm/tasks/ingest/video-serial.js +0 -416
  509. package/dist/llm/tasks/ingest/video-serial.js.map +0 -1
  510. package/dist/llm/tasks/schemas.d.ts +0 -9
  511. package/dist/llm/tasks/schemas.js +0 -466
  512. package/dist/llm/tasks/schemas.js.map +0 -1
  513. package/dist/llm/types.d.ts +0 -178
  514. package/dist/llm/types.js +0 -44
  515. package/dist/llm/types.js.map +0 -1
  516. package/dist/output.d.ts +0 -3
  517. package/dist/output.js +0 -94
  518. package/dist/output.js.map +0 -1
  519. package/dist/package-root.d.ts +0 -2
  520. package/dist/package-root.js +0 -38
  521. package/dist/package-root.js.map +0 -1
  522. package/dist/review-agent.js.map +0 -7
  523. package/dist/usecases/changelog.d.ts +0 -9
  524. package/dist/usecases/changelog.js +0 -134
  525. package/dist/usecases/changelog.js.map +0 -1
  526. package/dist/usecases/doctor.d.ts +0 -2
  527. package/dist/usecases/doctor.js +0 -231
  528. package/dist/usecases/doctor.js.map +0 -1
  529. package/dist/usecases/ingest/body-start.d.ts +0 -8
  530. package/dist/usecases/ingest/body-start.js +0 -36
  531. package/dist/usecases/ingest/body-start.js.map +0 -1
  532. package/dist/usecases/ingest/command.d.ts +0 -5
  533. package/dist/usecases/ingest/command.js +0 -183
  534. package/dist/usecases/ingest/command.js.map +0 -1
  535. package/dist/usecases/ingest/failure.d.ts +0 -26
  536. package/dist/usecases/ingest/failure.js +0 -153
  537. package/dist/usecases/ingest/failure.js.map +0 -1
  538. package/dist/usecases/ingest/fanout.d.ts +0 -10
  539. package/dist/usecases/ingest/fanout.js +0 -23
  540. package/dist/usecases/ingest/fanout.js.map +0 -1
  541. package/dist/usecases/ingest/final-asset-audit.d.ts +0 -39
  542. package/dist/usecases/ingest/final-asset-audit.js +0 -88
  543. package/dist/usecases/ingest/final-asset-audit.js.map +0 -1
  544. package/dist/usecases/ingest/generate-video-state-evidence.d.ts +0 -23
  545. package/dist/usecases/ingest/generate-video-state-evidence.js +0 -124
  546. package/dist/usecases/ingest/generate-video-state-evidence.js.map +0 -1
  547. package/dist/usecases/ingest/pass4-mention-resolve.d.ts +0 -11
  548. package/dist/usecases/ingest/pass4-mention-resolve.js +0 -52
  549. package/dist/usecases/ingest/pass4-mention-resolve.js.map +0 -1
  550. package/dist/usecases/ingest/pass5-extract.d.ts +0 -7
  551. package/dist/usecases/ingest/pass5-extract.js +0 -51
  552. package/dist/usecases/ingest/pass5-extract.js.map +0 -1
  553. package/dist/usecases/ingest/pass5-govern.d.ts +0 -13
  554. package/dist/usecases/ingest/pass5-govern.js +0 -157
  555. package/dist/usecases/ingest/pass5-govern.js.map +0 -1
  556. package/dist/usecases/ingest/pipeline.d.ts +0 -28
  557. package/dist/usecases/ingest/pipeline.js +0 -335
  558. package/dist/usecases/ingest/pipeline.js.map +0 -1
  559. package/dist/usecases/ingest/publish-command.d.ts +0 -1
  560. package/dist/usecases/ingest/publish-command.js +0 -4
  561. package/dist/usecases/ingest/publish-command.js.map +0 -1
  562. package/dist/usecases/ingest/serial-govern.d.ts +0 -40
  563. package/dist/usecases/ingest/serial-govern.js +0 -488
  564. package/dist/usecases/ingest/serial-govern.js.map +0 -1
  565. package/dist/usecases/ingest/skip-video-episode.d.ts +0 -4
  566. package/dist/usecases/ingest/skip-video-episode.js +0 -120
  567. package/dist/usecases/ingest/skip-video-episode.js.map +0 -1
  568. package/dist/usecases/ingest/status.d.ts +0 -61
  569. package/dist/usecases/ingest/status.js +0 -347
  570. package/dist/usecases/ingest/status.js.map +0 -1
  571. package/dist/usecases/ingest/timings.d.ts +0 -51
  572. package/dist/usecases/ingest/timings.js +0 -68
  573. package/dist/usecases/ingest/timings.js.map +0 -1
  574. package/dist/usecases/ingest/usage-report.d.ts +0 -125
  575. package/dist/usecases/ingest/usage-report.js +0 -248
  576. package/dist/usecases/ingest/usage-report.js.map +0 -1
  577. package/dist/usecases/ingest/video-pipeline.d.ts +0 -81
  578. package/dist/usecases/ingest/video-pipeline.js +0 -548
  579. package/dist/usecases/ingest/video-pipeline.js.map +0 -1
  580. package/dist/usecases/ingest/video-skip-state.d.ts +0 -29
  581. package/dist/usecases/ingest/video-skip-state.js +0 -148
  582. package/dist/usecases/ingest/video-skip-state.js.map +0 -1
  583. package/dist/usecases/ingest/view-command.d.ts +0 -4
  584. package/dist/usecases/ingest/view-command.js +0 -67
  585. package/dist/usecases/ingest/view-command.js.map +0 -1
  586. package/dist/usecases/ingest/view-server.d.ts +0 -29
  587. package/dist/usecases/ingest/view-server.js +0 -364
  588. package/dist/usecases/ingest/view-server.js.map +0 -1
  589. package/dist/usecases/script/action-span.d.ts +0 -10
  590. package/dist/usecases/script/action-span.js +0 -42
  591. package/dist/usecases/script/action-span.js.map +0 -1
  592. package/dist/usecases/script/actions.d.ts +0 -3
  593. package/dist/usecases/script/actions.js +0 -184
  594. package/dist/usecases/script/actions.js.map +0 -1
  595. package/dist/usecases/script/actor.d.ts +0 -3
  596. package/dist/usecases/script/actor.js +0 -26
  597. package/dist/usecases/script/actor.js.map +0 -1
  598. package/dist/usecases/script/actors.d.ts +0 -3
  599. package/dist/usecases/script/actors.js +0 -25
  600. package/dist/usecases/script/actors.js.map +0 -1
  601. package/dist/usecases/script/add-actor.d.ts +0 -3
  602. package/dist/usecases/script/add-actor.js +0 -13
  603. package/dist/usecases/script/add-actor.js.map +0 -1
  604. package/dist/usecases/script/add-episode.d.ts +0 -3
  605. package/dist/usecases/script/add-episode.js +0 -9
  606. package/dist/usecases/script/add-episode.js.map +0 -1
  607. package/dist/usecases/script/add-location.d.ts +0 -3
  608. package/dist/usecases/script/add-location.js +0 -11
  609. package/dist/usecases/script/add-location.js.map +0 -1
  610. package/dist/usecases/script/add-prop.d.ts +0 -3
  611. package/dist/usecases/script/add-prop.js +0 -11
  612. package/dist/usecases/script/add-prop.js.map +0 -1
  613. package/dist/usecases/script/alias.d.ts +0 -3
  614. package/dist/usecases/script/alias.js +0 -39
  615. package/dist/usecases/script/alias.js.map +0 -1
  616. package/dist/usecases/script/assets.d.ts +0 -3
  617. package/dist/usecases/script/assets.js +0 -46
  618. package/dist/usecases/script/assets.js.map +0 -1
  619. package/dist/usecases/script/audit-assets.d.ts +0 -4
  620. package/dist/usecases/script/audit-assets.js +0 -37
  621. package/dist/usecases/script/audit-assets.js.map +0 -1
  622. package/dist/usecases/script/command-constraints.d.ts +0 -38
  623. package/dist/usecases/script/command-constraints.js +0 -143
  624. package/dist/usecases/script/command-constraints.js.map +0 -1
  625. package/dist/usecases/script/compose-creative-draft.d.ts +0 -3
  626. package/dist/usecases/script/compose-creative-draft.js +0 -106
  627. package/dist/usecases/script/compose-creative-draft.js.map +0 -1
  628. package/dist/usecases/script/context.d.ts +0 -3
  629. package/dist/usecases/script/context.js +0 -52
  630. package/dist/usecases/script/context.js.map +0 -1
  631. package/dist/usecases/script/create.d.ts +0 -3
  632. package/dist/usecases/script/create.js +0 -27
  633. package/dist/usecases/script/create.js.map +0 -1
  634. package/dist/usecases/script/delete.d.ts +0 -3
  635. package/dist/usecases/script/delete.js +0 -88
  636. package/dist/usecases/script/delete.js.map +0 -1
  637. package/dist/usecases/script/describe.d.ts +0 -3
  638. package/dist/usecases/script/describe.js +0 -32
  639. package/dist/usecases/script/describe.js.map +0 -1
  640. package/dist/usecases/script/dialogue.d.ts +0 -3
  641. package/dist/usecases/script/dialogue.js +0 -30
  642. package/dist/usecases/script/dialogue.js.map +0 -1
  643. package/dist/usecases/script/dispatch.d.ts +0 -3
  644. package/dist/usecases/script/dispatch.js +0 -10
  645. package/dist/usecases/script/dispatch.js.map +0 -1
  646. package/dist/usecases/script/do.d.ts +0 -3
  647. package/dist/usecases/script/do.js +0 -186
  648. package/dist/usecases/script/do.js.map +0 -1
  649. package/dist/usecases/script/emotion.d.ts +0 -3
  650. package/dist/usecases/script/emotion.js +0 -24
  651. package/dist/usecases/script/emotion.js.map +0 -1
  652. package/dist/usecases/script/episodes.d.ts +0 -3
  653. package/dist/usecases/script/episodes.js +0 -62
  654. package/dist/usecases/script/episodes.js.map +0 -1
  655. package/dist/usecases/script/export-authoring.d.ts +0 -4
  656. package/dist/usecases/script/export-authoring.js +0 -326
  657. package/dist/usecases/script/export-authoring.js.map +0 -1
  658. package/dist/usecases/script/extend.d.ts +0 -3
  659. package/dist/usecases/script/extend.js +0 -94
  660. package/dist/usecases/script/extend.js.map +0 -1
  661. package/dist/usecases/script/ids.d.ts +0 -3
  662. package/dist/usecases/script/ids.js +0 -148
  663. package/dist/usecases/script/ids.js.map +0 -1
  664. package/dist/usecases/script/importance.d.ts +0 -3
  665. package/dist/usecases/script/importance.js +0 -16
  666. package/dist/usecases/script/importance.js.map +0 -1
  667. package/dist/usecases/script/insert.d.ts +0 -3
  668. package/dist/usecases/script/insert.js +0 -127
  669. package/dist/usecases/script/insert.js.map +0 -1
  670. package/dist/usecases/script/issues.d.ts +0 -3
  671. package/dist/usecases/script/issues.js +0 -35
  672. package/dist/usecases/script/issues.js.map +0 -1
  673. package/dist/usecases/script/lib.d.ts +0 -152
  674. package/dist/usecases/script/lib.js +0 -1654
  675. package/dist/usecases/script/lib.js.map +0 -1
  676. package/dist/usecases/script/locations.d.ts +0 -3
  677. package/dist/usecases/script/locations.js +0 -25
  678. package/dist/usecases/script/locations.js.map +0 -1
  679. package/dist/usecases/script/merge.d.ts +0 -3
  680. package/dist/usecases/script/merge.js +0 -43
  681. package/dist/usecases/script/merge.js.map +0 -1
  682. package/dist/usecases/script/migrate.d.ts +0 -3
  683. package/dist/usecases/script/migrate.js +0 -210
  684. package/dist/usecases/script/migrate.js.map +0 -1
  685. package/dist/usecases/script/move.d.ts +0 -3
  686. package/dist/usecases/script/move.js +0 -50
  687. package/dist/usecases/script/move.js.map +0 -1
  688. package/dist/usecases/script/parenthetical.d.ts +0 -3
  689. package/dist/usecases/script/parenthetical.js +0 -52
  690. package/dist/usecases/script/parenthetical.js.map +0 -1
  691. package/dist/usecases/script/props.d.ts +0 -3
  692. package/dist/usecases/script/props.js +0 -25
  693. package/dist/usecases/script/props.js.map +0 -1
  694. package/dist/usecases/script/refs.d.ts +0 -3
  695. package/dist/usecases/script/refs.js +0 -111
  696. package/dist/usecases/script/refs.js.map +0 -1
  697. package/dist/usecases/script/rename.d.ts +0 -3
  698. package/dist/usecases/script/rename.js +0 -35
  699. package/dist/usecases/script/rename.js.map +0 -1
  700. package/dist/usecases/script/replace.d.ts +0 -3
  701. package/dist/usecases/script/replace.js +0 -33
  702. package/dist/usecases/script/replace.js.map +0 -1
  703. package/dist/usecases/script/review.d.ts +0 -3
  704. package/dist/usecases/script/review.js +0 -187
  705. package/dist/usecases/script/review.js.map +0 -1
  706. package/dist/usecases/script/role.d.ts +0 -3
  707. package/dist/usecases/script/role.js +0 -16
  708. package/dist/usecases/script/role.js.map +0 -1
  709. package/dist/usecases/script/scenes.d.ts +0 -3
  710. package/dist/usecases/script/scenes.js +0 -66
  711. package/dist/usecases/script/scenes.js.map +0 -1
  712. package/dist/usecases/script/script-patch.d.ts +0 -3
  713. package/dist/usecases/script/script-patch.js +0 -321
  714. package/dist/usecases/script/script-patch.js.map +0 -1
  715. package/dist/usecases/script/script-validate.d.ts +0 -3
  716. package/dist/usecases/script/script-validate.js +0 -27
  717. package/dist/usecases/script/script-validate.js.map +0 -1
  718. package/dist/usecases/script/session.d.ts +0 -62
  719. package/dist/usecases/script/session.js +0 -567
  720. package/dist/usecases/script/session.js.map +0 -1
  721. package/dist/usecases/script/split.d.ts +0 -3
  722. package/dist/usecases/script/split.js +0 -41
  723. package/dist/usecases/script/split.js.map +0 -1
  724. package/dist/usecases/script/state-add.d.ts +0 -3
  725. package/dist/usecases/script/state-add.js +0 -22
  726. package/dist/usecases/script/state-add.js.map +0 -1
  727. package/dist/usecases/script/state-delete.d.ts +0 -3
  728. package/dist/usecases/script/state-delete.js +0 -22
  729. package/dist/usecases/script/state-delete.js.map +0 -1
  730. package/dist/usecases/script/state-rename.d.ts +0 -3
  731. package/dist/usecases/script/state-rename.js +0 -16
  732. package/dist/usecases/script/state-rename.js.map +0 -1
  733. package/dist/usecases/script/states.d.ts +0 -3
  734. package/dist/usecases/script/states.js +0 -197
  735. package/dist/usecases/script/states.js.map +0 -1
  736. package/dist/usecases/script/summary.d.ts +0 -3
  737. package/dist/usecases/script/summary.js +0 -72
  738. package/dist/usecases/script/summary.js.map +0 -1
  739. package/dist/usecases/script/synopsis-generate.d.ts +0 -115
  740. package/dist/usecases/script/synopsis-generate.js +0 -776
  741. package/dist/usecases/script/synopsis-generate.js.map +0 -1
  742. package/dist/usecases/script/synopsis.d.ts +0 -3
  743. package/dist/usecases/script/synopsis.js +0 -45
  744. package/dist/usecases/script/synopsis.js.map +0 -1
  745. package/dist/usecases/script/timestamp-filter.d.ts +0 -4
  746. package/dist/usecases/script/timestamp-filter.js +0 -55
  747. package/dist/usecases/script/timestamp-filter.js.map +0 -1
  748. package/dist/usecases/script/timestamp.d.ts +0 -3
  749. package/dist/usecases/script/timestamp.js +0 -11
  750. package/dist/usecases/script/timestamp.js.map +0 -1
  751. package/dist/usecases/script/transition.d.ts +0 -3
  752. package/dist/usecases/script/transition.js +0 -23
  753. package/dist/usecases/script/transition.js.map +0 -1
  754. package/dist/usecases/script/type.d.ts +0 -3
  755. package/dist/usecases/script/type.js +0 -23
  756. package/dist/usecases/script/type.js.map +0 -1
  757. package/dist/usecases/script/v3/mutations.d.ts +0 -2
  758. package/dist/usecases/script/v3/mutations.js +0 -5
  759. package/dist/usecases/script/v3/mutations.js.map +0 -1
  760. package/dist/usecases/script/v4/mutations.d.ts +0 -2
  761. package/dist/usecases/script/v4/mutations.js +0 -6
  762. package/dist/usecases/script/v4/mutations.js.map +0 -1
  763. package/dist/usecases/script/v4/queries.d.ts +0 -15
  764. package/dist/usecases/script/v4/queries.js +0 -196
  765. package/dist/usecases/script/v4/queries.js.map +0 -1
  766. package/dist/usecases/script/working-copy.d.ts +0 -5
  767. package/dist/usecases/script/working-copy.js +0 -399
  768. package/dist/usecases/script/working-copy.js.map +0 -1
  769. package/dist/usecases/script/worldview.d.ts +0 -3
  770. package/dist/usecases/script/worldview.js +0 -17
  771. package/dist/usecases/script/worldview.js.map +0 -1
  772. package/dist/usecases/script/write-authoring.d.ts +0 -3
  773. package/dist/usecases/script/write-authoring.js +0 -263
  774. package/dist/usecases/script/write-authoring.js.map +0 -1
  775. package/dist/usecases/update.d.ts +0 -13
  776. package/dist/usecases/update.js +0 -128
  777. package/dist/usecases/update.js.map +0 -1
@@ -1,148 +0,0 @@
1
- import { CliError, EXIT_INPUT } from "../../common.js";
2
- import { advanceSkippedEpisode } from "../../domain/ingest/video-context.js";
3
- import { parseOperationalFailure } from "./failure.js";
4
- function invalidLedger(reason) {
5
- return new CliError("The video skip ledger is invalid.", {
6
- exitCode: EXIT_INPUT,
7
- errorCode: "INGEST_SKIP_LEDGER_INVALID",
8
- hint: "Repair or remove skipped.json, then retry.",
9
- data: { actual: [reason] },
10
- });
11
- }
12
- function parseSkipRecord(value) {
13
- if (typeof value !== "object" || value === null || Array.isArray(value))
14
- return null;
15
- const record = value;
16
- if (!Number.isInteger(record["episode"]) || Number(record["episode"]) <= 0
17
- || typeof record["skipped_at"] !== "string"
18
- || typeof record["reason"] !== "string" || record["reason"].trim().length === 0
19
- || typeof record["source_sha256"] !== "string" || record["source_sha256"].length === 0
20
- || !Array.isArray(record["attempts"]))
21
- return null;
22
- const failure = parseOperationalFailure(record["failure"]);
23
- if (!failure)
24
- return null;
25
- const attempts = [];
26
- for (const value of record["attempts"]) {
27
- const attempt = parseOperationalFailure(value);
28
- if (!attempt)
29
- return null;
30
- attempts.push(attempt);
31
- }
32
- return {
33
- episode: Number(record["episode"]),
34
- skipped_at: record["skipped_at"],
35
- reason: record["reason"],
36
- source_sha256: record["source_sha256"],
37
- failure,
38
- attempts,
39
- };
40
- }
41
- export function readVideoSkipLedger(store) {
42
- if (!store.has("skipped.json"))
43
- return { schema_version: 1, episodes: [] };
44
- const value = store.readJson("skipped.json");
45
- if (typeof value !== "object" || value === null || Array.isArray(value))
46
- throw invalidLedger("root must be an object");
47
- const ledger = value;
48
- if (ledger["schema_version"] !== 1 || !Array.isArray(ledger["episodes"])) {
49
- throw invalidLedger("schema_version must be 1 and episodes must be an array");
50
- }
51
- const episodes = [];
52
- const seen = new Set();
53
- for (const value of ledger["episodes"]) {
54
- const record = parseSkipRecord(value);
55
- if (!record)
56
- throw invalidLedger("one or more episode records are malformed");
57
- if (seen.has(record.episode))
58
- throw invalidLedger(`episode ${record.episode} appears more than once`);
59
- seen.add(record.episode);
60
- episodes.push(record);
61
- }
62
- episodes.sort((left, right) => left.episode - right.episode);
63
- return { schema_version: 1, episodes };
64
- }
65
- export function writeVideoSkipLedger(store, ledger) {
66
- store.writeJson("skipped.json", ledger);
67
- }
68
- export function assertVideoSkipSources(skips, sourceEpisodes) {
69
- const sourceByEpisode = new Map(sourceEpisodes.map((episode) => [episode.episode, episode.sha256]));
70
- for (const record of skips) {
71
- const sourceSha256 = sourceByEpisode.get(record.episode);
72
- if (sourceSha256 === record.source_sha256)
73
- continue;
74
- throw new CliError("The video skip ledger no longer matches the source.", {
75
- exitCode: EXIT_INPUT,
76
- errorCode: "INGEST_SKIP_SOURCE_MISMATCH",
77
- hint: "Restore the source episode recorded by this workspace, or rebuild the same source with --force.",
78
- data: {
79
- actual: [
80
- `episode=${record.episode}`,
81
- `ledger_sha256=${record.source_sha256}`,
82
- `source_sha256=${sourceSha256 ?? "<missing>"}`,
83
- ],
84
- },
85
- });
86
- }
87
- }
88
- export function skippedEpisodeDoc(episode) {
89
- return {
90
- episode,
91
- synopsis: "",
92
- scenes: [],
93
- actors: [],
94
- locations: [],
95
- props: [],
96
- speakers: [],
97
- actorStates: [],
98
- locationStates: [],
99
- propStates: [],
100
- };
101
- }
102
- export function readAcceptedVideoDocs(store, episodes, acceptedThrough, skips) {
103
- const skipped = new Set(skips.map((record) => record.episode));
104
- const docs = [];
105
- for (const episode of episodes) {
106
- if (episode.episode > acceptedThrough)
107
- break;
108
- const rel = `ep/ep_${String(episode.episode).padStart(3, "0")}.json`;
109
- if (store.has(rel))
110
- docs.push(store.readJson(rel));
111
- else if (skipped.has(episode.episode))
112
- docs.push(skippedEpisodeDoc(episode.episode));
113
- }
114
- return docs;
115
- }
116
- export function reconcileVideoSkips(store, ctx, skips) {
117
- for (const record of skips) {
118
- if (record.episode <= ctx.lastEpisode) {
119
- store.clearError(`ep/ep_${String(record.episode).padStart(3, "0")}.error.json`);
120
- }
121
- }
122
- const byEpisode = new Map(skips.map((record) => [record.episode, record]));
123
- for (;;) {
124
- const next = ctx.lastEpisode + 1;
125
- if (!byEpisode.has(next))
126
- break;
127
- advanceSkippedEpisode(ctx, next);
128
- store.writeJson("context.json", ctx);
129
- store.clearError(`ep/ep_${String(next).padStart(3, "0")}.error.json`);
130
- }
131
- return ctx;
132
- }
133
- export function markSkippedEpisodes(script, skips) {
134
- for (const record of skips) {
135
- const episode = script.episodes[record.episode - 1];
136
- if (!episode)
137
- continue;
138
- episode.extend = {
139
- scriptctl: {
140
- ingest: {
141
- outcome: "skipped",
142
- source_episode: record.episode,
143
- },
144
- },
145
- };
146
- }
147
- }
148
- //# sourceMappingURL=video-skip-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"video-skip-state.js","sourceRoot":"","sources":["../../../src/usecases/ingest/video-skip-state.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { type CommandOutput } from "../../common.js";
2
- type Dict = Record<string, unknown>;
3
- export declare function commandView(opts: Dict): Promise<[CommandOutput, number]>;
4
- export {};
@@ -1,67 +0,0 @@
1
- // `scriptctl view` — top-level command (§4). Renders a workspace's script.json
2
- // into review.html at the workspace root. No model. For a video workspace it
3
- // symlinks the episode media into <ws>/src/ep_NNN.mp4 so the review UI's relative
4
- // video paths resolve. Fails clearly when the workspace has no script.json yet.
5
- import * as fs from "node:fs";
6
- import * as path from "node:path";
7
- import { CliError, EXIT_INPUT, EXIT_OK } from "../../common.js";
8
- import { renderReviewHtml } from "../../infra/ingest/review-renderer.js";
9
- import { WorkspaceStore } from "../../infra/ingest/workspace-store.js";
10
- import { runViewServer } from "./view-server.js";
11
- const strOf = (v) => (v === null || v === undefined ? "" : String(v));
12
- const pad = (n) => String(n).padStart(3, "0");
13
- // Symlink each episode's media into <ws>/src/ep_NNN.mp4 (best-effort; the review
14
- // UI seeks video by relative path). Only present for a video workspace.
15
- function linkMedia(store) {
16
- if (!store.has("manifest.json"))
17
- return;
18
- const manifest = store.readJson("manifest.json");
19
- if (!Array.isArray(manifest.episodes))
20
- return;
21
- const srcDir = store.path("src");
22
- fs.mkdirSync(srcDir, { recursive: true });
23
- for (const e of manifest.episodes) {
24
- if (typeof e.episode !== "number" || typeof e.path !== "string")
25
- continue;
26
- const link = path.join(srcDir, `ep_${pad(e.episode)}.mp4`);
27
- try {
28
- fs.rmSync(link, { force: true });
29
- fs.symlinkSync(e.path, link);
30
- }
31
- catch {
32
- // best-effort: a missing source or unsupported fs just leaves the seek broken.
33
- }
34
- }
35
- }
36
- export async function commandView(opts) {
37
- // --watch: live monitor server (progress + artifacts + context, auto-refresh),
38
- // runs until Ctrl-C. Works while ingest is still running (no script.json yet).
39
- // Local-only: it blocks on a web server + opens a browser, which would hang a
40
- // headless sandbox run — refuse there (the sandbox injects SANDBOX_PROJECT_GROUP_NO).
41
- if (opts["watch"]) {
42
- if ((process.env.SANDBOX_PROJECT_GROUP_NO ?? "").trim()) {
43
- throw new CliError("`view --watch` runs a local web server and opens a browser; it is local-only and unavailable in the sandbox.", {
44
- exitCode: EXIT_INPUT,
45
- errorCode: "VIEW_WATCH_SANDBOX",
46
- hint: "Use `scriptctl ingest status` for progress in the sandbox; run `view --watch` on your local machine.",
47
- });
48
- }
49
- return runViewServer(opts);
50
- }
51
- const workspacePath = strOf(opts["workspace_path"] || "workspace");
52
- const store = new WorkspaceStore(path.resolve(workspacePath));
53
- if (!store.has("script.json")) {
54
- throw new CliError("workspace has no script.json to render.", {
55
- exitCode: EXIT_INPUT,
56
- errorCode: "VIEW_NO_SCRIPT",
57
- hint: "Run `scriptctl ingest --source-path <src> --workspace-path <dir>` first.",
58
- data: { actual: [store.path("script.json")] },
59
- });
60
- }
61
- linkMedia(store);
62
- const html = renderReviewHtml(store.readJson("script.json"));
63
- store.writeText("review.html", html);
64
- const output = store.path("review.html");
65
- return [{ text: output, data: { output } }, EXIT_OK];
66
- }
67
- //# sourceMappingURL=view-command.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"view-command.js","sourceRoot":"","sources":["../../../src/usecases/ingest/view-command.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- import { type CommandOutput } from "../../common.js";
2
- import type { UsageReport } from "./usage-report.js";
3
- type Dict = Record<string, unknown>;
4
- interface FileMeta {
5
- rel: string;
6
- size: number;
7
- mtime: number;
8
- }
9
- export declare function listArtifacts(root: string): Record<string, FileMeta[]>;
10
- export declare function readTiming(root: string): {
11
- episodes: Array<{
12
- episode: number;
13
- transcodeMs?: number;
14
- uploadMs?: number;
15
- generateMs?: number;
16
- uploadMB?: string;
17
- transcoded?: boolean;
18
- }>;
19
- totalMs: number;
20
- };
21
- export declare function readUsage(root: string): UsageReport | null;
22
- export declare function readSafe(root: string, rel: string): {
23
- ok: true;
24
- text: string;
25
- } | {
26
- ok: false;
27
- };
28
- export declare function runViewServer(opts: Dict): Promise<[CommandOutput, number]>;
29
- export {};
@@ -1,364 +0,0 @@
1
- // `scriptctl view --watch` — a live workspace monitor for TEXT or VIDEO ingest.
2
- // Starts a tiny stdlib HTTP server (no deps) that a self-refreshing HTML dashboard
3
- // polls: ingest progress (deriveIngestStatus), the artifact tree (text serial
4
- // context/window md + provisional/final script, OR video per-episode transcript +
5
- // context-fed-to-model + parsed json + registry + timing.jsonl), and any single
6
- // file's content. The dashboard auto-refreshes so a running `scriptctl ingest` is
7
- // watched live and each unit's products stream in as they finish. Runs until Ctrl-C.
8
- // Text and video workspaces use disjoint layouts, so the artifact groups union
9
- // cleanly — a workspace only populates the groups its pipeline produces.
10
- import * as http from "node:http";
11
- import * as fs from "node:fs";
12
- import * as path from "node:path";
13
- import { spawn } from "node:child_process";
14
- import { EXIT_OK } from "../../common.js";
15
- import { deriveIngestStatus } from "./status.js";
16
- const strOf = (v) => (v === null || v === undefined ? "" : String(v));
17
- // Curated artifact list for the sidebar, grouped and ordered for reviewing an
18
- // ingest run. Only files that exist are returned.
19
- export function listArtifacts(root) {
20
- const meta = (rel) => {
21
- try {
22
- const s = fs.statSync(path.join(root, rel));
23
- return { rel, size: s.size, mtime: s.mtimeMs };
24
- }
25
- catch {
26
- return null;
27
- }
28
- };
29
- const dirFiles = (dir, filter) => {
30
- let names = [];
31
- try {
32
- names = fs.readdirSync(path.join(root, dir));
33
- }
34
- catch {
35
- return [];
36
- }
37
- return names.filter(filter).sort().map((n) => meta(`${dir}/${n}`)).filter((m) => !!m);
38
- };
39
- const only = (arr) => arr.filter((m) => !!m);
40
- const epFile = (suffix) => dirFiles("ep", (n) => n.endsWith(suffix) && !n.endsWith(".error.json"));
41
- return {
42
- 结果: only([meta("script.json"), meta("validation.json"), meta("asset-audit.json"), meta("usage.json"), meta("review.html"), meta("timings.json")]),
43
- // Text serial artifacts (empty for a video workspace).
44
- 上下文: dirFiles("serial", (n) => n.startsWith("context_") && n.endsWith(".md")),
45
- 每窗更新: dirFiles("serial", (n) => n.startsWith("win_") && n.endsWith(".json")),
46
- 篇章梗概: dirFiles("serial", (n) => n.startsWith("arc_") && n.endsWith(".md")),
47
- 前段: dirFiles("pass2", (n) => /^chunk_\d+\.json$/.test(n)),
48
- // Video serial artifacts (empty for a text workspace). Grouped by kind so an
49
- // episode's whole story is one scan down the list.
50
- 转录: epFile(".md").filter((m) => !m.rel.endsWith(".context.md")),
51
- 送模上下文: epFile(".context.md"),
52
- 解析: epFile(".json"),
53
- 花名册: only([meta("context.json")]),
54
- 计时: only([meta("timing.jsonl")]),
55
- 中间产物: only([meta("script.initial.json"), meta("provisional_assets.json"), meta("notes.json"), meta("id_map.json"), meta("manifest.json")]),
56
- };
57
- }
58
- // Parse timing.jsonl (one episode per line) into a compact summary the dashboard
59
- // shows without shipping the whole file. Tolerant: skips malformed lines. Only the
60
- // video pipeline writes timing.jsonl; a text workspace yields an empty summary.
61
- export function readTiming(root) {
62
- let text = "";
63
- try {
64
- text = fs.readFileSync(path.join(root, "timing.jsonl"), "utf-8");
65
- }
66
- catch {
67
- return { episodes: [], totalMs: 0 };
68
- }
69
- const episodes = [];
70
- let totalMs = 0;
71
- for (const line of text.split(/\r?\n/)) {
72
- const t = line.trim();
73
- if (!t)
74
- continue;
75
- try {
76
- const j = JSON.parse(t);
77
- if (typeof j.episode !== "number")
78
- continue;
79
- const row = { episode: j.episode };
80
- if (typeof j.transcodeMs === "number") {
81
- row.transcodeMs = j.transcodeMs;
82
- totalMs += j.transcodeMs;
83
- }
84
- if (typeof j.uploadMs === "number") {
85
- row.uploadMs = j.uploadMs;
86
- totalMs += j.uploadMs;
87
- }
88
- if (typeof j.generateMs === "number") {
89
- row.generateMs = j.generateMs;
90
- totalMs += j.generateMs;
91
- }
92
- if (typeof j.uploadMB === "string")
93
- row.uploadMB = j.uploadMB;
94
- if (typeof j.transcoded === "boolean")
95
- row.transcoded = j.transcoded;
96
- episodes.push(row);
97
- }
98
- catch { /* skip malformed line */ }
99
- }
100
- return { episodes, totalMs };
101
- }
102
- // Token accounting written by the pipelines → usage.json. Returns null when absent
103
- // (run hasn't reached the point where spend is persisted yet).
104
- export function readUsage(root) {
105
- try {
106
- const j = JSON.parse(fs.readFileSync(path.join(root, "usage.json"), "utf-8"));
107
- return j;
108
- }
109
- catch {
110
- return null;
111
- }
112
- }
113
- // Read a workspace file, guarding against path traversal outside the root.
114
- export function readSafe(root, rel) {
115
- const abs = path.resolve(root, rel);
116
- if (abs !== root && !abs.startsWith(root + path.sep))
117
- return { ok: false };
118
- try {
119
- return { ok: true, text: fs.readFileSync(abs, "utf-8") };
120
- }
121
- catch {
122
- return { ok: false };
123
- }
124
- }
125
- function send(res, code, type, body) {
126
- res.writeHead(code, { "Content-Type": type, "Cache-Control": "no-store" });
127
- res.end(body);
128
- }
129
- export async function runViewServer(opts) {
130
- const root = path.resolve(strOf(opts["workspace_path"] || "workspace"));
131
- const port = Number(opts["port"]) || 0; // 0 → OS-assigned ephemeral (no conflicts)
132
- const server = http.createServer((req, res) => {
133
- const u = new URL(req.url ?? "/", "http://localhost");
134
- if (u.pathname === "/")
135
- return send(res, 200, "text/html; charset=utf-8", DASHBOARD_HTML);
136
- if (u.pathname === "/api/state") {
137
- const status = deriveIngestStatus(root);
138
- return send(res, 200, "application/json", JSON.stringify({ root, status, groups: listArtifacts(root), timing: readTiming(root), usage: readUsage(root) }));
139
- }
140
- if (u.pathname === "/api/file") {
141
- const rel = u.searchParams.get("path") ?? "";
142
- const r = readSafe(root, rel);
143
- return r.ok ? send(res, 200, "text/plain; charset=utf-8", r.text) : send(res, 404, "text/plain", "not found");
144
- }
145
- send(res, 404, "text/plain", "not found");
146
- });
147
- const actualPort = await new Promise((resolve, reject) => {
148
- server.once("error", reject);
149
- server.listen(port, "127.0.0.1", () => resolve(server.address().port));
150
- });
151
- const url = `http://127.0.0.1:${actualPort}/`;
152
- process.stderr.write(`Ingest monitor: ${url}\nWorkspace: ${root}\nPress Ctrl-C to stop.\n`);
153
- if (process.platform === "darwin" && process.stderr.isTTY) {
154
- try {
155
- spawn("open", [url], { detached: true, stdio: "ignore" }).unref();
156
- }
157
- catch { /* best-effort */ }
158
- }
159
- // The listening server keeps the process alive after the startup result is
160
- // emitted. Closing it on either signal lets the CLI exit cleanly.
161
- process.once("SIGINT", () => server.close());
162
- process.once("SIGTERM", () => server.close());
163
- return [{ text: url, data: { url, workspace: root } }, EXIT_OK];
164
- }
165
- const DASHBOARD_HTML = `<!doctype html><html lang="zh"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
166
- <title>scriptctl ingest 监听</title>
167
- <style>
168
- :root{--bg:#f6f7f9;--panel:#ffffff;--panel2:#f0f2f5;--line:#e3e6ea;--fg:#1f2430;--dim:#6b7280;--acc:#2563eb;--ok:#16a34a;--warn:#d97706;--err:#dc2626}
169
- *{box-sizing:border-box}body{margin:0;font:13px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;background:var(--bg);color:var(--fg);height:100vh;display:grid;grid-template-rows:auto auto 1fr}
170
- header{padding:12px 16px;background:var(--panel);border-bottom:1px solid var(--line);display:flex;gap:16px;align-items:center;flex-wrap:wrap}
171
- header .title{font-weight:700;font-size:15px}
172
- .now{font-size:14px}.now b{color:var(--acc)}
173
- .state{padding:3px 12px;border-radius:20px;font-weight:600;font-size:12px}
174
- .state.ready{background:#e7f6ee;color:var(--ok)}.state.incomplete{background:#e8f0fe;color:var(--acc)}.state.failed{background:#fde8e8;color:var(--err)}.state.empty{background:var(--panel2);color:var(--dim)}
175
- .dim{color:var(--dim)}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
176
- /* overall bar + stage stepper */
177
- .progress{background:var(--panel);border-bottom:1px solid var(--line);padding:12px 16px}
178
- .ovwrap{display:flex;align-items:center;gap:10px;margin-bottom:12px}
179
- .ovtrack{flex:1;height:10px;background:var(--panel2);border-radius:6px;overflow:hidden}
180
- .ovtrack i{display:block;height:100%;background:linear-gradient(90deg,#3b82f6,#2563eb);border-radius:6px;transition:width .4s}
181
- .ovpct{font-weight:700;min-width:44px;text-align:right}
182
- .stages{display:flex;align-items:stretch;gap:0}
183
- .stage{flex:1;padding:8px 12px;border:1px solid var(--line);background:var(--panel);border-radius:8px;margin-right:8px}
184
- .stage:last-child{margin-right:0}
185
- .stage-h{display:flex;align-items:center;gap:7px;font-weight:600}
186
- .stage .dot{width:9px;height:9px;border-radius:50%;background:#cbd2dc;flex:none}
187
- .stage .cnt{margin-left:auto;font-size:12px;color:var(--dim)}
188
- .stage .track{height:6px;background:var(--panel2);border-radius:4px;margin-top:8px;overflow:hidden}
189
- .stage .track i{display:block;height:100%;width:0;border-radius:4px;transition:width .4s}
190
- .stage.wait{opacity:.7}
191
- .stage.done{border-color:#bfe6cd}.stage.done .dot{background:var(--ok)}.stage.done .track i{background:var(--ok)}.stage.done .stage-h b{color:var(--ok)}
192
- .stage.run{border-color:#bcd3fb;box-shadow:0 0 0 2px #e8f0fe}.stage.run .dot{background:var(--acc);animation:pulse 1.2s infinite}.stage.run .track i{background:var(--acc)}
193
- .stage.fail{border-color:#f3bcbc}.stage.fail .dot{background:var(--err)}.stage.fail .track i{background:var(--err)}
194
- @keyframes pulse{50%{opacity:.35}}
195
- main{display:grid;grid-template-columns:280px 1fr;min-height:0}
196
- aside{background:var(--panel);border-right:1px solid var(--line);overflow:auto;padding:8px}
197
- .grp{margin:8px 4px 2px;color:var(--dim);font-size:11px;font-weight:700;letter-spacing:.04em}
198
- .f{padding:4px 8px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between;gap:8px;white-space:nowrap;overflow:hidden}
199
- .f:hover{background:var(--panel2)}.f.sel{background:#e8f0fe;color:var(--acc);font-weight:600}
200
- .f .sz{color:var(--dim);font-size:11px}
201
- section{overflow:auto;background:var(--panel)}
202
- .toolbar{position:sticky;top:0;background:var(--panel2);border-bottom:1px solid var(--line);padding:6px 12px;display:flex;gap:14px;align-items:center;font-size:12px}
203
- label{cursor:pointer;user-select:none}.empty{color:var(--dim);padding:34px;text-align:center}
204
- #view{padding:14px 18px;white-space:pre-wrap;word-break:break-word;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px}
205
- #view h1,#view h2{margin:14px 0 4px}#view h1{color:var(--acc);font-size:15px}#view h2{color:var(--warn);font-size:13px}
206
- #view .b{color:var(--dim)}
207
- /* per-episode timing table (video only) */
208
- .timing{padding:8px 16px 4px;background:var(--panel);border-bottom:1px solid var(--line);overflow:auto;max-height:132px}
209
- table.tm{border-collapse:collapse;font-size:12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
210
- table.tm th,table.tm td{padding:2px 10px 2px 0;text-align:right}table.tm th:first-child,table.tm td:first-child{text-align:left}
211
- table.tm th{color:var(--dim);font-weight:600;border-bottom:1px solid var(--line)}
212
- table.tm td.slow{color:var(--warn)}
213
- </style></head><body>
214
- <header>
215
- <span class="title">scriptctl ingest</span>
216
- <span id="stateBadge" class="state empty">—</span>
217
- <span class="now">当前:<b id="curState">—</b></span>
218
- <span class="now">耗时 <b id="elapsed">—</b></span>
219
- <span class="dim" id="eta"></span>
220
- <span class="now" id="tokWrap" style="display:none">Token <b id="tokTotal">—</b> <span class="dim" id="tokIO"></span></span>
221
- <span class="dim mono" id="root" style="margin-left:auto"></span>
222
- <span class="dim" id="tick"></span>
223
- </header>
224
- <div class="progress">
225
- <div class="ovwrap"><span class="dim">总进度</span><div class="ovtrack"><i id="ovBar"></i></div><span class="ovpct" id="ovPct">0%</span></div>
226
- <div class="stages" id="stages"></div>
227
- </div>
228
- <div class="timing" id="timingWrap" style="display:none"><table class="tm" id="tmTable"></table></div>
229
- <div class="timing" id="usageWrap" style="display:none"><table class="tm" id="usageTable"></table></div>
230
- <main>
231
- <aside id="side"></aside>
232
- <section>
233
- <div class="toolbar">
234
- <span id="cur" class="mono dim">未选择文件</span>
235
- <label style="margin-left:auto"><input type="checkbox" id="follow" checked> 跟随最新集</label>
236
- </div>
237
- <div id="view"><div class="empty">左侧选择文件,或等待 ingest 产出…</div></div>
238
- </section>
239
- </main>
240
- <script>
241
- var NAMES={normalize:'规范化',assemble:'装配',serial:'串行解析',govern:'治理成稿',finalize:'治理成稿',transcribe:'转写',roster:'角色合并',correct:'校正',speaker:'发声源'};
242
- var cur=null, follow=true, lastLatest=null;
243
- var timing=null, timingAt=0; // last status.timings + client time it arrived (avoids clock skew)
244
- function $(s){return document.querySelector(s)}
245
- function fmtDur(ms){if(ms==null)return '—';var s=Math.round(ms/1000);return s>=60?(Math.floor(s/60)+'m'+('0'+(s%60)).slice(-2)+'s'):s+'s'}
246
- // per-episode timing table (video only; hidden when there is no timing.jsonl)
247
- function fmtTok(n){if(n==null)return '—';if(n>=1e6)return (n/1e6).toFixed(2)+'M';if(n>=1e3)return (n/1e3).toFixed(1)+'k';return ''+n}
248
- var TASKNAMES={'ingest.body-start':'正文定位','ingest.text-normalize':'规范化','ingest.serial-govern':'串行治理','ingest.name-fix':'命名修复','ingest.episode-assets':'分集资产','ingest.asset-curate':'资产甄选','ingest.asset-govern':'资产总览','ingest.arc-summary':'篇章梗概','ingest.state-reconcile':'状态归并','ingest.asset-audit':'资产审计','ingest.mention-resolve':'指称消解','ingest.video-serial':'视频串行'};
249
- // Token accounting table + header badge. Hidden until usage.json exists.
250
- function renderUsage(u){
251
- if(!u||!u.totals){$('#usageWrap').style.display='none';$('#tokWrap').style.display='none';return}
252
- var t=u.totals;
253
- $('#tokWrap').style.display='';
254
- $('#tokTotal').textContent=fmtTok(t.totalTokens);
255
- var cacheHit=(t.cachedInputTokens||0),cacheNew=(t.cacheCreationTokens||0);
256
- var cacheStr=(cacheHit||cacheNew)?' · 缓存命中 '+fmtTok(cacheHit)+(cacheNew?'/建 '+fmtTok(cacheNew):''):'';
257
- $('#tokIO').textContent='(入 '+fmtTok(t.inputTokens)+' / 出 '+fmtTok(t.outputTokens)+cacheStr+' · '+t.calls+'次'+(t.reused?' · 复用'+t.reused:'')+')';
258
- var rows=[];
259
- (u.byTask||[]).forEach(function(task){
260
- (task.byModel||[]).forEach(function(model){
261
- var r=model.totals||{};
262
- if(r.calls>0||r.reused>0||r.inputTokens>0||r.outputTokens>0)rows.push({task:task.task,model:model.model,provider:model.provider,totals:r});
263
- });
264
- });
265
- if(!rows.length){$('#usageWrap').style.display='none';return}
266
- rows.sort(function(a,b){return (b.totals.totalTokens||0)-(a.totals.totalTokens||0)});
267
- $('#usageWrap').style.display='block';
268
- var h=['<tr><th>任务</th><th>模型</th><th>调用</th><th>失败</th><th>复用</th><th>入token</th><th title="缓存命中/新建,均为入token的子集">缓存(命中/建)</th><th>出token</th><th>合计</th></tr>'];
269
- rows.forEach(function(row){
270
- var r=row.totals,ch=r.cachedInputTokens||0,cn=r.cacheCreationTokens||0;
271
- h.push('<tr><td>'+(TASKNAMES[row.task]||row.task)+'</td><td class="mono">'+row.provider+'/'+row.model+'</td><td>'+r.calls+'</td><td>'+(r.failed||0)+'</td><td>'+(r.reused||0)+'</td><td>'+fmtTok(r.inputTokens)+'</td><td class="dim">'+(ch||cn?fmtTok(ch)+'/'+fmtTok(cn):'—')+'</td><td>'+fmtTok(r.outputTokens)+'</td><td>'+fmtTok(r.totalTokens)+'</td></tr>');
272
- });
273
- h.push('<tr><td class="dim">合计</td><td></td><td class="dim">'+t.calls+'</td><td class="dim">'+t.failed+'</td><td class="dim">'+t.reused+'</td><td class="dim">'+fmtTok(t.inputTokens)+'</td><td class="dim">'+(t.cachedInputTokens||t.cacheCreationTokens?fmtTok(t.cachedInputTokens||0)+'/'+fmtTok(t.cacheCreationTokens||0):'—')+'</td><td class="dim">'+fmtTok(t.outputTokens)+'</td><td class="dim">'+fmtTok(t.totalTokens)+'</td></tr>');
274
- $('#usageTable').innerHTML=h.join('');
275
- }
276
- function renderEpTiming(tm){
277
- if(!tm||!tm.episodes||!tm.episodes.length){$('#timingWrap').style.display='none';return}
278
- $('#timingWrap').style.display='block';
279
- var rows=['<tr><th>集</th><th>转码</th><th>大小</th><th>上传</th><th>解析</th></tr>'];
280
- tm.episodes.forEach(function(e){
281
- var slow=e.generateMs>60000?' class="slow"':'';
282
- rows.push('<tr><td>ep'+('00'+e.episode).slice(-3)+'</td><td>'+fmtDur(e.transcodeMs)+(e.transcoded===false?'*':'')+'</td><td>'+(e.uploadMB||'?')+'M</td><td>'+fmtDur(e.uploadMs)+'</td><td'+slow+'>'+fmtDur(e.generateMs)+'</td></tr>');
283
- });
284
- rows.push('<tr><td class="dim">累计</td><td></td><td></td><td></td><td class="dim">'+fmtDur(tm.totalMs)+'</td></tr>');
285
- $('#tmTable').innerHTML=rows.join('');
286
- }
287
- // tick the total elapsed locally between polls; serial ETA/rate from the summary
288
- function renderTiming(){
289
- if(!timing){$('#elapsed').textContent='—';$('#eta').textContent='';return}
290
- var live=timing.elapsedMs+(timing.done?0:(Date.now()-timingAt));
291
- $('#elapsed').textContent=fmtDur(live)+(timing.done?'':' …');
292
- var ser=timing.serial,eta='';
293
- if(ser){
294
- eta='串行 '+ser.doneWindows+'/'+ser.totalWindows+' 窗口';
295
- if(ser.avgWindowMs!=null)eta+=' · ~'+fmtDur(ser.avgWindowMs)+'/窗';
296
- if(ser.etaMs!=null&&!timing.done)eta+=' · 预计剩余 '+fmtDur(ser.etaMs);
297
- }
298
- $('#eta').textContent=eta;
299
- }
300
- $('#follow').onchange=function(e){follow=e.target.checked};
301
- function esc(s){return s.replace(/[&<>]/g,function(c){return{'&':'&amp;','<':'&lt;','>':'&gt;'}[c]})}
302
- function renderContent(rel,text){
303
- if(rel.endsWith('.jsonl')){$('#view').textContent=text.split('\\n').map(function(l){try{return JSON.stringify(JSON.parse(l))}catch(e){return l}}).join('\\n');return}
304
- if(rel.endsWith('.json')){try{text=JSON.stringify(JSON.parse(text),null,2)}catch(e){}$('#view').textContent=text;return}
305
- if(rel.endsWith('.md')){
306
- $('#view').innerHTML=text.split('\\n').map(function(l){
307
- if(l.indexOf('## ')===0)return '<h2>'+esc(l.slice(3))+'</h2>';
308
- if(l.indexOf('# ')===0)return '<h1>'+esc(l.slice(2))+'</h1>';
309
- if(l.indexOf(' ')===0||l.indexOf('- ')===0||l.indexOf('> ')===0)return '<span class="b">'+esc(l)+'</span>';
310
- return esc(l)||'&nbsp;';
311
- }).join('\\n');return}
312
- $('#view').textContent=text;
313
- }
314
- function loadFile(rel){
315
- cur=rel;$('#cur').textContent=rel;
316
- var fs=document.querySelectorAll('.f');for(var i=0;i<fs.length;i++)fs[i].classList.toggle('sel',fs[i].dataset.rel===rel);
317
- fetch('/api/file?path='+encodeURIComponent(rel)).then(function(r){return r.text()}).then(function(t){renderContent(rel,t)}).catch(function(){});
318
- }
319
- function frac(p){return p.unit&&p.unit.total?p.unit.done/p.unit.total:(p.done?1:0)}
320
- function poll(){
321
- fetch('/api/state').then(function(r){return r.json()}).then(function(d){
322
- var s=d.status,passes=s.passes||[];
323
- $('#root').textContent=d.root;
324
- $('#stateBadge').className='state '+s.state;
325
- $('#stateBadge').textContent={ready:'已完成',incomplete:'进行中',failed:'失败',empty:'空'}[s.state]||s.state;
326
- // overall progress = mean of per-stage fractions
327
- var sum=0;passes.forEach(function(p){sum+=frac(p)});
328
- var pct=passes.length?Math.round(100*sum/passes.length):0;
329
- $('#ovBar').style.width=pct+'%';$('#ovPct').textContent=pct+'%';
330
- // current stage
331
- var curP=null;for(var i=0;i<passes.length;i++){if(!passes[i].done){curP=passes[i];break}}
332
- $('#curState').textContent=s.state==='ready'?'已完成 ✓':(curP?(NAMES[curP.name]||curP.name)+(curP.unit?' · '+curP.unit.done+'/'+curP.unit.total:''):'—');
333
- // per-phase durations from timings (real wall-clock)
334
- var ph={};((s.timings&&s.timings.phases)||[]).forEach(function(x){ph[x.name]=x});
335
- // staged stepper with per-stage bars + real durations
336
- $('#stages').innerHTML=passes.map(function(p){
337
- var st=p.done?'done':(p.unit&&p.unit.failed?'fail':(p.unit&&p.unit.done>0||p===curP?'run':'wait'));
338
- var cnt=p.unit?(p.unit.done+'/'+p.unit.total+(p.unit.failed?' ✗'+p.unit.failed:'')):(p.done?'✓':'—');
339
- var d=ph[p.name]?('<span class="cnt">'+fmtDur(ph[p.name].ms)+(ph[p.name].running?' …':'')+'</span>'):'';
340
- return '<div class="stage '+st+'"><div class="stage-h"><span class="dot"></span><b>'+(NAMES[p.name]||p.name)+'</b><span class="cnt">'+cnt+'</span></div><div class="track"><i style="width:'+Math.round(frac(p)*100)+'%"></i></div>'+(d?'<div class="dim" style="margin-top:4px">'+d+'</div>':'')+'</div>';
341
- }).join('');
342
- timing=s.timings||null;timingAt=Date.now();renderTiming();
343
- renderEpTiming(d.timing);
344
- renderUsage(d.usage);
345
- // sidebar
346
- var html='',latest=null;
347
- Object.keys(d.groups).forEach(function(grp){
348
- var files=d.groups[grp];if(!files.length)return;html+='<div class="grp">'+grp+'</div>';
349
- files.forEach(function(f){
350
- html+='<div class="f" data-rel="'+f.rel+'"><span>'+f.rel.split('/').pop()+'</span><span class="sz">'+(f.size>1024?(f.size/1024).toFixed(0)+'k':f.size)+'</span></div>';
351
- if(grp==='每窗更新'||grp==='上下文'||grp==='转录'||grp==='解析')latest=f.rel;
352
- });
353
- });
354
- $('#side').innerHTML=html;
355
- var els=document.querySelectorAll('.f');
356
- for(var j=0;j<els.length;j++){(function(el){el.onclick=function(){follow=false;$('#follow').checked=false;loadFile(el.dataset.rel)};if(el.dataset.rel===cur)el.classList.add('sel')})(els[j])}
357
- $('#tick').textContent='● '+new Date().toLocaleTimeString();
358
- if(follow&&latest&&latest!==lastLatest){lastLatest=latest;loadFile(latest)}
359
- else if(cur){loadFile(cur)}
360
- }).catch(function(){$('#tick').textContent='● 离线'});
361
- }
362
- poll();setInterval(poll,1500);setInterval(renderTiming,1000);
363
- </script></body></html>`;
364
- //# sourceMappingURL=view-server.js.map