@poolzin/pool-bot 2026.2.25 → 2026.2.26

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 (506) hide show
  1. package/dist/acp/event-mapper.js +87 -22
  2. package/dist/acp/meta.js +12 -6
  3. package/dist/agents/agent-paths.js +8 -9
  4. package/dist/agents/agent-scope.js +7 -5
  5. package/dist/agents/auth-profiles/oauth.js +148 -64
  6. package/dist/agents/auth-profiles/session-override.js +13 -7
  7. package/dist/agents/bash-tools.exec-host-gateway.js +14 -4
  8. package/dist/agents/bash-tools.exec-runtime.js +2 -25
  9. package/dist/agents/bedrock-discovery.js +3 -1
  10. package/dist/agents/byteplus-models.js +97 -0
  11. package/dist/agents/chutes-oauth.js +1 -0
  12. package/dist/agents/cli-runner/helpers.js +4 -0
  13. package/dist/agents/compaction.js +41 -14
  14. package/dist/agents/doubao-models.js +121 -0
  15. package/dist/agents/failover-error.js +2 -0
  16. package/dist/agents/huggingface-models.js +5 -3
  17. package/dist/agents/live-model-filter.js +5 -0
  18. package/dist/agents/minimax-vlm.js +10 -8
  19. package/dist/agents/model-auth.js +6 -0
  20. package/dist/agents/model-catalog.js +3 -1
  21. package/dist/agents/model-selection.js +7 -1
  22. package/dist/agents/models-config.providers.js +93 -11
  23. package/dist/agents/ollama-stream.js +117 -4
  24. package/dist/agents/opencode-zen-models.js +22 -11
  25. package/dist/agents/pi-embedded-helpers/errors.js +55 -33
  26. package/dist/agents/pi-embedded-helpers/messaging-dedupe.js +10 -5
  27. package/dist/agents/pi-embedded-helpers/thinking.js +10 -5
  28. package/dist/agents/pi-embedded-helpers.js +1 -1
  29. package/dist/agents/pi-embedded-runner/compact.js +29 -7
  30. package/dist/agents/pi-embedded-runner/extensions.js +28 -26
  31. package/dist/agents/pi-embedded-runner/google.js +20 -8
  32. package/dist/agents/pi-embedded-runner/run/attempt.js +95 -36
  33. package/dist/agents/pi-embedded-runner/run.js +71 -12
  34. package/dist/agents/pi-embedded-runner/run.overflow-compaction.mocks.shared.js +11 -2
  35. package/dist/agents/pi-embedded-runner/session-manager-cache.js +11 -7
  36. package/dist/agents/pi-embedded-runner/system-prompt.js +2 -0
  37. package/dist/agents/pi-embedded-runner/thinking.js +42 -0
  38. package/dist/agents/pi-embedded-runner/tool-name-allowlist.js +19 -0
  39. package/dist/agents/pi-embedded-runner/utils.js +7 -10
  40. package/dist/agents/pi-embedded-subscribe.handlers.lifecycle.js +45 -56
  41. package/dist/agents/pi-embedded-subscribe.handlers.tools.js +2 -2
  42. package/dist/agents/pi-embedded-subscribe.js +9 -4
  43. package/dist/agents/pi-embedded-subscribe.tools.js +68 -14
  44. package/dist/agents/pi-embedded-utils.js +3 -0
  45. package/dist/agents/pi-extensions/compaction-safeguard-runtime.js +4 -20
  46. package/dist/agents/pi-extensions/compaction-safeguard.js +75 -33
  47. package/dist/agents/pi-settings.js +40 -0
  48. package/dist/agents/pi-tools.policy.js +2 -1
  49. package/dist/agents/provider/config-loader.js +1 -1
  50. package/dist/agents/sandbox/browser.js +170 -33
  51. package/dist/agents/sandbox/config-hash.js +14 -27
  52. package/dist/agents/sandbox/config.js +21 -2
  53. package/dist/agents/sandbox/constants.js +2 -0
  54. package/dist/agents/sandbox/docker.js +16 -2
  55. package/dist/agents/sandbox/novnc-auth.js +62 -0
  56. package/dist/agents/sandbox/sanitize-env-vars.js +1 -1
  57. package/dist/agents/sandbox/shared.js +10 -6
  58. package/dist/agents/sandbox-paths.js +24 -11
  59. package/dist/agents/schema/clean-for-gemini.js +132 -85
  60. package/dist/agents/session-slug.js +10 -5
  61. package/dist/agents/session-tool-result-guard-wrapper.js +1 -0
  62. package/dist/agents/session-tool-result-guard.js +3 -1
  63. package/dist/agents/session-transcript-repair.js +40 -6
  64. package/dist/agents/skills/bundled-dir.js +19 -5
  65. package/dist/agents/skills/env-overrides.js +124 -43
  66. package/dist/agents/skills/frontmatter.js +6 -6
  67. package/dist/agents/skills/plugin-skills.js +14 -7
  68. package/dist/agents/skills/workspace.js +1 -0
  69. package/dist/agents/subagent-announce.js +251 -49
  70. package/dist/agents/subagent-lifecycle-events.js +19 -0
  71. package/dist/agents/subagent-registry-cleanup.js +31 -0
  72. package/dist/agents/subagent-registry-completion.js +68 -0
  73. package/dist/agents/subagent-registry-queries.js +117 -0
  74. package/dist/agents/subagent-registry-state.js +46 -0
  75. package/dist/agents/subagent-registry.js +252 -221
  76. package/dist/agents/subagent-registry.store.js +1 -0
  77. package/dist/agents/subagent-registry.types.js +1 -0
  78. package/dist/agents/subagent-spawn.js +195 -7
  79. package/dist/agents/system-prompt.js +22 -6
  80. package/dist/agents/test-helpers/fast-coding-tools.js +1 -18
  81. package/dist/agents/test-helpers/fast-core-tools.js +1 -17
  82. package/dist/agents/timeout.js +18 -6
  83. package/dist/agents/tool-call-id.js +1 -1
  84. package/dist/agents/tool-display-common.js +162 -29
  85. package/dist/agents/tool-images.js +82 -9
  86. package/dist/agents/tool-policy.js +51 -26
  87. package/dist/agents/tools/browser-tool.js +2 -2
  88. package/dist/agents/tools/canvas-tool.js +27 -1
  89. package/dist/agents/tools/common.js +45 -0
  90. package/dist/agents/tools/discord-actions-guild.js +4 -1
  91. package/dist/agents/tools/gateway-tool.js +3 -1
  92. package/dist/agents/tools/nodes-utils.js +1 -10
  93. package/dist/agents/tools/sessions-send-helpers.js +12 -6
  94. package/dist/agents/tools/sessions-spawn-tool.js +8 -2
  95. package/dist/agents/tools/subagents-tool.js +2 -1
  96. package/dist/agents/tools/whatsapp-actions.js +10 -2
  97. package/dist/agents/tools/whatsapp-target-auth.js +18 -0
  98. package/dist/agents/transcript-policy.js +22 -8
  99. package/dist/agents/venice-models.js +11 -3
  100. package/dist/auto-reply/commands-registry.data.js +51 -0
  101. package/dist/auto-reply/commands-registry.js +4 -3
  102. package/dist/auto-reply/group-activation.js +10 -5
  103. package/dist/auto-reply/inbound-debounce.js +10 -5
  104. package/dist/auto-reply/reply/abort.js +1 -1
  105. package/dist/auto-reply/reply/agent-runner-execution.js +4 -1
  106. package/dist/auto-reply/reply/bash-command.js +41 -39
  107. package/dist/auto-reply/reply/command-gates.js +25 -0
  108. package/dist/auto-reply/reply/commands-allowlist.js +111 -72
  109. package/dist/auto-reply/reply/commands-bash.js +6 -5
  110. package/dist/auto-reply/reply/commands-config.js +30 -28
  111. package/dist/auto-reply/reply/commands-core.js +2 -1
  112. package/dist/auto-reply/reply/commands-info.js +1 -0
  113. package/dist/auto-reply/reply/commands-models.js +65 -14
  114. package/dist/auto-reply/reply/commands-session.js +237 -82
  115. package/dist/auto-reply/reply/commands-setunset.js +45 -0
  116. package/dist/auto-reply/reply/commands-subagents/action-agents.js +44 -0
  117. package/dist/auto-reply/reply/commands-subagents/action-focus.js +64 -0
  118. package/dist/auto-reply/reply/commands-subagents/action-help.js +4 -0
  119. package/dist/auto-reply/reply/commands-subagents/action-info.js +45 -0
  120. package/dist/auto-reply/reply/commands-subagents/action-kill.js +60 -0
  121. package/dist/auto-reply/reply/commands-subagents/action-list.js +44 -0
  122. package/dist/auto-reply/reply/commands-subagents/action-log.js +29 -0
  123. package/dist/auto-reply/reply/commands-subagents/action-send.js +119 -0
  124. package/dist/auto-reply/reply/commands-subagents/action-spawn.js +52 -0
  125. package/dist/auto-reply/reply/commands-subagents/action-unfocus.js +30 -0
  126. package/dist/auto-reply/reply/commands-subagents/shared.js +303 -0
  127. package/dist/auto-reply/reply/commands-subagents.js +51 -587
  128. package/dist/auto-reply/reply/commands-tts.js +10 -5
  129. package/dist/auto-reply/reply/config-value.js +10 -5
  130. package/dist/auto-reply/reply/directive-handling.model-picker.js +12 -6
  131. package/dist/auto-reply/reply/directive-handling.persist.js +9 -21
  132. package/dist/auto-reply/reply/directive-handling.shared.js +24 -4
  133. package/dist/auto-reply/reply/followup-runner.js +1 -0
  134. package/dist/auto-reply/reply/get-reply-directives-utils.js +23 -14
  135. package/dist/auto-reply/reply/get-reply-directives.js +17 -28
  136. package/dist/auto-reply/reply/get-reply-inline-actions.js +1 -0
  137. package/dist/auto-reply/reply/get-reply.js +71 -12
  138. package/dist/auto-reply/reply/model-selection.js +80 -39
  139. package/dist/auto-reply/reply/queue/enqueue.js +10 -5
  140. package/dist/auto-reply/reply/queue/state.js +13 -12
  141. package/dist/auto-reply/reply/reply-payloads.js +67 -36
  142. package/dist/auto-reply/reply/reply-reference.js +9 -8
  143. package/dist/auto-reply/reply/route-reply.js +15 -8
  144. package/dist/auto-reply/reply/session-reset-prompt.js +1 -1
  145. package/dist/auto-reply/reply/session.js +22 -6
  146. package/dist/auto-reply/reply/strip-inbound-meta.js +147 -0
  147. package/dist/auto-reply/reply/subagents-utils.js +56 -30
  148. package/dist/auto-reply/reply/typing.js +46 -21
  149. package/dist/auto-reply/send-policy.js +14 -7
  150. package/dist/auto-reply/status.js +140 -16
  151. package/dist/auto-reply/templating.js +10 -5
  152. package/dist/auto-reply/thinking.js +7 -16
  153. package/dist/auto-reply/tokens.js +21 -5
  154. package/dist/browser/bridge-server.js +36 -20
  155. package/dist/browser/cdp.helpers.js +7 -14
  156. package/dist/browser/cdp.js +35 -15
  157. package/dist/browser/chrome.profile-decoration.js +7 -4
  158. package/dist/browser/config.js +4 -0
  159. package/dist/browser/extension-relay-auth.js +55 -0
  160. package/dist/browser/extension-relay.js +74 -29
  161. package/dist/browser/navigation-guard.js +9 -1
  162. package/dist/browser/paths.js +77 -0
  163. package/dist/browser/profiles.js +13 -8
  164. package/dist/browser/pw-ai-module.js +10 -5
  165. package/dist/browser/pw-session.js +76 -39
  166. package/dist/browser/pw-tools-core.interactions.js +14 -7
  167. package/dist/browser/pw-tools-core.state.js +12 -6
  168. package/dist/browser/routes/agent.act.js +2 -2
  169. package/dist/browser/server-context.js +7 -0
  170. package/dist/build-info.json +3 -3
  171. package/dist/channels/allow-from.js +2 -1
  172. package/dist/channels/allowlists/resolve-utils.js +43 -19
  173. package/dist/channels/channel-config.js +14 -7
  174. package/dist/channels/draft-stream-loop.js +7 -0
  175. package/dist/channels/model-overrides.js +82 -0
  176. package/dist/channels/plugins/normalize/imessage.js +14 -7
  177. package/dist/channels/plugins/normalize/slack.js +10 -5
  178. package/dist/channels/plugins/normalize/telegram.js +14 -7
  179. package/dist/channels/plugins/outbound/discord.js +80 -8
  180. package/dist/channels/plugins/outbound/signal.js +11 -11
  181. package/dist/channels/plugins/setup-helpers.js +10 -5
  182. package/dist/channels/sender-label.js +14 -7
  183. package/dist/channels/session.js +4 -2
  184. package/dist/channels/status-reactions.js +297 -0
  185. package/dist/cli/banner.js +1 -1
  186. package/dist/cli/browser-cli-actions-input/register.files-downloads.js +65 -56
  187. package/dist/cli/cli-name.js +11 -11
  188. package/dist/cli/cli-utils.js +13 -3
  189. package/dist/cli/command-format.js +1 -1
  190. package/dist/cli/config-cli.js +1 -1
  191. package/dist/cli/daemon-cli/lifecycle-core.js +31 -19
  192. package/dist/cli/daemon-cli/lifecycle.js +64 -2
  193. package/dist/cli/daemon-cli/restart-health.js +126 -0
  194. package/dist/cli/daemon-cli/status.gather.js +9 -13
  195. package/dist/cli/daemon-cli/status.print.js +2 -10
  196. package/dist/cli/deps.js +27 -22
  197. package/dist/cli/gateway-cli/run-loop.js +23 -5
  198. package/dist/cli/node-cli/register.js +14 -5
  199. package/dist/cli/nodes-media-utils.js +7 -2
  200. package/dist/cli/outbound-send-deps.js +2 -9
  201. package/dist/cli/outbound-send-mapping.js +11 -0
  202. package/dist/cli/pairing-cli.js +40 -14
  203. package/dist/cli/plugins-cli.js +34 -41
  204. package/dist/cli/ports.js +11 -10
  205. package/dist/cli/program/command-registry.js +2 -11
  206. package/dist/cli/program/command-tree.js +16 -0
  207. package/dist/cli/program/preaction.js +13 -9
  208. package/dist/cli/program/register.configure.js +3 -18
  209. package/dist/cli/program/register.maintenance.js +2 -2
  210. package/dist/cli/program/register.onboard.js +2 -0
  211. package/dist/cli/program/register.status-health-sessions.js +16 -17
  212. package/dist/cli/program/register.subclis.js +93 -52
  213. package/dist/cli/route.js +11 -7
  214. package/dist/cli/system-cli.js +36 -46
  215. package/dist/cli/update-cli/shared.js +22 -9
  216. package/dist/cli/update-cli/update-command.js +89 -14
  217. package/dist/cli/update-cli/wizard.js +6 -12
  218. package/dist/commands/agent/run-context.js +18 -5
  219. package/dist/commands/agent/session-store.js +17 -4
  220. package/dist/commands/agent.js +22 -2
  221. package/dist/commands/agents.bindings.js +14 -7
  222. package/dist/commands/agents.commands.add.js +13 -9
  223. package/dist/commands/agents.commands.identity.js +12 -6
  224. package/dist/commands/agents.commands.list.js +11 -6
  225. package/dist/commands/agents.config.js +8 -10
  226. package/dist/commands/agents.providers.js +12 -6
  227. package/dist/commands/auth-choice-options.js +103 -75
  228. package/dist/commands/auth-choice.apply.byteplus.js +55 -0
  229. package/dist/commands/auth-choice.apply.js +4 -0
  230. package/dist/commands/auth-choice.apply.minimax.js +61 -13
  231. package/dist/commands/auth-choice.apply.openai.js +3 -1
  232. package/dist/commands/auth-choice.apply.volcengine.js +55 -0
  233. package/dist/commands/auth-choice.preferred-provider.js +2 -0
  234. package/dist/commands/channels/remove.js +13 -6
  235. package/dist/commands/channels/shared.js +4 -14
  236. package/dist/commands/configure.commands.js +14 -0
  237. package/dist/commands/configure.gateway.js +2 -4
  238. package/dist/commands/configure.js +1 -1
  239. package/dist/commands/configure.shared.js +11 -0
  240. package/dist/commands/daemon-install-helpers.js +2 -2
  241. package/dist/commands/dashboard.js +12 -10
  242. package/dist/commands/docs.js +14 -8
  243. package/dist/commands/doctor-config-flow.js +11 -9
  244. package/dist/commands/doctor-legacy-config.js +281 -0
  245. package/dist/commands/doctor-state-integrity.js +99 -23
  246. package/dist/commands/doctor-update.js +12 -9
  247. package/dist/commands/models/list.list-command.js +7 -5
  248. package/dist/commands/models/set-image.js +2 -21
  249. package/dist/commands/node-daemon-install-helpers.js +10 -8
  250. package/dist/commands/onboard-auth.config-minimax.js +54 -80
  251. package/dist/commands/onboard-auth.config-opencode.js +2 -18
  252. package/dist/commands/onboard-auth.credentials.js +90 -13
  253. package/dist/commands/onboard-auth.js +1 -1
  254. package/dist/commands/onboard-auth.models.js +6 -5
  255. package/dist/commands/onboard-hooks.js +1 -1
  256. package/dist/commands/onboard-non-interactive/api-keys.js +14 -7
  257. package/dist/commands/onboard-non-interactive/local/auth-choice.js +64 -49
  258. package/dist/commands/onboard-provider-auth-flags.js +14 -0
  259. package/dist/commands/onboard-remote.js +14 -7
  260. package/dist/commands/onboard.js +11 -13
  261. package/dist/commands/sandbox-display.js +6 -5
  262. package/dist/commands/status-all/diagnosis.js +14 -10
  263. package/dist/commands/status-all/format.js +1 -0
  264. package/dist/commands/status.gateway-probe.js +1 -16
  265. package/dist/commands/systemd-linger.js +12 -6
  266. package/dist/config/agent-limits.js +2 -0
  267. package/dist/config/commands.js +30 -16
  268. package/dist/config/config-paths.js +9 -11
  269. package/dist/config/defaults.js +22 -2
  270. package/dist/config/discord-preview-streaming.js +104 -0
  271. package/dist/config/env-vars.js +37 -8
  272. package/dist/config/includes.js +4 -0
  273. package/dist/config/io.js +97 -12
  274. package/dist/config/legacy.migrations.part-1.js +189 -78
  275. package/dist/config/legacy.shared.js +3 -1
  276. package/dist/config/merge-patch.js +4 -0
  277. package/dist/config/prototype-keys.js +4 -0
  278. package/dist/config/schema.help.js +44 -7
  279. package/dist/config/schema.labels.js +38 -6
  280. package/dist/config/sessions/delivery-info.js +10 -3
  281. package/dist/config/sessions/main-session.js +10 -5
  282. package/dist/config/sessions/session-file.js +33 -0
  283. package/dist/config/sessions/session-key.js +10 -5
  284. package/dist/config/sessions/store.js +1 -1
  285. package/dist/config/sessions.js +1 -0
  286. package/dist/config/zod-schema.agent-runtime.js +11 -0
  287. package/dist/config/zod-schema.js +148 -13
  288. package/dist/config/zod-schema.providers-core.js +78 -4
  289. package/dist/config/zod-schema.providers.js +6 -1
  290. package/dist/config/zod-schema.session.js +41 -2
  291. package/dist/cron/run-log.js +3 -0
  292. package/dist/cron/schedule.js +21 -10
  293. package/dist/cron/service/ops.js +35 -21
  294. package/dist/cron/service/timer.js +116 -16
  295. package/dist/cron/stagger.js +3 -1
  296. package/dist/discord/api.js +12 -6
  297. package/dist/discord/draft-chunking.js +22 -0
  298. package/dist/discord/draft-stream.js +124 -0
  299. package/dist/discord/monitor/agent-components.js +1 -1
  300. package/dist/discord/monitor/commands.js +5 -0
  301. package/dist/discord/monitor/gateway-plugin.js +2 -1
  302. package/dist/discord/monitor/listeners.js +37 -27
  303. package/dist/discord/monitor/message-handler.js +4 -1
  304. package/dist/discord/monitor/message-handler.preflight.js +65 -8
  305. package/dist/discord/monitor/message-handler.process.js +246 -217
  306. package/dist/discord/monitor/message-utils.js +143 -6
  307. package/dist/discord/monitor/model-picker-preferences.js +143 -0
  308. package/dist/discord/monitor/model-picker.js +651 -0
  309. package/dist/discord/monitor/native-command.js +573 -16
  310. package/dist/discord/monitor/provider.allowlist.js +223 -0
  311. package/dist/discord/monitor/provider.js +275 -347
  312. package/dist/discord/monitor/provider.lifecycle.js +100 -0
  313. package/dist/discord/monitor/reply-delivery.js +123 -16
  314. package/dist/discord/monitor/thread-bindings.discord-api.js +215 -0
  315. package/dist/discord/monitor/thread-bindings.js +4 -0
  316. package/dist/discord/monitor/thread-bindings.lifecycle.js +177 -0
  317. package/dist/discord/monitor/thread-bindings.manager.js +423 -0
  318. package/dist/discord/monitor/thread-bindings.messages.js +55 -0
  319. package/dist/discord/monitor/thread-bindings.state.js +358 -0
  320. package/dist/discord/monitor/thread-bindings.types.js +6 -0
  321. package/dist/discord/resolve-users.js +33 -21
  322. package/dist/discord/send.channels.js +15 -0
  323. package/dist/discord/send.js +3 -2
  324. package/dist/discord/send.outbound.js +82 -26
  325. package/dist/discord/send.permissions.js +83 -30
  326. package/dist/discord/send.reactions.js +8 -4
  327. package/dist/discord/token.js +10 -5
  328. package/dist/discord/voice/command.js +263 -0
  329. package/dist/discord/voice/manager.js +531 -0
  330. package/dist/gateway/auth.js +34 -10
  331. package/dist/gateway/call.js +4 -16
  332. package/dist/gateway/client.js +28 -4
  333. package/dist/gateway/config-reload.js +3 -4
  334. package/dist/gateway/control-ui.js +219 -96
  335. package/dist/gateway/hooks-mapping.js +88 -38
  336. package/dist/gateway/http-auth-helpers.js +3 -2
  337. package/dist/gateway/http-endpoint-helpers.js +1 -0
  338. package/dist/gateway/net.js +54 -12
  339. package/dist/gateway/node-invoke-system-run-approval.js +14 -35
  340. package/dist/gateway/node-registry.js +10 -5
  341. package/dist/gateway/openai-http.js +1 -0
  342. package/dist/gateway/openresponses-http.js +1 -0
  343. package/dist/gateway/origin-check.js +1 -18
  344. package/dist/gateway/protocol/index.js +4 -3
  345. package/dist/gateway/protocol/schema/cron.js +1 -0
  346. package/dist/gateway/protocol/schema/devices.js +1 -0
  347. package/dist/gateway/protocol/schema/protocol-schemas.js +2 -1
  348. package/dist/gateway/protocol/schema/sessions.js +6 -0
  349. package/dist/gateway/role-policy.js +17 -0
  350. package/dist/gateway/server/ws-connection/connect-policy.js +37 -0
  351. package/dist/gateway/server/ws-connection/message-handler.js +175 -148
  352. package/dist/gateway/server-chat.js +83 -25
  353. package/dist/gateway/server-constants.js +10 -9
  354. package/dist/gateway/server-cron.js +1 -0
  355. package/dist/gateway/server-http.js +16 -7
  356. package/dist/gateway/server-maintenance.js +20 -5
  357. package/dist/gateway/server-methods/chat.js +10 -6
  358. package/dist/gateway/server-methods/config.js +12 -14
  359. package/dist/gateway/server-methods/devices.js +17 -3
  360. package/dist/gateway/server-methods/models.js +11 -1
  361. package/dist/gateway/server-methods/sessions.js +64 -8
  362. package/dist/gateway/server-methods/usage.js +162 -75
  363. package/dist/gateway/server-node-events.js +29 -0
  364. package/dist/gateway/server-runtime-config.js +34 -13
  365. package/dist/gateway/server-startup-memory.js +17 -11
  366. package/dist/gateway/session-utils.fs.js +32 -34
  367. package/dist/gateway/sessions-resolve.js +17 -5
  368. package/dist/gateway/test-helpers.openai-mock.js +14 -7
  369. package/dist/gateway/tools-invoke-http.js +21 -10
  370. package/dist/hooks/bundled/bootstrap-extra-files/handler.js +3 -1
  371. package/dist/hooks/bundled/command-logger/handler.js +7 -2
  372. package/dist/hooks/bundled/session-memory/handler.js +6 -5
  373. package/dist/hooks/frontmatter.js +6 -6
  374. package/dist/hooks/gmail-watcher.js +11 -6
  375. package/dist/hooks/internal-hooks.js +11 -1
  376. package/dist/hooks/llm-slug-generator.js +4 -1
  377. package/dist/hooks/workspace.js +47 -17
  378. package/dist/imessage/accounts.js +9 -20
  379. package/dist/imessage/monitor/inbound-processing.js +2 -1
  380. package/dist/infra/archive.js +174 -73
  381. package/dist/infra/control-ui-assets.js +14 -6
  382. package/dist/infra/device-pairing.js +108 -29
  383. package/dist/infra/env.js +10 -5
  384. package/dist/infra/exec-approvals-allowlist.js +122 -0
  385. package/dist/infra/exec-approvals-analysis.js +34 -3
  386. package/dist/infra/exec-approvals.js +5 -17
  387. package/dist/infra/exec-safe-bin-policy.js +53 -45
  388. package/dist/infra/fs-safe.js +71 -39
  389. package/dist/infra/gateway-lock.js +6 -2
  390. package/dist/infra/heartbeat-wake.js +6 -12
  391. package/dist/infra/host-env-security-policy.json +19 -0
  392. package/dist/infra/host-env-security.js +66 -0
  393. package/dist/infra/net/ssrf.js +131 -38
  394. package/dist/infra/outbound/bound-delivery-router.js +88 -0
  395. package/dist/infra/outbound/channel-selection.js +12 -6
  396. package/dist/infra/outbound/envelope.js +1 -1
  397. package/dist/infra/outbound/format.js +12 -6
  398. package/dist/infra/outbound/payloads.js +14 -7
  399. package/dist/infra/outbound/session-binding-service.js +123 -0
  400. package/dist/infra/path-guards.js +25 -0
  401. package/dist/infra/provider-usage.fetch.codex.js +7 -15
  402. package/dist/infra/provider-usage.fetch.gemini.js +14 -11
  403. package/dist/infra/provider-usage.fetch.shared.js +30 -1
  404. package/dist/infra/provider-usage.fetch.zai.js +10 -9
  405. package/dist/infra/retry-policy.js +4 -2
  406. package/dist/infra/retry.js +9 -5
  407. package/dist/infra/session-cost-usage.js +107 -59
  408. package/dist/infra/session-maintenance-warning.js +3 -1
  409. package/dist/infra/shell-env.js +98 -34
  410. package/dist/infra/ssh-config.js +12 -6
  411. package/dist/infra/system-run-command.js +49 -4
  412. package/dist/infra/update-channels.js +10 -5
  413. package/dist/line/accounts.js +5 -7
  414. package/dist/line/bot-access.js +8 -20
  415. package/dist/line/bot-handlers.js +3 -1
  416. package/dist/link-understanding/detect.js +15 -7
  417. package/dist/media/constants.js +15 -6
  418. package/dist/media/image-ops.js +7 -0
  419. package/dist/media/local-roots.js +3 -2
  420. package/dist/media-understanding/apply.js +4 -1
  421. package/dist/media-understanding/concurrency.js +8 -20
  422. package/dist/memory/backend-config.js +45 -6
  423. package/dist/memory/embeddings.js +10 -4
  424. package/dist/memory/fs-utils.js +23 -0
  425. package/dist/memory/manager-search.js +12 -6
  426. package/dist/memory/manager-sync-ops.js +12 -2
  427. package/dist/memory/qmd-manager.js +466 -53
  428. package/dist/memory/query-expansion.js +167 -3
  429. package/dist/memory/status-format.js +10 -5
  430. package/dist/memory/sync-memory-files.js +1 -1
  431. package/dist/node-host/invoke-system-run.js +281 -0
  432. package/dist/node-host/invoke.js +55 -337
  433. package/dist/pairing/pairing-store.js +22 -0
  434. package/dist/plugin-sdk/allow-from.js +1 -1
  435. package/dist/plugin-sdk/command-auth.js +3 -1
  436. package/dist/plugin-sdk/index.js +6 -3
  437. package/dist/plugin-sdk/webhook-targets.js +32 -0
  438. package/dist/plugins/bundled-dir.js +9 -6
  439. package/dist/plugins/hooks.js +50 -0
  440. package/dist/plugins/install.js +28 -16
  441. package/dist/plugins/runtime.js +3 -17
  442. package/dist/plugins/update.js +78 -12
  443. package/dist/process/spawn-utils.js +14 -7
  444. package/dist/providers/github-copilot-token.js +11 -6
  445. package/dist/providers/qwen-portal-oauth.js +14 -6
  446. package/dist/routing/account-id.js +30 -0
  447. package/dist/routing/resolve-route.js +3 -7
  448. package/dist/routing/session-key.js +2 -16
  449. package/dist/security/audit-channel.js +93 -2
  450. package/dist/security/audit-extra.async.js +159 -5
  451. package/dist/security/audit-extra.js +1 -1
  452. package/dist/security/audit-extra.sync.js +85 -6
  453. package/dist/security/audit.js +40 -4
  454. package/dist/security/dm-policy-shared.js +44 -0
  455. package/dist/security/external-content.js +26 -6
  456. package/dist/shared/entry-status.js +6 -0
  457. package/dist/shared/frontmatter.js +5 -5
  458. package/dist/shared/node-match.js +11 -4
  459. package/dist/shared/operator-scope-compat.js +8 -3
  460. package/dist/signal/accounts.js +7 -20
  461. package/dist/signal/monitor/event-handler.js +3 -1
  462. package/dist/slack/accounts.js +6 -19
  463. package/dist/slack/actions.js +11 -3
  464. package/dist/slack/monitor/auth.js +1 -1
  465. package/dist/slack/monitor/message-handler/dispatch.js +50 -29
  466. package/dist/slack/monitor/replies.js +15 -7
  467. package/dist/slack/monitor/slash.js +22 -13
  468. package/dist/slack/resolve-channels.js +10 -5
  469. package/dist/slack/send.js +102 -12
  470. package/dist/slack/stream-mode.js +10 -0
  471. package/dist/slack/streaming.js +4 -2
  472. package/dist/telegram/accounts.js +19 -14
  473. package/dist/telegram/bot/helpers.js +3 -5
  474. package/dist/telegram/bot-access.js +35 -36
  475. package/dist/telegram/bot-handlers.js +120 -148
  476. package/dist/telegram/bot-message-context.js +68 -9
  477. package/dist/telegram/bot-message-dispatch.js +155 -90
  478. package/dist/telegram/bot-native-commands.js +16 -0
  479. package/dist/telegram/draft-stream.js +14 -1
  480. package/dist/telegram/inline-buttons.js +5 -15
  481. package/dist/telegram/monitor.js +11 -7
  482. package/dist/telegram/network-config.js +19 -7
  483. package/dist/telegram/send.js +3 -2
  484. package/dist/telegram/sent-message-cache.js +5 -6
  485. package/dist/telegram/status-reaction-variants.js +208 -0
  486. package/dist/telegram/sticker-cache.js +11 -9
  487. package/dist/terminal/theme.js +12 -12
  488. package/dist/tts/tts.js +80 -567
  489. package/dist/tui/components/chat-log.js +41 -8
  490. package/dist/tui/theme/theme.js +10 -12
  491. package/dist/tui/tui-local-shell.js +16 -6
  492. package/dist/tui/tui.js +58 -6
  493. package/dist/utils/account-id.js +2 -4
  494. package/dist/utils/boolean.js +10 -5
  495. package/dist/utils/directive-tags.js +11 -0
  496. package/dist/utils/queue-helpers.js +67 -12
  497. package/dist/web/auto-reply/deliver-reply.js +8 -4
  498. package/dist/web/auto-reply/mentions.js +10 -5
  499. package/dist/web/auto-reply/monitor/group-members.js +14 -7
  500. package/dist/web/auto-reply/monitor/process-message.js +45 -24
  501. package/dist/web/inbound/access-control.js +5 -2
  502. package/dist/web/login-qr.js +12 -6
  503. package/dist/web/media.js +123 -16
  504. package/extensions/bluebubbles/src/monitor-processing.ts +580 -139
  505. package/extensions/bluebubbles/src/monitor.ts +208 -1950
  506. package/package.json +1 -1
