@letta-ai/letta-code 0.31.11 → 0.31.13
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.
- package/README.md +16 -14
- package/dist/agent-presets.js +3 -3
- package/dist/agent-presets.js.map +1 -1
- package/dist/channels-slack.js +20 -1
- package/dist/channels-slack.js.map +3 -3
- package/dist/gateway-core.js +2 -1
- package/dist/gateway-core.js.map +3 -3
- package/dist/mcp-client.js +4 -4
- package/dist/mcp-client.js.map +2 -2
- package/dist/types/agent/subagents/manager.d.ts +1 -1
- package/dist/types/agent/subagents/manager.d.ts.map +1 -1
- package/dist/types/backend/api/client.d.ts.map +1 -1
- package/dist/types/backend/backend.d.ts +1 -0
- package/dist/types/backend/backend.d.ts.map +1 -1
- package/dist/types/channels/message-channel-tool-definition.d.ts.map +1 -1
- package/dist/types/channels/plugin-types.d.ts +1 -1
- package/dist/types/channels/plugin-types.d.ts.map +1 -1
- package/dist/types/channels/slack/internal-types.d.ts +5 -0
- package/dist/types/channels/slack/internal-types.d.ts.map +1 -1
- package/dist/types/channels/slack/message-action-contract.d.ts +2 -0
- package/dist/types/channels/slack/message-action-contract.d.ts.map +1 -1
- package/dist/types/channels/types.d.ts +1 -0
- package/dist/types/channels/types.d.ts.map +1 -1
- package/dist/types/cli/helpers/git-context.d.ts +1 -1
- package/dist/types/cli/helpers/git-context.d.ts.map +1 -1
- package/dist/types/tools/impl/bash.d.ts +2 -0
- package/dist/types/tools/impl/bash.d.ts.map +1 -1
- package/dist/types/tools/impl/exec-command.d.ts +8 -0
- package/dist/types/tools/impl/exec-command.d.ts.map +1 -1
- package/dist/types/tools/impl/task.d.ts +2 -2
- package/dist/types/websocket/listener/cwd-change.d.ts.map +1 -1
- package/dist/types/websocket/listener/device-git-context.d.ts +17 -0
- package/dist/types/websocket/listener/device-git-context.d.ts.map +1 -0
- package/dist/types/websocket/listener/listener-constants.d.ts.map +1 -1
- package/dist/types/websocket/listener/protocol-outbound.d.ts +1 -0
- package/dist/types/websocket/listener/protocol-outbound.d.ts.map +1 -1
- package/dist/types/websocket/listener/stream-observers.d.ts.map +1 -1
- package/dist/types/websocket/listener/worktree-watcher.d.ts.map +1 -1
- package/letta.js +1008 -888
- package/package.json +3 -2
- package/scripts/codex-watch/release-analysis.test.ts +87 -0
- package/scripts/codex-watch/release-analysis.ts +57 -7
- package/scripts/postinstall-patches.js +37 -14
- package/scripts/source-file-size-baseline.json +3 -3
- package/skills/browser-use/SKILL.md +22 -61
- package/skills/dispatching-coding-agents/SKILL.md +6 -6
- package/skills/messaging-agents/SKILL.md +34 -21
- package/skills/scheduling-tasks/SKILL.md +1 -1
- package/skills/submitting-feedback/SKILL.md +4 -2
- package/skills/teleporting-between-environments/SKILL.md +12 -12
- package/dist/types/tools/impl/foreground-sleep.d.ts +0 -13
- package/dist/types/tools/impl/foreground-sleep.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@ Letta Code can be used interactively, or to power always-on agents that work pro
|
|
|
28
28
|
| [Hooks](https://docs.letta.com/letta-code/hooks) | Run custom scripts at key points of agent execution to automate workflows |
|
|
29
29
|
| [Permissions](https://docs.letta.com/letta-code/permissions) | Set permission modes and customize what actions are auto-approved or auto-denied |
|
|
30
30
|
| [Crons & Schedules](https://docs.letta.com/letta-code/scheduling) | Configure heartbeats and crons, and let agents work across time with self-managed schedules |
|
|
31
|
-
| [Remote
|
|
31
|
+
| [Remote computers](https://docs.letta.com/platform/computers/byom) (requires signing in with Letta) | Agents work across multiple computers. Connect any machine by running `letta server --computer-name "..."` |
|
|
32
32
|
| [Secrets](https://docs.letta.com/letta-code/secrets) (requires signing in with Letta) | Make secrets available as environment variables (across machines) while obfuscating their values from context |
|
|
33
33
|
|
|
34
34
|
See the full list of slash commands in our [documentation](https://docs.letta.com/letta-code/slash-commands).
|
|
@@ -65,28 +65,30 @@ graph TD
|
|
|
65
65
|
|
|
66
66
|
Run `/login` from the CLI or sign in through the desktop app to access agents in your Letta account.
|
|
67
67
|
|
|
68
|
-
### Remote
|
|
69
|
-
Agents stored in Letta Cloud can run across multiple machines.
|
|
68
|
+
### Remote computers
|
|
69
|
+
Agents stored in Letta Cloud can run across multiple machines. Connect any machine by running:
|
|
70
70
|
```bash
|
|
71
71
|
letta server
|
|
72
|
-
letta server --
|
|
72
|
+
letta server --computer-name "work-laptop"
|
|
73
73
|
```
|
|
74
|
-
List discoverable
|
|
74
|
+
List discoverable computers from the CLI:
|
|
75
75
|
```bash
|
|
76
|
-
letta
|
|
76
|
+
letta computers list --online-only
|
|
77
77
|
```
|
|
78
|
-
Get the current
|
|
78
|
+
Get the current computer connection for routing another agent onto this same machine:
|
|
79
79
|
```bash
|
|
80
|
-
letta
|
|
80
|
+
letta computers current
|
|
81
81
|
```
|
|
82
|
-
Route a headless message through a specific
|
|
82
|
+
Route a headless message through a specific computer:
|
|
83
83
|
```bash
|
|
84
|
-
letta -p --agent <agent-id> --
|
|
84
|
+
letta -p --agent <agent-id> --computer "work-laptop" "hello from that machine"
|
|
85
85
|
```
|
|
86
|
-
Use `--
|
|
87
|
-
Agent-to-agent headless messages without `--
|
|
88
|
-
|
|
89
|
-
|
|
86
|
+
Use `--computer cloud` to start or reuse the target agent's cloud sandbox.
|
|
87
|
+
Agent-to-agent headless messages without `--computer` run on the same computer.
|
|
88
|
+
See our guides for using [Railway](https://docs.letta.com/letta-code/remote#railway), [DigitalOcean](https://docs.letta.com/letta-code/remote#digitalocean), and [Fly.io](https://docs.letta.com/letta-code/remote#flyio) as remote computers.
|
|
89
|
+
|
|
90
|
+
The previous `environments`/`envs`, `--environment`/`--env`, and `--env-name`
|
|
91
|
+
spellings remain available for backwards compatibility.
|
|
90
92
|
|
|
91
93
|
## Installing external skills
|
|
92
94
|
|
package/dist/agent-presets.js
CHANGED
|
@@ -878,7 +878,7 @@ Other
|
|
|
878
878
|
- [ ] Make a permissions edit: let the user know that you can modify permissions (what commands are automatically approved/denied). Ask them if there are certain actions they would like you to avoid.
|
|
879
879
|
- [ ] Create a local mod: let the user know you can customize Letta Code with trusted local mods for new tools, slash commands, provider integrations, UI panels/status, events, or permission overlays. Explain that mods are for executable harness behavior, while memory and skills are for retained knowledge and reusable procedures.
|
|
880
880
|
- [ ] Worktrees: let the user know that you can help them orchestrate many agents in parallel, and also work in parallel to other agents. Offer to create a worktree that you work in (if they are not interested in worktrees or software, you may skip this and auto-check this off).
|
|
881
|
-
- [ ] Moving machines: ask the user to
|
|
881
|
+
- [ ] Moving machines: ask the user to connect another computer (they can either run another desktop instance or run \`letta server\` on another machine) and run you there instead.
|
|
882
882
|
`;
|
|
883
883
|
|
|
884
884
|
// src/agent/prompts/onboarding_local.mdx
|
|
@@ -930,7 +930,7 @@ Other
|
|
|
930
930
|
- [ ] Make a permissions edit: let the user know that you can modify permissions (what commands are automatically approved/denied). Ask them if there are certain actions they would like you to avoid.
|
|
931
931
|
- [ ] Create a local mod: let the user know you can customize Letta Code with trusted local mods for new tools, slash commands, provider integrations, UI panels/status, events, or permission overlays. Explain that mods are for executable harness behavior, while memory and skills are for retained knowledge and reusable procedures.
|
|
932
932
|
- [ ] Worktrees: let the user know that you can help them orchestrate many agents in parallel, and also work in parallel to other agents. Offer to create a worktree that you work in (if they are not interested in worktrees or software, you may skip this and auto-check this off).
|
|
933
|
-
- [ ] Moving machines: ask the user to
|
|
933
|
+
- [ ] Moving machines: ask the user to connect another computer (they can either run another desktop instance or run \`letta server\` on another machine) and run you there instead.
|
|
934
934
|
`;
|
|
935
935
|
|
|
936
936
|
// src/agent/prompts/persona.mdx
|
|
@@ -2490,4 +2490,4 @@ export {
|
|
|
2490
2490
|
DEFAULT_CREATED_AGENT_BASE_TOOLS
|
|
2491
2491
|
};
|
|
2492
2492
|
|
|
2493
|
-
//# debugId=
|
|
2493
|
+
//# debugId=A9215CE8181F93FC64756E2164756E21
|
|
@@ -12,6 +12,6 @@
|
|
|
12
12
|
"/**\n * Pure builder for the `POST /v1/agents` wire payload of a Letta Code agent.\n *\n * This is the shared creation-policy choke point for the CLI and external\n * harness surfaces. It owns the defaults that must not drift between callers:\n * agent type, prompt mode, tags, server tools, initial messages, parallel tool\n * calls, and compaction. Callers may supply either a Letta Code personality or\n * their own identity blocks without rebuilding that policy.\n *\n * Everything reachable from this module must stay free of Node/backend imports\n * so it can be bundled in the browser-safe `agent-presets` package export.\n */\n\nimport type { CreateBlock } from \"@letta-ai/letta-client/resources/blocks/blocks\";\nimport { DEFAULT_SUMMARIZATION_MODEL } from \"@/constants\";\nimport { buildCreatedAgentTags } from \"./agent-tags\";\nimport { getDefaultMemoryBlocks } from \"./memory\";\nimport { getDefaultModel, resolveModel } from \"./model-catalog\";\nimport {\n buildPersonalityMemoryBlocks,\n getPersonalityCreationTags,\n getPersonalityDefaultMemoryFiles,\n getPersonalityOption,\n type PersonalityId,\n type PersonalityMemoryBlock,\n} from \"./personality-presets\";\nimport { buildSystemPrompt, type MemoryPromptMode } from \"./prompt-assets\";\n\n/** Agent type used for all Letta Code agents. */\nexport const LETTA_CODE_AGENT_TYPE = \"letta_v1_agent\";\n\n/**\n * Server-side tools attached to created agents. Client-side tools (Read,\n * Write, Bash, etc.) are passed via client_tools at runtime instead.\n */\nexport const DEFAULT_CREATED_AGENT_BASE_TOOLS = [\"web_search\", \"fetch_webpage\"];\n\nexport type CreateAgentMemoryBlock = CreateBlock;\n\nexport interface BuildCreateAgentRequestOptions {\n personalityId?: PersonalityId;\n name?: string;\n description?: string;\n /** Model ID or handle. Personality default, then catalog default, applies. */\n model?: string;\n /** Complete prompt override. Otherwise the standard prompt for prompt mode. */\n system?: string;\n memoryPromptMode?: MemoryPromptMode;\n /**\n * Caller-defined identity. With a personality, matching labels replace its\n * blocks and new labels append after the personality blocks.\n */\n memoryBlocks?: CreateAgentMemoryBlock[];\n blockIds?: string[];\n /** Extra tags appended after canonical Letta Code and personality tags. */\n extraTags?: string[];\n enableMemfs?: boolean;\n isSubagent?: boolean;\n /** Exact server-side tools. Omission uses the Letta Code web-tool defaults. */\n baseTools?: string[];\n embedding?: string;\n hidden?: boolean;\n parallelToolCalls?: boolean;\n compactionModel?: string;\n}\n\nexport interface CreateAgentRequest {\n agent_type: typeof LETTA_CODE_AGENT_TYPE;\n name?: string;\n description?: string;\n model: string;\n system: string;\n memory_blocks?: CreateAgentMemoryBlock[];\n block_ids?: string[];\n tags: string[];\n tools: string[];\n include_base_tools: false;\n include_base_tool_rules: false;\n initial_message_sequence: never[];\n parallel_tool_calls: boolean;\n compaction_settings: { model: string };\n embedding?: string;\n hidden?: boolean;\n}\n\nexport type CreateAgentRequestForPersonality = CreateAgentRequest & {\n name: string;\n description: string;\n memory_blocks: PersonalityMemoryBlock[];\n profile_picture?: {\n content: string;\n };\n};\n\nfunction mergeMemoryBlocks(\n base: CreateAgentMemoryBlock[],\n overrides: CreateAgentMemoryBlock[] | undefined,\n): CreateAgentMemoryBlock[] {\n const blocks = base.map((block) => ({ ...block }));\n for (const override of overrides ?? []) {\n const index = blocks.findIndex((block) => block.label === override.label);\n if (index >= 0) {\n blocks[index] = { ...override };\n } else {\n blocks.push({ ...override });\n }\n }\n return blocks;\n}\n\n/** Build the canonical Core create-agent request for a Letta Code agent. */\nexport async function buildCreateAgentRequest(\n options: BuildCreateAgentRequestOptions = {},\n): Promise<CreateAgentRequest> {\n const personality = options.personalityId\n ? getPersonalityOption(options.personalityId)\n : undefined;\n const modelIdentifier = options.model ?? personality?.defaultModel;\n const modelHandle = modelIdentifier\n ? resolveModel(modelIdentifier)\n : getDefaultModel();\n if (!modelHandle) {\n throw new Error(`Unknown model: ${modelIdentifier}`);\n }\n\n if (\n !options.isSubagent &&\n options.enableMemfs !== undefined &&\n options.memoryPromptMode !== undefined &&\n options.enableMemfs !== (options.memoryPromptMode !== \"standard\")\n ) {\n throw new Error(\n \"enableMemfs and memoryPromptMode must describe the same memory mode\",\n );\n }\n const enableMemfs = options.isSubagent\n ? false\n : (options.enableMemfs ?? options.memoryPromptMode !== \"standard\");\n const memoryPromptMode = options.isSubagent\n ? \"standard\"\n : (options.memoryPromptMode ?? (enableMemfs ? \"memfs\" : \"standard\"));\n const personalityTags = options.personalityId\n ? getPersonalityCreationTags(options.personalityId)\n : [];\n const personalityBlocks = options.personalityId\n ? buildPersonalityMemoryBlocks(\n options.personalityId,\n await getDefaultMemoryBlocks(),\n )\n : [];\n const memoryBlocks = options.isSubagent\n ? undefined\n : options.personalityId || options.memoryBlocks !== undefined\n ? mergeMemoryBlocks(personalityBlocks, options.memoryBlocks)\n : undefined;\n const blockIds = options.isSubagent ? undefined : options.blockIds;\n\n return {\n agent_type: LETTA_CODE_AGENT_TYPE,\n ...(options.name !== undefined || personality\n ? { name: options.name ?? personality?.label }\n : {}),\n ...(options.description !== undefined || personality\n ? { description: options.description ?? personality?.description }\n : {}),\n model: modelHandle,\n system: options.system ?? buildSystemPrompt(\"default\", memoryPromptMode),\n ...(memoryBlocks !== undefined ? { memory_blocks: memoryBlocks } : {}),\n ...(blockIds && blockIds.length > 0 ? { block_ids: blockIds } : {}),\n tags: buildCreatedAgentTags({\n enableMemfs,\n isSubagent: options.isSubagent,\n tags: [...personalityTags, ...(options.extraTags ?? [])],\n }),\n tools: [...(options.baseTools ?? DEFAULT_CREATED_AGENT_BASE_TOOLS)],\n include_base_tools: false,\n include_base_tool_rules: false,\n initial_message_sequence: [],\n parallel_tool_calls: options.parallelToolCalls ?? true,\n compaction_settings: {\n model: options.compactionModel ?? DEFAULT_SUMMARIZATION_MODEL,\n },\n ...(options.embedding !== undefined\n ? { embedding: options.embedding }\n : {}),\n ...(options.isSubagent\n ? { hidden: true }\n : options.hidden !== undefined\n ? { hidden: options.hidden }\n : {}),\n };\n}\n\n/** Compatibility wrapper for callers that create a personality agent. */\nexport async function buildCreateAgentRequestForPersonality(params: {\n personalityId: PersonalityId;\n name?: string;\n description?: string;\n model?: string;\n extraTags?: string[];\n}): Promise<CreateAgentRequestForPersonality> {\n const request = (await buildCreateAgentRequest(\n params,\n )) as CreateAgentRequestForPersonality;\n const profilePicture = getPersonalityDefaultMemoryFiles(\n params.personalityId,\n ).find((file) => file.path === \"profile.png\");\n if (!profilePicture) {\n return request;\n }\n const { getPersonalityAssetBase64 } = await import(\n \"./personality-asset-content\"\n );\n return {\n ...request,\n profile_picture: {\n content: await getPersonalityAssetBase64(profilePicture.assetId),\n },\n };\n}\n"
|
|
13
13
|
],
|
|
14
14
|
"mappings": ";;;;;AAQO,IAAM,wBAAwB;AAG9B,IAAM,wBAAwB;AAG9B,IAAM,0BAA0B;AAGhC,IAAM,yBAAyB;AAQ/B,SAAS,qBAAqB,CACnC,UAAwC,CAAC,GAC/B;AAAA,EACV,MAAM,OAAO,CAAC,qBAAqB;AAAA,EACnC,IAAI,QAAQ,YAAY;AAAA,IACtB,KAAK,KAAK,uBAAuB;AAAA,EACnC;AAAA,EACA,IAAI,QAAQ,aAAa;AAAA,IACvB,KAAK,KAAK,sBAAsB;AAAA,EAClC;AAAA,EACA,IAAI,QAAQ,QAAQ,MAAM,QAAQ,QAAQ,IAAI,GAAG;AAAA,IAC/C,KAAK,KAAK,GAAG,QAAQ,IAAI;AAAA,EAC3B;AAAA,EACA,OAAO,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC;AAAA;;AC1B1B,IAAM,8BAA8B;AA2BpC,IAAM,sBAAsB;AAC5B,IAAM,uBAAuB,IAAI;AACjC,IAAM,wBAAwB,KAAK;AAEnC,IAAM,mBAAmB;AACzB,IAAM,oBAAoB,IAAI;AAC9B,IAAM,qBAAqB,KAAK;AAoBhC,IAAM,+BAA+B,KAAK;;;ACjE1C,IAAM,yBAAyB,CAAC,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
|
|
15
|
-
"debugId": "
|
|
15
|
+
"debugId": "A9215CE8181F93FC64756E2164756E21",
|
|
16
16
|
"names": []
|
|
17
17
|
}
|
package/dist/channels-slack.js
CHANGED
|
@@ -653,10 +653,27 @@ async function reactInSlack(context) {
|
|
|
653
653
|
});
|
|
654
654
|
return request.remove ? `Reaction removed on slack (message_id: ${result.messageId})` : `Reaction added on slack (message_id: ${result.messageId})`;
|
|
655
655
|
}
|
|
656
|
+
async function listSlackCustomEmojis(context) {
|
|
657
|
+
const listCustomEmojis = context.adapter.listCustomEmojis;
|
|
658
|
+
if (typeof listCustomEmojis !== "function") {
|
|
659
|
+
return "Error: Running Slack adapter does not support custom emoji discovery.";
|
|
660
|
+
}
|
|
661
|
+
try {
|
|
662
|
+
const names = await listCustomEmojis.call(context.adapter);
|
|
663
|
+
if (names.length === 0) {
|
|
664
|
+
return "This Slack workspace has no custom emoji available to the app.";
|
|
665
|
+
}
|
|
666
|
+
return `Available custom Slack emoji (${names.length}): ${names.map((name) => `:${name}:`).join(", ")}`;
|
|
667
|
+
} catch (error) {
|
|
668
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
669
|
+
return `Error: Could not list custom Slack emoji. ${message}`;
|
|
670
|
+
}
|
|
671
|
+
}
|
|
656
672
|
function createSlackMessageActionAdapter(options = {}) {
|
|
657
673
|
const actions = [
|
|
658
674
|
"send",
|
|
659
675
|
...options.react ? ["react"] : [],
|
|
676
|
+
...options.listCustomEmojis ? ["list-custom-emojis"] : [],
|
|
660
677
|
...options.uploadFile ? ["upload-file"] : [],
|
|
661
678
|
...options.downloadFile ? ["download-file"] : []
|
|
662
679
|
];
|
|
@@ -695,6 +712,8 @@ function createSlackMessageActionAdapter(options = {}) {
|
|
|
695
712
|
return await sendSlackMessage(context);
|
|
696
713
|
case "react":
|
|
697
714
|
return options.react ? await reactInSlack(context) : 'Error: Action "react" is not supported on slack.';
|
|
715
|
+
case "list-custom-emojis":
|
|
716
|
+
return options.listCustomEmojis ? await listSlackCustomEmojis(context) : 'Error: Action "list-custom-emojis" is not supported on slack.';
|
|
698
717
|
case "download-file":
|
|
699
718
|
return options.downloadFile ? await options.downloadFile(context) : 'Error: Action "download-file" is not supported on slack.';
|
|
700
719
|
default:
|
|
@@ -1564,4 +1583,4 @@ export {
|
|
|
1564
1583
|
SLACK_ASSISTANT_STARTUP_STATUS
|
|
1565
1584
|
};
|
|
1566
1585
|
|
|
1567
|
-
//# debugId=
|
|
1586
|
+
//# debugId=AB89B5DE30FF657764756E2164756E21
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"import type {\n ChannelTurnSource,\n OutboundChannelMessage,\n} from \"@/channels/types\";\n\nexport function isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\nexport function firstNonEmptyString(...values: unknown[]): string | undefined {\n return values.find(isNonEmptyString);\n}\n\nexport function resolveSlackChatType(chatId: string): \"direct\" | \"channel\" {\n return chatId.startsWith(\"D\") ? \"direct\" : \"channel\";\n}\n\nexport function resolveSlackSourceThreadTs(\n source: ChannelTurnSource,\n): string | undefined {\n if (\n source.chatType === \"direct\" ||\n resolveSlackChatType(source.chatId) === \"direct\"\n ) {\n return firstNonEmptyString(source.threadId);\n }\n return firstNonEmptyString(source.threadId, source.messageId);\n}\n\nexport function resolveSlackProgressThreadTs(\n source: ChannelTurnSource,\n): string | undefined {\n if (\n source.chatType === \"direct\" ||\n resolveSlackChatType(source.chatId) === \"direct\"\n ) {\n return firstNonEmptyString(source.threadId, source.messageId);\n }\n return resolveSlackSourceThreadTs(source);\n}\n\nexport function resolveSlackOutboundThreadTs(\n msg: Pick<OutboundChannelMessage, \"chatId\" | \"threadId\" | \"replyToMessageId\">,\n): string | undefined {\n if (resolveSlackChatType(msg.chatId) === \"direct\") {\n return firstNonEmptyString(msg.threadId);\n }\n return firstNonEmptyString(msg.threadId, msg.replyToMessageId);\n}\n\nexport function normalizeSlackReactionName(value: string): string {\n return value.trim().replace(/^:+|:+$/g, \"\");\n}\n\nexport function slackTimestampToMillis(value: string): number {\n return Math.round(Number.parseFloat(value) * 1000);\n}\n",
|
|
8
8
|
"import type { ChannelUserMention } from \"@/channels/message-references\";\nimport type {\n ChannelReplyContext,\n ChannelThreadContextEntry,\n InboundChannelMessage,\n} from \"@/channels/types\";\n\nconst SLACK_USER_MENTION_PATTERN = /<@([A-Z0-9]+)(?:\\|[^>]*)?>/g;\nconst MAX_SLACK_DISPLAY_NAME_LENGTH = 80;\n\ninterface SlackUserMentionToken {\n start: number;\n end: number;\n userId: string;\n}\n\ntype ResolveSlackUserName = (userId: string) => Promise<string | undefined>;\n\nfunction escapeRegExp(text: string): string {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nexport function stripSlackBotMention(\n text: string,\n botUserId: string | null | undefined,\n): string {\n if (!botUserId) return text.trim();\n const botMentionPattern = new RegExp(\n `^\\\\s*<@${escapeRegExp(botUserId)}(?:\\\\|[^>]*)?>`,\n );\n return text.replace(botMentionPattern, \"\").trim();\n}\n\nexport function sanitizeSlackUserDisplayName(\n value: string | undefined,\n fallbackUserId: string,\n): string {\n const sanitized = (value ?? \"\")\n .replace(/[\\p{Cc}\\p{Cf}\\p{Zl}\\p{Zp}]+/gu, \" \")\n .replace(/\\s+/gu, \" \")\n .trim()\n .slice(0, MAX_SLACK_DISPLAY_NAME_LENGTH)\n .trim();\n return sanitized || fallbackUserId;\n}\n\nfunction extractSlackUserMentionTokens(\n text: string | undefined,\n): SlackUserMentionToken[] {\n if (!text?.includes(\"<@\")) return [];\n return Array.from(text.matchAll(SLACK_USER_MENTION_PATTERN), (match) => ({\n start: match.index,\n end: match.index + match[0].length,\n userId: match[1] ?? \"\",\n })).filter((mention) => mention.userId.length > 0);\n}\n\nfunction buildChannelUserMentions(\n text: string | undefined,\n displayNames: ReadonlyMap<string, string>,\n): ChannelUserMention[] | undefined {\n const mentions = extractSlackUserMentionTokens(text).map((mention) => ({\n ...mention,\n displayName: displayNames.get(mention.userId) ?? mention.userId,\n }));\n return mentions.length > 0 ? mentions : undefined;\n}\n\nfunction collectMentionUserIds(msg: InboundChannelMessage): string[] {\n const ids = new Set<string>();\n const collect = (text: string | undefined): void => {\n for (const mention of extractSlackUserMentionTokens(text)) {\n ids.add(mention.userId);\n }\n };\n collect(msg.text);\n collect(msg.replyContext?.text);\n collect(msg.threadContext?.starter?.text);\n for (const entry of msg.threadContext?.history ?? []) collect(entry.text);\n return [...ids];\n}\n\nfunction withResolvedReplyMentions(\n replyContext: ChannelReplyContext | undefined,\n displayNames: ReadonlyMap<string, string>,\n): ChannelReplyContext | undefined {\n if (!replyContext) return undefined;\n const userMentions = buildChannelUserMentions(\n replyContext.text,\n displayNames,\n );\n return userMentions ? { ...replyContext, userMentions } : replyContext;\n}\n\nfunction withResolvedEntryMentions(\n entry: ChannelThreadContextEntry,\n displayNames: ReadonlyMap<string, string>,\n): ChannelThreadContextEntry {\n const userMentions = buildChannelUserMentions(entry.text, displayNames);\n return userMentions ? { ...entry, userMentions } : entry;\n}\n\nexport async function resolveSlackUserMentionsInMessage(params: {\n message: InboundChannelMessage;\n resolveUserName: ResolveSlackUserName;\n}): Promise<InboundChannelMessage> {\n const { message } = params;\n const userIds = collectMentionUserIds(message);\n if (userIds.length === 0) return message;\n\n const resolvedNames = await Promise.all(\n userIds.map(async (userId) => {\n try {\n const name = await params.resolveUserName(userId);\n return [userId, sanitizeSlackUserDisplayName(name, userId)] as const;\n } catch {\n return [userId, userId] as const;\n }\n }),\n );\n const displayNames = new Map(resolvedNames);\n const userMentions = buildChannelUserMentions(message.text, displayNames);\n const replyContext = withResolvedReplyMentions(\n message.replyContext,\n displayNames,\n );\n const starter = message.threadContext?.starter\n ? withResolvedEntryMentions(message.threadContext.starter, displayNames)\n : undefined;\n const history = message.threadContext?.history?.map((entry) =>\n withResolvedEntryMentions(entry, displayNames),\n );\n\n return {\n ...message,\n ...(userMentions ? { userMentions } : {}),\n ...(replyContext ? { replyContext } : {}),\n ...(message.threadContext\n ? {\n threadContext: {\n ...message.threadContext,\n ...(starter ? { starter } : {}),\n ...(history ? { history } : {}),\n },\n }\n : {}),\n };\n}\n",
|
|
9
9
|
"import {\n firstNonEmptyString,\n isNonEmptyString,\n resolveSlackChatType,\n} from \"./public-utils\";\nimport { stripSlackBotMention } from \"./user-mentions\";\n\nconst IGNORED_SLACK_MESSAGE_SUBTYPES = new Set([\n \"assistant_app_thread\",\n \"channel_archive\",\n \"channel_convert_to_private\",\n \"channel_convert_to_public\",\n \"channel_join\",\n \"channel_leave\",\n \"channel_name\",\n \"channel_posting_permissions\",\n \"channel_purpose\",\n \"channel_topic\",\n \"channel_unarchive\",\n \"document_mention\",\n \"ekm_access_denied\",\n \"file_comment\",\n \"group_archive\",\n \"group_join\",\n \"group_leave\",\n \"group_name\",\n \"group_purpose\",\n \"group_topic\",\n \"group_unarchive\",\n \"pinned_item\",\n \"reminder_add\",\n \"unpinned_item\",\n]);\n\nconst WRAPPER_SLACK_MESSAGE_SUBTYPES = new Set([\n \"message_changed\",\n \"message_deleted\",\n \"message_replied\",\n]);\n\nexport interface SlackInboundMessageEventLike {\n channel?: unknown;\n user?: unknown;\n bot_id?: unknown;\n ts?: unknown;\n text?: unknown;\n thread_ts?: unknown;\n subtype?: unknown;\n hidden?: boolean;\n message?: unknown;\n}\n\nexport interface SlackAppMentionEventLike {\n channel?: unknown;\n user?: unknown;\n bot_id?: unknown;\n ts?: unknown;\n text?: unknown;\n thread_ts?: unknown;\n}\n\nexport interface SlackReactionEventLike {\n user?: unknown;\n item_user?: unknown;\n reaction?: unknown;\n event_ts?: unknown;\n item?: unknown;\n}\n\nexport interface ResolveSlackMessageIngressPolicyParams {\n message: SlackInboundMessageEventLike;\n botUserId?: string | null;\n isAgentThread?: boolean;\n appMentionEventWillHandleMentions?: boolean;\n}\n\nexport interface ResolveSlackAppMentionIngressPolicyParams {\n event: SlackAppMentionEventLike;\n botUserId?: string | null;\n}\n\nexport interface ResolveSlackReactionIngressPolicyParams {\n event: SlackReactionEventLike;\n action: \"added\" | \"removed\";\n botUserId?: string | null;\n mentionOnlyChannels?: readonly string[];\n threadId?: string | null;\n}\n\nexport interface SlackMessageIngressAccepted {\n shouldRoute: true;\n channelId: string;\n senderId: string;\n senderUserId?: string;\n senderBotId?: string;\n messageId: string;\n threadId: string | null;\n chatType: \"direct\" | \"channel\";\n text: string;\n rawText: string;\n wasMentioned: boolean;\n effectiveMention: boolean;\n isAgentThread: boolean;\n routedBy: \"mention\" | \"dm\" | \"thread\";\n}\n\nexport interface SlackAppMentionIngressAccepted {\n shouldRoute: true;\n channelId: string;\n senderId: string;\n senderUserId?: string;\n senderBotId?: string;\n messageId: string;\n threadId: string;\n chatType: \"channel\";\n text: string;\n rawText: string;\n wasMentioned: true;\n effectiveMention: true;\n isAgentThread: false;\n routedBy: \"mention\";\n}\n\nexport interface SlackReactionIngressAccepted {\n shouldRoute: true;\n channelId: string;\n senderId: string;\n messageId: string;\n threadId: string | null;\n chatType: \"direct\" | \"channel\";\n text: string;\n reaction: {\n action: \"added\" | \"removed\";\n emoji: string;\n targetMessageId: string;\n targetSenderId?: string;\n };\n}\n\nexport type SlackIngressIgnoreReason =\n | \"missing_channel\"\n | \"missing_sender\"\n | \"missing_timestamp\"\n | \"hidden_message\"\n | \"ignored_subtype\"\n | \"wrapper_message\"\n | \"top_level_channel_message\"\n | \"handled_by_app_mention\"\n | \"invalid_reaction_item\"\n | \"missing_reaction\"\n | \"own_bot_reaction\"\n | \"mention_only_channel\";\n\nexport interface SlackIngressIgnored {\n shouldRoute: false;\n reason: SlackIngressIgnoreReason;\n}\n\nexport type SlackMessageIngressPolicy =\n | SlackMessageIngressAccepted\n | SlackIngressIgnored;\n\nexport type SlackAppMentionIngressPolicy =\n | SlackAppMentionIngressAccepted\n | SlackIngressIgnored;\n\nexport type SlackReactionIngressPolicy =\n | SlackReactionIngressAccepted\n | SlackIngressIgnored;\n\nexport function isSlackMentionOnlyChannel(\n channelId: string,\n mentionOnlyChannels: readonly string[] | undefined,\n): boolean {\n return mentionOnlyChannels?.includes(channelId) === true;\n}\n\nfunction hasRecordValue(value: unknown): boolean {\n return value !== null && typeof value === \"object\";\n}\n\nfunction hasSlackMention(\n text: string,\n userId: string | null | undefined,\n): boolean {\n return (\n isNonEmptyString(text) &&\n isNonEmptyString(userId) &&\n (text.includes(`<@${userId}>`) || text.includes(`<@${userId}|`))\n );\n}\n\nfunction isBotAuthoredMessage(message: SlackInboundMessageEventLike): boolean {\n return isNonEmptyString(message.bot_id) || message.subtype === \"bot_message\";\n}\n\nfunction resolveMessageSubtypeIgnoreReason(\n message: SlackInboundMessageEventLike,\n): SlackIngressIgnoreReason | null {\n const subtype = isNonEmptyString(message.subtype) ? message.subtype : null;\n if (!subtype) {\n return null;\n }\n if (IGNORED_SLACK_MESSAGE_SUBTYPES.has(subtype)) {\n return \"ignored_subtype\";\n }\n if (\n WRAPPER_SLACK_MESSAGE_SUBTYPES.has(subtype) &&\n hasRecordValue(message.message)\n ) {\n return \"wrapper_message\";\n }\n return null;\n}\n\nexport function isProcessableSlackInboundMessage(\n message: SlackInboundMessageEventLike,\n): boolean {\n return resolveSlackMessageIngressPolicy({ message }).shouldRoute;\n}\n\nexport function shouldSkipSlackMessageByLastSeen(params: {\n lastSeenMessageTs?: string | null;\n messageTs: string;\n}): boolean {\n return Boolean(\n params.lastSeenMessageTs && params.lastSeenMessageTs >= params.messageTs,\n );\n}\n\nexport function resolveSlackMessageIngressPolicy(\n params: ResolveSlackMessageIngressPolicyParams,\n): SlackMessageIngressPolicy {\n const { message } = params;\n if (!isNonEmptyString(message.channel)) {\n return { shouldRoute: false, reason: \"missing_channel\" };\n }\n const senderId = firstNonEmptyString(message.user, message.bot_id);\n if (!senderId) {\n return { shouldRoute: false, reason: \"missing_sender\" };\n }\n if (!isNonEmptyString(message.ts)) {\n return { shouldRoute: false, reason: \"missing_timestamp\" };\n }\n if (message.hidden === true) {\n return { shouldRoute: false, reason: \"hidden_message\" };\n }\n\n const subtypeIgnoreReason = resolveMessageSubtypeIgnoreReason(message);\n if (subtypeIgnoreReason) {\n return { shouldRoute: false, reason: subtypeIgnoreReason };\n }\n\n const chatType = resolveSlackChatType(message.channel);\n const threadId =\n chatType === \"direct\"\n ? (firstNonEmptyString(message.thread_ts) ?? null)\n : (firstNonEmptyString(message.thread_ts, message.ts) ?? null);\n\n if (chatType === \"channel\" && !isNonEmptyString(message.thread_ts)) {\n return { shouldRoute: false, reason: \"top_level_channel_message\" };\n }\n\n const rawText = isNonEmptyString(message.text) ? message.text : \"\";\n const wasMentioned = hasSlackMention(rawText, params.botUserId);\n if (\n chatType === \"channel\" &&\n wasMentioned &&\n params.appMentionEventWillHandleMentions === true\n ) {\n return { shouldRoute: false, reason: \"handled_by_app_mention\" };\n }\n const isAgentThread = params.isAgentThread === true;\n const effectiveMention = isBotAuthoredMessage(message)\n ? wasMentioned\n : wasMentioned || isAgentThread;\n\n return {\n shouldRoute: true,\n channelId: message.channel,\n senderId,\n ...(isNonEmptyString(message.user) ? { senderUserId: message.user } : {}),\n ...(isNonEmptyString(message.bot_id)\n ? { senderBotId: message.bot_id }\n : {}),\n messageId: message.ts,\n threadId,\n chatType,\n text: wasMentioned\n ? stripSlackBotMention(rawText, params.botUserId)\n : rawText,\n rawText,\n wasMentioned,\n effectiveMention,\n isAgentThread,\n routedBy: wasMentioned\n ? \"mention\"\n : chatType === \"direct\"\n ? \"dm\"\n : \"thread\",\n };\n}\n\nexport function resolveSlackAppMentionIngressPolicy(\n params: ResolveSlackAppMentionIngressPolicyParams,\n): SlackAppMentionIngressPolicy {\n const { event } = params;\n if (!isNonEmptyString(event.channel)) {\n return { shouldRoute: false, reason: \"missing_channel\" };\n }\n const senderId = firstNonEmptyString(event.user, event.bot_id);\n if (!senderId) {\n return { shouldRoute: false, reason: \"missing_sender\" };\n }\n if (!isNonEmptyString(event.ts)) {\n return { shouldRoute: false, reason: \"missing_timestamp\" };\n }\n\n const rawText = isNonEmptyString(event.text) ? event.text : \"\";\n return {\n shouldRoute: true,\n channelId: event.channel,\n senderId,\n ...(isNonEmptyString(event.user) ? { senderUserId: event.user } : {}),\n ...(isNonEmptyString(event.bot_id) ? { senderBotId: event.bot_id } : {}),\n messageId: event.ts,\n threadId: firstNonEmptyString(event.thread_ts, event.ts) ?? event.ts,\n chatType: \"channel\",\n text: stripSlackBotMention(rawText, params.botUserId),\n rawText,\n wasMentioned: true,\n effectiveMention: true,\n isAgentThread: false,\n routedBy: \"mention\",\n };\n}\n\nexport function resolveSlackReactionIngressPolicy(\n params: ResolveSlackReactionIngressPolicyParams,\n): SlackReactionIngressPolicy {\n const item = hasRecordValue(params.event.item)\n ? (params.event.item as Record<string, unknown>)\n : null;\n if (item?.type !== \"message\") {\n return { shouldRoute: false, reason: \"invalid_reaction_item\" };\n }\n if (!isNonEmptyString(item.channel)) {\n return { shouldRoute: false, reason: \"missing_channel\" };\n }\n if (!isNonEmptyString(params.event.user)) {\n return { shouldRoute: false, reason: \"missing_sender\" };\n }\n if (!isNonEmptyString(item.ts)) {\n return { shouldRoute: false, reason: \"missing_timestamp\" };\n }\n if (!isNonEmptyString(params.event.reaction)) {\n return { shouldRoute: false, reason: \"missing_reaction\" };\n }\n if (params.event.user === params.botUserId) {\n return { shouldRoute: false, reason: \"own_bot_reaction\" };\n }\n\n const chatType = resolveSlackChatType(item.channel);\n if (\n chatType === \"channel\" &&\n isSlackMentionOnlyChannel(item.channel, params.mentionOnlyChannels)\n ) {\n return { shouldRoute: false, reason: \"mention_only_channel\" };\n }\n\n const targetMessageId = item.ts;\n const threadId =\n params.threadId !== undefined\n ? params.threadId\n : chatType === \"channel\"\n ? targetMessageId\n : null;\n const eventTimestamp =\n firstNonEmptyString(params.event.event_ts, targetMessageId) ??\n targetMessageId;\n const reaction = {\n action: params.action,\n emoji: params.event.reaction,\n targetMessageId,\n ...(isNonEmptyString(params.event.item_user)\n ? { targetSenderId: params.event.item_user }\n : {}),\n };\n return {\n shouldRoute: true,\n channelId: item.channel,\n senderId: params.event.user,\n messageId: eventTimestamp,\n threadId,\n chatType,\n text: `Slack reaction ${params.action}: :${params.event.reaction}:`,\n reaction,\n };\n}\n",
|
|
10
|
-
"import type {\n ChannelMessageActionAdapter,\n ChannelMessageActionContext,\n} from \"@/channels/plugin-types\";\n\nexport interface CreateSlackMessageActionAdapterOptions {\n /** Expose reaction actions when the injected transport supports them. */\n react?: boolean;\n /** Expose local-path uploads when the injected transport can read them. */\n uploadFile?: boolean;\n /** Host-owned proactive target resolver, when proactive sends are supported. */\n resolveMessageTarget?: ChannelMessageActionAdapter[\"resolveMessageTarget\"];\n /** Host-owned attachment materialization, when download-file is supported. */\n downloadFile?: (context: ChannelMessageActionContext) => Promise<string>;\n}\n\nasync function sendSlackMessage(\n context: ChannelMessageActionContext,\n): Promise<string> {\n const { request, route, adapter, formatText } = context;\n const text = request.message ?? \"\";\n if (text.trim().length === 0 && !request.mediaPath) {\n return \"Error: Slack send requires message or media.\";\n }\n\n const isDirect =\n route.chatType === \"direct\" || request.chatId.startsWith(\"D\");\n const formatted = formatText(text);\n const result = await adapter.sendMessage({\n channel: \"slack\",\n accountId: route.accountId,\n chatId: request.chatId,\n text: formatted.text,\n replyToMessageId: isDirect ? undefined : request.replyToMessageId,\n threadId: isDirect\n ? (request.threadId ?? route.threadId ?? null)\n : request.replyToMessageId\n ? null\n : (request.threadId ?? route.threadId ?? null),\n mediaPath: request.mediaPath,\n fileName: request.filename,\n title: request.title,\n parseMode: formatted.parseMode,\n agentId: route.agentId,\n conversationId: route.conversationId,\n });\n return request.mediaPath\n ? `Attachment sent to slack (message_id: ${result.messageId})`\n : `Message sent to slack (message_id: ${result.messageId})`;\n}\n\nasync function reactInSlack(\n context: ChannelMessageActionContext,\n): Promise<string> {\n const { request, route, adapter } = context;\n if (!request.emoji?.trim()) return \"Error: Slack react requires emoji.\";\n if (!request.messageId?.trim()) {\n return \"Error: Slack react requires messageId.\";\n }\n\n const result = await adapter.sendMessage({\n channel: \"slack\",\n accountId: route.accountId,\n chatId: request.chatId,\n text: \"\",\n targetMessageId: request.messageId,\n reaction: request.emoji,\n removeReaction: request.remove,\n threadId: request.threadId ?? route.threadId ?? null,\n });\n return request.remove\n ? `Reaction removed on slack (message_id: ${result.messageId})`\n : `Reaction added on slack (message_id: ${result.messageId})`;\n}\n\n/**\n * Build canonical Slack MessageChannel actions around a host-owned transport.\n * Capabilities are explicit so remote gateways never advertise local-path or\n * attachment behavior they cannot execute.\n */\nexport function createSlackMessageActionAdapter(\n options: CreateSlackMessageActionAdapterOptions = {},\n): ChannelMessageActionAdapter {\n const actions = [\n \"send\",\n ...(options.react ? [\"react\"] : []),\n ...(options.uploadFile ? [\"upload-file\"] : []),\n ...(options.downloadFile ? [\"download-file\"] : []),\n ];\n return {\n describeMessageTool() {\n const properties: Record<string, unknown> = {};\n if (options.downloadFile) {\n properties.attachmentId = {\n type: \"string\",\n description:\n \"Slack attachment id for action='download-file'. Copy attachment_id from the channel notification.\",\n };\n }\n if (options.react || options.downloadFile) {\n properties.messageId = {\n type: \"string\",\n description: options.downloadFile\n ? \"Target Slack message id for action='react', or the source message id containing attachmentId for action='download-file'.\"\n : \"Target Slack message id for action='react'.\",\n };\n }\n return {\n actions: [...actions],\n ...(Object.keys(properties).length > 0\n ? { schema: { properties } }\n : {}),\n };\n },\n ...(options.resolveMessageTarget\n ? { resolveMessageTarget: options.resolveMessageTarget }\n : {}),\n async handleAction(context) {\n switch (context.request.action) {\n case \"send\":\n return await sendSlackMessage(context);\n case \"upload-file\":\n if (!options.uploadFile) {\n return 'Error: Action \"upload-file\" is not supported on slack.';\n }\n if (!context.request.mediaPath?.trim()) {\n return \"Error: Slack upload-file requires media.\";\n }\n return await sendSlackMessage(context);\n case \"react\":\n return options.react\n ? await reactInSlack(context)\n : 'Error: Action \"react\" is not supported on slack.';\n case \"download-file\":\n return options.downloadFile\n ? await options.downloadFile(context)\n : 'Error: Action \"download-file\" is not supported on slack.';\n default:\n return `Error: Action \"${context.request.action}\" is not supported on slack.`;\n }\n },\n };\n}\n",
|
|
10
|
+
"import type {\n ChannelMessageActionAdapter,\n ChannelMessageActionContext,\n} from \"@/channels/plugin-types\";\n\nexport interface CreateSlackMessageActionAdapterOptions {\n /** Expose reaction actions when the injected transport supports them. */\n react?: boolean;\n /** Expose workspace custom emoji discovery when the transport supports it. */\n listCustomEmojis?: boolean;\n /** Expose local-path uploads when the injected transport can read them. */\n uploadFile?: boolean;\n /** Host-owned proactive target resolver, when proactive sends are supported. */\n resolveMessageTarget?: ChannelMessageActionAdapter[\"resolveMessageTarget\"];\n /** Host-owned attachment materialization, when download-file is supported. */\n downloadFile?: (context: ChannelMessageActionContext) => Promise<string>;\n}\n\nasync function sendSlackMessage(\n context: ChannelMessageActionContext,\n): Promise<string> {\n const { request, route, adapter, formatText } = context;\n const text = request.message ?? \"\";\n if (text.trim().length === 0 && !request.mediaPath) {\n return \"Error: Slack send requires message or media.\";\n }\n\n const isDirect =\n route.chatType === \"direct\" || request.chatId.startsWith(\"D\");\n const formatted = formatText(text);\n const result = await adapter.sendMessage({\n channel: \"slack\",\n accountId: route.accountId,\n chatId: request.chatId,\n text: formatted.text,\n replyToMessageId: isDirect ? undefined : request.replyToMessageId,\n threadId: isDirect\n ? (request.threadId ?? route.threadId ?? null)\n : request.replyToMessageId\n ? null\n : (request.threadId ?? route.threadId ?? null),\n mediaPath: request.mediaPath,\n fileName: request.filename,\n title: request.title,\n parseMode: formatted.parseMode,\n agentId: route.agentId,\n conversationId: route.conversationId,\n });\n return request.mediaPath\n ? `Attachment sent to slack (message_id: ${result.messageId})`\n : `Message sent to slack (message_id: ${result.messageId})`;\n}\n\nasync function reactInSlack(\n context: ChannelMessageActionContext,\n): Promise<string> {\n const { request, route, adapter } = context;\n if (!request.emoji?.trim()) return \"Error: Slack react requires emoji.\";\n if (!request.messageId?.trim()) {\n return \"Error: Slack react requires messageId.\";\n }\n\n const result = await adapter.sendMessage({\n channel: \"slack\",\n accountId: route.accountId,\n chatId: request.chatId,\n text: \"\",\n targetMessageId: request.messageId,\n reaction: request.emoji,\n removeReaction: request.remove,\n threadId: request.threadId ?? route.threadId ?? null,\n });\n return request.remove\n ? `Reaction removed on slack (message_id: ${result.messageId})`\n : `Reaction added on slack (message_id: ${result.messageId})`;\n}\n\nasync function listSlackCustomEmojis(\n context: ChannelMessageActionContext,\n): Promise<string> {\n const listCustomEmojis = context.adapter.listCustomEmojis;\n if (typeof listCustomEmojis !== \"function\") {\n return \"Error: Running Slack adapter does not support custom emoji discovery.\";\n }\n try {\n const names = await listCustomEmojis.call(context.adapter);\n if (names.length === 0) {\n return \"This Slack workspace has no custom emoji available to the app.\";\n }\n return `Available custom Slack emoji (${names.length}): ${names.map((name) => `:${name}:`).join(\", \")}`;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return `Error: Could not list custom Slack emoji. ${message}`;\n }\n}\n\n/**\n * Build canonical Slack MessageChannel actions around a host-owned transport.\n * Capabilities are explicit so remote gateways never advertise local-path or\n * attachment behavior they cannot execute.\n */\nexport function createSlackMessageActionAdapter(\n options: CreateSlackMessageActionAdapterOptions = {},\n): ChannelMessageActionAdapter {\n const actions = [\n \"send\",\n ...(options.react ? [\"react\"] : []),\n ...(options.listCustomEmojis ? [\"list-custom-emojis\"] : []),\n ...(options.uploadFile ? [\"upload-file\"] : []),\n ...(options.downloadFile ? [\"download-file\"] : []),\n ];\n return {\n describeMessageTool() {\n const properties: Record<string, unknown> = {};\n if (options.downloadFile) {\n properties.attachmentId = {\n type: \"string\",\n description:\n \"Slack attachment id for action='download-file'. Copy attachment_id from the channel notification.\",\n };\n }\n if (options.react || options.downloadFile) {\n properties.messageId = {\n type: \"string\",\n description: options.downloadFile\n ? \"Target Slack message id for action='react', or the source message id containing attachmentId for action='download-file'.\"\n : \"Target Slack message id for action='react'.\",\n };\n }\n return {\n actions: [...actions],\n ...(Object.keys(properties).length > 0\n ? { schema: { properties } }\n : {}),\n };\n },\n ...(options.resolveMessageTarget\n ? { resolveMessageTarget: options.resolveMessageTarget }\n : {}),\n async handleAction(context) {\n switch (context.request.action) {\n case \"send\":\n return await sendSlackMessage(context);\n case \"upload-file\":\n if (!options.uploadFile) {\n return 'Error: Action \"upload-file\" is not supported on slack.';\n }\n if (!context.request.mediaPath?.trim()) {\n return \"Error: Slack upload-file requires media.\";\n }\n return await sendSlackMessage(context);\n case \"react\":\n return options.react\n ? await reactInSlack(context)\n : 'Error: Action \"react\" is not supported on slack.';\n case \"list-custom-emojis\":\n return options.listCustomEmojis\n ? await listSlackCustomEmojis(context)\n : 'Error: Action \"list-custom-emojis\" is not supported on slack.';\n case \"download-file\":\n return options.downloadFile\n ? await options.downloadFile(context)\n : 'Error: Action \"download-file\" is not supported on slack.';\n default:\n return `Error: Action \"${context.request.action}\" is not supported on slack.`;\n }\n },\n };\n}\n",
|
|
11
11
|
"/**\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",
|
|
12
12
|
"import type { ChannelTurnSource } from \"@/channels/types\";\nimport type {\n SlackAppConstructor,\n SlackBlock,\n SlackBoltModule,\n} from \"./internal-types\";\n\ntype Constructor = abstract new (...args: never[]) => unknown;\n\nfunction isConstructorFunction<T extends Constructor>(\n value: unknown,\n): value is T {\n return typeof value === \"function\";\n}\n\nfunction resolveSlackAppModule(value: unknown): SlackAppConstructor | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n const app = Reflect.get(value, \"App\");\n return isConstructorFunction<SlackAppConstructor>(app) ? app : null;\n}\n\nexport function resolveSlackAppConstructor(\n mod: SlackBoltModule,\n): SlackAppConstructor {\n const defaultExport =\n mod && typeof mod === \"object\" ? Reflect.get(mod, \"default\") : undefined;\n const nestedDefault =\n defaultExport && typeof defaultExport === \"object\"\n ? Reflect.get(defaultExport, \"default\")\n : undefined;\n const App =\n resolveSlackAppModule(mod) ??\n resolveSlackAppModule(defaultExport) ??\n resolveSlackAppModule(nestedDefault) ??\n (isConstructorFunction<SlackAppConstructor>(defaultExport)\n ? defaultExport\n : null);\n\n if (!App) {\n throw new Error(\n 'Installed Slack runtime did not export constructor \"App\".',\n );\n }\n return App;\n}\n\nexport function isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n\nexport function firstNonEmptyString(...values: unknown[]): string | undefined {\n return values.find(isNonEmptyString);\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 resolveSlackSenderTeamId(value: unknown): string | undefined {\n const record = asRecord(value);\n return record\n ? firstNonEmptyString(record.user_team, record.team_id, record.team)\n : undefined;\n}\n\nconst IGNORED_SLACK_MESSAGE_SUBTYPES = new Set([\n \"assistant_app_thread\",\n \"channel_archive\",\n \"channel_convert_to_private\",\n \"channel_convert_to_public\",\n \"channel_join\",\n \"channel_leave\",\n \"channel_name\",\n \"channel_posting_permissions\",\n \"channel_purpose\",\n \"channel_topic\",\n \"channel_unarchive\",\n \"document_mention\",\n \"ekm_access_denied\",\n \"file_comment\",\n \"group_archive\",\n \"group_join\",\n \"group_leave\",\n \"group_name\",\n \"group_purpose\",\n \"group_topic\",\n \"group_unarchive\",\n \"pinned_item\",\n \"reminder_add\",\n \"unpinned_item\",\n]);\n\nconst WRAPPER_SLACK_MESSAGE_SUBTYPES = new Set([\n \"message_changed\",\n \"message_deleted\",\n \"message_replied\",\n]);\n\nexport type SlackProcessableInboundMessage = Record<string, unknown> & {\n user?: string;\n bot_id?: string;\n ts: string;\n};\n\nexport function isProcessableSlackInboundMessage(\n rawMessage: Record<string, unknown>,\n): rawMessage is SlackProcessableInboundMessage {\n if (\n (!isNonEmptyString(rawMessage.user) &&\n !isNonEmptyString(rawMessage.bot_id)) ||\n !isNonEmptyString(rawMessage.ts) ||\n rawMessage.hidden === true\n ) {\n return false;\n }\n const subtype = isNonEmptyString(rawMessage.subtype)\n ? rawMessage.subtype\n : null;\n if (!subtype) {\n return true;\n }\n if (IGNORED_SLACK_MESSAGE_SUBTYPES.has(subtype)) {\n return false;\n }\n return !(\n WRAPPER_SLACK_MESSAGE_SUBTYPES.has(subtype) &&\n asRecord(rawMessage.message) !== null\n );\n}\n\nexport function slackTimestampToMillis(timestamp: string): number {\n return Math.round(Number.parseFloat(timestamp) * 1000);\n}\n\nexport function resolveSlackChatType(chatId: string): \"direct\" | \"channel\" {\n return chatId.startsWith(\"D\") ? \"direct\" : \"channel\";\n}\n\nexport function resolveSlackOutboundThreadTs(params: {\n chatId: string;\n threadId?: string | null;\n replyToMessageId?: string | null;\n}): string | undefined {\n if (resolveSlackChatType(params.chatId) === \"direct\") {\n return firstNonEmptyString(params.threadId);\n }\n return firstNonEmptyString(params.threadId, params.replyToMessageId);\n}\n\nexport function asSlackBlocks(\n blocks: unknown[] | undefined,\n): SlackBlock[] | undefined {\n return Array.isArray(blocks) ? (blocks as SlackBlock[]) : undefined;\n}\n\nexport function getSlackActionRecord(\n action: unknown,\n body: unknown,\n): Record<string, unknown> | null {\n const directAction = asRecord(action);\n if (directAction) {\n return directAction;\n }\n const actions = asRecord(body)?.actions;\n return Array.isArray(actions) ? asRecord(actions[0]) : null;\n}\n\nexport function resolveSlackActionChannelId(body: unknown): string | null {\n const bodyRecord = asRecord(body);\n const channel = asRecord(bodyRecord?.channel);\n const container = asRecord(bodyRecord?.container);\n return firstNonEmptyString(channel?.id, container?.channel_id) ?? null;\n}\n\nexport function resolveSlackActionThreadId(body: unknown): string | null {\n const bodyRecord = asRecord(body);\n const container = asRecord(bodyRecord?.container);\n const message = asRecord(bodyRecord?.message);\n return firstNonEmptyString(container?.thread_ts, message?.thread_ts) ?? null;\n}\n\nexport function resolveSlackActionMessageId(body: unknown): string | undefined {\n const bodyRecord = asRecord(body);\n const container = asRecord(bodyRecord?.container);\n const message = asRecord(bodyRecord?.message);\n return firstNonEmptyString(container?.message_ts, message?.ts);\n}\n\nexport function resolveSlackActionUser(body: unknown): {\n id: string | null;\n name?: string;\n teamId?: string;\n} {\n const user = asRecord(asRecord(body)?.user);\n return {\n id: firstNonEmptyString(user?.id) ?? null,\n name: firstNonEmptyString(user?.name, user?.username, user?.id),\n teamId: firstNonEmptyString(user?.team_id),\n };\n}\n\nexport function resolveSlackSourceThreadTs(\n source: ChannelTurnSource,\n): string | undefined {\n if (\n source.chatType === \"direct\" ||\n resolveSlackChatType(source.chatId) === \"direct\"\n ) {\n return firstNonEmptyString(source.threadId);\n }\n return firstNonEmptyString(source.threadId, source.messageId);\n}\n\nexport function resolveSlackProgressThreadTs(\n source: ChannelTurnSource,\n): string | undefined {\n if (\n source.chatType === \"direct\" ||\n resolveSlackChatType(source.chatId) === \"direct\"\n ) {\n return firstNonEmptyString(source.threadId, source.messageId);\n }\n return resolveSlackSourceThreadTs(source);\n}\n\nexport function normalizeSlackReactionName(value: string): string {\n return value.trim().replace(/^:+|:+$/g, \"\");\n}\n\nexport function resolveSlackUserDisplayName(\n userInfo: unknown,\n): string | undefined {\n const user = asRecord(asRecord(userInfo)?.user);\n const profile = asRecord(user?.profile);\n return firstNonEmptyString(\n profile?.display_name,\n profile?.real_name,\n user?.real_name,\n user?.name,\n );\n}\n\nexport function hasSlackMention(text: string, userId: string | null): boolean {\n return (\n isNonEmptyString(text) &&\n isNonEmptyString(userId) &&\n (text.includes(`<@${userId}>`) || text.includes(`<@${userId}|`))\n );\n}\n\nexport function isSlackFlatChannelThreadOpener(\n source: ChannelTurnSource,\n): boolean {\n return (\n source.chatType === \"channel\" &&\n isNonEmptyString(source.messageId) &&\n (!isNonEmptyString(source.threadId) || source.threadId === source.messageId)\n );\n}\n",
|
|
13
13
|
"import {\n buildModelEntriesByHandle,\n type ChannelModelListEntry,\n getFallbackModelEntries,\n resolveModelHandles,\n} from \"@/channels/command-runtime-executor\";\nimport type { ChannelModelPickerData } from \"@/channels/types\";\nimport { asRecord, firstNonEmptyString, getSlackActionRecord } from \"./utils\";\n\nconst SLACK_MODEL_PICKER_OPTION_LIMIT = 100;\nconst SLACK_MODEL_OPTION_TEXT_LIMIT = 75;\nconst SLACK_MODEL_OPTION_VALUE_LIMIT = 75;\n\nexport const SLACK_MODEL_SELECT_ACTION_ID = \"letta_channel_model_select\";\n\nexport function resolveSlackSelectedModel(\n action: unknown,\n body: unknown,\n): string | null {\n const actionRecord = getSlackActionRecord(action, body);\n const selectedOption = asRecord(actionRecord?.selected_option);\n return (\n firstNonEmptyString(selectedOption?.value, actionRecord?.value) ?? null\n );\n}\n\ntype SlackModelOption = {\n text: { type: \"plain_text\"; text: string; emoji?: boolean };\n value: string;\n description?: { type: \"plain_text\"; text: string; emoji?: boolean };\n};\n\nfunction escapeSlackMrkdwn(text: string): string {\n return text\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\nfunction truncateSlackPlainText(text: string, limit: number): string {\n if (text.length <= limit) {\n return text;\n }\n return `${text.slice(0, Math.max(0, limit - 3)).trimEnd()}...`;\n}\n\nfunction getSlackModelOptionValue(entry: ChannelModelListEntry): string | null {\n const candidates = [entry.id, entry.handle].filter(\n (value): value is string => typeof value === \"string\" && value.length > 0,\n );\n return (\n candidates.find(\n (value) => value.length <= SLACK_MODEL_OPTION_VALUE_LIMIT,\n ) ?? null\n );\n}\n\nfunction buildSlackModelOption(\n entry: ChannelModelListEntry,\n): SlackModelOption | null {\n const value = getSlackModelOptionValue(entry);\n if (!value) {\n return null;\n }\n\n const labelText =\n entry.handle === entry.label\n ? entry.label\n : `${entry.label} - ${entry.handle}`;\n const option: SlackModelOption = {\n text: {\n type: \"plain_text\",\n text: truncateSlackPlainText(labelText, SLACK_MODEL_OPTION_TEXT_LIMIT),\n emoji: true,\n },\n value,\n };\n if (entry.description) {\n option.description = {\n type: \"plain_text\",\n text: truncateSlackPlainText(\n entry.description,\n SLACK_MODEL_OPTION_TEXT_LIMIT,\n ),\n emoji: true,\n };\n }\n return option;\n}\n\n/**\n * Renders generic channel model-picker data as Slack Block Kit blocks.\n * Slack-specific rendering lives here so the shared channel/listener layers\n * stay vendor-neutral.\n */\nexport function buildSlackModelPickerBlocks(\n params: ChannelModelPickerData,\n): unknown[] | undefined {\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 const optionEntries = [...recentEntries, ...availableEntries];\n const options: SlackModelOption[] = [];\n const seenValues = new Set<string>();\n for (const entry of optionEntries) {\n const option = buildSlackModelOption(entry);\n if (!option || seenValues.has(option.value)) {\n continue;\n }\n seenValues.add(option.value);\n options.push(option);\n if (options.length >= SLACK_MODEL_PICKER_OPTION_LIMIT) {\n break;\n }\n }\n\n if (options.length === 0) {\n return undefined;\n }\n\n const currentScope =\n params.current.scope === \"agent\" ? \"agent\" : \"conversation\";\n const currentHandleText = params.current.modelHandle\n ? `\\nHandle: ${escapeSlackMrkdwn(params.current.modelHandle)}`\n : \"\";\n const currentHandle = params.current.modelHandle;\n const initialOption = options.find((option) => {\n const entry = optionEntries.find(\n (candidate) =>\n candidate.id === option.value || candidate.handle === option.value,\n );\n return currentHandle\n ? entry?.handle === currentHandle || option.value === currentHandle\n : false;\n });\n\n return [\n {\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: `*Current ${currentScope} model:* ${escapeSlackMrkdwn(params.current.modelLabel)}${currentHandleText}`,\n },\n },\n {\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: \"Choose a model for this routed conversation:\",\n },\n },\n {\n type: \"actions\",\n elements: [\n {\n type: \"static_select\",\n action_id: SLACK_MODEL_SELECT_ACTION_ID,\n placeholder: {\n type: \"plain_text\",\n text: \"Select a model\",\n emoji: true,\n },\n options,\n ...(initialOption ? { initial_option: initialOption } : {}),\n },\n ],\n },\n {\n type: \"context\",\n elements: [\n {\n type: \"mrkdwn\",\n text: \"Need another handle? Mention the app with `@agent /model <handle-or-id>`.\",\n },\n ],\n },\n ];\n}\n",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"import type { OutboundChannelMessage } from \"@/channels/types\";\nimport {\n buildSlackChatFootnote,\n buildSlackReplyBlocksWithFootnote,\n} from \"./presentation\";\nimport {\n normalizeSlackReactionName,\n resolveSlackOutboundThreadTs,\n} from \"./public-utils\";\n\nexport interface SlackSenderPostMessageParams {\n channel: string;\n text: string;\n threadTs?: string;\n blocks?: unknown[];\n}\n\nexport interface SlackSenderPostMessageResult {\n messageId: string;\n}\n\nexport interface SlackSenderMessageResult {\n messageId: string;\n}\n\nexport interface SlackSenderReactionParams {\n channel: string;\n timestamp: string;\n name: string;\n}\n\nexport interface SlackSenderClient {\n postMessage(\n params: SlackSenderPostMessageParams,\n ): Promise<SlackSenderPostMessageResult>;\n addReaction?(params: SlackSenderReactionParams): Promise<void>;\n removeReaction?(params: SlackSenderReactionParams): Promise<void>;\n}\n\nexport interface SlackChannelSender {\n sendMessage(\n message: OutboundChannelMessage,\n ): Promise<SlackSenderMessageResult>;\n sendDirectReply(params: SlackDirectReplyParams): Promise<void>;\n}\n\nexport interface SlackDirectReplyParams {\n chatId: string;\n text: string;\n replyToMessageId?: string;\n threadId?: string | null;\n blocks?: unknown[];\n}\n\nexport interface CreateSlackChannelSenderParams {\n client: SlackSenderClient;\n}\n\nasync function sendSlackReaction(\n client: SlackSenderClient,\n message: OutboundChannelMessage,\n): Promise<SlackSenderMessageResult> {\n const targetMessageId = message.targetMessageId ?? message.replyToMessageId;\n if (!targetMessageId) {\n throw new Error(\n \"Slack reactions require message_id (or reply_to_message_id) to identify the target message.\",\n );\n }\n const name = normalizeSlackReactionName(message.reaction ?? \"\");\n if (!name) {\n throw new Error(\"Slack reaction emoji cannot be empty.\");\n }\n const params: SlackSenderReactionParams = {\n channel: message.chatId,\n timestamp: targetMessageId,\n name,\n };\n if (message.removeReaction) {\n if (!client.removeReaction) {\n throw new Error(\n \"Slack sender client does not support removing reactions.\",\n );\n }\n await client.removeReaction(params);\n } else {\n if (!client.addReaction) {\n throw new Error(\"Slack sender client does not support adding reactions.\");\n }\n await client.addReaction(params);\n }\n return { messageId: targetMessageId };\n}\n\nfunction buildSlackOutboundBlocks(\n message: OutboundChannelMessage,\n): unknown[] | undefined {\n if (!message.agentId || !message.conversationId) {\n return undefined;\n }\n\n const footnote = buildSlackChatFootnote({\n agentId: message.agentId,\n conversationId: message.conversationId,\n });\n if (!footnote) {\n return undefined;\n }\n\n return buildSlackReplyBlocksWithFootnote(message.text, footnote);\n}\n\nexport function createSlackChannelSender(\n params: CreateSlackChannelSenderParams,\n): SlackChannelSender {\n const { client } = params;\n return {\n async sendMessage(\n message: OutboundChannelMessage,\n ): Promise<SlackSenderMessageResult> {\n if (message.reaction) {\n return await sendSlackReaction(client, message);\n }\n const threadTs = resolveSlackOutboundThreadTs({\n chatId: message.chatId,\n threadId: message.threadId,\n replyToMessageId: message.replyToMessageId,\n });\n const blocks = buildSlackOutboundBlocks(message);\n return await client.postMessage({\n channel: message.chatId,\n text: message.text,\n ...(blocks ? { blocks } : {}),\n ...(threadTs ? { threadTs } : {}),\n });\n },\n\n async sendDirectReply(params: SlackDirectReplyParams): Promise<void> {\n const threadTs = resolveSlackOutboundThreadTs({\n chatId: params.chatId,\n threadId: params.threadId,\n replyToMessageId: params.replyToMessageId,\n });\n await client.postMessage({\n channel: params.chatId,\n text: params.text,\n ...(params.blocks ? { blocks: params.blocks } : {}),\n ...(threadTs ? { threadTs } : {}),\n });\n },\n };\n}\n",
|
|
21
21
|
"import type {\n ChannelTurnSource,\n OutboundChannelMessage,\n} from \"@/channels/types\";\nimport {\n firstNonEmptyString,\n isNonEmptyString,\n resolveSlackChatType,\n resolveSlackProgressThreadTs,\n resolveSlackSourceThreadTs,\n} from \"./public-utils\";\n\nconst SLACK_ASSISTANT_STATUS_KEEPALIVE_MS = 90_000;\n\nexport interface SlackStatusWriteClient {\n assistant?: {\n threads?: {\n setStatus?: (args: {\n channel_id: string;\n thread_ts: string;\n status: string;\n loading_messages?: string[];\n }) => Promise<unknown>;\n };\n };\n}\n\nexport type AgentConvSlackState = {\n isThinkingActive: boolean;\n thinkingText: string;\n typingFooterText: string;\n};\n\nexport type SlackStatusController = {\n getUniqueSources: (sources: ChannelTurnSource[]) => ChannelTurnSource[];\n getLifecycleErrorReplyKey: (source: ChannelTurnSource) => string | null;\n activate: (\n source: ChannelTurnSource,\n footerText: string,\n loadingText: string,\n ) => Promise<void>;\n deactivate: (source: ChannelTurnSource) => Promise<void>;\n clearStale: (source: ChannelTurnSource) => Promise<void>;\n markAutoCleared: (source: ChannelTurnSource) => void;\n markAutoClearedForMessage: (\n msg: Pick<\n OutboundChannelMessage,\n \"agentId\" | \"conversationId\" | \"chatId\" | \"threadId\" | \"replyToMessageId\"\n >,\n ) => void;\n activeSources: () => ChannelTurnSource[];\n clear: () => void;\n};\n\nexport function createSlackStatusController(params: {\n ensureApp: () => Promise<unknown>;\n ensureWriteClient: () => Promise<SlackStatusWriteClient>;\n resolveKnownThreadRoot: (messageId: string) => string;\n}): SlackStatusController {\n const stateByConversation = new Map<string, AgentConvSlackState>();\n const sourceByConversation = new Map<string, ChannelTurnSource>();\n const signatureByConversation = new Map<string, string>();\n const writePromiseByConversation = new Map<string, Promise<void>>();\n const keepaliveByConversation = new Map<\n string,\n ReturnType<typeof setTimeout>\n >();\n const clearedStaleReplyKeys = new Set<string>();\n\n function getConversationKey(source: ChannelTurnSource): string | null {\n return source.channel === \"slack\" &&\n isNonEmptyString(source.agentId) &&\n isNonEmptyString(source.conversationId)\n ? `${source.agentId}:${source.conversationId}`\n : null;\n }\n\n function getLifecycleReplyKey(source: ChannelTurnSource): string | null {\n if (source.channel !== \"slack\" || !isNonEmptyString(source.chatId)) {\n return null;\n }\n const replyToMessageId = resolveSlackProgressThreadTs(source);\n return isNonEmptyString(replyToMessageId)\n ? `${source.chatId}:${replyToMessageId}`\n : null;\n }\n\n function getLifecycleErrorReplyKey(source: ChannelTurnSource): string | null {\n if (source.channel !== \"slack\" || !isNonEmptyString(source.chatId)) {\n return null;\n }\n if (\n source.chatType === \"direct\" ||\n resolveSlackChatType(source.chatId) === \"direct\"\n ) {\n const replyToMessageId = resolveSlackSourceThreadTs(source);\n return isNonEmptyString(replyToMessageId)\n ? `${source.chatId}:${replyToMessageId}`\n : `${source.chatId}:direct`;\n }\n return getLifecycleReplyKey(source);\n }\n\n function getUniqueSources(sources: ChannelTurnSource[]): ChannelTurnSource[] {\n const seen = new Set<string>();\n const unique: ChannelTurnSource[] = [];\n for (const source of sources) {\n const key = getConversationKey(source);\n if (!key || seen.has(key) || !getLifecycleReplyKey(source)) continue;\n seen.add(key);\n unique.push(source);\n }\n return unique;\n }\n\n function clearKeepalive(key: string): void {\n const timer = keepaliveByConversation.get(key);\n if (timer) {\n clearTimeout(timer);\n keepaliveByConversation.delete(key);\n }\n }\n\n async function writeStatus(\n source: ChannelTurnSource,\n footerText: string,\n loadingText: string,\n options: { force?: boolean } = {},\n ): Promise<boolean> {\n const stateKey = getConversationKey(source);\n const replyKey = getLifecycleReplyKey(source);\n const threadTs = resolveSlackProgressThreadTs(source);\n if (!stateKey || !replyKey || !threadTs) return false;\n\n const signature = `${footerText}\\n${loadingText}`;\n if (!options.force && signatureByConversation.get(stateKey) === signature) {\n return true;\n }\n\n await params.ensureApp();\n const slackClient = await params.ensureWriteClient();\n const setStatus = slackClient.assistant?.threads?.setStatus;\n if (!setStatus) return false;\n\n signatureByConversation.set(stateKey, signature);\n const previous =\n writePromiseByConversation.get(stateKey) ?? Promise.resolve();\n const operation = previous.then(async () => {\n try {\n await setStatus.call(slackClient.assistant?.threads, {\n channel_id: source.chatId,\n thread_ts: threadTs,\n status: footerText,\n ...(footerText ? { loading_messages: [loadingText] } : {}),\n });\n if (footerText) clearedStaleReplyKeys.delete(replyKey);\n else clearedStaleReplyKeys.add(replyKey);\n return true;\n } catch (error) {\n if (signatureByConversation.get(stateKey) === signature) {\n signatureByConversation.delete(stateKey);\n }\n console.warn(\n \"[Slack] Failed to update assistant thread status:\",\n error instanceof Error ? error.message : error,\n );\n return false;\n }\n });\n const settled = operation.then(() => undefined);\n writePromiseByConversation.set(stateKey, settled);\n void settled.then(() => {\n if (writePromiseByConversation.get(stateKey) === settled) {\n writePromiseByConversation.delete(stateKey);\n }\n });\n return operation;\n }\n\n function scheduleKeepalive(key: string): void {\n clearKeepalive(key);\n const timer = setTimeout(() => {\n keepaliveByConversation.delete(key);\n void (async () => {\n const state = stateByConversation.get(key);\n const source = sourceByConversation.get(key);\n if (!state?.isThinkingActive || !source) return;\n await writeStatus(source, state.typingFooterText, state.thinkingText, {\n force: true,\n });\n if (state.isThinkingActive) scheduleKeepalive(key);\n })();\n }, SLACK_ASSISTANT_STATUS_KEEPALIVE_MS);\n timer.unref?.();\n keepaliveByConversation.set(key, timer);\n }\n\n async function activate(\n source: ChannelTurnSource,\n footerText: string,\n loadingText: string,\n ): Promise<void> {\n const key = getConversationKey(source);\n if (!key || !getLifecycleReplyKey(source)) return;\n const state = stateByConversation.get(key) ?? {\n isThinkingActive: false,\n thinkingText: \"\",\n typingFooterText: \"\",\n };\n if (\n state.isThinkingActive &&\n state.thinkingText === loadingText &&\n state.typingFooterText === footerText\n ) {\n sourceByConversation.set(key, source);\n return;\n }\n state.isThinkingActive = true;\n state.thinkingText = loadingText;\n state.typingFooterText = footerText;\n stateByConversation.set(key, state);\n sourceByConversation.set(key, source);\n const sent = await writeStatus(source, footerText, loadingText);\n if (sent && state.isThinkingActive) scheduleKeepalive(key);\n else if (!sent) state.isThinkingActive = false;\n }\n\n function markAutoClearedByKey(key: string): void {\n clearKeepalive(key);\n const state = stateByConversation.get(key);\n if (state) state.isThinkingActive = false;\n signatureByConversation.delete(key);\n sourceByConversation.delete(key);\n }\n\n async function deactivate(source: ChannelTurnSource): Promise<void> {\n const key = getConversationKey(source);\n if (!key) return;\n clearKeepalive(key);\n const state = stateByConversation.get(key);\n if (state) state.isThinkingActive = false;\n signatureByConversation.delete(key);\n sourceByConversation.delete(key);\n await writeStatus(source, \"\", \"\", { force: true });\n signatureByConversation.delete(key);\n stateByConversation.delete(key);\n }\n\n async function clearStale(source: ChannelTurnSource): Promise<void> {\n const key = getConversationKey(source);\n const replyKey = getLifecycleReplyKey(source);\n if (\n !key ||\n !replyKey ||\n stateByConversation.get(key)?.isThinkingActive ||\n clearedStaleReplyKeys.has(replyKey)\n ) {\n return;\n }\n await writeStatus(source, \"\", \"\", { force: true });\n signatureByConversation.delete(key);\n }\n\n return {\n getUniqueSources,\n getLifecycleErrorReplyKey,\n activate,\n deactivate,\n clearStale,\n markAutoCleared(source): void {\n const key = getConversationKey(source);\n if (key) markAutoClearedByKey(key);\n },\n markAutoClearedForMessage(msg): void {\n if (\n isNonEmptyString(msg.agentId) &&\n isNonEmptyString(msg.conversationId)\n ) {\n markAutoClearedByKey(`${msg.agentId}:${msg.conversationId}`);\n return;\n }\n const anchor = firstNonEmptyString(msg.threadId, msg.replyToMessageId);\n if (!anchor) return;\n const root = params.resolveKnownThreadRoot(anchor);\n for (const [key, source] of sourceByConversation) {\n if (\n source.chatId === msg.chatId &&\n resolveSlackProgressThreadTs(source) === root\n ) {\n markAutoClearedByKey(key);\n }\n }\n },\n activeSources: () => Array.from(sourceByConversation.values()),\n clear(): void {\n for (const timer of keepaliveByConversation.values()) clearTimeout(timer);\n stateByConversation.clear();\n sourceByConversation.clear();\n signatureByConversation.clear();\n writePromiseByConversation.clear();\n keepaliveByConversation.clear();\n clearedStaleReplyKeys.clear();\n },\n };\n}\n"
|
|
22
22
|
],
|
|
23
|
-
"mappings": ";AAAA,IAAM,wBAAwB;AAC9B,IAAM,8BAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF;AA6DA,SAAS,QAAQ,CAAC,OAAgD;AAAA,EAChE,OAAO,SAAS,OAAO,UAAU,WAC5B,QACD;AAAA;AAGN,SAAS,gBAAgB,CAAC,OAAiC;AAAA,EACzD,OAAO,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS;AAAA;AAG5D,SAAS,sBAAsB,CAAC,OAAsC;AAAA,EACpE,MAAM,SAAS,SAAS,KAAK;AAAA,EAC7B,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EAEpB,OAAO;AAAA,IACL,IAAI,iBAAiB,OAAO,EAAE,IAAI,OAAO,KAAK;AAAA,IAC9C,MAAM,iBAAiB,OAAO,IAAI,IAAI,OAAO,OAAO;AAAA,IACpD,UAAU,iBAAiB,OAAO,QAAQ,IAAI,OAAO,WAAW;AAAA,IAChE,MAAM,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAAA,IACtD,aAAa,iBAAiB,OAAO,WAAW,IAC5C,OAAO,cACP;AAAA,IACJ,sBAAsB,iBAAiB,OAAO,oBAAoB,IAC9D,OAAO,uBACP;AAAA,EACN;AAAA;AAGF,SAAS,4BAA4B,CACnC,OAC4B;AAAA,EAC5B,MAAM,SAAS,SAAS,KAAK;AAAA,EAC7B,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EAEpB,MAAM,QAAQ,MAAM,QAAQ,OAAO,KAAK,IACpC,OAAO,MACJ,IAAI,CAAC,UAAU,uBAAuB,KAAK,CAAC,EAC5C,OAAO,CAAC,UAAkC,QAAQ,KAAK,CAAC,IAC3D;AAAA,EAEJ,OAAO;AAAA,IACL,WAAW,iBAAiB,OAAO,SAAS,IACxC,OAAO,YACP;AAAA,IACJ;AAAA,EACF;AAAA;AAIK,SAAS,iBAAiB,CAAC,UAAoC;AAAA,EACpE,MAAM,SAAS,SAAS,QAAQ;AAAA,EAChC,IAAI,CAAC;AAAA,IAAQ,OAAO,CAAC;AAAA,EAErB,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,OAAO,CAAC,SAA+B;AAAA,IAC3C,IAAI,CAAC;AAAA,MAAM;AAAA,IACX,MAAM,MACJ,KAAK,MACL,KAAK,wBACL,KAAK,eACL,GAAG,KAAK,QAAQ,gBAAgB,KAAK,YAAY;AAAA,IACnD,QAAQ,IAAI,KAAK,IAAI;AAAA;AAAA,EAGvB,IAAI,MAAM,QAAQ,OAAO,KAAK,GAAG;AAAA,IAC/B,WAAW,SAAS,OAAO;AAAA,MAAO,KAAK,uBAAuB,KAAK,CAAC;AAAA,EACtE;AAAA,EAEA,IAAI,MAAM,QAAQ,OAAO,WAAW,GAAG;AAAA,IACrC,OAAO,YACJ,IAAI,CAAC,UAAU,6BAA6B,KAAK,CAAC,EAClD,OAAO,CAAC,UAAwC,QAAQ,KAAK,CAAC,EAC9D,QAAQ,CAAC,YAAY,UAAU;AAAA,MAC9B,WAAW,QAAQ,WAAW,SAAS,CAAC;AAAA,QAAG,KAAK,IAAI;AAAA,MACpD,IAAI,WAAW,WAAW;AAAA,QACxB,KAAK;AAAA,UACH,IAAI,oBAAoB;AAAA,UACxB,MAAM,oBAAoB;AAAA,UAC1B,aAAa,WAAW;AAAA,QAC1B,CAAC;AAAA,MACH;AAAA,KACD;AAAA,EACL;AAAA,EAEA,OAAO,MAAM,KAAK,QAAQ,OAAO,CAAC,EAAE,MAAM,GAAG,qBAAqB;AAAA;AAGpE,SAAS,UAAU,CAAC,MAA4C;AAAA,EAC9D,MAAM,QAAQ,KAAK,mBAAmB;AAAA,EACtC,OAAO,iBAAiB,KAAK,IAAI,MAAM,KAAK,IAAI;AAAA;AAYlD,eAAsB,wBAAwB,CAAC,QAKX;AAAA,EAClC,IAAI,iBAAiB,OAAO,QAAQ,GAAG;AAAA,IACrC,IAAI;AAAA,IACJ,GAAG;AAAA,MACD,MAAM,QAAQ,MAAM,OAAO,OAAO,cAAc,QAAQ;AAAA,QACtD,SAAS,OAAO;AAAA,QAChB,IAAI,OAAO;AAAA,QACX,OAAO;AAAA,QACP,WAAW;AAAA,WACP,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MAC7B,CAAC;AAAA,MACD,MAAM,YAAW,MAAK,YAAY,CAAC,GAAG,KACpC,CAAC,UAAU,MAAM,OAAO,OAAO,SACjC;AAAA,MACA,IAAI;AAAA,QAAS,OAAO,kBAAkB,QAAO;AAAA,MAC7C,SAAS,WAAW,KAAI;AAAA,IAC1B,SAAS;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAQ,MAAM,OAAO,OAAO,cAAc,QAAQ;AAAA,IACtD,SAAS,OAAO;AAAA,IAChB,QAAQ,OAAO;AAAA,IACf,QAAQ,OAAO;AAAA,IACf,WAAW;AAAA,IACX,OAAO;AAAA,EACT,CAAC;AAAA,EACD,MAAM,WAAW,KAAK,YAAY,CAAC,GAAG,KACpC,CAAC,UAAU,MAAM,OAAO,OAAO,SACjC;AAAA,EACA,OAAO,UAAU,kBAAkB,OAAO,IAAI;AAAA;AAGhD,SAAS,sBAAsB,CAAC,UAA2B;AAAA,EACzD,MAAM,aAAa,SAAS,KAAK,EAAE,YAAY;AAAA,EAC/C,OAAO,4BAA4B,KACjC,CAAC,WAAW,eAAe,UAAU,WAAW,SAAS,IAAI,QAAQ,CACvE;AAAA;AAGF,SAAS,kBAAkB,CAAC,QAAqB;AAAA,EAC/C,MAAM,SAAS,IAAI,IAAI,MAAM;AAAA,EAC7B,IAAI,OAAO,aAAa,UAAU;AAAA,IAChC,MAAM,IAAI,MAAM,oCAAoC,OAAO,UAAU;AAAA,EACvE;AAAA,EACA,IAAI,CAAC,uBAAuB,OAAO,QAAQ,GAAG;AAAA,IAC5C,MAAM,IAAI,MAAM,uCAAuC,OAAO,UAAU;AAAA,EAC1E;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,oBAAoB,CAAC,UAA2B;AAAA,EACvD,QAAQ,UAAU,YAAY;AAAA,SACvB;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,SACA;AAAA,SACA;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,SACA;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA;AAAA,MAEP,OAAO;AAAA;AAAA;AAIb,SAAS,YAAY,CAAC,UAA0B;AAAA,EAC9C,MAAM,UAAU,SAAS,QAAQ,QAAQ,EAAE;AAAA,EAC3C,MAAM,YAAY,QAAQ,YAAY,GAAG;AAAA,EACzC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAAA;AAGpC,SAAS,aAAa,CAAC,MAAsB;AAAA,EAC3C,MAAM,OAAO,aAAa,IAAI;AAAA,EAC9B,IAAI,SAAS;AAAA,IAAM,OAAO;AAAA,EAC1B,MAAM,QAAQ,KAAK,YAAY,GAAG;AAAA,EAClC,OAAO,QAAQ,IAAI,KAAK,MAAM,KAAK,IAAI;AAAA;AAGzC,SAAS,eAAe,CAAC,MAAc,UAAuC;AAAA,EAC5E,IAAI;AAAA,IAAU,OAAO;AAAA,EAErB,QAAQ,cAAc,IAAI,EAAE,YAAY;AAAA,SACjC;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,SACA;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,SACA;AAAA,SACA;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,SACA;AAAA,MACH,OAAO;AAAA;AAAA,MAEP;AAAA;AAAA;AAIN,SAAS,sBAAsB,CAAC,UAA4B;AAAA,EAC1D,MAAM,aAAa,UAAU,KAAK,EAAE,YAAY;AAAA,EAChD,OACE,eAAe,8BACf,eAAe;AAAA;AAInB,SAAS,oBAAoB,CAAC,QAInB;AAAA,EACT,MAAM,aACJ,OAAO,KAAK,SACX,OAAO,MAAM,aAAa,IAAI,IAAI,OAAO,GAAG,EAAE,QAAQ,IAAI,cAC3D,GAAG,OAAO,KAAK,MAAM,eAAe,qBAAqB,OAAO,KAAK,QAAQ;AAAA,EAC/E,OAAO,cAAc,UAAU,KAAK,CAAC,OAAO,WACxC,aACA,GAAG,aAAa,qBAAqB,OAAO,QAAQ;AAAA;AAG1D,SAAS,wBAAwB,CAAC,QAIX;AAAA,EACrB,MAAM,oBACJ,OAAO,oBAAoB,CAAC,uBAAuB,OAAO,gBAAgB,IACtE,OAAO,mBACP,OAAO,KAAK,YAAY,CAAC,uBAAuB,OAAO,KAAK,QAAQ,IAClE,OAAO,KAAK,WACZ;AAAA,EACR,OAAO,gBAAgB,OAAO,UAAU,iBAAiB;AAAA;AAGpD,SAAS,wBAAwB,CAAC,QAInB;AAAA,EACpB,MAAM,aAAa,qBAAqB;AAAA,IACtC,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA,EACd,CAAC;AAAA,EACD,MAAM,WAAW,yBAAyB;AAAA,IACxC,MAAM,OAAO;AAAA,IACb,UAAU;AAAA,IACV,kBAAkB,OAAO;AAAA,EAC3B,CAAC;AAAA,EACD,OAAO;AAAA,IACL,UAAU,qBAAqB;AAAA,MAC7B,MAAM,OAAO;AAAA,MACb,KAAK,OAAO;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,IACD;AAAA,EACF;AAAA;AAGF,SAAS,kBAAkB,CAAC,UAAwC;AAAA,EAClE,MAAM,SAAS,SAAS,QAAQ,IAAI,gBAAgB;AAAA,EACpD,IAAI,CAAC;AAAA,IAAQ;AAAA,EACb,MAAM,QAAQ,OAAO,MAAM;AAAA,EAC3B,OAAO,OAAO,SAAS,KAAK,IAAI,QAAQ;AAAA;AAQ1C,eAAsB,cAAc,CAAC,QAKP;AAAA,EAC5B,MAAM,SAAS,OAAO,KAAK,wBAAwB,OAAO,KAAK;AAAA,EAC/D,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,IAAI,MACR,2DACF;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,mBAAmB,MAAM;AAAA,EACxC,MAAM,UAAU,OAAO,WAAW,WAAW;AAAA,EAC7C,MAAM,cAAc,EAAE,eAAe,UAAU,OAAO,QAAQ;AAAA,EAC9D,MAAM,UAAU,MAAM,QAAQ,OAAO,MAAM;AAAA,IACzC,SAAS;AAAA,IACT,UAAU;AAAA,OACN,OAAO,SAAS,EAAE,QAAQ,OAAO,OAAO,IAAI,CAAC;AAAA,EACnD,CAAC;AAAA,EAED,IAAI,WAAW;AAAA,EACf,IAAI,QAAQ,UAAU,OAAO,QAAQ,SAAS,KAAK;AAAA,IACjD,MAAM,WAAW,QAAQ,QAAQ,IAAI,UAAU;AAAA,IAC/C,IAAI,UAAU;AAAA,MACZ,MAAM,WAAW,IAAI,IAAI,UAAU,OAAO,IAAI;AAAA,MAC9C,WAAW,MAAM,QAAQ,SAAS,MAAM;AAAA,WAClC,SAAS,WAAW,OAAO,SAAS,EAAE,SAAS,YAAY,IAAI,CAAC;AAAA,QACpE,UAAU;AAAA,WACN,OAAO,SAAS,EAAE,QAAQ,OAAO,OAAO,IAAI,CAAC;AAAA,MACnD,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,IAAI,CAAC,SAAS,IAAI;AAAA,IAChB,MAAM,IAAI,MACR,2CAA2C,SAAS,SACtD;AAAA,EACF;AAAA,EACA,IAAI,CAAC,SAAS,MAAM;AAAA,IAClB,MAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AAAA,EAEA,MAAM,mBACJ,SAAS,QAAQ,IAAI,cAAc,GAAG,MAAM,GAAG,EAAE,IAAI,KAAK,KAAK;AAAA,EACjE,MAAM,WAAW,yBAAyB;AAAA,IACxC,MAAM,OAAO;AAAA,IACb,KAAK;AAAA,IACL;AAAA,EACF,CAAC;AAAA,EAED,OAAO;AAAA,IACL,MAAM,SAAS;AAAA,OACZ;AAAA,IACH,eAAe,mBAAmB,QAAQ;AAAA,EAC5C;AAAA;;AClaK,SAAS,yBAAyB,CACvC,OAC4B;AAAA,EAC5B,IAAI,UAAU;AAAA,IAAY,OAAO;AAAA,EACjC,OAAO;AAAA;AAGT,SAAS,iBAAgB,CAAC,OAAiC;AAAA,EACzD,OAAO,OAAO,UAAU,YAAY,MAAM,SAAS;AAAA;AAS9C,SAAS,gCAAgC,CAC9C,SACS;AAAA,EACT,OAAO,kBAAiB,QAAQ,MAAM,KAAK,QAAQ,YAAY;AAAA;AAG1D,SAAS,2BAA2B,CAAC,QAIhC;AAAA,EACV,OACG,kBAAiB,OAAO,SAAS,KAChC,OAAO,QAAQ,SAAS,OAAO,aAChC,kBAAiB,OAAO,KAAK,KAAK,OAAO,QAAQ,WAAW,OAAO;AAAA;AAIjE,SAAS,kCAAkC,CAAC,QAMvC;AAAA,EACV,IACE,4BAA4B;AAAA,IAC1B,SAAS,OAAO;AAAA,IAChB,WAAW,OAAO;AAAA,IAClB,OAAO,OAAO;AAAA,EAChB,CAAC,GACD;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,CAAC,iCAAiC,OAAO,OAAO,GAAG;AAAA,IACrD,OAAO;AAAA,EACT;AAAA,EAOA,MAAM,OAAO,0BAA0B,OAAO,SAAS;AAAA,EACvD,OAAO,SAAS,cAAc,OAAO;AAAA;;AC1EhC,SAAS,iBAAgB,CAAC,OAAiC;AAAA,EAChE,OAAO,OAAO,UAAU,YAAY,MAAM,SAAS;AAAA;AAG9C,SAAS,mBAAmB,IAAI,QAAuC;AAAA,EAC5E,OAAO,OAAO,KAAK,iBAAgB;AAAA;AAG9B,SAAS,oBAAoB,CAAC,QAAsC;AAAA,EACzE,OAAO,OAAO,WAAW,GAAG,IAAI,WAAW;AAAA;AAGtC,SAAS,0BAA0B,CACxC,QACoB;AAAA,EACpB,IACE,OAAO,aAAa,YACpB,qBAAqB,OAAO,MAAM,MAAM,UACxC;AAAA,IACA,OAAO,oBAAoB,OAAO,QAAQ;AAAA,EAC5C;AAAA,EACA,OAAO,oBAAoB,OAAO,UAAU,OAAO,SAAS;AAAA;AAGvD,SAAS,4BAA4B,CAC1C,QACoB;AAAA,EACpB,IACE,OAAO,aAAa,YACpB,qBAAqB,OAAO,MAAM,MAAM,UACxC;AAAA,IACA,OAAO,oBAAoB,OAAO,UAAU,OAAO,SAAS;AAAA,EAC9D;AAAA,EACA,OAAO,2BAA2B,MAAM;AAAA;AAGnC,SAAS,4BAA4B,CAC1C,KACoB;AAAA,EACpB,IAAI,qBAAqB,IAAI,MAAM,MAAM,UAAU;AAAA,IACjD,OAAO,oBAAoB,IAAI,QAAQ;AAAA,EACzC;AAAA,EACA,OAAO,oBAAoB,IAAI,UAAU,IAAI,gBAAgB;AAAA;AAGxD,SAAS,0BAA0B,CAAC,OAAuB;AAAA,EAChE,OAAO,MAAM,KAAK,EAAE,QAAQ,YAAY,EAAE;AAAA;AAGrC,SAAS,sBAAsB,CAAC,OAAuB;AAAA,EAC5D,OAAO,KAAK,MAAM,OAAO,WAAW,KAAK,IAAI,IAAI;AAAA;;;AChDnD,IAAM,6BAA6B;AACnC,IAAM,gCAAgC;AAUtC,SAAS,YAAY,CAAC,MAAsB;AAAA,EAC1C,OAAO,KAAK,QAAQ,uBAAuB,MAAM;AAAA;AAG5C,SAAS,oBAAoB,CAClC,MACA,WACQ;AAAA,EACR,IAAI,CAAC;AAAA,IAAW,OAAO,KAAK,KAAK;AAAA,EACjC,MAAM,oBAAoB,IAAI,OAC5B,UAAU,aAAa,SAAS,iBAClC;AAAA,EACA,OAAO,KAAK,QAAQ,mBAAmB,EAAE,EAAE,KAAK;AAAA;AAG3C,SAAS,4BAA4B,CAC1C,OACA,gBACQ;AAAA,EACR,MAAM,aAAa,SAAS,IACzB,QAAQ,iCAAiC,GAAG,EAC5C,QAAQ,SAAS,GAAG,EACpB,KAAK,EACL,MAAM,GAAG,6BAA6B,EACtC,KAAK;AAAA,EACR,OAAO,aAAa;AAAA;AAGtB,SAAS,6BAA6B,CACpC,MACyB;AAAA,EACzB,IAAI,CAAC,MAAM,SAAS,IAAI;AAAA,IAAG,OAAO,CAAC;AAAA,EACnC,OAAO,MAAM,KAAK,KAAK,SAAS,0BAA0B,GAAG,CAAC,WAAW;AAAA,IACvE,OAAO,MAAM;AAAA,IACb,KAAK,MAAM,QAAQ,MAAM,GAAG;AAAA,IAC5B,QAAQ,MAAM,MAAM;AAAA,EACtB,EAAE,EAAE,OAAO,CAAC,YAAY,QAAQ,OAAO,SAAS,CAAC;AAAA;AAGnD,SAAS,wBAAwB,CAC/B,MACA,cACkC;AAAA,EAClC,MAAM,WAAW,8BAA8B,IAAI,EAAE,IAAI,CAAC,aAAa;AAAA,OAClE;AAAA,IACH,aAAa,aAAa,IAAI,QAAQ,MAAM,KAAK,QAAQ;AAAA,EAC3D,EAAE;AAAA,EACF,OAAO,SAAS,SAAS,IAAI,WAAW;AAAA;AAG1C,SAAS,qBAAqB,CAAC,KAAsC;AAAA,EACnE,MAAM,MAAM,IAAI;AAAA,EAChB,MAAM,UAAU,CAAC,SAAmC;AAAA,IAClD,WAAW,WAAW,8BAA8B,IAAI,GAAG;AAAA,MACzD,IAAI,IAAI,QAAQ,MAAM;AAAA,IACxB;AAAA;AAAA,EAEF,QAAQ,IAAI,IAAI;AAAA,EAChB,QAAQ,IAAI,cAAc,IAAI;AAAA,EAC9B,QAAQ,IAAI,eAAe,SAAS,IAAI;AAAA,EACxC,WAAW,SAAS,IAAI,eAAe,WAAW,CAAC;AAAA,IAAG,QAAQ,MAAM,IAAI;AAAA,EACxE,OAAO,CAAC,GAAG,GAAG;AAAA;AAGhB,SAAS,yBAAyB,CAChC,cACA,cACiC;AAAA,EACjC,IAAI,CAAC;AAAA,IAAc;AAAA,EACnB,MAAM,eAAe,yBACnB,aAAa,MACb,YACF;AAAA,EACA,OAAO,eAAe,KAAK,cAAc,aAAa,IAAI;AAAA;AAG5D,SAAS,yBAAyB,CAChC,OACA,cAC2B;AAAA,EAC3B,MAAM,eAAe,yBAAyB,MAAM,MAAM,YAAY;AAAA,EACtE,OAAO,eAAe,KAAK,OAAO,aAAa,IAAI;AAAA;AAGrD,eAAsB,iCAAiC,CAAC,QAGrB;AAAA,EACjC,QAAQ,YAAY;AAAA,EACpB,MAAM,UAAU,sBAAsB,OAAO;AAAA,EAC7C,IAAI,QAAQ,WAAW;AAAA,IAAG,OAAO;AAAA,EAEjC,MAAM,gBAAgB,MAAM,QAAQ,IAClC,QAAQ,IAAI,OAAO,WAAW;AAAA,IAC5B,IAAI;AAAA,MACF,MAAM,OAAO,MAAM,OAAO,gBAAgB,MAAM;AAAA,MAChD,OAAO,CAAC,QAAQ,6BAA6B,MAAM,MAAM,CAAC;AAAA,MAC1D,MAAM;AAAA,MACN,OAAO,CAAC,QAAQ,MAAM;AAAA;AAAA,GAEzB,CACH;AAAA,EACA,MAAM,eAAe,IAAI,IAAI,aAAa;AAAA,EAC1C,MAAM,eAAe,yBAAyB,QAAQ,MAAM,YAAY;AAAA,EACxE,MAAM,eAAe,0BACnB,QAAQ,cACR,YACF;AAAA,EACA,MAAM,UAAU,QAAQ,eAAe,UACnC,0BAA0B,QAAQ,cAAc,SAAS,YAAY,IACrE;AAAA,EACJ,MAAM,UAAU,QAAQ,eAAe,SAAS,IAAI,CAAC,UACnD,0BAA0B,OAAO,YAAY,CAC/C;AAAA,EAEA,OAAO;AAAA,OACF;AAAA,OACC,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,OACnC,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,OACnC,QAAQ,gBACR;AAAA,MACE,eAAe;AAAA,WACV,QAAQ;AAAA,WACP,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,WACzB,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC/B;AAAA,IACF,IACA,CAAC;AAAA,EACP;AAAA;;;AC3IF,IAAM,iCAAiC,IAAI,IAAI;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,iCAAiC,IAAI,IAAI;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAoIM,SAAS,yBAAyB,CACvC,WACA,qBACS;AAAA,EACT,OAAO,qBAAqB,SAAS,SAAS,MAAM;AAAA;AAGtD,SAAS,cAAc,CAAC,OAAyB;AAAA,EAC/C,OAAO,UAAU,QAAQ,OAAO,UAAU;AAAA;AAG5C,SAAS,eAAe,CACtB,MACA,QACS;AAAA,EACT,OACE,kBAAiB,IAAI,KACrB,kBAAiB,MAAM,MACtB,KAAK,SAAS,KAAK,SAAS,KAAK,KAAK,SAAS,KAAK,SAAS;AAAA;AAIlE,SAAS,oBAAoB,CAAC,SAAgD;AAAA,EAC5E,OAAO,kBAAiB,QAAQ,MAAM,KAAK,QAAQ,YAAY;AAAA;AAGjE,SAAS,iCAAiC,CACxC,SACiC;AAAA,EACjC,MAAM,UAAU,kBAAiB,QAAQ,OAAO,IAAI,QAAQ,UAAU;AAAA,EACtE,IAAI,CAAC,SAAS;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,IAAI,+BAA+B,IAAI,OAAO,GAAG;AAAA,IAC/C,OAAO;AAAA,EACT;AAAA,EACA,IACE,+BAA+B,IAAI,OAAO,KAC1C,eAAe,QAAQ,OAAO,GAC9B;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,gCAAgC,CAC9C,SACS;AAAA,EACT,OAAO,iCAAiC,EAAE,QAAQ,CAAC,EAAE;AAAA;AAGhD,SAAS,gCAAgC,CAAC,QAGrC;AAAA,EACV,OAAO,QACL,OAAO,qBAAqB,OAAO,qBAAqB,OAAO,SACjE;AAAA;AAGK,SAAS,gCAAgC,CAC9C,QAC2B;AAAA,EAC3B,QAAQ,YAAY;AAAA,EACpB,IAAI,CAAC,kBAAiB,QAAQ,OAAO,GAAG;AAAA,IACtC,OAAO,EAAE,aAAa,OAAO,QAAQ,kBAAkB;AAAA,EACzD;AAAA,EACA,MAAM,WAAW,oBAAoB,QAAQ,MAAM,QAAQ,MAAM;AAAA,EACjE,IAAI,CAAC,UAAU;AAAA,IACb,OAAO,EAAE,aAAa,OAAO,QAAQ,iBAAiB;AAAA,EACxD;AAAA,EACA,IAAI,CAAC,kBAAiB,QAAQ,EAAE,GAAG;AAAA,IACjC,OAAO,EAAE,aAAa,OAAO,QAAQ,oBAAoB;AAAA,EAC3D;AAAA,EACA,IAAI,QAAQ,WAAW,MAAM;AAAA,IAC3B,OAAO,EAAE,aAAa,OAAO,QAAQ,iBAAiB;AAAA,EACxD;AAAA,EAEA,MAAM,sBAAsB,kCAAkC,OAAO;AAAA,EACrE,IAAI,qBAAqB;AAAA,IACvB,OAAO,EAAE,aAAa,OAAO,QAAQ,oBAAoB;AAAA,EAC3D;AAAA,EAEA,MAAM,WAAW,qBAAqB,QAAQ,OAAO;AAAA,EACrD,MAAM,WACJ,aAAa,WACR,oBAAoB,QAAQ,SAAS,KAAK,OAC1C,oBAAoB,QAAQ,WAAW,QAAQ,EAAE,KAAK;AAAA,EAE7D,IAAI,aAAa,aAAa,CAAC,kBAAiB,QAAQ,SAAS,GAAG;AAAA,IAClE,OAAO,EAAE,aAAa,OAAO,QAAQ,4BAA4B;AAAA,EACnE;AAAA,EAEA,MAAM,UAAU,kBAAiB,QAAQ,IAAI,IAAI,QAAQ,OAAO;AAAA,EAChE,MAAM,eAAe,gBAAgB,SAAS,OAAO,SAAS;AAAA,EAC9D,IACE,aAAa,aACb,gBACA,OAAO,sCAAsC,MAC7C;AAAA,IACA,OAAO,EAAE,aAAa,OAAO,QAAQ,yBAAyB;AAAA,EAChE;AAAA,EACA,MAAM,gBAAgB,OAAO,kBAAkB;AAAA,EAC/C,MAAM,mBAAmB,qBAAqB,OAAO,IACjD,eACA,gBAAgB;AAAA,EAEpB,OAAO;AAAA,IACL,aAAa;AAAA,IACb,WAAW,QAAQ;AAAA,IACnB;AAAA,OACI,kBAAiB,QAAQ,IAAI,IAAI,EAAE,cAAc,QAAQ,KAAK,IAAI,CAAC;AAAA,OACnE,kBAAiB,QAAQ,MAAM,IAC/B,EAAE,aAAa,QAAQ,OAAO,IAC9B,CAAC;AAAA,IACL,WAAW,QAAQ;AAAA,IACnB;AAAA,IACA;AAAA,IACA,MAAM,eACF,qBAAqB,SAAS,OAAO,SAAS,IAC9C;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,eACN,YACA,aAAa,WACX,OACA;AAAA,EACR;AAAA;AAGK,SAAS,mCAAmC,CACjD,QAC8B;AAAA,EAC9B,QAAQ,UAAU;AAAA,EAClB,IAAI,CAAC,kBAAiB,MAAM,OAAO,GAAG;AAAA,IACpC,OAAO,EAAE,aAAa,OAAO,QAAQ,kBAAkB;AAAA,EACzD;AAAA,EACA,MAAM,WAAW,oBAAoB,MAAM,MAAM,MAAM,MAAM;AAAA,EAC7D,IAAI,CAAC,UAAU;AAAA,IACb,OAAO,EAAE,aAAa,OAAO,QAAQ,iBAAiB;AAAA,EACxD;AAAA,EACA,IAAI,CAAC,kBAAiB,MAAM,EAAE,GAAG;AAAA,IAC/B,OAAO,EAAE,aAAa,OAAO,QAAQ,oBAAoB;AAAA,EAC3D;AAAA,EAEA,MAAM,UAAU,kBAAiB,MAAM,IAAI,IAAI,MAAM,OAAO;AAAA,EAC5D,OAAO;AAAA,IACL,aAAa;AAAA,IACb,WAAW,MAAM;AAAA,IACjB;AAAA,OACI,kBAAiB,MAAM,IAAI,IAAI,EAAE,cAAc,MAAM,KAAK,IAAI,CAAC;AAAA,OAC/D,kBAAiB,MAAM,MAAM,IAAI,EAAE,aAAa,MAAM,OAAO,IAAI,CAAC;AAAA,IACtE,WAAW,MAAM;AAAA,IACjB,UAAU,oBAAoB,MAAM,WAAW,MAAM,EAAE,KAAK,MAAM;AAAA,IAClE,UAAU;AAAA,IACV,MAAM,qBAAqB,SAAS,OAAO,SAAS;AAAA,IACpD;AAAA,IACA,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,UAAU;AAAA,EACZ;AAAA;AAGK,SAAS,iCAAiC,CAC/C,QAC4B;AAAA,EAC5B,MAAM,OAAO,eAAe,OAAO,MAAM,IAAI,IACxC,OAAO,MAAM,OACd;AAAA,EACJ,IAAI,MAAM,SAAS,WAAW;AAAA,IAC5B,OAAO,EAAE,aAAa,OAAO,QAAQ,wBAAwB;AAAA,EAC/D;AAAA,EACA,IAAI,CAAC,kBAAiB,KAAK,OAAO,GAAG;AAAA,IACnC,OAAO,EAAE,aAAa,OAAO,QAAQ,kBAAkB;AAAA,EACzD;AAAA,EACA,IAAI,CAAC,kBAAiB,OAAO,MAAM,IAAI,GAAG;AAAA,IACxC,OAAO,EAAE,aAAa,OAAO,QAAQ,iBAAiB;AAAA,EACxD;AAAA,EACA,IAAI,CAAC,kBAAiB,KAAK,EAAE,GAAG;AAAA,IAC9B,OAAO,EAAE,aAAa,OAAO,QAAQ,oBAAoB;AAAA,EAC3D;AAAA,EACA,IAAI,CAAC,kBAAiB,OAAO,MAAM,QAAQ,GAAG;AAAA,IAC5C,OAAO,EAAE,aAAa,OAAO,QAAQ,mBAAmB;AAAA,EAC1D;AAAA,EACA,IAAI,OAAO,MAAM,SAAS,OAAO,WAAW;AAAA,IAC1C,OAAO,EAAE,aAAa,OAAO,QAAQ,mBAAmB;AAAA,EAC1D;AAAA,EAEA,MAAM,WAAW,qBAAqB,KAAK,OAAO;AAAA,EAClD,IACE,aAAa,aACb,0BAA0B,KAAK,SAAS,OAAO,mBAAmB,GAClE;AAAA,IACA,OAAO,EAAE,aAAa,OAAO,QAAQ,uBAAuB;AAAA,EAC9D;AAAA,EAEA,MAAM,kBAAkB,KAAK;AAAA,EAC7B,MAAM,WACJ,OAAO,aAAa,YAChB,OAAO,WACP,aAAa,YACX,kBACA;AAAA,EACR,MAAM,iBACJ,oBAAoB,OAAO,MAAM,UAAU,eAAe,KAC1D;AAAA,EACF,MAAM,WAAW;AAAA,IACf,QAAQ,OAAO;AAAA,IACf,OAAO,OAAO,MAAM;AAAA,IACpB;AAAA,OACI,kBAAiB,OAAO,MAAM,SAAS,IACvC,EAAE,gBAAgB,OAAO,MAAM,UAAU,IACzC,CAAC;AAAA,EACP;AAAA,EACA,OAAO;AAAA,IACL,aAAa;AAAA,IACb,WAAW,KAAK;AAAA,IAChB,UAAU,OAAO,MAAM;AAAA,IACvB,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,MAAM,kBAAkB,OAAO,YAAY,OAAO,MAAM;AAAA,IACxD;AAAA,EACF;AAAA;;AC7XF,eAAe,gBAAgB,CAC7B,SACiB;AAAA,EACjB,QAAQ,SAAS,OAAO,SAAS,eAAe;AAAA,EAChD,MAAM,OAAO,QAAQ,WAAW;AAAA,EAChC,IAAI,KAAK,KAAK,EAAE,WAAW,KAAK,CAAC,QAAQ,WAAW;AAAA,IAClD,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,WACJ,MAAM,aAAa,YAAY,QAAQ,OAAO,WAAW,GAAG;AAAA,EAC9D,MAAM,YAAY,WAAW,IAAI;AAAA,EACjC,MAAM,SAAS,MAAM,QAAQ,YAAY;AAAA,IACvC,SAAS;AAAA,IACT,WAAW,MAAM;AAAA,IACjB,QAAQ,QAAQ;AAAA,IAChB,MAAM,UAAU;AAAA,IAChB,kBAAkB,WAAW,YAAY,QAAQ;AAAA,IACjD,UAAU,WACL,QAAQ,YAAY,MAAM,YAAY,OACvC,QAAQ,mBACN,OACC,QAAQ,YAAY,MAAM,YAAY;AAAA,IAC7C,WAAW,QAAQ;AAAA,IACnB,UAAU,QAAQ;AAAA,IAClB,OAAO,QAAQ;AAAA,IACf,WAAW,UAAU;AAAA,IACrB,SAAS,MAAM;AAAA,IACf,gBAAgB,MAAM;AAAA,EACxB,CAAC;AAAA,EACD,OAAO,QAAQ,YACX,yCAAyC,OAAO,eAChD,sCAAsC,OAAO;AAAA;AAGnD,eAAe,YAAY,CACzB,SACiB;AAAA,EACjB,QAAQ,SAAS,OAAO,YAAY;AAAA,EACpC,IAAI,CAAC,QAAQ,OAAO,KAAK;AAAA,IAAG,OAAO;AAAA,EACnC,IAAI,CAAC,QAAQ,WAAW,KAAK,GAAG;AAAA,IAC9B,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,MAAM,QAAQ,YAAY;AAAA,IACvC,SAAS;AAAA,IACT,WAAW,MAAM;AAAA,IACjB,QAAQ,QAAQ;AAAA,IAChB,MAAM;AAAA,IACN,iBAAiB,QAAQ;AAAA,IACzB,UAAU,QAAQ;AAAA,IAClB,gBAAgB,QAAQ;AAAA,IACxB,UAAU,QAAQ,YAAY,MAAM,YAAY;AAAA,EAClD,CAAC;AAAA,EACD,OAAO,QAAQ,SACX,0CAA0C,OAAO,eACjD,wCAAwC,OAAO;AAAA;AAQ9C,SAAS,+BAA+B,CAC7C,UAAkD,CAAC,GACtB;AAAA,EAC7B,MAAM,UAAU;AAAA,IACd;AAAA,IACA,GAAI,QAAQ,QAAQ,CAAC,OAAO,IAAI,CAAC;AAAA,IACjC,GAAI,QAAQ,aAAa,CAAC,aAAa,IAAI,CAAC;AAAA,IAC5C,GAAI,QAAQ,eAAe,CAAC,eAAe,IAAI,CAAC;AAAA,EAClD;AAAA,EACA,OAAO;AAAA,IACL,mBAAmB,GAAG;AAAA,MACpB,MAAM,aAAsC,CAAC;AAAA,MAC7C,IAAI,QAAQ,cAAc;AAAA,QACxB,WAAW,eAAe;AAAA,UACxB,MAAM;AAAA,UACN,aACE;AAAA,QACJ;AAAA,MACF;AAAA,MACA,IAAI,QAAQ,SAAS,QAAQ,cAAc;AAAA,QACzC,WAAW,YAAY;AAAA,UACrB,MAAM;AAAA,UACN,aAAa,QAAQ,eACjB,6HACA;AAAA,QACN;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,SAAS,CAAC,GAAG,OAAO;AAAA,WAChB,OAAO,KAAK,UAAU,EAAE,SAAS,IACjC,EAAE,QAAQ,EAAE,WAAW,EAAE,IACzB,CAAC;AAAA,MACP;AAAA;AAAA,OAEE,QAAQ,uBACR,EAAE,sBAAsB,QAAQ,qBAAqB,IACrD,CAAC;AAAA,SACC,aAAY,CAAC,SAAS;AAAA,MAC1B,QAAQ,QAAQ,QAAQ;AAAA,aACjB;AAAA,UACH,OAAO,MAAM,iBAAiB,OAAO;AAAA,aAClC;AAAA,UACH,IAAI,CAAC,QAAQ,YAAY;AAAA,YACvB,OAAO;AAAA,UACT;AAAA,UACA,IAAI,CAAC,QAAQ,QAAQ,WAAW,KAAK,GAAG;AAAA,YACtC,OAAO;AAAA,UACT;AAAA,UACA,OAAO,MAAM,iBAAiB,OAAO;AAAA,aAClC;AAAA,UACH,OAAO,QAAQ,QACX,MAAM,aAAa,OAAO,IAC1B;AAAA,aACD;AAAA,UACH,OAAO,QAAQ,eACX,MAAM,QAAQ,aAAa,OAAO,IAClC;AAAA;AAAA,UAEJ,OAAO,kBAAkB,QAAQ,QAAQ;AAAA;AAAA;AAAA,EAGjD;AAAA;;ACzBF,SAAS,iBAAiB,CAAC,OAAsC;AAAA,EAC/D,IAAI,MAAM;AAAA,IAAW,OAAO;AAAA,EAC5B,IAAI,MAAM;AAAA,IAAY,OAAO;AAAA,EAC7B,MAAM,SACJ,MAAM,YACL;AAAA,EACH,IAAI,WAAW;AAAA,IAAU,OAAO;AAAA,EAChC,IAAI,WAAW;AAAA,IAAQ,OAAO;AAAA,EAC9B,OAAO;AAAA;AAGT,SAAS,gBAAgB,CACvB,SACA,WACuB;AAAA,EACvB,OAAO,kBAAkB,SAAS,IAAI,kBAAkB,OAAO,IAC3D,YACA;AAAA;AAGC,SAAS,yBAAyB,CACvC,SACoC;AAAA,EACpC,MAAM,WAAW,IAAI;AAAA,EACrB,WAAW,SAAS,SAAS;AAAA,IAC3B,MAAM,UAAU,SAAS,IAAI,MAAM,MAAM;AAAA,IACzC,SAAS,IACP,MAAM,QACN,UAAU,iBAAiB,SAAS,KAAK,IAAI,KAC/C;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,qBAAqB,CAAC,QAAuC;AAAA,EACpE,OAAO;AAAA,IACL,IAAI;AAAA,IACJ;AAAA,IACA,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA;AAGK,SAAS,mBAAmB,CAAC,QAIR;AAAA,EAC1B,QAAQ,SAAS,UAAU,qBAAqB;AAAA,EAChD,MAAM,OAAO,IAAI;AAAA,EACjB,MAAM,WAAoC,CAAC;AAAA,EAC3C,WAAW,UAAU,SAAS;AAAA,IAC5B,IAAI,CAAC,UAAU,KAAK,IAAI,MAAM;AAAA,MAAG;AAAA,IACjC,KAAK,IAAI,MAAM;AAAA,IACf,IAAI,oBAAoB,CAAC,iBAAiB,IAAI,MAAM;AAAA,MAAG;AAAA,IACvD,SAAS,KAAK,SAAS,IAAI,MAAM,KAAK,sBAAsB,MAAM,CAAC;AAAA,EACrE;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,uBAAuB,CACrC,UACyB;AAAA,EACzB,MAAM,YAAY,MAAM,KAAK,SAAS,OAAO,CAAC,EAAE,OAC9C,CAAC,UAAU,MAAM,aAAa,MAAM,UACtC;AAAA,EACA,OAAO,UAAU,SAAS,IAAI,YAAY,MAAM,KAAK,SAAS,OAAO,CAAC;AAAA;;;ACtIjE,SAAS,iBAAgB,CAAC,OAAiC;AAAA,EAChE,OAAO,OAAO,UAAU,YAAY,MAAM,SAAS;AAAA;AAG9C,SAAS,oBAAmB,IAAI,QAAuC;AAAA,EAC5E,OAAO,OAAO,KAAK,iBAAgB;AAAA;AAG9B,SAAS,SAAQ,CAAC,OAAgD;AAAA,EACvE,OAAO,SAAS,OAAO,UAAU,WAC5B,QACD;AAAA;AAUN,IAAM,kCAAiC,IAAI,IAAI;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,kCAAiC,IAAI,IAAI;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AACF,CAAC;AA2DM,SAAS,oBAAoB,CAClC,QACA,MACgC;AAAA,EAChC,MAAM,eAAe,UAAS,MAAM;AAAA,EACpC,IAAI,cAAc;AAAA,IAChB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,UAAU,UAAS,IAAI,GAAG;AAAA,EAChC,OAAO,MAAM,QAAQ,OAAO,IAAI,UAAS,QAAQ,EAAE,IAAI;AAAA;;;AC/JzD,IAAM,kCAAkC;AACxC,IAAM,gCAAgC;AACtC,IAAM,iCAAiC;AAEhC,IAAM,+BAA+B;AAErC,SAAS,yBAAyB,CACvC,QACA,MACe;AAAA,EACf,MAAM,eAAe,qBAAqB,QAAQ,IAAI;AAAA,EACtD,MAAM,iBAAiB,UAAS,cAAc,eAAe;AAAA,EAC7D,OACE,qBAAoB,gBAAgB,OAAO,cAAc,KAAK,KAAK;AAAA;AAUvE,SAAS,iBAAiB,CAAC,MAAsB;AAAA,EAC/C,OAAO,KACJ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM;AAAA;AAGzB,SAAS,sBAAsB,CAAC,MAAc,OAAuB;AAAA,EACnE,IAAI,KAAK,UAAU,OAAO;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EACA,OAAO,GAAG,KAAK,MAAM,GAAG,KAAK,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,QAAQ;AAAA;AAG1D,SAAS,wBAAwB,CAAC,OAA6C;AAAA,EAC7E,MAAM,aAAa,CAAC,MAAM,IAAI,MAAM,MAAM,EAAE,OAC1C,CAAC,UAA2B,OAAO,UAAU,YAAY,MAAM,SAAS,CAC1E;AAAA,EACA,OACE,WAAW,KACT,CAAC,UAAU,MAAM,UAAU,8BAC7B,KAAK;AAAA;AAIT,SAAS,qBAAqB,CAC5B,OACyB;AAAA,EACzB,MAAM,QAAQ,yBAAyB,KAAK;AAAA,EAC5C,IAAI,CAAC,OAAO;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,YACJ,MAAM,WAAW,MAAM,QACnB,MAAM,QACN,GAAG,MAAM,WAAW,MAAM;AAAA,EAChC,MAAM,SAA2B;AAAA,IAC/B,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,MAAM,uBAAuB,WAAW,6BAA6B;AAAA,MACrE,OAAO;AAAA,IACT;AAAA,IACA;AAAA,EACF;AAAA,EACA,IAAI,MAAM,aAAa;AAAA,IACrB,OAAO,cAAc;AAAA,MACnB,MAAM;AAAA,MACN,MAAM,uBACJ,MAAM,aACN,6BACF;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAQF,SAAS,2BAA2B,CACzC,QACuB;AAAA,EACvB,MAAM,UAAU,OAAO;AAAA,EACvB,MAAM,WAAW,0BAA0B,OAAO;AAAA,EAClD,MAAM,sBAAsB,MAAM,QAAQ,OAAO,gBAAgB,IAC7D,OAAO,mBACP;AAAA,EACJ,MAAM,eAAe,sBACjB,IAAI,IAAI,mBAAmB,IAC3B;AAAA,EACJ,MAAM,gBAAgB,oBAAoB;AAAA,IACxC,SAAS,OAAO,iBAAiB,CAAC;AAAA,IAClC;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC;AAAA,EACD,MAAM,mBAAmB,sBACrB,oBAAoB,EAAE,SAAS,qBAAqB,SAAS,CAAC,IAC9D,wBAAwB,QAAQ;AAAA,EACpC,MAAM,gBAAgB,CAAC,GAAG,eAAe,GAAG,gBAAgB;AAAA,EAC5D,MAAM,UAA8B,CAAC;AAAA,EACrC,MAAM,aAAa,IAAI;AAAA,EACvB,WAAW,SAAS,eAAe;AAAA,IACjC,MAAM,SAAS,sBAAsB,KAAK;AAAA,IAC1C,IAAI,CAAC,UAAU,WAAW,IAAI,OAAO,KAAK,GAAG;AAAA,MAC3C;AAAA,IACF;AAAA,IACA,WAAW,IAAI,OAAO,KAAK;AAAA,IAC3B,QAAQ,KAAK,MAAM;AAAA,IACnB,IAAI,QAAQ,UAAU,iCAAiC;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,WAAW,GAAG;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,MAAM,eACJ,OAAO,QAAQ,UAAU,UAAU,UAAU;AAAA,EAC/C,MAAM,oBAAoB,OAAO,QAAQ,cACrC;AAAA,UAAa,kBAAkB,OAAO,QAAQ,WAAW,MACzD;AAAA,EACJ,MAAM,gBAAgB,OAAO,QAAQ;AAAA,EACrC,MAAM,gBAAgB,QAAQ,KAAK,CAAC,WAAW;AAAA,IAC7C,MAAM,QAAQ,cAAc,KAC1B,CAAC,cACC,UAAU,OAAO,OAAO,SAAS,UAAU,WAAW,OAAO,KACjE;AAAA,IACA,OAAO,gBACH,OAAO,WAAW,iBAAiB,OAAO,UAAU,gBACpD;AAAA,GACL;AAAA,EAED,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM,YAAY,wBAAwB,kBAAkB,OAAO,QAAQ,UAAU,IAAI;AAAA,MAC3F;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,QACR;AAAA,UACE,MAAM;AAAA,UACN,WAAW;AAAA,UACX,aAAa;AAAA,YACX,MAAM;AAAA,YACN,MAAM;AAAA,YACN,OAAO;AAAA,UACT;AAAA,UACA;AAAA,aACI,gBAAgB,EAAE,gBAAgB,cAAc,IAAI,CAAC;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,QACR;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;;AC3LK,SAAS,cAAc,CAAC,SAA0B;AAAA,EACvD,OAAO,QAAQ,WAAW,cAAc;AAAA;;;ACH1C,IAAM,mCAAmC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,0BAA0B;AAEhC,SAAS,2BAA2B,CACzC,WACS;AAAA,EACT,IAAI,CAAC;AAAA,IAAW,OAAO;AAAA,EACvB,OAAO,iCAAiC,KAAK,CAAC,YAC5C,QAAQ,KAAK,SAAS,CACxB;AAAA;AAGK,SAAS,8BAA8B,CAC5C,gBACQ;AAAA,EACR,OAAO,iBACH,qHACA;AAAA;;;AClBN,IAAM,yBAAyB;AAC/B,IAAM,uBAAuB;AAC7B,IAAM,mBAAmB,OAAO,aAAa,EAAE;AAC/C,IAAM,cAAc,GAAG;AACvB,IAAM,kBAAkB,GAAG;AAE3B,IAAM,kCAAkC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,gCACJ;AACF,IAAM,2CAA2C;AACjD,IAAM,+CACJ;AACF,IAAM,8CACJ;AAEF,IAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AACF;AA0BO,IAAM,2CACX;AAEK,IAAM,6CACX;AAEK,IAAM,4CACX;AAEK,IAAM,4CACX;AAEF,SAAS,6BAA6B,CAAC,OAAuB;AAAA,EAC5D,OAAO,MAAM,QAAQ,eAAe,EAAE;AAAA;AAGjC,SAAS,4BAA4B,CAC1C,WACoB;AAAA,EACpB,IAAI,CAAC;AAAA,IAAW;AAAA,EAChB,WAAW,WAAW,iBAAiB;AAAA,IACrC,MAAM,QAAQ,UAAU,MAAM,OAAO;AAAA,IACrC,MAAM,QAAQ,QAAQ,IAAI,KAAK;AAAA,IAC/B,IAAI,OAAO;AAAA,MACT,OAAO,8BAA8B,KAAK;AAAA,IAC5C;AAAA,EACF;AAAA,EACA;AAAA;AAGF,SAAS,sBAAsB,CAAC,WAA2B;AAAA,EACzD,IAAI,SAAS;AAAA,EACb,IAAI,SAAS;AAAA,EAEb,OAAO,SAAS,UAAU,QAAQ;AAAA,IAChC,MAAM,YAAY,UAAU,QAAQ,aAAa,MAAM;AAAA,IACvD,IAAI,cAAc,IAAI;AAAA,MACpB,UAAU,UAAU,MAAM,MAAM;AAAA,MAChC;AAAA,IACF;AAAA,IAEA,MAAM,aAAa,UAAU,QAC3B,iBACA,YAAY,YAAY,MAC1B;AAAA,IACA,IAAI,eAAe,IAAI;AAAA,MACrB,UAAU,UAAU,MAAM,MAAM;AAAA,MAChC;AAAA,IACF;AAAA,IAEA,MAAM,aAAa,UAAU,QAC3B,aACA,aAAa,gBAAgB,MAC/B;AAAA,IACA,IAAI,eAAe,IAAI;AAAA,MACrB,UAAU,UAAU,MAAM,MAAM;AAAA,MAChC;AAAA,IACF;AAAA,IAEA,MAAM,WAAW,UAAU,QACzB,iBACA,aAAa,YAAY,MAC3B;AAAA,IACA,IAAI,aAAa,IAAI;AAAA,MACnB,UAAU,UAAU,MAAM,MAAM;AAAA,MAChC;AAAA,IACF;AAAA,IAEA,UAAU,UAAU,MAAM,QAAQ,SAAS;AAAA,IAC3C,UAAU,UAAU,MAAM,aAAa,gBAAgB,QAAQ,UAAU;AAAA,IACzE,SAAS,WAAW,gBAAgB;AAAA,EACtC;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,iCAAiC,CAC/C,WACQ;AAAA,EACR,IAAI,CAAC;AAAA,IAAW,OAAO;AAAA,EAEvB,MAAM,uBAAuB,uBAAuB,SAAS;AAAA,EAE7D,OAAO,qBACJ,MAAM;AAAA,CAAI,EACV,OAAO,CAAC,SAAS;AAAA,IAChB,MAAM,UAAU,KAAK,KAAK;AAAA,IAC1B,IAAI,gBAAgB,KAAK,OAAO;AAAA,MAAG,OAAO;AAAA,IAC1C,IAAI,qBAAqB,KAAK,OAAO;AAAA,MAAG,OAAO;AAAA,IAC/C,OAAO;AAAA,GACR,EACA,KAAK;AAAA,CAAI,EACT,QAAQ,aAAa;AAAA,CAAI,EACzB,KAAK;AAAA;AAGV,SAAS,wBAAwB,CAAC,MAAc,WAA2B;AAAA,EACzE,IAAI,KAAK,UAAU;AAAA,IAAW,OAAO;AAAA,EACrC,OAAO,GAAG,KAAK,MAAM,GAAG,KAAK,IAAI,GAAG,YAAY,CAAC,CAAC,EAAE,QAAQ;AAAA;AAG9D,SAAS,uBAAuB,CAAC,WAA4B;AAAA,EAC3D,OACE,8BAA8B,KAAK,SAAS,KAC5C,6CAA6C,KAAK,SAAS,KAC1D,yCAAyC,KAAK,SAAS,KACtD,4CAA4C,KAAK,SAAS;AAAA;AAIzD,SAAS,+BAA+B,CAC7C,WACA,UAA+C,CAAC,GAClB;AAAA,EAC9B,MAAM,aAAa,kCAAkC,SAAS;AAAA,EAC9D,MAAM,eAAe,QAAQ,OAAO,KAAK;AAAA,EACzC,MAAM,QAAQ,gBAAgB,6BAA6B,SAAS;AAAA,EAEpE,IAAI,CAAC,cAAc,uBAAuB,KAAK,UAAU,GAAG;AAAA,IAC1D,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,wBAAwB,UAAU,GAAG;AAAA,IACvC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,4BAA4B,UAAU,GAAG;AAAA,IAC3C,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM,+BAA+B,QAAQ,kBAAkB,KAAK;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IACE,gCAAgC,KAAK,CAAC,YAAY,QAAQ,KAAK,UAAU,CAAC,GAC1E;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN;AAAA,EACF;AAAA;AAUK,SAAS,kCAAkC,CAChD,WACA,UAA8C,CAAC,GACvC;AAAA,EACR,MAAM,UAAU,gCAAgC,WAAW,OAAO;AAAA,EAClE,MAAM,YAAY,QAAQ,aAAa,OAAO;AAAA,EAC9C,MAAM,OAAO,yBAAyB,QAAQ,MAAM,SAAS;AAAA,EAE7D,IAAI,QAAQ,SAAS,qBAAqB;AAAA,IACxC,MAAM,SAAQ,CAAC,QAAQ,OAAO,IAAI;AAAA,IAClC,IAAI,QAAQ,OAAO;AAAA,MACjB,OAAM,KAAK,IAAI,WAAW,QAAQ,OAAO;AAAA,IAC3C;AAAA,IACA,OAAO,OAAM,KAAK;AAAA,CAAI;AAAA,EACxB;AAAA,EAEA,IAAI,QAAQ,SAAS,yBAAyB;AAAA,IAC5C,MAAM,SAAQ,CAAC,GAAG,QAAQ,UAAU,IAAI;AAAA,IACxC,IAAI,QAAQ,OAAO;AAAA,MACjB,OAAM,KAAK,IAAI,WAAW,QAAQ,OAAO;AAAA,IAC3C;AAAA,IACA,OAAO,OAAM,KAAK;AAAA,CAAI;AAAA,EACxB;AAAA,EAEA,IAAI,QAAQ,WAAW;AAAA,IACrB,MAAM,UAAU,KAAK,QAAQ,QAAQ,MAAW;AAAA,IAChD,MAAM,SAAQ,CAAC,GAAG,QAAQ,UAAU,OAAO,SAAS,KAAK;AAAA,IACzD,IAAI,QAAQ,OAAO;AAAA,MACjB,OAAM,KAAK,IAAI,WAAW,QAAQ,OAAO;AAAA,IAC3C;AAAA,IACA,OAAO,OAAM,KAAK;AAAA,CAAI;AAAA,EACxB;AAAA,EAEA,MAAM,QAAQ,CAAC,GAAG,QAAQ,UAAU,IAAI;AAAA,EACxC,IAAI,QAAQ,OAAO;AAAA,IACjB,MAAM,KAAK,IAAI,WAAW,QAAQ,OAAO;AAAA,EAC3C;AAAA,EACA,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;;;ACpQxB,IAAM,cAAc,OAAO,aAAa,EAAE;AAC1C,IAAM,iBAAiB,IAAI,OAAO,GAAG,qCAAqC,GAAG;AAC7E,IAAM,uBACJ;AACF,IAAM,iBACJ;AA6FK,SAAS,2BAA2B,CACzC,OACA,WACA,SAAS,OACD;AAAA,EACR,IAAI,MAAM,UAAU,WAAW;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EACA,IAAI,aAAa,OAAO,QAAQ;AAAA,IAC9B,OAAO,OAAO,MAAM,GAAG,KAAK,IAAI,GAAG,SAAS,CAAC;AAAA,EAC/C;AAAA,EACA,OAAO,GAAG,MAAM,MAAM,GAAG,YAAY,OAAO,MAAM,EAAE,QAAQ,IAAI;AAAA;AAGlE,SAAS,wBAAwB,CAAC,OAAuB;AAAA,EACvD,IAAI,SAAS;AAAA,EACb,SAAS,QAAQ,EAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AAAA,IACpD,MAAM,YAAY,MAAM,UAAU;AAAA,IAClC,MAAM,OAAO,UAAU,WAAW,CAAC;AAAA,IACnC,UACE,QAAQ,KACR,SAAS,MACT,SAAS,MACR,QAAQ,MAAM,QAAQ,MACvB,SAAS,MACL,MACA;AAAA,EACR;AAAA,EACA,OAAO;AAAA;AAUF,SAAS,2BAA2B,CAAC,OAAwB;AAAA,EAClE,MAAM,MAAM,OAAO,UAAU,WAAW,QAAQ,OAAO,SAAS,EAAE;AAAA,EAClE,MAAM,WAAW,IACd,QAAQ,gBAAgB,EAAE,EAC1B,QAAQ,sBAAsB,eAAe,EAC7C,QAAQ,gBAAgB,cAAc;AAAA,EACzC,OAAO,yBAAyB,QAAQ,EACrC,QAAQ,cAAc,GAAG,EACzB,QAAQ,gDAAgD,IAAS,EACjE,QAAQ,QAAQ,GAAG,EACnB,KAAK;AAAA;;;AC/IH,IAAM,iCAAiC;AACvC,IAAM,iCAAiC;AAE9C,IAAM,4BAA4B;AAE3B,SAAS,uBAAuB,CACrC,MACA,WACQ;AAAA,EACR,MAAM,aAAa,4BAA4B,IAAI,EAChD,QAAQ,SAAS,EAAE,EACnB,QAAQ,MAAM,KAAK,EACnB,QAAQ,QAAQ,GAAG,EACnB,KAAK;AAAA,EACR,OAAO,4BAA4B,YAAY,WAAW,KAAK;AAAA;AAG1D,SAAS,6BAA6B,CAAC,UAA0B;AAAA,EACtE,IAAI,aAAa,UAAU,aAAa,UAAU,aAAa,SAAS;AAAA,IACtE,OAAO;AAAA,EACT;AAAA,EACA,IACE,aAAa,UACb,aAAa,UACb,aAAa,kBACb,aAAa,mBACb,aAAa,gBACb;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,4BAA4B,CAC1C,OACe;AAAA,EACf,IAAI,MAAM,SAAS,aAAa,kBAAiB,MAAM,OAAO,GAAG;AAAA,IAC/D,OAAO,wBACL,8BAA8B,MAAM,OAAO,GAC3C,yBACF;AAAA,EACF;AAAA,EACA,IACE,MAAM,SAAS,UACf,CAAC,kBAAiB,MAAM,QAAQ,KAChC,MAAM,SAAS,YAAY,MAAM,kBACjC;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,WAAW,eAAe,CAAC,MAAM,WAAW,MAAM,WAAW,GAAG;AAAA,IAC9D,IAAI,CAAC,kBAAiB,WAAW,GAAG;AAAA,MAClC;AAAA,IACF;AAAA,IACA,MAAM,YAAY,wBAChB,aACA,yBACF;AAAA,IACA,IAAI,WAAW;AAAA,MACb,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,OAAO;AAAA;;ACjDT,IAAM,gCAAgC;AACtC,IAAM,iCAAiC;AAEvC,SAAS,iBAAiB,CACxB,SACA,gBACoB;AAAA,EACpB,IAAI,eAAe,OAAO,GAAG;AAAA,IAC3B;AAAA,EACF;AAAA,EACA,MAAM,OAAO,+BAA+B;AAAA,EAC5C,OAAO,kBAAkB,mBAAmB,YACxC,GAAG,qBAAqB,mBACxB;AAAA;AAGC,SAAS,sBAAsB,CAAC,UAG5B;AAAA,EACT,MAAM,UAAU,kBAAkB,SAAS,SAAS,SAAS,cAAc;AAAA,EAC3E,OAAO,UAAU,IAAI,yBAAyB;AAAA;AAGzC,SAAS,iCAAiC,CAC/C,MACA,UAC0B;AAAA,EAC1B,MAAM,SAAmB,CAAC;AAAA,EAC1B,IAAI,YAAY;AAAA,EAChB,OAAO,UAAU,SAAS,GAAG;AAAA,IAC3B,IAAI,UAAU,UAAU,+BAA+B;AAAA,MACrD,OAAO,KAAK,SAAS;AAAA,MACrB;AAAA,IACF;AAAA,IACA,IAAI,MAAM,UAAU,YAAY;AAAA,GAAM,6BAA6B;AAAA,IACnE,IAAI,OAAO,GAAG;AAAA,MACZ,MAAM,UAAU,YAAY,KAAK,6BAA6B;AAAA,IAChE;AAAA,IACA,IAAI,OAAO,GAAG;AAAA,MACZ,MAAM;AAAA,IACR;AAAA,IACA,OAAO,KAAK,UAAU,MAAM,GAAG,GAAG,CAAC;AAAA,IACnC,YAAY,UAAU,MAAM,GAAG;AAAA,EACjC;AAAA,EACA,MAAM,iBAAiB,OAAO,OAAO,CAAC,UAAU,MAAM,KAAK,EAAE,SAAS,CAAC;AAAA,EACvE,IAAI,eAAe,WAAW,KAAK,eAAe,SAAS,IAAI;AAAA,IAC7D;AAAA,EACF;AAAA,EACA,MAAM,SAAuB,eAAe,IAAI,CAAC,WAAW;AAAA,IAC1D,MAAM;AAAA,IACN,MAAM;AAAA,EACR,EAAE;AAAA,EACF,OAAO,KAAK;AAAA,IACV,MAAM;AAAA,IACN,UAAU,CAAC,EAAE,MAAM,UAAU,MAAM,SAAS,CAAC;AAAA,EAC/C,CAAC;AAAA,EACD,OAAO;AAAA;AA+EF,SAAS,4BAA4B,CAAC,YAA6B;AAAA,EACxE,OAAO,CAAC,CAAC,YAAY,aAAa,qBAAqB,WAAW,EAAE,SAClE,UACF;AAAA;AAGK,SAAS,gCAAgC,CAAC,WAA2B;AAAA,EAC1E,OAAO,mCAAmC,WAAW;AAAA,IACnD,WAAW;AAAA,IACX,WAAW;AAAA,EACb,CAAC;AAAA;;AC5GH,eAAe,iBAAiB,CAC9B,QACA,SACmC;AAAA,EACnC,MAAM,kBAAkB,QAAQ,mBAAmB,QAAQ;AAAA,EAC3D,IAAI,CAAC,iBAAiB;AAAA,IACpB,MAAM,IAAI,MACR,6FACF;AAAA,EACF;AAAA,EACA,MAAM,OAAO,2BAA2B,QAAQ,YAAY,EAAE;AAAA,EAC9D,IAAI,CAAC,MAAM;AAAA,IACT,MAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AAAA,EACA,MAAM,SAAoC;AAAA,IACxC,SAAS,QAAQ;AAAA,IACjB,WAAW;AAAA,IACX;AAAA,EACF;AAAA,EACA,IAAI,QAAQ,gBAAgB;AAAA,IAC1B,IAAI,CAAC,OAAO,gBAAgB;AAAA,MAC1B,MAAM,IAAI,MACR,0DACF;AAAA,IACF;AAAA,IACA,MAAM,OAAO,eAAe,MAAM;AAAA,EACpC,EAAO;AAAA,IACL,IAAI,CAAC,OAAO,aAAa;AAAA,MACvB,MAAM,IAAI,MAAM,wDAAwD;AAAA,IAC1E;AAAA,IACA,MAAM,OAAO,YAAY,MAAM;AAAA;AAAA,EAEjC,OAAO,EAAE,WAAW,gBAAgB;AAAA;AAGtC,SAAS,wBAAwB,CAC/B,SACuB;AAAA,EACvB,IAAI,CAAC,QAAQ,WAAW,CAAC,QAAQ,gBAAgB;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,uBAAuB;AAAA,IACtC,SAAS,QAAQ;AAAA,IACjB,gBAAgB,QAAQ;AAAA,EAC1B,CAAC;AAAA,EACD,IAAI,CAAC,UAAU;AAAA,IACb;AAAA,EACF;AAAA,EAEA,OAAO,kCAAkC,QAAQ,MAAM,QAAQ;AAAA;AAG1D,SAAS,wBAAwB,CACtC,QACoB;AAAA,EACpB,QAAQ,WAAW;AAAA,EACnB,OAAO;AAAA,SACC,YAAW,CACf,SACmC;AAAA,MACnC,IAAI,QAAQ,UAAU;AAAA,QACpB,OAAO,MAAM,kBAAkB,QAAQ,OAAO;AAAA,MAChD;AAAA,MACA,MAAM,WAAW,6BAA6B;AAAA,QAC5C,QAAQ,QAAQ;AAAA,QAChB,UAAU,QAAQ;AAAA,QAClB,kBAAkB,QAAQ;AAAA,MAC5B,CAAC;AAAA,MACD,MAAM,SAAS,yBAAyB,OAAO;AAAA,MAC/C,OAAO,MAAM,OAAO,YAAY;AAAA,QAC9B,SAAS,QAAQ;AAAA,QACjB,MAAM,QAAQ;AAAA,WACV,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,WACvB,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,MACjC,CAAC;AAAA;AAAA,SAGG,gBAAe,CAAC,SAA+C;AAAA,MACnE,MAAM,WAAW,6BAA6B;AAAA,QAC5C,QAAQ,QAAO;AAAA,QACf,UAAU,QAAO;AAAA,QACjB,kBAAkB,QAAO;AAAA,MAC3B,CAAC;AAAA,MACD,MAAM,OAAO,YAAY;AAAA,QACvB,SAAS,QAAO;AAAA,QAChB,MAAM,QAAO;AAAA,WACT,QAAO,SAAS,EAAE,QAAQ,QAAO,OAAO,IAAI,CAAC;AAAA,WAC7C,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,MACjC,CAAC;AAAA;AAAA,EAEL;AAAA;;ACzIF,IAAM,sCAAsC;AA0CrC,SAAS,2BAA2B,CAAC,QAIlB;AAAA,EACxB,MAAM,sBAAsB,IAAI;AAAA,EAChC,MAAM,uBAAuB,IAAI;AAAA,EACjC,MAAM,0BAA0B,IAAI;AAAA,EACpC,MAAM,6BAA6B,IAAI;AAAA,EACvC,MAAM,0BAA0B,IAAI;AAAA,EAIpC,MAAM,wBAAwB,IAAI;AAAA,EAElC,SAAS,kBAAkB,CAAC,QAA0C;AAAA,IACpE,OAAO,OAAO,YAAY,WACxB,kBAAiB,OAAO,OAAO,KAC/B,kBAAiB,OAAO,cAAc,IACpC,GAAG,OAAO,WAAW,OAAO,mBAC5B;AAAA;AAAA,EAGN,SAAS,oBAAoB,CAAC,QAA0C;AAAA,IACtE,IAAI,OAAO,YAAY,WAAW,CAAC,kBAAiB,OAAO,MAAM,GAAG;AAAA,MAClE,OAAO;AAAA,IACT;AAAA,IACA,MAAM,mBAAmB,6BAA6B,MAAM;AAAA,IAC5D,OAAO,kBAAiB,gBAAgB,IACpC,GAAG,OAAO,UAAU,qBACpB;AAAA;AAAA,EAGN,SAAS,yBAAyB,CAAC,QAA0C;AAAA,IAC3E,IAAI,OAAO,YAAY,WAAW,CAAC,kBAAiB,OAAO,MAAM,GAAG;AAAA,MAClE,OAAO;AAAA,IACT;AAAA,IACA,IACE,OAAO,aAAa,YACpB,qBAAqB,OAAO,MAAM,MAAM,UACxC;AAAA,MACA,MAAM,mBAAmB,2BAA2B,MAAM;AAAA,MAC1D,OAAO,kBAAiB,gBAAgB,IACpC,GAAG,OAAO,UAAU,qBACpB,GAAG,OAAO;AAAA,IAChB;AAAA,IACA,OAAO,qBAAqB,MAAM;AAAA;AAAA,EAGpC,SAAS,gBAAgB,CAAC,SAAmD;AAAA,IAC3E,MAAM,OAAO,IAAI;AAAA,IACjB,MAAM,SAA8B,CAAC;AAAA,IACrC,WAAW,UAAU,SAAS;AAAA,MAC5B,MAAM,MAAM,mBAAmB,MAAM;AAAA,MACrC,IAAI,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,qBAAqB,MAAM;AAAA,QAAG;AAAA,MAC5D,KAAK,IAAI,GAAG;AAAA,MACZ,OAAO,KAAK,MAAM;AAAA,IACpB;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,SAAS,cAAc,CAAC,KAAmB;AAAA,IACzC,MAAM,QAAQ,wBAAwB,IAAI,GAAG;AAAA,IAC7C,IAAI,OAAO;AAAA,MACT,aAAa,KAAK;AAAA,MAClB,wBAAwB,OAAO,GAAG;AAAA,IACpC;AAAA;AAAA,EAGF,eAAe,WAAW,CACxB,QACA,YACA,aACA,UAA+B,CAAC,GACd;AAAA,IAClB,MAAM,WAAW,mBAAmB,MAAM;AAAA,IAC1C,MAAM,WAAW,qBAAqB,MAAM;AAAA,IAC5C,MAAM,WAAW,6BAA6B,MAAM;AAAA,IACpD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;AAAA,MAAU,OAAO;AAAA,IAEhD,MAAM,YAAY,GAAG;AAAA,EAAe;AAAA,IACpC,IAAI,CAAC,QAAQ,SAAS,wBAAwB,IAAI,QAAQ,MAAM,WAAW;AAAA,MACzE,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,OAAO,UAAU;AAAA,IACvB,MAAM,cAAc,MAAM,OAAO,kBAAkB;AAAA,IACnD,MAAM,YAAY,YAAY,WAAW,SAAS;AAAA,IAClD,IAAI,CAAC;AAAA,MAAW,OAAO;AAAA,IAEvB,wBAAwB,IAAI,UAAU,SAAS;AAAA,IAC/C,MAAM,WACJ,2BAA2B,IAAI,QAAQ,KAAK,QAAQ,QAAQ;AAAA,IAC9D,MAAM,YAAY,SAAS,KAAK,YAAY;AAAA,MAC1C,IAAI;AAAA,QACF,MAAM,UAAU,KAAK,YAAY,WAAW,SAAS;AAAA,UACnD,YAAY,OAAO;AAAA,UACnB,WAAW;AAAA,UACX,QAAQ;AAAA,aACJ,aAAa,EAAE,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC;AAAA,QAC1D,CAAC;AAAA,QACD,IAAI;AAAA,UAAY,sBAAsB,OAAO,QAAQ;AAAA,QAChD;AAAA,gCAAsB,IAAI,QAAQ;AAAA,QACvC,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,QACd,IAAI,wBAAwB,IAAI,QAAQ,MAAM,WAAW;AAAA,UACvD,wBAAwB,OAAO,QAAQ;AAAA,QACzC;AAAA,QACA,QAAQ,KACN,qDACA,iBAAiB,QAAQ,MAAM,UAAU,KAC3C;AAAA,QACA,OAAO;AAAA;AAAA,KAEV;AAAA,IACD,MAAM,UAAU,UAAU,KAAK,MAAG;AAAA,MAAG;AAAA,KAAS;AAAA,IAC9C,2BAA2B,IAAI,UAAU,OAAO;AAAA,IAC3C,QAAQ,KAAK,MAAM;AAAA,MACtB,IAAI,2BAA2B,IAAI,QAAQ,MAAM,SAAS;AAAA,QACxD,2BAA2B,OAAO,QAAQ;AAAA,MAC5C;AAAA,KACD;AAAA,IACD,OAAO;AAAA;AAAA,EAGT,SAAS,iBAAiB,CAAC,KAAmB;AAAA,IAC5C,eAAe,GAAG;AAAA,IAClB,MAAM,QAAQ,WAAW,MAAM;AAAA,MAC7B,wBAAwB,OAAO,GAAG;AAAA,OAC5B,YAAY;AAAA,QAChB,MAAM,QAAQ,oBAAoB,IAAI,GAAG;AAAA,QACzC,MAAM,SAAS,qBAAqB,IAAI,GAAG;AAAA,QAC3C,IAAI,CAAC,OAAO,oBAAoB,CAAC;AAAA,UAAQ;AAAA,QACzC,MAAM,YAAY,QAAQ,MAAM,kBAAkB,MAAM,cAAc;AAAA,UACpE,OAAO;AAAA,QACT,CAAC;AAAA,QACD,IAAI,MAAM;AAAA,UAAkB,kBAAkB,GAAG;AAAA,SAChD;AAAA,OACF,mCAAmC;AAAA,IACtC,MAAM,QAAQ;AAAA,IACd,wBAAwB,IAAI,KAAK,KAAK;AAAA;AAAA,EAGxC,eAAe,QAAQ,CACrB,QACA,YACA,aACe;AAAA,IACf,MAAM,MAAM,mBAAmB,MAAM;AAAA,IACrC,IAAI,CAAC,OAAO,CAAC,qBAAqB,MAAM;AAAA,MAAG;AAAA,IAC3C,MAAM,QAAQ,oBAAoB,IAAI,GAAG,KAAK;AAAA,MAC5C,kBAAkB;AAAA,MAClB,cAAc;AAAA,MACd,kBAAkB;AAAA,IACpB;AAAA,IACA,IACE,MAAM,oBACN,MAAM,iBAAiB,eACvB,MAAM,qBAAqB,YAC3B;AAAA,MACA,qBAAqB,IAAI,KAAK,MAAM;AAAA,MACpC;AAAA,IACF;AAAA,IACA,MAAM,mBAAmB;AAAA,IACzB,MAAM,eAAe;AAAA,IACrB,MAAM,mBAAmB;AAAA,IACzB,oBAAoB,IAAI,KAAK,KAAK;AAAA,IAClC,qBAAqB,IAAI,KAAK,MAAM;AAAA,IACpC,MAAM,OAAO,MAAM,YAAY,QAAQ,YAAY,WAAW;AAAA,IAC9D,IAAI,QAAQ,MAAM;AAAA,MAAkB,kBAAkB,GAAG;AAAA,IACpD,SAAI,CAAC;AAAA,MAAM,MAAM,mBAAmB;AAAA;AAAA,EAG3C,SAAS,oBAAoB,CAAC,KAAmB;AAAA,IAC/C,eAAe,GAAG;AAAA,IAClB,MAAM,QAAQ,oBAAoB,IAAI,GAAG;AAAA,IACzC,IAAI;AAAA,MAAO,MAAM,mBAAmB;AAAA,IACpC,wBAAwB,OAAO,GAAG;AAAA,IAClC,qBAAqB,OAAO,GAAG;AAAA;AAAA,EAGjC,eAAe,UAAU,CAAC,QAA0C;AAAA,IAClE,MAAM,MAAM,mBAAmB,MAAM;AAAA,IACrC,IAAI,CAAC;AAAA,MAAK;AAAA,IACV,eAAe,GAAG;AAAA,IAClB,MAAM,QAAQ,oBAAoB,IAAI,GAAG;AAAA,IACzC,IAAI;AAAA,MAAO,MAAM,mBAAmB;AAAA,IACpC,wBAAwB,OAAO,GAAG;AAAA,IAClC,qBAAqB,OAAO,GAAG;AAAA,IAC/B,MAAM,YAAY,QAAQ,IAAI,IAAI,EAAE,OAAO,KAAK,CAAC;AAAA,IACjD,wBAAwB,OAAO,GAAG;AAAA,IAClC,oBAAoB,OAAO,GAAG;AAAA;AAAA,EAGhC,eAAe,UAAU,CAAC,QAA0C;AAAA,IAClE,MAAM,MAAM,mBAAmB,MAAM;AAAA,IACrC,MAAM,WAAW,qBAAqB,MAAM;AAAA,IAC5C,IACE,CAAC,OACD,CAAC,YACD,oBAAoB,IAAI,GAAG,GAAG,oBAC9B,sBAAsB,IAAI,QAAQ,GAClC;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM,YAAY,QAAQ,IAAI,IAAI,EAAE,OAAO,KAAK,CAAC;AAAA,IACjD,wBAAwB,OAAO,GAAG;AAAA;AAAA,EAGpC,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,CAAC,QAAc;AAAA,MAC5B,MAAM,MAAM,mBAAmB,MAAM;AAAA,MACrC,IAAI;AAAA,QAAK,qBAAqB,GAAG;AAAA;AAAA,IAEnC,yBAAyB,CAAC,KAAW;AAAA,MACnC,IACE,kBAAiB,IAAI,OAAO,KAC5B,kBAAiB,IAAI,cAAc,GACnC;AAAA,QACA,qBAAqB,GAAG,IAAI,WAAW,IAAI,gBAAgB;AAAA,QAC3D;AAAA,MACF;AAAA,MACA,MAAM,SAAS,oBAAoB,IAAI,UAAU,IAAI,gBAAgB;AAAA,MACrE,IAAI,CAAC;AAAA,QAAQ;AAAA,MACb,MAAM,OAAO,OAAO,uBAAuB,MAAM;AAAA,MACjD,YAAY,KAAK,WAAW,sBAAsB;AAAA,QAChD,IACE,OAAO,WAAW,IAAI,UACtB,6BAA6B,MAAM,MAAM,MACzC;AAAA,UACA,qBAAqB,GAAG;AAAA,QAC1B;AAAA,MACF;AAAA;AAAA,IAEF,eAAe,MAAM,MAAM,KAAK,qBAAqB,OAAO,CAAC;AAAA,IAC7D,KAAK,GAAS;AAAA,MACZ,WAAW,SAAS,wBAAwB,OAAO;AAAA,QAAG,aAAa,KAAK;AAAA,MACxE,oBAAoB,MAAM;AAAA,MAC1B,qBAAqB,MAAM;AAAA,MAC3B,wBAAwB,MAAM;AAAA,MAC9B,2BAA2B,MAAM;AAAA,MACjC,wBAAwB,MAAM;AAAA,MAC9B,sBAAsB,MAAM;AAAA;AAAA,EAEhC;AAAA;",
|
|
24
|
-
"debugId": "
|
|
23
|
+
"mappings": "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",
|
|
24
|
+
"debugId": "AB89B5DE30FF657764756E2164756E21",
|
|
25
25
|
"names": []
|
|
26
26
|
}
|
package/dist/gateway-core.js
CHANGED
|
@@ -2957,6 +2957,7 @@ Replies to routed Slack threads stay in the current thread automatically.` : "";
|
|
|
2957
2957
|
Replies to routed Telegram topics stay in the current topic automatically.` : "";
|
|
2958
2958
|
const slackCapabilities = discovery.activeChannels.includes("slack") ? [
|
|
2959
2959
|
hasAction("react") ? 'action="react" with emoji + messageId' : "",
|
|
2960
|
+
hasAction("list-custom-emojis") ? 'action="list-custom-emojis" to discover the workspace custom emoji names available for reactions' : "",
|
|
2960
2961
|
hasAction("upload-file") ? 'action="upload-file" with media' : "",
|
|
2961
2962
|
hasAction("download-file") ? 'action="download-file" with attachmentId + messageId' : ""
|
|
2962
2963
|
].filter(Boolean) : [];
|
|
@@ -3009,4 +3010,4 @@ export {
|
|
|
3009
3010
|
ChannelControlRequestCoordinator
|
|
3010
3011
|
};
|
|
3011
3012
|
|
|
3012
|
-
//# debugId=
|
|
3013
|
+
//# debugId=C71F91C15DBDCC8264756E2164756E21
|