@letta-ai/letta-code 0.30.6 → 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.
Files changed (274) hide show
  1. package/dist/agent-presets.js.map +1 -1
  2. package/dist/app-server-client.cjs +12 -2
  3. package/dist/app-server-client.cjs.map +4 -4
  4. package/dist/app-server-client.js +12 -2
  5. package/dist/app-server-client.js.map +4 -4
  6. package/dist/channels-public.js +210 -39
  7. package/dist/channels-public.js.map +7 -4
  8. package/dist/channels-slack.js +1 -1
  9. package/dist/channels-slack.js.map +3 -3
  10. package/dist/gateway-core.js +60 -42
  11. package/dist/gateway-core.js.map +3 -3
  12. package/dist/mcp-client.js +2 -2
  13. package/dist/mcp-client.js.map +1 -1
  14. package/dist/types/agent/approval-execution.d.ts +0 -2
  15. package/dist/types/agent/approval-execution.d.ts.map +1 -1
  16. package/dist/types/agent/subagents/manager.d.ts.map +1 -1
  17. package/dist/types/agent/subagents/subagent-launcher.d.ts +0 -5
  18. package/dist/types/agent/subagents/subagent-launcher.d.ts.map +1 -1
  19. package/dist/types/app-server-client.d.ts +4 -1
  20. package/dist/types/app-server-client.d.ts.map +1 -1
  21. package/dist/types/channels/gateway-core.d.ts +14 -4
  22. package/dist/types/channels/gateway-core.d.ts.map +1 -1
  23. package/dist/types/channels/processor.d.ts.map +1 -1
  24. package/dist/types/channels/slack/presentation.d.ts.map +1 -1
  25. package/dist/types/cli/helpers/stream-processor.d.ts +6 -0
  26. package/dist/types/cli/helpers/stream-processor.d.ts.map +1 -1
  27. package/dist/types/cli/helpers/stream-resume.d.ts +33 -0
  28. package/dist/types/cli/helpers/stream-resume.d.ts.map +1 -0
  29. package/dist/types/cli/helpers/stream.d.ts +5 -30
  30. package/dist/types/cli/helpers/stream.d.ts.map +1 -1
  31. package/dist/types/constants.d.ts +1 -1
  32. package/dist/types/constants.d.ts.map +1 -1
  33. package/dist/types/gateway-core.d.ts +1 -1
  34. package/dist/types/gateway-core.d.ts.map +1 -1
  35. package/dist/types/runtime-context.d.ts +0 -9
  36. package/dist/types/runtime-context.d.ts.map +1 -1
  37. package/dist/types/tools/manager.d.ts +4 -11
  38. package/dist/types/tools/manager.d.ts.map +1 -1
  39. package/dist/types/tools/tool-definitions.d.ts +0 -1
  40. package/dist/types/tools/tool-definitions.d.ts.map +1 -1
  41. package/dist/types/tools/toolset.d.ts +1 -5
  42. package/dist/types/tools/toolset.d.ts.map +1 -1
  43. package/dist/types/types/app-server-info.d.ts +1 -0
  44. package/dist/types/types/app-server-info.d.ts.map +1 -1
  45. package/dist/types/types/external-tool-protocol.d.ts +61 -0
  46. package/dist/types/types/external-tool-protocol.d.ts.map +1 -0
  47. package/dist/types/types/protocol_v2.d.ts +7 -55
  48. package/dist/types/types/protocol_v2.d.ts.map +1 -1
  49. package/dist/types/types/runtime-scope.d.ts +18 -0
  50. package/dist/types/types/runtime-scope.d.ts.map +1 -0
  51. package/dist/types/websocket/listener/runtime.d.ts.map +1 -1
  52. package/dist/types/websocket/listener/types.d.ts +7 -0
  53. package/dist/types/websocket/listener/types.d.ts.map +1 -1
  54. package/letta.js +105615 -105454
  55. package/package.json +1 -1
  56. package/scripts/source-file-size-baseline.json +6 -7
  57. package/dist/types/channels/access-control.d.ts +0 -104
  58. package/dist/types/channels/access-control.d.ts.map +0 -1
  59. package/dist/types/channels/accounts.d.ts +0 -17
  60. package/dist/types/channels/accounts.d.ts.map +0 -1
  61. package/dist/types/channels/commands.d.ts +0 -98
  62. package/dist/types/channels/commands.d.ts.map +0 -1
  63. package/dist/types/channels/config.d.ts +0 -18
  64. package/dist/types/channels/config.d.ts.map +0 -1
  65. package/dist/types/channels/credential-store.d.ts +0 -21
  66. package/dist/types/channels/credential-store.d.ts.map +0 -1
  67. package/dist/types/channels/custom/adapter.d.ts +0 -3
  68. package/dist/types/channels/custom/adapter.d.ts.map +0 -1
  69. package/dist/types/channels/custom/plugin.d.ts +0 -10
  70. package/dist/types/channels/custom/plugin.d.ts.map +0 -1
  71. package/dist/types/channels/discord/account-display.d.ts +0 -2
  72. package/dist/types/channels/discord/account-display.d.ts.map +0 -1
  73. package/dist/types/channels/discord/adapter.d.ts +0 -3
  74. package/dist/types/channels/discord/adapter.d.ts.map +0 -1
  75. package/dist/types/channels/discord/bot-policy.d.ts +0 -19
  76. package/dist/types/channels/discord/bot-policy.d.ts.map +0 -1
  77. package/dist/types/channels/discord/channel-gating.d.ts +0 -41
  78. package/dist/types/channels/discord/channel-gating.d.ts.map +0 -1
  79. package/dist/types/channels/discord/error-reply.d.ts +0 -24
  80. package/dist/types/channels/discord/error-reply.d.ts.map +0 -1
  81. package/dist/types/channels/discord/internal-types.d.ts +0 -101
  82. package/dist/types/channels/discord/internal-types.d.ts.map +0 -1
  83. package/dist/types/channels/discord/media.d.ts +0 -47
  84. package/dist/types/channels/discord/media.d.ts.map +0 -1
  85. package/dist/types/channels/discord/message-actions.d.ts +0 -3
  86. package/dist/types/channels/discord/message-actions.d.ts.map +0 -1
  87. package/dist/types/channels/discord/plugin.d.ts +0 -3
  88. package/dist/types/channels/discord/plugin.d.ts.map +0 -1
  89. package/dist/types/channels/discord/runtime.d.ts +0 -28
  90. package/dist/types/channels/discord/runtime.d.ts.map +0 -1
  91. package/dist/types/channels/discord/setup.d.ts +0 -2
  92. package/dist/types/channels/discord/setup.d.ts.map +0 -1
  93. package/dist/types/channels/discord/utils.d.ts +0 -47
  94. package/dist/types/channels/discord/utils.d.ts.map +0 -1
  95. package/dist/types/channels/feedback.d.ts +0 -26
  96. package/dist/types/channels/feedback.d.ts.map +0 -1
  97. package/dist/types/channels/inbound-debounce.d.ts +0 -50
  98. package/dist/types/channels/inbound-debounce.d.ts.map +0 -1
  99. package/dist/types/channels/interactive.d.ts +0 -13
  100. package/dist/types/channels/interactive.d.ts.map +0 -1
  101. package/dist/types/channels/lifecycle-error-report.d.ts +0 -19
  102. package/dist/types/channels/lifecycle-error-report.d.ts.map +0 -1
  103. package/dist/types/channels/message-tool.d.ts +0 -15
  104. package/dist/types/channels/message-tool.d.ts.map +0 -1
  105. package/dist/types/channels/pairing.d.ts +0 -53
  106. package/dist/types/channels/pairing.d.ts.map +0 -1
  107. package/dist/types/channels/pending-control-requests.d.ts +0 -12
  108. package/dist/types/channels/pending-control-requests.d.ts.map +0 -1
  109. package/dist/types/channels/plugin-registry.d.ts +0 -9
  110. package/dist/types/channels/plugin-registry.d.ts.map +0 -1
  111. package/dist/types/channels/registry-commands.d.ts +0 -52
  112. package/dist/types/channels/registry-commands.d.ts.map +0 -1
  113. package/dist/types/channels/registry-controls.d.ts +0 -33
  114. package/dist/types/channels/registry-controls.d.ts.map +0 -1
  115. package/dist/types/channels/registry-events.d.ts +0 -27
  116. package/dist/types/channels/registry-events.d.ts.map +0 -1
  117. package/dist/types/channels/registry-handlers.d.ts +0 -46
  118. package/dist/types/channels/registry-handlers.d.ts.map +0 -1
  119. package/dist/types/channels/registry-inbound.d.ts +0 -19
  120. package/dist/types/channels/registry-inbound.d.ts.map +0 -1
  121. package/dist/types/channels/registry-presentation.d.ts +0 -20
  122. package/dist/types/channels/registry-presentation.d.ts.map +0 -1
  123. package/dist/types/channels/registry-routes.d.ts +0 -33
  124. package/dist/types/channels/registry-routes.d.ts.map +0 -1
  125. package/dist/types/channels/registry.d.ts +0 -130
  126. package/dist/types/channels/registry.d.ts.map +0 -1
  127. package/dist/types/channels/restore-scope.d.ts +0 -8
  128. package/dist/types/channels/restore-scope.d.ts.map +0 -1
  129. package/dist/types/channels/routing.d.ts +0 -74
  130. package/dist/types/channels/routing.d.ts.map +0 -1
  131. package/dist/types/channels/runtime-deps.d.ts +0 -25
  132. package/dist/types/channels/runtime-deps.d.ts.map +0 -1
  133. package/dist/types/channels/schema-config.d.ts +0 -33
  134. package/dist/types/channels/schema-config.d.ts.map +0 -1
  135. package/dist/types/channels/signal/account-conflicts.d.ts +0 -14
  136. package/dist/types/channels/signal/account-conflicts.d.ts.map +0 -1
  137. package/dist/types/channels/signal/adapter.d.ts +0 -40
  138. package/dist/types/channels/signal/adapter.d.ts.map +0 -1
  139. package/dist/types/channels/signal/client.d.ts +0 -51
  140. package/dist/types/channels/signal/client.d.ts.map +0 -1
  141. package/dist/types/channels/signal/inbound.d.ts +0 -25
  142. package/dist/types/channels/signal/inbound.d.ts.map +0 -1
  143. package/dist/types/channels/signal/internal-types.d.ts +0 -82
  144. package/dist/types/channels/signal/internal-types.d.ts.map +0 -1
  145. package/dist/types/channels/signal/media.d.ts +0 -35
  146. package/dist/types/channels/signal/media.d.ts.map +0 -1
  147. package/dist/types/channels/signal/message-actions.d.ts +0 -3
  148. package/dist/types/channels/signal/message-actions.d.ts.map +0 -1
  149. package/dist/types/channels/signal/plugin.d.ts +0 -3
  150. package/dist/types/channels/signal/plugin.d.ts.map +0 -1
  151. package/dist/types/channels/signal/runtime.d.ts +0 -14
  152. package/dist/types/channels/signal/runtime.d.ts.map +0 -1
  153. package/dist/types/channels/signal/setup-runtime.d.ts +0 -35
  154. package/dist/types/channels/signal/setup-runtime.d.ts.map +0 -1
  155. package/dist/types/channels/signal/setup.d.ts +0 -5
  156. package/dist/types/channels/signal/setup.d.ts.map +0 -1
  157. package/dist/types/channels/signal/target.d.ts +0 -21
  158. package/dist/types/channels/signal/target.d.ts.map +0 -1
  159. package/dist/types/channels/slack/account-display.d.ts +0 -2
  160. package/dist/types/channels/slack/account-display.d.ts.map +0 -1
  161. package/dist/types/channels/slack/adapter.d.ts +0 -12
  162. package/dist/types/channels/slack/adapter.d.ts.map +0 -1
  163. package/dist/types/channels/slack/agent-thread-tracker.d.ts +0 -13
  164. package/dist/types/channels/slack/agent-thread-tracker.d.ts.map +0 -1
  165. package/dist/types/channels/slack/approval-controller.d.ts +0 -14
  166. package/dist/types/channels/slack/approval-controller.d.ts.map +0 -1
  167. package/dist/types/channels/slack/attachment-download.d.ts +0 -20
  168. package/dist/types/channels/slack/attachment-download.d.ts.map +0 -1
  169. package/dist/types/channels/slack/attachment-stream.d.ts +0 -23
  170. package/dist/types/channels/slack/attachment-stream.d.ts.map +0 -1
  171. package/dist/types/channels/slack/attachment-task.d.ts +0 -37
  172. package/dist/types/channels/slack/attachment-task.d.ts.map +0 -1
  173. package/dist/types/channels/slack/attachment-types.d.ts +0 -27
  174. package/dist/types/channels/slack/attachment-types.d.ts.map +0 -1
  175. package/dist/types/channels/slack/bot-policy.d.ts +0 -25
  176. package/dist/types/channels/slack/bot-policy.d.ts.map +0 -1
  177. package/dist/types/channels/slack/file-upload.d.ts +0 -6
  178. package/dist/types/channels/slack/file-upload.d.ts.map +0 -1
  179. package/dist/types/channels/slack/inbound-debounce.d.ts +0 -16
  180. package/dist/types/channels/slack/inbound-debounce.d.ts.map +0 -1
  181. package/dist/types/channels/slack/ingress-controller.d.ts +0 -21
  182. package/dist/types/channels/slack/ingress-controller.d.ts.map +0 -1
  183. package/dist/types/channels/slack/media.d.ts +0 -63
  184. package/dist/types/channels/slack/media.d.ts.map +0 -1
  185. package/dist/types/channels/slack/message-actions.d.ts +0 -2
  186. package/dist/types/channels/slack/message-actions.d.ts.map +0 -1
  187. package/dist/types/channels/slack/model-picker-blocks.d.ts +0 -9
  188. package/dist/types/channels/slack/model-picker-blocks.d.ts.map +0 -1
  189. package/dist/types/channels/slack/plugin.d.ts +0 -3
  190. package/dist/types/channels/slack/plugin.d.ts.map +0 -1
  191. package/dist/types/channels/slack/proactive-accounts.d.ts +0 -15
  192. package/dist/types/channels/slack/proactive-accounts.d.ts.map +0 -1
  193. package/dist/types/channels/slack/runtime.d.ts +0 -6
  194. package/dist/types/channels/slack/runtime.d.ts.map +0 -1
  195. package/dist/types/channels/slack/setup.d.ts +0 -2
  196. package/dist/types/channels/slack/setup.d.ts.map +0 -1
  197. package/dist/types/channels/slack/target-resolution.d.ts +0 -52
  198. package/dist/types/channels/slack/target-resolution.d.ts.map +0 -1
  199. package/dist/types/channels/slack/thread-context.d.ts +0 -15
  200. package/dist/types/channels/slack/thread-context.d.ts.map +0 -1
  201. package/dist/types/channels/slack/web-api-client.d.ts +0 -2
  202. package/dist/types/channels/slack/web-api-client.d.ts.map +0 -1
  203. package/dist/types/channels/targets.d.ts +0 -17
  204. package/dist/types/channels/targets.d.ts.map +0 -1
  205. package/dist/types/channels/telegram/account-display.d.ts +0 -9
  206. package/dist/types/channels/telegram/account-display.d.ts.map +0 -1
  207. package/dist/types/channels/telegram/adapter.d.ts +0 -12
  208. package/dist/types/channels/telegram/adapter.d.ts.map +0 -1
  209. package/dist/types/channels/telegram/debounce.d.ts +0 -22
  210. package/dist/types/channels/telegram/debounce.d.ts.map +0 -1
  211. package/dist/types/channels/telegram/internal-types.d.ts +0 -98
  212. package/dist/types/channels/telegram/internal-types.d.ts.map +0 -1
  213. package/dist/types/channels/telegram/media.d.ts +0 -115
  214. package/dist/types/channels/telegram/media.d.ts.map +0 -1
  215. package/dist/types/channels/telegram/message-actions.d.ts +0 -3
  216. package/dist/types/channels/telegram/message-actions.d.ts.map +0 -1
  217. package/dist/types/channels/telegram/plugin.d.ts +0 -3
  218. package/dist/types/channels/telegram/plugin.d.ts.map +0 -1
  219. package/dist/types/channels/telegram/runtime.d.ts +0 -6
  220. package/dist/types/channels/telegram/runtime.d.ts.map +0 -1
  221. package/dist/types/channels/telegram/setup.d.ts +0 -14
  222. package/dist/types/channels/telegram/setup.d.ts.map +0 -1
  223. package/dist/types/channels/telegram/startup-helpers.d.ts +0 -10
  224. package/dist/types/channels/telegram/startup-helpers.d.ts.map +0 -1
  225. package/dist/types/channels/telegram/typing-controller.d.ts +0 -11
  226. package/dist/types/channels/telegram/typing-controller.d.ts.map +0 -1
  227. package/dist/types/channels/telegram/utils.d.ts +0 -43
  228. package/dist/types/channels/telegram/utils.d.ts.map +0 -1
  229. package/dist/types/channels/transcription/index.d.ts +0 -20
  230. package/dist/types/channels/transcription/index.d.ts.map +0 -1
  231. package/dist/types/channels/whatsapp/adapter-helpers.d.ts +0 -21
  232. package/dist/types/channels/whatsapp/adapter-helpers.d.ts.map +0 -1
  233. package/dist/types/channels/whatsapp/adapter-types.d.ts +0 -44
  234. package/dist/types/channels/whatsapp/adapter-types.d.ts.map +0 -1
  235. package/dist/types/channels/whatsapp/adapter.d.ts +0 -18
  236. package/dist/types/channels/whatsapp/adapter.d.ts.map +0 -1
  237. package/dist/types/channels/whatsapp/attachment-policy.d.ts +0 -22
  238. package/dist/types/channels/whatsapp/attachment-policy.d.ts.map +0 -1
  239. package/dist/types/channels/whatsapp/dedupe-claims.d.ts +0 -8
  240. package/dist/types/channels/whatsapp/dedupe-claims.d.ts.map +0 -1
  241. package/dist/types/channels/whatsapp/identity.d.ts +0 -29
  242. package/dist/types/channels/whatsapp/identity.d.ts.map +0 -1
  243. package/dist/types/channels/whatsapp/inbound-debounce.d.ts +0 -28
  244. package/dist/types/channels/whatsapp/inbound-debounce.d.ts.map +0 -1
  245. package/dist/types/channels/whatsapp/jid.d.ts +0 -40
  246. package/dist/types/channels/whatsapp/jid.d.ts.map +0 -1
  247. package/dist/types/channels/whatsapp/lid-store.d.ts +0 -45
  248. package/dist/types/channels/whatsapp/lid-store.d.ts.map +0 -1
  249. package/dist/types/channels/whatsapp/media.d.ts +0 -26
  250. package/dist/types/channels/whatsapp/media.d.ts.map +0 -1
  251. package/dist/types/channels/whatsapp/message-actions.d.ts +0 -3
  252. package/dist/types/channels/whatsapp/message-actions.d.ts.map +0 -1
  253. package/dist/types/channels/whatsapp/message-store.d.ts +0 -13
  254. package/dist/types/channels/whatsapp/message-store.d.ts.map +0 -1
  255. package/dist/types/channels/whatsapp/plugin.d.ts +0 -3
  256. package/dist/types/channels/whatsapp/plugin.d.ts.map +0 -1
  257. package/dist/types/channels/whatsapp/reactions.d.ts +0 -33
  258. package/dist/types/channels/whatsapp/reactions.d.ts.map +0 -1
  259. package/dist/types/channels/whatsapp/reconnect-scheduler.d.ts +0 -16
  260. package/dist/types/channels/whatsapp/reconnect-scheduler.d.ts.map +0 -1
  261. package/dist/types/channels/whatsapp/runtime.d.ts +0 -25
  262. package/dist/types/channels/whatsapp/runtime.d.ts.map +0 -1
  263. package/dist/types/channels/whatsapp/session.d.ts +0 -56
  264. package/dist/types/channels/whatsapp/session.d.ts.map +0 -1
  265. package/dist/types/channels/whatsapp/setup.d.ts +0 -2
  266. package/dist/types/channels/whatsapp/setup.d.ts.map +0 -1
  267. package/dist/types/channels/whatsapp/state.d.ts +0 -18
  268. package/dist/types/channels/whatsapp/state.d.ts.map +0 -1
  269. package/dist/types/channels/whatsapp/typing-controller.d.ts +0 -28
  270. package/dist/types/channels/whatsapp/typing-controller.d.ts.map +0 -1
  271. package/dist/types/tools/impl/message-channel.d.ts +0 -10
  272. package/dist/types/tools/impl/message-channel.d.ts.map +0 -1
  273. package/dist/types/updater/auto-update.d.ts +0 -48
  274. package/dist/types/updater/auto-update.d.ts.map +0 -1
