@lingjingai/scriptctl 0.35.0 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -5
- package/changes/0.36.0.md +22 -0
- package/dist/bin.js +0 -0
- package/dist/cli.d.ts +2 -1
- package/dist/cli.js +52 -128
- package/dist/cli.js.map +1 -1
- package/dist/common.d.ts +0 -16
- package/dist/common.js +2 -342
- package/dist/common.js.map +1 -1
- package/dist/domain/ingest/apply-plan.d.ts +23 -0
- package/dist/domain/ingest/apply-plan.js +210 -0
- package/dist/domain/ingest/apply-plan.js.map +1 -0
- package/dist/domain/ingest/assembler.d.ts +57 -0
- package/dist/domain/ingest/assembler.js +181 -0
- package/dist/domain/ingest/assembler.js.map +1 -0
- package/dist/domain/ingest/chunker.d.ts +9 -0
- package/dist/domain/ingest/chunker.js +38 -0
- package/dist/domain/ingest/chunker.js.map +1 -0
- package/dist/domain/ingest/evidence.d.ts +5 -0
- package/dist/domain/ingest/evidence.js +66 -0
- package/dist/domain/ingest/evidence.js.map +1 -0
- package/dist/domain/ingest/govern.d.ts +3 -0
- package/dist/domain/ingest/govern.js +127 -0
- package/dist/domain/ingest/govern.js.map +1 -0
- package/dist/domain/ingest/jsonl-parser.d.ts +6 -0
- package/dist/domain/ingest/jsonl-parser.js +187 -0
- package/dist/domain/ingest/jsonl-parser.js.map +1 -0
- package/dist/domain/ingest/markdown-parser.d.ts +6 -0
- package/dist/domain/ingest/markdown-parser.js +186 -0
- package/dist/domain/ingest/markdown-parser.js.map +1 -0
- package/dist/domain/ingest/records.d.ts +71 -0
- package/dist/domain/ingest/records.js +9 -0
- package/dist/domain/ingest/records.js.map +1 -0
- package/dist/domain/ingest/renumber.d.ts +14 -0
- package/dist/domain/ingest/renumber.js +130 -0
- package/dist/domain/ingest/renumber.js.map +1 -0
- package/dist/domain/ingest/script-v3.d.ts +94 -0
- package/dist/domain/ingest/script-v3.js +7 -0
- package/dist/domain/ingest/script-v3.js.map +1 -0
- package/dist/domain/ingest/state-reconcile.d.ts +11 -0
- package/dist/domain/ingest/state-reconcile.js +90 -0
- package/dist/domain/ingest/state-reconcile.js.map +1 -0
- package/dist/domain/ingest/validation.d.ts +11 -0
- package/dist/domain/ingest/validation.js +168 -0
- package/dist/domain/ingest/validation.js.map +1 -0
- package/dist/domain/ingest/video-aggregate.d.ts +23 -0
- package/dist/domain/ingest/video-aggregate.js +89 -0
- package/dist/domain/ingest/video-aggregate.js.map +1 -0
- package/dist/domain/ingest/video-apply.d.ts +37 -0
- package/dist/domain/ingest/video-apply.js +236 -0
- package/dist/domain/ingest/video-apply.js.map +1 -0
- package/dist/domain/ingest/video-md-parser.d.ts +2 -0
- package/dist/domain/ingest/video-md-parser.js +233 -0
- package/dist/domain/ingest/video-md-parser.js.map +1 -0
- package/dist/domain/ingest/video-records.d.ts +56 -0
- package/dist/domain/ingest/video-records.js +9 -0
- package/dist/domain/ingest/video-records.js.map +1 -0
- package/dist/domain/loom/index.d.ts +2 -1
- package/dist/domain/loom/index.js +12 -10
- package/dist/domain/loom/index.js.map +1 -1
- package/dist/domain/loom/types.d.ts +3 -2
- package/dist/domain/script/lookups.d.ts +3 -2
- package/dist/domain/script/lookups.js +25 -8
- package/dist/domain/script/lookups.js.map +1 -1
- package/dist/domain/script/patch/apply.js +2 -2
- package/dist/domain/script/patch/apply.js.map +1 -1
- package/dist/domain/script/patch/helpers.d.ts +3 -7
- package/dist/domain/script/patch/helpers.js +23 -96
- package/dist/domain/script/patch/helpers.js.map +1 -1
- package/dist/domain/script/patch/ops-action.d.ts +0 -2
- package/dist/domain/script/patch/ops-action.js +34 -100
- package/dist/domain/script/patch/ops-action.js.map +1 -1
- package/dist/domain/script/patch/ops-asset.d.ts +1 -0
- package/dist/domain/script/patch/ops-asset.js +102 -155
- package/dist/domain/script/patch/ops-asset.js.map +1 -1
- package/dist/domain/script/patch/ops-dialogue.d.ts +1 -4
- package/dist/domain/script/patch/ops-dialogue.js +43 -220
- package/dist/domain/script/patch/ops-dialogue.js.map +1 -1
- package/dist/domain/script/patch/ops-extend.js +8 -2
- package/dist/domain/script/patch/ops-extend.js.map +1 -1
- package/dist/domain/script/patch/ops-meta.js.map +1 -1
- package/dist/domain/script/patch/ops-scene.js +26 -39
- package/dist/domain/script/patch/ops-scene.js.map +1 -1
- package/dist/domain/script/patch/ops-state.d.ts +3 -3
- package/dist/domain/script/patch/ops-state.js +33 -49
- package/dist/domain/script/patch/ops-state.js.map +1 -1
- package/dist/domain/script/patch/registry.js +9 -13
- package/dist/domain/script/patch/registry.js.map +1 -1
- package/dist/domain/script/refs.js +23 -111
- package/dist/domain/script/refs.js.map +1 -1
- package/dist/domain/script/scene-refs.d.ts +3 -0
- package/dist/domain/script/scene-refs.js +35 -0
- package/dist/domain/script/scene-refs.js.map +1 -0
- package/dist/domain/script/schema.js +17 -21
- package/dist/domain/script/schema.js.map +1 -1
- package/dist/domain/script/text-util.d.ts +7 -0
- package/dist/domain/script/text-util.js +91 -0
- package/dist/domain/script/text-util.js.map +1 -0
- package/dist/help-text.js +117 -410
- package/dist/help-text.js.map +1 -1
- package/dist/infra/converters.js +1 -1
- package/dist/infra/converters.js.map +1 -1
- package/dist/infra/episode-title.d.ts +4 -0
- package/dist/infra/episode-title.js +129 -0
- package/dist/infra/episode-title.js.map +1 -0
- package/dist/infra/ingest/review-renderer.d.ts +1 -0
- package/dist/infra/ingest/review-renderer.js +431 -0
- package/dist/infra/ingest/review-renderer.js.map +1 -0
- package/dist/infra/ingest/source-resolver.d.ts +21 -0
- package/dist/infra/ingest/source-resolver.js +51 -0
- package/dist/infra/ingest/source-resolver.js.map +1 -0
- package/dist/infra/ingest/text-reader.d.ts +3 -0
- package/dist/infra/ingest/text-reader.js +27 -0
- package/dist/infra/ingest/text-reader.js.map +1 -0
- package/dist/infra/ingest/video-discovery.d.ts +8 -0
- package/dist/infra/ingest/video-discovery.js +60 -0
- package/dist/infra/ingest/video-discovery.js.map +1 -0
- package/dist/infra/ingest/workspace-store.d.ts +18 -0
- package/dist/infra/ingest/workspace-store.js +70 -0
- package/dist/infra/ingest/workspace-store.js.map +1 -0
- package/dist/infra/llm/anthropic-model.d.ts +11 -0
- package/dist/infra/llm/anthropic-model.js +109 -0
- package/dist/infra/llm/anthropic-model.js.map +1 -0
- package/dist/infra/llm/gemini-upload.d.ts +9 -0
- package/dist/infra/llm/gemini-upload.js +94 -0
- package/dist/infra/llm/gemini-upload.js.map +1 -0
- package/dist/infra/llm/gemini-video-model.d.ts +47 -0
- package/dist/infra/llm/gemini-video-model.js +167 -0
- package/dist/infra/llm/gemini-video-model.js.map +1 -0
- package/dist/infra/llm/openai-compatible-model.d.ts +13 -0
- package/dist/infra/llm/openai-compatible-model.js +143 -0
- package/dist/infra/llm/openai-compatible-model.js.map +1 -0
- package/dist/infra/llm/proxy.d.ts +1 -0
- package/dist/infra/llm/proxy.js +30 -0
- package/dist/infra/llm/proxy.js.map +1 -0
- package/dist/infra/llm/retry.d.ts +5 -0
- package/dist/infra/llm/retry.js +20 -0
- package/dist/infra/llm/retry.js.map +1 -0
- package/dist/llm/composition.d.ts +5 -0
- package/dist/llm/composition.js +5 -0
- package/dist/llm/composition.js.map +1 -0
- package/dist/llm/config.d.ts +26 -0
- package/dist/llm/config.js +201 -0
- package/dist/llm/config.js.map +1 -0
- package/dist/llm/registry.d.ts +44 -0
- package/dist/llm/registry.js +48 -0
- package/dist/llm/registry.js.map +1 -0
- package/dist/llm/router.d.ts +23 -0
- package/dist/llm/router.js +0 -0
- package/dist/llm/router.js.map +1 -0
- package/dist/llm/tasks/ingest/asset-curate.d.ts +13 -0
- package/dist/llm/tasks/ingest/asset-curate.js +45 -0
- package/dist/llm/tasks/ingest/asset-curate.js.map +1 -0
- package/dist/llm/tasks/ingest/asset-extract.d.ts +12 -0
- package/dist/llm/tasks/ingest/asset-extract.js +51 -0
- package/dist/llm/tasks/ingest/asset-extract.js.map +1 -0
- package/dist/llm/tasks/ingest/asset-govern.d.ts +22 -0
- package/dist/llm/tasks/ingest/asset-govern.js +143 -0
- package/dist/llm/tasks/ingest/asset-govern.js.map +1 -0
- package/dist/llm/tasks/ingest/mention-resolve.d.ts +9 -0
- package/dist/llm/tasks/ingest/mention-resolve.js +39 -0
- package/dist/llm/tasks/ingest/mention-resolve.js.map +1 -0
- package/dist/llm/tasks/ingest/plot-speaker.d.ts +11 -0
- package/dist/llm/tasks/ingest/plot-speaker.js +72 -0
- package/dist/llm/tasks/ingest/plot-speaker.js.map +1 -0
- package/dist/llm/tasks/ingest/roster-merge.d.ts +46 -0
- package/dist/llm/tasks/ingest/roster-merge.js +235 -0
- package/dist/llm/tasks/ingest/roster-merge.js.map +1 -0
- package/dist/llm/tasks/ingest/state-merge.d.ts +10 -0
- package/dist/llm/tasks/ingest/state-merge.js +84 -0
- package/dist/llm/tasks/ingest/state-merge.js.map +1 -0
- package/dist/llm/tasks/ingest/state-reconcile.d.ts +8 -0
- package/dist/llm/tasks/ingest/state-reconcile.js +44 -0
- package/dist/llm/tasks/ingest/state-reconcile.js.map +1 -0
- package/dist/llm/tasks/ingest/text-normalize.d.ts +10 -0
- package/dist/llm/tasks/ingest/text-normalize.js +89 -0
- package/dist/llm/tasks/ingest/text-normalize.js.map +1 -0
- package/dist/llm/tasks/ingest/video-correct.d.ts +30 -0
- package/dist/llm/tasks/ingest/video-correct.js +144 -0
- package/dist/llm/tasks/ingest/video-correct.js.map +1 -0
- package/dist/llm/tasks/ingest/video-transcribe.d.ts +4 -0
- package/dist/llm/tasks/ingest/video-transcribe.js +105 -0
- package/dist/llm/tasks/ingest/video-transcribe.js.map +1 -0
- package/dist/llm/tasks/schemas.d.ts +5 -0
- package/dist/llm/tasks/schemas.js +107 -0
- package/dist/llm/tasks/schemas.js.map +1 -0
- package/dist/llm/types.d.ts +97 -0
- package/dist/llm/types.js +13 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/usecases/doctor.d.ts +1 -1
- package/dist/usecases/doctor.js +36 -9
- package/dist/usecases/doctor.js.map +1 -1
- package/dist/usecases/ingest/command.d.ts +5 -0
- package/dist/usecases/ingest/command.js +57 -0
- package/dist/usecases/ingest/command.js.map +1 -0
- package/dist/usecases/ingest/fanout.d.ts +10 -0
- package/dist/usecases/ingest/fanout.js +23 -0
- package/dist/usecases/ingest/fanout.js.map +1 -0
- package/dist/usecases/ingest/pass4-mention-resolve.d.ts +11 -0
- package/dist/usecases/ingest/pass4-mention-resolve.js +52 -0
- package/dist/usecases/ingest/pass4-mention-resolve.js.map +1 -0
- package/dist/usecases/ingest/pass5-extract.d.ts +7 -0
- package/dist/usecases/ingest/pass5-extract.js +50 -0
- package/dist/usecases/ingest/pass5-extract.js.map +1 -0
- package/dist/usecases/ingest/pass5-govern.d.ts +13 -0
- package/dist/usecases/ingest/pass5-govern.js +155 -0
- package/dist/usecases/ingest/pass5-govern.js.map +1 -0
- package/dist/usecases/ingest/pipeline.d.ts +28 -0
- package/dist/usecases/ingest/pipeline.js +144 -0
- package/dist/usecases/ingest/pipeline.js.map +1 -0
- package/dist/usecases/ingest/publish-command.d.ts +4 -0
- package/dist/usecases/ingest/publish-command.js +77 -0
- package/dist/usecases/ingest/publish-command.js.map +1 -0
- package/dist/usecases/ingest/status.d.ts +39 -0
- package/dist/usecases/ingest/status.js +155 -0
- package/dist/usecases/ingest/status.js.map +1 -0
- package/dist/usecases/ingest/video-pass3.d.ts +26 -0
- package/dist/usecases/ingest/video-pass3.js +0 -0
- package/dist/usecases/ingest/video-pass3.js.map +1 -0
- package/dist/usecases/ingest/video-pipeline.d.ts +32 -0
- package/dist/usecases/ingest/video-pipeline.js +202 -0
- package/dist/usecases/ingest/video-pipeline.js.map +1 -0
- package/dist/usecases/ingest/view-command.d.ts +4 -0
- package/dist/usecases/ingest/view-command.js +51 -0
- package/dist/usecases/ingest/view-command.js.map +1 -0
- package/dist/usecases/script/actions.js +2 -2
- package/dist/usecases/script/actions.js.map +1 -1
- package/dist/usecases/script/actor.js.map +1 -1
- package/dist/usecases/script/actors.js.map +1 -1
- package/dist/usecases/script/add-actor.js.map +1 -1
- package/dist/usecases/script/add-episode.js.map +1 -1
- package/dist/usecases/script/add-location.js.map +1 -1
- package/dist/usecases/script/add-prop.js.map +1 -1
- package/dist/usecases/script/alias.js.map +1 -1
- package/dist/usecases/script/assets.js.map +1 -1
- package/dist/usecases/script/context.js.map +1 -1
- package/dist/usecases/script/create.js +3 -6
- package/dist/usecases/script/create.js.map +1 -1
- package/dist/usecases/script/delete.js.map +1 -1
- package/dist/usecases/script/describe.js.map +1 -1
- package/dist/usecases/script/dialogue.js +6 -13
- package/dist/usecases/script/dialogue.js.map +1 -1
- package/dist/usecases/script/do.js +1 -1
- package/dist/usecases/script/do.js.map +1 -1
- package/dist/usecases/script/episodes.js.map +1 -1
- package/dist/usecases/script/{add-speaker.d.ts → importance.d.ts} +1 -1
- package/dist/usecases/script/importance.js +17 -0
- package/dist/usecases/script/importance.js.map +1 -0
- package/dist/usecases/script/insert.js.map +1 -1
- package/dist/usecases/script/issues.js.map +1 -1
- package/dist/usecases/script/lib.d.ts +8 -6
- package/dist/usecases/script/lib.js +81 -97
- package/dist/usecases/script/lib.js.map +1 -1
- package/dist/usecases/script/locations.js.map +1 -1
- package/dist/usecases/script/merge.js.map +1 -1
- package/dist/usecases/script/move.js.map +1 -1
- package/dist/usecases/script/props.js.map +1 -1
- package/dist/usecases/script/refs.js.map +1 -1
- package/dist/usecases/script/rename.js.map +1 -1
- package/dist/usecases/script/replace.js.map +1 -1
- package/dist/usecases/script/role.js.map +1 -1
- package/dist/usecases/script/scenes.js +8 -15
- package/dist/usecases/script/scenes.js.map +1 -1
- package/dist/usecases/script/script-patch.js +1 -1
- package/dist/usecases/script/script-patch.js.map +1 -1
- package/dist/usecases/script/script-validate.js +1 -1
- package/dist/usecases/script/script-validate.js.map +1 -1
- package/dist/usecases/script/session.d.ts +4 -4
- package/dist/usecases/script/session.js +57 -78
- package/dist/usecases/script/session.js.map +1 -1
- package/dist/usecases/script/split.js.map +1 -1
- package/dist/usecases/script/state-add.js.map +1 -1
- package/dist/usecases/script/state-delete.js.map +1 -1
- package/dist/usecases/script/state-rename.js.map +1 -1
- package/dist/usecases/script/summary.js.map +1 -1
- package/dist/usecases/script/synopsis-generate.d.ts +4 -5
- package/dist/usecases/script/synopsis-generate.js +30 -46
- package/dist/usecases/script/synopsis-generate.js.map +1 -1
- package/dist/usecases/script/transition.js.map +1 -1
- package/dist/usecases/script/type.js.map +1 -1
- package/dist/usecases/script/worldview.js.map +1 -1
- package/package.json +22 -17
- package/skills/scriptctl/SKILL.md +140 -120
- package/skills/scriptctl/references/atomic-write-workflow.md +12 -9
- package/skills/scriptctl/references/ingest-workflow.md +85 -0
- package/skills/scriptctl/references/state-reference-repair.md +26 -39
- package/dist/domain/direct/runner.d.ts +0 -25
- package/dist/domain/direct/runner.js +0 -88
- package/dist/domain/direct/runner.js.map +0 -1
- package/dist/domain/direct/stage.d.ts +0 -108
- package/dist/domain/direct/stage.js +0 -134
- package/dist/domain/direct/stage.js.map +0 -1
- package/dist/domain/direct/stages/asset-curation.d.ts +0 -2
- package/dist/domain/direct/stages/asset-curation.js +0 -10
- package/dist/domain/direct/stages/asset-curation.js.map +0 -1
- package/dist/domain/direct/stages/batch-extract.d.ts +0 -2
- package/dist/domain/direct/stages/batch-extract.js +0 -12
- package/dist/domain/direct/stages/batch-extract.js.map +0 -1
- package/dist/domain/direct/stages/batch-plan.d.ts +0 -2
- package/dist/domain/direct/stages/batch-plan.js +0 -9
- package/dist/domain/direct/stages/batch-plan.js.map +0 -1
- package/dist/domain/direct/stages/episode-merge.d.ts +0 -2
- package/dist/domain/direct/stages/episode-merge.js +0 -11
- package/dist/domain/direct/stages/episode-merge.js.map +0 -1
- package/dist/domain/direct/stages/episode-plan.d.ts +0 -2
- package/dist/domain/direct/stages/episode-plan.js +0 -9
- package/dist/domain/direct/stages/episode-plan.js.map +0 -1
- package/dist/domain/direct/stages/episode-synopsis.d.ts +0 -2
- package/dist/domain/direct/stages/episode-synopsis.js +0 -12
- package/dist/domain/direct/stages/episode-synopsis.js.map +0 -1
- package/dist/domain/direct/stages/episode-titles.d.ts +0 -2
- package/dist/domain/direct/stages/episode-titles.js +0 -12
- package/dist/domain/direct/stages/episode-titles.js.map +0 -1
- package/dist/domain/direct/stages/index.d.ts +0 -19
- package/dist/domain/direct/stages/index.js +0 -41
- package/dist/domain/direct/stages/index.js.map +0 -1
- package/dist/domain/direct/stages/metadata.d.ts +0 -2
- package/dist/domain/direct/stages/metadata.js +0 -11
- package/dist/domain/direct/stages/metadata.js.map +0 -1
- package/dist/domain/direct/stages/script-merge.d.ts +0 -2
- package/dist/domain/direct/stages/script-merge.js +0 -15
- package/dist/domain/direct/stages/script-merge.js.map +0 -1
- package/dist/domain/direct/stages/script-synopsis.d.ts +0 -2
- package/dist/domain/direct/stages/script-synopsis.js +0 -12
- package/dist/domain/direct/stages/script-synopsis.js.map +0 -1
- package/dist/domain/direct/stages/source-prepare.d.ts +0 -2
- package/dist/domain/direct/stages/source-prepare.js +0 -9
- package/dist/domain/direct/stages/source-prepare.js.map +0 -1
- package/dist/domain/direct/stages/state-binding.d.ts +0 -2
- package/dist/domain/direct/stages/state-binding.js +0 -9
- package/dist/domain/direct/stages/state-binding.js.map +0 -1
- package/dist/domain/direct/stages/state-curation.d.ts +0 -2
- package/dist/domain/direct/stages/state-curation.js +0 -10
- package/dist/domain/direct/stages/state-curation.js.map +0 -1
- package/dist/domain/direct/stages/validate.d.ts +0 -2
- package/dist/domain/direct/stages/validate.js +0 -10
- package/dist/domain/direct/stages/validate.js.map +0 -1
- package/dist/domain/direct-core.d.ts +0 -313
- package/dist/domain/direct-core.js +0 -8514
- package/dist/domain/direct-core.js.map +0 -1
- package/dist/domain/script/validate.d.ts +0 -22
- package/dist/domain/script/validate.js +0 -997
- package/dist/domain/script/validate.js.map +0 -1
- package/dist/infra/providers.d.ts +0 -97
- package/dist/infra/providers.js +0 -1396
- package/dist/infra/providers.js.map +0 -1
- package/dist/usecases/direct.d.ts +0 -27
- package/dist/usecases/direct.js +0 -4172
- package/dist/usecases/direct.js.map +0 -1
- package/dist/usecases/parse.d.ts +0 -15
- package/dist/usecases/parse.js +0 -429
- package/dist/usecases/parse.js.map +0 -1
- package/dist/usecases/script/add-speaker.js +0 -22
- package/dist/usecases/script/add-speaker.js.map +0 -1
- package/dist/usecases/script/export.d.ts +0 -3
- package/dist/usecases/script/export.js +0 -111
- package/dist/usecases/script/export.js.map +0 -1
- package/dist/usecases/script/overlap.d.ts +0 -3
- package/dist/usecases/script/overlap.js +0 -21
- package/dist/usecases/script/overlap.js.map +0 -1
- package/dist/usecases/script/speakers.d.ts +0 -3
- package/dist/usecases/script/speakers.js +0 -28
- package/dist/usecases/script/speakers.js.map +0 -1
- package/dist/usecases/script/state-change.d.ts +0 -3
- package/dist/usecases/script/state-change.js +0 -24
- package/dist/usecases/script/state-change.js.map +0 -1
- package/skills/scriptctl/references/direct-workflow.md +0 -72
|
@@ -1,72 +1,59 @@
|
|
|
1
|
-
# State
|
|
1
|
+
# State 引用修复核验(v3)
|
|
2
2
|
|
|
3
|
-
适用:合并 state、删除 state,或修 `
|
|
3
|
+
适用:合并 state、删除 state,或修 `STATE_NOT_MATERIALIZED` / 状态引用错连。重点不是只改 `states[]`,而是确认**引用该状态的场景 cast 引用**都被修好。
|
|
4
|
+
|
|
5
|
+
> v3 里造型(state)只挂在**场景级 cast 引用**上(`scene.actors[]` / `props[]` / `location` 的 `state_id`),**没有** action 级 `state_changes`。所以引用只有一层,比 v2 简单。
|
|
4
6
|
|
|
5
7
|
## 操作语义
|
|
6
8
|
|
|
7
|
-
scriptctl 没有单独的 `state-merge` 命令;合并 state
|
|
9
|
+
scriptctl 没有单独的 `state-merge` 命令;合并 state = "删旧 state 并替换引用":
|
|
8
10
|
|
|
9
11
|
```bash
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
删除且不保留引用:
|
|
12
|
+
# 合并:把 st_old 的引用全指向 st_keep,再删 st_old(replacement 必须是同一资产已存在的 state_id)
|
|
13
|
+
scriptctl state-delete actor:act_001/st_old --strategy replace --replacement st_keep
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
scriptctl delete actor:act_001/st_old --strategy remove
|
|
15
|
+
# 真删除:删 st_old,引用它的场景 ref 的 state_id 被清掉
|
|
16
|
+
scriptctl state-delete actor:act_001/st_old --strategy remove
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
(`delete actor:act_001/st_old --strategy ...` 是等价写法。)
|
|
20
20
|
|
|
21
21
|
## 必查流程
|
|
22
22
|
|
|
23
|
-
1.
|
|
23
|
+
1. **操作前反查旧 state**,看谁在引用它:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
26
|
scriptctl refs actor:act_001/st_old
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
输出里是各场景 cast 引用(形如 `ep_001/scn_003.actors[0].state_id`)。
|
|
30
30
|
|
|
31
|
-
2.
|
|
31
|
+
2. **合并用 `replace`**,不要先裸删:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
scriptctl delete actor:act_001/st_old --strategy replace --replacement st_keep
|
|
34
|
+
scriptctl state-delete actor:act_001/st_old --strategy replace --replacement st_keep
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
- `scriptctl refs actor:act_001/st_old` 为空。
|
|
39
|
-
- `scriptctl refs actor:act_001/st_keep` 包含原来应该保留的场景初始状态和 action 状态变化引用。
|
|
40
|
-
- `scriptctl validate` 通过。
|
|
37
|
+
期望:`refs actor:act_001/st_old` 为空;`refs actor:act_001/st_keep` 含原来该保留的场景引用;`scriptctl validate` 通过。
|
|
41
38
|
|
|
42
|
-
3.
|
|
39
|
+
3. **真删除用 `remove`**:
|
|
43
40
|
|
|
44
41
|
```bash
|
|
45
|
-
scriptctl delete actor:act_001/st_old --strategy remove
|
|
42
|
+
scriptctl state-delete actor:act_001/st_old --strategy remove
|
|
46
43
|
```
|
|
47
44
|
|
|
48
|
-
|
|
49
|
-
- 场景 context 中引用该 state 的 ref 被保留,但 `state_id` 变成 `null`。
|
|
50
|
-
- 涉及该 state 的 action `state_changes` 被移除,避免留下半截 from/to。
|
|
51
|
-
- `scriptctl refs actor:act_001/st_old` 为空,`scriptctl validate` 通过。
|
|
52
|
-
|
|
53
|
-
4. 如果只想清某场的初始状态,不要删 state:
|
|
45
|
+
期望:引用该 state 的场景 ref 被保留、但 `state_id` 被清(角色仍在场,只是没造型);`refs actor:act_001/st_old` 为空;`validate` 通过。
|
|
54
46
|
|
|
55
|
-
|
|
56
|
-
scriptctl context ep_001/scn_003 actor:act_001 --clear
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
如果要移除该角色在某场的引用:
|
|
47
|
+
4. **只想清某场的造型**(不删 state):
|
|
60
48
|
|
|
61
49
|
```bash
|
|
62
|
-
scriptctl
|
|
50
|
+
scriptctl scene-ref ep_001/scn_003 actor:act_001 --clear # 保留在场,清造型
|
|
51
|
+
scriptctl scene-ref ep_001/scn_003 actor:act_001 --remove # 整个移出该场
|
|
63
52
|
```
|
|
64
53
|
|
|
65
|
-
##
|
|
66
|
-
|
|
67
|
-
改状态引用时两层都要覆盖,`replace`/`remove` 会自动处理,核验时也按这两层看:
|
|
68
|
-
|
|
69
|
-
- 场景初始状态:`scene.context.{actors|locations|props}[].state_id`。
|
|
70
|
-
- 动作状态变化:`action.state_changes[].from_state_id` / `to_state_id`。
|
|
54
|
+
## 核验要点
|
|
71
55
|
|
|
72
|
-
|
|
56
|
+
- 引用只有一层:`scene.{actors|props}[].state_id` 和 `scene.location.state_id`。`replace`/`remove` 会自动处理这一层。
|
|
57
|
+
- replacement 只能是**同一资产**上已存在的 state_id。
|
|
58
|
+
- 改完固定两步复查:`scriptctl refs actor:<id>/<st>` 为空 + `scriptctl validate` 通过。
|
|
59
|
+
- `STATE_NOT_MATERIALIZED`:某场引用了一个该资产上不存在的 state_id。用 `scriptctl states <asset>` 看合法 state_id,再 `scene-ref <ep/scn> <kind:id> --state <合法 id>` 修正。
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { type Stage, type StageContext } from "./stage.js";
|
|
2
|
-
export interface RunStagesOptions {
|
|
3
|
-
force?: boolean;
|
|
4
|
-
bypassInternalCaches?: boolean;
|
|
5
|
-
only?: Set<string>;
|
|
6
|
-
persistScriptAfterStages?: boolean;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Run the pipeline in order. A stage whose output artifact already exists and
|
|
10
|
-
* validates is skipped (resume), unless `force` is set or it isn't in `only`.
|
|
11
|
-
* Stages with `output: null` always run (they decide their own per-unit reuse).
|
|
12
|
-
*
|
|
13
|
-
* The StageIncomplete sentinel (raised by episode-synopsis when some episode
|
|
14
|
-
* still has unextracted batches) is NOT swallowed — it propagates so the
|
|
15
|
-
* orchestrator can emit the INIT INCOMPLETE report + EXIT_RUNTIME, exactly as
|
|
16
|
-
* the former god-command did with its early return.
|
|
17
|
-
*/
|
|
18
|
-
export declare function runStages(ctx: StageContext, stages?: readonly Stage[], opts?: RunStagesOptions): Promise<void>;
|
|
19
|
-
/**
|
|
20
|
-
* Run exactly one stage by name against an existing workspace. Each stage
|
|
21
|
-
* rehydrates the prior artifacts it needs from disk (ensure* helpers), so a
|
|
22
|
-
* single step can run standalone — `direct run metadata` re-extracts metadata
|
|
23
|
-
* for a workspace whose script.initial.json already exists, etc.
|
|
24
|
-
*/
|
|
25
|
-
export declare function runOne(ctx: StageContext, stageName: string): Promise<Stage>;
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { CliError, EXIT_USAGE } from "../../common.js";
|
|
2
|
-
import { stageRunStateName } from "./stage.js";
|
|
3
|
-
import { STAGES, stageByName, stageNames } from "./stages/index.js";
|
|
4
|
-
// Stages that mutate the in-memory script but rely on a LATER stage to persist
|
|
5
|
-
// it: in a full init the script-synopsis stage is the single write point for
|
|
6
|
-
// script.initial.json. When one of these runs standalone via `direct run`, no
|
|
7
|
-
// later stage follows, so runOne must persist the result or the mutation is
|
|
8
|
-
// silently lost (e.g. `direct run metadata` would update asset_metadata.json but
|
|
9
|
-
// leave the stale script on disk). script-synopsis writes the script itself and
|
|
10
|
-
// validate is read-only, so neither is listed.
|
|
11
|
-
const SCRIPT_PERSISTING_STAGES = new Set(["script-merge", "asset-curation", "state-curation", "state-binding", "metadata"]);
|
|
12
|
-
// Whether a stage can be skipped because its single output artifact is already
|
|
13
|
-
// present and valid. Stages with `output: null` (per-unit / always-recompute)
|
|
14
|
-
// are never skipped wholesale — they manage their own reuse internally.
|
|
15
|
-
function isStageSatisfied(stage, ctx) {
|
|
16
|
-
if (stage.output === null)
|
|
17
|
-
return false;
|
|
18
|
-
return ctx.ws.readJsonSafe(stage.output) !== null;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Run the pipeline in order. A stage whose output artifact already exists and
|
|
22
|
-
* validates is skipped (resume), unless `force` is set or it isn't in `only`.
|
|
23
|
-
* Stages with `output: null` always run (they decide their own per-unit reuse).
|
|
24
|
-
*
|
|
25
|
-
* The StageIncomplete sentinel (raised by episode-synopsis when some episode
|
|
26
|
-
* still has unextracted batches) is NOT swallowed — it propagates so the
|
|
27
|
-
* orchestrator can emit the INIT INCOMPLETE report + EXIT_RUNTIME, exactly as
|
|
28
|
-
* the former god-command did with its early return.
|
|
29
|
-
*/
|
|
30
|
-
export async function runStages(ctx, stages = STAGES, opts = {}) {
|
|
31
|
-
ctx.ws.ensure();
|
|
32
|
-
// script-synopsis is the natural write point for script.initial.json. If it will
|
|
33
|
-
// run later in THIS invocation it persists the cumulative script once at the end,
|
|
34
|
-
// so the per-stage hook below would only duplicate that write (and flush partial
|
|
35
|
-
// pre-synopsis artifacts). Only persist per-stage when synopsis is NOT in this run
|
|
36
|
-
// (a single-stage `direct run metadata` / runOne path), so the mutation isn't lost.
|
|
37
|
-
const synopsisPersistsLater = stages.some((s) => s.name === "script-synopsis" && (!opts.only || opts.only.has("script-synopsis")));
|
|
38
|
-
const persistScriptAfterStages = opts.persistScriptAfterStages ?? true;
|
|
39
|
-
for (const stage of stages) {
|
|
40
|
-
if (opts.only && !opts.only.has(stage.name))
|
|
41
|
-
continue;
|
|
42
|
-
if (!opts.force && isStageSatisfied(stage, ctx)) {
|
|
43
|
-
ctx.emitProgress(stage.name, "success");
|
|
44
|
-
ctx.timing.record({
|
|
45
|
-
name: stageRunStateName(stage.name),
|
|
46
|
-
category: "stage",
|
|
47
|
-
status: "skipped",
|
|
48
|
-
startedAtMs: Date.now(),
|
|
49
|
-
finishedAtMs: Date.now(),
|
|
50
|
-
});
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
const previousBypassInternalCaches = ctx.state.bypassInternalCaches;
|
|
54
|
-
ctx.state.bypassInternalCaches = Boolean(opts.bypassInternalCaches);
|
|
55
|
-
try {
|
|
56
|
-
await ctx.timing.span({ name: stageRunStateName(stage.name), category: "stage" }, () => stage.run(ctx));
|
|
57
|
-
}
|
|
58
|
-
finally {
|
|
59
|
-
ctx.state.bypassInternalCaches = previousBypassInternalCaches;
|
|
60
|
-
}
|
|
61
|
-
if (persistScriptAfterStages && !synopsisPersistsLater && SCRIPT_PERSISTING_STAGES.has(stage.name) && ctx.state.script) {
|
|
62
|
-
ctx.ws.writeJson("script.initial.json", ctx.state.script);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Run exactly one stage by name against an existing workspace. Each stage
|
|
68
|
-
* rehydrates the prior artifacts it needs from disk (ensure* helpers), so a
|
|
69
|
-
* single step can run standalone — `direct run metadata` re-extracts metadata
|
|
70
|
-
* for a workspace whose script.initial.json already exists, etc.
|
|
71
|
-
*/
|
|
72
|
-
export async function runOne(ctx, stageName) {
|
|
73
|
-
const stage = stageByName(stageName);
|
|
74
|
-
if (!stage) {
|
|
75
|
-
throw new CliError("DIRECT RUN BLOCKED: unknown stage", `Unknown stage "${stageName}".`, {
|
|
76
|
-
exitCode: EXIT_USAGE,
|
|
77
|
-
required: [`one of: ${stageNames().join(", ")}`],
|
|
78
|
-
received: [stageName],
|
|
79
|
-
nextSteps: ["Pass a valid stage name to `direct run`."],
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
// Delegate to runStages so the single post-stage persist hook (and any future
|
|
83
|
-
// shared behaviour) applies identically to the standalone path — `direct run
|
|
84
|
-
// <stage> --force` and the non-force `runStages({only})` path must not diverge.
|
|
85
|
-
await runStages(ctx, [stage], { force: true, bypassInternalCaches: true });
|
|
86
|
-
return stage;
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=runner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/domain/direct/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import type { ProviderLike } from "../direct-core.js";
|
|
2
|
-
export type Dict = Record<string, unknown>;
|
|
3
|
-
export type StageName = "source-prepare" | "episode-plan" | "episode-titles" | "batch-plan" | "batch-extract" | "episode-merge" | "episode-synopsis" | "script-merge" | "asset-curation" | "state-curation" | "state-binding" | "metadata" | "script-synopsis" | "validate";
|
|
4
|
-
export declare function stageRunStateName(stage: StageName): string;
|
|
5
|
-
export declare class Workspace {
|
|
6
|
-
readonly root: string;
|
|
7
|
-
readonly dir: string;
|
|
8
|
-
constructor(root: string);
|
|
9
|
-
ensure(): void;
|
|
10
|
-
pathOf(name: string): string;
|
|
11
|
-
rootPathOf(name: string): string;
|
|
12
|
-
has(name: string): boolean;
|
|
13
|
-
hasRoot(name: string): boolean;
|
|
14
|
-
readJson<T = Dict>(name: string): T;
|
|
15
|
-
readJsonOr<T = Dict>(name: string, fallback: T): T;
|
|
16
|
-
readJsonSafe<T = Dict>(name: string): T | null;
|
|
17
|
-
writeJson(name: string, data: unknown): void;
|
|
18
|
-
readText(name: string): string;
|
|
19
|
-
readRootText(name: string): string;
|
|
20
|
-
mkdir(name: string): string;
|
|
21
|
-
delete(name: string): void;
|
|
22
|
-
}
|
|
23
|
-
export interface DirectRunOptions {
|
|
24
|
-
source: string;
|
|
25
|
-
workspace: string;
|
|
26
|
-
providerName: string;
|
|
27
|
-
model: string;
|
|
28
|
-
concurrency: number;
|
|
29
|
-
batchMode: string;
|
|
30
|
-
batchTargetLines: number;
|
|
31
|
-
batchMaxChars: number;
|
|
32
|
-
batchMinLines: number;
|
|
33
|
-
selEpisodes: Set<number>;
|
|
34
|
-
selBatches: Set<string>;
|
|
35
|
-
retryErrors: boolean;
|
|
36
|
-
runAll: boolean;
|
|
37
|
-
skipSummary: boolean;
|
|
38
|
-
skipMetadata: boolean;
|
|
39
|
-
resummarize: boolean;
|
|
40
|
-
summaryThresholdChars: number;
|
|
41
|
-
}
|
|
42
|
-
export interface DirectRunState {
|
|
43
|
-
manifest: Dict | null;
|
|
44
|
-
episodePlan: Dict | null;
|
|
45
|
-
batchPlan: Dict | null;
|
|
46
|
-
sourceText: string;
|
|
47
|
-
projectName: string;
|
|
48
|
-
titleDegraded: number[];
|
|
49
|
-
pending: Dict[];
|
|
50
|
-
reusedBatchCount: number;
|
|
51
|
-
stickyErrorCount: number;
|
|
52
|
-
changedEpisodes: Set<number>;
|
|
53
|
-
doneBatches: number;
|
|
54
|
-
erroredBatches: number;
|
|
55
|
-
totalEpisodes: number;
|
|
56
|
-
totalBatches: number;
|
|
57
|
-
mergedResults: Dict[];
|
|
58
|
-
incompleteEpisodes: number[];
|
|
59
|
-
summaryDegradedEpisodes: number[];
|
|
60
|
-
summaryFullDegraded: boolean;
|
|
61
|
-
summaryDegradeReason: string;
|
|
62
|
-
script: Dict | null;
|
|
63
|
-
assetNormalization: Dict | null;
|
|
64
|
-
bypassInternalCaches: boolean;
|
|
65
|
-
validation: Dict | null;
|
|
66
|
-
}
|
|
67
|
-
export declare function emptyRunState(): DirectRunState;
|
|
68
|
-
export declare class StageIncomplete extends Error {
|
|
69
|
-
constructor(message?: string);
|
|
70
|
-
}
|
|
71
|
-
export interface StageContext {
|
|
72
|
-
ws: Workspace;
|
|
73
|
-
options: DirectRunOptions;
|
|
74
|
-
state: DirectRunState;
|
|
75
|
-
provider(): ProviderLike;
|
|
76
|
-
timing: DirectTimingRecorder;
|
|
77
|
-
emitProgress: ProgressEmitter;
|
|
78
|
-
updateRunState(updates: Dict): void;
|
|
79
|
-
}
|
|
80
|
-
export type DirectTimingStatus = "success" | "error" | "skipped";
|
|
81
|
-
export type DirectTimingCategory = "stage" | "substage" | "chunk" | "repair" | "branch";
|
|
82
|
-
export interface DirectTimingSpanOptions {
|
|
83
|
-
name: string;
|
|
84
|
-
category: DirectTimingCategory;
|
|
85
|
-
parent?: string;
|
|
86
|
-
metadata?: Dict;
|
|
87
|
-
}
|
|
88
|
-
export interface DirectTimingRecordOptions extends DirectTimingSpanOptions {
|
|
89
|
-
status: DirectTimingStatus;
|
|
90
|
-
startedAtMs: number;
|
|
91
|
-
finishedAtMs: number;
|
|
92
|
-
error?: string;
|
|
93
|
-
}
|
|
94
|
-
export interface DirectTimingRecorder {
|
|
95
|
-
reset(command: string): void;
|
|
96
|
-
span<T>(options: DirectTimingSpanOptions, run: () => Promise<T> | T): Promise<T>;
|
|
97
|
-
record(options: DirectTimingRecordOptions): void;
|
|
98
|
-
flush(): void;
|
|
99
|
-
}
|
|
100
|
-
export interface Stage {
|
|
101
|
-
readonly name: StageName;
|
|
102
|
-
readonly output: string | null;
|
|
103
|
-
run(ctx: StageContext): Promise<void>;
|
|
104
|
-
}
|
|
105
|
-
export interface ProgressEmitter {
|
|
106
|
-
(stage: StageName, status?: "running" | "success" | "warning" | "skipped" | "error" | "pending"): void;
|
|
107
|
-
}
|
|
108
|
-
export type ProviderFactory = () => ProviderLike;
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import * as fs from "node:fs";
|
|
2
|
-
import * as path from "node:path";
|
|
3
|
-
import { deletePath, directDir, exists, readJson, readText, writeJson, } from "../../common.js";
|
|
4
|
-
// run_state.json carries the snake_case stage names that `direct status` and
|
|
5
|
-
// emitInitProgress already key on; keep them as the persisted identity so the
|
|
6
|
-
// status table is byte-compatible with the pre-refactor pipeline.
|
|
7
|
-
export function stageRunStateName(stage) {
|
|
8
|
-
switch (stage) {
|
|
9
|
-
case "source-prepare": return "source_prepare";
|
|
10
|
-
case "episode-plan": return "episode_plan";
|
|
11
|
-
case "episode-titles": return "episode_titles";
|
|
12
|
-
case "batch-plan": return "batch_plan";
|
|
13
|
-
case "batch-extract": return "batch_extract";
|
|
14
|
-
case "episode-merge": return "episode_merge";
|
|
15
|
-
case "episode-synopsis": return "episode_synopsis";
|
|
16
|
-
case "script-merge": return "script_merge";
|
|
17
|
-
case "asset-curation": return "asset_curation";
|
|
18
|
-
case "state-curation": return "state_curation";
|
|
19
|
-
case "state-binding": return "state_binding";
|
|
20
|
-
case "metadata": return "metadata_extract";
|
|
21
|
-
case "script-synopsis": return "script_synopsis";
|
|
22
|
-
case "validate": return "validate";
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
// ---------------------------------------------------------------------------
|
|
26
|
-
// Workspace — typed, atomic artifact IO over the direct workspace directory.
|
|
27
|
-
// Wraps common.ts's DEFAULT_STORE writes (tmp file + rename), so a crash mid-
|
|
28
|
-
// write can never leave a torn artifact. Sole owner of the `*_results/`,
|
|
29
|
-
// `script.initial.json`, `run_state.json` on-disk layout used by the pipeline.
|
|
30
|
-
// ---------------------------------------------------------------------------
|
|
31
|
-
export class Workspace {
|
|
32
|
-
root;
|
|
33
|
-
dir;
|
|
34
|
-
constructor(root) {
|
|
35
|
-
this.root = root;
|
|
36
|
-
this.dir = directDir(root);
|
|
37
|
-
}
|
|
38
|
-
ensure() {
|
|
39
|
-
fs.mkdirSync(this.dir, { recursive: true });
|
|
40
|
-
}
|
|
41
|
-
// Absolute path of an artifact under the direct dir (e.g. "episode_plan.json"
|
|
42
|
-
// or "batch_results"). Relative segments are joined onto the direct dir.
|
|
43
|
-
pathOf(name) {
|
|
44
|
-
return path.join(this.dir, name);
|
|
45
|
-
}
|
|
46
|
-
// Absolute path of a file relative to the workspace ROOT (e.g. "source.txt",
|
|
47
|
-
// which lives beside the direct dir, not inside it).
|
|
48
|
-
rootPathOf(name) {
|
|
49
|
-
return path.join(this.root, name);
|
|
50
|
-
}
|
|
51
|
-
has(name) {
|
|
52
|
-
return exists(this.pathOf(name));
|
|
53
|
-
}
|
|
54
|
-
hasRoot(name) {
|
|
55
|
-
return exists(this.rootPathOf(name));
|
|
56
|
-
}
|
|
57
|
-
readJson(name) {
|
|
58
|
-
return readJson(this.pathOf(name));
|
|
59
|
-
}
|
|
60
|
-
readJsonOr(name, fallback) {
|
|
61
|
-
return this.has(name) ? this.readJson(name) : fallback;
|
|
62
|
-
}
|
|
63
|
-
// Read but never throw on a malformed/absent artifact — returns null so a
|
|
64
|
-
// stage can treat "present but corrupt" the same as "missing" (self-heal).
|
|
65
|
-
readJsonSafe(name) {
|
|
66
|
-
if (!this.has(name))
|
|
67
|
-
return null;
|
|
68
|
-
try {
|
|
69
|
-
return this.readJson(name);
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
// Atomic write (tmp + rename, via DEFAULT_STORE.writeJson). Creates the parent
|
|
76
|
-
// dir if needed so a stage never has to mkdir its own results dir.
|
|
77
|
-
writeJson(name, data) {
|
|
78
|
-
fs.mkdirSync(path.dirname(this.pathOf(name)), { recursive: true });
|
|
79
|
-
writeJson(this.pathOf(name), data);
|
|
80
|
-
}
|
|
81
|
-
readText(name) {
|
|
82
|
-
return readText(this.pathOf(name));
|
|
83
|
-
}
|
|
84
|
-
readRootText(name) {
|
|
85
|
-
return readText(this.rootPathOf(name));
|
|
86
|
-
}
|
|
87
|
-
mkdir(name) {
|
|
88
|
-
const p = this.pathOf(name);
|
|
89
|
-
fs.mkdirSync(p, { recursive: true });
|
|
90
|
-
return p;
|
|
91
|
-
}
|
|
92
|
-
delete(name) {
|
|
93
|
-
const p = this.pathOf(name);
|
|
94
|
-
if (exists(p))
|
|
95
|
-
deletePath(p);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
export function emptyRunState() {
|
|
99
|
-
return {
|
|
100
|
-
manifest: null,
|
|
101
|
-
episodePlan: null,
|
|
102
|
-
batchPlan: null,
|
|
103
|
-
sourceText: "",
|
|
104
|
-
projectName: "",
|
|
105
|
-
titleDegraded: [],
|
|
106
|
-
pending: [],
|
|
107
|
-
reusedBatchCount: 0,
|
|
108
|
-
stickyErrorCount: 0,
|
|
109
|
-
changedEpisodes: new Set(),
|
|
110
|
-
doneBatches: 0,
|
|
111
|
-
erroredBatches: 0,
|
|
112
|
-
totalEpisodes: 0,
|
|
113
|
-
totalBatches: 0,
|
|
114
|
-
mergedResults: [],
|
|
115
|
-
incompleteEpisodes: [],
|
|
116
|
-
summaryDegradedEpisodes: [],
|
|
117
|
-
summaryFullDegraded: false,
|
|
118
|
-
summaryDegradeReason: "",
|
|
119
|
-
script: null,
|
|
120
|
-
assetNormalization: null,
|
|
121
|
-
bypassInternalCaches: false,
|
|
122
|
-
validation: null,
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
// Sentinel a stage throws to abort the run with an "incomplete" (not "failed")
|
|
126
|
-
// outcome — the batch-extract → episode-merge path uses it when some episode
|
|
127
|
-
// still has unextracted batches, which is a resumable non-error stop.
|
|
128
|
-
export class StageIncomplete extends Error {
|
|
129
|
-
constructor(message = "stage incomplete") {
|
|
130
|
-
super(message);
|
|
131
|
-
this.name = "StageIncomplete";
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
//# sourceMappingURL=stage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stage.js","sourceRoot":"","sources":["../../../src/domain/direct/stage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { stageAssetCuration } from "../../../usecases/direct.js";
|
|
2
|
-
// Provider first emits name-only grouping expressions, then compact curation
|
|
3
|
-
// expressions; deterministic code parses and applies both to ctx.state.script
|
|
4
|
-
// (or script.initial.json). Writes: asset_grouping.json, asset_curation.json.
|
|
5
|
-
export const assetCurationStage = {
|
|
6
|
-
name: "asset-curation",
|
|
7
|
-
output: "asset_curation.json",
|
|
8
|
-
run: (ctx) => stageAssetCuration(ctx),
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=asset-curation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"asset-curation.js","sourceRoot":"","sources":["../../../../src/domain/direct/stages/asset-curation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,MAAM,CAAC,MAAM,kBAAkB,GAAU;IACvC,IAAI,EAAE,gBAAgB;IACtB,MAAM,EAAE,qBAAqB;IAC7B,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC;CACtC,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { stageBatchExtract } from "../../../usecases/direct.js";
|
|
2
|
-
// LLM-extract each batch concurrently, persisting per-batch result/error files
|
|
3
|
-
// (the resume unit). Reads: source.txt + episode_plan.json + batch_plan.json.
|
|
4
|
-
// Writes: batch_results/<key>.json|.error.json. `output: null` — completion is
|
|
5
|
-
// per-batch, not a single artifact, so the runner never skips it wholesale;
|
|
6
|
-
// reuse is decided per batch inside the stage (classifyBatch).
|
|
7
|
-
export const batchExtractStage = {
|
|
8
|
-
name: "batch-extract",
|
|
9
|
-
output: null,
|
|
10
|
-
run: (ctx) => stageBatchExtract(ctx),
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=batch-extract.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batch-extract.js","sourceRoot":"","sources":["../../../../src/domain/direct/stages/batch-extract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,4EAA4E;AAC5E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,iBAAiB,GAAU;IACtC,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC;CACrC,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { stageBatchPlan } from "../../../usecases/direct.js";
|
|
2
|
-
// Split each episode into natural extraction batches (deterministic). Reads:
|
|
3
|
-
// source.txt + episode_plan.json. Writes: batch_plan.json.
|
|
4
|
-
export const batchPlanStage = {
|
|
5
|
-
name: "batch-plan",
|
|
6
|
-
output: "batch_plan.json",
|
|
7
|
-
run: (ctx) => stageBatchPlan(ctx),
|
|
8
|
-
};
|
|
9
|
-
//# sourceMappingURL=batch-plan.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batch-plan.js","sourceRoot":"","sources":["../../../../src/domain/direct/stages/batch-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,6EAA6E;AAC7E,2DAA2D;AAC3D,MAAM,CAAC,MAAM,cAAc,GAAU;IACnC,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,iBAAiB;IACzB,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC;CAClC,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { stageEpisodeMerge } from "../../../usecases/direct.js";
|
|
2
|
-
// Merge each episode's batch results into one episode result (deterministic).
|
|
3
|
-
// Reads: batch_results/ + plans. Writes: in-memory merged results carried on
|
|
4
|
-
// ctx.state (persisted by the episode-synopsis stage, matching the god-command
|
|
5
|
-
// order). `output: null` — the persisted artifact is written by the next stage.
|
|
6
|
-
export const episodeMergeStage = {
|
|
7
|
-
name: "episode-merge",
|
|
8
|
-
output: null,
|
|
9
|
-
run: (ctx) => stageEpisodeMerge(ctx),
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=episode-merge.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"episode-merge.js","sourceRoot":"","sources":["../../../../src/domain/direct/stages/episode-merge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,8EAA8E;AAC9E,6EAA6E;AAC7E,+EAA+E;AAC/E,gFAAgF;AAChF,MAAM,CAAC,MAAM,iBAAiB,GAAU;IACtC,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC;CACrC,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { stageEpisodePlan } from "../../../usecases/direct.js";
|
|
2
|
-
// Split source.txt into episodes (deterministic). Reads: source.txt. Writes:
|
|
3
|
-
// episode_plan.json.
|
|
4
|
-
export const episodePlanStage = {
|
|
5
|
-
name: "episode-plan",
|
|
6
|
-
output: "episode_plan.json",
|
|
7
|
-
run: (ctx) => stageEpisodePlan(ctx),
|
|
8
|
-
};
|
|
9
|
-
//# sourceMappingURL=episode-plan.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"episode-plan.js","sourceRoot":"","sources":["../../../../src/domain/direct/stages/episode-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,6EAA6E;AAC7E,qBAAqB;AACrB,MAAM,CAAC,MAAM,gBAAgB,GAAU;IACrC,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,mBAAmB;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC;CACpC,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { stageEpisodeSynopsis } from "../../../usecases/direct.js";
|
|
2
|
-
// Resolve each episode's synopsis (reduce-1: passthrough / reuse / skip / LLM
|
|
3
|
-
// stitch) then persist episode_results/ep_NNN.json. Reads: merged results +
|
|
4
|
-
// prior persisted syn. Writes: episode_results/*.json. Also raises the resumable
|
|
5
|
-
// "incomplete" stop when an episode still has unextracted batches. `output: null`
|
|
6
|
-
// — completion is per-episode, decided inside the stage.
|
|
7
|
-
export const episodeSynopsisStage = {
|
|
8
|
-
name: "episode-synopsis",
|
|
9
|
-
output: null,
|
|
10
|
-
run: (ctx) => stageEpisodeSynopsis(ctx),
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=episode-synopsis.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"episode-synopsis.js","sourceRoot":"","sources":["../../../../src/domain/direct/stages/episode-synopsis.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,8EAA8E;AAC9E,4EAA4E;AAC5E,iFAAiF;AACjF,kFAAkF;AAClF,yDAAyD;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAU;IACzC,IAAI,EAAE,kBAAkB;IACxB,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC;CACxC,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { stageEpisodeTitles } from "../../../usecases/direct.js";
|
|
2
|
-
// LLM-enrich the plan's missing episode titles (soft-degrade to deterministic
|
|
3
|
-
// titles). Reads: source.txt + episode_plan.json. Writes: episode_plan.json
|
|
4
|
-
// (titles filled in place). `output: null` — the plan artifact already exists
|
|
5
|
-
// from episode-plan, so completion isn't captured by file presence; the runner
|
|
6
|
-
// never skips titles wholesale.
|
|
7
|
-
export const episodeTitlesStage = {
|
|
8
|
-
name: "episode-titles",
|
|
9
|
-
output: null,
|
|
10
|
-
run: (ctx) => stageEpisodeTitles(ctx),
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=episode-titles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"episode-titles.js","sourceRoot":"","sources":["../../../../src/domain/direct/stages/episode-titles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,+EAA+E;AAC/E,gCAAgC;AAChC,MAAM,CAAC,MAAM,kBAAkB,GAAU;IACvC,IAAI,EAAE,gBAAgB;IACtB,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC;CACtC,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Stage, StageName } from "../stage.js";
|
|
2
|
-
import { sourcePrepareStage } from "./source-prepare.js";
|
|
3
|
-
import { episodePlanStage } from "./episode-plan.js";
|
|
4
|
-
import { episodeTitlesStage } from "./episode-titles.js";
|
|
5
|
-
import { batchPlanStage } from "./batch-plan.js";
|
|
6
|
-
import { batchExtractStage } from "./batch-extract.js";
|
|
7
|
-
import { episodeMergeStage } from "./episode-merge.js";
|
|
8
|
-
import { episodeSynopsisStage } from "./episode-synopsis.js";
|
|
9
|
-
import { scriptMergeStage } from "./script-merge.js";
|
|
10
|
-
import { assetCurationStage } from "./asset-curation.js";
|
|
11
|
-
import { stateCurationStage } from "./state-curation.js";
|
|
12
|
-
import { stateBindingStage } from "./state-binding.js";
|
|
13
|
-
import { metadataStage } from "./metadata.js";
|
|
14
|
-
import { scriptSynopsisStage } from "./script-synopsis.js";
|
|
15
|
-
import { validateStage } from "./validate.js";
|
|
16
|
-
export declare const STAGES: readonly Stage[];
|
|
17
|
-
export declare function stageByName(name: string): Stage | undefined;
|
|
18
|
-
export declare function stageNames(): StageName[];
|
|
19
|
-
export { sourcePrepareStage, episodePlanStage, episodeTitlesStage, batchPlanStage, batchExtractStage, episodeMergeStage, episodeSynopsisStage, scriptMergeStage, assetCurationStage, stateCurationStage, stateBindingStage, metadataStage, scriptSynopsisStage, validateStage, };
|