vidspotai-shared 1.0.82-dev.0 → 1.0.83

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.
Files changed (468) hide show
  1. package/lib/globals/aiModels/enums.d.ts +11 -1
  2. package/lib/globals/aiModels/enums.d.ts.map +1 -1
  3. package/lib/globals/aiModels/enums.js +24 -1
  4. package/lib/globals/aiModels/index.d.ts.map +1 -1
  5. package/lib/globals/aiModels/index.js +2 -0
  6. package/lib/globals/aiModels/providers/anthropic.d.ts +12 -0
  7. package/lib/globals/aiModels/providers/anthropic.d.ts.map +1 -0
  8. package/lib/globals/aiModels/providers/anthropic.js +88 -0
  9. package/lib/globals/aiModels/providers/google.d.ts.map +1 -1
  10. package/lib/globals/aiModels/providers/google.js +115 -10
  11. package/lib/globals/aiModels/providers/openai.d.ts.map +1 -1
  12. package/lib/globals/aiModels/providers/openai.js +63 -4
  13. package/lib/globals/aiModels/tierHelpers.d.ts +12 -0
  14. package/lib/globals/aiModels/tierHelpers.d.ts.map +1 -1
  15. package/lib/globals/aiModels/tierHelpers.js +83 -0
  16. package/lib/globals/aiModels/types.d.ts +19 -0
  17. package/lib/globals/aiModels/types.d.ts.map +1 -1
  18. package/lib/globals/types.d.ts +120 -1
  19. package/lib/globals/types.d.ts.map +1 -1
  20. package/lib/globals/types.js +135 -1
  21. package/lib/models/agent.model.d.ts +41 -1
  22. package/lib/models/agent.model.d.ts.map +1 -1
  23. package/lib/models/index.d.ts +1 -0
  24. package/lib/models/index.d.ts.map +1 -1
  25. package/lib/models/index.js +1 -0
  26. package/lib/models/social.model.d.ts +180 -0
  27. package/lib/models/social.model.d.ts.map +1 -0
  28. package/lib/models/social.model.js +2 -0
  29. package/lib/models/user.model.d.ts +10 -0
  30. package/lib/models/user.model.d.ts.map +1 -1
  31. package/lib/models/video.model.d.ts +6 -0
  32. package/lib/models/video.model.d.ts.map +1 -1
  33. package/lib/schemas/brief.schema.d.ts +46 -0
  34. package/lib/schemas/brief.schema.d.ts.map +1 -1
  35. package/lib/schemas/brief.schema.js +72 -1
  36. package/lib/schemas/index.d.ts +1 -0
  37. package/lib/schemas/index.d.ts.map +1 -1
  38. package/lib/schemas/index.js +1 -0
  39. package/lib/schemas/project.schema.d.ts +70 -3
  40. package/lib/schemas/project.schema.d.ts.map +1 -1
  41. package/lib/schemas/project.schema.js +12 -0
  42. package/lib/schemas/social.schema.d.ts +91 -0
  43. package/lib/schemas/social.schema.d.ts.map +1 -0
  44. package/lib/schemas/social.schema.js +114 -0
  45. package/lib/schemas/videoPlan.schema.d.ts +117 -3
  46. package/lib/schemas/videoPlan.schema.d.ts.map +1 -1
  47. package/lib/schemas/videoPlan.schema.js +141 -1
  48. package/lib/services/agent/chatAgent.d.ts +25 -1
  49. package/lib/services/agent/chatAgent.d.ts.map +1 -1
  50. package/lib/services/agent/chatAgent.js +145 -9
  51. package/lib/services/agent/costPreflight.d.ts +11 -1
  52. package/lib/services/agent/costPreflight.d.ts.map +1 -1
  53. package/lib/services/agent/costPreflight.js +18 -1
  54. package/lib/services/agent/covers/coverPlanner.d.ts +41 -0
  55. package/lib/services/agent/covers/coverPlanner.d.ts.map +1 -0
  56. package/lib/services/agent/covers/coverPlanner.js +278 -0
  57. package/lib/services/agent/covers/covers.schema.d.ts +158 -0
  58. package/lib/services/agent/covers/covers.schema.d.ts.map +1 -0
  59. package/lib/services/agent/covers/covers.schema.js +166 -0
  60. package/lib/services/agent/covers/index.d.ts +3 -0
  61. package/lib/services/agent/covers/index.d.ts.map +1 -0
  62. package/lib/services/agent/covers/index.js +18 -0
  63. package/lib/services/agent/critic.d.ts +10 -0
  64. package/lib/services/agent/critic.d.ts.map +1 -1
  65. package/lib/services/agent/critic.js +37 -1
  66. package/lib/services/agent/editClassifier.d.ts +4 -4
  67. package/lib/services/agent/editClassifier.js +2 -2
  68. package/lib/services/agent/editExisting/editAssembler.d.ts +78 -0
  69. package/lib/services/agent/editExisting/editAssembler.d.ts.map +1 -0
  70. package/lib/services/agent/editExisting/editAssembler.js +172 -0
  71. package/lib/services/agent/editExisting/editExisting.schema.d.ts +119 -0
  72. package/lib/services/agent/editExisting/editExisting.schema.d.ts.map +1 -0
  73. package/lib/services/agent/editExisting/editExisting.schema.js +157 -0
  74. package/lib/services/agent/editExisting/highlightPicker.d.ts +48 -0
  75. package/lib/services/agent/editExisting/highlightPicker.d.ts.map +1 -0
  76. package/lib/services/agent/editExisting/highlightPicker.js +199 -0
  77. package/lib/services/agent/editExisting/index.d.ts +4 -0
  78. package/lib/services/agent/editExisting/index.d.ts.map +1 -0
  79. package/lib/services/agent/editExisting/index.js +19 -0
  80. package/lib/services/agent/eval/recorder.d.ts +13 -1
  81. package/lib/services/agent/eval/recorder.d.ts.map +1 -1
  82. package/lib/services/agent/eval/recorder.js +59 -0
  83. package/lib/services/agent/eval/seedBriefs.d.ts +4 -3
  84. package/lib/services/agent/eval/seedBriefs.d.ts.map +1 -1
  85. package/lib/services/agent/eval/seedBriefs.js +283 -3
  86. package/lib/services/agent/eval/types.d.ts +10 -0
  87. package/lib/services/agent/eval/types.d.ts.map +1 -1
  88. package/lib/services/agent/executor/core.d.ts +70 -0
  89. package/lib/services/agent/executor/core.d.ts.map +1 -0
  90. package/lib/services/agent/executor/core.js +250 -0
  91. package/lib/services/agent/executor/duration.d.ts +20 -0
  92. package/lib/services/agent/executor/duration.d.ts.map +1 -0
  93. package/lib/services/agent/executor/duration.js +46 -0
  94. package/lib/services/agent/executor/index.d.ts +15 -0
  95. package/lib/services/agent/executor/index.d.ts.map +1 -0
  96. package/lib/services/agent/executor/index.js +32 -0
  97. package/lib/services/agent/executor/types.d.ts +183 -0
  98. package/lib/services/agent/executor/types.d.ts.map +1 -0
  99. package/lib/services/agent/executor/types.js +29 -0
  100. package/lib/services/agent/executor/visual.d.ts +32 -0
  101. package/lib/services/agent/executor/visual.d.ts.map +1 -0
  102. package/lib/services/agent/executor/visual.js +400 -0
  103. package/lib/services/agent/executor/voice.d.ts +17 -0
  104. package/lib/services/agent/executor/voice.d.ts.map +1 -0
  105. package/lib/services/agent/executor/voice.js +119 -0
  106. package/lib/services/agent/extendChain.d.ts +101 -0
  107. package/lib/services/agent/extendChain.d.ts.map +1 -0
  108. package/lib/services/agent/extendChain.js +177 -0
  109. package/lib/services/agent/index.d.ts +11 -1
  110. package/lib/services/agent/index.d.ts.map +1 -1
  111. package/lib/services/agent/index.js +11 -1
  112. package/lib/services/agent/llmCaller.d.ts +7 -8
  113. package/lib/services/agent/llmCaller.d.ts.map +1 -1
  114. package/lib/services/agent/llmCallerAnthropic.d.ts +44 -31
  115. package/lib/services/agent/llmCallerAnthropic.d.ts.map +1 -1
  116. package/lib/services/agent/llmCallerAnthropic.js +135 -60
  117. package/lib/services/agent/llmCallerFactory.d.ts +34 -0
  118. package/lib/services/agent/llmCallerFactory.d.ts.map +1 -0
  119. package/lib/services/agent/llmCallerFactory.js +31 -0
  120. package/lib/services/agent/llmCallerGemini.d.ts +62 -0
  121. package/lib/services/agent/llmCallerGemini.d.ts.map +1 -0
  122. package/lib/services/agent/llmCallerGemini.js +235 -0
  123. package/lib/services/agent/llmCallerOpenai.d.ts +56 -0
  124. package/lib/services/agent/llmCallerOpenai.d.ts.map +1 -0
  125. package/lib/services/agent/llmCallerOpenai.js +230 -0
  126. package/lib/services/agent/llmCallerRegistry.d.ts.map +1 -1
  127. package/lib/services/agent/llmCallerRegistry.js +7 -7
  128. package/lib/services/agent/llmCallerRouting.d.ts +63 -0
  129. package/lib/services/agent/llmCallerRouting.d.ts.map +1 -0
  130. package/lib/services/agent/llmCallerRouting.js +124 -0
  131. package/lib/services/agent/llmModelRegistry.d.ts +59 -0
  132. package/lib/services/agent/llmModelRegistry.d.ts.map +1 -0
  133. package/lib/services/agent/llmModelRegistry.js +168 -0
  134. package/lib/services/agent/llmRetry.d.ts +57 -0
  135. package/lib/services/agent/llmRetry.d.ts.map +1 -0
  136. package/lib/services/agent/llmRetry.js +102 -0
  137. package/lib/services/agent/modelRouter.d.ts +3 -3
  138. package/lib/services/agent/modelRouter.d.ts.map +1 -1
  139. package/lib/services/agent/modelRouter.js +27 -13
  140. package/lib/services/agent/planMutations.d.ts +54 -1
  141. package/lib/services/agent/planMutations.d.ts.map +1 -1
  142. package/lib/services/agent/planMutations.js +78 -0
  143. package/lib/services/agent/planner/Planner.d.ts +0 -17
  144. package/lib/services/agent/planner/Planner.d.ts.map +1 -1
  145. package/lib/services/agent/planner/Planner.js +67 -303
  146. package/lib/services/agent/planner/overlayRegen.d.ts +38 -0
  147. package/lib/services/agent/planner/overlayRegen.d.ts.map +1 -0
  148. package/lib/services/agent/planner/overlayRegen.js +145 -0
  149. package/lib/services/agent/planner/plannerMessages.d.ts +34 -0
  150. package/lib/services/agent/planner/plannerMessages.d.ts.map +1 -0
  151. package/lib/services/agent/planner/plannerMessages.js +185 -0
  152. package/lib/services/agent/planner/promptSections.d.ts +12 -0
  153. package/lib/services/agent/planner/promptSections.d.ts.map +1 -1
  154. package/lib/services/agent/planner/promptSections.js +57 -0
  155. package/lib/services/agent/planner/scriptFirstPlanner.d.ts +35 -0
  156. package/lib/services/agent/planner/scriptFirstPlanner.d.ts.map +1 -0
  157. package/lib/services/agent/planner/scriptFirstPlanner.js +140 -0
  158. package/lib/services/agent/planner/structuralRules.d.ts +10 -0
  159. package/lib/services/agent/planner/structuralRules.d.ts.map +1 -1
  160. package/lib/services/agent/planner/structuralRules.js +92 -9
  161. package/lib/services/agent/planner/validators.d.ts +18 -0
  162. package/lib/services/agent/planner/validators.d.ts.map +1 -1
  163. package/lib/services/agent/planner/validators.js +97 -0
  164. package/lib/services/agent/planner.d.ts +2 -1
  165. package/lib/services/agent/planner.d.ts.map +1 -1
  166. package/lib/services/agent/planner.js +5 -1
  167. package/lib/services/agent/priorProject.d.ts +26 -0
  168. package/lib/services/agent/priorProject.d.ts.map +1 -0
  169. package/lib/services/agent/priorProject.js +51 -0
  170. package/lib/services/agent/providerFallback/chains.d.ts.map +1 -1
  171. package/lib/services/agent/providerFallback/chains.js +27 -15
  172. package/lib/services/agent/repurpose/index.d.ts +3 -0
  173. package/lib/services/agent/repurpose/index.d.ts.map +1 -0
  174. package/lib/services/agent/repurpose/index.js +18 -0
  175. package/lib/services/agent/repurpose/repurpose.schema.d.ts +132 -0
  176. package/lib/services/agent/repurpose/repurpose.schema.d.ts.map +1 -0
  177. package/lib/services/agent/repurpose/repurpose.schema.js +144 -0
  178. package/lib/services/agent/repurpose/shortsPicker.d.ts +25 -0
  179. package/lib/services/agent/repurpose/shortsPicker.d.ts.map +1 -0
  180. package/lib/services/agent/repurpose/shortsPicker.js +218 -0
  181. package/lib/services/agent/runHelpers.d.ts +21 -2
  182. package/lib/services/agent/runHelpers.d.ts.map +1 -1
  183. package/lib/services/agent/runHelpers.js +71 -2
  184. package/lib/services/agent/tools/animateImage.tool.d.ts +1 -0
  185. package/lib/services/agent/tools/animateImage.tool.d.ts.map +1 -1
  186. package/lib/services/agent/tools/animateImage.tool.js +12 -0
  187. package/lib/services/agent/tools/chapterOutline.tool.d.ts +42 -0
  188. package/lib/services/agent/tools/chapterOutline.tool.d.ts.map +1 -0
  189. package/lib/services/agent/tools/chapterOutline.tool.js +115 -0
  190. package/lib/services/agent/tools/composeScene.tool.d.ts +65 -2
  191. package/lib/services/agent/tools/composeScene.tool.d.ts.map +1 -1
  192. package/lib/services/agent/tools/estimateCost.tool.d.ts +28 -1
  193. package/lib/services/agent/tools/estimateCost.tool.d.ts.map +1 -1
  194. package/lib/services/agent/tools/estimateCost.tool.js +55 -7
  195. package/lib/services/agent/tools/extendVideo.tool.d.ts +26 -0
  196. package/lib/services/agent/tools/extendVideo.tool.d.ts.map +1 -0
  197. package/lib/services/agent/tools/extendVideo.tool.js +149 -0
  198. package/lib/services/agent/tools/generateScript.tool.d.ts +184 -0
  199. package/lib/services/agent/tools/generateScript.tool.d.ts.map +1 -0
  200. package/lib/services/agent/tools/generateScript.tool.js +123 -0
  201. package/lib/services/agent/tools/generateVideo.tool.d.ts +1 -0
  202. package/lib/services/agent/tools/generateVideo.tool.d.ts.map +1 -1
  203. package/lib/services/agent/tools/generateVideo.tool.js +20 -1
  204. package/lib/services/agent/tools/index.d.ts +4 -0
  205. package/lib/services/agent/tools/index.d.ts.map +1 -1
  206. package/lib/services/agent/tools/index.js +4 -0
  207. package/lib/services/agent/tools/matchBrollToScript.tool.d.ts +50 -0
  208. package/lib/services/agent/tools/matchBrollToScript.tool.d.ts.map +1 -0
  209. package/lib/services/agent/tools/matchBrollToScript.tool.js +139 -0
  210. package/lib/services/agent/tools/planVideo.tool.d.ts +57 -1
  211. package/lib/services/agent/tools/planVideo.tool.d.ts.map +1 -1
  212. package/lib/services/agent/tools/planVideo.tool.js +3 -3
  213. package/lib/services/agent/tools/render.tool.d.ts +22 -1
  214. package/lib/services/agent/tools/render.tool.d.ts.map +1 -1
  215. package/lib/services/aiGen/aiGenFactory.service.d.ts.map +1 -1
  216. package/lib/services/aiGen/aiGenFactory.service.js +18 -3
  217. package/lib/services/aiGen/helpers.d.ts +8 -0
  218. package/lib/services/aiGen/helpers.d.ts.map +1 -1
  219. package/lib/services/aiGen/helpers.js +12 -0
  220. package/lib/services/aiGen/providers/anthropic/anthropic.service.d.ts +26 -0
  221. package/lib/services/aiGen/providers/anthropic/anthropic.service.d.ts.map +1 -0
  222. package/lib/services/aiGen/providers/anthropic/anthropic.service.js +95 -0
  223. package/lib/services/aiGen/providers/google/google.service.d.ts +25 -1
  224. package/lib/services/aiGen/providers/google/google.service.d.ts.map +1 -1
  225. package/lib/services/aiGen/providers/google/google.service.js +136 -237
  226. package/lib/services/aiGen/providers/google/googleApiKeys.d.ts +71 -0
  227. package/lib/services/aiGen/providers/google/googleApiKeys.d.ts.map +1 -0
  228. package/lib/services/aiGen/providers/google/googleApiKeys.js +137 -0
  229. package/lib/services/aiGen/providers/google/googleErrors.d.ts +13 -0
  230. package/lib/services/aiGen/providers/google/googleErrors.d.ts.map +1 -0
  231. package/lib/services/aiGen/providers/google/googleErrors.js +102 -0
  232. package/lib/services/aiGen/providers/google/googleFetch.d.ts +8 -0
  233. package/lib/services/aiGen/providers/google/googleFetch.d.ts.map +1 -0
  234. package/lib/services/aiGen/providers/google/googleFetch.js +96 -0
  235. package/lib/services/aiGen/providers/google/googleKeyPool.d.ts +52 -0
  236. package/lib/services/aiGen/providers/google/googleKeyPool.d.ts.map +1 -0
  237. package/lib/services/aiGen/providers/google/googleKeyPool.js +129 -0
  238. package/lib/services/aiGen/providers/google/googleMusic.d.ts +15 -0
  239. package/lib/services/aiGen/providers/google/googleMusic.d.ts.map +1 -0
  240. package/lib/services/aiGen/providers/google/googleMusic.js +77 -0
  241. package/lib/services/aiGen/providers/kling/kling.service.d.ts +7 -3
  242. package/lib/services/aiGen/providers/kling/kling.service.d.ts.map +1 -1
  243. package/lib/services/aiGen/providers/kling/kling.service.js +23 -367
  244. package/lib/services/aiGen/providers/kling/klingCredits.d.ts +9 -0
  245. package/lib/services/aiGen/providers/kling/klingCredits.d.ts.map +1 -0
  246. package/lib/services/aiGen/providers/kling/klingCredits.js +63 -0
  247. package/lib/services/aiGen/providers/kling/klingRequests.d.ts +32 -0
  248. package/lib/services/aiGen/providers/kling/klingRequests.d.ts.map +1 -0
  249. package/lib/services/aiGen/providers/kling/klingRequests.js +194 -0
  250. package/lib/services/aiGen/providers/kling/klingStatus.d.ts +16 -0
  251. package/lib/services/aiGen/providers/kling/klingStatus.d.ts.map +1 -0
  252. package/lib/services/aiGen/providers/kling/klingStatus.js +173 -0
  253. package/lib/services/aiGen/providers/pixverse/pixverse.service.d.ts.map +1 -1
  254. package/lib/services/aiGen/providers/pixverse/pixverse.service.js +7 -1
  255. package/lib/services/bullmq.service.d.ts +61 -0
  256. package/lib/services/bullmq.service.d.ts.map +1 -1
  257. package/lib/services/bullmq.service.js +124 -2
  258. package/lib/services/crypto/index.d.ts +2 -0
  259. package/lib/services/crypto/index.d.ts.map +1 -0
  260. package/lib/services/crypto/index.js +17 -0
  261. package/lib/services/crypto/tokenVault.d.ts +47 -0
  262. package/lib/services/crypto/tokenVault.d.ts.map +1 -0
  263. package/lib/services/crypto/tokenVault.js +179 -0
  264. package/lib/services/editor/captionStyleHint.d.ts +3 -0
  265. package/lib/services/editor/captionStyleHint.d.ts.map +1 -0
  266. package/lib/services/editor/captionStyleHint.js +112 -0
  267. package/lib/services/editor/planToProject.d.ts +7 -66
  268. package/lib/services/editor/planToProject.d.ts.map +1 -1
  269. package/lib/services/editor/planToProject.helpers.d.ts +40 -0
  270. package/lib/services/editor/planToProject.helpers.d.ts.map +1 -0
  271. package/lib/services/editor/planToProject.helpers.js +177 -0
  272. package/lib/services/editor/planToProject.js +197 -180
  273. package/lib/services/editor/planToProject.types.d.ts +94 -0
  274. package/lib/services/editor/planToProject.types.d.ts.map +1 -0
  275. package/lib/services/editor/planToProject.types.js +2 -0
  276. package/lib/services/firestore.service.d.ts +5 -0
  277. package/lib/services/firestore.service.d.ts.map +1 -1
  278. package/lib/services/firestore.service.js +13 -0
  279. package/lib/services/index.d.ts +13 -0
  280. package/lib/services/index.d.ts.map +1 -1
  281. package/lib/services/index.js +13 -0
  282. package/lib/services/promptEnhancer/index.d.ts +18 -0
  283. package/lib/services/promptEnhancer/index.d.ts.map +1 -0
  284. package/lib/services/promptEnhancer/index.js +33 -0
  285. package/lib/services/promptEnhancer/models.d.ts +54 -0
  286. package/lib/services/promptEnhancer/models.d.ts.map +1 -0
  287. package/lib/services/promptEnhancer/models.js +37 -0
  288. package/lib/services/promptEnhancer/profiles/agent.profile.d.ts +14 -0
  289. package/lib/services/promptEnhancer/profiles/agent.profile.d.ts.map +1 -0
  290. package/lib/services/promptEnhancer/profiles/agent.profile.js +40 -0
  291. package/lib/services/promptEnhancer/profiles/avatar.profile.d.ts +13 -0
  292. package/lib/services/promptEnhancer/profiles/avatar.profile.d.ts.map +1 -0
  293. package/lib/services/promptEnhancer/profiles/avatar.profile.js +40 -0
  294. package/lib/services/promptEnhancer/profiles/base.d.ts +28 -0
  295. package/lib/services/promptEnhancer/profiles/base.d.ts.map +1 -0
  296. package/lib/services/promptEnhancer/profiles/base.js +35 -0
  297. package/lib/services/promptEnhancer/profiles/image.profile.d.ts +11 -0
  298. package/lib/services/promptEnhancer/profiles/image.profile.d.ts.map +1 -0
  299. package/lib/services/promptEnhancer/profiles/image.profile.js +42 -0
  300. package/lib/services/promptEnhancer/profiles/index.d.ts +12 -0
  301. package/lib/services/promptEnhancer/profiles/index.d.ts.map +1 -0
  302. package/lib/services/promptEnhancer/profiles/index.js +33 -0
  303. package/lib/services/promptEnhancer/profiles/video.profile.d.ts +15 -0
  304. package/lib/services/promptEnhancer/profiles/video.profile.d.ts.map +1 -0
  305. package/lib/services/promptEnhancer/profiles/video.profile.js +81 -0
  306. package/lib/services/promptEnhancer/promptEnhancer.service.d.ts +45 -0
  307. package/lib/services/promptEnhancer/promptEnhancer.service.d.ts.map +1 -0
  308. package/lib/services/promptEnhancer/promptEnhancer.service.js +157 -0
  309. package/lib/services/promptEnhancer/schema.d.ts +19 -0
  310. package/lib/services/promptEnhancer/schema.d.ts.map +1 -0
  311. package/lib/services/promptEnhancer/schema.js +43 -0
  312. package/lib/services/promptEnhancer/types.d.ts +112 -0
  313. package/lib/services/promptEnhancer/types.d.ts.map +1 -0
  314. package/lib/services/promptEnhancer/types.js +2 -0
  315. package/lib/services/rateLimiter/distributedRateLimiter.service.d.ts +60 -5
  316. package/lib/services/rateLimiter/distributedRateLimiter.service.d.ts.map +1 -1
  317. package/lib/services/rateLimiter/distributedRateLimiter.service.js +184 -16
  318. package/lib/services/socialAI/captionGen.d.ts +81 -0
  319. package/lib/services/socialAI/captionGen.d.ts.map +1 -0
  320. package/lib/services/socialAI/captionGen.js +206 -0
  321. package/lib/services/socialAI/hookScore.d.ts +85 -0
  322. package/lib/services/socialAI/hookScore.d.ts.map +1 -0
  323. package/lib/services/socialAI/hookScore.js +170 -0
  324. package/lib/services/socialAI/index.d.ts +3 -0
  325. package/lib/services/socialAI/index.d.ts.map +1 -0
  326. package/lib/services/socialAI/index.js +18 -0
  327. package/lib/services/socialAccounts/index.d.ts +2 -0
  328. package/lib/services/socialAccounts/index.d.ts.map +1 -0
  329. package/lib/services/socialAccounts/index.js +17 -0
  330. package/lib/services/socialAccounts/socialAccountService.d.ts +25 -0
  331. package/lib/services/socialAccounts/socialAccountService.d.ts.map +1 -0
  332. package/lib/services/socialAccounts/socialAccountService.js +105 -0
  333. package/lib/services/socialEngage/factory.d.ts +7 -0
  334. package/lib/services/socialEngage/factory.d.ts.map +1 -0
  335. package/lib/services/socialEngage/factory.js +25 -0
  336. package/lib/services/socialEngage/index.d.ts +6 -0
  337. package/lib/services/socialEngage/index.d.ts.map +1 -0
  338. package/lib/services/socialEngage/index.js +21 -0
  339. package/lib/services/socialEngage/meta.engage.d.ts +17 -0
  340. package/lib/services/socialEngage/meta.engage.d.ts.map +1 -0
  341. package/lib/services/socialEngage/meta.engage.js +128 -0
  342. package/lib/services/socialEngage/metaWebhook.d.ts +50 -0
  343. package/lib/services/socialEngage/metaWebhook.d.ts.map +1 -0
  344. package/lib/services/socialEngage/metaWebhook.js +93 -0
  345. package/lib/services/socialEngage/types.d.ts +72 -0
  346. package/lib/services/socialEngage/types.d.ts.map +1 -0
  347. package/lib/services/socialEngage/types.js +10 -0
  348. package/lib/services/socialEngage/youtube.engage.d.ts +9 -0
  349. package/lib/services/socialEngage/youtube.engage.d.ts.map +1 -0
  350. package/lib/services/socialEngage/youtube.engage.js +87 -0
  351. package/lib/services/socialFormat/aspectGeometry.d.ts +74 -0
  352. package/lib/services/socialFormat/aspectGeometry.d.ts.map +1 -0
  353. package/lib/services/socialFormat/aspectGeometry.js +135 -0
  354. package/lib/services/socialFormat/index.d.ts +2 -0
  355. package/lib/services/socialFormat/index.d.ts.map +1 -0
  356. package/lib/services/socialFormat/index.js +19 -0
  357. package/lib/services/socialInsights/index.d.ts +3 -0
  358. package/lib/services/socialInsights/index.d.ts.map +1 -0
  359. package/lib/services/socialInsights/index.js +18 -0
  360. package/lib/services/socialInsights/recommendations.d.ts +131 -0
  361. package/lib/services/socialInsights/recommendations.d.ts.map +1 -0
  362. package/lib/services/socialInsights/recommendations.js +277 -0
  363. package/lib/services/socialInsights/timeBuckets.d.ts +35 -0
  364. package/lib/services/socialInsights/timeBuckets.d.ts.map +1 -0
  365. package/lib/services/socialInsights/timeBuckets.js +78 -0
  366. package/lib/services/socialMetrics/factory.d.ts +5 -0
  367. package/lib/services/socialMetrics/factory.d.ts.map +1 -0
  368. package/lib/services/socialMetrics/factory.js +24 -0
  369. package/lib/services/socialMetrics/index.d.ts +6 -0
  370. package/lib/services/socialMetrics/index.d.ts.map +1 -0
  371. package/lib/services/socialMetrics/index.js +21 -0
  372. package/lib/services/socialMetrics/meta.metrics.d.ts +22 -0
  373. package/lib/services/socialMetrics/meta.metrics.d.ts.map +1 -0
  374. package/lib/services/socialMetrics/meta.metrics.js +137 -0
  375. package/lib/services/socialMetrics/tiktok.metrics.d.ts +8 -0
  376. package/lib/services/socialMetrics/tiktok.metrics.d.ts.map +1 -0
  377. package/lib/services/socialMetrics/tiktok.metrics.js +43 -0
  378. package/lib/services/socialMetrics/types.d.ts +54 -0
  379. package/lib/services/socialMetrics/types.d.ts.map +1 -0
  380. package/lib/services/socialMetrics/types.js +2 -0
  381. package/lib/services/socialMetrics/youtube.metrics.d.ts +8 -0
  382. package/lib/services/socialMetrics/youtube.metrics.d.ts.map +1 -0
  383. package/lib/services/socialMetrics/youtube.metrics.js +43 -0
  384. package/lib/services/socialOAuth/factory.d.ts +7 -0
  385. package/lib/services/socialOAuth/factory.d.ts.map +1 -0
  386. package/lib/services/socialOAuth/factory.js +42 -0
  387. package/lib/services/socialOAuth/index.d.ts +11 -0
  388. package/lib/services/socialOAuth/index.d.ts.map +1 -0
  389. package/lib/services/socialOAuth/index.js +26 -0
  390. package/lib/services/socialOAuth/linkedin.oauth.d.ts +14 -0
  391. package/lib/services/socialOAuth/linkedin.oauth.d.ts.map +1 -0
  392. package/lib/services/socialOAuth/linkedin.oauth.js +127 -0
  393. package/lib/services/socialOAuth/meta.oauth.d.ts +31 -0
  394. package/lib/services/socialOAuth/meta.oauth.d.ts.map +1 -0
  395. package/lib/services/socialOAuth/meta.oauth.js +214 -0
  396. package/lib/services/socialOAuth/oauthState.d.ts +14 -0
  397. package/lib/services/socialOAuth/oauthState.d.ts.map +1 -0
  398. package/lib/services/socialOAuth/oauthState.js +66 -0
  399. package/lib/services/socialOAuth/pinterest.oauth.d.ts +15 -0
  400. package/lib/services/socialOAuth/pinterest.oauth.d.ts.map +1 -0
  401. package/lib/services/socialOAuth/pinterest.oauth.js +126 -0
  402. package/lib/services/socialOAuth/threads.oauth.d.ts +14 -0
  403. package/lib/services/socialOAuth/threads.oauth.d.ts.map +1 -0
  404. package/lib/services/socialOAuth/threads.oauth.js +129 -0
  405. package/lib/services/socialOAuth/tiktok.oauth.d.ts +15 -0
  406. package/lib/services/socialOAuth/tiktok.oauth.d.ts.map +1 -0
  407. package/lib/services/socialOAuth/tiktok.oauth.js +151 -0
  408. package/lib/services/socialOAuth/types.d.ts +67 -0
  409. package/lib/services/socialOAuth/types.d.ts.map +1 -0
  410. package/lib/services/socialOAuth/types.js +2 -0
  411. package/lib/services/socialOAuth/x.oauth.d.ts +17 -0
  412. package/lib/services/socialOAuth/x.oauth.d.ts.map +1 -0
  413. package/lib/services/socialOAuth/x.oauth.js +134 -0
  414. package/lib/services/socialOAuth/youtube.oauth.d.ts +15 -0
  415. package/lib/services/socialOAuth/youtube.oauth.d.ts.map +1 -0
  416. package/lib/services/socialOAuth/youtube.oauth.js +156 -0
  417. package/lib/services/socialPublish/factory.d.ts +5 -0
  418. package/lib/services/socialPublish/factory.d.ts.map +1 -0
  419. package/lib/services/socialPublish/factory.js +32 -0
  420. package/lib/services/socialPublish/index.d.ts +10 -0
  421. package/lib/services/socialPublish/index.d.ts.map +1 -0
  422. package/lib/services/socialPublish/index.js +25 -0
  423. package/lib/services/socialPublish/linkedin.publish.d.ts +9 -0
  424. package/lib/services/socialPublish/linkedin.publish.d.ts.map +1 -0
  425. package/lib/services/socialPublish/linkedin.publish.js +143 -0
  426. package/lib/services/socialPublish/meta.publish.d.ts +28 -0
  427. package/lib/services/socialPublish/meta.publish.d.ts.map +1 -0
  428. package/lib/services/socialPublish/meta.publish.js +149 -0
  429. package/lib/services/socialPublish/pinterest.publish.d.ts +13 -0
  430. package/lib/services/socialPublish/pinterest.publish.d.ts.map +1 -0
  431. package/lib/services/socialPublish/pinterest.publish.js +130 -0
  432. package/lib/services/socialPublish/threads.publish.d.ts +12 -0
  433. package/lib/services/socialPublish/threads.publish.d.ts.map +1 -0
  434. package/lib/services/socialPublish/threads.publish.js +96 -0
  435. package/lib/services/socialPublish/tiktok.publish.d.ts +13 -0
  436. package/lib/services/socialPublish/tiktok.publish.d.ts.map +1 -0
  437. package/lib/services/socialPublish/tiktok.publish.js +118 -0
  438. package/lib/services/socialPublish/types.d.ts +47 -0
  439. package/lib/services/socialPublish/types.d.ts.map +1 -0
  440. package/lib/services/socialPublish/types.js +2 -0
  441. package/lib/services/socialPublish/x.publish.d.ts +12 -0
  442. package/lib/services/socialPublish/x.publish.d.ts.map +1 -0
  443. package/lib/services/socialPublish/x.publish.js +147 -0
  444. package/lib/services/socialPublish/youtube.publish.d.ts +9 -0
  445. package/lib/services/socialPublish/youtube.publish.d.ts.map +1 -0
  446. package/lib/services/socialPublish/youtube.publish.js +107 -0
  447. package/lib/services/stock/index.d.ts +2 -0
  448. package/lib/services/stock/index.d.ts.map +1 -0
  449. package/lib/services/stock/index.js +17 -0
  450. package/lib/services/stock/realPersonSafety.d.ts +99 -0
  451. package/lib/services/stock/realPersonSafety.d.ts.map +1 -0
  452. package/lib/services/stock/realPersonSafety.js +248 -0
  453. package/lib/services/translation/index.d.ts +2 -0
  454. package/lib/services/translation/index.d.ts.map +1 -0
  455. package/lib/services/translation/index.js +9 -0
  456. package/lib/services/translation/translation.service.d.ts +50 -0
  457. package/lib/services/translation/translation.service.d.ts.map +1 -0
  458. package/lib/services/translation/translation.service.js +211 -0
  459. package/lib/utils/helpers.d.ts +2 -4
  460. package/lib/utils/helpers.d.ts.map +1 -1
  461. package/lib/utils/helpers.js +9 -63
  462. package/lib/utils/index.d.ts +1 -0
  463. package/lib/utils/index.d.ts.map +1 -1
  464. package/lib/utils/index.js +1 -0
  465. package/lib/utils/renderTier.d.ts +26 -0
  466. package/lib/utils/renderTier.d.ts.map +1 -0
  467. package/lib/utils/renderTier.js +34 -0
  468. package/package.json +1 -1
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GeminiLlmCaller = void 0;
4
+ const genai_1 = require("@google/genai");
5
+ const zod_1 = require("zod");
6
+ const llmModelRegistry_1 = require("./llmModelRegistry");
7
+ const llmRetry_1 = require("./llmRetry");
8
+ const TRANSIENT_HTTP = new Set([408, 425, 429, 500, 502, 503, 504]);
9
+ class GeminiLlmCaller {
10
+ constructor(cfg) {
11
+ this.ai = new genai_1.GoogleGenAI({ apiKey: cfg.apiKey });
12
+ this.maxRetries = cfg.maxRetries ?? 3;
13
+ this.fetchImpl = cfg.fetchImpl ?? fetch;
14
+ }
15
+ async chat(req) {
16
+ const { systemInstruction, contents } = await this.encode(req.messages);
17
+ const resp = await this.withRetry(() => this.ai.models.generateContent({
18
+ model: this.resolveModelId(req.model),
19
+ contents,
20
+ config: this.buildConfig({
21
+ systemInstruction,
22
+ temperature: req.temperature,
23
+ maxTokens: req.maxTokens,
24
+ stop: req.stop,
25
+ }),
26
+ }));
27
+ return {
28
+ text: resp.text ?? "",
29
+ usage: this.usage(resp),
30
+ requestId: resp.responseId,
31
+ attemptedModels: [req.model],
32
+ usedFallback: false,
33
+ };
34
+ }
35
+ async structured(req) {
36
+ const { systemInstruction, contents } = await this.encode(req.messages);
37
+ const jsonSchema = zod_1.z.toJSONSchema(req.schema, { target: "draft-7" });
38
+ const resp = await this.withRetry(() => this.ai.models.generateContent({
39
+ model: this.resolveModelId(req.model),
40
+ contents,
41
+ config: this.buildConfig({
42
+ systemInstruction,
43
+ temperature: req.temperature,
44
+ maxTokens: req.maxTokens,
45
+ responseSchema: jsonSchema,
46
+ }),
47
+ }));
48
+ return {
49
+ ...this.parseStructured(req, resp.text ?? ""),
50
+ usage: this.usage(resp),
51
+ requestId: resp.responseId,
52
+ attemptedModels: [req.model],
53
+ usedFallback: false,
54
+ };
55
+ }
56
+ structuredStream(req) {
57
+ let resolveResult;
58
+ let rejectResult;
59
+ const result = new Promise((resolve, reject) => {
60
+ resolveResult = resolve;
61
+ rejectResult = reject;
62
+ });
63
+ const self = this;
64
+ const tokens = {
65
+ [Symbol.asyncIterator]() {
66
+ return self.streamIterator(req, resolveResult, rejectResult);
67
+ },
68
+ };
69
+ return { tokens, result };
70
+ }
71
+ async *streamIterator(req, resolveResult, rejectResult) {
72
+ let accumulated = "";
73
+ let requestId;
74
+ let usage;
75
+ try {
76
+ const { systemInstruction, contents } = await this.encode(req.messages);
77
+ const jsonSchema = zod_1.z.toJSONSchema(req.schema, { target: "draft-7" });
78
+ const stream = await this.withRetry(() => this.ai.models.generateContentStream({
79
+ model: this.resolveModelId(req.model),
80
+ contents,
81
+ config: this.buildConfig({
82
+ systemInstruction,
83
+ temperature: req.temperature,
84
+ maxTokens: req.maxTokens,
85
+ responseSchema: jsonSchema,
86
+ }),
87
+ }));
88
+ for await (const chunk of stream) {
89
+ if (chunk.responseId)
90
+ requestId = chunk.responseId;
91
+ const u = this.usage(chunk);
92
+ if (u)
93
+ usage = u;
94
+ const delta = chunk.text ?? "";
95
+ if (delta) {
96
+ accumulated += delta;
97
+ yield delta;
98
+ }
99
+ }
100
+ // Post-stream parse/validate failures reject the RESULT promise but must
101
+ // NOT throw out of the generator (same contract as the other callers —
102
+ // the planner's retry fallback awaits `result`).
103
+ try {
104
+ const parsed = this.parseStructured(req, accumulated);
105
+ resolveResult({
106
+ data: parsed.data,
107
+ usage,
108
+ requestId,
109
+ attemptedModels: [req.model],
110
+ usedFallback: false,
111
+ });
112
+ }
113
+ catch (e) {
114
+ rejectResult(e);
115
+ return;
116
+ }
117
+ }
118
+ catch (e) {
119
+ rejectResult(e);
120
+ throw e;
121
+ }
122
+ }
123
+ // ---------- helpers ----------
124
+ buildConfig(opts) {
125
+ const config = {};
126
+ if (opts.systemInstruction)
127
+ config.systemInstruction = opts.systemInstruction;
128
+ if (opts.temperature !== undefined)
129
+ config.temperature = opts.temperature;
130
+ if (opts.maxTokens !== undefined)
131
+ config.maxOutputTokens = opts.maxTokens;
132
+ if (opts.stop?.length)
133
+ config.stopSequences = opts.stop;
134
+ if (opts.responseSchema) {
135
+ config.responseMimeType = "application/json";
136
+ config.responseSchema = opts.responseSchema;
137
+ }
138
+ return config;
139
+ }
140
+ /**
141
+ * Split system messages into a merged `systemInstruction` and map the rest to
142
+ * Gemini `Content` (user/model roles). Vision images are fetched + inlined.
143
+ */
144
+ async encode(messages) {
145
+ let systemInstruction;
146
+ const contents = [];
147
+ for (const m of messages) {
148
+ if (m.role === "system") {
149
+ systemInstruction = systemInstruction
150
+ ? `${systemInstruction}\n\n${m.content}`
151
+ : m.content;
152
+ continue;
153
+ }
154
+ const role = m.role === "assistant" ? "model" : "user";
155
+ const parts = [{ text: m.content }];
156
+ if (m.imageUrls?.length) {
157
+ for (const url of m.imageUrls) {
158
+ parts.push(await this.toInlinePart(url));
159
+ }
160
+ }
161
+ contents.push({ role, parts });
162
+ }
163
+ return { systemInstruction, contents };
164
+ }
165
+ /** Fetch an image URL and inline it as base64 (Gemini rejects raw https URLs). */
166
+ async toInlinePart(url) {
167
+ if (url.startsWith("data:")) {
168
+ const [meta, data] = url.split(",", 2);
169
+ const mimeType = meta?.slice(5).split(";")[0] || "image/jpeg";
170
+ return { inlineData: { mimeType, data: data ?? "" } };
171
+ }
172
+ const res = await this.fetchImpl(url);
173
+ if (!res.ok) {
174
+ throw new Error(`GeminiLlmCaller.toInlinePart: ${res.status} ${res.statusText} fetching ${url}`);
175
+ }
176
+ const mimeType = res.headers.get("content-type")?.split(";")[0]?.trim() || "image/jpeg";
177
+ const buf = Buffer.from(await res.arrayBuffer());
178
+ return { inlineData: { mimeType, data: buf.toString("base64") } };
179
+ }
180
+ parseStructured(req, txt) {
181
+ if (!txt) {
182
+ throw new Error(`GeminiLlmCaller.structured: empty response for schema ${req.schemaName}`);
183
+ }
184
+ let parsed;
185
+ try {
186
+ parsed = JSON.parse(txt);
187
+ }
188
+ catch {
189
+ throw new Error(`GeminiLlmCaller.structured: model returned non-JSON for ${req.schemaName}: ${txt.slice(0, 200)}`);
190
+ }
191
+ const result = req.schema.safeParse(parsed);
192
+ if (!result.success) {
193
+ throw new Error(`GeminiLlmCaller.structured: schema validation failed for ${req.schemaName}: ${result.error.message}`);
194
+ }
195
+ return { data: result.data };
196
+ }
197
+ resolveModelId(m) {
198
+ if ((0, llmModelRegistry_1.normalizeProvider)(m.provider) !== "google") {
199
+ throw new Error(`GeminiLlmCaller cannot serve provider=${m.provider}; route via the dispatcher.`);
200
+ }
201
+ return (0, llmModelRegistry_1.nativeModelId)(m);
202
+ }
203
+ usage(resp) {
204
+ const u = resp.usageMetadata;
205
+ if (!u)
206
+ return undefined;
207
+ return {
208
+ promptTokens: u.promptTokenCount,
209
+ completionTokens: u.candidatesTokenCount,
210
+ };
211
+ }
212
+ /**
213
+ * Transport retry mapping the genai SDK's error shape (carries a numeric
214
+ * `status`) into the shared transient policy. Non-transient statuses
215
+ * (400/401/403/404) propagate immediately.
216
+ */
217
+ withRetry(fn) {
218
+ return (0, llmRetry_1.withRetry)(async () => {
219
+ try {
220
+ return await fn();
221
+ }
222
+ catch (err) {
223
+ const status = err?.status;
224
+ if (typeof status === "number" && !TRANSIENT_HTTP.has(status)) {
225
+ throw err;
226
+ }
227
+ if (typeof status === "number" && TRANSIENT_HTTP.has(status)) {
228
+ throw new llmRetry_1.TransientLlmError(`Gemini ${status} error`, err);
229
+ }
230
+ throw err;
231
+ }
232
+ }, { maxRetries: this.maxRetries });
233
+ }
234
+ }
235
+ exports.GeminiLlmCaller = GeminiLlmCaller;
@@ -0,0 +1,56 @@
1
+ import { z } from "zod";
2
+ import { ChatRequest, ChatResponse, LlmCaller, StructuredRequest, StructuredResponse } from "./llmCaller";
3
+ /**
4
+ * Direct OpenAI SDK LlmCaller — native replacement for the OpenAI slice of the
5
+ * Vercel AI Gateway (LLM_NATIVE_MIGRATION_PLAN Phase 2).
6
+ *
7
+ * Single-provider: only serves `provider === "openai"` ModelChoices (the
8
+ * dispatcher routes by provider). Does NOT implement cross-provider model
9
+ * fallback — that's the ProviderRoutingLlmCaller's job; this caller only does
10
+ * transport retry via the shared `withRetry`.
11
+ *
12
+ * Structured output uses the native strict `json_schema` response_format —
13
+ * identical semantics to what the gateway sent to OpenAI, with the client-side
14
+ * `JSON.parse` + Zod `safeParse` kept as the source of truth so a strict-mode
15
+ * miss still surfaces as a deterministic (non-transient) error.
16
+ *
17
+ * Native wins over the gateway shape: automatic prompt caching on long stable
18
+ * prefixes (OpenAI caches ≥1024-token prompts server-side, billed at a
19
+ * discount, no flag needed) and direct provider billing.
20
+ */
21
+ export interface OpenAiCallerConfig {
22
+ apiKey: string;
23
+ /** Optional base URL override (e.g. an OpenAI-compatible endpoint). */
24
+ baseURL?: string;
25
+ /** Default request timeout in ms. Default 180s (matches planner budget). */
26
+ timeoutMs?: number;
27
+ /** Max retries on transient errors per call. Default 3. */
28
+ maxRetries?: number;
29
+ }
30
+ export declare class OpenAiLlmCaller implements LlmCaller {
31
+ private readonly client;
32
+ private readonly timeoutMs;
33
+ private readonly maxRetries;
34
+ constructor(cfg: OpenAiCallerConfig);
35
+ chat(req: ChatRequest): Promise<ChatResponse>;
36
+ structured<T extends z.ZodTypeAny>(req: StructuredRequest<T>): Promise<StructuredResponse<T>>;
37
+ structuredStream<T extends z.ZodTypeAny>(req: StructuredRequest<T>): {
38
+ tokens: AsyncIterable<string>;
39
+ result: Promise<StructuredResponse<T>>;
40
+ };
41
+ private streamIterator;
42
+ /** Shared non-streaming params: model id, encoded messages, sampling knobs. */
43
+ private baseParams;
44
+ private encodeMessage;
45
+ /** Parse + Zod-validate the model's text. Throws plain (non-transient) Error. */
46
+ private parseStructured;
47
+ private resolveModelId;
48
+ private usage;
49
+ /**
50
+ * Transport retry that re-classifies the OpenAI SDK's APIError shape (it
51
+ * carries a numeric `status`) into the shared transient policy. Non-transient
52
+ * statuses (400/401/403/404/422) propagate immediately.
53
+ */
54
+ private withRetry;
55
+ }
56
+ //# sourceMappingURL=llmCallerOpenai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llmCallerOpenai.d.ts","sourceRoot":"","sources":["../../../src/services/agent/llmCallerOpenai.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAKrB;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,GAAG,EAAE,kBAAkB;IAU7B,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAoB7C,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EACrC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IA4BjC,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;IAqE7B,+EAA+E;IAC/E,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,aAAa;IAkBrB,iFAAiF;IACjF,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,KAAK;IAUb;;;;OAIG;IACH,OAAO,CAAC,SAAS;CAyBlB"}
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OpenAiLlmCaller = void 0;
7
+ const openai_1 = __importDefault(require("openai"));
8
+ const zod_1 = require("zod");
9
+ const llmModelRegistry_1 = require("./llmModelRegistry");
10
+ const llmRetry_1 = require("./llmRetry");
11
+ const TRANSIENT_HTTP = new Set([408, 425, 429, 500, 502, 503, 504]);
12
+ class OpenAiLlmCaller {
13
+ constructor(cfg) {
14
+ this.client = new openai_1.default({
15
+ apiKey: cfg.apiKey,
16
+ ...(cfg.baseURL ? { baseURL: cfg.baseURL } : {}),
17
+ timeout: cfg.timeoutMs ?? 180000,
18
+ });
19
+ this.timeoutMs = cfg.timeoutMs ?? 180000;
20
+ this.maxRetries = cfg.maxRetries ?? 3;
21
+ }
22
+ async chat(req) {
23
+ const completion = await this.withRetry(() => this.client.chat.completions.create(this.baseParams(req.model, req.messages, {
24
+ temperature: req.temperature,
25
+ maxTokens: req.maxTokens,
26
+ stop: req.stop,
27
+ })));
28
+ const text = completion.choices?.[0]?.message?.content ?? "";
29
+ return {
30
+ text: typeof text === "string" ? text : JSON.stringify(text),
31
+ usage: this.usage(completion.usage),
32
+ requestId: completion.id,
33
+ attemptedModels: [req.model],
34
+ usedFallback: false,
35
+ };
36
+ }
37
+ async structured(req) {
38
+ const jsonSchema = zod_1.z.toJSONSchema(req.schema, { target: "draft-7" });
39
+ const completion = await this.withRetry(() => this.client.chat.completions.create({
40
+ ...this.baseParams(req.model, req.messages, {
41
+ temperature: req.temperature,
42
+ maxTokens: req.maxTokens,
43
+ }),
44
+ response_format: {
45
+ type: "json_schema",
46
+ json_schema: {
47
+ name: req.schemaName,
48
+ schema: jsonSchema,
49
+ strict: true,
50
+ },
51
+ },
52
+ }));
53
+ const txt = completion.choices?.[0]?.message?.content ?? "";
54
+ return {
55
+ ...this.parseStructured(req, txt),
56
+ usage: this.usage(completion.usage),
57
+ requestId: completion.id,
58
+ attemptedModels: [req.model],
59
+ usedFallback: false,
60
+ };
61
+ }
62
+ structuredStream(req) {
63
+ let resolveResult;
64
+ let rejectResult;
65
+ const result = new Promise((resolve, reject) => {
66
+ resolveResult = resolve;
67
+ rejectResult = reject;
68
+ });
69
+ const self = this;
70
+ const tokens = {
71
+ [Symbol.asyncIterator]() {
72
+ return self.streamIterator(req, resolveResult, rejectResult);
73
+ },
74
+ };
75
+ return { tokens, result };
76
+ }
77
+ async *streamIterator(req, resolveResult, rejectResult) {
78
+ const jsonSchema = zod_1.z.toJSONSchema(req.schema, { target: "draft-7" });
79
+ let accumulated = "";
80
+ let requestId;
81
+ let usage;
82
+ try {
83
+ // Connect with transient retry; once bytes flow a mid-stream drop
84
+ // propagates and the planner's own retry loop handles it (mirrors the
85
+ // gateway's streaming contract).
86
+ const stream = await this.withRetry(() => this.client.chat.completions.create({
87
+ ...this.baseParams(req.model, req.messages, {
88
+ temperature: req.temperature,
89
+ maxTokens: req.maxTokens,
90
+ }),
91
+ response_format: {
92
+ type: "json_schema",
93
+ json_schema: {
94
+ name: req.schemaName,
95
+ schema: jsonSchema,
96
+ strict: true,
97
+ },
98
+ },
99
+ stream: true,
100
+ stream_options: { include_usage: true },
101
+ }));
102
+ for await (const chunk of stream) {
103
+ if (chunk.id)
104
+ requestId = chunk.id;
105
+ if (chunk.usage) {
106
+ usage = {
107
+ promptTokens: chunk.usage.prompt_tokens,
108
+ completionTokens: chunk.usage.completion_tokens,
109
+ };
110
+ }
111
+ const delta = chunk.choices?.[0]?.delta?.content ?? "";
112
+ if (delta) {
113
+ accumulated += delta;
114
+ yield delta;
115
+ }
116
+ }
117
+ // Post-stream parse/validate failures reject the RESULT promise but must
118
+ // NOT throw out of the generator — the planner awaits `result` for its
119
+ // non-streaming retry fallback. (Same rationale as GatewayLlmCaller.)
120
+ try {
121
+ const parsed = this.parseStructured(req, accumulated);
122
+ resolveResult({
123
+ data: parsed.data,
124
+ usage,
125
+ requestId,
126
+ attemptedModels: [req.model],
127
+ usedFallback: false,
128
+ });
129
+ }
130
+ catch (e) {
131
+ rejectResult(e);
132
+ return;
133
+ }
134
+ }
135
+ catch (e) {
136
+ rejectResult(e);
137
+ throw e;
138
+ }
139
+ }
140
+ // ---------- helpers ----------
141
+ /** Shared non-streaming params: model id, encoded messages, sampling knobs. */
142
+ baseParams(model, messages, opts) {
143
+ return {
144
+ model: this.resolveModelId(model),
145
+ messages: messages.map((m) => this.encodeMessage(m)),
146
+ // Only send temperature when explicitly set — gpt-5 reasoning models
147
+ // reject non-default temperatures, and most agent calls leave it unset.
148
+ ...(opts.temperature !== undefined ? { temperature: opts.temperature } : {}),
149
+ // gpt-5 family requires max_completion_tokens (max_tokens is rejected on
150
+ // reasoning models); it's also accepted by non-reasoning models.
151
+ ...(opts.maxTokens !== undefined
152
+ ? { max_completion_tokens: opts.maxTokens }
153
+ : {}),
154
+ ...(opts.stop?.length ? { stop: opts.stop } : {}),
155
+ };
156
+ }
157
+ encodeMessage(m) {
158
+ if (!m.imageUrls?.length) {
159
+ return { role: m.role, content: m.content };
160
+ }
161
+ // OpenAI accepts https image URLs directly (no base64 round-trip needed).
162
+ // Only user messages carry image parts.
163
+ const parts = [
164
+ { type: "text", text: m.content },
165
+ ...m.imageUrls.map((url) => ({
166
+ type: "image_url",
167
+ image_url: { url },
168
+ })),
169
+ ];
170
+ return { role: "user", content: parts };
171
+ }
172
+ /** Parse + Zod-validate the model's text. Throws plain (non-transient) Error. */
173
+ parseStructured(req, txt) {
174
+ if (!txt || typeof txt !== "string") {
175
+ throw new Error(`OpenAiLlmCaller.structured: empty response for schema ${req.schemaName}`);
176
+ }
177
+ let parsed;
178
+ try {
179
+ parsed = JSON.parse(txt);
180
+ }
181
+ catch {
182
+ throw new Error(`OpenAiLlmCaller.structured: model returned non-JSON for ${req.schemaName}: ${txt.slice(0, 200)}`);
183
+ }
184
+ const result = req.schema.safeParse(parsed);
185
+ if (!result.success) {
186
+ throw new Error(`OpenAiLlmCaller.structured: schema validation failed for ${req.schemaName}: ${result.error.message}`);
187
+ }
188
+ return { data: result.data };
189
+ }
190
+ resolveModelId(m) {
191
+ if ((0, llmModelRegistry_1.normalizeProvider)(m.provider) !== "openai") {
192
+ throw new Error(`OpenAiLlmCaller cannot serve provider=${m.provider}; route via the dispatcher.`);
193
+ }
194
+ return (0, llmModelRegistry_1.nativeModelId)(m);
195
+ }
196
+ usage(u) {
197
+ if (!u)
198
+ return undefined;
199
+ return {
200
+ promptTokens: u.prompt_tokens,
201
+ completionTokens: u.completion_tokens,
202
+ };
203
+ }
204
+ /**
205
+ * Transport retry that re-classifies the OpenAI SDK's APIError shape (it
206
+ * carries a numeric `status`) into the shared transient policy. Non-transient
207
+ * statuses (400/401/403/404/422) propagate immediately.
208
+ */
209
+ withRetry(fn) {
210
+ return (0, llmRetry_1.withRetry)(async () => {
211
+ try {
212
+ return await fn();
213
+ }
214
+ catch (err) {
215
+ // OpenAI APIError exposes `status`; map 5xx/429/408 → transient so the
216
+ // shared loop retries, everything else short-circuits.
217
+ const status = err?.status;
218
+ if (typeof status === "number" && !TRANSIENT_HTTP.has(status)) {
219
+ // Deterministic API error — wrap nothing, rethrow as-is.
220
+ throw err;
221
+ }
222
+ if (typeof status === "number" && TRANSIENT_HTTP.has(status)) {
223
+ throw new llmRetry_1.TransientLlmError(`OpenAI ${status} error`, err);
224
+ }
225
+ throw err;
226
+ }
227
+ }, { maxRetries: this.maxRetries });
228
+ }
229
+ }
230
+ exports.OpenAiLlmCaller = OpenAiLlmCaller;
@@ -1 +1 @@
1
- {"version":3,"file":"llmCallerRegistry.d.ts","sourceRoot":"","sources":["../../../src/services/agent/llmCallerRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,aAAa,CAAC;AAY/D,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEpD;AAED,wBAAgB,YAAY,IAAI,SAAS,CAExC;AAeD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAEjE;AAED,wBAAgB,kBAAkB,IAAI,SAAS,GAAG,IAAI,CAErD"}
1
+ {"version":3,"file":"llmCallerRegistry.d.ts","sourceRoot":"","sources":["../../../src/services/agent/llmCallerRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,aAAa,CAAC;AAa/D,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEpD;AAED,wBAAgB,YAAY,IAAI,SAAS,CAExC;AAcD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAEjE;AAED,wBAAgB,kBAAkB,IAAI,SAAS,GAAG,IAAI,CAErD"}
@@ -7,7 +7,8 @@ exports.getAnthropicCaller = getAnthropicCaller;
7
7
  const llmCaller_1 = require("./llmCaller");
8
8
  /**
9
9
  * Singleton LlmCaller accessor. Host wires a concrete impl at boot
10
- * (e.g. GatewayLlmCaller); agent code reads via getLlmCaller().
10
+ * (the native ProviderRoutingLlmCaller via createNativeLlmCaller); agent code
11
+ * reads via getLlmCaller().
11
12
  *
12
13
  * Throwing UnconfiguredLlmCaller is the default so tests fail loud
13
14
  * if the host forgets to wire.
@@ -21,14 +22,13 @@ function getLlmCaller() {
21
22
  }
22
23
  /**
23
24
  * Optional Anthropic-direct caller. Wired only on hosts that have
24
- * ANTHROPIC_API_KEY set and need Anthropic-specific features (server-side
25
- * web_search, prompt caching, extended thinking). The Planner reads this
26
- * only when `useWebResearch` is requested — otherwise the default gateway
27
- * caller is used so provider portability is preserved.
25
+ * ANTHROPIC_API_KEY set and need Anthropic server-side web_search for the
26
+ * planner's research grounding. The Planner reads this only when
27
+ * `useWebResearch` is requested — otherwise it goes through the normal
28
+ * dispatcher (getLlmCaller()), which already routes Anthropic models natively.
28
29
  *
29
30
  * Null when unconfigured rather than throwing — caller code checks and
30
- * gracefully falls back to the gateway path. See AnthropicLlmCaller docstring
31
- * for deferred features (Tavily custom tools, fallback chain, streaming).
31
+ * gracefully falls back to the non-web-research planner path.
32
32
  */
33
33
  let anthropicInstance = null;
34
34
  function setAnthropicCaller(caller) {
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+ import { ChatRequest, ChatResponse, LlmCaller, StructuredRequest, StructuredResponse, StructuredWithToolsRequest } from "./llmCaller";
3
+ /**
4
+ * Provider-dispatching LlmCaller — the native replacement for GatewayLlmCaller
5
+ * as the wired singleton (LLM_NATIVE_MIGRATION_PLAN Phase 5).
6
+ *
7
+ * It owns the two responsibilities the single gateway endpoint used to give us
8
+ * for free, now that each provider has its own SDK caller:
9
+ * 1. Dispatch by `req.model.provider` → the matching native caller.
10
+ * 2. Cross-provider `fallbackModel` (F2): when the primary exhausts retries on
11
+ * a TRANSIENT error, attempt the fallback once (which may be a different
12
+ * provider). Deterministic errors (schema/auth/4xx) do NOT trigger fallback
13
+ * — identical semantics to the gateway.
14
+ *
15
+ * The native callers each handle ONE provider and do transport retry only; the
16
+ * dispatcher never re-implements backoff.
17
+ *
18
+ * Streaming: delegates to the chosen caller's `structuredStream` when present.
19
+ * All three native callers (Anthropic / OpenAI / Gemini) now implement native
20
+ * incremental streaming, so the dispatcher streams token-by-token on every
21
+ * provider. The single-chunk fallback below remains only as a safety net for
22
+ * any future caller that omits `structuredStream` — the LlmCaller contract
23
+ * explicitly allows a single full-payload emission.
24
+ */
25
+ export interface ProviderCallers {
26
+ anthropic?: LlmCaller;
27
+ openai?: LlmCaller;
28
+ google?: LlmCaller;
29
+ }
30
+ export declare class ProviderRoutingLlmCaller implements LlmCaller {
31
+ private readonly callers;
32
+ constructor(callers: ProviderCallers);
33
+ private pick;
34
+ chat(req: ChatRequest): Promise<ChatResponse>;
35
+ structured<T extends z.ZodTypeAny>(req: StructuredRequest<T>): Promise<StructuredResponse<T>>;
36
+ /**
37
+ * Forward to the chosen caller's native streaming when available; otherwise
38
+ * emit the full validated payload as a single chunk. Streaming does NOT apply
39
+ * cross-provider fallback mid-stream (matches the gateway): once bytes flow, a
40
+ * drop propagates and the planner's own retry loop (which awaits `result`)
41
+ * handles it.
42
+ */
43
+ structuredStream<T extends z.ZodTypeAny>(req: StructuredRequest<T>): {
44
+ tokens: AsyncIterable<string>;
45
+ result: Promise<StructuredResponse<T>>;
46
+ };
47
+ /**
48
+ * Anthropic (and any future non-streaming caller) path: run the blocking
49
+ * `structured` call, then surface its JSON as one token chunk. Failures reject
50
+ * the result promise and return cleanly from the generator rather than
51
+ * throwing — so the caller's token loop completes and its `await result`
52
+ * retry path fires (same contract as the streaming callers).
53
+ */
54
+ private singleChunkStream;
55
+ /**
56
+ * Anthropic-only server-tool path (web_search). Routes to the anthropic caller
57
+ * if it implements `structuredWithTools`; otherwise throws, since no other
58
+ * provider exposes Anthropic's server tools. Preserves the planner's
59
+ * useWebResearch behavior after the gateway is gone.
60
+ */
61
+ structuredWithTools<T extends z.ZodTypeAny>(req: StructuredWithToolsRequest<T>): Promise<StructuredResponse<T>>;
62
+ }
63
+ //# sourceMappingURL=llmCallerRouting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llmCallerRouting.d.ts","sourceRoot":"","sources":["../../../src/services/agent/llmCallerRouting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AAKrB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,qBAAa,wBAAyB,YAAW,SAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,eAAe;IAErD,OAAO,CAAC,IAAI;IAYN,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAoB7C,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EACrC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAsBjC;;;;;;OAMG;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;IASD;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAgCzB;;;;;OAKG;IACG,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAC9C,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;CAUlC"}