@poolzin/pool-bot 2026.1.38 → 2026.2.0

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 (336) hide show
  1. package/assets/chrome-extension/README.md +3 -3
  2. package/assets/chrome-extension/background.js +5 -5
  3. package/assets/chrome-extension/manifest.json +3 -3
  4. package/assets/chrome-extension/options.html +4 -4
  5. package/assets/chrome-extension/options.js +1 -1
  6. package/dist/acp/client.js +3 -3
  7. package/dist/acp/types.js +1 -1
  8. package/dist/agents/agent-paths.js +3 -3
  9. package/dist/agents/auth-profiles/paths.js +3 -3
  10. package/dist/agents/cli-runner/helpers.js +1 -1
  11. package/dist/agents/cli-runner.js +2 -2
  12. package/dist/agents/cloudflare-ai-gateway.js +31 -0
  13. package/dist/agents/compaction.js +16 -2
  14. package/dist/agents/context-window-guard.js +13 -10
  15. package/dist/agents/context.js +4 -4
  16. package/dist/agents/docs-path.js +1 -1
  17. package/dist/agents/minimax-vlm.js +1 -1
  18. package/dist/agents/model-auth.js +12 -1
  19. package/dist/agents/model-catalog.js +4 -4
  20. package/dist/agents/model-selection.js +10 -4
  21. package/dist/agents/models-config.js +3 -3
  22. package/dist/agents/models-config.providers.js +147 -39
  23. package/dist/agents/pi-embedded-helpers/openai.js +1 -1
  24. package/dist/agents/pi-embedded-runner/compact.js +8 -8
  25. package/dist/agents/pi-embedded-runner/model.js +2 -2
  26. package/dist/agents/pi-embedded-runner/run/attempt.js +6 -6
  27. package/dist/agents/pi-embedded-runner/run.js +4 -4
  28. package/dist/agents/pi-embedded-runner/tool-result-truncation.js +275 -0
  29. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  30. package/dist/agents/pi-model-discovery.js +10 -0
  31. package/dist/agents/pi-tool-definition-adapter.js +50 -9
  32. package/dist/agents/pi-tools.before-tool-call.js +67 -0
  33. package/dist/agents/pi-tools.js +10 -5
  34. package/dist/agents/pi-tools.read.js +2 -2
  35. package/dist/agents/session-file-repair.js +83 -0
  36. package/dist/agents/session-transcript-repair.js +68 -0
  37. package/dist/agents/skills/frontmatter.js +1 -1
  38. package/dist/agents/skills/workspace.js +2 -2
  39. package/dist/agents/system-prompt.js +28 -4
  40. package/dist/agents/together-models.js +127 -0
  41. package/dist/agents/tool-images.js +1 -1
  42. package/dist/agents/tool-policy.js +1 -1
  43. package/dist/agents/tools/browser-tool.js +3 -3
  44. package/dist/agents/tools/image-tool.js +2 -2
  45. package/dist/agents/tools/memory-tool.js +94 -7
  46. package/dist/agents/tools/web-search.js +1 -1
  47. package/dist/agents/workspace.js +1 -5
  48. package/dist/auto-reply/commands-registry.data.js +1 -1
  49. package/dist/auto-reply/reply/commands-context-report.js +2 -2
  50. package/dist/auto-reply/reply/commands-session.js +2 -2
  51. package/dist/auto-reply/reply/get-reply-run.js +14 -4
  52. package/dist/auto-reply/reply/groups.js +1 -1
  53. package/dist/auto-reply/reply/inbound-context.js +4 -0
  54. package/dist/auto-reply/reply/inbound-meta.js +130 -0
  55. package/dist/auto-reply/reply/untrusted-context.js +15 -0
  56. package/dist/auto-reply/status.js +1 -1
  57. package/dist/browser/client-fetch.js +1 -1
  58. package/dist/browser/config.js +1 -1
  59. package/dist/browser/extension-relay.js +3 -3
  60. package/dist/browser/server-context.js +2 -2
  61. package/dist/build-info.json +3 -3
  62. package/dist/canvas-host/a2ui.js +3 -3
  63. package/dist/channels/plugins/agent-tools/whatsapp-login.js +1 -17
  64. package/dist/channels/plugins/catalog.js +2 -2
  65. package/dist/channels/plugins/onboarding/imessage.js +1 -1
  66. package/dist/channels/plugins/onboarding/signal.js +1 -1
  67. package/dist/channels/plugins/onboarding/slack.js +4 -4
  68. package/dist/channels/plugins/onboarding/whatsapp.js +3 -3
  69. package/dist/channels/plugins/pairing-message.js +1 -1
  70. package/dist/cli/browser-cli-extension.js +2 -2
  71. package/dist/cli/docs-cli.js +1 -1
  72. package/dist/cli/gateway-cli/dev.js +1 -1
  73. package/dist/cli/memory-cli.js +25 -15
  74. package/dist/cli/nodes-cli/register.canvas.js +1 -1
  75. package/dist/cli/plugins-cli.js +1 -1
  76. package/dist/cli/run-main.js +2 -2
  77. package/dist/cli/security-cli.js +1 -1
  78. package/dist/cli/tagline.js +1 -1
  79. package/dist/cli/update-cli.js +4 -4
  80. package/dist/cli/webhooks-cli.js +5 -5
  81. package/dist/commands/agents.commands.add.js +1 -1
  82. package/dist/commands/auth-choice.apply.api-providers.js +305 -17
  83. package/dist/commands/auth-choice.apply.js +4 -1
  84. package/dist/commands/auth-choice.apply.plugin-provider.js +2 -2
  85. package/dist/commands/auth-choice.apply.xai.js +63 -0
  86. package/dist/commands/auth-choice.preferred-provider.js +7 -1
  87. package/dist/commands/configure.wizard.js +1 -1
  88. package/dist/commands/dashboard.js +1 -1
  89. package/dist/commands/docs.js +1 -1
  90. package/dist/commands/doctor-gateway-services.js +3 -3
  91. package/dist/commands/doctor-state-integrity.js +2 -14
  92. package/dist/commands/doctor-update.js +3 -3
  93. package/dist/commands/doctor.js +1 -1
  94. package/dist/commands/models/list.probe.js +2 -2
  95. package/dist/commands/models/list.registry.js +4 -4
  96. package/dist/commands/models/list.status-command.js +2 -2
  97. package/dist/commands/onboard-auth.config-core.js +366 -28
  98. package/dist/commands/onboard-auth.credentials.js +71 -9
  99. package/dist/commands/onboard-auth.js +3 -3
  100. package/dist/commands/onboard-auth.models.js +26 -24
  101. package/dist/commands/onboard-non-interactive/local/auth-choice.js +140 -6
  102. package/dist/commands/status-all/report-lines.js +1 -1
  103. package/dist/commands/status.command.js +1 -1
  104. package/dist/commands/uninstall.js +3 -3
  105. package/dist/compat/legacy-names.js +1 -1
  106. package/dist/config/io.js +3 -3
  107. package/dist/config/schema.js +1 -1
  108. package/dist/config/types.js +0 -1
  109. package/dist/config/types.memory.js +1 -0
  110. package/dist/config/version.js +4 -4
  111. package/dist/config/zod-schema.js +0 -6
  112. package/dist/daemon/constants.js +7 -7
  113. package/dist/daemon/inspect.js +6 -6
  114. package/dist/daemon/systemd-unit.js +1 -1
  115. package/dist/discord/monitor/message-handler.process.js +6 -4
  116. package/dist/gateway/client.js +0 -14
  117. package/dist/gateway/live-image-probe.js +1 -66
  118. package/dist/gateway/openai-http.js +2 -2
  119. package/dist/gateway/openresponses-http.js +4 -4
  120. package/dist/gateway/server-discovery.js +2 -2
  121. package/dist/gateway/server-http.js +1 -1
  122. package/dist/gateway/server.impl.js +2 -6
  123. package/dist/hooks/frontmatter.js +1 -1
  124. package/dist/hooks/hooks-status.js +1 -1
  125. package/dist/hooks/install.js +2 -2
  126. package/dist/hooks/loader.js +1 -1
  127. package/dist/hooks/workspace.js +3 -3
  128. package/dist/index.js +2 -2
  129. package/dist/infra/bonjour.js +3 -3
  130. package/dist/infra/path-env.js +3 -3
  131. package/dist/infra/provider-usage.fetch.minimax.js +1 -1
  132. package/dist/infra/restart.js +1 -1
  133. package/dist/infra/tailscale.js +1 -1
  134. package/dist/macos/relay.js +2 -2
  135. package/dist/media/input-files.js +1 -1
  136. package/dist/media/mime.js +4 -0
  137. package/dist/media/png-encode.js +74 -0
  138. package/dist/media-understanding/providers/image.js +2 -2
  139. package/dist/memory/backend-config.js +207 -0
  140. package/dist/memory/embeddings.js +1 -1
  141. package/dist/memory/index.js +0 -5
  142. package/dist/memory/manager.js +3 -25
  143. package/dist/memory/types.js +1 -0
  144. package/dist/node-host/runner.js +2 -2
  145. package/dist/pairing/pairing-messages.js +1 -1
  146. package/dist/plugins/discovery.js +1 -1
  147. package/dist/plugins/install.js +2 -2
  148. package/dist/plugins/update.js +1 -1
  149. package/dist/security/audit.js +2 -2
  150. package/dist/shared/text/reasoning-tags.js +52 -7
  151. package/dist/slack/monitor/message-handler/prepare.js +10 -4
  152. package/dist/slack/monitor/slash.js +10 -4
  153. package/dist/tailscale/detect.js +146 -0
  154. package/dist/telegram/bot-message-context.js +1 -1
  155. package/dist/test-helpers/workspace.js +11 -0
  156. package/dist/test-utils/channel-plugins.js +82 -0
  157. package/dist/test-utils/ports.js +73 -0
  158. package/dist/utils/shell-argv.js +61 -0
  159. package/dist/utils.js +10 -0
  160. package/dist/web/qr-image.js +1 -61
  161. package/dist/wizard/onboarding.finalize.js +7 -7
  162. package/dist/wizard/onboarding.js +3 -3
  163. package/docs/RELEASE_WORKFOTS_COMPARISON.md +3 -3
  164. package/docs/_config.yml +2 -2
  165. package/docs/_layouts/default.html +9 -9
  166. package/docs/concepts/typebox.md +1 -1
  167. package/docs/docs.json +1 -1
  168. package/docs/northflank.mdx +7 -7
  169. package/docs/railway.mdx +3 -3
  170. package/docs/render.mdx +5 -5
  171. package/docs/start/lore.md +2 -2
  172. package/extensions/bluebubbles/index.ts +2 -2
  173. package/extensions/bluebubbles/package.json +1 -1
  174. package/extensions/bluebubbles/src/accounts.ts +8 -8
  175. package/extensions/bluebubbles/src/actions.test.ts +22 -22
  176. package/extensions/bluebubbles/src/actions.ts +5 -5
  177. package/extensions/bluebubbles/src/attachments.ts +2 -2
  178. package/extensions/bluebubbles/src/channel.ts +16 -16
  179. package/extensions/bluebubbles/src/chat.ts +2 -2
  180. package/extensions/bluebubbles/src/media-send.ts +2 -2
  181. package/extensions/bluebubbles/src/monitor.test.ts +46 -46
  182. package/extensions/bluebubbles/src/monitor.ts +5 -5
  183. package/extensions/bluebubbles/src/onboarding.ts +7 -7
  184. package/extensions/bluebubbles/src/reactions.ts +2 -2
  185. package/extensions/bluebubbles/src/send.ts +2 -2
  186. package/extensions/copilot-proxy/README.md +1 -1
  187. package/extensions/copilot-proxy/package.json +1 -1
  188. package/extensions/diagnostics-otel/index.ts +2 -2
  189. package/extensions/diagnostics-otel/package.json +1 -1
  190. package/extensions/diagnostics-otel/src/service.ts +3 -3
  191. package/extensions/discord/index.ts +2 -2
  192. package/extensions/discord/package.json +1 -1
  193. package/extensions/google-antigravity-auth/README.md +1 -1
  194. package/extensions/google-antigravity-auth/index.ts +1 -1
  195. package/extensions/google-antigravity-auth/package.json +1 -1
  196. package/extensions/google-gemini-cli-auth/README.md +1 -1
  197. package/extensions/google-gemini-cli-auth/oauth.ts +1 -1
  198. package/extensions/google-gemini-cli-auth/package.json +1 -1
  199. package/extensions/googlechat/index.ts +3 -3
  200. package/extensions/googlechat/package.json +1 -1
  201. package/extensions/googlechat/src/accounts.ts +8 -8
  202. package/extensions/googlechat/src/actions.ts +6 -6
  203. package/extensions/googlechat/src/channel.ts +21 -21
  204. package/extensions/googlechat/src/monitor.ts +8 -8
  205. package/extensions/googlechat/src/onboarding.ts +10 -10
  206. package/extensions/imessage/index.ts +2 -2
  207. package/extensions/imessage/package.json +1 -1
  208. package/extensions/line/index.ts +2 -2
  209. package/extensions/line/package.json +1 -1
  210. package/extensions/line/src/card-command.ts +2 -2
  211. package/extensions/line/src/channel.logout.test.ts +4 -4
  212. package/extensions/line/src/channel.sendPayload.test.ts +8 -8
  213. package/extensions/line/src/channel.ts +3 -3
  214. package/extensions/llm-task/README.md +3 -3
  215. package/extensions/llm-task/index.ts +2 -2
  216. package/extensions/llm-task/package.json +1 -1
  217. package/extensions/llm-task/src/llm-task-tool.ts +4 -4
  218. package/extensions/lobster/README.md +6 -6
  219. package/extensions/lobster/index.ts +2 -2
  220. package/extensions/lobster/src/lobster-tool.test.ts +4 -4
  221. package/extensions/lobster/src/lobster-tool.ts +2 -2
  222. package/extensions/matrix/index.ts +2 -2
  223. package/extensions/matrix/package.json +1 -1
  224. package/extensions/matrix/src/matrix/client/config.ts +1 -1
  225. package/extensions/matrix/src/matrix/monitor/handler.ts +1 -1
  226. package/extensions/matrix/src/onboarding.ts +1 -1
  227. package/extensions/mattermost/index.ts +2 -2
  228. package/extensions/mattermost/package.json +1 -1
  229. package/extensions/mattermost/src/mattermost/accounts.ts +8 -8
  230. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +5 -5
  231. package/extensions/mattermost/src/mattermost/monitor.ts +2 -2
  232. package/extensions/mattermost/src/onboarding-helpers.ts +3 -3
  233. package/extensions/mattermost/src/onboarding.ts +2 -2
  234. package/extensions/memory-core/index.ts +2 -2
  235. package/extensions/memory-core/package.json +1 -4
  236. package/extensions/memory-lancedb/index.ts +3 -3
  237. package/extensions/memory-lancedb/package.json +1 -1
  238. package/extensions/msteams/index.ts +2 -2
  239. package/extensions/msteams/package.json +1 -1
  240. package/extensions/msteams/src/channel.directory.test.ts +2 -2
  241. package/extensions/msteams/src/channel.ts +2 -2
  242. package/extensions/msteams/src/graph-upload.ts +4 -4
  243. package/extensions/msteams/src/monitor-handler.ts +2 -2
  244. package/extensions/msteams/src/monitor.ts +2 -2
  245. package/extensions/msteams/src/onboarding.ts +9 -9
  246. package/extensions/msteams/src/reply-dispatcher.ts +2 -2
  247. package/extensions/msteams/src/send-context.ts +2 -2
  248. package/extensions/msteams/src/send.ts +4 -4
  249. package/extensions/nextcloud-talk/index.ts +2 -2
  250. package/extensions/nextcloud-talk/package.json +1 -1
  251. package/extensions/nextcloud-talk/src/channel.ts +7 -7
  252. package/extensions/nextcloud-talk/src/inbound.ts +7 -7
  253. package/extensions/nextcloud-talk/src/onboarding.ts +1 -1
  254. package/extensions/nostr/README.md +2 -2
  255. package/extensions/nostr/index.ts +5 -5
  256. package/extensions/nostr/package.json +1 -1
  257. package/extensions/nostr/src/types.ts +4 -4
  258. package/extensions/open-prose/index.ts +2 -2
  259. package/extensions/qwen-portal-auth/README.md +1 -1
  260. package/extensions/signal/index.ts +2 -2
  261. package/extensions/signal/package.json +1 -1
  262. package/extensions/slack/index.ts +2 -2
  263. package/extensions/slack/package.json +1 -1
  264. package/extensions/telegram/index.ts +2 -2
  265. package/extensions/telegram/package.json +1 -1
  266. package/extensions/telegram/src/channel.ts +2 -2
  267. package/extensions/tlon/README.md +2 -2
  268. package/extensions/tlon/index.ts +2 -2
  269. package/extensions/tlon/package.json +1 -1
  270. package/extensions/tlon/src/channel.ts +13 -13
  271. package/extensions/tlon/src/monitor/index.ts +3 -3
  272. package/extensions/tlon/src/onboarding.ts +3 -3
  273. package/extensions/tlon/src/types.ts +3 -3
  274. package/extensions/twitch/README.md +1 -1
  275. package/extensions/twitch/index.ts +2 -2
  276. package/extensions/twitch/package.json +1 -1
  277. package/extensions/twitch/src/config.ts +3 -3
  278. package/extensions/twitch/src/monitor.ts +3 -3
  279. package/extensions/twitch/src/onboarding.ts +9 -9
  280. package/extensions/twitch/src/outbound.test.ts +2 -2
  281. package/extensions/twitch/src/plugin.test.ts +2 -2
  282. package/extensions/twitch/src/plugin.ts +8 -8
  283. package/extensions/twitch/src/send.test.ts +2 -2
  284. package/extensions/twitch/src/send.ts +4 -4
  285. package/extensions/twitch/src/token.test.ts +8 -8
  286. package/extensions/twitch/src/token.ts +3 -3
  287. package/extensions/twitch/src/twitch-client.ts +3 -3
  288. package/extensions/twitch/src/types.ts +3 -3
  289. package/extensions/twitch/src/utils/markdown.ts +1 -1
  290. package/extensions/voice-call/README.md +3 -3
  291. package/extensions/voice-call/package.json +1 -1
  292. package/extensions/voice-call/src/core-bridge.ts +2 -2
  293. package/extensions/voice-call/src/response-generator.ts +1 -1
  294. package/extensions/whatsapp/index.ts +2 -2
  295. package/extensions/whatsapp/package.json +1 -1
  296. package/extensions/zalo/README.md +1 -1
  297. package/extensions/zalo/index.ts +2 -2
  298. package/extensions/zalo/package.json +1 -1
  299. package/extensions/zalo/src/accounts.ts +8 -8
  300. package/extensions/zalo/src/actions.ts +4 -4
  301. package/extensions/zalo/src/channel.directory.test.ts +2 -2
  302. package/extensions/zalo/src/channel.ts +18 -18
  303. package/extensions/zalo/src/monitor.ts +9 -9
  304. package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
  305. package/extensions/zalo/src/onboarding.ts +24 -24
  306. package/extensions/zalo/src/send.ts +2 -2
  307. package/extensions/zalouser/README.md +2 -2
  308. package/extensions/zalouser/index.ts +2 -2
  309. package/extensions/zalouser/package.json +1 -1
  310. package/extensions/zalouser/src/accounts.ts +9 -9
  311. package/extensions/zalouser/src/channel.ts +24 -24
  312. package/extensions/zalouser/src/monitor.ts +4 -4
  313. package/extensions/zalouser/src/onboarding.ts +28 -28
  314. package/package.json +13 -250
  315. package/skills/nano-banana-pro/scripts/generate_image.py +1 -1
  316. package/skills/tmux/scripts/find-sessions.sh +1 -1
  317. package/CHANGELOG.md +0 -200
  318. package/README-header.png +0 -0
  319. package/git-hooks/pre-commit +0 -4
  320. package/scripts/format-staged.js +0 -148
  321. package/scripts/postinstall.js +0 -300
  322. package/scripts/setup-git-hooks.js +0 -96
  323. package/skills/webgpu-threejs-tsl/REFERENCE.md +0 -283
  324. package/skills/webgpu-threejs-tsl/SKILL.md +0 -91
  325. package/skills/webgpu-threejs-tsl/docs/compute-shaders.md +0 -404
  326. package/skills/webgpu-threejs-tsl/docs/core-concepts.md +0 -453
  327. package/skills/webgpu-threejs-tsl/docs/materials.md +0 -353
  328. package/skills/webgpu-threejs-tsl/docs/post-processing.md +0 -434
  329. package/skills/webgpu-threejs-tsl/docs/wgsl-integration.md +0 -324
  330. package/skills/webgpu-threejs-tsl/examples/basic-setup.js +0 -87
  331. package/skills/webgpu-threejs-tsl/examples/custom-material.js +0 -170
  332. package/skills/webgpu-threejs-tsl/examples/earth-shader.js +0 -292
  333. package/skills/webgpu-threejs-tsl/examples/particle-system.js +0 -259
  334. package/skills/webgpu-threejs-tsl/examples/post-processing.js +0 -199
  335. package/skills/webgpu-threejs-tsl/templates/compute-shader.js +0 -305
  336. package/skills/webgpu-threejs-tsl/templates/webgpu-project.js +0 -276