@@ -5,12 +5,12 @@
5
5
  "// Interactive tool capability policy shared across UI/headless/SDK-compatible paths.\n// This avoids scattering name-based checks throughout approval handling.\n\nimport type { ToolName } from \"./tool-definitions\";\n\nconst INTERACTIVE_APPROVAL_TOOLS = new Set([\"AskUserQuestion\"]);\n\nexport type InteractiveApprovalKind = \"ask_user_question\";\n\n/**\n * Tools that prompt the human for input mid-turn, as toolset names. Headless\n * clients (SDK sessions, automation) can exclude these from the turn's\n * toolset via `exclude_interactive_tools` on create_message payloads.\n */\nexport const INTERACTIVE_USER_INPUT_TOOL_NAMES = [\n \"AskUserQuestion\",\n] as const satisfies readonly ToolName[];\n\nconst RUNTIME_USER_INPUT_TOOLS = new Set<string>(\n INTERACTIVE_USER_INPUT_TOOL_NAMES,\n);\n\nconst HEADLESS_AUTO_ALLOW_TOOLS = new Set<string>();\n\nexport function isInteractiveApprovalTool(toolName: string): boolean {\n return INTERACTIVE_APPROVAL_TOOLS.has(toolName);\n}\n\nexport function getInteractiveApprovalKind(\n toolName: string,\n): InteractiveApprovalKind | null {\n switch (toolName) {\n case \"AskUserQuestion\":\n return \"ask_user_question\";\n default:\n return null;\n }\n}\n\nexport function requiresRuntimeUserInput(toolName: string): boolean {\n return RUNTIME_USER_INPUT_TOOLS.has(toolName);\n}\n\nexport function isHeadlessAutoAllowTool(toolName: string): boolean {\n return HEADLESS_AUTO_ALLOW_TOOLS.has(toolName);\n}\n",
6
6
  "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",
7
7
  "import {\n asRecord,\n type ChannelTurnProgressBuilderOptions,\n firstNonEmptyString,\n formatToolProgressDetails,\n formatToolProgressTitle,\n MAX_PROGRESS_DETAILS_LENGTH,\n parseToolArguments,\n sanitizeChannelProgressIdentifier,\n sanitizeChannelProgressText,\n type ToolCallSummary,\n type ToolReturnSummary,\n} from \"./progress-formatting\";\nimport type { ChannelTurnProgressUpdate } from \"./types\";\n\nfunction getMessageType(delta: Record<string, unknown>): string | null {\n return firstNonEmptyString(delta.message_type, delta.messageType) ?? null;\n}\n\nfunction getRunId(delta: Record<string, unknown>): string | undefined {\n return firstNonEmptyString(delta.run_id, delta.runId);\n}\n\nfunction withRunId(\n update: Omit<ChannelTurnProgressUpdate, \"runId\">,\n runId?: string,\n): ChannelTurnProgressUpdate {\n return {\n ...update,\n ...(runId ? { runId } : {}),\n };\n}\n\nfunction getCommandId(delta: Record<string, unknown>): string {\n const command = firstNonEmptyString(delta.command_id, delta.commandId);\n return sanitizeChannelProgressIdentifier(command, \"command\");\n}\n\nfunction getSlashCommand(delta: Record<string, unknown>): string {\n const commandId = firstNonEmptyString(delta.command_id, delta.commandId);\n const command = commandId ? `/${commandId.replace(/^\\/+/, \"\")}` : \"command\";\n return sanitizeChannelProgressIdentifier(command, \"command\");\n}\n\nfunction getToolStatus(delta: Record<string, unknown>): \"completed\" | \"error\" {\n const status = firstNonEmptyString(delta.status)?.toLowerCase();\n return status === \"error\" || status === \"failed\" ? \"error\" : \"completed\";\n}\n\nfunction stringifyProgressValue(value: unknown): string | undefined {\n if (typeof value === \"string\") {\n return value;\n }\n if (value === undefined || value === null) {\n return undefined;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction formatToolErrorDetails(\n record: Record<string, unknown>,\n): string | undefined {\n const toolReturn = record.tool_return ?? record.toolReturn;\n const toolReturnRecord = asRecord(toolReturn);\n const preview = firstNonEmptyString(\n record.stderr,\n record.error,\n record.message,\n toolReturnRecord?.stderr,\n toolReturnRecord?.error,\n toolReturnRecord?.message,\n toolReturnRecord?.output,\n stringifyProgressValue(toolReturn),\n );\n const sanitized = sanitizeChannelProgressText(\n preview,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n}\n\nfunction toolNameForMessage(summary: ToolCallSummary | undefined): string {\n return summary?.name ? `: ${summary.name}` : \"\";\n}\n\n/**\n * Builds sanitized channel progress updates from stream deltas for a single\n * turn. Instances accumulate fragmented tool-call arguments across deltas,\n * so they must be scoped to one conversation turn (create one per turn and\n * drop it when the turn finishes) rather than shared across conversations.\n */\nexport type ChannelTurnProgressBuilder = {\n buildUpdates(delta: unknown): ChannelTurnProgressUpdate[];\n};\n\nexport function createChannelTurnProgressBuilder(\n options: ChannelTurnProgressBuilderOptions = {},\n): ChannelTurnProgressBuilder {\n // Fragmented tool arguments and names accumulated across stream deltas,\n // keyed by tool_call_id. Entries are dropped when the tool return arrives;\n // the whole builder is dropped with the turn.\n const argumentsByToolCallId = new Map<string, string>();\n const namesByToolCallId = new Map<string, string>();\n\n // Wire shapes (see ToolCall / ToolCallDelta in @letta-ai/letta-client and\n // the local backend projections): flat `tool_call_id` / `name` /\n // `arguments` fields, delivered either as `tool_calls` (array or single\n // delta object) or the deprecated `tool_call`.\n function extractToolCallSummary(value: unknown): ToolCallSummary | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n const id = firstNonEmptyString(record.tool_call_id);\n const cacheId = id\n ? sanitizeChannelProgressIdentifier(id, \"tool-call\")\n : undefined;\n const extractedName = firstNonEmptyString(record.name);\n if (cacheId && extractedName) {\n namesByToolCallId.set(cacheId, extractedName);\n }\n const resolvedName =\n extractedName ?? (cacheId ? namesByToolCallId.get(cacheId) : undefined);\n const rawArguments =\n typeof record.arguments === \"string\" && record.arguments.length > 0\n ? record.arguments\n : asRecord(record.arguments)\n ? JSON.stringify(record.arguments)\n : undefined;\n\n // Accumulate fragmented arguments across stream deltas for the same tool\n // call. A fragment that already parses as complete JSON replaces earlier\n // partial state (some streams first expose only command content, then\n // later re-send full arguments including the description).\n let argumentsText: string | undefined;\n if (cacheId && rawArguments !== undefined) {\n const existing = argumentsByToolCallId.get(cacheId);\n if (parseToolArguments(rawArguments)) {\n argumentsByToolCallId.set(cacheId, rawArguments);\n argumentsText = rawArguments;\n } else if (existing) {\n if (parseToolArguments(existing)) {\n argumentsText = existing;\n } else {\n const accumulated = existing + rawArguments;\n argumentsByToolCallId.set(cacheId, accumulated);\n argumentsText = accumulated;\n }\n } else {\n argumentsByToolCallId.set(cacheId, rawArguments);\n argumentsText = rawArguments;\n }\n } else if (!id && rawArguments !== undefined) {\n argumentsText = rawArguments;\n }\n\n if (!id && !resolvedName) {\n return null;\n }\n return {\n ...(cacheId ? { id: cacheId } : {}),\n ...(resolvedName\n ? { name: sanitizeChannelProgressIdentifier(resolvedName, \"tool\") }\n : {}),\n ...(argumentsText ? { argumentsText } : {}),\n };\n }\n\n function extractClientToolSummary(\n record: Record<string, unknown>,\n ): ToolCallSummary | null {\n const id = firstNonEmptyString(record.tool_call_id, record.toolCallId);\n const cacheId = id\n ? sanitizeChannelProgressIdentifier(id, \"tool-call\")\n : undefined;\n const extractedName = firstNonEmptyString(\n record.tool_name,\n record.toolName,\n record.name,\n );\n if (cacheId && extractedName) {\n namesByToolCallId.set(cacheId, extractedName);\n }\n const resolvedName =\n extractedName ?? (cacheId ? namesByToolCallId.get(cacheId) : undefined);\n const rawArguments = firstNonEmptyString(\n record.tool_args,\n record.toolArgs,\n record.arguments,\n );\n if (cacheId && rawArguments) {\n argumentsByToolCallId.set(cacheId, rawArguments);\n }\n const argumentsText =\n rawArguments ??\n (cacheId ? argumentsByToolCallId.get(cacheId) : undefined);\n if (!cacheId && !resolvedName) {\n return null;\n }\n return {\n ...(cacheId ? { id: cacheId } : {}),\n ...(resolvedName\n ? { name: sanitizeChannelProgressIdentifier(resolvedName, \"tool\") }\n : {}),\n ...(argumentsText ? { argumentsText } : {}),\n };\n }\n\n function extractToolCalls(delta: Record<string, unknown>): ToolCallSummary[] {\n const candidates: unknown[] = Array.isArray(delta.tool_calls)\n ? delta.tool_calls\n : delta.tool_calls\n ? [delta.tool_calls]\n : delta.tool_call\n ? [delta.tool_call]\n : [];\n\n const summaries: ToolCallSummary[] = [];\n const seen = new Set<string>();\n for (const candidate of candidates) {\n const summary = extractToolCallSummary(candidate);\n if (!summary) {\n continue;\n }\n const key = `${summary.id ?? \"\"}:${summary.name ?? \"\"}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n summaries.push(summary);\n }\n return summaries;\n }\n\n function extractToolReturns(\n delta: Record<string, unknown>,\n ): ToolReturnSummary[] {\n const candidates: unknown[] = Array.isArray(delta.tool_returns)\n ? delta.tool_returns\n : [delta];\n\n const summaries: ToolReturnSummary[] = [];\n const seen = new Set<string>();\n for (const candidate of candidates) {\n const record = asRecord(candidate);\n if (!record) {\n continue;\n }\n const summary = extractToolCallSummary(record);\n if (!summary) {\n continue;\n }\n const key = `${summary.id ?? \"\"}:${summary.name ?? \"\"}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n const status = getToolStatus(record);\n summaries.push({\n summary,\n status,\n ...(status === \"error\"\n ? { errorDetails: formatToolErrorDetails(record) }\n : {}),\n });\n }\n return summaries;\n }\n\n function buildToolCallUpdates(\n record: Record<string, unknown>,\n runId: string | undefined,\n ): ChannelTurnProgressUpdate[] {\n const tools = extractToolCalls(record);\n const updates: ChannelTurnProgressUpdate[] = [];\n for (const tool of tools) {\n const toolDetails = formatToolProgressDetails(tool, options);\n const toolTitle = formatToolProgressTitle(tool, \"started\");\n updates.push(\n withRunId(\n {\n kind: \"tool\",\n state: \"started\",\n message: `Preparing tool${toolNameForMessage(tool)}`,\n ...(tool.id ? { toolCallId: tool.id } : {}),\n ...(tool.name ? { toolName: tool.name } : {}),\n ...(toolDetails ? { toolDetails } : {}),\n ...(toolTitle ? { toolTitle } : {}),\n },\n runId,\n ),\n );\n }\n return updates;\n }\n\n function buildUpdates(delta: unknown): ChannelTurnProgressUpdate[] {\n const record = asRecord(delta);\n if (!record) {\n return [];\n }\n\n const messageType = getMessageType(record);\n const runId = getRunId(record);\n\n switch (messageType) {\n case \"reasoning_message\":\n return [\n withRunId(\n {\n kind: \"thinking\",\n state: \"updated\",\n message: \"Thinking\",\n },\n runId,\n ),\n ];\n\n case \"assistant_message\":\n return [\n withRunId(\n {\n kind: \"responding\",\n state: \"updated\",\n message: \"Writing reply\",\n },\n runId,\n ),\n ];\n\n case \"approval_request_message\":\n return buildToolCallUpdates(record, runId);\n\n case \"tool_call_message\": {\n const updates = buildToolCallUpdates(record, runId);\n if (updates.length === 0) {\n return [\n withRunId(\n {\n kind: \"tool\",\n state: \"started\",\n message: \"Preparing tool call\",\n },\n runId,\n ),\n ];\n }\n return updates;\n }\n\n case \"tool_return_message\": {\n const toolReturns = extractToolReturns(record);\n const updates: ChannelTurnProgressUpdate[] = [];\n for (const { summary, status, errorDetails } of toolReturns) {\n // Resolve details from the accumulated arguments for this call,\n // then drop the per-call caches.\n const accumulatedArgs = summary.id\n ? argumentsByToolCallId.get(summary.id)\n : undefined;\n if (summary.id) {\n argumentsByToolCallId.delete(summary.id);\n namesByToolCallId.delete(summary.id);\n }\n const toolWithAccumulatedArgs = accumulatedArgs\n ? { ...summary, argumentsText: accumulatedArgs }\n : summary;\n // toolDetails stays argument-derived even on errors: surfaces use it\n // for row titles (e.g. shell rows), so tool output must never leak\n // into it. Error-output previews travel in errorDetails (LET-9509).\n const toolDetails = formatToolProgressDetails(\n toolWithAccumulatedArgs,\n options,\n );\n const toolTitle = formatToolProgressTitle(\n toolWithAccumulatedArgs,\n status,\n );\n updates.push(\n withRunId(\n {\n kind: \"tool\",\n state: status,\n message: status === \"error\" ? \"Tool failed\" : \"Tool finished\",\n ...(summary.id ? { toolCallId: summary.id } : {}),\n ...(summary.name ? { toolName: summary.name } : {}),\n ...(toolDetails ? { toolDetails } : {}),\n ...(status === \"error\" && errorDetails ? { errorDetails } : {}),\n ...(toolTitle ? { toolTitle } : {}),\n },\n runId,\n ),\n );\n }\n return updates;\n }\n\n case \"client_tool_start\": {\n const tool = extractClientToolSummary(record);\n const toolDetails = tool\n ? formatToolProgressDetails(tool, options)\n : undefined;\n const toolTitle = tool\n ? formatToolProgressTitle(tool, \"started\")\n : undefined;\n return [\n withRunId(\n {\n kind: \"tool\",\n state: \"started\",\n message: \"Running tool\",\n ...(tool?.id ? { toolCallId: tool.id } : {}),\n ...(tool?.name ? { toolName: tool.name } : {}),\n ...(toolDetails ? { toolDetails } : {}),\n ...(toolTitle ? { toolTitle } : {}),\n },\n runId,\n ),\n ];\n }\n\n case \"client_tool_end\": {\n const state = getToolStatus(record);\n const tool = extractClientToolSummary(record);\n const accumulatedArgs = tool?.id\n ? argumentsByToolCallId.get(tool.id)\n : undefined;\n if (tool?.id) {\n argumentsByToolCallId.delete(tool.id);\n namesByToolCallId.delete(tool.id);\n }\n const toolWithAccumulatedArgs =\n tool && accumulatedArgs\n ? { ...tool, argumentsText: accumulatedArgs }\n : tool;\n // toolDetails stays argument-derived even on errors (see the\n // tool_return_message handler); error previews go to errorDetails.\n const toolDetails = toolWithAccumulatedArgs\n ? formatToolProgressDetails(toolWithAccumulatedArgs, options)\n : undefined;\n const errorDetails =\n state === \"error\" ? formatToolErrorDetails(record) : undefined;\n const toolTitle = toolWithAccumulatedArgs\n ? formatToolProgressTitle(toolWithAccumulatedArgs, state)\n : undefined;\n return [\n withRunId(\n {\n kind: \"tool\",\n state,\n message: state === \"error\" ? \"Tool failed\" : \"Tool finished\",\n ...(tool?.id ? { toolCallId: tool.id } : {}),\n ...(tool?.name ? { toolName: tool.name } : {}),\n ...(toolDetails ? { toolDetails } : {}),\n ...(errorDetails ? { errorDetails } : {}),\n ...(toolTitle ? { toolTitle } : {}),\n },\n runId,\n ),\n ];\n }\n\n case \"slash_command_start\": {\n const command = getSlashCommand(record);\n return [\n withRunId(\n {\n kind: \"command\",\n state: \"started\",\n message: `Running ${command}`,\n command,\n },\n runId,\n ),\n ];\n }\n\n case \"slash_command_end\": {\n const command = getSlashCommand(record);\n const success = record.success !== false;\n return [\n withRunId(\n {\n kind: \"command\",\n state: success ? \"completed\" : \"error\",\n message: success ? `${command} finished` : `${command} failed`,\n command,\n },\n runId,\n ),\n ];\n }\n\n case \"command_start\": {\n const command = getCommandId(record);\n return [\n withRunId(\n {\n kind: \"command\",\n state: \"started\",\n message: \"Running command\",\n command,\n },\n runId,\n ),\n ];\n }\n\n case \"command_end\": {\n const command = getCommandId(record);\n const success = record.success !== false;\n return [\n withRunId(\n {\n kind: \"command\",\n state: success ? \"completed\" : \"error\",\n message: success ? \"Command finished\" : \"Command failed\",\n command,\n },\n runId,\n ),\n ];\n }\n\n case \"status\": {\n const message = sanitizeChannelProgressText(record.message);\n if (!message) {\n return [];\n }\n return [\n withRunId(\n {\n kind: \"status\",\n state: \"updated\",\n message,\n },\n runId,\n ),\n ];\n }\n\n case \"retry\": {\n const attempt = Number(record.attempt);\n const maxAttempts = Number(record.max_attempts ?? record.maxAttempts);\n const suffix =\n Number.isFinite(attempt) && Number.isFinite(maxAttempts)\n ? ` (${attempt}/${maxAttempts})`\n : \"\";\n return [\n withRunId(\n {\n kind: \"retry\",\n state: \"updated\",\n message: `Retrying request${suffix}`,\n },\n runId,\n ),\n ];\n }\n\n case \"loop_error\":\n return [\n withRunId(\n {\n kind: \"error\",\n state: \"error\",\n message: \"Encountered an error\",\n },\n runId,\n ),\n ];\n\n default:\n return [];\n }\n }\n\n return { buildUpdates };\n}\n",
