@letta-ai/letta-code 0.32.12 → 0.32.14

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.
Files changed (137) hide show
  1. package/dist/agent-presets.js +1 -1
  2. package/dist/agent-presets.js.map +3 -3
  3. package/dist/channels-public.js +7 -7
  4. package/dist/channels-public.js.map +3 -3
  5. package/dist/channels-slack.js.map +2 -2
  6. package/dist/gateway-core.js +7 -7
  7. package/dist/gateway-core.js.map +3 -3
  8. package/dist/mcp-client.js +2 -2
  9. package/dist/mcp-client.js.map +1 -1
  10. package/dist/types/agent/approval-execution.d.ts.map +1 -1
  11. package/dist/types/agent/memory-filesystem.d.ts +3 -4
  12. package/dist/types/agent/memory-filesystem.d.ts.map +1 -1
  13. package/dist/types/agent/prompt-assets.d.ts +0 -1
  14. package/dist/types/agent/prompt-assets.d.ts.map +1 -1
  15. package/dist/types/agent/subagents/manager.d.ts.map +1 -1
  16. package/dist/types/agent/subagents/names.d.ts +1 -1
  17. package/dist/types/agent/subagents/names.d.ts.map +1 -1
  18. package/dist/types/agent/subagents/subagent-launcher.d.ts +2 -0
  19. package/dist/types/agent/subagents/subagent-launcher.d.ts.map +1 -1
  20. package/dist/types/agent/subagents/subagent-process.d.ts +23 -0
  21. package/dist/types/agent/subagents/subagent-process.d.ts.map +1 -0
  22. package/dist/types/agent/subagents/subagent-stream.d.ts +3 -0
  23. package/dist/types/agent/subagents/subagent-stream.d.ts.map +1 -1
  24. package/dist/types/backend/api/reflection-runs.d.ts +17 -0
  25. package/dist/types/backend/api/reflection-runs.d.ts.map +1 -0
  26. package/dist/types/backend/api/reflection.d.ts +22 -0
  27. package/dist/types/backend/api/reflection.d.ts.map +1 -0
  28. package/dist/types/backend/backend.d.ts +16 -0
  29. package/dist/types/backend/backend.d.ts.map +1 -1
  30. package/dist/types/backend/dev/headless-turn-executor.d.ts +8 -0
  31. package/dist/types/backend/dev/headless-turn-executor.d.ts.map +1 -1
  32. package/dist/types/backend/dev/pi-stream-adapter.d.ts.map +1 -1
  33. package/dist/types/backend/dev/pi-stream-output.d.ts +3 -0
  34. package/dist/types/backend/dev/pi-stream-output.d.ts.map +1 -0
  35. package/dist/types/backend/dev/provider-turn-executor.d.ts.map +1 -1
  36. package/dist/types/backend/local/local-backend.d.ts.map +1 -1
  37. package/dist/types/backend/local/local-executor-factory.d.ts +1 -1
  38. package/dist/types/backend/local/local-executor-factory.d.ts.map +1 -1
  39. package/dist/types/backend/local/local-message.d.ts +2 -1
  40. package/dist/types/backend/local/local-message.d.ts.map +1 -1
  41. package/dist/types/backend/local/local-store.d.ts.map +1 -1
  42. package/dist/types/backend/local/local-stream-chunks.d.ts +13 -0
  43. package/dist/types/backend/local/local-stream-chunks.d.ts.map +1 -1
  44. package/dist/types/channels/progress-formatting.d.ts.map +1 -1
  45. package/dist/types/cli/helpers/stream-processor.d.ts +7 -2
  46. package/dist/types/cli/helpers/stream-processor.d.ts.map +1 -1
  47. package/dist/types/cli/helpers/stream.d.ts +7 -5
  48. package/dist/types/cli/helpers/stream.d.ts.map +1 -1
  49. package/dist/types/cli/helpers/tool-name-mapping.d.ts +1 -2
  50. package/dist/types/cli/helpers/tool-name-mapping.d.ts.map +1 -1
  51. package/dist/types/hooks/executor.d.ts +5 -0
  52. package/dist/types/hooks/executor.d.ts.map +1 -1
  53. package/dist/types/hooks/index.d.ts.map +1 -1
  54. package/dist/types/permissions/canonical.d.ts.map +1 -1
  55. package/dist/types/permissions/checker.d.ts.map +1 -1
  56. package/dist/types/permissions/cross-agent-guard.d.ts +1 -1
  57. package/dist/types/permissions/cross-agent-guard.d.ts.map +1 -1
  58. package/dist/types/permissions/mode.d.ts.map +1 -1
  59. package/dist/types/permissions/workspace-sandbox.d.ts.map +1 -1
  60. package/dist/types/providers/byok-providers.d.ts +1 -0
  61. package/dist/types/providers/byok-providers.d.ts.map +1 -1
  62. package/dist/types/settings-manager.d.ts.map +1 -1
  63. package/dist/types/telemetry/index.d.ts +16 -1
  64. package/dist/types/telemetry/index.d.ts.map +1 -1
  65. package/dist/types/tools/filter.d.ts +0 -10
  66. package/dist/types/tools/filter.d.ts.map +1 -1
  67. package/dist/types/tools/impl/bash-output.d.ts.map +1 -1
  68. package/dist/types/tools/impl/bash.d.ts.map +1 -1
  69. package/dist/types/tools/impl/enter-worktree.d.ts.map +1 -1
  70. package/dist/types/tools/impl/exec-command.d.ts.map +1 -1
  71. package/dist/types/tools/impl/process_manager.d.ts +2 -0
  72. package/dist/types/tools/impl/process_manager.d.ts.map +1 -1
  73. package/dist/types/tools/impl/shell-command.d.ts.map +1 -1
  74. package/dist/types/tools/impl/shell-sandbox.d.ts +1 -2
  75. package/dist/types/tools/impl/shell-sandbox.d.ts.map +1 -1
  76. package/dist/types/tools/impl/task-stop.d.ts.map +1 -1
  77. package/dist/types/tools/impl/task.d.ts.map +1 -1
  78. package/dist/types/tools/impl/tool-return-clamp.d.ts.map +1 -1
  79. package/dist/types/tools/impl/truncation.d.ts +5 -2
  80. package/dist/types/tools/impl/truncation.d.ts.map +1 -1
  81. package/dist/types/tools/impl/worktree-git.d.ts +14 -0
  82. package/dist/types/tools/impl/worktree-git.d.ts.map +1 -1
  83. package/dist/types/tools/manager.d.ts +4 -13
  84. package/dist/types/tools/manager.d.ts.map +1 -1
  85. package/dist/types/tools/tool-definitions.d.ts +0 -21
  86. package/dist/types/tools/tool-definitions.d.ts.map +1 -1
  87. package/dist/types/tools/tool-permissions.d.ts.map +1 -1
  88. package/dist/types/tools/toolset-catalog.d.ts +13 -0
  89. package/dist/types/tools/toolset-catalog.d.ts.map +1 -0
  90. package/dist/types/tools/toolset.d.ts +10 -27
  91. package/dist/types/tools/toolset.d.ts.map +1 -1
  92. package/dist/types/types/protocol_v2.d.ts +2 -2
  93. package/dist/types/types/protocol_v2.d.ts.map +1 -1
  94. package/dist/types/types/provider-oauth-config.d.ts +24 -0
  95. package/dist/types/types/provider-oauth-config.d.ts.map +1 -0
  96. package/dist/types/types/toolset-protocol.d.ts +1 -1
  97. package/dist/types/types/toolset-protocol.d.ts.map +1 -1
  98. package/dist/types/utils/frontmatter.d.ts.map +1 -1
  99. package/dist/types/websocket/listener/listener-constants.d.ts.map +1 -1
  100. package/docs/examples/mods/memory-citations.ts +0 -2
  101. package/letta.js +2 -2
  102. package/package.json +2 -2
  103. package/scripts/build-pypi.py +172 -0
  104. package/scripts/isolated-unit-tests.json +15 -5
  105. package/scripts/smoke-pypi.py +236 -0
  106. package/scripts/source-file-size-baseline.json +14 -14
  107. package/scripts/stage-pypi-deps.mjs +90 -0
  108. package/skills/creating-mods/references/plan-mode.md +3 -9
  109. package/skills/finding-agents/SKILL.md +6 -2
  110. package/skills/letta-guide/SKILL.md +21 -2
  111. package/skills/self-configuration/SKILL.md +1 -1
  112. package/skills/syncing-memory-filesystem/SKILL.md +2 -3
  113. package/vendor/ink-text-input/build/index.js +10 -2
  114. package/dist/types/tools/impl/glob-gemini.d.ts +0 -16
  115. package/dist/types/tools/impl/glob-gemini.d.ts.map +0 -1
  116. package/dist/types/tools/impl/list-directory-gemini.d.ts +0 -17
  117. package/dist/types/tools/impl/list-directory-gemini.d.ts.map +0 -1
  118. package/dist/types/tools/impl/read-file-gemini.d.ts +0 -14
  119. package/dist/types/tools/impl/read-file-gemini.d.ts.map +0 -1
  120. package/dist/types/tools/impl/read-many-files-gemini.d.ts +0 -19
  121. package/dist/types/tools/impl/read-many-files-gemini.d.ts.map +0 -1
  122. package/dist/types/tools/impl/replace-gemini.d.ts +0 -15
  123. package/dist/types/tools/impl/replace-gemini.d.ts.map +0 -1
  124. package/dist/types/tools/impl/run-shell-command-gemini.d.ts +0 -18
  125. package/dist/types/tools/impl/run-shell-command-gemini.d.ts.map +0 -1
  126. package/dist/types/tools/impl/search-file-content-gemini.d.ts +0 -14
  127. package/dist/types/tools/impl/search-file-content-gemini.d.ts.map +0 -1
  128. package/dist/types/tools/impl/write-file-gemini.d.ts +0 -13
  129. package/dist/types/tools/impl/write-file-gemini.d.ts.map +0 -1
  130. package/dist/types/tools/impl/write-todos-gemini.d.ts +0 -16
  131. package/dist/types/tools/impl/write-todos-gemini.d.ts.map +0 -1
  132. package/dist/types/tools/letta-toolset.d.ts +0 -10
  133. package/dist/types/tools/letta-toolset.d.ts.map +0 -1
  134. package/dist/types/tools/toolset-defaults.d.ts +0 -9
  135. package/dist/types/tools/toolset-defaults.d.ts.map +0 -1
  136. package/dist/types/tools/toolset-options.d.ts +0 -4
  137. package/dist/types/tools/toolset-options.d.ts.map +0 -1
