@tyvm/knowhow 0.0.159 → 0.0.160

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