8
- "import type { MessageCreate } from \"@letta-ai/letta-client/resources/agents/agents\";\nimport { getInteractiveApprovalKind } from \"@/tools/interactive-policy\";\nimport type {\n ApprovalResponseBody,\n ControlRequest,\n ExternalToolCallRequestMessage,\n ExternalToolCallResult,\n ExternalToolDefinitionPayload,\n InputAcceptedResponseMessage,\n InputCommand,\n QueueUpdateMessage,\n RuntimeScope,\n RuntimeStartCommand,\n RuntimeStartResponseMessage,\n StopReasonType,\n StreamDeltaMessage,\n WsProtocolMessage,\n} from \"@/types/app-server-protocol\";\nimport { createChannelTurnProgressBuilder } from \"./progress-builder\";\nimport type {\n ChannelControlRequestEvent,\n ChannelDefaultPermissionMode,\n ChannelTurnLifecycleEvent,\n ChannelTurnProgressEvent,\n ChannelTurnSource,\n} from \"./types\";\n\nexport const CHANNEL_GATEWAY_TOOL_SCOPE_ID = \"channel-gateway\";\nconst MAX_ACCEPTED_CLIENT_MESSAGE_IDS = 2048;\n\nexport interface ChannelGatewayClient {\n close(): void;\n onMessage(listener: (message: WsProtocolMessage) => void): () => void;\n onExternalToolCall(\n handler: (\n request: ExternalToolCallRequestMessage,\n ) => Promise<ExternalToolCallResult> | ExternalToolCallResult,\n ): () => void;\n submitInput(\n command: Omit<InputCommand, \"type\">,\n ): Promise<InputAcceptedResponseMessage>;\n runtimeStart(\n options: Omit<RuntimeStartCommand, \"type\" | \"request_id\"> & {\n request_id?: string;\n },\n ): Promise<RuntimeStartResponseMessage>;\n}\n\nexport interface ChannelGatewayDelivery {\n runtime: RuntimeScope;\n content: MessageCreate[\"content\"];\n sources: ChannelTurnSource[];\n clientMessageId: string;\n defaultPermissionMode?: ChannelDefaultPermissionMode;\n}\n\nexport interface ChannelGatewayHooks {\n buildExternalTool(\n runtime: RuntimeScope,\n sources: ChannelTurnSource[],\n ): Promise<ExternalToolDefinitionPayload>;\n executeExternalTool(\n request: ExternalToolCallRequestMessage,\n sources: ChannelTurnSource[],\n ): Promise<ExternalToolCallResult> | ExternalToolCallResult;\n onLifecycle(event: ChannelTurnLifecycleEvent): void | Promise<void>;\n onProgress(event: ChannelTurnProgressEvent): void | Promise<void>;\n onControlRequest(event: ChannelControlRequestEvent): void | Promise<void>;\n createRichDraft?(options: {\n batchId: string;\n sources: ChannelTurnSource[];\n }): ChannelGatewayRichDraft | null;\n}\n\nexport interface ChannelGatewayRichDraft {\n handleDelta(delta: StreamDeltaMessage[\"delta\"]): void;\n flushPending(): Promise<void>;\n dispose(): void;\n}\n\nexport interface ChannelGatewayModelStatus {\n modelHandle: string | null;\n scope: \"agent\" | \"conversation\";\n}\n\ntype ActiveGatewayTurn = {\n batchId: string;\n sources: ChannelTurnSource[];\n progress: ReturnType<typeof createChannelTurnProgressBuilder>;\n richDraft: ChannelGatewayRichDraft | null;\n runId?: string;\n error?: string;\n};\n\ntype GatewayRuntimeState = {\n runtime: RuntimeScope;\n pendingSourcesByClientMessageId: Map<\n string,\n {\n sources: ChannelTurnSource[];\n disposition: \"submitting\" | \"queued\";\n acceptedAtQueueRevision?: number;\n }\n >;\n queueRevision: number;\n active: ActiveGatewayTurn | null;\n registrationSignature: string | null;\n registration: Promise<void> | null;\n replayedControlRequestIds: Set<string>;\n submissionQueue: Promise<void>;\n hookQueue: Promise<void> | null;\n acceptedClientMessageIds: Set<string>;\n modelStatus: ChannelGatewayModelStatus | null;\n};\n\nfunction runtimeKey(runtime: RuntimeScope): string {\n return `${runtime.agent_id}:${runtime.conversation_id}`;\n}\n\nfunction sourceKey(source: ChannelTurnSource): string {\n return [\n source.channel,\n source.accountId ?? \"\",\n source.chatId,\n source.threadId ?? \"\",\n ].join(\":\");\n}\n\nfunction uniqueSources(sources: ChannelTurnSource[]): ChannelTurnSource[] {\n const byKey = new Map<string, ChannelTurnSource>();\n for (const source of sources) byKey.set(sourceKey(source), source);\n return [...byKey.values()];\n}\n\nfunction stopReasonFromDelta(\n message: StreamDeltaMessage,\n): StopReasonType | null {\n const delta = message.delta;\n return delta.message_type === \"stop_reason\" &&\n \"stop_reason\" in delta &&\n typeof delta.stop_reason === \"string\"\n ? delta.stop_reason\n : null;\n}\n\nfunction runIdFromDelta(message: StreamDeltaMessage): string | undefined {\n const runId = \"run_id\" in message.delta ? message.delta.run_id : undefined;\n return typeof runId === \"string\" && runId.length > 0 ? runId : undefined;\n}\n\nfunction lifecycleOutcome(\n stopReason: StopReasonType,\n): \"completed\" | \"error\" | \"cancelled\" {\n if (stopReason === \"cancelled\") return \"cancelled\";\n if (stopReason === \"end_turn\" || stopReason === \"tool_rule\") {\n return \"completed\";\n }\n return \"error\";\n}\n\nfunction errorFromDelta(message: StreamDeltaMessage): string | undefined {\n const delta = message.delta;\n if (delta.message_type !== \"loop_error\") return undefined;\n return delta.message;\n}\n\n/**\n * Process-neutral Channels bridge. It only speaks the public App Server\n * protocol; channel adapters and credentials stay behind the injected hooks.\n */\nexport class ChannelGateway {\n private readonly states = new Map<string, GatewayRuntimeState>();\n private readonly disposers: Array<() => void> = [];\n\n constructor(\n private readonly client: ChannelGatewayClient,\n private readonly hooks: ChannelGatewayHooks,\n ) {\n this.disposers.push(\n client.onMessage((message) => this.handleMessage(message)),\n client.onExternalToolCall((request) => {\n const sources = request.runtime\n ? (this.states.get(runtimeKey(request.runtime))?.active?.sources ??\n [])\n : [];\n return hooks.executeExternalTool(request, sources);\n }),\n );\n }\n\n close(): void {\n for (const dispose of this.disposers.splice(0)) dispose();\n this.client.close();\n this.states.clear();\n }\n\n async submit(delivery: ChannelGatewayDelivery): Promise<boolean> {\n const state = this.getState(delivery.runtime);\n const submission = state.submissionQueue.then(() =>\n this.submitDelivery(state, delivery),\n );\n state.submissionQueue = submission.then(\n () => undefined,\n () => undefined,\n );\n return submission;\n }\n\n private async submitDelivery(\n state: GatewayRuntimeState,\n delivery: ChannelGatewayDelivery,\n ): Promise<boolean> {\n if (state.acceptedClientMessageIds.has(delivery.clientMessageId)) {\n state.acceptedClientMessageIds.delete(delivery.clientMessageId);\n state.acceptedClientMessageIds.add(delivery.clientMessageId);\n return true;\n }\n state.pendingSourcesByClientMessageId.set(delivery.clientMessageId, {\n sources: uniqueSources(delivery.sources),\n disposition: \"submitting\",\n });\n\n try {\n await this.ensureRuntimeRegistration(state, delivery);\n const response = await this.client.submitInput({\n runtime: delivery.runtime,\n payload: {\n kind: \"create_message\",\n messages: [\n {\n role: \"user\",\n content: delivery.content,\n client_message_id: delivery.clientMessageId,\n },\n ],\n external_tool_scope_ids: [CHANNEL_GATEWAY_TOOL_SCOPE_ID],\n image_failure_mode: \"drop\",\n },\n });\n if (!response.accepted) {\n state.pendingSourcesByClientMessageId.delete(delivery.clientMessageId);\n return false;\n }\n state.acceptedClientMessageIds.add(delivery.clientMessageId);\n if (\n state.acceptedClientMessageIds.size > MAX_ACCEPTED_CLIENT_MESSAGE_IDS\n ) {\n const oldest = state.acceptedClientMessageIds.values().next().value;\n if (oldest) state.acceptedClientMessageIds.delete(oldest);\n }\n const queuedEvents = delivery.sources.map((source) =>\n this.enqueueHook(state, () =>\n this.hooks.onLifecycle({ type: \"queued\", source }),\n ),\n );\n if (response.disposition === \"started\") {\n this.activateSources(state, delivery.clientMessageId, delivery.sources);\n state.pendingSourcesByClientMessageId.delete(delivery.clientMessageId);\n } else if (response.disposition === \"queued\") {\n const pending = state.pendingSourcesByClientMessageId.get(\n delivery.clientMessageId,\n );\n if (pending) {\n pending.disposition = \"queued\";\n pending.acceptedAtQueueRevision = state.queueRevision;\n }\n }\n await Promise.all(queuedEvents);\n return true;\n } catch (error) {\n state.pendingSourcesByClientMessageId.delete(delivery.clientMessageId);\n throw error;\n }\n }\n\n async restoreRuntime(\n runtime: RuntimeScope,\n sources: ChannelTurnSource[],\n ): Promise<Set<string>> {\n const state = this.getState(runtime);\n state.replayedControlRequestIds.clear();\n let recoveredTurn: ActiveGatewayTurn | null = null;\n if (!state.active) {\n recoveredTurn = {\n batchId: `channel-recovered-${crypto.randomUUID()}`,\n sources: uniqueSources(sources),\n progress: createChannelTurnProgressBuilder(),\n richDraft: null,\n };\n state.active = recoveredTurn;\n }\n try {\n await this.registerRuntime(runtime, sources);\n } catch (error) {\n if (state.active === recoveredTurn) state.active = null;\n throw error;\n }\n const replayedRequestIds = new Set(state.replayedControlRequestIds);\n if (replayedRequestIds.size === 0 && state.active === recoveredTurn) {\n state.active = null;\n }\n return replayedRequestIds;\n }\n\n async registerRuntime(\n runtime: RuntimeScope,\n sources: ChannelTurnSource[] = [],\n defaultPermissionMode?: ChannelDefaultPermissionMode,\n ): Promise<void> {\n const state = this.getState(runtime);\n await this.ensureRuntimeRegistration(state, {\n runtime,\n content: \"\",\n sources,\n clientMessageId: \"recovered\",\n ...(defaultPermissionMode ? { defaultPermissionMode } : {}),\n });\n }\n\n async submitApprovalResponse(\n runtime: RuntimeScope,\n response: ApprovalResponseBody,\n ): Promise<boolean> {\n const result = await this.client.submitInput({\n runtime,\n payload: { kind: \"approval_response\", ...response },\n });\n return result.accepted;\n }\n\n getModelStatus(runtime: RuntimeScope): ChannelGatewayModelStatus | null {\n return this.states.get(runtimeKey(runtime))?.modelStatus ?? null;\n }\n\n updateModelStatus(runtime: RuntimeScope, modelHandle: string | null): void {\n const state = this.getState(runtime);\n state.modelStatus = {\n modelHandle,\n scope: runtime.conversation_id === \"default\" ? \"agent\" : \"conversation\",\n };\n }\n\n private getState(runtime: RuntimeScope): GatewayRuntimeState {\n const key = runtimeKey(runtime);\n let state = this.states.get(key);\n if (!state) {\n state = {\n runtime,\n pendingSourcesByClientMessageId: new Map(),\n queueRevision: 0,\n active: null,\n registrationSignature: null,\n registration: null,\n replayedControlRequestIds: new Set(),\n submissionQueue: Promise.resolve(),\n hookQueue: null,\n acceptedClientMessageIds: new Set(),\n modelStatus: null,\n };\n this.states.set(key, state);\n }\n return state;\n }\n\n private enqueueHook(\n state: GatewayRuntimeState,\n hook: () => void | Promise<void>,\n ): Promise<void> {\n let pending: Promise<void>;\n if (state.hookQueue) {\n pending = state.hookQueue.then(hook);\n } else {\n try {\n pending = Promise.resolve(hook());\n } catch (error) {\n pending = Promise.reject(error);\n }\n }\n const settled = pending.then(\n () => undefined,\n () => undefined,\n );\n state.hookQueue = settled;\n void settled.then(() => {\n if (state.hookQueue === settled) state.hookQueue = null;\n });\n return pending;\n }\n\n private async ensureRuntimeRegistration(\n state: GatewayRuntimeState,\n delivery: ChannelGatewayDelivery,\n ): Promise<void> {\n const tool = await this.hooks.buildExternalTool(\n delivery.runtime,\n delivery.sources,\n );\n const signature = JSON.stringify({\n mode: delivery.defaultPermissionMode ?? null,\n tool,\n });\n if (state.registrationSignature === signature && state.registration) {\n return state.registration;\n }\n\n const registration = this.client\n .runtimeStart({\n agent_id: delivery.runtime.agent_id,\n conversation_id: delivery.runtime.conversation_id,\n ...(delivery.defaultPermissionMode\n ? { mode: delivery.defaultPermissionMode }\n : {}),\n recover_approvals: true,\n force_device_status: false,\n wait_for_replay: true,\n client_info: { name: \"channel-gateway\", title: \"Channel Gateway\" },\n external_tools: [\n {\n scope_id: CHANNEL_GATEWAY_TOOL_SCOPE_ID,\n tools: [tool],\n },\n ],\n })\n .then((response) => {\n if (!response.success) {\n throw new Error(\n response.error ?? \"Failed to register channel runtime\",\n );\n }\n const agentRecord = response.agent as unknown as Record<\n string,\n unknown\n > | null;\n const conversationRecord = response.conversation as unknown as Record<\n string,\n unknown\n > | null;\n const agentModel =\n typeof agentRecord?.model === \"string\"\n ? agentRecord.model\n : (response.agent?.llm_config?.model ?? null);\n const conversationModel =\n typeof conversationRecord?.model === \"string\"\n ? conversationRecord.model\n : null;\n state.modelStatus = {\n modelHandle:\n delivery.runtime.conversation_id === \"default\"\n ? agentModel\n : (conversationModel ?? agentModel),\n scope:\n delivery.runtime.conversation_id === \"default\"\n ? \"agent\"\n : \"conversation\",\n };\n });\n state.registrationSignature = signature;\n state.registration = registration;\n try {\n await registration;\n } catch (error) {\n if (state.registration === registration) {\n state.registration = null;\n state.registrationSignature = null;\n }\n throw error;\n }\n }\n\n private handleMessage(message: WsProtocolMessage): void {\n if (message.type === \"update_queue\") {\n this.handleQueueUpdate(message);\n return;\n }\n if (message.type === \"stream_delta\") {\n this.handleStreamDelta(message);\n return;\n }\n if (message.type === \"turn_finished\") {\n this.handleTurnFinished(message.runtime, {\n stopReason: message.stop_reason,\n runId: message.run_id,\n error: message.error,\n });\n return;\n }\n if (message.type === \"control_request\") {\n this.handleControlRequest(message);\n }\n }\n\n private handleQueueUpdate(message: QueueUpdateMessage): void {\n const state = this.getState(message.runtime);\n state.queueRevision += 1;\n const nextQueued = new Set(\n message.queue.map((entry) => entry.client_message_id),\n );\n const removed: Array<{\n clientMessageId: string;\n sources: ChannelTurnSource[];\n }> = [];\n for (const [\n clientMessageId,\n pending,\n ] of state.pendingSourcesByClientMessageId) {\n if (\n pending.disposition === \"queued\" &&\n state.queueRevision > (pending.acceptedAtQueueRevision ?? -1) &&\n !nextQueued.has(clientMessageId)\n ) {\n removed.push({ clientMessageId, sources: pending.sources });\n state.pendingSourcesByClientMessageId.delete(clientMessageId);\n }\n }\n if (!state.active && removed.length > 0) {\n const first = removed[0];\n if (first) {\n this.activateSources(\n state,\n first.clientMessageId,\n removed.flatMap((entry) => entry.sources),\n );\n }\n }\n }\n\n private activateSources(\n state: GatewayRuntimeState,\n clientMessageId: string,\n sources: ChannelTurnSource[],\n ): void {\n if (state.active) {\n return;\n }\n state.active = {\n batchId: `channel-${clientMessageId}`,\n sources: uniqueSources(sources),\n progress: createChannelTurnProgressBuilder(),\n richDraft:\n this.hooks.createRichDraft?.({\n batchId: `channel-${clientMessageId}`,\n sources,\n }) ?? null,\n };\n const processingEvent: ChannelTurnLifecycleEvent = {\n type: \"processing\",\n batchId: state.active.batchId,\n sources: state.active.sources,\n };\n void this.enqueueHook(state, () => this.hooks.onLifecycle(processingEvent));\n }\n\n private handleStreamDelta(message: StreamDeltaMessage): void {\n const state = this.getState(message.runtime);\n const active = state.active;\n if (!active) return;\n\n const runId = runIdFromDelta(message);\n if (runId) active.runId = runId;\n const deltaError = errorFromDelta(message);\n if (deltaError) active.error = deltaError;\n for (const update of active.progress.buildUpdates(message.delta)) {\n void this.enqueueHook(state, () =>\n this.hooks.onProgress({\n type: \"progress\",\n batchId: active.batchId,\n sources: active.sources,\n ...update,\n }),\n );\n }\n active.richDraft?.handleDelta(message.delta);\n\n const stopReason = stopReasonFromDelta(message);\n if (!stopReason) return;\n if (stopReason === \"requires_approval\") {\n void active.richDraft?.flushPending();\n return;\n }\n if (stopReason === \"end_turn\") void active.richDraft?.flushPending();\n this.handleTurnFinished(message.runtime, {\n stopReason,\n runId: active.runId,\n error: errorFromDelta(message),\n });\n }\n\n private handleTurnFinished(\n runtime: RuntimeScope,\n terminal: {\n stopReason: StopReasonType;\n runId?: string;\n error?: string;\n },\n ): void {\n const state = this.getState(runtime);\n const active = state.active;\n if (!active || terminal.stopReason === \"requires_approval\") return;\n state.active = null;\n active.richDraft?.dispose();\n void this.enqueueHook(state, () =>\n this.hooks.onLifecycle({\n type: \"finished\",\n batchId: active.batchId,\n sources: active.sources,\n outcome: lifecycleOutcome(terminal.stopReason),\n stopReason: terminal.stopReason,\n ...((terminal.runId ?? active.runId)\n ? { runId: terminal.runId ?? active.runId }\n : {}),\n ...((terminal.error ?? active.error)\n ? { error: terminal.error ?? active.error }\n : {}),\n }),\n );\n }\n\n private handleControlRequest(message: ControlRequest): void {\n if (!message.agent_id || !message.conversation_id) return;\n const state = this.states.get(\n runtimeKey({\n agent_id: message.agent_id,\n conversation_id: message.conversation_id,\n }),\n );\n if (!state) return;\n const sources = state.active?.sources ?? [];\n state.replayedControlRequestIds.add(message.request_id);\n const sourceScopes = new Map(\n sources.map((source) => [sourceKey(source), source]),\n );\n if (sourceScopes.size !== 1) return;\n const source = [...sourceScopes.values()][0];\n if (!source) return;\n void this.enqueueHook(state, () =>\n this.hooks.onControlRequest({\n requestId: message.request_id,\n kind:\n getInteractiveApprovalKind(message.request.tool_name) ??\n \"generic_tool_approval\",\n source,\n toolName: message.request.tool_name,\n input: message.request.input,\n }),\n );\n }\n}\n",
8
+ "import type { MessageCreate } from \"@letta-ai/letta-client/resources/agents/agents\";\nimport { getInteractiveApprovalKind } from \"@/tools/interactive-policy\";\nimport type {\n ApprovalResponseBody,\n ControlRequest,\n ExternalToolCallRequestMessage,\n ExternalToolCallResult,\n ExternalToolDefinitionPayload,\n InputAcceptedResponseMessage,\n InputCommand,\n QueueUpdateMessage,\n RuntimeExternalToolsUpdateGroup,\n RuntimeExternalToolsUpdateResponseMessage,\n RuntimeScope,\n RuntimeStartCommand,\n RuntimeStartResponseMessage,\n StopReasonType,\n StreamDeltaMessage,\n WsProtocolMessage,\n} from \"@/types/app-server-protocol\";\nimport { createChannelTurnProgressBuilder } from \"./progress-builder\";\nimport type {\n ChannelControlRequestEvent,\n ChannelDefaultPermissionMode,\n ChannelTurnLifecycleEvent,\n ChannelTurnProgressEvent,\n ChannelTurnSource,\n} from \"./types\";\n\nconst MAX_ACCEPTED_CLIENT_MESSAGE_IDS = 2048;\n\nexport interface ChannelGatewayClient {\n close(): void;\n onMessage(listener: (message: WsProtocolMessage) => void): () => void;\n onExternalToolCall(\n handler: (\n request: ExternalToolCallRequestMessage,\n ) => Promise<ExternalToolCallResult> | ExternalToolCallResult,\n ): () => void;\n submitInput(\n command: Omit<InputCommand, \"type\">,\n ): Promise<InputAcceptedResponseMessage>;\n runtimeStart(\n options: Omit<RuntimeStartCommand, \"type\" | \"request_id\"> & {\n request_id?: string;\n },\n ): Promise<RuntimeStartResponseMessage>;\n runtimeExternalToolsUpdate(options: {\n updates: readonly RuntimeExternalToolsUpdateGroup[];\n }): Promise<RuntimeExternalToolsUpdateResponseMessage>;\n}\n\nexport interface ChannelGatewayDelivery {\n runtime: RuntimeScope;\n content: MessageCreate[\"content\"];\n sources: ChannelTurnSource[];\n clientMessageId: string;\n defaultPermissionMode?: ChannelDefaultPermissionMode;\n}\n\nexport interface ChannelGatewayHooks {\n buildExternalTool(\n runtime: RuntimeScope,\n sources: ChannelTurnSource[],\n ): Promise<ExternalToolDefinitionPayload | null>;\n executeExternalTool(\n request: ExternalToolCallRequestMessage,\n sources: ChannelTurnSource[],\n ): Promise<ExternalToolCallResult> | ExternalToolCallResult;\n onLifecycle(event: ChannelTurnLifecycleEvent): void | Promise<void>;\n onProgress(event: ChannelTurnProgressEvent): void | Promise<void>;\n onControlRequest(event: ChannelControlRequestEvent): void | Promise<void>;\n createRichDraft?(options: {\n batchId: string;\n sources: ChannelTurnSource[];\n }): ChannelGatewayRichDraft | null;\n}\n\nexport interface ChannelGatewayRichDraft {\n handleDelta(delta: StreamDeltaMessage[\"delta\"]): void;\n flushPending(): Promise<void>;\n dispose(): void;\n}\n\nexport interface ChannelGatewayModelStatus {\n modelHandle: string | null;\n scope: \"agent\" | \"conversation\";\n}\n\ntype ActiveGatewayTurn = {\n batchId: string;\n sources: ChannelTurnSource[];\n progress: ReturnType<typeof createChannelTurnProgressBuilder>;\n richDraft: ChannelGatewayRichDraft | null;\n runId?: string;\n};\n\ntype GatewayRuntimeState = {\n runtime: RuntimeScope;\n pendingSourcesByClientMessageId: Map<\n string,\n {\n sources: ChannelTurnSource[];\n disposition: \"submitting\" | \"queued\";\n acceptedAtQueueRevision?: number;\n }\n >;\n queueRevision: number;\n active: ActiveGatewayTurn | null;\n registrationSignature: string | null;\n registration: Promise<void> | null;\n routedSources: ChannelTurnSource[];\n replayedControlRequestIds: Set<string>;\n submissionQueue: Promise<void>;\n hookQueue: Promise<void> | null;\n acceptedClientMessageIds: Set<string>;\n modelStatus: ChannelGatewayModelStatus | null;\n};\n\nfunction runtimeKey(runtime: RuntimeScope): string {\n return `${runtime.agent_id}:${runtime.conversation_id}`;\n}\n\nfunction sourceKey(source: ChannelTurnSource): string {\n return [\n source.channel,\n source.accountId ?? \"\",\n source.chatId,\n source.threadId ?? \"\",\n ].join(\":\");\n}\n\nfunction uniqueSources(sources: ChannelTurnSource[]): ChannelTurnSource[] {\n const byKey = new Map<string, ChannelTurnSource>();\n for (const source of sources) byKey.set(sourceKey(source), source);\n return [...byKey.values()];\n}\n\nfunction stopReasonFromDelta(\n message: StreamDeltaMessage,\n): StopReasonType | null {\n const delta = message.delta;\n return delta.message_type === \"stop_reason\" &&\n \"stop_reason\" in delta &&\n typeof delta.stop_reason === \"string\"\n ? delta.stop_reason\n : null;\n}\n\nfunction runIdFromDelta(message: StreamDeltaMessage): string | undefined {\n const runId = \"run_id\" in message.delta ? message.delta.run_id : undefined;\n return typeof runId === \"string\" && runId.length > 0 ? runId : undefined;\n}\n\nfunction lifecycleOutcome(\n stopReason: StopReasonType,\n): \"completed\" | \"error\" | \"cancelled\" {\n if (stopReason === \"cancelled\") return \"cancelled\";\n if (stopReason === \"end_turn\" || stopReason === \"tool_rule\") {\n return \"completed\";\n }\n return \"error\";\n}\n\n/**\n * Process-neutral Channels bridge. It only speaks the public App Server\n * protocol; channel adapters and credentials stay behind the injected hooks.\n */\nexport class ChannelGateway {\n private readonly states = new Map<string, GatewayRuntimeState>();\n private readonly disposers: Array<() => void> = [];\n // Tool publication and runtime_start both replace the same connection-owned\n // registration. Keep them ordered so a late runtime_start cannot resurrect a\n // route that an overlapping route-removal update just revoked.\n private registrationQueue = Promise.resolve();\n\n constructor(\n private readonly client: ChannelGatewayClient,\n private readonly hooks: ChannelGatewayHooks,\n ) {\n this.disposers.push(\n client.onMessage((message) => this.handleMessage(message)),\n client.onExternalToolCall((request) => {\n const state = request.runtime\n ? this.states.get(runtimeKey(request.runtime))\n : undefined;\n const sources = state?.active?.sources ?? state?.routedSources ?? [];\n return hooks.executeExternalTool(request, sources);\n }),\n );\n }\n\n close(): void {\n for (const dispose of this.disposers.splice(0)) dispose();\n this.client.close();\n this.states.clear();\n }\n\n async submit(delivery: ChannelGatewayDelivery): Promise<boolean> {\n const state = this.getState(delivery.runtime);\n const submission = state.submissionQueue.then(() =>\n this.submitDelivery(state, delivery),\n );\n state.submissionQueue = submission.then(\n () => undefined,\n () => undefined,\n );\n return submission;\n }\n\n private async submitDelivery(\n state: GatewayRuntimeState,\n delivery: ChannelGatewayDelivery,\n ): Promise<boolean> {\n if (state.acceptedClientMessageIds.has(delivery.clientMessageId)) {\n state.acceptedClientMessageIds.delete(delivery.clientMessageId);\n state.acceptedClientMessageIds.add(delivery.clientMessageId);\n return true;\n }\n state.pendingSourcesByClientMessageId.set(delivery.clientMessageId, {\n sources: uniqueSources(delivery.sources),\n disposition: \"submitting\",\n });\n try {\n await this.enqueueRegistration(async () => {\n state.routedSources = uniqueSources([\n ...state.routedSources,\n ...delivery.sources,\n ]);\n await this.performRuntimeRegistration(state, delivery);\n });\n const response = await this.client.submitInput({\n runtime: delivery.runtime,\n payload: {\n kind: \"create_message\",\n messages: [\n {\n role: \"user\",\n content: delivery.content,\n client_message_id: delivery.clientMessageId,\n },\n ],\n image_failure_mode: \"drop\",\n },\n });\n if (!response.accepted) {\n state.pendingSourcesByClientMessageId.delete(delivery.clientMessageId);\n return false;\n }\n state.acceptedClientMessageIds.add(delivery.clientMessageId);\n if (\n state.acceptedClientMessageIds.size > MAX_ACCEPTED_CLIENT_MESSAGE_IDS\n ) {\n const oldest = state.acceptedClientMessageIds.values().next().value;\n if (oldest) state.acceptedClientMessageIds.delete(oldest);\n }\n const queuedEvents = delivery.sources.map((source) =>\n this.enqueueHook(state, () =>\n this.hooks.onLifecycle({ type: \"queued\", source }),\n ),\n );\n if (response.disposition === \"started\") {\n this.activateSources(state, delivery.clientMessageId, delivery.sources);\n state.pendingSourcesByClientMessageId.delete(delivery.clientMessageId);\n } else if (response.disposition === \"queued\") {\n const pending = state.pendingSourcesByClientMessageId.get(\n delivery.clientMessageId,\n );\n if (pending) {\n pending.disposition = \"queued\";\n pending.acceptedAtQueueRevision = state.queueRevision;\n }\n }\n await Promise.all(queuedEvents);\n return true;\n } catch (error) {\n state.pendingSourcesByClientMessageId.delete(delivery.clientMessageId);\n throw error;\n }\n }\n\n async restoreRuntime(\n runtime: RuntimeScope,\n sources: ChannelTurnSource[],\n ): Promise<Set<string>> {\n const state = this.getState(runtime);\n state.replayedControlRequestIds.clear();\n let recoveredTurn: ActiveGatewayTurn | null = null;\n if (!state.active) {\n recoveredTurn = {\n batchId: `channel-recovered-${crypto.randomUUID()}`,\n sources: uniqueSources(sources),\n progress: createChannelTurnProgressBuilder(),\n richDraft: null,\n };\n state.active = recoveredTurn;\n }\n try {\n await this.registerRuntime(runtime, sources);\n } catch (error) {\n if (state.active === recoveredTurn) state.active = null;\n throw error;\n }\n const replayedRequestIds = new Set(state.replayedControlRequestIds);\n if (replayedRequestIds.size === 0 && state.active === recoveredTurn) {\n state.active = null;\n }\n return replayedRequestIds;\n }\n\n async registerRuntime(\n runtime: RuntimeScope,\n sources: ChannelTurnSource[] = [],\n defaultPermissionMode?: ChannelDefaultPermissionMode,\n ): Promise<void> {\n const state = this.getState(runtime);\n await this.enqueueRegistration(async () => {\n this.setRoutedSources(runtime, sources);\n await this.performRuntimeRegistration(state, {\n runtime,\n content: \"\",\n sources,\n clientMessageId: \"recovered\",\n ...(defaultPermissionMode ? { defaultPermissionMode } : {}),\n });\n });\n }\n\n async submitApprovalResponse(\n runtime: RuntimeScope,\n response: ApprovalResponseBody,\n ): Promise<boolean> {\n const result = await this.client.submitInput({\n runtime,\n payload: { kind: \"approval_response\", ...response },\n });\n return result.accepted;\n }\n\n setRoutedSources(runtime: RuntimeScope, sources: ChannelTurnSource[]): void {\n this.getState(runtime).routedSources = uniqueSources(sources);\n }\n\n getKnownRuntimes(): RuntimeScope[] {\n return [...this.states.values()].map((state) => state.runtime);\n }\n\n updateRoutedRuntimeTools(\n updates: readonly RuntimeExternalToolsUpdateGroup[],\n routedSources: Array<{\n runtime: RuntimeScope;\n sources: ChannelTurnSource[];\n }>,\n ): Promise<void> {\n return this.enqueueRegistration(async () => {\n if (updates.length > 0) {\n const response = await this.client.runtimeExternalToolsUpdate({\n updates,\n });\n if (!response.success) {\n throw new Error(\n response.error ?? \"Failed to update routed runtime tools\",\n );\n }\n }\n for (const update of routedSources) {\n this.setRoutedSources(update.runtime, update.sources);\n }\n });\n }\n\n getModelStatus(runtime: RuntimeScope): ChannelGatewayModelStatus | null {\n return this.states.get(runtimeKey(runtime))?.modelStatus ?? null;\n }\n\n updateModelStatus(runtime: RuntimeScope, modelHandle: string | null): void {\n const state = this.getState(runtime);\n state.modelStatus = {\n modelHandle,\n scope: runtime.conversation_id === \"default\" ? \"agent\" : \"conversation\",\n };\n }\n\n private getState(runtime: RuntimeScope): GatewayRuntimeState {\n const key = runtimeKey(runtime);\n let state = this.states.get(key);\n if (!state) {\n state = {\n runtime,\n pendingSourcesByClientMessageId: new Map(),\n queueRevision: 0,\n active: null,\n registrationSignature: null,\n registration: null,\n routedSources: [],\n replayedControlRequestIds: new Set(),\n submissionQueue: Promise.resolve(),\n hookQueue: null,\n acceptedClientMessageIds: new Set(),\n modelStatus: null,\n };\n this.states.set(key, state);\n }\n return state;\n }\n\n private enqueueHook(\n state: GatewayRuntimeState,\n hook: () => void | Promise<void>,\n ): Promise<void> {\n let pending: Promise<void>;\n if (state.hookQueue) {\n pending = state.hookQueue.then(hook);\n } else {\n try {\n pending = Promise.resolve(hook());\n } catch (error) {\n pending = Promise.reject(error);\n }\n }\n const settled = pending.then(\n () => undefined,\n () => undefined,\n );\n state.hookQueue = settled;\n void settled.then(() => {\n if (state.hookQueue === settled) state.hookQueue = null;\n });\n return pending;\n }\n\n private enqueueRegistration<T>(task: () => Promise<T>): Promise<T> {\n const result = this.registrationQueue.then(task, task);\n this.registrationQueue = result.then(\n () => undefined,\n () => undefined,\n );\n return result;\n }\n\n private async performRuntimeRegistration(\n state: GatewayRuntimeState,\n delivery: ChannelGatewayDelivery,\n ): Promise<void> {\n const tool = await this.hooks.buildExternalTool(\n delivery.runtime,\n delivery.sources,\n );\n const signature = JSON.stringify({\n mode: delivery.defaultPermissionMode ?? null,\n tool,\n });\n if (state.registrationSignature === signature && state.registration) {\n return state.registration;\n }\n\n const registration = this.client\n .runtimeStart({\n agent_id: delivery.runtime.agent_id,\n conversation_id: delivery.runtime.conversation_id,\n ...(delivery.defaultPermissionMode\n ? { mode: delivery.defaultPermissionMode }\n : {}),\n recover_approvals: true,\n force_device_status: false,\n wait_for_replay: true,\n preserve_skill_sources: true,\n client_info: { name: \"channel-gateway\", title: \"Channel Gateway\" },\n external_tools: tool ? [{ tools: [tool] }] : [],\n })\n .then((response) => {\n if (!response.success) {\n throw new Error(\n response.error ?? \"Failed to register channel runtime\",\n );\n }\n const agentRecord = response.agent as unknown as Record<\n string,\n unknown\n > | null;\n const conversationRecord = response.conversation as unknown as Record<\n string,\n unknown\n > | null;\n const agentModel =\n typeof agentRecord?.model === \"string\"\n ? agentRecord.model\n : (response.agent?.llm_config?.model ?? null);\n const conversationModel =\n typeof conversationRecord?.model === \"string\"\n ? conversationRecord.model\n : null;\n state.modelStatus = {\n modelHandle:\n delivery.runtime.conversation_id === \"default\"\n ? agentModel\n : (conversationModel ?? agentModel),\n scope:\n delivery.runtime.conversation_id === \"default\"\n ? \"agent\"\n : \"conversation\",\n };\n });\n state.registrationSignature = signature;\n state.registration = registration;\n try {\n await registration;\n } catch (error) {\n if (state.registration === registration) {\n state.registration = null;\n state.registrationSignature = null;\n }\n throw error;\n }\n }\n\n private handleMessage(message: WsProtocolMessage): void {\n if (message.type === \"update_queue\") {\n this.handleQueueUpdate(message);\n return;\n }\n if (message.type === \"stream_delta\") {\n this.handleStreamDelta(message);\n return;\n }\n if (message.type === \"turn_finished\") {\n this.handleTurnFinished(message.runtime, {\n stopReason: message.stop_reason,\n runId: message.run_id,\n error: message.error,\n });\n return;\n }\n if (message.type === \"control_request\") {\n this.handleControlRequest(message);\n }\n }\n\n private handleQueueUpdate(message: QueueUpdateMessage): void {\n const state = this.getState(message.runtime);\n state.queueRevision += 1;\n const nextQueued = new Set(\n message.queue.map((entry) => entry.client_message_id),\n );\n const removed: Array<{\n clientMessageId: string;\n sources: ChannelTurnSource[];\n }> = [];\n for (const [\n clientMessageId,\n pending,\n ] of state.pendingSourcesByClientMessageId) {\n if (\n pending.disposition === \"queued\" &&\n state.queueRevision > (pending.acceptedAtQueueRevision ?? -1) &&\n !nextQueued.has(clientMessageId)\n ) {\n removed.push({ clientMessageId, sources: pending.sources });\n state.pendingSourcesByClientMessageId.delete(clientMessageId);\n }\n }\n if (!state.active && removed.length > 0) {\n const first = removed[0];\n if (first) {\n this.activateSources(\n state,\n first.clientMessageId,\n removed.flatMap((entry) => entry.sources),\n );\n }\n }\n }\n\n private activateSources(\n state: GatewayRuntimeState,\n clientMessageId: string,\n sources: ChannelTurnSource[],\n ): void {\n if (state.active) {\n return;\n }\n state.active = {\n batchId: `channel-${clientMessageId}`,\n sources: uniqueSources(sources),\n progress: createChannelTurnProgressBuilder(),\n richDraft:\n this.hooks.createRichDraft?.({\n batchId: `channel-${clientMessageId}`,\n sources,\n }) ?? null,\n };\n const processingEvent: ChannelTurnLifecycleEvent = {\n type: \"processing\",\n batchId: state.active.batchId,\n sources: state.active.sources,\n };\n void this.enqueueHook(state, () => this.hooks.onLifecycle(processingEvent));\n }\n\n private handleStreamDelta(message: StreamDeltaMessage): void {\n if (message.subagent_id) return;\n\n const state = this.getState(message.runtime);\n const active = state.active;\n if (!active) return;\n\n const runId = runIdFromDelta(message);\n if (runId) active.runId = runId;\n for (const update of active.progress.buildUpdates(message.delta)) {\n void this.enqueueHook(state, () =>\n this.hooks.onProgress({\n type: \"progress\",\n batchId: active.batchId,\n sources: active.sources,\n ...update,\n }),\n );\n }\n active.richDraft?.handleDelta(message.delta);\n\n const stopReason = stopReasonFromDelta(message);\n if (stopReason === \"requires_approval\" || stopReason === \"end_turn\") {\n void active.richDraft?.flushPending();\n }\n // The listener sends a canonical turn_finished event after it classifies\n // terminal failures. Finalizing from this earlier delta would discard that\n // user-safe error detail.\n }\n\n private handleTurnFinished(\n runtime: RuntimeScope,\n terminal: {\n stopReason: StopReasonType;\n runId?: string;\n error?: string;\n },\n ): void {\n const state = this.getState(runtime);\n const active = state.active;\n if (!active) return;\n state.active = null;\n active.richDraft?.dispose();\n void this.enqueueHook(state, () =>\n this.hooks.onLifecycle({\n type: \"finished\",\n batchId: active.batchId,\n sources: active.sources,\n outcome: lifecycleOutcome(terminal.stopReason),\n stopReason: terminal.stopReason,\n ...((terminal.runId ?? active.runId)\n ? { runId: terminal.runId ?? active.runId }\n : {}),\n ...(terminal.error ? { error: terminal.error } : {}),\n }),\n );\n }\n\n private handleControlRequest(message: ControlRequest): void {\n if (!message.agent_id || !message.conversation_id) return;\n const state = this.states.get(\n runtimeKey({\n agent_id: message.agent_id,\n conversation_id: message.conversation_id,\n }),\n );\n if (!state) return;\n const sources = state.active?.sources ?? [];\n state.replayedControlRequestIds.add(message.request_id);\n const sourceScopes = new Map(\n sources.map((source) => [sourceKey(source), source]),\n );\n if (sourceScopes.size !== 1) return;\n const source = [...sourceScopes.values()][0];\n if (!source) return;\n void this.enqueueHook(state, () =>\n this.hooks.onControlRequest({\n requestId: message.request_id,\n kind:\n getInteractiveApprovalKind(message.request.tool_name) ??\n \"generic_tool_approval\",\n source,\n toolName: message.request.tool_name,\n input: message.request.input,\n }),\n );\n }\n}\n",
9
9
  "import type { OutboundChannelMessage } from \"./types\";\n\nconst TELEGRAM_CHANNEL_ID = \"telegram\";\nconst SIGNAL_CHANNEL_ID = \"signal\";\nconst TELEGRAM_PLACEHOLDER_PREFIX = \"LCTELEGRAMHTMLPLACEHOLDER\";\nconst TELEGRAM_PLACEHOLDER_SUFFIX = \"X\";\nconst TELEGRAM_PLACEHOLDER_PATTERN = /LCTELEGRAMHTMLPLACEHOLDER(\\d+)X/g;\nconst SLACK_PLACEHOLDER_PREFIX = \"LCSLACKMRKDWNPLACEHOLDER\";\nconst SLACK_PLACEHOLDER_SUFFIX = \"X\";\nconst SLACK_PLACEHOLDER_PATTERN = /LCSLACKMRKDWNPLACEHOLDER(\\d+)X/g;\nconst SLACK_ANGLE_TOKEN_RE = /<[^>\\n]+>/g;\n\ntype OutboundChannelFormatter = (\n text: string,\n) => Pick<OutboundChannelMessage, \"text\" | \"parseMode\" | \"textStyle\">;\n\nfunction decodeBasicXmlEntities(text: string): string {\n return text\n .replace(/&quot;/g, '\"')\n .replace(/&apos;/g, \"'\")\n .replace(/&#39;/g, \"'\")\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&amp;/g, \"&\");\n}\n\nfunction escapeTelegramHtml(text: string): string {\n return text\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction escapeTelegramHtmlAttribute(text: string): string {\n return escapeTelegramHtml(text)\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\n}\n\nfunction createTelegramPlaceholder(\n placeholders: string[],\n value: string,\n): string {\n const placeholder = `${TELEGRAM_PLACEHOLDER_PREFIX}${placeholders.length}${TELEGRAM_PLACEHOLDER_SUFFIX}`;\n placeholders.push(value);\n return placeholder;\n}\n\nfunction restoreTelegramPlaceholders(\n text: string,\n placeholders: string[],\n): string {\n return text.replace(TELEGRAM_PLACEHOLDER_PATTERN, (_match, index) => {\n return placeholders[Number(index)] ?? \"\";\n });\n}\n\nfunction createSlackPlaceholder(placeholders: string[], value: string): string {\n const placeholder = `${SLACK_PLACEHOLDER_PREFIX}${placeholders.length}${SLACK_PLACEHOLDER_SUFFIX}`;\n placeholders.push(value);\n return placeholder;\n}\n\nfunction restoreSlackPlaceholders(\n text: string,\n placeholders: string[],\n): string {\n return text.replace(SLACK_PLACEHOLDER_PATTERN, (_match, index) => {\n return placeholders[Number(index)] ?? \"\";\n });\n}\n\nfunction replaceFencedCodeBlocks(text: string, placeholders: string[]): string {\n return text.replace(\n /```([^\\n`]*)\\n?([\\s\\S]*?)```/g,\n (_match, _lang, code) => {\n return createTelegramPlaceholder(\n placeholders,\n `<pre>${escapeTelegramHtml(String(code).trimEnd())}</pre>`,\n );\n },\n );\n}\n\nfunction replaceInlineCode(text: string, placeholders: string[]): string {\n return text.replace(/`([^`\\n]+)`/g, (_match, code) => {\n return createTelegramPlaceholder(\n placeholders,\n `<code>${escapeTelegramHtml(String(code))}</code>`,\n );\n });\n}\n\ntype ParsedMarkdownLink = {\n label: string;\n url: string;\n endIndex: number;\n};\n\nfunction parseMarkdownLink(\n text: string,\n startIndex: number,\n): ParsedMarkdownLink | null {\n if (text[startIndex] !== \"[\") {\n return null;\n }\n\n let labelEnd = startIndex + 1;\n let bracketDepth = 1;\n while (labelEnd < text.length) {\n const char = text[labelEnd];\n if (char === \"\\\\\") {\n labelEnd += 2;\n continue;\n }\n if (char === \"[\") {\n bracketDepth++;\n } else if (char === \"]\") {\n bracketDepth--;\n if (bracketDepth === 0) {\n break;\n }\n }\n labelEnd++;\n }\n\n if (bracketDepth !== 0 || text[labelEnd + 1] !== \"(\") {\n return null;\n }\n\n let urlEnd = labelEnd + 2;\n let parenDepth = 1;\n while (urlEnd < text.length) {\n const char = text[urlEnd];\n if (char === \"\\\\\") {\n urlEnd += 2;\n continue;\n }\n if (char === \"(\") {\n parenDepth++;\n } else if (char === \")\") {\n parenDepth--;\n if (parenDepth === 0) {\n break;\n }\n }\n urlEnd++;\n }\n\n if (parenDepth !== 0) {\n return null;\n }\n\n const label = text.slice(startIndex + 1, labelEnd);\n const url = text.slice(labelEnd + 2, urlEnd).trim();\n if (!url) {\n return null;\n }\n\n return {\n label,\n url,\n endIndex: urlEnd + 1,\n };\n}\n\nfunction replaceMarkdownLinks(\n text: string,\n placeholders: string[],\n renderLabel: (label: string) => string,\n): string {\n let result = \"\";\n let index = 0;\n\n while (index < text.length) {\n if (text[index] !== \"[\") {\n result += text[index];\n index++;\n continue;\n }\n\n const link = parseMarkdownLink(text, index);\n if (!link) {\n result += text[index];\n index++;\n continue;\n }\n\n result += createTelegramPlaceholder(\n placeholders,\n `<a href=\"${escapeTelegramHtmlAttribute(link.url)}\">${renderLabel(link.label)}</a>`,\n );\n index = link.endIndex;\n }\n\n return result;\n}\n\nfunction applyTelegramInlineFormatting(text: string): string {\n return text\n .replace(/\\*\\*\\*([^\\s*](?:[\\s\\S]*?[^\\s*])?)\\*\\*\\*/g, \"<b><i>$1</i></b>\")\n .replace(/___([^\\s_](?:[\\s\\S]*?[^\\s_])?)___/g, \"<b><i>$1</i></b>\")\n .replace(/\\*\\*([^\\s*](?:[\\s\\S]*?[^\\s*])?)\\*\\*/g, \"<b>$1</b>\")\n .replace(/__([^\\s_](?:[\\s\\S]*?[^\\s_])?)__/g, \"<b>$1</b>\")\n .replace(/~~([^\\s~](?:[\\s\\S]*?[^\\s~])?)~~/g, \"<s>$1</s>\")\n .replace(/(^|[^\\w*])\\*([^\\s*](?:[\\s\\S]*?[^\\s*])?)\\*(?!\\w)/g, \"$1<i>$2</i>\")\n .replace(/(^|[^\\w_])_([^\\s_](?:[\\s\\S]*?[^\\s_])?)_(?!\\w)/g, \"$1<i>$2</i>\");\n}\n\nfunction replaceTelegramBlockQuotes(\n text: string,\n placeholders: string[],\n): string {\n const lines = text.split(\"\\n\");\n const formattedLines: string[] = [];\n\n for (let index = 0; index < lines.length; index++) {\n const quoteMatch = lines[index]?.match(/^ {0,3}> ?(.*)$/);\n if (!quoteMatch) {\n formattedLines.push(lines[index] ?? \"\");\n continue;\n }\n\n const quoteLines: string[] = [quoteMatch[1] ?? \"\"];\n while (index + 1 < lines.length) {\n const nextMatch = lines[index + 1]?.match(/^ {0,3}> ?(.*)$/);\n if (!nextMatch) {\n break;\n }\n quoteLines.push(nextMatch[1] ?? \"\");\n index++;\n }\n\n formattedLines.push(\n createTelegramPlaceholder(\n placeholders,\n `<blockquote>${formatTelegramText(quoteLines.join(\"\\n\"), {\n enableBlockQuotes: false,\n })}</blockquote>`,\n ),\n );\n }\n\n return formattedLines.join(\"\\n\");\n}\n\nfunction formatTelegramText(\n text: string,\n options?: { enableBlockQuotes?: boolean; enableLinks?: boolean },\n): string {\n const placeholders: string[] = [];\n let result = replaceFencedCodeBlocks(text, placeholders);\n result = replaceInlineCode(result, placeholders);\n\n if (options?.enableLinks !== false) {\n result = replaceMarkdownLinks(result, placeholders, (label) =>\n formatTelegramText(label, {\n enableBlockQuotes: false,\n enableLinks: false,\n }),\n );\n }\n\n if (options?.enableBlockQuotes !== false) {\n result = replaceTelegramBlockQuotes(result, placeholders);\n }\n\n result = escapeTelegramHtml(result);\n result = applyTelegramInlineFormatting(result);\n\n return restoreTelegramPlaceholders(result, placeholders);\n}\n\nexport function markdownToTelegramHtml(text: string): string {\n return formatTelegramText(text);\n}\n\nfunction escapeSlackMrkdwnSegment(text: string): string {\n return text\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction isAllowedSlackAngleToken(token: string): boolean {\n if (!token.startsWith(\"<\") || !token.endsWith(\">\")) {\n return false;\n }\n const inner = token.slice(1, -1);\n return (\n inner.startsWith(\"@\") ||\n inner.startsWith(\"#\") ||\n inner.startsWith(\"!\") ||\n inner.startsWith(\"mailto:\") ||\n inner.startsWith(\"tel:\") ||\n inner.startsWith(\"http://\") ||\n inner.startsWith(\"https://\") ||\n inner.startsWith(\"slack://\")\n );\n}\n\nfunction escapeSlackMrkdwnContent(text: string): string {\n if (!text) {\n return \"\";\n }\n if (!text.includes(\"&\") && !text.includes(\"<\") && !text.includes(\">\")) {\n return text;\n }\n\n SLACK_ANGLE_TOKEN_RE.lastIndex = 0;\n const out: string[] = [];\n let lastIndex = 0;\n\n for (\n let match = SLACK_ANGLE_TOKEN_RE.exec(text);\n match;\n match = SLACK_ANGLE_TOKEN_RE.exec(text)\n ) {\n const matchIndex = match.index ?? 0;\n out.push(escapeSlackMrkdwnSegment(text.slice(lastIndex, matchIndex)));\n const token = match[0] ?? \"\";\n out.push(\n isAllowedSlackAngleToken(token) ? token : escapeSlackMrkdwnSegment(token),\n );\n lastIndex = matchIndex + token.length;\n }\n\n out.push(escapeSlackMrkdwnSegment(text.slice(lastIndex)));\n return out.join(\"\");\n}\n\nfunction escapeSlackMrkdwnText(text: string): string {\n if (!text) {\n return \"\";\n }\n if (!text.includes(\"&\") && !text.includes(\"<\") && !text.includes(\">\")) {\n return text;\n }\n\n return text\n .split(\"\\n\")\n .map((line) => {\n if (line.startsWith(\"> \")) {\n return `> ${escapeSlackMrkdwnContent(line.slice(2))}`;\n }\n return escapeSlackMrkdwnContent(line);\n })\n .join(\"\\n\");\n}\n\nfunction replaceSlackFencedCodeBlocks(\n text: string,\n placeholders: string[],\n): string {\n return text.replace(\n /```([^\\n`]*)\\n?([\\s\\S]*?)```/g,\n (_match, _lang, code) => {\n const normalized = String(code).trimEnd();\n return createSlackPlaceholder(\n placeholders,\n normalized.length > 0 ? `\\`\\`\\`\\n${normalized}\\n\\`\\`\\`` : \"```\\n```\",\n );\n },\n );\n}\n\nfunction replaceSlackInlineCode(text: string, placeholders: string[]): string {\n return text.replace(/`([^`\\n]+)`/g, (_match, code) => {\n return createSlackPlaceholder(placeholders, `\\`${String(code)}\\``);\n });\n}\n\nfunction applySlackInlineFormatting(text: string): string {\n return text\n .replace(/~~([^\\s~](?:[\\s\\S]*?[^\\s~])?)~~/g, \"~$1~\")\n .replace(/(^|[^\\w*])\\*([^\\s*](?:[\\s\\S]*?[^\\s*])?)\\*(?!\\w)/g, \"$1_$2_\")\n .replace(/\\*\\*\\*([^\\s*](?:[\\s\\S]*?[^\\s*])?)\\*\\*\\*/g, \"_*$1*_\")\n .replace(/___([^\\s_](?:[\\s\\S]*?[^\\s_])?)___/g, \"_*$1*_\")\n .replace(/\\*\\*([^\\s*](?:[\\s\\S]*?[^\\s*])?)\\*\\*/g, \"*$1*\")\n .replace(/__([^\\s_](?:[\\s\\S]*?[^\\s_])?)__/g, \"*$1*\");\n}\n\nfunction formatSlackLinkLabel(text: string): string {\n return applySlackInlineFormatting(escapeSlackMrkdwnText(text));\n}\n\nfunction replaceSlackMarkdownLinks(\n text: string,\n placeholders: string[],\n): string {\n let result = \"\";\n let index = 0;\n\n while (index < text.length) {\n if (text[index] !== \"[\") {\n result += text[index];\n index++;\n continue;\n }\n\n const link = parseMarkdownLink(text, index);\n if (!link) {\n result += text[index];\n index++;\n continue;\n }\n\n result += createSlackPlaceholder(\n placeholders,\n `<${escapeSlackMrkdwnSegment(link.url)}|${formatSlackLinkLabel(link.label)}>`,\n );\n index = link.endIndex;\n }\n\n return result;\n}\n\nfunction normalizeSlackBlockFormatting(text: string): string {\n return text\n .split(\"\\n\")\n .map((line) => {\n const headingMatch = line.match(/^\\s{0,3}#{1,6}\\s+(.+)$/);\n if (headingMatch) {\n return `*${headingMatch[1]?.trim() ?? \"\"}*`;\n }\n\n const bulletMatch = line.match(/^(\\s*)[-+*]\\s+(.+)$/);\n if (bulletMatch) {\n return `${bulletMatch[1] ?? \"\"}- ${bulletMatch[2] ?? \"\"}`;\n }\n\n return line;\n })\n .join(\"\\n\");\n}\n\nfunction formatSlackText(\n text: string,\n options?: { enableLinks?: boolean },\n): string {\n const placeholders: string[] = [];\n let result = replaceSlackFencedCodeBlocks(text, placeholders);\n result = replaceSlackInlineCode(result, placeholders);\n\n if (options?.enableLinks !== false) {\n result = replaceSlackMarkdownLinks(result, placeholders);\n }\n\n result = escapeSlackMrkdwnText(result);\n result = applySlackInlineFormatting(result);\n result = normalizeSlackBlockFormatting(result);\n\n return restoreSlackPlaceholders(result, placeholders);\n}\n\nexport function markdownToSlackMrkdwn(text: string): string {\n return formatSlackText(text);\n}\n\ntype SignalMarkdownStyle =\n | \"BOLD\"\n | \"ITALIC\"\n | \"SPOILER\"\n | \"STRIKETHROUGH\"\n | \"MONOSPACE\";\n\ntype SignalMarkdownRange = {\n start: number;\n length: number;\n style: SignalMarkdownStyle;\n};\n\ntype SignalMarkdownState = {\n text: string;\n ranges: SignalMarkdownRange[];\n};\n\ntype SignalInlineMarker = {\n delimiter: string;\n styles: SignalMarkdownStyle[];\n requireWordBoundary?: boolean;\n};\n\nconst SIGNAL_INLINE_MARKERS: SignalInlineMarker[] = [\n { delimiter: \"***\", styles: [\"BOLD\", \"ITALIC\"] },\n { delimiter: \"___\", styles: [\"BOLD\", \"ITALIC\"] },\n { delimiter: \"**\", styles: [\"BOLD\"] },\n { delimiter: \"__\", styles: [\"BOLD\"] },\n { delimiter: \"~~\", styles: [\"STRIKETHROUGH\"] },\n { delimiter: \"||\", styles: [\"SPOILER\"] },\n { delimiter: \"*\", styles: [\"ITALIC\"], requireWordBoundary: true },\n { delimiter: \"_\", styles: [\"ITALIC\"], requireWordBoundary: true },\n];\n\nfunction isEscaped(text: string, index: number): boolean {\n let slashCount = 0;\n for (let i = index - 1; i >= 0 && text[i] === \"\\\\\"; i--) {\n slashCount++;\n }\n return slashCount % 2 === 1;\n}\n\nfunction isWordLike(char: string | undefined): boolean {\n return !!char && /[A-Za-z0-9_]/.test(char);\n}\n\nfunction addSignalStyle(\n state: SignalMarkdownState,\n start: number,\n style: SignalMarkdownStyle,\n): void {\n const length = state.text.length - start;\n if (length <= 0) {\n return;\n }\n state.ranges.push({ start, length, style });\n}\n\nfunction canOpenSignalMarker(\n text: string,\n index: number,\n marker: SignalInlineMarker,\n): boolean {\n const next = text[index + marker.delimiter.length];\n if (!next || /\\s/.test(next)) {\n return false;\n }\n if (!marker.requireWordBoundary) {\n return true;\n }\n const previous = text[index - 1];\n return !isWordLike(previous);\n}\n\nfunction isValidSignalMarkerContent(\n text: string,\n closeIndex: number,\n content: string,\n marker: SignalInlineMarker,\n): boolean {\n if (content.length === 0 || /^\\s|\\s$/.test(content)) {\n return false;\n }\n if (!marker.requireWordBoundary) {\n return true;\n }\n const next = text[closeIndex + marker.delimiter.length];\n return !isWordLike(next);\n}\n\nfunction findSignalClosingMarker(\n text: string,\n contentStart: number,\n marker: SignalInlineMarker,\n): number {\n let searchIndex = contentStart;\n while (searchIndex < text.length) {\n const closeIndex = text.indexOf(marker.delimiter, searchIndex);\n if (closeIndex < 0) {\n return -1;\n }\n if (isEscaped(text, closeIndex)) {\n searchIndex = closeIndex + marker.delimiter.length;\n continue;\n }\n const content = text.slice(contentStart, closeIndex);\n if (isValidSignalMarkerContent(text, closeIndex, content, marker)) {\n return closeIndex;\n }\n searchIndex = closeIndex + marker.delimiter.length;\n }\n return -1;\n}\n\nfunction parseSignalInline(text: string, state: SignalMarkdownState): void {\n let index = 0;\n while (index < text.length) {\n if (text[index] === \"\\\\\" && index + 1 < text.length) {\n state.text += text[index + 1] ?? \"\";\n index += 2;\n continue;\n }\n\n if (text[index] === \"`\") {\n const closeIndex = text.indexOf(\"`\", index + 1);\n if (\n closeIndex > index + 1 &&\n !text.slice(index + 1, closeIndex).includes(\"\\n\")\n ) {\n const start = state.text.length;\n state.text += text.slice(index + 1, closeIndex);\n addSignalStyle(state, start, \"MONOSPACE\");\n index = closeIndex + 1;\n continue;\n }\n }\n\n if (text[index] === \"[\") {\n const link = parseMarkdownLink(text, index);\n if (link) {\n parseSignalInline(link.label, state);\n state.text += ` (${link.url})`;\n index = link.endIndex;\n continue;\n }\n }\n\n const marker = SIGNAL_INLINE_MARKERS.find(\n (candidate) =>\n text.startsWith(candidate.delimiter, index) &&\n !isEscaped(text, index) &&\n canOpenSignalMarker(text, index, candidate),\n );\n if (marker) {\n const contentStart = index + marker.delimiter.length;\n const closeIndex = findSignalClosingMarker(text, contentStart, marker);\n if (closeIndex >= 0) {\n const start = state.text.length;\n parseSignalInline(text.slice(contentStart, closeIndex), state);\n for (const style of marker.styles) {\n addSignalStyle(state, start, style);\n }\n index = closeIndex + marker.delimiter.length;\n continue;\n }\n }\n\n state.text += text[index] ?? \"\";\n index++;\n }\n}\n\nfunction parseSignalMarkdownLine(\n line: string,\n state: SignalMarkdownState,\n): void {\n const lineStyles: SignalMarkdownStyle[] = [];\n let content = line;\n\n const headingMatch = content.match(/^\\s{0,3}#{1,6}\\s+(.+)$/);\n if (headingMatch) {\n content = headingMatch[1]?.trim() ?? \"\";\n lineStyles.push(\"BOLD\");\n } else {\n const quoteMatch = content.match(/^\\s{0,3}> ?(.*)$/);\n if (quoteMatch) {\n content = quoteMatch[1] ?? \"\";\n lineStyles.push(\"ITALIC\");\n } else {\n const bulletMatch = content.match(/^(\\s*)[+*]\\s+(.+)$/);\n if (bulletMatch) {\n content = `${bulletMatch[1] ?? \"\"}- ${bulletMatch[2] ?? \"\"}`;\n }\n }\n }\n\n const start = state.text.length;\n parseSignalInline(content, state);\n for (const style of lineStyles) {\n addSignalStyle(state, start, style);\n }\n}\n\nfunction flushSignalCodeBlock(\n state: SignalMarkdownState,\n lines: string[],\n): void {\n const code = lines.join(\"\\n\").trimEnd();\n if (code.length === 0) {\n return;\n }\n const start = state.text.length;\n state.text += code;\n addSignalStyle(state, start, \"MONOSPACE\");\n}\n\nfunction signalTextStyleToString(range: SignalMarkdownRange): string {\n return `${range.start}:${range.length}:${range.style}`;\n}\n\nexport function markdownToSignalTextStyles(\n text: string,\n): Pick<OutboundChannelMessage, \"text\" | \"textStyle\"> {\n const state: SignalMarkdownState = { text: \"\", ranges: [] };\n const lines = text.split(\"\\n\");\n let inCodeBlock = false;\n let codeBlockLines: string[] = [];\n\n for (let index = 0; index < lines.length; index++) {\n const line = lines[index] ?? \"\";\n const isLastLine = index === lines.length - 1;\n\n if (inCodeBlock) {\n if (/^\\s{0,3}```\\s*$/.test(line)) {\n flushSignalCodeBlock(state, codeBlockLines);\n codeBlockLines = [];\n inCodeBlock = false;\n if (!isLastLine) {\n state.text += \"\\n\";\n }\n } else {\n codeBlockLines.push(line);\n }\n continue;\n }\n\n if (/^\\s{0,3}```[^`]*$/.test(line)) {\n inCodeBlock = true;\n codeBlockLines = [];\n continue;\n }\n\n parseSignalMarkdownLine(line, state);\n if (!isLastLine) {\n state.text += \"\\n\";\n }\n }\n\n if (inCodeBlock) {\n flushSignalCodeBlock(state, codeBlockLines);\n }\n\n const seenStyles = new Set<string>();\n const textStyle = state.ranges\n .map(signalTextStyleToString)\n .filter((style) => {\n if (seenStyles.has(style)) {\n return false;\n }\n seenStyles.add(style);\n return true;\n });\n return {\n text: state.text,\n ...(textStyle.length > 0 ? { textStyle } : {}),\n };\n}\n\nconst CHANNEL_OUTBOUND_FORMATTERS: Partial<\n Record<string, OutboundChannelFormatter>\n> = {\n [SIGNAL_CHANNEL_ID](text) {\n return markdownToSignalTextStyles(text);\n },\n [TELEGRAM_CHANNEL_ID](text) {\n return {\n text: markdownToTelegramHtml(text),\n parseMode: \"HTML\",\n };\n },\n slack(text) {\n return {\n text: markdownToSlackMrkdwn(text),\n };\n },\n};\n\nexport function formatOutboundChannelMessage(\n channel: string,\n text: string,\n): Pick<OutboundChannelMessage, \"text\" | \"parseMode\" | \"textStyle\"> {\n const normalizedText = decodeBasicXmlEntities(text);\n const formatter = CHANNEL_OUTBOUND_FORMATTERS[channel];\n if (!formatter) {\n return { text: normalizedText };\n }\n return formatter(normalizedText);\n}\n",
