@tyvm/knowhow 0.0.159 → 0.0.161

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 (906) hide show
  1. package/README.md +6 -6
  2. package/package.json +2 -2
  3. package/ts_build/package.json +2 -2
  4. package/ts_build/src/chat/CliChatService.d.ts +2 -1
  5. package/ts_build/src/chat/CliChatService.js +29 -3
  6. package/ts_build/src/chat/CliChatService.js.map +1 -1
  7. package/ts_build/src/chat/modules/AgentModule.js +21 -17
  8. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  9. package/ts_build/src/chat/renderer/ConsoleRenderer.js +32 -25
  10. package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
  11. package/ts_build/src/clients/anthropic.js +4 -1
  12. package/ts_build/src/clients/anthropic.js.map +1 -1
  13. package/ts_build/src/clients/contextLimits.js +13 -7
  14. package/ts_build/src/clients/contextLimits.js.map +1 -1
  15. package/ts_build/src/clients/index.js +3 -1
  16. package/ts_build/src/clients/index.js.map +1 -1
  17. package/ts_build/src/clients/openai.js +18 -5
  18. package/ts_build/src/clients/openai.js.map +1 -1
  19. package/ts_build/src/clients/pricing/anthropic.d.ts +2 -0
  20. package/ts_build/src/clients/pricing/anthropic.js +21 -1
  21. package/ts_build/src/clients/pricing/anthropic.js.map +1 -1
  22. package/ts_build/src/clients/pricing/openai.d.ts +2 -0
  23. package/ts_build/src/clients/pricing/openai.js +32 -7
  24. package/ts_build/src/clients/pricing/openai.js.map +1 -1
  25. package/ts_build/src/clients/pricing/types.d.ts +4 -0
  26. package/ts_build/src/clients/pricing/types.js.map +1 -1
  27. package/ts_build/src/clients/pricing/xai.d.ts +2 -0
  28. package/ts_build/src/clients/pricing/xai.js +13 -8
  29. package/ts_build/src/clients/pricing/xai.js.map +1 -1
  30. package/ts_build/src/clients/xai.js +20 -8
  31. package/ts_build/src/clients/xai.js.map +1 -1
  32. package/ts_build/src/commands/misc.js +15 -2
  33. package/ts_build/src/commands/misc.js.map +1 -1
  34. package/ts_build/src/logger.d.ts +1 -0
  35. package/ts_build/src/logger.js +13 -1
  36. package/ts_build/src/logger.js.map +1 -1
  37. package/ts_build/src/remotes.d.ts +2 -0
  38. package/ts_build/src/remotes.js +20 -2
  39. package/ts_build/src/remotes.js.map +1 -1
  40. package/ts_build/src/tunnel.js +7 -2
  41. package/ts_build/src/tunnel.js.map +1 -1
  42. package/ts_build/src/types.d.ts +12 -1
  43. package/ts_build/src/types.js.map +1 -1
  44. package/ts_build/src/utils/InputQueueManager.d.ts +8 -1
  45. package/ts_build/src/utils/InputQueueManager.js +74 -3
  46. package/ts_build/src/utils/InputQueueManager.js.map +1 -1
  47. package/ts_build/src/utils/index.d.ts +3 -1
  48. package/ts_build/src/utils/index.js +11 -3
  49. package/ts_build/src/utils/index.js.map +1 -1
  50. package/ts_build/src/worker.js +4 -1
  51. package/ts_build/src/worker.js.map +1 -1
  52. package/ts_build/src/workers/tools/listAllowedPorts.d.ts +2 -1
  53. package/ts_build/src/workers/tools/listAllowedPorts.js +1 -1
  54. package/ts_build/src/workers/tools/listAllowedPorts.js.map +1 -1
  55. package/CONFIG.md +0 -429
  56. package/PROCESSING.md +0 -450
  57. package/WORKER.md +0 -260
  58. package/autodoc/README.md +0 -324
  59. package/autodoc/chat-guide.md +0 -444
  60. package/autodoc/cli-reference.md +0 -720
  61. package/autodoc/config-reference.md +0 -642
  62. package/autodoc/embeddings-guide.md +0 -467
  63. package/autodoc/generate-guide.md +0 -437
  64. package/autodoc/language-plugin-guide.md +0 -417
  65. package/autodoc/modules-guide.md +0 -379
  66. package/autodoc/plugins-guide.md +0 -721
  67. package/autodoc/quickstart-guide.md +0 -126
  68. package/autodoc/skills-guide.md +0 -584
  69. package/autodoc/worker-guide.md +0 -519
  70. package/docs/input-queue-manager.md +0 -142
  71. package/docs/multi-worker-management.md +0 -142
  72. package/docs/shell-commands.md +0 -174
  73. package/jest.config.js +0 -19
  74. package/jest.manual.config.js +0 -19
  75. package/scripts/README.md +0 -119
  76. package/scripts/build-for-node.sh +0 -148
  77. package/scripts/cache-miss-debug.ts +0 -365
  78. package/scripts/check-isolated-deps.sh +0 -69
  79. package/scripts/check-model-pricing.ts +0 -509
  80. package/scripts/compare-openrouter-coverage.ts +0 -576
  81. package/scripts/migrate-usage-json.js +0 -147
  82. package/scripts/publish.sh +0 -86
  83. package/scripts/restore_keys.sh +0 -59
  84. package/scripts/test-repetition-hint.ts +0 -302
  85. package/scripts/unset_keys.sh +0 -60
  86. package/src/agents/base/base.ts +0 -1963
  87. package/src/agents/base/prompt.ts +0 -55
  88. package/src/agents/configurable/ConfigAgent.ts +0 -24
  89. package/src/agents/developer/developer.ts +0 -76
  90. package/src/agents/historyRollback.ts +0 -36
  91. package/src/agents/index.ts +0 -52
  92. package/src/agents/interface.ts +0 -11
  93. package/src/agents/patcher/codebase.md +0 -27
  94. package/src/agents/patcher/patcher.ts +0 -131
  95. package/src/agents/researcher/researcher.ts +0 -115
  96. package/src/agents/setup/setup.ts +0 -63
  97. package/src/agents/tools/addInternalTools.ts +0 -21
  98. package/src/agents/tools/agentCall.ts +0 -34
  99. package/src/agents/tools/aiClient.ts +0 -178
  100. package/src/agents/tools/askHuman.ts +0 -10
  101. package/src/agents/tools/callPlugin.ts +0 -10
  102. package/src/agents/tools/connectAgent.ts +0 -355
  103. package/src/agents/tools/embeddingSearch.ts +0 -6
  104. package/src/agents/tools/execCommand.ts +0 -162
  105. package/src/agents/tools/fileSearch.ts +0 -35
  106. package/src/agents/tools/finalAnswer.ts +0 -4
  107. package/src/agents/tools/googleSearch.ts +0 -243
  108. package/src/agents/tools/index.ts +0 -33
  109. package/src/agents/tools/language/definitions.ts +0 -105
  110. package/src/agents/tools/language/index.ts +0 -20
  111. package/src/agents/tools/lazy/definitions.ts +0 -72
  112. package/src/agents/tools/lazy/disableTools.ts +0 -16
  113. package/src/agents/tools/lazy/enableTools.ts +0 -16
  114. package/src/agents/tools/lazy/index.ts +0 -3
  115. package/src/agents/tools/lazy/listAvailableTools.ts +0 -17
  116. package/src/agents/tools/lintFile.ts +0 -19
  117. package/src/agents/tools/list.ts +0 -739
  118. package/src/agents/tools/loadImageAsBase64.ts +0 -83
  119. package/src/agents/tools/loadWebpage.ts +0 -19
  120. package/src/agents/tools/mcp/connectMcpServer.ts +0 -40
  121. package/src/agents/tools/mcp/definitions.ts +0 -67
  122. package/src/agents/tools/mcp/disconnectMcpServer.ts +0 -40
  123. package/src/agents/tools/mcp/index.ts +0 -3
  124. package/src/agents/tools/mcp/listAvailableMcpServers.ts +0 -28
  125. package/src/agents/tools/minimal/callTool.ts +0 -45
  126. package/src/agents/tools/minimal/definitions.ts +0 -50
  127. package/src/agents/tools/minimal/index.ts +0 -3
  128. package/src/agents/tools/minimal/inspectTools.ts +0 -27
  129. package/src/agents/tools/modifyFile.ts +0 -53
  130. package/src/agents/tools/observe.ts +0 -247
  131. package/src/agents/tools/patch.ts +0 -1287
  132. package/src/agents/tools/readBlocks.ts +0 -83
  133. package/src/agents/tools/readFile.ts +0 -105
  134. package/src/agents/tools/replyToParent.ts +0 -123
  135. package/src/agents/tools/runGenerate.ts +0 -210
  136. package/src/agents/tools/scanFile.ts +0 -16
  137. package/src/agents/tools/sendAgentMessage.ts +0 -139
  138. package/src/agents/tools/skills.ts +0 -79
  139. package/src/agents/tools/startAgentTask.ts +0 -393
  140. package/src/agents/tools/stringReplace.ts +0 -105
  141. package/src/agents/tools/textSearch.ts +0 -128
  142. package/src/agents/tools/types/fileblock.ts +0 -5
  143. package/src/agents/tools/visionTool.ts +0 -35
  144. package/src/agents/tools/waitForAgentCompleted.ts +0 -270
  145. package/src/agents/tools/writeFile.ts +0 -106
  146. package/src/agents/tools/ycmd/client.ts +0 -608
  147. package/src/agents/tools/ycmd/definitions.ts +0 -294
  148. package/src/agents/tools/ycmd/detection.ts +0 -211
  149. package/src/agents/tools/ycmd/index.ts +0 -11
  150. package/src/agents/tools/ycmd/installer.ts +0 -251
  151. package/src/agents/tools/ycmd/server.ts +0 -545
  152. package/src/agents/tools/ycmd/serverManager.ts +0 -316
  153. package/src/agents/tools/ycmd/tools/completion.ts +0 -113
  154. package/src/agents/tools/ycmd/tools/diagnostics.ts +0 -166
  155. package/src/agents/tools/ycmd/tools/getLocations.ts +0 -173
  156. package/src/agents/tools/ycmd/tools/goto.ts +0 -169
  157. package/src/agents/tools/ycmd/tools/refactor.ts +0 -204
  158. package/src/agents/tools/ycmd/tools/signature.ts +0 -174
  159. package/src/agents/tools/ycmd/tools/start.ts +0 -95
  160. package/src/agents/tools/ycmd/utils/pathUtils.ts +0 -59
  161. package/src/ai.ts +0 -306
  162. package/src/auth/browserLogin.ts +0 -406
  163. package/src/auth/environmentAuth.ts +0 -51
  164. package/src/auth/errors.ts +0 -6
  165. package/src/auth/jwtStore.ts +0 -70
  166. package/src/auth/keyAuth.ts +0 -142
  167. package/src/auth/keyManager.ts +0 -331
  168. package/src/auth/registerIdentity.ts +0 -67
  169. package/src/auth/spinner.ts +0 -23
  170. package/src/chat/CliChatService.ts +0 -438
  171. package/src/chat/modules/AgentModule.ts +0 -1664
  172. package/src/chat/modules/AskModule.ts +0 -98
  173. package/src/chat/modules/BaseChatModule.ts +0 -65
  174. package/src/chat/modules/ClipboardImageModule.ts +0 -136
  175. package/src/chat/modules/CustomCommandsModule.ts +0 -80
  176. package/src/chat/modules/InternalChatModule.ts +0 -216
  177. package/src/chat/modules/RemoteSyncModule.ts +0 -482
  178. package/src/chat/modules/RendererModule.ts +0 -139
  179. package/src/chat/modules/SearchModule.ts +0 -168
  180. package/src/chat/modules/SessionsModule.ts +0 -969
  181. package/src/chat/modules/SetupModule.ts +0 -185
  182. package/src/chat/modules/ShellCommandModule.ts +0 -98
  183. package/src/chat/modules/SystemModule.ts +0 -161
  184. package/src/chat/modules/ToolCommandModule.ts +0 -102
  185. package/src/chat/modules/VoiceModule.ts +0 -70
  186. package/src/chat/modules/index.ts +0 -8
  187. package/src/chat/renderer/CompactRenderer.ts +0 -229
  188. package/src/chat/renderer/ConsoleRenderer.ts +0 -160
  189. package/src/chat/renderer/FancyRenderer.ts +0 -440
  190. package/src/chat/renderer/PlainRenderer.ts +0 -218
  191. package/src/chat/renderer/index.ts +0 -6
  192. package/src/chat/renderer/loadRenderer.ts +0 -316
  193. package/src/chat/renderer/messagesToRenderEvents.ts +0 -96
  194. package/src/chat/renderer/types.ts +0 -99
  195. package/src/chat/types.ts +0 -146
  196. package/src/chat.ts +0 -140
  197. package/src/cli.ts +0 -180
  198. package/src/clients/anthropic.ts +0 -772
  199. package/src/clients/attribution.ts +0 -53
  200. package/src/clients/cerebras.ts +0 -10
  201. package/src/clients/contextLimits.ts +0 -263
  202. package/src/clients/copilot.ts +0 -23
  203. package/src/clients/deepseek.ts +0 -16
  204. package/src/clients/fireworks.ts +0 -71
  205. package/src/clients/gemini.ts +0 -1169
  206. package/src/clients/github.ts +0 -16
  207. package/src/clients/groq.ts +0 -15
  208. package/src/clients/http.ts +0 -719
  209. package/src/clients/index.ts +0 -1153
  210. package/src/clients/knowhow.ts +0 -130
  211. package/src/clients/knowhowMcp.ts +0 -118
  212. package/src/clients/llama.ts +0 -16
  213. package/src/clients/meta.ts +0 -27
  214. package/src/clients/mistral.ts +0 -16
  215. package/src/clients/nvidia.ts +0 -16
  216. package/src/clients/openai.ts +0 -1186
  217. package/src/clients/openrouter.ts +0 -24
  218. package/src/clients/pricing/anthropic.ts +0 -149
  219. package/src/clients/pricing/cerebras.ts +0 -11
  220. package/src/clients/pricing/copilot.ts +0 -60
  221. package/src/clients/pricing/deepseek.ts +0 -15
  222. package/src/clients/pricing/fireworks.ts +0 -182
  223. package/src/clients/pricing/github.ts +0 -69
  224. package/src/clients/pricing/google.ts +0 -385
  225. package/src/clients/pricing/groq.ts +0 -56
  226. package/src/clients/pricing/index.ts +0 -44
  227. package/src/clients/pricing/llama.ts +0 -18
  228. package/src/clients/pricing/meta.ts +0 -12
  229. package/src/clients/pricing/mistral.ts +0 -34
  230. package/src/clients/pricing/models.ts +0 -25
  231. package/src/clients/pricing/nvidia.ts +0 -102
  232. package/src/clients/pricing/openai.ts +0 -409
  233. package/src/clients/pricing/openrouter.ts +0 -36
  234. package/src/clients/pricing/qwen.ts +0 -80
  235. package/src/clients/pricing/types.ts +0 -125
  236. package/src/clients/pricing/xai.ts +0 -137
  237. package/src/clients/qwen.ts +0 -16
  238. package/src/clients/responseMetadata.ts +0 -221
  239. package/src/clients/types.ts +0 -531
  240. package/src/clients/withRetry.ts +0 -89
  241. package/src/clients/xai.ts +0 -693
  242. package/src/cloudWorker.ts +0 -394
  243. package/src/commands/agent.ts +0 -342
  244. package/src/commands/agents.ts +0 -1037
  245. package/src/commands/behaviors.ts +0 -47
  246. package/src/commands/convert.ts +0 -291
  247. package/src/commands/hash.ts +0 -179
  248. package/src/commands/mcp.ts +0 -743
  249. package/src/commands/misc.ts +0 -373
  250. package/src/commands/modules.ts +0 -704
  251. package/src/commands/processes.ts +0 -248
  252. package/src/commands/remote.ts +0 -77
  253. package/src/commands/replay.ts +0 -503
  254. package/src/commands/sandbox.ts +0 -566
  255. package/src/commands/services.ts +0 -168
  256. package/src/commands/skills.ts +0 -107
  257. package/src/commands/workers.ts +0 -168
  258. package/src/config.ts +0 -468
  259. package/src/conversion.ts +0 -69
  260. package/src/dataset/diffs/README.md +0 -12
  261. package/src/dataset/diffs/debug-errors.ts +0 -29
  262. package/src/dataset/diffs/debug.ts +0 -64
  263. package/src/dataset/diffs/generate.ts +0 -71
  264. package/src/dataset/diffs/jsonl.ts +0 -53
  265. package/src/dataset/diffs/test.ts +0 -194
  266. package/src/embeddings.ts +0 -494
  267. package/src/fileSync.ts +0 -369
  268. package/src/generate.ts +0 -529
  269. package/src/hashes.ts +0 -180
  270. package/src/index.ts +0 -261
  271. package/src/logger.ts +0 -197
  272. package/src/login.ts +0 -209
  273. package/src/microphone.ts +0 -141
  274. package/src/migrations.ts +0 -151
  275. package/src/plugins/AgentsMdPlugin.ts +0 -118
  276. package/src/plugins/GitPlugin.ts +0 -598
  277. package/src/plugins/LinterPlugin.ts +0 -214
  278. package/src/plugins/PluginBase.ts +0 -70
  279. package/src/plugins/SkillsPlugin.ts +0 -37
  280. package/src/plugins/embedding.ts +0 -82
  281. package/src/plugins/exec.ts +0 -70
  282. package/src/plugins/language.ts +0 -290
  283. package/src/plugins/plugins.ts +0 -175
  284. package/src/plugins/tmux.ts +0 -132
  285. package/src/plugins/types.ts +0 -36
  286. package/src/plugins/url.ts +0 -101
  287. package/src/plugins/vim.ts +0 -89
  288. package/src/processes/ProcessManager.ts +0 -96
  289. package/src/processes/managedProcessShim.ts +0 -138
  290. package/src/processors/Base64ImageDetector.ts +0 -502
  291. package/src/processors/CustomVariables.ts +0 -693
  292. package/src/processors/GemmaToolProcessor.ts +0 -163
  293. package/src/processors/HarmonyToolProcessor.ts +0 -264
  294. package/src/processors/JsonCompressor.ts +0 -510
  295. package/src/processors/MinimalToolsMessageProcessor.ts +0 -113
  296. package/src/processors/TokenCompressor.ts +0 -620
  297. package/src/processors/ToolResponseCache.ts +0 -322
  298. package/src/processors/XmlToolCallProcessor.ts +0 -533
  299. package/src/processors/index.ts +0 -14
  300. package/src/processors/tools/boundedToolResponse.ts +0 -49
  301. package/src/processors/tools/grepToolResponse.ts +0 -230
  302. package/src/processors/tools/index.ts +0 -23
  303. package/src/processors/tools/jqToolResponse.ts +0 -159
  304. package/src/processors/tools/listStoredToolResponses.ts +0 -124
  305. package/src/processors/tools/tailToolResponse.ts +0 -148
  306. package/src/prompts/BasicCodeDocumenter.ts +0 -1
  307. package/src/prompts/BasicProjectDocumenter.ts +0 -1
  308. package/src/prompts/EmbeddingSeachHelper.ts +0 -1
  309. package/src/prompts/KnowhowConfigExamples.ts +0 -376
  310. package/src/prompts/index.ts +0 -9
  311. package/src/remotes.ts +0 -110
  312. package/src/server/index.ts +0 -16
  313. package/src/services/AgentService.ts +0 -134
  314. package/src/services/AgentSyncFs.ts +0 -775
  315. package/src/services/AgentSyncKnowhowWeb.ts +0 -389
  316. package/src/services/BehaviorsService.ts +0 -466
  317. package/src/services/DockerService.ts +0 -511
  318. package/src/services/EmbeddingService.ts +0 -427
  319. package/src/services/EmbeddingsService.ts +0 -73
  320. package/src/services/EventService.ts +0 -279
  321. package/src/services/ExtensionsService.ts +0 -25
  322. package/src/services/KnowhowClient.ts +0 -928
  323. package/src/services/LazyToolsService.ts +0 -210
  324. package/src/services/Mcp.ts +0 -727
  325. package/src/services/McpServer.ts +0 -155
  326. package/src/services/McpWebsocketTransport.ts +0 -87
  327. package/src/services/MediaProcessorService.ts +0 -669
  328. package/src/services/MessageProcessor.ts +0 -114
  329. package/src/services/MinimalToolsService.ts +0 -177
  330. package/src/services/RuntimeReloadService.ts +0 -31
  331. package/src/services/S3.ts +0 -61
  332. package/src/services/SessionManager.ts +0 -358
  333. package/src/services/SkillsService.ts +0 -822
  334. package/src/services/SyncedAgentWatcher.ts +0 -124
  335. package/src/services/SyncerService.ts +0 -191
  336. package/src/services/TaskRegistry.ts +0 -110
  337. package/src/services/Tools.ts +0 -580
  338. package/src/services/TracingService.ts +0 -116
  339. package/src/services/conversion/ConversionService.ts +0 -757
  340. package/src/services/conversion/index.ts +0 -2
  341. package/src/services/conversion/types.ts +0 -87
  342. package/src/services/flags.ts +0 -51
  343. package/src/services/index.ts +0 -117
  344. package/src/services/modules/computerUse.ts +0 -218
  345. package/src/services/modules/index.ts +0 -314
  346. package/src/services/modules/types.ts +0 -109
  347. package/src/services/types.ts +0 -60
  348. package/src/services/watchers/FsSyncer.ts +0 -199
  349. package/src/services/watchers/RemoteSyncer.ts +0 -196
  350. package/src/services/watchers/index.ts +0 -2
  351. package/src/tunnel.ts +0 -243
  352. package/src/types.ts +0 -282
  353. package/src/util/Trace.ts +0 -236
  354. package/src/utils/InputQueueManager.ts +0 -493
  355. package/src/utils/errors.ts +0 -0
  356. package/src/utils/http.ts +0 -150
  357. package/src/utils/index.ts +0 -111
  358. package/src/worker.ts +0 -696
  359. package/src/workerRegistry.ts +0 -152
  360. package/src/workers/auth/PasskeySetup.ts +0 -181
  361. package/src/workers/auth/WorkerPasskeyAuth.ts +0 -190
  362. package/src/workers/auth/WsMiddleware.ts +0 -99
  363. package/src/workers/auth/authMiddleware.ts +0 -104
  364. package/src/workers/auth/types.ts +0 -70
  365. package/src/workers/tools/getChallenge.ts +0 -33
  366. package/src/workers/tools/index.ts +0 -20
  367. package/src/workers/tools/listAllowedPorts.ts +0 -30
  368. package/src/workers/tools/lock.ts +0 -31
  369. package/src/workers/tools/reloadConfig.ts +0 -84
  370. package/src/workers/tools/unlock.ts +0 -116
  371. package/tests/XmlToolCallProcessor.test.ts +0 -468
  372. package/tests/agents/interrupt.test.ts +0 -200
  373. package/tests/agents/observe-base.test.ts +0 -183
  374. package/tests/agents/tools/connectAgent.test.ts +0 -138
  375. package/tests/agents/tools/observe.test.ts +0 -179
  376. package/tests/agents/tools/readFile.test.ts +0 -88
  377. package/tests/agents/tools/replyToParent.test.ts +0 -125
  378. package/tests/agents/tools/sendAgentMessage.test.ts +0 -99
  379. package/tests/agents/tools/waitForAgentCompleted.test.ts +0 -147
  380. package/tests/chat/detach-attach-rendering.test.ts +0 -315
  381. package/tests/clients/AIClient.test.ts +0 -668
  382. package/tests/clients/anthropic.test.ts +0 -202
  383. package/tests/clients/contextLimits.test.ts +0 -97
  384. package/tests/clients/fireworks.test.ts +0 -65
  385. package/tests/clients/openai.images.test.ts +0 -105
  386. package/tests/clients/pricing.test.ts +0 -206
  387. package/tests/clients/reasoningEffort.test.ts +0 -140
  388. package/tests/compressor/bigstring.test.ts +0 -450
  389. package/tests/compressor/bigstring.txt +0 -1
  390. package/tests/compressor/githubjson.txt +0 -1
  391. package/tests/compressor/toolResponseCache.test.ts +0 -304
  392. package/tests/compressor/usageBase64.json +0 -159
  393. package/tests/compressor/usageBase64.test.ts +0 -175
  394. package/tests/fixtures/fake-secret.txt +0 -1
  395. package/tests/manual/agent-events/run-test.ts +0 -203
  396. package/tests/manual/browser-login/README.md +0 -189
  397. package/tests/manual/browser-login/test_browser_login_basic.ts +0 -115
  398. package/tests/manual/browser-login/test_cli_integration.ts +0 -169
  399. package/tests/manual/browser-login/test_cross_platform_browser.ts +0 -186
  400. package/tests/manual/browser-login/test_error_scenarios.ts +0 -223
  401. package/tests/manual/cli/no-env.sh +0 -274
  402. package/tests/manual/clients/completions.json +0 -1151
  403. package/tests/manual/clients/completions.test.ts +0 -198
  404. package/tests/manual/file-edits/figma.test.ts +0 -3
  405. package/tests/manual/file-edits/fileblocks/readwrite.test.ts +0 -100
  406. package/tests/manual/file-edits/patching/input.txt +0 -145
  407. package/tests/manual/file-edits/patching/output.txt +0 -145
  408. package/tests/manual/file-edits/patching/patch.txt +0 -15
  409. package/tests/manual/file-edits/patching/unseen.txt +0 -80
  410. package/tests/manual/file-edits/patching.test.ts +0 -139
  411. package/tests/manual/modalities/README.md +0 -157
  412. package/tests/manual/modalities/google.modalities.test.ts +0 -335
  413. package/tests/manual/modalities/openai.modalities.test.ts +0 -329
  414. package/tests/manual/modalities/streaming.test.ts +0 -260
  415. package/tests/manual/modalities/xai.modalities.test.ts +0 -294
  416. package/tests/manual/test-concurrent-ask.ts +0 -43
  417. package/tests/manual/ycmd/debug_diagnostics_test.ts +0 -127
  418. package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +0 -26
  419. package/tests/manual/ycmd/fixtures/file_change_test.ts +0 -17
  420. package/tests/manual/ycmd/minimal_advanced_test.ts +0 -108
  421. package/tests/manual/ycmd/simple_diagnostics_test.ts +0 -61
  422. package/tests/manual/ycmd/simple_test.ts +0 -74
  423. package/tests/manual/ycmd/test-typescript-sample.ts +0 -34
  424. package/tests/manual/ycmd/test_advanced_features.ts +0 -407
  425. package/tests/manual/ycmd/test_advanced_with_tools.ts +0 -320
  426. package/tests/manual/ycmd/test_comprehensive_typescript.ts +0 -179
  427. package/tests/manual/ycmd/test_diagnostics_file_changes.ts +0 -249
  428. package/tests/manual/ycmd/test_diagnostics_fix.ts +0 -99
  429. package/tests/manual/ycmd/test_diagnostics_simple.ts +0 -100
  430. package/tests/manual/ycmd/test_diagnostics_timing.ts +0 -120
  431. package/tests/manual/ycmd/test_discover_commands.ts +0 -310
  432. package/tests/manual/ycmd/test_endpoints.ts +0 -115
  433. package/tests/manual/ycmd/test_final_comprehensive.ts +0 -218
  434. package/tests/manual/ycmd/test_final_validation.ts +0 -150
  435. package/tests/manual/ycmd/test_implementation.js +0 -42
  436. package/tests/manual/ycmd/test_individual_ycmd_tool.ts +0 -39
  437. package/tests/manual/ycmd/test_server_manager.ts +0 -52
  438. package/tests/manual/ycmd/test_simple_debug.ts +0 -86
  439. package/tests/manual/ycmd/test_tsserver_workflow.js +0 -83
  440. package/tests/manual/ycmd/test_tsserver_workflow.ts +0 -122
  441. package/tests/manual/ycmd/test_typescript_simple.ts +0 -48
  442. package/tests/manual/ycmd/test_typescript_ycmd.ts +0 -105
  443. package/tests/manual/ycmd/test_workspace_config.ts +0 -90
  444. package/tests/manual/ycmd/test_ycmd_auto_start.ts +0 -137
  445. package/tests/manual/ycmd/test_ycmd_comprehensive.ts +0 -73
  446. package/tests/manual/ycmd/test_ycmd_connection.py +0 -10
  447. package/tests/manual/ycmd/test_ycmd_direct.ts +0 -142
  448. package/tests/manual/ycmd/test_ycmd_experiment.ts +0 -48
  449. package/tests/manual/ycmd/test_ycmd_final.ts +0 -200
  450. package/tests/manual/ycmd/test_ycmd_fixed.py +0 -18
  451. package/tests/manual/ycmd/test_ycmd_integration.ts +0 -112
  452. package/tests/manual/ycmd/test_ycmd_simple.ts +0 -45
  453. package/tests/manual/ycmd/test_ycmd_usage.py +0 -27
  454. package/tests/manual/ycmd/working_simple_test.ts +0 -134
  455. package/tests/patching/corrupted.test.ts +0 -78
  456. package/tests/patching/fixtures/transcript-mangles/agent-sync-fs-nested-catch.json +0 -9
  457. package/tests/patching/fixtures/transcript-mangles/automation-functions-crossed.json +0 -9
  458. package/tests/patching/fixtures/transcript-mangles/fruit-ninja-confirmed-retirement.json +0 -8
  459. package/tests/patching/imports.patch.txt +0 -11
  460. package/tests/patching/imports.test.ts +0 -43
  461. package/tests/patching/imports.txt +0 -11
  462. package/tests/patching/interface.patch.txt +0 -15
  463. package/tests/patching/interface.txt +0 -7
  464. package/tests/patching/patchFileOutput.test.ts +0 -328
  465. package/tests/patching/regression-2026.test.ts +0 -752
  466. package/tests/patching/transcriptMangleRegression.test.ts +0 -125
  467. package/tests/plugins/language/languagePlugin-content-triggers.test.ts +0 -346
  468. package/tests/plugins/language/languagePlugin-integration.test.ts +0 -471
  469. package/tests/plugins/language/languagePlugin.test.ts +0 -385
  470. package/tests/processes/managedProcessShim.test.ts +0 -59
  471. package/tests/processors/Base64ImageDetector.test.ts +0 -979
  472. package/tests/processors/CustomVariables.test.ts +0 -981
  473. package/tests/processors/CustomVariablesBenchmark.test.ts +0 -237
  474. package/tests/processors/HarmonyToolProcessor.test.ts +0 -490
  475. package/tests/processors/TokenCompressor.test.ts +0 -674
  476. package/tests/processors/ToolResponseCache.test.ts +0 -864
  477. package/tests/processors/tools/boundedRetrievalTools.test.ts +0 -68
  478. package/tests/processors/tools/grepToolResponse.test.ts +0 -159
  479. package/tests/services/ConversionService.test.ts +0 -154
  480. package/tests/services/DockerService.test.ts +0 -24
  481. package/tests/services/Tools.test.ts +0 -1738
  482. package/tests/services/ToolsService.setFunction.test.ts +0 -68
  483. package/tests/services/WorkerReloadConfig.test.ts +0 -141
  484. package/tests/test.spec.ts +0 -163
  485. package/tests/unit/InputQueueManager.test.ts +0 -174
  486. package/tests/unit/McpWebsocketTransport.test.ts +0 -56
  487. package/tests/unit/agents/historyRollback.test.ts +0 -53
  488. package/tests/unit/agents/tools/loadImageAsBase64.test.ts +0 -44
  489. package/tests/unit/auth/jwtStore.test.ts +0 -55
  490. package/tests/unit/auth/keyAuth.test.ts +0 -152
  491. package/tests/unit/auth/keyManager.test.ts +0 -130
  492. package/tests/unit/auth/registerIdentity.test.ts +0 -99
  493. package/tests/unit/chat/ToolCommandModule.test.ts +0 -71
  494. package/tests/unit/chat/historyCommandArgs.test.ts +0 -37
  495. package/tests/unit/clients/AIClient.test.ts +0 -454
  496. package/tests/unit/clients/anthropic.responseMetadata.test.ts +0 -81
  497. package/tests/unit/clients/attribution.test.ts +0 -185
  498. package/tests/unit/clients/http.responseMetadata.test.ts +0 -86
  499. package/tests/unit/clients/openai.responseMetadata.test.ts +0 -90
  500. package/tests/unit/clients/responseMetadata.test.ts +0 -123
  501. package/tests/unit/clients/withRetry.test.ts +0 -319
  502. package/tests/unit/commands/agents.test.ts +0 -111
  503. package/tests/unit/commands/github-credentials.test.ts +0 -210
  504. package/tests/unit/commands/misc.test.ts +0 -85
  505. package/tests/unit/commands/remote.test.ts +0 -79
  506. package/tests/unit/commands/sandbox.test.ts +0 -350
  507. package/tests/unit/hashes.test.ts +0 -23
  508. package/tests/unit/input-queue.test.ts +0 -80
  509. package/tests/unit/login.test.ts +0 -218
  510. package/tests/unit/modules/moduleLoading.test.ts +0 -305
  511. package/tests/unit/plugins/pluginLoading.test.ts +0 -97
  512. package/tests/unit/services/AgentSyncKnowhowWeb.test.ts +0 -38
  513. package/tests/unit/services/KnowhowClient.test.ts +0 -84
  514. package/tests/unit/services/LazyToolsService.test.ts +0 -53
  515. package/tests/unit/services/Mcp.test.ts +0 -56
  516. package/tests/unit/services/MinimalToolsService.test.ts +0 -424
  517. package/tests/unit/services/RuntimeReloadService.test.ts +0 -29
  518. package/tests/unit/services/SessionManager.test.ts +0 -43
  519. package/tests/unit/services/SyncedAgentWatcher.test.ts +0 -89
  520. package/tests/unit/services/SyncerService.test.ts +0 -45
  521. package/tests/unit/tunnel.test.ts +0 -51
  522. package/tests/unit/util/Trace.test.ts +0 -119
  523. package/tests/unit/utils/http.test.ts +0 -43
  524. package/ts_build/tests/XmlToolCallProcessor.test.d.ts +0 -1
  525. package/ts_build/tests/XmlToolCallProcessor.test.js +0 -376
  526. package/ts_build/tests/XmlToolCallProcessor.test.js.map +0 -1
  527. package/ts_build/tests/agents/interrupt.test.d.ts +0 -14
  528. package/ts_build/tests/agents/interrupt.test.js +0 -136
  529. package/ts_build/tests/agents/interrupt.test.js.map +0 -1
  530. package/ts_build/tests/agents/observe-base.test.d.ts +0 -1
  531. package/ts_build/tests/agents/observe-base.test.js +0 -149
  532. package/ts_build/tests/agents/observe-base.test.js.map +0 -1
  533. package/ts_build/tests/agents/tools/connectAgent.test.d.ts +0 -1
  534. package/ts_build/tests/agents/tools/connectAgent.test.js +0 -142
  535. package/ts_build/tests/agents/tools/connectAgent.test.js.map +0 -1
  536. package/ts_build/tests/agents/tools/observe.test.d.ts +0 -1
  537. package/ts_build/tests/agents/tools/observe.test.js +0 -148
  538. package/ts_build/tests/agents/tools/observe.test.js.map +0 -1
  539. package/ts_build/tests/agents/tools/readFile.test.d.ts +0 -1
  540. package/ts_build/tests/agents/tools/readFile.test.js +0 -90
  541. package/ts_build/tests/agents/tools/readFile.test.js.map +0 -1
  542. package/ts_build/tests/agents/tools/replyToParent.test.d.ts +0 -1
  543. package/ts_build/tests/agents/tools/replyToParent.test.js +0 -116
  544. package/ts_build/tests/agents/tools/replyToParent.test.js.map +0 -1
  545. package/ts_build/tests/agents/tools/sendAgentMessage.test.d.ts +0 -1
  546. package/ts_build/tests/agents/tools/sendAgentMessage.test.js +0 -112
  547. package/ts_build/tests/agents/tools/sendAgentMessage.test.js.map +0 -1
  548. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.d.ts +0 -1
  549. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js +0 -147
  550. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js.map +0 -1
  551. package/ts_build/tests/chat/detach-attach-rendering.test.d.ts +0 -1
  552. package/ts_build/tests/chat/detach-attach-rendering.test.js +0 -168
  553. package/ts_build/tests/chat/detach-attach-rendering.test.js.map +0 -1
  554. package/ts_build/tests/clients/AIClient.test.d.ts +0 -1
  555. package/ts_build/tests/clients/AIClient.test.js +0 -483
  556. package/ts_build/tests/clients/AIClient.test.js.map +0 -1
  557. package/ts_build/tests/clients/anthropic.test.d.ts +0 -1
  558. package/ts_build/tests/clients/anthropic.test.js +0 -159
  559. package/ts_build/tests/clients/anthropic.test.js.map +0 -1
  560. package/ts_build/tests/clients/contextLimits.test.d.ts +0 -1
  561. package/ts_build/tests/clients/contextLimits.test.js +0 -69
  562. package/ts_build/tests/clients/contextLimits.test.js.map +0 -1
  563. package/ts_build/tests/clients/fireworks.test.d.ts +0 -1
  564. package/ts_build/tests/clients/fireworks.test.js +0 -65
  565. package/ts_build/tests/clients/fireworks.test.js.map +0 -1
  566. package/ts_build/tests/clients/openai.images.test.d.ts +0 -1
  567. package/ts_build/tests/clients/openai.images.test.js +0 -94
  568. package/ts_build/tests/clients/openai.images.test.js.map +0 -1
  569. package/ts_build/tests/clients/pricing.test.d.ts +0 -1
  570. package/ts_build/tests/clients/pricing.test.js +0 -124
  571. package/ts_build/tests/clients/pricing.test.js.map +0 -1
  572. package/ts_build/tests/clients/reasoningEffort.test.d.ts +0 -1
  573. package/ts_build/tests/clients/reasoningEffort.test.js +0 -116
  574. package/ts_build/tests/clients/reasoningEffort.test.js.map +0 -1
  575. package/ts_build/tests/compressor/bigstring.test.d.ts +0 -1
  576. package/ts_build/tests/compressor/bigstring.test.js +0 -275
  577. package/ts_build/tests/compressor/bigstring.test.js.map +0 -1
  578. package/ts_build/tests/compressor/toolResponseCache.test.d.ts +0 -1
  579. package/ts_build/tests/compressor/toolResponseCache.test.js +0 -250
  580. package/ts_build/tests/compressor/toolResponseCache.test.js.map +0 -1
  581. package/ts_build/tests/compressor/usageBase64.test.d.ts +0 -1
  582. package/ts_build/tests/compressor/usageBase64.test.js +0 -109
  583. package/ts_build/tests/compressor/usageBase64.test.js.map +0 -1
  584. package/ts_build/tests/manual/agent-events/run-test.d.ts +0 -2
  585. package/ts_build/tests/manual/agent-events/run-test.js +0 -148
  586. package/ts_build/tests/manual/agent-events/run-test.js.map +0 -1
  587. package/ts_build/tests/manual/browser-login/test_browser_login_basic.d.ts +0 -2
  588. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js +0 -118
  589. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js.map +0 -1
  590. package/ts_build/tests/manual/browser-login/test_cli_integration.d.ts +0 -2
  591. package/ts_build/tests/manual/browser-login/test_cli_integration.js +0 -163
  592. package/ts_build/tests/manual/browser-login/test_cli_integration.js.map +0 -1
  593. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.d.ts +0 -2
  594. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js +0 -169
  595. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js.map +0 -1
  596. package/ts_build/tests/manual/browser-login/test_error_scenarios.d.ts +0 -2
  597. package/ts_build/tests/manual/browser-login/test_error_scenarios.js +0 -207
  598. package/ts_build/tests/manual/browser-login/test_error_scenarios.js.map +0 -1
  599. package/ts_build/tests/manual/clients/completions.test.d.ts +0 -1
  600. package/ts_build/tests/manual/clients/completions.test.js +0 -151
  601. package/ts_build/tests/manual/clients/completions.test.js.map +0 -1
  602. package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -0
  603. package/ts_build/tests/manual/file-edits/figma.test.js +0 -2
  604. package/ts_build/tests/manual/file-edits/figma.test.js.map +0 -1
  605. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.d.ts +0 -1
  606. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js +0 -110
  607. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js.map +0 -1
  608. package/ts_build/tests/manual/file-edits/patching.test.d.ts +0 -1
  609. package/ts_build/tests/manual/file-edits/patching.test.js +0 -129
  610. package/ts_build/tests/manual/file-edits/patching.test.js.map +0 -1
  611. package/ts_build/tests/manual/modalities/google.modalities.test.d.ts +0 -1
  612. package/ts_build/tests/manual/modalities/google.modalities.test.js +0 -262
  613. package/ts_build/tests/manual/modalities/google.modalities.test.js.map +0 -1
  614. package/ts_build/tests/manual/modalities/openai.modalities.test.d.ts +0 -1
  615. package/ts_build/tests/manual/modalities/openai.modalities.test.js +0 -262
  616. package/ts_build/tests/manual/modalities/openai.modalities.test.js.map +0 -1
  617. package/ts_build/tests/manual/modalities/streaming.test.d.ts +0 -1
  618. package/ts_build/tests/manual/modalities/streaming.test.js +0 -216
  619. package/ts_build/tests/manual/modalities/streaming.test.js.map +0 -1
  620. package/ts_build/tests/manual/modalities/xai.modalities.test.d.ts +0 -1
  621. package/ts_build/tests/manual/modalities/xai.modalities.test.js +0 -219
  622. package/ts_build/tests/manual/modalities/xai.modalities.test.js.map +0 -1
  623. package/ts_build/tests/manual/test-concurrent-ask.d.ts +0 -1
  624. package/ts_build/tests/manual/test-concurrent-ask.js +0 -22
  625. package/ts_build/tests/manual/test-concurrent-ask.js.map +0 -1
  626. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +0 -1
  627. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +0 -124
  628. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +0 -1
  629. package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +0 -2
  630. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +0 -114
  631. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +0 -1
  632. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +0 -1
  633. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +0 -84
  634. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +0 -1
  635. package/ts_build/tests/manual/ycmd/simple_test.d.ts +0 -2
  636. package/ts_build/tests/manual/ycmd/simple_test.js +0 -92
  637. package/ts_build/tests/manual/ycmd/simple_test.js.map +0 -1
  638. package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +0 -14
  639. package/ts_build/tests/manual/ycmd/test-typescript-sample.js +0 -20
  640. package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +0 -1
  641. package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +0 -2
  642. package/ts_build/tests/manual/ycmd/test_advanced_features.js +0 -306
  643. package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +0 -1
  644. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +0 -3
  645. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +0 -271
  646. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +0 -1
  647. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +0 -2
  648. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +0 -196
  649. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +0 -1
  650. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +0 -1
  651. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +0 -184
  652. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +0 -1
  653. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +0 -2
  654. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +0 -116
  655. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +0 -1
  656. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +0 -1
  657. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +0 -114
  658. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +0 -1
  659. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +0 -1
  660. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +0 -129
  661. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +0 -1
  662. package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +0 -2
  663. package/ts_build/tests/manual/ycmd/test_discover_commands.js +0 -252
  664. package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +0 -1
  665. package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +0 -2
  666. package/ts_build/tests/manual/ycmd/test_endpoints.js +0 -130
  667. package/ts_build/tests/manual/ycmd/test_endpoints.js.map +0 -1
  668. package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +0 -2
  669. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +0 -231
  670. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +0 -1
  671. package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +0 -2
  672. package/ts_build/tests/manual/ycmd/test_final_validation.js +0 -170
  673. package/ts_build/tests/manual/ycmd/test_final_validation.js.map +0 -1
  674. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +0 -2
  675. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +0 -37
  676. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +0 -1
  677. package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +0 -1
  678. package/ts_build/tests/manual/ycmd/test_server_manager.js +0 -38
  679. package/ts_build/tests/manual/ycmd/test_server_manager.js.map +0 -1
  680. package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +0 -2
  681. package/ts_build/tests/manual/ycmd/test_simple_debug.js +0 -109
  682. package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +0 -1
  683. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +0 -1
  684. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +0 -138
  685. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +0 -1
  686. package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +0 -1
  687. package/ts_build/tests/manual/ycmd/test_typescript_simple.js +0 -76
  688. package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +0 -1
  689. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +0 -1
  690. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +0 -115
  691. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +0 -1
  692. package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +0 -1
  693. package/ts_build/tests/manual/ycmd/test_workspace_config.js +0 -99
  694. package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +0 -1
  695. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +0 -2
  696. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +0 -140
  697. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +0 -1
  698. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +0 -1
  699. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +0 -93
  700. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +0 -1
  701. package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +0 -2
  702. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +0 -159
  703. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +0 -1
  704. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +0 -15
  705. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +0 -68
  706. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +0 -1
  707. package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +0 -2
  708. package/ts_build/tests/manual/ycmd/test_ycmd_final.js +0 -205
  709. package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +0 -1
  710. package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +0 -3
  711. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +0 -119
  712. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +0 -1
  713. package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +0 -2
  714. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +0 -36
  715. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +0 -1
  716. package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +0 -2
  717. package/ts_build/tests/manual/ycmd/working_simple_test.js +0 -144
  718. package/ts_build/tests/manual/ycmd/working_simple_test.js.map +0 -1
  719. package/ts_build/tests/patching/corrupted.test.d.ts +0 -1
  720. package/ts_build/tests/patching/corrupted.test.js +0 -53
  721. package/ts_build/tests/patching/corrupted.test.js.map +0 -1
  722. package/ts_build/tests/patching/imports.test.d.ts +0 -1
  723. package/ts_build/tests/patching/imports.test.js +0 -71
  724. package/ts_build/tests/patching/imports.test.js.map +0 -1
  725. package/ts_build/tests/patching/patchFileOutput.test.d.ts +0 -1
  726. package/ts_build/tests/patching/patchFileOutput.test.js +0 -269
  727. package/ts_build/tests/patching/patchFileOutput.test.js.map +0 -1
  728. package/ts_build/tests/patching/regression-2026.test.d.ts +0 -1
  729. package/ts_build/tests/patching/regression-2026.test.js +0 -528
  730. package/ts_build/tests/patching/regression-2026.test.js.map +0 -1
  731. package/ts_build/tests/patching/transcriptMangleRegression.test.d.ts +0 -1
  732. package/ts_build/tests/patching/transcriptMangleRegression.test.js +0 -104
  733. package/ts_build/tests/patching/transcriptMangleRegression.test.js.map +0 -1
  734. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.d.ts +0 -1
  735. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +0 -294
  736. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +0 -1
  737. package/ts_build/tests/plugins/language/languagePlugin-integration.test.d.ts +0 -1
  738. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +0 -343
  739. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +0 -1
  740. package/ts_build/tests/plugins/language/languagePlugin.test.d.ts +0 -1
  741. package/ts_build/tests/plugins/language/languagePlugin.test.js +0 -315
  742. package/ts_build/tests/plugins/language/languagePlugin.test.js.map +0 -1
  743. package/ts_build/tests/processes/managedProcessShim.test.d.ts +0 -1
  744. package/ts_build/tests/processes/managedProcessShim.test.js +0 -92
  745. package/ts_build/tests/processes/managedProcessShim.test.js.map +0 -1
  746. package/ts_build/tests/processors/Base64ImageDetector.test.d.ts +0 -1
  747. package/ts_build/tests/processors/Base64ImageDetector.test.js +0 -792
  748. package/ts_build/tests/processors/Base64ImageDetector.test.js.map +0 -1
  749. package/ts_build/tests/processors/CustomVariables.test.d.ts +0 -1
  750. package/ts_build/tests/processors/CustomVariables.test.js +0 -764
  751. package/ts_build/tests/processors/CustomVariables.test.js.map +0 -1
  752. package/ts_build/tests/processors/CustomVariablesBenchmark.test.d.ts +0 -1
  753. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js +0 -179
  754. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js.map +0 -1
  755. package/ts_build/tests/processors/HarmonyToolProcessor.test.d.ts +0 -1
  756. package/ts_build/tests/processors/HarmonyToolProcessor.test.js +0 -382
  757. package/ts_build/tests/processors/HarmonyToolProcessor.test.js.map +0 -1
  758. package/ts_build/tests/processors/TokenCompressor.test.d.ts +0 -1
  759. package/ts_build/tests/processors/TokenCompressor.test.js +0 -473
  760. package/ts_build/tests/processors/TokenCompressor.test.js.map +0 -1
  761. package/ts_build/tests/processors/ToolResponseCache.test.d.ts +0 -1
  762. package/ts_build/tests/processors/ToolResponseCache.test.js +0 -657
  763. package/ts_build/tests/processors/ToolResponseCache.test.js.map +0 -1
  764. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.d.ts +0 -1
  765. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js +0 -57
  766. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js.map +0 -1
  767. package/ts_build/tests/processors/tools/grepToolResponse.test.d.ts +0 -1
  768. package/ts_build/tests/processors/tools/grepToolResponse.test.js +0 -77
  769. package/ts_build/tests/processors/tools/grepToolResponse.test.js.map +0 -1
  770. package/ts_build/tests/services/ConversionService.test.d.ts +0 -1
  771. package/ts_build/tests/services/ConversionService.test.js +0 -154
  772. package/ts_build/tests/services/ConversionService.test.js.map +0 -1
  773. package/ts_build/tests/services/DockerService.test.d.ts +0 -1
  774. package/ts_build/tests/services/DockerService.test.js +0 -22
  775. package/ts_build/tests/services/DockerService.test.js.map +0 -1
  776. package/ts_build/tests/services/Tools.test.d.ts +0 -1
  777. package/ts_build/tests/services/Tools.test.js +0 -1365
  778. package/ts_build/tests/services/Tools.test.js.map +0 -1
  779. package/ts_build/tests/services/ToolsService.setFunction.test.d.ts +0 -1
  780. package/ts_build/tests/services/ToolsService.setFunction.test.js +0 -51
  781. package/ts_build/tests/services/ToolsService.setFunction.test.js.map +0 -1
  782. package/ts_build/tests/services/WorkerReloadConfig.test.d.ts +0 -1
  783. package/ts_build/tests/services/WorkerReloadConfig.test.js +0 -86
  784. package/ts_build/tests/services/WorkerReloadConfig.test.js.map +0 -1
  785. package/ts_build/tests/test.spec.d.ts +0 -1
  786. package/ts_build/tests/test.spec.js +0 -139
  787. package/ts_build/tests/test.spec.js.map +0 -1
  788. package/ts_build/tests/unit/InputQueueManager.test.d.ts +0 -1
  789. package/ts_build/tests/unit/InputQueueManager.test.js +0 -104
  790. package/ts_build/tests/unit/InputQueueManager.test.js.map +0 -1
  791. package/ts_build/tests/unit/McpWebsocketTransport.test.d.ts +0 -1
  792. package/ts_build/tests/unit/McpWebsocketTransport.test.js +0 -47
  793. package/ts_build/tests/unit/McpWebsocketTransport.test.js.map +0 -1
  794. package/ts_build/tests/unit/agents/historyRollback.test.d.ts +0 -1
  795. package/ts_build/tests/unit/agents/historyRollback.test.js +0 -42
  796. package/ts_build/tests/unit/agents/historyRollback.test.js.map +0 -1
  797. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.d.ts +0 -1
  798. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js +0 -67
  799. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js.map +0 -1
  800. package/ts_build/tests/unit/auth/jwtStore.test.d.ts +0 -1
  801. package/ts_build/tests/unit/auth/jwtStore.test.js +0 -46
  802. package/ts_build/tests/unit/auth/jwtStore.test.js.map +0 -1
  803. package/ts_build/tests/unit/auth/keyAuth.test.d.ts +0 -1
  804. package/ts_build/tests/unit/auth/keyAuth.test.js +0 -118
  805. package/ts_build/tests/unit/auth/keyAuth.test.js.map +0 -1
  806. package/ts_build/tests/unit/auth/keyManager.test.d.ts +0 -1
  807. package/ts_build/tests/unit/auth/keyManager.test.js +0 -96
  808. package/ts_build/tests/unit/auth/keyManager.test.js.map +0 -1
  809. package/ts_build/tests/unit/auth/registerIdentity.test.d.ts +0 -1
  810. package/ts_build/tests/unit/auth/registerIdentity.test.js +0 -92
  811. package/ts_build/tests/unit/auth/registerIdentity.test.js.map +0 -1
  812. package/ts_build/tests/unit/chat/ToolCommandModule.test.d.ts +0 -1
  813. package/ts_build/tests/unit/chat/ToolCommandModule.test.js +0 -61
  814. package/ts_build/tests/unit/chat/ToolCommandModule.test.js.map +0 -1
  815. package/ts_build/tests/unit/chat/historyCommandArgs.test.d.ts +0 -1
  816. package/ts_build/tests/unit/chat/historyCommandArgs.test.js +0 -29
  817. package/ts_build/tests/unit/chat/historyCommandArgs.test.js.map +0 -1
  818. package/ts_build/tests/unit/clients/AIClient.test.d.ts +0 -1
  819. package/ts_build/tests/unit/clients/AIClient.test.js +0 -342
  820. package/ts_build/tests/unit/clients/AIClient.test.js.map +0 -1
  821. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.d.ts +0 -1
  822. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js +0 -77
  823. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js.map +0 -1
  824. package/ts_build/tests/unit/clients/attribution.test.d.ts +0 -1
  825. package/ts_build/tests/unit/clients/attribution.test.js +0 -153
  826. package/ts_build/tests/unit/clients/attribution.test.js.map +0 -1
  827. package/ts_build/tests/unit/clients/http.responseMetadata.test.d.ts +0 -1
  828. package/ts_build/tests/unit/clients/http.responseMetadata.test.js +0 -77
  829. package/ts_build/tests/unit/clients/http.responseMetadata.test.js.map +0 -1
  830. package/ts_build/tests/unit/clients/openai.responseMetadata.test.d.ts +0 -1
  831. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js +0 -86
  832. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js.map +0 -1
  833. package/ts_build/tests/unit/clients/responseMetadata.test.d.ts +0 -1
  834. package/ts_build/tests/unit/clients/responseMetadata.test.js +0 -96
  835. package/ts_build/tests/unit/clients/responseMetadata.test.js.map +0 -1
  836. package/ts_build/tests/unit/clients/withRetry.test.d.ts +0 -1
  837. package/ts_build/tests/unit/clients/withRetry.test.js +0 -225
  838. package/ts_build/tests/unit/clients/withRetry.test.js.map +0 -1
  839. package/ts_build/tests/unit/commands/agents.test.d.ts +0 -1
  840. package/ts_build/tests/unit/commands/agents.test.js +0 -119
  841. package/ts_build/tests/unit/commands/agents.test.js.map +0 -1
  842. package/ts_build/tests/unit/commands/github-credentials.test.d.ts +0 -1
  843. package/ts_build/tests/unit/commands/github-credentials.test.js +0 -145
  844. package/ts_build/tests/unit/commands/github-credentials.test.js.map +0 -1
  845. package/ts_build/tests/unit/commands/misc.test.d.ts +0 -1
  846. package/ts_build/tests/unit/commands/misc.test.js +0 -70
  847. package/ts_build/tests/unit/commands/misc.test.js.map +0 -1
  848. package/ts_build/tests/unit/commands/remote.test.d.ts +0 -1
  849. package/ts_build/tests/unit/commands/remote.test.js +0 -70
  850. package/ts_build/tests/unit/commands/remote.test.js.map +0 -1
  851. package/ts_build/tests/unit/commands/sandbox.test.d.ts +0 -1
  852. package/ts_build/tests/unit/commands/sandbox.test.js +0 -258
  853. package/ts_build/tests/unit/commands/sandbox.test.js.map +0 -1
  854. package/ts_build/tests/unit/hashes.test.d.ts +0 -1
  855. package/ts_build/tests/unit/hashes.test.js +0 -25
  856. package/ts_build/tests/unit/hashes.test.js.map +0 -1
  857. package/ts_build/tests/unit/input-queue.test.d.ts +0 -1
  858. package/ts_build/tests/unit/input-queue.test.js +0 -32
  859. package/ts_build/tests/unit/input-queue.test.js.map +0 -1
  860. package/ts_build/tests/unit/login.test.d.ts +0 -1
  861. package/ts_build/tests/unit/login.test.js +0 -166
  862. package/ts_build/tests/unit/login.test.js.map +0 -1
  863. package/ts_build/tests/unit/modules/moduleLoading.test.d.ts +0 -1
  864. package/ts_build/tests/unit/modules/moduleLoading.test.js +0 -272
  865. package/ts_build/tests/unit/modules/moduleLoading.test.js.map +0 -1
  866. package/ts_build/tests/unit/plugins/pluginLoading.test.d.ts +0 -1
  867. package/ts_build/tests/unit/plugins/pluginLoading.test.js +0 -117
  868. package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +0 -1
  869. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.d.ts +0 -1
  870. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js +0 -32
  871. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js.map +0 -1
  872. package/ts_build/tests/unit/services/KnowhowClient.test.d.ts +0 -1
  873. package/ts_build/tests/unit/services/KnowhowClient.test.js +0 -69
  874. package/ts_build/tests/unit/services/KnowhowClient.test.js.map +0 -1
  875. package/ts_build/tests/unit/services/LazyToolsService.test.d.ts +0 -1
  876. package/ts_build/tests/unit/services/LazyToolsService.test.js +0 -47
  877. package/ts_build/tests/unit/services/LazyToolsService.test.js.map +0 -1
  878. package/ts_build/tests/unit/services/Mcp.test.d.ts +0 -1
  879. package/ts_build/tests/unit/services/Mcp.test.js +0 -45
  880. package/ts_build/tests/unit/services/Mcp.test.js.map +0 -1
  881. package/ts_build/tests/unit/services/MinimalToolsService.test.d.ts +0 -1
  882. package/ts_build/tests/unit/services/MinimalToolsService.test.js +0 -320
  883. package/ts_build/tests/unit/services/MinimalToolsService.test.js.map +0 -1
  884. package/ts_build/tests/unit/services/RuntimeReloadService.test.d.ts +0 -1
  885. package/ts_build/tests/unit/services/RuntimeReloadService.test.js +0 -26
  886. package/ts_build/tests/unit/services/RuntimeReloadService.test.js.map +0 -1
  887. package/ts_build/tests/unit/services/SessionManager.test.d.ts +0 -1
  888. package/ts_build/tests/unit/services/SessionManager.test.js +0 -72
  889. package/ts_build/tests/unit/services/SessionManager.test.js.map +0 -1
  890. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.d.ts +0 -1
  891. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js +0 -78
  892. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js.map +0 -1
  893. package/ts_build/tests/unit/services/SyncerService.test.d.ts +0 -1
  894. package/ts_build/tests/unit/services/SyncerService.test.js +0 -40
  895. package/ts_build/tests/unit/services/SyncerService.test.js.map +0 -1
  896. package/ts_build/tests/unit/tunnel.test.d.ts +0 -1
  897. package/ts_build/tests/unit/tunnel.test.js +0 -47
  898. package/ts_build/tests/unit/tunnel.test.js.map +0 -1
  899. package/ts_build/tests/unit/util/Trace.test.d.ts +0 -1
  900. package/ts_build/tests/unit/util/Trace.test.js +0 -107
  901. package/ts_build/tests/unit/util/Trace.test.js.map +0 -1
  902. package/ts_build/tests/unit/utils/http.test.d.ts +0 -1
  903. package/ts_build/tests/unit/utils/http.test.js +0 -69
  904. package/ts_build/tests/unit/utils/http.test.js.map +0 -1
  905. package/tsconfig.json +0 -34
  906. package/tslint.json +0 -11
