vidpipe 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/README.md +243 -0
  2. package/assets/fonts/Montserrat-Bold.ttf +0 -0
  3. package/assets/fonts/Montserrat-Regular.ttf +0 -0
  4. package/assets/fonts/OFL.txt +93 -0
  5. package/dist/__tests__/agents.test.d.ts +2 -0
  6. package/dist/__tests__/agents.test.d.ts.map +1 -0
  7. package/dist/__tests__/agents.test.js +434 -0
  8. package/dist/__tests__/agents.test.js.map +1 -0
  9. package/dist/__tests__/aspectRatio.test.d.ts +2 -0
  10. package/dist/__tests__/aspectRatio.test.d.ts.map +1 -0
  11. package/dist/__tests__/aspectRatio.test.js +406 -0
  12. package/dist/__tests__/aspectRatio.test.js.map +1 -0
  13. package/dist/__tests__/captionGenerator.test.d.ts +2 -0
  14. package/dist/__tests__/captionGenerator.test.d.ts.map +1 -0
  15. package/dist/__tests__/captionGenerator.test.js +435 -0
  16. package/dist/__tests__/captionGenerator.test.js.map +1 -0
  17. package/dist/__tests__/config.test.d.ts +2 -0
  18. package/dist/__tests__/config.test.d.ts.map +1 -0
  19. package/dist/__tests__/config.test.js +81 -0
  20. package/dist/__tests__/config.test.js.map +1 -0
  21. package/dist/__tests__/faceDetection.test.d.ts +2 -0
  22. package/dist/__tests__/faceDetection.test.d.ts.map +1 -0
  23. package/dist/__tests__/faceDetection.test.js +372 -0
  24. package/dist/__tests__/faceDetection.test.js.map +1 -0
  25. package/dist/__tests__/ffmpegTools.test.d.ts +2 -0
  26. package/dist/__tests__/ffmpegTools.test.d.ts.map +1 -0
  27. package/dist/__tests__/ffmpegTools.test.js +464 -0
  28. package/dist/__tests__/ffmpegTools.test.js.map +1 -0
  29. package/dist/__tests__/integration/captionBurn.test.d.ts +2 -0
  30. package/dist/__tests__/integration/captionBurn.test.d.ts.map +1 -0
  31. package/dist/__tests__/integration/captionBurn.test.js +103 -0
  32. package/dist/__tests__/integration/captionBurn.test.js.map +1 -0
  33. package/dist/__tests__/integration/clipComposite.test.d.ts +2 -0
  34. package/dist/__tests__/integration/clipComposite.test.d.ts.map +1 -0
  35. package/dist/__tests__/integration/clipComposite.test.js +56 -0
  36. package/dist/__tests__/integration/clipComposite.test.js.map +1 -0
  37. package/dist/__tests__/integration/faceDetection.test.d.ts +2 -0
  38. package/dist/__tests__/integration/faceDetection.test.d.ts.map +1 -0
  39. package/dist/__tests__/integration/faceDetection.test.js +85 -0
  40. package/dist/__tests__/integration/faceDetection.test.js.map +1 -0
  41. package/dist/__tests__/integration/ffmpegPipeline.test.d.ts +2 -0
  42. package/dist/__tests__/integration/ffmpegPipeline.test.d.ts.map +1 -0
  43. package/dist/__tests__/integration/ffmpegPipeline.test.js +88 -0
  44. package/dist/__tests__/integration/ffmpegPipeline.test.js.map +1 -0
  45. package/dist/__tests__/integration/fixture.d.ts +19 -0
  46. package/dist/__tests__/integration/fixture.d.ts.map +1 -0
  47. package/dist/__tests__/integration/fixture.js +112 -0
  48. package/dist/__tests__/integration/fixture.js.map +1 -0
  49. package/dist/__tests__/integration/fixture.test.d.ts +2 -0
  50. package/dist/__tests__/integration/fixture.test.d.ts.map +1 -0
  51. package/dist/__tests__/integration/fixture.test.js +27 -0
  52. package/dist/__tests__/integration/fixture.test.js.map +1 -0
  53. package/dist/__tests__/integration/realCaptions.test.d.ts +2 -0
  54. package/dist/__tests__/integration/realCaptions.test.d.ts.map +1 -0
  55. package/dist/__tests__/integration/realCaptions.test.js +226 -0
  56. package/dist/__tests__/integration/realCaptions.test.js.map +1 -0
  57. package/dist/__tests__/integration/realPipeline.test.d.ts +2 -0
  58. package/dist/__tests__/integration/realPipeline.test.d.ts.map +1 -0
  59. package/dist/__tests__/integration/realPipeline.test.js +210 -0
  60. package/dist/__tests__/integration/realPipeline.test.js.map +1 -0
  61. package/dist/__tests__/integration/silenceRemoval.test.d.ts +2 -0
  62. package/dist/__tests__/integration/silenceRemoval.test.d.ts.map +1 -0
  63. package/dist/__tests__/integration/silenceRemoval.test.js +93 -0
  64. package/dist/__tests__/integration/silenceRemoval.test.js.map +1 -0
  65. package/dist/__tests__/pipeline.test.d.ts +2 -0
  66. package/dist/__tests__/pipeline.test.d.ts.map +1 -0
  67. package/dist/__tests__/pipeline.test.js +434 -0
  68. package/dist/__tests__/pipeline.test.js.map +1 -0
  69. package/dist/__tests__/services.test.d.ts +2 -0
  70. package/dist/__tests__/services.test.d.ts.map +1 -0
  71. package/dist/__tests__/services.test.js +655 -0
  72. package/dist/__tests__/services.test.js.map +1 -0
  73. package/dist/__tests__/silenceRemoval.test.d.ts +2 -0
  74. package/dist/__tests__/silenceRemoval.test.d.ts.map +1 -0
  75. package/dist/__tests__/silenceRemoval.test.js +266 -0
  76. package/dist/__tests__/silenceRemoval.test.js.map +1 -0
  77. package/dist/__tests__/singlePassEdit.test.d.ts +2 -0
  78. package/dist/__tests__/singlePassEdit.test.d.ts.map +1 -0
  79. package/dist/__tests__/singlePassEdit.test.js +321 -0
  80. package/dist/__tests__/singlePassEdit.test.js.map +1 -0
  81. package/dist/__tests__/smoke.test.d.ts +2 -0
  82. package/dist/__tests__/smoke.test.d.ts.map +1 -0
  83. package/dist/__tests__/smoke.test.js +8 -0
  84. package/dist/__tests__/smoke.test.js.map +1 -0
  85. package/dist/__tests__/utilities.test.d.ts +2 -0
  86. package/dist/__tests__/utilities.test.d.ts.map +1 -0
  87. package/dist/__tests__/utilities.test.js +268 -0
  88. package/dist/__tests__/utilities.test.js.map +1 -0
  89. package/dist/agents/BaseAgent.d.ts +52 -0
  90. package/dist/agents/BaseAgent.d.ts.map +1 -0
  91. package/dist/agents/BaseAgent.js +108 -0
  92. package/dist/agents/BaseAgent.js.map +1 -0
  93. package/dist/agents/BlogAgent.d.ts +3 -0
  94. package/dist/agents/BlogAgent.d.ts.map +1 -0
  95. package/dist/agents/BlogAgent.js +163 -0
  96. package/dist/agents/BlogAgent.js.map +1 -0
  97. package/dist/agents/ChapterAgent.d.ts +11 -0
  98. package/dist/agents/ChapterAgent.d.ts.map +1 -0
  99. package/dist/agents/ChapterAgent.js +191 -0
  100. package/dist/agents/ChapterAgent.js.map +1 -0
  101. package/dist/agents/MediumVideoAgent.d.ts +3 -0
  102. package/dist/agents/MediumVideoAgent.d.ts.map +1 -0
  103. package/dist/agents/MediumVideoAgent.js +219 -0
  104. package/dist/agents/MediumVideoAgent.js.map +1 -0
  105. package/dist/agents/ShortsAgent.d.ts +3 -0
  106. package/dist/agents/ShortsAgent.d.ts.map +1 -0
  107. package/dist/agents/ShortsAgent.js +243 -0
  108. package/dist/agents/ShortsAgent.js.map +1 -0
  109. package/dist/agents/SilenceRemovalAgent.d.ts +9 -0
  110. package/dist/agents/SilenceRemovalAgent.d.ts.map +1 -0
  111. package/dist/agents/SilenceRemovalAgent.js +208 -0
  112. package/dist/agents/SilenceRemovalAgent.js.map +1 -0
  113. package/dist/agents/SocialMediaAgent.d.ts +4 -0
  114. package/dist/agents/SocialMediaAgent.d.ts.map +1 -0
  115. package/dist/agents/SocialMediaAgent.js +248 -0
  116. package/dist/agents/SocialMediaAgent.js.map +1 -0
  117. package/dist/agents/SummaryAgent.d.ts +11 -0
  118. package/dist/agents/SummaryAgent.d.ts.map +1 -0
  119. package/dist/agents/SummaryAgent.js +333 -0
  120. package/dist/agents/SummaryAgent.js.map +1 -0
  121. package/dist/config/brand.d.ts +29 -0
  122. package/dist/config/brand.d.ts.map +1 -0
  123. package/dist/config/brand.js +83 -0
  124. package/dist/config/brand.js.map +1 -0
  125. package/dist/config/environment.d.ts +36 -0
  126. package/dist/config/environment.d.ts.map +1 -0
  127. package/dist/config/environment.js +44 -0
  128. package/dist/config/environment.js.map +1 -0
  129. package/dist/config/logger.d.ts +5 -0
  130. package/dist/config/logger.d.ts.map +1 -0
  131. package/dist/config/logger.js +13 -0
  132. package/dist/config/logger.js.map +1 -0
  133. package/dist/index.d.ts +2 -0
  134. package/dist/index.d.ts.map +1 -0
  135. package/dist/index.js +135 -0
  136. package/dist/index.js.map +1 -0
  137. package/dist/pipeline.d.ts +57 -0
  138. package/dist/pipeline.d.ts.map +1 -0
  139. package/dist/pipeline.js +287 -0
  140. package/dist/pipeline.js.map +1 -0
  141. package/dist/services/captionGeneration.d.ts +7 -0
  142. package/dist/services/captionGeneration.d.ts.map +1 -0
  143. package/dist/services/captionGeneration.js +29 -0
  144. package/dist/services/captionGeneration.js.map +1 -0
  145. package/dist/services/fileWatcher.d.ts +19 -0
  146. package/dist/services/fileWatcher.d.ts.map +1 -0
  147. package/dist/services/fileWatcher.js +120 -0
  148. package/dist/services/fileWatcher.js.map +1 -0
  149. package/dist/services/gitOperations.d.ts +3 -0
  150. package/dist/services/gitOperations.d.ts.map +1 -0
  151. package/dist/services/gitOperations.js +43 -0
  152. package/dist/services/gitOperations.js.map +1 -0
  153. package/dist/services/socialPosting.d.ts +38 -0
  154. package/dist/services/socialPosting.d.ts.map +1 -0
  155. package/dist/services/socialPosting.js +102 -0
  156. package/dist/services/socialPosting.js.map +1 -0
  157. package/dist/services/transcription.d.ts +3 -0
  158. package/dist/services/transcription.d.ts.map +1 -0
  159. package/dist/services/transcription.js +100 -0
  160. package/dist/services/transcription.js.map +1 -0
  161. package/dist/services/videoIngestion.d.ts +3 -0
  162. package/dist/services/videoIngestion.d.ts.map +1 -0
  163. package/dist/services/videoIngestion.js +103 -0
  164. package/dist/services/videoIngestion.js.map +1 -0
  165. package/dist/tools/captions/captionGenerator.d.ts +84 -0
  166. package/dist/tools/captions/captionGenerator.d.ts.map +1 -0
  167. package/dist/tools/captions/captionGenerator.js +390 -0
  168. package/dist/tools/captions/captionGenerator.js.map +1 -0
  169. package/dist/tools/ffmpeg/aspectRatio.d.ts +101 -0
  170. package/dist/tools/ffmpeg/aspectRatio.d.ts.map +1 -0
  171. package/dist/tools/ffmpeg/aspectRatio.js +338 -0
  172. package/dist/tools/ffmpeg/aspectRatio.js.map +1 -0
  173. package/dist/tools/ffmpeg/audioExtraction.d.ts +16 -0
  174. package/dist/tools/ffmpeg/audioExtraction.d.ts.map +1 -0
  175. package/dist/tools/ffmpeg/audioExtraction.js +86 -0
  176. package/dist/tools/ffmpeg/audioExtraction.js.map +1 -0
  177. package/dist/tools/ffmpeg/captionBurning.d.ts +8 -0
  178. package/dist/tools/ffmpeg/captionBurning.d.ts.map +1 -0
  179. package/dist/tools/ffmpeg/captionBurning.js +71 -0
  180. package/dist/tools/ffmpeg/captionBurning.js.map +1 -0
  181. package/dist/tools/ffmpeg/clipExtraction.d.ts +23 -0
  182. package/dist/tools/ffmpeg/clipExtraction.d.ts.map +1 -0
  183. package/dist/tools/ffmpeg/clipExtraction.js +178 -0
  184. package/dist/tools/ffmpeg/clipExtraction.js.map +1 -0
  185. package/dist/tools/ffmpeg/faceDetection.d.ts +127 -0
  186. package/dist/tools/ffmpeg/faceDetection.d.ts.map +1 -0
  187. package/dist/tools/ffmpeg/faceDetection.js +500 -0
  188. package/dist/tools/ffmpeg/faceDetection.js.map +1 -0
  189. package/dist/tools/ffmpeg/frameCapture.d.ts +10 -0
  190. package/dist/tools/ffmpeg/frameCapture.d.ts.map +1 -0
  191. package/dist/tools/ffmpeg/frameCapture.js +48 -0
  192. package/dist/tools/ffmpeg/frameCapture.js.map +1 -0
  193. package/dist/tools/ffmpeg/silenceDetection.d.ts +10 -0
  194. package/dist/tools/ffmpeg/silenceDetection.d.ts.map +1 -0
  195. package/dist/tools/ffmpeg/silenceDetection.js +55 -0
  196. package/dist/tools/ffmpeg/silenceDetection.js.map +1 -0
  197. package/dist/tools/ffmpeg/singlePassEdit.d.ts +25 -0
  198. package/dist/tools/ffmpeg/singlePassEdit.d.ts.map +1 -0
  199. package/dist/tools/ffmpeg/singlePassEdit.js +123 -0
  200. package/dist/tools/ffmpeg/singlePassEdit.js.map +1 -0
  201. package/dist/tools/search/exaClient.d.ts +8 -0
  202. package/dist/tools/search/exaClient.d.ts.map +1 -0
  203. package/dist/tools/search/exaClient.js +38 -0
  204. package/dist/tools/search/exaClient.js.map +1 -0
  205. package/dist/tools/whisper/whisperClient.d.ts +3 -0
  206. package/dist/tools/whisper/whisperClient.d.ts.map +1 -0
  207. package/dist/tools/whisper/whisperClient.js +77 -0
  208. package/dist/tools/whisper/whisperClient.js.map +1 -0
  209. package/dist/types/index.d.ts +305 -0
  210. package/dist/types/index.d.ts.map +1 -0
  211. package/dist/types/index.js +44 -0
  212. package/dist/types/index.js.map +1 -0
  213. package/package.json +63 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utilities.test.js","sourceRoot":"","sources":["../../src/__tests__/utilities.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAa,MAAM,QAAQ,CAAA;AAExE,0EAA0E;AAE1E,kDAAkD;AAClD,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAClC,MAAM,UAAU,GAAG;QACjB,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,KAAK,EAAE,MAAM;KACd,CAAA;IACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAA;AACrD,CAAC,CAAC,CAAA;AAEF,0BAA0B;AAC1B,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;QACjC,UAAU,EAAE,kBAAkB;QAC9B,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,cAAc;KAC5B,CAAC;IACF,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;CACpB,CAAC,CAAC,CAAA;AAEH,4CAA4C;AAC5C,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;IACvB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAAsB,IAAI,CAAC,CAAA;IAC/D,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE;YACP,GAAG,MAAM;YACT,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;YACzC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3C,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC;YACxD,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC;SACzD;KACF,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,mCAAmC;AACnC,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;IAC3C,IAAI,EAAE,aAAa;IACnB,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAC5D,KAAK,EAAE;QACL,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE;QACrC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;KACxC;CACF,CAAC,CAAA;AAEF,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IACvB,OAAO,EAAE,MAAM,UAAU;QACvB,KAAK,GAAG;YACN,cAAc,EAAE;gBACd,MAAM,EAAE,UAAU;aACnB;SACF,CAAA;KACF;CACF,CAAC,CAAC,CAAA;AAEH,+BAA+B;AAC/B,MAAM,qBAAqB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;IACtD,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,cAAc,EAAE;KACxE;CACF,CAAC,CAAA;AAEF,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IACvB,OAAO,EAAE,MAAM,OAAO;QACpB,iBAAiB,GAAG,qBAAqB,CAAA;KAC1C;CACF,CAAC,CAAC,CAAA;AAEH,0EAA0E;AAE1E,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEpD,2EAA2E;AAC3E,cAAc;AACd,2EAA2E;AAE3E,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,MAAM,SAAS,GAAG;QAChB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;QAC7D,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;QACtE,gBAAgB,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC;QACrD,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;QACnE,iBAAiB,EAAE;YACjB,WAAW,EAAE,aAAa;YAC1B,SAAS,EAAE,WAAW;YACtB,WAAW,EAAE,YAAY;SAC1B;KACF,CAAA;IAED,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,YAAY,EAAE,CAAA;QACjB,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAC9C,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;QAC7D,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;QAE/B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;QAE/C,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;QAC7D,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;QAE/B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;QAE7D,cAAc,EAAE,CAAA;QAChB,MAAM,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;QAEpE,cAAc,EAAE,CAAA;QAChB,MAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;QAErE,8CAA8C;QAC9C,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;QAC/D,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAA;QAEjC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,2EAA2E;AAC3E,eAAe;AACf,2EAA2E;AAE3E,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,6DAA6D;QAC7D,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QACrD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAA;QAE7B,MAAM,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACxC,MAAM,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACxC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC1D,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,sDAAsD;QACtD,EAAE,CAAC,YAAY,EAAE,CAAA;QAEjB,6DAA6D;QAC7D,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,YAAY,CACtC,qBAAqB,CACtB,CAAA;QAED,UAAU,CAAC,UAAU,EAAE,CAAA;QACvB,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,EAAE,CAAC,YAAY,EAAE,CAAA;QACjB,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,YAAY,CACtC,qBAAqB,CACtB,CAAA;QAED,4CAA4C;QAC5C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;QACvD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,2EAA2E;AAC3E,sBAAsB;AACtB,2EAA2E;AAE3E,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,YAAY,EAAE,CAAA;QACjB,UAAU,CAAC,SAAS,EAAE,CAAA;QACtB,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAC9C,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAS,CAAC,CAAA;QACpE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,aAAoB,CAAC,CAAA;QACpE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC;YACnC,cAAc,EAAE,UAAU;YAC1B,UAAU,EAAE,kBAAkB;YAC9B,WAAW,EAAE,EAAE;SACT,CAAC,CAAA;IACX,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAA;QAC7E,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,iBAAiB,CAAC,CAAA;QAEvD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAA;QAC7E,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,iBAAiB,CAAC,CAAA;QAEvD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;QACtE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;QAE/C,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAA;QAE7E,MAAM,MAAM,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACjE,sBAAsB,CACvB,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC;YACrC,IAAI,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAChB,CAAC,CAAA;QAET,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAA;QAE7E,MAAM,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC9D,8BAA8B,CAC/B,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,UAAU,CAAC,qBAAqB,CAC9B,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAC1D,CAAA;QAED,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAA;QAE7E,MAAM,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC9D,kCAAkC,CACnC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,UAAU,CAAC,qBAAqB,CAC9B,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAC1D,CAAA;QAED,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAA;QAE7E,MAAM,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC9D,qBAAqB,CACtB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,2EAA2E;AAC3E,kBAAkB;AAClB,2EAA2E;AAE3E,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,YAAY,EAAE,CAAA;QACjB,qBAAqB,CAAC,SAAS,EAAE,CAAA;QACjC,qBAAqB,CAAC,iBAAiB,CAAC;YACtC,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,cAAc,EAAE;aACxE;SACF,CAAC,CAAA;QACF,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC;YACnC,WAAW,EAAE,cAAc;YAC3B,cAAc,EAAE,EAAE;YAClB,UAAU,EAAE,EAAE;SACR,CAAC,CAAA;IACX,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAA;QAClE,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,CAAA;QAE7C,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC;YACnC,WAAW,EAAE,EAAE;YACf,cAAc,EAAE,EAAE;YAClB,UAAU,EAAE,EAAE;SACR,CAAC,CAAA;QAET,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAA;QAClE,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAA;QAEvC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,qBAAqB,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAA;QAErE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAA;QAClE,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAA;QAEvC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAA;QACrE,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;QAEpD,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QAC/B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACxB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACzC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAA;QACrE,MAAM,YAAY,CAAC,CAAC,cAAc,CAAC,CAAC,CAAA;QAEpC,MAAM,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAChD,cAAc,EACd,MAAM,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAC3C,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,52 @@