10
10
  "import { formatOutboundChannelMessage } from \"./message-channel-formatting\";\nimport type {\n MessageChannelInput,\n NormalizedMessageChannelInput,\n} from \"./message-channel-types\";\nimport type {\n ChannelMessageActionAdapter,\n ChannelMessageActionRequest,\n ChannelMessageActionRoute,\n ChannelMessageActionTransport,\n ChannelResolvedMessageTarget,\n} from \"./plugin-types\";\nimport type { ChannelTurnSource, SupportedChannelId } from \"./types\";\n\nexport interface MessageChannelExecutionScope {\n agentId: string;\n conversationId: string;\n}\n\nexport interface ResolvedMessageChannelContext {\n route: ChannelMessageActionRoute;\n transport: ChannelMessageActionTransport;\n messageActions: ChannelMessageActionAdapter;\n}\n\nexport interface ResolvedProactiveMessageChannelContext {\n accountId: string;\n target: ChannelResolvedMessageTarget;\n transport: ChannelMessageActionTransport;\n messageActions: ChannelMessageActionAdapter;\n}\n\nexport interface MessageChannelExecutionResolver {\n isSupportedChannel(channel: string): boolean;\n resolveRoutedContext(params: {\n channel: SupportedChannelId;\n chatId: string;\n accountId?: string;\n scope: MessageChannelExecutionScope;\n }):\n | Promise<ResolvedMessageChannelContext | string | null>\n | ResolvedMessageChannelContext\n | string\n | null;\n resolveProactiveContext?(params: {\n channel: SupportedChannelId;\n target: string;\n accountId?: string;\n scope: MessageChannelExecutionScope;\n }):\n | Promise<ResolvedProactiveMessageChannelContext | string>\n | ResolvedProactiveMessageChannelContext\n | string;\n}\n\nexport interface ExecuteMessageChannelOptions {\n scope: MessageChannelExecutionScope;\n resolver: MessageChannelExecutionResolver;\n channelTurnSources?: ChannelTurnSource[];\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n for (const value of values) {\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (trimmed.length > 0) return trimmed;\n }\n }\n return undefined;\n}\n\nfunction firstDefinedBoolean(...values: unknown[]): boolean | undefined {\n for (const value of values) {\n if (typeof value === \"boolean\") return value;\n }\n return undefined;\n}\n\nfunction normalizeChatTarget(\n channel: SupportedChannelId,\n value: string,\n): string {\n const trimmed = value.trim();\n if (channel === \"signal\") return trimmed;\n const parts = trimmed\n .split(\":\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (parts.length === 2 && /^[a-z_-]+$/i.test(parts[0] ?? \"\")) {\n return parts[1] ?? trimmed;\n }\n if (\n parts.length === 3 &&\n /^[a-z_-]+$/i.test(parts[0] ?? \"\") &&\n /^[a-z_-]+$/i.test(parts[1] ?? \"\")\n ) {\n return parts[2] ?? trimmed;\n }\n return trimmed;\n}\n\nfunction normalizeMessageChannelInput(\n input: MessageChannelInput | Record<string, unknown>,\n resolver: MessageChannelExecutionResolver,\n): NormalizedMessageChannelInput | string {\n const channel = firstNonEmptyString(input.channel)?.toLowerCase();\n if (!channel) return \"Error: MessageChannel requires channel.\";\n if (!resolver.isSupportedChannel(channel)) {\n return `Error: Unsupported channel \"${channel}\".`;\n }\n\n const rawAction = firstNonEmptyString(input.action);\n if (!rawAction) return \"Error: MessageChannel requires action.\";\n const action = rawAction.trim().toLowerCase();\n if (!action) {\n return `Error: Unsupported MessageChannel action \"${input.action}\".`;\n }\n\n const rawChatId = firstNonEmptyString(input.chat_id);\n const rawTarget = firstNonEmptyString(input.target);\n if ((!rawChatId && !rawTarget) || (rawChatId && rawTarget)) {\n return \"Error: MessageChannel requires exactly one of chat_id or target.\";\n }\n\n return {\n action,\n channel,\n ...(rawChatId ? { chatId: normalizeChatTarget(channel, rawChatId) } : {}),\n ...(rawTarget ? { target: rawTarget } : {}),\n accountId: firstNonEmptyString(input.accountId),\n message: firstNonEmptyString(input.message),\n replyToMessageId: firstNonEmptyString(input.replyTo),\n threadId: firstNonEmptyString(input.threadId) ?? null,\n messageId: firstNonEmptyString(input.messageId),\n attachmentId: firstNonEmptyString(input.attachmentId),\n emoji: firstNonEmptyString(input.emoji),\n remove: firstDefinedBoolean(input.remove),\n mediaPath: firstNonEmptyString(input.media),\n filename: firstNonEmptyString(input.filename),\n title: firstNonEmptyString(input.title),\n };\n}\n\nfunction buildMessageChannelRequest(\n input: NormalizedMessageChannelInput,\n chatId: string,\n threadId?: string | null,\n): ChannelMessageActionRequest {\n return {\n action: input.action,\n channel: input.channel,\n chatId,\n message: input.message,\n replyToMessageId: input.replyToMessageId,\n threadId: threadId ?? input.threadId ?? null,\n messageId: input.messageId,\n attachmentId: input.attachmentId,\n emoji: input.emoji,\n remove: input.remove,\n mediaPath: input.mediaPath,\n filename: input.filename,\n title: input.title,\n };\n}\n\nfunction inferAccountIdFromChannelTurnSources(params: {\n input: NormalizedMessageChannelInput;\n scope: MessageChannelExecutionScope;\n channelTurnSources?: ChannelTurnSource[];\n}): string | undefined {\n const chatId = params.input.chatId;\n if (!chatId) return undefined;\n\n const accountIds = new Set<string>();\n for (const source of params.channelTurnSources ?? []) {\n if (\n source.channel !== params.input.channel ||\n source.chatId !== chatId ||\n source.agentId !== params.scope.agentId ||\n source.conversationId !== params.scope.conversationId ||\n (params.input.threadId !== null &&\n source.threadId !== params.input.threadId)\n ) {\n continue;\n }\n if (source.accountId?.trim()) accountIds.add(source.accountId.trim());\n }\n return accountIds.size === 1 ? [...accountIds][0] : undefined;\n}\n\nfunction inferThreadIdFromChannelTurnSources(params: {\n input: NormalizedMessageChannelInput;\n scope: MessageChannelExecutionScope;\n accountId?: string;\n channelTurnSources?: ChannelTurnSource[];\n}): string | null | undefined {\n if (!params.input.chatId || params.input.threadId !== null) return undefined;\n\n const threadIds = new Set<string | null>();\n for (const source of params.channelTurnSources ?? []) {\n if (\n source.channel !== params.input.channel ||\n source.chatId !== params.input.chatId ||\n source.agentId !== params.scope.agentId ||\n source.conversationId !== params.scope.conversationId ||\n (params.accountId && source.accountId !== params.accountId)\n ) {\n continue;\n }\n const fallbackThreadId =\n params.input.channel === \"slack\" && source.chatType !== \"direct\"\n ? source.messageId\n : null;\n threadIds.add(source.threadId ?? fallbackThreadId ?? null);\n }\n return threadIds.size === 1 ? [...threadIds][0] : undefined;\n}\n\nfunction noRouteError(params: {\n input: NormalizedMessageChannelInput;\n accountId?: string;\n}): string {\n return params.accountId\n ? `Error: No route for chat_id \"${params.input.chatId}\" on \"${params.input.channel}\" account \"${params.accountId}\" for this agent/conversation.`\n : `Error: No route for chat_id \"${params.input.chatId}\" on \"${params.input.channel}\" for this agent/conversation. If multiple channel accounts can receive this chat, pass accountId (from the channel notification's account_id) to disambiguate.`;\n}\n\nfunction validateResolvedRoute(\n context: ResolvedMessageChannelContext,\n scope: MessageChannelExecutionScope,\n chatId: string,\n accountId?: string,\n): string | null {\n const route = context.route;\n if (\n route.chatId !== chatId ||\n route.agentId !== scope.agentId ||\n route.conversationId !== scope.conversationId ||\n (accountId !== undefined && route.accountId !== accountId)\n ) {\n return \"Error: Resolved MessageChannel route is outside the current execution scope.\";\n }\n return null;\n}\n\nfunction buildProactiveRoute(params: {\n context: ResolvedProactiveMessageChannelContext;\n scope: MessageChannelExecutionScope;\n}): ChannelMessageActionRoute {\n return {\n accountId: params.context.accountId,\n chatId: params.context.target.chatId,\n chatType: params.context.target.chatType,\n threadId: params.context.target.threadId ?? null,\n agentId: params.scope.agentId,\n conversationId: params.scope.conversationId,\n };\n}\n\nasync function dispatchMessageChannelAction(params: {\n request: ChannelMessageActionRequest;\n context: ResolvedMessageChannelContext;\n}): Promise<string> {\n const discovery = params.context.messageActions.describeMessageTool({\n accountId: params.context.route.accountId ?? null,\n });\n const supportedActions = new Set<string>([\"send\"]);\n for (const action of discovery.actions ?? []) supportedActions.add(action);\n if (!supportedActions.has(params.request.action)) {\n return `Error: Action \"${params.request.action}\" is not supported on ${params.request.channel}.`;\n }\n\n return await params.context.messageActions.handleAction({\n request: params.request,\n route: params.context.route,\n adapter: params.context.transport,\n formatText: (text) =>\n formatOutboundChannelMessage(params.request.channel, text),\n });\n}\n\n/**\n * Execute the canonical MessageChannel contract against host-owned routing and\n * transport adapters. This owns normalization, scope checks, thread/account\n * inference, action discovery, and outbound formatting without requiring the\n * local channel registry or local credentials.\n */\nexport async function executeMessageChannel(\n input: MessageChannelInput | Record<string, unknown>,\n options: ExecuteMessageChannelOptions,\n): Promise<string> {\n const normalized = normalizeMessageChannelInput(input, options.resolver);\n if (typeof normalized === \"string\") return normalized;\n if (\n normalized.channel === \"slack\" &&\n normalized.action === \"download-file\" &&\n normalized.target\n ) {\n return \"Error: Slack download-file requires chat_id from a routed channel context; target is not supported.\";\n }\n\n try {\n if (normalized.chatId) {\n const accountId =\n normalized.accountId ??\n inferAccountIdFromChannelTurnSources({\n input: normalized,\n scope: options.scope,\n channelTurnSources: options.channelTurnSources,\n });\n const context = await options.resolver.resolveRoutedContext({\n channel: normalized.channel,\n chatId: normalized.chatId,\n accountId,\n scope: options.scope,\n });\n if (typeof context === \"string\") return context;\n if (!context) return noRouteError({ input: normalized, accountId });\n const routeError = validateResolvedRoute(\n context,\n options.scope,\n normalized.chatId,\n accountId,\n );\n if (routeError) return routeError;\n\n const inferredThreadId = inferThreadIdFromChannelTurnSources({\n input: normalized,\n scope: options.scope,\n accountId,\n channelTurnSources: options.channelTurnSources,\n });\n const requestThreadId =\n normalized.action === \"download-file\"\n ? normalized.threadId\n : (inferredThreadId ??\n (normalized.channel === \"telegram\" &&\n context.route.chatType === \"direct\"\n ? normalized.threadId\n : (context.route.threadId ?? normalized.threadId)));\n return await dispatchMessageChannelAction({\n request: buildMessageChannelRequest(\n normalized,\n normalized.chatId,\n requestThreadId,\n ),\n context,\n });\n }\n\n if (normalized.channel !== \"slack\") {\n return `Error: Explicit MessageChannel targets are not supported on ${normalized.channel}.`;\n }\n if (!options.resolver.resolveProactiveContext) {\n return \"Error: Explicit MessageChannel targets are not supported on slack.\";\n }\n const proactive = await options.resolver.resolveProactiveContext({\n channel: normalized.channel,\n target: normalized.target ?? \"\",\n accountId: normalized.accountId,\n scope: options.scope,\n });\n if (typeof proactive === \"string\") return proactive;\n const context: ResolvedMessageChannelContext = {\n route: buildProactiveRoute({ context: proactive, scope: options.scope }),\n transport: proactive.transport,\n messageActions: proactive.messageActions,\n };\n return await dispatchMessageChannelAction({\n request: buildMessageChannelRequest(\n normalized,\n proactive.target.chatId,\n proactive.target.threadId,\n ),\n context,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : \"unknown error\";\n return `Error sending message to ${normalized.channel}: ${message}`;\n }\n}\n",
