@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
@@ -148,48 +148,224 @@ async function collectLettaSseAssistantText(body, options = {}) {
148
148
  stopReason
149
149
  };
150
150
  }
151
- // src/channels/processor.ts
152
- function formatSenderLabel(entry) {
153
- const senderName = entry.senderName?.trim();
154
- const senderId = entry.senderId?.trim();
155
- if (senderName && senderId && senderName !== senderId) {
156
- return `${senderName}:${senderId}`;
151
+ // src/constants.ts
152
+ var SYSTEM_REMINDER_TAG = "system-reminder";
153
+ var SYSTEM_REMINDER_OPEN = `<${SYSTEM_REMINDER_TAG}>`;
154
+ var SYSTEM_REMINDER_CLOSE = `</${SYSTEM_REMINDER_TAG}>`;
155
+ var SYSTEM_ALERT_TAG = "system-alert";
156
+ var SYSTEM_ALERT_OPEN = `<${SYSTEM_ALERT_TAG}>`;
157
+ var SYSTEM_ALERT_CLOSE = `</${SYSTEM_ALERT_TAG}>`;
158
+ var ELAPSED_DISPLAY_THRESHOLD_MS = 60 * 1000;
159
+ // src/cli/helpers/git-context.ts
160
+ var {execFileSync} = (() => ({}));
161
+
162
+ // src/channels/xml.ts
163
+ function escapeXmlText(text) {
164
+ return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
165
+ }
166
+ function escapeXmlAttribute(text) {
167
+ return escapeXmlText(text).replace(/"/g, "&quot;").replace(/'/g, "&apos;");
168
+ }
169
+ function formatMebibytes(bytes) {
170
+ const mebibytes = bytes / (1024 * 1024);
171
+ const rounded = mebibytes >= 100 ? Math.round(mebibytes).toString() : mebibytes.toFixed(1);
172
+ return `${rounded.replace(/\.0$/, "")} MiB`;
173
+ }
174
+ function buildAttachmentXml(attachment, context) {
175
+ const attrs = [`kind="${escapeXmlAttribute(attachment.kind)}"`];
176
+ if (attachment.localPath) {
177
+ attrs.push(`local_path="${escapeXmlAttribute(attachment.localPath)}"`);
178
+ } else {
179
+ attrs.push('download_status="not_downloaded"');
180
+ }
181
+ if (attachment.id) {
182
+ attrs.push(`attachment_id="${escapeXmlAttribute(attachment.id)}"`);
183
+ }
184
+ if (attachment.name) {
185
+ attrs.push(`name="${escapeXmlAttribute(attachment.name)}"`);
186
+ }
187
+ if (attachment.mimeType) {
188
+ attrs.push(`mime_type="${escapeXmlAttribute(attachment.mimeType)}"`);
189
+ }
190
+ if (typeof attachment.sizeBytes === "number") {
191
+ attrs.push(`size_bytes="${attachment.sizeBytes}"`);
192
+ }
193
+ const sourceMessageId = attachment.sourceMessageId ?? context.messageId;
194
+ if (!attachment.localPath && sourceMessageId) {
195
+ attrs.push(`source_message_id="${escapeXmlAttribute(sourceMessageId)}"`);
196
+ }
197
+ if (!attachment.localPath && attachment.sourceThreadId) {
198
+ attrs.push(`source_thread_id="${escapeXmlAttribute(attachment.sourceThreadId)}"`);
199
+ }
200
+ if (attachment.downloadReason) {
201
+ attrs.push(`download_reason="${escapeXmlAttribute(attachment.downloadReason)}"`);
202
+ }
203
+ if (typeof attachment.autoDownloadLimitBytes === "number") {
204
+ attrs.push(`auto_download_limit_bytes="${attachment.autoDownloadLimitBytes}"`);
205
+ }
206
+ const children = [];
207
+ if (attachment.transcription) {
208
+ children.push(`<attempted_transcription>${escapeXmlText(attachment.transcription)}</attempted_transcription>`);
209
+ }
210
+ if (attachment.transcriptionError) {
211
+ children.push(`<attempted_transcription_error>${escapeXmlText(attachment.transcriptionError)}</attempted_transcription_error>`);
212
+ }
213
+ if (!attachment.localPath && context.channel === "slack" && attachment.id && sourceMessageId) {
214
+ const accountArg = context.accountId ? `, accountId="${escapeXmlAttribute(context.accountId)}"` : "";
215
+ const threadArg = attachment.sourceThreadId ? `, threadId="${escapeXmlAttribute(attachment.sourceThreadId)}"` : "";
216
+ const action = `MessageChannel with action="download-file", channel="slack", chat_id="${escapeXmlAttribute(context.chatId)}"${accountArg}${threadArg}, attachmentId="${escapeXmlAttribute(attachment.id)}", and messageId="${escapeXmlAttribute(sourceMessageId)}"`;
217
+ if (attachment.downloadReason === "exceeds_auto_download_limit") {
218
+ const sizeNote = typeof attachment.sizeBytes === "number" ? `This file is ${formatMebibytes(attachment.sizeBytes)}${typeof attachment.autoDownloadLimitBytes === "number" ? `, above the ${formatMebibytes(attachment.autoDownloadLimitBytes)} automatic download limit` : ""}. ` : "";
219
+ children.push(`<download-instruction>${sizeNote}Call ${action}. The tool downloads the file into the same Slack inbound attachment directory and returns its local_path. Large downloads return a task_id instead of blocking; wait for the local_path with TaskOutput (block: true, timeout: 600000). Do not ask the sender to reattach it.</download-instruction>`);
220
+ } else {
221
+ children.push(`<download-retry>Automatic download did not complete. Call ${action} to retry. The action may return a precise error if Slack still cannot provide the file.</download-retry>`);
222
+ }
157
223
  }
158
- if (senderName) {
159
- return senderName;
224
+ if (children.length > 0) {
225
+ return `<attachment ${attrs.join(" ")}>
226
+ ${children.join(`
227
+ `)}
228
+ </attachment>`;
229
+ }
230
+ return `<attachment ${attrs.join(" ")} />`;
231
+ }
232
+ function buildReactionXml(msg) {
233
+ if (!msg.reaction) {
234
+ return null;
160
235
  }
161
- if (senderId) {
162
- return senderId;
236
+ const attrs = [
237
+ `action="${escapeXmlAttribute(msg.reaction.action)}"`,
238
+ `emoji="${escapeXmlAttribute(msg.reaction.emoji)}"`,
239
+ `target_message_id="${escapeXmlAttribute(msg.reaction.targetMessageId)}"`
240
+ ];
241
+ if (msg.reaction.targetSenderId) {
242
+ attrs.push(`target_sender_id="${escapeXmlAttribute(msg.reaction.targetSenderId)}"`);
163
243
  }
164
- return "unknown";
244
+ return `<reaction ${attrs.join(" ")} />`;
165
245
  }
166
- function formatThreadContextEntry(entry) {
167
- const messageId = entry.messageId ? `<${entry.messageId}>` : "";
168
- return `[${formatSenderLabel(entry)}]${messageId}:${entry.text}`;
246
+ function buildReplyContextXml(msg) {
247
+ const replyContext = msg.replyContext;
248
+ if (!replyContext) {
249
+ return null;
250
+ }
251
+ const attrs = [];
252
+ if (replyContext.messageId) {
253
+ attrs.push(`message_id="${escapeXmlAttribute(replyContext.messageId)}"`);
254
+ }
255
+ if (replyContext.senderId) {
256
+ attrs.push(`sender_id="${escapeXmlAttribute(replyContext.senderId)}"`);
257
+ }
258
+ if (replyContext.senderName) {
259
+ attrs.push(`sender_name="${escapeXmlAttribute(replyContext.senderName)}"`);
260
+ }
261
+ const attrString = attrs.length > 0 ? ` ${attrs.join(" ")}` : "";
262
+ if (replyContext.text?.trim()) {
263
+ return `<reply-context${attrString}>
264
+ ${escapeXmlText(replyContext.text)}
265
+ </reply-context>`;
266
+ }
267
+ return `<reply-context${attrString} />`;
169
268
  }
170
- function formatThreadContext(context) {
171
- const lines = [];
172
- const label = context.label?.trim();
173
- lines.push(label ? `--- ${label} ---` : "--- Thread Context ---");
174
- if (context.starter) {
175
- lines.push(`starter: ${formatThreadContextEntry(context.starter)}`);
269
+ function buildThreadContextEntryXml(tagName, entry, context) {
270
+ const attrs = [];
271
+ if (entry.senderId) {
272
+ attrs.push(`sender_id="${escapeXmlAttribute(entry.senderId)}"`);
176
273
  }
177
- for (const entry of context.history ?? []) {
178
- lines.push(formatThreadContextEntry(entry));
274
+ if (entry.senderName) {
275
+ attrs.push(`sender_name="${escapeXmlAttribute(entry.senderName)}"`);
179
276
  }
180
- lines.push("--- End Thread Context ---");
181
- return `${lines.join(`
182
- `)}
183
-
184
- `;
277
+ if (entry.messageId) {
278
+ attrs.push(`message_id="${escapeXmlAttribute(entry.messageId)}"`);
279
+ }
280
+ const attrString = attrs.length > 0 ? ` ${attrs.join(" ")}` : "";
281
+ const body = [
282
+ ...entry.text ? [escapeXmlText(entry.text)] : [],
283
+ ...(entry.attachments ?? []).map((attachment) => buildAttachmentXml(attachment, {
284
+ ...context,
285
+ messageId: entry.messageId
286
+ }))
287
+ ].join(`
288
+ `);
289
+ return `<${tagName}${attrString}>
290
+ ${body}
291
+ </${tagName}>`;
185
292
  }
186
- function formatInboundSender(message) {
187
- const senderName = message.senderName?.trim();
188
- if (senderName && senderName !== message.senderId) {
189
- return `${senderName}:${message.senderId}`;
293
+ function buildThreadContextXml(msg) {
294
+ const threadContext = msg.threadContext;
295
+ if (!threadContext) {
296
+ return null;
190
297
  }
191
- return message.senderId;
298
+ const parts = [];
299
+ if (threadContext.starter) {
300
+ parts.push(buildThreadContextEntryXml("thread-starter", threadContext.starter, {
301
+ channel: msg.channel,
302
+ accountId: msg.accountId,
303
+ chatId: msg.chatId
304
+ }));
305
+ }
306
+ const historyEntries = threadContext.history ?? [];
307
+ if (historyEntries.length > 0) {
308
+ parts.push([
309
+ "<thread-history>",
310
+ ...historyEntries.map((entry) => buildThreadContextEntryXml("thread-message", entry, {
311
+ channel: msg.channel,
312
+ accountId: msg.accountId,
313
+ chatId: msg.chatId
314
+ })),
315
+ "</thread-history>"
316
+ ].join(`
317
+ `));
318
+ }
319
+ if (parts.length === 0) {
320
+ return null;
321
+ }
322
+ const attrs = threadContext.label ? ` label="${escapeXmlAttribute(threadContext.label)}"` : "";
323
+ return [`<thread-context${attrs}>`, ...parts, "</thread-context>"].join(`
324
+ `);
325
+ }
326
+ function buildChannelNotificationXml(msg) {
327
+ const attrs = [
328
+ `source="${escapeXmlAttribute(msg.channel)}"`,
329
+ `chat_id="${escapeXmlAttribute(msg.chatId)}"`,
330
+ `sender_id="${escapeXmlAttribute(msg.senderId)}"`
331
+ ];
332
+ if (msg.accountId) {
333
+ attrs.push(`account_id="${escapeXmlAttribute(msg.accountId)}"`);
334
+ }
335
+ if (msg.senderName) {
336
+ attrs.push(`sender_name="${escapeXmlAttribute(msg.senderName)}"`);
337
+ }
338
+ if (msg.messageId) {
339
+ attrs.push(`message_id="${escapeXmlAttribute(msg.messageId)}"`);
340
+ }
341
+ if (msg.threadId) {
342
+ attrs.push(`thread_id="${escapeXmlAttribute(msg.threadId)}"`);
343
+ }
344
+ const attrString = attrs.join(" ");
345
+ const escapedText = msg.text ? escapeXmlText(msg.text) : "";
346
+ const reactionXml = buildReactionXml(msg);
347
+ const replyContextXml = buildReplyContextXml(msg);
348
+ const threadContextXml = buildThreadContextXml(msg);
349
+ const attachmentXml = (msg.attachments ?? []).map((attachment) => buildAttachmentXml(attachment, {
350
+ channel: msg.channel,
351
+ accountId: msg.accountId,
352
+ chatId: msg.chatId,
353
+ messageId: msg.messageId
354
+ }));
355
+ const body = [
356
+ threadContextXml,
357
+ replyContextXml,
358
+ reactionXml,
359
+ ...attachmentXml,
360
+ escapedText
361
+ ].filter(Boolean).join(`
362
+ `);
363
+ return `<channel-notification ${attrString}>
364
+ ${body}
365
+ </channel-notification>`;
192
366
  }
367
+
368
+ // src/channels/processor.ts
193
369
  function buildChannelTurnSource(params) {
194
370
  const { message, route } = params;
195
371
  return {
@@ -206,12 +382,7 @@ function buildChannelTurnSource(params) {
206
382
  };
207
383
  }
208
384
  function formatInboundChannelMessageForAgent(params) {
209
- const { message } = params;
210
- const context = message.threadContext ? formatThreadContext(message.threadContext) : "";
211
- const chatLabel = message.chatLabel?.trim() || message.chatId;
212
- const timestamp = new Date(message.timestamp).toISOString();
213
- const prefix = `[${message.channel}:${chatLabel}][${formatInboundSender(message)}]<${timestamp}>:`;
214
- return `${context}${prefix}${message.text}`;
385
+ return buildChannelNotificationXml(params.message);
215
386
  }
216
387
  function formatLegacyBatchedSender(message) {
217
388
  const senderName = message.senderName?.trim();
@@ -1050,4 +1221,4 @@ export {
1050
1221
  LETTA_STREAM_NO_ASSISTANT_MESSAGE_ERROR
1051
1222
  };
1052
1223
 
1053
- //# debugId=54152C3E895D639864756E2164756E21
1224
+ //# debugId=39670CE4D9784BEC64756E2164756E21
@@ -1,13 +1,16 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/channels/core-stream.ts", "../src/channels/processor.ts", "../src/channels/progress-formatting.ts", "../src/channels/progress-builder.ts"],
3
+ "sources": ["../src/channels/core-stream.ts", "../src/constants.ts", "../src/cli/helpers/git-context.ts", "../src/channels/xml.ts", "../src/channels/processor.ts", "../src/channels/progress-formatting.ts", "../src/channels/progress-builder.ts"],
4
4
  "sourcesContent": [
5
5
  "import type { ChannelTurnProgressUpdate } from \"./types\";\n\nexport interface LettaStreamErrorParams {\n errorType?: string;\n message: string;\n detail?: string;\n runId?: string;\n}\n\nexport interface CollectLettaSseAssistantTextResult {\n text: string;\n chunkCount: number;\n stopReason?: string;\n}\n\nexport interface CollectLettaSseAssistantTextOptions {\n onDelta?: (delta: unknown) => void | Promise<void>;\n onProgressUpdate?: (\n update: ChannelTurnProgressUpdate,\n ) => void | Promise<void>;\n progressBuilder?: {\n buildUpdates(delta: unknown): ChannelTurnProgressUpdate[];\n };\n}\n\nexport interface FormatLettaStreamCoreErrorOptions {\n includeDetail?: boolean;\n}\n\ninterface LettaSseTextContentPart {\n type: \"text\";\n text: string;\n signature?: string;\n}\n\ninterface LettaSseAssistantMessage {\n message_type: \"assistant_message\";\n content?: string | LettaSseTextContentPart[];\n}\n\ninterface LettaSseErrorMessage {\n message_type: \"error_message\";\n error_type?: string;\n message?: string;\n detail?: string;\n run_id?: string;\n}\n\ninterface LettaSseStopReasonMessage {\n message_type: \"stop_reason\";\n stop_reason?: string;\n}\n\nexport const LETTA_STREAM_NO_ASSISTANT_MESSAGE_ERROR =\n \"No assistant message received in stream\";\n\nexport class LettaStreamCoreError extends Error {\n readonly errorType?: string;\n readonly detail?: string;\n readonly runId?: string;\n\n constructor(params: LettaStreamErrorParams) {\n super(params.message);\n this.name = \"LettaStreamCoreError\";\n this.errorType = params.errorType;\n this.detail = params.detail;\n this.runId = params.runId;\n }\n}\n\nexport class LettaStreamNoAssistantMessageError extends Error {\n constructor() {\n super(LETTA_STREAM_NO_ASSISTANT_MESSAGE_ERROR);\n this.name = \"LettaStreamNoAssistantMessageError\";\n }\n}\n\nfunction normalizeErrorLine(value: string | undefined): string | undefined {\n const trimmed = value?.trim();\n return trimmed ? trimmed : undefined;\n}\n\nexport function formatLettaStreamCoreErrorForChannel(\n error: LettaStreamCoreError,\n options: FormatLettaStreamCoreErrorOptions = {},\n): string {\n const message =\n normalizeErrorLine(error.message) ?? \"Core failed to generate a response.\";\n const detail = normalizeErrorLine(error.detail);\n\n if (options.includeDetail === false || !detail || detail === message) {\n return message;\n }\n\n return `${message}\\n${detail}`;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\";\n}\n\nfunction isOptionalString(value: unknown): value is string | undefined {\n return typeof value === \"undefined\" || typeof value === \"string\";\n}\n\nfunction isLettaSseTextContentPart(\n value: unknown,\n): value is LettaSseTextContentPart {\n if (!isRecord(value)) {\n return false;\n }\n return (\n value.type === \"text\" &&\n typeof value.text === \"string\" &&\n isOptionalString(value.signature)\n );\n}\n\nfunction isLettaSseAssistantMessage(\n value: unknown,\n): value is LettaSseAssistantMessage {\n if (!isRecord(value) || value.message_type !== \"assistant_message\") {\n return false;\n }\n const content = value.content;\n return (\n typeof content === \"undefined\" ||\n typeof content === \"string\" ||\n (Array.isArray(content) && content.every(isLettaSseTextContentPart))\n );\n}\n\nfunction isLettaSseErrorMessage(value: unknown): value is LettaSseErrorMessage {\n if (!isRecord(value) || value.message_type !== \"error_message\") {\n return false;\n }\n return (\n isOptionalString(value.error_type) &&\n isOptionalString(value.message) &&\n isOptionalString(value.detail) &&\n isOptionalString(value.run_id)\n );\n}\n\nfunction isLettaSseStopReasonMessage(\n value: unknown,\n): value is LettaSseStopReasonMessage {\n if (!isRecord(value) || value.message_type !== \"stop_reason\") {\n return false;\n }\n return isOptionalString(value.stop_reason);\n}\n\nfunction coreErrorFromMessage(\n message: LettaSseErrorMessage,\n): LettaStreamCoreError {\n return new LettaStreamCoreError({\n errorType: message.error_type,\n message: message.message ?? \"Core failed to generate a response.\",\n detail: message.detail,\n runId: message.run_id,\n });\n}\n\nfunction collectAssistantContent(message: LettaSseAssistantMessage): string[] {\n if (typeof message.content === \"string\") {\n return [message.content];\n }\n if (Array.isArray(message.content)) {\n return message.content.map((part) => part.text);\n }\n return [];\n}\n\nexport async function collectLettaSseAssistantText(\n body: ReadableStream<Uint8Array>,\n options: CollectLettaSseAssistantTextOptions = {},\n): Promise<CollectLettaSseAssistantTextResult> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n const assistantMessages: string[] = [];\n let stopReason: string | undefined;\n\n async function processData(data: string): Promise<void> {\n if (data === \"[DONE]\") {\n return;\n }\n\n const parsed: unknown = JSON.parse(data);\n await options.onDelta?.(parsed);\n const progressUpdates = options.progressBuilder?.buildUpdates(parsed) ?? [];\n for (const update of progressUpdates) {\n await options.onProgressUpdate?.(update);\n }\n\n if (isLettaSseErrorMessage(parsed)) {\n throw coreErrorFromMessage(parsed);\n }\n if (isLettaSseAssistantMessage(parsed)) {\n assistantMessages.push(...collectAssistantContent(parsed));\n return;\n }\n if (isLettaSseStopReasonMessage(parsed)) {\n stopReason = parsed.stop_reason;\n }\n }\n\n async function processLine(line: string): Promise<void> {\n if (!line.trim() || !line.startsWith(\"data: \")) {\n return;\n }\n await processData(line.slice(6));\n }\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n await processLine(line);\n }\n }\n\n const flushed = decoder.decode();\n if (flushed) {\n buffer += flushed;\n }\n if (buffer) {\n await processLine(buffer);\n }\n } finally {\n reader.releaseLock();\n }\n\n const text = assistantMessages.join(\" \").trim();\n if (!text) {\n throw new LettaStreamNoAssistantMessageError();\n }\n\n return {\n text,\n chunkCount: assistantMessages.length,\n stopReason,\n };\n}\n",
6
- "import type {\n ChannelRoute,\n ChannelThreadContext,\n ChannelThreadContextEntry,\n ChannelTurnSource,\n InboundChannelMessage,\n OutboundChannelMessage,\n} from \"./types\";\n\nexport interface BuildChannelTurnSourceParams {\n message: InboundChannelMessage;\n route: ChannelRoute;\n}\n\nexport interface FormatInboundChannelMessageParams {\n message: InboundChannelMessage;\n}\n\nexport interface ChannelBatchMessage {\n text: string;\n senderId?: string;\n senderName?: string;\n timestamp?: string | number;\n channelTurnSource?: ChannelTurnSource;\n}\n\nexport interface FormatBatchedChannelMessagesParams {\n messages: ChannelBatchMessage[];\n}\n\nexport interface BuildOutboundChannelMessageFromTurnSourceParams {\n turnSource: ChannelTurnSource;\n text: string;\n}\n\nfunction formatSenderLabel(entry: ChannelThreadContextEntry): string {\n const senderName = entry.senderName?.trim();\n const senderId = entry.senderId?.trim();\n if (senderName && senderId && senderName !== senderId) {\n return `${senderName}:${senderId}`;\n }\n if (senderName) {\n return senderName;\n }\n if (senderId) {\n return senderId;\n }\n return \"unknown\";\n}\n\nfunction formatThreadContextEntry(entry: ChannelThreadContextEntry): string {\n const messageId = entry.messageId ? `<${entry.messageId}>` : \"\";\n return `[${formatSenderLabel(entry)}]${messageId}:${entry.text}`;\n}\n\nfunction formatThreadContext(context: ChannelThreadContext): string {\n const lines: string[] = [];\n const label = context.label?.trim();\n lines.push(label ? `--- ${label} ---` : \"--- Thread Context ---\");\n if (context.starter) {\n lines.push(`starter: ${formatThreadContextEntry(context.starter)}`);\n }\n for (const entry of context.history ?? []) {\n lines.push(formatThreadContextEntry(entry));\n }\n lines.push(\"--- End Thread Context ---\");\n return `${lines.join(\"\\n\")}\\n\\n`;\n}\n\nfunction formatInboundSender(message: InboundChannelMessage): string {\n const senderName = message.senderName?.trim();\n if (senderName && senderName !== message.senderId) {\n return `${senderName}:${message.senderId}`;\n }\n return message.senderId;\n}\n\nexport function buildChannelTurnSource(\n params: BuildChannelTurnSourceParams,\n): ChannelTurnSource {\n const { message, route } = params;\n return {\n channel: message.channel,\n accountId: message.accountId ?? route.accountId,\n chatId: message.chatId,\n chatType: message.chatType ?? route.chatType,\n senderId: message.senderId,\n senderTeamId: message.senderTeamId,\n messageId: message.messageId,\n threadId: message.threadId ?? route.threadId ?? null,\n agentId: route.agentId,\n conversationId: route.conversationId,\n };\n}\n\nexport function formatInboundChannelMessageForAgent(\n params: FormatInboundChannelMessageParams,\n): string {\n const { message } = params;\n const context = message.threadContext\n ? formatThreadContext(message.threadContext)\n : \"\";\n const chatLabel = message.chatLabel?.trim() || message.chatId;\n const timestamp = new Date(message.timestamp).toISOString();\n const prefix = `[${message.channel}:${chatLabel}][${formatInboundSender(\n message,\n )}]<${timestamp}>:`;\n return `${context}${prefix}${message.text}`;\n}\n\nfunction formatLegacyBatchedSender(message: ChannelBatchMessage): string {\n const senderName = message.senderName?.trim();\n const senderId = message.senderId?.trim() ?? \"unknown\";\n if (senderName && senderName !== senderId) {\n return `${senderName}:${senderId}`;\n }\n return senderId;\n}\n\nexport function formatBatchedChannelMessagesForAgent(\n params: FormatBatchedChannelMessagesParams,\n): string {\n const { messages } = params;\n if (messages.length === 0) {\n return \"\";\n }\n const firstMessage = messages[0];\n if (messages.length === 1 && firstMessage) {\n return firstMessage.text;\n }\n\n if (messages.every((message) => message.channelTurnSource)) {\n const formatted = messages.map((message) => message.text).join(\"\\n\");\n return `--- Batched Channel Messages (${messages.length}) ---\\n${formatted}\\n--- End Batched Channel Messages ---`;\n }\n\n const formatted = messages\n .map((message) => {\n const timestamp = message.timestamp ?? \"unknown\";\n return `[user@${formatLegacyBatchedSender(message)}]<${timestamp}>:${message.text}`;\n })\n .join(\"\\n\");\n\n return `--- Batched Messages (${messages.length}) ---\\n${formatted}\\n--- End Batched Messages ---`;\n}\n\nexport function buildOutboundChannelMessageFromTurnSource(\n params: BuildOutboundChannelMessageFromTurnSourceParams,\n): OutboundChannelMessage {\n const { turnSource } = params;\n return {\n channel: turnSource.channel,\n accountId: turnSource.accountId,\n chatId: turnSource.chatId,\n threadId: turnSource.threadId,\n text: params.text,\n agentId: turnSource.agentId,\n conversationId: turnSource.conversationId,\n };\n}\n",
6
+ "/**\n * Application-wide constants\n */\n\n/**\n * Default model ID to use when no model is specified\n */\nexport const DEFAULT_MODEL_ID = \"auto\";\n\n/**\n * Default model handle to use for conversation compaction / summarization.\n */\nexport const DEFAULT_SUMMARIZATION_MODEL = \"letta/auto\";\n\n/**\n * Default model handle for lightweight conversation title generation.\n */\nexport const DEFAULT_TITLE_SUMMARIZATION_MODEL = \"openai/gpt-5.6-luna\";\n\n/**\n * Default agent name when creating a new agent\n */\nexport const DEFAULT_AGENT_NAME = \"Letta Code\";\n\n/**\n * Message displayed when user interrupts tool execution\n */\nexport const INTERRUPTED_BY_USER = \"Interrupted by user\";\n\n/**\n * Synthetic tool result injected when a turn ended without completing all tool calls\n * (e.g. process crash or unhandled stream error). Settled automatically at the start\n * of the next turn so the conversation history stays valid for the provider.\n */\nexport const TURN_DID_NOT_COMPLETE = \"Turn did not complete\";\n\n/**\n * XML tag used to wrap system reminder content injected into messages\n */\nexport const SYSTEM_REMINDER_TAG = \"system-reminder\";\nexport const SYSTEM_REMINDER_OPEN = `<${SYSTEM_REMINDER_TAG}>`;\nexport const SYSTEM_REMINDER_CLOSE = `</${SYSTEM_REMINDER_TAG}>`;\n// Legacy tag kept for parsing/backward compatibility with older saved messages.\nexport const SYSTEM_ALERT_TAG = \"system-alert\";\nexport const SYSTEM_ALERT_OPEN = `<${SYSTEM_ALERT_TAG}>`;\nexport const SYSTEM_ALERT_CLOSE = `</${SYSTEM_ALERT_TAG}>`;\n\n/**\n * How often (in turns) to check for memfs sync conflicts, even without\n * filesystem change events. Catches block-only changes (e.g. ADE/API edits).\n */\nexport const MEMFS_CONFLICT_CHECK_INTERVAL = 5;\n\n/**\n * Header displayed before compaction summary when conversation context is truncated\n */\nexport const COMPACTION_SUMMARY_HEADER =\n \"(Earlier messages in this conversation have been compacted to free up context, summarized below)\";\n\n/**\n * Status bar thresholds - only show indicators when values exceed these\n */\n// Show token count after 100 estimated tokens (shows exact count until 1k, then compact)\nexport const TOKEN_DISPLAY_THRESHOLD = 100;\n// Show elapsed time after 2 minutes (in ms)\nexport const ELAPSED_DISPLAY_THRESHOLD_MS = 60 * 1000;\n",
7
+ "import { execFileSync } from \"node:child_process\";\n\nexport interface GitContextSnapshot {\n isGitRepo: boolean;\n branch: string | null;\n status: string | null;\n recentCommits: string | null;\n gitUser: string | null;\n}\n\nexport interface GatherGitContextOptions {\n cwd?: string;\n recentCommitLimit?: number;\n /**\n * Git log format string passed to `git log --format=...`.\n * If omitted, uses `git log --oneline`.\n */\n recentCommitFormat?: string;\n statusLineLimit?: number;\n}\n\nfunction runGit(args: string[], cwd: string): string | null {\n try {\n return execFileSync(\"git\", args, {\n cwd,\n encoding: \"utf-8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n windowsHide: true,\n }).trim();\n } catch {\n return null;\n }\n}\n\nfunction truncateLines(value: string, maxLines: number): string {\n const lines = value.split(\"\\n\");\n if (lines.length <= maxLines) {\n return value;\n }\n return (\n lines.slice(0, maxLines).join(\"\\n\") +\n `\\n... and ${lines.length - maxLines} more changes`\n );\n}\n\nfunction formatGitUser(\n name: string | null,\n email: string | null,\n): string | null {\n if (!name && !email) {\n return null;\n }\n if (name && email) {\n return `${name} <${email}>`;\n }\n return name || email;\n}\n\nexport function gatherGitContextSnapshot(\n options: GatherGitContextOptions = {},\n): GitContextSnapshot {\n const cwd = options.cwd ?? process.cwd();\n const recentCommitLimit = options.recentCommitLimit ?? 3;\n\n if (!runGit([\"rev-parse\", \"--git-dir\"], cwd)) {\n return {\n isGitRepo: false,\n branch: null,\n status: null,\n recentCommits: null,\n gitUser: null,\n };\n }\n\n const branch = runGit([\"branch\", \"--show-current\"], cwd);\n\n const fullStatus = runGit([\"status\", \"--short\"], cwd);\n const status =\n typeof fullStatus === \"string\" && options.statusLineLimit\n ? truncateLines(fullStatus, options.statusLineLimit)\n : fullStatus;\n\n const recentCommits = options.recentCommitFormat\n ? runGit(\n [\n \"log\",\n `--format=${options.recentCommitFormat}`,\n \"-n\",\n String(recentCommitLimit),\n ],\n cwd,\n )\n : runGit([\"log\", \"--oneline\", \"-n\", String(recentCommitLimit)], cwd);\n\n const userConfig = runGit(\n [\"config\", \"--get-regexp\", \"^user\\\\.(name|email)$\"],\n cwd,\n );\n let userName: string | null = null;\n let userEmail: string | null = null;\n if (userConfig) {\n for (const line of userConfig.split(\"\\n\")) {\n if (line.startsWith(\"user.name \"))\n userName = line.slice(\"user.name \".length);\n else if (line.startsWith(\"user.email \"))\n userEmail = line.slice(\"user.email \".length);\n }\n }\n const gitUser = formatGitUser(userName, userEmail);\n\n return {\n isGitRepo: true,\n branch,\n status,\n recentCommits,\n gitUser,\n };\n}\n\n// ─────────────────────────────────────────────────\n// Lightweight git context for DeviceStatus\n// ─────────────────────────────────────────────────\n\nexport interface LightGitContext {\n branch: string | null;\n recent_branches: string[];\n}\n\n/**\n * Get a lightweight git context suitable for the DeviceStatus payload.\n * Fast: only runs `git branch --show-current` and `git branch --sort=-committerdate`.\n * Returns null if the cwd is not inside a git repo.\n */\nexport function getGitContext(cwd: string): LightGitContext | null {\n if (!runGit([\"rev-parse\", \"--git-dir\"], cwd)) {\n return null;\n }\n\n const branch = runGit([\"branch\", \"--show-current\"], cwd);\n\n // Get up to 11 local branches sorted by most recent commit (10 + current)\n const branchList = runGit(\n [\n \"branch\",\n \"--sort=-committerdate\",\n \"--format=%(refname:short)\",\n \"--no-color\",\n ],\n cwd,\n );\n\n const recentBranches = branchList\n ? branchList\n .split(\"\\n\")\n .map((b) => b.trim())\n .filter((b) => b.length > 0 && b !== branch)\n .slice(0, 10)\n : [];\n\n return { branch, recent_branches: recentBranches };\n}\n",
8
+ "/**\n * XML formatting for channel notifications.\n *\n * Produces structured XML that the agent receives as message content.\n * Follows the same escaping patterns used in taskNotifications.ts.\n */\n\nimport type { MessageCreate } from \"@letta-ai/letta-client/resources/agents/agents\";\nimport { getLocalTime } from \"@/cli/helpers/session-context\";\nimport { SYSTEM_REMINDER_CLOSE, SYSTEM_REMINDER_OPEN } from \"@/constants\";\nimport type {\n ChannelMessageAttachment,\n ChannelThreadContextEntry,\n InboundChannelMessage,\n} from \"./types\";\n\n/**\n * Escape XML text-node content without over-escaping quotes that should remain\n * readable inside the rendered message body.\n */\nfunction escapeXmlText(text: string): string {\n return text\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\n/**\n * Escape XML attribute values, including quotes.\n */\nfunction escapeXmlAttribute(text: string): string {\n return escapeXmlText(text).replace(/\"/g, \"&quot;\").replace(/'/g, \"&apos;\");\n}\n\nfunction formatMebibytes(bytes: number): string {\n const mebibytes = bytes / (1024 * 1024);\n const rounded =\n mebibytes >= 100 ? Math.round(mebibytes).toString() : mebibytes.toFixed(1);\n return `${rounded.replace(/\\.0$/, \"\")} MiB`;\n}\n\nfunction hasNotificationAttachmentPaths(msg: InboundChannelMessage): boolean {\n if (msg.attachments?.some((attachment) => attachment.localPath)) {\n return true;\n }\n if (\n msg.threadContext?.starter?.attachments?.some(\n (attachment) => attachment.localPath,\n )\n ) {\n return true;\n }\n return Boolean(\n msg.threadContext?.history?.some((entry) =>\n entry.attachments?.some((attachment) => attachment.localPath),\n ),\n );\n}\n\n/**\n * Format the reminder text that explains channel reply semantics to the agent.\n */\nexport function buildChannelReminderText(msg: InboundChannelMessage): string {\n const localTime = escapeXmlText(getLocalTime());\n const escapedChannel = escapeXmlText(msg.channel);\n\n const lines = [\n SYSTEM_REMINDER_OPEN,\n `External ${escapedChannel} turn. Plain assistant text is not delivered; follow the scoped MessageChannel instructions to respond.`,\n `Current local time on this device: ${localTime}`,\n SYSTEM_REMINDER_CLOSE,\n ];\n\n if (hasNotificationAttachmentPaths(msg)) {\n lines.splice(\n lines.length - 2,\n 0,\n \"If this notification includes attachment local_path values, you may be able to inspect those files using local file or image tools available in your current toolset (for example Read or ViewImage), using the local_path.\",\n );\n }\n\n return lines.join(\"\\n\");\n}\n\ntype AttachmentXmlContext = {\n channel: string;\n accountId?: string;\n chatId: string;\n messageId?: string;\n};\n\nfunction buildAttachmentXml(\n attachment: ChannelMessageAttachment,\n context: AttachmentXmlContext,\n): string {\n const attrs = [`kind=\"${escapeXmlAttribute(attachment.kind)}\"`];\n\n if (attachment.localPath) {\n attrs.push(`local_path=\"${escapeXmlAttribute(attachment.localPath)}\"`);\n } else {\n attrs.push('download_status=\"not_downloaded\"');\n }\n\n if (attachment.id) {\n attrs.push(`attachment_id=\"${escapeXmlAttribute(attachment.id)}\"`);\n }\n if (attachment.name) {\n attrs.push(`name=\"${escapeXmlAttribute(attachment.name)}\"`);\n }\n if (attachment.mimeType) {\n attrs.push(`mime_type=\"${escapeXmlAttribute(attachment.mimeType)}\"`);\n }\n if (typeof attachment.sizeBytes === \"number\") {\n attrs.push(`size_bytes=\"${attachment.sizeBytes}\"`);\n }\n const sourceMessageId = attachment.sourceMessageId ?? context.messageId;\n if (!attachment.localPath && sourceMessageId) {\n attrs.push(`source_message_id=\"${escapeXmlAttribute(sourceMessageId)}\"`);\n }\n if (!attachment.localPath && attachment.sourceThreadId) {\n attrs.push(\n `source_thread_id=\"${escapeXmlAttribute(attachment.sourceThreadId)}\"`,\n );\n }\n if (attachment.downloadReason) {\n attrs.push(\n `download_reason=\"${escapeXmlAttribute(attachment.downloadReason)}\"`,\n );\n }\n if (typeof attachment.autoDownloadLimitBytes === \"number\") {\n attrs.push(\n `auto_download_limit_bytes=\"${attachment.autoDownloadLimitBytes}\"`,\n );\n }\n\n const children: string[] = [];\n if (attachment.transcription) {\n children.push(\n `<attempted_transcription>${escapeXmlText(attachment.transcription)}</attempted_transcription>`,\n );\n }\n if (attachment.transcriptionError) {\n children.push(\n `<attempted_transcription_error>${escapeXmlText(attachment.transcriptionError)}</attempted_transcription_error>`,\n );\n }\n if (\n !attachment.localPath &&\n context.channel === \"slack\" &&\n attachment.id &&\n sourceMessageId\n ) {\n const accountArg = context.accountId\n ? `, accountId=\"${escapeXmlAttribute(context.accountId)}\"`\n : \"\";\n const threadArg = attachment.sourceThreadId\n ? `, threadId=\"${escapeXmlAttribute(attachment.sourceThreadId)}\"`\n : \"\";\n const action = `MessageChannel with action=\"download-file\", channel=\"slack\", chat_id=\"${escapeXmlAttribute(context.chatId)}\"${accountArg}${threadArg}, attachmentId=\"${escapeXmlAttribute(attachment.id)}\", and messageId=\"${escapeXmlAttribute(sourceMessageId)}\"`;\n if (attachment.downloadReason === \"exceeds_auto_download_limit\") {\n const sizeNote =\n typeof attachment.sizeBytes === \"number\"\n ? `This file is ${formatMebibytes(attachment.sizeBytes)}${\n typeof attachment.autoDownloadLimitBytes === \"number\"\n ? `, above the ${formatMebibytes(attachment.autoDownloadLimitBytes)} automatic download limit`\n : \"\"\n }. `\n : \"\";\n children.push(\n `<download-instruction>${sizeNote}Call ${action}. The tool downloads the file into the same Slack inbound attachment directory and returns its local_path. Large downloads return a task_id instead of blocking; wait for the local_path with TaskOutput (block: true, timeout: 600000). Do not ask the sender to reattach it.</download-instruction>`,\n );\n } else {\n children.push(\n `<download-retry>Automatic download did not complete. Call ${action} to retry. The action may return a precise error if Slack still cannot provide the file.</download-retry>`,\n );\n }\n }\n\n if (children.length > 0) {\n return `<attachment ${attrs.join(\" \")}>\\n ${children.join(\"\\n \")}\\n</attachment>`;\n }\n\n return `<attachment ${attrs.join(\" \")} />`;\n}\n\nfunction canEmitInlineImageContentPart(mimeType: string): boolean {\n const normalized = mimeType.split(\";\")[0]?.trim().toLowerCase();\n return (\n !!normalized &&\n normalized.startsWith(\"image/\") &&\n normalized !== \"image/svg+xml\"\n );\n}\n\nfunction buildReactionXml(msg: InboundChannelMessage): string | null {\n if (!msg.reaction) {\n return null;\n }\n\n const attrs = [\n `action=\"${escapeXmlAttribute(msg.reaction.action)}\"`,\n `emoji=\"${escapeXmlAttribute(msg.reaction.emoji)}\"`,\n `target_message_id=\"${escapeXmlAttribute(msg.reaction.targetMessageId)}\"`,\n ];\n\n if (msg.reaction.targetSenderId) {\n attrs.push(\n `target_sender_id=\"${escapeXmlAttribute(msg.reaction.targetSenderId)}\"`,\n );\n }\n\n return `<reaction ${attrs.join(\" \")} />`;\n}\n\nfunction buildReplyContextXml(msg: InboundChannelMessage): string | null {\n const replyContext = msg.replyContext;\n if (!replyContext) {\n return null;\n }\n\n const attrs: string[] = [];\n if (replyContext.messageId) {\n attrs.push(`message_id=\"${escapeXmlAttribute(replyContext.messageId)}\"`);\n }\n if (replyContext.senderId) {\n attrs.push(`sender_id=\"${escapeXmlAttribute(replyContext.senderId)}\"`);\n }\n if (replyContext.senderName) {\n attrs.push(`sender_name=\"${escapeXmlAttribute(replyContext.senderName)}\"`);\n }\n\n const attrString = attrs.length > 0 ? ` ${attrs.join(\" \")}` : \"\";\n if (replyContext.text?.trim()) {\n return `<reply-context${attrString}>\\n${escapeXmlText(replyContext.text)}\\n</reply-context>`;\n }\n return `<reply-context${attrString} />`;\n}\n\nfunction buildThreadContextEntryXml(\n tagName: string,\n entry: ChannelThreadContextEntry,\n context: Omit<AttachmentXmlContext, \"messageId\">,\n): string {\n const attrs: string[] = [];\n if (entry.senderId) {\n attrs.push(`sender_id=\"${escapeXmlAttribute(entry.senderId)}\"`);\n }\n if (entry.senderName) {\n attrs.push(`sender_name=\"${escapeXmlAttribute(entry.senderName)}\"`);\n }\n if (entry.messageId) {\n attrs.push(`message_id=\"${escapeXmlAttribute(entry.messageId)}\"`);\n }\n\n const attrString = attrs.length > 0 ? ` ${attrs.join(\" \")}` : \"\";\n const body = [\n ...(entry.text ? [escapeXmlText(entry.text)] : []),\n ...(entry.attachments ?? []).map((attachment) =>\n buildAttachmentXml(attachment, {\n ...context,\n messageId: entry.messageId,\n }),\n ),\n ].join(\"\\n\");\n return `<${tagName}${attrString}>\\n${body}\\n</${tagName}>`;\n}\n\nfunction buildThreadContextXml(msg: InboundChannelMessage): string | null {\n const threadContext = msg.threadContext;\n if (!threadContext) {\n return null;\n }\n\n const parts: string[] = [];\n if (threadContext.starter) {\n parts.push(\n buildThreadContextEntryXml(\"thread-starter\", threadContext.starter, {\n channel: msg.channel,\n accountId: msg.accountId,\n chatId: msg.chatId,\n }),\n );\n }\n const historyEntries = threadContext.history ?? [];\n if (historyEntries.length > 0) {\n parts.push(\n [\n \"<thread-history>\",\n ...historyEntries.map((entry) =>\n buildThreadContextEntryXml(\"thread-message\", entry, {\n channel: msg.channel,\n accountId: msg.accountId,\n chatId: msg.chatId,\n }),\n ),\n \"</thread-history>\",\n ].join(\"\\n\"),\n );\n }\n\n if (parts.length === 0) {\n return null;\n }\n\n const attrs = threadContext.label\n ? ` label=\"${escapeXmlAttribute(threadContext.label)}\"`\n : \"\";\n return [`<thread-context${attrs}>`, ...parts, \"</thread-context>\"].join(\"\\n\");\n}\n\n/**\n * Format an inbound channel message as XML for the agent.\n *\n * Example output:\n * ```xml\n * <channel-notification source=\"telegram\" chat_id=\"12345\" sender_id=\"67890\" sender_name=\"John\">\n * Hello from Telegram!\n * </channel-notification>\n * ```\n */\nexport function buildChannelNotificationXml(\n msg: InboundChannelMessage,\n): string {\n const attrs: string[] = [\n `source=\"${escapeXmlAttribute(msg.channel)}\"`,\n `chat_id=\"${escapeXmlAttribute(msg.chatId)}\"`,\n `sender_id=\"${escapeXmlAttribute(msg.senderId)}\"`,\n ];\n\n if (msg.accountId) {\n attrs.push(`account_id=\"${escapeXmlAttribute(msg.accountId)}\"`);\n }\n\n if (msg.senderName) {\n attrs.push(`sender_name=\"${escapeXmlAttribute(msg.senderName)}\"`);\n }\n\n if (msg.messageId) {\n attrs.push(`message_id=\"${escapeXmlAttribute(msg.messageId)}\"`);\n }\n\n if (msg.threadId) {\n attrs.push(`thread_id=\"${escapeXmlAttribute(msg.threadId)}\"`);\n }\n\n const attrString = attrs.join(\" \");\n const escapedText = msg.text ? escapeXmlText(msg.text) : \"\";\n const reactionXml = buildReactionXml(msg);\n const replyContextXml = buildReplyContextXml(msg);\n const threadContextXml = buildThreadContextXml(msg);\n const attachmentXml = (msg.attachments ?? []).map((attachment) =>\n buildAttachmentXml(attachment, {\n channel: msg.channel,\n accountId: msg.accountId,\n chatId: msg.chatId,\n messageId: msg.messageId,\n }),\n );\n const body = [\n threadContextXml,\n replyContextXml,\n reactionXml,\n ...attachmentXml,\n escapedText,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n return `<channel-notification ${attrString}>\\n${body}\\n</channel-notification>`;\n}\n\n/**\n * Format an inbound channel message as structured content parts.\n *\n * The reminder and the notification XML are emitted as separate text parts so\n * UIs that already know how to hide pure system-reminder parts can do so\n * without needing to parse concatenated XML blobs.\n */\nexport function formatChannelNotification(\n msg: InboundChannelMessage,\n): MessageCreate[\"content\"] {\n return [\n { type: \"text\", text: buildChannelReminderText(msg) },\n { type: \"text\", text: buildChannelNotificationXml(msg) },\n ...(msg.attachments ?? []).flatMap((attachment) => {\n if (\n attachment.kind !== \"image\" ||\n typeof attachment.imageDataBase64 !== \"string\" ||\n attachment.imageDataBase64.length === 0 ||\n typeof attachment.mimeType !== \"string\" ||\n !canEmitInlineImageContentPart(attachment.mimeType)\n ) {\n return [];\n }\n\n return [\n {\n type: \"image\" as const,\n source: {\n type: \"base64\" as const,\n media_type: attachment.mimeType,\n data: attachment.imageDataBase64,\n },\n },\n ];\n }),\n ] as MessageCreate[\"content\"];\n}\n",
9
+ "import type {\n ChannelRoute,\n ChannelTurnSource,\n InboundChannelMessage,\n OutboundChannelMessage,\n} from \"./types\";\nimport { buildChannelNotificationXml } from \"./xml\";\n\nexport interface BuildChannelTurnSourceParams {\n message: InboundChannelMessage;\n route: ChannelRoute;\n}\n\nexport interface FormatInboundChannelMessageParams {\n message: InboundChannelMessage;\n}\n\nexport interface ChannelBatchMessage {\n text: string;\n senderId?: string;\n senderName?: string;\n timestamp?: string | number;\n channelTurnSource?: ChannelTurnSource;\n}\n\nexport interface FormatBatchedChannelMessagesParams {\n messages: ChannelBatchMessage[];\n}\n\nexport interface BuildOutboundChannelMessageFromTurnSourceParams {\n turnSource: ChannelTurnSource;\n text: string;\n}\n\nexport function buildChannelTurnSource(\n params: BuildChannelTurnSourceParams,\n): ChannelTurnSource {\n const { message, route } = params;\n return {\n channel: message.channel,\n accountId: message.accountId ?? route.accountId,\n chatId: message.chatId,\n chatType: message.chatType ?? route.chatType,\n senderId: message.senderId,\n senderTeamId: message.senderTeamId,\n messageId: message.messageId,\n threadId: message.threadId ?? route.threadId ?? null,\n agentId: route.agentId,\n conversationId: route.conversationId,\n };\n}\n\nexport function formatInboundChannelMessageForAgent(\n params: FormatInboundChannelMessageParams,\n): string {\n return buildChannelNotificationXml(params.message);\n}\n\nfunction formatLegacyBatchedSender(message: ChannelBatchMessage): string {\n const senderName = message.senderName?.trim();\n const senderId = message.senderId?.trim() ?? \"unknown\";\n if (senderName && senderName !== senderId) {\n return `${senderName}:${senderId}`;\n }\n return senderId;\n}\n\nexport function formatBatchedChannelMessagesForAgent(\n params: FormatBatchedChannelMessagesParams,\n): string {\n const { messages } = params;\n if (messages.length === 0) {\n return \"\";\n }\n const firstMessage = messages[0];\n if (messages.length === 1 && firstMessage) {\n return firstMessage.text;\n }\n\n if (messages.every((message) => message.channelTurnSource)) {\n const formatted = messages.map((message) => message.text).join(\"\\n\");\n return `--- Batched Channel Messages (${messages.length}) ---\\n${formatted}\\n--- End Batched Channel Messages ---`;\n }\n\n const formatted = messages\n .map((message) => {\n const timestamp = message.timestamp ?? \"unknown\";\n return `[user@${formatLegacyBatchedSender(message)}]<${timestamp}>:${message.text}`;\n })\n .join(\"\\n\");\n\n return `--- Batched Messages (${messages.length}) ---\\n${formatted}\\n--- End Batched Messages ---`;\n}\n\nexport function buildOutboundChannelMessageFromTurnSource(\n params: BuildOutboundChannelMessageFromTurnSourceParams,\n): OutboundChannelMessage {\n const { turnSource } = params;\n return {\n channel: turnSource.channel,\n accountId: turnSource.accountId,\n chatId: turnSource.chatId,\n threadId: turnSource.threadId,\n text: params.text,\n agentId: turnSource.agentId,\n conversationId: turnSource.conversationId,\n };\n}\n",
7
10
  "const MAX_PROGRESS_TEXT_LENGTH = 140;\nexport const MAX_PROGRESS_DETAILS_LENGTH = 180;\nconst MAX_SHELL_PROGRESS_DETAILS_LENGTH = 64;\nconst MAX_SUBAGENT_PROGRESS_DETAILS_LENGTH = 180;\nconst ESCAPE_CODE = String.fromCharCode(27);\nconst ANSI_ESCAPE_RE = new RegExp(`${ESCAPE_CODE}\\\\[[0-9;?]*[ -/]*[@-~]`, \"g\");\nconst SECRET_ASSIGNMENT_RE =\n /\\b([A-Z0-9_]*(?:TOKEN|SECRET|PASSWORD|PASS|API[_-]?KEY|ACCESS[_-]?KEY)[A-Z0-9_]*)\\s*=\\s*(\"[^\"]*\"|'[^']*'|\\S+)/gi;\nconst SECRET_JSON_RE =\n /([\"']?(?:token|secret|password|api[_-]?key|access[_-]?key)[\"']?\\s*[:=]\\s*)(\"[^\"]*\"|'[^']*'|\\S+)/gi;\n\nfunction isTaskTool(name: string): boolean {\n return (\n name === \"Task\" || name === \"task\" || name === \"Agent\" || name === \"agent\"\n );\n}\n\nfunction isShellTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return (\n normalized === \"bash\" ||\n normalized === \"exec_command\" ||\n normalized === \"shell_command\" ||\n normalized === \"shell\" ||\n normalized === \"runshellcommand\"\n );\n}\n\nfunction isWebSearchTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return normalized === \"web_search\" || normalized === \"websearch\";\n}\n\nfunction isSearchTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return (\n normalized === \"grep\" ||\n normalized === \"grep_files\" ||\n normalized === \"grepfiles\" ||\n normalized === \"search_file_content\" ||\n normalized === \"searchfilecontent\"\n );\n}\n\nfunction isGlobTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return normalized === \"glob\" || normalized === \"glob_gemini\";\n}\n\nfunction isFileReadTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return (\n normalized === \"read\" ||\n normalized === \"read_file\" ||\n normalized === \"readfile\" ||\n normalized === \"read_file_gemini\" ||\n normalized === \"readfilegemini\"\n );\n}\n\nfunction isFileWriteTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return (\n normalized === \"write\" ||\n normalized === \"write_file\" ||\n normalized === \"writefile\" ||\n normalized === \"write_file_gemini\" ||\n normalized === \"writefilegemini\"\n );\n}\n\nfunction isFileEditTool(name: string): boolean {\n const normalized = name.toLowerCase();\n return (\n normalized === \"edit\" ||\n normalized === \"multi_edit\" ||\n normalized === \"multiedit\" ||\n normalized === \"replace\" ||\n normalized === \"apply_patch\" ||\n normalized === \"applypatch\"\n );\n}\n\nfunction getPathBaseName(filePath: string): string {\n return filePath.split(/[\\\\/]/).filter(Boolean).pop() ?? filePath;\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\"\n ? (value as Record<string, unknown>)\n : null;\n}\n\nexport function firstNonEmptyString(...values: unknown[]): string | undefined {\n for (const value of values) {\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value;\n }\n }\n return undefined;\n}\n\nexport function truncateChannelProgressText(\n value: string,\n maxLength: number,\n marker = \"...\",\n): string {\n if (value.length <= maxLength) {\n return value;\n }\n if (maxLength <= marker.length) {\n return marker.slice(0, Math.max(0, maxLength));\n }\n return `${value.slice(0, maxLength - marker.length).trimEnd()}${marker}`;\n}\n\nfunction replaceControlCharacters(value: string): string {\n let result = \"\";\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index] ?? \"\";\n const code = character.charCodeAt(0);\n result +=\n code <= 8 ||\n code === 11 ||\n code === 12 ||\n (code >= 14 && code <= 31) ||\n code === 127\n ? \" \"\n : character;\n }\n return result;\n}\n\n/**\n * Shared sanitization core for channel-facing progress text: strips ANSI\n * escapes and control characters, redacts secret-looking assignments, and\n * neutralizes platform mentions. Platform adapters layer their own escaping\n * (and truncation marker) on top of this instead of maintaining parallel\n * redaction rules.\n */\nexport function sanitizeChannelProgressCore(value: unknown): string {\n const raw = typeof value === \"string\" ? value : String(value ?? \"\");\n const redacted = raw\n .replace(ANSI_ESCAPE_RE, \"\")\n .replace(SECRET_ASSIGNMENT_RE, \"$1=[redacted]\")\n .replace(SECRET_JSON_RE, \"$1[redacted]\");\n return replaceControlCharacters(redacted)\n .replace(/[\\r\\n\\t]+/g, \" \")\n .replace(/@(?=channel|here|everyone|[A-Za-z0-9._-]+)/gi, \"@\\u200b\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nexport function sanitizeChannelProgressText(\n value: unknown,\n maxLength: number = MAX_PROGRESS_TEXT_LENGTH,\n): string {\n return truncateChannelProgressText(\n sanitizeChannelProgressCore(value),\n maxLength,\n );\n}\n\nexport function sanitizeChannelProgressIdentifier(\n value: unknown,\n fallback: string,\n): string {\n const text = sanitizeChannelProgressText(value, 64);\n if (!text) {\n return fallback;\n }\n const cleaned = text.replace(/[^A-Za-z0-9_.:/ -]/g, \"\").trim();\n return cleaned || fallback;\n}\n\nfunction summarizeShellCommand(command: string): string {\n const normalized = sanitizeChannelProgressText(command, 10_000);\n if (!normalized) {\n return \"\";\n }\n\n // Preview the first command segment (or two short ones) and drop pipelines\n // so multi-step shell invocations stay readable at Slack-row lengths.\n const segments = normalized\n .split(/\\s*;\\s*/)\n .map((segment) => segment.trim())\n .filter(Boolean);\n const firstTwoSegments = segments.slice(0, 2).join(\"; \");\n const previewSource =\n firstTwoSegments.length > 0 && firstTwoSegments.length <= 70\n ? firstTwoSegments\n : (segments[0] ?? normalized);\n const withoutPipeline = previewSource.split(/\\s*\\|\\s*/)[0] ?? previewSource;\n\n return sanitizeChannelProgressText(\n withoutPipeline.trim() || normalized,\n MAX_SHELL_PROGRESS_DETAILS_LENGTH,\n );\n}\n\ntype SkillDescriptionLookup =\n | ReadonlyMap<string, string>\n | Readonly<Record<string, string | undefined>>;\n\nexport type ChannelTurnProgressBuilderOptions = {\n skillDescriptionsByName?: SkillDescriptionLookup;\n};\n\nexport type ToolCallSummary = {\n id?: string;\n name?: string;\n argumentsText?: string;\n};\n\nfunction getSkillNameFromArguments(\n parsedArguments: Record<string, unknown>,\n): string | undefined {\n return firstNonEmptyString(parsedArguments.skill, parsedArguments.skillName);\n}\n\nfunction getFragmentedSkillName(summary: ToolCallSummary): string | undefined {\n const skillMatch = summary.argumentsText?.match(\n /\"(?:skill|skillName)\"\\s*:\\s*\"([^\"]+)\"/,\n );\n return skillMatch?.[1];\n}\n\nfunction resolveSkillDescription(\n skillName: string | undefined,\n options: ChannelTurnProgressBuilderOptions | undefined,\n): string | undefined {\n const lookup = options?.skillDescriptionsByName;\n if (!skillName || !lookup) {\n return undefined;\n }\n if (\"get\" in lookup && typeof lookup.get === \"function\") {\n return firstNonEmptyString(lookup.get(skillName));\n }\n return firstNonEmptyString(\n (lookup as Readonly<Record<string, string | undefined>>)[skillName],\n );\n}\n\nfunction formatSkillProgressTitleFromName(\n skillName: string | undefined,\n): string | undefined {\n const sanitized = sanitizeChannelProgressText(\n skillName,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized ? `Skill: ${sanitized}` : undefined;\n}\n\nfunction formatShellProgressDetailsFromArguments(\n parsedArguments: Record<string, unknown>,\n): string | undefined {\n const description = firstNonEmptyString(parsedArguments.description);\n if (description) {\n return (\n sanitizeChannelProgressText(description, MAX_PROGRESS_DETAILS_LENGTH) ||\n undefined\n );\n }\n\n const commandPreview = firstNonEmptyString(\n parsedArguments.command,\n parsedArguments.cmd,\n );\n return summarizeShellCommand(commandPreview ?? \"\") || undefined;\n}\n\nfunction formatFragmentedShellProgressDetails(\n summary: ToolCallSummary,\n): string | undefined {\n const descriptionMatch = summary.argumentsText?.match(\n /\"description\"\\s*:\\s*\"([^\"]+)\"/,\n );\n if (descriptionMatch?.[1]) {\n return (\n sanitizeChannelProgressText(\n descriptionMatch[1],\n MAX_PROGRESS_DETAILS_LENGTH,\n ) || undefined\n );\n }\n\n // Do not expose command previews from incomplete shell-tool JSON. Slack's\n // task stream appends, rather than replaces, changed details for the same\n // task id; sending a provisional command before the streamed description\n // arrives leaves both strings glued together in the preview.\n return undefined;\n}\n\nfunction formatSubagentProgressDetailsFromArguments(\n parsedArguments: Record<string, unknown>,\n): string | undefined {\n const preview = firstNonEmptyString(\n parsedArguments.prompt,\n parsedArguments.description,\n parsedArguments.subject,\n );\n const sanitized = sanitizeChannelProgressText(\n preview,\n MAX_SUBAGENT_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n}\n\nfunction formatFragmentedSubagentProgressDetails(\n summary: ToolCallSummary,\n): string | undefined {\n const previewMatch = summary.argumentsText?.match(\n /\"(?:prompt|description|subject)\"\\s*:\\s*\"([^\"]+)\"/,\n );\n if (!previewMatch?.[1]) {\n return undefined;\n }\n const sanitized = sanitizeChannelProgressText(\n previewMatch[1],\n MAX_SUBAGENT_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n}\n\nexport type ToolReturnSummary = {\n summary: ToolCallSummary;\n status: \"completed\" | \"error\";\n errorDetails?: string;\n};\n\nexport function parseToolArguments(\n value: string | undefined,\n): Record<string, unknown> | null {\n if (!value) {\n return null;\n }\n try {\n return asRecord(JSON.parse(value));\n } catch {\n return null;\n }\n}\n\nfunction isFetchWebpageToolName(name: string | undefined): boolean {\n return (\n name === \"fetch_webpage\" ||\n name === \"FetchWebpage\" ||\n name === \"fetchWebpage\"\n );\n}\n\nexport function isSkillToolName(name: string | undefined): boolean {\n if (!name) {\n return false;\n }\n const normalized = name.includes(\".\")\n ? name.slice(name.lastIndexOf(\".\") + 1)\n : name;\n return normalized === \"Skill\" || normalized === \"skill\";\n}\n\nfunction isFilePathToolName(name: string): boolean {\n return isFileReadTool(name) || isFileWriteTool(name) || isFileEditTool(name);\n}\n\nfunction getFileToolKind(name: string): \"read\" | \"write\" | \"update\" | null {\n if (isFileReadTool(name)) {\n return \"read\";\n }\n if (isFileWriteTool(name)) {\n return \"write\";\n }\n if (isFileEditTool(name)) {\n return \"update\";\n }\n return null;\n}\n\nfunction countProgressLines(value: string | undefined): number {\n return value ? value.split(\"\\n\").length : 0;\n}\n\ntype LineChangeSummary = {\n additions?: number;\n deletions?: number;\n};\n\nfunction formatLineChangeSummary(summary: LineChangeSummary | null): string {\n if (!summary) {\n return \"\";\n }\n const parts: string[] = [];\n if (summary.additions !== undefined) {\n parts.push(`+${summary.additions}`);\n }\n if (summary.deletions !== undefined) {\n parts.push(`-${summary.deletions}`);\n }\n return parts.length > 0 ? ` ${parts.join(\" \")}` : \"\";\n}\n\nfunction extractFilePathFromArguments(\n parsedArguments: Record<string, unknown>,\n): string | undefined {\n return firstNonEmptyString(\n parsedArguments.file_path,\n parsedArguments.filePath,\n parsedArguments.path,\n );\n}\n\nfunction formatProgressFileName(\n filePath: string | undefined,\n): string | undefined {\n if (!filePath) {\n return undefined;\n }\n const fileName = getPathBaseName(filePath) || filePath;\n return (\n sanitizeChannelProgressText(fileName, MAX_PROGRESS_DETAILS_LENGTH) ||\n undefined\n );\n}\n\nfunction getEditLineChangeSummary(\n parsedArguments: Record<string, unknown>,\n): LineChangeSummary | null {\n const oldString = firstNonEmptyString(parsedArguments.old_string);\n const newString = firstNonEmptyString(parsedArguments.new_string);\n if (oldString === undefined || newString === undefined) {\n return null;\n }\n return {\n additions: countProgressLines(newString),\n deletions: countProgressLines(oldString),\n };\n}\n\nfunction getMultiEditLineChangeSummary(\n parsedArguments: Record<string, unknown>,\n): LineChangeSummary | null {\n if (!Array.isArray(parsedArguments.edits)) {\n return null;\n }\n let additions = 0;\n let deletions = 0;\n let counted = false;\n for (const edit of parsedArguments.edits) {\n const record = asRecord(edit);\n if (!record) {\n continue;\n }\n const oldString = firstNonEmptyString(record.old_string);\n const newString = firstNonEmptyString(record.new_string);\n if (oldString === undefined || newString === undefined) {\n continue;\n }\n additions += countProgressLines(newString);\n deletions += countProgressLines(oldString);\n counted = true;\n }\n return counted ? { additions, deletions } : null;\n}\n\nfunction getWriteLineChangeSummary(\n parsedArguments: Record<string, unknown>,\n): LineChangeSummary | null {\n const content = firstNonEmptyString(parsedArguments.content);\n if (content === undefined) {\n return null;\n }\n return {\n additions: countProgressLines(content),\n };\n}\n\nfunction getFileLineChangeSummary(\n name: string,\n parsedArguments: Record<string, unknown>,\n): LineChangeSummary | null {\n if (isFileWriteTool(name)) {\n return getWriteLineChangeSummary(parsedArguments);\n }\n if (name === \"MultiEdit\" || name === \"multi_edit\") {\n return getMultiEditLineChangeSummary(parsedArguments);\n }\n if (isFileEditTool(name)) {\n return getEditLineChangeSummary(parsedArguments);\n }\n return null;\n}\n\nfunction getFileToolVerb(\n kind: \"read\" | \"write\" | \"update\",\n status: \"started\" | \"completed\" | \"error\",\n): string {\n if (status === \"error\") {\n if (kind === \"read\") {\n return \"Tried to read\";\n }\n if (kind === \"write\") {\n return \"Tried to write\";\n }\n return \"Tried to update\";\n }\n if (status === \"started\") {\n if (kind === \"read\") {\n return \"Reading\";\n }\n if (kind === \"write\") {\n return \"Writing\";\n }\n return \"Updating\";\n }\n if (kind === \"read\") {\n return \"Read\";\n }\n if (kind === \"write\") {\n return \"Wrote\";\n }\n return \"Updated\";\n}\n\nfunction formatFileToolProgressTitle(\n name: string,\n parsedArguments: Record<string, unknown>,\n status: \"started\" | \"completed\" | \"error\",\n): string | undefined {\n const kind = getFileToolKind(name);\n if (!kind) {\n return undefined;\n }\n const fileName = formatProgressFileName(\n extractFilePathFromArguments(parsedArguments),\n );\n if (!fileName) {\n return undefined;\n }\n const stats =\n status === \"completed\"\n ? formatLineChangeSummary(getFileLineChangeSummary(name, parsedArguments))\n : \"\";\n return `${getFileToolVerb(kind, status)} ${fileName}${stats}`;\n}\n\nfunction formatFragmentedFileToolProgressTitle(\n summary: ToolCallSummary,\n status: \"started\" | \"completed\" | \"error\",\n): string | undefined {\n if (!summary.name || !summary.argumentsText) {\n return undefined;\n }\n const kind = getFileToolKind(summary.name);\n if (!kind) {\n return undefined;\n }\n const filePathMatch = summary.argumentsText.match(\n /\"(?:file_path|filePath|path)\"\\s*:\\s*\"([^\"]+)\"/,\n );\n const fileName = formatProgressFileName(filePathMatch?.[1]);\n if (!fileName) {\n return undefined;\n }\n return `${getFileToolVerb(kind, status)} ${fileName}`;\n}\n\nexport function formatToolProgressTitle(\n summary: ToolCallSummary,\n status: \"started\" | \"completed\" | \"error\",\n): string | undefined {\n if (!summary.name || !summary.argumentsText) {\n return undefined;\n }\n\n const parsedArguments = parseToolArguments(summary.argumentsText);\n if (parsedArguments) {\n if (isSkillToolName(summary.name)) {\n return formatSkillProgressTitleFromName(\n getSkillNameFromArguments(parsedArguments),\n );\n }\n if (isFilePathToolName(summary.name)) {\n return formatFileToolProgressTitle(summary.name, parsedArguments, status);\n }\n return undefined;\n }\n\n if (isSkillToolName(summary.name)) {\n return formatSkillProgressTitleFromName(getFragmentedSkillName(summary));\n }\n if (isFilePathToolName(summary.name)) {\n return formatFragmentedFileToolProgressTitle(summary, status);\n }\n return undefined;\n}\n\nfunction formatSkillProgressDetailsFromArguments(\n parsedArguments: Record<string, unknown>,\n options: ChannelTurnProgressBuilderOptions | undefined,\n): string | undefined {\n const skillName = getSkillNameFromArguments(parsedArguments);\n const detail = resolveSkillDescription(skillName, options) ?? skillName;\n const sanitized = sanitizeChannelProgressText(\n detail,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n}\n\nfunction formatFragmentedSkillProgressDetails(\n summary: ToolCallSummary,\n options: ChannelTurnProgressBuilderOptions | undefined,\n): string | undefined {\n const skillName = getFragmentedSkillName(summary);\n const detail = resolveSkillDescription(skillName, options) ?? skillName;\n const sanitized = sanitizeChannelProgressText(\n detail,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n}\n\nexport function formatToolProgressDetails(\n summary: ToolCallSummary,\n options?: ChannelTurnProgressBuilderOptions,\n): string | undefined {\n if (!summary.name || !summary.argumentsText) {\n return undefined;\n }\n\n // Try JSON parse first (complete arguments)\n const parsedArguments = parseToolArguments(summary.argumentsText);\n if (parsedArguments) {\n if (isWebSearchTool(summary.name)) {\n const query = firstNonEmptyString(parsedArguments.query);\n const sanitized = sanitizeChannelProgressText(\n query,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n }\n\n if (isFetchWebpageToolName(summary.name)) {\n const url = firstNonEmptyString(parsedArguments.url);\n const sanitized = sanitizeChannelProgressText(\n url,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n }\n\n if (isSkillToolName(summary.name)) {\n return formatSkillProgressDetailsFromArguments(parsedArguments, options);\n }\n\n if (isTaskTool(summary.name)) {\n return formatSubagentProgressDetailsFromArguments(parsedArguments);\n }\n\n if (isShellTool(summary.name)) {\n return formatShellProgressDetailsFromArguments(parsedArguments);\n }\n\n if (isFilePathToolName(summary.name)) {\n const filePath = firstNonEmptyString(\n parsedArguments.file_path,\n parsedArguments.filePath,\n parsedArguments.path,\n );\n const sanitized = sanitizeChannelProgressText(\n filePath,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n }\n\n if (isGlobTool(summary.name) || isSearchTool(summary.name)) {\n const pattern = firstNonEmptyString(parsedArguments.pattern);\n const sanitized = sanitizeChannelProgressText(\n pattern,\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n }\n\n return undefined;\n }\n\n // Fallback: extract known preview fields from fragmented/incomplete JSON.\n if (isShellTool(summary.name)) {\n return formatFragmentedShellProgressDetails(summary);\n }\n\n if (isSkillToolName(summary.name)) {\n return formatFragmentedSkillProgressDetails(summary, options);\n }\n\n if (isTaskTool(summary.name)) {\n return formatFragmentedSubagentProgressDetails(summary);\n }\n\n if (isFilePathToolName(summary.name)) {\n const filePathMatch = summary.argumentsText.match(\n /\"file_path\"\\s*:\\s*\"([^\"]+)\"/,\n );\n if (filePathMatch?.[1]) {\n const sanitized = sanitizeChannelProgressText(\n filePathMatch[1],\n MAX_PROGRESS_DETAILS_LENGTH,\n );\n return sanitized || undefined;\n }\n }\n\n return undefined;\n}\n",
8
11
  "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"
9
12
  ],
10
- "mappings": "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",
11
- "debugId": "54152C3E895D639864756E2164756E21",
13
+ "mappings": "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",
14
+ "debugId": "39670CE4D9784BEC64756E2164756E21",
12
15
  "names": []
13
16
  }
@@ -721,4 +721,4 @@ export {
721
721
  SLACK_ASSISTANT_STARTUP_STATUS
722
722
  };
723
723
 
724
- //# debugId=078E345BB4A2D99664756E2164756E21
724
+ //# debugId=F29FA1C9AF0A589064756E2164756E21