@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
|
@@ -1,19 +1,93 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
1
3
|
import { resolvePoolbotAgentDir } from "../agents/agent-paths.js";
|
|
2
4
|
import { upsertAuthProfile } from "../agents/auth-profiles.js";
|
|
5
|
+
import { resolveStateDir } from "../config/paths.js";
|
|
3
6
|
export { CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF } from "../agents/cloudflare-ai-gateway.js";
|
|
4
|
-
export { XAI_DEFAULT_MODEL_REF
|
|
7
|
+
export { XAI_DEFAULT_MODEL_REF } from "./onboard-auth.models.js";
|
|
5
8
|
const resolveAuthAgentDir = (agentDir) => agentDir ?? resolvePoolbotAgentDir();
|
|
6
|
-
|
|
9
|
+
/** Resolve real path, returning null if the target doesn't exist. */
|
|
10
|
+
function safeRealpathSync(dir) {
|
|
11
|
+
try {
|
|
12
|
+
return fs.realpathSync(path.resolve(dir));
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function resolveSiblingAgentDirs(primaryAgentDir) {
|
|
19
|
+
const normalized = path.resolve(primaryAgentDir);
|
|
20
|
+
// Derive agentsRoot from primaryAgentDir when it matches the standard
|
|
21
|
+
// layout (.../agents/<name>/agent). Falls back to global state dir.
|
|
22
|
+
const parentOfAgent = path.dirname(normalized);
|
|
23
|
+
const candidateAgentsRoot = path.dirname(parentOfAgent);
|
|
24
|
+
const looksLikeStandardLayout = path.basename(normalized) === "agent" && path.basename(candidateAgentsRoot) === "agents";
|
|
25
|
+
const agentsRoot = looksLikeStandardLayout
|
|
26
|
+
? candidateAgentsRoot
|
|
27
|
+
: path.join(resolveStateDir(), "agents");
|
|
28
|
+
const entries = (() => {
|
|
29
|
+
try {
|
|
30
|
+
return fs.readdirSync(agentsRoot, { withFileTypes: true });
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
})();
|
|
36
|
+
// Include both directories and symlinks-to-directories.
|
|
37
|
+
const discovered = entries
|
|
38
|
+
.filter((entry) => entry.isDirectory() || entry.isSymbolicLink())
|
|
39
|
+
.map((entry) => path.join(agentsRoot, entry.name, "agent"));
|
|
40
|
+
// Deduplicate via realpath to handle symlinks and path normalization.
|
|
41
|
+
const seen = new Set();
|
|
42
|
+
const result = [];
|
|
43
|
+
for (const dir of [normalized, ...discovered]) {
|
|
44
|
+
const real = safeRealpathSync(dir);
|
|
45
|
+
if (real && !seen.has(real)) {
|
|
46
|
+
seen.add(real);
|
|
47
|
+
result.push(real);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
export async function writeOAuthCredentials(provider, creds, agentDir, options) {
|
|
7
53
|
const email = typeof creds.email === "string" && creds.email.trim() ? creds.email.trim() : "default";
|
|
54
|
+
const profileId = `${provider}:${email}`;
|
|
55
|
+
const resolvedAgentDir = path.resolve(resolveAuthAgentDir(agentDir));
|
|
56
|
+
const targetAgentDirs = options?.syncSiblingAgents
|
|
57
|
+
? resolveSiblingAgentDirs(resolvedAgentDir)
|
|
58
|
+
: [resolvedAgentDir];
|
|
59
|
+
const credential = {
|
|
60
|
+
type: "oauth",
|
|
61
|
+
provider,
|
|
62
|
+
...creds,
|
|
63
|
+
};
|
|
64
|
+
// Primary write must succeed — let it throw on failure.
|
|
8
65
|
upsertAuthProfile({
|
|
9
|
-
profileId
|
|
10
|
-
credential
|
|
11
|
-
|
|
12
|
-
provider,
|
|
13
|
-
...creds,
|
|
14
|
-
},
|
|
15
|
-
agentDir: resolveAuthAgentDir(agentDir),
|
|
66
|
+
profileId,
|
|
67
|
+
credential,
|
|
68
|
+
agentDir: resolvedAgentDir,
|
|
16
69
|
});
|
|
70
|
+
// Sibling sync is best-effort — log and ignore individual failures.
|
|
71
|
+
if (options?.syncSiblingAgents) {
|
|
72
|
+
const primaryReal = safeRealpathSync(resolvedAgentDir);
|
|
73
|
+
for (const targetAgentDir of targetAgentDirs) {
|
|
74
|
+
const targetReal = safeRealpathSync(targetAgentDir);
|
|
75
|
+
if (targetReal && primaryReal && targetReal === primaryReal) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
upsertAuthProfile({
|
|
80
|
+
profileId,
|
|
81
|
+
credential,
|
|
82
|
+
agentDir: targetAgentDir,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Best-effort: sibling sync failure must not block primary onboarding.
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return profileId;
|
|
17
91
|
}
|
|
18
92
|
export async function setAnthropicApiKey(key, agentDir) {
|
|
19
93
|
// Write to resolved agent dir so gateway finds credentials on startup.
|
|
@@ -39,13 +113,14 @@ export async function setGeminiApiKey(key, agentDir) {
|
|
|
39
113
|
agentDir: resolveAuthAgentDir(agentDir),
|
|
40
114
|
});
|
|
41
115
|
}
|
|
42
|
-
export async function setMinimaxApiKey(key, agentDir) {
|
|
116
|
+
export async function setMinimaxApiKey(key, agentDir, profileId = "minimax:default") {
|
|
117
|
+
const provider = profileId.split(":")[0] ?? "minimax";
|
|
43
118
|
// Write to resolved agent dir so gateway finds credentials on startup.
|
|
44
119
|
upsertAuthProfile({
|
|
45
|
-
profileId
|
|
120
|
+
profileId,
|
|
46
121
|
credential: {
|
|
47
122
|
type: "api_key",
|
|
48
|
-
provider
|
|
123
|
+
provider,
|
|
49
124
|
key,
|
|
50
125
|
},
|
|
51
126
|
agentDir: resolveAuthAgentDir(agentDir),
|
|
@@ -237,7 +312,9 @@ export function setXaiApiKey(key, agentDir) {
|
|
|
237
312
|
agentDir: resolveAuthAgentDir(agentDir),
|
|
238
313
|
});
|
|
239
314
|
}
|
|
240
|
-
|
|
315
|
+
// PB-specific: nvidia support
|
|
316
|
+
export const NVIDIA_DEFAULT_MODEL_REF = "nvidia/llama-3.3-nemotron-super-49b-v1";
|
|
317
|
+
export async function setNvidiaApiKey(key, agentDir) {
|
|
241
318
|
upsertAuthProfile({
|
|
242
319
|
profileId: "nvidia:default",
|
|
243
320
|
credential: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { SYNTHETIC_DEFAULT_MODEL_ID, SYNTHETIC_DEFAULT_MODEL_REF, } from "../agents/synthetic-models.js";
|
|
2
2
|
export { VENICE_DEFAULT_MODEL_ID, VENICE_DEFAULT_MODEL_REF } from "../agents/venice-models.js";
|
|
3
3
|
export { applyAuthProfileConfig, applyCloudflareAiGatewayConfig, applyCloudflareAiGatewayProviderConfig, applyHuggingfaceConfig, applyHuggingfaceProviderConfig, applyQianfanConfig, applyQianfanProviderConfig, applyKimiCodeConfig, applyKimiCodeProviderConfig, applyLitellmConfig, applyLitellmProviderConfig, LITELLM_BASE_URL, LITELLM_DEFAULT_MODEL_ID, applyMoonshotConfig, applyMoonshotConfigCn, applyMoonshotProviderConfig, applyMoonshotProviderConfigCn, applyOpenrouterConfig, applyOpenrouterProviderConfig, applySyntheticConfig, applySyntheticProviderConfig, applyTogetherConfig, applyTogetherProviderConfig, applyVeniceConfig, applyVeniceProviderConfig, applyVercelAiGatewayConfig, applyVercelAiGatewayProviderConfig, applyNvidiaConfig, applyNvidiaProviderConfig, applyXaiConfig, applyXaiProviderConfig, applyXiaomiConfig, applyXiaomiProviderConfig, applyZaiConfig, applyZaiProviderConfig, } from "./onboard-auth.config-core.js";
|
|
4
|
-
export { applyMinimaxApiConfig, applyMinimaxApiProviderConfig, applyMinimaxConfig, applyMinimaxHostedConfig, applyMinimaxHostedProviderConfig, applyMinimaxProviderConfig, } from "./onboard-auth.config-minimax.js";
|
|
4
|
+
export { applyMinimaxApiConfig, applyMinimaxApiConfigCn, applyMinimaxApiProviderConfig, applyMinimaxApiProviderConfigCn, applyMinimaxConfig, applyMinimaxHostedConfig, applyMinimaxHostedProviderConfig, applyMinimaxProviderConfig, } from "./onboard-auth.config-minimax.js";
|
|
5
5
|
export { applyOpencodeZenConfig, applyOpencodeZenProviderConfig, } from "./onboard-auth.config-opencode.js";
|
|
6
6
|
export { CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF, HUGGINGFACE_DEFAULT_MODEL_REF, LITELLM_DEFAULT_MODEL_REF, OPENROUTER_DEFAULT_MODEL_REF, setAnthropicApiKey, setCloudflareAiGatewayConfig, setQianfanApiKey, setGeminiApiKey, setHuggingfaceApiKey, setKimiCodingApiKey, setLitellmApiKey, setMinimaxApiKey, setMoonshotApiKey, setOpencodeZenApiKey, setOpenrouterApiKey, setSyntheticApiKey, setTogetherApiKey, setVeniceApiKey, setVercelAiGatewayApiKey, setXiaomiApiKey, setZaiApiKey, setNvidiaApiKey, setXaiApiKey, writeOAuthCredentials, VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF, NVIDIA_DEFAULT_MODEL_REF, XIAOMI_DEFAULT_MODEL_REF, ZAI_DEFAULT_MODEL_REF, TOGETHER_DEFAULT_MODEL_REF, XAI_DEFAULT_MODEL_REF, } from "./onboard-auth.credentials.js";
|
|
7
7
|
export { buildMinimaxApiModelDefinition, buildMinimaxModelDefinition, buildMoonshotModelDefinition, buildZaiModelDefinition, DEFAULT_MINIMAX_BASE_URL, MOONSHOT_CN_BASE_URL, QIANFAN_BASE_URL, QIANFAN_DEFAULT_MODEL_ID, QIANFAN_DEFAULT_MODEL_REF, KIMI_CODING_MODEL_ID, KIMI_CODING_MODEL_REF, MINIMAX_API_BASE_URL, MINIMAX_HOSTED_MODEL_ID, MINIMAX_HOSTED_MODEL_REF, MOONSHOT_BASE_URL, MOONSHOT_DEFAULT_MODEL_ID, MOONSHOT_DEFAULT_MODEL_REF, buildNvidiaModelDefinition, NVIDIA_BASE_URL, NVIDIA_DEFAULT_MODEL_ID, resolveZaiBaseUrl, ZAI_CODING_CN_BASE_URL, ZAI_DEFAULT_MODEL_ID, ZAI_CODING_GLOBAL_BASE_URL, ZAI_CN_BASE_URL, ZAI_GLOBAL_BASE_URL, } from "./onboard-auth.models.js";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { QIANFAN_BASE_URL, QIANFAN_DEFAULT_MODEL_ID } from "../agents/models-config.providers.js";
|
|
2
2
|
export const DEFAULT_MINIMAX_BASE_URL = "https://api.minimax.io/v1";
|
|
3
3
|
export const MINIMAX_API_BASE_URL = "https://api.minimax.io/anthropic";
|
|
4
|
+
export const MINIMAX_CN_API_BASE_URL = "https://api.minimaxi.com/anthropic";
|
|
4
5
|
export const MINIMAX_HOSTED_MODEL_ID = "MiniMax-M2.1";
|
|
5
6
|
export const MINIMAX_HOSTED_MODEL_REF = `minimax/${MINIMAX_HOSTED_MODEL_ID}`;
|
|
6
7
|
export const DEFAULT_MINIMAX_CONTEXT_WINDOW = 200000;
|
|
@@ -34,12 +35,12 @@ export function resolveZaiBaseUrl(endpoint) {
|
|
|
34
35
|
return ZAI_GLOBAL_BASE_URL;
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
|
-
// Pricing
|
|
38
|
+
// Pricing per 1M tokens (USD) \u2014 https://platform.minimaxi.com/document/Price
|
|
38
39
|
export const MINIMAX_API_COST = {
|
|
39
|
-
input:
|
|
40
|
-
output:
|
|
41
|
-
cacheRead:
|
|
42
|
-
cacheWrite:
|
|
40
|
+
input: 0.3,
|
|
41
|
+
output: 1.2,
|
|
42
|
+
cacheRead: 0.03,
|
|
43
|
+
cacheWrite: 0.12,
|
|
43
44
|
};
|
|
44
45
|
export const MINIMAX_HOSTED_COST = {
|
|
45
46
|
input: 0,
|
|
@@ -4,7 +4,7 @@ import { formatCliCommand } from "../cli/command-format.js";
|
|
|
4
4
|
export async function setupInternalHooks(cfg, runtime, prompter) {
|
|
5
5
|
await prompter.note([
|
|
6
6
|
"Hooks let you automate actions when agent commands are issued.",
|
|
7
|
-
"Example: Save session context to memory when you issue /new.",
|
|
7
|
+
"Example: Save session context to memory when you issue /new or /reset.",
|
|
8
8
|
"",
|
|
9
9
|
"Learn more: https://docs.molt.bot/hooks",
|
|
10
10
|
].join("\n"), "Hooks");
|
|
@@ -10,31 +10,36 @@ async function resolveApiKeyFromProfiles(params) {
|
|
|
10
10
|
});
|
|
11
11
|
for (const profileId of order) {
|
|
12
12
|
const cred = store.profiles[profileId];
|
|
13
|
-
if (cred?.type !== "api_key")
|
|
13
|
+
if (cred?.type !== "api_key") {
|
|
14
14
|
continue;
|
|
15
|
+
}
|
|
15
16
|
const resolved = await resolveApiKeyForProfile({
|
|
16
17
|
cfg: params.cfg,
|
|
17
18
|
store,
|
|
18
19
|
profileId,
|
|
19
20
|
agentDir: params.agentDir,
|
|
20
21
|
});
|
|
21
|
-
if (resolved?.apiKey)
|
|
22
|
+
if (resolved?.apiKey) {
|
|
22
23
|
return resolved.apiKey;
|
|
24
|
+
}
|
|
23
25
|
}
|
|
24
26
|
return null;
|
|
25
27
|
}
|
|
26
28
|
export async function resolveNonInteractiveApiKey(params) {
|
|
27
29
|
const flagKey = normalizeOptionalSecretInput(params.flagValue);
|
|
28
|
-
if (flagKey)
|
|
30
|
+
if (flagKey) {
|
|
29
31
|
return { key: flagKey, source: "flag" };
|
|
32
|
+
}
|
|
30
33
|
const envResolved = resolveEnvApiKey(params.provider);
|
|
31
|
-
if (envResolved?.apiKey)
|
|
34
|
+
if (envResolved?.apiKey) {
|
|
32
35
|
return { key: envResolved.apiKey, source: "env" };
|
|
36
|
+
}
|
|
33
37
|
const explicitEnvVar = params.envVarName?.trim();
|
|
34
38
|
if (explicitEnvVar) {
|
|
35
39
|
const explicitEnvKey = normalizeOptionalSecretInput(process.env[explicitEnvVar]);
|
|
36
|
-
if (explicitEnvKey)
|
|
40
|
+
if (explicitEnvKey) {
|
|
37
41
|
return { key: explicitEnvKey, source: "env" };
|
|
42
|
+
}
|
|
38
43
|
}
|
|
39
44
|
if (params.allowProfile ?? true) {
|
|
40
45
|
const profileKey = await resolveApiKeyFromProfiles({
|
|
@@ -42,11 +47,13 @@ export async function resolveNonInteractiveApiKey(params) {
|
|
|
42
47
|
cfg: params.cfg,
|
|
43
48
|
agentDir: params.agentDir,
|
|
44
49
|
});
|
|
45
|
-
if (profileKey)
|
|
50
|
+
if (profileKey) {
|
|
46
51
|
return { key: profileKey, source: "profile" };
|
|
52
|
+
}
|
|
47
53
|
}
|
|
48
|
-
if (params.required === false)
|
|
54
|
+
if (params.required === false) {
|
|
49
55
|
return null;
|
|
56
|
+
}
|
|
50
57
|
const profileHint = params.allowProfile === false ? "" : `, or existing ${params.provider} API-key profile`;
|
|
51
58
|
params.runtime.error(`Missing ${params.flagName} (or ${params.envVar} in env${profileHint}).`);
|
|
52
59
|
params.runtime.exit(1);
|
|
@@ -6,7 +6,8 @@ import { shortenHomePath } from "../../../utils.js";
|
|
|
6
6
|
import { normalizeSecretInput } from "../../../utils/normalize-secret-input.js";
|
|
7
7
|
import { buildTokenProfileId, validateAnthropicSetupToken } from "../../auth-token.js";
|
|
8
8
|
import { applyGoogleGeminiModelDefault } from "../../google-gemini-model-default.js";
|
|
9
|
-
import {
|
|
9
|
+
import { applyPrimaryModel } from "../../model-picker.js";
|
|
10
|
+
import { applyAuthProfileConfig, applyCloudflareAiGatewayConfig, applyQianfanConfig, applyKimiCodeConfig, applyMinimaxApiConfig, applyMinimaxApiConfigCn, applyMinimaxConfig, applyMoonshotConfig, applyMoonshotConfigCn, applyOpencodeZenConfig, applyOpenrouterConfig, applySyntheticConfig, applyVeniceConfig, applyTogetherConfig, applyHuggingfaceConfig, applyVercelAiGatewayConfig, applyLitellmConfig, applyXaiConfig, applyXiaomiConfig, applyZaiConfig, setAnthropicApiKey, setCloudflareAiGatewayConfig, setQianfanApiKey, setGeminiApiKey, setKimiCodingApiKey, setLitellmApiKey, setMinimaxApiKey, setMoonshotApiKey, setOpencodeZenApiKey, setOpenrouterApiKey, setSyntheticApiKey, setXaiApiKey, setVeniceApiKey, setTogetherApiKey, setHuggingfaceApiKey, setVercelAiGatewayApiKey, setXiaomiApiKey, setZaiApiKey, } from "../../onboard-auth.js";
|
|
10
11
|
import { applyCustomApiConfig, CustomApiError, parseNonInteractiveCustomApiFlags, resolveCustomProviderId, } from "../../onboard-custom.js";
|
|
11
12
|
import { applyOpenAIConfig } from "../../openai-model-default.js";
|
|
12
13
|
import { detectZaiEndpoint } from "../../zai-endpoint-detect.js";
|
|
@@ -232,6 +233,50 @@ export async function applyNonInteractiveAuthChoice(params) {
|
|
|
232
233
|
});
|
|
233
234
|
return applyXaiConfig(nextConfig);
|
|
234
235
|
}
|
|
236
|
+
if (authChoice === "volcengine-api-key") {
|
|
237
|
+
const resolved = await resolveNonInteractiveApiKey({
|
|
238
|
+
provider: "volcengine",
|
|
239
|
+
cfg: baseConfig,
|
|
240
|
+
flagValue: opts.volcengineApiKey,
|
|
241
|
+
flagName: "--volcengine-api-key",
|
|
242
|
+
envVar: "VOLCANO_ENGINE_API_KEY",
|
|
243
|
+
runtime,
|
|
244
|
+
});
|
|
245
|
+
if (!resolved) {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
if (resolved.source !== "profile") {
|
|
249
|
+
const result = upsertSharedEnvVar({
|
|
250
|
+
key: "VOLCANO_ENGINE_API_KEY",
|
|
251
|
+
value: resolved.key,
|
|
252
|
+
});
|
|
253
|
+
process.env.VOLCANO_ENGINE_API_KEY = resolved.key;
|
|
254
|
+
runtime.log(`Saved VOLCANO_ENGINE_API_KEY to ${shortenHomePath(result.path)}`);
|
|
255
|
+
}
|
|
256
|
+
return applyPrimaryModel(nextConfig, "volcengine-plan/ark-code-latest");
|
|
257
|
+
}
|
|
258
|
+
if (authChoice === "byteplus-api-key") {
|
|
259
|
+
const resolved = await resolveNonInteractiveApiKey({
|
|
260
|
+
provider: "byteplus",
|
|
261
|
+
cfg: baseConfig,
|
|
262
|
+
flagValue: opts.byteplusApiKey,
|
|
263
|
+
flagName: "--byteplus-api-key",
|
|
264
|
+
envVar: "BYTEPLUS_API_KEY",
|
|
265
|
+
runtime,
|
|
266
|
+
});
|
|
267
|
+
if (!resolved) {
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
270
|
+
if (resolved.source !== "profile") {
|
|
271
|
+
const result = upsertSharedEnvVar({
|
|
272
|
+
key: "BYTEPLUS_API_KEY",
|
|
273
|
+
value: resolved.key,
|
|
274
|
+
});
|
|
275
|
+
process.env.BYTEPLUS_API_KEY = resolved.key;
|
|
276
|
+
runtime.log(`Saved BYTEPLUS_API_KEY to ${shortenHomePath(result.path)}`);
|
|
277
|
+
}
|
|
278
|
+
return applyPrimaryModel(nextConfig, "byteplus-plan/ark-code-latest");
|
|
279
|
+
}
|
|
235
280
|
if (authChoice === "qianfan-api-key") {
|
|
236
281
|
const resolved = await resolveNonInteractiveApiKey({
|
|
237
282
|
provider: "qianfan",
|
|
@@ -374,7 +419,7 @@ export async function applyNonInteractiveAuthChoice(params) {
|
|
|
374
419
|
gatewayId,
|
|
375
420
|
});
|
|
376
421
|
}
|
|
377
|
-
|
|
422
|
+
const applyMoonshotApiKeyChoice = async (applyConfig) => {
|
|
378
423
|
const resolved = await resolveNonInteractiveApiKey({
|
|
379
424
|
provider: "moonshot",
|
|
380
425
|
cfg: baseConfig,
|
|
@@ -394,29 +439,13 @@ export async function applyNonInteractiveAuthChoice(params) {
|
|
|
394
439
|
provider: "moonshot",
|
|
395
440
|
mode: "api_key",
|
|
396
441
|
});
|
|
397
|
-
return
|
|
442
|
+
return applyConfig(nextConfig);
|
|
443
|
+
};
|
|
444
|
+
if (authChoice === "moonshot-api-key") {
|
|
445
|
+
return await applyMoonshotApiKeyChoice(applyMoonshotConfig);
|
|
398
446
|
}
|
|
399
447
|
if (authChoice === "moonshot-api-key-cn") {
|
|
400
|
-
|
|
401
|
-
provider: "moonshot",
|
|
402
|
-
cfg: baseConfig,
|
|
403
|
-
flagValue: opts.moonshotApiKey,
|
|
404
|
-
flagName: "--moonshot-api-key",
|
|
405
|
-
envVar: "MOONSHOT_API_KEY",
|
|
406
|
-
runtime,
|
|
407
|
-
});
|
|
408
|
-
if (!resolved) {
|
|
409
|
-
return null;
|
|
410
|
-
}
|
|
411
|
-
if (resolved.source !== "profile") {
|
|
412
|
-
await setMoonshotApiKey(resolved.key);
|
|
413
|
-
}
|
|
414
|
-
nextConfig = applyAuthProfileConfig(nextConfig, {
|
|
415
|
-
profileId: "moonshot:default",
|
|
416
|
-
provider: "moonshot",
|
|
417
|
-
mode: "api_key",
|
|
418
|
-
});
|
|
419
|
-
return applyMoonshotConfigCn(nextConfig);
|
|
448
|
+
return await applyMoonshotApiKeyChoice(applyMoonshotConfigCn);
|
|
420
449
|
}
|
|
421
450
|
if (authChoice === "kimi-code-api-key") {
|
|
422
451
|
const resolved = await resolveNonInteractiveApiKey({
|
|
@@ -486,9 +515,13 @@ export async function applyNonInteractiveAuthChoice(params) {
|
|
|
486
515
|
}
|
|
487
516
|
if (authChoice === "minimax-cloud" ||
|
|
488
517
|
authChoice === "minimax-api" ||
|
|
518
|
+
authChoice === "minimax-api-key-cn" ||
|
|
489
519
|
authChoice === "minimax-api-lightning") {
|
|
520
|
+
const isCn = authChoice === "minimax-api-key-cn";
|
|
521
|
+
const providerId = isCn ? "minimax-cn" : "minimax";
|
|
522
|
+
const profileId = `${providerId}:default`;
|
|
490
523
|
const resolved = await resolveNonInteractiveApiKey({
|
|
491
|
-
provider:
|
|
524
|
+
provider: providerId,
|
|
492
525
|
cfg: baseConfig,
|
|
493
526
|
flagValue: opts.minimaxApiKey,
|
|
494
527
|
flagName: "--minimax-api-key",
|
|
@@ -499,15 +532,17 @@ export async function applyNonInteractiveAuthChoice(params) {
|
|
|
499
532
|
return null;
|
|
500
533
|
}
|
|
501
534
|
if (resolved.source !== "profile") {
|
|
502
|
-
await setMinimaxApiKey(resolved.key);
|
|
535
|
+
await setMinimaxApiKey(resolved.key, undefined, profileId);
|
|
503
536
|
}
|
|
504
537
|
nextConfig = applyAuthProfileConfig(nextConfig, {
|
|
505
|
-
profileId
|
|
506
|
-
provider:
|
|
538
|
+
profileId,
|
|
539
|
+
provider: providerId,
|
|
507
540
|
mode: "api_key",
|
|
508
541
|
});
|
|
509
|
-
const modelId = authChoice === "minimax-api-lightning" ? "MiniMax-M2.
|
|
510
|
-
return
|
|
542
|
+
const modelId = authChoice === "minimax-api-lightning" ? "MiniMax-M2.5-Lightning" : "MiniMax-M2.5";
|
|
543
|
+
return isCn
|
|
544
|
+
? applyMinimaxApiConfigCn(nextConfig, modelId)
|
|
545
|
+
: applyMinimaxApiConfig(nextConfig, modelId);
|
|
511
546
|
}
|
|
512
547
|
if (authChoice === "minimax") {
|
|
513
548
|
return applyMinimaxConfig(nextConfig);
|
|
@@ -578,26 +613,6 @@ export async function applyNonInteractiveAuthChoice(params) {
|
|
|
578
613
|
});
|
|
579
614
|
return applyHuggingfaceConfig(nextConfig);
|
|
580
615
|
}
|
|
581
|
-
if (authChoice === "nvidia-api-key") {
|
|
582
|
-
const resolved = await resolveNonInteractiveApiKey({
|
|
583
|
-
provider: "nvidia",
|
|
584
|
-
cfg: baseConfig,
|
|
585
|
-
flagValue: opts.nvidiaApiKey,
|
|
586
|
-
flagName: "--nvidia-api-key",
|
|
587
|
-
envVar: "NVIDIA_API_KEY",
|
|
588
|
-
runtime,
|
|
589
|
-
});
|
|
590
|
-
if (!resolved)
|
|
591
|
-
return null;
|
|
592
|
-
if (resolved.source !== "profile")
|
|
593
|
-
setNvidiaApiKey(resolved.key);
|
|
594
|
-
nextConfig = applyAuthProfileConfig(nextConfig, {
|
|
595
|
-
profileId: "nvidia:default",
|
|
596
|
-
provider: "nvidia",
|
|
597
|
-
mode: "api_key",
|
|
598
|
-
});
|
|
599
|
-
return applyNvidiaConfig(nextConfig);
|
|
600
|
-
}
|
|
601
616
|
if (authChoice === "custom-api-key") {
|
|
602
617
|
try {
|
|
603
618
|
const customAuth = parseNonInteractiveCustomApiFlags({
|
|
@@ -133,4 +133,18 @@ export const ONBOARD_PROVIDER_AUTH_FLAGS = [
|
|
|
133
133
|
cliOption: "--qianfan-api-key <key>",
|
|
134
134
|
description: "QIANFAN API key",
|
|
135
135
|
},
|
|
136
|
+
{
|
|
137
|
+
optionKey: "volcengineApiKey",
|
|
138
|
+
authChoice: "volcengine-api-key",
|
|
139
|
+
cliFlag: "--volcengine-api-key",
|
|
140
|
+
cliOption: "--volcengine-api-key <key>",
|
|
141
|
+
description: "Volcano Engine API key",
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
optionKey: "byteplusApiKey",
|
|
145
|
+
authChoice: "byteplus-api-key",
|
|
146
|
+
cliFlag: "--byteplus-api-key",
|
|
147
|
+
cliOption: "--byteplus-api-key <key>",
|
|
148
|
+
description: "BytePlus API key",
|
|
149
|
+
},
|
|
136
150
|
];
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import { discoverGatewayBeacons } from "../infra/bonjour-discovery.js";
|
|
2
|
+
import { resolveWideAreaDiscoveryDomain } from "../infra/widearea-dns.js";
|
|
2
3
|
import { detectBinary } from "./onboard-helpers.js";
|
|
3
4
|
const DEFAULT_GATEWAY_URL = "ws://127.0.0.1:18789";
|
|
4
5
|
function pickHost(beacon) {
|
|
5
|
-
|
|
6
|
+
// Security: TXT is unauthenticated. Prefer the resolved service endpoint host.
|
|
7
|
+
return beacon.host || beacon.tailnetDns || beacon.lanHost;
|
|
6
8
|
}
|
|
7
9
|
function buildLabel(beacon) {
|
|
8
10
|
const host = pickHost(beacon);
|
|
9
|
-
|
|
11
|
+
// Security: Prefer the resolved service endpoint port.
|
|
12
|
+
const port = beacon.port ?? beacon.gatewayPort ?? 18789;
|
|
10
13
|
const title = beacon.displayName ?? beacon.instanceName;
|
|
11
14
|
const hint = host ? `${host}:${port}` : "host unknown";
|
|
12
15
|
return `${title} (${hint})`;
|
|
13
16
|
}
|
|
14
17
|
function ensureWsUrl(value) {
|
|
15
18
|
const trimmed = value.trim();
|
|
16
|
-
if (!trimmed)
|
|
19
|
+
if (!trimmed) {
|
|
17
20
|
return DEFAULT_GATEWAY_URL;
|
|
21
|
+
}
|
|
18
22
|
return trimmed;
|
|
19
23
|
}
|
|
20
24
|
export async function promptRemoteGatewayConfig(cfg, prompter) {
|
|
@@ -34,8 +38,11 @@ export async function promptRemoteGatewayConfig(cfg, prompter) {
|
|
|
34
38
|
].join("\n"), "Discovery");
|
|
35
39
|
}
|
|
36
40
|
if (wantsDiscover) {
|
|
41
|
+
const wideAreaDomain = resolveWideAreaDiscoveryDomain({
|
|
42
|
+
configDomain: cfg.discovery?.wideArea?.domain,
|
|
43
|
+
});
|
|
37
44
|
const spin = prompter.progress("Searching for gateways…");
|
|
38
|
-
const beacons = await discoverGatewayBeacons({ timeoutMs: 2000 });
|
|
45
|
+
const beacons = await discoverGatewayBeacons({ timeoutMs: 2000, wideAreaDomain });
|
|
39
46
|
spin.stop(beacons.length > 0 ? `Found ${beacons.length} gateway(s)` : "No gateways found");
|
|
40
47
|
if (beacons.length > 0) {
|
|
41
48
|
const selection = await prompter.select({
|
|
@@ -56,7 +63,7 @@ export async function promptRemoteGatewayConfig(cfg, prompter) {
|
|
|
56
63
|
}
|
|
57
64
|
if (selectedBeacon) {
|
|
58
65
|
const host = pickHost(selectedBeacon);
|
|
59
|
-
const port = selectedBeacon.gatewayPort ?? 18789;
|
|
66
|
+
const port = selectedBeacon.port ?? selectedBeacon.gatewayPort ?? 18789;
|
|
60
67
|
if (host) {
|
|
61
68
|
const mode = await prompter.select({
|
|
62
69
|
message: "Connection method",
|
|
@@ -89,13 +96,13 @@ export async function promptRemoteGatewayConfig(cfg, prompter) {
|
|
|
89
96
|
: "URL must start with ws:// or wss://",
|
|
90
97
|
});
|
|
91
98
|
const url = ensureWsUrl(String(urlInput));
|
|
92
|
-
const authChoice =
|
|
99
|
+
const authChoice = await prompter.select({
|
|
93
100
|
message: "Gateway auth",
|
|
94
101
|
options: [
|
|
95
102
|
{ value: "token", label: "Token (recommended)" },
|
|
96
103
|
{ value: "off", label: "No auth" },
|
|
97
104
|
],
|
|
98
|
-
})
|
|
105
|
+
});
|
|
99
106
|
let token = cfg.gateway?.remote?.token ?? "";
|
|
100
107
|
if (authChoice === "token") {
|
|
101
108
|
token = String(await prompter.text({
|
package/dist/commands/onboard.js
CHANGED
|
@@ -1,31 +1,28 @@
|
|
|
1
|
+
import { formatCliCommand } from "../cli/command-format.js";
|
|
1
2
|
import { readConfigFileSnapshot } from "../config/config.js";
|
|
2
3
|
import { assertSupportedRuntime } from "../infra/runtime-guard.js";
|
|
3
4
|
import { defaultRuntime } from "../runtime.js";
|
|
4
5
|
import { resolveUserPath } from "../utils.js";
|
|
6
|
+
import { isDeprecatedAuthChoice, normalizeLegacyOnboardAuthChoice } from "./auth-choice-legacy.js";
|
|
5
7
|
import { DEFAULT_WORKSPACE, handleReset } from "./onboard-helpers.js";
|
|
6
8
|
import { runInteractiveOnboarding } from "./onboard-interactive.js";
|
|
7
9
|
import { runNonInteractiveOnboarding } from "./onboard-non-interactive.js";
|
|
8
|
-
import { formatCliCommand } from "../cli/command-format.js";
|
|
9
10
|
export async function onboardCommand(opts, runtime = defaultRuntime) {
|
|
10
11
|
assertSupportedRuntime(runtime);
|
|
11
|
-
const
|
|
12
|
-
const normalizedAuthChoice =
|
|
13
|
-
|
|
14
|
-
: authChoice === "codex-cli"
|
|
15
|
-
? "openai-codex"
|
|
16
|
-
: authChoice;
|
|
17
|
-
if (opts.nonInteractive && (authChoice === "claude-cli" || authChoice === "codex-cli")) {
|
|
12
|
+
const originalAuthChoice = opts.authChoice;
|
|
13
|
+
const normalizedAuthChoice = normalizeLegacyOnboardAuthChoice(originalAuthChoice);
|
|
14
|
+
if (opts.nonInteractive && isDeprecatedAuthChoice(originalAuthChoice)) {
|
|
18
15
|
runtime.error([
|
|
19
|
-
`Auth choice "${
|
|
16
|
+
`Auth choice "${String(originalAuthChoice)}" is deprecated.`,
|
|
20
17
|
'Use "--auth-choice token" (Anthropic setup-token) or "--auth-choice openai-codex".',
|
|
21
18
|
].join("\n"));
|
|
22
19
|
runtime.exit(1);
|
|
23
20
|
return;
|
|
24
21
|
}
|
|
25
|
-
if (
|
|
22
|
+
if (originalAuthChoice === "claude-cli") {
|
|
26
23
|
runtime.log('Auth choice "claude-cli" is deprecated; using setup-token flow instead.');
|
|
27
24
|
}
|
|
28
|
-
if (
|
|
25
|
+
if (originalAuthChoice === "codex-cli") {
|
|
29
26
|
runtime.log('Auth choice "codex-cli" is deprecated; using OpenAI Codex OAuth instead.');
|
|
30
27
|
}
|
|
31
28
|
const flow = opts.flow === "manual" ? "advanced" : opts.flow;
|
|
@@ -49,8 +46,9 @@ export async function onboardCommand(opts, runtime = defaultRuntime) {
|
|
|
49
46
|
}
|
|
50
47
|
if (process.platform === "win32") {
|
|
51
48
|
runtime.log([
|
|
52
|
-
"Windows detected
|
|
53
|
-
"
|
|
49
|
+
"Windows detected — Pool Bot runs great on WSL2!",
|
|
50
|
+
"Native Windows might be trickier.",
|
|
51
|
+
"Quick setup: wsl --install (one command, one reboot)",
|
|
54
52
|
"Guide: https://docs.molt.bot/windows",
|
|
55
53
|
].join("\n"));
|
|
56
54
|
}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Display utilities for sandbox CLI
|
|
3
3
|
*/
|
|
4
4
|
import { formatCliCommand } from "../cli/command-format.js";
|
|
5
|
-
import {
|
|
5
|
+
import { formatDurationCompact } from "../infra/format-time/format-duration.js";
|
|
6
|
+
import { formatImageMatch, formatSimpleStatus, formatStatus } from "./sandbox-formatters.js";
|
|
6
7
|
function displayItems(items, config, runtime) {
|
|
7
8
|
if (items.length === 0) {
|
|
8
9
|
runtime.log(config.emptyMessage);
|
|
@@ -21,8 +22,8 @@ export function displayContainers(containers, runtime) {
|
|
|
21
22
|
rt.log(` ${container.containerName}`);
|
|
22
23
|
rt.log(` Status: ${formatStatus(container.running)}`);
|
|
23
24
|
rt.log(` Image: ${container.image} ${formatImageMatch(container.imageMatch)}`);
|
|
24
|
-
rt.log(` Age: ${
|
|
25
|
-
rt.log(` Idle: ${
|
|
25
|
+
rt.log(` Age: ${formatDurationCompact(Date.now() - container.createdAtMs, { spaced: true }) ?? "0s"}`);
|
|
26
|
+
rt.log(` Idle: ${formatDurationCompact(Date.now() - container.lastUsedAtMs, { spaced: true }) ?? "0s"}`);
|
|
26
27
|
rt.log(` Session: ${container.sessionKey}`);
|
|
27
28
|
rt.log("");
|
|
28
29
|
},
|
|
@@ -40,8 +41,8 @@ export function displayBrowsers(browsers, runtime) {
|
|
|
40
41
|
if (browser.noVncPort) {
|
|
41
42
|
rt.log(` noVNC: ${browser.noVncPort}`);
|
|
42
43
|
}
|
|
43
|
-
rt.log(` Age: ${
|
|
44
|
-
rt.log(` Idle: ${
|
|
44
|
+
rt.log(` Age: ${formatDurationCompact(Date.now() - browser.createdAtMs, { spaced: true }) ?? "0s"}`);
|
|
45
|
+
rt.log(` Idle: ${formatDurationCompact(Date.now() - browser.lastUsedAtMs, { spaced: true }) ?? "0s"}`);
|
|
45
46
|
rt.log(` Session: ${browser.sessionKey}`);
|
|
46
47
|
rt.log("");
|
|
47
48
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolveGatewayLogPaths } from "../../daemon/launchd.js";
|
|
2
2
|
import { formatPortDiagnostics } from "../../infra/ports.js";
|
|
3
3
|
import { summarizeRestartSentinel, } from "../../infra/restart-sentinel.js";
|
|
4
|
-
import {
|
|
4
|
+
import { formatTimeAgo, redactSecrets } from "./format.js";
|
|
5
5
|
import { readFileTailLines, summarizeLogTail } from "./gateway.js";
|
|
6
6
|
export async function appendStatusAllDiagnosis(params) {
|
|
7
7
|
const { lines, muted, ok, warn, fail } = params;
|
|
@@ -11,7 +11,7 @@ export async function appendStatusAllDiagnosis(params) {
|
|
|
11
11
|
lines.push(`${icon} ${colored}`);
|
|
12
12
|
};
|
|
13
13
|
lines.push("");
|
|
14
|
-
lines.push(
|
|
14
|
+
lines.push(muted("Gateway connection details:"));
|
|
15
15
|
for (const line of redactSecrets(params.connectionDetailsForReport)
|
|
16
16
|
.split("\n")
|
|
17
17
|
.map((l) => l.trimEnd())) {
|
|
@@ -40,7 +40,7 @@ export async function appendStatusAllDiagnosis(params) {
|
|
|
40
40
|
}
|
|
41
41
|
if (params.sentinel?.payload) {
|
|
42
42
|
emitCheck("Restart sentinel present", "warn");
|
|
43
|
-
lines.push(` ${muted(`${summarizeRestartSentinel(params.sentinel.payload)} · ${
|
|
43
|
+
lines.push(` ${muted(`${summarizeRestartSentinel(params.sentinel.payload)} · ${formatTimeAgo(Date.now() - params.sentinel.payload.ts)}`)}`);
|
|
44
44
|
}
|
|
45
45
|
else {
|
|
46
46
|
emitCheck("Restart sentinel: none", "ok");
|
|
@@ -49,7 +49,7 @@ export async function appendStatusAllDiagnosis(params) {
|
|
|
49
49
|
const isTrivialLastErr = lastErrClean.length < 8 || lastErrClean === "}" || lastErrClean === "{";
|
|
50
50
|
if (lastErrClean && !isTrivialLastErr) {
|
|
51
51
|
lines.push("");
|
|
52
|
-
lines.push(
|
|
52
|
+
lines.push(muted("Gateway last log line:"));
|
|
53
53
|
lines.push(` ${muted(redactSecrets(lastErrClean))}`);
|
|
54
54
|
}
|
|
55
55
|
if (params.portUsage) {
|
|
@@ -101,7 +101,7 @@ export async function appendStatusAllDiagnosis(params) {
|
|
|
101
101
|
]);
|
|
102
102
|
if (stderrTail.length > 0 || stdoutTail.length > 0) {
|
|
103
103
|
lines.push("");
|
|
104
|
-
lines.push(
|
|
104
|
+
lines.push(muted(`Gateway logs (tail, summarized): ${logPaths.logDir}`));
|
|
105
105
|
lines.push(` ${muted(`# stderr: ${logPaths.stderrPath}`)}`);
|
|
106
106
|
for (const line of summarizeLogTail(stderrTail, { maxLines: 22 }).map(redactSecrets)) {
|
|
107
107
|
lines.push(` ${muted(line)}`);
|
|
@@ -127,16 +127,20 @@ export async function appendStatusAllDiagnosis(params) {
|
|
|
127
127
|
emitCheck(`Channel issues skipped (gateway ${params.gatewayReachable ? "query failed" : "unreachable"})`, "warn");
|
|
128
128
|
}
|
|
129
129
|
const healthErr = (() => {
|
|
130
|
-
if (!params.health || typeof params.health !== "object")
|
|
130
|
+
if (!params.health || typeof params.health !== "object") {
|
|
131
131
|
return "";
|
|
132
|
+
}
|
|
132
133
|
const record = params.health;
|
|
133
|
-
if (!("error" in record))
|
|
134
|
+
if (!("error" in record)) {
|
|
134
135
|
return "";
|
|
136
|
+
}
|
|
135
137
|
const value = record.error;
|
|
136
|
-
if (!value)
|
|
138
|
+
if (!value) {
|
|
137
139
|
return "";
|
|
138
|
-
|
|
140
|
+
}
|
|
141
|
+
if (typeof value === "string") {
|
|
139
142
|
return value;
|
|
143
|
+
}
|
|
140
144
|
try {
|
|
141
145
|
return JSON.stringify(value, null, 2);
|
|
142
146
|
}
|
|
@@ -146,7 +150,7 @@ export async function appendStatusAllDiagnosis(params) {
|
|
|
146
150
|
})();
|
|
147
151
|
if (healthErr) {
|
|
148
152
|
lines.push("");
|
|
149
|
-
lines.push(
|
|
153
|
+
lines.push(muted("Gateway health:"));
|
|
150
154
|
lines.push(` ${muted(redactSecrets(healthErr))}`);
|
|
151
155
|
}
|
|
152
156
|
lines.push("");
|