@@ -15,13 +15,13 @@
15
15
  "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",
16
16
  "const CONVERSATION_BUSY_ERROR_PATTERNS = [\n /another request is (?:currently )?(?:being )?processed/i,\n /currently being processed for this conversation/i,\n /busy with another active run/i,\n /already processing for this conversation/i,\n /turn still running/i,\n];\n\nexport const CONVERSATION_BUSY_TITLE = \"Turn still running\";\n\nexport function isConversationBusyErrorText(\n errorText: string | null | undefined,\n): boolean {\n if (!errorText) return false;\n return CONVERSATION_BUSY_ERROR_PATTERNS.some((pattern) =>\n pattern.test(errorText),\n );\n}\n\nexport function buildConversationBusyErrorBody(\n automaticRetry: boolean,\n): string {\n return automaticRetry\n ? \"Another request is already processing for this conversation. I’ll wait for it to finish and retry automatically.\"\n : \"Another request is already processing for this conversation. Please wait for it to finish, then try again.\";\n}\n\nexport function formatConversationBusyErrorMessage(options: {\n automaticRetry?: boolean;\n runId?: string;\n}): string {\n const lines = [\n CONVERSATION_BUSY_TITLE,\n buildConversationBusyErrorBody(options.automaticRetry ?? false),\n ];\n if (options.runId) {\n lines.push(\"\", `Run ID: ${options.runId}`);\n }\n return lines.join(\"\\n\");\n}\n",