@@ -3,7 +3,7 @@ import { runCommandWithTimeout } from "../process/exec.js";
3
3
  import { formatDocsLink } from "../terminal/links.js";
4
4
  import { isRich, theme } from "../terminal/theme.js";
5
5
  import { formatCliCommand } from "../cli/command-format.js";
6
- const SEARCH_TOOL = "https://docs.molt.bot/mcp.SearchMoltbot";
6
+ const SEARCH_TOOL = "https://docs.molt.bot/mcp.SearchPoolbot";
7
7
  const SEARCH_TIMEOUT_MS = 30_000;
8
8
  const DEFAULT_SNIPPET_MAX = 220;
9
9
  function resolveNodeRunner() {
@@ -36,7 +36,7 @@ export async function maybeMigrateLegacyGatewayService(cfg, mode, runtime, promp
36
36
  return;
37
37
  note(legacyServices.map((svc) => `- ${svc.label} (${svc.platform}, ${svc.detail})`).join("\n"), "Legacy gateway services detected");
38
38
  const migrate = await prompter.confirmSkipInNonInteractive({
39
- message: "Migrate legacy gateway services to Moltbot now?",
39
+ message: "Migrate legacy gateway services to Poolbot now?",
40
40
  initialValue: true,
41
41
  });
42
42
  if (!migrate)
@@ -62,11 +62,11 @@ export async function maybeMigrateLegacyGatewayService(cfg, mode, runtime, promp
62
62
  const service = resolveGatewayService();
63
63
  const loaded = await service.isLoaded({ env: process.env });
64
64
  if (loaded) {
65
- note(`Moltbot ${service.label} already ${service.loadedText}.`, "Gateway");
65
+ note(`Poolbot ${service.label} already ${service.loadedText}.`, "Gateway");
66
66
  return;
67
67
  }
68
68
  const install = await prompter.confirmSkipInNonInteractive({
69
- message: "Install Moltbot gateway service now?",
69
+ message: "Install Poolbot gateway service now?",
70
70
  initialValue: true,
71
71
  });
72
72
  if (!install)
@@ -3,7 +3,7 @@ import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { resolveDefaultAgentId } from "../agents/agent-scope.js";
5
5
  import { resolveOAuthDir, resolveStateDir } from "../config/paths.js";
6
- import { loadSessionStore, resolveMainSessionKey, resolveSessionFilePath, resolveSessionTranscriptPath, resolveSessionTranscriptsDirForAgent, resolveStorePath, } from "../config/sessions.js";
6
+ import { loadSessionStore, resolveMainSessionKey, resolveSessionFilePath, resolveSessionTranscriptsDirForAgent, resolveStorePath, } from "../config/sessions.js";
7
7
  import { note } from "../terminal/note.js";
8
8
  import { shortenHomePath } from "../utils.js";
9
9
  function existsDir(dir) {
@@ -291,19 +291,7 @@ export async function noteStateIntegrity(cfg, prompter, configPath) {
291
291
  const transcriptPath = resolveSessionFilePath(sessionId, entry, {
292
292
  agentId,
293
293
  });
294
- // Fix: Verificar se o arquivo existe antes de declarar "missing"
295
- // Se o arquivo não existe no path esperado, verificar também o path alternativo
296
- if (!existsFile(transcriptPath)) {
297
- // Tentar verificar se o arquivo existe com o path alternativo (sem sessionFile)
298
- const altPath = resolveSessionTranscriptPath(sessionId, agentId);
299
- if (existsFile(altPath)) {
300
- // Arquivo existe em path alternativo - atualizar entry se necessário
301
- return false;
302
- }
303
- // Arquivo realmente não existe em nenhum path
304
- return true;
305
- }
306
- return false;
294
+ return !existsFile(transcriptPath);
307
295
  });
308
296
  if (missing.length > 0) {
309
297
  warnings.push(`- ${missing.length}/${recent.length} recent sessions are missing transcripts. Check for deleted session files or split state dirs.`);
@@ -3,7 +3,7 @@ import { isTruthyEnvValue } from "../infra/env.js";
3
3
  import { runCommandWithTimeout } from "../process/exec.js";
4
4
  import { note } from "../terminal/note.js";
5
5
  import { formatCliCommand } from "../cli/command-format.js";
6
- async function detectMoltbotGitCheckout(root) {
6
+ async function detectPoolbotGitCheckout(root) {
7
7
  const res = await runCommandWithTimeout(["git", "-C", root, "rev-parse", "--show-toplevel"], {
8
8
  timeoutMs: 5000,
9
9
  }).catch(() => null);
@@ -28,10 +28,10 @@ export async function maybeOfferUpdateBeforeDoctor(params) {
28
28
  Boolean(process.stdin.isTTY);
29
29
  if (!canOfferUpdate || !params.root)
30
30
  return { updated: false };
31
- const git = await detectMoltbotGitCheckout(params.root);
31
+ const git = await detectPoolbotGitCheckout(params.root);
32
32
  if (git === "git") {
33
33
  const shouldUpdate = await params.confirm({
34
- message: "Update Moltbot from git before running doctor?",
34
+ message: "Update Poolbot from git before running doctor?",
35
35
  initialValue: true,
36
36
  });
37
37
  if (!shouldUpdate)
@@ -41,7 +41,7 @@ function resolveMode(cfg) {
41
41
  export async function doctorCommand(runtime = defaultRuntime, options = {}) {
42
42
  const prompter = createDoctorPrompter({ runtime, options });
43
43
  printWizardHeader(runtime);
44
- intro("Moltbot doctor");
44
+ intro("Poolbot doctor");
45
45
  const root = await resolvePoolBotPackageRoot({
46
46
  moduleUrl: import.meta.url,
47
47
  argv1: process.argv[1],
@@ -1,6 +1,6 @@
1
1
  import crypto from "node:crypto";
2
2
  import fs from "node:fs/promises";
3
- import { resolveMoltbotAgentDir } from "../../agents/agent-paths.js";
3
+ import { resolvePoolbotAgentDir } from "../../agents/agent-paths.js";
4
4
  import { ensureAuthProfileStore, listProfilesForProvider, resolveAuthProfileDisplayLabel, resolveAuthProfileOrder, } from "../../agents/auth-profiles.js";
5
5
  import { runEmbeddedPiAgent } from "../../agents/pi-embedded.js";
6
6
  import { describeFailoverError } from "../../agents/failover-error.js";
@@ -250,7 +250,7 @@ async function runTargetsWithConcurrency(params) {
250
250
  const { cfg, targets, timeoutMs, maxTokens, onProgress } = params;
251
251
  const concurrency = Math.max(1, Math.min(targets.length || 1, params.concurrency));
252
252
  const agentId = resolveDefaultAgentId(cfg);
253
- const agentDir = resolveMoltbotAgentDir();
253
+ const agentDir = resolvePoolbotAgentDir();
254
254
  const workspaceDir = resolveAgentWorkspaceDir(cfg, agentId) ?? resolveDefaultAgentWorkspaceDir();
255
255
  const sessionDir = resolveSessionTranscriptsDirForAgent(agentId);
256
256
  await fs.mkdir(workspaceDir, { recursive: true });
@@ -1,8 +1,8 @@
1
1
  import { discoverAuthStorage, discoverModels } from "@mariozechner/pi-coding-agent";
2
- import { resolveMoltbotAgentDir } from "../../agents/agent-paths.js";
2
+ import { resolvePoolbotAgentDir } from "../../agents/agent-paths.js";
3
3
  import { listProfilesForProvider } from "../../agents/auth-profiles.js";
4
4
  import { getCustomProviderApiKey, resolveAwsSdkEnvVarName, resolveEnvApiKey, } from "../../agents/model-auth.js";
5
- import { ensureMoltbotModelsJson } from "../../agents/models-config.js";
5
+ import { ensurePoolbotModelsJson } from "../../agents/models-config.js";
6
6
  import { modelKey } from "./shared.js";
7
7
  const isLocalBaseUrl = (baseUrl) => {
8
8
  try {
@@ -30,8 +30,8 @@ const hasAuthForProvider = (provider, cfg, authStore) => {
30
30
  return false;
31
31
  };
32
32
  export async function loadModelRegistry(cfg) {
33
- await ensureMoltbotModelsJson(cfg);
34
- const agentDir = resolveMoltbotAgentDir();
33
+ await ensurePoolbotModelsJson(cfg);
34
+ const agentDir = resolvePoolbotAgentDir();
35
35
  const authStorage = discoverAuthStorage(agentDir);
36
36
  const registry = discoverModels(authStorage, agentDir);
37
37
  const models = registry.getAll();
@@ -1,5 +1,5 @@
1
1
  import path from "node:path";
2
- import { resolveMoltbotAgentDir } from "../../agents/agent-paths.js";
2
+ import { resolvePoolbotAgentDir } from "../../agents/agent-paths.js";
3
3
  import { buildAuthHealthSummary, DEFAULT_OAUTH_WARN_MS, formatRemainingShort, } from "../../agents/auth-health.js";
4
4
  import { ensureAuthProfileStore, resolveAuthStorePathForDisplay, resolveProfileUnusableUntilForDisplay, } from "../../agents/auth-profiles.js";
5
5
  import { resolveEnvApiKey } from "../../agents/model-auth.js";
@@ -42,7 +42,7 @@ export async function modelsStatusCommand(opts, runtime) {
42
42
  return acc;
43
43
  }, {});
44
44
  const allowed = Object.keys(cfg.agents?.defaults?.models ?? {});
45
- const agentDir = resolveMoltbotAgentDir();
45
+ const agentDir = resolvePoolbotAgentDir();
46
46
  const store = ensureAuthProfileStore();
47
47
  const modelsPath = path.join(agentDir, "models.json");
48
48
  const providersFromStore = new Set(Object.values(store.profiles)
@@ -1,7 +1,10 @@
1
+ import { buildCloudflareAiGatewayModelDefinition, resolveCloudflareAiGatewayBaseUrl, } from "../agents/cloudflare-ai-gateway.js";
2
+ import { buildQianfanProvider, buildXiaomiProvider, QIANFAN_DEFAULT_MODEL_ID, XIAOMI_DEFAULT_MODEL_ID, } from "../agents/models-config.providers.js";
1
3
  import { buildSyntheticModelDefinition, SYNTHETIC_BASE_URL, SYNTHETIC_DEFAULT_MODEL_REF, SYNTHETIC_MODEL_CATALOG, } from "../agents/synthetic-models.js";
4
+ import { buildTogetherModelDefinition, TOGETHER_BASE_URL, TOGETHER_MODEL_CATALOG, } from "../agents/together-models.js";
2
5
  import { buildVeniceModelDefinition, VENICE_BASE_URL, VENICE_DEFAULT_MODEL_REF, VENICE_MODEL_CATALOG, } from "../agents/venice-models.js";
3
- import { OPENROUTER_DEFAULT_MODEL_REF, VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF, ZAI_DEFAULT_MODEL_REF, } from "./onboard-auth.credentials.js";
4
- import { buildKimiCodeModelDefinition, buildMoonshotModelDefinition, KIMI_CODE_BASE_URL, KIMI_CODE_MODEL_ID, KIMI_CODE_MODEL_REF, MOONSHOT_BASE_URL, MOONSHOT_DEFAULT_MODEL_ID, MOONSHOT_DEFAULT_MODEL_REF, } from "./onboard-auth.models.js";
6
+ import { CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF, OPENROUTER_DEFAULT_MODEL_REF, TOGETHER_DEFAULT_MODEL_REF, VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF, XIAOMI_DEFAULT_MODEL_REF, ZAI_DEFAULT_MODEL_REF, XAI_DEFAULT_MODEL_REF, } from "./onboard-auth.credentials.js";
7
+ import { buildMoonshotModelDefinition, buildXaiModelDefinition, QIANFAN_BASE_URL, QIANFAN_DEFAULT_MODEL_REF, KIMI_CODING_MODEL_REF, MOONSHOT_BASE_URL, MOONSHOT_CN_BASE_URL, MOONSHOT_DEFAULT_MODEL_ID, MOONSHOT_DEFAULT_MODEL_REF, XAI_BASE_URL, XAI_DEFAULT_MODEL_ID, } from "./onboard-auth.models.js";
5
8
  export function applyZaiConfig(cfg) {
6
9
  const models = { ...cfg.agents?.defaults?.models };
7
10
  models[ZAI_DEFAULT_MODEL_REF] = {
@@ -62,6 +65,61 @@ export function applyVercelAiGatewayProviderConfig(cfg) {
62
65
  },
63
66
  };
64
67
  }
68
+ export function applyCloudflareAiGatewayProviderConfig(cfg, params) {
69
+ const models = { ...cfg.agents?.defaults?.models };
70
+ models[CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF] = {
71
+ ...models[CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF],
72
+ alias: models[CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF]?.alias ?? "Cloudflare AI Gateway",
73
+ };
74
+ const providers = { ...cfg.models?.providers };
75
+ const existingProvider = providers["cloudflare-ai-gateway"];
76
+ const existingModels = Array.isArray(existingProvider?.models) ? existingProvider.models : [];
77
+ const defaultModel = buildCloudflareAiGatewayModelDefinition();
78
+ const hasDefaultModel = existingModels.some((model) => model.id === defaultModel.id);
79
+ const mergedModels = hasDefaultModel ? existingModels : [...existingModels, defaultModel];
80
+ const baseUrl = params?.accountId && params?.gatewayId
81
+ ? resolveCloudflareAiGatewayBaseUrl({
82
+ accountId: params.accountId,
83
+ gatewayId: params.gatewayId,
84
+ })
85
+ : existingProvider?.baseUrl;
86
+ if (!baseUrl) {
87
+ return {
88
+ ...cfg,
89
+ agents: {
90
+ ...cfg.agents,
91
+ defaults: {
92
+ ...cfg.agents?.defaults,
93
+ models,
94
+ },
95
+ },
96
+ };
97
+ }
98
+ const { apiKey: existingApiKey, ...existingProviderRest } = (existingProvider ?? {});
99
+ const resolvedApiKey = typeof existingApiKey === "string" ? existingApiKey : undefined;
100
+ const normalizedApiKey = resolvedApiKey?.trim();
101
+ providers["cloudflare-ai-gateway"] = {
102
+ ...existingProviderRest,
103
+ baseUrl,
104
+ api: "anthropic-messages",
105
+ ...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
106
+ models: mergedModels.length > 0 ? mergedModels : [defaultModel],
107
+ };
108
+ return {
109
+ ...cfg,
110
+ agents: {
111
+ ...cfg.agents,
112
+ defaults: {
113
+ ...cfg.agents?.defaults,
114
+ models,
115
+ },
116
+ },
117
+ models: {
118
+ mode: cfg.models?.mode ?? "merge",
119
+ providers,
120
+ },
121
+ };
122
+ }
65
123
  export function applyVercelAiGatewayConfig(cfg) {
66
124
  const next = applyVercelAiGatewayProviderConfig(cfg);
67
125
  const existingModel = next.agents?.defaults?.model;
@@ -83,6 +141,27 @@ export function applyVercelAiGatewayConfig(cfg) {
83
141
  },
84
142
  };
85
143
  }
144
+ export function applyCloudflareAiGatewayConfig(cfg, params) {
145
+ const next = applyCloudflareAiGatewayProviderConfig(cfg, params);
146
+ const existingModel = next.agents?.defaults?.model;
147
+ return {
148
+ ...next,
149
+ agents: {
150
+ ...next.agents,
151
+ defaults: {
152
+ ...next.agents?.defaults,
153
+ model: {
154
+ ...(existingModel && "fallbacks" in existingModel
155
+ ? {
156
+ fallbacks: existingModel.fallbacks,
157
+ }
158
+ : undefined),
159
+ primary: CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF,
160
+ },
161
+ },
162
+ },
163
+ };
164
+ }
86
165
  export function applyOpenrouterConfig(cfg) {
87
166
  const next = applyOpenrouterProviderConfig(cfg);
88
167
  const existingModel = next.agents?.defaults?.model;
@@ -105,10 +184,16 @@ export function applyOpenrouterConfig(cfg) {
105
184
  };
106
185
  }
107
186
  export function applyMoonshotProviderConfig(cfg) {
187
+ return applyMoonshotProviderConfigWithBaseUrl(cfg, MOONSHOT_BASE_URL);
188
+ }
189
+ export function applyMoonshotProviderConfigCn(cfg) {
190
+ return applyMoonshotProviderConfigWithBaseUrl(cfg, MOONSHOT_CN_BASE_URL);
191
+ }
192
+ function applyMoonshotProviderConfigWithBaseUrl(cfg, baseUrl) {
108
193
  const models = { ...cfg.agents?.defaults?.models };
109
194
  models[MOONSHOT_DEFAULT_MODEL_REF] = {
110
195
  ...models[MOONSHOT_DEFAULT_MODEL_REF],
111
- alias: models[MOONSHOT_DEFAULT_MODEL_REF]?.alias ?? "Kimi K2",
196
+ alias: models[MOONSHOT_DEFAULT_MODEL_REF]?.alias ?? "Kimi",
112
197
  };
113
198
  const providers = { ...cfg.models?.providers };
114
199
  const existingProvider = providers.moonshot;
@@ -121,7 +206,7 @@ export function applyMoonshotProviderConfig(cfg) {
121
206
  const normalizedApiKey = resolvedApiKey?.trim();
122
207
  providers.moonshot = {
123
208
  ...existingProviderRest,
124
- baseUrl: MOONSHOT_BASE_URL,
209
+ baseUrl,
125
210
  api: "openai-completions",
126
211
  ...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
127
212
  models: mergedModels.length > 0 ? mergedModels : [defaultModel],
@@ -162,27 +247,32 @@ export function applyMoonshotConfig(cfg) {
162
247
  },
163
248
  };
164
249
  }
250
+ export function applyMoonshotConfigCn(cfg) {
251
+ const next = applyMoonshotProviderConfigCn(cfg);
252
+ const existingModel = next.agents?.defaults?.model;
253
+ return {
254
+ ...next,
255
+ agents: {
256
+ ...next.agents,
257
+ defaults: {
258
+ ...next.agents?.defaults,
259
+ model: {
260
+ ...(existingModel && "fallbacks" in existingModel
261
+ ? {
262
+ fallbacks: existingModel.fallbacks,
263
+ }
264
+ : undefined),
265
+ primary: MOONSHOT_DEFAULT_MODEL_REF,
266
+ },
267
+ },
268
+ },
269
+ };
270
+ }
165
271
  export function applyKimiCodeProviderConfig(cfg) {
166
272
  const models = { ...cfg.agents?.defaults?.models };
167
- models[KIMI_CODE_MODEL_REF] = {
168
- ...models[KIMI_CODE_MODEL_REF],
169
- alias: models[KIMI_CODE_MODEL_REF]?.alias ?? "Kimi Code",
170
- };
171
- const providers = { ...cfg.models?.providers };
172
- const existingProvider = providers["kimi-code"];
173
- const existingModels = Array.isArray(existingProvider?.models) ? existingProvider.models : [];
174
- const defaultModel = buildKimiCodeModelDefinition();
175
- const hasDefaultModel = existingModels.some((model) => model.id === KIMI_CODE_MODEL_ID);
176
- const mergedModels = hasDefaultModel ? existingModels : [...existingModels, defaultModel];
177
- const { apiKey: existingApiKey, ...existingProviderRest } = (existingProvider ?? {});
178
- const resolvedApiKey = typeof existingApiKey === "string" ? existingApiKey : undefined;
179
- const normalizedApiKey = resolvedApiKey?.trim();
180
- providers["kimi-code"] = {
181
- ...existingProviderRest,
182
- baseUrl: KIMI_CODE_BASE_URL,
183
- api: "openai-completions",
184
- ...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
185
- models: mergedModels.length > 0 ? mergedModels : [defaultModel],
273
+ models[KIMI_CODING_MODEL_REF] = {
274
+ ...models[KIMI_CODING_MODEL_REF],
275
+ alias: models[KIMI_CODING_MODEL_REF]?.alias ?? "Kimi K2.5",
186
276
  };
187
277
  return {
188
278
  ...cfg,
@@ -193,10 +283,6 @@ export function applyKimiCodeProviderConfig(cfg) {
193
283
  models,
194
284
  },
195
285
  },
196
- models: {
197
- mode: cfg.models?.mode ?? "merge",
198
- providers,
199
- },
200
286
  };
201
287
  }
202
288
  export function applyKimiCodeConfig(cfg) {
@@ -214,7 +300,7 @@ export function applyKimiCodeConfig(cfg) {
214
300
  fallbacks: existingModel.fallbacks,
215
301
  }
216
302
  : undefined),
217
- primary: KIMI_CODE_MODEL_REF,
303
+ primary: KIMI_CODING_MODEL_REF,
218
304
  },
219
305
  },
220
306
  },
@@ -280,6 +366,69 @@ export function applySyntheticConfig(cfg) {
280
366
  },
281
367
  };
282
368
  }
369
+ export function applyXiaomiProviderConfig(cfg) {
370
+ const models = { ...cfg.agents?.defaults?.models };
371
+ models[XIAOMI_DEFAULT_MODEL_REF] = {
372
+ ...models[XIAOMI_DEFAULT_MODEL_REF],
373
+ alias: models[XIAOMI_DEFAULT_MODEL_REF]?.alias ?? "Xiaomi",
374
+ };
375
+ const providers = { ...cfg.models?.providers };
376
+ const existingProvider = providers.xiaomi;
377
+ const defaultProvider = buildXiaomiProvider();
378
+ const existingModels = Array.isArray(existingProvider?.models) ? existingProvider.models : [];
379
+ const defaultModels = defaultProvider.models ?? [];
380
+ const hasDefaultModel = existingModels.some((model) => model.id === XIAOMI_DEFAULT_MODEL_ID);
381
+ const mergedModels = existingModels.length > 0
382
+ ? hasDefaultModel
383
+ ? existingModels
384
+ : [...existingModels, ...defaultModels]
385
+ : defaultModels;
386
+ const { apiKey: existingApiKey, ...existingProviderRest } = (existingProvider ?? {});
387
+ const resolvedApiKey = typeof existingApiKey === "string" ? existingApiKey : undefined;
388
+ const normalizedApiKey = resolvedApiKey?.trim();
389
+ providers.xiaomi = {
390
+ ...existingProviderRest,
391
+ baseUrl: defaultProvider.baseUrl,
392
+ api: defaultProvider.api,
393
+ ...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
394
+ models: mergedModels.length > 0 ? mergedModels : defaultProvider.models,
395
+ };
396
+ return {
397
+ ...cfg,
398
+ agents: {
399
+ ...cfg.agents,
400
+ defaults: {
401
+ ...cfg.agents?.defaults,
402
+ models,
403
+ },
404
+ },
405
+ models: {
406
+ mode: cfg.models?.mode ?? "merge",
407
+ providers,
408
+ },
409
+ };
410
+ }
411
+ export function applyXiaomiConfig(cfg) {
412
+ const next = applyXiaomiProviderConfig(cfg);
413
+ const existingModel = next.agents?.defaults?.model;
414
+ return {
415
+ ...next,
416
+ agents: {
417
+ ...next.agents,
418
+ defaults: {
419
+ ...next.agents?.defaults,
420
+ model: {
421
+ ...(existingModel && "fallbacks" in existingModel
422
+ ? {
423
+ fallbacks: existingModel.fallbacks,
424
+ }
425
+ : undefined),
426
+ primary: XIAOMI_DEFAULT_MODEL_REF,
427
+ },
428
+ },
429
+ },
430
+ };
431
+ }
283
432
  /**
284
433
  * Apply Venice provider configuration without changing the default model.
285
434
  * Registers Venice models and sets up the provider, but preserves existing model selection.
@@ -348,6 +497,132 @@ export function applyVeniceConfig(cfg) {
348
497
  },
349
498
  };
350
499
  }
500
+ /**
501
+ * Apply Together provider configuration without changing the default model.
502
+ * Registers Together models and sets up the provider, but preserves existing model selection.
503
+ */
504
+ export function applyTogetherProviderConfig(cfg) {
505
+ const models = { ...cfg.agents?.defaults?.models };
506
+ models[TOGETHER_DEFAULT_MODEL_REF] = {
507
+ ...models[TOGETHER_DEFAULT_MODEL_REF],
508
+ alias: models[TOGETHER_DEFAULT_MODEL_REF]?.alias ?? "Together AI",
509
+ };
510
+ const providers = { ...cfg.models?.providers };
511
+ const existingProvider = providers.together;
512
+ const existingModels = Array.isArray(existingProvider?.models) ? existingProvider.models : [];
513
+ const togetherModels = TOGETHER_MODEL_CATALOG.map(buildTogetherModelDefinition);
514
+ const mergedModels = [
515
+ ...existingModels,
516
+ ...togetherModels.filter((model) => !existingModels.some((existing) => existing.id === model.id)),
517
+ ];
518
+ const { apiKey: existingApiKey, ...existingProviderRest } = (existingProvider ?? {});
519
+ const resolvedApiKey = typeof existingApiKey === "string" ? existingApiKey : undefined;
520
+ const normalizedApiKey = resolvedApiKey?.trim();
521
+ providers.together = {
522
+ ...existingProviderRest,
523
+ baseUrl: TOGETHER_BASE_URL,
524
+ api: "openai-completions",
525
+ ...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
526
+ models: mergedModels.length > 0 ? mergedModels : togetherModels,
527
+ };
528
+ return {
529
+ ...cfg,
530
+ agents: {
531
+ ...cfg.agents,
532
+ defaults: {
533
+ ...cfg.agents?.defaults,
534
+ models,
535
+ },
536
+ },
537
+ models: {
538
+ mode: cfg.models?.mode ?? "merge",
539
+ providers,
540
+ },
541
+ };
542
+ }
543
+ /**
544
+ * Apply Together provider configuration AND set Together as the default model.
545
+ * Use this when Together is the primary provider choice during onboarding.
546
+ */
547
+ export function applyTogetherConfig(cfg) {
548
+ const next = applyTogetherProviderConfig(cfg);
549
+ const existingModel = next.agents?.defaults?.model;
550
+ return {
551
+ ...next,
552
+ agents: {
553
+ ...next.agents,
554
+ defaults: {
555
+ ...next.agents?.defaults,
556
+ model: {
557
+ ...(existingModel && "fallbacks" in existingModel
558
+ ? {
559
+ fallbacks: existingModel.fallbacks,
560
+ }
561
+ : undefined),
562
+ primary: TOGETHER_DEFAULT_MODEL_REF,
563
+ },
564
+ },
565
+ },
566
+ };
567
+ }
568
+ export function applyXaiProviderConfig(cfg) {
569
+ const models = { ...cfg.agents?.defaults?.models };
570
+ models[XAI_DEFAULT_MODEL_REF] = {
571
+ ...models[XAI_DEFAULT_MODEL_REF],
572
+ alias: models[XAI_DEFAULT_MODEL_REF]?.alias ?? "Grok",
573
+ };
574
+ const providers = { ...cfg.models?.providers };
575
+ const existingProvider = providers.xai;
576
+ const existingModels = Array.isArray(existingProvider?.models) ? existingProvider.models : [];
577
+ const defaultModel = buildXaiModelDefinition();
578
+ const hasDefaultModel = existingModels.some((model) => model.id === XAI_DEFAULT_MODEL_ID);
579
+ const mergedModels = hasDefaultModel ? existingModels : [...existingModels, defaultModel];
580
+ const { apiKey: existingApiKey, ...existingProviderRest } = (existingProvider ?? {});
581
+ const resolvedApiKey = typeof existingApiKey === "string" ? existingApiKey : undefined;
582
+ const normalizedApiKey = resolvedApiKey?.trim();
583
+ providers.xai = {
584
+ ...existingProviderRest,
585
+ baseUrl: XAI_BASE_URL,
586
+ api: "openai-completions",
587
+ ...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
588
+ models: mergedModels.length > 0 ? mergedModels : [defaultModel],
589
+ };
590
+ return {
591
+ ...cfg,
592
+ agents: {
593
+ ...cfg.agents,
594
+ defaults: {
595
+ ...cfg.agents?.defaults,
596
+ models,
597
+ },
598
+ },
599
+ models: {
600
+ mode: cfg.models?.mode ?? "merge",
601
+ providers,
602
+ },
603
+ };
604
+ }
605
+ export function applyXaiConfig(cfg) {
606
+ const next = applyXaiProviderConfig(cfg);
607
+ const existingModel = next.agents?.defaults?.model;
608
+ return {
609
+ ...next,
610
+ agents: {
611
+ ...next.agents,
612
+ defaults: {
613
+ ...next.agents?.defaults,
614
+ model: {
615
+ ...(existingModel && "fallbacks" in existingModel
616
+ ? {
617
+ fallbacks: existingModel.fallbacks,
618
+ }
619
+ : undefined),
620
+ primary: XAI_DEFAULT_MODEL_REF,
621
+ },
622
+ },
623
+ },
624
+ };
625
+ }
351
626
  export function applyAuthProfileConfig(cfg, params) {
352
627
  const profiles = {
353
628
  ...cfg.auth?.profiles,
@@ -384,3 +659,66 @@ export function applyAuthProfileConfig(cfg, params) {
384
659
  },
385
660
  };
386
661
  }
662
+ export function applyQianfanProviderConfig(cfg) {
663
+ const models = { ...cfg.agents?.defaults?.models };
664
+ models[QIANFAN_DEFAULT_MODEL_REF] = {
665
+ ...models[QIANFAN_DEFAULT_MODEL_REF],
666
+ alias: models[QIANFAN_DEFAULT_MODEL_REF]?.alias ?? "QIANFAN",
667
+ };
668
+ const providers = { ...cfg.models?.providers };
669
+ const existingProvider = providers.qianfan;
670
+ const defaultProvider = buildQianfanProvider();
671
+ const existingModels = Array.isArray(existingProvider?.models) ? existingProvider.models : [];
672
+ const defaultModels = defaultProvider.models ?? [];
673
+ const hasDefaultModel = existingModels.some((model) => model.id === QIANFAN_DEFAULT_MODEL_ID);
674
+ const mergedModels = existingModels.length > 0
675
+ ? hasDefaultModel
676
+ ? existingModels
677
+ : [...existingModels, ...defaultModels]
678
+ : defaultModels;
679
+ const { apiKey: existingApiKey, baseUrl: existingBaseUrl, api: existingApi, ...existingProviderRest } = (existingProvider ?? {});
680
+ const resolvedApiKey = typeof existingApiKey === "string" ? existingApiKey : undefined;
681
+ const normalizedApiKey = resolvedApiKey?.trim();
682
+ providers.qianfan = {
683
+ ...existingProviderRest,
684
+ baseUrl: existingBaseUrl ?? QIANFAN_BASE_URL,
685
+ api: existingApi ?? "openai-completions",
686
+ ...(normalizedApiKey ? { apiKey: normalizedApiKey } : {}),
687
+ models: mergedModels.length > 0 ? mergedModels : defaultProvider.models,
688
+ };
689
+ return {
690
+ ...cfg,
691
+ agents: {
692
+ ...cfg.agents,
693
+ defaults: {
694
+ ...cfg.agents?.defaults,
695
+ models,
696
+ },
697
+ },
698
+ models: {
699
+ mode: cfg.models?.mode ?? "merge",
700
+ providers,
701
+ },
702
+ };
703
+ }
704
+ export function applyQianfanConfig(cfg) {
705
+ const next = applyQianfanProviderConfig(cfg);
706
+ const existingModel = next.agents?.defaults?.model;
707
+ return {
708
+ ...next,
709
+ agents: {
710
+ ...next.agents,
711
+ defaults: {
712
+ ...next.agents?.defaults,
713
+ model: {
714
+ ...(existingModel && "fallbacks" in existingModel
715
+ ? {
716
+ fallbacks: existingModel.fallbacks,
717
+ }
718
+ : undefined),
719
+ primary: QIANFAN_DEFAULT_MODEL_REF,
720
+ },
721
+ },
722
+ },
723
+ };
724
+ }