vidspotai-shared 1.0.82 → 1.0.84
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/lib/globals/aiModels/enums.d.ts +11 -1
- package/lib/globals/aiModels/enums.d.ts.map +1 -1
- package/lib/globals/aiModels/enums.js +24 -1
- package/lib/globals/aiModels/index.d.ts.map +1 -1
- package/lib/globals/aiModels/index.js +2 -0
- package/lib/globals/aiModels/providers/anthropic.d.ts +12 -0
- package/lib/globals/aiModels/providers/anthropic.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/anthropic.js +88 -0
- package/lib/globals/aiModels/providers/google.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/google.js +82 -0
- package/lib/globals/aiModels/providers/openai.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/openai.js +63 -4
- package/lib/globals/aiModels/tierHelpers.d.ts +12 -0
- package/lib/globals/aiModels/tierHelpers.d.ts.map +1 -1
- package/lib/globals/aiModels/tierHelpers.js +83 -0
- package/lib/globals/aiModels/types.d.ts +19 -0
- package/lib/globals/aiModels/types.d.ts.map +1 -1
- package/lib/globals/types.d.ts +120 -1
- package/lib/globals/types.d.ts.map +1 -1
- package/lib/globals/types.js +135 -1
- package/lib/models/agent.model.d.ts +41 -1
- package/lib/models/agent.model.d.ts.map +1 -1
- package/lib/models/index.d.ts +1 -0
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/index.js +1 -0
- package/lib/models/social.model.d.ts +180 -0
- package/lib/models/social.model.d.ts.map +1 -0
- package/lib/models/social.model.js +2 -0
- package/lib/models/user.model.d.ts +10 -0
- package/lib/models/user.model.d.ts.map +1 -1
- package/lib/models/video.model.d.ts +6 -0
- package/lib/models/video.model.d.ts.map +1 -1
- package/lib/schemas/brief.schema.d.ts +46 -0
- package/lib/schemas/brief.schema.d.ts.map +1 -1
- package/lib/schemas/brief.schema.js +72 -1
- package/lib/schemas/index.d.ts +1 -0
- package/lib/schemas/index.d.ts.map +1 -1
- package/lib/schemas/index.js +1 -0
- package/lib/schemas/project.schema.d.ts +67 -0
- package/lib/schemas/project.schema.d.ts.map +1 -1
- package/lib/schemas/project.schema.js +12 -0
- package/lib/schemas/social.schema.d.ts +91 -0
- package/lib/schemas/social.schema.d.ts.map +1 -0
- package/lib/schemas/social.schema.js +114 -0
- package/lib/schemas/videoPlan.schema.d.ts +114 -0
- package/lib/schemas/videoPlan.schema.d.ts.map +1 -1
- package/lib/schemas/videoPlan.schema.js +141 -1
- package/lib/services/agent/chatAgent.d.ts +25 -1
- package/lib/services/agent/chatAgent.d.ts.map +1 -1
- package/lib/services/agent/chatAgent.js +145 -9
- package/lib/services/agent/costPreflight.d.ts +11 -1
- package/lib/services/agent/costPreflight.d.ts.map +1 -1
- package/lib/services/agent/costPreflight.js +18 -1
- package/lib/services/agent/covers/coverPlanner.d.ts +41 -0
- package/lib/services/agent/covers/coverPlanner.d.ts.map +1 -0
- package/lib/services/agent/covers/coverPlanner.js +278 -0
- package/lib/services/agent/covers/covers.schema.d.ts +158 -0
- package/lib/services/agent/covers/covers.schema.d.ts.map +1 -0
- package/lib/services/agent/covers/covers.schema.js +166 -0
- package/lib/services/agent/covers/index.d.ts +3 -0
- package/lib/services/agent/covers/index.d.ts.map +1 -0
- package/lib/services/agent/covers/index.js +18 -0
- package/lib/services/agent/critic.d.ts +10 -0
- package/lib/services/agent/critic.d.ts.map +1 -1
- package/lib/services/agent/critic.js +37 -1
- package/lib/services/agent/editClassifier.d.ts +2 -2
- package/lib/services/agent/editClassifier.js +2 -2
- package/lib/services/agent/editExisting/editAssembler.d.ts +78 -0
- package/lib/services/agent/editExisting/editAssembler.d.ts.map +1 -0
- package/lib/services/agent/editExisting/editAssembler.js +172 -0
- package/lib/services/agent/editExisting/editExisting.schema.d.ts +119 -0
- package/lib/services/agent/editExisting/editExisting.schema.d.ts.map +1 -0
- package/lib/services/agent/editExisting/editExisting.schema.js +157 -0
- package/lib/services/agent/editExisting/highlightPicker.d.ts +48 -0
- package/lib/services/agent/editExisting/highlightPicker.d.ts.map +1 -0
- package/lib/services/agent/editExisting/highlightPicker.js +199 -0
- package/lib/services/agent/editExisting/index.d.ts +4 -0
- package/lib/services/agent/editExisting/index.d.ts.map +1 -0
- package/lib/services/agent/editExisting/index.js +19 -0
- package/lib/services/agent/eval/seedBriefs.d.ts +4 -3
- package/lib/services/agent/eval/seedBriefs.d.ts.map +1 -1
- package/lib/services/agent/eval/seedBriefs.js +283 -3
- package/lib/services/agent/eval/types.d.ts +10 -0
- package/lib/services/agent/eval/types.d.ts.map +1 -1
- package/lib/services/agent/executor/core.d.ts +70 -0
- package/lib/services/agent/executor/core.d.ts.map +1 -0
- package/lib/services/agent/executor/core.js +250 -0
- package/lib/services/agent/executor/duration.d.ts +20 -0
- package/lib/services/agent/executor/duration.d.ts.map +1 -0
- package/lib/services/agent/executor/duration.js +46 -0
- package/lib/services/agent/executor/index.d.ts +15 -0
- package/lib/services/agent/executor/index.d.ts.map +1 -0
- package/lib/services/agent/executor/index.js +32 -0
- package/lib/services/agent/executor/types.d.ts +183 -0
- package/lib/services/agent/executor/types.d.ts.map +1 -0
- package/lib/services/agent/executor/types.js +29 -0
- package/lib/services/agent/executor/visual.d.ts +32 -0
- package/lib/services/agent/executor/visual.d.ts.map +1 -0
- package/lib/services/agent/executor/visual.js +400 -0
- package/lib/services/agent/executor/voice.d.ts +17 -0
- package/lib/services/agent/executor/voice.d.ts.map +1 -0
- package/lib/services/agent/executor/voice.js +119 -0
- package/lib/services/agent/extendChain.d.ts +101 -0
- package/lib/services/agent/extendChain.d.ts.map +1 -0
- package/lib/services/agent/extendChain.js +177 -0
- package/lib/services/agent/index.d.ts +11 -1
- package/lib/services/agent/index.d.ts.map +1 -1
- package/lib/services/agent/index.js +11 -1
- package/lib/services/agent/llmCaller.d.ts +7 -8
- package/lib/services/agent/llmCaller.d.ts.map +1 -1
- package/lib/services/agent/llmCallerAnthropic.d.ts +44 -31
- package/lib/services/agent/llmCallerAnthropic.d.ts.map +1 -1
- package/lib/services/agent/llmCallerAnthropic.js +135 -60
- package/lib/services/agent/llmCallerFactory.d.ts +34 -0
- package/lib/services/agent/llmCallerFactory.d.ts.map +1 -0
- package/lib/services/agent/llmCallerFactory.js +31 -0
- package/lib/services/agent/llmCallerGemini.d.ts +62 -0
- package/lib/services/agent/llmCallerGemini.d.ts.map +1 -0
- package/lib/services/agent/llmCallerGemini.js +235 -0
- package/lib/services/agent/llmCallerOpenai.d.ts +56 -0
- package/lib/services/agent/llmCallerOpenai.d.ts.map +1 -0
- package/lib/services/agent/llmCallerOpenai.js +230 -0
- package/lib/services/agent/llmCallerRegistry.d.ts.map +1 -1
- package/lib/services/agent/llmCallerRegistry.js +7 -7
- package/lib/services/agent/llmCallerRouting.d.ts +63 -0
- package/lib/services/agent/llmCallerRouting.d.ts.map +1 -0
- package/lib/services/agent/llmCallerRouting.js +124 -0
- package/lib/services/agent/llmModelRegistry.d.ts +59 -0
- package/lib/services/agent/llmModelRegistry.d.ts.map +1 -0
- package/lib/services/agent/llmModelRegistry.js +168 -0
- package/lib/services/agent/llmRetry.d.ts +57 -0
- package/lib/services/agent/llmRetry.d.ts.map +1 -0
- package/lib/services/agent/llmRetry.js +102 -0
- package/lib/services/agent/modelRouter.d.ts +3 -3
- package/lib/services/agent/modelRouter.d.ts.map +1 -1
- package/lib/services/agent/modelRouter.js +27 -13
- package/lib/services/agent/planMutations.d.ts +54 -1
- package/lib/services/agent/planMutations.d.ts.map +1 -1
- package/lib/services/agent/planMutations.js +78 -0
- package/lib/services/agent/planner/Planner.d.ts +0 -17
- package/lib/services/agent/planner/Planner.d.ts.map +1 -1
- package/lib/services/agent/planner/Planner.js +67 -303
- package/lib/services/agent/planner/overlayRegen.d.ts +38 -0
- package/lib/services/agent/planner/overlayRegen.d.ts.map +1 -0
- package/lib/services/agent/planner/overlayRegen.js +145 -0
- package/lib/services/agent/planner/plannerMessages.d.ts +34 -0
- package/lib/services/agent/planner/plannerMessages.d.ts.map +1 -0
- package/lib/services/agent/planner/plannerMessages.js +185 -0
- package/lib/services/agent/planner/promptSections.d.ts +12 -0
- package/lib/services/agent/planner/promptSections.d.ts.map +1 -1
- package/lib/services/agent/planner/promptSections.js +57 -0
- package/lib/services/agent/planner/scriptFirstPlanner.d.ts +35 -0
- package/lib/services/agent/planner/scriptFirstPlanner.d.ts.map +1 -0
- package/lib/services/agent/planner/scriptFirstPlanner.js +140 -0
- package/lib/services/agent/planner/structuralRules.d.ts +10 -0
- package/lib/services/agent/planner/structuralRules.d.ts.map +1 -1
- package/lib/services/agent/planner/structuralRules.js +92 -9
- package/lib/services/agent/planner/validators.d.ts +18 -0
- package/lib/services/agent/planner/validators.d.ts.map +1 -1
- package/lib/services/agent/planner/validators.js +97 -0
- package/lib/services/agent/planner.d.ts +2 -1
- package/lib/services/agent/planner.d.ts.map +1 -1
- package/lib/services/agent/planner.js +5 -1
- package/lib/services/agent/priorProject.d.ts +26 -0
- package/lib/services/agent/priorProject.d.ts.map +1 -0
- package/lib/services/agent/priorProject.js +51 -0
- package/lib/services/agent/providerFallback/chains.d.ts.map +1 -1
- package/lib/services/agent/providerFallback/chains.js +27 -15
- package/lib/services/agent/repurpose/index.d.ts +3 -0
- package/lib/services/agent/repurpose/index.d.ts.map +1 -0
- package/lib/services/agent/repurpose/index.js +18 -0
- package/lib/services/agent/repurpose/repurpose.schema.d.ts +132 -0
- package/lib/services/agent/repurpose/repurpose.schema.d.ts.map +1 -0
- package/lib/services/agent/repurpose/repurpose.schema.js +144 -0
- package/lib/services/agent/repurpose/shortsPicker.d.ts +25 -0
- package/lib/services/agent/repurpose/shortsPicker.d.ts.map +1 -0
- package/lib/services/agent/repurpose/shortsPicker.js +218 -0
- package/lib/services/agent/runHelpers.d.ts +21 -2
- package/lib/services/agent/runHelpers.d.ts.map +1 -1
- package/lib/services/agent/runHelpers.js +71 -2
- package/lib/services/agent/tools/animateImage.tool.d.ts +1 -0
- package/lib/services/agent/tools/animateImage.tool.d.ts.map +1 -1
- package/lib/services/agent/tools/animateImage.tool.js +12 -0
- package/lib/services/agent/tools/chapterOutline.tool.d.ts +42 -0
- package/lib/services/agent/tools/chapterOutline.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/chapterOutline.tool.js +115 -0
- package/lib/services/agent/tools/composeScene.tool.d.ts +63 -0
- package/lib/services/agent/tools/composeScene.tool.d.ts.map +1 -1
- package/lib/services/agent/tools/estimateCost.tool.d.ts +27 -0
- package/lib/services/agent/tools/estimateCost.tool.d.ts.map +1 -1
- package/lib/services/agent/tools/estimateCost.tool.js +55 -7
- package/lib/services/agent/tools/extendVideo.tool.d.ts +26 -0
- package/lib/services/agent/tools/extendVideo.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/extendVideo.tool.js +149 -0
- package/lib/services/agent/tools/generateScript.tool.d.ts +184 -0
- package/lib/services/agent/tools/generateScript.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/generateScript.tool.js +123 -0
- package/lib/services/agent/tools/generateVideo.tool.d.ts +1 -0
- package/lib/services/agent/tools/generateVideo.tool.d.ts.map +1 -1
- package/lib/services/agent/tools/generateVideo.tool.js +20 -1
- package/lib/services/agent/tools/index.d.ts +4 -0
- package/lib/services/agent/tools/index.d.ts.map +1 -1
- package/lib/services/agent/tools/index.js +4 -0
- package/lib/services/agent/tools/matchBrollToScript.tool.d.ts +50 -0
- package/lib/services/agent/tools/matchBrollToScript.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/matchBrollToScript.tool.js +139 -0
- package/lib/services/agent/tools/planVideo.tool.d.ts +56 -0
- package/lib/services/agent/tools/planVideo.tool.d.ts.map +1 -1
- package/lib/services/agent/tools/planVideo.tool.js +3 -3
- package/lib/services/agent/tools/render.tool.d.ts +21 -0
- package/lib/services/agent/tools/render.tool.d.ts.map +1 -1
- package/lib/services/aiGen/aiGenFactory.service.d.ts.map +1 -1
- package/lib/services/aiGen/aiGenFactory.service.js +18 -3
- package/lib/services/aiGen/providers/anthropic/anthropic.service.d.ts +26 -0
- package/lib/services/aiGen/providers/anthropic/anthropic.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/anthropic/anthropic.service.js +95 -0
- package/lib/services/aiGen/providers/google/google.service.d.ts +24 -1
- package/lib/services/aiGen/providers/google/google.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/google/google.service.js +96 -244
- package/lib/services/aiGen/providers/google/googleErrors.d.ts +13 -0
- package/lib/services/aiGen/providers/google/googleErrors.d.ts.map +1 -0
- package/lib/services/aiGen/providers/google/googleErrors.js +102 -0
- package/lib/services/aiGen/providers/google/googleFetch.d.ts +8 -0
- package/lib/services/aiGen/providers/google/googleFetch.d.ts.map +1 -0
- package/lib/services/aiGen/providers/google/googleFetch.js +96 -0
- package/lib/services/aiGen/providers/google/googleMusic.d.ts +15 -0
- package/lib/services/aiGen/providers/google/googleMusic.d.ts.map +1 -0
- package/lib/services/aiGen/providers/google/googleMusic.js +77 -0
- package/lib/services/aiGen/providers/kling/kling.service.d.ts +7 -3
- package/lib/services/aiGen/providers/kling/kling.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/kling.service.js +23 -367
- package/lib/services/aiGen/providers/kling/klingCredits.d.ts +9 -0
- package/lib/services/aiGen/providers/kling/klingCredits.d.ts.map +1 -0
- package/lib/services/aiGen/providers/kling/klingCredits.js +63 -0
- package/lib/services/aiGen/providers/kling/klingRequests.d.ts +32 -0
- package/lib/services/aiGen/providers/kling/klingRequests.d.ts.map +1 -0
- package/lib/services/aiGen/providers/kling/klingRequests.js +194 -0
- package/lib/services/aiGen/providers/kling/klingStatus.d.ts +16 -0
- package/lib/services/aiGen/providers/kling/klingStatus.d.ts.map +1 -0
- package/lib/services/aiGen/providers/kling/klingStatus.js +173 -0
- package/lib/services/bullmq.service.d.ts +61 -0
- package/lib/services/bullmq.service.d.ts.map +1 -1
- package/lib/services/bullmq.service.js +101 -1
- package/lib/services/crypto/index.d.ts +2 -0
- package/lib/services/crypto/index.d.ts.map +1 -0
- package/lib/services/crypto/index.js +17 -0
- package/lib/services/crypto/tokenVault.d.ts +47 -0
- package/lib/services/crypto/tokenVault.d.ts.map +1 -0
- package/lib/services/crypto/tokenVault.js +179 -0
- package/lib/services/editor/captionStyleHint.d.ts +3 -0
- package/lib/services/editor/captionStyleHint.d.ts.map +1 -0
- package/lib/services/editor/captionStyleHint.js +112 -0
- package/lib/services/editor/planToProject.d.ts +7 -66
- package/lib/services/editor/planToProject.d.ts.map +1 -1
- package/lib/services/editor/planToProject.helpers.d.ts +40 -0
- package/lib/services/editor/planToProject.helpers.d.ts.map +1 -0
- package/lib/services/editor/planToProject.helpers.js +177 -0
- package/lib/services/editor/planToProject.js +197 -180
- package/lib/services/editor/planToProject.types.d.ts +94 -0
- package/lib/services/editor/planToProject.types.d.ts.map +1 -0
- package/lib/services/editor/planToProject.types.js +2 -0
- package/lib/services/firestore.service.d.ts +5 -0
- package/lib/services/firestore.service.d.ts.map +1 -1
- package/lib/services/firestore.service.js +13 -0
- package/lib/services/index.d.ts +12 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/index.js +12 -0
- package/lib/services/promptEnhancer/index.d.ts +18 -0
- package/lib/services/promptEnhancer/index.d.ts.map +1 -0
- package/lib/services/promptEnhancer/index.js +33 -0
- package/lib/services/promptEnhancer/models.d.ts +54 -0
- package/lib/services/promptEnhancer/models.d.ts.map +1 -0
- package/lib/services/promptEnhancer/models.js +37 -0
- package/lib/services/promptEnhancer/profiles/agent.profile.d.ts +14 -0
- package/lib/services/promptEnhancer/profiles/agent.profile.d.ts.map +1 -0
- package/lib/services/promptEnhancer/profiles/agent.profile.js +40 -0
- package/lib/services/promptEnhancer/profiles/avatar.profile.d.ts +13 -0
- package/lib/services/promptEnhancer/profiles/avatar.profile.d.ts.map +1 -0
- package/lib/services/promptEnhancer/profiles/avatar.profile.js +40 -0
- package/lib/services/promptEnhancer/profiles/base.d.ts +28 -0
- package/lib/services/promptEnhancer/profiles/base.d.ts.map +1 -0
- package/lib/services/promptEnhancer/profiles/base.js +35 -0
- package/lib/services/promptEnhancer/profiles/image.profile.d.ts +11 -0
- package/lib/services/promptEnhancer/profiles/image.profile.d.ts.map +1 -0
- package/lib/services/promptEnhancer/profiles/image.profile.js +42 -0
- package/lib/services/promptEnhancer/profiles/index.d.ts +12 -0
- package/lib/services/promptEnhancer/profiles/index.d.ts.map +1 -0
- package/lib/services/promptEnhancer/profiles/index.js +33 -0
- package/lib/services/promptEnhancer/profiles/video.profile.d.ts +15 -0
- package/lib/services/promptEnhancer/profiles/video.profile.d.ts.map +1 -0
- package/lib/services/promptEnhancer/profiles/video.profile.js +81 -0
- package/lib/services/promptEnhancer/promptEnhancer.service.d.ts +45 -0
- package/lib/services/promptEnhancer/promptEnhancer.service.d.ts.map +1 -0
- package/lib/services/promptEnhancer/promptEnhancer.service.js +157 -0
- package/lib/services/promptEnhancer/schema.d.ts +19 -0
- package/lib/services/promptEnhancer/schema.d.ts.map +1 -0
- package/lib/services/promptEnhancer/schema.js +43 -0
- package/lib/services/promptEnhancer/types.d.ts +112 -0
- package/lib/services/promptEnhancer/types.d.ts.map +1 -0
- package/lib/services/promptEnhancer/types.js +2 -0
- package/lib/services/socialAI/captionGen.d.ts +81 -0
- package/lib/services/socialAI/captionGen.d.ts.map +1 -0
- package/lib/services/socialAI/captionGen.js +206 -0
- package/lib/services/socialAI/hookScore.d.ts +85 -0
- package/lib/services/socialAI/hookScore.d.ts.map +1 -0
- package/lib/services/socialAI/hookScore.js +170 -0
- package/lib/services/socialAI/index.d.ts +3 -0
- package/lib/services/socialAI/index.d.ts.map +1 -0
- package/lib/services/socialAI/index.js +18 -0
- package/lib/services/socialAccounts/index.d.ts +2 -0
- package/lib/services/socialAccounts/index.d.ts.map +1 -0
- package/lib/services/socialAccounts/index.js +17 -0
- package/lib/services/socialAccounts/socialAccountService.d.ts +25 -0
- package/lib/services/socialAccounts/socialAccountService.d.ts.map +1 -0
- package/lib/services/socialAccounts/socialAccountService.js +105 -0
- package/lib/services/socialEngage/factory.d.ts +7 -0
- package/lib/services/socialEngage/factory.d.ts.map +1 -0
- package/lib/services/socialEngage/factory.js +25 -0
- package/lib/services/socialEngage/index.d.ts +6 -0
- package/lib/services/socialEngage/index.d.ts.map +1 -0
- package/lib/services/socialEngage/index.js +21 -0
- package/lib/services/socialEngage/meta.engage.d.ts +17 -0
- package/lib/services/socialEngage/meta.engage.d.ts.map +1 -0
- package/lib/services/socialEngage/meta.engage.js +128 -0
- package/lib/services/socialEngage/metaWebhook.d.ts +50 -0
- package/lib/services/socialEngage/metaWebhook.d.ts.map +1 -0
- package/lib/services/socialEngage/metaWebhook.js +93 -0
- package/lib/services/socialEngage/types.d.ts +72 -0
- package/lib/services/socialEngage/types.d.ts.map +1 -0
- package/lib/services/socialEngage/types.js +10 -0
- package/lib/services/socialEngage/youtube.engage.d.ts +9 -0
- package/lib/services/socialEngage/youtube.engage.d.ts.map +1 -0
- package/lib/services/socialEngage/youtube.engage.js +87 -0
- package/lib/services/socialFormat/aspectGeometry.d.ts +74 -0
- package/lib/services/socialFormat/aspectGeometry.d.ts.map +1 -0
- package/lib/services/socialFormat/aspectGeometry.js +135 -0
- package/lib/services/socialFormat/index.d.ts +2 -0
- package/lib/services/socialFormat/index.d.ts.map +1 -0
- package/lib/services/socialFormat/index.js +19 -0
- package/lib/services/socialInsights/index.d.ts +3 -0
- package/lib/services/socialInsights/index.d.ts.map +1 -0
- package/lib/services/socialInsights/index.js +18 -0
- package/lib/services/socialInsights/recommendations.d.ts +131 -0
- package/lib/services/socialInsights/recommendations.d.ts.map +1 -0
- package/lib/services/socialInsights/recommendations.js +277 -0
- package/lib/services/socialInsights/timeBuckets.d.ts +35 -0
- package/lib/services/socialInsights/timeBuckets.d.ts.map +1 -0
- package/lib/services/socialInsights/timeBuckets.js +78 -0
- package/lib/services/socialMetrics/factory.d.ts +5 -0
- package/lib/services/socialMetrics/factory.d.ts.map +1 -0
- package/lib/services/socialMetrics/factory.js +24 -0
- package/lib/services/socialMetrics/index.d.ts +6 -0
- package/lib/services/socialMetrics/index.d.ts.map +1 -0
- package/lib/services/socialMetrics/index.js +21 -0
- package/lib/services/socialMetrics/meta.metrics.d.ts +22 -0
- package/lib/services/socialMetrics/meta.metrics.d.ts.map +1 -0
- package/lib/services/socialMetrics/meta.metrics.js +137 -0
- package/lib/services/socialMetrics/tiktok.metrics.d.ts +8 -0
- package/lib/services/socialMetrics/tiktok.metrics.d.ts.map +1 -0
- package/lib/services/socialMetrics/tiktok.metrics.js +43 -0
- package/lib/services/socialMetrics/types.d.ts +54 -0
- package/lib/services/socialMetrics/types.d.ts.map +1 -0
- package/lib/services/socialMetrics/types.js +2 -0
- package/lib/services/socialMetrics/youtube.metrics.d.ts +8 -0
- package/lib/services/socialMetrics/youtube.metrics.d.ts.map +1 -0
- package/lib/services/socialMetrics/youtube.metrics.js +43 -0
- package/lib/services/socialOAuth/factory.d.ts +7 -0
- package/lib/services/socialOAuth/factory.d.ts.map +1 -0
- package/lib/services/socialOAuth/factory.js +42 -0
- package/lib/services/socialOAuth/index.d.ts +11 -0
- package/lib/services/socialOAuth/index.d.ts.map +1 -0
- package/lib/services/socialOAuth/index.js +26 -0
- package/lib/services/socialOAuth/linkedin.oauth.d.ts +14 -0
- package/lib/services/socialOAuth/linkedin.oauth.d.ts.map +1 -0
- package/lib/services/socialOAuth/linkedin.oauth.js +127 -0
- package/lib/services/socialOAuth/meta.oauth.d.ts +31 -0
- package/lib/services/socialOAuth/meta.oauth.d.ts.map +1 -0
- package/lib/services/socialOAuth/meta.oauth.js +214 -0
- package/lib/services/socialOAuth/oauthState.d.ts +14 -0
- package/lib/services/socialOAuth/oauthState.d.ts.map +1 -0
- package/lib/services/socialOAuth/oauthState.js +66 -0
- package/lib/services/socialOAuth/pinterest.oauth.d.ts +15 -0
- package/lib/services/socialOAuth/pinterest.oauth.d.ts.map +1 -0
- package/lib/services/socialOAuth/pinterest.oauth.js +126 -0
- package/lib/services/socialOAuth/threads.oauth.d.ts +14 -0
- package/lib/services/socialOAuth/threads.oauth.d.ts.map +1 -0
- package/lib/services/socialOAuth/threads.oauth.js +129 -0
- package/lib/services/socialOAuth/tiktok.oauth.d.ts +15 -0
- package/lib/services/socialOAuth/tiktok.oauth.d.ts.map +1 -0
- package/lib/services/socialOAuth/tiktok.oauth.js +151 -0
- package/lib/services/socialOAuth/types.d.ts +67 -0
- package/lib/services/socialOAuth/types.d.ts.map +1 -0
- package/lib/services/socialOAuth/types.js +2 -0
- package/lib/services/socialOAuth/x.oauth.d.ts +17 -0
- package/lib/services/socialOAuth/x.oauth.d.ts.map +1 -0
- package/lib/services/socialOAuth/x.oauth.js +134 -0
- package/lib/services/socialOAuth/youtube.oauth.d.ts +15 -0
- package/lib/services/socialOAuth/youtube.oauth.d.ts.map +1 -0
- package/lib/services/socialOAuth/youtube.oauth.js +156 -0
- package/lib/services/socialPublish/factory.d.ts +5 -0
- package/lib/services/socialPublish/factory.d.ts.map +1 -0
- package/lib/services/socialPublish/factory.js +32 -0
- package/lib/services/socialPublish/index.d.ts +10 -0
- package/lib/services/socialPublish/index.d.ts.map +1 -0
- package/lib/services/socialPublish/index.js +25 -0
- package/lib/services/socialPublish/linkedin.publish.d.ts +9 -0
- package/lib/services/socialPublish/linkedin.publish.d.ts.map +1 -0
- package/lib/services/socialPublish/linkedin.publish.js +143 -0
- package/lib/services/socialPublish/meta.publish.d.ts +28 -0
- package/lib/services/socialPublish/meta.publish.d.ts.map +1 -0
- package/lib/services/socialPublish/meta.publish.js +149 -0
- package/lib/services/socialPublish/pinterest.publish.d.ts +13 -0
- package/lib/services/socialPublish/pinterest.publish.d.ts.map +1 -0
- package/lib/services/socialPublish/pinterest.publish.js +130 -0
- package/lib/services/socialPublish/threads.publish.d.ts +12 -0
- package/lib/services/socialPublish/threads.publish.d.ts.map +1 -0
- package/lib/services/socialPublish/threads.publish.js +96 -0
- package/lib/services/socialPublish/tiktok.publish.d.ts +13 -0
- package/lib/services/socialPublish/tiktok.publish.d.ts.map +1 -0
- package/lib/services/socialPublish/tiktok.publish.js +118 -0
- package/lib/services/socialPublish/types.d.ts +47 -0
- package/lib/services/socialPublish/types.d.ts.map +1 -0
- package/lib/services/socialPublish/types.js +2 -0
- package/lib/services/socialPublish/x.publish.d.ts +12 -0
- package/lib/services/socialPublish/x.publish.d.ts.map +1 -0
- package/lib/services/socialPublish/x.publish.js +147 -0
- package/lib/services/socialPublish/youtube.publish.d.ts +9 -0
- package/lib/services/socialPublish/youtube.publish.d.ts.map +1 -0
- package/lib/services/socialPublish/youtube.publish.js +107 -0
- package/lib/services/stock/index.d.ts +2 -0
- package/lib/services/stock/index.d.ts.map +1 -0
- package/lib/services/stock/index.js +17 -0
- package/lib/services/stock/realPersonSafety.d.ts +99 -0
- package/lib/services/stock/realPersonSafety.d.ts.map +1 -0
- package/lib/services/stock/realPersonSafety.js +248 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.d.ts.map +1 -1
- package/lib/utils/index.js +1 -0
- package/lib/utils/renderTier.d.ts +26 -0
- package/lib/utils/renderTier.d.ts.map +1 -0
- package/lib/utils/renderTier.js +34 -0
- package/package.json +1 -1
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildTranscriptLines = buildTranscriptLines;
|
|
4
|
+
exports.pickHighlightsCore = pickHighlightsCore;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const logger_1 = require("../../../utils/logger");
|
|
7
|
+
const modelRouter_1 = require("../modelRouter");
|
|
8
|
+
const editExisting_schema_1 = require("./editExisting.schema");
|
|
9
|
+
const editAssembler_1 = require("./editAssembler");
|
|
10
|
+
/**
|
|
11
|
+
* The raw LLM output. Intentionally looser than HighlightSegmentSchema (no
|
|
12
|
+
* refine / strict) — we do our own bounds-checking + clamping afterwards so a
|
|
13
|
+
* slightly-off model answer is repaired rather than rejected outright.
|
|
14
|
+
*/
|
|
15
|
+
const LlmSelectionSchema = zod_1.z.object({
|
|
16
|
+
segments: zod_1.z
|
|
17
|
+
.array(zod_1.z.object({
|
|
18
|
+
startMs: zod_1.z.number(),
|
|
19
|
+
endMs: zod_1.z.number(),
|
|
20
|
+
reason: zod_1.z.string(),
|
|
21
|
+
label: zod_1.z.string().optional(),
|
|
22
|
+
}))
|
|
23
|
+
.min(1),
|
|
24
|
+
summary: zod_1.z.string().optional(),
|
|
25
|
+
});
|
|
26
|
+
const GOAL_GUIDANCE = {
|
|
27
|
+
highlights: "Keep only the genuinely strongest, most engaging moments. Prefer complete thoughts over fragments; drop filler, tangents, and dead air.",
|
|
28
|
+
"podcast-clips": "Select self-contained, quotable segments that would each stand alone as a social clip. Each segment should open and close on a complete thought (no mid-sentence cuts).",
|
|
29
|
+
"vlog-reedit": "Preserve the narrative flow start-to-end, but tighten it: cut filler words, long pauses, retakes, and rambling. The result should still feel like a coherent through-line, not disconnected clips.",
|
|
30
|
+
"interview-highlights": "Select the strongest question→answer exchanges. Keep enough of the question for context, then the meat of the answer. Use the speaker labels to avoid cutting mid-exchange.",
|
|
31
|
+
};
|
|
32
|
+
function fmtTs(ms) {
|
|
33
|
+
const totalSec = Math.floor(ms / 1000);
|
|
34
|
+
const m = Math.floor(totalSec / 60);
|
|
35
|
+
const s = totalSec % 60;
|
|
36
|
+
const frac = Math.floor(ms % 1000);
|
|
37
|
+
return `${m}:${String(s).padStart(2, "0")}.${String(frac).padStart(3, "0")}`;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Render the transcript as timestamped lines the model can quote start/end
|
|
41
|
+
* from. Prefers utterances (speaker-aware, naturally chunked); falls back to
|
|
42
|
+
* grouping words into ~sentence lines by punctuation so the model still gets
|
|
43
|
+
* tight, pickable boundaries with real timestamps.
|
|
44
|
+
*/
|
|
45
|
+
function buildTranscriptLines(transcript) {
|
|
46
|
+
if (transcript.utterances && transcript.utterances.length > 0) {
|
|
47
|
+
return transcript.utterances
|
|
48
|
+
.map((u) => `[${fmtTs(u.start)} → ${fmtTs(u.end)}] (${u.speaker}) ${u.text.trim()}`)
|
|
49
|
+
.join("\n");
|
|
50
|
+
}
|
|
51
|
+
const words = transcript.words ?? [];
|
|
52
|
+
if (words.length === 0) {
|
|
53
|
+
// No timing at all — give the model the text + total duration and let it
|
|
54
|
+
// approximate. Rare (ASR always returns words on success).
|
|
55
|
+
return `[0:00.000 → ${fmtTs(transcript.audioDurationMs)}] ${transcript.fullText}`;
|
|
56
|
+
}
|
|
57
|
+
// Group words into lines, breaking on sentence-final punctuation OR every
|
|
58
|
+
// ~25 words so no single line is unboundedly long.
|
|
59
|
+
const lines = [];
|
|
60
|
+
let bucket = [];
|
|
61
|
+
const flush = () => {
|
|
62
|
+
if (bucket.length === 0)
|
|
63
|
+
return;
|
|
64
|
+
const start = bucket[0].start;
|
|
65
|
+
const end = bucket[bucket.length - 1].end;
|
|
66
|
+
const text = bucket.map((w) => w.text).join(" ").replace(/\s+([.,!?;:])/g, "$1");
|
|
67
|
+
lines.push(`[${fmtTs(start)} → ${fmtTs(end)}] ${text}`);
|
|
68
|
+
bucket = [];
|
|
69
|
+
};
|
|
70
|
+
for (const w of words) {
|
|
71
|
+
bucket.push(w);
|
|
72
|
+
if (/[.!?]$/.test(w.text) || bucket.length >= 25)
|
|
73
|
+
flush();
|
|
74
|
+
}
|
|
75
|
+
flush();
|
|
76
|
+
return lines.join("\n");
|
|
77
|
+
}
|
|
78
|
+
function buildMessages(request, transcript, feedback) {
|
|
79
|
+
const diarized = (0, editExisting_schema_1.editGoalUsesDiarization)(request.editGoal);
|
|
80
|
+
const targetLine = request.targetDurationSec
|
|
81
|
+
? `Aim for a total kept duration close to ${Math.round(request.targetDurationSec)}s (within ~15%). Do not pad with weak material to hit it; under-shooting is fine if there isn't enough strong content.`
|
|
82
|
+
: "There is no fixed target length — keep everything that is genuinely strong and cut the rest.";
|
|
83
|
+
const maxClipsLine = request.maxClips
|
|
84
|
+
? `Return at most ${request.maxClips} segments.`
|
|
85
|
+
: "Return as many segments as the content justifies (typically 3–15).";
|
|
86
|
+
const system = [
|
|
87
|
+
"You are an expert video editor. You are given a timestamped transcript of a",
|
|
88
|
+
"source video and must choose which spans to KEEP for a re-edit. Output only",
|
|
89
|
+
"spans that exist in the transcript, using millisecond start/end times taken",
|
|
90
|
+
"from the bracketed timestamps.",
|
|
91
|
+
"",
|
|
92
|
+
"Rules:",
|
|
93
|
+
"- startMs/endMs are milliseconds from the start of the video.",
|
|
94
|
+
"- Segments must NOT overlap and should be in chronological order.",
|
|
95
|
+
"- Cut on natural boundaries (sentence/thought starts and ends), never mid-word.",
|
|
96
|
+
`- Every segment must lie within [0, ${transcript.audioDurationMs}] ms.`,
|
|
97
|
+
diarized
|
|
98
|
+
? "- Speaker labels are provided; keep complete exchanges and don't cut between a question and its answer."
|
|
99
|
+
: "",
|
|
100
|
+
"- Give a concise `reason` for each kept segment.",
|
|
101
|
+
]
|
|
102
|
+
.filter(Boolean)
|
|
103
|
+
.join("\n");
|
|
104
|
+
const user = [
|
|
105
|
+
`EDIT GOAL: ${request.editGoal}`,
|
|
106
|
+
GOAL_GUIDANCE[request.editGoal],
|
|
107
|
+
"",
|
|
108
|
+
targetLine,
|
|
109
|
+
maxClipsLine,
|
|
110
|
+
request.instructions ? `\nADDITIONAL INSTRUCTIONS: ${request.instructions}` : "",
|
|
111
|
+
feedback ? `\nYOUR PREVIOUS ANSWER HAD PROBLEMS — FIX THESE:\n${feedback}` : "",
|
|
112
|
+
"",
|
|
113
|
+
`TRANSCRIPT (total ${fmtTs(transcript.audioDurationMs)}):`,
|
|
114
|
+
buildTranscriptLines(transcript),
|
|
115
|
+
]
|
|
116
|
+
.filter(Boolean)
|
|
117
|
+
.join("\n");
|
|
118
|
+
return [
|
|
119
|
+
{ role: "system", content: system },
|
|
120
|
+
{ role: "user", content: user },
|
|
121
|
+
];
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Validate + repair a raw LLM selection against the transcript bounds and the
|
|
125
|
+
* request constraints. Returns the cleaned segments and any human-readable
|
|
126
|
+
* problems (used as retry feedback). Clamping/ordering/overlap-removal happens
|
|
127
|
+
* in clampSegments; here we additionally enforce maxClips and surface when the
|
|
128
|
+
* model returned nothing usable.
|
|
129
|
+
*/
|
|
130
|
+
function validateSelection(raw, request, audioDurationMs) {
|
|
131
|
+
const problems = [];
|
|
132
|
+
const mapped = raw.segments.map((s) => ({
|
|
133
|
+
startMs: s.startMs,
|
|
134
|
+
endMs: s.endMs,
|
|
135
|
+
reason: (s.reason ?? "").slice(0, 500),
|
|
136
|
+
...(s.label ? { label: s.label.slice(0, 120) } : {}),
|
|
137
|
+
}));
|
|
138
|
+
const outOfBounds = mapped.filter((s) => s.startMs < 0 || s.endMs > audioDurationMs + 250 || s.endMs <= s.startMs);
|
|
139
|
+
if (outOfBounds.length > 0) {
|
|
140
|
+
problems.push(`${outOfBounds.length} segment(s) were out of bounds or had endMs ≤ startMs (video is ${audioDurationMs}ms). Keep every segment inside [0, ${audioDurationMs}] with endMs > startMs.`);
|
|
141
|
+
}
|
|
142
|
+
// clampSegments drops invalid spans, clamps to bounds, sorts, removes overlaps.
|
|
143
|
+
let cleaned = (0, editAssembler_1.clampSegments)(mapped, audioDurationMs);
|
|
144
|
+
if (request.maxClips && cleaned.length > request.maxClips) {
|
|
145
|
+
problems.push(`You returned ${cleaned.length} segments but the cap is ${request.maxClips}; keeping the first ${request.maxClips}.`);
|
|
146
|
+
cleaned = cleaned.slice(0, request.maxClips);
|
|
147
|
+
}
|
|
148
|
+
return { segments: cleaned, problems };
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Pick highlight segments from a transcript. Retries up to `maxRetries` times,
|
|
152
|
+
* feeding the model its previous problems. Throws only if every attempt yields
|
|
153
|
+
* zero usable segments.
|
|
154
|
+
*/
|
|
155
|
+
async function pickHighlightsCore(llm, args) {
|
|
156
|
+
const router = new modelRouter_1.ModelRouter();
|
|
157
|
+
const maxRetries = args.maxRetries ?? 2;
|
|
158
|
+
const { request, transcript } = args;
|
|
159
|
+
let feedback;
|
|
160
|
+
let lastProblems = [];
|
|
161
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
162
|
+
const res = await llm.structured({
|
|
163
|
+
model: router.pickFor("planner"),
|
|
164
|
+
fallbackModel: router.fallbackFor("planner"),
|
|
165
|
+
schema: LlmSelectionSchema,
|
|
166
|
+
schemaName: "HighlightSelection",
|
|
167
|
+
messages: buildMessages(request, transcript, feedback),
|
|
168
|
+
temperature: 0.3,
|
|
169
|
+
maxTokens: 8000,
|
|
170
|
+
});
|
|
171
|
+
const { segments, problems } = validateSelection(res.data, request, transcript.audioDurationMs);
|
|
172
|
+
lastProblems = problems;
|
|
173
|
+
if (segments.length > 0 && problems.length === 0) {
|
|
174
|
+
logger_1.logger.info("editExisting.picker: selection accepted", {
|
|
175
|
+
attempt,
|
|
176
|
+
segments: segments.length,
|
|
177
|
+
keptMs: (0, editAssembler_1.totalSegmentMs)(segments),
|
|
178
|
+
audioDurationMs: transcript.audioDurationMs,
|
|
179
|
+
});
|
|
180
|
+
return { segments, ...(res.data.summary ? { summary: res.data.summary } : {}) };
|
|
181
|
+
}
|
|
182
|
+
// Usable-but-imperfect (e.g. trimmed to maxClips) on the final attempt:
|
|
183
|
+
// accept rather than throw — a slightly-clamped cut beats failing the job.
|
|
184
|
+
if (segments.length > 0 && attempt === maxRetries) {
|
|
185
|
+
logger_1.logger.warn("editExisting.picker: accepting clamped selection on last attempt", {
|
|
186
|
+
segments: segments.length,
|
|
187
|
+
problems,
|
|
188
|
+
});
|
|
189
|
+
return { segments, ...(res.data.summary ? { summary: res.data.summary } : {}) };
|
|
190
|
+
}
|
|
191
|
+
feedback = problems.join("\n") || "Your previous answer returned no usable segments. Select at least one strong span with valid timestamps.";
|
|
192
|
+
logger_1.logger.warn("editExisting.picker: retrying", {
|
|
193
|
+
attempt,
|
|
194
|
+
problems,
|
|
195
|
+
durationMs: transcript.audioDurationMs,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
throw new Error(`editExisting.picker: no usable highlight segments after ${maxRetries + 1} attempts (${lastProblems.join("; ")})`);
|
|
199
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/editExisting/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./editExisting.schema"), exports);
|
|
18
|
+
__exportStar(require("./editAssembler"), exports);
|
|
19
|
+
__exportStar(require("./highlightPicker"), exports);
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { EvalBrief } from "./types";
|
|
2
2
|
/**
|
|
3
|
-
* Eval set — 50
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Eval set — 50 short-form briefs covering the 5 launch personas plus adjacent
|
|
4
|
+
* niches that should route to the closest persona (e.g. recipe → faceless-yt,
|
|
5
|
+
* real-estate → product-demo), then 10 long-form briefs (Stream L, L-7)
|
|
6
|
+
* exercising the M1/L1/L2 length-tier planner branches. 60 total.
|
|
6
7
|
*
|
|
7
8
|
* Use these to:
|
|
8
9
|
* 1. Catch routing regressions (router persona !== expected niche).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seedBriefs.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/eval/seedBriefs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC
|
|
1
|
+
{"version":3,"file":"seedBriefs.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/eval/seedBriefs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,EAu7CvC,CAAC"}
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SEED_EVAL_BRIEFS = void 0;
|
|
4
4
|
/**
|
|
5
|
-
* Eval set — 50
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Eval set — 50 short-form briefs covering the 5 launch personas plus adjacent
|
|
6
|
+
* niches that should route to the closest persona (e.g. recipe → faceless-yt,
|
|
7
|
+
* real-estate → product-demo), then 10 long-form briefs (Stream L, L-7)
|
|
8
|
+
* exercising the M1/L1/L2 length-tier planner branches. 60 total.
|
|
8
9
|
*
|
|
9
10
|
* Use these to:
|
|
10
11
|
* 1. Catch routing regressions (router persona !== expected niche).
|
|
@@ -1185,4 +1186,283 @@ exports.SEED_EVAL_BRIEFS = [
|
|
|
1185
1186
|
confidence: { goal: 0.9 },
|
|
1186
1187
|
},
|
|
1187
1188
|
},
|
|
1189
|
+
// ───────────────────── long-form (Stream L, L-7) ─────────────────────
|
|
1190
|
+
// 10 briefs that exercise the length-tier planner branches (L-2) and the
|
|
1191
|
+
// script-first authoring pipeline (L-3). All route to `faceless-yt` (the
|
|
1192
|
+
// long-form persona) so the router check stays clean and the signal here is
|
|
1193
|
+
// the PLANNER path, not routing — routing is already covered by the 50 above.
|
|
1194
|
+
//
|
|
1195
|
+
// Tier coverage: M1 (60s–3min, medium branch — single planner call,
|
|
1196
|
+
// chapters SHOULD) ×4, L1 (3–10min, script-first — chapters MUST, 3–8s scene
|
|
1197
|
+
// band, cheaper body tiers) ×4, L2 (10–60min, script-first + L-6 cost cap) ×2.
|
|
1198
|
+
//
|
|
1199
|
+
// L2 briefs deliberately sit at the 10-min floor and carry a `maxSpendUSD`
|
|
1200
|
+
// cap: a 10-min script explodes into ~100+ scenes, so each L2 run is the most
|
|
1201
|
+
// expensive in the set (script + outline + one match_broll per chapter, then
|
|
1202
|
+
// a critic/judge pass over a large Project). Don't push these durations up
|
|
1203
|
+
// without a reason.
|
|
1204
|
+
//
|
|
1205
|
+
// L3 (edit-existing) is intentionally absent: it is NOT planner-driven — it
|
|
1206
|
+
// needs the /v1/agent/edit-existing pipeline (L-5), which doesn't exist yet.
|
|
1207
|
+
// Per the file header rule ("add briefs alongside the change that needs
|
|
1208
|
+
// them"), L3 eval briefs land WITH L-5, not here — running them through
|
|
1209
|
+
// Planner.plan() today would produce a meaningless scene-first plan.
|
|
1210
|
+
// ── M1 (60s–3min explainers / how-tos) ──
|
|
1211
|
+
{
|
|
1212
|
+
id: "seed-longform-m1-history",
|
|
1213
|
+
niche: "faceless-yt",
|
|
1214
|
+
goodOutputNotes: [
|
|
1215
|
+
"M1 (~2min). Mixed pacing — a hooky 8s open, then steady explanatory beats.",
|
|
1216
|
+
"16:9, mostly T0 stock/stills + Ken-Burns; this is a faceless explainer, not a generation showcase.",
|
|
1217
|
+
"Chapters SHOULD be present and, if present, must partition every scene exactly (contiguous CH_<n> sceneIndices).",
|
|
1218
|
+
"Coherent single through-line across the whole runtime — no per-scene topic drift.",
|
|
1219
|
+
].join(" "),
|
|
1220
|
+
brief: {
|
|
1221
|
+
goal: "Explain how the printing press reshaped Europe in two minutes",
|
|
1222
|
+
audience: "Curious general audience",
|
|
1223
|
+
niche: "faceless-yt",
|
|
1224
|
+
tone: "informational",
|
|
1225
|
+
durationSec: 120,
|
|
1226
|
+
aspect: "16:9",
|
|
1227
|
+
lengthTier: "M1",
|
|
1228
|
+
hookStyle: "bold-claim",
|
|
1229
|
+
pacing: "medium",
|
|
1230
|
+
tierBudget: "T0",
|
|
1231
|
+
rawPrompt: "2-minute faceless explainer on how the printing press reshaped Europe",
|
|
1232
|
+
claims: { allow: [], block: [] },
|
|
1233
|
+
references: [],
|
|
1234
|
+
confidence: { goal: 0.9, audience: 0.8 },
|
|
1235
|
+
},
|
|
1236
|
+
},
|
|
1237
|
+
{
|
|
1238
|
+
id: "seed-longform-m1-howto",
|
|
1239
|
+
niche: "faceless-yt",
|
|
1240
|
+
goodOutputNotes: [
|
|
1241
|
+
"M1 (~90s) how-to. Sequenced steps; each step gets its own scene + on-screen label.",
|
|
1242
|
+
"16:9, T0/T1. Mixed pacing — slower on the technical steps, brisk transitions between.",
|
|
1243
|
+
"Chapters SHOULD map to the steps; if present they must cover all scenes with no gaps/overlaps.",
|
|
1244
|
+
].join(" "),
|
|
1245
|
+
brief: {
|
|
1246
|
+
goal: "Teach how to brew pour-over coffee in 90 seconds",
|
|
1247
|
+
audience: "Home coffee beginners",
|
|
1248
|
+
niche: "faceless-yt",
|
|
1249
|
+
tone: "casual",
|
|
1250
|
+
durationSec: 90,
|
|
1251
|
+
aspect: "16:9",
|
|
1252
|
+
lengthTier: "M1",
|
|
1253
|
+
hookStyle: "question",
|
|
1254
|
+
pacing: "medium",
|
|
1255
|
+
tierBudget: "T0",
|
|
1256
|
+
rawPrompt: "90-second faceless how-to on brewing pour-over coffee, step by step",
|
|
1257
|
+
claims: { allow: [], block: [] },
|
|
1258
|
+
references: [],
|
|
1259
|
+
confidence: { goal: 0.95 },
|
|
1260
|
+
},
|
|
1261
|
+
},
|
|
1262
|
+
{
|
|
1263
|
+
id: "seed-longform-m1-science",
|
|
1264
|
+
niche: "faceless-yt",
|
|
1265
|
+
goodOutputNotes: [
|
|
1266
|
+
"M1 (~2.5min) science explainer. Diagram-led stills, calm informative pace.",
|
|
1267
|
+
"16:9, mostly T0. Avoid declarative claims that aren't well-established; hedge appropriately.",
|
|
1268
|
+
"One coherent argument built across the runtime; chapters SHOULD reflect the sub-points.",
|
|
1269
|
+
].join(" "),
|
|
1270
|
+
brief: {
|
|
1271
|
+
goal: "Explain why we still don't have a cure for the common cold",
|
|
1272
|
+
audience: "Science-curious adults",
|
|
1273
|
+
niche: "faceless-yt",
|
|
1274
|
+
tone: "informational",
|
|
1275
|
+
durationSec: 150,
|
|
1276
|
+
aspect: "16:9",
|
|
1277
|
+
lengthTier: "M1",
|
|
1278
|
+
hookStyle: "question",
|
|
1279
|
+
pacing: "medium",
|
|
1280
|
+
tierBudget: "T0",
|
|
1281
|
+
rawPrompt: "2.5-minute faceless explainer on why there's no cure for the common cold",
|
|
1282
|
+
claims: { allow: [], block: ["cures", "guaranteed prevention"] },
|
|
1283
|
+
references: [],
|
|
1284
|
+
confidence: { goal: 0.9 },
|
|
1285
|
+
},
|
|
1286
|
+
},
|
|
1287
|
+
{
|
|
1288
|
+
id: "seed-longform-m1-tech",
|
|
1289
|
+
niche: "faceless-yt",
|
|
1290
|
+
goodOutputNotes: [
|
|
1291
|
+
"M1 (3min) tech explainer. Plain-English, diagram stills + Ken-Burns.",
|
|
1292
|
+
"16:9, T0/T1. No hype/anthropomorphic claims.",
|
|
1293
|
+
"Chapters SHOULD partition the scenes; a clear intro → mechanism → implications arc.",
|
|
1294
|
+
].join(" "),
|
|
1295
|
+
brief: {
|
|
1296
|
+
goal: "Explain how end-to-end encryption keeps messages private",
|
|
1297
|
+
audience: "Non-technical privacy-curious adults",
|
|
1298
|
+
niche: "faceless-yt",
|
|
1299
|
+
tone: "informational",
|
|
1300
|
+
durationSec: 180,
|
|
1301
|
+
aspect: "16:9",
|
|
1302
|
+
lengthTier: "M1",
|
|
1303
|
+
hookStyle: "question",
|
|
1304
|
+
pacing: "medium",
|
|
1305
|
+
tierBudget: "T1",
|
|
1306
|
+
rawPrompt: "3-minute faceless explainer on how end-to-end encryption works",
|
|
1307
|
+
claims: { allow: [], block: ["unhackable", "100% secure"] },
|
|
1308
|
+
references: [],
|
|
1309
|
+
confidence: { goal: 0.9 },
|
|
1310
|
+
},
|
|
1311
|
+
},
|
|
1312
|
+
// ── L1 (3–10min YouTube essays, script-first) ──
|
|
1313
|
+
{
|
|
1314
|
+
id: "seed-longform-l1-essay-finance",
|
|
1315
|
+
niche: "faceless-yt",
|
|
1316
|
+
goodOutputNotes: [
|
|
1317
|
+
"L1 (~4min) video essay. MUST have a coherent full-script through-line — the narration reads as one continuous argument, not stitched fragments.",
|
|
1318
|
+
"Chapters are REQUIRED and must partition every scene exactly (contiguous CH_<n> sceneIndices, ascending, no gaps/overlaps).",
|
|
1319
|
+
"Per-scene B-roll in the 3–8s band; voiceoverLines are verbatim slices of the script.",
|
|
1320
|
+
"16:9. Cost discipline: only the intro/hero scene at the budget tier, body scenes at the cheaper default — not every scene at T1+.",
|
|
1321
|
+
].join(" "),
|
|
1322
|
+
brief: {
|
|
1323
|
+
goal: "Make the case that compounding is the most underrated force in personal finance",
|
|
1324
|
+
audience: "Beginner-to-intermediate retail investors",
|
|
1325
|
+
niche: "faceless-yt",
|
|
1326
|
+
tone: "informational",
|
|
1327
|
+
durationSec: 240,
|
|
1328
|
+
aspect: "16:9",
|
|
1329
|
+
lengthTier: "L1",
|
|
1330
|
+
hookStyle: "bold-claim",
|
|
1331
|
+
pacing: "medium",
|
|
1332
|
+
tierBudget: "T1",
|
|
1333
|
+
rawPrompt: "4-minute faceless YouTube video essay arguing compounding is the most underrated force in personal finance",
|
|
1334
|
+
claims: { allow: [], block: ["guaranteed returns", "financial advice"] },
|
|
1335
|
+
references: [],
|
|
1336
|
+
confidence: { goal: 0.95, audience: 0.8 },
|
|
1337
|
+
},
|
|
1338
|
+
},
|
|
1339
|
+
{
|
|
1340
|
+
id: "seed-longform-l1-essay-history",
|
|
1341
|
+
niche: "faceless-yt",
|
|
1342
|
+
goodOutputNotes: [
|
|
1343
|
+
"L1 (~5min) historical essay. Single narrative arc with a setup → turning point → consequence structure carried by the script.",
|
|
1344
|
+
"Chapters REQUIRED, exact scene partition. 3–8s scenes, period-appropriate stills + map/Ken-Burns motion.",
|
|
1345
|
+
"16:9, cinematic-but-informative. Body scenes default to the cheaper tier; intro may use the budget tier.",
|
|
1346
|
+
].join(" "),
|
|
1347
|
+
brief: {
|
|
1348
|
+
goal: "Tell the full story of how the Library of Alexandria was lost",
|
|
1349
|
+
audience: "History enthusiasts, general public",
|
|
1350
|
+
niche: "faceless-yt",
|
|
1351
|
+
tone: "cinematic",
|
|
1352
|
+
durationSec: 300,
|
|
1353
|
+
aspect: "16:9",
|
|
1354
|
+
lengthTier: "L1",
|
|
1355
|
+
hookStyle: "story",
|
|
1356
|
+
pacing: "medium",
|
|
1357
|
+
tierBudget: "T1",
|
|
1358
|
+
rawPrompt: "5-minute faceless YouTube essay on how the Library of Alexandria was lost",
|
|
1359
|
+
claims: { allow: [], block: [] },
|
|
1360
|
+
references: [],
|
|
1361
|
+
confidence: { goal: 0.95 },
|
|
1362
|
+
},
|
|
1363
|
+
},
|
|
1364
|
+
{
|
|
1365
|
+
id: "seed-longform-l1-essay-tech",
|
|
1366
|
+
niche: "faceless-yt",
|
|
1367
|
+
goodOutputNotes: [
|
|
1368
|
+
"L1 (~7min) explainer essay. The script should build understanding progressively; later chapters reference earlier ideas.",
|
|
1369
|
+
"Chapters REQUIRED + exact partition. 3–8s diagram-led scenes. Captions burned in.",
|
|
1370
|
+
"16:9, T0/T1 only — a 7-min video at high tiers blows the budget; expect mostly cheap body scenes.",
|
|
1371
|
+
].join(" "),
|
|
1372
|
+
brief: {
|
|
1373
|
+
goal: "Explain how the internet actually routes a request from your phone to a server and back",
|
|
1374
|
+
audience: "Curious non-engineers",
|
|
1375
|
+
niche: "faceless-yt",
|
|
1376
|
+
tone: "informational",
|
|
1377
|
+
durationSec: 420,
|
|
1378
|
+
aspect: "16:9",
|
|
1379
|
+
lengthTier: "L1",
|
|
1380
|
+
hookStyle: "question",
|
|
1381
|
+
pacing: "medium",
|
|
1382
|
+
tierBudget: "T1",
|
|
1383
|
+
maxSpendUSD: 4,
|
|
1384
|
+
rawPrompt: "7-minute faceless YouTube explainer essay on how the internet routes a request end to end",
|
|
1385
|
+
claims: { allow: [], block: [] },
|
|
1386
|
+
references: [],
|
|
1387
|
+
confidence: { goal: 0.9 },
|
|
1388
|
+
},
|
|
1389
|
+
},
|
|
1390
|
+
{
|
|
1391
|
+
id: "seed-longform-l1-essay-science",
|
|
1392
|
+
niche: "faceless-yt",
|
|
1393
|
+
goodOutputNotes: [
|
|
1394
|
+
"L1 (~8min) science essay near the L1 ceiling. Coherent argument; chapters REQUIRED and partition all scenes.",
|
|
1395
|
+
"3–8s scenes, diagram/stock-led. 16:9. With a tight maxSpendUSD the planner must lean on cheap tiers (mostly T0) and may downgrade — the plan must still respect the cap.",
|
|
1396
|
+
].join(" "),
|
|
1397
|
+
brief: {
|
|
1398
|
+
goal: "Explain why time appears to slow down near a black hole",
|
|
1399
|
+
audience: "Science-curious teens and adults",
|
|
1400
|
+
niche: "faceless-yt",
|
|
1401
|
+
tone: "cinematic",
|
|
1402
|
+
durationSec: 480,
|
|
1403
|
+
aspect: "16:9",
|
|
1404
|
+
lengthTier: "L1",
|
|
1405
|
+
hookStyle: "bold-claim",
|
|
1406
|
+
pacing: "medium",
|
|
1407
|
+
tierBudget: "T1",
|
|
1408
|
+
maxSpendUSD: 3,
|
|
1409
|
+
rawPrompt: "8-minute faceless YouTube science essay on why time slows down near a black hole",
|
|
1410
|
+
claims: { allow: [], block: [] },
|
|
1411
|
+
references: [],
|
|
1412
|
+
confidence: { goal: 0.9 },
|
|
1413
|
+
},
|
|
1414
|
+
},
|
|
1415
|
+
// ── L2 (10–60min full uploads, script-first + L-6 cost guardrails) ──
|
|
1416
|
+
// Held at the 10-min floor with a hard cap — these are the most expensive
|
|
1417
|
+
// briefs in the set (see section header).
|
|
1418
|
+
{
|
|
1419
|
+
id: "seed-longform-l2-deepdive-history",
|
|
1420
|
+
niche: "faceless-yt",
|
|
1421
|
+
goodOutputNotes: [
|
|
1422
|
+
"L2 (~10min) deep-dive at the L2 floor. Script-first: one long coherent narration, chapters REQUIRED and partitioning ~100+ scenes exactly.",
|
|
1423
|
+
"3–8s scenes. 16:9. L-6 cost guardrail is the key check: with maxSpendUSD set, the planner must keep the plan under the cap — overwhelmingly T0 body scenes, downgrading if needed; the final plan must NOT exceed the cap.",
|
|
1424
|
+
].join(" "),
|
|
1425
|
+
brief: {
|
|
1426
|
+
goal: "A 10-minute deep dive into how the Roman Empire actually fell",
|
|
1427
|
+
audience: "History documentary viewers",
|
|
1428
|
+
niche: "faceless-yt",
|
|
1429
|
+
tone: "cinematic",
|
|
1430
|
+
durationSec: 600,
|
|
1431
|
+
aspect: "16:9",
|
|
1432
|
+
lengthTier: "L2",
|
|
1433
|
+
hookStyle: "story",
|
|
1434
|
+
pacing: "medium",
|
|
1435
|
+
tierBudget: "T1",
|
|
1436
|
+
maxSpendUSD: 6,
|
|
1437
|
+
rawPrompt: "10-minute faceless YouTube deep dive on how the Roman Empire fell",
|
|
1438
|
+
claims: { allow: [], block: [] },
|
|
1439
|
+
references: [],
|
|
1440
|
+
confidence: { goal: 0.95 },
|
|
1441
|
+
},
|
|
1442
|
+
},
|
|
1443
|
+
{
|
|
1444
|
+
id: "seed-longform-l2-deepdive-tech",
|
|
1445
|
+
niche: "faceless-yt",
|
|
1446
|
+
goodOutputNotes: [
|
|
1447
|
+
"L2 (~10min) explainer deep-dive. Progressive script; chapters REQUIRED, exact partition of all scenes.",
|
|
1448
|
+
"3–8s diagram-led scenes, captions burned in. 16:9. Cost cap is the headline check — a tight maxSpendUSD should force a near-all-T0 plan; the plan must stay within budget (downgrade rather than overspend).",
|
|
1449
|
+
].join(" "),
|
|
1450
|
+
brief: {
|
|
1451
|
+
goal: "A 10-minute deep dive into how modern GPS pinpoints your location",
|
|
1452
|
+
audience: "Curious non-engineers",
|
|
1453
|
+
niche: "faceless-yt",
|
|
1454
|
+
tone: "informational",
|
|
1455
|
+
durationSec: 600,
|
|
1456
|
+
aspect: "16:9",
|
|
1457
|
+
lengthTier: "L2",
|
|
1458
|
+
hookStyle: "question",
|
|
1459
|
+
pacing: "medium",
|
|
1460
|
+
tierBudget: "T1",
|
|
1461
|
+
maxSpendUSD: 5,
|
|
1462
|
+
rawPrompt: "10-minute faceless YouTube deep dive on how GPS works",
|
|
1463
|
+
claims: { allow: [], block: [] },
|
|
1464
|
+
references: [],
|
|
1465
|
+
confidence: { goal: 0.9 },
|
|
1466
|
+
},
|
|
1467
|
+
},
|
|
1188
1468
|
];
|
|
@@ -75,6 +75,14 @@ export declare const EvalBriefSchema: z.ZodObject<{
|
|
|
75
75
|
"4:5": "4:5";
|
|
76
76
|
"16:9": "16:9";
|
|
77
77
|
}>>;
|
|
78
|
+
lengthTier: z.ZodOptional<z.ZodEnum<{
|
|
79
|
+
S1: "S1";
|
|
80
|
+
S2: "S2";
|
|
81
|
+
M1: "M1";
|
|
82
|
+
L1: "L1";
|
|
83
|
+
L2: "L2";
|
|
84
|
+
L3: "L3";
|
|
85
|
+
}>>;
|
|
78
86
|
voice: z.ZodOptional<z.ZodObject<{
|
|
79
87
|
gender: z.ZodOptional<z.ZodEnum<{
|
|
80
88
|
male: "male";
|
|
@@ -134,12 +142,14 @@ export declare const EvalBriefSchema: z.ZodObject<{
|
|
|
134
142
|
transcriptExcerpt: z.ZodOptional<z.ZodString>;
|
|
135
143
|
}, z.core.$strip>>;
|
|
136
144
|
}, z.core.$strip>>>;
|
|
145
|
+
preferredModelKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
137
146
|
tierBudget: z.ZodDefault<z.ZodEnum<{
|
|
138
147
|
T0: "T0";
|
|
139
148
|
T1: "T1";
|
|
140
149
|
T2: "T2";
|
|
141
150
|
T3: "T3";
|
|
142
151
|
}>>;
|
|
152
|
+
maxSpendUSD: z.ZodOptional<z.ZodNumber>;
|
|
143
153
|
videoStrategy: z.ZodOptional<z.ZodEnum<{
|
|
144
154
|
auto: "auto";
|
|
145
155
|
direct: "direct";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/eval/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;GAUG;AAEH,4CAA4C;AAC5C,eAAO,MAAM,gBAAgB;;;;;;;iBAQ3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/eval/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;GAUG;AAEH,4CAA4C;AAC5C,eAAO,MAAM,gBAAgB;;;;;;;iBAQ3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAM1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;iBAY9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAW9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;iBAQ1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { VideoPlan } from "../../../schemas/videoPlan.schema";
|
|
2
|
+
import { ToolContext } from "../toolRegistry";
|
|
3
|
+
import { ExecutorOptions, SceneOutcome } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* Executor — turns an approved VideoPlan into per-scene asset results.
|
|
6
|
+
*
|
|
7
|
+
* Plan-then-execute split (not free-form ReAct): the executor does NOT pick
|
|
8
|
+
* tools. The plan dictates which tool runs per scene; the executor only does
|
|
9
|
+
* the dispatch + per-scene parallelism + idempotency-key generation.
|
|
10
|
+
*
|
|
11
|
+
* Returns a SceneOutcome per scene, leaving composition (compose_scene),
|
|
12
|
+
* critique (Critic.review), and render to the orchestrator above. The
|
|
13
|
+
* per-scene VISUAL strategy switch lives in ./visual (runVisual); the voice
|
|
14
|
+
* resolution helpers in ./voice; the public types in ./types.
|
|
15
|
+
*/
|
|
16
|
+
export declare class Executor {
|
|
17
|
+
private readonly concurrency;
|
|
18
|
+
private readonly runTool;
|
|
19
|
+
private readonly onSceneComplete?;
|
|
20
|
+
private readonly taskCache?;
|
|
21
|
+
private readonly onTaskMint?;
|
|
22
|
+
private readonly frozenVisualScenes?;
|
|
23
|
+
private readonly frozenVoiceoverScenes?;
|
|
24
|
+
/**
|
|
25
|
+
* AG-11b: per-run registry of each scene's generated identity still image,
|
|
26
|
+
* keyed by sceneIndex. One deferred per scene, created in run() before the
|
|
27
|
+
* worker pool starts. A scene that produces an identity image (image-* and
|
|
28
|
+
* the i2v first frame) resolves its own entry as soon as the image lands; a
|
|
29
|
+
* dependent scene (scene.characterAnchorSceneIndex set) awaits its anchor's
|
|
30
|
+
* entry and threads the URL in as an inputImage for image-to-image identity
|
|
31
|
+
* transfer. Every entry is settled (→ undefined if no image) when the scene
|
|
32
|
+
* completes, so a dependent never hangs on a stock/t2v/avatar/failed anchor.
|
|
33
|
+
*
|
|
34
|
+
* Deadlock-free: anchors point to EARLIER scenes (first appearance) and the
|
|
35
|
+
* queue is pulled in sceneIndex order, so a dependent's anchor is always
|
|
36
|
+
* already in-flight or done by the time the dependent is picked up.
|
|
37
|
+
*/
|
|
38
|
+
private identityImages?;
|
|
39
|
+
constructor(opts?: ExecutorOptions);
|
|
40
|
+
/**
|
|
41
|
+
* AG-11b: publish a scene's generated identity image so dependent scenes can
|
|
42
|
+
* anchor off it. Idempotent — first call wins (the still image is produced
|
|
43
|
+
* once per scene). No-op when the registry isn't initialised (e.g. runVisual
|
|
44
|
+
* driven outside run(), such as single-scene regen).
|
|
45
|
+
*/
|
|
46
|
+
private publishIdentityImage;
|
|
47
|
+
/**
|
|
48
|
+
* AG-11b: resolve the generated identity image of this scene's character
|
|
49
|
+
* anchor, or undefined when there's no anchor / no registry / the anchor
|
|
50
|
+
* produced no usable still (stock, pure t2v, avatar, or a failed scene).
|
|
51
|
+
* Self-references are ignored.
|
|
52
|
+
*/
|
|
53
|
+
private resolveAnchorIdentityImage;
|
|
54
|
+
/**
|
|
55
|
+
* Stage 7 slice 1 helper. Returns cached pending-task output if the
|
|
56
|
+
* upstream input hash matches and entry is within TTL; null otherwise.
|
|
57
|
+
* Logs the hit so trace shows where $$ was saved.
|
|
58
|
+
*/
|
|
59
|
+
private checkTaskCache;
|
|
60
|
+
/**
|
|
61
|
+
* Best-effort mint. Swallows callback errors — a Firestore blip must not
|
|
62
|
+
* fail the scene (the tool already succeeded and produced a real taskId).
|
|
63
|
+
*/
|
|
64
|
+
private mintTaskCache;
|
|
65
|
+
/** Bundle the bound helpers runVisual needs (see VisualDeps). */
|
|
66
|
+
private visualDeps;
|
|
67
|
+
run(plan: VideoPlan, ctx: ToolContext): Promise<SceneOutcome[]>;
|
|
68
|
+
private runScene;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/services/agent/executor/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE5E,OAAO,EAA6B,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAczE,OAAO,EAAE,eAAe,EAAa,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnE;;;;;;;;;;;GAWG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAqC;IACtE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAgC;IAC5D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAsB;IAE7D;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,cAAc,CAAC,CAGrB;gBAEU,IAAI,GAAE,eAAoB;IAUtC;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;;;OAKG;YACW,0BAA0B;IAiBxC;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;OAGG;YACW,aAAa;IAe3B,iEAAiE;IACjE,OAAO,CAAC,UAAU;IAcZ,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAiDvD,QAAQ;CA+GvB"}
|