@@ -1,1186 +0,0 @@
1
- import OpenAI from "openai";
2
- import { getConfigSync } from "../config";
3
- import { emitResponseMetadata } from "./responseMetadata";
4
- import { OpenAiTextPricing } from "./pricing";
5
- import { ContextLimits } from "./contextLimits";
6
- import {
7
- GenericClient,
8
- CompletionOptions,
9
- CompletionResponse,
10
- EmbeddingOptions,
11
- EmbeddingResponse,
12
- AudioTranscriptionOptions,
13
- AudioTranscriptionResponse,
14
- AudioGenerationOptions,
15
- AudioGenerationResponse,
16
- ImageGenerationOptions,
17
- ImageGenerationResponse,
18
- VideoGenerationOptions,
19
- VideoGenerationResponse,
20
- VideoStatusOptions,
21
- VideoStatusResponse,
22
- FileUploadOptions,
23
- FileUploadResponse,
24
- FileDownloadOptions,
25
- FileDownloadResponse,
26
- Message,
27
- } from "./types";
28
- import {
29
- ChatCompletionMessageParam,
30
- ChatCompletionToolMessageParam,
31
- ChatCompletionMessageToolCall,
32
- } from "openai/resources/chat";
33
- import {
34
- ResponseFunctionToolCall,
35
- ResponseInputMessageContentList,
36
- } from "openai/resources/responses/responses";
37
-
38
- import {
39
- EmbeddingModels,
40
- Models,
41
- OpenAiReasoningModels,
42
- OpenAiChatModels,
43
- OpenAiResponsesOnlyModels,
44
- OpenAiImageModels,
45
- OpenAiVideoModels,
46
- OpenAiTTSModels,
47
- OpenAiTranscriptionModels,
48
- OpenAiEmbeddingModelsList,
49
- OpenAiRealtimeModels,
50
- } from "../types";
51
- import { ModelModality } from "./types";
52
-
53
- const config = getConfigSync();
54
-
55
- export class GenericOpenAiClient implements GenericClient {
56
- client: OpenAI;
57
- apiKey?: string;
58
-
59
- constructor(apiKey = process.env.OPENAI_KEY) {
60
- this.setKey(apiKey);
61
- }
62
-
63
- private emitErrorMetadata(
64
- options:
65
- | CompletionOptions
66
- | EmbeddingOptions
67
- | AudioTranscriptionOptions
68
- | AudioGenerationOptions,
69
- error: unknown
70
- ) {
71
- if (!error || typeof error !== "object") return;
72
- const apiError = error as {
73
- status?: number;
74
- headers?: Headers | Record<string, unknown>;
75
- request_id?: string;
76
- requestID?: string;
77
- response?: Response;
78
- };
79
- const statusCode = apiError.status ?? apiError.response?.status;
80
- const headers = apiError.headers ?? apiError.response?.headers;
81
- if (typeof statusCode === "number" || headers) {
82
- emitResponseMetadata(options, {
83
- statusCode,
84
- headers,
85
- requestId: apiError.request_id ?? apiError.requestID,
86
- });
87
- }
88
- }
89
-
90
- setKey(apiKey: string) {
91
- this.apiKey = apiKey;
92
- this.client = new OpenAI({
93
- apiKey,
94
- // SDK retries hide individual responses, which breaks response-scoped telemetry.
95
- maxRetries: 0,
96
- ...(config?.openaiBaseUrl && { baseURL: config.openaiBaseUrl }),
97
- });
98
- }
99
-
100
- /**
101
- * Execute a function with timeout, retries, and exponential backoff.
102
- * Retriable errors: 5xx, timeout, ECONNRESET, ETIMEDOUT, rate limits (429).
103
- */
104
- reasoningEffort(
105
- messages: CompletionOptions["messages"]
106
- ): "low" | "medium" | "high" {
107
- return this.detectReasoningEffort(messages);
108
- }
109
-
110
- detectReasoningEffort(
111
- messages: CompletionOptions["messages"]
112
- ): "low" | "medium" | "high" {
113
- const effortMap: Record<string, "low" | "medium" | "high"> = {
114
- ultrathink: "high",
115
- "think hard": "high",
116
- "reason hard": "high",
117
-
118
- "think carefully": "medium",
119
- "reason carefully": "medium",
120
- "think medium": "medium",
121
- "reason medium": "medium",
122
-
123
- "think low": "low",
124
- "reason low": "low",
125
- "think simple": "low",
126
- "reason simple": "low",
127
- };
128
-
129
- for (const key in effortMap) {
130
- if (
131
- messages.some(
132
- (msg) =>
133
- typeof msg.content === "string" &&
134
- msg.role === "user" &&
135
- msg.content?.includes(key)
136
- )
137
- ) {
138
- return effortMap[key];
139
- }
140
- }
141
-
142
- return "medium"; // Default to medium if no specific effort is mentioned
143
- }
144
-
145
- resolveReasoningEffort(
146
- options: CompletionOptions
147
- ): "low" | "medium" | "high" {
148
- const effort =
149
- options.reasoning_effort ?? this.detectReasoningEffort(options.messages);
150
- // Chat Completions only accepts low/medium/high. Preserve newer values on
151
- // the Responses API, but map them to the nearest legacy level here.
152
- if (effort === "none" || effort === "minimal") return "low";
153
- if (effort === "xhigh" || effort === "max") return "high";
154
- return effort;
155
- }
156
-
157
- /**
158
- * Resolves the reasoning effort for a specific model, clamping to the model's
159
- * supported levels if `reasoningLevels` is set in its pricing entry.
160
- * If the requested level is not supported, picks the lowest supported level.
161
- */
162
- resolveReasoningEffortForModel(options: CompletionOptions): string {
163
- const raw =
164
- options.reasoning_effort ?? this.detectReasoningEffort(options.messages);
165
- // Anthropic calls its highest level `max`; OpenAI calls it `xhigh`.
166
- // Accept both provider-neutral CLI spellings.
167
- const requested = raw === "max" ? "xhigh" : raw;
168
- const pricing = OpenAiTextPricing[options.model];
169
- const supportedLevels = pricing?.reasoningLevels;
170
- if (!supportedLevels || supportedLevels.length === 0) {
171
- return requested;
172
- }
173
- // If the requested level is supported, use it
174
- if (supportedLevels.includes(requested)) {
175
- return requested;
176
- }
177
- // Otherwise use the first (lowest) supported level
178
- return supportedLevels[0];
179
- }
180
-
181
- /** Returns true when the caller explicitly requested thinking/reasoning to be disabled. */
182
- isReasoningDisabled(options: CompletionOptions): boolean {
183
- return options.reasoning_effort === "none";
184
- }
185
-
186
- /**
187
- * OpenAI only permits image parts on user messages. A Chat Completions
188
- * `tool` message may contain text parts, but not `image_url` parts. Keep the
189
- * required tool result and attach images in a following user message.
190
- */
191
- toChatCompletionMessages(
192
- messages: CompletionOptions["messages"]
193
- ): ChatCompletionMessageParam[] {
194
- return messages.flatMap((msg): ChatCompletionMessageParam[] => {
195
- if (msg.role !== "tool") return [msg as ChatCompletionMessageParam];
196
-
197
- const parts = Array.isArray(msg.content) ? msg.content : [];
198
- const unsupportedPart = parts.find(
199
- (part) => part.type !== "text" && part.type !== "image_url"
200
- );
201
- if (unsupportedPart) {
202
- throw new Error(
203
- `OpenAI Chat Completions cannot attach ${unsupportedPart.type} content to a tool result.`
204
- );
205
- }
206
- const imageParts = parts.filter((part) => part.type === "image_url");
207
- const textParts = parts.filter((part) => part.type === "text");
208
- const toolMessage: ChatCompletionToolMessageParam = {
209
- role: "tool",
210
- tool_call_id: msg.tool_call_id!,
211
- content: Array.isArray(msg.content)
212
- ? textParts.length
213
- ? textParts
214
- : [
215
- {
216
- type: "text",
217
- text: "Image output attached in the following user message.",
218
- },
219
- ]
220
- : msg.content || "",
221
- };
222
-
223
- if (!imageParts.length) return [toolMessage];
224
- return [
225
- toolMessage,
226
- { role: "user", content: imageParts } as ChatCompletionMessageParam,
227
- ];
228
- });
229
- }
230
-
231
- /** Convert the CLI's Chat Completions-style parts to Responses API parts. */
232
- toResponseContent(
233
- content: Message["content"]
234
- ): string | ResponseInputMessageContentList {
235
- if (!Array.isArray(content)) return content || "";
236
- const result: ResponseInputMessageContentList = [];
237
- for (const part of content) {
238
- if (part.type === "text") {
239
- result.push({ type: "input_text", text: part.text });
240
- } else if (part.type === "image_url") {
241
- result.push({
242
- type: "input_image",
243
- image_url: part.image_url.url,
244
- detail: part.image_url.detail || "auto",
245
- });
246
- } else {
247
- throw new Error(
248
- `OpenAI Responses API conversion does not support ${part.type} content.`
249
- );
250
- }
251
- }
252
- return result;
253
- }
254
-
255
- async createChatCompletion(
256
- options: CompletionOptions
257
- ): Promise<CompletionResponse> {
258
- // Route to Responses API for models that don't support Chat Completions
259
- if (OpenAiResponsesOnlyModels.includes(options.model)) {
260
- return this.createChatResponse(options);
261
- }
262
-
263
- const openaiMessages = this.toChatCompletionMessages(options.messages);
264
-
265
- let result;
266
- try {
267
- result = await this.client.chat.completions
268
- .create(
269
- {
270
- model: options.model,
271
- messages: openaiMessages,
272
- max_tokens: options.max_tokens,
273
- ...(OpenAiReasoningModels.includes(options.model) &&
274
- !this.isReasoningDisabled(options) && {
275
- max_tokens: undefined,
276
- max_completion_tokens: Math.max(
277
- options.max_tokens ?? 0,
278
- 16_000
279
- ),
280
- reasoning_effort: this.resolveReasoningEffort(options),
281
- }),
282
- ...(options.tools?.length && {
283
- tools: options.tools,
284
- tool_choice: options.tool_choice ?? "auto",
285
- }),
286
- },
287
- { signal: options.signal }
288
- )
289
- .withResponse();
290
- } catch (error) {
291
- this.emitErrorMetadata(options, error);
292
- throw error;
293
- }
294
- const { data: response, response: nativeResponse, request_id } = result;
295
- emitResponseMetadata(options, {
296
- statusCode: nativeResponse.status,
297
- headers: nativeResponse.headers,
298
- requestId: request_id,
299
- });
300
-
301
- const usdCost = this.calculateCost(options.model, response.usage);
302
-
303
- return {
304
- choices: response.choices.map((choice) => ({
305
- message: {
306
- role: choice.message?.role || "assistant",
307
- content: choice.message?.content || null,
308
- tool_calls: choice.message?.tool_calls
309
- ? choice.message.tool_calls
310
- : undefined,
311
- },
312
- })),
313
-
314
- model: options.model,
315
- usage: response.usage
316
- ? {
317
- prompt_tokens: response.usage.prompt_tokens ?? 0,
318
- completion_tokens: response.usage.completion_tokens ?? 0,
319
- total_tokens: response.usage.total_tokens,
320
- prompt_tokens_details: {
321
- cached_tokens:
322
- response.usage.prompt_tokens_details?.cached_tokens ?? 0,
323
- },
324
- ...(response.usage.completion_tokens_details?.reasoning_tokens !=
325
- null && {
326
- output_tokens_details: {
327
- reasoning_tokens:
328
- response.usage.completion_tokens_details.reasoning_tokens,
329
- },
330
- }),
331
- }
332
- : undefined,
333
- usd_cost: usdCost,
334
- };
335
- }
336
-
337
- /**
338
- * Streams a chat completion token-by-token.
339
- * Yields delta content strings as they arrive, then yields a final
340
- * CompletionResponse with usage info when the stream ends.
341
- */
342
- async *createChatCompletionStream(
343
- options: CompletionOptions
344
- ): AsyncGenerator<{
345
- delta?: string;
346
- done: boolean;
347
- usage?: CompletionResponse["usage"];
348
- usd_cost?: number;
349
- }> {
350
- if (OpenAiResponsesOnlyModels.includes(options.model)) {
351
- // Fallback: non-streaming for Responses-only models
352
- const result = await this.createChatCompletion(options);
353
- yield { delta: result.choices[0]?.message?.content ?? "", done: false };
354
- yield { done: true, usage: result.usage, usd_cost: result.usd_cost };
355
- return;
356
- }
357
-
358
- const openaiMessages = this.toChatCompletionMessages(options.messages);
359
-
360
- let result;
361
- try {
362
- result = await this.client.chat.completions
363
- .create(
364
- {
365
- model: options.model,
366
- messages: openaiMessages,
367
- max_tokens: options.max_tokens,
368
- stream: true,
369
- stream_options: { include_usage: true },
370
- ...(options.tools?.length && {
371
- tools: options.tools,
372
- tool_choice: options.tool_choice ?? "auto",
373
- }),
374
- },
375
- { signal: options.signal }
376
- )
377
- .withResponse();
378
- } catch (error) {
379
- this.emitErrorMetadata(options, error);
380
- throw error;
381
- }
382
- const { data: stream, response: nativeResponse, request_id } = result;
383
- emitResponseMetadata(options, {
384
- statusCode: nativeResponse.status,
385
- headers: nativeResponse.headers,
386
- requestId: request_id,
387
- });
388
-
389
- let usage: CompletionResponse["usage"] | undefined;
390
- for await (const chunk of stream) {
391
- const delta = chunk.choices[0]?.delta?.content;
392
- if (delta) {
393
- yield { delta, done: false };
394
- }
395
- if (chunk.usage) {
396
- usage = {
397
- prompt_tokens: chunk.usage.prompt_tokens ?? 0,
398
- completion_tokens: chunk.usage.completion_tokens ?? 0,
399
- total_tokens: chunk.usage.total_tokens ?? 0,
400
- };
401
- }
402
- }
403
- const usdCost = usage
404
- ? this.calculateCost(
405
- options.model,
406
- usage as OpenAI.ChatCompletion["usage"]
407
- )
408
- : undefined;
409
- yield { done: true, usage, usd_cost: usdCost };
410
- }
411
-
412
- /**
413
- * Creates a completion using the OpenAI Responses API.
414
- * Used for models that only support the Responses API (e.g. gpt-5.3-codex, gpt-5.4).
415
- * Translates Chat Completions message format to Responses API format and maps the
416
- * response back to CompletionResponse.
417
- */
418
- /**
419
- * Attempts to repair truncated JSON arguments from the Responses API.
420
- * Codex sometimes returns function_call arguments with truncated JSON strings.
421
- * This tries to close open strings/objects to produce valid JSON.
422
- */
423
- private repairTruncatedJson(args: string): string {
424
- try {
425
- JSON.parse(args);
426
- return args; // Already valid
427
- } catch {
428
- // Try to repair by closing open structures
429
- let repaired = args.trimEnd();
430
- // Count open/close braces and brackets
431
- let depth = 0;
432
- let inString = false;
433
- let escaped = false;
434
- for (const ch of repaired) {
435
- if (escaped) {
436
- escaped = false;
437
- continue;
438
- }
439
- if (ch === "\\" && inString) {
440
- escaped = true;
441
- continue;
442
- }
443
- if (ch === '"') {
444
- inString = !inString;
445
- continue;
446
- }
447
- if (!inString) {
448
- if (ch === "{" || ch === "[") depth++;
449
- else if (ch === "}" || ch === "]") depth--;
450
- }
451
- }
452
- // If we're inside a string, close it
453
- if (inString) repaired += '"';
454
- // Close any open objects/arrays
455
- for (let i = 0; i < depth; i++) repaired += "}";
456
- try {
457
- JSON.parse(repaired);
458
- return repaired;
459
- } catch {
460
- return args; // Return original if repair failed
461
- }
462
- }
463
- }
464
-
465
- /**
466
- * Resolve the OpenAI-native reasoning items to re-inject for an assistant
467
- * message. Reads the provider-agnostic `_reasoning_details` slot (only when
468
- * it was produced by this provider) and falls back to the deprecated
469
- * `_reasoning_items` for backward compatibility.
470
- */
471
- private getReasoningItems(msg: any): any[] {
472
- const details = (msg as any)._reasoning_details;
473
- if (
474
- details &&
475
- details.provider === "openai" &&
476
- Array.isArray(details.items)
477
- ) {
478
- return details.items;
479
- }
480
- return (msg as any)._reasoning_items ?? [];
481
- }
482
-
483
- async createChatResponse(
484
- options: CompletionOptions
485
- ): Promise<CompletionResponse> {
486
- // Extract system message to use as instructions
487
- const systemMessages = options.messages.filter((m) => m.role === "system");
488
- const nonSystemMessages = options.messages.filter(
489
- (m) => m.role !== "system"
490
- );
491
- const instructions =
492
- systemMessages
493
- .map((m) => (typeof m.content === "string" ? m.content : ""))
494
- .join("\n")
495
- .trim() || undefined;
496
-
497
- // Convert chat messages to Responses API input items
498
- // The Responses API accepts: user/assistant/system messages and function_call_output items
499
- // OpenAI Responses API hard limit: 10,485,760 chars per function_call_output.output
500
- const MAX_TOOL_OUTPUT = 10_485_000;
501
- const truncateToolOutput = (s: string) =>
502
- s.length > MAX_TOOL_OUTPUT
503
- ? s.slice(0, MAX_TOOL_OUTPUT) +
504
- "\n\n[TRUNCATED: output exceeded 10MB API limit]"
505
- : s;
506
- const input: any[] = nonSystemMessages
507
- .map((msg) => {
508
- if (msg.role === "tool") {
509
- // OpenAI function outputs cannot directly contain image content. Send
510
- // the required function output, then attach images as a user message.
511
- const parts = Array.isArray(msg.content) ? msg.content : [];
512
- const imageParts = parts.filter((part) => part.type === "image_url");
513
- const text = parts
514
- .filter((part) => part.type === "text")
515
- .map((part: any) => part.text)
516
- .join("\n");
517
- const toolOutput = {
518
- type: "function_call_output",
519
- call_id: msg.tool_call_id,
520
- output: truncateToolOutput(
521
- typeof msg.content === "string"
522
- ? msg.content
523
- : text || "Image output attached in the following user message."
524
- ),
525
- };
526
- if (!imageParts.length) return toolOutput;
527
- return [
528
- toolOutput,
529
- { role: "user", content: this.toResponseContent(imageParts) },
530
- ];
531
- }
532
- if (msg.role === "assistant" && msg.tool_calls?.length) {
533
- // assistant message with tool calls → function_call items.
534
- // If the prior turn captured reasoning items (encrypted_content path),
535
- // re-inject them *before* the function_call items so the model keeps its
536
- // chain-of-thought instead of re-deriving it from scratch.
537
- const reasoningItems = this.getReasoningItems(msg);
538
- return [
539
- ...reasoningItems,
540
- ...msg.tool_calls.map((tc) => ({
541
- type: "function_call",
542
- // id must start with 'fc_'; call_id is the original call_ ID used for function_call_output matching
543
- id: tc.id.startsWith("fc") ? tc.id : `fc_${tc.id}`,
544
- call_id: tc.id,
545
- name: tc.function.name,
546
- arguments: tc.function.arguments,
547
- })),
548
- ];
549
- }
550
- if (msg.role === "assistant" && this.getReasoningItems(msg).length) {
551
- // assistant message (no tool calls) that carried reasoning items →
552
- // re-inject reasoning items, then the visible message content.
553
- return [
554
- ...this.getReasoningItems(msg),
555
- {
556
- role: msg.role,
557
- content: this.toResponseContent(msg.content),
558
- },
559
- ];
560
- }
561
- // Regular user/assistant message
562
- return {
563
- role: msg.role,
564
- content: this.toResponseContent(msg.content),
565
- };
566
- })
567
- .flat();
568
-
569
- // Convert Chat Completions tool definitions to Responses API FunctionTool format
570
- const tools = options.tools?.map((tool) => ({
571
- type: "function" as const,
572
- name: tool.function.name,
573
- description: tool.function.description,
574
- parameters: tool.function.parameters as Record<string, unknown>,
575
- strict: false,
576
- }));
577
-
578
- // Reasoning persistence:
579
- // - store === true → OpenAI persists the response server-side; the next
580
- // turn passes previous_response_id to continue the reasoning chain.
581
- // - store !== true → stateless; ask OpenAI to return encrypted reasoning
582
- // content so we can thread it back into the next request's input ourselves.
583
- const store = options.store === true;
584
- const wantsReasoning =
585
- OpenAiReasoningModels.includes(options.model) &&
586
- !this.isReasoningDisabled(options);
587
-
588
- let result;
589
- try {
590
- result = await this.client.responses
591
- .create({
592
- model: options.model as any,
593
- input,
594
- ...(instructions && { instructions }),
595
- ...(store && { store: true }),
596
- ...(!store && { store: false }),
597
- ...(options.previous_response_id && {
598
- previous_response_id: options.previous_response_id,
599
- }),
600
- // When stateless, request encrypted reasoning so we can re-inject it next turn.
601
- ...(!store &&
602
- wantsReasoning && {
603
- include: ["reasoning.encrypted_content"],
604
- }),
605
- // Don't limit max_output_tokens for Responses API - codex truncates tool call arguments when limited
606
- ...(OpenAiReasoningModels.includes(options.model) && {
607
- reasoning: {
608
- ...(this.isReasoningDisabled(options)
609
- ? { effort: "none" }
610
- : {
611
- effort: this.resolveReasoningEffortForModel(options),
612
- ...(options.reasoning_summary && { summary: "auto" }),
613
- }),
614
- },
615
- }),
616
- ...(wantsReasoning && {
617
- max_output_tokens: Math.max(options.max_tokens || 0, 16000),
618
- }),
619
- ...(tools?.length && {
620
- tools,
621
- tool_choice: options.tool_choice ?? "auto",
622
- }),
623
- } as any)
624
- .withResponse();
625
- } catch (error) {
626
- this.emitErrorMetadata(options, error);
627
- throw error;
628
- }
629
- const { data: response, response: nativeResponse, request_id } = result;
630
- emitResponseMetadata(options, {
631
- statusCode: nativeResponse.status,
632
- headers: nativeResponse.headers,
633
- requestId: request_id,
634
- });
635
-
636
- // Map Responses API usage to Chat Completions usage format
637
- const usage = response.usage
638
- ? {
639
- prompt_tokens: response.usage.input_tokens,
640
- completion_tokens: response.usage.output_tokens,
641
- total_tokens:
642
- response.usage.input_tokens + response.usage.output_tokens,
643
- prompt_tokens_details: {
644
- cached_tokens:
645
- response.usage.input_tokens_details?.cached_tokens ?? 0,
646
- },
647
- ...((response.usage as any).output_tokens_details?.reasoning_tokens !=
648
- null && {
649
- output_tokens_details: {
650
- reasoning_tokens: (response.usage as any).output_tokens_details
651
- .reasoning_tokens,
652
- },
653
- }),
654
- }
655
- : undefined;
656
-
657
- const usdCost = usage
658
- ? this.calculateCost(options.model, usage)
659
- : undefined;
660
-
661
- // Collect text content and tool calls from the output items
662
- let textContent: string | null = null;
663
- const toolCalls: ChatCompletionMessageToolCall[] = [];
664
- // Reasoning items (with encrypted_content) to thread back into the next turn,
665
- // and a human-readable summary of the model's thinking (when requested).
666
- const reasoningItems: any[] = [];
667
- let reasoningSummary: string | null = null;
668
-
669
- for (const item of response.output) {
670
- if (item.type === "message") {
671
- // ResponseOutputMessage
672
- const msgItem = item as any;
673
- for (const part of msgItem.content ?? []) {
674
- if (part.type === "output_text") {
675
- textContent = (textContent ?? "") + part.text;
676
- }
677
- }
678
- } else if (item.type === "reasoning") {
679
- // ResponseReasoningItem — keep the raw item so we can re-inject it
680
- // (it carries encrypted_content when include was requested), and pull
681
- // out any human-readable summary text.
682
- reasoningItems.push(item);
683
- const summaryParts = (item as any).summary ?? [];
684
- for (const part of summaryParts) {
685
- const text = typeof part === "string" ? part : part?.text;
686
- if (text) {
687
- reasoningSummary = (reasoningSummary ?? "") + text;
688
- }
689
- }
690
- } else if (item.type === "function_call") {
691
- // ResponseFunctionToolCall
692
- const fc = item as ResponseFunctionToolCall;
693
- const repairedArgs = this.repairTruncatedJson(fc.arguments);
694
- // Validate at the boundary - log if still invalid after repair
695
- try {
696
- JSON.parse(repairedArgs);
697
- } catch (e) {
698
- console.warn(
699
- `[Responses API] Invalid JSON arguments for ${fc.name} after repair: ${e.message}`
700
- );
701
- }
702
- toolCalls.push({
703
- // Store call_id so function_call_output.call_id matches it in subsequent turns
704
- id: fc.call_id,
705
- type: "function",
706
- function: {
707
- name: fc.name,
708
- arguments: repairedArgs,
709
- },
710
- });
711
- }
712
- }
713
-
714
- // Tool-only responses are valid agent turns. Warn only when the response
715
- // contains neither visible text nor any callable output, and include enough
716
- // provider metadata to diagnose incomplete or reasoning-only responses.
717
- if (!textContent?.trim() && toolCalls.length === 0) {
718
- const outputShape = response.output.map((item: any) => ({
719
- type: item.type,
720
- contentTypes: Array.isArray(item.content)
721
- ? item.content.map((part: any) => part?.type ?? typeof part)
722
- : [],
723
- }));
724
- const reasoningSummaryCount = response.output
725
- .filter((item: any) => item.type === "reasoning")
726
- .reduce(
727
- (count: number, item: any) =>
728
- count + (Array.isArray(item.summary) ? item.summary.length : 0),
729
- 0
730
- );
731
- console.warn("[Responses API] Response contained no text or tool calls", {
732
- responseId: (response as any).id,
733
- status: (response as any).status,
734
- incompleteDetails: (response as any).incomplete_details,
735
- outputShape,
736
- reasoningSummaryCount,
737
- usage: response.usage,
738
- });
739
- }
740
-
741
- return {
742
- choices: [
743
- {
744
- message: {
745
- role: "assistant",
746
- content: textContent,
747
- ...(toolCalls.length > 0 && { tool_calls: toolCalls }),
748
- ...(reasoningSummary && { reasoning_summary: reasoningSummary }),
749
- // Stash the raw reasoning items (encrypted_content) so the next call
750
- // to createChatResponse can re-inject them into the input. We populate
751
- // both the provider-agnostic slot and the deprecated legacy field.
752
- ...(reasoningItems.length > 0 && {
753
- _reasoning_items: reasoningItems,
754
- _reasoning_details: { provider: "openai", items: reasoningItems },
755
- }),
756
- },
757
- },
758
- ],
759
- model: options.model,
760
- usage,
761
- usd_cost: usdCost,
762
- response_id: (response as any).id,
763
- };
764
- }
765
-
766
- pricesPerMillion() {
767
- return OpenAiTextPricing;
768
- }
769
-
770
- getPricing(
771
- model?: string
772
- ):
773
- | import("./pricing/types").ModelPricing
774
- | Record<string, import("./pricing/types").ModelPricing>
775
- | undefined {
776
- if (model !== undefined) {
777
- return OpenAiTextPricing[model as keyof typeof OpenAiTextPricing] as
778
- | import("./pricing/types").ModelPricing
779
- | undefined;
780
- }
781
- return OpenAiTextPricing as unknown as Record<
782
- string,
783
- import("./pricing/types").ModelPricing
784
- >;
785
- }
786
-
787
- calculateCost(
788
- model: string,
789
- usage:
790
- | OpenAI.ChatCompletion["usage"]
791
- | OpenAI.CreateEmbeddingResponse["usage"]
792
- ): number | undefined {
793
- const pricing = this.pricesPerMillion()[model] || OpenAiTextPricing[model];
794
-
795
- if (!pricing) {
796
- return undefined;
797
- }
798
-
799
- const cachedInputTokens =
800
- ("prompt_tokens_details" in usage &&
801
- usage.prompt_tokens_details?.cached_tokens) ||
802
- 0;
803
- const cachedInputCost =
804
- (cachedInputTokens * (pricing.cached_input ?? 0)) / 1e6;
805
-
806
- const inputTokens = usage.prompt_tokens;
807
- const inputCost =
808
- ((inputTokens - cachedInputTokens) * (pricing.input ?? 0)) / 1e6;
809
-
810
- const outputTokens =
811
- ("completion_tokens" in usage && usage?.completion_tokens) || 0;
812
- const outputCost = (outputTokens * (pricing.output ?? 0)) / 1e6;
813
-
814
- const total = cachedInputCost + inputCost + outputCost;
815
- return total;
816
- }
817
-
818
- async getModels(modality?: ModelModality): Promise<{ id: string }[]> {
819
- if (modality) {
820
- const map: Partial<Record<ModelModality, string[]>> = {
821
- completion: [
822
- ...new Set([...OpenAiChatModels, ...OpenAiResponsesOnlyModels]),
823
- ],
824
- embedding: OpenAiEmbeddingModelsList,
825
- image: OpenAiImageModels,
826
- audio: [...OpenAiTTSModels, ...OpenAiTranscriptionModels],
827
- transcription: OpenAiTranscriptionModels,
828
- video: OpenAiVideoModels,
829
- };
830
- return (map[modality] ?? []).map((id) => ({ id }));
831
- }
832
- // No modality — live API call (backward compat)
833
- const models = await this.client.models.list();
834
- return models.data.map((m) => ({
835
- id: m.id,
836
- }));
837
- }
838
-
839
- async createEmbedding(options: EmbeddingOptions): Promise<EmbeddingResponse> {
840
- let result;
841
- try {
842
- result = await this.client.embeddings
843
- .create({
844
- input: options.input,
845
- model: options.model,
846
- })
847
- .withResponse();
848
- } catch (error) {
849
- this.emitErrorMetadata(options, error);
850
- throw error;
851
- }
852
- const {
853
- data: openAiEmbedding,
854
- response: nativeResponse,
855
- request_id,
856
- } = result;
857
- emitResponseMetadata(options, {
858
- statusCode: nativeResponse.status,
859
- headers: nativeResponse.headers,
860
- requestId: request_id,
861
- });
862
-
863
- return {
864
- data: openAiEmbedding.data,
865
- model: options.model,
866
- usage: openAiEmbedding.usage,
867
- usd_cost: this.calculateCost(options.model, openAiEmbedding.usage),
868
- };
869
- }
870
-
871
- async createAudioTranscription(
872
- options: AudioTranscriptionOptions
873
- ): Promise<AudioTranscriptionResponse> {
874
- // Convert Buffer to File if needed
875
- let file = options.file;
876
- if (Buffer.isBuffer(options.file)) {
877
- const fileName = options.fileName || "audio.mp3";
878
- file = await OpenAI.toFile(options.file, fileName);
879
- }
880
-
881
- let result;
882
- try {
883
- result = await this.client.audio.transcriptions
884
- .create(
885
- {
886
- file,
887
- model: options.model || "whisper-1",
888
- language: options.language,
889
- prompt: options.prompt,
890
- response_format: options.response_format || "verbose_json",
891
- temperature: options.temperature,
892
- },
893
- { signal: options.signal }
894
- )
895
- .withResponse();
896
- } catch (error) {
897
- this.emitErrorMetadata(options, error);
898
- throw error;
899
- }
900
- const { data: response, response: nativeResponse, request_id } = result;
901
- emitResponseMetadata(options, {
902
- statusCode: nativeResponse.status,
903
- headers: nativeResponse.headers,
904
- requestId: request_id,
905
- });
906
-
907
- // Calculate cost: $0.006 per minute for Whisper
908
- const duration =
909
- typeof response === "object" &&
910
- "duration" in response &&
911
- typeof response.duration === "number"
912
- ? response.duration
913
- : undefined;
914
- const usdCost = duration ? (duration / 60) * 0.006 : undefined;
915
-
916
- if (typeof response === "string") {
917
- return {
918
- text: response,
919
- usd_cost: usdCost,
920
- };
921
- }
922
-
923
- // Cast to any to access verbose response properties
924
- const verboseResponse = response as any;
925
-
926
- return {
927
- text: response.text,
928
- language: verboseResponse.language,
929
- duration: verboseResponse.duration,
930
- segments: verboseResponse.segments,
931
- usd_cost: usdCost,
932
- };
933
- }
934
-
935
- async createAudioGeneration(
936
- options: AudioGenerationOptions
937
- ): Promise<AudioGenerationResponse> {
938
- let result;
939
- try {
940
- result = await this.client.audio.speech
941
- .create(
942
- {
943
- model: options.model,
944
- input: options.input,
945
- voice: options.voice as any,
946
- response_format: options.response_format || "mp3",
947
- speed: options.speed,
948
- },
949
- { signal: options.signal }
950
- )
951
- .withResponse();
952
- } catch (error) {
953
- this.emitErrorMetadata(options, error);
954
- throw error;
955
- }
956
- const { data: response, response: nativeResponse, request_id } = result;
957
- emitResponseMetadata(options, {
958
- statusCode: nativeResponse.status,
959
- headers: nativeResponse.headers,
960
- requestId: request_id,
961
- });
962
-
963
- const buffer = Buffer.from(await response.arrayBuffer());
964
-
965
- // Calculate cost based on model and character count
966
- // TTS: $15.00 / 1M characters, TTS HD: $30.00 / 1M characters
967
- const isHD = options.model.includes("hd");
968
- const pricePerMillion = isHD ? 30.0 : 15.0;
969
- const usdCost = (options.input.length * pricePerMillion) / 1e6;
970
-
971
- return {
972
- audio: buffer,
973
- format: options.response_format || "mp3",
974
- usd_cost: usdCost,
975
- };
976
- }
977
-
978
- async createImageGeneration(
979
- options: ImageGenerationOptions
980
- ): Promise<ImageGenerationResponse> {
981
- const response = await this.client.images.generate(
982
- {
983
- model: options.model,
984
- prompt: options.prompt,
985
- n: options.n,
986
- size: options.size,
987
- quality: options.quality,
988
- style: options.style,
989
- response_format: options.response_format,
990
- user: options.user,
991
- },
992
- { signal: options.signal }
993
- );
994
-
995
- // Cost calculation varies by model and settings
996
- // DALL-E 3: $0.040-$0.120 per image depending on quality/size
997
- // DALL-E 2: $0.016-$0.020 per image
998
- const estimatedCostPerImage = options.quality === "hd" ? 0.08 : 0.04;
999
- const usdCost = (options.n || 1) * estimatedCostPerImage;
1000
-
1001
- return { ...response, usd_cost: usdCost };
1002
- }
1003
-
1004
- async createVideoGeneration(
1005
- options: VideoGenerationOptions
1006
- ): Promise<VideoGenerationResponse> {
1007
- const apiKey = this.apiKey || process.env.OPENAI_KEY;
1008
- if (!apiKey) {
1009
- throw new Error("OpenAI API key is required for video generation");
1010
- }
1011
-
1012
- const model = options.model || "sora-2";
1013
-
1014
- // Step 1: Create the video job
1015
- const createPayload: any = {
1016
- model,
1017
- prompt: options.prompt,
1018
- };
1019
-
1020
- if (options.duration) {
1021
- // OpenAI API requires seconds as a string: '4', '8', or '12'
1022
- // Round to nearest valid value
1023
- const validSeconds = [4, 8, 12];
1024
- const duration = options.duration as number;
1025
- const nearest = validSeconds.reduce((prev, curr) =>
1026
- Math.abs(curr - duration) < Math.abs(prev - duration) ? curr : prev
1027
- );
1028
- createPayload.seconds = String(nearest);
1029
- }
1030
- if (options.resolution) {
1031
- createPayload.size = options.resolution;
1032
- }
1033
- if (options.n) {
1034
- createPayload.n = options.n;
1035
- }
1036
-
1037
- const createResponse = await fetch("https://api.openai.com/v1/videos", {
1038
- method: "POST",
1039
- headers: {
1040
- "Content-Type": "application/json",
1041
- Authorization: `Bearer ${apiKey}`,
1042
- },
1043
- body: JSON.stringify(createPayload),
1044
- });
1045
-
1046
- if (!createResponse.ok) {
1047
- const errorText = await createResponse.text();
1048
- throw new Error(
1049
- `OpenAI video generation failed: ${createResponse.status} ${errorText}`
1050
- );
1051
- }
1052
-
1053
- const createData = await createResponse.json();
1054
- const videoId = createData.id;
1055
-
1056
- if (!videoId) {
1057
- throw new Error("No video ID returned from OpenAI video generation");
1058
- }
1059
-
1060
- // Return immediately with the jobId – do NOT poll here.
1061
- // Use getVideoStatus() to poll and downloadVideo() to fetch the result.
1062
- return {
1063
- created: createData.created_at || Math.floor(Date.now() / 1000),
1064
- data: [],
1065
- jobId: videoId,
1066
- usd_cost: undefined,
1067
- };
1068
- }
1069
-
1070
- async getVideoStatus(
1071
- options: VideoStatusOptions
1072
- ): Promise<VideoStatusResponse> {
1073
- const apiKey = this.apiKey || process.env.OPENAI_KEY;
1074
- if (!apiKey) throw new Error("OpenAI API key not set");
1075
- const response = await fetch(
1076
- `https://api.openai.com/v1/videos/${options.jobId}`,
1077
- {
1078
- method: "GET",
1079
- headers: { Authorization: `Bearer ${apiKey}` },
1080
- }
1081
- );
1082
- if (!response.ok) {
1083
- const errorText = await response.text();
1084
- throw new Error(
1085
- `OpenAI getVideoStatus failed: ${response.status} ${errorText}`
1086
- );
1087
- }
1088
- const data = await response.json();
1089
- let status: VideoStatusResponse["status"] = "in_progress";
1090
- if (data.status === "completed") status = "completed";
1091
- else if (data.status === "failed") status = "failed";
1092
- else if (data.status === "queued") status = "queued";
1093
- else if (data.status === "in_progress") status = "in_progress";
1094
- return {
1095
- jobId: options.jobId,
1096
- status,
1097
- data: data.result?.url ? [{ url: data.result.url }] : undefined,
1098
- error: data.error?.message,
1099
- };
1100
- }
1101
-
1102
- async downloadVideo(
1103
- options: FileDownloadOptions
1104
- ): Promise<FileDownloadResponse> {
1105
- const apiKey = this.apiKey || process.env.OPENAI_KEY;
1106
- if (!apiKey) throw new Error("OpenAI API key not set");
1107
- const fileId = options.fileId;
1108
- if (!fileId) throw new Error("downloadVideo requires fileId (the jobId)");
1109
- const response = await fetch(
1110
- `https://api.openai.com/v1/videos/${fileId}/content`,
1111
- {
1112
- method: "GET",
1113
- headers: { Authorization: `Bearer ${apiKey}` },
1114
- }
1115
- );
1116
- if (!response.ok) {
1117
- const errorText = await response.text();
1118
- throw new Error(
1119
- `OpenAI downloadVideo failed: ${response.status} ${errorText}`
1120
- );
1121
- }
1122
- const mimeType = response.headers.get("content-type") || "video/mp4";
1123
- return { data: Buffer.from(await response.arrayBuffer()), mimeType };
1124
- }
1125
-
1126
- async uploadFile(options: FileUploadOptions): Promise<FileUploadResponse> {
1127
- const apiKey = this.apiKey || process.env.OPENAI_KEY;
1128
- if (!apiKey) throw new Error("OpenAI API key not set");
1129
- const formData = new FormData();
1130
- formData.append("purpose", "assistants");
1131
- const blob = new Blob([new Uint8Array(options.data)], {
1132
- type: options.mimeType || "application/octet-stream",
1133
- });
1134
- formData.append("file", blob, options.fileName || "upload");
1135
- const response = await fetch("https://api.openai.com/v1/files", {
1136
- method: "POST",
1137
- headers: { Authorization: `Bearer ${apiKey}` },
1138
- body: formData,
1139
- });
1140
- if (!response.ok) {
1141
- const errorText = await response.text();
1142
- throw new Error(
1143
- `OpenAI uploadFile failed: ${response.status} ${errorText}`
1144
- );
1145
- }
1146
- const data = await response.json();
1147
- return { fileId: data.id, uri: data.uri };
1148
- }
1149
-
1150
- async downloadFile(
1151
- options: FileDownloadOptions
1152
- ): Promise<FileDownloadResponse> {
1153
- const apiKey = this.apiKey || process.env.OPENAI_KEY;
1154
- if (!apiKey) throw new Error("OpenAI API key not set");
1155
- const fileId = options.fileId;
1156
- if (!fileId) throw new Error("downloadFile requires fileId");
1157
- const response = await fetch(
1158
- `https://api.openai.com/v1/files/${fileId}/content`,
1159
- {
1160
- method: "GET",
1161
- headers: { Authorization: `Bearer ${apiKey}` },
1162
- }
1163
- );
1164
- if (!response.ok) {
1165
- const errorText = await response.text();
1166
- throw new Error(
1167
- `OpenAI downloadFile failed: ${response.status} ${errorText}`
1168
- );
1169
- }
1170
- const mimeType = response.headers.get("content-type") || undefined;
1171
- const data = Buffer.from(await response.arrayBuffer());
1172
- return { data, mimeType };
1173
- }
1174
-
1175
- getContextLimit(
1176
- model: string
1177
- ): { contextLimit: number; threshold: number } | undefined {
1178
- const contextLimit = ContextLimits[model];
1179
- if (contextLimit === undefined) return undefined;
1180
- const pricing = OpenAiTextPricing[model];
1181
- // If the model has tiered pricing above 200k tokens, use 200k as the threshold
1182
- const threshold =
1183
- pricing && "input_gt_200k" in pricing ? 200_000 : contextLimit;
1184
- return { contextLimit, threshold };
1185
- }
1186
- }