@@ -63,14 +63,16 @@ export async function buildProviderStatusIndex(cfg) {
63
63
  }
64
64
  function resolveDefaultAccountId(cfg, provider) {
65
65
  const plugin = getChannelPlugin(provider);
66
- if (!plugin)
66
+ if (!plugin) {
67
67
  return DEFAULT_ACCOUNT_ID;
68
+ }
68
69
  return resolveChannelDefaultAccountId({ plugin, cfg });
69
70
  }
70
71
  function shouldShowProviderEntry(entry, cfg) {
71
72
  const plugin = getChannelPlugin(entry.provider);
72
- if (!plugin)
73
+ if (!plugin) {
73
74
  return Boolean(entry.configured);
75
+ }
74
76
  if (plugin.meta.showConfigured === false) {
75
77
  const providerConfig = cfg[plugin.id];
76
78
  return Boolean(entry.configured) || Boolean(providerConfig);
@@ -86,13 +88,15 @@ function formatProviderEntry(entry) {
86
88
  return `${label}: ${formatProviderState(entry)}`;
87
89
  }
88
90
  export function summarizeBindings(cfg, bindings) {
89
- if (bindings.length === 0)
91
+ if (bindings.length === 0) {
90
92
  return [];
93
+ }
91
94
  const seen = new Map();
92
95
  for (const binding of bindings) {
93
96
  const channel = normalizeChannelId(binding.match.channel);
94
- if (!channel)
97
+ if (!channel) {
95
98
  continue;
99
+ }
96
100
  const accountId = binding.match.accountId ?? resolveDefaultAccountId(cfg, channel);
97
101
  const key = providerAccountKey(channel, accountId);
98
102
  if (!seen.has(key)) {
@@ -112,12 +116,14 @@ export function listProvidersForAgent(params) {
112
116
  const seen = new Set();
113
117
  for (const binding of params.bindings) {
114
118
  const channel = normalizeChannelId(binding.match.channel);
115
- if (!channel)
119
+ if (!channel) {
116
120
  continue;
121
+ }
117
122
  const accountId = binding.match.accountId ?? resolveDefaultAccountId(params.cfg, channel);
118
123
  const key = providerAccountKey(channel, accountId);
119
- if (seen.has(key))
124
+ if (seen.has(key)) {
120
125
  continue;
126
+ }
121
127
  seen.add(key);
122
128
  const status = params.providerStatus.get(key);
123
129
  if (status) {
@@ -1,3 +1,4 @@
1
+ import { AUTH_CHOICE_LEGACY_ALIASES_FOR_CLI } from "./auth-choice-legacy.js";
1
2
  const AUTH_CHOICE_GROUP_DEFS = [
2
3
  {
3
4
  value: "openai",
@@ -11,6 +12,12 @@ const AUTH_CHOICE_GROUP_DEFS = [
11
12
  hint: "setup-token + API key",
12
13
  choices: ["token", "apiKey"],
13
14
  },
15
+ {
16
+ value: "chutes",
17
+ label: "Chutes",
18
+ hint: "OAuth",
19
+ choices: ["chutes"],
20
+ },
14
21
  {
15
22
  value: "vllm",
16
23
  label: "vLLM",
@@ -21,7 +28,7 @@ const AUTH_CHOICE_GROUP_DEFS = [
21
28
  value: "minimax",
22
29
  label: "MiniMax",
23
30
  hint: "M2.5 (recommended)",
24
- choices: ["minimax-portal", "minimax-api", "minimax-api-lightning"],
31
+ choices: ["minimax-portal", "minimax-api", "minimax-api-key-cn", "minimax-api-lightning"],
25
32
  },
26
33
  {
27
34
  value: "moonshot",
@@ -42,10 +49,16 @@ const AUTH_CHOICE_GROUP_DEFS = [
42
49
  choices: ["xai-api-key"],
43
50
  },
44
51
  {
45
- value: "nvidia",
46
- label: "NVIDIA (Free Tier)",
47
- hint: "API key — 23+ frontier models",
48
- choices: ["nvidia-api-key"],
52
+ value: "volcengine",
53
+ label: "Volcano Engine",
54
+ hint: "API key",
55
+ choices: ["volcengine-api-key"],
56
+ },
57
+ {
58
+ value: "byteplus",
59
+ label: "BytePlus",
60
+ hint: "API key",
61
+ choices: ["byteplus-api-key"],
49
62
  },
50
63
  {
51
64
  value: "openrouter",
@@ -138,144 +151,159 @@ const AUTH_CHOICE_GROUP_DEFS = [
138
151
  choices: ["custom-api-key"],
139
152
  },
140
153
  ];
141
- export function buildAuthChoiceOptions(params) {
142
- void params.store;
143
- const options = [];
144
- options.push({
154
+ const BASE_AUTH_CHOICE_OPTIONS = [
155
+ {
145
156
  value: "token",
146
157
  label: "Anthropic token (paste setup-token)",
147
158
  hint: "run `claude setup-token` elsewhere, then paste the token here",
148
- });
149
- options.push({
159
+ },
160
+ {
150
161
  value: "openai-codex",
151
162
  label: "OpenAI Codex (ChatGPT OAuth)",
152
- });
153
- options.push({ value: "chutes", label: "Chutes (OAuth)" });
154
- options.push({
163
+ },
164
+ { value: "chutes", label: "Chutes (OAuth)" },
165
+ {
155
166
  value: "vllm",
156
167
  label: "vLLM (custom URL + model)",
157
168
  hint: "Local/self-hosted OpenAI-compatible server",
158
- });
159
- options.push({ value: "openai-api-key", label: "OpenAI API key" });
160
- options.push({ value: "xai-api-key", label: "xAI (Grok) API key" });
161
- options.push({
162
- value: "nvidia-api-key",
163
- label: "NVIDIA API key",
164
- hint: "Free tier — Nemotron, DeepSeek, Kimi, Qwen, and more",
165
- });
166
- options.push({
169
+ },
170
+ { value: "openai-api-key", label: "OpenAI API key" },
171
+ { value: "xai-api-key", label: "xAI (Grok) API key" },
172
+ { value: "volcengine-api-key", label: "Volcano Engine API key" },
173
+ { value: "byteplus-api-key", label: "BytePlus API key" },
174
+ {
167
175
  value: "qianfan-api-key",
168
176
  label: "Qianfan API key",
169
- });
170
- options.push({ value: "openrouter-api-key", label: "OpenRouter API key" });
171
- options.push({
177
+ },
178
+ { value: "openrouter-api-key", label: "OpenRouter API key" },
179
+ {
172
180
  value: "litellm-api-key",
173
181
  label: "LiteLLM API key",
174
182
  hint: "Unified gateway for 100+ LLM providers",
175
- });
176
- options.push({
183
+ },
184
+ {
177
185
  value: "ai-gateway-api-key",
178
186
  label: "Vercel AI Gateway API key",
179
- });
180
- options.push({
187
+ },
188
+ {
181
189
  value: "cloudflare-ai-gateway-api-key",
182
190
  label: "Cloudflare AI Gateway",
183
191
  hint: "Account ID + Gateway ID + API key",
184
- });
185
- options.push({
192
+ },
193
+ {
186
194
  value: "moonshot-api-key",
187
195
  label: "Kimi API key (.ai)",
188
- });
189
- options.push({
196
+ },
197
+ {
190
198
  value: "moonshot-api-key-cn",
191
199
  label: "Kimi API key (.cn)",
192
- });
193
- options.push({
200
+ },
201
+ {
194
202
  value: "kimi-code-api-key",
195
203
  label: "Kimi Code API key (subscription)",
196
- });
197
- options.push({ value: "synthetic-api-key", label: "Synthetic API key" });
198
- options.push({
204
+ },
205
+ { value: "synthetic-api-key", label: "Synthetic API key" },
206
+ {
199
207
  value: "venice-api-key",
200
208
  label: "Venice AI API key",
201
209
  hint: "Privacy-focused inference (uncensored models)",
202
- });
203
- options.push({
210
+ },
211
+ {
204
212
  value: "together-api-key",
205
213
  label: "Together AI API key",
206
214
  hint: "Access to Llama, DeepSeek, Qwen, and more open models",
207
- });
208
- options.push({
215
+ },
216
+ {
209
217
  value: "huggingface-api-key",
210
218
  label: "Hugging Face API key (HF token)",
211
219
  hint: "Inference Providers — OpenAI-compatible chat",
212
- });
213
- options.push({
220
+ },
221
+ {
214
222
  value: "github-copilot",
215
223
  label: "GitHub Copilot (GitHub device login)",
216
224
  hint: "Uses GitHub device flow",
217
- });
218
- options.push({ value: "gemini-api-key", label: "Google Gemini API key" });
219
- options.push({
225
+ },
226
+ { value: "gemini-api-key", label: "Google Gemini API key" },
227
+ {
220
228
  value: "google-antigravity",
221
229
  label: "Google Antigravity OAuth",
222
230
  hint: "Uses the bundled Antigravity auth plugin",
223
- });
224
- options.push({
231
+ },
232
+ {
225
233
  value: "google-gemini-cli",
226
234
  label: "Google Gemini CLI OAuth",
227
235
  hint: "Uses the bundled Gemini CLI auth plugin",
228
- });
229
- options.push({ value: "zai-api-key", label: "Z.AI API key" });
230
- options.push({
236
+ },
237
+ { value: "zai-api-key", label: "Z.AI API key" },
238
+ {
231
239
  value: "zai-coding-global",
232
240
  label: "Coding-Plan-Global",
233
241
  hint: "GLM Coding Plan Global (api.z.ai)",
234
- });
235
- options.push({
242
+ },
243
+ {
236
244
  value: "zai-coding-cn",
237
245
  label: "Coding-Plan-CN",
238
246
  hint: "GLM Coding Plan CN (open.bigmodel.cn)",
239
- });
240
- options.push({
247
+ },
248
+ {
241
249
  value: "zai-global",
242
250
  label: "Global",
243
251
  hint: "Z.AI Global (api.z.ai)",
244
- });
245
- options.push({
252
+ },
253
+ {
246
254
  value: "zai-cn",
247
255
  label: "CN",
248
256
  hint: "Z.AI CN (open.bigmodel.cn)",
249
- });
250
- options.push({
257
+ },
258
+ {
251
259
  value: "xiaomi-api-key",
252
260
  label: "Xiaomi API key",
253
- });
254
- options.push({
261
+ },
262
+ {
255
263
  value: "minimax-portal",
256
264
  label: "MiniMax OAuth",
257
265
  hint: "Oauth plugin for MiniMax",
258
- });
259
- options.push({ value: "qwen-portal", label: "Qwen OAuth" });
260
- options.push({
266
+ },
267
+ { value: "qwen-portal", label: "Qwen OAuth" },
268
+ {
261
269
  value: "copilot-proxy",
262
270
  label: "Copilot Proxy (local)",
263
271
  hint: "Local proxy for VS Code Copilot models",
264
- });
265
- options.push({ value: "apiKey", label: "Anthropic API key" });
266
- // Token flow is currently Anthropic-only; use CLI for advanced providers.
267
- options.push({
272
+ },
273
+ { value: "apiKey", label: "Anthropic API key" },
274
+ {
268
275
  value: "opencode-zen",
269
276
  label: "OpenCode Zen (multi-model proxy)",
270
277
  hint: "Claude, GPT, Gemini via opencode.ai/zen",
271
- });
272
- options.push({ value: "minimax-api", label: "MiniMax M2.5" });
273
- options.push({
278
+ },
279
+ { value: "minimax-api", label: "MiniMax M2.5" },
280
+ {
281
+ value: "minimax-api-key-cn",
282
+ label: "MiniMax M2.5 (CN)",
283
+ hint: "China endpoint (api.minimaxi.com)",
284
+ },
285
+ {
274
286
  value: "minimax-api-lightning",
275
287
  label: "MiniMax M2.5 Lightning",
276
288
  hint: "Faster, higher output cost",
277
- });
278
- options.push({ value: "custom-api-key", label: "Custom Provider" });
289
+ },
290
+ { value: "custom-api-key", label: "Custom Provider" },
291
+ ];
292
+ export function formatAuthChoiceChoicesForCli(params) {
293
+ const includeSkip = params?.includeSkip ?? true;
294
+ const includeLegacyAliases = params?.includeLegacyAliases ?? false;
295
+ const values = BASE_AUTH_CHOICE_OPTIONS.map((opt) => opt.value);
296
+ if (includeSkip) {
297
+ values.push("skip");
298
+ }
299
+ if (includeLegacyAliases) {
300
+ values.push(...AUTH_CHOICE_LEGACY_ALIASES_FOR_CLI);
301
+ }
302
+ return values.join("|");
303
+ }
304
+ export function buildAuthChoiceOptions(params) {
305
+ void params.store;
306
+ const options = [...BASE_AUTH_CHOICE_OPTIONS];
279
307
  if (params.includeSkip) {
280
308
  options.push({ value: "skip", label: "Skip for now" });
281
309
  }
@@ -0,0 +1,55 @@
1
+ import { resolveEnvApiKey } from "../agents/model-auth.js";
2
+ import { upsertSharedEnvVar } from "../infra/env-file.js";
3
+ import { formatApiKeyPreview, normalizeApiKeyInput, validateApiKeyInput, } from "./auth-choice.api-key.js";
4
+ import { applyPrimaryModel } from "./model-picker.js";
5
+ /** Default model for BytePlus auth onboarding. */
6
+ export const BYTEPLUS_DEFAULT_MODEL = "byteplus-plan/ark-code-latest";
7
+ export async function applyAuthChoiceBytePlus(params) {
8
+ if (params.authChoice !== "byteplus-api-key") {
9
+ return null;
10
+ }
11
+ const envKey = resolveEnvApiKey("byteplus");
12
+ if (envKey) {
13
+ const useExisting = await params.prompter.confirm({
14
+ message: `Use existing BYTEPLUS_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
15
+ initialValue: true,
16
+ });
17
+ if (useExisting) {
18
+ const result = upsertSharedEnvVar({
19
+ key: "BYTEPLUS_API_KEY",
20
+ value: envKey.apiKey,
21
+ });
22
+ if (!process.env.BYTEPLUS_API_KEY) {
23
+ process.env.BYTEPLUS_API_KEY = envKey.apiKey;
24
+ }
25
+ await params.prompter.note(`Copied BYTEPLUS_API_KEY to ${result.path} for launchd compatibility.`, "BytePlus API key");
26
+ const configWithModel = applyPrimaryModel(params.config, BYTEPLUS_DEFAULT_MODEL);
27
+ return {
28
+ config: configWithModel,
29
+ agentModelOverride: BYTEPLUS_DEFAULT_MODEL,
30
+ };
31
+ }
32
+ }
33
+ let key;
34
+ if (params.opts?.byteplusApiKey) {
35
+ key = params.opts.byteplusApiKey;
36
+ }
37
+ else {
38
+ key = await params.prompter.text({
39
+ message: "Enter BytePlus API key",
40
+ validate: validateApiKeyInput,
41
+ });
42
+ }
43
+ const trimmed = normalizeApiKeyInput(String(key));
44
+ const result = upsertSharedEnvVar({
45
+ key: "BYTEPLUS_API_KEY",
46
+ value: trimmed,
47
+ });
48
+ process.env.BYTEPLUS_API_KEY = trimmed;
49
+ await params.prompter.note(`Saved BYTEPLUS_API_KEY to ${result.path} for launchd compatibility.`, "BytePlus API key");
50
+ const configWithModel = applyPrimaryModel(params.config, BYTEPLUS_DEFAULT_MODEL);
51
+ return {
52
+ config: configWithModel,
53
+ agentModelOverride: BYTEPLUS_DEFAULT_MODEL,
54
+ };
55
+ }
@@ -9,6 +9,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
11
  import { applyAuthChoiceXAI } from "./auth-choice.apply.xai.js";
12
+ import { applyAuthChoiceBytePlus } from "./auth-choice.apply.byteplus.js";
13
+ import { applyAuthChoiceVolcengine } from "./auth-choice.apply.volcengine.js";
12
14
  export async function applyAuthChoice(params) {
13
15
  const handlers = [
14
16
  applyAuthChoiceAnthropic,
@@ -22,6 +24,8 @@ export async function applyAuthChoice(params) {
22
24
  applyAuthChoiceCopilotProxy,
23
25
  applyAuthChoiceQwenPortal,
24
26
  applyAuthChoiceXAI,
27
+ applyAuthChoiceBytePlus,
28
+ applyAuthChoiceVolcengine,
25
29
  ];
26
30
  for (const handler of handlers) {
27
31
  const result = await handler(params);
@@ -1,19 +1,13 @@
1
1
  import { resolveEnvApiKey } from "../agents/model-auth.js";
2
2
  import { formatApiKeyPreview, normalizeApiKeyInput, validateApiKeyInput, } from "./auth-choice.api-key.js";
3
+ import { createAuthChoiceAgentModelNoter } from "./auth-choice.apply-helpers.js";
4
+ import { applyAuthChoicePluginProvider } from "./auth-choice.apply.plugin-provider.js";
3
5
  import { applyDefaultModelChoice } from "./auth-choice.default-model.js";
4
- import { applyAuthProfileConfig, applyMinimaxApiConfig, applyMinimaxApiProviderConfig, applyMinimaxConfig, applyMinimaxProviderConfig, setMinimaxApiKey, } from "./onboard-auth.js";
6
+ import { applyAuthProfileConfig, applyMinimaxApiConfig, applyMinimaxApiConfigCn, applyMinimaxApiProviderConfig, applyMinimaxApiProviderConfigCn, applyMinimaxConfig, applyMinimaxProviderConfig, setMinimaxApiKey, } from "./onboard-auth.js";
5
7
  export async function applyAuthChoiceMiniMax(params) {
6
8
  let nextConfig = params.config;
7
9
  let agentModelOverride;
8
- const noteAgentModel = async (model) => {
9
- if (!params.agentId)
10
- return;
11
- await params.prompter.note(`Default model set to ${model} for agent "${params.agentId}".`, "Model configured");
12
- };
13
- if (params.authChoice === "minimax-cloud" ||
14
- params.authChoice === "minimax-api" ||
15
- params.authChoice === "minimax-api-lightning") {
16
- const modelId = params.authChoice === "minimax-api-lightning" ? "MiniMax-M2.1-lightning" : "MiniMax-M2.1";
10
+ const ensureMinimaxApiKey = async (opts) => {
17
11
  let hasCredential = false;
18
12
  const envKey = resolveEnvApiKey("minimax");
19
13
  if (envKey) {
@@ -22,17 +16,44 @@ export async function applyAuthChoiceMiniMax(params) {
22
16
  initialValue: true,
23
17
  });
24
18
  if (useExisting) {
25
- await setMinimaxApiKey(envKey.apiKey, params.agentDir);
19
+ await setMinimaxApiKey(envKey.apiKey, params.agentDir, opts.profileId);
26
20
  hasCredential = true;
27
21
  }
28
22
  }
29
23
  if (!hasCredential) {
30
24
  const key = await params.prompter.text({
31
- message: "Enter MiniMax API key",
25
+ message: opts.promptMessage,
32
26
  validate: validateApiKeyInput,
33
27
  });
34
- await setMinimaxApiKey(normalizeApiKeyInput(String(key)), params.agentDir);
28
+ await setMinimaxApiKey(normalizeApiKeyInput(String(key)), params.agentDir, opts.profileId);
35
29
  }
30
+ };
31
+ const noteAgentModel = createAuthChoiceAgentModelNoter(params);
32
+ if (params.authChoice === "minimax-portal") {
33
+ // Let user choose between Global/CN endpoints
34
+ const endpoint = await params.prompter.select({
35
+ message: "Select MiniMax endpoint",
36
+ options: [
37
+ { value: "oauth", label: "Global", hint: "OAuth for international users" },
38
+ { value: "oauth-cn", label: "CN", hint: "OAuth for users in China" },
39
+ ],
40
+ });
41
+ return await applyAuthChoicePluginProvider(params, {
42
+ authChoice: "minimax-portal",
43
+ pluginId: "minimax-portal-auth",
44
+ providerId: "minimax-portal",
45
+ methodId: endpoint,
46
+ label: "MiniMax",
47
+ });
48
+ }
49
+ if (params.authChoice === "minimax-cloud" ||
50
+ params.authChoice === "minimax-api" ||
51
+ params.authChoice === "minimax-api-lightning") {
52
+ const modelId = params.authChoice === "minimax-api-lightning" ? "MiniMax-M2.5-Lightning" : "MiniMax-M2.5";
53
+ await ensureMinimaxApiKey({
54
+ profileId: "minimax:default",
55
+ promptMessage: "Enter MiniMax API key",
56
+ });
36
57
  nextConfig = applyAuthProfileConfig(nextConfig, {
37
58
  profileId: "minimax:default",
38
59
  provider: "minimax",
@@ -54,6 +75,33 @@ export async function applyAuthChoiceMiniMax(params) {
54
75
  }
55
76
  return { config: nextConfig, agentModelOverride };
56
77
  }
78
+ if (params.authChoice === "minimax-api-key-cn") {
79
+ const modelId = "MiniMax-M2.5";
80
+ await ensureMinimaxApiKey({
81
+ profileId: "minimax-cn:default",
82
+ promptMessage: "Enter MiniMax China API key",
83
+ });
84
+ nextConfig = applyAuthProfileConfig(nextConfig, {
85
+ profileId: "minimax-cn:default",
86
+ provider: "minimax-cn",
87
+ mode: "api_key",
88
+ });
89
+ {
90
+ const modelRef = `minimax-cn/${modelId}`;
91
+ const applied = await applyDefaultModelChoice({
92
+ config: nextConfig,
93
+ setDefaultModel: params.setDefaultModel,
94
+ defaultModel: modelRef,
95
+ applyDefaultConfig: (config) => applyMinimaxApiConfigCn(config, modelId),
96
+ applyProviderConfig: (config) => applyMinimaxApiProviderConfigCn(config, modelId),
97
+ noteAgentModel,
98
+ prompter: params.prompter,
99
+ });
100
+ nextConfig = applied.config;
101
+ agentModelOverride = applied.agentModelOverride ?? agentModelOverride;
102
+ }
103
+ return { config: nextConfig, agentModelOverride };
104
+ }
57
105
  if (params.authChoice === "minimax") {
58
106
  const applied = await applyDefaultModelChoice({
59
107
  config: nextConfig,
@@ -87,7 +87,9 @@ export async function applyAuthChoiceOpenAI(params) {
87
87
  });
88
88
  spin.stop("OpenAI OAuth complete");
89
89
  if (creds) {
90
- await writeOAuthCredentials("openai-codex", creds, params.agentDir);
90
+ await writeOAuthCredentials("openai-codex", creds, params.agentDir, {
91
+ syncSiblingAgents: true,
92
+ });
91
93
  nextConfig = applyAuthProfileConfig(nextConfig, {
92
94
  profileId: "openai-codex:default",
93
95
  provider: "openai-codex",
@@ -0,0 +1,55 @@
1
+ import { resolveEnvApiKey } from "../agents/model-auth.js";
2
+ import { upsertSharedEnvVar } from "../infra/env-file.js";
3
+ import { formatApiKeyPreview, normalizeApiKeyInput, validateApiKeyInput, } from "./auth-choice.api-key.js";
4
+ import { applyPrimaryModel } from "./model-picker.js";
5
+ /** Default model for Volcano Engine auth onboarding. */
6
+ export const VOLCENGINE_DEFAULT_MODEL = "volcengine-plan/ark-code-latest";
7
+ export async function applyAuthChoiceVolcengine(params) {
8
+ if (params.authChoice !== "volcengine-api-key") {
9
+ return null;
10
+ }
11
+ const envKey = resolveEnvApiKey("volcengine");
12
+ if (envKey) {
13
+ const useExisting = await params.prompter.confirm({
14
+ message: `Use existing VOLCANO_ENGINE_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`,
15
+ initialValue: true,
16
+ });
17
+ if (useExisting) {
18
+ const result = upsertSharedEnvVar({
19
+ key: "VOLCANO_ENGINE_API_KEY",
20
+ value: envKey.apiKey,
21
+ });
22
+ if (!process.env.VOLCANO_ENGINE_API_KEY) {
23
+ process.env.VOLCANO_ENGINE_API_KEY = envKey.apiKey;
24
+ }
25
+ await params.prompter.note(`Copied VOLCANO_ENGINE_API_KEY to ${result.path} for launchd compatibility.`, "Volcano Engine API Key");
26
+ const configWithModel = applyPrimaryModel(params.config, VOLCENGINE_DEFAULT_MODEL);
27
+ return {
28
+ config: configWithModel,
29
+ agentModelOverride: VOLCENGINE_DEFAULT_MODEL,
30
+ };
31
+ }
32
+ }
33
+ let key;
34
+ if (params.opts?.volcengineApiKey) {
35
+ key = params.opts.volcengineApiKey;
36
+ }
37
+ else {
38
+ key = await params.prompter.text({
39
+ message: "Enter Volcano Engine API Key",
40
+ validate: validateApiKeyInput,
41
+ });
42
+ }
43
+ const trimmed = normalizeApiKeyInput(String(key));
44
+ const result = upsertSharedEnvVar({
45
+ key: "VOLCANO_ENGINE_API_KEY",
46
+ value: trimmed,
47
+ });
48
+ process.env.VOLCANO_ENGINE_API_KEY = trimmed;
49
+ await params.prompter.note(`Saved VOLCANO_ENGINE_API_KEY to ${result.path} for launchd compatibility.`, "Volcano Engine API Key");
50
+ const configWithModel = applyPrimaryModel(params.config, VOLCENGINE_DEFAULT_MODEL);
51
+ return {
52
+ config: configWithModel,
53
+ agentModelOverride: VOLCENGINE_DEFAULT_MODEL,
54
+ };
55
+ }
@@ -41,6 +41,8 @@ const PREFERRED_PROVIDER_BY_AUTH_CHOICE = {
41
41
  "minimax-portal": "minimax-portal",
42
42
  "qianfan-api-key": "qianfan",
43
43
  "nvidia-api-key": "nvidia",
44
+ "volcengine-api-key": "volcengine",
45
+ "byteplus-api-key": "byteplus",
44
46
  "custom-api-key": "custom",
45
47
  };
46
48
  export function resolvePreferredProviderForAuthChoice(choice) {
@@ -3,18 +3,21 @@ import { getChannelPlugin, listChannelPlugins, normalizeChannelId, } from "../..
3
3
  import { writeConfigFile } from "../../config/config.js";
4
4
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../../routing/session-key.js";
5
5
  import { defaultRuntime } from "../../runtime.js";
6
+ import { deleteTelegramUpdateOffset } from "../../telegram/update-offset-store.js";
6
7
  import { createClackPrompter } from "../../wizard/clack-prompter.js";
7
8
  import { channelLabel, requireValidConfig, shouldUseWizard } from "./shared.js";
8
9
  function listAccountIds(cfg, channel) {
9
10
  const plugin = getChannelPlugin(channel);
10
- if (!plugin)
11
+ if (!plugin) {
11
12
  return [];
13
+ }
12
14
  return plugin.config.listAccountIds(cfg);
13
15
  }
14
16
  export async function channelsRemoveCommand(opts, runtime = defaultRuntime, params) {
15
17
  const cfg = await requireValidConfig(runtime);
16
- if (!cfg)
18
+ if (!cfg) {
17
19
  return;
20
+ }
18
21
  const useWizard = shouldUseWizard(params);
19
22
  const prompter = useWizard ? createClackPrompter() : null;
20
23
  let channel = normalizeChannelId(opts.channel);
@@ -22,24 +25,24 @@ export async function channelsRemoveCommand(opts, runtime = defaultRuntime, para
22
25
  const deleteConfig = Boolean(opts.delete);
23
26
  if (useWizard && prompter) {
24
27
  await prompter.intro("Remove channel account");
25
- const selectedChannel = (await prompter.select({
28
+ const selectedChannel = await prompter.select({
26
29
  message: "Channel",
27
30
  options: listChannelPlugins().map((plugin) => ({
28
31
  value: plugin.id,
29
32
  label: plugin.meta.label,
30
33
  })),
31
- }));
34
+ });
32
35
  channel = selectedChannel;
33
36
  accountId = await (async () => {
34
37
  const ids = listAccountIds(cfg, selectedChannel);
35
- const choice = (await prompter.select({
38
+ const choice = await prompter.select({
36
39
  message: "Account",
37
40
  options: ids.map((id) => ({
38
41
  value: id,
39
42
  label: id === DEFAULT_ACCOUNT_ID ? "default (primary)" : id,
40
43
  })),
41
44
  initialValue: ids[0] ?? DEFAULT_ACCOUNT_ID,
42
- }));
45
+ });
43
46
  return normalizeAccountId(choice);
44
47
  })();
45
48
  const wantsDisable = await prompter.confirm({
@@ -87,6 +90,10 @@ export async function channelsRemoveCommand(opts, runtime = defaultRuntime, para
87
90
  cfg: next,
88
91
  accountId: resolvedAccountId,
89
92
  });
93
+ // Clean up Telegram polling offset to prevent stale offset on bot token change (#18233)
94
+ if (channel === "telegram") {
95
+ await deleteTelegramUpdateOffset({ accountId: resolvedAccountId });
96
+ }
90
97
  }
91
98
  else {
92
99
  if (!plugin.config.setAccountEnabled) {