@poolzin/pool-bot 1.28.0 → 2026.1.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/CHANGELOG.md +1123 -32
- package/README.md +37 -47
- package/assets/chrome-extension/background.js +5 -5
- package/assets/chrome-extension/manifest.json +3 -3
- package/assets/chrome-extension/options.html +6 -5
- package/assets/chrome-extension/options.js +1 -1
- package/dist/acp/client.js +5 -5
- package/dist/acp/server.js +1 -1
- package/dist/acp/types.js +2 -2
- package/dist/agents/agent-paths.js +3 -3
- package/dist/agents/auth-health.js +6 -2
- package/dist/agents/auth-profiles/doctor.js +1 -1
- package/dist/agents/auth-profiles/external-cli-sync.js +150 -5
- package/dist/agents/auth-profiles/oauth.js +7 -26
- package/dist/agents/auth-profiles/paths.js +3 -3
- package/dist/agents/auth-profiles/store.js +13 -5
- package/dist/agents/bash-tools.shared.js +1 -8
- package/dist/agents/cli-backends.js +0 -8
- package/dist/agents/cli-runner/helpers.js +3 -3
- package/dist/agents/cli-runner.js +2 -2
- package/dist/agents/compaction.js +0 -3
- package/dist/agents/context.js +4 -4
- package/dist/agents/docs-path.js +3 -3
- package/dist/agents/identity.js +1 -1
- package/dist/agents/memory-search.js +2 -7
- package/dist/agents/minimax-vlm.js +1 -1
- package/dist/agents/model-auth.js +1 -1
- package/dist/agents/model-catalog.js +4 -4
- package/dist/agents/model-fallback.js +0 -22
- package/dist/agents/model-selection.js +1 -1
- package/dist/agents/models-config.js +3 -3
- package/dist/agents/models-config.providers.js +4 -4
- package/dist/agents/pi-embedded-helpers/openai.js +1 -1
- package/dist/agents/pi-embedded-runner/cache-ttl.js +1 -1
- package/dist/agents/pi-embedded-runner/compact.js +8 -8
- package/dist/agents/pi-embedded-runner/extensions.js +0 -5
- package/dist/agents/pi-embedded-runner/model.js +2 -2
- package/dist/agents/pi-embedded-runner/run/attempt.js +6 -10
- package/dist/agents/pi-embedded-runner/run.js +4 -4
- package/dist/agents/pi-embedded-runner/sandbox-info.js +4 -1
- package/dist/agents/pi-embedded-runner/utils.js +1 -1
- package/dist/agents/pi-embedded-utils.js +1 -7
- package/dist/agents/pi-extensions/compaction-safeguard.js +3 -32
- package/dist/agents/pi-tools.js +15 -25
- package/dist/agents/pi-tools.policy.js +1 -34
- package/dist/agents/pi-tools.read.js +2 -2
- package/dist/agents/sandbox/browser.js +7 -5
- package/dist/agents/sandbox/config.js +12 -0
- package/dist/agents/sandbox/constants.js +7 -7
- package/dist/agents/sandbox/context.js +3 -3
- package/dist/agents/sandbox/docker.js +8 -8
- package/dist/agents/sandbox/runtime-status.js +1 -1
- package/dist/agents/session-transcript-repair.js +1 -1
- package/dist/agents/session-write-lock.js +0 -68
- package/dist/agents/skills/config.js +8 -9
- package/dist/agents/skills/env-overrides.js +1 -1
- package/dist/agents/skills/frontmatter.js +14 -15
- package/dist/agents/skills/workspace.js +7 -7
- package/dist/agents/skills-install.js +1 -1
- package/dist/agents/skills-status.js +12 -12
- package/dist/agents/subagent-registry.store.js +2 -2
- package/dist/agents/system-prompt.js +32 -21
- package/dist/agents/tool-images.js +1 -1
- package/dist/agents/tool-policy.js +2 -8
- package/dist/agents/tools/browser-tool.js +79 -19
- package/dist/agents/tools/browser-tool.schema.js +2 -1
- package/dist/agents/tools/cron-tool.js +1 -44
- package/dist/agents/tools/discord-actions-guild.js +1 -5
- package/dist/agents/tools/image-tool.js +2 -2
- package/dist/agents/tools/message-tool.js +0 -1
- package/dist/agents/tools/sessions-send-helpers.js +2 -17
- package/dist/agents/tools/telegram-actions.js +1 -93
- package/dist/agents/tools/web-fetch.js +103 -123
- package/dist/agents/tools/web-search.js +7 -7
- package/dist/agents/workspace.js +0 -36
- package/dist/auto-reply/commands-registry.data.js +3 -68
- package/dist/auto-reply/commands-registry.js +11 -14
- package/dist/auto-reply/reply/agent-runner-execution.js +3 -21
- package/dist/auto-reply/reply/agent-runner-memory.js +0 -5
- package/dist/auto-reply/reply/bash-command.js +2 -2
- package/dist/auto-reply/reply/commands-context-report.js +2 -2
- package/dist/auto-reply/reply/commands-info.js +5 -50
- package/dist/auto-reply/reply/commands-session.js +4 -4
- package/dist/auto-reply/reply/commands-tts.js +63 -61
- package/dist/auto-reply/reply/directive-handling.shared.js +1 -1
- package/dist/auto-reply/reply/dispatch-from-config.js +1 -65
- package/dist/auto-reply/reply/followup-runner.js +0 -5
- package/dist/auto-reply/reply/get-reply-inline-actions.js +2 -2
- package/dist/auto-reply/reply/get-reply-run.js +0 -4
- package/dist/auto-reply/reply/groups.js +1 -1
- package/dist/auto-reply/reply/history.js +0 -23
- package/dist/auto-reply/reply/reply-elevated.js +1 -1
- package/dist/auto-reply/reply/session-updates.js +1 -6
- package/dist/auto-reply/status.js +49 -141
- package/dist/browser/bridge-server.js +3 -1
- package/dist/browser/client-actions-core.js +7 -13
- package/dist/browser/client-actions-observe.js +8 -14
- package/dist/browser/client-actions-state.js +15 -21
- package/dist/browser/client-fetch.js +61 -74
- package/dist/browser/client.js +21 -19
- package/dist/browser/config.js +26 -13
- package/dist/browser/constants.js +1 -1
- package/dist/browser/extension-relay.js +3 -3
- package/dist/browser/pw-session.js +4 -41
- package/dist/browser/pw-tools-core.downloads.js +1 -1
- package/dist/browser/pw-tools-core.interactions.js +5 -5
- package/dist/browser/pw-tools-core.responses.js +1 -1
- package/dist/browser/routes/agent.act.js +0 -13
- package/dist/browser/routes/agent.debug.js +1 -1
- package/dist/browser/routes/basic.js +1 -0
- package/dist/browser/server-context.js +3 -3
- package/dist/browser/server.js +9 -7
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/canvas-host/a2ui/a2ui.bundle.js +1618 -1620
- package/dist/canvas-host/a2ui/index.html +28 -28
- package/dist/canvas-host/a2ui.js +19 -25
- package/dist/canvas-host/server.js +32 -66
- package/dist/channels/plugins/actions/discord/handle-action.guild-admin.js +1 -5
- package/dist/channels/plugins/actions/telegram.js +7 -60
- package/dist/channels/plugins/catalog.js +4 -6
- package/dist/channels/plugins/group-mentions.js +1 -48
- package/dist/channels/plugins/helpers.js +2 -2
- package/dist/channels/plugins/message-action-names.js +0 -1
- package/dist/channels/plugins/onboarding/imessage.js +1 -1
- package/dist/channels/plugins/onboarding/signal.js +2 -2
- package/dist/channels/plugins/onboarding/slack.js +4 -4
- package/dist/channels/plugins/onboarding/telegram.js +9 -17
- package/dist/channels/plugins/onboarding/whatsapp.js +4 -4
- package/dist/channels/plugins/outbound/telegram.js +0 -38
- package/dist/channels/plugins/pairing-message.js +1 -1
- package/dist/channels/plugins/status-issues/bluebubbles.js +1 -1
- package/dist/channels/plugins/status-issues/whatsapp.js +2 -2
- package/dist/channels/registry.js +1 -1
- package/dist/cli/acp-cli.js +2 -2
- package/dist/cli/argv.js +7 -14
- package/dist/cli/banner.js +1 -3
- package/dist/cli/browser-cli-actions-input/register.element.js +44 -72
- package/dist/cli/browser-cli-actions-input/register.files-downloads.js +35 -55
- package/dist/cli/browser-cli-actions-input/register.form-wait-eval.js +28 -41
- package/dist/cli/browser-cli-actions-input/register.navigation.js +14 -23
- package/dist/cli/browser-cli-actions-input/shared.js +3 -10
- package/dist/cli/browser-cli-actions-observe.js +21 -29
- package/dist/cli/browser-cli-debug.js +35 -49
- package/dist/cli/browser-cli-examples.js +29 -29
- package/dist/cli/browser-cli-extension.js +8 -8
- package/dist/cli/browser-cli-inspect.js +17 -23
- package/dist/cli/browser-cli-manage.js +56 -106
- package/dist/cli/browser-cli-shared.js +1 -34
- package/dist/cli/browser-cli-state.cookies-storage.js +39 -53
- package/dist/cli/browser-cli-state.js +64 -90
- package/dist/cli/browser-cli.js +5 -4
- package/dist/cli/channels-cli.js +1 -1
- package/dist/cli/command-format.js +7 -11
- package/dist/cli/config-cli.js +2 -2
- package/dist/cli/cron-cli/register.js +1 -1
- package/dist/cli/daemon-cli/install.js +1 -1
- package/dist/cli/daemon-cli/register.js +1 -1
- package/dist/cli/daemon-cli/shared.js +3 -5
- package/dist/cli/daemon-cli/status.print.js +6 -6
- package/dist/cli/directory-cli.js +1 -1
- package/dist/cli/dns-cli.js +7 -7
- package/dist/cli/docs-cli.js +2 -2
- package/dist/cli/exec-approvals-cli.js +2 -2
- package/dist/cli/gateway-cli/dev.js +4 -4
- package/dist/cli/gateway-cli/register.js +1 -1
- package/dist/cli/gateway-cli/run.js +8 -11
- package/dist/cli/gateway-cli/shared.js +4 -4
- package/dist/cli/hooks-cli.js +3 -3
- package/dist/cli/logs-cli.js +3 -3
- package/dist/cli/memory-cli.js +1 -1
- package/dist/cli/models-cli.js +2 -2
- package/dist/cli/node-cli/daemon.js +2 -2
- package/dist/cli/node-cli/register.js +1 -1
- package/dist/cli/nodes-camera.js +1 -3
- package/dist/cli/nodes-canvas.js +1 -3
- package/dist/cli/nodes-cli/register.canvas.js +1 -1
- package/dist/cli/nodes-cli/register.js +1 -1
- package/dist/cli/nodes-screen.js +1 -1
- package/dist/cli/pairing-cli.js +3 -3
- package/dist/cli/plugin-registry.js +2 -2
- package/dist/cli/plugins-cli.js +3 -3
- package/dist/cli/profile.js +1 -1
- package/dist/cli/program/config-guard.js +1 -1
- package/dist/cli/program/help.js +14 -13
- package/dist/cli/program/message/register.send.js +1 -2
- package/dist/cli/program/preaction.js +2 -4
- package/dist/cli/program/register.agent.js +12 -12
- package/dist/cli/program/register.configure.js +1 -1
- package/dist/cli/program/register.maintenance.js +4 -4
- package/dist/cli/program/register.message.js +5 -5
- package/dist/cli/program/register.onboard.js +3 -5
- package/dist/cli/program/register.setup.js +2 -2
- package/dist/cli/program/register.status-health-sessions.js +13 -13
- package/dist/cli/run-main.js +4 -11
- package/dist/cli/sandbox-cli.js +19 -19
- package/dist/cli/security-cli.js +8 -18
- package/dist/cli/skills-cli.js +3 -3
- package/dist/cli/system-cli.js +1 -1
- package/dist/cli/tagline.js +1 -1
- package/dist/cli/tui-cli.js +1 -1
- package/dist/cli/update-cli.js +42 -58
- package/dist/cli/webhooks-cli.js +6 -6
- package/dist/commands/agent-via-gateway.js +1 -1
- package/dist/commands/agent.js +1 -2
- package/dist/commands/agents.command-shared.js +1 -1
- package/dist/commands/agents.commands.add.js +3 -2
- package/dist/commands/agents.commands.list.js +1 -1
- package/dist/commands/auth-choice-options.js +54 -4
- package/dist/commands/auth-choice.apply.anthropic.js +109 -6
- package/dist/commands/auth-choice.apply.openai.js +33 -1
- package/dist/commands/auth-choice.apply.plugin-provider.js +2 -2
- package/dist/commands/channels/list.js +2 -2
- package/dist/commands/channels/shared.js +1 -1
- package/dist/commands/channels/status.js +1 -1
- package/dist/commands/chutes-oauth.js +1 -1
- package/dist/commands/configure.channels.js +4 -4
- package/dist/commands/configure.gateway-auth.js +8 -1
- package/dist/commands/configure.gateway.js +10 -1
- package/dist/commands/configure.wizard.js +11 -11
- package/dist/commands/daemon-install-helpers.js +1 -1
- package/dist/commands/dashboard.js +1 -1
- package/dist/commands/docs.js +5 -5
- package/dist/commands/doctor-auth.js +3 -122
- package/dist/commands/doctor-config-flow.js +7 -7
- package/dist/commands/doctor-format.js +2 -2
- package/dist/commands/doctor-gateway-daemon-flow.js +1 -1
- package/dist/commands/doctor-gateway-services.js +3 -3
- package/dist/commands/doctor-security.js +1 -48
- package/dist/commands/doctor-ui.js +2 -2
- package/dist/commands/doctor-update.js +4 -4
- package/dist/commands/doctor-workspace-status.js +2 -2
- package/dist/commands/doctor-workspace.js +4 -4
- package/dist/commands/doctor.js +12 -13
- package/dist/commands/gateway-status.js +2 -2
- package/dist/commands/models/auth.js +22 -23
- package/dist/commands/models/list.probe.js +2 -2
- package/dist/commands/models/list.registry.js +4 -4
- package/dist/commands/models/list.status-command.js +9 -8
- package/dist/commands/onboard-auth.credentials.js +2 -2
- package/dist/commands/onboard-channels.js +3 -3
- package/dist/commands/onboard-helpers.js +4 -4
- package/dist/commands/onboard-hooks.js +4 -4
- package/dist/commands/onboard-non-interactive/local/auth-choice.js +34 -38
- package/dist/commands/onboard-non-interactive/local/gateway-config.js +4 -7
- package/dist/commands/onboard-non-interactive/local.js +1 -1
- package/dist/commands/onboard-non-interactive/remote.js +1 -1
- package/dist/commands/onboard-non-interactive.js +1 -1
- package/dist/commands/onboard-remote.js +2 -2
- package/dist/commands/onboard-skills.js +2 -2
- package/dist/commands/onboard.js +4 -25
- package/dist/commands/onboarding/plugin-install.js +2 -2
- package/dist/commands/reset.js +3 -3
- package/dist/commands/sandbox-display.js +1 -1
- package/dist/commands/sandbox-explain.js +2 -2
- package/dist/commands/setup.js +2 -2
- package/dist/commands/signal-install.js +2 -2
- package/dist/commands/status-all/diagnosis.js +1 -1
- package/dist/commands/status-all/report-lines.js +1 -1
- package/dist/commands/status-all.js +3 -3
- package/dist/commands/status.command.js +9 -9
- package/dist/commands/status.update.js +3 -3
- package/dist/commands/uninstall.js +3 -3
- package/dist/config/config.js +1 -1
- package/dist/config/group-policy.js +0 -69
- package/dist/config/io.js +5 -17
- package/dist/config/legacy.migrations.part-3.js +0 -3
- package/dist/config/logging.js +3 -3
- package/dist/config/paths.js +13 -43
- package/dist/config/schema.js +9 -21
- package/dist/config/sessions/transcript.js +1 -1
- package/dist/config/validation.js +2 -2
- package/dist/config/version.js +4 -4
- package/dist/config/zod-schema.agent-defaults.js +0 -1
- package/dist/config/zod-schema.agent-runtime.js +7 -39
- package/dist/config/zod-schema.hooks.js +0 -2
- package/dist/config/zod-schema.js +3 -9
- package/dist/config/zod-schema.providers-core.js +0 -23
- package/dist/config/zod-schema.providers-whatsapp.js +0 -3
- package/dist/control-ui/assets/{index-HlBhZmfj.js → index-Cl-Y9zqE.js} +578 -620
- package/dist/control-ui/assets/index-Cl-Y9zqE.js.map +1 -0
- package/dist/control-ui/assets/index-DEPfFcOb.css +1 -0
- package/dist/control-ui/index.html +4 -4
- package/dist/cron/isolated-agent/run.js +3 -38
- package/dist/daemon/constants.js +12 -12
- package/dist/daemon/inspect.js +11 -11
- package/dist/daemon/program-args.js +1 -1
- package/dist/daemon/systemd-hints.js +1 -1
- package/dist/daemon/systemd-unit.js +1 -1
- package/dist/discord/monitor/listeners.js +1 -25
- package/dist/discord/monitor/native-command.js +5 -7
- package/dist/discord/monitor/provider.js +7 -21
- package/dist/entry.js +4 -4
- package/dist/gateway/auth.js +19 -52
- package/dist/gateway/hooks-mapping.js +4 -18
- package/dist/gateway/hooks.js +7 -5
- package/dist/gateway/http-utils.js +5 -3
- package/dist/gateway/net.js +1 -1
- package/dist/gateway/openai-http.js +3 -3
- package/dist/gateway/openresponses-http.js +4 -4
- package/dist/gateway/protocol/client-info.js +5 -5
- package/dist/gateway/protocol/schema/logs-chat.js +1 -1
- package/dist/gateway/server/health-state.js +3 -3
- package/dist/gateway/server/hooks.js +0 -1
- package/dist/gateway/server/ws-connection/message-handler.js +35 -44
- package/dist/gateway/server-browser.js +3 -14
- package/dist/gateway/server-chat.js +2 -28
- package/dist/gateway/server-discovery-runtime.js +17 -25
- package/dist/gateway/server-discovery.js +5 -5
- package/dist/gateway/server-http.js +3 -9
- package/dist/gateway/server-methods/agent.js +0 -2
- package/dist/gateway/server-methods/chat.js +0 -5
- package/dist/gateway/server-methods/config.js +8 -8
- package/dist/gateway/server-methods/logs.js +1 -1
- package/dist/gateway/server-methods/skills.js +3 -3
- package/dist/gateway/server-methods/update.js +2 -2
- package/dist/gateway/server-methods-list.js +0 -1
- package/dist/gateway/server-methods.js +0 -3
- package/dist/gateway/server-plugins.js +2 -2
- package/dist/gateway/server-restart-sentinel.js +5 -10
- package/dist/gateway/server-runtime-config.js +2 -5
- package/dist/gateway/server.impl.js +6 -7
- package/dist/gateway/session-utils.js +11 -31
- package/dist/gateway/test-helpers.mocks.js +5 -5
- package/dist/gateway/test-helpers.server.js +9 -28
- package/dist/gateway/tools-invoke-http.js +8 -15
- package/dist/hooks/bundled/boot-md/HOOK.md +3 -3
- package/dist/hooks/bundled/command-logger/HOOK.md +5 -5
- package/dist/hooks/bundled/session-memory/HOOK.md +4 -4
- package/dist/hooks/bundled/session-memory/handler.js +2 -2
- package/dist/hooks/bundled/soul-evil/HOOK.md +5 -5
- package/dist/hooks/bundled-dir.js +1 -1
- package/dist/hooks/config.js +7 -8
- package/dist/hooks/frontmatter.js +15 -16
- package/dist/hooks/gmail-ops.js +4 -4
- package/dist/hooks/hooks-status.js +13 -13
- package/dist/hooks/install.js +7 -8
- package/dist/hooks/internal-hooks.js +1 -1
- package/dist/hooks/llm-slug-generator.js +1 -1
- package/dist/hooks/loader.js +3 -3
- package/dist/hooks/plugin-hooks.js +8 -8
- package/dist/hooks/workspace.js +9 -10
- package/dist/imessage/monitor/monitor-provider.js +2 -2
- package/dist/index.js +4 -4
- package/dist/infra/agent-events.js +0 -3
- package/dist/infra/bonjour-discovery.js +9 -9
- package/dist/infra/bonjour.js +12 -19
- package/dist/infra/gateway-lock.js +1 -1
- package/dist/infra/heartbeat-visibility.js +0 -14
- package/dist/infra/heartbeat-wake.js +2 -2
- package/dist/infra/machine-name.js +1 -1
- package/dist/infra/net/ssrf.js +1 -77
- package/dist/infra/outbound/message-action-spec.js +0 -1
- package/dist/infra/outbound/targets.js +1 -1
- package/dist/infra/path-env.js +7 -7
- package/dist/infra/ports-format.js +2 -2
- package/dist/infra/ports.js +2 -2
- package/dist/infra/provider-usage.auth.js +4 -2
- package/dist/infra/provider-usage.fetch.claude.js +1 -1
- package/dist/infra/provider-usage.fetch.minimax.js +1 -1
- package/dist/infra/restart-sentinel.js +1 -1
- package/dist/infra/restart.js +1 -1
- package/dist/infra/retry-policy.js +1 -4
- package/dist/infra/runtime-guard.js +2 -2
- package/dist/infra/shell-env.js +1 -1
- package/dist/infra/skills-remote.js +3 -3
- package/dist/infra/tailscale.js +1 -63
- package/dist/infra/tls/gateway.js +1 -1
- package/dist/infra/unhandled-rejections.js +2 -89
- package/dist/infra/update-check.js +4 -2
- package/dist/infra/update-global.js +5 -5
- package/dist/infra/update-runner.js +8 -32
- package/dist/infra/update-startup.js +3 -3
- package/dist/infra/warnings.js +1 -1
- package/dist/infra/widearea-dns.js +10 -10
- package/dist/line/monitor.js +5 -1
- package/dist/line/webhook.js +6 -2
- package/dist/logging/logger.js +4 -4
- package/dist/macos/gateway-daemon.js +2 -2
- package/dist/macos/relay.js +4 -4
- package/dist/media/host.js +1 -1
- package/dist/media/image-ops.js +1 -1
- package/dist/media/input-files.js +32 -40
- package/dist/media/server.js +15 -39
- package/dist/media/store.js +52 -72
- package/dist/media-understanding/attachments.js +1 -1
- package/dist/media-understanding/providers/image.js +2 -2
- package/dist/media-understanding/runner.js +1 -33
- package/dist/memory/batch-gemini.js +1 -1
- package/dist/memory/batch-openai.js +1 -1
- package/dist/memory/embeddings.js +1 -1
- package/dist/node-host/runner.js +56 -60
- package/dist/pairing/pairing-messages.js +2 -2
- package/dist/plugin-sdk/index.js +0 -1
- package/dist/plugins/cli.js +2 -2
- package/dist/plugins/discovery.js +4 -5
- package/dist/plugins/install.js +7 -8
- package/dist/plugins/loader.js +4 -11
- package/dist/plugins/manifest-registry.js +2 -2
- package/dist/plugins/manifest.js +1 -16
- package/dist/plugins/providers.js +2 -2
- package/dist/plugins/registry.js +5 -5
- package/dist/plugins/runtime.js +1 -1
- package/dist/plugins/services.js +3 -3
- package/dist/plugins/status.js +2 -2
- package/dist/plugins/tools.js +2 -2
- package/dist/plugins/update.js +3 -3
- package/dist/providers/qwen-portal-oauth.js +1 -1
- package/dist/routing/session-key.js +12 -17
- package/dist/security/audit-extra.js +69 -116
- package/dist/security/audit-fs.js +0 -78
- package/dist/security/audit.js +88 -121
- package/dist/security/fix.js +8 -93
- package/dist/slack/monitor/media.js +4 -32
- package/dist/slack/monitor/message-handler/dispatch.js +1 -2
- package/dist/slack/monitor/slash.js +3 -3
- package/dist/slack/monitor.test-helpers.js +1 -1
- package/dist/telegram/bot/delivery.js +22 -139
- package/dist/telegram/bot-handlers.js +8 -70
- package/dist/telegram/bot-message-context.js +21 -79
- package/dist/telegram/bot-message-dispatch.js +0 -64
- package/dist/telegram/bot-native-commands.js +94 -244
- package/dist/telegram/bot.js +2 -18
- package/dist/telegram/fetch.js +1 -25
- package/dist/telegram/monitor.js +3 -11
- package/dist/telegram/send.js +4 -148
- package/dist/telegram/webhook-set.js +6 -13
- package/dist/telegram/webhook.js +3 -8
- package/dist/terminal/links.js +1 -1
- package/dist/tts/tts.js +22 -27
- package/dist/tui/components/filterable-select-list.js +1 -1
- package/dist/tui/components/searchable-select-list.js +1 -2
- package/dist/tui/gateway-chat.js +1 -1
- package/dist/tui/tui.js +1 -1
- package/dist/version.js +1 -1
- package/dist/web/active-listener.js +1 -1
- package/dist/web/auth-store.js +1 -1
- package/dist/web/auto-reply/monitor/process-message.js +1 -1
- package/dist/web/auto-reply/monitor.js +1 -1
- package/dist/web/login.js +1 -1
- package/dist/web/session.js +2 -2
- package/dist/wizard/onboarding.finalize.js +14 -14
- package/dist/wizard/onboarding.gateway-config.js +11 -1
- package/dist/wizard/onboarding.js +10 -21
- package/docs/CNAME +1 -1
- package/docs/POOL-BOT.md +119 -0
- package/docs/_config.yml +2 -2
- package/docs/_layouts/default.html +9 -9
- package/docs/assets/terminal.css +0 -3
- package/docs/assets/theme.js +1 -1
- package/docs/automation/auth-monitoring.md +7 -7
- package/docs/automation/cron-jobs.md +13 -13
- package/docs/automation/cron-vs-heartbeat.md +8 -8
- package/docs/automation/gmail-pubsub.md +21 -23
- package/docs/automation/poll.md +6 -6
- package/docs/automation/webhook.md +8 -13
- package/docs/bedrock.md +10 -10
- package/docs/brave-search.md +1 -1
- package/docs/broadcast-groups.md +3 -3
- package/docs/channels/bluebubbles.md +12 -13
- package/docs/channels/discord.md +16 -21
- package/docs/channels/googlechat.md +15 -15
- package/docs/channels/imessage.md +10 -10
- package/docs/channels/index.md +4 -6
- package/docs/channels/location.md +1 -1
- package/docs/channels/matrix.md +13 -13
- package/docs/channels/mattermost.md +8 -8
- package/docs/channels/msteams.md +25 -29
- package/docs/channels/nextcloud-talk.md +7 -7
- package/docs/channels/nostr.md +9 -9
- package/docs/channels/signal.md +9 -9
- package/docs/channels/slack.md +13 -15
- package/docs/channels/telegram.md +20 -149
- package/docs/channels/tlon.md +5 -5
- package/docs/channels/troubleshooting.md +2 -2
- package/docs/channels/whatsapp.md +23 -23
- package/docs/channels/zalo.md +8 -8
- package/docs/channels/zalouser.md +12 -12
- package/docs/cli/acp.md +24 -24
- package/docs/cli/agent.md +6 -6
- package/docs/cli/agents.md +9 -9
- package/docs/cli/approvals.md +13 -13
- package/docs/cli/browser.md +35 -33
- package/docs/cli/channels.md +21 -21
- package/docs/cli/config.md +15 -15
- package/docs/cli/configure.md +6 -6
- package/docs/cli/cron.md +5 -5
- package/docs/cli/dashboard.md +4 -4
- package/docs/cli/devices.md +13 -13
- package/docs/cli/directory.md +12 -12
- package/docs/cli/dns.md +5 -5
- package/docs/cli/docs.md +5 -5
- package/docs/cli/doctor.md +6 -6
- package/docs/cli/gateway.md +24 -24
- package/docs/cli/health.md +5 -5
- package/docs/cli/hooks.md +28 -28
- package/docs/cli/index.md +50 -44
- package/docs/cli/logs.md +6 -6
- package/docs/cli/memory.md +11 -11
- package/docs/cli/message.md +11 -11
- package/docs/cli/models.md +17 -17
- package/docs/cli/node.md +12 -12
- package/docs/cli/nodes.md +14 -14
- package/docs/cli/onboard.md +6 -7
- package/docs/cli/pairing.md +4 -4
- package/docs/cli/plugins.md +16 -16
- package/docs/cli/reset.md +5 -5
- package/docs/cli/sandbox.md +28 -28
- package/docs/cli/security.md +5 -5
- package/docs/cli/sessions.md +5 -5
- package/docs/cli/setup.md +6 -6
- package/docs/cli/skills.md +6 -6
- package/docs/cli/status.md +7 -7
- package/docs/cli/system.md +6 -6
- package/docs/cli/tui.md +5 -5
- package/docs/cli/uninstall.md +5 -5
- package/docs/cli/update.md +20 -20
- package/docs/cli/voicecall.md +9 -9
- package/docs/cli/webhooks.md +5 -5
- package/docs/concepts/agent-loop.md +5 -5
- package/docs/concepts/agent-workspace.md +11 -11
- package/docs/concepts/agent.md +10 -10
- package/docs/concepts/architecture.md +1 -1
- package/docs/concepts/channel-routing.md +2 -2
- package/docs/concepts/compaction.md +5 -5
- package/docs/concepts/context.md +6 -6
- package/docs/concepts/group-messages.md +5 -5
- package/docs/concepts/groups.md +5 -41
- package/docs/concepts/markdown-formatting.md +3 -3
- package/docs/concepts/memory.md +12 -12
- package/docs/concepts/messages.md +4 -4
- package/docs/concepts/model-failover.md +11 -11
- package/docs/concepts/model-providers.md +22 -22
- package/docs/concepts/models.md +26 -26
- package/docs/concepts/multi-agent.md +5 -5
- package/docs/concepts/oauth.md +55 -28
- package/docs/concepts/presence.md +2 -2
- package/docs/concepts/retry.md +1 -1
- package/docs/concepts/session-pruning.md +1 -1
- package/docs/concepts/session-tool.md +4 -4
- package/docs/concepts/session.md +11 -11
- package/docs/concepts/streaming.md +3 -3
- package/docs/concepts/system-prompt.md +11 -11
- package/docs/concepts/timezone.md +2 -2
- package/docs/concepts/typebox.md +2 -2
- package/docs/concepts/typing-indicators.md +2 -2
- package/docs/concepts/usage-tracking.md +3 -3
- package/docs/date-time.md +2 -2
- package/docs/debug/node-issue.md +4 -4
- package/docs/debugging.md +9 -9
- package/docs/diagnostics/flags.md +5 -5
- package/docs/docs.json +7 -37
- package/docs/environment.md +3 -3
- package/docs/experiments/plans/cron-add-hardening.md +1 -1
- package/docs/experiments/plans/openresponses-gateway.md +2 -2
- package/docs/experiments/research/memory.md +6 -6
- package/docs/gateway/authentication.md +54 -30
- package/docs/gateway/background-process.md +1 -1
- package/docs/gateway/bonjour.md +21 -21
- package/docs/gateway/bridge-protocol.md +2 -2
- package/docs/gateway/cli-backends.md +12 -13
- package/docs/gateway/configuration-examples.md +10 -10
- package/docs/gateway/configuration.md +107 -120
- package/docs/gateway/discovery.md +6 -6
- package/docs/gateway/doctor.md +21 -21
- package/docs/gateway/gateway-lock.md +1 -1
- package/docs/gateway/health.md +9 -9
- package/docs/gateway/heartbeat.md +5 -5
- package/docs/gateway/index.md +51 -51
- package/docs/gateway/local-models.md +2 -2
- package/docs/gateway/logging.md +8 -8
- package/docs/gateway/multiple-gateways.md +19 -19
- package/docs/gateway/openai-http-api.md +10 -10
- package/docs/gateway/openresponses-http-api.md +10 -10
- package/docs/gateway/pairing.md +5 -5
- package/docs/gateway/protocol.md +4 -5
- package/docs/gateway/remote-gateway-readme.md +8 -8
- package/docs/gateway/remote.md +4 -4
- package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +7 -10
- package/docs/gateway/sandboxing.md +5 -7
- package/docs/gateway/{security/index.md → security.md} +63 -143
- package/docs/gateway/tailscale.md +35 -16
- package/docs/gateway/tools-invoke-http-api.md +3 -3
- package/docs/gateway/troubleshooting.md +106 -101
- package/docs/help/faq.md +312 -303
- package/docs/help/troubleshooting.md +15 -15
- package/docs/hooks/soul-evil.md +2 -2
- package/docs/hooks.md +44 -44
- package/docs/index.md +33 -33
- package/docs/install/ansible.md +35 -35
- package/docs/install/development-channels.md +10 -10
- package/docs/install/docker.md +27 -27
- package/docs/install/index.md +27 -28
- package/docs/install/installer.md +21 -21
- package/docs/install/nix.md +16 -16
- package/docs/install/node.md +6 -7
- package/docs/install/uninstall.md +21 -21
- package/docs/install/updating.md +47 -48
- package/docs/logging.md +58 -58
- package/docs/multi-agent-sandbox-tools.md +5 -5
- package/docs/network.md +1 -1
- package/docs/nodes/audio.md +2 -2
- package/docs/nodes/camera.md +18 -18
- package/docs/nodes/images.md +4 -4
- package/docs/nodes/index.md +50 -50
- package/docs/nodes/location-command.md +2 -2
- package/docs/nodes/media-understanding.md +5 -5
- package/docs/nodes/talk.md +1 -1
- package/docs/nodes/voicewake.md +1 -1
- package/docs/perplexity.md +2 -2
- package/docs/platforms/android.md +13 -13
- package/docs/platforms/exe-dev.md +23 -23
- package/docs/platforms/fly.md +18 -129
- package/docs/platforms/hetzner.md +20 -20
- package/docs/platforms/index.md +8 -8
- package/docs/platforms/ios.md +13 -13
- package/docs/platforms/linux.md +11 -11
- package/docs/platforms/mac/bundled-gateway.md +11 -11
- package/docs/platforms/mac/canvas.md +14 -14
- package/docs/platforms/mac/child-process.md +1 -1
- package/docs/platforms/mac/dev-setup.md +10 -10
- package/docs/platforms/mac/health.md +2 -2
- package/docs/platforms/mac/icon.md +1 -1
- package/docs/platforms/mac/logging.md +4 -4
- package/docs/platforms/mac/menu-bar.md +1 -1
- package/docs/platforms/mac/peekaboo.md +9 -9
- package/docs/platforms/mac/permissions.md +1 -1
- package/docs/platforms/mac/release.md +18 -18
- package/docs/platforms/mac/remote.md +14 -14
- package/docs/platforms/mac/signing.md +6 -6
- package/docs/platforms/mac/skills.md +2 -2
- package/docs/platforms/mac/webchat.md +1 -1
- package/docs/platforms/mac/xpc.md +4 -4
- package/docs/platforms/macos-vm.md +27 -27
- package/docs/platforms/macos.md +14 -14
- package/docs/platforms/windows.md +11 -11
- package/docs/plugin.md +57 -57
- package/docs/plugins/agent-tools.md +1 -1
- package/docs/plugins/manifest.md +4 -4
- package/docs/plugins/voice-call.md +12 -15
- package/docs/plugins/zalouser.md +9 -9
- package/docs/prose.md +9 -9
- package/docs/providers/anthropic.md +27 -23
- package/docs/providers/deepgram.md +2 -2
- package/docs/providers/github-copilot.md +11 -11
- package/docs/providers/glm.md +4 -4
- package/docs/providers/index.md +3 -7
- package/docs/providers/minimax.md +9 -9
- package/docs/providers/models.md +3 -3
- package/docs/providers/moonshot.md +2 -2
- package/docs/providers/ollama.md +11 -11
- package/docs/providers/openai.md +13 -9
- package/docs/providers/opencode.md +3 -3
- package/docs/providers/openrouter.md +3 -3
- package/docs/providers/qwen.md +6 -6
- package/docs/providers/synthetic.md +4 -4
- package/docs/providers/venice.md +21 -21
- package/docs/providers/vercel-ai-gateway.md +3 -4
- package/docs/providers/zai.md +5 -5
- package/docs/railway.mdx +5 -5
- package/docs/refactor/plugin-sdk.md +10 -10
- package/docs/refactor/strict-config.md +11 -11
- package/docs/reference/AGENTS.default.md +10 -10
- package/docs/reference/RELEASING.md +27 -27
- package/docs/reference/api-usage-costs.md +6 -6
- package/docs/reference/device-models.md +7 -7
- package/docs/reference/rpc.md +3 -3
- package/docs/reference/session-management-compaction.md +17 -17
- package/docs/reference/templates/AGENTS.dev.md +1 -1
- package/docs/reference/templates/BOOT.md +1 -1
- package/docs/reference/templates/TOOLS.dev.md +1 -1
- package/docs/reference/templates/USER.dev.md +2 -2
- package/docs/reference/test.md +2 -2
- package/docs/reference/transcript-hygiene.md +1 -1
- package/docs/scripts.md +1 -1
- package/docs/start/clawd.md +27 -27
- package/docs/start/getting-started.md +23 -29
- package/docs/start/hubs.md +2 -2
- package/docs/start/lore.md +38 -74
- package/docs/start/onboarding.md +4 -4
- package/docs/start/pairing.md +8 -8
- package/docs/start/setup.md +15 -28
- package/docs/start/showcase.md +32 -32
- package/docs/start/wizard.md +21 -24
- package/docs/testing.md +10 -10
- package/docs/token-use.md +7 -7
- package/docs/tools/agent-send.md +10 -10
- package/docs/tools/browser-linux-troubleshooting.md +8 -8
- package/docs/tools/browser-login.md +4 -4
- package/docs/tools/browser.md +241 -135
- package/docs/tools/chrome-extension.md +48 -31
- package/docs/tools/clawdhub.md +7 -7
- package/docs/tools/creating-skills.md +4 -4
- package/docs/tools/elevated.md +0 -1
- package/docs/tools/exec-approvals.md +2 -5
- package/docs/tools/exec.md +3 -14
- package/docs/tools/firecrawl.md +2 -2
- package/docs/tools/index.md +15 -18
- package/docs/tools/llm-task.md +1 -1
- package/docs/tools/lobster.md +11 -23
- package/docs/tools/skills-config.md +1 -1
- package/docs/tools/skills.md +21 -29
- package/docs/tools/slash-commands.md +8 -10
- package/docs/tools/web.md +6 -6
- package/docs/tts.md +9 -9
- package/docs/tui.md +7 -7
- package/docs/vps.md +1 -6
- package/docs/web/control-ui.md +12 -13
- package/docs/web/dashboard.md +4 -8
- package/docs/web/index.md +5 -6
- package/docs/web/webchat.md +1 -1
- package/extensions/bluebubbles/index.ts +2 -2
- package/extensions/bluebubbles/package.json +5 -5
- package/extensions/bluebubbles/src/accounts.ts +8 -8
- package/extensions/bluebubbles/src/actions.test.ts +22 -22
- package/extensions/bluebubbles/src/actions.ts +5 -5
- package/extensions/bluebubbles/src/attachments.ts +2 -2
- package/extensions/bluebubbles/src/channel.ts +16 -16
- package/extensions/bluebubbles/src/chat.ts +2 -2
- package/extensions/bluebubbles/src/media-send.ts +2 -2
- package/extensions/bluebubbles/src/monitor.test.ts +49 -55
- package/extensions/bluebubbles/src/monitor.ts +5 -180
- package/extensions/bluebubbles/src/onboarding.ts +7 -7
- package/extensions/bluebubbles/src/reactions.ts +2 -2
- package/extensions/bluebubbles/src/send.ts +2 -2
- package/extensions/copilot-proxy/package.json +4 -4
- package/extensions/diagnostics-otel/index.ts +2 -2
- package/extensions/diagnostics-otel/package.json +4 -4
- package/extensions/diagnostics-otel/src/service.test.ts +12 -12
- package/extensions/diagnostics-otel/src/service.ts +84 -84
- package/extensions/discord/index.ts +2 -2
- package/extensions/discord/package.json +4 -4
- package/extensions/google-antigravity-auth/index.ts +1 -8
- package/extensions/google-antigravity-auth/package.json +4 -4
- package/extensions/google-gemini-cli-auth/oauth.ts +2 -2
- package/extensions/google-gemini-cli-auth/package.json +4 -4
- package/extensions/googlechat/index.ts +3 -3
- package/extensions/googlechat/package.json +7 -7
- package/extensions/googlechat/src/accounts.ts +8 -8
- package/extensions/googlechat/src/actions.ts +6 -6
- package/extensions/googlechat/src/api.ts +1 -1
- package/extensions/googlechat/src/channel.ts +21 -21
- package/extensions/googlechat/src/monitor.ts +8 -8
- package/extensions/googlechat/src/onboarding.ts +10 -10
- package/extensions/imessage/index.ts +2 -2
- package/extensions/imessage/package.json +4 -4
- package/extensions/line/index.ts +2 -2
- package/extensions/line/package.json +6 -6
- package/extensions/line/src/card-command.ts +2 -2
- package/extensions/line/src/channel.logout.test.ts +4 -4
- package/extensions/line/src/channel.sendPayload.test.ts +8 -8
- package/extensions/line/src/channel.ts +4 -4
- package/extensions/llm-task/index.ts +2 -2
- package/extensions/llm-task/package.json +4 -4
- package/extensions/llm-task/src/llm-task-tool.ts +5 -5
- package/extensions/lobster/index.ts +2 -2
- package/extensions/lobster/package.json +3 -3
- package/extensions/lobster/src/lobster-tool.test.ts +6 -26
- package/extensions/lobster/src/lobster-tool.ts +6 -24
- package/extensions/matrix/CHANGELOG.md +9 -9
- package/extensions/matrix/index.ts +2 -2
- package/extensions/matrix/package.json +7 -7
- package/extensions/matrix/src/matrix/actions/messages.ts +1 -1
- package/extensions/matrix/src/matrix/actions/reactions.ts +1 -1
- package/extensions/matrix/src/matrix/actions/room.ts +3 -3
- package/extensions/matrix/src/matrix/actions/summary.ts +1 -1
- package/extensions/matrix/src/matrix/actions/types.ts +1 -1
- package/extensions/matrix/src/matrix/active-client.ts +1 -1
- package/extensions/matrix/src/matrix/client/config.ts +2 -2
- package/extensions/matrix/src/matrix/client/create-client.ts +2 -2
- package/extensions/matrix/src/matrix/client/logging.ts +1 -1
- package/extensions/matrix/src/matrix/client/shared.ts +3 -3
- package/extensions/matrix/src/matrix/deps.ts +4 -4
- package/extensions/matrix/src/matrix/monitor/auto-join.ts +2 -2
- package/extensions/matrix/src/matrix/monitor/direct.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/events.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/handler.ts +5 -5
- package/extensions/matrix/src/matrix/monitor/index.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/location.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/media.test.ts +2 -2
- package/extensions/matrix/src/matrix/monitor/media.ts +3 -3
- package/extensions/matrix/src/matrix/monitor/replies.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/room-info.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/threads.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/types.ts +1 -1
- package/extensions/matrix/src/matrix/probe.ts +1 -1
- package/extensions/matrix/src/matrix/send/client.ts +2 -2
- package/extensions/matrix/src/matrix/send/media.ts +1 -1
- package/extensions/matrix/src/matrix/send/targets.test.ts +1 -1
- package/extensions/matrix/src/matrix/send/targets.ts +1 -1
- package/extensions/matrix/src/matrix/send/types.ts +2 -2
- package/extensions/matrix/src/matrix/send.test.ts +2 -2
- package/extensions/matrix/src/matrix/send.ts +3 -3
- package/extensions/matrix/src/onboarding.ts +2 -2
- package/extensions/matrix/src/types.ts +1 -1
- package/extensions/mattermost/index.ts +2 -2
- package/extensions/mattermost/package.json +5 -5
- package/extensions/mattermost/src/mattermost/accounts.ts +8 -8
- package/extensions/mattermost/src/mattermost/monitor-helpers.ts +5 -5
- package/extensions/mattermost/src/mattermost/monitor.ts +2 -2
- package/extensions/mattermost/src/onboarding-helpers.ts +3 -3
- package/extensions/mattermost/src/onboarding.ts +3 -3
- package/extensions/memory-core/index.ts +2 -2
- package/extensions/memory-core/package.json +5 -5
- package/extensions/memory-lancedb/index.test.ts +2 -2
- package/extensions/memory-lancedb/index.ts +3 -3
- package/extensions/memory-lancedb/package.json +4 -4
- package/extensions/msteams/CHANGELOG.md +7 -7
- package/extensions/msteams/index.ts +2 -2
- package/extensions/msteams/package.json +6 -6
- package/extensions/msteams/src/channel.directory.test.ts +2 -2
- package/extensions/msteams/src/channel.ts +2 -2
- package/extensions/msteams/src/conversation-store-fs.test.ts +1 -1
- package/extensions/msteams/src/graph-upload.ts +4 -4
- package/extensions/msteams/src/monitor-handler.ts +2 -2
- package/extensions/msteams/src/monitor.ts +2 -2
- package/extensions/msteams/src/onboarding.ts +9 -9
- package/extensions/msteams/src/policy.ts +3 -48
- package/extensions/msteams/src/polls-store.test.ts +1 -1
- package/extensions/msteams/src/polls.test.ts +2 -2
- package/extensions/msteams/src/polls.ts +8 -8
- package/extensions/msteams/src/reply-dispatcher.ts +35 -35
- package/extensions/msteams/src/send-context.ts +2 -2
- package/extensions/msteams/src/send.ts +4 -4
- package/extensions/nextcloud-talk/index.ts +2 -2
- package/extensions/nextcloud-talk/package.json +5 -5
- package/extensions/nextcloud-talk/src/channel.ts +7 -7
- package/extensions/nextcloud-talk/src/inbound.ts +7 -7
- package/extensions/nextcloud-talk/src/onboarding.ts +1 -1
- package/extensions/nostr/CHANGELOG.md +4 -4
- package/extensions/nostr/index.ts +5 -5
- package/extensions/nostr/package.json +6 -6
- package/extensions/nostr/src/channel.ts +1 -1
- package/extensions/nostr/src/nostr-state-store.test.ts +1 -1
- package/extensions/nostr/src/types.ts +4 -4
- package/extensions/open-prose/index.ts +2 -2
- package/extensions/open-prose/package.json +3 -3
- package/extensions/open-prose/skills/prose/SKILL.md +5 -5
- package/extensions/open-prose/skills/prose/prose.md +4 -4
- package/extensions/signal/index.ts +2 -2
- package/extensions/signal/package.json +4 -4
- package/extensions/slack/index.ts +2 -2
- package/extensions/slack/package.json +4 -4
- package/extensions/telegram/index.ts +2 -2
- package/extensions/telegram/package.json +4 -4
- package/extensions/telegram/src/channel.ts +2 -2
- package/extensions/tlon/README.md +1 -1
- package/extensions/tlon/index.ts +2 -2
- package/extensions/tlon/package.json +5 -5
- package/extensions/tlon/src/channel.ts +13 -13
- package/extensions/tlon/src/monitor/index.ts +3 -3
- package/extensions/tlon/src/onboarding.ts +3 -3
- package/extensions/tlon/src/types.ts +3 -3
- package/extensions/tlon/src/urbit/send.ts +6 -19
- package/extensions/voice-call/CHANGELOG.md +12 -13
- package/extensions/voice-call/README.md +2 -3
- package/extensions/voice-call/clawdbot.plugin.json +3 -3
- package/extensions/voice-call/index.ts +9 -11
- package/extensions/voice-call/package.json +4 -4
- package/extensions/voice-call/src/cli.ts +1 -1
- package/extensions/voice-call/src/config.ts +4 -61
- package/extensions/voice-call/src/core-bridge.ts +8 -10
- package/extensions/voice-call/src/manager.test.ts +2 -2
- package/extensions/voice-call/src/providers/twilio/webhook.ts +1 -2
- package/extensions/voice-call/src/providers/twilio.ts +2 -2
- package/extensions/voice-call/src/response-generator.ts +1 -1
- package/extensions/voice-call/src/runtime.ts +15 -26
- package/extensions/voice-call/src/types.ts +0 -1
- package/extensions/voice-call/src/webhook-security.test.ts +0 -52
- package/extensions/voice-call/src/webhook-security.ts +5 -16
- package/extensions/voice-call/src/webhook.ts +0 -1
- package/extensions/whatsapp/index.ts +2 -2
- package/extensions/whatsapp/package.json +4 -4
- package/extensions/zalo/CHANGELOG.md +9 -9
- package/extensions/zalo/index.ts +2 -2
- package/extensions/zalo/package.json +6 -6
- package/extensions/zalo/src/accounts.ts +8 -8
- package/extensions/zalo/src/actions.ts +4 -4
- package/extensions/zalo/src/channel.directory.test.ts +2 -2
- package/extensions/zalo/src/channel.ts +18 -18
- package/extensions/zalo/src/monitor.ts +9 -9
- package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
- package/extensions/zalo/src/onboarding.ts +25 -25
- package/extensions/zalo/src/send.ts +2 -2
- package/extensions/zalouser/CHANGELOG.md +4 -4
- package/extensions/zalouser/index.ts +2 -2
- package/extensions/zalouser/package.json +6 -6
- package/extensions/zalouser/src/accounts.ts +9 -9
- package/extensions/zalouser/src/channel.ts +25 -25
- package/extensions/zalouser/src/monitor.ts +4 -4
- package/extensions/zalouser/src/onboarding.ts +30 -30
- package/extensions/zalouser/src/status-issues.ts +1 -1
- package/package.json +18 -17
- package/skills/1password/SKILL.md +3 -3
- package/skills/apple-notes/SKILL.md +2 -2
- package/skills/apple-reminders/SKILL.md +1 -1
- package/skills/bear-notes/SKILL.md +1 -1
- package/skills/bird/SKILL.md +1 -1
- package/skills/blogwatcher/SKILL.md +1 -1
- package/skills/blucli/SKILL.md +1 -1
- package/skills/bluebubbles/SKILL.md +1 -1
- package/skills/camsnap/SKILL.md +1 -1
- package/skills/canvas/SKILL.md +15 -15
- package/skills/clawdhub/SKILL.md +2 -2
- package/skills/coding-agent/SKILL.md +6 -6
- package/skills/discord/SKILL.md +5 -6
- package/skills/eightctl/SKILL.md +1 -1
- package/skills/food-order/SKILL.md +1 -1
- package/skills/gemini/SKILL.md +1 -1
- package/skills/gifgrep/SKILL.md +1 -1
- package/skills/github/SKILL.md +0 -1
- package/skills/gog/SKILL.md +1 -1
- package/skills/goplaces/SKILL.md +1 -1
- package/skills/himalaya/SKILL.md +1 -1
- package/skills/imsg/SKILL.md +1 -1
- package/skills/local-places/SKILL.md +1 -1
- package/skills/mcporter/SKILL.md +1 -1
- package/skills/model-usage/SKILL.md +1 -1
- package/skills/nano-banana-pro/SKILL.md +5 -10
- package/skills/nano-banana-pro/scripts/generate_image.py +27 -42
- package/skills/nano-pdf/SKILL.md +1 -1
- package/skills/notion/SKILL.md +1 -1
- package/skills/obsidian/SKILL.md +1 -1
- package/skills/openai-image-gen/SKILL.md +1 -1
- package/skills/openai-whisper/SKILL.md +1 -1
- package/skills/openai-whisper-api/SKILL.md +2 -2
- package/skills/openhue/SKILL.md +1 -1
- package/skills/oracle/SKILL.md +1 -1
- package/skills/ordercli/SKILL.md +1 -1
- package/skills/peekaboo/SKILL.md +1 -1
- package/skills/sag/SKILL.md +1 -1
- package/skills/session-logs/SKILL.md +1 -1
- package/skills/sherpa-onnx-tts/SKILL.md +2 -2
- package/skills/slack/SKILL.md +3 -4
- package/skills/songsee/SKILL.md +1 -1
- package/skills/sonoscli/SKILL.md +1 -1
- package/skills/spotify-player/SKILL.md +1 -1
- package/skills/summarize/SKILL.md +1 -1
- package/skills/things-mac/SKILL.md +3 -3
- package/skills/tmux/SKILL.md +7 -7
- package/skills/tmux/scripts/find-sessions.sh +1 -1
- package/skills/trello/SKILL.md +2 -2
- package/skills/video-frames/SKILL.md +1 -1
- package/skills/voice-call/SKILL.md +4 -4
- package/skills/wacli/SKILL.md +2 -2
- package/skills/weather/SKILL.md +1 -1
- package/LICENSE +0 -21
- package/dist/agents/moltbot-tools.js +0 -121
- package/dist/agents/pi-extensions/compaction-safeguard-runtime.js +0 -20
- package/dist/browser/control-service.js +0 -72
- package/dist/browser/routes/dispatcher.js +0 -86
- package/dist/browser/routes/types.js +0 -1
- package/dist/cli/cli-name.js +0 -26
- package/dist/compat/legacy-names.js +0 -5
- package/dist/control-ui/assets/index-CIRDm-Lu.css +0 -1
- package/dist/control-ui/assets/index-HlBhZmfj.js.map +0 -1
- package/dist/discord/monitor/presence-cache.js +0 -38
- package/dist/gateway/server-methods/browser.js +0 -204
- package/dist/infra/fs-safe.js +0 -76
- package/dist/infra/moltbot-root.js +0 -57
- package/dist/line/signature.js +0 -11
- package/dist/security/external-content.js +0 -143
- package/dist/security/windows-acl.js +0 -162
- package/dist/telegram/api-logging.js +0 -24
- package/dist/telegram/network-config.js +0 -23
- package/dist/telegram/network-errors.js +0 -103
- package/dist/telegram/sticker-cache.js +0 -202
- package/docs/channels/line.md +0 -183
- package/docs/channels/twitch.md +0 -366
- package/docs/gateway/security/formal-verification.md +0 -107
- package/docs/install/migrating.md +0 -190
- package/docs/northflank.mdx +0 -53
- package/docs/platforms/digitalocean.md +0 -243
- package/docs/platforms/gcp.md +0 -498
- package/docs/platforms/oracle.md +0 -291
- package/docs/platforms/raspberry-pi.md +0 -354
- package/docs/providers/claude-max-api-proxy.md +0 -145
- package/docs/render.mdx +0 -158
- package/docs/security/formal-verification.md +0 -107
- package/extensions/googlechat/node_modules/.bin/poolbot +0 -21
- package/extensions/line/node_modules/.bin/poolbot +0 -21
- package/extensions/matrix/node_modules/.bin/poolbot +0 -21
- package/extensions/memory-core/node_modules/.bin/poolbot +0 -21
- package/extensions/msteams/node_modules/.bin/poolbot +0 -21
- package/extensions/nostr/node_modules/.bin/poolbot +0 -21
- package/extensions/twitch/CHANGELOG.md +0 -21
- package/extensions/twitch/README.md +0 -89
- package/extensions/twitch/clawdbot.plugin.json +0 -9
- package/extensions/twitch/index.ts +0 -20
- package/extensions/twitch/node_modules/.bin/poolbot +0 -21
- package/extensions/twitch/package.json +0 -20
- package/extensions/twitch/src/access-control.test.ts +0 -489
- package/extensions/twitch/src/access-control.ts +0 -154
- package/extensions/twitch/src/actions.ts +0 -173
- package/extensions/twitch/src/client-manager-registry.ts +0 -115
- package/extensions/twitch/src/config-schema.ts +0 -82
- package/extensions/twitch/src/config.test.ts +0 -88
- package/extensions/twitch/src/config.ts +0 -116
- package/extensions/twitch/src/monitor.ts +0 -257
- package/extensions/twitch/src/onboarding.test.ts +0 -311
- package/extensions/twitch/src/onboarding.ts +0 -411
- package/extensions/twitch/src/outbound.test.ts +0 -373
- package/extensions/twitch/src/outbound.ts +0 -186
- package/extensions/twitch/src/plugin.test.ts +0 -39
- package/extensions/twitch/src/plugin.ts +0 -274
- package/extensions/twitch/src/probe.test.ts +0 -198
- package/extensions/twitch/src/probe.ts +0 -118
- package/extensions/twitch/src/resolver.ts +0 -137
- package/extensions/twitch/src/runtime.ts +0 -14
- package/extensions/twitch/src/send.test.ts +0 -289
- package/extensions/twitch/src/send.ts +0 -136
- package/extensions/twitch/src/status.test.ts +0 -270
- package/extensions/twitch/src/status.ts +0 -176
- package/extensions/twitch/src/token.test.ts +0 -171
- package/extensions/twitch/src/token.ts +0 -87
- package/extensions/twitch/src/twitch-client.test.ts +0 -574
- package/extensions/twitch/src/twitch-client.ts +0 -277
- package/extensions/twitch/src/types.ts +0 -141
- package/extensions/twitch/src/utils/markdown.ts +0 -92
- package/extensions/twitch/src/utils/twitch.ts +0 -78
- package/extensions/twitch/test/setup.ts +0 -7
- package/extensions/voice-call/src/config.test.ts +0 -204
- package/extensions/zalo/node_modules/.bin/poolbot +0 -21
- package/extensions/zalouser/node_modules/.bin/poolbot +0 -21
|
@@ -3,7 +3,7 @@ import type { IncomingMessage, ServerResponse } from "node:http";
|
|
|
3
3
|
import { EventEmitter } from "node:events";
|
|
4
4
|
|
|
5
5
|
import { removeAckReactionAfterReply, shouldAckReaction } from "clawdbot/plugin-sdk";
|
|
6
|
-
import type {
|
|
6
|
+
import type { ClawdbotConfig, PluginRuntime } from "clawdbot/plugin-sdk";
|
|
7
7
|
import {
|
|
8
8
|
handleBlueBubblesWebhookRequest,
|
|
9
9
|
registerBlueBubblesWebhookTarget,
|
|
@@ -146,14 +146,8 @@ function createMockRuntime(): PluginRuntime {
|
|
|
146
146
|
resolveRequireMention: mockResolveRequireMention as unknown as PluginRuntime["channel"]["groups"]["resolveRequireMention"],
|
|
147
147
|
},
|
|
148
148
|
debounce: {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
enqueue: async (item: unknown) => {
|
|
152
|
-
await params.onFlush([item]);
|
|
153
|
-
},
|
|
154
|
-
flushKey: vi.fn(),
|
|
155
|
-
})) as unknown as PluginRuntime["channel"]["debounce"]["createInboundDebouncer"],
|
|
156
|
-
resolveInboundDebounceMs: vi.fn(() => 0) as unknown as PluginRuntime["channel"]["debounce"]["resolveInboundDebounceMs"],
|
|
149
|
+
createInboundDebouncer: vi.fn() as unknown as PluginRuntime["channel"]["debounce"]["createInboundDebouncer"],
|
|
150
|
+
resolveInboundDebounceMs: vi.fn() as unknown as PluginRuntime["channel"]["debounce"]["resolveInboundDebounceMs"],
|
|
157
151
|
},
|
|
158
152
|
commands: {
|
|
159
153
|
resolveCommandAuthorizedFromAuthorizers: mockResolveCommandAuthorizedFromAuthorizers as unknown as PluginRuntime["channel"]["commands"]["resolveCommandAuthorizedFromAuthorizers"],
|
|
@@ -178,7 +172,7 @@ function createMockRuntime(): PluginRuntime {
|
|
|
178
172
|
})) as unknown as PluginRuntime["logging"]["getChildLogger"],
|
|
179
173
|
},
|
|
180
174
|
state: {
|
|
181
|
-
resolveStateDir: vi.fn(() => "/tmp/
|
|
175
|
+
resolveStateDir: vi.fn(() => "/tmp/clawdbot") as unknown as PluginRuntime["state"]["resolveStateDir"],
|
|
182
176
|
},
|
|
183
177
|
};
|
|
184
178
|
}
|
|
@@ -264,7 +258,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
264
258
|
describe("webhook parsing + auth handling", () => {
|
|
265
259
|
it("rejects non-POST requests", async () => {
|
|
266
260
|
const account = createMockAccount();
|
|
267
|
-
const config:
|
|
261
|
+
const config: ClawdbotConfig = {};
|
|
268
262
|
const core = createMockRuntime();
|
|
269
263
|
setBlueBubblesRuntime(core);
|
|
270
264
|
|
|
@@ -287,7 +281,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
287
281
|
|
|
288
282
|
it("accepts POST requests with valid JSON payload", async () => {
|
|
289
283
|
const account = createMockAccount();
|
|
290
|
-
const config:
|
|
284
|
+
const config: ClawdbotConfig = {};
|
|
291
285
|
const core = createMockRuntime();
|
|
292
286
|
setBlueBubblesRuntime(core);
|
|
293
287
|
|
|
@@ -323,7 +317,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
323
317
|
|
|
324
318
|
it("rejects requests with invalid JSON", async () => {
|
|
325
319
|
const account = createMockAccount();
|
|
326
|
-
const config:
|
|
320
|
+
const config: ClawdbotConfig = {};
|
|
327
321
|
const core = createMockRuntime();
|
|
328
322
|
setBlueBubblesRuntime(core);
|
|
329
323
|
|
|
@@ -346,7 +340,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
346
340
|
|
|
347
341
|
it("authenticates via password query parameter", async () => {
|
|
348
342
|
const account = createMockAccount({ password: "secret-token" });
|
|
349
|
-
const config:
|
|
343
|
+
const config: ClawdbotConfig = {};
|
|
350
344
|
const core = createMockRuntime();
|
|
351
345
|
setBlueBubblesRuntime(core);
|
|
352
346
|
|
|
@@ -380,7 +374,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
380
374
|
|
|
381
375
|
it("authenticates via x-password header", async () => {
|
|
382
376
|
const account = createMockAccount({ password: "secret-token" });
|
|
383
|
-
const config:
|
|
377
|
+
const config: ClawdbotConfig = {};
|
|
384
378
|
const core = createMockRuntime();
|
|
385
379
|
setBlueBubblesRuntime(core);
|
|
386
380
|
|
|
@@ -418,7 +412,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
418
412
|
|
|
419
413
|
it("rejects unauthorized requests with wrong password", async () => {
|
|
420
414
|
const account = createMockAccount({ password: "secret-token" });
|
|
421
|
-
const config:
|
|
415
|
+
const config: ClawdbotConfig = {};
|
|
422
416
|
const core = createMockRuntime();
|
|
423
417
|
setBlueBubblesRuntime(core);
|
|
424
418
|
|
|
@@ -451,7 +445,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
451
445
|
|
|
452
446
|
it("allows localhost requests without authentication", async () => {
|
|
453
447
|
const account = createMockAccount({ password: "secret-token" });
|
|
454
|
-
const config:
|
|
448
|
+
const config: ClawdbotConfig = {};
|
|
455
449
|
const core = createMockRuntime();
|
|
456
450
|
setBlueBubblesRuntime(core);
|
|
457
451
|
|
|
@@ -497,7 +491,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
497
491
|
vi.mocked(resolveChatGuidForTarget).mockClear();
|
|
498
492
|
|
|
499
493
|
const account = createMockAccount({ groupPolicy: "open" });
|
|
500
|
-
const config:
|
|
494
|
+
const config: ClawdbotConfig = {};
|
|
501
495
|
const core = createMockRuntime();
|
|
502
496
|
setBlueBubblesRuntime(core);
|
|
503
497
|
|
|
@@ -545,7 +539,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
545
539
|
});
|
|
546
540
|
|
|
547
541
|
const account = createMockAccount({ groupPolicy: "open" });
|
|
548
|
-
const config:
|
|
542
|
+
const config: ClawdbotConfig = {};
|
|
549
543
|
const core = createMockRuntime();
|
|
550
544
|
setBlueBubblesRuntime(core);
|
|
551
545
|
|
|
@@ -591,7 +585,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
591
585
|
dmPolicy: "allowlist",
|
|
592
586
|
allowFrom: ["+15551234567"],
|
|
593
587
|
});
|
|
594
|
-
const config:
|
|
588
|
+
const config: ClawdbotConfig = {};
|
|
595
589
|
const core = createMockRuntime();
|
|
596
590
|
setBlueBubblesRuntime(core);
|
|
597
591
|
|
|
@@ -632,7 +626,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
632
626
|
dmPolicy: "allowlist",
|
|
633
627
|
allowFrom: ["+15559999999"], // Different number
|
|
634
628
|
});
|
|
635
|
-
const config:
|
|
629
|
+
const config: ClawdbotConfig = {};
|
|
636
630
|
const core = createMockRuntime();
|
|
637
631
|
setBlueBubblesRuntime(core);
|
|
638
632
|
|
|
@@ -673,7 +667,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
673
667
|
dmPolicy: "pairing",
|
|
674
668
|
allowFrom: ["+15559999999"], // Different number than sender
|
|
675
669
|
});
|
|
676
|
-
const config:
|
|
670
|
+
const config: ClawdbotConfig = {};
|
|
677
671
|
const core = createMockRuntime();
|
|
678
672
|
setBlueBubblesRuntime(core);
|
|
679
673
|
|
|
@@ -716,7 +710,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
716
710
|
dmPolicy: "pairing",
|
|
717
711
|
allowFrom: ["+15559999999"], // Different number than sender
|
|
718
712
|
});
|
|
719
|
-
const config:
|
|
713
|
+
const config: ClawdbotConfig = {};
|
|
720
714
|
const core = createMockRuntime();
|
|
721
715
|
setBlueBubblesRuntime(core);
|
|
722
716
|
|
|
@@ -757,7 +751,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
757
751
|
dmPolicy: "open",
|
|
758
752
|
allowFrom: [],
|
|
759
753
|
});
|
|
760
|
-
const config:
|
|
754
|
+
const config: ClawdbotConfig = {};
|
|
761
755
|
const core = createMockRuntime();
|
|
762
756
|
setBlueBubblesRuntime(core);
|
|
763
757
|
|
|
@@ -794,7 +788,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
794
788
|
const account = createMockAccount({
|
|
795
789
|
dmPolicy: "disabled",
|
|
796
790
|
});
|
|
797
|
-
const config:
|
|
791
|
+
const config: ClawdbotConfig = {};
|
|
798
792
|
const core = createMockRuntime();
|
|
799
793
|
setBlueBubblesRuntime(core);
|
|
800
794
|
|
|
@@ -833,7 +827,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
833
827
|
const account = createMockAccount({
|
|
834
828
|
groupPolicy: "open",
|
|
835
829
|
});
|
|
836
|
-
const config:
|
|
830
|
+
const config: ClawdbotConfig = {};
|
|
837
831
|
const core = createMockRuntime();
|
|
838
832
|
setBlueBubblesRuntime(core);
|
|
839
833
|
|
|
@@ -871,7 +865,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
871
865
|
const account = createMockAccount({
|
|
872
866
|
groupPolicy: "disabled",
|
|
873
867
|
});
|
|
874
|
-
const config:
|
|
868
|
+
const config: ClawdbotConfig = {};
|
|
875
869
|
const core = createMockRuntime();
|
|
876
870
|
setBlueBubblesRuntime(core);
|
|
877
871
|
|
|
@@ -910,7 +904,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
910
904
|
groupPolicy: "allowlist",
|
|
911
905
|
dmPolicy: "open",
|
|
912
906
|
});
|
|
913
|
-
const config:
|
|
907
|
+
const config: ClawdbotConfig = {};
|
|
914
908
|
const core = createMockRuntime();
|
|
915
909
|
setBlueBubblesRuntime(core);
|
|
916
910
|
|
|
@@ -949,7 +943,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
949
943
|
groupPolicy: "allowlist",
|
|
950
944
|
groupAllowFrom: ["chat_guid:iMessage;+;chat123456"],
|
|
951
945
|
});
|
|
952
|
-
const config:
|
|
946
|
+
const config: ClawdbotConfig = {};
|
|
953
947
|
const core = createMockRuntime();
|
|
954
948
|
setBlueBubblesRuntime(core);
|
|
955
949
|
|
|
@@ -990,7 +984,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
990
984
|
mockMatchesMentionPatterns.mockReturnValue(true);
|
|
991
985
|
|
|
992
986
|
const account = createMockAccount({ groupPolicy: "open" });
|
|
993
|
-
const config:
|
|
987
|
+
const config: ClawdbotConfig = {};
|
|
994
988
|
const core = createMockRuntime();
|
|
995
989
|
setBlueBubblesRuntime(core);
|
|
996
990
|
|
|
@@ -1031,7 +1025,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1031
1025
|
mockMatchesMentionPatterns.mockReturnValue(false);
|
|
1032
1026
|
|
|
1033
1027
|
const account = createMockAccount({ groupPolicy: "open" });
|
|
1034
|
-
const config:
|
|
1028
|
+
const config: ClawdbotConfig = {};
|
|
1035
1029
|
const core = createMockRuntime();
|
|
1036
1030
|
setBlueBubblesRuntime(core);
|
|
1037
1031
|
|
|
@@ -1069,7 +1063,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1069
1063
|
mockResolveRequireMention.mockReturnValue(false);
|
|
1070
1064
|
|
|
1071
1065
|
const account = createMockAccount({ groupPolicy: "open" });
|
|
1072
|
-
const config:
|
|
1066
|
+
const config: ClawdbotConfig = {};
|
|
1073
1067
|
const core = createMockRuntime();
|
|
1074
1068
|
setBlueBubblesRuntime(core);
|
|
1075
1069
|
|
|
@@ -1107,7 +1101,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1107
1101
|
describe("group metadata", () => {
|
|
1108
1102
|
it("includes group subject + members in ctx", async () => {
|
|
1109
1103
|
const account = createMockAccount({ groupPolicy: "open" });
|
|
1110
|
-
const config:
|
|
1104
|
+
const config: ClawdbotConfig = {};
|
|
1111
1105
|
const core = createMockRuntime();
|
|
1112
1106
|
setBlueBubblesRuntime(core);
|
|
1113
1107
|
|
|
@@ -1153,7 +1147,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1153
1147
|
describe("reply metadata", () => {
|
|
1154
1148
|
it("surfaces reply fields in ctx when provided", async () => {
|
|
1155
1149
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
1156
|
-
const config:
|
|
1150
|
+
const config: ClawdbotConfig = {};
|
|
1157
1151
|
const core = createMockRuntime();
|
|
1158
1152
|
setBlueBubblesRuntime(core);
|
|
1159
1153
|
|
|
@@ -1201,7 +1195,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1201
1195
|
|
|
1202
1196
|
it("preserves part index prefixes in reply tags when short IDs are unavailable", async () => {
|
|
1203
1197
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
1204
|
-
const config:
|
|
1198
|
+
const config: ClawdbotConfig = {};
|
|
1205
1199
|
const core = createMockRuntime();
|
|
1206
1200
|
setBlueBubblesRuntime(core);
|
|
1207
1201
|
|
|
@@ -1246,7 +1240,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1246
1240
|
|
|
1247
1241
|
it("hydrates missing reply sender/body from the recent-message cache", async () => {
|
|
1248
1242
|
const account = createMockAccount({ dmPolicy: "open", groupPolicy: "open" });
|
|
1249
|
-
const config:
|
|
1243
|
+
const config: ClawdbotConfig = {};
|
|
1250
1244
|
const core = createMockRuntime();
|
|
1251
1245
|
setBlueBubblesRuntime(core);
|
|
1252
1246
|
|
|
@@ -1316,7 +1310,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1316
1310
|
|
|
1317
1311
|
it("falls back to threadOriginatorGuid when reply metadata is absent", async () => {
|
|
1318
1312
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
1319
|
-
const config:
|
|
1313
|
+
const config: ClawdbotConfig = {};
|
|
1320
1314
|
const core = createMockRuntime();
|
|
1321
1315
|
setBlueBubblesRuntime(core);
|
|
1322
1316
|
|
|
@@ -1357,7 +1351,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1357
1351
|
describe("tapback text parsing", () => {
|
|
1358
1352
|
it("does not rewrite tapback-like text without metadata", async () => {
|
|
1359
1353
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
1360
|
-
const config:
|
|
1354
|
+
const config: ClawdbotConfig = {};
|
|
1361
1355
|
const core = createMockRuntime();
|
|
1362
1356
|
setBlueBubblesRuntime(core);
|
|
1363
1357
|
|
|
@@ -1397,7 +1391,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1397
1391
|
|
|
1398
1392
|
it("parses tapback text with custom emoji when metadata is present", async () => {
|
|
1399
1393
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
1400
|
-
const config:
|
|
1394
|
+
const config: ClawdbotConfig = {};
|
|
1401
1395
|
const core = createMockRuntime();
|
|
1402
1396
|
setBlueBubblesRuntime(core);
|
|
1403
1397
|
|
|
@@ -1442,7 +1436,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1442
1436
|
vi.mocked(sendBlueBubblesReaction).mockClear();
|
|
1443
1437
|
|
|
1444
1438
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
1445
|
-
const config:
|
|
1439
|
+
const config: ClawdbotConfig = {
|
|
1446
1440
|
messages: {
|
|
1447
1441
|
ackReaction: "❤️",
|
|
1448
1442
|
ackReactionScope: "direct",
|
|
@@ -1500,7 +1494,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1500
1494
|
groupPolicy: "open",
|
|
1501
1495
|
allowFrom: ["+15551234567"],
|
|
1502
1496
|
});
|
|
1503
|
-
const config:
|
|
1497
|
+
const config: ClawdbotConfig = {};
|
|
1504
1498
|
const core = createMockRuntime();
|
|
1505
1499
|
setBlueBubblesRuntime(core);
|
|
1506
1500
|
|
|
@@ -1543,7 +1537,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1543
1537
|
groupPolicy: "open",
|
|
1544
1538
|
allowFrom: [], // No one authorized
|
|
1545
1539
|
});
|
|
1546
|
-
const config:
|
|
1540
|
+
const config: ClawdbotConfig = {};
|
|
1547
1541
|
const core = createMockRuntime();
|
|
1548
1542
|
setBlueBubblesRuntime(core);
|
|
1549
1543
|
|
|
@@ -1586,7 +1580,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1586
1580
|
const account = createMockAccount({
|
|
1587
1581
|
sendReadReceipts: true,
|
|
1588
1582
|
});
|
|
1589
|
-
const config:
|
|
1583
|
+
const config: ClawdbotConfig = {};
|
|
1590
1584
|
const core = createMockRuntime();
|
|
1591
1585
|
setBlueBubblesRuntime(core);
|
|
1592
1586
|
|
|
@@ -1627,7 +1621,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1627
1621
|
const account = createMockAccount({
|
|
1628
1622
|
sendReadReceipts: false,
|
|
1629
1623
|
});
|
|
1630
|
-
const config:
|
|
1624
|
+
const config: ClawdbotConfig = {};
|
|
1631
1625
|
const core = createMockRuntime();
|
|
1632
1626
|
setBlueBubblesRuntime(core);
|
|
1633
1627
|
|
|
@@ -1666,7 +1660,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1666
1660
|
vi.mocked(sendBlueBubblesTyping).mockClear();
|
|
1667
1661
|
|
|
1668
1662
|
const account = createMockAccount();
|
|
1669
|
-
const config:
|
|
1663
|
+
const config: ClawdbotConfig = {};
|
|
1670
1664
|
const core = createMockRuntime();
|
|
1671
1665
|
setBlueBubblesRuntime(core);
|
|
1672
1666
|
|
|
@@ -1714,7 +1708,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1714
1708
|
vi.mocked(sendBlueBubblesTyping).mockClear();
|
|
1715
1709
|
|
|
1716
1710
|
const account = createMockAccount();
|
|
1717
|
-
const config:
|
|
1711
|
+
const config: ClawdbotConfig = {};
|
|
1718
1712
|
const core = createMockRuntime();
|
|
1719
1713
|
setBlueBubblesRuntime(core);
|
|
1720
1714
|
|
|
@@ -1763,7 +1757,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1763
1757
|
vi.mocked(sendBlueBubblesTyping).mockClear();
|
|
1764
1758
|
|
|
1765
1759
|
const account = createMockAccount();
|
|
1766
|
-
const config:
|
|
1760
|
+
const config: ClawdbotConfig = {};
|
|
1767
1761
|
const core = createMockRuntime();
|
|
1768
1762
|
setBlueBubblesRuntime(core);
|
|
1769
1763
|
|
|
@@ -1813,7 +1807,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1813
1807
|
});
|
|
1814
1808
|
|
|
1815
1809
|
const account = createMockAccount();
|
|
1816
|
-
const config:
|
|
1810
|
+
const config: ClawdbotConfig = {};
|
|
1817
1811
|
const core = createMockRuntime();
|
|
1818
1812
|
setBlueBubblesRuntime(core);
|
|
1819
1813
|
|
|
@@ -1859,7 +1853,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1859
1853
|
mockEnqueueSystemEvent.mockClear();
|
|
1860
1854
|
|
|
1861
1855
|
const account = createMockAccount();
|
|
1862
|
-
const config:
|
|
1856
|
+
const config: ClawdbotConfig = {};
|
|
1863
1857
|
const core = createMockRuntime();
|
|
1864
1858
|
setBlueBubblesRuntime(core);
|
|
1865
1859
|
|
|
@@ -1899,7 +1893,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1899
1893
|
mockEnqueueSystemEvent.mockClear();
|
|
1900
1894
|
|
|
1901
1895
|
const account = createMockAccount();
|
|
1902
|
-
const config:
|
|
1896
|
+
const config: ClawdbotConfig = {};
|
|
1903
1897
|
const core = createMockRuntime();
|
|
1904
1898
|
setBlueBubblesRuntime(core);
|
|
1905
1899
|
|
|
@@ -1939,7 +1933,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1939
1933
|
mockEnqueueSystemEvent.mockClear();
|
|
1940
1934
|
|
|
1941
1935
|
const account = createMockAccount();
|
|
1942
|
-
const config:
|
|
1936
|
+
const config: ClawdbotConfig = {};
|
|
1943
1937
|
const core = createMockRuntime();
|
|
1944
1938
|
setBlueBubblesRuntime(core);
|
|
1945
1939
|
|
|
@@ -1976,7 +1970,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1976
1970
|
mockEnqueueSystemEvent.mockClear();
|
|
1977
1971
|
|
|
1978
1972
|
const account = createMockAccount();
|
|
1979
|
-
const config:
|
|
1973
|
+
const config: ClawdbotConfig = {};
|
|
1980
1974
|
const core = createMockRuntime();
|
|
1981
1975
|
setBlueBubblesRuntime(core);
|
|
1982
1976
|
|
|
@@ -2017,7 +2011,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
2017
2011
|
describe("short message ID mapping", () => {
|
|
2018
2012
|
it("assigns sequential short IDs to messages", async () => {
|
|
2019
2013
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
2020
|
-
const config:
|
|
2014
|
+
const config: ClawdbotConfig = {};
|
|
2021
2015
|
const core = createMockRuntime();
|
|
2022
2016
|
setBlueBubblesRuntime(core);
|
|
2023
2017
|
|
|
@@ -2057,7 +2051,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
2057
2051
|
|
|
2058
2052
|
it("resolves short ID back to UUID", async () => {
|
|
2059
2053
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
2060
|
-
const config:
|
|
2054
|
+
const config: ClawdbotConfig = {};
|
|
2061
2055
|
const core = createMockRuntime();
|
|
2062
2056
|
setBlueBubblesRuntime(core);
|
|
2063
2057
|
|
|
@@ -2110,7 +2104,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
2110
2104
|
describe("fromMe messages", () => {
|
|
2111
2105
|
it("ignores messages from self (fromMe=true)", async () => {
|
|
2112
2106
|
const account = createMockAccount();
|
|
2113
|
-
const config:
|
|
2107
|
+
const config: ClawdbotConfig = {};
|
|
2114
2108
|
const core = createMockRuntime();
|
|
2115
2109
|
setBlueBubblesRuntime(core);
|
|
2116
2110
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
2
|
|
|
3
|
-
import type {
|
|
3
|
+
import type { ClawdbotConfig } from "clawdbot/plugin-sdk";
|
|
4
4
|
import {
|
|
5
5
|
logAckFailure,
|
|
6
6
|
logInboundDrop,
|
|
@@ -26,7 +26,7 @@ export type BlueBubblesRuntimeEnv = {
|
|
|
26
26
|
|
|
27
27
|
export type BlueBubblesMonitorOptions = {
|
|
28
28
|
account: ResolvedBlueBubblesAccount;
|
|
29
|
-
config:
|
|
29
|
+
config: ClawdbotConfig;
|
|
30
30
|
runtime: BlueBubblesRuntimeEnv;
|
|
31
31
|
abortSignal: AbortSignal;
|
|
32
32
|
statusSink?: (patch: { lastInboundAt?: number; lastOutboundAt?: number }) => void;
|
|
@@ -243,185 +243,15 @@ function logGroupAllowlistHint(params: {
|
|
|
243
243
|
|
|
244
244
|
type WebhookTarget = {
|
|
245
245
|
account: ResolvedBlueBubblesAccount;
|
|
246
|
-
config:
|
|
246
|
+
config: ClawdbotConfig;
|
|
247
247
|
runtime: BlueBubblesRuntimeEnv;
|
|
248
248
|
core: BlueBubblesCoreRuntime;
|
|
249
249
|
path: string;
|
|
250
250
|
statusSink?: (patch: { lastInboundAt?: number; lastOutboundAt?: number }) => void;
|
|
251
251
|
};
|
|
252
252
|
|
|
253
|
-
/**
|
|
254
|
-
* Entry type for debouncing inbound messages.
|
|
255
|
-
* Captures the normalized message and its target for later combined processing.
|
|
256
|
-
*/
|
|
257
|
-
type BlueBubblesDebounceEntry = {
|
|
258
|
-
message: NormalizedWebhookMessage;
|
|
259
|
-
target: WebhookTarget;
|
|
260
|
-
};
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* Default debounce window for inbound message coalescing (ms).
|
|
264
|
-
* This helps combine URL text + link preview balloon messages that BlueBubbles
|
|
265
|
-
* sends as separate webhook events when no explicit inbound debounce config exists.
|
|
266
|
-
*/
|
|
267
|
-
const DEFAULT_INBOUND_DEBOUNCE_MS = 350;
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Combines multiple debounced messages into a single message for processing.
|
|
271
|
-
* Used when multiple webhook events arrive within the debounce window.
|
|
272
|
-
*/
|
|
273
|
-
function combineDebounceEntries(entries: BlueBubblesDebounceEntry[]): NormalizedWebhookMessage {
|
|
274
|
-
if (entries.length === 0) {
|
|
275
|
-
throw new Error("Cannot combine empty entries");
|
|
276
|
-
}
|
|
277
|
-
if (entries.length === 1) {
|
|
278
|
-
return entries[0].message;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
// Use the first message as the base (typically the text message)
|
|
282
|
-
const first = entries[0].message;
|
|
283
|
-
|
|
284
|
-
// Combine text from all entries, filtering out duplicates and empty strings
|
|
285
|
-
const seenTexts = new Set<string>();
|
|
286
|
-
const textParts: string[] = [];
|
|
287
|
-
|
|
288
|
-
for (const entry of entries) {
|
|
289
|
-
const text = entry.message.text.trim();
|
|
290
|
-
if (!text) continue;
|
|
291
|
-
// Skip duplicate text (URL might be in both text message and balloon)
|
|
292
|
-
const normalizedText = text.toLowerCase();
|
|
293
|
-
if (seenTexts.has(normalizedText)) continue;
|
|
294
|
-
seenTexts.add(normalizedText);
|
|
295
|
-
textParts.push(text);
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
// Merge attachments from all entries
|
|
299
|
-
const allAttachments = entries.flatMap((e) => e.message.attachments ?? []);
|
|
300
|
-
|
|
301
|
-
// Use the latest timestamp
|
|
302
|
-
const timestamps = entries
|
|
303
|
-
.map((e) => e.message.timestamp)
|
|
304
|
-
.filter((t): t is number => typeof t === "number");
|
|
305
|
-
const latestTimestamp = timestamps.length > 0 ? Math.max(...timestamps) : first.timestamp;
|
|
306
|
-
|
|
307
|
-
// Collect all message IDs for reference
|
|
308
|
-
const messageIds = entries
|
|
309
|
-
.map((e) => e.message.messageId)
|
|
310
|
-
.filter((id): id is string => Boolean(id));
|
|
311
|
-
|
|
312
|
-
// Prefer reply context from any entry that has it
|
|
313
|
-
const entryWithReply = entries.find((e) => e.message.replyToId);
|
|
314
|
-
|
|
315
|
-
return {
|
|
316
|
-
...first,
|
|
317
|
-
text: textParts.join(" "),
|
|
318
|
-
attachments: allAttachments.length > 0 ? allAttachments : first.attachments,
|
|
319
|
-
timestamp: latestTimestamp,
|
|
320
|
-
// Use first message's ID as primary (for reply reference), but we've coalesced others
|
|
321
|
-
messageId: messageIds[0] ?? first.messageId,
|
|
322
|
-
// Preserve reply context if present
|
|
323
|
-
replyToId: entryWithReply?.message.replyToId ?? first.replyToId,
|
|
324
|
-
replyToBody: entryWithReply?.message.replyToBody ?? first.replyToBody,
|
|
325
|
-
replyToSender: entryWithReply?.message.replyToSender ?? first.replyToSender,
|
|
326
|
-
// Clear balloonBundleId since we've combined (the combined message is no longer just a balloon)
|
|
327
|
-
balloonBundleId: undefined,
|
|
328
|
-
};
|
|
329
|
-
}
|
|
330
|
-
|
|
331
253
|
const webhookTargets = new Map<string, WebhookTarget[]>();
|
|
332
254
|
|
|
333
|
-
/**
|
|
334
|
-
* Maps webhook targets to their inbound debouncers.
|
|
335
|
-
* Each target gets its own debouncer keyed by a unique identifier.
|
|
336
|
-
*/
|
|
337
|
-
const targetDebouncers = new Map<
|
|
338
|
-
WebhookTarget,
|
|
339
|
-
ReturnType<BlueBubblesCoreRuntime["channel"]["debounce"]["createInboundDebouncer"]>
|
|
340
|
-
>();
|
|
341
|
-
|
|
342
|
-
function resolveBlueBubblesDebounceMs(
|
|
343
|
-
config: MoltbotConfig,
|
|
344
|
-
core: BlueBubblesCoreRuntime,
|
|
345
|
-
): number {
|
|
346
|
-
const inbound = config.messages?.inbound;
|
|
347
|
-
const hasExplicitDebounce =
|
|
348
|
-
typeof inbound?.debounceMs === "number" || typeof inbound?.byChannel?.bluebubbles === "number";
|
|
349
|
-
if (!hasExplicitDebounce) return DEFAULT_INBOUND_DEBOUNCE_MS;
|
|
350
|
-
return core.channel.debounce.resolveInboundDebounceMs({ cfg: config, channel: "bluebubbles" });
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
/**
|
|
354
|
-
* Creates or retrieves a debouncer for a webhook target.
|
|
355
|
-
*/
|
|
356
|
-
function getOrCreateDebouncer(target: WebhookTarget) {
|
|
357
|
-
const existing = targetDebouncers.get(target);
|
|
358
|
-
if (existing) return existing;
|
|
359
|
-
|
|
360
|
-
const { account, config, runtime, core } = target;
|
|
361
|
-
|
|
362
|
-
const debouncer = core.channel.debounce.createInboundDebouncer<BlueBubblesDebounceEntry>({
|
|
363
|
-
debounceMs: resolveBlueBubblesDebounceMs(config, core),
|
|
364
|
-
buildKey: (entry) => {
|
|
365
|
-
const msg = entry.message;
|
|
366
|
-
// Build key from account + chat + sender to coalesce messages from same source
|
|
367
|
-
const chatKey =
|
|
368
|
-
msg.chatGuid?.trim() ??
|
|
369
|
-
msg.chatIdentifier?.trim() ??
|
|
370
|
-
(msg.chatId ? String(msg.chatId) : "dm");
|
|
371
|
-
return `bluebubbles:${account.accountId}:${chatKey}:${msg.senderId}`;
|
|
372
|
-
},
|
|
373
|
-
shouldDebounce: (entry) => {
|
|
374
|
-
const msg = entry.message;
|
|
375
|
-
// Skip debouncing for messages with attachments - process immediately
|
|
376
|
-
if (msg.attachments && msg.attachments.length > 0) return false;
|
|
377
|
-
// Skip debouncing for from-me messages (they're just cached, not processed)
|
|
378
|
-
if (msg.fromMe) return false;
|
|
379
|
-
// Skip debouncing for control commands - process immediately
|
|
380
|
-
if (core.channel.text.hasControlCommand(msg.text, config)) return false;
|
|
381
|
-
// Debounce normal text messages and URL balloon messages
|
|
382
|
-
return true;
|
|
383
|
-
},
|
|
384
|
-
onFlush: async (entries) => {
|
|
385
|
-
if (entries.length === 0) return;
|
|
386
|
-
|
|
387
|
-
// Use target from first entry (all entries have same target due to key structure)
|
|
388
|
-
const flushTarget = entries[0].target;
|
|
389
|
-
|
|
390
|
-
if (entries.length === 1) {
|
|
391
|
-
// Single message - process normally
|
|
392
|
-
await processMessage(entries[0].message, flushTarget);
|
|
393
|
-
return;
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
// Multiple messages - combine and process
|
|
397
|
-
const combined = combineDebounceEntries(entries);
|
|
398
|
-
|
|
399
|
-
if (core.logging.shouldLogVerbose()) {
|
|
400
|
-
const count = entries.length;
|
|
401
|
-
const preview = combined.text.slice(0, 50);
|
|
402
|
-
runtime.log?.(
|
|
403
|
-
`[bluebubbles] coalesced ${count} messages: "${preview}${combined.text.length > 50 ? "..." : ""}"`,
|
|
404
|
-
);
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
await processMessage(combined, flushTarget);
|
|
408
|
-
},
|
|
409
|
-
onError: (err) => {
|
|
410
|
-
runtime.error?.(`[${account.accountId}] [bluebubbles] debounce flush failed: ${String(err)}`);
|
|
411
|
-
},
|
|
412
|
-
});
|
|
413
|
-
|
|
414
|
-
targetDebouncers.set(target, debouncer);
|
|
415
|
-
return debouncer;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
/**
|
|
419
|
-
* Removes a debouncer for a target (called during unregistration).
|
|
420
|
-
*/
|
|
421
|
-
function removeDebouncer(target: WebhookTarget): void {
|
|
422
|
-
targetDebouncers.delete(target);
|
|
423
|
-
}
|
|
424
|
-
|
|
425
255
|
function normalizeWebhookPath(raw: string): string {
|
|
426
256
|
const trimmed = raw.trim();
|
|
427
257
|
if (!trimmed) return "/";
|
|
@@ -445,8 +275,6 @@ export function registerBlueBubblesWebhookTarget(target: WebhookTarget): () => v
|
|
|
445
275
|
} else {
|
|
446
276
|
webhookTargets.delete(key);
|
|
447
277
|
}
|
|
448
|
-
// Clean up debouncer when target is unregistered
|
|
449
|
-
removeDebouncer(normalizedTarget);
|
|
450
278
|
};
|
|
451
279
|
}
|
|
452
280
|
|
|
@@ -940,7 +768,7 @@ function maskSecret(value: string): string {
|
|
|
940
768
|
}
|
|
941
769
|
|
|
942
770
|
function resolveBlueBubblesAckReaction(params: {
|
|
943
|
-
cfg:
|
|
771
|
+
cfg: ClawdbotConfig;
|
|
944
772
|
agentId: string;
|
|
945
773
|
core: BlueBubblesCoreRuntime;
|
|
946
774
|
runtime: BlueBubblesRuntimeEnv;
|
|
@@ -1377,10 +1205,7 @@ export async function handleBlueBubblesWebhookRequest(
|
|
|
1377
1205
|
);
|
|
1378
1206
|
});
|
|
1379
1207
|
} else if (message) {
|
|
1380
|
-
|
|
1381
|
-
// (e.g., text message + URL balloon arriving as separate webhooks)
|
|
1382
|
-
const debouncer = getOrCreateDebouncer(target);
|
|
1383
|
-
debouncer.enqueue({ message, target }).catch((err) => {
|
|
1208
|
+
processMessage(message, target).catch((err) => {
|
|
1384
1209
|
target.runtime.error?.(
|
|
1385
1210
|
`[${target.account.accountId}] BlueBubbles webhook failed: ${String(err)}`,
|
|
1386
1211
|
);
|