@lingjingai/scriptctl 0.49.16 → 0.51.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 +8 -2
- package/changes/0.50.0.md +63 -0
- package/changes/0.51.0.md +24 -0
- package/dist/cli/register-batch.d.ts +3 -0
- package/dist/cli/register-batch.js +28 -0
- package/dist/cli/register-batch.js.map +1 -0
- package/dist/cli/register-edits.d.ts +4 -0
- package/dist/cli/register-edits.js +226 -0
- package/dist/cli/register-edits.js.map +1 -0
- package/dist/cli/register-query.d.ts +4 -0
- package/dist/cli/register-query.js +93 -0
- package/dist/cli/register-query.js.map +1 -0
- package/dist/cli/register-tools.d.ts +3 -0
- package/dist/cli/register-tools.js +23 -0
- package/dist/cli/register-tools.js.map +1 -0
- package/dist/cli/register-workflows.d.ts +4 -0
- package/dist/cli/register-workflows.js +71 -0
- package/dist/cli/register-workflows.js.map +1 -0
- package/dist/cli/registry.d.ts +14 -0
- package/dist/cli/registry.js +65 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.js +146 -575
- package/dist/cli.js.map +1 -1
- package/dist/common.d.ts +12 -38
- package/dist/common.js +5 -11
- package/dist/common.js.map +1 -1
- package/dist/domain/authoring/apply.d.ts +1 -33
- package/dist/domain/authoring/apply.js +1 -783
- package/dist/domain/authoring/apply.js.map +1 -1
- package/dist/domain/authoring/export.d.ts +1 -7
- package/dist/domain/authoring/export.js +1 -84
- package/dist/domain/authoring/export.js.map +1 -1
- package/dist/domain/authoring/parser.d.ts +2 -3
- package/dist/domain/authoring/parser.js +2 -914
- package/dist/domain/authoring/parser.js.map +1 -1
- package/dist/domain/authoring/serializer.d.ts +1 -2
- package/dist/domain/authoring/serializer.js +1 -243
- package/dist/domain/authoring/serializer.js.map +1 -1
- package/dist/domain/authoring/shared/bracket.d.ts +4 -0
- package/dist/domain/authoring/shared/bracket.js +95 -0
- package/dist/domain/authoring/shared/bracket.js.map +1 -0
- package/dist/domain/authoring/shared/types.d.ts +12 -0
- package/dist/domain/authoring/shared/types.js +2 -0
- package/dist/domain/authoring/shared/types.js.map +1 -0
- package/dist/domain/authoring/types.d.ts +2 -87
- package/dist/domain/authoring/types.js +2 -1
- package/dist/domain/authoring/types.js.map +1 -1
- package/dist/domain/authoring/v3/apply.d.ts +33 -0
- package/dist/domain/authoring/v3/apply.js +784 -0
- package/dist/domain/authoring/v3/apply.js.map +1 -0
- package/dist/domain/authoring/v3/export.d.ts +7 -0
- package/dist/domain/authoring/v3/export.js +85 -0
- package/dist/domain/authoring/v3/export.js.map +1 -0
- package/dist/domain/authoring/v3/parser.d.ts +3 -0
- package/dist/domain/authoring/v3/parser.js +823 -0
- package/dist/domain/authoring/v3/parser.js.map +1 -0
- package/dist/domain/authoring/v3/serializer.d.ts +2 -0
- package/dist/domain/authoring/v3/serializer.js +244 -0
- package/dist/domain/authoring/v3/serializer.js.map +1 -0
- package/dist/domain/authoring/v3/types.d.ts +76 -0
- package/dist/domain/authoring/v3/types.js +2 -0
- package/dist/domain/authoring/v3/types.js.map +1 -0
- package/dist/domain/authoring/v4/apply.d.ts +40 -0
- package/dist/domain/authoring/v4/apply.js +451 -0
- package/dist/domain/authoring/v4/apply.js.map +1 -0
- package/dist/domain/authoring/v4/parser.d.ts +2 -0
- package/dist/domain/authoring/v4/parser.js +729 -0
- package/dist/domain/authoring/v4/parser.js.map +1 -0
- package/dist/domain/authoring/v4/serializer.d.ts +6 -0
- package/dist/domain/authoring/v4/serializer.js +280 -0
- package/dist/domain/authoring/v4/serializer.js.map +1 -0
- package/dist/domain/authoring/v4/types.d.ts +50 -0
- package/dist/domain/authoring/v4/types.js +2 -0
- package/dist/domain/authoring/v4/types.js.map +1 -0
- package/dist/domain/ingest/apply-plan.d.ts +1 -1
- package/dist/domain/ingest/assembler.d.ts +9 -0
- package/dist/domain/ingest/assembler.js +98 -36
- package/dist/domain/ingest/assembler.js.map +1 -1
- package/dist/domain/ingest/asset-audit.d.ts +50 -0
- package/dist/domain/ingest/asset-audit.js +196 -0
- package/dist/domain/ingest/asset-audit.js.map +1 -0
- package/dist/domain/ingest/production-validation.d.ts +5 -4
- package/dist/domain/ingest/production-validation.js +10 -25
- package/dist/domain/ingest/production-validation.js.map +1 -1
- package/dist/domain/ingest/records.d.ts +1 -1
- package/dist/domain/ingest/records.js +1 -1
- package/dist/domain/ingest/records.js.map +1 -1
- package/dist/domain/ingest/serial-context.d.ts +1 -1
- package/dist/domain/ingest/validation.d.ts +1 -11
- package/dist/domain/ingest/validation.js +1 -199
- package/dist/domain/ingest/validation.js.map +1 -1
- package/dist/domain/ingest/video-apply.js +68 -45
- package/dist/domain/ingest/video-apply.js.map +1 -1
- package/dist/domain/script/address.d.ts +1 -32
- package/dist/domain/script/address.js +1 -144
- package/dist/domain/script/address.js.map +1 -1
- package/dist/domain/script/dispatch.d.ts +14 -0
- package/dist/domain/script/dispatch.js +45 -0
- package/dist/domain/script/dispatch.js.map +1 -0
- package/dist/domain/script/lookups.d.ts +1 -33
- package/dist/domain/script/lookups.js +1 -316
- package/dist/domain/script/lookups.js.map +1 -1
- package/dist/domain/script/parse.d.ts +1 -3
- package/dist/domain/script/parse.js +1 -164
- package/dist/domain/script/parse.js.map +1 -1
- package/dist/domain/script/patch/apply.d.ts +1 -2
- package/dist/domain/script/patch/apply.js +1 -30
- package/dist/domain/script/patch/apply.js.map +1 -1
- package/dist/domain/script/patch/helpers.d.ts +1 -17
- package/dist/domain/script/patch/helpers.js +1 -210
- package/dist/domain/script/patch/helpers.js.map +1 -1
- package/dist/domain/script/patch/inline-speaker.d.ts +1 -2
- package/dist/domain/script/patch/inline-speaker.js +1 -49
- package/dist/domain/script/patch/inline-speaker.js.map +1 -1
- package/dist/domain/script/patch/ops-action.d.ts +1 -12
- package/dist/domain/script/patch/ops-action.js +1 -366
- package/dist/domain/script/patch/ops-action.js.map +1 -1
- package/dist/domain/script/patch/ops-asset.d.ts +1 -14
- package/dist/domain/script/patch/ops-asset.js +1 -364
- package/dist/domain/script/patch/ops-asset.js.map +1 -1
- package/dist/domain/script/patch/ops-dialogue.d.ts +1 -2
- package/dist/domain/script/patch/ops-dialogue.js +1 -25
- package/dist/domain/script/patch/ops-dialogue.js.map +1 -1
- package/dist/domain/script/patch/ops-extend.d.ts +1 -8
- package/dist/domain/script/patch/ops-extend.js +1 -110
- package/dist/domain/script/patch/ops-extend.js.map +1 -1
- package/dist/domain/script/patch/ops-meta.d.ts +1 -5
- package/dist/domain/script/patch/ops-meta.js +1 -81
- package/dist/domain/script/patch/ops-meta.js.map +1 -1
- package/dist/domain/script/patch/ops-scene.d.ts +1 -6
- package/dist/domain/script/patch/ops-scene.js +1 -350
- package/dist/domain/script/patch/ops-scene.js.map +1 -1
- package/dist/domain/script/patch/ops-state.d.ts +1 -8
- package/dist/domain/script/patch/ops-state.js +1 -164
- package/dist/domain/script/patch/ops-state.js.map +1 -1
- package/dist/domain/script/patch/registry.d.ts +1 -2
- package/dist/domain/script/patch/registry.js +1 -52
- package/dist/domain/script/patch/registry.js.map +1 -1
- package/dist/domain/script/patch/types.d.ts +1 -10
- package/dist/domain/script/patch/types.js +1 -1
- package/dist/domain/script/patch/types.js.map +1 -1
- package/dist/domain/script/refs.d.ts +1 -4
- package/dist/domain/script/refs.js +1 -63
- package/dist/domain/script/refs.js.map +1 -1
- package/dist/domain/script/scene-refs.d.ts +1 -3
- package/dist/domain/script/scene-refs.js +1 -34
- package/dist/domain/script/scene-refs.js.map +1 -1
- package/dist/domain/script/schema.d.ts +1 -6
- package/dist/domain/script/schema.js +1 -55
- package/dist/domain/script/schema.js.map +1 -1
- package/dist/domain/script/selector.d.ts +1 -45
- package/dist/domain/script/selector.js +1 -184
- package/dist/domain/script/selector.js.map +1 -1
- package/dist/domain/script/shared/regex.d.ts +2 -0
- package/dist/domain/script/shared/regex.js +7 -0
- package/dist/domain/script/shared/regex.js.map +1 -0
- package/dist/domain/script/shared/types.d.ts +18 -0
- package/dist/domain/script/shared/types.js +9 -0
- package/dist/domain/script/shared/types.js.map +1 -0
- package/dist/domain/script/shared/validation.d.ts +10 -0
- package/dist/domain/script/shared/validation.js +2 -0
- package/dist/domain/script/shared/validation.js.map +1 -0
- package/dist/domain/script/shared.js +4 -6
- package/dist/domain/script/shared.js.map +1 -1
- package/dist/domain/script/types.d.ts +1 -123
- package/dist/domain/script/types.js +1 -8
- package/dist/domain/script/types.js.map +1 -1
- package/dist/domain/script/v3/address.d.ts +32 -0
- package/dist/domain/script/v3/address.js +136 -0
- package/dist/domain/script/v3/address.js.map +1 -0
- package/dist/domain/script/v3/lookups.d.ts +33 -0
- package/dist/domain/script/v3/lookups.js +316 -0
- package/dist/domain/script/v3/lookups.js.map +1 -0
- package/dist/domain/script/v3/ordinal.d.ts +8 -0
- package/dist/domain/script/v3/ordinal.js +91 -0
- package/dist/domain/script/v3/ordinal.js.map +1 -0
- package/dist/domain/script/v3/parse.d.ts +3 -0
- package/dist/domain/script/v3/parse.js +164 -0
- package/dist/domain/script/v3/parse.js.map +1 -0
- package/dist/domain/script/v3/patch/apply.d.ts +2 -0
- package/dist/domain/script/v3/patch/apply.js +31 -0
- package/dist/domain/script/v3/patch/apply.js.map +1 -0
- package/dist/domain/script/v3/patch/helpers.d.ts +17 -0
- package/dist/domain/script/v3/patch/helpers.js +209 -0
- package/dist/domain/script/v3/patch/helpers.js.map +1 -0
- package/dist/domain/script/v3/patch/inline-speaker.d.ts +2 -0
- package/dist/domain/script/v3/patch/inline-speaker.js +50 -0
- package/dist/domain/script/v3/patch/inline-speaker.js.map +1 -0
- package/dist/domain/script/v3/patch/ops-action.d.ts +12 -0
- package/dist/domain/script/v3/patch/ops-action.js +367 -0
- package/dist/domain/script/v3/patch/ops-action.js.map +1 -0
- package/dist/domain/script/v3/patch/ops-asset.d.ts +14 -0
- package/dist/domain/script/v3/patch/ops-asset.js +365 -0
- package/dist/domain/script/v3/patch/ops-asset.js.map +1 -0
- package/dist/domain/script/v3/patch/ops-dialogue.d.ts +2 -0
- package/dist/domain/script/v3/patch/ops-dialogue.js +26 -0
- package/dist/domain/script/v3/patch/ops-dialogue.js.map +1 -0
- package/dist/domain/script/v3/patch/ops-extend.d.ts +8 -0
- package/dist/domain/script/v3/patch/ops-extend.js +111 -0
- package/dist/domain/script/v3/patch/ops-extend.js.map +1 -0
- package/dist/domain/script/v3/patch/ops-meta.d.ts +5 -0
- package/dist/domain/script/v3/patch/ops-meta.js +82 -0
- package/dist/domain/script/v3/patch/ops-meta.js.map +1 -0
- package/dist/domain/script/v3/patch/ops-scene.d.ts +6 -0
- package/dist/domain/script/v3/patch/ops-scene.js +351 -0
- package/dist/domain/script/v3/patch/ops-scene.js.map +1 -0
- package/dist/domain/script/v3/patch/ops-state.d.ts +8 -0
- package/dist/domain/script/v3/patch/ops-state.js +165 -0
- package/dist/domain/script/v3/patch/ops-state.js.map +1 -0
- package/dist/domain/script/v3/patch/registry.d.ts +2 -0
- package/dist/domain/script/v3/patch/registry.js +53 -0
- package/dist/domain/script/v3/patch/registry.js.map +1 -0
- package/dist/domain/script/v3/patch/types.d.ts +10 -0
- package/dist/domain/script/v3/patch/types.js +2 -0
- package/dist/domain/script/v3/patch/types.js.map +1 -0
- package/dist/domain/script/v3/refs.d.ts +4 -0
- package/dist/domain/script/v3/refs.js +64 -0
- package/dist/domain/script/v3/refs.js.map +1 -0
- package/dist/domain/script/v3/scene-refs.d.ts +3 -0
- package/dist/domain/script/v3/scene-refs.js +35 -0
- package/dist/domain/script/v3/scene-refs.js.map +1 -0
- package/dist/domain/script/v3/schema.d.ts +6 -0
- package/dist/domain/script/v3/schema.js +56 -0
- package/dist/domain/script/v3/schema.js.map +1 -0
- package/dist/domain/script/v3/selector.d.ts +44 -0
- package/dist/domain/script/v3/selector.js +178 -0
- package/dist/domain/script/v3/selector.js.map +1 -0
- package/dist/domain/script/v3/types.d.ts +106 -0
- package/dist/domain/script/v3/types.js +2 -0
- package/dist/domain/script/v3/types.js.map +1 -0
- package/dist/domain/script/v3/validation.d.ts +3 -0
- package/dist/domain/script/v3/validation.js +200 -0
- package/dist/domain/script/v3/validation.js.map +1 -0
- package/dist/domain/script/v4/address.d.ts +61 -0
- package/dist/domain/script/v4/address.js +99 -0
- package/dist/domain/script/v4/address.js.map +1 -0
- package/dist/domain/script/v4/factory.d.ts +2 -0
- package/dist/domain/script/v4/factory.js +13 -0
- package/dist/domain/script/v4/factory.js.map +1 -0
- package/dist/domain/script/v4/from-v3.d.ts +29 -0
- package/dist/domain/script/v4/from-v3.js +307 -0
- package/dist/domain/script/v4/from-v3.js.map +1 -0
- package/dist/domain/script/v4/ids.d.ts +27 -0
- package/dist/domain/script/v4/ids.js +62 -0
- package/dist/domain/script/v4/ids.js.map +1 -0
- package/dist/domain/script/v4/ordinal.d.ts +3 -0
- package/dist/domain/script/v4/ordinal.js +66 -0
- package/dist/domain/script/v4/ordinal.js.map +1 -0
- package/dist/domain/script/v4/parse.d.ts +3 -0
- package/dist/domain/script/v4/parse.js +17 -0
- package/dist/domain/script/v4/parse.js.map +1 -0
- package/dist/domain/script/v4/patch/apply.d.ts +3 -0
- package/dist/domain/script/v4/patch/apply.js +24 -0
- package/dist/domain/script/v4/patch/apply.js.map +1 -0
- package/dist/domain/script/v4/patch/helpers.d.ts +32 -0
- package/dist/domain/script/v4/patch/helpers.js +138 -0
- package/dist/domain/script/v4/patch/helpers.js.map +1 -0
- package/dist/domain/script/v4/patch/ops-action.d.ts +13 -0
- package/dist/domain/script/v4/patch/ops-action.js +376 -0
- package/dist/domain/script/v4/patch/ops-action.js.map +1 -0
- package/dist/domain/script/v4/patch/ops-asset.d.ts +17 -0
- package/dist/domain/script/v4/patch/ops-asset.js +617 -0
- package/dist/domain/script/v4/patch/ops-asset.js.map +1 -0
- package/dist/domain/script/v4/patch/ops-extend.d.ts +11 -0
- package/dist/domain/script/v4/patch/ops-extend.js +86 -0
- package/dist/domain/script/v4/patch/ops-extend.js.map +1 -0
- package/dist/domain/script/v4/patch/ops-meta.d.ts +5 -0
- package/dist/domain/script/v4/patch/ops-meta.js +49 -0
- package/dist/domain/script/v4/patch/ops-meta.js.map +1 -0
- package/dist/domain/script/v4/patch/ops-scene-ref.d.ts +3 -0
- package/dist/domain/script/v4/patch/ops-scene-ref.js +98 -0
- package/dist/domain/script/v4/patch/ops-scene-ref.js.map +1 -0
- package/dist/domain/script/v4/patch/ops-structure.d.ts +6 -0
- package/dist/domain/script/v4/patch/ops-structure.js +236 -0
- package/dist/domain/script/v4/patch/ops-structure.js.map +1 -0
- package/dist/domain/script/v4/patch/registry.d.ts +2 -0
- package/dist/domain/script/v4/patch/registry.js +50 -0
- package/dist/domain/script/v4/patch/registry.js.map +1 -0
- package/dist/domain/script/v4/patch/schema.d.ts +7 -0
- package/dist/domain/script/v4/patch/schema.js +75 -0
- package/dist/domain/script/v4/patch/schema.js.map +1 -0
- package/dist/domain/script/v4/patch/types.d.ts +10 -0
- package/dist/domain/script/v4/patch/types.js +2 -0
- package/dist/domain/script/v4/patch/types.js.map +1 -0
- package/dist/domain/script/v4/selector.d.ts +11 -0
- package/dist/domain/script/v4/selector.js +124 -0
- package/dist/domain/script/v4/selector.js.map +1 -0
- package/dist/domain/script/v4/types.d.ts +120 -0
- package/dist/domain/script/v4/types.js +2 -0
- package/dist/domain/script/v4/types.js.map +1 -0
- package/dist/domain/script/v4/validation.d.ts +2 -0
- package/dist/domain/script/v4/validation.js +378 -0
- package/dist/domain/script/v4/validation.js.map +1 -0
- package/dist/infra/ingest/video-discovery.js +7 -4
- package/dist/infra/ingest/video-discovery.js.map +1 -1
- package/dist/infra/script-output-store.js +6 -11
- package/dist/infra/script-output-store.js.map +1 -1
- package/dist/infra/script-working-copy.js +15 -16
- package/dist/infra/script-working-copy.js.map +1 -1
- package/dist/llm/config.js +5 -4
- package/dist/llm/config.js.map +1 -1
- package/dist/llm/registry.d.ts +1 -0
- package/dist/llm/registry.js +3 -0
- package/dist/llm/registry.js.map +1 -1
- package/dist/llm/router.js +6 -8
- package/dist/llm/router.js.map +1 -1
- package/dist/llm/tasks/ingest/asset-audit.d.ts +6 -0
- package/dist/llm/tasks/ingest/asset-audit.js +164 -0
- package/dist/llm/tasks/ingest/asset-audit.js.map +1 -0
- package/dist/llm/tasks/ingest/asset-curate.d.ts +1 -1
- package/dist/llm/tasks/ingest/text-normalize.js +3 -3
- package/dist/llm/tasks/ingest/text-normalize.js.map +1 -1
- package/dist/llm/tasks/ingest/video-serial.js +3 -3
- package/dist/llm/tasks/ingest/video-serial.js.map +1 -1
- package/dist/llm/types.d.ts +1 -1
- package/dist/llm/types.js.map +1 -1
- package/dist/output.d.ts +2 -3
- package/dist/output.js +72 -109
- package/dist/output.js.map +1 -1
- package/dist/usecases/changelog.d.ts +2 -2
- package/dist/usecases/changelog.js +28 -36
- package/dist/usecases/changelog.js.map +1 -1
- package/dist/usecases/doctor.d.ts +2 -2
- package/dist/usecases/doctor.js +3 -5
- package/dist/usecases/doctor.js.map +1 -1
- package/dist/usecases/ingest/command.d.ts +2 -2
- package/dist/usecases/ingest/command.js +23 -6
- package/dist/usecases/ingest/command.js.map +1 -1
- package/dist/usecases/ingest/final-asset-audit.d.ts +39 -0
- package/dist/usecases/ingest/final-asset-audit.js +88 -0
- package/dist/usecases/ingest/final-asset-audit.js.map +1 -0
- package/dist/usecases/ingest/pass5-extract.js +5 -4
- package/dist/usecases/ingest/pass5-extract.js.map +1 -1
- package/dist/usecases/ingest/pass5-govern.js +13 -11
- package/dist/usecases/ingest/pass5-govern.js.map +1 -1
- package/dist/usecases/ingest/pipeline.js +77 -23
- package/dist/usecases/ingest/pipeline.js.map +1 -1
- package/dist/usecases/ingest/serial-govern.d.ts +2 -1
- package/dist/usecases/ingest/serial-govern.js +16 -8
- package/dist/usecases/ingest/serial-govern.js.map +1 -1
- package/dist/usecases/ingest/status.d.ts +2 -2
- package/dist/usecases/ingest/status.js +1 -1
- package/dist/usecases/ingest/status.js.map +1 -1
- package/dist/usecases/ingest/video-pipeline.js +121 -29
- package/dist/usecases/ingest/video-pipeline.js.map +1 -1
- package/dist/usecases/ingest/view-command.d.ts +2 -2
- package/dist/usecases/ingest/view-command.js +7 -6
- package/dist/usecases/ingest/view-command.js.map +1 -1
- package/dist/usecases/ingest/view-server.d.ts +2 -2
- package/dist/usecases/ingest/view-server.js +9 -7
- package/dist/usecases/ingest/view-server.js.map +1 -1
- package/dist/usecases/script/actions.d.ts +2 -2
- package/dist/usecases/script/actions.js +106 -11
- package/dist/usecases/script/actions.js.map +1 -1
- package/dist/usecases/script/actor.d.ts +2 -2
- package/dist/usecases/script/actor.js +3 -4
- package/dist/usecases/script/actor.js.map +1 -1
- package/dist/usecases/script/actors.d.ts +2 -2
- package/dist/usecases/script/actors.js +18 -9
- package/dist/usecases/script/actors.js.map +1 -1
- package/dist/usecases/script/add-actor.d.ts +2 -2
- package/dist/usecases/script/add-episode.d.ts +2 -2
- package/dist/usecases/script/add-location.d.ts +2 -2
- package/dist/usecases/script/add-prop.d.ts +2 -2
- package/dist/usecases/script/alias.d.ts +2 -2
- package/dist/usecases/script/alias.js +13 -14
- package/dist/usecases/script/alias.js.map +1 -1
- package/dist/usecases/script/assets.d.ts +2 -2
- package/dist/usecases/script/assets.js +29 -5
- package/dist/usecases/script/assets.js.map +1 -1
- package/dist/usecases/script/audit-assets.d.ts +4 -0
- package/dist/usecases/script/audit-assets.js +37 -0
- package/dist/usecases/script/audit-assets.js.map +1 -0
- package/dist/usecases/script/command-constraints.d.ts +36 -0
- package/dist/usecases/script/command-constraints.js +114 -0
- package/dist/usecases/script/command-constraints.js.map +1 -0
- package/dist/usecases/script/context.d.ts +2 -2
- package/dist/usecases/script/context.js +34 -8
- package/dist/usecases/script/context.js.map +1 -1
- package/dist/usecases/script/create.d.ts +2 -2
- package/dist/usecases/script/create.js +5 -6
- package/dist/usecases/script/create.js.map +1 -1
- package/dist/usecases/script/delete.d.ts +2 -2
- package/dist/usecases/script/delete.js +15 -15
- package/dist/usecases/script/delete.js.map +1 -1
- package/dist/usecases/script/describe.d.ts +2 -2
- package/dist/usecases/script/describe.js +13 -12
- package/dist/usecases/script/describe.js.map +1 -1
- package/dist/usecases/script/dialogue.d.ts +2 -2
- package/dist/usecases/script/dialogue.js +18 -9
- package/dist/usecases/script/dialogue.js.map +1 -1
- package/dist/usecases/script/dispatch.d.ts +3 -0
- package/dist/usecases/script/dispatch.js +10 -0
- package/dist/usecases/script/dispatch.js.map +1 -0
- package/dist/usecases/script/do.d.ts +2 -2
- package/dist/usecases/script/do.js +105 -45
- package/dist/usecases/script/do.js.map +1 -1
- package/dist/usecases/script/emotion.d.ts +2 -2
- package/dist/usecases/script/emotion.js +14 -3
- package/dist/usecases/script/emotion.js.map +1 -1
- package/dist/usecases/script/episodes.d.ts +2 -2
- package/dist/usecases/script/episodes.js +19 -8
- package/dist/usecases/script/episodes.js.map +1 -1
- package/dist/usecases/script/export-authoring.d.ts +2 -2
- package/dist/usecases/script/export-authoring.js +47 -26
- package/dist/usecases/script/export-authoring.js.map +1 -1
- package/dist/usecases/script/extend.d.ts +2 -2
- package/dist/usecases/script/extend.js +43 -31
- package/dist/usecases/script/extend.js.map +1 -1
- package/dist/usecases/script/ids.d.ts +2 -2
- package/dist/usecases/script/ids.js +68 -21
- package/dist/usecases/script/ids.js.map +1 -1
- package/dist/usecases/script/importance.d.ts +2 -2
- package/dist/usecases/script/importance.js +3 -4
- package/dist/usecases/script/importance.js.map +1 -1
- package/dist/usecases/script/insert.d.ts +2 -2
- package/dist/usecases/script/insert.js +80 -46
- package/dist/usecases/script/insert.js.map +1 -1
- package/dist/usecases/script/issues.d.ts +2 -2
- package/dist/usecases/script/issues.js +10 -2
- package/dist/usecases/script/issues.js.map +1 -1
- package/dist/usecases/script/lib.d.ts +62 -7
- package/dist/usecases/script/lib.js +782 -184
- package/dist/usecases/script/lib.js.map +1 -1
- package/dist/usecases/script/locations.d.ts +2 -2
- package/dist/usecases/script/locations.js +18 -9
- package/dist/usecases/script/locations.js.map +1 -1
- package/dist/usecases/script/merge.d.ts +2 -2
- package/dist/usecases/script/merge.js +17 -17
- package/dist/usecases/script/merge.js.map +1 -1
- package/dist/usecases/script/move.d.ts +2 -2
- package/dist/usecases/script/move.js +30 -13
- package/dist/usecases/script/move.js.map +1 -1
- package/dist/usecases/script/parenthetical.d.ts +3 -0
- package/dist/usecases/script/parenthetical.js +52 -0
- package/dist/usecases/script/parenthetical.js.map +1 -0
- package/dist/usecases/script/props.d.ts +2 -2
- package/dist/usecases/script/props.js +18 -9
- package/dist/usecases/script/props.js.map +1 -1
- package/dist/usecases/script/refs.d.ts +2 -2
- package/dist/usecases/script/refs.js +61 -11
- package/dist/usecases/script/refs.js.map +1 -1
- package/dist/usecases/script/rename.d.ts +2 -2
- package/dist/usecases/script/rename.js +13 -12
- package/dist/usecases/script/rename.js.map +1 -1
- package/dist/usecases/script/replace.d.ts +2 -2
- package/dist/usecases/script/replace.js +6 -8
- package/dist/usecases/script/replace.js.map +1 -1
- package/dist/usecases/script/role.d.ts +2 -2
- package/dist/usecases/script/role.js +3 -4
- package/dist/usecases/script/role.js.map +1 -1
- package/dist/usecases/script/scenes.d.ts +2 -2
- package/dist/usecases/script/scenes.js +35 -7
- package/dist/usecases/script/scenes.js.map +1 -1
- package/dist/usecases/script/script-patch.d.ts +2 -2
- package/dist/usecases/script/script-patch.js +219 -72
- package/dist/usecases/script/script-patch.js.map +1 -1
- package/dist/usecases/script/script-validate.d.ts +2 -2
- package/dist/usecases/script/script-validate.js +11 -7
- package/dist/usecases/script/script-validate.js.map +1 -1
- package/dist/usecases/script/session.d.ts +3 -0
- package/dist/usecases/script/session.js +74 -65
- package/dist/usecases/script/session.js.map +1 -1
- package/dist/usecases/script/split.d.ts +2 -2
- package/dist/usecases/script/split.js +18 -14
- package/dist/usecases/script/split.js.map +1 -1
- package/dist/usecases/script/state-add.d.ts +2 -2
- package/dist/usecases/script/state-add.js +3 -4
- package/dist/usecases/script/state-add.js.map +1 -1
- package/dist/usecases/script/state-delete.d.ts +2 -2
- package/dist/usecases/script/state-delete.js +3 -4
- package/dist/usecases/script/state-delete.js.map +1 -1
- package/dist/usecases/script/state-rename.d.ts +2 -2
- package/dist/usecases/script/state-rename.js +3 -4
- package/dist/usecases/script/state-rename.js.map +1 -1
- package/dist/usecases/script/states.d.ts +2 -2
- package/dist/usecases/script/states.js +91 -20
- package/dist/usecases/script/states.js.map +1 -1
- package/dist/usecases/script/summary.d.ts +2 -2
- package/dist/usecases/script/summary.js +21 -2
- package/dist/usecases/script/summary.js.map +1 -1
- package/dist/usecases/script/synopsis-generate.d.ts +2 -2
- package/dist/usecases/script/synopsis-generate.js +38 -39
- package/dist/usecases/script/synopsis-generate.js.map +1 -1
- package/dist/usecases/script/synopsis.d.ts +2 -2
- package/dist/usecases/script/synopsis.js +20 -16
- package/dist/usecases/script/synopsis.js.map +1 -1
- package/dist/usecases/script/transition.d.ts +2 -2
- package/dist/usecases/script/transition.js +3 -4
- package/dist/usecases/script/transition.js.map +1 -1
- package/dist/usecases/script/type.d.ts +2 -2
- package/dist/usecases/script/type.js +3 -4
- package/dist/usecases/script/type.js.map +1 -1
- package/dist/usecases/script/v3/mutations.d.ts +2 -0
- package/dist/usecases/script/v3/mutations.js +5 -0
- package/dist/usecases/script/v3/mutations.js.map +1 -0
- package/dist/usecases/script/v4/mutations.d.ts +2 -0
- package/dist/usecases/script/v4/mutations.js +6 -0
- package/dist/usecases/script/v4/mutations.js.map +1 -0
- package/dist/usecases/script/v4/queries.d.ts +15 -0
- package/dist/usecases/script/v4/queries.js +191 -0
- package/dist/usecases/script/v4/queries.js.map +1 -0
- package/dist/usecases/script/working-copy.d.ts +4 -4
- package/dist/usecases/script/working-copy.js +98 -94
- package/dist/usecases/script/working-copy.js.map +1 -1
- package/dist/usecases/script/worldview.d.ts +2 -2
- package/dist/usecases/script/worldview.js +3 -4
- package/dist/usecases/script/worldview.js.map +1 -1
- package/dist/usecases/script/write-authoring.d.ts +2 -2
- package/dist/usecases/script/write-authoring.js +125 -50
- package/dist/usecases/script/write-authoring.js.map +1 -1
- package/dist/usecases/update.d.ts +2 -2
- package/dist/usecases/update.js +32 -47
- package/dist/usecases/update.js.map +1 -1
- package/package.json +3 -2
- package/skills/scriptctl/SKILL.md +128 -282
- package/skills/scriptctl/references/atomic-edit-workflow.md +23 -38
- package/skills/scriptctl/references/bulk-authoring.md +35 -154
- package/skills/scriptctl/references/ingest-workflow.md +12 -11
- package/skills/scriptctl/references/production-writing-standard.md +38 -67
- package/skills/scriptctl/references/state-reference-repair.md +19 -42
- package/dist/help-text.d.ts +0 -2
- package/dist/help-text.js +0 -1112
- package/dist/help-text.js.map +0 -1
|
@@ -1,365 +1,211 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: scriptctl
|
|
3
|
-
description: "剧本 script.json
|
|
3
|
+
description: "剧本 script.json 的本地查询、文件化批量写作、原子精修、素材 ingest 与 revision publish CLI。处理 Script v3/v4、两个 script.json、剧本资产/state、Action、场景引用或 authoring 时使用。"
|
|
4
4
|
metadata:
|
|
5
|
-
version: "0.
|
|
6
|
-
scriptctl_version: "0.
|
|
5
|
+
version: "0.27.0"
|
|
6
|
+
scriptctl_version: "0.51.0"
|
|
7
7
|
author: "official"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# scriptctl
|
|
11
11
|
|
|
12
|
-
`scriptctl`
|
|
12
|
+
`scriptctl` 始终对 `--script-path` 指向的本地 `script.json` 工作。远端剧本先
|
|
13
|
+
`checkout`,完成本地查询、修改和 `validate` 后再 `publish`。
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
- **转剧本入库**:`ingest`(抽取,产出 `workspace/script.json`)→ 标准化复核 → `view`(自查)→ `publish`(入库)。见 [references/ingest-workflow.md](references/ingest-workflow.md)。
|
|
16
|
-
- **完整块创作/替换**:从零时直接分配 canonical ID 并写完整 `.scriptctl`;修改本地既有剧本时用 `ids` 取新 ID、用 `export` 取既有完整块 → `write` plan → `write --apply --plan <digest>`。
|
|
17
|
-
- **精修既有剧本**:查询 + 原子写 + 选择器批量 + `do`。
|
|
15
|
+
## 先识别版本
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
读取 `script.json.version`:
|
|
20
18
|
|
|
21
|
-
|
|
19
|
+
- Script v4:新建和 ingest 的默认方言。episode、scene、Action、asset 使用带类型前缀的短随机 ID;修改只用正式 ID。
|
|
20
|
+
- Script v3:线上既有项目的冻结方言。查询、修改、authoring 和 publish 继续使用 v3 地址与字段。
|
|
21
|
+
|
|
22
|
+
不要根据字段形状猜版本。命令会按显式 `version` 自动分流。
|
|
23
|
+
|
|
24
|
+
## 标准剧本通用流程
|
|
22
25
|
|
|
23
26
|
1. **忠实理解输入**:创作时落实题材、集纲和人物关系;提取与解析时保留源素材可验证的对白、动作、顺序、场界和状态变化。把不确定信息标为待复核,不补写源素材未表达的事实。
|
|
24
27
|
2. **注册资产**:先读现有人物、地点、道具;正文将出现的资产必须先注册。批量创作在 authoring `<create>` 中声明,ingest 由抽取流程建立。人物保留一个稳定的 `actor_name` 作为真名,称呼、绰号、职位放 `aliases[]`,同一人物共用一个 actor。
|
|
25
28
|
3. **建好资产状态**:每个新资产必须有唯一的 `default` state;批量创作在 `<create>` 中随资产声明,持久、可复用、需要独立生成视觉资产的变体再声明独立 state。
|
|
26
|
-
4. **建立真实场并绑定资产**:完整 scene 显式声明本场地点、全部人物、全部道具及其实际 state
|
|
29
|
+
4. **建立真实场并绑定资产**:完整 scene 显式声明本场地点、全部人物、全部道具及其实际 state。V4 同一资产只出现一条场景引用,完整状态写入无序 `state_ids` 集合;V3 按其既有单状态引用结构处理。
|
|
27
30
|
5. **写入或标准化正文**:从零、续写和连续正文修改使用 `.scriptctl` authoring 文件;已有目标先 `export`,再执行 `write` plan/apply。ingest 先完成抽取,大块标准化修改同样走 export/write。发现新资产或新 state 时,先补入 `<create>` 和 scene 引用,再继续正文。
|
|
28
31
|
6. **逐场复核**:每批正文落盘后读回 `scenes / actions`;一集完成后运行 `validate`。`validate` 通过只代表结构与引用合法,仍需完成内容标准和源素材一致性复核。
|
|
32
|
+
7. **全剧资产审计**:全剧完成后运行 `audit-assets --script-path <file>`,检查人物身份重复、同义视觉状态、未使用/落单状态,以及重复地点和道具资产。审计只给建议,不自动合并;必须核对剧情、身份、外观和跨集连续性后再修复。
|
|
29
33
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
- `action.content` 中禁止人称代词和依赖上下文猜测的指代,包括“他 / 她 / 它 / 他们 / 她们 / 对方 / 其中一人 / 另一个人 / 前者 / 后者 / 有人 / 两人”等。每一个独立行动者都使用其唯一 `actor_name`:写“林夏拿起铁棒,陈默关门”,不写“她拿起铁棒,另一个人关门”。
|
|
33
|
-
- 动作描述只用 `actor_name`,不用 alias、职位或临时称呼代替真名。`dialogue.content` 可以自然使用“我 / 你 / 他是谁”等人称代词;对白的说话人仍必须通过 `--actor <actor_id>` 明确绑定。非角色声源用 `--kind system|broadcast|offscreen|group`,不能伪造 actor。
|
|
34
|
-
- Action 写成可直接转化为画面的行为链,明确行动者、具体动作、作用对象、空间方向和可见结果;需要镜头控制时补充景别、机位、镜头运动和画面焦点。把抽象心理和评价转成表情、肢体、道具变化或环境反应。
|
|
35
|
-
- 每条 dialogue 绑定说话人物或非角色发声源。情绪、语气和短促伴随动作写入 `emotion`;影响走位、道具或连续性的动作单独写成 Action。两人同时说话时写成相邻两条 dialogue,第二条的 `emotion` 以“同时”开头;这是一种写作约定,不表示结构化重叠时间轴。
|
|
36
|
-
- 凡是能独立说话、拿取或交接道具、推动动作的人,即使只出现一次,也注册为 actor(可设 `importance background`)。无法区分成员、无需连续造型的环境人群写成群体 Action;群体共同发声使用 `--kind group --label <群体名>`。`group` 只是一条对白的发声源,不创建人物资产、state 或参考图。仅有 group 发声、没有可识别 actor 的场面可直接写入,scene 绑定实际 location 与关键道具。
|
|
37
|
-
- CLI 只校验显式结构关系,不从自由文本猜资产。写作者必须逐句保证正文中的真名、地点和道具都能映射到本场 `scene-ref`。
|
|
38
|
-
|
|
39
|
-
### 场界判定
|
|
40
|
-
|
|
41
|
-
场是时间、空间和叙事连续的单元。同一地点、同一连续时段、同一叙事线且动作未中断时,继续向当前 scene 追加;笑点升级、攻防回合、角色进出、剧情节拍和同场人物造型变化不是分场理由。地点切换、明显跳时、切到另一条同时叙事线或明确转场时建立新 scene。一集可以只有一场。
|
|
42
|
-
|
|
43
|
-
location 表示可独立布置、可独立生成参考图、可重复引用的稳定物理空间;客厅、卧室、卫生间、大厅、广场分别注册。相关空间使用“豪宅·客厅”“豪宅·卧室”这类统一命名表达归属。每个 scene 绑定一个 location;人物引用可以重复,同一 actor 可按实际画面追加同 state 或不同 state 的多份引用。
|
|
34
|
+
## 三条工作流
|
|
44
35
|
|
|
45
|
-
|
|
36
|
+
1. 素材转剧本:`ingest` → 内容复核 → `view` / `validate` → `publish`。见
|
|
37
|
+
[references/ingest-workflow.md](references/ingest-workflow.md)。
|
|
38
|
+
2. 完整块创作或替换:`ids` → `export` 或新写 `.scriptctl` → `write` plan →
|
|
39
|
+
`write --apply --plan <digest>`。见
|
|
40
|
+
[references/bulk-authoring.md](references/bulk-authoring.md)。
|
|
41
|
+
3. 少量精修:查询定位 → 单 ID 原子 verb;同构多点用 selector;异构多点用
|
|
42
|
+
`do`。见 [references/atomic-edit-workflow.md](references/atomic-edit-workflow.md)。
|
|
46
43
|
|
|
47
|
-
|
|
44
|
+
## 本地文件边界
|
|
48
45
|
|
|
49
|
-
|
|
46
|
+
- 普通命令默认读取 `<cwd>/workspace/script.json`;操作其他文件时始终显式传
|
|
47
|
+
`--script-path <file>`。
|
|
48
|
+
- `--workspace-path` 只属于 `ingest`、`ingest status` 和 `view`。
|
|
49
|
+
- 同时处理原剧与目标剧时,每条命令都显式带对应 `--script-path`,只从原剧读,
|
|
50
|
+
只向目标剧写。
|
|
51
|
+
- `checkout` 不覆盖未管理文件或本地修改;`publish` 按工作副本 revision 严格写入。
|
|
50
52
|
|
|
51
|
-
|
|
52
|
-
- 编辑远端已有剧本:先 `scriptctl checkout [--script-path FILE]`,再对该文件运行任意原子命令,最后 `scriptctl publish [--script-path FILE]`。
|
|
53
|
-
- `checkout` 会建立 `.scriptctl/<filename>.working-copy.json`,记录远端项目、API 地址、base revision 和语义内容 hash。已有未管理文件或有本地修改时拒绝覆盖;只有明确 `--discard-local` 才丢弃。
|
|
54
|
-
- `status` 完全本地判断 managed / clean / dirty,不访问网络。
|
|
55
|
-
- `publish` 对已管理文件拉取最新 snapshot,以本地稿为准计算 diff 后严格 CAS PATCH;CAS 或网络失败会重拉、重算、重试。干净工作副本不访问网络。无 metadata 的文件只允许以 base revision 0 首次发布。
|
|
56
|
-
- 所有写命令按文件加锁;外部编辑器在命令期间改文件也会在落盘前被检测并拒绝覆盖。
|
|
57
|
-
- `--workspace-path` 仍只属于 `ingest` / `view` / `ingest status`;普通读写和 publish 用 `--script-path`。
|
|
53
|
+
## 查询与定位
|
|
58
54
|
|
|
59
|
-
|
|
55
|
+
默认文本查询输出 TSV。需要结构化数据时使用 `--json`:顶层固定包含
|
|
56
|
+
`ok`、`exit_code`,表格数据位于 `rows`,列顺序位于 `row_columns`。地址流使用
|
|
57
|
+
`--format addr`。写命令的 JSON 使用 `op`、`changed`、`plan_digest`、
|
|
58
|
+
`validation`、`script_path` 等命令自身字段,不包含展示用的标题或结果区块。
|
|
59
|
+
JSON 错误包含 `error_code`、`message` 和可选 `hint`。
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
常用查询:
|
|
62
62
|
|
|
63
63
|
```bash
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
scriptctl
|
|
69
|
-
scriptctl
|
|
70
|
-
scriptctl
|
|
71
|
-
|
|
72
|
-
# 建/写新剧:直接分配 canonical ID,用 authoring 文件一次表达资产、状态、集、场和正文
|
|
73
|
-
scriptctl write new-story.scriptctl --create \
|
|
74
|
-
--script-path "$NEW" # plan
|
|
75
|
-
scriptctl write new-story.scriptctl --create --apply --plan sha256:... \
|
|
76
|
-
--script-path "$NEW" # apply
|
|
77
|
-
|
|
78
|
-
# 逐场对照:同一集在两份里并排看
|
|
79
|
-
scriptctl scenes --in ep_003 --script-path "$ORIG"
|
|
80
|
-
scriptctl scenes --in ep_003 --script-path "$NEW"
|
|
64
|
+
scriptctl summary --script-path "$SCRIPT"
|
|
65
|
+
scriptctl episodes --script-path "$SCRIPT"
|
|
66
|
+
scriptctl scenes --in '@ep:3' --script-path "$SCRIPT"
|
|
67
|
+
scriptctl actions --grep "台下掌声" --script-path "$SCRIPT"
|
|
68
|
+
scriptctl actors --counts --script-path "$SCRIPT"
|
|
69
|
+
scriptctl states actA3kP9x --script-path "$SCRIPT"
|
|
70
|
+
scriptctl refs actA3kP9x/stB4xR8p --script-path "$SCRIPT"
|
|
71
|
+
scriptctl validate --script-path "$SCRIPT"
|
|
81
72
|
```
|
|
82
73
|
|
|
83
|
-
|
|
84
|
-
- 事件级对齐:原剧 `actions` 的 `timestamp` 列 + `scenes` 的 `t=t_start..t_end` 给出每段的时间跨度;对标时按这个跨度切新剧的段落。
|
|
85
|
-
- 人物状态弧线:`states <actor>` 每个状态末尾的 `episodes=<区间>` 告诉你某个造型/形态在原剧哪些集出现,转绘时据此规划新剧的状态。
|
|
74
|
+
序号锚点是 1-based 查询语法:
|
|
86
75
|
|
|
87
|
-
|
|
76
|
+
- `@ep:3`
|
|
77
|
+
- `@ep:3/scn:2`
|
|
78
|
+
- `@ep:3/scn:2/ac:5`
|
|
79
|
+
- `@scn:12`
|
|
80
|
+
- `@ac:48`
|
|
88
81
|
|
|
89
|
-
|
|
82
|
+
区间包含两端,端点正反等价,按当前文档顺序解释。V4 查询返回正式 ID;V3
|
|
83
|
+
查询返回可写的 v3 地址。先按序号或正文查询,再把结果中的正式地址用于修改。
|
|
90
84
|
|
|
91
85
|
| 想做什么 | 命令 |
|
|
92
86
|
|---|---|
|
|
93
87
|
| **了解剧情 / 全貌**:synopsis/worldview/style/logline/theme/main_characters + 标题/集数/场数/资产数("这剧本是关于什么"先跑这个) | `scriptctl summary` |
|
|
94
88
|
| 每集字数 / 场数 / action 数 **+ 每集剧情梗概** | `scriptctl episodes`(`--min-chars 1000` 找长集) |
|
|
95
|
-
| 看某集的所有场(含 `t=t_start..t_end` 时段) | `scriptctl scenes --in
|
|
96
|
-
| 看某场的资产 + action 数 | `scriptctl scenes --in
|
|
89
|
+
| 看某集的所有场(含 `t=t_start..t_end` 时段) | `scriptctl scenes --in '@ep:7'` |
|
|
90
|
+
| 看某场的资产 + action 数 | `scriptctl scenes --in '@ep:7/scn:5'` |
|
|
97
91
|
| **按正文搜某句话定位 action**(最常用) | `scriptctl actions --grep "<片段>"` |
|
|
98
|
-
| 列某集所有 action
|
|
99
|
-
| 看单条 action 正文 | `scriptctl actions --in
|
|
100
|
-
| action 多维过滤 | `scriptctl actions --in
|
|
101
|
-
| 某角色出现的所有场 | `scriptctl scenes --has-actor
|
|
102
|
-
| **列某资产的所有 state + 状态弧线**(改造型前必查) | `scriptctl states
|
|
92
|
+
| 列某集所有 action(含 timestamp / speaker / 正文 /表演提示) | `scriptctl actions --in '@ep:1'` |
|
|
93
|
+
| 看单条 action 正文 | `scriptctl actions --in '@ep:1/scn:1/ac:3'` |
|
|
94
|
+
| action 多维过滤 | `scriptctl actions --in '@ep:1' --type dialogue --actor <actor-id> --has speaker` |
|
|
95
|
+
| 某角色出现的所有场 | `scriptctl scenes --has-actor <actor-id>`(另有 `--has-location`/`--has-prop`) |
|
|
96
|
+
| **列某资产的所有 state + 状态弧线**(改造型前必查) | `scriptctl states <asset-id>` |
|
|
103
97
|
| 资产**出场统计**(几场/几集,压成集区间) | `scriptctl actors --counts` / `locations --counts` / `props --counts` |
|
|
104
|
-
| 某资产 /
|
|
98
|
+
| 某资产 / 状态反查 | `scriptctl refs <asset-id>` / `scriptctl refs <asset-id>/<state-id>` |
|
|
105
99
|
| 当前校验问题 / 跑校验 | `scriptctl issues --severity error` / `scriptctl validate` |
|
|
100
|
+
| 全剧人物/状态/地点/道具去重审计 | `scriptctl audit-assets --script-path workspace/script.json` |
|
|
106
101
|
|
|
107
|
-
|
|
108
|
-
- `actions` TSV 列:`addr timestamp type speaker actor emotion content`。`timestamp` 是该 action 的 `extend.timestamp`(集内 `M:SS`,无则空)。事件跨度 = 首末 action 时间戳之差。`speaker` 列是 v3 内联发声源(actor 或 system/broadcast/offscreen/group)。
|
|
109
|
-
- `scenes` 行尾 `t=<t_start>..<t_end>`:该场首/末带时间戳 action 的时间。
|
|
110
|
-
- `states <asset>`:接受裸 id(`act_001`/`loc_001`/`prp_001`);每个状态末尾 `episodes=<区间> (N eps, M scenes)` 是该状态的**集弧线**(按 scene 造型引用统计);从不被引用的状态显示 `episodes=none`。
|
|
111
|
-
- `--counts`:追加 `scenes=N episodes_count=M episodes=<区间>`。默认不带,保持精简。
|
|
102
|
+
## Script v4 写入
|
|
112
103
|
|
|
113
|
-
|
|
104
|
+
V4 新 ID 是类型前缀加 6 位 Bitcoin Base58:
|
|
114
105
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
| 改 action 正文(替换/删一段) | `scriptctl replace <ep/scn#idx> --from X --to Y`(加 `--regex`;`--to` 省略即删) |
|
|
118
|
-
| 改 action type | `scriptctl type <ep/scn#idx> <dialogue\|action\|inner_thought\|transition>` |
|
|
119
|
-
| 改 action 归属角色(内联发声源) | `scriptctl actor <ep/scn#idx> <act_id\|none>` |
|
|
120
|
-
| 改/清 action 情绪 | `scriptctl emotion <ep/scn#idx> "紧张"` / `--clear` |
|
|
121
|
-
| **把某行设成对白 + 定内联发声源** | `scriptctl dialogue <ep/scn#idx> --actor act_001`(角色)/ `--kind <system\|broadcast\|offscreen\|group> [--label 广播]`(非角色声源)。同时把 type 翻成 dialogue |
|
|
122
|
-
| **设/改场景里某资产的造型(state)** | `scriptctl scene-ref <ep/scn> <actor\|location\|prop>:<id> --state <state_id>`;同一 actor 再加一份用 `--append`,重复后用 `--occurrence <n>` 精确修改/清除/删除第 n 份。新写正文时必须给实际 state;`--clear` / `--state none` 仅用于修复中间态。location 单值(set 即替换) |
|
|
123
|
-
| 改资产名/描述/别名/role | `scriptctl rename actor:<id> "X"` / `describe` / `alias --add X` / `role <主角\|配角>` |
|
|
124
|
-
| **设资产重要度**(决定下游是否生成视觉资产+状态跟踪) | `scriptctl importance <actor\|location\|prop>:<id> <featured\|background>`(featured=主角/配角;background=龙套/背景,下游跳过) |
|
|
125
|
-
| 给资产加 state | `scriptctl state-add actor:<id> "震惊"` |
|
|
126
|
-
| **改/删某个 state** | `scriptctl state-rename actor:<id>/<st_id> "新名"` / `scriptctl state-delete actor:<id>/<st_id> --strategy remove`(引用修复核验见 [references/state-reference-repair.md](references/state-reference-repair.md)) |
|
|
127
|
-
| 挂自由维度键值 | `scriptctl extend <addr> --key <名> --value <JSON>`(如给 action 挂 `timestamp`) |
|
|
128
|
-
| 合并资产/场景 | `scriptctl merge actor:<src> --into actor:<dst>` |
|
|
129
|
-
| 删 action/scene/资产 | `scriptctl delete <addr>`(资产要 `--strategy replace\|remove`) |
|
|
130
|
-
| 插 action/scene | `scriptctl insert <ep/scn> --type X --content X`(对白/心声再传 `--actor <id>` 或 `--kind ... [--label ...]`;本场资产及 state 未绑定会拒绝)/ `insert <ep> --location <id>` |
|
|
131
|
-
| 移动/分场 | `scriptctl move <addr> <to>` / `split <ep/scn> --at <idx>` |
|
|
132
|
-
| 设整本/分集剧情梗概 | `scriptctl synopsis "整本梗概"` / `scriptctl synopsis ep_001 "本集梗概"`(`synopsis generate` 用 LLM 批量生成) |
|
|
133
|
-
| 设世界观 | `scriptctl worldview <现代\|古代历史\|...>` |
|
|
134
|
-
|
|
135
|
-
> 发声源写在**对白行内联**:角色用 `dialogue <at> --actor <id>`(或 `actor <at> <id>`),非角色声源用 `dialogue <at> --kind <system\|broadcast\|offscreen\|group>`。造型(state)挂在**场景级 cast 引用**上:`scene-ref <ep/scn> <kind:id> --state <state_id>`。
|
|
136
|
-
|
|
137
|
-
### 选择器批量(一条命令扫一片 —— 读写共享同一套选择语法)
|
|
138
|
-
|
|
139
|
-
把单点写动词的「address」换成一个**选择**,它就对**所有命中的 action** 一次性改。支持选择器的写动词:`replace / type / actor / emotion / transition`。
|
|
140
|
-
|
|
141
|
-
- **选范围 `--in`**:`ep_003..ep_007`(集区间)/ `ep/scn` 区间 / 逗号多区间 / `'*'`(全本)。
|
|
142
|
-
- **加谓词**(和 `actions` 查询**完全一样**的 flag,AND 组合):`--type` `--actor` `--grep /re/` `--has speaker|transition`。
|
|
143
|
-
- 🔴 **护栏:多点写默认 dry-run**(回显命中数 + blast-radius,不落盘),加 **`--apply`** 才真写。单点(给 address)仍直写。
|
|
144
|
-
|
|
145
|
-
```bash
|
|
146
|
-
# 清全本所有 action 开头的 [xxx] 标记:一条正则扫全本
|
|
147
|
-
scriptctl replace --in '*' --regex --from '^\s*\[[^\]]*\]\s*' --to '' # 先看命中
|
|
148
|
-
scriptctl replace --in '*' --regex --from '^\s*\[[^\]]*\]\s*' --to '' --apply # 落地
|
|
149
|
-
# 第3-7集里某角色的对白统一改归属(谓词直达,无需先查地址)
|
|
150
|
-
scriptctl actor --in ep_003..ep_007 --actor act_001 act_009 --apply
|
|
151
|
-
# 第3-7集里某角色的对白统一标情绪
|
|
152
|
-
scriptctl emotion --in ep_003..ep_007 --actor act_001 "紧张" --apply
|
|
106
|
+
```text
|
|
107
|
+
ep…… scn…… ac…… act…… loc…… prp…… st……
|
|
153
108
|
```
|
|
154
109
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
### 完整块批量创作与替换(`export` → authoring 文件 → `write`)
|
|
158
|
-
|
|
159
|
-
从零写、向后续写、大量正文变更,以及写一整本、整集、整场或替换中间连续几集/几场/几条 action 时,使用 `.scriptctl` authoring 文件。完整语法与约束见 [references/bulk-authoring.md](references/bulk-authoring.md)。
|
|
110
|
+
`ids` 只生成候选,不预留:
|
|
160
111
|
|
|
161
112
|
```bash
|
|
162
|
-
|
|
163
|
-
scriptctl ids --kind
|
|
164
|
-
scriptctl ids --kind scene --count 4 --script-path workspace/script.json
|
|
165
|
-
|
|
166
|
-
# 改既有第 2-4 集:先导出完整块,再让模型只改导出文件
|
|
167
|
-
scriptctl export episodes --in "ep_002..ep_004" \
|
|
168
|
-
--output rewrite.scriptctl --script-path workspace/script.json
|
|
169
|
-
|
|
170
|
-
# 默认只生成完整计划,不写
|
|
171
|
-
scriptctl write rewrite.scriptctl --replace --script-path workspace/script.json
|
|
172
|
-
|
|
173
|
-
# 读取计划里的 plan_digest,原样带回;任何源文件、mode、目标或本地剧本变化都会使它失效
|
|
174
|
-
scriptctl write rewrite.scriptctl --replace --apply --plan sha256:... \
|
|
175
|
-
--script-path workspace/script.json
|
|
113
|
+
scriptctl ids --kind action --count 4
|
|
114
|
+
scriptctl ids --kind scene --count 2 --script-path "$SCRIPT"
|
|
176
115
|
```
|
|
177
116
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
| 需求 | 导出/authoring target | mode |
|
|
181
|
-
|---|---|---|
|
|
182
|
-
| 从零创建整本 | 直接分配 canonical ID,写完整 `<script>` | `--create` |
|
|
183
|
-
| 追加完整集/场 | `<episode>` / `<scene parent=...>` | `--create` |
|
|
184
|
-
| 向既有场末尾续写大量 action | `export scenes`,在完整 `<body>` 末尾续写 | `--replace` |
|
|
185
|
-
| 一对一替换多集/多场 | `export episodes` / `export scenes` | `--replace` |
|
|
186
|
-
| 用不同数量节点替换连续几集/几场 | `export episode-spans` / `export scene-spans` | `--replace` |
|
|
187
|
-
| 替换某场中间连续 action | `export action-spans` | `--replace` |
|
|
188
|
-
|
|
189
|
-
一个 authoring 文件只有一种 target kind。完整 episode/scene 可以是待填充空骨架,计划会报告 empty/cleared warning;单条空 content 也会提示。scene span 的每个区间只能在同一 episode;action span 只能在同一 scene。区间端点按当前数组顺序判断,不按 ID 数字判断;新 ID 可以放在 replacement 内容中,但不能当旧区间端点。所有 span 都必须有非空 replacement。`write` 每次都持有本地独占锁,应用时还校验计划绑定的语义基线并用临时文件原子替换。
|
|
190
|
-
|
|
191
|
-
### 少量异构精修 `do`(一组各不相同的改动 = 一个事务)
|
|
192
|
-
|
|
193
|
-
`do` 用于对既有剧本执行少量、离散、彼此不同的精修。每行是一条去掉 `scriptctl` 的命令,整段全成或全不成。完整场、集、整本和连续正文的创作或替换使用 authoring `write`。
|
|
117
|
+
单点修改使用正式 ID:
|
|
194
118
|
|
|
195
119
|
```bash
|
|
196
|
-
scriptctl
|
|
197
|
-
scriptctl
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
dialogue
|
|
201
|
-
scene-ref ep_001/scn_001 actor:act_001 --state st_calm
|
|
202
|
-
merge actor:act_005 --into actor:act_001
|
|
203
|
-
insert ep_001/scn_006 --type action --content "暗夜,街道空无一人。"
|
|
204
|
-
EOF
|
|
120
|
+
scriptctl replace acR8cV4n --from "旧句" --to "新句" --script-path "$SCRIPT"
|
|
121
|
+
scriptctl parenthetical acT2fG6z --set "低声" --script-path "$SCRIPT"
|
|
122
|
+
scriptctl parenthetical acT2fG6z --set "" --script-path "$SCRIPT"
|
|
123
|
+
scriptctl parenthetical acT2fG6z --remove --script-path "$SCRIPT"
|
|
124
|
+
scriptctl dialogue acT2fG6z --actor actA3kP9x --state stB4xR8p --script-path "$SCRIPT"
|
|
205
125
|
```
|
|
206
126
|
|
|
207
|
-
`
|
|
208
|
-
|
|
209
|
-
### 原子建模命令(少量补充资产或骨架)
|
|
210
|
-
|
|
211
|
-
| 想做什么 | 命令 |
|
|
212
|
-
|---|---|
|
|
213
|
-
| 建空白剧本(v3 骨架) | `scriptctl create [--title X]` |
|
|
214
|
-
| 加人物 | `scriptctl add-actor "林夏" [--role 主角\|配角] [--description X] [--alias X]` |
|
|
215
|
-
| 加场景地点 | `scriptctl add-location "便利店" [--description X]` |
|
|
216
|
-
| 加道具 | `scriptctl add-prop "怀表" [--description X]` |
|
|
217
|
-
| 加分集 | `scriptctl add-episode [--title X]` |
|
|
218
|
-
|
|
219
|
-
这些命令适合给既有剧本少量补充资产、集或空场。完整新剧及完整场/集创作使用 `.scriptctl` authoring 文件;全新剧本直接分配 canonical ID,既有本地剧本用 `ids` 取得未占用候选 ID,再执行 `write --create` plan/apply。
|
|
220
|
-
|
|
221
|
-
### Address 格式(决定 verb 作用对象,自动分发)
|
|
127
|
+
`parenthetical` 只属于 dialogue / inner_thought。字段省略表示没有表演提示;显式
|
|
128
|
+
空字符串与省略不同。影响走位、道具或连续性的动作写成独立 Action。
|
|
222
129
|
|
|
223
|
-
|
|
224
|
-
|---|---|---|
|
|
225
|
-
| `ep_001/scn_001#3` | action | `replace` / `type` / `actor` / `emotion` / `dialogue` |
|
|
226
|
-
| `ep_001/scn_001` | scene | `scene-ref`(配 `<kind:id>`)/ `split` |
|
|
227
|
-
| `actor:act_001` / `location:loc_001` / `prop:prp_001` | asset | `rename` / `importance` / `merge` / `delete` |
|
|
228
|
-
| `actor:act_001/st_001` | asset state | `state-rename` / `state-delete` |
|
|
229
|
-
| `ep_001` | episode | `insert`(scene)|
|
|
230
|
-
| `spk_001` | speaker 实体 | `refs` / `delete` |
|
|
130
|
+
V4 placement 使用父节点与相邻节点 ID:
|
|
231
131
|
|
|
232
|
-
> `states` 查询额外接受裸资产 id(`act_001`/`loc_001`/`prp_001`),按前缀推断种类。其它 verb 仍要完整 address。
|
|
233
|
-
|
|
234
|
-
## 经典最短路径
|
|
235
|
-
|
|
236
|
-
**改某句台词**:grep 找地址 → replace 落字。
|
|
237
132
|
```bash
|
|
238
|
-
scriptctl
|
|
239
|
-
|
|
240
|
-
scriptctl
|
|
133
|
+
scriptctl insert scnK6wT3c --action-id acD4eF6g \
|
|
134
|
+
--type action --content "陈默关上门。" --before acT2fG6z
|
|
135
|
+
scriptctl move acD4eF6g scnH7jK9m --after acR8cV4n
|
|
136
|
+
scriptctl split scnK6wT3c --at acT2fG6z --new-scene-id scnD4eF6g
|
|
241
137
|
```
|
|
242
|
-
`--to` 省略即删除。一个 action 内多次命中默认拒绝,把 `--from` 写更长更唯一,或显式 `--all`。
|
|
243
138
|
|
|
244
|
-
|
|
245
|
-
```bash
|
|
246
|
-
scriptctl dialogue ep_001/scn_003#5 --actor act_002 # 这行是 act_002 说的
|
|
247
|
-
scriptctl dialogue ep_001/scn_003#7 --kind broadcast --label 广播 # 非角色声源
|
|
248
|
-
```
|
|
139
|
+
## 场景资产与状态
|
|
249
140
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
scriptctl states act_001 # 先看有哪些 state
|
|
253
|
-
scriptctl scene-ref ep_001/scn_003 actor:act_001 --state st_injured
|
|
254
|
-
scriptctl scene-ref ep_001/scn_003 actor:act_001 --state st_calm --append
|
|
255
|
-
scriptctl scene-ref ep_001/scn_003 actor:act_001 --state st_injured --occurrence 2
|
|
256
|
-
```
|
|
141
|
+
V4 一个场景内同一资产只引用一次;引用携带完整、非空的 `state_ids` 集合。重复
|
|
142
|
+
`--state` 传入整个集合,写入时按 state ID 排序:
|
|
257
143
|
|
|
258
|
-
同一人物可在同一 scene 中出现多份引用。`--occurrence` 从 1 开始;命中多份却不指定 occurrence 时,修改、清除和删除都会拒绝执行。
|
|
259
|
-
|
|
260
|
-
**整理重复角色**:
|
|
261
144
|
```bash
|
|
262
|
-
scriptctl
|
|
263
|
-
|
|
145
|
+
scriptctl scene-ref scnK6wT3c actA3kP9x \
|
|
146
|
+
--state default --state stB4xR8p --script-path "$SCRIPT"
|
|
147
|
+
scriptctl scene-ref scnK6wT3c actA3kP9x --remove --script-path "$SCRIPT"
|
|
264
148
|
```
|
|
265
149
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
scriptctl actors --counts # 看谁出场少
|
|
269
|
-
scriptctl importance actor:act_042 background
|
|
270
|
-
```
|
|
150
|
+
actor speaker 可选一个 state;若指定,必须属于该 actor 在当前 scene 的
|
|
151
|
+
`state_ids`。状态集合不表示对白级落点,也没有先后顺序。
|
|
271
152
|
|
|
272
|
-
|
|
273
|
-
```bash
|
|
274
|
-
scriptctl issues --severity error
|
|
275
|
-
# → STATE_NOT_MATERIALIZED at ep_001/scn_003 actor:act_001
|
|
276
|
-
scriptctl states act_001 # 确认合法 state_id
|
|
277
|
-
scriptctl scene-ref ep_001/scn_003 actor:act_001 --state st_calm
|
|
278
|
-
```
|
|
153
|
+
state 修改前后都反查并校验:
|
|
279
154
|
|
|
280
|
-
**批量精修(同构一片 → 选择器;异构多点 → `do`)**:
|
|
281
155
|
```bash
|
|
282
|
-
scriptctl
|
|
283
|
-
scriptctl
|
|
284
|
-
|
|
156
|
+
scriptctl refs actA3kP9x/stB4xR8p --script-path "$SCRIPT"
|
|
157
|
+
scriptctl state-delete actA3kP9x/stB4xR8p \
|
|
158
|
+
--strategy replace --replacement default --script-path "$SCRIPT"
|
|
159
|
+
scriptctl validate --script-path "$SCRIPT"
|
|
285
160
|
```
|
|
286
161
|
|
|
287
|
-
|
|
162
|
+
详见 [references/state-reference-repair.md](references/state-reference-repair.md)。
|
|
288
163
|
|
|
289
|
-
|
|
164
|
+
## V3 项目
|
|
290
165
|
|
|
291
|
-
|
|
292
|
-
|---|---|
|
|
293
|
-
| 没剧本文本,从零写(题材/灵感/集纲在手) | 直接分配 canonical ID → 生成完整 `.scriptctl` → `write --create` plan/apply → `validate` → `publish` |
|
|
294
|
-
| 已有剧本/分镜/小说文本(txt/md/docx) | `scriptctl ingest --source-path <file>` → `view` 自查 → `publish` |
|
|
295
|
-
| 有视频(正片文件或分集目录) | `scriptctl ingest --source-path <file\|dir>` → `view` 点击定位复核 → `publish` |
|
|
296
|
-
|
|
297
|
-
三步:
|
|
166
|
+
V3 继续使用现有复合地址,例如:
|
|
298
167
|
|
|
299
168
|
```bash
|
|
300
|
-
#
|
|
301
|
-
|
|
302
|
-
scriptctl
|
|
303
|
-
scriptctl ingest --source-path uploads/正片/ --workspace-path 1_script/workspace # 视频,显式工作区(需 GEMINI_API_KEY)
|
|
304
|
-
|
|
305
|
-
# 2) 看进度 / 自查
|
|
306
|
-
scriptctl ingest status # 从工作区真实文件报进度(见下)
|
|
307
|
-
scriptctl view # 生成 review.html(视频版可点击定位)
|
|
308
|
-
scriptctl summary --script-path workspace/script.json # 抽完后当普通剧本读/改(注意目标是本地文件)
|
|
309
|
-
|
|
310
|
-
# 3) 入库:校验 v3 通过后写进目标 store
|
|
311
|
-
scriptctl publish --script-path workspace/script.json # 首次发布或更新受管工作副本
|
|
169
|
+
scriptctl replace ep_001/scn_003#5 --from "旧句" --to "新句"
|
|
170
|
+
scriptctl emotion ep_001/scn_003#5 "低声"
|
|
171
|
+
scriptctl scene-ref ep_001/scn_003 actor:act_001 --state st_002
|
|
312
172
|
```
|
|
313
173
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
- 抽取后用所有本地动词精修,再 publish。若后续继续编辑远端版本,checkout 到本地再改,不直接对 DB 跑原子 op。
|
|
317
|
-
- publish 使用 local-wins:远端 revision 变化时自动以最新 snapshot 为 base 重算 diff,最终远端内容与本地稿一致;不会做三方合并。
|
|
174
|
+
对 V3 文件运行 `export`、`write`、原子命令、`validate` 和 `publish` 时,CLI
|
|
175
|
+
会选择 V3 实现并保持原文件结构与既有 ID。
|
|
318
176
|
|
|
319
|
-
|
|
177
|
+
## 多点写与 plan
|
|
320
178
|
|
|
321
|
-
|
|
322
|
-
scriptctl ingest status # 人读:kind/state/各 pass 进度
|
|
323
|
-
scriptctl ingest status --json # 机器:.status = {kind,state,phase,passes[],units,validation,errors[]}
|
|
324
|
-
```
|
|
325
|
-
- `state`:`empty`(没开始)/ `incomplete`(在跑或中断、无硬错,重跑续)/ `failed`(有失败单元或校验没过)/ `ready`(script.json 已生成且 v3 校验通过)。
|
|
326
|
-
- 进度**纯从工作区文件推导**(没有独立状态机文件,不会和真实状态不同步)。它报的是"管线事实",不代表"已人工复核"——复核是你的完成门,另算。
|
|
327
|
-
|
|
328
|
-
### 🔴 遇到错误怎么办(抖动是常态,重跑即续)
|
|
329
|
-
|
|
330
|
-
大规模转剧本时,模型抖动 / 限流 / 单集超时 / 偶发解析失败是**正常现象**,不是 bug。护栏与恢复:
|
|
179
|
+
V4 单个明确 ID 的原子修改直接执行。任何单事务多点修改先生成完整计划:
|
|
331
180
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
- **`INGEST_VALIDATION_FAILED` = 最终 v3 校验没过**:看 `workspace/validation.json` 里的具体报错,用读写动词修 `--script-path workspace/script.json` 再校验/publish。
|
|
337
|
-
- **持续 401/403/404 或模型报错**:多半是网关/密钥/模型路由的环境问题(不是抖动、重跑也不好)。如实告诉用户,别反复空跑、别编造成功。视频转需要 `GEMINI_API_KEY`。
|
|
338
|
-
- 支持的输入:txt/md/docx + 视频(文件或分集目录);其它(pdf/json/xlsx)会被拒。
|
|
181
|
+
```bash
|
|
182
|
+
scriptctl replace --in 'acR8cV4n..acT2fG6z' --from "。" --to "!"
|
|
183
|
+
scriptctl replace --in 'acR8cV4n..acT2fG6z' --from "。" --to "!" \
|
|
184
|
+
--apply --plan sha256:...
|
|
339
185
|
|
|
340
|
-
|
|
186
|
+
scriptctl do edits.txt
|
|
187
|
+
scriptctl do edits.txt --apply --plan sha256:...
|
|
341
188
|
|
|
342
|
-
|
|
189
|
+
scriptctl patch changes.json
|
|
190
|
+
scriptctl patch changes.json --apply --plan sha256:...
|
|
191
|
+
```
|
|
343
192
|
|
|
344
|
-
|
|
193
|
+
V4 `do` / `patch` 内的创建操作必须显式携带候选 ID,确保 dry-run 与 apply
|
|
194
|
+
审阅的是同一批新节点;先用 `ids` 生成候选。
|
|
345
195
|
|
|
346
|
-
|
|
196
|
+
计划会完整列出每步/目标、前后计数、精确目标、全量新增/删除/保留身份、未触及
|
|
197
|
+
身份或 sibling、声明、保留的孤立资产和 validation;确认码绑定这份完整计划及
|
|
198
|
+
本地基线。CLI 不保存 plan 文件。当前工作流假设 Agent 从读取到最终写入期间
|
|
199
|
+
没有外部修改。
|
|
347
200
|
|
|
348
|
-
|
|
201
|
+
## 完成标准
|
|
349
202
|
|
|
350
|
-
|
|
203
|
+
每批修改后:
|
|
351
204
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
- 🔴 **沙箱里转完剧本要 `publish`**:`ingest` 只产 `workspace/script.json`,不 publish 后端/前端看不到。
|
|
357
|
-
- 只有 `ingest` 会请求大模型;`ingest status`、`view`、`publish`、`summary/actions` 等查询、`synopsis/replace/patch/do` 等读写命令**不打模型**。
|
|
358
|
-
- 多态 verb(`delete`/`merge`/`move`/`describe`/`rename`/`insert`/`scene-ref`)按 address 格式分发;flag 用错 kind 会直接报错(不静默忽略)。
|
|
359
|
-
- 新增正文前,`insert <ep/scn>` 要求本场已有地点,并且本场所有地点/人物/道具引用都绑定已物化 state;角色对白/心声的 actor 必须已在本场 cast 中。空镜、环境动作或非角色发声场可以没有人物引用。
|
|
360
|
-
- `actor_name` 在全剧内唯一(Unicode 规范化和大小写折叠后仍不能重复);别名只放 `aliases[]`。`validate` 会报告历史数据里的重名人物和“说话人不在本场”。
|
|
361
|
-
- 互斥 flag(`scene-ref` 的 --state/--clear/--remove;`dialogue` 的 --actor/--kind;`transition` 的 --process+--contrast/--clear)只能传一个,多传报 `*_FLAG_CONFLICT`。`scene-ref --append` 只与 `--state` 同用;重复 actor 引用用 1-based `--occurrence` 定位。
|
|
362
|
-
- `mock` provider 仅测试,禁止作为交付;provider 失败不降级 mock。
|
|
363
|
-
- 工具失败排查根因,不手工拼装 JSON 绕过校验。
|
|
205
|
+
1. 用 `actions` / `scenes` / `refs` 读回目标。
|
|
206
|
+
2. 运行 `validate`。
|
|
207
|
+
3. 做内容层复核;结构校验通过不代表剧情、对白和画面已达标。
|
|
208
|
+
4. 远端项目最后运行 `publish`。
|
|
364
209
|
|
|
365
|
-
|
|
210
|
+
完整生产写作约束见
|
|
211
|
+
[references/production-writing-standard.md](references/production-writing-standard.md)。
|
|
@@ -1,60 +1,45 @@
|
|
|
1
1
|
# 原子精修
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
适用于少量、明确、离散的修改。先读取 `script.json.version`,再使用该方言返回的
|
|
4
|
+
正式地址。
|
|
4
5
|
|
|
5
|
-
##
|
|
6
|
+
## 单点
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|---|---|
|
|
9
|
-
| 一个明确地址 | 单个原子 verb |
|
|
10
|
-
| 同一种变换命中多个 action | 选择器批量 verb |
|
|
11
|
-
| 少量、不同类型、需要同事务落盘的修改 | `do` |
|
|
12
|
-
|
|
13
|
-
## 单点精修
|
|
14
|
-
|
|
15
|
-
先查询得到稳定地址,再执行对应 verb:
|
|
8
|
+
先查询,再用查询结果中的地址修改:
|
|
16
9
|
|
|
17
10
|
```bash
|
|
18
|
-
scriptctl actions --grep "台下掌声雷动" --script-path
|
|
19
|
-
scriptctl replace
|
|
20
|
-
--
|
|
21
|
-
--script-path workspace/script.json
|
|
11
|
+
scriptctl actions --grep "台下掌声雷动" --script-path "$SCRIPT"
|
|
12
|
+
scriptctl replace acR8cV4n --from "台下掌声雷动" --to "掌声骤停" \
|
|
13
|
+
--script-path "$SCRIPT"
|
|
22
14
|
```
|
|
23
15
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
scriptctl states act_001 --script-path workspace/script.json
|
|
28
|
-
scriptctl scene-ref ep_001/scn_003 actor:act_001 \
|
|
29
|
-
--state st_injured --script-path workspace/script.json
|
|
30
|
-
```
|
|
16
|
+
V4 查询可以使用 1-based `@` 序号,但修改必须使用正式 ID。V3 查询返回原有的
|
|
17
|
+
`ep_NNN/scn_NNN#idx` 可写地址。
|
|
31
18
|
|
|
32
|
-
##
|
|
19
|
+
## 同构多点
|
|
33
20
|
|
|
34
|
-
|
|
21
|
+
V4 先运行 dry-run,读取完整目标和 `plan_digest`,再用相同命令 apply:
|
|
35
22
|
|
|
36
23
|
```bash
|
|
37
|
-
scriptctl
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
--script-path workspace/script.json
|
|
41
|
-
scriptctl emotion --in ep_003..ep_007 --actor act_001 "紧张" --apply \
|
|
42
|
-
--script-path workspace/script.json
|
|
24
|
+
scriptctl replace --in 'acR8cV4n..acT2fG6z' --from "。" --to "!"
|
|
25
|
+
scriptctl replace --in 'acR8cV4n..acT2fG6z' --from "。" --to "!" \
|
|
26
|
+
--apply --plan sha256:...
|
|
43
27
|
```
|
|
44
28
|
|
|
45
|
-
##
|
|
29
|
+
## 异构多点
|
|
46
30
|
|
|
47
|
-
|
|
31
|
+
把不同原子命令写入文件,每行省略 `scriptctl`:
|
|
48
32
|
|
|
49
33
|
```text
|
|
50
|
-
replace
|
|
51
|
-
|
|
52
|
-
scene-ref
|
|
34
|
+
replace acR8cV4n --from "旧句" --to "新句"
|
|
35
|
+
parenthetical acT2fG6z --set "低声"
|
|
36
|
+
scene-ref scnK6wT3c actA3kP9x --state default --state stB4xR8p
|
|
53
37
|
```
|
|
54
38
|
|
|
55
39
|
```bash
|
|
56
|
-
scriptctl do
|
|
57
|
-
scriptctl do
|
|
40
|
+
scriptctl do edits.txt --script-path "$SCRIPT"
|
|
41
|
+
scriptctl do edits.txt --apply --plan sha256:... --script-path "$SCRIPT"
|
|
58
42
|
```
|
|
59
43
|
|
|
60
|
-
|
|
44
|
+
`do` 整体解析、修改和校验;任一行失败时不落盘。
|
|
45
|
+
V4 `do` 中新增 asset、state、episode、scene 或 Action 时显式填写候选 ID。
|