@poolzin/pool-bot 2026.1.39 → 2026.2.1

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 (511) 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/bash-tools.exec.js +76 -25
  11. package/dist/agents/cli-runner/helpers.js +10 -12
  12. package/dist/agents/cli-runner.js +2 -2
  13. package/dist/agents/cloudflare-ai-gateway.js +31 -0
  14. package/dist/agents/compaction.js +16 -2
  15. package/dist/agents/context-window-guard.js +13 -10
  16. package/dist/agents/context.js +4 -4
  17. package/dist/agents/docs-path.js +1 -1
  18. package/dist/agents/identity.js +47 -7
  19. package/dist/agents/memory-search.js +25 -8
  20. package/dist/agents/minimax-vlm.js +1 -1
  21. package/dist/agents/model-auth.js +12 -1
  22. package/dist/agents/model-catalog.js +4 -4
  23. package/dist/agents/model-selection.js +31 -4
  24. package/dist/agents/models-config.js +3 -3
  25. package/dist/agents/models-config.providers.js +147 -39
  26. package/dist/agents/pi-embedded-block-chunker.js +117 -42
  27. package/dist/agents/pi-embedded-helpers/errors.js +183 -78
  28. package/dist/agents/pi-embedded-helpers/openai.js +1 -1
  29. package/dist/agents/pi-embedded-helpers.js +1 -1
  30. package/dist/agents/pi-embedded-runner/compact.js +9 -8
  31. package/dist/agents/pi-embedded-runner/model.js +63 -4
  32. package/dist/agents/pi-embedded-runner/run/attempt.js +27 -17
  33. package/dist/agents/pi-embedded-runner/run.js +203 -50
  34. package/dist/agents/pi-embedded-runner/system-prompt.js +10 -2
  35. package/dist/agents/pi-embedded-runner/tool-result-truncation.js +275 -0
  36. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  37. package/dist/agents/pi-embedded-subscribe.js +118 -29
  38. package/dist/agents/pi-model-discovery.js +10 -0
  39. package/dist/agents/pi-tool-definition-adapter.js +50 -9
  40. package/dist/agents/pi-tools.before-tool-call.js +67 -0
  41. package/dist/agents/pi-tools.js +20 -10
  42. package/dist/agents/pi-tools.read.js +2 -2
  43. package/dist/agents/poolbot-tools.js +15 -10
  44. package/dist/agents/sandbox-paths.js +31 -0
  45. package/dist/agents/session-file-repair.js +83 -0
  46. package/dist/agents/session-tool-result-guard.js +94 -15
  47. package/dist/agents/session-transcript-repair.js +68 -0
  48. package/dist/agents/shell-utils.js +51 -0
  49. package/dist/agents/skills/bundled-context.js +23 -0
  50. package/dist/agents/skills/bundled-dir.js +41 -7
  51. package/dist/agents/skills/frontmatter.js +1 -1
  52. package/dist/agents/skills/workspace.js +2 -2
  53. package/dist/agents/skills-install.js +60 -23
  54. package/dist/agents/subagent-announce.js +79 -34
  55. package/dist/agents/system-prompt.js +28 -4
  56. package/dist/agents/together-models.js +127 -0
  57. package/dist/agents/tool-images.js +1 -1
  58. package/dist/agents/tool-policy.conformance.js +14 -0
  59. package/dist/agents/tool-policy.js +25 -1
  60. package/dist/agents/tools/browser-tool.js +3 -3
  61. package/dist/agents/tools/cron-tool.js +166 -19
  62. package/dist/agents/tools/discord-actions-presence.js +78 -0
  63. package/dist/agents/tools/image-tool.js +2 -2
  64. package/dist/agents/tools/memory-tool.js +93 -5
  65. package/dist/agents/tools/message-tool.js +56 -2
  66. package/dist/agents/tools/sessions-history-tool.js +69 -1
  67. package/dist/agents/tools/web-search.js +211 -42
  68. package/dist/agents/usage.js +23 -1
  69. package/dist/agents/workspace-run.js +67 -0
  70. package/dist/agents/workspace-templates.js +44 -0
  71. package/dist/auto-reply/command-auth.js +121 -6
  72. package/dist/auto-reply/commands-registry.data.js +1 -1
  73. package/dist/auto-reply/envelope.js +50 -72
  74. package/dist/auto-reply/reply/commands-compact.js +1 -0
  75. package/dist/auto-reply/reply/commands-context-report.js +3 -2
  76. package/dist/auto-reply/reply/commands-context.js +1 -0
  77. package/dist/auto-reply/reply/commands-models.js +107 -60
  78. package/dist/auto-reply/reply/commands-ptt.js +171 -0
  79. package/dist/auto-reply/reply/commands-session.js +2 -2
  80. package/dist/auto-reply/reply/get-reply-run.js +16 -5
  81. package/dist/auto-reply/reply/groups.js +1 -1
  82. package/dist/auto-reply/reply/inbound-context.js +9 -1
  83. package/dist/auto-reply/reply/inbound-meta.js +130 -0
  84. package/dist/auto-reply/reply/model-selection.js +3 -3
  85. package/dist/auto-reply/reply/untrusted-context.js +15 -0
  86. package/dist/auto-reply/status.js +1 -1
  87. package/dist/auto-reply/thinking.js +88 -43
  88. package/dist/browser/bridge-server.js +13 -0
  89. package/dist/browser/cdp.helpers.js +38 -24
  90. package/dist/browser/client-fetch.js +51 -8
  91. package/dist/browser/config.js +2 -11
  92. package/dist/browser/extension-relay.js +104 -43
  93. package/dist/browser/pw-ai.js +1 -1
  94. package/dist/browser/pw-session.js +143 -8
  95. package/dist/browser/pw-tools-core.interactions.js +125 -27
  96. package/dist/browser/pw-tools-core.responses.js +1 -1
  97. package/dist/browser/pw-tools-core.state.js +1 -1
  98. package/dist/browser/routes/agent.act.js +86 -41
  99. package/dist/browser/routes/dispatcher.js +4 -4
  100. package/dist/browser/screenshot.js +1 -1
  101. package/dist/browser/server-context.js +2 -2
  102. package/dist/browser/server.js +13 -0
  103. package/dist/build-info.json +3 -3
  104. package/dist/canvas-host/a2ui.js +3 -3
  105. package/dist/channels/plugins/catalog.js +2 -2
  106. package/dist/channels/plugins/onboarding/imessage.js +1 -1
  107. package/dist/channels/plugins/onboarding/signal.js +1 -1
  108. package/dist/channels/plugins/onboarding/slack.js +4 -4
  109. package/dist/channels/plugins/onboarding/whatsapp.js +3 -3
  110. package/dist/channels/plugins/pairing-message.js +1 -1
  111. package/dist/channels/reply-prefix.js +8 -1
  112. package/dist/cli/browser-cli-extension.js +2 -2
  113. package/dist/cli/cron-cli/register.cron-add.js +61 -40
  114. package/dist/cli/cron-cli/register.cron-edit.js +60 -34
  115. package/dist/cli/cron-cli/shared.js +56 -41
  116. package/dist/cli/dns-cli.js +26 -14
  117. package/dist/cli/docs-cli.js +1 -1
  118. package/dist/cli/gateway-cli/dev.js +1 -1
  119. package/dist/cli/gateway-cli/register.js +37 -19
  120. package/dist/cli/memory-cli.js +30 -20
  121. package/dist/cli/nodes-cli/register.canvas.js +1 -1
  122. package/dist/cli/parse-bytes.js +37 -0
  123. package/dist/cli/plugins-cli.js +1 -1
  124. package/dist/cli/run-main.js +2 -2
  125. package/dist/cli/security-cli.js +1 -1
  126. package/dist/cli/tagline.js +1 -1
  127. package/dist/cli/update-cli.js +173 -52
  128. package/dist/cli/webhooks-cli.js +5 -5
  129. package/dist/commands/agent.js +1 -0
  130. package/dist/commands/agents.commands.add.js +1 -1
  131. package/dist/commands/auth-choice.apply.api-providers.js +305 -17
  132. package/dist/commands/auth-choice.apply.js +4 -1
  133. package/dist/commands/auth-choice.apply.plugin-provider.js +2 -2
  134. package/dist/commands/auth-choice.apply.xai.js +63 -0
  135. package/dist/commands/auth-choice.preferred-provider.js +7 -1
  136. package/dist/commands/configure.wizard.js +1 -1
  137. package/dist/commands/dashboard.js +1 -1
  138. package/dist/commands/docs.js +1 -1
  139. package/dist/commands/doctor-config-flow.js +61 -5
  140. package/dist/commands/doctor-gateway-services.js +3 -3
  141. package/dist/commands/doctor-state-migrations.js +1 -1
  142. package/dist/commands/doctor-update.js +3 -3
  143. package/dist/commands/doctor.js +1 -1
  144. package/dist/commands/health.js +1 -1
  145. package/dist/commands/model-allowlist.js +29 -0
  146. package/dist/commands/model-picker.js +2 -1
  147. package/dist/commands/models/list.probe.js +2 -2
  148. package/dist/commands/models/list.registry.js +4 -4
  149. package/dist/commands/models/list.status-command.js +44 -24
  150. package/dist/commands/models/shared.js +15 -0
  151. package/dist/commands/onboard-auth.config-core.js +366 -28
  152. package/dist/commands/onboard-auth.credentials.js +71 -9
  153. package/dist/commands/onboard-auth.js +3 -3
  154. package/dist/commands/onboard-auth.models.js +26 -24
  155. package/dist/commands/onboard-custom.js +384 -0
  156. package/dist/commands/onboard-non-interactive/local/auth-choice-inference.js +35 -0
  157. package/dist/commands/onboard-non-interactive/local/auth-choice.js +146 -9
  158. package/dist/commands/onboard-skills.js +63 -38
  159. package/dist/commands/openai-model-default.js +41 -0
  160. package/dist/commands/status-all/report-lines.js +1 -1
  161. package/dist/commands/status.command.js +1 -1
  162. package/dist/commands/uninstall.js +3 -3
  163. package/dist/compat/legacy-names.js +1 -1
  164. package/dist/config/defaults.js +3 -2
  165. package/dist/config/io.js +3 -3
  166. package/dist/config/paths.js +136 -35
  167. package/dist/config/plugin-auto-enable.js +21 -5
  168. package/dist/config/redact-snapshot.js +153 -0
  169. package/dist/config/schema.field-metadata.js +590 -0
  170. package/dist/config/schema.js +3 -3
  171. package/dist/config/sessions/store.js +291 -23
  172. package/dist/config/types.memory.js +1 -0
  173. package/dist/config/version.js +4 -4
  174. package/dist/config/zod-schema.agent-defaults.js +3 -0
  175. package/dist/config/zod-schema.agent-runtime.js +13 -2
  176. package/dist/config/zod-schema.providers-core.js +142 -0
  177. package/dist/config/zod-schema.session.js +3 -0
  178. package/dist/cron/delivery.js +57 -0
  179. package/dist/cron/isolated-agent/delivery-target.js +18 -3
  180. package/dist/cron/isolated-agent/helpers.js +22 -5
  181. package/dist/cron/isolated-agent/run.js +171 -63
  182. package/dist/cron/isolated-agent/session.js +2 -0
  183. package/dist/cron/normalize.js +356 -28
  184. package/dist/cron/parse.js +10 -5
  185. package/dist/cron/run-log.js +35 -10
  186. package/dist/cron/schedule.js +41 -6
  187. package/dist/cron/service/jobs.js +208 -35
  188. package/dist/cron/service/ops.js +72 -16
  189. package/dist/cron/service/state.js +2 -0
  190. package/dist/cron/service/store.js +386 -14
  191. package/dist/cron/service/timer.js +390 -147
  192. package/dist/cron/session-reaper.js +86 -0
  193. package/dist/cron/store.js +23 -8
  194. package/dist/cron/validate-timestamp.js +43 -0
  195. package/dist/daemon/constants.js +7 -7
  196. package/dist/daemon/inspect.js +6 -6
  197. package/dist/daemon/systemd-unit.js +1 -1
  198. package/dist/discord/monitor/agent-components.js +438 -0
  199. package/dist/discord/monitor/allow-list.js +28 -5
  200. package/dist/discord/monitor/gateway-registry.js +29 -0
  201. package/dist/discord/monitor/native-command.js +44 -23
  202. package/dist/discord/monitor/sender-identity.js +45 -0
  203. package/dist/discord/pluralkit.js +27 -0
  204. package/dist/discord/send.outbound.js +92 -5
  205. package/dist/discord/send.shared.js +60 -23
  206. package/dist/discord/targets.js +84 -1
  207. package/dist/entry.js +15 -9
  208. package/dist/extensionAPI.js +8 -0
  209. package/dist/gateway/control-ui.js +8 -1
  210. package/dist/gateway/hooks-mapping.js +3 -0
  211. package/dist/gateway/hooks.js +65 -0
  212. package/dist/gateway/live-image-probe.js +1 -66
  213. package/dist/gateway/net.js +96 -31
  214. package/dist/gateway/node-command-policy.js +50 -15
  215. package/dist/gateway/openai-http.js +2 -2
  216. package/dist/gateway/openresponses-http.js +4 -4
  217. package/dist/gateway/origin-check.js +56 -0
  218. package/dist/gateway/protocol/client-info.js +9 -0
  219. package/dist/gateway/protocol/index.js +9 -2
  220. package/dist/gateway/protocol/schema/agents-models-skills.js +71 -1
  221. package/dist/gateway/protocol/schema/cron.js +22 -10
  222. package/dist/gateway/protocol/schema/protocol-schemas.js +16 -2
  223. package/dist/gateway/protocol/schema/sessions.js +12 -0
  224. package/dist/gateway/server/hooks.js +1 -1
  225. package/dist/gateway/server-broadcast.js +26 -9
  226. package/dist/gateway/server-chat.js +112 -23
  227. package/dist/gateway/server-discovery-runtime.js +10 -2
  228. package/dist/gateway/server-discovery.js +2 -2
  229. package/dist/gateway/server-http.js +110 -12
  230. package/dist/gateway/server-methods/agent-timestamp.js +60 -0
  231. package/dist/gateway/server-methods/agents.js +321 -2
  232. package/dist/gateway/server-methods/usage.js +559 -16
  233. package/dist/gateway/server-runtime-state.js +22 -8
  234. package/dist/gateway/server-startup-memory.js +16 -0
  235. package/dist/gateway/server.impl.js +7 -3
  236. package/dist/gateway/session-utils.fs.js +23 -25
  237. package/dist/gateway/session-utils.js +20 -10
  238. package/dist/gateway/sessions-patch.js +7 -22
  239. package/dist/gateway/test-helpers.server.js +35 -2
  240. package/dist/hooks/frontmatter.js +1 -1
  241. package/dist/hooks/hooks-status.js +1 -1
  242. package/dist/hooks/install.js +2 -2
  243. package/dist/hooks/loader.js +1 -1
  244. package/dist/hooks/workspace.js +3 -3
  245. package/dist/imessage/constants.js +2 -0
  246. package/dist/imessage/monitor/deliver.js +4 -1
  247. package/dist/imessage/monitor/monitor-provider.js +51 -1
  248. package/dist/index.js +2 -2
  249. package/dist/infra/bonjour-discovery.js +131 -70
  250. package/dist/infra/bonjour.js +3 -3
  251. package/dist/infra/control-ui-assets.js +134 -12
  252. package/dist/infra/errors.js +12 -0
  253. package/dist/infra/exec-approvals.js +266 -57
  254. package/dist/infra/format-time/format-datetime.js +79 -0
  255. package/dist/infra/format-time/format-duration.js +81 -0
  256. package/dist/infra/format-time/format-relative.js +80 -0
  257. package/dist/infra/heartbeat-runner.js +140 -49
  258. package/dist/infra/home-dir.js +54 -0
  259. package/dist/infra/net/fetch-guard.js +122 -0
  260. package/dist/infra/net/ssrf.js +65 -29
  261. package/dist/infra/outbound/abort.js +14 -0
  262. package/dist/infra/outbound/message-action-runner.js +77 -13
  263. package/dist/infra/outbound/outbound-session.js +143 -37
  264. package/dist/infra/path-env.js +3 -3
  265. package/dist/infra/poolbot-root.js +43 -1
  266. package/dist/infra/provider-usage.fetch.minimax.js +1 -1
  267. package/dist/infra/restart.js +1 -1
  268. package/dist/infra/session-cost-usage.js +631 -41
  269. package/dist/infra/state-migrations.js +317 -47
  270. package/dist/infra/tailscale.js +1 -1
  271. package/dist/infra/update-global.js +35 -0
  272. package/dist/infra/update-runner.js +149 -43
  273. package/dist/infra/warning-filter.js +65 -0
  274. package/dist/infra/widearea-dns.js +30 -9
  275. package/dist/logging/redact-identifier.js +12 -0
  276. package/dist/macos/relay.js +2 -2
  277. package/dist/media/fetch.js +81 -58
  278. package/dist/media/input-files.js +1 -1
  279. package/dist/media/mime.js +4 -0
  280. package/dist/media/png-encode.js +74 -0
  281. package/dist/media-understanding/apply.js +403 -3
  282. package/dist/media-understanding/attachments.js +38 -27
  283. package/dist/media-understanding/defaults.js +16 -0
  284. package/dist/media-understanding/providers/deepgram/audio.js +22 -14
  285. package/dist/media-understanding/providers/google/audio.js +24 -17
  286. package/dist/media-understanding/providers/google/video.js +24 -17
  287. package/dist/media-understanding/providers/image.js +4 -4
  288. package/dist/media-understanding/providers/index.js +4 -1
  289. package/dist/media-understanding/providers/openai/audio.js +22 -14
  290. package/dist/media-understanding/providers/shared.js +16 -11
  291. package/dist/media-understanding/providers/zai/index.js +6 -0
  292. package/dist/media-understanding/runner.js +158 -90
  293. package/dist/memory/backend-config.js +207 -0
  294. package/dist/memory/batch-voyage.js +277 -0
  295. package/dist/memory/embeddings-voyage.js +75 -0
  296. package/dist/memory/embeddings.js +29 -17
  297. package/dist/memory/internal.js +101 -18
  298. package/dist/memory/manager.js +155 -48
  299. package/dist/memory/search-manager.js +173 -0
  300. package/dist/memory/session-files.js +9 -3
  301. package/dist/memory/types.js +1 -0
  302. package/dist/node-host/runner.js +36 -26
  303. package/dist/node-host/with-timeout.js +27 -0
  304. package/dist/pairing/pairing-messages.js +1 -1
  305. package/dist/plugins/commands.js +5 -1
  306. package/dist/plugins/config-state.js +86 -7
  307. package/dist/plugins/discovery.js +1 -1
  308. package/dist/plugins/install.js +2 -2
  309. package/dist/plugins/source-display.js +51 -0
  310. package/dist/plugins/update.js +1 -1
  311. package/dist/process/exec.js +20 -2
  312. package/dist/routing/resolve-route.js +12 -0
  313. package/dist/routing/session-key.js +15 -0
  314. package/dist/runtime.js +2 -0
  315. package/dist/security/audit-extra.async.js +601 -0
  316. package/dist/security/audit-extra.js +2 -830
  317. package/dist/security/audit-extra.sync.js +505 -0
  318. package/dist/security/audit.js +2 -2
  319. package/dist/security/channel-metadata.js +34 -0
  320. package/dist/security/external-content.js +88 -6
  321. package/dist/security/skill-scanner.js +330 -0
  322. package/dist/sessions/session-key-utils.js +7 -0
  323. package/dist/shared/text/reasoning-tags.js +52 -7
  324. package/dist/signal/monitor/event-handler.js +80 -1
  325. package/dist/slack/monitor/media.js +85 -15
  326. package/dist/tailscale/detect.js +145 -0
  327. package/dist/telegram/bot/helpers.js +109 -28
  328. package/dist/telegram/bot-handlers.js +144 -3
  329. package/dist/telegram/bot-message-context.js +38 -11
  330. package/dist/telegram/bot-message-dispatch.js +48 -15
  331. package/dist/telegram/bot-native-commands.js +86 -29
  332. package/dist/telegram/bot.js +30 -29
  333. package/dist/telegram/model-buttons.js +163 -0
  334. package/dist/telegram/monitor.js +110 -85
  335. package/dist/telegram/send.js +129 -47
  336. package/dist/terminal/restore.js +45 -0
  337. package/dist/test-helpers/state-dir-env.js +16 -0
  338. package/dist/test-helpers/workspace.js +11 -0
  339. package/dist/test-utils/channel-plugins.js +82 -0
  340. package/dist/test-utils/ports.js +73 -0
  341. package/dist/tts/tts.js +12 -6
  342. package/dist/tui/tui-session-actions.js +166 -54
  343. package/dist/utils/fetch-timeout.js +20 -0
  344. package/dist/utils/normalize-secret-input.js +19 -0
  345. package/dist/utils/shell-argv.js +61 -0
  346. package/dist/utils/transcript-tools.js +58 -0
  347. package/dist/utils.js +55 -14
  348. package/dist/version.js +42 -5
  349. package/dist/web/qr-image.js +1 -61
  350. package/dist/wizard/onboarding.finalize.js +7 -7
  351. package/dist/wizard/onboarding.js +3 -3
  352. package/docs/RELEASE_WORKFOTS_COMPARISON.md +3 -3
  353. package/docs/_config.yml +2 -2
  354. package/docs/_layouts/default.html +9 -9
  355. package/docs/concepts/typebox.md +1 -1
  356. package/docs/docs.json +1 -1
  357. package/docs/northflank.mdx +7 -7
  358. package/docs/railway.mdx +3 -3
  359. package/docs/render.mdx +5 -5
  360. package/docs/start/lore.md +2 -2
  361. package/extensions/bluebubbles/index.ts +2 -2
  362. package/extensions/bluebubbles/package.json +1 -1
  363. package/extensions/bluebubbles/src/accounts.ts +8 -8
  364. package/extensions/bluebubbles/src/actions.test.ts +22 -22
  365. package/extensions/bluebubbles/src/actions.ts +5 -5
  366. package/extensions/bluebubbles/src/attachments.ts +2 -2
  367. package/extensions/bluebubbles/src/channel.ts +16 -16
  368. package/extensions/bluebubbles/src/chat.ts +2 -2
  369. package/extensions/bluebubbles/src/media-send.ts +2 -2
  370. package/extensions/bluebubbles/src/monitor.test.ts +46 -46
  371. package/extensions/bluebubbles/src/monitor.ts +5 -5
  372. package/extensions/bluebubbles/src/onboarding.ts +7 -7
  373. package/extensions/bluebubbles/src/reactions.ts +2 -2
  374. package/extensions/bluebubbles/src/send.ts +2 -2
  375. package/extensions/copilot-proxy/README.md +1 -1
  376. package/extensions/copilot-proxy/package.json +1 -1
  377. package/extensions/diagnostics-otel/index.ts +2 -2
  378. package/extensions/diagnostics-otel/package.json +1 -1
  379. package/extensions/diagnostics-otel/src/service.ts +3 -3
  380. package/extensions/discord/index.ts +2 -2
  381. package/extensions/discord/package.json +1 -1
  382. package/extensions/google-antigravity-auth/README.md +1 -1
  383. package/extensions/google-antigravity-auth/index.ts +1 -1
  384. package/extensions/google-antigravity-auth/package.json +1 -1
  385. package/extensions/google-gemini-cli-auth/README.md +1 -1
  386. package/extensions/google-gemini-cli-auth/oauth.ts +1 -1
  387. package/extensions/google-gemini-cli-auth/package.json +1 -1
  388. package/extensions/googlechat/index.ts +3 -3
  389. package/extensions/googlechat/package.json +1 -1
  390. package/extensions/googlechat/src/accounts.ts +8 -8
  391. package/extensions/googlechat/src/actions.ts +6 -6
  392. package/extensions/googlechat/src/channel.ts +21 -21
  393. package/extensions/googlechat/src/monitor.ts +8 -8
  394. package/extensions/googlechat/src/onboarding.ts +10 -10
  395. package/extensions/imessage/index.ts +2 -2
  396. package/extensions/imessage/package.json +1 -1
  397. package/extensions/line/index.ts +2 -2
  398. package/extensions/line/package.json +1 -1
  399. package/extensions/line/src/card-command.ts +2 -2
  400. package/extensions/line/src/channel.logout.test.ts +4 -4
  401. package/extensions/line/src/channel.sendPayload.test.ts +8 -8
  402. package/extensions/line/src/channel.ts +3 -3
  403. package/extensions/llm-task/README.md +3 -3
  404. package/extensions/llm-task/index.ts +2 -2
  405. package/extensions/llm-task/package.json +1 -1
  406. package/extensions/llm-task/src/llm-task-tool.ts +4 -4
  407. package/extensions/lobster/README.md +6 -6
  408. package/extensions/lobster/index.ts +2 -2
  409. package/extensions/lobster/src/lobster-tool.test.ts +4 -4
  410. package/extensions/lobster/src/lobster-tool.ts +2 -2
  411. package/extensions/matrix/index.ts +2 -2
  412. package/extensions/matrix/package.json +1 -1
  413. package/extensions/matrix/src/matrix/client/config.ts +1 -1
  414. package/extensions/matrix/src/matrix/monitor/handler.ts +1 -1
  415. package/extensions/matrix/src/onboarding.ts +1 -1
  416. package/extensions/mattermost/index.ts +2 -2
  417. package/extensions/mattermost/package.json +1 -1
  418. package/extensions/mattermost/src/mattermost/accounts.ts +8 -8
  419. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +5 -5
  420. package/extensions/mattermost/src/mattermost/monitor.ts +2 -2
  421. package/extensions/mattermost/src/onboarding-helpers.ts +3 -3
  422. package/extensions/mattermost/src/onboarding.ts +2 -2
  423. package/extensions/memory-core/index.ts +2 -2
  424. package/extensions/memory-core/package.json +1 -1
  425. package/extensions/memory-lancedb/index.ts +3 -3
  426. package/extensions/memory-lancedb/package.json +1 -1
  427. package/extensions/msteams/index.ts +2 -2
  428. package/extensions/msteams/package.json +1 -1
  429. package/extensions/msteams/src/channel.directory.test.ts +2 -2
  430. package/extensions/msteams/src/channel.ts +2 -2
  431. package/extensions/msteams/src/graph-upload.ts +4 -4
  432. package/extensions/msteams/src/monitor-handler.ts +2 -2
  433. package/extensions/msteams/src/monitor.ts +2 -2
  434. package/extensions/msteams/src/onboarding.ts +9 -9
  435. package/extensions/msteams/src/reply-dispatcher.ts +2 -2
  436. package/extensions/msteams/src/send-context.ts +2 -2
  437. package/extensions/msteams/src/send.ts +4 -4
  438. package/extensions/nextcloud-talk/index.ts +2 -2
  439. package/extensions/nextcloud-talk/package.json +1 -1
  440. package/extensions/nextcloud-talk/src/channel.ts +7 -7
  441. package/extensions/nextcloud-talk/src/inbound.ts +7 -7
  442. package/extensions/nextcloud-talk/src/onboarding.ts +1 -1
  443. package/extensions/nostr/README.md +2 -2
  444. package/extensions/nostr/index.ts +5 -5
  445. package/extensions/nostr/package.json +1 -1
  446. package/extensions/nostr/src/types.ts +4 -4
  447. package/extensions/open-prose/index.ts +2 -2
  448. package/extensions/qwen-portal-auth/README.md +1 -1
  449. package/extensions/signal/index.ts +2 -2
  450. package/extensions/signal/package.json +1 -1
  451. package/extensions/slack/index.ts +2 -2
  452. package/extensions/slack/package.json +1 -1
  453. package/extensions/telegram/index.ts +2 -2
  454. package/extensions/telegram/package.json +1 -1
  455. package/extensions/telegram/src/channel.ts +2 -2
  456. package/extensions/tlon/README.md +2 -2
  457. package/extensions/tlon/index.ts +2 -2
  458. package/extensions/tlon/package.json +1 -1
  459. package/extensions/tlon/src/channel.ts +13 -13
  460. package/extensions/tlon/src/monitor/index.ts +3 -3
  461. package/extensions/tlon/src/onboarding.ts +3 -3
  462. package/extensions/tlon/src/types.ts +3 -3
  463. package/extensions/twitch/README.md +1 -1
  464. package/extensions/twitch/index.ts +2 -2
  465. package/extensions/twitch/package.json +1 -1
  466. package/extensions/twitch/src/config.ts +3 -3
  467. package/extensions/twitch/src/monitor.ts +3 -3
  468. package/extensions/twitch/src/onboarding.ts +9 -9
  469. package/extensions/twitch/src/outbound.test.ts +2 -2
  470. package/extensions/twitch/src/plugin.test.ts +2 -2
  471. package/extensions/twitch/src/plugin.ts +8 -8
  472. package/extensions/twitch/src/send.test.ts +2 -2
  473. package/extensions/twitch/src/send.ts +4 -4
  474. package/extensions/twitch/src/token.test.ts +8 -8
  475. package/extensions/twitch/src/token.ts +3 -3
  476. package/extensions/twitch/src/twitch-client.ts +3 -3
  477. package/extensions/twitch/src/types.ts +3 -3
  478. package/extensions/twitch/src/utils/markdown.ts +1 -1
  479. package/extensions/voice-call/README.md +3 -3
  480. package/extensions/voice-call/package.json +1 -1
  481. package/extensions/voice-call/src/core-bridge.ts +2 -2
  482. package/extensions/voice-call/src/response-generator.ts +1 -1
  483. package/extensions/whatsapp/index.ts +2 -2
  484. package/extensions/whatsapp/package.json +1 -1
  485. package/extensions/zalo/README.md +1 -1
  486. package/extensions/zalo/index.ts +2 -2
  487. package/extensions/zalo/package.json +1 -1
  488. package/extensions/zalo/src/accounts.ts +8 -8
  489. package/extensions/zalo/src/actions.ts +4 -4
  490. package/extensions/zalo/src/channel.directory.test.ts +2 -2
  491. package/extensions/zalo/src/channel.ts +18 -18
  492. package/extensions/zalo/src/monitor.ts +9 -9
  493. package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
  494. package/extensions/zalo/src/onboarding.ts +24 -24
  495. package/extensions/zalo/src/send.ts +2 -2
  496. package/extensions/zalouser/README.md +2 -2
  497. package/extensions/zalouser/index.ts +2 -2
  498. package/extensions/zalouser/package.json +1 -1
  499. package/extensions/zalouser/src/accounts.ts +9 -9
  500. package/extensions/zalouser/src/channel.ts +24 -24
  501. package/extensions/zalouser/src/monitor.ts +4 -4
  502. package/extensions/zalouser/src/onboarding.ts +28 -28
  503. package/package.json +13 -251
  504. package/skills/nano-banana-pro/scripts/generate_image.py +1 -1
  505. package/skills/tmux/scripts/find-sessions.sh +1 -1
  506. package/CHANGELOG.md +0 -102
  507. package/README-header.png +0 -0
  508. package/git-hooks/pre-commit +0 -4
  509. package/scripts/format-staged.js +0 -148
  510. package/scripts/postinstall.js +0 -300
  511. package/scripts/setup-git-hooks.js +0 -96
