@lingjingai/scriptctl 0.35.0 → 0.36.1

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 (364) hide show
  1. package/README.md +21 -5
  2. package/changes/0.36.0.md +24 -0
  3. package/dist/bin.js +0 -0
  4. package/dist/cli.d.ts +2 -1
  5. package/dist/cli.js +52 -128
  6. package/dist/cli.js.map +1 -1
  7. package/dist/common.d.ts +0 -16
  8. package/dist/common.js +2 -342
  9. package/dist/common.js.map +1 -1
  10. package/dist/domain/ingest/apply-plan.d.ts +23 -0
  11. package/dist/domain/ingest/apply-plan.js +210 -0
  12. package/dist/domain/ingest/apply-plan.js.map +1 -0
  13. package/dist/domain/ingest/assembler.d.ts +57 -0
  14. package/dist/domain/ingest/assembler.js +181 -0
  15. package/dist/domain/ingest/assembler.js.map +1 -0
  16. package/dist/domain/ingest/chunker.d.ts +9 -0
  17. package/dist/domain/ingest/chunker.js +38 -0
  18. package/dist/domain/ingest/chunker.js.map +1 -0
  19. package/dist/domain/ingest/evidence.d.ts +5 -0
  20. package/dist/domain/ingest/evidence.js +66 -0
  21. package/dist/domain/ingest/evidence.js.map +1 -0
  22. package/dist/domain/ingest/govern.d.ts +3 -0
  23. package/dist/domain/ingest/govern.js +127 -0
  24. package/dist/domain/ingest/govern.js.map +1 -0
  25. package/dist/domain/ingest/jsonl-parser.d.ts +6 -0
  26. package/dist/domain/ingest/jsonl-parser.js +187 -0
  27. package/dist/domain/ingest/jsonl-parser.js.map +1 -0
  28. package/dist/domain/ingest/markdown-parser.d.ts +6 -0
  29. package/dist/domain/ingest/markdown-parser.js +186 -0
  30. package/dist/domain/ingest/markdown-parser.js.map +1 -0
  31. package/dist/domain/ingest/records.d.ts +71 -0
  32. package/dist/domain/ingest/records.js +9 -0
  33. package/dist/domain/ingest/records.js.map +1 -0
  34. package/dist/domain/ingest/renumber.d.ts +14 -0
  35. package/dist/domain/ingest/renumber.js +130 -0
  36. package/dist/domain/ingest/renumber.js.map +1 -0
  37. package/dist/domain/ingest/script-v3.d.ts +94 -0
  38. package/dist/domain/ingest/script-v3.js +7 -0
  39. package/dist/domain/ingest/script-v3.js.map +1 -0
  40. package/dist/domain/ingest/state-reconcile.d.ts +11 -0
  41. package/dist/domain/ingest/state-reconcile.js +90 -0
  42. package/dist/domain/ingest/state-reconcile.js.map +1 -0
  43. package/dist/domain/ingest/validation.d.ts +11 -0
  44. package/dist/domain/ingest/validation.js +168 -0
  45. package/dist/domain/ingest/validation.js.map +1 -0
  46. package/dist/domain/ingest/video-aggregate.d.ts +23 -0
  47. package/dist/domain/ingest/video-aggregate.js +89 -0
  48. package/dist/domain/ingest/video-aggregate.js.map +1 -0
  49. package/dist/domain/ingest/video-apply.d.ts +37 -0
  50. package/dist/domain/ingest/video-apply.js +236 -0
  51. package/dist/domain/ingest/video-apply.js.map +1 -0
  52. package/dist/domain/ingest/video-md-parser.d.ts +2 -0
  53. package/dist/domain/ingest/video-md-parser.js +233 -0
  54. package/dist/domain/ingest/video-md-parser.js.map +1 -0
  55. package/dist/domain/ingest/video-records.d.ts +56 -0
  56. package/dist/domain/ingest/video-records.js +9 -0
  57. package/dist/domain/ingest/video-records.js.map +1 -0
  58. package/dist/domain/loom/index.d.ts +2 -1
  59. package/dist/domain/loom/index.js +12 -10
  60. package/dist/domain/loom/index.js.map +1 -1
  61. package/dist/domain/loom/types.d.ts +3 -2
  62. package/dist/domain/script/lookups.d.ts +3 -2
  63. package/dist/domain/script/lookups.js +25 -8
  64. package/dist/domain/script/lookups.js.map +1 -1
  65. package/dist/domain/script/patch/apply.js +2 -2
  66. package/dist/domain/script/patch/apply.js.map +1 -1
  67. package/dist/domain/script/patch/helpers.d.ts +3 -7
  68. package/dist/domain/script/patch/helpers.js +23 -96
  69. package/dist/domain/script/patch/helpers.js.map +1 -1
  70. package/dist/domain/script/patch/ops-action.d.ts +0 -2
  71. package/dist/domain/script/patch/ops-action.js +34 -100
  72. package/dist/domain/script/patch/ops-action.js.map +1 -1
  73. package/dist/domain/script/patch/ops-asset.d.ts +1 -0
  74. package/dist/domain/script/patch/ops-asset.js +102 -155
  75. package/dist/domain/script/patch/ops-asset.js.map +1 -1
  76. package/dist/domain/script/patch/ops-dialogue.d.ts +1 -4
  77. package/dist/domain/script/patch/ops-dialogue.js +43 -220
  78. package/dist/domain/script/patch/ops-dialogue.js.map +1 -1
  79. package/dist/domain/script/patch/ops-extend.js +8 -2
  80. package/dist/domain/script/patch/ops-extend.js.map +1 -1
  81. package/dist/domain/script/patch/ops-meta.js.map +1 -1
  82. package/dist/domain/script/patch/ops-scene.js +26 -39
  83. package/dist/domain/script/patch/ops-scene.js.map +1 -1
  84. package/dist/domain/script/patch/ops-state.d.ts +3 -3
  85. package/dist/domain/script/patch/ops-state.js +33 -49
  86. package/dist/domain/script/patch/ops-state.js.map +1 -1
  87. package/dist/domain/script/patch/registry.js +9 -13
  88. package/dist/domain/script/patch/registry.js.map +1 -1
  89. package/dist/domain/script/refs.js +23 -111
  90. package/dist/domain/script/refs.js.map +1 -1
  91. package/dist/domain/script/scene-refs.d.ts +3 -0
  92. package/dist/domain/script/scene-refs.js +35 -0
  93. package/dist/domain/script/scene-refs.js.map +1 -0
  94. package/dist/domain/script/schema.js +17 -21
  95. package/dist/domain/script/schema.js.map +1 -1
  96. package/dist/domain/script/text-util.d.ts +7 -0
  97. package/dist/domain/script/text-util.js +91 -0
  98. package/dist/domain/script/text-util.js.map +1 -0
  99. package/dist/help-text.js +117 -410
  100. package/dist/help-text.js.map +1 -1
  101. package/dist/infra/converters.js +1 -1
  102. package/dist/infra/converters.js.map +1 -1
  103. package/dist/infra/episode-title.d.ts +4 -0
  104. package/dist/infra/episode-title.js +129 -0
  105. package/dist/infra/episode-title.js.map +1 -0
  106. package/dist/infra/ingest/review-renderer.d.ts +1 -0
  107. package/dist/infra/ingest/review-renderer.js +431 -0
  108. package/dist/infra/ingest/review-renderer.js.map +1 -0
  109. package/dist/infra/ingest/source-resolver.d.ts +21 -0
  110. package/dist/infra/ingest/source-resolver.js +51 -0
  111. package/dist/infra/ingest/source-resolver.js.map +1 -0
  112. package/dist/infra/ingest/text-reader.d.ts +3 -0
  113. package/dist/infra/ingest/text-reader.js +27 -0
  114. package/dist/infra/ingest/text-reader.js.map +1 -0
  115. package/dist/infra/ingest/video-discovery.d.ts +8 -0
  116. package/dist/infra/ingest/video-discovery.js +60 -0
  117. package/dist/infra/ingest/video-discovery.js.map +1 -0
  118. package/dist/infra/ingest/workspace-store.d.ts +18 -0
  119. package/dist/infra/ingest/workspace-store.js +70 -0
  120. package/dist/infra/ingest/workspace-store.js.map +1 -0
  121. package/dist/infra/llm/anthropic-model.d.ts +11 -0
  122. package/dist/infra/llm/anthropic-model.js +109 -0
  123. package/dist/infra/llm/anthropic-model.js.map +1 -0
  124. package/dist/infra/llm/gemini-upload.d.ts +9 -0
  125. package/dist/infra/llm/gemini-upload.js +94 -0
  126. package/dist/infra/llm/gemini-upload.js.map +1 -0
  127. package/dist/infra/llm/gemini-video-model.d.ts +47 -0
  128. package/dist/infra/llm/gemini-video-model.js +163 -0
  129. package/dist/infra/llm/gemini-video-model.js.map +1 -0
  130. package/dist/infra/llm/openai-compatible-model.d.ts +14 -0
  131. package/dist/infra/llm/openai-compatible-model.js +157 -0
  132. package/dist/infra/llm/openai-compatible-model.js.map +1 -0
  133. package/dist/infra/llm/retry.d.ts +5 -0
  134. package/dist/infra/llm/retry.js +20 -0
  135. package/dist/infra/llm/retry.js.map +1 -0
  136. package/dist/llm/composition.d.ts +5 -0
  137. package/dist/llm/composition.js +5 -0
  138. package/dist/llm/composition.js.map +1 -0
  139. package/dist/llm/config.d.ts +26 -0
  140. package/dist/llm/config.js +201 -0
  141. package/dist/llm/config.js.map +1 -0
  142. package/dist/llm/registry.d.ts +44 -0
  143. package/dist/llm/registry.js +48 -0
  144. package/dist/llm/registry.js.map +1 -0
  145. package/dist/llm/router.d.ts +23 -0
  146. package/dist/llm/router.js +0 -0
  147. package/dist/llm/router.js.map +1 -0
  148. package/dist/llm/tasks/ingest/asset-curate.d.ts +13 -0
  149. package/dist/llm/tasks/ingest/asset-curate.js +45 -0
  150. package/dist/llm/tasks/ingest/asset-curate.js.map +1 -0
  151. package/dist/llm/tasks/ingest/asset-extract.d.ts +12 -0
  152. package/dist/llm/tasks/ingest/asset-extract.js +51 -0
  153. package/dist/llm/tasks/ingest/asset-extract.js.map +1 -0
  154. package/dist/llm/tasks/ingest/asset-govern.d.ts +22 -0
  155. package/dist/llm/tasks/ingest/asset-govern.js +143 -0
  156. package/dist/llm/tasks/ingest/asset-govern.js.map +1 -0
  157. package/dist/llm/tasks/ingest/mention-resolve.d.ts +9 -0
  158. package/dist/llm/tasks/ingest/mention-resolve.js +39 -0
  159. package/dist/llm/tasks/ingest/mention-resolve.js.map +1 -0
  160. package/dist/llm/tasks/ingest/plot-speaker.d.ts +11 -0
  161. package/dist/llm/tasks/ingest/plot-speaker.js +72 -0
  162. package/dist/llm/tasks/ingest/plot-speaker.js.map +1 -0
  163. package/dist/llm/tasks/ingest/roster-merge.d.ts +46 -0
  164. package/dist/llm/tasks/ingest/roster-merge.js +235 -0
  165. package/dist/llm/tasks/ingest/roster-merge.js.map +1 -0
  166. package/dist/llm/tasks/ingest/state-merge.d.ts +10 -0
  167. package/dist/llm/tasks/ingest/state-merge.js +84 -0
  168. package/dist/llm/tasks/ingest/state-merge.js.map +1 -0
  169. package/dist/llm/tasks/ingest/state-reconcile.d.ts +8 -0
  170. package/dist/llm/tasks/ingest/state-reconcile.js +44 -0
  171. package/dist/llm/tasks/ingest/state-reconcile.js.map +1 -0
  172. package/dist/llm/tasks/ingest/text-normalize.d.ts +10 -0
  173. package/dist/llm/tasks/ingest/text-normalize.js +89 -0
  174. package/dist/llm/tasks/ingest/text-normalize.js.map +1 -0
  175. package/dist/llm/tasks/ingest/video-correct.d.ts +30 -0
  176. package/dist/llm/tasks/ingest/video-correct.js +144 -0
  177. package/dist/llm/tasks/ingest/video-correct.js.map +1 -0
  178. package/dist/llm/tasks/ingest/video-transcribe.d.ts +4 -0
  179. package/dist/llm/tasks/ingest/video-transcribe.js +105 -0
  180. package/dist/llm/tasks/ingest/video-transcribe.js.map +1 -0
  181. package/dist/llm/tasks/schemas.d.ts +5 -0
  182. package/dist/llm/tasks/schemas.js +107 -0
  183. package/dist/llm/tasks/schemas.js.map +1 -0
  184. package/dist/llm/types.d.ts +97 -0
  185. package/dist/llm/types.js +13 -0
  186. package/dist/llm/types.js.map +1 -0
  187. package/dist/usecases/doctor.d.ts +1 -1
  188. package/dist/usecases/doctor.js +62 -9
  189. package/dist/usecases/doctor.js.map +1 -1
  190. package/dist/usecases/ingest/command.d.ts +5 -0
  191. package/dist/usecases/ingest/command.js +64 -0
  192. package/dist/usecases/ingest/command.js.map +1 -0
  193. package/dist/usecases/ingest/fanout.d.ts +10 -0
  194. package/dist/usecases/ingest/fanout.js +23 -0
  195. package/dist/usecases/ingest/fanout.js.map +1 -0
  196. package/dist/usecases/ingest/pass4-mention-resolve.d.ts +11 -0
  197. package/dist/usecases/ingest/pass4-mention-resolve.js +52 -0
  198. package/dist/usecases/ingest/pass4-mention-resolve.js.map +1 -0
  199. package/dist/usecases/ingest/pass5-extract.d.ts +7 -0
  200. package/dist/usecases/ingest/pass5-extract.js +50 -0
  201. package/dist/usecases/ingest/pass5-extract.js.map +1 -0
  202. package/dist/usecases/ingest/pass5-govern.d.ts +13 -0
  203. package/dist/usecases/ingest/pass5-govern.js +155 -0
  204. package/dist/usecases/ingest/pass5-govern.js.map +1 -0
  205. package/dist/usecases/ingest/pipeline.d.ts +28 -0
  206. package/dist/usecases/ingest/pipeline.js +144 -0
  207. package/dist/usecases/ingest/pipeline.js.map +1 -0
  208. package/dist/usecases/ingest/publish-command.d.ts +4 -0
  209. package/dist/usecases/ingest/publish-command.js +77 -0
  210. package/dist/usecases/ingest/publish-command.js.map +1 -0
  211. package/dist/usecases/ingest/status.d.ts +39 -0
  212. package/dist/usecases/ingest/status.js +155 -0
  213. package/dist/usecases/ingest/status.js.map +1 -0
  214. package/dist/usecases/ingest/video-pass3.d.ts +26 -0
  215. package/dist/usecases/ingest/video-pass3.js +0 -0
  216. package/dist/usecases/ingest/video-pass3.js.map +1 -0
  217. package/dist/usecases/ingest/video-pipeline.d.ts +32 -0
  218. package/dist/usecases/ingest/video-pipeline.js +202 -0
  219. package/dist/usecases/ingest/video-pipeline.js.map +1 -0
  220. package/dist/usecases/ingest/view-command.d.ts +4 -0
  221. package/dist/usecases/ingest/view-command.js +51 -0
  222. package/dist/usecases/ingest/view-command.js.map +1 -0
  223. package/dist/usecases/script/actions.js +2 -2
  224. package/dist/usecases/script/actions.js.map +1 -1
  225. package/dist/usecases/script/actor.js.map +1 -1
  226. package/dist/usecases/script/actors.js.map +1 -1
  227. package/dist/usecases/script/add-actor.js.map +1 -1
  228. package/dist/usecases/script/add-episode.js.map +1 -1
  229. package/dist/usecases/script/add-location.js.map +1 -1
  230. package/dist/usecases/script/add-prop.js.map +1 -1
  231. package/dist/usecases/script/alias.js.map +1 -1
  232. package/dist/usecases/script/assets.js.map +1 -1
  233. package/dist/usecases/script/context.js.map +1 -1
  234. package/dist/usecases/script/create.js +3 -6
  235. package/dist/usecases/script/create.js.map +1 -1
  236. package/dist/usecases/script/delete.js.map +1 -1
  237. package/dist/usecases/script/describe.js.map +1 -1
  238. package/dist/usecases/script/dialogue.js +6 -13
  239. package/dist/usecases/script/dialogue.js.map +1 -1
  240. package/dist/usecases/script/do.js +1 -1
  241. package/dist/usecases/script/do.js.map +1 -1
  242. package/dist/usecases/script/episodes.js.map +1 -1
  243. package/dist/usecases/script/{add-speaker.d.ts → importance.d.ts} +1 -1
  244. package/dist/usecases/script/importance.js +17 -0
  245. package/dist/usecases/script/importance.js.map +1 -0
  246. package/dist/usecases/script/insert.js.map +1 -1
  247. package/dist/usecases/script/issues.js.map +1 -1
  248. package/dist/usecases/script/lib.d.ts +8 -6
  249. package/dist/usecases/script/lib.js +81 -97
  250. package/dist/usecases/script/lib.js.map +1 -1
  251. package/dist/usecases/script/locations.js.map +1 -1
  252. package/dist/usecases/script/merge.js.map +1 -1
  253. package/dist/usecases/script/move.js.map +1 -1
  254. package/dist/usecases/script/props.js.map +1 -1
  255. package/dist/usecases/script/refs.js.map +1 -1
  256. package/dist/usecases/script/rename.js.map +1 -1
  257. package/dist/usecases/script/replace.js.map +1 -1
  258. package/dist/usecases/script/role.js.map +1 -1
  259. package/dist/usecases/script/scenes.js +8 -15
  260. package/dist/usecases/script/scenes.js.map +1 -1
  261. package/dist/usecases/script/script-patch.js +1 -1
  262. package/dist/usecases/script/script-patch.js.map +1 -1
  263. package/dist/usecases/script/script-validate.js +1 -1
  264. package/dist/usecases/script/script-validate.js.map +1 -1
  265. package/dist/usecases/script/session.d.ts +4 -4
  266. package/dist/usecases/script/session.js +57 -78
  267. package/dist/usecases/script/session.js.map +1 -1
  268. package/dist/usecases/script/split.js.map +1 -1
  269. package/dist/usecases/script/state-add.js.map +1 -1
  270. package/dist/usecases/script/state-delete.js.map +1 -1
  271. package/dist/usecases/script/state-rename.js.map +1 -1
  272. package/dist/usecases/script/summary.js.map +1 -1
  273. package/dist/usecases/script/synopsis-generate.d.ts +4 -5
  274. package/dist/usecases/script/synopsis-generate.js +30 -46
  275. package/dist/usecases/script/synopsis-generate.js.map +1 -1
  276. package/dist/usecases/script/transition.js.map +1 -1
  277. package/dist/usecases/script/type.js.map +1 -1
  278. package/dist/usecases/script/worldview.js.map +1 -1
  279. package/package.json +21 -17
  280. package/skills/scriptctl/SKILL.md +140 -120
  281. package/skills/scriptctl/references/atomic-write-workflow.md +12 -9
  282. package/skills/scriptctl/references/ingest-workflow.md +85 -0
  283. package/skills/scriptctl/references/state-reference-repair.md +26 -39
  284. package/dist/domain/direct/runner.d.ts +0 -25
  285. package/dist/domain/direct/runner.js +0 -88
  286. package/dist/domain/direct/runner.js.map +0 -1
  287. package/dist/domain/direct/stage.d.ts +0 -108
  288. package/dist/domain/direct/stage.js +0 -134
  289. package/dist/domain/direct/stage.js.map +0 -1
  290. package/dist/domain/direct/stages/asset-curation.d.ts +0 -2
  291. package/dist/domain/direct/stages/asset-curation.js +0 -10
  292. package/dist/domain/direct/stages/asset-curation.js.map +0 -1
  293. package/dist/domain/direct/stages/batch-extract.d.ts +0 -2
  294. package/dist/domain/direct/stages/batch-extract.js +0 -12
  295. package/dist/domain/direct/stages/batch-extract.js.map +0 -1
  296. package/dist/domain/direct/stages/batch-plan.d.ts +0 -2
  297. package/dist/domain/direct/stages/batch-plan.js +0 -9
  298. package/dist/domain/direct/stages/batch-plan.js.map +0 -1
  299. package/dist/domain/direct/stages/episode-merge.d.ts +0 -2
  300. package/dist/domain/direct/stages/episode-merge.js +0 -11
  301. package/dist/domain/direct/stages/episode-merge.js.map +0 -1
  302. package/dist/domain/direct/stages/episode-plan.d.ts +0 -2
  303. package/dist/domain/direct/stages/episode-plan.js +0 -9
  304. package/dist/domain/direct/stages/episode-plan.js.map +0 -1
  305. package/dist/domain/direct/stages/episode-synopsis.d.ts +0 -2
  306. package/dist/domain/direct/stages/episode-synopsis.js +0 -12
  307. package/dist/domain/direct/stages/episode-synopsis.js.map +0 -1
  308. package/dist/domain/direct/stages/episode-titles.d.ts +0 -2
  309. package/dist/domain/direct/stages/episode-titles.js +0 -12
  310. package/dist/domain/direct/stages/episode-titles.js.map +0 -1
  311. package/dist/domain/direct/stages/index.d.ts +0 -19
  312. package/dist/domain/direct/stages/index.js +0 -41
  313. package/dist/domain/direct/stages/index.js.map +0 -1
  314. package/dist/domain/direct/stages/metadata.d.ts +0 -2
  315. package/dist/domain/direct/stages/metadata.js +0 -11
  316. package/dist/domain/direct/stages/metadata.js.map +0 -1
  317. package/dist/domain/direct/stages/script-merge.d.ts +0 -2
  318. package/dist/domain/direct/stages/script-merge.js +0 -15
  319. package/dist/domain/direct/stages/script-merge.js.map +0 -1
  320. package/dist/domain/direct/stages/script-synopsis.d.ts +0 -2
  321. package/dist/domain/direct/stages/script-synopsis.js +0 -12
  322. package/dist/domain/direct/stages/script-synopsis.js.map +0 -1
  323. package/dist/domain/direct/stages/source-prepare.d.ts +0 -2
  324. package/dist/domain/direct/stages/source-prepare.js +0 -9
  325. package/dist/domain/direct/stages/source-prepare.js.map +0 -1
  326. package/dist/domain/direct/stages/state-binding.d.ts +0 -2
  327. package/dist/domain/direct/stages/state-binding.js +0 -9
  328. package/dist/domain/direct/stages/state-binding.js.map +0 -1
  329. package/dist/domain/direct/stages/state-curation.d.ts +0 -2
  330. package/dist/domain/direct/stages/state-curation.js +0 -10
  331. package/dist/domain/direct/stages/state-curation.js.map +0 -1
  332. package/dist/domain/direct/stages/validate.d.ts +0 -2
  333. package/dist/domain/direct/stages/validate.js +0 -10
  334. package/dist/domain/direct/stages/validate.js.map +0 -1
  335. package/dist/domain/direct-core.d.ts +0 -313
  336. package/dist/domain/direct-core.js +0 -8514
  337. package/dist/domain/direct-core.js.map +0 -1
  338. package/dist/domain/script/validate.d.ts +0 -22
  339. package/dist/domain/script/validate.js +0 -997
  340. package/dist/domain/script/validate.js.map +0 -1
  341. package/dist/infra/providers.d.ts +0 -97
  342. package/dist/infra/providers.js +0 -1396
  343. package/dist/infra/providers.js.map +0 -1
  344. package/dist/usecases/direct.d.ts +0 -27
  345. package/dist/usecases/direct.js +0 -4172
  346. package/dist/usecases/direct.js.map +0 -1
  347. package/dist/usecases/parse.d.ts +0 -15
  348. package/dist/usecases/parse.js +0 -429
  349. package/dist/usecases/parse.js.map +0 -1
  350. package/dist/usecases/script/add-speaker.js +0 -22
  351. package/dist/usecases/script/add-speaker.js.map +0 -1
  352. package/dist/usecases/script/export.d.ts +0 -3
  353. package/dist/usecases/script/export.js +0 -111
  354. package/dist/usecases/script/export.js.map +0 -1
  355. package/dist/usecases/script/overlap.d.ts +0 -3
  356. package/dist/usecases/script/overlap.js +0 -21
  357. package/dist/usecases/script/overlap.js.map +0 -1
  358. package/dist/usecases/script/speakers.d.ts +0 -3
  359. package/dist/usecases/script/speakers.js +0 -28
  360. package/dist/usecases/script/speakers.js.map +0 -1
  361. package/dist/usecases/script/state-change.d.ts +0 -3
  362. package/dist/usecases/script/state-change.js +0 -24
  363. package/dist/usecases/script/state-change.js.map +0 -1
  364. package/skills/scriptctl/references/direct-workflow.md +0 -72