17
17
  "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",
18
- "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",
18
+ "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 );\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 );\n}\n\nfunction isGlobTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return normalized === \"glob\";\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 );\n}\n\nfunction isFileWriteTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return normalized === \"write\";\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 === \"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",
19
19
  "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 const descriptions =\n event.toolBatchTitle !== undefined\n ? [event.toolBatchTitle]\n : [event.toolTitle, event.toolDetails];\n for (const description of descriptions) {\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",
20
20
  "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",
21
21
  "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",
22
22
  "import type {\n ChannelTurnLifecycleEvent,\n ChannelTurnSource,\n OutboundChannelMessage,\n} from \"@/channels/types\";\nimport { SLACK_ASSISTANT_STARTUP_STATUS } from \"./progress\";\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 handleLifecycle: (event: ChannelTurnLifecycleEvent) => Promise<void>;\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 /** Transfer ownership without allowing old writes to clear the new owner. */\n relinquish: (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 revisionByConversation = new Map<string, number>();\n const relinquishedThroughRevision = new Map<string, number>();\n const outstandingWrites = new Map<\n string,\n Set<{ replyKey: string; revision: number }>\n >();\n let nextRevision = 0;\n\n function advanceRevision(key: string): number {\n const revision = ++nextRevision;\n revisionByConversation.set(key, revision);\n return revision;\n }\n\n function currentRevision(key: string): number {\n return revisionByConversation.get(key) ?? advanceRevision(key);\n }\n\n function ownedReplyKey(key: string): string | null {\n const source = sourceByConversation.get(key);\n return source ? getLifecycleReplyKey(source) : null;\n }\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 // State objects are mutable. Capture a revision before either asynchronous\n // preparation or the write queue, rather than comparing object identity.\n const revision = currentRevision(stateKey);\n const revocationKey = JSON.stringify([stateKey, replyKey]);\n const canWrite = (): boolean => {\n const current = revisionByConversation.get(stateKey);\n if (\n current === undefined ||\n revision <= (relinquishedThroughRevision.get(revocationKey) ?? 0)\n )\n return false;\n const active = stateByConversation.get(stateKey)?.isThinkingActive;\n if (footerText) {\n return (\n current === revision &&\n Boolean(active) &&\n ownedReplyKey(stateKey) === replyKey\n );\n }\n // An obsolete clear may still clean its OLD thread, but must never blank\n // newer activity occupying that same Slack thread.\n return (\n current === revision || !active || ownedReplyKey(stateKey) !== replyKey\n );\n };\n const signature = `${revision}\\n${replyKey}\\n${footerText}\\n${loadingText}`;\n if (!options.force && signatureByConversation.get(stateKey) === signature) {\n return true;\n }\n\n // Normal reply cleanup drops activeSources, but a later handoff still\n // needs the exact identity of writes that can issue a correction.\n const writes = outstandingWrites.get(stateKey) ?? new Set();\n const pendingWrite = { replyKey, revision };\n writes.add(pendingWrite);\n outstandingWrites.set(stateKey, writes);\n try {\n await params.ensureApp();\n const slackClient = await params.ensureWriteClient();\n const setStatus = slackClient.assistant?.threads?.setStatus;\n if (!setStatus || !canWrite()) return false;\n\n if (revisionByConversation.get(stateKey) === revision) {\n signatureByConversation.set(stateKey, signature);\n }\n const previous =\n writePromiseByConversation.get(stateKey) ?? Promise.resolve();\n const operation = previous.then(async () => {\n // Source, title, reply or completion may have changed while queued.\n if (!canWrite()) {\n if (signatureByConversation.get(stateKey) === signature) {\n signatureByConversation.delete(stateKey);\n }\n return false;\n }\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 // The request may have applied after a reply auto-cleared Slack. Keep\n // this correction in the same write queue, ahead of any new activity.\n const state = stateByConversation.get(stateKey);\n if (\n footerText &&\n revision > (relinquishedThroughRevision.get(revocationKey) ?? 0) &&\n state &&\n (!state.isThinkingActive || ownedReplyKey(stateKey) !== replyKey)\n ) {\n await setStatus.call(slackClient.assistant?.threads, {\n channel_id: source.chatId,\n thread_ts: threadTs,\n status: \"\",\n });\n clearedStaleReplyKeys.add(replyKey);\n return true;\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 await operation;\n } finally {\n writes.delete(pendingWrite);\n if (writes.size === 0 && outstandingWrites.get(stateKey) === writes)\n outstandingWrites.delete(stateKey);\n }\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 const revision = currentRevision(key);\n await writeStatus(source, state.typingFooterText, state.thinkingText, {\n force: true,\n });\n if (\n revisionByConversation.get(key) === revision &&\n state.isThinkingActive\n )\n 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 ownedReplyKey(key) === getLifecycleReplyKey(source)\n ) {\n sourceByConversation.set(key, source);\n return;\n }\n const revision = advanceRevision(key);\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 (revisionByConversation.get(key) !== revision) return;\n if (sent && state.isThinkingActive) scheduleKeepalive(key);\n else if (!sent) state.isThinkingActive = false;\n }\n\n function markAutoClearedByKey(key: string): void {\n advanceRevision(key);\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 if (\n stateByConversation.get(key)?.isThinkingActive &&\n ownedReplyKey(key) !== getLifecycleReplyKey(source)\n ) {\n await writeStatus(source, \"\", \"\", { force: true });\n return;\n }\n const revision = advanceRevision(key);\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 if (revisionByConversation.get(key) !== revision) return;\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 const revision = currentRevision(key);\n await writeStatus(source, \"\", \"\", { force: true });\n if (revisionByConversation.get(key) === revision)\n signatureByConversation.delete(key);\n }\n\n async function refresh(source: ChannelTurnSource): Promise<boolean> {\n const key = getConversationKey(source);\n const state = key ? stateByConversation.get(key) : undefined;\n if (\n !key ||\n !state?.isThinkingActive ||\n ownedReplyKey(key) !== getLifecycleReplyKey(source)\n )\n return false;\n const revision = currentRevision(key);\n await writeStatus(source, state.typingFooterText, state.thinkingText, {\n force: true,\n });\n if (\n revisionByConversation.get(key) === revision &&\n state.isThinkingActive\n ) {\n scheduleKeepalive(key);\n }\n return true;\n }\n\n async function handleLifecycle(\n event: ChannelTurnLifecycleEvent,\n ): Promise<void> {\n if (event.type === \"queued\") {\n if (await refresh(event.source)) return;\n if (event.source.showStartupStatus) {\n await activate(\n event.source,\n SLACK_ASSISTANT_STARTUP_STATUS,\n SLACK_ASSISTANT_STARTUP_STATUS,\n );\n }\n return;\n }\n for (const source of getUniqueSources(event.sources)) {\n if (event.type === \"processing\") {\n await clearStale(source);\n } else if (event.stopReason !== \"requires_approval\") {\n const remaining = event.remainingSources?.some(\n (other) =>\n other.accountId === source.accountId &&\n getConversationKey(other) === getConversationKey(source) &&\n getLifecycleReplyKey(other) === getLifecycleReplyKey(source),\n );\n if (!remaining) await deactivate(source);\n }\n }\n }\n\n return {\n handleLifecycle,\n getUniqueSources,\n getLifecycleErrorReplyKey,\n activate,\n deactivate,\n clearStale,\n relinquish(source): void {\n const key = getConversationKey(source);\n const replyKey = getLifecycleReplyKey(source);\n if (!key || !replyKey) return;\n const ownsCurrent = ownedReplyKey(key) === replyKey;\n let cutoff = ownsCurrent ? currentRevision(key) : 0;\n for (const write of outstandingWrites.get(key) ?? []) {\n if (write.replyKey === replyKey)\n cutoff = Math.max(cutoff, write.revision);\n }\n if (!cutoff) return;\n const revocationKey = JSON.stringify([key, replyKey]);\n relinquishedThroughRevision.set(\n revocationKey,\n Math.max(relinquishedThroughRevision.get(revocationKey) ?? 0, cutoff),\n );\n // A late relinquish of A may invalidate A's outstanding work, never B's\n // newer active state or keepalive.\n if (ownsCurrent) markAutoClearedByKey(key);\n },\n markAutoCleared(source): void {\n const key = getConversationKey(source);\n if (key && ownedReplyKey(key) === getLifecycleReplyKey(source)) {\n markAutoClearedByKey(key);\n }\n },\n markAutoClearedForMessage(msg): void {\n if (\n isNonEmptyString(msg.agentId) &&\n isNonEmptyString(msg.conversationId)\n ) {\n const key = `${msg.agentId}:${msg.conversationId}`;\n const anchor = firstNonEmptyString(msg.threadId, msg.replyToMessageId);\n // Anchored completion belongs to the thread that was actually posted\n // to. Preserve the existing agent-level behavior for unanchored sends.\n if (\n anchor &&\n ownedReplyKey(key) !==\n `${msg.chatId}:${params.resolveKnownThreadRoot(anchor)}`\n )\n return;\n markAutoClearedByKey(key);\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 revisionByConversation.clear();\n sourceByConversation.clear();\n signatureByConversation.clear();\n writePromiseByConversation.clear();\n keepaliveByConversation.clear();\n clearedStaleReplyKeys.clear();\n },\n };\n}\n"
