@letta-ai/letta-code 0.30.2 → 0.30.4
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/dist/app-server-client.cjs +9 -136
- package/dist/app-server-client.cjs.map +3 -3
- package/dist/app-server-client.js +9 -136
- package/dist/app-server-client.js.map +3 -3
- package/dist/channels-slack.js +96 -1
- package/dist/channels-slack.js.map +4 -3
- package/dist/gateway-core.js +2190 -0
- package/dist/gateway-core.js.map +16 -0
- package/dist/mcp-client.js +2 -2
- package/dist/mcp-client.js.map +1 -1
- package/dist/types/agent/approval-execution.d.ts +92 -0
- package/dist/types/agent/approval-execution.d.ts.map +1 -0
- package/dist/types/agent/approval-result-normalization.d.ts +20 -0
- package/dist/types/agent/approval-result-normalization.d.ts.map +1 -0
- package/dist/types/agent/available-models.d.ts +65 -0
- package/dist/types/agent/available-models.d.ts.map +1 -0
- package/dist/types/agent/client-skills.d.ts +55 -0
- package/dist/types/agent/client-skills.d.ts.map +1 -0
- package/dist/types/agent/context.d.ts +50 -0
- package/dist/types/agent/context.d.ts.map +1 -0
- package/dist/types/agent/memory-filesystem.d.ts +149 -0
- package/dist/types/agent/memory-filesystem.d.ts.map +1 -0
- package/dist/types/agent/memory-git-config-lock.d.ts +27 -0
- package/dist/types/agent/memory-git-config-lock.d.ts.map +1 -0
- package/dist/types/agent/memory-git-hooks.d.ts +45 -0
- package/dist/types/agent/memory-git-hooks.d.ts.map +1 -0
- package/dist/types/agent/memory-git-signing.d.ts +14 -0
- package/dist/types/agent/memory-git-signing.d.ts.map +1 -0
- package/dist/types/agent/memory-git.d.ts +213 -0
- package/dist/types/agent/memory-git.d.ts.map +1 -0
- package/dist/types/agent/memory-runtime.d.ts +12 -0
- package/dist/types/agent/memory-runtime.d.ts.map +1 -0
- package/dist/types/agent/message.d.ts +100 -0
- package/dist/types/agent/message.d.ts.map +1 -0
- package/dist/types/agent/model-handles.d.ts +17 -0
- package/dist/types/agent/model-handles.d.ts.map +1 -0
- package/dist/types/agent/model.d.ts +167 -0
- package/dist/types/agent/model.d.ts.map +1 -0
- package/dist/types/agent/modify.d.ts +142 -0
- package/dist/types/agent/modify.d.ts.map +1 -0
- package/dist/types/agent/personality-default-files.d.ts +17 -0
- package/dist/types/agent/personality-default-files.d.ts.map +1 -0
- package/dist/types/agent/skill-sources.d.ts +15 -0
- package/dist/types/agent/skill-sources.d.ts.map +1 -0
- package/dist/types/agent/skills.d.ts +116 -0
- package/dist/types/agent/skills.d.ts.map +1 -0
- package/dist/types/agent/subagent-state.d.ts +166 -0
- package/dist/types/agent/subagent-state.d.ts.map +1 -0
- package/dist/types/agent/subagents/context-budget.d.ts +14 -0
- package/dist/types/agent/subagents/context-budget.d.ts.map +1 -0
- package/dist/types/agent/subagents/index.d.ts +89 -0
- package/dist/types/agent/subagents/index.d.ts.map +1 -0
- package/dist/types/agent/subagents/manager.d.ts +47 -0
- package/dist/types/agent/subagents/manager.d.ts.map +1 -0
- package/dist/types/agent/subagents/sandbox.d.ts +69 -0
- package/dist/types/agent/subagents/sandbox.d.ts.map +1 -0
- package/dist/types/agent/subagents/subagent-launcher.d.ts +80 -0
- package/dist/types/agent/subagents/subagent-launcher.d.ts.map +1 -0
- package/dist/types/agent/subagents/subagent-model.d.ts +40 -0
- package/dist/types/agent/subagents/subagent-model.d.ts.map +1 -0
- package/dist/types/agent/subagents/subagent-stream.d.ts +35 -0
- package/dist/types/agent/subagents/subagent-stream.d.ts.map +1 -0
- package/dist/types/agent/system-prompt-resolution.d.ts +40 -0
- package/dist/types/agent/system-prompt-resolution.d.ts.map +1 -0
- package/dist/types/agent/system-prompt-versioning.d.ts +44 -0
- package/dist/types/agent/system-prompt-versioning.d.ts.map +1 -0
- package/dist/types/agent/turn-recovery-policy.d.ts +126 -0
- package/dist/types/agent/turn-recovery-policy.d.ts.map +1 -0
- package/dist/types/app-server-client.d.ts +12 -22
- package/dist/types/app-server-client.d.ts.map +1 -1
- package/dist/types/auth/oauth-refresh.d.ts +5 -0
- package/dist/types/auth/oauth-refresh.d.ts.map +1 -0
- package/dist/types/auth/oauth.d.ts +73 -0
- package/dist/types/auth/oauth.d.ts.map +1 -0
- package/dist/types/backend/api/client.d.ts +13 -0
- package/dist/types/backend/api/client.d.ts.map +1 -0
- package/dist/types/backend/api/conversations.d.ts +28 -0
- package/dist/types/backend/api/conversations.d.ts.map +1 -0
- package/dist/types/backend/api/generate.d.ts +2 -0
- package/dist/types/backend/api/generate.d.ts.map +1 -0
- package/dist/types/backend/api/health.d.ts +8 -0
- package/dist/types/backend/api/health.d.ts.map +1 -0
- package/dist/types/backend/api/http-headers.d.ts +10 -0
- package/dist/types/backend/api/http-headers.d.ts.map +1 -0
- package/dist/types/backend/api/memfs-git-proxy.d.ts +35 -0
- package/dist/types/backend/api/memfs-git-proxy.d.ts.map +1 -0
- package/dist/types/backend/api/metadata.d.ts +13 -0
- package/dist/types/backend/api/metadata.d.ts.map +1 -0
- package/dist/types/backend/api/providers.d.ts +27 -0
- package/dist/types/backend/api/providers.d.ts.map +1 -0
- package/dist/types/backend/api/request.d.ts +28 -0
- package/dist/types/backend/api/request.d.ts.map +1 -0
- package/dist/types/backend/backend-mode.d.ts +13 -0
- package/dist/types/backend/backend-mode.d.ts.map +1 -0
- package/dist/types/backend/backend.d.ts +153 -0
- package/dist/types/backend/backend.d.ts.map +1 -0
- package/dist/types/backend/dev/context-window-overflow.d.ts +2 -0
- package/dist/types/backend/dev/context-window-overflow.d.ts.map +1 -0
- package/dist/types/backend/dev/fake-headless-backend.d.ts +80 -0
- package/dist/types/backend/dev/fake-headless-backend.d.ts.map +1 -0
- package/dist/types/backend/dev/headless-backend.d.ts +3 -0
- package/dist/types/backend/dev/headless-backend.d.ts.map +1 -0
- package/dist/types/backend/dev/headless-turn-executor.d.ts +28 -0
- package/dist/types/backend/dev/headless-turn-executor.d.ts.map +1 -0
- package/dist/types/backend/dev/local-provider-errors.d.ts +13 -0
- package/dist/types/backend/dev/local-provider-errors.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-api-streams.d.ts +10 -0
- package/dist/types/backend/dev/pi-api-streams.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-image-elision.d.ts +15 -0
- package/dist/types/backend/dev/pi-image-elision.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-llama-cpp-provider.d.ts +18 -0
- package/dist/types/backend/dev/pi-llama-cpp-provider.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-lmstudio-provider.d.ts +16 -0
- package/dist/types/backend/dev/pi-lmstudio-provider.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-local-endpoint-provider.d.ts +77 -0
- package/dist/types/backend/dev/pi-local-endpoint-provider.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-mod-provider.d.ts +30 -0
- package/dist/types/backend/dev/pi-mod-provider.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-model-factory.d.ts +53 -0
- package/dist/types/backend/dev/pi-model-factory.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-models-runtime.d.ts +120 -0
- package/dist/types/backend/dev/pi-models-runtime.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-oauth.d.ts +17 -0
- package/dist/types/backend/dev/pi-oauth.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-ollama-provider.d.ts +20 -0
- package/dist/types/backend/dev/pi-ollama-provider.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-provider-mod-registry.d.ts +25 -0
- package/dist/types/backend/dev/pi-provider-mod-registry.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-provider-mod-types.d.ts +66 -0
- package/dist/types/backend/dev/pi-provider-mod-types.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-provider-mod-validation.d.ts +5 -0
- package/dist/types/backend/dev/pi-provider-mod-validation.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-provider-registry.d.ts +65 -0
- package/dist/types/backend/dev/pi-provider-registry.d.ts.map +1 -0
- package/dist/types/backend/dev/pi-stream-adapter.d.ts +56 -0
- package/dist/types/backend/dev/pi-stream-adapter.d.ts.map +1 -0
- package/dist/types/backend/dev/provider-turn-executor.d.ts +98 -0
- package/dist/types/backend/dev/provider-turn-executor.d.ts.map +1 -0
- package/dist/types/backend/dev/registered-pi-provider-runtime.d.ts +24 -0
- package/dist/types/backend/dev/registered-pi-provider-runtime.d.ts.map +1 -0
- package/dist/types/backend/index.d.ts +2 -0
- package/dist/types/backend/index.d.ts.map +1 -0
- package/dist/types/backend/local/compaction.d.ts +56 -0
- package/dist/types/backend/local/compaction.d.ts.map +1 -0
- package/dist/types/backend/local/local-backend.d.ts +107 -0
- package/dist/types/backend/local/local-backend.d.ts.map +1 -0
- package/dist/types/backend/local/local-context-estimate.d.ts +13 -0
- package/dist/types/backend/local/local-context-estimate.d.ts.map +1 -0
- package/dist/types/backend/local/local-conversation-fork.d.ts +3 -0
- package/dist/types/backend/local/local-conversation-fork.d.ts.map +1 -0
- package/dist/types/backend/local/local-conversation-list.d.ts +8 -0
- package/dist/types/backend/local/local-conversation-list.d.ts.map +1 -0
- package/dist/types/backend/local/local-executor-factory.d.ts +21 -0
- package/dist/types/backend/local/local-executor-factory.d.ts.map +1 -0
- package/dist/types/backend/local/local-message-projection.d.ts +28 -0
- package/dist/types/backend/local/local-message-projection.d.ts.map +1 -0
- package/dist/types/backend/local/local-message.d.ts +58 -0
- package/dist/types/backend/local/local-message.d.ts.map +1 -0
- package/dist/types/backend/local/local-model-config.d.ts +44 -0
- package/dist/types/backend/local/local-model-config.d.ts.map +1 -0
- package/dist/types/backend/local/local-model-normalization.d.ts +11 -0
- package/dist/types/backend/local/local-model-normalization.d.ts.map +1 -0
- package/dist/types/backend/local/local-pi-credential-store.d.ts +19 -0
- package/dist/types/backend/local/local-pi-credential-store.d.ts.map +1 -0
- package/dist/types/backend/local/local-provider-auth-store.d.ts +85 -0
- package/dist/types/backend/local/local-provider-auth-store.d.ts.map +1 -0
- package/dist/types/backend/local/local-provider-timeout.d.ts +14 -0
- package/dist/types/backend/local/local-provider-timeout.d.ts.map +1 -0
- package/dist/types/backend/local/local-store.d.ts +215 -0
- package/dist/types/backend/local/local-store.d.ts.map +1 -0
- package/dist/types/backend/local/local-stream-chunks.d.ts +8 -0
- package/dist/types/backend/local/local-stream-chunks.d.ts.map +1 -0
- package/dist/types/backend/local/local-types.d.ts +26 -0
- package/dist/types/backend/local/local-types.d.ts.map +1 -0
- package/dist/types/backend/local/paths.d.ts +9 -0
- package/dist/types/backend/local/paths.d.ts.map +1 -0
- package/dist/types/backend/local/system-prompt-compilation.d.ts +23 -0
- package/dist/types/backend/local/system-prompt-compilation.d.ts.map +1 -0
- package/dist/types/channels/access-control.d.ts +104 -0
- package/dist/types/channels/access-control.d.ts.map +1 -0
- package/dist/types/channels/accounts.d.ts +17 -0
- package/dist/types/channels/accounts.d.ts.map +1 -0
- package/dist/types/channels/commands.d.ts +98 -0
- package/dist/types/channels/commands.d.ts.map +1 -0
- package/dist/types/channels/config.d.ts +18 -0
- package/dist/types/channels/config.d.ts.map +1 -0
- package/dist/types/channels/credential-store.d.ts +21 -0
- package/dist/types/channels/credential-store.d.ts.map +1 -0
- package/dist/types/channels/custom/adapter.d.ts +3 -0
- package/dist/types/channels/custom/adapter.d.ts.map +1 -0
- package/dist/types/channels/custom/plugin.d.ts +10 -0
- package/dist/types/channels/custom/plugin.d.ts.map +1 -0
- package/dist/types/channels/discord/account-display.d.ts +2 -0
- package/dist/types/channels/discord/account-display.d.ts.map +1 -0
- package/dist/types/channels/discord/adapter.d.ts +3 -0
- package/dist/types/channels/discord/adapter.d.ts.map +1 -0
- package/dist/types/channels/discord/bot-policy.d.ts +19 -0
- package/dist/types/channels/discord/bot-policy.d.ts.map +1 -0
- package/dist/types/channels/discord/channel-gating.d.ts +41 -0
- package/dist/types/channels/discord/channel-gating.d.ts.map +1 -0
- package/dist/types/channels/discord/error-reply.d.ts +24 -0
- package/dist/types/channels/discord/error-reply.d.ts.map +1 -0
- package/dist/types/channels/discord/internal-types.d.ts +101 -0
- package/dist/types/channels/discord/internal-types.d.ts.map +1 -0
- package/dist/types/channels/discord/media.d.ts +47 -0
- package/dist/types/channels/discord/media.d.ts.map +1 -0
- package/dist/types/channels/discord/message-actions.d.ts +3 -0
- package/dist/types/channels/discord/message-actions.d.ts.map +1 -0
- package/dist/types/channels/discord/plugin.d.ts +3 -0
- package/dist/types/channels/discord/plugin.d.ts.map +1 -0
- package/dist/types/channels/discord/runtime.d.ts +28 -0
- package/dist/types/channels/discord/runtime.d.ts.map +1 -0
- package/dist/types/channels/discord/setup.d.ts +2 -0
- package/dist/types/channels/discord/setup.d.ts.map +1 -0
- package/dist/types/channels/discord/utils.d.ts +47 -0
- package/dist/types/channels/discord/utils.d.ts.map +1 -0
- package/dist/types/channels/feedback.d.ts +26 -0
- package/dist/types/channels/feedback.d.ts.map +1 -0
- package/dist/types/channels/gateway-core.d.ts +69 -0
- package/dist/types/channels/gateway-core.d.ts.map +1 -0
- package/dist/types/channels/inbound-debounce.d.ts +50 -0
- package/dist/types/channels/inbound-debounce.d.ts.map +1 -0
- package/dist/types/channels/interactive.d.ts +13 -0
- package/dist/types/channels/interactive.d.ts.map +1 -0
- package/dist/types/channels/lifecycle-error-report.d.ts +19 -0
- package/dist/types/channels/lifecycle-error-report.d.ts.map +1 -0
- package/dist/types/channels/message-channel-executor.d.ts +46 -0
- package/dist/types/channels/message-channel-executor.d.ts.map +1 -0
- package/dist/types/channels/message-channel-formatting.d.ts +6 -0
- package/dist/types/channels/message-channel-formatting.d.ts.map +1 -0
- package/dist/types/channels/message-channel-tool-definition.d.ts +40 -0
- package/dist/types/channels/message-channel-tool-definition.d.ts.map +1 -0
- package/dist/types/channels/message-channel-types.d.ts +46 -0
- package/dist/types/channels/message-channel-types.d.ts.map +1 -0
- package/dist/types/channels/message-tool.d.ts +15 -0
- package/dist/types/channels/message-tool.d.ts.map +1 -0
- package/dist/types/channels/pairing.d.ts +53 -0
- package/dist/types/channels/pairing.d.ts.map +1 -0
- package/dist/types/channels/pending-control-requests.d.ts +12 -0
- package/dist/types/channels/pending-control-requests.d.ts.map +1 -0
- package/dist/types/channels/plugin-registry.d.ts +9 -0
- package/dist/types/channels/plugin-registry.d.ts.map +1 -0
- package/dist/types/channels/plugin-types.d.ts +14 -2
- package/dist/types/channels/plugin-types.d.ts.map +1 -1
- package/dist/types/channels/registry-commands.d.ts +52 -0
- package/dist/types/channels/registry-commands.d.ts.map +1 -0
- package/dist/types/channels/registry-controls.d.ts +33 -0
- package/dist/types/channels/registry-controls.d.ts.map +1 -0
- package/dist/types/channels/registry-events.d.ts +27 -0
- package/dist/types/channels/registry-events.d.ts.map +1 -0
- package/dist/types/channels/registry-handlers.d.ts +46 -0
- package/dist/types/channels/registry-handlers.d.ts.map +1 -0
- package/dist/types/channels/registry-inbound.d.ts +19 -0
- package/dist/types/channels/registry-inbound.d.ts.map +1 -0
- package/dist/types/channels/registry-presentation.d.ts +20 -0
- package/dist/types/channels/registry-presentation.d.ts.map +1 -0
- package/dist/types/channels/registry-routes.d.ts +33 -0
- package/dist/types/channels/registry-routes.d.ts.map +1 -0
- package/dist/types/channels/registry.d.ts +130 -0
- package/dist/types/channels/registry.d.ts.map +1 -0
- package/dist/types/channels/restore-scope.d.ts +8 -0
- package/dist/types/channels/restore-scope.d.ts.map +1 -0
- package/dist/types/channels/routing.d.ts +74 -0
- package/dist/types/channels/routing.d.ts.map +1 -0
- package/dist/types/channels/runtime-deps.d.ts +25 -0
- package/dist/types/channels/runtime-deps.d.ts.map +1 -0
- package/dist/types/channels/schema-config.d.ts +33 -0
- package/dist/types/channels/schema-config.d.ts.map +1 -0
- package/dist/types/channels/signal/account-conflicts.d.ts +14 -0
- package/dist/types/channels/signal/account-conflicts.d.ts.map +1 -0
- package/dist/types/channels/signal/adapter.d.ts +40 -0
- package/dist/types/channels/signal/adapter.d.ts.map +1 -0
- package/dist/types/channels/signal/client.d.ts +51 -0
- package/dist/types/channels/signal/client.d.ts.map +1 -0
- package/dist/types/channels/signal/inbound.d.ts +25 -0
- package/dist/types/channels/signal/inbound.d.ts.map +1 -0
- package/dist/types/channels/signal/internal-types.d.ts +82 -0
- package/dist/types/channels/signal/internal-types.d.ts.map +1 -0
- package/dist/types/channels/signal/media.d.ts +35 -0
- package/dist/types/channels/signal/media.d.ts.map +1 -0
- package/dist/types/channels/signal/message-actions.d.ts +3 -0
- package/dist/types/channels/signal/message-actions.d.ts.map +1 -0
- package/dist/types/channels/signal/plugin.d.ts +3 -0
- package/dist/types/channels/signal/plugin.d.ts.map +1 -0
- package/dist/types/channels/signal/runtime.d.ts +14 -0
- package/dist/types/channels/signal/runtime.d.ts.map +1 -0
- package/dist/types/channels/signal/setup-runtime.d.ts +35 -0
- package/dist/types/channels/signal/setup-runtime.d.ts.map +1 -0
- package/dist/types/channels/signal/setup.d.ts +5 -0
- package/dist/types/channels/signal/setup.d.ts.map +1 -0
- package/dist/types/channels/signal/target.d.ts +21 -0
- package/dist/types/channels/signal/target.d.ts.map +1 -0
- package/dist/types/channels/slack/account-display.d.ts +2 -0
- package/dist/types/channels/slack/account-display.d.ts.map +1 -0
- package/dist/types/channels/slack/adapter.d.ts +12 -0
- package/dist/types/channels/slack/adapter.d.ts.map +1 -0
- package/dist/types/channels/slack/agent-thread-tracker.d.ts +13 -0
- package/dist/types/channels/slack/agent-thread-tracker.d.ts.map +1 -0
- package/dist/types/channels/slack/approval-controller.d.ts +14 -0
- package/dist/types/channels/slack/approval-controller.d.ts.map +1 -0
- package/dist/types/channels/slack/attachment-download.d.ts +20 -0
- package/dist/types/channels/slack/attachment-download.d.ts.map +1 -0
- package/dist/types/channels/slack/attachment-stream.d.ts +23 -0
- package/dist/types/channels/slack/attachment-stream.d.ts.map +1 -0
- package/dist/types/channels/slack/attachment-task.d.ts +37 -0
- package/dist/types/channels/slack/attachment-task.d.ts.map +1 -0
- package/dist/types/channels/slack/attachment-types.d.ts +27 -0
- package/dist/types/channels/slack/attachment-types.d.ts.map +1 -0
- package/dist/types/channels/slack/bot-policy.d.ts +25 -0
- package/dist/types/channels/slack/bot-policy.d.ts.map +1 -0
- package/dist/types/channels/slack/file-upload.d.ts +6 -0
- package/dist/types/channels/slack/file-upload.d.ts.map +1 -0
- package/dist/types/channels/slack/inbound-debounce.d.ts +16 -0
- package/dist/types/channels/slack/inbound-debounce.d.ts.map +1 -0
- package/dist/types/channels/slack/ingress-controller.d.ts +21 -0
- package/dist/types/channels/slack/ingress-controller.d.ts.map +1 -0
- package/dist/types/channels/slack/media.d.ts +63 -0
- package/dist/types/channels/slack/media.d.ts.map +1 -0
- package/dist/types/channels/slack/message-action-contract.d.ts +18 -0
- package/dist/types/channels/slack/message-action-contract.d.ts.map +1 -0
- package/dist/types/channels/slack/message-actions.d.ts +2 -0
- package/dist/types/channels/slack/message-actions.d.ts.map +1 -0
- package/dist/types/channels/slack/model-picker-blocks.d.ts +9 -0
- package/dist/types/channels/slack/model-picker-blocks.d.ts.map +1 -0
- package/dist/types/channels/slack/plugin.d.ts +3 -0
- package/dist/types/channels/slack/plugin.d.ts.map +1 -0
- package/dist/types/channels/slack/proactive-accounts.d.ts +15 -0
- package/dist/types/channels/slack/proactive-accounts.d.ts.map +1 -0
- package/dist/types/channels/slack/runtime.d.ts +6 -0
- package/dist/types/channels/slack/runtime.d.ts.map +1 -0
- package/dist/types/channels/slack/setup.d.ts +2 -0
- package/dist/types/channels/slack/setup.d.ts.map +1 -0
- package/dist/types/channels/slack/target-resolution.d.ts +52 -0
- package/dist/types/channels/slack/target-resolution.d.ts.map +1 -0
- package/dist/types/channels/slack/thread-context.d.ts +15 -0
- package/dist/types/channels/slack/thread-context.d.ts.map +1 -0
- package/dist/types/channels/slack/web-api-client.d.ts +2 -0
- package/dist/types/channels/slack/web-api-client.d.ts.map +1 -0
- package/dist/types/channels/targets.d.ts +17 -0
- package/dist/types/channels/targets.d.ts.map +1 -0
- package/dist/types/channels/telegram/account-display.d.ts +9 -0
- package/dist/types/channels/telegram/account-display.d.ts.map +1 -0
- package/dist/types/channels/telegram/adapter.d.ts +12 -0
- package/dist/types/channels/telegram/adapter.d.ts.map +1 -0
- package/dist/types/channels/telegram/debounce.d.ts +22 -0
- package/dist/types/channels/telegram/debounce.d.ts.map +1 -0
- package/dist/types/channels/telegram/internal-types.d.ts +98 -0
- package/dist/types/channels/telegram/internal-types.d.ts.map +1 -0
- package/dist/types/channels/telegram/media.d.ts +115 -0
- package/dist/types/channels/telegram/media.d.ts.map +1 -0
- package/dist/types/channels/telegram/message-actions.d.ts +3 -0
- package/dist/types/channels/telegram/message-actions.d.ts.map +1 -0
- package/dist/types/channels/telegram/plugin.d.ts +3 -0
- package/dist/types/channels/telegram/plugin.d.ts.map +1 -0
- package/dist/types/channels/telegram/runtime.d.ts +6 -0
- package/dist/types/channels/telegram/runtime.d.ts.map +1 -0
- package/dist/types/channels/telegram/setup.d.ts +14 -0
- package/dist/types/channels/telegram/setup.d.ts.map +1 -0
- package/dist/types/channels/telegram/startup-helpers.d.ts +10 -0
- package/dist/types/channels/telegram/startup-helpers.d.ts.map +1 -0
- package/dist/types/channels/telegram/typing-controller.d.ts +11 -0
- package/dist/types/channels/telegram/typing-controller.d.ts.map +1 -0
- package/dist/types/channels/telegram/utils.d.ts +43 -0
- package/dist/types/channels/telegram/utils.d.ts.map +1 -0
- package/dist/types/channels/transcription/index.d.ts +20 -0
- package/dist/types/channels/transcription/index.d.ts.map +1 -0
- package/dist/types/channels/types.d.ts +11 -12
- package/dist/types/channels/types.d.ts.map +1 -1
- package/dist/types/channels/whatsapp/adapter-helpers.d.ts +21 -0
- package/dist/types/channels/whatsapp/adapter-helpers.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/adapter-types.d.ts +44 -0
- package/dist/types/channels/whatsapp/adapter-types.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/adapter.d.ts +18 -0
- package/dist/types/channels/whatsapp/adapter.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/attachment-policy-types.d.ts +13 -0
- package/dist/types/channels/whatsapp/attachment-policy-types.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/attachment-policy.d.ts +22 -0
- package/dist/types/channels/whatsapp/attachment-policy.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/dedupe-claims.d.ts +8 -0
- package/dist/types/channels/whatsapp/dedupe-claims.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/identity.d.ts +29 -0
- package/dist/types/channels/whatsapp/identity.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/inbound-debounce.d.ts +28 -0
- package/dist/types/channels/whatsapp/inbound-debounce.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/jid.d.ts +40 -0
- package/dist/types/channels/whatsapp/jid.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/lid-store.d.ts +45 -0
- package/dist/types/channels/whatsapp/lid-store.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/media.d.ts +26 -0
- package/dist/types/channels/whatsapp/media.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/message-actions.d.ts +3 -0
- package/dist/types/channels/whatsapp/message-actions.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/message-prefix-config-types.d.ts +5 -0
- package/dist/types/channels/whatsapp/message-prefix-config-types.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/message-store.d.ts +13 -0
- package/dist/types/channels/whatsapp/message-store.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/plugin.d.ts +3 -0
- package/dist/types/channels/whatsapp/plugin.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/reactions.d.ts +33 -0
- package/dist/types/channels/whatsapp/reactions.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/reconnect-scheduler.d.ts +16 -0
- package/dist/types/channels/whatsapp/reconnect-scheduler.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/runtime.d.ts +25 -0
- package/dist/types/channels/whatsapp/runtime.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/session.d.ts +56 -0
- package/dist/types/channels/whatsapp/session.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/setup.d.ts +2 -0
- package/dist/types/channels/whatsapp/setup.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/state.d.ts +18 -0
- package/dist/types/channels/whatsapp/state.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/typing-controller.d.ts +28 -0
- package/dist/types/channels/whatsapp/typing-controller.d.ts.map +1 -0
- package/dist/types/channels/whatsapp/waiting-behavior-config-types.d.ts +6 -0
- package/dist/types/channels/whatsapp/waiting-behavior-config-types.d.ts.map +1 -0
- package/dist/types/channels/xml.d.ts +32 -0
- package/dist/types/channels/xml.d.ts.map +1 -0
- package/dist/types/channels-public.d.ts +1 -1
- package/dist/types/channels-public.d.ts.map +1 -1
- package/dist/types/channels-slack.d.ts +2 -0
- package/dist/types/channels-slack.d.ts.map +1 -1
- package/dist/types/cli/helpers/accumulator.d.ts +218 -0
- package/dist/types/cli/helpers/accumulator.d.ts.map +1 -0
- package/dist/types/cli/helpers/app-urls.d.ts +29 -0
- package/dist/types/cli/helpers/app-urls.d.ts.map +1 -0
- package/dist/types/cli/helpers/chunk-log.d.ts +56 -0
- package/dist/types/cli/helpers/chunk-log.d.ts.map +1 -0
- package/dist/types/cli/helpers/compaction-utils.d.ts +9 -0
- package/dist/types/cli/helpers/compaction-utils.d.ts.map +1 -0
- package/dist/types/cli/helpers/context-tracker.d.ts +24 -0
- package/dist/types/cli/helpers/context-tracker.d.ts.map +1 -0
- package/dist/types/cli/helpers/conversation-title.d.ts +24 -0
- package/dist/types/cli/helpers/conversation-title.d.ts.map +1 -0
- package/dist/types/cli/helpers/error-context.d.ts +24 -0
- package/dist/types/cli/helpers/error-context.d.ts.map +1 -0
- package/dist/types/cli/helpers/error-formatter.d.ts +44 -0
- package/dist/types/cli/helpers/error-formatter.d.ts.map +1 -0
- package/dist/types/cli/helpers/git-context.d.ts +29 -0
- package/dist/types/cli/helpers/git-context.d.ts.map +1 -0
- package/dist/types/cli/helpers/markdown-split.d.ts +9 -0
- package/dist/types/cli/helpers/markdown-split.d.ts.map +1 -0
- package/dist/types/cli/helpers/memory-reminder.d.ts +20 -0
- package/dist/types/cli/helpers/memory-reminder.d.ts.map +1 -0
- package/dist/types/cli/helpers/reasoning-text.d.ts +2 -0
- package/dist/types/cli/helpers/reasoning-text.d.ts.map +1 -0
- package/dist/types/cli/helpers/session-context.d.ts +25 -0
- package/dist/types/cli/helpers/session-context.d.ts.map +1 -0
- package/dist/types/cli/helpers/stream-processor.d.ts +36 -0
- package/dist/types/cli/helpers/stream-processor.d.ts.map +1 -0
- package/dist/types/cli/helpers/stream.d.ts +75 -0
- package/dist/types/cli/helpers/stream.d.ts.map +1 -0
- package/dist/types/cli/helpers/system-prompt-warning.d.ts +18 -0
- package/dist/types/cli/helpers/system-prompt-warning.d.ts.map +1 -0
- package/dist/types/cli/helpers/tool-name-mapping.d.ts +84 -0
- package/dist/types/cli/helpers/tool-name-mapping.d.ts.map +1 -0
- package/dist/types/cli/helpers/unified-exec-output.d.ts +10 -0
- package/dist/types/cli/helpers/unified-exec-output.d.ts.map +1 -0
- package/dist/types/cli/helpers/zai-errors.d.ts +38 -0
- package/dist/types/cli/helpers/zai-errors.d.ts.map +1 -0
- package/dist/types/cli/mods/command-runtime.d.ts +13 -0
- package/dist/types/cli/mods/command-runtime.d.ts.map +1 -0
- package/dist/types/cli/mods/types.d.ts +2 -0
- package/dist/types/cli/mods/types.d.ts.map +1 -0
- package/dist/types/experiments/manager.d.ts +12 -0
- package/dist/types/experiments/manager.d.ts.map +1 -0
- package/dist/types/experiments/types.d.ts +14 -0
- package/dist/types/experiments/types.d.ts.map +1 -0
- package/dist/types/gateway-core.d.ts +8 -0
- package/dist/types/gateway-core.d.ts.map +1 -0
- package/dist/types/helpers/usable-directory.d.ts +9 -0
- package/dist/types/helpers/usable-directory.d.ts.map +1 -0
- package/dist/types/hooks/executor.d.ts +23 -0
- package/dist/types/hooks/executor.d.ts.map +1 -0
- package/dist/types/hooks/index.d.ts +68 -0
- package/dist/types/hooks/index.d.ts.map +1 -0
- package/dist/types/hooks/loader.d.ts +63 -0
- package/dist/types/hooks/loader.d.ts.map +1 -0
- package/dist/types/hooks/prompt-executor.d.ts +7 -0
- package/dist/types/hooks/prompt-executor.d.ts.map +1 -0
- package/dist/types/hooks/types.d.ts +370 -0
- package/dist/types/hooks/types.d.ts.map +1 -0
- package/dist/types/lsp/client.d.ts +51 -0
- package/dist/types/lsp/client.d.ts.map +1 -0
- package/dist/types/lsp/manager.d.ts +48 -0
- package/dist/types/lsp/manager.d.ts.map +1 -0
- package/dist/types/lsp/servers/index.d.ts +10 -0
- package/dist/types/lsp/servers/index.d.ts.map +1 -0
- package/dist/types/lsp/servers/python.d.ts +11 -0
- package/dist/types/lsp/servers/python.d.ts.map +1 -0
- package/dist/types/lsp/servers/typescript.d.ts +10 -0
- package/dist/types/lsp/servers/typescript.d.ts.map +1 -0
- package/dist/types/lsp/types.d.ts +145 -0
- package/dist/types/lsp/types.d.ts.map +1 -0
- package/dist/types/mods/capabilities.d.ts +9 -0
- package/dist/types/mods/capabilities.d.ts.map +1 -0
- package/dist/types/mods/context.d.ts +22 -0
- package/dist/types/mods/context.d.ts.map +1 -0
- package/dist/types/mods/conversation-handle.d.ts +14 -0
- package/dist/types/mods/conversation-handle.d.ts.map +1 -0
- package/dist/types/mods/conversation-history.d.ts +8 -0
- package/dist/types/mods/conversation-history.d.ts.map +1 -0
- package/dist/types/mods/deprecated-api.d.ts +7 -0
- package/dist/types/mods/deprecated-api.d.ts.map +1 -0
- package/dist/types/mods/disable.d.ts +9 -0
- package/dist/types/mods/disable.d.ts.map +1 -0
- package/dist/types/mods/disabled-mod-adapter.d.ts +19 -0
- package/dist/types/mods/disabled-mod-adapter.d.ts.map +1 -0
- package/dist/types/mods/event-emitter.d.ts +7 -0
- package/dist/types/mods/event-emitter.d.ts.map +1 -0
- package/dist/types/mods/file-extensions.d.ts +7 -0
- package/dist/types/mods/file-extensions.d.ts.map +1 -0
- package/dist/types/mods/mod-adapter.d.ts +32 -0
- package/dist/types/mods/mod-adapter.d.ts.map +1 -0
- package/dist/types/mods/mod-diagnostics-file.d.ts +13 -0
- package/dist/types/mods/mod-diagnostics-file.d.ts.map +1 -0
- package/dist/types/mods/mod-diagnostics.d.ts +37 -0
- package/dist/types/mods/mod-diagnostics.d.ts.map +1 -0
- package/dist/types/mods/mod-engine.d.ts +114 -0
- package/dist/types/mods/mod-engine.d.ts.map +1 -0
- package/dist/types/mods/mod-sources.d.ts +20 -0
- package/dist/types/mods/mod-sources.d.ts.map +1 -0
- package/dist/types/mods/package-manifest.d.ts +30 -0
- package/dist/types/mods/package-manifest.d.ts.map +1 -0
- package/dist/types/mods/package-registry.d.ts +81 -0
- package/dist/types/mods/package-registry.d.ts.map +1 -0
- package/dist/types/mods/paths.d.ts +7 -0
- package/dist/types/mods/paths.d.ts.map +1 -0
- package/dist/types/mods/permission-registry.d.ts +19 -0
- package/dist/types/mods/permission-registry.d.ts.map +1 -0
- package/dist/types/mods/runtime-dependencies.d.ts +3 -0
- package/dist/types/mods/runtime-dependencies.d.ts.map +1 -0
- package/dist/types/mods/tool-registry.d.ts +17 -0
- package/dist/types/mods/tool-registry.d.ts.map +1 -0
- package/dist/types/mods/turn-start-cancel.d.ts +4 -0
- package/dist/types/mods/turn-start-cancel.d.ts.map +1 -0
- package/dist/types/mods/types.d.ts +507 -0
- package/dist/types/mods/types.d.ts.map +1 -0
- package/dist/types/permissions/analyzer.d.ts +15 -0
- package/dist/types/permissions/analyzer.d.ts.map +1 -0
- package/dist/types/permissions/canonical.d.ts +5 -0
- package/dist/types/permissions/canonical.d.ts.map +1 -0
- package/dist/types/permissions/checker.d.ts +50 -0
- package/dist/types/permissions/checker.d.ts.map +1 -0
- package/dist/types/permissions/cli-permissions-instance.d.ts +12 -0
- package/dist/types/permissions/cli-permissions-instance.d.ts.map +1 -0
- package/dist/types/permissions/cli.d.ts +59 -0
- package/dist/types/permissions/cli.d.ts.map +1 -0
- package/dist/types/permissions/cross-agent-guard.d.ts +74 -0
- package/dist/types/permissions/cross-agent-guard.d.ts.map +1 -0
- package/dist/types/permissions/loader.d.ts +29 -0
- package/dist/types/permissions/loader.d.ts.map +1 -0
- package/dist/types/permissions/matcher.d.ts +43 -0
- package/dist/types/permissions/matcher.d.ts.map +1 -0
- package/dist/types/permissions/memory-paths.d.ts +23 -0
- package/dist/types/permissions/memory-paths.d.ts.map +1 -0
- package/dist/types/permissions/read-only-shell.d.ts +18 -0
- package/dist/types/permissions/read-only-shell.d.ts.map +1 -0
- package/dist/types/permissions/rule-normalization.d.ts +3 -0
- package/dist/types/permissions/rule-normalization.d.ts.map +1 -0
- package/dist/types/permissions/sandbox-gate.d.ts +39 -0
- package/dist/types/permissions/sandbox-gate.d.ts.map +1 -0
- package/dist/types/permissions/session.d.ts +27 -0
- package/dist/types/permissions/session.d.ts.map +1 -0
- package/dist/types/permissions/shell-analysis.d.ts +43 -0
- package/dist/types/permissions/shell-analysis.d.ts.map +1 -0
- package/dist/types/permissions/shell-command-normalization.d.ts +4 -0
- package/dist/types/permissions/shell-command-normalization.d.ts.map +1 -0
- package/dist/types/permissions/types.d.ts +51 -0
- package/dist/types/permissions/types.d.ts.map +1 -0
- package/dist/types/providers/byok-providers.d.ts +117 -0
- package/dist/types/providers/byok-providers.d.ts.map +1 -0
- package/dist/types/providers/openai-codex-constants.d.ts +2 -0
- package/dist/types/providers/openai-codex-constants.d.ts.map +1 -0
- package/dist/types/providers/openai-codex-provider.d.ts +58 -0
- package/dist/types/providers/openai-codex-provider.d.ts.map +1 -0
- package/dist/types/queue/queue-runtime.d.ts +172 -0
- package/dist/types/queue/queue-runtime.d.ts.map +1 -0
- package/dist/types/reminders/state.d.ts +45 -0
- package/dist/types/reminders/state.d.ts.map +1 -0
- package/dist/types/runtime-context.d.ts +42 -0
- package/dist/types/runtime-context.d.ts.map +1 -0
- package/dist/types/settings-manager.d.ts +438 -0
- package/dist/types/settings-manager.d.ts.map +1 -0
- package/dist/types/telemetry/error-reporting.d.ts +12 -0
- package/dist/types/telemetry/error-reporting.d.ts.map +1 -0
- package/dist/types/telemetry/index.d.ts +267 -0
- package/dist/types/telemetry/index.d.ts.map +1 -0
- package/dist/types/tools/client-tool-serialization.d.ts +14 -0
- package/dist/types/tools/client-tool-serialization.d.ts.map +1 -0
- package/dist/types/tools/define-tool.d.ts +17 -0
- package/dist/types/tools/define-tool.d.ts.map +1 -0
- package/dist/types/tools/filter.d.ts +33 -0
- package/dist/types/tools/filter.d.ts.map +1 -0
- package/dist/types/tools/impl/apply-patch.d.ts +12 -0
- package/dist/types/tools/impl/apply-patch.d.ts.map +1 -0
- package/dist/types/tools/impl/artifact-files.d.ts +24 -0
- package/dist/types/tools/impl/artifact-files.d.ts.map +1 -0
- package/dist/types/tools/impl/ask-user-question.d.ts +20 -0
- package/dist/types/tools/impl/ask-user-question.d.ts.map +1 -0
- package/dist/types/tools/impl/bash-output.d.ts +31 -0
- package/dist/types/tools/impl/bash-output.d.ts.map +1 -0
- package/dist/types/tools/impl/bash.d.ts +41 -0
- package/dist/types/tools/impl/bash.d.ts.map +1 -0
- package/dist/types/tools/impl/edit.d.ts +26 -0
- package/dist/types/tools/impl/edit.d.ts.map +1 -0
- package/dist/types/tools/impl/enter-worktree.d.ts +36 -0
- package/dist/types/tools/impl/enter-worktree.d.ts.map +1 -0
- package/dist/types/tools/impl/exec-command.d.ts +52 -0
- package/dist/types/tools/impl/exec-command.d.ts.map +1 -0
- package/dist/types/tools/impl/glob-gemini.d.ts +16 -0
- package/dist/types/tools/impl/glob-gemini.d.ts.map +1 -0
- package/dist/types/tools/impl/glob.d.ts +12 -0
- package/dist/types/tools/impl/glob.d.ts.map +1 -0
- package/dist/types/tools/impl/grep-files.d.ts +19 -0
- package/dist/types/tools/impl/grep-files.d.ts.map +1 -0
- package/dist/types/tools/impl/grep.d.ts +23 -0
- package/dist/types/tools/impl/grep.d.ts.map +1 -0
- package/dist/types/tools/impl/kill-bash.d.ts +9 -0
- package/dist/types/tools/impl/kill-bash.d.ts.map +1 -0
- package/dist/types/tools/impl/list-dir-codex.d.ts +21 -0
- package/dist/types/tools/impl/list-dir-codex.d.ts.map +1 -0
- package/dist/types/tools/impl/list-directory-gemini.d.ts +17 -0
- package/dist/types/tools/impl/list-directory-gemini.d.ts.map +1 -0
- package/dist/types/tools/impl/ls.d.ts +12 -0
- package/dist/types/tools/impl/ls.d.ts.map +1 -0
- package/dist/types/tools/impl/memory-apply-patch.d.ts +10 -0
- package/dist/types/tools/impl/memory-apply-patch.d.ts.map +1 -0
- package/dist/types/tools/impl/memory.d.ts +20 -0
- package/dist/types/tools/impl/memory.d.ts.map +1 -0
- package/dist/types/tools/impl/message-channel.d.ts +10 -0
- package/dist/types/tools/impl/message-channel.d.ts.map +1 -0
- package/dist/types/tools/impl/multi-edit.d.ts +21 -0
- package/dist/types/tools/impl/multi-edit.d.ts.map +1 -0
- package/dist/types/tools/impl/overflow.d.ts +66 -0
- package/dist/types/tools/impl/overflow.d.ts.map +1 -0
- package/dist/types/tools/impl/process_manager.d.ts +83 -0
- package/dist/types/tools/impl/process_manager.d.ts.map +1 -0
- package/dist/types/tools/impl/read-file-codex.d.ts +24 -0
- package/dist/types/tools/impl/read-file-codex.d.ts.map +1 -0
- package/dist/types/tools/impl/read-file-gemini.d.ts +14 -0
- package/dist/types/tools/impl/read-file-gemini.d.ts.map +1 -0
- package/dist/types/tools/impl/read-lsp.d.ts +13 -0
- package/dist/types/tools/impl/read-lsp.d.ts.map +1 -0
- package/dist/types/tools/impl/read-many-files-gemini.d.ts +19 -0
- package/dist/types/tools/impl/read-many-files-gemini.d.ts.map +1 -0
- package/dist/types/tools/impl/read.d.ts +13 -0
- package/dist/types/tools/impl/read.d.ts.map +1 -0
- package/dist/types/tools/impl/replace-gemini.d.ts +15 -0
- package/dist/types/tools/impl/replace-gemini.d.ts.map +1 -0
- package/dist/types/tools/impl/ripgrep-manager.d.ts +9 -0
- package/dist/types/tools/impl/ripgrep-manager.d.ts.map +1 -0
- package/dist/types/tools/impl/run-shell-command-gemini.d.ts +18 -0
- package/dist/types/tools/impl/run-shell-command-gemini.d.ts.map +1 -0
- package/dist/types/tools/impl/search-file-content-gemini.d.ts +14 -0
- package/dist/types/tools/impl/search-file-content-gemini.d.ts.map +1 -0
- package/dist/types/tools/impl/shell-command.d.ts +25 -0
- package/dist/types/tools/impl/shell-command.d.ts.map +1 -0
- package/dist/types/tools/impl/shell-env.d.ts +20 -0
- package/dist/types/tools/impl/shell-env.d.ts.map +1 -0
- package/dist/types/tools/impl/shell-launchers.d.ts +14 -0
- package/dist/types/tools/impl/shell-launchers.d.ts.map +1 -0
- package/dist/types/tools/impl/shell-runner.d.ts +24 -0
- package/dist/types/tools/impl/shell-runner.d.ts.map +1 -0
- package/dist/types/tools/impl/shell-sandbox.d.ts +40 -0
- package/dist/types/tools/impl/shell-sandbox.d.ts.map +1 -0
- package/dist/types/tools/impl/shell.d.ts +25 -0
- package/dist/types/tools/impl/shell.d.ts.map +1 -0
- package/dist/types/tools/impl/skill-content-registry.d.ts +26 -0
- package/dist/types/tools/impl/skill-content-registry.d.ts.map +1 -0
- package/dist/types/tools/impl/skill.d.ts +45 -0
- package/dist/types/tools/impl/skill.d.ts.map +1 -0
- package/dist/types/tools/impl/task-create.d.ts +10 -0
- package/dist/types/tools/impl/task-create.d.ts.map +1 -0
- package/dist/types/tools/impl/task-get.d.ts +7 -0
- package/dist/types/tools/impl/task-get.d.ts.map +1 -0
- package/dist/types/tools/impl/task-list.d.ts +7 -0
- package/dist/types/tools/impl/task-list.d.ts.map +1 -0
- package/dist/types/tools/impl/task-output.d.ts +18 -0
- package/dist/types/tools/impl/task-output.d.ts.map +1 -0
- package/dist/types/tools/impl/task-stop.d.ts +9 -0
- package/dist/types/tools/impl/task-stop.d.ts.map +1 -0
- package/dist/types/tools/impl/task-update.d.ts +15 -0
- package/dist/types/tools/impl/task-update.d.ts.map +1 -0
- package/dist/types/tools/impl/task.d.ts +131 -0
- package/dist/types/tools/impl/task.d.ts.map +1 -0
- package/dist/types/tools/impl/tasks/store.d.ts +56 -0
- package/dist/types/tools/impl/tasks/store.d.ts.map +1 -0
- package/dist/types/tools/impl/todo-write.d.ts +14 -0
- package/dist/types/tools/impl/todo-write.d.ts.map +1 -0
- package/dist/types/tools/impl/tool-return-clamp.d.ts +21 -0
- package/dist/types/tools/impl/tool-return-clamp.d.ts.map +1 -0
- package/dist/types/tools/impl/truncation.d.ts +63 -0
- package/dist/types/tools/impl/truncation.d.ts.map +1 -0
- package/dist/types/tools/impl/update-plan.d.ts +13 -0
- package/dist/types/tools/impl/update-plan.d.ts.map +1 -0
- package/dist/types/tools/impl/validation.d.ts +15 -0
- package/dist/types/tools/impl/validation.d.ts.map +1 -0
- package/dist/types/tools/impl/view-image.d.ts +9 -0
- package/dist/types/tools/impl/view-image.d.ts.map +1 -0
- package/dist/types/tools/impl/write-file-gemini.d.ts +13 -0
- package/dist/types/tools/impl/write-file-gemini.d.ts.map +1 -0
- package/dist/types/tools/impl/write-todos-gemini.d.ts +16 -0
- package/dist/types/tools/impl/write-todos-gemini.d.ts.map +1 -0
- package/dist/types/tools/impl/write.d.ts +10 -0
- package/dist/types/tools/impl/write.d.ts.map +1 -0
- package/dist/types/tools/interactive-policy.d.ts +12 -0
- package/dist/types/tools/interactive-policy.d.ts.map +1 -0
- package/dist/types/tools/manager.d.ts +355 -0
- package/dist/types/tools/manager.d.ts.map +1 -0
- package/dist/types/tools/model-facing-tool.d.ts +35 -0
- package/dist/types/tools/model-facing-tool.d.ts.map +1 -0
- package/dist/types/tools/permission-mode-state.d.ts +7 -0
- package/dist/types/tools/permission-mode-state.d.ts.map +1 -0
- package/dist/types/tools/secret-substitution.d.ts +17 -0
- package/dist/types/tools/secret-substitution.d.ts.map +1 -0
- package/dist/types/tools/tool-definitions.d.ts +71 -0
- package/dist/types/tools/tool-definitions.d.ts.map +1 -0
- package/dist/types/tools/toolset.d.ts +112 -0
- package/dist/types/tools/toolset.d.ts.map +1 -0
- package/dist/types/types/protocol_v2.d.ts +43 -59
- package/dist/types/types/protocol_v2.d.ts.map +1 -1
- package/dist/types/types/schedule-protocol.d.ts +59 -0
- package/dist/types/types/schedule-protocol.d.ts.map +1 -0
- package/dist/types/types/service-protocol.d.ts +24 -0
- package/dist/types/types/service-protocol.d.ts.map +1 -0
- package/dist/types/updater/auto-update.d.ts +48 -0
- package/dist/types/updater/auto-update.d.ts.map +1 -0
- package/dist/types/utils/create-relayed-abort-controller.d.ts +16 -0
- package/dist/types/utils/create-relayed-abort-controller.d.ts.map +1 -0
- package/dist/types/utils/debug.d.ts +36 -0
- package/dist/types/utils/debug.d.ts.map +1 -0
- package/dist/types/utils/directory-limits.d.ts +35 -0
- package/dist/types/utils/directory-limits.d.ts.map +1 -0
- package/dist/types/utils/error.d.ts +8 -0
- package/dist/types/utils/error.d.ts.map +1 -0
- package/dist/types/utils/file-path.d.ts +9 -0
- package/dist/types/utils/file-path.d.ts.map +1 -0
- package/dist/types/utils/frontmatter.d.ts +23 -0
- package/dist/types/utils/frontmatter.d.ts.map +1 -0
- package/dist/types/utils/fs.d.ts +27 -0
- package/dist/types/utils/fs.d.ts.map +1 -0
- package/dist/types/utils/image-resize.d.ts +5 -0
- package/dist/types/utils/image-resize.d.ts.map +1 -0
- package/dist/types/utils/image-resize.magick.d.ts +8 -0
- package/dist/types/utils/image-resize.magick.d.ts.map +1 -0
- package/dist/types/utils/image-resize.shared.d.ts +18 -0
- package/dist/types/utils/image-resize.shared.d.ts.map +1 -0
- package/dist/types/utils/image-resize.sips.d.ts +2 -0
- package/dist/types/utils/image-resize.sips.d.ts.map +1 -0
- package/dist/types/utils/message-image-normalization.d.ts +25 -0
- package/dist/types/utils/message-image-normalization.d.ts.map +1 -0
- package/dist/types/utils/message-queue-bridge.d.ts +40 -0
- package/dist/types/utils/message-queue-bridge.d.ts.map +1 -0
- package/dist/types/utils/openai-endpoint.d.ts +4 -0
- package/dist/types/utils/openai-endpoint.d.ts.map +1 -0
- package/dist/types/utils/package-manager-spawn.d.ts +8 -0
- package/dist/types/utils/package-manager-spawn.d.ts.map +1 -0
- package/dist/types/utils/secrets-store.d.ts +83 -0
- package/dist/types/utils/secrets-store.d.ts.map +1 -0
- package/dist/types/utils/secrets.d.ts +58 -0
- package/dist/types/utils/secrets.d.ts.map +1 -0
- package/dist/types/utils/shell-context.d.ts +7 -0
- package/dist/types/utils/shell-context.d.ts.map +1 -0
- package/dist/types/utils/sleep.d.ts +5 -0
- package/dist/types/utils/sleep.d.ts.map +1 -0
- package/dist/types/utils/stream-abort-relay.d.ts +8 -0
- package/dist/types/utils/stream-abort-relay.d.ts.map +1 -0
- package/dist/types/utils/subagent-stdout-failure.d.ts +10 -0
- package/dist/types/utils/subagent-stdout-failure.d.ts.map +1 -0
- package/dist/types/utils/system-prompt-size.d.ts +32 -0
- package/dist/types/utils/system-prompt-size.d.ts.map +1 -0
- package/dist/types/utils/task-notifications.d.ts +38 -0
- package/dist/types/utils/task-notifications.d.ts.map +1 -0
- package/dist/types/utils/text-files.d.ts +7 -0
- package/dist/types/utils/text-files.d.ts.map +1 -0
- package/dist/types/utils/timing.d.ts +53 -0
- package/dist/types/utils/timing.d.ts.map +1 -0
- package/dist/types/utils/transcript-paths.d.ts +13 -0
- package/dist/types/utils/transcript-paths.d.ts.map +1 -0
- package/dist/types/utils/tui-perf.d.ts +6 -0
- package/dist/types/utils/tui-perf.d.ts.map +1 -0
- package/dist/types/utils/type-guards.d.ts +7 -0
- package/dist/types/utils/type-guards.d.ts.map +1 -0
- package/dist/types/utils/url.d.ts +8 -0
- package/dist/types/utils/url.d.ts.map +1 -0
- package/dist/types/utils/worktree-lock.d.ts +49 -0
- package/dist/types/utils/worktree-lock.d.ts.map +1 -0
- package/dist/types/version.d.ts +2 -0
- package/dist/types/version.d.ts.map +1 -0
- package/dist/types/websocket/listener/background-process-snapshot.d.ts +3 -0
- package/dist/types/websocket/listener/background-process-snapshot.d.ts.map +1 -0
- package/dist/types/websocket/listener/connection.d.ts +48 -0
- package/dist/types/websocket/listener/connection.d.ts.map +1 -0
- package/dist/types/websocket/listener/constants.d.ts +22 -0
- package/dist/types/websocket/listener/constants.d.ts.map +1 -0
- package/dist/types/websocket/listener/cwd-change.d.ts +21 -0
- package/dist/types/websocket/listener/cwd-change.d.ts.map +1 -0
- package/dist/types/websocket/listener/cwd.d.ts +22 -0
- package/dist/types/websocket/listener/cwd.d.ts.map +1 -0
- package/dist/types/websocket/listener/device-status-cache.d.ts +10 -0
- package/dist/types/websocket/listener/device-status-cache.d.ts.map +1 -0
- package/dist/types/websocket/listener/listener-constants.d.ts +9 -0
- package/dist/types/websocket/listener/listener-constants.d.ts.map +1 -0
- package/dist/types/websocket/listener/memfs-sync.d.ts +24 -0
- package/dist/types/websocket/listener/memfs-sync.d.ts.map +1 -0
- package/dist/types/websocket/listener/mod-adapter.d.ts +48 -0
- package/dist/types/websocket/listener/mod-adapter.d.ts.map +1 -0
- package/dist/types/websocket/listener/mod-commands.d.ts +23 -0
- package/dist/types/websocket/listener/mod-commands.d.ts.map +1 -0
- package/dist/types/websocket/listener/outbound-wire.d.ts +82 -0
- package/dist/types/websocket/listener/outbound-wire.d.ts.map +1 -0
- package/dist/types/websocket/listener/permission-mode.d.ts +46 -0
- package/dist/types/websocket/listener/permission-mode.d.ts.map +1 -0
- package/dist/types/websocket/listener/protocol-outbound.d.ts +122 -0
- package/dist/types/websocket/listener/protocol-outbound.d.ts.map +1 -0
- package/dist/types/websocket/listener/remote-settings-lock.d.ts +24 -0
- package/dist/types/websocket/listener/remote-settings-lock.d.ts.map +1 -0
- package/dist/types/websocket/listener/remote-settings.d.ts +47 -0
- package/dist/types/websocket/listener/remote-settings.d.ts.map +1 -0
- package/dist/types/websocket/listener/runtime.d.ts +51 -0
- package/dist/types/websocket/listener/runtime.d.ts.map +1 -0
- package/dist/types/websocket/listener/scope.d.ts +15 -0
- package/dist/types/websocket/listener/scope.d.ts.map +1 -0
- package/dist/types/websocket/listener/stream-observers.d.ts +16 -0
- package/dist/types/websocket/listener/stream-observers.d.ts.map +1 -0
- package/dist/types/websocket/listener/transport.d.ts +30 -0
- package/dist/types/websocket/listener/transport.d.ts.map +1 -0
- package/dist/types/websocket/listener/turn-context.d.ts +7 -0
- package/dist/types/websocket/listener/turn-context.d.ts.map +1 -0
- package/dist/types/websocket/listener/turn-lifecycle.d.ts +89 -0
- package/dist/types/websocket/listener/turn-lifecycle.d.ts.map +1 -0
- package/dist/types/websocket/listener/types.d.ts +333 -0
- package/dist/types/websocket/listener/types.d.ts.map +1 -0
- package/dist/types/websocket/listener/worktree-ownership.d.ts +11 -0
- package/dist/types/websocket/listener/worktree-ownership.d.ts.map +1 -0
- package/dist/types/websocket/listener/worktree-watcher.d.ts +41 -0
- package/dist/types/websocket/listener/worktree-watcher.d.ts.map +1 -0
- package/letta.js +10077 -7466
- package/package.json +12 -1
- package/scripts/source-file-size-baseline.json +9 -11
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"sources": ["../src/types/app-server-info.ts", "../src/app-server-client.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"export const APP_SERVER_PROTOCOL_VERSION = 1;\n\nexport interface AppServerInfoCommand {\n type: \"app_server_info\";\n /** Echoed back in the response for request correlation. */\n request_id: string;\n}\n\nexport interface AppServerInfoResponseMessage {\n type: \"app_server_info_response\";\n request_id: string;\n /** Synchronous post-auth capability discovery has no domain failure variant. */\n success: true;\n backend: \"local\" | \"api\";\n letta_code_version: string;\n /** Wire value reported by the server; clients compare it with their supported version. */\n protocol_version: number;\n capabilities: {\n agent_management: boolean;\n conversation_management: boolean;\n memory_management: boolean;\n runtime_start: boolean;\n split_channels: boolean;\n };\n}\n\nexport function isAppServerInfoResponseMessage(\n message: unknown,\n): message is AppServerInfoResponseMessage {\n if (!message || typeof message !== \"object\" || Array.isArray(message)) {\n return false;\n }\n\n const candidate = message as Record<string, unknown>;\n const capabilities = candidate.capabilities;\n if (\n !capabilities ||\n typeof capabilities !== \"object\" ||\n Array.isArray(capabilities)\n ) {\n return false;\n }\n\n const capabilityRecord = capabilities as Record<string, unknown>;\n return (\n candidate.type === \"app_server_info_response\" &&\n typeof candidate.request_id === \"string\" &&\n candidate.request_id.length > 0 &&\n candidate.success === true &&\n (candidate.backend === \"local\" || candidate.backend === \"api\") &&\n typeof candidate.letta_code_version === \"string\" &&\n typeof candidate.protocol_version === \"number\" &&\n Number.isInteger(candidate.protocol_version) &&\n typeof capabilityRecord.agent_management === \"boolean\" &&\n typeof capabilityRecord.conversation_management === \"boolean\" &&\n typeof capabilityRecord.memory_management === \"boolean\" &&\n typeof capabilityRecord.runtime_start === \"boolean\" &&\n typeof capabilityRecord.split_channels === \"boolean\"\n );\n}\n",
|
|
6
|
-
"import { isAppServerInfoResponseMessage } from \"./types/app-server-info\";\n\nexport type { AppServerInfoResponseMessage } from \"./types/app-server-info\";\nexport { isAppServerInfoResponseMessage } from \"./types/app-server-info\";\n\nimport type {\n AbortMessageCommand,\n AbortMessageResponseMessage,\n AppServerInfoResponseMessage,\n ConversationListCommand,\n ConversationListResponseMessage,\n ExternalToolCallRequestMessage,\n ExternalToolCallResult,\n InputCommand,\n LoopStatusUpdateMessage,\n RuntimeScope,\n RuntimeStartCommand,\n RuntimeStartResponseMessage,\n StreamDeltaMessage,\n SyncCommand,\n SyncResponseMessage,\n WsProtocolCommand,\n WsProtocolMessage,\n} from \"./types/app-server-protocol\";\n\nexport type AppServerChannel = \"control\" | \"stream\";\n\nexport type AppServerRawCommand = Record<string, unknown> & {\n type: string;\n request_id?: string;\n};\n\nexport type AppServerRawResponse = Record<string, unknown> & {\n type: string;\n request_id?: string;\n};\n\nexport type AppServerSendCommand = WsProtocolCommand | AppServerRawCommand;\n\n/** Receives every parsed protocol frame from the app-server WebSocket. */\nexport type AppServerMessageHandler = (\n message: WsProtocolMessage,\n channel: AppServerChannel,\n) => void;\n\n/** Called synchronously before a typed or raw command is written to the socket. */\nexport type AppServerSendHandler = (command: AppServerSendCommand) => void;\n\nexport interface AppServerDisconnectEvent {\n channel: AppServerChannel;\n event: unknown;\n}\n\n/** Called once when the WebSocket closes before client.close(). */\nexport type AppServerDisconnectHandler = (\n disconnect: AppServerDisconnectEvent,\n) => void;\n\nexport type AppServerExternalToolCallHandler = (\n request: ExternalToolCallRequestMessage,\n) => Promise<ExternalToolCallResult> | ExternalToolCallResult;\n\nexport interface AppServerSocketLike {\n readyState: number;\n send(data: string): void;\n close(): void;\n addEventListener?(type: string, listener: (event: unknown) => void): void;\n removeEventListener?(type: string, listener: (event: unknown) => void): void;\n on?(type: string, listener: (event: unknown) => void): void;\n off?(type: string, listener: (event: unknown) => void): void;\n once?(type: string, listener: (event: unknown) => void): void;\n}\n\nexport interface AppServerSocketOptions {\n headers?: Record<string, string>;\n}\n\nexport type AppServerSocketConstructor = new (\n url: string,\n options?: AppServerSocketOptions,\n) => AppServerSocketLike;\n\nexport interface AppServerClientOptions {\n /** Base app-server URL, e.g. ws://127.0.0.1:4500 or http://127.0.0.1:4500. */\n url: string;\n /** Optional capability token sent as Authorization: Bearer <token>; requires a WebSocket implementation with header support. */\n authToken?: string;\n /** Optional WebSocket constructor for Node/tests. Browsers use globalThis.WebSocket. */\n WebSocket?: AppServerSocketConstructor;\n /** Default timeout for request_id-correlated control requests. */\n requestTimeoutMs?: number;\n}\n\nexport interface AppServerRequestOptions<TMessage extends WsProtocolMessage> {\n timeoutMs?: number;\n predicate?: (message: WsProtocolMessage) => message is TMessage;\n}\n\nexport type AppServerRequestCommand = Extract<\n WsProtocolCommand,\n { request_id?: string }\n>;\n\nexport type AppServerRequestCommandWithId = AppServerRequestCommand & {\n request_id: string;\n};\n\nexport type AppServerRequestBody = Record<string, unknown> & {\n request_id?: string;\n};\n\nexport interface AppServerRawRequestOptions<\n TResponse extends AppServerRawResponse,\n> {\n timeoutMs?: number;\n predicate: (message: unknown) => message is TResponse;\n}\n\ntype PendingRequest = {\n resolve: (message: WsProtocolMessage) => void;\n reject: (error: Error) => void;\n predicate?: (message: WsProtocolMessage) => boolean;\n timeout: ReturnType<typeof setTimeout>;\n};\n\nexport type AppServerTurnCompletionSource =\n | \"stop_reason\"\n | \"loop_status_waiting_on_approval\"\n | \"loop_status_waiting_fallback\";\n\nexport interface AppServerTurnResult {\n runtime: RuntimeScope;\n stopReason: string | null;\n runIds: string[];\n clientMessageIds: string[];\n completedBy: AppServerTurnCompletionSource;\n terminalMessage: WsProtocolMessage;\n}\n\nexport interface AppServerRunTurnOptions {\n timeoutMs?: number;\n /**\n * Prefer explicit stream terminal events. This fallback is only used after\n * the client has seen stream/run evidence for this runtime, never from idle\n * loop status alone.\n */\n allowLoopStatusFallback?: boolean;\n}\n\nconst DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\nconst WEBSOCKET_OPEN_STATE = 1;\n\nfunction getGlobalWebSocket(): AppServerSocketConstructor | undefined {\n return (globalThis as { WebSocket?: AppServerSocketConstructor }).WebSocket;\n}\n\nfunction normalizeBaseUrl(url: string): URL {\n const parsed = new URL(url);\n if (parsed.protocol === \"http:\") parsed.protocol = \"ws:\";\n if (parsed.protocol === \"https:\") parsed.protocol = \"wss:\";\n if (parsed.protocol !== \"ws:\" && parsed.protocol !== \"wss:\") {\n throw new Error(`Unsupported app-server URL protocol: ${parsed.protocol}`);\n }\n if (!parsed.pathname || parsed.pathname === \"/\") {\n parsed.pathname = \"/ws\";\n }\n return parsed;\n}\n\nexport function resolveAppServerUrl(url: string): string {\n const parsed = normalizeBaseUrl(url);\n parsed.searchParams.delete(\"channel\");\n return parsed.toString();\n}\n\n/**\n * @deprecated App-server uses one bidirectional WebSocket. Both historical\n * channel names resolve to that same socket URL.\n */\nexport function resolveAppServerChannelUrl(\n url: string,\n _channel: AppServerChannel,\n): string {\n return resolveAppServerUrl(url);\n}\n\nfunction attachSocketListener(\n socket: AppServerSocketLike,\n type: string,\n listener: (event: unknown) => void,\n): () => void {\n if (socket.addEventListener && socket.removeEventListener) {\n socket.addEventListener(type, listener);\n return () => socket.removeEventListener?.(type, listener);\n }\n\n if (socket.on) {\n socket.on(type, listener);\n return () => socket.off?.(type, listener);\n }\n\n throw new Error(\"WebSocket implementation does not support event listeners\");\n}\n\nfunction onceSocketEvent(\n socket: AppServerSocketLike,\n type: string,\n listener: (event: unknown) => void,\n): () => void {\n if (socket.once) {\n socket.once(type, listener);\n return () => socket.off?.(type, listener);\n }\n\n let detach = () => {};\n detach = attachSocketListener(socket, type, (event) => {\n detach();\n listener(event);\n });\n return detach;\n}\n\nfunction waitForSocketOpen(socket: AppServerSocketLike): Promise<void> {\n if (socket.readyState === WEBSOCKET_OPEN_STATE) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n let detachOpen = () => {};\n let detachError = () => {};\n const cleanup = () => {\n detachOpen();\n detachError();\n };\n detachOpen = onceSocketEvent(socket, \"open\", () => {\n cleanup();\n resolve();\n });\n detachError = onceSocketEvent(socket, \"error\", (event) => {\n cleanup();\n reject(\n new Error(`App-server WebSocket failed to open: ${String(event)}`),\n );\n });\n });\n}\n\nfunction rawEventData(event: unknown): unknown {\n if (event && typeof event === \"object\" && \"data\" in event) {\n return (event as { data: unknown }).data;\n }\n return event;\n}\n\nfunction messageDataToString(data: unknown): string {\n const raw = rawEventData(data);\n if (typeof raw === \"string\") return raw;\n if (raw instanceof ArrayBuffer) {\n return new TextDecoder().decode(raw);\n }\n if (raw instanceof Uint8Array) {\n return new TextDecoder().decode(raw);\n }\n if (ArrayBuffer.isView(raw)) {\n return new TextDecoder().decode(\n new Uint8Array(raw.buffer as ArrayBuffer, raw.byteOffset, raw.byteLength),\n );\n }\n return String(raw);\n}\n\nfunction parseProtocolMessage(event: unknown): WsProtocolMessage {\n return JSON.parse(messageDataToString(event)) as WsProtocolMessage;\n}\n\nfunction appServerSocketOptions(\n authToken: string | undefined,\n): AppServerSocketOptions | undefined {\n if (authToken === undefined) {\n return undefined;\n }\n const token = authToken.trim();\n if (!token) {\n throw new Error(\"app-server auth token must not be empty\");\n }\n return { headers: { Authorization: `Bearer ${token}` } };\n}\n\nfunction sameRuntime(a: RuntimeScope | undefined, b: RuntimeScope): boolean {\n return a?.agent_id === b.agent_id && a?.conversation_id === b.conversation_id;\n}\n\nfunction isWaitingLoopStatus(message: LoopStatusUpdateMessage): boolean {\n return message.loop_status.status === \"WAITING_ON_INPUT\";\n}\n\nfunction isWaitingOnApprovalLoopStatus(\n message: LoopStatusUpdateMessage,\n): boolean {\n return message.loop_status.status === \"WAITING_ON_APPROVAL\";\n}\n\nfunction streamDeltaRunId(message: StreamDeltaMessage): string | null {\n const runId = (message.delta as { run_id?: unknown }).run_id;\n return typeof runId === \"string\" ? runId : null;\n}\n\nfunction streamDeltaMessageType(message: StreamDeltaMessage): string | null {\n const messageType = (message.delta as { message_type?: unknown })\n .message_type;\n return typeof messageType === \"string\" ? messageType : null;\n}\n\nfunction streamDeltaStopReason(message: StreamDeltaMessage): string | null {\n const stopReason = (message.delta as { stop_reason?: unknown }).stop_reason;\n return typeof stopReason === \"string\" ? stopReason : null;\n}\n\nfunction streamDeltaErrorMessage(message: StreamDeltaMessage): string {\n const delta = message.delta as {\n message?: unknown;\n api_error?: { message?: unknown; detail?: unknown };\n };\n const apiMessage = delta.api_error?.message ?? delta.api_error?.detail;\n if (typeof apiMessage === \"string\" && apiMessage.length > 0)\n return apiMessage;\n if (typeof delta.message === \"string\" && delta.message.length > 0)\n return delta.message;\n return \"App-server turn failed\";\n}\n\nexport class AppServerClient {\n readonly socket: AppServerSocketLike;\n /** @deprecated Alias for socket. */\n readonly control: AppServerSocketLike;\n /** @deprecated Alias for socket; no second stream connection is created. */\n readonly stream: AppServerSocketLike;\n\n private readonly requestTimeoutMs: number;\n private readonly pending = new Map<string, PendingRequest>();\n private readonly messageHandlers = new Set<AppServerMessageHandler>();\n private readonly sendHandlers = new Set<AppServerSendHandler>();\n private readonly disconnectHandlers = new Set<AppServerDisconnectHandler>();\n private readonly activeTurnRuntimes = new Set<string>();\n private explicitlyClosed = false;\n private disconnectNotified = false;\n private nextRequestNumber = 0;\n\n constructor(options: AppServerClientOptions) {\n const WebSocket = options.WebSocket ?? getGlobalWebSocket();\n if (!WebSocket) {\n throw new Error(\"No WebSocket implementation available\");\n }\n\n this.requestTimeoutMs =\n options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n const socketOptions = appServerSocketOptions(options.authToken);\n this.socket = new WebSocket(\n resolveAppServerUrl(options.url),\n socketOptions,\n );\n this.control = this.socket;\n this.stream = this.socket;\n\n attachSocketListener(this.socket, \"message\", (event) => {\n this.handleMessage(event, \"control\");\n });\n attachSocketListener(this.socket, \"close\", (event) => {\n this.handleDisconnect(\"control\", event);\n });\n }\n\n async connect(): Promise<this> {\n await waitForSocketOpen(this.socket);\n return this;\n }\n\n close(): void {\n if (this.explicitlyClosed) return;\n this.explicitlyClosed = true;\n this.rejectAllPending(\"App-server client closed\");\n this.socket.close();\n }\n\n onMessage(handler: AppServerMessageHandler): () => void {\n this.messageHandlers.add(handler);\n return () => this.messageHandlers.delete(handler);\n }\n\n onSend(handler: AppServerSendHandler): () => void {\n this.sendHandlers.add(handler);\n return () => this.sendHandlers.delete(handler);\n }\n\n onDisconnect(handler: AppServerDisconnectHandler): () => void {\n this.disconnectHandlers.add(handler);\n return () => this.disconnectHandlers.delete(handler);\n }\n\n nextRequestId(prefix = \"req\"): string {\n this.nextRequestNumber += 1;\n return `${prefix}-${this.nextRequestNumber}`;\n }\n\n send(command: WsProtocolCommand): void {\n this.writeCommand(command);\n }\n\n private writeCommand(command: AppServerSendCommand): void {\n for (const handler of this.sendHandlers) {\n handler(command);\n }\n this.socket.send(JSON.stringify(command));\n }\n\n /**\n * Send a forward-compatible protocol command from a compatibility adapter.\n * Prefer the typed wrappers above this boundary for normal product code.\n */\n sendRaw(command: AppServerRawCommand): void {\n this.writeCommand(command);\n }\n\n /**\n * Request a forward-compatible response without mirroring the full protocol\n * union in a downstream compatibility adapter.\n */\n requestRaw<TResponse extends AppServerRawResponse>(\n command: AppServerRawCommand & { request_id: string },\n options: AppServerRawRequestOptions<TResponse>,\n ): Promise<TResponse> {\n const timeoutMs = options.timeoutMs ?? this.requestTimeoutMs;\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.pending.delete(command.request_id);\n reject(new Error(`Timed out waiting for ${command.request_id}`));\n }, timeoutMs);\n\n this.pending.set(command.request_id, {\n resolve: (message) => resolve(message as unknown as TResponse),\n reject,\n predicate: options.predicate,\n timeout,\n });\n\n try {\n this.sendRaw(command);\n } catch (error) {\n clearTimeout(timeout);\n this.pending.delete(command.request_id);\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n });\n }\n\n request<TMessage extends WsProtocolMessage = WsProtocolMessage>(\n command: AppServerRequestCommandWithId,\n options?: AppServerRequestOptions<TMessage>,\n ): Promise<TMessage>;\n\n request<\n TType extends AppServerRequestCommand[\"type\"],\n TMessage extends WsProtocolMessage = WsProtocolMessage,\n >(\n type: TType,\n body?: AppServerRequestBody,\n options?: AppServerRequestOptions<TMessage>,\n ): Promise<TMessage>;\n\n request<TMessage extends WsProtocolMessage = WsProtocolMessage>(\n commandOrType:\n | AppServerRequestCommandWithId\n | AppServerRequestCommand[\"type\"],\n bodyOrOptions:\n | AppServerRequestBody\n | AppServerRequestOptions<TMessage> = {},\n maybeOptions: AppServerRequestOptions<TMessage> = {},\n ): Promise<TMessage> {\n const isTypeRequest = typeof commandOrType === \"string\";\n const command = isTypeRequest\n ? ({\n type: commandOrType,\n request_id:\n (bodyOrOptions as { request_id?: string }).request_id ??\n this.nextRequestId(commandOrType),\n ...(bodyOrOptions as object),\n } as AppServerRequestCommandWithId)\n : commandOrType;\n const options = isTypeRequest\n ? maybeOptions\n : (bodyOrOptions as AppServerRequestOptions<TMessage>);\n const timeoutMs = options.timeoutMs ?? this.requestTimeoutMs;\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.pending.delete(command.request_id);\n reject(new Error(`Timed out waiting for ${command.request_id}`));\n }, timeoutMs);\n\n this.pending.set(command.request_id, {\n resolve: (message) => resolve(message as TMessage),\n reject,\n predicate: options.predicate,\n timeout,\n });\n\n try {\n this.send(command);\n } catch (error) {\n clearTimeout(timeout);\n this.pending.delete(command.request_id);\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n });\n }\n\n info(\n options: Omit<\n AppServerRequestOptions<AppServerInfoResponseMessage>,\n \"predicate\"\n > = {},\n ): Promise<AppServerInfoResponseMessage> {\n return this.request(\n {\n type: \"app_server_info\",\n request_id: this.nextRequestId(\"app-server-info\"),\n },\n {\n ...options,\n predicate: isAppServerInfoResponseMessage,\n },\n );\n }\n\n runtimeStart(\n command: Omit<RuntimeStartCommand, \"type\" | \"request_id\"> & {\n request_id?: string;\n },\n options: Omit<\n AppServerRequestOptions<RuntimeStartResponseMessage>,\n \"predicate\"\n > = {},\n ): Promise<RuntimeStartResponseMessage> {\n return this.request(\n {\n type: \"runtime_start\",\n request_id: command.request_id ?? this.nextRequestId(\"runtime-start\"),\n ...command,\n },\n {\n ...options,\n predicate: (message): message is RuntimeStartResponseMessage =>\n message.type === \"runtime_start_response\",\n },\n );\n }\n\n sync(\n command: Omit<SyncCommand, \"type\" | \"request_id\"> & { request_id?: string },\n options: Omit<\n AppServerRequestOptions<SyncResponseMessage>,\n \"predicate\"\n > = {},\n ): Promise<SyncResponseMessage> {\n return this.request(\n {\n type: \"sync\",\n request_id: command.request_id ?? this.nextRequestId(\"sync\"),\n ...command,\n },\n {\n ...options,\n predicate: (message): message is SyncResponseMessage =>\n message.type === \"sync_response\",\n },\n );\n }\n\n abort(\n command: Omit<AbortMessageCommand, \"type\" | \"request_id\"> & {\n request_id?: string;\n },\n options: Omit<\n AppServerRequestOptions<AbortMessageResponseMessage>,\n \"predicate\"\n > = {},\n ): Promise<AbortMessageResponseMessage> {\n return this.request(\n {\n type: \"abort_message\",\n request_id: command.request_id ?? this.nextRequestId(\"abort\"),\n ...command,\n },\n {\n ...options,\n predicate: (message): message is AbortMessageResponseMessage =>\n message.type === \"abort_message_response\",\n },\n );\n }\n\n conversationList(\n command: Omit<ConversationListCommand, \"type\" | \"request_id\"> & {\n request_id?: string;\n } = {},\n options: Omit<\n AppServerRequestOptions<ConversationListResponseMessage>,\n \"predicate\"\n > = {},\n ): Promise<ConversationListResponseMessage> {\n return this.request(\n {\n type: \"conversation_list\",\n request_id:\n command.request_id ?? this.nextRequestId(\"conversation-list\"),\n ...command,\n },\n {\n ...options,\n predicate: (message): message is ConversationListResponseMessage =>\n message.type === \"conversation_list_response\",\n },\n );\n }\n\n onExternalToolCall(handler: AppServerExternalToolCallHandler): () => void {\n return this.onMessage((message, channel) => {\n if (\n channel !== \"control\" ||\n message.type !== \"external_tool_call_request\"\n ) {\n return;\n }\n\n void Promise.resolve(handler(message))\n .then((result) => {\n this.send({\n type: \"external_tool_call_response\",\n request_id: message.request_id,\n result,\n });\n })\n .catch((error) => {\n this.send({\n type: \"external_tool_call_response\",\n request_id: message.request_id,\n error: error instanceof Error ? error.message : String(error),\n });\n });\n });\n }\n\n input(command: Omit<InputCommand, \"type\">): void {\n this.send({ type: \"input\", ...command });\n }\n\n runTurn(\n command: Omit<InputCommand, \"type\">,\n options: AppServerRunTurnOptions = {},\n ): Promise<AppServerTurnResult> {\n const runtimeKey = `${command.runtime.agent_id}/${command.runtime.conversation_id}`;\n if (this.activeTurnRuntimes.has(runtimeKey)) {\n return Promise.reject(\n new Error(`A turn is already in flight for ${runtimeKey}`),\n );\n }\n this.activeTurnRuntimes.add(runtimeKey);\n const timeoutMs = options.timeoutMs ?? this.requestTimeoutMs;\n const commandWithIds = this.withClientMessageIds(command);\n const runIds = new Set<string>();\n let observedTurnEvidence = false;\n let observedRequiresApprovalStop = false;\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n cleanup();\n reject(\n new Error(\n `Timed out waiting for app-server turn on ${command.runtime.agent_id}/${command.runtime.conversation_id}`,\n ),\n );\n }, timeoutMs);\n\n const cleanup = () => {\n clearTimeout(timeout);\n this.activeTurnRuntimes.delete(runtimeKey);\n offMessage();\n };\n\n const finish = (\n completedBy: AppServerTurnCompletionSource,\n terminalMessage: WsProtocolMessage,\n stopReason: string | null,\n ) => {\n cleanup();\n resolve({\n runtime: command.runtime,\n stopReason,\n runIds: [...runIds],\n clientMessageIds: commandWithIds.clientMessageIds,\n completedBy,\n terminalMessage,\n });\n };\n\n const fail = (error: Error) => {\n cleanup();\n reject(error);\n };\n\n const offMessage = this.onMessage((message) => {\n if (\n !sameRuntime(\n (message as { runtime?: RuntimeScope }).runtime,\n command.runtime,\n )\n ) {\n return;\n }\n\n if (message.type === \"stream_delta\") {\n observedTurnEvidence = true;\n const runId = streamDeltaRunId(message);\n if (runId) runIds.add(runId);\n\n const messageType = streamDeltaMessageType(message);\n if (messageType === \"loop_error\" || messageType === \"error_message\") {\n fail(new Error(streamDeltaErrorMessage(message)));\n return;\n }\n if (messageType === \"stop_reason\") {\n const stopReason = streamDeltaStopReason(message);\n if (stopReason === \"requires_approval\") {\n observedRequiresApprovalStop = true;\n return;\n }\n finish(\"stop_reason\", message, stopReason);\n }\n return;\n }\n\n if (message.type === \"update_loop_status\") {\n const hadTurnEvidenceBeforeLoopStatus =\n observedTurnEvidence || observedRequiresApprovalStop;\n if (\n !hadTurnEvidenceBeforeLoopStatus &&\n (isWaitingOnApprovalLoopStatus(message) ||\n (options.allowLoopStatusFallback === true &&\n isWaitingLoopStatus(message)))\n ) {\n return;\n }\n for (const runId of message.loop_status.active_run_ids) {\n observedTurnEvidence = true;\n runIds.add(runId);\n }\n if (\n hadTurnEvidenceBeforeLoopStatus &&\n isWaitingOnApprovalLoopStatus(message)\n ) {\n finish(\n \"loop_status_waiting_on_approval\",\n message,\n \"requires_approval\",\n );\n return;\n }\n if (\n options.allowLoopStatusFallback === true &&\n hadTurnEvidenceBeforeLoopStatus &&\n isWaitingLoopStatus(message)\n ) {\n finish(\"loop_status_waiting_fallback\", message, null);\n }\n }\n });\n\n try {\n this.input(commandWithIds.command);\n } catch (error) {\n fail(error instanceof Error ? error : new Error(String(error)));\n }\n });\n }\n\n private withClientMessageIds(command: Omit<InputCommand, \"type\">): {\n command: Omit<InputCommand, \"type\">;\n clientMessageIds: string[];\n } {\n if (command.payload.kind !== \"create_message\") {\n return { command, clientMessageIds: [] };\n }\n\n const clientMessageIds: string[] = [];\n const messages = command.payload.messages.map((message) => {\n if (message.role !== \"user\") return message;\n const existing = (message as { client_message_id?: unknown })\n .client_message_id;\n const clientMessageId =\n typeof existing === \"string\" && existing.length > 0\n ? existing\n : this.nextRequestId(\"client-message\");\n clientMessageIds.push(clientMessageId);\n return { ...message, client_message_id: clientMessageId };\n });\n\n return {\n command: {\n ...command,\n payload: { ...command.payload, messages },\n },\n clientMessageIds,\n };\n }\n\n private handleMessage(event: unknown, channel: AppServerChannel): void {\n const message = parseProtocolMessage(event);\n\n for (const handler of this.messageHandlers) {\n handler(message, channel);\n }\n\n const requestId =\n message && typeof message === \"object\" && \"request_id\" in message\n ? (message as { request_id?: unknown }).request_id\n : undefined;\n if (channel !== \"control\" || typeof requestId !== \"string\") {\n return;\n }\n\n const pending = this.pending.get(requestId);\n if (!pending || (pending.predicate && !pending.predicate(message))) {\n return;\n }\n\n clearTimeout(pending.timeout);\n this.pending.delete(requestId);\n pending.resolve(message);\n }\n\n private rejectAllPending(reason: string): void {\n for (const [requestId, pending] of this.pending) {\n clearTimeout(pending.timeout);\n this.pending.delete(requestId);\n pending.reject(new Error(reason));\n }\n }\n\n private handleDisconnect(channel: AppServerChannel, event: unknown): void {\n this.rejectAllPending(\"App-server socket closed\");\n if (this.explicitlyClosed || this.disconnectNotified) return;\n this.disconnectNotified = true;\n for (const handler of this.disconnectHandlers) {\n handler({ channel, event });\n }\n }\n}\n\nexport function createAppServerClient(\n options: AppServerClientOptions,\n): AppServerClient {\n return new AppServerClient(options);\n}\n"
|
|
6
|
+
"import { isAppServerInfoResponseMessage } from \"./types/app-server-info\";\n\nexport type { AppServerInfoResponseMessage } from \"./types/app-server-info\";\nexport { isAppServerInfoResponseMessage } from \"./types/app-server-info\";\n\nimport type {\n AbortMessageCommand,\n AbortMessageResponseMessage,\n AppServerInfoResponseMessage,\n ConversationListCommand,\n ConversationListResponseMessage,\n ExternalToolCallRequestMessage,\n ExternalToolCallResult,\n InputAcceptedResponseMessage,\n InputCommand,\n RuntimeStartCommand,\n RuntimeStartResponseMessage,\n SyncCommand,\n SyncResponseMessage,\n WsProtocolCommand,\n WsProtocolMessage,\n} from \"./types/app-server-protocol\";\n\nexport type AppServerChannel = \"control\" | \"stream\";\n\nexport type AppServerRawCommand = Record<string, unknown> & {\n type: string;\n request_id?: string;\n};\n\nexport type AppServerRawResponse = Record<string, unknown> & {\n type: string;\n request_id?: string;\n};\n\nexport type AppServerSendCommand = WsProtocolCommand | AppServerRawCommand;\n\n/** Receives every parsed protocol frame from the app-server WebSocket. */\nexport type AppServerMessageHandler = (\n message: WsProtocolMessage,\n channel: AppServerChannel,\n) => void;\n\n/** Called synchronously before a typed or raw command is written to the socket. */\nexport type AppServerSendHandler = (command: AppServerSendCommand) => void;\n\nexport interface AppServerDisconnectEvent {\n channel: AppServerChannel;\n event: unknown;\n}\n\n/** Called once when the WebSocket closes before client.close(). */\nexport type AppServerDisconnectHandler = (\n disconnect: AppServerDisconnectEvent,\n) => void;\n\nexport type AppServerExternalToolCallHandler = (\n request: ExternalToolCallRequestMessage,\n) => Promise<ExternalToolCallResult> | ExternalToolCallResult;\n\nexport interface AppServerSocketLike {\n readyState: number;\n send(data: string): void;\n close(): void;\n addEventListener?(type: string, listener: (event: unknown) => void): void;\n removeEventListener?(type: string, listener: (event: unknown) => void): void;\n on?(type: string, listener: (event: unknown) => void): void;\n off?(type: string, listener: (event: unknown) => void): void;\n once?(type: string, listener: (event: unknown) => void): void;\n}\n\nexport interface AppServerSocketOptions {\n headers?: Record<string, string>;\n}\n\nexport type AppServerSocketConstructor = new (\n url: string,\n options?: AppServerSocketOptions,\n) => AppServerSocketLike;\n\nexport interface AppServerClientOptions {\n /** Base app-server URL, e.g. ws://127.0.0.1:4500 or http://127.0.0.1:4500. */\n url: string;\n /** Optional capability token sent as Authorization: Bearer <token>; requires a WebSocket implementation with header support. */\n authToken?: string;\n /** Optional WebSocket constructor for Node/tests. Browsers use globalThis.WebSocket. */\n WebSocket?: AppServerSocketConstructor;\n /** Default timeout for request_id-correlated control requests. */\n requestTimeoutMs?: number;\n}\n\nexport interface AppServerRequestOptions<TMessage extends WsProtocolMessage> {\n timeoutMs?: number;\n predicate?: (message: WsProtocolMessage) => message is TMessage;\n}\n\nexport type AppServerRequestCommand = Extract<\n WsProtocolCommand,\n { request_id?: string }\n>;\n\nexport type AppServerRequestCommandWithId = AppServerRequestCommand & {\n request_id: string;\n};\n\nexport type AppServerRequestBody = Record<string, unknown> & {\n request_id?: string;\n};\n\nexport interface AppServerRawRequestOptions<\n TResponse extends AppServerRawResponse,\n> {\n timeoutMs?: number;\n predicate: (message: unknown) => message is TResponse;\n}\n\ntype PendingRequest = {\n resolve: (message: WsProtocolMessage) => void;\n reject: (error: Error) => void;\n predicate?: (message: WsProtocolMessage) => boolean;\n timeout: ReturnType<typeof setTimeout>;\n};\n\nconst DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\nconst WEBSOCKET_OPEN_STATE = 1;\n\nfunction getGlobalWebSocket(): AppServerSocketConstructor | undefined {\n return (globalThis as { WebSocket?: AppServerSocketConstructor }).WebSocket;\n}\n\nfunction normalizeBaseUrl(url: string): URL {\n const parsed = new URL(url);\n if (parsed.protocol === \"http:\") parsed.protocol = \"ws:\";\n if (parsed.protocol === \"https:\") parsed.protocol = \"wss:\";\n if (parsed.protocol !== \"ws:\" && parsed.protocol !== \"wss:\") {\n throw new Error(`Unsupported app-server URL protocol: ${parsed.protocol}`);\n }\n if (!parsed.pathname || parsed.pathname === \"/\") {\n parsed.pathname = \"/ws\";\n }\n return parsed;\n}\n\nexport function resolveAppServerUrl(url: string): string {\n const parsed = normalizeBaseUrl(url);\n parsed.searchParams.delete(\"channel\");\n return parsed.toString();\n}\n\n/**\n * @deprecated App-server uses one bidirectional WebSocket. Both historical\n * channel names resolve to that same socket URL.\n */\nexport function resolveAppServerChannelUrl(\n url: string,\n _channel: AppServerChannel,\n): string {\n return resolveAppServerUrl(url);\n}\n\nfunction attachSocketListener(\n socket: AppServerSocketLike,\n type: string,\n listener: (event: unknown) => void,\n): () => void {\n if (socket.addEventListener && socket.removeEventListener) {\n socket.addEventListener(type, listener);\n return () => socket.removeEventListener?.(type, listener);\n }\n\n if (socket.on) {\n socket.on(type, listener);\n return () => socket.off?.(type, listener);\n }\n\n throw new Error(\"WebSocket implementation does not support event listeners\");\n}\n\nfunction onceSocketEvent(\n socket: AppServerSocketLike,\n type: string,\n listener: (event: unknown) => void,\n): () => void {\n if (socket.once) {\n socket.once(type, listener);\n return () => socket.off?.(type, listener);\n }\n\n let detach = () => {};\n detach = attachSocketListener(socket, type, (event) => {\n detach();\n listener(event);\n });\n return detach;\n}\n\nfunction waitForSocketOpen(socket: AppServerSocketLike): Promise<void> {\n if (socket.readyState === WEBSOCKET_OPEN_STATE) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n let detachOpen = () => {};\n let detachError = () => {};\n const cleanup = () => {\n detachOpen();\n detachError();\n };\n detachOpen = onceSocketEvent(socket, \"open\", () => {\n cleanup();\n resolve();\n });\n detachError = onceSocketEvent(socket, \"error\", (event) => {\n cleanup();\n reject(\n new Error(`App-server WebSocket failed to open: ${String(event)}`),\n );\n });\n });\n}\n\nfunction rawEventData(event: unknown): unknown {\n if (event && typeof event === \"object\" && \"data\" in event) {\n return (event as { data: unknown }).data;\n }\n return event;\n}\n\nfunction messageDataToString(data: unknown): string {\n const raw = rawEventData(data);\n if (typeof raw === \"string\") return raw;\n if (raw instanceof ArrayBuffer) {\n return new TextDecoder().decode(raw);\n }\n if (raw instanceof Uint8Array) {\n return new TextDecoder().decode(raw);\n }\n if (ArrayBuffer.isView(raw)) {\n return new TextDecoder().decode(\n new Uint8Array(raw.buffer as ArrayBuffer, raw.byteOffset, raw.byteLength),\n );\n }\n return String(raw);\n}\n\nfunction parseProtocolMessage(event: unknown): WsProtocolMessage {\n return JSON.parse(messageDataToString(event)) as WsProtocolMessage;\n}\n\nfunction appServerSocketOptions(\n authToken: string | undefined,\n): AppServerSocketOptions | undefined {\n if (authToken === undefined) {\n return undefined;\n }\n const token = authToken.trim();\n if (!token) {\n throw new Error(\"app-server auth token must not be empty\");\n }\n return { headers: { Authorization: `Bearer ${token}` } };\n}\n\nexport class AppServerClient {\n readonly socket: AppServerSocketLike;\n /** @deprecated Alias for socket. */\n readonly control: AppServerSocketLike;\n /** @deprecated Alias for socket; no second stream connection is created. */\n readonly stream: AppServerSocketLike;\n\n private readonly requestTimeoutMs: number;\n private readonly pending = new Map<string, PendingRequest>();\n private readonly messageHandlers = new Set<AppServerMessageHandler>();\n private readonly sendHandlers = new Set<AppServerSendHandler>();\n private readonly disconnectHandlers = new Set<AppServerDisconnectHandler>();\n private explicitlyClosed = false;\n private disconnectNotified = false;\n private nextRequestNumber = 0;\n\n constructor(options: AppServerClientOptions) {\n const WebSocket = options.WebSocket ?? getGlobalWebSocket();\n if (!WebSocket) {\n throw new Error(\"No WebSocket implementation available\");\n }\n\n this.requestTimeoutMs =\n options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n const socketOptions = appServerSocketOptions(options.authToken);\n this.socket = new WebSocket(\n resolveAppServerUrl(options.url),\n socketOptions,\n );\n this.control = this.socket;\n this.stream = this.socket;\n\n attachSocketListener(this.socket, \"message\", (event) => {\n this.handleMessage(event, \"control\");\n });\n attachSocketListener(this.socket, \"close\", (event) => {\n this.handleDisconnect(\"control\", event);\n });\n }\n\n async connect(): Promise<this> {\n await waitForSocketOpen(this.socket);\n return this;\n }\n\n close(): void {\n if (this.explicitlyClosed) return;\n this.explicitlyClosed = true;\n this.rejectAllPending(\"App-server client closed\");\n this.socket.close();\n }\n\n onMessage(handler: AppServerMessageHandler): () => void {\n this.messageHandlers.add(handler);\n return () => this.messageHandlers.delete(handler);\n }\n\n onSend(handler: AppServerSendHandler): () => void {\n this.sendHandlers.add(handler);\n return () => this.sendHandlers.delete(handler);\n }\n\n onDisconnect(handler: AppServerDisconnectHandler): () => void {\n this.disconnectHandlers.add(handler);\n return () => this.disconnectHandlers.delete(handler);\n }\n\n nextRequestId(prefix = \"req\"): string {\n this.nextRequestNumber += 1;\n return `${prefix}-${this.nextRequestNumber}`;\n }\n\n send(command: WsProtocolCommand): void {\n this.writeCommand(command);\n }\n\n private writeCommand(command: AppServerSendCommand): void {\n for (const handler of this.sendHandlers) {\n handler(command);\n }\n this.socket.send(JSON.stringify(command));\n }\n\n /**\n * Send a forward-compatible protocol command from a compatibility adapter.\n * Prefer the typed wrappers above this boundary for normal product code.\n */\n sendRaw(command: AppServerRawCommand): void {\n this.writeCommand(command);\n }\n\n /**\n * Request a forward-compatible response without mirroring the full protocol\n * union in a downstream compatibility adapter.\n */\n requestRaw<TResponse extends AppServerRawResponse>(\n command: AppServerRawCommand & { request_id: string },\n options: AppServerRawRequestOptions<TResponse>,\n ): Promise<TResponse> {\n const timeoutMs = options.timeoutMs ?? this.requestTimeoutMs;\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.pending.delete(command.request_id);\n reject(new Error(`Timed out waiting for ${command.request_id}`));\n }, timeoutMs);\n\n this.pending.set(command.request_id, {\n resolve: (message) => resolve(message as unknown as TResponse),\n reject,\n predicate: options.predicate,\n timeout,\n });\n\n try {\n this.sendRaw(command);\n } catch (error) {\n clearTimeout(timeout);\n this.pending.delete(command.request_id);\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n });\n }\n\n request<TMessage extends WsProtocolMessage = WsProtocolMessage>(\n command: AppServerRequestCommandWithId,\n options?: AppServerRequestOptions<TMessage>,\n ): Promise<TMessage>;\n\n request<\n TType extends AppServerRequestCommand[\"type\"],\n TMessage extends WsProtocolMessage = WsProtocolMessage,\n >(\n type: TType,\n body?: AppServerRequestBody,\n options?: AppServerRequestOptions<TMessage>,\n ): Promise<TMessage>;\n\n request<TMessage extends WsProtocolMessage = WsProtocolMessage>(\n commandOrType:\n | AppServerRequestCommandWithId\n | AppServerRequestCommand[\"type\"],\n bodyOrOptions:\n | AppServerRequestBody\n | AppServerRequestOptions<TMessage> = {},\n maybeOptions: AppServerRequestOptions<TMessage> = {},\n ): Promise<TMessage> {\n const isTypeRequest = typeof commandOrType === \"string\";\n const command = isTypeRequest\n ? ({\n type: commandOrType,\n request_id:\n (bodyOrOptions as { request_id?: string }).request_id ??\n this.nextRequestId(commandOrType),\n ...(bodyOrOptions as object),\n } as AppServerRequestCommandWithId)\n : commandOrType;\n const options = isTypeRequest\n ? maybeOptions\n : (bodyOrOptions as AppServerRequestOptions<TMessage>);\n const timeoutMs = options.timeoutMs ?? this.requestTimeoutMs;\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.pending.delete(command.request_id);\n reject(new Error(`Timed out waiting for ${command.request_id}`));\n }, timeoutMs);\n\n this.pending.set(command.request_id, {\n resolve: (message) => resolve(message as TMessage),\n reject,\n predicate: options.predicate,\n timeout,\n });\n\n try {\n this.send(command);\n } catch (error) {\n clearTimeout(timeout);\n this.pending.delete(command.request_id);\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n });\n }\n\n info(\n options: Omit<\n AppServerRequestOptions<AppServerInfoResponseMessage>,\n \"predicate\"\n > = {},\n ): Promise<AppServerInfoResponseMessage> {\n return this.request(\n {\n type: \"app_server_info\",\n request_id: this.nextRequestId(\"app-server-info\"),\n },\n {\n ...options,\n predicate: isAppServerInfoResponseMessage,\n },\n );\n }\n\n runtimeStart(\n command: Omit<RuntimeStartCommand, \"type\" | \"request_id\"> & {\n request_id?: string;\n },\n options: Omit<\n AppServerRequestOptions<RuntimeStartResponseMessage>,\n \"predicate\"\n > = {},\n ): Promise<RuntimeStartResponseMessage> {\n return this.request(\n {\n type: \"runtime_start\",\n request_id: command.request_id ?? this.nextRequestId(\"runtime-start\"),\n ...command,\n },\n {\n ...options,\n predicate: (message): message is RuntimeStartResponseMessage =>\n message.type === \"runtime_start_response\",\n },\n );\n }\n\n sync(\n command: Omit<SyncCommand, \"type\" | \"request_id\"> & { request_id?: string },\n options: Omit<\n AppServerRequestOptions<SyncResponseMessage>,\n \"predicate\"\n > = {},\n ): Promise<SyncResponseMessage> {\n return this.request(\n {\n type: \"sync\",\n request_id: command.request_id ?? this.nextRequestId(\"sync\"),\n ...command,\n },\n {\n ...options,\n predicate: (message): message is SyncResponseMessage =>\n message.type === \"sync_response\",\n },\n );\n }\n\n abort(\n command: Omit<AbortMessageCommand, \"type\" | \"request_id\"> & {\n request_id?: string;\n },\n options: Omit<\n AppServerRequestOptions<AbortMessageResponseMessage>,\n \"predicate\"\n > = {},\n ): Promise<AbortMessageResponseMessage> {\n return this.request(\n {\n type: \"abort_message\",\n request_id: command.request_id ?? this.nextRequestId(\"abort\"),\n ...command,\n },\n {\n ...options,\n predicate: (message): message is AbortMessageResponseMessage =>\n message.type === \"abort_message_response\",\n },\n );\n }\n\n conversationList(\n command: Omit<ConversationListCommand, \"type\" | \"request_id\"> & {\n request_id?: string;\n } = {},\n options: Omit<\n AppServerRequestOptions<ConversationListResponseMessage>,\n \"predicate\"\n > = {},\n ): Promise<ConversationListResponseMessage> {\n return this.request(\n {\n type: \"conversation_list\",\n request_id:\n command.request_id ?? this.nextRequestId(\"conversation-list\"),\n ...command,\n },\n {\n ...options,\n predicate: (message): message is ConversationListResponseMessage =>\n message.type === \"conversation_list_response\",\n },\n );\n }\n\n onExternalToolCall(handler: AppServerExternalToolCallHandler): () => void {\n return this.onMessage((message, channel) => {\n if (\n channel !== \"control\" ||\n message.type !== \"external_tool_call_request\"\n ) {\n return;\n }\n\n void Promise.resolve(handler(message))\n .then((result) => {\n this.send({\n type: \"external_tool_call_response\",\n request_id: message.request_id,\n result,\n });\n })\n .catch((error) => {\n this.send({\n type: \"external_tool_call_response\",\n request_id: message.request_id,\n error: error instanceof Error ? error.message : String(error),\n });\n });\n });\n }\n\n /**\n * Submit input to a runtime. Observe progress, tool activity, approvals, and\n * terminal lifecycle events through onMessage().\n */\n input(command: Omit<InputCommand, \"type\">): void {\n this.send({ type: \"input\", ...command });\n }\n\n /**\n * Submit an input and wait only until the listener accepts it into the\n * normal dispatch/queue path. This never waits for turn completion.\n */\n submitInput(\n command: Omit<InputCommand, \"type\" | \"request_id\"> & {\n request_id?: string;\n },\n options: Omit<\n AppServerRequestOptions<InputAcceptedResponseMessage>,\n \"predicate\"\n > = {},\n ): Promise<InputAcceptedResponseMessage> {\n return this.request(\n {\n type: \"input\",\n request_id: command.request_id ?? this.nextRequestId(\"input\"),\n ...command,\n },\n {\n ...options,\n predicate: (message): message is InputAcceptedResponseMessage =>\n message.type === \"input_accepted\",\n },\n );\n }\n\n private handleMessage(event: unknown, channel: AppServerChannel): void {\n const message = parseProtocolMessage(event);\n\n for (const handler of this.messageHandlers) {\n handler(message, channel);\n }\n\n const requestId =\n message && typeof message === \"object\" && \"request_id\" in message\n ? (message as { request_id?: unknown }).request_id\n : undefined;\n if (channel !== \"control\" || typeof requestId !== \"string\") {\n return;\n }\n\n const pending = this.pending.get(requestId);\n if (!pending || (pending.predicate && !pending.predicate(message))) {\n return;\n }\n\n clearTimeout(pending.timeout);\n this.pending.delete(requestId);\n pending.resolve(message);\n }\n\n private rejectAllPending(reason: string): void {\n for (const [requestId, pending] of this.pending) {\n clearTimeout(pending.timeout);\n this.pending.delete(requestId);\n pending.reject(new Error(reason));\n }\n }\n\n private handleDisconnect(channel: AppServerChannel, event: unknown): void {\n this.rejectAllPending(\"App-server socket closed\");\n if (this.explicitlyClosed || this.disconnectNotified) return;\n this.disconnectNotified = true;\n for (const handler of this.disconnectHandlers) {\n handler({ channel, event });\n }\n }\n}\n\nexport function createAppServerClient(\n options: AppServerClientOptions,\n): AppServerClient {\n return new AppServerClient(options);\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "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",
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "B358F49E34A71B3464756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
package/dist/channels-slack.js
CHANGED
|
@@ -169,6 +169,100 @@ function resolveSlackAppMentionIngressPolicy(params) {
|
|
|
169
169
|
isAgentThread: false
|
|
170
170
|
};
|
|
171
171
|
}
|
|
172
|
+
// src/channels/slack/message-action-contract.ts
|
|
173
|
+
async function sendSlackMessage(context) {
|
|
174
|
+
const { request, route, adapter, formatText } = context;
|
|
175
|
+
const text = request.message ?? "";
|
|
176
|
+
if (text.trim().length === 0 && !request.mediaPath) {
|
|
177
|
+
return "Error: Slack send requires message or media.";
|
|
178
|
+
}
|
|
179
|
+
const isDirect = route.chatType === "direct" || request.chatId.startsWith("D");
|
|
180
|
+
const formatted = formatText(text);
|
|
181
|
+
const result = await adapter.sendMessage({
|
|
182
|
+
channel: "slack",
|
|
183
|
+
accountId: route.accountId,
|
|
184
|
+
chatId: request.chatId,
|
|
185
|
+
text: formatted.text,
|
|
186
|
+
replyToMessageId: isDirect ? undefined : request.replyToMessageId,
|
|
187
|
+
threadId: isDirect ? request.threadId ?? route.threadId ?? null : request.replyToMessageId ? null : request.threadId ?? route.threadId ?? null,
|
|
188
|
+
mediaPath: request.mediaPath,
|
|
189
|
+
fileName: request.filename,
|
|
190
|
+
title: request.title,
|
|
191
|
+
parseMode: formatted.parseMode,
|
|
192
|
+
agentId: route.agentId,
|
|
193
|
+
conversationId: route.conversationId
|
|
194
|
+
});
|
|
195
|
+
return request.mediaPath ? `Attachment sent to slack (message_id: ${result.messageId})` : `Message sent to slack (message_id: ${result.messageId})`;
|
|
196
|
+
}
|
|
197
|
+
async function reactInSlack(context) {
|
|
198
|
+
const { request, route, adapter } = context;
|
|
199
|
+
if (!request.emoji?.trim())
|
|
200
|
+
return "Error: Slack react requires emoji.";
|
|
201
|
+
if (!request.messageId?.trim()) {
|
|
202
|
+
return "Error: Slack react requires messageId.";
|
|
203
|
+
}
|
|
204
|
+
const result = await adapter.sendMessage({
|
|
205
|
+
channel: "slack",
|
|
206
|
+
accountId: route.accountId,
|
|
207
|
+
chatId: request.chatId,
|
|
208
|
+
text: "",
|
|
209
|
+
targetMessageId: request.messageId,
|
|
210
|
+
reaction: request.emoji,
|
|
211
|
+
removeReaction: request.remove,
|
|
212
|
+
threadId: request.threadId ?? route.threadId ?? null
|
|
213
|
+
});
|
|
214
|
+
return request.remove ? `Reaction removed on slack (message_id: ${result.messageId})` : `Reaction added on slack (message_id: ${result.messageId})`;
|
|
215
|
+
}
|
|
216
|
+
function createSlackMessageActionAdapter(options = {}) {
|
|
217
|
+
const actions = [
|
|
218
|
+
"send",
|
|
219
|
+
...options.react ? ["react"] : [],
|
|
220
|
+
...options.uploadFile ? ["upload-file"] : [],
|
|
221
|
+
...options.downloadFile ? ["download-file"] : []
|
|
222
|
+
];
|
|
223
|
+
return {
|
|
224
|
+
describeMessageTool() {
|
|
225
|
+
const properties = {};
|
|
226
|
+
if (options.downloadFile) {
|
|
227
|
+
properties.attachmentId = {
|
|
228
|
+
type: "string",
|
|
229
|
+
description: "Slack attachment id for action='download-file'. Copy attachment_id from the channel notification."
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
if (options.react || options.downloadFile) {
|
|
233
|
+
properties.messageId = {
|
|
234
|
+
type: "string",
|
|
235
|
+
description: options.downloadFile ? "Target Slack message id for action='react', or the source message id containing attachmentId for action='download-file'." : "Target Slack message id for action='react'."
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
return {
|
|
239
|
+
actions: [...actions],
|
|
240
|
+
...Object.keys(properties).length > 0 ? { schema: { properties } } : {}
|
|
241
|
+
};
|
|
242
|
+
},
|
|
243
|
+
...options.resolveMessageTarget ? { resolveMessageTarget: options.resolveMessageTarget } : {},
|
|
244
|
+
async handleAction(context) {
|
|
245
|
+
switch (context.request.action) {
|
|
246
|
+
case "send":
|
|
247
|
+
return await sendSlackMessage(context);
|
|
248
|
+
case "upload-file":
|
|
249
|
+
if (!options.uploadFile) {
|
|
250
|
+
return 'Error: Action "upload-file" is not supported on slack.';
|
|
251
|
+
}
|
|
252
|
+
if (!context.request.mediaPath?.trim()) {
|
|
253
|
+
return "Error: Slack upload-file requires media.";
|
|
254
|
+
}
|
|
255
|
+
return await sendSlackMessage(context);
|
|
256
|
+
case "react":
|
|
257
|
+
return options.react ? await reactInSlack(context) : 'Error: Action "react" is not supported on slack.';
|
|
258
|
+
case "download-file":
|
|
259
|
+
return options.downloadFile ? await options.downloadFile(context) : 'Error: Action "download-file" is not supported on slack.';
|
|
260
|
+
default:
|
|
261
|
+
return `Error: Action "${context.request.action}" is not supported on slack.`;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
}
|
|
172
266
|
// src/channels/progress-formatting.ts
|
|
173
267
|
var ESCAPE_CODE = String.fromCharCode(27);
|
|
174
268
|
var ANSI_ESCAPE_RE = new RegExp(`${ESCAPE_CODE}\\[[0-9;?]*[ -/]*[@-~]`, "g");
|
|
@@ -621,9 +715,10 @@ export {
|
|
|
621
715
|
normalizeSlackReactionName,
|
|
622
716
|
isProcessableSlackInboundMessage,
|
|
623
717
|
createSlackStatusController,
|
|
718
|
+
createSlackMessageActionAdapter,
|
|
624
719
|
createSlackChannelSender,
|
|
625
720
|
SLACK_ASSISTANT_WORKING_STATUS,
|
|
626
721
|
SLACK_ASSISTANT_STARTUP_STATUS
|
|
627
722
|
};
|
|
628
723
|
|
|
629
|
-
//# debugId=
|
|
724
|
+
//# debugId=C5337FF53B1F7C8E64756E2164756E21
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/channels/slack/public-utils.ts", "../src/channels/slack/ingress-policy.ts", "../src/channels/progress-formatting.ts", "../src/channels/slack/progress.ts", "../src/agent/agent-id.ts", "../src/channels/lifecycle-error.ts", "../src/channels/slack/utils.ts", "../src/channels/slack/presentation.ts", "../src/channels/slack/sender.ts", "../src/channels/slack/status-controller.ts"],
|
|
3
|
+
"sources": ["../src/channels/slack/public-utils.ts", "../src/channels/slack/ingress-policy.ts", "../src/channels/slack/message-action-contract.ts", "../src/channels/progress-formatting.ts", "../src/channels/slack/progress.ts", "../src/agent/agent-id.ts", "../src/channels/lifecycle-error.ts", "../src/channels/slack/utils.ts", "../src/channels/slack/presentation.ts", "../src/channels/slack/sender.ts", "../src/channels/slack/status-controller.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type {\n ChannelTurnSource,\n OutboundChannelMessage,\n} from \"@/channels/types\";\n\nexport function isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\nexport function firstNonEmptyString(...values: unknown[]): string | undefined {\n return values.find(isNonEmptyString);\n}\n\nexport function normalizeSlackText(text: string): string {\n return text.replace(/^(?:\\s*<@[A-Z0-9]+>\\s*)+/, \"\").trim();\n}\n\nexport function resolveSlackChatType(chatId: string): \"direct\" | \"channel\" {\n return chatId.startsWith(\"D\") ? \"direct\" : \"channel\";\n}\n\nexport function resolveSlackSourceThreadTs(\n source: ChannelTurnSource,\n): string | undefined {\n if (\n source.chatType === \"direct\" ||\n resolveSlackChatType(source.chatId) === \"direct\"\n ) {\n return firstNonEmptyString(source.threadId);\n }\n return firstNonEmptyString(source.threadId, source.messageId);\n}\n\nexport function resolveSlackProgressThreadTs(\n source: ChannelTurnSource,\n): string | undefined {\n if (\n source.chatType === \"direct\" ||\n resolveSlackChatType(source.chatId) === \"direct\"\n ) {\n return firstNonEmptyString(source.threadId, source.messageId);\n }\n return resolveSlackSourceThreadTs(source);\n}\n\nexport function resolveSlackOutboundThreadTs(\n msg: Pick<OutboundChannelMessage, \"chatId\" | \"threadId\" | \"replyToMessageId\">,\n): string | undefined {\n if (resolveSlackChatType(msg.chatId) === \"direct\") {\n return firstNonEmptyString(msg.threadId);\n }\n return firstNonEmptyString(msg.threadId, msg.replyToMessageId);\n}\n\nexport function normalizeSlackReactionName(value: string): string {\n return value.trim().replace(/^:+|:+$/g, \"\");\n}\n\nexport function slackTimestampToMillis(value: string): number {\n return Math.round(Number.parseFloat(value) * 1000);\n}\n",
|
|
6
6
|
"import {\n firstNonEmptyString,\n isNonEmptyString,\n normalizeSlackText,\n resolveSlackChatType,\n} from \"./public-utils\";\n\nconst IGNORED_SLACK_MESSAGE_SUBTYPES = new Set([\n \"assistant_app_thread\",\n \"channel_archive\",\n \"channel_convert_to_private\",\n \"channel_convert_to_public\",\n \"channel_join\",\n \"channel_leave\",\n \"channel_name\",\n \"channel_posting_permissions\",\n \"channel_purpose\",\n \"channel_topic\",\n \"channel_unarchive\",\n \"document_mention\",\n \"ekm_access_denied\",\n \"file_comment\",\n \"group_archive\",\n \"group_join\",\n \"group_leave\",\n \"group_name\",\n \"group_purpose\",\n \"group_topic\",\n \"group_unarchive\",\n \"pinned_item\",\n \"reminder_add\",\n \"unpinned_item\",\n]);\n\nconst WRAPPER_SLACK_MESSAGE_SUBTYPES = new Set([\n \"message_changed\",\n \"message_deleted\",\n \"message_replied\",\n]);\n\nexport interface SlackInboundMessageEventLike {\n channel?: unknown;\n user?: unknown;\n bot_id?: unknown;\n ts?: unknown;\n text?: unknown;\n thread_ts?: unknown;\n subtype?: unknown;\n hidden?: boolean;\n message?: unknown;\n}\n\nexport interface SlackAppMentionEventLike {\n channel?: unknown;\n user?: unknown;\n bot_id?: unknown;\n ts?: unknown;\n text?: unknown;\n thread_ts?: unknown;\n}\n\nexport interface ResolveSlackMessageIngressPolicyParams {\n message: SlackInboundMessageEventLike;\n botUserId?: string | null;\n isAgentThread?: boolean;\n}\n\nexport interface ResolveSlackAppMentionIngressPolicyParams {\n event: SlackAppMentionEventLike;\n}\n\nexport interface SlackMessageIngressAccepted {\n shouldRoute: true;\n channelId: string;\n senderId: string;\n senderUserId?: string;\n senderBotId?: string;\n messageId: string;\n threadId: string | null;\n chatType: \"direct\" | \"channel\";\n text: string;\n rawText: string;\n wasMentioned: boolean;\n effectiveMention: boolean;\n isAgentThread: boolean;\n}\n\nexport interface SlackAppMentionIngressAccepted {\n shouldRoute: true;\n channelId: string;\n senderId: string;\n senderUserId?: string;\n senderBotId?: string;\n messageId: string;\n threadId: string;\n chatType: \"channel\";\n text: string;\n rawText: string;\n wasMentioned: true;\n effectiveMention: true;\n isAgentThread: false;\n}\n\nexport type SlackIngressIgnoreReason =\n | \"missing_channel\"\n | \"missing_sender\"\n | \"missing_timestamp\"\n | \"hidden_message\"\n | \"ignored_subtype\"\n | \"wrapper_message\"\n | \"top_level_channel_message\";\n\nexport interface SlackIngressIgnored {\n shouldRoute: false;\n reason: SlackIngressIgnoreReason;\n}\n\nexport type SlackMessageIngressPolicy =\n | SlackMessageIngressAccepted\n | SlackIngressIgnored;\n\nexport type SlackAppMentionIngressPolicy =\n | SlackAppMentionIngressAccepted\n | SlackIngressIgnored;\n\nfunction hasRecordValue(value: unknown): boolean {\n return value !== null && typeof value === \"object\";\n}\n\nfunction hasSlackMention(\n text: string,\n userId: string | null | undefined,\n): boolean {\n return (\n isNonEmptyString(text) &&\n isNonEmptyString(userId) &&\n (text.includes(`<@${userId}>`) || text.includes(`<@${userId}|`))\n );\n}\n\nfunction isBotAuthoredMessage(message: SlackInboundMessageEventLike): boolean {\n return isNonEmptyString(message.bot_id) || message.subtype === \"bot_message\";\n}\n\nfunction resolveMessageSubtypeIgnoreReason(\n message: SlackInboundMessageEventLike,\n): SlackIngressIgnoreReason | null {\n const subtype = isNonEmptyString(message.subtype) ? message.subtype : null;\n if (!subtype) {\n return null;\n }\n if (IGNORED_SLACK_MESSAGE_SUBTYPES.has(subtype)) {\n return \"ignored_subtype\";\n }\n if (\n WRAPPER_SLACK_MESSAGE_SUBTYPES.has(subtype) &&\n hasRecordValue(message.message)\n ) {\n return \"wrapper_message\";\n }\n return null;\n}\n\nexport function isProcessableSlackInboundMessage(\n message: SlackInboundMessageEventLike,\n): boolean {\n return resolveSlackMessageIngressPolicy({ message }).shouldRoute;\n}\n\nexport function shouldSkipSlackMessageByLastSeen(params: {\n lastSeenMessageTs?: string | null;\n messageTs: string;\n}): boolean {\n return Boolean(\n params.lastSeenMessageTs && params.lastSeenMessageTs >= params.messageTs,\n );\n}\n\nexport function resolveSlackMessageIngressPolicy(\n params: ResolveSlackMessageIngressPolicyParams,\n): SlackMessageIngressPolicy {\n const { message } = params;\n if (!isNonEmptyString(message.channel)) {\n return { shouldRoute: false, reason: \"missing_channel\" };\n }\n const senderId = firstNonEmptyString(message.user, message.bot_id);\n if (!senderId) {\n return { shouldRoute: false, reason: \"missing_sender\" };\n }\n if (!isNonEmptyString(message.ts)) {\n return { shouldRoute: false, reason: \"missing_timestamp\" };\n }\n if (message.hidden === true) {\n return { shouldRoute: false, reason: \"hidden_message\" };\n }\n\n const subtypeIgnoreReason = resolveMessageSubtypeIgnoreReason(message);\n if (subtypeIgnoreReason) {\n return { shouldRoute: false, reason: subtypeIgnoreReason };\n }\n\n const chatType = resolveSlackChatType(message.channel);\n const threadId =\n chatType === \"direct\"\n ? (firstNonEmptyString(message.thread_ts) ?? null)\n : (firstNonEmptyString(message.thread_ts, message.ts) ?? null);\n\n if (chatType === \"channel\" && !isNonEmptyString(message.thread_ts)) {\n return { shouldRoute: false, reason: \"top_level_channel_message\" };\n }\n\n const rawText = isNonEmptyString(message.text) ? message.text : \"\";\n const wasMentioned = hasSlackMention(rawText, params.botUserId);\n const isAgentThread = params.isAgentThread === true;\n const effectiveMention = isBotAuthoredMessage(message)\n ? wasMentioned\n : wasMentioned || isAgentThread;\n\n return {\n shouldRoute: true,\n channelId: message.channel,\n senderId,\n ...(isNonEmptyString(message.user) ? { senderUserId: message.user } : {}),\n ...(isNonEmptyString(message.bot_id)\n ? { senderBotId: message.bot_id }\n : {}),\n messageId: message.ts,\n threadId,\n chatType,\n text: wasMentioned ? normalizeSlackText(rawText) : rawText,\n rawText,\n wasMentioned,\n effectiveMention,\n isAgentThread,\n };\n}\n\nexport function resolveSlackAppMentionIngressPolicy(\n params: ResolveSlackAppMentionIngressPolicyParams,\n): SlackAppMentionIngressPolicy {\n const { event } = params;\n if (!isNonEmptyString(event.channel)) {\n return { shouldRoute: false, reason: \"missing_channel\" };\n }\n const senderId = firstNonEmptyString(event.user, event.bot_id);\n if (!senderId) {\n return { shouldRoute: false, reason: \"missing_sender\" };\n }\n if (!isNonEmptyString(event.ts)) {\n return { shouldRoute: false, reason: \"missing_timestamp\" };\n }\n\n const rawText = isNonEmptyString(event.text) ? event.text : \"\";\n return {\n shouldRoute: true,\n channelId: event.channel,\n senderId,\n ...(isNonEmptyString(event.user) ? { senderUserId: event.user } : {}),\n ...(isNonEmptyString(event.bot_id) ? { senderBotId: event.bot_id } : {}),\n messageId: event.ts,\n threadId: firstNonEmptyString(event.thread_ts, event.ts) ?? event.ts,\n chatType: \"channel\",\n text: normalizeSlackText(rawText),\n rawText,\n wasMentioned: true,\n effectiveMention: true,\n isAgentThread: false,\n };\n}\n",
|
|
7
|
+
"import type {\n ChannelMessageActionAdapter,\n ChannelMessageActionContext,\n} from \"@/channels/plugin-types\";\n\nexport interface CreateSlackMessageActionAdapterOptions {\n /** Expose reaction actions when the injected transport supports them. */\n react?: boolean;\n /** Expose local-path uploads when the injected transport can read them. */\n uploadFile?: boolean;\n /** Host-owned proactive target resolver, when proactive sends are supported. */\n resolveMessageTarget?: ChannelMessageActionAdapter[\"resolveMessageTarget\"];\n /** Host-owned attachment materialization, when download-file is supported. */\n downloadFile?: (context: ChannelMessageActionContext) => Promise<string>;\n}\n\nasync function sendSlackMessage(\n context: ChannelMessageActionContext,\n): Promise<string> {\n const { request, route, adapter, formatText } = context;\n const text = request.message ?? \"\";\n if (text.trim().length === 0 && !request.mediaPath) {\n return \"Error: Slack send requires message or media.\";\n }\n\n const isDirect =\n route.chatType === \"direct\" || request.chatId.startsWith(\"D\");\n const formatted = formatText(text);\n const result = await adapter.sendMessage({\n channel: \"slack\",\n accountId: route.accountId,\n chatId: request.chatId,\n text: formatted.text,\n replyToMessageId: isDirect ? undefined : request.replyToMessageId,\n threadId: isDirect\n ? (request.threadId ?? route.threadId ?? null)\n : request.replyToMessageId\n ? null\n : (request.threadId ?? route.threadId ?? null),\n mediaPath: request.mediaPath,\n fileName: request.filename,\n title: request.title,\n parseMode: formatted.parseMode,\n agentId: route.agentId,\n conversationId: route.conversationId,\n });\n return request.mediaPath\n ? `Attachment sent to slack (message_id: ${result.messageId})`\n : `Message sent to slack (message_id: ${result.messageId})`;\n}\n\nasync function reactInSlack(\n context: ChannelMessageActionContext,\n): Promise<string> {\n const { request, route, adapter } = context;\n if (!request.emoji?.trim()) return \"Error: Slack react requires emoji.\";\n if (!request.messageId?.trim()) {\n return \"Error: Slack react requires messageId.\";\n }\n\n const result = await adapter.sendMessage({\n channel: \"slack\",\n accountId: route.accountId,\n chatId: request.chatId,\n text: \"\",\n targetMessageId: request.messageId,\n reaction: request.emoji,\n removeReaction: request.remove,\n threadId: request.threadId ?? route.threadId ?? null,\n });\n return request.remove\n ? `Reaction removed on slack (message_id: ${result.messageId})`\n : `Reaction added on slack (message_id: ${result.messageId})`;\n}\n\n/**\n * Build canonical Slack MessageChannel actions around a host-owned transport.\n * Capabilities are explicit so remote gateways never advertise local-path or\n * attachment behavior they cannot execute.\n */\nexport function createSlackMessageActionAdapter(\n options: CreateSlackMessageActionAdapterOptions = {},\n): ChannelMessageActionAdapter {\n const actions = [\n \"send\",\n ...(options.react ? [\"react\"] : []),\n ...(options.uploadFile ? [\"upload-file\"] : []),\n ...(options.downloadFile ? [\"download-file\"] : []),\n ];\n return {\n describeMessageTool() {\n const properties: Record<string, unknown> = {};\n if (options.downloadFile) {\n properties.attachmentId = {\n type: \"string\",\n description:\n \"Slack attachment id for action='download-file'. Copy attachment_id from the channel notification.\",\n };\n }\n if (options.react || options.downloadFile) {\n properties.messageId = {\n type: \"string\",\n description: options.downloadFile\n ? \"Target Slack message id for action='react', or the source message id containing attachmentId for action='download-file'.\"\n : \"Target Slack message id for action='react'.\",\n };\n }\n return {\n actions: [...actions],\n ...(Object.keys(properties).length > 0\n ? { schema: { properties } }\n : {}),\n };\n },\n ...(options.resolveMessageTarget\n ? { resolveMessageTarget: options.resolveMessageTarget }\n : {}),\n async handleAction(context) {\n switch (context.request.action) {\n case \"send\":\n return await sendSlackMessage(context);\n case \"upload-file\":\n if (!options.uploadFile) {\n return 'Error: Action \"upload-file\" is not supported on slack.';\n }\n if (!context.request.mediaPath?.trim()) {\n return \"Error: Slack upload-file requires media.\";\n }\n return await sendSlackMessage(context);\n case \"react\":\n return options.react\n ? await reactInSlack(context)\n : 'Error: Action \"react\" is not supported on slack.';\n case \"download-file\":\n return options.downloadFile\n ? await options.downloadFile(context)\n : 'Error: Action \"download-file\" is not supported on slack.';\n default:\n return `Error: Action \"${context.request.action}\" is not supported on slack.`;\n }\n },\n };\n}\n",
|
|
7
8
|
"const MAX_PROGRESS_TEXT_LENGTH = 140;\nexport const MAX_PROGRESS_DETAILS_LENGTH = 180;\nconst MAX_SHELL_PROGRESS_DETAILS_LENGTH = 64;\nconst MAX_SUBAGENT_PROGRESS_DETAILS_LENGTH = 180;\nconst ESCAPE_CODE = String.fromCharCode(27);\nconst ANSI_ESCAPE_RE = new RegExp(`${ESCAPE_CODE}\\\\[[0-9;?]*[ -/]*[@-~]`, \"g\");\nconst SECRET_ASSIGNMENT_RE =\n /\\b([A-Z0-9_]*(?:TOKEN|SECRET|PASSWORD|PASS|API[_-]?KEY|ACCESS[_-]?KEY)[A-Z0-9_]*)\\s*=\\s*(\"[^\"]*\"|'[^']*'|\\S+)/gi;\nconst SECRET_JSON_RE =\n /([\"']?(?:token|secret|password|api[_-]?key|access[_-]?key)[\"']?\\s*[:=]\\s*)(\"[^\"]*\"|'[^']*'|\\S+)/gi;\n\nfunction isTaskTool(name: string): boolean {\n return (\n name === \"Task\" || name === \"task\" || name === \"Agent\" || name === \"agent\"\n );\n}\n\nfunction isShellTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return (\n normalized === \"bash\" ||\n normalized === \"exec_command\" ||\n normalized === \"shell_command\" ||\n normalized === \"shell\" ||\n normalized === \"runshellcommand\"\n );\n}\n\nfunction isWebSearchTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return normalized === \"web_search\" || normalized === \"websearch\";\n}\n\nfunction isSearchTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return (\n normalized === \"grep\" ||\n normalized === \"grep_files\" ||\n normalized === \"grepfiles\" ||\n normalized === \"search_file_content\" ||\n normalized === \"searchfilecontent\"\n );\n}\n\nfunction isGlobTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return normalized === \"glob\" || normalized === \"glob_gemini\";\n}\n\nfunction isFileReadTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return (\n normalized === \"read\" ||\n normalized === \"read_file\" ||\n normalized === \"readfile\" ||\n normalized === \"read_file_gemini\" ||\n normalized === \"readfilegemini\"\n );\n}\n\nfunction isFileWriteTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return (\n normalized === \"write\" ||\n normalized === \"write_file\" ||\n normalized === \"writefile\" ||\n normalized === \"write_file_gemini\" ||\n normalized === \"writefilegemini\"\n );\n}\n\nfunction isFileEditTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return (\n normalized === \"edit\" ||\n normalized === \"multi_edit\" ||\n normalized === \"multiedit\" ||\n normalized === \"replace\" ||\n normalized === \"apply_patch\" ||\n normalized === \"applypatch\"\n );\n}\n\nfunction getPathBaseName(filePath: string): string {\n return filePath.split(/[\\\\/]/).filter(Boolean).pop() ?? filePath;\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\"\n ? (value as Record<string, unknown>)\n : null;\n}\n\nexport function firstNonEmptyString(...values: unknown[]): string | undefined {\n for (const value of values) {\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value;\n }\n }\n return undefined;\n}\n\nexport function truncateChannelProgressText(\n value: string,\n maxLength: number,\n marker = \"...\",\n): string {\n if (value.length <= maxLength) {\n return value;\n }\n if (maxLength <= marker.length) {\n return marker.slice(0, Math.max(0, maxLength));\n }\n return `${value.slice(0, maxLength - marker.length).trimEnd()}${marker}`;\n}\n\nfunction replaceControlCharacters(value: string): string {\n let result = \"\";\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index] ?? \"\";\n const code = character.charCodeAt(0);\n result +=\n code <= 8 ||\n code === 11 ||\n code === 12 ||\n (code >= 14 && code <= 31) ||\n code === 127\n ? \" \"\n : character;\n }\n return result;\n}\n\n/**\n * Shared sanitization core for channel-facing progress text: strips ANSI\n * escapes and control characters, redacts secret-looking assignments, and\n * neutralizes platform mentions. Platform adapters layer their own escaping\n * (and truncation marker) on top of this instead of maintaining parallel\n * redaction rules.\n */\nexport function sanitizeChannelProgressCore(value: unknown): string {\n const raw = typeof value === \"string\" ? value : String(value ?? \"\");\n const redacted = raw\n .replace(ANSI_ESCAPE_RE, \"\")\n .replace(SECRET_ASSIGNMENT_RE, \"$1=[redacted]\")\n .replace(SECRET_JSON_RE, \"$1[redacted]\");\n return replaceControlCharacters(redacted)\n .replace(/[\\r\\n\\t]+/g, \" \")\n .replace(/@(?=channel|here|everyone|[A-Za-z0-9._-]+)/gi, \"@\\u200b\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nexport function sanitizeChannelProgressText(\n value: unknown,\n maxLength: number = MAX_PROGRESS_TEXT_LENGTH,\n): string {\n return truncateChannelProgressText(\n sanitizeChannelProgressCore(value),\n maxLength,\n );\n}\n\nexport function sanitizeChannelProgressIdentifier(\n value: unknown,\n fallback: string,\n): string {\n const text = sanitizeChannelProgressText(value, 64);\n if (!text) {\n return fallback;\n }\n const cleaned = text.replace(/[^A-Za-z0-9_.:/ -]/g, \"\").trim();\n return cleaned || fallback;\n}\n\nfunction summarizeShellCommand(command: string): string {\n const normalized = sanitizeChannelProgressText(command, 10_000);\n if (!normalized) {\n return \"\";\n }\n\n // Preview the first command segment (or two short ones) and drop pipelines\n // so multi-step shell invocations stay readable at Slack-row lengths.\n const segments = normalized\n .split(/\\s*;\\s*/)\n .map((segment) => segment.trim())\n .filter(Boolean);\n const firstTwoSegments = segments.slice(0, 2).join(\"; \");\n const previewSource =\n firstTwoSegments.length > 0 && firstTwoSegments.length <= 70\n ? firstTwoSegments\n : (segments[0] ?? normalized);\n const withoutPipeline = previewSource.split(/\\s*\\|\\s*/)[0] ?? previewSource;\n\n return sanitizeChannelProgressText(\n withoutPipeline.trim() || normalized,\n MAX_SHELL_PROGRESS_DETAILS_LENGTH,\n );\n}\n\ntype SkillDescriptionLookup =\n | ReadonlyMap<string, string>\n | Readonly<Record<string, string | undefined>>;\n\nexport type ChannelTurnProgressBuilderOptions = {\n skillDescriptionsByName?: SkillDescriptionLookup;\n};\n\nexport type ToolCallSummary = {\n id?: string;\n name?: string;\n argumentsText?: string;\n};\n\nfunction getSkillNameFromArguments(\n parsedArguments: Record<string, unknown>,\n): string | undefined {\n return firstNonEmptyString(parsedArguments.skill, parsedArguments.skillName);\n}\n\nfunction getFragmentedSkillName(summary: ToolCallSummary): string | undefined {\n const skillMatch = summary.argumentsText?.match(\n /\"(?:skill|skillName)\"\\s*:\\s*\"([^\"]+)\"/,\n );\n return skillMatch?.[1];\n}\n\nfunction resolveSkillDescription(\n skillName: string | undefined,\n options: ChannelTurnProgressBuilderOptions | undefined,\n): string | undefined {\n const lookup = options?.skillDescriptionsByName;\n if (!skillName || !lookup) {\n return undefined;\n }\n if (\"get\" in lookup && typeof lookup.get === \"function\") {\n return firstNonEmptyString(lookup.get(skillName));\n }\n return firstNonEmptyString(\n (lookup as Readonly<Record<string, string | undefined>>)[skillName],\n );\n}\n\nfunction formatSkillProgressTitleFromName(\n skillName: string | undefined,\n): string | undefined {\n const sanitized = sanitizeChannelProgressText(\n skillName,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized ? `Skill: ${sanitized}` : undefined;\n}\n\nfunction formatShellProgressDetailsFromArguments(\n parsedArguments: Record<string, unknown>,\n): string | undefined {\n const description = firstNonEmptyString(parsedArguments.description);\n if (description) {\n return (\n sanitizeChannelProgressText(description, MAX_PROGRESS_DETAILS_LENGTH) ||\n undefined\n );\n }\n\n const commandPreview = firstNonEmptyString(\n parsedArguments.command,\n parsedArguments.cmd,\n );\n return summarizeShellCommand(commandPreview ?? \"\") || undefined;\n}\n\nfunction formatFragmentedShellProgressDetails(\n summary: ToolCallSummary,\n): string | undefined {\n const descriptionMatch = summary.argumentsText?.match(\n /\"description\"\\s*:\\s*\"([^\"]+)\"/,\n );\n if (descriptionMatch?.[1]) {\n return (\n sanitizeChannelProgressText(\n descriptionMatch[1],\n MAX_PROGRESS_DETAILS_LENGTH,\n ) || undefined\n );\n }\n\n // Do not expose command previews from incomplete shell-tool JSON. Slack's\n // task stream appends, rather than replaces, changed details for the same\n // task id; sending a provisional command before the streamed description\n // arrives leaves both strings glued together in the preview.\n return undefined;\n}\n\nfunction formatSubagentProgressDetailsFromArguments(\n parsedArguments: Record<string, unknown>,\n): string | undefined {\n const preview = firstNonEmptyString(\n parsedArguments.prompt,\n parsedArguments.description,\n parsedArguments.subject,\n );\n const sanitized = sanitizeChannelProgressText(\n preview,\n MAX_SUBAGENT_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n}\n\nfunction formatFragmentedSubagentProgressDetails(\n summary: ToolCallSummary,\n): string | undefined {\n const previewMatch = summary.argumentsText?.match(\n /\"(?:prompt|description|subject)\"\\s*:\\s*\"([^\"]+)\"/,\n );\n if (!previewMatch?.[1]) {\n return undefined;\n }\n const sanitized = sanitizeChannelProgressText(\n previewMatch[1],\n MAX_SUBAGENT_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n}\n\nexport type ToolReturnSummary = {\n summary: ToolCallSummary;\n status: \"completed\" | \"error\";\n errorDetails?: string;\n};\n\nexport function parseToolArguments(\n value: string | undefined,\n): Record<string, unknown> | null {\n if (!value) {\n return null;\n }\n try {\n return asRecord(JSON.parse(value));\n } catch {\n return null;\n }\n}\n\nfunction isFetchWebpageToolName(name: string | undefined): boolean {\n return (\n name === \"fetch_webpage\" ||\n name === \"FetchWebpage\" ||\n name === \"fetchWebpage\"\n );\n}\n\nexport function isSkillToolName(name: string | undefined): boolean {\n if (!name) {\n return false;\n }\n const normalized = name.includes(\".\")\n ? name.slice(name.lastIndexOf(\".\") + 1)\n : name;\n return normalized === \"Skill\" || normalized === \"skill\";\n}\n\nfunction isFilePathToolName(name: string): boolean {\n return isFileReadTool(name) || isFileWriteTool(name) || isFileEditTool(name);\n}\n\nfunction getFileToolKind(name: string): \"read\" | \"write\" | \"update\" | null {\n if (isFileReadTool(name)) {\n return \"read\";\n }\n if (isFileWriteTool(name)) {\n return \"write\";\n }\n if (isFileEditTool(name)) {\n return \"update\";\n }\n return null;\n}\n\nfunction countProgressLines(value: string | undefined): number {\n return value ? value.split(\"\\n\").length : 0;\n}\n\ntype LineChangeSummary = {\n additions?: number;\n deletions?: number;\n};\n\nfunction formatLineChangeSummary(summary: LineChangeSummary | null): string {\n if (!summary) {\n return \"\";\n }\n const parts: string[] = [];\n if (summary.additions !== undefined) {\n parts.push(`+${summary.additions}`);\n }\n if (summary.deletions !== undefined) {\n parts.push(`-${summary.deletions}`);\n }\n return parts.length > 0 ? ` ${parts.join(\" \")}` : \"\";\n}\n\nfunction extractFilePathFromArguments(\n parsedArguments: Record<string, unknown>,\n): string | undefined {\n return firstNonEmptyString(\n parsedArguments.file_path,\n parsedArguments.filePath,\n parsedArguments.path,\n );\n}\n\nfunction formatProgressFileName(\n filePath: string | undefined,\n): string | undefined {\n if (!filePath) {\n return undefined;\n }\n const fileName = getPathBaseName(filePath) || filePath;\n return (\n sanitizeChannelProgressText(fileName, MAX_PROGRESS_DETAILS_LENGTH) ||\n undefined\n );\n}\n\nfunction getEditLineChangeSummary(\n parsedArguments: Record<string, unknown>,\n): LineChangeSummary | null {\n const oldString = firstNonEmptyString(parsedArguments.old_string);\n const newString = firstNonEmptyString(parsedArguments.new_string);\n if (oldString === undefined || newString === undefined) {\n return null;\n }\n return {\n additions: countProgressLines(newString),\n deletions: countProgressLines(oldString),\n };\n}\n\nfunction getMultiEditLineChangeSummary(\n parsedArguments: Record<string, unknown>,\n): LineChangeSummary | null {\n if (!Array.isArray(parsedArguments.edits)) {\n return null;\n }\n let additions = 0;\n let deletions = 0;\n let counted = false;\n for (const edit of parsedArguments.edits) {\n const record = asRecord(edit);\n if (!record) {\n continue;\n }\n const oldString = firstNonEmptyString(record.old_string);\n const newString = firstNonEmptyString(record.new_string);\n if (oldString === undefined || newString === undefined) {\n continue;\n }\n additions += countProgressLines(newString);\n deletions += countProgressLines(oldString);\n counted = true;\n }\n return counted ? { additions, deletions } : null;\n}\n\nfunction getWriteLineChangeSummary(\n parsedArguments: Record<string, unknown>,\n): LineChangeSummary | null {\n const content = firstNonEmptyString(parsedArguments.content);\n if (content === undefined) {\n return null;\n }\n return {\n additions: countProgressLines(content),\n };\n}\n\nfunction getFileLineChangeSummary(\n name: string,\n parsedArguments: Record<string, unknown>,\n): LineChangeSummary | null {\n if (isFileWriteTool(name)) {\n return getWriteLineChangeSummary(parsedArguments);\n }\n if (name === \"MultiEdit\" || name === \"multi_edit\") {\n return getMultiEditLineChangeSummary(parsedArguments);\n }\n if (isFileEditTool(name)) {\n return getEditLineChangeSummary(parsedArguments);\n }\n return null;\n}\n\nfunction getFileToolVerb(\n kind: \"read\" | \"write\" | \"update\",\n status: \"started\" | \"completed\" | \"error\",\n): string {\n if (status === \"error\") {\n if (kind === \"read\") {\n return \"Tried to read\";\n }\n if (kind === \"write\") {\n return \"Tried to write\";\n }\n return \"Tried to update\";\n }\n if (status === \"started\") {\n if (kind === \"read\") {\n return \"Reading\";\n }\n if (kind === \"write\") {\n return \"Writing\";\n }\n return \"Updating\";\n }\n if (kind === \"read\") {\n return \"Read\";\n }\n if (kind === \"write\") {\n return \"Wrote\";\n }\n return \"Updated\";\n}\n\nfunction formatFileToolProgressTitle(\n name: string,\n parsedArguments: Record<string, unknown>,\n status: \"started\" | \"completed\" | \"error\",\n): string | undefined {\n const kind = getFileToolKind(name);\n if (!kind) {\n return undefined;\n }\n const fileName = formatProgressFileName(\n extractFilePathFromArguments(parsedArguments),\n );\n if (!fileName) {\n return undefined;\n }\n const stats =\n status === \"completed\"\n ? formatLineChangeSummary(getFileLineChangeSummary(name, parsedArguments))\n : \"\";\n return `${getFileToolVerb(kind, status)} ${fileName}${stats}`;\n}\n\nfunction formatFragmentedFileToolProgressTitle(\n summary: ToolCallSummary,\n status: \"started\" | \"completed\" | \"error\",\n): string | undefined {\n if (!summary.name || !summary.argumentsText) {\n return undefined;\n }\n const kind = getFileToolKind(summary.name);\n if (!kind) {\n return undefined;\n }\n const filePathMatch = summary.argumentsText.match(\n /\"(?:file_path|filePath|path)\"\\s*:\\s*\"([^\"]+)\"/,\n );\n const fileName = formatProgressFileName(filePathMatch?.[1]);\n if (!fileName) {\n return undefined;\n }\n return `${getFileToolVerb(kind, status)} ${fileName}`;\n}\n\nexport function formatToolProgressTitle(\n summary: ToolCallSummary,\n status: \"started\" | \"completed\" | \"error\",\n): string | undefined {\n if (!summary.name || !summary.argumentsText) {\n return undefined;\n }\n\n const parsedArguments = parseToolArguments(summary.argumentsText);\n if (parsedArguments) {\n if (isSkillToolName(summary.name)) {\n return formatSkillProgressTitleFromName(\n getSkillNameFromArguments(parsedArguments),\n );\n }\n if (isFilePathToolName(summary.name)) {\n return formatFileToolProgressTitle(summary.name, parsedArguments, status);\n }\n return undefined;\n }\n\n if (isSkillToolName(summary.name)) {\n return formatSkillProgressTitleFromName(getFragmentedSkillName(summary));\n }\n if (isFilePathToolName(summary.name)) {\n return formatFragmentedFileToolProgressTitle(summary, status);\n }\n return undefined;\n}\n\nfunction formatSkillProgressDetailsFromArguments(\n parsedArguments: Record<string, unknown>,\n options: ChannelTurnProgressBuilderOptions | undefined,\n): string | undefined {\n const skillName = getSkillNameFromArguments(parsedArguments);\n const detail = resolveSkillDescription(skillName, options) ?? skillName;\n const sanitized = sanitizeChannelProgressText(\n detail,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n}\n\nfunction formatFragmentedSkillProgressDetails(\n summary: ToolCallSummary,\n options: ChannelTurnProgressBuilderOptions | undefined,\n): string | undefined {\n const skillName = getFragmentedSkillName(summary);\n const detail = resolveSkillDescription(skillName, options) ?? skillName;\n const sanitized = sanitizeChannelProgressText(\n detail,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n}\n\nexport function formatToolProgressDetails(\n summary: ToolCallSummary,\n options?: ChannelTurnProgressBuilderOptions,\n): string | undefined {\n if (!summary.name || !summary.argumentsText) {\n return undefined;\n }\n\n // Try JSON parse first (complete arguments)\n const parsedArguments = parseToolArguments(summary.argumentsText);\n if (parsedArguments) {\n if (isWebSearchTool(summary.name)) {\n const query = firstNonEmptyString(parsedArguments.query);\n const sanitized = sanitizeChannelProgressText(\n query,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n }\n\n if (isFetchWebpageToolName(summary.name)) {\n const url = firstNonEmptyString(parsedArguments.url);\n const sanitized = sanitizeChannelProgressText(\n url,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n }\n\n if (isSkillToolName(summary.name)) {\n return formatSkillProgressDetailsFromArguments(parsedArguments, options);\n }\n\n if (isTaskTool(summary.name)) {\n return formatSubagentProgressDetailsFromArguments(parsedArguments);\n }\n\n if (isShellTool(summary.name)) {\n return formatShellProgressDetailsFromArguments(parsedArguments);\n }\n\n if (isFilePathToolName(summary.name)) {\n const filePath = firstNonEmptyString(\n parsedArguments.file_path,\n parsedArguments.filePath,\n parsedArguments.path,\n );\n const sanitized = sanitizeChannelProgressText(\n filePath,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n }\n\n if (isGlobTool(summary.name) || isSearchTool(summary.name)) {\n const pattern = firstNonEmptyString(parsedArguments.pattern);\n const sanitized = sanitizeChannelProgressText(\n pattern,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n }\n\n return undefined;\n }\n\n // Fallback: extract known preview fields from fragmented/incomplete JSON.\n if (isShellTool(summary.name)) {\n return formatFragmentedShellProgressDetails(summary);\n }\n\n if (isSkillToolName(summary.name)) {\n return formatFragmentedSkillProgressDetails(summary, options);\n }\n\n if (isTaskTool(summary.name)) {\n return formatFragmentedSubagentProgressDetails(summary);\n }\n\n if (isFilePathToolName(summary.name)) {\n const filePathMatch = summary.argumentsText.match(\n /\"file_path\"\\s*:\\s*\"([^\"]+)\"/,\n );\n if (filePathMatch?.[1]) {\n const sanitized = sanitizeChannelProgressText(\n filePathMatch[1],\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n }\n }\n\n return undefined;\n}\n",
|
|
8
9
|
"import {\n sanitizeChannelProgressCore,\n truncateChannelProgressText,\n} from \"@/channels/progress-formatting\";\nimport type { ChannelTurnProgressEvent } from \"@/channels/types\";\nimport { isNonEmptyString } from \"./public-utils\";\n\nexport const SLACK_ASSISTANT_STARTUP_STATUS = \"is thinking...\";\nexport const SLACK_ASSISTANT_WORKING_STATUS = \"is working...\";\n\nconst SLACK_LOADING_MESSAGE_MAX = 50;\n\nexport function sanitizeSlackStatusText(\n text: string,\n maxLength: number,\n): string {\n const normalized = sanitizeChannelProgressCore(text)\n .replace(/[<>]/g, \"\")\n .replace(/&/g, \"and\")\n .replace(/\\s+/g, \" \")\n .trim();\n return truncateChannelProgressText(normalized, maxLength, \"...\");\n}\n\nexport function formatSlackToolNameForDisplay(toolName: string): string {\n if (toolName === \"Task\" || toolName === \"task\" || toolName === \"Agent\") {\n return \"Subagent\";\n }\n if (\n toolName === \"Bash\" ||\n toolName === \"bash\" ||\n toolName === \"exec_command\" ||\n toolName === \"shell_command\" ||\n toolName === \"ShellCommand\"\n ) {\n return \"Bash\";\n }\n return toolName;\n}\n\nexport function resolveSlackConcreteActivity(\n event: ChannelTurnProgressEvent,\n): string | null {\n if (event.kind === \"command\" && isNonEmptyString(event.command)) {\n return sanitizeSlackStatusText(\n formatSlackToolNameForDisplay(event.command),\n SLACK_LOADING_MESSAGE_MAX,\n );\n }\n if (\n event.kind !== \"tool\" ||\n !isNonEmptyString(event.toolName) ||\n event.toolName.toLowerCase() === \"messagechannel\"\n ) {\n return null;\n }\n\n for (const description of [event.toolTitle, event.toolDetails]) {\n if (!isNonEmptyString(description)) {\n continue;\n }\n const sanitized = sanitizeSlackStatusText(\n description,\n SLACK_LOADING_MESSAGE_MAX,\n );\n if (sanitized) {\n return sanitized;\n }\n }\n return null;\n}\n",
|
|
9
10
|
"export type AgentBackendMode = \"local\" | \"api\";\n\nexport function isLocalAgentId(agentId: string): boolean {\n return agentId.startsWith(\"agent-local-\");\n}\n\nexport function isCloudAgentId(agentId: string): boolean {\n return !isLocalAgentId(agentId);\n}\n\nexport function isAgentIdCompatibleWithBackend(\n agentId: string,\n backendMode: AgentBackendMode,\n): boolean {\n return backendMode === \"local\"\n ? isLocalAgentId(agentId)\n : isCloudAgentId(agentId);\n}\n",
|
|
@@ -13,7 +14,7 @@
|
|
|
13
14
|
"import type { OutboundChannelMessage } from \"@/channels/types\";\nimport {\n buildSlackChatFootnote,\n buildSlackReplyBlocksWithFootnote,\n} from \"./presentation\";\nimport {\n normalizeSlackReactionName,\n resolveSlackOutboundThreadTs,\n} from \"./public-utils\";\n\nexport interface SlackSenderPostMessageParams {\n channel: string;\n text: string;\n threadTs?: string;\n blocks?: unknown[];\n}\n\nexport interface SlackSenderPostMessageResult {\n messageId: string;\n}\n\nexport interface SlackSenderMessageResult {\n messageId: string;\n}\n\nexport interface SlackSenderReactionParams {\n channel: string;\n timestamp: string;\n name: string;\n}\n\nexport interface SlackSenderClient {\n postMessage(\n params: SlackSenderPostMessageParams,\n ): Promise<SlackSenderPostMessageResult>;\n addReaction?(params: SlackSenderReactionParams): Promise<void>;\n removeReaction?(params: SlackSenderReactionParams): Promise<void>;\n}\n\nexport interface SlackChannelSender {\n sendMessage(\n message: OutboundChannelMessage,\n ): Promise<SlackSenderMessageResult>;\n sendDirectReply(params: SlackDirectReplyParams): Promise<void>;\n}\n\nexport interface SlackDirectReplyParams {\n chatId: string;\n text: string;\n replyToMessageId?: string;\n threadId?: string | null;\n blocks?: unknown[];\n}\n\nexport interface CreateSlackChannelSenderParams {\n client: SlackSenderClient;\n}\n\nasync function sendSlackReaction(\n client: SlackSenderClient,\n message: OutboundChannelMessage,\n): Promise<SlackSenderMessageResult> {\n const targetMessageId = message.targetMessageId ?? message.replyToMessageId;\n if (!targetMessageId) {\n throw new Error(\n \"Slack reactions require message_id (or reply_to_message_id) to identify the target message.\",\n );\n }\n const name = normalizeSlackReactionName(message.reaction ?? \"\");\n if (!name) {\n throw new Error(\"Slack reaction emoji cannot be empty.\");\n }\n const params: SlackSenderReactionParams = {\n channel: message.chatId,\n timestamp: targetMessageId,\n name,\n };\n if (message.removeReaction) {\n if (!client.removeReaction) {\n throw new Error(\n \"Slack sender client does not support removing reactions.\",\n );\n }\n await client.removeReaction(params);\n } else {\n if (!client.addReaction) {\n throw new Error(\"Slack sender client does not support adding reactions.\");\n }\n await client.addReaction(params);\n }\n return { messageId: targetMessageId };\n}\n\nfunction buildSlackOutboundBlocks(\n message: OutboundChannelMessage,\n): unknown[] | undefined {\n if (!message.agentId || !message.conversationId) {\n return undefined;\n }\n\n const footnote = buildSlackChatFootnote({\n agentId: message.agentId,\n conversationId: message.conversationId,\n });\n if (!footnote) {\n return undefined;\n }\n\n return buildSlackReplyBlocksWithFootnote(message.text, footnote);\n}\n\nexport function createSlackChannelSender(\n params: CreateSlackChannelSenderParams,\n): SlackChannelSender {\n const { client } = params;\n return {\n async sendMessage(\n message: OutboundChannelMessage,\n ): Promise<SlackSenderMessageResult> {\n if (message.reaction) {\n return await sendSlackReaction(client, message);\n }\n const threadTs = resolveSlackOutboundThreadTs({\n chatId: message.chatId,\n threadId: message.threadId,\n replyToMessageId: message.replyToMessageId,\n });\n const blocks = buildSlackOutboundBlocks(message);\n return await client.postMessage({\n channel: message.chatId,\n text: message.text,\n ...(blocks ? { blocks } : {}),\n ...(threadTs ? { threadTs } : {}),\n });\n },\n\n async sendDirectReply(params: SlackDirectReplyParams): Promise<void> {\n const threadTs = resolveSlackOutboundThreadTs({\n chatId: params.chatId,\n threadId: params.threadId,\n replyToMessageId: params.replyToMessageId,\n });\n await client.postMessage({\n channel: params.chatId,\n text: params.text,\n ...(params.blocks ? { blocks: params.blocks } : {}),\n ...(threadTs ? { threadTs } : {}),\n });\n },\n };\n}\n",
|
|
14
15
|
"import type {\n ChannelTurnSource,\n OutboundChannelMessage,\n} from \"@/channels/types\";\nimport {\n firstNonEmptyString,\n isNonEmptyString,\n resolveSlackChatType,\n resolveSlackProgressThreadTs,\n resolveSlackSourceThreadTs,\n} from \"./public-utils\";\n\nconst SLACK_ASSISTANT_STATUS_KEEPALIVE_MS = 90_000;\n\nexport interface SlackStatusWriteClient {\n assistant?: {\n threads?: {\n setStatus?: (args: {\n channel_id: string;\n thread_ts: string;\n status: string;\n loading_messages?: string[];\n }) => Promise<unknown>;\n };\n };\n}\n\nexport type AgentConvSlackState = {\n isThinkingActive: boolean;\n thinkingText: string;\n typingFooterText: string;\n};\n\nexport type SlackStatusController = {\n getUniqueSources: (sources: ChannelTurnSource[]) => ChannelTurnSource[];\n getLifecycleErrorReplyKey: (source: ChannelTurnSource) => string | null;\n activate: (\n source: ChannelTurnSource,\n footerText: string,\n loadingText: string,\n ) => Promise<void>;\n deactivate: (source: ChannelTurnSource) => Promise<void>;\n clearStale: (source: ChannelTurnSource) => Promise<void>;\n markAutoCleared: (source: ChannelTurnSource) => void;\n markAutoClearedForMessage: (\n msg: Pick<\n OutboundChannelMessage,\n \"agentId\" | \"conversationId\" | \"chatId\" | \"threadId\" | \"replyToMessageId\"\n >,\n ) => void;\n activeSources: () => ChannelTurnSource[];\n clear: () => void;\n};\n\nexport function createSlackStatusController(params: {\n ensureApp: () => Promise<unknown>;\n ensureWriteClient: () => Promise<SlackStatusWriteClient>;\n resolveKnownThreadRoot: (messageId: string) => string;\n}): SlackStatusController {\n const stateByConversation = new Map<string, AgentConvSlackState>();\n const sourceByConversation = new Map<string, ChannelTurnSource>();\n const signatureByConversation = new Map<string, string>();\n const writePromiseByConversation = new Map<string, Promise<void>>();\n const keepaliveByConversation = new Map<\n string,\n ReturnType<typeof setTimeout>\n >();\n const clearedStaleReplyKeys = new Set<string>();\n\n function getConversationKey(source: ChannelTurnSource): string | null {\n return source.channel === \"slack\" &&\n isNonEmptyString(source.agentId) &&\n isNonEmptyString(source.conversationId)\n ? `${source.agentId}:${source.conversationId}`\n : null;\n }\n\n function getLifecycleReplyKey(source: ChannelTurnSource): string | null {\n if (source.channel !== \"slack\" || !isNonEmptyString(source.chatId)) {\n return null;\n }\n const replyToMessageId = resolveSlackProgressThreadTs(source);\n return isNonEmptyString(replyToMessageId)\n ? `${source.chatId}:${replyToMessageId}`\n : null;\n }\n\n function getLifecycleErrorReplyKey(source: ChannelTurnSource): string | null {\n if (source.channel !== \"slack\" || !isNonEmptyString(source.chatId)) {\n return null;\n }\n if (\n source.chatType === \"direct\" ||\n resolveSlackChatType(source.chatId) === \"direct\"\n ) {\n const replyToMessageId = resolveSlackSourceThreadTs(source);\n return isNonEmptyString(replyToMessageId)\n ? `${source.chatId}:${replyToMessageId}`\n : `${source.chatId}:direct`;\n }\n return getLifecycleReplyKey(source);\n }\n\n function getUniqueSources(sources: ChannelTurnSource[]): ChannelTurnSource[] {\n const seen = new Set<string>();\n const unique: ChannelTurnSource[] = [];\n for (const source of sources) {\n const key = getConversationKey(source);\n if (!key || seen.has(key) || !getLifecycleReplyKey(source)) continue;\n seen.add(key);\n unique.push(source);\n }\n return unique;\n }\n\n function clearKeepalive(key: string): void {\n const timer = keepaliveByConversation.get(key);\n if (timer) {\n clearTimeout(timer);\n keepaliveByConversation.delete(key);\n }\n }\n\n async function writeStatus(\n source: ChannelTurnSource,\n footerText: string,\n loadingText: string,\n options: { force?: boolean } = {},\n ): Promise<boolean> {\n const stateKey = getConversationKey(source);\n const replyKey = getLifecycleReplyKey(source);\n const threadTs = resolveSlackProgressThreadTs(source);\n if (!stateKey || !replyKey || !threadTs) return false;\n\n const signature = `${footerText}\\n${loadingText}`;\n if (!options.force && signatureByConversation.get(stateKey) === signature) {\n return true;\n }\n\n await params.ensureApp();\n const slackClient = await params.ensureWriteClient();\n const setStatus = slackClient.assistant?.threads?.setStatus;\n if (!setStatus) return false;\n\n signatureByConversation.set(stateKey, signature);\n const previous =\n writePromiseByConversation.get(stateKey) ?? Promise.resolve();\n const operation = previous.then(async () => {\n try {\n await setStatus.call(slackClient.assistant?.threads, {\n channel_id: source.chatId,\n thread_ts: threadTs,\n status: footerText,\n ...(footerText ? { loading_messages: [loadingText] } : {}),\n });\n if (footerText) clearedStaleReplyKeys.delete(replyKey);\n else clearedStaleReplyKeys.add(replyKey);\n return true;\n } catch (error) {\n if (signatureByConversation.get(stateKey) === signature) {\n signatureByConversation.delete(stateKey);\n }\n console.warn(\n \"[Slack] Failed to update assistant thread status:\",\n error instanceof Error ? error.message : error,\n );\n return false;\n }\n });\n const settled = operation.then(() => undefined);\n writePromiseByConversation.set(stateKey, settled);\n void settled.then(() => {\n if (writePromiseByConversation.get(stateKey) === settled) {\n writePromiseByConversation.delete(stateKey);\n }\n });\n return operation;\n }\n\n function scheduleKeepalive(key: string): void {\n clearKeepalive(key);\n const timer = setTimeout(() => {\n keepaliveByConversation.delete(key);\n void (async () => {\n const state = stateByConversation.get(key);\n const source = sourceByConversation.get(key);\n if (!state?.isThinkingActive || !source) return;\n await writeStatus(source, state.typingFooterText, state.thinkingText, {\n force: true,\n });\n if (state.isThinkingActive) scheduleKeepalive(key);\n })();\n }, SLACK_ASSISTANT_STATUS_KEEPALIVE_MS);\n timer.unref?.();\n keepaliveByConversation.set(key, timer);\n }\n\n async function activate(\n source: ChannelTurnSource,\n footerText: string,\n loadingText: string,\n ): Promise<void> {\n const key = getConversationKey(source);\n if (!key || !getLifecycleReplyKey(source)) return;\n const state = stateByConversation.get(key) ?? {\n isThinkingActive: false,\n thinkingText: \"\",\n typingFooterText: \"\",\n };\n if (\n state.isThinkingActive &&\n state.thinkingText === loadingText &&\n state.typingFooterText === footerText\n ) {\n sourceByConversation.set(key, source);\n return;\n }\n state.isThinkingActive = true;\n state.thinkingText = loadingText;\n state.typingFooterText = footerText;\n stateByConversation.set(key, state);\n sourceByConversation.set(key, source);\n const sent = await writeStatus(source, footerText, loadingText);\n if (sent && state.isThinkingActive) scheduleKeepalive(key);\n else if (!sent) state.isThinkingActive = false;\n }\n\n function markAutoClearedByKey(key: string): void {\n clearKeepalive(key);\n const state = stateByConversation.get(key);\n if (state) state.isThinkingActive = false;\n signatureByConversation.delete(key);\n sourceByConversation.delete(key);\n }\n\n async function deactivate(source: ChannelTurnSource): Promise<void> {\n const key = getConversationKey(source);\n if (!key) return;\n clearKeepalive(key);\n const state = stateByConversation.get(key);\n if (state) state.isThinkingActive = false;\n signatureByConversation.delete(key);\n sourceByConversation.delete(key);\n await writeStatus(source, \"\", \"\", { force: true });\n signatureByConversation.delete(key);\n stateByConversation.delete(key);\n }\n\n async function clearStale(source: ChannelTurnSource): Promise<void> {\n const key = getConversationKey(source);\n const replyKey = getLifecycleReplyKey(source);\n if (\n !key ||\n !replyKey ||\n stateByConversation.get(key)?.isThinkingActive ||\n clearedStaleReplyKeys.has(replyKey)\n ) {\n return;\n }\n await writeStatus(source, \"\", \"\", { force: true });\n signatureByConversation.delete(key);\n }\n\n return {\n getUniqueSources,\n getLifecycleErrorReplyKey,\n activate,\n deactivate,\n clearStale,\n markAutoCleared(source): void {\n const key = getConversationKey(source);\n if (key) markAutoClearedByKey(key);\n },\n markAutoClearedForMessage(msg): void {\n if (\n isNonEmptyString(msg.agentId) &&\n isNonEmptyString(msg.conversationId)\n ) {\n markAutoClearedByKey(`${msg.agentId}:${msg.conversationId}`);\n return;\n }\n const anchor = firstNonEmptyString(msg.threadId, msg.replyToMessageId);\n if (!anchor) return;\n const root = params.resolveKnownThreadRoot(anchor);\n for (const [key, source] of sourceByConversation) {\n if (\n source.chatId === msg.chatId &&\n resolveSlackProgressThreadTs(source) === root\n ) {\n markAutoClearedByKey(key);\n }\n }\n },\n activeSources: () => Array.from(sourceByConversation.values()),\n clear(): void {\n for (const timer of keepaliveByConversation.values()) clearTimeout(timer);\n stateByConversation.clear();\n sourceByConversation.clear();\n signatureByConversation.clear();\n writePromiseByConversation.clear();\n keepaliveByConversation.clear();\n clearedStaleReplyKeys.clear();\n },\n };\n}\n"
|
|
15
16
|
],
|
|
16
|
-
"mappings": "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",
|
|
17
|
-
"debugId": "
|
|
17
|
+
"mappings": "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",
|
|
18
|
+
"debugId": "C5337FF53B1F7C8E64756E2164756E21",
|
|
18
19
|
"names": []
|
|
19
20
|
}
|