@@ -1,429 +0,0 @@
1
- /**
2
- * `scriptctl parse` — 实验性、与 direct 完全解耦的入库路径。
3
- *
4
- * 设计原则:md 是唯一真相源。subagent 写好一个 md 工作区(每集正文 md + 人物/场景/
5
- * 道具/发声源 md + 可选 梗概.md/元信息.md),parse 确定性地解析、装配成 script,校验
6
- * 通过后(`--publish`)直接写进 ScriptOutputStore。出问题就改 md 重跑——不经 direct 的
7
- * inspect/patch/export,也不写 direct 的 run_state / directDir / source.txt。
8
- *
9
- * 依赖只触及更底层:domain(md 解析/装配、校验)+ infra(输出 store)+ common。
10
- * 不 import 任何 sibling usecase(direct.ts / script.ts),可随时整体移除。
11
- */
12
- import * as fs from "node:fs";
13
- import * as path from "node:path";
14
- import { CliError, DEFAULT_MODEL, DEFAULT_PROVIDER, EXIT_INPUT, EXIT_NEEDS_AGENT, EXIT_OK, PARSE_MD_SPEC, WORLDVIEW_VALUES, exists, readText, sha256Text, writeJson, writeText, } from "../common.js";
15
- import { applyMetadataToScript, cleanName, mergeEpisodeResultsWithReport, parseAssetDoc, parseMarkdownBatch, serializeAssetDoc, serializeMetaDoc, sortDeep, } from "../domain/direct-core.js";
16
- import { validateScript } from "../domain/script/validate.js";
17
- import { LocalScriptOutputStore } from "../infra/local-script-output-store.js";
18
- import { makeProvider, providerCapabilities } from "../infra/providers.js";
19
- import { remoteScriptOutputStoreFromEnv } from "../infra/script-output-api.js";
20
- import { ScriptOutputApiError, resolveOutputModeOrThrow } from "../infra/script-output-store.js";
21
- function strOf(v) {
22
- return v === null || v === undefined ? "" : String(v);
23
- }
24
- function isDict(v) {
25
- return typeof v === "object" && v !== null && !Array.isArray(v);
26
- }
27
- function asList(v) {
28
- return Array.isArray(v) ? v : [];
29
- }
30
- // ---------------------------------------------------------------------------
31
- // md 工作区布局
32
- // ---------------------------------------------------------------------------
33
- const _EP_FILE_RE = /^ep[_-]?0*(\d+)\.(?:md|markdown)$/i;
34
- const ASSET_DOC_SPECS = [
35
- { kind: "actors", names: ["人物.md", "角色.md", "characters.md", "actors.md"] },
36
- { kind: "locations", names: ["场景.md", "地点.md", "locations.md"] },
37
- { kind: "props", names: ["道具.md", "props.md"] },
38
- { kind: "speakers", names: ["发声源.md", "speakers.md"] },
39
- ];
40
- const SYNOPSIS_DOC_NAMES = ["梗概.md", "全文梗概.md", "synopsis.md"];
41
- const META_DOC_NAMES = ["元信息.md", "meta.md"];
42
- function firstExisting(dir, names) {
43
- for (const n of names) {
44
- const p = path.join(dir, n);
45
- if (exists(p) && fs.statSync(p).isFile())
46
- return p;
47
- }
48
- return null;
49
- }
50
- function collectEpisodeMdFiles(dir) {
51
- if (!exists(dir) || !fs.statSync(dir).isDirectory())
52
- return [];
53
- const out = [];
54
- for (const name of fs.readdirSync(dir)) {
55
- const m = _EP_FILE_RE.exec(name);
56
- if (!m)
57
- continue;
58
- const full = path.join(dir, name);
59
- if (!fs.statSync(full).isFile())
60
- continue;
61
- out.push({ path: full, episode: parseInt(m[1], 10) });
62
- }
63
- out.sort((a, b) => a.episode - b.episode);
64
- return out;
65
- }
66
- // Whole-script metadata from 元信息.md: worldview / style / title / 主角.
67
- function parseMetaDoc(text) {
68
- const out = {};
69
- for (const line of text.split(/\r?\n/)) {
70
- const m = /^\s*[-*]?\s*(title|worldview|style|protagonists|标题|世界观|风格|主角|主角列表)\s*[::]\s*(.+?)\s*$/i.exec(line);
71
- if (!m)
72
- continue;
73
- const key = m[1].toLowerCase();
74
- const val = m[2].trim();
75
- if (!val)
76
- continue;
77
- if (key === "title" || key === "标题")
78
- out.title = val;
79
- else if (key === "worldview" || key === "世界观")
80
- out.worldview = val;
81
- else if (key === "style" || key === "风格")
82
- out.style = val;
83
- else if (key === "protagonists" || key === "主角" || key === "主角列表") {
84
- out.protagonists = val.split(/[,,、]/).map((s) => s.trim()).filter(Boolean);
85
- }
86
- }
87
- return out;
88
- }
89
- function summarizeIssues(issues) {
90
- if (issues.length === 0)
91
- return [];
92
- const counts = {};
93
- for (const item of issues) {
94
- const sev = strOf(item["severity"]);
95
- counts[sev] = (counts[sev] ?? 0) + 1;
96
- }
97
- const parts = Object.entries(counts).sort(([a], [b]) => a.localeCompare(b)).map(([sev, c]) => `${sev}: ${c}`);
98
- const first = issues[0];
99
- return [parts.join("; "), `first: ${first["code"]} - ${first["summary"]}`];
100
- }
101
- // ---------------------------------------------------------------------------
102
- // 输出 store(直接从 infra 建,不依赖 usecases/script.ts)
103
- // ---------------------------------------------------------------------------
104
- function makeOutputStore(opts) {
105
- // Shared store-target contract (conflict / no-target) lives in
106
- // resolveOutputModeOrThrow; this builder only owns store construction + its
107
- // own config-missing message.
108
- const mode = resolveOutputModeOrThrow({
109
- remote: opts["remote"],
110
- local: opts["local"],
111
- projectGroupNo: opts["project_group_no"],
112
- });
113
- try {
114
- return mode === "local"
115
- ? LocalScriptOutputStore.fromEnv(strOf(opts["workspace_path"]).trim() || undefined)
116
- : remoteScriptOutputStoreFromEnv(strOf(opts["project_group_no"]).trim() || null);
117
- }
118
- catch (exc) {
119
- const raw = exc instanceof Error ? exc.message : String(exc);
120
- throw new CliError("PARSE PUBLISH BLOCKED: 输出未配置", "Output store not configured.", {
121
- exitCode: EXIT_INPUT,
122
- required: [mode === "local" ? "SCRIPTCTL_OUTPUT_DIR" : "gateway 配置(AWB_BASE_URL / ACCESS_KEY / project-group-no)"],
123
- received: [raw],
124
- nextSteps: ["运行 `scriptctl doctor` 检查输出配置。"],
125
- errorCode: "SCRIPT_API_CONFIG_MISSING",
126
- });
127
- }
128
- }
129
- async function currentRevisionOrZero(client) {
130
- try {
131
- // getRevision() returns `{ revision: N } | null`, not a bare number.
132
- const revision = await client.getRevision();
133
- if (!revision)
134
- return 0;
135
- return Number(revision["revision"] ?? 0);
136
- }
137
- catch {
138
- return 0;
139
- }
140
- }
141
- // ---------------------------------------------------------------------------
142
- // command_parse
143
- // ---------------------------------------------------------------------------
144
- export async function commandParse(opts) {
145
- if (opts["spec"]) {
146
- return [{ title: "PARSE SPEC: md 工作区写法", body: PARSE_MD_SPEC }, EXIT_OK];
147
- }
148
- const workspace = strOf(opts["workspace_path"] || "workspace");
149
- const args = asList(opts["_args"]);
150
- const mdDir = strOf(opts["md_dir"] || args[0] || path.join(workspace, "parse"));
151
- if (!exists(mdDir) || !fs.statSync(mdDir).isDirectory()) {
152
- throw new CliError("PARSE BLOCKED: md workspace not found", "md workspace not found.", {
153
- exitCode: EXIT_INPUT,
154
- required: ["a directory with per-episode 正文 md + 人物/场景/道具/发声源 md"],
155
- received: [mdDir],
156
- nextSteps: ["Pass the md workspace dir: scriptctl parse <dir>. Run `scriptctl parse --spec` for the format."],
157
- });
158
- }
159
- let episodesDir = strOf(opts["episodes_dir"]).trim();
160
- if (!episodesDir) {
161
- const sub = path.join(mdDir, "episodes");
162
- episodesDir = exists(sub) && fs.statSync(sub).isDirectory() ? sub : mdDir;
163
- }
164
- const bodyFiles = collectEpisodeMdFiles(episodesDir);
165
- if (bodyFiles.length === 0) {
166
- throw new CliError("PARSE BLOCKED: no episode md found", "no episode md found.", {
167
- exitCode: EXIT_INPUT,
168
- required: ["per-episode body md named like ep_001.md"],
169
- received: [episodesDir],
170
- nextSteps: ["Add per-episode 正文 md (ep_001.md, ep_002.md, ...). Run `scriptctl parse --spec` for the format."],
171
- });
172
- }
173
- // 每类资产各自一份;正文 md 不登资产。汇成一个 bible fragment。
174
- const bible = { actors: [], locations: [], props: [], speakers: [], state_definitions: [] };
175
- const assetDocsFound = [];
176
- for (const spec of ASSET_DOC_SPECS) {
177
- const p = firstExisting(mdDir, spec.names);
178
- if (!p)
179
- continue;
180
- assetDocsFound.push(path.basename(p));
181
- const parsed = parseAssetDoc(readText(p), spec.kind);
182
- for (const key of ["actors", "locations", "props", "speakers", "state_definitions"]) {
183
- bible[key].push(...asList(parsed[key]));
184
- }
185
- }
186
- // 可选全文梗概(梗概.md);去掉开头的 `# 梗概` 标题行。
187
- let globalSynopsis = "";
188
- const synPath = firstExisting(mdDir, SYNOPSIS_DOC_NAMES);
189
- if (synPath)
190
- globalSynopsis = readText(synPath).replace(/^\s*#\s+\S[^\n]*\n/, "").trim();
191
- // 可选整部元信息(元信息.md):worldview / style / title / 主角。
192
- const metaPath = firstExisting(mdDir, META_DOC_NAMES);
193
- const meta = metaPath ? parseMetaDoc(readText(metaPath)) : {};
194
- // 解析每集正文 md(确定性,无 LLM)。
195
- const results = [];
196
- for (const file of bodyFiles) {
197
- try {
198
- results.push(parseMarkdownBatch(readText(file.path), { episode: file.episode, part: 1 }, { fragmentMode: true }));
199
- }
200
- catch (exc) {
201
- const e = exc;
202
- throw new CliError("PARSE BLOCKED: episode md invalid", "episode md invalid.", {
203
- exitCode: EXIT_INPUT,
204
- required: ["per-episode 正文 md following `scriptctl parse --spec`"],
205
- received: [`${path.basename(file.path)}: ${(e?.message ?? "").slice(0, 200)}`],
206
- nextSteps: ["Fix the episode md and re-run parse."],
207
- });
208
- }
209
- }
210
- results.sort((a, b) => Number(a["episode"] ?? 0) - Number(b["episode"] ?? 0));
211
- // 把登记的资产折进第一集 result,描述/状态随之进入装配;名字全局去重,
212
- // bible-first 让登记表(规范)描述优先于正文里隐含的引用。
213
- if (results.length > 0) {
214
- const first = results[0];
215
- for (const key of ["actors", "locations", "props", "speakers", "state_definitions"]) {
216
- first[key] = [...asList(bible[key]), ...asList(first[key])];
217
- }
218
- }
219
- const title = meta.title || strOf(opts["title"]).trim() || path.basename(path.resolve(mdDir));
220
- const merged = mergeEpisodeResultsWithReport(results, title, { bindDefaultStateRefs: true, trackUnresolvedStateRefs: true });
221
- const script = merged.script;
222
- const assetNormalizationPath = path.join(mdDir, "asset_normalization.json");
223
- if (globalSynopsis)
224
- script["synopsis"] = globalSynopsis;
225
- if (meta.worldview) {
226
- if (!WORLDVIEW_VALUES.includes(meta.worldview)) {
227
- throw new CliError("PARSE BLOCKED: worldview 非法", "Invalid worldview in 元信息.md.", {
228
- exitCode: EXIT_INPUT,
229
- required: [`worldview: 取枚举之一 ${WORLDVIEW_VALUES.join(" / ")}`],
230
- received: [`worldview: ${meta.worldview}`],
231
- nextSteps: ["改 元信息.md 的 worldview 为合法枚举值,再重跑 parse。"],
232
- });
233
- }
234
- script["worldview"] = meta.worldview;
235
- script["worldview_raw"] = meta.worldview;
236
- }
237
- if (meta.style)
238
- script["style"] = meta.style;
239
- // role_type 由 元信息.md `主角:` 驱动;两边都 cleanName 后比对,避免注解/空白把主角误判成配角。
240
- if (meta.protagonists && meta.protagonists.length > 0) {
241
- const leads = new Set(meta.protagonists.map((n) => cleanName(n)));
242
- for (const actor of asList(script["actors"])) {
243
- actor["role_type"] = leads.has(cleanName(strOf(actor["actor_name"]))) ? "主角" : "配角";
244
- }
245
- }
246
- // --extract-assets:只有正文、没有资产 md 时,用 LLM 从已装配的 script(资产名来自
247
- // 正文场景引用)补全描述 / 世界观 / 主角,并把结果写回 人物·场景·道具·发声源.md +
248
- // 元信息.md 供人工复核。这一跑只写资产 md,不产 script.json、不发布;复核微调后重跑
249
- // 纯确定性的 `scriptctl parse <dir>` 才装配 script.json。
250
- if (opts["extract_assets"]) {
251
- if (opts["publish"]) {
252
- throw new CliError("PARSE BLOCKED: --extract-assets 不发布", "--extract-assets does not publish.", {
253
- exitCode: EXIT_INPUT,
254
- required: ["先 `parse <dir> --extract-assets` 提资产、复核,再 `parse <dir> --publish` 入库"],
255
- received: ["--extract-assets 与 --publish 同时传入"],
256
- nextSteps: ["去掉 --publish,先生成资产 md;复核后再单独 `parse <dir> --publish`。"],
257
- });
258
- }
259
- // 提资产会写 人物/场景/道具/发声源.md + 元信息.md。守卫这全部 5 份(元信息.md 同样
260
- // 是人工高频手改的文件,必须一并保护),任一已存在且无 --force 就拒绝,免得静默覆盖。
261
- const existingDocs = [...assetDocsFound, ...(metaPath ? [path.basename(metaPath)] : [])];
262
- if (!opts["force"] && existingDocs.length > 0) {
263
- throw new CliError("PARSE BLOCKED: 资产/元信息 md 已存在", "Asset or meta docs already exist.", {
264
- exitCode: EXIT_INPUT,
265
- required: ["一个只有正文、尚无资产/元信息 md 的工作区(提资产会覆盖人工编辑)"],
266
- received: [`已存在: ${existingDocs.join(" / ")}`],
267
- nextSteps: ["要覆盖请加 --force;否则这些 md 已就绪,直接 `scriptctl parse <dir>` 装配 script.json。"],
268
- });
269
- }
270
- const providerName = strOf(opts["provider"]).trim() || DEFAULT_PROVIDER;
271
- const model = strOf(opts["model"]).trim() || DEFAULT_MODEL;
272
- const capabilities = providerCapabilities(providerName);
273
- if (capabilities && !capabilities.extractMetadata) {
274
- throw new CliError("PARSE BLOCKED: provider lacks metadata extraction", "Provider does not support metadata extraction.", {
275
- exitCode: EXIT_INPUT,
276
- required: ["provider.extractMetadata"],
277
- received: [`--provider ${providerName}`],
278
- nextSteps: ["Use --provider anthropic or --provider mock for --extract-assets."],
279
- errorCode: "PROVIDER_METADATA_UNSUPPORTED",
280
- });
281
- }
282
- const provider = makeProvider(providerName, model);
283
- if (!provider.extractMetadata) {
284
- throw new CliError("PARSE BLOCKED: provider lacks metadata extraction", "Provider does not support metadata extraction.", {
285
- exitCode: EXIT_INPUT,
286
- required: ["provider.extractMetadata"],
287
- received: [`--provider ${providerName}`],
288
- nextSteps: ["Use --provider anthropic or --provider mock for --extract-assets."],
289
- errorCode: "PROVIDER_METADATA_UNSUPPORTED",
290
- });
291
- }
292
- // Only enrich (descriptions / worldview / role_type) — deliberately NOT
293
- // curateScriptAssets: that runs the direct-init location-merge pass and would
294
- // reshape asset refs. The whole point of 提资产 is to register EVERY referenced
295
- // asset for human review; let the reviewer drop/merge in the md.
296
- try {
297
- const rawMeta = await provider.extractMetadata("", script);
298
- applyMetadataToScript(script, isDict(rawMeta) ? rawMeta : {});
299
- }
300
- catch (exc) {
301
- if (exc instanceof CliError)
302
- throw exc;
303
- const e = exc;
304
- throw new CliError("PARSE BLOCKED: 提资产失败", "Asset extraction failed.", {
305
- exitCode: EXIT_NEEDS_AGENT,
306
- required: ["可用的 provider(worldview / role_type / 资产描述)"],
307
- received: [`${e?.name ?? "Error"}: ${(e?.message ?? "").slice(0, 160)}`],
308
- nextSteps: ["检查 provider 配置(`scriptctl doctor`)后重跑,或先手写资产 md。"],
309
- });
310
- }
311
- // 人工 元信息.md 高于 LLM 猜测(与 parse 的 bible-first 原则一致):上游 246-277 行已把
312
- // 人工的 worldview/主角 应用进 script,applyMetadataToScript 又用 LLM 值覆盖了,这里把
313
- // 人工显式值重新盖回去——LLM 只填人工没给的空。
314
- if (meta.worldview) {
315
- script["worldview"] = meta.worldview; // 已在 258 行校验过是合法枚举
316
- script["worldview_raw"] = meta.worldview;
317
- }
318
- if (meta.protagonists && meta.protagonists.length > 0) {
319
- const leads = new Set(meta.protagonists.map((n) => cleanName(n)));
320
- for (const actor of asList(script["actors"])) {
321
- actor["role_type"] = leads.has(cleanName(strOf(actor["actor_name"]))) ? "主角" : "配角";
322
- }
323
- }
324
- // LLM 的 worldview 未必在枚举内、也可能缺失:非法/缺失值若写进 元信息.md,会让第二次
325
- // 确定性 parse 在 worldview 校验处硬失败。提资产是「产出可直接重跑的 md」,故就地校正——
326
- // 非法或空就清掉,让人工在 元信息.md 补,而不是毒化重跑。
327
- const finalWorldview = strOf(script["worldview"]).trim();
328
- if (!WORLDVIEW_VALUES.includes(finalWorldview)) {
329
- script["worldview"] = "";
330
- script["worldview_raw"] = "";
331
- }
332
- const written = [];
333
- const docs = [
334
- ["actors", "人物.md"],
335
- ["locations", "场景.md"],
336
- ["props", "道具.md"],
337
- ["speakers", "发声源.md"],
338
- ];
339
- for (const [kind, fname] of docs) {
340
- writeText(path.join(mdDir, fname), serializeAssetDoc(script, kind));
341
- written.push(fname);
342
- }
343
- writeText(path.join(mdDir, "元信息.md"), serializeMetaDoc(script));
344
- written.push("元信息.md");
345
- writeJson(assetNormalizationPath, merged.assetNormalization);
346
- const normalizationSummary = merged.assetNormalization.summary;
347
- return [{
348
- title: "PARSE EXTRACT: 已从正文提取资产 md,复核后重跑 parse 装配",
349
- result: [
350
- `provider: ${providerName}`,
351
- `actors: ${asList(script["actors"]).length}`,
352
- `locations: ${asList(script["locations"]).length}`,
353
- `props: ${asList(script["props"]).length}`,
354
- `speakers: ${asList(script["speakers"]).length}`,
355
- `normalization: merges=${normalizationSummary.asset_merges}, states=${normalizationSummary.location_states_from_names + normalizationSummary.location_states_from_time}, review=${normalizationSummary.review_items}`,
356
- `worldview: ${strOf(script["worldview"]) || "(unset)"}`,
357
- `written: ${written.join(" / ")}`,
358
- ],
359
- artifacts: [...written.map((f) => path.join(mdDir, f)), assetNormalizationPath],
360
- next: [
361
- "复核 / 微调 人物·场景·道具·发声源.md 与 元信息.md(补全状态外观、确认主角与描述)。",
362
- "再跑 `scriptctl parse <dir>`(纯确定性)装配 script.json,校验通过后 `--publish` 入库。",
363
- ],
364
- }, EXIT_OK];
365
- }
366
- // 产物落在 parse 自己的位置(不写 directDir / run_state / source.txt)。
367
- const scriptPath = path.join(mdDir, "script.json");
368
- writeJson(assetNormalizationPath, merged.assetNormalization);
369
- writeJson(scriptPath, script);
370
- const validation = validateScript(workspace, null, { requireSource: false, scriptData: script, persist: false });
371
- const passed = Boolean(validation["passed"]);
372
- const stats = validation["stats"] ?? {};
373
- const blockingOrError = Boolean(validation["has_blocking"]) ||
374
- asList(validation["issues"]).some((it) => isDict(it) && (it["severity"] === "blocking" || it["severity"] === "error"));
375
- // --publish:md → 校验 → 直接入库。校验不过就报问题、不发布,让 agent 改 md 重跑。
376
- if (opts["publish"]) {
377
- if (blockingOrError) {
378
- return [{
379
- title: "PARSE PUBLISH BLOCKED: 校验未过,改 md 后重跑",
380
- result: [`asset docs: ${assetDocsFound.join(" / ") || "(none)"}`, "validation: needs repair"],
381
- artifacts: [scriptPath, assetNormalizationPath],
382
- issues: summarizeIssues(asList(validation["issues"])),
383
- next: ["按 issue 直接改对应的 ep_*.md / 人物·场景·道具·发声源.md / 元信息.md,再重跑 `scriptctl parse <dir> --publish`。"],
384
- }, EXIT_NEEDS_AGENT];
385
- }
386
- const client = makeOutputStore(opts);
387
- const baseRevision = await currentRevisionOrZero(client);
388
- const scriptHash = sha256Text(JSON.stringify(sortDeep(script)));
389
- const requestId = strOf(opts["request_id"]).trim() || `scriptctl-parse:${scriptHash}`;
390
- let replaceRes;
391
- try {
392
- replaceRes = await client.replaceScript({ requestId, baseRevision, script, source: "ctl" });
393
- }
394
- catch (exc) {
395
- if (exc instanceof ScriptOutputApiError) {
396
- const conflict = /版本冲突|revision/i.test(exc.message);
397
- throw new CliError("PARSE PUBLISH BLOCKED: 入库写入失败", conflict ? "Script has been updated by another revision; reload and retry." : exc.message, {
398
- exitCode: EXIT_INPUT,
399
- required: ["可写入的 ScriptOutputStore"],
400
- received: [exc.message],
401
- nextSteps: conflict ? ["剧本已被其他写入更新,重跑 parse --publish。"] : ["检查输出配置后重试。"],
402
- errorCode: conflict ? "SCRIPT_REVISION_CONFLICT" : "SCRIPT_API_WRITE_FAILED",
403
- });
404
- }
405
- throw exc;
406
- }
407
- return [{
408
- title: "PARSE PUBLISHED: 剧本已入库",
409
- result: [`${stats["episodes"] ?? results.length} episodes / ${stats["scenes"] ?? 0} scenes / ${stats["actions"] ?? 0} actions; rev ${baseRevision} → ${replaceRes["revision"]}; idempotent ${replaceRes["idempotent"] ?? false}`],
410
- artifacts: [scriptPath],
411
- }, EXIT_OK];
412
- }
413
- const normalizationSummary = merged.assetNormalization.summary;
414
- const norm = normalizationSummary.asset_merges || normalizationSummary.location_states_from_names || normalizationSummary.location_states_from_time || normalizationSummary.review_items;
415
- return [{
416
- title: passed ? "PARSE COMPLETE: script.json 已生成" : "PARSE NEEDS AGENT: 校验有问题",
417
- result: [
418
- `${stats["episodes"] ?? results.length} episodes / ${stats["scenes"] ?? 0} scenes / ${stats["actions"] ?? 0} actions; validation ${passed ? "passed" : "needs repair"}`,
419
- `assets: ${assetDocsFound.join(" / ") || "(none)"}; worldview ${meta.worldview ? "set" : "unset"}; style ${meta.style ? "set" : "unset"}; synopsis ${globalSynopsis ? "yes" : "no"}`,
420
- ...(norm ? [`normalization: merges=${normalizationSummary.asset_merges}, states=${normalizationSummary.location_states_from_names + normalizationSummary.location_states_from_time}, review=${normalizationSummary.review_items}`] : []),
421
- ],
422
- artifacts: passed ? [scriptPath] : [scriptPath, assetNormalizationPath],
423
- issues: summarizeIssues(asList(validation["issues"])),
424
- next: passed
425
- ? ["加 `--publish` 直接入库。"]
426
- : ["按 issue 直接改对应的 md(ep_*.md / 资产 md / 元信息.md),再重跑 parse。"],
427
- }, passed ? EXIT_OK : EXIT_NEEDS_AGENT];
428
- }
429
- //# sourceMappingURL=parse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/usecases/parse.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import { applySingleScriptOp, } from "./lib.js";
2
- export async function commandAddSpeaker(opts) {
3
- return applySingleScriptOp(opts, {
4
- op: "speaker.add",
5
- kind: opts["kind"],
6
- name: opts["name"],
7
- source_id: opts["source_id"],
8
- voice_desc: opts["voice_desc"],
9
- speaker_id: opts["speaker_id"],
10
- });
11
- }
12
- // ----- create (blank scaffold) ----------------------------------------------
13
- // Create an empty schema-v2 script as the starting point for building a script
14
- // bottom-up with the atomic add/insert verbs (instead of direct/parse/write
15
- // assembly). Targets the same three destinations as the edit verbs:
16
- // --script-path <file> local JSON file
17
- // --draft the direct intermediate (script.initial.json)
18
- // --project-group-no DB-backed script-output (first write at revision 0)
19
- // Refuses to clobber an existing target (local: pass --force to overwrite; DB:
20
- // edit the existing script instead). Validates in incomplete-tolerant mode, so
21
- // the blank scaffold reports passed.
22
- //# sourceMappingURL=add-speaker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-speaker.js","sourceRoot":"","sources":["../../../src/usecases/script/add-speaker.ts"],"names":[],"mappings":"AAkEA,OAAO,EAC+I,mBAAmB,GACxK,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAU;IAChD,OAAO,mBAAmB,CAAC,IAAI,EAAE;QAC/B,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;QAC5B,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;QAC9B,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAE/E,+EAA+E;AAC/E,4EAA4E;AAC5E,oEAAoE;AACpE,0CAA0C;AAC1C,wEAAwE;AACxE,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,qCAAqC"}
@@ -1,3 +0,0 @@
1
- import { type Report } from "../../common.js";
2
- import { type Dict } from "../../domain/script/shared.js";
3
- export declare function commandExport(opts: Dict): Promise<[Report, number]>;
@@ -1,111 +0,0 @@
1
- import * as path from "node:path";
2
- import { CliError, EXIT_INPUT, EXIT_NEEDS_AGENT, EXIT_OK, EXIT_USAGE, directDir, exists, readJson, sha256Text, } from "../../common.js";
3
- import { validateScript } from "../../domain/script/validate.js";
4
- import { ScriptOutputApiError, } from "../../infra/script-output-store.js";
5
- import { readRunState, summarizeIssues, updateRunState, } from "../direct.js";
6
- import { sortDeep } from "../../domain/direct-core.js";
7
- import { asList, isDict, strOf, } from "../../domain/script/shared.js";
8
- import { ScriptEditSession, scriptOutputClient, apiErrorToCli, currentRevisionOrZero, syncValidationResult, } from "./session.js";
9
- export async function commandExport(opts) {
10
- const workspace = strOf(opts["workspace_path"] || "workspace");
11
- const force = Boolean(opts["force"]);
12
- const scriptPath = path.join(directDir(workspace), "script.initial.json");
13
- if (!exists(scriptPath)) {
14
- throw new CliError("EXPORT BLOCKED: script.initial.json not found", "script.initial.json not found.", {
15
- exitCode: EXIT_INPUT,
16
- required: ["workspace/draft/scriptctl/direct/script.initial.json"],
17
- received: [scriptPath],
18
- nextSteps: ["Run scriptctl direct init first."],
19
- });
20
- }
21
- const state = readRunState(workspace);
22
- const provider = strOf(state["provider"]);
23
- if (provider === "mock" && process.env.SCRIPTCTL_ALLOW_MOCK_EXPORT !== "1") {
24
- const report = {
25
- title: "EXPORT BLOCKED: Mock provider result",
26
- result: ["script.initial.json was produced by --provider mock and was not exported."],
27
- artifacts: [path.join(directDir(workspace), "run_state.json")],
28
- next: ["Rerun init with --provider anthropic for deliverable conversion."],
29
- };
30
- return [report, EXIT_NEEDS_AGENT];
31
- }
32
- const validation = validateScript(workspace, scriptPath);
33
- const blockingOrError = Boolean(validation["has_blocking"]) ||
34
- asList(validation["issues"]).some((it) => isDict(it) && (it["severity"] === "blocking" || it["severity"] === "error"));
35
- if (!validation["passed"] && (!force || blockingOrError)) {
36
- const title = force
37
- ? "EXPORT BLOCKED: Validation errors require repair"
38
- : "EXPORT BLOCKED: Validation needs agent repair";
39
- const report = {
40
- title,
41
- result: ["script.initial.json was not exported."],
42
- artifacts: [path.join(directDir(workspace), "validation.json")],
43
- issues: summarizeIssues(asList(validation["issues"])),
44
- next: ["Inspect issues and apply structured patches, then validate/export."],
45
- };
46
- return [report, EXIT_NEEDS_AGENT];
47
- }
48
- let script;
49
- try {
50
- script = readJson(scriptPath);
51
- }
52
- catch (exc) {
53
- throw new CliError("EXPORT BLOCKED: script.initial.json invalid", "script.initial.json invalid.", {
54
- exitCode: EXIT_INPUT,
55
- required: ["valid script.initial.json"],
56
- received: [`${scriptPath}: ${exc.message}`],
57
- nextSteps: ["Fix script.initial.json or rerun direct init."],
58
- errorCode: "SCRIPT_JSON_INVALID",
59
- });
60
- }
61
- if (!isDict(script)) {
62
- throw new CliError("EXPORT BLOCKED: script root invalid", "script root invalid.", {
63
- exitCode: EXIT_USAGE,
64
- required: ["script root object"],
65
- received: [Array.isArray(script) ? "array" : typeof script],
66
- nextSteps: ["Use a valid script document object."],
67
- errorCode: "SCRIPT_ROOT_INVALID",
68
- });
69
- }
70
- const client = scriptOutputClient(opts);
71
- const baseRevision = await currentRevisionOrZero(client);
72
- // Sorted-keys serialization mirrors Python json.dumps(sort_keys=True, separators=(",",":"))
73
- const sortedScript = sortDeep(script);
74
- const scriptHash = sha256Text(JSON.stringify(sortedScript));
75
- const requestId = strOf(opts["request_id"]).trim() || `scriptctl-direct-export:${scriptHash}`;
76
- let replaceRes;
77
- try {
78
- replaceRes = await client.replaceScript({
79
- requestId,
80
- baseRevision,
81
- script,
82
- source: "ctl",
83
- });
84
- }
85
- catch (exc) {
86
- if (exc instanceof ScriptOutputApiError) {
87
- throw apiErrorToCli("SCRIPT API BLOCKED: Export write failed", exc);
88
- }
89
- throw exc;
90
- }
91
- const revision = Number(replaceRes["revision"] ?? 0);
92
- const remoteSession = new ScriptEditSession({
93
- workspace,
94
- script,
95
- client,
96
- projectGroupNo: client.projectGroupNo,
97
- revision,
98
- });
99
- await syncValidationResult(remoteSession, validation, revision);
100
- const outputLabel = remoteSession.artifactLabel;
101
- updateRunState(workspace, { status: "exported", output_path: outputLabel });
102
- const report = {
103
- title: "EXPORT COMPLETE: Final script stored in DB",
104
- result: [`validation ${validation["passed"] ? "passed" : "forced"}; rev ${baseRevision} → ${revision}; idempotent ${String(Boolean(replaceRes["idempotent"])).toLowerCase()}`],
105
- artifacts: [outputLabel],
106
- };
107
- return [report, EXIT_OK];
108
- }
109
- // sortDeep is the canonical helper in domain/direct-core; re-exported here for
110
- // back-compat with existing importers of `usecases/script`.
111
- //# sourceMappingURL=export.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/usecases/script/export.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type Report } from "../../common.js";
2
- import { type Dict } from "../../domain/script/shared.js";
3
- export declare function commandOverlap(opts: Dict): Promise<[Report, number]>;