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,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.planExtendChain = planExtendChain;
|
|
4
|
+
exports.resolveExtendChain = resolveExtendChain;
|
|
5
|
+
const logger_1 = require("../../utils/logger");
|
|
6
|
+
const tierHelpers_1 = require("../../globals/aiModels/tierHelpers");
|
|
7
|
+
const extendVideo_tool_1 = require("./tools/extendVideo.tool");
|
|
8
|
+
/**
|
|
9
|
+
* AG-2 / Stream L (L-4) — extend-chain orchestration.
|
|
10
|
+
*
|
|
11
|
+
* A single scene can ask for more seconds than the chosen video model emits in
|
|
12
|
+
* one clip (e.g. a 16s continuous establishing shot on Kling, whose max single
|
|
13
|
+
* clip is ~10s). For extend-capable providers (Kling / Pixverse) we don't drop
|
|
14
|
+
* the extra seconds or fall back to a different provider (which would visibly
|
|
15
|
+
* change the look) — we generate the initial clip at the model's max legal
|
|
16
|
+
* length, then call the provider's NATIVE extension endpoint N times, each
|
|
17
|
+
* continuing the PREVIOUS provider task.
|
|
18
|
+
*
|
|
19
|
+
* The hard part is ordering: `extend_video` takes a `previousTaskId` that must
|
|
20
|
+
* already be COMPLETE on the provider before the extension can start. The agent
|
|
21
|
+
* executor is otherwise fire-and-forget (it triggers every scene's generation
|
|
22
|
+
* in parallel and returns `pendingTaskId`s for the host to poll afterwards), so
|
|
23
|
+
* the chain can't live in that parallel fan-out.
|
|
24
|
+
*
|
|
25
|
+
* Split of responsibilities:
|
|
26
|
+
* - `planExtendChain` (pure) — decides whether a scene needs a chain
|
|
27
|
+
* and how to slice the extra seconds. The
|
|
28
|
+
* executor calls this at trigger time and
|
|
29
|
+
* emits the segments on the SceneOutcome.
|
|
30
|
+
* - `resolveExtendChain` (injected) — runs the chain SEQUENTIALLY: poll the
|
|
31
|
+
* source → fire one extend → poll it →
|
|
32
|
+
* repeat. The host injects `pollTask`
|
|
33
|
+
* (a TaskPoller wrapper) + `runTool`.
|
|
34
|
+
*
|
|
35
|
+
* Keeping both here (in `shared`) rather than in the node worker means the
|
|
36
|
+
* decision logic is unit-testable and exercised by the eval harness's executor.
|
|
37
|
+
*/
|
|
38
|
+
/** Provider extension request bounds (mirror extendVideo.tool's InputSchema). */
|
|
39
|
+
const EXTEND_MIN_SEC = 2;
|
|
40
|
+
const EXTEND_MAX_SEC = 10;
|
|
41
|
+
/** Preferred per-extension increment (Kling ~4-5s, Pixverse ~5-8s natively). */
|
|
42
|
+
const PREFERRED_STEP_SEC = 5;
|
|
43
|
+
/**
|
|
44
|
+
* Hard cap on extensions per scene. A mis-planned 60s "scene" should not fan
|
|
45
|
+
* into a dozen paid provider calls — beyond this we get as close as we can and
|
|
46
|
+
* log the shortfall. maxClip + MAX_EXTENSIONS×EXTEND_MAX covers ~70s, well past
|
|
47
|
+
* any sane single continuous shot.
|
|
48
|
+
*/
|
|
49
|
+
const MAX_EXTENSIONS = 6;
|
|
50
|
+
/** Don't chain for a sub-second overflow — snapping absorbs it. */
|
|
51
|
+
const CHAIN_TOLERANCE_SEC = 0.5;
|
|
52
|
+
/**
|
|
53
|
+
* Decide whether a video scene needs an extend chain, and slice the extra
|
|
54
|
+
* seconds into provider-legal extension steps. Returns `null` when:
|
|
55
|
+
* - the model has no declared duration constraint (unconstrained → one clip),
|
|
56
|
+
* - the target already fits one clip (within snap tolerance), or
|
|
57
|
+
* - the model has no native extension endpoint (caller clamps as before — a
|
|
58
|
+
* non-extend model can't continue a clip, so the extra seconds are dropped
|
|
59
|
+
* by the existing capability/snap path).
|
|
60
|
+
*
|
|
61
|
+
* `targetDurationSec` is the scene's full requested length (scene.durationMs/1000).
|
|
62
|
+
*/
|
|
63
|
+
function planExtendChain(modelKey, targetDurationSec) {
|
|
64
|
+
const allowed = (0, tierHelpers_1.getModelAllowedDurations)(modelKey);
|
|
65
|
+
if (!allowed || allowed.length === 0)
|
|
66
|
+
return null; // unconstrained
|
|
67
|
+
const maxClip = allowed[allowed.length - 1]; // getModelAllowedDurations sorts ascending
|
|
68
|
+
const remaining = targetDurationSec - maxClip;
|
|
69
|
+
if (remaining <= CHAIN_TOLERANCE_SEC)
|
|
70
|
+
return null; // fits one clip
|
|
71
|
+
if (!(0, extendVideo_tool_1.modelSupportsExtend)(modelKey))
|
|
72
|
+
return null; // can't extend on this model
|
|
73
|
+
let n = Math.ceil(remaining / PREFERRED_STEP_SEC);
|
|
74
|
+
n = Math.min(Math.max(n, 1), MAX_EXTENSIONS);
|
|
75
|
+
const per = clamp(Math.round(remaining / n), EXTEND_MIN_SEC, EXTEND_MAX_SEC);
|
|
76
|
+
const segments = Array.from({ length: n }, () => ({
|
|
77
|
+
extraDurationSec: per,
|
|
78
|
+
}));
|
|
79
|
+
const achievable = maxClip + n * per;
|
|
80
|
+
if (achievable + CHAIN_TOLERANCE_SEC < targetDurationSec) {
|
|
81
|
+
logger_1.logger.warn("extendChain: requested duration exceeds chain ceiling — clamping", {
|
|
82
|
+
modelKey,
|
|
83
|
+
targetDurationSec,
|
|
84
|
+
maxClip,
|
|
85
|
+
extensions: n,
|
|
86
|
+
perSec: per,
|
|
87
|
+
achievableSec: achievable,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return { initialDurationSec: maxClip, segments };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Run an extend chain to completion, enforcing source-task ordering: poll the
|
|
94
|
+
* current task → on completion, fire the next extension → poll that → repeat.
|
|
95
|
+
* Returns the source + extension clips in render order.
|
|
96
|
+
*
|
|
97
|
+
* Failure is partial-tolerant: if a mid-chain task fails/times out we stop and
|
|
98
|
+
* return the clips resolved so far with ok:false, so the caller can decide to
|
|
99
|
+
* ship a shorter scene rather than lose the whole thing. A failed SOURCE clip
|
|
100
|
+
* (no clips resolved) is a hard scene failure.
|
|
101
|
+
*/
|
|
102
|
+
async function resolveExtendChain(deps, args) {
|
|
103
|
+
const { runTool, pollTask } = deps;
|
|
104
|
+
const { sceneIndex, modelKey, segments, ctx } = args;
|
|
105
|
+
const prefix = args.outputFilenamePrefix ?? `scene${sceneIndex}`;
|
|
106
|
+
const clips = [];
|
|
107
|
+
let currentTaskId = args.initialTaskId;
|
|
108
|
+
let currentDurationSec = args.initialDurationSec;
|
|
109
|
+
// Step 0 is the source clip; steps 1..N are the extensions. We poll the
|
|
110
|
+
// current task, record its clip, then (if more remain) fire the next extend.
|
|
111
|
+
for (let step = 0; step <= segments.length; step++) {
|
|
112
|
+
const poll = await pollTask({
|
|
113
|
+
ref: `${sceneIndex}.${step}`,
|
|
114
|
+
taskId: currentTaskId,
|
|
115
|
+
modelKey,
|
|
116
|
+
outputFilename: `${prefix}-ext${step}`,
|
|
117
|
+
});
|
|
118
|
+
if (poll.status !== "completed" || !poll.videoUrl) {
|
|
119
|
+
logger_1.logger.warn("extendChain: chain task did not complete — stopping", {
|
|
120
|
+
sceneIndex,
|
|
121
|
+
step,
|
|
122
|
+
status: poll.status,
|
|
123
|
+
taskId: currentTaskId,
|
|
124
|
+
error: poll.errorMessage,
|
|
125
|
+
});
|
|
126
|
+
return {
|
|
127
|
+
ok: false,
|
|
128
|
+
clips,
|
|
129
|
+
error: {
|
|
130
|
+
code: step === 0 ? "EXTEND_SOURCE_FAILED" : "EXTEND_STEP_FAILED",
|
|
131
|
+
message: `Extend chain ${step === 0 ? "source" : `step ${step}`} ${poll.status}` +
|
|
132
|
+
(poll.errorMessage ? `: ${poll.errorMessage}` : ""),
|
|
133
|
+
failedTaskId: currentTaskId,
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
clips.push({
|
|
138
|
+
visualUrl: poll.videoUrl,
|
|
139
|
+
taskId: currentTaskId,
|
|
140
|
+
durationSec: currentDurationSec,
|
|
141
|
+
});
|
|
142
|
+
// All steps resolved — done.
|
|
143
|
+
if (step === segments.length)
|
|
144
|
+
break;
|
|
145
|
+
// Fire the next extension, continuing the task we just confirmed complete.
|
|
146
|
+
const seg = segments[step];
|
|
147
|
+
const extendOut = await runTool("extend_video", {
|
|
148
|
+
previousTaskId: currentTaskId,
|
|
149
|
+
modelKey,
|
|
150
|
+
extraDurationSec: seg.extraDurationSec,
|
|
151
|
+
...(seg.prompt ? { prompt: seg.prompt } : {}),
|
|
152
|
+
}, { ...ctx, idempotencyKey: `${ctx.idempotencyKey ?? ctx.agentRunId}:ext${step + 1}` });
|
|
153
|
+
if (!extendOut.ok) {
|
|
154
|
+
logger_1.logger.warn("extendChain: extend_video call failed — stopping", {
|
|
155
|
+
sceneIndex,
|
|
156
|
+
step: step + 1,
|
|
157
|
+
sourceTaskId: currentTaskId,
|
|
158
|
+
error: extendOut.error,
|
|
159
|
+
});
|
|
160
|
+
return {
|
|
161
|
+
ok: false,
|
|
162
|
+
clips,
|
|
163
|
+
error: {
|
|
164
|
+
code: "EXTEND_TRIGGER_FAILED",
|
|
165
|
+
message: `extend_video step ${step + 1} failed: ${extendOut.error?.message ?? extendOut.error?.code ?? "unknown"}`,
|
|
166
|
+
failedTaskId: currentTaskId,
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
currentTaskId = extendOut.output.taskId;
|
|
171
|
+
currentDurationSec = seg.extraDurationSec;
|
|
172
|
+
}
|
|
173
|
+
return { ok: true, clips };
|
|
174
|
+
}
|
|
175
|
+
function clamp(v, lo, hi) {
|
|
176
|
+
return Math.max(lo, Math.min(hi, v));
|
|
177
|
+
}
|
|
@@ -2,13 +2,19 @@ export * from "./toolRegistry";
|
|
|
2
2
|
export * from "./tools";
|
|
3
3
|
export * from "./modelRouter";
|
|
4
4
|
export * from "./llmCaller";
|
|
5
|
-
export * from "./
|
|
5
|
+
export * from "./llmRetry";
|
|
6
|
+
export * from "./llmModelRegistry";
|
|
6
7
|
export * from "./llmCallerAnthropic";
|
|
8
|
+
export * from "./llmCallerOpenai";
|
|
9
|
+
export * from "./llmCallerGemini";
|
|
10
|
+
export * from "./llmCallerRouting";
|
|
11
|
+
export * from "./llmCallerFactory";
|
|
7
12
|
export * from "./personas";
|
|
8
13
|
export * from "./llmCallerRegistry";
|
|
9
14
|
export * from "./costPreflight";
|
|
10
15
|
export * from "./planner";
|
|
11
16
|
export * from "./planMutations";
|
|
17
|
+
export * from "./priorProject";
|
|
12
18
|
export * from "./bibleBuilder";
|
|
13
19
|
export * from "./referenceImageRenderer";
|
|
14
20
|
export * from "./bibleImageVision";
|
|
@@ -16,6 +22,10 @@ export * from "./sceneLayoutVision";
|
|
|
16
22
|
export * from "./beatSnap";
|
|
17
23
|
export * from "./musicSelect";
|
|
18
24
|
export * from "./executor";
|
|
25
|
+
export * from "./extendChain";
|
|
26
|
+
export * from "./editExisting";
|
|
27
|
+
export * from "./repurpose";
|
|
28
|
+
export * from "./covers";
|
|
19
29
|
export * from "./providerTaskCache";
|
|
20
30
|
export * from "./planDiff";
|
|
21
31
|
export * from "./taskPoller";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/agent/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/agent/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC"}
|
|
@@ -18,13 +18,19 @@ __exportStar(require("./toolRegistry"), exports);
|
|
|
18
18
|
__exportStar(require("./tools"), exports);
|
|
19
19
|
__exportStar(require("./modelRouter"), exports);
|
|
20
20
|
__exportStar(require("./llmCaller"), exports);
|
|
21
|
-
__exportStar(require("./
|
|
21
|
+
__exportStar(require("./llmRetry"), exports);
|
|
22
|
+
__exportStar(require("./llmModelRegistry"), exports);
|
|
22
23
|
__exportStar(require("./llmCallerAnthropic"), exports);
|
|
24
|
+
__exportStar(require("./llmCallerOpenai"), exports);
|
|
25
|
+
__exportStar(require("./llmCallerGemini"), exports);
|
|
26
|
+
__exportStar(require("./llmCallerRouting"), exports);
|
|
27
|
+
__exportStar(require("./llmCallerFactory"), exports);
|
|
23
28
|
__exportStar(require("./personas"), exports);
|
|
24
29
|
__exportStar(require("./llmCallerRegistry"), exports);
|
|
25
30
|
__exportStar(require("./costPreflight"), exports);
|
|
26
31
|
__exportStar(require("./planner"), exports);
|
|
27
32
|
__exportStar(require("./planMutations"), exports);
|
|
33
|
+
__exportStar(require("./priorProject"), exports);
|
|
28
34
|
__exportStar(require("./bibleBuilder"), exports);
|
|
29
35
|
__exportStar(require("./referenceImageRenderer"), exports);
|
|
30
36
|
__exportStar(require("./bibleImageVision"), exports);
|
|
@@ -32,6 +38,10 @@ __exportStar(require("./sceneLayoutVision"), exports);
|
|
|
32
38
|
__exportStar(require("./beatSnap"), exports);
|
|
33
39
|
__exportStar(require("./musicSelect"), exports);
|
|
34
40
|
__exportStar(require("./executor"), exports);
|
|
41
|
+
__exportStar(require("./extendChain"), exports);
|
|
42
|
+
__exportStar(require("./editExisting"), exports);
|
|
43
|
+
__exportStar(require("./repurpose"), exports);
|
|
44
|
+
__exportStar(require("./covers"), exports);
|
|
35
45
|
__exportStar(require("./providerTaskCache"), exports);
|
|
36
46
|
__exportStar(require("./planDiff"), exports);
|
|
37
47
|
__exportStar(require("./taskPoller"), exports);
|
|
@@ -2,9 +2,10 @@ import { z } from "zod";
|
|
|
2
2
|
import { ModelChoice } from "./modelRouter";
|
|
3
3
|
/**
|
|
4
4
|
* Provider-agnostic LLM caller. The host (Express server / Firebase Functions)
|
|
5
|
-
* wires a concrete implementation
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* wires a concrete implementation — the native ProviderRoutingLlmCaller, which
|
|
6
|
+
* dispatches per request to a provider's own SDK (Anthropic / OpenAI / Gemini).
|
|
7
|
+
* Agent code only ever sees this interface, which keeps it portable and lets us
|
|
8
|
+
* A/B-test models against the eval set without code changes.
|
|
8
9
|
*/
|
|
9
10
|
export interface LlmCaller {
|
|
10
11
|
/** Free-form chat completion. */
|
|
@@ -30,11 +31,9 @@ export interface LlmCaller {
|
|
|
30
31
|
* emitting the final structured payload.
|
|
31
32
|
*
|
|
32
33
|
* Only implemented by callers that natively support tool-use loops (today:
|
|
33
|
-
* `AnthropicLlmCaller
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* a custom-tools-only variant on the gateway (e.g. Tavily passed as a
|
|
37
|
-
* regular OpenAI-format tool) — see deferred work in `llmCallerAnthropic.ts`.
|
|
34
|
+
* `AnthropicLlmCaller`, for Anthropic's built-in server tools). The
|
|
35
|
+
* dispatcher routes structuredWithTools to the Anthropic caller and throws
|
|
36
|
+
* if a non-Anthropic provider is asked for it. OpenAI/Gemini callers omit it.
|
|
38
37
|
*/
|
|
39
38
|
structuredWithTools?<T extends z.ZodTypeAny>(req: StructuredWithToolsRequest<T>): Promise<StructuredResponse<T>>;
|
|
40
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llmCaller.d.ts","sourceRoot":"","sources":["../../../src/services/agent/llmCaller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C
|
|
1
|
+
{"version":3,"file":"llmCaller.d.ts","sourceRoot":"","sources":["../../../src/services/agent/llmCaller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { ChatRequest, ChatResponse, LlmCaller, StructuredRequest, StructuredResponse, StructuredWithToolsRequest } from "./llmCaller";
|
|
3
|
+
import { TransientLlmError, isTransientLlmError } from "./llmRetry";
|
|
4
|
+
export { TransientLlmError, isTransientLlmError };
|
|
3
5
|
/**
|
|
4
|
-
* Direct Anthropic SDK LlmCaller
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Direct Anthropic SDK LlmCaller — the `anthropic` slice of the native
|
|
7
|
+
* ProviderRoutingLlmCaller (LLM_NATIVE_MIGRATION_PLAN). Serves all anthropic
|
|
8
|
+
* models the router picks (router / planner / executor) and is the only caller
|
|
9
|
+
* that implements `structuredWithTools`, because Anthropic's server-side tools
|
|
10
|
+
* (`web_search_20260209`, `web_fetch`, etc.) are Anthropic-only constructs the
|
|
11
|
+
* API executes server-side — no other provider exposes them.
|
|
8
12
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* citations) without a translation layer.
|
|
13
|
-
*
|
|
14
|
-
* Use the gateway caller when:
|
|
15
|
-
* - You want provider portability (GPT-5 / Gemini fallback chains).
|
|
16
|
-
* - You don't need built-in tools.
|
|
17
|
-
*
|
|
18
|
-
* The Planner reads from `getAnthropicCaller()` only when `useWebResearch`
|
|
19
|
-
* is set; otherwise it stays on the gateway path.
|
|
13
|
+
* The Planner also reads this directly via `getAnthropicCaller()` when
|
|
14
|
+
* `useWebResearch` is set (server-side `web_search` grounding); otherwise it
|
|
15
|
+
* goes through the normal dispatcher, which already routes anthropic natively.
|
|
20
16
|
*
|
|
21
17
|
* Implemented features:
|
|
22
18
|
* - Prompt caching (`cachePrompt: true`): `cache_control: ephemeral` on
|
|
@@ -25,8 +21,10 @@ import { ChatRequest, ChatResponse, LlmCaller, StructuredRequest, StructuredResp
|
|
|
25
21
|
* - Extended thinking (`thinking.budgetTokens`): enables Claude's
|
|
26
22
|
* interleaved reasoning blocks for T3 / complex briefs. Forces
|
|
27
23
|
* temperature=1 and threads `thinking` blocks through the tool-use loop.
|
|
28
|
-
* -
|
|
29
|
-
*
|
|
24
|
+
* - Native incremental streaming (`structuredStream`): forces the
|
|
25
|
+
* `submit_<schema>` tool and streams its `input_json_delta` partials.
|
|
26
|
+
* - Transient errors propagate as `TransientLlmError` so the dispatcher can
|
|
27
|
+
* run the cross-provider `fallbackModel` on Anthropic outages.
|
|
30
28
|
*
|
|
31
29
|
* Deferred work (v2):
|
|
32
30
|
* - Custom client-side tools (Tavily / image search): extend the loop
|
|
@@ -46,15 +44,6 @@ export interface AnthropicCallerConfig {
|
|
|
46
44
|
/** Max retries on transient errors per call. Default 3. */
|
|
47
45
|
maxRetries?: number;
|
|
48
46
|
}
|
|
49
|
-
/**
|
|
50
|
-
* Marks an error worth retrying on the gateway path. The Planner catches
|
|
51
|
-
* this specifically to degrade gracefully — drops research, keeps planning.
|
|
52
|
-
*/
|
|
53
|
-
export declare class TransientLlmError extends Error {
|
|
54
|
-
readonly cause?: unknown | undefined;
|
|
55
|
-
constructor(message: string, cause?: unknown | undefined);
|
|
56
|
-
}
|
|
57
|
-
export declare function isTransientLlmError(err: unknown): err is TransientLlmError;
|
|
58
47
|
export declare class AnthropicLlmCaller implements LlmCaller {
|
|
59
48
|
private readonly client;
|
|
60
49
|
private readonly timeoutMs;
|
|
@@ -63,6 +52,26 @@ export declare class AnthropicLlmCaller implements LlmCaller {
|
|
|
63
52
|
chat(req: ChatRequest): Promise<ChatResponse>;
|
|
64
53
|
structured<T extends z.ZodTypeAny>(req: StructuredRequest<T>): Promise<StructuredResponse<T>>;
|
|
65
54
|
structuredWithTools<T extends z.ZodTypeAny>(req: StructuredWithToolsRequest<T>): Promise<StructuredResponse<T>>;
|
|
55
|
+
/**
|
|
56
|
+
* Native incremental streaming structured output. Forces the
|
|
57
|
+
* `submit_<schemaName>` tool and streams its argument JSON as
|
|
58
|
+
* `input_json_delta` chunks — yielding each partial for token-by-token UI —
|
|
59
|
+
* then takes the authoritative payload from `stream.finalMessage()` (more
|
|
60
|
+
* robust than re-concatenating partials) and Zod-validates it.
|
|
61
|
+
*
|
|
62
|
+
* Scope: the base StructuredRequest carries no server tools / thinking /
|
|
63
|
+
* caching (those live on StructuredWithToolsRequest and run the blocking
|
|
64
|
+
* tool-loop), so this is a single forced-tool turn. Failure handling mirrors
|
|
65
|
+
* the other streaming callers: a post-stream parse/validation miss rejects
|
|
66
|
+
* `result` and returns cleanly (so the caller's token loop completes and its
|
|
67
|
+
* `await result` retry path fires); a mid-stream/connect drop rejects AND
|
|
68
|
+
* throws out so the iteration aborts.
|
|
69
|
+
*/
|
|
70
|
+
structuredStream<T extends z.ZodTypeAny>(req: StructuredRequest<T>): {
|
|
71
|
+
tokens: AsyncIterable<string>;
|
|
72
|
+
result: Promise<StructuredResponse<T>>;
|
|
73
|
+
};
|
|
74
|
+
private streamIterator;
|
|
66
75
|
/**
|
|
67
76
|
* Anthropic's API takes a top-level `system` (string or TextBlockParam[])
|
|
68
77
|
* and messages of user/assistant only. Our LlmCaller carries system as
|
|
@@ -78,13 +87,17 @@ export declare class AnthropicLlmCaller implements LlmCaller {
|
|
|
78
87
|
private splitSystem;
|
|
79
88
|
private buildServerTools;
|
|
80
89
|
/**
|
|
81
|
-
* Map our ModelChoice → Anthropic API model id
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
90
|
+
* Map our ModelChoice → Anthropic API model id via the shared registry
|
|
91
|
+
* (pass-through today). Throws on a non-Anthropic provider rather than
|
|
92
|
+
* silently sending GPT/Gemini names to the Anthropic API — the dispatcher
|
|
93
|
+
* routes by provider, so this guards against a mis-wire.
|
|
85
94
|
*/
|
|
86
95
|
private resolveModelId;
|
|
96
|
+
/**
|
|
97
|
+
* Delegates to the shared transient-retry helper so all native callers share
|
|
98
|
+
* one backoff/classification policy (Phase 1 extraction). The SDK's own
|
|
99
|
+
* `status`/connection-error shapes are recognised by `isTransientError`.
|
|
100
|
+
*/
|
|
87
101
|
private withRetry;
|
|
88
|
-
private isTransient;
|
|
89
102
|
}
|
|
90
103
|
//# sourceMappingURL=llmCallerAnthropic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llmCallerAnthropic.d.ts","sourceRoot":"","sources":["../../../src/services/agent/llmCallerAnthropic.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"llmCallerAnthropic.d.ts","sourceRoot":"","sources":["../../../src/services/agent/llmCallerAnthropic.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AAMrB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,GAAG,EAAE,qBAAqB;IAShC,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4B7C,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EACrC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAI3B,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAC9C,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAoHjC;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EACrC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACxB;QACD,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;KACxC;YAgBc,cAAc;IAsF7B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,WAAW;IAkDnB,OAAO,CAAC,gBAAgB;IAkBxB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAStB;;;;OAIG;IACH,OAAO,CAAC,SAAS;CAGlB"}
|
|
@@ -3,26 +3,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.AnthropicLlmCaller = exports.TransientLlmError = void 0;
|
|
7
|
-
exports.isTransientLlmError = isTransientLlmError;
|
|
6
|
+
exports.AnthropicLlmCaller = exports.isTransientLlmError = exports.TransientLlmError = void 0;
|
|
8
7
|
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
9
8
|
const zod_1 = require("zod");
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
super(message);
|
|
18
|
-
this.cause = cause;
|
|
19
|
-
this.name = "TransientLlmError";
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
exports.TransientLlmError = TransientLlmError;
|
|
23
|
-
function isTransientLlmError(err) {
|
|
24
|
-
return err instanceof Error && err.name === "TransientLlmError";
|
|
25
|
-
}
|
|
9
|
+
const llmModelRegistry_1 = require("./llmModelRegistry");
|
|
10
|
+
// Transient-retry primitives are shared across all native callers (Phase 1 of
|
|
11
|
+
// LLM_NATIVE_MIGRATION_PLAN). Re-exported here for backward compat with existing
|
|
12
|
+
// importers that pulled `TransientLlmError` / `isTransientLlmError` from this file.
|
|
13
|
+
const llmRetry_1 = require("./llmRetry");
|
|
14
|
+
Object.defineProperty(exports, "TransientLlmError", { enumerable: true, get: function () { return llmRetry_1.TransientLlmError; } });
|
|
15
|
+
Object.defineProperty(exports, "isTransientLlmError", { enumerable: true, get: function () { return llmRetry_1.isTransientLlmError; } });
|
|
26
16
|
class AnthropicLlmCaller {
|
|
27
17
|
constructor(cfg) {
|
|
28
18
|
this.client = new sdk_1.default({
|
|
@@ -149,6 +139,101 @@ class AnthropicLlmCaller {
|
|
|
149
139
|
}
|
|
150
140
|
throw new Error(`AnthropicLlmCaller.structuredWithTools: exceeded ${maxRounds} tool rounds without ${submitToolName}`);
|
|
151
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Native incremental streaming structured output. Forces the
|
|
144
|
+
* `submit_<schemaName>` tool and streams its argument JSON as
|
|
145
|
+
* `input_json_delta` chunks — yielding each partial for token-by-token UI —
|
|
146
|
+
* then takes the authoritative payload from `stream.finalMessage()` (more
|
|
147
|
+
* robust than re-concatenating partials) and Zod-validates it.
|
|
148
|
+
*
|
|
149
|
+
* Scope: the base StructuredRequest carries no server tools / thinking /
|
|
150
|
+
* caching (those live on StructuredWithToolsRequest and run the blocking
|
|
151
|
+
* tool-loop), so this is a single forced-tool turn. Failure handling mirrors
|
|
152
|
+
* the other streaming callers: a post-stream parse/validation miss rejects
|
|
153
|
+
* `result` and returns cleanly (so the caller's token loop completes and its
|
|
154
|
+
* `await result` retry path fires); a mid-stream/connect drop rejects AND
|
|
155
|
+
* throws out so the iteration aborts.
|
|
156
|
+
*/
|
|
157
|
+
structuredStream(req) {
|
|
158
|
+
let resolveResult;
|
|
159
|
+
let rejectResult;
|
|
160
|
+
const result = new Promise((resolve, reject) => {
|
|
161
|
+
resolveResult = resolve;
|
|
162
|
+
rejectResult = reject;
|
|
163
|
+
});
|
|
164
|
+
const self = this;
|
|
165
|
+
const tokens = {
|
|
166
|
+
[Symbol.asyncIterator]() {
|
|
167
|
+
return self.streamIterator(req, resolveResult, rejectResult);
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
return { tokens, result };
|
|
171
|
+
}
|
|
172
|
+
async *streamIterator(req, resolveResult, rejectResult) {
|
|
173
|
+
const submitToolName = `submit_${req.schemaName}`;
|
|
174
|
+
const jsonSchema = zod_1.z.toJSONSchema(req.schema, { target: "draft-7" });
|
|
175
|
+
const tools = [
|
|
176
|
+
{
|
|
177
|
+
name: submitToolName,
|
|
178
|
+
description: `Submit the final ${req.schemaName} payload. Call this exactly once when ready.`,
|
|
179
|
+
input_schema: jsonSchema,
|
|
180
|
+
},
|
|
181
|
+
];
|
|
182
|
+
const { system, messages } = this.splitSystem(req.messages, false);
|
|
183
|
+
let requestId;
|
|
184
|
+
let inputTokens;
|
|
185
|
+
let outputTokens;
|
|
186
|
+
try {
|
|
187
|
+
const stream = this.client.messages.stream({
|
|
188
|
+
model: this.resolveModelId(req.model),
|
|
189
|
+
max_tokens: req.maxTokens ?? 8192,
|
|
190
|
+
temperature: req.temperature,
|
|
191
|
+
system,
|
|
192
|
+
tools,
|
|
193
|
+
tool_choice: { type: "tool", name: submitToolName },
|
|
194
|
+
messages,
|
|
195
|
+
});
|
|
196
|
+
for await (const event of stream) {
|
|
197
|
+
if (event.type === "message_start") {
|
|
198
|
+
requestId = event.message.id;
|
|
199
|
+
inputTokens = event.message.usage?.input_tokens;
|
|
200
|
+
}
|
|
201
|
+
else if (event.type === "content_block_delta" &&
|
|
202
|
+
event.delta.type === "input_json_delta") {
|
|
203
|
+
const partial = event.delta.partial_json;
|
|
204
|
+
if (partial)
|
|
205
|
+
yield partial;
|
|
206
|
+
}
|
|
207
|
+
else if (event.type === "message_delta") {
|
|
208
|
+
outputTokens = event.usage?.output_tokens ?? outputTokens;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Authoritative payload from the assembled final message (the forced
|
|
212
|
+
// tool_use block's input), not the concatenated partials.
|
|
213
|
+
const final = await stream.finalMessage();
|
|
214
|
+
const submit = final.content.find((b) => b.type === "tool_use" && b.name === submitToolName);
|
|
215
|
+
if (!submit) {
|
|
216
|
+
rejectResult(new Error(`AnthropicLlmCaller.structuredStream: no ${submitToolName} tool_use in final message`));
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const parsed = req.schema.safeParse(submit.input);
|
|
220
|
+
if (!parsed.success) {
|
|
221
|
+
rejectResult(new Error(`AnthropicLlmCaller.structuredStream: schema validation failed for ${req.schemaName}: ${parsed.error.message}`));
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
resolveResult({
|
|
225
|
+
data: parsed.data,
|
|
226
|
+
usage: { promptTokens: inputTokens, completionTokens: outputTokens },
|
|
227
|
+
requestId,
|
|
228
|
+
attemptedModels: [req.model],
|
|
229
|
+
usedFallback: false,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
catch (e) {
|
|
233
|
+
rejectResult(e);
|
|
234
|
+
throw e;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
152
237
|
// ---------- helpers ----------
|
|
153
238
|
/**
|
|
154
239
|
* Anthropic's API takes a top-level `system` (string or TextBlockParam[])
|
|
@@ -170,9 +255,24 @@ class AnthropicLlmCaller {
|
|
|
170
255
|
systemText = systemText ? `${systemText}\n\n${m.content}` : m.content;
|
|
171
256
|
continue;
|
|
172
257
|
}
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
//
|
|
258
|
+
// Vision: when a message carries imageUrls, emit a content-block array
|
|
259
|
+
// (text + image blocks) instead of a bare string. Uses Anthropic's native
|
|
260
|
+
// URL image source (`source.type: "url"`) — no base64 round-trip — which
|
|
261
|
+
// the direct API supports (unlike the gateway's Anthropic translator,
|
|
262
|
+
// which rejected raw https URLs). Needed for the critic fallback
|
|
263
|
+
// (claude-sonnet-4-6, vision) now that it routes here instead of the
|
|
264
|
+
// gateway.
|
|
265
|
+
if (m.imageUrls?.length) {
|
|
266
|
+
const blocks = [
|
|
267
|
+
{ type: "text", text: m.content },
|
|
268
|
+
...m.imageUrls.map((url) => ({
|
|
269
|
+
type: "image",
|
|
270
|
+
source: { type: "url", url },
|
|
271
|
+
})),
|
|
272
|
+
];
|
|
273
|
+
out.push({ role: m.role, content: blocks });
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
176
276
|
out.push({ role: m.role, content: m.content });
|
|
177
277
|
}
|
|
178
278
|
if (!systemText)
|
|
@@ -207,49 +307,24 @@ class AnthropicLlmCaller {
|
|
|
207
307
|
});
|
|
208
308
|
}
|
|
209
309
|
/**
|
|
210
|
-
* Map our ModelChoice → Anthropic API model id
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
*
|
|
310
|
+
* Map our ModelChoice → Anthropic API model id via the shared registry
|
|
311
|
+
* (pass-through today). Throws on a non-Anthropic provider rather than
|
|
312
|
+
* silently sending GPT/Gemini names to the Anthropic API — the dispatcher
|
|
313
|
+
* routes by provider, so this guards against a mis-wire.
|
|
214
314
|
*/
|
|
215
315
|
resolveModelId(m) {
|
|
216
|
-
if (m.provider !== "anthropic") {
|
|
217
|
-
throw new Error(`AnthropicLlmCaller cannot serve provider=${m.provider}; route
|
|
218
|
-
}
|
|
219
|
-
return m.modelId;
|
|
220
|
-
}
|
|
221
|
-
async withRetry(fn) {
|
|
222
|
-
let lastErr;
|
|
223
|
-
for (let attempt = 0; attempt < this.maxRetries; attempt++) {
|
|
224
|
-
try {
|
|
225
|
-
return await fn();
|
|
226
|
-
}
|
|
227
|
-
catch (err) {
|
|
228
|
-
lastErr = err;
|
|
229
|
-
const transient = this.isTransient(err);
|
|
230
|
-
if (!transient || attempt === this.maxRetries - 1) {
|
|
231
|
-
if (transient) {
|
|
232
|
-
throw new TransientLlmError(`Anthropic transient error after ${attempt + 1} attempts: ${String(err?.message ?? err)}`, err);
|
|
233
|
-
}
|
|
234
|
-
throw err;
|
|
235
|
-
}
|
|
236
|
-
await new Promise((r) => setTimeout(r, 250 * Math.pow(4, attempt)));
|
|
237
|
-
}
|
|
316
|
+
if ((0, llmModelRegistry_1.normalizeProvider)(m.provider) !== "anthropic") {
|
|
317
|
+
throw new Error(`AnthropicLlmCaller cannot serve provider=${m.provider}; route via the dispatcher.`);
|
|
238
318
|
}
|
|
239
|
-
|
|
319
|
+
return (0, llmModelRegistry_1.nativeModelId)(m);
|
|
240
320
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
}
|
|
248
|
-
if (e.name === "APIConnectionError" || e.name === "APIConnectionTimeoutError") {
|
|
249
|
-
return true;
|
|
250
|
-
}
|
|
251
|
-
const msg = String(e.message ?? "");
|
|
252
|
-
return /timeout|ECONNRESET|ETIMEDOUT|network|socket hang up/i.test(msg);
|
|
321
|
+
/**
|
|
322
|
+
* Delegates to the shared transient-retry helper so all native callers share
|
|
323
|
+
* one backoff/classification policy (Phase 1 extraction). The SDK's own
|
|
324
|
+
* `status`/connection-error shapes are recognised by `isTransientError`.
|
|
325
|
+
*/
|
|
326
|
+
withRetry(fn) {
|
|
327
|
+
return (0, llmRetry_1.withRetry)(fn, { maxRetries: this.maxRetries });
|
|
253
328
|
}
|
|
254
329
|
}
|
|
255
330
|
exports.AnthropicLlmCaller = AnthropicLlmCaller;
|