@nodaro/shared 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +32 -0
- package/dist/index.cjs +12506 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +12269 -0
- package/dist/index.d.ts +12269 -0
- package/dist/index.js +11831 -0
- package/dist/index.js.map +1 -0
- package/package.json +54 -0
- package/src/__tests__/__snapshots__/prompt-builder-segments.test.ts.snap +65 -0
- package/src/__tests__/ai-avatar-pricing.test.ts +321 -0
- package/src/__tests__/apply-video-negative-prompt.test.ts +76 -0
- package/src/__tests__/attach-columns.test.ts +28 -0
- package/src/__tests__/audio-crossfade-curves.test.ts +33 -0
- package/src/__tests__/build-model-menu.test.ts +58 -0
- package/src/__tests__/character-aspect-defaults.test.ts +142 -0
- package/src/__tests__/character-mention-slug.test.ts +199 -0
- package/src/__tests__/character-reference-photo-kinds.test.ts +32 -0
- package/src/__tests__/character-usage-mode.test.ts +147 -0
- package/src/__tests__/character-variant-assets.test.ts +142 -0
- package/src/__tests__/character-voice.test.ts +130 -0
- package/src/__tests__/cinematic-avatar-pricing.test.ts +119 -0
- package/src/__tests__/combine-transitions.test.ts +137 -0
- package/src/__tests__/component-types.test.ts +87 -0
- package/src/__tests__/condition-variables.test.ts +98 -0
- package/src/__tests__/credit-identifiers.test.ts +811 -0
- package/src/__tests__/default-video-provider.test.ts +63 -0
- package/src/__tests__/entity-image-handle.test.ts +43 -0
- package/src/__tests__/entity-variants.test.ts +33 -0
- package/src/__tests__/fal-lip-sync-sets.test.ts +31 -0
- package/src/__tests__/featured-entities.test.ts +33 -0
- package/src/__tests__/film-pricing.test.ts +64 -0
- package/src/__tests__/filter-condition.test.ts +285 -0
- package/src/__tests__/freecut-protocol.test.ts +35 -0
- package/src/__tests__/generate-text-items.test.ts +19 -0
- package/src/__tests__/generated-results.test.ts +50 -0
- package/src/__tests__/graph-utils.test.ts +618 -0
- package/src/__tests__/group-aggregation.test.ts +83 -0
- package/src/__tests__/i18n-locale-completeness.test.ts +156 -0
- package/src/__tests__/image-critic-node.test.ts +86 -0
- package/src/__tests__/image-mask-mode.test.ts +16 -0
- package/src/__tests__/image-ref-limit.test.ts +78 -0
- package/src/__tests__/inpaint-region.test.ts +24 -0
- package/src/__tests__/input-field-map-parity.test.ts +30 -0
- package/src/__tests__/json-evaluator.test.ts +289 -0
- package/src/__tests__/json-path.test.ts +64 -0
- package/src/__tests__/lip-sync-pricing.test.ts +142 -0
- package/src/__tests__/list-merge.test.ts +96 -0
- package/src/__tests__/list-sort.test.ts +134 -0
- package/src/__tests__/llm-models.test.ts +445 -0
- package/src/__tests__/location-mention-slug.test.ts +246 -0
- package/src/__tests__/locations-coverage-critic-schema.test.ts +92 -0
- package/src/__tests__/loop-delimiter.test.ts +39 -0
- package/src/__tests__/lottie-slots.test.ts +245 -0
- package/src/__tests__/model-catalog-flux2-resolutions.test.ts +21 -0
- package/src/__tests__/model-constants-location.test.ts +20 -0
- package/src/__tests__/model-constants.test.ts +122 -0
- package/src/__tests__/model-tree.test.ts +86 -0
- package/src/__tests__/no-internal-imports.test.ts +25 -0
- package/src/__tests__/node-default-mappings.test.ts +175 -0
- package/src/__tests__/node-mappable-fields.test.ts +7 -0
- package/src/__tests__/node-preset-export.test.ts +46 -0
- package/src/__tests__/node-preset-extract.test.ts +166 -0
- package/src/__tests__/node-refs-canonical.test.ts +54 -0
- package/src/__tests__/node-refs-combine.test.ts +54 -0
- package/src/__tests__/node-refs.test.ts +187 -0
- package/src/__tests__/node-runtime-keys.test.ts +99 -0
- package/src/__tests__/object-aspect-defaults.test.ts +59 -0
- package/src/__tests__/parameter-node-value.test.ts +137 -0
- package/src/__tests__/pinterest-url.test.ts +35 -0
- package/src/__tests__/pipeline-chat.test.ts +110 -0
- package/src/__tests__/pipeline-validation.test.ts +98 -0
- package/src/__tests__/presentation-utils.test.ts +1137 -0
- package/src/__tests__/producer-types.test.ts +47 -0
- package/src/__tests__/prompt-length-limits.test.ts +156 -0
- package/src/__tests__/provider-directive-defaults.test.ts +46 -0
- package/src/__tests__/reduce-strategy-registry.test.ts +43 -0
- package/src/__tests__/reference-board-templates.test.ts +33 -0
- package/src/__tests__/reference-roles.test.ts +36 -0
- package/src/__tests__/resolve-field-mappings.test.ts +110 -0
- package/src/__tests__/resolve-pipeline-model.test.ts +76 -0
- package/src/__tests__/scene-node-types.test.ts +80 -0
- package/src/__tests__/scraper-actors.test.ts +67 -0
- package/src/__tests__/seedance-2-catalog.test.ts +18 -0
- package/src/__tests__/seedance-2-credit-id.test.ts +23 -0
- package/src/__tests__/seedance-aspects.test.ts +52 -0
- package/src/__tests__/selector.test.ts +1151 -0
- package/src/__tests__/settled-with-limit.test.ts +214 -0
- package/src/__tests__/social-media-specs.test.ts +129 -0
- package/src/__tests__/sub-workflow-validation.test.ts +88 -0
- package/src/__tests__/switchx-pricing.test.ts +28 -0
- package/src/__tests__/to-connected-references.test.ts +153 -0
- package/src/__tests__/utilities.test.ts +541 -0
- package/src/__tests__/video-analysis-pricing.test.ts +58 -0
- package/src/__tests__/video-analysis.test.ts +63 -0
- package/src/__tests__/video-audio-capability.test.ts +204 -0
- package/src/__tests__/video-gen-providers.test.ts +28 -0
- package/src/__tests__/video-mode-aliases.test.ts +150 -0
- package/src/__tests__/video-ref-limits.test.ts +72 -0
- package/src/__tests__/video-utils.test.ts +303 -0
- package/src/__tests__/voice-changer-models.test.ts +33 -0
- package/src/__tests__/workflow-export-strip.test.ts +46 -0
- package/src/ai-avatar-pricing.ts +213 -0
- package/src/ancestor-refs.ts +48 -0
- package/src/animals.ts +231 -0
- package/src/audio-crossfade-curves.ts +73 -0
- package/src/audio-fx-presets.ts +64 -0
- package/src/avatar-payload-validators.ts +214 -0
- package/src/caption-styles.ts +31 -0
- package/src/character-aspect-defaults.ts +102 -0
- package/src/character-facets.ts +37 -0
- package/src/character-mention-slug.ts +166 -0
- package/src/character-usage-mode.ts +109 -0
- package/src/character-variant-assets.ts +121 -0
- package/src/character-voice.ts +151 -0
- package/src/cinematic-avatar-pricing.ts +111 -0
- package/src/clone-utils.ts +46 -0
- package/src/combine-transitions.ts +482 -0
- package/src/community.ts +112 -0
- package/src/component-types.ts +127 -0
- package/src/condition-variables.ts +65 -0
- package/src/credit-estimators/index.ts +15 -0
- package/src/credit-estimators/video-utils.ts +165 -0
- package/src/credit-identifiers.ts +304 -0
- package/src/entity-approval-types.ts +31 -0
- package/src/entity-aspect-defaults.ts +82 -0
- package/src/entity-asset-types.ts +296 -0
- package/src/entity-image-handle.ts +36 -0
- package/src/extra-refs.ts +139 -0
- package/src/featured-entities.ts +136 -0
- package/src/film-pricing.ts +117 -0
- package/src/filter-condition.ts +250 -0
- package/src/flux2-pricing.ts +18 -0
- package/src/freecut-protocol.ts +52 -0
- package/src/furniture.ts +167 -0
- package/src/generate-text-items.ts +15 -0
- package/src/generated-results.ts +63 -0
- package/src/group-aggregation.ts +75 -0
- package/src/hint-graph-types.ts +18 -0
- package/src/i18n/action-fx.ar.ts +89 -0
- package/src/i18n/action-fx.de.ts +89 -0
- package/src/i18n/action-fx.es.ts +89 -0
- package/src/i18n/action-fx.fr.ts +89 -0
- package/src/i18n/action-fx.he.ts +89 -0
- package/src/i18n/action-fx.hi.ts +89 -0
- package/src/i18n/action-fx.ja.ts +89 -0
- package/src/i18n/action-fx.ko.ts +89 -0
- package/src/i18n/action-fx.pt-BR.ts +89 -0
- package/src/i18n/action-fx.ru.ts +89 -0
- package/src/i18n/action-fx.zh-CN.ts +89 -0
- package/src/i18n/aesthetic.ar.ts +170 -0
- package/src/i18n/aesthetic.de.ts +48 -0
- package/src/i18n/aesthetic.es.ts +169 -0
- package/src/i18n/aesthetic.fr.ts +52 -0
- package/src/i18n/aesthetic.he.ts +169 -0
- package/src/i18n/aesthetic.hi.ts +55 -0
- package/src/i18n/aesthetic.ja.ts +165 -0
- package/src/i18n/aesthetic.ko.ts +169 -0
- package/src/i18n/aesthetic.pt-BR.ts +148 -0
- package/src/i18n/aesthetic.ru.ts +155 -0
- package/src/i18n/aesthetic.zh-CN.ts +172 -0
- package/src/i18n/animals.ar.ts +145 -0
- package/src/i18n/animals.de.ts +144 -0
- package/src/i18n/animals.es.ts +158 -0
- package/src/i18n/animals.fr.ts +144 -0
- package/src/i18n/animals.he.ts +155 -0
- package/src/i18n/animals.hi.ts +157 -0
- package/src/i18n/animals.ja.ts +159 -0
- package/src/i18n/animals.ko.ts +159 -0
- package/src/i18n/animals.pt-BR.ts +157 -0
- package/src/i18n/animals.ru.ts +155 -0
- package/src/i18n/animals.zh-CN.ts +155 -0
- package/src/i18n/atmosphere.ar.ts +49 -0
- package/src/i18n/atmosphere.de.ts +47 -0
- package/src/i18n/atmosphere.es.ts +50 -0
- package/src/i18n/atmosphere.fr.ts +47 -0
- package/src/i18n/atmosphere.he.ts +47 -0
- package/src/i18n/atmosphere.hi.ts +49 -0
- package/src/i18n/atmosphere.ja.ts +49 -0
- package/src/i18n/atmosphere.ko.ts +49 -0
- package/src/i18n/atmosphere.pt-BR.ts +49 -0
- package/src/i18n/atmosphere.ru.ts +47 -0
- package/src/i18n/atmosphere.zh-CN.ts +152 -0
- package/src/i18n/backdrop.ar.ts +53 -0
- package/src/i18n/backdrop.de.ts +46 -0
- package/src/i18n/backdrop.es.ts +54 -0
- package/src/i18n/backdrop.fr.ts +52 -0
- package/src/i18n/backdrop.he.ts +51 -0
- package/src/i18n/backdrop.hi.ts +59 -0
- package/src/i18n/backdrop.ja.ts +61 -0
- package/src/i18n/backdrop.ko.ts +59 -0
- package/src/i18n/backdrop.pt-BR.ts +59 -0
- package/src/i18n/backdrop.ru.ts +57 -0
- package/src/i18n/backdrop.zh-CN.ts +57 -0
- package/src/i18n/camera-format.ar.ts +40 -0
- package/src/i18n/camera-format.de.ts +37 -0
- package/src/i18n/camera-format.es.ts +41 -0
- package/src/i18n/camera-format.fr.ts +37 -0
- package/src/i18n/camera-format.he.ts +37 -0
- package/src/i18n/camera-format.hi.ts +42 -0
- package/src/i18n/camera-format.ja.ts +37 -0
- package/src/i18n/camera-format.ko.ts +37 -0
- package/src/i18n/camera-format.pt-BR.ts +46 -0
- package/src/i18n/camera-format.ru.ts +42 -0
- package/src/i18n/camera-format.zh-CN.ts +42 -0
- package/src/i18n/camera-motions.ar.ts +86 -0
- package/src/i18n/camera-motions.de.ts +74 -0
- package/src/i18n/camera-motions.es.ts +86 -0
- package/src/i18n/camera-motions.fr.ts +86 -0
- package/src/i18n/camera-motions.he.ts +86 -0
- package/src/i18n/camera-motions.hi.ts +99 -0
- package/src/i18n/camera-motions.ja.ts +99 -0
- package/src/i18n/camera-motions.ko.ts +99 -0
- package/src/i18n/camera-motions.pt-BR.ts +99 -0
- package/src/i18n/camera-motions.ru.ts +99 -0
- package/src/i18n/camera-motions.zh-CN.ts +99 -0
- package/src/i18n/character-fx.ar.ts +72 -0
- package/src/i18n/character-fx.de.ts +72 -0
- package/src/i18n/character-fx.es.ts +72 -0
- package/src/i18n/character-fx.fr.ts +72 -0
- package/src/i18n/character-fx.he.ts +72 -0
- package/src/i18n/character-fx.hi.ts +72 -0
- package/src/i18n/character-fx.ja.ts +72 -0
- package/src/i18n/character-fx.ko.ts +72 -0
- package/src/i18n/character-fx.pt-BR.ts +72 -0
- package/src/i18n/character-fx.ru.ts +72 -0
- package/src/i18n/character-fx.zh-CN.ts +72 -0
- package/src/i18n/color-look.ar.ts +50 -0
- package/src/i18n/color-look.de.ts +47 -0
- package/src/i18n/color-look.es.ts +50 -0
- package/src/i18n/color-look.fr.ts +50 -0
- package/src/i18n/color-look.he.ts +49 -0
- package/src/i18n/color-look.hi.ts +52 -0
- package/src/i18n/color-look.ja.ts +54 -0
- package/src/i18n/color-look.ko.ts +54 -0
- package/src/i18n/color-look.pt-BR.ts +54 -0
- package/src/i18n/color-look.ru.ts +52 -0
- package/src/i18n/color-look.zh-CN.ts +53 -0
- package/src/i18n/composition-effects.ar.ts +26 -0
- package/src/i18n/composition-effects.de.ts +25 -0
- package/src/i18n/composition-effects.es.ts +27 -0
- package/src/i18n/composition-effects.fr.ts +25 -0
- package/src/i18n/composition-effects.he.ts +25 -0
- package/src/i18n/composition-effects.hi.ts +27 -0
- package/src/i18n/composition-effects.ja.ts +27 -0
- package/src/i18n/composition-effects.ko.ts +27 -0
- package/src/i18n/composition-effects.pt-BR.ts +25 -0
- package/src/i18n/composition-effects.ru.ts +82 -0
- package/src/i18n/composition-effects.zh-CN.ts +25 -0
- package/src/i18n/era.ar.ts +37 -0
- package/src/i18n/era.de.ts +34 -0
- package/src/i18n/era.es.ts +37 -0
- package/src/i18n/era.fr.ts +37 -0
- package/src/i18n/era.he.ts +36 -0
- package/src/i18n/era.hi.ts +39 -0
- package/src/i18n/era.ja.ts +41 -0
- package/src/i18n/era.ko.ts +39 -0
- package/src/i18n/era.pt-BR.ts +41 -0
- package/src/i18n/era.ru.ts +121 -0
- package/src/i18n/era.zh-CN.ts +39 -0
- package/src/i18n/exposure-settings.ar.ts +28 -0
- package/src/i18n/exposure-settings.de.ts +26 -0
- package/src/i18n/exposure-settings.es.ts +28 -0
- package/src/i18n/exposure-settings.fr.ts +29 -0
- package/src/i18n/exposure-settings.he.ts +28 -0
- package/src/i18n/exposure-settings.hi.ts +31 -0
- package/src/i18n/exposure-settings.ja.ts +31 -0
- package/src/i18n/exposure-settings.ko.ts +31 -0
- package/src/i18n/exposure-settings.pt-BR.ts +31 -0
- package/src/i18n/exposure-settings.ru.ts +31 -0
- package/src/i18n/exposure-settings.zh-CN.ts +31 -0
- package/src/i18n/framing.ar.ts +78 -0
- package/src/i18n/framing.de.ts +73 -0
- package/src/i18n/framing.es.ts +78 -0
- package/src/i18n/framing.fr.ts +78 -0
- package/src/i18n/framing.he.ts +77 -0
- package/src/i18n/framing.hi.ts +82 -0
- package/src/i18n/framing.ja.ts +84 -0
- package/src/i18n/framing.ko.ts +82 -0
- package/src/i18n/framing.pt-BR.ts +84 -0
- package/src/i18n/framing.ru.ts +82 -0
- package/src/i18n/framing.zh-CN.ts +82 -0
- package/src/i18n/furniture.ar.ts +92 -0
- package/src/i18n/furniture.de.ts +93 -0
- package/src/i18n/furniture.es.ts +101 -0
- package/src/i18n/furniture.fr.ts +93 -0
- package/src/i18n/furniture.he.ts +101 -0
- package/src/i18n/furniture.hi.ts +101 -0
- package/src/i18n/furniture.ja.ts +101 -0
- package/src/i18n/furniture.ko.ts +101 -0
- package/src/i18n/furniture.pt-BR.ts +101 -0
- package/src/i18n/furniture.ru.ts +101 -0
- package/src/i18n/furniture.zh-CN.ts +101 -0
- package/src/i18n/held-prop.ar.ts +74 -0
- package/src/i18n/held-prop.de.ts +65 -0
- package/src/i18n/held-prop.es.ts +83 -0
- package/src/i18n/held-prop.fr.ts +74 -0
- package/src/i18n/held-prop.he.ts +73 -0
- package/src/i18n/held-prop.hi.ts +82 -0
- package/src/i18n/held-prop.ja.ts +84 -0
- package/src/i18n/held-prop.ko.ts +84 -0
- package/src/i18n/held-prop.pt-BR.ts +84 -0
- package/src/i18n/held-prop.ru.ts +82 -0
- package/src/i18n/held-prop.zh-CN.ts +82 -0
- package/src/i18n/index.ts +208 -0
- package/src/i18n/instrumentation.ar.ts +195 -0
- package/src/i18n/instrumentation.de.ts +195 -0
- package/src/i18n/instrumentation.es.ts +195 -0
- package/src/i18n/instrumentation.fr.ts +195 -0
- package/src/i18n/instrumentation.he.ts +195 -0
- package/src/i18n/instrumentation.hi.ts +195 -0
- package/src/i18n/instrumentation.ja.ts +195 -0
- package/src/i18n/instrumentation.ko.ts +195 -0
- package/src/i18n/instrumentation.pt-BR.ts +195 -0
- package/src/i18n/instrumentation.ru.ts +195 -0
- package/src/i18n/instrumentation.zh-CN.ts +195 -0
- package/src/i18n/lens.ar.ts +24 -0
- package/src/i18n/lens.de.ts +24 -0
- package/src/i18n/lens.es.ts +24 -0
- package/src/i18n/lens.fr.ts +24 -0
- package/src/i18n/lens.he.ts +24 -0
- package/src/i18n/lens.hi.ts +24 -0
- package/src/i18n/lens.ja.ts +24 -0
- package/src/i18n/lens.ko.ts +24 -0
- package/src/i18n/lens.pt-BR.ts +24 -0
- package/src/i18n/lens.ru.ts +25 -0
- package/src/i18n/lens.zh-CN.ts +24 -0
- package/src/i18n/lighting.ar.ts +86 -0
- package/src/i18n/lighting.de.ts +84 -0
- package/src/i18n/lighting.es.ts +89 -0
- package/src/i18n/lighting.fr.ts +84 -0
- package/src/i18n/lighting.he.ts +88 -0
- package/src/i18n/lighting.hi.ts +90 -0
- package/src/i18n/lighting.ja.ts +90 -0
- package/src/i18n/lighting.ko.ts +90 -0
- package/src/i18n/lighting.pt-BR.ts +90 -0
- package/src/i18n/lighting.ru.ts +88 -0
- package/src/i18n/lighting.zh-CN.ts +92 -0
- package/src/i18n/loop-subject.ar.ts +39 -0
- package/src/i18n/loop-subject.de.ts +39 -0
- package/src/i18n/loop-subject.es.ts +39 -0
- package/src/i18n/loop-subject.fr.ts +39 -0
- package/src/i18n/loop-subject.he.ts +39 -0
- package/src/i18n/loop-subject.hi.ts +39 -0
- package/src/i18n/loop-subject.ja.ts +39 -0
- package/src/i18n/loop-subject.ko.ts +39 -0
- package/src/i18n/loop-subject.pt-BR.ts +39 -0
- package/src/i18n/loop-subject.ru.ts +39 -0
- package/src/i18n/loop-subject.zh-CN.ts +39 -0
- package/src/i18n/materials.ar.ts +80 -0
- package/src/i18n/materials.de.ts +80 -0
- package/src/i18n/materials.es.ts +87 -0
- package/src/i18n/materials.fr.ts +80 -0
- package/src/i18n/materials.he.ts +86 -0
- package/src/i18n/materials.hi.ts +86 -0
- package/src/i18n/materials.ja.ts +88 -0
- package/src/i18n/materials.ko.ts +88 -0
- package/src/i18n/materials.pt-BR.ts +88 -0
- package/src/i18n/materials.ru.ts +86 -0
- package/src/i18n/materials.zh-CN.ts +86 -0
- package/src/i18n/mood.ar.ts +61 -0
- package/src/i18n/mood.de.ts +61 -0
- package/src/i18n/mood.es.ts +66 -0
- package/src/i18n/mood.fr.ts +61 -0
- package/src/i18n/mood.he.ts +64 -0
- package/src/i18n/mood.hi.ts +66 -0
- package/src/i18n/mood.ja.ts +66 -0
- package/src/i18n/mood.ko.ts +66 -0
- package/src/i18n/mood.pt-BR.ts +64 -0
- package/src/i18n/mood.ru.ts +64 -0
- package/src/i18n/mood.zh-CN.ts +64 -0
- package/src/i18n/music-genre.ar.ts +302 -0
- package/src/i18n/music-genre.de.ts +302 -0
- package/src/i18n/music-genre.es.ts +302 -0
- package/src/i18n/music-genre.fr.ts +302 -0
- package/src/i18n/music-genre.he.ts +302 -0
- package/src/i18n/music-genre.hi.ts +302 -0
- package/src/i18n/music-genre.ja.ts +302 -0
- package/src/i18n/music-genre.ko.ts +302 -0
- package/src/i18n/music-genre.pt-BR.ts +302 -0
- package/src/i18n/music-genre.ru.ts +302 -0
- package/src/i18n/music-genre.zh-CN.ts +302 -0
- package/src/i18n/music-mood.ar.ts +75 -0
- package/src/i18n/music-mood.de.ts +75 -0
- package/src/i18n/music-mood.es.ts +75 -0
- package/src/i18n/music-mood.fr.ts +75 -0
- package/src/i18n/music-mood.he.ts +75 -0
- package/src/i18n/music-mood.hi.ts +75 -0
- package/src/i18n/music-mood.ja.ts +75 -0
- package/src/i18n/music-mood.ko.ts +75 -0
- package/src/i18n/music-mood.pt-BR.ts +75 -0
- package/src/i18n/music-mood.ru.ts +75 -0
- package/src/i18n/music-mood.zh-CN.ts +75 -0
- package/src/i18n/person.ar.ts +638 -0
- package/src/i18n/person.de.ts +629 -0
- package/src/i18n/person.es.ts +645 -0
- package/src/i18n/person.fr.ts +621 -0
- package/src/i18n/person.he.ts +656 -0
- package/src/i18n/person.hi.ts +654 -0
- package/src/i18n/person.ja.ts +662 -0
- package/src/i18n/person.ko.ts +662 -0
- package/src/i18n/person.pt-BR.ts +656 -0
- package/src/i18n/person.ru.ts +656 -0
- package/src/i18n/person.zh-CN.ts +656 -0
- package/src/i18n/photo-genre.ar.ts +58 -0
- package/src/i18n/photo-genre.de.ts +52 -0
- package/src/i18n/photo-genre.es.ts +64 -0
- package/src/i18n/photo-genre.fr.ts +58 -0
- package/src/i18n/photo-genre.he.ts +62 -0
- package/src/i18n/photo-genre.hi.ts +63 -0
- package/src/i18n/photo-genre.ja.ts +65 -0
- package/src/i18n/photo-genre.ko.ts +63 -0
- package/src/i18n/photo-genre.pt-BR.ts +65 -0
- package/src/i18n/photo-genre.ru.ts +63 -0
- package/src/i18n/photo-genre.zh-CN.ts +63 -0
- package/src/i18n/photographer.ar.ts +75 -0
- package/src/i18n/photographer.de.ts +74 -0
- package/src/i18n/photographer.es.ts +77 -0
- package/src/i18n/photographer.fr.ts +77 -0
- package/src/i18n/photographer.he.ts +78 -0
- package/src/i18n/photographer.hi.ts +80 -0
- package/src/i18n/photographer.ja.ts +84 -0
- package/src/i18n/photographer.ko.ts +84 -0
- package/src/i18n/photographer.pt-BR.ts +83 -0
- package/src/i18n/photographer.ru.ts +78 -0
- package/src/i18n/photographer.zh-CN.ts +78 -0
- package/src/i18n/pose.ar.ts +95 -0
- package/src/i18n/pose.de.ts +96 -0
- package/src/i18n/pose.es.ts +104 -0
- package/src/i18n/pose.fr.ts +96 -0
- package/src/i18n/pose.he.ts +104 -0
- package/src/i18n/pose.hi.ts +104 -0
- package/src/i18n/pose.ja.ts +104 -0
- package/src/i18n/pose.ko.ts +104 -0
- package/src/i18n/pose.pt-BR.ts +104 -0
- package/src/i18n/pose.ru.ts +104 -0
- package/src/i18n/pose.zh-CN.ts +104 -0
- package/src/i18n/post-process-effects.ar.ts +25 -0
- package/src/i18n/post-process-effects.de.ts +24 -0
- package/src/i18n/post-process-effects.es.ts +26 -0
- package/src/i18n/post-process-effects.fr.ts +24 -0
- package/src/i18n/post-process-effects.he.ts +24 -0
- package/src/i18n/post-process-effects.hi.ts +26 -0
- package/src/i18n/post-process-effects.ja.ts +26 -0
- package/src/i18n/post-process-effects.ko.ts +26 -0
- package/src/i18n/post-process-effects.pt-BR.ts +24 -0
- package/src/i18n/post-process-effects.ru.ts +24 -0
- package/src/i18n/post-process-effects.zh-CN.ts +24 -0
- package/src/i18n/render-quality.ar.ts +34 -0
- package/src/i18n/render-quality.de.ts +30 -0
- package/src/i18n/render-quality.es.ts +35 -0
- package/src/i18n/render-quality.fr.ts +34 -0
- package/src/i18n/render-quality.he.ts +33 -0
- package/src/i18n/render-quality.hi.ts +39 -0
- package/src/i18n/render-quality.ja.ts +39 -0
- package/src/i18n/render-quality.ko.ts +39 -0
- package/src/i18n/render-quality.pt-BR.ts +37 -0
- package/src/i18n/render-quality.ru.ts +37 -0
- package/src/i18n/render-quality.zh-CN.ts +37 -0
- package/src/i18n/seasons.ar.ts +10 -0
- package/src/i18n/seasons.de.ts +10 -0
- package/src/i18n/seasons.es.ts +10 -0
- package/src/i18n/seasons.fr.ts +10 -0
- package/src/i18n/seasons.he.ts +10 -0
- package/src/i18n/seasons.hi.ts +10 -0
- package/src/i18n/seasons.ja.ts +10 -0
- package/src/i18n/seasons.ko.ts +10 -0
- package/src/i18n/seasons.pt-BR.ts +10 -0
- package/src/i18n/seasons.ru.ts +10 -0
- package/src/i18n/seasons.zh-CN.ts +10 -0
- package/src/i18n/setting.ar.ts +73 -0
- package/src/i18n/setting.de.ts +73 -0
- package/src/i18n/setting.es.ts +77 -0
- package/src/i18n/setting.fr.ts +73 -0
- package/src/i18n/setting.he.ts +76 -0
- package/src/i18n/setting.hi.ts +76 -0
- package/src/i18n/setting.ja.ts +78 -0
- package/src/i18n/setting.ko.ts +76 -0
- package/src/i18n/setting.pt-BR.ts +78 -0
- package/src/i18n/setting.ru.ts +76 -0
- package/src/i18n/setting.zh-CN.ts +76 -0
- package/src/i18n/style.ar.ts +55 -0
- package/src/i18n/style.de.ts +54 -0
- package/src/i18n/style.es.ts +54 -0
- package/src/i18n/style.fr.ts +54 -0
- package/src/i18n/style.he.ts +54 -0
- package/src/i18n/style.hi.ts +54 -0
- package/src/i18n/style.ja.ts +54 -0
- package/src/i18n/style.ko.ts +54 -0
- package/src/i18n/style.pt-BR.ts +56 -0
- package/src/i18n/style.ru.ts +54 -0
- package/src/i18n/style.zh-CN.ts +54 -0
- package/src/i18n/styling.ar.ts +295 -0
- package/src/i18n/styling.de.ts +285 -0
- package/src/i18n/styling.es.ts +317 -0
- package/src/i18n/styling.fr.ts +285 -0
- package/src/i18n/styling.he.ts +307 -0
- package/src/i18n/styling.hi.ts +323 -0
- package/src/i18n/styling.ja.ts +317 -0
- package/src/i18n/styling.ko.ts +311 -0
- package/src/i18n/styling.pt-BR.ts +301 -0
- package/src/i18n/styling.ru.ts +301 -0
- package/src/i18n/styling.zh-CN.ts +307 -0
- package/src/i18n/temporal.ar.ts +31 -0
- package/src/i18n/temporal.de.ts +24 -0
- package/src/i18n/temporal.es.ts +27 -0
- package/src/i18n/temporal.fr.ts +28 -0
- package/src/i18n/temporal.he.ts +31 -0
- package/src/i18n/temporal.hi.ts +31 -0
- package/src/i18n/temporal.ja.ts +31 -0
- package/src/i18n/temporal.ko.ts +31 -0
- package/src/i18n/temporal.pt-BR.ts +31 -0
- package/src/i18n/temporal.ru.ts +31 -0
- package/src/i18n/temporal.zh-CN.ts +31 -0
- package/src/i18n/transitions.ar.ts +97 -0
- package/src/i18n/transitions.de.ts +97 -0
- package/src/i18n/transitions.es.ts +97 -0
- package/src/i18n/transitions.fr.ts +97 -0
- package/src/i18n/transitions.he.ts +97 -0
- package/src/i18n/transitions.hi.ts +97 -0
- package/src/i18n/transitions.ja.ts +97 -0
- package/src/i18n/transitions.ko.ts +97 -0
- package/src/i18n/transitions.pt-BR.ts +97 -0
- package/src/i18n/transitions.ru.ts +97 -0
- package/src/i18n/transitions.zh-CN.ts +97 -0
- package/src/i18n/types.ts +158 -0
- package/src/i18n/vehicles.ar.ts +137 -0
- package/src/i18n/vehicles.de.ts +125 -0
- package/src/i18n/vehicles.es.ts +138 -0
- package/src/i18n/vehicles.fr.ts +125 -0
- package/src/i18n/vehicles.he.ts +136 -0
- package/src/i18n/vehicles.hi.ts +138 -0
- package/src/i18n/vehicles.ja.ts +138 -0
- package/src/i18n/vehicles.ko.ts +138 -0
- package/src/i18n/vehicles.pt-BR.ts +136 -0
- package/src/i18n/vehicles.ru.ts +136 -0
- package/src/i18n/vehicles.zh-CN.ts +136 -0
- package/src/i18n/voice-character.ar.ts +126 -0
- package/src/i18n/voice-character.de.ts +126 -0
- package/src/i18n/voice-character.es.ts +126 -0
- package/src/i18n/voice-character.fr.ts +126 -0
- package/src/i18n/voice-character.he.ts +126 -0
- package/src/i18n/voice-character.hi.ts +126 -0
- package/src/i18n/voice-character.ja.ts +126 -0
- package/src/i18n/voice-character.ko.ts +126 -0
- package/src/i18n/voice-character.pt-BR.ts +126 -0
- package/src/i18n/voice-character.ru.ts +126 -0
- package/src/i18n/voice-character.zh-CN.ts +126 -0
- package/src/i18n/voice-delivery.ar.ts +77 -0
- package/src/i18n/voice-delivery.de.ts +77 -0
- package/src/i18n/voice-delivery.es.ts +77 -0
- package/src/i18n/voice-delivery.fr.ts +77 -0
- package/src/i18n/voice-delivery.he.ts +77 -0
- package/src/i18n/voice-delivery.hi.ts +77 -0
- package/src/i18n/voice-delivery.ja.ts +77 -0
- package/src/i18n/voice-delivery.ko.ts +77 -0
- package/src/i18n/voice-delivery.pt-BR.ts +77 -0
- package/src/i18n/voice-delivery.ru.ts +77 -0
- package/src/i18n/voice-delivery.zh-CN.ts +77 -0
- package/src/i18n/weapons.ar.ts +115 -0
- package/src/i18n/weapons.de.ts +114 -0
- package/src/i18n/weapons.es.ts +116 -0
- package/src/i18n/weapons.fr.ts +103 -0
- package/src/i18n/weapons.he.ts +114 -0
- package/src/i18n/weapons.hi.ts +116 -0
- package/src/i18n/weapons.ja.ts +116 -0
- package/src/i18n/weapons.ko.ts +116 -0
- package/src/i18n/weapons.pt-BR.ts +114 -0
- package/src/i18n/weapons.ru.ts +114 -0
- package/src/i18n/weapons.zh-CN.ts +114 -0
- package/src/image-critic-node.ts +61 -0
- package/src/image-critic-types.ts +40 -0
- package/src/index.ts +866 -0
- package/src/inject-upstream.ts +15 -0
- package/src/inpaint-region.ts +51 -0
- package/src/json-evaluator.ts +732 -0
- package/src/json-path.ts +52 -0
- package/src/lip-sync-pricing.ts +90 -0
- package/src/list-merge.ts +40 -0
- package/src/list-sort.ts +122 -0
- package/src/list-source-resolver.ts +50 -0
- package/src/llm-models.ts +245 -0
- package/src/location-mention-slug.ts +291 -0
- package/src/location-preset-catalog-map.ts +128 -0
- package/src/loop-delimiter.ts +73 -0
- package/src/lora-routing.ts +95 -0
- package/src/lottie-overlay-catalog.ts +175 -0
- package/src/lottie-slots.ts +309 -0
- package/src/model-catalog.ts +2386 -0
- package/src/model-constants.ts +1910 -0
- package/src/model-tree.ts +120 -0
- package/src/monetization.ts +15 -0
- package/src/multi-pick.ts +42 -0
- package/src/node-default-mappings.ts +262 -0
- package/src/node-mappable-fields.ts +70 -0
- package/src/node-preset-export.ts +56 -0
- package/src/node-preset-extract.ts +147 -0
- package/src/node-refs.ts +253 -0
- package/src/node-runtime-keys.ts +117 -0
- package/src/object-aspect-defaults.ts +72 -0
- package/src/object-picker-types.ts +22 -0
- package/src/parameter-node-value.ts +284 -0
- package/src/pinterest-url.ts +28 -0
- package/src/pipeline-chat.ts +72 -0
- package/src/pipeline-defaults.ts +318 -0
- package/src/pipeline-events.ts +162 -0
- package/src/pipeline-state-types.ts +196 -0
- package/src/pipeline-types.ts +647 -0
- package/src/pipeline-validation.ts +87 -0
- package/src/presentation-types.ts +23 -0
- package/src/presentation-utils.ts +397 -0
- package/src/producer-types.ts +188 -0
- package/src/progress-curve.ts +99 -0
- package/src/provider-directive-defaults.ts +69 -0
- package/src/reduce-strategy-registry.ts +121 -0
- package/src/reference-board-templates.ts +81 -0
- package/src/reference-roles.ts +153 -0
- package/src/reference-sheet/__tests__/board-to-column.test.ts +20 -0
- package/src/reference-sheet/__tests__/catalog.test.ts +50 -0
- package/src/reference-sheet/__tests__/cost.test.ts +38 -0
- package/src/reference-sheet/__tests__/no-drift.test.ts +28 -0
- package/src/reference-sheet/__tests__/panel-plan.test.ts +61 -0
- package/src/reference-sheet/__tests__/panel-prompts.test.ts +17 -0
- package/src/reference-sheet/__tests__/plan-generation.test.ts +72 -0
- package/src/reference-sheet/__tests__/presets.test.ts +54 -0
- package/src/reference-sheet/__tests__/types.test.ts +24 -0
- package/src/reference-sheet/catalog.ts +144 -0
- package/src/reference-sheet/cost.ts +37 -0
- package/src/reference-sheet/credit-id.ts +7 -0
- package/src/reference-sheet/index.ts +8 -0
- package/src/reference-sheet/panel-plan.ts +65 -0
- package/src/reference-sheet/panel-prompts.ts +14 -0
- package/src/reference-sheet/plan-generation.ts +79 -0
- package/src/reference-sheet/presets.ts +77 -0
- package/src/reference-sheet/types.ts +92 -0
- package/src/repeat-types.ts +97 -0
- package/src/resolve-field-mappings.ts +119 -0
- package/src/route-filter.ts +80 -0
- package/src/scene-helper-types.ts +249 -0
- package/src/scene-node-types.ts +281 -0
- package/src/scraper-actors.ts +57 -0
- package/src/scraper-output-schemas.ts +25 -0
- package/src/seasons.ts +45 -0
- package/src/selector.ts +864 -0
- package/src/settled-with-limit.ts +42 -0
- package/src/shot-element.ts +43 -0
- package/src/social-media-specs.ts +121 -0
- package/src/social-post.ts +24 -0
- package/src/sub-workflow-validation.ts +78 -0
- package/src/supported-fonts.ts +40 -0
- package/src/surround.ts +113 -0
- package/src/switchx-pricing.ts +33 -0
- package/src/text-separators.ts +59 -0
- package/src/to-connected-references.ts +77 -0
- package/src/types.ts +272 -0
- package/src/variant-job-id.ts +17 -0
- package/src/vehicles.ts +213 -0
- package/src/video-analysis-pricing.ts +74 -0
- package/src/video-analysis.ts +127 -0
- package/src/video-duration.ts +25 -0
- package/src/voice-changer-models.ts +36 -0
- package/src/voice-matcher-types.ts +37 -0
- package/src/voices.ts +92 -0
- package/src/weapons.ts +190 -0
- package/src/workflow-export.ts +153 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { z } from "zod"
|
|
2
|
+
import type { EntityStatus, EntityType } from "./entity-approval-types.js"
|
|
3
|
+
import type {
|
|
4
|
+
EntityStateChangeEvent,
|
|
5
|
+
EntityStaleEvent,
|
|
6
|
+
PipelineForkedEvent,
|
|
7
|
+
PipelineDriftSummary,
|
|
8
|
+
PipelineCompletedEvent,
|
|
9
|
+
StageAwaitingSubGateEvent,
|
|
10
|
+
PipelineMusicReadyEvent,
|
|
11
|
+
PipelineEditorDecisionsReadyEvent,
|
|
12
|
+
} from "./pipeline-state-types.js"
|
|
13
|
+
// Phase 1D.2b — Guided-mode chat. Type-only import to keep this file at the
|
|
14
|
+
// root of the import graph (pipeline-chat.ts imports PipelineStageName from
|
|
15
|
+
// here, so a value import would be circular).
|
|
16
|
+
import type { ProposedChange } from "./pipeline-chat.js"
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Canonical pipeline stage order — Phase 1A→1C topology. The engine's
|
|
20
|
+
* `runPipeline` walks this list in sequence; tests, the SSE event router,
|
|
21
|
+
* and the admin-side stage timeline all consume this same tuple as the
|
|
22
|
+
* source of truth for "which stages exist + in what order".
|
|
23
|
+
*/
|
|
24
|
+
export const PIPELINE_STAGE_NAMES = [
|
|
25
|
+
"script",
|
|
26
|
+
"characters",
|
|
27
|
+
"objects",
|
|
28
|
+
"locations",
|
|
29
|
+
"shot_list",
|
|
30
|
+
"scene_images",
|
|
31
|
+
"animate_audio_edit",
|
|
32
|
+
"post_merge",
|
|
33
|
+
] as const
|
|
34
|
+
export const PipelineStageNameSchema = z.enum(PIPELINE_STAGE_NAMES)
|
|
35
|
+
export type PipelineStageName = (typeof PIPELINE_STAGE_NAMES)[number]
|
|
36
|
+
|
|
37
|
+
export const PipelineStatusSchema = z.enum([
|
|
38
|
+
"queued",
|
|
39
|
+
"running",
|
|
40
|
+
"awaiting_approval",
|
|
41
|
+
"completed",
|
|
42
|
+
"failed",
|
|
43
|
+
"cancelled",
|
|
44
|
+
"forked",
|
|
45
|
+
])
|
|
46
|
+
export type PipelineStatus = z.infer<typeof PipelineStatusSchema>
|
|
47
|
+
|
|
48
|
+
export const PipelineStageStatusSchema = z.enum([
|
|
49
|
+
"pending",
|
|
50
|
+
"running",
|
|
51
|
+
"awaiting_approval",
|
|
52
|
+
"approved",
|
|
53
|
+
"rejected",
|
|
54
|
+
"failed",
|
|
55
|
+
"cancelled",
|
|
56
|
+
])
|
|
57
|
+
export type PipelineStageStatus = z.infer<typeof PipelineStageStatusSchema>
|
|
58
|
+
|
|
59
|
+
export type PipelineEvent =
|
|
60
|
+
| { type: "pipeline:status"; pipelineId: string; status: PipelineStatus }
|
|
61
|
+
| {
|
|
62
|
+
type: "stage:status"
|
|
63
|
+
pipelineId: string
|
|
64
|
+
stageName: PipelineStageName
|
|
65
|
+
status: PipelineStageStatus
|
|
66
|
+
output?: unknown
|
|
67
|
+
criticFeedback?: unknown
|
|
68
|
+
}
|
|
69
|
+
| {
|
|
70
|
+
type: "pipeline:warning"
|
|
71
|
+
pipelineId: string
|
|
72
|
+
code: string
|
|
73
|
+
message: string
|
|
74
|
+
}
|
|
75
|
+
| { type: "pipeline:done"; pipelineId: string }
|
|
76
|
+
| {
|
|
77
|
+
type: "entity:status"
|
|
78
|
+
pipelineId: string
|
|
79
|
+
entityId: string
|
|
80
|
+
entityType: EntityType
|
|
81
|
+
entityKey: string
|
|
82
|
+
status: EntityStatus
|
|
83
|
+
mainAssetUrl?: string
|
|
84
|
+
}
|
|
85
|
+
| {
|
|
86
|
+
type: "entity:variant:added"
|
|
87
|
+
pipelineId: string
|
|
88
|
+
entityId: string
|
|
89
|
+
variantKey: string
|
|
90
|
+
assetUrl: string
|
|
91
|
+
}
|
|
92
|
+
| {
|
|
93
|
+
type: "scene:status"
|
|
94
|
+
pipelineId: string
|
|
95
|
+
sceneEntityId: string
|
|
96
|
+
sceneIndex: number
|
|
97
|
+
status: EntityStatus
|
|
98
|
+
shotCount?: number
|
|
99
|
+
}
|
|
100
|
+
// Phase 1B.4 lifecycle events — see pipeline-state-types.ts for full JSDoc
|
|
101
|
+
// on when each fires. SSE forwarders in routes/pipelines.ts are
|
|
102
|
+
// event-type-agnostic and pass all of these through unchanged.
|
|
103
|
+
| EntityStateChangeEvent
|
|
104
|
+
| EntityStaleEvent
|
|
105
|
+
| PipelineForkedEvent
|
|
106
|
+
| PipelineDriftSummary
|
|
107
|
+
// Phase 1C.1 — final-MP4 ready event carries the merged asset id + URL.
|
|
108
|
+
| PipelineCompletedEvent
|
|
109
|
+
// Phase 1C.2 — Stage 7 sub-gate pause, music ready, editor decisions ready.
|
|
110
|
+
| StageAwaitingSubGateEvent
|
|
111
|
+
| PipelineMusicReadyEvent
|
|
112
|
+
| PipelineEditorDecisionsReadyEvent
|
|
113
|
+
// Phase 1D.2b — Guided-mode chat. `chat:turn` fires after each LLM round-
|
|
114
|
+
// trip (user prompt → assistant reply with optional proposed_change). The
|
|
115
|
+
// event carries the full turn record so the frontend chat history can
|
|
116
|
+
// render it without an extra GET /chat roundtrip. `chat:proposal_applied`
|
|
117
|
+
// fires when the user accepts a proposed_change — the turnId + attemptId
|
|
118
|
+
// let the UI mark the source turn as applied and link to the resulting
|
|
119
|
+
// stage attempt (re-run output) it produced.
|
|
120
|
+
| {
|
|
121
|
+
type: "chat:turn"
|
|
122
|
+
pipelineId: string
|
|
123
|
+
stageName: PipelineStageName
|
|
124
|
+
turn: {
|
|
125
|
+
id: string
|
|
126
|
+
turn_n: number
|
|
127
|
+
role: "user" | "assistant"
|
|
128
|
+
content: string
|
|
129
|
+
proposed_change: ProposedChange | null
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
| {
|
|
133
|
+
type: "chat:proposal_applied"
|
|
134
|
+
pipelineId: string
|
|
135
|
+
stageName: PipelineStageName
|
|
136
|
+
turnId: string
|
|
137
|
+
attemptId: string
|
|
138
|
+
}
|
|
139
|
+
// Phase 1D.2c-b-ii — per-shot status emitted by the Stage 7 Video Critic
|
|
140
|
+
// retry loop. Fires once per shot after the critic finalises (pass or
|
|
141
|
+
// cap-exhausted fail). The frontend per-shot UI subscribes to update each
|
|
142
|
+
// shot's badge/banner without re-reading the scene entity.
|
|
143
|
+
| {
|
|
144
|
+
type: "shot:status"
|
|
145
|
+
pipelineId: string
|
|
146
|
+
sceneId: string
|
|
147
|
+
shotId: string
|
|
148
|
+
status: "approved" | "failed"
|
|
149
|
+
}
|
|
150
|
+
// LLM-stream narrative progress, emitted by callLLM when a caller passes
|
|
151
|
+
// an `onProgress` callback. Currently used by the Stage 1 Showrunner so the
|
|
152
|
+
// pipeline panel can show a live "Drafting plan…" banner instead of a 2-
|
|
153
|
+
// minute spinner. The `message` is human-readable; `bytesSoFar` is a coarse
|
|
154
|
+
// proxy for stream progress (cumulative tool-use JSON delta bytes) that the
|
|
155
|
+
// frontend may format into a percent or just ignore.
|
|
156
|
+
| {
|
|
157
|
+
type: "stage:progress"
|
|
158
|
+
pipelineId: string
|
|
159
|
+
stageName: PipelineStageName
|
|
160
|
+
message: string
|
|
161
|
+
bytesSoFar?: number
|
|
162
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { z } from "zod"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Phase 1B.4 — pipeline_state lifecycle + drift event types.
|
|
5
|
+
*
|
|
6
|
+
* `pipeline_state` lives on `pipeline_entity_nodes.pipeline_state` (migration
|
|
7
|
+
* 131). Mirrors the four-value CHECK constraint there.
|
|
8
|
+
*
|
|
9
|
+
* `pipeline_owned_running` — node belongs to the pipeline, work in flight
|
|
10
|
+
* `pipeline_owned_awaiting_approval` — node belongs to the pipeline, user is the gate
|
|
11
|
+
* `pipeline_owned_approved` — node belongs to the pipeline, work locked in
|
|
12
|
+
* `pipeline_orphaned` — pipeline released ownership (cancel / fork / fail);
|
|
13
|
+
* node survives so the user keeps the work
|
|
14
|
+
*/
|
|
15
|
+
export const PipelineStateSchema = z.enum([
|
|
16
|
+
"pipeline_owned_running",
|
|
17
|
+
"pipeline_owned_awaiting_approval",
|
|
18
|
+
"pipeline_owned_approved",
|
|
19
|
+
"pipeline_orphaned",
|
|
20
|
+
])
|
|
21
|
+
export type PipelineState = z.infer<typeof PipelineStateSchema>
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Emitted when a pipeline_entity_nodes row transitions to a new
|
|
25
|
+
* `pipeline_state`. Fires on:
|
|
26
|
+
* - stage transitioning to 'awaiting_approval' (per-entity batch)
|
|
27
|
+
* - approveEntity success
|
|
28
|
+
* - rejectEntity regenerate path
|
|
29
|
+
* - force-stop / fork orphaning (every entity at once)
|
|
30
|
+
*
|
|
31
|
+
* Frontend swaps node visuals (running glow → awaiting frame → approved chip)
|
|
32
|
+
* based on the new state.
|
|
33
|
+
*/
|
|
34
|
+
export const EntityStateChangeEventSchema = z.object({
|
|
35
|
+
type: z.literal("entity:state_change"),
|
|
36
|
+
pipelineId: z.string(),
|
|
37
|
+
pipelineEntityId: z.string(),
|
|
38
|
+
newState: PipelineStateSchema,
|
|
39
|
+
})
|
|
40
|
+
export type EntityStateChangeEvent = z.infer<typeof EntityStateChangeEventSchema>
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Emitted when a `pipeline_entities.is_stale` flag flips to true via the
|
|
44
|
+
* cascade staleness trigger (migration 131). Triggered after a `main_asset_id`
|
|
45
|
+
* update on an upstream entity; the trigger marks every transitive dependent
|
|
46
|
+
* stale, and the engine emits one event per dependent.
|
|
47
|
+
*
|
|
48
|
+
* Frontend overlays a "Stale — needs regenerate" warning on the affected
|
|
49
|
+
* canvas nodes.
|
|
50
|
+
*/
|
|
51
|
+
export const EntityStaleEventSchema = z.object({
|
|
52
|
+
type: z.literal("entity:stale"),
|
|
53
|
+
pipelineId: z.string(),
|
|
54
|
+
pipelineEntityId: z.string(),
|
|
55
|
+
reason: z.enum(["upstream_changed", "user_edit", "manual"]).optional(),
|
|
56
|
+
})
|
|
57
|
+
export type EntityStaleEvent = z.infer<typeof EntityStaleEventSchema>
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Emitted when a pipeline is force-stopped / forked. Carries the prior status
|
|
61
|
+
* (`forked_status`) so the UI can render "Forked from approval" vs "Forked
|
|
62
|
+
* mid-Stage-5" copy. The companion `entity:state_change` flurry that orphans
|
|
63
|
+
* every node lands in the same SSE batch.
|
|
64
|
+
*/
|
|
65
|
+
export const PipelineForkedEventSchema = z.object({
|
|
66
|
+
type: z.literal("pipeline:forked"),
|
|
67
|
+
pipelineId: z.string(),
|
|
68
|
+
forkedAt: z.string(), // ISO timestamp
|
|
69
|
+
forkedStatus: z.string(),
|
|
70
|
+
forkReason: z.string().optional(),
|
|
71
|
+
})
|
|
72
|
+
export type PipelineForkedEvent = z.infer<typeof PipelineForkedEventSchema>
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Section H drift summary — when the engine pauses a stage at
|
|
76
|
+
* 'awaiting_approval' because user edits on the canvas diverged from the
|
|
77
|
+
* pipeline's recorded state, this payload is attached to the
|
|
78
|
+
* `pipeline_stages.awaiting_reason='canvas_drift'` row so the UI can render
|
|
79
|
+
* the DriftBanner with actionable diffs.
|
|
80
|
+
*
|
|
81
|
+
* Carried inside a `stage:status` event (or a future dedicated event); kept
|
|
82
|
+
* as a standalone schema so callers can validate the drift payload
|
|
83
|
+
* independently.
|
|
84
|
+
*/
|
|
85
|
+
export const PipelineDriftSummarySchema = z.object({
|
|
86
|
+
type: z.literal("pipeline:drift"),
|
|
87
|
+
pipelineId: z.string(),
|
|
88
|
+
stageName: z.string(),
|
|
89
|
+
driftedEntityIds: z.array(z.string()),
|
|
90
|
+
summary: z.string().optional(),
|
|
91
|
+
})
|
|
92
|
+
export type PipelineDriftSummary = z.infer<typeof PipelineDriftSummarySchema>
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Phase 1C.1 — emitted by Stage 8 (post_merge) when the pipeline reaches the
|
|
96
|
+
* `completed` terminal state. Carries the final merged-MP4 asset id + URL so
|
|
97
|
+
* the SSE consumer can render the player without an extra round-trip.
|
|
98
|
+
*
|
|
99
|
+
* Distinct from the legacy `pipeline:done` lifecycle event (which carries no
|
|
100
|
+
* payload). SSE forwarders close on either type.
|
|
101
|
+
*/
|
|
102
|
+
export const PipelineCompletedEventSchema = z.object({
|
|
103
|
+
type: z.literal("pipeline:completed"),
|
|
104
|
+
pipelineId: z.string(),
|
|
105
|
+
finalOutputAssetId: z.string().uuid().nullable(),
|
|
106
|
+
finalOutputUrl: z.string(),
|
|
107
|
+
})
|
|
108
|
+
export type PipelineCompletedEvent = z.infer<typeof PipelineCompletedEventSchema>
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Phase 1C.2 — Sub-gate names. Stage 7 (animate_audio_edit) and Stage 6
|
|
112
|
+
* (scene_images) can pause at one of these mid-stage gates before resuming
|
|
113
|
+
* the rest of the stage; the gate name is persisted on
|
|
114
|
+
* `pipeline_stages.output.current_sub_gate` (JSONB) so a resumed orchestrator
|
|
115
|
+
* picks up at the right step.
|
|
116
|
+
*
|
|
117
|
+
* `silent_cut_preview` — Stage 7: Editor LLM has emitted cut_decisions;
|
|
118
|
+
* user reviews the preview reel before the
|
|
119
|
+
* per-shot trims commit.
|
|
120
|
+
* `dialogue_recheck` — Stage 7: A re-recorded dialogue line shifted
|
|
121
|
+
* the dialogue_no_cut_zone; user confirms the
|
|
122
|
+
* new cuts still respect the zone.
|
|
123
|
+
* `match_cut_break_pending` — Stage 6: MatchCutCritic found one or more
|
|
124
|
+
* match-cut shot pairs with `match_strength =
|
|
125
|
+
* "break"`. User must accept each break (sets
|
|
126
|
+
* `accepted_match_cut_break=true` on the shot)
|
|
127
|
+
* before Stage 7 can animate those pairs.
|
|
128
|
+
*/
|
|
129
|
+
export const SubGateNameSchema = z.enum([
|
|
130
|
+
"silent_cut_preview",
|
|
131
|
+
"dialogue_recheck",
|
|
132
|
+
"match_cut_break_pending",
|
|
133
|
+
])
|
|
134
|
+
export type SubGateName = z.infer<typeof SubGateNameSchema>
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Phase 1C.2 — emitted when Stage 6 (scene_images) or Stage 7
|
|
138
|
+
* (animate_audio_edit) pauses at a sub-gate. Carries an optional `payload`
|
|
139
|
+
* (JSONB-shaped) for whatever the gate needs to render — e.g. the preview
|
|
140
|
+
* reel URL, the affected shot ids, or the pending-break list.
|
|
141
|
+
*
|
|
142
|
+
* Distinct from `stage:status awaiting_approval` (which is the top-level
|
|
143
|
+
* stage gate). Sub-gates stash `current_sub_gate` on the stage output AND
|
|
144
|
+
* flip `status = "awaiting_approval"` so the pipeline engine waits.
|
|
145
|
+
*/
|
|
146
|
+
export const StageAwaitingSubGateEventSchema = z.object({
|
|
147
|
+
type: z.literal("stage:awaiting_sub_gate"),
|
|
148
|
+
pipelineId: z.string().uuid(),
|
|
149
|
+
stageName: z.enum(["animate_audio_edit", "scene_images"]),
|
|
150
|
+
subGate: SubGateNameSchema,
|
|
151
|
+
payload: z.record(z.unknown()).optional(),
|
|
152
|
+
})
|
|
153
|
+
export type StageAwaitingSubGateEvent = z.infer<typeof StageAwaitingSubGateEventSchema>
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Phase 1C.2 — emitted when the music_timeline build step (Stage 7 sibling)
|
|
157
|
+
* has produced the merged music track + beat grid. The SSE consumer can
|
|
158
|
+
* render the music waveform + beat markers without an extra round-trip.
|
|
159
|
+
*/
|
|
160
|
+
export const PipelineMusicReadyEventSchema = z.object({
|
|
161
|
+
type: z.literal("pipeline:music_ready"),
|
|
162
|
+
pipelineId: z.string().uuid(),
|
|
163
|
+
musicAssetUrl: z.string().url(),
|
|
164
|
+
beatGridLength: z.number(),
|
|
165
|
+
})
|
|
166
|
+
export type PipelineMusicReadyEvent = z.infer<typeof PipelineMusicReadyEventSchema>
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Phase 1C.2 — emitted when the Editor LLM has produced cut_decisions for
|
|
170
|
+
* every shot in the pipeline. Frontend can render the silent-cut-preview UI
|
|
171
|
+
* (timeline + accept/reject) once this fires. Payload is intentionally
|
|
172
|
+
* minimal — the decisions are persisted on the shots' `cut_decision` field
|
|
173
|
+
* and the `editor_decisions` audit table.
|
|
174
|
+
*/
|
|
175
|
+
export const PipelineEditorDecisionsReadyEventSchema = z.object({
|
|
176
|
+
type: z.literal("pipeline:editor_decisions_ready"),
|
|
177
|
+
pipelineId: z.string().uuid(),
|
|
178
|
+
})
|
|
179
|
+
export type PipelineEditorDecisionsReadyEvent = z.infer<
|
|
180
|
+
typeof PipelineEditorDecisionsReadyEventSchema
|
|
181
|
+
>
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Union of the Phase 1B.4 + 1C.1 + 1C.2 lifecycle event payloads. The broader
|
|
185
|
+
* `PipelineEvent` union in `pipeline-events.ts` extends this so SSE
|
|
186
|
+
* forwarders accept all of them transparently.
|
|
187
|
+
*/
|
|
188
|
+
export type PipelineLifecycleEvent =
|
|
189
|
+
| EntityStateChangeEvent
|
|
190
|
+
| EntityStaleEvent
|
|
191
|
+
| PipelineForkedEvent
|
|
192
|
+
| PipelineDriftSummary
|
|
193
|
+
| PipelineCompletedEvent
|
|
194
|
+
| StageAwaitingSubGateEvent
|
|
195
|
+
| PipelineMusicReadyEvent
|
|
196
|
+
| PipelineEditorDecisionsReadyEvent
|