11
11
  "import MessageChannelDescription from \"@/tools/descriptions/MessageChannel.md\";\nimport MessageChannelSchema from \"@/tools/schemas/MessageChannel.json\";\nimport type { ExternalToolDefinitionPayload } from \"@/types/app-server-protocol\";\nimport type {\n ChannelMessageActionAdapter,\n ChannelMessageToolDiscovery,\n ChannelMessageToolSchemaContribution,\n} from \"./plugin-types\";\nimport type { SupportedChannelId } from \"./types\";\n\nexport interface MessageChannelToolChannel {\n channelId: SupportedChannelId;\n displayName: string;\n accountId?: string | null;\n messageActions?: Pick<\n ChannelMessageActionAdapter,\n \"describeMessageTool\"\n > | null;\n}\n\nexport interface MessageChannelToolDiscoveryResult {\n activeChannels: SupportedChannelId[];\n displayNames: string[];\n accountIds: string[];\n actions: string[];\n schemaContributions: ChannelMessageToolSchemaContribution[];\n}\n\nexport interface BuildMessageChannelToolOptions {\n channels: readonly MessageChannelToolChannel[];\n /** Whether this tool is attached to one routed external-channel scope. */\n scoped: boolean;\n /** Advertise target-based proactive sends when the host can resolve them. */\n allowProactiveTargets?: boolean;\n}\n\nexport interface ResolvedMessageChannelToolDefinition {\n description: string;\n schema: Record<string, unknown>;\n}\n\nconst TELEGRAM_RICH_RULE_RE =\n /\\n- Telegram supports `action=\"send-rich\"`[^\\n]*\\n?/;\nconst TELEGRAM_RICH_SECTION_RE = /\\n\\nTelegram rich messages:\\n[\\s\\S]*$/;\nconst MESSAGE_CHANNEL_PARAMETER_LINE = (name: string): RegExp =>\n new RegExp(`\\\\n- \\`${name}\\`:[^\\\\n]*`, \"g\");\n\nfunction asSchemaContributionArray(\n schema:\n | ChannelMessageToolSchemaContribution\n | ChannelMessageToolSchemaContribution[]\n | null\n | undefined,\n): ChannelMessageToolSchemaContribution[] {\n if (!schema) return [];\n return Array.isArray(schema) ? schema : [schema];\n}\n\nfunction collectDiscoveryActions(\n discovery: ChannelMessageToolDiscovery | null | undefined,\n): string[] {\n return discovery?.actions ? Array.from(discovery.actions) : [];\n}\n\nexport function resolveMessageChannelToolChannels(\n channels: readonly MessageChannelToolChannel[],\n): MessageChannelToolDiscoveryResult {\n const uniqueChannels = new Map<string, MessageChannelToolChannel>();\n const accountIds = new Set<string>();\n const actions = new Set<string>([\"send\"]);\n const schemaContributions: ChannelMessageToolSchemaContribution[] = [];\n\n for (const channel of channels) {\n if (!uniqueChannels.has(channel.channelId)) {\n uniqueChannels.set(channel.channelId, channel);\n }\n const accountId = channel.accountId?.trim();\n if (accountId) accountIds.add(accountId);\n const discovery = channel.messageActions?.describeMessageTool({\n accountId: accountId ?? null,\n });\n for (const action of collectDiscoveryActions(discovery))\n actions.add(action);\n schemaContributions.push(...asSchemaContributionArray(discovery?.schema));\n }\n\n return {\n activeChannels: [...uniqueChannels.keys()],\n displayNames: [...uniqueChannels.values()].map(\n (channel) => channel.displayName,\n ),\n accountIds: [...accountIds],\n actions: [...actions],\n schemaContributions,\n };\n}\n\nfunction mergeSchemaContributions(\n schema: Record<string, unknown>,\n contributions: ChannelMessageToolSchemaContribution[],\n): Record<string, unknown> {\n const properties = schema.properties as Record<string, unknown> | undefined;\n if (!properties) return schema;\n for (const contribution of contributions) {\n Object.assign(properties, structuredClone(contribution.properties));\n }\n return schema;\n}\n\nexport function buildMessageChannelSchemaFromDiscovery(\n baseSchema: Record<string, unknown>,\n discovery: MessageChannelToolDiscoveryResult,\n allowProactiveTargets = true,\n): Record<string, unknown> {\n const schema = structuredClone(baseSchema);\n const properties = schema.properties as\n | Record<string, Record<string, unknown>>\n | undefined;\n if (!properties) return schema;\n\n if (properties.channel && discovery.activeChannels.length > 0) {\n properties.channel.enum = [...discovery.activeChannels];\n properties.channel.description = `Channel to send the message to. Available channels: ${discovery.activeChannels.join(\", \")}.`;\n }\n if (properties.accountId && discovery.accountIds.length > 0) {\n properties.accountId.enum = [...discovery.accountIds];\n }\n if (properties.action) {\n properties.action.enum = [...discovery.actions];\n properties.action.description = `Action to perform. Available actions: ${discovery.actions.join(\", \")}.`;\n }\n if (!discovery.actions.includes(\"react\")) {\n delete properties.emoji;\n delete properties.remove;\n }\n if (\n !discovery.actions.includes(\"react\") &&\n !discovery.actions.includes(\"download-file\")\n ) {\n delete properties.messageId;\n }\n if (!discovery.actions.includes(\"upload-file\")) {\n delete properties.media;\n delete properties.filename;\n delete properties.title;\n }\n if (!allowProactiveTargets) {\n delete properties.target;\n if (properties.accountId) {\n properties.accountId.description =\n \"Optional channel account identifier from the channel notification, used to disambiguate routed replies.\";\n }\n }\n return mergeSchemaContributions(schema, discovery.schemaContributions);\n}\n\nfunction pruneProactiveTargetGuidance(description: string): string {\n return description\n .replace(\n /There are two supported send modes:\\n- Reply mode: ([^\\n]*)\\n- Proactive mode:[^\\n]*/,\n \"Reply mode: $1\",\n )\n .replace(MESSAGE_CHANNEL_PARAMETER_LINE(\"target\"), \"\")\n .replace(\n /\\n- Pass exactly one of `chat_id` or `target`\\./,\n \"\\n- Pass `chat_id` from the channel notification.\",\n );\n}\n\nfunction pruneInactiveChannelGuidance(\n baseDescription: string,\n activeChannels: SupportedChannelId[],\n actions: string[],\n): string {\n let description = baseDescription.trim();\n if (!actions.includes(\"react\")) {\n description = description\n .replace(MESSAGE_CHANNEL_PARAMETER_LINE(\"emoji\"), \"\")\n .replace(MESSAGE_CHANNEL_PARAMETER_LINE(\"remove\"), \"\")\n .replace(/\\n- `react` should be its own call\\./g, \"\");\n }\n if (!actions.includes(\"react\") && !actions.includes(\"download-file\")) {\n description = description.replace(\n MESSAGE_CHANNEL_PARAMETER_LINE(\"messageId\"),\n \"\",\n );\n }\n if (!actions.includes(\"upload-file\")) {\n description = description\n .replace(MESSAGE_CHANNEL_PARAMETER_LINE(\"media\"), \"\")\n .replace(MESSAGE_CHANNEL_PARAMETER_LINE(\"filename\"), \"\")\n .replace(MESSAGE_CHANNEL_PARAMETER_LINE(\"title\"), \"\")\n .replace(/\\n- `upload-file` can include[^\\n]*/g, \"\");\n }\n if (!activeChannels.includes(\"telegram\")) {\n description = description\n .replace(TELEGRAM_RICH_RULE_RE, \"\\n\")\n .replace(TELEGRAM_RICH_SECTION_RE, \"\");\n }\n return description.trim();\n}\n\nexport function buildMessageChannelDescriptionFromDiscovery(\n baseDescription: string,\n discovery: MessageChannelToolDiscoveryResult,\n scoped: boolean,\n allowProactiveTargets = true,\n): string {\n const description = (\n allowProactiveTargets\n ? pruneInactiveChannelGuidance(\n baseDescription,\n discovery.activeChannels,\n discovery.actions,\n )\n : pruneProactiveTargetGuidance(\n pruneInactiveChannelGuidance(\n baseDescription,\n discovery.activeChannels,\n discovery.actions,\n ),\n )\n ).trim();\n if (discovery.activeChannels.length === 0) {\n return `${description}\\n\\nNo external channel adapters are currently running.`;\n }\n\n const channelList = discovery.displayNames.join(\", \");\n const actionList = discovery.actions.join(\", \");\n const hasAction = (action: string): boolean =>\n discovery.actions.includes(action);\n const scopedReplyContract = scoped\n ? '\\n\\nThis tool is currently scoped to a routed external channel turn. Plain assistant text is not delivered to that external user. If a user-visible reply is appropriate, your final action for the turn must be one MessageChannel call with action=\"send\", channel from the notification, chat_id from the notification, and message containing the reply. If no user-visible response is appropriate, do not call MessageChannel and do not send an empty acknowledgement. For lightweight acknowledgement, prefer action=\"react\" when supported. If the useful response belongs later, schedule the follow-up instead of sending a placeholder.'\n : \"\";\n const slackWorkAcknowledgement = discovery.activeChannels.includes(\"slack\")\n ? '\\n\\nFor Slack requests that require nontrivial work or several tool calls, send one short MessageChannel call with action=\"send\" before starting other tools. This gives the Slack user verbal acknowledgement and a View in web link. Do not do this for no-ops, reaction-only responses, or simple no-tool answers.'\n : \"\";\n const slackAttachmentDownload =\n discovery.activeChannels.includes(\"slack\") && hasAction(\"download-file\")\n ? '\\n\\nSlack attachments that exceed the automatic download limit include an exact recovery instruction. Use action=\"download-file\" with channel, chat_id, attachmentId, and messageId from that instruction. The action saves the file in the normal Slack inbound attachment directory and returns its local_path. Downloads that outlast the synchronous window return a task_id instead; wait for the local_path with TaskOutput (block: true, timeout: 600000) or cancel with TaskStop.'\n : \"\";\n const slackThreadGuidance =\n scoped && discovery.activeChannels.includes(\"slack\")\n ? \"\\n\\nReplies to routed Slack threads stay in the current thread automatically.\"\n : \"\";\n const telegramTopicGuidance =\n scoped && discovery.activeChannels.includes(\"telegram\")\n ? \"\\n\\nReplies to routed Telegram topics stay in the current topic automatically.\"\n : \"\";\n const slackCapabilities = discovery.activeChannels.includes(\"slack\")\n ? [\n hasAction(\"react\") ? 'action=\"react\" with emoji + messageId' : \"\",\n hasAction(\"upload-file\") ? 'action=\"upload-file\" with media' : \"\",\n hasAction(\"download-file\")\n ? 'action=\"download-file\" with attachmentId + messageId'\n : \"\",\n ].filter(Boolean)\n : [];\n const slackCapabilityGuidance =\n slackCapabilities.length > 0\n ? `\\n\\nOn Slack, this tool also supports ${slackCapabilities.join(\", \")}.`\n : \"\";\n const telegramCapabilities = discovery.activeChannels.includes(\"telegram\")\n ? '\\n\\nOn Telegram, this tool also supports action=\"react\" with emoji + messageId and action=\"upload-file\" with media.'\n : \"\";\n const discordCapabilities = discovery.activeChannels.includes(\"discord\")\n ? '\\n\\nOn Discord, this tool also supports action=\"react\" with emoji + messageId and action=\"upload-file\" with media. Discord reactions accept native Unicode emoji and custom emoji syntax like <:name:id>.'\n : \"\";\n const whatsappCapabilities = discovery.activeChannels.includes(\"whatsapp\")\n ? '\\n\\nOn WhatsApp, this tool also supports action=\"react\" with emoji + messageId and action=\"upload-file\" with media. Voice memo/audio uploads must be Ogg/Opus (.ogg, .oga, or .opus), not MP3/M4A/WAV. Replies are sent as the linked WhatsApp number.'\n : \"\";\n const signalCapabilities = discovery.activeChannels.includes(\"signal\")\n ? '\\n\\nOn Signal, this tool also supports action=\"react\" with emoji + messageId and action=\"upload-file\" with media. Replies are sent as the linked Signal account through signal-cli-rest-api.'\n : \"\";\n\n return `${description}${scopedReplyContract}${slackThreadGuidance}${telegramTopicGuidance}${slackCapabilityGuidance}${slackWorkAcknowledgement}${slackAttachmentDownload}${telegramCapabilities}${discordCapabilities}${whatsappCapabilities}${signalCapabilities}\\n\\nCurrently active channels: ${channelList}. Available actions across the active channels: ${actionList}. The JSON schema reflects the currently active channel plugins.`;\n}\n\nexport function buildMessageChannelToolFromDiscovery(params: {\n baseDescription: string;\n baseSchema: Record<string, unknown>;\n discovery: MessageChannelToolDiscoveryResult;\n scoped: boolean;\n allowProactiveTargets?: boolean;\n}): ResolvedMessageChannelToolDefinition {\n return {\n description: buildMessageChannelDescriptionFromDiscovery(\n params.baseDescription,\n params.discovery,\n params.scoped,\n params.allowProactiveTargets,\n ),\n schema: buildMessageChannelSchemaFromDiscovery(\n params.baseSchema,\n params.discovery,\n params.allowProactiveTargets,\n ),\n };\n}\n\n/** Build the exact model-facing MessageChannel tool for an external gateway. */\nexport function buildMessageChannelExternalToolDefinition(\n options: BuildMessageChannelToolOptions,\n): ExternalToolDefinitionPayload {\n const resolved = buildMessageChannelToolFromDiscovery({\n baseDescription: MessageChannelDescription.trim(),\n baseSchema: MessageChannelSchema,\n discovery: resolveMessageChannelToolChannels(options.channels),\n scoped: options.scoped,\n allowProactiveTargets: options.allowProactiveTargets ?? false,\n });\n return {\n name: \"MessageChannel\",\n label: \"Message Channel\",\n description: resolved.description,\n parameters: resolved.schema,\n };\n}\n"
12
12
  ],
13
- "mappings": "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",
14
- "debugId": "3477006DB55C244E64756E2164756E21",
13
+ "mappings": "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",
14
+ "debugId": "1A3C1825CA83009964756E2164756E21",
15
15
  "names": []
16
16
  }