@@ -5,15 +5,17 @@ export function resolveAgentIdentity(cfg, agentId) {
5
5
  }
6
6
  export function resolveAckReaction(cfg, agentId) {
7
7
  const configured = cfg.messages?.ackReaction;
8
- if (configured !== undefined)
8
+ if (configured !== undefined) {
9
9
  return configured.trim();
10
+ }
10
11
  const emoji = resolveAgentIdentity(cfg, agentId)?.emoji?.trim();
11
12
  return emoji || DEFAULT_ACK_REACTION;
12
13
  }
13
14
  export function resolveIdentityNamePrefix(cfg, agentId) {
14
15
  const name = resolveAgentIdentity(cfg, agentId)?.name?.trim();
15
- if (!name)
16
+ if (!name) {
16
17
  return undefined;
18
+ }
17
19
  return `[${name}]`;
18
20
  }
19
21
  /** Returns just the identity name (without brackets) for template context. */
@@ -22,14 +24,48 @@ export function resolveIdentityName(cfg, agentId) {
22
24
  }
23
25
  export function resolveMessagePrefix(cfg, agentId, opts) {
24
26
  const configured = opts?.configured ?? cfg.messages?.messagePrefix;
25
- if (configured !== undefined)
27
+ if (configured !== undefined) {
26
28
  return configured;
29
+ }
27
30
  const hasAllowFrom = opts?.hasAllowFrom === true;
28
- if (hasAllowFrom)
31
+ if (hasAllowFrom) {
29
32
  return "";
33
+ }
30
34
  return resolveIdentityNamePrefix(cfg, agentId) ?? opts?.fallback ?? "[poolbot]";
31
35
  }
