@letta-ai/letta-code 0.30.7 → 0.30.8
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/agent-presets.js.map +1 -1
- package/dist/app-server-client.cjs +12 -2
- package/dist/app-server-client.cjs.map +4 -4
- package/dist/app-server-client.js +12 -2
- package/dist/app-server-client.js.map +4 -4
- package/dist/channels-public.js +210 -39
- package/dist/channels-public.js.map +7 -4
- package/dist/channels-slack.js +1 -1
- package/dist/channels-slack.js.map +3 -3
- package/dist/gateway-core.js +60 -42
- package/dist/gateway-core.js.map +3 -3
- package/dist/mcp-client.js +2 -2
- package/dist/mcp-client.js.map +1 -1
- package/dist/types/agent/approval-execution.d.ts +0 -2
- package/dist/types/agent/approval-execution.d.ts.map +1 -1
- package/dist/types/agent/subagents/manager.d.ts.map +1 -1
- package/dist/types/agent/subagents/subagent-launcher.d.ts +0 -5
- package/dist/types/agent/subagents/subagent-launcher.d.ts.map +1 -1
- package/dist/types/app-server-client.d.ts +4 -1
- package/dist/types/app-server-client.d.ts.map +1 -1
- package/dist/types/channels/gateway-core.d.ts +14 -4
- package/dist/types/channels/gateway-core.d.ts.map +1 -1
- package/dist/types/channels/processor.d.ts.map +1 -1
- package/dist/types/channels/slack/presentation.d.ts.map +1 -1
- package/dist/types/cli/helpers/stream-resume.d.ts +33 -0
- package/dist/types/cli/helpers/stream-resume.d.ts.map +1 -0
- package/dist/types/cli/helpers/stream.d.ts +3 -23
- package/dist/types/cli/helpers/stream.d.ts.map +1 -1
- package/dist/types/constants.d.ts +1 -1
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/gateway-core.d.ts +1 -1
- package/dist/types/gateway-core.d.ts.map +1 -1
- package/dist/types/runtime-context.d.ts +0 -9
- package/dist/types/runtime-context.d.ts.map +1 -1
- package/dist/types/tools/manager.d.ts +4 -11
- package/dist/types/tools/manager.d.ts.map +1 -1
- package/dist/types/tools/tool-definitions.d.ts +0 -1
- package/dist/types/tools/tool-definitions.d.ts.map +1 -1
- package/dist/types/tools/toolset.d.ts +1 -5
- package/dist/types/tools/toolset.d.ts.map +1 -1
- package/dist/types/types/app-server-info.d.ts +1 -0
- package/dist/types/types/app-server-info.d.ts.map +1 -1
- package/dist/types/types/external-tool-protocol.d.ts +61 -0
- package/dist/types/types/external-tool-protocol.d.ts.map +1 -0
- package/dist/types/types/protocol_v2.d.ts +7 -55
- package/dist/types/types/protocol_v2.d.ts.map +1 -1
- package/dist/types/types/runtime-scope.d.ts +18 -0
- package/dist/types/types/runtime-scope.d.ts.map +1 -0
- package/letta.js +105649 -105507
- package/package.json +1 -1
- package/scripts/source-file-size-baseline.json +6 -7
- package/dist/types/channels/access-control.d.ts +0 -104
- package/dist/types/channels/access-control.d.ts.map +0 -1
- package/dist/types/channels/accounts.d.ts +0 -17
- package/dist/types/channels/accounts.d.ts.map +0 -1
- package/dist/types/channels/commands.d.ts +0 -98
- package/dist/types/channels/commands.d.ts.map +0 -1
- package/dist/types/channels/config.d.ts +0 -18
- package/dist/types/channels/config.d.ts.map +0 -1
- package/dist/types/channels/credential-store.d.ts +0 -21
- package/dist/types/channels/credential-store.d.ts.map +0 -1
- package/dist/types/channels/custom/adapter.d.ts +0 -3
- package/dist/types/channels/custom/adapter.d.ts.map +0 -1
- package/dist/types/channels/custom/plugin.d.ts +0 -10
- package/dist/types/channels/custom/plugin.d.ts.map +0 -1
- package/dist/types/channels/discord/account-display.d.ts +0 -2
- package/dist/types/channels/discord/account-display.d.ts.map +0 -1
- package/dist/types/channels/discord/adapter.d.ts +0 -3
- package/dist/types/channels/discord/adapter.d.ts.map +0 -1
- package/dist/types/channels/discord/bot-policy.d.ts +0 -19
- package/dist/types/channels/discord/bot-policy.d.ts.map +0 -1
- package/dist/types/channels/discord/channel-gating.d.ts +0 -41
- package/dist/types/channels/discord/channel-gating.d.ts.map +0 -1
- package/dist/types/channels/discord/error-reply.d.ts +0 -24
- package/dist/types/channels/discord/error-reply.d.ts.map +0 -1
- package/dist/types/channels/discord/internal-types.d.ts +0 -101
- package/dist/types/channels/discord/internal-types.d.ts.map +0 -1
- package/dist/types/channels/discord/media.d.ts +0 -47
- package/dist/types/channels/discord/media.d.ts.map +0 -1
- package/dist/types/channels/discord/message-actions.d.ts +0 -3
- package/dist/types/channels/discord/message-actions.d.ts.map +0 -1
- package/dist/types/channels/discord/plugin.d.ts +0 -3
- package/dist/types/channels/discord/plugin.d.ts.map +0 -1
- package/dist/types/channels/discord/runtime.d.ts +0 -28
- package/dist/types/channels/discord/runtime.d.ts.map +0 -1
- package/dist/types/channels/discord/setup.d.ts +0 -2
- package/dist/types/channels/discord/setup.d.ts.map +0 -1
- package/dist/types/channels/discord/utils.d.ts +0 -47
- package/dist/types/channels/discord/utils.d.ts.map +0 -1
- package/dist/types/channels/feedback.d.ts +0 -26
- package/dist/types/channels/feedback.d.ts.map +0 -1
- package/dist/types/channels/inbound-debounce.d.ts +0 -50
- package/dist/types/channels/inbound-debounce.d.ts.map +0 -1
- package/dist/types/channels/interactive.d.ts +0 -13
- package/dist/types/channels/interactive.d.ts.map +0 -1
- package/dist/types/channels/lifecycle-error-report.d.ts +0 -19
- package/dist/types/channels/lifecycle-error-report.d.ts.map +0 -1
- package/dist/types/channels/message-tool.d.ts +0 -15
- package/dist/types/channels/message-tool.d.ts.map +0 -1
- package/dist/types/channels/pairing.d.ts +0 -53
- package/dist/types/channels/pairing.d.ts.map +0 -1
- package/dist/types/channels/pending-control-requests.d.ts +0 -12
- package/dist/types/channels/pending-control-requests.d.ts.map +0 -1
- package/dist/types/channels/plugin-registry.d.ts +0 -9
- package/dist/types/channels/plugin-registry.d.ts.map +0 -1
- package/dist/types/channels/registry-commands.d.ts +0 -52
- package/dist/types/channels/registry-commands.d.ts.map +0 -1
- package/dist/types/channels/registry-controls.d.ts +0 -33
- package/dist/types/channels/registry-controls.d.ts.map +0 -1
- package/dist/types/channels/registry-events.d.ts +0 -27
- package/dist/types/channels/registry-events.d.ts.map +0 -1
- package/dist/types/channels/registry-handlers.d.ts +0 -46
- package/dist/types/channels/registry-handlers.d.ts.map +0 -1
- package/dist/types/channels/registry-inbound.d.ts +0 -19
- package/dist/types/channels/registry-inbound.d.ts.map +0 -1
- package/dist/types/channels/registry-presentation.d.ts +0 -20
- package/dist/types/channels/registry-presentation.d.ts.map +0 -1
- package/dist/types/channels/registry-routes.d.ts +0 -33
- package/dist/types/channels/registry-routes.d.ts.map +0 -1
- package/dist/types/channels/registry.d.ts +0 -130
- package/dist/types/channels/registry.d.ts.map +0 -1
- package/dist/types/channels/restore-scope.d.ts +0 -8
- package/dist/types/channels/restore-scope.d.ts.map +0 -1
- package/dist/types/channels/routing.d.ts +0 -74
- package/dist/types/channels/routing.d.ts.map +0 -1
- package/dist/types/channels/runtime-deps.d.ts +0 -25
- package/dist/types/channels/runtime-deps.d.ts.map +0 -1
- package/dist/types/channels/schema-config.d.ts +0 -33
- package/dist/types/channels/schema-config.d.ts.map +0 -1
- package/dist/types/channels/signal/account-conflicts.d.ts +0 -14
- package/dist/types/channels/signal/account-conflicts.d.ts.map +0 -1
- package/dist/types/channels/signal/adapter.d.ts +0 -40
- package/dist/types/channels/signal/adapter.d.ts.map +0 -1
- package/dist/types/channels/signal/client.d.ts +0 -51
- package/dist/types/channels/signal/client.d.ts.map +0 -1
- package/dist/types/channels/signal/inbound.d.ts +0 -25
- package/dist/types/channels/signal/inbound.d.ts.map +0 -1
- package/dist/types/channels/signal/internal-types.d.ts +0 -82
- package/dist/types/channels/signal/internal-types.d.ts.map +0 -1
- package/dist/types/channels/signal/media.d.ts +0 -35
- package/dist/types/channels/signal/media.d.ts.map +0 -1
- package/dist/types/channels/signal/message-actions.d.ts +0 -3
- package/dist/types/channels/signal/message-actions.d.ts.map +0 -1
- package/dist/types/channels/signal/plugin.d.ts +0 -3
- package/dist/types/channels/signal/plugin.d.ts.map +0 -1
- package/dist/types/channels/signal/runtime.d.ts +0 -14
- package/dist/types/channels/signal/runtime.d.ts.map +0 -1
- package/dist/types/channels/signal/setup-runtime.d.ts +0 -35
- package/dist/types/channels/signal/setup-runtime.d.ts.map +0 -1
- package/dist/types/channels/signal/setup.d.ts +0 -5
- package/dist/types/channels/signal/setup.d.ts.map +0 -1
- package/dist/types/channels/signal/target.d.ts +0 -21
- package/dist/types/channels/signal/target.d.ts.map +0 -1
- package/dist/types/channels/slack/account-display.d.ts +0 -2
- package/dist/types/channels/slack/account-display.d.ts.map +0 -1
- package/dist/types/channels/slack/adapter.d.ts +0 -12
- package/dist/types/channels/slack/adapter.d.ts.map +0 -1
- package/dist/types/channels/slack/agent-thread-tracker.d.ts +0 -13
- package/dist/types/channels/slack/agent-thread-tracker.d.ts.map +0 -1
- package/dist/types/channels/slack/approval-controller.d.ts +0 -14
- package/dist/types/channels/slack/approval-controller.d.ts.map +0 -1
- package/dist/types/channels/slack/attachment-download.d.ts +0 -20
- package/dist/types/channels/slack/attachment-download.d.ts.map +0 -1
- package/dist/types/channels/slack/attachment-stream.d.ts +0 -23
- package/dist/types/channels/slack/attachment-stream.d.ts.map +0 -1
- package/dist/types/channels/slack/attachment-task.d.ts +0 -37
- package/dist/types/channels/slack/attachment-task.d.ts.map +0 -1
- package/dist/types/channels/slack/attachment-types.d.ts +0 -27
- package/dist/types/channels/slack/attachment-types.d.ts.map +0 -1
- package/dist/types/channels/slack/bot-policy.d.ts +0 -25
- package/dist/types/channels/slack/bot-policy.d.ts.map +0 -1
- package/dist/types/channels/slack/file-upload.d.ts +0 -6
- package/dist/types/channels/slack/file-upload.d.ts.map +0 -1
- package/dist/types/channels/slack/inbound-debounce.d.ts +0 -16
- package/dist/types/channels/slack/inbound-debounce.d.ts.map +0 -1
- package/dist/types/channels/slack/ingress-controller.d.ts +0 -21
- package/dist/types/channels/slack/ingress-controller.d.ts.map +0 -1
- package/dist/types/channels/slack/media.d.ts +0 -63
- package/dist/types/channels/slack/media.d.ts.map +0 -1
- package/dist/types/channels/slack/message-actions.d.ts +0 -2
- package/dist/types/channels/slack/message-actions.d.ts.map +0 -1
- package/dist/types/channels/slack/model-picker-blocks.d.ts +0 -9
- package/dist/types/channels/slack/model-picker-blocks.d.ts.map +0 -1
- package/dist/types/channels/slack/plugin.d.ts +0 -3
- package/dist/types/channels/slack/plugin.d.ts.map +0 -1
- package/dist/types/channels/slack/proactive-accounts.d.ts +0 -15
- package/dist/types/channels/slack/proactive-accounts.d.ts.map +0 -1
- package/dist/types/channels/slack/runtime.d.ts +0 -6
- package/dist/types/channels/slack/runtime.d.ts.map +0 -1
- package/dist/types/channels/slack/setup.d.ts +0 -2
- package/dist/types/channels/slack/setup.d.ts.map +0 -1
- package/dist/types/channels/slack/target-resolution.d.ts +0 -52
- package/dist/types/channels/slack/target-resolution.d.ts.map +0 -1
- package/dist/types/channels/slack/thread-context.d.ts +0 -15
- package/dist/types/channels/slack/thread-context.d.ts.map +0 -1
- package/dist/types/channels/slack/web-api-client.d.ts +0 -2
- package/dist/types/channels/slack/web-api-client.d.ts.map +0 -1
- package/dist/types/channels/targets.d.ts +0 -17
- package/dist/types/channels/targets.d.ts.map +0 -1
- package/dist/types/channels/telegram/account-display.d.ts +0 -9
- package/dist/types/channels/telegram/account-display.d.ts.map +0 -1
- package/dist/types/channels/telegram/adapter.d.ts +0 -12
- package/dist/types/channels/telegram/adapter.d.ts.map +0 -1
- package/dist/types/channels/telegram/debounce.d.ts +0 -22
- package/dist/types/channels/telegram/debounce.d.ts.map +0 -1
- package/dist/types/channels/telegram/internal-types.d.ts +0 -98
- package/dist/types/channels/telegram/internal-types.d.ts.map +0 -1
- package/dist/types/channels/telegram/media.d.ts +0 -115
- package/dist/types/channels/telegram/media.d.ts.map +0 -1
- package/dist/types/channels/telegram/message-actions.d.ts +0 -3
- package/dist/types/channels/telegram/message-actions.d.ts.map +0 -1
- package/dist/types/channels/telegram/plugin.d.ts +0 -3
- package/dist/types/channels/telegram/plugin.d.ts.map +0 -1
- package/dist/types/channels/telegram/runtime.d.ts +0 -6
- package/dist/types/channels/telegram/runtime.d.ts.map +0 -1
- package/dist/types/channels/telegram/setup.d.ts +0 -14
- package/dist/types/channels/telegram/setup.d.ts.map +0 -1
- package/dist/types/channels/telegram/startup-helpers.d.ts +0 -10
- package/dist/types/channels/telegram/startup-helpers.d.ts.map +0 -1
- package/dist/types/channels/telegram/typing-controller.d.ts +0 -11
- package/dist/types/channels/telegram/typing-controller.d.ts.map +0 -1
- package/dist/types/channels/telegram/utils.d.ts +0 -43
- package/dist/types/channels/telegram/utils.d.ts.map +0 -1
- package/dist/types/channels/transcription/index.d.ts +0 -20
- package/dist/types/channels/transcription/index.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/adapter-helpers.d.ts +0 -21
- package/dist/types/channels/whatsapp/adapter-helpers.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/adapter-types.d.ts +0 -44
- package/dist/types/channels/whatsapp/adapter-types.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/adapter.d.ts +0 -18
- package/dist/types/channels/whatsapp/adapter.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/attachment-policy.d.ts +0 -22
- package/dist/types/channels/whatsapp/attachment-policy.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/dedupe-claims.d.ts +0 -8
- package/dist/types/channels/whatsapp/dedupe-claims.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/identity.d.ts +0 -29
- package/dist/types/channels/whatsapp/identity.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/inbound-debounce.d.ts +0 -28
- package/dist/types/channels/whatsapp/inbound-debounce.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/jid.d.ts +0 -40
- package/dist/types/channels/whatsapp/jid.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/lid-store.d.ts +0 -45
- package/dist/types/channels/whatsapp/lid-store.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/media.d.ts +0 -26
- package/dist/types/channels/whatsapp/media.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/message-actions.d.ts +0 -3
- package/dist/types/channels/whatsapp/message-actions.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/message-store.d.ts +0 -13
- package/dist/types/channels/whatsapp/message-store.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/plugin.d.ts +0 -3
- package/dist/types/channels/whatsapp/plugin.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/reactions.d.ts +0 -33
- package/dist/types/channels/whatsapp/reactions.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/reconnect-scheduler.d.ts +0 -16
- package/dist/types/channels/whatsapp/reconnect-scheduler.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/runtime.d.ts +0 -25
- package/dist/types/channels/whatsapp/runtime.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/session.d.ts +0 -56
- package/dist/types/channels/whatsapp/session.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/setup.d.ts +0 -2
- package/dist/types/channels/whatsapp/setup.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/state.d.ts +0 -18
- package/dist/types/channels/whatsapp/state.d.ts.map +0 -1
- package/dist/types/channels/whatsapp/typing-controller.d.ts +0 -28
- package/dist/types/channels/whatsapp/typing-controller.d.ts.map +0 -1
- package/dist/types/tools/impl/message-channel.d.ts +0 -10
- package/dist/types/tools/impl/message-channel.d.ts.map +0 -1
- package/dist/types/updater/auto-update.d.ts +0 -48
- package/dist/types/updater/auto-update.d.ts.map +0 -1
|
@@ -10,11 +10,11 @@
|
|
|
10
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",
|
|
11
11
|
"import {\n buildConversationBusyErrorBody,\n CONVERSATION_BUSY_TITLE,\n isConversationBusyErrorText,\n} from \"@/utils/conversation-busy-error\";\n\nconst RAW_LOOP_ERROR_PATTERN = /^Unexpected stop reason:\\s*error$/i;\nconst APP_CHAT_URL_PATTERN = /https:\\/\\/app\\.letta\\.com\\/chat\\/\\S+/i;\nconst ESCAPE_CHARACTER = String.fromCharCode(27);\nconst OSC8_PREFIX = `${ESCAPE_CHARACTER}]8;;`;\nconst OSC8_TERMINATOR = `${ESCAPE_CHARACTER}\\\\`;\n\nconst APPROVAL_PENDING_ERROR_PATTERNS = [\n /waiting for approval/i,\n /pending request before continuing/i,\n /approve or deny the pending request/i,\n];\n\nconst DATABASE_LOCK_TIMEOUT_PATTERN =\n /\\bcancel(?:l)?ing statement due to lock timeout\\b/i;\nconst POSTGRES_LOCK_NOT_AVAILABLE_CODE_PATTERN = /\\b55P03\\b/i;\nconst POSTGRES_LOCK_NOT_AVAILABLE_SQLSTATE_PATTERN =\n /\\b(?:sqlstate|pgcode)\\s*[:=]?\\s*[\"']?55P03\\b/i;\nconst POSTGRES_LOCK_NOT_AVAILABLE_CONTEXT_PATTERN =\n /\\b(?:postgres(?:ql)?|psycopg|sqlalchemy|lock[_ -]?not[_ -]?available|lock timeout)\\b/i;\n\nconst RUN_ID_PATTERNS = [\n /\"run_id\"\\s*:\\s*\"([^\"\\\\]+)\"/i,\n /\\brun[_\\s-]?id\\b[\"']?\\s*[:=]\\s*[\"']?([A-Za-z0-9_-]+)/i,\n /\\(run:\\s*([A-Za-z0-9_-]+)\\)/i,\n];\n\nexport type ChannelLifecycleErrorKind =\n | \"approval_pending\"\n | \"conversation_busy\"\n | \"database_lock_timeout\"\n | \"generic\";\n\nexport interface ChannelLifecycleErrorDisplayOptions {\n automaticRetry?: boolean;\n runId?: string | null;\n}\n\nexport interface ChannelLifecycleErrorDisplay {\n kind: ChannelLifecycleErrorKind;\n title: string;\n body: string;\n runId?: string;\n}\n\nexport interface ChannelLifecycleErrorFormatOptions\n extends ChannelLifecycleErrorDisplayOptions {\n codeBlock?: boolean;\n maxLength?: number;\n}\n\nexport const CHANNEL_LIFECYCLE_FALLBACK_ERROR_MESSAGE =\n \"Something went wrong while processing that message. Please try again.\";\n\nexport const CHANNEL_LIFECYCLE_APPROVAL_PENDING_MESSAGE =\n \"The agent is still waiting on a tool approval from an earlier turn. Please approve or deny that pending request, then send your message again.\";\n\nexport const CHANNEL_LIFECYCLE_TRANSIENT_ERROR_MESSAGE =\n \"A temporary error interrupted this turn. Please try again.\";\n\nexport const CHANNEL_LIFECYCLE_CONVERSATION_BUSY_TITLE =\n CONVERSATION_BUSY_TITLE;\n\nfunction stripTrailingRunIdPunctuation(runId: string): string {\n return runId.replace(/[)\"'.,;]+$/g, \"\");\n}\n\nexport function extractChannelLifecycleRunId(\n errorText: string | null | undefined,\n): string | undefined {\n if (!errorText) return undefined;\n for (const pattern of RUN_ID_PATTERNS) {\n const match = errorText.match(pattern);\n const runId = match?.[1]?.trim();\n if (runId) {\n return stripTrailingRunIdPunctuation(runId);\n }\n }\n return undefined;\n}\n\nfunction stripOsc8TerminalLinks(errorText: string): string {\n let output = \"\";\n let cursor = 0;\n\n while (cursor < errorText.length) {\n const linkStart = errorText.indexOf(OSC8_PREFIX, cursor);\n if (linkStart === -1) {\n output += errorText.slice(cursor);\n break;\n }\n\n const labelStart = errorText.indexOf(\n OSC8_TERMINATOR,\n linkStart + OSC8_PREFIX.length,\n );\n if (labelStart === -1) {\n output += errorText.slice(cursor);\n break;\n }\n\n const closeStart = errorText.indexOf(\n OSC8_PREFIX,\n labelStart + OSC8_TERMINATOR.length,\n );\n if (closeStart === -1) {\n output += errorText.slice(cursor);\n break;\n }\n\n const closeEnd = errorText.indexOf(\n OSC8_TERMINATOR,\n closeStart + OSC8_PREFIX.length,\n );\n if (closeEnd === -1) {\n output += errorText.slice(cursor);\n break;\n }\n\n output += errorText.slice(cursor, linkStart);\n output += errorText.slice(labelStart + OSC8_TERMINATOR.length, closeStart);\n cursor = closeEnd + OSC8_TERMINATOR.length;\n }\n\n return output;\n}\n\nexport function sanitizeChannelLifecycleErrorText(\n errorText: string | null | undefined,\n): string {\n if (!errorText) return \"\";\n\n const withoutTerminalLinks = stripOsc8TerminalLinks(errorText);\n\n return withoutTerminalLinks\n .split(\"\\n\")\n .filter((line) => {\n const trimmed = line.trim();\n if (/^View agent:/i.test(trimmed)) return false;\n if (APP_CHAT_URL_PATTERN.test(trimmed)) return false;\n return true;\n })\n .join(\"\\n\")\n .replace(/[ \\t]+\\n/g, \"\\n\")\n .trim();\n}\n\nfunction truncateLifecycleMessage(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return `${text.slice(0, Math.max(0, maxLength - 1)).trimEnd()}…`;\n}\n\nfunction isDatabaseLockErrorText(errorText: string): boolean {\n return (\n DATABASE_LOCK_TIMEOUT_PATTERN.test(errorText) ||\n POSTGRES_LOCK_NOT_AVAILABLE_SQLSTATE_PATTERN.test(errorText) ||\n (POSTGRES_LOCK_NOT_AVAILABLE_CODE_PATTERN.test(errorText) &&\n POSTGRES_LOCK_NOT_AVAILABLE_CONTEXT_PATTERN.test(errorText))\n );\n}\n\nexport function getChannelLifecycleErrorDisplay(\n errorText: string | null | undefined,\n options: ChannelLifecycleErrorDisplayOptions = {},\n): ChannelLifecycleErrorDisplay {\n const normalized = sanitizeChannelLifecycleErrorText(errorText);\n const optionsRunId = options.runId?.trim();\n const runId = optionsRunId || extractChannelLifecycleRunId(errorText);\n\n if (!normalized || RAW_LOOP_ERROR_PATTERN.test(normalized)) {\n return {\n kind: \"generic\",\n title: \"Turn failed\",\n body: CHANNEL_LIFECYCLE_FALLBACK_ERROR_MESSAGE,\n runId,\n };\n }\n\n if (isDatabaseLockErrorText(normalized)) {\n return {\n kind: \"database_lock_timeout\",\n title: \"Turn failed\",\n body: CHANNEL_LIFECYCLE_TRANSIENT_ERROR_MESSAGE,\n runId,\n };\n }\n\n if (isConversationBusyErrorText(normalized)) {\n return {\n kind: \"conversation_busy\",\n title: CHANNEL_LIFECYCLE_CONVERSATION_BUSY_TITLE,\n body: buildConversationBusyErrorBody(options.automaticRetry ?? false),\n runId,\n };\n }\n\n if (\n APPROVAL_PENDING_ERROR_PATTERNS.some((pattern) => pattern.test(normalized))\n ) {\n return {\n kind: \"approval_pending\",\n title: \"Turn failed\",\n body: CHANNEL_LIFECYCLE_APPROVAL_PENDING_MESSAGE,\n runId,\n };\n }\n\n return {\n kind: \"generic\",\n title: \"Turn failed\",\n body: normalized,\n runId,\n };\n}\n\nexport function normalizeChannelLifecycleErrorMessage(\n errorText: string | null | undefined,\n options: ChannelLifecycleErrorDisplayOptions = {},\n): string {\n return getChannelLifecycleErrorDisplay(errorText, options).body;\n}\n\nexport function formatChannelLifecycleErrorMessage(\n errorText: string | null | undefined,\n options: ChannelLifecycleErrorFormatOptions = {},\n): string {\n const display = getChannelLifecycleErrorDisplay(errorText, options);\n const maxLength = options.maxLength ?? Number.POSITIVE_INFINITY;\n const body = truncateLifecycleMessage(display.body, maxLength);\n\n if (display.kind === \"conversation_busy\") {\n const lines = [display.title, body];\n if (display.runId) {\n lines.push(\"\", `Run ID: ${display.runId}`);\n }\n return lines.join(\"\\n\");\n }\n\n if (display.kind === \"database_lock_timeout\") {\n const lines = [`${display.title}:`, body];\n if (display.runId) {\n lines.push(\"\", `Run ID: ${display.runId}`);\n }\n return lines.join(\"\\n\");\n }\n\n if (options.codeBlock) {\n const escaped = body.replace(/```/g, \"``\\u200b`\");\n const lines = [`${display.title}:`, \"```\", escaped, \"```\"];\n if (display.runId) {\n lines.push(\"\", `Run ID: ${display.runId}`);\n }\n return lines.join(\"\\n\");\n }\n\n const lines = [`${display.title}:`, body];\n if (display.runId) {\n lines.push(\"\", `Run ID: ${display.runId}`);\n }\n return lines.join(\"\\n\");\n}\n",
|
|
12
12
|
"import type { ChannelTurnSource } from \"@/channels/types\";\nimport type {\n SlackAppConstructor,\n SlackBlock,\n SlackBoltModule,\n} from \"./internal-types\";\n\ntype Constructor = abstract new (...args: never[]) => unknown;\n\nfunction isConstructorFunction<T extends Constructor>(\n value: unknown,\n): value is T {\n return typeof value === \"function\";\n}\n\nfunction resolveSlackAppModule(value: unknown): SlackAppConstructor | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n const app = Reflect.get(value, \"App\");\n return isConstructorFunction<SlackAppConstructor>(app) ? app : null;\n}\n\nexport function resolveSlackAppConstructor(\n mod: SlackBoltModule,\n): SlackAppConstructor {\n const defaultExport =\n mod && typeof mod === \"object\" ? Reflect.get(mod, \"default\") : undefined;\n const nestedDefault =\n defaultExport && typeof defaultExport === \"object\"\n ? Reflect.get(defaultExport, \"default\")\n : undefined;\n const App =\n resolveSlackAppModule(mod) ??\n resolveSlackAppModule(defaultExport) ??\n resolveSlackAppModule(nestedDefault) ??\n (isConstructorFunction<SlackAppConstructor>(defaultExport)\n ? defaultExport\n : null);\n\n if (!App) {\n throw new Error(\n 'Installed Slack runtime did not export constructor \"App\".',\n );\n }\n return App;\n}\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 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 resolveSlackSenderTeamId(value: unknown): string | undefined {\n const record = asRecord(value);\n return record\n ? firstNonEmptyString(record.user_team, record.team_id, record.team)\n : undefined;\n}\n\nexport function normalizeSlackText(text: string): string {\n return text.replace(/^(?:\\s*<@[A-Z0-9]+>\\s*)+/, \"\").trim();\n}\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 type SlackProcessableInboundMessage = Record<string, unknown> & {\n user?: string;\n bot_id?: string;\n ts: string;\n};\n\nexport function isProcessableSlackInboundMessage(\n rawMessage: Record<string, unknown>,\n): rawMessage is SlackProcessableInboundMessage {\n if (\n (!isNonEmptyString(rawMessage.user) &&\n !isNonEmptyString(rawMessage.bot_id)) ||\n !isNonEmptyString(rawMessage.ts) ||\n rawMessage.hidden === true\n ) {\n return false;\n }\n const subtype = isNonEmptyString(rawMessage.subtype)\n ? rawMessage.subtype\n : null;\n if (!subtype) {\n return true;\n }\n if (IGNORED_SLACK_MESSAGE_SUBTYPES.has(subtype)) {\n return false;\n }\n return !(\n WRAPPER_SLACK_MESSAGE_SUBTYPES.has(subtype) &&\n asRecord(rawMessage.message) !== null\n );\n}\n\nexport function slackTimestampToMillis(timestamp: string): number {\n return Math.round(Number.parseFloat(timestamp) * 1000);\n}\n\nexport function resolveSlackChatType(chatId: string): \"direct\" | \"channel\" {\n return chatId.startsWith(\"D\") ? \"direct\" : \"channel\";\n}\n\nexport function resolveSlackOutboundThreadTs(params: {\n chatId: string;\n threadId?: string | null;\n replyToMessageId?: string | null;\n}): string | undefined {\n if (resolveSlackChatType(params.chatId) === \"direct\") {\n return firstNonEmptyString(params.threadId);\n }\n return firstNonEmptyString(params.threadId, params.replyToMessageId);\n}\n\nexport function asSlackBlocks(\n blocks: unknown[] | undefined,\n): SlackBlock[] | undefined {\n return Array.isArray(blocks) ? (blocks as SlackBlock[]) : undefined;\n}\n\nexport function getSlackActionRecord(\n action: unknown,\n body: unknown,\n): Record<string, unknown> | null {\n const directAction = asRecord(action);\n if (directAction) {\n return directAction;\n }\n const actions = asRecord(body)?.actions;\n return Array.isArray(actions) ? asRecord(actions[0]) : null;\n}\n\nexport function resolveSlackSelectedModel(\n action: unknown,\n body: unknown,\n): string | null {\n const actionRecord = getSlackActionRecord(action, body);\n const selectedOption = asRecord(actionRecord?.selected_option);\n return (\n firstNonEmptyString(selectedOption?.value, actionRecord?.value) ?? null\n );\n}\n\nexport function resolveSlackActionChannelId(body: unknown): string | null {\n const bodyRecord = asRecord(body);\n const channel = asRecord(bodyRecord?.channel);\n const container = asRecord(bodyRecord?.container);\n return firstNonEmptyString(channel?.id, container?.channel_id) ?? null;\n}\n\nexport function resolveSlackActionThreadId(body: unknown): string | null {\n const bodyRecord = asRecord(body);\n const container = asRecord(bodyRecord?.container);\n const message = asRecord(bodyRecord?.message);\n return firstNonEmptyString(container?.thread_ts, message?.thread_ts) ?? null;\n}\n\nexport function resolveSlackActionMessageId(body: unknown): string | undefined {\n const bodyRecord = asRecord(body);\n const container = asRecord(bodyRecord?.container);\n const message = asRecord(bodyRecord?.message);\n return firstNonEmptyString(container?.message_ts, message?.ts);\n}\n\nexport function resolveSlackActionUser(body: unknown): {\n id: string | null;\n name?: string;\n teamId?: string;\n} {\n const user = asRecord(asRecord(body)?.user);\n return {\n id: firstNonEmptyString(user?.id) ?? null,\n name: firstNonEmptyString(user?.name, user?.username, user?.id),\n teamId: firstNonEmptyString(user?.team_id),\n };\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 normalizeSlackReactionName(value: string): string {\n return value.trim().replace(/^:+|:+$/g, \"\");\n}\n\nexport function resolveSlackUserDisplayName(\n userInfo: unknown,\n): string | undefined {\n const user = asRecord(asRecord(userInfo)?.user);\n const profile = asRecord(user?.profile);\n return firstNonEmptyString(\n profile?.display_name,\n profile?.real_name,\n user?.name,\n );\n}\n\nexport function hasSlackMention(text: string, userId: string | null): boolean {\n return (\n isNonEmptyString(text) &&\n isNonEmptyString(userId) &&\n (text.includes(`<@${userId}>`) || text.includes(`<@${userId}|`))\n );\n}\n\nexport function isSlackFlatChannelThreadOpener(\n source: ChannelTurnSource,\n): boolean {\n return (\n source.chatType === \"channel\" &&\n isNonEmptyString(source.messageId) &&\n (!isNonEmptyString(source.threadId) || source.threadId === source.messageId)\n );\n}\n",
|
|
13
|
-
"import { isLocalAgentId } from \"@/agent/agent-id\";\nimport {
|
|
13
|
+
"import { isLocalAgentId } from \"@/agent/agent-id\";\nimport { formatChannelLifecycleErrorMessage } from \"@/channels/lifecycle-error\";\nimport type { ChannelControlRequestEvent } from \"@/channels/types\";\nimport type { SlackApprovalActionPayload, SlackBlock } from \"./internal-types\";\n\nexport {\n formatSlackToolNameForDisplay,\n resolveSlackConcreteActivity,\n SLACK_ASSISTANT_STARTUP_STATUS,\n SLACK_ASSISTANT_WORKING_STATUS,\n sanitizeSlackStatusText,\n} from \"./progress\";\n\nimport {\n formatSlackToolNameForDisplay,\n sanitizeSlackStatusText,\n} from \"./progress\";\nimport { isNonEmptyString } from \"./utils\";\nexport const SLACK_APPROVAL_ACTION_ID = \"letta_channel_approval\";\n\nconst SLACK_MARKDOWN_BLOCK_TEXT_MAX = 12_000;\nconst SLACK_LIFECYCLE_ERROR_TEXT_MAX = 3_000;\n\nfunction buildSlackChatUrl(\n agentId: string,\n conversationId: string,\n): string | undefined {\n if (isLocalAgentId(agentId)) {\n return undefined;\n }\n const base = `https://chat.letta.com/chat/${agentId}`;\n return conversationId && conversationId !== \"default\"\n ? `${base}?conversation=${conversationId}`\n : base;\n}\n\nexport function buildSlackChatFootnote(identity: {\n agentId: string;\n conversationId: string;\n}): string {\n const chatUrl = buildSlackChatUrl(identity.agentId, identity.conversationId);\n return chatUrl ? `<${chatUrl}|View on web>` : \"\";\n}\n\nexport function buildSlackReplyBlocksWithFootnote(\n text: string,\n footnote: string,\n): SlackBlock[] | undefined {\n const chunks: string[] = [];\n let remaining = text;\n while (remaining.length > 0) {\n if (remaining.length <= SLACK_MARKDOWN_BLOCK_TEXT_MAX) {\n chunks.push(remaining);\n break;\n }\n let cut = remaining.lastIndexOf(\"\\n\", SLACK_MARKDOWN_BLOCK_TEXT_MAX);\n if (cut <= 0) {\n cut = remaining.lastIndexOf(\" \", SLACK_MARKDOWN_BLOCK_TEXT_MAX);\n }\n if (cut <= 0) {\n cut = SLACK_MARKDOWN_BLOCK_TEXT_MAX;\n }\n chunks.push(remaining.slice(0, cut));\n remaining = remaining.slice(cut);\n }\n const markdownChunks = chunks.filter((chunk) => chunk.trim().length > 0);\n if (markdownChunks.length === 0 || markdownChunks.length > 49) {\n return undefined;\n }\n const blocks: SlackBlock[] = markdownChunks.map((chunk) => ({\n type: \"markdown\",\n text: chunk,\n }));\n blocks.push({\n type: \"context\",\n elements: [{ type: \"mrkdwn\", text: footnote }],\n });\n return blocks;\n}\n\nexport function formatSlackControlRequestBlocks(\n event: ChannelControlRequestEvent,\n): SlackBlock[] | undefined {\n if (event.kind !== \"generic_tool_approval\") {\n return undefined;\n }\n const toolName =\n sanitizeSlackStatusText(\n formatSlackToolNameForDisplay(event.toolName),\n 80,\n ) || \"tool\";\n return [\n {\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: `*Approval needed*\\nRun \\`${toolName}\\`?`,\n },\n },\n {\n type: \"actions\",\n elements: [\n {\n type: \"button\",\n action_id: SLACK_APPROVAL_ACTION_ID,\n text: { type: \"plain_text\", text: \"Approve\", emoji: true },\n style: \"primary\",\n value: JSON.stringify({\n requestId: event.requestId,\n decision: \"allow\",\n } satisfies SlackApprovalActionPayload),\n },\n {\n type: \"button\",\n action_id: SLACK_APPROVAL_ACTION_ID,\n text: { type: \"plain_text\", text: \"Deny\", emoji: true },\n style: \"danger\",\n value: JSON.stringify({\n requestId: event.requestId,\n decision: \"deny\",\n } satisfies SlackApprovalActionPayload),\n },\n ],\n },\n ];\n}\n\nexport function parseSlackApprovalActionPayload(\n value: unknown,\n): { requestId: string; decision: \"allow\" | \"deny\" } | null {\n if (!isNonEmptyString(value)) {\n return null;\n }\n try {\n const parsed = JSON.parse(value) as SlackApprovalActionPayload;\n if (\n !isNonEmptyString(parsed.requestId) ||\n (parsed.decision !== \"allow\" && parsed.decision !== \"deny\")\n ) {\n return null;\n }\n return { requestId: parsed.requestId, decision: parsed.decision };\n } catch {\n return null;\n }\n}\n\nexport function buildSlackApprovalDecisionBlocks(text: string): SlackBlock[] {\n return [\n {\n type: \"section\",\n text: { type: \"mrkdwn\", text },\n },\n ];\n}\n\nexport function shouldPostSlackTerminalError(stopReason: string): boolean {\n return ![\"end_turn\", \"cancelled\", \"requires_approval\", \"tool_rule\"].includes(\n stopReason,\n );\n}\n\nexport function formatSlackLifecycleErrorMessage(errorText: string): string {\n return formatChannelLifecycleErrorMessage(errorText, {\n codeBlock: true,\n maxLength: SLACK_LIFECYCLE_ERROR_TEXT_MAX,\n });\n}\n",
|
|
14
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",
|
|
15
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"
|
|
16
16
|
],
|
|
17
|
-
"mappings": "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",
|
|
18
|
-
"debugId": "
|
|
17
|
+
"mappings": "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",
|
|
18
|
+
"debugId": "F29FA1C9AF0A589064756E2164756E21",
|
|
19
19
|
"names": []
|
|
20
20
|
}
|
package/dist/gateway-core.js
CHANGED
|
@@ -795,7 +795,6 @@ function createChannelTurnProgressBuilder(options = {}) {
|
|
|
795
795
|
}
|
|
796
796
|
|
|
797
797
|
// src/channels/gateway-core.ts
|
|
798
|
-
var CHANNEL_GATEWAY_TOOL_SCOPE_ID = "channel-gateway";
|
|
799
798
|
var MAX_ACCEPTED_CLIENT_MESSAGE_IDS = 2048;
|
|
800
799
|
function runtimeKey(runtime) {
|
|
801
800
|
return `${runtime.agent_id}:${runtime.conversation_id}`;
|
|
@@ -830,23 +829,19 @@ function lifecycleOutcome(stopReason) {
|
|
|
830
829
|
}
|
|
831
830
|
return "error";
|
|
832
831
|
}
|
|
833
|
-
function errorFromDelta(message) {
|
|
834
|
-
const delta = message.delta;
|
|
835
|
-
if (delta.message_type !== "loop_error")
|
|
836
|
-
return;
|
|
837
|
-
return delta.message;
|
|
838
|
-
}
|
|
839
832
|
|
|
840
833
|
class ChannelGateway {
|
|
841
834
|
client;
|
|
842
835
|
hooks;
|
|
843
836
|
states = new Map;
|
|
844
837
|
disposers = [];
|
|
838
|
+
registrationQueue = Promise.resolve();
|
|
845
839
|
constructor(client, hooks) {
|
|
846
840
|
this.client = client;
|
|
847
841
|
this.hooks = hooks;
|
|
848
842
|
this.disposers.push(client.onMessage((message) => this.handleMessage(message)), client.onExternalToolCall((request) => {
|
|
849
|
-
const
|
|
843
|
+
const state = request.runtime ? this.states.get(runtimeKey(request.runtime)) : undefined;
|
|
844
|
+
const sources = state?.active?.sources ?? state?.routedSources ?? [];
|
|
850
845
|
return hooks.executeExternalTool(request, sources);
|
|
851
846
|
}));
|
|
852
847
|
}
|
|
@@ -877,7 +872,13 @@ class ChannelGateway {
|
|
|
877
872
|
disposition: "submitting"
|
|
878
873
|
});
|
|
879
874
|
try {
|
|
880
|
-
await this.
|
|
875
|
+
await this.enqueueRegistration(async () => {
|
|
876
|
+
state.routedSources = uniqueSources([
|
|
877
|
+
...state.routedSources,
|
|
878
|
+
...delivery.sources
|
|
879
|
+
]);
|
|
880
|
+
await this.performRuntimeRegistration(state, delivery);
|
|
881
|
+
});
|
|
881
882
|
const response = await this.client.submitInput({
|
|
882
883
|
runtime: delivery.runtime,
|
|
883
884
|
payload: {
|
|
@@ -889,7 +890,6 @@ class ChannelGateway {
|
|
|
889
890
|
client_message_id: delivery.clientMessageId
|
|
890
891
|
}
|
|
891
892
|
],
|
|
892
|
-
external_tool_scope_ids: [CHANNEL_GATEWAY_TOOL_SCOPE_ID],
|
|
893
893
|
image_failure_mode: "drop"
|
|
894
894
|
}
|
|
895
895
|
});
|
|
@@ -949,12 +949,15 @@ class ChannelGateway {
|
|
|
949
949
|
}
|
|
950
950
|
async registerRuntime(runtime, sources = [], defaultPermissionMode) {
|
|
951
951
|
const state = this.getState(runtime);
|
|
952
|
-
await this.
|
|
953
|
-
runtime,
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
952
|
+
await this.enqueueRegistration(async () => {
|
|
953
|
+
this.setRoutedSources(runtime, sources);
|
|
954
|
+
await this.performRuntimeRegistration(state, {
|
|
955
|
+
runtime,
|
|
956
|
+
content: "",
|
|
957
|
+
sources,
|
|
958
|
+
clientMessageId: "recovered",
|
|
959
|
+
...defaultPermissionMode ? { defaultPermissionMode } : {}
|
|
960
|
+
});
|
|
958
961
|
});
|
|
959
962
|
}
|
|
960
963
|
async submitApprovalResponse(runtime, response) {
|
|
@@ -964,6 +967,27 @@ class ChannelGateway {
|
|
|
964
967
|
});
|
|
965
968
|
return result.accepted;
|
|
966
969
|
}
|
|
970
|
+
setRoutedSources(runtime, sources) {
|
|
971
|
+
this.getState(runtime).routedSources = uniqueSources(sources);
|
|
972
|
+
}
|
|
973
|
+
getKnownRuntimes() {
|
|
974
|
+
return [...this.states.values()].map((state) => state.runtime);
|
|
975
|
+
}
|
|
976
|
+
updateRoutedRuntimeTools(updates, routedSources) {
|
|
977
|
+
return this.enqueueRegistration(async () => {
|
|
978
|
+
if (updates.length > 0) {
|
|
979
|
+
const response = await this.client.runtimeExternalToolsUpdate({
|
|
980
|
+
updates
|
|
981
|
+
});
|
|
982
|
+
if (!response.success) {
|
|
983
|
+
throw new Error(response.error ?? "Failed to update routed runtime tools");
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
for (const update of routedSources) {
|
|
987
|
+
this.setRoutedSources(update.runtime, update.sources);
|
|
988
|
+
}
|
|
989
|
+
});
|
|
990
|
+
}
|
|
967
991
|
getModelStatus(runtime) {
|
|
968
992
|
return this.states.get(runtimeKey(runtime))?.modelStatus ?? null;
|
|
969
993
|
}
|
|
@@ -985,6 +1009,7 @@ class ChannelGateway {
|
|
|
985
1009
|
active: null,
|
|
986
1010
|
registrationSignature: null,
|
|
987
1011
|
registration: null,
|
|
1012
|
+
routedSources: [],
|
|
988
1013
|
replayedControlRequestIds: new Set,
|
|
989
1014
|
submissionQueue: Promise.resolve(),
|
|
990
1015
|
hookQueue: null,
|
|
@@ -1018,7 +1043,16 @@ class ChannelGateway {
|
|
|
1018
1043
|
});
|
|
1019
1044
|
return pending;
|
|
1020
1045
|
}
|
|
1021
|
-
|
|
1046
|
+
enqueueRegistration(task) {
|
|
1047
|
+
const result = this.registrationQueue.then(task, task);
|
|
1048
|
+
this.registrationQueue = result.then(() => {
|
|
1049
|
+
return;
|
|
1050
|
+
}, () => {
|
|
1051
|
+
return;
|
|
1052
|
+
});
|
|
1053
|
+
return result;
|
|
1054
|
+
}
|
|
1055
|
+
async performRuntimeRegistration(state, delivery) {
|
|
1022
1056
|
const tool = await this.hooks.buildExternalTool(delivery.runtime, delivery.sources);
|
|
1023
1057
|
const signature = JSON.stringify({
|
|
1024
1058
|
mode: delivery.defaultPermissionMode ?? null,
|
|
@@ -1034,13 +1068,9 @@ class ChannelGateway {
|
|
|
1034
1068
|
recover_approvals: true,
|
|
1035
1069
|
force_device_status: false,
|
|
1036
1070
|
wait_for_replay: true,
|
|
1071
|
+
preserve_skill_sources: true,
|
|
1037
1072
|
client_info: { name: "channel-gateway", title: "Channel Gateway" },
|
|
1038
|
-
external_tools: [
|
|
1039
|
-
{
|
|
1040
|
-
scope_id: CHANNEL_GATEWAY_TOOL_SCOPE_ID,
|
|
1041
|
-
tools: [tool]
|
|
1042
|
-
}
|
|
1043
|
-
]
|
|
1073
|
+
external_tools: tool ? [{ tools: [tool] }] : []
|
|
1044
1074
|
}).then((response) => {
|
|
1045
1075
|
if (!response.success) {
|
|
1046
1076
|
throw new Error(response.error ?? "Failed to register channel runtime");
|
|
@@ -1129,6 +1159,8 @@ class ChannelGateway {
|
|
|
1129
1159
|
this.enqueueHook(state, () => this.hooks.onLifecycle(processingEvent));
|
|
1130
1160
|
}
|
|
1131
1161
|
handleStreamDelta(message) {
|
|
1162
|
+
if (message.subagent_id)
|
|
1163
|
+
return;
|
|
1132
1164
|
const state = this.getState(message.runtime);
|
|
1133
1165
|
const active = state.active;
|
|
1134
1166
|
if (!active)
|
|
@@ -1136,9 +1168,6 @@ class ChannelGateway {
|
|
|
1136
1168
|
const runId = runIdFromDelta(message);
|
|
1137
1169
|
if (runId)
|
|
1138
1170
|
active.runId = runId;
|
|
1139
|
-
const deltaError = errorFromDelta(message);
|
|
1140
|
-
if (deltaError)
|
|
1141
|
-
active.error = deltaError;
|
|
1142
1171
|
for (const update of active.progress.buildUpdates(message.delta)) {
|
|
1143
1172
|
this.enqueueHook(state, () => this.hooks.onProgress({
|
|
1144
1173
|
type: "progress",
|
|
@@ -1149,24 +1178,14 @@ class ChannelGateway {
|
|
|
1149
1178
|
}
|
|
1150
1179
|
active.richDraft?.handleDelta(message.delta);
|
|
1151
1180
|
const stopReason = stopReasonFromDelta(message);
|
|
1152
|
-
if (
|
|
1153
|
-
return;
|
|
1154
|
-
if (stopReason === "requires_approval") {
|
|
1181
|
+
if (stopReason === "requires_approval" || stopReason === "end_turn") {
|
|
1155
1182
|
active.richDraft?.flushPending();
|
|
1156
|
-
return;
|
|
1157
1183
|
}
|
|
1158
|
-
if (stopReason === "end_turn")
|
|
1159
|
-
active.richDraft?.flushPending();
|
|
1160
|
-
this.handleTurnFinished(message.runtime, {
|
|
1161
|
-
stopReason,
|
|
1162
|
-
runId: active.runId,
|
|
1163
|
-
error: errorFromDelta(message)
|
|
1164
|
-
});
|
|
1165
1184
|
}
|
|
1166
1185
|
handleTurnFinished(runtime, terminal) {
|
|
1167
1186
|
const state = this.getState(runtime);
|
|
1168
1187
|
const active = state.active;
|
|
1169
|
-
if (!active
|
|
1188
|
+
if (!active)
|
|
1170
1189
|
return;
|
|
1171
1190
|
state.active = null;
|
|
1172
1191
|
active.richDraft?.dispose();
|
|
@@ -1177,7 +1196,7 @@ class ChannelGateway {
|
|
|
1177
1196
|
outcome: lifecycleOutcome(terminal.stopReason),
|
|
1178
1197
|
stopReason: terminal.stopReason,
|
|
1179
1198
|
...terminal.runId ?? active.runId ? { runId: terminal.runId ?? active.runId } : {},
|
|
1180
|
-
...terminal.error
|
|
1199
|
+
...terminal.error ? { error: terminal.error } : {}
|
|
1181
1200
|
}));
|
|
1182
1201
|
}
|
|
1183
1202
|
handleControlRequest(message) {
|
|
@@ -2183,8 +2202,7 @@ function buildMessageChannelExternalToolDefinition(options) {
|
|
|
2183
2202
|
export {
|
|
2184
2203
|
executeMessageChannel,
|
|
2185
2204
|
buildMessageChannelExternalToolDefinition,
|
|
2186
|
-
ChannelGateway
|
|
2187
|
-
CHANNEL_GATEWAY_TOOL_SCOPE_ID
|
|
2205
|
+
ChannelGateway
|
|
2188
2206
|
};
|
|
2189
2207
|
|
|
2190
|
-
//# debugId=
|
|
2208
|
+
//# debugId=1A3C1825CA83009964756E2164756E21
|