@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
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
// Text ingest pipeline (§6): pass1-prepare → pass2-normalize (fanout) →
|
|
2
|
+
// pass3-merge → compile (deterministic assembler) → pass5-govern. Only the
|
|
3
|
+
// normalize LLM stage checkpoints (per-chunk markdown); everything else is
|
|
4
|
+
// deterministic and recomputed. Workspace lifecycle per §5.3.
|
|
5
|
+
import * as fs from "node:fs";
|
|
6
|
+
import * as path from "node:path";
|
|
7
|
+
import { CliError, EXIT_INPUT, sha256Text } from "../../common.js";
|
|
8
|
+
import { assemble, assignProvisionalIds } from "../../domain/ingest/assembler.js";
|
|
9
|
+
import { chunkSource } from "../../domain/ingest/chunker.js";
|
|
10
|
+
import { parseJsonl } from "../../domain/ingest/jsonl-parser.js";
|
|
11
|
+
import { renumberIds } from "../../domain/ingest/renumber.js";
|
|
12
|
+
import { validateScriptV3 } from "../../domain/ingest/validation.js";
|
|
13
|
+
import { resolveSource } from "../../infra/ingest/source-resolver.js";
|
|
14
|
+
import { readTextSource } from "../../infra/ingest/text-reader.js";
|
|
15
|
+
import { WorkspaceStore } from "../../infra/ingest/workspace-store.js";
|
|
16
|
+
import { runTextNormalize, parseNormalizeOutput } from "../../llm/tasks/ingest/text-normalize.js";
|
|
17
|
+
import { mapSettled } from "./fanout.js";
|
|
18
|
+
import { runMentionResolvePass } from "./pass4-mention-resolve.js";
|
|
19
|
+
import { runExtractPass } from "./pass5-extract.js";
|
|
20
|
+
import { runGovern } from "./pass5-govern.js";
|
|
21
|
+
const PIPELINE_VERSION = "1";
|
|
22
|
+
const pad = (n) => String(n).padStart(3, "0");
|
|
23
|
+
const serializeJsonl = (records) => records.map((r) => JSON.stringify(r)).join("\n") + "\n";
|
|
24
|
+
function checkLifecycle(store, sourceSha, force) {
|
|
25
|
+
if (!store.has("manifest.json"))
|
|
26
|
+
return;
|
|
27
|
+
const manifest = store.readJson("manifest.json");
|
|
28
|
+
if (manifest.source?.sha256 && manifest.source.sha256 !== sourceSha) {
|
|
29
|
+
throw new CliError("INGEST SOURCE MISMATCH", "This workspace was built from a different source. --force cannot switch sources.", {
|
|
30
|
+
exitCode: EXIT_INPUT,
|
|
31
|
+
errorCode: "INGEST_SOURCE_MISMATCH",
|
|
32
|
+
received: ["workspace source differs from --source-path"],
|
|
33
|
+
nextSteps: ["Choose a fresh --workspace-path for the new source."],
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
if (force) {
|
|
37
|
+
for (const dir of ["pass1", "pass2", "pass3", "pass5"])
|
|
38
|
+
fs.rmSync(store.path(dir), { recursive: true, force: true });
|
|
39
|
+
for (const f of ["script.initial.json", "script.json", "validation.json", "notes.json", "issues.json", "provisional_assets.json"])
|
|
40
|
+
fs.rmSync(store.path(f), { force: true });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export async function runTextIngest(opts) {
|
|
44
|
+
const resolved = resolveSource(opts.sourcePath);
|
|
45
|
+
if (resolved.kind !== "text") {
|
|
46
|
+
throw new CliError("INGEST WRONG PIPELINE", "runTextIngest received a non-text source.", { exitCode: EXIT_INPUT, errorCode: "INGEST_WRONG_PIPELINE" });
|
|
47
|
+
}
|
|
48
|
+
const text = await readTextSource(resolved.path, resolved.ext);
|
|
49
|
+
const sourceSha = sha256Text(text);
|
|
50
|
+
const store = new WorkspaceStore(opts.workspacePath);
|
|
51
|
+
store.ensure();
|
|
52
|
+
checkLifecycle(store, sourceSha, opts.force ?? false);
|
|
53
|
+
// pass1: prepare + chunk.
|
|
54
|
+
const chunks = chunkSource(text);
|
|
55
|
+
store.writeText("pass1/source.txt", text);
|
|
56
|
+
store.writeJson("pass1/chunks.json", chunks.map((c) => ({ index: c.index, core_line_start: c.core_line_start, core_line_end: c.core_line_end })));
|
|
57
|
+
store.writeJson("manifest.json", {
|
|
58
|
+
version: 1,
|
|
59
|
+
pipeline_version: PIPELINE_VERSION,
|
|
60
|
+
updated: new Date().toISOString(),
|
|
61
|
+
source: { path: path.resolve(resolved.path), sha256: sourceSha, kind: "text", ext: resolved.ext },
|
|
62
|
+
chunks: chunks.length,
|
|
63
|
+
});
|
|
64
|
+
// pass2: normalize fanout with per-chunk markdown checkpoint.
|
|
65
|
+
let reused = 0;
|
|
66
|
+
const settled = await mapSettled(chunks, opts.concurrency ?? 80, async (chunk) => {
|
|
67
|
+
const mdRel = `pass2/chunk_${pad(chunk.index)}.md`;
|
|
68
|
+
if (store.has(mdRel) && !opts.force) {
|
|
69
|
+
reused++;
|
|
70
|
+
return parseNormalizeOutput(store.readText(mdRel), chunk);
|
|
71
|
+
}
|
|
72
|
+
const { markdown, records } = await runTextNormalize(opts.executor, chunk, opts.signal);
|
|
73
|
+
store.writeText(mdRel, markdown);
|
|
74
|
+
store.writeText(`pass2/chunk_${pad(chunk.index)}.jsonl`, serializeJsonl(records));
|
|
75
|
+
store.clearError(`pass2/chunk_${pad(chunk.index)}.error.json`);
|
|
76
|
+
return records;
|
|
77
|
+
});
|
|
78
|
+
const failures = settled.filter((s) => !s.ok);
|
|
79
|
+
for (const f of failures) {
|
|
80
|
+
const message = f.error instanceof Error ? f.error.message : String(f.error);
|
|
81
|
+
store.writeJson(`pass2/chunk_${pad(f.index)}.error.json`, { chunk: f.index, error: message });
|
|
82
|
+
}
|
|
83
|
+
if (failures.length > 0) {
|
|
84
|
+
throw new CliError("INGEST NORMALIZE INCOMPLETE", `${failures.length}/${chunks.length} chunk(s) failed normalization.`, {
|
|
85
|
+
exitCode: EXIT_INPUT,
|
|
86
|
+
errorCode: "INGEST_NORMALIZE_INCOMPLETE",
|
|
87
|
+
received: failures.map((f) => `chunk ${f.index}`),
|
|
88
|
+
nextSteps: ["Inspect pass2/chunk_NNN.error.json and rerun `scriptctl ingest` to resume."],
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// pass3: merge in chunk order.
|
|
92
|
+
const merged = [];
|
|
93
|
+
for (const s of settled)
|
|
94
|
+
if (s.ok)
|
|
95
|
+
merged.push(...s.value);
|
|
96
|
+
store.writeText("pass3/script.jsonl", serializeJsonl(merged));
|
|
97
|
+
const reparsed = parseJsonl(store.readText("pass3/script.jsonl")); // round-trip validation
|
|
98
|
+
// pass4-mention-resolve: rewrite plain-text pronouns → concrete cast names.
|
|
99
|
+
const { records: resolvedRecords } = await runMentionResolvePass(reparsed, { executor: opts.executor, concurrency: opts.concurrency ?? 80, ...(opts.signal ? { signal: opts.signal } : {}) });
|
|
100
|
+
store.writeText("pass4/script.jsonl", serializeJsonl(resolvedRecords));
|
|
101
|
+
// compile: assemble name-based skeleton (plain-text content; scene cast =
|
|
102
|
+
// declared 人物 ∪ speakers).
|
|
103
|
+
const title = deriveTitle(resolved.path);
|
|
104
|
+
const assembled = assemble(resolvedRecords, { title });
|
|
105
|
+
store.writeJson("notes.json", assembled.notes);
|
|
106
|
+
// pass5-extract: augment scene cast/props from the body (declared = prior).
|
|
107
|
+
const extracted = await runExtractPass(assembled.script, { executor: opts.executor, concurrency: opts.concurrency ?? 80, ...(opts.signal ? { signal: opts.signal } : {}) });
|
|
108
|
+
// assign provisional ids + evidence roster → provisional script.initial.json.
|
|
109
|
+
const { script: initial, assets } = assignProvisionalIds(extracted);
|
|
110
|
+
store.writeJson("script.initial.json", initial);
|
|
111
|
+
store.writeJson("provisional_assets.json", assets);
|
|
112
|
+
// pass6-govern: curate (importance) + recall/refine (merge) + state reconcile.
|
|
113
|
+
const governed = await runGovern(initial, assets, { executor: opts.executor, concurrency: opts.concurrency ?? 80, ...(opts.signal ? { signal: opts.signal } : {}) });
|
|
114
|
+
// Final clean numbering: contiguous per-kind asset ids + per-asset state ids.
|
|
115
|
+
const { script: renumbered, idMap } = renumberIds(governed);
|
|
116
|
+
store.writeJson("id_map.json", idMap);
|
|
117
|
+
const validation = validateScriptV3(renumbered);
|
|
118
|
+
store.writeJson("pass5/script.json", renumbered);
|
|
119
|
+
store.writeJson("validation.json", validation);
|
|
120
|
+
if (!validation.ok) {
|
|
121
|
+
throw new CliError("INGEST VALIDATION FAILED", "Final script.json failed v3 validation.", {
|
|
122
|
+
exitCode: EXIT_INPUT,
|
|
123
|
+
errorCode: "INGEST_VALIDATION_FAILED",
|
|
124
|
+
received: validation.errors.slice(0, 5).map((e) => `${e.path}: ${e.message}`),
|
|
125
|
+
nextSteps: ["Inspect validation.json."],
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
store.writeJson("script.json", renumbered);
|
|
129
|
+
const g = renumbered;
|
|
130
|
+
return {
|
|
131
|
+
workspacePath: store.root,
|
|
132
|
+
chunks: chunks.length,
|
|
133
|
+
reused,
|
|
134
|
+
records: merged.length,
|
|
135
|
+
notes: assembled.notes.length,
|
|
136
|
+
assets: { actors: g.actors?.length ?? 0, locations: g.locations?.length ?? 0, props: g.props?.length ?? 0 },
|
|
137
|
+
scriptPath: store.path("script.json"),
|
|
138
|
+
validation: { ok: validation.ok, errors: validation.errors.length, warnings: validation.warnings.length },
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function deriveTitle(sourcePath) {
|
|
142
|
+
return path.basename(sourcePath, path.extname(sourcePath));
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/usecases/ingest/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// `scriptctl publish` — top-level command (§4/§15.4). Reads a workspace's
|
|
2
|
+
// script.json, reruns v3 validation, then writes it to the configured
|
|
3
|
+
// ScriptOutputStore (local or remote). Reuses the shared output-store infra; no
|
|
4
|
+
// dependency on direct.
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { CliError, EXIT_INPUT, EXIT_OK, sha256Text } from "../../common.js";
|
|
7
|
+
import { validateScriptV3 } from "../../domain/ingest/validation.js";
|
|
8
|
+
import { WorkspaceStore } from "../../infra/ingest/workspace-store.js";
|
|
9
|
+
import { LocalScriptOutputStore } from "../../infra/local-script-output-store.js";
|
|
10
|
+
import { remoteScriptOutputStoreFromEnv } from "../../infra/script-output-api.js";
|
|
11
|
+
import { ScriptOutputApiError, resolveOutputModeOrThrow } from "../../infra/script-output-store.js";
|
|
12
|
+
const strOf = (v) => (v === null || v === undefined ? "" : String(v));
|
|
13
|
+
function makeOutputStore(opts) {
|
|
14
|
+
const mode = resolveOutputModeOrThrow({ remote: opts["remote"], local: opts["local"], projectGroupNo: opts["project_group_no"] });
|
|
15
|
+
try {
|
|
16
|
+
return mode === "local"
|
|
17
|
+
? LocalScriptOutputStore.fromEnv(strOf(opts["workspace_path"]).trim() || undefined)
|
|
18
|
+
: remoteScriptOutputStoreFromEnv(strOf(opts["project_group_no"]).trim() || null);
|
|
19
|
+
}
|
|
20
|
+
catch (exc) {
|
|
21
|
+
throw new CliError("PUBLISH BLOCKED: output not configured", "Output store not configured.", {
|
|
22
|
+
exitCode: EXIT_INPUT,
|
|
23
|
+
errorCode: "SCRIPT_API_CONFIG_MISSING",
|
|
24
|
+
required: [mode === "local" ? "SCRIPTCTL_OUTPUT_DIR" : "gateway config (AWB_BASE_URL / ACCESS_KEY / project-group-no)"],
|
|
25
|
+
received: [exc instanceof Error ? exc.message : String(exc)],
|
|
26
|
+
nextSteps: ["Run `scriptctl doctor` to check output configuration."],
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function currentRevisionOrZero(client) {
|
|
31
|
+
try {
|
|
32
|
+
const revision = await client.getRevision();
|
|
33
|
+
return revision ? Number(revision["revision"] ?? 0) : 0;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export async function commandPublish(opts) {
|
|
40
|
+
const workspacePath = strOf(opts["workspace_path"] || "workspace");
|
|
41
|
+
const store = new WorkspaceStore(path.resolve(workspacePath));
|
|
42
|
+
if (!store.has("script.json")) {
|
|
43
|
+
throw new CliError("PUBLISH BLOCKED: no script.json", "workspace has no script.json to publish.", {
|
|
44
|
+
exitCode: EXIT_INPUT, errorCode: "PUBLISH_NO_SCRIPT",
|
|
45
|
+
received: [store.path("script.json")],
|
|
46
|
+
nextSteps: ["Run `scriptctl ingest` first."],
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
const script = store.readJson("script.json");
|
|
50
|
+
const validation = validateScriptV3(script);
|
|
51
|
+
if (!validation.ok) {
|
|
52
|
+
throw new CliError("PUBLISH BLOCKED: v3 validation failed", "script.json does not pass v3 validation.", {
|
|
53
|
+
exitCode: EXIT_INPUT, errorCode: "PUBLISH_VALIDATION_FAILED",
|
|
54
|
+
received: validation.errors.slice(0, 5).map((e) => `${e.path}: ${e.message}`),
|
|
55
|
+
nextSteps: ["Re-run `scriptctl ingest` to regenerate a valid script.json."],
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
const client = makeOutputStore(opts);
|
|
59
|
+
const baseRevision = await currentRevisionOrZero(client);
|
|
60
|
+
const requestId = strOf(opts["request_id"]).trim() || `scriptctl-ingest:${sha256Text(JSON.stringify(script))}`;
|
|
61
|
+
let res;
|
|
62
|
+
try {
|
|
63
|
+
res = await client.replaceScript({ requestId, baseRevision, script, source: "ctl" });
|
|
64
|
+
}
|
|
65
|
+
catch (exc) {
|
|
66
|
+
if (exc instanceof ScriptOutputApiError) {
|
|
67
|
+
const conflict = /版本冲突|revision/i.test(exc.message);
|
|
68
|
+
throw new CliError("PUBLISH BLOCKED: write failed", conflict ? "Script updated by another revision; reload and retry." : exc.message, {
|
|
69
|
+
exitCode: EXIT_INPUT, errorCode: conflict ? "SCRIPT_REVISION_CONFLICT" : "SCRIPT_API_WRITE_FAILED",
|
|
70
|
+
received: [exc.message], nextSteps: conflict ? ["Re-run publish after reload."] : ["Check output config and retry."],
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
throw exc;
|
|
74
|
+
}
|
|
75
|
+
return [{ result: [`published rev ${baseRevision} → ${res["revision"]}; idempotent ${res["idempotent"] ?? false}`] }, EXIT_OK];
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=publish-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-command.js","sourceRoot":"","sources":["../../../src/usecases/ingest/publish-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type Report } from "../../common.js";
|
|
2
|
+
type Dict = Record<string, unknown>;
|
|
3
|
+
export type IngestKind = "text" | "video";
|
|
4
|
+
export type IngestState = "empty" | "incomplete" | "failed" | "ready";
|
|
5
|
+
export interface IngestUnit {
|
|
6
|
+
total: number;
|
|
7
|
+
done: number;
|
|
8
|
+
failed: number;
|
|
9
|
+
}
|
|
10
|
+
export interface IngestPass {
|
|
11
|
+
name: string;
|
|
12
|
+
done: boolean;
|
|
13
|
+
unit?: IngestUnit;
|
|
14
|
+
}
|
|
15
|
+
export interface IngestErrorRef {
|
|
16
|
+
pass: string;
|
|
17
|
+
unit: string;
|
|
18
|
+
message?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface IngestStatus {
|
|
21
|
+
workspace: string;
|
|
22
|
+
exists: boolean;
|
|
23
|
+
kind: IngestKind | null;
|
|
24
|
+
state: IngestState;
|
|
25
|
+
phase: string;
|
|
26
|
+
passes: IngestPass[];
|
|
27
|
+
units: IngestUnit | null;
|
|
28
|
+
script: boolean;
|
|
29
|
+
validation: {
|
|
30
|
+
ok: boolean;
|
|
31
|
+
errors: number;
|
|
32
|
+
warnings: number;
|
|
33
|
+
} | null;
|
|
34
|
+
errors: IngestErrorRef[];
|
|
35
|
+
updated: string | null;
|
|
36
|
+
}
|
|
37
|
+
export declare function deriveIngestStatus(workspacePath: string): IngestStatus;
|
|
38
|
+
export declare function commandIngestStatus(opts: Dict): [Report, number];
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
// `scriptctl ingest status` — derives ingest progress from the workspace's REAL
|
|
2
|
+
// file state (§5.3), never from a separate state-machine file. The pipeline
|
|
3
|
+
// already treats the workspace as its source of truth (resume = "what's on
|
|
4
|
+
// disk"), so status is a pure function of the files: no run_state.json to drift
|
|
5
|
+
// out of sync. This is the one authoritative status derivation — the runtime
|
|
6
|
+
// watcher and frontend consume this via `--json` instead of re-deriving it.
|
|
7
|
+
import * as fs from "node:fs";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
import { EXIT_OK } from "../../common.js";
|
|
10
|
+
const strOf = (v) => (v === null || v === undefined ? "" : String(v));
|
|
11
|
+
// List files directly under a pass dir matching a suffix (non-recursive).
|
|
12
|
+
function listSuffix(root, dir, suffix) {
|
|
13
|
+
const abs = path.join(root, dir);
|
|
14
|
+
let names;
|
|
15
|
+
try {
|
|
16
|
+
names = fs.readdirSync(abs);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
return names.filter((n) => n.endsWith(suffix)).sort();
|
|
22
|
+
}
|
|
23
|
+
const countSuffix = (root, dir, suffix) => listSuffix(root, dir, suffix).length;
|
|
24
|
+
const has = (root, rel) => fs.existsSync(path.join(root, rel));
|
|
25
|
+
function readManifest(root) {
|
|
26
|
+
try {
|
|
27
|
+
return JSON.parse(fs.readFileSync(path.join(root, "manifest.json"), "utf-8"));
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function readValidation(root) {
|
|
34
|
+
try {
|
|
35
|
+
const v = JSON.parse(fs.readFileSync(path.join(root, "validation.json"), "utf-8"));
|
|
36
|
+
return { ok: Boolean(v.ok), errors: v.errors?.length ?? 0, warnings: v.warnings?.length ?? 0 };
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Collect the error sidecars a failed run leaves behind (cleared on unit success).
|
|
43
|
+
function collectErrors(root, pass) {
|
|
44
|
+
return listSuffix(root, pass, ".error.json").map((name) => {
|
|
45
|
+
let message;
|
|
46
|
+
try {
|
|
47
|
+
const j = JSON.parse(fs.readFileSync(path.join(root, pass, name), "utf-8"));
|
|
48
|
+
if (j.error)
|
|
49
|
+
message = j.error;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
/* ignore unreadable sidecar */
|
|
53
|
+
}
|
|
54
|
+
const ref = { pass, unit: name.replace(/\.error\.json$/, "") };
|
|
55
|
+
if (message !== undefined)
|
|
56
|
+
ref.message = message;
|
|
57
|
+
return ref;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function textPasses(root, manifest) {
|
|
61
|
+
const total = manifest.chunks ?? 0;
|
|
62
|
+
const normalize = {
|
|
63
|
+
total,
|
|
64
|
+
done: countSuffix(root, "pass2", ".md"),
|
|
65
|
+
failed: countSuffix(root, "pass2", ".error.json"),
|
|
66
|
+
};
|
|
67
|
+
const passes = [
|
|
68
|
+
{ name: "normalize", done: total > 0 && normalize.done >= total && normalize.failed === 0, unit: normalize },
|
|
69
|
+
{ name: "assemble", done: has(root, "script.initial.json") },
|
|
70
|
+
{ name: "govern", done: has(root, "script.json") },
|
|
71
|
+
];
|
|
72
|
+
return { passes, units: normalize };
|
|
73
|
+
}
|
|
74
|
+
function videoPasses(root, manifest) {
|
|
75
|
+
const total = manifest.episodes?.length ?? 0;
|
|
76
|
+
const transcribe = {
|
|
77
|
+
total,
|
|
78
|
+
done: countSuffix(root, "pass1", ".md"),
|
|
79
|
+
failed: countSuffix(root, "pass1", ".error.json"),
|
|
80
|
+
};
|
|
81
|
+
const correct = {
|
|
82
|
+
total,
|
|
83
|
+
done: countSuffix(root, "pass4", ".corrections.json"),
|
|
84
|
+
failed: countSuffix(root, "pass4", ".error.json"),
|
|
85
|
+
};
|
|
86
|
+
const speaker = {
|
|
87
|
+
total,
|
|
88
|
+
done: countSuffix(root, "pass5", ".speaker.json"),
|
|
89
|
+
failed: countSuffix(root, "pass5", ".error.json"),
|
|
90
|
+
};
|
|
91
|
+
const passes = [
|
|
92
|
+
{ name: "transcribe", done: total > 0 && transcribe.done >= total && transcribe.failed === 0, unit: transcribe },
|
|
93
|
+
{ name: "roster", done: has(root, "roster.json") && has(root, "context.merged.md") },
|
|
94
|
+
{ name: "correct", done: total > 0 && correct.done >= total && correct.failed === 0, unit: correct },
|
|
95
|
+
{ name: "speaker", done: total > 0 && speaker.done >= total && speaker.failed === 0, unit: speaker },
|
|
96
|
+
{ name: "govern", done: has(root, "script.json") },
|
|
97
|
+
];
|
|
98
|
+
return { passes, units: transcribe };
|
|
99
|
+
}
|
|
100
|
+
export function deriveIngestStatus(workspacePath) {
|
|
101
|
+
const root = path.resolve(workspacePath);
|
|
102
|
+
const manifest = readManifest(root);
|
|
103
|
+
if (!manifest) {
|
|
104
|
+
return {
|
|
105
|
+
workspace: root, exists: false, kind: null, state: "empty", phase: "none",
|
|
106
|
+
passes: [], units: null, script: false, validation: null, errors: [], updated: null,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const kind = manifest.source?.kind === "text" ? "text" : "video";
|
|
110
|
+
const { passes, units } = kind === "text" ? textPasses(root, manifest) : videoPasses(root, manifest);
|
|
111
|
+
const errorPasses = kind === "text" ? ["pass2"] : ["pass1", "pass4", "pass5"];
|
|
112
|
+
const errors = errorPasses.flatMap((p) => collectErrors(root, p));
|
|
113
|
+
const script = has(root, "script.json");
|
|
114
|
+
const validation = readValidation(root);
|
|
115
|
+
// State is a pure fold over the files: a final valid script is `ready`; a
|
|
116
|
+
// hard error (validation failed OR leftover unit error sidecars) is `failed`;
|
|
117
|
+
// otherwise the run started but didn't finish (`incomplete`). Liveness (is a
|
|
118
|
+
// process still running?) is deliberately NOT here — it can't be read from
|
|
119
|
+
// files; that's the watcher's / agent's concern.
|
|
120
|
+
let state;
|
|
121
|
+
if (script && validation?.ok)
|
|
122
|
+
state = "ready";
|
|
123
|
+
else if (errors.length > 0 || (validation && !validation.ok))
|
|
124
|
+
state = "failed";
|
|
125
|
+
else
|
|
126
|
+
state = "incomplete";
|
|
127
|
+
const firstPending = passes.find((p) => !p.done);
|
|
128
|
+
const phase = state === "ready" ? "done" : firstPending ? firstPending.name : "done";
|
|
129
|
+
return {
|
|
130
|
+
workspace: root, exists: true, kind, state, phase, passes, units,
|
|
131
|
+
script, validation, errors, updated: manifest.updated ?? null,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function unitStr(u) {
|
|
135
|
+
const base = `${u.done}/${u.total}`;
|
|
136
|
+
return u.failed > 0 ? `${base} (${u.failed} failed)` : base;
|
|
137
|
+
}
|
|
138
|
+
function humanLines(s) {
|
|
139
|
+
if (!s.exists)
|
|
140
|
+
return [`no ingest workspace at ${s.workspace}`];
|
|
141
|
+
const head = `${s.kind} ingest: ${s.state} (phase=${s.phase})`;
|
|
142
|
+
const passLine = s.passes.map((p) => `${p.name} ${p.unit ? unitStr(p.unit) : p.done ? "✓" : "-"}`).join(" ");
|
|
143
|
+
const lines = [head, passLine];
|
|
144
|
+
if (s.validation)
|
|
145
|
+
lines.push(`validation: ${s.validation.ok ? "ok" : `${s.validation.errors} errors`}, ${s.validation.warnings} warnings`);
|
|
146
|
+
if (s.state === "failed")
|
|
147
|
+
lines.push(`${s.errors.length} failed unit(s); rerun \`scriptctl ingest\` to resume`);
|
|
148
|
+
return lines;
|
|
149
|
+
}
|
|
150
|
+
export function commandIngestStatus(opts) {
|
|
151
|
+
const workspacePath = strOf(opts["workspace_path"] || "workspace");
|
|
152
|
+
const status = deriveIngestStatus(workspacePath);
|
|
153
|
+
return [{ result: humanLines(status), status }, EXIT_OK];
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/usecases/ingest/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ContextData } from "../../domain/ingest/video-aggregate.js";
|
|
2
|
+
import type { VideoEpisodeDoc } from "../../domain/ingest/video-records.js";
|
|
3
|
+
import type { LlmTaskExecutor } from "../../llm/types.js";
|
|
4
|
+
export interface RosterMember {
|
|
5
|
+
canonical: string;
|
|
6
|
+
aliases: string[];
|
|
7
|
+
episodes: number[];
|
|
8
|
+
anchor: string;
|
|
9
|
+
role: string;
|
|
10
|
+
appearance: string;
|
|
11
|
+
}
|
|
12
|
+
export interface RosterResult {
|
|
13
|
+
context: ContextData;
|
|
14
|
+
contextMd: string;
|
|
15
|
+
roster: RosterMember[];
|
|
16
|
+
aliasToCanon: Record<string, string>;
|
|
17
|
+
rosterStates: Record<string, Record<string, string>>;
|
|
18
|
+
reviewMd: string;
|
|
19
|
+
}
|
|
20
|
+
interface Opts {
|
|
21
|
+
executor: LlmTaskExecutor;
|
|
22
|
+
concurrency?: number;
|
|
23
|
+
signal?: AbortSignal;
|
|
24
|
+
}
|
|
25
|
+
export declare function runRosterMerge(docs: VideoEpisodeDoc[], opts: Opts): Promise<RosterResult>;
|
|
26
|
+
export {};
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video-pass3.js","sourceRoot":"","sources":["../../../src/usecases/ingest/video-pass3.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { LlmTaskExecutor } from "../../llm/types.js";
|
|
2
|
+
export interface VideoIngestOptions {
|
|
3
|
+
sourcePath: string;
|
|
4
|
+
workspacePath: string;
|
|
5
|
+
executor: LlmTaskExecutor;
|
|
6
|
+
concurrency?: number;
|
|
7
|
+
videoConcurrency?: number;
|
|
8
|
+
fps?: number;
|
|
9
|
+
force?: boolean;
|
|
10
|
+
signal?: AbortSignal;
|
|
11
|
+
}
|
|
12
|
+
export interface VideoIngestReport {
|
|
13
|
+
workspacePath: string;
|
|
14
|
+
episodes: number;
|
|
15
|
+
reused: number;
|
|
16
|
+
roster: {
|
|
17
|
+
input: number;
|
|
18
|
+
merged: number;
|
|
19
|
+
};
|
|
20
|
+
assets: {
|
|
21
|
+
actors: number;
|
|
22
|
+
locations: number;
|
|
23
|
+
props: number;
|
|
24
|
+
};
|
|
25
|
+
scriptPath: string;
|
|
26
|
+
validation: {
|
|
27
|
+
ok: boolean;
|
|
28
|
+
errors: number;
|
|
29
|
+
warnings: number;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export declare function runVideoIngest(opts: VideoIngestOptions): Promise<VideoIngestReport>;
|