@tutti-os/agent-gui 0.0.54 → 0.0.55

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.
@@ -6,9 +6,9 @@ import {
6
6
  projectAgentConversationVM,
7
7
  reconcileProjectedAgentConversationVM,
8
8
  useProjectedAgentConversation
9
- } from "../chunk-EXZH66UE.js";
9
+ } from "../chunk-GBAQVKQN.js";
10
10
  import "../chunk-ZFDO72FE.js";
11
- import "../chunk-JRA44NYI.js";
11
+ import "../chunk-NBTJEF3H.js";
12
12
  import "../chunk-Y35GDLP2.js";
13
13
  import "../chunk-LUGELG5V.js";
14
14
  import "../chunk-GL54NRMB.js";
@@ -2406,6 +2406,10 @@ aside.workspace-agents-status-panel
2406
2406
  white-space: nowrap;
2407
2407
  }
2408
2408
 
2409
+ .agent-gui-node__mention-palette-hint-item > span:last-child {
2410
+ font-size: 11px;
2411
+ }
2412
+
2409
2413
  .agent-gui-node__mention-palette-hint-button,
2410
2414
  .agent-gui-node__mention-palette-shortcut-button {
2411
2415
  appearance: none;
@@ -2427,10 +2431,11 @@ aside.workspace-agents-status-panel
2427
2431
  justify-content: center;
2428
2432
  height: 20px;
2429
2433
  min-width: 20px;
2434
+ border: 1px solid var(--line-2, var(--tutti-line-2));
2430
2435
  border-radius: 4px;
2431
2436
  background: color-mix(in srgb, var(--transparency-block) 72%, transparent);
2432
2437
  color: var(--agent-gui-text-secondary, var(--text-secondary));
2433
- font-size: 13px;
2438
+ font-size: 11px;
2434
2439
  font-weight: 600;
2435
2440
  line-height: 1;
2436
2441
  padding: 4px 6px;
@@ -2454,7 +2459,7 @@ aside.workspace-agents-status-panel
2454
2459
  .agent-gui-node__mention-palette-shortcut--arrow {
2455
2460
  width: 20px;
2456
2461
  min-width: 20px;
2457
- font-size: 13px;
2462
+ font-size: 11px;
2458
2463
  line-height: 1;
2459
2464
  padding: 0;
2460
2465
  }
@@ -2478,6 +2483,18 @@ aside.workspace-agents-status-panel
2478
2483
  --agent-mention-file-icon-size: 16px;
2479
2484
  }
2480
2485
 
2486
+ .agent-gui-node__mention-palette .rich-text-at-mention-palette__row-button,
2487
+ .agent-gui-node__mention-palette .rich-text-at-mention-palette__expand-button {
2488
+ min-height: 28px;
2489
+ padding-top: 4px;
2490
+ padding-bottom: 4px;
2491
+ }
2492
+
2493
+ .agent-gui-node__mention-palette
2494
+ .rich-text-at-mention-palette__empty-state-inner {
2495
+ width: min(100%, 52ch);
2496
+ }
2497
+
2481
2498
  .agent-gui-node__mention-file-thumb {
2482
2499
  display: inline-flex;
2483
2500
  align-items: center;
@@ -7620,12 +7637,12 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
7620
7637
  align-items: center;
7621
7638
  justify-content: space-between;
7622
7639
  gap: 8px;
7623
- padding: 8px 12px 4px;
7640
+ padding: 2px 12px;
7624
7641
  }
7625
7642
 
7626
7643
  .agent-gui-node__composer-input-group-hero
7627
7644
  .agent-gui-node__composer-project-row {
7628
- padding: 4px 12px 4px;
7645
+ padding: 2px 12px;
7629
7646
  }
7630
7647
 
