@letta-ai/letta-code 0.30.32 → 0.31.0

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 (61) hide show
  1. package/dist/agent-presets-agent-presets.js +11 -0
  2. package/dist/agent-presets-agent-presets.js.map +9 -0
  3. package/dist/agent-presets-personality-asset-content.js +42 -0
  4. package/dist/agent-presets-personality-asset-content.js.map +10 -0
  5. package/dist/agent-presets.js +17 -2
  6. package/dist/agent-presets.js.map +3 -3
  7. package/dist/channels-public.js +16 -1
  8. package/dist/channels-public.js.map +5 -4
  9. package/dist/gateway-core.js +5 -4
  10. package/dist/gateway-core.js.map +3 -3
  11. package/dist/mcp-client.js +2 -2
  12. package/dist/mcp-client.js.map +1 -1
  13. package/dist/types/agent/create-agent-request.d.ts +3 -0
  14. package/dist/types/agent/create-agent-request.d.ts.map +1 -1
  15. package/dist/types/agent/model.d.ts.map +1 -1
  16. package/dist/types/agent/personality-asset-content.d.ts +3 -0
  17. package/dist/types/agent/personality-asset-content.d.ts.map +1 -0
  18. package/dist/types/agent/skills.d.ts.map +1 -1
  19. package/dist/types/channels/gateway-core.d.ts.map +1 -1
  20. package/dist/types/channels/route-thread-key.d.ts +20 -0
  21. package/dist/types/channels/route-thread-key.d.ts.map +1 -0
  22. package/dist/types/channels-public.d.ts +1 -0
  23. package/dist/types/channels-public.d.ts.map +1 -1
  24. package/dist/types/tools/impl/skill.d.ts.map +1 -1
  25. package/dist/types/types/protocol_v2.d.ts +3 -144
  26. package/dist/types/types/protocol_v2.d.ts.map +1 -1
  27. package/dist/types/types/schedule-protocol.d.ts +151 -1
  28. package/dist/types/types/schedule-protocol.d.ts.map +1 -1
  29. package/dist/types/utils/frontmatter.d.ts.map +1 -1
  30. package/dist/types/websocket/listener/cwd-change.d.ts.map +1 -1
  31. package/letta.js +238 -86
  32. package/package.json +4 -2
  33. package/scripts/builtin-skills-watch/agent-watch.test.ts +104 -0
  34. package/scripts/builtin-skills-watch/agent-watch.ts +337 -0
  35. package/scripts/builtin-skills-watch/aggregate-results.test.ts +79 -0
  36. package/scripts/builtin-skills-watch/aggregate-results.ts +326 -0
  37. package/scripts/builtin-skills-watch/analysis.test.ts +70 -0
  38. package/scripts/builtin-skills-watch/analysis.ts +228 -0
  39. package/scripts/builtin-skills-watch/evidence.test.ts +114 -0
  40. package/scripts/builtin-skills-watch/evidence.ts +145 -0
  41. package/scripts/builtin-skills-watch/github.ts +161 -0
  42. package/scripts/builtin-skills-watch/tracker.test.ts +249 -0
  43. package/scripts/builtin-skills-watch/tracker.ts +506 -0
  44. package/scripts/builtin-skills-watch/update-tracker.test.ts +234 -0
  45. package/scripts/builtin-skills-watch/update-tracker.ts +508 -0
  46. package/scripts/claude-watch/release-source.test.ts +16 -4
  47. package/scripts/claude-watch/release-source.ts +41 -2
  48. package/scripts/codex-watch/agent-watch.ts +8 -5
  49. package/scripts/codex-watch/release-analysis.test.ts +18 -16
  50. package/scripts/codex-watch/release-analysis.ts +31 -9
  51. package/scripts/codex-watch/tracker.test.ts +5 -5
  52. package/scripts/codex-watch/tracker.ts +7 -8
  53. package/scripts/pi-ai-watch/agent-watch.ts +9 -14
  54. package/scripts/pi-ai-watch/release-analysis.test.ts +24 -18
  55. package/scripts/pi-ai-watch/release-analysis.ts +85 -45
  56. package/scripts/pi-ai-watch/tracker.test.ts +25 -18
  57. package/scripts/pi-ai-watch/tracker.ts +7 -19
  58. package/scripts/pi-ai-watch/update-tracker.ts +2 -2
  59. package/scripts/source-file-size-baseline.json +2 -2
  60. package/skills/dispatching-coding-agents/SKILL.md +16 -7
  61. package/skills/syncing-memory-filesystem/SKILL.md +118 -226
