@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
|
@@ -113,7 +113,7 @@ export const FIELD_LABELS = {
|
|
|
113
113
|
"gateway.controlUi.basePath": "Control UI Base Path",
|
|
114
114
|
"gateway.controlUi.root": "Control UI Assets Root",
|
|
115
115
|
"gateway.controlUi.allowedOrigins": "Control UI Allowed Origins",
|
|
116
|
-
"gateway.controlUi.allowInsecureAuth": "
|
|
116
|
+
"gateway.controlUi.allowInsecureAuth": "Insecure Control UI Auth Toggle",
|
|
117
117
|
"gateway.controlUi.dangerouslyDisableDeviceAuth": "Dangerously Disable Control UI Device Auth",
|
|
118
118
|
"gateway.http.endpoints.chatCompletions.enabled": "OpenAI Chat Completions Endpoint",
|
|
119
119
|
"gateway.reload.mode": "Config Reload Mode",
|
|
@@ -163,6 +163,10 @@ export const FIELD_LABELS = {
|
|
|
163
163
|
"agents.defaults.memorySearch.query.hybrid.vectorWeight": "Memory Search Vector Weight",
|
|
164
164
|
"agents.defaults.memorySearch.query.hybrid.textWeight": "Memory Search Text Weight",
|
|
165
165
|
"agents.defaults.memorySearch.query.hybrid.candidateMultiplier": "Memory Search Hybrid Candidate Multiplier",
|
|
166
|
+
"agents.defaults.memorySearch.query.hybrid.mmr.enabled": "Memory Search MMR Re-ranking",
|
|
167
|
+
"agents.defaults.memorySearch.query.hybrid.mmr.lambda": "Memory Search MMR Lambda",
|
|
168
|
+
"agents.defaults.memorySearch.query.hybrid.temporalDecay.enabled": "Memory Search Temporal Decay",
|
|
169
|
+
"agents.defaults.memorySearch.query.hybrid.temporalDecay.halfLifeDays": "Memory Search Temporal Decay Half-life (Days)",
|
|
166
170
|
"agents.defaults.memorySearch.cache.enabled": "Memory Search Embedding Cache",
|
|
167
171
|
"agents.defaults.memorySearch.cache.maxEntries": "Memory Search Embedding Cache Max Entries",
|
|
168
172
|
memory: "Memory",
|
|
@@ -216,19 +220,31 @@ export const FIELD_LABELS = {
|
|
|
216
220
|
"commands.restart": "Allow Restart",
|
|
217
221
|
"commands.useAccessGroups": "Use Access Groups",
|
|
218
222
|
"commands.ownerAllowFrom": "Command Owners",
|
|
223
|
+
"commands.ownerDisplay": "Owner ID Display",
|
|
224
|
+
"commands.ownerDisplaySecret": "Owner ID Hash Secret",
|
|
219
225
|
"ui.seamColor": "Accent Color",
|
|
220
226
|
"ui.assistant.name": "Assistant Name",
|
|
221
227
|
"ui.assistant.avatar": "Assistant Avatar",
|
|
222
228
|
"browser.evaluateEnabled": "Browser Evaluate Enabled",
|
|
223
229
|
"browser.snapshotDefaults": "Browser Snapshot Defaults",
|
|
224
230
|
"browser.snapshotDefaults.mode": "Browser Snapshot Mode",
|
|
231
|
+
"browser.ssrfPolicy": "Browser SSRF Policy",
|
|
232
|
+
"browser.ssrfPolicy.allowPrivateNetwork": "Browser Allow Private Network",
|
|
233
|
+
"browser.ssrfPolicy.allowedHostnames": "Browser Allowed Hostnames",
|
|
234
|
+
"browser.ssrfPolicy.hostnameAllowlist": "Browser Hostname Allowlist",
|
|
225
235
|
"browser.remoteCdpTimeoutMs": "Remote CDP Timeout (ms)",
|
|
226
236
|
"browser.remoteCdpHandshakeTimeoutMs": "Remote CDP Handshake Timeout (ms)",
|
|
227
237
|
"session.dmScope": "DM Session Scope",
|
|
238
|
+
"session.threadBindings.enabled": "Thread Binding Enabled",
|
|
239
|
+
"session.threadBindings.ttlHours": "Thread Binding TTL (hours)",
|
|
228
240
|
"session.agentToAgent.maxPingPongTurns": "Agent-to-Agent Ping-Pong Turns",
|
|
229
241
|
"messages.suppressToolErrors": "Suppress Tool Error Warnings",
|
|
230
242
|
"messages.ackReaction": "Ack Reaction Emoji",
|
|
231
243
|
"messages.ackReactionScope": "Ack Reaction Scope",
|
|
244
|
+
"messages.statusReactions": "Status Reactions",
|
|
245
|
+
"messages.statusReactions.enabled": "Enable Status Reactions",
|
|
246
|
+
"messages.statusReactions.emojis": "Status Reaction Emojis",
|
|
247
|
+
"messages.statusReactions.timing": "Status Reaction Timing",
|
|
232
248
|
"messages.inbound.debounceMs": "Inbound Message Debounce (ms)",
|
|
233
249
|
"talk.apiKey": "Talk API Key",
|
|
234
250
|
"channels.whatsapp": "WhatsApp",
|
|
@@ -241,13 +257,11 @@ export const FIELD_LABELS = {
|
|
|
241
257
|
"channels.imessage": "iMessage",
|
|
242
258
|
"channels.bluebubbles": "BlueBubbles",
|
|
243
259
|
"channels.msteams": "MS Teams",
|
|
260
|
+
"channels.modelByChannel": "Channel Model Overrides",
|
|
244
261
|
...IRC_FIELD_LABELS,
|
|
245
262
|
"channels.telegram.botToken": "Telegram Bot Token",
|
|
246
263
|
"channels.telegram.dmPolicy": "Telegram DM Policy",
|
|
247
|
-
"channels.telegram.
|
|
248
|
-
"channels.telegram.draftChunk.minChars": "Telegram Draft Chunk Min Chars",
|
|
249
|
-
"channels.telegram.draftChunk.maxChars": "Telegram Draft Chunk Max Chars",
|
|
250
|
-
"channels.telegram.draftChunk.breakPreference": "Telegram Draft Chunk Break Preference",
|
|
264
|
+
"channels.telegram.streaming": "Telegram Streaming Mode",
|
|
251
265
|
"channels.telegram.retry.attempts": "Telegram Retry Attempts",
|
|
252
266
|
"channels.telegram.retry.minDelayMs": "Telegram Retry Min Delay (ms)",
|
|
253
267
|
"channels.telegram.retry.maxDelayMs": "Telegram Retry Max Delay (ms)",
|
|
@@ -263,14 +277,24 @@ export const FIELD_LABELS = {
|
|
|
263
277
|
"channels.bluebubbles.dmPolicy": "BlueBubbles DM Policy",
|
|
264
278
|
"channels.discord.dmPolicy": "Discord DM Policy",
|
|
265
279
|
"channels.discord.dm.policy": "Discord DM Policy",
|
|
280
|
+
"channels.discord.streaming": "Discord Streaming Mode",
|
|
281
|
+
"channels.discord.streamMode": "Discord Stream Mode (Legacy)",
|
|
282
|
+
"channels.discord.draftChunk.minChars": "Discord Draft Chunk Min Chars",
|
|
283
|
+
"channels.discord.draftChunk.maxChars": "Discord Draft Chunk Max Chars",
|
|
284
|
+
"channels.discord.draftChunk.breakPreference": "Discord Draft Chunk Break Preference",
|
|
266
285
|
"channels.discord.retry.attempts": "Discord Retry Attempts",
|
|
267
286
|
"channels.discord.retry.minDelayMs": "Discord Retry Min Delay (ms)",
|
|
268
287
|
"channels.discord.retry.maxDelayMs": "Discord Retry Max Delay (ms)",
|
|
269
288
|
"channels.discord.retry.jitter": "Discord Retry Jitter",
|
|
270
289
|
"channels.discord.maxLinesPerMessage": "Discord Max Lines Per Message",
|
|
290
|
+
"channels.discord.threadBindings.enabled": "Discord Thread Binding Enabled",
|
|
291
|
+
"channels.discord.threadBindings.ttlHours": "Discord Thread Binding TTL (hours)",
|
|
292
|
+
"channels.discord.threadBindings.spawnSubagentSessions": "Discord Thread-Bound Subagent Spawn",
|
|
271
293
|
"channels.discord.ui.components.accentColor": "Discord Component Accent Color",
|
|
272
294
|
"channels.discord.intents.presence": "Discord Presence Intent",
|
|
273
295
|
"channels.discord.intents.guildMembers": "Discord Guild Members Intent",
|
|
296
|
+
"channels.discord.voice.enabled": "Discord Voice Enabled",
|
|
297
|
+
"channels.discord.voice.autoJoin": "Discord Voice Auto-Join",
|
|
274
298
|
"channels.discord.pluralkit.enabled": "Discord PluralKit Enabled",
|
|
275
299
|
"channels.discord.pluralkit.token": "Discord PluralKit Token",
|
|
276
300
|
"channels.discord.activity": "Discord Presence Activity",
|
|
@@ -285,7 +309,9 @@ export const FIELD_LABELS = {
|
|
|
285
309
|
"channels.slack.appToken": "Slack App Token",
|
|
286
310
|
"channels.slack.userToken": "Slack User Token",
|
|
287
311
|
"channels.slack.userTokenReadOnly": "Slack User Token Read Only",
|
|
288
|
-
"channels.slack.
|
|
312
|
+
"channels.slack.streaming": "Slack Streaming Mode",
|
|
313
|
+
"channels.slack.nativeStreaming": "Slack Native Streaming",
|
|
314
|
+
"channels.slack.streamMode": "Slack Stream Mode (Legacy)",
|
|
289
315
|
"channels.slack.thread.historyScope": "Slack Thread History Scope",
|
|
290
316
|
"channels.slack.thread.inheritParent": "Slack Thread Parent Inheritance",
|
|
291
317
|
"channels.slack.thread.initialHistoryLimit": "Slack Thread Initial History Limit",
|
|
@@ -314,5 +340,11 @@ export const FIELD_LABELS = {
|
|
|
314
340
|
"plugins.installs.*.sourcePath": "Plugin Install Source Path",
|
|
315
341
|
"plugins.installs.*.installPath": "Plugin Install Path",
|
|
316
342
|
"plugins.installs.*.version": "Plugin Install Version",
|
|
343
|
+
"plugins.installs.*.resolvedName": "Plugin Resolved Package Name",
|
|
344
|
+
"plugins.installs.*.resolvedVersion": "Plugin Resolved Package Version",
|
|
345
|
+
"plugins.installs.*.resolvedSpec": "Plugin Resolved Package Spec",
|
|
346
|
+
"plugins.installs.*.integrity": "Plugin Resolved Integrity",
|
|
347
|
+
"plugins.installs.*.shasum": "Plugin Resolved Shasum",
|
|
348
|
+
"plugins.installs.*.resolvedAt": "Plugin Resolution Time",
|
|
317
349
|
"plugins.installs.*.installedAt": "Plugin Install Time",
|
|
318
350
|
};
|
|
@@ -5,9 +5,9 @@ import { loadSessionStore } from "./store.js";
|
|
|
5
5
|
* Extract deliveryContext and threadId from a sessionKey.
|
|
6
6
|
* Supports both :thread: (most channels) and :topic: (Telegram).
|
|
7
7
|
*/
|
|
8
|
-
export function
|
|
8
|
+
export function parseSessionThreadInfo(sessionKey) {
|
|
9
9
|
if (!sessionKey) {
|
|
10
|
-
return {
|
|
10
|
+
return { baseSessionKey: undefined, threadId: undefined };
|
|
11
11
|
}
|
|
12
12
|
const topicIndex = sessionKey.lastIndexOf(":topic:");
|
|
13
13
|
const threadIndex = sessionKey.lastIndexOf(":thread:");
|
|
@@ -16,13 +16,20 @@ export function extractDeliveryInfo(sessionKey) {
|
|
|
16
16
|
const baseSessionKey = markerIndex === -1 ? sessionKey : sessionKey.slice(0, markerIndex);
|
|
17
17
|
const threadIdRaw = markerIndex === -1 ? undefined : sessionKey.slice(markerIndex + marker.length);
|
|
18
18
|
const threadId = threadIdRaw?.trim() || undefined;
|
|
19
|
+
return { baseSessionKey, threadId };
|
|
20
|
+
}
|
|
21
|
+
export function extractDeliveryInfo(sessionKey) {
|
|
22
|
+
const { baseSessionKey, threadId } = parseSessionThreadInfo(sessionKey);
|
|
23
|
+
if (!sessionKey || !baseSessionKey) {
|
|
24
|
+
return { deliveryContext: undefined, threadId };
|
|
25
|
+
}
|
|
19
26
|
let deliveryContext;
|
|
20
27
|
try {
|
|
21
28
|
const cfg = loadConfig();
|
|
22
29
|
const storePath = resolveStorePath(cfg.session?.store);
|
|
23
30
|
const store = loadSessionStore(storePath);
|
|
24
31
|
let entry = store[sessionKey];
|
|
25
|
-
if (!entry?.deliveryContext &&
|
|
32
|
+
if (!entry?.deliveryContext && baseSessionKey !== sessionKey) {
|
|
26
33
|
entry = store[baseSessionKey];
|
|
27
34
|
}
|
|
28
35
|
if (entry?.deliveryContext) {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { buildAgentMainSessionKey, DEFAULT_AGENT_ID, normalizeAgentId, normalizeMainKey, resolveAgentIdFromSessionKey, } from "../../routing/session-key.js";
|
|
2
2
|
import { loadConfig } from "../config.js";
|
|
3
3
|
export function resolveMainSessionKey(cfg) {
|
|
4
|
-
if (cfg?.session?.scope === "global")
|
|
4
|
+
if (cfg?.session?.scope === "global") {
|
|
5
5
|
return "global";
|
|
6
|
+
}
|
|
6
7
|
const agents = cfg?.agents?.list ?? [];
|
|
7
8
|
const defaultAgentId = agents.find((agent) => agent?.default)?.id ?? agents[0]?.id ?? DEFAULT_AGENT_ID;
|
|
8
9
|
const agentId = normalizeAgentId(defaultAgentId);
|
|
@@ -19,14 +20,16 @@ export function resolveAgentMainSessionKey(params) {
|
|
|
19
20
|
}
|
|
20
21
|
export function resolveExplicitAgentSessionKey(params) {
|
|
21
22
|
const agentId = params.agentId?.trim();
|
|
22
|
-
if (!agentId)
|
|
23
|
+
if (!agentId) {
|
|
23
24
|
return undefined;
|
|
25
|
+
}
|
|
24
26
|
return resolveAgentMainSessionKey({ cfg: params.cfg, agentId });
|
|
25
27
|
}
|
|
26
28
|
export function canonicalizeMainSessionAlias(params) {
|
|
27
29
|
const raw = params.sessionKey.trim();
|
|
28
|
-
if (!raw)
|
|
30
|
+
if (!raw) {
|
|
29
31
|
return raw;
|
|
32
|
+
}
|
|
30
33
|
const agentId = normalizeAgentId(params.agentId);
|
|
31
34
|
const mainKey = normalizeMainKey(params.cfg?.session?.mainKey);
|
|
32
35
|
const agentMainSessionKey = buildAgentMainSessionKey({ agentId, mainKey });
|
|
@@ -35,9 +38,11 @@ export function canonicalizeMainSessionAlias(params) {
|
|
|
35
38
|
mainKey: "main",
|
|
36
39
|
});
|
|
37
40
|
const isMainAlias = raw === "main" || raw === mainKey || raw === agentMainSessionKey || raw === agentMainAliasKey;
|
|
38
|
-
if (params.cfg?.session?.scope === "global" && isMainAlias)
|
|
41
|
+
if (params.cfg?.session?.scope === "global" && isMainAlias) {
|
|
39
42
|
return "global";
|
|
40
|
-
|
|
43
|
+
}
|
|
44
|
+
if (isMainAlias) {
|
|
41
45
|
return agentMainSessionKey;
|
|
46
|
+
}
|
|
42
47
|
return raw;
|
|
43
48
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { resolveSessionFilePath } from "./paths.js";
|
|
2
|
+
import { updateSessionStore } from "./store.js";
|
|
3
|
+
export async function resolveAndPersistSessionFile(params) {
|
|
4
|
+
const { sessionId, sessionKey, sessionStore, storePath } = params;
|
|
5
|
+
const baseEntry = params.sessionEntry ??
|
|
6
|
+
sessionStore[sessionKey] ?? { sessionId, updatedAt: Date.now() };
|
|
7
|
+
const fallbackSessionFile = params.fallbackSessionFile?.trim();
|
|
8
|
+
const entryForResolve = !baseEntry.sessionFile && fallbackSessionFile
|
|
9
|
+
? { ...baseEntry, sessionFile: fallbackSessionFile }
|
|
10
|
+
: baseEntry;
|
|
11
|
+
const sessionFile = resolveSessionFilePath(sessionId, entryForResolve, {
|
|
12
|
+
agentId: params.agentId,
|
|
13
|
+
sessionsDir: params.sessionsDir,
|
|
14
|
+
});
|
|
15
|
+
const persistedEntry = {
|
|
16
|
+
...baseEntry,
|
|
17
|
+
sessionId,
|
|
18
|
+
updatedAt: Date.now(),
|
|
19
|
+
sessionFile,
|
|
20
|
+
};
|
|
21
|
+
if (baseEntry.sessionId !== sessionId || baseEntry.sessionFile !== sessionFile) {
|
|
22
|
+
sessionStore[sessionKey] = persistedEntry;
|
|
23
|
+
await updateSessionStore(storePath, (store) => {
|
|
24
|
+
store[sessionKey] = {
|
|
25
|
+
...store[sessionKey],
|
|
26
|
+
...persistedEntry,
|
|
27
|
+
};
|
|
28
|
+
}, params.activeSessionKey ? { activeSessionKey: params.activeSessionKey } : undefined);
|
|
29
|
+
return { sessionFile, sessionEntry: persistedEntry };
|
|
30
|
+
}
|
|
31
|
+
sessionStore[sessionKey] = persistedEntry;
|
|
32
|
+
return { sessionFile, sessionEntry: persistedEntry };
|
|
33
|
+
}
|
|
@@ -3,11 +3,13 @@ import { normalizeE164 } from "../../utils.js";
|
|
|
3
3
|
import { resolveGroupSessionKey } from "./group.js";
|
|
4
4
|
// Decide which session bucket to use (per-sender vs global).
|
|
5
5
|
export function deriveSessionKey(scope, ctx) {
|
|
6
|
-
if (scope === "global")
|
|
6
|
+
if (scope === "global") {
|
|
7
7
|
return "global";
|
|
8
|
+
}
|
|
8
9
|
const resolvedGroup = resolveGroupSessionKey(ctx);
|
|
9
|
-
if (resolvedGroup)
|
|
10
|
+
if (resolvedGroup) {
|
|
10
11
|
return resolvedGroup.key;
|
|
12
|
+
}
|
|
11
13
|
const from = ctx.From ? normalizeE164(ctx.From) : "";
|
|
12
14
|
return from || "unknown";
|
|
13
15
|
}
|
|
@@ -17,18 +19,21 @@ export function deriveSessionKey(scope, ctx) {
|
|
|
17
19
|
*/
|
|
18
20
|
export function resolveSessionKey(scope, ctx, mainKey) {
|
|
19
21
|
const explicit = ctx.SessionKey?.trim();
|
|
20
|
-
if (explicit)
|
|
22
|
+
if (explicit) {
|
|
21
23
|
return explicit.toLowerCase();
|
|
24
|
+
}
|
|
22
25
|
const raw = deriveSessionKey(scope, ctx);
|
|
23
|
-
if (scope === "global")
|
|
26
|
+
if (scope === "global") {
|
|
24
27
|
return raw;
|
|
28
|
+
}
|
|
25
29
|
const canonicalMainKey = normalizeMainKey(mainKey);
|
|
26
30
|
const canonical = buildAgentMainSessionKey({
|
|
27
31
|
agentId: DEFAULT_AGENT_ID,
|
|
28
32
|
mainKey: canonicalMainKey,
|
|
29
33
|
});
|
|
30
34
|
const isGroup = raw.includes(":group:") || raw.includes(":channel:");
|
|
31
|
-
if (!isGroup)
|
|
35
|
+
if (!isGroup) {
|
|
32
36
|
return canonical;
|
|
37
|
+
}
|
|
33
38
|
return `agent:${DEFAULT_AGENT_ID}:${raw}`;
|
|
34
39
|
}
|
|
@@ -472,7 +472,7 @@ async function saveSessionStoreUnlocked(storePath, store, opts) {
|
|
|
472
472
|
// Final attempt failed — skip this save. The write lock ensures
|
|
473
473
|
// the next save will retry with fresh data. Log for diagnostics.
|
|
474
474
|
if (i === 4) {
|
|
475
|
-
|
|
475
|
+
log.warn(`rename failed after 5 attempts: ${storePath}`);
|
|
476
476
|
}
|
|
477
477
|
}
|
|
478
478
|
}
|
package/dist/config/sessions.js
CHANGED
|
@@ -168,7 +168,9 @@ export const SandboxBrowserSchema = z
|
|
|
168
168
|
enabled: z.boolean().optional(),
|
|
169
169
|
image: z.string().optional(),
|
|
170
170
|
containerPrefix: z.string().optional(),
|
|
171
|
+
network: z.string().optional(),
|
|
171
172
|
cdpPort: z.number().int().positive().optional(),
|
|
173
|
+
cdpSourceRange: z.string().optional(),
|
|
172
174
|
vncPort: z.number().int().positive().optional(),
|
|
173
175
|
noVncPort: z.number().int().positive().optional(),
|
|
174
176
|
headless: z.boolean().optional(),
|
|
@@ -177,6 +179,15 @@ export const SandboxBrowserSchema = z
|
|
|
177
179
|
autoStart: z.boolean().optional(),
|
|
178
180
|
autoStartTimeoutMs: z.number().int().positive().optional(),
|
|
179
181
|
binds: z.array(z.string()).optional(),
|
|
182
|
+
})
|
|
183
|
+
.superRefine((data, ctx) => {
|
|
184
|
+
if (data.network?.trim().toLowerCase() === "host") {
|
|
185
|
+
ctx.addIssue({
|
|
186
|
+
code: z.ZodIssueCode.custom,
|
|
187
|
+
path: ["network"],
|
|
188
|
+
message: 'Sandbox security: browser network mode "host" is blocked. Use "bridge" or a custom bridge network instead.',
|
|
189
|
+
});
|
|
190
|
+
}
|
|
180
191
|
})
|
|
181
192
|
.strict()
|
|
182
193
|
.optional();
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { ToolsSchema } from "./zod-schema.agent-runtime.js";
|
|
3
|
-
import { ApprovalsSchema } from "./zod-schema.approvals.js";
|
|
4
3
|
import { AgentsSchema, AudioSchema, BindingsSchema, BroadcastSchema } from "./zod-schema.agents.js";
|
|
4
|
+
import { ApprovalsSchema } from "./zod-schema.approvals.js";
|
|
5
5
|
import { HexColorSchema, ModelsConfigSchema } from "./zod-schema.core.js";
|
|
6
6
|
import { HookMappingSchema, HooksGmailSchema, InternalHooksSchema } from "./zod-schema.hooks.js";
|
|
7
|
+
import { InstallRecordShape } from "./zod-schema.installs.js";
|
|
7
8
|
import { ChannelsSchema } from "./zod-schema.providers.js";
|
|
8
|
-
import { CommandsSchema, MessagesSchema, SessionSchema } from "./zod-schema.session.js";
|
|
9
9
|
import { sensitive } from "./zod-schema.sensitive.js";
|
|
10
|
+
import { CommandsSchema, MessagesSchema, SessionSchema, SessionSendPolicySchema, } from "./zod-schema.session.js";
|
|
10
11
|
const BrowserSnapshotDefaultsSchema = z
|
|
11
12
|
.object({
|
|
12
13
|
mode: z.literal("efficient").optional(),
|
|
@@ -25,8 +26,78 @@ const NodeHostSchema = z
|
|
|
25
26
|
})
|
|
26
27
|
.strict()
|
|
27
28
|
.optional();
|
|
29
|
+
const MemoryQmdPathSchema = z
|
|
30
|
+
.object({
|
|
31
|
+
path: z.string(),
|
|
32
|
+
name: z.string().optional(),
|
|
33
|
+
pattern: z.string().optional(),
|
|
34
|
+
})
|
|
35
|
+
.strict();
|
|
36
|
+
const MemoryQmdSessionSchema = z
|
|
37
|
+
.object({
|
|
38
|
+
enabled: z.boolean().optional(),
|
|
39
|
+
exportDir: z.string().optional(),
|
|
40
|
+
retentionDays: z.number().int().nonnegative().optional(),
|
|
41
|
+
})
|
|
42
|
+
.strict();
|
|
43
|
+
const MemoryQmdUpdateSchema = z
|
|
44
|
+
.object({
|
|
45
|
+
interval: z.string().optional(),
|
|
46
|
+
debounceMs: z.number().int().nonnegative().optional(),
|
|
47
|
+
onBoot: z.boolean().optional(),
|
|
48
|
+
waitForBootSync: z.boolean().optional(),
|
|
49
|
+
embedInterval: z.string().optional(),
|
|
50
|
+
commandTimeoutMs: z.number().int().nonnegative().optional(),
|
|
51
|
+
updateTimeoutMs: z.number().int().nonnegative().optional(),
|
|
52
|
+
embedTimeoutMs: z.number().int().nonnegative().optional(),
|
|
53
|
+
})
|
|
54
|
+
.strict();
|
|
55
|
+
const MemoryQmdLimitsSchema = z
|
|
56
|
+
.object({
|
|
57
|
+
maxResults: z.number().int().positive().optional(),
|
|
58
|
+
maxSnippetChars: z.number().int().positive().optional(),
|
|
59
|
+
maxInjectedChars: z.number().int().positive().optional(),
|
|
60
|
+
timeoutMs: z.number().int().nonnegative().optional(),
|
|
61
|
+
})
|
|
62
|
+
.strict();
|
|
63
|
+
const MemoryQmdMcporterSchema = z
|
|
64
|
+
.object({
|
|
65
|
+
enabled: z.boolean().optional(),
|
|
66
|
+
serverName: z.string().optional(),
|
|
67
|
+
startDaemon: z.boolean().optional(),
|
|
68
|
+
})
|
|
69
|
+
.strict();
|
|
70
|
+
const MemoryQmdSchema = z
|
|
71
|
+
.object({
|
|
72
|
+
command: z.string().optional(),
|
|
73
|
+
mcporter: MemoryQmdMcporterSchema.optional(),
|
|
74
|
+
searchMode: z.union([z.literal("query"), z.literal("search"), z.literal("vsearch")]).optional(),
|
|
75
|
+
includeDefaultMemory: z.boolean().optional(),
|
|
76
|
+
paths: z.array(MemoryQmdPathSchema).optional(),
|
|
77
|
+
sessions: MemoryQmdSessionSchema.optional(),
|
|
78
|
+
update: MemoryQmdUpdateSchema.optional(),
|
|
79
|
+
limits: MemoryQmdLimitsSchema.optional(),
|
|
80
|
+
scope: SessionSendPolicySchema.optional(),
|
|
81
|
+
})
|
|
82
|
+
.strict();
|
|
83
|
+
const MemorySchema = z
|
|
84
|
+
.object({
|
|
85
|
+
backend: z.union([z.literal("builtin"), z.literal("qmd")]).optional(),
|
|
86
|
+
citations: z.union([z.literal("auto"), z.literal("on"), z.literal("off")]).optional(),
|
|
87
|
+
qmd: MemoryQmdSchema.optional(),
|
|
88
|
+
})
|
|
89
|
+
.strict()
|
|
90
|
+
.optional();
|
|
91
|
+
const HttpUrlSchema = z
|
|
92
|
+
.string()
|
|
93
|
+
.url()
|
|
94
|
+
.refine((value) => {
|
|
95
|
+
const protocol = new URL(value).protocol;
|
|
96
|
+
return protocol === "http:" || protocol === "https:";
|
|
97
|
+
}, "Expected http:// or https:// URL");
|
|
28
98
|
export const PoolBotSchema = z
|
|
29
99
|
.object({
|
|
100
|
+
$schema: z.string().optional(),
|
|
30
101
|
meta: z
|
|
31
102
|
.object({
|
|
32
103
|
lastTouchedVersion: z.string().optional(),
|
|
@@ -143,6 +214,14 @@ export const PoolBotSchema = z
|
|
|
143
214
|
attachOnly: z.boolean().optional(),
|
|
144
215
|
defaultProfile: z.string().optional(),
|
|
145
216
|
snapshotDefaults: BrowserSnapshotDefaultsSchema,
|
|
217
|
+
ssrfPolicy: z
|
|
218
|
+
.object({
|
|
219
|
+
allowPrivateNetwork: z.boolean().optional(),
|
|
220
|
+
allowedHostnames: z.array(z.string()).optional(),
|
|
221
|
+
hostnameAllowlist: z.array(z.string()).optional(),
|
|
222
|
+
})
|
|
223
|
+
.strict()
|
|
224
|
+
.optional(),
|
|
146
225
|
profiles: z
|
|
147
226
|
.record(z
|
|
148
227
|
.string()
|
|
@@ -220,6 +299,9 @@ export const PoolBotSchema = z
|
|
|
220
299
|
enabled: z.boolean().optional(),
|
|
221
300
|
store: z.string().optional(),
|
|
222
301
|
maxConcurrentRuns: z.number().int().positive().optional(),
|
|
302
|
+
webhook: HttpUrlSchema.optional(),
|
|
303
|
+
webhookToken: z.string().optional().register(sensitive),
|
|
304
|
+
sessionRetention: z.union([z.string(), z.literal(false)]).optional(),
|
|
223
305
|
})
|
|
224
306
|
.strict()
|
|
225
307
|
.optional(),
|
|
@@ -228,6 +310,10 @@ export const PoolBotSchema = z
|
|
|
228
310
|
enabled: z.boolean().optional(),
|
|
229
311
|
path: z.string().optional(),
|
|
230
312
|
token: z.string().optional().register(sensitive),
|
|
313
|
+
defaultSessionKey: z.string().optional(),
|
|
314
|
+
allowRequestSessionKey: z.boolean().optional(),
|
|
315
|
+
allowedSessionKeyPrefixes: z.array(z.string()).optional(),
|
|
316
|
+
allowedAgentIds: z.array(z.string()).optional(),
|
|
231
317
|
maxBodyBytes: z.number().int().positive().optional(),
|
|
232
318
|
presets: z.array(z.string()).optional(),
|
|
233
319
|
transformsDir: z.string().optional(),
|
|
@@ -305,10 +391,13 @@ export const PoolBotSchema = z
|
|
|
305
391
|
z.literal("tailnet"),
|
|
306
392
|
])
|
|
307
393
|
.optional(),
|
|
394
|
+
customBindHost: z.string().optional(),
|
|
308
395
|
controlUi: z
|
|
309
396
|
.object({
|
|
310
397
|
enabled: z.boolean().optional(),
|
|
311
398
|
basePath: z.string().optional(),
|
|
399
|
+
root: z.string().optional(),
|
|
400
|
+
allowedOrigins: z.array(z.string()).optional(),
|
|
312
401
|
allowInsecureAuth: z.boolean().optional(),
|
|
313
402
|
dangerouslyDisableDeviceAuth: z.boolean().optional(),
|
|
314
403
|
})
|
|
@@ -316,14 +405,47 @@ export const PoolBotSchema = z
|
|
|
316
405
|
.optional(),
|
|
317
406
|
auth: z
|
|
318
407
|
.object({
|
|
319
|
-
mode: z
|
|
408
|
+
mode: z
|
|
409
|
+
.union([
|
|
410
|
+
z.literal("none"),
|
|
411
|
+
z.literal("token"),
|
|
412
|
+
z.literal("password"),
|
|
413
|
+
z.literal("trusted-proxy"),
|
|
414
|
+
])
|
|
415
|
+
.optional(),
|
|
320
416
|
token: z.string().optional().register(sensitive),
|
|
321
417
|
password: z.string().optional().register(sensitive),
|
|
322
418
|
allowTailscale: z.boolean().optional(),
|
|
419
|
+
rateLimit: z
|
|
420
|
+
.object({
|
|
421
|
+
maxAttempts: z.number().optional(),
|
|
422
|
+
windowMs: z.number().optional(),
|
|
423
|
+
lockoutMs: z.number().optional(),
|
|
424
|
+
exemptLoopback: z.boolean().optional(),
|
|
425
|
+
})
|
|
426
|
+
.strict()
|
|
427
|
+
.optional(),
|
|
428
|
+
trustedProxy: z
|
|
429
|
+
.object({
|
|
430
|
+
userHeader: z.string().min(1, "userHeader is required for trusted-proxy mode"),
|
|
431
|
+
requiredHeaders: z.array(z.string()).optional(),
|
|
432
|
+
allowUsers: z.array(z.string()).optional(),
|
|
433
|
+
})
|
|
434
|
+
.strict()
|
|
435
|
+
.optional(),
|
|
323
436
|
})
|
|
324
437
|
.strict()
|
|
325
438
|
.optional(),
|
|
326
439
|
trustedProxies: z.array(z.string()).optional(),
|
|
440
|
+
allowRealIpFallback: z.boolean().optional(),
|
|
441
|
+
tools: z
|
|
442
|
+
.object({
|
|
443
|
+
deny: z.array(z.string()).optional(),
|
|
444
|
+
allow: z.array(z.string()).optional(),
|
|
445
|
+
})
|
|
446
|
+
.strict()
|
|
447
|
+
.optional(),
|
|
448
|
+
channelHealthCheckMinutes: z.number().int().min(0).optional(),
|
|
327
449
|
tailscale: z
|
|
328
450
|
.object({
|
|
329
451
|
mode: z.union([z.literal("off"), z.literal("serve"), z.literal("funnel")]).optional(),
|
|
@@ -380,9 +502,11 @@ export const PoolBotSchema = z
|
|
|
380
502
|
.object({
|
|
381
503
|
enabled: z.boolean().optional(),
|
|
382
504
|
maxBodyBytes: z.number().int().positive().optional(),
|
|
505
|
+
maxUrlParts: z.number().int().nonnegative().optional(),
|
|
383
506
|
files: z
|
|
384
507
|
.object({
|
|
385
508
|
allowUrl: z.boolean().optional(),
|
|
509
|
+
urlAllowlist: z.array(z.string()).optional(),
|
|
386
510
|
allowedMimes: z.array(z.string()).optional(),
|
|
387
511
|
maxBytes: z.number().int().positive().optional(),
|
|
388
512
|
maxChars: z.number().int().positive().optional(),
|
|
@@ -402,6 +526,7 @@ export const PoolBotSchema = z
|
|
|
402
526
|
images: z
|
|
403
527
|
.object({
|
|
404
528
|
allowUrl: z.boolean().optional(),
|
|
529
|
+
urlAllowlist: z.array(z.string()).optional(),
|
|
405
530
|
allowedMimes: z.array(z.string()).optional(),
|
|
406
531
|
maxBytes: z.number().int().positive().optional(),
|
|
407
532
|
maxRedirects: z.number().int().nonnegative().optional(),
|
|
@@ -437,6 +562,7 @@ export const PoolBotSchema = z
|
|
|
437
562
|
})
|
|
438
563
|
.strict()
|
|
439
564
|
.optional(),
|
|
565
|
+
memory: MemorySchema,
|
|
440
566
|
skills: z
|
|
441
567
|
.object({
|
|
442
568
|
allowBundled: z.array(z.string()).optional(),
|
|
@@ -457,6 +583,16 @@ export const PoolBotSchema = z
|
|
|
457
583
|
})
|
|
458
584
|
.strict()
|
|
459
585
|
.optional(),
|
|
586
|
+
limits: z
|
|
587
|
+
.object({
|
|
588
|
+
maxCandidatesPerRoot: z.number().int().min(1).optional(),
|
|
589
|
+
maxSkillsLoadedPerSource: z.number().int().min(1).optional(),
|
|
590
|
+
maxSkillsInPrompt: z.number().int().min(0).optional(),
|
|
591
|
+
maxSkillsPromptChars: z.number().int().min(0).optional(),
|
|
592
|
+
maxSkillFileBytes: z.number().int().min(0).optional(),
|
|
593
|
+
})
|
|
594
|
+
.strict()
|
|
595
|
+
.optional(),
|
|
460
596
|
entries: z
|
|
461
597
|
.record(z.string(), z
|
|
462
598
|
.object({
|
|
@@ -498,12 +634,7 @@ export const PoolBotSchema = z
|
|
|
498
634
|
installs: z
|
|
499
635
|
.record(z.string(), z
|
|
500
636
|
.object({
|
|
501
|
-
|
|
502
|
-
spec: z.string().optional(),
|
|
503
|
-
sourcePath: z.string().optional(),
|
|
504
|
-
installPath: z.string().optional(),
|
|
505
|
-
version: z.string().optional(),
|
|
506
|
-
installedAt: z.string().optional(),
|
|
637
|
+
...InstallRecordShape,
|
|
507
638
|
})
|
|
508
639
|
.strict())
|
|
509
640
|
.optional(),
|
|
@@ -514,17 +645,21 @@ export const PoolBotSchema = z
|
|
|
514
645
|
.strict()
|
|
515
646
|
.superRefine((cfg, ctx) => {
|
|
516
647
|
const agents = cfg.agents?.list ?? [];
|
|
517
|
-
if (agents.length === 0)
|
|
648
|
+
if (agents.length === 0) {
|
|
518
649
|
return;
|
|
650
|
+
}
|
|
519
651
|
const agentIds = new Set(agents.map((agent) => agent.id));
|
|
520
652
|
const broadcast = cfg.broadcast;
|
|
521
|
-
if (!broadcast)
|
|
653
|
+
if (!broadcast) {
|
|
522
654
|
return;
|
|
655
|
+
}
|
|
523
656
|
for (const [peerId, ids] of Object.entries(broadcast)) {
|
|
524
|
-
if (peerId === "strategy")
|
|
657
|
+
if (peerId === "strategy") {
|
|
525
658
|
continue;
|
|
526
|
-
|
|
659
|
+
}
|
|
660
|
+
if (!Array.isArray(ids)) {
|
|
527
661
|
continue;
|
|
662
|
+
}
|
|
528
663
|
for (let idx = 0; idx < ids.length; idx += 1) {
|
|
529
664
|
const agentId = ids[idx];
|
|
530
665
|
if (!agentIds.has(agentId)) {
|