@poolzin/pool-bot 2026.1.39 → 2026.2.1
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/assets/chrome-extension/README.md +3 -3
- package/assets/chrome-extension/background.js +5 -5
- package/assets/chrome-extension/manifest.json +3 -3
- package/assets/chrome-extension/options.html +4 -4
- package/assets/chrome-extension/options.js +1 -1
- package/dist/acp/client.js +3 -3
- package/dist/acp/types.js +1 -1
- package/dist/agents/agent-paths.js +3 -3
- package/dist/agents/auth-profiles/paths.js +3 -3
- package/dist/agents/bash-tools.exec.js +76 -25
- package/dist/agents/cli-runner/helpers.js +10 -12
- package/dist/agents/cli-runner.js +2 -2
- package/dist/agents/cloudflare-ai-gateway.js +31 -0
- package/dist/agents/compaction.js +16 -2
- package/dist/agents/context-window-guard.js +13 -10
- package/dist/agents/context.js +4 -4
- package/dist/agents/docs-path.js +1 -1
- package/dist/agents/identity.js +47 -7
- package/dist/agents/memory-search.js +25 -8
- package/dist/agents/minimax-vlm.js +1 -1
- package/dist/agents/model-auth.js +12 -1
- package/dist/agents/model-catalog.js +4 -4
- package/dist/agents/model-selection.js +31 -4
- package/dist/agents/models-config.js +3 -3
- package/dist/agents/models-config.providers.js +147 -39
- package/dist/agents/pi-embedded-block-chunker.js +117 -42
- package/dist/agents/pi-embedded-helpers/errors.js +183 -78
- package/dist/agents/pi-embedded-helpers/openai.js +1 -1
- package/dist/agents/pi-embedded-helpers.js +1 -1
- package/dist/agents/pi-embedded-runner/compact.js +9 -8
- package/dist/agents/pi-embedded-runner/model.js +63 -4
- package/dist/agents/pi-embedded-runner/run/attempt.js +27 -17
- package/dist/agents/pi-embedded-runner/run.js +203 -50
- package/dist/agents/pi-embedded-runner/system-prompt.js +10 -2
- package/dist/agents/pi-embedded-runner/tool-result-truncation.js +275 -0
- package/dist/agents/pi-embedded-runner/utils.js +1 -1
- package/dist/agents/pi-embedded-subscribe.js +118 -29
- package/dist/agents/pi-model-discovery.js +10 -0
- package/dist/agents/pi-tool-definition-adapter.js +50 -9
- package/dist/agents/pi-tools.before-tool-call.js +67 -0
- package/dist/agents/pi-tools.js +20 -10
- package/dist/agents/pi-tools.read.js +2 -2
- package/dist/agents/poolbot-tools.js +15 -10
- package/dist/agents/sandbox-paths.js +31 -0
- package/dist/agents/session-file-repair.js +83 -0
- package/dist/agents/session-tool-result-guard.js +94 -15
- package/dist/agents/session-transcript-repair.js +68 -0
- package/dist/agents/shell-utils.js +51 -0
- package/dist/agents/skills/bundled-context.js +23 -0
- package/dist/agents/skills/bundled-dir.js +41 -7
- package/dist/agents/skills/frontmatter.js +1 -1
- package/dist/agents/skills/workspace.js +2 -2
- package/dist/agents/skills-install.js +60 -23
- package/dist/agents/subagent-announce.js +79 -34
- package/dist/agents/system-prompt.js +28 -4
- package/dist/agents/together-models.js +127 -0
- package/dist/agents/tool-images.js +1 -1
- package/dist/agents/tool-policy.conformance.js +14 -0
- package/dist/agents/tool-policy.js +25 -1
- package/dist/agents/tools/browser-tool.js +3 -3
- package/dist/agents/tools/cron-tool.js +166 -19
- package/dist/agents/tools/discord-actions-presence.js +78 -0
- package/dist/agents/tools/image-tool.js +2 -2
- package/dist/agents/tools/memory-tool.js +93 -5
- package/dist/agents/tools/message-tool.js +56 -2
- package/dist/agents/tools/sessions-history-tool.js +69 -1
- package/dist/agents/tools/web-search.js +211 -42
- package/dist/agents/usage.js +23 -1
- package/dist/agents/workspace-run.js +67 -0
- package/dist/agents/workspace-templates.js +44 -0
- package/dist/auto-reply/command-auth.js +121 -6
- package/dist/auto-reply/commands-registry.data.js +1 -1
- package/dist/auto-reply/envelope.js +50 -72
- package/dist/auto-reply/reply/commands-compact.js +1 -0
- package/dist/auto-reply/reply/commands-context-report.js +3 -2
- package/dist/auto-reply/reply/commands-context.js +1 -0
- package/dist/auto-reply/reply/commands-models.js +107 -60
- package/dist/auto-reply/reply/commands-ptt.js +171 -0
- package/dist/auto-reply/reply/commands-session.js +2 -2
- package/dist/auto-reply/reply/get-reply-run.js +16 -5
- package/dist/auto-reply/reply/groups.js +1 -1
- package/dist/auto-reply/reply/inbound-context.js +9 -1
- package/dist/auto-reply/reply/inbound-meta.js +130 -0
- package/dist/auto-reply/reply/model-selection.js +3 -3
- package/dist/auto-reply/reply/untrusted-context.js +15 -0
- package/dist/auto-reply/status.js +1 -1
- package/dist/auto-reply/thinking.js +88 -43
- package/dist/browser/bridge-server.js +13 -0
- package/dist/browser/cdp.helpers.js +38 -24
- package/dist/browser/client-fetch.js +51 -8
- package/dist/browser/config.js +2 -11
- package/dist/browser/extension-relay.js +104 -43
- package/dist/browser/pw-ai.js +1 -1
- package/dist/browser/pw-session.js +143 -8
- package/dist/browser/pw-tools-core.interactions.js +125 -27
- package/dist/browser/pw-tools-core.responses.js +1 -1
- package/dist/browser/pw-tools-core.state.js +1 -1
- package/dist/browser/routes/agent.act.js +86 -41
- package/dist/browser/routes/dispatcher.js +4 -4
- package/dist/browser/screenshot.js +1 -1
- package/dist/browser/server-context.js +2 -2
- package/dist/browser/server.js +13 -0
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui.js +3 -3
- package/dist/channels/plugins/catalog.js +2 -2
- package/dist/channels/plugins/onboarding/imessage.js +1 -1
- package/dist/channels/plugins/onboarding/signal.js +1 -1
- package/dist/channels/plugins/onboarding/slack.js +4 -4
- package/dist/channels/plugins/onboarding/whatsapp.js +3 -3
- package/dist/channels/plugins/pairing-message.js +1 -1
- package/dist/channels/reply-prefix.js +8 -1
- package/dist/cli/browser-cli-extension.js +2 -2
- package/dist/cli/cron-cli/register.cron-add.js +61 -40
- package/dist/cli/cron-cli/register.cron-edit.js +60 -34
- package/dist/cli/cron-cli/shared.js +56 -41
- package/dist/cli/dns-cli.js +26 -14
- package/dist/cli/docs-cli.js +1 -1
- package/dist/cli/gateway-cli/dev.js +1 -1
- package/dist/cli/gateway-cli/register.js +37 -19
- package/dist/cli/memory-cli.js +30 -20
- package/dist/cli/nodes-cli/register.canvas.js +1 -1
- package/dist/cli/parse-bytes.js +37 -0
- package/dist/cli/plugins-cli.js +1 -1
- package/dist/cli/run-main.js +2 -2
- package/dist/cli/security-cli.js +1 -1
- package/dist/cli/tagline.js +1 -1
- package/dist/cli/update-cli.js +173 -52
- package/dist/cli/webhooks-cli.js +5 -5
- package/dist/commands/agent.js +1 -0
- package/dist/commands/agents.commands.add.js +1 -1
- package/dist/commands/auth-choice.apply.api-providers.js +305 -17
- package/dist/commands/auth-choice.apply.js +4 -1
- package/dist/commands/auth-choice.apply.plugin-provider.js +2 -2
- package/dist/commands/auth-choice.apply.xai.js +63 -0
- package/dist/commands/auth-choice.preferred-provider.js +7 -1
- package/dist/commands/configure.wizard.js +1 -1
- package/dist/commands/dashboard.js +1 -1
- package/dist/commands/docs.js +1 -1
- package/dist/commands/doctor-config-flow.js +61 -5
- package/dist/commands/doctor-gateway-services.js +3 -3
- package/dist/commands/doctor-state-migrations.js +1 -1
- package/dist/commands/doctor-update.js +3 -3
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/health.js +1 -1
- package/dist/commands/model-allowlist.js +29 -0
- package/dist/commands/model-picker.js +2 -1
- 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 +44 -24
- package/dist/commands/models/shared.js +15 -0
- package/dist/commands/onboard-auth.config-core.js +366 -28
- package/dist/commands/onboard-auth.credentials.js +71 -9
- package/dist/commands/onboard-auth.js +3 -3
- package/dist/commands/onboard-auth.models.js +26 -24
- package/dist/commands/onboard-custom.js +384 -0
- package/dist/commands/onboard-non-interactive/local/auth-choice-inference.js +35 -0
- package/dist/commands/onboard-non-interactive/local/auth-choice.js +146 -9
- package/dist/commands/onboard-skills.js +63 -38
- package/dist/commands/openai-model-default.js +41 -0
- package/dist/commands/status-all/report-lines.js +1 -1
- package/dist/commands/status.command.js +1 -1
- package/dist/commands/uninstall.js +3 -3
- package/dist/compat/legacy-names.js +1 -1
- package/dist/config/defaults.js +3 -2
- package/dist/config/io.js +3 -3
- package/dist/config/paths.js +136 -35
- package/dist/config/plugin-auto-enable.js +21 -5
- package/dist/config/redact-snapshot.js +153 -0
- package/dist/config/schema.field-metadata.js +590 -0
- package/dist/config/schema.js +3 -3
- package/dist/config/sessions/store.js +291 -23
- package/dist/config/types.memory.js +1 -0
- package/dist/config/version.js +4 -4
- package/dist/config/zod-schema.agent-defaults.js +3 -0
- package/dist/config/zod-schema.agent-runtime.js +13 -2
- package/dist/config/zod-schema.providers-core.js +142 -0
- package/dist/config/zod-schema.session.js +3 -0
- package/dist/cron/delivery.js +57 -0
- package/dist/cron/isolated-agent/delivery-target.js +18 -3
- package/dist/cron/isolated-agent/helpers.js +22 -5
- package/dist/cron/isolated-agent/run.js +171 -63
- package/dist/cron/isolated-agent/session.js +2 -0
- package/dist/cron/normalize.js +356 -28
- package/dist/cron/parse.js +10 -5
- package/dist/cron/run-log.js +35 -10
- package/dist/cron/schedule.js +41 -6
- package/dist/cron/service/jobs.js +208 -35
- package/dist/cron/service/ops.js +72 -16
- package/dist/cron/service/state.js +2 -0
- package/dist/cron/service/store.js +386 -14
- package/dist/cron/service/timer.js +390 -147
- package/dist/cron/session-reaper.js +86 -0
- package/dist/cron/store.js +23 -8
- package/dist/cron/validate-timestamp.js +43 -0
- package/dist/daemon/constants.js +7 -7
- package/dist/daemon/inspect.js +6 -6
- package/dist/daemon/systemd-unit.js +1 -1
- package/dist/discord/monitor/agent-components.js +438 -0
- package/dist/discord/monitor/allow-list.js +28 -5
- package/dist/discord/monitor/gateway-registry.js +29 -0
- package/dist/discord/monitor/native-command.js +44 -23
- package/dist/discord/monitor/sender-identity.js +45 -0
- package/dist/discord/pluralkit.js +27 -0
- package/dist/discord/send.outbound.js +92 -5
- package/dist/discord/send.shared.js +60 -23
- package/dist/discord/targets.js +84 -1
- package/dist/entry.js +15 -9
- package/dist/extensionAPI.js +8 -0
- package/dist/gateway/control-ui.js +8 -1
- package/dist/gateway/hooks-mapping.js +3 -0
- package/dist/gateway/hooks.js +65 -0
- package/dist/gateway/live-image-probe.js +1 -66
- package/dist/gateway/net.js +96 -31
- package/dist/gateway/node-command-policy.js +50 -15
- package/dist/gateway/openai-http.js +2 -2
- package/dist/gateway/openresponses-http.js +4 -4
- package/dist/gateway/origin-check.js +56 -0
- package/dist/gateway/protocol/client-info.js +9 -0
- package/dist/gateway/protocol/index.js +9 -2
- package/dist/gateway/protocol/schema/agents-models-skills.js +71 -1
- package/dist/gateway/protocol/schema/cron.js +22 -10
- package/dist/gateway/protocol/schema/protocol-schemas.js +16 -2
- package/dist/gateway/protocol/schema/sessions.js +12 -0
- package/dist/gateway/server/hooks.js +1 -1
- package/dist/gateway/server-broadcast.js +26 -9
- package/dist/gateway/server-chat.js +112 -23
- package/dist/gateway/server-discovery-runtime.js +10 -2
- package/dist/gateway/server-discovery.js +2 -2
- package/dist/gateway/server-http.js +110 -12
- package/dist/gateway/server-methods/agent-timestamp.js +60 -0
- package/dist/gateway/server-methods/agents.js +321 -2
- package/dist/gateway/server-methods/usage.js +559 -16
- package/dist/gateway/server-runtime-state.js +22 -8
- package/dist/gateway/server-startup-memory.js +16 -0
- package/dist/gateway/server.impl.js +7 -3
- package/dist/gateway/session-utils.fs.js +23 -25
- package/dist/gateway/session-utils.js +20 -10
- package/dist/gateway/sessions-patch.js +7 -22
- package/dist/gateway/test-helpers.server.js +35 -2
- package/dist/hooks/frontmatter.js +1 -1
- package/dist/hooks/hooks-status.js +1 -1
- package/dist/hooks/install.js +2 -2
- package/dist/hooks/loader.js +1 -1
- package/dist/hooks/workspace.js +3 -3
- package/dist/imessage/constants.js +2 -0
- package/dist/imessage/monitor/deliver.js +4 -1
- package/dist/imessage/monitor/monitor-provider.js +51 -1
- package/dist/index.js +2 -2
- package/dist/infra/bonjour-discovery.js +131 -70
- package/dist/infra/bonjour.js +3 -3
- package/dist/infra/control-ui-assets.js +134 -12
- package/dist/infra/errors.js +12 -0
- package/dist/infra/exec-approvals.js +266 -57
- package/dist/infra/format-time/format-datetime.js +79 -0
- package/dist/infra/format-time/format-duration.js +81 -0
- package/dist/infra/format-time/format-relative.js +80 -0
- package/dist/infra/heartbeat-runner.js +140 -49
- package/dist/infra/home-dir.js +54 -0
- package/dist/infra/net/fetch-guard.js +122 -0
- package/dist/infra/net/ssrf.js +65 -29
- package/dist/infra/outbound/abort.js +14 -0
- package/dist/infra/outbound/message-action-runner.js +77 -13
- package/dist/infra/outbound/outbound-session.js +143 -37
- package/dist/infra/path-env.js +3 -3
- package/dist/infra/poolbot-root.js +43 -1
- package/dist/infra/provider-usage.fetch.minimax.js +1 -1
- package/dist/infra/restart.js +1 -1
- package/dist/infra/session-cost-usage.js +631 -41
- package/dist/infra/state-migrations.js +317 -47
- package/dist/infra/tailscale.js +1 -1
- package/dist/infra/update-global.js +35 -0
- package/dist/infra/update-runner.js +149 -43
- package/dist/infra/warning-filter.js +65 -0
- package/dist/infra/widearea-dns.js +30 -9
- package/dist/logging/redact-identifier.js +12 -0
- package/dist/macos/relay.js +2 -2
- package/dist/media/fetch.js +81 -58
- package/dist/media/input-files.js +1 -1
- package/dist/media/mime.js +4 -0
- package/dist/media/png-encode.js +74 -0
- package/dist/media-understanding/apply.js +403 -3
- package/dist/media-understanding/attachments.js +38 -27
- package/dist/media-understanding/defaults.js +16 -0
- package/dist/media-understanding/providers/deepgram/audio.js +22 -14
- package/dist/media-understanding/providers/google/audio.js +24 -17
- package/dist/media-understanding/providers/google/video.js +24 -17
- package/dist/media-understanding/providers/image.js +4 -4
- package/dist/media-understanding/providers/index.js +4 -1
- package/dist/media-understanding/providers/openai/audio.js +22 -14
- package/dist/media-understanding/providers/shared.js +16 -11
- package/dist/media-understanding/providers/zai/index.js +6 -0
- package/dist/media-understanding/runner.js +158 -90
- package/dist/memory/backend-config.js +207 -0
- package/dist/memory/batch-voyage.js +277 -0
- package/dist/memory/embeddings-voyage.js +75 -0
- package/dist/memory/embeddings.js +29 -17
- package/dist/memory/internal.js +101 -18
- package/dist/memory/manager.js +155 -48
- package/dist/memory/search-manager.js +173 -0
- package/dist/memory/session-files.js +9 -3
- package/dist/memory/types.js +1 -0
- package/dist/node-host/runner.js +36 -26
- package/dist/node-host/with-timeout.js +27 -0
- package/dist/pairing/pairing-messages.js +1 -1
- package/dist/plugins/commands.js +5 -1
- package/dist/plugins/config-state.js +86 -7
- package/dist/plugins/discovery.js +1 -1
- package/dist/plugins/install.js +2 -2
- package/dist/plugins/source-display.js +51 -0
- package/dist/plugins/update.js +1 -1
- package/dist/process/exec.js +20 -2
- package/dist/routing/resolve-route.js +12 -0
- package/dist/routing/session-key.js +15 -0
- package/dist/runtime.js +2 -0
- package/dist/security/audit-extra.async.js +601 -0
- package/dist/security/audit-extra.js +2 -830
- package/dist/security/audit-extra.sync.js +505 -0
- package/dist/security/audit.js +2 -2
- package/dist/security/channel-metadata.js +34 -0
- package/dist/security/external-content.js +88 -6
- package/dist/security/skill-scanner.js +330 -0
- package/dist/sessions/session-key-utils.js +7 -0
- package/dist/shared/text/reasoning-tags.js +52 -7
- package/dist/signal/monitor/event-handler.js +80 -1
- package/dist/slack/monitor/media.js +85 -15
- package/dist/tailscale/detect.js +145 -0
- package/dist/telegram/bot/helpers.js +109 -28
- package/dist/telegram/bot-handlers.js +144 -3
- package/dist/telegram/bot-message-context.js +38 -11
- package/dist/telegram/bot-message-dispatch.js +48 -15
- package/dist/telegram/bot-native-commands.js +86 -29
- package/dist/telegram/bot.js +30 -29
- package/dist/telegram/model-buttons.js +163 -0
- package/dist/telegram/monitor.js +110 -85
- package/dist/telegram/send.js +129 -47
- package/dist/terminal/restore.js +45 -0
- package/dist/test-helpers/state-dir-env.js +16 -0
- package/dist/test-helpers/workspace.js +11 -0
- package/dist/test-utils/channel-plugins.js +82 -0
- package/dist/test-utils/ports.js +73 -0
- package/dist/tts/tts.js +12 -6
- package/dist/tui/tui-session-actions.js +166 -54
- package/dist/utils/fetch-timeout.js +20 -0
- package/dist/utils/normalize-secret-input.js +19 -0
- package/dist/utils/shell-argv.js +61 -0
- package/dist/utils/transcript-tools.js +58 -0
- package/dist/utils.js +55 -14
- package/dist/version.js +42 -5
- package/dist/web/qr-image.js +1 -61
- package/dist/wizard/onboarding.finalize.js +7 -7
- package/dist/wizard/onboarding.js +3 -3
- package/docs/RELEASE_WORKFOTS_COMPARISON.md +3 -3
- package/docs/_config.yml +2 -2
- package/docs/_layouts/default.html +9 -9
- package/docs/concepts/typebox.md +1 -1
- package/docs/docs.json +1 -1
- package/docs/northflank.mdx +7 -7
- package/docs/railway.mdx +3 -3
- package/docs/render.mdx +5 -5
- package/docs/start/lore.md +2 -2
- package/extensions/bluebubbles/index.ts +2 -2
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/bluebubbles/src/accounts.ts +8 -8
- package/extensions/bluebubbles/src/actions.test.ts +22 -22
- package/extensions/bluebubbles/src/actions.ts +5 -5
- package/extensions/bluebubbles/src/attachments.ts +2 -2
- package/extensions/bluebubbles/src/channel.ts +16 -16
- package/extensions/bluebubbles/src/chat.ts +2 -2
- package/extensions/bluebubbles/src/media-send.ts +2 -2
- package/extensions/bluebubbles/src/monitor.test.ts +46 -46
- package/extensions/bluebubbles/src/monitor.ts +5 -5
- package/extensions/bluebubbles/src/onboarding.ts +7 -7
- package/extensions/bluebubbles/src/reactions.ts +2 -2
- package/extensions/bluebubbles/src/send.ts +2 -2
- package/extensions/copilot-proxy/README.md +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/index.ts +2 -2
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/diagnostics-otel/src/service.ts +3 -3
- package/extensions/discord/index.ts +2 -2
- package/extensions/discord/package.json +1 -1
- package/extensions/google-antigravity-auth/README.md +1 -1
- package/extensions/google-antigravity-auth/index.ts +1 -1
- package/extensions/google-antigravity-auth/package.json +1 -1
- package/extensions/google-gemini-cli-auth/README.md +1 -1
- package/extensions/google-gemini-cli-auth/oauth.ts +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/index.ts +3 -3
- package/extensions/googlechat/package.json +1 -1
- package/extensions/googlechat/src/accounts.ts +8 -8
- package/extensions/googlechat/src/actions.ts +6 -6
- package/extensions/googlechat/src/channel.ts +21 -21
- package/extensions/googlechat/src/monitor.ts +8 -8
- package/extensions/googlechat/src/onboarding.ts +10 -10
- package/extensions/imessage/index.ts +2 -2
- package/extensions/imessage/package.json +1 -1
- package/extensions/line/index.ts +2 -2
- package/extensions/line/package.json +1 -1
- package/extensions/line/src/card-command.ts +2 -2
- package/extensions/line/src/channel.logout.test.ts +4 -4
- package/extensions/line/src/channel.sendPayload.test.ts +8 -8
- package/extensions/line/src/channel.ts +3 -3
- package/extensions/llm-task/README.md +3 -3
- package/extensions/llm-task/index.ts +2 -2
- package/extensions/llm-task/package.json +1 -1
- package/extensions/llm-task/src/llm-task-tool.ts +4 -4
- package/extensions/lobster/README.md +6 -6
- package/extensions/lobster/index.ts +2 -2
- package/extensions/lobster/src/lobster-tool.test.ts +4 -4
- package/extensions/lobster/src/lobster-tool.ts +2 -2
- package/extensions/matrix/index.ts +2 -2
- package/extensions/matrix/package.json +1 -1
- package/extensions/matrix/src/matrix/client/config.ts +1 -1
- package/extensions/matrix/src/matrix/monitor/handler.ts +1 -1
- package/extensions/matrix/src/onboarding.ts +1 -1
- package/extensions/mattermost/index.ts +2 -2
- package/extensions/mattermost/package.json +1 -1
- package/extensions/mattermost/src/mattermost/accounts.ts +8 -8
- package/extensions/mattermost/src/mattermost/monitor-helpers.ts +5 -5
- package/extensions/mattermost/src/mattermost/monitor.ts +2 -2
- package/extensions/mattermost/src/onboarding-helpers.ts +3 -3
- package/extensions/mattermost/src/onboarding.ts +2 -2
- package/extensions/memory-core/index.ts +2 -2
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/index.ts +3 -3
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/msteams/index.ts +2 -2
- package/extensions/msteams/package.json +1 -1
- package/extensions/msteams/src/channel.directory.test.ts +2 -2
- package/extensions/msteams/src/channel.ts +2 -2
- package/extensions/msteams/src/graph-upload.ts +4 -4
- package/extensions/msteams/src/monitor-handler.ts +2 -2
- package/extensions/msteams/src/monitor.ts +2 -2
- package/extensions/msteams/src/onboarding.ts +9 -9
- package/extensions/msteams/src/reply-dispatcher.ts +2 -2
- package/extensions/msteams/src/send-context.ts +2 -2
- package/extensions/msteams/src/send.ts +4 -4
- package/extensions/nextcloud-talk/index.ts +2 -2
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nextcloud-talk/src/channel.ts +7 -7
- package/extensions/nextcloud-talk/src/inbound.ts +7 -7
- package/extensions/nextcloud-talk/src/onboarding.ts +1 -1
- package/extensions/nostr/README.md +2 -2
- package/extensions/nostr/index.ts +5 -5
- package/extensions/nostr/package.json +1 -1
- package/extensions/nostr/src/types.ts +4 -4
- package/extensions/open-prose/index.ts +2 -2
- package/extensions/qwen-portal-auth/README.md +1 -1
- package/extensions/signal/index.ts +2 -2
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/index.ts +2 -2
- package/extensions/slack/package.json +1 -1
- package/extensions/telegram/index.ts +2 -2
- package/extensions/telegram/package.json +1 -1
- package/extensions/telegram/src/channel.ts +2 -2
- package/extensions/tlon/README.md +2 -2
- package/extensions/tlon/index.ts +2 -2
- package/extensions/tlon/package.json +1 -1
- package/extensions/tlon/src/channel.ts +13 -13
- package/extensions/tlon/src/monitor/index.ts +3 -3
- package/extensions/tlon/src/onboarding.ts +3 -3
- package/extensions/tlon/src/types.ts +3 -3
- package/extensions/twitch/README.md +1 -1
- package/extensions/twitch/index.ts +2 -2
- package/extensions/twitch/package.json +1 -1
- package/extensions/twitch/src/config.ts +3 -3
- package/extensions/twitch/src/monitor.ts +3 -3
- package/extensions/twitch/src/onboarding.ts +9 -9
- package/extensions/twitch/src/outbound.test.ts +2 -2
- package/extensions/twitch/src/plugin.test.ts +2 -2
- package/extensions/twitch/src/plugin.ts +8 -8
- package/extensions/twitch/src/send.test.ts +2 -2
- package/extensions/twitch/src/send.ts +4 -4
- package/extensions/twitch/src/token.test.ts +8 -8
- package/extensions/twitch/src/token.ts +3 -3
- package/extensions/twitch/src/twitch-client.ts +3 -3
- package/extensions/twitch/src/types.ts +3 -3
- package/extensions/twitch/src/utils/markdown.ts +1 -1
- package/extensions/voice-call/README.md +3 -3
- package/extensions/voice-call/package.json +1 -1
- package/extensions/voice-call/src/core-bridge.ts +2 -2
- package/extensions/voice-call/src/response-generator.ts +1 -1
- package/extensions/whatsapp/index.ts +2 -2
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/README.md +1 -1
- package/extensions/zalo/index.ts +2 -2
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalo/src/accounts.ts +8 -8
- package/extensions/zalo/src/actions.ts +4 -4
- package/extensions/zalo/src/channel.directory.test.ts +2 -2
- package/extensions/zalo/src/channel.ts +18 -18
- package/extensions/zalo/src/monitor.ts +9 -9
- package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
- package/extensions/zalo/src/onboarding.ts +24 -24
- package/extensions/zalo/src/send.ts +2 -2
- package/extensions/zalouser/README.md +2 -2
- package/extensions/zalouser/index.ts +2 -2
- package/extensions/zalouser/package.json +1 -1
- package/extensions/zalouser/src/accounts.ts +9 -9
- package/extensions/zalouser/src/channel.ts +24 -24
- package/extensions/zalouser/src/monitor.ts +4 -4
- package/extensions/zalouser/src/onboarding.ts +28 -28
- package/package.json +13 -251
- package/skills/nano-banana-pro/scripts/generate_image.py +1 -1
- package/skills/tmux/scripts/find-sessions.sh +1 -1
- package/CHANGELOG.md +0 -102
- package/README-header.png +0 -0
- package/git-hooks/pre-commit +0 -4
- package/scripts/format-staged.js +0 -148
- package/scripts/postinstall.js +0 -300
- package/scripts/setup-git-hooks.js +0 -96
package/dist/cli/security-cli.js
CHANGED
|
@@ -45,7 +45,7 @@ export function registerSecurityCli(program) {
|
|
|
45
45
|
const heading = (text) => (rich ? theme.heading(text) : text);
|
|
46
46
|
const muted = (text) => (rich ? theme.muted(text) : text);
|
|
47
47
|
const lines = [];
|
|
48
|
-
lines.push(heading("
|
|
48
|
+
lines.push(heading("Poolbot security audit"));
|
|
49
49
|
lines.push(muted(`Summary: ${formatSummary(report.summary)}`));
|
|
50
50
|
lines.push(muted(`Run deeper: ${formatCliCommand("poolbot security audit --deep")}`));
|
|
51
51
|
if (opts.fix) {
|
package/dist/cli/tagline.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const DEFAULT_TAGLINE = "All your chats, one
|
|
1
|
+
const DEFAULT_TAGLINE = "All your chats, one Poolbot.";
|
|
2
2
|
const HOLIDAY_TAGLINES = {
|
|
3
3
|
newYear: "New Year's Day: New year, new config—same old EADDRINUSE, but this time we resolve it like grown-ups.",
|
|
4
4
|
lunarNewYear: "Lunar New Year: May your builds be lucky, your branches prosperous, and your merge conflicts chased away with fireworks.",
|
package/dist/cli/update-cli.js
CHANGED
|
@@ -1,26 +1,32 @@
|
|
|
1
1
|
import { confirm, isCancel, select, spinner } from "@clack/prompts";
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
2
3
|
import fs from "node:fs/promises";
|
|
3
4
|
import os from "node:os";
|
|
4
5
|
import path from "node:path";
|
|
6
|
+
import { doctorCommand } from "../commands/doctor.js";
|
|
7
|
+
import { formatUpdateAvailableHint, formatUpdateOneLiner, resolveUpdateAvailability, } from "../commands/status.update.js";
|
|
5
8
|
import { readConfigFileSnapshot, writeConfigFile } from "../config/config.js";
|
|
9
|
+
import { resolveStateDir } from "../config/paths.js";
|
|
10
|
+
import { formatDurationPrecise } from "../infra/format-time/format-duration.js";
|
|
6
11
|
import { resolvePoolBotPackageRoot } from "../infra/poolbot-root.js";
|
|
7
|
-
import {
|
|
12
|
+
import { trimLogTail } from "../infra/restart-sentinel.js";
|
|
8
13
|
import { parseSemver } from "../infra/runtime-guard.js";
|
|
9
|
-
import { runGatewayUpdate, } from "../infra/update-runner.js";
|
|
10
|
-
import { detectGlobalInstallManagerByPresence, detectGlobalInstallManagerForRoot, globalInstallArgs, resolveGlobalPackageRoot, } from "../infra/update-global.js";
|
|
11
14
|
import { channelToNpmTag, DEFAULT_GIT_CHANNEL, DEFAULT_PACKAGE_CHANNEL, formatUpdateChannelLabel, normalizeUpdateChannel, resolveEffectiveUpdateChannel, } from "../infra/update-channels.js";
|
|
12
|
-
import {
|
|
15
|
+
import { checkUpdateStatus, compareSemverStrings, fetchNpmTagVersion, resolveNpmChannelTag, } from "../infra/update-check.js";
|
|
16
|
+
import { detectGlobalInstallManagerByPresence, detectGlobalInstallManagerForRoot, cleanupGlobalRenameDirs, globalInstallArgs, resolveGlobalPackageRoot, } from "../infra/update-global.js";
|
|
17
|
+
import { runGatewayUpdate, } from "../infra/update-runner.js";
|
|
18
|
+
import { syncPluginsForUpdateChannel, updateNpmInstalledPlugins } from "../plugins/update.js";
|
|
19
|
+
import { runCommandWithTimeout } from "../process/exec.js";
|
|
13
20
|
import { defaultRuntime } from "../runtime.js";
|
|
14
21
|
import { formatDocsLink } from "../terminal/links.js";
|
|
15
|
-
import { formatCliCommand } from "./command-format.js";
|
|
16
|
-
import { replaceCliName, resolveCliName } from "./cli-name.js";
|
|
17
22
|
import { stylePromptHint, stylePromptMessage } from "../terminal/prompt-style.js";
|
|
18
|
-
import { theme } from "../terminal/theme.js";
|
|
19
23
|
import { renderTable } from "../terminal/table.js";
|
|
24
|
+
import { theme } from "../terminal/theme.js";
|
|
25
|
+
import { pathExists } from "../utils.js";
|
|
26
|
+
import { replaceCliName, resolveCliName } from "./cli-name.js";
|
|
27
|
+
import { formatCliCommand } from "./command-format.js";
|
|
28
|
+
import { runDaemonRestart } from "./daemon-cli.js";
|
|
20
29
|
import { formatHelpExamples } from "./help-format.js";
|
|
21
|
-
import { formatUpdateAvailableHint, formatUpdateOneLiner, resolveUpdateAvailability, } from "../commands/status.update.js";
|
|
22
|
-
import { syncPluginsForUpdateChannel, updateNpmInstalledPlugins } from "../plugins/update.js";
|
|
23
|
-
import { runCommandWithTimeout } from "../process/exec.js";
|
|
24
30
|
const STEP_LABELS = {
|
|
25
31
|
"clean check": "Working directory is clean",
|
|
26
32
|
"upstream check": "Upstream branch exists",
|
|
@@ -33,7 +39,10 @@ const STEP_LABELS = {
|
|
|
33
39
|
"preflight cleanup": "Cleaning preflight worktree",
|
|
34
40
|
"deps install": "Installing dependencies",
|
|
35
41
|
build: "Building",
|
|
36
|
-
"ui:build": "Building UI",
|
|
42
|
+
"ui:build": "Building UI assets",
|
|
43
|
+
"ui:build (post-doctor repair)": "Restoring missing UI assets",
|
|
44
|
+
"ui assets verify": "Validating UI assets",
|
|
45
|
+
"poolbot doctor entry": "Checking doctor entrypoint",
|
|
37
46
|
"poolbot doctor": "Running doctor checks",
|
|
38
47
|
"git rev-parse HEAD (after)": "Verifying update",
|
|
39
48
|
"global update": "Updating via package manager",
|
|
@@ -63,18 +72,20 @@ const UPDATE_QUIPS = [
|
|
|
63
72
|
];
|
|
64
73
|
const MAX_LOG_CHARS = 8000;
|
|
65
74
|
const DEFAULT_PACKAGE_NAME = "poolbot";
|
|
66
|
-
const CORE_PACKAGE_NAMES = new Set([DEFAULT_PACKAGE_NAME
|
|
75
|
+
const CORE_PACKAGE_NAMES = new Set([DEFAULT_PACKAGE_NAME]);
|
|
67
76
|
const CLI_NAME = resolveCliName();
|
|
68
77
|
const CLAWDBOT_REPO_URL = "https://github.com/poolbot/poolbot.git";
|
|
69
|
-
const DEFAULT_GIT_DIR = path.join(os.homedir(), "poolbot");
|
|
70
78
|
function normalizeTag(value) {
|
|
71
|
-
if (!value)
|
|
79
|
+
if (!value) {
|
|
72
80
|
return null;
|
|
81
|
+
}
|
|
73
82
|
const trimmed = value.trim();
|
|
74
|
-
if (!trimmed)
|
|
83
|
+
if (!trimmed) {
|
|
75
84
|
return null;
|
|
76
|
-
|
|
85
|
+
}
|
|
86
|
+
if (trimmed.startsWith("poolbot@")) {
|
|
77
87
|
return trimmed.slice("poolbot@".length);
|
|
88
|
+
}
|
|
78
89
|
if (trimmed.startsWith(`${DEFAULT_PACKAGE_NAME}@`)) {
|
|
79
90
|
return trimmed.slice(`${DEFAULT_PACKAGE_NAME}@`.length);
|
|
80
91
|
}
|
|
@@ -85,8 +96,9 @@ function pickUpdateQuip() {
|
|
|
85
96
|
}
|
|
86
97
|
function normalizeVersionTag(tag) {
|
|
87
98
|
const trimmed = tag.trim();
|
|
88
|
-
if (!trimmed)
|
|
99
|
+
if (!trimmed) {
|
|
89
100
|
return null;
|
|
101
|
+
}
|
|
90
102
|
const cleaned = trimmed.startsWith("v") ? trimmed.slice(1) : trimmed;
|
|
91
103
|
return parseSemver(cleaned) ? cleaned : null;
|
|
92
104
|
}
|
|
@@ -102,8 +114,9 @@ async function readPackageVersion(root) {
|
|
|
102
114
|
}
|
|
103
115
|
async function resolveTargetVersion(tag, timeoutMs) {
|
|
104
116
|
const direct = normalizeVersionTag(tag);
|
|
105
|
-
if (direct)
|
|
117
|
+
if (direct) {
|
|
106
118
|
return direct;
|
|
119
|
+
}
|
|
107
120
|
const res = await fetchNpmTagVersion({ tag, timeoutMs });
|
|
108
121
|
return res.version ?? null;
|
|
109
122
|
}
|
|
@@ -131,13 +144,100 @@ async function isCorePackage(root) {
|
|
|
131
144
|
const name = await readPackageName(root);
|
|
132
145
|
return Boolean(name && CORE_PACKAGE_NAMES.has(name));
|
|
133
146
|
}
|
|
134
|
-
async function
|
|
147
|
+
async function tryWriteCompletionCache(root, jsonMode) {
|
|
135
148
|
try {
|
|
136
|
-
|
|
137
|
-
|
|
149
|
+
const binPath = path.join(root, "poolbot.mjs");
|
|
150
|
+
if (!(await pathExists(binPath))) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const result = spawnSync(resolveNodeRunner(), [binPath, "completion", "--write-state"], {
|
|
154
|
+
cwd: root,
|
|
155
|
+
env: process.env,
|
|
156
|
+
encoding: "utf-8",
|
|
157
|
+
});
|
|
158
|
+
if (result.error) {
|
|
159
|
+
if (!jsonMode) {
|
|
160
|
+
defaultRuntime.log(theme.warn(`Completion cache update failed: ${String(result.error)}`));
|
|
161
|
+
}
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (result.status !== 0 && !jsonMode) {
|
|
165
|
+
const stderr = (result.stderr ?? "").toString().trim();
|
|
166
|
+
const detail = stderr ? ` (${stderr})` : "";
|
|
167
|
+
defaultRuntime.log(theme.warn(`Completion cache update failed${detail}.`));
|
|
168
|
+
}
|
|
138
169
|
}
|
|
139
170
|
catch {
|
|
140
|
-
|
|
171
|
+
// completion-cli module may not exist yet; silently ignore
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/** Check if shell completion is installed and prompt user to install if not. */
|
|
175
|
+
async function tryInstallShellCompletion(opts) {
|
|
176
|
+
if (opts.jsonMode || !process.stdin.isTTY) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
const { checkShellCompletionStatus, ensureCompletionCacheExists } =
|
|
181
|
+
// @ts-expect-error module may not exist yet
|
|
182
|
+
await import("../commands/doctor-completion.js");
|
|
183
|
+
const status = await checkShellCompletionStatus(CLI_NAME);
|
|
184
|
+
// Profile uses slow dynamic pattern - upgrade to cached version
|
|
185
|
+
if (status.usesSlowPattern) {
|
|
186
|
+
defaultRuntime.log(theme.muted("Upgrading shell completion to cached version..."));
|
|
187
|
+
// Ensure cache exists first
|
|
188
|
+
const cacheGenerated = await ensureCompletionCacheExists(CLI_NAME);
|
|
189
|
+
if (cacheGenerated) {
|
|
190
|
+
try {
|
|
191
|
+
const { installCompletion } =
|
|
192
|
+
// @ts-expect-error module may not exist yet
|
|
193
|
+
await import("./completion-cli.js");
|
|
194
|
+
await installCompletion(status.shell, true, CLI_NAME);
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// completion-cli module may not exist yet
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
// Profile has completion but no cache - auto-fix silently
|
|
203
|
+
if (status.profileInstalled && !status.cacheExists) {
|
|
204
|
+
defaultRuntime.log(theme.muted("Regenerating shell completion cache..."));
|
|
205
|
+
await ensureCompletionCacheExists(CLI_NAME);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
// No completion at all - prompt to install
|
|
209
|
+
if (!status.profileInstalled) {
|
|
210
|
+
defaultRuntime.log("");
|
|
211
|
+
defaultRuntime.log(theme.heading("Shell completion"));
|
|
212
|
+
const shouldInstall = await confirm({
|
|
213
|
+
message: stylePromptMessage(`Enable ${status.shell} shell completion for ${CLI_NAME}?`),
|
|
214
|
+
initialValue: true,
|
|
215
|
+
});
|
|
216
|
+
if (isCancel(shouldInstall) || !shouldInstall) {
|
|
217
|
+
if (!opts.skipPrompt) {
|
|
218
|
+
defaultRuntime.log(theme.muted(`Skipped. Run \`${replaceCliName(formatCliCommand("poolbot completion --install"), CLI_NAME)}\` later to enable.`));
|
|
219
|
+
}
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
// Generate cache first (required for fast shell startup)
|
|
223
|
+
const cacheGenerated = await ensureCompletionCacheExists(CLI_NAME);
|
|
224
|
+
if (!cacheGenerated) {
|
|
225
|
+
defaultRuntime.log(theme.warn("Failed to generate completion cache."));
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
try {
|
|
229
|
+
const { installCompletion } =
|
|
230
|
+
// @ts-expect-error module may not exist yet
|
|
231
|
+
await import("./completion-cli.js");
|
|
232
|
+
await installCompletion(status.shell, opts.skipPrompt, CLI_NAME);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
// completion-cli module may not exist yet
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// doctor-completion module may not exist yet; silently ignore
|
|
141
241
|
}
|
|
142
242
|
}
|
|
143
243
|
async function isEmptyDir(targetPath) {
|
|
@@ -151,14 +251,19 @@ async function isEmptyDir(targetPath) {
|
|
|
151
251
|
}
|
|
152
252
|
function resolveGitInstallDir() {
|
|
153
253
|
const override = process.env.CLAWDBOT_GIT_DIR?.trim();
|
|
154
|
-
if (override)
|
|
254
|
+
if (override) {
|
|
155
255
|
return path.resolve(override);
|
|
156
|
-
|
|
256
|
+
}
|
|
257
|
+
return resolveDefaultGitDir();
|
|
258
|
+
}
|
|
259
|
+
function resolveDefaultGitDir() {
|
|
260
|
+
return resolveStateDir(process.env, os.homedir);
|
|
157
261
|
}
|
|
158
262
|
function resolveNodeRunner() {
|
|
159
263
|
const base = path.basename(process.execPath).toLowerCase();
|
|
160
|
-
if (base === "node" || base === "node.exe")
|
|
264
|
+
if (base === "node" || base === "node.exe") {
|
|
161
265
|
return process.execPath;
|
|
266
|
+
}
|
|
162
267
|
return "node";
|
|
163
268
|
}
|
|
164
269
|
async function runUpdateStep(params) {
|
|
@@ -230,8 +335,9 @@ async function resolveGlobalManager(params) {
|
|
|
230
335
|
};
|
|
231
336
|
if (params.installKind === "package") {
|
|
232
337
|
const detected = await detectGlobalInstallManagerForRoot(runCommand, params.root, params.timeoutMs);
|
|
233
|
-
if (detected)
|
|
338
|
+
if (detected) {
|
|
234
339
|
return detected;
|
|
340
|
+
}
|
|
235
341
|
}
|
|
236
342
|
const byPresence = await detectGlobalInstallManagerByPresence(runCommand, params.timeoutMs);
|
|
237
343
|
return byPresence ?? "npm";
|
|
@@ -317,7 +423,7 @@ export async function updateStatusCommand(opts) {
|
|
|
317
423
|
Value: updateAvailability.available ? theme.warn(`available · ${updateLine}`) : updateLine,
|
|
318
424
|
},
|
|
319
425
|
];
|
|
320
|
-
defaultRuntime.log(theme.heading("
|
|
426
|
+
defaultRuntime.log(theme.heading("PoolBot update status"));
|
|
321
427
|
defaultRuntime.log("");
|
|
322
428
|
defaultRuntime.log(renderTable({
|
|
323
429
|
width: tableWidth,
|
|
@@ -350,10 +456,11 @@ function createUpdateProgress(enabled) {
|
|
|
350
456
|
currentSpinner.start(theme.accent(getStepLabel(step)));
|
|
351
457
|
},
|
|
352
458
|
onStepComplete: (step) => {
|
|
353
|
-
if (!currentSpinner)
|
|
459
|
+
if (!currentSpinner) {
|
|
354
460
|
return;
|
|
461
|
+
}
|
|
355
462
|
const label = getStepLabel(step);
|
|
356
|
-
const duration = theme.muted(`(${
|
|
463
|
+
const duration = theme.muted(`(${formatDurationPrecise(step.durationMs)})`);
|
|
357
464
|
const icon = step.exitCode === 0 ? theme.success("\u2713") : theme.error("\u2717");
|
|
358
465
|
currentSpinner.stop(`${icon} ${label} ${duration}`);
|
|
359
466
|
currentSpinner = null;
|
|
@@ -377,17 +484,13 @@ function createUpdateProgress(enabled) {
|
|
|
377
484
|
},
|
|
378
485
|
};
|
|
379
486
|
}
|
|
380
|
-
function formatDuration(ms) {
|
|
381
|
-
if (ms < 1000)
|
|
382
|
-
return `${ms}ms`;
|
|
383
|
-
const seconds = (ms / 1000).toFixed(1);
|
|
384
|
-
return `${seconds}s`;
|
|
385
|
-
}
|
|
386
487
|
function formatStepStatus(exitCode) {
|
|
387
|
-
if (exitCode === 0)
|
|
488
|
+
if (exitCode === 0) {
|
|
388
489
|
return theme.success("\u2713");
|
|
389
|
-
|
|
490
|
+
}
|
|
491
|
+
if (exitCode === null) {
|
|
390
492
|
return theme.warn("?");
|
|
493
|
+
}
|
|
391
494
|
return theme.error("\u2717");
|
|
392
495
|
}
|
|
393
496
|
const selectStyled = (params) => select({
|
|
@@ -422,7 +525,7 @@ function printResult(result, opts) {
|
|
|
422
525
|
defaultRuntime.log(theme.heading("Steps:"));
|
|
423
526
|
for (const step of result.steps) {
|
|
424
527
|
const status = formatStepStatus(step.exitCode);
|
|
425
|
-
const duration = theme.muted(`(${
|
|
528
|
+
const duration = theme.muted(`(${formatDurationPrecise(step.durationMs)})`);
|
|
426
529
|
defaultRuntime.log(` ${status} ${step.name} ${duration}`);
|
|
427
530
|
if (step.exitCode !== 0 && step.stderrTail) {
|
|
428
531
|
const lines = step.stderrTail.split("\n").slice(0, 5);
|
|
@@ -435,7 +538,7 @@ function printResult(result, opts) {
|
|
|
435
538
|
}
|
|
436
539
|
}
|
|
437
540
|
defaultRuntime.log("");
|
|
438
|
-
defaultRuntime.log(`Total time: ${theme.muted(
|
|
541
|
+
defaultRuntime.log(`Total time: ${theme.muted(formatDurationPrecise(result.durationMs))}`);
|
|
439
542
|
}
|
|
440
543
|
export async function updateCommand(opts) {
|
|
441
544
|
process.noDeprecation = true;
|
|
@@ -512,7 +615,7 @@ export async function updateCommand(opts) {
|
|
|
512
615
|
message: stylePromptMessage(message),
|
|
513
616
|
initialValue: false,
|
|
514
617
|
});
|
|
515
|
-
if (isCancel(ok) || ok
|
|
618
|
+
if (isCancel(ok) || !ok) {
|
|
516
619
|
if (!opts.json) {
|
|
517
620
|
defaultRuntime.log(theme.muted("Update cancelled."));
|
|
518
621
|
}
|
|
@@ -540,7 +643,7 @@ export async function updateCommand(opts) {
|
|
|
540
643
|
}
|
|
541
644
|
const showProgress = !opts.json && process.stdout.isTTY;
|
|
542
645
|
if (!opts.json) {
|
|
543
|
-
defaultRuntime.log(theme.heading("Updating
|
|
646
|
+
defaultRuntime.log(theme.heading("Updating PoolBot..."));
|
|
544
647
|
defaultRuntime.log("");
|
|
545
648
|
}
|
|
546
649
|
const { progress, stop } = createUpdateProgress(showProgress);
|
|
@@ -560,6 +663,12 @@ export async function updateCommand(opts) {
|
|
|
560
663
|
const packageName = (pkgRoot ? await readPackageName(pkgRoot) : await readPackageName(root)) ??
|
|
561
664
|
DEFAULT_PACKAGE_NAME;
|
|
562
665
|
const beforeVersion = pkgRoot ? await readPackageVersion(pkgRoot) : null;
|
|
666
|
+
if (pkgRoot) {
|
|
667
|
+
await cleanupGlobalRenameDirs({
|
|
668
|
+
globalRoot: path.dirname(pkgRoot),
|
|
669
|
+
packageName,
|
|
670
|
+
});
|
|
671
|
+
}
|
|
563
672
|
const updateStep = await runUpdateStep({
|
|
564
673
|
name: "global update",
|
|
565
674
|
argv: globalInstallArgs(manager, `${packageName}@${tag}`),
|
|
@@ -666,7 +775,7 @@ export async function updateCommand(opts) {
|
|
|
666
775
|
defaultRuntime.log(theme.warn("Skipped: working directory has uncommitted changes. Commit or stash them first."));
|
|
667
776
|
}
|
|
668
777
|
if (result.reason === "not-git-install") {
|
|
669
|
-
defaultRuntime.log(theme.warn(`Skipped: this
|
|
778
|
+
defaultRuntime.log(theme.warn(`Skipped: this PoolBot install isn't a git checkout, and the package manager couldn't be detected. Update via your package manager, then run \`${replaceCliName(formatCliCommand("poolbot doctor"), CLI_NAME)}\` and \`${replaceCliName(formatCliCommand("poolbot gateway restart"), CLI_NAME)}\`.`));
|
|
670
779
|
defaultRuntime.log(theme.muted(`Examples: \`${replaceCliName("npm i -g poolbot@latest", CLI_NAME)}\` or \`${replaceCliName("pnpm add -g poolbot@latest", CLI_NAME)}\``));
|
|
671
780
|
}
|
|
672
781
|
defaultRuntime.exit(0);
|
|
@@ -702,8 +811,9 @@ export async function updateCommand(opts) {
|
|
|
702
811
|
}
|
|
703
812
|
if (!opts.json) {
|
|
704
813
|
const summarizeList = (list) => {
|
|
705
|
-
if (list.length <= 6)
|
|
814
|
+
if (list.length <= 6) {
|
|
706
815
|
return list.join(", ");
|
|
816
|
+
}
|
|
707
817
|
return `${list.slice(0, 6).join(", ")} +${list.length - 6} more`;
|
|
708
818
|
};
|
|
709
819
|
if (syncResult.summary.switchedToBundled.length > 0) {
|
|
@@ -727,15 +837,18 @@ export async function updateCommand(opts) {
|
|
|
727
837
|
}
|
|
728
838
|
else {
|
|
729
839
|
const parts = [`${updated} updated`, `${unchanged} unchanged`];
|
|
730
|
-
if (failed > 0)
|
|
840
|
+
if (failed > 0) {
|
|
731
841
|
parts.push(`${failed} failed`);
|
|
732
|
-
|
|
842
|
+
}
|
|
843
|
+
if (skipped > 0) {
|
|
733
844
|
parts.push(`${skipped} skipped`);
|
|
845
|
+
}
|
|
734
846
|
defaultRuntime.log(theme.muted(`npm plugins: ${parts.join(", ")}.`));
|
|
735
847
|
}
|
|
736
848
|
for (const outcome of npmResult.outcomes) {
|
|
737
|
-
if (outcome.status !== "error")
|
|
849
|
+
if (outcome.status !== "error") {
|
|
738
850
|
continue;
|
|
851
|
+
}
|
|
739
852
|
defaultRuntime.log(theme.error(outcome.message));
|
|
740
853
|
}
|
|
741
854
|
}
|
|
@@ -743,6 +856,12 @@ export async function updateCommand(opts) {
|
|
|
743
856
|
else if (!opts.json) {
|
|
744
857
|
defaultRuntime.log(theme.warn("Skipping plugin updates: config is invalid."));
|
|
745
858
|
}
|
|
859
|
+
await tryWriteCompletionCache(root, Boolean(opts.json));
|
|
860
|
+
// Offer to install shell completion if not already installed
|
|
861
|
+
await tryInstallShellCompletion({
|
|
862
|
+
jsonMode: Boolean(opts.json),
|
|
863
|
+
skipPrompt: Boolean(opts.yes),
|
|
864
|
+
});
|
|
746
865
|
// Restart service if requested
|
|
747
866
|
if (shouldRestart) {
|
|
748
867
|
if (!opts.json) {
|
|
@@ -750,16 +869,16 @@ export async function updateCommand(opts) {
|
|
|
750
869
|
defaultRuntime.log(theme.heading("Restarting service..."));
|
|
751
870
|
}
|
|
752
871
|
try {
|
|
753
|
-
const { runDaemonRestart } = await import("./daemon-cli.js");
|
|
754
872
|
const restarted = await runDaemonRestart();
|
|
755
873
|
if (!opts.json && restarted) {
|
|
756
874
|
defaultRuntime.log(theme.success("Daemon restarted successfully."));
|
|
757
875
|
defaultRuntime.log("");
|
|
758
876
|
process.env.CLAWDBOT_UPDATE_IN_PROGRESS = "1";
|
|
759
877
|
try {
|
|
760
|
-
const { doctorCommand } = await import("../commands/doctor.js");
|
|
761
878
|
const interactiveDoctor = Boolean(process.stdin.isTTY) && !opts.json && opts.yes !== true;
|
|
762
|
-
await doctorCommand(defaultRuntime, {
|
|
879
|
+
await doctorCommand(defaultRuntime, {
|
|
880
|
+
nonInteractive: !interactiveDoctor,
|
|
881
|
+
});
|
|
763
882
|
}
|
|
764
883
|
catch (err) {
|
|
765
884
|
defaultRuntime.log(theme.warn(`Doctor failed: ${String(err)}`));
|
|
@@ -880,7 +999,7 @@ export async function updateWizardCommand(opts = {}) {
|
|
|
880
999
|
message: stylePromptMessage(`Create a git checkout at ${gitDir}? (override via CLAWDBOT_GIT_DIR)`),
|
|
881
1000
|
initialValue: true,
|
|
882
1001
|
});
|
|
883
|
-
if (isCancel(ok) || ok
|
|
1002
|
+
if (isCancel(ok) || !ok) {
|
|
884
1003
|
defaultRuntime.log(theme.muted("Update cancelled."));
|
|
885
1004
|
defaultRuntime.exit(0);
|
|
886
1005
|
return;
|
|
@@ -911,7 +1030,7 @@ export async function updateWizardCommand(opts = {}) {
|
|
|
911
1030
|
export function registerUpdateCli(program) {
|
|
912
1031
|
const update = program
|
|
913
1032
|
.command("update")
|
|
914
|
-
.description("Update
|
|
1033
|
+
.description("Update PoolBot to the latest version")
|
|
915
1034
|
.option("--json", "Output result as JSON", false)
|
|
916
1035
|
.option("--no-restart", "Skip restarting the gateway service after a successful update")
|
|
917
1036
|
.option("--channel <stable|beta|dev>", "Persist update channel (git + npm)")
|
|
@@ -981,7 +1100,9 @@ ${theme.muted("Docs:")} ${formatDocsLink("/cli/update", "docs.molt.bot/cli/updat
|
|
|
981
1100
|
.addHelpText("after", `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/update", "docs.molt.bot/cli/update")}\n`)
|
|
982
1101
|
.action(async (opts) => {
|
|
983
1102
|
try {
|
|
984
|
-
await updateWizardCommand({
|
|
1103
|
+
await updateWizardCommand({
|
|
1104
|
+
timeout: opts.timeout,
|
|
1105
|
+
});
|
|
985
1106
|
}
|
|
986
1107
|
catch (err) {
|
|
987
1108
|
defaultRuntime.error(String(err));
|
package/dist/cli/webhooks-cli.js
CHANGED
|
@@ -12,14 +12,14 @@ export function registerWebhooksCli(program) {
|
|
|
12
12
|
const gmail = webhooks.command("gmail").description("Gmail Pub/Sub hooks (via gogcli)");
|
|
13
13
|
gmail
|
|
14
14
|
.command("setup")
|
|
15
|
-
.description("Configure Gmail watch + Pub/Sub +
|
|
15
|
+
.description("Configure Gmail watch + Pub/Sub + Poolbot hooks")
|
|
16
16
|
.requiredOption("--account <email>", "Gmail account to watch")
|
|
17
17
|
.option("--project <id>", "GCP project id (OAuth client owner)")
|
|
18
18
|
.option("--topic <name>", "Pub/Sub topic name", DEFAULT_GMAIL_TOPIC)
|
|
19
19
|
.option("--subscription <name>", "Pub/Sub subscription name", DEFAULT_GMAIL_SUBSCRIPTION)
|
|
20
20
|
.option("--label <label>", "Gmail label to watch", DEFAULT_GMAIL_LABEL)
|
|
21
|
-
.option("--hook-url <url>", "
|
|
22
|
-
.option("--hook-token <token>", "
|
|
21
|
+
.option("--hook-url <url>", "Poolbot hook URL")
|
|
22
|
+
.option("--hook-token <token>", "Poolbot hook token")
|
|
23
23
|
.option("--push-token <token>", "Push token for gog watch serve")
|
|
24
24
|
.option("--bind <host>", "gog watch serve bind host", DEFAULT_GMAIL_SERVE_BIND)
|
|
25
25
|
.option("--port <port>", "gog watch serve port", String(DEFAULT_GMAIL_SERVE_PORT))
|
|
@@ -49,8 +49,8 @@ export function registerWebhooksCli(program) {
|
|
|
49
49
|
.option("--topic <topic>", "Pub/Sub topic path (projects/.../topics/..)")
|
|
50
50
|
.option("--subscription <name>", "Pub/Sub subscription name")
|
|
51
51
|
.option("--label <label>", "Gmail label to watch")
|
|
52
|
-
.option("--hook-url <url>", "
|
|
53
|
-
.option("--hook-token <token>", "
|
|
52
|
+
.option("--hook-url <url>", "Poolbot hook URL")
|
|
53
|
+
.option("--hook-token <token>", "Poolbot hook token")
|
|
54
54
|
.option("--push-token <token>", "Push token for gog watch serve")
|
|
55
55
|
.option("--bind <host>", "gog watch serve bind host")
|
|
56
56
|
.option("--port <port>", "gog watch serve port")
|
package/dist/commands/agent.js
CHANGED
|
@@ -342,6 +342,7 @@ export async function agentCommand(opts, runtime = defaultRuntime, deps = create
|
|
|
342
342
|
currentThreadTs: runContext.currentThreadTs,
|
|
343
343
|
replyToMode: runContext.replyToMode,
|
|
344
344
|
hasRepliedRef: runContext.hasRepliedRef,
|
|
345
|
+
senderIsOwner: true,
|
|
345
346
|
sessionFile,
|
|
346
347
|
workspaceDir,
|
|
347
348
|
config: cfg,
|
|
@@ -129,7 +129,7 @@ export async function agentsAddCommand(opts, runtime = defaultRuntime, params) {
|
|
|
129
129
|
}
|
|
130
130
|
const prompter = createClackPrompter();
|
|
131
131
|
try {
|
|
132
|
-
await prompter.intro("Add
|
|
132
|
+
await prompter.intro("Add Poolbot agent");
|
|
133
133
|
const name = nameInput ??
|
|
134
134
|
(await prompter.text({
|
|
135
135
|
message: "Agent name",
|