@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.
- package/dist/acp/event-mapper.js +87 -22
- package/dist/acp/meta.js +12 -6
- package/dist/agents/agent-paths.js +8 -9
- package/dist/agents/agent-scope.js +7 -5
- package/dist/agents/auth-profiles/oauth.js +148 -64
- package/dist/agents/auth-profiles/session-override.js +13 -7
- package/dist/agents/bash-tools.exec-host-gateway.js +14 -4
- package/dist/agents/bash-tools.exec-runtime.js +2 -25
- package/dist/agents/bedrock-discovery.js +3 -1
- package/dist/agents/byteplus-models.js +97 -0
- package/dist/agents/chutes-oauth.js +1 -0
- package/dist/agents/cli-runner/helpers.js +4 -0
- package/dist/agents/compaction.js +41 -14
- package/dist/agents/doubao-models.js +121 -0
- package/dist/agents/failover-error.js +2 -0
- package/dist/agents/huggingface-models.js +5 -3
- package/dist/agents/live-model-filter.js +5 -0
- package/dist/agents/minimax-vlm.js +10 -8
- package/dist/agents/model-auth.js +6 -0
- package/dist/agents/model-catalog.js +3 -1
- package/dist/agents/model-selection.js +7 -1
- package/dist/agents/models-config.providers.js +93 -11
- package/dist/agents/ollama-stream.js +117 -4
- package/dist/agents/opencode-zen-models.js +22 -11
- package/dist/agents/pi-embedded-helpers/errors.js +55 -33
- package/dist/agents/pi-embedded-helpers/messaging-dedupe.js +10 -5
- package/dist/agents/pi-embedded-helpers/thinking.js +10 -5
- package/dist/agents/pi-embedded-helpers.js +1 -1
- package/dist/agents/pi-embedded-runner/compact.js +29 -7
- package/dist/agents/pi-embedded-runner/extensions.js +28 -26
- package/dist/agents/pi-embedded-runner/google.js +20 -8
- package/dist/agents/pi-embedded-runner/run/attempt.js +95 -36
- package/dist/agents/pi-embedded-runner/run.js +71 -12
- package/dist/agents/pi-embedded-runner/run.overflow-compaction.mocks.shared.js +11 -2
- package/dist/agents/pi-embedded-runner/session-manager-cache.js +11 -7
- package/dist/agents/pi-embedded-runner/system-prompt.js +2 -0
- package/dist/agents/pi-embedded-runner/thinking.js +42 -0
- package/dist/agents/pi-embedded-runner/tool-name-allowlist.js +19 -0
- package/dist/agents/pi-embedded-runner/utils.js +7 -10
- package/dist/agents/pi-embedded-subscribe.handlers.lifecycle.js +45 -56
- package/dist/agents/pi-embedded-subscribe.handlers.tools.js +2 -2
- package/dist/agents/pi-embedded-subscribe.js +9 -4
- package/dist/agents/pi-embedded-subscribe.tools.js +68 -14
- package/dist/agents/pi-embedded-utils.js +3 -0
- package/dist/agents/pi-extensions/compaction-safeguard-runtime.js +4 -20
- package/dist/agents/pi-extensions/compaction-safeguard.js +75 -33
- package/dist/agents/pi-settings.js +40 -0
- package/dist/agents/pi-tools.policy.js +2 -1
- package/dist/agents/provider/config-loader.js +1 -1
- package/dist/agents/sandbox/browser.js +170 -33
- package/dist/agents/sandbox/config-hash.js +14 -27
- package/dist/agents/sandbox/config.js +21 -2
- package/dist/agents/sandbox/constants.js +2 -0
- package/dist/agents/sandbox/docker.js +16 -2
- package/dist/agents/sandbox/novnc-auth.js +62 -0
- package/dist/agents/sandbox/sanitize-env-vars.js +1 -1
- package/dist/agents/sandbox/shared.js +10 -6
- package/dist/agents/sandbox-paths.js +24 -11
- package/dist/agents/schema/clean-for-gemini.js +132 -85
- package/dist/agents/session-slug.js +10 -5
- package/dist/agents/session-tool-result-guard-wrapper.js +1 -0
- package/dist/agents/session-tool-result-guard.js +3 -1
- package/dist/agents/session-transcript-repair.js +40 -6
- package/dist/agents/skills/bundled-dir.js +19 -5
- package/dist/agents/skills/env-overrides.js +124 -43
- package/dist/agents/skills/frontmatter.js +6 -6
- package/dist/agents/skills/plugin-skills.js +14 -7
- package/dist/agents/skills/workspace.js +1 -0
- package/dist/agents/subagent-announce.js +251 -49
- package/dist/agents/subagent-lifecycle-events.js +19 -0
- package/dist/agents/subagent-registry-cleanup.js +31 -0
- package/dist/agents/subagent-registry-completion.js +68 -0
- package/dist/agents/subagent-registry-queries.js +117 -0
- package/dist/agents/subagent-registry-state.js +46 -0
- package/dist/agents/subagent-registry.js +252 -221
- package/dist/agents/subagent-registry.store.js +1 -0
- package/dist/agents/subagent-registry.types.js +1 -0
- package/dist/agents/subagent-spawn.js +195 -7
- package/dist/agents/system-prompt.js +22 -6
- package/dist/agents/test-helpers/fast-coding-tools.js +1 -18
- package/dist/agents/test-helpers/fast-core-tools.js +1 -17
- package/dist/agents/timeout.js +18 -6
- package/dist/agents/tool-call-id.js +1 -1
- package/dist/agents/tool-display-common.js +162 -29
- package/dist/agents/tool-images.js +82 -9
- package/dist/agents/tool-policy.js +51 -26
- package/dist/agents/tools/browser-tool.js +2 -2
- package/dist/agents/tools/canvas-tool.js +27 -1
- package/dist/agents/tools/common.js +45 -0
- package/dist/agents/tools/discord-actions-guild.js +4 -1
- package/dist/agents/tools/gateway-tool.js +3 -1
- package/dist/agents/tools/nodes-utils.js +1 -10
- package/dist/agents/tools/sessions-send-helpers.js +12 -6
- package/dist/agents/tools/sessions-spawn-tool.js +8 -2
- package/dist/agents/tools/subagents-tool.js +2 -1
- package/dist/agents/tools/whatsapp-actions.js +10 -2
- package/dist/agents/tools/whatsapp-target-auth.js +18 -0
- package/dist/agents/transcript-policy.js +22 -8
- package/dist/agents/venice-models.js +11 -3
- package/dist/auto-reply/commands-registry.data.js +51 -0
- package/dist/auto-reply/commands-registry.js +4 -3
- package/dist/auto-reply/group-activation.js +10 -5
- package/dist/auto-reply/inbound-debounce.js +10 -5
- package/dist/auto-reply/reply/abort.js +1 -1
- package/dist/auto-reply/reply/agent-runner-execution.js +4 -1
- package/dist/auto-reply/reply/bash-command.js +41 -39
- package/dist/auto-reply/reply/command-gates.js +25 -0
- package/dist/auto-reply/reply/commands-allowlist.js +111 -72
- package/dist/auto-reply/reply/commands-bash.js +6 -5
- package/dist/auto-reply/reply/commands-config.js +30 -28
- package/dist/auto-reply/reply/commands-core.js +2 -1
- package/dist/auto-reply/reply/commands-info.js +1 -0
- package/dist/auto-reply/reply/commands-models.js +65 -14
- package/dist/auto-reply/reply/commands-session.js +237 -82
- package/dist/auto-reply/reply/commands-setunset.js +45 -0
- package/dist/auto-reply/reply/commands-subagents/action-agents.js +44 -0
- package/dist/auto-reply/reply/commands-subagents/action-focus.js +64 -0
- package/dist/auto-reply/reply/commands-subagents/action-help.js +4 -0
- package/dist/auto-reply/reply/commands-subagents/action-info.js +45 -0
- package/dist/auto-reply/reply/commands-subagents/action-kill.js +60 -0
- package/dist/auto-reply/reply/commands-subagents/action-list.js +44 -0
- package/dist/auto-reply/reply/commands-subagents/action-log.js +29 -0
- package/dist/auto-reply/reply/commands-subagents/action-send.js +119 -0
- package/dist/auto-reply/reply/commands-subagents/action-spawn.js +52 -0
- package/dist/auto-reply/reply/commands-subagents/action-unfocus.js +30 -0
- package/dist/auto-reply/reply/commands-subagents/shared.js +303 -0
- package/dist/auto-reply/reply/commands-subagents.js +51 -587
- package/dist/auto-reply/reply/commands-tts.js +10 -5
- package/dist/auto-reply/reply/config-value.js +10 -5
- package/dist/auto-reply/reply/directive-handling.model-picker.js +12 -6
- package/dist/auto-reply/reply/directive-handling.persist.js +9 -21
- package/dist/auto-reply/reply/directive-handling.shared.js +24 -4
- package/dist/auto-reply/reply/followup-runner.js +1 -0
- package/dist/auto-reply/reply/get-reply-directives-utils.js +23 -14
- package/dist/auto-reply/reply/get-reply-directives.js +17 -28
- package/dist/auto-reply/reply/get-reply-inline-actions.js +1 -0
- package/dist/auto-reply/reply/get-reply.js +71 -12
- package/dist/auto-reply/reply/model-selection.js +80 -39
- package/dist/auto-reply/reply/queue/enqueue.js +10 -5
- package/dist/auto-reply/reply/queue/state.js +13 -12
- package/dist/auto-reply/reply/reply-payloads.js +67 -36
- package/dist/auto-reply/reply/reply-reference.js +9 -8
- package/dist/auto-reply/reply/route-reply.js +15 -8
- package/dist/auto-reply/reply/session-reset-prompt.js +1 -1
- package/dist/auto-reply/reply/session.js +22 -6
- package/dist/auto-reply/reply/strip-inbound-meta.js +147 -0
- package/dist/auto-reply/reply/subagents-utils.js +56 -30
- package/dist/auto-reply/reply/typing.js +46 -21
- package/dist/auto-reply/send-policy.js +14 -7
- package/dist/auto-reply/status.js +140 -16
- package/dist/auto-reply/templating.js +10 -5
- package/dist/auto-reply/thinking.js +7 -16
- package/dist/auto-reply/tokens.js +21 -5
- package/dist/browser/bridge-server.js +36 -20
- package/dist/browser/cdp.helpers.js +7 -14
- package/dist/browser/cdp.js +35 -15
- package/dist/browser/chrome.profile-decoration.js +7 -4
- package/dist/browser/config.js +4 -0
- package/dist/browser/extension-relay-auth.js +55 -0
- package/dist/browser/extension-relay.js +74 -29
- package/dist/browser/navigation-guard.js +9 -1
- package/dist/browser/paths.js +77 -0
- package/dist/browser/profiles.js +13 -8
- package/dist/browser/pw-ai-module.js +10 -5
- package/dist/browser/pw-session.js +76 -39
- package/dist/browser/pw-tools-core.interactions.js +14 -7
- package/dist/browser/pw-tools-core.state.js +12 -6
- package/dist/browser/routes/agent.act.js +2 -2
- package/dist/browser/server-context.js +7 -0
- package/dist/build-info.json +3 -3
- package/dist/channels/allow-from.js +2 -1
- package/dist/channels/allowlists/resolve-utils.js +43 -19
- package/dist/channels/channel-config.js +14 -7
- package/dist/channels/draft-stream-loop.js +7 -0
- package/dist/channels/model-overrides.js +82 -0
- package/dist/channels/plugins/normalize/imessage.js +14 -7
- package/dist/channels/plugins/normalize/slack.js +10 -5
- package/dist/channels/plugins/normalize/telegram.js +14 -7
- package/dist/channels/plugins/outbound/discord.js +80 -8
- package/dist/channels/plugins/outbound/signal.js +11 -11
- package/dist/channels/plugins/setup-helpers.js +10 -5
- package/dist/channels/sender-label.js +14 -7
- package/dist/channels/session.js +4 -2
- package/dist/channels/status-reactions.js +297 -0
- package/dist/cli/banner.js +1 -1
- package/dist/cli/browser-cli-actions-input/register.files-downloads.js +65 -56
- package/dist/cli/cli-name.js +11 -11
- package/dist/cli/cli-utils.js +13 -3
- package/dist/cli/command-format.js +1 -1
- package/dist/cli/config-cli.js +1 -1
- package/dist/cli/daemon-cli/lifecycle-core.js +31 -19
- package/dist/cli/daemon-cli/lifecycle.js +64 -2
- package/dist/cli/daemon-cli/restart-health.js +126 -0
- package/dist/cli/daemon-cli/status.gather.js +9 -13
- package/dist/cli/daemon-cli/status.print.js +2 -10
- package/dist/cli/deps.js +27 -22
- package/dist/cli/gateway-cli/run-loop.js +23 -5
- package/dist/cli/node-cli/register.js +14 -5
- package/dist/cli/nodes-media-utils.js +7 -2
- package/dist/cli/outbound-send-deps.js +2 -9
- package/dist/cli/outbound-send-mapping.js +11 -0
- package/dist/cli/pairing-cli.js +40 -14
- package/dist/cli/plugins-cli.js +34 -41
- package/dist/cli/ports.js +11 -10
- package/dist/cli/program/command-registry.js +2 -11
- package/dist/cli/program/command-tree.js +16 -0
- package/dist/cli/program/preaction.js +13 -9
- package/dist/cli/program/register.configure.js +3 -18
- package/dist/cli/program/register.maintenance.js +2 -2
- package/dist/cli/program/register.onboard.js +2 -0
- package/dist/cli/program/register.status-health-sessions.js +16 -17
- package/dist/cli/program/register.subclis.js +93 -52
- package/dist/cli/route.js +11 -7
- package/dist/cli/system-cli.js +36 -46
- package/dist/cli/update-cli/shared.js +22 -9
- package/dist/cli/update-cli/update-command.js +89 -14
- package/dist/cli/update-cli/wizard.js +6 -12
- package/dist/commands/agent/run-context.js +18 -5
- package/dist/commands/agent/session-store.js +17 -4
- package/dist/commands/agent.js +22 -2
- package/dist/commands/agents.bindings.js +14 -7
- package/dist/commands/agents.commands.add.js +13 -9
- package/dist/commands/agents.commands.identity.js +12 -6
- package/dist/commands/agents.commands.list.js +11 -6
- package/dist/commands/agents.config.js +8 -10
- package/dist/commands/agents.providers.js +12 -6
- package/dist/commands/auth-choice-options.js +103 -75
- package/dist/commands/auth-choice.apply.byteplus.js +55 -0
- package/dist/commands/auth-choice.apply.js +4 -0
- package/dist/commands/auth-choice.apply.minimax.js +61 -13
- package/dist/commands/auth-choice.apply.openai.js +3 -1
- package/dist/commands/auth-choice.apply.volcengine.js +55 -0
- package/dist/commands/auth-choice.preferred-provider.js +2 -0
- package/dist/commands/channels/remove.js +13 -6
- package/dist/commands/channels/shared.js +4 -14
- package/dist/commands/configure.commands.js +14 -0
- package/dist/commands/configure.gateway.js +2 -4
- package/dist/commands/configure.js +1 -1
- package/dist/commands/configure.shared.js +11 -0
- package/dist/commands/daemon-install-helpers.js +2 -2
- package/dist/commands/dashboard.js +12 -10
- package/dist/commands/docs.js +14 -8
- package/dist/commands/doctor-config-flow.js +11 -9
- package/dist/commands/doctor-legacy-config.js +281 -0
- package/dist/commands/doctor-state-integrity.js +99 -23
- package/dist/commands/doctor-update.js +12 -9
- package/dist/commands/models/list.list-command.js +7 -5
- package/dist/commands/models/set-image.js +2 -21
- package/dist/commands/node-daemon-install-helpers.js +10 -8
- package/dist/commands/onboard-auth.config-minimax.js +54 -80
- package/dist/commands/onboard-auth.config-opencode.js +2 -18
- package/dist/commands/onboard-auth.credentials.js +90 -13
- package/dist/commands/onboard-auth.js +1 -1
- package/dist/commands/onboard-auth.models.js +6 -5
- package/dist/commands/onboard-hooks.js +1 -1
- package/dist/commands/onboard-non-interactive/api-keys.js +14 -7
- package/dist/commands/onboard-non-interactive/local/auth-choice.js +64 -49
- package/dist/commands/onboard-provider-auth-flags.js +14 -0
- package/dist/commands/onboard-remote.js +14 -7
- package/dist/commands/onboard.js +11 -13
- package/dist/commands/sandbox-display.js +6 -5
- package/dist/commands/status-all/diagnosis.js +14 -10
- package/dist/commands/status-all/format.js +1 -0
- package/dist/commands/status.gateway-probe.js +1 -16
- package/dist/commands/systemd-linger.js +12 -6
- package/dist/config/agent-limits.js +2 -0
- package/dist/config/commands.js +30 -16
- package/dist/config/config-paths.js +9 -11
- package/dist/config/defaults.js +22 -2
- package/dist/config/discord-preview-streaming.js +104 -0
- package/dist/config/env-vars.js +37 -8
- package/dist/config/includes.js +4 -0
- package/dist/config/io.js +97 -12
- package/dist/config/legacy.migrations.part-1.js +189 -78
- package/dist/config/legacy.shared.js +3 -1
- package/dist/config/merge-patch.js +4 -0
- package/dist/config/prototype-keys.js +4 -0
- package/dist/config/schema.help.js +44 -7
- package/dist/config/schema.labels.js +38 -6
- package/dist/config/sessions/delivery-info.js +10 -3
- package/dist/config/sessions/main-session.js +10 -5
- package/dist/config/sessions/session-file.js +33 -0
- package/dist/config/sessions/session-key.js +10 -5
- package/dist/config/sessions/store.js +1 -1
- package/dist/config/sessions.js +1 -0
- package/dist/config/zod-schema.agent-runtime.js +11 -0
- package/dist/config/zod-schema.js +148 -13
- package/dist/config/zod-schema.providers-core.js +78 -4
- package/dist/config/zod-schema.providers.js +6 -1
- package/dist/config/zod-schema.session.js +41 -2
- package/dist/cron/run-log.js +3 -0
- package/dist/cron/schedule.js +21 -10
- package/dist/cron/service/ops.js +35 -21
- package/dist/cron/service/timer.js +116 -16
- package/dist/cron/stagger.js +3 -1
- package/dist/discord/api.js +12 -6
- package/dist/discord/draft-chunking.js +22 -0
- package/dist/discord/draft-stream.js +124 -0
- package/dist/discord/monitor/agent-components.js +1 -1
- package/dist/discord/monitor/commands.js +5 -0
- package/dist/discord/monitor/gateway-plugin.js +2 -1
- package/dist/discord/monitor/listeners.js +37 -27
- package/dist/discord/monitor/message-handler.js +4 -1
- package/dist/discord/monitor/message-handler.preflight.js +65 -8
- package/dist/discord/monitor/message-handler.process.js +246 -217
- package/dist/discord/monitor/message-utils.js +143 -6
- package/dist/discord/monitor/model-picker-preferences.js +143 -0
- package/dist/discord/monitor/model-picker.js +651 -0
- package/dist/discord/monitor/native-command.js +573 -16
- package/dist/discord/monitor/provider.allowlist.js +223 -0
- package/dist/discord/monitor/provider.js +275 -347
- package/dist/discord/monitor/provider.lifecycle.js +100 -0
- package/dist/discord/monitor/reply-delivery.js +123 -16
- package/dist/discord/monitor/thread-bindings.discord-api.js +215 -0
- package/dist/discord/monitor/thread-bindings.js +4 -0
- package/dist/discord/monitor/thread-bindings.lifecycle.js +177 -0
- package/dist/discord/monitor/thread-bindings.manager.js +423 -0
- package/dist/discord/monitor/thread-bindings.messages.js +55 -0
- package/dist/discord/monitor/thread-bindings.state.js +358 -0
- package/dist/discord/monitor/thread-bindings.types.js +6 -0
- package/dist/discord/resolve-users.js +33 -21
- package/dist/discord/send.channels.js +15 -0
- package/dist/discord/send.js +3 -2
- package/dist/discord/send.outbound.js +82 -26
- package/dist/discord/send.permissions.js +83 -30
- package/dist/discord/send.reactions.js +8 -4
- package/dist/discord/token.js +10 -5
- package/dist/discord/voice/command.js +263 -0
- package/dist/discord/voice/manager.js +531 -0
- package/dist/gateway/auth.js +34 -10
- package/dist/gateway/call.js +4 -16
- package/dist/gateway/client.js +28 -4
- package/dist/gateway/config-reload.js +3 -4
- package/dist/gateway/control-ui.js +219 -96
- package/dist/gateway/hooks-mapping.js +88 -38
- package/dist/gateway/http-auth-helpers.js +3 -2
- package/dist/gateway/http-endpoint-helpers.js +1 -0
- package/dist/gateway/net.js +54 -12
- package/dist/gateway/node-invoke-system-run-approval.js +14 -35
- package/dist/gateway/node-registry.js +10 -5
- package/dist/gateway/openai-http.js +1 -0
- package/dist/gateway/openresponses-http.js +1 -0
- package/dist/gateway/origin-check.js +1 -18
- package/dist/gateway/protocol/index.js +4 -3
- package/dist/gateway/protocol/schema/cron.js +1 -0
- package/dist/gateway/protocol/schema/devices.js +1 -0
- package/dist/gateway/protocol/schema/protocol-schemas.js +2 -1
- package/dist/gateway/protocol/schema/sessions.js +6 -0
- package/dist/gateway/role-policy.js +17 -0
- package/dist/gateway/server/ws-connection/connect-policy.js +37 -0
- package/dist/gateway/server/ws-connection/message-handler.js +175 -148
- package/dist/gateway/server-chat.js +83 -25
- package/dist/gateway/server-constants.js +10 -9
- package/dist/gateway/server-cron.js +1 -0
- package/dist/gateway/server-http.js +16 -7
- package/dist/gateway/server-maintenance.js +20 -5
- package/dist/gateway/server-methods/chat.js +10 -6
- package/dist/gateway/server-methods/config.js +12 -14
- package/dist/gateway/server-methods/devices.js +17 -3
- package/dist/gateway/server-methods/models.js +11 -1
- package/dist/gateway/server-methods/sessions.js +64 -8
- package/dist/gateway/server-methods/usage.js +162 -75
- package/dist/gateway/server-node-events.js +29 -0
- package/dist/gateway/server-runtime-config.js +34 -13
- package/dist/gateway/server-startup-memory.js +17 -11
- package/dist/gateway/session-utils.fs.js +32 -34
- package/dist/gateway/sessions-resolve.js +17 -5
- package/dist/gateway/test-helpers.openai-mock.js +14 -7
- package/dist/gateway/tools-invoke-http.js +21 -10
- package/dist/hooks/bundled/bootstrap-extra-files/handler.js +3 -1
- package/dist/hooks/bundled/command-logger/handler.js +7 -2
- package/dist/hooks/bundled/session-memory/handler.js +6 -5
- package/dist/hooks/frontmatter.js +6 -6
- package/dist/hooks/gmail-watcher.js +11 -6
- package/dist/hooks/internal-hooks.js +11 -1
- package/dist/hooks/llm-slug-generator.js +4 -1
- package/dist/hooks/workspace.js +47 -17
- package/dist/imessage/accounts.js +9 -20
- package/dist/imessage/monitor/inbound-processing.js +2 -1
- package/dist/infra/archive.js +174 -73
- package/dist/infra/control-ui-assets.js +14 -6
- package/dist/infra/device-pairing.js +108 -29
- package/dist/infra/env.js +10 -5
- package/dist/infra/exec-approvals-allowlist.js +122 -0
- package/dist/infra/exec-approvals-analysis.js +34 -3
- package/dist/infra/exec-approvals.js +5 -17
- package/dist/infra/exec-safe-bin-policy.js +53 -45
- package/dist/infra/fs-safe.js +71 -39
- package/dist/infra/gateway-lock.js +6 -2
- package/dist/infra/heartbeat-wake.js +6 -12
- package/dist/infra/host-env-security-policy.json +19 -0
- package/dist/infra/host-env-security.js +66 -0
- package/dist/infra/net/ssrf.js +131 -38
- package/dist/infra/outbound/bound-delivery-router.js +88 -0
- package/dist/infra/outbound/channel-selection.js +12 -6
- package/dist/infra/outbound/envelope.js +1 -1
- package/dist/infra/outbound/format.js +12 -6
- package/dist/infra/outbound/payloads.js +14 -7
- package/dist/infra/outbound/session-binding-service.js +123 -0
- package/dist/infra/path-guards.js +25 -0
- package/dist/infra/provider-usage.fetch.codex.js +7 -15
- package/dist/infra/provider-usage.fetch.gemini.js +14 -11
- package/dist/infra/provider-usage.fetch.shared.js +30 -1
- package/dist/infra/provider-usage.fetch.zai.js +10 -9
- package/dist/infra/retry-policy.js +4 -2
- package/dist/infra/retry.js +9 -5
- package/dist/infra/session-cost-usage.js +107 -59
- package/dist/infra/session-maintenance-warning.js +3 -1
- package/dist/infra/shell-env.js +98 -34
- package/dist/infra/ssh-config.js +12 -6
- package/dist/infra/system-run-command.js +49 -4
- package/dist/infra/update-channels.js +10 -5
- package/dist/line/accounts.js +5 -7
- package/dist/line/bot-access.js +8 -20
- package/dist/line/bot-handlers.js +3 -1
- package/dist/link-understanding/detect.js +15 -7
- package/dist/media/constants.js +15 -6
- package/dist/media/image-ops.js +7 -0
- package/dist/media/local-roots.js +3 -2
- package/dist/media-understanding/apply.js +4 -1
- package/dist/media-understanding/concurrency.js +8 -20
- package/dist/memory/backend-config.js +45 -6
- package/dist/memory/embeddings.js +10 -4
- package/dist/memory/fs-utils.js +23 -0
- package/dist/memory/manager-search.js +12 -6
- package/dist/memory/manager-sync-ops.js +12 -2
- package/dist/memory/qmd-manager.js +466 -53
- package/dist/memory/query-expansion.js +167 -3
- package/dist/memory/status-format.js +10 -5
- package/dist/memory/sync-memory-files.js +1 -1
- package/dist/node-host/invoke-system-run.js +281 -0
- package/dist/node-host/invoke.js +55 -337
- package/dist/pairing/pairing-store.js +22 -0
- package/dist/plugin-sdk/allow-from.js +1 -1
- package/dist/plugin-sdk/command-auth.js +3 -1
- package/dist/plugin-sdk/index.js +6 -3
- package/dist/plugin-sdk/webhook-targets.js +32 -0
- package/dist/plugins/bundled-dir.js +9 -6
- package/dist/plugins/hooks.js +50 -0
- package/dist/plugins/install.js +28 -16
- package/dist/plugins/runtime.js +3 -17
- package/dist/plugins/update.js +78 -12
- package/dist/process/spawn-utils.js +14 -7
- package/dist/providers/github-copilot-token.js +11 -6
- package/dist/providers/qwen-portal-oauth.js +14 -6
- package/dist/routing/account-id.js +30 -0
- package/dist/routing/resolve-route.js +3 -7
- package/dist/routing/session-key.js +2 -16
- package/dist/security/audit-channel.js +93 -2
- package/dist/security/audit-extra.async.js +159 -5
- package/dist/security/audit-extra.js +1 -1
- package/dist/security/audit-extra.sync.js +85 -6
- package/dist/security/audit.js +40 -4
- package/dist/security/dm-policy-shared.js +44 -0
- package/dist/security/external-content.js +26 -6
- package/dist/shared/entry-status.js +6 -0
- package/dist/shared/frontmatter.js +5 -5
- package/dist/shared/node-match.js +11 -4
- package/dist/shared/operator-scope-compat.js +8 -3
- package/dist/signal/accounts.js +7 -20
- package/dist/signal/monitor/event-handler.js +3 -1
- package/dist/slack/accounts.js +6 -19
- package/dist/slack/actions.js +11 -3
- package/dist/slack/monitor/auth.js +1 -1
- package/dist/slack/monitor/message-handler/dispatch.js +50 -29
- package/dist/slack/monitor/replies.js +15 -7
- package/dist/slack/monitor/slash.js +22 -13
- package/dist/slack/resolve-channels.js +10 -5
- package/dist/slack/send.js +102 -12
- package/dist/slack/stream-mode.js +10 -0
- package/dist/slack/streaming.js +4 -2
- package/dist/telegram/accounts.js +19 -14
- package/dist/telegram/bot/helpers.js +3 -5
- package/dist/telegram/bot-access.js +35 -36
- package/dist/telegram/bot-handlers.js +120 -148
- package/dist/telegram/bot-message-context.js +68 -9
- package/dist/telegram/bot-message-dispatch.js +155 -90
- package/dist/telegram/bot-native-commands.js +16 -0
- package/dist/telegram/draft-stream.js +14 -1
- package/dist/telegram/inline-buttons.js +5 -15
- package/dist/telegram/monitor.js +11 -7
- package/dist/telegram/network-config.js +19 -7
- package/dist/telegram/send.js +3 -2
- package/dist/telegram/sent-message-cache.js +5 -6
- package/dist/telegram/status-reaction-variants.js +208 -0
- package/dist/telegram/sticker-cache.js +11 -9
- package/dist/terminal/theme.js +12 -12
- package/dist/tts/tts.js +80 -567
- package/dist/tui/components/chat-log.js +41 -8
- package/dist/tui/theme/theme.js +10 -12
- package/dist/tui/tui-local-shell.js +16 -6
- package/dist/tui/tui.js +58 -6
- package/dist/utils/account-id.js +2 -4
- package/dist/utils/boolean.js +10 -5
- package/dist/utils/directive-tags.js +11 -0
- package/dist/utils/queue-helpers.js +67 -12
- package/dist/web/auto-reply/deliver-reply.js +8 -4
- package/dist/web/auto-reply/mentions.js +10 -5
- package/dist/web/auto-reply/monitor/group-members.js +14 -7
- package/dist/web/auto-reply/monitor/process-message.js +45 -24
- package/dist/web/inbound/access-control.js +5 -2
- package/dist/web/login-qr.js +12 -6
- package/dist/web/media.js +123 -16
- package/extensions/bluebubbles/src/monitor-processing.ts +580 -139
- package/extensions/bluebubbles/src/monitor.ts +208 -1950
- 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: "
|
|
46
|
-
label: "
|
|
47
|
-
hint: "API key
|
|
48
|
-
choices: ["
|
|
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
|
-
|
|
142
|
-
|
|
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
|
-
|
|
159
|
+
},
|
|
160
|
+
{
|
|
150
161
|
value: "openai-codex",
|
|
151
162
|
label: "OpenAI Codex (ChatGPT OAuth)",
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
|
|
171
|
-
|
|
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
|
-
|
|
183
|
+
},
|
|
184
|
+
{
|
|
177
185
|
value: "ai-gateway-api-key",
|
|
178
186
|
label: "Vercel AI Gateway API key",
|
|
179
|
-
}
|
|
180
|
-
|
|
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
|
-
|
|
192
|
+
},
|
|
193
|
+
{
|
|
186
194
|
value: "moonshot-api-key",
|
|
187
195
|
label: "Kimi API key (.ai)",
|
|
188
|
-
}
|
|
189
|
-
|
|
196
|
+
},
|
|
197
|
+
{
|
|
190
198
|
value: "moonshot-api-key-cn",
|
|
191
199
|
label: "Kimi API key (.cn)",
|
|
192
|
-
}
|
|
193
|
-
|
|
200
|
+
},
|
|
201
|
+
{
|
|
194
202
|
value: "kimi-code-api-key",
|
|
195
203
|
label: "Kimi Code API key (subscription)",
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
220
|
+
},
|
|
221
|
+
{
|
|
214
222
|
value: "github-copilot",
|
|
215
223
|
label: "GitHub Copilot (GitHub device login)",
|
|
216
224
|
hint: "Uses GitHub device flow",
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
|
|
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
|
-
|
|
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
|
-
|
|
230
|
-
|
|
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
|
-
|
|
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
|
-
|
|
247
|
+
},
|
|
248
|
+
{
|
|
241
249
|
value: "zai-global",
|
|
242
250
|
label: "Global",
|
|
243
251
|
hint: "Z.AI Global (api.z.ai)",
|
|
244
|
-
}
|
|
245
|
-
|
|
252
|
+
},
|
|
253
|
+
{
|
|
246
254
|
value: "zai-cn",
|
|
247
255
|
label: "CN",
|
|
248
256
|
hint: "Z.AI CN (open.bigmodel.cn)",
|
|
249
|
-
}
|
|
250
|
-
|
|
257
|
+
},
|
|
258
|
+
{
|
|
251
259
|
value: "xiaomi-api-key",
|
|
252
260
|
label: "Xiaomi API key",
|
|
253
|
-
}
|
|
254
|
-
|
|
261
|
+
},
|
|
262
|
+
{
|
|
255
263
|
value: "minimax-portal",
|
|
256
264
|
label: "MiniMax OAuth",
|
|
257
265
|
hint: "Oauth plugin for MiniMax",
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
|
|
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
|
-
|
|
266
|
-
|
|
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
|
-
|
|
273
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
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 =
|
|
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 =
|
|
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) {
|