vidspotai-shared 1.0.67 → 1.0.69-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/globals/aiModels/enums.d.ts +63 -6
- package/lib/globals/aiModels/enums.d.ts.map +1 -1
- package/lib/globals/aiModels/enums.js +78 -9
- package/lib/globals/aiModels/index.d.ts +2 -0
- package/lib/globals/aiModels/index.d.ts.map +1 -1
- package/lib/globals/aiModels/index.js +6 -0
- package/lib/globals/aiModels/providers/alibaba.d.ts +4 -0
- package/lib/globals/aiModels/providers/alibaba.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/alibaba.js +194 -0
- package/lib/globals/aiModels/providers/bytedance.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/bytedance.js +19 -0
- package/lib/globals/aiModels/providers/elevenlabs.d.ts +14 -0
- package/lib/globals/aiModels/providers/elevenlabs.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/elevenlabs.js +29 -0
- package/lib/globals/aiModels/providers/google.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/google.js +150 -2
- package/lib/globals/aiModels/providers/kling.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/kling.js +280 -37
- package/lib/globals/aiModels/providers/minimax.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/minimax.js +73 -2
- package/lib/globals/aiModels/providers/openai.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/openai.js +90 -6
- package/lib/globals/aiModels/providers/pixverse.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/pixverse.js +111 -29
- package/lib/globals/aiModels/providers/pixverseTemplates.d.ts +36 -0
- package/lib/globals/aiModels/providers/pixverseTemplates.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/pixverseTemplates.js +42 -0
- package/lib/globals/aiModels/providers/runway.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/runway.js +64 -2
- package/lib/globals/aiModels/tierHelpers.d.ts +33 -0
- package/lib/globals/aiModels/tierHelpers.d.ts.map +1 -0
- package/lib/globals/aiModels/tierHelpers.js +109 -0
- package/lib/globals/aiModels/types.d.ts +20 -1
- package/lib/globals/aiModels/types.d.ts.map +1 -1
- package/lib/globals/ttsModels/index.d.ts +2 -0
- package/lib/globals/ttsModels/index.d.ts.map +1 -1
- package/lib/globals/ttsModels/index.js +9 -1
- package/lib/globals/ttsModels/providers/minimax.d.ts +8 -0
- package/lib/globals/ttsModels/providers/minimax.d.ts.map +1 -0
- package/lib/globals/ttsModels/providers/minimax.js +18 -0
- package/lib/globals/ttsModels/providers/openai.d.ts +12 -0
- package/lib/globals/ttsModels/providers/openai.d.ts.map +1 -0
- package/lib/globals/ttsModels/providers/openai.js +22 -0
- package/lib/globals/ttsModels/types.d.ts +1 -1
- package/lib/globals/ttsModels/types.d.ts.map +1 -1
- package/lib/globals/ttsModels/voices.d.ts +39 -4
- package/lib/globals/ttsModels/voices.d.ts.map +1 -1
- package/lib/globals/ttsModels/voices.js +273 -26
- package/lib/globals/types.d.ts +59 -1
- package/lib/globals/types.d.ts.map +1 -1
- package/lib/globals/types.js +81 -2
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/models/agent.model.d.ts +357 -0
- package/lib/models/agent.model.d.ts.map +1 -0
- package/lib/models/agent.model.js +21 -0
- package/lib/models/cachedAsset.model.d.ts +18 -0
- package/lib/models/cachedAsset.model.d.ts.map +1 -0
- package/lib/models/cachedAsset.model.js +2 -0
- package/lib/models/cachedRawAsset.model.d.ts +20 -0
- package/lib/models/cachedRawAsset.model.d.ts.map +1 -0
- package/lib/models/cachedRawAsset.model.js +2 -0
- package/lib/models/image.model.d.ts +47 -0
- package/lib/models/image.model.d.ts.map +1 -0
- package/lib/models/image.model.js +2 -0
- package/lib/models/index.d.ts +6 -0
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/index.js +6 -0
- package/lib/models/notification.model.d.ts +25 -0
- package/lib/models/notification.model.d.ts.map +1 -0
- package/lib/models/notification.model.js +2 -0
- package/lib/models/ref.model.d.ts +80 -0
- package/lib/models/ref.model.d.ts.map +1 -0
- package/lib/models/ref.model.js +13 -0
- package/lib/models/share.model.d.ts +29 -0
- package/lib/models/share.model.d.ts.map +1 -0
- package/lib/models/share.model.js +2 -0
- package/lib/models/user.model.d.ts +12 -1
- package/lib/models/user.model.d.ts.map +1 -1
- package/lib/models/video.model.d.ts +120 -0
- package/lib/models/video.model.d.ts.map +1 -1
- package/lib/models/video.model.js +10 -0
- package/lib/schemas/agentPersona.schema.d.ts +10 -0
- package/lib/schemas/agentPersona.schema.d.ts.map +1 -0
- package/lib/schemas/agentPersona.schema.js +11 -0
- package/lib/schemas/agentRunJob.schema.d.ts +105 -0
- package/lib/schemas/agentRunJob.schema.d.ts.map +1 -0
- package/lib/schemas/agentRunJob.schema.js +88 -0
- package/lib/schemas/brandKit.schema.d.ts +113 -0
- package/lib/schemas/brandKit.schema.d.ts.map +1 -0
- package/lib/schemas/brandKit.schema.js +46 -0
- package/lib/schemas/brief.schema.d.ts +263 -0
- package/lib/schemas/brief.schema.d.ts.map +1 -0
- package/lib/schemas/brief.schema.js +157 -0
- package/lib/schemas/index.d.ts +7 -0
- package/lib/schemas/index.d.ts.map +1 -0
- package/lib/schemas/index.js +22 -0
- package/lib/schemas/project.schema.d.ts +1025 -0
- package/lib/schemas/project.schema.d.ts.map +1 -0
- package/lib/schemas/project.schema.js +256 -0
- package/lib/schemas/videoPlan.schema.d.ts +590 -0
- package/lib/schemas/videoPlan.schema.d.ts.map +1 -0
- package/lib/schemas/videoPlan.schema.js +412 -0
- package/lib/services/agent/beatSnap.d.ts +10 -0
- package/lib/services/agent/beatSnap.d.ts.map +1 -0
- package/lib/services/agent/beatSnap.js +128 -0
- package/lib/services/agent/bibleBuilder.d.ts +43 -0
- package/lib/services/agent/bibleBuilder.d.ts.map +1 -0
- package/lib/services/agent/bibleBuilder.js +102 -0
- package/lib/services/agent/bibleImageVision.d.ts +45 -0
- package/lib/services/agent/bibleImageVision.d.ts.map +1 -0
- package/lib/services/agent/bibleImageVision.js +169 -0
- package/lib/services/agent/chatAgent.d.ts +79 -0
- package/lib/services/agent/chatAgent.d.ts.map +1 -0
- package/lib/services/agent/chatAgent.js +136 -0
- package/lib/services/agent/costPreflight.d.ts +61 -0
- package/lib/services/agent/costPreflight.d.ts.map +1 -0
- package/lib/services/agent/costPreflight.js +143 -0
- package/lib/services/agent/critic.d.ts +103 -0
- package/lib/services/agent/critic.d.ts.map +1 -0
- package/lib/services/agent/critic.js +139 -0
- package/lib/services/agent/editClassifier.d.ts +262 -0
- package/lib/services/agent/editClassifier.d.ts.map +1 -0
- package/lib/services/agent/editClassifier.js +186 -0
- package/lib/services/agent/eval/index.d.ts +5 -0
- package/lib/services/agent/eval/index.d.ts.map +1 -0
- package/lib/services/agent/eval/index.js +20 -0
- package/lib/services/agent/eval/judge.d.ts +14 -0
- package/lib/services/agent/eval/judge.d.ts.map +1 -0
- package/lib/services/agent/eval/judge.js +96 -0
- package/lib/services/agent/eval/recorder.d.ts +28 -0
- package/lib/services/agent/eval/recorder.d.ts.map +1 -0
- package/lib/services/agent/eval/recorder.js +100 -0
- package/lib/services/agent/eval/seedBriefs.d.ts +16 -0
- package/lib/services/agent/eval/seedBriefs.d.ts.map +1 -0
- package/lib/services/agent/eval/seedBriefs.js +1188 -0
- package/lib/services/agent/eval/types.d.ts +230 -0
- package/lib/services/agent/eval/types.d.ts.map +1 -0
- package/lib/services/agent/eval/types.js +73 -0
- package/lib/services/agent/executor.d.ts +141 -0
- package/lib/services/agent/executor.d.ts.map +1 -0
- package/lib/services/agent/executor.js +561 -0
- package/lib/services/agent/globalActions.d.ts +49 -0
- package/lib/services/agent/globalActions.d.ts.map +1 -0
- package/lib/services/agent/globalActions.js +328 -0
- package/lib/services/agent/index.d.ts +38 -0
- package/lib/services/agent/index.d.ts.map +1 -0
- package/lib/services/agent/index.js +53 -0
- package/lib/services/agent/llmCaller.d.ts +144 -0
- package/lib/services/agent/llmCaller.d.ts.map +1 -0
- package/lib/services/agent/llmCaller.js +16 -0
- package/lib/services/agent/llmCallerAnthropic.d.ts +90 -0
- package/lib/services/agent/llmCallerAnthropic.d.ts.map +1 -0
- package/lib/services/agent/llmCallerAnthropic.js +255 -0
- package/lib/services/agent/llmCallerGateway.d.ts +61 -0
- package/lib/services/agent/llmCallerGateway.d.ts.map +1 -0
- package/lib/services/agent/llmCallerGateway.js +360 -0
- package/lib/services/agent/llmCallerRegistry.d.ts +6 -0
- package/lib/services/agent/llmCallerRegistry.d.ts.map +1 -0
- package/lib/services/agent/llmCallerRegistry.js +39 -0
- package/lib/services/agent/modelQualityNotes.d.ts +100 -0
- package/lib/services/agent/modelQualityNotes.d.ts.map +1 -0
- package/lib/services/agent/modelQualityNotes.js +248 -0
- package/lib/services/agent/modelRouter.d.ts +41 -0
- package/lib/services/agent/modelRouter.d.ts.map +1 -0
- package/lib/services/agent/modelRouter.js +65 -0
- package/lib/services/agent/musicSelect.d.ts +23 -0
- package/lib/services/agent/musicSelect.d.ts.map +1 -0
- package/lib/services/agent/musicSelect.js +109 -0
- package/lib/services/agent/overlayRenderer.d.ts +67 -0
- package/lib/services/agent/overlayRenderer.d.ts.map +1 -0
- package/lib/services/agent/overlayRenderer.js +253 -0
- package/lib/services/agent/perSceneCritic.d.ts +90 -0
- package/lib/services/agent/perSceneCritic.d.ts.map +1 -0
- package/lib/services/agent/perSceneCritic.js +125 -0
- package/lib/services/agent/personas.d.ts +78 -0
- package/lib/services/agent/personas.d.ts.map +1 -0
- package/lib/services/agent/personas.js +177 -0
- package/lib/services/agent/planDiff.d.ts +76 -0
- package/lib/services/agent/planDiff.d.ts.map +1 -0
- package/lib/services/agent/planDiff.js +182 -0
- package/lib/services/agent/planMutations.d.ts +46 -0
- package/lib/services/agent/planMutations.d.ts.map +1 -0
- package/lib/services/agent/planMutations.js +120 -0
- package/lib/services/agent/planner/Planner.d.ts +107 -0
- package/lib/services/agent/planner/Planner.d.ts.map +1 -0
- package/lib/services/agent/planner/Planner.js +591 -0
- package/lib/services/agent/planner/overlaySanity.d.ts +7 -0
- package/lib/services/agent/planner/overlaySanity.d.ts.map +1 -0
- package/lib/services/agent/planner/overlaySanity.js +86 -0
- package/lib/services/agent/planner/promptSections.d.ts +25 -0
- package/lib/services/agent/planner/promptSections.d.ts.map +1 -0
- package/lib/services/agent/planner/promptSections.js +174 -0
- package/lib/services/agent/planner/repair.d.ts +16 -0
- package/lib/services/agent/planner/repair.d.ts.map +1 -0
- package/lib/services/agent/planner/repair.js +51 -0
- package/lib/services/agent/planner/structuralRules.d.ts +10 -0
- package/lib/services/agent/planner/structuralRules.d.ts.map +1 -0
- package/lib/services/agent/planner/structuralRules.js +111 -0
- package/lib/services/agent/planner/validators.d.ts +65 -0
- package/lib/services/agent/planner/validators.d.ts.map +1 -0
- package/lib/services/agent/planner/validators.js +284 -0
- package/lib/services/agent/planner.d.ts +3 -0
- package/lib/services/agent/planner.d.ts.map +1 -0
- package/lib/services/agent/planner.js +14 -0
- package/lib/services/agent/providerFallback/chains.d.ts +100 -0
- package/lib/services/agent/providerFallback/chains.d.ts.map +1 -0
- package/lib/services/agent/providerFallback/chains.js +198 -0
- package/lib/services/agent/providerFallback/classifier.d.ts +36 -0
- package/lib/services/agent/providerFallback/classifier.d.ts.map +1 -0
- package/lib/services/agent/providerFallback/classifier.js +103 -0
- package/lib/services/agent/providerFallback/index.d.ts +4 -0
- package/lib/services/agent/providerFallback/index.d.ts.map +1 -0
- package/lib/services/agent/providerFallback/index.js +19 -0
- package/lib/services/agent/providerFallback/withFallback.d.ts +60 -0
- package/lib/services/agent/providerFallback/withFallback.d.ts.map +1 -0
- package/lib/services/agent/providerFallback/withFallback.js +93 -0
- package/lib/services/agent/providerTaskCache.d.ts +50 -0
- package/lib/services/agent/providerTaskCache.d.ts.map +1 -0
- package/lib/services/agent/providerTaskCache.js +98 -0
- package/lib/services/agent/qualityGate.d.ts +82 -0
- package/lib/services/agent/qualityGate.d.ts.map +1 -0
- package/lib/services/agent/qualityGate.js +232 -0
- package/lib/services/agent/referenceImageRenderer.d.ts +37 -0
- package/lib/services/agent/referenceImageRenderer.d.ts.map +1 -0
- package/lib/services/agent/referenceImageRenderer.js +92 -0
- package/lib/services/agent/regenCore.d.ts +60 -0
- package/lib/services/agent/regenCore.d.ts.map +1 -0
- package/lib/services/agent/regenCore.js +487 -0
- package/lib/services/agent/runHelpers.d.ts +44 -0
- package/lib/services/agent/runHelpers.d.ts.map +1 -0
- package/lib/services/agent/runHelpers.js +196 -0
- package/lib/services/agent/sceneLayoutVision.d.ts +90 -0
- package/lib/services/agent/sceneLayoutVision.d.ts.map +1 -0
- package/lib/services/agent/sceneLayoutVision.js +212 -0
- package/lib/services/agent/stitchedVideoCritic.d.ts +136 -0
- package/lib/services/agent/stitchedVideoCritic.d.ts.map +1 -0
- package/lib/services/agent/stitchedVideoCritic.gemini.d.ts +26 -0
- package/lib/services/agent/stitchedVideoCritic.gemini.d.ts.map +1 -0
- package/lib/services/agent/stitchedVideoCritic.gemini.js +198 -0
- package/lib/services/agent/stitchedVideoCritic.js +162 -0
- package/lib/services/agent/taskPoller.d.ts +65 -0
- package/lib/services/agent/taskPoller.d.ts.map +1 -0
- package/lib/services/agent/taskPoller.js +176 -0
- package/lib/services/agent/textOverlayStyles.d.ts +60 -0
- package/lib/services/agent/textOverlayStyles.d.ts.map +1 -0
- package/lib/services/agent/textOverlayStyles.js +174 -0
- package/lib/services/agent/toolRegistry.d.ts +73 -0
- package/lib/services/agent/toolRegistry.d.ts.map +1 -0
- package/lib/services/agent/toolRegistry.js +95 -0
- package/lib/services/agent/tools/analyzeReference.tool.d.ts +36 -0
- package/lib/services/agent/tools/analyzeReference.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/analyzeReference.tool.js +44 -0
- package/lib/services/agent/tools/animateImage.tool.d.ts +24 -0
- package/lib/services/agent/tools/animateImage.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/animateImage.tool.js +115 -0
- package/lib/services/agent/tools/animateImageWithMotionBrush.tool.d.ts +32 -0
- package/lib/services/agent/tools/animateImageWithMotionBrush.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/animateImageWithMotionBrush.tool.js +135 -0
- package/lib/services/agent/tools/composeScene.tool.d.ts +978 -0
- package/lib/services/agent/tools/composeScene.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/composeScene.tool.js +90 -0
- package/lib/services/agent/tools/estimateCost.tool.d.ts +352 -0
- package/lib/services/agent/tools/estimateCost.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/estimateCost.tool.js +62 -0
- package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts +32 -0
- package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/generateAvatarVideo.tool.js +143 -0
- package/lib/services/agent/tools/generateCaptions.tool.d.ts +42 -0
- package/lib/services/agent/tools/generateCaptions.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/generateCaptions.tool.js +196 -0
- package/lib/services/agent/tools/generateImage.tool.d.ts +74 -0
- package/lib/services/agent/tools/generateImage.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/generateImage.tool.js +206 -0
- package/lib/services/agent/tools/generateVideo.tool.d.ts +31 -0
- package/lib/services/agent/tools/generateVideo.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/generateVideo.tool.js +153 -0
- package/lib/services/agent/tools/generateVoiceover.tool.d.ts +44 -0
- package/lib/services/agent/tools/generateVoiceover.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/generateVoiceover.tool.js +206 -0
- package/lib/services/agent/tools/index.d.ts +20 -0
- package/lib/services/agent/tools/index.d.ts.map +1 -0
- package/lib/services/agent/tools/index.js +35 -0
- package/lib/services/agent/tools/planVideo.tool.d.ts +343 -0
- package/lib/services/agent/tools/planVideo.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/planVideo.tool.js +46 -0
- package/lib/services/agent/tools/render.tool.d.ts +367 -0
- package/lib/services/agent/tools/render.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/render.tool.js +48 -0
- package/lib/services/agent/tools/searchMusic.tool.d.ts +49 -0
- package/lib/services/agent/tools/searchMusic.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/searchMusic.tool.js +74 -0
- package/lib/services/agent/tools/searchStock.tool.d.ts +41 -0
- package/lib/services/agent/tools/searchStock.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/searchStock.tool.js +314 -0
- package/lib/services/agent/tools/searchUserLibrary.tool.d.ts +59 -0
- package/lib/services/agent/tools/searchUserLibrary.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/searchUserLibrary.tool.js +58 -0
- package/lib/services/agent/ttsDuration.d.ts +29 -0
- package/lib/services/agent/ttsDuration.d.ts.map +1 -0
- package/lib/services/agent/ttsDuration.js +60 -0
- package/lib/services/aiGen/aiGenFactory.service.d.ts +21 -1
- package/lib/services/aiGen/aiGenFactory.service.d.ts.map +1 -1
- package/lib/services/aiGen/aiGenFactory.service.js +84 -21
- package/lib/services/aiGen/canonicalAdapters/cameraControl.types.d.ts +31 -0
- package/lib/services/aiGen/canonicalAdapters/cameraControl.types.d.ts.map +1 -0
- package/lib/services/aiGen/canonicalAdapters/cameraControl.types.js +2 -0
- package/lib/services/aiGen/canonicalAdapters/index.d.ts +3 -0
- package/lib/services/aiGen/canonicalAdapters/index.d.ts.map +1 -0
- package/lib/services/aiGen/canonicalAdapters/index.js +18 -0
- package/lib/services/aiGen/canonicalAdapters/multiShot.types.d.ts +23 -0
- package/lib/services/aiGen/canonicalAdapters/multiShot.types.d.ts.map +1 -0
- package/lib/services/aiGen/canonicalAdapters/multiShot.types.js +12 -0
- package/lib/services/aiGen/helpers.d.ts.map +1 -1
- package/lib/services/aiGen/helpers.js +10 -0
- package/lib/services/aiGen/providers/alibaba/alibaba.d.ts +14 -3
- package/lib/services/aiGen/providers/alibaba/alibaba.d.ts.map +1 -1
- package/lib/services/aiGen/providers/alibaba/alibaba.js +155 -22
- package/lib/services/aiGen/providers/baseAiGenProvider.service.d.ts +22 -4
- package/lib/services/aiGen/providers/baseAiGenProvider.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/baseAiGenProvider.service.js +32 -0
- package/lib/services/aiGen/providers/bytedance/bytedance.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/bytedance/bytedance.service.js +13 -13
- package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.d.ts +18 -0
- package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.js +102 -0
- package/lib/services/aiGen/providers/fal/falImage.service.d.ts +15 -0
- package/lib/services/aiGen/providers/fal/falImage.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/fal/falImage.service.js +141 -0
- package/lib/services/aiGen/providers/fal/index.d.ts +2 -0
- package/lib/services/aiGen/providers/fal/index.d.ts.map +1 -0
- package/lib/services/aiGen/providers/fal/index.js +17 -0
- package/lib/services/aiGen/providers/google/google.service.d.ts +11 -2
- package/lib/services/aiGen/providers/google/google.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/google/google.service.js +245 -28
- package/lib/services/aiGen/providers/index.d.ts +3 -0
- package/lib/services/aiGen/providers/index.d.ts.map +1 -1
- package/lib/services/aiGen/providers/index.js +3 -0
- package/lib/services/aiGen/providers/kling/cameraAdapter.d.ts +4 -0
- package/lib/services/aiGen/providers/kling/cameraAdapter.d.ts.map +1 -0
- package/lib/services/aiGen/providers/kling/cameraAdapter.js +53 -0
- package/lib/services/aiGen/providers/kling/index.d.ts +1 -0
- package/lib/services/aiGen/providers/kling/index.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/index.js +1 -0
- package/lib/services/aiGen/providers/kling/kling.service.d.ts +12 -1
- package/lib/services/aiGen/providers/kling/kling.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/kling.service.js +357 -26
- package/lib/services/aiGen/providers/kling/klingImage.service.d.ts +21 -0
- package/lib/services/aiGen/providers/kling/klingImage.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/kling/klingImage.service.js +208 -0
- package/lib/services/aiGen/providers/kling/types.d.ts +105 -0
- package/lib/services/aiGen/providers/kling/types.d.ts.map +1 -1
- package/lib/services/aiGen/providers/minimax/minimax.service.d.ts +15 -2
- package/lib/services/aiGen/providers/minimax/minimax.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/minimax/minimax.service.js +127 -1
- package/lib/services/aiGen/providers/minimax/types.d.ts +10 -1
- package/lib/services/aiGen/providers/minimax/types.d.ts.map +1 -1
- package/lib/services/aiGen/providers/openai/openai.service.d.ts +8 -2
- package/lib/services/aiGen/providers/openai/openai.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/openai/openai.service.js +184 -7
- package/lib/services/aiGen/providers/pexels/index.d.ts +2 -0
- package/lib/services/aiGen/providers/pexels/index.d.ts.map +1 -0
- package/lib/services/aiGen/providers/{azure → pexels}/index.js +1 -1
- package/lib/services/aiGen/providers/pexels/pexels.service.d.ts +11 -0
- package/lib/services/aiGen/providers/pexels/pexels.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/pexels/pexels.service.js +150 -0
- package/lib/services/aiGen/providers/pixabay/index.d.ts +2 -0
- package/lib/services/aiGen/providers/pixabay/index.d.ts.map +1 -0
- package/lib/services/aiGen/providers/pixabay/index.js +17 -0
- package/lib/services/aiGen/providers/pixabay/pixabay.service.d.ts +12 -0
- package/lib/services/aiGen/providers/pixabay/pixabay.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/pixabay/pixabay.service.js +156 -0
- package/lib/services/aiGen/providers/pixverse/pixverse.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/pixverse/pixverse.service.js +125 -2
- package/lib/services/aiGen/providers/runway/cameraAdapter.d.ts +3 -0
- package/lib/services/aiGen/providers/runway/cameraAdapter.d.ts.map +1 -0
- package/lib/services/aiGen/providers/runway/cameraAdapter.js +46 -0
- package/lib/services/aiGen/providers/runway/runway.service.d.ts +12 -2
- package/lib/services/aiGen/providers/runway/runway.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/runway/runway.service.js +224 -21
- package/lib/services/aiGen/providers/types.d.ts +263 -6
- package/lib/services/aiGen/providers/types.d.ts.map +1 -1
- package/lib/services/aiGen/providers/unsplash/index.d.ts +2 -0
- package/lib/services/aiGen/providers/unsplash/index.d.ts.map +1 -0
- package/lib/services/aiGen/providers/unsplash/index.js +17 -0
- package/lib/services/aiGen/providers/unsplash/unsplash.service.d.ts +16 -0
- package/lib/services/aiGen/providers/unsplash/unsplash.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/unsplash/unsplash.service.js +131 -0
- package/lib/services/analytics.service.js +2 -4
- package/lib/services/apiUsageCounter.service.d.ts +20 -0
- package/lib/services/apiUsageCounter.service.d.ts.map +1 -0
- package/lib/services/apiUsageCounter.service.js +84 -0
- package/lib/services/asr/assemblyai.service.d.ts +72 -0
- package/lib/services/asr/assemblyai.service.d.ts.map +1 -0
- package/lib/services/asr/assemblyai.service.js +89 -0
- package/lib/services/asr/index.d.ts +3 -0
- package/lib/services/asr/index.d.ts.map +1 -0
- package/lib/services/asr/index.js +18 -0
- package/lib/services/asr/whisper.service.d.ts +18 -0
- package/lib/services/asr/whisper.service.d.ts.map +1 -0
- package/lib/services/asr/whisper.service.js +151 -0
- package/lib/services/assetCache.service.d.ts +54 -0
- package/lib/services/assetCache.service.d.ts.map +1 -0
- package/lib/services/assetCache.service.js +109 -0
- package/lib/services/audioAnalysis/index.d.ts +2 -0
- package/lib/services/audioAnalysis/index.d.ts.map +1 -0
- package/lib/services/audioAnalysis/index.js +17 -0
- package/lib/services/audioAnalysis/onsetDetection.service.d.ts +50 -0
- package/lib/services/audioAnalysis/onsetDetection.service.d.ts.map +1 -0
- package/lib/services/audioAnalysis/onsetDetection.service.js +140 -0
- package/lib/services/bullmq.service.d.ts +6 -1
- package/lib/services/bullmq.service.d.ts.map +1 -1
- package/lib/services/bullmq.service.js +62 -14
- package/lib/services/credit.service.d.ts.map +1 -1
- package/lib/services/credit.service.js +45 -7
- package/lib/services/credits/pricing.d.ts +58 -0
- package/lib/services/credits/pricing.d.ts.map +1 -0
- package/lib/services/credits/pricing.js +111 -0
- package/lib/services/editor/designToProject.d.ts +75 -0
- package/lib/services/editor/designToProject.d.ts.map +1 -0
- package/lib/services/editor/designToProject.js +295 -0
- package/lib/services/editor/planToProject.d.ts +84 -0
- package/lib/services/editor/planToProject.d.ts.map +1 -0
- package/lib/services/editor/planToProject.js +395 -0
- package/lib/services/editor/projectToDesign.d.ts +4 -0
- package/lib/services/editor/projectToDesign.d.ts.map +1 -0
- package/lib/services/editor/projectToDesign.js +186 -0
- package/lib/services/firestore.service.d.ts +17 -0
- package/lib/services/firestore.service.d.ts.map +1 -1
- package/lib/services/firestore.service.js +30 -0
- package/lib/services/gcp/index.d.ts +1 -0
- package/lib/services/gcp/index.d.ts.map +1 -1
- package/lib/services/gcp/index.js +1 -0
- package/lib/services/gcp/uploadAudioBuffer.d.ts +13 -0
- package/lib/services/gcp/uploadAudioBuffer.d.ts.map +1 -0
- package/lib/services/gcp/uploadAudioBuffer.js +28 -0
- package/lib/services/index.d.ts +13 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/index.js +13 -0
- package/lib/services/musicGen/index.d.ts +6 -0
- package/lib/services/musicGen/index.d.ts.map +1 -0
- package/lib/services/musicGen/index.js +26 -0
- package/lib/services/musicGen/musicSearchFactory.service.d.ts +14 -0
- package/lib/services/musicGen/musicSearchFactory.service.d.ts.map +1 -0
- package/lib/services/musicGen/musicSearchFactory.service.js +59 -0
- package/lib/services/musicGen/providers/curated.service.d.ts +24 -0
- package/lib/services/musicGen/providers/curated.service.d.ts.map +1 -0
- package/lib/services/musicGen/providers/curated.service.js +173 -0
- package/lib/services/musicGen/providers/jamendo.service.d.ts +8 -0
- package/lib/services/musicGen/providers/jamendo.service.d.ts.map +1 -0
- package/lib/services/musicGen/providers/jamendo.service.js +113 -0
- package/lib/services/musicGen/providers/mubert.service.d.ts +10 -0
- package/lib/services/musicGen/providers/mubert.service.d.ts.map +1 -0
- package/lib/services/musicGen/providers/mubert.service.js +128 -0
- package/lib/services/musicGen/types.d.ts +46 -0
- package/lib/services/musicGen/types.d.ts.map +1 -0
- package/lib/services/musicGen/types.js +10 -0
- package/lib/services/notification.service.d.ts +22 -0
- package/lib/services/notification.service.d.ts.map +1 -0
- package/lib/services/notification.service.js +76 -0
- package/lib/services/rateLimiter/distributedRateLimiter.service.d.ts +78 -0
- package/lib/services/rateLimiter/distributedRateLimiter.service.d.ts.map +1 -0
- package/lib/services/rateLimiter/distributedRateLimiter.service.js +269 -0
- package/lib/services/rateLimiter/index.d.ts +2 -0
- package/lib/services/rateLimiter/index.d.ts.map +1 -0
- package/lib/services/rateLimiter/index.js +17 -0
- package/lib/services/redis.service.d.ts +9 -0
- package/lib/services/redis.service.d.ts.map +1 -1
- package/lib/services/redis.service.js +20 -11
- package/lib/services/redisOptions.d.ts +22 -0
- package/lib/services/redisOptions.d.ts.map +1 -0
- package/lib/services/redisOptions.js +51 -0
- package/lib/services/tts/index.d.ts +2 -0
- package/lib/services/tts/index.d.ts.map +1 -1
- package/lib/services/tts/index.js +2 -0
- package/lib/services/tts/providers/elevenlabs.service.d.ts.map +1 -1
- package/lib/services/tts/providers/elevenlabs.service.js +91 -24
- package/lib/services/tts/providers/minimax.service.d.ts +14 -0
- package/lib/services/tts/providers/minimax.service.d.ts.map +1 -0
- package/lib/services/tts/providers/minimax.service.js +78 -0
- package/lib/services/tts/providers/openai.service.d.ts +14 -0
- package/lib/services/tts/providers/openai.service.d.ts.map +1 -0
- package/lib/services/tts/providers/openai.service.js +73 -0
- package/lib/services/tts/ttsFactory.service.d.ts.map +1 -1
- package/lib/services/tts/ttsFactory.service.js +6 -0
- package/lib/services/tts/types.d.ts +33 -0
- package/lib/services/tts/types.d.ts.map +1 -1
- package/lib/utils/errors.d.ts +8 -0
- package/lib/utils/errors.d.ts.map +1 -1
- package/lib/utils/errors.js +8 -0
- package/lib/utils/helpers.d.ts +13 -0
- package/lib/utils/helpers.d.ts.map +1 -1
- package/lib/utils/helpers.js +48 -11
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +37 -1
- package/package.json +5 -1
- package/lib/services/aiGen/providers/azure/azure.service.d.ts +0 -14
- package/lib/services/aiGen/providers/azure/azure.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/azure/azure.service.js +0 -108
- package/lib/services/aiGen/providers/azure/index.d.ts +0 -2
- package/lib/services/aiGen/providers/azure/index.d.ts.map +0 -1
|
@@ -0,0 +1,248 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getModelCapabilityScore = getModelCapabilityScore;
|
|
37
|
+
exports.renderModelQualityHintsForSystemPrompt = renderModelQualityHintsForSystemPrompt;
|
|
38
|
+
exports.recordCriticEvidence = recordCriticEvidence;
|
|
39
|
+
exports._dumpStore = _dumpStore;
|
|
40
|
+
exports._resetCacheForTests = _resetCacheForTests;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const logger_1 = require("../../utils/logger");
|
|
44
|
+
const STORAGE_PATH = path.resolve(__dirname, "..", "..", "..", "data", "model-quality-notes.json");
|
|
45
|
+
// Hand-seeded baseline. Anything not listed is treated as "unknown" (no
|
|
46
|
+
// hint emitted, no decay applied). Seed conservatively — better to leave a
|
|
47
|
+
// capability unrated than to over-claim.
|
|
48
|
+
const SEED = [
|
|
49
|
+
{
|
|
50
|
+
modelKey: "bytedance-seedance-1.0-pro-fast",
|
|
51
|
+
lastUpdated: "2026-05-17",
|
|
52
|
+
capabilities: {
|
|
53
|
+
textRendering: {
|
|
54
|
+
score: 2,
|
|
55
|
+
seedNote: "Test 1 (2026-05-17): mangled 'HydraPure' label across all 5 I2V outputs from a clean reference image. Use only for scenes without on-bottle / on-package text.",
|
|
56
|
+
evidence: [],
|
|
57
|
+
},
|
|
58
|
+
fastMotion: { score: 5, seedNote: "Fast variant — strong at action/whip-pans.", evidence: [] },
|
|
59
|
+
characterContinuity: { score: 4, seedNote: "Holds same face well over short scenes.", evidence: [] },
|
|
60
|
+
photoreal: { score: 4, evidence: [] },
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
modelKey: "bytedance-seedance-1.0-pro",
|
|
65
|
+
lastUpdated: "2026-05-17",
|
|
66
|
+
capabilities: {
|
|
67
|
+
textRendering: { score: 3, seedNote: "Pro variant — better than fast but still untested at scale on brand text.", evidence: [] },
|
|
68
|
+
photoreal: { score: 5, evidence: [] },
|
|
69
|
+
cinematic: { score: 5, evidence: [] },
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
modelKey: "runway-gen4.5",
|
|
74
|
+
lastUpdated: "2026-05-17",
|
|
75
|
+
capabilities: {
|
|
76
|
+
textRendering: { score: 4, seedNote: "Runway Gen-4 is known to preserve source-image text faithfully when given a clean reference.", evidence: [] },
|
|
77
|
+
cinematic: { score: 5, evidence: [] },
|
|
78
|
+
productFidelity: { score: 4, evidence: [] },
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
modelKey: "kling-v3.0",
|
|
83
|
+
lastUpdated: "2026-05-17",
|
|
84
|
+
capabilities: {
|
|
85
|
+
textRendering: { score: 3, evidence: [] },
|
|
86
|
+
photoreal: { score: 4, evidence: [] },
|
|
87
|
+
characterContinuity: { score: 4, evidence: [] },
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
modelKey: "pixverse-v6",
|
|
92
|
+
lastUpdated: "2026-05-17",
|
|
93
|
+
capabilities: {
|
|
94
|
+
textRendering: { score: 3, seedNote: "Untested for brand text — used as default low-cost during early dev.", evidence: [] },
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
];
|
|
98
|
+
const WINDOW = 10;
|
|
99
|
+
const FAIL_COUNT_THRESHOLD = 3;
|
|
100
|
+
const FAIL_RATE_THRESHOLD = 0.3;
|
|
101
|
+
let cache;
|
|
102
|
+
function readStore() {
|
|
103
|
+
if (cache)
|
|
104
|
+
return cache;
|
|
105
|
+
try {
|
|
106
|
+
if (fs.existsSync(STORAGE_PATH)) {
|
|
107
|
+
cache = JSON.parse(fs.readFileSync(STORAGE_PATH, "utf8"));
|
|
108
|
+
return cache;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
logger_1.logger.warn("modelQualityNotes: store read failed; using seed", {
|
|
113
|
+
err: e instanceof Error ? e.message : String(e),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
cache = JSON.parse(JSON.stringify(SEED));
|
|
117
|
+
return cache;
|
|
118
|
+
}
|
|
119
|
+
function writeStore(entries) {
|
|
120
|
+
try {
|
|
121
|
+
fs.mkdirSync(path.dirname(STORAGE_PATH), { recursive: true });
|
|
122
|
+
fs.writeFileSync(STORAGE_PATH, JSON.stringify(entries, null, 2));
|
|
123
|
+
cache = entries;
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
logger_1.logger.warn("modelQualityNotes: store write failed", {
|
|
127
|
+
err: e instanceof Error ? e.message : String(e),
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function getModelCapabilityScore(modelKey, capability) {
|
|
132
|
+
const entry = readStore().find((e) => e.modelKey === modelKey);
|
|
133
|
+
return entry?.capabilities[capability]?.score;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Return a short paragraph the planner system prompt can paste in,
|
|
137
|
+
* listing models to AVOID per capability. Only emits hints for
|
|
138
|
+
* capabilities we have rated AND that the brief signals are relevant
|
|
139
|
+
* (so the planner isn't drowned in noise).
|
|
140
|
+
*/
|
|
141
|
+
function renderModelQualityHintsForSystemPrompt(opts) {
|
|
142
|
+
const lines = [];
|
|
143
|
+
const store = readStore();
|
|
144
|
+
const collect = (cap, threshold, label) => {
|
|
145
|
+
const bad = [];
|
|
146
|
+
for (const e of store) {
|
|
147
|
+
const s = e.capabilities[cap]?.score;
|
|
148
|
+
if (s !== undefined && s < threshold)
|
|
149
|
+
bad.push({ modelKey: e.modelKey, score: s });
|
|
150
|
+
}
|
|
151
|
+
if (bad.length) {
|
|
152
|
+
const list = bad.map((b) => `${b.modelKey} (score ${b.score})`).join(", ");
|
|
153
|
+
lines.push(` - ${label}: AVOID ${list}`);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
if (opts.needsBrandText)
|
|
157
|
+
collect("textRendering", 3, "Scene has BRAND TEXT / product labels");
|
|
158
|
+
if (opts.needsCharacterContinuity)
|
|
159
|
+
collect("characterContinuity", 3, "Scene needs SAME CHARACTER across cuts");
|
|
160
|
+
if (opts.needsFastMotion)
|
|
161
|
+
collect("fastMotion", 3, "Scene has FAST MOTION / action");
|
|
162
|
+
if (opts.needsCinematic)
|
|
163
|
+
collect("cinematic", 3, "Scene needs CINEMATIC camera moves");
|
|
164
|
+
if (lines.length === 0)
|
|
165
|
+
return "";
|
|
166
|
+
return [
|
|
167
|
+
"",
|
|
168
|
+
"Model quality evidence (from past critic runs — respect these):",
|
|
169
|
+
...lines,
|
|
170
|
+
].join("\n");
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Critic feedback hook: called after every stitched-video critic run
|
|
174
|
+
* with the structured findings. We map each finding's `dimension` to a
|
|
175
|
+
* `Capability`, record evidence under the model that rendered the scene,
|
|
176
|
+
* and decay the score iff the recent-window thresholds are met.
|
|
177
|
+
*/
|
|
178
|
+
function recordCriticEvidence(input) {
|
|
179
|
+
const dimensionToCapability = {
|
|
180
|
+
brandTextLegibility: "textRendering",
|
|
181
|
+
characterContinuity: "characterContinuity",
|
|
182
|
+
pacingFit: undefined,
|
|
183
|
+
cutRhythm: undefined,
|
|
184
|
+
voiceoverClarity: undefined,
|
|
185
|
+
voiceoverEmotionMatch: undefined,
|
|
186
|
+
voiceoverPacing: undefined,
|
|
187
|
+
audioMixBalance: undefined,
|
|
188
|
+
musicPresence: undefined,
|
|
189
|
+
hookStrength: undefined,
|
|
190
|
+
ctaPresence: undefined,
|
|
191
|
+
overallImpression: undefined,
|
|
192
|
+
};
|
|
193
|
+
const store = readStore();
|
|
194
|
+
const decays = [];
|
|
195
|
+
for (const f of input.findings) {
|
|
196
|
+
const cap = dimensionToCapability[f.dimension];
|
|
197
|
+
if (!cap)
|
|
198
|
+
continue;
|
|
199
|
+
const sceneIdx = f.sceneIndexHint;
|
|
200
|
+
// If finding has no scene hint, it's a video-wide judgement — apply to
|
|
201
|
+
// every model used in the run so single-scene evidence doesn't get lost.
|
|
202
|
+
const targets = sceneIdx !== undefined
|
|
203
|
+
? [input.sceneModels.get(sceneIdx)].filter((x) => !!x)
|
|
204
|
+
: [...new Set(input.sceneModels.values())];
|
|
205
|
+
for (const modelKey of targets) {
|
|
206
|
+
let entry = store.find((e) => e.modelKey === modelKey);
|
|
207
|
+
if (!entry) {
|
|
208
|
+
entry = { modelKey, lastUpdated: new Date().toISOString().slice(0, 10), capabilities: {} };
|
|
209
|
+
store.push(entry);
|
|
210
|
+
}
|
|
211
|
+
const capEntry = entry.capabilities[cap] ?? { score: 3, evidence: [] };
|
|
212
|
+
capEntry.evidence.push({
|
|
213
|
+
at: new Date().toISOString(),
|
|
214
|
+
verdict: f.severity,
|
|
215
|
+
message: f.message,
|
|
216
|
+
runId: input.runId,
|
|
217
|
+
sceneIndex: sceneIdx,
|
|
218
|
+
});
|
|
219
|
+
if (capEntry.evidence.length > WINDOW) {
|
|
220
|
+
capEntry.evidence = capEntry.evidence.slice(-WINDOW);
|
|
221
|
+
}
|
|
222
|
+
const fails = capEntry.evidence.filter((e) => e.verdict === "fail").length;
|
|
223
|
+
const rate = fails / capEntry.evidence.length;
|
|
224
|
+
if (fails >= FAIL_COUNT_THRESHOLD && rate >= FAIL_RATE_THRESHOLD && capEntry.score > 1) {
|
|
225
|
+
const from = capEntry.score;
|
|
226
|
+
capEntry.score = Math.max(1, capEntry.score - 1);
|
|
227
|
+
decays.push({ modelKey, capability: cap, from, to: capEntry.score });
|
|
228
|
+
// Reset evidence window after a decay so we don't double-penalise.
|
|
229
|
+
capEntry.evidence = [];
|
|
230
|
+
}
|
|
231
|
+
entry.capabilities[cap] = capEntry;
|
|
232
|
+
entry.lastUpdated = new Date().toISOString().slice(0, 10);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
writeStore(store);
|
|
236
|
+
if (decays.length) {
|
|
237
|
+
logger_1.logger.info("modelQualityNotes: score decays applied", { decays });
|
|
238
|
+
}
|
|
239
|
+
return { decays };
|
|
240
|
+
}
|
|
241
|
+
/** For tests + manual inspection. */
|
|
242
|
+
function _dumpStore() {
|
|
243
|
+
return JSON.parse(JSON.stringify(readStore()));
|
|
244
|
+
}
|
|
245
|
+
/** For tests — reset to seed (does NOT touch disk). */
|
|
246
|
+
function _resetCacheForTests() {
|
|
247
|
+
cache = JSON.parse(JSON.stringify(SEED));
|
|
248
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model router — picks the right LLM per agent role.
|
|
3
|
+
*
|
|
4
|
+
* Roles split because their cost/quality profiles differ wildly:
|
|
5
|
+
* - router : single classification call, pick persona from first message
|
|
6
|
+
* - planner : structured-output, must produce valid VideoPlan
|
|
7
|
+
* - executor : narrow tool-routing loop, mostly mechanical
|
|
8
|
+
* - critic : vision QA across scenes, rubric-following
|
|
9
|
+
* - reference : ingest a TikTok/Reel URL, extract structure
|
|
10
|
+
*
|
|
11
|
+
* The actual LLM call is delegated to an injected LlmCaller (wired to
|
|
12
|
+
* Vercel AI Gateway / OpenRouter at the host layer) — this keeps the
|
|
13
|
+
* agent code provider-agnostic and easy to A/B test against the eval set.
|
|
14
|
+
*/
|
|
15
|
+
export type AgentRole = "router" | "planner" | "executor" | "critic" | "reference";
|
|
16
|
+
export interface ModelChoice {
|
|
17
|
+
/** Logical model id, e.g. "claude-sonnet-4.6", "claude-haiku-4.5", "gpt-5". */
|
|
18
|
+
modelId: string;
|
|
19
|
+
/** Provider key for the LLM gateway, e.g. "anthropic", "openai", "google". */
|
|
20
|
+
provider: string;
|
|
21
|
+
/** Vision input supported. */
|
|
22
|
+
vision?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface ModelRoutingPolicy {
|
|
25
|
+
/** Default per-role model. */
|
|
26
|
+
primary: Record<AgentRole, ModelChoice>;
|
|
27
|
+
/** Fallback if primary is unavailable / rate-limited. Optional per-role. */
|
|
28
|
+
fallback?: Partial<Record<AgentRole, ModelChoice>>;
|
|
29
|
+
/** Premium tier upgrade — Premium-budget briefs route planner to this model. */
|
|
30
|
+
premiumPlanner?: ModelChoice;
|
|
31
|
+
}
|
|
32
|
+
export declare const DEFAULT_MODEL_ROUTING: ModelRoutingPolicy;
|
|
33
|
+
export declare class ModelRouter {
|
|
34
|
+
private readonly policy;
|
|
35
|
+
constructor(policy?: ModelRoutingPolicy);
|
|
36
|
+
pickFor(role: AgentRole, opts?: {
|
|
37
|
+
premium?: boolean;
|
|
38
|
+
}): ModelChoice;
|
|
39
|
+
fallbackFor(role: AgentRole): ModelChoice | undefined;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=modelRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelRouter.d.ts","sourceRoot":"","sources":["../../../src/services/agent/modelRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,SAAS,GACT,UAAU,GACV,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACxC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IACnD,gFAAgF;IAChF,cAAc,CAAC,EAAE,WAAW,CAAC;CAC9B;AAED,eAAO,MAAM,qBAAqB,EAAE,kBAgCnC,CAAC;AAEF,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE,kBAA0C;IAE/E,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,WAAW;IAOnE,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS;CAGtD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Model router — picks the right LLM per agent role.
|
|
4
|
+
*
|
|
5
|
+
* Roles split because their cost/quality profiles differ wildly:
|
|
6
|
+
* - router : single classification call, pick persona from first message
|
|
7
|
+
* - planner : structured-output, must produce valid VideoPlan
|
|
8
|
+
* - executor : narrow tool-routing loop, mostly mechanical
|
|
9
|
+
* - critic : vision QA across scenes, rubric-following
|
|
10
|
+
* - reference : ingest a TikTok/Reel URL, extract structure
|
|
11
|
+
*
|
|
12
|
+
* The actual LLM call is delegated to an injected LlmCaller (wired to
|
|
13
|
+
* Vercel AI Gateway / OpenRouter at the host layer) — this keeps the
|
|
14
|
+
* agent code provider-agnostic and easy to A/B test against the eval set.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.ModelRouter = exports.DEFAULT_MODEL_ROUTING = void 0;
|
|
18
|
+
exports.DEFAULT_MODEL_ROUTING = {
|
|
19
|
+
primary: {
|
|
20
|
+
router: { modelId: "claude-haiku-4-5", provider: "anthropic" },
|
|
21
|
+
planner: { modelId: "claude-sonnet-4-6", provider: "anthropic" },
|
|
22
|
+
executor: { modelId: "claude-haiku-4-5", provider: "anthropic" },
|
|
23
|
+
// Critic rubrics today (continuity / consistency / voSync / costVsTier)
|
|
24
|
+
// are pure perception + structured-output tasks — Gemini 2.5 Flash
|
|
25
|
+
// handles them at ~$0.002/call vs ~$0.04/call on Sonnet (20× cheaper)
|
|
26
|
+
// without measurable quality loss on perception axes. The brand-safety
|
|
27
|
+
// rubric is parked for now; when it returns, route only that axis to
|
|
28
|
+
// Sonnet (it's the policy-reasoning slice where Sonnet wins).
|
|
29
|
+
critic: {
|
|
30
|
+
modelId: "gemini-2.5-flash",
|
|
31
|
+
provider: "google",
|
|
32
|
+
vision: true,
|
|
33
|
+
},
|
|
34
|
+
reference: {
|
|
35
|
+
modelId: "gemini-2.5-pro",
|
|
36
|
+
provider: "google",
|
|
37
|
+
vision: true,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
fallback: {
|
|
41
|
+
router: { modelId: "gpt-5-mini", provider: "openai" },
|
|
42
|
+
planner: { modelId: "gpt-5", provider: "openai" },
|
|
43
|
+
executor: { modelId: "deepseek-chat", provider: "deepseek" },
|
|
44
|
+
// Sonnet is the Critic fallback — it costs more but is the safest
|
|
45
|
+
// bet when Flash refuses or returns malformed structured output.
|
|
46
|
+
critic: { modelId: "claude-sonnet-4-6", provider: "anthropic", vision: true },
|
|
47
|
+
reference: { modelId: "claude-sonnet-4-6", provider: "anthropic" },
|
|
48
|
+
},
|
|
49
|
+
premiumPlanner: { modelId: "claude-opus-4-7", provider: "anthropic" },
|
|
50
|
+
};
|
|
51
|
+
class ModelRouter {
|
|
52
|
+
constructor(policy = exports.DEFAULT_MODEL_ROUTING) {
|
|
53
|
+
this.policy = policy;
|
|
54
|
+
}
|
|
55
|
+
pickFor(role, opts) {
|
|
56
|
+
if (role === "planner" && opts?.premium && this.policy.premiumPlanner) {
|
|
57
|
+
return this.policy.premiumPlanner;
|
|
58
|
+
}
|
|
59
|
+
return this.policy.primary[role];
|
|
60
|
+
}
|
|
61
|
+
fallbackFor(role) {
|
|
62
|
+
return this.policy.fallback?.[role];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.ModelRouter = ModelRouter;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { VideoPlan } from "../../schemas/videoPlan.schema";
|
|
2
|
+
/**
|
|
3
|
+
* selectMusicForPlan — runs once after the planner returns and before the
|
|
4
|
+
* beat-snap pass, attaching a real track URL + bpm to plan.music.
|
|
5
|
+
*
|
|
6
|
+
* Why post-planner instead of letting the planner call search_music itself:
|
|
7
|
+
* the planner is a single structured-output call, not a tool-using agent.
|
|
8
|
+
* Adding a tool-call cycle here would double LLM latency and cost for a
|
|
9
|
+
* step that is fully mechanical — query string → provider → URL.
|
|
10
|
+
*
|
|
11
|
+
* No-ops when:
|
|
12
|
+
* - plan.music.strategy === "none"
|
|
13
|
+
* - plan.music.url is already set (user / brand kit pre-selected a track)
|
|
14
|
+
* - all music providers are unconfigured (curated catalog should always
|
|
15
|
+
* be available, so this branch should be rare in practice).
|
|
16
|
+
*
|
|
17
|
+
* On failure (no provider returns a hit) we leave plan.music.url unset and
|
|
18
|
+
* the snap pass falls back to BPM math; the editor can still attach music
|
|
19
|
+
* downstream. Not surfacing this as an error — music is enhancement, not
|
|
20
|
+
* a blocker.
|
|
21
|
+
*/
|
|
22
|
+
export declare function selectMusicForPlan(plan: VideoPlan): Promise<VideoPlan>;
|
|
23
|
+
//# sourceMappingURL=musicSelect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"musicSelect.d.ts","sourceRoot":"","sources":["../../../src/services/agent/musicSelect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAyC3D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAkD5E"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.selectMusicForPlan = selectMusicForPlan;
|
|
4
|
+
const audioAnalysis_1 = require("../audioAnalysis");
|
|
5
|
+
const musicGen_1 = require("../musicGen");
|
|
6
|
+
const logger_1 = require("../../utils/logger");
|
|
7
|
+
const beatSnap_1 = require("./beatSnap");
|
|
8
|
+
const personas_1 = require("./personas");
|
|
9
|
+
/**
|
|
10
|
+
* AG-27: HEAD-probe a track URL to confirm it's actually fetchable before we
|
|
11
|
+
* commit it to the plan. The curated catalog points at a GCS bucket
|
|
12
|
+
* (`vidspot-public-music`) that doesn't exist in every environment — picking
|
|
13
|
+
* a dead URL meant the final video had no music with no warning. We walk the
|
|
14
|
+
* results in priority order and return the first track whose URL is alive.
|
|
15
|
+
*
|
|
16
|
+
* 5s timeout per probe — slow enough to absorb cold CDN edges, fast enough
|
|
17
|
+
* that a 5-track search adds at most 25s to plan-time in the worst case.
|
|
18
|
+
*/
|
|
19
|
+
async function pickFirstReachable(tracks) {
|
|
20
|
+
for (const t of tracks) {
|
|
21
|
+
try {
|
|
22
|
+
const controller = new AbortController();
|
|
23
|
+
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
24
|
+
const r = await fetch(t.url, { method: "HEAD", signal: controller.signal });
|
|
25
|
+
clearTimeout(timeout);
|
|
26
|
+
if (r.ok)
|
|
27
|
+
return t;
|
|
28
|
+
logger_1.logger.warn("music url HEAD non-2xx, skipping", {
|
|
29
|
+
url: t.url,
|
|
30
|
+
status: r.status,
|
|
31
|
+
source: t.source,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
logger_1.logger.warn("music url HEAD failed, skipping", {
|
|
36
|
+
url: t.url,
|
|
37
|
+
source: t.source,
|
|
38
|
+
err: e instanceof Error ? e.message : String(e),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* selectMusicForPlan — runs once after the planner returns and before the
|
|
46
|
+
* beat-snap pass, attaching a real track URL + bpm to plan.music.
|
|
47
|
+
*
|
|
48
|
+
* Why post-planner instead of letting the planner call search_music itself:
|
|
49
|
+
* the planner is a single structured-output call, not a tool-using agent.
|
|
50
|
+
* Adding a tool-call cycle here would double LLM latency and cost for a
|
|
51
|
+
* step that is fully mechanical — query string → provider → URL.
|
|
52
|
+
*
|
|
53
|
+
* No-ops when:
|
|
54
|
+
* - plan.music.strategy === "none"
|
|
55
|
+
* - plan.music.url is already set (user / brand kit pre-selected a track)
|
|
56
|
+
* - all music providers are unconfigured (curated catalog should always
|
|
57
|
+
* be available, so this branch should be rare in practice).
|
|
58
|
+
*
|
|
59
|
+
* On failure (no provider returns a hit) we leave plan.music.url unset and
|
|
60
|
+
* the snap pass falls back to BPM math; the editor can still attach music
|
|
61
|
+
* downstream. Not surfacing this as an error — music is enhancement, not
|
|
62
|
+
* a blocker.
|
|
63
|
+
*/
|
|
64
|
+
async function selectMusicForPlan(plan) {
|
|
65
|
+
if (!plan.music || plan.music.strategy === "none" || plan.music.url)
|
|
66
|
+
return plan;
|
|
67
|
+
const personaDefaultBpm = personas_1.PERSONA_PACKS[plan.persona]?.defaultBpm;
|
|
68
|
+
const bpmTarget = plan.music.bpm ?? personaDefaultBpm;
|
|
69
|
+
const totalSec = Math.ceil(plan.totalDurationMs / 1000);
|
|
70
|
+
const result = await (0, musicGen_1.searchAllMusicSources)({
|
|
71
|
+
query: plan.music.query,
|
|
72
|
+
mood: plan.music.moodTag,
|
|
73
|
+
bpmTarget,
|
|
74
|
+
durationSecMin: totalSec,
|
|
75
|
+
limit: 5,
|
|
76
|
+
});
|
|
77
|
+
// AG-27: walk the result list, returning the first URL that responds 2xx
|
|
78
|
+
// to a HEAD probe. Guards against curated tracks whose GCS bucket is dead
|
|
79
|
+
// in this environment.
|
|
80
|
+
const track = await pickFirstReachable(result.tracks);
|
|
81
|
+
if (!track) {
|
|
82
|
+
logger_1.logger.warn("selectMusicForPlan: no reachable track in result list", {
|
|
83
|
+
candidateCount: result.tracks.length,
|
|
84
|
+
query: plan.music.query,
|
|
85
|
+
});
|
|
86
|
+
return plan;
|
|
87
|
+
}
|
|
88
|
+
// Onset detection runs best-effort: timeout / disabled / WASM error all
|
|
89
|
+
// resolve to undefined and the snap pass falls back to BPM math. When it
|
|
90
|
+
// succeeds we get both a corrected BPM (essentia is more accurate than
|
|
91
|
+
// the provider's metadata) and a list of transient timestamps.
|
|
92
|
+
const onsetAnalysis = await (0, audioAnalysis_1.detectOnsets)(track.url);
|
|
93
|
+
return {
|
|
94
|
+
...plan,
|
|
95
|
+
music: {
|
|
96
|
+
...plan.music,
|
|
97
|
+
url: track.url,
|
|
98
|
+
bpm: onsetAnalysis?.bpm
|
|
99
|
+
?? track.bpm
|
|
100
|
+
?? plan.music.bpm
|
|
101
|
+
?? (0, beatSnap_1.resolveBpm)(plan)
|
|
102
|
+
?? personaDefaultBpm,
|
|
103
|
+
durationSec: track.durationSec,
|
|
104
|
+
source: track.source,
|
|
105
|
+
attribution: track.attribution,
|
|
106
|
+
onsets: onsetAnalysis?.onsets,
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AG-40 — overlay renderer. Turns a `TextOverlay[]` into a list of ffmpeg
|
|
3
|
+
* `drawtext` filter expressions ready to chain in a `-filter_complex` graph.
|
|
4
|
+
*
|
|
5
|
+
* Word-wrap policy:
|
|
6
|
+
* - Each role has a `maxWidthFraction` (e.g. 0.88 of frame width).
|
|
7
|
+
* - We estimate text width as `chars * fontSize * 0.55` (Arial-ish ratio).
|
|
8
|
+
* - If a line exceeds the max width, greedy word-wrap into multiple lines.
|
|
9
|
+
* - If a single word exceeds max width even alone, we shrink fontSize stepwise.
|
|
10
|
+
*
|
|
11
|
+
* Anti-emoji guard:
|
|
12
|
+
* drawtext can't render colour glyphs without libass — strip surrogate-pair
|
|
13
|
+
* emoji upfront. Was the cause of "the H is cut off" mishap in Test 1: the
|
|
14
|
+
* "🌊" wasn't rendered but its width was counted toward layout.
|
|
15
|
+
*/
|
|
16
|
+
import type { TextOverlay } from "../../schemas/videoPlan.schema";
|
|
17
|
+
import { type ResolvedTextStyle } from "./textOverlayStyles";
|
|
18
|
+
export interface RenderContext {
|
|
19
|
+
/** Output video frame width in px (typically 1080 for 9:16). */
|
|
20
|
+
frameWidth: number;
|
|
21
|
+
/** Output video frame height in px (typically 1920 for 9:16). */
|
|
22
|
+
frameHeight: number;
|
|
23
|
+
/** Scene duration in seconds — used for animation timing. */
|
|
24
|
+
sceneDurationSec: number;
|
|
25
|
+
/** Absolute path to a TTF/OTC ffmpeg drawtext can load. */
|
|
26
|
+
fontFile: string;
|
|
27
|
+
}
|
|
28
|
+
export interface RenderedOverlay {
|
|
29
|
+
/** Ready-to-paste ffmpeg drawtext expression (no input/output labels). */
|
|
30
|
+
drawtextExpr: string;
|
|
31
|
+
/** Original overlay for trace/debug. */
|
|
32
|
+
source: TextOverlay;
|
|
33
|
+
/** Resolved style after merging role defaults + overrides. */
|
|
34
|
+
resolved: ResolvedTextStyle;
|
|
35
|
+
/** Final font size in px after auto-shrink. */
|
|
36
|
+
finalFontSizePx: number;
|
|
37
|
+
/** Final wrapped text (multi-line with literal "\n"). */
|
|
38
|
+
finalText: string;
|
|
39
|
+
/** Number of lines after wrap. */
|
|
40
|
+
lineCount: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Build one drawtext expression for a single overlay. Returns the expression
|
|
44
|
+
* plus debug metadata. Caller chains many of these with `,` (or splits per
|
|
45
|
+
* scene depending on its mux structure).
|
|
46
|
+
*/
|
|
47
|
+
export declare function renderOverlay(overlay: TextOverlay, ctx: RenderContext): RenderedOverlay;
|
|
48
|
+
/**
|
|
49
|
+
* Render many overlays into a single chained filter expression, joined by
|
|
50
|
+
* commas. Caller pipes it through `-vf` (single video stream) or wraps in
|
|
51
|
+
* `-filter_complex` if mixing with other filters.
|
|
52
|
+
*/
|
|
53
|
+
export declare function renderOverlayChain(overlays: TextOverlay[], ctx: RenderContext): {
|
|
54
|
+
vfilter: string;
|
|
55
|
+
rendered: RenderedOverlay[];
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* AG-40: persist-across-scenes resolver. Given the per-scene overlay arrays
|
|
59
|
+
* in playback order, append any overlay flagged `persistAcrossScenes` (or with
|
|
60
|
+
* a role whose default-persist is true, like watermark) onto every subsequent
|
|
61
|
+
* scene that doesn't already have an overlay of the same role.
|
|
62
|
+
*
|
|
63
|
+
* This is what lets the planner emit a watermark exactly once (on scene 0) and
|
|
64
|
+
* have it appear on every scene — no need to repeat it scene-by-scene.
|
|
65
|
+
*/
|
|
66
|
+
export declare function expandPersistentOverlays(perScene: Array<TextOverlay[] | undefined>): TextOverlay[][];
|
|
67
|
+
//# sourceMappingURL=overlayRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlayRenderer.d.ts","sourceRoot":"","sources":["../../../src/services/agent/overlayRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAElF,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,gBAAgB,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,MAAM,EAAE,WAAW,CAAC;IACpB,8DAA8D;IAC9D,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,+CAA+C;IAC/C,eAAe,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAsHD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,aAAa,GACjB,eAAe,CA6EjB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,WAAW,EAAE,EACvB,GAAG,EAAE,aAAa,GACjB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,eAAe,EAAE,CAAA;CAAE,CAMlD;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,GACzC,WAAW,EAAE,EAAE,CAyBjB"}
|