@lingjingai/scriptctl 0.63.14 → 0.63.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -1
- package/changes/0.63.15.md +15 -0
- package/dist/bin.js +1 -20844
- package/dist/chunk-YOCQDDQC.js +823 -0
- package/dist/cli.d.ts +214 -5
- package/dist/cli.js +1 -187
- package/dist/review-agent.js +60 -3593
- package/package.json +17 -9
- package/skills/scriptctl/SKILL.md +2 -0
- package/skills/scriptctl/references/ingest-workflow.md +4 -0
- package/skills/scriptctl/references/production-writing-standard.md +10 -1
- package/skills/scriptctl/references/state-reference-repair.md +8 -0
- package/dist/bin.d.ts +0 -2
- package/dist/bin.js.map +0 -7
- package/dist/cli/register-authoring.d.ts +0 -4
- package/dist/cli/register-authoring.js +0 -35
- package/dist/cli/register-authoring.js.map +0 -1
- package/dist/cli/register-review.d.ts +0 -3
- package/dist/cli/register-review.js +0 -20
- package/dist/cli/register-review.js.map +0 -1
- package/dist/cli/register-script.d.ts +0 -3
- package/dist/cli/register-script.js +0 -297
- package/dist/cli/register-script.js.map +0 -1
- package/dist/cli/register-tools.d.ts +0 -3
- package/dist/cli/register-tools.js +0 -23
- package/dist/cli/register-tools.js.map +0 -1
- package/dist/cli/register-workflows.d.ts +0 -4
- package/dist/cli/register-workflows.js +0 -108
- package/dist/cli/register-workflows.js.map +0 -1
- package/dist/cli/registry.d.ts +0 -14
- package/dist/cli/registry.js +0 -65
- package/dist/cli/registry.js.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/common.d.ts +0 -93
- package/dist/common.js +0 -240
- package/dist/common.js.map +0 -1
- package/dist/domain/authoring/apply.d.ts +0 -1
- package/dist/domain/authoring/apply.js +0 -2
- package/dist/domain/authoring/apply.js.map +0 -1
- package/dist/domain/authoring/export.d.ts +0 -1
- package/dist/domain/authoring/export.js +0 -2
- package/dist/domain/authoring/export.js.map +0 -1
- package/dist/domain/authoring/parser.d.ts +0 -2
- package/dist/domain/authoring/parser.js +0 -3
- package/dist/domain/authoring/parser.js.map +0 -1
- package/dist/domain/authoring/serializer.d.ts +0 -1
- package/dist/domain/authoring/serializer.js +0 -2
- package/dist/domain/authoring/serializer.js.map +0 -1
- package/dist/domain/authoring/shared/bracket.d.ts +0 -4
- package/dist/domain/authoring/shared/bracket.js +0 -95
- package/dist/domain/authoring/shared/bracket.js.map +0 -1
- package/dist/domain/authoring/shared/types.d.ts +0 -12
- package/dist/domain/authoring/shared/types.js +0 -2
- package/dist/domain/authoring/shared/types.js.map +0 -1
- package/dist/domain/authoring/types.d.ts +0 -2
- package/dist/domain/authoring/types.js +0 -3
- package/dist/domain/authoring/types.js.map +0 -1
- package/dist/domain/authoring/v3/apply.d.ts +0 -33
- package/dist/domain/authoring/v3/apply.js +0 -784
- package/dist/domain/authoring/v3/apply.js.map +0 -1
- package/dist/domain/authoring/v3/export.d.ts +0 -7
- package/dist/domain/authoring/v3/export.js +0 -85
- package/dist/domain/authoring/v3/export.js.map +0 -1
- package/dist/domain/authoring/v3/parser.d.ts +0 -3
- package/dist/domain/authoring/v3/parser.js +0 -823
- package/dist/domain/authoring/v3/parser.js.map +0 -1
- package/dist/domain/authoring/v3/serializer.d.ts +0 -2
- package/dist/domain/authoring/v3/serializer.js +0 -244
- package/dist/domain/authoring/v3/serializer.js.map +0 -1
- package/dist/domain/authoring/v3/types.d.ts +0 -76
- package/dist/domain/authoring/v3/types.js +0 -2
- package/dist/domain/authoring/v3/types.js.map +0 -1
- package/dist/domain/authoring/v4/apply.d.ts +0 -40
- package/dist/domain/authoring/v4/apply.js +0 -451
- package/dist/domain/authoring/v4/apply.js.map +0 -1
- package/dist/domain/authoring/v4/parser.d.ts +0 -2
- package/dist/domain/authoring/v4/parser.js +0 -729
- package/dist/domain/authoring/v4/parser.js.map +0 -1
- package/dist/domain/authoring/v4/serializer.d.ts +0 -6
- package/dist/domain/authoring/v4/serializer.js +0 -280
- package/dist/domain/authoring/v4/serializer.js.map +0 -1
- package/dist/domain/authoring/v4/types.d.ts +0 -50
- package/dist/domain/authoring/v4/types.js +0 -2
- package/dist/domain/authoring/v4/types.js.map +0 -1
- package/dist/domain/creative-draft/compose.d.ts +0 -18
- package/dist/domain/creative-draft/compose.js +0 -448
- package/dist/domain/creative-draft/compose.js.map +0 -1
- package/dist/domain/ingest/apply-plan.d.ts +0 -23
- package/dist/domain/ingest/apply-plan.js +0 -210
- package/dist/domain/ingest/apply-plan.js.map +0 -1
- package/dist/domain/ingest/assembler.d.ts +0 -65
- package/dist/domain/ingest/assembler.js +0 -263
- package/dist/domain/ingest/assembler.js.map +0 -1
- package/dist/domain/ingest/asset-audit.d.ts +0 -50
- package/dist/domain/ingest/asset-audit.js +0 -196
- package/dist/domain/ingest/asset-audit.js.map +0 -1
- package/dist/domain/ingest/chunker.d.ts +0 -9
- package/dist/domain/ingest/chunker.js +0 -49
- package/dist/domain/ingest/chunker.js.map +0 -1
- package/dist/domain/ingest/environment.d.ts +0 -3
- package/dist/domain/ingest/environment.js +0 -32
- package/dist/domain/ingest/environment.js.map +0 -1
- package/dist/domain/ingest/evidence.d.ts +0 -5
- package/dist/domain/ingest/evidence.js +0 -66
- package/dist/domain/ingest/evidence.js.map +0 -1
- package/dist/domain/ingest/govern.d.ts +0 -3
- package/dist/domain/ingest/govern.js +0 -157
- package/dist/domain/ingest/govern.js.map +0 -1
- package/dist/domain/ingest/jsonl-parser.d.ts +0 -6
- package/dist/domain/ingest/jsonl-parser.js +0 -204
- package/dist/domain/ingest/jsonl-parser.js.map +0 -1
- package/dist/domain/ingest/markdown-parser.d.ts +0 -6
- package/dist/domain/ingest/markdown-parser.js +0 -187
- package/dist/domain/ingest/markdown-parser.js.map +0 -1
- package/dist/domain/ingest/production-validation.d.ts +0 -8
- package/dist/domain/ingest/production-validation.js +0 -37
- package/dist/domain/ingest/production-validation.js.map +0 -1
- package/dist/domain/ingest/records.d.ts +0 -72
- package/dist/domain/ingest/records.js +0 -10
- package/dist/domain/ingest/records.js.map +0 -1
- package/dist/domain/ingest/renumber.d.ts +0 -14
- package/dist/domain/ingest/renumber.js +0 -130
- package/dist/domain/ingest/renumber.js.map +0 -1
- package/dist/domain/ingest/serial-context.d.ts +0 -93
- package/dist/domain/ingest/serial-context.js +0 -355
- package/dist/domain/ingest/serial-context.js.map +0 -1
- package/dist/domain/ingest/state-identity.d.ts +0 -2
- package/dist/domain/ingest/state-identity.js +0 -3
- package/dist/domain/ingest/state-identity.js.map +0 -1
- package/dist/domain/ingest/state-reconcile.d.ts +0 -12
- package/dist/domain/ingest/state-reconcile.js +0 -92
- package/dist/domain/ingest/state-reconcile.js.map +0 -1
- package/dist/domain/ingest/validation.d.ts +0 -1
- package/dist/domain/ingest/validation.js +0 -2
- package/dist/domain/ingest/validation.js.map +0 -1
- package/dist/domain/ingest/video-apply.d.ts +0 -4
- package/dist/domain/ingest/video-apply.js +0 -128
- package/dist/domain/ingest/video-apply.js.map +0 -1
- package/dist/domain/ingest/video-context.d.ts +0 -64
- package/dist/domain/ingest/video-context.js +0 -480
- package/dist/domain/ingest/video-context.js.map +0 -1
- package/dist/domain/ingest/video-records.d.ts +0 -57
- package/dist/domain/ingest/video-records.js +0 -9
- package/dist/domain/ingest/video-records.js.map +0 -1
- package/dist/domain/ingest/video-serial-md.d.ts +0 -81
- package/dist/domain/ingest/video-serial-md.js +0 -297
- package/dist/domain/ingest/video-serial-md.js.map +0 -1
- package/dist/domain/ingest/video-source-evolution.d.ts +0 -25
- package/dist/domain/ingest/video-source-evolution.js +0 -40
- package/dist/domain/ingest/video-source-evolution.js.map +0 -1
- package/dist/domain/ingest/video-state-evidence.d.ts +0 -66
- package/dist/domain/ingest/video-state-evidence.js +0 -385
- package/dist/domain/ingest/video-state-evidence.js.map +0 -1
- package/dist/domain/ingest/video-timestamp.d.ts +0 -8
- package/dist/domain/ingest/video-timestamp.js +0 -26
- package/dist/domain/ingest/video-timestamp.js.map +0 -1
- package/dist/domain/loom/checkpointer.d.ts +0 -3
- package/dist/domain/loom/checkpointer.js +0 -30
- package/dist/domain/loom/checkpointer.js.map +0 -1
- package/dist/domain/loom/index.d.ts +0 -45
- package/dist/domain/loom/index.js +0 -277
- package/dist/domain/loom/index.js.map +0 -1
- package/dist/domain/loom/types.d.ts +0 -101
- package/dist/domain/loom/types.js +0 -2
- package/dist/domain/loom/types.js.map +0 -1
- package/dist/domain/script/address.d.ts +0 -1
- package/dist/domain/script/address.js +0 -2
- package/dist/domain/script/address.js.map +0 -1
- package/dist/domain/script/dispatch.d.ts +0 -18
- package/dist/domain/script/dispatch.js +0 -55
- package/dist/domain/script/dispatch.js.map +0 -1
- package/dist/domain/script/lookups.d.ts +0 -1
- package/dist/domain/script/lookups.js +0 -2
- package/dist/domain/script/lookups.js.map +0 -1
- package/dist/domain/script/migrations/registry.d.ts +0 -4
- package/dist/domain/script/migrations/registry.js +0 -76
- package/dist/domain/script/migrations/registry.js.map +0 -1
- package/dist/domain/script/migrations/types.d.ts +0 -17
- package/dist/domain/script/migrations/types.js +0 -2
- package/dist/domain/script/migrations/types.js.map +0 -1
- package/dist/domain/script/migrations/v3-to-v4.d.ts +0 -3
- package/dist/domain/script/migrations/v3-to-v4.js +0 -57
- package/dist/domain/script/migrations/v3-to-v4.js.map +0 -1
- package/dist/domain/script/names.d.ts +0 -1
- package/dist/domain/script/names.js +0 -2
- package/dist/domain/script/names.js.map +0 -1
- package/dist/domain/script/parse.d.ts +0 -1
- package/dist/domain/script/parse.js +0 -2
- package/dist/domain/script/parse.js.map +0 -1
- package/dist/domain/script/patch/apply.d.ts +0 -1
- package/dist/domain/script/patch/apply.js +0 -2
- package/dist/domain/script/patch/apply.js.map +0 -1
- package/dist/domain/script/patch/helpers.d.ts +0 -1
- package/dist/domain/script/patch/helpers.js +0 -2
- package/dist/domain/script/patch/helpers.js.map +0 -1
- package/dist/domain/script/patch/inline-speaker.d.ts +0 -1
- package/dist/domain/script/patch/inline-speaker.js +0 -2
- package/dist/domain/script/patch/inline-speaker.js.map +0 -1
- package/dist/domain/script/patch/ops-action.d.ts +0 -1
- package/dist/domain/script/patch/ops-action.js +0 -2
- package/dist/domain/script/patch/ops-action.js.map +0 -1
- package/dist/domain/script/patch/ops-asset.d.ts +0 -1
- package/dist/domain/script/patch/ops-asset.js +0 -2
- package/dist/domain/script/patch/ops-asset.js.map +0 -1
- package/dist/domain/script/patch/ops-dialogue.d.ts +0 -1
- package/dist/domain/script/patch/ops-dialogue.js +0 -2
- package/dist/domain/script/patch/ops-dialogue.js.map +0 -1
- package/dist/domain/script/patch/ops-extend.d.ts +0 -1
- package/dist/domain/script/patch/ops-extend.js +0 -2
- package/dist/domain/script/patch/ops-extend.js.map +0 -1
- package/dist/domain/script/patch/ops-meta.d.ts +0 -1
- package/dist/domain/script/patch/ops-meta.js +0 -2
- package/dist/domain/script/patch/ops-meta.js.map +0 -1
- package/dist/domain/script/patch/ops-scene.d.ts +0 -1
- package/dist/domain/script/patch/ops-scene.js +0 -2
- package/dist/domain/script/patch/ops-scene.js.map +0 -1
- package/dist/domain/script/patch/ops-state.d.ts +0 -1
- package/dist/domain/script/patch/ops-state.js +0 -2
- package/dist/domain/script/patch/ops-state.js.map +0 -1
- package/dist/domain/script/patch/registry.d.ts +0 -1
- package/dist/domain/script/patch/registry.js +0 -2
- package/dist/domain/script/patch/registry.js.map +0 -1
- package/dist/domain/script/patch/types.d.ts +0 -1
- package/dist/domain/script/patch/types.js +0 -2
- package/dist/domain/script/patch/types.js.map +0 -1
- package/dist/domain/script/refs.d.ts +0 -1
- package/dist/domain/script/refs.js +0 -2
- package/dist/domain/script/refs.js.map +0 -1
- package/dist/domain/script/scene-refs.d.ts +0 -1
- package/dist/domain/script/scene-refs.js +0 -2
- package/dist/domain/script/scene-refs.js.map +0 -1
- package/dist/domain/script/schema.d.ts +0 -1
- package/dist/domain/script/schema.js +0 -2
- package/dist/domain/script/schema.js.map +0 -1
- package/dist/domain/script/selector.d.ts +0 -1
- package/dist/domain/script/selector.js +0 -2
- package/dist/domain/script/selector.js.map +0 -1
- package/dist/domain/script/shared/regex.d.ts +0 -2
- package/dist/domain/script/shared/regex.js +0 -7
- package/dist/domain/script/shared/regex.js.map +0 -1
- package/dist/domain/script/shared/types.d.ts +0 -1
- package/dist/domain/script/shared/types.js +0 -5
- package/dist/domain/script/shared/types.js.map +0 -1
- package/dist/domain/script/shared/validation.d.ts +0 -1
- package/dist/domain/script/shared/validation.js +0 -3
- package/dist/domain/script/shared/validation.js.map +0 -1
- package/dist/domain/script/shared.d.ts +0 -15
- package/dist/domain/script/shared.js +0 -35
- package/dist/domain/script/shared.js.map +0 -1
- package/dist/domain/script/text-util.d.ts +0 -7
- package/dist/domain/script/text-util.js +0 -95
- package/dist/domain/script/text-util.js.map +0 -1
- package/dist/domain/script/timestamp.d.ts +0 -1
- package/dist/domain/script/timestamp.js +0 -3
- package/dist/domain/script/timestamp.js.map +0 -1
- package/dist/domain/script/types.d.ts +0 -1
- package/dist/domain/script/types.js +0 -2
- package/dist/domain/script/types.js.map +0 -1
- package/dist/domain/script/v3/address.d.ts +0 -32
- package/dist/domain/script/v3/address.js +0 -136
- package/dist/domain/script/v3/address.js.map +0 -1
- package/dist/domain/script/v3/lookups.d.ts +0 -33
- package/dist/domain/script/v3/lookups.js +0 -316
- package/dist/domain/script/v3/lookups.js.map +0 -1
- package/dist/domain/script/v3/ordinal.d.ts +0 -8
- package/dist/domain/script/v3/ordinal.js +0 -91
- package/dist/domain/script/v3/ordinal.js.map +0 -1
- package/dist/domain/script/v3/parse.d.ts +0 -3
- package/dist/domain/script/v3/parse.js +0 -164
- package/dist/domain/script/v3/parse.js.map +0 -1
- package/dist/domain/script/v3/patch/apply.d.ts +0 -2
- package/dist/domain/script/v3/patch/apply.js +0 -31
- package/dist/domain/script/v3/patch/apply.js.map +0 -1
- package/dist/domain/script/v3/patch/helpers.d.ts +0 -15
- package/dist/domain/script/v3/patch/helpers.js +0 -155
- package/dist/domain/script/v3/patch/helpers.js.map +0 -1
- package/dist/domain/script/v3/patch/inline-speaker.d.ts +0 -2
- package/dist/domain/script/v3/patch/inline-speaker.js +0 -50
- package/dist/domain/script/v3/patch/inline-speaker.js.map +0 -1
- package/dist/domain/script/v3/patch/ops-action.d.ts +0 -12
- package/dist/domain/script/v3/patch/ops-action.js +0 -355
- package/dist/domain/script/v3/patch/ops-action.js.map +0 -1
- package/dist/domain/script/v3/patch/ops-asset.d.ts +0 -14
- package/dist/domain/script/v3/patch/ops-asset.js +0 -347
- package/dist/domain/script/v3/patch/ops-asset.js.map +0 -1
- package/dist/domain/script/v3/patch/ops-dialogue.d.ts +0 -2
- package/dist/domain/script/v3/patch/ops-dialogue.js +0 -21
- package/dist/domain/script/v3/patch/ops-dialogue.js.map +0 -1
- package/dist/domain/script/v3/patch/ops-extend.d.ts +0 -8
- package/dist/domain/script/v3/patch/ops-extend.js +0 -122
- package/dist/domain/script/v3/patch/ops-extend.js.map +0 -1
- package/dist/domain/script/v3/patch/ops-meta.d.ts +0 -5
- package/dist/domain/script/v3/patch/ops-meta.js +0 -82
- package/dist/domain/script/v3/patch/ops-meta.js.map +0 -1
- package/dist/domain/script/v3/patch/ops-scene.d.ts +0 -6
- package/dist/domain/script/v3/patch/ops-scene.js +0 -351
- package/dist/domain/script/v3/patch/ops-scene.js.map +0 -1
- package/dist/domain/script/v3/patch/ops-state.d.ts +0 -8
- package/dist/domain/script/v3/patch/ops-state.js +0 -155
- package/dist/domain/script/v3/patch/ops-state.js.map +0 -1
- package/dist/domain/script/v3/patch/ops-timestamp.d.ts +0 -6
- package/dist/domain/script/v3/patch/ops-timestamp.js +0 -47
- package/dist/domain/script/v3/patch/ops-timestamp.js.map +0 -1
- package/dist/domain/script/v3/patch/registry.d.ts +0 -2
- package/dist/domain/script/v3/patch/registry.js +0 -56
- package/dist/domain/script/v3/patch/registry.js.map +0 -1
- package/dist/domain/script/v3/patch/types.d.ts +0 -10
- package/dist/domain/script/v3/patch/types.js +0 -2
- package/dist/domain/script/v3/patch/types.js.map +0 -1
- package/dist/domain/script/v3/refs.d.ts +0 -4
- package/dist/domain/script/v3/refs.js +0 -64
- package/dist/domain/script/v3/refs.js.map +0 -1
- package/dist/domain/script/v3/scene-refs.d.ts +0 -3
- package/dist/domain/script/v3/scene-refs.js +0 -35
- package/dist/domain/script/v3/scene-refs.js.map +0 -1
- package/dist/domain/script/v3/schema.d.ts +0 -6
- package/dist/domain/script/v3/schema.js +0 -58
- package/dist/domain/script/v3/schema.js.map +0 -1
- package/dist/domain/script/v3/selector.d.ts +0 -44
- package/dist/domain/script/v3/selector.js +0 -178
- package/dist/domain/script/v3/selector.js.map +0 -1
- package/dist/domain/script/v3/types.d.ts +0 -106
- package/dist/domain/script/v3/types.js +0 -2
- package/dist/domain/script/v3/types.js.map +0 -1
- package/dist/domain/script/v3/validation.d.ts +0 -2
- package/dist/domain/script/v3/validation.js +0 -2
- package/dist/domain/script/v3/validation.js.map +0 -1
- package/dist/domain/script/v4/address.d.ts +0 -61
- package/dist/domain/script/v4/address.js +0 -99
- package/dist/domain/script/v4/address.js.map +0 -1
- package/dist/domain/script/v4/factory.d.ts +0 -2
- package/dist/domain/script/v4/factory.js +0 -13
- package/dist/domain/script/v4/factory.js.map +0 -1
- package/dist/domain/script/v4/from-v3.d.ts +0 -29
- package/dist/domain/script/v4/from-v3.js +0 -307
- package/dist/domain/script/v4/from-v3.js.map +0 -1
- package/dist/domain/script/v4/ids.d.ts +0 -5
- package/dist/domain/script/v4/ids.js +0 -41
- package/dist/domain/script/v4/ids.js.map +0 -1
- package/dist/domain/script/v4/ordinal.d.ts +0 -3
- package/dist/domain/script/v4/ordinal.js +0 -66
- package/dist/domain/script/v4/ordinal.js.map +0 -1
- package/dist/domain/script/v4/parse.d.ts +0 -5
- package/dist/domain/script/v4/parse.js +0 -196
- package/dist/domain/script/v4/parse.js.map +0 -1
- package/dist/domain/script/v4/patch/apply.d.ts +0 -3
- package/dist/domain/script/v4/patch/apply.js +0 -24
- package/dist/domain/script/v4/patch/apply.js.map +0 -1
- package/dist/domain/script/v4/patch/helpers.d.ts +0 -32
- package/dist/domain/script/v4/patch/helpers.js +0 -138
- package/dist/domain/script/v4/patch/helpers.js.map +0 -1
- package/dist/domain/script/v4/patch/ops-action.d.ts +0 -13
- package/dist/domain/script/v4/patch/ops-action.js +0 -351
- package/dist/domain/script/v4/patch/ops-action.js.map +0 -1
- package/dist/domain/script/v4/patch/ops-asset.d.ts +0 -17
- package/dist/domain/script/v4/patch/ops-asset.js +0 -556
- package/dist/domain/script/v4/patch/ops-asset.js.map +0 -1
- package/dist/domain/script/v4/patch/ops-extend.d.ts +0 -11
- package/dist/domain/script/v4/patch/ops-extend.js +0 -103
- package/dist/domain/script/v4/patch/ops-extend.js.map +0 -1
- package/dist/domain/script/v4/patch/ops-meta.d.ts +0 -5
- package/dist/domain/script/v4/patch/ops-meta.js +0 -49
- package/dist/domain/script/v4/patch/ops-meta.js.map +0 -1
- package/dist/domain/script/v4/patch/ops-scene-ref.d.ts +0 -3
- package/dist/domain/script/v4/patch/ops-scene-ref.js +0 -74
- package/dist/domain/script/v4/patch/ops-scene-ref.js.map +0 -1
- package/dist/domain/script/v4/patch/ops-structure.d.ts +0 -6
- package/dist/domain/script/v4/patch/ops-structure.js +0 -236
- package/dist/domain/script/v4/patch/ops-structure.js.map +0 -1
- package/dist/domain/script/v4/patch/ops-timestamp.d.ts +0 -6
- package/dist/domain/script/v4/patch/ops-timestamp.js +0 -40
- package/dist/domain/script/v4/patch/ops-timestamp.js.map +0 -1
- package/dist/domain/script/v4/patch/registry.d.ts +0 -2
- package/dist/domain/script/v4/patch/registry.js +0 -53
- package/dist/domain/script/v4/patch/registry.js.map +0 -1
- package/dist/domain/script/v4/patch/schema.d.ts +0 -7
- package/dist/domain/script/v4/patch/schema.js +0 -77
- package/dist/domain/script/v4/patch/schema.js.map +0 -1
- package/dist/domain/script/v4/patch/types.d.ts +0 -10
- package/dist/domain/script/v4/patch/types.js +0 -2
- package/dist/domain/script/v4/patch/types.js.map +0 -1
- package/dist/domain/script/v4/selector.d.ts +0 -11
- package/dist/domain/script/v4/selector.js +0 -124
- package/dist/domain/script/v4/selector.js.map +0 -1
- package/dist/domain/script/v4/types.d.ts +0 -120
- package/dist/domain/script/v4/types.js +0 -2
- package/dist/domain/script/v4/types.js.map +0 -1
- package/dist/domain/script/v4/validation.d.ts +0 -2
- package/dist/domain/script/v4/validation.js +0 -2
- package/dist/domain/script/v4/validation.js.map +0 -1
- package/dist/failures.d.ts +0 -58
- package/dist/failures.js +0 -96
- package/dist/failures.js.map +0 -1
- package/dist/infra/converters.d.ts +0 -9
- package/dist/infra/converters.js +0 -689
- package/dist/infra/converters.js.map +0 -1
- package/dist/infra/env.d.ts +0 -2
- package/dist/infra/env.js +0 -81
- package/dist/infra/env.js.map +0 -1
- package/dist/infra/episode-title.d.ts +0 -4
- package/dist/infra/episode-title.js +0 -129
- package/dist/infra/episode-title.js.map +0 -1
- package/dist/infra/ingest/review-renderer.d.ts +0 -1
- package/dist/infra/ingest/review-renderer.js +0 -440
- package/dist/infra/ingest/review-renderer.js.map +0 -1
- package/dist/infra/ingest/source-resolver.d.ts +0 -21
- package/dist/infra/ingest/source-resolver.js +0 -51
- package/dist/infra/ingest/source-resolver.js.map +0 -1
- package/dist/infra/ingest/text-reader.d.ts +0 -3
- package/dist/infra/ingest/text-reader.js +0 -27
- package/dist/infra/ingest/text-reader.js.map +0 -1
- package/dist/infra/ingest/video-discovery.d.ts +0 -8
- package/dist/infra/ingest/video-discovery.js +0 -69
- package/dist/infra/ingest/video-discovery.js.map +0 -1
- package/dist/infra/ingest/video-source-snapshot.d.ts +0 -4
- package/dist/infra/ingest/video-source-snapshot.js +0 -47
- package/dist/infra/ingest/video-source-snapshot.js.map +0 -1
- package/dist/infra/ingest/video-state-evidence.d.ts +0 -14
- package/dist/infra/ingest/video-state-evidence.js +0 -140
- package/dist/infra/ingest/video-state-evidence.js.map +0 -1
- package/dist/infra/ingest/video-transcode.d.ts +0 -7
- package/dist/infra/ingest/video-transcode.js +0 -98
- package/dist/infra/ingest/video-transcode.js.map +0 -1
- package/dist/infra/ingest/workspace-lock.d.ts +0 -1
- package/dist/infra/ingest/workspace-lock.js +0 -32
- package/dist/infra/ingest/workspace-lock.js.map +0 -1
- package/dist/infra/ingest/workspace-store.d.ts +0 -18
- package/dist/infra/ingest/workspace-store.js +0 -70
- package/dist/infra/ingest/workspace-store.js.map +0 -1
- package/dist/infra/llm/anthropic-model.d.ts +0 -11
- package/dist/infra/llm/anthropic-model.js +0 -130
- package/dist/infra/llm/anthropic-model.js.map +0 -1
- package/dist/infra/llm/doubao-model.d.ts +0 -60
- package/dist/infra/llm/doubao-model.js +0 -249
- package/dist/infra/llm/doubao-model.js.map +0 -1
- package/dist/infra/llm/failure-mapping.d.ts +0 -6
- package/dist/infra/llm/failure-mapping.js +0 -146
- package/dist/infra/llm/failure-mapping.js.map +0 -1
- package/dist/infra/llm/gemini-upload.d.ts +0 -13
- package/dist/infra/llm/gemini-upload.js +0 -138
- package/dist/infra/llm/gemini-upload.js.map +0 -1
- package/dist/infra/llm/gemini-video-model.d.ts +0 -50
- package/dist/infra/llm/gemini-video-model.js +0 -371
- package/dist/infra/llm/gemini-video-model.js.map +0 -1
- package/dist/infra/llm/openai-compatible-model.d.ts +0 -14
- package/dist/infra/llm/openai-compatible-model.js +0 -207
- package/dist/infra/llm/openai-compatible-model.js.map +0 -1
- package/dist/infra/llm/retry.d.ts +0 -8
- package/dist/infra/llm/retry.js +0 -41
- package/dist/infra/llm/retry.js.map +0 -1
- package/dist/infra/local-script-output-store.d.ts +0 -43
- package/dist/infra/local-script-output-store.js +0 -168
- package/dist/infra/local-script-output-store.js.map +0 -1
- package/dist/infra/script-output-api.d.ts +0 -50
- package/dist/infra/script-output-api.js +0 -251
- package/dist/infra/script-output-api.js.map +0 -1
- package/dist/infra/script-output-store.d.ts +0 -152
- package/dist/infra/script-output-store.js +0 -114
- package/dist/infra/script-output-store.js.map +0 -1
- package/dist/infra/script-working-copy.d.ts +0 -23
- package/dist/infra/script-working-copy.js +0 -157
- package/dist/infra/script-working-copy.js.map +0 -1
- package/dist/infra/storage.d.ts +0 -35
- package/dist/infra/storage.js +0 -91
- package/dist/infra/storage.js.map +0 -1
- package/dist/llm/composition.d.ts +0 -5
- package/dist/llm/composition.js +0 -5
- package/dist/llm/composition.js.map +0 -1
- package/dist/llm/config.d.ts +0 -28
- package/dist/llm/config.js +0 -231
- package/dist/llm/config.js.map +0 -1
- package/dist/llm/registry.d.ts +0 -43
- package/dist/llm/registry.js +0 -69
- package/dist/llm/registry.js.map +0 -1
- package/dist/llm/router.d.ts +0 -46
- package/dist/llm/router.js +0 -512
- package/dist/llm/router.js.map +0 -1
- package/dist/llm/tasks/ingest/arc-summary.d.ts +0 -8
- package/dist/llm/tasks/ingest/arc-summary.js +0 -26
- package/dist/llm/tasks/ingest/arc-summary.js.map +0 -1
- package/dist/llm/tasks/ingest/asset-audit.d.ts +0 -6
- package/dist/llm/tasks/ingest/asset-audit.js +0 -158
- package/dist/llm/tasks/ingest/asset-audit.js.map +0 -1
- package/dist/llm/tasks/ingest/asset-curate.d.ts +0 -13
- package/dist/llm/tasks/ingest/asset-curate.js +0 -45
- package/dist/llm/tasks/ingest/asset-curate.js.map +0 -1
- package/dist/llm/tasks/ingest/asset-extract.d.ts +0 -12
- package/dist/llm/tasks/ingest/asset-extract.js +0 -51
- package/dist/llm/tasks/ingest/asset-extract.js.map +0 -1
- package/dist/llm/tasks/ingest/asset-govern.d.ts +0 -22
- package/dist/llm/tasks/ingest/asset-govern.js +0 -143
- package/dist/llm/tasks/ingest/asset-govern.js.map +0 -1
- package/dist/llm/tasks/ingest/body-start.d.ts +0 -10
- package/dist/llm/tasks/ingest/body-start.js +0 -41
- package/dist/llm/tasks/ingest/body-start.js.map +0 -1
- package/dist/llm/tasks/ingest/episode-assets.d.ts +0 -29
- package/dist/llm/tasks/ingest/episode-assets.js +0 -282
- package/dist/llm/tasks/ingest/episode-assets.js.map +0 -1
- package/dist/llm/tasks/ingest/mention-resolve.d.ts +0 -9
- package/dist/llm/tasks/ingest/mention-resolve.js +0 -39
- package/dist/llm/tasks/ingest/mention-resolve.js.map +0 -1
- package/dist/llm/tasks/ingest/name-fix.d.ts +0 -9
- package/dist/llm/tasks/ingest/name-fix.js +0 -56
- package/dist/llm/tasks/ingest/name-fix.js.map +0 -1
- package/dist/llm/tasks/ingest/state-reconcile.d.ts +0 -8
- package/dist/llm/tasks/ingest/state-reconcile.js +0 -44
- package/dist/llm/tasks/ingest/state-reconcile.js.map +0 -1
- package/dist/llm/tasks/ingest/text-normalize.d.ts +0 -10
- package/dist/llm/tasks/ingest/text-normalize.js +0 -122
- package/dist/llm/tasks/ingest/text-normalize.js.map +0 -1
- package/dist/llm/tasks/ingest/video-serial.d.ts +0 -24
- package/dist/llm/tasks/ingest/video-serial.js +0 -416
- package/dist/llm/tasks/ingest/video-serial.js.map +0 -1
- package/dist/llm/tasks/schemas.d.ts +0 -9
- package/dist/llm/tasks/schemas.js +0 -466
- package/dist/llm/tasks/schemas.js.map +0 -1
- package/dist/llm/types.d.ts +0 -178
- package/dist/llm/types.js +0 -44
- package/dist/llm/types.js.map +0 -1
- package/dist/output.d.ts +0 -3
- package/dist/output.js +0 -94
- package/dist/output.js.map +0 -1
- package/dist/package-root.d.ts +0 -2
- package/dist/package-root.js +0 -38
- package/dist/package-root.js.map +0 -1
- package/dist/review-agent.js.map +0 -7
- package/dist/usecases/changelog.d.ts +0 -9
- package/dist/usecases/changelog.js +0 -134
- package/dist/usecases/changelog.js.map +0 -1
- package/dist/usecases/doctor.d.ts +0 -2
- package/dist/usecases/doctor.js +0 -231
- package/dist/usecases/doctor.js.map +0 -1
- package/dist/usecases/ingest/body-start.d.ts +0 -8
- package/dist/usecases/ingest/body-start.js +0 -36
- package/dist/usecases/ingest/body-start.js.map +0 -1
- package/dist/usecases/ingest/command.d.ts +0 -5
- package/dist/usecases/ingest/command.js +0 -183
- package/dist/usecases/ingest/command.js.map +0 -1
- package/dist/usecases/ingest/failure.d.ts +0 -26
- package/dist/usecases/ingest/failure.js +0 -153
- package/dist/usecases/ingest/failure.js.map +0 -1
- package/dist/usecases/ingest/fanout.d.ts +0 -10
- package/dist/usecases/ingest/fanout.js +0 -23
- package/dist/usecases/ingest/fanout.js.map +0 -1
- package/dist/usecases/ingest/final-asset-audit.d.ts +0 -39
- package/dist/usecases/ingest/final-asset-audit.js +0 -88
- package/dist/usecases/ingest/final-asset-audit.js.map +0 -1
- package/dist/usecases/ingest/generate-video-state-evidence.d.ts +0 -23
- package/dist/usecases/ingest/generate-video-state-evidence.js +0 -124
- package/dist/usecases/ingest/generate-video-state-evidence.js.map +0 -1
- package/dist/usecases/ingest/pass4-mention-resolve.d.ts +0 -11
- package/dist/usecases/ingest/pass4-mention-resolve.js +0 -52
- package/dist/usecases/ingest/pass4-mention-resolve.js.map +0 -1
- package/dist/usecases/ingest/pass5-extract.d.ts +0 -7
- package/dist/usecases/ingest/pass5-extract.js +0 -51
- package/dist/usecases/ingest/pass5-extract.js.map +0 -1
- package/dist/usecases/ingest/pass5-govern.d.ts +0 -13
- package/dist/usecases/ingest/pass5-govern.js +0 -157
- package/dist/usecases/ingest/pass5-govern.js.map +0 -1
- package/dist/usecases/ingest/pipeline.d.ts +0 -28
- package/dist/usecases/ingest/pipeline.js +0 -335
- package/dist/usecases/ingest/pipeline.js.map +0 -1
- package/dist/usecases/ingest/publish-command.d.ts +0 -1
- package/dist/usecases/ingest/publish-command.js +0 -4
- package/dist/usecases/ingest/publish-command.js.map +0 -1
- package/dist/usecases/ingest/serial-govern.d.ts +0 -40
- package/dist/usecases/ingest/serial-govern.js +0 -488
- package/dist/usecases/ingest/serial-govern.js.map +0 -1
- package/dist/usecases/ingest/skip-video-episode.d.ts +0 -4
- package/dist/usecases/ingest/skip-video-episode.js +0 -120
- package/dist/usecases/ingest/skip-video-episode.js.map +0 -1
- package/dist/usecases/ingest/status.d.ts +0 -61
- package/dist/usecases/ingest/status.js +0 -347
- package/dist/usecases/ingest/status.js.map +0 -1
- package/dist/usecases/ingest/timings.d.ts +0 -51
- package/dist/usecases/ingest/timings.js +0 -68
- package/dist/usecases/ingest/timings.js.map +0 -1
- package/dist/usecases/ingest/usage-report.d.ts +0 -125
- package/dist/usecases/ingest/usage-report.js +0 -248
- package/dist/usecases/ingest/usage-report.js.map +0 -1
- package/dist/usecases/ingest/video-pipeline.d.ts +0 -81
- package/dist/usecases/ingest/video-pipeline.js +0 -548
- package/dist/usecases/ingest/video-pipeline.js.map +0 -1
- package/dist/usecases/ingest/video-skip-state.d.ts +0 -29
- package/dist/usecases/ingest/video-skip-state.js +0 -148
- package/dist/usecases/ingest/video-skip-state.js.map +0 -1
- package/dist/usecases/ingest/view-command.d.ts +0 -4
- package/dist/usecases/ingest/view-command.js +0 -67
- package/dist/usecases/ingest/view-command.js.map +0 -1
- package/dist/usecases/ingest/view-server.d.ts +0 -29
- package/dist/usecases/ingest/view-server.js +0 -364
- package/dist/usecases/ingest/view-server.js.map +0 -1
- package/dist/usecases/script/action-span.d.ts +0 -10
- package/dist/usecases/script/action-span.js +0 -42
- package/dist/usecases/script/action-span.js.map +0 -1
- package/dist/usecases/script/actions.d.ts +0 -3
- package/dist/usecases/script/actions.js +0 -184
- package/dist/usecases/script/actions.js.map +0 -1
- package/dist/usecases/script/actor.d.ts +0 -3
- package/dist/usecases/script/actor.js +0 -26
- package/dist/usecases/script/actor.js.map +0 -1
- package/dist/usecases/script/actors.d.ts +0 -3
- package/dist/usecases/script/actors.js +0 -25
- package/dist/usecases/script/actors.js.map +0 -1
- package/dist/usecases/script/add-actor.d.ts +0 -3
- package/dist/usecases/script/add-actor.js +0 -13
- package/dist/usecases/script/add-actor.js.map +0 -1
- package/dist/usecases/script/add-episode.d.ts +0 -3
- package/dist/usecases/script/add-episode.js +0 -9
- package/dist/usecases/script/add-episode.js.map +0 -1
- package/dist/usecases/script/add-location.d.ts +0 -3
- package/dist/usecases/script/add-location.js +0 -11
- package/dist/usecases/script/add-location.js.map +0 -1
- package/dist/usecases/script/add-prop.d.ts +0 -3
- package/dist/usecases/script/add-prop.js +0 -11
- package/dist/usecases/script/add-prop.js.map +0 -1
- package/dist/usecases/script/alias.d.ts +0 -3
- package/dist/usecases/script/alias.js +0 -39
- package/dist/usecases/script/alias.js.map +0 -1
- package/dist/usecases/script/assets.d.ts +0 -3
- package/dist/usecases/script/assets.js +0 -46
- package/dist/usecases/script/assets.js.map +0 -1
- package/dist/usecases/script/audit-assets.d.ts +0 -4
- package/dist/usecases/script/audit-assets.js +0 -37
- package/dist/usecases/script/audit-assets.js.map +0 -1
- package/dist/usecases/script/command-constraints.d.ts +0 -38
- package/dist/usecases/script/command-constraints.js +0 -143
- package/dist/usecases/script/command-constraints.js.map +0 -1
- package/dist/usecases/script/compose-creative-draft.d.ts +0 -3
- package/dist/usecases/script/compose-creative-draft.js +0 -106
- package/dist/usecases/script/compose-creative-draft.js.map +0 -1
- package/dist/usecases/script/context.d.ts +0 -3
- package/dist/usecases/script/context.js +0 -52
- package/dist/usecases/script/context.js.map +0 -1
- package/dist/usecases/script/create.d.ts +0 -3
- package/dist/usecases/script/create.js +0 -27
- package/dist/usecases/script/create.js.map +0 -1
- package/dist/usecases/script/delete.d.ts +0 -3
- package/dist/usecases/script/delete.js +0 -88
- package/dist/usecases/script/delete.js.map +0 -1
- package/dist/usecases/script/describe.d.ts +0 -3
- package/dist/usecases/script/describe.js +0 -32
- package/dist/usecases/script/describe.js.map +0 -1
- package/dist/usecases/script/dialogue.d.ts +0 -3
- package/dist/usecases/script/dialogue.js +0 -30
- package/dist/usecases/script/dialogue.js.map +0 -1
- package/dist/usecases/script/dispatch.d.ts +0 -3
- package/dist/usecases/script/dispatch.js +0 -10
- package/dist/usecases/script/dispatch.js.map +0 -1
- package/dist/usecases/script/do.d.ts +0 -3
- package/dist/usecases/script/do.js +0 -186
- package/dist/usecases/script/do.js.map +0 -1
- package/dist/usecases/script/emotion.d.ts +0 -3
- package/dist/usecases/script/emotion.js +0 -24
- package/dist/usecases/script/emotion.js.map +0 -1
- package/dist/usecases/script/episodes.d.ts +0 -3
- package/dist/usecases/script/episodes.js +0 -62
- package/dist/usecases/script/episodes.js.map +0 -1
- package/dist/usecases/script/export-authoring.d.ts +0 -4
- package/dist/usecases/script/export-authoring.js +0 -326
- package/dist/usecases/script/export-authoring.js.map +0 -1
- package/dist/usecases/script/extend.d.ts +0 -3
- package/dist/usecases/script/extend.js +0 -94
- package/dist/usecases/script/extend.js.map +0 -1
- package/dist/usecases/script/ids.d.ts +0 -3
- package/dist/usecases/script/ids.js +0 -148
- package/dist/usecases/script/ids.js.map +0 -1
- package/dist/usecases/script/importance.d.ts +0 -3
- package/dist/usecases/script/importance.js +0 -16
- package/dist/usecases/script/importance.js.map +0 -1
- package/dist/usecases/script/insert.d.ts +0 -3
- package/dist/usecases/script/insert.js +0 -127
- package/dist/usecases/script/insert.js.map +0 -1
- package/dist/usecases/script/issues.d.ts +0 -3
- package/dist/usecases/script/issues.js +0 -35
- package/dist/usecases/script/issues.js.map +0 -1
- package/dist/usecases/script/lib.d.ts +0 -152
- package/dist/usecases/script/lib.js +0 -1654
- package/dist/usecases/script/lib.js.map +0 -1
- package/dist/usecases/script/locations.d.ts +0 -3
- package/dist/usecases/script/locations.js +0 -25
- package/dist/usecases/script/locations.js.map +0 -1
- package/dist/usecases/script/merge.d.ts +0 -3
- package/dist/usecases/script/merge.js +0 -43
- package/dist/usecases/script/merge.js.map +0 -1
- package/dist/usecases/script/migrate.d.ts +0 -3
- package/dist/usecases/script/migrate.js +0 -210
- package/dist/usecases/script/migrate.js.map +0 -1
- package/dist/usecases/script/move.d.ts +0 -3
- package/dist/usecases/script/move.js +0 -50
- package/dist/usecases/script/move.js.map +0 -1
- package/dist/usecases/script/parenthetical.d.ts +0 -3
- package/dist/usecases/script/parenthetical.js +0 -52
- package/dist/usecases/script/parenthetical.js.map +0 -1
- package/dist/usecases/script/props.d.ts +0 -3
- package/dist/usecases/script/props.js +0 -25
- package/dist/usecases/script/props.js.map +0 -1
- package/dist/usecases/script/refs.d.ts +0 -3
- package/dist/usecases/script/refs.js +0 -111
- package/dist/usecases/script/refs.js.map +0 -1
- package/dist/usecases/script/rename.d.ts +0 -3
- package/dist/usecases/script/rename.js +0 -35
- package/dist/usecases/script/rename.js.map +0 -1
- package/dist/usecases/script/replace.d.ts +0 -3
- package/dist/usecases/script/replace.js +0 -33
- package/dist/usecases/script/replace.js.map +0 -1
- package/dist/usecases/script/review.d.ts +0 -3
- package/dist/usecases/script/review.js +0 -187
- package/dist/usecases/script/review.js.map +0 -1
- package/dist/usecases/script/role.d.ts +0 -3
- package/dist/usecases/script/role.js +0 -16
- package/dist/usecases/script/role.js.map +0 -1
- package/dist/usecases/script/scenes.d.ts +0 -3
- package/dist/usecases/script/scenes.js +0 -66
- package/dist/usecases/script/scenes.js.map +0 -1
- package/dist/usecases/script/script-patch.d.ts +0 -3
- package/dist/usecases/script/script-patch.js +0 -321
- package/dist/usecases/script/script-patch.js.map +0 -1
- package/dist/usecases/script/script-validate.d.ts +0 -3
- package/dist/usecases/script/script-validate.js +0 -27
- package/dist/usecases/script/script-validate.js.map +0 -1
- package/dist/usecases/script/session.d.ts +0 -62
- package/dist/usecases/script/session.js +0 -567
- package/dist/usecases/script/session.js.map +0 -1
- package/dist/usecases/script/split.d.ts +0 -3
- package/dist/usecases/script/split.js +0 -41
- package/dist/usecases/script/split.js.map +0 -1
- package/dist/usecases/script/state-add.d.ts +0 -3
- package/dist/usecases/script/state-add.js +0 -22
- package/dist/usecases/script/state-add.js.map +0 -1
- package/dist/usecases/script/state-delete.d.ts +0 -3
- package/dist/usecases/script/state-delete.js +0 -22
- package/dist/usecases/script/state-delete.js.map +0 -1
- package/dist/usecases/script/state-rename.d.ts +0 -3
- package/dist/usecases/script/state-rename.js +0 -16
- package/dist/usecases/script/state-rename.js.map +0 -1
- package/dist/usecases/script/states.d.ts +0 -3
- package/dist/usecases/script/states.js +0 -197
- package/dist/usecases/script/states.js.map +0 -1
- package/dist/usecases/script/summary.d.ts +0 -3
- package/dist/usecases/script/summary.js +0 -72
- package/dist/usecases/script/summary.js.map +0 -1
- package/dist/usecases/script/synopsis-generate.d.ts +0 -115
- package/dist/usecases/script/synopsis-generate.js +0 -776
- package/dist/usecases/script/synopsis-generate.js.map +0 -1
- package/dist/usecases/script/synopsis.d.ts +0 -3
- package/dist/usecases/script/synopsis.js +0 -45
- package/dist/usecases/script/synopsis.js.map +0 -1
- package/dist/usecases/script/timestamp-filter.d.ts +0 -4
- package/dist/usecases/script/timestamp-filter.js +0 -55
- package/dist/usecases/script/timestamp-filter.js.map +0 -1
- package/dist/usecases/script/timestamp.d.ts +0 -3
- package/dist/usecases/script/timestamp.js +0 -11
- package/dist/usecases/script/timestamp.js.map +0 -1
- package/dist/usecases/script/transition.d.ts +0 -3
- package/dist/usecases/script/transition.js +0 -23
- package/dist/usecases/script/transition.js.map +0 -1
- package/dist/usecases/script/type.d.ts +0 -3
- package/dist/usecases/script/type.js +0 -23
- package/dist/usecases/script/type.js.map +0 -1
- package/dist/usecases/script/v3/mutations.d.ts +0 -2
- package/dist/usecases/script/v3/mutations.js +0 -5
- package/dist/usecases/script/v3/mutations.js.map +0 -1
- package/dist/usecases/script/v4/mutations.d.ts +0 -2
- package/dist/usecases/script/v4/mutations.js +0 -6
- package/dist/usecases/script/v4/mutations.js.map +0 -1
- package/dist/usecases/script/v4/queries.d.ts +0 -15
- package/dist/usecases/script/v4/queries.js +0 -196
- package/dist/usecases/script/v4/queries.js.map +0 -1
- package/dist/usecases/script/working-copy.d.ts +0 -5
- package/dist/usecases/script/working-copy.js +0 -399
- package/dist/usecases/script/working-copy.js.map +0 -1
- package/dist/usecases/script/worldview.d.ts +0 -3
- package/dist/usecases/script/worldview.js +0 -17
- package/dist/usecases/script/worldview.js.map +0 -1
- package/dist/usecases/script/write-authoring.d.ts +0 -3
- package/dist/usecases/script/write-authoring.js +0 -263
- package/dist/usecases/script/write-authoring.js.map +0 -1
- package/dist/usecases/update.d.ts +0 -13
- package/dist/usecases/update.js +0 -128
- package/dist/usecases/update.js.map +0 -1
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { CliError, EXIT_INPUT } from "../../common.js";
|
|
2
|
-
import { advanceSkippedEpisode } from "../../domain/ingest/video-context.js";
|
|
3
|
-
import { parseOperationalFailure } from "./failure.js";
|
|
4
|
-
function invalidLedger(reason) {
|
|
5
|
-
return new CliError("The video skip ledger is invalid.", {
|
|
6
|
-
exitCode: EXIT_INPUT,
|
|
7
|
-
errorCode: "INGEST_SKIP_LEDGER_INVALID",
|
|
8
|
-
hint: "Repair or remove skipped.json, then retry.",
|
|
9
|
-
data: { actual: [reason] },
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
function parseSkipRecord(value) {
|
|
13
|
-
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
14
|
-
return null;
|
|
15
|
-
const record = value;
|
|
16
|
-
if (!Number.isInteger(record["episode"]) || Number(record["episode"]) <= 0
|
|
17
|
-
|| typeof record["skipped_at"] !== "string"
|
|
18
|
-
|| typeof record["reason"] !== "string" || record["reason"].trim().length === 0
|
|
19
|
-
|| typeof record["source_sha256"] !== "string" || record["source_sha256"].length === 0
|
|
20
|
-
|| !Array.isArray(record["attempts"]))
|
|
21
|
-
return null;
|
|
22
|
-
const failure = parseOperationalFailure(record["failure"]);
|
|
23
|
-
if (!failure)
|
|
24
|
-
return null;
|
|
25
|
-
const attempts = [];
|
|
26
|
-
for (const value of record["attempts"]) {
|
|
27
|
-
const attempt = parseOperationalFailure(value);
|
|
28
|
-
if (!attempt)
|
|
29
|
-
return null;
|
|
30
|
-
attempts.push(attempt);
|
|
31
|
-
}
|
|
32
|
-
return {
|
|
33
|
-
episode: Number(record["episode"]),
|
|
34
|
-
skipped_at: record["skipped_at"],
|
|
35
|
-
reason: record["reason"],
|
|
36
|
-
source_sha256: record["source_sha256"],
|
|
37
|
-
failure,
|
|
38
|
-
attempts,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
export function readVideoSkipLedger(store) {
|
|
42
|
-
if (!store.has("skipped.json"))
|
|
43
|
-
return { schema_version: 1, episodes: [] };
|
|
44
|
-
const value = store.readJson("skipped.json");
|
|
45
|
-
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
46
|
-
throw invalidLedger("root must be an object");
|
|
47
|
-
const ledger = value;
|
|
48
|
-
if (ledger["schema_version"] !== 1 || !Array.isArray(ledger["episodes"])) {
|
|
49
|
-
throw invalidLedger("schema_version must be 1 and episodes must be an array");
|
|
50
|
-
}
|
|
51
|
-
const episodes = [];
|
|
52
|
-
const seen = new Set();
|
|
53
|
-
for (const value of ledger["episodes"]) {
|
|
54
|
-
const record = parseSkipRecord(value);
|
|
55
|
-
if (!record)
|
|
56
|
-
throw invalidLedger("one or more episode records are malformed");
|
|
57
|
-
if (seen.has(record.episode))
|
|
58
|
-
throw invalidLedger(`episode ${record.episode} appears more than once`);
|
|
59
|
-
seen.add(record.episode);
|
|
60
|
-
episodes.push(record);
|
|
61
|
-
}
|
|
62
|
-
episodes.sort((left, right) => left.episode - right.episode);
|
|
63
|
-
return { schema_version: 1, episodes };
|
|
64
|
-
}
|
|
65
|
-
export function writeVideoSkipLedger(store, ledger) {
|
|
66
|
-
store.writeJson("skipped.json", ledger);
|
|
67
|
-
}
|
|
68
|
-
export function assertVideoSkipSources(skips, sourceEpisodes) {
|
|
69
|
-
const sourceByEpisode = new Map(sourceEpisodes.map((episode) => [episode.episode, episode.sha256]));
|
|
70
|
-
for (const record of skips) {
|
|
71
|
-
const sourceSha256 = sourceByEpisode.get(record.episode);
|
|
72
|
-
if (sourceSha256 === record.source_sha256)
|
|
73
|
-
continue;
|
|
74
|
-
throw new CliError("The video skip ledger no longer matches the source.", {
|
|
75
|
-
exitCode: EXIT_INPUT,
|
|
76
|
-
errorCode: "INGEST_SKIP_SOURCE_MISMATCH",
|
|
77
|
-
hint: "Restore the source episode recorded by this workspace, or rebuild the same source with --force.",
|
|
78
|
-
data: {
|
|
79
|
-
actual: [
|
|
80
|
-
`episode=${record.episode}`,
|
|
81
|
-
`ledger_sha256=${record.source_sha256}`,
|
|
82
|
-
`source_sha256=${sourceSha256 ?? "<missing>"}`,
|
|
83
|
-
],
|
|
84
|
-
},
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
export function skippedEpisodeDoc(episode) {
|
|
89
|
-
return {
|
|
90
|
-
episode,
|
|
91
|
-
synopsis: "",
|
|
92
|
-
scenes: [],
|
|
93
|
-
actors: [],
|
|
94
|
-
locations: [],
|
|
95
|
-
props: [],
|
|
96
|
-
speakers: [],
|
|
97
|
-
actorStates: [],
|
|
98
|
-
locationStates: [],
|
|
99
|
-
propStates: [],
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
export function readAcceptedVideoDocs(store, episodes, acceptedThrough, skips) {
|
|
103
|
-
const skipped = new Set(skips.map((record) => record.episode));
|
|
104
|
-
const docs = [];
|
|
105
|
-
for (const episode of episodes) {
|
|
106
|
-
if (episode.episode > acceptedThrough)
|
|
107
|
-
break;
|
|
108
|
-
const rel = `ep/ep_${String(episode.episode).padStart(3, "0")}.json`;
|
|
109
|
-
if (store.has(rel))
|
|
110
|
-
docs.push(store.readJson(rel));
|
|
111
|
-
else if (skipped.has(episode.episode))
|
|
112
|
-
docs.push(skippedEpisodeDoc(episode.episode));
|
|
113
|
-
}
|
|
114
|
-
return docs;
|
|
115
|
-
}
|
|
116
|
-
export function reconcileVideoSkips(store, ctx, skips) {
|
|
117
|
-
for (const record of skips) {
|
|
118
|
-
if (record.episode <= ctx.lastEpisode) {
|
|
119
|
-
store.clearError(`ep/ep_${String(record.episode).padStart(3, "0")}.error.json`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
const byEpisode = new Map(skips.map((record) => [record.episode, record]));
|
|
123
|
-
for (;;) {
|
|
124
|
-
const next = ctx.lastEpisode + 1;
|
|
125
|
-
if (!byEpisode.has(next))
|
|
126
|
-
break;
|
|
127
|
-
advanceSkippedEpisode(ctx, next);
|
|
128
|
-
store.writeJson("context.json", ctx);
|
|
129
|
-
store.clearError(`ep/ep_${String(next).padStart(3, "0")}.error.json`);
|
|
130
|
-
}
|
|
131
|
-
return ctx;
|
|
132
|
-
}
|
|
133
|
-
export function markSkippedEpisodes(script, skips) {
|
|
134
|
-
for (const record of skips) {
|
|
135
|
-
const episode = script.episodes[record.episode - 1];
|
|
136
|
-
if (!episode)
|
|
137
|
-
continue;
|
|
138
|
-
episode.extend = {
|
|
139
|
-
scriptctl: {
|
|
140
|
-
ingest: {
|
|
141
|
-
outcome: "skipped",
|
|
142
|
-
source_episode: record.episode,
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
//# sourceMappingURL=video-skip-state.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"video-skip-state.js","sourceRoot":"","sources":["../../../src/usecases/ingest/video-skip-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
// `scriptctl view` — top-level command (§4). Renders a workspace's script.json
|
|
2
|
-
// into review.html at the workspace root. No model. For a video workspace it
|
|
3
|
-
// symlinks the episode media into <ws>/src/ep_NNN.mp4 so the review UI's relative
|
|
4
|
-
// video paths resolve. Fails clearly when the workspace has no script.json yet.
|
|
5
|
-
import * as fs from "node:fs";
|
|
6
|
-
import * as path from "node:path";
|
|
7
|
-
import { CliError, EXIT_INPUT, EXIT_OK } from "../../common.js";
|
|
8
|
-
import { renderReviewHtml } from "../../infra/ingest/review-renderer.js";
|
|
9
|
-
import { WorkspaceStore } from "../../infra/ingest/workspace-store.js";
|
|
10
|
-
import { runViewServer } from "./view-server.js";
|
|
11
|
-
const strOf = (v) => (v === null || v === undefined ? "" : String(v));
|
|
12
|
-
const pad = (n) => String(n).padStart(3, "0");
|
|
13
|
-
// Symlink each episode's media into <ws>/src/ep_NNN.mp4 (best-effort; the review
|
|
14
|
-
// UI seeks video by relative path). Only present for a video workspace.
|
|
15
|
-
function linkMedia(store) {
|
|
16
|
-
if (!store.has("manifest.json"))
|
|
17
|
-
return;
|
|
18
|
-
const manifest = store.readJson("manifest.json");
|
|
19
|
-
if (!Array.isArray(manifest.episodes))
|
|
20
|
-
return;
|
|
21
|
-
const srcDir = store.path("src");
|
|
22
|
-
fs.mkdirSync(srcDir, { recursive: true });
|
|
23
|
-
for (const e of manifest.episodes) {
|
|
24
|
-
if (typeof e.episode !== "number" || typeof e.path !== "string")
|
|
25
|
-
continue;
|
|
26
|
-
const link = path.join(srcDir, `ep_${pad(e.episode)}.mp4`);
|
|
27
|
-
try {
|
|
28
|
-
fs.rmSync(link, { force: true });
|
|
29
|
-
fs.symlinkSync(e.path, link);
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
// best-effort: a missing source or unsupported fs just leaves the seek broken.
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
export async function commandView(opts) {
|
|
37
|
-
// --watch: live monitor server (progress + artifacts + context, auto-refresh),
|
|
38
|
-
// runs until Ctrl-C. Works while ingest is still running (no script.json yet).
|
|
39
|
-
// Local-only: it blocks on a web server + opens a browser, which would hang a
|
|
40
|
-
// headless sandbox run — refuse there (the sandbox injects SANDBOX_PROJECT_GROUP_NO).
|
|
41
|
-
if (opts["watch"]) {
|
|
42
|
-
if ((process.env.SANDBOX_PROJECT_GROUP_NO ?? "").trim()) {
|
|
43
|
-
throw new CliError("`view --watch` runs a local web server and opens a browser; it is local-only and unavailable in the sandbox.", {
|
|
44
|
-
exitCode: EXIT_INPUT,
|
|
45
|
-
errorCode: "VIEW_WATCH_SANDBOX",
|
|
46
|
-
hint: "Use `scriptctl ingest status` for progress in the sandbox; run `view --watch` on your local machine.",
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
return runViewServer(opts);
|
|
50
|
-
}
|
|
51
|
-
const workspacePath = strOf(opts["workspace_path"] || "workspace");
|
|
52
|
-
const store = new WorkspaceStore(path.resolve(workspacePath));
|
|
53
|
-
if (!store.has("script.json")) {
|
|
54
|
-
throw new CliError("workspace has no script.json to render.", {
|
|
55
|
-
exitCode: EXIT_INPUT,
|
|
56
|
-
errorCode: "VIEW_NO_SCRIPT",
|
|
57
|
-
hint: "Run `scriptctl ingest --source-path <src> --workspace-path <dir>` first.",
|
|
58
|
-
data: { actual: [store.path("script.json")] },
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
linkMedia(store);
|
|
62
|
-
const html = renderReviewHtml(store.readJson("script.json"));
|
|
63
|
-
store.writeText("review.html", html);
|
|
64
|
-
const output = store.path("review.html");
|
|
65
|
-
return [{ text: output, data: { output } }, EXIT_OK];
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=view-command.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"view-command.js","sourceRoot":"","sources":["../../../src/usecases/ingest/view-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { type CommandOutput } from "../../common.js";
|
|
2
|
-
import type { UsageReport } from "./usage-report.js";
|
|
3
|
-
type Dict = Record<string, unknown>;
|
|
4
|
-
interface FileMeta {
|
|
5
|
-
rel: string;
|
|
6
|
-
size: number;
|
|
7
|
-
mtime: number;
|
|
8
|
-
}
|
|
9
|
-
export declare function listArtifacts(root: string): Record<string, FileMeta[]>;
|
|
10
|
-
export declare function readTiming(root: string): {
|
|
11
|
-
episodes: Array<{
|
|
12
|
-
episode: number;
|
|
13
|
-
transcodeMs?: number;
|
|
14
|
-
uploadMs?: number;
|
|
15
|
-
generateMs?: number;
|
|
16
|
-
uploadMB?: string;
|
|
17
|
-
transcoded?: boolean;
|
|
18
|
-
}>;
|
|
19
|
-
totalMs: number;
|
|
20
|
-
};
|
|
21
|
-
export declare function readUsage(root: string): UsageReport | null;
|
|
22
|
-
export declare function readSafe(root: string, rel: string): {
|
|
23
|
-
ok: true;
|
|
24
|
-
text: string;
|
|
25
|
-
} | {
|
|
26
|
-
ok: false;
|
|
27
|
-
};
|
|
28
|
-
export declare function runViewServer(opts: Dict): Promise<[CommandOutput, number]>;
|
|
29
|
-
export {};
|
|
@@ -1,364 +0,0 @@
|
|
|
1
|
-
// `scriptctl view --watch` — a live workspace monitor for TEXT or VIDEO ingest.
|
|
2
|
-
// Starts a tiny stdlib HTTP server (no deps) that a self-refreshing HTML dashboard
|
|
3
|
-
// polls: ingest progress (deriveIngestStatus), the artifact tree (text serial
|
|
4
|
-
// context/window md + provisional/final script, OR video per-episode transcript +
|
|
5
|
-
// context-fed-to-model + parsed json + registry + timing.jsonl), and any single
|
|
6
|
-
// file's content. The dashboard auto-refreshes so a running `scriptctl ingest` is
|
|
7
|
-
// watched live and each unit's products stream in as they finish. Runs until Ctrl-C.
|
|
8
|
-
// Text and video workspaces use disjoint layouts, so the artifact groups union
|
|
9
|
-
// cleanly — a workspace only populates the groups its pipeline produces.
|
|
10
|
-
import * as http from "node:http";
|
|
11
|
-
import * as fs from "node:fs";
|
|
12
|
-
import * as path from "node:path";
|
|
13
|
-
import { spawn } from "node:child_process";
|
|
14
|
-
import { EXIT_OK } from "../../common.js";
|
|
15
|
-
import { deriveIngestStatus } from "./status.js";
|
|
16
|
-
const strOf = (v) => (v === null || v === undefined ? "" : String(v));
|
|
17
|
-
// Curated artifact list for the sidebar, grouped and ordered for reviewing an
|
|
18
|
-
// ingest run. Only files that exist are returned.
|
|
19
|
-
export function listArtifacts(root) {
|
|
20
|
-
const meta = (rel) => {
|
|
21
|
-
try {
|
|
22
|
-
const s = fs.statSync(path.join(root, rel));
|
|
23
|
-
return { rel, size: s.size, mtime: s.mtimeMs };
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
const dirFiles = (dir, filter) => {
|
|
30
|
-
let names = [];
|
|
31
|
-
try {
|
|
32
|
-
names = fs.readdirSync(path.join(root, dir));
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
return [];
|
|
36
|
-
}
|
|
37
|
-
return names.filter(filter).sort().map((n) => meta(`${dir}/${n}`)).filter((m) => !!m);
|
|
38
|
-
};
|
|
39
|
-
const only = (arr) => arr.filter((m) => !!m);
|
|
40
|
-
const epFile = (suffix) => dirFiles("ep", (n) => n.endsWith(suffix) && !n.endsWith(".error.json"));
|
|
41
|
-
return {
|
|
42
|
-
结果: only([meta("script.json"), meta("validation.json"), meta("asset-audit.json"), meta("usage.json"), meta("review.html"), meta("timings.json")]),
|
|
43
|
-
// Text serial artifacts (empty for a video workspace).
|
|
44
|
-
上下文: dirFiles("serial", (n) => n.startsWith("context_") && n.endsWith(".md")),
|
|
45
|
-
每窗更新: dirFiles("serial", (n) => n.startsWith("win_") && n.endsWith(".json")),
|
|
46
|
-
篇章梗概: dirFiles("serial", (n) => n.startsWith("arc_") && n.endsWith(".md")),
|
|
47
|
-
前段: dirFiles("pass2", (n) => /^chunk_\d+\.json$/.test(n)),
|
|
48
|
-
// Video serial artifacts (empty for a text workspace). Grouped by kind so an
|
|
49
|
-
// episode's whole story is one scan down the list.
|
|
50
|
-
转录: epFile(".md").filter((m) => !m.rel.endsWith(".context.md")),
|
|
51
|
-
送模上下文: epFile(".context.md"),
|
|
52
|
-
解析: epFile(".json"),
|
|
53
|
-
花名册: only([meta("context.json")]),
|
|
54
|
-
计时: only([meta("timing.jsonl")]),
|
|
55
|
-
中间产物: only([meta("script.initial.json"), meta("provisional_assets.json"), meta("notes.json"), meta("id_map.json"), meta("manifest.json")]),
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
// Parse timing.jsonl (one episode per line) into a compact summary the dashboard
|
|
59
|
-
// shows without shipping the whole file. Tolerant: skips malformed lines. Only the
|
|
60
|
-
// video pipeline writes timing.jsonl; a text workspace yields an empty summary.
|
|
61
|
-
export function readTiming(root) {
|
|
62
|
-
let text = "";
|
|
63
|
-
try {
|
|
64
|
-
text = fs.readFileSync(path.join(root, "timing.jsonl"), "utf-8");
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
return { episodes: [], totalMs: 0 };
|
|
68
|
-
}
|
|
69
|
-
const episodes = [];
|
|
70
|
-
let totalMs = 0;
|
|
71
|
-
for (const line of text.split(/\r?\n/)) {
|
|
72
|
-
const t = line.trim();
|
|
73
|
-
if (!t)
|
|
74
|
-
continue;
|
|
75
|
-
try {
|
|
76
|
-
const j = JSON.parse(t);
|
|
77
|
-
if (typeof j.episode !== "number")
|
|
78
|
-
continue;
|
|
79
|
-
const row = { episode: j.episode };
|
|
80
|
-
if (typeof j.transcodeMs === "number") {
|
|
81
|
-
row.transcodeMs = j.transcodeMs;
|
|
82
|
-
totalMs += j.transcodeMs;
|
|
83
|
-
}
|
|
84
|
-
if (typeof j.uploadMs === "number") {
|
|
85
|
-
row.uploadMs = j.uploadMs;
|
|
86
|
-
totalMs += j.uploadMs;
|
|
87
|
-
}
|
|
88
|
-
if (typeof j.generateMs === "number") {
|
|
89
|
-
row.generateMs = j.generateMs;
|
|
90
|
-
totalMs += j.generateMs;
|
|
91
|
-
}
|
|
92
|
-
if (typeof j.uploadMB === "string")
|
|
93
|
-
row.uploadMB = j.uploadMB;
|
|
94
|
-
if (typeof j.transcoded === "boolean")
|
|
95
|
-
row.transcoded = j.transcoded;
|
|
96
|
-
episodes.push(row);
|
|
97
|
-
}
|
|
98
|
-
catch { /* skip malformed line */ }
|
|
99
|
-
}
|
|
100
|
-
return { episodes, totalMs };
|
|
101
|
-
}
|
|
102
|
-
// Token accounting written by the pipelines → usage.json. Returns null when absent
|
|
103
|
-
// (run hasn't reached the point where spend is persisted yet).
|
|
104
|
-
export function readUsage(root) {
|
|
105
|
-
try {
|
|
106
|
-
const j = JSON.parse(fs.readFileSync(path.join(root, "usage.json"), "utf-8"));
|
|
107
|
-
return j;
|
|
108
|
-
}
|
|
109
|
-
catch {
|
|
110
|
-
return null;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
// Read a workspace file, guarding against path traversal outside the root.
|
|
114
|
-
export function readSafe(root, rel) {
|
|
115
|
-
const abs = path.resolve(root, rel);
|
|
116
|
-
if (abs !== root && !abs.startsWith(root + path.sep))
|
|
117
|
-
return { ok: false };
|
|
118
|
-
try {
|
|
119
|
-
return { ok: true, text: fs.readFileSync(abs, "utf-8") };
|
|
120
|
-
}
|
|
121
|
-
catch {
|
|
122
|
-
return { ok: false };
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
function send(res, code, type, body) {
|
|
126
|
-
res.writeHead(code, { "Content-Type": type, "Cache-Control": "no-store" });
|
|
127
|
-
res.end(body);
|
|
128
|
-
}
|
|
129
|
-
export async function runViewServer(opts) {
|
|
130
|
-
const root = path.resolve(strOf(opts["workspace_path"] || "workspace"));
|
|
131
|
-
const port = Number(opts["port"]) || 0; // 0 → OS-assigned ephemeral (no conflicts)
|
|
132
|
-
const server = http.createServer((req, res) => {
|
|
133
|
-
const u = new URL(req.url ?? "/", "http://localhost");
|
|
134
|
-
if (u.pathname === "/")
|
|
135
|
-
return send(res, 200, "text/html; charset=utf-8", DASHBOARD_HTML);
|
|
136
|
-
if (u.pathname === "/api/state") {
|
|
137
|
-
const status = deriveIngestStatus(root);
|
|
138
|
-
return send(res, 200, "application/json", JSON.stringify({ root, status, groups: listArtifacts(root), timing: readTiming(root), usage: readUsage(root) }));
|
|
139
|
-
}
|
|
140
|
-
if (u.pathname === "/api/file") {
|
|
141
|
-
const rel = u.searchParams.get("path") ?? "";
|
|
142
|
-
const r = readSafe(root, rel);
|
|
143
|
-
return r.ok ? send(res, 200, "text/plain; charset=utf-8", r.text) : send(res, 404, "text/plain", "not found");
|
|
144
|
-
}
|
|
145
|
-
send(res, 404, "text/plain", "not found");
|
|
146
|
-
});
|
|
147
|
-
const actualPort = await new Promise((resolve, reject) => {
|
|
148
|
-
server.once("error", reject);
|
|
149
|
-
server.listen(port, "127.0.0.1", () => resolve(server.address().port));
|
|
150
|
-
});
|
|
151
|
-
const url = `http://127.0.0.1:${actualPort}/`;
|
|
152
|
-
process.stderr.write(`Ingest monitor: ${url}\nWorkspace: ${root}\nPress Ctrl-C to stop.\n`);
|
|
153
|
-
if (process.platform === "darwin" && process.stderr.isTTY) {
|
|
154
|
-
try {
|
|
155
|
-
spawn("open", [url], { detached: true, stdio: "ignore" }).unref();
|
|
156
|
-
}
|
|
157
|
-
catch { /* best-effort */ }
|
|
158
|
-
}
|
|
159
|
-
// The listening server keeps the process alive after the startup result is
|
|
160
|
-
// emitted. Closing it on either signal lets the CLI exit cleanly.
|
|
161
|
-
process.once("SIGINT", () => server.close());
|
|
162
|
-
process.once("SIGTERM", () => server.close());
|
|
163
|
-
return [{ text: url, data: { url, workspace: root } }, EXIT_OK];
|
|
164
|
-
}
|
|
165
|
-
const DASHBOARD_HTML = `<!doctype html><html lang="zh"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
166
|
-
<title>scriptctl ingest 监听</title>
|
|
167
|
-
<style>
|
|
168
|
-
:root{--bg:#f6f7f9;--panel:#ffffff;--panel2:#f0f2f5;--line:#e3e6ea;--fg:#1f2430;--dim:#6b7280;--acc:#2563eb;--ok:#16a34a;--warn:#d97706;--err:#dc2626}
|
|
169
|
-
*{box-sizing:border-box}body{margin:0;font:13px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;background:var(--bg);color:var(--fg);height:100vh;display:grid;grid-template-rows:auto auto 1fr}
|
|
170
|
-
header{padding:12px 16px;background:var(--panel);border-bottom:1px solid var(--line);display:flex;gap:16px;align-items:center;flex-wrap:wrap}
|
|
171
|
-
header .title{font-weight:700;font-size:15px}
|
|
172
|
-
.now{font-size:14px}.now b{color:var(--acc)}
|
|
173
|
-
.state{padding:3px 12px;border-radius:20px;font-weight:600;font-size:12px}
|
|
174
|
-
.state.ready{background:#e7f6ee;color:var(--ok)}.state.incomplete{background:#e8f0fe;color:var(--acc)}.state.failed{background:#fde8e8;color:var(--err)}.state.empty{background:var(--panel2);color:var(--dim)}
|
|
175
|
-
.dim{color:var(--dim)}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
|
|
176
|
-
/* overall bar + stage stepper */
|
|
177
|
-
.progress{background:var(--panel);border-bottom:1px solid var(--line);padding:12px 16px}
|
|
178
|
-
.ovwrap{display:flex;align-items:center;gap:10px;margin-bottom:12px}
|
|
179
|
-
.ovtrack{flex:1;height:10px;background:var(--panel2);border-radius:6px;overflow:hidden}
|
|
180
|
-
.ovtrack i{display:block;height:100%;background:linear-gradient(90deg,#3b82f6,#2563eb);border-radius:6px;transition:width .4s}
|
|
181
|
-
.ovpct{font-weight:700;min-width:44px;text-align:right}
|
|
182
|
-
.stages{display:flex;align-items:stretch;gap:0}
|
|
183
|
-
.stage{flex:1;padding:8px 12px;border:1px solid var(--line);background:var(--panel);border-radius:8px;margin-right:8px}
|
|
184
|
-
.stage:last-child{margin-right:0}
|
|
185
|
-
.stage-h{display:flex;align-items:center;gap:7px;font-weight:600}
|
|
186
|
-
.stage .dot{width:9px;height:9px;border-radius:50%;background:#cbd2dc;flex:none}
|
|
187
|
-
.stage .cnt{margin-left:auto;font-size:12px;color:var(--dim)}
|
|
188
|
-
.stage .track{height:6px;background:var(--panel2);border-radius:4px;margin-top:8px;overflow:hidden}
|
|
189
|
-
.stage .track i{display:block;height:100%;width:0;border-radius:4px;transition:width .4s}
|
|
190
|
-
.stage.wait{opacity:.7}
|
|
191
|
-
.stage.done{border-color:#bfe6cd}.stage.done .dot{background:var(--ok)}.stage.done .track i{background:var(--ok)}.stage.done .stage-h b{color:var(--ok)}
|
|
192
|
-
.stage.run{border-color:#bcd3fb;box-shadow:0 0 0 2px #e8f0fe}.stage.run .dot{background:var(--acc);animation:pulse 1.2s infinite}.stage.run .track i{background:var(--acc)}
|
|
193
|
-
.stage.fail{border-color:#f3bcbc}.stage.fail .dot{background:var(--err)}.stage.fail .track i{background:var(--err)}
|
|
194
|
-
@keyframes pulse{50%{opacity:.35}}
|
|
195
|
-
main{display:grid;grid-template-columns:280px 1fr;min-height:0}
|
|
196
|
-
aside{background:var(--panel);border-right:1px solid var(--line);overflow:auto;padding:8px}
|
|
197
|
-
.grp{margin:8px 4px 2px;color:var(--dim);font-size:11px;font-weight:700;letter-spacing:.04em}
|
|
198
|
-
.f{padding:4px 8px;border-radius:6px;cursor:pointer;display:flex;justify-content:space-between;gap:8px;white-space:nowrap;overflow:hidden}
|
|
199
|
-
.f:hover{background:var(--panel2)}.f.sel{background:#e8f0fe;color:var(--acc);font-weight:600}
|
|
200
|
-
.f .sz{color:var(--dim);font-size:11px}
|
|
201
|
-
section{overflow:auto;background:var(--panel)}
|
|
202
|
-
.toolbar{position:sticky;top:0;background:var(--panel2);border-bottom:1px solid var(--line);padding:6px 12px;display:flex;gap:14px;align-items:center;font-size:12px}
|
|
203
|
-
label{cursor:pointer;user-select:none}.empty{color:var(--dim);padding:34px;text-align:center}
|
|
204
|
-
#view{padding:14px 18px;white-space:pre-wrap;word-break:break-word;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px}
|
|
205
|
-
#view h1,#view h2{margin:14px 0 4px}#view h1{color:var(--acc);font-size:15px}#view h2{color:var(--warn);font-size:13px}
|
|
206
|
-
#view .b{color:var(--dim)}
|
|
207
|
-
/* per-episode timing table (video only) */
|
|
208
|
-
.timing{padding:8px 16px 4px;background:var(--panel);border-bottom:1px solid var(--line);overflow:auto;max-height:132px}
|
|
209
|
-
table.tm{border-collapse:collapse;font-size:12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
|
|
210
|
-
table.tm th,table.tm td{padding:2px 10px 2px 0;text-align:right}table.tm th:first-child,table.tm td:first-child{text-align:left}
|
|
211
|
-
table.tm th{color:var(--dim);font-weight:600;border-bottom:1px solid var(--line)}
|
|
212
|
-
table.tm td.slow{color:var(--warn)}
|
|
213
|
-
</style></head><body>
|
|
214
|
-
<header>
|
|
215
|
-
<span class="title">scriptctl ingest</span>
|
|
216
|
-
<span id="stateBadge" class="state empty">—</span>
|
|
217
|
-
<span class="now">当前:<b id="curState">—</b></span>
|
|
218
|
-
<span class="now">耗时 <b id="elapsed">—</b></span>
|
|
219
|
-
<span class="dim" id="eta"></span>
|
|
220
|
-
<span class="now" id="tokWrap" style="display:none">Token <b id="tokTotal">—</b> <span class="dim" id="tokIO"></span></span>
|
|
221
|
-
<span class="dim mono" id="root" style="margin-left:auto"></span>
|
|
222
|
-
<span class="dim" id="tick"></span>
|
|
223
|
-
</header>
|
|
224
|
-
<div class="progress">
|
|
225
|
-
<div class="ovwrap"><span class="dim">总进度</span><div class="ovtrack"><i id="ovBar"></i></div><span class="ovpct" id="ovPct">0%</span></div>
|
|
226
|
-
<div class="stages" id="stages"></div>
|
|
227
|
-
</div>
|
|
228
|
-
<div class="timing" id="timingWrap" style="display:none"><table class="tm" id="tmTable"></table></div>
|
|
229
|
-
<div class="timing" id="usageWrap" style="display:none"><table class="tm" id="usageTable"></table></div>
|
|
230
|
-
<main>
|
|
231
|
-
<aside id="side"></aside>
|
|
232
|
-
<section>
|
|
233
|
-
<div class="toolbar">
|
|
234
|
-
<span id="cur" class="mono dim">未选择文件</span>
|
|
235
|
-
<label style="margin-left:auto"><input type="checkbox" id="follow" checked> 跟随最新集</label>
|
|
236
|
-
</div>
|
|
237
|
-
<div id="view"><div class="empty">左侧选择文件,或等待 ingest 产出…</div></div>
|
|
238
|
-
</section>
|
|
239
|
-
</main>
|
|
240
|
-
<script>
|
|
241
|
-
var NAMES={normalize:'规范化',assemble:'装配',serial:'串行解析',govern:'治理成稿',finalize:'治理成稿',transcribe:'转写',roster:'角色合并',correct:'校正',speaker:'发声源'};
|
|
242
|
-
var cur=null, follow=true, lastLatest=null;
|
|
243
|
-
var timing=null, timingAt=0; // last status.timings + client time it arrived (avoids clock skew)
|
|
244
|
-
function $(s){return document.querySelector(s)}
|
|
245
|
-
function fmtDur(ms){if(ms==null)return '—';var s=Math.round(ms/1000);return s>=60?(Math.floor(s/60)+'m'+('0'+(s%60)).slice(-2)+'s'):s+'s'}
|
|
246
|
-
// per-episode timing table (video only; hidden when there is no timing.jsonl)
|
|
247
|
-
function fmtTok(n){if(n==null)return '—';if(n>=1e6)return (n/1e6).toFixed(2)+'M';if(n>=1e3)return (n/1e3).toFixed(1)+'k';return ''+n}
|
|
248
|
-
var TASKNAMES={'ingest.body-start':'正文定位','ingest.text-normalize':'规范化','ingest.serial-govern':'串行治理','ingest.name-fix':'命名修复','ingest.episode-assets':'分集资产','ingest.asset-curate':'资产甄选','ingest.asset-govern':'资产总览','ingest.arc-summary':'篇章梗概','ingest.state-reconcile':'状态归并','ingest.asset-audit':'资产审计','ingest.mention-resolve':'指称消解','ingest.video-serial':'视频串行'};
|
|
249
|
-
// Token accounting table + header badge. Hidden until usage.json exists.
|
|
250
|
-
function renderUsage(u){
|
|
251
|
-
if(!u||!u.totals){$('#usageWrap').style.display='none';$('#tokWrap').style.display='none';return}
|
|
252
|
-
var t=u.totals;
|
|
253
|
-
$('#tokWrap').style.display='';
|
|
254
|
-
$('#tokTotal').textContent=fmtTok(t.totalTokens);
|
|
255
|
-
var cacheHit=(t.cachedInputTokens||0),cacheNew=(t.cacheCreationTokens||0);
|
|
256
|
-
var cacheStr=(cacheHit||cacheNew)?' · 缓存命中 '+fmtTok(cacheHit)+(cacheNew?'/建 '+fmtTok(cacheNew):''):'';
|
|
257
|
-
$('#tokIO').textContent='(入 '+fmtTok(t.inputTokens)+' / 出 '+fmtTok(t.outputTokens)+cacheStr+' · '+t.calls+'次'+(t.reused?' · 复用'+t.reused:'')+')';
|
|
258
|
-
var rows=[];
|
|
259
|
-
(u.byTask||[]).forEach(function(task){
|
|
260
|
-
(task.byModel||[]).forEach(function(model){
|
|
261
|
-
var r=model.totals||{};
|
|
262
|
-
if(r.calls>0||r.reused>0||r.inputTokens>0||r.outputTokens>0)rows.push({task:task.task,model:model.model,provider:model.provider,totals:r});
|
|
263
|
-
});
|
|
264
|
-
});
|
|
265
|
-
if(!rows.length){$('#usageWrap').style.display='none';return}
|
|
266
|
-
rows.sort(function(a,b){return (b.totals.totalTokens||0)-(a.totals.totalTokens||0)});
|
|
267
|
-
$('#usageWrap').style.display='block';
|
|
268
|
-
var h=['<tr><th>任务</th><th>模型</th><th>调用</th><th>失败</th><th>复用</th><th>入token</th><th title="缓存命中/新建,均为入token的子集">缓存(命中/建)</th><th>出token</th><th>合计</th></tr>'];
|
|
269
|
-
rows.forEach(function(row){
|
|
270
|
-
var r=row.totals,ch=r.cachedInputTokens||0,cn=r.cacheCreationTokens||0;
|
|
271
|
-
h.push('<tr><td>'+(TASKNAMES[row.task]||row.task)+'</td><td class="mono">'+row.provider+'/'+row.model+'</td><td>'+r.calls+'</td><td>'+(r.failed||0)+'</td><td>'+(r.reused||0)+'</td><td>'+fmtTok(r.inputTokens)+'</td><td class="dim">'+(ch||cn?fmtTok(ch)+'/'+fmtTok(cn):'—')+'</td><td>'+fmtTok(r.outputTokens)+'</td><td>'+fmtTok(r.totalTokens)+'</td></tr>');
|
|
272
|
-
});
|
|
273
|
-
h.push('<tr><td class="dim">合计</td><td></td><td class="dim">'+t.calls+'</td><td class="dim">'+t.failed+'</td><td class="dim">'+t.reused+'</td><td class="dim">'+fmtTok(t.inputTokens)+'</td><td class="dim">'+(t.cachedInputTokens||t.cacheCreationTokens?fmtTok(t.cachedInputTokens||0)+'/'+fmtTok(t.cacheCreationTokens||0):'—')+'</td><td class="dim">'+fmtTok(t.outputTokens)+'</td><td class="dim">'+fmtTok(t.totalTokens)+'</td></tr>');
|
|
274
|
-
$('#usageTable').innerHTML=h.join('');
|
|
275
|
-
}
|
|
276
|
-
function renderEpTiming(tm){
|
|
277
|
-
if(!tm||!tm.episodes||!tm.episodes.length){$('#timingWrap').style.display='none';return}
|
|
278
|
-
$('#timingWrap').style.display='block';
|
|
279
|
-
var rows=['<tr><th>集</th><th>转码</th><th>大小</th><th>上传</th><th>解析</th></tr>'];
|
|
280
|
-
tm.episodes.forEach(function(e){
|
|
281
|
-
var slow=e.generateMs>60000?' class="slow"':'';
|
|
282
|
-
rows.push('<tr><td>ep'+('00'+e.episode).slice(-3)+'</td><td>'+fmtDur(e.transcodeMs)+(e.transcoded===false?'*':'')+'</td><td>'+(e.uploadMB||'?')+'M</td><td>'+fmtDur(e.uploadMs)+'</td><td'+slow+'>'+fmtDur(e.generateMs)+'</td></tr>');
|
|
283
|
-
});
|
|
284
|
-
rows.push('<tr><td class="dim">累计</td><td></td><td></td><td></td><td class="dim">'+fmtDur(tm.totalMs)+'</td></tr>');
|
|
285
|
-
$('#tmTable').innerHTML=rows.join('');
|
|
286
|
-
}
|
|
287
|
-
// tick the total elapsed locally between polls; serial ETA/rate from the summary
|
|
288
|
-
function renderTiming(){
|
|
289
|
-
if(!timing){$('#elapsed').textContent='—';$('#eta').textContent='';return}
|
|
290
|
-
var live=timing.elapsedMs+(timing.done?0:(Date.now()-timingAt));
|
|
291
|
-
$('#elapsed').textContent=fmtDur(live)+(timing.done?'':' …');
|
|
292
|
-
var ser=timing.serial,eta='';
|
|
293
|
-
if(ser){
|
|
294
|
-
eta='串行 '+ser.doneWindows+'/'+ser.totalWindows+' 窗口';
|
|
295
|
-
if(ser.avgWindowMs!=null)eta+=' · ~'+fmtDur(ser.avgWindowMs)+'/窗';
|
|
296
|
-
if(ser.etaMs!=null&&!timing.done)eta+=' · 预计剩余 '+fmtDur(ser.etaMs);
|
|
297
|
-
}
|
|
298
|
-
$('#eta').textContent=eta;
|
|
299
|
-
}
|
|
300
|
-
$('#follow').onchange=function(e){follow=e.target.checked};
|
|
301
|
-
function esc(s){return s.replace(/[&<>]/g,function(c){return{'&':'&','<':'<','>':'>'}[c]})}
|
|
302
|
-
function renderContent(rel,text){
|
|
303
|
-
if(rel.endsWith('.jsonl')){$('#view').textContent=text.split('\\n').map(function(l){try{return JSON.stringify(JSON.parse(l))}catch(e){return l}}).join('\\n');return}
|
|
304
|
-
if(rel.endsWith('.json')){try{text=JSON.stringify(JSON.parse(text),null,2)}catch(e){}$('#view').textContent=text;return}
|
|
305
|
-
if(rel.endsWith('.md')){
|
|
306
|
-
$('#view').innerHTML=text.split('\\n').map(function(l){
|
|
307
|
-
if(l.indexOf('## ')===0)return '<h2>'+esc(l.slice(3))+'</h2>';
|
|
308
|
-
if(l.indexOf('# ')===0)return '<h1>'+esc(l.slice(2))+'</h1>';
|
|
309
|
-
if(l.indexOf(' ')===0||l.indexOf('- ')===0||l.indexOf('> ')===0)return '<span class="b">'+esc(l)+'</span>';
|
|
310
|
-
return esc(l)||' ';
|
|
311
|
-
}).join('\\n');return}
|
|
312
|
-
$('#view').textContent=text;
|
|
313
|
-
}
|
|
314
|
-
function loadFile(rel){
|
|
315
|
-
cur=rel;$('#cur').textContent=rel;
|
|
316
|
-
var fs=document.querySelectorAll('.f');for(var i=0;i<fs.length;i++)fs[i].classList.toggle('sel',fs[i].dataset.rel===rel);
|
|
317
|
-
fetch('/api/file?path='+encodeURIComponent(rel)).then(function(r){return r.text()}).then(function(t){renderContent(rel,t)}).catch(function(){});
|
|
318
|
-
}
|
|
319
|
-
function frac(p){return p.unit&&p.unit.total?p.unit.done/p.unit.total:(p.done?1:0)}
|
|
320
|
-
function poll(){
|
|
321
|
-
fetch('/api/state').then(function(r){return r.json()}).then(function(d){
|
|
322
|
-
var s=d.status,passes=s.passes||[];
|
|
323
|
-
$('#root').textContent=d.root;
|
|
324
|
-
$('#stateBadge').className='state '+s.state;
|
|
325
|
-
$('#stateBadge').textContent={ready:'已完成',incomplete:'进行中',failed:'失败',empty:'空'}[s.state]||s.state;
|
|
326
|
-
// overall progress = mean of per-stage fractions
|
|
327
|
-
var sum=0;passes.forEach(function(p){sum+=frac(p)});
|
|
328
|
-
var pct=passes.length?Math.round(100*sum/passes.length):0;
|
|
329
|
-
$('#ovBar').style.width=pct+'%';$('#ovPct').textContent=pct+'%';
|
|
330
|
-
// current stage
|
|
331
|
-
var curP=null;for(var i=0;i<passes.length;i++){if(!passes[i].done){curP=passes[i];break}}
|
|
332
|
-
$('#curState').textContent=s.state==='ready'?'已完成 ✓':(curP?(NAMES[curP.name]||curP.name)+(curP.unit?' · '+curP.unit.done+'/'+curP.unit.total:''):'—');
|
|
333
|
-
// per-phase durations from timings (real wall-clock)
|
|
334
|
-
var ph={};((s.timings&&s.timings.phases)||[]).forEach(function(x){ph[x.name]=x});
|
|
335
|
-
// staged stepper with per-stage bars + real durations
|
|
336
|
-
$('#stages').innerHTML=passes.map(function(p){
|
|
337
|
-
var st=p.done?'done':(p.unit&&p.unit.failed?'fail':(p.unit&&p.unit.done>0||p===curP?'run':'wait'));
|
|
338
|
-
var cnt=p.unit?(p.unit.done+'/'+p.unit.total+(p.unit.failed?' ✗'+p.unit.failed:'')):(p.done?'✓':'—');
|
|
339
|
-
var d=ph[p.name]?('<span class="cnt">'+fmtDur(ph[p.name].ms)+(ph[p.name].running?' …':'')+'</span>'):'';
|
|
340
|
-
return '<div class="stage '+st+'"><div class="stage-h"><span class="dot"></span><b>'+(NAMES[p.name]||p.name)+'</b><span class="cnt">'+cnt+'</span></div><div class="track"><i style="width:'+Math.round(frac(p)*100)+'%"></i></div>'+(d?'<div class="dim" style="margin-top:4px">'+d+'</div>':'')+'</div>';
|
|
341
|
-
}).join('');
|
|
342
|
-
timing=s.timings||null;timingAt=Date.now();renderTiming();
|
|
343
|
-
renderEpTiming(d.timing);
|
|
344
|
-
renderUsage(d.usage);
|
|
345
|
-
// sidebar
|
|
346
|
-
var html='',latest=null;
|
|
347
|
-
Object.keys(d.groups).forEach(function(grp){
|
|
348
|
-
var files=d.groups[grp];if(!files.length)return;html+='<div class="grp">'+grp+'</div>';
|
|
349
|
-
files.forEach(function(f){
|
|
350
|
-
html+='<div class="f" data-rel="'+f.rel+'"><span>'+f.rel.split('/').pop()+'</span><span class="sz">'+(f.size>1024?(f.size/1024).toFixed(0)+'k':f.size)+'</span></div>';
|
|
351
|
-
if(grp==='每窗更新'||grp==='上下文'||grp==='转录'||grp==='解析')latest=f.rel;
|
|
352
|
-
});
|
|
353
|
-
});
|
|
354
|
-
$('#side').innerHTML=html;
|
|
355
|
-
var els=document.querySelectorAll('.f');
|
|
356
|
-
for(var j=0;j<els.length;j++){(function(el){el.onclick=function(){follow=false;$('#follow').checked=false;loadFile(el.dataset.rel)};if(el.dataset.rel===cur)el.classList.add('sel')})(els[j])}
|
|
357
|
-
$('#tick').textContent='● '+new Date().toLocaleTimeString();
|
|
358
|
-
if(follow&&latest&&latest!==lastLatest){lastLatest=latest;loadFile(latest)}
|
|
359
|
-
else if(cur){loadFile(cur)}
|
|
360
|
-
}).catch(function(){$('#tick').textContent='● 离线'});
|
|
361
|
-
}
|
|
362
|
-
poll();setInterval(poll,1500);setInterval(renderTiming,1000);
|
|
363
|
-
</script></body></html>`;
|
|
364
|
-
//# sourceMappingURL=view-server.js.map
|