@gguf/pigbot 0.0.1 → 0.0.3
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 +6 -1054
- package/README-header.png +0 -0
- package/README.md +1 -1
- package/assets/chrome-extension/README.md +5 -5
- package/assets/chrome-extension/background.js +5 -5
- package/assets/chrome-extension/manifest.json +3 -3
- package/assets/chrome-extension/options.html +5 -6
- package/assets/chrome-extension/options.js +1 -1
- package/dist/acp/client.js +5 -5
- package/dist/acp/server.js +3 -3
- package/dist/acp/types.js +2 -2
- package/dist/agents/agent-paths.js +6 -6
- package/dist/agents/anthropic-payload-log.js +2 -2
- package/dist/agents/auth-health.js +2 -6
- package/dist/agents/auth-profiles/doctor.js +1 -1
- package/dist/agents/auth-profiles/external-cli-sync.js +5 -150
- package/dist/agents/auth-profiles/oauth.js +26 -7
- package/dist/agents/auth-profiles/paths.js +3 -3
- package/dist/agents/auth-profiles/store.js +5 -13
- package/dist/agents/bash-tools.exec.js +77 -26
- package/dist/agents/bash-tools.shared.js +8 -1
- package/dist/agents/cache-trace.js +5 -5
- package/dist/agents/cli-backends.js +8 -0
- package/dist/agents/cli-runner/helpers.js +3 -3
- package/dist/agents/cli-runner.js +3 -3
- package/dist/agents/compaction.js +3 -0
- 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/live-auth-keys.js +2 -2
- package/dist/agents/memory-search.js +7 -2
- package/dist/agents/minimax-vlm.js +1 -1
- package/dist/agents/model-auth.js +1 -1
- package/dist/agents/model-catalog.js +23 -5
- package/dist/agents/model-fallback.js +22 -0
- package/dist/agents/model-selection.js +9 -2
- package/dist/agents/models-config.js +3 -3
- package/dist/agents/models-config.providers.js +4 -4
- package/dist/agents/{pigbot-tools.js → moltbot-tools.js} +7 -6
- package/dist/agents/pi-embedded-helpers/errors.js +23 -1
- 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 +5 -0
- package/dist/agents/pi-embedded-runner/model.js +9 -3
- package/dist/agents/pi-embedded-runner/run/attempt.js +10 -6
- package/dist/agents/pi-embedded-runner/run.js +5 -5
- package/dist/agents/pi-embedded-runner/sandbox-info.js +1 -4
- package/dist/agents/pi-embedded-runner/session-manager-cache.js +1 -1
- package/dist/agents/pi-embedded-runner/utils.js +1 -1
- package/dist/agents/pi-embedded-subscribe.raw-stream.js +2 -2
- package/dist/agents/pi-embedded-utils.js +7 -1
- package/dist/agents/pi-extensions/compaction-safeguard-runtime.js +20 -0
- package/dist/agents/pi-extensions/compaction-safeguard.js +32 -3
- package/dist/agents/pi-tools.js +26 -15
- package/dist/agents/pi-tools.policy.js +34 -1
- package/dist/agents/pi-tools.read.js +2 -2
- package/dist/agents/sandbox/browser.js +10 -12
- package/dist/agents/sandbox/config.js +0 -12
- package/dist/agents/sandbox/constants.js +8 -8
- 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 +68 -0
- package/dist/agents/skills/bundled-dir.js +1 -1
- package/dist/agents/skills/config.js +9 -8
- package/dist/agents/skills/env-overrides.js +1 -1
- package/dist/agents/skills/frontmatter.js +15 -14
- 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 +21 -32
- package/dist/agents/tool-images.js +1 -1
- package/dist/agents/tool-policy.js +8 -2
- package/dist/agents/tools/agents-list-tool.js +3 -1
- package/dist/agents/tools/browser-tool.js +19 -79
- package/dist/agents/tools/browser-tool.schema.js +1 -2
- package/dist/agents/tools/cron-tool.js +44 -1
- package/dist/agents/tools/discord-actions-guild.js +5 -1
- package/dist/agents/tools/image-tool.js +2 -2
- package/dist/agents/tools/message-tool.js +13 -1
- package/dist/agents/tools/sessions-send-helpers.js +17 -2
- package/dist/agents/tools/sessions-spawn-tool.js +1 -1
- package/dist/agents/tools/telegram-actions.js +95 -1
- package/dist/agents/tools/web-fetch.js +123 -103
- package/dist/agents/tools/web-search.js +7 -7
- package/dist/agents/workspace.js +37 -1
- package/dist/auto-reply/chunk.js +71 -26
- package/dist/auto-reply/commands-registry.data.js +73 -22
- package/dist/auto-reply/commands-registry.js +14 -11
- package/dist/auto-reply/heartbeat.js +3 -0
- package/dist/auto-reply/model.js +1 -1
- package/dist/auto-reply/reply/agent-runner-execution.js +21 -3
- package/dist/auto-reply/reply/agent-runner-memory.js +5 -0
- package/dist/auto-reply/reply/bash-command.js +2 -2
- package/dist/auto-reply/reply/block-streaming.js +8 -15
- package/dist/auto-reply/reply/commands-context-report.js +2 -2
- package/dist/auto-reply/reply/commands-info.js +50 -5
- package/dist/auto-reply/reply/commands-plugin.js +4 -2
- package/dist/auto-reply/reply/commands-session.js +4 -4
- package/dist/auto-reply/reply/commands-tts.js +61 -63
- package/dist/auto-reply/reply/directive-handling.shared.js +1 -1
- package/dist/auto-reply/reply/directives.js +12 -1
- package/dist/auto-reply/reply/dispatch-from-config.js +68 -22
- package/dist/auto-reply/reply/followup-runner.js +5 -0
- package/dist/auto-reply/reply/get-reply-inline-actions.js +2 -2
- package/dist/auto-reply/reply/get-reply-run.js +4 -0
- package/dist/auto-reply/reply/get-reply.js +1 -1
- package/dist/auto-reply/reply/groups.js +1 -1
- package/dist/auto-reply/reply/history.js +23 -0
- package/dist/auto-reply/reply/line-directives.js +294 -0
- package/dist/auto-reply/reply/normalize-reply.js +13 -5
- package/dist/auto-reply/reply/reply-elevated.js +1 -1
- package/dist/auto-reply/reply/reply-payloads.js +2 -1
- package/dist/auto-reply/reply/route-reply.js +1 -1
- package/dist/auto-reply/reply/session-updates.js +6 -1
- package/dist/auto-reply/reply/stage-sandbox-media.js +1 -1
- package/dist/auto-reply/status.js +144 -42
- package/dist/auto-reply/thinking.js +13 -0
- package/dist/browser/bridge-server.js +1 -3
- package/dist/browser/client-actions-core.js +13 -7
- package/dist/browser/client-actions-observe.js +14 -8
- package/dist/browser/client-actions-state.js +21 -15
- package/dist/browser/client-fetch.js +74 -61
- package/dist/browser/client.js +19 -21
- package/dist/browser/config.js +13 -26
- package/dist/browser/constants.js +1 -1
- package/dist/browser/control-service.js +72 -0
- package/dist/browser/extension-relay.js +3 -3
- package/dist/browser/pw-session.js +41 -4
- 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 +13 -0
- package/dist/browser/routes/agent.debug.js +1 -1
- package/dist/browser/routes/basic.js +0 -1
- package/dist/browser/routes/dispatcher.js +86 -0
- package/dist/browser/server-context.js +3 -3
- package/dist/browser/server.js +7 -9
- package/dist/build-info.json +2 -2
- package/dist/canvas-host/a2ui/.bundle.hash +1 -0
- package/dist/canvas-host/a2ui/a2ui.bundle.js +1620 -1618
- package/dist/canvas-host/a2ui/index.html +28 -28
- package/dist/canvas-host/a2ui.js +27 -21
- package/dist/canvas-host/server.js +67 -33
- package/dist/channels/plugins/actions/discord/handle-action.guild-admin.js +5 -1
- package/dist/channels/plugins/actions/telegram.js +62 -7
- package/dist/channels/plugins/catalog.js +7 -5
- package/dist/channels/plugins/group-mentions.js +48 -1
- package/dist/channels/plugins/helpers.js +2 -2
- package/dist/channels/plugins/message-action-names.js +1 -0
- package/dist/channels/plugins/normalize/imessage.js +36 -0
- 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 +17 -9
- package/dist/channels/plugins/onboarding/whatsapp.js +4 -4
- package/dist/channels/plugins/outbound/telegram.js +40 -0
- 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 +14 -7
- package/dist/cli/banner.js +3 -1
- package/dist/cli/browser-cli-actions-input/register.element.js +72 -44
- package/dist/cli/browser-cli-actions-input/register.files-downloads.js +55 -35
- package/dist/cli/browser-cli-actions-input/register.form-wait-eval.js +41 -28
- package/dist/cli/browser-cli-actions-input/register.navigation.js +23 -14
- package/dist/cli/browser-cli-actions-input/shared.js +10 -3
- package/dist/cli/browser-cli-actions-observe.js +29 -21
- package/dist/cli/browser-cli-debug.js +49 -35
- 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 +23 -17
- package/dist/cli/browser-cli-manage.js +106 -56
- package/dist/cli/browser-cli-shared.js +34 -1
- package/dist/cli/browser-cli-state.cookies-storage.js +53 -39
- package/dist/cli/browser-cli-state.js +90 -64
- package/dist/cli/browser-cli.js +4 -5
- package/dist/cli/channel-options.js +1 -1
- package/dist/cli/channels-cli.js +1 -1
- package/dist/cli/cli-name.js +26 -0
- package/dist/cli/command-format.js +12 -8
- package/dist/cli/config-cli.js +2 -2
- package/dist/cli/cron-cli/register.js +1 -1
- package/dist/cli/daemon-cli/install.js +3 -2
- package/dist/cli/daemon-cli/register.js +1 -1
- package/dist/cli/daemon-cli/shared.js +13 -11
- package/dist/cli/daemon-cli/status.gather.js +2 -2
- package/dist/cli/daemon-cli/status.print.js +8 -8
- 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 +5 -5
- package/dist/cli/gateway-cli/register.js +1 -1
- package/dist/cli/gateway-cli/run.js +19 -16
- package/dist/cli/gateway-cli/shared.js +5 -5
- 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 +3 -3
- package/dist/cli/node-cli/register.js +1 -1
- package/dist/cli/nodes-camera.js +3 -1
- package/dist/cli/nodes-canvas.js +3 -1
- 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 +9 -9
- package/dist/cli/program/config-guard.js +1 -1
- package/dist/cli/program/help.js +15 -16
- package/dist/cli/program/message/register.send.js +2 -1
- package/dist/cli/program/preaction.js +5 -3
- 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 +5 -3
- package/dist/cli/program/register.setup.js +2 -2
- package/dist/cli/program/register.status-health-sessions.js +13 -13
- package/dist/cli/program/register.subclis.js +2 -2
- package/dist/cli/route.js +1 -1
- package/dist/cli/run-main.js +11 -4
- package/dist/cli/sandbox-cli.js +19 -19
- package/dist/cli/security-cli.js +18 -8
- package/dist/cli/skills-cli.js +3 -3
- package/dist/cli/system-cli.js +1 -1
- package/dist/cli/tagline.js +2 -2
- package/dist/cli/tui-cli.js +1 -1
- package/dist/cli/update-cli.js +64 -48
- package/dist/cli/webhooks-cli.js +6 -6
- package/dist/commands/agent-via-gateway.js +1 -1
- package/dist/commands/agent.js +2 -1
- package/dist/commands/agents.command-shared.js +1 -1
- package/dist/commands/agents.commands.add.js +2 -3
- package/dist/commands/agents.commands.list.js +1 -1
- package/dist/commands/auth-choice-options.js +4 -54
- package/dist/commands/auth-choice.apply.anthropic.js +6 -109
- package/dist/commands/auth-choice.apply.openai.js +1 -33
- 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.daemon.js +10 -2
- package/dist/commands/configure.gateway-auth.js +1 -8
- package/dist/commands/configure.gateway.js +1 -10
- package/dist/commands/configure.wizard.js +21 -21
- package/dist/commands/daemon-install-helpers.js +10 -3
- package/dist/commands/dashboard.js +2 -2
- package/dist/commands/docs.js +5 -5
- package/dist/commands/doctor-auth.js +122 -3
- package/dist/commands/doctor-config-flow.js +7 -7
- package/dist/commands/doctor-format.js +5 -5
- package/dist/commands/doctor-gateway-daemon-flow.js +5 -4
- package/dist/commands/doctor-gateway-services.js +7 -5
- package/dist/commands/doctor-platform-notes.js +7 -7
- package/dist/commands/doctor-security.js +48 -1
- package/dist/commands/doctor-state-integrity.js +3 -3
- package/dist/commands/doctor-ui.js +2 -2
- package/dist/commands/doctor-update.js +5 -5
- package/dist/commands/doctor-workspace-status.js +2 -2
- package/dist/commands/doctor-workspace.js +4 -4
- package/dist/commands/doctor.js +13 -12
- package/dist/commands/gateway-status/helpers.js +2 -2
- package/dist/commands/gateway-status.js +2 -2
- package/dist/commands/health.js +2 -2
- package/dist/commands/models/auth.js +23 -22
- 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 +8 -9
- package/dist/commands/node-daemon-install-helpers.js +1 -1
- 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 +38 -34
- package/dist/commands/onboard-non-interactive/local/daemon-install.js +1 -0
- package/dist/commands/onboard-non-interactive/local/gateway-config.js +7 -4
- 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 +25 -4
- 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 +5 -5
- package/dist/commands/status.command.js +9 -9
- package/dist/commands/status.gateway-probe.js +2 -2
- package/dist/commands/status.scan.js +2 -2
- package/dist/commands/status.update.js +3 -3
- package/dist/commands/uninstall.js +4 -4
- package/dist/compat/legacy-names.js +6 -0
- package/dist/config/config.js +1 -1
- package/dist/config/env-vars.js +21 -0
- package/dist/config/group-policy.js +69 -0
- package/dist/config/io.js +24 -28
- package/dist/config/legacy.migrations.part-3.js +3 -0
- package/dist/config/logging.js +3 -3
- package/dist/config/paths.js +57 -17
- package/dist/config/schema.js +26 -12
- package/dist/config/sessions/store.js +1 -1
- package/dist/config/sessions/transcript.js +1 -1
- package/dist/config/types.clawdbot.js +1 -0
- package/dist/config/types.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 +1 -0
- package/dist/config/zod-schema.agent-runtime.js +39 -7
- package/dist/config/zod-schema.hooks.js +2 -0
- package/dist/config/zod-schema.js +10 -3
- package/dist/config/zod-schema.providers-core.js +24 -0
- package/dist/config/zod-schema.providers-whatsapp.js +3 -0
- package/dist/control-ui/assets/index-BAFzd9IE.css +1 -0
- package/dist/control-ui/assets/index-CxUFDXFX.js +3162 -0
- package/dist/control-ui/assets/index-CxUFDXFX.js.map +1 -0
- package/dist/control-ui/index.html +4 -4
- package/dist/cron/isolated-agent/run.js +38 -3
- package/dist/daemon/constants.js +26 -16
- package/dist/daemon/inspect.js +16 -15
- package/dist/daemon/launchd.js +8 -8
- package/dist/daemon/node-service.js +14 -14
- package/dist/daemon/paths.js +3 -3
- package/dist/daemon/program-args.js +1 -1
- package/dist/daemon/schtasks.js +6 -6
- package/dist/daemon/service-env.js +21 -21
- package/dist/daemon/systemd-hints.js +1 -1
- package/dist/daemon/systemd-unit.js +1 -1
- package/dist/daemon/systemd.js +6 -6
- package/dist/discord/monitor/listeners.js +25 -1
- package/dist/discord/monitor/native-command.js +7 -5
- package/dist/discord/monitor/presence-cache.js +38 -0
- package/dist/discord/monitor/provider.js +21 -7
- package/dist/entry.js +7 -7
- package/dist/gateway/auth.js +55 -22
- package/dist/gateway/call.js +2 -2
- package/dist/gateway/control-ui.js +4 -4
- package/dist/gateway/hooks-mapping.js +18 -4
- package/dist/gateway/hooks.js +5 -7
- package/dist/gateway/http-utils.js +3 -5
- 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/__tests__/test-utils.js +2 -0
- package/dist/gateway/server/health-state.js +3 -3
- package/dist/gateway/server/hooks.js +1 -0
- package/dist/gateway/server/plugins-http.js +23 -2
- package/dist/gateway/server/ws-connection/message-handler.js +66 -19
- package/dist/gateway/server-browser.js +16 -5
- package/dist/gateway/server-chat.js +28 -2
- package/dist/gateway/server-constants.js +2 -2
- package/dist/gateway/server-cron.js +1 -1
- package/dist/gateway/server-discovery-runtime.js +25 -17
- package/dist/gateway/server-discovery.js +7 -7
- package/dist/gateway/server-http.js +13 -7
- package/dist/gateway/server-methods/agent.js +2 -0
- package/dist/gateway/server-methods/browser.js +204 -0
- package/dist/gateway/server-methods/chat.js +5 -0
- 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 +1 -0
- package/dist/gateway/server-methods.js +3 -0
- package/dist/gateway/server-plugins.js +2 -2
- package/dist/gateway/server-reload-handlers.js +5 -5
- package/dist/gateway/server-restart-sentinel.js +10 -5
- package/dist/gateway/server-runtime-config.js +7 -4
- package/dist/gateway/server-startup.js +5 -5
- package/dist/gateway/server.impl.js +17 -7
- package/dist/gateway/session-utils.fs.js +1 -1
- package/dist/gateway/session-utils.js +31 -11
- package/dist/gateway/test-helpers.mocks.js +8 -7
- package/dist/gateway/test-helpers.server.js +51 -32
- package/dist/gateway/tools-invoke-http.js +15 -8
- package/dist/hooks/bundled/boot-md/HOOK.md +3 -3
- package/dist/hooks/bundled/command-logger/HOOK.md +12 -12
- package/dist/hooks/bundled/command-logger/handler.js +1 -1
- 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 +2 -2
- package/dist/hooks/config.js +8 -7
- package/dist/hooks/frontmatter.js +16 -15
- package/dist/hooks/gmail-ops.js +4 -4
- package/dist/hooks/gmail-watcher.js +1 -1
- package/dist/hooks/hooks-status.js +13 -13
- package/dist/hooks/install.js +8 -7
- 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 +10 -9
- package/dist/imessage/monitor/monitor-provider.js +2 -2
- package/dist/imessage/targets.js +19 -0
- package/dist/index.js +4 -4
- package/dist/infra/agent-events.js +3 -0
- package/dist/infra/bonjour-discovery.js +9 -9
- package/dist/infra/bonjour.js +20 -13
- package/dist/infra/device-identity.js +1 -1
- package/dist/infra/diagnostic-flags.js +66 -0
- package/dist/infra/dotenv.js +1 -1
- package/dist/infra/env.js +22 -0
- package/dist/infra/exec-approvals.js +2 -2
- package/dist/infra/fs-safe.js +76 -0
- package/dist/infra/gateway-lock.js +5 -4
- package/dist/infra/heartbeat-visibility.js +14 -0
- package/dist/infra/heartbeat-wake.js +2 -2
- package/dist/infra/machine-name.js +1 -1
- package/dist/infra/{pigbot-root.js → moltbot-root.js} +3 -2
- package/dist/infra/net/ssrf.js +77 -1
- package/dist/infra/node-shell.js +1 -1
- package/dist/infra/outbound/deliver.js +41 -18
- package/dist/infra/outbound/message-action-runner.js +24 -3
- package/dist/infra/outbound/message-action-spec.js +1 -0
- package/dist/infra/outbound/message.js +1 -0
- package/dist/infra/outbound/outbound-policy.js +4 -1
- package/dist/infra/outbound/outbound-send-service.js +10 -0
- package/dist/infra/outbound/payloads.js +15 -5
- package/dist/infra/outbound/target-resolver.js +53 -14
- package/dist/infra/outbound/targets.js +1 -1
- package/dist/infra/path-env.js +9 -9
- package/dist/infra/ports-format.js +2 -2
- package/dist/infra/ports.js +2 -2
- package/dist/infra/provider-usage.auth.js +2 -4
- 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 +4 -4
- package/dist/infra/retry-policy.js +4 -1
- package/dist/infra/runtime-guard.js +2 -2
- package/dist/infra/shell-env.js +4 -4
- package/dist/infra/skills-remote.js +3 -3
- package/dist/infra/state-migrations.js +1 -1
- package/dist/infra/system-presence.js +1 -1
- package/dist/infra/tailscale.js +63 -1
- package/dist/infra/tls/gateway.js +1 -1
- package/dist/infra/unhandled-rejections.js +89 -2
- package/dist/infra/update-check.js +2 -4
- package/dist/infra/update-global.js +5 -5
- package/dist/infra/update-runner.js +32 -8
- 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/accounts.js +130 -0
- package/dist/line/auto-reply-delivery.js +102 -0
- package/dist/line/bot-access.js +38 -0
- package/dist/line/bot-handlers.js +258 -0
- package/dist/line/bot-message-context.js +374 -0
- package/dist/line/bot.js +48 -0
- package/dist/line/config-schema.js +47 -0
- package/dist/line/download.js +95 -0
- package/dist/line/flex-templates.js +1264 -0
- package/dist/line/http-registry.js +27 -0
- package/dist/line/index.js +19 -0
- package/dist/line/markdown-to-line.js +346 -0
- package/dist/line/monitor.js +266 -0
- package/dist/line/probe.js +37 -0
- package/dist/line/reply-chunks.js +53 -0
- package/dist/line/rich-menu.js +320 -0
- package/dist/line/send.js +451 -0
- package/dist/line/signature.js +11 -0
- package/dist/line/template-messages.js +258 -0
- package/dist/line/types.js +1 -0
- package/dist/line/webhook.js +71 -0
- package/dist/link-understanding/apply.js +22 -0
- package/dist/link-understanding/defaults.js +2 -0
- package/dist/link-understanding/detect.js +49 -0
- package/dist/link-understanding/format.js +10 -0
- package/dist/link-understanding/index.js +4 -0
- package/dist/link-understanding/runner.js +99 -0
- package/dist/logging/logger.js +4 -4
- package/dist/macos/gateway-daemon.js +7 -7
- package/dist/macos/relay-smoke.js +1 -1
- package/dist/macos/relay.js +6 -6
- package/dist/media/host.js +1 -1
- package/dist/media/image-ops.js +3 -3
- package/dist/media/input-files.js +40 -32
- package/dist/media/server.js +39 -15
- package/dist/media/store.js +72 -52
- package/dist/media-understanding/attachments.js +1 -1
- package/dist/media-understanding/providers/image.js +2 -2
- package/dist/media-understanding/runner.js +69 -1
- package/dist/memory/batch-gemini.js +2 -2
- package/dist/memory/batch-openai.js +1 -1
- package/dist/memory/embeddings-gemini.js +1 -1
- package/dist/memory/embeddings.js +1 -1
- package/dist/node-host/runner.js +64 -60
- package/dist/pairing/pairing-messages.js +2 -2
- package/dist/plugin-sdk/index.js +12 -2
- package/dist/plugins/bundled-dir.js +1 -1
- package/dist/plugins/cli.js +2 -2
- package/dist/plugins/commands.js +1 -1
- package/dist/plugins/discovery.js +6 -5
- package/dist/plugins/http-path.js +10 -0
- package/dist/plugins/http-registry.js +31 -0
- package/dist/plugins/install.js +8 -7
- package/dist/plugins/loader.js +11 -4
- package/dist/plugins/manifest-registry.js +4 -4
- package/dist/plugins/manifest.js +16 -1
- package/dist/plugins/providers.js +2 -2
- package/dist/plugins/registry.js +36 -5
- package/dist/plugins/runtime/index.js +26 -0
- package/dist/plugins/runtime.js +2 -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/process/exec.js +11 -7
- package/dist/process/spawn-utils.js +95 -0
- package/dist/providers/qwen-portal-oauth.js +1 -1
- package/dist/routing/session-key.js +17 -12
- package/dist/security/audit-extra.js +120 -70
- package/dist/security/audit-fs.js +78 -0
- package/dist/security/audit.js +145 -87
- package/dist/security/external-content.js +143 -0
- package/dist/security/fix.js +93 -8
- package/dist/security/windows-acl.js +162 -0
- package/dist/shared/text/reasoning-tags.js +48 -0
- package/dist/slack/monitor/media.js +32 -4
- package/dist/slack/monitor/message-handler/dispatch.js +2 -1
- package/dist/slack/monitor/slash.js +3 -3
- package/dist/slack/monitor.test-helpers.js +1 -1
- package/dist/telegram/accounts.js +1 -1
- package/dist/telegram/api-logging.js +24 -0
- package/dist/telegram/bot/delivery.js +218 -28
- package/dist/telegram/bot/helpers.js +29 -19
- package/dist/telegram/bot-handlers.js +70 -8
- package/dist/telegram/bot-message-context.js +83 -22
- package/dist/telegram/bot-message-dispatch.js +69 -0
- package/dist/telegram/bot-native-commands.js +245 -94
- package/dist/telegram/bot.js +18 -2
- package/dist/telegram/fetch.js +25 -1
- package/dist/telegram/monitor.js +11 -3
- package/dist/telegram/network-config.js +23 -0
- package/dist/telegram/network-errors.js +103 -0
- package/dist/telegram/send.js +229 -41
- package/dist/telegram/sticker-cache.js +202 -0
- package/dist/telegram/webhook-set.js +13 -6
- package/dist/telegram/webhook.js +8 -3
- package/dist/terminal/links.js +1 -1
- package/dist/tts/tts.js +128 -25
- package/dist/tui/components/filterable-select-list.js +1 -1
- package/dist/tui/components/searchable-select-list.js +2 -1
- package/dist/tui/gateway-chat.js +3 -3
- package/dist/tui/tui.js +1 -1
- package/dist/utils.js +3 -3
- package/dist/version.js +3 -3
- 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 +22 -21
- package/dist/wizard/onboarding.gateway-config.js +1 -11
- package/dist/wizard/onboarding.js +24 -13
- package/docs/CNAME +1 -1
- package/docs/_config.yml +2 -2
- package/docs/_layouts/default.html +9 -9
- package/docs/assets/terminal.css +3 -0
- package/docs/assets/theme.js +1 -1
- package/docs/automation/auth-monitoring.md +7 -7
- package/docs/automation/cron-jobs.md +19 -19
- package/docs/automation/cron-vs-heartbeat.md +8 -8
- package/docs/automation/gmail-pubsub.md +27 -25
- package/docs/automation/poll.md +7 -7
- package/docs/automation/webhook.md +13 -8
- package/docs/bedrock.md +10 -10
- package/docs/brave-search.md +1 -1
- package/docs/broadcast-groups.md +4 -4
- package/docs/channels/bluebubbles.md +14 -12
- package/docs/channels/discord.md +23 -18
- package/docs/channels/googlechat.md +16 -16
- package/docs/channels/grammy.md +1 -1
- package/docs/channels/imessage.md +14 -14
- package/docs/channels/index.md +6 -4
- package/docs/channels/line.md +183 -0
- package/docs/channels/location.md +1 -1
- package/docs/channels/matrix.md +16 -16
- package/docs/channels/mattermost.md +8 -8
- package/docs/channels/msteams.md +31 -27
- package/docs/channels/nextcloud-talk.md +8 -8
- package/docs/channels/nostr.md +9 -9
- package/docs/channels/signal.md +11 -11
- package/docs/channels/slack.md +31 -29
- package/docs/channels/telegram.md +152 -22
- package/docs/channels/tlon.md +5 -5
- package/docs/channels/troubleshooting.md +2 -2
- package/docs/channels/twitch.md +366 -0
- package/docs/channels/whatsapp.md +26 -26
- 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 +14 -14
- package/docs/cli/browser.md +33 -35
- 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 +11 -11
- package/docs/cli/gateway.md +26 -26
- package/docs/cli/health.md +5 -5
- package/docs/cli/hooks.md +34 -34
- package/docs/cli/index.md +46 -52
- 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 +14 -14
- package/docs/cli/nodes.md +14 -14
- package/docs/cli/onboard.md +7 -6
- 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 +21 -21
- package/docs/concepts/agent.md +12 -12
- package/docs/concepts/architecture.md +2 -2
- package/docs/concepts/channel-routing.md +4 -4
- package/docs/concepts/compaction.md +5 -5
- package/docs/concepts/context.md +6 -6
- package/docs/concepts/group-messages.md +6 -6
- package/docs/concepts/groups.md +41 -5
- package/docs/concepts/markdown-formatting.md +3 -3
- package/docs/concepts/memory.md +14 -14
- package/docs/concepts/messages.md +4 -4
- package/docs/concepts/model-failover.md +14 -14
- package/docs/concepts/model-providers.md +22 -22
- package/docs/concepts/models.md +27 -27
- package/docs/concepts/multi-agent.md +19 -19
- package/docs/concepts/oauth.md +32 -59
- 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 +14 -14
- package/docs/concepts/streaming.md +4 -4
- package/docs/concepts/system-prompt.md +11 -11
- package/docs/concepts/timezone.md +2 -2
- package/docs/concepts/typebox.md +3 -3
- 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 +18 -18
- package/docs/diagnostics/flags.md +89 -0
- package/docs/docs.json +37 -7
- package/docs/environment.md +7 -7
- 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 +33 -57
- package/docs/gateway/background-process.md +2 -2
- package/docs/gateway/bonjour.md +25 -25
- package/docs/gateway/bridge-protocol.md +2 -2
- package/docs/gateway/cli-backends.md +13 -12
- package/docs/gateway/configuration-examples.md +14 -14
- package/docs/gateway/configuration.md +160 -145
- package/docs/gateway/discovery.md +10 -10
- package/docs/gateway/doctor.md +27 -27
- package/docs/gateway/gateway-lock.md +1 -1
- package/docs/gateway/health.md +11 -11
- package/docs/gateway/heartbeat.md +5 -5
- package/docs/gateway/index.md +65 -65
- package/docs/gateway/local-models.md +2 -2
- package/docs/gateway/logging.md +8 -8
- package/docs/gateway/multiple-gateways.md +27 -27
- package/docs/gateway/openai-http-api.md +12 -12
- package/docs/gateway/openresponses-http-api.md +12 -12
- package/docs/gateway/pairing.md +9 -9
- package/docs/gateway/protocol.md +6 -5
- package/docs/gateway/remote-gateway-readme.md +16 -14
- package/docs/gateway/remote.md +5 -5
- package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +10 -7
- package/docs/gateway/sandboxing.md +8 -6
- package/docs/gateway/security/formal-verification.md +107 -0
- package/docs/gateway/{security.md → security/index.md} +172 -75
- package/docs/gateway/tailscale.md +19 -38
- package/docs/gateway/tools-invoke-http-api.md +5 -5
- package/docs/gateway/troubleshooting.md +114 -119
- package/docs/help/faq.md +369 -355
- package/docs/help/troubleshooting.md +16 -16
- package/docs/hooks/soul-evil.md +2 -2
- package/docs/hooks.md +60 -60
- package/docs/index.md +35 -35
- package/docs/install/ansible.md +35 -35
- package/docs/install/development-channels.md +10 -10
- package/docs/install/docker.md +44 -44
- package/docs/install/index.md +34 -33
- package/docs/install/installer.md +24 -24
- package/docs/install/migrating.md +190 -0
- package/docs/install/nix.md +18 -18
- package/docs/install/node.md +7 -6
- package/docs/install/uninstall.md +30 -30
- package/docs/install/updating.md +50 -49
- package/docs/logging.md +82 -58
- package/docs/multi-agent-sandbox-tools.md +7 -7
- 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 +57 -57
- 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 +2 -2
- package/docs/northflank.mdx +53 -0
- package/docs/perplexity.md +2 -2
- package/docs/platforms/android.md +13 -13
- package/docs/platforms/digitalocean.md +243 -0
- package/docs/platforms/exe-dev.md +25 -25
- package/docs/platforms/fly.md +149 -24
- package/docs/platforms/gcp.md +498 -0
- package/docs/platforms/hetzner.md +42 -42
- package/docs/platforms/index.md +9 -9
- package/docs/platforms/ios.md +13 -13
- package/docs/platforms/linux.md +11 -11
- package/docs/platforms/mac/bundled-gateway.md +16 -16
- package/docs/platforms/mac/canvas.md +14 -14
- package/docs/platforms/mac/child-process.md +9 -9
- package/docs/platforms/mac/dev-setup.md +11 -11
- package/docs/platforms/mac/health.md +2 -2
- package/docs/platforms/mac/icon.md +1 -1
- package/docs/platforms/mac/logging.md +7 -7
- package/docs/platforms/mac/menu-bar.md +1 -1
- package/docs/platforms/mac/peekaboo.md +9 -9
- package/docs/platforms/mac/permissions.md +3 -3
- package/docs/platforms/mac/release.md +20 -20
- package/docs/platforms/mac/remote.md +14 -14
- package/docs/platforms/mac/signing.md +7 -7
- package/docs/platforms/mac/skills.md +4 -4
- package/docs/platforms/mac/voice-overlay.md +2 -2
- package/docs/platforms/mac/webchat.md +2 -2
- package/docs/platforms/mac/xpc.md +4 -4
- package/docs/platforms/macos-vm.md +27 -27
- package/docs/platforms/macos.md +20 -20
- package/docs/platforms/oracle.md +291 -0
- package/docs/platforms/raspberry-pi.md +354 -0
- package/docs/platforms/windows.md +11 -11
- package/docs/plugin.md +80 -64
- package/docs/plugins/agent-tools.md +1 -1
- package/docs/plugins/manifest.md +4 -4
- package/docs/plugins/voice-call.md +96 -12
- package/docs/plugins/zalouser.md +9 -9
- package/docs/prose.md +9 -9
- package/docs/providers/anthropic.md +23 -27
- package/docs/providers/claude-max-api-proxy.md +145 -0
- 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 +7 -3
- 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 +9 -13
- 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 +5 -4
- package/docs/providers/zai.md +5 -5
- package/docs/railway.mdx +9 -7
- package/docs/refactor/exec-host.md +5 -5
- package/docs/refactor/plugin-sdk.md +12 -12
- package/docs/refactor/strict-config.md +11 -11
- package/docs/reference/AGENTS.default.md +10 -10
- package/docs/reference/RELEASING.md +29 -29
- 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 +19 -19
- package/docs/reference/templates/AGENTS.dev.md +1 -1
- package/docs/reference/templates/BOOT.md +1 -1
- package/docs/reference/templates/IDENTITY.md +27 -0
- package/docs/reference/templates/TOOLS.dev.md +1 -1
- package/docs/reference/templates/USER.dev.md +2 -2
- package/docs/reference/templates/USER.md +22 -0
- package/docs/reference/test.md +2 -2
- package/docs/reference/transcript-hygiene.md +1 -1
- package/docs/render.mdx +158 -0
- package/docs/scripts.md +1 -1
- package/docs/security/formal-verification.md +107 -0
- package/docs/start/clawd.md +29 -29
- package/docs/start/getting-started.md +31 -25
- package/docs/start/hubs.md +2 -2
- package/docs/start/lore.md +74 -38
- package/docs/start/onboarding.md +7 -7
- package/docs/start/pairing.md +10 -10
- package/docs/start/setup.md +30 -17
- package/docs/start/showcase.md +32 -32
- package/docs/start/wizard.md +29 -26
- package/docs/testing.md +56 -56
- package/docs/token-use.md +7 -7
- package/docs/tools/agent-send.md +10 -10
- package/docs/tools/browser-linux-troubleshooting.md +10 -10
- package/docs/tools/browser-login.md +4 -4
- package/docs/tools/browser.md +136 -242
- package/docs/tools/chrome-extension.md +31 -48
- package/docs/tools/clawdhub.md +7 -7
- package/docs/tools/creating-skills.md +41 -0
- package/docs/tools/elevated.md +1 -0
- package/docs/tools/exec-approvals.md +8 -5
- package/docs/tools/exec.md +15 -4
- package/docs/tools/firecrawl.md +2 -2
- package/docs/tools/index.md +18 -15
- package/docs/tools/llm-task.md +1 -1
- package/docs/tools/lobster.md +23 -11
- package/docs/tools/skills-config.md +2 -2
- package/docs/tools/skills.md +39 -31
- package/docs/tools/slash-commands.md +10 -8
- package/docs/tools/web.md +8 -8
- package/docs/tts.md +11 -11
- package/docs/tui.md +7 -7
- package/docs/vps.md +6 -1
- package/docs/web/control-ui.md +15 -14
- package/docs/web/dashboard.md +10 -6
- package/docs/web/index.md +7 -6
- package/docs/web/webchat.md +1 -1
- package/extensions/bluebubbles/index.ts +3 -3
- package/extensions/bluebubbles/package.json +5 -5
- package/extensions/bluebubbles/src/accounts.ts +9 -9
- package/extensions/bluebubbles/src/actions.test.ts +22 -22
- package/extensions/bluebubbles/src/actions.ts +6 -6
- package/extensions/bluebubbles/src/attachments.ts +2 -2
- package/extensions/bluebubbles/src/channel.ts +71 -17
- package/extensions/bluebubbles/src/chat.ts +2 -2
- package/extensions/bluebubbles/src/config-schema.ts +1 -1
- package/extensions/bluebubbles/src/media-send.ts +2 -2
- package/extensions/bluebubbles/src/monitor.test.ts +56 -50
- package/extensions/bluebubbles/src/monitor.ts +181 -6
- package/extensions/bluebubbles/src/onboarding.ts +9 -9
- package/extensions/bluebubbles/src/reactions.ts +2 -2
- package/extensions/bluebubbles/src/runtime.ts +1 -1
- package/extensions/bluebubbles/src/send.test.ts +94 -2
- package/extensions/bluebubbles/src/send.ts +73 -7
- package/extensions/copilot-proxy/README.md +3 -3
- package/extensions/copilot-proxy/index.ts +1 -1
- package/extensions/copilot-proxy/package.json +4 -4
- package/extensions/diagnostics-otel/index.ts +3 -3
- package/extensions/diagnostics-otel/package.json +4 -4
- package/extensions/diagnostics-otel/src/service.test.ts +15 -15
- package/extensions/diagnostics-otel/src/service.ts +85 -85
- package/extensions/discord/index.ts +3 -3
- package/extensions/discord/package.json +4 -4
- package/extensions/discord/src/channel.ts +1 -1
- package/extensions/discord/src/runtime.ts +1 -1
- package/extensions/google-antigravity-auth/README.md +3 -3
- package/extensions/google-antigravity-auth/index.ts +9 -2
- package/extensions/google-antigravity-auth/package.json +4 -4
- package/extensions/google-gemini-cli-auth/README.md +17 -6
- package/extensions/google-gemini-cli-auth/index.ts +3 -3
- package/extensions/google-gemini-cli-auth/oauth.test.ts +228 -0
- package/extensions/google-gemini-cli-auth/oauth.ts +96 -12
- package/extensions/google-gemini-cli-auth/package.json +4 -4
- package/extensions/googlechat/index.ts +4 -4
- package/extensions/googlechat/package.json +7 -7
- package/extensions/googlechat/src/accounts.ts +9 -9
- package/extensions/googlechat/src/actions.ts +8 -8
- package/extensions/googlechat/src/api.ts +1 -1
- package/extensions/googlechat/src/channel.ts +23 -23
- package/extensions/googlechat/src/monitor.ts +9 -9
- package/extensions/googlechat/src/onboarding.ts +11 -11
- package/extensions/googlechat/src/runtime.ts +1 -1
- package/extensions/googlechat/src/types.config.ts +1 -1
- package/extensions/imessage/index.ts +3 -3
- package/extensions/imessage/package.json +4 -4
- package/extensions/imessage/src/channel.ts +5 -8
- package/extensions/imessage/src/runtime.ts +1 -1
- package/extensions/line/clawdbot.plugin.json +11 -0
- package/extensions/line/index.ts +20 -0
- package/extensions/line/package.json +29 -0
- package/extensions/line/src/card-command.ts +338 -0
- package/extensions/line/src/channel.logout.test.ts +96 -0
- package/extensions/line/src/channel.sendPayload.test.ts +308 -0
- package/extensions/line/src/channel.ts +773 -0
- package/extensions/line/src/runtime.ts +14 -0
- package/extensions/llm-task/README.md +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/README.md +6 -6
- package/extensions/lobster/index.ts +2 -2
- package/extensions/lobster/package.json +3 -3
- package/extensions/lobster/src/lobster-tool.test.ts +26 -6
- package/extensions/lobster/src/lobster-tool.ts +24 -6
- package/extensions/matrix/CHANGELOG.md +9 -9
- package/extensions/matrix/index.ts +3 -3
- package/extensions/matrix/node_modules/.bin/markdown-it +2 -2
- package/extensions/matrix/node_modules/.bin/markdown-it.CMD +2 -2
- package/extensions/matrix/node_modules/.bin/markdown-it.ps1 +2 -2
- package/extensions/matrix/package.json +7 -7
- package/extensions/matrix/src/actions.ts +1 -1
- package/extensions/matrix/src/channel.directory.test.ts +1 -1
- package/extensions/matrix/src/channel.ts +1 -1
- package/extensions/matrix/src/config-schema.ts +1 -1
- package/extensions/matrix/src/directory-live.ts +1 -1
- package/extensions/matrix/src/group-mentions.ts +1 -1
- package/extensions/matrix/src/matrix/accounts.ts +1 -1
- package/extensions/matrix/src/matrix/actions/client.ts +1 -1
- 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 +5 -5
- package/extensions/matrix/src/matrix/monitor/allowlist.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/auto-join.ts +4 -4
- package/extensions/matrix/src/matrix/monitor/direct.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/events.ts +2 -2
- package/extensions/matrix/src/matrix/monitor/handler.ts +15 -11
- package/extensions/matrix/src/matrix/monitor/index.ts +2 -2
- package/extensions/matrix/src/matrix/monitor/location.ts +2 -2
- package/extensions/matrix/src/matrix/monitor/media.test.ts +41 -5
- package/extensions/matrix/src/matrix/monitor/media.ts +17 -14
- package/extensions/matrix/src/matrix/monitor/replies.ts +2 -2
- package/extensions/matrix/src/matrix/monitor/room-info.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/rooms.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/threads.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/types.ts +2 -1
- package/extensions/matrix/src/matrix/poll-types.ts +1 -1
- package/extensions/matrix/src/matrix/probe.ts +1 -1
- package/extensions/matrix/src/matrix/send/client.ts +3 -3
- 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 +3 -3
- package/extensions/matrix/src/matrix/send.ts +4 -4
- package/extensions/matrix/src/onboarding.ts +3 -3
- package/extensions/matrix/src/outbound.ts +1 -1
- package/extensions/matrix/src/resolve-targets.ts +1 -1
- package/extensions/matrix/src/runtime.ts +1 -1
- package/extensions/matrix/src/tool-actions.ts +1 -1
- package/extensions/matrix/src/types.ts +1 -1
- package/extensions/mattermost/index.ts +3 -3
- package/extensions/mattermost/package.json +5 -5
- package/extensions/mattermost/src/channel.ts +1 -1
- package/extensions/mattermost/src/config-schema.ts +1 -1
- package/extensions/mattermost/src/group-mentions.ts +2 -2
- package/extensions/mattermost/src/mattermost/accounts.ts +10 -10
- package/extensions/mattermost/src/mattermost/client.ts +1 -1
- package/extensions/mattermost/src/mattermost/monitor-helpers.ts +6 -6
- package/extensions/mattermost/src/mattermost/monitor.ts +4 -4
- package/extensions/mattermost/src/mattermost/probe.ts +1 -1
- package/extensions/mattermost/src/onboarding-helpers.ts +5 -5
- package/extensions/mattermost/src/onboarding.ts +5 -5
- package/extensions/mattermost/src/runtime.ts +1 -1
- package/extensions/mattermost/src/types.ts +1 -1
- package/extensions/memory-core/index.ts +3 -3
- package/extensions/memory-core/package.json +9 -6
- package/extensions/memory-lancedb/{pigbot.plugin.json → clawdbot.plugin.json} +1 -1
- package/extensions/memory-lancedb/config.ts +2 -2
- package/extensions/memory-lancedb/index.test.ts +3 -3
- package/extensions/memory-lancedb/index.ts +4 -4
- package/extensions/memory-lancedb/node_modules/.bin/openai +2 -2
- package/extensions/memory-lancedb/node_modules/.bin/openai.CMD +2 -2
- package/extensions/memory-lancedb/node_modules/.bin/openai.ps1 +2 -2
- package/extensions/memory-lancedb/package.json +4 -4
- package/extensions/msteams/CHANGELOG.md +7 -7
- package/extensions/msteams/index.ts +3 -3
- package/extensions/msteams/package.json +6 -6
- package/extensions/msteams/src/attachments.test.ts +1 -1
- package/extensions/msteams/src/channel.directory.test.ts +2 -2
- package/extensions/msteams/src/channel.ts +3 -3
- package/extensions/msteams/src/conversation-store-fs.test.ts +5 -5
- package/extensions/msteams/src/directory-live.ts +1 -1
- package/extensions/msteams/src/graph-upload.ts +4 -4
- package/extensions/msteams/src/media-helpers.ts +1 -1
- package/extensions/msteams/src/messenger.test.ts +1 -1
- package/extensions/msteams/src/messenger.ts +1 -1
- package/extensions/msteams/src/monitor-handler/message-handler.ts +1 -1
- package/extensions/msteams/src/monitor-handler.ts +2 -2
- package/extensions/msteams/src/monitor.ts +3 -3
- package/extensions/msteams/src/onboarding.ts +11 -11
- package/extensions/msteams/src/outbound.ts +1 -1
- package/extensions/msteams/src/policy.test.ts +1 -1
- package/extensions/msteams/src/policy.ts +50 -5
- package/extensions/msteams/src/polls-store.test.ts +1 -1
- package/extensions/msteams/src/polls.test.ts +5 -5
- package/extensions/msteams/src/polls.ts +8 -8
- package/extensions/msteams/src/probe.test.ts +1 -1
- package/extensions/msteams/src/probe.ts +1 -1
- package/extensions/msteams/src/reply-dispatcher.ts +36 -36
- package/extensions/msteams/src/runtime.ts +1 -1
- package/extensions/msteams/src/send-context.ts +2 -2
- package/extensions/msteams/src/send.ts +5 -5
- package/extensions/msteams/src/token.ts +1 -1
- package/extensions/nextcloud-talk/index.ts +3 -3
- package/extensions/nextcloud-talk/package.json +5 -5
- package/extensions/nextcloud-talk/src/accounts.ts +2 -2
- package/extensions/nextcloud-talk/src/channel.ts +8 -8
- package/extensions/nextcloud-talk/src/config-schema.ts +1 -1
- package/extensions/nextcloud-talk/src/inbound.ts +8 -8
- package/extensions/nextcloud-talk/src/monitor.ts +1 -1
- package/extensions/nextcloud-talk/src/onboarding.ts +2 -2
- package/extensions/nextcloud-talk/src/policy.ts +2 -2
- package/extensions/nextcloud-talk/src/room-info.ts +1 -1
- package/extensions/nextcloud-talk/src/runtime.ts +1 -1
- package/extensions/nextcloud-talk/src/types.ts +1 -1
- package/extensions/nostr/CHANGELOG.md +4 -4
- package/extensions/nostr/README.md +5 -5
- package/extensions/nostr/index.ts +6 -6
- package/extensions/nostr/package.json +6 -6
- package/extensions/nostr/src/channel.ts +2 -2
- package/extensions/nostr/src/config-schema.ts +1 -1
- package/extensions/nostr/src/nostr-state-store.test.ts +8 -8
- package/extensions/nostr/src/runtime.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/examples/28-automated-pr-review.prose +2 -2
- package/extensions/open-prose/skills/prose/prose.md +4 -4
- package/extensions/qwen-portal-auth/README.md +3 -3
- package/extensions/qwen-portal-auth/index.ts +1 -1
- package/extensions/signal/index.ts +3 -3
- package/extensions/signal/package.json +4 -4
- package/extensions/signal/src/channel.ts +1 -1
- package/extensions/signal/src/runtime.ts +1 -1
- package/extensions/slack/index.ts +3 -3
- package/extensions/slack/package.json +4 -4
- package/extensions/slack/src/channel.ts +1 -1
- package/extensions/slack/src/runtime.ts +1 -1
- package/extensions/telegram/index.ts +3 -3
- package/extensions/telegram/package.json +4 -4
- package/extensions/telegram/src/channel.ts +3 -3
- package/extensions/telegram/src/runtime.ts +1 -1
- package/extensions/tlon/README.md +3 -3
- package/extensions/tlon/index.ts +3 -3
- package/extensions/tlon/package.json +5 -5
- package/extensions/tlon/src/channel.ts +15 -15
- package/extensions/tlon/src/config-schema.ts +1 -1
- package/extensions/tlon/src/monitor/discovery.ts +1 -1
- package/extensions/tlon/src/monitor/history.ts +1 -1
- package/extensions/tlon/src/monitor/index.ts +3 -3
- package/extensions/tlon/src/onboarding.ts +4 -4
- package/extensions/tlon/src/runtime.ts +1 -1
- package/extensions/tlon/src/types.ts +3 -3
- package/extensions/tlon/src/urbit/send.ts +19 -6
- package/extensions/twitch/CHANGELOG.md +21 -0
- package/extensions/twitch/README.md +89 -0
- package/extensions/twitch/clawdbot.plugin.json +9 -0
- package/extensions/twitch/index.ts +20 -0
- package/extensions/twitch/package.json +20 -0
- package/extensions/twitch/src/access-control.test.ts +489 -0
- package/extensions/twitch/src/access-control.ts +154 -0
- package/extensions/twitch/src/actions.ts +173 -0
- package/extensions/twitch/src/client-manager-registry.ts +115 -0
- package/extensions/twitch/src/config-schema.ts +82 -0
- package/extensions/twitch/src/config.test.ts +88 -0
- package/extensions/twitch/src/config.ts +116 -0
- package/extensions/twitch/src/monitor.ts +257 -0
- package/extensions/twitch/src/onboarding.test.ts +311 -0
- package/extensions/twitch/src/onboarding.ts +411 -0
- package/extensions/twitch/src/outbound.test.ts +373 -0
- package/extensions/twitch/src/outbound.ts +186 -0
- package/extensions/twitch/src/plugin.test.ts +39 -0
- package/extensions/twitch/src/plugin.ts +274 -0
- package/extensions/twitch/src/probe.test.ts +198 -0
- package/extensions/twitch/src/probe.ts +118 -0
- package/extensions/twitch/src/resolver.ts +137 -0
- package/extensions/twitch/src/runtime.ts +14 -0
- package/extensions/twitch/src/send.test.ts +289 -0
- package/extensions/twitch/src/send.ts +136 -0
- package/extensions/twitch/src/status.test.ts +270 -0
- package/extensions/twitch/src/status.ts +176 -0
- package/extensions/twitch/src/token.test.ts +171 -0
- package/extensions/twitch/src/token.ts +87 -0
- package/extensions/twitch/src/twitch-client.test.ts +574 -0
- package/extensions/twitch/src/twitch-client.ts +277 -0
- package/extensions/twitch/src/types.ts +141 -0
- package/extensions/twitch/src/utils/markdown.ts +92 -0
- package/extensions/twitch/src/utils/twitch.ts +78 -0
- package/extensions/twitch/test/setup.ts +7 -0
- package/extensions/voice-call/CHANGELOG.md +19 -11
- package/extensions/voice-call/README.md +38 -16
- package/extensions/voice-call/{pigbot.plugin.json → clawdbot.plugin.json} +210 -14
- package/extensions/voice-call/index.ts +32 -12
- package/extensions/voice-call/package.json +4 -4
- package/extensions/voice-call/src/cli.ts +1 -1
- package/extensions/voice-call/src/config.test.ts +204 -0
- package/extensions/voice-call/src/config.ts +134 -26
- package/extensions/voice-call/src/core-bridge.ts +16 -8
- package/extensions/voice-call/src/manager/context.ts +0 -1
- package/extensions/voice-call/src/manager/events.ts +0 -1
- package/extensions/voice-call/src/manager/lookup.ts +0 -1
- package/extensions/voice-call/src/manager/outbound.ts +4 -3
- package/extensions/voice-call/src/manager/state.ts +0 -1
- package/extensions/voice-call/src/manager/store.ts +0 -1
- package/extensions/voice-call/src/manager/timers.ts +0 -1
- package/extensions/voice-call/src/manager/twiml.ts +0 -1
- package/extensions/voice-call/src/manager.test.ts +2 -2
- package/extensions/voice-call/src/manager.ts +4 -2
- package/extensions/voice-call/src/media-stream.test.ts +97 -0
- package/extensions/voice-call/src/media-stream.ts +114 -0
- package/extensions/voice-call/src/providers/plivo.test.ts +0 -1
- package/extensions/voice-call/src/providers/stt-openai-realtime.ts +8 -0
- package/extensions/voice-call/src/providers/twilio/webhook.ts +2 -2
- package/extensions/voice-call/src/providers/twilio.ts +44 -26
- package/extensions/voice-call/src/response-generator.ts +1 -1
- package/extensions/voice-call/src/runtime.ts +37 -27
- package/extensions/voice-call/src/telephony-audio.ts +88 -0
- package/extensions/voice-call/src/telephony-tts.ts +95 -0
- package/extensions/voice-call/src/types.ts +1 -0
- package/extensions/voice-call/src/webhook-security.test.ts +52 -0
- package/extensions/voice-call/src/webhook-security.ts +16 -5
- package/extensions/voice-call/src/webhook.ts +11 -0
- package/extensions/whatsapp/index.ts +3 -3
- package/extensions/whatsapp/package.json +4 -4
- package/extensions/whatsapp/src/channel.ts +1 -1
- package/extensions/whatsapp/src/runtime.ts +1 -1
- package/extensions/zalo/CHANGELOG.md +9 -9
- package/extensions/zalo/README.md +4 -4
- package/extensions/zalo/index.ts +3 -3
- package/extensions/zalo/package.json +6 -6
- package/extensions/zalo/src/accounts.ts +9 -9
- package/extensions/zalo/src/actions.ts +6 -6
- package/extensions/zalo/src/channel.directory.test.ts +2 -2
- package/extensions/zalo/src/channel.ts +20 -20
- package/extensions/zalo/src/config-schema.ts +1 -1
- package/extensions/zalo/src/monitor.ts +9 -9
- package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
- package/extensions/zalo/src/onboarding.ts +27 -27
- package/extensions/zalo/src/runtime.ts +1 -1
- package/extensions/zalo/src/send.ts +2 -2
- package/extensions/zalo/src/status-issues.ts +1 -1
- package/extensions/zalo/src/token.ts +1 -1
- package/extensions/zalouser/CHANGELOG.md +4 -4
- package/extensions/zalouser/README.md +18 -18
- package/extensions/zalouser/index.ts +3 -3
- package/extensions/zalouser/package.json +6 -6
- package/extensions/zalouser/src/accounts.ts +10 -10
- package/extensions/zalouser/src/channel.test.ts +0 -1
- package/extensions/zalouser/src/channel.ts +27 -27
- package/extensions/zalouser/src/config-schema.ts +1 -1
- package/extensions/zalouser/src/monitor.ts +5 -5
- package/extensions/zalouser/src/onboarding.ts +32 -32
- package/extensions/zalouser/src/runtime.ts +1 -1
- package/extensions/zalouser/src/status-issues.ts +2 -2
- package/package.json +39 -23
- package/scripts/postinstall.js +1 -1
- 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 +2 -2
- 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 +6 -5
- 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 +1 -0
- 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 +2 -2
- package/skills/mcporter/SKILL.md +1 -1
- package/skills/model-usage/SKILL.md +1 -1
- package/skills/nano-banana-pro/SKILL.md +10 -5
- package/skills/nano-banana-pro/scripts/generate_image.py +42 -27
- 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 +7 -7
- package/skills/sherpa-onnx-tts/SKILL.md +6 -6
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/slack/SKILL.md +4 -3
- 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 +8 -8
- package/skills/tmux/scripts/find-sessions.sh +2 -2
- 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/dist/cli/browser-cli-serve.js +0 -91
- package/dist/control-ui/assets/index--6ilUi7V.css +0 -1
- package/dist/control-ui/assets/index-DrGg77je.js +0 -3111
- package/dist/control-ui/assets/index-DrGg77je.js.map +0 -1
- package/extensions/diagnostics-otel/node_modules/.bin/acorn +0 -21
- package/extensions/diagnostics-otel/node_modules/.bin/acorn.CMD +0 -12
- package/extensions/diagnostics-otel/node_modules/.bin/acorn.ps1 +0 -41
- package/extensions/googlechat/node_modules/.bin/pigbot +0 -21
- package/extensions/googlechat/node_modules/.bin/pigbot.CMD +0 -12
- package/extensions/googlechat/node_modules/.bin/pigbot.ps1 +0 -41
- package/extensions/matrix/node_modules/.bin/pigbot +0 -21
- package/extensions/matrix/node_modules/.bin/pigbot.CMD +0 -12
- package/extensions/matrix/node_modules/.bin/pigbot.ps1 +0 -41
- package/extensions/memory-core/node_modules/.bin/pigbot +0 -21
- package/extensions/memory-core/node_modules/.bin/pigbot.CMD +0 -12
- package/extensions/memory-core/node_modules/.bin/pigbot.ps1 +0 -41
- package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +0 -21
- package/extensions/memory-lancedb/node_modules/.bin/arrow2csv.CMD +0 -12
- package/extensions/memory-lancedb/node_modules/.bin/arrow2csv.ps1 +0 -41
- package/extensions/msteams/node_modules/.bin/pigbot +0 -21
- package/extensions/msteams/node_modules/.bin/pigbot.CMD +0 -12
- package/extensions/msteams/node_modules/.bin/pigbot.ps1 +0 -41
- package/extensions/nostr/node_modules/.bin/pigbot +0 -21
- package/extensions/nostr/node_modules/.bin/pigbot.CMD +0 -12
- package/extensions/nostr/node_modules/.bin/pigbot.ps1 +0 -41
- package/extensions/nostr/node_modules/.bin/tsc +0 -21
- package/extensions/nostr/node_modules/.bin/tsc.CMD +0 -12
- package/extensions/nostr/node_modules/.bin/tsc.ps1 +0 -41
- package/extensions/nostr/node_modules/.bin/tsserver +0 -21
- package/extensions/nostr/node_modules/.bin/tsserver.CMD +0 -12
- package/extensions/nostr/node_modules/.bin/tsserver.ps1 +0 -41
- package/extensions/zalo/node_modules/.bin/pigbot +0 -21
- package/extensions/zalo/node_modules/.bin/pigbot.CMD +0 -12
- package/extensions/zalo/node_modules/.bin/pigbot.ps1 +0 -41
- package/extensions/zalouser/node_modules/.bin/pigbot +0 -21
- package/extensions/zalouser/node_modules/.bin/pigbot.CMD +0 -12
- package/extensions/zalouser/node_modules/.bin/pigbot.ps1 +0 -41
- /package/dist/{config/types.pigbot.js → browser/routes/types.js} +0 -0
- /package/extensions/bluebubbles/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/copilot-proxy/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/diagnostics-otel/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/discord/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/google-antigravity-auth/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/google-gemini-cli-auth/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/googlechat/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/imessage/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/llm-task/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/lobster/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/matrix/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/mattermost/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/memory-core/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/msteams/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/nextcloud-talk/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/nostr/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/open-prose/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/qwen-portal-auth/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/signal/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/slack/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/telegram/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/tlon/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/whatsapp/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/zalo/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
- /package/extensions/zalouser/{pigbot.plugin.json → clawdbot.plugin.json} +0 -0
|
@@ -2,8 +2,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
2
2
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
3
3
|
import { EventEmitter } from "node:events";
|
|
4
4
|
|
|
5
|
-
import { removeAckReactionAfterReply, shouldAckReaction } from "
|
|
6
|
-
import type {
|
|
5
|
+
import { removeAckReactionAfterReply, shouldAckReaction } from "clawdbot/plugin-sdk";
|
|
6
|
+
import type { MoltbotConfig, PluginRuntime } from "clawdbot/plugin-sdk";
|
|
7
7
|
import {
|
|
8
8
|
handleBlueBubblesWebhookRequest,
|
|
9
9
|
registerBlueBubblesWebhookTarget,
|
|
@@ -146,8 +146,14 @@ function createMockRuntime(): PluginRuntime {
|
|
|
146
146
|
resolveRequireMention: mockResolveRequireMention as unknown as PluginRuntime["channel"]["groups"]["resolveRequireMention"],
|
|
147
147
|
},
|
|
148
148
|
debounce: {
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
// Create a pass-through debouncer that immediately calls onFlush
|
|
150
|
+
createInboundDebouncer: vi.fn((params: { onFlush: (items: unknown[]) => Promise<void> }) => ({
|
|
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"],
|
|
151
157
|
},
|
|
152
158
|
commands: {
|
|
153
159
|
resolveCommandAuthorizedFromAuthorizers: mockResolveCommandAuthorizedFromAuthorizers as unknown as PluginRuntime["channel"]["commands"]["resolveCommandAuthorizedFromAuthorizers"],
|
|
@@ -172,7 +178,7 @@ function createMockRuntime(): PluginRuntime {
|
|
|
172
178
|
})) as unknown as PluginRuntime["logging"]["getChildLogger"],
|
|
173
179
|
},
|
|
174
180
|
state: {
|
|
175
|
-
resolveStateDir: vi.fn(() => "/tmp/
|
|
181
|
+
resolveStateDir: vi.fn(() => "/tmp/moltbot") as unknown as PluginRuntime["state"]["resolveStateDir"],
|
|
176
182
|
},
|
|
177
183
|
};
|
|
178
184
|
}
|
|
@@ -258,7 +264,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
258
264
|
describe("webhook parsing + auth handling", () => {
|
|
259
265
|
it("rejects non-POST requests", async () => {
|
|
260
266
|
const account = createMockAccount();
|
|
261
|
-
const config:
|
|
267
|
+
const config: MoltbotConfig = {};
|
|
262
268
|
const core = createMockRuntime();
|
|
263
269
|
setBlueBubblesRuntime(core);
|
|
264
270
|
|
|
@@ -281,7 +287,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
281
287
|
|
|
282
288
|
it("accepts POST requests with valid JSON payload", async () => {
|
|
283
289
|
const account = createMockAccount();
|
|
284
|
-
const config:
|
|
290
|
+
const config: MoltbotConfig = {};
|
|
285
291
|
const core = createMockRuntime();
|
|
286
292
|
setBlueBubblesRuntime(core);
|
|
287
293
|
|
|
@@ -317,7 +323,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
317
323
|
|
|
318
324
|
it("rejects requests with invalid JSON", async () => {
|
|
319
325
|
const account = createMockAccount();
|
|
320
|
-
const config:
|
|
326
|
+
const config: MoltbotConfig = {};
|
|
321
327
|
const core = createMockRuntime();
|
|
322
328
|
setBlueBubblesRuntime(core);
|
|
323
329
|
|
|
@@ -340,7 +346,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
340
346
|
|
|
341
347
|
it("authenticates via password query parameter", async () => {
|
|
342
348
|
const account = createMockAccount({ password: "secret-token" });
|
|
343
|
-
const config:
|
|
349
|
+
const config: MoltbotConfig = {};
|
|
344
350
|
const core = createMockRuntime();
|
|
345
351
|
setBlueBubblesRuntime(core);
|
|
346
352
|
|
|
@@ -374,7 +380,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
374
380
|
|
|
375
381
|
it("authenticates via x-password header", async () => {
|
|
376
382
|
const account = createMockAccount({ password: "secret-token" });
|
|
377
|
-
const config:
|
|
383
|
+
const config: MoltbotConfig = {};
|
|
378
384
|
const core = createMockRuntime();
|
|
379
385
|
setBlueBubblesRuntime(core);
|
|
380
386
|
|
|
@@ -412,7 +418,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
412
418
|
|
|
413
419
|
it("rejects unauthorized requests with wrong password", async () => {
|
|
414
420
|
const account = createMockAccount({ password: "secret-token" });
|
|
415
|
-
const config:
|
|
421
|
+
const config: MoltbotConfig = {};
|
|
416
422
|
const core = createMockRuntime();
|
|
417
423
|
setBlueBubblesRuntime(core);
|
|
418
424
|
|
|
@@ -445,7 +451,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
445
451
|
|
|
446
452
|
it("allows localhost requests without authentication", async () => {
|
|
447
453
|
const account = createMockAccount({ password: "secret-token" });
|
|
448
|
-
const config:
|
|
454
|
+
const config: MoltbotConfig = {};
|
|
449
455
|
const core = createMockRuntime();
|
|
450
456
|
setBlueBubblesRuntime(core);
|
|
451
457
|
|
|
@@ -491,7 +497,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
491
497
|
vi.mocked(resolveChatGuidForTarget).mockClear();
|
|
492
498
|
|
|
493
499
|
const account = createMockAccount({ groupPolicy: "open" });
|
|
494
|
-
const config:
|
|
500
|
+
const config: MoltbotConfig = {};
|
|
495
501
|
const core = createMockRuntime();
|
|
496
502
|
setBlueBubblesRuntime(core);
|
|
497
503
|
|
|
@@ -539,7 +545,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
539
545
|
});
|
|
540
546
|
|
|
541
547
|
const account = createMockAccount({ groupPolicy: "open" });
|
|
542
|
-
const config:
|
|
548
|
+
const config: MoltbotConfig = {};
|
|
543
549
|
const core = createMockRuntime();
|
|
544
550
|
setBlueBubblesRuntime(core);
|
|
545
551
|
|
|
@@ -585,7 +591,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
585
591
|
dmPolicy: "allowlist",
|
|
586
592
|
allowFrom: ["+15551234567"],
|
|
587
593
|
});
|
|
588
|
-
const config:
|
|
594
|
+
const config: MoltbotConfig = {};
|
|
589
595
|
const core = createMockRuntime();
|
|
590
596
|
setBlueBubblesRuntime(core);
|
|
591
597
|
|
|
@@ -626,7 +632,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
626
632
|
dmPolicy: "allowlist",
|
|
627
633
|
allowFrom: ["+15559999999"], // Different number
|
|
628
634
|
});
|
|
629
|
-
const config:
|
|
635
|
+
const config: MoltbotConfig = {};
|
|
630
636
|
const core = createMockRuntime();
|
|
631
637
|
setBlueBubblesRuntime(core);
|
|
632
638
|
|
|
@@ -667,7 +673,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
667
673
|
dmPolicy: "pairing",
|
|
668
674
|
allowFrom: ["+15559999999"], // Different number than sender
|
|
669
675
|
});
|
|
670
|
-
const config:
|
|
676
|
+
const config: MoltbotConfig = {};
|
|
671
677
|
const core = createMockRuntime();
|
|
672
678
|
setBlueBubblesRuntime(core);
|
|
673
679
|
|
|
@@ -710,7 +716,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
710
716
|
dmPolicy: "pairing",
|
|
711
717
|
allowFrom: ["+15559999999"], // Different number than sender
|
|
712
718
|
});
|
|
713
|
-
const config:
|
|
719
|
+
const config: MoltbotConfig = {};
|
|
714
720
|
const core = createMockRuntime();
|
|
715
721
|
setBlueBubblesRuntime(core);
|
|
716
722
|
|
|
@@ -751,7 +757,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
751
757
|
dmPolicy: "open",
|
|
752
758
|
allowFrom: [],
|
|
753
759
|
});
|
|
754
|
-
const config:
|
|
760
|
+
const config: MoltbotConfig = {};
|
|
755
761
|
const core = createMockRuntime();
|
|
756
762
|
setBlueBubblesRuntime(core);
|
|
757
763
|
|
|
@@ -788,7 +794,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
788
794
|
const account = createMockAccount({
|
|
789
795
|
dmPolicy: "disabled",
|
|
790
796
|
});
|
|
791
|
-
const config:
|
|
797
|
+
const config: MoltbotConfig = {};
|
|
792
798
|
const core = createMockRuntime();
|
|
793
799
|
setBlueBubblesRuntime(core);
|
|
794
800
|
|
|
@@ -827,7 +833,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
827
833
|
const account = createMockAccount({
|
|
828
834
|
groupPolicy: "open",
|
|
829
835
|
});
|
|
830
|
-
const config:
|
|
836
|
+
const config: MoltbotConfig = {};
|
|
831
837
|
const core = createMockRuntime();
|
|
832
838
|
setBlueBubblesRuntime(core);
|
|
833
839
|
|
|
@@ -865,7 +871,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
865
871
|
const account = createMockAccount({
|
|
866
872
|
groupPolicy: "disabled",
|
|
867
873
|
});
|
|
868
|
-
const config:
|
|
874
|
+
const config: MoltbotConfig = {};
|
|
869
875
|
const core = createMockRuntime();
|
|
870
876
|
setBlueBubblesRuntime(core);
|
|
871
877
|
|
|
@@ -904,7 +910,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
904
910
|
groupPolicy: "allowlist",
|
|
905
911
|
dmPolicy: "open",
|
|
906
912
|
});
|
|
907
|
-
const config:
|
|
913
|
+
const config: MoltbotConfig = {};
|
|
908
914
|
const core = createMockRuntime();
|
|
909
915
|
setBlueBubblesRuntime(core);
|
|
910
916
|
|
|
@@ -943,7 +949,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
943
949
|
groupPolicy: "allowlist",
|
|
944
950
|
groupAllowFrom: ["chat_guid:iMessage;+;chat123456"],
|
|
945
951
|
});
|
|
946
|
-
const config:
|
|
952
|
+
const config: MoltbotConfig = {};
|
|
947
953
|
const core = createMockRuntime();
|
|
948
954
|
setBlueBubblesRuntime(core);
|
|
949
955
|
|
|
@@ -984,7 +990,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
984
990
|
mockMatchesMentionPatterns.mockReturnValue(true);
|
|
985
991
|
|
|
986
992
|
const account = createMockAccount({ groupPolicy: "open" });
|
|
987
|
-
const config:
|
|
993
|
+
const config: MoltbotConfig = {};
|
|
988
994
|
const core = createMockRuntime();
|
|
989
995
|
setBlueBubblesRuntime(core);
|
|
990
996
|
|
|
@@ -1025,7 +1031,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1025
1031
|
mockMatchesMentionPatterns.mockReturnValue(false);
|
|
1026
1032
|
|
|
1027
1033
|
const account = createMockAccount({ groupPolicy: "open" });
|
|
1028
|
-
const config:
|
|
1034
|
+
const config: MoltbotConfig = {};
|
|
1029
1035
|
const core = createMockRuntime();
|
|
1030
1036
|
setBlueBubblesRuntime(core);
|
|
1031
1037
|
|
|
@@ -1063,7 +1069,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1063
1069
|
mockResolveRequireMention.mockReturnValue(false);
|
|
1064
1070
|
|
|
1065
1071
|
const account = createMockAccount({ groupPolicy: "open" });
|
|
1066
|
-
const config:
|
|
1072
|
+
const config: MoltbotConfig = {};
|
|
1067
1073
|
const core = createMockRuntime();
|
|
1068
1074
|
setBlueBubblesRuntime(core);
|
|
1069
1075
|
|
|
@@ -1101,7 +1107,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1101
1107
|
describe("group metadata", () => {
|
|
1102
1108
|
it("includes group subject + members in ctx", async () => {
|
|
1103
1109
|
const account = createMockAccount({ groupPolicy: "open" });
|
|
1104
|
-
const config:
|
|
1110
|
+
const config: MoltbotConfig = {};
|
|
1105
1111
|
const core = createMockRuntime();
|
|
1106
1112
|
setBlueBubblesRuntime(core);
|
|
1107
1113
|
|
|
@@ -1147,7 +1153,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1147
1153
|
describe("reply metadata", () => {
|
|
1148
1154
|
it("surfaces reply fields in ctx when provided", async () => {
|
|
1149
1155
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
1150
|
-
const config:
|
|
1156
|
+
const config: MoltbotConfig = {};
|
|
1151
1157
|
const core = createMockRuntime();
|
|
1152
1158
|
setBlueBubblesRuntime(core);
|
|
1153
1159
|
|
|
@@ -1195,7 +1201,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1195
1201
|
|
|
1196
1202
|
it("preserves part index prefixes in reply tags when short IDs are unavailable", async () => {
|
|
1197
1203
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
1198
|
-
const config:
|
|
1204
|
+
const config: MoltbotConfig = {};
|
|
1199
1205
|
const core = createMockRuntime();
|
|
1200
1206
|
setBlueBubblesRuntime(core);
|
|
1201
1207
|
|
|
@@ -1240,7 +1246,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1240
1246
|
|
|
1241
1247
|
it("hydrates missing reply sender/body from the recent-message cache", async () => {
|
|
1242
1248
|
const account = createMockAccount({ dmPolicy: "open", groupPolicy: "open" });
|
|
1243
|
-
const config:
|
|
1249
|
+
const config: MoltbotConfig = {};
|
|
1244
1250
|
const core = createMockRuntime();
|
|
1245
1251
|
setBlueBubblesRuntime(core);
|
|
1246
1252
|
|
|
@@ -1310,7 +1316,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1310
1316
|
|
|
1311
1317
|
it("falls back to threadOriginatorGuid when reply metadata is absent", async () => {
|
|
1312
1318
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
1313
|
-
const config:
|
|
1319
|
+
const config: MoltbotConfig = {};
|
|
1314
1320
|
const core = createMockRuntime();
|
|
1315
1321
|
setBlueBubblesRuntime(core);
|
|
1316
1322
|
|
|
@@ -1351,7 +1357,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1351
1357
|
describe("tapback text parsing", () => {
|
|
1352
1358
|
it("does not rewrite tapback-like text without metadata", async () => {
|
|
1353
1359
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
1354
|
-
const config:
|
|
1360
|
+
const config: MoltbotConfig = {};
|
|
1355
1361
|
const core = createMockRuntime();
|
|
1356
1362
|
setBlueBubblesRuntime(core);
|
|
1357
1363
|
|
|
@@ -1391,7 +1397,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1391
1397
|
|
|
1392
1398
|
it("parses tapback text with custom emoji when metadata is present", async () => {
|
|
1393
1399
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
1394
|
-
const config:
|
|
1400
|
+
const config: MoltbotConfig = {};
|
|
1395
1401
|
const core = createMockRuntime();
|
|
1396
1402
|
setBlueBubblesRuntime(core);
|
|
1397
1403
|
|
|
@@ -1436,7 +1442,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1436
1442
|
vi.mocked(sendBlueBubblesReaction).mockClear();
|
|
1437
1443
|
|
|
1438
1444
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
1439
|
-
const config:
|
|
1445
|
+
const config: MoltbotConfig = {
|
|
1440
1446
|
messages: {
|
|
1441
1447
|
ackReaction: "❤️",
|
|
1442
1448
|
ackReactionScope: "direct",
|
|
@@ -1494,7 +1500,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1494
1500
|
groupPolicy: "open",
|
|
1495
1501
|
allowFrom: ["+15551234567"],
|
|
1496
1502
|
});
|
|
1497
|
-
const config:
|
|
1503
|
+
const config: MoltbotConfig = {};
|
|
1498
1504
|
const core = createMockRuntime();
|
|
1499
1505
|
setBlueBubblesRuntime(core);
|
|
1500
1506
|
|
|
@@ -1537,7 +1543,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1537
1543
|
groupPolicy: "open",
|
|
1538
1544
|
allowFrom: [], // No one authorized
|
|
1539
1545
|
});
|
|
1540
|
-
const config:
|
|
1546
|
+
const config: MoltbotConfig = {};
|
|
1541
1547
|
const core = createMockRuntime();
|
|
1542
1548
|
setBlueBubblesRuntime(core);
|
|
1543
1549
|
|
|
@@ -1580,7 +1586,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1580
1586
|
const account = createMockAccount({
|
|
1581
1587
|
sendReadReceipts: true,
|
|
1582
1588
|
});
|
|
1583
|
-
const config:
|
|
1589
|
+
const config: MoltbotConfig = {};
|
|
1584
1590
|
const core = createMockRuntime();
|
|
1585
1591
|
setBlueBubblesRuntime(core);
|
|
1586
1592
|
|
|
@@ -1621,7 +1627,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1621
1627
|
const account = createMockAccount({
|
|
1622
1628
|
sendReadReceipts: false,
|
|
1623
1629
|
});
|
|
1624
|
-
const config:
|
|
1630
|
+
const config: MoltbotConfig = {};
|
|
1625
1631
|
const core = createMockRuntime();
|
|
1626
1632
|
setBlueBubblesRuntime(core);
|
|
1627
1633
|
|
|
@@ -1660,7 +1666,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1660
1666
|
vi.mocked(sendBlueBubblesTyping).mockClear();
|
|
1661
1667
|
|
|
1662
1668
|
const account = createMockAccount();
|
|
1663
|
-
const config:
|
|
1669
|
+
const config: MoltbotConfig = {};
|
|
1664
1670
|
const core = createMockRuntime();
|
|
1665
1671
|
setBlueBubblesRuntime(core);
|
|
1666
1672
|
|
|
@@ -1708,7 +1714,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1708
1714
|
vi.mocked(sendBlueBubblesTyping).mockClear();
|
|
1709
1715
|
|
|
1710
1716
|
const account = createMockAccount();
|
|
1711
|
-
const config:
|
|
1717
|
+
const config: MoltbotConfig = {};
|
|
1712
1718
|
const core = createMockRuntime();
|
|
1713
1719
|
setBlueBubblesRuntime(core);
|
|
1714
1720
|
|
|
@@ -1757,7 +1763,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1757
1763
|
vi.mocked(sendBlueBubblesTyping).mockClear();
|
|
1758
1764
|
|
|
1759
1765
|
const account = createMockAccount();
|
|
1760
|
-
const config:
|
|
1766
|
+
const config: MoltbotConfig = {};
|
|
1761
1767
|
const core = createMockRuntime();
|
|
1762
1768
|
setBlueBubblesRuntime(core);
|
|
1763
1769
|
|
|
@@ -1807,7 +1813,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1807
1813
|
});
|
|
1808
1814
|
|
|
1809
1815
|
const account = createMockAccount();
|
|
1810
|
-
const config:
|
|
1816
|
+
const config: MoltbotConfig = {};
|
|
1811
1817
|
const core = createMockRuntime();
|
|
1812
1818
|
setBlueBubblesRuntime(core);
|
|
1813
1819
|
|
|
@@ -1853,7 +1859,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1853
1859
|
mockEnqueueSystemEvent.mockClear();
|
|
1854
1860
|
|
|
1855
1861
|
const account = createMockAccount();
|
|
1856
|
-
const config:
|
|
1862
|
+
const config: MoltbotConfig = {};
|
|
1857
1863
|
const core = createMockRuntime();
|
|
1858
1864
|
setBlueBubblesRuntime(core);
|
|
1859
1865
|
|
|
@@ -1893,7 +1899,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1893
1899
|
mockEnqueueSystemEvent.mockClear();
|
|
1894
1900
|
|
|
1895
1901
|
const account = createMockAccount();
|
|
1896
|
-
const config:
|
|
1902
|
+
const config: MoltbotConfig = {};
|
|
1897
1903
|
const core = createMockRuntime();
|
|
1898
1904
|
setBlueBubblesRuntime(core);
|
|
1899
1905
|
|
|
@@ -1933,7 +1939,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1933
1939
|
mockEnqueueSystemEvent.mockClear();
|
|
1934
1940
|
|
|
1935
1941
|
const account = createMockAccount();
|
|
1936
|
-
const config:
|
|
1942
|
+
const config: MoltbotConfig = {};
|
|
1937
1943
|
const core = createMockRuntime();
|
|
1938
1944
|
setBlueBubblesRuntime(core);
|
|
1939
1945
|
|
|
@@ -1970,7 +1976,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
1970
1976
|
mockEnqueueSystemEvent.mockClear();
|
|
1971
1977
|
|
|
1972
1978
|
const account = createMockAccount();
|
|
1973
|
-
const config:
|
|
1979
|
+
const config: MoltbotConfig = {};
|
|
1974
1980
|
const core = createMockRuntime();
|
|
1975
1981
|
setBlueBubblesRuntime(core);
|
|
1976
1982
|
|
|
@@ -2011,7 +2017,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
2011
2017
|
describe("short message ID mapping", () => {
|
|
2012
2018
|
it("assigns sequential short IDs to messages", async () => {
|
|
2013
2019
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
2014
|
-
const config:
|
|
2020
|
+
const config: MoltbotConfig = {};
|
|
2015
2021
|
const core = createMockRuntime();
|
|
2016
2022
|
setBlueBubblesRuntime(core);
|
|
2017
2023
|
|
|
@@ -2051,7 +2057,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
2051
2057
|
|
|
2052
2058
|
it("resolves short ID back to UUID", async () => {
|
|
2053
2059
|
const account = createMockAccount({ dmPolicy: "open" });
|
|
2054
|
-
const config:
|
|
2060
|
+
const config: MoltbotConfig = {};
|
|
2055
2061
|
const core = createMockRuntime();
|
|
2056
2062
|
setBlueBubblesRuntime(core);
|
|
2057
2063
|
|
|
@@ -2104,7 +2110,7 @@ describe("BlueBubbles webhook monitor", () => {
|
|
|
2104
2110
|
describe("fromMe messages", () => {
|
|
2105
2111
|
it("ignores messages from self (fromMe=true)", async () => {
|
|
2106
2112
|
const account = createMockAccount();
|
|
2107
|
-
const config:
|
|
2113
|
+
const config: MoltbotConfig = {};
|
|
2108
2114
|
const core = createMockRuntime();
|
|
2109
2115
|
setBlueBubblesRuntime(core);
|
|
2110
2116
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
2
|
|
|
3
|
-
import type {
|
|
3
|
+
import type { MoltbotConfig } from "clawdbot/plugin-sdk";
|
|
4
4
|
import {
|
|
5
5
|
logAckFailure,
|
|
6
6
|
logInboundDrop,
|
|
7
7
|
logTypingFailure,
|
|
8
8
|
resolveAckReaction,
|
|
9
9
|
resolveControlCommandGate,
|
|
10
|
-
} from "
|
|
10
|
+
} from "clawdbot/plugin-sdk";
|
|
11
11
|
import { markBlueBubblesChatRead, sendBlueBubblesTyping } from "./chat.js";
|
|
12
12
|
import { resolveChatGuidForTarget, sendMessageBlueBubbles } from "./send.js";
|
|
13
13
|
import { downloadBlueBubblesAttachment } from "./attachments.js";
|
|
@@ -26,7 +26,7 @@ export type BlueBubblesRuntimeEnv = {
|
|
|
26
26
|
|
|
27
27
|
export type BlueBubblesMonitorOptions = {
|
|
28
28
|
account: ResolvedBlueBubblesAccount;
|
|
29
|
-
config:
|
|
29
|
+
config: MoltbotConfig;
|
|
30
30
|
runtime: BlueBubblesRuntimeEnv;
|
|
31
31
|
abortSignal: AbortSignal;
|
|
32
32
|
statusSink?: (patch: { lastInboundAt?: number; lastOutboundAt?: number }) => void;
|
|
@@ -243,15 +243,185 @@ function logGroupAllowlistHint(params: {
|
|
|
243
243
|
|
|
244
244
|
type WebhookTarget = {
|
|
245
245
|
account: ResolvedBlueBubblesAccount;
|
|
246
|
-
config:
|
|
246
|
+
config: MoltbotConfig;
|
|
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
|
+
|
|
253
331
|
const webhookTargets = new Map<string, WebhookTarget[]>();
|
|
254
332
|
|
|
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
|
+
|
|
255
425
|
function normalizeWebhookPath(raw: string): string {
|
|
256
426
|
const trimmed = raw.trim();
|
|
257
427
|
if (!trimmed) return "/";
|
|
@@ -275,6 +445,8 @@ export function registerBlueBubblesWebhookTarget(target: WebhookTarget): () => v
|
|
|
275
445
|
} else {
|
|
276
446
|
webhookTargets.delete(key);
|
|
277
447
|
}
|
|
448
|
+
// Clean up debouncer when target is unregistered
|
|
449
|
+
removeDebouncer(normalizedTarget);
|
|
278
450
|
};
|
|
279
451
|
}
|
|
280
452
|
|
|
@@ -768,7 +940,7 @@ function maskSecret(value: string): string {
|
|
|
768
940
|
}
|
|
769
941
|
|
|
770
942
|
function resolveBlueBubblesAckReaction(params: {
|
|
771
|
-
cfg:
|
|
943
|
+
cfg: MoltbotConfig;
|
|
772
944
|
agentId: string;
|
|
773
945
|
core: BlueBubblesCoreRuntime;
|
|
774
946
|
runtime: BlueBubblesRuntimeEnv;
|
|
@@ -1205,7 +1377,10 @@ export async function handleBlueBubblesWebhookRequest(
|
|
|
1205
1377
|
);
|
|
1206
1378
|
});
|
|
1207
1379
|
} else if (message) {
|
|
1208
|
-
|
|
1380
|
+
// Route messages through debouncer to coalesce rapid-fire events
|
|
1381
|
+
// (e.g., text message + URL balloon arriving as separate webhooks)
|
|
1382
|
+
const debouncer = getOrCreateDebouncer(target);
|
|
1383
|
+
debouncer.enqueue({ message, target }).catch((err) => {
|
|
1209
1384
|
target.runtime.error?.(
|
|
1210
1385
|
`[${target.account.accountId}] BlueBubbles webhook failed: ${String(err)}`,
|
|
1211
1386
|
);
|