@tyvm/knowhow 0.0.68 → 0.0.70

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 (215) hide show
  1. package/docs/shell-commands.md +174 -0
  2. package/package.json +2 -2
  3. package/src/agents/base/base.ts +1 -3
  4. package/src/agents/developer/developer.ts +21 -16
  5. package/src/agents/tools/agentCall.ts +4 -2
  6. package/src/agents/tools/fileSearch.ts +5 -1
  7. package/src/agents/tools/list.ts +41 -37
  8. package/src/agents/tools/startAgentTask.ts +131 -22
  9. package/src/chat/CliChatService.ts +57 -11
  10. package/src/chat/modules/AgentModule.ts +72 -12
  11. package/src/chat/modules/CustomCommandsModule.ts +79 -0
  12. package/src/chat/modules/InternalChatModule.ts +11 -1
  13. package/src/chat/modules/ShellCommandModule.ts +96 -0
  14. package/src/chat/modules/index.ts +1 -0
  15. package/src/chat/types.ts +14 -2
  16. package/src/chat.ts +16 -13
  17. package/src/cli.ts +16 -6
  18. package/src/clients/anthropic.ts +88 -91
  19. package/src/clients/gemini.ts +495 -94
  20. package/src/clients/index.ts +125 -0
  21. package/src/clients/knowhow.ts +81 -0
  22. package/src/clients/openai.ts +256 -145
  23. package/src/clients/pricing/anthropic.ts +90 -0
  24. package/src/clients/pricing/google.ts +65 -0
  25. package/src/clients/pricing/index.ts +4 -0
  26. package/src/clients/pricing/openai.ts +134 -0
  27. package/src/clients/pricing/xai.ts +62 -0
  28. package/src/clients/types.ts +170 -1
  29. package/src/clients/xai.ts +275 -46
  30. package/src/config.ts +61 -15
  31. package/src/embeddings.ts +9 -1
  32. package/src/microphone.ts +15 -16
  33. package/src/migrations.ts +151 -0
  34. package/src/plugins/AgentsMdPlugin.ts +118 -0
  35. package/src/plugins/PluginBase.ts +8 -0
  36. package/src/plugins/downloader/downloader.ts +5 -6
  37. package/src/plugins/embedding.ts +10 -8
  38. package/src/plugins/exec.ts +70 -0
  39. package/src/plugins/github.ts +120 -74
  40. package/src/plugins/language.ts +11 -13
  41. package/src/plugins/plugins.ts +25 -4
  42. package/src/plugins/tmux.ts +132 -0
  43. package/src/plugins/types.ts +1 -0
  44. package/src/plugins/vim.ts +14 -1
  45. package/src/server/index.ts +2 -0
  46. package/src/services/AgentSyncFs.ts +417 -0
  47. package/src/services/{AgentSynchronization.ts → AgentSyncKnowhowWeb.ts} +2 -2
  48. package/src/services/EventService.ts +0 -1
  49. package/src/services/KnowhowClient.ts +106 -0
  50. package/src/services/index.ts +4 -2
  51. package/src/types.ts +57 -4
  52. package/src/worker.ts +25 -2
  53. package/tests/manual/modalities/README.md +157 -0
  54. package/tests/manual/modalities/google.modalities.test.ts +335 -0
  55. package/tests/manual/modalities/openai.modalities.test.ts +329 -0
  56. package/tests/manual/modalities/streaming.test.ts +260 -0
  57. package/tests/manual/modalities/xai.modalities.test.ts +307 -0
  58. package/tests/plugins/language/languagePlugin-content-triggers.test.ts +5 -5
  59. package/tests/plugins/language/languagePlugin-integration.test.ts +1 -1
  60. package/tests/plugins/language/languagePlugin.test.ts +17 -8
  61. package/ts_build/package.json +2 -2
  62. package/ts_build/src/agents/base/base.js +1 -1
  63. package/ts_build/src/agents/base/base.js.map +1 -1
  64. package/ts_build/src/agents/developer/developer.js +21 -15
  65. package/ts_build/src/agents/developer/developer.js.map +1 -1
  66. package/ts_build/src/agents/tools/agentCall.js +4 -2
  67. package/ts_build/src/agents/tools/agentCall.js.map +1 -1
  68. package/ts_build/src/agents/tools/executeScript/index.d.ts +1 -1
  69. package/ts_build/src/agents/tools/fileSearch.js +2 -1
  70. package/ts_build/src/agents/tools/fileSearch.js.map +1 -1
  71. package/ts_build/src/agents/tools/github/index.d.ts +1 -1
  72. package/ts_build/src/agents/tools/list.js +41 -37
  73. package/ts_build/src/agents/tools/list.js.map +1 -1
  74. package/ts_build/src/agents/tools/startAgentTask.d.ts +2 -1
  75. package/ts_build/src/agents/tools/startAgentTask.js +118 -17
  76. package/ts_build/src/agents/tools/startAgentTask.js.map +1 -1
  77. package/ts_build/src/chat/CliChatService.d.ts +4 -0
  78. package/ts_build/src/chat/CliChatService.js +39 -5
  79. package/ts_build/src/chat/CliChatService.js.map +1 -1
  80. package/ts_build/src/chat/modules/AgentModule.d.ts +4 -1
  81. package/ts_build/src/chat/modules/AgentModule.js +49 -11
  82. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  83. package/ts_build/src/chat/modules/CustomCommandsModule.d.ts +9 -0
  84. package/ts_build/src/chat/modules/CustomCommandsModule.js +58 -0
  85. package/ts_build/src/chat/modules/CustomCommandsModule.js.map +1 -0
  86. package/ts_build/src/chat/modules/InternalChatModule.d.ts +2 -0
  87. package/ts_build/src/chat/modules/InternalChatModule.js +10 -0
  88. package/ts_build/src/chat/modules/InternalChatModule.js.map +1 -1
  89. package/ts_build/src/chat/modules/ShellCommandModule.d.ts +8 -0
  90. package/ts_build/src/chat/modules/ShellCommandModule.js +83 -0
  91. package/ts_build/src/chat/modules/ShellCommandModule.js.map +1 -0
  92. package/ts_build/src/chat/modules/index.d.ts +1 -0
  93. package/ts_build/src/chat/modules/index.js +3 -1
  94. package/ts_build/src/chat/modules/index.js.map +1 -1
  95. package/ts_build/src/chat/types.d.ts +11 -1
  96. package/ts_build/src/chat.js +16 -13
  97. package/ts_build/src/chat.js.map +1 -1
  98. package/ts_build/src/cli.js +10 -3
  99. package/ts_build/src/cli.js.map +1 -1
  100. package/ts_build/src/clients/anthropic.d.ts +6 -1
  101. package/ts_build/src/clients/anthropic.js +47 -92
  102. package/ts_build/src/clients/anthropic.js.map +1 -1
  103. package/ts_build/src/clients/gemini.d.ts +81 -2
  104. package/ts_build/src/clients/gemini.js +362 -79
  105. package/ts_build/src/clients/gemini.js.map +1 -1
  106. package/ts_build/src/clients/index.d.ts +9 -1
  107. package/ts_build/src/clients/index.js +65 -0
  108. package/ts_build/src/clients/index.js.map +1 -1
  109. package/ts_build/src/clients/knowhow.d.ts +9 -1
  110. package/ts_build/src/clients/knowhow.js +43 -0
  111. package/ts_build/src/clients/knowhow.js.map +1 -1
  112. package/ts_build/src/clients/openai.d.ts +9 -1
  113. package/ts_build/src/clients/openai.js +201 -133
  114. package/ts_build/src/clients/openai.js.map +1 -1
  115. package/ts_build/src/clients/pricing/anthropic.d.ts +17 -0
  116. package/ts_build/src/clients/pricing/anthropic.js +93 -0
  117. package/ts_build/src/clients/pricing/anthropic.js.map +1 -0
  118. package/ts_build/src/clients/pricing/google.d.ts +73 -0
  119. package/ts_build/src/clients/pricing/google.js +68 -0
  120. package/ts_build/src/clients/pricing/google.js.map +1 -0
  121. package/ts_build/src/clients/pricing/index.d.ts +4 -0
  122. package/ts_build/src/clients/pricing/index.js +14 -0
  123. package/ts_build/src/clients/pricing/index.js.map +1 -0
  124. package/ts_build/src/clients/pricing/openai.d.ts +7 -0
  125. package/ts_build/src/clients/pricing/openai.js +137 -0
  126. package/ts_build/src/clients/pricing/openai.js.map +1 -0
  127. package/ts_build/src/clients/pricing/xai.d.ts +26 -0
  128. package/ts_build/src/clients/pricing/xai.js +59 -0
  129. package/ts_build/src/clients/pricing/xai.js.map +1 -0
  130. package/ts_build/src/clients/types.d.ts +135 -0
  131. package/ts_build/src/clients/xai.d.ts +9 -1
  132. package/ts_build/src/clients/xai.js +178 -46
  133. package/ts_build/src/clients/xai.js.map +1 -1
  134. package/ts_build/src/config.d.ts +1 -0
  135. package/ts_build/src/config.js +45 -16
  136. package/ts_build/src/config.js.map +1 -1
  137. package/ts_build/src/embeddings.js +8 -1
  138. package/ts_build/src/embeddings.js.map +1 -1
  139. package/ts_build/src/microphone.js +7 -9
  140. package/ts_build/src/microphone.js.map +1 -1
  141. package/ts_build/src/migrations.d.ts +17 -0
  142. package/ts_build/src/migrations.js +86 -0
  143. package/ts_build/src/migrations.js.map +1 -0
  144. package/ts_build/src/plugins/AgentsMdPlugin.d.ts +13 -0
  145. package/ts_build/src/plugins/AgentsMdPlugin.js +118 -0
  146. package/ts_build/src/plugins/AgentsMdPlugin.js.map +1 -0
  147. package/ts_build/src/plugins/PluginBase.d.ts +1 -0
  148. package/ts_build/src/plugins/PluginBase.js +3 -0
  149. package/ts_build/src/plugins/PluginBase.js.map +1 -1
  150. package/ts_build/src/plugins/downloader/downloader.js +5 -5
  151. package/ts_build/src/plugins/downloader/downloader.js.map +1 -1
  152. package/ts_build/src/plugins/embedding.js +9 -8
  153. package/ts_build/src/plugins/embedding.js.map +1 -1
  154. package/ts_build/src/plugins/exec.d.ts +10 -0
  155. package/ts_build/src/plugins/exec.js +56 -0
  156. package/ts_build/src/plugins/exec.js.map +1 -0
  157. package/ts_build/src/plugins/github.js +93 -51
  158. package/ts_build/src/plugins/github.js.map +1 -1
  159. package/ts_build/src/plugins/language.js +14 -11
  160. package/ts_build/src/plugins/language.js.map +1 -1
  161. package/ts_build/src/plugins/plugins.d.ts +1 -0
  162. package/ts_build/src/plugins/plugins.js +19 -1
  163. package/ts_build/src/plugins/plugins.js.map +1 -1
  164. package/ts_build/src/plugins/tmux.d.ts +14 -0
  165. package/ts_build/src/plugins/tmux.js +108 -0
  166. package/ts_build/src/plugins/tmux.js.map +1 -0
  167. package/ts_build/src/plugins/types.d.ts +1 -0
  168. package/ts_build/src/plugins/vim.js +11 -1
  169. package/ts_build/src/plugins/vim.js.map +1 -1
  170. package/ts_build/src/server/index.js.map +1 -1
  171. package/ts_build/src/services/AgentSyncFs.d.ts +34 -0
  172. package/ts_build/src/services/AgentSyncFs.js +325 -0
  173. package/ts_build/src/services/AgentSyncFs.js.map +1 -0
  174. package/ts_build/src/services/AgentSyncKnowhowWeb.d.ts +29 -0
  175. package/ts_build/src/services/AgentSyncKnowhowWeb.js +178 -0
  176. package/ts_build/src/services/AgentSyncKnowhowWeb.js.map +1 -0
  177. package/ts_build/src/services/AgentSynchronization.d.ts +1 -1
  178. package/ts_build/src/services/AgentSynchronization.js +3 -3
  179. package/ts_build/src/services/AgentSynchronization.js.map +1 -1
  180. package/ts_build/src/services/EventService.js.map +1 -1
  181. package/ts_build/src/services/KnowhowClient.d.ts +9 -1
  182. package/ts_build/src/services/KnowhowClient.js +58 -0
  183. package/ts_build/src/services/KnowhowClient.js.map +1 -1
  184. package/ts_build/src/services/index.d.ts +2 -1
  185. package/ts_build/src/services/index.js +2 -1
  186. package/ts_build/src/services/index.js.map +1 -1
  187. package/ts_build/src/types.d.ts +26 -1
  188. package/ts_build/src/types.js +45 -4
  189. package/ts_build/src/types.js.map +1 -1
  190. package/ts_build/src/utils/PersistentInputManager.d.ts +28 -0
  191. package/ts_build/src/utils/PersistentInputManager.js +293 -0
  192. package/ts_build/src/utils/PersistentInputManager.js.map +1 -0
  193. package/ts_build/src/worker.js +11 -2
  194. package/ts_build/src/worker.js.map +1 -1
  195. package/ts_build/tests/manual/modalities/google.modalities.test.d.ts +1 -0
  196. package/ts_build/tests/manual/modalities/google.modalities.test.js +252 -0
  197. package/ts_build/tests/manual/modalities/google.modalities.test.js.map +1 -0
  198. package/ts_build/tests/manual/modalities/openai.modalities.test.d.ts +1 -0
  199. package/ts_build/tests/manual/modalities/openai.modalities.test.js +252 -0
  200. package/ts_build/tests/manual/modalities/openai.modalities.test.js.map +1 -0
  201. package/ts_build/tests/manual/modalities/streaming.test.d.ts +1 -0
  202. package/ts_build/tests/manual/modalities/streaming.test.js +206 -0
  203. package/ts_build/tests/manual/modalities/streaming.test.js.map +1 -0
  204. package/ts_build/tests/manual/modalities/xai.modalities.test.d.ts +1 -0
  205. package/ts_build/tests/manual/modalities/xai.modalities.test.js +226 -0
  206. package/ts_build/tests/manual/modalities/xai.modalities.test.js.map +1 -0
  207. package/ts_build/tests/manual/persistent-input-test.d.ts +1 -0
  208. package/ts_build/tests/manual/persistent-input-test.js +35 -0
  209. package/ts_build/tests/manual/persistent-input-test.js.map +1 -0
  210. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +5 -5
  211. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +1 -1
  212. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +1 -1
  213. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +1 -1
  214. package/ts_build/tests/plugins/language/languagePlugin.test.js +17 -7
  215. package/ts_build/tests/plugins/language/languagePlugin.test.js.map +1 -1
