@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
|
@@ -2,7 +2,7 @@ import path from "node:path";
|
|
|
2
2
|
import { confirm, isCancel } from "@clack/prompts";
|
|
3
3
|
import { checkShellCompletionStatus, ensureCompletionCacheExists, } from "../../commands/doctor-completion.js";
|
|
4
4
|
import { doctorCommand } from "../../commands/doctor.js";
|
|
5
|
-
import { readConfigFileSnapshot, writeConfigFile } from "../../config/config.js";
|
|
5
|
+
import { readConfigFileSnapshot, resolveGatewayPort, writeConfigFile, } from "../../config/config.js";
|
|
6
6
|
import { resolveGatewayService } from "../../daemon/service.js";
|
|
7
7
|
import { channelToNpmTag, DEFAULT_GIT_CHANNEL, DEFAULT_PACKAGE_CHANNEL, normalizeUpdateChannel, } from "../../infra/update-channels.js";
|
|
8
8
|
import { compareSemverStrings, resolveNpmChannelTag, checkUpdateStatus, } from "../../infra/update-check.js";
|
|
@@ -17,12 +17,14 @@ import { pathExists } from "../../utils.js";
|
|
|
17
17
|
import { replaceCliName, resolveCliName } from "../cli-name.js";
|
|
18
18
|
import { formatCliCommand } from "../command-format.js";
|
|
19
19
|
import { installCompletion } from "../completion-cli.js";
|
|
20
|
-
import { runDaemonRestart } from "../daemon-cli.js";
|
|
20
|
+
import { runDaemonInstall, runDaemonRestart } from "../daemon-cli.js";
|
|
21
|
+
import { renderRestartDiagnostics, terminateStaleGatewayPids, waitForGatewayHealthyRestart, } from "../daemon-cli/restart-health.js";
|
|
21
22
|
import { createUpdateProgress, printResult } from "./progress.js";
|
|
22
23
|
import { prepareRestartScript, runRestartScript } from "./restart-helper.js";
|
|
23
|
-
import { DEFAULT_PACKAGE_NAME, ensureGitCheckout, normalizeTag, readPackageName, readPackageVersion, resolveGitInstallDir, resolveGlobalManager, resolveNodeRunner, resolveTargetVersion, resolveUpdateRoot, runUpdateStep, tryWriteCompletionCache, } from "./shared.js";
|
|
24
|
+
import { DEFAULT_PACKAGE_NAME, createGlobalCommandRunner, ensureGitCheckout, normalizeTag, parseTimeoutMsOrExit, readPackageName, readPackageVersion, resolveGitInstallDir, resolveGlobalManager, resolveNodeRunner, resolveTargetVersion, resolveUpdateRoot, runUpdateStep, tryWriteCompletionCache, } from "./shared.js";
|
|
24
25
|
import { suppressDeprecations } from "./suppress-deprecations.js";
|
|
25
26
|
const CLI_NAME = resolveCliName();
|
|
27
|
+
const SERVICE_REFRESH_TIMEOUT_MS = 60_000;
|
|
26
28
|
const UPDATE_QUIPS = [
|
|
27
29
|
"Leveled up! New skills unlocked. You're welcome.",
|
|
28
30
|
"Fresh code, same lobster. Miss me?",
|
|
@@ -48,6 +50,43 @@ const UPDATE_QUIPS = [
|
|
|
48
50
|
function pickUpdateQuip() {
|
|
49
51
|
return UPDATE_QUIPS[Math.floor(Math.random() * UPDATE_QUIPS.length)] ?? "Update complete.";
|
|
50
52
|
}
|
|
53
|
+
function resolveGatewayInstallEntrypointCandidates(root) {
|
|
54
|
+
if (!root) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
return [
|
|
58
|
+
path.join(root, "dist", "entry.js"),
|
|
59
|
+
path.join(root, "dist", "entry.mjs"),
|
|
60
|
+
path.join(root, "dist", "index.js"),
|
|
61
|
+
path.join(root, "dist", "index.mjs"),
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
function formatCommandFailure(stdout, stderr) {
|
|
65
|
+
const detail = (stderr || stdout).trim();
|
|
66
|
+
if (!detail) {
|
|
67
|
+
return "command returned a non-zero exit code";
|
|
68
|
+
}
|
|
69
|
+
return detail.split("\n").slice(-3).join("\n");
|
|
70
|
+
}
|
|
71
|
+
async function refreshGatewayServiceEnv(params) {
|
|
72
|
+
const args = ["gateway", "install", "--force"];
|
|
73
|
+
if (params.jsonMode) {
|
|
74
|
+
args.push("--json");
|
|
75
|
+
}
|
|
76
|
+
for (const candidate of resolveGatewayInstallEntrypointCandidates(params.result.root)) {
|
|
77
|
+
if (!(await pathExists(candidate))) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const res = await runCommandWithTimeout([resolveNodeRunner(), candidate, ...args], {
|
|
81
|
+
timeoutMs: SERVICE_REFRESH_TIMEOUT_MS,
|
|
82
|
+
});
|
|
83
|
+
if (res.code === 0) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
throw new Error(`updated install refresh failed (${candidate}): ${formatCommandFailure(res.stdout, res.stderr)}`);
|
|
87
|
+
}
|
|
88
|
+
await runDaemonInstall({ force: true, json: params.jsonMode || undefined });
|
|
89
|
+
}
|
|
51
90
|
async function tryInstallShellCompletion(opts) {
|
|
52
91
|
if (opts.jsonMode || !process.stdin.isTTY) {
|
|
53
92
|
return;
|
|
@@ -93,10 +132,7 @@ async function runPackageInstallUpdate(params) {
|
|
|
93
132
|
installKind: params.installKind,
|
|
94
133
|
timeoutMs: params.timeoutMs,
|
|
95
134
|
});
|
|
96
|
-
const runCommand =
|
|
97
|
-
const res = await runCommandWithTimeout(argv, options);
|
|
98
|
-
return { stdout: res.stdout, stderr: res.stderr, code: res.code };
|
|
99
|
-
};
|
|
135
|
+
const runCommand = createGlobalCommandRunner();
|
|
100
136
|
const pkgRoot = await resolveGlobalPackageRoot(manager, runCommand, params.timeoutMs);
|
|
101
137
|
const packageName = (pkgRoot ? await readPackageName(pkgRoot) : await readPackageName(params.root)) ??
|
|
102
138
|
DEFAULT_PACKAGE_NAME;
|
|
@@ -289,6 +325,19 @@ async function maybeRestartService(params) {
|
|
|
289
325
|
try {
|
|
290
326
|
let restarted = false;
|
|
291
327
|
let restartInitiated = false;
|
|
328
|
+
if (params.refreshServiceEnv) {
|
|
329
|
+
try {
|
|
330
|
+
await refreshGatewayServiceEnv({
|
|
331
|
+
result: params.result,
|
|
332
|
+
jsonMode: Boolean(params.opts.json),
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
catch (err) {
|
|
336
|
+
if (!params.opts.json) {
|
|
337
|
+
defaultRuntime.log(theme.warn(`Failed to refresh gateway service environment from updated install: ${String(err)}`));
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
292
341
|
if (params.restartScriptPath) {
|
|
293
342
|
await runRestartScript(params.restartScriptPath);
|
|
294
343
|
restartInitiated = true;
|
|
@@ -314,8 +363,32 @@ async function maybeRestartService(params) {
|
|
|
314
363
|
}
|
|
315
364
|
}
|
|
316
365
|
if (!params.opts.json && restartInitiated) {
|
|
317
|
-
|
|
318
|
-
|
|
366
|
+
const service = resolveGatewayService();
|
|
367
|
+
let health = await waitForGatewayHealthyRestart({
|
|
368
|
+
service,
|
|
369
|
+
port: params.gatewayPort,
|
|
370
|
+
});
|
|
371
|
+
if (!health.healthy && health.staleGatewayPids.length > 0) {
|
|
372
|
+
if (!params.opts.json) {
|
|
373
|
+
defaultRuntime.log(theme.warn(`Found stale gateway process(es) after restart: ${health.staleGatewayPids.join(", ")}. Cleaning up...`));
|
|
374
|
+
}
|
|
375
|
+
await terminateStaleGatewayPids(health.staleGatewayPids);
|
|
376
|
+
await runDaemonRestart();
|
|
377
|
+
health = await waitForGatewayHealthyRestart({
|
|
378
|
+
service,
|
|
379
|
+
port: params.gatewayPort,
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
if (health.healthy) {
|
|
383
|
+
defaultRuntime.log(theme.success("Daemon restart completed."));
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
defaultRuntime.log(theme.warn("Gateway did not become healthy after restart."));
|
|
387
|
+
for (const line of renderRestartDiagnostics(health)) {
|
|
388
|
+
defaultRuntime.log(theme.muted(line));
|
|
389
|
+
}
|
|
390
|
+
defaultRuntime.log(theme.muted(`Run \`${replaceCliName(formatCliCommand("poolbot gateway status --probe --deep"), CLI_NAME)}\` for details.`));
|
|
391
|
+
}
|
|
319
392
|
defaultRuntime.log("");
|
|
320
393
|
}
|
|
321
394
|
}
|
|
@@ -339,11 +412,9 @@ async function maybeRestartService(params) {
|
|
|
339
412
|
}
|
|
340
413
|
export async function updateCommand(opts) {
|
|
341
414
|
suppressDeprecations();
|
|
342
|
-
const timeoutMs =
|
|
415
|
+
const timeoutMs = parseTimeoutMsOrExit(opts.timeout);
|
|
343
416
|
const shouldRestart = opts.restart !== false;
|
|
344
|
-
if (timeoutMs
|
|
345
|
-
defaultRuntime.error("--timeout must be a positive integer (seconds)");
|
|
346
|
-
defaultRuntime.exit(1);
|
|
417
|
+
if (timeoutMs === null) {
|
|
347
418
|
return;
|
|
348
419
|
}
|
|
349
420
|
const root = await resolveUpdateRoot();
|
|
@@ -439,11 +510,13 @@ export async function updateCommand(opts) {
|
|
|
439
510
|
const { progress, stop } = createUpdateProgress(showProgress);
|
|
440
511
|
const startedAt = Date.now();
|
|
441
512
|
let restartScriptPath = null;
|
|
513
|
+
let refreshGatewayServiceEnv = false;
|
|
442
514
|
if (shouldRestart) {
|
|
443
515
|
try {
|
|
444
516
|
const loaded = await resolveGatewayService().isLoaded({ env: process.env });
|
|
445
517
|
if (loaded) {
|
|
446
518
|
restartScriptPath = await prepareRestartScript(process.env);
|
|
519
|
+
refreshGatewayServiceEnv = true;
|
|
447
520
|
}
|
|
448
521
|
}
|
|
449
522
|
catch {
|
|
@@ -484,7 +557,7 @@ export async function updateCommand(opts) {
|
|
|
484
557
|
}
|
|
485
558
|
if (result.reason === "not-git-install") {
|
|
486
559
|
defaultRuntime.log(theme.warn(`Skipped: this Pool Bot install isn't a git checkout, and the package manager couldn't be detected. Update via your package manager, then run \`${replaceCliName(formatCliCommand("poolbot doctor"), CLI_NAME)}\` and \`${replaceCliName(formatCliCommand("poolbot gateway restart"), CLI_NAME)}\`.`));
|
|
487
|
-
defaultRuntime.log(theme.muted(`Examples: \`${replaceCliName("npm i -g
|
|
560
|
+
defaultRuntime.log(theme.muted(`Examples: \`${replaceCliName("npm i -g @poolzin/pool-bot@latest", CLI_NAME)}\` or \`${replaceCliName("pnpm add -g poolbot@latest", CLI_NAME)}\``));
|
|
488
561
|
}
|
|
489
562
|
defaultRuntime.exit(0);
|
|
490
563
|
return;
|
|
@@ -504,6 +577,8 @@ export async function updateCommand(opts) {
|
|
|
504
577
|
shouldRestart,
|
|
505
578
|
result,
|
|
506
579
|
opts,
|
|
580
|
+
refreshServiceEnv: refreshGatewayServiceEnv,
|
|
581
|
+
gatewayPort: resolveGatewayPort(configSnapshot.valid ? configSnapshot.config : undefined),
|
|
507
582
|
restartScriptPath,
|
|
508
583
|
});
|
|
509
584
|
if (!opts.json) {
|
|
@@ -1,28 +1,22 @@
|
|
|
1
|
-
import { confirm, isCancel
|
|
1
|
+
import { confirm, isCancel } from "@clack/prompts";
|
|
2
2
|
import { readConfigFileSnapshot } from "../../config/config.js";
|
|
3
3
|
import { formatUpdateChannelLabel, normalizeUpdateChannel, resolveEffectiveUpdateChannel, } from "../../infra/update-channels.js";
|
|
4
4
|
import { checkUpdateStatus } from "../../infra/update-check.js";
|
|
5
5
|
import { defaultRuntime } from "../../runtime.js";
|
|
6
|
-
import {
|
|
6
|
+
import { selectStyled } from "../../terminal/prompt-select-styled.js";
|
|
7
|
+
import { stylePromptMessage } from "../../terminal/prompt-style.js";
|
|
7
8
|
import { theme } from "../../terminal/theme.js";
|
|
8
9
|
import { pathExists } from "../../utils.js";
|
|
9
|
-
import { isEmptyDir, isGitCheckout, resolveGitInstallDir, resolveUpdateRoot, } from "./shared.js";
|
|
10
|
+
import { isEmptyDir, isGitCheckout, parseTimeoutMsOrExit, resolveGitInstallDir, resolveUpdateRoot, } from "./shared.js";
|
|
10
11
|
import { updateCommand } from "./update-command.js";
|
|
11
|
-
const selectStyled = (params) => select({
|
|
12
|
-
...params,
|
|
13
|
-
message: stylePromptMessage(params.message),
|
|
14
|
-
options: params.options.map((opt) => opt.hint === undefined ? opt : { ...opt, hint: stylePromptHint(opt.hint) }),
|
|
15
|
-
});
|
|
16
12
|
export async function updateWizardCommand(opts = {}) {
|
|
17
13
|
if (!process.stdin.isTTY) {
|
|
18
14
|
defaultRuntime.error("Update wizard requires a TTY. Use `poolbot update --channel <stable|beta|dev>` instead.");
|
|
19
15
|
defaultRuntime.exit(1);
|
|
20
16
|
return;
|
|
21
17
|
}
|
|
22
|
-
const timeoutMs =
|
|
23
|
-
if (timeoutMs
|
|
24
|
-
defaultRuntime.error("--timeout must be a positive integer (seconds)");
|
|
25
|
-
defaultRuntime.exit(1);
|
|
18
|
+
const timeoutMs = parseTimeoutMsOrExit(opts.timeout);
|
|
19
|
+
if (timeoutMs === null) {
|
|
26
20
|
return;
|
|
27
21
|
}
|
|
28
22
|
const root = await resolveUpdateRoot();
|
|
@@ -3,25 +3,38 @@ import { resolveMessageChannel } from "../../utils/message-channel.js";
|
|
|
3
3
|
export function resolveAgentRunContext(opts) {
|
|
4
4
|
const merged = opts.runContext ? { ...opts.runContext } : {};
|
|
5
5
|
const normalizedChannel = resolveMessageChannel(merged.messageChannel ?? opts.messageChannel, opts.replyChannel ?? opts.channel);
|
|
6
|
-
if (normalizedChannel)
|
|
6
|
+
if (normalizedChannel) {
|
|
7
7
|
merged.messageChannel = normalizedChannel;
|
|
8
|
+
}
|
|
8
9
|
const normalizedAccountId = normalizeAccountId(merged.accountId ?? opts.accountId);
|
|
9
|
-
if (normalizedAccountId)
|
|
10
|
+
if (normalizedAccountId) {
|
|
10
11
|
merged.accountId = normalizedAccountId;
|
|
12
|
+
}
|
|
11
13
|
const groupId = (merged.groupId ?? opts.groupId)?.toString().trim();
|
|
12
|
-
if (groupId)
|
|
14
|
+
if (groupId) {
|
|
13
15
|
merged.groupId = groupId;
|
|
16
|
+
}
|
|
14
17
|
const groupChannel = (merged.groupChannel ?? opts.groupChannel)?.toString().trim();
|
|
15
|
-
if (groupChannel)
|
|
18
|
+
if (groupChannel) {
|
|
16
19
|
merged.groupChannel = groupChannel;
|
|
20
|
+
}
|
|
17
21
|
const groupSpace = (merged.groupSpace ?? opts.groupSpace)?.toString().trim();
|
|
18
|
-
if (groupSpace)
|
|
22
|
+
if (groupSpace) {
|
|
19
23
|
merged.groupSpace = groupSpace;
|
|
24
|
+
}
|
|
20
25
|
if (merged.currentThreadTs == null &&
|
|
21
26
|
opts.threadId != null &&
|
|
22
27
|
opts.threadId !== "" &&
|
|
23
28
|
opts.threadId !== null) {
|
|
24
29
|
merged.currentThreadTs = String(opts.threadId);
|
|
25
30
|
}
|
|
31
|
+
// Populate currentChannelId from the outbound target so that
|
|
32
|
+
// resolveTelegramAutoThreadId can match the originating chat.
|
|
33
|
+
if (!merged.currentChannelId && opts.to) {
|
|
34
|
+
const trimmedTo = opts.to.trim();
|
|
35
|
+
if (trimmedTo) {
|
|
36
|
+
merged.currentChannelId = trimmedTo;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
26
39
|
return merged;
|
|
27
40
|
}
|
|
@@ -2,11 +2,13 @@ import { setCliSessionId } from "../../agents/cli-session.js";
|
|
|
2
2
|
import { lookupContextTokens } from "../../agents/context.js";
|
|
3
3
|
import { DEFAULT_CONTEXT_TOKENS } from "../../agents/defaults.js";
|
|
4
4
|
import { isCliProvider } from "../../agents/model-selection.js";
|
|
5
|
-
import { hasNonzeroUsage } from "../../agents/usage.js";
|
|
5
|
+
import { deriveSessionTotalTokens, hasNonzeroUsage } from "../../agents/usage.js";
|
|
6
6
|
import { updateSessionStore } from "../../config/sessions.js";
|
|
7
7
|
export async function updateSessionStoreAfterAgentRun(params) {
|
|
8
8
|
const { cfg, sessionId, sessionKey, storePath, sessionStore, defaultProvider, defaultModel, fallbackProvider, fallbackModel, result, } = params;
|
|
9
9
|
const usage = result.meta.agentMeta?.usage;
|
|
10
|
+
const promptTokens = result.meta.agentMeta?.promptTokens;
|
|
11
|
+
const compactionsThisRun = Math.max(0, result.meta.agentMeta?.compactionCount ?? 0);
|
|
10
12
|
const modelUsed = result.meta.agentMeta?.model ?? fallbackModel ?? defaultModel;
|
|
11
13
|
const providerUsed = result.meta.agentMeta?.provider ?? fallbackProvider ?? defaultProvider;
|
|
12
14
|
const contextTokens = params.contextTokensOverride ?? lookupContextTokens(modelUsed) ?? DEFAULT_CONTEXT_TOKENS;
|
|
@@ -24,17 +26,28 @@ export async function updateSessionStoreAfterAgentRun(params) {
|
|
|
24
26
|
};
|
|
25
27
|
if (isCliProvider(providerUsed, cfg)) {
|
|
26
28
|
const cliSessionId = result.meta.agentMeta?.sessionId?.trim();
|
|
27
|
-
if (cliSessionId)
|
|
29
|
+
if (cliSessionId) {
|
|
28
30
|
setCliSessionId(next, providerUsed, cliSessionId);
|
|
31
|
+
}
|
|
29
32
|
}
|
|
30
33
|
next.abortedLastRun = result.meta.aborted ?? false;
|
|
31
34
|
if (hasNonzeroUsage(usage)) {
|
|
32
35
|
const input = usage.input ?? 0;
|
|
33
36
|
const output = usage.output ?? 0;
|
|
34
|
-
const
|
|
37
|
+
const totalTokens = deriveSessionTotalTokens({
|
|
38
|
+
usage,
|
|
39
|
+
contextTokens,
|
|
40
|
+
promptTokens,
|
|
41
|
+
}) ?? input;
|
|
35
42
|
next.inputTokens = input;
|
|
36
43
|
next.outputTokens = output;
|
|
37
|
-
next.totalTokens =
|
|
44
|
+
next.totalTokens = totalTokens;
|
|
45
|
+
next.totalTokensFresh = true;
|
|
46
|
+
next.cacheRead = usage.cacheRead ?? 0;
|
|
47
|
+
next.cacheWrite = usage.cacheWrite ?? 0;
|
|
48
|
+
}
|
|
49
|
+
if (compactionsThisRun > 0) {
|
|
50
|
+
next.compactionCount = (entry.compactionCount ?? 0) + compactionsThisRun;
|
|
38
51
|
}
|
|
39
52
|
sessionStore[sessionKey] = next;
|
|
40
53
|
await updateSessionStore(storePath, (store) => {
|
package/dist/commands/agent.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import path from "node:path";
|
|
1
2
|
import { listAgentIds, resolveAgentDir, resolveEffectiveModelFallbacks, resolveAgentModelPrimary, resolveAgentSkillsFilter, resolveAgentWorkspaceDir, } from "../agents/agent-scope.js";
|
|
2
3
|
import { ensureAuthProfileStore } from "../agents/auth-profiles.js";
|
|
3
4
|
import { clearSessionAuthProfileOverride } from "../agents/auth-profiles/session-override.js";
|
|
@@ -17,7 +18,7 @@ import { formatThinkingLevels, formatXHighModelHint, normalizeThinkLevel, normal
|
|
|
17
18
|
import { formatCliCommand } from "../cli/command-format.js";
|
|
18
19
|
import { createDefaultDeps } from "../cli/deps.js";
|
|
19
20
|
import { loadConfig } from "../config/config.js";
|
|
20
|
-
import { resolveAgentIdFromSessionKey, resolveSessionFilePath, updateSessionStore, } from "../config/sessions.js";
|
|
21
|
+
import { parseSessionThreadInfo, resolveAndPersistSessionFile, resolveAgentIdFromSessionKey, resolveSessionFilePath, resolveSessionTranscriptPath, updateSessionStore, } from "../config/sessions.js";
|
|
21
22
|
import { clearAgentRunContext, emitAgentEvent, registerAgentRunContext, } from "../infra/agent-events.js";
|
|
22
23
|
import { getRemoteSkillEligibility } from "../infra/skills-remote.js";
|
|
23
24
|
import { normalizeAgentId } from "../routing/session-key.js";
|
|
@@ -256,6 +257,7 @@ export async function agentCommand(opts, runtime = defaultRuntime, deps = create
|
|
|
256
257
|
storePath,
|
|
257
258
|
entry: next,
|
|
258
259
|
});
|
|
260
|
+
sessionEntry = next;
|
|
259
261
|
}
|
|
260
262
|
const agentModelPrimary = resolveAgentModelPrimary(cfg, sessionAgentId);
|
|
261
263
|
const cfgForModelSelection = agentModelPrimary
|
|
@@ -387,9 +389,27 @@ export async function agentCommand(opts, runtime = defaultRuntime, deps = create
|
|
|
387
389
|
});
|
|
388
390
|
}
|
|
389
391
|
}
|
|
390
|
-
|
|
392
|
+
let sessionFile = resolveSessionFilePath(sessionId, sessionEntry, {
|
|
391
393
|
agentId: sessionAgentId,
|
|
392
394
|
});
|
|
395
|
+
if (sessionStore && sessionKey) {
|
|
396
|
+
const threadIdFromSessionKey = parseSessionThreadInfo(sessionKey).threadId;
|
|
397
|
+
const fallbackSessionFile = !sessionEntry?.sessionFile
|
|
398
|
+
? resolveSessionTranscriptPath(sessionId, sessionAgentId, opts.threadId ?? threadIdFromSessionKey)
|
|
399
|
+
: undefined;
|
|
400
|
+
const resolvedSessionFile = await resolveAndPersistSessionFile({
|
|
401
|
+
sessionId,
|
|
402
|
+
sessionKey,
|
|
403
|
+
sessionStore,
|
|
404
|
+
storePath,
|
|
405
|
+
sessionEntry,
|
|
406
|
+
agentId: sessionAgentId,
|
|
407
|
+
sessionsDir: path.dirname(storePath),
|
|
408
|
+
fallbackSessionFile,
|
|
409
|
+
});
|
|
410
|
+
sessionFile = resolvedSessionFile.sessionFile;
|
|
411
|
+
sessionEntry = resolvedSessionFile.sessionEntry;
|
|
412
|
+
}
|
|
393
413
|
const startedAt = Date.now();
|
|
394
414
|
let lifecycleEnded = false;
|
|
395
415
|
let result;
|
|
@@ -15,14 +15,18 @@ function bindingMatchKey(match) {
|
|
|
15
15
|
export function describeBinding(binding) {
|
|
16
16
|
const match = binding.match;
|
|
17
17
|
const parts = [match.channel];
|
|
18
|
-
if (match.accountId)
|
|
18
|
+
if (match.accountId) {
|
|
19
19
|
parts.push(`accountId=${match.accountId}`);
|
|
20
|
-
|
|
20
|
+
}
|
|
21
|
+
if (match.peer) {
|
|
21
22
|
parts.push(`peer=${match.peer.kind}:${match.peer.id}`);
|
|
22
|
-
|
|
23
|
+
}
|
|
24
|
+
if (match.guildId) {
|
|
23
25
|
parts.push(`guild=${match.guildId}`);
|
|
24
|
-
|
|
26
|
+
}
|
|
27
|
+
if (match.teamId) {
|
|
25
28
|
parts.push(`team=${match.teamId}`);
|
|
29
|
+
}
|
|
26
30
|
return parts.join(" ");
|
|
27
31
|
}
|
|
28
32
|
export function applyAgentBindings(cfg, bindings) {
|
|
@@ -68,8 +72,9 @@ export function applyAgentBindings(cfg, bindings) {
|
|
|
68
72
|
}
|
|
69
73
|
function resolveDefaultAccountId(cfg, provider) {
|
|
70
74
|
const plugin = getChannelPlugin(provider);
|
|
71
|
-
if (!plugin)
|
|
75
|
+
if (!plugin) {
|
|
72
76
|
return DEFAULT_ACCOUNT_ID;
|
|
77
|
+
}
|
|
73
78
|
return resolveChannelDefaultAccountId({ plugin, cfg });
|
|
74
79
|
}
|
|
75
80
|
export function buildChannelBindings(params) {
|
|
@@ -98,8 +103,9 @@ export function parseBindingSpecs(params) {
|
|
|
98
103
|
const agentId = normalizeAgentId(params.agentId);
|
|
99
104
|
for (const raw of specs) {
|
|
100
105
|
const trimmed = raw?.trim();
|
|
101
|
-
if (!trimmed)
|
|
106
|
+
if (!trimmed) {
|
|
102
107
|
continue;
|
|
108
|
+
}
|
|
103
109
|
const [channelRaw, accountRaw] = trimmed.split(":", 2);
|
|
104
110
|
const channel = normalizeChannelId(channelRaw);
|
|
105
111
|
if (!channel) {
|
|
@@ -118,8 +124,9 @@ export function parseBindingSpecs(params) {
|
|
|
118
124
|
}
|
|
119
125
|
}
|
|
120
126
|
const match = { channel };
|
|
121
|
-
if (accountId)
|
|
127
|
+
if (accountId) {
|
|
122
128
|
match.accountId = accountId;
|
|
129
|
+
}
|
|
123
130
|
bindings.push({ agentId, match });
|
|
124
131
|
}
|
|
125
132
|
return { bindings, errors };
|
|
@@ -13,8 +13,8 @@ import { WizardCancelledError } from "../wizard/prompts.js";
|
|
|
13
13
|
import { applyAgentBindings, buildChannelBindings, describeBinding, parseBindingSpecs, } from "./agents.bindings.js";
|
|
14
14
|
import { createQuietRuntime, requireValidConfig } from "./agents.command-shared.js";
|
|
15
15
|
import { applyAgentConfig, findAgentEntryIndex, listAgentEntries } from "./agents.config.js";
|
|
16
|
-
import { applyAuthChoice, warnIfModelConfigLooksOff } from "./auth-choice.js";
|
|
17
16
|
import { promptAuthChoiceGrouped } from "./auth-choice-prompt.js";
|
|
17
|
+
import { applyAuthChoice, warnIfModelConfigLooksOff } from "./auth-choice.js";
|
|
18
18
|
import { setupChannels } from "./onboard-channels.js";
|
|
19
19
|
import { ensureWorkspaceAndSessions } from "./onboard-helpers.js";
|
|
20
20
|
async function fileExists(pathname) {
|
|
@@ -28,8 +28,9 @@ async function fileExists(pathname) {
|
|
|
28
28
|
}
|
|
29
29
|
export async function agentsAddCommand(opts, runtime = defaultRuntime, params) {
|
|
30
30
|
const cfg = await requireValidConfig(runtime);
|
|
31
|
-
if (!cfg)
|
|
31
|
+
if (!cfg) {
|
|
32
32
|
return;
|
|
33
|
+
}
|
|
33
34
|
const workspaceFlag = opts.workspace?.trim();
|
|
34
35
|
const nameInput = opts.name?.trim();
|
|
35
36
|
const hasFlags = params?.hasFlags === true;
|
|
@@ -90,8 +91,9 @@ export async function agentsAddCommand(opts, runtime = defaultRuntime, params) {
|
|
|
90
91
|
? applyAgentBindings(nextConfig, bindingParse.bindings)
|
|
91
92
|
: { config: nextConfig, added: [], skipped: [], conflicts: [] };
|
|
92
93
|
await writeConfigFile(bindingResult.config);
|
|
93
|
-
if (!opts.json)
|
|
94
|
+
if (!opts.json) {
|
|
94
95
|
logConfigUpdated(runtime);
|
|
96
|
+
}
|
|
95
97
|
const quietRuntime = opts.json ? createQuietRuntime(runtime) : runtime;
|
|
96
98
|
await ensureWorkspaceAndSessions(workspaceDir, quietRuntime, {
|
|
97
99
|
skipBootstrap: Boolean(bindingResult.config.agents?.defaults?.skipBootstrap),
|
|
@@ -116,8 +118,9 @@ export async function agentsAddCommand(opts, runtime = defaultRuntime, params) {
|
|
|
116
118
|
runtime.log(`Agent: ${agentId}`);
|
|
117
119
|
runtime.log(`Workspace: ${shortenHomePath(workspaceDir)}`);
|
|
118
120
|
runtime.log(`Agent dir: ${shortenHomePath(agentDir)}`);
|
|
119
|
-
if (model)
|
|
121
|
+
if (model) {
|
|
120
122
|
runtime.log(`Model: ${model}`);
|
|
123
|
+
}
|
|
121
124
|
if (bindingResult.conflicts.length > 0) {
|
|
122
125
|
runtime.error([
|
|
123
126
|
"Skipped bindings already claimed by another agent:",
|
|
@@ -129,13 +132,14 @@ export async function agentsAddCommand(opts, runtime = defaultRuntime, params) {
|
|
|
129
132
|
}
|
|
130
133
|
const prompter = createClackPrompter();
|
|
131
134
|
try {
|
|
132
|
-
await prompter.intro("Add
|
|
135
|
+
await prompter.intro("Add Pool Bot agent");
|
|
133
136
|
const name = nameInput ??
|
|
134
137
|
(await prompter.text({
|
|
135
138
|
message: "Agent name",
|
|
136
139
|
validate: (value) => {
|
|
137
|
-
if (!value?.trim())
|
|
140
|
+
if (!value?.trim()) {
|
|
138
141
|
return "Required";
|
|
142
|
+
}
|
|
139
143
|
const normalized = normalizeAgentId(value);
|
|
140
144
|
if (normalized === DEFAULT_AGENT_ID) {
|
|
141
145
|
return `"${DEFAULT_AGENT_ID}" is reserved. Choose another name.`;
|
|
@@ -143,7 +147,7 @@ export async function agentsAddCommand(opts, runtime = defaultRuntime, params) {
|
|
|
143
147
|
return undefined;
|
|
144
148
|
},
|
|
145
149
|
}));
|
|
146
|
-
const agentName = String(name).trim();
|
|
150
|
+
const agentName = String(name ?? "").trim();
|
|
147
151
|
const agentId = normalizeAgentId(agentName);
|
|
148
152
|
if (agentName !== agentId) {
|
|
149
153
|
await prompter.note(`Normalized id to "${agentId}".`, "Agent id");
|
|
@@ -165,7 +169,7 @@ export async function agentsAddCommand(opts, runtime = defaultRuntime, params) {
|
|
|
165
169
|
initialValue: workspaceDefault,
|
|
166
170
|
validate: (value) => (value?.trim() ? undefined : "Required"),
|
|
167
171
|
});
|
|
168
|
-
const workspaceDir = resolveUserPath(String(workspaceInput).trim() || workspaceDefault);
|
|
172
|
+
const workspaceDir = resolveUserPath(String(workspaceInput ?? "").trim() || workspaceDefault);
|
|
169
173
|
const agentDir = resolveAgentDir(cfg, agentId);
|
|
170
174
|
let nextConfig = applyAgentConfig(cfg, {
|
|
171
175
|
agentId,
|
|
@@ -285,7 +289,7 @@ export async function agentsAddCommand(opts, runtime = defaultRuntime, params) {
|
|
|
285
289
|
}
|
|
286
290
|
catch (err) {
|
|
287
291
|
if (err instanceof WizardCancelledError) {
|
|
288
|
-
runtime.exit(
|
|
292
|
+
runtime.exit(1);
|
|
289
293
|
return;
|
|
290
294
|
}
|
|
291
295
|
throw err;
|
|
@@ -38,8 +38,9 @@ function resolveAgentIdByWorkspace(cfg, workspaceDir) {
|
|
|
38
38
|
}
|
|
39
39
|
export async function agentsSetIdentityCommand(opts, runtime = defaultRuntime) {
|
|
40
40
|
const cfg = await requireValidConfig(runtime);
|
|
41
|
-
if (!cfg)
|
|
41
|
+
if (!cfg) {
|
|
42
42
|
return;
|
|
43
|
+
}
|
|
43
44
|
const agentRaw = coerceTrimmed(opts.agent);
|
|
44
45
|
const nameRaw = coerceTrimmed(opts.name);
|
|
45
46
|
const emojiRaw = coerceTrimmed(opts.emoji);
|
|
@@ -155,14 +156,19 @@ export async function agentsSetIdentityCommand(opts, runtime = defaultRuntime) {
|
|
|
155
156
|
}
|
|
156
157
|
logConfigUpdated(runtime);
|
|
157
158
|
runtime.log(`Agent: ${agentId}`);
|
|
158
|
-
if (nextIdentity.name)
|
|
159
|
+
if (nextIdentity.name) {
|
|
159
160
|
runtime.log(`Name: ${nextIdentity.name}`);
|
|
160
|
-
|
|
161
|
+
}
|
|
162
|
+
if (nextIdentity.theme) {
|
|
161
163
|
runtime.log(`Theme: ${nextIdentity.theme}`);
|
|
162
|
-
|
|
164
|
+
}
|
|
165
|
+
if (nextIdentity.emoji) {
|
|
163
166
|
runtime.log(`Emoji: ${nextIdentity.emoji}`);
|
|
164
|
-
|
|
167
|
+
}
|
|
168
|
+
if (nextIdentity.avatar) {
|
|
165
169
|
runtime.log(`Avatar: ${nextIdentity.avatar}`);
|
|
166
|
-
|
|
170
|
+
}
|
|
171
|
+
if (workspaceDir) {
|
|
167
172
|
runtime.log(`Workspace: ${shortenHomePath(workspaceDir)}`);
|
|
173
|
+
}
|
|
168
174
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { formatCliCommand } from "../cli/command-format.js";
|
|
1
2
|
import { normalizeAgentId } from "../routing/session-key.js";
|
|
2
3
|
import { defaultRuntime } from "../runtime.js";
|
|
3
|
-
import { formatCliCommand } from "../cli/command-format.js";
|
|
4
4
|
import { shortenHomePath } from "../utils.js";
|
|
5
5
|
import { describeBinding } from "./agents.bindings.js";
|
|
6
6
|
import { requireValidConfig } from "./agents.command-shared.js";
|
|
@@ -12,10 +12,12 @@ function formatSummary(summary) {
|
|
|
12
12
|
? `${summary.id}${defaultTag} (${summary.name})`
|
|
13
13
|
: `${summary.id}${defaultTag}`;
|
|
14
14
|
const identityParts = [];
|
|
15
|
-
if (summary.identityEmoji)
|
|
15
|
+
if (summary.identityEmoji) {
|
|
16
16
|
identityParts.push(summary.identityEmoji);
|
|
17
|
-
|
|
17
|
+
}
|
|
18
|
+
if (summary.identityName) {
|
|
18
19
|
identityParts.push(summary.identityName);
|
|
20
|
+
}
|
|
19
21
|
const identityLine = identityParts.length > 0 ? identityParts.join(" ") : null;
|
|
20
22
|
const identitySource = summary.identitySource === "identity"
|
|
21
23
|
? "IDENTITY.md"
|
|
@@ -28,8 +30,9 @@ function formatSummary(summary) {
|
|
|
28
30
|
}
|
|
29
31
|
lines.push(` Workspace: ${shortenHomePath(summary.workspace)}`);
|
|
30
32
|
lines.push(` Agent dir: ${shortenHomePath(summary.agentDir)}`);
|
|
31
|
-
if (summary.model)
|
|
33
|
+
if (summary.model) {
|
|
32
34
|
lines.push(` Model: ${summary.model}`);
|
|
35
|
+
}
|
|
33
36
|
lines.push(` Routing rules: ${summary.bindings}`);
|
|
34
37
|
if (summary.routes?.length) {
|
|
35
38
|
lines.push(` Routing: ${summary.routes.join(", ")}`);
|
|
@@ -50,8 +53,9 @@ function formatSummary(summary) {
|
|
|
50
53
|
}
|
|
51
54
|
export async function agentsListCommand(opts, runtime = defaultRuntime) {
|
|
52
55
|
const cfg = await requireValidConfig(runtime);
|
|
53
|
-
if (!cfg)
|
|
56
|
+
if (!cfg) {
|
|
54
57
|
return;
|
|
58
|
+
}
|
|
55
59
|
const summaries = buildAgentSummaries(cfg);
|
|
56
60
|
const bindingMap = new Map();
|
|
57
61
|
for (const binding of cfg.bindings ?? []) {
|
|
@@ -84,8 +88,9 @@ export async function agentsListCommand(opts, runtime = defaultRuntime) {
|
|
|
84
88
|
bindings,
|
|
85
89
|
providerStatus,
|
|
86
90
|
});
|
|
87
|
-
if (providerLines.length > 0)
|
|
91
|
+
if (providerLines.length > 0) {
|
|
88
92
|
summary.providers = providerLines;
|
|
93
|
+
}
|
|
89
94
|
}
|
|
90
95
|
if (opts.json) {
|
|
91
96
|
runtime.log(JSON.stringify(summaries, null, 2));
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import { resolveAgentDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, } from "../agents/agent-scope.js";
|
|
1
|
+
import { listAgentEntries, resolveAgentDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, } from "../agents/agent-scope.js";
|
|
2
2
|
import { identityHasValues, loadAgentIdentityFromWorkspace, parseIdentityMarkdown as parseIdentityMarkdownFile, } from "../agents/identity-file.js";
|
|
3
3
|
import { normalizeAgentId } from "../routing/session-key.js";
|
|
4
|
-
export
|
|
5
|
-
const list = cfg.agents?.list;
|
|
6
|
-
if (!Array.isArray(list))
|
|
7
|
-
return [];
|
|
8
|
-
return list.filter((entry) => Boolean(entry && typeof entry === "object"));
|
|
9
|
-
}
|
|
4
|
+
export { listAgentEntries };
|
|
10
5
|
export function findAgentEntryIndex(list, agentId) {
|
|
11
6
|
const id = normalizeAgentId(agentId);
|
|
12
7
|
return list.findIndex((entry) => normalizeAgentId(entry.id) === id);
|
|
@@ -23,13 +18,15 @@ function resolveAgentModel(cfg, agentId) {
|
|
|
23
18
|
}
|
|
24
19
|
if (typeof entry.model === "object") {
|
|
25
20
|
const primary = entry.model.primary?.trim();
|
|
26
|
-
if (primary)
|
|
21
|
+
if (primary) {
|
|
27
22
|
return primary;
|
|
23
|
+
}
|
|
28
24
|
}
|
|
29
25
|
}
|
|
30
26
|
const raw = cfg.agents?.defaults?.model;
|
|
31
|
-
if (typeof raw === "string")
|
|
27
|
+
if (typeof raw === "string") {
|
|
32
28
|
return raw;
|
|
29
|
+
}
|
|
33
30
|
return raw?.primary?.trim() || undefined;
|
|
34
31
|
}
|
|
35
32
|
export function parseIdentityMarkdown(content) {
|
|
@@ -37,8 +34,9 @@ export function parseIdentityMarkdown(content) {
|
|
|
37
34
|
}
|
|
38
35
|
export function loadAgentIdentity(workspace) {
|
|
39
36
|
const parsed = loadAgentIdentityFromWorkspace(workspace);
|
|
40
|
-
if (!parsed)
|
|
37
|
+
if (!parsed) {
|
|
41
38
|
return null;
|
|
39
|
+
}
|
|
42
40
|
return identityHasValues(parsed) ? parsed : null;
|
|
43
41
|
}
|
|
44
42
|
export function buildAgentSummaries(cfg) {
|