@tyvm/knowhow 0.0.159 → 0.0.161

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (906) hide show
  1. package/README.md +6 -6
  2. package/package.json +2 -2
  3. package/ts_build/package.json +2 -2
  4. package/ts_build/src/chat/CliChatService.d.ts +2 -1
  5. package/ts_build/src/chat/CliChatService.js +29 -3
  6. package/ts_build/src/chat/CliChatService.js.map +1 -1
  7. package/ts_build/src/chat/modules/AgentModule.js +21 -17
  8. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  9. package/ts_build/src/chat/renderer/ConsoleRenderer.js +32 -25
  10. package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
  11. package/ts_build/src/clients/anthropic.js +4 -1
  12. package/ts_build/src/clients/anthropic.js.map +1 -1
  13. package/ts_build/src/clients/contextLimits.js +13 -7
  14. package/ts_build/src/clients/contextLimits.js.map +1 -1
  15. package/ts_build/src/clients/index.js +3 -1
  16. package/ts_build/src/clients/index.js.map +1 -1
  17. package/ts_build/src/clients/openai.js +18 -5
  18. package/ts_build/src/clients/openai.js.map +1 -1
  19. package/ts_build/src/clients/pricing/anthropic.d.ts +2 -0
  20. package/ts_build/src/clients/pricing/anthropic.js +21 -1
  21. package/ts_build/src/clients/pricing/anthropic.js.map +1 -1
  22. package/ts_build/src/clients/pricing/openai.d.ts +2 -0
  23. package/ts_build/src/clients/pricing/openai.js +32 -7
  24. package/ts_build/src/clients/pricing/openai.js.map +1 -1
  25. package/ts_build/src/clients/pricing/types.d.ts +4 -0
  26. package/ts_build/src/clients/pricing/types.js.map +1 -1
  27. package/ts_build/src/clients/pricing/xai.d.ts +2 -0
  28. package/ts_build/src/clients/pricing/xai.js +13 -8
  29. package/ts_build/src/clients/pricing/xai.js.map +1 -1
  30. package/ts_build/src/clients/xai.js +20 -8
  31. package/ts_build/src/clients/xai.js.map +1 -1
  32. package/ts_build/src/commands/misc.js +15 -2
  33. package/ts_build/src/commands/misc.js.map +1 -1
  34. package/ts_build/src/logger.d.ts +1 -0
  35. package/ts_build/src/logger.js +13 -1
  36. package/ts_build/src/logger.js.map +1 -1
  37. package/ts_build/src/remotes.d.ts +2 -0
  38. package/ts_build/src/remotes.js +20 -2
  39. package/ts_build/src/remotes.js.map +1 -1
  40. package/ts_build/src/tunnel.js +7 -2
  41. package/ts_build/src/tunnel.js.map +1 -1
  42. package/ts_build/src/types.d.ts +12 -1
  43. package/ts_build/src/types.js.map +1 -1
  44. package/ts_build/src/utils/InputQueueManager.d.ts +8 -1
  45. package/ts_build/src/utils/InputQueueManager.js +74 -3
  46. package/ts_build/src/utils/InputQueueManager.js.map +1 -1
  47. package/ts_build/src/utils/index.d.ts +3 -1
  48. package/ts_build/src/utils/index.js +11 -3
  49. package/ts_build/src/utils/index.js.map +1 -1
  50. package/ts_build/src/worker.js +4 -1
  51. package/ts_build/src/worker.js.map +1 -1
  52. package/ts_build/src/workers/tools/listAllowedPorts.d.ts +2 -1
  53. package/ts_build/src/workers/tools/listAllowedPorts.js +1 -1
  54. package/ts_build/src/workers/tools/listAllowedPorts.js.map +1 -1
  55. package/CONFIG.md +0 -429
  56. package/PROCESSING.md +0 -450
  57. package/WORKER.md +0 -260
  58. package/autodoc/README.md +0 -324
  59. package/autodoc/chat-guide.md +0 -444
  60. package/autodoc/cli-reference.md +0 -720
  61. package/autodoc/config-reference.md +0 -642
  62. package/autodoc/embeddings-guide.md +0 -467
  63. package/autodoc/generate-guide.md +0 -437
  64. package/autodoc/language-plugin-guide.md +0 -417
  65. package/autodoc/modules-guide.md +0 -379
  66. package/autodoc/plugins-guide.md +0 -721
  67. package/autodoc/quickstart-guide.md +0 -126
  68. package/autodoc/skills-guide.md +0 -584
  69. package/autodoc/worker-guide.md +0 -519
  70. package/docs/input-queue-manager.md +0 -142
  71. package/docs/multi-worker-management.md +0 -142
  72. package/docs/shell-commands.md +0 -174
  73. package/jest.config.js +0 -19
  74. package/jest.manual.config.js +0 -19
  75. package/scripts/README.md +0 -119
  76. package/scripts/build-for-node.sh +0 -148
  77. package/scripts/cache-miss-debug.ts +0 -365
  78. package/scripts/check-isolated-deps.sh +0 -69
  79. package/scripts/check-model-pricing.ts +0 -509
  80. package/scripts/compare-openrouter-coverage.ts +0 -576
  81. package/scripts/migrate-usage-json.js +0 -147
  82. package/scripts/publish.sh +0 -86
  83. package/scripts/restore_keys.sh +0 -59
  84. package/scripts/test-repetition-hint.ts +0 -302
  85. package/scripts/unset_keys.sh +0 -60
  86. package/src/agents/base/base.ts +0 -1963
  87. package/src/agents/base/prompt.ts +0 -55
  88. package/src/agents/configurable/ConfigAgent.ts +0 -24
  89. package/src/agents/developer/developer.ts +0 -76
  90. package/src/agents/historyRollback.ts +0 -36
  91. package/src/agents/index.ts +0 -52
  92. package/src/agents/interface.ts +0 -11
  93. package/src/agents/patcher/codebase.md +0 -27
  94. package/src/agents/patcher/patcher.ts +0 -131
  95. package/src/agents/researcher/researcher.ts +0 -115
  96. package/src/agents/setup/setup.ts +0 -63
  97. package/src/agents/tools/addInternalTools.ts +0 -21
  98. package/src/agents/tools/agentCall.ts +0 -34
  99. package/src/agents/tools/aiClient.ts +0 -178
  100. package/src/agents/tools/askHuman.ts +0 -10
  101. package/src/agents/tools/callPlugin.ts +0 -10
  102. package/src/agents/tools/connectAgent.ts +0 -355
  103. package/src/agents/tools/embeddingSearch.ts +0 -6
  104. package/src/agents/tools/execCommand.ts +0 -162
  105. package/src/agents/tools/fileSearch.ts +0 -35
  106. package/src/agents/tools/finalAnswer.ts +0 -4
  107. package/src/agents/tools/googleSearch.ts +0 -243
  108. package/src/agents/tools/index.ts +0 -33
  109. package/src/agents/tools/language/definitions.ts +0 -105
  110. package/src/agents/tools/language/index.ts +0 -20
  111. package/src/agents/tools/lazy/definitions.ts +0 -72
  112. package/src/agents/tools/lazy/disableTools.ts +0 -16
  113. package/src/agents/tools/lazy/enableTools.ts +0 -16
  114. package/src/agents/tools/lazy/index.ts +0 -3
  115. package/src/agents/tools/lazy/listAvailableTools.ts +0 -17
  116. package/src/agents/tools/lintFile.ts +0 -19
  117. package/src/agents/tools/list.ts +0 -739
  118. package/src/agents/tools/loadImageAsBase64.ts +0 -83
  119. package/src/agents/tools/loadWebpage.ts +0 -19
  120. package/src/agents/tools/mcp/connectMcpServer.ts +0 -40
  121. package/src/agents/tools/mcp/definitions.ts +0 -67
  122. package/src/agents/tools/mcp/disconnectMcpServer.ts +0 -40
  123. package/src/agents/tools/mcp/index.ts +0 -3
  124. package/src/agents/tools/mcp/listAvailableMcpServers.ts +0 -28
  125. package/src/agents/tools/minimal/callTool.ts +0 -45
  126. package/src/agents/tools/minimal/definitions.ts +0 -50
  127. package/src/agents/tools/minimal/index.ts +0 -3
  128. package/src/agents/tools/minimal/inspectTools.ts +0 -27
  129. package/src/agents/tools/modifyFile.ts +0 -53
  130. package/src/agents/tools/observe.ts +0 -247
  131. package/src/agents/tools/patch.ts +0 -1287
  132. package/src/agents/tools/readBlocks.ts +0 -83
  133. package/src/agents/tools/readFile.ts +0 -105
  134. package/src/agents/tools/replyToParent.ts +0 -123
  135. package/src/agents/tools/runGenerate.ts +0 -210
  136. package/src/agents/tools/scanFile.ts +0 -16
  137. package/src/agents/tools/sendAgentMessage.ts +0 -139
  138. package/src/agents/tools/skills.ts +0 -79
  139. package/src/agents/tools/startAgentTask.ts +0 -393
  140. package/src/agents/tools/stringReplace.ts +0 -105
  141. package/src/agents/tools/textSearch.ts +0 -128
  142. package/src/agents/tools/types/fileblock.ts +0 -5
  143. package/src/agents/tools/visionTool.ts +0 -35
  144. package/src/agents/tools/waitForAgentCompleted.ts +0 -270
  145. package/src/agents/tools/writeFile.ts +0 -106
  146. package/src/agents/tools/ycmd/client.ts +0 -608
  147. package/src/agents/tools/ycmd/definitions.ts +0 -294
  148. package/src/agents/tools/ycmd/detection.ts +0 -211
  149. package/src/agents/tools/ycmd/index.ts +0 -11
  150. package/src/agents/tools/ycmd/installer.ts +0 -251
  151. package/src/agents/tools/ycmd/server.ts +0 -545
  152. package/src/agents/tools/ycmd/serverManager.ts +0 -316
  153. package/src/agents/tools/ycmd/tools/completion.ts +0 -113
  154. package/src/agents/tools/ycmd/tools/diagnostics.ts +0 -166
  155. package/src/agents/tools/ycmd/tools/getLocations.ts +0 -173
  156. package/src/agents/tools/ycmd/tools/goto.ts +0 -169
  157. package/src/agents/tools/ycmd/tools/refactor.ts +0 -204
  158. package/src/agents/tools/ycmd/tools/signature.ts +0 -174
  159. package/src/agents/tools/ycmd/tools/start.ts +0 -95
  160. package/src/agents/tools/ycmd/utils/pathUtils.ts +0 -59
  161. package/src/ai.ts +0 -306
  162. package/src/auth/browserLogin.ts +0 -406
  163. package/src/auth/environmentAuth.ts +0 -51
  164. package/src/auth/errors.ts +0 -6
  165. package/src/auth/jwtStore.ts +0 -70
  166. package/src/auth/keyAuth.ts +0 -142
  167. package/src/auth/keyManager.ts +0 -331
  168. package/src/auth/registerIdentity.ts +0 -67
  169. package/src/auth/spinner.ts +0 -23
  170. package/src/chat/CliChatService.ts +0 -438
  171. package/src/chat/modules/AgentModule.ts +0 -1664
  172. package/src/chat/modules/AskModule.ts +0 -98
  173. package/src/chat/modules/BaseChatModule.ts +0 -65
  174. package/src/chat/modules/ClipboardImageModule.ts +0 -136
  175. package/src/chat/modules/CustomCommandsModule.ts +0 -80
  176. package/src/chat/modules/InternalChatModule.ts +0 -216
  177. package/src/chat/modules/RemoteSyncModule.ts +0 -482
  178. package/src/chat/modules/RendererModule.ts +0 -139
  179. package/src/chat/modules/SearchModule.ts +0 -168
  180. package/src/chat/modules/SessionsModule.ts +0 -969
  181. package/src/chat/modules/SetupModule.ts +0 -185
  182. package/src/chat/modules/ShellCommandModule.ts +0 -98
  183. package/src/chat/modules/SystemModule.ts +0 -161
  184. package/src/chat/modules/ToolCommandModule.ts +0 -102
  185. package/src/chat/modules/VoiceModule.ts +0 -70
  186. package/src/chat/modules/index.ts +0 -8
  187. package/src/chat/renderer/CompactRenderer.ts +0 -229
  188. package/src/chat/renderer/ConsoleRenderer.ts +0 -160
  189. package/src/chat/renderer/FancyRenderer.ts +0 -440
  190. package/src/chat/renderer/PlainRenderer.ts +0 -218
  191. package/src/chat/renderer/index.ts +0 -6
  192. package/src/chat/renderer/loadRenderer.ts +0 -316
  193. package/src/chat/renderer/messagesToRenderEvents.ts +0 -96
  194. package/src/chat/renderer/types.ts +0 -99
  195. package/src/chat/types.ts +0 -146
  196. package/src/chat.ts +0 -140
  197. package/src/cli.ts +0 -180
  198. package/src/clients/anthropic.ts +0 -772
  199. package/src/clients/attribution.ts +0 -53
  200. package/src/clients/cerebras.ts +0 -10
  201. package/src/clients/contextLimits.ts +0 -263
  202. package/src/clients/copilot.ts +0 -23
  203. package/src/clients/deepseek.ts +0 -16
  204. package/src/clients/fireworks.ts +0 -71
  205. package/src/clients/gemini.ts +0 -1169
  206. package/src/clients/github.ts +0 -16
  207. package/src/clients/groq.ts +0 -15
  208. package/src/clients/http.ts +0 -719
  209. package/src/clients/index.ts +0 -1153
  210. package/src/clients/knowhow.ts +0 -130
  211. package/src/clients/knowhowMcp.ts +0 -118
  212. package/src/clients/llama.ts +0 -16
  213. package/src/clients/meta.ts +0 -27
  214. package/src/clients/mistral.ts +0 -16
  215. package/src/clients/nvidia.ts +0 -16
  216. package/src/clients/openai.ts +0 -1186
  217. package/src/clients/openrouter.ts +0 -24
  218. package/src/clients/pricing/anthropic.ts +0 -149
  219. package/src/clients/pricing/cerebras.ts +0 -11
  220. package/src/clients/pricing/copilot.ts +0 -60
  221. package/src/clients/pricing/deepseek.ts +0 -15
  222. package/src/clients/pricing/fireworks.ts +0 -182
  223. package/src/clients/pricing/github.ts +0 -69
  224. package/src/clients/pricing/google.ts +0 -385
  225. package/src/clients/pricing/groq.ts +0 -56
  226. package/src/clients/pricing/index.ts +0 -44
  227. package/src/clients/pricing/llama.ts +0 -18
  228. package/src/clients/pricing/meta.ts +0 -12
  229. package/src/clients/pricing/mistral.ts +0 -34
  230. package/src/clients/pricing/models.ts +0 -25
  231. package/src/clients/pricing/nvidia.ts +0 -102
  232. package/src/clients/pricing/openai.ts +0 -409
  233. package/src/clients/pricing/openrouter.ts +0 -36
  234. package/src/clients/pricing/qwen.ts +0 -80
  235. package/src/clients/pricing/types.ts +0 -125
  236. package/src/clients/pricing/xai.ts +0 -137
  237. package/src/clients/qwen.ts +0 -16
  238. package/src/clients/responseMetadata.ts +0 -221
  239. package/src/clients/types.ts +0 -531
  240. package/src/clients/withRetry.ts +0 -89
  241. package/src/clients/xai.ts +0 -693
  242. package/src/cloudWorker.ts +0 -394
  243. package/src/commands/agent.ts +0 -342
  244. package/src/commands/agents.ts +0 -1037
  245. package/src/commands/behaviors.ts +0 -47
  246. package/src/commands/convert.ts +0 -291
  247. package/src/commands/hash.ts +0 -179
  248. package/src/commands/mcp.ts +0 -743
  249. package/src/commands/misc.ts +0 -373
  250. package/src/commands/modules.ts +0 -704
  251. package/src/commands/processes.ts +0 -248
  252. package/src/commands/remote.ts +0 -77
  253. package/src/commands/replay.ts +0 -503
  254. package/src/commands/sandbox.ts +0 -566
  255. package/src/commands/services.ts +0 -168
  256. package/src/commands/skills.ts +0 -107
  257. package/src/commands/workers.ts +0 -168
  258. package/src/config.ts +0 -468
  259. package/src/conversion.ts +0 -69
  260. package/src/dataset/diffs/README.md +0 -12
  261. package/src/dataset/diffs/debug-errors.ts +0 -29
  262. package/src/dataset/diffs/debug.ts +0 -64
  263. package/src/dataset/diffs/generate.ts +0 -71
  264. package/src/dataset/diffs/jsonl.ts +0 -53
  265. package/src/dataset/diffs/test.ts +0 -194
  266. package/src/embeddings.ts +0 -494
  267. package/src/fileSync.ts +0 -369
  268. package/src/generate.ts +0 -529
  269. package/src/hashes.ts +0 -180
  270. package/src/index.ts +0 -261
  271. package/src/logger.ts +0 -197
  272. package/src/login.ts +0 -209
  273. package/src/microphone.ts +0 -141
  274. package/src/migrations.ts +0 -151
  275. package/src/plugins/AgentsMdPlugin.ts +0 -118
  276. package/src/plugins/GitPlugin.ts +0 -598
  277. package/src/plugins/LinterPlugin.ts +0 -214
  278. package/src/plugins/PluginBase.ts +0 -70
  279. package/src/plugins/SkillsPlugin.ts +0 -37
  280. package/src/plugins/embedding.ts +0 -82
  281. package/src/plugins/exec.ts +0 -70
  282. package/src/plugins/language.ts +0 -290
  283. package/src/plugins/plugins.ts +0 -175
  284. package/src/plugins/tmux.ts +0 -132
  285. package/src/plugins/types.ts +0 -36
  286. package/src/plugins/url.ts +0 -101
  287. package/src/plugins/vim.ts +0 -89
  288. package/src/processes/ProcessManager.ts +0 -96
  289. package/src/processes/managedProcessShim.ts +0 -138
  290. package/src/processors/Base64ImageDetector.ts +0 -502
  291. package/src/processors/CustomVariables.ts +0 -693
  292. package/src/processors/GemmaToolProcessor.ts +0 -163
  293. package/src/processors/HarmonyToolProcessor.ts +0 -264
  294. package/src/processors/JsonCompressor.ts +0 -510
  295. package/src/processors/MinimalToolsMessageProcessor.ts +0 -113
  296. package/src/processors/TokenCompressor.ts +0 -620
  297. package/src/processors/ToolResponseCache.ts +0 -322
  298. package/src/processors/XmlToolCallProcessor.ts +0 -533
  299. package/src/processors/index.ts +0 -14
  300. package/src/processors/tools/boundedToolResponse.ts +0 -49
  301. package/src/processors/tools/grepToolResponse.ts +0 -230
  302. package/src/processors/tools/index.ts +0 -23
  303. package/src/processors/tools/jqToolResponse.ts +0 -159
  304. package/src/processors/tools/listStoredToolResponses.ts +0 -124
  305. package/src/processors/tools/tailToolResponse.ts +0 -148
  306. package/src/prompts/BasicCodeDocumenter.ts +0 -1
  307. package/src/prompts/BasicProjectDocumenter.ts +0 -1
  308. package/src/prompts/EmbeddingSeachHelper.ts +0 -1
  309. package/src/prompts/KnowhowConfigExamples.ts +0 -376
  310. package/src/prompts/index.ts +0 -9
  311. package/src/remotes.ts +0 -110
  312. package/src/server/index.ts +0 -16
  313. package/src/services/AgentService.ts +0 -134
  314. package/src/services/AgentSyncFs.ts +0 -775
  315. package/src/services/AgentSyncKnowhowWeb.ts +0 -389
  316. package/src/services/BehaviorsService.ts +0 -466
  317. package/src/services/DockerService.ts +0 -511
  318. package/src/services/EmbeddingService.ts +0 -427
  319. package/src/services/EmbeddingsService.ts +0 -73
  320. package/src/services/EventService.ts +0 -279
  321. package/src/services/ExtensionsService.ts +0 -25
  322. package/src/services/KnowhowClient.ts +0 -928
  323. package/src/services/LazyToolsService.ts +0 -210
  324. package/src/services/Mcp.ts +0 -727
  325. package/src/services/McpServer.ts +0 -155
  326. package/src/services/McpWebsocketTransport.ts +0 -87
  327. package/src/services/MediaProcessorService.ts +0 -669
  328. package/src/services/MessageProcessor.ts +0 -114
  329. package/src/services/MinimalToolsService.ts +0 -177
  330. package/src/services/RuntimeReloadService.ts +0 -31
  331. package/src/services/S3.ts +0 -61
  332. package/src/services/SessionManager.ts +0 -358
  333. package/src/services/SkillsService.ts +0 -822
  334. package/src/services/SyncedAgentWatcher.ts +0 -124
  335. package/src/services/SyncerService.ts +0 -191
  336. package/src/services/TaskRegistry.ts +0 -110
  337. package/src/services/Tools.ts +0 -580
  338. package/src/services/TracingService.ts +0 -116
  339. package/src/services/conversion/ConversionService.ts +0 -757
  340. package/src/services/conversion/index.ts +0 -2
  341. package/src/services/conversion/types.ts +0 -87
  342. package/src/services/flags.ts +0 -51
  343. package/src/services/index.ts +0 -117
  344. package/src/services/modules/computerUse.ts +0 -218
  345. package/src/services/modules/index.ts +0 -314
  346. package/src/services/modules/types.ts +0 -109
  347. package/src/services/types.ts +0 -60
  348. package/src/services/watchers/FsSyncer.ts +0 -199
  349. package/src/services/watchers/RemoteSyncer.ts +0 -196
  350. package/src/services/watchers/index.ts +0 -2
  351. package/src/tunnel.ts +0 -243
  352. package/src/types.ts +0 -282
  353. package/src/util/Trace.ts +0 -236
  354. package/src/utils/InputQueueManager.ts +0 -493
  355. package/src/utils/errors.ts +0 -0
  356. package/src/utils/http.ts +0 -150
  357. package/src/utils/index.ts +0 -111
  358. package/src/worker.ts +0 -696
  359. package/src/workerRegistry.ts +0 -152
  360. package/src/workers/auth/PasskeySetup.ts +0 -181
  361. package/src/workers/auth/WorkerPasskeyAuth.ts +0 -190
  362. package/src/workers/auth/WsMiddleware.ts +0 -99
  363. package/src/workers/auth/authMiddleware.ts +0 -104
  364. package/src/workers/auth/types.ts +0 -70
  365. package/src/workers/tools/getChallenge.ts +0 -33
  366. package/src/workers/tools/index.ts +0 -20
  367. package/src/workers/tools/listAllowedPorts.ts +0 -30
  368. package/src/workers/tools/lock.ts +0 -31
  369. package/src/workers/tools/reloadConfig.ts +0 -84
  370. package/src/workers/tools/unlock.ts +0 -116
  371. package/tests/XmlToolCallProcessor.test.ts +0 -468
  372. package/tests/agents/interrupt.test.ts +0 -200
  373. package/tests/agents/observe-base.test.ts +0 -183
  374. package/tests/agents/tools/connectAgent.test.ts +0 -138
  375. package/tests/agents/tools/observe.test.ts +0 -179
  376. package/tests/agents/tools/readFile.test.ts +0 -88
  377. package/tests/agents/tools/replyToParent.test.ts +0 -125
  378. package/tests/agents/tools/sendAgentMessage.test.ts +0 -99
  379. package/tests/agents/tools/waitForAgentCompleted.test.ts +0 -147
  380. package/tests/chat/detach-attach-rendering.test.ts +0 -315
  381. package/tests/clients/AIClient.test.ts +0 -668
  382. package/tests/clients/anthropic.test.ts +0 -202
  383. package/tests/clients/contextLimits.test.ts +0 -97
  384. package/tests/clients/fireworks.test.ts +0 -65
  385. package/tests/clients/openai.images.test.ts +0 -105
  386. package/tests/clients/pricing.test.ts +0 -206
  387. package/tests/clients/reasoningEffort.test.ts +0 -140
  388. package/tests/compressor/bigstring.test.ts +0 -450
  389. package/tests/compressor/bigstring.txt +0 -1
  390. package/tests/compressor/githubjson.txt +0 -1
  391. package/tests/compressor/toolResponseCache.test.ts +0 -304
  392. package/tests/compressor/usageBase64.json +0 -159
  393. package/tests/compressor/usageBase64.test.ts +0 -175
  394. package/tests/fixtures/fake-secret.txt +0 -1
  395. package/tests/manual/agent-events/run-test.ts +0 -203
  396. package/tests/manual/browser-login/README.md +0 -189
  397. package/tests/manual/browser-login/test_browser_login_basic.ts +0 -115
  398. package/tests/manual/browser-login/test_cli_integration.ts +0 -169
  399. package/tests/manual/browser-login/test_cross_platform_browser.ts +0 -186
  400. package/tests/manual/browser-login/test_error_scenarios.ts +0 -223
  401. package/tests/manual/cli/no-env.sh +0 -274
  402. package/tests/manual/clients/completions.json +0 -1151
  403. package/tests/manual/clients/completions.test.ts +0 -198
  404. package/tests/manual/file-edits/figma.test.ts +0 -3
  405. package/tests/manual/file-edits/fileblocks/readwrite.test.ts +0 -100
  406. package/tests/manual/file-edits/patching/input.txt +0 -145
  407. package/tests/manual/file-edits/patching/output.txt +0 -145
  408. package/tests/manual/file-edits/patching/patch.txt +0 -15
  409. package/tests/manual/file-edits/patching/unseen.txt +0 -80
  410. package/tests/manual/file-edits/patching.test.ts +0 -139
  411. package/tests/manual/modalities/README.md +0 -157
  412. package/tests/manual/modalities/google.modalities.test.ts +0 -335
  413. package/tests/manual/modalities/openai.modalities.test.ts +0 -329
  414. package/tests/manual/modalities/streaming.test.ts +0 -260
  415. package/tests/manual/modalities/xai.modalities.test.ts +0 -294
  416. package/tests/manual/test-concurrent-ask.ts +0 -43
  417. package/tests/manual/ycmd/debug_diagnostics_test.ts +0 -127
  418. package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +0 -26
  419. package/tests/manual/ycmd/fixtures/file_change_test.ts +0 -17
  420. package/tests/manual/ycmd/minimal_advanced_test.ts +0 -108
  421. package/tests/manual/ycmd/simple_diagnostics_test.ts +0 -61
  422. package/tests/manual/ycmd/simple_test.ts +0 -74
  423. package/tests/manual/ycmd/test-typescript-sample.ts +0 -34
  424. package/tests/manual/ycmd/test_advanced_features.ts +0 -407
  425. package/tests/manual/ycmd/test_advanced_with_tools.ts +0 -320
  426. package/tests/manual/ycmd/test_comprehensive_typescript.ts +0 -179
  427. package/tests/manual/ycmd/test_diagnostics_file_changes.ts +0 -249
  428. package/tests/manual/ycmd/test_diagnostics_fix.ts +0 -99
  429. package/tests/manual/ycmd/test_diagnostics_simple.ts +0 -100
  430. package/tests/manual/ycmd/test_diagnostics_timing.ts +0 -120
  431. package/tests/manual/ycmd/test_discover_commands.ts +0 -310
  432. package/tests/manual/ycmd/test_endpoints.ts +0 -115
  433. package/tests/manual/ycmd/test_final_comprehensive.ts +0 -218
  434. package/tests/manual/ycmd/test_final_validation.ts +0 -150
  435. package/tests/manual/ycmd/test_implementation.js +0 -42
  436. package/tests/manual/ycmd/test_individual_ycmd_tool.ts +0 -39
  437. package/tests/manual/ycmd/test_server_manager.ts +0 -52
  438. package/tests/manual/ycmd/test_simple_debug.ts +0 -86
  439. package/tests/manual/ycmd/test_tsserver_workflow.js +0 -83
  440. package/tests/manual/ycmd/test_tsserver_workflow.ts +0 -122
  441. package/tests/manual/ycmd/test_typescript_simple.ts +0 -48
  442. package/tests/manual/ycmd/test_typescript_ycmd.ts +0 -105
  443. package/tests/manual/ycmd/test_workspace_config.ts +0 -90
  444. package/tests/manual/ycmd/test_ycmd_auto_start.ts +0 -137
  445. package/tests/manual/ycmd/test_ycmd_comprehensive.ts +0 -73
  446. package/tests/manual/ycmd/test_ycmd_connection.py +0 -10
  447. package/tests/manual/ycmd/test_ycmd_direct.ts +0 -142
  448. package/tests/manual/ycmd/test_ycmd_experiment.ts +0 -48
  449. package/tests/manual/ycmd/test_ycmd_final.ts +0 -200
  450. package/tests/manual/ycmd/test_ycmd_fixed.py +0 -18
  451. package/tests/manual/ycmd/test_ycmd_integration.ts +0 -112
  452. package/tests/manual/ycmd/test_ycmd_simple.ts +0 -45
  453. package/tests/manual/ycmd/test_ycmd_usage.py +0 -27
  454. package/tests/manual/ycmd/working_simple_test.ts +0 -134
  455. package/tests/patching/corrupted.test.ts +0 -78
  456. package/tests/patching/fixtures/transcript-mangles/agent-sync-fs-nested-catch.json +0 -9
  457. package/tests/patching/fixtures/transcript-mangles/automation-functions-crossed.json +0 -9
  458. package/tests/patching/fixtures/transcript-mangles/fruit-ninja-confirmed-retirement.json +0 -8
  459. package/tests/patching/imports.patch.txt +0 -11
  460. package/tests/patching/imports.test.ts +0 -43
  461. package/tests/patching/imports.txt +0 -11
  462. package/tests/patching/interface.patch.txt +0 -15
  463. package/tests/patching/interface.txt +0 -7
  464. package/tests/patching/patchFileOutput.test.ts +0 -328
  465. package/tests/patching/regression-2026.test.ts +0 -752
  466. package/tests/patching/transcriptMangleRegression.test.ts +0 -125
  467. package/tests/plugins/language/languagePlugin-content-triggers.test.ts +0 -346
  468. package/tests/plugins/language/languagePlugin-integration.test.ts +0 -471
  469. package/tests/plugins/language/languagePlugin.test.ts +0 -385
  470. package/tests/processes/managedProcessShim.test.ts +0 -59
  471. package/tests/processors/Base64ImageDetector.test.ts +0 -979
  472. package/tests/processors/CustomVariables.test.ts +0 -981
  473. package/tests/processors/CustomVariablesBenchmark.test.ts +0 -237
  474. package/tests/processors/HarmonyToolProcessor.test.ts +0 -490
  475. package/tests/processors/TokenCompressor.test.ts +0 -674
  476. package/tests/processors/ToolResponseCache.test.ts +0 -864
  477. package/tests/processors/tools/boundedRetrievalTools.test.ts +0 -68
  478. package/tests/processors/tools/grepToolResponse.test.ts +0 -159
  479. package/tests/services/ConversionService.test.ts +0 -154
  480. package/tests/services/DockerService.test.ts +0 -24
  481. package/tests/services/Tools.test.ts +0 -1738
  482. package/tests/services/ToolsService.setFunction.test.ts +0 -68
  483. package/tests/services/WorkerReloadConfig.test.ts +0 -141
  484. package/tests/test.spec.ts +0 -163
  485. package/tests/unit/InputQueueManager.test.ts +0 -174
  486. package/tests/unit/McpWebsocketTransport.test.ts +0 -56
  487. package/tests/unit/agents/historyRollback.test.ts +0 -53
  488. package/tests/unit/agents/tools/loadImageAsBase64.test.ts +0 -44
  489. package/tests/unit/auth/jwtStore.test.ts +0 -55
  490. package/tests/unit/auth/keyAuth.test.ts +0 -152
  491. package/tests/unit/auth/keyManager.test.ts +0 -130
  492. package/tests/unit/auth/registerIdentity.test.ts +0 -99
  493. package/tests/unit/chat/ToolCommandModule.test.ts +0 -71
  494. package/tests/unit/chat/historyCommandArgs.test.ts +0 -37
  495. package/tests/unit/clients/AIClient.test.ts +0 -454
  496. package/tests/unit/clients/anthropic.responseMetadata.test.ts +0 -81
  497. package/tests/unit/clients/attribution.test.ts +0 -185
  498. package/tests/unit/clients/http.responseMetadata.test.ts +0 -86
  499. package/tests/unit/clients/openai.responseMetadata.test.ts +0 -90
  500. package/tests/unit/clients/responseMetadata.test.ts +0 -123
  501. package/tests/unit/clients/withRetry.test.ts +0 -319
  502. package/tests/unit/commands/agents.test.ts +0 -111
  503. package/tests/unit/commands/github-credentials.test.ts +0 -210
  504. package/tests/unit/commands/misc.test.ts +0 -85
  505. package/tests/unit/commands/remote.test.ts +0 -79
  506. package/tests/unit/commands/sandbox.test.ts +0 -350
  507. package/tests/unit/hashes.test.ts +0 -23
  508. package/tests/unit/input-queue.test.ts +0 -80
  509. package/tests/unit/login.test.ts +0 -218
  510. package/tests/unit/modules/moduleLoading.test.ts +0 -305
  511. package/tests/unit/plugins/pluginLoading.test.ts +0 -97
  512. package/tests/unit/services/AgentSyncKnowhowWeb.test.ts +0 -38
  513. package/tests/unit/services/KnowhowClient.test.ts +0 -84
  514. package/tests/unit/services/LazyToolsService.test.ts +0 -53
  515. package/tests/unit/services/Mcp.test.ts +0 -56
  516. package/tests/unit/services/MinimalToolsService.test.ts +0 -424
  517. package/tests/unit/services/RuntimeReloadService.test.ts +0 -29
  518. package/tests/unit/services/SessionManager.test.ts +0 -43
  519. package/tests/unit/services/SyncedAgentWatcher.test.ts +0 -89
  520. package/tests/unit/services/SyncerService.test.ts +0 -45
  521. package/tests/unit/tunnel.test.ts +0 -51
  522. package/tests/unit/util/Trace.test.ts +0 -119
  523. package/tests/unit/utils/http.test.ts +0 -43
  524. package/ts_build/tests/XmlToolCallProcessor.test.d.ts +0 -1
  525. package/ts_build/tests/XmlToolCallProcessor.test.js +0 -376
  526. package/ts_build/tests/XmlToolCallProcessor.test.js.map +0 -1
  527. package/ts_build/tests/agents/interrupt.test.d.ts +0 -14
  528. package/ts_build/tests/agents/interrupt.test.js +0 -136
  529. package/ts_build/tests/agents/interrupt.test.js.map +0 -1
  530. package/ts_build/tests/agents/observe-base.test.d.ts +0 -1
  531. package/ts_build/tests/agents/observe-base.test.js +0 -149
  532. package/ts_build/tests/agents/observe-base.test.js.map +0 -1
  533. package/ts_build/tests/agents/tools/connectAgent.test.d.ts +0 -1
  534. package/ts_build/tests/agents/tools/connectAgent.test.js +0 -142
  535. package/ts_build/tests/agents/tools/connectAgent.test.js.map +0 -1
  536. package/ts_build/tests/agents/tools/observe.test.d.ts +0 -1
  537. package/ts_build/tests/agents/tools/observe.test.js +0 -148
  538. package/ts_build/tests/agents/tools/observe.test.js.map +0 -1
  539. package/ts_build/tests/agents/tools/readFile.test.d.ts +0 -1
  540. package/ts_build/tests/agents/tools/readFile.test.js +0 -90
  541. package/ts_build/tests/agents/tools/readFile.test.js.map +0 -1
  542. package/ts_build/tests/agents/tools/replyToParent.test.d.ts +0 -1
  543. package/ts_build/tests/agents/tools/replyToParent.test.js +0 -116
  544. package/ts_build/tests/agents/tools/replyToParent.test.js.map +0 -1
  545. package/ts_build/tests/agents/tools/sendAgentMessage.test.d.ts +0 -1
  546. package/ts_build/tests/agents/tools/sendAgentMessage.test.js +0 -112
  547. package/ts_build/tests/agents/tools/sendAgentMessage.test.js.map +0 -1
  548. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.d.ts +0 -1
  549. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js +0 -147
  550. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js.map +0 -1
  551. package/ts_build/tests/chat/detach-attach-rendering.test.d.ts +0 -1
  552. package/ts_build/tests/chat/detach-attach-rendering.test.js +0 -168
  553. package/ts_build/tests/chat/detach-attach-rendering.test.js.map +0 -1
  554. package/ts_build/tests/clients/AIClient.test.d.ts +0 -1
  555. package/ts_build/tests/clients/AIClient.test.js +0 -483
  556. package/ts_build/tests/clients/AIClient.test.js.map +0 -1
  557. package/ts_build/tests/clients/anthropic.test.d.ts +0 -1
  558. package/ts_build/tests/clients/anthropic.test.js +0 -159
  559. package/ts_build/tests/clients/anthropic.test.js.map +0 -1
  560. package/ts_build/tests/clients/contextLimits.test.d.ts +0 -1
  561. package/ts_build/tests/clients/contextLimits.test.js +0 -69
  562. package/ts_build/tests/clients/contextLimits.test.js.map +0 -1
  563. package/ts_build/tests/clients/fireworks.test.d.ts +0 -1
  564. package/ts_build/tests/clients/fireworks.test.js +0 -65
  565. package/ts_build/tests/clients/fireworks.test.js.map +0 -1
  566. package/ts_build/tests/clients/openai.images.test.d.ts +0 -1
  567. package/ts_build/tests/clients/openai.images.test.js +0 -94
  568. package/ts_build/tests/clients/openai.images.test.js.map +0 -1
  569. package/ts_build/tests/clients/pricing.test.d.ts +0 -1
  570. package/ts_build/tests/clients/pricing.test.js +0 -124
  571. package/ts_build/tests/clients/pricing.test.js.map +0 -1
  572. package/ts_build/tests/clients/reasoningEffort.test.d.ts +0 -1
  573. package/ts_build/tests/clients/reasoningEffort.test.js +0 -116
  574. package/ts_build/tests/clients/reasoningEffort.test.js.map +0 -1
  575. package/ts_build/tests/compressor/bigstring.test.d.ts +0 -1
  576. package/ts_build/tests/compressor/bigstring.test.js +0 -275
  577. package/ts_build/tests/compressor/bigstring.test.js.map +0 -1
  578. package/ts_build/tests/compressor/toolResponseCache.test.d.ts +0 -1
  579. package/ts_build/tests/compressor/toolResponseCache.test.js +0 -250
  580. package/ts_build/tests/compressor/toolResponseCache.test.js.map +0 -1
  581. package/ts_build/tests/compressor/usageBase64.test.d.ts +0 -1
  582. package/ts_build/tests/compressor/usageBase64.test.js +0 -109
  583. package/ts_build/tests/compressor/usageBase64.test.js.map +0 -1
  584. package/ts_build/tests/manual/agent-events/run-test.d.ts +0 -2
  585. package/ts_build/tests/manual/agent-events/run-test.js +0 -148
  586. package/ts_build/tests/manual/agent-events/run-test.js.map +0 -1
  587. package/ts_build/tests/manual/browser-login/test_browser_login_basic.d.ts +0 -2
  588. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js +0 -118
  589. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js.map +0 -1
  590. package/ts_build/tests/manual/browser-login/test_cli_integration.d.ts +0 -2
  591. package/ts_build/tests/manual/browser-login/test_cli_integration.js +0 -163
  592. package/ts_build/tests/manual/browser-login/test_cli_integration.js.map +0 -1
  593. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.d.ts +0 -2
  594. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js +0 -169
  595. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js.map +0 -1
  596. package/ts_build/tests/manual/browser-login/test_error_scenarios.d.ts +0 -2
  597. package/ts_build/tests/manual/browser-login/test_error_scenarios.js +0 -207
  598. package/ts_build/tests/manual/browser-login/test_error_scenarios.js.map +0 -1
  599. package/ts_build/tests/manual/clients/completions.test.d.ts +0 -1
  600. package/ts_build/tests/manual/clients/completions.test.js +0 -151
  601. package/ts_build/tests/manual/clients/completions.test.js.map +0 -1
  602. package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -0
  603. package/ts_build/tests/manual/file-edits/figma.test.js +0 -2
  604. package/ts_build/tests/manual/file-edits/figma.test.js.map +0 -1
  605. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.d.ts +0 -1
  606. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js +0 -110
  607. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js.map +0 -1
  608. package/ts_build/tests/manual/file-edits/patching.test.d.ts +0 -1
  609. package/ts_build/tests/manual/file-edits/patching.test.js +0 -129
  610. package/ts_build/tests/manual/file-edits/patching.test.js.map +0 -1
  611. package/ts_build/tests/manual/modalities/google.modalities.test.d.ts +0 -1
  612. package/ts_build/tests/manual/modalities/google.modalities.test.js +0 -262
  613. package/ts_build/tests/manual/modalities/google.modalities.test.js.map +0 -1
  614. package/ts_build/tests/manual/modalities/openai.modalities.test.d.ts +0 -1
  615. package/ts_build/tests/manual/modalities/openai.modalities.test.js +0 -262
  616. package/ts_build/tests/manual/modalities/openai.modalities.test.js.map +0 -1
  617. package/ts_build/tests/manual/modalities/streaming.test.d.ts +0 -1
  618. package/ts_build/tests/manual/modalities/streaming.test.js +0 -216
  619. package/ts_build/tests/manual/modalities/streaming.test.js.map +0 -1
  620. package/ts_build/tests/manual/modalities/xai.modalities.test.d.ts +0 -1
  621. package/ts_build/tests/manual/modalities/xai.modalities.test.js +0 -219
  622. package/ts_build/tests/manual/modalities/xai.modalities.test.js.map +0 -1
  623. package/ts_build/tests/manual/test-concurrent-ask.d.ts +0 -1
  624. package/ts_build/tests/manual/test-concurrent-ask.js +0 -22
  625. package/ts_build/tests/manual/test-concurrent-ask.js.map +0 -1
  626. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +0 -1
  627. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +0 -124
  628. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +0 -1
  629. package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +0 -2
  630. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +0 -114
  631. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +0 -1
  632. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +0 -1
  633. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +0 -84
  634. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +0 -1
  635. package/ts_build/tests/manual/ycmd/simple_test.d.ts +0 -2
  636. package/ts_build/tests/manual/ycmd/simple_test.js +0 -92
  637. package/ts_build/tests/manual/ycmd/simple_test.js.map +0 -1
  638. package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +0 -14
  639. package/ts_build/tests/manual/ycmd/test-typescript-sample.js +0 -20
  640. package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +0 -1
  641. package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +0 -2
  642. package/ts_build/tests/manual/ycmd/test_advanced_features.js +0 -306
  643. package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +0 -1
  644. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +0 -3
  645. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +0 -271
  646. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +0 -1
  647. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +0 -2
  648. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +0 -196
  649. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +0 -1
  650. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +0 -1
  651. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +0 -184
  652. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +0 -1
  653. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +0 -2
  654. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +0 -116
  655. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +0 -1
  656. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +0 -1
  657. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +0 -114
  658. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +0 -1
  659. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +0 -1
  660. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +0 -129
  661. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +0 -1
  662. package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +0 -2
  663. package/ts_build/tests/manual/ycmd/test_discover_commands.js +0 -252
  664. package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +0 -1
  665. package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +0 -2
  666. package/ts_build/tests/manual/ycmd/test_endpoints.js +0 -130
  667. package/ts_build/tests/manual/ycmd/test_endpoints.js.map +0 -1
  668. package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +0 -2
  669. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +0 -231
  670. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +0 -1
  671. package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +0 -2
  672. package/ts_build/tests/manual/ycmd/test_final_validation.js +0 -170
  673. package/ts_build/tests/manual/ycmd/test_final_validation.js.map +0 -1
  674. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +0 -2
  675. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +0 -37
  676. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +0 -1
  677. package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +0 -1
  678. package/ts_build/tests/manual/ycmd/test_server_manager.js +0 -38
  679. package/ts_build/tests/manual/ycmd/test_server_manager.js.map +0 -1
  680. package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +0 -2
  681. package/ts_build/tests/manual/ycmd/test_simple_debug.js +0 -109
  682. package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +0 -1
  683. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +0 -1
  684. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +0 -138
  685. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +0 -1
  686. package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +0 -1
  687. package/ts_build/tests/manual/ycmd/test_typescript_simple.js +0 -76
  688. package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +0 -1
  689. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +0 -1
  690. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +0 -115
  691. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +0 -1
  692. package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +0 -1
  693. package/ts_build/tests/manual/ycmd/test_workspace_config.js +0 -99
  694. package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +0 -1
  695. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +0 -2
  696. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +0 -140
  697. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +0 -1
  698. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +0 -1
  699. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +0 -93
  700. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +0 -1
  701. package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +0 -2
  702. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +0 -159
  703. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +0 -1
  704. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +0 -15
  705. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +0 -68
  706. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +0 -1
  707. package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +0 -2
  708. package/ts_build/tests/manual/ycmd/test_ycmd_final.js +0 -205
  709. package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +0 -1
  710. package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +0 -3
  711. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +0 -119
  712. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +0 -1
  713. package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +0 -2
  714. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +0 -36
  715. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +0 -1
  716. package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +0 -2
  717. package/ts_build/tests/manual/ycmd/working_simple_test.js +0 -144
  718. package/ts_build/tests/manual/ycmd/working_simple_test.js.map +0 -1
  719. package/ts_build/tests/patching/corrupted.test.d.ts +0 -1
  720. package/ts_build/tests/patching/corrupted.test.js +0 -53
  721. package/ts_build/tests/patching/corrupted.test.js.map +0 -1
  722. package/ts_build/tests/patching/imports.test.d.ts +0 -1
  723. package/ts_build/tests/patching/imports.test.js +0 -71
  724. package/ts_build/tests/patching/imports.test.js.map +0 -1
  725. package/ts_build/tests/patching/patchFileOutput.test.d.ts +0 -1
  726. package/ts_build/tests/patching/patchFileOutput.test.js +0 -269
  727. package/ts_build/tests/patching/patchFileOutput.test.js.map +0 -1
  728. package/ts_build/tests/patching/regression-2026.test.d.ts +0 -1
  729. package/ts_build/tests/patching/regression-2026.test.js +0 -528
  730. package/ts_build/tests/patching/regression-2026.test.js.map +0 -1
  731. package/ts_build/tests/patching/transcriptMangleRegression.test.d.ts +0 -1
  732. package/ts_build/tests/patching/transcriptMangleRegression.test.js +0 -104
  733. package/ts_build/tests/patching/transcriptMangleRegression.test.js.map +0 -1
  734. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.d.ts +0 -1
  735. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +0 -294
  736. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +0 -1
  737. package/ts_build/tests/plugins/language/languagePlugin-integration.test.d.ts +0 -1
  738. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +0 -343
  739. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +0 -1
  740. package/ts_build/tests/plugins/language/languagePlugin.test.d.ts +0 -1
  741. package/ts_build/tests/plugins/language/languagePlugin.test.js +0 -315
  742. package/ts_build/tests/plugins/language/languagePlugin.test.js.map +0 -1
  743. package/ts_build/tests/processes/managedProcessShim.test.d.ts +0 -1
  744. package/ts_build/tests/processes/managedProcessShim.test.js +0 -92
  745. package/ts_build/tests/processes/managedProcessShim.test.js.map +0 -1
  746. package/ts_build/tests/processors/Base64ImageDetector.test.d.ts +0 -1
  747. package/ts_build/tests/processors/Base64ImageDetector.test.js +0 -792
  748. package/ts_build/tests/processors/Base64ImageDetector.test.js.map +0 -1
  749. package/ts_build/tests/processors/CustomVariables.test.d.ts +0 -1
  750. package/ts_build/tests/processors/CustomVariables.test.js +0 -764
  751. package/ts_build/tests/processors/CustomVariables.test.js.map +0 -1
  752. package/ts_build/tests/processors/CustomVariablesBenchmark.test.d.ts +0 -1
  753. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js +0 -179
  754. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js.map +0 -1
  755. package/ts_build/tests/processors/HarmonyToolProcessor.test.d.ts +0 -1
  756. package/ts_build/tests/processors/HarmonyToolProcessor.test.js +0 -382
  757. package/ts_build/tests/processors/HarmonyToolProcessor.test.js.map +0 -1
  758. package/ts_build/tests/processors/TokenCompressor.test.d.ts +0 -1
  759. package/ts_build/tests/processors/TokenCompressor.test.js +0 -473
  760. package/ts_build/tests/processors/TokenCompressor.test.js.map +0 -1
  761. package/ts_build/tests/processors/ToolResponseCache.test.d.ts +0 -1
  762. package/ts_build/tests/processors/ToolResponseCache.test.js +0 -657
  763. package/ts_build/tests/processors/ToolResponseCache.test.js.map +0 -1
  764. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.d.ts +0 -1
  765. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js +0 -57
  766. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js.map +0 -1
  767. package/ts_build/tests/processors/tools/grepToolResponse.test.d.ts +0 -1
  768. package/ts_build/tests/processors/tools/grepToolResponse.test.js +0 -77
  769. package/ts_build/tests/processors/tools/grepToolResponse.test.js.map +0 -1
  770. package/ts_build/tests/services/ConversionService.test.d.ts +0 -1
  771. package/ts_build/tests/services/ConversionService.test.js +0 -154
  772. package/ts_build/tests/services/ConversionService.test.js.map +0 -1
  773. package/ts_build/tests/services/DockerService.test.d.ts +0 -1
  774. package/ts_build/tests/services/DockerService.test.js +0 -22
  775. package/ts_build/tests/services/DockerService.test.js.map +0 -1
  776. package/ts_build/tests/services/Tools.test.d.ts +0 -1
  777. package/ts_build/tests/services/Tools.test.js +0 -1365
  778. package/ts_build/tests/services/Tools.test.js.map +0 -1
  779. package/ts_build/tests/services/ToolsService.setFunction.test.d.ts +0 -1
  780. package/ts_build/tests/services/ToolsService.setFunction.test.js +0 -51
  781. package/ts_build/tests/services/ToolsService.setFunction.test.js.map +0 -1
  782. package/ts_build/tests/services/WorkerReloadConfig.test.d.ts +0 -1
  783. package/ts_build/tests/services/WorkerReloadConfig.test.js +0 -86
  784. package/ts_build/tests/services/WorkerReloadConfig.test.js.map +0 -1
  785. package/ts_build/tests/test.spec.d.ts +0 -1
  786. package/ts_build/tests/test.spec.js +0 -139
  787. package/ts_build/tests/test.spec.js.map +0 -1
  788. package/ts_build/tests/unit/InputQueueManager.test.d.ts +0 -1
  789. package/ts_build/tests/unit/InputQueueManager.test.js +0 -104
  790. package/ts_build/tests/unit/InputQueueManager.test.js.map +0 -1
  791. package/ts_build/tests/unit/McpWebsocketTransport.test.d.ts +0 -1
  792. package/ts_build/tests/unit/McpWebsocketTransport.test.js +0 -47
  793. package/ts_build/tests/unit/McpWebsocketTransport.test.js.map +0 -1
  794. package/ts_build/tests/unit/agents/historyRollback.test.d.ts +0 -1
  795. package/ts_build/tests/unit/agents/historyRollback.test.js +0 -42
  796. package/ts_build/tests/unit/agents/historyRollback.test.js.map +0 -1
  797. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.d.ts +0 -1
  798. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js +0 -67
  799. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js.map +0 -1
  800. package/ts_build/tests/unit/auth/jwtStore.test.d.ts +0 -1
  801. package/ts_build/tests/unit/auth/jwtStore.test.js +0 -46
  802. package/ts_build/tests/unit/auth/jwtStore.test.js.map +0 -1
  803. package/ts_build/tests/unit/auth/keyAuth.test.d.ts +0 -1
  804. package/ts_build/tests/unit/auth/keyAuth.test.js +0 -118
  805. package/ts_build/tests/unit/auth/keyAuth.test.js.map +0 -1
  806. package/ts_build/tests/unit/auth/keyManager.test.d.ts +0 -1
  807. package/ts_build/tests/unit/auth/keyManager.test.js +0 -96
  808. package/ts_build/tests/unit/auth/keyManager.test.js.map +0 -1
  809. package/ts_build/tests/unit/auth/registerIdentity.test.d.ts +0 -1
  810. package/ts_build/tests/unit/auth/registerIdentity.test.js +0 -92
  811. package/ts_build/tests/unit/auth/registerIdentity.test.js.map +0 -1
  812. package/ts_build/tests/unit/chat/ToolCommandModule.test.d.ts +0 -1
  813. package/ts_build/tests/unit/chat/ToolCommandModule.test.js +0 -61
  814. package/ts_build/tests/unit/chat/ToolCommandModule.test.js.map +0 -1
  815. package/ts_build/tests/unit/chat/historyCommandArgs.test.d.ts +0 -1
  816. package/ts_build/tests/unit/chat/historyCommandArgs.test.js +0 -29
  817. package/ts_build/tests/unit/chat/historyCommandArgs.test.js.map +0 -1
  818. package/ts_build/tests/unit/clients/AIClient.test.d.ts +0 -1
  819. package/ts_build/tests/unit/clients/AIClient.test.js +0 -342
  820. package/ts_build/tests/unit/clients/AIClient.test.js.map +0 -1
  821. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.d.ts +0 -1
  822. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js +0 -77
  823. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js.map +0 -1
  824. package/ts_build/tests/unit/clients/attribution.test.d.ts +0 -1
  825. package/ts_build/tests/unit/clients/attribution.test.js +0 -153
  826. package/ts_build/tests/unit/clients/attribution.test.js.map +0 -1
  827. package/ts_build/tests/unit/clients/http.responseMetadata.test.d.ts +0 -1
  828. package/ts_build/tests/unit/clients/http.responseMetadata.test.js +0 -77
  829. package/ts_build/tests/unit/clients/http.responseMetadata.test.js.map +0 -1
  830. package/ts_build/tests/unit/clients/openai.responseMetadata.test.d.ts +0 -1
  831. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js +0 -86
  832. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js.map +0 -1
  833. package/ts_build/tests/unit/clients/responseMetadata.test.d.ts +0 -1
  834. package/ts_build/tests/unit/clients/responseMetadata.test.js +0 -96
  835. package/ts_build/tests/unit/clients/responseMetadata.test.js.map +0 -1
  836. package/ts_build/tests/unit/clients/withRetry.test.d.ts +0 -1
  837. package/ts_build/tests/unit/clients/withRetry.test.js +0 -225
  838. package/ts_build/tests/unit/clients/withRetry.test.js.map +0 -1
  839. package/ts_build/tests/unit/commands/agents.test.d.ts +0 -1
  840. package/ts_build/tests/unit/commands/agents.test.js +0 -119
  841. package/ts_build/tests/unit/commands/agents.test.js.map +0 -1
  842. package/ts_build/tests/unit/commands/github-credentials.test.d.ts +0 -1
  843. package/ts_build/tests/unit/commands/github-credentials.test.js +0 -145
  844. package/ts_build/tests/unit/commands/github-credentials.test.js.map +0 -1
  845. package/ts_build/tests/unit/commands/misc.test.d.ts +0 -1
  846. package/ts_build/tests/unit/commands/misc.test.js +0 -70
  847. package/ts_build/tests/unit/commands/misc.test.js.map +0 -1
  848. package/ts_build/tests/unit/commands/remote.test.d.ts +0 -1
  849. package/ts_build/tests/unit/commands/remote.test.js +0 -70
  850. package/ts_build/tests/unit/commands/remote.test.js.map +0 -1
  851. package/ts_build/tests/unit/commands/sandbox.test.d.ts +0 -1
  852. package/ts_build/tests/unit/commands/sandbox.test.js +0 -258
  853. package/ts_build/tests/unit/commands/sandbox.test.js.map +0 -1
  854. package/ts_build/tests/unit/hashes.test.d.ts +0 -1
  855. package/ts_build/tests/unit/hashes.test.js +0 -25
  856. package/ts_build/tests/unit/hashes.test.js.map +0 -1
  857. package/ts_build/tests/unit/input-queue.test.d.ts +0 -1
  858. package/ts_build/tests/unit/input-queue.test.js +0 -32
  859. package/ts_build/tests/unit/input-queue.test.js.map +0 -1
  860. package/ts_build/tests/unit/login.test.d.ts +0 -1
  861. package/ts_build/tests/unit/login.test.js +0 -166
  862. package/ts_build/tests/unit/login.test.js.map +0 -1
  863. package/ts_build/tests/unit/modules/moduleLoading.test.d.ts +0 -1
  864. package/ts_build/tests/unit/modules/moduleLoading.test.js +0 -272
  865. package/ts_build/tests/unit/modules/moduleLoading.test.js.map +0 -1
  866. package/ts_build/tests/unit/plugins/pluginLoading.test.d.ts +0 -1
  867. package/ts_build/tests/unit/plugins/pluginLoading.test.js +0 -117
  868. package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +0 -1
  869. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.d.ts +0 -1
  870. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js +0 -32
  871. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js.map +0 -1
  872. package/ts_build/tests/unit/services/KnowhowClient.test.d.ts +0 -1
  873. package/ts_build/tests/unit/services/KnowhowClient.test.js +0 -69
  874. package/ts_build/tests/unit/services/KnowhowClient.test.js.map +0 -1
  875. package/ts_build/tests/unit/services/LazyToolsService.test.d.ts +0 -1
  876. package/ts_build/tests/unit/services/LazyToolsService.test.js +0 -47
  877. package/ts_build/tests/unit/services/LazyToolsService.test.js.map +0 -1
  878. package/ts_build/tests/unit/services/Mcp.test.d.ts +0 -1
  879. package/ts_build/tests/unit/services/Mcp.test.js +0 -45
  880. package/ts_build/tests/unit/services/Mcp.test.js.map +0 -1
  881. package/ts_build/tests/unit/services/MinimalToolsService.test.d.ts +0 -1
  882. package/ts_build/tests/unit/services/MinimalToolsService.test.js +0 -320
  883. package/ts_build/tests/unit/services/MinimalToolsService.test.js.map +0 -1
  884. package/ts_build/tests/unit/services/RuntimeReloadService.test.d.ts +0 -1
  885. package/ts_build/tests/unit/services/RuntimeReloadService.test.js +0 -26
  886. package/ts_build/tests/unit/services/RuntimeReloadService.test.js.map +0 -1
  887. package/ts_build/tests/unit/services/SessionManager.test.d.ts +0 -1
  888. package/ts_build/tests/unit/services/SessionManager.test.js +0 -72
  889. package/ts_build/tests/unit/services/SessionManager.test.js.map +0 -1
  890. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.d.ts +0 -1
  891. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js +0 -78
  892. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js.map +0 -1
  893. package/ts_build/tests/unit/services/SyncerService.test.d.ts +0 -1
  894. package/ts_build/tests/unit/services/SyncerService.test.js +0 -40
  895. package/ts_build/tests/unit/services/SyncerService.test.js.map +0 -1
  896. package/ts_build/tests/unit/tunnel.test.d.ts +0 -1
  897. package/ts_build/tests/unit/tunnel.test.js +0 -47
  898. package/ts_build/tests/unit/tunnel.test.js.map +0 -1
  899. package/ts_build/tests/unit/util/Trace.test.d.ts +0 -1
  900. package/ts_build/tests/unit/util/Trace.test.js +0 -107
  901. package/ts_build/tests/unit/util/Trace.test.js.map +0 -1
  902. package/ts_build/tests/unit/utils/http.test.d.ts +0 -1
  903. package/ts_build/tests/unit/utils/http.test.js +0 -69
  904. package/ts_build/tests/unit/utils/http.test.js.map +0 -1
  905. package/tsconfig.json +0 -34
  906. package/tslint.json +0 -11
