@tutti-os/agent-gui 0.0.210 → 0.0.212
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 +3 -1
- package/dist/{AgentRichTextReadonly-DFWY2WYO.js → AgentRichTextReadonly-WWU4ZF7W.js} +5 -5
- package/dist/agent-conversation/index.d.ts +1 -1
- package/dist/agent-conversation/index.js +8 -8
- package/dist/agent-conversation/interactive-answer.d.ts +34 -0
- package/dist/agent-conversation/interactive-answer.js +11 -0
- package/dist/agent-conversation/interactive-answer.js.map +1 -0
- package/dist/agent-gui.d.ts +7 -4
- package/dist/agent-gui.js +16 -15
- package/dist/agent-message-center/index.js +8 -7
- package/dist/agent-message-center/index.js.map +1 -1
- package/dist/{agentFileMentionContracts-B0yQizXB.d.ts → agentFileMentionContracts-BeBex-Sf.d.ts} +5 -0
- package/dist/{agentGuiNodeTypes-DTeerTzS.d.ts → agentGuiNodeTypes-BMcpfKTn.d.ts} +5 -1
- package/dist/app/renderer/agentactivity.css +50 -0
- package/dist/app/renderer/assets/icons/agents/tutti-mode.png +0 -0
- package/dist/app/renderer/assets/icons/tutti-intensity-handle-balance.png +0 -0
- package/dist/app/renderer/assets/icons/tutti-intensity-handle-cost.png +0 -0
- package/dist/app/renderer/assets/icons/tutti-intensity-handle-powerful.png +0 -0
- package/dist/app/renderer/assets/icons/tutti-mode-lined.svg +3 -0
- package/dist/{chunk-6LXC5BME.js → chunk-4DAJ5SVX.js} +11 -5
- package/dist/chunk-4DAJ5SVX.js.map +1 -0
- package/dist/{chunk-Y6M27YYS.js → chunk-4IJYTGS2.js} +670 -619
- package/dist/chunk-4IJYTGS2.js.map +1 -0
- package/dist/{chunk-DKRX5IZS.js → chunk-5UOJCDLE.js} +8 -8
- package/dist/{chunk-M2VRYG7U.js → chunk-62LWOH3P.js} +13 -17
- package/dist/chunk-62LWOH3P.js.map +1 -0
- package/dist/{chunk-HXAOFFZJ.js → chunk-7LSLB7CN.js} +2 -2
- package/dist/{chunk-CKUR2VKA.js → chunk-BGNYUYLP.js} +2 -2
- package/dist/chunk-FMTWYOHM.js +25 -0
- package/dist/chunk-FMTWYOHM.js.map +1 -0
- package/dist/{chunk-JRYR2EA5.js → chunk-FRSV66P3.js} +171 -36
- package/dist/chunk-FRSV66P3.js.map +1 -0
- package/dist/{chunk-THRBLO2B.js → chunk-GXXPUEX6.js} +2 -2
- package/dist/{chunk-FWR5BZYR.js → chunk-JUL7J4VN.js} +2 -2
- package/dist/{chunk-RAO2PI3T.js → chunk-JVVLKTLR.js} +18 -32
- package/dist/chunk-JVVLKTLR.js.map +1 -0
- package/dist/{chunk-5RZVXSQQ.js → chunk-POU5WZNH.js} +7 -2
- package/dist/chunk-POU5WZNH.js.map +1 -0
- package/dist/{chunk-CCFYCSBK.js → chunk-RNBZBBI7.js} +13 -13
- package/dist/{chunk-VGPFDVSK.js → chunk-WSIGQG7C.js} +3 -3
- package/dist/{chunk-V2MU37VN.js → chunk-YJ27WHM3.js} +2 -2
- package/dist/context-mention-palette/index.d.ts +1 -1
- package/dist/context-mention-palette/index.js +8 -8
- package/dist/i18n/index.d.ts +12 -16
- package/dist/i18n/index.js +2 -2
- package/dist/index.d.ts +27 -21
- package/dist/index.js +17 -16
- package/dist/index.js.map +1 -1
- package/dist/mention-search.d.ts +2 -2
- package/dist/mention-search.js +6 -6
- package/dist/workbench/contribution.js +3 -3
- package/dist/workbench/index.js +6 -6
- package/dist/workbench/sessionTitle.js +2 -2
- package/package.json +21 -14
- package/dist/chunk-5RZVXSQQ.js.map +0 -1
- package/dist/chunk-6LXC5BME.js.map +0 -1
- package/dist/chunk-JRYR2EA5.js.map +0 -1
- package/dist/chunk-M2VRYG7U.js.map +0 -1
- package/dist/chunk-RAO2PI3T.js.map +0 -1
- package/dist/chunk-Y6M27YYS.js.map +0 -1
- /package/dist/{AgentRichTextReadonly-DFWY2WYO.js.map → AgentRichTextReadonly-WWU4ZF7W.js.map} +0 -0
- /package/dist/{chunk-DKRX5IZS.js.map → chunk-5UOJCDLE.js.map} +0 -0
- /package/dist/{chunk-HXAOFFZJ.js.map → chunk-7LSLB7CN.js.map} +0 -0
- /package/dist/{chunk-CKUR2VKA.js.map → chunk-BGNYUYLP.js.map} +0 -0
- /package/dist/{chunk-THRBLO2B.js.map → chunk-GXXPUEX6.js.map} +0 -0
- /package/dist/{chunk-FWR5BZYR.js.map → chunk-JUL7J4VN.js.map} +0 -0
- /package/dist/{chunk-CCFYCSBK.js.map → chunk-RNBZBBI7.js.map} +0 -0
- /package/dist/{chunk-VGPFDVSK.js.map → chunk-WSIGQG7C.js.map} +0 -0
- /package/dist/{chunk-V2MU37VN.js.map → chunk-YJ27WHM3.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../agent-gui/agentGuiNode/agentRichText/agentMentionMarkdown.ts","../agent-gui/agentGuiNode/agentRichText/agentRichTextCaretAnchor.ts","../agent-gui/agentGuiNode/agentRichText/AgentMentionNodeView.tsx","../agent-gui/agentGuiNode/agentRichText/agentMentionPresentation.ts","../agent-gui/agentGuiNode/model/agentExternalPromptFiles.ts","../agent-gui/agentGuiNode/agentRichText/agentFileMentionExtension.ts","../agent-gui/agentGuiNode/agentRichText/agentMentionAttrs.ts"],"sourcesContent":["import {\n createRichTextLinkMarkdown,\n createRichTextMarkdownLink,\n createRichTextMentionHref,\n createRichTextMentionMarkdown,\n isRichTextMentionHref,\n parseRichTextMentionHref\n} from \"@tutti-os/ui-rich-text/core\";\nimport { getAgentCustomMentionKind } from \"../../../shared/agentCustomMentionKinds\";\nimport { translate } from \"../../../i18n/index\";\nimport type {\n AgentContextMentionItem,\n AgentComposerFileMentionStatus,\n ParsedAgentMentionMarkdown\n} from \"./agentFileMentionContracts\";\n\nexport const AGENT_COMPOSER_FILE_MENTION_KIND = \"composer-file\";\n\nexport interface AgentComposerFileMentionReference {\n end: number;\n errorCode?: string;\n id: string;\n name: string;\n start: number;\n status: AgentComposerFileMentionStatus;\n}\n\nexport function createAgentComposerFileMentionMarkdown(input: {\n errorCode?: string;\n id: string;\n name: string;\n status: AgentComposerFileMentionStatus;\n}): string {\n return createRichTextMentionMarkdown({\n providerId: AGENT_COMPOSER_FILE_MENTION_KIND,\n entityId: input.id,\n label: input.name,\n scope: {\n ...(input.errorCode?.trim() ? { errorCode: input.errorCode.trim() } : {}),\n status: input.status\n }\n });\n}\n\nexport function 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\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 createAgentSessionMentionHref(input: {\n agentSessionId: string;\n agentTargetId?: string | null;\n label: string;\n workspaceId: string;\n}): string {\n const label = normalizeAgentSessionMarkdownLabel(input.label);\n const agentTargetId = input.agentTargetId?.trim() ?? \"\";\n return createRichTextMentionHref({\n providerId: \"agent-session\",\n entityId: input.agentSessionId,\n label,\n scope: {\n ...(agentTargetId ? { agentTargetId } : {}),\n workspaceId: input.workspaceId\n }\n });\n}\n\nexport interface CreateAgentSessionMarkdownLinkInput {\n agentSessionId: string;\n agentTargetId?: string | null;\n label: string;\n workspaceId: string;\n withAtPrefix: boolean;\n}\n\nexport function createAgentSessionMarkdownLink(\n input: CreateAgentSessionMarkdownLinkInput\n): string {\n const label = normalizeAgentSessionMarkdownLabel(input.label);\n const href = createAgentSessionMentionHref({\n agentSessionId: input.agentSessionId,\n agentTargetId: input.agentTargetId,\n label,\n workspaceId: input.workspaceId\n });\n return createRichTextMarkdownLink({\n href,\n label: input.withAtPrefix ? `@${label}` : label\n });\n}\n\nexport interface CreateAgentSessionHandoffPromptInput {\n agentSessionId: string;\n agentTargetId?: string | null;\n label: string;\n workspaceId: string;\n}\n\n/**\n * Builds the canonical composer draft for handing a complete Agent session to\n * another Agent. The trailing space is the editable caret anchor used by the\n * rich-text composer after the atomic session mention.\n */\nexport function createAgentSessionHandoffPrompt(\n input: CreateAgentSessionHandoffPromptInput\n): string {\n return `${createAgentSessionMarkdownLink({\n ...input,\n withAtPrefix: true\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 if (item.attachmentId) {\n return createAgentComposerFileMentionMarkdown({\n errorCode: item.attachmentErrorCode,\n id: item.attachmentId,\n name: item.name,\n status: item.attachmentStatus ?? \"ready\"\n });\n }\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 === \"session\") {\n return createAgentSessionMarkdownLink({\n agentSessionId: item.targetId,\n agentTargetId:\n item.agentTargetId ?? agentSessionTargetIdFromHref(item.href),\n label: item.title.trim() || item.name,\n workspaceId: item.workspaceId,\n withAtPrefix: true\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 if (item.kind === \"custom\") {\n const identity = parseRichTextMentionHref(item.href, item.sourceLabel);\n return identity ? createRichTextMentionMarkdown(identity) : \"\";\n }\n const identity = parseRichTextMentionHref(item.href, item.name);\n return identity ? createRichTextMentionMarkdown(identity) : \"\";\n}\n\nexport function materializeAgentCustomMentionPromptText(value: string): string {\n let cursor = 0;\n let result = \"\";\n while (cursor < value.length) {\n const mentionStart = value.indexOf(\"[\", cursor);\n if (mentionStart < 0) {\n result += value.slice(cursor);\n break;\n }\n const parsed = parseAgentMentionMarkdown(value, mentionStart);\n if (!parsed || parsed.item.kind !== \"custom\") {\n result += value.slice(cursor, mentionStart + 1);\n cursor = mentionStart + 1;\n continue;\n }\n const identity = parseRichTextMentionHref(\n parsed.item.href,\n parsed.item.sourceLabel\n );\n const definition = identity\n ? getAgentCustomMentionKind(parsed.item.customKind)\n : undefined;\n const materialized =\n identity && definition?.materializePromptText\n ? definition.materializePromptText(identity, parsed.item.href)\n : \"\";\n result += value.slice(cursor, mentionStart);\n result += materialized?.trim()\n ? materialized\n : value.slice(mentionStart, parsed.end);\n cursor = parsed.end;\n }\n return result;\n}\n\nfunction normalizeAgentSessionMarkdownLabel(value: string): string {\n return value.trim().replace(/^@+/, \"\").trim();\n}\n\nexport function agentSessionTargetIdFromHref(href: string): string | undefined {\n const mention = parseRichTextMentionHref(href, \"\");\n const agentTargetId = mention?.scope?.agentTargetId?.trim() ?? \"\";\n return agentTargetId || undefined;\n}\n\nexport function 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_COMPOSER_FILE_MENTION_KIND) {\n if (!targetId) {\n return null;\n }\n const status = normalizeAgentComposerFileMentionStatus(\n mention.scope?.status\n );\n return {\n kind: \"file\",\n href,\n path: \"\",\n name,\n entryKind: \"file\",\n directoryPath: \"\",\n attachmentId: targetId,\n attachmentStatus: status,\n attachmentErrorCode: mention.scope?.errorCode?.trim() || undefined\n };\n }\n if (resource === \"agent-session\") {\n if (!workspaceId) {\n return null;\n }\n return {\n kind: \"session\",\n href,\n workspaceId,\n targetId,\n agentTargetId: mention.scope?.agentTargetId?.trim() || undefined,\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 iconUrl: mention.scope?.icon?.trim() || undefined\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 const customDefinition = getAgentCustomMentionKind(resource);\n if (customDefinition) {\n const presentation = customDefinition.present(mention, href);\n if (!presentation) {\n return null;\n }\n return {\n kind: \"custom\",\n customKind: resource,\n href,\n workspaceId: presentation.workspaceId?.trim() || workspaceId,\n targetId,\n sourceLabel: mention.label,\n name: presentation.name.trim() || name,\n summary: presentation.summary?.trim() || undefined\n };\n }\n return null;\n}\n\nexport function agentComposerFileMentionReferences(\n value: string\n): AgentComposerFileMentionReference[] {\n const references: AgentComposerFileMentionReference[] = [];\n let cursor = 0;\n while (cursor < value.length) {\n const start = value.indexOf(\"[\", cursor);\n if (start < 0) break;\n const parsed = parseAgentMentionMarkdown(value, start);\n if (parsed?.item.kind === \"file\" && parsed.item.attachmentId) {\n references.push({\n start,\n end: parsed.end,\n errorCode: parsed.item.attachmentErrorCode,\n id: parsed.item.attachmentId,\n name: parsed.item.name,\n status: parsed.item.attachmentStatus ?? \"ready\"\n });\n cursor = parsed.end;\n continue;\n }\n cursor = start + 1;\n }\n return references;\n}\n\nexport interface AgentComposerFileMentionUpdate {\n errorCode?: string;\n status: AgentComposerFileMentionStatus;\n}\n\nexport function updateAgentComposerFileMentions(\n value: string,\n updates: ReadonlyMap<string, AgentComposerFileMentionUpdate>\n): string {\n const references = agentComposerFileMentionReferences(value);\n if (references.length === 0) return value;\n let cursor = 0;\n let result = \"\";\n for (const reference of references) {\n const update = updates.get(reference.id);\n const status = update?.status ?? reference.status;\n result += value.slice(cursor, reference.start);\n result += createAgentComposerFileMentionMarkdown({\n ...(status === \"error\"\n ? { errorCode: update?.errorCode ?? reference.errorCode }\n : {}),\n id: reference.id,\n name: reference.name,\n status\n });\n cursor = reference.end;\n }\n return result + value.slice(cursor);\n}\n\nfunction normalizeAgentComposerFileMentionStatus(\n value: unknown\n): AgentComposerFileMentionStatus {\n return value === \"uploading\" || value === \"error\" ? value : \"ready\";\n}\n\nfunction isLocalDirectoryMentionHref(href: string): boolean {\n return href.endsWith(\"/\") && !/^[a-zA-Z][a-zA-Z\\d+.-]*:/.test(href);\n}\n","export const AGENT_RICH_TEXT_CARET_ANCHOR = \"\\u200B\";\n","import {\n createContext,\n useContext,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type JSX,\n type MouseEvent,\n type MouseEventHandler,\n type ReactNode\n} from \"react\";\nimport { NodeViewWrapper, type NodeViewProps } from \"@tiptap/react\";\nimport { MentionPill } from \"@tutti-os/ui-system/components\";\nimport { Spinner } from \"@tutti-os/ui-system\";\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 { getAgentCustomMentionKind } from \"../../../shared/agentCustomMentionKinds\";\nimport { AGENT_RICH_TEXT_CARET_ANCHOR } from \"./agentRichTextCaretAnchor\";\nimport { resolveAgentSessionMentionIconUrl } from \"./agentMentionPresentation\";\nimport { agentExternalPromptFileErrorI18nKey } from \"../model/agentExternalPromptFiles\";\n\ntype AgentMentionNodeViewKind =\n | \"file\"\n | \"agent-target\"\n | \"session\"\n | \"workspace-app\"\n | \"workspace-reference\"\n | \"workspace-app-factory\"\n | \"workspace-issue\"\n | \"custom\";\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 attachmentStatus?: \"uploading\" | \"ready\" | \"error\";\n attachmentErrorLabel?: string;\n ariaLabel: string;\n /** 宿主注册的自定义 mention kind(kind === \"custom\" 专用)。 */\n customKind?: 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\ntype AgentMentionWrapperProps = ComponentPropsWithoutRef<\"span\">;\ntype AgentMentionWrapper = (props: AgentMentionWrapperProps) => JSX.Element;\n\nfunction AgentMentionNodeWrapper(props: AgentMentionWrapperProps): JSX.Element {\n return <NodeViewWrapper as=\"span\" {...props} />;\n}\n\nfunction AgentMentionStaticWrapper(\n props: AgentMentionWrapperProps\n): JSX.Element {\n return <span {...props} />;\n}\n\nconst AgentMentionTooltipProviderContext = createContext(true);\n\nexport function AgentMentionTooltipProviderScope({\n children,\n withTooltipProvider\n}: {\n children: ReactNode;\n withTooltipProvider: boolean;\n}): JSX.Element {\n return (\n <AgentMentionTooltipProviderContext value={withTooltipProvider}>\n {children}\n </AgentMentionTooltipProviderContext>\n );\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 if (value === \"custom\") {\n return \"custom\";\n }\n return \"file\";\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 label = attrString(attrs, \"title\").trim() || name.trim();\n const agentTargetId = attrString(attrs, \"agentTargetId\").trim();\n return {\n ariaLabel:\n `${t(\"agentHost.agentGui.mentionKindSession\")} ${label}`.trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n iconUrl: resolveAgentSessionMentionIconUrl({\n agentIconUrl: attrString(attrs, \"iconUrl\"),\n agentTargetId,\n href\n }),\n kind,\n label\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 if (kind === \"custom\") {\n return {\n ariaLabel:\n `${t(\"agentHost.agentGui.mentionKindReference\")} ${name}`.trim(),\n customKind: attrString(attrs, \"customKind\").trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n kind,\n label: name,\n summary: attrString(attrs, \"preview\").trim() || undefined\n };\n }\n\n const path = attrString(attrs, \"path\") || href;\n const entryKind = attrString(attrs, \"entryKind\") || \"unknown\";\n return {\n attachmentStatus:\n attrString(attrs, \"attachmentStatus\") === \"uploading\" ||\n attrString(attrs, \"attachmentStatus\") === \"error\"\n ? (attrString(attrs, \"attachmentStatus\") as \"uploading\" | \"error\")\n : attrString(attrs, \"attachmentId\")\n ? \"ready\"\n : undefined,\n attachmentErrorLabel:\n attrString(attrs, \"attachmentStatus\") === \"error\"\n ? t(\n agentExternalPromptFileErrorI18nKey(\n attrString(attrs, \"attachmentErrorCode\")\n )\n )\n : undefined,\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 AgentMentionLegacyFileView({\n isEditable,\n mention,\n onRemove,\n removeActionAriaLabel,\n selected,\n Wrapper\n}: {\n isEditable: boolean;\n mention: AgentMentionNodeViewModel;\n onRemove?: MouseEventHandler<HTMLButtonElement>;\n removeActionAriaLabel?: string;\n selected: boolean;\n Wrapper: AgentMentionWrapper;\n}): JSX.Element {\n return (\n <Wrapper\n aria-label={\n mention.attachmentErrorLabel\n ? `${mention.ariaLabel}, ${mention.attachmentErrorLabel}`\n : mention.ariaLabel\n }\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 data-uploading={\n mention.attachmentStatus === \"uploading\" ? \"true\" : undefined\n }\n data-upload-error={\n mention.attachmentStatus === \"error\" ? \"true\" : undefined\n }\n title={mention.attachmentErrorLabel ?? undefined}\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 text-[var(--text-secondary)] opacity-0 transition-opacity hover:text-[var(--text-primary)] focus-visible:opacity-100 group-hover:opacity-100\"\n type=\"button\"\n onMouseDown={onRemove}\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 {mention.attachmentStatus === \"uploading\" ? (\n <Spinner\n className={\n isEditable\n ? \"transition-opacity group-hover:opacity-0 group-focus-within:opacity-0\"\n : undefined\n }\n size={14}\n strokeWidth={2.4}\n trackColor=\"var(--transparency-hover)\"\n testId=\"agent-gui-composer-file-upload-spinner\"\n />\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 )}\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 text-[var(--text-secondary)] opacity-0 transition-opacity hover:text-[var(--text-primary)] focus-visible:opacity-100 group-hover:opacity-100\"\n type=\"button\"\n onMouseDown={onRemove}\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 </Wrapper>\n );\n}\n\nfunction AgentMentionView({\n attrs,\n isEditable,\n onRemove,\n removeActionAriaLabel,\n selected,\n Wrapper\n}: {\n attrs: Record<string, unknown>;\n isEditable: boolean;\n onRemove?: MouseEventHandler<HTMLButtonElement>;\n removeActionAriaLabel?: string;\n selected: boolean;\n Wrapper: AgentMentionWrapper;\n}): JSX.Element {\n const { t } = useTranslation();\n const withTooltipProvider = useContext(AgentMentionTooltipProviderContext);\n const mention = mentionViewModel(attrs, t);\n\n if (mention.kind === \"file\") {\n return (\n <AgentMentionLegacyFileView\n isEditable={isEditable}\n mention={mention}\n onRemove={onRemove}\n removeActionAriaLabel={removeActionAriaLabel}\n selected={selected}\n Wrapper={Wrapper}\n />\n );\n }\n\n if (\n mention.kind === \"workspace-app\" ||\n mention.kind === \"workspace-reference\" ||\n mention.kind === \"agent-target\"\n ) {\n return (\n <Wrapper\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 <MentionPill\n aria-label={mention.ariaLabel}\n className=\"top-0 h-6 max-w-[min(100%,var(--agent-mention-max-width,16rem))] py-0 align-middle leading-6\"\n data-agent-mention-kind={mention.kind}\n iconUrl={mention.iconUrl}\n iconContainerProps={{\n \"data-agent-mention-app-icon\":\n mention.kind === \"agent-target\" ? undefined : \"true\",\n \"data-agent-mention-session-icon\":\n mention.kind === \"agent-target\" ? \"true\" : undefined,\n \"data-workspace-app-icon\":\n mention.kind === \"agent-target\" ? undefined : \"true\"\n }}\n kind={mention.kind === \"agent-target\" ? \"session\" : \"app\"}\n label={mention.label}\n removable={isEditable}\n removeButtonProps={\n isEditable\n ? {\n \"aria-label\": removeActionAriaLabel,\n onMouseDown: onRemove\n }\n : undefined\n }\n withTooltipProvider={withTooltipProvider}\n />\n </Wrapper>\n );\n }\n\n if (mention.kind === \"custom\") {\n // 宿主注册的自定义 mention:优先用注册的 renderChip,缺省用通用双行卡\n // (第一行 name,第二行 summary)。点击经 rich-text surface 的 link click 委托\n // (data-agent-mention-href)上抛 onLinkAction,由宿主二次解析 href。\n const definition = getAgentCustomMentionKind(mention.customKind ?? \"\");\n const removeAction = isEditable ? (\n <button\n aria-label={removeActionAriaLabel}\n className=\"inline-flex size-4 shrink-0 items-center justify-center text-[var(--text-secondary)] opacity-0 transition-opacity hover:text-[var(--text-primary)] focus-visible:opacity-100 group-hover:opacity-100\"\n type=\"button\"\n onMouseDown={onRemove}\n >\n <CloseIcon className=\"size-3.5\" />\n </button>\n ) : null;\n if (definition?.renderChip) {\n return (\n <Wrapper\n aria-label={mention.ariaLabel}\n className={`agent-rich-text-mention-node inline-grid max-w-[min(100%,var(--agent-mention-max-width,20rem))] align-middle ${\n selected ? \"is-selected\" : \"\"\n }`}\n contentEditable={false}\n data-agent-custom-mention=\"true\"\n data-agent-file-mention=\"true\"\n data-agent-mention-href={mention.href}\n data-agent-mention-kind={mention.customKind || mention.kind}\n >\n {definition.renderChip({\n href: mention.href,\n name: mention.label,\n summary: mention.summary,\n isEditable,\n removeAction\n })}\n </Wrapper>\n );\n }\n return (\n <Wrapper\n aria-label={mention.ariaLabel}\n className={`agent-rich-text-mention-node inline-grid max-w-[min(100%,var(--agent-mention-max-width,20rem))] align-middle ${\n selected ? \"is-selected\" : \"\"\n }`}\n contentEditable={false}\n data-agent-custom-mention=\"true\"\n data-agent-file-mention=\"true\"\n data-agent-mention-href={mention.href}\n data-agent-mention-kind={mention.customKind || mention.kind}\n >\n <span\n className=\"group relative grid max-w-full cursor-pointer gap-0.5 overflow-hidden rounded-[8px] border border-[var(--border-primary,rgba(0,0,0,0.08))] bg-block px-2.5 py-1.5 text-left align-middle\"\n data-slot=\"mention-card\"\n >\n <span className=\"flex min-w-0 items-center gap-1\">\n <span\n aria-hidden=\"true\"\n className=\"tsh-agent-object-token__kind-icon size-3.5 shrink-0\"\n />\n <span className=\"truncate text-[13px] font-medium leading-[130%]\">\n {mention.label}\n </span>\n {removeAction}\n </span>\n {mention.summary ? (\n <span className=\"truncate text-[12px] font-normal leading-[130%] text-[var(--text-tertiary)]\">\n {mention.summary}\n </span>\n ) : null}\n </span>\n </Wrapper>\n );\n }\n\n return (\n <Wrapper\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 iconUrl={mention.iconUrl}\n label={mention.label}\n removable={isEditable}\n removeButtonProps={\n isEditable\n ? {\n \"aria-label\": removeActionAriaLabel,\n onMouseDown: onRemove\n }\n : undefined\n }\n summary={mention.summary}\n withTooltipProvider={withTooltipProvider}\n />\n </Wrapper>\n );\n}\n\nexport function AgentMentionReadonlyView({\n attrs\n}: {\n attrs: Record<string, unknown>;\n}): JSX.Element {\n return (\n <AgentMentionView\n attrs={attrs}\n isEditable={false}\n selected={false}\n Wrapper={AgentMentionStaticWrapper}\n />\n );\n}\n\nexport function AgentMentionNodeView({\n deleteNode,\n editor,\n extension,\n node,\n selected\n}: NodeViewProps): JSX.Element {\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 <AgentMentionView\n attrs={node.attrs ?? {}}\n isEditable={isEditable}\n onRemove={handleRemove}\n removeActionAriaLabel={removeActionAriaLabel}\n selected={selected}\n Wrapper={AgentMentionNodeWrapper}\n />\n );\n}\n","import type { AgentContextMentionItem } from \"./agentFileMentionContracts\";\nimport { managedAgentRoundedIconUrl } from \"../../../shared/managedAgentIcons\";\nimport { agentSessionTargetIdFromHref } from \"./agentMentionMarkdown\";\n\nexport function resolveAgentSessionMentionIconUrl(input: {\n agentIconUrl?: string | null;\n agentProviderId?: string | null;\n agentTargetId?: string | null;\n href?: string | null;\n}): string | undefined {\n const explicitIconUrl = input.agentIconUrl?.trim() ?? \"\";\n if (explicitIconUrl) {\n return explicitIconUrl;\n }\n const agentProviderId = input.agentProviderId?.trim() ?? \"\";\n if (agentProviderId) {\n return managedAgentRoundedIconUrl(agentProviderId);\n }\n const agentTargetId =\n input.agentTargetId?.trim() ||\n agentSessionTargetIdFromHref(input.href?.trim() ?? \"\") ||\n \"\";\n if (!agentTargetId.startsWith(\"local:\")) {\n return undefined;\n }\n const provider = agentTargetId.slice(\"local:\".length).trim();\n return provider ? managedAgentRoundedIconUrl(provider) : undefined;\n}\n\nexport function 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 return {\n kindLabel: \"Session\",\n primary: item.title.trim() || item.name.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 if (item.kind === \"custom\") {\n return {\n kindLabel: \"Reference\",\n primary: item.name\n };\n }\n return {\n kindLabel: \"Task\",\n primary: item.name\n };\n}\n","import type { AgentPromptContentBlock } from \"../../../shared/contracts/dto\";\nimport {\n agentComposerFileMentionReferences,\n createAgentComposerFileMentionMarkdown,\n formatAgentFileMentionMarkdown\n} from \"../agentRichText/agentMentionMarkdown\";\nimport {\n AGENT_PASTED_TEXT_BLOCK_KIND,\n type AgentComposerDraftFile\n} from \"./agentGuiNodeTypes\";\n\ninterface AgentPreparedExternalPromptFileMetadata {\n assetId?: string;\n mimeType?: string;\n name: string;\n sizeBytes?: number;\n uploadStatus?: string;\n uri?: string;\n}\n\nexport type AgentPreparedExternalPromptFile =\n AgentPreparedExternalPromptFileMetadata &\n ({ path: string; url?: string } | { path?: string; url: string });\n\nexport type AgentExternalPromptFilePreparationErrorCode =\n | \"file_too_large\"\n | \"folder_unsupported\"\n | \"preparation_failed\";\n\nexport type AgentExternalPromptFilePreparationResult =\n | {\n sourceIndex: number;\n status: \"prepared\";\n file: AgentPreparedExternalPromptFile;\n }\n | {\n sourceIndex: number;\n status: \"error\";\n errorCode: AgentExternalPromptFilePreparationErrorCode;\n retryable?: boolean;\n };\n\nexport type AgentExternalPromptFilePreparer = (\n files: readonly File[]\n) => Promise<readonly AgentExternalPromptFilePreparationResult[]>;\n\nexport interface AgentExternalPromptFilePreparation {\n pendingFiles: AgentComposerDraftFile[];\n complete(\n prepareExternalPromptFiles: AgentExternalPromptFilePreparer\n ): Promise<AgentComposerDraftFile[]>;\n}\n\nexport function remainingAgentComposerPromptAssetSlots(input: {\n files: number;\n images: number;\n largeTexts: number;\n limit?: number | null;\n}): number {\n if (\n typeof input.limit !== \"number\" ||\n !Number.isFinite(input.limit) ||\n input.limit < 0\n ) {\n return Number.POSITIVE_INFINITY;\n }\n return Math.max(\n 0,\n Math.floor(input.limit) - input.files - input.images - input.largeTexts\n );\n}\n\nexport function createAgentExternalPromptFilePreparation(\n files: readonly File[]\n): AgentExternalPromptFilePreparation {\n const pendingFiles = files.map((file) => ({\n id: crypto.randomUUID(),\n name: file.name || \"file\",\n ...(file.type ? { mimeType: file.type } : {}),\n ...(Number.isFinite(file.size) ? { sizeBytes: file.size } : {}),\n uploading: true\n }));\n\n return {\n pendingFiles,\n async complete(prepareExternalPromptFiles) {\n let results: readonly AgentExternalPromptFilePreparationResult[];\n try {\n results = await prepareExternalPromptFiles(files);\n } catch {\n return pendingFiles.map((file) =>\n failedDraftFile(file, \"preparation_failed\")\n );\n }\n const resultByIndex = new Map(\n results.map((result) => [result.sourceIndex, result])\n );\n return pendingFiles.map((pendingFile, sourceIndex) => {\n const result = resultByIndex.get(sourceIndex);\n if (!result) {\n return failedDraftFile(pendingFile, \"preparation_failed\");\n }\n if (result.status === \"error\") {\n return failedDraftFile(pendingFile, result.errorCode, {\n retryable: result.retryable\n });\n }\n const prepared = normalizePreparedFile(result.file);\n if (!hasPreparedFileLocator(prepared)) {\n return failedDraftFile(pendingFile, \"preparation_failed\");\n }\n return {\n id: pendingFile.id,\n name: prepared.name || pendingFile.name,\n ...(prepared.mimeType\n ? { mimeType: prepared.mimeType }\n : pendingFile.mimeType\n ? { mimeType: pendingFile.mimeType }\n : {}),\n ...(prepared.path ? { path: prepared.path } : {}),\n ...(prepared.url ? { url: prepared.url } : {}),\n ...(prepared.uri ? { uri: prepared.uri } : {}),\n ...(prepared.assetId ? { assetId: prepared.assetId } : {}),\n ...(prepared.uploadStatus\n ? { uploadStatus: prepared.uploadStatus }\n : {}),\n ...(typeof prepared.sizeBytes === \"number\"\n ? { sizeBytes: prepared.sizeBytes }\n : typeof pendingFile.sizeBytes === \"number\"\n ? { sizeBytes: pendingFile.sizeBytes }\n : {}),\n uploading: false\n };\n });\n }\n };\n}\n\nexport function agentPreparedPromptFileToDraftFile(\n file: AgentPromptContentBlock & { type: \"file\" },\n idPrefix: string,\n index: number\n): AgentComposerDraftFile {\n return {\n id: `${idPrefix}:file:${index}`,\n name: file.name?.trim() || `file-${index + 1}`,\n mimeType: file.mimeType,\n path: file.path,\n hostPath: file.hostPath,\n url: file.url,\n uri: file.uri,\n assetId: file.assetId,\n uploadStatus: file.uploadStatus,\n sizeBytes: file.sizeBytes\n };\n}\n\nexport function agentPromptContentToComposerPrompt(\n content: readonly AgentPromptContentBlock[],\n files: readonly AgentComposerDraftFile[]\n): string {\n let fileIndex = 0;\n const parts: string[] = [];\n for (const block of content) {\n if (block.type === \"text\") {\n parts.push(block.text?.trim() ?? \"\");\n continue;\n }\n if (block.type !== \"file\" || block.kind === AGENT_PASTED_TEXT_BLOCK_KIND) {\n continue;\n }\n const file = files[fileIndex];\n fileIndex += 1;\n if (!file) continue;\n parts.push(\n createAgentComposerFileMentionMarkdown({\n id: file.id,\n name: file.name,\n status: \"ready\"\n })\n );\n }\n return parts.join(\"\");\n}\n\nexport function agentPromptFileBlocks(\n content: readonly AgentPromptContentBlock[]\n): Array<AgentPromptContentBlock & { type: \"file\" }> {\n return content.filter(\n (block): block is AgentPromptContentBlock & { type: \"file\" } =>\n block.type === \"file\" &&\n block.kind !== AGENT_PASTED_TEXT_BLOCK_KIND &&\n (typeof block.path === \"string\" ||\n typeof block.hostPath === \"string\" ||\n typeof block.url === \"string\" ||\n typeof block.uri === \"string\" ||\n typeof block.assetId === \"string\")\n );\n}\n\nexport function agentPromptPastedTextBlocks(\n content: readonly AgentPromptContentBlock[]\n): Array<AgentPromptContentBlock & { type: \"file\" }> {\n return content.filter(\n (block): block is AgentPromptContentBlock & { type: \"file\" } =>\n block.type === \"file\" &&\n block.kind === AGENT_PASTED_TEXT_BLOCK_KIND &&\n typeof block.path === \"string\"\n );\n}\n\nexport function materializeAgentComposerFileMentions(\n prompt: string,\n files: readonly AgentComposerDraftFile[]\n): string {\n const references = agentComposerFileMentionReferences(prompt);\n if (references.length === 0) return prompt;\n const fileById = new Map(files.map((file) => [file.id, file]));\n let result = \"\";\n let cursor = 0;\n for (const reference of references) {\n result += prompt.slice(cursor, reference.start);\n const file = fileById.get(reference.id);\n if (file && !file.uploading && !file.uploadError) {\n const locator = file.path?.trim() || file.url?.trim() || \"\";\n if (locator) {\n result += formatAgentFileMentionMarkdown(file.name, locator);\n }\n }\n cursor = reference.end;\n }\n return result + prompt.slice(cursor);\n}\n\ntype NormalizedPreparedExternalPromptFile =\n AgentPreparedExternalPromptFileMetadata & {\n path?: string;\n url?: string;\n };\n\nfunction normalizePreparedFile(\n file: AgentPreparedExternalPromptFile\n): NormalizedPreparedExternalPromptFile {\n return {\n name: file.name.trim(),\n ...(file.mimeType?.trim() ? { mimeType: file.mimeType.trim() } : {}),\n ...(file.path?.trim() ? { path: file.path.trim() } : {}),\n ...(file.url?.trim() ? { url: file.url.trim() } : {}),\n ...(file.uri?.trim() ? { uri: file.uri.trim() } : {}),\n ...(file.assetId?.trim() ? { assetId: file.assetId.trim() } : {}),\n ...(file.uploadStatus?.trim()\n ? { uploadStatus: file.uploadStatus.trim() }\n : {}),\n ...(typeof file.sizeBytes === \"number\" && Number.isFinite(file.sizeBytes)\n ? { sizeBytes: file.sizeBytes }\n : {})\n };\n}\n\nfunction hasPreparedFileLocator(\n file: NormalizedPreparedExternalPromptFile\n): boolean {\n return Boolean(file.path || file.url);\n}\n\nfunction failedDraftFile(\n file: AgentComposerDraftFile,\n errorCode: AgentExternalPromptFilePreparationErrorCode,\n options: { retryable?: boolean } = {}\n): AgentComposerDraftFile {\n return {\n ...file,\n uploading: false,\n uploadError: errorCode,\n uploadErrorCode: errorCode,\n ...(typeof options.retryable === \"boolean\"\n ? { uploadRetryable: options.retryable }\n : {})\n };\n}\n\nexport function agentExternalPromptFileErrorI18nKey(\n errorCode: string | null | undefined\n):\n | \"agentHost.agentGui.composerFileFolderUnsupported\"\n | \"agentHost.agentGui.composerFilePreparationFailed\"\n | \"agentHost.agentGui.composerFileTooLarge\" {\n switch (errorCode) {\n case \"file_too_large\":\n return \"agentHost.agentGui.composerFileTooLarge\";\n case \"folder_unsupported\":\n return \"agentHost.agentGui.composerFileFolderUnsupported\";\n default:\n return \"agentHost.agentGui.composerFilePreparationFailed\";\n }\n}\n","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 resolveAgentMentionFileThumbnailUrl,\n resolveAgentMentionFileVisualKind\n} from \"../../shared/mentionFilePresentation\";\nimport { AgentMentionNodeView } from \"./AgentMentionNodeView\";\nimport { AGENT_RICH_TEXT_CARET_ANCHOR } from \"./agentRichTextCaretAnchor\";\nimport type {\n AgentContextMentionItem,\n AgentFileMentionExtensionOptions\n} from \"./agentFileMentionContracts\";\nimport {\n attrsToMentionItem,\n mentionItemToAttrs,\n parseAgentMentionHTMLElementAttrs\n} from \"./agentMentionAttrs\";\nimport { formatAgentMentionMarkdown } from \"./agentMentionMarkdown\";\nimport { mentionVisual } from \"./agentMentionPresentation\";\n\nexport type {\n AgentContextMentionItem,\n AgentComposerFileMentionStatus,\n AgentFileMentionExtensionOptions,\n AgentFileMentionItem,\n AgentFileMentionKind,\n AgentFileMentionSuggestionState,\n AgentMentionAgentTargetItem,\n AgentMentionCustomItem,\n AgentMentionFileItem,\n AgentMentionFileNavigationAction,\n AgentMentionKind,\n AgentMentionReferenceSource,\n AgentMentionScope,\n AgentMentionSessionItem,\n AgentMentionSuggestionState,\n AgentMentionWorkspaceAppFactoryItem,\n AgentMentionWorkspaceAppItem,\n AgentMentionWorkspaceIssueItem,\n AgentMentionWorkspaceReferenceItem,\n ParsedAgentMentionMarkdown\n} from \"./agentFileMentionContracts\";\nexport { attrsToMentionItem, mentionItemToAttrs } from \"./agentMentionAttrs\";\nexport {\n createAgentSessionHandoffPrompt,\n createAgentSessionMarkdownLink,\n createAgentSessionMentionHref,\n formatAgentFileMentionMarkdown,\n formatAgentMentionMarkdown,\n normalizeAgentSessionMentionTitle,\n parseAgentMentionMarkdown,\n parseMentionItemFromHref\n} from \"./agentMentionMarkdown\";\nexport type { CreateAgentSessionHandoffPromptInput } from \"./agentMentionMarkdown\";\nexport const agentFileMentionPluginKey = new PluginKey(\n \"agentFileMentionSuggestion\"\n);\n\nexport function exitAgentFileMentionSuggestion(editor: Editor): void {\n exitSuggestion(editor.view, agentFileMentionPluginKey);\n}\n\nfunction mentionItemIconUrl(item: AgentContextMentionItem): string | undefined {\n if (item.kind === \"session\") {\n return item.agentIconUrl;\n }\n if (\n item.kind === \"workspace-app\" ||\n item.kind === \"agent-target\" ||\n item.kind === \"workspace-reference\"\n ) {\n return item.iconUrl;\n }\n return undefined;\n}\n\n/** Non-text/leaf nodes surface as this sentinel in {@link expandRangeOverMentionPlaceholder}. */\nconst MENTION_PLACEHOLDER_LEAF_SENTINEL = \"\";\n/** Upper bound (in chars) for a `{ … }` group we treat as a mention placeholder. */\nconst MENTION_PLACEHOLDER_MAX_LENGTH = 40;\n\n/**\n * Grow a suggestion range so that inserting a mention replaces a surrounding\n * `{ … }` placeholder rather than leaving its braces behind. Starter prompts\n * prefill mention slots as literal placeholders (e.g. `{ @agent }`); when the\n * user opens the @ palette inside one and picks a target, we want the braces\n * gone. Returns the original range unchanged when the trigger is not inside a\n * short, single-line, brace-only group (so ordinary `@` mentions and legitimate\n * user braces such as inline JSON are never touched).\n */\nexport function expandRangeOverMentionPlaceholder(\n editor: Editor,\n range: Range\n): Range {\n const { doc } = editor.state;\n const $from = doc.resolve(range.from);\n const blockStart = $from.start();\n const blockEnd = $from.end();\n const blockText = doc.textBetween(\n blockStart,\n blockEnd,\n \"\\n\",\n MENTION_PLACEHOLDER_LEAF_SENTINEL\n );\n const fromOffset = range.from - blockStart;\n const toOffset = Math.min(range.to, blockEnd) - blockStart;\n\n // Nearest \"{\" to the left, staying within a single group (bail on \"}\").\n let open = -1;\n for (let index = fromOffset - 1; index >= 0; index -= 1) {\n const char = blockText[index];\n if (char === \"}\") {\n return range;\n }\n if (char === \"{\") {\n open = index;\n break;\n }\n }\n if (open < 0) {\n return range;\n }\n\n // Nearest \"}\" to the right, staying within a single group (bail on \"{\").\n let close = -1;\n for (let index = toOffset; index < blockText.length; index += 1) {\n const char = blockText[index];\n if (char === \"{\") {\n return range;\n }\n if (char === \"}\") {\n close = index;\n break;\n }\n }\n if (close < 0) {\n return range;\n }\n\n // Only swallow short, single-line groups without embedded chips — real mention\n // placeholders are tiny, and this keeps larger user-authored braces intact.\n const group = blockText.slice(open, close + 1);\n if (\n close - open > MENTION_PLACEHOLDER_MAX_LENGTH ||\n group.includes(\"\\n\") ||\n group.includes(MENTION_PLACEHOLDER_LEAF_SENTINEL)\n ) {\n return range;\n }\n\n // The inserted mention re-adds its own trailing space; consume one adjacent\n // whitespace so a mid-sentence placeholder does not leave a double space.\n let end = close + 1;\n if (blockText[end] === \" \" || blockText[end] === \"\\t\") {\n end += 1;\n }\n return { from: blockStart + open, to: blockStart + end };\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 agentTargetId: { 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 customKind: { default: \"\" },\n sourceLabel: { default: \"\" },\n preview: { default: \"\" },\n attachmentId: { default: \"\" },\n attachmentStatus: { default: \"\" },\n attachmentErrorCode: { 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 iconUrl = mentionItemIconUrl(item);\n const tagName = options.renderAsLink ? \"a\" : \"span\";\n const visual = mentionVisual(item);\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 ...(iconUrl ? { \"data-agent-mention-icon-url\": iconUrl } : {}),\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 : [\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 // Starter prompts seed mention slots as literal `{ … }` placeholders\n // (e.g. `{ @agent }`). When the palette is triggered inside one, grow\n // the replaced range over the whole placeholder so inserting a chip\n // cleanly removes its braces instead of leaving them behind.\n const insertRange = expandRangeOverMentionPlaceholder(\n editor,\n range\n );\n const prefixCaretAnchor =\n insertRange.from <= 1 ||\n editor.state.doc.textBetween(\n Math.max(1, insertRange.from - 1),\n insertRange.from,\n \"\\n\",\n \"\\n\"\n ) === \"\\n\";\n editor\n .chain()\n .focus()\n .insertContentAt(insertRange, [\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 // Agent GUI owns candidate search outside Tiptap. Notify it before\n // Suggestion awaits its intentionally empty `items()` result so a\n // controlled editor remount cannot lose the activation callback.\n onBeforeStart: (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 onBeforeUpdate: (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","import { resolveAgentMentionFileThumbnailUrl } from \"../../shared/mentionFilePresentation\";\nimport type {\n AgentContextMentionItem,\n AgentFileMentionKind,\n AgentMentionKind,\n AgentMentionReferenceSource,\n AgentMentionSessionItem\n} from \"./agentFileMentionContracts\";\nimport {\n agentSessionTargetIdFromHref,\n dirnameFromPath,\n parseMentionFileCount,\n parseMentionItemFromHref\n} from \"./agentMentionMarkdown\";\nimport { resolveAgentSessionMentionIconUrl } from \"./agentMentionPresentation\";\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 ...(item.attachmentId ? { attachmentId: item.attachmentId } : {}),\n ...(item.attachmentStatus\n ? { attachmentStatus: item.attachmentStatus }\n : {}),\n ...(item.attachmentErrorCode\n ? { attachmentErrorCode: item.attachmentErrorCode }\n : {})\n };\n }\n if (item.kind === \"session\") {\n const iconUrl = resolveAgentSessionMentionIconUrl({\n agentIconUrl: item.agentIconUrl,\n agentTargetId: item.agentTargetId,\n href: item.href\n });\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n ...(item.agentTargetId?.trim()\n ? { agentTargetId: item.agentTargetId.trim() }\n : {}),\n scope: item.scope,\n title: item.title,\n initiatorName: item.initiatorName,\n agentName: item.agentName,\n ...(iconUrl ? { iconUrl } : {}),\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 if (item.kind === \"custom\") {\n return {\n name: item.name,\n sourceLabel: item.sourceLabel,\n kind: item.kind,\n customKind: item.customKind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n preview: item.summary ?? \"\"\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 agentTargetId:\n typeof attrs.agentTargetId === \"string\" && attrs.agentTargetId.trim()\n ? attrs.agentTargetId.trim()\n : agentSessionTargetIdFromHref(href),\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 agentIconUrl:\n typeof attrs.iconUrl === \"string\" && attrs.iconUrl.trim()\n ? attrs.iconUrl.trim()\n : undefined,\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 === \"custom\") {\n const workspaceId = workspaceIdFromMentionAttrs(attrs);\n const targetId =\n typeof attrs.targetId === \"string\" ? attrs.targetId.trim() : \"\";\n const customKind =\n typeof attrs.customKind === \"string\" ? attrs.customKind.trim() : \"\";\n const sourceLabel =\n typeof attrs.sourceLabel === \"string\" && attrs.sourceLabel.trim()\n ? attrs.sourceLabel.trim()\n : name;\n const summary =\n typeof attrs.preview === \"string\" && attrs.preview.trim()\n ? attrs.preview.trim()\n : undefined;\n return {\n kind,\n customKind,\n href,\n workspaceId,\n targetId,\n sourceLabel,\n name,\n summary\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 attachmentId:\n typeof attrs.attachmentId === \"string\" && attrs.attachmentId.trim()\n ? attrs.attachmentId.trim()\n : undefined,\n attachmentStatus:\n attrs.attachmentStatus === \"uploading\" ||\n attrs.attachmentStatus === \"error\"\n ? attrs.attachmentStatus\n : attrs.attachmentId\n ? \"ready\"\n : undefined,\n attachmentErrorCode:\n typeof attrs.attachmentErrorCode === \"string\" &&\n attrs.attachmentErrorCode.trim()\n ? attrs.attachmentErrorCode.trim()\n : undefined,\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\nexport function 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 if (value === \"custom\") {\n return \"custom\";\n }\n return \"file\";\n}\n\nfunction normalizeEntryKind(value: unknown): AgentFileMentionKind {\n return value === \"directory\" || value === \"file\" ? value : \"unknown\";\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AASA,IAAM,mCAAmC;AAWzC,SAAS,uCAAuC,OAK5C;AACT,SAAO,8BAA8B;AAAA,IACnC,YAAY;AAAA,IACZ,UAAU,MAAM;AAAA,IAChB,OAAO,MAAM;AAAA,IACb,OAAO;AAAA,MACL,GAAI,MAAM,WAAW,KAAK,IAAI,EAAE,WAAW,MAAM,UAAU,KAAK,EAAE,IAAI,CAAC;AAAA,MACvE,QAAQ,MAAM;AAAA,IAChB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,gBAAgB,MAAsB;AACpD,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;AAEO,SAAS,kCAAkC,OAAuB;AACvE,QAAM,UAAU,MAAM,KAAK;AAC3B,QAAM,uBAAuB,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAK;AAC7D,SAAO,wBAAwB;AACjC;AAEO,SAAS,+BACd,MACA,MACQ;AACR,SAAO,2BAA2B;AAAA,IAChC,MAAM;AAAA,IACN,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,eAAe;AAAA,EACjB,CAAC;AACH;AAEO,SAAS,8BAA8B,OAKnC;AACT,QAAM,QAAQ,mCAAmC,MAAM,KAAK;AAC5D,QAAM,gBAAgB,MAAM,eAAe,KAAK,KAAK;AACrD,SAAO,0BAA0B;AAAA,IAC/B,YAAY;AAAA,IACZ,UAAU,MAAM;AAAA,IAChB;AAAA,IACA,OAAO;AAAA,MACL,GAAI,gBAAgB,EAAE,cAAc,IAAI,CAAC;AAAA,MACzC,aAAa,MAAM;AAAA,IACrB;AAAA,EACF,CAAC;AACH;AAUO,SAAS,+BACd,OACQ;AACR,QAAM,QAAQ,mCAAmC,MAAM,KAAK;AAC5D,QAAM,OAAO,8BAA8B;AAAA,IACzC,gBAAgB,MAAM;AAAA,IACtB,eAAe,MAAM;AAAA,IACrB;AAAA,IACA,aAAa,MAAM;AAAA,EACrB,CAAC;AACD,SAAO,2BAA2B;AAAA,IAChC;AAAA,IACA,OAAO,MAAM,eAAe,IAAI,KAAK,KAAK;AAAA,EAC5C,CAAC;AACH;AAcO,SAAS,gCACd,OACQ;AACR,SAAO,GAAG,+BAA+B;AAAA,IACvC,GAAG;AAAA,IACH,cAAc;AAAA,EAChB,CAAC,CAAC;AACJ;AAEO,SAAS,2BACd,MACQ;AAGR,MAAI,KAAK,SAAS,QAAQ;AACxB,QAAI,KAAK,cAAc;AACrB,aAAO,uCAAuC;AAAA,QAC5C,WAAW,KAAK;AAAA,QAChB,IAAI,KAAK;AAAA,QACT,MAAM,KAAK;AAAA,QACX,QAAQ,KAAK,oBAAoB;AAAA,MACnC,CAAC;AAAA,IACH;AACA,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,WAAW;AAC3B,WAAO,+BAA+B;AAAA,MACpC,gBAAgB,KAAK;AAAA,MACrB,eACE,KAAK,iBAAiB,6BAA6B,KAAK,IAAI;AAAA,MAC9D,OAAO,KAAK,MAAM,KAAK,KAAK,KAAK;AAAA,MACjC,aAAa,KAAK;AAAA,MAClB,cAAc;AAAA,IAChB,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,MAAI,KAAK,SAAS,UAAU;AAC1B,UAAMA,YAAW,yBAAyB,KAAK,MAAM,KAAK,WAAW;AACrE,WAAOA,YAAW,8BAA8BA,SAAQ,IAAI;AAAA,EAC9D;AACA,QAAM,WAAW,yBAAyB,KAAK,MAAM,KAAK,IAAI;AAC9D,SAAO,WAAW,8BAA8B,QAAQ,IAAI;AAC9D;AAEO,SAAS,wCAAwC,OAAuB;AAC7E,MAAI,SAAS;AACb,MAAI,SAAS;AACb,SAAO,SAAS,MAAM,QAAQ;AAC5B,UAAM,eAAe,MAAM,QAAQ,KAAK,MAAM;AAC9C,QAAI,eAAe,GAAG;AACpB,gBAAU,MAAM,MAAM,MAAM;AAC5B;AAAA,IACF;AACA,UAAM,SAAS,0BAA0B,OAAO,YAAY;AAC5D,QAAI,CAAC,UAAU,OAAO,KAAK,SAAS,UAAU;AAC5C,gBAAU,MAAM,MAAM,QAAQ,eAAe,CAAC;AAC9C,eAAS,eAAe;AACxB;AAAA,IACF;AACA,UAAM,WAAW;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,IACd;AACA,UAAM,aAAa,WACf,0BAA0B,OAAO,KAAK,UAAU,IAChD;AACJ,UAAM,eACJ,YAAY,YAAY,wBACpB,WAAW,sBAAsB,UAAU,OAAO,KAAK,IAAI,IAC3D;AACN,cAAU,MAAM,MAAM,QAAQ,YAAY;AAC1C,cAAU,cAAc,KAAK,IACzB,eACA,MAAM,MAAM,cAAc,OAAO,GAAG;AACxC,aAAS,OAAO;AAAA,EAClB;AACA,SAAO;AACT;AAEA,SAAS,mCAAmC,OAAuB;AACjE,SAAO,MAAM,KAAK,EAAE,QAAQ,OAAO,EAAE,EAAE,KAAK;AAC9C;AAEO,SAAS,6BAA6B,MAAkC;AAC7E,QAAM,UAAU,yBAAyB,MAAM,EAAE;AACjD,QAAM,gBAAgB,SAAS,OAAO,eAAe,KAAK,KAAK;AAC/D,SAAO,iBAAiB;AAC1B;AAEO,SAAS,sBAAsB,OAAwB;AAC5D,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,eAAe,gBAAgB,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,kCAAkC;AACjD,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,IACT;AACA,UAAM,SAAS;AAAA,MACb,QAAQ,OAAO;AAAA,IACjB;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA,WAAW;AAAA,MACX,eAAe;AAAA,MACf,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,qBAAqB,QAAQ,OAAO,WAAW,KAAK,KAAK;AAAA,IAC3D;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,eAAe,QAAQ,OAAO,eAAe,KAAK,KAAK;AAAA,MACvD;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,MACA,SAAS,QAAQ,OAAO,MAAM,KAAK,KAAK;AAAA,IAC1C;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,QAAM,mBAAmB,0BAA0B,QAAQ;AAC3D,MAAI,kBAAkB;AACpB,UAAM,eAAe,iBAAiB,QAAQ,SAAS,IAAI;AAC3D,QAAI,CAAC,cAAc;AACjB,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY;AAAA,MACZ;AAAA,MACA,aAAa,aAAa,aAAa,KAAK,KAAK;AAAA,MACjD;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,MAAM,aAAa,KAAK,KAAK,KAAK;AAAA,MAClC,SAAS,aAAa,SAAS,KAAK,KAAK;AAAA,IAC3C;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,mCACd,OACqC;AACrC,QAAM,aAAkD,CAAC;AACzD,MAAI,SAAS;AACb,SAAO,SAAS,MAAM,QAAQ;AAC5B,UAAM,QAAQ,MAAM,QAAQ,KAAK,MAAM;AACvC,QAAI,QAAQ,EAAG;AACf,UAAM,SAAS,0BAA0B,OAAO,KAAK;AACrD,QAAI,QAAQ,KAAK,SAAS,UAAU,OAAO,KAAK,cAAc;AAC5D,iBAAW,KAAK;AAAA,QACd;AAAA,QACA,KAAK,OAAO;AAAA,QACZ,WAAW,OAAO,KAAK;AAAA,QACvB,IAAI,OAAO,KAAK;AAAA,QAChB,MAAM,OAAO,KAAK;AAAA,QAClB,QAAQ,OAAO,KAAK,oBAAoB;AAAA,MAC1C,CAAC;AACD,eAAS,OAAO;AAChB;AAAA,IACF;AACA,aAAS,QAAQ;AAAA,EACnB;AACA,SAAO;AACT;AAOO,SAAS,gCACd,OACA,SACQ;AACR,QAAM,aAAa,mCAAmC,KAAK;AAC3D,MAAI,WAAW,WAAW,EAAG,QAAO;AACpC,MAAI,SAAS;AACb,MAAI,SAAS;AACb,aAAW,aAAa,YAAY;AAClC,UAAM,SAAS,QAAQ,IAAI,UAAU,EAAE;AACvC,UAAM,SAAS,QAAQ,UAAU,UAAU;AAC3C,cAAU,MAAM,MAAM,QAAQ,UAAU,KAAK;AAC7C,cAAU,uCAAuC;AAAA,MAC/C,GAAI,WAAW,UACX,EAAE,WAAW,QAAQ,aAAa,UAAU,UAAU,IACtD,CAAC;AAAA,MACL,IAAI,UAAU;AAAA,MACd,MAAM,UAAU;AAAA,MAChB;AAAA,IACF,CAAC;AACD,aAAS,UAAU;AAAA,EACrB;AACA,SAAO,SAAS,MAAM,MAAM,MAAM;AACpC;AAEA,SAAS,wCACP,OACgC;AAChC,SAAO,UAAU,eAAe,UAAU,UAAU,QAAQ;AAC9D;AAEA,SAAS,4BAA4B,MAAuB;AAC1D,SAAO,KAAK,SAAS,GAAG,KAAK,CAAC,2BAA2B,KAAK,IAAI;AACpE;;;ACviBO,IAAM,+BAA+B;;;ACA5C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAMK;AACP,SAAS,uBAA2C;AACpD,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AACxB,SAAS,iBAAiB;;;ACVnB,SAAS,kCAAkC,OAK3B;AACrB,QAAM,kBAAkB,MAAM,cAAc,KAAK,KAAK;AACtD,MAAI,iBAAiB;AACnB,WAAO;AAAA,EACT;AACA,QAAM,kBAAkB,MAAM,iBAAiB,KAAK,KAAK;AACzD,MAAI,iBAAiB;AACnB,WAAO,2BAA2B,eAAe;AAAA,EACnD;AACA,QAAM,gBACJ,MAAM,eAAe,KAAK,KAC1B,6BAA6B,MAAM,MAAM,KAAK,KAAK,EAAE,KACrD;AACF,MAAI,CAAC,cAAc,WAAW,QAAQ,GAAG;AACvC,WAAO;AAAA,EACT;AACA,QAAM,WAAW,cAAc,MAAM,SAAS,MAAM,EAAE,KAAK;AAC3D,SAAO,WAAW,2BAA2B,QAAQ,IAAI;AAC3D;AAEO,SAAS,cAAc,MAG5B;AACA,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AACA,MAAI,KAAK,SAAS,WAAW;AAC3B,WAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,IAC/C;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,MAAI,KAAK,SAAS,UAAU;AAC1B,WAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AAAA,IACL,WAAW;AAAA,IACX,SAAS,KAAK;AAAA,EAChB;AACF;;;AC1BO,SAAS,uCAAuC,OAK5C;AACT,MACE,OAAO,MAAM,UAAU,YACvB,CAAC,OAAO,SAAS,MAAM,KAAK,KAC5B,MAAM,QAAQ,GACd;AACA,WAAO,OAAO;AAAA,EAChB;AACA,SAAO,KAAK;AAAA,IACV;AAAA,IACA,KAAK,MAAM,MAAM,KAAK,IAAI,MAAM,QAAQ,MAAM,SAAS,MAAM;AAAA,EAC/D;AACF;AAEO,SAAS,yCACd,OACoC;AACpC,QAAM,eAAe,MAAM,IAAI,CAAC,UAAU;AAAA,IACxC,IAAI,OAAO,WAAW;AAAA,IACtB,MAAM,KAAK,QAAQ;AAAA,IACnB,GAAI,KAAK,OAAO,EAAE,UAAU,KAAK,KAAK,IAAI,CAAC;AAAA,IAC3C,GAAI,OAAO,SAAS,KAAK,IAAI,IAAI,EAAE,WAAW,KAAK,KAAK,IAAI,CAAC;AAAA,IAC7D,WAAW;AAAA,EACb,EAAE;AAEF,SAAO;AAAA,IACL;AAAA,IACA,MAAM,SAAS,4BAA4B;AACzC,UAAI;AACJ,UAAI;AACF,kBAAU,MAAM,2BAA2B,KAAK;AAAA,MAClD,QAAQ;AACN,eAAO,aAAa;AAAA,UAAI,CAAC,SACvB,gBAAgB,MAAM,oBAAoB;AAAA,QAC5C;AAAA,MACF;AACA,YAAM,gBAAgB,IAAI;AAAA,QACxB,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,aAAa,MAAM,CAAC;AAAA,MACtD;AACA,aAAO,aAAa,IAAI,CAAC,aAAa,gBAAgB;AACpD,cAAM,SAAS,cAAc,IAAI,WAAW;AAC5C,YAAI,CAAC,QAAQ;AACX,iBAAO,gBAAgB,aAAa,oBAAoB;AAAA,QAC1D;AACA,YAAI,OAAO,WAAW,SAAS;AAC7B,iBAAO,gBAAgB,aAAa,OAAO,WAAW;AAAA,YACpD,WAAW,OAAO;AAAA,UACpB,CAAC;AAAA,QACH;AACA,cAAM,WAAW,sBAAsB,OAAO,IAAI;AAClD,YAAI,CAAC,uBAAuB,QAAQ,GAAG;AACrC,iBAAO,gBAAgB,aAAa,oBAAoB;AAAA,QAC1D;AACA,eAAO;AAAA,UACL,IAAI,YAAY;AAAA,UAChB,MAAM,SAAS,QAAQ,YAAY;AAAA,UACnC,GAAI,SAAS,WACT,EAAE,UAAU,SAAS,SAAS,IAC9B,YAAY,WACV,EAAE,UAAU,YAAY,SAAS,IACjC,CAAC;AAAA,UACP,GAAI,SAAS,OAAO,EAAE,MAAM,SAAS,KAAK,IAAI,CAAC;AAAA,UAC/C,GAAI,SAAS,MAAM,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC;AAAA,UAC5C,GAAI,SAAS,MAAM,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC;AAAA,UAC5C,GAAI,SAAS,UAAU,EAAE,SAAS,SAAS,QAAQ,IAAI,CAAC;AAAA,UACxD,GAAI,SAAS,eACT,EAAE,cAAc,SAAS,aAAa,IACtC,CAAC;AAAA,UACL,GAAI,OAAO,SAAS,cAAc,WAC9B,EAAE,WAAW,SAAS,UAAU,IAChC,OAAO,YAAY,cAAc,WAC/B,EAAE,WAAW,YAAY,UAAU,IACnC,CAAC;AAAA,UACP,WAAW;AAAA,QACb;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,SAAS,mCACd,MACA,UACA,OACwB;AACxB,SAAO;AAAA,IACL,IAAI,GAAG,QAAQ,SAAS,KAAK;AAAA,IAC7B,MAAM,KAAK,MAAM,KAAK,KAAK,QAAQ,QAAQ,CAAC;AAAA,IAC5C,UAAU,KAAK;AAAA,IACf,MAAM,KAAK;AAAA,IACX,UAAU,KAAK;AAAA,IACf,KAAK,KAAK;AAAA,IACV,KAAK,KAAK;AAAA,IACV,SAAS,KAAK;AAAA,IACd,cAAc,KAAK;AAAA,IACnB,WAAW,KAAK;AAAA,EAClB;AACF;AAEO,SAAS,mCACd,SACA,OACQ;AACR,MAAI,YAAY;AAChB,QAAM,QAAkB,CAAC;AACzB,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,SAAS,QAAQ;AACzB,YAAM,KAAK,MAAM,MAAM,KAAK,KAAK,EAAE;AACnC;AAAA,IACF;AACA,QAAI,MAAM,SAAS,UAAU,MAAM,SAAS,8BAA8B;AACxE;AAAA,IACF;AACA,UAAM,OAAO,MAAM,SAAS;AAC5B,iBAAa;AACb,QAAI,CAAC,KAAM;AACX,UAAM;AAAA,MACJ,uCAAuC;AAAA,QACrC,IAAI,KAAK;AAAA,QACT,MAAM,KAAK;AAAA,QACX,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO,MAAM,KAAK,EAAE;AACtB;AAEO,SAAS,sBACd,SACmD;AACnD,SAAO,QAAQ;AAAA,IACb,CAAC,UACC,MAAM,SAAS,UACf,MAAM,SAAS,iCACd,OAAO,MAAM,SAAS,YACrB,OAAO,MAAM,aAAa,YAC1B,OAAO,MAAM,QAAQ,YACrB,OAAO,MAAM,QAAQ,YACrB,OAAO,MAAM,YAAY;AAAA,EAC/B;AACF;AAEO,SAAS,4BACd,SACmD;AACnD,SAAO,QAAQ;AAAA,IACb,CAAC,UACC,MAAM,SAAS,UACf,MAAM,SAAS,gCACf,OAAO,MAAM,SAAS;AAAA,EAC1B;AACF;AAEO,SAAS,qCACd,QACA,OACQ;AACR,QAAM,aAAa,mCAAmC,MAAM;AAC5D,MAAI,WAAW,WAAW,EAAG,QAAO;AACpC,QAAM,WAAW,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;AAC7D,MAAI,SAAS;AACb,MAAI,SAAS;AACb,aAAW,aAAa,YAAY;AAClC,cAAU,OAAO,MAAM,QAAQ,UAAU,KAAK;AAC9C,UAAM,OAAO,SAAS,IAAI,UAAU,EAAE;AACtC,QAAI,QAAQ,CAAC,KAAK,aAAa,CAAC,KAAK,aAAa;AAChD,YAAM,UAAU,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;AACzD,UAAI,SAAS;AACX,kBAAU,+BAA+B,KAAK,MAAM,OAAO;AAAA,MAC7D;AAAA,IACF;AACA,aAAS,UAAU;AAAA,EACrB;AACA,SAAO,SAAS,OAAO,MAAM,MAAM;AACrC;AAQA,SAAS,sBACP,MACsC;AACtC,SAAO;AAAA,IACL,MAAM,KAAK,KAAK,KAAK;AAAA,IACrB,GAAI,KAAK,UAAU,KAAK,IAAI,EAAE,UAAU,KAAK,SAAS,KAAK,EAAE,IAAI,CAAC;AAAA,IAClE,GAAI,KAAK,MAAM,KAAK,IAAI,EAAE,MAAM,KAAK,KAAK,KAAK,EAAE,IAAI,CAAC;AAAA,IACtD,GAAI,KAAK,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK,IAAI,KAAK,EAAE,IAAI,CAAC;AAAA,IACnD,GAAI,KAAK,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK,IAAI,KAAK,EAAE,IAAI,CAAC;AAAA,IACnD,GAAI,KAAK,SAAS,KAAK,IAAI,EAAE,SAAS,KAAK,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,IAC/D,GAAI,KAAK,cAAc,KAAK,IACxB,EAAE,cAAc,KAAK,aAAa,KAAK,EAAE,IACzC,CAAC;AAAA,IACL,GAAI,OAAO,KAAK,cAAc,YAAY,OAAO,SAAS,KAAK,SAAS,IACpE,EAAE,WAAW,KAAK,UAAU,IAC5B,CAAC;AAAA,EACP;AACF;AAEA,SAAS,uBACP,MACS;AACT,SAAO,QAAQ,KAAK,QAAQ,KAAK,GAAG;AACtC;AAEA,SAAS,gBACP,MACA,WACA,UAAmC,CAAC,GACZ;AACxB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,WAAW;AAAA,IACX,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,GAAI,OAAO,QAAQ,cAAc,YAC7B,EAAE,iBAAiB,QAAQ,UAAU,IACrC,CAAC;AAAA,EACP;AACF;AAEO,SAAS,oCACd,WAI4C;AAC5C,UAAQ,WAAW;AAAA,IACjB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;;;AFvOS,cAyRD,YAzRC;AA5BT,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;AAuBA,SAAS,wBAAwB,OAA8C;AAC7E,SAAO,oBAAC,mBAAgB,IAAG,QAAQ,GAAG,OAAO;AAC/C;AAEA,SAAS,0BACP,OACa;AACb,SAAO,oBAAC,UAAM,GAAG,OAAO;AAC1B;AAEA,IAAM,qCAAqC,cAAc,IAAI;AAgB7D,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,MAAI,UAAU,UAAU;AACtB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAASC,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;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,QAAQ,WAAW,OAAO,OAAO,EAAE,KAAK,KAAK,KAAK,KAAK;AAC7D,UAAM,gBAAgB,WAAW,OAAO,eAAe,EAAE,KAAK;AAC9D,WAAO;AAAA,MACL,WACE,GAAG,EAAE,uCAAuC,CAAC,IAAI,KAAK,GAAG,KAAK;AAAA,MAChE,eAAe;AAAA,MACf,WAAW;AAAA,MACX;AAAA,MACA,SAAS,kCAAkC;AAAA,QACzC,cAAc,WAAW,OAAO,SAAS;AAAA,QACzC;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACD;AAAA,MACA;AAAA,IACF;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,MAAI,SAAS,UAAU;AACrB,WAAO;AAAA,MACL,WACE,GAAG,EAAE,yCAAyC,CAAC,IAAI,IAAI,GAAG,KAAK;AAAA,MACjE,YAAY,WAAW,OAAO,YAAY,EAAE,KAAK;AAAA,MACjD,eAAe;AAAA,MACf,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,SAAS,WAAW,OAAO,SAAS,EAAE,KAAK,KAAK;AAAA,IAClD;AAAA,EACF;AAEA,QAAM,OAAO,WAAW,OAAO,MAAM,KAAK;AAC1C,QAAM,YAAY,WAAW,OAAO,WAAW,KAAK;AACpD,SAAO;AAAA,IACL,kBACE,WAAW,OAAO,kBAAkB,MAAM,eAC1C,WAAW,OAAO,kBAAkB,MAAM,UACrC,WAAW,OAAO,kBAAkB,IACrC,WAAW,OAAO,cAAc,IAC9B,UACA;AAAA,IACR,sBACE,WAAW,OAAO,kBAAkB,MAAM,UACtC;AAAA,MACE;AAAA,QACE,WAAW,OAAO,qBAAqB;AAAA,MACzC;AAAA,IACF,IACA;AAAA,IACN,WAAW;AAAA,IACX,eAAe,WAAW,OAAO,eAAe,KAAKA,iBAAgB,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,2BAA2B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOgB;AACd,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cACE,QAAQ,uBACJ,GAAG,QAAQ,SAAS,KAAK,QAAQ,oBAAoB,KACrD,QAAQ;AAAA,MAEd,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,MACjC,kBACE,QAAQ,qBAAqB,cAAc,SAAS;AAAA,MAEtD,qBACE,QAAQ,qBAAqB,UAAU,SAAS;AAAA,MAElD,OAAO,QAAQ,wBAAwB;AAAA,MACtC,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,YAErC;AAAA,sBAAQ,qBAAqB,cAC5B;AAAA,gBAAC;AAAA;AAAA,kBACC,WACE,aACI,0EACA;AAAA,kBAEN,MAAM;AAAA,kBACN,aAAa;AAAA,kBACb,YAAW;AAAA,kBACX,QAAO;AAAA;AAAA,cACT,IAEA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW,mDACT,aACI,uDACA,EACN;AAAA,kBACA,eAAY;AAAA;AAAA,cACd;AAAA,cAED,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;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOgB;AACd,QAAM,EAAE,EAAE,IAAI,eAAe;AAC7B,QAAM,sBAAsB,WAAW,kCAAkC;AACzE,QAAM,UAAU,iBAAiB,OAAO,CAAC;AAEzC,MAAI,QAAQ,SAAS,QAAQ;AAC3B,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,MACE,QAAQ,SAAS,mBACjB,QAAQ,SAAS,yBACjB,QAAQ,SAAS,gBACjB;AACA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,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,cAAY,QAAQ;AAAA,YACpB,WAAU;AAAA,YACV,2BAAyB,QAAQ;AAAA,YACjC,SAAS,QAAQ;AAAA,YACjB,oBAAoB;AAAA,cAClB,+BACE,QAAQ,SAAS,iBAAiB,SAAY;AAAA,cAChD,mCACE,QAAQ,SAAS,iBAAiB,SAAS;AAAA,cAC7C,2BACE,QAAQ,SAAS,iBAAiB,SAAY;AAAA,YAClD;AAAA,YACA,MAAM,QAAQ,SAAS,iBAAiB,YAAY;AAAA,YACpD,OAAO,QAAQ;AAAA,YACf,WAAW;AAAA,YACX,mBACE,aACI;AAAA,cACE,cAAc;AAAA,cACd,aAAa;AAAA,YACf,IACA;AAAA,YAEN;AAAA;AAAA,QACF;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,QAAQ,SAAS,UAAU;AAI7B,UAAM,aAAa,0BAA0B,QAAQ,cAAc,EAAE;AACrE,UAAM,eAAe,aACnB;AAAA,MAAC;AAAA;AAAA,QACC,cAAY;AAAA,QACZ,WAAU;AAAA,QACV,MAAK;AAAA,QACL,aAAa;AAAA,QAEb,8BAAC,aAAU,WAAU,YAAW;AAAA;AAAA,IAClC,IACE;AACJ,QAAI,YAAY,YAAY;AAC1B,aACE;AAAA,QAAC;AAAA;AAAA,UACC,cAAY,QAAQ;AAAA,UACpB,WAAW,gHACT,WAAW,gBAAgB,EAC7B;AAAA,UACA,iBAAiB;AAAA,UACjB,6BAA0B;AAAA,UAC1B,2BAAwB;AAAA,UACxB,2BAAyB,QAAQ;AAAA,UACjC,2BAAyB,QAAQ,cAAc,QAAQ;AAAA,UAEtD,qBAAW,WAAW;AAAA,YACrB,MAAM,QAAQ;AAAA,YACd,MAAM,QAAQ;AAAA,YACd,SAAS,QAAQ;AAAA,YACjB;AAAA,YACA;AAAA,UACF,CAAC;AAAA;AAAA,MACH;AAAA,IAEJ;AACA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,cAAY,QAAQ;AAAA,QACpB,WAAW,gHACT,WAAW,gBAAgB,EAC7B;AAAA,QACA,iBAAiB;AAAA,QACjB,6BAA0B;AAAA,QAC1B,2BAAwB;AAAA,QACxB,2BAAyB,QAAQ;AAAA,QACjC,2BAAyB,QAAQ,cAAc,QAAQ;AAAA,QAEvD;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,aAAU;AAAA,YAEV;AAAA,mCAAC,UAAK,WAAU,mCACd;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,eAAY;AAAA,oBACZ,WAAU;AAAA;AAAA,gBACZ;AAAA,gBACA,oBAAC,UAAK,WAAU,mDACb,kBAAQ,OACX;AAAA,gBACC;AAAA,iBACH;AAAA,cACC,QAAQ,UACP,oBAAC,UAAK,WAAU,+EACb,kBAAQ,SACX,IACE;AAAA;AAAA;AAAA,QACN;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,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,SAAS,QAAQ;AAAA,UACjB,OAAO,QAAQ;AAAA,UACf,WAAW;AAAA,UACX,mBACE,aACI;AAAA,YACE,cAAc;AAAA,YACd,aAAa;AAAA,UACf,IACA;AAAA,UAEN,SAAS,QAAQ;AAAA,UACjB;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,yBAAyB;AAAA,EACvC;AACF,GAEgB;AACd,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,SAAS;AAAA;AAAA,EACX;AAEJ;AAEO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA+B;AAC7B,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,OAAO,KAAK,SAAS,CAAC;AAAA,MACtB;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,SAAS;AAAA;AAAA,EACX;AAEJ;;;AG5pBA,SAAS,iBAAiB,YAAqC;AAC/D,SAAS,iBAAiB;AAC1B,SAAS,6BAA6B;AACtC,OAAO,cAAc,sBAAsB;AAC3C,SAAS,uCAAuC;;;ACYzC,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,MAC3D,GAAI,KAAK,eAAe,EAAE,cAAc,KAAK,aAAa,IAAI,CAAC;AAAA,MAC/D,GAAI,KAAK,mBACL,EAAE,kBAAkB,KAAK,iBAAiB,IAC1C,CAAC;AAAA,MACL,GAAI,KAAK,sBACL,EAAE,qBAAqB,KAAK,oBAAoB,IAChD,CAAC;AAAA,IACP;AAAA,EACF;AACA,MAAI,KAAK,SAAS,WAAW;AAC3B,UAAM,UAAU,kCAAkC;AAAA,MAChD,cAAc,KAAK;AAAA,MACnB,eAAe,KAAK;AAAA,MACpB,MAAM,KAAK;AAAA,IACb,CAAC;AACD,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,GAAI,KAAK,eAAe,KAAK,IACzB,EAAE,eAAe,KAAK,cAAc,KAAK,EAAE,IAC3C,CAAC;AAAA,MACL,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,eAAe,KAAK;AAAA,MACpB,WAAW,KAAK;AAAA,MAChB,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC7B,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,MAAI,KAAK,SAAS,UAAU;AAC1B,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,MAAM,KAAK;AAAA,MACX,YAAY,KAAK;AAAA,MACjB,MAAM,KAAK;AAAA,MACX,GAAG,sBAAsB,KAAK,WAAW;AAAA,MACzC,UAAU,KAAK;AAAA,MACf,SAAS,KAAK,WAAW;AAAA,IAC3B;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,eACE,OAAO,MAAM,kBAAkB,YAAY,MAAM,cAAc,KAAK,IAChE,MAAM,cAAc,KAAK,IACzB,6BAA6B,IAAI;AAAA,MACvC;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,cACE,OAAO,MAAM,YAAY,YAAY,MAAM,QAAQ,KAAK,IACpD,MAAM,QAAQ,KAAK,IACnB;AAAA,MACN,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,UAAU;AACrB,UAAM,cAAc,4BAA4B,KAAK;AACrD,UAAM,WACJ,OAAO,MAAM,aAAa,WAAW,MAAM,SAAS,KAAK,IAAI;AAC/D,UAAM,aACJ,OAAO,MAAM,eAAe,WAAW,MAAM,WAAW,KAAK,IAAI;AACnE,UAAM,cACJ,OAAO,MAAM,gBAAgB,YAAY,MAAM,YAAY,KAAK,IAC5D,MAAM,YAAY,KAAK,IACvB;AACN,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;AAAA,MACA;AAAA,IACF;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,gBACN,gBAAgB,IAAI;AAAA,IAC1B,cACE,OAAO,MAAM,iBAAiB,YAAY,MAAM,aAAa,KAAK,IAC9D,MAAM,aAAa,KAAK,IACxB;AAAA,IACN,kBACE,MAAM,qBAAqB,eAC3B,MAAM,qBAAqB,UACvB,MAAM,mBACN,MAAM,eACJ,UACA;AAAA,IACR,qBACE,OAAO,MAAM,wBAAwB,YACrC,MAAM,oBAAoB,KAAK,IAC3B,MAAM,oBAAoB,KAAK,IAC/B;AAAA,IACN,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;AAEO,SAAS,kCACd,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,MAAI,UAAU,UAAU;AACtB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,OAAsC;AAChE,SAAO,UAAU,eAAe,UAAU,SAAS,QAAQ;AAC7D;;;ADtYO,IAAM,4BAA4B,IAAI;AAAA,EAC3C;AACF;AAEO,SAAS,+BAA+B,QAAsB;AACnE,iBAAe,OAAO,MAAM,yBAAyB;AACvD;AAEA,SAAS,mBAAmB,MAAmD;AAC7E,MAAI,KAAK,SAAS,WAAW;AAC3B,WAAO,KAAK;AAAA,EACd;AACA,MACE,KAAK,SAAS,mBACd,KAAK,SAAS,kBACd,KAAK,SAAS,uBACd;AACA,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAGA,IAAM,oCAAoC;AAE1C,IAAM,iCAAiC;AAWhC,SAAS,kCACd,QACA,OACO;AACP,QAAM,EAAE,IAAI,IAAI,OAAO;AACvB,QAAM,QAAQ,IAAI,QAAQ,MAAM,IAAI;AACpC,QAAM,aAAa,MAAM,MAAM;AAC/B,QAAM,WAAW,MAAM,IAAI;AAC3B,QAAM,YAAY,IAAI;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,aAAa,MAAM,OAAO;AAChC,QAAM,WAAW,KAAK,IAAI,MAAM,IAAI,QAAQ,IAAI;AAGhD,MAAI,OAAO;AACX,WAAS,QAAQ,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG;AACvD,UAAM,OAAO,UAAU,KAAK;AAC5B,QAAI,SAAS,KAAK;AAChB,aAAO;AAAA,IACT;AACA,QAAI,SAAS,KAAK;AAChB,aAAO;AACP;AAAA,IACF;AAAA,EACF;AACA,MAAI,OAAO,GAAG;AACZ,WAAO;AAAA,EACT;AAGA,MAAI,QAAQ;AACZ,WAAS,QAAQ,UAAU,QAAQ,UAAU,QAAQ,SAAS,GAAG;AAC/D,UAAM,OAAO,UAAU,KAAK;AAC5B,QAAI,SAAS,KAAK;AAChB,aAAO;AAAA,IACT;AACA,QAAI,SAAS,KAAK;AAChB,cAAQ;AACR;AAAA,IACF;AAAA,EACF;AACA,MAAI,QAAQ,GAAG;AACb,WAAO;AAAA,EACT;AAIA,QAAM,QAAQ,UAAU,MAAM,MAAM,QAAQ,CAAC;AAC7C,MACE,QAAQ,OAAO,kCACf,MAAM,SAAS,IAAI,KACnB,MAAM,SAAS,iCAAiC,GAChD;AACA,WAAO;AAAA,EACT;AAIA,MAAI,MAAM,QAAQ;AAClB,MAAI,UAAU,GAAG,MAAM,OAAO,UAAU,GAAG,MAAM,KAAM;AACrD,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,aAAa,MAAM,IAAI,aAAa,IAAI;AACzD;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,eAAe,EAAE,SAAS,GAAG;AAAA,QAC7B,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,QACzB,YAAY,EAAE,SAAS,GAAG;AAAA,QAC1B,aAAa,EAAE,SAAS,GAAG;AAAA,QAC3B,SAAS,EAAE,SAAS,GAAG;AAAA,QACvB,cAAc,EAAE,SAAS,GAAG;AAAA,QAC5B,kBAAkB,EAAE,SAAS,GAAG;AAAA,QAChC,qBAAqB,EAAE,SAAS,GAAG;AAAA,MACrC;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,mBAAmB,IAAI;AACvC,YAAM,UAAU,QAAQ,eAAe,MAAM;AAC7C,YAAM,SAAS,cAAc,IAAI;AACjC,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,GAAI,UAAU,EAAE,+BAA+B,QAAQ,IAAI,CAAC;AAAA,UAC5D,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;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,MACN;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;AAKrC,kBAAM,cAAc;AAAA,cAClB;AAAA,cACA;AAAA,YACF;AACA,kBAAM,oBACJ,YAAY,QAAQ,KACpB,OAAO,MAAM,IAAI;AAAA,cACf,KAAK,IAAI,GAAG,YAAY,OAAO,CAAC;AAAA,cAChC,YAAY;AAAA,cACZ;AAAA,cACA;AAAA,YACF,MAAM;AACR,mBACG,MAAM,EACN,MAAM,EACN,gBAAgB,aAAa;AAAA,cAC5B,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;AAAA;AAAA;AAAA,YAIb,eAAe,CAAC,UAAU;AACxB,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,gBAAgB,CAAC,UAAU;AACzB,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;","names":["identity","dirnameFromPath"]}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
AgentRichTextReadonly,
|
|
3
3
|
promptForProviderSkills,
|
|
4
4
|
skillTriggerForPrefix
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-7LSLB7CN.js";
|
|
6
6
|
import {
|
|
7
7
|
classifyRecoverableAgentMessage,
|
|
8
8
|
resolveAgentErrorPresentation,
|
|
@@ -11,6 +11,14 @@ import {
|
|
|
11
11
|
import {
|
|
12
12
|
isWorkspaceAgentSyntheticControlMessage
|
|
13
13
|
} from "./chunk-XJ34OIEQ.js";
|
|
14
|
+
import {
|
|
15
|
+
agentComposerFileMentionReferences,
|
|
16
|
+
agentPreparedPromptFileToDraftFile,
|
|
17
|
+
agentPromptContentToComposerPrompt,
|
|
18
|
+
agentPromptFileBlocks,
|
|
19
|
+
agentPromptPastedTextBlocks,
|
|
20
|
+
materializeAgentComposerFileMentions
|
|
21
|
+
} from "./chunk-POU5WZNH.js";
|
|
14
22
|
import {
|
|
15
23
|
extractImageGenerationPreview,
|
|
16
24
|
isImageGenerationToolCall,
|
|
@@ -19,14 +27,6 @@ import {
|
|
|
19
27
|
resolveImageGenerationPreviewSrc,
|
|
20
28
|
stripImagePayloadData
|
|
21
29
|
} from "./chunk-JDVP33S5.js";
|
|
22
|
-
import {
|
|
23
|
-
agentComposerFileMentionReferences,
|
|
24
|
-
agentPreparedPromptFileToDraftFile,
|
|
25
|
-
agentPromptContentToComposerPrompt,
|
|
26
|
-
agentPromptFileBlocks,
|
|
27
|
-
agentPromptPastedTextBlocks,
|
|
28
|
-
materializeAgentComposerFileMentions
|
|
29
|
-
} from "./chunk-5RZVXSQQ.js";
|
|
30
30
|
import {
|
|
31
31
|
AGENT_PASTED_TEXT_BLOCK_KIND,
|
|
32
32
|
AGENT_PASTED_TEXT_MENTION_KIND
|
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
resolveWorkspaceFileLinkAction,
|
|
47
47
|
resolveWorkspaceFilePathCandidate,
|
|
48
48
|
resolveWorkspaceLinkAction
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-WSIGQG7C.js";
|
|
50
50
|
import {
|
|
51
51
|
cn
|
|
52
52
|
} from "./chunk-ZVYUTXQJ.js";
|
|
@@ -54,7 +54,7 @@ import {
|
|
|
54
54
|
useOptionalAgentActivityRuntime,
|
|
55
55
|
useOptionalAgentHostApi,
|
|
56
56
|
workspaceAgentProviderLabel
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-JUL7J4VN.js";
|
|
58
58
|
import {
|
|
59
59
|
fileChangeCountFromChanges,
|
|
60
60
|
fileChangeEntriesFromChanges,
|
|
@@ -64,7 +64,7 @@ import {
|
|
|
64
64
|
getActiveUiLanguage,
|
|
65
65
|
translate,
|
|
66
66
|
useTranslation
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-GXXPUEX6.js";
|
|
68
68
|
import {
|
|
69
69
|
normalizeAgentTitleText
|
|
70
70
|
} from "./chunk-MIJXEELH.js";
|
|
@@ -15802,4 +15802,4 @@ export {
|
|
|
15802
15802
|
AgentConversationFlow,
|
|
15803
15803
|
useProjectedAgentConversation
|
|
15804
15804
|
};
|
|
15805
|
-
//# sourceMappingURL=chunk-
|
|
15805
|
+
//# sourceMappingURL=chunk-RNBZBBI7.js.map
|
|
@@ -6,14 +6,14 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
getOptionalAgentHostApi,
|
|
8
8
|
useOptionalAgentHostApi
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-JUL7J4VN.js";
|
|
10
10
|
import {
|
|
11
11
|
managedAgentRoundedIconUrl
|
|
12
12
|
} from "./chunk-M6HTOCQK.js";
|
|
13
13
|
import {
|
|
14
14
|
translate,
|
|
15
15
|
useTranslation
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-GXXPUEX6.js";
|
|
17
17
|
import {
|
|
18
18
|
resolveAgentWorkspaceFileVisualKind
|
|
19
19
|
} from "./chunk-5BJYO6X3.js";
|
|
@@ -3731,4 +3731,4 @@ export {
|
|
|
3731
3731
|
AgentMessageMarkdown,
|
|
3732
3732
|
CustomScrollArea
|
|
3733
3733
|
};
|
|
3734
|
-
//# sourceMappingURL=chunk-
|
|
3734
|
+
//# sourceMappingURL=chunk-WSIGQG7C.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
translateInUiLanguage
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-62LWOH3P.js";
|
|
4
4
|
import {
|
|
5
5
|
normalizeAgentTitleText
|
|
6
6
|
} from "./chunk-MIJXEELH.js";
|
|
@@ -374,4 +374,4 @@ export {
|
|
|
374
374
|
resolveAgentGuiWorkbenchHeaderTitle,
|
|
375
375
|
resolveAgentGuiWorkbenchSessionTitle
|
|
376
376
|
};
|
|
377
|
-
//# sourceMappingURL=chunk-
|
|
377
|
+
//# sourceMappingURL=chunk-YJ27WHM3.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as AgentContextMentionItem } from '../agentFileMentionContracts-
|
|
1
|
+
import { A as AgentContextMentionItem } from '../agentFileMentionContracts-BeBex-Sf.js';
|
|
2
2
|
import { AgentMentionSearchState, AgentMentionBrowseCategory, AgentMentionFilterId, AgentMentionGroupId } from '../mention-search.js';
|
|
3
3
|
export { AgentMentionGroup, AgentMentionSearchController } from '../mention-search.js';
|
|
4
4
|
import { ReactNode } from 'react';
|
|
@@ -3,28 +3,28 @@ import {
|
|
|
3
3
|
AgentFileMentionPalette,
|
|
4
4
|
flattenAgentMentionPaletteEntries,
|
|
5
5
|
groupStartKeys
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-4DAJ5SVX.js";
|
|
7
7
|
import {
|
|
8
8
|
AgentMentionSearchController
|
|
9
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-FRSV66P3.js";
|
|
10
10
|
import "../chunk-VMPA46ET.js";
|
|
11
11
|
import "../chunk-XJ34OIEQ.js";
|
|
12
|
+
import "../chunk-POU5WZNH.js";
|
|
12
13
|
import "../chunk-JDVP33S5.js";
|
|
13
|
-
import "../chunk-5RZVXSQQ.js";
|
|
14
14
|
import "../chunk-3V5OCA2M.js";
|
|
15
15
|
import {
|
|
16
16
|
AGENT_CONTEXT_MENTION_PROVIDER_IDS
|
|
17
17
|
} from "../chunk-RMQREVJY.js";
|
|
18
18
|
import "../chunk-FGLQZ6I4.js";
|
|
19
|
-
import "../chunk-
|
|
19
|
+
import "../chunk-BGNYUYLP.js";
|
|
20
20
|
import "../chunk-YMXYBG7U.js";
|
|
21
|
-
import "../chunk-
|
|
22
|
-
import "../chunk-F5UR6EJG.js";
|
|
21
|
+
import "../chunk-JUL7J4VN.js";
|
|
23
22
|
import "../chunk-M6HTOCQK.js";
|
|
24
|
-
import "../chunk-
|
|
23
|
+
import "../chunk-F5UR6EJG.js";
|
|
24
|
+
import "../chunk-GXXPUEX6.js";
|
|
25
25
|
import "../chunk-5BJYO6X3.js";
|
|
26
26
|
import "../chunk-AFUVWWQY.js";
|
|
27
|
-
import "../chunk-
|
|
27
|
+
import "../chunk-62LWOH3P.js";
|
|
28
28
|
import "../chunk-MIJXEELH.js";
|
|
29
29
|
import "../chunk-D2JUDUYY.js";
|
|
30
30
|
import "../chunk-QNE2ZPPV.js";
|
package/dist/i18n/index.d.ts
CHANGED
|
@@ -520,7 +520,7 @@ declare const agentGuiI18nResources: {
|
|
|
520
520
|
readonly composerFileFolderUnsupported: "Folders cannot be attached here";
|
|
521
521
|
readonly composerFileTooLarge: "File is too large";
|
|
522
522
|
readonly composerFilePreparationFailed: "File preparation failed";
|
|
523
|
-
readonly mentionPalette: "
|
|
523
|
+
readonly mentionPalette: "Reference or Invoke";
|
|
524
524
|
readonly addReference: "Add reference";
|
|
525
525
|
readonly addContent: "Add files and more";
|
|
526
526
|
readonly quickPrompts: {
|
|
@@ -1022,26 +1022,24 @@ declare const agentGuiI18nResources: {
|
|
|
1022
1022
|
readonly planModeLabel: "Plan Mode";
|
|
1023
1023
|
readonly normalModeLabel: "Normal";
|
|
1024
1024
|
readonly normalModeDescription: "Execute the request directly";
|
|
1025
|
-
readonly tuttiModeLabel: "Tutti";
|
|
1025
|
+
readonly tuttiModeLabel: "Tutti Mode";
|
|
1026
1026
|
readonly tuttiModeDescription: "Ask the agent to prefer Tutti's native workflow capabilities";
|
|
1027
1027
|
readonly tuttiModeRemove: "Turn off Tutti mode";
|
|
1028
1028
|
readonly tuttiBudgetTitle: "Tutti intensity";
|
|
1029
1029
|
readonly tuttiBudgetIntensityLabel: "Intensity";
|
|
1030
1030
|
readonly tuttiBudgetPreviewTitle: "Planner tendency";
|
|
1031
1031
|
readonly tuttiBudgetPreviewHint: "The exact model, total task count, and safe parallelism are inferred from the request and selected Skills.";
|
|
1032
|
-
readonly tuttiBudgetPreviewCost: "
|
|
1033
|
-
readonly tuttiBudgetPreviewBalance: "
|
|
1032
|
+
readonly tuttiBudgetPreviewCost: "Economical";
|
|
1033
|
+
readonly tuttiBudgetPreviewBalance: "Balanced";
|
|
1034
1034
|
readonly tuttiBudgetPreviewPowerful: "Powerful";
|
|
1035
1035
|
readonly tuttiBudgetModelStrengthLabel: "Model strength";
|
|
1036
1036
|
readonly tuttiBudgetModelStrengthCost: "Economical";
|
|
1037
1037
|
readonly tuttiBudgetModelStrengthBalance: "Balanced";
|
|
1038
|
-
readonly tuttiBudgetModelStrengthPowerful: "
|
|
1038
|
+
readonly tuttiBudgetModelStrengthPowerful: "Powerful";
|
|
1039
1039
|
readonly tuttiBudgetAgentCountLabel: "Parallel Agents";
|
|
1040
1040
|
readonly tuttiBudgetAgentCountCost: "1";
|
|
1041
1041
|
readonly tuttiBudgetAgentCountBalance: "2–3";
|
|
1042
1042
|
readonly tuttiBudgetAgentCountPowerful: "Up to 4";
|
|
1043
|
-
readonly tuttiBudgetConfirm: "Confirm";
|
|
1044
|
-
readonly tuttiBudgetCancel: "Cancel";
|
|
1045
1043
|
readonly tuttiModeUpdateFailed: "Tutti mode couldn't be updated. Try again.";
|
|
1046
1044
|
readonly tuttiModeUpdateUncertain: "Tutti mode is still being reconciled. Try again after it finishes.";
|
|
1047
1045
|
readonly tuttiModePlan: {
|
|
@@ -3332,7 +3330,7 @@ declare const agentGuiI18nResources: {
|
|
|
3332
3330
|
readonly composerFileFolderUnsupported: "暂不支持在这里附加文件夹";
|
|
3333
3331
|
readonly composerFileTooLarge: "文件过大";
|
|
3334
3332
|
readonly composerFilePreparationFailed: "文件处理失败";
|
|
3335
|
-
readonly mentionPalette: "
|
|
3333
|
+
readonly mentionPalette: "引用或调用";
|
|
3336
3334
|
readonly addReference: "添加引用";
|
|
3337
3335
|
readonly addContent: "添加文件等内容";
|
|
3338
3336
|
readonly quickPrompts: {
|
|
@@ -3903,26 +3901,24 @@ declare const agentGuiI18nResources: {
|
|
|
3903
3901
|
readonly planModeLabel: "计划模式";
|
|
3904
3902
|
readonly normalModeLabel: "普通";
|
|
3905
3903
|
readonly normalModeDescription: "直接执行请求";
|
|
3906
|
-
readonly tuttiModeLabel: "Tutti";
|
|
3904
|
+
readonly tuttiModeLabel: "Tutti Mode";
|
|
3907
3905
|
readonly tuttiModeDescription: "提示 Agent 优先使用 Tutti 原生工作流能力";
|
|
3908
3906
|
readonly tuttiModeRemove: "关闭 Tutti mode";
|
|
3909
3907
|
readonly tuttiBudgetTitle: "Tutti 强度";
|
|
3910
3908
|
readonly tuttiBudgetIntensityLabel: "强度";
|
|
3911
3909
|
readonly tuttiBudgetPreviewTitle: "规划倾向";
|
|
3912
3910
|
readonly tuttiBudgetPreviewHint: "实际模型、Agent 总数与安全并行度会根据请求和所选 Skill 推导";
|
|
3913
|
-
readonly tuttiBudgetPreviewCost: "
|
|
3914
|
-
readonly tuttiBudgetPreviewBalance: "
|
|
3915
|
-
readonly tuttiBudgetPreviewPowerful: "
|
|
3911
|
+
readonly tuttiBudgetPreviewCost: "经济型";
|
|
3912
|
+
readonly tuttiBudgetPreviewBalance: "均衡型";
|
|
3913
|
+
readonly tuttiBudgetPreviewPowerful: "强劲型";
|
|
3916
3914
|
readonly tuttiBudgetModelStrengthLabel: "模型强度";
|
|
3917
3915
|
readonly tuttiBudgetModelStrengthCost: "经济型";
|
|
3918
3916
|
readonly tuttiBudgetModelStrengthBalance: "均衡型";
|
|
3919
|
-
readonly tuttiBudgetModelStrengthPowerful: "
|
|
3917
|
+
readonly tuttiBudgetModelStrengthPowerful: "强劲型";
|
|
3920
3918
|
readonly tuttiBudgetAgentCountLabel: "并行 Agent";
|
|
3921
3919
|
readonly tuttiBudgetAgentCountCost: "1 个";
|
|
3922
3920
|
readonly tuttiBudgetAgentCountBalance: "2–3 个";
|
|
3923
3921
|
readonly tuttiBudgetAgentCountPowerful: "最多 4 个";
|
|
3924
|
-
readonly tuttiBudgetConfirm: "确认";
|
|
3925
|
-
readonly tuttiBudgetCancel: "取消";
|
|
3926
3922
|
readonly tuttiModeUpdateFailed: "Tutti 模式更新失败,请重试";
|
|
3927
3923
|
readonly tuttiModeUpdateUncertain: "Tutti 模式状态仍在确认中,请稍后重试";
|
|
3928
3924
|
readonly tuttiModePlan: {
|
|
@@ -4109,7 +4105,7 @@ declare const agentGuiI18nResources: {
|
|
|
4109
4105
|
readonly newConversation: "新建会话";
|
|
4110
4106
|
readonly accountMenuTitle: "Tutti Agent";
|
|
4111
4107
|
readonly accountMenuMember: "会员";
|
|
4112
|
-
readonly accountMenuUpgrade: "
|
|
4108
|
+
readonly accountMenuUpgrade: "升级";
|
|
4113
4109
|
readonly accountMenuRecharge: "充值积分";
|
|
4114
4110
|
readonly accountMenuViewPlans: "查看积分方案";
|
|
4115
4111
|
readonly accountMenuCreditsBalance: "积分余额";
|
package/dist/i18n/index.js
CHANGED