@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
@@ -3,14 +3,15 @@ import { resolveEnvApiKey } from "../agents/model-auth.js";
3
3
  import { formatApiKeyPreview, normalizeApiKeyInput, validateApiKeyInput, } from "./auth-choice.api-key.js";
4
4
  import { applyDefaultModelChoice } from "./auth-choice.default-model.js";
5
5
  import { applyGoogleGeminiModelDefault, GOOGLE_GEMINI_DEFAULT_MODEL, } from "./google-gemini-model-default.js";
6
- import { applyAuthProfileConfig, applyKimiCodeConfig, applyKimiCodeProviderConfig, applyMoonshotConfig, applyMoonshotProviderConfig, applyOpencodeZenConfig, applyOpencodeZenProviderConfig, applyOpenrouterConfig, applyOpenrouterProviderConfig, applySyntheticConfig, applySyntheticProviderConfig, applyVeniceConfig, applyVeniceProviderConfig, applyVercelAiGatewayConfig, applyVercelAiGatewayProviderConfig, applyZaiConfig, KIMI_CODE_MODEL_REF, MOONSHOT_DEFAULT_MODEL_REF, OPENROUTER_DEFAULT_MODEL_REF, SYNTHETIC_DEFAULT_MODEL_REF, VENICE_DEFAULT_MODEL_REF, VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF, setGeminiApiKey, setKimiCodeApiKey, setMoonshotApiKey, setOpencodeZenApiKey, setOpenrouterApiKey, setSyntheticApiKey, setVeniceApiKey, setVercelAiGatewayApiKey, setZaiApiKey, ZAI_DEFAULT_MODEL_REF, } from "./onboard-auth.js";
6
+ import { applyAuthProfileConfig, applyCloudflareAiGatewayConfig, applyCloudflareAiGatewayProviderConfig, applyQianfanConfig, applyQianfanProviderConfig, applyKimiCodeConfig, applyKimiCodeProviderConfig, applyMoonshotConfig, applyMoonshotConfigCn, applyMoonshotProviderConfig, applyMoonshotProviderConfigCn, applyOpencodeZenConfig, applyOpencodeZenProviderConfig, applyOpenrouterConfig, applyOpenrouterProviderConfig, applySyntheticConfig, applySyntheticProviderConfig, applyTogetherConfig, applyTogetherProviderConfig, applyVeniceConfig, applyVeniceProviderConfig, applyVercelAiGatewayConfig, applyVercelAiGatewayProviderConfig, applyXiaomiConfig, applyXiaomiProviderConfig, applyZaiConfig, CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF, QIANFAN_DEFAULT_MODEL_REF, KIMI_CODING_MODEL_REF, MOONSHOT_DEFAULT_MODEL_REF, OPENROUTER_DEFAULT_MODEL_REF, SYNTHETIC_DEFAULT_MODEL_REF, TOGETHER_DEFAULT_MODEL_REF, VENICE_DEFAULT_MODEL_REF, VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF, XIAOMI_DEFAULT_MODEL_REF, setCloudflareAiGatewayConfig, setQianfanApiKey, setGeminiApiKey, setKimiCodingApiKey, setMoonshotApiKey, setOpencodeZenApiKey, setOpenrouterApiKey, setSyntheticApiKey, setTogetherApiKey, setVeniceApiKey, setVercelAiGatewayApiKey, setXiaomiApiKey, setZaiApiKey, ZAI_DEFAULT_MODEL_REF, } from "./onboard-auth.js";
7
7
  import { OPENCODE_ZEN_DEFAULT_MODEL } from "./opencode-zen-model-default.js";
