@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
|
@@ -2,9 +2,11 @@ import { upsertAuthProfile } from "../../../agents/auth-profiles.js";
|
|
|
2
2
|
import { normalizeProviderId } from "../../../agents/model-selection.js";
|
|
3
3
|
import { parseDurationMs } from "../../../cli/parse-duration.js";
|
|
4
4
|
import { upsertSharedEnvVar } from "../../../infra/env-file.js";
|
|
5
|
+
import { normalizeSecretInput } from "../../../utils/normalize-secret-input.js";
|
|
5
6
|
import { buildTokenProfileId, validateAnthropicSetupToken } from "../../auth-token.js";
|
|
6
7
|
import { applyGoogleGeminiModelDefault } from "../../google-gemini-model-default.js";
|
|
7
|
-
import {
|
|
8
|
+
import { applyOpenAIConfig } from "../../openai-model-default.js";
|
|
9
|
+
import { applyAuthProfileConfig, applyCloudflareAiGatewayConfig, applyKimiCodeConfig, applyMinimaxApiConfig, applyMinimaxConfig, applyMoonshotConfig, applyMoonshotConfigCn, applyOpencodeZenConfig, applyOpenrouterConfig, applyQianfanConfig, applySyntheticConfig, applyTogetherConfig, applyVeniceConfig, applyVercelAiGatewayConfig, applyXaiConfig, applyXiaomiConfig, applyZaiConfig, setAnthropicApiKey, setCloudflareAiGatewayConfig, setGeminiApiKey, setKimiCodingApiKey, setMinimaxApiKey, setMoonshotApiKey, setOpencodeZenApiKey, setOpenrouterApiKey, setQianfanApiKey, setSyntheticApiKey, setTogetherApiKey, setVeniceApiKey, setVercelAiGatewayApiKey, setXaiApiKey, setXiaomiApiKey, setZaiApiKey, } from "../../onboard-auth.js";
|
|
8
10
|
import { resolveNonInteractiveApiKey } from "../api-keys.js";
|
|
9
11
|
import { shortenHomePath } from "../../../utils.js";
|
|
10
12
|
export async function applyNonInteractiveAuthChoice(params) {
|
|
@@ -58,7 +60,7 @@ export async function applyNonInteractiveAuthChoice(params) {
|
|
|
58
60
|
runtime.exit(1);
|
|
59
61
|
return null;
|
|
60
62
|
}
|
|
61
|
-
const tokenRaw = opts.token
|
|
63
|
+
const tokenRaw = normalizeSecretInput(opts.token);
|
|
62
64
|
if (!tokenRaw) {
|
|
63
65
|
runtime.error("Missing --token for --auth-choice token.");
|
|
64
66
|
runtime.exit(1);
|
|
@@ -154,7 +156,7 @@ export async function applyNonInteractiveAuthChoice(params) {
|
|
|
154
156
|
const result = upsertSharedEnvVar({ key: "OPENAI_API_KEY", value: key });
|
|
155
157
|
process.env.OPENAI_API_KEY = key;
|
|
156
158
|
runtime.log(`Saved OPENAI_API_KEY to ${shortenHomePath(result.path)}`);
|
|
157
|
-
return nextConfig;
|
|
159
|
+
return applyOpenAIConfig(nextConfig);
|
|
158
160
|
}
|
|
159
161
|
if (authChoice === "openrouter-api-key") {
|
|
160
162
|
const resolved = await resolveNonInteractiveApiKey({
|
|
@@ -216,22 +218,42 @@ export async function applyNonInteractiveAuthChoice(params) {
|
|
|
216
218
|
});
|
|
217
219
|
return applyMoonshotConfig(nextConfig);
|
|
218
220
|
}
|
|
221
|
+
if (authChoice === "moonshot-api-key-cn") {
|
|
222
|
+
const resolved = await resolveNonInteractiveApiKey({
|
|
223
|
+
provider: "moonshot",
|
|
224
|
+
cfg: baseConfig,
|
|
225
|
+
flagValue: opts.moonshotApiKey,
|
|
226
|
+
flagName: "--moonshot-api-key",
|
|
227
|
+
envVar: "MOONSHOT_API_KEY",
|
|
228
|
+
runtime,
|
|
229
|
+
});
|
|
230
|
+
if (!resolved)
|
|
231
|
+
return null;
|
|
232
|
+
if (resolved.source !== "profile")
|
|
233
|
+
await setMoonshotApiKey(resolved.key);
|
|
234
|
+
nextConfig = applyAuthProfileConfig(nextConfig, {
|
|
235
|
+
profileId: "moonshot:default",
|
|
236
|
+
provider: "moonshot",
|
|
237
|
+
mode: "api_key",
|
|
238
|
+
});
|
|
239
|
+
return applyMoonshotConfigCn(nextConfig);
|
|
240
|
+
}
|
|
219
241
|
if (authChoice === "kimi-code-api-key") {
|
|
220
242
|
const resolved = await resolveNonInteractiveApiKey({
|
|
221
|
-
provider: "kimi-
|
|
243
|
+
provider: "kimi-coding",
|
|
222
244
|
cfg: baseConfig,
|
|
223
245
|
flagValue: opts.kimiCodeApiKey,
|
|
224
246
|
flagName: "--kimi-code-api-key",
|
|
225
|
-
envVar: "
|
|
247
|
+
envVar: "KIMI_API_KEY",
|
|
226
248
|
runtime,
|
|
227
249
|
});
|
|
228
250
|
if (!resolved)
|
|
229
251
|
return null;
|
|
230
252
|
if (resolved.source !== "profile")
|
|
231
|
-
await
|
|
253
|
+
await setKimiCodingApiKey(resolved.key);
|
|
232
254
|
nextConfig = applyAuthProfileConfig(nextConfig, {
|
|
233
|
-
profileId: "kimi-
|
|
234
|
-
provider: "kimi-
|
|
255
|
+
profileId: "kimi-coding:default",
|
|
256
|
+
provider: "kimi-coding",
|
|
235
257
|
mode: "api_key",
|
|
236
258
|
});
|
|
237
259
|
return applyKimiCodeConfig(nextConfig);
|
|
@@ -276,6 +298,120 @@ export async function applyNonInteractiveAuthChoice(params) {
|
|
|
276
298
|
});
|
|
277
299
|
return applyVeniceConfig(nextConfig);
|
|
278
300
|
}
|
|
301
|
+
if (authChoice === "xiaomi-api-key") {
|
|
302
|
+
const resolved = await resolveNonInteractiveApiKey({
|
|
303
|
+
provider: "xiaomi",
|
|
304
|
+
cfg: baseConfig,
|
|
305
|
+
flagValue: opts.xiaomiApiKey,
|
|
306
|
+
flagName: "--xiaomi-api-key",
|
|
307
|
+
envVar: "XIAOMI_API_KEY",
|
|
308
|
+
runtime,
|
|
309
|
+
});
|
|
310
|
+
if (!resolved)
|
|
311
|
+
return null;
|
|
312
|
+
if (resolved.source !== "profile")
|
|
313
|
+
await setXiaomiApiKey(resolved.key);
|
|
314
|
+
nextConfig = applyAuthProfileConfig(nextConfig, {
|
|
315
|
+
profileId: "xiaomi:default",
|
|
316
|
+
provider: "xiaomi",
|
|
317
|
+
mode: "api_key",
|
|
318
|
+
});
|
|
319
|
+
return applyXiaomiConfig(nextConfig);
|
|
320
|
+
}
|
|
321
|
+
if (authChoice === "xai-api-key") {
|
|
322
|
+
const resolved = await resolveNonInteractiveApiKey({
|
|
323
|
+
provider: "xai",
|
|
324
|
+
cfg: baseConfig,
|
|
325
|
+
flagValue: opts.xaiApiKey,
|
|
326
|
+
flagName: "--xai-api-key",
|
|
327
|
+
envVar: "XAI_API_KEY",
|
|
328
|
+
runtime,
|
|
329
|
+
});
|
|
330
|
+
if (!resolved)
|
|
331
|
+
return null;
|
|
332
|
+
if (resolved.source !== "profile")
|
|
333
|
+
setXaiApiKey(resolved.key);
|
|
334
|
+
nextConfig = applyAuthProfileConfig(nextConfig, {
|
|
335
|
+
profileId: "xai:default",
|
|
336
|
+
provider: "xai",
|
|
337
|
+
mode: "api_key",
|
|
338
|
+
});
|
|
339
|
+
return applyXaiConfig(nextConfig);
|
|
340
|
+
}
|
|
341
|
+
if (authChoice === "qianfan-api-key") {
|
|
342
|
+
const resolved = await resolveNonInteractiveApiKey({
|
|
343
|
+
provider: "qianfan",
|
|
344
|
+
cfg: baseConfig,
|
|
345
|
+
flagValue: opts.qianfanApiKey,
|
|
346
|
+
flagName: "--qianfan-api-key",
|
|
347
|
+
envVar: "QIANFAN_API_KEY",
|
|
348
|
+
runtime,
|
|
349
|
+
});
|
|
350
|
+
if (!resolved)
|
|
351
|
+
return null;
|
|
352
|
+
if (resolved.source !== "profile")
|
|
353
|
+
setQianfanApiKey(resolved.key);
|
|
354
|
+
nextConfig = applyAuthProfileConfig(nextConfig, {
|
|
355
|
+
profileId: "qianfan:default",
|
|
356
|
+
provider: "qianfan",
|
|
357
|
+
mode: "api_key",
|
|
358
|
+
});
|
|
359
|
+
return applyQianfanConfig(nextConfig);
|
|
360
|
+
}
|
|
361
|
+
if (authChoice === "cloudflare-ai-gateway-api-key") {
|
|
362
|
+
const accountId = opts.cloudflareAiGatewayAccountId?.trim() ?? "";
|
|
363
|
+
const gatewayId = opts.cloudflareAiGatewayGatewayId?.trim() ?? "";
|
|
364
|
+
if (!accountId || !gatewayId) {
|
|
365
|
+
runtime.error([
|
|
366
|
+
'Auth choice "cloudflare-ai-gateway-api-key" requires Account ID and Gateway ID.',
|
|
367
|
+
"Use --cloudflare-ai-gateway-account-id and --cloudflare-ai-gateway-gateway-id.",
|
|
368
|
+
].join("\n"));
|
|
369
|
+
runtime.exit(1);
|
|
370
|
+
return null;
|
|
371
|
+
}
|
|
372
|
+
const resolved = await resolveNonInteractiveApiKey({
|
|
373
|
+
provider: "cloudflare-ai-gateway",
|
|
374
|
+
cfg: baseConfig,
|
|
375
|
+
flagValue: opts.cloudflareAiGatewayApiKey,
|
|
376
|
+
flagName: "--cloudflare-ai-gateway-api-key",
|
|
377
|
+
envVar: "CLOUDFLARE_AI_GATEWAY_API_KEY",
|
|
378
|
+
runtime,
|
|
379
|
+
});
|
|
380
|
+
if (!resolved)
|
|
381
|
+
return null;
|
|
382
|
+
if (resolved.source !== "profile") {
|
|
383
|
+
await setCloudflareAiGatewayConfig(accountId, gatewayId, resolved.key);
|
|
384
|
+
}
|
|
385
|
+
nextConfig = applyAuthProfileConfig(nextConfig, {
|
|
386
|
+
profileId: "cloudflare-ai-gateway:default",
|
|
387
|
+
provider: "cloudflare-ai-gateway",
|
|
388
|
+
mode: "api_key",
|
|
389
|
+
});
|
|
390
|
+
return applyCloudflareAiGatewayConfig(nextConfig, {
|
|
391
|
+
accountId,
|
|
392
|
+
gatewayId,
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
if (authChoice === "together-api-key") {
|
|
396
|
+
const resolved = await resolveNonInteractiveApiKey({
|
|
397
|
+
provider: "together",
|
|
398
|
+
cfg: baseConfig,
|
|
399
|
+
flagValue: opts.togetherApiKey,
|
|
400
|
+
flagName: "--together-api-key",
|
|
401
|
+
envVar: "TOGETHER_API_KEY",
|
|
402
|
+
runtime,
|
|
403
|
+
});
|
|
404
|
+
if (!resolved)
|
|
405
|
+
return null;
|
|
406
|
+
if (resolved.source !== "profile")
|
|
407
|
+
await setTogetherApiKey(resolved.key);
|
|
408
|
+
nextConfig = applyAuthProfileConfig(nextConfig, {
|
|
409
|
+
profileId: "together:default",
|
|
410
|
+
provider: "together",
|
|
411
|
+
mode: "api_key",
|
|
412
|
+
});
|
|
413
|
+
return applyTogetherConfig(nextConfig);
|
|
414
|
+
}
|
|
279
415
|
if (authChoice === "minimax-cloud" ||
|
|
280
416
|
authChoice === "minimax-api" ||
|
|
281
417
|
authChoice === "minimax-api-lightning") {
|
|
@@ -324,7 +460,8 @@ export async function applyNonInteractiveAuthChoice(params) {
|
|
|
324
460
|
if (authChoice === "oauth" ||
|
|
325
461
|
authChoice === "chutes" ||
|
|
326
462
|
authChoice === "openai-codex" ||
|
|
327
|
-
authChoice === "qwen-portal"
|
|
463
|
+
authChoice === "qwen-portal" ||
|
|
464
|
+
authChoice === "minimax-portal") {
|
|
328
465
|
runtime.error("OAuth requires interactive mode.");
|
|
329
466
|
runtime.exit(1);
|
|
330
467
|
return null;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { installSkill } from "../agents/skills-install.js";
|
|
2
2
|
import { buildWorkspaceSkillStatus } from "../agents/skills-status.js";
|
|
3
3
|
import { formatCliCommand } from "../cli/command-format.js";
|
|
4
|
+
import { normalizeSecretInput } from "../utils/normalize-secret-input.js";
|
|
4
5
|
import { detectBinary, resolveNodeManagerOptions } from "./onboard-helpers.js";
|
|
5
6
|
function summarizeInstallFailure(message) {
|
|
6
7
|
const cleaned = message.replace(/^Install failed(?:\s*\([^)]*\))?\s*:?\s*/i, "").trim();
|
|
@@ -33,14 +34,13 @@ function upsertSkillEntry(cfg, skillKey, patch) {
|
|
|
33
34
|
export async function setupSkills(cfg, workspaceDir, runtime, prompter) {
|
|
34
35
|
const report = buildWorkspaceSkillStatus(workspaceDir, { config: cfg });
|
|
35
36
|
const eligible = report.skills.filter((s) => s.eligible);
|
|
36
|
-
const
|
|
37
|
+
const unsupportedOs = report.skills.filter((s) => !s.disabled && !s.blockedByAllowlist && s.missing.os.length > 0);
|
|
38
|
+
const missing = report.skills.filter((s) => !s.eligible && !s.disabled && !s.blockedByAllowlist && s.missing.os.length === 0);
|
|
37
39
|
const blocked = report.skills.filter((s) => s.blockedByAllowlist);
|
|
38
|
-
const needsBrewPrompt = process.platform !== "win32" &&
|
|
39
|
-
report.skills.some((skill) => skill.install.some((option) => option.kind === "brew")) &&
|
|
40
|
-
!(await detectBinary("brew"));
|
|
41
40
|
await prompter.note([
|
|
42
41
|
`Eligible: ${eligible.length}`,
|
|
43
42
|
`Missing requirements: ${missing.length}`,
|
|
43
|
+
`Unsupported on this OS: ${unsupportedOs.length}`,
|
|
44
44
|
`Blocked by allowlist: ${blocked.length}`,
|
|
45
45
|
].join("\n"), "Skills status");
|
|
46
46
|
const shouldConfigure = await prompter.confirm({
|
|
@@ -49,36 +49,7 @@ export async function setupSkills(cfg, workspaceDir, runtime, prompter) {
|
|
|
49
49
|
});
|
|
50
50
|
if (!shouldConfigure)
|
|
51
51
|
return cfg;
|
|
52
|
-
|
|
53
|
-
await prompter.note([
|
|
54
|
-
"Many skill dependencies are shipped via Homebrew.",
|
|
55
|
-
"Without brew, you'll need to build from source or download releases manually.",
|
|
56
|
-
].join("\n"), "Homebrew recommended");
|
|
57
|
-
const showBrewInstall = await prompter.confirm({
|
|
58
|
-
message: "Show Homebrew install command?",
|
|
59
|
-
initialValue: true,
|
|
60
|
-
});
|
|
61
|
-
if (showBrewInstall) {
|
|
62
|
-
await prompter.note([
|
|
63
|
-
"Run:",
|
|
64
|
-
'/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"',
|
|
65
|
-
].join("\n"), "Homebrew install");
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
const nodeManager = (await prompter.select({
|
|
69
|
-
message: "Preferred node manager for skill installs",
|
|
70
|
-
options: resolveNodeManagerOptions(),
|
|
71
|
-
}));
|
|
72
|
-
let next = {
|
|
73
|
-
...cfg,
|
|
74
|
-
skills: {
|
|
75
|
-
...cfg.skills,
|
|
76
|
-
install: {
|
|
77
|
-
...cfg.skills?.install,
|
|
78
|
-
nodeManager,
|
|
79
|
-
},
|
|
80
|
-
},
|
|
81
|
-
};
|
|
52
|
+
let next = cfg;
|
|
82
53
|
const installable = missing.filter((skill) => skill.install.length > 0 && skill.missing.bins.length > 0);
|
|
83
54
|
if (installable.length > 0) {
|
|
84
55
|
const toInstall = await prompter.multiselect({
|
|
@@ -96,8 +67,50 @@ export async function setupSkills(cfg, workspaceDir, runtime, prompter) {
|
|
|
96
67
|
})),
|
|
97
68
|
],
|
|
98
69
|
});
|
|
99
|
-
const
|
|
100
|
-
|
|
70
|
+
const selectedSkills = toInstall.filter((name) => name !== "__skip__");
|
|
71
|
+
const needsBrewPrompt = process.platform !== "win32" &&
|
|
72
|
+
selectedSkills.some((name) => {
|
|
73
|
+
const skill = installable.find((s) => s.name === name);
|
|
74
|
+
return skill?.install.some((option) => option.kind === "brew");
|
|
75
|
+
}) &&
|
|
76
|
+
!(await detectBinary("brew"));
|
|
77
|
+
if (needsBrewPrompt) {
|
|
78
|
+
await prompter.note([
|
|
79
|
+
"Many skill dependencies are shipped via Homebrew.",
|
|
80
|
+
"Without brew, you'll need to build from source or download releases manually.",
|
|
81
|
+
].join("\n"), "Homebrew recommended");
|
|
82
|
+
const showBrewInstall = await prompter.confirm({
|
|
83
|
+
message: "Show Homebrew install command?",
|
|
84
|
+
initialValue: true,
|
|
85
|
+
});
|
|
86
|
+
if (showBrewInstall) {
|
|
87
|
+
await prompter.note([
|
|
88
|
+
"Run:",
|
|
89
|
+
'/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"',
|
|
90
|
+
].join("\n"), "Homebrew install");
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const needsNodeManagerPrompt = selectedSkills.some((name) => {
|
|
94
|
+
const skill = installable.find((s) => s.name === name);
|
|
95
|
+
return skill?.install.some((option) => option.kind === "node");
|
|
96
|
+
});
|
|
97
|
+
if (needsNodeManagerPrompt) {
|
|
98
|
+
const nodeManager = (await prompter.select({
|
|
99
|
+
message: "Preferred node manager for skill installs",
|
|
100
|
+
options: resolveNodeManagerOptions(),
|
|
101
|
+
}));
|
|
102
|
+
next = {
|
|
103
|
+
...next,
|
|
104
|
+
skills: {
|
|
105
|
+
...next.skills,
|
|
106
|
+
install: {
|
|
107
|
+
...next.skills?.install,
|
|
108
|
+
nodeManager,
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
for (const name of selectedSkills) {
|
|
101
114
|
const target = installable.find((s) => s.name === name);
|
|
102
115
|
if (!target || target.install.length === 0)
|
|
103
116
|
continue;
|
|
@@ -111,13 +124,25 @@ export async function setupSkills(cfg, workspaceDir, runtime, prompter) {
|
|
|
111
124
|
installId,
|
|
112
125
|
config: next,
|
|
113
126
|
});
|
|
127
|
+
const warnings = result.warnings ?? [];
|
|
114
128
|
if (result.ok) {
|
|
115
|
-
|
|
129
|
+
if (warnings.length > 0) {
|
|
130
|
+
spin.stop(`Installed ${name} (${warnings.length} warning${warnings.length === 1 ? "" : "s"})`);
|
|
131
|
+
for (const warning of warnings)
|
|
132
|
+
runtime.log(` ⚠ ${warning}`);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
spin.stop(`Installed ${name}`);
|
|
136
|
+
}
|
|
116
137
|
}
|
|
117
138
|
else {
|
|
118
139
|
const code = result.code == null ? "" : ` (exit ${result.code})`;
|
|
119
140
|
const detail = summarizeInstallFailure(result.message);
|
|
120
141
|
spin.stop(`Install failed: ${name}${code}${detail ? ` — ${detail}` : ""}`);
|
|
142
|
+
if (warnings.length > 0) {
|
|
143
|
+
for (const warning of warnings)
|
|
144
|
+
runtime.log(` ⚠ ${warning}`);
|
|
145
|
+
}
|
|
121
146
|
if (result.stderr)
|
|
122
147
|
runtime.log(result.stderr.trim());
|
|
123
148
|
else if (result.stdout)
|
|
@@ -140,7 +165,7 @@ export async function setupSkills(cfg, workspaceDir, runtime, prompter) {
|
|
|
140
165
|
message: `Enter ${skill.primaryEnv}`,
|
|
141
166
|
validate: (value) => (value?.trim() ? undefined : "Required"),
|
|
142
167
|
}));
|
|
143
|
-
next = upsertSkillEntry(next, skill.skillKey, { apiKey: apiKey
|
|
168
|
+
next = upsertSkillEntry(next, skill.skillKey, { apiKey: normalizeSecretInput(apiKey) ?? "" });
|
|
144
169
|
}
|
|
145
170
|
return next;
|
|
146
171
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ensureModelAllowlistEntry } from "./model-allowlist.js";
|
|
2
|
+
export const OPENAI_DEFAULT_MODEL = "openai/gpt-5.1-codex";
|
|
3
|
+
export function applyOpenAIProviderConfig(cfg) {
|
|
4
|
+
const next = ensureModelAllowlistEntry({
|
|
5
|
+
cfg,
|
|
6
|
+
modelRef: OPENAI_DEFAULT_MODEL,
|
|
7
|
+
});
|
|
8
|
+
const models = { ...next.agents?.defaults?.models };
|
|
9
|
+
models[OPENAI_DEFAULT_MODEL] = {
|
|
10
|
+
...models[OPENAI_DEFAULT_MODEL],
|
|
11
|
+
alias: models[OPENAI_DEFAULT_MODEL]?.alias ?? "GPT",
|
|
12
|
+
};
|
|
13
|
+
return {
|
|
14
|
+
...next,
|
|
15
|
+
agents: {
|
|
16
|
+
...next.agents,
|
|
17
|
+
defaults: {
|
|
18
|
+
...next.agents?.defaults,
|
|
19
|
+
models,
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function applyOpenAIConfig(cfg) {
|
|
25
|
+
const next = applyOpenAIProviderConfig(cfg);
|
|
26
|
+
return {
|
|
27
|
+
...next,
|
|
28
|
+
agents: {
|
|
29
|
+
...next.agents,
|
|
30
|
+
defaults: {
|
|
31
|
+
...next.agents?.defaults,
|
|
32
|
+
model: next.agents?.defaults?.model && typeof next.agents.defaults.model === "object"
|
|
33
|
+
? {
|
|
34
|
+
...next.agents.defaults.model,
|
|
35
|
+
primary: OPENAI_DEFAULT_MODEL,
|
|
36
|
+
}
|
|
37
|
+
: { primary: OPENAI_DEFAULT_MODEL },
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
@@ -88,7 +88,7 @@ export async function buildStatusAllReportLines(params) {
|
|
|
88
88
|
rows: agentRows,
|
|
89
89
|
});
|
|
90
90
|
const lines = [];
|
|
91
|
-
lines.push(heading("
|
|
91
|
+
lines.push(heading("Poolbot status --all"));
|
|
92
92
|
lines.push("");
|
|
93
93
|
lines.push(heading("Overview"));
|
|
94
94
|
lines.push(overview.trimEnd());
|
|
@@ -271,7 +271,7 @@ export async function statusCommand(opts, runtime) {
|
|
|
271
271
|
Value: `${summary.sessions.count} active · default ${defaults.model ?? "unknown"}${defaultCtx} · ${storeLabel}`,
|
|
272
272
|
},
|
|
273
273
|
];
|
|
274
|
-
runtime.log(theme.heading("
|
|
274
|
+
runtime.log(theme.heading("Poolbot status"));
|
|
275
275
|
runtime.log("");
|
|
276
276
|
runtime.log(theme.heading("Overview"));
|
|
277
277
|
runtime.log(renderTable({
|
|
@@ -59,9 +59,9 @@ async function stopAndUninstallService(runtime) {
|
|
|
59
59
|
async function removeMacApp(runtime, dryRun) {
|
|
60
60
|
if (process.platform !== "darwin")
|
|
61
61
|
return;
|
|
62
|
-
await removePath("/Applications/
|
|
62
|
+
await removePath("/Applications/Poolbot.app", runtime, {
|
|
63
63
|
dryRun,
|
|
64
|
-
label: "/Applications/
|
|
64
|
+
label: "/Applications/Poolbot.app",
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
67
|
export async function uninstallCommand(runtime, opts) {
|
|
@@ -91,7 +91,7 @@ export async function uninstallCommand(runtime, opts) {
|
|
|
91
91
|
{
|
|
92
92
|
value: "app",
|
|
93
93
|
label: "macOS app",
|
|
94
|
-
hint: "/Applications/
|
|
94
|
+
hint: "/Applications/Poolbot.app",
|
|
95
95
|
},
|
|
96
96
|
],
|
|
97
97
|
initialValues: ["service", "state", "workspace"],
|
|
@@ -2,4 +2,4 @@ export const LEGACY_PROJECT_NAME = "poolbot";
|
|
|
2
2
|
export const LEGACY_MANIFEST_KEY = LEGACY_PROJECT_NAME;
|
|
3
3
|
export const LEGACY_PLUGIN_MANIFEST_FILENAME = `${LEGACY_PROJECT_NAME}.plugin.json`;
|
|
4
4
|
export const LEGACY_CANVAS_HANDLER_NAME = `${LEGACY_PROJECT_NAME}CanvasA2UIAction`;
|
|
5
|
-
export const LEGACY_MACOS_APP_SOURCES_DIR = "apps/macos/Sources/
|
|
5
|
+
export const LEGACY_MACOS_APP_SOURCES_DIR = "apps/macos/Sources/Pool-Bot";
|
package/dist/config/defaults.js
CHANGED
|
@@ -5,7 +5,7 @@ import { DEFAULT_AGENT_MAX_CONCURRENT, DEFAULT_SUBAGENT_MAX_CONCURRENT } from ".
|
|
|
5
5
|
let defaultWarnState = { warned: false };
|
|
6
6
|
const DEFAULT_MODEL_ALIASES = {
|
|
7
7
|
// Anthropic (pi-ai catalog uses "latest" ids without date suffix)
|
|
8
|
-
opus: "anthropic/claude-opus-4-
|
|
8
|
+
opus: "anthropic/claude-opus-4-6",
|
|
9
9
|
sonnet: "anthropic/claude-sonnet-4-5",
|
|
10
10
|
// OpenAI
|
|
11
11
|
gpt: "openai/gpt-5.2",
|
|
@@ -145,7 +145,8 @@ export function applyModelDefaults(cfg) {
|
|
|
145
145
|
if (raw.contextWindow !== contextWindow)
|
|
146
146
|
modelMutated = true;
|
|
147
147
|
const defaultMaxTokens = Math.min(DEFAULT_MODEL_MAX_TOKENS, contextWindow);
|
|
148
|
-
const
|
|
148
|
+
const rawMaxTokens = isPositiveNumber(raw.maxTokens) ? raw.maxTokens : defaultMaxTokens;
|
|
149
|
+
const maxTokens = Math.min(rawMaxTokens, contextWindow);
|
|
149
150
|
if (raw.maxTokens !== maxTokens)
|
|
150
151
|
modelMutated = true;
|
|
151
152
|
if (!modelMutated)
|
package/dist/config/io.js
CHANGED
|
@@ -15,7 +15,7 @@ import { normalizeConfigPaths } from "./normalize-paths.js";
|
|
|
15
15
|
import { resolveConfigPath, resolveDefaultConfigCandidates, resolveStateDir } from "./paths.js";
|
|
16
16
|
import { applyConfigOverrides } from "./runtime-overrides.js";
|
|
17
17
|
import { validateConfigObjectWithPlugins } from "./validation.js";
|
|
18
|
-
import {
|
|
18
|
+
import { comparePoolbotVersions } from "./version.js";
|
|
19
19
|
// Re-export for backwards compatibility
|
|
20
20
|
export { CircularIncludeError, ConfigIncludeError } from "./includes.js";
|
|
21
21
|
export { MissingEnvVarError } from "./env-substitution.js";
|
|
@@ -103,11 +103,11 @@ function warnIfConfigFromFuture(cfg, logger) {
|
|
|
103
103
|
const touched = cfg.meta?.lastTouchedVersion;
|
|
104
104
|
if (!touched)
|
|
105
105
|
return;
|
|
106
|
-
const cmp =
|
|
106
|
+
const cmp = comparePoolbotVersions(VERSION, touched);
|
|
107
107
|
if (cmp === null)
|
|
108
108
|
return;
|
|
109
109
|
if (cmp < 0) {
|
|
110
|
-
logger.warn(`Config was last written by a newer
|
|
110
|
+
logger.warn(`Config was last written by a newer Poolbot (${touched}); current version is ${VERSION}.`);
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
function applyConfigEnv(cfg, env) {
|