@@ -1,1153 +0,0 @@
1
- import {
2
- CompletionOptions,
3
- CompletionResponse,
4
- StreamChunk,
5
- EmbeddingOptions,
6
- EmbeddingResponse,
7
- GenericClient,
8
- AudioTranscriptionOptions,
9
- AudioTranscriptionResponse,
10
- AudioGenerationOptions,
11
- AudioGenerationResponse,
12
- ImageGenerationOptions,
13
- ImageGenerationResponse,
14
- VideoGenerationOptions,
15
- VideoGenerationResponse,
16
- VideoStatusOptions,
17
- VideoStatusResponse,
18
- FileUploadOptions,
19
- FileUploadResponse,
20
- FileDownloadOptions,
21
- FileDownloadResponse,
22
- ModelModality,
23
- } from "./types";
24
- import { GenericOpenAiClient } from "./openai";
25
- import { GenericAnthropicClient } from "./anthropic";
26
- import { GenericGeminiClient } from "./gemini";
27
- import { GenericXAIClient } from "./xai";
28
- import { KnowhowGenericClient } from "./knowhow";
29
- import { HttpClient } from "./http";
30
- import { ModelProvider } from "../types";
31
- import { getConfig, getConfigSync } from "../config";
32
- import { loadKnowhowJwt, KNOWHOW_API_URL } from "../services/KnowhowClient";
33
- import { keyPairExists } from "../auth/keyManager";
34
- import { getOrgIdForApi } from "../auth/environmentAuth";
35
- import { ContextLimits } from "./contextLimits";
36
- import { OpenAiTextPricing } from "./pricing/openai";
37
- import { AnthropicTextPricing } from "./pricing/anthropic";
38
- import { GeminiPricing } from "./pricing/google";
39
- import { withRetry } from "./withRetry";
40
- import { FireworksTextPricing } from "./pricing/fireworks";
41
- import {
42
- XaiTextPricing,
43
- XaiImagePricing,
44
- XaiVideoPricing,
45
- } from "./pricing/xai";
46
- import { MetaTextPricing } from "./pricing/meta";
47
- import type {
48
- ModelPricing,
49
- ModelType,
50
- ModelCatalogEntry,
51
- } from "./pricing/types";
52
- import { GenericCerebrasClient } from "./cerebras";
53
- import { GenericGroqClient } from "./groq";
54
- import { GenericGitHubModelsClient } from "./github";
55
- import { GenericNvidiaClient } from "./nvidia";
56
- import { GenericOpenRouterClient } from "./openrouter";
57
- import { GenericDeepSeekClient } from "./deepseek";
58
- import { GenericMistralClient } from "./mistral";
59
- import { GitHubCopilotClient } from "./copilot";
60
- import { GenericLlamaClient } from "./llama";
61
- import { GenericFireworksClient } from "./fireworks";
62
- import { GenericMetaClient } from "./meta";
63
- import { GenericQwenClient } from "./qwen";
64
- import { TraceAll } from "../util/Trace";
65
- export {
66
- OpenAiTextPricing,
67
- AnthropicTextPricing,
68
- GeminiPricing,
69
- XaiTextPricing,
70
- XaiImagePricing,
71
- XaiVideoPricing,
72
- };
73
- export * from "./responseMetadata";
74
- export type {
75
- ModelPricing,
76
- ModelType,
77
- ModelCatalogEntry,
78
- } from "./pricing/types";
79
-
80
- // ---------------------------------------------------------------------------
81
- // Built-in provider registry
82
- // Maps provider name → { clientClass } so AIClient knows how to instantiate
83
- // known providers without needing a url.
84
- // ---------------------------------------------------------------------------
85
-
86
- type ProviderRegistryEntry = {
87
- /** Constructor that accepts the optional API key passed by the registry. */
88
- clientClass?: new (arg1?: string) => GenericClient;
89
- /** Custom factory — takes precedence over clientClass */
90
- createClient?: (entry: ModelProvider) => GenericClient | null;
91
- };
92
-
93
- const BUILT_IN_PROVIDER_REGISTRY: Record<string, ProviderRegistryEntry> = {
94
- openai: { clientClass: GenericOpenAiClient },
95
- anthropic: { clientClass: GenericAnthropicClient },
96
- google: { clientClass: GenericGeminiClient },
97
- xai: { clientClass: GenericXAIClient },
98
- cerebras: {
99
- clientClass: GenericCerebrasClient,
100
- },
101
- groq: { clientClass: GenericGroqClient },
102
- github: { clientClass: GenericGitHubModelsClient },
103
- nvidia: { clientClass: GenericNvidiaClient },
104
- openrouter: { clientClass: GenericOpenRouterClient },
105
- deepseek: { clientClass: GenericDeepSeekClient },
106
- mistral: { clientClass: GenericMistralClient },
107
- "github-copilot": { clientClass: GitHubCopilotClient },
108
- llama: { clientClass: GenericLlamaClient },
109
- fireworks: { clientClass: GenericFireworksClient },
110
- meta: { clientClass: GenericMetaClient },
111
- qwen: { clientClass: GenericQwenClient },
112
- knowhow: {
113
- createClient: (entry: ModelProvider) => {
114
- if (!loadKnowhowJwt()) {
115
- const config = getConfigSync();
116
- const orgId = getOrgIdForApi(config, KNOWHOW_API_URL);
117
- if (
118
- !orgId ||
119
- (!keyPairExists(config.cliIdentityPath) && !keyPairExists())
120
- )
121
- return null;
122
- }
123
- return new KnowhowGenericClient(KNOWHOW_API_URL);
124
- },
125
- },
126
- };
127
-
128
- // ---------------------------------------------------------------------------
129
- // Default providers — pure data, no createClient logic here.
130
- // envKey: if set, the env var must be non-empty before this provider is init'd.
131
- // No envKey means the provider uses its own check (e.g. knowhow uses JWT file).
132
- // ---------------------------------------------------------------------------
133
- const DEFAULT_PROVIDERS: ModelProvider[] = [
134
- { provider: "openai", envKey: "OPENAI_API_KEY" },
135
- { provider: "anthropic", envKey: "ANTHROPIC_API_KEY" },
136
- { provider: "google", envKey: "GEMINI_API_KEY" },
137
- { provider: "xai", envKey: "XAI_API_KEY" },
138
- { provider: "cerebras", envKey: "CEREBRAS_API_KEY" },
139
- { provider: "knowhow" },
140
- { provider: "groq", envKey: "GROQ_API_KEY" },
141
- { provider: "github", envKey: "GITHUB_TOKEN" },
142
- { provider: "nvidia", envKey: "NVIDIA_API_KEY" },
143
- { provider: "openrouter", envKey: "OPENROUTER_API_KEY" },
144
- { provider: "deepseek", envKey: "DEEPSEEK_API_KEY" },
145
- { provider: "mistral", envKey: "MISTRAL_API_KEY" },
146
- { provider: "github-copilot", envKey: "GITHUB_COPILOT_TOKEN" },
147
- { provider: "llama", envKey: "LLAMA_API_KEY" },
148
- { provider: "fireworks", envKey: "FIREWORKS_API_KEY" },
149
- { provider: "meta", envKey: "META_API_KEY" },
150
- { provider: "qwen", envKey: "QWEN_CLOUD_API_KEY" },
151
- ];
152
-
153
- @TraceAll()
154
- export class AIClient {
155
- clients: Record<string, GenericClient> = {};
156
-
157
- completionModels: Record<string, string[]> = {};
158
- embeddingModels: Record<string, string[]> = {};
159
- clientModels: Record<string, string[]> = {};
160
- imageModels: Record<string, string[]> = {};
161
- audioModels: Record<string, string[]> = {};
162
- videoModels: Record<string, string[]> = {};
163
-
164
- /** Internal registry: provider name → how to create + what models it has */
165
- private providerRegistry: Record<string, ProviderRegistryEntry> = {
166
- ...BUILT_IN_PROVIDER_REGISTRY,
167
- };
168
-
169
- constructor() {
170
- // _initDefaultProviders is async but we fire-and-forget here.
171
- // Call registerModelProviders() or registerConfiguredModels() after construction
172
- // if you need to await full registration.
173
- this._initDefaultProviders();
174
- }
175
-
176
- // ---------------------------------------------------------------------------
177
- // Internal helpers
178
- // ---------------------------------------------------------------------------
179
-
180
- private async _initDefaultProviders() {
181
- await this.registerModelProviders(DEFAULT_PROVIDERS);
182
- }
183
-
184
- /**
185
- * Resolve a GenericClient from a ModelProvider entry.
186
- * Priority:
187
- * 1. registry.createClient(entry)
188
- * 2. registry.clientClass(envValue)
189
- * 3. HttpClient(url, headers) + optional JWT
190
- */
191
- public resolveClient(entry: ModelProvider): GenericClient | null {
192
- const reg = this.providerRegistry[entry.provider];
193
-
194
- // 1. Custom factory in registry
195
- if (reg?.createClient) {
196
- return reg.createClient(entry);
197
- }
198
-
199
- // 2. Known clientClass
200
- if (reg?.clientClass) {
201
- // Use the entry's envKey, or fall back to the DEFAULT_PROVIDERS envKey for this provider
202
- const effectiveEnvKey =
203
- entry.envKey ??
204
- DEFAULT_PROVIDERS.find((p) => p.provider === entry.provider)?.envKey;
205
-
206
- if (effectiveEnvKey) {
207
- // envKey-based auth: env var must be present
208
- const envValue = process.env[effectiveEnvKey];
209
- if (!envValue) return null;
210
- const client = new reg.clientClass(envValue);
211
- // Apply any extra options (timeout, headers, extra_body) from config
212
- if (client instanceof HttpClient) {
213
- client.setOptions({
214
- timeout: entry.timeout,
215
- headers: entry.headers,
216
- extra_body: entry.extra_body,
217
- });
218
- if (entry.pricing) client.setPrices(entry.pricing);
219
- }
220
- return client;
221
- }
222
-
223
- // No envKey, no url — instantiate with no arg (client uses its own defaults)
224
- const client = new reg.clientClass();
225
- // Apply any extra options (timeout, headers, extra_body) from config
226
- if (client instanceof HttpClient) {
227
- client.setOptions({
228
- timeout: entry.timeout,
229
- headers: entry.headers,
230
- extra_body: entry.extra_body,
231
- });
232
- if (entry.pricing) client.setPrices(entry.pricing);
233
- }
234
- return client;
235
- }
236
-
237
- // 3. HTTP provider — requires url, no clientClass in registry
238
- if (entry.url) {
239
- const client = new HttpClient(entry.url, {
240
- headers: entry.headers,
241
- timeout: entry.timeout,
242
- extra_body: entry.extra_body,
243
- });
244
- if (entry.jwtFile) {
245
- client.loadJwtFile(entry.jwtFile);
246
- }
247
- // For custom HTTP providers, use entry.pricing if available
248
- if (entry.pricing) client.setPrices(entry.pricing);
249
- return client;
250
- }
251
-
252
- return null;
253
- }
254
-
255
- /**
256
- * Register a client's models into all relevant modality buckets by calling
257
- * client.getModels(modality) for each modality.
258
- */
259
- private async _registerClientModalities(
260
- provider: string,
261
- client: GenericClient
262
- ) {
263
- this.clients[provider] = client;
264
-
265
- const modalities: ModelModality[] = [
266
- "completion",
267
- "embedding",
268
- "image",
269
- "audio",
270
- "video",
271
- ];
272
- for (const modality of modalities) {
273
- try {
274
- const result = await client.getModels(modality);
275
- const models = result.map((m) => m.id);
276
-
277
- if (!models.length) continue;
278
-
279
- switch (modality) {
280
- case "completion":
281
- this._mergeModels(this.completionModels, provider, models);
282
- break;
283
- case "embedding":
284
- this._mergeModels(this.embeddingModels, provider, models);
285
- break;
286
- case "image":
287
- this._mergeModels(this.imageModels, provider, models);
288
- break;
289
- case "audio":
290
- this._mergeModels(this.audioModels, provider, models);
291
- break;
292
- case "video":
293
- this._mergeModels(this.videoModels, provider, models);
294
- break;
295
- }
296
- this._mergeModels(this.clientModels, provider, models);
297
- } catch {
298
- // modality not supported by this client — skip silently
299
- }
300
- }
301
- }
302
-
303
- private _mergeModels(
304
- map: Record<string, string[]>,
305
- provider: string,
306
- models: string[]
307
- ) {
308
- const current = map[provider] || [];
309
- map[provider] = Array.from(new Set([...current, ...models]));
310
- }
311
-
312
- // ---------------------------------------------------------------------------
313
- // Public API
314
- // ---------------------------------------------------------------------------
315
-
316
- /**
317
- * Register model providers from a list of ModelProvider entries.
318
- * This is the central registration method — registerConfiguredModels() calls this.
319
- * For registry-known providers, uses getModels() for modality registration.
320
- * For HTTP-only providers, falls back to loadProviderModels() (live /models call).
321
- */
322
- async registerModelProviders(providers: ModelProvider[]) {
323
- for (const entry of providers) {
324
- const client = this.resolveClient(entry);
325
-
326
- if (!client) {
327
- if (entry.provider === "knowhow") {
328
- if (process.env.KNOWHOW_CLI) {
329
- const warnNeeds = (process.env.KNOWHOW_WARN_NEEDS ?? "").split(",");
330
- if (warnNeeds.includes("models"))
331
- console.warn(
332
- `⚠️ Knowhow provider is not logged in. Run 'knowhow login' to enable Knowhow models.`
333
- );
334
- }
335
- }
336
- continue;
337
- }
338
-
339
- const reg = this.providerRegistry[entry.provider];
340
-
341
- if (reg) {
342
- // Registry-known provider: use client.getModels(modality) for registration
343
- await this._registerClientModalities(entry.provider, client);
344
- } else {
345
- // HTTP provider (no registry entry): register client and fetch /models live
346
- this.clients[entry.provider] = client;
347
- try {
348
- await this.loadProviderModels(entry.provider);
349
- } catch (error) {
350
- console.error(
351
- `Failed to register models for provider ${entry.provider}:`,
352
- error.message
353
- );
354
- }
355
- }
356
- }
357
- }
358
-
359
- async registerConfiguredModels() {
360
- const config = await getConfig();
361
- const modelProviders = config.modelProviders || [];
362
-
363
- // If the config explicitly defines modelProviders, unregister only the
364
- // default providers that are NOT present in the config — so omitting a
365
- // provider from the config effectively disables it, but providers that
366
- // appear in both defaults and config are not double-processed.
367
- if (config.modelProviders !== undefined) {
368
- const configProviderNames = new Set(
369
- modelProviders.map((p) => p.provider)
370
- );
371
- for (const defaultEntry of DEFAULT_PROVIDERS) {
372
- if (!configProviderNames.has(defaultEntry.provider)) {
373
- this.unregisterProvider(defaultEntry.provider);
374
- }
375
- }
376
- }
377
-
378
- if (modelProviders.length > 0) {
379
- await this.registerModelProviders(modelProviders);
380
- }
381
- }
382
-
383
- /**
384
- * Remove a provider and all its registered models from the client.
385
- */
386
- unregisterProvider(provider: string) {
387
- delete this.clients[provider];
388
- delete this.clientModels[provider];
389
- delete this.completionModels[provider];
390
- delete this.embeddingModels[provider];
391
- delete this.imageModels[provider];
392
- delete this.audioModels[provider];
393
- delete this.videoModels[provider];
394
- }
395
-
396
- /**
397
- * Register a custom client class or factory for a provider name.
398
- * This allows external code (plugins, modules) to add first-party clients.
399
- */
400
- registerClientClass(provider: string, entry: ProviderRegistryEntry) {
401
- this.providerRegistry[provider] = entry;
402
- }
403
-
404
- getClient(provider: string, model?: string) {
405
- if (provider && !model) {
406
- return { client: this.clients[provider], provider, model: undefined };
407
- }
408
-
409
- const detected = this.detectProviderModel(provider, model);
410
-
411
- provider = detected.provider;
412
- model = detected.model;
413
-
414
- if (!this.clients[provider]) {
415
- throw new Error(
416
- `Provider ${provider} for model ${model} not registered. Available providers: ${Object.keys(
417
- this.clients
418
- )}`
419
- );
420
- }
421
-
422
- const hasModel = this.providerHasModel(provider, model);
423
-
424
- if (!hasModel) {
425
- // Model not in local registry — pass it through anyway so the provider
426
- // API can accept or reject it directly (e.g. newly-released models that
427
- // haven't been fetched into our local model list yet).
428
- console.warn(
429
- `⚠️ Model '${model}' not in local registry for provider '${provider}', attempting anyway.`
430
- );
431
- }
432
-
433
- return { client: this.clients[provider], provider, model };
434
- }
435
-
436
- registerClient(provider: string, client: GenericClient) {
437
- this.clients[provider] = client;
438
- }
439
-
440
- setKey(provider: string, apiKey: string) {
441
- const { client } = this.getClient(provider);
442
- client.setKey(apiKey);
443
- this.clients[provider].setKey(apiKey);
444
- }
445
-
446
- async loadProviderModels(provider: string) {
447
- if (!this.clients[provider]) {
448
- throw new Error(`Provider ${provider} not registered.`);
449
- }
450
-
451
- try {
452
- const models = await this.clients[provider].getModels();
453
- const ids = models.map((model) => model.id);
454
- this.registerModels(provider, ids);
455
- } catch (error) {
456
- console.error(
457
- `Failed to load models for provider ${provider}:`,
458
- error.message
459
- );
460
- }
461
- }
462
-
463
- registerModels(provider: string, models: string[]) {
464
- const currentModels = this.clientModels[provider] || [];
465
- const currentCompletionModels = this.completionModels[provider] || [];
466
- this.clientModels[provider] = Array.from<string>(
467
- new Set(currentModels.concat(models))
468
- );
469
-
470
- const embeddingModels = this.embeddingModels[provider] || [];
471
- this.embeddingModels[provider] = Array.from<string>(
472
- new Set(embeddingModels.concat(models.filter((m) => m.includes("embed"))))
473
- );
474
-
475
- // We will assume if you register models, it's for completions
476
- this.completionModels[provider] = Array.from<string>(
477
- new Set(
478
- currentCompletionModels.concat(
479
- models.filter((m) => !m.includes("embed"))
480
- )
481
- )
482
- );
483
- }
484
-
485
- /*
486
- * Some clients support multiple providers, most clients are single provider
487
- * For the multi-provider clients, we register them with this method
488
- */
489
- registerClientProviderModels(
490
- client: GenericClient,
491
- providerModels: Record<string, string[]>
492
- ) {
493
- for (const [provider, models] of Object.entries(providerModels)) {
494
- this.registerClient(provider, client);
495
- this.registerModels(provider, models);
496
- }
497
- }
498
-
499
- registerEmbeddingModels(provider: string, models: string[]) {
500
- const currentModels = this.clientModels[provider] || [];
501
- this.clientModels[provider] = Array.from<string>(
502
- new Set(currentModels.concat(models))
503
- );
504
-
505
- this.embeddingModels[provider] = Array.from<string>(
506
- new Set(currentModels.concat(models))
507
- );
508
- }
509
-
510
- registerImageModels(provider: string, models: string[]) {
511
- const currentModels = this.clientModels[provider] || [];
512
- const currentImageModels = this.imageModels[provider] || [];
513
- this.clientModels[provider] = Array.from<string>(
514
- new Set(currentModels.concat(models))
515
- );
516
- this.imageModels[provider] = Array.from<string>(
517
- new Set(currentImageModels.concat(models))
518
- );
519
- }
520
-
521
- registerAudioModels(provider: string, models: string[]) {
522
- const currentModels = this.clientModels[provider] || [];
523
- const currentAudioModels = this.audioModels[provider] || [];
524
- this.clientModels[provider] = Array.from<string>(
525
- new Set(currentModels.concat(models))
526
- );
527
- this.audioModels[provider] = Array.from<string>(
528
- new Set(currentAudioModels.concat(models))
529
- );
530
- }
531
-
532
- registerVideoModels(provider: string, models: string[]) {
533
- const currentModels = this.clientModels[provider] || [];
534
- const currentVideoModels = this.videoModels[provider] || [];
535
- this.clientModels[provider] = Array.from<string>(
536
- new Set(currentModels.concat(models))
537
- );
538
- this.videoModels[provider] = Array.from<string>(
539
- new Set(currentVideoModels.concat(models))
540
- );
541
- }
542
-
543
- providerHasModel(provider: string, model: string): boolean {
544
- if (!provider) return false;
545
- const models = this.clientModels[provider];
546
- if (!models) return false;
547
- return models.includes(model);
548
- }
549
-
550
- findModel(modelPrefix: string) {
551
- if (!modelPrefix) return undefined;
552
- for (const provider of Object.keys(this.clientModels)) {
553
- const models = this.clientModels[provider] as string[];
554
- const foundModel = models.find((m) => m.startsWith(modelPrefix));
555
- if (foundModel) {
556
- return { provider, model: foundModel };
557
- }
558
-
559
- // Handle the case when model prefix is gpt-5 and the provider is knowhow, and the actual model is openai/gpt-5
560
- // Also handles deep prefixes like "accounts/fireworks/models/kimi-k3" matched by "kimi-k3"
561
- const inferredFound = models.find((m) => {
562
- const split = m.split("/");
563
- if (split.length < 2) return false;
564
- const inferredModel = split.slice(1).join("/");
565
- const lastSegment = split[split.length - 1];
566
- return (
567
- m === modelPrefix ||
568
- inferredModel === modelPrefix ||
569
- inferredModel.startsWith(modelPrefix) ||
570
- lastSegment === modelPrefix
571
- );
572
- });
573
- if (inferredFound) {
574
- return { provider, model: inferredFound };
575
- }
576
- }
577
-
578
- // We didn't find the model, but it contains a slash, maybe it's prefixed with a provider
579
- if (modelPrefix.includes("/")) {
580
- const split = modelPrefix.split("/");
581
- return this.findModel(split.slice(1).join("/"));
582
- }
583
-
584
- return undefined;
585
- }
586
-
587
- /**
588
- * Normalize a model ID for fuzzy matching:
589
- * - lowercase
590
- * - replace dots with dashes (e.g. "claude-opus-4.7" → "claude-opus-4-7")
591
- * - strip variant suffixes like ":thinking", ":free"
592
- * - strip trailing date suffixes like "-20250514"
593
- * - strip trailing "-beta", "-preview", "-latest"
594
- */
595
- private static normalizeModelId(id: string): string {
596
- return id
597
- .toLowerCase()
598
- .replace(/\./g, "-")
599
- .replace(/:[^:]+$/, "")
600
- .replace(/-\d{8}$/, "")
601
- .replace(/-(beta|preview|latest|exp|rc\d*)$/i, "");
602
- }
603
-
604
- /**
605
- * Fuzzy model lookup: given a model name (possibly without date suffix,
606
- * with dots instead of dashes, etc.), find the best matching registered model.
607
- *
608
- * Example: "claude-3.7-sonnet" matches "claude-3-7-sonnet-20250219"
609
- * "gpt-4.1" matches "gpt-4.1" exactly
610
- *
611
- * @param modelQuery - the model name to search for (can be partial/normalized)
612
- * @param provider - optional provider to restrict search to
613
- */
614
- findModelFuzzy(
615
- modelQuery: string,
616
- provider?: string
617
- ): { provider: string; model: string } | undefined {
618
- const queryNorm = AIClient.normalizeModelId(modelQuery);
619
- const providers = provider ? [provider] : Object.keys(this.clientModels);
620
-
621
- for (const p of providers) {
622
- const models = (this.clientModels[p] as string[]) ?? [];
623
- for (const m of models) {
624
- const mNorm = AIClient.normalizeModelId(m);
625
- // Exact normalized match, OR our model is a dated variant of the query
626
- if (mNorm === queryNorm || mNorm.startsWith(queryNorm + "-")) {
627
- return { provider: p, model: m };
628
- }
629
- }
630
- }
631
- return undefined;
632
- }
633
-
634
- // detects these formats:
635
- // "openai", "gpt-5"
636
- // "knowhow", "openai/gpt-5"
637
- // "", "openai/gpt-5"
638
- // "", openai/gpt-5
639
- // "", "knowhow/openai/gpt-5"
640
- detectProviderModel(provider: string, model?: string) {
641
- if (this.providerHasModel(provider, model)) {
642
- return { provider, model };
643
- }
644
-
645
- // When an explicit provider is given and the model contains slashes (e.g.
646
- // provider="knowhow", model="anthropic/claude-sonnet-4-6"), check if the
647
- // explicit provider has a model that matches by ignoring the leading
648
- // provider prefix segments. Also handle deep prefixes like
649
- // "accounts/fireworks/models/kimi-k3" → search for "kimi-k3".
650
- if (provider && model) {
651
- const providerModels = this.clientModels[provider] ?? [];
652
- if (model.includes("/")) {
653
- // Model has slashes: try progressively stripping leading prefix segments
654
- const modelParts = model.split("/");
655
- for (let i = 1; i < modelParts.length; i++) {
656
- const suffix = modelParts.slice(i).join("/");
657
- // Exact match within the explicit provider
658
- if (this.providerHasModel(provider, suffix)) {
659
- return { provider, model: suffix };
660
- }
661
- }
662
- }
663
- // For any model (with or without slashes): check if a registered model's
664
- // last path segment matches the requested model name.
665
- // e.g. provider="fireworks", model="kimi-k3" matches
666
- // "accounts/fireworks/models/kimi-k3"
667
- const lastSegmentMatch = providerModels.find(
668
- (m) => m.split("/").pop() === model
669
- );
670
- if (lastSegmentMatch) {
671
- return { provider, model: lastSegmentMatch };
672
- }
673
- }
674
-
675
- // If an explicit provider was given, don't fall through to fuzzy cross-provider
676
- // search — that would silently pick a completely different provider (e.g. nvidia
677
- // instead of fireworks). Just pass through and let the API accept/reject the model.
678
- const hasExplicitProvider = !!provider;
679
-
680
- if (model?.includes("/")) {
681
- const split = model.split("/");
682
-
683
- const inferredProvider = split[0];
684
- const inferredModel = split.slice(1).join("/");
685
-
686
- // Exact match
687
- if (this.providerHasModel(inferredProvider, inferredModel)) {
688
- return { provider: inferredProvider, model: inferredModel };
689
- }
690
-
691
- // Starts with match — only if no explicit provider was given
692
- if (!hasExplicitProvider) {
693
- const foundBySplit = this.findModel(inferredModel);
694
- if (foundBySplit) {
695
- return foundBySplit;
696
- }
697
- }
698
- }
699
-
700
- // Fuzzy cross-provider search — only if no explicit provider was given
701
- if (!hasExplicitProvider) {
702
- const foundByModel = this.findModel(model);
703
- if (foundByModel) {
704
- return foundByModel;
705
- }
706
- }
707
-
708
- const allModels = this.listAllModels();
709
- const hasKnowhowModels = allModels.knowhow && allModels.knowhow.length > 0;
710
- const knowhowIsConfigured = Object.keys(allModels).includes("knowhow");
711
-
712
- console.warn(
713
- `⚠️ Unable to find model '${model}' for provider '${provider}'.`
714
- );
715
- console.warn(
716
- ` Available providers: ${Object.keys(allModels).join(", ") || "(none)"}`
717
- );
718
-
719
- if (!hasKnowhowModels && !knowhowIsConfigured) {
720
- console.warn(` Tip: Run 'knowhow login' to enable Knowhow models.`);
721
- } else if (!hasKnowhowModels) {
722
- console.warn(
723
- ` Tip: The Knowhow provider returned no models. Try running 'knowhow login' to re-authenticate.`
724
- );
725
- }
726
-
727
- return { provider, model };
728
- }
729
-
730
- async createCompletion(
731
- provider: string,
732
- options: CompletionOptions
733
- ): Promise<CompletionResponse> {
734
- const { client, model } = this.getClient(provider, options.model);
735
- if (!model || !client) {
736
- throw new Error(
737
- `provider: ${provider} does not have ${
738
- options.model
739
- } model registered. Try using ${JSON.stringify(this.listAllModels())}`
740
- );
741
- }
742
- return withRetry(
743
- (signal) => client.createChatCompletion({ ...options, model, signal }),
744
- options
745
- );
746
- }
747
-
748
- async *createCompletionStream(
749
- provider: string,
750
- options: CompletionOptions
751
- ): AsyncGenerator<StreamChunk> {
752
- const { client, model } = this.getClient(provider, options.model);
753
- if (!model || !client) {
754
- throw new Error(
755
- `provider: ${provider} does not have ${
756
- options.model
757
- } model registered. Try using ${JSON.stringify(this.listAllModels())}`
758
- );
759
- }
760
- if (client.createChatCompletionStream) {
761
- yield* client.createChatCompletionStream({ ...options, model });
762
- } else {
763
- // Fallback: non-streaming clients — call normal completion and yield as single chunk
764
- const result = await withRetry(
765
- (signal) => client.createChatCompletion({ ...options, model, signal }),
766
- options
767
- );
768
- yield { delta: result.choices[0]?.message?.content ?? "", done: false };
769
- yield { done: true, usage: result.usage, usd_cost: result.usd_cost };
770
- }
771
- }
772
-
773
- async createEmbedding(
774
- provider: string,
775
- options: EmbeddingOptions
776
- ): Promise<EmbeddingResponse> {
777
- const { client, model } = this.getClient(provider, options.model);
778
- if (!model || !client) {
779
- throw new Error(
780
- `provider: ${provider} does not have ${
781
- options.model
782
- } model registered. Try using ${JSON.stringify(this.listAllModels())}`
783
- );
784
- }
785
- return withRetry(
786
- (signal) => client.createEmbedding({ ...options, model, signal }),
787
- options
788
- );
789
- }
790
-
791
- async createAudioTranscription(
792
- provider: string,
793
- options: AudioTranscriptionOptions
794
- ): Promise<AudioTranscriptionResponse> {
795
- const { client } = this.getClient(provider, options.model);
796
- if (!client || !client.createAudioTranscription) {
797
- throw new Error(
798
- `Provider ${provider} does not support audio transcription.`
799
- );
800
- }
801
- return withRetry(
802
- (signal) => client.createAudioTranscription({ ...options, signal }),
803
- options
804
- );
805
- }
806
-
807
- async createAudioGeneration(
808
- provider: string,
809
- options: AudioGenerationOptions
810
- ): Promise<AudioGenerationResponse> {
811
- const { client, model } = this.getClient(provider, options.model);
812
- if (!client || !client.createAudioGeneration) {
813
- throw new Error(
814
- `Provider ${provider} does not support audio generation.`
815
- );
816
- }
817
- if (!model) {
818
- throw new Error(
819
- `Model ${options.model} not registered for provider ${provider}.`
820
- );
821
- }
822
- return withRetry(
823
- (signal) => client.createAudioGeneration({ ...options, model, signal }),
824
- options
825
- );
826
- }
827
-
828
- async createImageGeneration(
829
- provider: string,
830
- options: ImageGenerationOptions
831
- ): Promise<ImageGenerationResponse> {
832
- const { client, model } = this.getClient(provider, options.model);
833
- if (!client || !client.createImageGeneration) {
834
- throw new Error(
835
- `Provider ${provider} does not support image generation.`
836
- );
837
- }
838
- if (!model) {
839
- throw new Error(
840
- `Model ${options.model} not registered for provider ${provider}.`
841
- );
842
- }
843
- return withRetry(
844
- (signal) => client.createImageGeneration({ ...options, model, signal }),
845
- options
846
- );
847
- }
848
-
849
- async createVideoGeneration(
850
- provider: string,
851
- options: VideoGenerationOptions
852
- ): Promise<VideoGenerationResponse> {
853
- const { client, model } = this.getClient(provider, options.model);
854
- if (!client || !client.createVideoGeneration) {
855
- throw new Error(
856
- `Provider ${provider} does not support video generation.`
857
- );
858
- }
859
- if (!model) {
860
- throw new Error(
861
- `Model ${options.model} not registered for provider ${provider}.`
862
- );
863
- }
864
- return withRetry(
865
- (signal) => client.createVideoGeneration({ ...options, model, signal }),
866
- options
867
- );
868
- }
869
-
870
- async getVideoStatus(
871
- provider: string,
872
- options: VideoStatusOptions
873
- ): Promise<VideoStatusResponse> {
874
- const { client } = this.getClient(provider, options.model);
875
- if (!client || !client.getVideoStatus) {
876
- throw new Error(`Provider ${provider} does not support getVideoStatus.`);
877
- }
878
- return client.getVideoStatus(options);
879
- }
880
-
881
- async downloadVideo(
882
- provider: string,
883
- options: FileDownloadOptions
884
- ): Promise<FileDownloadResponse> {
885
- const { client } = this.getClient(provider);
886
- if (!client || !client.downloadVideo) {
887
- throw new Error(`Provider ${provider} does not support downloadVideo.`);
888
- }
889
- return client.downloadVideo(options);
890
- }
891
-
892
- async uploadFile(
893
- provider: string,
894
- options: FileUploadOptions
895
- ): Promise<FileUploadResponse> {
896
- const { client } = this.getClient(provider);
897
- if (!client || !client.uploadFile) {
898
- throw new Error(`Provider ${provider} does not support uploadFile.`);
899
- }
900
- return client.uploadFile(options);
901
- }
902
-
903
- async downloadFile(
904
- provider: string,
905
- options: FileDownloadOptions
906
- ): Promise<FileDownloadResponse> {
907
- const { client } = this.getClient(provider);
908
- if (!client || !client.downloadFile) {
909
- throw new Error(`Provider ${provider} does not support downloadFile.`);
910
- }
911
- return client.downloadFile(options);
912
- }
913
-
914
- getRegisteredModels(provider: string): string[] {
915
- return this.clientModels[provider] || [];
916
- }
917
-
918
- listAllModels() {
919
- return this.clientModels;
920
- }
921
-
922
- /**
923
- * Filters a provider→models map to only include models that have known pricing.
924
- * For HttpClient-based providers with getPricing(), only priced models are kept.
925
- * For other providers (no getPricing()), all models pass through unchanged.
926
- */
927
- private _filterByPricing(
928
- models: Record<string, string[]>
929
- ): Record<string, string[]> {
930
- const result: Record<string, string[]> = {};
931
- for (const [provider, ids] of Object.entries(models)) {
932
- const client = this.clients[provider];
933
- if (client?.getPricing) {
934
- const pricingMap = client.getPricing() as Record<string, ModelPricing>;
935
- const priced = ids.filter((id) => !!pricingMap[id]);
936
- if (priced.length > 0) result[provider] = priced;
937
- } else {
938
- result[provider] = ids;
939
- }
940
- }
941
- return result;
942
- }
943
-
944
- /*
945
- * Some clients return models in the format "provider/model_name".
946
- * This function parses those models into our {provider, model} format
947
- * then creates a provider -> [models] map.
948
- * The models will not have the provider prefix.
949
- *
950
- * If the client doesn't return models in that format, use knownProvider
951
- * to set the provider.
952
- */
953
- async parseProviderPrefixedModels(
954
- client: GenericClient,
955
- knownProvider = ""
956
- ): Promise<Record<string, string[]>> {
957
- const models = await client.getModels();
958
- const providerModels = models
959
- .map((m) => {
960
- if (knownProvider) {
961
- return {
962
- provider: knownProvider,
963
- model: m.id,
964
- };
965
- }
966
-
967
- const splitModel = m.id.split("/");
968
-
969
- if (splitModel.length < 2) {
970
- console.warn(`Cannot parse model format: ${m.id}`);
971
- }
972
-
973
- const provider = splitModel.length > 1 ? splitModel[0] : "";
974
- const modelName = splitModel.slice(1).join("/");
975
- return {
976
- provider,
977
- model: modelName,
978
- };
979
- })
980
- .reduce((acc, { provider, model }) => {
981
- acc[provider] = acc[provider] || [];
982
- acc[provider].push(model);
983
- return acc;
984
- }, {});
985
-
986
- for (const provider in providerModels) {
987
- if (!providerModels[provider].length) {
988
- delete providerModels[provider];
989
- }
990
- }
991
- return providerModels;
992
- }
993
-
994
- listAllCompletionModels(options?: { pricing?: boolean }) {
995
- if (options?.pricing) return this._filterByPricing(this.completionModels);
996
- return this.completionModels;
997
- }
998
-
999
- listAllProviders() {
1000
- return Object.keys(this.clientModels);
1001
- }
1002
-
1003
- listAllEmbeddingModels(options?: { pricing?: boolean }) {
1004
- if (options?.pricing) return this._filterByPricing(this.embeddingModels);
1005
- return this.embeddingModels;
1006
- }
1007
-
1008
- listAllImageModels(options?: { pricing?: boolean }) {
1009
- if (options?.pricing) return this._filterByPricing(this.imageModels);
1010
- return this.imageModels;
1011
- }
1012
-
1013
- listAllAudioModels(options?: { pricing?: boolean }) {
1014
- if (options?.pricing) return this._filterByPricing(this.audioModels);
1015
- return this.audioModels;
1016
- }
1017
-
1018
- listAllVideoModels(options?: { pricing?: boolean }) {
1019
- if (options?.pricing) return this._filterByPricing(this.videoModels);
1020
- return this.videoModels;
1021
- }
1022
-
1023
- listAllModelsWithProvider(options?: { pricing?: boolean }) {
1024
- const models = options?.pricing
1025
- ? this._filterByPricing(this.clientModels)
1026
- : this.clientModels;
1027
- return Object.entries(models)
1028
- .map(([provider, ids]) => ids.map((m) => ({ id: `${provider}/${m}` })))
1029
- .flat();
1030
- }
1031
-
1032
- /**
1033
- * Returns the context window limit (in tokens) for a given model.
1034
- * Delegates to the registered client's getContextLimit() if available.
1035
- * Falls back to the global ContextLimits table, stripping any leading
1036
- * provider prefix (e.g. "openai/gpt-5.6-sol" → "gpt-5.6-sol") so that
1037
- * proxied providers like "knowhow" resolve correctly.
1038
- */
1039
- getContextLimit(
1040
- provider: string,
1041
- model: string
1042
- ): { contextLimit: number; threshold: number } | undefined {
1043
- const client = this.clients[provider];
1044
- if (client?.getContextLimit) {
1045
- return client.getContextLimit(model);
1046
- }
1047
- // Try the model as-is first, then strip leading "provider/" prefixes
1048
- // (e.g. "openai/gpt-5.6-sol" used with the "knowhow" proxy provider).
1049
- const candidates = [model];
1050
- if (model.includes("/")) {
1051
- const parts = model.split("/");
1052
- for (let i = 1; i < parts.length; i++) {
1053
- candidates.push(parts.slice(i).join("/"));
1054
- }
1055
- }
1056
- for (const candidate of candidates) {
1057
- const contextLimit = ContextLimits[candidate];
1058
- if (contextLimit !== undefined) {
1059
- const pricing = OpenAiTextPricing[candidate];
1060
- const threshold =
1061
- pricing && "input_gt_200k" in pricing ? 200_000 : contextLimit;
1062
- return { contextLimit, threshold };
1063
- }
1064
- }
1065
- return undefined;
1066
- }
1067
-
1068
- /**
1069
- * Returns pricing information for all known models, derived from the
1070
- * provider pricing maps.
1071
- *
1072
- * @param modelId Optional model id filter (without provider prefix).
1073
- * If omitted, all models across all providers are returned.
1074
- */
1075
- getPrices(modelId?: string): ModelCatalogEntry[] {
1076
- const results: ModelCatalogEntry[] = [];
1077
-
1078
- const addModels = (
1079
- models: Record<string, string[]>,
1080
- type: ModelType,
1081
- pricingMap: Record<string, ModelPricing>
1082
- ) => {
1083
- for (const [provider, ids] of Object.entries(models)) {
1084
- for (const id of ids) {
1085
- if (modelId && id !== modelId) continue;
1086
- if (!pricingMap[id]) continue;
1087
-
1088
- const p = pricingMap[id];
1089
- results.push({
1090
- id,
1091
- provider,
1092
- type,
1093
- pricing: p,
1094
- });
1095
- }
1096
- }
1097
- };
1098
-
1099
- // Build a combined pricing map across all providers
1100
- const allTextPricing: Record<string, ModelPricing> = {
1101
- ...OpenAiTextPricing,
1102
- ...AnthropicTextPricing,
1103
- ...GeminiPricing,
1104
- ...XaiTextPricing,
1105
- ...FireworksTextPricing,
1106
- ...MetaTextPricing,
1107
- };
1108
- const allImagePricing: Record<string, ModelPricing> = {
1109
- ...XaiImagePricing,
1110
- };
1111
- const allVideoPricing: Record<string, ModelPricing> = {
1112
- ...XaiVideoPricing,
1113
- };
1114
-
1115
- addModels(this.completionModels, "completion", allTextPricing);
1116
- addModels(this.embeddingModels, "embedding", allTextPricing);
1117
- addModels(this.imageModels, "image", {
1118
- ...allTextPricing,
1119
- ...allImagePricing,
1120
- });
1121
- addModels(this.audioModels, "audio", allTextPricing);
1122
- addModels(this.videoModels, "video", {
1123
- ...allTextPricing,
1124
- ...allVideoPricing,
1125
- });
1126
-
1127
- return results;
1128
- }
1129
- }
1130
-
1131
- export const Clients = new AIClient();
1132
-
1133
- export * from "./types";
1134
-
1135
- export * from "./http";
1136
- export * from "./openai";
1137
- export * from "./anthropic";
1138
- export * from "./knowhow";
1139
- export * from "./gemini";
1140
- export * from "./contextLimits";
1141
- export * from "./xai";
1142
- export * from "./knowhowMcp";
1143
- export * from "./groq";
1144
- export * from "./github";
1145
- export * from "./nvidia";
1146
- export * from "./openrouter";
1147
- export * from "./deepseek";
1148
- export * from "./mistral";
1149
- export * from "./llama";
1150
- export * from "./copilot";
1151
- export * from "./fireworks";
1152
- export * from "./meta";
1153
- export * from "./qwen";