@tyvm/knowhow 0.0.158 → 0.0.160

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 (870) hide show
  1. package/package.json +2 -2
  2. package/ts_build/package.json +2 -2
  3. package/ts_build/src/chat/CliChatService.d.ts +2 -1
  4. package/ts_build/src/chat/CliChatService.js +29 -3
  5. package/ts_build/src/chat/CliChatService.js.map +1 -1
  6. package/ts_build/src/chat/modules/AgentModule.js +21 -17
  7. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  8. package/ts_build/src/chat/renderer/ConsoleRenderer.js +32 -25
  9. package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
  10. package/ts_build/src/logger.d.ts +1 -0
  11. package/ts_build/src/logger.js +13 -1
  12. package/ts_build/src/logger.js.map +1 -1
  13. package/ts_build/src/utils/InputQueueManager.d.ts +8 -1
  14. package/ts_build/src/utils/InputQueueManager.js +72 -2
  15. package/ts_build/src/utils/InputQueueManager.js.map +1 -1
  16. package/ts_build/src/utils/index.d.ts +3 -1
  17. package/ts_build/src/utils/index.js +11 -3
  18. package/ts_build/src/utils/index.js.map +1 -1
  19. package/CONFIG.md +0 -429
  20. package/PROCESSING.md +0 -450
  21. package/WORKER.md +0 -260
  22. package/autodoc/README.md +0 -324
  23. package/autodoc/chat-guide.md +0 -444
  24. package/autodoc/cli-reference.md +0 -720
  25. package/autodoc/config-reference.md +0 -642
  26. package/autodoc/embeddings-guide.md +0 -467
  27. package/autodoc/generate-guide.md +0 -437
  28. package/autodoc/language-plugin-guide.md +0 -417
  29. package/autodoc/modules-guide.md +0 -379
  30. package/autodoc/plugins-guide.md +0 -721
  31. package/autodoc/quickstart-guide.md +0 -126
  32. package/autodoc/skills-guide.md +0 -584
  33. package/autodoc/worker-guide.md +0 -519
  34. package/docs/input-queue-manager.md +0 -142
  35. package/docs/multi-worker-management.md +0 -142
  36. package/docs/shell-commands.md +0 -174
  37. package/jest.config.js +0 -19
  38. package/jest.manual.config.js +0 -19
  39. package/scripts/README.md +0 -119
  40. package/scripts/build-for-node.sh +0 -148
  41. package/scripts/cache-miss-debug.ts +0 -365
  42. package/scripts/check-isolated-deps.sh +0 -69
  43. package/scripts/check-model-pricing.ts +0 -509
  44. package/scripts/compare-openrouter-coverage.ts +0 -576
  45. package/scripts/migrate-usage-json.js +0 -147
  46. package/scripts/publish.sh +0 -86
  47. package/scripts/restore_keys.sh +0 -59
  48. package/scripts/test-repetition-hint.ts +0 -302
  49. package/scripts/unset_keys.sh +0 -60
  50. package/src/agents/base/base.ts +0 -1963
  51. package/src/agents/base/prompt.ts +0 -55
  52. package/src/agents/configurable/ConfigAgent.ts +0 -24
  53. package/src/agents/developer/developer.ts +0 -76
  54. package/src/agents/historyRollback.ts +0 -36
  55. package/src/agents/index.ts +0 -52
  56. package/src/agents/interface.ts +0 -11
  57. package/src/agents/patcher/codebase.md +0 -27
  58. package/src/agents/patcher/patcher.ts +0 -131
  59. package/src/agents/researcher/researcher.ts +0 -115
  60. package/src/agents/setup/setup.ts +0 -63
  61. package/src/agents/tools/addInternalTools.ts +0 -21
  62. package/src/agents/tools/agentCall.ts +0 -34
  63. package/src/agents/tools/aiClient.ts +0 -178
  64. package/src/agents/tools/askHuman.ts +0 -10
  65. package/src/agents/tools/callPlugin.ts +0 -10
  66. package/src/agents/tools/connectAgent.ts +0 -355
  67. package/src/agents/tools/embeddingSearch.ts +0 -6
  68. package/src/agents/tools/execCommand.ts +0 -162
  69. package/src/agents/tools/fileSearch.ts +0 -35
  70. package/src/agents/tools/finalAnswer.ts +0 -4
  71. package/src/agents/tools/googleSearch.ts +0 -243
  72. package/src/agents/tools/index.ts +0 -33
  73. package/src/agents/tools/language/definitions.ts +0 -105
  74. package/src/agents/tools/language/index.ts +0 -20
  75. package/src/agents/tools/lazy/definitions.ts +0 -72
  76. package/src/agents/tools/lazy/disableTools.ts +0 -16
  77. package/src/agents/tools/lazy/enableTools.ts +0 -16
  78. package/src/agents/tools/lazy/index.ts +0 -3
  79. package/src/agents/tools/lazy/listAvailableTools.ts +0 -17
  80. package/src/agents/tools/lintFile.ts +0 -19
  81. package/src/agents/tools/list.ts +0 -739
  82. package/src/agents/tools/loadImageAsBase64.ts +0 -83
  83. package/src/agents/tools/loadWebpage.ts +0 -19
  84. package/src/agents/tools/mcp/connectMcpServer.ts +0 -40
  85. package/src/agents/tools/mcp/definitions.ts +0 -67
  86. package/src/agents/tools/mcp/disconnectMcpServer.ts +0 -40
  87. package/src/agents/tools/mcp/index.ts +0 -3
  88. package/src/agents/tools/mcp/listAvailableMcpServers.ts +0 -28
  89. package/src/agents/tools/minimal/callTool.ts +0 -45
  90. package/src/agents/tools/minimal/definitions.ts +0 -50
  91. package/src/agents/tools/minimal/index.ts +0 -3
  92. package/src/agents/tools/minimal/inspectTools.ts +0 -27
  93. package/src/agents/tools/modifyFile.ts +0 -53
  94. package/src/agents/tools/observe.ts +0 -247
  95. package/src/agents/tools/patch.ts +0 -1287
  96. package/src/agents/tools/readBlocks.ts +0 -83
  97. package/src/agents/tools/readFile.ts +0 -105
  98. package/src/agents/tools/replyToParent.ts +0 -123
  99. package/src/agents/tools/runGenerate.ts +0 -210
  100. package/src/agents/tools/scanFile.ts +0 -16
  101. package/src/agents/tools/sendAgentMessage.ts +0 -139
  102. package/src/agents/tools/skills.ts +0 -79
  103. package/src/agents/tools/startAgentTask.ts +0 -393
  104. package/src/agents/tools/stringReplace.ts +0 -105
  105. package/src/agents/tools/textSearch.ts +0 -128
  106. package/src/agents/tools/types/fileblock.ts +0 -5
  107. package/src/agents/tools/visionTool.ts +0 -35
  108. package/src/agents/tools/waitForAgentCompleted.ts +0 -270
  109. package/src/agents/tools/writeFile.ts +0 -106
  110. package/src/agents/tools/ycmd/client.ts +0 -608
  111. package/src/agents/tools/ycmd/definitions.ts +0 -294
  112. package/src/agents/tools/ycmd/detection.ts +0 -211
  113. package/src/agents/tools/ycmd/index.ts +0 -11
  114. package/src/agents/tools/ycmd/installer.ts +0 -251
  115. package/src/agents/tools/ycmd/server.ts +0 -545
  116. package/src/agents/tools/ycmd/serverManager.ts +0 -316
  117. package/src/agents/tools/ycmd/tools/completion.ts +0 -113
  118. package/src/agents/tools/ycmd/tools/diagnostics.ts +0 -166
  119. package/src/agents/tools/ycmd/tools/getLocations.ts +0 -173
  120. package/src/agents/tools/ycmd/tools/goto.ts +0 -169
  121. package/src/agents/tools/ycmd/tools/refactor.ts +0 -204
  122. package/src/agents/tools/ycmd/tools/signature.ts +0 -174
  123. package/src/agents/tools/ycmd/tools/start.ts +0 -95
  124. package/src/agents/tools/ycmd/utils/pathUtils.ts +0 -59
  125. package/src/ai.ts +0 -306
  126. package/src/auth/browserLogin.ts +0 -406
  127. package/src/auth/environmentAuth.ts +0 -51
  128. package/src/auth/errors.ts +0 -6
  129. package/src/auth/jwtStore.ts +0 -70
  130. package/src/auth/keyAuth.ts +0 -142
  131. package/src/auth/keyManager.ts +0 -331
  132. package/src/auth/registerIdentity.ts +0 -67
  133. package/src/auth/spinner.ts +0 -23
  134. package/src/chat/CliChatService.ts +0 -438
  135. package/src/chat/modules/AgentModule.ts +0 -1664
  136. package/src/chat/modules/AskModule.ts +0 -98
  137. package/src/chat/modules/BaseChatModule.ts +0 -65
  138. package/src/chat/modules/ClipboardImageModule.ts +0 -136
  139. package/src/chat/modules/CustomCommandsModule.ts +0 -80
  140. package/src/chat/modules/InternalChatModule.ts +0 -216
  141. package/src/chat/modules/RemoteSyncModule.ts +0 -482
  142. package/src/chat/modules/RendererModule.ts +0 -139
  143. package/src/chat/modules/SearchModule.ts +0 -168
  144. package/src/chat/modules/SessionsModule.ts +0 -969
  145. package/src/chat/modules/SetupModule.ts +0 -185
  146. package/src/chat/modules/ShellCommandModule.ts +0 -98
  147. package/src/chat/modules/SystemModule.ts +0 -161
  148. package/src/chat/modules/ToolCommandModule.ts +0 -102
  149. package/src/chat/modules/VoiceModule.ts +0 -70
  150. package/src/chat/modules/index.ts +0 -8
  151. package/src/chat/renderer/CompactRenderer.ts +0 -229
  152. package/src/chat/renderer/ConsoleRenderer.ts +0 -160
  153. package/src/chat/renderer/FancyRenderer.ts +0 -440
  154. package/src/chat/renderer/PlainRenderer.ts +0 -218
  155. package/src/chat/renderer/index.ts +0 -6
  156. package/src/chat/renderer/loadRenderer.ts +0 -316
  157. package/src/chat/renderer/messagesToRenderEvents.ts +0 -96
  158. package/src/chat/renderer/types.ts +0 -99
  159. package/src/chat/types.ts +0 -146
  160. package/src/chat.ts +0 -140
  161. package/src/cli.ts +0 -180
  162. package/src/clients/anthropic.ts +0 -772
  163. package/src/clients/attribution.ts +0 -53
  164. package/src/clients/cerebras.ts +0 -10
  165. package/src/clients/contextLimits.ts +0 -263
  166. package/src/clients/copilot.ts +0 -23
  167. package/src/clients/deepseek.ts +0 -16
  168. package/src/clients/fireworks.ts +0 -71
  169. package/src/clients/gemini.ts +0 -1169
  170. package/src/clients/github.ts +0 -16
  171. package/src/clients/groq.ts +0 -15
  172. package/src/clients/http.ts +0 -719
  173. package/src/clients/index.ts +0 -1153
  174. package/src/clients/knowhow.ts +0 -130
  175. package/src/clients/knowhowMcp.ts +0 -118
  176. package/src/clients/llama.ts +0 -16
  177. package/src/clients/meta.ts +0 -27
  178. package/src/clients/mistral.ts +0 -16
  179. package/src/clients/nvidia.ts +0 -16
  180. package/src/clients/openai.ts +0 -1186
  181. package/src/clients/openrouter.ts +0 -24
  182. package/src/clients/pricing/anthropic.ts +0 -149
  183. package/src/clients/pricing/cerebras.ts +0 -11
  184. package/src/clients/pricing/copilot.ts +0 -60
  185. package/src/clients/pricing/deepseek.ts +0 -15
  186. package/src/clients/pricing/fireworks.ts +0 -182
  187. package/src/clients/pricing/github.ts +0 -69
  188. package/src/clients/pricing/google.ts +0 -385
  189. package/src/clients/pricing/groq.ts +0 -56
  190. package/src/clients/pricing/index.ts +0 -44
  191. package/src/clients/pricing/llama.ts +0 -18
  192. package/src/clients/pricing/meta.ts +0 -12
  193. package/src/clients/pricing/mistral.ts +0 -34
  194. package/src/clients/pricing/models.ts +0 -25
  195. package/src/clients/pricing/nvidia.ts +0 -102
  196. package/src/clients/pricing/openai.ts +0 -409
  197. package/src/clients/pricing/openrouter.ts +0 -36
  198. package/src/clients/pricing/qwen.ts +0 -80
  199. package/src/clients/pricing/types.ts +0 -125
  200. package/src/clients/pricing/xai.ts +0 -137
  201. package/src/clients/qwen.ts +0 -16
  202. package/src/clients/responseMetadata.ts +0 -221
  203. package/src/clients/types.ts +0 -531
  204. package/src/clients/withRetry.ts +0 -89
  205. package/src/clients/xai.ts +0 -693
  206. package/src/cloudWorker.ts +0 -394
  207. package/src/commands/agent.ts +0 -342
  208. package/src/commands/agents.ts +0 -1037
  209. package/src/commands/behaviors.ts +0 -47
  210. package/src/commands/convert.ts +0 -291
  211. package/src/commands/hash.ts +0 -179
  212. package/src/commands/mcp.ts +0 -743
  213. package/src/commands/misc.ts +0 -373
  214. package/src/commands/modules.ts +0 -704
  215. package/src/commands/processes.ts +0 -248
  216. package/src/commands/remote.ts +0 -77
  217. package/src/commands/replay.ts +0 -503
  218. package/src/commands/sandbox.ts +0 -566
  219. package/src/commands/services.ts +0 -168
  220. package/src/commands/skills.ts +0 -107
  221. package/src/commands/workers.ts +0 -168
  222. package/src/config.ts +0 -468
  223. package/src/conversion.ts +0 -69
  224. package/src/dataset/diffs/README.md +0 -12
  225. package/src/dataset/diffs/debug-errors.ts +0 -29
  226. package/src/dataset/diffs/debug.ts +0 -64
  227. package/src/dataset/diffs/generate.ts +0 -71
  228. package/src/dataset/diffs/jsonl.ts +0 -53
  229. package/src/dataset/diffs/test.ts +0 -194
  230. package/src/embeddings.ts +0 -494
  231. package/src/fileSync.ts +0 -369
  232. package/src/generate.ts +0 -529
  233. package/src/hashes.ts +0 -180
  234. package/src/index.ts +0 -261
  235. package/src/logger.ts +0 -197
  236. package/src/login.ts +0 -209
  237. package/src/microphone.ts +0 -141
  238. package/src/migrations.ts +0 -151
  239. package/src/plugins/AgentsMdPlugin.ts +0 -118
  240. package/src/plugins/GitPlugin.ts +0 -598
  241. package/src/plugins/LinterPlugin.ts +0 -214
  242. package/src/plugins/PluginBase.ts +0 -70
  243. package/src/plugins/SkillsPlugin.ts +0 -37
  244. package/src/plugins/embedding.ts +0 -82
  245. package/src/plugins/exec.ts +0 -70
  246. package/src/plugins/language.ts +0 -290
  247. package/src/plugins/plugins.ts +0 -175
  248. package/src/plugins/tmux.ts +0 -132
  249. package/src/plugins/types.ts +0 -36
  250. package/src/plugins/url.ts +0 -101
  251. package/src/plugins/vim.ts +0 -89
  252. package/src/processes/ProcessManager.ts +0 -96
  253. package/src/processes/managedProcessShim.ts +0 -138
  254. package/src/processors/Base64ImageDetector.ts +0 -502
  255. package/src/processors/CustomVariables.ts +0 -693
  256. package/src/processors/GemmaToolProcessor.ts +0 -163
  257. package/src/processors/HarmonyToolProcessor.ts +0 -264
  258. package/src/processors/JsonCompressor.ts +0 -510
  259. package/src/processors/MinimalToolsMessageProcessor.ts +0 -113
  260. package/src/processors/TokenCompressor.ts +0 -620
  261. package/src/processors/ToolResponseCache.ts +0 -322
  262. package/src/processors/XmlToolCallProcessor.ts +0 -533
  263. package/src/processors/index.ts +0 -14
  264. package/src/processors/tools/boundedToolResponse.ts +0 -49
  265. package/src/processors/tools/grepToolResponse.ts +0 -230
  266. package/src/processors/tools/index.ts +0 -23
  267. package/src/processors/tools/jqToolResponse.ts +0 -159
  268. package/src/processors/tools/listStoredToolResponses.ts +0 -124
  269. package/src/processors/tools/tailToolResponse.ts +0 -148
  270. package/src/prompts/BasicCodeDocumenter.ts +0 -1
  271. package/src/prompts/BasicProjectDocumenter.ts +0 -1
  272. package/src/prompts/EmbeddingSeachHelper.ts +0 -1
  273. package/src/prompts/KnowhowConfigExamples.ts +0 -376
  274. package/src/prompts/index.ts +0 -9
  275. package/src/remotes.ts +0 -110
  276. package/src/server/index.ts +0 -16
  277. package/src/services/AgentService.ts +0 -134
  278. package/src/services/AgentSyncFs.ts +0 -775
  279. package/src/services/AgentSyncKnowhowWeb.ts +0 -389
  280. package/src/services/BehaviorsService.ts +0 -466
  281. package/src/services/DockerService.ts +0 -511
  282. package/src/services/EmbeddingService.ts +0 -427
  283. package/src/services/EmbeddingsService.ts +0 -73
  284. package/src/services/EventService.ts +0 -279
  285. package/src/services/ExtensionsService.ts +0 -25
  286. package/src/services/KnowhowClient.ts +0 -928
  287. package/src/services/LazyToolsService.ts +0 -210
  288. package/src/services/Mcp.ts +0 -727
  289. package/src/services/McpServer.ts +0 -155
  290. package/src/services/McpWebsocketTransport.ts +0 -87
  291. package/src/services/MediaProcessorService.ts +0 -669
  292. package/src/services/MessageProcessor.ts +0 -114
  293. package/src/services/MinimalToolsService.ts +0 -177
  294. package/src/services/RuntimeReloadService.ts +0 -31
  295. package/src/services/S3.ts +0 -61
  296. package/src/services/SessionManager.ts +0 -358
  297. package/src/services/SkillsService.ts +0 -822
  298. package/src/services/SyncedAgentWatcher.ts +0 -124
  299. package/src/services/SyncerService.ts +0 -191
  300. package/src/services/TaskRegistry.ts +0 -110
  301. package/src/services/Tools.ts +0 -580
  302. package/src/services/TracingService.ts +0 -116
  303. package/src/services/conversion/ConversionService.ts +0 -757
  304. package/src/services/conversion/index.ts +0 -2
  305. package/src/services/conversion/types.ts +0 -87
  306. package/src/services/flags.ts +0 -51
  307. package/src/services/index.ts +0 -117
  308. package/src/services/modules/computerUse.ts +0 -218
  309. package/src/services/modules/index.ts +0 -314
  310. package/src/services/modules/types.ts +0 -109
  311. package/src/services/types.ts +0 -60
  312. package/src/services/watchers/FsSyncer.ts +0 -199
  313. package/src/services/watchers/RemoteSyncer.ts +0 -196
  314. package/src/services/watchers/index.ts +0 -2
  315. package/src/tunnel.ts +0 -243
  316. package/src/types.ts +0 -282
  317. package/src/util/Trace.ts +0 -236
  318. package/src/utils/InputQueueManager.ts +0 -493
  319. package/src/utils/errors.ts +0 -0
  320. package/src/utils/http.ts +0 -150
  321. package/src/utils/index.ts +0 -111
  322. package/src/worker.ts +0 -696
  323. package/src/workerRegistry.ts +0 -152
  324. package/src/workers/auth/PasskeySetup.ts +0 -181
  325. package/src/workers/auth/WorkerPasskeyAuth.ts +0 -190
  326. package/src/workers/auth/WsMiddleware.ts +0 -99
  327. package/src/workers/auth/authMiddleware.ts +0 -104
  328. package/src/workers/auth/types.ts +0 -70
  329. package/src/workers/tools/getChallenge.ts +0 -33
  330. package/src/workers/tools/index.ts +0 -20
  331. package/src/workers/tools/listAllowedPorts.ts +0 -30
  332. package/src/workers/tools/lock.ts +0 -31
  333. package/src/workers/tools/reloadConfig.ts +0 -84
  334. package/src/workers/tools/unlock.ts +0 -116
  335. package/tests/XmlToolCallProcessor.test.ts +0 -468
  336. package/tests/agents/interrupt.test.ts +0 -200
  337. package/tests/agents/observe-base.test.ts +0 -183
  338. package/tests/agents/tools/connectAgent.test.ts +0 -138
  339. package/tests/agents/tools/observe.test.ts +0 -179
  340. package/tests/agents/tools/readFile.test.ts +0 -88
  341. package/tests/agents/tools/replyToParent.test.ts +0 -125
  342. package/tests/agents/tools/sendAgentMessage.test.ts +0 -99
  343. package/tests/agents/tools/waitForAgentCompleted.test.ts +0 -147
  344. package/tests/chat/detach-attach-rendering.test.ts +0 -315
  345. package/tests/clients/AIClient.test.ts +0 -668
  346. package/tests/clients/anthropic.test.ts +0 -202
  347. package/tests/clients/contextLimits.test.ts +0 -97
  348. package/tests/clients/fireworks.test.ts +0 -65
  349. package/tests/clients/openai.images.test.ts +0 -105
  350. package/tests/clients/pricing.test.ts +0 -206
  351. package/tests/clients/reasoningEffort.test.ts +0 -140
  352. package/tests/compressor/bigstring.test.ts +0 -450
  353. package/tests/compressor/bigstring.txt +0 -1
  354. package/tests/compressor/githubjson.txt +0 -1
  355. package/tests/compressor/toolResponseCache.test.ts +0 -304
  356. package/tests/compressor/usageBase64.json +0 -159
  357. package/tests/compressor/usageBase64.test.ts +0 -175
  358. package/tests/fixtures/fake-secret.txt +0 -1
  359. package/tests/manual/agent-events/run-test.ts +0 -203
  360. package/tests/manual/browser-login/README.md +0 -189
  361. package/tests/manual/browser-login/test_browser_login_basic.ts +0 -115
  362. package/tests/manual/browser-login/test_cli_integration.ts +0 -169
  363. package/tests/manual/browser-login/test_cross_platform_browser.ts +0 -186
  364. package/tests/manual/browser-login/test_error_scenarios.ts +0 -223
  365. package/tests/manual/cli/no-env.sh +0 -274
  366. package/tests/manual/clients/completions.json +0 -1151
  367. package/tests/manual/clients/completions.test.ts +0 -198
  368. package/tests/manual/file-edits/figma.test.ts +0 -3
  369. package/tests/manual/file-edits/fileblocks/readwrite.test.ts +0 -100
  370. package/tests/manual/file-edits/patching/input.txt +0 -145
  371. package/tests/manual/file-edits/patching/output.txt +0 -145
  372. package/tests/manual/file-edits/patching/patch.txt +0 -15
  373. package/tests/manual/file-edits/patching/unseen.txt +0 -80
  374. package/tests/manual/file-edits/patching.test.ts +0 -139
  375. package/tests/manual/modalities/README.md +0 -157
  376. package/tests/manual/modalities/google.modalities.test.ts +0 -335
  377. package/tests/manual/modalities/openai.modalities.test.ts +0 -329
  378. package/tests/manual/modalities/streaming.test.ts +0 -260
  379. package/tests/manual/modalities/xai.modalities.test.ts +0 -294
  380. package/tests/manual/test-concurrent-ask.ts +0 -43
  381. package/tests/manual/ycmd/debug_diagnostics_test.ts +0 -127
  382. package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +0 -26
  383. package/tests/manual/ycmd/fixtures/file_change_test.ts +0 -17
  384. package/tests/manual/ycmd/minimal_advanced_test.ts +0 -108
  385. package/tests/manual/ycmd/simple_diagnostics_test.ts +0 -61
  386. package/tests/manual/ycmd/simple_test.ts +0 -74
  387. package/tests/manual/ycmd/test-typescript-sample.ts +0 -34
  388. package/tests/manual/ycmd/test_advanced_features.ts +0 -407
  389. package/tests/manual/ycmd/test_advanced_with_tools.ts +0 -320
  390. package/tests/manual/ycmd/test_comprehensive_typescript.ts +0 -179
  391. package/tests/manual/ycmd/test_diagnostics_file_changes.ts +0 -249
  392. package/tests/manual/ycmd/test_diagnostics_fix.ts +0 -99
  393. package/tests/manual/ycmd/test_diagnostics_simple.ts +0 -100
  394. package/tests/manual/ycmd/test_diagnostics_timing.ts +0 -120
  395. package/tests/manual/ycmd/test_discover_commands.ts +0 -310
  396. package/tests/manual/ycmd/test_endpoints.ts +0 -115
  397. package/tests/manual/ycmd/test_final_comprehensive.ts +0 -218
  398. package/tests/manual/ycmd/test_final_validation.ts +0 -150
  399. package/tests/manual/ycmd/test_implementation.js +0 -42
  400. package/tests/manual/ycmd/test_individual_ycmd_tool.ts +0 -39
  401. package/tests/manual/ycmd/test_server_manager.ts +0 -52
  402. package/tests/manual/ycmd/test_simple_debug.ts +0 -86
  403. package/tests/manual/ycmd/test_tsserver_workflow.js +0 -83
  404. package/tests/manual/ycmd/test_tsserver_workflow.ts +0 -122
  405. package/tests/manual/ycmd/test_typescript_simple.ts +0 -48
  406. package/tests/manual/ycmd/test_typescript_ycmd.ts +0 -105
  407. package/tests/manual/ycmd/test_workspace_config.ts +0 -90
  408. package/tests/manual/ycmd/test_ycmd_auto_start.ts +0 -137
  409. package/tests/manual/ycmd/test_ycmd_comprehensive.ts +0 -73
  410. package/tests/manual/ycmd/test_ycmd_connection.py +0 -10
  411. package/tests/manual/ycmd/test_ycmd_direct.ts +0 -142
  412. package/tests/manual/ycmd/test_ycmd_experiment.ts +0 -48
  413. package/tests/manual/ycmd/test_ycmd_final.ts +0 -200
  414. package/tests/manual/ycmd/test_ycmd_fixed.py +0 -18
  415. package/tests/manual/ycmd/test_ycmd_integration.ts +0 -112
  416. package/tests/manual/ycmd/test_ycmd_simple.ts +0 -45
  417. package/tests/manual/ycmd/test_ycmd_usage.py +0 -27
  418. package/tests/manual/ycmd/working_simple_test.ts +0 -134
  419. package/tests/patching/corrupted.test.ts +0 -78
  420. package/tests/patching/fixtures/transcript-mangles/agent-sync-fs-nested-catch.json +0 -9
  421. package/tests/patching/fixtures/transcript-mangles/automation-functions-crossed.json +0 -9
  422. package/tests/patching/fixtures/transcript-mangles/fruit-ninja-confirmed-retirement.json +0 -8
  423. package/tests/patching/imports.patch.txt +0 -11
  424. package/tests/patching/imports.test.ts +0 -43
  425. package/tests/patching/imports.txt +0 -11
  426. package/tests/patching/interface.patch.txt +0 -15
  427. package/tests/patching/interface.txt +0 -7
  428. package/tests/patching/patchFileOutput.test.ts +0 -328
  429. package/tests/patching/regression-2026.test.ts +0 -752
  430. package/tests/patching/transcriptMangleRegression.test.ts +0 -125
  431. package/tests/plugins/language/languagePlugin-content-triggers.test.ts +0 -346
  432. package/tests/plugins/language/languagePlugin-integration.test.ts +0 -471
  433. package/tests/plugins/language/languagePlugin.test.ts +0 -385
  434. package/tests/processes/managedProcessShim.test.ts +0 -59
  435. package/tests/processors/Base64ImageDetector.test.ts +0 -979
  436. package/tests/processors/CustomVariables.test.ts +0 -981
  437. package/tests/processors/CustomVariablesBenchmark.test.ts +0 -237
  438. package/tests/processors/HarmonyToolProcessor.test.ts +0 -490
  439. package/tests/processors/TokenCompressor.test.ts +0 -674
  440. package/tests/processors/ToolResponseCache.test.ts +0 -864
  441. package/tests/processors/tools/boundedRetrievalTools.test.ts +0 -68
  442. package/tests/processors/tools/grepToolResponse.test.ts +0 -159
  443. package/tests/services/ConversionService.test.ts +0 -154
  444. package/tests/services/DockerService.test.ts +0 -24
  445. package/tests/services/Tools.test.ts +0 -1738
  446. package/tests/services/ToolsService.setFunction.test.ts +0 -68
  447. package/tests/services/WorkerReloadConfig.test.ts +0 -141
  448. package/tests/test.spec.ts +0 -163
  449. package/tests/unit/InputQueueManager.test.ts +0 -174
  450. package/tests/unit/McpWebsocketTransport.test.ts +0 -56
  451. package/tests/unit/agents/historyRollback.test.ts +0 -53
  452. package/tests/unit/agents/tools/loadImageAsBase64.test.ts +0 -44
  453. package/tests/unit/auth/jwtStore.test.ts +0 -55
  454. package/tests/unit/auth/keyAuth.test.ts +0 -152
  455. package/tests/unit/auth/keyManager.test.ts +0 -130
  456. package/tests/unit/auth/registerIdentity.test.ts +0 -99
  457. package/tests/unit/chat/ToolCommandModule.test.ts +0 -71
  458. package/tests/unit/chat/historyCommandArgs.test.ts +0 -37
  459. package/tests/unit/clients/AIClient.test.ts +0 -454
  460. package/tests/unit/clients/anthropic.responseMetadata.test.ts +0 -81
  461. package/tests/unit/clients/attribution.test.ts +0 -185
  462. package/tests/unit/clients/http.responseMetadata.test.ts +0 -86
  463. package/tests/unit/clients/openai.responseMetadata.test.ts +0 -90
  464. package/tests/unit/clients/responseMetadata.test.ts +0 -123
  465. package/tests/unit/clients/withRetry.test.ts +0 -319
  466. package/tests/unit/commands/agents.test.ts +0 -111
  467. package/tests/unit/commands/github-credentials.test.ts +0 -210
  468. package/tests/unit/commands/misc.test.ts +0 -85
  469. package/tests/unit/commands/remote.test.ts +0 -79
  470. package/tests/unit/commands/sandbox.test.ts +0 -350
  471. package/tests/unit/hashes.test.ts +0 -23
  472. package/tests/unit/input-queue.test.ts +0 -80
  473. package/tests/unit/login.test.ts +0 -218
  474. package/tests/unit/modules/moduleLoading.test.ts +0 -305
  475. package/tests/unit/plugins/pluginLoading.test.ts +0 -97
  476. package/tests/unit/services/AgentSyncKnowhowWeb.test.ts +0 -38
  477. package/tests/unit/services/KnowhowClient.test.ts +0 -84
  478. package/tests/unit/services/LazyToolsService.test.ts +0 -53
  479. package/tests/unit/services/Mcp.test.ts +0 -56
  480. package/tests/unit/services/MinimalToolsService.test.ts +0 -424
  481. package/tests/unit/services/RuntimeReloadService.test.ts +0 -29
  482. package/tests/unit/services/SessionManager.test.ts +0 -43
  483. package/tests/unit/services/SyncedAgentWatcher.test.ts +0 -89
  484. package/tests/unit/services/SyncerService.test.ts +0 -45
  485. package/tests/unit/tunnel.test.ts +0 -51
  486. package/tests/unit/util/Trace.test.ts +0 -119
  487. package/tests/unit/utils/http.test.ts +0 -43
  488. package/ts_build/tests/XmlToolCallProcessor.test.d.ts +0 -1
  489. package/ts_build/tests/XmlToolCallProcessor.test.js +0 -376
  490. package/ts_build/tests/XmlToolCallProcessor.test.js.map +0 -1
  491. package/ts_build/tests/agents/interrupt.test.d.ts +0 -14
  492. package/ts_build/tests/agents/interrupt.test.js +0 -136
  493. package/ts_build/tests/agents/interrupt.test.js.map +0 -1
  494. package/ts_build/tests/agents/observe-base.test.d.ts +0 -1
  495. package/ts_build/tests/agents/observe-base.test.js +0 -149
  496. package/ts_build/tests/agents/observe-base.test.js.map +0 -1
  497. package/ts_build/tests/agents/tools/connectAgent.test.d.ts +0 -1
  498. package/ts_build/tests/agents/tools/connectAgent.test.js +0 -142
  499. package/ts_build/tests/agents/tools/connectAgent.test.js.map +0 -1
  500. package/ts_build/tests/agents/tools/observe.test.d.ts +0 -1
  501. package/ts_build/tests/agents/tools/observe.test.js +0 -148
  502. package/ts_build/tests/agents/tools/observe.test.js.map +0 -1
  503. package/ts_build/tests/agents/tools/readFile.test.d.ts +0 -1
  504. package/ts_build/tests/agents/tools/readFile.test.js +0 -90
  505. package/ts_build/tests/agents/tools/readFile.test.js.map +0 -1
  506. package/ts_build/tests/agents/tools/replyToParent.test.d.ts +0 -1
  507. package/ts_build/tests/agents/tools/replyToParent.test.js +0 -116
  508. package/ts_build/tests/agents/tools/replyToParent.test.js.map +0 -1
  509. package/ts_build/tests/agents/tools/sendAgentMessage.test.d.ts +0 -1
  510. package/ts_build/tests/agents/tools/sendAgentMessage.test.js +0 -112
  511. package/ts_build/tests/agents/tools/sendAgentMessage.test.js.map +0 -1
  512. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.d.ts +0 -1
  513. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js +0 -147
  514. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js.map +0 -1
  515. package/ts_build/tests/chat/detach-attach-rendering.test.d.ts +0 -1
  516. package/ts_build/tests/chat/detach-attach-rendering.test.js +0 -168
  517. package/ts_build/tests/chat/detach-attach-rendering.test.js.map +0 -1
  518. package/ts_build/tests/clients/AIClient.test.d.ts +0 -1
  519. package/ts_build/tests/clients/AIClient.test.js +0 -483
  520. package/ts_build/tests/clients/AIClient.test.js.map +0 -1
  521. package/ts_build/tests/clients/anthropic.test.d.ts +0 -1
  522. package/ts_build/tests/clients/anthropic.test.js +0 -159
  523. package/ts_build/tests/clients/anthropic.test.js.map +0 -1
  524. package/ts_build/tests/clients/contextLimits.test.d.ts +0 -1
  525. package/ts_build/tests/clients/contextLimits.test.js +0 -69
  526. package/ts_build/tests/clients/contextLimits.test.js.map +0 -1
  527. package/ts_build/tests/clients/fireworks.test.d.ts +0 -1
  528. package/ts_build/tests/clients/fireworks.test.js +0 -65
  529. package/ts_build/tests/clients/fireworks.test.js.map +0 -1
  530. package/ts_build/tests/clients/openai.images.test.d.ts +0 -1
  531. package/ts_build/tests/clients/openai.images.test.js +0 -94
  532. package/ts_build/tests/clients/openai.images.test.js.map +0 -1
  533. package/ts_build/tests/clients/pricing.test.d.ts +0 -1
  534. package/ts_build/tests/clients/pricing.test.js +0 -124
  535. package/ts_build/tests/clients/pricing.test.js.map +0 -1
  536. package/ts_build/tests/clients/reasoningEffort.test.d.ts +0 -1
  537. package/ts_build/tests/clients/reasoningEffort.test.js +0 -116
  538. package/ts_build/tests/clients/reasoningEffort.test.js.map +0 -1
  539. package/ts_build/tests/compressor/bigstring.test.d.ts +0 -1
  540. package/ts_build/tests/compressor/bigstring.test.js +0 -275
  541. package/ts_build/tests/compressor/bigstring.test.js.map +0 -1
  542. package/ts_build/tests/compressor/toolResponseCache.test.d.ts +0 -1
  543. package/ts_build/tests/compressor/toolResponseCache.test.js +0 -250
  544. package/ts_build/tests/compressor/toolResponseCache.test.js.map +0 -1
  545. package/ts_build/tests/compressor/usageBase64.test.d.ts +0 -1
  546. package/ts_build/tests/compressor/usageBase64.test.js +0 -109
  547. package/ts_build/tests/compressor/usageBase64.test.js.map +0 -1
  548. package/ts_build/tests/manual/agent-events/run-test.d.ts +0 -2
  549. package/ts_build/tests/manual/agent-events/run-test.js +0 -148
  550. package/ts_build/tests/manual/agent-events/run-test.js.map +0 -1
  551. package/ts_build/tests/manual/browser-login/test_browser_login_basic.d.ts +0 -2
  552. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js +0 -118
  553. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js.map +0 -1
  554. package/ts_build/tests/manual/browser-login/test_cli_integration.d.ts +0 -2
  555. package/ts_build/tests/manual/browser-login/test_cli_integration.js +0 -163
  556. package/ts_build/tests/manual/browser-login/test_cli_integration.js.map +0 -1
  557. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.d.ts +0 -2
  558. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js +0 -169
  559. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js.map +0 -1
  560. package/ts_build/tests/manual/browser-login/test_error_scenarios.d.ts +0 -2
  561. package/ts_build/tests/manual/browser-login/test_error_scenarios.js +0 -207
  562. package/ts_build/tests/manual/browser-login/test_error_scenarios.js.map +0 -1
  563. package/ts_build/tests/manual/clients/completions.test.d.ts +0 -1
  564. package/ts_build/tests/manual/clients/completions.test.js +0 -151
  565. package/ts_build/tests/manual/clients/completions.test.js.map +0 -1
  566. package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -0
  567. package/ts_build/tests/manual/file-edits/figma.test.js +0 -2
  568. package/ts_build/tests/manual/file-edits/figma.test.js.map +0 -1
  569. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.d.ts +0 -1
  570. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js +0 -110
  571. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js.map +0 -1
  572. package/ts_build/tests/manual/file-edits/patching.test.d.ts +0 -1
  573. package/ts_build/tests/manual/file-edits/patching.test.js +0 -129
  574. package/ts_build/tests/manual/file-edits/patching.test.js.map +0 -1
  575. package/ts_build/tests/manual/modalities/google.modalities.test.d.ts +0 -1
  576. package/ts_build/tests/manual/modalities/google.modalities.test.js +0 -262
  577. package/ts_build/tests/manual/modalities/google.modalities.test.js.map +0 -1
  578. package/ts_build/tests/manual/modalities/openai.modalities.test.d.ts +0 -1
  579. package/ts_build/tests/manual/modalities/openai.modalities.test.js +0 -262
  580. package/ts_build/tests/manual/modalities/openai.modalities.test.js.map +0 -1
  581. package/ts_build/tests/manual/modalities/streaming.test.d.ts +0 -1
  582. package/ts_build/tests/manual/modalities/streaming.test.js +0 -216
  583. package/ts_build/tests/manual/modalities/streaming.test.js.map +0 -1
  584. package/ts_build/tests/manual/modalities/xai.modalities.test.d.ts +0 -1
  585. package/ts_build/tests/manual/modalities/xai.modalities.test.js +0 -219
  586. package/ts_build/tests/manual/modalities/xai.modalities.test.js.map +0 -1
  587. package/ts_build/tests/manual/test-concurrent-ask.d.ts +0 -1
  588. package/ts_build/tests/manual/test-concurrent-ask.js +0 -22
  589. package/ts_build/tests/manual/test-concurrent-ask.js.map +0 -1
  590. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +0 -1
  591. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +0 -124
  592. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +0 -1
  593. package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +0 -2
  594. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +0 -114
  595. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +0 -1
  596. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +0 -1
  597. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +0 -84
  598. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +0 -1
  599. package/ts_build/tests/manual/ycmd/simple_test.d.ts +0 -2
  600. package/ts_build/tests/manual/ycmd/simple_test.js +0 -92
  601. package/ts_build/tests/manual/ycmd/simple_test.js.map +0 -1
  602. package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +0 -14
  603. package/ts_build/tests/manual/ycmd/test-typescript-sample.js +0 -20
  604. package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +0 -1
  605. package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +0 -2
  606. package/ts_build/tests/manual/ycmd/test_advanced_features.js +0 -306
  607. package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +0 -1
  608. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +0 -3
  609. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +0 -271
  610. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +0 -1
  611. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +0 -2
  612. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +0 -196
  613. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +0 -1
  614. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +0 -1
  615. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +0 -184
  616. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +0 -1
  617. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +0 -2
  618. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +0 -116
  619. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +0 -1
  620. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +0 -1
  621. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +0 -114
  622. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +0 -1
  623. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +0 -1
  624. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +0 -129
  625. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +0 -1
  626. package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +0 -2
  627. package/ts_build/tests/manual/ycmd/test_discover_commands.js +0 -252
  628. package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +0 -1
  629. package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +0 -2
  630. package/ts_build/tests/manual/ycmd/test_endpoints.js +0 -130
  631. package/ts_build/tests/manual/ycmd/test_endpoints.js.map +0 -1
  632. package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +0 -2
  633. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +0 -231
  634. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +0 -1
  635. package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +0 -2
  636. package/ts_build/tests/manual/ycmd/test_final_validation.js +0 -170
  637. package/ts_build/tests/manual/ycmd/test_final_validation.js.map +0 -1
  638. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +0 -2
  639. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +0 -37
  640. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +0 -1
  641. package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +0 -1
  642. package/ts_build/tests/manual/ycmd/test_server_manager.js +0 -38
  643. package/ts_build/tests/manual/ycmd/test_server_manager.js.map +0 -1
  644. package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +0 -2
  645. package/ts_build/tests/manual/ycmd/test_simple_debug.js +0 -109
  646. package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +0 -1
  647. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +0 -1
  648. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +0 -138
  649. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +0 -1
  650. package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +0 -1
  651. package/ts_build/tests/manual/ycmd/test_typescript_simple.js +0 -76
  652. package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +0 -1
  653. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +0 -1
  654. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +0 -115
  655. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +0 -1
  656. package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +0 -1
  657. package/ts_build/tests/manual/ycmd/test_workspace_config.js +0 -99
  658. package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +0 -1
  659. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +0 -2
  660. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +0 -140
  661. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +0 -1
  662. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +0 -1
  663. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +0 -93
  664. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +0 -1
  665. package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +0 -2
  666. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +0 -159
  667. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +0 -1
  668. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +0 -15
  669. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +0 -68
  670. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +0 -1
  671. package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +0 -2
  672. package/ts_build/tests/manual/ycmd/test_ycmd_final.js +0 -205
  673. package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +0 -1
  674. package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +0 -3
  675. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +0 -119
  676. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +0 -1
  677. package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +0 -2
  678. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +0 -36
  679. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +0 -1
  680. package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +0 -2
  681. package/ts_build/tests/manual/ycmd/working_simple_test.js +0 -144
  682. package/ts_build/tests/manual/ycmd/working_simple_test.js.map +0 -1
  683. package/ts_build/tests/patching/corrupted.test.d.ts +0 -1
  684. package/ts_build/tests/patching/corrupted.test.js +0 -53
  685. package/ts_build/tests/patching/corrupted.test.js.map +0 -1
  686. package/ts_build/tests/patching/imports.test.d.ts +0 -1
  687. package/ts_build/tests/patching/imports.test.js +0 -71
  688. package/ts_build/tests/patching/imports.test.js.map +0 -1
  689. package/ts_build/tests/patching/patchFileOutput.test.d.ts +0 -1
  690. package/ts_build/tests/patching/patchFileOutput.test.js +0 -269
  691. package/ts_build/tests/patching/patchFileOutput.test.js.map +0 -1
  692. package/ts_build/tests/patching/regression-2026.test.d.ts +0 -1
  693. package/ts_build/tests/patching/regression-2026.test.js +0 -528
  694. package/ts_build/tests/patching/regression-2026.test.js.map +0 -1
  695. package/ts_build/tests/patching/transcriptMangleRegression.test.d.ts +0 -1
  696. package/ts_build/tests/patching/transcriptMangleRegression.test.js +0 -104
  697. package/ts_build/tests/patching/transcriptMangleRegression.test.js.map +0 -1
  698. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.d.ts +0 -1
  699. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +0 -294
  700. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +0 -1
  701. package/ts_build/tests/plugins/language/languagePlugin-integration.test.d.ts +0 -1
  702. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +0 -343
  703. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +0 -1
  704. package/ts_build/tests/plugins/language/languagePlugin.test.d.ts +0 -1
  705. package/ts_build/tests/plugins/language/languagePlugin.test.js +0 -315
  706. package/ts_build/tests/plugins/language/languagePlugin.test.js.map +0 -1
  707. package/ts_build/tests/processes/managedProcessShim.test.d.ts +0 -1
  708. package/ts_build/tests/processes/managedProcessShim.test.js +0 -92
  709. package/ts_build/tests/processes/managedProcessShim.test.js.map +0 -1
  710. package/ts_build/tests/processors/Base64ImageDetector.test.d.ts +0 -1
  711. package/ts_build/tests/processors/Base64ImageDetector.test.js +0 -792
  712. package/ts_build/tests/processors/Base64ImageDetector.test.js.map +0 -1
  713. package/ts_build/tests/processors/CustomVariables.test.d.ts +0 -1
  714. package/ts_build/tests/processors/CustomVariables.test.js +0 -764
  715. package/ts_build/tests/processors/CustomVariables.test.js.map +0 -1
  716. package/ts_build/tests/processors/CustomVariablesBenchmark.test.d.ts +0 -1
  717. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js +0 -179
  718. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js.map +0 -1
  719. package/ts_build/tests/processors/HarmonyToolProcessor.test.d.ts +0 -1
  720. package/ts_build/tests/processors/HarmonyToolProcessor.test.js +0 -382
  721. package/ts_build/tests/processors/HarmonyToolProcessor.test.js.map +0 -1
  722. package/ts_build/tests/processors/TokenCompressor.test.d.ts +0 -1
  723. package/ts_build/tests/processors/TokenCompressor.test.js +0 -473
  724. package/ts_build/tests/processors/TokenCompressor.test.js.map +0 -1
  725. package/ts_build/tests/processors/ToolResponseCache.test.d.ts +0 -1
  726. package/ts_build/tests/processors/ToolResponseCache.test.js +0 -657
  727. package/ts_build/tests/processors/ToolResponseCache.test.js.map +0 -1
  728. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.d.ts +0 -1
  729. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js +0 -57
  730. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js.map +0 -1
  731. package/ts_build/tests/processors/tools/grepToolResponse.test.d.ts +0 -1
  732. package/ts_build/tests/processors/tools/grepToolResponse.test.js +0 -77
  733. package/ts_build/tests/processors/tools/grepToolResponse.test.js.map +0 -1
  734. package/ts_build/tests/services/ConversionService.test.d.ts +0 -1
  735. package/ts_build/tests/services/ConversionService.test.js +0 -154
  736. package/ts_build/tests/services/ConversionService.test.js.map +0 -1
  737. package/ts_build/tests/services/DockerService.test.d.ts +0 -1
  738. package/ts_build/tests/services/DockerService.test.js +0 -22
  739. package/ts_build/tests/services/DockerService.test.js.map +0 -1
  740. package/ts_build/tests/services/Tools.test.d.ts +0 -1
  741. package/ts_build/tests/services/Tools.test.js +0 -1365
  742. package/ts_build/tests/services/Tools.test.js.map +0 -1
  743. package/ts_build/tests/services/ToolsService.setFunction.test.d.ts +0 -1
  744. package/ts_build/tests/services/ToolsService.setFunction.test.js +0 -51
  745. package/ts_build/tests/services/ToolsService.setFunction.test.js.map +0 -1
  746. package/ts_build/tests/services/WorkerReloadConfig.test.d.ts +0 -1
  747. package/ts_build/tests/services/WorkerReloadConfig.test.js +0 -86
  748. package/ts_build/tests/services/WorkerReloadConfig.test.js.map +0 -1
  749. package/ts_build/tests/test.spec.d.ts +0 -1
  750. package/ts_build/tests/test.spec.js +0 -139
  751. package/ts_build/tests/test.spec.js.map +0 -1
  752. package/ts_build/tests/unit/InputQueueManager.test.d.ts +0 -1
  753. package/ts_build/tests/unit/InputQueueManager.test.js +0 -104
  754. package/ts_build/tests/unit/InputQueueManager.test.js.map +0 -1
  755. package/ts_build/tests/unit/McpWebsocketTransport.test.d.ts +0 -1
  756. package/ts_build/tests/unit/McpWebsocketTransport.test.js +0 -47
  757. package/ts_build/tests/unit/McpWebsocketTransport.test.js.map +0 -1
  758. package/ts_build/tests/unit/agents/historyRollback.test.d.ts +0 -1
  759. package/ts_build/tests/unit/agents/historyRollback.test.js +0 -42
  760. package/ts_build/tests/unit/agents/historyRollback.test.js.map +0 -1
  761. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.d.ts +0 -1
  762. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js +0 -67
  763. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js.map +0 -1
  764. package/ts_build/tests/unit/auth/jwtStore.test.d.ts +0 -1
  765. package/ts_build/tests/unit/auth/jwtStore.test.js +0 -46
  766. package/ts_build/tests/unit/auth/jwtStore.test.js.map +0 -1
  767. package/ts_build/tests/unit/auth/keyAuth.test.d.ts +0 -1
  768. package/ts_build/tests/unit/auth/keyAuth.test.js +0 -118
  769. package/ts_build/tests/unit/auth/keyAuth.test.js.map +0 -1
  770. package/ts_build/tests/unit/auth/keyManager.test.d.ts +0 -1
  771. package/ts_build/tests/unit/auth/keyManager.test.js +0 -96
  772. package/ts_build/tests/unit/auth/keyManager.test.js.map +0 -1
  773. package/ts_build/tests/unit/auth/registerIdentity.test.d.ts +0 -1
  774. package/ts_build/tests/unit/auth/registerIdentity.test.js +0 -92
  775. package/ts_build/tests/unit/auth/registerIdentity.test.js.map +0 -1
  776. package/ts_build/tests/unit/chat/ToolCommandModule.test.d.ts +0 -1
  777. package/ts_build/tests/unit/chat/ToolCommandModule.test.js +0 -61
  778. package/ts_build/tests/unit/chat/ToolCommandModule.test.js.map +0 -1
  779. package/ts_build/tests/unit/chat/historyCommandArgs.test.d.ts +0 -1
  780. package/ts_build/tests/unit/chat/historyCommandArgs.test.js +0 -29
  781. package/ts_build/tests/unit/chat/historyCommandArgs.test.js.map +0 -1
  782. package/ts_build/tests/unit/clients/AIClient.test.d.ts +0 -1
  783. package/ts_build/tests/unit/clients/AIClient.test.js +0 -342
  784. package/ts_build/tests/unit/clients/AIClient.test.js.map +0 -1
  785. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.d.ts +0 -1
  786. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js +0 -77
  787. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js.map +0 -1
  788. package/ts_build/tests/unit/clients/attribution.test.d.ts +0 -1
  789. package/ts_build/tests/unit/clients/attribution.test.js +0 -153
  790. package/ts_build/tests/unit/clients/attribution.test.js.map +0 -1
  791. package/ts_build/tests/unit/clients/http.responseMetadata.test.d.ts +0 -1
  792. package/ts_build/tests/unit/clients/http.responseMetadata.test.js +0 -77
  793. package/ts_build/tests/unit/clients/http.responseMetadata.test.js.map +0 -1
  794. package/ts_build/tests/unit/clients/openai.responseMetadata.test.d.ts +0 -1
  795. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js +0 -86
  796. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js.map +0 -1
  797. package/ts_build/tests/unit/clients/responseMetadata.test.d.ts +0 -1
  798. package/ts_build/tests/unit/clients/responseMetadata.test.js +0 -96
  799. package/ts_build/tests/unit/clients/responseMetadata.test.js.map +0 -1
  800. package/ts_build/tests/unit/clients/withRetry.test.d.ts +0 -1
  801. package/ts_build/tests/unit/clients/withRetry.test.js +0 -225
  802. package/ts_build/tests/unit/clients/withRetry.test.js.map +0 -1
  803. package/ts_build/tests/unit/commands/agents.test.d.ts +0 -1
  804. package/ts_build/tests/unit/commands/agents.test.js +0 -119
  805. package/ts_build/tests/unit/commands/agents.test.js.map +0 -1
  806. package/ts_build/tests/unit/commands/github-credentials.test.d.ts +0 -1
  807. package/ts_build/tests/unit/commands/github-credentials.test.js +0 -145
  808. package/ts_build/tests/unit/commands/github-credentials.test.js.map +0 -1
  809. package/ts_build/tests/unit/commands/misc.test.d.ts +0 -1
  810. package/ts_build/tests/unit/commands/misc.test.js +0 -70
  811. package/ts_build/tests/unit/commands/misc.test.js.map +0 -1
  812. package/ts_build/tests/unit/commands/remote.test.d.ts +0 -1
  813. package/ts_build/tests/unit/commands/remote.test.js +0 -70
  814. package/ts_build/tests/unit/commands/remote.test.js.map +0 -1
  815. package/ts_build/tests/unit/commands/sandbox.test.d.ts +0 -1
  816. package/ts_build/tests/unit/commands/sandbox.test.js +0 -258
  817. package/ts_build/tests/unit/commands/sandbox.test.js.map +0 -1
  818. package/ts_build/tests/unit/hashes.test.d.ts +0 -1
  819. package/ts_build/tests/unit/hashes.test.js +0 -25
  820. package/ts_build/tests/unit/hashes.test.js.map +0 -1
  821. package/ts_build/tests/unit/input-queue.test.d.ts +0 -1
  822. package/ts_build/tests/unit/input-queue.test.js +0 -32
  823. package/ts_build/tests/unit/input-queue.test.js.map +0 -1
  824. package/ts_build/tests/unit/login.test.d.ts +0 -1
  825. package/ts_build/tests/unit/login.test.js +0 -166
  826. package/ts_build/tests/unit/login.test.js.map +0 -1
  827. package/ts_build/tests/unit/modules/moduleLoading.test.d.ts +0 -1
  828. package/ts_build/tests/unit/modules/moduleLoading.test.js +0 -272
  829. package/ts_build/tests/unit/modules/moduleLoading.test.js.map +0 -1
  830. package/ts_build/tests/unit/plugins/pluginLoading.test.d.ts +0 -1
  831. package/ts_build/tests/unit/plugins/pluginLoading.test.js +0 -117
  832. package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +0 -1
  833. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.d.ts +0 -1
  834. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js +0 -32
  835. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js.map +0 -1
  836. package/ts_build/tests/unit/services/KnowhowClient.test.d.ts +0 -1
  837. package/ts_build/tests/unit/services/KnowhowClient.test.js +0 -69
  838. package/ts_build/tests/unit/services/KnowhowClient.test.js.map +0 -1
  839. package/ts_build/tests/unit/services/LazyToolsService.test.d.ts +0 -1
  840. package/ts_build/tests/unit/services/LazyToolsService.test.js +0 -47
  841. package/ts_build/tests/unit/services/LazyToolsService.test.js.map +0 -1
  842. package/ts_build/tests/unit/services/Mcp.test.d.ts +0 -1
  843. package/ts_build/tests/unit/services/Mcp.test.js +0 -45
  844. package/ts_build/tests/unit/services/Mcp.test.js.map +0 -1
  845. package/ts_build/tests/unit/services/MinimalToolsService.test.d.ts +0 -1
  846. package/ts_build/tests/unit/services/MinimalToolsService.test.js +0 -320
  847. package/ts_build/tests/unit/services/MinimalToolsService.test.js.map +0 -1
  848. package/ts_build/tests/unit/services/RuntimeReloadService.test.d.ts +0 -1
  849. package/ts_build/tests/unit/services/RuntimeReloadService.test.js +0 -26
  850. package/ts_build/tests/unit/services/RuntimeReloadService.test.js.map +0 -1
  851. package/ts_build/tests/unit/services/SessionManager.test.d.ts +0 -1
  852. package/ts_build/tests/unit/services/SessionManager.test.js +0 -72
  853. package/ts_build/tests/unit/services/SessionManager.test.js.map +0 -1
  854. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.d.ts +0 -1
  855. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js +0 -78
  856. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js.map +0 -1
  857. package/ts_build/tests/unit/services/SyncerService.test.d.ts +0 -1
  858. package/ts_build/tests/unit/services/SyncerService.test.js +0 -40
  859. package/ts_build/tests/unit/services/SyncerService.test.js.map +0 -1
  860. package/ts_build/tests/unit/tunnel.test.d.ts +0 -1
  861. package/ts_build/tests/unit/tunnel.test.js +0 -47
  862. package/ts_build/tests/unit/tunnel.test.js.map +0 -1
  863. package/ts_build/tests/unit/util/Trace.test.d.ts +0 -1
  864. package/ts_build/tests/unit/util/Trace.test.js +0 -107
  865. package/ts_build/tests/unit/util/Trace.test.js.map +0 -1
  866. package/ts_build/tests/unit/utils/http.test.d.ts +0 -1
  867. package/ts_build/tests/unit/utils/http.test.js +0 -69
  868. package/ts_build/tests/unit/utils/http.test.js.map +0 -1
  869. package/tsconfig.json +0 -34
  870. package/tslint.json +0 -11
