@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
|
@@ -4,6 +4,7 @@ import path from "node:path";
|
|
|
4
4
|
import { resolveDefaultAgentId } from "../agents/agent-scope.js";
|
|
5
5
|
import { resolveOAuthDir, resolveStateDir } from "../config/paths.js";
|
|
6
6
|
import { loadSessionStore, resolveMainSessionKey, resolveSessionFilePath, resolveSessionTranscriptsDirForAgent, resolveStorePath, } from "../config/sessions.js";
|
|
7
|
+
import { resolveRequiredHomeDir } from "../infra/home-dir.js";
|
|
7
8
|
import { note } from "../terminal/note.js";
|
|
8
9
|
import { shortenHomePath } from "../utils.js";
|
|
9
10
|
function existsDir(dir) {
|
|
@@ -64,15 +65,18 @@ function addUserRwx(mode) {
|
|
|
64
65
|
function countJsonlLines(filePath) {
|
|
65
66
|
try {
|
|
66
67
|
const raw = fs.readFileSync(filePath, "utf-8");
|
|
67
|
-
if (!raw)
|
|
68
|
+
if (!raw) {
|
|
68
69
|
return 0;
|
|
70
|
+
}
|
|
69
71
|
let count = 0;
|
|
70
72
|
for (let i = 0; i < raw.length; i += 1) {
|
|
71
|
-
if (raw[i] === "\n")
|
|
73
|
+
if (raw[i] === "\n") {
|
|
72
74
|
count += 1;
|
|
75
|
+
}
|
|
73
76
|
}
|
|
74
|
-
if (!raw.endsWith("\n"))
|
|
77
|
+
if (!raw.endsWith("\n")) {
|
|
75
78
|
count += 1;
|
|
79
|
+
}
|
|
76
80
|
return count;
|
|
77
81
|
}
|
|
78
82
|
catch {
|
|
@@ -92,24 +96,79 @@ function findOtherStateDirs(stateDir) {
|
|
|
92
96
|
continue;
|
|
93
97
|
}
|
|
94
98
|
for (const entry of entries) {
|
|
95
|
-
if (!entry.isDirectory())
|
|
99
|
+
if (!entry.isDirectory()) {
|
|
96
100
|
continue;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const candidate = path.resolve(root, entry.name, ".poolbot");
|
|
100
|
-
if (candidate === resolvedState)
|
|
101
|
+
}
|
|
102
|
+
if (entry.name.startsWith(".")) {
|
|
101
103
|
continue;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
}
|
|
105
|
+
const candidates = [".poolbot"].map((dir) => path.resolve(root, entry.name, dir));
|
|
106
|
+
for (const candidate of candidates) {
|
|
107
|
+
if (candidate === resolvedState) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (existsDir(candidate)) {
|
|
111
|
+
found.push(candidate);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
104
114
|
}
|
|
105
115
|
}
|
|
106
116
|
return found;
|
|
107
117
|
}
|
|
118
|
+
function isRecord(value) {
|
|
119
|
+
return typeof value === "object" && value !== null;
|
|
120
|
+
}
|
|
121
|
+
function isPairingPolicy(value) {
|
|
122
|
+
return typeof value === "string" && value.trim().toLowerCase() === "pairing";
|
|
123
|
+
}
|
|
124
|
+
function hasPairingPolicy(value) {
|
|
125
|
+
if (!isRecord(value)) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
if (isPairingPolicy(value.dmPolicy)) {
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
if (isRecord(value.dm) && isPairingPolicy(value.dm.policy)) {
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
if (!isRecord(value.accounts)) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
for (const accountCfg of Object.values(value.accounts)) {
|
|
138
|
+
if (hasPairingPolicy(accountCfg)) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
function shouldRequireOAuthDir(cfg, env) {
|
|
145
|
+
if (env.POOLBOT_OAUTH_DIR?.trim()) {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
const channels = cfg.channels;
|
|
149
|
+
if (!isRecord(channels)) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
// WhatsApp auth always uses the credentials tree.
|
|
153
|
+
if (isRecord(channels.whatsapp)) {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
// Pairing allowlists are persisted under credentials/<channel>-allowFrom.json.
|
|
157
|
+
for (const [channelId, channelCfg] of Object.entries(channels)) {
|
|
158
|
+
if (channelId === "defaults" || channelId === "modelByChannel") {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (hasPairingPolicy(channelCfg)) {
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
108
167
|
export async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
109
168
|
const warnings = [];
|
|
110
169
|
const changes = [];
|
|
111
170
|
const env = process.env;
|
|
112
|
-
const homedir = os.homedir;
|
|
171
|
+
const homedir = () => resolveRequiredHomeDir(env, os.homedir);
|
|
113
172
|
const stateDir = resolveStateDir(env, homedir);
|
|
114
173
|
const defaultStateDir = path.join(homedir(), ".poolbot");
|
|
115
174
|
const oauthDir = resolveOAuthDir(env, stateDir);
|
|
@@ -122,6 +181,7 @@ export async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
122
181
|
const displaySessionsDir = shortenHomePath(sessionsDir);
|
|
123
182
|
const displayStoreDir = shortenHomePath(storeDir);
|
|
124
183
|
const displayConfigPath = configPath ? shortenHomePath(configPath) : undefined;
|
|
184
|
+
const requireOAuthDir = shouldRequireOAuthDir(cfg, env);
|
|
125
185
|
let stateDirExists = existsDir(stateDir);
|
|
126
186
|
if (!stateDirExists) {
|
|
127
187
|
warnings.push(`- CRITICAL: state directory missing (${displayStateDir}). Sessions, credentials, logs, and config are stored there.`);
|
|
@@ -146,8 +206,9 @@ export async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
146
206
|
if (stateDirExists && !canWriteDir(stateDir)) {
|
|
147
207
|
warnings.push(`- State directory not writable (${displayStateDir}).`);
|
|
148
208
|
const hint = dirPermissionHint(stateDir);
|
|
149
|
-
if (hint)
|
|
209
|
+
if (hint) {
|
|
150
210
|
warnings.push(` ${hint}`);
|
|
211
|
+
}
|
|
151
212
|
const repair = await prompter.confirmSkipInNonInteractive({
|
|
152
213
|
message: `Repair permissions on ${displayStateDir}?`,
|
|
153
214
|
initialValue: true,
|
|
@@ -185,8 +246,10 @@ export async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
185
246
|
}
|
|
186
247
|
if (configPath && existsFile(configPath) && process.platform !== "win32") {
|
|
187
248
|
try {
|
|
249
|
+
const linkStat = fs.lstatSync(configPath);
|
|
188
250
|
const stat = fs.statSync(configPath);
|
|
189
|
-
|
|
251
|
+
const isSymlink = linkStat.isSymbolicLink();
|
|
252
|
+
if (!isSymlink && (stat.mode & 0o077) !== 0) {
|
|
190
253
|
warnings.push(`- Config file is group/world readable (${displayConfigPath ?? configPath}). Recommend chmod 600.`);
|
|
191
254
|
const tighten = await prompter.confirmSkipInNonInteractive({
|
|
192
255
|
message: `Tighten permissions on ${displayConfigPath ?? configPath} to 600?`,
|
|
@@ -206,14 +269,22 @@ export async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
206
269
|
const dirCandidates = new Map();
|
|
207
270
|
dirCandidates.set(sessionsDir, "Sessions dir");
|
|
208
271
|
dirCandidates.set(storeDir, "Session store dir");
|
|
209
|
-
|
|
272
|
+
if (requireOAuthDir) {
|
|
273
|
+
dirCandidates.set(oauthDir, "OAuth dir");
|
|
274
|
+
}
|
|
275
|
+
else if (!existsDir(oauthDir)) {
|
|
276
|
+
warnings.push(`- OAuth dir not present (${displayOauthDir}). Skipping create because no WhatsApp/pairing channel config is active.`);
|
|
277
|
+
}
|
|
210
278
|
const displayDirFor = (dir) => {
|
|
211
|
-
if (dir === sessionsDir)
|
|
279
|
+
if (dir === sessionsDir) {
|
|
212
280
|
return displaySessionsDir;
|
|
213
|
-
|
|
281
|
+
}
|
|
282
|
+
if (dir === storeDir) {
|
|
214
283
|
return displayStoreDir;
|
|
215
|
-
|
|
284
|
+
}
|
|
285
|
+
if (dir === oauthDir) {
|
|
216
286
|
return displayOauthDir;
|
|
287
|
+
}
|
|
217
288
|
return shortenHomePath(dir);
|
|
218
289
|
};
|
|
219
290
|
for (const [dir, label] of dirCandidates) {
|
|
@@ -238,8 +309,9 @@ export async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
238
309
|
if (!canWriteDir(dir)) {
|
|
239
310
|
warnings.push(`- ${label} not writable (${displayDir}).`);
|
|
240
311
|
const hint = dirPermissionHint(dir);
|
|
241
|
-
if (hint)
|
|
312
|
+
if (hint) {
|
|
242
313
|
warnings.push(` ${hint}`);
|
|
314
|
+
}
|
|
243
315
|
const repair = await prompter.confirmSkipInNonInteractive({
|
|
244
316
|
message: `Repair permissions on ${label}?`,
|
|
245
317
|
initialValue: true,
|
|
@@ -260,8 +332,9 @@ export async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
260
332
|
}
|
|
261
333
|
const extraStateDirs = new Set();
|
|
262
334
|
if (path.resolve(stateDir) !== path.resolve(defaultStateDir)) {
|
|
263
|
-
if (existsDir(defaultStateDir))
|
|
335
|
+
if (existsDir(defaultStateDir)) {
|
|
264
336
|
extraStateDirs.add(defaultStateDir);
|
|
337
|
+
}
|
|
265
338
|
}
|
|
266
339
|
for (const other of findOtherStateDirs(stateDir)) {
|
|
267
340
|
extraStateDirs.add(other);
|
|
@@ -278,7 +351,7 @@ export async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
278
351
|
if (entries.length > 0) {
|
|
279
352
|
const recent = entries
|
|
280
353
|
.slice()
|
|
281
|
-
.
|
|
354
|
+
.toSorted((a, b) => {
|
|
282
355
|
const aUpdated = typeof a[1].updatedAt === "number" ? a[1].updatedAt : 0;
|
|
283
356
|
const bUpdated = typeof b[1].updatedAt === "number" ? b[1].updatedAt : 0;
|
|
284
357
|
return bUpdated - aUpdated;
|
|
@@ -286,8 +359,9 @@ export async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
286
359
|
.slice(0, 5);
|
|
287
360
|
const missing = recent.filter(([, entry]) => {
|
|
288
361
|
const sessionId = entry.sessionId;
|
|
289
|
-
if (!sessionId)
|
|
362
|
+
if (!sessionId) {
|
|
290
363
|
return false;
|
|
364
|
+
}
|
|
291
365
|
const transcriptPath = resolveSessionFilePath(sessionId, entry, {
|
|
292
366
|
agentId,
|
|
293
367
|
});
|
|
@@ -319,11 +393,13 @@ export async function noteStateIntegrity(cfg, prompter, configPath) {
|
|
|
319
393
|
}
|
|
320
394
|
}
|
|
321
395
|
export function noteWorkspaceBackupTip(workspaceDir) {
|
|
322
|
-
if (!existsDir(workspaceDir))
|
|
396
|
+
if (!existsDir(workspaceDir)) {
|
|
323
397
|
return;
|
|
398
|
+
}
|
|
324
399
|
const gitMarker = path.join(workspaceDir, ".git");
|
|
325
|
-
if (fs.existsSync(gitMarker))
|
|
400
|
+
if (fs.existsSync(gitMarker)) {
|
|
326
401
|
return;
|
|
402
|
+
}
|
|
327
403
|
note([
|
|
328
404
|
"- Tip: back up the workspace in a private git repo (GitHub or GitLab).",
|
|
329
405
|
"- Keep ~/.poolbot out of git; it contains credentials and session history.",
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { formatCliCommand } from "../cli/command-format.js";
|
|
2
2
|
import { isTruthyEnvValue } from "../infra/env.js";
|
|
3
|
+
import { runGatewayUpdate } from "../infra/update-runner.js";
|
|
3
4
|
import { runCommandWithTimeout } from "../process/exec.js";
|
|
4
5
|
import { note } from "../terminal/note.js";
|
|
5
|
-
|
|
6
|
-
async function detectPoolbotGitCheckout(root) {
|
|
6
|
+
async function detectPoolBotGitCheckout(root) {
|
|
7
7
|
const res = await runCommandWithTimeout(["git", "-C", root, "rev-parse", "--show-toplevel"], {
|
|
8
8
|
timeoutMs: 5000,
|
|
9
9
|
}).catch(() => null);
|
|
10
|
-
if (!res)
|
|
10
|
+
if (!res) {
|
|
11
11
|
return "unknown";
|
|
12
|
+
}
|
|
12
13
|
if (res.code !== 0) {
|
|
13
14
|
// Avoid noisy "Update via package manager" notes when git is missing/broken,
|
|
14
15
|
// but do show it when this is clearly not a git checkout.
|
|
@@ -20,22 +21,24 @@ async function detectPoolbotGitCheckout(root) {
|
|
|
20
21
|
return res.stdout.trim() === root ? "git" : "not-git";
|
|
21
22
|
}
|
|
22
23
|
export async function maybeOfferUpdateBeforeDoctor(params) {
|
|
23
|
-
const updateInProgress = isTruthyEnvValue(process.env.POOLBOT_UPDATE_IN_PROGRESS
|
|
24
|
+
const updateInProgress = isTruthyEnvValue(process.env.POOLBOT_UPDATE_IN_PROGRESS);
|
|
24
25
|
const canOfferUpdate = !updateInProgress &&
|
|
25
26
|
params.options.nonInteractive !== true &&
|
|
26
27
|
params.options.yes !== true &&
|
|
27
28
|
params.options.repair !== true &&
|
|
28
29
|
Boolean(process.stdin.isTTY);
|
|
29
|
-
if (!canOfferUpdate || !params.root)
|
|
30
|
+
if (!canOfferUpdate || !params.root) {
|
|
30
31
|
return { updated: false };
|
|
31
|
-
|
|
32
|
+
}
|
|
33
|
+
const git = await detectPoolBotGitCheckout(params.root);
|
|
32
34
|
if (git === "git") {
|
|
33
35
|
const shouldUpdate = await params.confirm({
|
|
34
|
-
message: "Update
|
|
36
|
+
message: "Update Pool Bot from git before running doctor?",
|
|
35
37
|
initialValue: true,
|
|
36
38
|
});
|
|
37
|
-
if (!shouldUpdate)
|
|
39
|
+
if (!shouldUpdate) {
|
|
38
40
|
return { updated: false };
|
|
41
|
+
}
|
|
39
42
|
note("Running update (fetch/rebase/build/ui:build/doctor)…", "Update");
|
|
40
43
|
const result = await runGatewayUpdate({
|
|
41
44
|
cwd: params.root,
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import { ensureAuthProfileStore } from "../../agents/auth-profiles.js";
|
|
2
1
|
import { resolveForwardCompatModel } from "../../agents/model-forward-compat.js";
|
|
3
2
|
import { parseModelRef } from "../../agents/model-selection.js";
|
|
4
|
-
import { resolveModel } from "../../agents/pi-embedded-runner/model.js";
|
|
5
|
-
import { loadConfig } from "../../config/config.js";
|
|
6
3
|
import { resolveConfiguredEntries } from "./list.configured.js";
|
|
7
4
|
import { formatErrorWithStack } from "./list.errors.js";
|
|
8
5
|
import { loadModelRegistry, toModelRow } from "./list.registry.js";
|
|
@@ -10,12 +7,15 @@ import { printModelTable } from "./list.table.js";
|
|
|
10
7
|
import { DEFAULT_PROVIDER, ensureFlagCompatibility, isLocalBaseUrl, modelKey } from "./shared.js";
|
|
11
8
|
export async function modelsListCommand(opts, runtime) {
|
|
12
9
|
ensureFlagCompatibility(opts);
|
|
10
|
+
const { loadConfig } = await import("../../config/config.js");
|
|
11
|
+
const { ensureAuthProfileStore } = await import("../../agents/auth-profiles.js");
|
|
13
12
|
const cfg = loadConfig();
|
|
14
13
|
const authStore = ensureAuthProfileStore();
|
|
15
14
|
const providerFilter = (() => {
|
|
16
15
|
const raw = opts.provider?.trim();
|
|
17
|
-
if (!raw)
|
|
16
|
+
if (!raw) {
|
|
18
17
|
return undefined;
|
|
18
|
+
}
|
|
19
19
|
const parsed = parseModelRef(`${raw}/_`, DEFAULT_PROVIDER);
|
|
20
20
|
return parsed?.provider ?? raw.toLowerCase();
|
|
21
21
|
})();
|
|
@@ -45,8 +45,9 @@ export async function modelsListCommand(opts, runtime) {
|
|
|
45
45
|
if (opts.all) {
|
|
46
46
|
const sorted = [...models].toSorted((a, b) => {
|
|
47
47
|
const p = a.provider.localeCompare(b.provider);
|
|
48
|
-
if (p !== 0)
|
|
48
|
+
if (p !== 0) {
|
|
49
49
|
return p;
|
|
50
|
+
}
|
|
50
51
|
return a.id.localeCompare(b.id);
|
|
51
52
|
});
|
|
52
53
|
for (const model of sorted) {
|
|
@@ -83,6 +84,7 @@ export async function modelsListCommand(opts, runtime) {
|
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
86
|
if (!model) {
|
|
87
|
+
const { resolveModel } = await import("../../agents/pi-embedded-runner/model.js");
|
|
86
88
|
model = resolveModel(entry.ref.provider, entry.ref.model, undefined, cfg).model;
|
|
87
89
|
}
|
|
88
90
|
if (opts.local && model && !isLocalBaseUrl(model.baseUrl)) {
|
|
@@ -1,27 +1,8 @@
|
|
|
1
1
|
import { logConfigUpdated } from "../../config/logging.js";
|
|
2
|
-
import {
|
|
2
|
+
import { applyDefaultModelPrimaryUpdate, updateConfig } from "./shared.js";
|
|
3
3
|
export async function modelsSetImageCommand(modelRaw, runtime) {
|
|
4
4
|
const updated = await updateConfig((cfg) => {
|
|
5
|
-
|
|
6
|
-
const key = `${resolved.provider}/${resolved.model}`;
|
|
7
|
-
const nextModels = { ...cfg.agents?.defaults?.models };
|
|
8
|
-
if (!nextModels[key])
|
|
9
|
-
nextModels[key] = {};
|
|
10
|
-
const existingModel = cfg.agents?.defaults?.imageModel;
|
|
11
|
-
return {
|
|
12
|
-
...cfg,
|
|
13
|
-
agents: {
|
|
14
|
-
...cfg.agents,
|
|
15
|
-
defaults: {
|
|
16
|
-
...cfg.agents?.defaults,
|
|
17
|
-
imageModel: {
|
|
18
|
-
...(existingModel?.fallbacks ? { fallbacks: existingModel.fallbacks } : undefined),
|
|
19
|
-
primary: key,
|
|
20
|
-
},
|
|
21
|
-
models: nextModels,
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
};
|
|
5
|
+
return applyDefaultModelPrimaryUpdate({ cfg, modelRaw, field: "imageModel" });
|
|
25
6
|
});
|
|
26
7
|
logConfigUpdated(runtime);
|
|
27
8
|
runtime.log(`Image model: ${updated.agents?.defaults?.imageModel?.primary ?? modelRaw}`);
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { formatNodeServiceDescription } from "../daemon/constants.js";
|
|
2
2
|
import { resolveNodeProgramArguments } from "../daemon/program-args.js";
|
|
3
|
-
import {
|
|
3
|
+
import { resolvePreferredNodePath } from "../daemon/runtime-paths.js";
|
|
4
4
|
import { buildNodeServiceEnvironment } from "../daemon/service-env.js";
|
|
5
5
|
import { resolveGatewayDevMode } from "./daemon-install-helpers.js";
|
|
6
|
+
import { emitNodeRuntimeWarning, } from "./daemon-install-runtime-warning.js";
|
|
6
7
|
export async function buildNodeInstallPlan(params) {
|
|
7
8
|
const devMode = params.devMode ?? resolveGatewayDevMode();
|
|
8
9
|
const nodePath = params.nodePath ??
|
|
@@ -21,15 +22,16 @@ export async function buildNodeInstallPlan(params) {
|
|
|
21
22
|
runtime: params.runtime,
|
|
22
23
|
nodePath,
|
|
23
24
|
});
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
await emitNodeRuntimeWarning({
|
|
26
|
+
env: params.env,
|
|
27
|
+
runtime: params.runtime,
|
|
28
|
+
nodeProgram: programArguments[0],
|
|
29
|
+
warn: params.warn,
|
|
30
|
+
title: "Node daemon runtime",
|
|
31
|
+
});
|
|
30
32
|
const environment = buildNodeServiceEnvironment({ env: params.env });
|
|
31
33
|
const description = formatNodeServiceDescription({
|
|
32
|
-
version: environment.POOLBOT_SERVICE_VERSION
|
|
34
|
+
version: environment.POOLBOT_SERVICE_VERSION,
|
|
33
35
|
});
|
|
34
36
|
return { programArguments, workingDirectory, environment, description };
|
|
35
37
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { applyAgentDefaultModelPrimary, applyOnboardAuthAgentModelsAndProviders, } from "./onboard-auth.config-shared.js";
|
|
2
|
+
import { buildMinimaxApiModelDefinition, buildMinimaxModelDefinition, DEFAULT_MINIMAX_BASE_URL, DEFAULT_MINIMAX_CONTEXT_WINDOW, DEFAULT_MINIMAX_MAX_TOKENS, MINIMAX_API_BASE_URL, MINIMAX_CN_API_BASE_URL, MINIMAX_HOSTED_COST, MINIMAX_HOSTED_MODEL_ID, MINIMAX_HOSTED_MODEL_REF, MINIMAX_LM_STUDIO_COST, } from "./onboard-auth.models.js";
|
|
2
3
|
export function applyMinimaxProviderConfig(cfg) {
|
|
3
4
|
const models = { ...cfg.agents?.defaults?.models };
|
|
4
|
-
models["anthropic/claude-opus-4-
|
|
5
|
-
...models["anthropic/claude-opus-4-
|
|
6
|
-
alias: models["anthropic/claude-opus-4-
|
|
5
|
+
models["anthropic/claude-opus-4-6"] = {
|
|
6
|
+
...models["anthropic/claude-opus-4-6"],
|
|
7
|
+
alias: models["anthropic/claude-opus-4-6"]?.alias ?? "Opus",
|
|
7
8
|
};
|
|
8
9
|
models["lmstudio/minimax-m2.1-gs32"] = {
|
|
9
10
|
...models["lmstudio/minimax-m2.1-gs32"],
|
|
@@ -27,20 +28,7 @@ export function applyMinimaxProviderConfig(cfg) {
|
|
|
27
28
|
],
|
|
28
29
|
};
|
|
29
30
|
}
|
|
30
|
-
return {
|
|
31
|
-
...cfg,
|
|
32
|
-
agents: {
|
|
33
|
-
...cfg.agents,
|
|
34
|
-
defaults: {
|
|
35
|
-
...cfg.agents?.defaults,
|
|
36
|
-
models,
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
models: {
|
|
40
|
-
mode: cfg.models?.mode ?? "merge",
|
|
41
|
-
providers,
|
|
42
|
-
},
|
|
43
|
-
};
|
|
31
|
+
return applyOnboardAuthAgentModelsAndProviders(cfg, { agentModels: models, providers });
|
|
44
32
|
}
|
|
45
33
|
export function applyMinimaxHostedProviderConfig(cfg, params) {
|
|
46
34
|
const models = { ...cfg.agents?.defaults?.models };
|
|
@@ -66,41 +54,11 @@ export function applyMinimaxHostedProviderConfig(cfg, params) {
|
|
|
66
54
|
api: "openai-completions",
|
|
67
55
|
models: mergedModels.length > 0 ? mergedModels : [hostedModel],
|
|
68
56
|
};
|
|
69
|
-
return {
|
|
70
|
-
...cfg,
|
|
71
|
-
agents: {
|
|
72
|
-
...cfg.agents,
|
|
73
|
-
defaults: {
|
|
74
|
-
...cfg.agents?.defaults,
|
|
75
|
-
models,
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
models: {
|
|
79
|
-
mode: cfg.models?.mode ?? "merge",
|
|
80
|
-
providers,
|
|
81
|
-
},
|
|
82
|
-
};
|
|
57
|
+
return applyOnboardAuthAgentModelsAndProviders(cfg, { agentModels: models, providers });
|
|
83
58
|
}
|
|
84
59
|
export function applyMinimaxConfig(cfg) {
|
|
85
60
|
const next = applyMinimaxProviderConfig(cfg);
|
|
86
|
-
return
|
|
87
|
-
...next,
|
|
88
|
-
agents: {
|
|
89
|
-
...next.agents,
|
|
90
|
-
defaults: {
|
|
91
|
-
...next.agents?.defaults,
|
|
92
|
-
model: {
|
|
93
|
-
...(next.agents?.defaults?.model &&
|
|
94
|
-
"fallbacks" in next.agents.defaults.model
|
|
95
|
-
? {
|
|
96
|
-
fallbacks: next.agents.defaults.model.fallbacks,
|
|
97
|
-
}
|
|
98
|
-
: undefined),
|
|
99
|
-
primary: "lmstudio/minimax-m2.1-gs32",
|
|
100
|
-
},
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
};
|
|
61
|
+
return applyAgentDefaultModelPrimary(next, "lmstudio/minimax-m2.1-gs32");
|
|
104
62
|
}
|
|
105
63
|
export function applyMinimaxHostedConfig(cfg, params) {
|
|
106
64
|
const next = applyMinimaxHostedProviderConfig(cfg, params);
|
|
@@ -119,26 +77,59 @@ export function applyMinimaxHostedConfig(cfg, params) {
|
|
|
119
77
|
};
|
|
120
78
|
}
|
|
121
79
|
// MiniMax Anthropic-compatible API (platform.minimax.io/anthropic)
|
|
122
|
-
export function applyMinimaxApiProviderConfig(cfg, modelId = "MiniMax-M2.
|
|
80
|
+
export function applyMinimaxApiProviderConfig(cfg, modelId = "MiniMax-M2.5") {
|
|
81
|
+
return applyMinimaxApiProviderConfigWithBaseUrl(cfg, {
|
|
82
|
+
providerId: "minimax",
|
|
83
|
+
modelId,
|
|
84
|
+
baseUrl: MINIMAX_API_BASE_URL,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
export function applyMinimaxApiConfig(cfg, modelId = "MiniMax-M2.5") {
|
|
88
|
+
return applyMinimaxApiConfigWithBaseUrl(cfg, {
|
|
89
|
+
providerId: "minimax",
|
|
90
|
+
modelId,
|
|
91
|
+
baseUrl: MINIMAX_API_BASE_URL,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
// MiniMax China API (api.minimaxi.com)
|
|
95
|
+
export function applyMinimaxApiProviderConfigCn(cfg, modelId = "MiniMax-M2.5") {
|
|
96
|
+
return applyMinimaxApiProviderConfigWithBaseUrl(cfg, {
|
|
97
|
+
providerId: "minimax-cn",
|
|
98
|
+
modelId,
|
|
99
|
+
baseUrl: MINIMAX_CN_API_BASE_URL,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
export function applyMinimaxApiConfigCn(cfg, modelId = "MiniMax-M2.5") {
|
|
103
|
+
return applyMinimaxApiConfigWithBaseUrl(cfg, {
|
|
104
|
+
providerId: "minimax-cn",
|
|
105
|
+
modelId,
|
|
106
|
+
baseUrl: MINIMAX_CN_API_BASE_URL,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function applyMinimaxApiProviderConfigWithBaseUrl(cfg, params) {
|
|
123
110
|
const providers = { ...cfg.models?.providers };
|
|
124
|
-
const existingProvider = providers.
|
|
125
|
-
const existingModels =
|
|
126
|
-
const apiModel = buildMinimaxApiModelDefinition(modelId);
|
|
127
|
-
const hasApiModel = existingModels.some((model) => model.id === modelId);
|
|
111
|
+
const existingProvider = providers[params.providerId];
|
|
112
|
+
const existingModels = existingProvider?.models ?? [];
|
|
113
|
+
const apiModel = buildMinimaxApiModelDefinition(params.modelId);
|
|
114
|
+
const hasApiModel = existingModels.some((model) => model.id === params.modelId);
|
|
128
115
|
const mergedModels = hasApiModel ? existingModels : [...existingModels, apiModel];
|
|
129
|
-
const { apiKey: existingApiKey, ...existingProviderRest } =
|
|
116
|
+
const { apiKey: existingApiKey, ...existingProviderRest } = existingProvider ?? {
|
|
117
|
+
baseUrl: params.baseUrl,
|
|
118
|
+
models: [],
|
|
119
|
+
};
|
|
130
120
|
const resolvedApiKey = typeof existingApiKey === "string" ? existingApiKey : undefined;
|
|
131
121
|
const normalizedApiKey = resolvedApiKey?.trim() === "minimax" ? "" : resolvedApiKey;
|
|
132
|
-
providers.
|
|
122
|
+
providers[params.providerId] = {
|
|
133
123
|
...existingProviderRest,
|
|
134
|
-
baseUrl:
|
|
124
|
+
baseUrl: params.baseUrl,
|
|
135
125
|
api: "anthropic-messages",
|
|
136
126
|
...(normalizedApiKey?.trim() ? { apiKey: normalizedApiKey } : {}),
|
|
137
127
|
models: mergedModels.length > 0 ? mergedModels : [apiModel],
|
|
138
128
|
};
|
|
139
129
|
const models = { ...cfg.agents?.defaults?.models };
|
|
140
|
-
|
|
141
|
-
|
|
130
|
+
const modelRef = `${params.providerId}/${params.modelId}`;
|
|
131
|
+
models[modelRef] = {
|
|
132
|
+
...models[modelRef],
|
|
142
133
|
alias: "Minimax",
|
|
143
134
|
};
|
|
144
135
|
return {
|
|
@@ -153,24 +144,7 @@ export function applyMinimaxApiProviderConfig(cfg, modelId = "MiniMax-M2.1") {
|
|
|
153
144
|
models: { mode: cfg.models?.mode ?? "merge", providers },
|
|
154
145
|
};
|
|
155
146
|
}
|
|
156
|
-
|
|
157
|
-
const next =
|
|
158
|
-
return {
|
|
159
|
-
...next,
|
|
160
|
-
agents: {
|
|
161
|
-
...next.agents,
|
|
162
|
-
defaults: {
|
|
163
|
-
...next.agents?.defaults,
|
|
164
|
-
model: {
|
|
165
|
-
...(next.agents?.defaults?.model &&
|
|
166
|
-
"fallbacks" in next.agents.defaults.model
|
|
167
|
-
? {
|
|
168
|
-
fallbacks: next.agents.defaults.model.fallbacks,
|
|
169
|
-
}
|
|
170
|
-
: undefined),
|
|
171
|
-
primary: `minimax/${modelId}`,
|
|
172
|
-
},
|
|
173
|
-
},
|
|
174
|
-
},
|
|
175
|
-
};
|
|
147
|
+
function applyMinimaxApiConfigWithBaseUrl(cfg, params) {
|
|
148
|
+
const next = applyMinimaxApiProviderConfigWithBaseUrl(cfg, params);
|
|
149
|
+
return applyAgentDefaultModelPrimary(next, `${params.providerId}/${params.modelId}`);
|
|
176
150
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { OPENCODE_ZEN_DEFAULT_MODEL_REF } from "../agents/opencode-zen-models.js";
|
|
2
|
+
import { applyAgentDefaultModelPrimary } from "./onboard-auth.config-shared.js";
|
|
2
3
|
export function applyOpencodeZenProviderConfig(cfg) {
|
|
3
4
|
// Use the built-in opencode provider from pi-ai; only seed the allowlist alias.
|
|
4
5
|
const models = { ...cfg.agents?.defaults?.models };
|
|
@@ -19,22 +20,5 @@ export function applyOpencodeZenProviderConfig(cfg) {
|
|
|
19
20
|
}
|
|
20
21
|
export function applyOpencodeZenConfig(cfg) {
|
|
21
22
|
const next = applyOpencodeZenProviderConfig(cfg);
|
|
22
|
-
return
|
|
23
|
-
...next,
|
|
24
|
-
agents: {
|
|
25
|
-
...next.agents,
|
|
26
|
-
defaults: {
|
|
27
|
-
...next.agents?.defaults,
|
|
28
|
-
model: {
|
|
29
|
-
...(next.agents?.defaults?.model &&
|
|
30
|
-
"fallbacks" in next.agents.defaults.model
|
|
31
|
-
? {
|
|
32
|
-
fallbacks: next.agents.defaults.model.fallbacks,
|
|
33
|
-
}
|
|
34
|
-
: undefined),
|
|
35
|
-
primary: OPENCODE_ZEN_DEFAULT_MODEL_REF,
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
};
|
|
23
|
+
return applyAgentDefaultModelPrimary(next, OPENCODE_ZEN_DEFAULT_MODEL_REF);
|
|
40
24
|
}
|