@@ -248,12 +248,21 @@ async function worker(options) {
248
248
  tunnelConnection.on("open", () => {
249
249
  console.log("Tunnel WebSocket connected");
250
250
  const allowedPorts = config.worker?.tunnel?.allowedPorts || [];
251
+ const urlRewriter = (port, metadata) => {
252
+ const workerId = metadata?.workerId;
253
+ const secret = metadata?.secret;
254
+ const subdomain = secret
255
+ ? `${secret}-p${port}`
256
+ : `${workerId}-p${port}`;
257
+ const replacementUrl = `${subdomain}.${tunnelDomain}`;
258
+ return replacementUrl;
259
+ };
251
260
  tunnelHandler = (0, knowhow_tunnel_1.createTunnelHandler)(tunnelConnection, {
252
261
  allowedPorts,
253
262
  maxConcurrentStreams: config.worker?.tunnel?.maxConcurrentStreams || 50,
263
+ tunnelUseHttps: tunnelUseHttps,
254
264
  localHost: tunnelLocalHost,
255
- tunnelDomain,
256
- tunnelUseHttps,
265
+ urlRewriter,
257
266
  enableUrlRewriting: config.worker?.tunnel?.enableUrlRewriting !== false,
258
267
  portMapping,
259
268
  logLevel: "debug",
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,2BAA+B;AAC/B,yDAA0E;AAC1E,8CAAoD;AACpD,mCAAkC;AAClC,yCAAsC;AACtC,wCAAkD;AAClD,yDAA2C;AAC3C,4DAA0C;AAC1C,mCAA+B;AAC/B,qCAAmD;AACnD,4DAA2D;AAC3D,qDAAsD;AAEtD,MAAM,OAAO,GAAG,+BAAe,CAAC;AAKhC,KAAK,UAAU,kBAAkB,CAC/B,OAAkE,EAClE,MAAW;IAEX,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,mBAAQ,GAAE,CAAC;IAE9B,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IAGtE,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,oBAAoB,EAAE,CAAC;IAE5D,IAAI,CAAC,eAAe,EAAE;QACpB,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAGrC,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACrE,IAAI;QACF,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;KACjC;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAGD,MAAM,GAAG,GAAG,MAAM,IAAA,eAAO,GAAE,CAAC;IAG5B,IAAI,WAAmB,CAAC;IAExB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,IAAI;QACF,WAAW,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC;YAC5C,YAAY,EAAE,OAAO,CAAC,GAAG,EAAE;YAC3B,GAAG;YACH,MAAM,EAAE,OAAO;YACf,MAAM;YACN,KAAK,EAAE,OAAO,EAAE,KAAK;YACrB,OAAO,EAAE,OAAO,EAAE,OAAO;SAC1B,CAAC,CAAC;KACJ;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAGD,IAAI;QACF,MAAM,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;KAC/C;YAAS;QACR,MAAM,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;KACzC;AACH,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,OAM5B;IACC,MAAM,MAAM,GAAG,MAAM,IAAA,kBAAS,GAAE,CAAC;IAGjC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,CAAC;IAE7D,IAAI,cAAc,EAAE;QAClB,OAAO,CAAC,GAAG,CACT,mEAAmE,CACpE,CAAC;QAEF,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;YACxB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;SAC1B;KACF;IAGD,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,aAAa,GAAG,EAAE,CAAC;IAEvB,IAAI,OAAO,EAAE,OAAO,EAAE;QACpB,gBAAgB,GAAG,IAAI,CAAC;QACxB,aAAa,GAAG,0BAA0B,CAAC;QAG3C,MAAM,aAAa,GAAG;YACpB,GAAG,MAAM;YACT,MAAM,EAAE;gBACN,GAAG,MAAM,CAAC,MAAM;gBAChB,OAAO,EAAE,IAAI;aACd;SACF,CAAC;QACF,MAAM,IAAA,qBAAY,EAAC,aAAa,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;KAC3D;SAAM,IAAI,OAAO,EAAE,SAAS,EAAE;QAC7B,gBAAgB,GAAG,KAAK,CAAC;QACzB,aAAa,GAAG,6BAA6B,CAAC;QAG9C,MAAM,aAAa,GAAG;YACpB,GAAG,MAAM;YACT,MAAM,EAAE;gBACN,GAAG,MAAM,CAAC,MAAM;gBAChB,OAAO,EAAE,KAAK;aACf;SACF,CAAC;QACF,MAAM,IAAA,qBAAY,EAAC,aAAa,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;KAC9D;SAAM;QAEL,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,KAAK,CAAC;QACnD,aAAa;YACX,MAAM,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS;gBAClC,CAAC,CAAC,WAAW,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,GAAG;gBAC3D,CAAC,CAAC,sBAAsB,CAAC;KAC9B;IAED,IAAI,gBAAgB,EAAE;QACpB,OAAO,CAAC,GAAG,CAAC,0BAA0B,aAAa,GAAG,CAAC,CAAC;QACxD,OAAO,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;KAC5C;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,mBAAQ,GAAE,CAAC;IAE7B,MAAM,aAAa,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,eAAW,CAAC,KAAK,EAAE,CAAC;IAC5D,KAAK,CAAC,WAAW,CAAC,oBAAa,EAAE,aAAa,CAAC,CAAC;IAChD,KAAK,CAAC,WAAW,CAAC,eAAW,CAAC,WAAW,EAAE,eAAW,CAAC,KAAK,CAAC,CAAC;IAE9D,MAAM,SAAS,GAAG,IAAI,sBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,gBAAgB,CAAC;IACpC,MAAM,aAAa,GAAG,OAAO,CAAC;IAE9B,IAAI,CAAC,gBAAgB,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,yBAAyB,aAAa,GAAG,CAAC,CAAC;KACxD;IAID,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;QACjD,OAAO,CAAC,GAAG,CACT,+FAA+F,CAChG,CAAC;QACF,MAAM,CAAC,MAAM,GAAG;YACd,GAAG,MAAM,CAAC,MAAM;YAChB,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE;SACnC,CAAC;QAEF,MAAM,IAAA,qBAAY,EAAC,MAAM,CAAC,CAAC;QAC3B,OAAO;KACR;IAGD,IAAI,OAAO,EAAE,QAAQ,EAAE;QACrB,MAAM,IAAA,mCAAkB,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,OAAO;KACR;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACrE,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAExE,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,aAAa,GAAyB,IAAI,CAAC;IAC/C,IAAI,QAAQ,GAAqB,IAAI,CAAC;IAGtC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,IAAI,KAAK,CAAC;IAG9D,IAAI,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;IACvD,IAAI,CAAC,eAAe,EAAE;QAEpB,IAAI,cAAc,EAAE;YAClB,eAAe,GAAG,sBAAsB,CAAC;YACzC,OAAO,CAAC,GAAG,CACT,iFAAiF,CAClF,CAAC;SACH;aAAM;YACL,eAAe,GAAG,WAAW,CAAC;SAC/B;KACF;IAGD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC;IAC7D,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QACvC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACnE,OAAO,CAAC,GAAG,CAAC,qBAAqB,aAAa,gBAAgB,QAAQ,EAAE,CAAC,CAAC;SAC3E;KACF;IAED,IAAI,aAAa,EAAE;QACjB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC;QAC9D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,OAAO,CAAC,IAAI,CACV,4FAA4F,CAC7F,CAAC;SACH;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,gCAAgC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACvE;KACF;SAAM;QACL,OAAO,CAAC,GAAG,CACT,2EAA2E,CAC5E,CAAC;KACH;IAKD,SAAS,mBAAmB,CAAC,MAAc;QAIzC,IAAI;YACF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;YAG3C,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE;gBAChE,OAAO;oBACL,MAAM,EAAE,UAAU,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE;oBACpD,QAAQ;iBACT,CAAC;aACH;YACD,OAAO,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC;SACvD;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;YACjE,OAAO,EAAE,MAAM,EAAE,uBAAuB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;SAC7D;IACH,CAAC;IAED,KAAK,UAAU,gBAAgB;QAC7B,MAAM,GAAG,GAAG,MAAM,IAAA,eAAO,GAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;QAExC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,YAAE,CAAC,OAAO,EAAE,CAAC;QAG7B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,YAAE,CAAC,QAAQ,EAAE,CAAC;QAC9D,MAAM,IAAI,GACR,OAAO,CAAC,GAAG,CAAC,WAAW;YACvB,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAEtD,MAAM,OAAO,GAA2B;YACtC,aAAa,EAAE,UAAU,GAAG,EAAE;YAC9B,YAAY,EAAE,GAAG,UAAU,IAAI,aAAa,IAAI,QAAQ,EAAE;YAC1D,IAAI,EAAE,IAAI;SACX,CAAC;QAGF,IAAI,OAAO,EAAE,KAAK,EAAE;YAClB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;SACnD;aAAM,IAAI,OAAO,EAAE,OAAO,EAAE;YAC3B,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;SACpD;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;SAC3D;QAED,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,GACtD,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE/B,MAAM,EAAE,GAAG,IAAI,cAAS,CAAC,GAAG,OAAO,YAAY,EAAE;YAC/C,OAAO;SACR,CAAC,CAAC;QAGH,IAAI,gBAAgB,GAAqB,IAAI,CAAC;QAC9C,IAAI,aAAa,EAAE;YACjB,gBAAgB,GAAG,IAAI,cAAS,CAAC,GAAG,OAAO,YAAY,EAAE;gBACvD,OAAO;aACR,CAAC,CAAC;YAEH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBAC/B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;gBAG1C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC;gBAG/D,aAAa,GAAG,IAAA,oCAAmB,EAAC,gBAAiB,EAAE;oBACrD,YAAY;oBACZ,oBAAoB,EAClB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,oBAAoB,IAAI,EAAE;oBACnD,SAAS,EAAE,eAAe;oBAC1B,YAAY;oBACZ,cAAc;oBACd,kBAAkB,EAChB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,KAAK;oBACrD,WAAW;oBACX,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;YAEH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBAC5C,OAAO,CAAC,GAAG,CACT,kCAAkC,IAAI,aAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,CACvE,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,8DAA8D,CAC/D,CAAC;gBAGF,IAAI,aAAa,EAAE;oBACjB,aAAa,CAAC,OAAO,EAAE,CAAC;oBACxB,aAAa,GAAG,IAAI,CAAC;iBACtB;gBACD,QAAQ,GAAG,IAAI,CAAC;gBAIhB,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrC,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;gBAEhD,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,QAAQ,GAAG,gBAAgB,CAAC;SAC7B;QAED,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACjB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;YACpC,OAAO,CAAC,GAAG,CACT,2BAA2B,IAAI,aAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,CAChE,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAG1C,IAAI,aAAa,EAAE;gBACjB,aAAa,GAAG,IAAI,CAAC;aACtB;YAED,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACvB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAE1B,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,EAAE;QACX,IAAI,UAAU,GAIH,IAAI,CAAC;QAEhB,IAAI,CAAC,SAAS,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACxC,UAAU,GAAG,MAAM,gBAAgB,EAAE,CAAC;SACvC;QACD,IAAI,UAAU,IAAI,SAAS,EAAE;YAC3B,IAAI;gBACF,MAAM,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;aAC5B;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;gBAC/C,SAAS,GAAG,KAAK,CAAC;aACnB;SACF;QACD,MAAM,IAAA,YAAI,EAAC,IAAI,CAAC,CAAC;KAClB;AACH,CAAC;AAjUD,wBAiUC"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const fs = __importStar(require("fs"));
27
+ const path = __importStar(require("path"));
28
+ const clients_1 = require("../../../src/clients");
29
+ const types_1 = require("../../../src/types");
30
+ const OUTPUT_DIR = path.join(__dirname, "outputs", "google");
31
+ function ensureOutputDir() {
32
+ fs.mkdirSync(OUTPUT_DIR, { recursive: true });
33
+ }
34
+ describe("Google (Gemini) Modalities", () => {
35
+ let client;
36
+ beforeAll(() => {
37
+ if (!process.env.GEMINI_API_KEY) {
38
+ console.warn("GEMINI_API_KEY not set – skipping Google modality tests");
39
+ }
40
+ ensureOutputDir();
41
+ client = new clients_1.AIClient();
42
+ });
43
+ test("1. Gemini TTS – generate audio and save to disk", async () => {
44
+ if (!process.env.GEMINI_API_KEY) {
45
+ console.log("Skipping: GEMINI_API_KEY not set");
46
+ return;
47
+ }
48
+ const outputPath = path.join(OUTPUT_DIR, "tts-output.wav");
49
+ if (fs.existsSync(outputPath)) {
50
+ console.log(`⏭️ Skipping: ${outputPath} already exists`);
51
+ return;
52
+ }
53
+ const text = "Hello! This is a test of the Google Gemini text-to-speech system. " +
54
+ "We are verifying that Gemini audio generation is working correctly.";
55
+ const response = await client.createAudioGeneration("google", {
56
+ model: types_1.Models.google.Gemini_25_Flash_TTS,
57
+ input: text,
58
+ voice: "Puck",
59
+ });
60
+ fs.writeFileSync(outputPath, response.audio);
61
+ console.log(`✅ Audio saved to: ${outputPath}`);
62
+ console.log(` Format: ${response.format}`);
63
+ console.log(` Size: ${response.audio.length} bytes`);
64
+ expect(response.audio).toBeInstanceOf(Buffer);
65
+ expect(response.audio.length).toBeGreaterThan(0);
66
+ expect(fs.existsSync(outputPath)).toBe(true);
67
+ }, 60000);
68
+ test("2. Gemini 2.0 Flash – inline image generation and save to disk", async () => {
69
+ if (!process.env.GEMINI_API_KEY) {
70
+ console.log("Skipping: GEMINI_API_KEY not set");
71
+ return;
72
+ }
73
+ const outputPath = path.join(OUTPUT_DIR, "gemini-flash-image.png");
74
+ if (fs.existsSync(outputPath)) {
75
+ console.log(`⏭️ Skipping: ${outputPath} already exists`);
76
+ return;
77
+ }
78
+ const prompt = "A watercolor painting of a serene mountain lake at sunrise, " +
79
+ "with reflections of pine trees in the calm water";
80
+ const response = await client.createImageGeneration("google", {
81
+ model: types_1.Models.google.Gemini_20_Flash_Preview_Image_Generation,
82
+ prompt,
83
+ n: 1,
84
+ });
85
+ expect(response.data.length).toBeGreaterThan(0);
86
+ const imageData = response.data[0];
87
+ if (imageData.b64_json) {
88
+ const buffer = Buffer.from(imageData.b64_json, "base64");
89
+ fs.writeFileSync(outputPath, buffer);
90
+ console.log(`✅ Gemini Flash image saved to: ${outputPath}`);
91
+ console.log(` Size: ${buffer.length} bytes`);
92
+ }
93
+ else if (imageData.url) {
94
+ fs.writeFileSync(path.join(OUTPUT_DIR, "gemini-flash-image-url.txt"), imageData.url);
95
+ console.log(`✅ Gemini Flash image URL saved`);
96
+ }
97
+ console.log(` Estimated cost: $${response.usd_cost?.toFixed(6)}`);
98
+ expect(response.created).toBeGreaterThan(0);
99
+ expect(response.data.length).toBeGreaterThan(0);
100
+ }, 90000);
101
+ test("3. Imagen 3 – generate image and save to disk", async () => {
102
+ if (!process.env.GEMINI_API_KEY) {
103
+ console.log("Skipping: GEMINI_API_KEY not set");
104
+ return;
105
+ }
106
+ const outputPath = path.join(OUTPUT_DIR, "imagen3-output.png");
107
+ if (fs.existsSync(outputPath)) {
108
+ console.log(`⏭️ Skipping: ${outputPath} already exists`);
109
+ return;
110
+ }
111
+ const prompt = "A photorealistic close-up of a red rose with dewdrops, " +
112
+ "dramatic lighting, shallow depth of field, professional photography";
113
+ const response = await client.createImageGeneration("google", {
114
+ model: types_1.Models.google.Imagen_3,
115
+ prompt,
116
+ n: 1,
117
+ });
118
+ expect(response.data.length).toBeGreaterThan(0);
119
+ const imageData = response.data[0];
120
+ if (imageData.b64_json) {
121
+ console.log(imageData.b64_json.slice(0, 100) + "...");
122
+ const buffer = Buffer.from(imageData.b64_json, "base64");
123
+ fs.writeFileSync(outputPath, buffer);
124
+ console.log(`✅ Imagen 3 image saved to: ${outputPath}`);
125
+ console.log(` Size: ${buffer.length} bytes`);
126
+ }
127
+ else if (imageData.url) {
128
+ fs.writeFileSync(path.join(OUTPUT_DIR, "imagen3-output-url.txt"), imageData.url);
129
+ console.log(`✅ Imagen 3 image URL saved`);
130
+ }
131
+ console.log(` Estimated cost: $${response.usd_cost?.toFixed(6)}`);
132
+ expect(response.created).toBeGreaterThan(0);
133
+ }, 90000);
134
+ test("4. Gemini Vision – describe the generated Imagen 3 image", async () => {
135
+ if (!process.env.GEMINI_API_KEY) {
136
+ console.log("Skipping: GEMINI_API_KEY not set");
137
+ return;
138
+ }
139
+ const outputPath = path.join(OUTPUT_DIR, "vision-description.txt");
140
+ if (fs.existsSync(outputPath)) {
141
+ console.log(`⏭️ Skipping: ${outputPath} already exists`);
142
+ return;
143
+ }
144
+ const imagePath = path.join(OUTPUT_DIR, "imagen3-output.png");
145
+ if (!fs.existsSync(imagePath)) {
146
+ console.log("Skipping: imagen3-output.png not found – run Imagen 3 test first");
147
+ return;
148
+ }
149
+ const imageBuffer = fs.readFileSync(imagePath);
150
+ const base64Image = imageBuffer.toString("base64");
151
+ const dataUrl = `data:image/png;base64,${base64Image}`;
152
+ const response = await client.createCompletion("google", {
153
+ model: types_1.Models.google.Gemini_20_Flash,
154
+ messages: [
155
+ {
156
+ role: "user",
157
+ content: [
158
+ {
159
+ type: "text",
160
+ text: "Please describe this image in detail. What do you see?",
161
+ },
162
+ {
163
+ type: "image_url",
164
+ image_url: { url: dataUrl },
165
+ },
166
+ ],
167
+ },
168
+ ],
169
+ max_tokens: 500,
170
+ });
171
+ const description = response.choices[0]?.message?.content || "";
172
+ fs.writeFileSync(outputPath, description);
173
+ console.log(`✅ Vision description saved to: ${outputPath}`);
174
+ console.log(` Description: ${description.substring(0, 200)}...`);
175
+ console.log(` Estimated cost: $${response.usd_cost?.toFixed(6)}`);
176
+ expect(description).toBeTruthy();
177
+ expect(description.length).toBeGreaterThan(10);
178
+ }, 60000);
179
+ test("5. Google Veo 3.1 – generate video and save to disk", async () => {
180
+ if (!process.env.GEMINI_API_KEY) {
181
+ console.log("Skipping: GEMINI_API_KEY not set");
182
+ return;
183
+ }
184
+ const outputPath = path.join(OUTPUT_DIR, "veo31-output.mp4");
185
+ const jobNamePath = path.join(OUTPUT_DIR, "veo31-job-name.txt");
186
+ if (fs.existsSync(outputPath)) {
187
+ console.log(`⏭️ Skipping: ${outputPath} already exists`);
188
+ return;
189
+ }
190
+ async function pollAndDownload(jobId) {
191
+ const maxPollingTime = 20 * 60 * 1000;
192
+ const pollingInterval = 10000;
193
+ const startTime = Date.now();
194
+ console.log(`⏳ Polling job: ${jobId}`);
195
+ while (Date.now() - startTime < maxPollingTime) {
196
+ await new Promise((resolve) => setTimeout(resolve, pollingInterval));
197
+ const status = await client.getVideoStatus("google", { jobId });
198
+ console.log(` Status: ${status.status}`);
199
+ if (status.status === "failed") {
200
+ throw new Error(`Veo video generation failed: ${status.error}`);
201
+ }
202
+ if (status.status === "completed") {
203
+ const videoData = status.data?.[0];
204
+ const uri = videoData?.url || videoData?.fileUri;
205
+ if (!uri) {
206
+ throw new Error("No video URI in completed status response");
207
+ }
208
+ console.log(` Video URI: ${uri}`);
209
+ console.log(`⏳ Downloading video via Files API...`);
210
+ const downloaded = await client.downloadFile("google", {
211
+ fileId: uri,
212
+ uri,
213
+ filePath: outputPath,
214
+ });
215
+ console.log(`✅ Veo 3.1 video saved to: ${outputPath} (${downloaded.data.length} bytes)`);
216
+ console.log(` MIME type: ${downloaded.mimeType}`);
217
+ if (fs.existsSync(jobNamePath))
218
+ fs.unlinkSync(jobNamePath);
219
+ return;
220
+ }
221
+ }
222
+ throw new Error("Veo 3.1 video generation timed out after 20 minutes of polling");
223
+ }
224
+ if (fs.existsSync(jobNamePath)) {
225
+ const jobId = fs.readFileSync(jobNamePath, "utf8").trim();
226
+ console.log(`🔄 Resuming poll for existing job: ${jobId}`);
227
+ await pollAndDownload(jobId);
228
+ expect(fs.existsSync(outputPath)).toBe(true);
229
+ return;
230
+ }
231
+ const prompt = "A timelapse of clouds moving over a mountain range at golden hour, " +
232
+ "cinematic quality, smooth motion";
233
+ console.log("⏳ Submitting Veo 3.1 video generation job...");
234
+ const response = await client.createVideoGeneration("google", {
235
+ model: types_1.Models.google.Veo_3_1,
236
+ prompt,
237
+ n: 1,
238
+ duration: 6,
239
+ aspect_ratio: "16:9",
240
+ });
241
+ const jobId = response.jobId;
242
+ if (!jobId) {
243
+ throw new Error(`No jobId returned from video generation: ${JSON.stringify(response)}`);
244
+ }
245
+ fs.writeFileSync(jobNamePath, jobId);
246
+ console.log(`📝 Job ID saved to: ${jobNamePath}`);
247
+ console.log(` Job ID: ${jobId}`);
248
+ await pollAndDownload(jobId);
249
+ expect(fs.existsSync(outputPath)).toBe(true);
250
+ }, 1500000);
251
+ });
252
+ //# sourceMappingURL=google.modalities.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.modalities.test.js","sourceRoot":"","sources":["../../../../tests/manual/modalities/google.modalities.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const fs = __importStar(require("fs"));
27
+ const path = __importStar(require("path"));
28
+ const clients_1 = require("../../../src/clients");
29
+ const types_1 = require("../../../src/types");
30
+ const OUTPUT_DIR = path.join(__dirname, "outputs", "openai");
31
+ function ensureOutputDir() {
32
+ fs.mkdirSync(OUTPUT_DIR, { recursive: true });
33
+ }
34
+ describe("OpenAI Modalities", () => {
35
+ let client;
36
+ beforeAll(() => {
37
+ if (!process.env.OPENAI_KEY) {
38
+ console.warn("OPENAI_KEY not set – skipping OpenAI modality tests");
39
+ }
40
+ ensureOutputDir();
41
+ client = new clients_1.AIClient();
42
+ });
43
+ test("1. OpenAI TTS – generate audio and save to disk", async () => {
44
+ if (!process.env.OPENAI_KEY) {
45
+ console.log("Skipping: OPENAI_KEY not set");
46
+ return;
47
+ }
48
+ const text = "Hello! This is a test of the OpenAI text-to-speech system. " +
49
+ "We are verifying that audio generation is working correctly.";
50
+ const response = await client.createAudioGeneration("openai", {
51
+ model: "tts-1",
52
+ input: text,
53
+ voice: "alloy",
54
+ response_format: "mp3",
55
+ });
56
+ const outputPath = path.join(OUTPUT_DIR, "tts-output.mp3");
57
+ fs.writeFileSync(outputPath, response.audio);
58
+ console.log(`✅ Audio saved to: ${outputPath}`);
59
+ console.log(` Format: ${response.format}`);
60
+ console.log(` Size: ${response.audio.length} bytes`);
61
+ console.log(` Estimated cost: $${response.usd_cost?.toFixed(6)}`);
62
+ expect(response.audio).toBeInstanceOf(Buffer);
63
+ expect(response.audio.length).toBeGreaterThan(0);
64
+ expect(fs.existsSync(outputPath)).toBe(true);
65
+ }, 60000);
66
+ test("2. OpenAI Whisper – transcribe generated audio", async () => {
67
+ if (!process.env.OPENAI_KEY) {
68
+ console.log("Skipping: OPENAI_KEY not set");
69
+ return;
70
+ }
71
+ const audioPath = path.join(OUTPUT_DIR, "tts-output.mp3");
72
+ if (!fs.existsSync(audioPath)) {
73
+ console.log("Skipping: tts-output.mp3 not found – run TTS test first");
74
+ return;
75
+ }
76
+ const audioStream = fs.createReadStream(audioPath);
77
+ const response = await client.createAudioTranscription("openai", {
78
+ file: audioStream,
79
+ model: "whisper-1",
80
+ response_format: "verbose_json",
81
+ language: "en",
82
+ });
83
+ const outputPath = path.join(OUTPUT_DIR, "transcription.json");
84
+ fs.writeFileSync(outputPath, JSON.stringify(response, null, 2));
85
+ console.log(`✅ Transcription saved to: ${outputPath}`);
86
+ console.log(` Text: ${response.text}`);
87
+ console.log(` Language: ${response.language}`);
88
+ console.log(` Duration: ${response.duration}s`);
89
+ console.log(` Estimated cost: $${response.usd_cost?.toFixed(6)}`);
90
+ expect(response.text).toBeTruthy();
91
+ expect(response.text.toLowerCase()).toContain("hello");
92
+ }, 60000);
93
+ test("3. OpenAI DALL-E 3 – generate image and save to disk", async () => {
94
+ if (!process.env.OPENAI_KEY) {
95
+ console.log("Skipping: OPENAI_KEY not set");
96
+ return;
97
+ }
98
+ const prompt = "A photorealistic image of a futuristic robot reading a book in a cozy library, warm lighting, 4k detail";
99
+ const response = await client.createImageGeneration("openai", {
100
+ model: "dall-e-3",
101
+ prompt,
102
+ n: 1,
103
+ size: "1024x1024",
104
+ quality: "standard",
105
+ response_format: "b64_json",
106
+ });
107
+ expect(response.data).toHaveLength(1);
108
+ const imageData = response.data[0];
109
+ const outputPath = path.join(OUTPUT_DIR, "dalle3-output.png");
110
+ if (imageData.b64_json) {
111
+ const buffer = Buffer.from(imageData.b64_json, "base64");
112
+ fs.writeFileSync(outputPath, buffer);
113
+ console.log(`✅ Image saved to: ${outputPath}`);
114
+ console.log(` Size: ${buffer.length} bytes`);
115
+ }
116
+ else if (imageData.url) {
117
+ fs.writeFileSync(path.join(OUTPUT_DIR, "dalle3-output-url.txt"), imageData.url);
118
+ console.log(`✅ Image URL saved: ${imageData.url}`);
119
+ }
120
+ if (imageData.revised_prompt) {
121
+ console.log(` Revised prompt: ${imageData.revised_prompt}`);
122
+ }
123
+ console.log(` Estimated cost: $${response.usd_cost?.toFixed(6)}`);
124
+ expect(response.data.length).toBeGreaterThan(0);
125
+ expect(response.created).toBeGreaterThan(0);
126
+ }, 60000);
127
+ test("4. OpenAI Vision – describe the generated DALL-E image", async () => {
128
+ if (!process.env.OPENAI_KEY) {
129
+ console.log("Skipping: OPENAI_KEY not set");
130
+ return;
131
+ }
132
+ const imagePath = path.join(OUTPUT_DIR, "dalle3-output.png");
133
+ if (!fs.existsSync(imagePath)) {
134
+ console.log("Skipping: dalle3-output.png not found – run image generation test first");
135
+ return;
136
+ }
137
+ const imageBuffer = fs.readFileSync(imagePath);
138
+ const base64Image = imageBuffer.toString("base64");
139
+ const dataUrl = `data:image/png;base64,${base64Image}`;
140
+ const response = await client.createCompletion("openai", {
141
+ model: types_1.Models.openai.GPT_4o,
142
+ messages: [
143
+ {
144
+ role: "user",
145
+ content: [
146
+ {
147
+ type: "text",
148
+ text: "Please describe this image in detail. What do you see?",
149
+ },
150
+ {
151
+ type: "image_url",
152
+ image_url: { url: dataUrl },
153
+ },
154
+ ],
155
+ },
156
+ ],
157
+ max_tokens: 500,
158
+ });
159
+ const description = response.choices[0]?.message?.content || "";
160
+ const outputPath = path.join(OUTPUT_DIR, "vision-description.txt");
161
+ fs.writeFileSync(outputPath, description);
162
+ console.log(`✅ Vision description saved to: ${outputPath}`);
163
+ console.log(` Description: ${description.substring(0, 200)}...`);
164
+ console.log(` Estimated cost: $${response.usd_cost?.toFixed(6)}`);
165
+ expect(description).toBeTruthy();
166
+ expect(description.length).toBeGreaterThan(10);
167
+ }, 60000);
168
+ test("5. OpenAI Sora 2 – generate video and save to disk", async () => {
169
+ if (!process.env.OPENAI_KEY) {
170
+ console.log("Skipping: OPENAI_KEY not set");
171
+ return;
172
+ }
173
+ const outputPath = path.join(OUTPUT_DIR, "sora-output.mp4");
174
+ const outputUrlPath = path.join(OUTPUT_DIR, "sora-output-url.txt");
175
+ const jobIdPath = path.join(OUTPUT_DIR, "sora-job-id.txt");
176
+ if (fs.existsSync(outputPath) || fs.existsSync(outputUrlPath)) {
177
+ console.log(`⏭️ Skipping: output already exists`);
178
+ return;
179
+ }
180
+ const apiKey = process.env.OPENAI_KEY;
181
+ async function pollAndSave(videoId) {
182
+ const maxPollingTime = 20 * 60 * 1000;
183
+ const pollingInterval = 15000;
184
+ const startTime = Date.now();
185
+ console.log(`⏳ Polling video ID: ${videoId}`);
186
+ while (Date.now() - startTime < maxPollingTime) {
187
+ await new Promise((resolve) => setTimeout(resolve, pollingInterval));
188
+ const statusResponse = await fetch(`https://api.openai.com/v1/videos/${videoId}`, { headers: { Authorization: `Bearer ${apiKey}` } });
189
+ if (!statusResponse.ok) {
190
+ const errorText = await statusResponse.text();
191
+ throw new Error(`OpenAI video status check failed: ${statusResponse.status} ${errorText}`);
192
+ }
193
+ const statusData = await statusResponse.json();
194
+ console.log(` Status: ${statusData.status}`);
195
+ if (statusData.status === "completed") {
196
+ const contentResponse = await fetch(`https://api.openai.com/v1/videos/${videoId}/content`, { headers: { Authorization: `Bearer ${apiKey}` } });
197
+ if (!contentResponse.ok) {
198
+ const errorText = await contentResponse.text();
199
+ throw new Error(`OpenAI video download failed: ${contentResponse.status} ${errorText}`);
200
+ }
201
+ const videoBuffer = Buffer.from(await contentResponse.arrayBuffer());
202
+ fs.writeFileSync(outputPath, videoBuffer);
203
+ console.log(`✅ Video saved to: ${outputPath} (${videoBuffer.length} bytes)`);
204
+ if (fs.existsSync(jobIdPath))
205
+ fs.unlinkSync(jobIdPath);
206
+ return statusData;
207
+ }
208
+ else if (statusData.status === "failed") {
209
+ throw new Error(`OpenAI video generation failed: ${JSON.stringify(statusData)}`);
210
+ }
211
+ }
212
+ throw new Error("OpenAI video generation timed out after 20 minutes of polling");
213
+ }
214
+ if (fs.existsSync(jobIdPath)) {
215
+ const videoId = fs.readFileSync(jobIdPath, "utf8").trim();
216
+ console.log(`🔄 Resuming poll for existing job ID: ${videoId}`);
217
+ const statusData = await pollAndSave(videoId);
218
+ expect(fs.existsSync(outputPath)).toBe(true);
219
+ return;
220
+ }
221
+ const prompt = "A serene mountain lake at sunrise, mist rising from the water, " +
222
+ "golden light filtering through pine trees, cinematic wide shot";
223
+ console.log("⏳ Submitting OpenAI Sora 2 video generation job...");
224
+ const createPayload = {
225
+ model: types_1.Models.openai.Sora_2,
226
+ prompt,
227
+ seconds: "5",
228
+ };
229
+ const createResponse = await fetch("https://api.openai.com/v1/videos", {
230
+ method: "POST",
231
+ headers: {
232
+ "Content-Type": "application/json",
233
+ Authorization: `Bearer ${apiKey}`,
234
+ },
235
+ body: JSON.stringify(createPayload),
236
+ });
237
+ if (!createResponse.ok) {
238
+ const errorText = await createResponse.text();
239
+ throw new Error(`OpenAI video creation failed: ${createResponse.status} ${errorText}`);
240
+ }
241
+ const createData = await createResponse.json();
242
+ const videoId = createData.id;
243
+ if (!videoId) {
244
+ throw new Error(`No video ID in response: ${JSON.stringify(createData)}`);
245
+ }
246
+ fs.writeFileSync(jobIdPath, videoId);
247
+ console.log(`📝 Job ID saved to: ${jobIdPath} (ID: ${videoId})`);
248
+ await pollAndSave(videoId);
249
+ expect(fs.existsSync(outputPath)).toBe(true);
250
+ }, 1500000);
251
+ });
252
+ //# sourceMappingURL=openai.modalities.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.modalities.test.js","sourceRoot":"","sources":["../../../../tests/manual/modalities/openai.modalities.test.ts"],"names":[],"mappings":"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"}