@letta-ai/letta-code 0.30.19 → 0.30.21

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 (96) hide show
  1. package/dist/app-server-client.cjs +2 -2
  2. package/dist/app-server-client.cjs.map +3 -3
  3. package/dist/app-server-client.js +2 -2
  4. package/dist/app-server-client.js.map +3 -3
  5. package/dist/channels-public.js +29 -6
  6. package/dist/channels-public.js.map +4 -5
  7. package/dist/channels-slack.js +98 -9
  8. package/dist/channels-slack.js.map +7 -6
  9. package/dist/gateway-core.js +34 -4
  10. package/dist/gateway-core.js.map +4 -4
  11. package/dist/mcp-client.js +2 -2
  12. package/dist/mcp-client.js.map +1 -1
  13. package/dist/types/agent/model.d.ts.map +1 -1
  14. package/dist/types/agent/subagents/subagent-launcher.d.ts.map +1 -1
  15. package/dist/types/backend/dev/headless-turn-executor.d.ts.map +1 -1
  16. package/dist/types/backend/dev/pi-model-factory.d.ts +1 -0
  17. package/dist/types/backend/dev/pi-model-factory.d.ts.map +1 -1
  18. package/dist/types/backend/dev/pi-models-runtime.d.ts +3 -1
  19. package/dist/types/backend/dev/pi-models-runtime.d.ts.map +1 -1
  20. package/dist/types/backend/dev/pi-ollama-provider.d.ts +35 -0
  21. package/dist/types/backend/dev/pi-ollama-provider.d.ts.map +1 -1
  22. package/dist/types/backend/dev/pi-stream-adapter.d.ts.map +1 -1
  23. package/dist/types/backend/dev/provider-turn-executor.d.ts +8 -0
  24. package/dist/types/backend/dev/provider-turn-executor.d.ts.map +1 -1
  25. package/dist/types/channels/gateway-core.d.ts +3 -0
  26. package/dist/types/channels/gateway-core.d.ts.map +1 -1
  27. package/dist/types/channels/message-references.d.ts +12 -0
  28. package/dist/types/channels/message-references.d.ts.map +1 -0
  29. package/dist/types/channels/slack/ingress-policy.d.ts +3 -0
  30. package/dist/types/channels/slack/ingress-policy.d.ts.map +1 -1
  31. package/dist/types/channels/slack/public-utils.d.ts +0 -1
  32. package/dist/types/channels/slack/public-utils.d.ts.map +1 -1
  33. package/dist/types/channels/slack/user-mentions.d.ts +10 -0
  34. package/dist/types/channels/slack/user-mentions.d.ts.map +1 -0
  35. package/dist/types/channels/slack/utils.d.ts +0 -1
  36. package/dist/types/channels/slack/utils.d.ts.map +1 -1
  37. package/dist/types/channels/types.d.ts +8 -1
  38. package/dist/types/channels/types.d.ts.map +1 -1
  39. package/dist/types/channels/xml.d.ts +2 -7
  40. package/dist/types/channels/xml.d.ts.map +1 -1
  41. package/dist/types/channels-public.d.ts +1 -0
  42. package/dist/types/channels-public.d.ts.map +1 -1
  43. package/dist/types/channels-slack.d.ts +2 -1
  44. package/dist/types/channels-slack.d.ts.map +1 -1
  45. package/dist/types/mods/capabilities.d.ts +4 -0
  46. package/dist/types/mods/capabilities.d.ts.map +1 -1
  47. package/dist/types/mods/conversation-handle.d.ts.map +1 -1
  48. package/dist/types/mods/conversation-title-events.d.ts +9 -0
  49. package/dist/types/mods/conversation-title-events.d.ts.map +1 -0
  50. package/dist/types/mods/mod-adapter.d.ts.map +1 -1
  51. package/dist/types/mods/types.d.ts +2 -0
  52. package/dist/types/mods/types.d.ts.map +1 -1
  53. package/dist/types/permissions/checker.d.ts.map +1 -1
  54. package/dist/types/permissions/workspace-sandbox.d.ts +19 -0
  55. package/dist/types/permissions/workspace-sandbox.d.ts.map +1 -0
  56. package/dist/types/runtime-context.d.ts +7 -0
  57. package/dist/types/runtime-context.d.ts.map +1 -1
  58. package/dist/types/telemetry/fatal-error-handler.d.ts +13 -0
  59. package/dist/types/telemetry/fatal-error-handler.d.ts.map +1 -0
  60. package/dist/types/telemetry/index.d.ts +2 -0
  61. package/dist/types/telemetry/index.d.ts.map +1 -1
  62. package/dist/types/tools/impl/shell-sandbox.d.ts +1 -1
  63. package/dist/types/tools/impl/shell-sandbox.d.ts.map +1 -1
  64. package/dist/types/tools/impl/task-update.d.ts +1 -1
  65. package/dist/types/tools/impl/task-update.d.ts.map +1 -1
  66. package/dist/types/tools/impl/task.d.ts +1 -0
  67. package/dist/types/tools/impl/task.d.ts.map +1 -1
  68. package/dist/types/tools/impl/tasks/store.d.ts +3 -6
  69. package/dist/types/tools/impl/tasks/store.d.ts.map +1 -1
  70. package/dist/types/tools/toolset.d.ts +1 -0
  71. package/dist/types/tools/toolset.d.ts.map +1 -1
  72. package/dist/types/types/app-server-info.d.ts +1 -0
  73. package/dist/types/types/app-server-info.d.ts.map +1 -1
  74. package/dist/types/types/protocol.d.ts +1 -1
  75. package/dist/types/types/protocol_v2.d.ts +12 -10
  76. package/dist/types/types/protocol_v2.d.ts.map +1 -1
  77. package/dist/types/types/service-protocol.d.ts +11 -0
  78. package/dist/types/types/service-protocol.d.ts.map +1 -1
  79. package/dist/types/types/teleport-protocol.d.ts +54 -0
  80. package/dist/types/types/teleport-protocol.d.ts.map +1 -0
  81. package/dist/types/utils/error.d.ts +1 -1
  82. package/dist/types/utils/error.d.ts.map +1 -1
  83. package/dist/types/websocket/listener/runtime.d.ts.map +1 -1
  84. package/dist/types/websocket/listener/types.d.ts +16 -1
  85. package/dist/types/websocket/listener/types.d.ts.map +1 -1
  86. package/letta.js +4478 -3170
  87. package/package.json +1 -1
  88. package/scripts/isolated-unit-tests.json +5 -0
  89. package/scripts/source-file-size-baseline.json +4 -4
  90. package/skills/creating-mods/references/tools.md +1 -0
  91. package/skills/scheduling-tasks/SKILL.md +10 -8
  92. package/skills/teleporting-between-environments/SKILL.md +100 -0
  93. package/dist/types/cli/helpers/session-context.d.ts +0 -25
  94. package/dist/types/cli/helpers/session-context.d.ts.map +0 -1
  95. package/dist/types/utils/shell-context.d.ts +0 -7
  96. package/dist/types/utils/shell-context.d.ts.map +0 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/channels/command-surface.ts", "../src/channels/command-runtime-executor.ts", "../src/channels/core-stream.ts", "../src/utils/conversation-busy-error.ts", "../src/channels/lifecycle-error.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"],
