@tyvm/knowhow 0.0.158 → 0.0.160

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (870) hide show
  1. package/package.json +2 -2
  2. package/ts_build/package.json +2 -2
  3. package/ts_build/src/chat/CliChatService.d.ts +2 -1
  4. package/ts_build/src/chat/CliChatService.js +29 -3
  5. package/ts_build/src/chat/CliChatService.js.map +1 -1
  6. package/ts_build/src/chat/modules/AgentModule.js +21 -17
  7. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  8. package/ts_build/src/chat/renderer/ConsoleRenderer.js +32 -25
  9. package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
  10. package/ts_build/src/logger.d.ts +1 -0
  11. package/ts_build/src/logger.js +13 -1
  12. package/ts_build/src/logger.js.map +1 -1
  13. package/ts_build/src/utils/InputQueueManager.d.ts +8 -1
  14. package/ts_build/src/utils/InputQueueManager.js +72 -2
  15. package/ts_build/src/utils/InputQueueManager.js.map +1 -1
  16. package/ts_build/src/utils/index.d.ts +3 -1
  17. package/ts_build/src/utils/index.js +11 -3
  18. package/ts_build/src/utils/index.js.map +1 -1
  19. package/CONFIG.md +0 -429
  20. package/PROCESSING.md +0 -450
  21. package/WORKER.md +0 -260
  22. package/autodoc/README.md +0 -324
  23. package/autodoc/chat-guide.md +0 -444
  24. package/autodoc/cli-reference.md +0 -720
  25. package/autodoc/config-reference.md +0 -642
  26. package/autodoc/embeddings-guide.md +0 -467
  27. package/autodoc/generate-guide.md +0 -437
  28. package/autodoc/language-plugin-guide.md +0 -417
  29. package/autodoc/modules-guide.md +0 -379
  30. package/autodoc/plugins-guide.md +0 -721
  31. package/autodoc/quickstart-guide.md +0 -126
  32. package/autodoc/skills-guide.md +0 -584
  33. package/autodoc/worker-guide.md +0 -519
  34. package/docs/input-queue-manager.md +0 -142
  35. package/docs/multi-worker-management.md +0 -142
  36. package/docs/shell-commands.md +0 -174
  37. package/jest.config.js +0 -19
  38. package/jest.manual.config.js +0 -19
  39. package/scripts/README.md +0 -119
  40. package/scripts/build-for-node.sh +0 -148
  41. package/scripts/cache-miss-debug.ts +0 -365
  42. package/scripts/check-isolated-deps.sh +0 -69
  43. package/scripts/check-model-pricing.ts +0 -509
  44. package/scripts/compare-openrouter-coverage.ts +0 -576
  45. package/scripts/migrate-usage-json.js +0 -147
  46. package/scripts/publish.sh +0 -86
  47. package/scripts/restore_keys.sh +0 -59
  48. package/scripts/test-repetition-hint.ts +0 -302
  49. package/scripts/unset_keys.sh +0 -60
  50. package/src/agents/base/base.ts +0 -1963
  51. package/src/agents/base/prompt.ts +0 -55
  52. package/src/agents/configurable/ConfigAgent.ts +0 -24
  53. package/src/agents/developer/developer.ts +0 -76
  54. package/src/agents/historyRollback.ts +0 -36
  55. package/src/agents/index.ts +0 -52
  56. package/src/agents/interface.ts +0 -11
  57. package/src/agents/patcher/codebase.md +0 -27
  58. package/src/agents/patcher/patcher.ts +0 -131
  59. package/src/agents/researcher/researcher.ts +0 -115
  60. package/src/agents/setup/setup.ts +0 -63
  61. package/src/agents/tools/addInternalTools.ts +0 -21
  62. package/src/agents/tools/agentCall.ts +0 -34
  63. package/src/agents/tools/aiClient.ts +0 -178
  64. package/src/agents/tools/askHuman.ts +0 -10
  65. package/src/agents/tools/callPlugin.ts +0 -10
  66. package/src/agents/tools/connectAgent.ts +0 -355
  67. package/src/agents/tools/embeddingSearch.ts +0 -6
  68. package/src/agents/tools/execCommand.ts +0 -162
  69. package/src/agents/tools/fileSearch.ts +0 -35
  70. package/src/agents/tools/finalAnswer.ts +0 -4
  71. package/src/agents/tools/googleSearch.ts +0 -243
  72. package/src/agents/tools/index.ts +0 -33
  73. package/src/agents/tools/language/definitions.ts +0 -105
  74. package/src/agents/tools/language/index.ts +0 -20
  75. package/src/agents/tools/lazy/definitions.ts +0 -72
  76. package/src/agents/tools/lazy/disableTools.ts +0 -16
  77. package/src/agents/tools/lazy/enableTools.ts +0 -16
  78. package/src/agents/tools/lazy/index.ts +0 -3
  79. package/src/agents/tools/lazy/listAvailableTools.ts +0 -17
  80. package/src/agents/tools/lintFile.ts +0 -19
  81. package/src/agents/tools/list.ts +0 -739
  82. package/src/agents/tools/loadImageAsBase64.ts +0 -83
  83. package/src/agents/tools/loadWebpage.ts +0 -19
  84. package/src/agents/tools/mcp/connectMcpServer.ts +0 -40
  85. package/src/agents/tools/mcp/definitions.ts +0 -67
  86. package/src/agents/tools/mcp/disconnectMcpServer.ts +0 -40
  87. package/src/agents/tools/mcp/index.ts +0 -3
  88. package/src/agents/tools/mcp/listAvailableMcpServers.ts +0 -28
  89. package/src/agents/tools/minimal/callTool.ts +0 -45
  90. package/src/agents/tools/minimal/definitions.ts +0 -50
  91. package/src/agents/tools/minimal/index.ts +0 -3
  92. package/src/agents/tools/minimal/inspectTools.ts +0 -27
  93. package/src/agents/tools/modifyFile.ts +0 -53
  94. package/src/agents/tools/observe.ts +0 -247
  95. package/src/agents/tools/patch.ts +0 -1287
  96. package/src/agents/tools/readBlocks.ts +0 -83
  97. package/src/agents/tools/readFile.ts +0 -105
  98. package/src/agents/tools/replyToParent.ts +0 -123
  99. package/src/agents/tools/runGenerate.ts +0 -210
  100. package/src/agents/tools/scanFile.ts +0 -16
  101. package/src/agents/tools/sendAgentMessage.ts +0 -139
  102. package/src/agents/tools/skills.ts +0 -79
  103. package/src/agents/tools/startAgentTask.ts +0 -393
  104. package/src/agents/tools/stringReplace.ts +0 -105
  105. package/src/agents/tools/textSearch.ts +0 -128
  106. package/src/agents/tools/types/fileblock.ts +0 -5
  107. package/src/agents/tools/visionTool.ts +0 -35
  108. package/src/agents/tools/waitForAgentCompleted.ts +0 -270
  109. package/src/agents/tools/writeFile.ts +0 -106
  110. package/src/agents/tools/ycmd/client.ts +0 -608
  111. package/src/agents/tools/ycmd/definitions.ts +0 -294
  112. package/src/agents/tools/ycmd/detection.ts +0 -211
  113. package/src/agents/tools/ycmd/index.ts +0 -11
  114. package/src/agents/tools/ycmd/installer.ts +0 -251
  115. package/src/agents/tools/ycmd/server.ts +0 -545
  116. package/src/agents/tools/ycmd/serverManager.ts +0 -316
  117. package/src/agents/tools/ycmd/tools/completion.ts +0 -113
  118. package/src/agents/tools/ycmd/tools/diagnostics.ts +0 -166
  119. package/src/agents/tools/ycmd/tools/getLocations.ts +0 -173
  120. package/src/agents/tools/ycmd/tools/goto.ts +0 -169
  121. package/src/agents/tools/ycmd/tools/refactor.ts +0 -204
  122. package/src/agents/tools/ycmd/tools/signature.ts +0 -174
  123. package/src/agents/tools/ycmd/tools/start.ts +0 -95
  124. package/src/agents/tools/ycmd/utils/pathUtils.ts +0 -59
  125. package/src/ai.ts +0 -306
  126. package/src/auth/browserLogin.ts +0 -406
  127. package/src/auth/environmentAuth.ts +0 -51
  128. package/src/auth/errors.ts +0 -6
  129. package/src/auth/jwtStore.ts +0 -70
  130. package/src/auth/keyAuth.ts +0 -142
  131. package/src/auth/keyManager.ts +0 -331
  132. package/src/auth/registerIdentity.ts +0 -67
  133. package/src/auth/spinner.ts +0 -23
  134. package/src/chat/CliChatService.ts +0 -438
  135. package/src/chat/modules/AgentModule.ts +0 -1664
  136. package/src/chat/modules/AskModule.ts +0 -98
  137. package/src/chat/modules/BaseChatModule.ts +0 -65
  138. package/src/chat/modules/ClipboardImageModule.ts +0 -136
  139. package/src/chat/modules/CustomCommandsModule.ts +0 -80
  140. package/src/chat/modules/InternalChatModule.ts +0 -216
  141. package/src/chat/modules/RemoteSyncModule.ts +0 -482
  142. package/src/chat/modules/RendererModule.ts +0 -139
  143. package/src/chat/modules/SearchModule.ts +0 -168
  144. package/src/chat/modules/SessionsModule.ts +0 -969
  145. package/src/chat/modules/SetupModule.ts +0 -185
  146. package/src/chat/modules/ShellCommandModule.ts +0 -98
  147. package/src/chat/modules/SystemModule.ts +0 -161
  148. package/src/chat/modules/ToolCommandModule.ts +0 -102
  149. package/src/chat/modules/VoiceModule.ts +0 -70
  150. package/src/chat/modules/index.ts +0 -8
  151. package/src/chat/renderer/CompactRenderer.ts +0 -229
  152. package/src/chat/renderer/ConsoleRenderer.ts +0 -160
  153. package/src/chat/renderer/FancyRenderer.ts +0 -440
  154. package/src/chat/renderer/PlainRenderer.ts +0 -218
  155. package/src/chat/renderer/index.ts +0 -6
  156. package/src/chat/renderer/loadRenderer.ts +0 -316
  157. package/src/chat/renderer/messagesToRenderEvents.ts +0 -96
  158. package/src/chat/renderer/types.ts +0 -99
  159. package/src/chat/types.ts +0 -146
  160. package/src/chat.ts +0 -140
  161. package/src/cli.ts +0 -180
  162. package/src/clients/anthropic.ts +0 -772
  163. package/src/clients/attribution.ts +0 -53
  164. package/src/clients/cerebras.ts +0 -10
  165. package/src/clients/contextLimits.ts +0 -263
  166. package/src/clients/copilot.ts +0 -23
  167. package/src/clients/deepseek.ts +0 -16
  168. package/src/clients/fireworks.ts +0 -71
  169. package/src/clients/gemini.ts +0 -1169
  170. package/src/clients/github.ts +0 -16
  171. package/src/clients/groq.ts +0 -15
  172. package/src/clients/http.ts +0 -719
  173. package/src/clients/index.ts +0 -1153
  174. package/src/clients/knowhow.ts +0 -130
  175. package/src/clients/knowhowMcp.ts +0 -118
  176. package/src/clients/llama.ts +0 -16
  177. package/src/clients/meta.ts +0 -27
  178. package/src/clients/mistral.ts +0 -16
  179. package/src/clients/nvidia.ts +0 -16
  180. package/src/clients/openai.ts +0 -1186
  181. package/src/clients/openrouter.ts +0 -24
  182. package/src/clients/pricing/anthropic.ts +0 -149
  183. package/src/clients/pricing/cerebras.ts +0 -11
  184. package/src/clients/pricing/copilot.ts +0 -60
  185. package/src/clients/pricing/deepseek.ts +0 -15
  186. package/src/clients/pricing/fireworks.ts +0 -182
  187. package/src/clients/pricing/github.ts +0 -69
  188. package/src/clients/pricing/google.ts +0 -385
  189. package/src/clients/pricing/groq.ts +0 -56
  190. package/src/clients/pricing/index.ts +0 -44
  191. package/src/clients/pricing/llama.ts +0 -18
  192. package/src/clients/pricing/meta.ts +0 -12
  193. package/src/clients/pricing/mistral.ts +0 -34
  194. package/src/clients/pricing/models.ts +0 -25
  195. package/src/clients/pricing/nvidia.ts +0 -102
  196. package/src/clients/pricing/openai.ts +0 -409
  197. package/src/clients/pricing/openrouter.ts +0 -36
  198. package/src/clients/pricing/qwen.ts +0 -80
  199. package/src/clients/pricing/types.ts +0 -125
  200. package/src/clients/pricing/xai.ts +0 -137
  201. package/src/clients/qwen.ts +0 -16
  202. package/src/clients/responseMetadata.ts +0 -221
  203. package/src/clients/types.ts +0 -531
  204. package/src/clients/withRetry.ts +0 -89
  205. package/src/clients/xai.ts +0 -693
  206. package/src/cloudWorker.ts +0 -394
  207. package/src/commands/agent.ts +0 -342
  208. package/src/commands/agents.ts +0 -1037
  209. package/src/commands/behaviors.ts +0 -47
  210. package/src/commands/convert.ts +0 -291
  211. package/src/commands/hash.ts +0 -179
  212. package/src/commands/mcp.ts +0 -743
  213. package/src/commands/misc.ts +0 -373
  214. package/src/commands/modules.ts +0 -704
  215. package/src/commands/processes.ts +0 -248
  216. package/src/commands/remote.ts +0 -77
  217. package/src/commands/replay.ts +0 -503
  218. package/src/commands/sandbox.ts +0 -566
  219. package/src/commands/services.ts +0 -168
  220. package/src/commands/skills.ts +0 -107
  221. package/src/commands/workers.ts +0 -168
  222. package/src/config.ts +0 -468
  223. package/src/conversion.ts +0 -69
  224. package/src/dataset/diffs/README.md +0 -12
  225. package/src/dataset/diffs/debug-errors.ts +0 -29
  226. package/src/dataset/diffs/debug.ts +0 -64
  227. package/src/dataset/diffs/generate.ts +0 -71
  228. package/src/dataset/diffs/jsonl.ts +0 -53
  229. package/src/dataset/diffs/test.ts +0 -194
  230. package/src/embeddings.ts +0 -494
  231. package/src/fileSync.ts +0 -369
  232. package/src/generate.ts +0 -529
  233. package/src/hashes.ts +0 -180
  234. package/src/index.ts +0 -261
  235. package/src/logger.ts +0 -197
  236. package/src/login.ts +0 -209
  237. package/src/microphone.ts +0 -141
  238. package/src/migrations.ts +0 -151
  239. package/src/plugins/AgentsMdPlugin.ts +0 -118
  240. package/src/plugins/GitPlugin.ts +0 -598
  241. package/src/plugins/LinterPlugin.ts +0 -214
  242. package/src/plugins/PluginBase.ts +0 -70
  243. package/src/plugins/SkillsPlugin.ts +0 -37
  244. package/src/plugins/embedding.ts +0 -82
  245. package/src/plugins/exec.ts +0 -70
  246. package/src/plugins/language.ts +0 -290
  247. package/src/plugins/plugins.ts +0 -175
  248. package/src/plugins/tmux.ts +0 -132
  249. package/src/plugins/types.ts +0 -36
  250. package/src/plugins/url.ts +0 -101
  251. package/src/plugins/vim.ts +0 -89
  252. package/src/processes/ProcessManager.ts +0 -96
  253. package/src/processes/managedProcessShim.ts +0 -138
  254. package/src/processors/Base64ImageDetector.ts +0 -502
  255. package/src/processors/CustomVariables.ts +0 -693
  256. package/src/processors/GemmaToolProcessor.ts +0 -163
  257. package/src/processors/HarmonyToolProcessor.ts +0 -264
  258. package/src/processors/JsonCompressor.ts +0 -510
  259. package/src/processors/MinimalToolsMessageProcessor.ts +0 -113
  260. package/src/processors/TokenCompressor.ts +0 -620
  261. package/src/processors/ToolResponseCache.ts +0 -322
  262. package/src/processors/XmlToolCallProcessor.ts +0 -533
  263. package/src/processors/index.ts +0 -14
  264. package/src/processors/tools/boundedToolResponse.ts +0 -49
  265. package/src/processors/tools/grepToolResponse.ts +0 -230
  266. package/src/processors/tools/index.ts +0 -23
  267. package/src/processors/tools/jqToolResponse.ts +0 -159
  268. package/src/processors/tools/listStoredToolResponses.ts +0 -124
  269. package/src/processors/tools/tailToolResponse.ts +0 -148
  270. package/src/prompts/BasicCodeDocumenter.ts +0 -1
  271. package/src/prompts/BasicProjectDocumenter.ts +0 -1
  272. package/src/prompts/EmbeddingSeachHelper.ts +0 -1
  273. package/src/prompts/KnowhowConfigExamples.ts +0 -376
  274. package/src/prompts/index.ts +0 -9
  275. package/src/remotes.ts +0 -110
  276. package/src/server/index.ts +0 -16
  277. package/src/services/AgentService.ts +0 -134
  278. package/src/services/AgentSyncFs.ts +0 -775
  279. package/src/services/AgentSyncKnowhowWeb.ts +0 -389
  280. package/src/services/BehaviorsService.ts +0 -466
  281. package/src/services/DockerService.ts +0 -511
  282. package/src/services/EmbeddingService.ts +0 -427
  283. package/src/services/EmbeddingsService.ts +0 -73
  284. package/src/services/EventService.ts +0 -279
  285. package/src/services/ExtensionsService.ts +0 -25
  286. package/src/services/KnowhowClient.ts +0 -928
  287. package/src/services/LazyToolsService.ts +0 -210
  288. package/src/services/Mcp.ts +0 -727
  289. package/src/services/McpServer.ts +0 -155
  290. package/src/services/McpWebsocketTransport.ts +0 -87
  291. package/src/services/MediaProcessorService.ts +0 -669
  292. package/src/services/MessageProcessor.ts +0 -114
  293. package/src/services/MinimalToolsService.ts +0 -177
  294. package/src/services/RuntimeReloadService.ts +0 -31
  295. package/src/services/S3.ts +0 -61
  296. package/src/services/SessionManager.ts +0 -358
  297. package/src/services/SkillsService.ts +0 -822
  298. package/src/services/SyncedAgentWatcher.ts +0 -124
  299. package/src/services/SyncerService.ts +0 -191
  300. package/src/services/TaskRegistry.ts +0 -110
  301. package/src/services/Tools.ts +0 -580
  302. package/src/services/TracingService.ts +0 -116
  303. package/src/services/conversion/ConversionService.ts +0 -757
  304. package/src/services/conversion/index.ts +0 -2
  305. package/src/services/conversion/types.ts +0 -87
  306. package/src/services/flags.ts +0 -51
  307. package/src/services/index.ts +0 -117
  308. package/src/services/modules/computerUse.ts +0 -218
  309. package/src/services/modules/index.ts +0 -314
  310. package/src/services/modules/types.ts +0 -109
  311. package/src/services/types.ts +0 -60
  312. package/src/services/watchers/FsSyncer.ts +0 -199
  313. package/src/services/watchers/RemoteSyncer.ts +0 -196
  314. package/src/services/watchers/index.ts +0 -2
  315. package/src/tunnel.ts +0 -243
  316. package/src/types.ts +0 -282
  317. package/src/util/Trace.ts +0 -236
  318. package/src/utils/InputQueueManager.ts +0 -493
  319. package/src/utils/errors.ts +0 -0
  320. package/src/utils/http.ts +0 -150
  321. package/src/utils/index.ts +0 -111
  322. package/src/worker.ts +0 -696
  323. package/src/workerRegistry.ts +0 -152
  324. package/src/workers/auth/PasskeySetup.ts +0 -181
  325. package/src/workers/auth/WorkerPasskeyAuth.ts +0 -190
  326. package/src/workers/auth/WsMiddleware.ts +0 -99
  327. package/src/workers/auth/authMiddleware.ts +0 -104
  328. package/src/workers/auth/types.ts +0 -70
  329. package/src/workers/tools/getChallenge.ts +0 -33
  330. package/src/workers/tools/index.ts +0 -20
  331. package/src/workers/tools/listAllowedPorts.ts +0 -30
  332. package/src/workers/tools/lock.ts +0 -31
  333. package/src/workers/tools/reloadConfig.ts +0 -84
  334. package/src/workers/tools/unlock.ts +0 -116
  335. package/tests/XmlToolCallProcessor.test.ts +0 -468
  336. package/tests/agents/interrupt.test.ts +0 -200
  337. package/tests/agents/observe-base.test.ts +0 -183
  338. package/tests/agents/tools/connectAgent.test.ts +0 -138
  339. package/tests/agents/tools/observe.test.ts +0 -179
  340. package/tests/agents/tools/readFile.test.ts +0 -88
  341. package/tests/agents/tools/replyToParent.test.ts +0 -125
  342. package/tests/agents/tools/sendAgentMessage.test.ts +0 -99
  343. package/tests/agents/tools/waitForAgentCompleted.test.ts +0 -147
  344. package/tests/chat/detach-attach-rendering.test.ts +0 -315
  345. package/tests/clients/AIClient.test.ts +0 -668
  346. package/tests/clients/anthropic.test.ts +0 -202
  347. package/tests/clients/contextLimits.test.ts +0 -97
  348. package/tests/clients/fireworks.test.ts +0 -65
  349. package/tests/clients/openai.images.test.ts +0 -105
  350. package/tests/clients/pricing.test.ts +0 -206
  351. package/tests/clients/reasoningEffort.test.ts +0 -140
  352. package/tests/compressor/bigstring.test.ts +0 -450
  353. package/tests/compressor/bigstring.txt +0 -1
  354. package/tests/compressor/githubjson.txt +0 -1
  355. package/tests/compressor/toolResponseCache.test.ts +0 -304
  356. package/tests/compressor/usageBase64.json +0 -159
  357. package/tests/compressor/usageBase64.test.ts +0 -175
  358. package/tests/fixtures/fake-secret.txt +0 -1
  359. package/tests/manual/agent-events/run-test.ts +0 -203
  360. package/tests/manual/browser-login/README.md +0 -189
  361. package/tests/manual/browser-login/test_browser_login_basic.ts +0 -115
  362. package/tests/manual/browser-login/test_cli_integration.ts +0 -169
  363. package/tests/manual/browser-login/test_cross_platform_browser.ts +0 -186
  364. package/tests/manual/browser-login/test_error_scenarios.ts +0 -223
  365. package/tests/manual/cli/no-env.sh +0 -274
  366. package/tests/manual/clients/completions.json +0 -1151
  367. package/tests/manual/clients/completions.test.ts +0 -198
  368. package/tests/manual/file-edits/figma.test.ts +0 -3
  369. package/tests/manual/file-edits/fileblocks/readwrite.test.ts +0 -100
  370. package/tests/manual/file-edits/patching/input.txt +0 -145
  371. package/tests/manual/file-edits/patching/output.txt +0 -145
  372. package/tests/manual/file-edits/patching/patch.txt +0 -15
  373. package/tests/manual/file-edits/patching/unseen.txt +0 -80
  374. package/tests/manual/file-edits/patching.test.ts +0 -139
  375. package/tests/manual/modalities/README.md +0 -157
  376. package/tests/manual/modalities/google.modalities.test.ts +0 -335
  377. package/tests/manual/modalities/openai.modalities.test.ts +0 -329
  378. package/tests/manual/modalities/streaming.test.ts +0 -260
  379. package/tests/manual/modalities/xai.modalities.test.ts +0 -294
  380. package/tests/manual/test-concurrent-ask.ts +0 -43
  381. package/tests/manual/ycmd/debug_diagnostics_test.ts +0 -127
  382. package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +0 -26
  383. package/tests/manual/ycmd/fixtures/file_change_test.ts +0 -17
  384. package/tests/manual/ycmd/minimal_advanced_test.ts +0 -108
  385. package/tests/manual/ycmd/simple_diagnostics_test.ts +0 -61
  386. package/tests/manual/ycmd/simple_test.ts +0 -74
  387. package/tests/manual/ycmd/test-typescript-sample.ts +0 -34
  388. package/tests/manual/ycmd/test_advanced_features.ts +0 -407
  389. package/tests/manual/ycmd/test_advanced_with_tools.ts +0 -320
  390. package/tests/manual/ycmd/test_comprehensive_typescript.ts +0 -179
  391. package/tests/manual/ycmd/test_diagnostics_file_changes.ts +0 -249
  392. package/tests/manual/ycmd/test_diagnostics_fix.ts +0 -99
  393. package/tests/manual/ycmd/test_diagnostics_simple.ts +0 -100
  394. package/tests/manual/ycmd/test_diagnostics_timing.ts +0 -120
  395. package/tests/manual/ycmd/test_discover_commands.ts +0 -310
  396. package/tests/manual/ycmd/test_endpoints.ts +0 -115
  397. package/tests/manual/ycmd/test_final_comprehensive.ts +0 -218
  398. package/tests/manual/ycmd/test_final_validation.ts +0 -150
  399. package/tests/manual/ycmd/test_implementation.js +0 -42
  400. package/tests/manual/ycmd/test_individual_ycmd_tool.ts +0 -39
  401. package/tests/manual/ycmd/test_server_manager.ts +0 -52
  402. package/tests/manual/ycmd/test_simple_debug.ts +0 -86
  403. package/tests/manual/ycmd/test_tsserver_workflow.js +0 -83
  404. package/tests/manual/ycmd/test_tsserver_workflow.ts +0 -122
  405. package/tests/manual/ycmd/test_typescript_simple.ts +0 -48
  406. package/tests/manual/ycmd/test_typescript_ycmd.ts +0 -105
  407. package/tests/manual/ycmd/test_workspace_config.ts +0 -90
  408. package/tests/manual/ycmd/test_ycmd_auto_start.ts +0 -137
  409. package/tests/manual/ycmd/test_ycmd_comprehensive.ts +0 -73
  410. package/tests/manual/ycmd/test_ycmd_connection.py +0 -10
  411. package/tests/manual/ycmd/test_ycmd_direct.ts +0 -142
  412. package/tests/manual/ycmd/test_ycmd_experiment.ts +0 -48
  413. package/tests/manual/ycmd/test_ycmd_final.ts +0 -200
  414. package/tests/manual/ycmd/test_ycmd_fixed.py +0 -18
  415. package/tests/manual/ycmd/test_ycmd_integration.ts +0 -112
  416. package/tests/manual/ycmd/test_ycmd_simple.ts +0 -45
  417. package/tests/manual/ycmd/test_ycmd_usage.py +0 -27
  418. package/tests/manual/ycmd/working_simple_test.ts +0 -134
  419. package/tests/patching/corrupted.test.ts +0 -78
  420. package/tests/patching/fixtures/transcript-mangles/agent-sync-fs-nested-catch.json +0 -9
  421. package/tests/patching/fixtures/transcript-mangles/automation-functions-crossed.json +0 -9
  422. package/tests/patching/fixtures/transcript-mangles/fruit-ninja-confirmed-retirement.json +0 -8
  423. package/tests/patching/imports.patch.txt +0 -11
  424. package/tests/patching/imports.test.ts +0 -43
  425. package/tests/patching/imports.txt +0 -11
  426. package/tests/patching/interface.patch.txt +0 -15
  427. package/tests/patching/interface.txt +0 -7
  428. package/tests/patching/patchFileOutput.test.ts +0 -328
  429. package/tests/patching/regression-2026.test.ts +0 -752
  430. package/tests/patching/transcriptMangleRegression.test.ts +0 -125
  431. package/tests/plugins/language/languagePlugin-content-triggers.test.ts +0 -346
  432. package/tests/plugins/language/languagePlugin-integration.test.ts +0 -471
  433. package/tests/plugins/language/languagePlugin.test.ts +0 -385
  434. package/tests/processes/managedProcessShim.test.ts +0 -59
  435. package/tests/processors/Base64ImageDetector.test.ts +0 -979
  436. package/tests/processors/CustomVariables.test.ts +0 -981
  437. package/tests/processors/CustomVariablesBenchmark.test.ts +0 -237
  438. package/tests/processors/HarmonyToolProcessor.test.ts +0 -490
  439. package/tests/processors/TokenCompressor.test.ts +0 -674
  440. package/tests/processors/ToolResponseCache.test.ts +0 -864
  441. package/tests/processors/tools/boundedRetrievalTools.test.ts +0 -68
  442. package/tests/processors/tools/grepToolResponse.test.ts +0 -159
  443. package/tests/services/ConversionService.test.ts +0 -154
  444. package/tests/services/DockerService.test.ts +0 -24
  445. package/tests/services/Tools.test.ts +0 -1738
  446. package/tests/services/ToolsService.setFunction.test.ts +0 -68
  447. package/tests/services/WorkerReloadConfig.test.ts +0 -141
  448. package/tests/test.spec.ts +0 -163
  449. package/tests/unit/InputQueueManager.test.ts +0 -174
  450. package/tests/unit/McpWebsocketTransport.test.ts +0 -56
  451. package/tests/unit/agents/historyRollback.test.ts +0 -53
  452. package/tests/unit/agents/tools/loadImageAsBase64.test.ts +0 -44
  453. package/tests/unit/auth/jwtStore.test.ts +0 -55
  454. package/tests/unit/auth/keyAuth.test.ts +0 -152
  455. package/tests/unit/auth/keyManager.test.ts +0 -130
  456. package/tests/unit/auth/registerIdentity.test.ts +0 -99
  457. package/tests/unit/chat/ToolCommandModule.test.ts +0 -71
  458. package/tests/unit/chat/historyCommandArgs.test.ts +0 -37
  459. package/tests/unit/clients/AIClient.test.ts +0 -454
  460. package/tests/unit/clients/anthropic.responseMetadata.test.ts +0 -81
  461. package/tests/unit/clients/attribution.test.ts +0 -185
  462. package/tests/unit/clients/http.responseMetadata.test.ts +0 -86
  463. package/tests/unit/clients/openai.responseMetadata.test.ts +0 -90
  464. package/tests/unit/clients/responseMetadata.test.ts +0 -123
  465. package/tests/unit/clients/withRetry.test.ts +0 -319
  466. package/tests/unit/commands/agents.test.ts +0 -111
  467. package/tests/unit/commands/github-credentials.test.ts +0 -210
  468. package/tests/unit/commands/misc.test.ts +0 -85
  469. package/tests/unit/commands/remote.test.ts +0 -79
  470. package/tests/unit/commands/sandbox.test.ts +0 -350
  471. package/tests/unit/hashes.test.ts +0 -23
  472. package/tests/unit/input-queue.test.ts +0 -80
  473. package/tests/unit/login.test.ts +0 -218
  474. package/tests/unit/modules/moduleLoading.test.ts +0 -305
  475. package/tests/unit/plugins/pluginLoading.test.ts +0 -97
  476. package/tests/unit/services/AgentSyncKnowhowWeb.test.ts +0 -38
  477. package/tests/unit/services/KnowhowClient.test.ts +0 -84
  478. package/tests/unit/services/LazyToolsService.test.ts +0 -53
  479. package/tests/unit/services/Mcp.test.ts +0 -56
  480. package/tests/unit/services/MinimalToolsService.test.ts +0 -424
  481. package/tests/unit/services/RuntimeReloadService.test.ts +0 -29
  482. package/tests/unit/services/SessionManager.test.ts +0 -43
  483. package/tests/unit/services/SyncedAgentWatcher.test.ts +0 -89
  484. package/tests/unit/services/SyncerService.test.ts +0 -45
  485. package/tests/unit/tunnel.test.ts +0 -51
  486. package/tests/unit/util/Trace.test.ts +0 -119
  487. package/tests/unit/utils/http.test.ts +0 -43
  488. package/ts_build/tests/XmlToolCallProcessor.test.d.ts +0 -1
  489. package/ts_build/tests/XmlToolCallProcessor.test.js +0 -376
  490. package/ts_build/tests/XmlToolCallProcessor.test.js.map +0 -1
  491. package/ts_build/tests/agents/interrupt.test.d.ts +0 -14
  492. package/ts_build/tests/agents/interrupt.test.js +0 -136
  493. package/ts_build/tests/agents/interrupt.test.js.map +0 -1
  494. package/ts_build/tests/agents/observe-base.test.d.ts +0 -1
  495. package/ts_build/tests/agents/observe-base.test.js +0 -149
  496. package/ts_build/tests/agents/observe-base.test.js.map +0 -1
  497. package/ts_build/tests/agents/tools/connectAgent.test.d.ts +0 -1
  498. package/ts_build/tests/agents/tools/connectAgent.test.js +0 -142
  499. package/ts_build/tests/agents/tools/connectAgent.test.js.map +0 -1
  500. package/ts_build/tests/agents/tools/observe.test.d.ts +0 -1
  501. package/ts_build/tests/agents/tools/observe.test.js +0 -148
  502. package/ts_build/tests/agents/tools/observe.test.js.map +0 -1
  503. package/ts_build/tests/agents/tools/readFile.test.d.ts +0 -1
  504. package/ts_build/tests/agents/tools/readFile.test.js +0 -90
  505. package/ts_build/tests/agents/tools/readFile.test.js.map +0 -1
  506. package/ts_build/tests/agents/tools/replyToParent.test.d.ts +0 -1
  507. package/ts_build/tests/agents/tools/replyToParent.test.js +0 -116
  508. package/ts_build/tests/agents/tools/replyToParent.test.js.map +0 -1
  509. package/ts_build/tests/agents/tools/sendAgentMessage.test.d.ts +0 -1
  510. package/ts_build/tests/agents/tools/sendAgentMessage.test.js +0 -112
  511. package/ts_build/tests/agents/tools/sendAgentMessage.test.js.map +0 -1
  512. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.d.ts +0 -1
  513. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js +0 -147
  514. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js.map +0 -1
  515. package/ts_build/tests/chat/detach-attach-rendering.test.d.ts +0 -1
  516. package/ts_build/tests/chat/detach-attach-rendering.test.js +0 -168
  517. package/ts_build/tests/chat/detach-attach-rendering.test.js.map +0 -1
  518. package/ts_build/tests/clients/AIClient.test.d.ts +0 -1
  519. package/ts_build/tests/clients/AIClient.test.js +0 -483
  520. package/ts_build/tests/clients/AIClient.test.js.map +0 -1
  521. package/ts_build/tests/clients/anthropic.test.d.ts +0 -1
  522. package/ts_build/tests/clients/anthropic.test.js +0 -159
  523. package/ts_build/tests/clients/anthropic.test.js.map +0 -1
  524. package/ts_build/tests/clients/contextLimits.test.d.ts +0 -1
  525. package/ts_build/tests/clients/contextLimits.test.js +0 -69
  526. package/ts_build/tests/clients/contextLimits.test.js.map +0 -1
  527. package/ts_build/tests/clients/fireworks.test.d.ts +0 -1
  528. package/ts_build/tests/clients/fireworks.test.js +0 -65
  529. package/ts_build/tests/clients/fireworks.test.js.map +0 -1
  530. package/ts_build/tests/clients/openai.images.test.d.ts +0 -1
  531. package/ts_build/tests/clients/openai.images.test.js +0 -94
  532. package/ts_build/tests/clients/openai.images.test.js.map +0 -1
  533. package/ts_build/tests/clients/pricing.test.d.ts +0 -1
  534. package/ts_build/tests/clients/pricing.test.js +0 -124
  535. package/ts_build/tests/clients/pricing.test.js.map +0 -1
  536. package/ts_build/tests/clients/reasoningEffort.test.d.ts +0 -1
  537. package/ts_build/tests/clients/reasoningEffort.test.js +0 -116
  538. package/ts_build/tests/clients/reasoningEffort.test.js.map +0 -1
  539. package/ts_build/tests/compressor/bigstring.test.d.ts +0 -1
  540. package/ts_build/tests/compressor/bigstring.test.js +0 -275
  541. package/ts_build/tests/compressor/bigstring.test.js.map +0 -1
  542. package/ts_build/tests/compressor/toolResponseCache.test.d.ts +0 -1
  543. package/ts_build/tests/compressor/toolResponseCache.test.js +0 -250
  544. package/ts_build/tests/compressor/toolResponseCache.test.js.map +0 -1
  545. package/ts_build/tests/compressor/usageBase64.test.d.ts +0 -1
  546. package/ts_build/tests/compressor/usageBase64.test.js +0 -109
  547. package/ts_build/tests/compressor/usageBase64.test.js.map +0 -1
  548. package/ts_build/tests/manual/agent-events/run-test.d.ts +0 -2
  549. package/ts_build/tests/manual/agent-events/run-test.js +0 -148
  550. package/ts_build/tests/manual/agent-events/run-test.js.map +0 -1
  551. package/ts_build/tests/manual/browser-login/test_browser_login_basic.d.ts +0 -2
  552. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js +0 -118
  553. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js.map +0 -1
  554. package/ts_build/tests/manual/browser-login/test_cli_integration.d.ts +0 -2
  555. package/ts_build/tests/manual/browser-login/test_cli_integration.js +0 -163
  556. package/ts_build/tests/manual/browser-login/test_cli_integration.js.map +0 -1
  557. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.d.ts +0 -2
  558. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js +0 -169
  559. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js.map +0 -1
  560. package/ts_build/tests/manual/browser-login/test_error_scenarios.d.ts +0 -2
  561. package/ts_build/tests/manual/browser-login/test_error_scenarios.js +0 -207
  562. package/ts_build/tests/manual/browser-login/test_error_scenarios.js.map +0 -1
  563. package/ts_build/tests/manual/clients/completions.test.d.ts +0 -1
  564. package/ts_build/tests/manual/clients/completions.test.js +0 -151
  565. package/ts_build/tests/manual/clients/completions.test.js.map +0 -1
  566. package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -0
  567. package/ts_build/tests/manual/file-edits/figma.test.js +0 -2
  568. package/ts_build/tests/manual/file-edits/figma.test.js.map +0 -1
  569. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.d.ts +0 -1
  570. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js +0 -110
  571. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js.map +0 -1
  572. package/ts_build/tests/manual/file-edits/patching.test.d.ts +0 -1
  573. package/ts_build/tests/manual/file-edits/patching.test.js +0 -129
  574. package/ts_build/tests/manual/file-edits/patching.test.js.map +0 -1
  575. package/ts_build/tests/manual/modalities/google.modalities.test.d.ts +0 -1
  576. package/ts_build/tests/manual/modalities/google.modalities.test.js +0 -262
  577. package/ts_build/tests/manual/modalities/google.modalities.test.js.map +0 -1
  578. package/ts_build/tests/manual/modalities/openai.modalities.test.d.ts +0 -1
  579. package/ts_build/tests/manual/modalities/openai.modalities.test.js +0 -262
  580. package/ts_build/tests/manual/modalities/openai.modalities.test.js.map +0 -1
  581. package/ts_build/tests/manual/modalities/streaming.test.d.ts +0 -1
  582. package/ts_build/tests/manual/modalities/streaming.test.js +0 -216
  583. package/ts_build/tests/manual/modalities/streaming.test.js.map +0 -1
  584. package/ts_build/tests/manual/modalities/xai.modalities.test.d.ts +0 -1
  585. package/ts_build/tests/manual/modalities/xai.modalities.test.js +0 -219
  586. package/ts_build/tests/manual/modalities/xai.modalities.test.js.map +0 -1
  587. package/ts_build/tests/manual/test-concurrent-ask.d.ts +0 -1
  588. package/ts_build/tests/manual/test-concurrent-ask.js +0 -22
  589. package/ts_build/tests/manual/test-concurrent-ask.js.map +0 -1
  590. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +0 -1
  591. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +0 -124
  592. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +0 -1
  593. package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +0 -2
  594. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +0 -114
  595. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +0 -1
  596. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +0 -1
  597. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +0 -84
  598. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +0 -1
  599. package/ts_build/tests/manual/ycmd/simple_test.d.ts +0 -2
  600. package/ts_build/tests/manual/ycmd/simple_test.js +0 -92
  601. package/ts_build/tests/manual/ycmd/simple_test.js.map +0 -1
  602. package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +0 -14
  603. package/ts_build/tests/manual/ycmd/test-typescript-sample.js +0 -20
  604. package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +0 -1
  605. package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +0 -2
  606. package/ts_build/tests/manual/ycmd/test_advanced_features.js +0 -306
  607. package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +0 -1
  608. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +0 -3
  609. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +0 -271
  610. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +0 -1
  611. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +0 -2
  612. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +0 -196
  613. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +0 -1
  614. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +0 -1
  615. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +0 -184
  616. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +0 -1
  617. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +0 -2
  618. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +0 -116
  619. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +0 -1
  620. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +0 -1
  621. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +0 -114
  622. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +0 -1
  623. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +0 -1
  624. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +0 -129
  625. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +0 -1
  626. package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +0 -2
  627. package/ts_build/tests/manual/ycmd/test_discover_commands.js +0 -252
  628. package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +0 -1
  629. package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +0 -2
  630. package/ts_build/tests/manual/ycmd/test_endpoints.js +0 -130
  631. package/ts_build/tests/manual/ycmd/test_endpoints.js.map +0 -1
  632. package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +0 -2
  633. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +0 -231
  634. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +0 -1
  635. package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +0 -2
  636. package/ts_build/tests/manual/ycmd/test_final_validation.js +0 -170
  637. package/ts_build/tests/manual/ycmd/test_final_validation.js.map +0 -1
  638. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +0 -2
  639. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +0 -37
  640. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +0 -1
  641. package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +0 -1
  642. package/ts_build/tests/manual/ycmd/test_server_manager.js +0 -38
  643. package/ts_build/tests/manual/ycmd/test_server_manager.js.map +0 -1
  644. package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +0 -2
  645. package/ts_build/tests/manual/ycmd/test_simple_debug.js +0 -109
  646. package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +0 -1
  647. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +0 -1
  648. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +0 -138
  649. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +0 -1
  650. package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +0 -1
  651. package/ts_build/tests/manual/ycmd/test_typescript_simple.js +0 -76
  652. package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +0 -1
  653. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +0 -1
  654. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +0 -115
  655. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +0 -1
  656. package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +0 -1
  657. package/ts_build/tests/manual/ycmd/test_workspace_config.js +0 -99
  658. package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +0 -1
  659. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +0 -2
  660. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +0 -140
  661. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +0 -1
  662. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +0 -1
  663. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +0 -93
  664. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +0 -1
  665. package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +0 -2
  666. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +0 -159
  667. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +0 -1
  668. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +0 -15
  669. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +0 -68
  670. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +0 -1
  671. package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +0 -2
  672. package/ts_build/tests/manual/ycmd/test_ycmd_final.js +0 -205
  673. package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +0 -1
  674. package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +0 -3
  675. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +0 -119
  676. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +0 -1
  677. package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +0 -2
  678. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +0 -36
  679. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +0 -1
  680. package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +0 -2
  681. package/ts_build/tests/manual/ycmd/working_simple_test.js +0 -144
  682. package/ts_build/tests/manual/ycmd/working_simple_test.js.map +0 -1
  683. package/ts_build/tests/patching/corrupted.test.d.ts +0 -1
  684. package/ts_build/tests/patching/corrupted.test.js +0 -53
  685. package/ts_build/tests/patching/corrupted.test.js.map +0 -1
  686. package/ts_build/tests/patching/imports.test.d.ts +0 -1
  687. package/ts_build/tests/patching/imports.test.js +0 -71
  688. package/ts_build/tests/patching/imports.test.js.map +0 -1
  689. package/ts_build/tests/patching/patchFileOutput.test.d.ts +0 -1
  690. package/ts_build/tests/patching/patchFileOutput.test.js +0 -269
  691. package/ts_build/tests/patching/patchFileOutput.test.js.map +0 -1
  692. package/ts_build/tests/patching/regression-2026.test.d.ts +0 -1
  693. package/ts_build/tests/patching/regression-2026.test.js +0 -528
  694. package/ts_build/tests/patching/regression-2026.test.js.map +0 -1
  695. package/ts_build/tests/patching/transcriptMangleRegression.test.d.ts +0 -1
  696. package/ts_build/tests/patching/transcriptMangleRegression.test.js +0 -104
  697. package/ts_build/tests/patching/transcriptMangleRegression.test.js.map +0 -1
  698. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.d.ts +0 -1
  699. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +0 -294
  700. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +0 -1
  701. package/ts_build/tests/plugins/language/languagePlugin-integration.test.d.ts +0 -1
  702. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +0 -343
  703. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +0 -1
  704. package/ts_build/tests/plugins/language/languagePlugin.test.d.ts +0 -1
  705. package/ts_build/tests/plugins/language/languagePlugin.test.js +0 -315
  706. package/ts_build/tests/plugins/language/languagePlugin.test.js.map +0 -1
  707. package/ts_build/tests/processes/managedProcessShim.test.d.ts +0 -1
  708. package/ts_build/tests/processes/managedProcessShim.test.js +0 -92
  709. package/ts_build/tests/processes/managedProcessShim.test.js.map +0 -1
  710. package/ts_build/tests/processors/Base64ImageDetector.test.d.ts +0 -1
  711. package/ts_build/tests/processors/Base64ImageDetector.test.js +0 -792
  712. package/ts_build/tests/processors/Base64ImageDetector.test.js.map +0 -1
  713. package/ts_build/tests/processors/CustomVariables.test.d.ts +0 -1
  714. package/ts_build/tests/processors/CustomVariables.test.js +0 -764
  715. package/ts_build/tests/processors/CustomVariables.test.js.map +0 -1
  716. package/ts_build/tests/processors/CustomVariablesBenchmark.test.d.ts +0 -1
  717. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js +0 -179
  718. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js.map +0 -1
  719. package/ts_build/tests/processors/HarmonyToolProcessor.test.d.ts +0 -1
  720. package/ts_build/tests/processors/HarmonyToolProcessor.test.js +0 -382
  721. package/ts_build/tests/processors/HarmonyToolProcessor.test.js.map +0 -1
  722. package/ts_build/tests/processors/TokenCompressor.test.d.ts +0 -1
  723. package/ts_build/tests/processors/TokenCompressor.test.js +0 -473
  724. package/ts_build/tests/processors/TokenCompressor.test.js.map +0 -1
  725. package/ts_build/tests/processors/ToolResponseCache.test.d.ts +0 -1
  726. package/ts_build/tests/processors/ToolResponseCache.test.js +0 -657
  727. package/ts_build/tests/processors/ToolResponseCache.test.js.map +0 -1
  728. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.d.ts +0 -1
  729. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js +0 -57
  730. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js.map +0 -1
  731. package/ts_build/tests/processors/tools/grepToolResponse.test.d.ts +0 -1
  732. package/ts_build/tests/processors/tools/grepToolResponse.test.js +0 -77
  733. package/ts_build/tests/processors/tools/grepToolResponse.test.js.map +0 -1
  734. package/ts_build/tests/services/ConversionService.test.d.ts +0 -1
  735. package/ts_build/tests/services/ConversionService.test.js +0 -154
  736. package/ts_build/tests/services/ConversionService.test.js.map +0 -1
  737. package/ts_build/tests/services/DockerService.test.d.ts +0 -1
  738. package/ts_build/tests/services/DockerService.test.js +0 -22
  739. package/ts_build/tests/services/DockerService.test.js.map +0 -1
  740. package/ts_build/tests/services/Tools.test.d.ts +0 -1
  741. package/ts_build/tests/services/Tools.test.js +0 -1365
  742. package/ts_build/tests/services/Tools.test.js.map +0 -1
  743. package/ts_build/tests/services/ToolsService.setFunction.test.d.ts +0 -1
  744. package/ts_build/tests/services/ToolsService.setFunction.test.js +0 -51
  745. package/ts_build/tests/services/ToolsService.setFunction.test.js.map +0 -1
  746. package/ts_build/tests/services/WorkerReloadConfig.test.d.ts +0 -1
  747. package/ts_build/tests/services/WorkerReloadConfig.test.js +0 -86
  748. package/ts_build/tests/services/WorkerReloadConfig.test.js.map +0 -1
  749. package/ts_build/tests/test.spec.d.ts +0 -1
  750. package/ts_build/tests/test.spec.js +0 -139
  751. package/ts_build/tests/test.spec.js.map +0 -1
  752. package/ts_build/tests/unit/InputQueueManager.test.d.ts +0 -1
  753. package/ts_build/tests/unit/InputQueueManager.test.js +0 -104
  754. package/ts_build/tests/unit/InputQueueManager.test.js.map +0 -1
  755. package/ts_build/tests/unit/McpWebsocketTransport.test.d.ts +0 -1
  756. package/ts_build/tests/unit/McpWebsocketTransport.test.js +0 -47
  757. package/ts_build/tests/unit/McpWebsocketTransport.test.js.map +0 -1
  758. package/ts_build/tests/unit/agents/historyRollback.test.d.ts +0 -1
  759. package/ts_build/tests/unit/agents/historyRollback.test.js +0 -42
  760. package/ts_build/tests/unit/agents/historyRollback.test.js.map +0 -1
  761. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.d.ts +0 -1
  762. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js +0 -67
  763. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js.map +0 -1
  764. package/ts_build/tests/unit/auth/jwtStore.test.d.ts +0 -1
  765. package/ts_build/tests/unit/auth/jwtStore.test.js +0 -46
  766. package/ts_build/tests/unit/auth/jwtStore.test.js.map +0 -1
  767. package/ts_build/tests/unit/auth/keyAuth.test.d.ts +0 -1
  768. package/ts_build/tests/unit/auth/keyAuth.test.js +0 -118
  769. package/ts_build/tests/unit/auth/keyAuth.test.js.map +0 -1
  770. package/ts_build/tests/unit/auth/keyManager.test.d.ts +0 -1
  771. package/ts_build/tests/unit/auth/keyManager.test.js +0 -96
  772. package/ts_build/tests/unit/auth/keyManager.test.js.map +0 -1
  773. package/ts_build/tests/unit/auth/registerIdentity.test.d.ts +0 -1
  774. package/ts_build/tests/unit/auth/registerIdentity.test.js +0 -92
  775. package/ts_build/tests/unit/auth/registerIdentity.test.js.map +0 -1
  776. package/ts_build/tests/unit/chat/ToolCommandModule.test.d.ts +0 -1
  777. package/ts_build/tests/unit/chat/ToolCommandModule.test.js +0 -61
  778. package/ts_build/tests/unit/chat/ToolCommandModule.test.js.map +0 -1
  779. package/ts_build/tests/unit/chat/historyCommandArgs.test.d.ts +0 -1
  780. package/ts_build/tests/unit/chat/historyCommandArgs.test.js +0 -29
  781. package/ts_build/tests/unit/chat/historyCommandArgs.test.js.map +0 -1
  782. package/ts_build/tests/unit/clients/AIClient.test.d.ts +0 -1
  783. package/ts_build/tests/unit/clients/AIClient.test.js +0 -342
  784. package/ts_build/tests/unit/clients/AIClient.test.js.map +0 -1
  785. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.d.ts +0 -1
  786. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js +0 -77
  787. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js.map +0 -1
  788. package/ts_build/tests/unit/clients/attribution.test.d.ts +0 -1
  789. package/ts_build/tests/unit/clients/attribution.test.js +0 -153
  790. package/ts_build/tests/unit/clients/attribution.test.js.map +0 -1
  791. package/ts_build/tests/unit/clients/http.responseMetadata.test.d.ts +0 -1
  792. package/ts_build/tests/unit/clients/http.responseMetadata.test.js +0 -77
  793. package/ts_build/tests/unit/clients/http.responseMetadata.test.js.map +0 -1
  794. package/ts_build/tests/unit/clients/openai.responseMetadata.test.d.ts +0 -1
  795. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js +0 -86
  796. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js.map +0 -1
  797. package/ts_build/tests/unit/clients/responseMetadata.test.d.ts +0 -1
  798. package/ts_build/tests/unit/clients/responseMetadata.test.js +0 -96
  799. package/ts_build/tests/unit/clients/responseMetadata.test.js.map +0 -1
  800. package/ts_build/tests/unit/clients/withRetry.test.d.ts +0 -1
  801. package/ts_build/tests/unit/clients/withRetry.test.js +0 -225
  802. package/ts_build/tests/unit/clients/withRetry.test.js.map +0 -1
  803. package/ts_build/tests/unit/commands/agents.test.d.ts +0 -1
  804. package/ts_build/tests/unit/commands/agents.test.js +0 -119
  805. package/ts_build/tests/unit/commands/agents.test.js.map +0 -1
  806. package/ts_build/tests/unit/commands/github-credentials.test.d.ts +0 -1
  807. package/ts_build/tests/unit/commands/github-credentials.test.js +0 -145
  808. package/ts_build/tests/unit/commands/github-credentials.test.js.map +0 -1
  809. package/ts_build/tests/unit/commands/misc.test.d.ts +0 -1
  810. package/ts_build/tests/unit/commands/misc.test.js +0 -70
  811. package/ts_build/tests/unit/commands/misc.test.js.map +0 -1
  812. package/ts_build/tests/unit/commands/remote.test.d.ts +0 -1
  813. package/ts_build/tests/unit/commands/remote.test.js +0 -70
  814. package/ts_build/tests/unit/commands/remote.test.js.map +0 -1
  815. package/ts_build/tests/unit/commands/sandbox.test.d.ts +0 -1
  816. package/ts_build/tests/unit/commands/sandbox.test.js +0 -258
  817. package/ts_build/tests/unit/commands/sandbox.test.js.map +0 -1
  818. package/ts_build/tests/unit/hashes.test.d.ts +0 -1
  819. package/ts_build/tests/unit/hashes.test.js +0 -25
  820. package/ts_build/tests/unit/hashes.test.js.map +0 -1
  821. package/ts_build/tests/unit/input-queue.test.d.ts +0 -1
  822. package/ts_build/tests/unit/input-queue.test.js +0 -32
  823. package/ts_build/tests/unit/input-queue.test.js.map +0 -1
  824. package/ts_build/tests/unit/login.test.d.ts +0 -1
  825. package/ts_build/tests/unit/login.test.js +0 -166
  826. package/ts_build/tests/unit/login.test.js.map +0 -1
  827. package/ts_build/tests/unit/modules/moduleLoading.test.d.ts +0 -1
  828. package/ts_build/tests/unit/modules/moduleLoading.test.js +0 -272
  829. package/ts_build/tests/unit/modules/moduleLoading.test.js.map +0 -1
  830. package/ts_build/tests/unit/plugins/pluginLoading.test.d.ts +0 -1
  831. package/ts_build/tests/unit/plugins/pluginLoading.test.js +0 -117
  832. package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +0 -1
  833. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.d.ts +0 -1
  834. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js +0 -32
  835. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js.map +0 -1
  836. package/ts_build/tests/unit/services/KnowhowClient.test.d.ts +0 -1
  837. package/ts_build/tests/unit/services/KnowhowClient.test.js +0 -69
  838. package/ts_build/tests/unit/services/KnowhowClient.test.js.map +0 -1
  839. package/ts_build/tests/unit/services/LazyToolsService.test.d.ts +0 -1
  840. package/ts_build/tests/unit/services/LazyToolsService.test.js +0 -47
  841. package/ts_build/tests/unit/services/LazyToolsService.test.js.map +0 -1
  842. package/ts_build/tests/unit/services/Mcp.test.d.ts +0 -1
  843. package/ts_build/tests/unit/services/Mcp.test.js +0 -45
  844. package/ts_build/tests/unit/services/Mcp.test.js.map +0 -1
  845. package/ts_build/tests/unit/services/MinimalToolsService.test.d.ts +0 -1
  846. package/ts_build/tests/unit/services/MinimalToolsService.test.js +0 -320
  847. package/ts_build/tests/unit/services/MinimalToolsService.test.js.map +0 -1
  848. package/ts_build/tests/unit/services/RuntimeReloadService.test.d.ts +0 -1
  849. package/ts_build/tests/unit/services/RuntimeReloadService.test.js +0 -26
  850. package/ts_build/tests/unit/services/RuntimeReloadService.test.js.map +0 -1
  851. package/ts_build/tests/unit/services/SessionManager.test.d.ts +0 -1
  852. package/ts_build/tests/unit/services/SessionManager.test.js +0 -72
  853. package/ts_build/tests/unit/services/SessionManager.test.js.map +0 -1
  854. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.d.ts +0 -1
  855. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js +0 -78
  856. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js.map +0 -1
  857. package/ts_build/tests/unit/services/SyncerService.test.d.ts +0 -1
  858. package/ts_build/tests/unit/services/SyncerService.test.js +0 -40
  859. package/ts_build/tests/unit/services/SyncerService.test.js.map +0 -1
  860. package/ts_build/tests/unit/tunnel.test.d.ts +0 -1
  861. package/ts_build/tests/unit/tunnel.test.js +0 -47
  862. package/ts_build/tests/unit/tunnel.test.js.map +0 -1
  863. package/ts_build/tests/unit/util/Trace.test.d.ts +0 -1
  864. package/ts_build/tests/unit/util/Trace.test.js +0 -107
  865. package/ts_build/tests/unit/util/Trace.test.js.map +0 -1
  866. package/ts_build/tests/unit/utils/http.test.d.ts +0 -1
  867. package/ts_build/tests/unit/utils/http.test.js +0 -69
  868. package/ts_build/tests/unit/utils/http.test.js.map +0 -1
  869. package/tsconfig.json +0 -34
  870. package/tslint.json +0 -11
@@ -1,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
- }