32
- export function resolveResponsePrefix(cfg, agentId) {
36
+ /** Helper to extract a channel config value by dynamic key. */
37
+ function getChannelConfig(cfg, channel) {
38
+ const channels = cfg.channels;
39
+ const value = channels?.[channel];
40
+ return typeof value === "object" && value !== null
41
+ ? value
42
+ : undefined;
43
+ }
44
+ export function resolveResponsePrefix(cfg, agentId, opts) {
45
+ // L1: Channel account level
46
+ if (opts?.channel && opts?.accountId) {
47
+ const channelCfg = getChannelConfig(cfg, opts.channel);
48
+ const accounts = channelCfg?.accounts;
49
+ const accountPrefix = accounts?.[opts.accountId]?.responsePrefix;
50
+ if (accountPrefix !== undefined) {
51
+ if (accountPrefix === "auto") {
52
+ return resolveIdentityNamePrefix(cfg, agentId);
53
+ }
54
+ return accountPrefix;
55
+ }
56
+ }
57
+ // L2: Channel level
58
+ if (opts?.channel) {
59
+ const channelCfg = getChannelConfig(cfg, opts.channel);
60
+ const channelPrefix = channelCfg?.responsePrefix;
61
+ if (channelPrefix !== undefined) {
62
+ if (channelPrefix === "auto") {
63
+ return resolveIdentityNamePrefix(cfg, agentId);
64
+ }
65
+ return channelPrefix;
66
+ }
67
+ }
68
+ // L4: Global level
33
69
  const configured = cfg.messages?.responsePrefix;
34
70
  if (configured !== undefined) {
35
71
  if (configured === "auto") {
@@ -45,14 +81,18 @@ export function resolveEffectiveMessagesConfig(cfg, agentId, opts) {
45
81
  hasAllowFrom: opts?.hasAllowFrom,
46
82
  fallback: opts?.fallbackMessagePrefix,
47
83
  }),
48
- responsePrefix: resolveResponsePrefix(cfg, agentId),
84
+ responsePrefix: resolveResponsePrefix(cfg, agentId, {
85
+ channel: opts?.channel,
86
+ accountId: opts?.accountId,
87
+ }),
49
88
  };
50
89
  }
51
90
  export function resolveHumanDelayConfig(cfg, agentId) {
52
91
  const defaults = cfg.agents?.defaults?.humanDelay;
53
92
  const overrides = resolveAgentConfig(cfg, agentId)?.humanDelay;
54
- if (!defaults && !overrides)
93
+ if (!defaults && !overrides) {
55
94
  return undefined;
95
+ }
56
96
  return {
57
97
  mode: overrides?.mode ?? defaults?.mode,
58
98
  minMs: overrides?.minMs ?? defaults?.minMs,
@@ -5,6 +5,7 @@ import { clampInt, clampNumber, resolveUserPath } from "../utils.js";
5
5
  import { resolveAgentConfig } from "./agent-scope.js";
6
6
  const DEFAULT_OPENAI_MODEL = "text-embedding-3-small";
7
7
  const DEFAULT_GEMINI_MODEL = "gemini-embedding-001";
8
+ const DEFAULT_VOYAGE_MODEL = "voyage-4-large";
8
9
  const DEFAULT_CHUNK_TOKENS = 400;
9
10
  const DEFAULT_CHUNK_OVERLAP = 80;
10
11
  const DEFAULT_WATCH_DEBOUNCE_MS = 1500;
@@ -22,20 +23,24 @@ function normalizeSources(sources, sessionMemoryEnabled) {
22
23
  const normalized = new Set();
23
24
  const input = sources?.length ? sources : DEFAULT_SOURCES;
24
25
  for (const source of input) {
25
- if (source === "memory")
26
+ if (source === "memory") {
26
27
  normalized.add("memory");
27
- if (source === "sessions" && sessionMemoryEnabled)
28
+ }
29
+ if (source === "sessions" && sessionMemoryEnabled) {
28
30
  normalized.add("sessions");
31
+ }
29
32
  }
30
- if (normalized.size === 0)
33
+ if (normalized.size === 0) {
31
34
  normalized.add("memory");
35
+ }
32
36
  return Array.from(normalized);
33
37
  }
34
38
  function resolveStorePath(agentId, raw) {
35
39
  const stateDir = resolveStateDir(process.env, os.homedir);
36
40
  const fallback = path.join(stateDir, "memory", `${agentId}.sqlite`);
37
- if (!raw)
41
+ if (!raw) {
38
42
  return fallback;
43
+ }
39
44
  const withToken = raw.includes("{agentId}") ? raw.replaceAll("{agentId}", agentId) : raw;
40
45
  return resolveUserPath(withToken);
41
46
  }
@@ -51,9 +56,13 @@ function mergeConfig(defaults, overrides, agentId) {
51
56
  defaultRemote?.baseUrl ||
52
57
  defaultRemote?.apiKey ||
53
58
  defaultRemote?.headers);
54
- const includeRemote = hasRemoteConfig || provider === "openai" || provider === "gemini" || provider === "auto";
59
+ const includeRemote = hasRemoteConfig ||
60
+ provider === "openai" ||
61
+ provider === "gemini" ||
62
+ provider === "voyage" ||
63
+ provider === "auto";
55
64
  const batch = {
56
- enabled: overrideRemote?.batch?.enabled ?? defaultRemote?.batch?.enabled ?? true,
65
+ enabled: overrideRemote?.batch?.enabled ?? defaultRemote?.batch?.enabled ?? false,
57
66
  wait: overrideRemote?.batch?.wait ?? defaultRemote?.batch?.wait ?? true,
58
67
  concurrency: Math.max(1, overrideRemote?.batch?.concurrency ?? defaultRemote?.batch?.concurrency ?? 2),
59
68
  pollIntervalMs: overrideRemote?.batch?.pollIntervalMs ?? defaultRemote?.batch?.pollIntervalMs ?? 2000,
@@ -72,13 +81,19 @@ function mergeConfig(defaults, overrides, agentId) {
72
81
  ? DEFAULT_GEMINI_MODEL
73
82
  : provider === "openai"
74
83
  ? DEFAULT_OPENAI_MODEL
75
- : undefined;
84
+ : provider === "voyage"
85
+ ? DEFAULT_VOYAGE_MODEL
86
+ : undefined;
76
87
  const model = overrides?.model ?? defaults?.model ?? modelDefault ?? "";
77
88
  const local = {
78
89
  modelPath: overrides?.local?.modelPath ?? defaults?.local?.modelPath,
79
90
  modelCacheDir: overrides?.local?.modelCacheDir ?? defaults?.local?.modelCacheDir,
80
91
  };
81
92
  const sources = normalizeSources(overrides?.sources ?? defaults?.sources, sessionMemory);
93
+ const rawPaths = [...(defaults?.extraPaths ?? []), ...(overrides?.extraPaths ?? [])]
94
+ .map((value) => value.trim())
95
+ .filter(Boolean);
96
+ const extraPaths = Array.from(new Set(rawPaths));
82
97
  const vector = {
83
98
  enabled: overrides?.store?.vector?.enabled ?? defaults?.store?.vector?.enabled ?? true,
84
99
  extensionPath: overrides?.store?.vector?.extensionPath ?? defaults?.store?.vector?.extensionPath,
@@ -144,6 +159,7 @@ function mergeConfig(defaults, overrides, agentId) {
144
159
  return {
145
160
  enabled,
146
161
  sources,
162
+ extraPaths,
147
163
  provider,
148
164
  remote,
149
165
  experimental: {
@@ -183,7 +199,8 @@ export function resolveMemorySearchConfig(cfg, agentId) {
183
199
  const defaults = cfg.agents?.defaults?.memorySearch;
184
200
  const overrides = resolveAgentConfig(cfg, agentId)?.memorySearch;
185
201
  const resolved = mergeConfig(defaults, overrides, agentId);
186
- if (!resolved.enabled)
202
+ if (!resolved.enabled) {
187
203
  return null;
204
+ }
188
205
  return resolved;
189
206
  }
@@ -47,7 +47,7 @@ export async function minimaxUnderstandImage(params) {
47
47
  headers: {
48
48
  Authorization: `Bearer ${apiKey}`,
49
49
  "Content-Type": "application/json",
50
- "MM-API-Source": "Moltbot",
50
+ "MM-API-Source": "Poolbot",
51
51
  },
52
52
  body: JSON.stringify({
53
53
  prompt,
@@ -199,22 +199,33 @@ export function resolveEnvApiKey(provider) {
199
199
  if (normalized === "qwen-portal") {
200
200
  return pick("QWEN_OAUTH_TOKEN") ?? pick("QWEN_PORTAL_API_KEY");
201
201
  }
202
+ if (normalized === "minimax-portal") {
203
+ return pick("MINIMAX_OAUTH_TOKEN") ?? pick("MINIMAX_API_KEY");
204
+ }
205
+ if (normalized === "kimi-coding") {
206
+ return pick("KIMI_API_KEY") ?? pick("KIMICODE_API_KEY");
207
+ }
202
208
  const envMap = {
203
209
  openai: "OPENAI_API_KEY",
204
210
  google: "GEMINI_API_KEY",
211
+ voyage: "VOYAGE_API_KEY",
205
212
  groq: "GROQ_API_KEY",
206
213
  deepgram: "DEEPGRAM_API_KEY",
207
214
  cerebras: "CEREBRAS_API_KEY",
208
215
  xai: "XAI_API_KEY",
209
216
  openrouter: "OPENROUTER_API_KEY",
210
217
  "vercel-ai-gateway": "AI_GATEWAY_API_KEY",
218
+ "cloudflare-ai-gateway": "CLOUDFLARE_AI_GATEWAY_API_KEY",
211
219
  moonshot: "MOONSHOT_API_KEY",
212
- "kimi-code": "KIMICODE_API_KEY",
213
220
  minimax: "MINIMAX_API_KEY",
221
+ xiaomi: "XIAOMI_API_KEY",
214
222
  synthetic: "SYNTHETIC_API_KEY",
215
223
  venice: "VENICE_API_KEY",
216
224
  mistral: "MISTRAL_API_KEY",
217
225
  opencode: "OPENCODE_API_KEY",
226
+ together: "TOGETHER_API_KEY",
227
+ qianfan: "QIANFAN_API_KEY",
228
+ ollama: "OLLAMA_API_KEY",
218
229
  };
219
230
  const envVar = envMap[normalized];
220
231
  if (!envVar)
@@ -1,6 +1,6 @@
1
1
  import { loadConfig } from "../config/config.js";
2
- import { resolveMoltbotAgentDir } from "./agent-paths.js";
3
- import { ensureMoltbotModelsJson } from "./models-config.js";
2
+ import { resolvePoolbotAgentDir } from "./agent-paths.js";
3
+ import { ensurePoolbotModelsJson } from "./models-config.js";
4
4
  let modelCatalogPromise = null;
5
5
  let hasLoggedModelCatalogError = false;
6
6
  const defaultImportPiSdk = () => import("@mariozechner/pi-coding-agent");
@@ -30,13 +30,13 @@ export async function loadModelCatalog(params) {
30
30
  });
31
31
  try {
32
32
  const cfg = params?.config ?? loadConfig();
33
- await ensureMoltbotModelsJson(cfg);
33
+ await ensurePoolbotModelsJson(cfg);
34
34
  // IMPORTANT: keep the dynamic import *inside* the try/catch.
35
35
  // If this fails once (e.g. during a pnpm install that temporarily swaps node_modules),
36
36
  // we must not poison the cache with a rejected promise (otherwise all channel handlers
37
37
  // will keep failing until restart).
38
38
  const piSdk = await importPiSdk();
39
- const agentDir = resolveMoltbotAgentDir();
39
+ const agentDir = resolvePoolbotAgentDir();
40
40
  const authStorage = piSdk.discoverAuthStorage(agentDir);
41
41
  const registry = piSdk.discoverModels(authStorage, agentDir);
42
42
  const entries = Array.isArray(registry) ? registry : registry.getAll();
@@ -1,6 +1,11 @@
1
1
  import { normalizeGoogleModelId } from "./models-config.providers.js";
2
2
  import { resolveAgentModelPrimary } from "./agent-scope.js";
3
3
  import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "./defaults.js";
4
+ const ANTHROPIC_MODEL_ALIASES = {
5
+ "opus-4.6": "claude-opus-4-6",
6
+ "opus-4.5": "claude-opus-4-5",
7
+ "sonnet-4.5": "claude-sonnet-4-5",
8
+ };
4
9
  function normalizeAliasKey(value) {
5
10
  return value.trim().toLowerCase();
6
11
  }
@@ -15,6 +20,8 @@ export function normalizeProviderId(provider) {
15
20
  return "opencode";
16
21
  if (normalized === "qwen")
17
22
  return "qwen-portal";
23
+ if (normalized === "kimi-code")
24
+ return "kimi-coding";
18
25
  return normalized;
19
26
  }
20
27
  export function isCliProvider(provider, cfg) {
@@ -31,10 +38,9 @@ function normalizeAnthropicModelId(model) {
31
38
  if (!trimmed)
32
39
  return trimmed;
33
40
  const lower = trimmed.toLowerCase();
34
- if (lower === "opus-4.5")
35
- return "claude-opus-4-5";
36
- if (lower === "sonnet-4.5")
37
- return "claude-sonnet-4-5";
41
+ const aliased = ANTHROPIC_MODEL_ALIASES[lower];
42
+ if (aliased)
43
+ return aliased;
38
44
  return trimmed;
39
45
  }
40
46
  function normalizeProviderModelId(provider, model) {
@@ -62,6 +68,27 @@ export function parseModelRef(raw, defaultProvider) {
62
68
  const normalizedModel = normalizeProviderModelId(provider, model);
63
69
  return { provider, model: normalizedModel };
64
70
  }
71
+ export function resolveAllowlistModelKey(raw, defaultProvider) {
72
+ const parsed = parseModelRef(raw, defaultProvider);
73
+ if (!parsed) {
74
+ return null;
75
+ }
76
+ return modelKey(parsed.provider, parsed.model);
77
+ }
78
+ export function buildConfiguredAllowlistKeys(params) {
79
+ const rawAllowlist = Object.keys(params.cfg?.agents?.defaults?.models ?? {});
80
+ if (rawAllowlist.length === 0) {
81
+ return null;
82
+ }
83
+ const keys = new Set();
84
+ for (const raw of rawAllowlist) {
85
+ const key = resolveAllowlistModelKey(String(raw ?? ""), params.defaultProvider);
86
+ if (key) {
87
+ keys.add(key);
88
+ }
89
+ }
90
+ return keys.size > 0 ? keys : null;
91
+ }
65
92
  export function buildModelAliasIndex(params) {
66
93
  const byAlias = new Map();
67
94
  const byKey = new Map();
@@ -1,7 +1,7 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { loadConfig } from "../config/config.js";
4
- import { resolveMoltbotAgentDir } from "./agent-paths.js";
4
+ import { resolvePoolbotAgentDir } from "./agent-paths.js";
5
5
  import { normalizeProviders, resolveImplicitBedrockProvider, resolveImplicitCopilotProvider, resolveImplicitProviders, } from "./models-config.providers.js";
6
6
  const DEFAULT_MODE = "merge";
7
7
  function isRecord(value) {
@@ -57,9 +57,9 @@ async function readJson(pathname) {
57
57
  return null;
58
58
  }
59
59
  }
60
- export async function ensureMoltbotModelsJson(config, agentDirOverride) {
60
+ export async function ensurePoolbotModelsJson(config, agentDirOverride) {
61
61
  const cfg = config ?? loadConfig();
62
- const agentDir = agentDirOverride?.trim() ? agentDirOverride.trim() : resolveMoltbotAgentDir();
62
+ const agentDir = agentDirOverride?.trim() ? agentDirOverride.trim() : resolvePoolbotAgentDir();
63
63
  const explicitProviders = (cfg.models?.providers ?? {});
64
64
  const implicitProviders = await resolveImplicitProviders({ agentDir });
65
65
  const providers = mergeProviders({
@@ -2,13 +2,17 @@ import { DEFAULT_COPILOT_API_BASE_URL, resolveCopilotApiToken, } from "../provid
2
2
  import { ensureAuthProfileStore, listProfilesForProvider } from "./auth-profiles.js";
3
3
  import { resolveAwsSdkEnvVarName, resolveEnvApiKey } from "./model-auth.js";
4
4
  import { discoverBedrockModels } from "./bedrock-discovery.js";
5
+ import { buildCloudflareAiGatewayModelDefinition, resolveCloudflareAiGatewayBaseUrl, } from "./cloudflare-ai-gateway.js";
5
6
  import { buildSyntheticModelDefinition, SYNTHETIC_BASE_URL, SYNTHETIC_MODEL_CATALOG, } from "./synthetic-models.js";
7
+ import { TOGETHER_BASE_URL, TOGETHER_MODEL_CATALOG, buildTogetherModelDefinition, } from "./together-models.js";
6
8
  import { discoverVeniceModels, VENICE_BASE_URL } from "./venice-models.js";
7
- const MINIMAX_API_BASE_URL = "https://api.minimax.io/anthropic";
9
+ const MINIMAX_API_BASE_URL = "https://api.minimax.chat/v1";
10
+ const MINIMAX_PORTAL_BASE_URL = "https://api.minimax.io/anthropic";
8
11
  const MINIMAX_DEFAULT_MODEL_ID = "MiniMax-M2.1";
9
12
  const MINIMAX_DEFAULT_VISION_MODEL_ID = "MiniMax-VL-01";
10
13
  const MINIMAX_DEFAULT_CONTEXT_WINDOW = 200000;
11
14
  const MINIMAX_DEFAULT_MAX_TOKENS = 8192;
15
+ const MINIMAX_OAUTH_PLACEHOLDER = "minimax-oauth";
12
16
  // Pricing: MiniMax doesn't publish public rates. Override in models.json for accurate costs.
13
17
  const MINIMAX_API_COST = {
14
18
  input: 15,
@@ -17,7 +21,7 @@ const MINIMAX_API_COST = {
17
21
  cacheWrite: 10,
18
22
  };
19
23
  const MOONSHOT_BASE_URL = "https://api.moonshot.ai/v1";
20
- const MOONSHOT_DEFAULT_MODEL_ID = "kimi-k2-0905-preview";
24
+ const MOONSHOT_DEFAULT_MODEL_ID = "kimi-k2.5";
21
25
  const MOONSHOT_DEFAULT_CONTEXT_WINDOW = 256000;
22
26
  const MOONSHOT_DEFAULT_MAX_TOKENS = 8192;
23
27
  const MOONSHOT_DEFAULT_COST = {
@@ -26,13 +30,11 @@ const MOONSHOT_DEFAULT_COST = {
26
30
  cacheRead: 0,
27
31
  cacheWrite: 0,
28
32
  };
29
- const KIMI_CODE_BASE_URL = "https://api.kimi.com/coding/v1";
30
- const KIMI_CODE_MODEL_ID = "kimi-for-coding";
31
- const KIMI_CODE_CONTEXT_WINDOW = 262144;
32
- const KIMI_CODE_MAX_TOKENS = 32768;
33
- const KIMI_CODE_HEADERS = { "User-Agent": "KimiCLI/0.77" };
34
- const KIMI_CODE_COMPAT = { supportsDeveloperRole: false };
35
- const KIMI_CODE_DEFAULT_COST = {
33
+ const XIAOMI_BASE_URL = "https://api.xiaomimimo.com/anthropic";
34
+ export const XIAOMI_DEFAULT_MODEL_ID = "mimo-v2-flash";
35
+ const XIAOMI_DEFAULT_CONTEXT_WINDOW = 262144;
36
+ const XIAOMI_DEFAULT_MAX_TOKENS = 8192;
37
+ const XIAOMI_DEFAULT_COST = {
36
38
  input: 0,
37
39
  output: 0,
38
40
  cacheRead: 0,
@@ -58,6 +60,16 @@ const OLLAMA_DEFAULT_COST = {
58
60
  cacheRead: 0,
59
61
  cacheWrite: 0,
60
62
  };
63
+ export const QIANFAN_BASE_URL = "https://qianfan.baidubce.com/v2";
64
+ export const QIANFAN_DEFAULT_MODEL_ID = "deepseek-v3.2";
65
+ const QIANFAN_DEFAULT_CONTEXT_WINDOW = 98304;
66
+ const QIANFAN_DEFAULT_MAX_TOKENS = 32768;
67
+ const QIANFAN_DEFAULT_COST = {
68
+ input: 0,
69
+ output: 0,
70
+ cacheRead: 0,
71
+ cacheWrite: 0,
72
+ };
61
73
  async function discoverOllamaModels() {
62
74
  // Skip Ollama discovery in test environments
63
75
  if (process.env.VITEST || process.env.NODE_ENV === "test") {
@@ -87,6 +99,11 @@ async function discoverOllamaModels() {
87
99
  cost: OLLAMA_DEFAULT_COST,
88
100
  contextWindow: OLLAMA_DEFAULT_CONTEXT_WINDOW,
89
101
  maxTokens: OLLAMA_DEFAULT_MAX_TOKENS,
102
+ // Disable streaming by default for Ollama to avoid SDK issue #1205
103
+ // See: https://github.com/badlogic/pi-mono/issues/1205
104
+ params: {
105
+ streaming: false,
106
+ },
90
107
  };
91
108
  });
92
109
  }
@@ -198,7 +215,7 @@ export function normalizeProviders(params) {
198
215
  function buildMinimaxProvider() {
199
216
  return {
200
217
  baseUrl: MINIMAX_API_BASE_URL,
201
- api: "anthropic-messages",
218
+ api: "openai-completions",
202
219
  models: [
203
220
  {
204
221
  id: MINIMAX_DEFAULT_MODEL_ID,
@@ -228,7 +245,7 @@ function buildMoonshotProvider() {
228
245
  models: [
229
246
  {
230
247
  id: MOONSHOT_DEFAULT_MODEL_ID,
231
- name: "Kimi K2 0905 Preview",
248
+ name: "Kimi K2.5",
232
249
  reasoning: false,
233
250
  input: ["text"],
234
251
  cost: MOONSHOT_DEFAULT_COST,
@@ -238,25 +255,6 @@ function buildMoonshotProvider() {
238
255
  ],
239
256
  };
240
257
  }
241
- function buildKimiCodeProvider() {
242
- return {
243
- baseUrl: KIMI_CODE_BASE_URL,
244
- api: "openai-completions",
245
- models: [
246
- {
247
- id: KIMI_CODE_MODEL_ID,
248
- name: "Kimi For Coding",
249
- reasoning: true,
250
- input: ["text"],
251
- cost: KIMI_CODE_DEFAULT_COST,
252
- contextWindow: KIMI_CODE_CONTEXT_WINDOW,
253
- maxTokens: KIMI_CODE_MAX_TOKENS,
254
- headers: KIMI_CODE_HEADERS,
255
- compat: KIMI_CODE_COMPAT,
256
- },
257
- ],
258
- };
259
- }
260
258
  function buildQwenPortalProvider() {
261
259
  return {
262
260
  baseUrl: QWEN_PORTAL_BASE_URL,
@@ -306,6 +304,73 @@ async function buildOllamaProvider() {
306
304
  models,
307
305
  };
308
306
  }
307
+ function buildMinimaxPortalProvider() {
308
+ return {
309
+ baseUrl: MINIMAX_PORTAL_BASE_URL,
310
+ api: "anthropic-messages",
311
+ models: [
312
+ {
313
+ id: MINIMAX_DEFAULT_MODEL_ID,
314
+ name: "MiniMax M2.1",
315
+ reasoning: false,
316
+ input: ["text"],
317
+ cost: MINIMAX_API_COST,
318
+ contextWindow: MINIMAX_DEFAULT_CONTEXT_WINDOW,
319
+ maxTokens: MINIMAX_DEFAULT_MAX_TOKENS,
320
+ },
321
+ ],
322
+ };
323
+ }
324
+ export function buildXiaomiProvider() {
325
+ return {
326
+ baseUrl: XIAOMI_BASE_URL,
327
+ api: "anthropic-messages",
328
+ models: [
329
+ {
330
+ id: XIAOMI_DEFAULT_MODEL_ID,
331
+ name: "Xiaomi MiMo V2 Flash",
332
+ reasoning: false,
333
+ input: ["text"],
334
+ cost: XIAOMI_DEFAULT_COST,
335
+ contextWindow: XIAOMI_DEFAULT_CONTEXT_WINDOW,
336
+ maxTokens: XIAOMI_DEFAULT_MAX_TOKENS,
337
+ },
338
+ ],
339
+ };
340
+ }
341
+ function buildTogetherProvider() {
342
+ return {
343
+ baseUrl: TOGETHER_BASE_URL,
344
+ api: "openai-completions",
345
+ models: TOGETHER_MODEL_CATALOG.map(buildTogetherModelDefinition),
346
+ };
347
+ }
348
+ export function buildQianfanProvider() {
349
+ return {
350
+ baseUrl: QIANFAN_BASE_URL,
351
+ api: "openai-completions",
352
+ models: [
353
+ {
354
+ id: QIANFAN_DEFAULT_MODEL_ID,
355
+ name: "DEEPSEEK V3.2",
356
+ reasoning: true,
357
+ input: ["text"],
358
+ cost: QIANFAN_DEFAULT_COST,
359
+ contextWindow: QIANFAN_DEFAULT_CONTEXT_WINDOW,
360
+ maxTokens: QIANFAN_DEFAULT_MAX_TOKENS,
361
+ },
362
+ {
363
+ id: "ernie-5.0-thinking-preview",
364
+ name: "ERNIE-5.0-Thinking-Preview",
365
+ reasoning: true,
366
+ input: ["text", "image"],
367
+ cost: QIANFAN_DEFAULT_COST,
368
+ contextWindow: 119000,
369
+ maxTokens: 64000,
370
+ },
371
+ ],
372
+ };
373
+ }
309
374
  export async function resolveImplicitProviders(params) {
310
375
  const providers = {};
311
376
  const authStore = ensureAuthProfileStore(params.agentDir, {
@@ -316,16 +381,18 @@ export async function resolveImplicitProviders(params) {
316
381
  if (minimaxKey) {
317
382
  providers.minimax = { ...buildMinimaxProvider(), apiKey: minimaxKey };
318
383
  }
384
+ const minimaxOauthProfile = listProfilesForProvider(authStore, "minimax-portal");
385
+ if (minimaxOauthProfile.length > 0) {
386
+ providers["minimax-portal"] = {
387
+ ...buildMinimaxPortalProvider(),
388
+ apiKey: MINIMAX_OAUTH_PLACEHOLDER,
389
+ };
390
+ }
319
391
  const moonshotKey = resolveEnvApiKeyVarName("moonshot") ??
320
392
  resolveApiKeyFromProfiles({ provider: "moonshot", store: authStore });
321
393
  if (moonshotKey) {
322
394
  providers.moonshot = { ...buildMoonshotProvider(), apiKey: moonshotKey };
323
395
  }
324
- const kimiCodeKey = resolveEnvApiKeyVarName("kimi-code") ??
325
- resolveApiKeyFromProfiles({ provider: "kimi-code", store: authStore });
326
- if (kimiCodeKey) {
327
- providers["kimi-code"] = { ...buildKimiCodeProvider(), apiKey: kimiCodeKey };
328
- }
329
396
  const syntheticKey = resolveEnvApiKeyVarName("synthetic") ??
330
397
  resolveApiKeyFromProfiles({ provider: "synthetic", store: authStore });
331
398
  if (syntheticKey) {
@@ -343,12 +410,53 @@ export async function resolveImplicitProviders(params) {
343
410
  apiKey: QWEN_PORTAL_OAUTH_PLACEHOLDER,
344
411
  };
345
412
  }
413
+ const xiaomiKey = resolveEnvApiKeyVarName("xiaomi") ??
414
+ resolveApiKeyFromProfiles({ provider: "xiaomi", store: authStore });
415
+ if (xiaomiKey) {
416
+ providers.xiaomi = { ...buildXiaomiProvider(), apiKey: xiaomiKey };
417
+ }
418
+ const cloudflareProfiles = listProfilesForProvider(authStore, "cloudflare-ai-gateway");
419
+ for (const profileId of cloudflareProfiles) {
420
+ const cred = authStore.profiles[profileId];
421
+ if (cred?.type !== "api_key")
422
+ continue;
423
+ const accountId = cred.metadata?.accountId?.trim();
424
+ const gatewayId = cred.metadata?.gatewayId?.trim();
425
+ if (!accountId || !gatewayId)
426
+ continue;
427
+ const baseUrl = resolveCloudflareAiGatewayBaseUrl({ accountId, gatewayId });
428
+ if (!baseUrl)
429
+ continue;
430
+ const apiKey = resolveEnvApiKeyVarName("cloudflare-ai-gateway") ?? cred.key?.trim() ?? "";
431
+ if (!apiKey)
432
+ continue;
433
+ providers["cloudflare-ai-gateway"] = {
434
+ baseUrl,
435
+ api: "anthropic-messages",
436
+ apiKey,
437
+ models: [buildCloudflareAiGatewayModelDefinition()],
438
+ };
439
+ break;
440
+ }
346
441
  // Ollama provider - only add if explicitly configured
347
442
  const ollamaKey = resolveEnvApiKeyVarName("ollama") ??
348
443
  resolveApiKeyFromProfiles({ provider: "ollama", store: authStore });
349
444
  if (ollamaKey) {
350
445
  providers.ollama = { ...(await buildOllamaProvider()), apiKey: ollamaKey };
351
446
  }
447
+ const togetherKey = resolveEnvApiKeyVarName("together") ??
448
+ resolveApiKeyFromProfiles({ provider: "together", store: authStore });
449
+ if (togetherKey) {
450
+ providers.together = {
451
+ ...buildTogetherProvider(),
452
+ apiKey: togetherKey,
453
+ };
454
+ }
455
+ const qianfanKey = resolveEnvApiKeyVarName("qianfan") ??
456
+ resolveApiKeyFromProfiles({ provider: "qianfan", store: authStore });
457
+ if (qianfanKey) {
458
+ providers.qianfan = { ...buildQianfanProvider(), apiKey: qianfanKey };
459
+ }
352
460
  return providers;
353
461
  }
354
462
  export async function resolveImplicitCopilotProvider(params) {
@@ -384,15 +492,15 @@ export async function resolveImplicitCopilotProvider(params) {
384
492
  }
385
493
  // pi-coding-agent's ModelRegistry marks a model "available" only if its
386
494
  // `AuthStorage` has auth configured for that provider (via auth.json/env/etc).
387
- // Our Copilot auth lives in Moltbot's auth-profiles store instead, so we also
495
+ // Our Copilot auth lives in Poolbot's auth-profiles store instead, so we also
388
496
  // write a runtime-only auth.json entry for pi-coding-agent to pick up.
389
497
  //
390
- // This is safe because it's (1) within Moltbot's agent dir, (2) contains the
498
+ // This is safe because it's (1) within Poolbot's agent dir, (2) contains the
391
499
  // GitHub token (not the exchanged Copilot token), and (3) matches existing
392
500
  // patterns for OAuth-like providers in pi-coding-agent.
393
501
  // Note: we deliberately do not write pi-coding-agent's `auth.json` here.
394
- // Moltbot uses its own auth store and exchanges tokens at runtime.
395
- // `models list` uses Moltbot's auth heuristics for availability.
502
+ // Poolbot uses its own auth store and exchanges tokens at runtime.
503
+ // `models list` uses Poolbot's auth heuristics for availability.
396
504
  // We intentionally do NOT define custom models for Copilot in models.json.
397
505
  // pi-coding-agent treats providers with models as replacements requiring apiKey.
398
506
  // We only override baseUrl; the model list comes from pi-ai built-ins.