@@ -1,1169 +0,0 @@
1
- import {
2
- GoogleGenAI,
3
- Part,
4
- Content,
5
- Tool as GoogleTool, // Rename to avoid conflict with your Tool type
6
- FunctionDeclaration,
7
- FunctionCallingConfigMode,
8
- GenerationConfig,
9
- ToolConfig,
10
- UsageMetadata,
11
- } from "@google/genai";
12
- import * as os from "os";
13
- import * as fsSync from "fs";
14
- import * as pathSync from "path";
15
- import { wait } from "../utils";
16
- import {
17
- EmbeddingModels,
18
- Models,
19
- GoogleThinkingLevelModels,
20
- GoogleThinkingBudgetModels,
21
- GoogleImageModels,
22
- GoogleVideoModels,
23
- GoogleTTSModels,
24
- GoogleEmbeddingModelsList,
25
- GoogleReasoningModels,
26
- } from "../types";
27
- import { GeminiTextPricing } from "./pricing";
28
- import { ContextLimits } from "./contextLimits";
29
- import { ModelModality, TokenUsage } from "./types";
30
-
31
- import {
32
- GenericClient,
33
- CompletionOptions,
34
- CompletionResponse,
35
- EmbeddingOptions,
36
- EmbeddingResponse,
37
- Tool,
38
- Message,
39
- MessageContent,
40
- ToolCall,
41
- OutputMessage,
42
- AudioTranscriptionOptions,
43
- AudioTranscriptionResponse,
44
- AudioGenerationOptions,
45
- AudioGenerationResponse,
46
- ImageGenerationOptions,
47
- ImageGenerationResponse,
48
- VideoGenerationOptions,
49
- VideoGenerationResponse,
50
- VideoStatusOptions,
51
- VideoStatusResponse,
52
- FileUploadOptions,
53
- FileUploadResponse,
54
- FileDownloadOptions,
55
- FileDownloadResponse,
56
- } from "./types";
57
-
58
- function getMimeTypeFromUrl(url: string): string {
59
- if (url.endsWith(".png")) return "image/png";
60
- if (url.endsWith(".gif")) return "image/gif";
61
- if (url.endsWith(".webp")) return "image/webp";
62
- return "image/jpeg";
63
- }
64
-
65
- function getVideoMimeTypeFromUrl(url: string): string {
66
- if (url.endsWith(".mp4")) return "video/mp4";
67
- if (url.endsWith(".webm")) return "video/webm";
68
- if (url.endsWith(".mov")) return "video/quicktime";
69
- if (url.endsWith(".avi")) return "video/x-msvideo";
70
- return "video/mp4";
71
- }
72
-
73
- /**
74
- * Converts raw PCM audio data to WAV format by prepending a WAV header.
75
- * Gemini TTS returns raw 16-bit PCM (audio/L16) which needs a WAV header to be playable.
76
- */
77
- function pcmToWav(
78
- pcmData: Buffer,
79
- sampleRate: number = 24000,
80
- numChannels: number = 1,
81
- bitsPerSample: number = 16
82
- ): Buffer {
83
- const dataSize = pcmData.length;
84
- const headerSize = 44;
85
- const wavBuffer = Buffer.alloc(headerSize + dataSize);
86
-
87
- // RIFF header
88
- wavBuffer.write("RIFF", 0);
89
- wavBuffer.writeUInt32LE(36 + dataSize, 4); // file size - 8
90
- wavBuffer.write("WAVE", 8);
91
-
92
- // fmt chunk
93
- wavBuffer.write("fmt ", 12);
94
- wavBuffer.writeUInt32LE(16, 16); // chunk size
95
- wavBuffer.writeUInt16LE(1, 20); // PCM format
96
- wavBuffer.writeUInt16LE(numChannels, 22);
97
- wavBuffer.writeUInt32LE(sampleRate, 24);
98
- wavBuffer.writeUInt32LE(sampleRate * numChannels * (bitsPerSample / 8), 28); // byte rate
99
- wavBuffer.writeUInt16LE(numChannels * (bitsPerSample / 8), 32); // block align
100
- wavBuffer.writeUInt16LE(bitsPerSample, 34);
101
-
102
- // data chunk
103
- wavBuffer.write("data", 36);
104
- wavBuffer.writeUInt32LE(dataSize, 40);
105
- pcmData.copy(wavBuffer, 44);
106
-
107
- return wavBuffer;
108
- }
109
-
110
- export class GenericGeminiClient implements GenericClient {
111
- private client: GoogleGenAI;
112
- private apiKey?: string;
113
-
114
- constructor(apiKey?: string) {
115
- this.setKey(apiKey || process.env.GEMINI_API_KEY || "");
116
- }
117
-
118
- setKey(apiKey: string) {
119
- this.apiKey = apiKey;
120
- this.client = new GoogleGenAI({
121
- apiKey: apiKey || process.env.GEMINI_API_KEY,
122
- });
123
- }
124
-
125
- /**
126
- * Transforms a generic MessageContent array or string into Google GenAI ContentPart array.
127
- * Handles text and image_url types.
128
- * @param content The generic message content.
129
- * @returns An array of Google GenAI ContentPart.
130
- */
131
- transformContentParts(content: string | MessageContent[]): Part[] {
132
- if (typeof content === "string") {
133
- return [{ text: content }];
134
- }
135
-
136
- return content
137
- .map((part) => {
138
- if (part.type === "text") {
139
- return { text: part.text };
140
- }
141
- if (part.type === "image_url") {
142
- const url = part.image_url.url;
143
- if (url.startsWith("data:")) {
144
- const [header, base64Data] = url.split(",");
145
- const mimeType = header.split(":")[1].split(";")[0];
146
- return {
147
- inlineData: {
148
- data: base64Data,
149
- mimeType,
150
- },
151
- };
152
- }
153
-
154
- // If it's a File API URI
155
- if (url.startsWith("https://generativelanguage.googleapis.com")) {
156
- return {
157
- fileData: {
158
- fileUri: url,
159
- mimeType: getMimeTypeFromUrl(url),
160
- },
161
- };
162
- }
163
- }
164
- if (part.type === "video_url") {
165
- const mimeType = getVideoMimeTypeFromUrl(part.video_url.url);
166
- return {
167
- fileData: {
168
- fileUri: part.video_url.url,
169
- mimeType,
170
- },
171
- };
172
- }
173
- // Handle other potential generic message content types if necessary
174
- // For now, only text and image_url are explicitly handled.
175
- console.warn(
176
- `Unsupported generic message content part type: ${part.type}`
177
- );
178
- return { text: `[Unsupported content type: ${part.type}]` };
179
- })
180
- .filter((part) => !!part); // Filter out any null/undefined parts if transformation fails
181
- }
182
-
183
- /**
184
- * Transforms a generic Message array into a Google GenAI Content array.
185
- * Extracts system messages separately. Maps user, assistant, and tool roles.
186
- * Maps OpenAI-style tool messages to Google's functionResponse parts within user roles.
187
- * Maps OpenAI-style assistant messages with tool_calls to Google's tool_use parts within assistant roles.
188
- * @param messages The generic message array.
189
- * @returns An object containing the system instruction (if any) and the Content array for the API call.
190
- */
191
- transformMessages(messages: Message[]): {
192
- systemInstruction: string | undefined;
193
- contents: Content[];
194
- } {
195
- const googleContents: Content[] = [];
196
- let systemInstruction: string | undefined;
197
-
198
- // Temporary storage for assistant tool calls keyed by ID, needed to map tool results
199
- const assistantToolCalls: { [id: string]: ToolCall } = {};
200
-
201
- for (const msg of messages) {
202
- if (msg.role === "system") {
203
- // System messages go into the systemInstruction field
204
- if (typeof msg.content === "string") {
205
- systemInstruction =
206
- (systemInstruction ? systemInstruction + "\n" : "") + msg.content;
207
- } else {
208
- // System message content is typically string, handle array as text parts?
209
- // Google's systemInstruction is string, so concatenate text parts if array.
210
- systemInstruction =
211
- (systemInstruction ? systemInstruction + "\n" : "") +
212
- this.transformContentParts(msg.content)
213
- .filter((p) => "text" in p && typeof p.text === "string")
214
- .map((p) => p.text)
215
- .join("\n");
216
- }
217
- } else if (msg.role === "user" || msg.role === "assistant") {
218
- const parts = msg.content
219
- ? this.transformContentParts(msg.content)
220
- : [];
221
-
222
- // Add tool_use parts if the assistant message has tool_calls
223
- if (
224
- msg.role === "assistant" &&
225
- msg.tool_calls &&
226
- msg.tool_calls.length > 0
227
- ) {
228
- // Look up any captured thoughtSignatures for this assistant message so
229
- // we can re-attach them to the matching functionCall part (required by
230
- // Gemini 3 to preserve reasoning continuity across tool-use turns).
231
- const details = (msg as any)._reasoning_details;
232
- const sigByCallId: { [id: string]: string } = {};
233
- const standaloneThoughtSigs: string[] = [];
234
- if (details && details.provider === "gemini" && Array.isArray(details.items)) {
235
- for (const item of details.items) {
236
- if (item?.kind === "functionCall" && item.callId) {
237
- sigByCallId[item.callId] = item.thoughtSignature;
238
- } else if (item?.kind === "thoughtSignature" && item.thoughtSignature) {
239
- standaloneThoughtSigs.push(item.thoughtSignature);
240
- }
241
- }
242
- }
243
- for (const toolCall of msg.tool_calls) {
244
- const callPart: any = {
245
- functionCall: {
246
- name: toolCall.function.name,
247
- // Google expects arguments as a parsed object, not a string
248
- args: JSON.parse(toolCall.function.arguments || "{}"),
249
- },
250
- };
251
- if (sigByCallId[toolCall.id]) {
252
- callPart.thoughtSignature = sigByCallId[toolCall.id];
253
- }
254
- parts.push(callPart);
255
- // Store the tool call to potentially link with a future tool response message
256
- assistantToolCalls[toolCall.id] = toolCall;
257
- }
258
- // Re-attach any standalone thought-part signatures onto the leading
259
- // text part(s) so reasoning-only thoughts are also round-tripped.
260
- for (let s = 0; s < standaloneThoughtSigs.length; s++) {
261
- const p: any = parts[s];
262
- if (p && "text" in p && !p.thoughtSignature) {
263
- p.thoughtSignature = standaloneThoughtSigs[s];
264
- }
265
- }
266
- }
267
-
268
- if (parts.length > 0) {
269
- googleContents.push({
270
- role: msg.role === "user" ? "user" : "model",
271
- parts,
272
- });
273
- }
274
- } else if (msg.role === "tool") {
275
- // OpenAI tool messages represent the *result* of a tool call.
276
- // Google represents this as a 'functionResponse' part within a 'user' role message.
277
- // The content of the tool message is the tool output (usually a string).
278
- // The tool_call_id links it back to the assistant's tool_use part.
279
-
280
- if (!msg.tool_call_id) {
281
- throw new Error("Tool message must have a tool_call_id.");
282
- }
283
-
284
- // Ensure content is treated as string for functionResponse
285
- const toolOutputContent =
286
- typeof msg.content === "string"
287
- ? msg.content
288
- : JSON.stringify(msg.content); // Coerce array content to string representation if necessary
289
-
290
- // Find the matching tool call name from the stored assistant tool calls
291
- // This is needed for the functionResponse part's name field in Google's API.
292
- const matchingToolCall = assistantToolCalls[msg.tool_call_id];
293
- const functionName = matchingToolCall
294
- ? matchingToolCall.function.name
295
- : "unknown_function";
296
-
297
- if (!matchingToolCall) {
298
- console.warn(
299
- `Matching assistant tool call not found for tool_call_id: ${msg.tool_call_id}. Using name '${functionName}'.`,
300
- msg
301
- );
302
- }
303
-
304
- // Add the user message with the functionResponse part
305
- // Google's API expects the user role for tool results.
306
- googleContents.push({
307
- role: "user",
308
- parts: [
309
- {
310
- functionResponse: {
311
- name: functionName, // Google API requires the function name here
312
- response: {
313
- result: toolOutputContent,
314
- },
315
- },
316
- },
317
- ],
318
- });
319
- } else {
320
- console.warn(
321
- `Unsupported generic message role: ${msg.role}, skipping.`
322
- );
323
- }
324
- }
325
-
326
- return { systemInstruction, contents: googleContents };
327
- }
328
-
329
- /**
330
- * Recursively cleans a JSON schema to remove properties not supported by Gemini API.
331
- * Removes: additionalProperties, $ref, and other unsupported fields.
332
- * Converts type strings to uppercase as required by Gemini.
333
- * @param schema The schema object to clean
334
- * @returns A cleaned schema object compatible with Gemini API
335
- */
336
- private cleanSchemaForGemini(schema: any): any {
337
- if (!schema || typeof schema !== "object") {
338
- return schema;
339
- }
340
-
341
- // Handle arrays
342
- if (Array.isArray(schema)) {
343
- return schema.map((item) => this.cleanSchemaForGemini(item));
344
- }
345
-
346
- const cleaned: any = {};
347
-
348
- for (const key in schema) {
349
- if (!Object.prototype.hasOwnProperty.call(schema, key)) {
350
- continue;
351
- }
352
-
353
- // Skip unsupported properties:
354
- // - additionalProperties: not supported by Gemini
355
- // - $ref: JSON Schema references not supported
356
- // - $defs: JSON Schema definitions not supported
357
- // - positional: internal knowhow property, not part of JSON Schema
358
- if (
359
- key === "additionalProperties" ||
360
- key === "$ref" ||
361
- key === "$defs" ||
362
- key === "positional"
363
- ) {
364
- continue;
365
- }
366
-
367
- const value = schema[key];
368
-
369
- // Convert type to uppercase if it's a string
370
- if (key === "type" && typeof value === "string") {
371
- cleaned[key] = value.toUpperCase();
372
- }
373
- // Handle type arrays (e.g., ["string", "null"])
374
- else if (key === "type" && Array.isArray(value)) {
375
- cleaned[key] = value.map((t: string) =>
376
- typeof t === "string" ? t.toUpperCase() : t
377
- );
378
- }
379
- // Recursively clean nested objects
380
- else if (typeof value === "object" && value !== null) {
381
- cleaned[key] = this.cleanSchemaForGemini(value);
382
- }
383
- // Copy primitive values as-is
384
- else {
385
- cleaned[key] = value;
386
- }
387
- }
388
-
389
- return cleaned;
390
- }
391
-
392
- /**
393
- * Transforms generic Tool array into Google GenAI tools format.
394
- * @param tools The generic tool array.
395
- * @returns An array of Google GenAI Tool objects, or undefined if no tools.
396
- */
397
- transformTools(tools?: Tool[]): GoogleTool[] | undefined {
398
- if (!tools || tools.length === 0) {
399
- return undefined;
400
- }
401
-
402
- const functionDeclarations: FunctionDeclaration[] = tools.map((tool) => {
403
- // Clean the entire parameters schema to remove unsupported fields
404
- const cleanedParameters = this.cleanSchemaForGemini(
405
- tool.function.parameters
406
- );
407
-
408
- return {
409
- name: tool.function.name,
410
- description: tool.function.description || "",
411
- parameters: cleanedParameters,
412
- };
413
- });
414
-
415
- // Google's tools structure is an array of objects, where each object
416
- // can contain 'functionDeclarations', 'googleSearch', 'codeExecution', etc.
417
- // Based on the provided docs, function calling tools go under `functionDeclarations`.
418
- return [{ functionDeclarations }];
419
- }
420
-
421
- /**
422
- * Builds the thinkingConfig for Gemini models that support it.
423
- * - Gemini 3.x models use thinkingLevel (supported levels vary by model)
424
- * - Gemini 2.5 models use thinkingBudget: number (0 = off, -1 = dynamic)
425
- *
426
- * Maps CompletionOptions.reasoning_effort to provider-specific values.
427
- */
428
- buildThinkingConfig(
429
- options: CompletionOptions
430
- ): Record<string, unknown> | undefined {
431
- const model = options.model;
432
- const effort = options.reasoning_effort ?? "low";
433
-
434
- // Gemini 3.x — use thinkingLevel
435
- if (GoogleThinkingLevelModels.includes(model)) {
436
- // Gemini 3.7 Flash rejects "minimal"; low is its least intensive level.
437
- const minimumLevel = model === Models.google.Gemini_37_Flash ? "low" : "minimal";
438
- const levelMap: Record<string, string> = {
439
- none: minimumLevel,
440
- minimal: minimumLevel,
441
- low: "low",
442
- medium: "medium",
443
- high: "high",
444
- xhigh: "high",
445
- max: "high",
446
- };
447
- return {
448
- thinkingLevel: levelMap[effort] ?? "low",
449
- };
450
- }
451
-
452
- // Gemini 2.5 — use thinkingBudget
453
- if (GoogleThinkingBudgetModels.includes(model)) {
454
- // Map effort to token budget
455
- const budgetMap: Record<string, number> = {
456
- none: 0,
457
- minimal: 512,
458
- low: 1024,
459
- medium: 8192,
460
- high: -1, // dynamic
461
- xhigh: -1,
462
- max: -1,
463
- };
464
- return {
465
- thinkingBudget: budgetMap[effort] ?? 1024,
466
- };
467
- }
468
-
469
- return undefined;
470
- }
471
-
472
- async createChatCompletion(
473
- options: CompletionOptions
474
- ): Promise<CompletionResponse> {
475
- const thinkingConfig = this.buildThinkingConfig(options);
476
- const { systemInstruction, contents } = this.transformMessages(
477
- options.messages
478
- );
479
- const tools = this.transformTools(options.tools);
480
-
481
- try {
482
- await wait(2000);
483
- const response = await this.client.models.generateContent({
484
- model: options.model,
485
- contents,
486
- config: {
487
- systemInstruction,
488
- thinkingConfig,
489
- tools,
490
- ...(tools.length && {
491
- toolConfig: {
492
- functionCallingConfig: {
493
- mode: options.tool_choice === "none"
494
- ? FunctionCallingConfigMode.NONE
495
- : FunctionCallingConfigMode.AUTO,
496
- },
497
- },
498
- }),
499
- maxOutputTokens: options.max_tokens,
500
- },
501
- });
502
-
503
- let toolCalls: ToolCall[] = [];
504
-
505
- if (response.functionCalls) {
506
- for (const call of response.functionCalls) {
507
- toolCalls.push({
508
- id:
509
- call.id ||
510
- `fc_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
511
- type: "function",
512
- function: {
513
- name: call.name,
514
- arguments: JSON.stringify(call.args || {}),
515
- },
516
- });
517
- }
518
- }
519
-
520
- if (response?.promptFeedback?.blockReason) {
521
- // lame
522
- throw new Error(
523
- `Google GenAI blocked the response due to: ${response.promptFeedback.blockReason}`
524
- );
525
- }
526
-
527
- // Map Google response to generic CompletionResponse
528
- const choices: CompletionResponse["choices"] =
529
- response.candidates?.map((candidate) => {
530
- const message: OutputMessage = {
531
- role: candidate.content.role === "model" ? "assistant" : "user",
532
- content: "", // Initialize content
533
- tool_calls: [...toolCalls], // Initialize tool calls
534
- };
535
-
536
- // Collect text and tool_use parts
537
- let textContent = "";
538
-
539
- // after the first message uses the top level tool calls we should empty it
540
- if (toolCalls.length) {
541
- toolCalls = [];
542
- }
543
-
544
- if (!candidate?.content?.parts) {
545
- console.warn("No content parts in candidate:", candidate);
546
- return { message };
547
- }
548
-
549
- // Capture Gemini thoughtSignatures so they can be round-tripped on the
550
- // next turn. Gemini 3 REQUIRES these to be echoed back on the matching
551
- // functionCall part or it returns a 400 "Thought signature is not
552
- // valid" on the 2nd+ tool-calling turn. We key them by tool-call id
553
- // (and also keep any standalone thought-part signatures in order).
554
- const reasoningItems: any[] = [];
555
-
556
- candidate?.content?.parts?.forEach((part) => {
557
- if ("text" in part && typeof part.text === "string") {
558
- textContent += part.text; // Concatenate text parts
559
- if ((part as any).thoughtSignature) {
560
- reasoningItems.push({
561
- kind: "thoughtSignature",
562
- thoughtSignature: (part as any).thoughtSignature,
563
- });
564
- }
565
- } else if ("functionCall" in part && part.functionCall) {
566
- const callId =
567
- part.functionCall.id ||
568
- `fc_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
569
- message.tool_calls.push({
570
- id: callId,
571
- type: "function",
572
- function: {
573
- name: part.functionCall.name,
574
- arguments: JSON.stringify(part.functionCall.args || {}),
575
- },
576
- });
577
- if ((part as any).thoughtSignature) {
578
- reasoningItems.push({
579
- kind: "functionCall",
580
- callId,
581
- thoughtSignature: (part as any).thoughtSignature,
582
- });
583
- }
584
- }
585
- });
586
-
587
- message.content = textContent || null;
588
- if (reasoningItems.length > 0) {
589
- (message as any)._reasoning_details = {
590
- provider: "gemini",
591
- items: reasoningItems,
592
- };
593
- }
594
-
595
- return { message };
596
- }) || []; // Handle case with no candidates
597
-
598
- const usage = response.usageMetadata;
599
- const usdCost = usage
600
- ? this.calculateCost(options.model, usage)
601
- : undefined;
602
-
603
- // Map cachedContentTokenCount → prompt_tokens_details.cached_tokens so that
604
- // base.ts can read cache hit tokens via usage.prompt_tokens_details?.cached_tokens
605
- const cachedTokens = usage?.cachedContentTokenCount ?? 0;
606
- const usageWithCache: TokenUsage | undefined = usage
607
- ? ({
608
- prompt_tokens: usage.promptTokenCount ?? 0,
609
- completion_tokens: usage.candidatesTokenCount ?? 0,
610
- total_tokens: usage.totalTokenCount,
611
- prompt_tokens_details: { cached_tokens: cachedTokens },
612
- } as TokenUsage)
613
- : undefined;
614
-
615
- return {
616
- choices,
617
- model: options.model,
618
- usage: usageWithCache,
619
- usd_cost: usdCost,
620
- };
621
- } catch (error) {
622
- console.error(
623
- "Error calling Google GenAI generateContent:",
624
- error.message
625
- );
626
- throw error;
627
- }
628
- }
629
-
630
- pricesPerMillion() {
631
- return GeminiTextPricing;
632
- }
633
-
634
- getPricing(
635
- model?: string
636
- ):
637
- | import("./pricing/types").ModelPricing
638
- | Record<string, import("./pricing/types").ModelPricing>
639
- | undefined {
640
- if (model !== undefined) {
641
- return GeminiTextPricing[model as keyof typeof GeminiTextPricing] as
642
- | import("./pricing/types").ModelPricing
643
- | undefined;
644
- }
645
- return GeminiTextPricing as unknown as Record<
646
- string,
647
- import("./pricing/types").ModelPricing
648
- >;
649
- }
650
-
651
- calculateCost(model: string, usage: UsageMetadata): number | undefined {
652
- const pricing = this.pricesPerMillion()[model];
653
- if (!pricing || !usage) {
654
- return 0;
655
- }
656
-
657
- let cost = 0;
658
-
659
- // ── Input tokens ──────────────────────────────────────────────────────────
660
- // Use per-modality breakdowns when available (inputTokensDetails) so that
661
- // audio tokens (which can cost 3–10× more than text) are billed correctly.
662
- const inputDetails = (usage as any).inputTokensDetails as
663
- | { modality?: string; tokenCount?: number }[]
664
- | undefined;
665
-
666
- if (
667
- inputDetails &&
668
- inputDetails.length > 0 &&
669
- pricing.input_audio !== undefined
670
- ) {
671
- // Modality-aware billing
672
- for (const detail of inputDetails) {
673
- const tokens = detail.tokenCount || 0;
674
- if (!tokens) continue;
675
- const modality = (detail.modality || "").toUpperCase();
676
- if (modality === "AUDIO") {
677
- const rate = pricing.input_audio ?? pricing.input ?? 0;
678
- cost += (tokens * rate) / 1e6;
679
- } else {
680
- // TEXT / IMAGE / VIDEO all use the base `input` rate
681
- const isGt200k = tokens > 200_000 && pricing.input_gt_200k;
682
- const rate = isGt200k ? pricing.input_gt_200k! : pricing.input ?? 0;
683
- cost += (tokens * rate) / 1e6;
684
- }
685
- }
686
- } else if ("promptTokenCount" in usage && usage.promptTokenCount) {
687
- // Fallback: no modality breakdown available — use total token count
688
- const isGt200k =
689
- usage.promptTokenCount > 200_000 && pricing.input_gt_200k;
690
- const rate = isGt200k ? pricing.input_gt_200k! : pricing.input ?? 0;
691
- cost += (usage.promptTokenCount * rate) / 1e6;
692
- }
693
-
694
- // ── Output tokens ─────────────────────────────────────────────────────────
695
- const outputDetails = (usage as any).outputTokensDetails as
696
- | { modality?: string; tokenCount?: number }[]
697
- | undefined;
698
-
699
- if (
700
- outputDetails &&
701
- outputDetails.length > 0 &&
702
- pricing.output_audio !== undefined
703
- ) {
704
- // Modality-aware billing
705
- for (const detail of outputDetails) {
706
- const tokens = detail.tokenCount || 0;
707
- if (!tokens) continue;
708
- const modality = (detail.modality || "").toUpperCase();
709
- if (modality === "AUDIO") {
710
- const rate = pricing.output_audio ?? pricing.output ?? 0;
711
- cost += (tokens * rate) / 1e6;
712
- } else {
713
- const isGt200k = tokens > 200_000 && pricing.output_gt_200k;
714
- const rate = isGt200k ? pricing.output_gt_200k! : pricing.output ?? 0;
715
- cost += (tokens * rate) / 1e6;
716
- }
717
- }
718
- } else if ("responseTokenCount" in usage && usage.responseTokenCount) {
719
- // Fallback: no modality breakdown — use total token count
720
- const isGt200k =
721
- usage.responseTokenCount > 200_000 && pricing.output_gt_200k;
722
- const rate = isGt200k ? pricing.output_gt_200k! : pricing.output ?? 0;
723
- cost += (usage.responseTokenCount * rate) / 1e6;
724
- }
725
-
726
- // ── Context caching ───────────────────────────────────────────────────────
727
- if (
728
- "cachedContentTokenCount" in usage &&
729
- usage.cachedContentTokenCount &&
730
- pricing.context_caching
731
- ) {
732
- if (
733
- usage.cachedContentTokenCount > 200_000 &&
734
- pricing.context_caching_gt_200k
735
- ) {
736
- cost +=
737
- (usage.cachedContentTokenCount * pricing.context_caching_gt_200k) /
738
- 1e6;
739
- } else {
740
- cost += (usage.cachedContentTokenCount * pricing.context_caching) / 1e6;
741
- }
742
- }
743
-
744
- return cost;
745
- }
746
-
747
- async getModels(modality?: ModelModality): Promise<{ id: string }[]> {
748
- if (modality) {
749
- const map: Partial<Record<ModelModality, string[]>> = {
750
- completion: GoogleReasoningModels,
751
- embedding: GoogleEmbeddingModelsList,
752
- image: GoogleImageModels,
753
- audio: GoogleTTSModels,
754
- video: GoogleVideoModels,
755
- };
756
- return (map[modality] ?? []).map((id) => ({ id }));
757
- }
758
- // No modality — live API call (backward compat)
759
- try {
760
- const models = await this.client.models.list();
761
- return models.page.map((m) => ({ id: m.name! }));
762
- } catch (error) {
763
- console.error("Error fetching Google GenAI models:", error);
764
- throw error;
765
- }
766
- }
767
-
768
- async createEmbedding(options: EmbeddingOptions): Promise<EmbeddingResponse> {
769
- if (!options.model) {
770
- console.warn(
771
- "Embedding model not specified, using default 'text-embedding-004'."
772
- );
773
- }
774
-
775
- try {
776
- const googleEmbedding = await this.client.models.embedContent({
777
- model: options.model,
778
- contents: options.input,
779
- });
780
-
781
- // Map Google EmbeddingResponse to generic EmbeddingResponse
782
- const data = googleEmbedding.embeddings.map((e, index) => ({
783
- object: "embedding", // Hardcode as per OpenAI's object type for embeddings
784
- embedding: e.values, // Google's embedding values
785
- index, // Use array index
786
- }));
787
-
788
- const usage = {
789
- promptTokenCount: googleEmbedding.metadata.billableCharacterCount || 0,
790
- totalTokenCount: googleEmbedding.metadata.billableCharacterCount || 0,
791
- };
792
-
793
- const usdCost = this.calculateCost(options.model, usage);
794
-
795
- return {
796
- data,
797
- model: options.model,
798
- usage: {
799
- prompt_tokens: usage.promptTokenCount,
800
- total_tokens: usage.totalTokenCount,
801
- },
802
- usd_cost: usdCost,
803
- };
804
- } catch (error) {
805
- console.error("Error calling Google GenAI embedContent:", error);
806
- throw error;
807
- }
808
- }
809
-
810
- async createAudioTranscription(
811
- options: AudioTranscriptionOptions
812
- ): Promise<AudioTranscriptionResponse> {
813
- throw new Error(
814
- "Audio transcription is not yet supported by the Gemini client. Use OpenAI client with Whisper model instead."
815
- );
816
- }
817
-
818
- async createAudioGeneration(
819
- options: AudioGenerationOptions
820
- ): Promise<AudioGenerationResponse> {
821
- try {
822
- const response = await this.client.models.generateContent({
823
- model: options.model,
824
- contents: [
825
- {
826
- role: "user",
827
- parts: [{ text: options.input }],
828
- },
829
- ],
830
- config: {
831
- responseModalities: ["AUDIO"],
832
- speechConfig: {
833
- voiceConfig: {
834
- prebuiltVoiceConfig: {
835
- voiceName: options.voice || "Puck",
836
- },
837
- },
838
- },
839
- },
840
- });
841
-
842
- // Extract audio data from the response
843
- // Gemini returns inline audio data in the response parts
844
- const audioPart = response.candidates?.[0]?.content?.parts?.find(
845
- (part: any) => part.inlineData?.mimeType?.startsWith("audio/")
846
- );
847
-
848
- if (!audioPart || !audioPart.inlineData) {
849
- throw new Error("No audio data returned from Gemini TTS");
850
- }
851
-
852
- // Convert base64 to buffer
853
- const rawBuffer = Buffer.from(audioPart.inlineData.data, "base64");
854
- const mimeType = audioPart.inlineData.mimeType || "audio/wav";
855
-
856
- // Gemini returns raw PCM (audio/L16) - convert to WAV format for playability
857
- let audioBuffer: Buffer = rawBuffer;
858
- if (mimeType.includes("L16") || mimeType.includes("pcm")) {
859
- // Parse sample rate from mime type e.g. "audio/L16;codec=pcm;rate=24000"
860
- const rateMatch = mimeType.match(/rate=(\d+)/);
861
- const sampleRate = rateMatch ? parseInt(rateMatch[1], 10) : 24000;
862
- audioBuffer = pcmToWav(rawBuffer, sampleRate);
863
- }
864
-
865
- return {
866
- audio: audioBuffer,
867
- format: "audio/wav",
868
- };
869
- } catch (error) {
870
- console.error("Error calling Gemini TTS:", error);
871
- throw error;
872
- }
873
- }
874
-
875
- async createImageGeneration(
876
- options: ImageGenerationOptions
877
- ): Promise<ImageGenerationResponse> {
878
- try {
879
- // Check if using Imagen 3 model or Gemini Flash inline generation
880
- const isImagen3 = options.model?.includes("imagen");
881
-
882
- if (isImagen3) {
883
- // Imagen 3 uses the generateImages endpoint
884
- const response = await this.client.models.generateImages({
885
- model: options.model,
886
- prompt: options.prompt,
887
- config: {
888
- numberOfImages: options.n || 1,
889
- },
890
- });
891
-
892
- // Convert response to ImageGenerationResponse format
893
- const generatedImages = response.generatedImages || [];
894
- const images = generatedImages.map((img) => ({
895
- // imageBytes is already a base64-encoded string from the API
896
- // Don't re-encode it, just use it directly
897
- b64_json: img.image?.imageBytes ? img.image.imageBytes : "",
898
- revised_prompt: options.prompt,
899
- }));
900
-
901
- return {
902
- created: Math.floor(Date.now() / 1000),
903
- data: images,
904
- usd_cost: 0.03 * images.length,
905
- };
906
- } else {
907
- // Use Gemini Flash inline image generation (e.g., gemini-2.0-flash-preview-image-generation)
908
- const response = await this.client.models.generateContent({
909
- model: options.model,
910
- contents: [
911
- {
912
- role: "user",
913
- parts: [{ text: options.prompt }],
914
- },
915
- ],
916
- config: {
917
- responseModalities: ["IMAGE", "TEXT"],
918
- },
919
- });
920
-
921
- // Extract image data from the response
922
- const imageParts =
923
- response.candidates?.[0]?.content?.parts?.filter((part: any) =>
924
- part.inlineData?.mimeType?.startsWith("image/")
925
- ) || [];
926
-
927
- if (imageParts.length === 0) {
928
- throw new Error("No image data returned from Gemini");
929
- }
930
-
931
- const images = imageParts.map((part: any) => ({
932
- b64_json: part.inlineData.data,
933
- revised_prompt: options.prompt,
934
- }));
935
-
936
- const usageMetadata = response.usageMetadata;
937
- const usdCost = usageMetadata
938
- ? this.calculateCost(options.model, usageMetadata)
939
- : undefined;
940
-
941
- return {
942
- created: Math.floor(Date.now() / 1000),
943
- data: images,
944
- usd_cost: usdCost,
945
- };
946
- }
947
- } catch (error) {
948
- console.error("Error calling Gemini image generation:", error);
949
- throw error;
950
- }
951
- }
952
-
953
- async createVideoGeneration(
954
- options: VideoGenerationOptions
955
- ): Promise<VideoGenerationResponse> {
956
- try {
957
- // Submit the video generation job – do NOT poll here.
958
- // Use getVideoStatus() to poll and downloadFile() to fetch the result.
959
- const operation = await this.client.models.generateVideos({
960
- model: options.model,
961
- prompt: options.prompt,
962
- config: {
963
- numberOfVideos: options.n || 1,
964
- ...(options.duration && {
965
- durationSeconds: Math.max(6, options.duration),
966
- }),
967
- ...(options.resolution && { resolution: options.resolution }),
968
- ...(options.aspect_ratio && { aspectRatio: options.aspect_ratio }),
969
- },
970
- });
971
-
972
- // Calculate estimated cost using model-specific per-second rate
973
- const duration = options.duration || 5; // Default 5 seconds
974
- const pricingEntry = GeminiTextPricing[options.model];
975
- const ratePerSec = pricingEntry?.video_generation ?? 0.4; // default to $0.40/sec (Veo 3 rate)
976
- const usdCost = (options.n || 1) * duration * ratePerSec;
977
-
978
- // Return the operation name as jobId so callers can use getVideoStatus / downloadVideo
979
- return {
980
- created: Math.floor(Date.now() / 1000),
981
- data: [],
982
- jobId: operation.name,
983
- usd_cost: usdCost,
984
- };
985
- } catch (error) {
986
- console.error("Error calling Gemini video generation:", error);
987
- throw error;
988
- }
989
- }
990
-
991
- async getVideoStatus(
992
- options: VideoStatusOptions
993
- ): Promise<VideoStatusResponse> {
994
- try {
995
- const operation = await this.client.operations.getVideosOperation({
996
- operation: { name: options.jobId } as any,
997
- });
998
-
999
- if (operation.error) {
1000
- return {
1001
- jobId: options.jobId,
1002
- status: "failed",
1003
- error: JSON.stringify(operation.error),
1004
- };
1005
- }
1006
-
1007
- if (!operation.done) {
1008
- return {
1009
- jobId: options.jobId,
1010
- status: "in_progress",
1011
- };
1012
- }
1013
-
1014
- // Completed – extract file URIs
1015
- const generatedVideos = operation.response?.generatedVideos || [];
1016
- const data = generatedVideos.map((vid) => {
1017
- const videoBytes: string | undefined = vid.video?.videoBytes;
1018
- const uri: string | undefined = vid.video?.uri;
1019
- return {
1020
- b64_json: videoBytes || undefined,
1021
- url: uri || undefined,
1022
- fileUri: uri || undefined,
1023
- };
1024
- });
1025
-
1026
- return {
1027
- jobId: options.jobId,
1028
- status: "completed",
1029
- data,
1030
- };
1031
- } catch (error) {
1032
- console.error("Error checking Gemini video status:", error);
1033
- throw error;
1034
- }
1035
- }
1036
-
1037
- /**
1038
- * Download a video (or any file) via the Google GenAI Files API.
1039
- * Pass either `fileId` (the files/* name) or `uri` (the full URI).
1040
- */
1041
- async downloadVideo(
1042
- options: FileDownloadOptions
1043
- ): Promise<FileDownloadResponse> {
1044
- return this.downloadFile(options);
1045
- }
1046
-
1047
- /**
1048
- * Upload a file to the Google GenAI Files API.
1049
- */
1050
- async uploadFile(options: FileUploadOptions): Promise<FileUploadResponse> {
1051
- try {
1052
- const blob = new Blob([new Uint8Array(options.data)], {
1053
- type: options.mimeType,
1054
- });
1055
- const uploadedFile = await this.client.files.upload({
1056
- file: blob,
1057
- config: {
1058
- mimeType: options.mimeType,
1059
- displayName: options.displayName,
1060
- name: options.fileName,
1061
- },
1062
- });
1063
-
1064
- return {
1065
- fileId: uploadedFile.name,
1066
- uri: uploadedFile.uri,
1067
- url: uploadedFile.downloadUri || uploadedFile.uri,
1068
- mimeType: uploadedFile.mimeType,
1069
- sizeBytes: uploadedFile.sizeBytes
1070
- ? Number(uploadedFile.sizeBytes)
1071
- : undefined,
1072
- };
1073
- } catch (error) {
1074
- console.error("Error uploading file to Google GenAI Files API:", error);
1075
- throw error;
1076
- }
1077
- }
1078
-
1079
- /**
1080
- * Download a file from the Google GenAI Files API.
1081
- *
1082
- * The SDK's `files.download()` writes to disk, so we use a temp file and
1083
- * read it back as a Buffer. Pass either:
1084
- * - `fileId`: the files/* resource name (e.g. "files/abc-123") or a Video uri
1085
- * - `uri`: the full Video.uri returned in GeneratedVideo (also accepted as fileId)
1086
- *
1087
- * For generated videos the `file` param accepts the Video object directly
1088
- * (uri + optional mimeType), which the SDK resolves to a download URL.
1089
- */
1090
- async downloadFile(
1091
- options: FileDownloadOptions
1092
- ): Promise<FileDownloadResponse> {
1093
- const mimeMap: Record<string, string> = {
1094
- ".mp4": "video/mp4",
1095
- ".webm": "video/webm",
1096
- ".mov": "video/quicktime",
1097
- ".png": "image/png",
1098
- ".jpg": "image/jpeg",
1099
- ".jpeg": "image/jpeg",
1100
- ".gif": "image/gif",
1101
- ".wav": "audio/wav",
1102
- ".mp3": "audio/mpeg",
1103
- };
1104
-
1105
- try {
1106
- // The Google GenAI SDK's files.download() uses an async pipe that is NOT
1107
- // properly awaited, so we fetch the file directly via HTTP instead.
1108
- // Build the download URL from the uri/fileId.
1109
- const rawUri = options.uri || options.fileId || "";
1110
-
1111
- // If it's already a full https URL, use it directly (append API key).
1112
- // Otherwise construct the Files API download URL from the resource name.
1113
- let downloadUrl: string;
1114
- if (rawUri.startsWith("https://")) {
1115
- // Append API key if not already present
1116
- const sep = rawUri.includes("?") ? "&" : "?";
1117
- downloadUrl = `${rawUri}${sep}key=${this.apiKey}`;
1118
- } else {
1119
- // Strip leading "files/" if present to get just the file ID
1120
- const fileId = rawUri.replace(/^files\//, "");
1121
- downloadUrl = `https://generativelanguage.googleapis.com/v1beta/files/${fileId}:download?alt=media&key=${this.apiKey}`;
1122
- }
1123
-
1124
- const response = await fetch(downloadUrl);
1125
- if (!response.ok) {
1126
- throw new Error(
1127
- `HTTP ${response.status} ${response.statusText} downloading ${downloadUrl}`
1128
- );
1129
- }
1130
-
1131
- const arrayBuffer = await response.arrayBuffer();
1132
- const data = Buffer.from(arrayBuffer);
1133
-
1134
- // If caller supplied a filePath, write to it (creating dirs as needed)
1135
- if (options.filePath) {
1136
- fsSync.mkdirSync(pathSync.dirname(options.filePath), {
1137
- recursive: true,
1138
- });
1139
- fsSync.writeFileSync(options.filePath, data);
1140
- }
1141
-
1142
- // Infer mime type from the URI/fileId first (more reliable), then from the path
1143
- const sourceForExt =
1144
- options.uri || options.fileId || options.filePath || "";
1145
- const ext = pathSync.extname(sourceForExt.split("?")[0]).toLowerCase();
1146
- const mimeType = mimeMap[ext] || "video/mp4";
1147
-
1148
- return { data, mimeType };
1149
- } catch (error) {
1150
- console.error(
1151
- "Error downloading file from Google GenAI Files API:",
1152
- error
1153
- );
1154
- throw error;
1155
- }
1156
- }
1157
-
1158
- getContextLimit(
1159
- model: string
1160
- ): { contextLimit: number; threshold: number } | undefined {
1161
- const contextLimit = ContextLimits[model];
1162
- if (contextLimit === undefined) return undefined;
1163
- const pricing = GeminiTextPricing[model];
1164
- // If the model has tiered pricing above 200k tokens, use 200k as the threshold
1165
- const threshold =
1166
- pricing && "input_gt_200k" in pricing ? 200_000 : contextLimit;
1167
- return { contextLimit, threshold };
1168
- }
1169
- }