@@ -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/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", "../src/channels/route-thread-key.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",
@@ -11,9 +11,10 @@
11
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",
12
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",
13
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",
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"
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",
15
+ "/**\n * Canonical thread keying for channel route identity.\n *\n * A route maps (channel, account, chat, thread) to one agent conversation.\n * Chats without a thread (for example a Slack DM outside any thread) still\n * need a stable key so every top-level message reuses the same route instead\n * of creating a new conversation per message. That key is\n * CHANNEL_ROOT_THREAD_KEY.\n *\n * The key is route identity only. It is not a platform thread id: outbound\n * replies for a root-keyed route must not target a thread. Use\n * channelRouteThreadIdFromKey to translate a persisted key back into a\n * nullable platform thread id.\n */\nexport const CHANNEL_ROOT_THREAD_KEY = \"__root__\";\n\n/** Canonical route thread key: the trimmed thread id, or the root sentinel. */\nexport function resolveChannelRouteThreadKey(threadId?: string | null): string {\n const trimmed = threadId?.trim();\n return trimmed && trimmed.length > 0 ? trimmed : CHANNEL_ROOT_THREAD_KEY;\n}\n\n/** Translate a persisted route thread key back into a platform thread id. */\nexport function channelRouteThreadIdFromKey(\n threadKey?: string | null,\n): string | null {\n const trimmed = threadKey?.trim();\n if (!trimmed || trimmed === CHANNEL_ROOT_THREAD_KEY) return null;\n return trimmed;\n}\n"
15
16
  ],
16
- "mappings": "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",
17
- "debugId": "2F3AF69F97CABB6D64756E2164756E21",
17
+ "mappings": "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",
18
+ "debugId": "DAE75575BAE4068264756E2164756E21",
18
19
  "names": []
19
20
  }
@@ -1453,7 +1453,9 @@ class ChannelGateway {
1453
1453
  return false;
1454
1454
  }
1455
1455
  this.rememberAcceptedClientMessageId(state, delivery.clientMessageId);
1456
- const queuedEvents = delivery.sources.map((source) => this.enqueueHook(state, () => this.hooks.onLifecycle({ type: "queued", source })));
1456
+ for (const source of delivery.sources) {
1457
+ this.enqueueHook(state, () => this.hooks.onLifecycle({ type: "queued", source }));
1458
+ }
1457
1459
  if (response.disposition === "started") {
1458
1460
  this.activateSources(state, delivery.clientMessageId, delivery.sources);
1459
1461
  state.pendingSourcesByClientMessageId.delete(delivery.clientMessageId);
@@ -1464,7 +1466,6 @@ class ChannelGateway {
1464
1466
  }
1465
1467
  this.reconcileExplicitQueueRemovals(state);
1466
1468
  }
1467
- await Promise.all(queuedEvents);
1468
1469
  return true;
1469
1470
  } catch (error) {
1470
1471
  state.pendingSourcesByClientMessageId.delete(delivery.clientMessageId);
@@ -1564,7 +1565,7 @@ class ChannelGateway {
1564
1565
  batchId,
1565
1566
  sources: routingSources
1566
1567
  }) ?? null;
1567
- await this.enqueueHook(state, () => this.hooks.onLifecycle({
1568
+ this.enqueueHook(state, () => this.hooks.onLifecycle({
1568
1569
  type: "processing",
1569
1570
  batchId,
1570
1571
  sources: active.lifecycleSources
@@ -3008,4 +3009,4 @@ export {
3008
3009
  ChannelControlRequestCoordinator
3009
3010
  };
3010
3011
 
3011
- //# debugId=EEE0C857500478C564756E2164756E21
3012
+ //# debugId=A8EB59CB4D3C6D0D64756E2164756E21