1
+ import { CopilotClient, CopilotSession, Tool } from '@github/copilot-sdk';
2
+ /**
3
+ * BaseAgent — abstract foundation for all Copilot SDK agents.
4
+ *
5
+ * ### Agent pattern
6
+ * Each agent in the pipeline (SummaryAgent, ShortsAgent, BlogAgent, etc.)
7
+ * extends BaseAgent and implements two methods:
8
+ * - `getTools()` — declares the tools (functions) the LLM can call
9
+ * - `handleToolCall()` — dispatches tool invocations to concrete implementations
10
+ *
11
+ * ### Tool registration
12
+ * Tools are declared as JSON Schema objects and passed to the CopilotSession
13
+ * at creation time. When the LLM decides to call a tool, the SDK routes the
14
+ * call through `handleToolCall()` where the subclass executes the actual logic
15
+ * (e.g. reading files, running FFmpeg, querying APIs).
16
+ *
17
+ * ### Message flow
18
+ * 1. `run(userMessage)` lazily creates a CopilotClient (starts the Copilot
19
+ * backend process) and a CopilotSession (with system prompt + tools).
20
+ * 2. The user message is sent via `sendAndWait()`, which blocks until the
21
+ * LLM produces a final response (with a 5-minute timeout).
22
+ * 3. During processing, the LLM may invoke tools multiple times — each call
23
+ * is logged via session event handlers.
24
+ * 4. The final assistant message text is returned to the caller.
25
+ *
26
+ * Sessions are reusable: calling `run()` multiple times on the same agent
27
+ * sends additional messages within the same conversation context.
28
+ */
29
+ export declare abstract class BaseAgent {
30
+ protected readonly agentName: string;
31
+ protected readonly systemPrompt: string;
32
+ protected client: CopilotClient | null;
33
+ protected session: CopilotSession | null;
34
+ constructor(agentName: string, systemPrompt: string);
35
+ /** Tools this agent exposes to the LLM. Override in subclasses. */
36
+ protected getTools(): Tool<unknown>[];
37
+ /** Dispatch a tool call to the concrete agent. Override in subclasses. */
38
+ protected abstract handleToolCall(toolName: string, args: Record<string, unknown>): Promise<unknown>;
39
+ /**
40
+ * Send a user message to the agent and return the final response text.
41
+ *
42
+ * 1. Lazily creates a CopilotClient + CopilotSession
43
+ * 2. Registers an event listener to accumulate the response
44
+ * 3. Calls sendAndWait and returns the completed message
45
+ */
46
+ run(userMessage: string): Promise<string>;
47
+ /** Wire up session event listeners for logging / streaming. */
48
+ private setupEventHandlers;
49
+ /** Tear down the client + session. */
50
+ destroy(): Promise<void>;
51
+ }
52
+ //# sourceMappingURL=BaseAgent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseAgent.d.ts","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,EAAgB,MAAM,qBAAqB,CAAA;AAGvF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,8BAAsB,SAAS;IAK3B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM;IACpC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM;IALzC,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAO;IAC7C,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAO;gBAG1B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM;IAGzC,mEAAmE;IACnE,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE;IAIrC,0EAA0E;IAC1E,SAAS,CAAC,QAAQ,CAAC,cAAc,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC;IAEnB;;;;;;OAMG;IACG,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0B/C,+DAA+D;IAC/D,OAAO,CAAC,kBAAkB;IA6B1B,sCAAsC;IAChC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAc/B"}
@@ -0,0 +1,108 @@
1
+ import { CopilotClient } from '@github/copilot-sdk';
2
+ import logger from '../config/logger';
3
+ /**
4
+ * BaseAgent — abstract foundation for all Copilot SDK agents.
5
+ *
6
+ * ### Agent pattern
7
+ * Each agent in the pipeline (SummaryAgent, ShortsAgent, BlogAgent, etc.)
8
+ * extends BaseAgent and implements two methods:
9
+ * - `getTools()` — declares the tools (functions) the LLM can call
10
+ * - `handleToolCall()` — dispatches tool invocations to concrete implementations
11
+ *
12
+ * ### Tool registration
13
+ * Tools are declared as JSON Schema objects and passed to the CopilotSession
14
+ * at creation time. When the LLM decides to call a tool, the SDK routes the
15
+ * call through `handleToolCall()` where the subclass executes the actual logic
16
+ * (e.g. reading files, running FFmpeg, querying APIs).
17
+ *
18
+ * ### Message flow
19
+ * 1. `run(userMessage)` lazily creates a CopilotClient (starts the Copilot
20
+ * backend process) and a CopilotSession (with system prompt + tools).
21
+ * 2. The user message is sent via `sendAndWait()`, which blocks until the
22
+ * LLM produces a final response (with a 5-minute timeout).
23
+ * 3. During processing, the LLM may invoke tools multiple times — each call
24
+ * is logged via session event handlers.
25
+ * 4. The final assistant message text is returned to the caller.
26
+ *
27
+ * Sessions are reusable: calling `run()` multiple times on the same agent
28
+ * sends additional messages within the same conversation context.
29
+ */
30
+ export class BaseAgent {
31
+ agentName;
32
+ systemPrompt;
33
+ client = null;
34
+ session = null;
35
+ constructor(agentName, systemPrompt) {
36
+ this.agentName = agentName;
37
+ this.systemPrompt = systemPrompt;
38
+ }
39
+ /** Tools this agent exposes to the LLM. Override in subclasses. */
40
+ getTools() {
41
+ return [];
42
+ }
43
+ /**
44
+ * Send a user message to the agent and return the final response text.
45
+ *
46
+ * 1. Lazily creates a CopilotClient + CopilotSession
47
+ * 2. Registers an event listener to accumulate the response
48
+ * 3. Calls sendAndWait and returns the completed message
49
+ */
50
+ async run(userMessage) {
51
+ if (!this.client) {
52
+ this.client = new CopilotClient({ autoStart: true, logLevel: 'error' });
53
+ }
54
+ if (!this.session) {
55
+ this.session = await this.client.createSession({
56
+ systemMessage: { mode: 'replace', content: this.systemPrompt },
57
+ tools: this.getTools(),
58
+ streaming: true,
59
+ });
60
+ this.setupEventHandlers(this.session);
61
+ }
62
+ logger.info(`[${this.agentName}] Sending message: ${userMessage.substring(0, 80)}…`);
63
+ const response = await this.session.sendAndWait({ prompt: userMessage }, 300_000);
64
+ const content = response?.data?.content ?? '';
65
+ logger.info(`[${this.agentName}] Response received (${content.length} chars)`);
66
+ return content;
67
+ }
68
+ /** Wire up session event listeners for logging / streaming. */
69
+ setupEventHandlers(session) {
70
+ session.on((event) => {
71
+ switch (event.type) {
72
+ case 'assistant.message_delta':
73
+ // Streaming delta — log at debug level to avoid noise
74
+ logger.debug(`[${this.agentName}] delta: ${event.data.deltaContent}`);
75
+ break;
76
+ case 'assistant.message':
77
+ logger.debug(`[${this.agentName}] message complete`);
78
+ break;
79
+ case 'tool.execution_start':
80
+ logger.info(`[${this.agentName}] tool start: ${event.data.toolName}`);
81
+ break;
82
+ case 'tool.execution_complete':
83
+ logger.info(`[${this.agentName}] tool done: ${event.data.toolCallId} success=${event.data.success}`);
84
+ break;
85
+ case 'session.error':
86
+ logger.error(`[${this.agentName}] error: ${event.data.message}`);
87
+ break;
88
+ }
89
+ });
90
+ }
91
+ /** Tear down the client + session. */
92
+ async destroy() {
93
+ try {
94
+ if (this.session) {
95
+ await this.session.destroy();
96
+ this.session = null;
97
+ }
98
+ if (this.client) {
99
+ await this.client.stop();
100
+ this.client = null;
101
+ }
102
+ }
103
+ catch (err) {
104
+ logger.error(`[${this.agentName}] Error during destroy: ${err}`);
105
+ }
106
+ }
107
+ }
108
+ //# sourceMappingURL=BaseAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseAgent.js","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Transcript, VideoFile, VideoSummary } from '../types';
2
+ export declare function generateBlogPost(video: VideoFile, transcript: Transcript, summary: VideoSummary): Promise<string>;
3
+ //# sourceMappingURL=BlogAgent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlogAgent.d.ts","sourceRoot":"","sources":["../../src/agents/BlogAgent.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AA8JnE,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC,CAuCjB"}
@@ -0,0 +1,163 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { BaseAgent } from './BaseAgent';
4
+ import logger from '../config/logger';
5
+ import { getBrandConfig } from '../config/brand';
6
+ import { searchWeb } from '../tools/search/exaClient';
7
+ // ── Build system prompt from brand config ───────────────────────────────────
8
+ function buildSystemPrompt() {
9
+ const brand = getBrandConfig();
10
+ return `You are a technical blog writer for dev.to, writing from the perspective of ${brand.name} (${brand.handle}).
11
+
12
+ Voice & style:
13
+ - Tone: ${brand.voice.tone}
14
+ - Personality: ${brand.voice.personality}
15
+ - Style: ${brand.voice.style}
16
+
17
+ Content guidelines: ${brand.contentGuidelines.blogFocus}
18
+
19
+ Your task is to generate a full dev.to-style technical blog post (800-1500 words) based on a video transcript and summary.
20
+
21
+ The blog post MUST include:
22
+ 1. dev.to frontmatter (title, published: false, description, tags, cover_image placeholder)
23
+ 2. An engaging introduction with a hook
24
+ 3. Clear sections covering the main content (e.g. The Problem, The Solution, How It Works)
25
+ 4. Code snippets where the video content discusses code — use fenced code blocks with language tags
26
+ 5. Key Takeaways section
27
+ 6. A conclusion
28
+ 7. A footer referencing the original video
29
+
30
+ Workflow:
31
+ 1. First call "search_web" with key topics to find relevant articles/resources to link to.
32
+ 2. Then call "write_blog" with the complete blog post including frontmatter and body.
33
+ - Weave the search result links organically into the post text (don't dump them at the end).
34
+ - Reference the video and any shorts naturally.
35
+
36
+ Always call "write_blog" exactly once with the complete post.`;
37
+ }
38
+ // ── Agent ────────────────────────────────────────────────────────────────────
39
+ class BlogAgent extends BaseAgent {
40
+ blogContent = null;
41
+ constructor() {
42
+ super('BlogAgent', buildSystemPrompt());
43
+ }
44
+ getTools() {
45
+ return [
46
+ {
47
+ name: 'search_web',
48
+ description: 'Search the web for relevant articles and resources to link in the blog post.',
49
+ parameters: {
50
+ type: 'object',
51
+ properties: {
52
+ queries: {
53
+ type: 'array',
54
+ items: { type: 'string' },
55
+ description: 'List of search queries for finding relevant links',
56
+ },
57
+ },
58
+ required: ['queries'],
59
+ },
60
+ handler: async (args) => {
61
+ const { queries } = args;
62
+ logger.info(`[BlogAgent] search_web called with ${queries.length} queries`);
63
+ const allResults = {};
64
+ for (const query of queries) {
65
+ allResults[query] = await searchWeb(query, 3);
66
+ }
67
+ return JSON.stringify({ results: allResults });
68
+ },
69
+ },
70
+ {
71
+ name: 'write_blog',
72
+ description: 'Submit the complete dev.to blog post with frontmatter and markdown body.',
73
+ parameters: {
74
+ type: 'object',
75
+ properties: {
76
+ frontmatter: {
77
+ type: 'object',
78
+ properties: {
79
+ title: { type: 'string' },
80
+ description: { type: 'string' },
81
+ tags: { type: 'array', items: { type: 'string' } },
82
+ cover_image: { type: 'string' },
83
+ },
84
+ required: ['title', 'description', 'tags'],
85
+ },
86
+ body: {
87
+ type: 'string',
88
+ description: 'The full markdown body of the blog post (excluding frontmatter)',
89
+ },
90
+ },
91
+ required: ['frontmatter', 'body'],
92
+ },
93
+ handler: async (args) => {
94
+ const blogArgs = args;
95
+ this.blogContent = blogArgs;
96
+ logger.info(`[BlogAgent] write_blog received post: "${blogArgs.frontmatter.title}"`);
97
+ return JSON.stringify({ success: true });
98
+ },
99
+ },
100
+ ];
101
+ }
102
+ async handleToolCall(toolName, _args) {
103
+ logger.warn(`[BlogAgent] Unexpected handleToolCall for "${toolName}"`);
104
+ return { error: `Unknown tool: ${toolName}` };
105
+ }
106
+ getBlogContent() {
107
+ return this.blogContent;
108
+ }
109
+ }
110
+ // ── Render the final markdown ───────────────────────────────────────────────
111
+ function renderBlogMarkdown(blog) {
112
+ const fm = blog.frontmatter;
113
+ const tags = fm.tags.map((t) => t.toLowerCase().replace(/[^a-z0-9]/g, '')).join(', ');
114
+ const lines = [
115
+ '---',
116
+ `title: "${fm.title}"`,
117
+ 'published: false',
118
+ `description: "${fm.description}"`,
119
+ `tags: ${tags}`,
120
+ `cover_image: ${fm.cover_image || ''}`,
121
+ '---',
122
+ '',
123
+ blog.body,
124
+ ];
125
+ return lines.join('\n');
126
+ }
127
+ // ── Public API ──────────────────────────────────────────────────────────────
128
+ export async function generateBlogPost(video, transcript, summary) {
129
+ const agent = new BlogAgent();
130
+ try {
131
+ const userMessage = [
132
+ '## Video Metadata',
133
+ `- **Title:** ${summary.title}`,
134
+ `- **Slug:** ${video.slug}`,
135
+ `- **Duration:** ${video.duration}s`,
136
+ `- **Recorded:** ${video.createdAt.toISOString().split('T')[0]}`,
137
+ '',
138
+ '## Summary',
139
+ summary.overview,
140
+ '',
141
+ '## Key Topics',
142
+ summary.keyTopics.map((t) => `- ${t}`).join('\n'),
143
+ '',
144
+ '## Transcript (first 6000 chars)',
145
+ transcript.text.slice(0, 6000),
146
+ ].join('\n');
147
+ await agent.run(userMessage);
148
+ const blogContent = agent.getBlogContent();
149
+ if (!blogContent) {
150
+ throw new Error('BlogAgent did not produce any blog content');
151
+ }
152
+ const outDir = path.join(video.videoDir, 'social-posts');
153
+ fs.mkdirSync(outDir, { recursive: true });
154
+ const outputPath = path.join(outDir, 'devto.md');
155
+ fs.writeFileSync(outputPath, renderBlogMarkdown(blogContent), 'utf-8');
156
+ logger.info(`[BlogAgent] Wrote blog post to ${outputPath}`);
157
+ return outputPath;
158
+ }
159
+ finally {
160
+ await agent.destroy();
161
+ }
162
+ }
163
+ //# sourceMappingURL=BlogAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlogAgent.js","sourceRoot":"","sources":["../../src/agents/BlogAgent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { VideoFile, Transcript, Chapter } from '../types';
2
+ /**
3
+ * Generate chapters for a video recording.
4
+ *
5
+ * 1. Creates a ChapterAgent with a `generate_chapters` tool
6
+ * 2. Builds a prompt containing the full transcript with timestamps
7
+ * 3. Lets the agent analyse the transcript and identify chapter boundaries
8
+ * 4. Returns the array of {@link Chapter} objects
9
+ */
10
+ export declare function generateChapters(video: VideoFile, transcript: Transcript): Promise<Chapter[]>;
11
+ //# sourceMappingURL=ChapterAgent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChapterAgent.d.ts","sourceRoot":"","sources":["../../src/agents/ChapterAgent.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAiM9D;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,OAAO,EAAE,CAAC,CAyCpB"}
@@ -0,0 +1,191 @@
1
+ import { promises as fs } from 'fs';
2
+ import path from 'path';
3
+ import { BaseAgent } from './BaseAgent';
4
+ import logger from '../config/logger';
5
+ import { getConfig } from '../config/environment';
6
+ // ── Helpers ──────────────────────────────────────────────────────────────────
7
+ /** Format seconds → "M:SS" or "H:MM:SS" for YouTube timestamps */
8
+ function toYouTubeTimestamp(seconds) {
9
+ const h = Math.floor(seconds / 3600);
10
+ const m = Math.floor((seconds % 3600) / 60);
11
+ const s = Math.floor(seconds % 60);
12
+ return h > 0
13
+ ? `${h}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`
14
+ : `${m}:${String(s).padStart(2, '0')}`;
15
+ }
16
+ /** Format seconds → "MM:SS" for table display */
17
+ function fmtTime(seconds) {
18
+ const m = Math.floor(seconds / 60);
19
+ const s = Math.floor(seconds % 60);
20
+ return `${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`;
21
+ }
22
+ /** Build a compact transcript block with timestamps for the LLM prompt. */
23
+ function buildTranscriptBlock(transcript) {
24
+ return transcript.segments
25
+ .map((seg) => `[${fmtTime(seg.start)} → ${fmtTime(seg.end)}] ${seg.text.trim()}`)
26
+ .join('\n');
27
+ }
28
+ // ── Output format generators ─────────────────────────────────────────────────
29
+ function generateChaptersJSON(chapters) {
30
+ return JSON.stringify({ chapters }, null, 2);
31
+ }
32
+ function generateYouTubeTimestamps(chapters) {
33
+ return chapters
34
+ .map((ch) => `${toYouTubeTimestamp(ch.timestamp)} ${ch.title}`)
35
+ .join('\n');
36
+ }
37
+ function generateChaptersMarkdown(chapters) {
38
+ const rows = chapters
39
+ .map((ch) => `| ${toYouTubeTimestamp(ch.timestamp)} | ${ch.title} | ${ch.description} |`)
40
+ .join('\n');
41
+ return `## Chapters
42
+
43
+ | Time | Chapter | Description |
44
+ |------|---------|-------------|
45
+ ${rows}
46
+ `;
47
+ }
48
+ function generateFFMetadata(chapters, totalDuration) {
49
+ let meta = ';FFMETADATA1\n\n';
50
+ for (let i = 0; i < chapters.length; i++) {
51
+ const ch = chapters[i];
52
+ const startMs = Math.round(ch.timestamp * 1000);
53
+ const endMs = i < chapters.length - 1
54
+ ? Math.round(chapters[i + 1].timestamp * 1000)
55
+ : Math.round(totalDuration * 1000);
56
+ const escapedTitle = ch.title.replace(/[=;#\\]/g, '\\$&');
57
+ meta += `[CHAPTER]\nTIMEBASE=1/1000\nSTART=${startMs}\nEND=${endMs}\ntitle=${escapedTitle}\n\n`;
58
+ }
59
+ return meta;
60
+ }
61
+ // ── System prompt ────────────────────────────────────────────────────────────
62
+ function buildChapterSystemPrompt() {
63
+ return `You are a video chapter generator. Analyze the transcript and identify distinct topic segments.
64
+
65
+ Rules:
66
+ - First chapter MUST start at 0:00
67
+ - Minimum 3 chapters, maximum 10
68
+ - Each chapter should be 2-5 minutes long
69
+ - Chapter titles should be concise (3-7 words)
70
+ - Look for topic transitions, "moving on", "next", "now let's", etc.
71
+ - Include a brief 1-sentence description per chapter
72
+
73
+ **Output format:**
74
+ Call the "generate_chapters" tool with an array of chapter objects.
75
+ Each chapter: { timestamp (seconds from start), title (short, 3-7 words), description (1-sentence summary) }
76
+
77
+ **Title style:**
78
+ - Use title case: "Setting Up the Database"
79
+ - Be specific: "Configuring PostgreSQL" not "Database Stuff"
80
+ - Include the action when relevant: "Building the API Routes"
81
+ - Keep under 50 characters`;
82
+ }
83
+ // ── ChapterAgent ─────────────────────────────────────────────────────────────
84
+ class ChapterAgent extends BaseAgent {
85
+ outputDir;
86
+ totalDuration;
87
+ constructor(outputDir, totalDuration) {
88
+ super('ChapterAgent', buildChapterSystemPrompt());
89
+ this.outputDir = outputDir;
90
+ this.totalDuration = totalDuration;
91
+ }
92
+ get chaptersDir() {
93
+ return path.join(this.outputDir, 'chapters');
94
+ }
95
+ getTools() {
96
+ return [
97
+ {
98
+ name: 'generate_chapters',
99
+ description: 'Write the identified chapters to disk in all formats. ' +
100
+ 'Provide: chapters (array of { timestamp, title, description }).',
101
+ parameters: {
102
+ type: 'object',
103
+ properties: {
104
+ chapters: {
105
+ type: 'array',
106
+ items: {
107
+ type: 'object',
108
+ properties: {
109
+ timestamp: { type: 'number', description: 'Seconds from video start' },
110
+ title: { type: 'string', description: 'Short chapter title (3-7 words)' },
111
+ description: { type: 'string', description: '1-sentence summary' },
112
+ },
113
+ required: ['timestamp', 'title', 'description'],
114
+ },
115
+ },
116
+ },
117
+ required: ['chapters'],
118
+ },
119
+ handler: async (rawArgs) => {
120
+ const args = rawArgs;
121
+ return this.handleGenerateChapters(args);
122
+ },
123
+ },
124
+ ];
125
+ }
126
+ async handleToolCall(toolName, args) {
127
+ switch (toolName) {
128
+ case 'generate_chapters':
129
+ return this.handleGenerateChapters(args);
130
+ default:
131
+ throw new Error(`Unknown tool: ${toolName}`);
132
+ }
133
+ }
134
+ async handleGenerateChapters(args) {
135
+ const { chapters } = args;
136
+ await fs.mkdir(this.chaptersDir, { recursive: true });
137
+ // Write all 4 formats in parallel
138
+ await Promise.all([
139
+ fs.writeFile(path.join(this.chaptersDir, 'chapters.json'), generateChaptersJSON(chapters), 'utf-8'),
140
+ fs.writeFile(path.join(this.chaptersDir, 'chapters-youtube.txt'), generateYouTubeTimestamps(chapters), 'utf-8'),
141
+ fs.writeFile(path.join(this.chaptersDir, 'chapters.md'), generateChaptersMarkdown(chapters), 'utf-8'),
142
+ fs.writeFile(path.join(this.chaptersDir, 'chapters.ffmetadata'), generateFFMetadata(chapters, this.totalDuration), 'utf-8'),
143
+ ]);
144
+ logger.info(`[ChapterAgent] Wrote ${chapters.length} chapters in 4 formats → ${this.chaptersDir}`);
145
+ return `Chapters written: ${chapters.length} chapters in 4 formats to ${this.chaptersDir}`;
146
+ }
147
+ }
148
+ // ── Public API ───────────────────────────────────────────────────────────────
149
+ /**
150
+ * Generate chapters for a video recording.
151
+ *
152
+ * 1. Creates a ChapterAgent with a `generate_chapters` tool
153
+ * 2. Builds a prompt containing the full transcript with timestamps
154
+ * 3. Lets the agent analyse the transcript and identify chapter boundaries
155
+ * 4. Returns the array of {@link Chapter} objects
156
+ */
157
+ export async function generateChapters(video, transcript) {
158
+ const config = getConfig();
159
+ const outputDir = path.join(config.OUTPUT_DIR, video.slug);
160
+ const agent = new ChapterAgent(outputDir, video.duration);
161
+ const transcriptBlock = buildTranscriptBlock(transcript);
162
+ const userPrompt = [
163
+ `**Video:** ${video.filename}`,
164
+ `**Duration:** ${fmtTime(video.duration)} (${Math.round(video.duration)} seconds)`,
165
+ '',
166
+ '---',
167
+ '',
168
+ '**Transcript:**',
169
+ '',
170
+ transcriptBlock,
171
+ ].join('\n');
172
+ let capturedChapters;
173
+ // Intercept generate_chapters args to capture the result
174
+ // Uses `as any` to access private method — required by the intercept-and-capture pattern
175
+ const origHandler = agent.handleGenerateChapters.bind(agent);
176
+ agent.handleGenerateChapters = async (args) => {
177
+ capturedChapters = args.chapters;
178
+ return origHandler(args);
179
+ };
180
+ try {
181
+ await agent.run(userPrompt);
182
+ if (!capturedChapters) {
183
+ throw new Error('ChapterAgent did not call generate_chapters');
184
+ }
185
+ return capturedChapters;
186
+ }
187
+ finally {
188
+ await agent.destroy();
189
+ }
190
+ }
191
+ //# sourceMappingURL=ChapterAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChapterAgent.js","sourceRoot":"","sources":["../../src/agents/ChapterAgent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { VideoFile, Transcript, MediumClip } from '../types';
2
+ export declare function generateMediumClips(video: VideoFile, transcript: Transcript): Promise<MediumClip[]>;
3
+ //# sourceMappingURL=MediumVideoAgent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediumVideoAgent.d.ts","sourceRoot":"","sources":["../../src/agents/MediumVideoAgent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAiB,MAAM,UAAU,CAAA;AAyJ3E,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,UAAU,EAAE,CAAC,CAiHvB"}