7631
7648
  .agent-gui-node__composer-project-row .agent-gui-node__composer-menu-trigger {
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-WMQN7SZC.js";
6
6
  import {
7
7
  normalizeAgentSessionMentionTitle
8
- } from "./chunk-JRA44NYI.js";
8
+ } from "./chunk-NBTJEF3H.js";
9
9
  import {
10
10
  resolveAgentMentionFileThumbnailUrl,
11
11
  resolveAgentMentionFileVisualKind
@@ -2203,4 +2203,4 @@ export {
2203
2203
  AgentFileMentionPalette,
2204
2204
  AgentContextMentionPalette
2205
2205
  };
2206
- //# sourceMappingURL=chunk-7ZDLFTVL.js.map
2206
+ //# sourceMappingURL=chunk-7H4IH67L.js.map
@@ -23,7 +23,7 @@ import {
23
23
  formatAgentMentionMarkdown,
24
24
  mentionItemToAttrs,
25
25
  parseAgentMentionMarkdown
26
- } from "./chunk-JRA44NYI.js";
26
+ } from "./chunk-NBTJEF3H.js";
27
27
  import {
28
28
  fileChangeCountFromChanges,
29
29
  fileChangeEntriesFromChanges,
@@ -14956,4 +14956,4 @@ export {
14956
14956
  AgentConversationFlow,
14957
14957
  useProjectedAgentConversation
14958
14958
  };
14959
- //# sourceMappingURL=chunk-EXZH66UE.js.map
14959
+ //# sourceMappingURL=chunk-GBAQVKQN.js.map
@@ -657,6 +657,9 @@ function createAgentFileMentionExtension(options = {}) {
657
657
  allowSpaces: true,
658
658
  items: () => [],
659
659
  allow: ({ state, range }) => {
660
+ if (options.shouldSuppressSuggestion?.()) {
661
+ return false;
662
+ }
660
663
  if (range.from <= 1) {
661
664
  return true;
662
665
  }
@@ -1298,4 +1301,4 @@ export {
1298
1301
  mentionItemToAttrs,
1299
1302
  attrsToMentionItem
1300
1303
  };
1301
- //# sourceMappingURL=chunk-JRA44NYI.js.map
1304
+ //# sourceMappingURL=chunk-NBTJEF3H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../agent-gui/agentGuiNode/agentRichText/agentFileMentionExtension.ts","../agent-gui/agentGuiNode/agentRichText/AgentMentionNodeView.tsx","../agent-gui/agentGuiNode/agentRichText/agentRichTextCaretAnchor.ts"],"sourcesContent":["import { mergeAttributes, Node, type Editor, type Range } from \"@tiptap/core\";\nimport { PluginKey } from \"@tiptap/pm/state\";\nimport { ReactNodeViewRenderer } from \"@tiptap/react\";\nimport Suggestion, { exitSuggestion } from \"@tiptap/suggestion\";\nimport { isRichTextTriggerPrefixBoundary } from \"@tutti-os/ui-rich-text/editor\";\nimport {\n createRichTextLinkMarkdown,\n createRichTextMentionMarkdown,\n isRichTextMentionHref,\n parseRichTextMentionHref\n} from \"@tutti-os/ui-rich-text/core\";\nimport {\n resolveAgentMentionFileThumbnailUrl,\n resolveAgentMentionFileVisualKind\n} from \"../../shared/mentionFilePresentation\";\nimport { translate } from \"../../../i18n/index\";\nimport { AgentMentionNodeView } from \"./AgentMentionNodeView\";\nimport { AGENT_RICH_TEXT_CARET_ANCHOR } from \"./agentRichTextCaretAnchor\";\n\nexport type AgentFileMentionKind = \"file\" | \"directory\" | \"unknown\";\nexport type AgentMentionFileNavigationAction =\n | \"agent-generated-folder\"\n | \"agent-generated-folder-back\";\nexport type AgentMentionScope = \"my_sessions\" | \"collab_sessions\";\nexport type AgentMentionKind =\n | \"file\"\n | \"agent-target\"\n | \"session\"\n | \"workspace-app\"\n | \"workspace-reference\"\n | \"workspace-app-factory\"\n | \"workspace-issue\";\n\nexport type AgentMentionReferenceSource = \"app\" | \"task\";\n\nexport interface AgentMentionFileItem {\n kind: \"file\";\n path: string;\n href: string;\n name: string;\n entryKind: AgentFileMentionKind;\n directoryPath: string;\n score?: number;\n thumbnailUrl?: string | null;\n mentionNavigation?: AgentMentionFileNavigationAction;\n childCount?: number;\n}\n\nexport interface AgentMentionSessionItem {\n kind: \"session\";\n href: string;\n workspaceId: string;\n targetId: string;\n name: string;\n title: string;\n scope: AgentMentionScope;\n initiatorName: string;\n initiatorAvatarUrl?: string;\n agentName: string;\n status?: string;\n inputPreview?: string;\n summaryPreview?: string;\n updatedAtUnixMs?: number;\n}\n\nexport interface AgentMentionWorkspaceIssueItem {\n kind: \"workspace-issue\";\n href: string;\n workspaceId: string;\n targetId: string;\n topicId?: string;\n name: string;\n title: string;\n creatorName?: string;\n status?: string;\n contentPreview?: string;\n updatedAtUnixMs?: number;\n}\n\nexport interface AgentMentionWorkspaceAppItem {\n kind: \"workspace-app\";\n href: string;\n workspaceId: string;\n targetId: string;\n appId: string;\n name: string;\n description?: string;\n iconUrl?: string;\n /** 应用是否能够提供产物文件(reference),决定 @ 面板行末尾是否展示「查看产物」入口。 */\n referencesListSupported?: boolean;\n}\n\nexport interface AgentMentionAgentTargetItem {\n kind: \"agent-target\";\n href: string;\n workspaceId: string;\n targetId: string;\n name: string;\n description?: string;\n agentProviderId?: string;\n iconUrl?: string;\n}\n\nexport interface AgentMentionWorkspaceReferenceItem {\n kind: \"workspace-reference\";\n href: string;\n workspaceId: string;\n /** URI path id:source=app 时为 appId,source=task 时为 topicId。 */\n targetId: string;\n source: AgentMentionReferenceSource;\n /** 子级 id:app 子分组 / issueId。缺省表示整个 app / topic。 */\n groupId?: string;\n name: string;\n iconUrl?: string;\n /** 展示用文件数(来自 picker 节点 childCount);序列化不再展开文件。 */\n fileCount: number;\n}\n\nexport interface AgentMentionWorkspaceAppFactoryItem {\n kind: \"workspace-app-factory\";\n href: string;\n workspaceId: string;\n targetId: string;\n jobId: string;\n name: string;\n action?: string;\n contextPath?: string;\n}\n\nexport type AgentContextMentionItem =\n | AgentMentionFileItem\n | AgentMentionAgentTargetItem\n | AgentMentionSessionItem\n | AgentMentionWorkspaceAppItem\n | AgentMentionWorkspaceReferenceItem\n | AgentMentionWorkspaceAppFactoryItem\n | AgentMentionWorkspaceIssueItem;\n\nexport type AgentFileMentionItem = AgentContextMentionItem;\n\nexport interface AgentMentionSuggestionState {\n editor: Editor;\n range: Range;\n query: string;\n text: string;\n command: (item: AgentContextMentionItem) => void;\n clientRect?: (() => DOMRect | null) | null;\n}\n\nexport type AgentFileMentionSuggestionState = AgentMentionSuggestionState;\n\nexport interface AgentFileMentionExtensionOptions {\n enableSuggestions?: boolean;\n onSuggestionChange?: (state: AgentMentionSuggestionState | null) => void;\n onSuggestionKeyDown?: (event: KeyboardEvent) => boolean;\n removeActionAriaLabel?: string;\n renderAsLink?: boolean;\n shouldSuppressSuggestion?: () => boolean;\n}\n\nexport interface ParsedAgentMentionMarkdown {\n item: AgentContextMentionItem;\n end: number;\n}\n\nexport const agentFileMentionPluginKey = new PluginKey(\n \"agentFileMentionSuggestion\"\n);\n\nexport function exitAgentFileMentionSuggestion(editor: Editor): void {\n exitSuggestion(editor.view, agentFileMentionPluginKey);\n}\n\nexport function createAgentFileMentionExtension(\n options: AgentFileMentionExtensionOptions = {}\n): Node {\n return Node.create({\n name: \"agentFileMention\",\n group: \"inline\",\n inline: true,\n atom: true,\n selectable: false,\n\n addOptions() {\n return options;\n },\n\n addAttributes() {\n return {\n name: { default: \"\" },\n kind: { default: \"file\" },\n href: { default: \"\" },\n path: { default: \"\" },\n entryKind: { default: \"unknown\" },\n directoryPath: { default: \"\" },\n workspaceId: { default: \"\" },\n targetId: { default: \"\" },\n scope: { default: \"\" },\n title: { default: \"\" },\n initiatorName: { default: \"\" },\n agentName: { default: \"\" },\n status: { default: \"\" },\n inputPreview: { default: \"\" },\n summaryPreview: { default: \"\" },\n creatorName: { default: \"\" },\n topicId: { default: \"\" },\n appId: { default: \"\" },\n agentProviderId: { default: \"\" },\n jobId: { default: \"\" },\n action: { default: \"\" },\n contextPath: { default: \"\" },\n description: { default: \"\" },\n iconUrl: { default: \"\" },\n contentPreview: { default: \"\" },\n thumbnailUrl: { default: \"\" },\n source: { default: \"\" },\n groupId: { default: \"\" },\n fileCount: { default: \"\" }\n };\n },\n\n parseHTML() {\n return [\n {\n tag: \"span[data-agent-file-mention]\",\n getAttrs: parseAgentMentionHTMLElementAttrs\n },\n {\n tag: \"a[data-agent-file-mention]\",\n getAttrs: parseAgentMentionHTMLElementAttrs\n }\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n const item = attrsToMentionItem(HTMLAttributes);\n const fileThumbnailUrl =\n item.kind === \"file\"\n ? resolveAgentMentionFileThumbnailUrl(item)\n : undefined;\n const href = item.href;\n const tagName = options.renderAsLink ? \"a\" : \"span\";\n const visual = mentionVisual(item);\n const sessionVisual =\n item.kind === \"session\" ? sessionMentionVisual(item) : null;\n const sharedAttributes = {\n \"data-agent-file-mention\": \"true\",\n \"data-agent-mention-href\": href,\n \"data-agent-mention-kind\": item.kind,\n \"aria-label\":\n item.kind === \"file\"\n ? visual.primary\n : `${visual.kindLabel} ${visual.primary}`.trim()\n };\n return [\n tagName,\n mergeAttributes(HTMLAttributes, {\n ...sharedAttributes,\n ...(item.kind === \"file\"\n ? {\n \"data-agent-file-entry-kind\": item.entryKind,\n \"data-agent-file-directory-path\": item.directoryPath,\n \"data-agent-file-visual-kind\":\n resolveAgentMentionFileVisualKind(item)\n }\n : {}),\n ...(options.renderAsLink ? { href } : {}),\n ...((item.kind === \"workspace-app\" ||\n item.kind === \"agent-target\" ||\n item.kind === \"workspace-reference\") &&\n item.iconUrl\n ? { \"data-agent-mention-icon-url\": item.iconUrl }\n : {}),\n ...(item.kind === \"workspace-reference\"\n ? { \"data-agent-mention-file-count\": String(item.fileCount) }\n : {}),\n ...(fileThumbnailUrl\n ? { \"data-agent-mention-thumbnail-url\": fileThumbnailUrl }\n : {}),\n class:\n item.kind === \"file\"\n ? \"tsh-agent-object-token tsh-agent-object-token--file\"\n : \"tsh-agent-object-token tsh-agent-object-token--entity\"\n }),\n ...(item.kind === \"file\"\n ? [\n fileThumbnailUrl\n ? [\n \"span\",\n {\n class: \"agent-gui-node__mention-file-thumb\",\n \"data-agent-mention-file-thumb\": \"true\",\n \"aria-hidden\": \"true\"\n },\n [\n \"img\",\n {\n src: fileThumbnailUrl,\n alt: \"\",\n decoding: \"async\",\n loading: \"lazy\",\n draggable: \"false\"\n }\n ]\n ]\n : [\n \"span\",\n {\n class: \"tsh-agent-object-token__icon\",\n \"aria-hidden\": \"true\"\n },\n \"\"\n ],\n [\n \"span\",\n { class: \"tsh-agent-object-token__main\" },\n visual.primary\n ]\n ]\n : item.kind === \"session\"\n ? [\n [\n \"span\",\n {\n class: \"tsh-agent-object-token__kind\",\n \"aria-hidden\": \"true\"\n },\n [\n \"span\",\n {\n class: \"tsh-agent-object-token__kind-icon\",\n \"aria-hidden\": \"true\"\n },\n \"\"\n ]\n ],\n [\n \"span\",\n { class: \"tsh-agent-object-token__main\" },\n [\n \"span\",\n { class: \"tsh-agent-object-token__participant\" },\n sessionVisual?.participant ?? \"\"\n ],\n [\n \"span\",\n { class: \"tsh-agent-object-token__summary\" },\n sessionVisual?.summary ? ` ${sessionVisual.summary}` : \"\"\n ]\n ]\n ]\n : [\n [\n \"span\",\n {\n class: \"tsh-agent-object-token__kind\",\n \"aria-hidden\": \"true\"\n },\n [\n \"span\",\n {\n class: \"tsh-agent-object-token__kind-icon\",\n \"aria-hidden\": \"true\"\n },\n \"\"\n ]\n ],\n [\n \"span\",\n { class: \"tsh-agent-object-token__main\" },\n visual.primary\n ]\n ])\n ];\n },\n\n renderText({ node }) {\n return formatAgentMentionMarkdown(attrsToMentionItem(node.attrs ?? {}));\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(AgentMentionNodeView);\n },\n\n addProseMirrorPlugins() {\n if (options.enableSuggestions === false) {\n return [];\n }\n return [\n Suggestion<AgentContextMentionItem, AgentContextMentionItem>({\n editor: this.editor,\n pluginKey: agentFileMentionPluginKey,\n char: \"@\",\n allowedPrefixes: [\" \", \"\\n\", \"\\t\"],\n allowSpaces: true,\n items: () => [],\n allow: ({ state, range }) => {\n if (options.shouldSuppressSuggestion?.()) {\n return false;\n }\n if (range.from <= 1) {\n return true;\n }\n const previous = state.doc.textBetween(\n range.from - 1,\n range.from,\n \"\\n\",\n \"\\n\"\n );\n return isRichTextTriggerPrefixBoundary(previous, \"whitespace\");\n },\n command: ({ editor, range, props }) => {\n const prefixCaretAnchor =\n range.from <= 1 ||\n editor.state.doc.textBetween(\n Math.max(1, range.from - 1),\n range.from,\n \"\\n\",\n \"\\n\"\n ) === \"\\n\";\n editor\n .chain()\n .focus()\n .insertContentAt(range, [\n ...(prefixCaretAnchor\n ? ([\n {\n type: \"text\",\n text: AGENT_RICH_TEXT_CARET_ANCHOR\n }\n ] as const)\n : []),\n {\n type: this.name,\n attrs: mentionItemToAttrs(props)\n },\n { type: \"text\", text: \" \" }\n ])\n .run();\n },\n render: () => ({\n onStart: (props) => {\n options.onSuggestionChange?.({\n editor: props.editor,\n range: props.range,\n query: props.query,\n text: props.text,\n command: props.command,\n clientRect: props.clientRect\n });\n },\n onUpdate: (props) => {\n options.onSuggestionChange?.({\n editor: props.editor,\n range: props.range,\n query: props.query,\n text: props.text,\n command: props.command,\n clientRect: props.clientRect\n });\n },\n onExit: () => {\n options.onSuggestionChange?.(null);\n },\n onKeyDown: (props) =>\n options.onSuggestionKeyDown?.(props.event) ?? false\n })\n })\n ];\n }\n });\n}\n\nexport function normalizeAgentSessionMentionTitle(value: string): string {\n const trimmed = value.trim();\n const withoutMentionPrefix = trimmed.replace(/^@+/, \"\").trim();\n return withoutMentionPrefix || trimmed;\n}\n\nexport function formatAgentFileMentionMarkdown(\n name: string,\n path: string\n): string {\n return formatAgentMentionMarkdown({\n kind: \"file\",\n href: path,\n path,\n name,\n entryKind: \"unknown\",\n directoryPath: \"\"\n });\n}\n\nexport function formatAgentMentionMarkdown(\n item: AgentContextMentionItem\n): string {\n // 所有 entity(含 workspace-reference)统一序列化成单条 mention 链接。\n // workspace-reference 不再展开成文件路径——agent 拿到 URI 后经 skill+CLI 按需解析。\n if (item.kind === \"file\") {\n const label = item.name.trim().startsWith(\"@\")\n ? item.name\n : `@${item.name}`;\n return createRichTextLinkMarkdown({\n kind: \"file\",\n name: label,\n path: item.href\n });\n }\n if (item.kind === \"workspace-reference\") {\n return createRichTextMentionMarkdown({\n providerId: \"workspace-reference\",\n entityId: item.targetId,\n label: item.name,\n scope: {\n workspaceId: item.workspaceId,\n source: item.source,\n ...(item.groupId?.trim() ? { groupId: item.groupId.trim() } : {}),\n ...(item.fileCount > 0 ? { count: String(item.fileCount) } : {})\n }\n });\n }\n if (item.kind === \"agent-target\") {\n return createRichTextMentionMarkdown({\n providerId: \"agent-target\",\n entityId: item.targetId,\n label: item.name,\n scope: { workspaceId: item.workspaceId }\n });\n }\n const identity = parseRichTextMentionHref(item.href, item.name);\n return identity ? createRichTextMentionMarkdown(identity) : \"\";\n}\n\nfunction parseMentionFileCount(value: unknown): number {\n const parsed =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? Number.parseInt(value.trim(), 10)\n : Number.NaN;\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;\n}\n\nexport function parseAgentMentionMarkdown(\n value: string,\n start = 0\n): ParsedAgentMentionMarkdown | null {\n if (!value.startsWith(\"[\", start)) {\n return null;\n }\n\n let index = start + 1;\n const prefixedMention = value[index] === \"@\";\n if (prefixedMention) {\n index += 1;\n }\n let name = \"\";\n while (index < value.length) {\n const current = value[index];\n if (current === \"\\\\\") {\n const escaped = value[index + 1];\n if (escaped === \"\\\\\" || escaped === \"[\" || escaped === \"]\") {\n name += escaped;\n index += 2;\n continue;\n }\n name += current;\n index += 1;\n continue;\n }\n if (current === \"]\") {\n break;\n }\n name += current;\n index += 1;\n }\n\n if (value[index] !== \"]\" || value[index + 1] !== \"(\") {\n return null;\n }\n\n index += 2;\n let href = \"\";\n while (index < value.length) {\n const current = value[index];\n if (current === \"\\\\\") {\n const escaped = value[index + 1];\n if (escaped === \"\\\\\" || escaped === \")\") {\n href += escaped;\n index += 2;\n continue;\n }\n href += current;\n index += 1;\n continue;\n }\n if (current === \")\") {\n const item = parseMentionItemFromHref({ name, href });\n if (!item) {\n return null;\n }\n if (\n item.kind !== \"file\" &&\n !prefixedMention &&\n !isRichTextMentionHref(href)\n ) {\n return null;\n }\n return {\n item,\n end: index + 1\n };\n }\n href += current;\n index += 1;\n }\n\n return null;\n}\n\nexport function parseMentionItemFromHref(input: {\n name: string;\n href: string;\n}): AgentContextMentionItem | null {\n const href = input.href.trim();\n if (!href) {\n return null;\n }\n const mention = parseRichTextMentionHref(href, input.name);\n if (!mention && !isRichTextMentionHref(href)) {\n return {\n kind: \"file\",\n href,\n path: href,\n name: input.name,\n entryKind: isLocalDirectoryMentionHref(href) ? \"directory\" : \"unknown\",\n directoryPath: dirnameFromPath(href)\n };\n }\n if (!mention) {\n return null;\n }\n\n const resource = mention.providerId.trim().toLowerCase();\n const targetId = mention.entityId.trim();\n const workspaceId = mention.scope?.workspaceId?.trim() ?? \"\";\n const name = mention.label;\n if (resource === \"agent-session\") {\n if (!workspaceId) {\n return null;\n }\n return {\n kind: \"session\",\n href,\n workspaceId,\n targetId,\n name,\n title: name,\n scope: \"collab_sessions\",\n initiatorName: \"\",\n agentName: \"\"\n };\n }\n if (resource === \"workspace-issue\") {\n if (!workspaceId) {\n return null;\n }\n return {\n kind: \"workspace-issue\",\n href,\n workspaceId,\n targetId,\n topicId: mention.scope?.topicId?.trim() || undefined,\n name,\n title: name\n };\n }\n if (resource === \"workspace-app\") {\n if (!workspaceId) {\n return null;\n }\n return {\n kind: \"workspace-app\",\n href,\n workspaceId,\n targetId,\n appId: targetId,\n name\n };\n }\n if (resource === \"agent-target\") {\n if (!workspaceId) {\n return null;\n }\n return {\n kind: \"agent-target\",\n href,\n workspaceId,\n targetId,\n name\n };\n }\n if (resource === \"workspace-reference\") {\n if (!workspaceId) {\n return null;\n }\n const source = mention.scope?.source?.trim();\n if (source !== \"app\" && source !== \"task\") {\n return null;\n }\n return {\n kind: \"workspace-reference\",\n href,\n workspaceId,\n targetId,\n source,\n groupId: mention.scope?.groupId?.trim() || undefined,\n name,\n iconUrl: mention.scope?.icon?.trim() || undefined,\n fileCount: parseMentionFileCount(mention.scope?.count)\n };\n }\n if (resource === \"workspace-app-factory\") {\n return {\n kind: \"workspace-app-factory\",\n href,\n workspaceId,\n targetId,\n jobId: targetId === \"create\" ? \"\" : targetId,\n name:\n name ||\n translate(\"agentHost.agentGui.workspaceAppFactoryMentionFallback\"),\n action: mention.scope?.action?.trim() || undefined,\n contextPath: mention.scope?.contextPath?.trim() || undefined\n };\n }\n return null;\n}\n\nfunction isLocalDirectoryMentionHref(href: string): boolean {\n return href.endsWith(\"/\") && !/^[a-zA-Z][a-zA-Z\\d+.-]*:/.test(href);\n}\n\nexport function mentionItemToAttrs(\n item: AgentContextMentionItem\n): Record<string, string> {\n if (item.kind === \"file\") {\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n path: item.path,\n entryKind: item.entryKind,\n directoryPath: item.directoryPath,\n thumbnailUrl: resolveAgentMentionFileThumbnailUrl(item) ?? \"\"\n };\n }\n if (item.kind === \"session\") {\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n scope: item.scope,\n title: item.title,\n initiatorName: item.initiatorName,\n agentName: item.agentName,\n status: item.status ?? \"\",\n inputPreview: item.inputPreview ?? \"\",\n summaryPreview: item.summaryPreview ?? \"\"\n };\n }\n if (item.kind === \"workspace-app\") {\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n appId: item.appId,\n description: item.description ?? \"\",\n iconUrl: item.iconUrl ?? \"\"\n };\n }\n if (item.kind === \"agent-target\") {\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n description: item.description ?? \"\",\n agentProviderId: item.agentProviderId ?? \"\",\n iconUrl: item.iconUrl ?? \"\"\n };\n }\n if (item.kind === \"workspace-reference\") {\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n source: item.source,\n groupId: item.groupId ?? \"\",\n iconUrl: item.iconUrl ?? \"\",\n fileCount: String(item.fileCount)\n };\n }\n if (item.kind === \"workspace-app-factory\") {\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n jobId: item.jobId,\n action: item.action ?? \"\",\n contextPath: item.contextPath ?? \"\"\n };\n }\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n topicId: item.topicId ?? \"\",\n title: item.title,\n creatorName: item.creatorName ?? \"\",\n status: item.status ?? \"\",\n contentPreview: item.contentPreview ?? \"\"\n };\n}\n\nfunction workspaceMentionAttrs(\n workspaceId: string\n): Pick<AgentMentionSessionItem, \"workspaceId\"> {\n const normalizedWorkspaceId = workspaceId.trim();\n return {\n workspaceId: normalizedWorkspaceId\n };\n}\n\nexport function attrsToMentionItem(\n attrs: Record<string, unknown>\n): AgentContextMentionItem {\n const kind = normalizeMentionKind(attrs.kind);\n const name = typeof attrs.name === \"string\" ? attrs.name : \"\";\n const href =\n typeof attrs.href === \"string\" && attrs.href.trim() ? attrs.href : \"\";\n if (kind === \"session\") {\n const workspaceId = workspaceIdFromMentionAttrs(attrs);\n const targetId = typeof attrs.targetId === \"string\" ? attrs.targetId : \"\";\n return {\n kind,\n href,\n workspaceId,\n targetId,\n name,\n title:\n typeof attrs.title === \"string\" && attrs.title.trim()\n ? attrs.title\n : name,\n scope:\n attrs.scope === \"my_sessions\" || attrs.scope === \"collab_sessions\"\n ? attrs.scope\n : \"collab_sessions\",\n initiatorName:\n typeof attrs.initiatorName === \"string\" ? attrs.initiatorName : \"\",\n agentName: typeof attrs.agentName === \"string\" ? attrs.agentName : \"\",\n status: typeof attrs.status === \"string\" ? attrs.status : undefined,\n inputPreview:\n typeof attrs.inputPreview === \"string\" ? attrs.inputPreview : undefined,\n summaryPreview:\n typeof attrs.summaryPreview === \"string\"\n ? attrs.summaryPreview\n : undefined\n };\n }\n if (kind === \"workspace-issue\") {\n const workspaceId = workspaceIdFromMentionAttrs(attrs);\n const targetId = typeof attrs.targetId === \"string\" ? attrs.targetId : \"\";\n const topicId =\n typeof attrs.topicId === \"string\" && attrs.topicId.trim()\n ? attrs.topicId.trim()\n : undefined;\n return {\n kind,\n href,\n workspaceId,\n targetId,\n topicId,\n name,\n title:\n typeof attrs.title === \"string\" && attrs.title.trim()\n ? attrs.title\n : name,\n creatorName:\n typeof attrs.creatorName === \"string\" ? attrs.creatorName : undefined,\n status: typeof attrs.status === \"string\" ? attrs.status : undefined,\n contentPreview:\n typeof attrs.contentPreview === \"string\"\n ? attrs.contentPreview\n : undefined\n };\n }\n if (kind === \"workspace-app\") {\n const workspaceId = workspaceIdFromMentionAttrs(attrs);\n const appId =\n typeof attrs.appId === \"string\" && attrs.appId.trim()\n ? attrs.appId.trim()\n : typeof attrs.targetId === \"string\"\n ? attrs.targetId.trim()\n : \"\";\n return {\n kind,\n href,\n workspaceId,\n targetId: appId,\n appId,\n name,\n description:\n typeof attrs.description === \"string\" ? attrs.description : undefined,\n iconUrl:\n typeof attrs.iconUrl === \"string\" && attrs.iconUrl.trim()\n ? attrs.iconUrl.trim()\n : undefined\n };\n }\n if (kind === \"agent-target\") {\n const workspaceId = workspaceIdFromMentionAttrs(attrs);\n const targetId = typeof attrs.targetId === \"string\" ? attrs.targetId : \"\";\n return {\n kind,\n href,\n workspaceId,\n targetId,\n name,\n description:\n typeof attrs.description === \"string\" ? attrs.description : undefined,\n agentProviderId:\n typeof attrs.agentProviderId === \"string\" &&\n attrs.agentProviderId.trim()\n ? attrs.agentProviderId.trim()\n : undefined,\n iconUrl:\n typeof attrs.iconUrl === \"string\" && attrs.iconUrl.trim()\n ? attrs.iconUrl.trim()\n : undefined\n };\n }\n if (kind === \"workspace-reference\") {\n const workspaceId = workspaceIdFromMentionAttrs(attrs);\n const targetId =\n typeof attrs.targetId === \"string\" ? attrs.targetId.trim() : \"\";\n const source: AgentMentionReferenceSource =\n attrs.source === \"task\" ? \"task\" : \"app\";\n const groupId =\n typeof attrs.groupId === \"string\" && attrs.groupId.trim()\n ? attrs.groupId.trim()\n : undefined;\n const iconUrl =\n typeof attrs.iconUrl === \"string\" && attrs.iconUrl.trim()\n ? attrs.iconUrl.trim()\n : undefined;\n const fileCount = parseMentionFileCount(attrs.fileCount);\n return {\n kind,\n href,\n workspaceId,\n targetId,\n source,\n groupId,\n name,\n iconUrl,\n fileCount\n };\n }\n if (kind === \"workspace-app-factory\") {\n const workspaceId = workspaceIdFromMentionAttrs(attrs);\n const jobId =\n typeof attrs.jobId === \"string\" && attrs.jobId.trim()\n ? attrs.jobId.trim()\n : typeof attrs.targetId === \"string\"\n ? attrs.targetId.trim()\n : \"\";\n const action =\n typeof attrs.action === \"string\" && attrs.action.trim()\n ? attrs.action.trim()\n : undefined;\n const contextPath =\n typeof attrs.contextPath === \"string\" && attrs.contextPath.trim()\n ? attrs.contextPath.trim()\n : undefined;\n return {\n kind,\n href,\n workspaceId,\n targetId: jobId,\n jobId,\n name,\n action,\n contextPath\n };\n }\n const path =\n typeof attrs.path === \"string\" && attrs.path.trim()\n ? attrs.path\n : typeof attrs.href === \"string\"\n ? attrs.href\n : \"\";\n return {\n kind: \"file\",\n href: href || path,\n path,\n name,\n entryKind: normalizeEntryKind(attrs.entryKind),\n directoryPath:\n typeof attrs.directoryPath === \"string\" && attrs.directoryPath.trim()\n ? attrs.directoryPath\n : dirnameFromPath(path),\n thumbnailUrl: resolveAgentMentionFileThumbnailUrl({\n entryKind: normalizeEntryKind(attrs.entryKind),\n href: href || path,\n name,\n path,\n thumbnailUrl:\n typeof attrs.thumbnailUrl === \"string\" ? attrs.thumbnailUrl : undefined\n })\n };\n}\n\nfunction workspaceIdFromMentionAttrs(attrs: Record<string, unknown>): string {\n return typeof attrs.workspaceId === \"string\" ? attrs.workspaceId.trim() : \"\";\n}\n\nfunction parseAgentMentionHTMLElementAttrs(\n node: HTMLElement | string\n): Record<string, string> | false {\n if (typeof node === \"string\") {\n return false;\n }\n const href =\n node.getAttribute(\"data-agent-mention-href\") ||\n node.getAttribute(\"data-agent-link-href\") ||\n node.getAttribute(\"href\") ||\n \"\";\n const name =\n node.getAttribute(\"name\") ||\n (node.textContent ?? \"\").replace(/^@+/, \"\").trim();\n const parsedItem = href ? parseMentionItemFromHref({ name, href }) : null;\n const parsedAttrs = parsedItem ? mentionItemToAttrs(parsedItem) : {};\n const iconUrl = node.getAttribute(\"data-agent-mention-icon-url\") || \"\";\n const fileCount = node.getAttribute(\"data-agent-mention-file-count\") || \"\";\n return {\n ...parsedAttrs,\n name,\n kind:\n node.getAttribute(\"data-agent-mention-kind\") ||\n node.getAttribute(\"kind\") ||\n parsedAttrs.kind ||\n \"file\",\n href,\n ...(iconUrl ? { iconUrl } : {}),\n ...(fileCount ? { fileCount } : {})\n };\n}\n\nfunction normalizeMentionKind(value: unknown): AgentMentionKind {\n if (value === \"session\" || value === \"agent-session\") {\n return \"session\";\n }\n if (value === \"workspace-issue\") {\n return \"workspace-issue\";\n }\n if (value === \"workspace-app\") {\n return \"workspace-app\";\n }\n if (value === \"agent-target\") {\n return \"agent-target\";\n }\n if (value === \"workspace-reference\") {\n return \"workspace-reference\";\n }\n if (value === \"workspace-app-factory\") {\n return \"workspace-app-factory\";\n }\n return \"file\";\n}\n\nfunction normalizeEntryKind(value: unknown): AgentFileMentionKind {\n return value === \"directory\" || value === \"file\" ? value : \"unknown\";\n}\n\nfunction mentionVisual(item: AgentContextMentionItem): {\n kindLabel: string;\n primary: string;\n} {\n if (item.kind === \"file\") {\n return {\n kindLabel: \"File\",\n primary: item.name\n };\n }\n if (item.kind === \"session\") {\n const visual = sessionMentionVisual(item);\n return {\n kindLabel: \"Session\",\n primary: `${visual.participant} ${visual.summary}`.trim()\n };\n }\n if (item.kind === \"workspace-app\") {\n return {\n kindLabel: \"App\",\n primary: item.name\n };\n }\n if (item.kind === \"agent-target\") {\n return {\n kindLabel: \"Agent\",\n primary: item.name\n };\n }\n if (item.kind === \"workspace-app-factory\") {\n return {\n kindLabel: \"App Factory\",\n primary: item.name\n };\n }\n if (item.kind === \"workspace-reference\") {\n return {\n kindLabel: \"Reference\",\n primary: item.name\n };\n }\n return {\n kindLabel: \"Task\",\n primary: item.name\n };\n}\n\nfunction sessionMentionVisual(\n item: Extract<AgentContextMentionItem, { kind: \"session\" }>\n): {\n participant: string;\n summary: string;\n} {\n const initiatorName = item.initiatorName.trim();\n const agentName = item.agentName.trim();\n const title = normalizeAgentSessionMentionTitle(item.title);\n if (initiatorName && agentName) {\n const dottedTitle = parseDottedSessionMentionText(title);\n return {\n participant: `${initiatorName} & ${agentName}`,\n summary:\n dottedTitle?.summary ||\n (title && title !== item.name.trim()\n ? title\n : item.inputPreview?.trim() || \"\")\n };\n }\n\n const dottedName = parseDottedSessionMentionText(item.name);\n if (dottedName) {\n return {\n participant: dottedName.participant,\n summary: dottedName.summary\n };\n }\n\n return {\n participant: item.name.trim(),\n summary:\n title && title !== item.name.trim()\n ? title\n : item.inputPreview?.trim() || \"\"\n };\n}\n\nfunction parseDottedSessionMentionText(\n value: string\n): { participant: string; summary: string } | null {\n const parts = value\n .split(\"·\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (parts.length < 3) {\n return null;\n }\n return {\n participant: `${parts[0]} & ${parts[1]}`,\n summary: normalizeAgentSessionMentionTitle(parts.slice(2).join(\" \"))\n };\n}\n\nfunction dirnameFromPath(path: string): string {\n const parts = path.split(\"/\").filter(Boolean);\n if (parts.length <= 1) {\n return path.startsWith(\"/\") ? \"/\" : \"\";\n }\n return `/${parts.slice(0, -1).join(\"/\")}`;\n}\n","import { useEffect, useState, type JSX, type MouseEvent } from \"react\";\nimport { NodeViewWrapper, type NodeViewProps } from \"@tiptap/react\";\nimport {\n MentionPill,\n TruncatingPillLabel\n} from \"@tutti-os/ui-system/components\";\nimport { CloseIcon } from \"@tutti-os/ui-system/icons\";\nimport { useTranslation } from \"../../../i18n/index\";\nimport {\n resolveAgentMentionFileThumbnailUrl,\n resolveAgentMentionFileVisualKind\n} from \"../../shared/mentionFilePresentation\";\nimport { managedAgentRoundedIconUrl } from \"../../../shared/managedAgentIcons\";\nimport { AGENT_RICH_TEXT_CARET_ANCHOR } from \"./agentRichTextCaretAnchor\";\n\ntype AgentMentionNodeViewKind =\n | \"file\"\n | \"agent-target\"\n | \"session\"\n | \"workspace-app\"\n | \"workspace-reference\"\n | \"workspace-app-factory\"\n | \"workspace-issue\";\n\nfunction parseFileCountAttr(value: unknown): number {\n const parsed =\n typeof value === \"string\" ? Number.parseInt(value.trim(), 10) : Number.NaN;\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;\n}\n\ninterface AgentMentionNodeViewModel {\n ariaLabel: string;\n directoryPath: string;\n entryKind: string;\n href: string;\n iconUrl?: string;\n kind: AgentMentionNodeViewKind;\n label: string;\n summary?: string;\n thumbnailUrl?: string;\n /** 引用文件数量(workspace-reference 专用)。 */\n fileCount?: number;\n}\n\nfunction attrString(attrs: Record<string, unknown>, key: string): string {\n const value = attrs[key];\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction normalizeKind(value: string): AgentMentionNodeViewKind {\n if (value === \"session\" || value === \"agent-session\") {\n return \"session\";\n }\n if (value === \"workspace-issue\") {\n return \"workspace-issue\";\n }\n if (value === \"workspace-app\") {\n return \"workspace-app\";\n }\n if (value === \"workspace-reference\") {\n return \"workspace-reference\";\n }\n if (value === \"workspace-app-factory\") {\n return \"workspace-app-factory\";\n }\n if (value === \"agent-target\") {\n return \"agent-target\";\n }\n return \"file\";\n}\n\nfunction normalizeSessionTitle(value: string): string {\n const trimmed = value.trim();\n const withoutMentionPrefix = trimmed.replace(/^@+/, \"\").trim();\n return withoutMentionPrefix || trimmed;\n}\n\nfunction parseDottedSessionText(\n value: string\n): { participant: string; summary: string } | null {\n const parts = value\n .split(\"·\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (parts.length < 3) {\n return null;\n }\n return {\n participant: `${parts[0]} & ${parts[1]}`,\n summary: normalizeSessionTitle(parts.slice(2).join(\" \"))\n };\n}\n\nfunction sessionPresentation(attrs: Record<string, unknown>): {\n label: string;\n summary: string;\n} {\n const name = attrString(attrs, \"name\").trim();\n const initiatorName = attrString(attrs, \"initiatorName\").trim();\n const agentName = attrString(attrs, \"agentName\").trim();\n const title = normalizeSessionTitle(attrString(attrs, \"title\") || name);\n const inputPreview = attrString(attrs, \"inputPreview\").trim();\n\n if (initiatorName && agentName) {\n const dottedTitle = parseDottedSessionText(title);\n return {\n // i18n-check-ignore: Dynamic participant display names.\n label: `${initiatorName} & ${agentName}`,\n summary:\n dottedTitle?.summary || (title && title !== name ? title : inputPreview)\n };\n }\n\n const dottedName = parseDottedSessionText(name);\n if (dottedName) {\n return {\n label: dottedName.participant,\n summary: dottedName.summary\n };\n }\n\n return {\n label: name,\n summary: title && title !== name ? title : inputPreview\n };\n}\n\nfunction dirnameFromPath(path: string): string {\n const parts = path.split(\"/\").filter(Boolean);\n if (parts.length <= 1) {\n return path.startsWith(\"/\") ? \"/\" : \"\";\n }\n return `/${parts.slice(0, -1).join(\"/\")}`;\n}\n\nfunction mentionViewModel(\n attrs: Record<string, unknown>,\n t: (key: string) => string\n): AgentMentionNodeViewModel {\n const kind = normalizeKind(attrString(attrs, \"kind\"));\n const name = attrString(attrs, \"name\");\n const href = attrString(attrs, \"href\");\n\n if (kind === \"session\") {\n const presentation = sessionPresentation(attrs);\n const primary = `${presentation.label} ${presentation.summary}`.trim();\n return {\n ariaLabel:\n `${t(\"agentHost.agentGui.mentionKindSession\")} ${primary}`.trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n kind,\n label: presentation.label,\n summary: presentation.summary\n };\n }\n\n if (kind === \"workspace-issue\") {\n return {\n ariaLabel: `${t(\"agentHost.agentGui.mentionKindIssue\")} ${name}`.trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n kind,\n label: name\n };\n }\n\n if (kind === \"workspace-app\") {\n return {\n ariaLabel: `${t(\"agentHost.agentGui.mentionKindApp\")} ${name}`.trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n iconUrl: attrString(attrs, \"iconUrl\").trim() || undefined,\n kind,\n label: name\n };\n }\n\n if (kind === \"workspace-reference\") {\n return {\n ariaLabel: `${t(\"agentHost.agentGui.mentionKindApp\")} ${name}`.trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n iconUrl: attrString(attrs, \"iconUrl\").trim() || undefined,\n kind,\n label: name,\n fileCount: parseFileCountAttr(attrs.fileCount)\n };\n }\n\n if (kind === \"workspace-app-factory\") {\n return {\n ariaLabel:\n `${t(\"agentHost.agentGui.mentionKindAppFactory\")} ${name}`.trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n kind,\n label: name\n };\n }\n\n if (kind === \"agent-target\") {\n const agentProviderId = attrString(attrs, \"agentProviderId\").trim();\n return {\n ariaLabel: `${t(\"agentHost.agentGui.mentionKindAgent\")} ${name}`.trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n iconUrl:\n attrString(attrs, \"iconUrl\").trim() ||\n managedAgentRoundedIconUrl(agentProviderId),\n kind,\n label: name\n };\n }\n\n const path = attrString(attrs, \"path\") || href;\n const entryKind = attrString(attrs, \"entryKind\") || \"unknown\";\n return {\n ariaLabel: name,\n directoryPath: attrString(attrs, \"directoryPath\") || dirnameFromPath(path),\n entryKind,\n href: href || path,\n kind,\n label: name,\n thumbnailUrl: resolveAgentMentionFileThumbnailUrl({\n entryKind,\n href: href || path,\n name,\n path,\n thumbnailUrl: attrString(attrs, \"thumbnailUrl\")\n })\n };\n}\n\nfunction fileVisualKind(entryKind: string, path: string): string {\n return resolveAgentMentionFileVisualKind({ entryKind, path });\n}\n\nfunction hasPromptContentAfterMentionRemoval(\n doc: NodeViewProps[\"editor\"][\"state\"][\"doc\"]\n): boolean {\n let hasContent = false;\n doc.descendants((node) => {\n if (hasContent) {\n return false;\n }\n if (node.type.name === \"agentFileMention\") {\n hasContent = true;\n return false;\n }\n if (\n node.isText &&\n node.textContent.replaceAll(AGENT_RICH_TEXT_CARET_ANCHOR, \"\").trim()\n .length > 0\n ) {\n hasContent = true;\n return false;\n }\n return true;\n });\n return hasContent;\n}\n\nfunction AgentMentionLegacyFileNodeView({\n deleteNode,\n editor,\n extension,\n node,\n selected\n}: NodeViewProps): JSX.Element {\n const mention = mentionViewModel(node.attrs ?? {}, () => \"\");\n const [isEditable, setIsEditable] = useState(editor.isEditable);\n const extensionOptions = extension.options as {\n removeActionAriaLabel?: string;\n };\n const removeActionAriaLabel =\n typeof extensionOptions.removeActionAriaLabel === \"string\"\n ? extensionOptions.removeActionAriaLabel\n : undefined;\n\n useEffect(() => {\n const syncEditable = () => {\n setIsEditable(editor.isEditable);\n };\n\n syncEditable();\n editor.on(\"transaction\", syncEditable);\n editor.on(\"update\", syncEditable);\n return () => {\n editor.off(\"transaction\", syncEditable);\n editor.off(\"update\", syncEditable);\n };\n }, [editor]);\n\n const handleRemove = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n if (!editor.isEditable) {\n return;\n }\n deleteNode();\n if (!hasPromptContentAfterMentionRemoval(editor.state.doc)) {\n editor.commands.clearContent();\n }\n };\n\n return (\n <NodeViewWrapper\n as=\"span\"\n aria-label={mention.ariaLabel}\n className={`agent-rich-text-mention-node group tsh-agent-object-token tsh-agent-object-token--file ${\n selected ? \"is-selected\" : \"\"\n }`}\n contentEditable={false}\n data-agent-file-directory-path={mention.directoryPath}\n data-agent-file-entry-kind={mention.entryKind}\n data-agent-file-mention=\"true\"\n {...(mention.thumbnailUrl\n ? {}\n : {\n \"data-agent-file-visual-kind\": fileVisualKind(\n mention.entryKind,\n mention.href || mention.label\n )\n })}\n data-agent-mention-href={mention.href}\n data-agent-mention-kind={mention.kind}\n {...(mention.thumbnailUrl\n ? { \"data-agent-mention-thumbnail-url\": mention.thumbnailUrl }\n : {})}\n >\n {mention.thumbnailUrl ? (\n <span\n className=\"agent-gui-node__mention-file-thumb relative\"\n data-agent-mention-file-thumb=\"true\"\n aria-hidden={isEditable ? undefined : true}\n >\n <img\n src={mention.thumbnailUrl}\n alt=\"\"\n className={`h-full w-full object-cover transition-opacity ${\n isEditable\n ? \"group-hover:opacity-0 group-focus-within:opacity-0\"\n : \"\"\n }`}\n decoding=\"async\"\n loading=\"lazy\"\n draggable={false}\n />\n {isEditable ? (\n <button\n aria-label={removeActionAriaLabel}\n className=\"absolute left-1/2 top-1/2 inline-flex size-5 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-sm text-[var(--text-secondary)] opacity-0 transition-opacity hover:bg-transparency-block hover:text-[var(--text-primary)] focus-visible:opacity-100 group-hover:opacity-100\"\n type=\"button\"\n onMouseDown={handleRemove}\n >\n <CloseIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </span>\n ) : (\n <span\n className=\"relative grid size-4 shrink-0 place-items-center\"\n aria-hidden={isEditable ? undefined : true}\n >\n <span\n className={`tsh-agent-object-token__icon transition-opacity ${\n isEditable\n ? \"group-hover:opacity-0 group-focus-within:opacity-0\"\n : \"\"\n }`}\n aria-hidden=\"true\"\n />\n {isEditable ? (\n <button\n aria-label={removeActionAriaLabel}\n className=\"absolute left-1/2 top-1/2 inline-flex size-5 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-sm text-[var(--text-secondary)] opacity-0 transition-opacity hover:bg-transparency-block hover:text-[var(--text-primary)] focus-visible:opacity-100 group-hover:opacity-100\"\n type=\"button\"\n onMouseDown={handleRemove}\n >\n <CloseIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </span>\n )}\n <span className=\"tsh-agent-object-token__main\">{mention.label}</span>\n </NodeViewWrapper>\n );\n}\n\nexport function AgentMentionNodeView(props: NodeViewProps): JSX.Element {\n const { deleteNode, editor, extension, node, selected } = props;\n const { t } = useTranslation();\n const mention = mentionViewModel(node.attrs ?? {}, t);\n const [isEditable, setIsEditable] = useState(editor.isEditable);\n const extensionOptions = extension.options as {\n removeActionAriaLabel?: string;\n };\n const removeActionAriaLabel =\n typeof extensionOptions.removeActionAriaLabel === \"string\"\n ? extensionOptions.removeActionAriaLabel\n : undefined;\n\n useEffect(() => {\n const syncEditable = () => {\n setIsEditable(editor.isEditable);\n };\n\n syncEditable();\n editor.on(\"transaction\", syncEditable);\n editor.on(\"update\", syncEditable);\n return () => {\n editor.off(\"transaction\", syncEditable);\n editor.off(\"update\", syncEditable);\n };\n }, [editor]);\n\n const handleRemove = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n if (!editor.isEditable) {\n return;\n }\n deleteNode();\n if (!hasPromptContentAfterMentionRemoval(editor.state.doc)) {\n editor.commands.clearContent();\n }\n };\n\n if (mention.kind === \"file\") {\n return <AgentMentionLegacyFileNodeView {...props} />;\n }\n\n if (\n mention.kind === \"workspace-app\" ||\n mention.kind === \"workspace-reference\" ||\n mention.kind === \"agent-target\"\n ) {\n return (\n <NodeViewWrapper\n as=\"span\"\n aria-label={mention.ariaLabel}\n className={`agent-rich-text-mention-node inline-flex max-w-[min(100%,var(--agent-mention-max-width,16rem))] align-middle ${\n selected ? \"is-selected\" : \"\"\n }`}\n contentEditable={false}\n data-agent-file-mention=\"true\"\n data-agent-mention-href={mention.href}\n data-agent-mention-icon-url={mention.iconUrl}\n data-agent-mention-kind={mention.kind}\n >\n <span\n className=\"group relative top-0 inline-flex max-w-[min(100%,var(--agent-mention-max-width,16rem))] cursor-pointer items-center gap-1 overflow-hidden rounded-[4px] border border-transparent bg-transparent px-1 py-0 align-middle text-[13px] font-medium leading-6 text-[var(--agent-gui-mention-app-color,var(--tutti-purple))] no-underline transition-colors hover:border-transparent hover:bg-[color-mix(in_srgb,currentColor_12%,transparent)]\"\n data-agent-mention-kind={mention.kind}\n data-slot=\"mention-pill\"\n >\n <span\n aria-hidden={isEditable ? undefined : true}\n className=\"relative grid size-4 shrink-0 place-items-center overflow-hidden rounded-[4px] bg-block\"\n data-agent-mention-app-icon=\"true\"\n data-workspace-app-icon=\"true\"\n >\n {mention.iconUrl ? (\n <img\n src={mention.iconUrl}\n alt=\"\"\n className={`size-full object-cover transition-opacity ${\n isEditable\n ? \"group-hover:opacity-0 group-focus-within:opacity-0\"\n : \"\"\n }`}\n decoding=\"async\"\n loading=\"lazy\"\n draggable={false}\n />\n ) : (\n <span\n className={`tsh-agent-object-token__kind-icon size-4 transition-opacity ${\n isEditable\n ? \"group-hover:opacity-0 group-focus-within:opacity-0\"\n : \"\"\n }`}\n />\n )}\n {isEditable ? (\n <button\n aria-label={removeActionAriaLabel}\n className=\"absolute left-1/2 top-1/2 inline-flex size-5 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-sm text-[var(--text-secondary)] opacity-0 transition-opacity hover:bg-transparency-block hover:text-[var(--text-primary)] focus-visible:opacity-100 group-hover:opacity-100\"\n type=\"button\"\n onMouseDown={handleRemove}\n >\n <CloseIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </span>\n <TruncatingPillLabel tooltip={mention.label}>\n {mention.label}\n </TruncatingPillLabel>\n </span>\n </NodeViewWrapper>\n );\n }\n\n return (\n <NodeViewWrapper\n as=\"span\"\n className={`agent-rich-text-mention-node inline-flex max-w-[min(100%,var(--agent-mention-max-width,16rem))] align-middle ${\n selected ? \"is-selected\" : \"\"\n }`}\n contentEditable={false}\n >\n <MentionPill\n aria-label={mention.ariaLabel}\n className=\"top-0 h-6 py-0 align-middle leading-6\"\n data-agent-mention-href={mention.href}\n data-agent-mention-kind={mention.kind}\n kind={mention.kind === \"session\" ? \"session\" : \"issue\"}\n label={mention.label}\n removable={isEditable}\n removeButtonProps={\n isEditable\n ? {\n \"aria-label\": removeActionAriaLabel,\n onMouseDown: handleRemove\n }\n : undefined\n }\n summary={mention.summary}\n />\n </NodeViewWrapper>\n );\n}\n","export const AGENT_RICH_TEXT_CARET_ANCHOR = \"\\u200B\";\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAS,iBAAiB,YAAqC;AAC/D,SAAS,iBAAiB;AAC1B,SAAS,6BAA6B;AACtC,OAAO,cAAc,sBAAsB;AAC3C,SAAS,uCAAuC;AAChD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACVP,SAAS,WAAW,gBAA2C;AAC/D,SAAS,uBAA2C;AACpD;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;;;ACNnB,IAAM,+BAA+B;;;ADkVpC,SAKE,KALF;AA1TR,SAAS,mBAAmB,OAAwB;AAClD,QAAM,SACJ,OAAO,UAAU,WAAW,OAAO,SAAS,MAAM,KAAK,GAAG,EAAE,IAAI,OAAO;AACzE,SAAO,OAAO,SAAS,MAAM,KAAK,SAAS,IAAI,SAAS;AAC1D;AAgBA,SAAS,WAAW,OAAgC,KAAqB;AACvE,QAAM,QAAQ,MAAM,GAAG;AACvB,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,cAAc,OAAyC;AAC9D,MAAI,UAAU,aAAa,UAAU,iBAAiB;AACpD,WAAO;AAAA,EACT;AACA,MAAI,UAAU,mBAAmB;AAC/B,WAAO;AAAA,EACT;AACA,MAAI,UAAU,iBAAiB;AAC7B,WAAO;AAAA,EACT;AACA,MAAI,UAAU,uBAAuB;AACnC,WAAO;AAAA,EACT;AACA,MAAI,UAAU,yBAAyB;AACrC,WAAO;AAAA,EACT;AACA,MAAI,UAAU,gBAAgB;AAC5B,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAuB;AACpD,QAAM,UAAU,MAAM,KAAK;AAC3B,QAAM,uBAAuB,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAK;AAC7D,SAAO,wBAAwB;AACjC;AAEA,SAAS,uBACP,OACiD;AACjD,QAAM,QAAQ,MACX,MAAM,MAAG,EACT,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,OAAO;AACjB,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,aAAa,GAAG,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC;AAAA,IACtC,SAAS,sBAAsB,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,EACzD;AACF;AAEA,SAAS,oBAAoB,OAG3B;AACA,QAAM,OAAO,WAAW,OAAO,MAAM,EAAE,KAAK;AAC5C,QAAM,gBAAgB,WAAW,OAAO,eAAe,EAAE,KAAK;AAC9D,QAAM,YAAY,WAAW,OAAO,WAAW,EAAE,KAAK;AACtD,QAAM,QAAQ,sBAAsB,WAAW,OAAO,OAAO,KAAK,IAAI;AACtE,QAAM,eAAe,WAAW,OAAO,cAAc,EAAE,KAAK;AAE5D,MAAI,iBAAiB,WAAW;AAC9B,UAAM,cAAc,uBAAuB,KAAK;AAChD,WAAO;AAAA;AAAA,MAEL,OAAO,GAAG,aAAa,MAAM,SAAS;AAAA,MACtC,SACE,aAAa,YAAY,SAAS,UAAU,OAAO,QAAQ;AAAA,IAC/D;AAAA,EACF;AAEA,QAAM,aAAa,uBAAuB,IAAI;AAC9C,MAAI,YAAY;AACd,WAAO;AAAA,MACL,OAAO,WAAW;AAAA,MAClB,SAAS,WAAW;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS,SAAS,UAAU,OAAO,QAAQ;AAAA,EAC7C;AACF;AAEA,SAAS,gBAAgB,MAAsB;AAC7C,QAAM,QAAQ,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO;AAC5C,MAAI,MAAM,UAAU,GAAG;AACrB,WAAO,KAAK,WAAW,GAAG,IAAI,MAAM;AAAA,EACtC;AACA,SAAO,IAAI,MAAM,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC;AACzC;AAEA,SAAS,iBACP,OACA,GAC2B;AAC3B,QAAM,OAAO,cAAc,WAAW,OAAO,MAAM,CAAC;AACpD,QAAM,OAAO,WAAW,OAAO,MAAM;AACrC,QAAM,OAAO,WAAW,OAAO,MAAM;AAErC,MAAI,SAAS,WAAW;AACtB,UAAM,eAAe,oBAAoB,KAAK;AAC9C,UAAM,UAAU,GAAG,aAAa,KAAK,IAAI,aAAa,OAAO,GAAG,KAAK;AACrE,WAAO;AAAA,MACL,WACE,GAAG,EAAE,uCAAuC,CAAC,IAAI,OAAO,GAAG,KAAK;AAAA,MAClE,eAAe;AAAA,MACf,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO,aAAa;AAAA,MACpB,SAAS,aAAa;AAAA,IACxB;AAAA,EACF;AAEA,MAAI,SAAS,mBAAmB;AAC9B,WAAO;AAAA,MACL,WAAW,GAAG,EAAE,qCAAqC,CAAC,IAAI,IAAI,GAAG,KAAK;AAAA,MACtE,eAAe;AAAA,MACf,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,SAAS,iBAAiB;AAC5B,WAAO;AAAA,MACL,WAAW,GAAG,EAAE,mCAAmC,CAAC,IAAI,IAAI,GAAG,KAAK;AAAA,MACpE,eAAe;AAAA,MACf,WAAW;AAAA,MACX;AAAA,MACA,SAAS,WAAW,OAAO,SAAS,EAAE,KAAK,KAAK;AAAA,MAChD;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,SAAS,uBAAuB;AAClC,WAAO;AAAA,MACL,WAAW,GAAG,EAAE,mCAAmC,CAAC,IAAI,IAAI,GAAG,KAAK;AAAA,MACpE,eAAe;AAAA,MACf,WAAW;AAAA,MACX;AAAA,MACA,SAAS,WAAW,OAAO,SAAS,EAAE,KAAK,KAAK;AAAA,MAChD;AAAA,MACA,OAAO;AAAA,MACP,WAAW,mBAAmB,MAAM,SAAS;AAAA,IAC/C;AAAA,EACF;AAEA,MAAI,SAAS,yBAAyB;AACpC,WAAO;AAAA,MACL,WACE,GAAG,EAAE,0CAA0C,CAAC,IAAI,IAAI,GAAG,KAAK;AAAA,MAClE,eAAe;AAAA,MACf,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,SAAS,gBAAgB;AAC3B,UAAM,kBAAkB,WAAW,OAAO,iBAAiB,EAAE,KAAK;AAClE,WAAO;AAAA,MACL,WAAW,GAAG,EAAE,qCAAqC,CAAC,IAAI,IAAI,GAAG,KAAK;AAAA,MACtE,eAAe;AAAA,MACf,WAAW;AAAA,MACX;AAAA,MACA,SACE,WAAW,OAAO,SAAS,EAAE,KAAK,KAClC,2BAA2B,eAAe;AAAA,MAC5C;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,OAAO,WAAW,OAAO,MAAM,KAAK;AAC1C,QAAM,YAAY,WAAW,OAAO,WAAW,KAAK;AACpD,SAAO;AAAA,IACL,WAAW;AAAA,IACX,eAAe,WAAW,OAAO,eAAe,KAAK,gBAAgB,IAAI;AAAA,IACzE;AAAA,IACA,MAAM,QAAQ;AAAA,IACd;AAAA,IACA,OAAO;AAAA,IACP,cAAc,oCAAoC;AAAA,MAChD;AAAA,MACA,MAAM,QAAQ;AAAA,MACd;AAAA,MACA;AAAA,MACA,cAAc,WAAW,OAAO,cAAc;AAAA,IAChD,CAAC;AAAA,EACH;AACF;AAEA,SAAS,eAAe,WAAmB,MAAsB;AAC/D,SAAO,kCAAkC,EAAE,WAAW,KAAK,CAAC;AAC9D;AAEA,SAAS,oCACP,KACS;AACT,MAAI,aAAa;AACjB,MAAI,YAAY,CAAC,SAAS;AACxB,QAAI,YAAY;AACd,aAAO;AAAA,IACT;AACA,QAAI,KAAK,KAAK,SAAS,oBAAoB;AACzC,mBAAa;AACb,aAAO;AAAA,IACT;AACA,QACE,KAAK,UACL,KAAK,YAAY,WAAW,8BAA8B,EAAE,EAAE,KAAK,EAChE,SAAS,GACZ;AACA,mBAAa;AACb,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC;AACD,SAAO;AACT;AAEA,SAAS,+BAA+B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA+B;AAC7B,QAAM,UAAU,iBAAiB,KAAK,SAAS,CAAC,GAAG,MAAM,EAAE;AAC3D,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,OAAO,UAAU;AAC9D,QAAM,mBAAmB,UAAU;AAGnC,QAAM,wBACJ,OAAO,iBAAiB,0BAA0B,WAC9C,iBAAiB,wBACjB;AAEN,YAAU,MAAM;AACd,UAAM,eAAe,MAAM;AACzB,oBAAc,OAAO,UAAU;AAAA,IACjC;AAEA,iBAAa;AACb,WAAO,GAAG,eAAe,YAAY;AACrC,WAAO,GAAG,UAAU,YAAY;AAChC,WAAO,MAAM;AACX,aAAO,IAAI,eAAe,YAAY;AACtC,aAAO,IAAI,UAAU,YAAY;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,eAAe,CAAC,UAAyC;AAC7D,UAAM,eAAe;AACrB,UAAM,gBAAgB;AACtB,QAAI,CAAC,OAAO,YAAY;AACtB;AAAA,IACF;AACA,eAAW;AACX,QAAI,CAAC,oCAAoC,OAAO,MAAM,GAAG,GAAG;AAC1D,aAAO,SAAS,aAAa;AAAA,IAC/B;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,IAAG;AAAA,MACH,cAAY,QAAQ;AAAA,MACpB,WAAW,0FACT,WAAW,gBAAgB,EAC7B;AAAA,MACA,iBAAiB;AAAA,MACjB,kCAAgC,QAAQ;AAAA,MACxC,8BAA4B,QAAQ;AAAA,MACpC,2BAAwB;AAAA,MACvB,GAAI,QAAQ,eACT,CAAC,IACD;AAAA,QACE,+BAA+B;AAAA,UAC7B,QAAQ;AAAA,UACR,QAAQ,QAAQ,QAAQ;AAAA,QAC1B;AAAA,MACF;AAAA,MACJ,2BAAyB,QAAQ;AAAA,MACjC,2BAAyB,QAAQ;AAAA,MAChC,GAAI,QAAQ,eACT,EAAE,oCAAoC,QAAQ,aAAa,IAC3D,CAAC;AAAA,MAEJ;AAAA,gBAAQ,eACP;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,iCAA8B;AAAA,YAC9B,eAAa,aAAa,SAAY;AAAA,YAEtC;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,KAAK,QAAQ;AAAA,kBACb,KAAI;AAAA,kBACJ,WAAW,iDACT,aACI,uDACA,EACN;AAAA,kBACA,UAAS;AAAA,kBACT,SAAQ;AAAA,kBACR,WAAW;AAAA;AAAA,cACb;AAAA,cACC,aACC;AAAA,gBAAC;AAAA;AAAA,kBACC,cAAY;AAAA,kBACZ,WAAU;AAAA,kBACV,MAAK;AAAA,kBACL,aAAa;AAAA,kBAEb,8BAAC,aAAU,WAAU,YAAW;AAAA;AAAA,cAClC,IACE;AAAA;AAAA;AAAA,QACN,IAEA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAa,aAAa,SAAY;AAAA,YAEtC;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW,mDACT,aACI,uDACA,EACN;AAAA,kBACA,eAAY;AAAA;AAAA,cACd;AAAA,cACC,aACC;AAAA,gBAAC;AAAA;AAAA,kBACC,cAAY;AAAA,kBACZ,WAAU;AAAA,kBACV,MAAK;AAAA,kBACL,aAAa;AAAA,kBAEb,8BAAC,aAAU,WAAU,YAAW;AAAA;AAAA,cAClC,IACE;AAAA;AAAA;AAAA,QACN;AAAA,QAEF,oBAAC,UAAK,WAAU,gCAAgC,kBAAQ,OAAM;AAAA;AAAA;AAAA,EAChE;AAEJ;AAEO,SAAS,qBAAqB,OAAmC;AACtE,QAAM,EAAE,YAAY,QAAQ,WAAW,MAAM,SAAS,IAAI;AAC1D,QAAM,EAAE,EAAE,IAAI,eAAe;AAC7B,QAAM,UAAU,iBAAiB,KAAK,SAAS,CAAC,GAAG,CAAC;AACpD,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,OAAO,UAAU;AAC9D,QAAM,mBAAmB,UAAU;AAGnC,QAAM,wBACJ,OAAO,iBAAiB,0BAA0B,WAC9C,iBAAiB,wBACjB;AAEN,YAAU,MAAM;AACd,UAAM,eAAe,MAAM;AACzB,oBAAc,OAAO,UAAU;AAAA,IACjC;AAEA,iBAAa;AACb,WAAO,GAAG,eAAe,YAAY;AACrC,WAAO,GAAG,UAAU,YAAY;AAChC,WAAO,MAAM;AACX,aAAO,IAAI,eAAe,YAAY;AACtC,aAAO,IAAI,UAAU,YAAY;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,eAAe,CAAC,UAAyC;AAC7D,UAAM,eAAe;AACrB,UAAM,gBAAgB;AACtB,QAAI,CAAC,OAAO,YAAY;AACtB;AAAA,IACF;AACA,eAAW;AACX,QAAI,CAAC,oCAAoC,OAAO,MAAM,GAAG,GAAG;AAC1D,aAAO,SAAS,aAAa;AAAA,IAC/B;AAAA,EACF;AAEA,MAAI,QAAQ,SAAS,QAAQ;AAC3B,WAAO,oBAAC,kCAAgC,GAAG,OAAO;AAAA,EACpD;AAEA,MACE,QAAQ,SAAS,mBACjB,QAAQ,SAAS,yBACjB,QAAQ,SAAS,gBACjB;AACA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,cAAY,QAAQ;AAAA,QACpB,WAAW,gHACT,WAAW,gBAAgB,EAC7B;AAAA,QACA,iBAAiB;AAAA,QACjB,2BAAwB;AAAA,QACxB,2BAAyB,QAAQ;AAAA,QACjC,+BAA6B,QAAQ;AAAA,QACrC,2BAAyB,QAAQ;AAAA,QAEjC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,2BAAyB,QAAQ;AAAA,YACjC,aAAU;AAAA,YAEV;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,eAAa,aAAa,SAAY;AAAA,kBACtC,WAAU;AAAA,kBACV,+BAA4B;AAAA,kBAC5B,2BAAwB;AAAA,kBAEvB;AAAA,4BAAQ,UACP;AAAA,sBAAC;AAAA;AAAA,wBACC,KAAK,QAAQ;AAAA,wBACb,KAAI;AAAA,wBACJ,WAAW,6CACT,aACI,uDACA,EACN;AAAA,wBACA,UAAS;AAAA,wBACT,SAAQ;AAAA,wBACR,WAAW;AAAA;AAAA,oBACb,IAEA;AAAA,sBAAC;AAAA;AAAA,wBACC,WAAW,+DACT,aACI,uDACA,EACN;AAAA;AAAA,oBACF;AAAA,oBAED,aACC;AAAA,sBAAC;AAAA;AAAA,wBACC,cAAY;AAAA,wBACZ,WAAU;AAAA,wBACV,MAAK;AAAA,wBACL,aAAa;AAAA,wBAEb,8BAAC,aAAU,WAAU,YAAW;AAAA;AAAA,oBAClC,IACE;AAAA;AAAA;AAAA,cACN;AAAA,cACA,oBAAC,uBAAoB,SAAS,QAAQ,OACnC,kBAAQ,OACX;AAAA;AAAA;AAAA,QACF;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,IAAG;AAAA,MACH,WAAW,gHACT,WAAW,gBAAgB,EAC7B;AAAA,MACA,iBAAiB;AAAA,MAEjB;AAAA,QAAC;AAAA;AAAA,UACC,cAAY,QAAQ;AAAA,UACpB,WAAU;AAAA,UACV,2BAAyB,QAAQ;AAAA,UACjC,2BAAyB,QAAQ;AAAA,UACjC,MAAM,QAAQ,SAAS,YAAY,YAAY;AAAA,UAC/C,OAAO,QAAQ;AAAA,UACf,WAAW;AAAA,UACX,mBACE,aACI;AAAA,YACE,cAAc;AAAA,YACd,aAAa;AAAA,UACf,IACA;AAAA,UAEN,SAAS,QAAQ;AAAA;AAAA,MACnB;AAAA;AAAA,EACF;AAEJ;;;ADpXO,IAAM,4BAA4B,IAAI;AAAA,EAC3C;AACF;AAEO,SAAS,+BAA+B,QAAsB;AACnE,iBAAe,OAAO,MAAM,yBAAyB;AACvD;AAEO,SAAS,gCACd,UAA4C,CAAC,GACvC;AACN,SAAO,KAAK,OAAO;AAAA,IACjB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,YAAY;AAAA,IAEZ,aAAa;AACX,aAAO;AAAA,IACT;AAAA,IAEA,gBAAgB;AACd,aAAO;AAAA,QACL,MAAM,EAAE,SAAS,GAAG;AAAA,QACpB,MAAM,EAAE,SAAS,OAAO;AAAA,QACxB,MAAM,EAAE,SAAS,GAAG;AAAA,QACpB,MAAM,EAAE,SAAS,GAAG;AAAA,QACpB,WAAW,EAAE,SAAS,UAAU;AAAA,QAChC,eAAe,EAAE,SAAS,GAAG;AAAA,QAC7B,aAAa,EAAE,SAAS,GAAG;AAAA,QAC3B,UAAU,EAAE,SAAS,GAAG;AAAA,QACxB,OAAO,EAAE,SAAS,GAAG;AAAA,QACrB,OAAO,EAAE,SAAS,GAAG;AAAA,QACrB,eAAe,EAAE,SAAS,GAAG;AAAA,QAC7B,WAAW,EAAE,SAAS,GAAG;AAAA,QACzB,QAAQ,EAAE,SAAS,GAAG;AAAA,QACtB,cAAc,EAAE,SAAS,GAAG;AAAA,QAC5B,gBAAgB,EAAE,SAAS,GAAG;AAAA,QAC9B,aAAa,EAAE,SAAS,GAAG;AAAA,QAC3B,SAAS,EAAE,SAAS,GAAG;AAAA,QACvB,OAAO,EAAE,SAAS,GAAG;AAAA,QACrB,iBAAiB,EAAE,SAAS,GAAG;AAAA,QAC/B,OAAO,EAAE,SAAS,GAAG;AAAA,QACrB,QAAQ,EAAE,SAAS,GAAG;AAAA,QACtB,aAAa,EAAE,SAAS,GAAG;AAAA,QAC3B,aAAa,EAAE,SAAS,GAAG;AAAA,QAC3B,SAAS,EAAE,SAAS,GAAG;AAAA,QACvB,gBAAgB,EAAE,SAAS,GAAG;AAAA,QAC9B,cAAc,EAAE,SAAS,GAAG;AAAA,QAC5B,QAAQ,EAAE,SAAS,GAAG;AAAA,QACtB,SAAS,EAAE,SAAS,GAAG;AAAA,QACvB,WAAW,EAAE,SAAS,GAAG;AAAA,MAC3B;AAAA,IACF;AAAA,IAEA,YAAY;AACV,aAAO;AAAA,QACL;AAAA,UACE,KAAK;AAAA,UACL,UAAU;AAAA,QACZ;AAAA,QACA;AAAA,UACE,KAAK;AAAA,UACL,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,IAEA,WAAW,EAAE,eAAe,GAAG;AAC7B,YAAM,OAAO,mBAAmB,cAAc;AAC9C,YAAM,mBACJ,KAAK,SAAS,SACV,oCAAoC,IAAI,IACxC;AACN,YAAM,OAAO,KAAK;AAClB,YAAM,UAAU,QAAQ,eAAe,MAAM;AAC7C,YAAM,SAAS,cAAc,IAAI;AACjC,YAAM,gBACJ,KAAK,SAAS,YAAY,qBAAqB,IAAI,IAAI;AACzD,YAAM,mBAAmB;AAAA,QACvB,2BAA2B;AAAA,QAC3B,2BAA2B;AAAA,QAC3B,2BAA2B,KAAK;AAAA,QAChC,cACE,KAAK,SAAS,SACV,OAAO,UACP,GAAG,OAAO,SAAS,IAAI,OAAO,OAAO,GAAG,KAAK;AAAA,MACrD;AACA,aAAO;AAAA,QACL;AAAA,QACA,gBAAgB,gBAAgB;AAAA,UAC9B,GAAG;AAAA,UACH,GAAI,KAAK,SAAS,SACd;AAAA,YACE,8BAA8B,KAAK;AAAA,YACnC,kCAAkC,KAAK;AAAA,YACvC,+BACE,kCAAkC,IAAI;AAAA,UAC1C,IACA,CAAC;AAAA,UACL,GAAI,QAAQ,eAAe,EAAE,KAAK,IAAI,CAAC;AAAA,UACvC,IAAK,KAAK,SAAS,mBACjB,KAAK,SAAS,kBACd,KAAK,SAAS,0BAChB,KAAK,UACD,EAAE,+BAA+B,KAAK,QAAQ,IAC9C,CAAC;AAAA,UACL,GAAI,KAAK,SAAS,wBACd,EAAE,iCAAiC,OAAO,KAAK,SAAS,EAAE,IAC1D,CAAC;AAAA,UACL,GAAI,mBACA,EAAE,oCAAoC,iBAAiB,IACvD,CAAC;AAAA,UACL,OACE,KAAK,SAAS,SACV,wDACA;AAAA,QACR,CAAC;AAAA,QACD,GAAI,KAAK,SAAS,SACd;AAAA,UACE,mBACI;AAAA,YACE;AAAA,YACA;AAAA,cACE,OAAO;AAAA,cACP,iCAAiC;AAAA,cACjC,eAAe;AAAA,YACjB;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,gBACE,KAAK;AAAA,gBACL,KAAK;AAAA,gBACL,UAAU;AAAA,gBACV,SAAS;AAAA,gBACT,WAAW;AAAA,cACb;AAAA,YACF;AAAA,UACF,IACA;AAAA,YACE;AAAA,YACA;AAAA,cACE,OAAO;AAAA,cACP,eAAe;AAAA,YACjB;AAAA,YACA;AAAA,UACF;AAAA,UACJ;AAAA,YACE;AAAA,YACA,EAAE,OAAO,+BAA+B;AAAA,YACxC,OAAO;AAAA,UACT;AAAA,QACF,IACA,KAAK,SAAS,YACZ;AAAA,UACE;AAAA,YACE;AAAA,YACA;AAAA,cACE,OAAO;AAAA,cACP,eAAe;AAAA,YACjB;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,gBACE,OAAO;AAAA,gBACP,eAAe;AAAA,cACjB;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE;AAAA,YACA,EAAE,OAAO,+BAA+B;AAAA,YACxC;AAAA,cACE;AAAA,cACA,EAAE,OAAO,sCAAsC;AAAA,cAC/C,eAAe,eAAe;AAAA,YAChC;AAAA,YACA;AAAA,cACE;AAAA,cACA,EAAE,OAAO,kCAAkC;AAAA,cAC3C,eAAe,UAAU,IAAI,cAAc,OAAO,KAAK;AAAA,YACzD;AAAA,UACF;AAAA,QACF,IACA;AAAA,UACE;AAAA,YACE;AAAA,YACA;AAAA,cACE,OAAO;AAAA,cACP,eAAe;AAAA,YACjB;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,gBACE,OAAO;AAAA,gBACP,eAAe;AAAA,cACjB;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE;AAAA,YACA,EAAE,OAAO,+BAA+B;AAAA,YACxC,OAAO;AAAA,UACT;AAAA,QACF;AAAA,MACR;AAAA,IACF;AAAA,IAEA,WAAW,EAAE,KAAK,GAAG;AACnB,aAAO,2BAA2B,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,IACxE;AAAA,IAEA,cAAc;AACZ,aAAO,sBAAsB,oBAAoB;AAAA,IACnD;AAAA,IAEA,wBAAwB;AACtB,UAAI,QAAQ,sBAAsB,OAAO;AACvC,eAAO,CAAC;AAAA,MACV;AACA,aAAO;AAAA,QACL,WAA6D;AAAA,UAC3D,QAAQ,KAAK;AAAA,UACb,WAAW;AAAA,UACX,MAAM;AAAA,UACN,iBAAiB,CAAC,KAAK,MAAM,GAAI;AAAA,UACjC,aAAa;AAAA,UACb,OAAO,MAAM,CAAC;AAAA,UACd,OAAO,CAAC,EAAE,OAAO,MAAM,MAAM;AAC3B,gBAAI,QAAQ,2BAA2B,GAAG;AACxC,qBAAO;AAAA,YACT;AACA,gBAAI,MAAM,QAAQ,GAAG;AACnB,qBAAO;AAAA,YACT;AACA,kBAAM,WAAW,MAAM,IAAI;AAAA,cACzB,MAAM,OAAO;AAAA,cACb,MAAM;AAAA,cACN;AAAA,cACA;AAAA,YACF;AACA,mBAAO,gCAAgC,UAAU,YAAY;AAAA,UAC/D;AAAA,UACA,SAAS,CAAC,EAAE,QAAQ,OAAO,MAAM,MAAM;AACrC,kBAAM,oBACJ,MAAM,QAAQ,KACd,OAAO,MAAM,IAAI;AAAA,cACf,KAAK,IAAI,GAAG,MAAM,OAAO,CAAC;AAAA,cAC1B,MAAM;AAAA,cACN;AAAA,cACA;AAAA,YACF,MAAM;AACR,mBACG,MAAM,EACN,MAAM,EACN,gBAAgB,OAAO;AAAA,cACtB,GAAI,oBACC;AAAA,gBACC;AAAA,kBACE,MAAM;AAAA,kBACN,MAAM;AAAA,gBACR;AAAA,cACF,IACA,CAAC;AAAA,cACL;AAAA,gBACE,MAAM,KAAK;AAAA,gBACX,OAAO,mBAAmB,KAAK;AAAA,cACjC;AAAA,cACA,EAAE,MAAM,QAAQ,MAAM,IAAI;AAAA,YAC5B,CAAC,EACA,IAAI;AAAA,UACT;AAAA,UACA,QAAQ,OAAO;AAAA,YACb,SAAS,CAAC,UAAU;AAClB,sBAAQ,qBAAqB;AAAA,gBAC3B,QAAQ,MAAM;AAAA,gBACd,OAAO,MAAM;AAAA,gBACb,OAAO,MAAM;AAAA,gBACb,MAAM,MAAM;AAAA,gBACZ,SAAS,MAAM;AAAA,gBACf,YAAY,MAAM;AAAA,cACpB,CAAC;AAAA,YACH;AAAA,YACA,UAAU,CAAC,UAAU;AACnB,sBAAQ,qBAAqB;AAAA,gBAC3B,QAAQ,MAAM;AAAA,gBACd,OAAO,MAAM;AAAA,gBACb,OAAO,MAAM;AAAA,gBACb,MAAM,MAAM;AAAA,gBACZ,SAAS,MAAM;AAAA,gBACf,YAAY,MAAM;AAAA,cACpB,CAAC;AAAA,YACH;AAAA,YACA,QAAQ,MAAM;AACZ,sBAAQ,qBAAqB,IAAI;AAAA,YACnC;AAAA,YACA,WAAW,CAAC,UACV,QAAQ,sBAAsB,MAAM,KAAK,KAAK;AAAA,UAClD;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,kCAAkC,OAAuB;AACvE,QAAM,UAAU,MAAM,KAAK;AAC3B,QAAM,uBAAuB,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAK;AAC7D,SAAO,wBAAwB;AACjC;AAgBO,SAAS,2BACd,MACQ;AAGR,MAAI,KAAK,SAAS,QAAQ;AACxB,UAAM,QAAQ,KAAK,KAAK,KAAK,EAAE,WAAW,GAAG,IACzC,KAAK,OACL,IAAI,KAAK,IAAI;AACjB,WAAO,2BAA2B;AAAA,MAChC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM,KAAK;AAAA,IACb,CAAC;AAAA,EACH;AACA,MAAI,KAAK,SAAS,uBAAuB;AACvC,WAAO,8BAA8B;AAAA,MACnC,YAAY;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,OAAO;AAAA,QACL,aAAa,KAAK;AAAA,QAClB,QAAQ,KAAK;AAAA,QACb,GAAI,KAAK,SAAS,KAAK,IAAI,EAAE,SAAS,KAAK,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,QAC/D,GAAI,KAAK,YAAY,IAAI,EAAE,OAAO,OAAO,KAAK,SAAS,EAAE,IAAI,CAAC;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI,KAAK,SAAS,gBAAgB;AAChC,WAAO,8BAA8B;AAAA,MACnC,YAAY;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,OAAO,EAAE,aAAa,KAAK,YAAY;AAAA,IACzC,CAAC;AAAA,EACH;AACA,QAAM,WAAW,yBAAyB,KAAK,MAAM,KAAK,IAAI;AAC9D,SAAO,WAAW,8BAA8B,QAAQ,IAAI;AAC9D;AAEA,SAAS,sBAAsB,OAAwB;AACrD,QAAM,SACJ,OAAO,UAAU,WACb,QACA,OAAO,UAAU,WACf,OAAO,SAAS,MAAM,KAAK,GAAG,EAAE,IAChC,OAAO;AACf,SAAO,OAAO,SAAS,MAAM,KAAK,SAAS,IAAI,SAAS;AAC1D;AAEO,SAAS,0BACd,OACA,QAAQ,GAC2B;AACnC,MAAI,CAAC,MAAM,WAAW,KAAK,KAAK,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,QAAQ;AACpB,QAAM,kBAAkB,MAAM,KAAK,MAAM;AACzC,MAAI,iBAAiB;AACnB,aAAS;AAAA,EACX;AACA,MAAI,OAAO;AACX,SAAO,QAAQ,MAAM,QAAQ;AAC3B,UAAM,UAAU,MAAM,KAAK;AAC3B,QAAI,YAAY,MAAM;AACpB,YAAM,UAAU,MAAM,QAAQ,CAAC;AAC/B,UAAI,YAAY,QAAQ,YAAY,OAAO,YAAY,KAAK;AAC1D,gBAAQ;AACR,iBAAS;AACT;AAAA,MACF;AACA,cAAQ;AACR,eAAS;AACT;AAAA,IACF;AACA,QAAI,YAAY,KAAK;AACnB;AAAA,IACF;AACA,YAAQ;AACR,aAAS;AAAA,EACX;AAEA,MAAI,MAAM,KAAK,MAAM,OAAO,MAAM,QAAQ,CAAC,MAAM,KAAK;AACpD,WAAO;AAAA,EACT;AAEA,WAAS;AACT,MAAI,OAAO;AACX,SAAO,QAAQ,MAAM,QAAQ;AAC3B,UAAM,UAAU,MAAM,KAAK;AAC3B,QAAI,YAAY,MAAM;AACpB,YAAM,UAAU,MAAM,QAAQ,CAAC;AAC/B,UAAI,YAAY,QAAQ,YAAY,KAAK;AACvC,gBAAQ;AACR,iBAAS;AACT;AAAA,MACF;AACA,cAAQ;AACR,eAAS;AACT;AAAA,IACF;AACA,QAAI,YAAY,KAAK;AACnB,YAAM,OAAO,yBAAyB,EAAE,MAAM,KAAK,CAAC;AACpD,UAAI,CAAC,MAAM;AACT,eAAO;AAAA,MACT;AACA,UACE,KAAK,SAAS,UACd,CAAC,mBACD,CAAC,sBAAsB,IAAI,GAC3B;AACA,eAAO;AAAA,MACT;AACA,aAAO;AAAA,QACL;AAAA,QACA,KAAK,QAAQ;AAAA,MACf;AAAA,IACF;AACA,YAAQ;AACR,aAAS;AAAA,EACX;AAEA,SAAO;AACT;AAEO,SAAS,yBAAyB,OAGN;AACjC,QAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,QAAM,UAAU,yBAAyB,MAAM,MAAM,IAAI;AACzD,MAAI,CAAC,WAAW,CAAC,sBAAsB,IAAI,GAAG;AAC5C,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,MACZ,WAAW,4BAA4B,IAAI,IAAI,cAAc;AAAA,MAC7D,eAAeA,iBAAgB,IAAI;AAAA,IACrC;AAAA,EACF;AACA,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,QAAQ,WAAW,KAAK,EAAE,YAAY;AACvD,QAAM,WAAW,QAAQ,SAAS,KAAK;AACvC,QAAM,cAAc,QAAQ,OAAO,aAAa,KAAK,KAAK;AAC1D,QAAM,OAAO,QAAQ;AACrB,MAAI,aAAa,iBAAiB;AAChC,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP,eAAe;AAAA,MACf,WAAW;AAAA,IACb;AAAA,EACF;AACA,MAAI,aAAa,mBAAmB;AAClC,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,QAAQ,OAAO,SAAS,KAAK,KAAK;AAAA,MAC3C;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,aAAa,iBAAiB;AAChC,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP;AAAA,IACF;AAAA,EACF;AACA,MAAI,aAAa,gBAAgB;AAC/B,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,aAAa,uBAAuB;AACtC,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,IACT;AACA,UAAM,SAAS,QAAQ,OAAO,QAAQ,KAAK;AAC3C,QAAI,WAAW,SAAS,WAAW,QAAQ;AACzC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,QAAQ,OAAO,SAAS,KAAK,KAAK;AAAA,MAC3C;AAAA,MACA,SAAS,QAAQ,OAAO,MAAM,KAAK,KAAK;AAAA,MACxC,WAAW,sBAAsB,QAAQ,OAAO,KAAK;AAAA,IACvD;AAAA,EACF;AACA,MAAI,aAAa,yBAAyB;AACxC,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO,aAAa,WAAW,KAAK;AAAA,MACpC,MACE,QACA,UAAU,uDAAuD;AAAA,MACnE,QAAQ,QAAQ,OAAO,QAAQ,KAAK,KAAK;AAAA,MACzC,aAAa,QAAQ,OAAO,aAAa,KAAK,KAAK;AAAA,IACrD;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,4BAA4B,MAAuB;AAC1D,SAAO,KAAK,SAAS,GAAG,KAAK,CAAC,2BAA2B,KAAK,IAAI;AACpE;AAEO,SAAS,mBACd,MACwB;AACxB,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,WAAW,KAAK;AAAA,MAChB,eAAe,KAAK;AAAA,MACpB,cAAc,oCAAoC,IAAI,KAAK;AAAA,IAC7D;AAAA,EACF;AACA,MAAI,KAAK,SAAS,WAAW;AAC3B,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,GAAG,sBAAsB,KAAK,WAAW;AAAA,MACzC,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,eAAe,KAAK;AAAA,MACpB,WAAW,KAAK;AAAA,MAChB,QAAQ,KAAK,UAAU;AAAA,MACvB,cAAc,KAAK,gBAAgB;AAAA,MACnC,gBAAgB,KAAK,kBAAkB;AAAA,IACzC;AAAA,EACF;AACA,MAAI,KAAK,SAAS,iBAAiB;AACjC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,GAAG,sBAAsB,KAAK,WAAW;AAAA,MACzC,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,aAAa,KAAK,eAAe;AAAA,MACjC,SAAS,KAAK,WAAW;AAAA,IAC3B;AAAA,EACF;AACA,MAAI,KAAK,SAAS,gBAAgB;AAChC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,GAAG,sBAAsB,KAAK,WAAW;AAAA,MACzC,UAAU,KAAK;AAAA,MACf,aAAa,KAAK,eAAe;AAAA,MACjC,iBAAiB,KAAK,mBAAmB;AAAA,MACzC,SAAS,KAAK,WAAW;AAAA,IAC3B;AAAA,EACF;AACA,MAAI,KAAK,SAAS,uBAAuB;AACvC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,GAAG,sBAAsB,KAAK,WAAW;AAAA,MACzC,UAAU,KAAK;AAAA,MACf,QAAQ,KAAK;AAAA,MACb,SAAS,KAAK,WAAW;AAAA,MACzB,SAAS,KAAK,WAAW;AAAA,MACzB,WAAW,OAAO,KAAK,SAAS;AAAA,IAClC;AAAA,EACF;AACA,MAAI,KAAK,SAAS,yBAAyB;AACzC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,GAAG,sBAAsB,KAAK,WAAW;AAAA,MACzC,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK,UAAU;AAAA,MACvB,aAAa,KAAK,eAAe;AAAA,IACnC;AAAA,EACF;AACA,SAAO;AAAA,IACL,MAAM,KAAK;AAAA,IACX,MAAM,KAAK;AAAA,IACX,MAAM,KAAK;AAAA,IACX,GAAG,sBAAsB,KAAK,WAAW;AAAA,IACzC,UAAU,KAAK;AAAA,IACf,SAAS,KAAK,WAAW;AAAA,IACzB,OAAO,KAAK;AAAA,IACZ,aAAa,KAAK,eAAe;AAAA,IACjC,QAAQ,KAAK,UAAU;AAAA,IACvB,gBAAgB,KAAK,kBAAkB;AAAA,EACzC;AACF;AAEA,SAAS,sBACP,aAC8C;AAC9C,QAAM,wBAAwB,YAAY,KAAK;AAC/C,SAAO;AAAA,IACL,aAAa;AAAA,EACf;AACF;AAEO,SAAS,mBACd,OACyB;AACzB,QAAM,OAAO,qBAAqB,MAAM,IAAI;AAC5C,QAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAC3D,QAAM,OACJ,OAAO,MAAM,SAAS,YAAY,MAAM,KAAK,KAAK,IAAI,MAAM,OAAO;AACrE,MAAI,SAAS,WAAW;AACtB,UAAM,cAAc,4BAA4B,KAAK;AACrD,UAAM,WAAW,OAAO,MAAM,aAAa,WAAW,MAAM,WAAW;AACvE,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OACE,OAAO,MAAM,UAAU,YAAY,MAAM,MAAM,KAAK,IAChD,MAAM,QACN;AAAA,MACN,OACE,MAAM,UAAU,iBAAiB,MAAM,UAAU,oBAC7C,MAAM,QACN;AAAA,MACN,eACE,OAAO,MAAM,kBAAkB,WAAW,MAAM,gBAAgB;AAAA,MAClE,WAAW,OAAO,MAAM,cAAc,WAAW,MAAM,YAAY;AAAA,MACnE,QAAQ,OAAO,MAAM,WAAW,WAAW,MAAM,SAAS;AAAA,MAC1D,cACE,OAAO,MAAM,iBAAiB,WAAW,MAAM,eAAe;AAAA,MAChE,gBACE,OAAO,MAAM,mBAAmB,WAC5B,MAAM,iBACN;AAAA,IACR;AAAA,EACF;AACA,MAAI,SAAS,mBAAmB;AAC9B,UAAM,cAAc,4BAA4B,KAAK;AACrD,UAAM,WAAW,OAAO,MAAM,aAAa,WAAW,MAAM,WAAW;AACvE,UAAM,UACJ,OAAO,MAAM,YAAY,YAAY,MAAM,QAAQ,KAAK,IACpD,MAAM,QAAQ,KAAK,IACnB;AACN,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OACE,OAAO,MAAM,UAAU,YAAY,MAAM,MAAM,KAAK,IAChD,MAAM,QACN;AAAA,MACN,aACE,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc;AAAA,MAC9D,QAAQ,OAAO,MAAM,WAAW,WAAW,MAAM,SAAS;AAAA,MAC1D,gBACE,OAAO,MAAM,mBAAmB,WAC5B,MAAM,iBACN;AAAA,IACR;AAAA,EACF;AACA,MAAI,SAAS,iBAAiB;AAC5B,UAAM,cAAc,4BAA4B,KAAK;AACrD,UAAM,QACJ,OAAO,MAAM,UAAU,YAAY,MAAM,MAAM,KAAK,IAChD,MAAM,MAAM,KAAK,IACjB,OAAO,MAAM,aAAa,WACxB,MAAM,SAAS,KAAK,IACpB;AACR,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,aACE,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc;AAAA,MAC9D,SACE,OAAO,MAAM,YAAY,YAAY,MAAM,QAAQ,KAAK,IACpD,MAAM,QAAQ,KAAK,IACnB;AAAA,IACR;AAAA,EACF;AACA,MAAI,SAAS,gBAAgB;AAC3B,UAAM,cAAc,4BAA4B,KAAK;AACrD,UAAM,WAAW,OAAO,MAAM,aAAa,WAAW,MAAM,WAAW;AACvE,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aACE,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc;AAAA,MAC9D,iBACE,OAAO,MAAM,oBAAoB,YACjC,MAAM,gBAAgB,KAAK,IACvB,MAAM,gBAAgB,KAAK,IAC3B;AAAA,MACN,SACE,OAAO,MAAM,YAAY,YAAY,MAAM,QAAQ,KAAK,IACpD,MAAM,QAAQ,KAAK,IACnB;AAAA,IACR;AAAA,EACF;AACA,MAAI,SAAS,uBAAuB;AAClC,UAAM,cAAc,4BAA4B,KAAK;AACrD,UAAM,WACJ,OAAO,MAAM,aAAa,WAAW,MAAM,SAAS,KAAK,IAAI;AAC/D,UAAM,SACJ,MAAM,WAAW,SAAS,SAAS;AACrC,UAAM,UACJ,OAAO,MAAM,YAAY,YAAY,MAAM,QAAQ,KAAK,IACpD,MAAM,QAAQ,KAAK,IACnB;AACN,UAAM,UACJ,OAAO,MAAM,YAAY,YAAY,MAAM,QAAQ,KAAK,IACpD,MAAM,QAAQ,KAAK,IACnB;AACN,UAAM,YAAY,sBAAsB,MAAM,SAAS;AACvD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,SAAS,yBAAyB;AACpC,UAAM,cAAc,4BAA4B,KAAK;AACrD,UAAM,QACJ,OAAO,MAAM,UAAU,YAAY,MAAM,MAAM,KAAK,IAChD,MAAM,MAAM,KAAK,IACjB,OAAO,MAAM,aAAa,WACxB,MAAM,SAAS,KAAK,IACpB;AACR,UAAM,SACJ,OAAO,MAAM,WAAW,YAAY,MAAM,OAAO,KAAK,IAClD,MAAM,OAAO,KAAK,IAClB;AACN,UAAM,cACJ,OAAO,MAAM,gBAAgB,YAAY,MAAM,YAAY,KAAK,IAC5D,MAAM,YAAY,KAAK,IACvB;AACN,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,OACJ,OAAO,MAAM,SAAS,YAAY,MAAM,KAAK,KAAK,IAC9C,MAAM,OACN,OAAO,MAAM,SAAS,WACpB,MAAM,OACN;AACR,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,IACA,WAAW,mBAAmB,MAAM,SAAS;AAAA,IAC7C,eACE,OAAO,MAAM,kBAAkB,YAAY,MAAM,cAAc,KAAK,IAChE,MAAM,gBACNA,iBAAgB,IAAI;AAAA,IAC1B,cAAc,oCAAoC;AAAA,MAChD,WAAW,mBAAmB,MAAM,SAAS;AAAA,MAC7C,MAAM,QAAQ;AAAA,MACd;AAAA,MACA;AAAA,MACA,cACE,OAAO,MAAM,iBAAiB,WAAW,MAAM,eAAe;AAAA,IAClE,CAAC;AAAA,EACH;AACF;AAEA,SAAS,4BAA4B,OAAwC;AAC3E,SAAO,OAAO,MAAM,gBAAgB,WAAW,MAAM,YAAY,KAAK,IAAI;AAC5E;AAEA,SAAS,kCACP,MACgC;AAChC,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO;AAAA,EACT;AACA,QAAM,OACJ,KAAK,aAAa,yBAAyB,KAC3C,KAAK,aAAa,sBAAsB,KACxC,KAAK,aAAa,MAAM,KACxB;AACF,QAAM,OACJ,KAAK,aAAa,MAAM,MACvB,KAAK,eAAe,IAAI,QAAQ,OAAO,EAAE,EAAE,KAAK;AACnD,QAAM,aAAa,OAAO,yBAAyB,EAAE,MAAM,KAAK,CAAC,IAAI;AACrE,QAAM,cAAc,aAAa,mBAAmB,UAAU,IAAI,CAAC;AACnE,QAAM,UAAU,KAAK,aAAa,6BAA6B,KAAK;AACpE,QAAM,YAAY,KAAK,aAAa,+BAA+B,KAAK;AACxE,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA,MACE,KAAK,aAAa,yBAAyB,KAC3C,KAAK,aAAa,MAAM,KACxB,YAAY,QACZ;AAAA,IACF;AAAA,IACA,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC7B,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,EACnC;AACF;AAEA,SAAS,qBAAqB,OAAkC;AAC9D,MAAI,UAAU,aAAa,UAAU,iBAAiB;AACpD,WAAO;AAAA,EACT;AACA,MAAI,UAAU,mBAAmB;AAC/B,WAAO;AAAA,EACT;AACA,MAAI,UAAU,iBAAiB;AAC7B,WAAO;AAAA,EACT;AACA,MAAI,UAAU,gBAAgB;AAC5B,WAAO;AAAA,EACT;AACA,MAAI,UAAU,uBAAuB;AACnC,WAAO;AAAA,EACT;AACA,MAAI,UAAU,yBAAyB;AACrC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,OAAsC;AAChE,SAAO,UAAU,eAAe,UAAU,SAAS,QAAQ;AAC7D;AAEA,SAAS,cAAc,MAGrB;AACA,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AACA,MAAI,KAAK,SAAS,WAAW;AAC3B,UAAM,SAAS,qBAAqB,IAAI;AACxC,WAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS,GAAG,OAAO,WAAW,IAAI,OAAO,OAAO,GAAG,KAAK;AAAA,IAC1D;AAAA,EACF;AACA,MAAI,KAAK,SAAS,iBAAiB;AACjC,WAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AACA,MAAI,KAAK,SAAS,gBAAgB;AAChC,WAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AACA,MAAI,KAAK,SAAS,yBAAyB;AACzC,WAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AACA,MAAI,KAAK,SAAS,uBAAuB;AACvC,WAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AAAA,IACL,WAAW;AAAA,IACX,SAAS,KAAK;AAAA,EAChB;AACF;AAEA,SAAS,qBACP,MAIA;AACA,QAAM,gBAAgB,KAAK,cAAc,KAAK;AAC9C,QAAM,YAAY,KAAK,UAAU,KAAK;AACtC,QAAM,QAAQ,kCAAkC,KAAK,KAAK;AAC1D,MAAI,iBAAiB,WAAW;AAC9B,UAAM,cAAc,8BAA8B,KAAK;AACvD,WAAO;AAAA,MACL,aAAa,GAAG,aAAa,MAAM,SAAS;AAAA,MAC5C,SACE,aAAa,YACZ,SAAS,UAAU,KAAK,KAAK,KAAK,IAC/B,QACA,KAAK,cAAc,KAAK,KAAK;AAAA,IACrC;AAAA,EACF;AAEA,QAAM,aAAa,8BAA8B,KAAK,IAAI;AAC1D,MAAI,YAAY;AACd,WAAO;AAAA,MACL,aAAa,WAAW;AAAA,MACxB,SAAS,WAAW;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,aAAa,KAAK,KAAK,KAAK;AAAA,IAC5B,SACE,SAAS,UAAU,KAAK,KAAK,KAAK,IAC9B,QACA,KAAK,cAAc,KAAK,KAAK;AAAA,EACrC;AACF;AAEA,SAAS,8BACP,OACiD;AACjD,QAAM,QAAQ,MACX,MAAM,MAAG,EACT,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,OAAO;AACjB,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,aAAa,GAAG,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC;AAAA,IACtC,SAAS,kCAAkC,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,EACrE;AACF;AAEA,SAASA,iBAAgB,MAAsB;AAC7C,QAAM,QAAQ,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO;AAC5C,MAAI,MAAM,UAAU,GAAG;AACrB,WAAO,KAAK,WAAW,GAAG,IAAI,MAAM;AAAA,EACtC;AACA,SAAO,IAAI,MAAM,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC;AACzC;","names":["dirnameFromPath"]}
@@ -4,11 +4,11 @@ import {
4
4
  AgentMentionSearchController,
5
5
  flattenAgentMentionPaletteEntries,
6
6
  groupStartKeys
7
- } from "../chunk-7ZDLFTVL.js";
7
+ } from "../chunk-7H4IH67L.js";
8
8
  import "../chunk-PBHTLI3E.js";
9
9
  import "../chunk-WMQN7SZC.js";
10
10
  import "../chunk-IBIMGLCD.js";
11
- import "../chunk-JRA44NYI.js";
11
+ import "../chunk-NBTJEF3H.js";
12
12
  import "../chunk-Y35GDLP2.js";
13
13
  import "../chunk-LUGELG5V.js";
14
14
  import "../chunk-GL54NRMB.js";