3
+ "sources": ["../src/channels/command-surface.ts", "../src/channels/command-runtime-executor.ts", "../src/channels/core-stream.ts", "../src/utils/conversation-busy-error.ts", "../src/channels/lifecycle-error.ts", "../src/constants.ts", "../src/channels/xml.ts", "../src/channels/processor.ts", "../src/channels/progress-formatting.ts", "../src/channels/progress-builder.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * Pure channel slash-command surface: the command list, parsing, help text,\n * and unknown-command messaging shared by every channel host.\n *\n * This module must stay free of host-local dependencies (plugin registry,\n * adapters, feedback handlers) so external channel hosts — e.g. Letta Cloud's\n * Slack gateway — can render the exact same command surface as\n * `letta server --channel`. Command execution stays host-injected via\n * `ChannelSlashCommandHandlers`.\n *\n * Hosts with commands beyond the shared surface (e.g. Cloud's `/agent`,\n * `/config`, `/convo`) declare them via `ChannelSlashCommandSurfaceOptions`\n * so listing, help, and unknown-command rendering include them first-class.\n */\n\nimport type { ChannelModelPickerData, InboundChannelMessage } from \"./types\";\n\nexport type ChannelSlashCommandKind = \"direct\" | \"agent-scoped\";\n\nexport type ParsedChannelSlashCommand = {\n name: string;\n args: string;\n raw: string;\n};\n\nexport type ChannelSlashCommandDefinition = {\n name: string;\n aliases?: string[];\n kind: ChannelSlashCommandKind;\n summary: string;\n};\n\n/**\n * Host-extra command surface options. External channel hosts (e.g. Letta\n * Cloud's Slack gateway with `/agent`, `/config`, `/convo`) pass their extra\n * definitions here so listing, help text, and unknown-command rendering\n * include them without any host-side merging.\n *\n * Semantics:\n * - Extras never override the shared surface: an extra whose name collides\n * (case-insensitively) with a shared command name or alias, a Slack\n * mention-only command name (`detach`, `new`), or an earlier extra is\n * dropped, and extra aliases that collide are filtered.\n * Shared-wins keeps hosts upgrade-safe when the shared surface later\n * absorbs a command a host had been providing as an extra.\n * - Ordering is stable: shared commands first, in their fixed order, then the\n * surviving extras in the order the host provided them. Help output renders\n * extras in a labeled section (`extraCommandsLabel`).\n * - Omitting the options (or passing no extras) keeps every rendered string\n * byte-identical to the extras-free surface.\n *\n * Parsing needs no extras hook: `parseChannelSlashCommand` /\n * `parseChannelBangCommand` already accept any command-shaped token so hosts\n * can dispatch extras (and render unknown-command replies) from the parsed\n * name.\n */\nexport type ChannelSlashCommandSurfaceOptions = {\n /** Host-specific command definitions appended after the shared surface. */\n extraCommands?: readonly ChannelSlashCommandDefinition[];\n /**\n * Section label for extras in help output, e.g. \"Cloud-only commands\".\n * Defaults to \"Host commands\".\n */\n extraCommandsLabel?: string;\n};\n\nconst DEFAULT_EXTRA_COMMANDS_LABEL = \"Host commands\";\n\nexport type ChannelSlashCommandHandlerResult = {\n handled: boolean;\n text?: string;\n modelPicker?: ChannelModelPickerData;\n};\n\nexport type ChannelSlashCommandHandlers = {\n cancel?: (\n command: ParsedChannelSlashCommand,\n msg: InboundChannelMessage,\n ) => Promise<ChannelSlashCommandHandlerResult>;\n chat?: (\n command: ParsedChannelSlashCommand,\n msg: InboundChannelMessage,\n ) => Promise<ChannelSlashCommandHandlerResult>;\n detach?: (\n command: ParsedChannelSlashCommand,\n msg: InboundChannelMessage,\n ) => Promise<ChannelSlashCommandHandlerResult>;\n model?: (\n command: ParsedChannelSlashCommand,\n msg: InboundChannelMessage,\n ) => Promise<ChannelSlashCommandHandlerResult>;\n newConversation?: (\n command: ParsedChannelSlashCommand,\n msg: InboundChannelMessage,\n ) => Promise<ChannelSlashCommandHandlerResult>;\n pause?: (\n command: ParsedChannelSlashCommand,\n msg: InboundChannelMessage,\n ) => Promise<ChannelSlashCommandHandlerResult>;\n reflection?: (\n command: ParsedChannelSlashCommand,\n msg: InboundChannelMessage,\n ) => Promise<ChannelSlashCommandHandlerResult>;\n reload?: (\n command: ParsedChannelSlashCommand,\n msg: InboundChannelMessage,\n ) => Promise<ChannelSlashCommandHandlerResult>;\n resume?: (\n command: ParsedChannelSlashCommand,\n msg: InboundChannelMessage,\n ) => Promise<ChannelSlashCommandHandlerResult>;\n};\n\n/** Resolves a channel id (e.g. \"slack\") to its human display name. */\nexport type ChannelDisplayNameResolver = (channelId: string) => string;\n\nconst DEFAULT_CHANNEL_DISPLAY_NAMES: Readonly<Record<string, string>> = {\n custom: \"Custom\",\n discord: \"Discord\",\n signal: \"Signal\",\n slack: \"Slack\",\n telegram: \"Telegram\",\n whatsapp: \"WhatsApp\",\n};\n\n/**\n * Default display-name resolver: first-party channel display names, falling\n * back to the raw channel id. Hosts with a richer registry (e.g. user-installed\n * channel plugins) should inject their own resolver.\n */\nexport function defaultChannelDisplayName(channelId: string): string {\n return DEFAULT_CHANNEL_DISPLAY_NAMES[channelId] ?? channelId;\n}\n\nconst CHANNEL_SLASH_COMMANDS: ChannelSlashCommandDefinition[] = [\n {\n name: \"help\",\n kind: \"direct\",\n summary: \"Show channel usage guidance.\",\n },\n {\n name: \"status\",\n kind: \"direct\",\n summary: \"Show this chat's channel connection status.\",\n },\n {\n name: \"whoami\",\n kind: \"direct\",\n summary: \"Show your access tier and runnable commands here.\",\n },\n {\n name: \"pause\",\n kind: \"direct\",\n summary: \"Pause agent routing for this chat.\",\n },\n {\n name: \"resume\",\n kind: \"direct\",\n summary: \"Resume agent routing for this chat.\",\n },\n {\n name: \"cancel\",\n kind: \"agent-scoped\",\n summary: \"Cancel the in-progress agent turn for this chat.\",\n },\n {\n name: \"chat\",\n kind: \"direct\",\n summary: \"Show the Letta web chat link for this channel route.\",\n },\n {\n name: \"feedback\",\n kind: \"direct\",\n summary: \"Send feedback about Letta Code from this routed chat.\",\n },\n {\n name: \"model\",\n kind: \"agent-scoped\",\n summary:\n \"Show, list, or switch the model for this chat's routed conversation.\",\n },\n {\n name: \"reflection\",\n aliases: [\"reflect\"],\n kind: \"agent-scoped\",\n summary: \"Start a memory reflection pass for this conversation.\",\n },\n {\n name: \"reload\",\n kind: \"agent-scoped\",\n summary: \"Reload settings, local mods, and agent secrets.\",\n },\n];\n\nconst SLACK_MENTION_COMMAND_NAMES = [\n \"help\",\n \"detach\",\n \"model\",\n \"new\",\n \"reload\",\n] as const;\n\nfunction copyDefinition(\n definition: ChannelSlashCommandDefinition,\n): ChannelSlashCommandDefinition {\n return {\n ...definition,\n aliases: definition.aliases ? [...definition.aliases] : undefined,\n };\n}\n\n/**\n * Applies the shared-wins dedupe documented on\n * `ChannelSlashCommandSurfaceOptions`: returns the surviving host extras (as\n * fresh copies) with colliding definitions dropped and colliding aliases\n * filtered.\n */\nfunction dedupedExtraCommands(\n options?: ChannelSlashCommandSurfaceOptions,\n): ChannelSlashCommandDefinition[] {\n const extras = options?.extraCommands;\n if (!extras || extras.length === 0) {\n return [];\n }\n\n // Slack mention-only command names (e.g. \"detach\", \"new\") are part of the\n // shared surface even though they are not in the definition list, so they\n // are reserved too.\n const takenNames = new Set<string>(SLACK_MENTION_COMMAND_NAMES);\n for (const definition of CHANNEL_SLASH_COMMANDS) {\n takenNames.add(definition.name.toLowerCase());\n for (const alias of definition.aliases ?? []) {\n takenNames.add(alias.toLowerCase());\n }\n }\n\n const surviving: ChannelSlashCommandDefinition[] = [];\n for (const extra of extras) {\n const nameKey = extra.name.toLowerCase();\n if (takenNames.has(nameKey)) {\n continue;\n }\n takenNames.add(nameKey);\n const aliases = (extra.aliases ?? []).filter((alias) => {\n const aliasKey = alias.toLowerCase();\n if (takenNames.has(aliasKey)) {\n return false;\n }\n takenNames.add(aliasKey);\n return true;\n });\n surviving.push({\n ...extra,\n aliases: aliases.length > 0 ? aliases : undefined,\n });\n }\n return surviving;\n}\n\nexport function listChannelSlashCommands(\n options?: ChannelSlashCommandSurfaceOptions,\n): ChannelSlashCommandDefinition[] {\n return [\n ...CHANNEL_SLASH_COMMANDS.map(copyDefinition),\n ...dedupedExtraCommands(options),\n ];\n}\n\ntype ChannelCommandPrefix = \"/\" | \"!\";\n\nfunction parseSingleLineChannelCommand(\n text: string,\n prefix: ChannelCommandPrefix,\n): ParsedChannelSlashCommand | null {\n const trimmed = text.trim();\n const escapedPrefix = prefix === \"/\" ? \"\\\\/\" : \"!\";\n const match = trimmed.match(\n new RegExp(\n `^${escapedPrefix}([A-Za-z][\\\\w-]*)(?:@[A-Za-z0-9_]+)?(?:[^\\\\S\\\\r\\\\n]+(.*))?$`,\n ),\n );\n if (!match) {\n return null;\n }\n const [, name, args] = match;\n if (!name) {\n return null;\n }\n\n return {\n name: name.toLowerCase(),\n args: args?.trim() ?? \"\",\n raw: trimmed,\n };\n}\n\nfunction parseAnySingleLineChannelCommand(\n text: string,\n): ParsedChannelSlashCommand | null {\n return (\n parseSingleLineChannelCommand(text, \"/\") ??\n parseSingleLineChannelCommand(text, \"!\")\n );\n}\n\nfunction parseChannelCommand(\n text: string,\n prefix: ChannelCommandPrefix,\n): ParsedChannelSlashCommand | null {\n const lines = text\n .trim()\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n const [firstLine, ...remainingLines] = lines;\n if (!firstLine) {\n return null;\n }\n\n const firstCommand = parseSingleLineChannelCommand(firstLine, prefix);\n if (!firstCommand) {\n return null;\n }\n\n // Debounced channel input can stack duplicate Slack event copies. If a later\n // line is another channel command, never treat it as the first command's arg.\n const laterCommand = remainingLines.find((line) =>\n Boolean(parseAnySingleLineChannelCommand(line)),\n );\n if (laterCommand) {\n return firstCommand;\n }\n\n const continuationArgs = remainingLines.join(\"\\n\").trim();\n if (!continuationArgs) {\n return firstCommand;\n }\n return {\n ...firstCommand,\n args: [firstCommand.args, continuationArgs]\n .filter((part) => part.length > 0)\n .join(\"\\n\"),\n };\n}\n\nexport function parseChannelSlashCommand(\n text: string,\n): ParsedChannelSlashCommand | null {\n return parseChannelCommand(text, \"/\");\n}\n\nexport function parseChannelBangCommand(\n text: string,\n): ParsedChannelSlashCommand | null {\n return parseChannelCommand(text, \"!\");\n}\n\nfunction supportedCommandsText(\n prefix: \"/\" | \"!\" = \"/\",\n options?: ChannelSlashCommandSurfaceOptions,\n): string {\n return listChannelSlashCommands(options)\n .map((definition) => `${prefix}${definition.name}`)\n .join(\", \");\n}\n\nconst SLACK_MENTION_SLASH_COMMAND_EXAMPLES = [\n \"@agent /help\",\n \"@agent /status\",\n \"@agent /whoami\",\n \"@agent /model\",\n \"@agent /model list\",\n \"@agent /model <handle-or-id>\",\n \"@agent /cancel\",\n \"@agent /chat\",\n \"@agent /feedback <message>\",\n \"@agent /reflection\",\n \"@agent /detach\",\n \"@agent /new\",\n \"@agent /reload\",\n] as const;\n\nfunction supportedSlackMentionSlashCommandsText(\n options?: ChannelSlashCommandSurfaceOptions,\n): string {\n const extras = dedupedExtraCommands(options).map(\n (definition) => `@agent /${definition.name}`,\n );\n return [...SLACK_MENTION_SLASH_COMMAND_EXAMPLES, ...extras].join(\", \");\n}\n\nfunction supportedBangCommandsText(): string {\n return SLACK_MENTION_COMMAND_NAMES.map((name) => `!${name}`).join(\", \");\n}\n\nexport function isSupportedSlackMentionCommand(commandName: string): boolean {\n return SLACK_MENTION_COMMAND_NAMES.includes(\n commandName as (typeof SLACK_MENTION_COMMAND_NAMES)[number],\n );\n}\n\nexport function buildChannelHelpMessage(\n channelId: string,\n resolveDisplayName: ChannelDisplayNameResolver = defaultChannelDisplayName,\n options?: ChannelSlashCommandSurfaceOptions,\n): string {\n const displayName = resolveDisplayName(channelId);\n const extras = dedupedExtraCommands(options);\n const extrasLabel =\n options?.extraCommandsLabel ?? DEFAULT_EXTRA_COMMANDS_LABEL;\n\n if (channelId === \"slack\") {\n const extraLines =\n extras.length > 0\n ? [\n `${extrasLabel}:`,\n ...extras.map(\n (definition) =>\n `@agent /${definition.name} - ${definition.summary}`,\n ),\n ]\n : [];\n return [\n `${displayName} is connected to Letta Code.`,\n \"Talk by mentioning the app in a channel thread. Once a thread is routed, normal replies continue the same agent conversation until detached.\",\n \"Control commands start immediately after the mention:\",\n \"@agent /model - show this thread's current model\",\n \"@agent /model list - show available models\",\n \"@agent /model <handle-or-id> - switch this thread's model\",\n \"@agent /status - show route and listener status\",\n \"@agent /cancel - cancel the current turn\",\n \"@agent /chat - show the web chat link\",\n \"@agent /feedback <message> - send feedback to the Letta team from this routed thread\",\n \"@agent /reflection - start a memory reflection pass\",\n \"@agent /detach - stop replying in this thread until mentioned again\",\n \"@agent /new - start a fresh conversation for this thread\",\n \"@agent /reload - reload settings, local mods, and agent secrets\",\n ...extraLines,\n `Legacy bang aliases still work after a mention: ${supportedBangCommandsText()}.`,\n \"If this chat is not connected yet, send a normal message and follow the pairing instructions.\",\n ].join(\"\\n\");\n }\n\n const extraParagraphs =\n extras.length > 0\n ? [\n `${extrasLabel} here: ${extras\n .map((definition) => `/${definition.name}`)\n .join(\", \")}.`,\n ]\n : [];\n return [\n `${displayName} is connected to Letta Code.`,\n \"Send a normal message here and the connected agent will reply in this chat.\",\n `Supported slash commands here: ${supportedCommandsText()}.`,\n ...extraParagraphs,\n \"If this chat is not connected yet, send any non-command message and follow the pairing instructions.\",\n ].join(\"\\n\\n\");\n}\n\nexport function buildUnsupportedChannelCommandMessage(\n channelId: string,\n command: ParsedChannelSlashCommand,\n resolveDisplayName: ChannelDisplayNameResolver = defaultChannelDisplayName,\n options?: ChannelSlashCommandSurfaceOptions,\n): string {\n const displayName = resolveDisplayName(channelId);\n const isBang = command.raw.startsWith(\"!\");\n const commandKind = isBang ? \"bang\" : \"slash\";\n // Bang commands are the legacy Slack-mention alias set; host extras are\n // slash-only, so the bang list never includes them.\n const supportedCommands = isBang\n ? supportedBangCommandsText()\n : channelId === \"slack\"\n ? supportedSlackMentionSlashCommandsText(options)\n : supportedCommandsText(\"/\", options);\n const supportedLabel =\n channelId === \"slack\" && !isBang\n ? \"Slack mention commands\"\n : `${commandKind} commands`;\n\n return [\n `${displayName} received ${command.raw}, but that ${commandKind} command is not supported in channels yet.`,\n `Supported ${supportedLabel}: ${supportedCommands}.`,\n `Send normal messages without a leading ${isBang ? \"bang\" : \"slash\"} command to talk to the connected agent.`,\n ].join(\"\\n\\n\");\n}\n",
6
6
  "/**\n * Shared runtime-command executor for the channel slash commands whose\n * semantics are pure app-server protocol: `/model <handle>`, `/model list`,\n * `/cancel`, `/reflection`, and `/reload`.\n *\n * Every channel host — the local `letta server --channel` gateway and Letta\n * Cloud's Slack gateway — ends up sending the same protocol commands\n * (`update_model`, `list_models`, `abort_message`, `execute_command`) and\n * rendering a reply. Implementing that twice lets the two hosts drift, so the\n * protocol semantics and reply rendering live here once, parameterized by a\n * minimal injected {@link RuntimeCommandClient} that each host backs with its\n * own transport (in-process App Server client locally, the Redis listener\n * relay in Cloud).\n *\n * Like `command-surface.ts`, this module must stay free of host-local\n * dependencies (plugin registry, adapters, settings, websockets) so external\n * hosts can consume it from the public channels entrypoint.\n */\n\nimport type { ListModelsResponseModelEntry } from \"@/types/protocol_v2\";\nimport {\n type ChannelDisplayNameResolver,\n defaultChannelDisplayName,\n} from \"./command-surface\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Injected client\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Runtime identity the protocol commands target. */\nexport interface RuntimeCommandScope {\n agent_id: string;\n conversation_id: string;\n}\n\n/** App-server `execute_command` ids reachable from channel slash commands. */\nexport type RuntimeExecuteCommandId = \"reflect\" | \"reload\";\n\n/** Result of a `list_models` round trip. */\nexport interface RuntimeCommandListModelsResult {\n success: boolean;\n entries: ListModelsResponseModelEntry[];\n /**\n * Handles available to this user. Tri-state mirrors the wire format:\n * `null` = availability lookup failed; `undefined` = the server did not\n * report availability. Both cases render an explanatory note.\n */\n availableHandles?: string[] | null;\n error?: string;\n}\n\n/** Result of an `update_model` round trip. */\nexport interface RuntimeCommandUpdateModelResult {\n success: boolean;\n /** Canonical handle the server applied (may differ from the request). */\n modelHandle?: string;\n appliedTo?: \"agent\" | \"conversation\";\n error?: string;\n}\n\n/** Result of an `abort_message` round trip. */\nexport interface RuntimeCommandAbortResult {\n success: boolean;\n aborted: boolean;\n error?: string;\n}\n\n/** Result of an `execute_command` round trip. */\nexport interface RuntimeCommandExecuteResult {\n success: boolean;\n output: string;\n}\n\n/**\n * Minimal transport interface a channel host injects into the executor.\n *\n * Each method corresponds to exactly one app-server protocol command; the\n * host owns request-id generation, correlation, and timeouts. Transport-level\n * failures should be thrown — the executor intentionally does not catch them\n * so each host can apply its own failure copy and logging.\n */\nexport interface RuntimeCommandClient {\n listModels(): Promise<RuntimeCommandListModelsResult>;\n updateModel(params: {\n runtime: RuntimeCommandScope;\n /** User-provided handle or id; sent as both `model_id` and `model_handle`. */\n modelIdentifier: string;\n }): Promise<RuntimeCommandUpdateModelResult>;\n abortMessage(params: {\n runtime: RuntimeCommandScope;\n runId: string | null;\n }): Promise<RuntimeCommandAbortResult>;\n executeCommand(params: {\n runtime: RuntimeCommandScope;\n commandId: RuntimeExecuteCommandId;\n args?: string;\n }): Promise<RuntimeCommandExecuteResult>;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Model entry helpers (pure)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type ChannelModelListEntry = Pick<\n ListModelsResponseModelEntry,\n | \"id\"\n | \"handle\"\n | \"label\"\n | \"description\"\n | \"isDefault\"\n | \"isFeatured\"\n | \"updateArgs\"\n>;\n\nconst DEFAULT_CHANNEL_MODEL_LIST_LIMIT = 8;\n\nfunction getModelEntryRank(entry: ChannelModelListEntry): number {\n if (entry.isDefault) return 0;\n if (entry.isFeatured) return 1;\n const effort = (\n entry.updateArgs as { reasoning_effort?: unknown } | undefined\n )?.reasoning_effort;\n if (effort === \"medium\") return 2;\n if (effort === \"high\") return 3;\n return 4;\n}\n\nfunction preferModelEntry(\n current: ChannelModelListEntry,\n candidate: ChannelModelListEntry,\n): ChannelModelListEntry {\n return getModelEntryRank(candidate) < getModelEntryRank(current)\n ? candidate\n : current;\n}\n\nexport function buildModelEntriesByHandle(\n entries: ChannelModelListEntry[],\n): Map<string, ChannelModelListEntry> {\n const byHandle = new Map<string, ChannelModelListEntry>();\n for (const entry of entries) {\n const current = byHandle.get(entry.handle);\n byHandle.set(\n entry.handle,\n current ? preferModelEntry(current, entry) : entry,\n );\n }\n return byHandle;\n}\n\nfunction makeUnknownModelEntry(handle: string): ChannelModelListEntry {\n return {\n id: handle,\n handle,\n label: handle,\n description: \"\",\n };\n}\n\nexport function resolveModelHandles(params: {\n handles: string[];\n byHandle: Map<string, ChannelModelListEntry>;\n availableHandles?: Set<string> | null;\n}): ChannelModelListEntry[] {\n const { handles, byHandle, availableHandles } = params;\n const seen = new Set<string>();\n const resolved: ChannelModelListEntry[] = [];\n for (const handle of handles) {\n if (!handle || seen.has(handle)) continue;\n seen.add(handle);\n if (availableHandles && !availableHandles.has(handle)) continue;\n resolved.push(byHandle.get(handle) ?? makeUnknownModelEntry(handle));\n }\n return resolved;\n}\n\nexport function getFallbackModelEntries(\n byHandle: Map<string, ChannelModelListEntry>,\n): ChannelModelListEntry[] {\n const preferred = Array.from(byHandle.values()).filter(\n (entry) => entry.isDefault || entry.isFeatured,\n );\n return preferred.length > 0 ? preferred : Array.from(byHandle.values());\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Reply rendering (pure; display name injected)\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction modelCommandPrefix(channelId: string): \"/model\" | \"@agent /model\" {\n return channelId === \"slack\" ? \"@agent /model\" : \"/model\";\n}\n\nexport function buildChannelModelNotFoundText(channelId: string): string {\n return `Model not found. Use ${modelCommandPrefix(channelId)} list to see available models.`;\n}\n\nexport function buildChannelCurrentModelMessage(\n channelId: string,\n params: {\n modelLabel: string;\n modelHandle: string | null;\n scope?: \"agent\" | \"conversation\";\n },\n displayNameResolver: ChannelDisplayNameResolver = defaultChannelDisplayName,\n): string {\n const displayName = displayNameResolver(channelId);\n const scope = params.scope === \"agent\" ? \"agent\" : \"conversation\";\n const handleText =\n params.modelHandle && params.modelHandle !== params.modelLabel\n ? ` (${params.modelHandle})`\n : \"\";\n const switchCommand = modelCommandPrefix(channelId);\n return [\n `${displayName} current ${scope} model: ${params.modelLabel}${handleText}.`,\n `Use ${switchCommand} list to see available models, or ${switchCommand} <handle-or-id> to switch.`,\n ].join(\"\\n\");\n}\n\nfunction formatChannelModelEntry(\n channelId: string,\n entry: ChannelModelListEntry,\n): string {\n const selector = entry.id || entry.handle;\n const handleText = entry.handle === entry.label ? \"\" : ` — ${entry.handle}`;\n return `• ${entry.label}${handleText} (${modelCommandPrefix(channelId)} ${selector})`;\n}\n\nfunction appendModelEntrySection(\n lines: string[],\n channelId: string,\n title: string,\n entries: ChannelModelListEntry[],\n limit: number,\n): void {\n if (entries.length === 0) return;\n lines.push(\"\", `${title}:`);\n for (const entry of entries.slice(0, limit)) {\n lines.push(formatChannelModelEntry(channelId, entry));\n }\n const remaining = entries.length - limit;\n if (remaining > 0) {\n lines.push(`…and ${remaining} more.`);\n }\n}\n\nexport function buildChannelModelListMessage(\n channelId: string,\n params: {\n entries: ListModelsResponseModelEntry[];\n availableHandles?: string[] | null;\n recentHandles?: string[];\n limit?: number;\n },\n displayNameResolver: ChannelDisplayNameResolver = defaultChannelDisplayName,\n): string {\n const displayName = displayNameResolver(channelId);\n const limit = params.limit ?? DEFAULT_CHANNEL_MODEL_LIST_LIMIT;\n const entries = params.entries as ChannelModelListEntry[];\n const byHandle = buildModelEntriesByHandle(entries);\n const availableHandleList = Array.isArray(params.availableHandles)\n ? params.availableHandles\n : null;\n const availableSet = availableHandleList\n ? new Set(availableHandleList)\n : null;\n const recentEntries = resolveModelHandles({\n handles: params.recentHandles ?? [],\n byHandle,\n availableHandles: availableSet,\n });\n const availableEntries = availableHandleList\n ? resolveModelHandles({ handles: availableHandleList, byHandle })\n : getFallbackModelEntries(byHandle);\n\n const lines = [`${displayName} model selector`];\n if (params.availableHandles === null) {\n lines.push(\n \"Availability lookup failed; showing built-in recommended models.\",\n );\n } else if (params.availableHandles === undefined) {\n lines.push(\n \"Available model data was not returned; showing built-in recommended models.\",\n );\n }\n\n appendModelEntrySection(\n lines,\n channelId,\n \"Recent models\",\n recentEntries,\n limit,\n );\n appendModelEntrySection(\n lines,\n channelId,\n \"Available models\",\n availableEntries,\n limit,\n );\n\n if (availableEntries.length === 0) {\n lines.push(\n \"\",\n \"No available models were reported. Use /connect in Letta Code to configure a provider, then try again.\",\n );\n }\n\n lines.push(\"\");\n if (channelId === \"slack\") {\n lines.push(\n \"Mention the app with @agent /model <handle-or-id> to switch this thread's routed model. Use @agent /model to show the current model. Legacy !model still works after a mention.\",\n );\n } else {\n lines.push(\n \"Use /model <handle-or-id> to switch this chat's routed model, or /model to show the current model.\",\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function buildChannelModelListUnavailableMessage(\n channelId: string,\n error: string,\n displayNameResolver: ChannelDisplayNameResolver = defaultChannelDisplayName,\n): string {\n const displayName = displayNameResolver(channelId);\n return `${displayName} could not load the model list: ${error}`;\n}\n\nexport function buildChannelCurrentModelUnavailableMessage(\n channelId: string,\n error: string,\n displayNameResolver: ChannelDisplayNameResolver = defaultChannelDisplayName,\n): string {\n const displayName = displayNameResolver(channelId);\n return `${displayName} could not load the current model: ${error}`;\n}\n\nexport function buildChannelModelUpdatedMessage(\n channelId: string,\n params: {\n modelLabel: string;\n modelHandle: string;\n appliedTo?: \"agent\" | \"conversation\";\n },\n displayNameResolver: ChannelDisplayNameResolver = defaultChannelDisplayName,\n): string {\n const displayName = displayNameResolver(channelId);\n const scope = params.appliedTo === \"agent\" ? \"agent\" : \"conversation\";\n const handleText =\n params.modelHandle === params.modelLabel ? \"\" : ` (${params.modelHandle})`;\n return `${displayName} updated this ${scope}'s model to ${params.modelLabel}${handleText}.`;\n}\n\nexport function buildChannelModelUpdateFailedMessage(\n channelId: string,\n identifier: string,\n error: string,\n displayNameResolver: ChannelDisplayNameResolver = defaultChannelDisplayName,\n): string {\n const displayName = displayNameResolver(channelId);\n return `${displayName} could not switch this chat's routed model to ${identifier}: ${error}`;\n}\n\nexport function buildChannelCancelAcceptedMessage(\n channelId: string,\n displayNameResolver: ChannelDisplayNameResolver = defaultChannelDisplayName,\n): string {\n const displayName = displayNameResolver(channelId);\n return `${displayName} cancelled the in-progress agent turn for this chat.`;\n}\n\nexport function buildChannelCancelNoActiveTurnMessage(\n channelId: string,\n displayNameResolver: ChannelDisplayNameResolver = defaultChannelDisplayName,\n): string {\n const displayName = displayNameResolver(channelId);\n return `${displayName} received /cancel, but there is no in-progress agent turn to cancel for this chat.`;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Command executors\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Rendered reply from a shared runtime-command executor. */\nexport interface RuntimeCommandReply {\n handled: true;\n text: string;\n}\n\nexport type ParsedChannelModelCommand =\n | { kind: \"current\" }\n | { kind: \"list\" }\n | { kind: \"update\"; modelIdentifier: string };\n\n/**\n * Classify `/model` arguments: empty → show the current model (host-owned),\n * `list` (case-insensitive) → list models, anything else → switch to it.\n */\nexport function parseChannelModelCommand(\n args: string,\n): ParsedChannelModelCommand {\n const modelIdentifier = args.trim();\n if (!modelIdentifier) {\n return { kind: \"current\" };\n }\n if (modelIdentifier.toLowerCase() === \"list\") {\n return { kind: \"list\" };\n }\n return { kind: \"update\", modelIdentifier };\n}\n\n/** `/model list` — send `list_models` and render the selector reply. */\nexport async function runChannelModelListCommand(params: {\n channelId: string;\n client: RuntimeCommandClient;\n /** Host-tracked recently used handles (e.g. local settings). */\n recentHandles?: string[];\n channelDisplayName?: ChannelDisplayNameResolver;\n}): Promise<RuntimeCommandReply> {\n const displayNameResolver =\n params.channelDisplayName ?? defaultChannelDisplayName;\n const result = await params.client.listModels();\n return {\n handled: true,\n text: result.success\n ? buildChannelModelListMessage(\n params.channelId,\n {\n entries: result.entries,\n availableHandles: result.availableHandles,\n recentHandles: params.recentHandles,\n },\n displayNameResolver,\n )\n : buildChannelModelListUnavailableMessage(\n params.channelId,\n result.error ?? \"Failed to list models\",\n displayNameResolver,\n ),\n };\n}\n\n/** `/model <handle-or-id>` — send `update_model` and render the outcome. */\nexport async function runChannelModelUpdateCommand(params: {\n channelId: string;\n client: RuntimeCommandClient;\n runtime: RuntimeCommandScope;\n modelIdentifier: string;\n /** Optional handle → human label lookup (e.g. the local model catalog). */\n resolveModelLabel?: (modelHandle: string) => string | undefined;\n channelDisplayName?: ChannelDisplayNameResolver;\n}): Promise<RuntimeCommandReply & { success: boolean; modelHandle?: string }> {\n const displayNameResolver =\n params.channelDisplayName ?? defaultChannelDisplayName;\n const result = await params.client.updateModel({\n runtime: params.runtime,\n modelIdentifier: params.modelIdentifier,\n });\n if (!result.success) {\n return {\n handled: true,\n success: false,\n text: buildChannelModelUpdateFailedMessage(\n params.channelId,\n params.modelIdentifier,\n result.error ?? \"Failed to update model\",\n displayNameResolver,\n ),\n };\n }\n const appliedHandle = result.modelHandle ?? params.modelIdentifier;\n return {\n handled: true,\n success: true,\n modelHandle: appliedHandle,\n text: buildChannelModelUpdatedMessage(\n params.channelId,\n {\n modelLabel:\n params.resolveModelLabel?.(appliedHandle) ?? params.modelIdentifier,\n modelHandle: appliedHandle,\n appliedTo: result.appliedTo,\n },\n displayNameResolver,\n ),\n };\n}\n\n/**\n * `/cancel` — send `abort_message` for the routed runtime. `text` is only\n * rendered when `channelId` is provided; hosts that render cancel outcomes\n * themselves (e.g. via `ChannelSlashCommandHandlers` default text) can rely\n * on `cancelled` alone.\n */\nexport async function runChannelCancelCommand(params: {\n client: RuntimeCommandClient;\n runtime: RuntimeCommandScope;\n channelId?: string;\n channelDisplayName?: ChannelDisplayNameResolver;\n}): Promise<{ handled: true; cancelled: boolean; text?: string }> {\n const response = await params.client.abortMessage({\n runtime: params.runtime,\n runId: null,\n });\n const cancelled = response.success && response.aborted;\n if (params.channelId === undefined) {\n return { handled: true, cancelled };\n }\n const displayNameResolver =\n params.channelDisplayName ?? defaultChannelDisplayName;\n return {\n handled: true,\n cancelled,\n text: cancelled\n ? buildChannelCancelAcceptedMessage(params.channelId, displayNameResolver)\n : buildChannelCancelNoActiveTurnMessage(\n params.channelId,\n displayNameResolver,\n ),\n };\n}\n\nasync function runChannelExecuteCommand(params: {\n client: RuntimeCommandClient;\n runtime: RuntimeCommandScope;\n commandId: RuntimeExecuteCommandId;\n args?: string;\n}): Promise<RuntimeCommandReply> {\n const trimmedArgs = params.args?.trim();\n const response = await params.client.executeCommand({\n runtime: params.runtime,\n commandId: params.commandId,\n ...(trimmedArgs ? { args: trimmedArgs } : {}),\n });\n return { handled: true, text: response.output };\n}\n\n/** `/reflection` — send `execute_command` (`reflect`) and relay its output. */\nexport function runChannelReflectionCommand(params: {\n client: RuntimeCommandClient;\n runtime: RuntimeCommandScope;\n args?: string;\n}): Promise<RuntimeCommandReply> {\n return runChannelExecuteCommand({ ...params, commandId: \"reflect\" });\n}\n\n/** `/reload` — send `execute_command` (`reload`) and relay its output. */\nexport function runChannelReloadCommand(params: {\n client: RuntimeCommandClient;\n runtime: RuntimeCommandScope;\n args?: string;\n}): Promise<RuntimeCommandReply> {\n return runChannelExecuteCommand({ ...params, commandId: \"reload\" });\n}\n",
@@ -8,13 +8,12 @@
8
8
  "const CONVERSATION_BUSY_ERROR_PATTERNS = [\n /another request is (?:currently )?(?:being )?processed/i,\n /currently being processed for this conversation/i,\n /busy with another active run/i,\n /already processing for this conversation/i,\n /turn still running/i,\n];\n\nexport const CONVERSATION_BUSY_TITLE = \"Turn still running\";\n\nexport function isConversationBusyErrorText(\n errorText: string | null | undefined,\n): boolean {\n if (!errorText) return false;\n return CONVERSATION_BUSY_ERROR_PATTERNS.some((pattern) =>\n pattern.test(errorText),\n );\n}\n\nexport function buildConversationBusyErrorBody(\n automaticRetry: boolean,\n): string {\n return automaticRetry\n ? \"Another request is already processing for this conversation. I’ll wait for it to finish and retry automatically.\"\n : \"Another request is already processing for this conversation. Please wait for it to finish, then try again.\";\n}\n\nexport function formatConversationBusyErrorMessage(options: {\n automaticRetry?: boolean;\n runId?: string;\n}): string {\n const lines = [\n CONVERSATION_BUSY_TITLE,\n buildConversationBusyErrorBody(options.automaticRetry ?? false),\n ];\n if (options.runId) {\n lines.push(\"\", `Run ID: ${options.runId}`);\n }\n return lines.join(\"\\n\");\n}\n",
9
9
  "import {\n buildConversationBusyErrorBody,\n CONVERSATION_BUSY_TITLE,\n isConversationBusyErrorText,\n} from \"@/utils/conversation-busy-error\";\n\nconst RAW_LOOP_ERROR_PATTERN = /^Unexpected stop reason:\\s*error$/i;\nconst APP_CHAT_URL_PATTERN = /https:\\/\\/app\\.letta\\.com\\/chat\\/\\S+/i;\nconst ESCAPE_CHARACTER = String.fromCharCode(27);\nconst OSC8_PREFIX = `${ESCAPE_CHARACTER}]8;;`;\nconst OSC8_TERMINATOR = `${ESCAPE_CHARACTER}\\\\`;\n\nconst APPROVAL_PENDING_ERROR_PATTERNS = [\n /waiting for approval/i,\n /pending request before continuing/i,\n /approve or deny the pending request/i,\n];\n\nconst DATABASE_LOCK_TIMEOUT_PATTERN =\n /\\bcancel(?:l)?ing statement due to lock timeout\\b/i;\nconst POSTGRES_LOCK_NOT_AVAILABLE_CODE_PATTERN = /\\b55P03\\b/i;\nconst POSTGRES_LOCK_NOT_AVAILABLE_SQLSTATE_PATTERN =\n /\\b(?:sqlstate|pgcode)\\s*[:=]?\\s*[\"']?55P03\\b/i;\nconst POSTGRES_LOCK_NOT_AVAILABLE_CONTEXT_PATTERN =\n /\\b(?:postgres(?:ql)?|psycopg|sqlalchemy|lock[_ -]?not[_ -]?available|lock timeout)\\b/i;\n\nconst RUN_ID_PATTERNS = [\n /\"run_id\"\\s*:\\s*\"([^\"\\\\]+)\"/i,\n /\\brun[_\\s-]?id\\b[\"']?\\s*[:=]\\s*[\"']?([A-Za-z0-9_-]+)/i,\n /\\(run:\\s*([A-Za-z0-9_-]+)\\)/i,\n];\n\nexport type ChannelLifecycleErrorKind =\n | \"approval_pending\"\n | \"conversation_busy\"\n | \"database_lock_timeout\"\n | \"generic\";\n\nexport interface ChannelLifecycleErrorDisplayOptions {\n automaticRetry?: boolean;\n runId?: string | null;\n}\n\nexport interface ChannelLifecycleErrorDisplay {\n kind: ChannelLifecycleErrorKind;\n title: string;\n body: string;\n runId?: string;\n}\n\nexport interface ChannelLifecycleErrorFormatOptions\n extends ChannelLifecycleErrorDisplayOptions {\n codeBlock?: boolean;\n maxLength?: number;\n}\n\nexport const CHANNEL_LIFECYCLE_FALLBACK_ERROR_MESSAGE =\n \"Something went wrong while processing that message. Please try again.\";\n\nexport const CHANNEL_LIFECYCLE_APPROVAL_PENDING_MESSAGE =\n \"The agent is still waiting on a tool approval from an earlier turn. Please approve or deny that pending request, then send your message again.\";\n\nexport const CHANNEL_LIFECYCLE_TRANSIENT_ERROR_MESSAGE =\n \"A temporary error interrupted this turn. Please try again.\";\n\nexport const CHANNEL_LIFECYCLE_CONVERSATION_BUSY_TITLE =\n CONVERSATION_BUSY_TITLE;\n\nfunction stripTrailingRunIdPunctuation(runId: string): string {\n return runId.replace(/[)\"'.,;]+$/g, \"\");\n}\n\nexport function extractChannelLifecycleRunId(\n errorText: string | null | undefined,\n): string | undefined {\n if (!errorText) return undefined;\n for (const pattern of RUN_ID_PATTERNS) {\n const match = errorText.match(pattern);\n const runId = match?.[1]?.trim();\n if (runId) {\n return stripTrailingRunIdPunctuation(runId);\n }\n }\n return undefined;\n}\n\nfunction stripOsc8TerminalLinks(errorText: string): string {\n let output = \"\";\n let cursor = 0;\n\n while (cursor < errorText.length) {\n const linkStart = errorText.indexOf(OSC8_PREFIX, cursor);\n if (linkStart === -1) {\n output += errorText.slice(cursor);\n break;\n }\n\n const labelStart = errorText.indexOf(\n OSC8_TERMINATOR,\n linkStart + OSC8_PREFIX.length,\n );\n if (labelStart === -1) {\n output += errorText.slice(cursor);\n break;\n }\n\n const closeStart = errorText.indexOf(\n OSC8_PREFIX,\n labelStart + OSC8_TERMINATOR.length,\n );\n if (closeStart === -1) {\n output += errorText.slice(cursor);\n break;\n }\n\n const closeEnd = errorText.indexOf(\n OSC8_TERMINATOR,\n closeStart + OSC8_PREFIX.length,\n );\n if (closeEnd === -1) {\n output += errorText.slice(cursor);\n break;\n }\n\n output += errorText.slice(cursor, linkStart);\n output += errorText.slice(labelStart + OSC8_TERMINATOR.length, closeStart);\n cursor = closeEnd + OSC8_TERMINATOR.length;\n }\n\n return output;\n}\n\nexport function sanitizeChannelLifecycleErrorText(\n errorText: string | null | undefined,\n): string {\n if (!errorText) return \"\";\n\n const withoutTerminalLinks = stripOsc8TerminalLinks(errorText);\n\n return withoutTerminalLinks\n .split(\"\\n\")\n .filter((line) => {\n const trimmed = line.trim();\n if (/^View agent:/i.test(trimmed)) return false;\n if (APP_CHAT_URL_PATTERN.test(trimmed)) return false;\n return true;\n })\n .join(\"\\n\")\n .replace(/[ \\t]+\\n/g, \"\\n\")\n .trim();\n}\n\nfunction truncateLifecycleMessage(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return `${text.slice(0, Math.max(0, maxLength - 1)).trimEnd()}…`;\n}\n\nfunction isDatabaseLockErrorText(errorText: string): boolean {\n return (\n DATABASE_LOCK_TIMEOUT_PATTERN.test(errorText) ||\n POSTGRES_LOCK_NOT_AVAILABLE_SQLSTATE_PATTERN.test(errorText) ||\n (POSTGRES_LOCK_NOT_AVAILABLE_CODE_PATTERN.test(errorText) &&\n POSTGRES_LOCK_NOT_AVAILABLE_CONTEXT_PATTERN.test(errorText))\n );\n}\n\nexport function getChannelLifecycleErrorDisplay(\n errorText: string | null | undefined,\n options: ChannelLifecycleErrorDisplayOptions = {},\n): ChannelLifecycleErrorDisplay {\n const normalized = sanitizeChannelLifecycleErrorText(errorText);\n const optionsRunId = options.runId?.trim();\n const runId = optionsRunId || extractChannelLifecycleRunId(errorText);\n\n if (!normalized || RAW_LOOP_ERROR_PATTERN.test(normalized)) {\n return {\n kind: \"generic\",\n title: \"Turn failed\",\n body: CHANNEL_LIFECYCLE_FALLBACK_ERROR_MESSAGE,\n runId,\n };\n }\n\n if (isDatabaseLockErrorText(normalized)) {\n return {\n kind: \"database_lock_timeout\",\n title: \"Turn failed\",\n body: CHANNEL_LIFECYCLE_TRANSIENT_ERROR_MESSAGE,\n runId,\n };\n }\n\n if (isConversationBusyErrorText(normalized)) {\n return {\n kind: \"conversation_busy\",\n title: CHANNEL_LIFECYCLE_CONVERSATION_BUSY_TITLE,\n body: buildConversationBusyErrorBody(options.automaticRetry ?? false),\n runId,\n };\n }\n\n if (\n APPROVAL_PENDING_ERROR_PATTERNS.some((pattern) => pattern.test(normalized))\n ) {\n return {\n kind: \"approval_pending\",\n title: \"Turn failed\",\n body: CHANNEL_LIFECYCLE_APPROVAL_PENDING_MESSAGE,\n runId,\n };\n }\n\n return {\n kind: \"generic\",\n title: \"Turn failed\",\n body: normalized,\n runId,\n };\n}\n\nexport function normalizeChannelLifecycleErrorMessage(\n errorText: string | null | undefined,\n options: ChannelLifecycleErrorDisplayOptions = {},\n): string {\n return getChannelLifecycleErrorDisplay(errorText, options).body;\n}\n\nexport function formatChannelLifecycleErrorMessage(\n errorText: string | null | undefined,\n options: ChannelLifecycleErrorFormatOptions = {},\n): string {\n const display = getChannelLifecycleErrorDisplay(errorText, options);\n const maxLength = options.maxLength ?? Number.POSITIVE_INFINITY;\n const body = truncateLifecycleMessage(display.body, maxLength);\n\n if (display.kind === \"conversation_busy\") {\n const lines = [display.title, body];\n if (display.runId) {\n lines.push(\"\", `Run ID: ${display.runId}`);\n }\n return lines.join(\"\\n\");\n }\n\n if (display.kind === \"database_lock_timeout\") {\n const lines = [`${display.title}:`, body];\n if (display.runId) {\n lines.push(\"\", `Run ID: ${display.runId}`);\n }\n return lines.join(\"\\n\");\n }\n\n if (options.codeBlock) {\n const escaped = body.replace(/```/g, \"``\\u200b`\");\n const lines = [`${display.title}:`, \"```\", escaped, \"```\"];\n if (display.runId) {\n lines.push(\"\", `Run ID: ${display.runId}`);\n }\n return lines.join(\"\\n\");\n }\n\n const lines = [`${display.title}:`, body];\n if (display.runId) {\n lines.push(\"\", `Run ID: ${display.runId}`);\n }\n return lines.join(\"\\n\");\n}\n",
10
10
  "/**\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",
11
- "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",
12
- "/**\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",
11
+ "/**\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 type { ChannelUserMention } from \"@/channels/message-references\";\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 sanitizeMentionDisplayName(mention: ChannelUserMention): string {\n const name = mention.displayName\n .replace(/[\\p{Cc}\\p{Cf}\\p{Zl}\\p{Zp}]+/gu, \" \")\n .replace(/\\s+/gu, \" \")\n .trim()\n .slice(0, 80)\n .trim();\n return name || mention.userId;\n}\n\nfunction buildTextWithUserMentions(\n text: string,\n mentions: ChannelUserMention[] | undefined,\n): string {\n if (!mentions || mentions.length === 0) return escapeXmlText(text);\n let cursor = 0;\n const parts: string[] = [];\n for (const mention of mentions) {\n if (\n !Number.isInteger(mention.start) ||\n !Number.isInteger(mention.end) ||\n mention.start < cursor ||\n mention.end <= mention.start ||\n mention.end > text.length ||\n !mention.userId.trim()\n ) {\n return escapeXmlText(text);\n }\n parts.push(escapeXmlText(text.slice(cursor, mention.start)));\n const displayName = sanitizeMentionDisplayName(mention);\n parts.push(\n `<mention id=\"${escapeXmlAttribute(mention.userId)}\">@${escapeXmlText(displayName)}</mention>`,\n );\n cursor = mention.end;\n }\n parts.push(escapeXmlText(text.slice(cursor)));\n return parts.join(\"\");\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\nfunction buildChannelAttachmentReminderText(\n msg: InboundChannelMessage,\n): string | undefined {\n if (!hasNotificationAttachmentPaths(msg)) return undefined;\n return [\n SYSTEM_REMINDER_OPEN,\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 SYSTEM_REMINDER_CLOSE,\n ].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 const text = buildTextWithUserMentions(\n replyContext.text,\n replyContext.userMentions,\n );\n return `<reply-context${attrString}>\\n${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\n ? [buildTextWithUserMentions(entry.text, entry.userMentions)]\n : []),\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 if (msg.routedBy) {\n attrs.push(`routed_by=\"${escapeXmlAttribute(msg.routedBy)}\"`);\n }\n\n const attrString = attrs.join(\" \");\n const escapedText = msg.text\n ? buildTextWithUserMentions(msg.text, msg.userMentions)\n : \"\";\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 * Attachment guidance is emitted only when this event contains inspectable\n * local paths. Reply semantics live in the scoped MessageChannel definition.\n */\nexport function formatChannelNotification(\n msg: InboundChannelMessage,\n): MessageCreate[\"content\"] {\n const attachmentReminder = buildChannelAttachmentReminderText(msg);\n return [\n ...(attachmentReminder\n ? [{ type: \"text\" as const, text: attachmentReminder }]\n : []),\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",
13
12
  "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",
14
13
  "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",
15
14
  "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"
16
15
  ],
17
- "mappings": "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",
18
- "debugId": "7BECF32CA37A743264756E2164756E21",
16
+ "mappings": "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",
17
+ "debugId": "2F3AF69F97CABB6D64756E2164756E21",
19
18
  "names": []
20
19
  }