23
23
  ],
24
- "mappings": "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",
24
+ "mappings": "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",
25
25
  "debugId": "86A56A5D8A2A94E164756E2164756E21",
26
26
  "names": []
27
27
  }
@@ -592,7 +592,7 @@ function isTaskTool(name) {
592
592
  }
593
593
  function isShellTool(name) {
594
594
  const normalized = name.toLowerCase();
595
- return normalized === "bash" || normalized === "exec_command" || normalized === "shell_command" || normalized === "shell" || normalized === "runshellcommand";
595
+ return normalized === "bash" || normalized === "exec_command" || normalized === "shell_command" || normalized === "shell";
596
596
  }
597
597
  function isWebSearchTool(name) {
598
598
  const normalized = name.toLowerCase();
@@ -600,23 +600,23 @@ function isWebSearchTool(name) {
600
600
  }
601
601
  function isSearchTool(name) {
602
602
  const normalized = name.toLowerCase();
603
- return normalized === "grep" || normalized === "grep_files" || normalized === "grepfiles" || normalized === "search_file_content" || normalized === "searchfilecontent";
603
+ return normalized === "grep" || normalized === "grep_files" || normalized === "grepfiles";
604
604
  }
605
605
  function isGlobTool(name) {
606
606
  const normalized = name.toLowerCase();
607
- return normalized === "glob" || normalized === "glob_gemini";
607
+ return normalized === "glob";
608
608
  }
609
609
  function isFileReadTool(name) {
610
610
  const normalized = name.toLowerCase();
611
- return normalized === "read" || normalized === "read_file" || normalized === "readfile" || normalized === "read_file_gemini" || normalized === "readfilegemini";
611
+ return normalized === "read" || normalized === "read_file" || normalized === "readfile";
612
612
  }
613
613
  function isFileWriteTool(name) {
614
614
  const normalized = name.toLowerCase();
615
- return normalized === "write" || normalized === "write_file" || normalized === "writefile" || normalized === "write_file_gemini" || normalized === "writefilegemini";
615
+ return normalized === "write";
616
616
  }
617
617
  function isFileEditTool(name) {
618
618
  const normalized = name.toLowerCase();
619
- return normalized === "edit" || normalized === "multi_edit" || normalized === "multiedit" || normalized === "replace" || normalized === "apply_patch" || normalized === "applypatch";
619
+ return normalized === "edit" || normalized === "multi_edit" || normalized === "multiedit" || normalized === "applypatch";
620
620
  }
621
621
  function getPathBaseName(filePath) {
622
622
  return filePath.split(/[\\/]/).filter(Boolean).pop() ?? filePath;
@@ -3103,4 +3103,4 @@ export {
3103
3103
  ChannelControlRequestCoordinator
3104
3104
  };
3105
3105
 
3106
- //# debugId=4672AE632A7F690464756E2164756E21
3106
+ //# debugId=4F5D89C30BEF7B7A64756E2164756E21