@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
|
@@ -1,6 +1,119 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { createAssistantMessageEventStream } from "@mariozechner/pi-ai";
|
|
3
|
+
import { createSubsystemLogger } from "../logging/subsystem.js";
|
|
4
|
+
const log = createSubsystemLogger("ollama-stream");
|
|
3
5
|
export const OLLAMA_NATIVE_BASE_URL = "http://127.0.0.1:11434";
|
|
6
|
+
const MAX_SAFE_INTEGER_ABS_STR = String(Number.MAX_SAFE_INTEGER);
|
|
7
|
+
function isAsciiDigit(ch) {
|
|
8
|
+
return ch !== undefined && ch >= "0" && ch <= "9";
|
|
9
|
+
}
|
|
10
|
+
function parseJsonNumberToken(input, start) {
|
|
11
|
+
let idx = start;
|
|
12
|
+
if (input[idx] === "-") {
|
|
13
|
+
idx += 1;
|
|
14
|
+
}
|
|
15
|
+
if (idx >= input.length) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
if (input[idx] === "0") {
|
|
19
|
+
idx += 1;
|
|
20
|
+
}
|
|
21
|
+
else if (isAsciiDigit(input[idx]) && input[idx] !== "0") {
|
|
22
|
+
while (isAsciiDigit(input[idx])) {
|
|
23
|
+
idx += 1;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
let isInteger = true;
|
|
30
|
+
if (input[idx] === ".") {
|
|
31
|
+
isInteger = false;
|
|
32
|
+
idx += 1;
|
|
33
|
+
if (!isAsciiDigit(input[idx])) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
while (isAsciiDigit(input[idx])) {
|
|
37
|
+
idx += 1;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (input[idx] === "e" || input[idx] === "E") {
|
|
41
|
+
isInteger = false;
|
|
42
|
+
idx += 1;
|
|
43
|
+
if (input[idx] === "+" || input[idx] === "-") {
|
|
44
|
+
idx += 1;
|
|
45
|
+
}
|
|
46
|
+
if (!isAsciiDigit(input[idx])) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
while (isAsciiDigit(input[idx])) {
|
|
50
|
+
idx += 1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
token: input.slice(start, idx),
|
|
55
|
+
end: idx,
|
|
56
|
+
isInteger,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function isUnsafeIntegerLiteral(token) {
|
|
60
|
+
const digits = token[0] === "-" ? token.slice(1) : token;
|
|
61
|
+
if (digits.length < MAX_SAFE_INTEGER_ABS_STR.length) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
if (digits.length > MAX_SAFE_INTEGER_ABS_STR.length) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
return digits > MAX_SAFE_INTEGER_ABS_STR;
|
|
68
|
+
}
|
|
69
|
+
function quoteUnsafeIntegerLiterals(input) {
|
|
70
|
+
let out = "";
|
|
71
|
+
let inString = false;
|
|
72
|
+
let escaped = false;
|
|
73
|
+
let idx = 0;
|
|
74
|
+
while (idx < input.length) {
|
|
75
|
+
const ch = input[idx] ?? "";
|
|
76
|
+
if (inString) {
|
|
77
|
+
out += ch;
|
|
78
|
+
if (escaped) {
|
|
79
|
+
escaped = false;
|
|
80
|
+
}
|
|
81
|
+
else if (ch === "\\") {
|
|
82
|
+
escaped = true;
|
|
83
|
+
}
|
|
84
|
+
else if (ch === '"') {
|
|
85
|
+
inString = false;
|
|
86
|
+
}
|
|
87
|
+
idx += 1;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (ch === '"') {
|
|
91
|
+
inString = true;
|
|
92
|
+
out += ch;
|
|
93
|
+
idx += 1;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (ch === "-" || isAsciiDigit(ch)) {
|
|
97
|
+
const parsed = parseJsonNumberToken(input, idx);
|
|
98
|
+
if (parsed) {
|
|
99
|
+
if (parsed.isInteger && isUnsafeIntegerLiteral(parsed.token)) {
|
|
100
|
+
out += `"${parsed.token}"`;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
out += parsed.token;
|
|
104
|
+
}
|
|
105
|
+
idx = parsed.end;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
out += ch;
|
|
110
|
+
idx += 1;
|
|
111
|
+
}
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
function parseJsonPreservingUnsafeIntegers(input) {
|
|
115
|
+
return JSON.parse(quoteUnsafeIntegerLiterals(input));
|
|
116
|
+
}
|
|
4
117
|
function extractTextContent(content) {
|
|
5
118
|
if (typeof content === "string") {
|
|
6
119
|
return content;
|
|
@@ -159,19 +272,19 @@ export async function* parseNdjsonStream(reader) {
|
|
|
159
272
|
continue;
|
|
160
273
|
}
|
|
161
274
|
try {
|
|
162
|
-
yield
|
|
275
|
+
yield parseJsonPreservingUnsafeIntegers(trimmed);
|
|
163
276
|
}
|
|
164
277
|
catch {
|
|
165
|
-
|
|
278
|
+
log.warn(`Skipping malformed NDJSON line: ${trimmed.slice(0, 120)}`);
|
|
166
279
|
}
|
|
167
280
|
}
|
|
168
281
|
}
|
|
169
282
|
if (buffer.trim()) {
|
|
170
283
|
try {
|
|
171
|
-
yield
|
|
284
|
+
yield parseJsonPreservingUnsafeIntegers(buffer.trim());
|
|
172
285
|
}
|
|
173
286
|
catch {
|
|
174
|
-
|
|
287
|
+
log.warn(`Skipping malformed trailing data: ${buffer.trim().slice(0, 120)}`);
|
|
175
288
|
}
|
|
176
289
|
}
|
|
177
290
|
}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* OpenCode Zen model catalog with dynamic fetching, caching, and static fallback.
|
|
3
3
|
*
|
|
4
|
-
* OpenCode Zen is a
|
|
5
|
-
*
|
|
4
|
+
* OpenCode Zen is a pay-as-you-go token-based API that provides access to curated
|
|
5
|
+
* models optimized for coding agents. It uses per-request billing with auto top-up.
|
|
6
|
+
*
|
|
7
|
+
* Note: OpenCode Black ($20/$100/$200/month subscriptions) is a separate product
|
|
8
|
+
* with flat-rate usage tiers. This module handles Zen, not Black.
|
|
6
9
|
*
|
|
7
10
|
* API endpoint: https://opencode.ai/zen/v1
|
|
8
11
|
* Auth URL: https://opencode.ai/auth
|
|
9
12
|
*/
|
|
13
|
+
import { createSubsystemLogger } from "../logging/subsystem.js";
|
|
14
|
+
const log = createSubsystemLogger("opencode-zen-models");
|
|
10
15
|
export const OPENCODE_ZEN_API_BASE_URL = "https://opencode.ai/zen/v1";
|
|
11
|
-
export const OPENCODE_ZEN_DEFAULT_MODEL = "claude-opus-4-
|
|
16
|
+
export const OPENCODE_ZEN_DEFAULT_MODEL = "claude-opus-4-6";
|
|
12
17
|
export const OPENCODE_ZEN_DEFAULT_MODEL_REF = `opencode/${OPENCODE_ZEN_DEFAULT_MODEL}`;
|
|
13
18
|
// Cache for fetched models (1 hour TTL)
|
|
14
19
|
let cachedModels = null;
|
|
@@ -16,18 +21,19 @@ let cacheTimestamp = 0;
|
|
|
16
21
|
const CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
|
|
17
22
|
/**
|
|
18
23
|
* Model aliases for convenient shortcuts.
|
|
19
|
-
* Users can use "opus" instead of "claude-opus-4-
|
|
24
|
+
* Users can use "opus" instead of "claude-opus-4-6", etc.
|
|
20
25
|
*/
|
|
21
26
|
export const OPENCODE_ZEN_MODEL_ALIASES = {
|
|
22
27
|
// Claude
|
|
23
|
-
opus: "claude-opus-4-
|
|
28
|
+
opus: "claude-opus-4-6",
|
|
29
|
+
"opus-4.6": "claude-opus-4-6",
|
|
24
30
|
"opus-4.5": "claude-opus-4-5",
|
|
25
|
-
"opus-4": "claude-opus-4-
|
|
31
|
+
"opus-4": "claude-opus-4-6",
|
|
26
32
|
// Legacy Claude aliases (OpenCode Zen rotates model catalogs; keep old keys working).
|
|
27
|
-
sonnet: "claude-opus-4-
|
|
28
|
-
"sonnet-4": "claude-opus-4-
|
|
29
|
-
haiku: "claude-opus-4-
|
|
30
|
-
"haiku-3.5": "claude-opus-4-
|
|
33
|
+
sonnet: "claude-opus-4-6",
|
|
34
|
+
"sonnet-4": "claude-opus-4-6",
|
|
35
|
+
haiku: "claude-opus-4-6",
|
|
36
|
+
"haiku-3.5": "claude-opus-4-6",
|
|
31
37
|
// GPT-5.x family
|
|
32
38
|
gpt5: "gpt-5.2",
|
|
33
39
|
"gpt-5": "gpt-5.2",
|
|
@@ -99,6 +105,7 @@ const MODEL_COSTS = {
|
|
|
99
105
|
cacheRead: 0.107,
|
|
100
106
|
cacheWrite: 0,
|
|
101
107
|
},
|
|
108
|
+
"claude-opus-4-6": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
|
|
102
109
|
"claude-opus-4-5": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
|
|
103
110
|
"gemini-3-pro": { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0 },
|
|
104
111
|
"gpt-5.1-codex-mini": {
|
|
@@ -121,6 +128,7 @@ const MODEL_COSTS = {
|
|
|
121
128
|
const DEFAULT_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
|
|
122
129
|
const MODEL_CONTEXT_WINDOWS = {
|
|
123
130
|
"gpt-5.1-codex": 400000,
|
|
131
|
+
"claude-opus-4-6": 1000000,
|
|
124
132
|
"claude-opus-4-5": 200000,
|
|
125
133
|
"gemini-3-pro": 1048576,
|
|
126
134
|
"gpt-5.1-codex-mini": 400000,
|
|
@@ -135,6 +143,7 @@ function getDefaultContextWindow(modelId) {
|
|
|
135
143
|
}
|
|
136
144
|
const MODEL_MAX_TOKENS = {
|
|
137
145
|
"gpt-5.1-codex": 128000,
|
|
146
|
+
"claude-opus-4-6": 128000,
|
|
138
147
|
"claude-opus-4-5": 64000,
|
|
139
148
|
"gemini-3-pro": 65536,
|
|
140
149
|
"gpt-5.1-codex-mini": 128000,
|
|
@@ -168,6 +177,7 @@ function buildModelDefinition(modelId) {
|
|
|
168
177
|
*/
|
|
169
178
|
const MODEL_NAMES = {
|
|
170
179
|
"gpt-5.1-codex": "GPT-5.1 Codex",
|
|
180
|
+
"claude-opus-4-6": "Claude Opus 4.6",
|
|
171
181
|
"claude-opus-4-5": "Claude Opus 4.5",
|
|
172
182
|
"gemini-3-pro": "Gemini 3 Pro",
|
|
173
183
|
"gpt-5.1-codex-mini": "GPT-5.1 Codex Mini",
|
|
@@ -192,6 +202,7 @@ function formatModelName(modelId) {
|
|
|
192
202
|
export function getOpencodeZenStaticFallbackModels() {
|
|
193
203
|
const modelIds = [
|
|
194
204
|
"gpt-5.1-codex",
|
|
205
|
+
"claude-opus-4-6",
|
|
195
206
|
"claude-opus-4-5",
|
|
196
207
|
"gemini-3-pro",
|
|
197
208
|
"gpt-5.1-codex-mini",
|
|
@@ -241,7 +252,7 @@ export async function fetchOpencodeZenModels(apiKey) {
|
|
|
241
252
|
return models;
|
|
242
253
|
}
|
|
243
254
|
catch (error) {
|
|
244
|
-
|
|
255
|
+
log.warn(`Failed to fetch models, using static fallback: ${String(error)}`);
|
|
245
256
|
return getOpencodeZenStaticFallbackModels();
|
|
246
257
|
}
|
|
247
258
|
}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import { createSubsystemLogger } from "../../logging/subsystem.js";
|
|
1
2
|
import { formatSandboxToolPolicyBlockedMessage } from "../sandbox.js";
|
|
2
|
-
|
|
3
|
+
import { stableStringify } from "../stable-stringify.js";
|
|
4
|
+
const log = createSubsystemLogger("errors");
|
|
5
|
+
export function formatBillingErrorMessage(provider, model) {
|
|
3
6
|
const providerName = provider?.trim();
|
|
4
|
-
|
|
5
|
-
|
|
7
|
+
const modelName = model?.trim();
|
|
8
|
+
const providerLabel = providerName && modelName ? `${providerName} (${modelName})` : providerName || undefined;
|
|
9
|
+
if (providerLabel) {
|
|
10
|
+
return `⚠️ ${providerLabel} returned a billing error — your API key has run out of credits or has an insufficient balance. Check your ${providerName} billing dashboard and top up or switch to a different API key.`;
|
|
6
11
|
}
|
|
7
12
|
return "⚠️ API provider returned a billing error — your API key has run out of credits or has an insufficient balance. Check your provider's billing dashboard and top up or switch to a different API key.";
|
|
8
13
|
}
|
|
@@ -199,15 +204,6 @@ function shouldRewriteContextOverflowText(raw) {
|
|
|
199
204
|
ERROR_PREFIX_RE.test(raw) ||
|
|
200
205
|
CONTEXT_OVERFLOW_ERROR_HEAD_RE.test(raw));
|
|
201
206
|
}
|
|
202
|
-
function shouldRewriteBillingText(raw) {
|
|
203
|
-
if (!isBillingErrorMessage(raw)) {
|
|
204
|
-
return false;
|
|
205
|
-
}
|
|
206
|
-
return (isRawApiErrorPayload(raw) ||
|
|
207
|
-
isLikelyHttpErrorText(raw) ||
|
|
208
|
-
ERROR_PREFIX_RE.test(raw) ||
|
|
209
|
-
BILLING_ERROR_HEAD_RE.test(raw));
|
|
210
|
-
}
|
|
211
207
|
function isErrorPayloadObject(payload) {
|
|
212
208
|
if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
|
|
213
209
|
return false;
|
|
@@ -260,18 +256,6 @@ function parseApiErrorPayload(raw) {
|
|
|
260
256
|
}
|
|
261
257
|
return null;
|
|
262
258
|
}
|
|
263
|
-
function stableStringify(value) {
|
|
264
|
-
if (!value || typeof value !== "object") {
|
|
265
|
-
return JSON.stringify(value) ?? "null";
|
|
266
|
-
}
|
|
267
|
-
if (Array.isArray(value)) {
|
|
268
|
-
return `[${value.map((entry) => stableStringify(entry)).join(",")}]`;
|
|
269
|
-
}
|
|
270
|
-
const record = value;
|
|
271
|
-
const keys = Object.keys(record).toSorted();
|
|
272
|
-
const entries = keys.map((key) => `${JSON.stringify(key)}:${stableStringify(record[key])}`);
|
|
273
|
-
return `{${entries.join(",")}}`;
|
|
274
|
-
}
|
|
275
259
|
export function getApiErrorPayloadFingerprint(raw) {
|
|
276
260
|
if (!raw) {
|
|
277
261
|
return null;
|
|
@@ -404,14 +388,14 @@ export function formatAssistantErrorText(msg, opts) {
|
|
|
404
388
|
return "LLM request timed out.";
|
|
405
389
|
}
|
|
406
390
|
if (isBillingErrorMessage(raw)) {
|
|
407
|
-
return formatBillingErrorMessage(opts?.provider);
|
|
391
|
+
return formatBillingErrorMessage(opts?.provider, opts?.model ?? msg.model);
|
|
408
392
|
}
|
|
409
393
|
if (isLikelyHttpErrorText(raw) || isRawApiErrorPayload(raw)) {
|
|
410
394
|
return formatRawAssistantErrorForUi(raw);
|
|
411
395
|
}
|
|
412
396
|
// Never return raw unhandled errors - log for debugging but return safe message
|
|
413
397
|
if (raw.length > 600) {
|
|
414
|
-
|
|
398
|
+
log.warn(`Long error truncated: ${raw.slice(0, 200)}`);
|
|
415
399
|
}
|
|
416
400
|
return raw.length > 600 ? `${raw.slice(0, 600)}…` : raw;
|
|
417
401
|
}
|
|
@@ -453,12 +437,6 @@ export function sanitizeUserFacingText(text, opts) {
|
|
|
453
437
|
return formatRawAssistantErrorForUi(trimmed);
|
|
454
438
|
}
|
|
455
439
|
}
|
|
456
|
-
// Preserve legacy behavior for explicit billing-head text outside known
|
|
457
|
-
// error contexts (e.g., "billing: please upgrade your plan"), while
|
|
458
|
-
// keeping conversational billing mentions untouched.
|
|
459
|
-
if (shouldRewriteBillingText(trimmed)) {
|
|
460
|
-
return BILLING_ERROR_USER_MESSAGE;
|
|
461
|
-
}
|
|
462
440
|
// Strip leading blank lines (including whitespace-only lines) without clobbering indentation on
|
|
463
441
|
// the first content line (e.g. markdown/code blocks).
|
|
464
442
|
const withoutLeadingEmptyLines = stripped.replace(/^(?:[ \t]*\r?\n)+/, "");
|
|
@@ -479,7 +457,12 @@ const ERROR_PATTERNS = {
|
|
|
479
457
|
"resource_exhausted",
|
|
480
458
|
"usage limit",
|
|
481
459
|
],
|
|
482
|
-
overloaded: [
|
|
460
|
+
overloaded: [
|
|
461
|
+
/overloaded_error|"type"\s*:\s*"overloaded_error"/i,
|
|
462
|
+
"overloaded",
|
|
463
|
+
"service unavailable",
|
|
464
|
+
"high demand",
|
|
465
|
+
],
|
|
483
466
|
timeout: [
|
|
484
467
|
"timeout",
|
|
485
468
|
"timed out",
|
|
@@ -575,6 +558,15 @@ export function isAuthErrorMessage(raw) {
|
|
|
575
558
|
export function isOverloadedErrorMessage(raw) {
|
|
576
559
|
return matchesErrorPatterns(raw, ERROR_PATTERNS.overloaded);
|
|
577
560
|
}
|
|
561
|
+
function isJsonApiInternalServerError(raw) {
|
|
562
|
+
if (!raw) {
|
|
563
|
+
return false;
|
|
564
|
+
}
|
|
565
|
+
const value = raw.toLowerCase();
|
|
566
|
+
// Anthropic often wraps transient 500s in JSON payloads like:
|
|
567
|
+
// {"type":"error","error":{"type":"api_error","message":"Internal server error"}}
|
|
568
|
+
return value.includes('"type":"api_error"') && value.includes("internal server error");
|
|
569
|
+
}
|
|
578
570
|
export function parseImageDimensionError(raw) {
|
|
579
571
|
if (!raw) {
|
|
580
572
|
return null;
|
|
@@ -624,6 +616,30 @@ export function isAuthAssistantError(msg) {
|
|
|
624
616
|
}
|
|
625
617
|
return isAuthErrorMessage(msg.errorMessage ?? "");
|
|
626
618
|
}
|
|
619
|
+
export function isModelNotFoundErrorMessage(raw) {
|
|
620
|
+
if (!raw) {
|
|
621
|
+
return false;
|
|
622
|
+
}
|
|
623
|
+
const lower = raw.toLowerCase();
|
|
624
|
+
// Direct pattern matches from Pool Bot internals and common providers.
|
|
625
|
+
if (lower.includes("unknown model") ||
|
|
626
|
+
lower.includes("model not found") ||
|
|
627
|
+
lower.includes("model_not_found") ||
|
|
628
|
+
lower.includes("not_found_error") ||
|
|
629
|
+
(lower.includes("does not exist") && lower.includes("model")) ||
|
|
630
|
+
(lower.includes("invalid model") && !lower.includes("invalid model reference"))) {
|
|
631
|
+
return true;
|
|
632
|
+
}
|
|
633
|
+
// Google Gemini: "models/X is not found for api version"
|
|
634
|
+
if (/models\/[^\s]+ is not found/i.test(raw)) {
|
|
635
|
+
return true;
|
|
636
|
+
}
|
|
637
|
+
// JSON error payloads: {"status": "NOT_FOUND"} or {"code": 404} combined with not-found text.
|
|
638
|
+
if (/\b404\b/.test(raw) && /not[-_ ]?found/i.test(raw)) {
|
|
639
|
+
return true;
|
|
640
|
+
}
|
|
641
|
+
return false;
|
|
642
|
+
}
|
|
627
643
|
export function classifyFailoverReason(raw) {
|
|
628
644
|
if (isImageDimensionErrorMessage(raw)) {
|
|
629
645
|
return null;
|
|
@@ -631,10 +647,16 @@ export function classifyFailoverReason(raw) {
|
|
|
631
647
|
if (isImageSizeError(raw)) {
|
|
632
648
|
return null;
|
|
633
649
|
}
|
|
650
|
+
if (isModelNotFoundErrorMessage(raw)) {
|
|
651
|
+
return "model_not_found";
|
|
652
|
+
}
|
|
634
653
|
if (isTransientHttpError(raw)) {
|
|
635
654
|
// Treat transient 5xx provider failures as retryable transport issues.
|
|
636
655
|
return "timeout";
|
|
637
656
|
}
|
|
657
|
+
if (isJsonApiInternalServerError(raw)) {
|
|
658
|
+
return "timeout";
|
|
659
|
+
}
|
|
638
660
|
if (isRateLimitErrorMessage(raw)) {
|
|
639
661
|
return "rate_limit";
|
|
640
662
|
}
|
|
@@ -15,21 +15,26 @@ export function normalizeTextForComparison(text) {
|
|
|
15
15
|
.trim();
|
|
16
16
|
}
|
|
17
17
|
export function isMessagingToolDuplicateNormalized(normalized, normalizedSentTexts) {
|
|
18
|
-
if (normalizedSentTexts.length === 0)
|
|
18
|
+
if (normalizedSentTexts.length === 0) {
|
|
19
19
|
return false;
|
|
20
|
-
|
|
20
|
+
}
|
|
21
|
+
if (!normalized || normalized.length < MIN_DUPLICATE_TEXT_LENGTH) {
|
|
21
22
|
return false;
|
|
23
|
+
}
|
|
22
24
|
return normalizedSentTexts.some((normalizedSent) => {
|
|
23
|
-
if (!normalizedSent || normalizedSent.length < MIN_DUPLICATE_TEXT_LENGTH)
|
|
25
|
+
if (!normalizedSent || normalizedSent.length < MIN_DUPLICATE_TEXT_LENGTH) {
|
|
24
26
|
return false;
|
|
27
|
+
}
|
|
25
28
|
return normalized.includes(normalizedSent) || normalizedSent.includes(normalized);
|
|
26
29
|
});
|
|
27
30
|
}
|
|
28
31
|
export function isMessagingToolDuplicate(text, sentTexts) {
|
|
29
|
-
if (sentTexts.length === 0)
|
|
32
|
+
if (sentTexts.length === 0) {
|
|
30
33
|
return false;
|
|
34
|
+
}
|
|
31
35
|
const normalized = normalizeTextForComparison(text);
|
|
32
|
-
if (!normalized || normalized.length < MIN_DUPLICATE_TEXT_LENGTH)
|
|
36
|
+
if (!normalized || normalized.length < MIN_DUPLICATE_TEXT_LENGTH) {
|
|
33
37
|
return false;
|
|
38
|
+
}
|
|
34
39
|
return isMessagingToolDuplicateNormalized(normalized, sentTexts.map(normalizeTextForComparison));
|
|
35
40
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { normalizeThinkLevel } from "../../auto-reply/thinking.js";
|
|
2
2
|
function extractSupportedValues(raw) {
|
|
3
3
|
const match = raw.match(/supported values are:\s*([^\n.]+)/i) ?? raw.match(/supported values:\s*([^\n.]+)/i);
|
|
4
|
-
if (!match?.[1])
|
|
4
|
+
if (!match?.[1]) {
|
|
5
5
|
return [];
|
|
6
|
+
}
|
|
6
7
|
const fragment = match[1];
|
|
7
8
|
const quoted = Array.from(fragment.matchAll(/['"]([^'"]+)['"]/g)).map((entry) => entry[1]?.trim());
|
|
8
9
|
if (quoted.length > 0) {
|
|
@@ -15,17 +16,21 @@ function extractSupportedValues(raw) {
|
|
|
15
16
|
}
|
|
16
17
|
export function pickFallbackThinkingLevel(params) {
|
|
17
18
|
const raw = params.message?.trim();
|
|
18
|
-
if (!raw)
|
|
19
|
+
if (!raw) {
|
|
19
20
|
return undefined;
|
|
21
|
+
}
|
|
20
22
|
const supported = extractSupportedValues(raw);
|
|
21
|
-
if (supported.length === 0)
|
|
23
|
+
if (supported.length === 0) {
|
|
22
24
|
return undefined;
|
|
25
|
+
}
|
|
23
26
|
for (const entry of supported) {
|
|
24
27
|
const normalized = normalizeThinkLevel(entry);
|
|
25
|
-
if (!normalized)
|
|
28
|
+
if (!normalized) {
|
|
26
29
|
continue;
|
|
27
|
-
|
|
30
|
+
}
|
|
31
|
+
if (params.attempted.has(normalized)) {
|
|
28
32
|
continue;
|
|
33
|
+
}
|
|
29
34
|
return normalized;
|
|
30
35
|
}
|
|
31
36
|
return undefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { buildBootstrapContextFiles, DEFAULT_BOOTSTRAP_MAX_CHARS, DEFAULT_BOOTSTRAP_TOTAL_MAX_CHARS, ensureSessionHeader, resolveBootstrapMaxChars, resolveBootstrapTotalMaxChars, stripThoughtSignatures, } from "./pi-embedded-helpers/bootstrap.js";
|
|
2
|
-
export { BILLING_ERROR_USER_MESSAGE, formatBillingErrorMessage, classifyFailoverReason, formatRawAssistantErrorForUi, formatAssistantErrorText, getApiErrorPayloadFingerprint, isAuthAssistantError, isAuthErrorMessage, isBillingAssistantError, parseApiErrorInfo, sanitizeUserFacingText, isBillingErrorMessage, isCloudflareOrHtmlErrorPage, isCloudCodeAssistFormatError, isCompactionFailureError, isContextOverflowError, isLikelyContextOverflowError, isFailoverAssistantError, isFailoverErrorMessage, isImageDimensionErrorMessage, isImageSizeError, isOverloadedErrorMessage, isRawApiErrorPayload, isRateLimitAssistantError, isRateLimitErrorMessage, isTransientHttpError, isTimeoutErrorMessage, parseImageDimensionError, parseImageSizeError, } from "./pi-embedded-helpers/errors.js";
|
|
2
|
+
export { BILLING_ERROR_USER_MESSAGE, formatBillingErrorMessage, classifyFailoverReason, formatRawAssistantErrorForUi, formatAssistantErrorText, getApiErrorPayloadFingerprint, isAuthAssistantError, isAuthErrorMessage, isModelNotFoundErrorMessage, isBillingAssistantError, parseApiErrorInfo, sanitizeUserFacingText, isBillingErrorMessage, isCloudflareOrHtmlErrorPage, isCloudCodeAssistFormatError, isCompactionFailureError, isContextOverflowError, isLikelyContextOverflowError, isFailoverAssistantError, isFailoverErrorMessage, isImageDimensionErrorMessage, isImageSizeError, isOverloadedErrorMessage, isRawApiErrorPayload, isRateLimitAssistantError, isRateLimitErrorMessage, isTransientHttpError, isTimeoutErrorMessage, parseImageDimensionError, parseImageSizeError, } from "./pi-embedded-helpers/errors.js";
|
|
3
3
|
export { isGoogleModelApi, sanitizeGoogleTurnOrdering } from "./pi-embedded-helpers/google.js";
|
|
4
4
|
export { downgradeOpenAIReasoningBlocks } from "./pi-embedded-helpers/openai.js";
|
|
5
5
|
export { isEmptyAssistantMessageContent, sanitizeSessionMessagesImages, } from "./pi-embedded-helpers/images.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import os from "node:os";
|
|
3
|
-
import { createAgentSession, estimateTokens, SessionManager, SettingsManager, } from "@mariozechner/pi-coding-agent";
|
|
3
|
+
import { createAgentSession, DefaultResourceLoader, estimateTokens, SessionManager, SettingsManager, } from "@mariozechner/pi-coding-agent";
|
|
4
4
|
import { resolveHeartbeatPrompt } from "../../auto-reply/heartbeat.js";
|
|
5
5
|
import { resolveChannelCapabilities } from "../../config/channel-capabilities.js";
|
|
6
6
|
import { getMachineDisplayName } from "../../infra/machine-name.js";
|
|
@@ -24,7 +24,7 @@ import { resolvePoolbotDocsPath } from "../docs-path.js";
|
|
|
24
24
|
import { getApiKeyForModel, resolveModelAuthMode } from "../model-auth.js";
|
|
25
25
|
import { ensurePoolbotModelsJson } from "../models-config.js";
|
|
26
26
|
import { ensureSessionHeader, validateAnthropicTurns, validateGeminiTurns, } from "../pi-embedded-helpers.js";
|
|
27
|
-
import {
|
|
27
|
+
import { applyPiCompactionSettingsFromConfig } from "../pi-settings.js";
|
|
28
28
|
import { createPoolbotCodingTools } from "../pi-tools.js";
|
|
29
29
|
import { resolveSandboxContext } from "../sandbox.js";
|
|
30
30
|
import { repairSessionFileIfNeeded } from "../session-file-repair.js";
|
|
@@ -35,7 +35,7 @@ import { detectRuntimeShell } from "../shell-utils.js";
|
|
|
35
35
|
import { applySkillEnvOverrides, applySkillEnvOverridesFromSnapshot, loadWorkspaceSkillEntries, resolveSkillsPromptForRun, } from "../skills.js";
|
|
36
36
|
import { resolveTranscriptPolicy } from "../transcript-policy.js";
|
|
37
37
|
import { compactWithSafetyTimeout, EMBEDDED_COMPACTION_TIMEOUT_MS, } from "./compaction-safety-timeout.js";
|
|
38
|
-
import {
|
|
38
|
+
import { buildEmbeddedExtensionFactories } from "./extensions.js";
|
|
39
39
|
import { logToolSchemasForGoogle, sanitizeSessionHistory, sanitizeToolsForGoogle, } from "./google.js";
|
|
40
40
|
import { getDmHistoryLimitFromSessionKey, limitHistoryTurns } from "./history.js";
|
|
41
41
|
import { resolveGlobalLane, resolveSessionLane } from "./lanes.js";
|
|
@@ -44,6 +44,7 @@ import { buildModelAliasLines, resolveModel } from "./model.js";
|
|
|
44
44
|
import { buildEmbeddedSandboxInfo } from "./sandbox-info.js";
|
|
45
45
|
import { prewarmSessionFile, trackSessionManagerAccess } from "./session-manager-cache.js";
|
|
46
46
|
import { applySystemPromptOverrideToSession, buildEmbeddedSystemPrompt, createSystemPromptOverride, } from "./system-prompt.js";
|
|
47
|
+
import { collectAllowedToolNames } from "./tool-name-allowlist.js";
|
|
47
48
|
import { splitSdkTools } from "./tool-split.js";
|
|
48
49
|
import { describeUnknownError, mapThinkingLevel } from "./utils.js";
|
|
49
50
|
import { flushPendingToolResultsAfterIdle } from "./wait-for-idle-before-flush.js";
|
|
@@ -276,6 +277,7 @@ export async function compactEmbeddedPiSessionDirect(params) {
|
|
|
276
277
|
modelAuthMode: resolveModelAuthMode(model.provider, params.config),
|
|
277
278
|
});
|
|
278
279
|
const tools = sanitizeToolsForGoogle({ tools: toolsRaw, provider });
|
|
280
|
+
const allowedToolNames = collectAllowedToolNames({ tools });
|
|
279
281
|
logToolSchemasForGoogle({ tools, provider });
|
|
280
282
|
const machineName = await getMachineDisplayName();
|
|
281
283
|
const runtimeChannel = normalizeMessageChannel(params.messageChannel ?? params.messageProvider);
|
|
@@ -372,6 +374,10 @@ export async function compactEmbeddedPiSessionDirect(params) {
|
|
|
372
374
|
reasoningLevel: params.reasoningLevel ?? "off",
|
|
373
375
|
extraSystemPrompt: params.extraSystemPrompt,
|
|
374
376
|
ownerNumbers: params.ownerNumbers,
|
|
377
|
+
ownerDisplay: params.config?.commands?.ownerDisplay,
|
|
378
|
+
ownerDisplaySecret: params.config?.commands?.ownerDisplaySecret ??
|
|
379
|
+
params.config?.gateway?.auth?.token ??
|
|
380
|
+
params.config?.gateway?.remote?.token,
|
|
375
381
|
reasoningTagHint,
|
|
376
382
|
heartbeatPrompt: isDefaultAgent
|
|
377
383
|
? resolveHeartbeatPrompt(params.config?.agents?.defaults?.heartbeat?.prompt)
|
|
@@ -414,21 +420,35 @@ export async function compactEmbeddedPiSessionDirect(params) {
|
|
|
414
420
|
agentId: sessionAgentId,
|
|
415
421
|
sessionKey: params.sessionKey,
|
|
416
422
|
allowSyntheticToolResults: transcriptPolicy.allowSyntheticToolResults,
|
|
423
|
+
allowedToolNames,
|
|
417
424
|
});
|
|
418
425
|
trackSessionManagerAccess(params.sessionFile);
|
|
419
426
|
const settingsManager = SettingsManager.create(effectiveWorkspace, agentDir);
|
|
420
|
-
|
|
427
|
+
applyPiCompactionSettingsFromConfig({
|
|
421
428
|
settingsManager,
|
|
422
|
-
|
|
429
|
+
cfg: params.config,
|
|
423
430
|
});
|
|
424
|
-
//
|
|
425
|
-
|
|
431
|
+
// Sets compaction/pruning runtime state and returns extension factories
|
|
432
|
+
// that must be passed to the resource loader for the safeguard to be active.
|
|
433
|
+
const extensionFactories = buildEmbeddedExtensionFactories({
|
|
426
434
|
cfg: params.config,
|
|
427
435
|
sessionManager,
|
|
428
436
|
provider,
|
|
429
437
|
modelId,
|
|
430
438
|
model,
|
|
431
439
|
});
|
|
440
|
+
// Only create an explicit resource loader when there are extension factories
|
|
441
|
+
// to register; otherwise let createAgentSession use its built-in default.
|
|
442
|
+
let resourceLoader;
|
|
443
|
+
if (extensionFactories.length > 0) {
|
|
444
|
+
resourceLoader = new DefaultResourceLoader({
|
|
445
|
+
cwd: resolvedWorkspace,
|
|
446
|
+
agentDir,
|
|
447
|
+
settingsManager,
|
|
448
|
+
extensionFactories,
|
|
449
|
+
});
|
|
450
|
+
await resourceLoader.reload();
|
|
451
|
+
}
|
|
432
452
|
const { builtInTools, customTools } = splitSdkTools({
|
|
433
453
|
tools,
|
|
434
454
|
sandboxEnabled: !!sandbox?.enabled,
|
|
@@ -444,6 +464,7 @@ export async function compactEmbeddedPiSessionDirect(params) {
|
|
|
444
464
|
customTools,
|
|
445
465
|
sessionManager,
|
|
446
466
|
settingsManager,
|
|
467
|
+
resourceLoader,
|
|
447
468
|
});
|
|
448
469
|
applySystemPromptOverrideToSession(session, systemPromptOverride());
|
|
449
470
|
try {
|
|
@@ -452,6 +473,7 @@ export async function compactEmbeddedPiSessionDirect(params) {
|
|
|
452
473
|
modelApi: model.api,
|
|
453
474
|
modelId,
|
|
454
475
|
provider,
|
|
476
|
+
allowedToolNames,
|
|
455
477
|
config: params.config,
|
|
456
478
|
sessionManager,
|
|
457
479
|
sessionId: params.sessionId,
|