8
8
  export async function applyAuthChoiceApiProviders(params) {
9
9
  let nextConfig = params.config;
10
10
  let agentModelOverride;
11
11
  const noteAgentModel = async (model) => {
12
- if (!params.agentId)
12
+ if (!params.agentId) {
13
13
  return;
14
+ }
14
15
  await params.prompter.note(`Default model set to ${model} for agent "${params.agentId}".`, "Model configured");
15
16
  };
16
17
  let authChoice = params.authChoice;
@@ -24,10 +25,14 @@ export async function applyAuthChoiceApiProviders(params) {
24
25
  else if (params.opts.tokenProvider === "vercel-ai-gateway") {
25
26
  authChoice = "ai-gateway-api-key";
26
27
  }
28
+ else if (params.opts.tokenProvider === "cloudflare-ai-gateway") {
29
+ authChoice = "cloudflare-ai-gateway-api-key";
30
+ }
27
31
  else if (params.opts.tokenProvider === "moonshot") {
28
32
  authChoice = "moonshot-api-key";
29
33
  }
30
- else if (params.opts.tokenProvider === "kimi-code") {
34
+ else if (params.opts.tokenProvider === "kimi-code" ||
35
+ params.opts.tokenProvider === "kimi-coding") {
31
36
  authChoice = "kimi-code-api-key";
32
37
  }
33
38
  else if (params.opts.tokenProvider === "google") {
@@ -36,15 +41,24 @@ export async function applyAuthChoiceApiProviders(params) {
36
41
  else if (params.opts.tokenProvider === "zai") {
37
42
  authChoice = "zai-api-key";
38
43
  }
44
+ else if (params.opts.tokenProvider === "xiaomi") {
45
+ authChoice = "xiaomi-api-key";
46
+ }
39
47
  else if (params.opts.tokenProvider === "synthetic") {
40
48
  authChoice = "synthetic-api-key";
41
49
  }
42
50
  else if (params.opts.tokenProvider === "venice") {
43
51
  authChoice = "venice-api-key";
44
52
  }
53
+ else if (params.opts.tokenProvider === "together") {
54
+ authChoice = "together-api-key";
55
+ }
45
56
  else if (params.opts.tokenProvider === "opencode") {
46
57
  authChoice = "opencode-zen";
47
58
  }
59
+ else if (params.opts.tokenProvider === "qianfan") {
60
+ authChoice = "qianfan-api-key";
61
+ }
48
62
  }
49
63
  if (authChoice === "openrouter-api-key") {
50
64
  const store = ensureAuthProfileStore(params.agentDir, {
@@ -165,6 +179,86 @@ export async function applyAuthChoiceApiProviders(params) {
165
179
  }
166
180
  return { config: nextConfig, agentModelOverride };
167
181
  }
182
+ if (authChoice === "cloudflare-ai-gateway-api-key") {
183
+ let hasCredential = false;
184
+ let accountId = params.opts?.cloudflareAiGatewayAccountId?.trim() ?? "";
185
+ let gatewayId = params.opts?.cloudflareAiGatewayGatewayId?.trim() ?? "";
186
+ const ensureAccountGateway = async () => {
187
+ if (!accountId) {
188
+ const value = await params.prompter.text({
189
+ message: "Enter Cloudflare Account ID",
190
+ validate: (val) => (String(val).trim() ? undefined : "Account ID is required"),
191
+ });
192
+ accountId = String(value).trim();
193
+ }
194
+ if (!gatewayId) {
195
+ const value = await params.prompter.text({
196
+ message: "Enter Cloudflare AI Gateway ID",
197
+ validate: (val) => (String(val).trim() ? undefined : "Gateway ID is required"),
198
+ });
199
+ gatewayId = String(value).trim();
200
+ }
201
+ };
202
+ const optsApiKey = normalizeApiKeyInput(params.opts?.cloudflareAiGatewayApiKey ?? "");
203
+ if (!hasCredential && accountId && gatewayId && optsApiKey) {
204
+ await setCloudflareAiGatewayConfig(accountId, gatewayId, optsApiKey, params.agentDir);
205
+ hasCredential = true;
206
+ }
207
+ const envKey = resolveEnvApiKey("cloudflare-ai-gateway");
208
+ if (!hasCredential && envKey) {
209
+ const useExisting = await params.prompter.confirm({
210
+ message: `Use existing CLOUDFLARE_AI_GATEWAY_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
211
+ initialValue: true,
212
+ });
213
+ if (useExisting) {
214
+ await ensureAccountGateway();
215
+ await setCloudflareAiGatewayConfig(accountId, gatewayId, normalizeApiKeyInput(envKey.apiKey), params.agentDir);
216
+ hasCredential = true;
217
+ }
218
+ }
219
+ if (!hasCredential && optsApiKey) {
220
+ await ensureAccountGateway();
221
+ await setCloudflareAiGatewayConfig(accountId, gatewayId, optsApiKey, params.agentDir);
222
+ hasCredential = true;
223
+ }
224
+ if (!hasCredential) {
225
+ await ensureAccountGateway();
226
+ const key = await params.prompter.text({
227
+ message: "Enter Cloudflare AI Gateway API key",
228
+ validate: validateApiKeyInput,
229
+ });
230
+ await setCloudflareAiGatewayConfig(accountId, gatewayId, normalizeApiKeyInput(String(key)), params.agentDir);
231
+ hasCredential = true;
232
+ }
233
+ if (hasCredential) {
234
+ nextConfig = applyAuthProfileConfig(nextConfig, {
235
+ profileId: "cloudflare-ai-gateway:default",
236
+ provider: "cloudflare-ai-gateway",
237
+ mode: "api_key",
238
+ });
239
+ }
240
+ {
241
+ const applied = await applyDefaultModelChoice({
242
+ config: nextConfig,
243
+ setDefaultModel: params.setDefaultModel,
244
+ defaultModel: CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF,
245
+ applyDefaultConfig: (cfg) => applyCloudflareAiGatewayConfig(cfg, {
246
+ accountId: accountId || params.opts?.cloudflareAiGatewayAccountId,
247
+ gatewayId: gatewayId || params.opts?.cloudflareAiGatewayGatewayId,
248
+ }),
249
+ applyProviderConfig: (cfg) => applyCloudflareAiGatewayProviderConfig(cfg, {
250
+ accountId: accountId || params.opts?.cloudflareAiGatewayAccountId,
251
+ gatewayId: gatewayId || params.opts?.cloudflareAiGatewayGatewayId,
252
+ }),
253
+ noteDefault: CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF,
254
+ noteAgentModel,
255
+ prompter: params.prompter,
256
+ });
257
+ nextConfig = applied.config;
258
+ agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
259
+ }
260
+ return { config: nextConfig, agentModelOverride };
261
+ }
168
262
  if (authChoice === "moonshot-api-key") {
169
263
  let hasCredential = false;
170
264
  if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "moonshot") {
@@ -209,49 +303,96 @@ export async function applyAuthChoiceApiProviders(params) {
209
303
  }
210
304
  return { config: nextConfig, agentModelOverride };
211
305
  }
306
+ if (authChoice === "moonshot-api-key-cn") {
307
+ let hasCredential = false;
308
+ if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "moonshot") {
309
+ await setMoonshotApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
310
+ hasCredential = true;
311
+ }
312
+ const envKey = resolveEnvApiKey("moonshot");
313
+ if (envKey) {
314
+ const useExisting = await params.prompter.confirm({
315
+ message: `Use existing MOONSHOT_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
316
+ initialValue: true,
317
+ });
318
+ if (useExisting) {
319
+ await setMoonshotApiKey(envKey.apiKey, params.agentDir);
320
+ hasCredential = true;
321
+ }
322
+ }
323
+ if (!hasCredential) {
324
+ const key = await params.prompter.text({
325
+ message: "Enter Moonshot API key (.cn)",
326
+ validate: validateApiKeyInput,
327
+ });
328
+ await setMoonshotApiKey(normalizeApiKeyInput(String(key)), params.agentDir);
329
+ }
330
+ nextConfig = applyAuthProfileConfig(nextConfig, {
331
+ profileId: "moonshot:default",
332
+ provider: "moonshot",
333
+ mode: "api_key",
334
+ });
335
+ {
336
+ const applied = await applyDefaultModelChoice({
337
+ config: nextConfig,
338
+ setDefaultModel: params.setDefaultModel,
339
+ defaultModel: MOONSHOT_DEFAULT_MODEL_REF,
340
+ applyDefaultConfig: applyMoonshotConfigCn,
341
+ applyProviderConfig: applyMoonshotProviderConfigCn,
342
+ noteAgentModel,
343
+ prompter: params.prompter,
344
+ });
345
+ nextConfig = applied.config;
346
+ agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
347
+ }
348
+ return { config: nextConfig, agentModelOverride };
349
+ }
212
350
  if (authChoice === "kimi-code-api-key") {
213
351
  let hasCredential = false;
214
- if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "kimi-code") {
215
- await setKimiCodeApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
352
+ const tokenProvider = params.opts?.tokenProvider?.trim().toLowerCase();
353
+ if (!hasCredential &&
354
+ params.opts?.token &&
355
+ (tokenProvider === "kimi-code" || tokenProvider === "kimi-coding")) {
356
+ await setKimiCodingApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
216
357
  hasCredential = true;
217
358
  }
218
359
  if (!hasCredential) {
219
360
  await params.prompter.note([
220
- "Kimi Code uses a dedicated endpoint and API key.",
361
+ "Kimi Coding uses a dedicated endpoint and API key.",
221
362
  "Get your API key at: https://www.kimi.com/code/en",
222
- ].join("\n"), "Kimi Code");
363
+ ].join("\n"), "Kimi Coding");
223
364
  }
224
- const envKey = resolveEnvApiKey("kimi-code");
365
+ const envKey = resolveEnvApiKey("kimi-coding");
225
366
  if (envKey) {
226
367
  const useExisting = await params.prompter.confirm({
227
- message: `Use existing KIMICODE_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
368
+ message: `Use existing KIMI_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
228
369
  initialValue: true,
229
370
  });
230
371
  if (useExisting) {
231
- await setKimiCodeApiKey(envKey.apiKey, params.agentDir);
372
+ await setKimiCodingApiKey(envKey.apiKey, params.agentDir);
232
373
  hasCredential = true;
233
374
  }
234
375
  }
235
376
  if (!hasCredential) {
236
377
  const key = await params.prompter.text({
237
- message: "Enter Kimi Code API key",
378
+ message: "Enter Kimi Coding API key",
238
379
  validate: validateApiKeyInput,
239
380
  });
240
- await setKimiCodeApiKey(normalizeApiKeyInput(String(key)), params.agentDir);
381
+ await setKimiCodingApiKey(normalizeApiKeyInput(String(key)), params.agentDir);
241
382
  }
242
383
  nextConfig = applyAuthProfileConfig(nextConfig, {
243
- profileId: "kimi-code:default",
244
- provider: "kimi-code",
384
+ profileId: "kimi-coding:default",
385
+ provider: "kimi-coding",
245
386
  mode: "api_key",
246
387
  });
247
388
  {
248
389
  const applied = await applyDefaultModelChoice({
249
390
  config: nextConfig,
250
391
  setDefaultModel: params.setDefaultModel,
251
- defaultModel: KIMI_CODE_MODEL_REF,
392
+ defaultModel: KIMI_CODING_MODEL_REF,
252
393
  applyDefaultConfig: applyKimiCodeConfig,
253
394
  applyProviderConfig: applyKimiCodeProviderConfig,
254
- noteDefault: KIMI_CODE_MODEL_REF,
395
+ noteDefault: KIMI_CODING_MODEL_REF,
255
396
  noteAgentModel,
256
397
  prompter: params.prompter,
257
398
  });
@@ -362,6 +503,51 @@ export async function applyAuthChoiceApiProviders(params) {
362
503
  }
363
504
  return { config: nextConfig, agentModelOverride };
364
505
  }
506
+ if (authChoice === "xiaomi-api-key") {
507
+ let hasCredential = false;
508
+ if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "xiaomi") {
509
+ await setXiaomiApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
510
+ hasCredential = true;
511
+ }
512
+ const envKey = resolveEnvApiKey("xiaomi");
513
+ if (envKey) {
514
+ const useExisting = await params.prompter.confirm({
515
+ message: `Use existing XIAOMI_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
516
+ initialValue: true,
517
+ });
518
+ if (useExisting) {
519
+ await setXiaomiApiKey(envKey.apiKey, params.agentDir);
520
+ hasCredential = true;
521
+ }
522
+ }
523
+ if (!hasCredential) {
524
+ const key = await params.prompter.text({
525
+ message: "Enter Xiaomi API key",
526
+ validate: validateApiKeyInput,
527
+ });
528
+ await setXiaomiApiKey(normalizeApiKeyInput(String(key)), params.agentDir);
529
+ }
530
+ nextConfig = applyAuthProfileConfig(nextConfig, {
531
+ profileId: "xiaomi:default",
532
+ provider: "xiaomi",
533
+ mode: "api_key",
534
+ });
535
+ {
536
+ const applied = await applyDefaultModelChoice({
537
+ config: nextConfig,
538
+ setDefaultModel: params.setDefaultModel,
539
+ defaultModel: XIAOMI_DEFAULT_MODEL_REF,
540
+ applyDefaultConfig: applyXiaomiConfig,
541
+ applyProviderConfig: applyXiaomiProviderConfig,
542
+ noteDefault: XIAOMI_DEFAULT_MODEL_REF,
543
+ noteAgentModel,
544
+ prompter: params.prompter,
545
+ });
546
+ nextConfig = applied.config;
547
+ agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
548
+ }
549
+ return { config: nextConfig, agentModelOverride };
550
+ }
365
551
  if (authChoice === "synthetic-api-key") {
366
552
  if (params.opts?.token && params.opts?.tokenProvider === "synthetic") {
367
553
  await setSyntheticApiKey(String(params.opts.token).trim(), params.agentDir);
@@ -456,7 +642,7 @@ export async function applyAuthChoiceApiProviders(params) {
456
642
  await params.prompter.note([
457
643
  "OpenCode Zen provides access to Claude, GPT, Gemini, and more models.",
458
644
  "Get your API key at: https://opencode.ai/auth",
459
- "Requires an active OpenCode Zen subscription.",
645
+ "OpenCode Zen bills per request. Check your OpenCode dashboard for details.",
460
646
  ].join("\n"), "OpenCode Zen");
461
647
  }
462
648
  const envKey = resolveEnvApiKey("opencode");
@@ -498,5 +684,107 @@ export async function applyAuthChoiceApiProviders(params) {
498
684
  }
499
685
  return { config: nextConfig, agentModelOverride };
500
686
  }
687
+ if (authChoice === "together-api-key") {
688
+ let hasCredential = false;
689
+ if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "together") {
690
+ await setTogetherApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
691
+ hasCredential = true;
692
+ }
693
+ if (!hasCredential) {
694
+ await params.prompter.note([
695
+ "Together AI provides access to leading open-source models including Llama, DeepSeek, Qwen, and more.",
696
+ "Get your API key at: https://api.together.xyz/settings/api-keys",
697
+ ].join("\n"), "Together AI");
698
+ }
699
+ const envKey = resolveEnvApiKey("together");
700
+ if (envKey) {
701
+ const useExisting = await params.prompter.confirm({
702
+ message: `Use existing TOGETHER_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
703
+ initialValue: true,
704
+ });
705
+ if (useExisting) {
706
+ await setTogetherApiKey(envKey.apiKey, params.agentDir);
707
+ hasCredential = true;
708
+ }
709
+ }
710
+ if (!hasCredential) {
711
+ const key = await params.prompter.text({
712
+ message: "Enter Together AI API key",
713
+ validate: validateApiKeyInput,
714
+ });
715
+ await setTogetherApiKey(normalizeApiKeyInput(String(key)), params.agentDir);
716
+ }
717
+ nextConfig = applyAuthProfileConfig(nextConfig, {
718
+ profileId: "together:default",
719
+ provider: "together",
720
+ mode: "api_key",
721
+ });
722
+ {
723
+ const applied = await applyDefaultModelChoice({
724
+ config: nextConfig,
725
+ setDefaultModel: params.setDefaultModel,
726
+ defaultModel: TOGETHER_DEFAULT_MODEL_REF,
727
+ applyDefaultConfig: applyTogetherConfig,
728
+ applyProviderConfig: applyTogetherProviderConfig,
729
+ noteDefault: TOGETHER_DEFAULT_MODEL_REF,
730
+ noteAgentModel,
731
+ prompter: params.prompter,
732
+ });
733
+ nextConfig = applied.config;
734
+ agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
735
+ }
736
+ return { config: nextConfig, agentModelOverride };
737
+ }
738
+ if (authChoice === "qianfan-api-key") {
739
+ let hasCredential = false;
740
+ if (!hasCredential && params.opts?.token && params.opts?.tokenProvider === "qianfan") {
741
+ setQianfanApiKey(normalizeApiKeyInput(params.opts.token), params.agentDir);
742
+ hasCredential = true;
743
+ }
744
+ if (!hasCredential) {
745
+ await params.prompter.note([
746
+ "Get your API key at: https://console.bce.baidu.com/qianfan/ais/console/apiKey",
747
+ "API key format: bce-v3/ALTAK-...",
748
+ ].join("\n"), "QIANFAN");
749
+ }
750
+ const envKey = resolveEnvApiKey("qianfan");
751
+ if (envKey) {
752
+ const useExisting = await params.prompter.confirm({
753
+ message: `Use existing QIANFAN_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
754
+ initialValue: true,
755
+ });
756
+ if (useExisting) {
757
+ setQianfanApiKey(envKey.apiKey, params.agentDir);
758
+ hasCredential = true;
759
+ }
760
+ }
761
+ if (!hasCredential) {
762
+ const key = await params.prompter.text({
763
+ message: "Enter QIANFAN API key",
764
+ validate: validateApiKeyInput,
765
+ });
766
+ setQianfanApiKey(normalizeApiKeyInput(String(key)), params.agentDir);
767
+ }
768
+ nextConfig = applyAuthProfileConfig(nextConfig, {
769
+ profileId: "qianfan:default",
770
+ provider: "qianfan",
771
+ mode: "api_key",
772
+ });
773
+ {
774
+ const applied = await applyDefaultModelChoice({
775
+ config: nextConfig,
776
+ setDefaultModel: params.setDefaultModel,
777
+ defaultModel: QIANFAN_DEFAULT_MODEL_REF,
778
+ applyDefaultConfig: applyQianfanConfig,
779
+ applyProviderConfig: applyQianfanProviderConfig,
780
+ noteDefault: QIANFAN_DEFAULT_MODEL_REF,
781
+ noteAgentModel,
782
+ prompter: params.prompter,
783
+ });
784
+ nextConfig = applied.config;
785
+ agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
786
+ }
787
+ return { config: nextConfig, agentModelOverride };
788
+ }
501
789
  return null;
502
790
  }
@@ -8,6 +8,7 @@ import { applyAuthChoiceMiniMax } from "./auth-choice.apply.minimax.js";
8
8
  import { applyAuthChoiceOAuth } from "./auth-choice.apply.oauth.js";
9
9
  import { applyAuthChoiceOpenAI } from "./auth-choice.apply.openai.js";
10
10
  import { applyAuthChoiceQwenPortal } from "./auth-choice.apply.qwen-portal.js";
11
+ import { applyAuthChoiceXAI } from "./auth-choice.apply.xai.js";
11
12
  export async function applyAuthChoice(params) {
12
13
  const handlers = [
13
14
  applyAuthChoiceAnthropic,
@@ -20,11 +21,13 @@ export async function applyAuthChoice(params) {
20
21
  applyAuthChoiceGoogleGeminiCli,
21
22
  applyAuthChoiceCopilotProxy,
22
23
  applyAuthChoiceQwenPortal,
24
+ applyAuthChoiceXAI,
23
25
  ];
24
26
  for (const handler of handlers) {
25
27
  const result = await handler(params);
26
- if (result)
28
+ if (result) {
27
29
  return result;
30
+ }
28
31
  }
29
32
  return { config: params.config };
30
33
  }
@@ -1,4 +1,4 @@
1
- import { resolveMoltbotAgentDir } from "../agents/agent-paths.js";
1
+ import { resolvePoolbotAgentDir } from "../agents/agent-paths.js";
2
2
  import { resolveDefaultAgentId, resolveAgentDir, resolveAgentWorkspaceDir, } from "../agents/agent-scope.js";
3
3
  import { upsertAuthProfile } from "../agents/auth-profiles.js";
4
4
  import { normalizeProviderId } from "../agents/model-selection.js";
@@ -76,7 +76,7 @@ export async function applyAuthChoicePluginProvider(params, options) {
76
76
  const agentId = params.agentId ?? resolveDefaultAgentId(nextConfig);
77
77
  const defaultAgentId = resolveDefaultAgentId(nextConfig);
78
78
  const agentDir = params.agentDir ??
79
- (agentId === defaultAgentId ? resolveMoltbotAgentDir() : resolveAgentDir(nextConfig, agentId));
79
+ (agentId === defaultAgentId ? resolvePoolbotAgentDir() : resolveAgentDir(nextConfig, agentId));
80
80
  const workspaceDir = resolveAgentWorkspaceDir(nextConfig, agentId) ?? resolveDefaultAgentWorkspaceDir();
81
81
  const providers = resolvePluginProviders({ config: nextConfig, workspaceDir });
82
82
  const provider = resolveProviderMatch(providers, options.providerId);
@@ -0,0 +1,63 @@
1
+ import { resolveEnvApiKey } from "../agents/model-auth.js";
2
+ import { formatApiKeyPreview, normalizeApiKeyInput, validateApiKeyInput, } from "./auth-choice.api-key.js";
3
+ import { applyDefaultModelChoice } from "./auth-choice.default-model.js";
4
+ import { applyAuthProfileConfig, applyXaiConfig, applyXaiProviderConfig, setXaiApiKey, XAI_DEFAULT_MODEL_REF, } from "./onboard-auth.js";
5
+ export async function applyAuthChoiceXAI(params) {
6
+ if (params.authChoice !== "xai-api-key") {
7
+ return null;
8
+ }
9
+ let nextConfig = params.config;
10
+ let agentModelOverride;
11
+ const noteAgentModel = async (model) => {
12
+ if (!params.agentId) {
13
+ return;
14
+ }
15
+ await params.prompter.note(`Default model set to ${model} for agent "${params.agentId}".`, "Model configured");
16
+ };
17
+ let hasCredential = false;
18
+ const optsKey = params.opts?.xaiApiKey?.trim();
19
+ if (optsKey) {
20
+ setXaiApiKey(normalizeApiKeyInput(optsKey), params.agentDir);
21
+ hasCredential = true;
22
+ }
23
+ if (!hasCredential) {
24
+ const envKey = resolveEnvApiKey("xai");
25
+ if (envKey) {
26
+ const useExisting = await params.prompter.confirm({
27
+ message: `Use existing XAI_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
28
+ initialValue: true,
29
+ });
30
+ if (useExisting) {
31
+ setXaiApiKey(envKey.apiKey, params.agentDir);
32
+ hasCredential = true;
33
+ }
34
+ }
35
+ }
36
+ if (!hasCredential) {
37
+ const key = await params.prompter.text({
38
+ message: "Enter xAI API key",
39
+ validate: validateApiKeyInput,
40
+ });
41
+ setXaiApiKey(normalizeApiKeyInput(String(key)), params.agentDir);
42
+ }
43
+ nextConfig = applyAuthProfileConfig(nextConfig, {
44
+ profileId: "xai:default",
45
+ provider: "xai",
46
+ mode: "api_key",
47
+ });
48
+ {
49
+ const applied = await applyDefaultModelChoice({
50
+ config: nextConfig,
51
+ setDefaultModel: params.setDefaultModel,
52
+ defaultModel: XAI_DEFAULT_MODEL_REF,
53
+ applyDefaultConfig: applyXaiConfig,
54
+ applyProviderConfig: applyXaiProviderConfig,
55
+ noteDefault: XAI_DEFAULT_MODEL_REF,
56
+ noteAgentModel,
57
+ prompter: params.prompter,
58
+ });
59
+ nextConfig = applied.config;
60
+ agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
61
+ }
62
+ return { config: nextConfig, agentModelOverride };
63
+ }
@@ -10,14 +10,18 @@ const PREFERRED_PROVIDER_BY_AUTH_CHOICE = {
10
10
  "openai-api-key": "openai",
11
11
  "openrouter-api-key": "openrouter",
12
12
  "ai-gateway-api-key": "vercel-ai-gateway",
13
+ "cloudflare-ai-gateway-api-key": "cloudflare-ai-gateway",
13
14
  "moonshot-api-key": "moonshot",
14
- "kimi-code-api-key": "kimi-code",
15
+ "moonshot-api-key-cn": "moonshot",
16
+ "kimi-code-api-key": "kimi-coding",
15
17
  "gemini-api-key": "google",
16
18
  "google-antigravity": "google-antigravity",
17
19
  "google-gemini-cli": "google-gemini-cli",
18
20
  "zai-api-key": "zai",
21
+ "xiaomi-api-key": "xiaomi",
19
22
  "synthetic-api-key": "synthetic",
20
23
  "venice-api-key": "venice",
24
+ "together-api-key": "together",
21
25
  "github-copilot": "github-copilot",
22
26
  "copilot-proxy": "copilot-proxy",
23
27
  "minimax-cloud": "minimax",
@@ -25,7 +29,9 @@ const PREFERRED_PROVIDER_BY_AUTH_CHOICE = {
25
29
  "minimax-api-lightning": "minimax",
26
30
  minimax: "lmstudio",
27
31
  "opencode-zen": "opencode",
32
+ "xai-api-key": "xai",
28
33
  "qwen-portal": "qwen-portal",
34
+ "qianfan-api-key": "qianfan",
29
35
  };
30
36
  export function resolvePreferredProviderForAuthChoice(choice) {
31
37
  return PREFERRED_PROVIDER_BY_AUTH_CHOICE[choice];
@@ -109,7 +109,7 @@ async function promptWebToolsConfig(nextConfig, runtime) {
109
109
  export async function runConfigureWizard(opts, runtime = defaultRuntime) {
110
110
  try {
111
111
  printWizardHeader(runtime);
112
- intro(opts.command === "update" ? "Moltbot update wizard" : "Moltbot configure");
112
+ intro(opts.command === "update" ? "Poolbot update wizard" : "Poolbot configure");
113
113
  const prompter = createClackPrompter();
114
114
  const snapshot = await readConfigFileSnapshot();
115
115
  const baseConfig = snapshot.valid ? snapshot.config : {};
@@ -39,7 +39,7 @@ export async function dashboardCommand(runtime = defaultRuntime, options = {}) {
39
39
  hint = "Browser launch disabled (--no-open). Use the URL above.";
40
40
  }
41
41
  if (opened) {
42
- runtime.log("Opened in your browser. Keep that tab to control Moltbot.");
42
+ runtime.log("Opened in your browser. Keep that tab to control Poolbot.");
43
43
  }
44
44
  else if (hint) {
45
45
  runtime.log(hint);
@@ -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() {
@@ -1,11 +1,12 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { formatCliCommand } from "../cli/command-format.js";
1
4
  import { PoolBotSchema, CONFIG_PATH, migrateLegacyConfig, readConfigFileSnapshot, } from "../config/config.js";
2
5
  import { applyPluginAutoEnable } from "../config/plugin-auto-enable.js";
3
- import { formatCliCommand } from "../cli/command-format.js";
4
6
  import { note } from "../terminal/note.js";
7
+ import { isRecord, resolveHomeDir } from "../utils.js";
5
8
  import { normalizeLegacyConfigValues } from "./doctor-legacy-config.js";
6
- function isRecord(value) {
7
- return Boolean(value && typeof value === "object" && !Array.isArray(value));
8
- }
9
+ import { autoMigrateLegacyStateDir } from "./doctor-state-migrations.js";
9
10
  function normalizeIssuePath(path) {
10
11
  return path.filter((part) => typeof part !== "symbol");
11
12
  }
@@ -96,9 +97,64 @@ function noteOpencodeProviderOverrides(cfg) {
96
97
  lines.push("- Remove these entries to restore per-model API routing + costs (then re-run onboarding if needed).");
97
98
  note(lines.join("\n"), "OpenCode Zen");
98
99
  }
100
+ async function maybeMigrateLegacyConfig() {
101
+ const changes = [];
102
+ const home = resolveHomeDir();
103
+ if (!home) {
104
+ return changes;
105
+ }
106
+ const targetDir = path.join(home, ".poolbot");
107
+ const targetPath = path.join(targetDir, "poolbot.json");
108
+ try {
109
+ await fs.access(targetPath);
110
+ return changes;
111
+ }
112
+ catch {
113
+ // missing config
114
+ }
115
+ const legacyCandidates = [
116
+ path.join(home, ".clawdbot", "clawdbot.json"),
117
+ path.join(home, ".moltbot", "moltbot.json"),
118
+ path.join(home, ".moldbot", "moldbot.json"),
119
+ ];
120
+ let legacyPath = null;
121
+ for (const candidate of legacyCandidates) {
122
+ try {
123
+ await fs.access(candidate);
124
+ legacyPath = candidate;
125
+ break;
126
+ }
127
+ catch {
128
+ // continue
129
+ }
130
+ }
131
+ if (!legacyPath) {
132
+ return changes;
133
+ }
134
+ await fs.mkdir(targetDir, { recursive: true });
135
+ try {
136
+ await fs.copyFile(legacyPath, targetPath, fs.constants.COPYFILE_EXCL);
137
+ changes.push(`Migrated legacy config: ${legacyPath} -> ${targetPath}`);
138
+ }
139
+ catch {
140
+ // If it already exists, skip silently.
141
+ }
142
+ return changes;
143
+ }
99
144
  export async function loadAndMaybeMigrateDoctorConfig(params) {
100
145
  const shouldRepair = params.options.repair === true || params.options.yes === true;
101
- const snapshot = await readConfigFileSnapshot();
146
+ const stateDirResult = await autoMigrateLegacyStateDir({ env: process.env });
147
+ if (stateDirResult.changes.length > 0) {
148
+ note(stateDirResult.changes.map((entry) => `- ${entry}`).join("\n"), "Doctor changes");
149
+ }
150
+ if (stateDirResult.warnings.length > 0) {
151
+ note(stateDirResult.warnings.map((entry) => `- ${entry}`).join("\n"), "Doctor warnings");
152
+ }
153
+ const legacyConfigChanges = await maybeMigrateLegacyConfig();
154
+ if (legacyConfigChanges.length > 0) {
155
+ note(legacyConfigChanges.map((entry) => `- ${entry}`).join("\n"), "Doctor changes");
156
+ }
157
+ let snapshot = await readConfigFileSnapshot();
102
158
  const baseCfg = snapshot.config ?? {};
103
159
  let cfg = baseCfg;
104
160
  let candidate = structuredClone(baseCfg);