@poolzin/pool-bot 2026.2.24 → 2026.2.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/dist/acp/client.js +207 -18
- package/dist/acp/event-mapper.js +87 -22
- package/dist/acp/meta.js +12 -6
- package/dist/acp/secret-file.js +22 -0
- package/dist/agents/agent-paths.js +8 -9
- package/dist/agents/agent-scope.js +17 -5
- package/dist/agents/auth-profiles/oauth.js +148 -64
- package/dist/agents/auth-profiles/session-override.js +13 -7
- package/dist/agents/bash-process-registry.test-helpers.js +29 -0
- package/dist/agents/bash-tools.exec-approval-request.js +20 -0
- package/dist/agents/bash-tools.exec-host-gateway.js +240 -0
- package/dist/agents/bash-tools.exec-host-node.js +235 -0
- package/dist/agents/bash-tools.exec-runtime.js +2 -25
- package/dist/agents/bash-tools.exec-types.js +1 -0
- package/dist/agents/bash-tools.process.js +224 -218
- package/dist/agents/bedrock-discovery.js +3 -1
- package/dist/agents/byteplus-models.js +97 -0
- package/dist/agents/chutes-oauth.js +1 -0
- package/dist/agents/cli-runner/helpers.js +4 -0
- package/dist/agents/compaction.js +41 -14
- package/dist/agents/content-blocks.js +16 -0
- package/dist/agents/doubao-models.js +121 -0
- package/dist/agents/failover-error.js +2 -0
- package/dist/agents/huggingface-models.js +5 -3
- package/dist/agents/live-model-filter.js +5 -0
- package/dist/agents/minimax-vlm.js +10 -8
- package/dist/agents/model-auth.js +6 -0
- package/dist/agents/model-catalog.js +3 -1
- package/dist/agents/model-fallback.js +96 -101
- package/dist/agents/model-selection.js +7 -1
- package/dist/agents/models-config.providers.js +364 -165
- package/dist/agents/ollama-stream.js +117 -4
- package/dist/agents/opencode-zen-models.js +22 -11
- package/dist/agents/pi-embedded-helpers/errors.js +55 -33
- package/dist/agents/pi-embedded-helpers/messaging-dedupe.js +10 -5
- package/dist/agents/pi-embedded-helpers/thinking.js +10 -5
- package/dist/agents/pi-embedded-helpers.js +1 -1
- package/dist/agents/pi-embedded-payloads.js +1 -0
- package/dist/agents/pi-embedded-runner/compact.js +29 -7
- package/dist/agents/pi-embedded-runner/extensions.js +28 -26
- package/dist/agents/pi-embedded-runner/google.js +20 -8
- package/dist/agents/pi-embedded-runner/run/attempt.js +95 -36
- package/dist/agents/pi-embedded-runner/run.js +71 -12
- package/dist/agents/pi-embedded-runner/run.overflow-compaction.fixture.js +34 -0
- package/dist/agents/pi-embedded-runner/run.overflow-compaction.mocks.shared.js +11 -2
- package/dist/agents/pi-embedded-runner/session-manager-cache.js +11 -7
- package/dist/agents/pi-embedded-runner/system-prompt.js +2 -0
- package/dist/agents/pi-embedded-runner/thinking.js +42 -0
- package/dist/agents/pi-embedded-runner/tool-name-allowlist.js +19 -0
- package/dist/agents/pi-embedded-runner/utils.js +7 -10
- package/dist/agents/pi-embedded-subscribe.handlers.lifecycle.js +45 -56
- package/dist/agents/pi-embedded-subscribe.handlers.tools.js +2 -2
- package/dist/agents/pi-embedded-subscribe.js +9 -4
- package/dist/agents/pi-embedded-subscribe.tools.js +68 -14
- package/dist/agents/pi-embedded-utils.js +3 -0
- package/dist/agents/pi-extensions/compaction-safeguard-runtime.js +4 -20
- package/dist/agents/pi-extensions/compaction-safeguard.js +75 -33
- package/dist/agents/pi-settings.js +40 -0
- package/dist/agents/pi-tools.policy.js +2 -1
- package/dist/agents/provider/config-loader.js +1 -1
- package/dist/agents/sandbox/browser.js +170 -33
- package/dist/agents/sandbox/config-hash.js +14 -27
- package/dist/agents/sandbox/config.js +21 -2
- package/dist/agents/sandbox/constants.js +2 -0
- package/dist/agents/sandbox/docker.js +16 -2
- package/dist/agents/sandbox/novnc-auth.js +62 -0
- package/dist/agents/sandbox/sanitize-env-vars.js +1 -1
- package/dist/agents/sandbox/shared.js +10 -6
- package/dist/agents/sandbox-paths.js +24 -11
- package/dist/agents/schema/clean-for-gemini.js +132 -85
- package/dist/agents/session-slug.js +10 -5
- package/dist/agents/session-tool-result-guard-wrapper.js +1 -0
- package/dist/agents/session-tool-result-guard.js +3 -1
- package/dist/agents/session-transcript-repair.js +40 -6
- package/dist/agents/skills/bundled-dir.js +19 -5
- package/dist/agents/skills/env-overrides.js +124 -43
- package/dist/agents/skills/frontmatter.js +6 -6
- package/dist/agents/skills/plugin-skills.js +14 -7
- package/dist/agents/skills/workspace.js +1 -0
- package/dist/agents/skills.test-helpers.js +13 -0
- package/dist/agents/stable-stringify.js +12 -0
- package/dist/agents/subagent-announce.js +251 -49
- package/dist/agents/subagent-lifecycle-events.js +19 -0
- package/dist/agents/subagent-registry-cleanup.js +31 -0
- package/dist/agents/subagent-registry-completion.js +68 -0
- package/dist/agents/subagent-registry-queries.js +117 -0
- package/dist/agents/subagent-registry-state.js +46 -0
- package/dist/agents/subagent-registry.js +252 -221
- package/dist/agents/subagent-registry.mocks.shared.js +12 -0
- package/dist/agents/subagent-registry.store.js +1 -0
- package/dist/agents/subagent-registry.types.js +1 -0
- package/dist/agents/subagent-spawn.js +195 -7
- package/dist/agents/system-prompt.js +22 -6
- package/dist/agents/test-helpers/assistant-message-fixtures.js +29 -0
- package/dist/agents/test-helpers/fast-coding-tools.js +1 -18
- package/dist/agents/test-helpers/fast-core-tools.js +1 -17
- package/dist/agents/test-helpers/pi-tools-sandbox-context.js +27 -0
- package/dist/agents/timeout.js +18 -6
- package/dist/agents/tool-call-id.js +1 -1
- package/dist/agents/tool-display-common.js +162 -29
- package/dist/agents/tool-images.js +82 -9
- package/dist/agents/tool-policy-shared.js +108 -0
- package/dist/agents/tool-policy.js +51 -26
- package/dist/agents/tools/browser-tool.js +160 -54
- package/dist/agents/tools/canvas-tool.js +27 -1
- package/dist/agents/tools/common.js +45 -0
- package/dist/agents/tools/cron-tool.test-helpers.js +12 -0
- package/dist/agents/tools/discord-actions-guild.js +4 -1
- package/dist/agents/tools/discord-actions-moderation-shared.js +27 -0
- package/dist/agents/tools/gateway-tool.js +3 -1
- package/dist/agents/tools/image-tool.js +214 -99
- package/dist/agents/tools/nodes-utils.js +1 -10
- package/dist/agents/tools/sessions-history-tool.js +140 -108
- package/dist/agents/tools/sessions-send-helpers.js +12 -6
- package/dist/agents/tools/sessions-spawn-tool.js +8 -2
- package/dist/agents/tools/subagents-tool.js +2 -1
- package/dist/agents/tools/whatsapp-actions.js +10 -2
- package/dist/agents/tools/whatsapp-target-auth.js +18 -0
- package/dist/agents/transcript-policy.js +22 -8
- package/dist/agents/venice-models.js +11 -3
- package/dist/agents/workspace.js +222 -46
- package/dist/auto-reply/commands-registry.data.js +51 -0
- package/dist/auto-reply/commands-registry.js +19 -21
- package/dist/auto-reply/fallback-state.js +114 -0
- package/dist/auto-reply/group-activation.js +10 -5
- package/dist/auto-reply/inbound-debounce.js +10 -5
- package/dist/auto-reply/model-runtime.js +68 -0
- package/dist/auto-reply/reply/abort.js +1 -1
- package/dist/auto-reply/reply/agent-runner-execution.js +40 -5
- package/dist/auto-reply/reply/agent-runner.js +165 -39
- package/dist/auto-reply/reply/bash-command.js +41 -39
- package/dist/auto-reply/reply/command-gates.js +25 -0
- package/dist/auto-reply/reply/commands-allowlist.js +111 -72
- package/dist/auto-reply/reply/commands-bash.js +6 -5
- package/dist/auto-reply/reply/commands-config.js +30 -28
- package/dist/auto-reply/reply/commands-core.js +2 -1
- package/dist/auto-reply/reply/commands-info.js +1 -0
- package/dist/auto-reply/reply/commands-models.js +65 -14
- package/dist/auto-reply/reply/commands-session.js +237 -82
- package/dist/auto-reply/reply/commands-setunset-standard.js +13 -0
- package/dist/auto-reply/reply/commands-setunset.js +45 -0
- package/dist/auto-reply/reply/commands-subagents/action-agents.js +44 -0
- package/dist/auto-reply/reply/commands-subagents/action-focus.js +64 -0
- package/dist/auto-reply/reply/commands-subagents/action-help.js +4 -0
- package/dist/auto-reply/reply/commands-subagents/action-info.js +45 -0
- package/dist/auto-reply/reply/commands-subagents/action-kill.js +60 -0
- package/dist/auto-reply/reply/commands-subagents/action-list.js +44 -0
- package/dist/auto-reply/reply/commands-subagents/action-log.js +29 -0
- package/dist/auto-reply/reply/commands-subagents/action-send.js +119 -0
- package/dist/auto-reply/reply/commands-subagents/action-spawn.js +52 -0
- package/dist/auto-reply/reply/commands-subagents/action-unfocus.js +30 -0
- package/dist/auto-reply/reply/commands-subagents/shared.js +303 -0
- package/dist/auto-reply/reply/commands-subagents.js +51 -587
- package/dist/auto-reply/reply/commands-tts.js +10 -5
- package/dist/auto-reply/reply/config-value.js +10 -5
- package/dist/auto-reply/reply/directive-handling.model-picker.js +12 -6
- package/dist/auto-reply/reply/directive-handling.persist.js +9 -21
- package/dist/auto-reply/reply/directive-handling.shared.js +24 -4
- package/dist/auto-reply/reply/followup-runner.js +1 -0
- package/dist/auto-reply/reply/get-reply-directives-utils.js +23 -14
- package/dist/auto-reply/reply/get-reply-directives.js +17 -28
- package/dist/auto-reply/reply/get-reply-inline-actions.js +1 -0
- package/dist/auto-reply/reply/get-reply.js +71 -12
- package/dist/auto-reply/reply/model-selection.js +80 -39
- package/dist/auto-reply/reply/queue/enqueue.js +10 -5
- package/dist/auto-reply/reply/queue/state.js +13 -12
- package/dist/auto-reply/reply/reply-payloads.js +67 -36
- package/dist/auto-reply/reply/reply-reference.js +9 -8
- package/dist/auto-reply/reply/route-reply.js +15 -8
- package/dist/auto-reply/reply/session-reset-prompt.js +1 -1
- package/dist/auto-reply/reply/session.js +22 -6
- package/dist/auto-reply/reply/strip-inbound-meta.js +147 -0
- package/dist/auto-reply/reply/subagents-utils.js +56 -30
- package/dist/auto-reply/reply/typing.js +46 -21
- package/dist/auto-reply/send-policy.js +14 -7
- package/dist/auto-reply/status.js +140 -16
- package/dist/auto-reply/templating.js +10 -5
- package/dist/auto-reply/thinking.js +7 -16
- package/dist/auto-reply/tokens.js +21 -5
- package/dist/browser/bridge-server.js +36 -20
- package/dist/browser/cdp.helpers.js +7 -14
- package/dist/browser/cdp.js +35 -15
- package/dist/browser/chrome.profile-decoration.js +7 -4
- package/dist/browser/config.js +30 -0
- package/dist/browser/extension-relay-auth.js +55 -0
- package/dist/browser/extension-relay.js +74 -29
- package/dist/browser/navigation-guard.js +39 -0
- package/dist/browser/paths.js +77 -0
- package/dist/browser/profiles.js +13 -8
- package/dist/browser/pw-ai-module.js +10 -5
- package/dist/browser/pw-session.js +76 -39
- package/dist/browser/pw-tools-core.interactions.js +14 -7
- package/dist/browser/pw-tools-core.state.js +12 -6
- package/dist/browser/routes/agent.act.js +431 -424
- package/dist/browser/routes/agent.shared.js +47 -3
- package/dist/browser/routes/agent.snapshot.js +122 -116
- package/dist/browser/routes/agent.storage.js +303 -297
- package/dist/browser/routes/tabs.js +154 -100
- package/dist/browser/server-context.js +7 -0
- package/dist/browser/server-lifecycle.js +37 -0
- package/dist/build-info.json +3 -3
- package/dist/channels/allow-from.js +26 -0
- package/dist/channels/allowlists/resolve-utils.js +43 -19
- package/dist/channels/channel-config.js +14 -7
- package/dist/channels/draft-stream-loop.js +7 -0
- package/dist/channels/model-overrides.js +82 -0
- package/dist/channels/plugins/account-action-gate.js +13 -0
- package/dist/channels/plugins/message-actions.js +10 -0
- package/dist/channels/plugins/normalize/imessage.js +14 -7
- package/dist/channels/plugins/normalize/slack.js +10 -5
- package/dist/channels/plugins/normalize/telegram.js +14 -7
- package/dist/channels/plugins/outbound/discord.js +80 -8
- package/dist/channels/plugins/outbound/signal.js +11 -11
- package/dist/channels/plugins/setup-helpers.js +10 -5
- package/dist/channels/sender-label.js +14 -7
- package/dist/channels/session.js +4 -2
- package/dist/channels/status-reactions.js +297 -0
- package/dist/channels/telegram/api.js +18 -0
- package/dist/cli/argv.js +84 -21
- package/dist/cli/banner.js +3 -2
- package/dist/cli/browser-cli-actions-input/register.files-downloads.js +65 -56
- package/dist/cli/cli-name.js +11 -11
- package/dist/cli/cli-utils.js +13 -3
- package/dist/cli/command-format.js +1 -1
- package/dist/cli/config-cli.js +1 -1
- package/dist/cli/daemon-cli/lifecycle-core.js +31 -19
- package/dist/cli/daemon-cli/lifecycle.js +64 -2
- package/dist/cli/daemon-cli/restart-health.js +126 -0
- package/dist/cli/daemon-cli/status.gather.js +9 -13
- package/dist/cli/daemon-cli/status.print.js +2 -10
- package/dist/cli/deps.js +27 -22
- package/dist/cli/exec-approvals-cli.js +92 -124
- package/dist/cli/gateway-cli/run-loop.js +23 -5
- package/dist/cli/memory-cli.js +158 -61
- package/dist/cli/node-cli/register.js +14 -5
- package/dist/cli/nodes-cli/register.push.js +63 -0
- package/dist/cli/nodes-media-utils.js +26 -0
- package/dist/cli/outbound-send-deps.js +2 -9
- package/dist/cli/outbound-send-mapping.js +11 -0
- package/dist/cli/pairing-cli.js +40 -14
- package/dist/cli/plugins-cli.js +250 -73
- package/dist/cli/ports.js +11 -10
- package/dist/cli/program/build-program.js +3 -1
- package/dist/cli/program/command-registry.js +214 -136
- package/dist/cli/program/command-tree.js +16 -0
- package/dist/cli/program/help.js +43 -12
- package/dist/cli/program/preaction.js +13 -9
- package/dist/cli/program/register.configure.js +3 -18
- package/dist/cli/program/register.maintenance.js +2 -2
- package/dist/cli/program/register.onboard.js +2 -0
- package/dist/cli/program/register.status-health-sessions.js +16 -17
- package/dist/cli/program/register.subclis.js +93 -52
- package/dist/cli/route.js +12 -8
- package/dist/cli/system-cli.js +36 -46
- package/dist/cli/test-runtime-capture.js +24 -0
- package/dist/cli/update-cli/shared.js +22 -9
- package/dist/cli/update-cli/update-command.js +89 -14
- package/dist/cli/update-cli/wizard.js +6 -12
- package/dist/commands/agent/run-context.js +18 -5
- package/dist/commands/agent/session-store.js +17 -4
- package/dist/commands/agent.js +185 -89
- package/dist/commands/agents.bindings.js +14 -7
- package/dist/commands/agents.commands.add.js +13 -9
- package/dist/commands/agents.commands.identity.js +12 -6
- package/dist/commands/agents.commands.list.js +11 -6
- package/dist/commands/agents.config.js +8 -10
- package/dist/commands/agents.providers.js +12 -6
- package/dist/commands/auth-choice-options.js +103 -75
- package/dist/commands/auth-choice.apply.byteplus.js +55 -0
- package/dist/commands/auth-choice.apply.js +4 -0
- package/dist/commands/auth-choice.apply.minimax.js +61 -13
- package/dist/commands/auth-choice.apply.openai.js +3 -1
- package/dist/commands/auth-choice.apply.volcengine.js +55 -0
- package/dist/commands/auth-choice.preferred-provider.js +2 -0
- package/dist/commands/channels/remove.js +13 -6
- package/dist/commands/channels/shared.js +4 -14
- package/dist/commands/channels.mock-harness.js +23 -0
- package/dist/commands/configure.commands.js +14 -0
- package/dist/commands/configure.gateway.js +2 -4
- package/dist/commands/configure.js +1 -1
- package/dist/commands/configure.shared.js +11 -0
- package/dist/commands/daemon-install-helpers.js +2 -2
- package/dist/commands/daemon-install-runtime-warning.js +11 -0
- package/dist/commands/dashboard.js +12 -10
- package/dist/commands/docs.js +14 -8
- package/dist/commands/doctor-config-flow.js +11 -9
- package/dist/commands/doctor-legacy-config.js +281 -0
- package/dist/commands/doctor-state-integrity.js +99 -23
- package/dist/commands/doctor-update.js +12 -9
- package/dist/commands/models/list.list-command.js +7 -5
- package/dist/commands/models/set-image.js +2 -21
- package/dist/commands/node-daemon-install-helpers.js +10 -8
- package/dist/commands/onboard-auth.config-minimax.js +54 -80
- package/dist/commands/onboard-auth.config-opencode.js +2 -18
- package/dist/commands/onboard-auth.credentials.js +90 -13
- package/dist/commands/onboard-auth.js +1 -1
- package/dist/commands/onboard-auth.models.js +6 -5
- package/dist/commands/onboard-hooks.js +1 -1
- package/dist/commands/onboard-non-interactive/api-keys.js +14 -7
- package/dist/commands/onboard-non-interactive/local/auth-choice.js +64 -49
- package/dist/commands/onboard-provider-auth-flags.js +14 -0
- package/dist/commands/onboard-remote.js +14 -7
- package/dist/commands/onboard.js +11 -13
- package/dist/commands/sandbox-display.js +6 -5
- package/dist/commands/sessions.test-helpers.js +61 -0
- package/dist/commands/status-all/diagnosis.js +14 -10
- package/dist/commands/status-all/format.js +1 -0
- package/dist/commands/status.gateway-probe.js +1 -16
- package/dist/commands/systemd-linger.js +12 -6
- package/dist/config/agent-limits.js +2 -0
- package/dist/config/commands.js +32 -15
- package/dist/config/config-paths.js +9 -11
- package/dist/config/config.js +1 -1
- package/dist/config/defaults.js +22 -2
- package/dist/config/discord-preview-streaming.js +104 -0
- package/dist/config/env-substitution.js +62 -34
- package/dist/config/env-vars.js +45 -7
- package/dist/config/includes.js +4 -0
- package/dist/config/io.js +656 -171
- package/dist/config/legacy.migrations.part-1.js +189 -78
- package/dist/config/legacy.shared.js +3 -1
- package/dist/config/merge-patch.js +54 -4
- package/dist/config/prototype-keys.js +4 -0
- package/dist/config/redact-snapshot.js +404 -76
- package/dist/config/schema.help.js +44 -7
- package/dist/config/schema.js +58 -570
- package/dist/config/schema.labels.js +38 -6
- package/dist/config/sessions/delivery-info.js +10 -3
- package/dist/config/sessions/main-session.js +10 -5
- package/dist/config/sessions/session-file.js +33 -0
- package/dist/config/sessions/session-key.js +10 -5
- package/dist/config/sessions/store.js +1 -1
- package/dist/config/sessions.js +1 -0
- package/dist/config/validation.js +140 -85
- package/dist/config/zod-schema.agent-runtime.js +11 -0
- package/dist/config/zod-schema.hooks.js +40 -11
- package/dist/config/zod-schema.installs.js +20 -0
- package/dist/config/zod-schema.js +156 -20
- package/dist/config/zod-schema.providers-core.js +78 -4
- package/dist/config/zod-schema.providers.js +6 -1
- package/dist/config/zod-schema.session.js +41 -2
- package/dist/cron/run-log.js +3 -0
- package/dist/cron/schedule.js +21 -10
- package/dist/cron/service/ops.js +35 -21
- package/dist/cron/service/timer.js +116 -16
- package/dist/cron/stagger.js +3 -1
- package/dist/daemon/cmd-argv.js +21 -0
- package/dist/daemon/cmd-set.js +58 -0
- package/dist/daemon/service-types.js +1 -0
- package/dist/discord/api.js +12 -6
- package/dist/discord/draft-chunking.js +22 -0
- package/dist/discord/draft-stream.js +124 -0
- package/dist/discord/monitor/agent-components.js +1 -1
- package/dist/discord/monitor/commands.js +5 -0
- package/dist/discord/monitor/exec-approvals.js +357 -162
- package/dist/discord/monitor/gateway-plugin.js +2 -1
- package/dist/discord/monitor/listeners.js +37 -27
- package/dist/discord/monitor/message-handler.js +4 -1
- package/dist/discord/monitor/message-handler.preflight.js +65 -8
- package/dist/discord/monitor/message-handler.process.js +246 -217
- package/dist/discord/monitor/message-utils.js +143 -6
- package/dist/discord/monitor/model-picker-preferences.js +143 -0
- package/dist/discord/monitor/model-picker.js +651 -0
- package/dist/discord/monitor/native-command.js +573 -16
- package/dist/discord/monitor/provider.allowlist.js +223 -0
- package/dist/discord/monitor/provider.js +275 -347
- package/dist/discord/monitor/provider.lifecycle.js +100 -0
- package/dist/discord/monitor/reply-delivery.js +123 -16
- package/dist/discord/monitor/thread-bindings.discord-api.js +215 -0
- package/dist/discord/monitor/thread-bindings.js +4 -0
- package/dist/discord/monitor/thread-bindings.lifecycle.js +177 -0
- package/dist/discord/monitor/thread-bindings.manager.js +423 -0
- package/dist/discord/monitor/thread-bindings.messages.js +55 -0
- package/dist/discord/monitor/thread-bindings.state.js +358 -0
- package/dist/discord/monitor/thread-bindings.types.js +6 -0
- package/dist/discord/resolve-users.js +33 -21
- package/dist/discord/send.channels.js +15 -0
- package/dist/discord/send.js +3 -2
- package/dist/discord/send.outbound.js +82 -26
- package/dist/discord/send.permissions.js +83 -30
- package/dist/discord/send.reactions.js +8 -4
- package/dist/discord/token.js +10 -5
- package/dist/discord/voice/command.js +263 -0
- package/dist/discord/voice/manager.js +531 -0
- package/dist/gateway/auth.js +72 -13
- package/dist/gateway/call.js +152 -83
- package/dist/gateway/canvas-capability.js +75 -0
- package/dist/gateway/client.js +28 -4
- package/dist/gateway/config-reload.js +3 -4
- package/dist/gateway/control-plane-audit.js +28 -0
- package/dist/gateway/control-plane-rate-limit.js +53 -0
- package/dist/gateway/control-ui.js +219 -96
- package/dist/gateway/events.js +1 -0
- package/dist/gateway/hooks-mapping.js +88 -38
- package/dist/gateway/hooks.js +109 -54
- package/dist/gateway/http-auth-helpers.js +3 -2
- package/dist/gateway/http-common.js +22 -0
- package/dist/gateway/http-endpoint-helpers.js +1 -0
- package/dist/gateway/method-scopes.js +169 -0
- package/dist/gateway/net.js +74 -9
- package/dist/gateway/node-invoke-system-run-approval.js +14 -35
- package/dist/gateway/node-registry.js +10 -5
- package/dist/gateway/openai-http.js +1 -0
- package/dist/gateway/openresponses-http.js +121 -110
- package/dist/gateway/origin-check.js +1 -18
- package/dist/gateway/probe-auth.js +2 -0
- package/dist/gateway/protocol/index.js +4 -2
- package/dist/gateway/protocol/schema/cron.js +1 -0
- package/dist/gateway/protocol/schema/devices.js +1 -0
- package/dist/gateway/protocol/schema/protocol-schemas.js +4 -1
- package/dist/gateway/protocol/schema/push.js +18 -0
- package/dist/gateway/protocol/schema/sessions.js +6 -0
- package/dist/gateway/protocol/schema.js +1 -0
- package/dist/gateway/role-policy.js +17 -0
- package/dist/gateway/server/ws-connection/connect-policy.js +37 -0
- package/dist/gateway/server/ws-connection/message-handler.js +175 -148
- package/dist/gateway/server-chat.js +83 -25
- package/dist/gateway/server-constants.js +10 -9
- package/dist/gateway/server-cron.js +1 -0
- package/dist/gateway/server-http.js +247 -54
- package/dist/gateway/server-maintenance.js +20 -5
- package/dist/gateway/server-methods/agent.js +162 -24
- package/dist/gateway/server-methods/chat.js +465 -130
- package/dist/gateway/server-methods/config.js +193 -152
- package/dist/gateway/server-methods/devices.js +17 -3
- package/dist/gateway/server-methods/models.js +11 -1
- package/dist/gateway/server-methods/nodes.helpers.js +12 -0
- package/dist/gateway/server-methods/nodes.js +251 -69
- package/dist/gateway/server-methods/push.js +53 -0
- package/dist/gateway/server-methods/sessions.js +64 -8
- package/dist/gateway/server-methods/usage.js +162 -75
- package/dist/gateway/server-node-events.js +29 -0
- package/dist/gateway/server-reload-handlers.js +2 -3
- package/dist/gateway/server-runtime-config.js +39 -13
- package/dist/gateway/server-runtime-state.js +2 -0
- package/dist/gateway/server-startup-memory.js +17 -11
- package/dist/gateway/server-ws-runtime.js +1 -0
- package/dist/gateway/server.impl.js +296 -139
- package/dist/gateway/session-preview.test-helpers.js +11 -0
- package/dist/gateway/session-utils.fs.js +32 -34
- package/dist/gateway/sessions-resolve.js +17 -5
- package/dist/gateway/startup-auth.js +126 -0
- package/dist/gateway/test-helpers.agent-results.js +15 -0
- package/dist/gateway/test-helpers.mocks.js +37 -14
- package/dist/gateway/test-helpers.openai-mock.js +14 -7
- package/dist/gateway/test-helpers.server.js +161 -77
- package/dist/gateway/tools-invoke-http.js +21 -10
- package/dist/hooks/bundled/bootstrap-extra-files/handler.js +3 -1
- package/dist/hooks/bundled/command-logger/handler.js +7 -2
- package/dist/hooks/bundled/session-memory/handler.js +170 -38
- package/dist/hooks/frontmatter.js +6 -6
- package/dist/hooks/gmail-watcher-lifecycle.js +23 -0
- package/dist/hooks/gmail-watcher.js +11 -6
- package/dist/hooks/internal-hooks.js +11 -1
- package/dist/hooks/llm-slug-generator.js +4 -1
- package/dist/hooks/workspace.js +47 -17
- package/dist/imessage/accounts.js +9 -20
- package/dist/imessage/monitor/inbound-processing.js +2 -1
- package/dist/infra/archive-path.js +49 -0
- package/dist/infra/archive.js +174 -73
- package/dist/infra/control-ui-assets.js +14 -6
- package/dist/infra/device-pairing.js +204 -144
- package/dist/infra/env.js +10 -5
- package/dist/infra/exec-approvals-allowlist.js +141 -70
- package/dist/infra/exec-approvals-analysis.js +78 -20
- package/dist/infra/exec-approvals.js +5 -17
- package/dist/infra/exec-safe-bin-policy.js +277 -0
- package/dist/infra/fixed-window-rate-limit.js +33 -0
- package/dist/infra/fs-safe.js +71 -39
- package/dist/infra/gateway-lock.js +6 -2
- package/dist/infra/git-root.js +61 -0
- package/dist/infra/heartbeat-active-hours.js +2 -2
- package/dist/infra/heartbeat-reason.js +40 -0
- package/dist/infra/heartbeat-runner.js +72 -32
- package/dist/infra/heartbeat-wake.js +6 -12
- package/dist/infra/host-env-security-policy.json +19 -0
- package/dist/infra/host-env-security.js +66 -0
- package/dist/infra/install-source-utils.js +91 -7
- package/dist/infra/net/ssrf.js +131 -38
- package/dist/infra/node-pairing.js +50 -105
- package/dist/infra/npm-integrity.js +45 -0
- package/dist/infra/npm-pack-install.js +40 -0
- package/dist/infra/outbound/bound-delivery-router.js +88 -0
- package/dist/infra/outbound/channel-adapters.js +20 -7
- package/dist/infra/outbound/channel-selection.js +12 -6
- package/dist/infra/outbound/envelope.js +1 -1
- package/dist/infra/outbound/format.js +12 -6
- package/dist/infra/outbound/message-action-runner.js +107 -327
- package/dist/infra/outbound/message.js +59 -36
- package/dist/infra/outbound/outbound-policy.js +52 -25
- package/dist/infra/outbound/outbound-send-service.js +58 -71
- package/dist/infra/outbound/payloads.js +14 -7
- package/dist/infra/outbound/session-binding-service.js +123 -0
- package/dist/infra/pairing-files.js +10 -0
- package/dist/infra/path-guards.js +25 -0
- package/dist/infra/plain-object.js +9 -0
- package/dist/infra/provider-usage.fetch.codex.js +7 -15
- package/dist/infra/provider-usage.fetch.gemini.js +14 -11
- package/dist/infra/provider-usage.fetch.shared.js +30 -1
- package/dist/infra/provider-usage.fetch.zai.js +10 -9
- package/dist/infra/push-apns.js +365 -0
- package/dist/infra/restart-sentinel.js +16 -1
- package/dist/infra/restart.js +229 -26
- package/dist/infra/retry-policy.js +4 -2
- package/dist/infra/retry.js +9 -5
- package/dist/infra/scp-host.js +54 -0
- package/dist/infra/session-cost-usage.js +107 -59
- package/dist/infra/session-maintenance-warning.js +3 -1
- package/dist/infra/shell-env.js +98 -34
- package/dist/infra/ssh-config.js +12 -6
- package/dist/infra/system-run-command.js +49 -4
- package/dist/infra/update-channels.js +10 -5
- package/dist/infra/update-startup.js +86 -9
- package/dist/line/accounts.js +5 -7
- package/dist/line/bot-access.js +8 -20
- package/dist/line/bot-handlers.js +3 -1
- package/dist/link-understanding/detect.js +15 -7
- package/dist/media/constants.js +15 -6
- package/dist/media/image-ops.js +7 -0
- package/dist/media/inbound-path-policy.js +114 -0
- package/dist/media/input-files.js +16 -0
- package/dist/media/local-roots.js +3 -2
- package/dist/media-understanding/apply.js +4 -1
- package/dist/media-understanding/concurrency.js +8 -20
- package/dist/memory/backend-config.js +45 -6
- package/dist/memory/embeddings.js +10 -4
- package/dist/memory/fs-utils.js +23 -0
- package/dist/memory/manager-search.js +12 -6
- package/dist/memory/manager-sync-ops.js +12 -2
- package/dist/memory/qmd-manager.js +466 -53
- package/dist/memory/query-expansion.js +167 -3
- package/dist/memory/status-format.js +10 -5
- package/dist/memory/sync-memory-files.js +1 -1
- package/dist/memory/test-manager.js +8 -0
- package/dist/node-host/invoke-system-run.js +281 -0
- package/dist/node-host/invoke.js +55 -337
- package/dist/pairing/pairing-store.js +22 -0
- package/dist/plugin-sdk/allow-from.js +1 -1
- package/dist/plugin-sdk/command-auth.js +3 -1
- package/dist/plugin-sdk/index.js +6 -3
- package/dist/plugin-sdk/temp-path.js +47 -0
- package/dist/plugin-sdk/webhook-targets.js +32 -0
- package/dist/plugins/bundled-dir.js +9 -6
- package/dist/plugins/discovery.js +217 -23
- package/dist/plugins/hook-runner-global.js +16 -0
- package/dist/plugins/hooks.js +50 -0
- package/dist/plugins/install.js +28 -16
- package/dist/plugins/loader.js +192 -26
- package/dist/plugins/logger.js +8 -0
- package/dist/plugins/manifest-registry.js +3 -0
- package/dist/plugins/path-safety.js +34 -0
- package/dist/plugins/registry.js +5 -2
- package/dist/plugins/runtime/index.js +271 -206
- package/dist/plugins/runtime.js +3 -17
- package/dist/plugins/update.js +78 -12
- package/dist/process/spawn-utils.js +14 -7
- package/dist/providers/github-copilot-models.js +4 -1
- package/dist/providers/github-copilot-token.js +11 -6
- package/dist/providers/qwen-portal-oauth.js +14 -6
- package/dist/routing/account-id.js +30 -0
- package/dist/routing/resolve-route.js +3 -7
- package/dist/routing/session-key.js +2 -16
- package/dist/security/audit-channel.js +100 -20
- package/dist/security/audit-extra.async.js +505 -179
- package/dist/security/audit-extra.js +12 -2
- package/dist/security/audit-extra.sync.js +421 -35
- package/dist/security/audit-fs.js +31 -13
- package/dist/security/audit.js +180 -370
- package/dist/security/dm-policy-shared.js +68 -0
- package/dist/security/external-content.js +46 -14
- package/dist/security/fix.js +49 -85
- package/dist/security/scan-paths.js +20 -0
- package/dist/security/secret-equal.js +3 -7
- package/dist/security/windows-acl.js +30 -15
- package/dist/shared/entry-status.js +6 -0
- package/dist/shared/frontmatter.js +5 -5
- package/dist/shared/node-list-parse.js +13 -0
- package/dist/shared/node-match.js +11 -4
- package/dist/shared/operator-scope-compat.js +42 -0
- package/dist/shared/text-chunking.js +29 -0
- package/dist/signal/accounts.js +7 -20
- package/dist/signal/monitor/event-handler.js +3 -1
- package/dist/slack/accounts.js +6 -19
- package/dist/slack/actions.js +11 -3
- package/dist/slack/blocks.test-helpers.js +31 -0
- package/dist/slack/monitor/auth.js +1 -1
- package/dist/slack/monitor/message-handler/dispatch.js +50 -29
- package/dist/slack/monitor/mrkdwn.js +8 -0
- package/dist/slack/monitor/replies.js +15 -7
- package/dist/slack/monitor/slash.js +22 -13
- package/dist/slack/resolve-channels.js +10 -5
- package/dist/slack/send.js +102 -12
- package/dist/slack/stream-mode.js +10 -0
- package/dist/slack/streaming.js +4 -2
- package/dist/telegram/accounts.js +19 -14
- package/dist/telegram/bot/helpers.js +3 -5
- package/dist/telegram/bot-access.js +35 -36
- package/dist/telegram/bot-handlers.js +120 -148
- package/dist/telegram/bot-message-context.js +68 -9
- package/dist/telegram/bot-message-dispatch.js +477 -210
- package/dist/telegram/bot-native-commands.js +16 -0
- package/dist/telegram/draft-stream.js +44 -8
- package/dist/telegram/inline-buttons.js +5 -15
- package/dist/telegram/monitor.js +11 -7
- package/dist/telegram/network-config.js +19 -7
- package/dist/telegram/reasoning-lane-coordinator.js +128 -0
- package/dist/telegram/send.js +3 -2
- package/dist/telegram/sent-message-cache.js +5 -6
- package/dist/telegram/status-reaction-variants.js +208 -0
- package/dist/telegram/sticker-cache.js +11 -9
- package/dist/terminal/prompt-select-styled.js +9 -0
- package/dist/terminal/theme.js +12 -12
- package/dist/test-utils/command-runner.js +6 -0
- package/dist/test-utils/internal-hook-event-payload.js +10 -0
- package/dist/test-utils/model-auth-mock.js +12 -0
- package/dist/test-utils/provider-usage-fetch.js +14 -0
- package/dist/test-utils/temp-home.js +33 -0
- package/dist/tts/tts.js +80 -567
- package/dist/tui/components/chat-log.js +50 -8
- package/dist/tui/theme/theme.js +10 -12
- package/dist/tui/tui-command-handlers.js +36 -27
- package/dist/tui/tui-event-handlers.js +122 -32
- package/dist/tui/tui-local-shell.js +16 -6
- package/dist/tui/tui.js +236 -48
- package/dist/utils/account-id.js +2 -4
- package/dist/utils/boolean.js +10 -5
- package/dist/utils/directive-tags.js +11 -0
- package/dist/utils/mask-api-key.js +10 -0
- package/dist/utils/queue-helpers.js +67 -12
- package/dist/utils/run-with-concurrency.js +39 -0
- package/dist/web/auto-reply/deliver-reply.js +8 -4
- package/dist/web/auto-reply/mentions.js +10 -5
- package/dist/web/auto-reply/monitor/group-members.js +14 -7
- package/dist/web/auto-reply/monitor/process-message.js +45 -24
- package/dist/web/inbound/access-control.js +5 -2
- package/dist/web/login-qr.js +12 -6
- package/dist/web/media.js +126 -15
- package/docs/tools/slash-commands.md +5 -1
- package/extensions/bluebubbles/src/monitor-processing.ts +580 -139
- package/extensions/bluebubbles/src/monitor.ts +208 -1950
- package/extensions/feishu/src/external-keys.ts +19 -0
- package/extensions/lobster/src/windows-spawn.ts +193 -0
- package/extensions/matrix/src/matrix/actions/limits.ts +6 -0
- package/extensions/mattermost/src/mattermost/reactions.test-helpers.ts +83 -0
- package/package.json +1 -1
|
@@ -20,6 +20,17 @@ function parseTimeoutMs(timeout) {
|
|
|
20
20
|
}
|
|
21
21
|
return parsed;
|
|
22
22
|
}
|
|
23
|
+
async function runWithVerboseAndTimeout(opts, action) {
|
|
24
|
+
const verbose = resolveVerbose(opts);
|
|
25
|
+
setVerbose(verbose);
|
|
26
|
+
const timeoutMs = parseTimeoutMs(opts.timeout);
|
|
27
|
+
if (timeoutMs === null) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
31
|
+
await action({ verbose, timeoutMs });
|
|
32
|
+
});
|
|
33
|
+
}
|
|
23
34
|
export function registerStatusHealthSessionsCommands(program) {
|
|
24
35
|
program
|
|
25
36
|
.command("status")
|
|
@@ -44,19 +55,13 @@ export function registerStatusHealthSessionsCommands(program) {
|
|
|
44
55
|
])}`)
|
|
45
56
|
.addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/status", "docs.molt.bot/cli/status")}\n`)
|
|
46
57
|
.action(async (opts) => {
|
|
47
|
-
|
|
48
|
-
setVerbose(verbose);
|
|
49
|
-
const timeout = parseTimeoutMs(opts.timeout);
|
|
50
|
-
if (timeout === null) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
58
|
+
await runWithVerboseAndTimeout(opts, async ({ verbose, timeoutMs }) => {
|
|
54
59
|
await statusCommand({
|
|
55
60
|
json: Boolean(opts.json),
|
|
56
61
|
all: Boolean(opts.all),
|
|
57
62
|
deep: Boolean(opts.deep),
|
|
58
63
|
usage: Boolean(opts.usage),
|
|
59
|
-
timeoutMs
|
|
64
|
+
timeoutMs,
|
|
60
65
|
verbose,
|
|
61
66
|
}, defaultRuntime);
|
|
62
67
|
});
|
|
@@ -70,16 +75,10 @@ export function registerStatusHealthSessionsCommands(program) {
|
|
|
70
75
|
.option("--debug", "Alias for --verbose", false)
|
|
71
76
|
.addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/health", "docs.molt.bot/cli/health")}\n`)
|
|
72
77
|
.action(async (opts) => {
|
|
73
|
-
|
|
74
|
-
setVerbose(verbose);
|
|
75
|
-
const timeout = parseTimeoutMs(opts.timeout);
|
|
76
|
-
if (timeout === null) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
await runCommandWithRuntime(defaultRuntime, async () => {
|
|
78
|
+
await runWithVerboseAndTimeout(opts, async ({ verbose, timeoutMs }) => {
|
|
80
79
|
await healthCommand({
|
|
81
80
|
json: Boolean(opts.json),
|
|
82
|
-
timeoutMs
|
|
81
|
+
timeoutMs,
|
|
83
82
|
verbose,
|
|
84
83
|
}, defaultRuntime);
|
|
85
84
|
});
|
|
@@ -96,7 +95,7 @@ export function registerStatusHealthSessionsCommands(program) {
|
|
|
96
95
|
["poolbot sessions --active 120", "Only last 2 hours."],
|
|
97
96
|
["poolbot sessions --json", "Machine-readable output."],
|
|
98
97
|
["poolbot sessions --store ./tmp/sessions.json", "Use a specific session store."],
|
|
99
|
-
])}\n\n${theme.muted("Shows token usage per session when the agent reports it; set agents.defaults.contextTokens to
|
|
98
|
+
])}\n\n${theme.muted("Shows token usage per session when the agent reports it; set agents.defaults.contextTokens to cap the window and show %.")}`)
|
|
100
99
|
.addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/sessions", "docs.molt.bot/cli/sessions")}\n`)
|
|
101
100
|
.action(async (opts) => {
|
|
102
101
|
setVerbose(Boolean(opts.verbose));
|
|
@@ -1,24 +1,31 @@
|
|
|
1
1
|
import { isTruthyEnvValue } from "../../infra/env.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { getPrimaryCommand, hasHelpOrVersion } from "../argv.js";
|
|
3
|
+
import { reparseProgramFromActionArgs } from "./action-reparse.js";
|
|
4
|
+
import { removeCommand, removeCommandByName } from "./command-tree.js";
|
|
4
5
|
const shouldRegisterPrimaryOnly = (argv) => {
|
|
5
|
-
if (isTruthyEnvValue(process.env.POOLBOT_DISABLE_LAZY_SUBCOMMANDS
|
|
6
|
+
if (isTruthyEnvValue(process.env.POOLBOT_DISABLE_LAZY_SUBCOMMANDS)) {
|
|
6
7
|
return false;
|
|
7
|
-
|
|
8
|
+
}
|
|
9
|
+
if (hasHelpOrVersion(argv)) {
|
|
8
10
|
return false;
|
|
11
|
+
}
|
|
9
12
|
return true;
|
|
10
13
|
};
|
|
11
14
|
const shouldEagerRegisterSubcommands = (_argv) => {
|
|
12
|
-
return isTruthyEnvValue(process.env.POOLBOT_DISABLE_LAZY_SUBCOMMANDS
|
|
15
|
+
return isTruthyEnvValue(process.env.POOLBOT_DISABLE_LAZY_SUBCOMMANDS);
|
|
13
16
|
};
|
|
14
17
|
const loadConfig = async () => {
|
|
15
18
|
const mod = await import("../../config/config.js");
|
|
16
19
|
return mod.loadConfig();
|
|
17
20
|
};
|
|
21
|
+
// Note for humans and agents:
|
|
22
|
+
// If you update the list of commands, also check whether they have subcommands
|
|
23
|
+
// and set the flag accordingly.
|
|
18
24
|
const entries = [
|
|
19
25
|
{
|
|
20
26
|
name: "acp",
|
|
21
27
|
description: "Agent Control Protocol tools",
|
|
28
|
+
hasSubcommands: true,
|
|
22
29
|
register: async (program) => {
|
|
23
30
|
const mod = await import("../acp-cli.js");
|
|
24
31
|
mod.registerAcpCli(program);
|
|
@@ -26,7 +33,8 @@ const entries = [
|
|
|
26
33
|
},
|
|
27
34
|
{
|
|
28
35
|
name: "gateway",
|
|
29
|
-
description: "Gateway
|
|
36
|
+
description: "Run, inspect, and query the WebSocket Gateway",
|
|
37
|
+
hasSubcommands: true,
|
|
30
38
|
register: async (program) => {
|
|
31
39
|
const mod = await import("../gateway-cli.js");
|
|
32
40
|
mod.registerGatewayCli(program);
|
|
@@ -35,6 +43,7 @@ const entries = [
|
|
|
35
43
|
{
|
|
36
44
|
name: "daemon",
|
|
37
45
|
description: "Gateway service (legacy alias)",
|
|
46
|
+
hasSubcommands: true,
|
|
38
47
|
register: async (program) => {
|
|
39
48
|
const mod = await import("../daemon-cli.js");
|
|
40
49
|
mod.registerDaemonCli(program);
|
|
@@ -42,7 +51,8 @@ const entries = [
|
|
|
42
51
|
},
|
|
43
52
|
{
|
|
44
53
|
name: "logs",
|
|
45
|
-
description: "
|
|
54
|
+
description: "Tail gateway file logs via RPC",
|
|
55
|
+
hasSubcommands: false,
|
|
46
56
|
register: async (program) => {
|
|
47
57
|
const mod = await import("../logs-cli.js");
|
|
48
58
|
mod.registerLogsCli(program);
|
|
@@ -51,6 +61,7 @@ const entries = [
|
|
|
51
61
|
{
|
|
52
62
|
name: "system",
|
|
53
63
|
description: "System events, heartbeat, and presence",
|
|
64
|
+
hasSubcommands: true,
|
|
54
65
|
register: async (program) => {
|
|
55
66
|
const mod = await import("../system-cli.js");
|
|
56
67
|
mod.registerSystemCli(program);
|
|
@@ -58,7 +69,8 @@ const entries = [
|
|
|
58
69
|
},
|
|
59
70
|
{
|
|
60
71
|
name: "models",
|
|
61
|
-
description: "
|
|
72
|
+
description: "Discover, scan, and configure models",
|
|
73
|
+
hasSubcommands: true,
|
|
62
74
|
register: async (program) => {
|
|
63
75
|
const mod = await import("../models-cli.js");
|
|
64
76
|
mod.registerModelsCli(program);
|
|
@@ -66,7 +78,8 @@ const entries = [
|
|
|
66
78
|
},
|
|
67
79
|
{
|
|
68
80
|
name: "approvals",
|
|
69
|
-
description: "
|
|
81
|
+
description: "Manage exec approvals (gateway or node host)",
|
|
82
|
+
hasSubcommands: true,
|
|
70
83
|
register: async (program) => {
|
|
71
84
|
const mod = await import("../exec-approvals-cli.js");
|
|
72
85
|
mod.registerExecApprovalsCli(program);
|
|
@@ -74,7 +87,8 @@ const entries = [
|
|
|
74
87
|
},
|
|
75
88
|
{
|
|
76
89
|
name: "nodes",
|
|
77
|
-
description: "
|
|
90
|
+
description: "Manage gateway-owned node pairing and node commands",
|
|
91
|
+
hasSubcommands: true,
|
|
78
92
|
register: async (program) => {
|
|
79
93
|
const mod = await import("../nodes-cli.js");
|
|
80
94
|
mod.registerNodesCli(program);
|
|
@@ -83,6 +97,7 @@ const entries = [
|
|
|
83
97
|
{
|
|
84
98
|
name: "devices",
|
|
85
99
|
description: "Device pairing + token management",
|
|
100
|
+
hasSubcommands: true,
|
|
86
101
|
register: async (program) => {
|
|
87
102
|
const mod = await import("../devices-cli.js");
|
|
88
103
|
mod.registerDevicesCli(program);
|
|
@@ -90,7 +105,8 @@ const entries = [
|
|
|
90
105
|
},
|
|
91
106
|
{
|
|
92
107
|
name: "node",
|
|
93
|
-
description: "
|
|
108
|
+
description: "Run and manage the headless node host service",
|
|
109
|
+
hasSubcommands: true,
|
|
94
110
|
register: async (program) => {
|
|
95
111
|
const mod = await import("../node-cli.js");
|
|
96
112
|
mod.registerNodeCli(program);
|
|
@@ -98,7 +114,8 @@ const entries = [
|
|
|
98
114
|
},
|
|
99
115
|
{
|
|
100
116
|
name: "sandbox",
|
|
101
|
-
description: "
|
|
117
|
+
description: "Manage sandbox containers for agent isolation",
|
|
118
|
+
hasSubcommands: true,
|
|
102
119
|
register: async (program) => {
|
|
103
120
|
const mod = await import("../sandbox-cli.js");
|
|
104
121
|
mod.registerSandboxCli(program);
|
|
@@ -106,7 +123,8 @@ const entries = [
|
|
|
106
123
|
},
|
|
107
124
|
{
|
|
108
125
|
name: "tui",
|
|
109
|
-
description: "
|
|
126
|
+
description: "Open a terminal UI connected to the Gateway",
|
|
127
|
+
hasSubcommands: false,
|
|
110
128
|
register: async (program) => {
|
|
111
129
|
const mod = await import("../tui-cli.js");
|
|
112
130
|
mod.registerTuiCli(program);
|
|
@@ -114,7 +132,8 @@ const entries = [
|
|
|
114
132
|
},
|
|
115
133
|
{
|
|
116
134
|
name: "cron",
|
|
117
|
-
description: "
|
|
135
|
+
description: "Manage cron jobs via the Gateway scheduler",
|
|
136
|
+
hasSubcommands: true,
|
|
118
137
|
register: async (program) => {
|
|
119
138
|
const mod = await import("../cron-cli.js");
|
|
120
139
|
mod.registerCronCli(program);
|
|
@@ -122,7 +141,8 @@ const entries = [
|
|
|
122
141
|
},
|
|
123
142
|
{
|
|
124
143
|
name: "dns",
|
|
125
|
-
description: "DNS helpers",
|
|
144
|
+
description: "DNS helpers for wide-area discovery (Tailscale + CoreDNS)",
|
|
145
|
+
hasSubcommands: true,
|
|
126
146
|
register: async (program) => {
|
|
127
147
|
const mod = await import("../dns-cli.js");
|
|
128
148
|
mod.registerDnsCli(program);
|
|
@@ -130,7 +150,8 @@ const entries = [
|
|
|
130
150
|
},
|
|
131
151
|
{
|
|
132
152
|
name: "docs",
|
|
133
|
-
description: "
|
|
153
|
+
description: "Search the live Pool Bot docs",
|
|
154
|
+
hasSubcommands: false,
|
|
134
155
|
register: async (program) => {
|
|
135
156
|
const mod = await import("../docs-cli.js");
|
|
136
157
|
mod.registerDocsCli(program);
|
|
@@ -138,7 +159,8 @@ const entries = [
|
|
|
138
159
|
},
|
|
139
160
|
{
|
|
140
161
|
name: "hooks",
|
|
141
|
-
description: "
|
|
162
|
+
description: "Manage internal agent hooks",
|
|
163
|
+
hasSubcommands: true,
|
|
142
164
|
register: async (program) => {
|
|
143
165
|
const mod = await import("../hooks-cli.js");
|
|
144
166
|
mod.registerHooksCli(program);
|
|
@@ -146,23 +168,49 @@ const entries = [
|
|
|
146
168
|
},
|
|
147
169
|
{
|
|
148
170
|
name: "webhooks",
|
|
149
|
-
description: "Webhook helpers",
|
|
171
|
+
description: "Webhook helpers and integrations",
|
|
172
|
+
hasSubcommands: true,
|
|
150
173
|
register: async (program) => {
|
|
151
174
|
const mod = await import("../webhooks-cli.js");
|
|
152
175
|
mod.registerWebhooksCli(program);
|
|
153
176
|
},
|
|
154
177
|
},
|
|
178
|
+
{
|
|
179
|
+
name: "qr",
|
|
180
|
+
description: "Generate iOS pairing QR/setup code",
|
|
181
|
+
hasSubcommands: false,
|
|
182
|
+
register: async (program) => {
|
|
183
|
+
const mod = await import("../qr-cli.js");
|
|
184
|
+
mod.registerQrCli(program);
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: "clawbot",
|
|
189
|
+
description: "Legacy clawbot command aliases",
|
|
190
|
+
hasSubcommands: true,
|
|
191
|
+
register: async (program) => {
|
|
192
|
+
const mod = await import("../clawbot-cli.js");
|
|
193
|
+
mod.registerClawbotCli(program);
|
|
194
|
+
},
|
|
195
|
+
},
|
|
155
196
|
{
|
|
156
197
|
name: "pairing",
|
|
157
|
-
description: "
|
|
198
|
+
description: "Secure DM pairing (approve inbound requests)",
|
|
199
|
+
hasSubcommands: true,
|
|
158
200
|
register: async (program) => {
|
|
201
|
+
// Initialize plugins before registering pairing CLI.
|
|
202
|
+
// The pairing CLI calls listPairingChannels() at registration time,
|
|
203
|
+
// which requires the plugin registry to be populated with channel plugins.
|
|
204
|
+
const { registerPluginCliCommands } = await import("../../plugins/cli.js");
|
|
205
|
+
registerPluginCliCommands(program, await loadConfig());
|
|
159
206
|
const mod = await import("../pairing-cli.js");
|
|
160
207
|
mod.registerPairingCli(program);
|
|
161
208
|
},
|
|
162
209
|
},
|
|
163
210
|
{
|
|
164
211
|
name: "plugins",
|
|
165
|
-
description: "
|
|
212
|
+
description: "Manage Pool Bot plugins and extensions",
|
|
213
|
+
hasSubcommands: true,
|
|
166
214
|
register: async (program) => {
|
|
167
215
|
const mod = await import("../plugins-cli.js");
|
|
168
216
|
mod.registerPluginsCli(program);
|
|
@@ -172,7 +220,8 @@ const entries = [
|
|
|
172
220
|
},
|
|
173
221
|
{
|
|
174
222
|
name: "channels",
|
|
175
|
-
description: "
|
|
223
|
+
description: "Manage connected chat channels (Telegram, Discord, etc.)",
|
|
224
|
+
hasSubcommands: true,
|
|
176
225
|
register: async (program) => {
|
|
177
226
|
const mod = await import("../channels-cli.js");
|
|
178
227
|
mod.registerChannelsCli(program);
|
|
@@ -180,7 +229,8 @@ const entries = [
|
|
|
180
229
|
},
|
|
181
230
|
{
|
|
182
231
|
name: "directory",
|
|
183
|
-
description: "
|
|
232
|
+
description: "Lookup contact and group IDs (self, peers, groups) for supported chat channels",
|
|
233
|
+
hasSubcommands: true,
|
|
184
234
|
register: async (program) => {
|
|
185
235
|
const mod = await import("../directory-cli.js");
|
|
186
236
|
mod.registerDirectoryCli(program);
|
|
@@ -188,7 +238,8 @@ const entries = [
|
|
|
188
238
|
},
|
|
189
239
|
{
|
|
190
240
|
name: "security",
|
|
191
|
-
description: "Security
|
|
241
|
+
description: "Security tools and local config audits",
|
|
242
|
+
hasSubcommands: true,
|
|
192
243
|
register: async (program) => {
|
|
193
244
|
const mod = await import("../security-cli.js");
|
|
194
245
|
mod.registerSecurityCli(program);
|
|
@@ -196,7 +247,8 @@ const entries = [
|
|
|
196
247
|
},
|
|
197
248
|
{
|
|
198
249
|
name: "skills",
|
|
199
|
-
description: "
|
|
250
|
+
description: "List and inspect available skills",
|
|
251
|
+
hasSubcommands: true,
|
|
200
252
|
register: async (program) => {
|
|
201
253
|
const mod = await import("../skills-cli.js");
|
|
202
254
|
mod.registerSkillsCli(program);
|
|
@@ -204,34 +256,35 @@ const entries = [
|
|
|
204
256
|
},
|
|
205
257
|
{
|
|
206
258
|
name: "update",
|
|
207
|
-
description: "
|
|
259
|
+
description: "Update Pool Bot and inspect update channel status",
|
|
260
|
+
hasSubcommands: true,
|
|
208
261
|
register: async (program) => {
|
|
209
262
|
const mod = await import("../update-cli.js");
|
|
210
263
|
mod.registerUpdateCli(program);
|
|
211
264
|
},
|
|
212
265
|
},
|
|
266
|
+
{
|
|
267
|
+
name: "completion",
|
|
268
|
+
description: "Generate shell completion script",
|
|
269
|
+
hasSubcommands: false,
|
|
270
|
+
register: async (program) => {
|
|
271
|
+
const mod = await import("../completion-cli.js");
|
|
272
|
+
mod.registerCompletionCli(program);
|
|
273
|
+
},
|
|
274
|
+
},
|
|
213
275
|
];
|
|
214
|
-
function removeCommand(program, command) {
|
|
215
|
-
const commands = program.commands;
|
|
216
|
-
const index = commands.indexOf(command);
|
|
217
|
-
if (index >= 0) {
|
|
218
|
-
commands.splice(index, 1);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
276
|
export function getSubCliEntries() {
|
|
222
|
-
return entries
|
|
277
|
+
return entries;
|
|
223
278
|
}
|
|
224
279
|
export function getSubCliCommandsWithSubcommands() {
|
|
225
|
-
|
|
226
|
-
return entries.map((e) => e.name);
|
|
280
|
+
return entries.filter((entry) => entry.hasSubcommands).map((entry) => entry.name);
|
|
227
281
|
}
|
|
228
282
|
export async function registerSubCliByName(program, name) {
|
|
229
283
|
const entry = entries.find((candidate) => candidate.name === name);
|
|
230
|
-
if (!entry)
|
|
284
|
+
if (!entry) {
|
|
231
285
|
return false;
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
removeCommand(program, existing);
|
|
286
|
+
}
|
|
287
|
+
removeCommandByName(program, entry.name);
|
|
235
288
|
await entry.register(program);
|
|
236
289
|
return true;
|
|
237
290
|
}
|
|
@@ -242,19 +295,7 @@ function registerLazyCommand(program, entry) {
|
|
|
242
295
|
placeholder.action(async (...actionArgs) => {
|
|
243
296
|
removeCommand(program, placeholder);
|
|
244
297
|
await entry.register(program);
|
|
245
|
-
|
|
246
|
-
const root = actionCommand?.parent ?? program;
|
|
247
|
-
const rawArgs = root.rawArgs;
|
|
248
|
-
const actionArgsList = resolveActionArgs(actionCommand);
|
|
249
|
-
const fallbackArgv = actionCommand?.name()
|
|
250
|
-
? [actionCommand.name(), ...actionArgsList]
|
|
251
|
-
: actionArgsList;
|
|
252
|
-
const parseArgv = buildParseArgv({
|
|
253
|
-
programName: program.name(),
|
|
254
|
-
rawArgs,
|
|
255
|
-
fallbackArgv,
|
|
256
|
-
});
|
|
257
|
-
await program.parseAsync(parseArgv);
|
|
298
|
+
await reparseProgramFromActionArgs(program, actionArgs);
|
|
258
299
|
});
|
|
259
300
|
}
|
|
260
301
|
export function registerSubCliCommands(program, argv = process.argv) {
|
package/dist/cli/route.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { defaultRuntime } from "../runtime.js";
|
|
2
|
-
import { ensurePluginRegistryLoaded } from "./plugin-registry.js";
|
|
3
1
|
import { isTruthyEnvValue } from "../infra/env.js";
|
|
4
|
-
import {
|
|
2
|
+
import { defaultRuntime } from "../runtime.js";
|
|
5
3
|
import { VERSION } from "../version.js";
|
|
6
4
|
import { getCommandPath, hasHelpOrVersion } from "./argv.js";
|
|
5
|
+
import { emitCliBanner } from "./banner.js";
|
|
6
|
+
import { ensurePluginRegistryLoaded } from "./plugin-registry.js";
|
|
7
7
|
import { ensureConfigReady } from "./program/config-guard.js";
|
|
8
|
-
import { findRoutedCommand } from "./program/
|
|
8
|
+
import { findRoutedCommand } from "./program/routes.js";
|
|
9
9
|
async function prepareRoutedCommand(params) {
|
|
10
10
|
emitCliBanner(VERSION, { argv: params.argv });
|
|
11
11
|
await ensureConfigReady({ runtime: defaultRuntime, commandPath: params.commandPath });
|
|
@@ -14,16 +14,20 @@ async function prepareRoutedCommand(params) {
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
export async function tryRouteCli(argv) {
|
|
17
|
-
if (isTruthyEnvValue(process.env.POOLBOT_DISABLE_ROUTE_FIRST
|
|
17
|
+
if (isTruthyEnvValue(process.env.POOLBOT_DISABLE_ROUTE_FIRST)) {
|
|
18
18
|
return false;
|
|
19
|
-
|
|
19
|
+
}
|
|
20
|
+
if (hasHelpOrVersion(argv)) {
|
|
20
21
|
return false;
|
|
22
|
+
}
|
|
21
23
|
const path = getCommandPath(argv, 2);
|
|
22
|
-
if (!path[0])
|
|
24
|
+
if (!path[0]) {
|
|
23
25
|
return false;
|
|
26
|
+
}
|
|
24
27
|
const route = findRoutedCommand(path);
|
|
25
|
-
if (!route)
|
|
28
|
+
if (!route) {
|
|
26
29
|
return false;
|
|
30
|
+
}
|
|
27
31
|
await prepareRoutedCommand({ argv, commandPath: path, loadPlugins: route.loadPlugins });
|
|
28
32
|
return route.run(argv);
|
|
29
33
|
}
|
package/dist/cli/system-cli.js
CHANGED
|
@@ -5,12 +5,29 @@ import { theme } from "../terminal/theme.js";
|
|
|
5
5
|
import { addGatewayClientOptions, callGatewayFromCli } from "./gateway-rpc.js";
|
|
6
6
|
const normalizeWakeMode = (raw) => {
|
|
7
7
|
const mode = typeof raw === "string" ? raw.trim() : "";
|
|
8
|
-
if (!mode)
|
|
8
|
+
if (!mode) {
|
|
9
9
|
return "next-heartbeat";
|
|
10
|
-
|
|
10
|
+
}
|
|
11
|
+
if (mode === "now" || mode === "next-heartbeat") {
|
|
11
12
|
return mode;
|
|
13
|
+
}
|
|
12
14
|
throw new Error("--mode must be now or next-heartbeat");
|
|
13
15
|
};
|
|
16
|
+
async function runSystemGatewayCommand(opts, action, successText) {
|
|
17
|
+
try {
|
|
18
|
+
const result = await action();
|
|
19
|
+
if (opts.json || successText === undefined) {
|
|
20
|
+
defaultRuntime.log(JSON.stringify(result, null, 2));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
defaultRuntime.log(successText);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
defaultRuntime.error(danger(String(err)));
|
|
28
|
+
defaultRuntime.exit(1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
14
31
|
export function registerSystemCli(program) {
|
|
15
32
|
const system = program
|
|
16
33
|
.command("system")
|
|
@@ -22,77 +39,50 @@ export function registerSystemCli(program) {
|
|
|
22
39
|
.requiredOption("--text <text>", "System event text")
|
|
23
40
|
.option("--mode <mode>", "Wake mode (now|next-heartbeat)", "next-heartbeat")
|
|
24
41
|
.option("--json", "Output JSON", false)).action(async (opts) => {
|
|
25
|
-
|
|
42
|
+
await runSystemGatewayCommand(opts, async () => {
|
|
26
43
|
const text = typeof opts.text === "string" ? opts.text.trim() : "";
|
|
27
|
-
if (!text)
|
|
44
|
+
if (!text) {
|
|
28
45
|
throw new Error("--text is required");
|
|
46
|
+
}
|
|
29
47
|
const mode = normalizeWakeMode(opts.mode);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
defaultRuntime.log(JSON.stringify(result, null, 2));
|
|
33
|
-
else
|
|
34
|
-
defaultRuntime.log("ok");
|
|
35
|
-
}
|
|
36
|
-
catch (err) {
|
|
37
|
-
defaultRuntime.error(danger(String(err)));
|
|
38
|
-
defaultRuntime.exit(1);
|
|
39
|
-
}
|
|
48
|
+
return await callGatewayFromCli("wake", opts, { mode, text }, { expectFinal: false });
|
|
49
|
+
}, "ok");
|
|
40
50
|
});
|
|
41
51
|
const heartbeat = system.command("heartbeat").description("Heartbeat controls");
|
|
42
52
|
addGatewayClientOptions(heartbeat
|
|
43
53
|
.command("last")
|
|
44
54
|
.description("Show the last heartbeat event")
|
|
45
55
|
.option("--json", "Output JSON", false)).action(async (opts) => {
|
|
46
|
-
|
|
47
|
-
|
|
56
|
+
await runSystemGatewayCommand(opts, async () => {
|
|
57
|
+
return await callGatewayFromCli("last-heartbeat", opts, undefined, {
|
|
48
58
|
expectFinal: false,
|
|
49
59
|
});
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
catch (err) {
|
|
53
|
-
defaultRuntime.error(danger(String(err)));
|
|
54
|
-
defaultRuntime.exit(1);
|
|
55
|
-
}
|
|
60
|
+
});
|
|
56
61
|
});
|
|
57
62
|
addGatewayClientOptions(heartbeat
|
|
58
63
|
.command("enable")
|
|
59
64
|
.description("Enable heartbeats")
|
|
60
65
|
.option("--json", "Output JSON", false)).action(async (opts) => {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
catch (err) {
|
|
66
|
-
defaultRuntime.error(danger(String(err)));
|
|
67
|
-
defaultRuntime.exit(1);
|
|
68
|
-
}
|
|
66
|
+
await runSystemGatewayCommand(opts, async () => {
|
|
67
|
+
return await callGatewayFromCli("set-heartbeats", opts, { enabled: true }, { expectFinal: false });
|
|
68
|
+
});
|
|
69
69
|
});
|
|
70
70
|
addGatewayClientOptions(heartbeat
|
|
71
71
|
.command("disable")
|
|
72
72
|
.description("Disable heartbeats")
|
|
73
73
|
.option("--json", "Output JSON", false)).action(async (opts) => {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
catch (err) {
|
|
79
|
-
defaultRuntime.error(danger(String(err)));
|
|
80
|
-
defaultRuntime.exit(1);
|
|
81
|
-
}
|
|
74
|
+
await runSystemGatewayCommand(opts, async () => {
|
|
75
|
+
return await callGatewayFromCli("set-heartbeats", opts, { enabled: false }, { expectFinal: false });
|
|
76
|
+
});
|
|
82
77
|
});
|
|
83
78
|
addGatewayClientOptions(system
|
|
84
79
|
.command("presence")
|
|
85
80
|
.description("List system presence entries")
|
|
86
81
|
.option("--json", "Output JSON", false)).action(async (opts) => {
|
|
87
|
-
|
|
88
|
-
|
|
82
|
+
await runSystemGatewayCommand(opts, async () => {
|
|
83
|
+
return await callGatewayFromCli("system-presence", opts, undefined, {
|
|
89
84
|
expectFinal: false,
|
|
90
85
|
});
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
catch (err) {
|
|
94
|
-
defaultRuntime.error(danger(String(err)));
|
|
95
|
-
defaultRuntime.exit(1);
|
|
96
|
-
}
|
|
86
|
+
});
|
|
97
87
|
});
|
|
98
88
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function createCliRuntimeCapture() {
|
|
2
|
+
const runtimeLogs = [];
|
|
3
|
+
const runtimeErrors = [];
|
|
4
|
+
const stringifyArgs = (args) => args.map((value) => String(value)).join(" ");
|
|
5
|
+
return {
|
|
6
|
+
runtimeLogs,
|
|
7
|
+
runtimeErrors,
|
|
8
|
+
defaultRuntime: {
|
|
9
|
+
log: (...args) => {
|
|
10
|
+
runtimeLogs.push(stringifyArgs(args));
|
|
11
|
+
},
|
|
12
|
+
error: (...args) => {
|
|
13
|
+
runtimeErrors.push(stringifyArgs(args));
|
|
14
|
+
},
|
|
15
|
+
exit: (code) => {
|
|
16
|
+
throw new Error(`__exit__:${code}`);
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
resetRuntimeCapture: () => {
|
|
20
|
+
runtimeLogs.length = 0;
|
|
21
|
+
runtimeErrors.length = 0;
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -13,9 +13,19 @@ import { runCommandWithTimeout } from "../../process/exec.js";
|
|
|
13
13
|
import { defaultRuntime } from "../../runtime.js";
|
|
14
14
|
import { theme } from "../../terminal/theme.js";
|
|
15
15
|
import { pathExists } from "../../utils.js";
|
|
16
|
-
const
|
|
16
|
+
const INVALID_TIMEOUT_ERROR = "--timeout must be a positive integer (seconds)";
|
|
17
|
+
export function parseTimeoutMsOrExit(timeout) {
|
|
18
|
+
const timeoutMs = timeout ? Number.parseInt(timeout, 10) * 1000 : undefined;
|
|
19
|
+
if (timeoutMs !== undefined && (Number.isNaN(timeoutMs) || timeoutMs <= 0)) {
|
|
20
|
+
defaultRuntime.error(INVALID_TIMEOUT_ERROR);
|
|
21
|
+
defaultRuntime.exit(1);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return timeoutMs;
|
|
25
|
+
}
|
|
26
|
+
const POOLBOT_REPO_URL = "https://github.com/plcunha/pool-bot.git";
|
|
17
27
|
const MAX_LOG_CHARS = 8000;
|
|
18
|
-
export const DEFAULT_PACKAGE_NAME = "
|
|
28
|
+
export const DEFAULT_PACKAGE_NAME = "@poolzin/pool-bot";
|
|
19
29
|
const CORE_PACKAGE_NAMES = new Set([DEFAULT_PACKAGE_NAME]);
|
|
20
30
|
export function normalizeTag(value) {
|
|
21
31
|
if (!value) {
|
|
@@ -25,8 +35,8 @@ export function normalizeTag(value) {
|
|
|
25
35
|
if (!trimmed) {
|
|
26
36
|
return null;
|
|
27
37
|
}
|
|
28
|
-
if (trimmed.startsWith("
|
|
29
|
-
return trimmed.slice("
|
|
38
|
+
if (trimmed.startsWith("pool-bot@")) {
|
|
39
|
+
return trimmed.slice("pool-bot@".length);
|
|
30
40
|
}
|
|
31
41
|
if (trimmed.startsWith(`${DEFAULT_PACKAGE_NAME}@`)) {
|
|
32
42
|
return trimmed.slice(`${DEFAULT_PACKAGE_NAME}@`.length);
|
|
@@ -143,7 +153,7 @@ export async function ensureGitCheckout(params) {
|
|
|
143
153
|
if (!(await isGitCheckout(params.dir))) {
|
|
144
154
|
const empty = await isEmptyDir(params.dir);
|
|
145
155
|
if (!empty) {
|
|
146
|
-
throw new Error(`POOLBOT_GIT_DIR points at a non-git directory: ${params.dir}. Set POOLBOT_GIT_DIR to an empty folder or
|
|
156
|
+
throw new Error(`POOLBOT_GIT_DIR points at a non-git directory: ${params.dir}. Set POOLBOT_GIT_DIR to an empty folder or a pool-bot checkout.`);
|
|
147
157
|
}
|
|
148
158
|
return await runUpdateStep({
|
|
149
159
|
name: "git clone",
|
|
@@ -159,10 +169,7 @@ export async function ensureGitCheckout(params) {
|
|
|
159
169
|
return null;
|
|
160
170
|
}
|
|
161
171
|
export async function resolveGlobalManager(params) {
|
|
162
|
-
const runCommand =
|
|
163
|
-
const res = await runCommandWithTimeout(argv, options);
|
|
164
|
-
return { stdout: res.stdout, stderr: res.stderr, code: res.code };
|
|
165
|
-
};
|
|
172
|
+
const runCommand = createGlobalCommandRunner();
|
|
166
173
|
if (params.installKind === "package") {
|
|
167
174
|
const detected = await detectGlobalInstallManagerForRoot(runCommand, params.root, params.timeoutMs);
|
|
168
175
|
if (detected) {
|
|
@@ -194,3 +201,9 @@ export async function tryWriteCompletionCache(root, jsonMode) {
|
|
|
194
201
|
defaultRuntime.log(theme.warn(`Completion cache update failed${detail}.`));
|
|
195
202
|
}
|
|
196
203
|
}
|
|
204
|
+
export function createGlobalCommandRunner() {
|
|
205
|
+
return async (argv, options) => {
|
|
206
|
+
const res = await runCommandWithTimeout(argv, options);
|
|
207
|
+
return { stdout: res.stdout, stderr: res.stderr, code: res.code };
|
|
208
|
+
};
|
|
209
|
+
}
|