@tutti-os/agent-gui 0.0.233 → 0.0.234
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 +49 -0
- package/dist/{AgentRichTextReadonly-U3XUJYCW.js → AgentRichTextReadonly-CCELQPHE.js} +5 -5
- package/dist/agent-conversation/index.d.ts +17 -4
- package/dist/agent-conversation/index.js +13 -9
- package/dist/agent-conversation/index.js.map +1 -1
- package/dist/agent-gui.d.ts +19 -3
- package/dist/agent-gui.js +22 -16
- package/dist/agent-message-center/index.d.ts +1 -1
- package/dist/agent-message-center/index.js +10 -7
- package/dist/agent-message-center/index.js.map +1 -1
- package/dist/{agentGuiNodeTypes-DW7T--Y8.d.ts → agentGuiNodeTypes-Dgl7kQHA.d.ts} +2 -2
- package/dist/agents.d.ts +1 -1
- package/dist/app/renderer/agentactivity.css +17 -0
- package/dist/{chunk-M6WEFXPL.js → chunk-2MCNNB2P.js} +2 -24
- package/dist/chunk-2MCNNB2P.js.map +1 -0
- package/dist/{chunk-CQFT3MI5.js → chunk-3YYI6RXA.js} +7 -5
- package/dist/{chunk-CQFT3MI5.js.map → chunk-3YYI6RXA.js.map} +1 -1
- package/dist/{chunk-EDP4D42H.js → chunk-45KN5Z5F.js} +877 -871
- package/dist/chunk-45KN5Z5F.js.map +1 -0
- package/dist/{chunk-T57ZZWTC.js → chunk-4HAG3FOY.js} +2 -2
- package/dist/{chunk-ZBI6R46N.js → chunk-5DN5N2XS.js} +2 -2
- package/dist/{chunk-BCBB4HOV.js → chunk-634MNSI5.js} +2 -2
- package/dist/chunk-A4KKC324.js +4768 -0
- package/dist/chunk-A4KKC324.js.map +1 -0
- package/dist/chunk-ALAGL6VL.js +48 -0
- package/dist/chunk-ALAGL6VL.js.map +1 -0
- package/dist/{chunk-2STAUA73.js → chunk-AYTUAZE3.js} +5 -2
- package/dist/chunk-AYTUAZE3.js.map +1 -0
- package/dist/{chunk-SWO67UWQ.js → chunk-CZOZBUIM.js} +7 -7
- package/dist/{chunk-SWO67UWQ.js.map → chunk-CZOZBUIM.js.map} +1 -1
- package/dist/{chunk-2L2LVSOD.js → chunk-EHNPHZE4.js} +881 -5812
- package/dist/chunk-EHNPHZE4.js.map +1 -0
- package/dist/{chunk-N5356722.js → chunk-EKQ7UX2B.js} +13 -319
- package/dist/chunk-EKQ7UX2B.js.map +1 -0
- package/dist/{chunk-ZXEICU6J.js → chunk-KK7YXPTS.js} +3 -1
- package/dist/chunk-KK7YXPTS.js.map +1 -0
- package/dist/{chunk-WGCDSA7P.js → chunk-MBM7PJIF.js} +27 -506
- package/dist/chunk-MBM7PJIF.js.map +1 -0
- package/dist/chunk-RMC2MGL4.js +557 -0
- package/dist/chunk-RMC2MGL4.js.map +1 -0
- package/dist/{chunk-JA6XAKKE.js → chunk-TWF6JXPC.js} +2 -2
- package/dist/{chunk-7AYFKNLD.js → chunk-TWMV6YTX.js} +4 -4
- package/dist/chunk-VV3YIU5W.js +25 -0
- package/dist/chunk-VV3YIU5W.js.map +1 -0
- package/dist/{chunk-GLVENTN6.js → chunk-WXLO33YP.js} +2 -2
- package/dist/chunk-XWPHTXEM.js +529 -0
- package/dist/chunk-XWPHTXEM.js.map +1 -0
- package/dist/chunk-YEXRTXTE.js +315 -0
- package/dist/chunk-YEXRTXTE.js.map +1 -0
- package/dist/{chunk-WMJDOMG6.js → chunk-ZELGKLW5.js} +4 -4
- package/dist/composer-projection.d.ts +37 -0
- package/dist/composer-projection.js +21 -0
- package/dist/composer-projection.js.map +1 -0
- package/dist/context-mention-palette/index.js +9 -7
- package/dist/conversation-projection.d.ts +551 -0
- package/dist/conversation-projection.js +42 -0
- package/dist/conversation-projection.js.map +1 -0
- package/dist/conversation-rail-projection.js +3 -3
- package/dist/i18n/index.d.ts +2 -0
- package/dist/i18n/index.js +2 -2
- package/dist/index.d.ts +32 -13
- package/dist/index.js +22 -16
- package/dist/index.js.map +1 -1
- package/dist/mention-search.js +7 -5
- package/dist/{types-CHAMK2g7.d.ts → types-DtXXsISB.d.ts} +1 -1
- package/dist/workbench/contribution.js +4 -4
- package/dist/workbench/index.js +4 -4
- package/dist/workbench/sessionTitle.js +3 -3
- package/dist/workspace-agent-generated-files.d.ts +1 -12
- package/dist/workspaceAgentActivityListTypes-BUKNyMbh.d.ts +48 -0
- package/dist/{workspaceLinkActions-CzsbvGmC.d.ts → workspaceLinkActions-DxyzMy10.d.ts} +13 -12
- package/package.json +31 -17
- package/dist/chunk-2L2LVSOD.js.map +0 -1
- package/dist/chunk-2STAUA73.js.map +0 -1
- package/dist/chunk-EDP4D42H.js.map +0 -1
- package/dist/chunk-M6WEFXPL.js.map +0 -1
- package/dist/chunk-N5356722.js.map +0 -1
- package/dist/chunk-WGCDSA7P.js.map +0 -1
- package/dist/chunk-ZXEICU6J.js.map +0 -1
- /package/dist/{AgentRichTextReadonly-U3XUJYCW.js.map → AgentRichTextReadonly-CCELQPHE.js.map} +0 -0
- /package/dist/{chunk-T57ZZWTC.js.map → chunk-4HAG3FOY.js.map} +0 -0
- /package/dist/{chunk-ZBI6R46N.js.map → chunk-5DN5N2XS.js.map} +0 -0
- /package/dist/{chunk-BCBB4HOV.js.map → chunk-634MNSI5.js.map} +0 -0
- /package/dist/{chunk-JA6XAKKE.js.map → chunk-TWF6JXPC.js.map} +0 -0
- /package/dist/{chunk-7AYFKNLD.js.map → chunk-TWMV6YTX.js.map} +0 -0
- /package/dist/{chunk-GLVENTN6.js.map → chunk-WXLO33YP.js.map} +0 -0
- /package/dist/{chunk-WMJDOMG6.js.map → chunk-ZELGKLW5.js.map} +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// agent-gui/agentGuiNode/model/composerSettingsSupport.ts
|
|
2
|
+
import {
|
|
3
|
+
resolveAgentActivityCapability
|
|
4
|
+
} from "@tutti-os/agent-activity-core";
|
|
5
|
+
function composerSettingsSupportFromOptions(composerOptions, sessionCapabilities) {
|
|
6
|
+
const hasModelReasoningOptions = Object.values(
|
|
7
|
+
composerOptions?.reasoningOptionsByModel ?? {}
|
|
8
|
+
).some((profile) => profile.options.length > 0);
|
|
9
|
+
return {
|
|
10
|
+
model: composerOptions?.modelConfigurable ?? false,
|
|
11
|
+
reasoning: (composerOptions?.reasoningConfigurable ?? false) || hasModelReasoningOptions,
|
|
12
|
+
speed: composerOptions?.speedConfigurable ?? false,
|
|
13
|
+
permission: composerOptions?.permissionConfig?.configurable ?? false,
|
|
14
|
+
plan: resolveAgentActivityCapability("planMode", {
|
|
15
|
+
composerOptions,
|
|
16
|
+
sessionCapabilities
|
|
17
|
+
}) === true,
|
|
18
|
+
browser: resolveAgentActivityCapability("browserUse", {
|
|
19
|
+
composerOptions,
|
|
20
|
+
sessionCapabilities
|
|
21
|
+
}) === true,
|
|
22
|
+
computer: resolveAgentActivityCapability("computerUse", {
|
|
23
|
+
composerOptions,
|
|
24
|
+
sessionCapabilities
|
|
25
|
+
}) === true,
|
|
26
|
+
planImplementation: resolveAgentActivityCapability("planImplementation", {
|
|
27
|
+
composerOptions,
|
|
28
|
+
sessionCapabilities
|
|
29
|
+
}) === true,
|
|
30
|
+
permissionModeChangeDuringTurn: resolveAgentActivityCapability("permissionModeChangeDuringTurn", {
|
|
31
|
+
composerOptions,
|
|
32
|
+
sessionCapabilities
|
|
33
|
+
}) === true,
|
|
34
|
+
permissionModeChangeDeferred: resolveAgentActivityCapability("permissionModeChangeDeferred", {
|
|
35
|
+
composerOptions,
|
|
36
|
+
sessionCapabilities
|
|
37
|
+
}) === true,
|
|
38
|
+
modelSwitch: resolveAgentActivityCapability("modelSwitch", {
|
|
39
|
+
composerOptions,
|
|
40
|
+
sessionCapabilities
|
|
41
|
+
}) === true
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export {
|
|
46
|
+
composerSettingsSupportFromOptions
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=chunk-ALAGL6VL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../agent-gui/agentGuiNode/model/composerSettingsSupport.ts"],"sourcesContent":["import {\n resolveAgentActivityCapability,\n type AgentActivityComposerOptions,\n type AgentActivitySessionCapabilities\n} from \"@tutti-os/agent-activity-core\";\n\nexport interface AgentComposerSettingsSupport {\n model: boolean;\n reasoning: boolean;\n speed: boolean;\n permission: boolean;\n plan: boolean;\n browser: boolean;\n computer: boolean;\n planImplementation: boolean;\n permissionModeChangeDuringTurn: boolean;\n permissionModeChangeDeferred: boolean;\n modelSwitch: boolean;\n}\n\n/**\n * Derives which composer settings the active provider supports from the\n * daemon-provided composer options and the live session capabilities. This is\n * the single GUI-side answer to \"what does this provider's composer show\" —\n * the backend (tuttid composer options + adapter capability reporting) is the\n * source of truth, and the daemon clamps persisted values on its side.\n */\nexport interface AgentComposerModelPlanBinding {\n id: string;\n name: string;\n protocol?: string | null;\n}\n\n/**\n * Pure parse of the composer options `runtimeContext.modelPlan` payload\n * (`{ id, name, protocol }`) advertised for plan-bound targets. Returns null\n * for absent or malformed payloads so the composer degrades to the\n * provider-native model source presentation.\n */\nexport function composerModelPlanFromRuntimeContext(\n runtimeContext: Record<string, unknown> | null | undefined\n): AgentComposerModelPlanBinding | null {\n const raw = runtimeContext?.modelPlan;\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n return null;\n }\n const record = raw as Record<string, unknown>;\n const id = typeof record.id === \"string\" ? record.id.trim() : \"\";\n const name = typeof record.name === \"string\" ? record.name.trim() : \"\";\n if (!id || !name) {\n return null;\n }\n const protocol =\n typeof record.protocol === \"string\" && record.protocol.trim()\n ? record.protocol.trim()\n : null;\n return { id, name, protocol };\n}\n\nexport function composerSettingsSupportFromOptions(\n composerOptions: AgentActivityComposerOptions | null,\n sessionCapabilities: Partial<AgentActivitySessionCapabilities> | null\n): AgentComposerSettingsSupport {\n const hasModelReasoningOptions = Object.values(\n composerOptions?.reasoningOptionsByModel ?? {}\n ).some((profile) => profile.options.length > 0);\n return {\n model: composerOptions?.modelConfigurable ?? false,\n reasoning:\n (composerOptions?.reasoningConfigurable ?? false) ||\n hasModelReasoningOptions,\n speed: composerOptions?.speedConfigurable ?? false,\n permission: composerOptions?.permissionConfig?.configurable ?? false,\n plan:\n resolveAgentActivityCapability(\"planMode\", {\n composerOptions,\n sessionCapabilities\n }) === true,\n browser:\n resolveAgentActivityCapability(\"browserUse\", {\n composerOptions,\n sessionCapabilities\n }) === true,\n computer:\n resolveAgentActivityCapability(\"computerUse\", {\n composerOptions,\n sessionCapabilities\n }) === true,\n planImplementation:\n resolveAgentActivityCapability(\"planImplementation\", {\n composerOptions,\n sessionCapabilities\n }) === true,\n permissionModeChangeDuringTurn:\n resolveAgentActivityCapability(\"permissionModeChangeDuringTurn\", {\n composerOptions,\n sessionCapabilities\n }) === true,\n permissionModeChangeDeferred:\n resolveAgentActivityCapability(\"permissionModeChangeDeferred\", {\n composerOptions,\n sessionCapabilities\n }) === true,\n modelSwitch:\n resolveAgentActivityCapability(\"modelSwitch\", {\n composerOptions,\n sessionCapabilities\n }) === true\n };\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAGK;AAuDA,SAAS,mCACd,iBACA,qBAC8B;AAC9B,QAAM,2BAA2B,OAAO;AAAA,IACtC,iBAAiB,2BAA2B,CAAC;AAAA,EAC/C,EAAE,KAAK,CAAC,YAAY,QAAQ,QAAQ,SAAS,CAAC;AAC9C,SAAO;AAAA,IACL,OAAO,iBAAiB,qBAAqB;AAAA,IAC7C,YACG,iBAAiB,yBAAyB,UAC3C;AAAA,IACF,OAAO,iBAAiB,qBAAqB;AAAA,IAC7C,YAAY,iBAAiB,kBAAkB,gBAAgB;AAAA,IAC/D,MACE,+BAA+B,YAAY;AAAA,MACzC;AAAA,MACA;AAAA,IACF,CAAC,MAAM;AAAA,IACT,SACE,+BAA+B,cAAc;AAAA,MAC3C;AAAA,MACA;AAAA,IACF,CAAC,MAAM;AAAA,IACT,UACE,+BAA+B,eAAe;AAAA,MAC5C;AAAA,MACA;AAAA,IACF,CAAC,MAAM;AAAA,IACT,oBACE,+BAA+B,sBAAsB;AAAA,MACnD;AAAA,MACA;AAAA,IACF,CAAC,MAAM;AAAA,IACT,gCACE,+BAA+B,kCAAkC;AAAA,MAC/D;AAAA,MACA;AAAA,IACF,CAAC,MAAM;AAAA,IACT,8BACE,+BAA+B,gCAAgC;AAAA,MAC7D;AAAA,MACA;AAAA,IACF,CAAC,MAAM;AAAA,IACT,aACE,+BAA+B,eAAe;AAAA,MAC5C;AAAA,MACA;AAAA,IACF,CAAC,MAAM;AAAA,EACX;AACF;","names":[]}
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
formatAgentMentionMarkdown,
|
|
13
13
|
mentionItemToAttrs,
|
|
14
14
|
parseAgentMentionMarkdown
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-CZOZBUIM.js";
|
|
16
16
|
|
|
17
17
|
// shared/AgentRichTextReadonly.tsx
|
|
18
18
|
import { useMemo } from "react";
|
|
@@ -136,6 +136,9 @@ function parseAgentSkillToken(text, start, skills = []) {
|
|
|
136
136
|
if (!isSkillTokenBoundary(text[start - 1] ?? "")) {
|
|
137
137
|
return null;
|
|
138
138
|
}
|
|
139
|
+
if (text[start] !== "$" && text[start] !== "/") {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
139
142
|
for (const candidate of skillTokenCandidates(skills)) {
|
|
140
143
|
if (!text.startsWith(candidate.trigger, start)) {
|
|
141
144
|
continue;
|
|
@@ -747,4 +750,4 @@ export {
|
|
|
747
750
|
agentRichTextContentToPromptText,
|
|
748
751
|
AgentRichTextReadonly
|
|
749
752
|
};
|
|
750
|
-
//# sourceMappingURL=chunk-
|
|
753
|
+
//# sourceMappingURL=chunk-AYTUAZE3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../shared/AgentRichTextReadonly.tsx","../agent-gui/agentGuiNode/agentRichText/agentSkillTokenExtension.ts","../agent-gui/agentGuiNode/model/agentSkillOptions.ts","../agent-gui/agentGuiNode/agentRichText/agentCapabilityTokenExtension.ts","../agent-gui/agentGuiNode/agentRichText/agentRichTextDocument.ts","../agent-gui/agentGuiNode/agentRichText/agentRichTextExtensions.ts"],"sourcesContent":["import { useMemo, type JSX, type MouseEvent } from \"react\";\nimport type { JSONContent } from \"@tiptap/core\";\nimport { renderToReactElement } from \"@tiptap/static-renderer\";\nimport { cn } from \"../app/renderer/lib/utils\";\nimport { plainTextToAgentRichTextDoc } from \"../agent-gui/agentGuiNode/agentRichText/agentRichTextDocument\";\nimport { AGENT_RICH_TEXT_CARET_ANCHOR } from \"../agent-gui/agentGuiNode/agentRichText/agentRichTextCaretAnchor\";\nimport { createAgentRichTextReadonlyExtensions } from \"../agent-gui/agentGuiNode/agentRichText/agentRichTextExtensions\";\nimport { AgentMentionReadonlyView } from \"../agent-gui/agentGuiNode/agentRichText/AgentMentionNodeView\";\nimport type { AgentMessageMarkdownWorkspaceAppIcon } from \"./AgentMessageMarkdown\";\nimport type { AgentGUIProviderSkillOption } from \"../agent-gui/agentGuiNode/model/agentGuiNodeTypes\";\nimport {\n resolveAgentTargetPresentation,\n useAgentTargetPresentations,\n type AgentMessageMarkdownAgentTarget\n} from \"./AgentTargetPresentationContext\";\nimport { readParsedDocumentCache } from \"./parsedDocumentCache\";\n\nconst EMPTY_WORKSPACE_APP_ICONS: readonly AgentMessageMarkdownWorkspaceAppIcon[] =\n [];\nconst EMPTY_SKILLS: readonly AgentGUIProviderSkillOption[] = [];\n\ninterface AgentRichTextReadonlyProps {\n value: string;\n documentCacheKey?: string;\n className?: string;\n editorClassName?: string;\n onLinkClick?: (href: string) => void;\n availableSkills?: readonly AgentGUIProviderSkillOption[];\n workspaceAppIcons?: readonly AgentMessageMarkdownWorkspaceAppIcon[];\n agentTargets?: readonly AgentMessageMarkdownAgentTarget[];\n}\n\nexport function AgentRichTextReadonly({\n value,\n documentCacheKey,\n className,\n editorClassName,\n onLinkClick,\n availableSkills = EMPTY_SKILLS,\n workspaceAppIcons = EMPTY_WORKSPACE_APP_ICONS,\n agentTargets\n}: AgentRichTextReadonlyProps): JSX.Element {\n \"use memo\";\n const contextAgentTargets = useAgentTargetPresentations();\n const effectiveAgentTargets = agentTargets ?? contextAgentTargets;\n const skillsCacheSource = useMemo(\n () => JSON.stringify(availableSkills),\n [availableSkills]\n );\n const parsedDoc = useMemo(\n () =>\n readParsedDocumentCache({\n namespace: \"rich-text\",\n identity: documentCacheKey?.trim() || \"content\",\n source: `${value}\\u0000${skillsCacheSource}`,\n create: () =>\n plainTextToAgentRichTextDoc(value, { skills: availableSkills })\n }),\n [availableSkills, documentCacheKey, skillsCacheSource, value]\n );\n const contentDoc = useMemo(\n () =>\n hydrateAgentRichTextMentionPresentations(\n parsedDoc,\n workspaceAppIcons,\n effectiveAgentTargets\n ),\n [effectiveAgentTargets, parsedDoc, workspaceAppIcons]\n );\n const isMentionOnly = isMentionOnlyRichTextDoc(contentDoc);\n const extensions = useMemo(\n () =>\n createAgentRichTextReadonlyExtensions({\n skills: availableSkills\n }),\n [availableSkills]\n );\n const renderedContent = useMemo(\n () =>\n renderToReactElement({\n content: contentDoc,\n extensions,\n options: {\n nodeMapping: {\n agentFileMention: ({ node }) => (\n <AgentMentionReadonlyView attrs={node.attrs ?? {}} />\n )\n }\n }\n }),\n [contentDoc, extensions]\n );\n\n const handleClick = (event: MouseEvent<HTMLDivElement>) => {\n if (!onLinkClick || !(event.target instanceof Element)) {\n return;\n }\n const mention = event.target.closest('[data-agent-file-mention=\"true\"]');\n if (!(mention instanceof HTMLElement)) {\n return;\n }\n const href = mention.getAttribute(\"data-agent-mention-href\") || \"\";\n if (!href) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n onLinkClick(href);\n };\n\n return (\n <div\n className={className}\n data-agent-mention-only={isMentionOnly ? \"true\" : undefined}\n >\n <div\n className={cn(\n \"tiptap ProseMirror\",\n editorClassName,\n \"max-w-full overflow-x-hidden overflow-y-auto whitespace-pre-wrap break-words [overflow-wrap:anywhere] [&_p]:m-0 [&_p]:min-h-[1.45em] [&_a[data-agent-file-mention=true]]:cursor-pointer [&_[data-agent-file-mention=true]]:overflow-hidden\"\n )}\n onClick={handleClick}\n >\n {renderedContent}\n </div>\n </div>\n );\n}\n\nfunction isMentionOnlyRichTextDoc(doc: JSONContent): boolean {\n if (doc.type !== \"doc\") {\n return false;\n }\n const blocks = doc.content ?? [];\n if (blocks.length !== 1) {\n return false;\n }\n const paragraph = blocks[0];\n if (paragraph?.type !== \"paragraph\") {\n return false;\n }\n const inlineContent = (paragraph.content ?? []).filter(\n (node) =>\n !(\n node.type === \"text\" &&\n (node.text ?? \"\").replaceAll(AGENT_RICH_TEXT_CARET_ANCHOR, \"\")\n .length === 0\n )\n );\n return (\n inlineContent.length === 1 && inlineContent[0]?.type === \"agentFileMention\"\n );\n}\n\nfunction hydrateAgentRichTextMentionPresentations(\n parsedDoc: JSONContent,\n workspaceAppIcons: readonly AgentMessageMarkdownWorkspaceAppIcon[],\n agentTargets: readonly AgentMessageMarkdownAgentTarget[]\n): JSONContent {\n let doc = parsedDoc;\n if (workspaceAppIcons.length > 0) {\n doc = hydrateWorkspaceAppMentionIcons(doc, workspaceAppIcons);\n }\n if (agentTargets.length > 0) {\n doc = hydrateAgentMentionPresentations(doc, agentTargets);\n }\n return doc;\n}\n\nfunction hydrateWorkspaceAppMentionIcons(\n node: JSONContent,\n workspaceAppIcons: readonly AgentMessageMarkdownWorkspaceAppIcon[]\n): JSONContent {\n const nextContent = node.content?.map((child) =>\n hydrateWorkspaceAppMentionIcons(child, workspaceAppIcons)\n );\n if (node.type !== \"agentFileMention\") {\n return nextContent ? { ...node, content: nextContent } : node;\n }\n const attrs = node.attrs ?? {};\n const kind = typeof attrs.kind === \"string\" ? attrs.kind : \"\";\n const isWorkspaceAppMention = kind === \"workspace-app\";\n const isAppWorkspaceReferenceMention =\n kind === \"workspace-reference\" && attrs.source === \"app\";\n if (!isWorkspaceAppMention && !isAppWorkspaceReferenceMention) {\n return nextContent ? { ...node, content: nextContent } : node;\n }\n const workspaceId =\n typeof attrs.workspaceId === \"string\" ? attrs.workspaceId.trim() : \"\";\n const appId =\n isWorkspaceAppMention && typeof attrs.appId === \"string\"\n ? attrs.appId.trim()\n : typeof attrs.targetId === \"string\"\n ? attrs.targetId.trim()\n : \"\";\n const iconUrl = resolveWorkspaceAppIconUrl({\n appId,\n workspaceId,\n workspaceAppIcons\n });\n if (!iconUrl) {\n return nextContent ? { ...node, content: nextContent } : node;\n }\n return {\n ...node,\n attrs: {\n ...node.attrs,\n iconUrl\n },\n ...(nextContent ? { content: nextContent } : {})\n };\n}\n\nfunction resolveWorkspaceAppIconUrl(input: {\n appId: string;\n workspaceId: string;\n workspaceAppIcons: readonly AgentMessageMarkdownWorkspaceAppIcon[];\n}): string | undefined {\n if (!input.appId) {\n return undefined;\n }\n const exactMatch = input.workspaceAppIcons.find(\n (icon) =>\n icon.appId.trim() === input.appId &&\n (icon.workspaceId?.trim() ?? \"\") === input.workspaceId &&\n icon.iconUrl?.trim()\n );\n const fallbackMatch = input.workspaceAppIcons.find(\n (icon) => icon.appId.trim() === input.appId && icon.iconUrl?.trim()\n );\n return (\n exactMatch?.iconUrl?.trim() || fallbackMatch?.iconUrl?.trim() || undefined\n );\n}\n\nfunction hydrateAgentMentionPresentations(\n node: JSONContent,\n agentTargets: readonly AgentMessageMarkdownAgentTarget[]\n): JSONContent {\n const nextContent = node.content?.map((child) =>\n hydrateAgentMentionPresentations(child, agentTargets)\n );\n if (node.type !== \"agentFileMention\") {\n return nextContent ? { ...node, content: nextContent } : node;\n }\n const attrs = node.attrs ?? {};\n const kind = typeof attrs.kind === \"string\" ? attrs.kind : \"\";\n if (kind !== \"agent-target\" && kind !== \"session\") {\n return nextContent ? { ...node, content: nextContent } : node;\n }\n const agentTargetId =\n kind === \"session\"\n ? typeof attrs.agentTargetId === \"string\"\n ? attrs.agentTargetId.trim()\n : \"\"\n : typeof attrs.targetId === \"string\"\n ? attrs.targetId.trim()\n : \"\";\n const workspaceId =\n typeof attrs.workspaceId === \"string\" ? attrs.workspaceId.trim() : \"\";\n const target = resolveAgentTargetPresentation({\n agentTargetId,\n agentTargets,\n workspaceId\n });\n if (!target) {\n return nextContent ? { ...node, content: nextContent } : node;\n }\n return {\n ...node,\n attrs: {\n ...node.attrs,\n agentProviderId: target.provider?.trim() ?? \"\",\n iconUrl: target.iconUrl?.trim() ?? \"\",\n ...(kind === \"agent-target\"\n ? { name: target.name?.trim() || attrs.name }\n : {})\n },\n ...(nextContent ? { content: nextContent } : {})\n };\n}\n","import { mergeAttributes, Node } from \"@tiptap/core\";\nimport type { AgentGUIProviderSkillOption } from \"../model/agentGuiNodeTypes\";\nimport {\n labelForProviderSkill,\n skillTriggerForPrefix\n} from \"../model/agentSkillOptions\";\n\nexport interface AgentSkillTokenAttrs {\n label: string;\n name: string;\n trigger: string;\n}\n\nexport interface AgentSkillTokenMatch {\n attrs: AgentSkillTokenAttrs;\n end: number;\n}\n\nexport interface AgentSkillTokenExtensionOptions {\n skills?: readonly AgentGUIProviderSkillOption[];\n}\n\nexport function createAgentSkillTokenExtension(\n options: AgentSkillTokenExtensionOptions = {}\n): Node {\n return Node.create({\n name: \"agentSkillToken\",\n group: \"inline\",\n inline: true,\n atom: true,\n selectable: true,\n\n addOptions() {\n return options;\n },\n\n addAttributes() {\n return {\n label: { default: \"\" },\n name: { default: \"\" },\n trigger: { default: \"\" }\n };\n },\n\n parseHTML() {\n return [{ tag: \"span[data-agent-skill-token]\" }];\n },\n\n renderHTML({ HTMLAttributes }) {\n const attrs = attrsToSkillTokenAttrs(HTMLAttributes);\n const displayLabel = skillTokenDisplayLabel(attrs);\n return [\n \"span\",\n mergeAttributes(HTMLAttributes, {\n \"aria-label\": attrs.label,\n contentEditable: \"false\",\n \"data-agent-skill-token\": \"true\",\n \"data-agent-skill-trigger\": attrs.trigger,\n \"data-agent-mention-kind\": \"skill\",\n class: \"tsh-agent-object-token tsh-agent-object-token--entity\"\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 [\"span\", { class: \"tsh-agent-object-token__main\" }, displayLabel]\n ];\n },\n\n renderText({ node }) {\n return attrsToSkillTokenAttrs(node.attrs ?? {}).trigger;\n }\n });\n}\n\nexport function parseAgentSkillToken(\n text: string,\n start: number,\n skills: readonly AgentGUIProviderSkillOption[] = []\n): AgentSkillTokenMatch | null {\n if (!isSkillTokenBoundary(text[start - 1] ?? \"\")) {\n return null;\n }\n if (text[start] !== \"$\" && text[start] !== \"/\") {\n return null;\n }\n for (const candidate of skillTokenCandidates(skills)) {\n if (!text.startsWith(candidate.trigger, start)) {\n continue;\n }\n const end = start + candidate.trigger.length;\n if (!isSkillTokenBoundary(text[end] ?? \"\")) {\n continue;\n }\n return {\n attrs: candidate,\n end\n };\n }\n return null;\n}\n\nfunction skillTokenCandidates(\n skills: readonly AgentGUIProviderSkillOption[]\n): AgentSkillTokenAttrs[] {\n const candidates = new Map<string, AgentSkillTokenAttrs>();\n for (const skill of skills) {\n for (const prefix of [\"$\", \"/\"] as const) {\n const trigger = skillTriggerForPrefix(skill, prefix);\n if (!trigger || candidates.has(trigger)) {\n continue;\n }\n candidates.set(trigger, {\n label: labelForProviderSkill(skill, prefix),\n name: skill.name.trim(),\n trigger\n });\n }\n }\n return [...candidates.values()].sort(\n (left, right) => right.trigger.length - left.trigger.length\n );\n}\n\nfunction isSkillTokenBoundary(value: string): boolean {\n return value === \"\" || value === \" \" || value === \"\\n\" || value === \"\\t\";\n}\n\nfunction attrsToSkillTokenAttrs(\n attrs: Record<string, unknown>\n): AgentSkillTokenAttrs {\n return {\n label: typeof attrs.label === \"string\" ? attrs.label : \"\",\n name: typeof attrs.name === \"string\" ? attrs.name : \"\",\n trigger: typeof attrs.trigger === \"string\" ? attrs.trigger : \"\"\n };\n}\n\nfunction skillTokenDisplayLabel(attrs: AgentSkillTokenAttrs): string {\n const label = attrs.label.trim() || attrs.trigger.trim();\n if (!label || label.startsWith(\"/\") || label.startsWith(\"$\")) {\n return label;\n }\n return `/${label}`;\n}\n","import type { AgentGUIProviderSkillOption } from \"./agentGuiNodeTypes\";\n\nexport function skillTriggerForPrefix(\n skill: AgentGUIProviderSkillOption,\n prefix: \"$\" | \"/\" | undefined\n): string {\n const trigger = skill.trigger.trim();\n if (!trigger) {\n return \"\";\n }\n if (prefix === undefined || trigger.startsWith(prefix)) {\n return trigger;\n }\n if (trigger.startsWith(\"$\") || trigger.startsWith(\"/\")) {\n return `${prefix}${trigger.slice(1)}`;\n }\n return `${prefix}${trigger}`;\n}\n\nexport function labelForProviderSkill(\n skill: AgentGUIProviderSkillOption,\n prefix: \"$\" | \"/\" | undefined\n): string {\n return stripSkillTriggerPrefix(skillTriggerForPrefix(skill, prefix));\n}\n\nexport function promptForProviderSkills(input: {\n prompt: string;\n skills: readonly AgentGUIProviderSkillOption[];\n}): string {\n let prompt = input.prompt;\n for (const skill of input.skills) {\n if (!skill.invocation) {\n continue;\n }\n const nativePrefix = skill.invocation === \"promptItem\" ? \"$\" : \"/\";\n const nativeTrigger = skillTriggerForPrefix(skill, nativePrefix);\n const aliasPrefix = nativePrefix === \"$\" ? \"/\" : \"$\";\n const aliasTrigger = skillTriggerForPrefix(skill, aliasPrefix);\n if (!nativeTrigger || !aliasTrigger || nativeTrigger === aliasTrigger) {\n continue;\n }\n prompt = replaceSkillTriggerToken(prompt, aliasTrigger, nativeTrigger);\n }\n return prompt;\n}\n\nexport function skillDescriptionForDisplay(\n description: string | undefined\n): string | undefined {\n const line = description\n ?.split(/\\r?\\n/)\n .map((part) => part.trim())\n .find((part) => part !== \"\");\n return line || undefined;\n}\n\nfunction replaceSkillTriggerToken(\n prompt: string,\n from: string,\n to: string\n): string {\n return prompt.replace(\n new RegExp(`(^|\\\\s)${escapeRegExp(from)}(?=$|\\\\s)`, \"g\"),\n (_match, separator: string) => `${separator}${to}`\n );\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction stripSkillTriggerPrefix(trigger: string): string {\n if (trigger.startsWith(\"$\") || trigger.startsWith(\"/\")) {\n return trigger.slice(1);\n }\n return trigger;\n}\n","import { mergeAttributes, Node } from \"@tiptap/core\";\n\nexport interface AgentCapabilityTokenOption {\n capability: string;\n label: string;\n name: string;\n trigger: string;\n}\n\nexport interface AgentCapabilityTokenAttrs {\n capability: string;\n label: string;\n name: string;\n trigger: string;\n}\n\nexport interface AgentCapabilityTokenMatch {\n attrs: AgentCapabilityTokenAttrs;\n end: number;\n}\n\nexport interface AgentCapabilityTokenExtensionOptions {\n capabilities?: readonly AgentCapabilityTokenOption[];\n}\n\nexport function createAgentCapabilityTokenExtension(\n options: AgentCapabilityTokenExtensionOptions = {}\n): Node {\n return Node.create({\n name: \"agentCapabilityToken\",\n group: \"inline\",\n inline: true,\n atom: true,\n selectable: true,\n\n addOptions() {\n return options;\n },\n\n addAttributes() {\n return {\n capability: { default: \"\" },\n label: { default: \"\" },\n name: { default: \"\" },\n trigger: { default: \"\" }\n };\n },\n\n parseHTML() {\n return [{ tag: \"span[data-agent-capability-token]\" }];\n },\n\n renderHTML({ HTMLAttributes }) {\n const attrs = attrsToCapabilityTokenAttrs(HTMLAttributes);\n const displayLabel = capabilityTokenDisplayLabel(attrs);\n return [\n \"span\",\n mergeAttributes(HTMLAttributes, {\n \"aria-label\": attrs.label,\n contentEditable: \"false\",\n \"data-agent-capability-token\": \"true\",\n \"data-agent-capability-trigger\": attrs.trigger,\n \"data-agent-mention-kind\": \"capability\",\n class: \"tsh-agent-object-token tsh-agent-object-token--entity\"\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 [\"span\", { class: \"tsh-agent-object-token__main\" }, displayLabel]\n ];\n },\n\n renderText({ node }) {\n return attrsToCapabilityTokenAttrs(node.attrs ?? {}).trigger;\n }\n });\n}\n\nexport function parseAgentCapabilityToken(\n text: string,\n start: number,\n capabilities: readonly AgentCapabilityTokenOption[] = []\n): AgentCapabilityTokenMatch | null {\n if (!isCapabilityTokenBoundary(text[start - 1] ?? \"\")) {\n return null;\n }\n for (const candidate of capabilityTokenCandidates(capabilities)) {\n if (!text.startsWith(candidate.trigger, start)) {\n continue;\n }\n const end = start + candidate.trigger.length;\n if (!isCapabilityTokenBoundary(text[end] ?? \"\")) {\n continue;\n }\n return {\n attrs: candidate,\n end\n };\n }\n return null;\n}\n\nfunction capabilityTokenCandidates(\n capabilities: readonly AgentCapabilityTokenOption[]\n): AgentCapabilityTokenAttrs[] {\n const candidates = new Map<string, AgentCapabilityTokenAttrs>();\n for (const capability of capabilities) {\n const trigger = capability.trigger.trim();\n if (!trigger || candidates.has(trigger)) {\n continue;\n }\n candidates.set(trigger, {\n capability: capability.capability.trim(),\n label: capability.label.trim(),\n name: capability.name.trim(),\n trigger\n });\n }\n return [...candidates.values()].sort(\n (left, right) => right.trigger.length - left.trigger.length\n );\n}\n\nfunction isCapabilityTokenBoundary(value: string): boolean {\n return value === \"\" || value === \" \" || value === \"\\n\" || value === \"\\t\";\n}\n\nfunction attrsToCapabilityTokenAttrs(\n attrs: Record<string, unknown>\n): AgentCapabilityTokenAttrs {\n return {\n capability: typeof attrs.capability === \"string\" ? attrs.capability : \"\",\n label: typeof attrs.label === \"string\" ? attrs.label : \"\",\n name: typeof attrs.name === \"string\" ? attrs.name : \"\",\n trigger: typeof attrs.trigger === \"string\" ? attrs.trigger : \"\"\n };\n}\n\nfunction capabilityTokenDisplayLabel(attrs: AgentCapabilityTokenAttrs): string {\n const label = attrs.label.trim() || attrs.trigger.trim();\n if (!label || label.startsWith(\"/\") || label.startsWith(\"$\")) {\n return label;\n }\n return `/${label}`;\n}\n","import type { Editor, JSONContent } from \"@tiptap/core\";\nimport {\n attrsToMentionItem,\n formatAgentMentionMarkdown,\n mentionItemToAttrs,\n parseAgentMentionMarkdown\n} from \"./agentFileMentionExtension\";\nimport type { AgentGUIProviderSkillOption } from \"../model/agentGuiNodeTypes\";\nimport { parseAgentSkillToken } from \"./agentSkillTokenExtension\";\nimport {\n parseAgentCapabilityToken,\n type AgentCapabilityTokenOption\n} from \"./agentCapabilityTokenExtension\";\nimport { AGENT_RICH_TEXT_CARET_ANCHOR } from \"./agentRichTextCaretAnchor\";\n\nexport interface AgentRichTextDocumentOptions {\n capabilities?: readonly AgentCapabilityTokenOption[];\n skills?: readonly AgentGUIProviderSkillOption[];\n}\n\nfunction createEmptyDocument(): JSONContent {\n return {\n type: \"doc\",\n content: [{ type: \"paragraph\" }]\n };\n}\n\nfunction isVisualLineStart(content: readonly JSONContent[]): boolean {\n return content.length === 0 || content.at(-1)?.type === \"hardBreak\";\n}\n\nfunction createParagraphFromText(\n text: string,\n options: AgentRichTextDocumentOptions = {}\n): JSONContent {\n const content: JSONContent[] = [];\n let index = 0;\n let textBuffer = \"\";\n\n const flushTextBuffer = (): void => {\n if (textBuffer.length === 0) {\n return;\n }\n content.push({ type: \"text\", text: textBuffer });\n textBuffer = \"\";\n };\n\n while (index < text.length) {\n const current = text[index];\n if (current === \"\\n\") {\n flushTextBuffer();\n content.push({ type: \"hardBreak\" });\n index += 1;\n continue;\n }\n\n const parsedMention = parseAgentMentionMarkdown(text, index);\n if (parsedMention) {\n flushTextBuffer();\n if (isVisualLineStart(content)) {\n content.push({ type: \"text\", text: AGENT_RICH_TEXT_CARET_ANCHOR });\n }\n content.push({\n type: \"agentFileMention\",\n // 转成规范 node attrs(如 workspace-reference 的 source/groupId/fileCount),\n // 否则只读回显里的 reference chip 拿不到文件数 → 不显示「N 个文件」角标。\n attrs: mentionItemToAttrs(parsedMention.item)\n });\n index = parsedMention.end;\n continue;\n }\n\n const parsedCapabilityToken = parseAgentCapabilityToken(\n text,\n index,\n options.capabilities\n );\n if (parsedCapabilityToken) {\n flushTextBuffer();\n content.push({\n type: \"agentCapabilityToken\",\n attrs: parsedCapabilityToken.attrs\n });\n index = parsedCapabilityToken.end;\n continue;\n }\n\n const parsedSkillToken = parseAgentSkillToken(text, index, options.skills);\n if (parsedSkillToken) {\n flushTextBuffer();\n content.push({\n type: \"agentSkillToken\",\n attrs: parsedSkillToken.attrs\n });\n index = parsedSkillToken.end;\n continue;\n }\n\n textBuffer += current;\n index += 1;\n }\n\n flushTextBuffer();\n return content.length > 0\n ? { type: \"paragraph\", content }\n : { type: \"paragraph\" };\n}\n\nexport function plainTextToAgentRichTextDoc(\n text: string,\n options: AgentRichTextDocumentOptions = {}\n): JSONContent {\n if (text.length === 0) {\n return createEmptyDocument();\n }\n const normalized = text.replace(/\\r\\n?/g, \"\\n\");\n return {\n type: \"doc\",\n content: [createParagraphFromText(normalized, options)]\n };\n}\n\nexport function plainTextToAgentRichTextInlineContent(\n text: string,\n options: AgentRichTextDocumentOptions = {}\n): JSONContent[] {\n const paragraph = createParagraphFromText(\n text.replace(/\\r\\n?/g, \"\\n\"),\n options\n );\n return paragraph.content ?? [];\n}\n\nexport function agentRichTextDocToPromptText(doc: JSONContent): string {\n if (doc.type !== \"doc\") {\n return nodeToPromptText(doc);\n }\n return agentRichTextContentToPromptText(doc.content ?? []);\n}\n\nexport function editorToPromptText(editor: Editor): string {\n return agentRichTextDocToPromptText(editor.getJSON());\n}\n\nexport function agentRichTextContentToPromptText(\n content: readonly JSONContent[]\n): string {\n if (content.length === 0) {\n return \"\";\n }\n const separator = content.some((node) => isBlockPromptNode(node)) ? \"\\n\" : \"\";\n return content.map((node) => nodeToPromptText(node)).join(separator);\n}\n\nfunction isBlockPromptNode(node: JSONContent): boolean {\n return node.type === \"doc\" || node.type === \"paragraph\";\n}\n\nfunction nodeToPromptText(node: JSONContent): string {\n if (node.type === \"text\") {\n return (node.text ?? \"\").replaceAll(AGENT_RICH_TEXT_CARET_ANCHOR, \"\");\n }\n if (node.type === \"agentFileMention\") {\n return formatAgentMentionMarkdown(attrsToMentionItem(node.attrs ?? {}));\n }\n if (node.type === \"agentSkillToken\") {\n return typeof node.attrs?.trigger === \"string\" ? node.attrs.trigger : \"\";\n }\n if (node.type === \"agentCapabilityToken\") {\n return typeof node.attrs?.trigger === \"string\" ? node.attrs.trigger : \"\";\n }\n if (node.type === \"hardBreak\") {\n return \"\\n\";\n }\n if (!node.content || node.content.length === 0) {\n return \"\";\n }\n return node.content.map((child) => nodeToPromptText(child)).join(\"\");\n}\n","import { Extension, type Extensions } from \"@tiptap/core\";\nimport { NodeSelection, TextSelection } from \"@tiptap/pm/state\";\nimport { Plugin } from \"@tiptap/pm/state\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport {\n createAgentFileMentionExtension,\n type AgentFileMentionExtensionOptions\n} from \"./agentFileMentionExtension\";\nimport {\n createAgentCapabilityTokenExtension,\n type AgentCapabilityTokenExtensionOptions\n} from \"./agentCapabilityTokenExtension\";\nimport {\n createAgentSkillTokenExtension,\n type AgentSkillTokenExtensionOptions\n} from \"./agentSkillTokenExtension\";\n\nfunction createAgentPromptStarterKit(): Extensions[0] {\n return StarterKit.configure({\n blockquote: false,\n bold: false,\n bulletList: false,\n code: false,\n codeBlock: false,\n dropcursor: false,\n gapcursor: false,\n heading: false,\n horizontalRule: false,\n italic: false,\n link: false,\n listItem: false,\n listKeymap: false,\n orderedList: false,\n strike: false,\n trailingNode: false,\n underline: false\n });\n}\n\nfunction createAgentTokenKeyboardExtension(): Extensions[0] {\n return Extension.create({\n name: \"agentTokenKeyboard\",\n\n addProseMirrorPlugins() {\n return [\n new Plugin({\n props: {\n handleKeyDown(view, event) {\n if (event.key !== \"Backspace\" && event.key !== \"ArrowLeft\") {\n return false;\n }\n const { doc, selection } = view.state;\n if (\n selection instanceof NodeSelection &&\n isSelectableAgentToken(selection.node)\n ) {\n event.preventDefault();\n if (event.key === \"ArrowLeft\") {\n view.dispatch(\n view.state.tr.setSelection(\n TextSelection.create(doc, selection.from)\n )\n );\n } else {\n view.dispatch(\n view.state.tr.delete(selection.from, selection.to)\n );\n }\n return true;\n }\n if (!selection.empty) {\n return false;\n }\n const nodeBefore = selection.$from.nodeBefore;\n if (!nodeBefore || !isSelectableAgentToken(nodeBefore)) {\n return false;\n }\n event.preventDefault();\n view.dispatch(\n view.state.tr.setSelection(\n NodeSelection.create(\n doc,\n selection.from - nodeBefore.nodeSize\n )\n )\n );\n return true;\n }\n }\n })\n ];\n }\n });\n}\n\nfunction isSelectableAgentToken(\n node: { type: { name: string }; nodeSize: number } | null\n): boolean {\n return (\n node?.type.name === \"agentSkillToken\" ||\n node?.type.name === \"agentCapabilityToken\"\n );\n}\n\nexport function createAgentRichTextInputExtensions(\n fileMentionOptions?: AgentFileMentionExtensionOptions,\n skillTokenOptions?: AgentSkillTokenExtensionOptions,\n capabilityTokenOptions?: AgentCapabilityTokenExtensionOptions\n): Extensions {\n return [\n createAgentTokenKeyboardExtension(),\n createAgentPromptStarterKit(),\n createAgentFileMentionExtension(fileMentionOptions),\n createAgentCapabilityTokenExtension(capabilityTokenOptions),\n createAgentSkillTokenExtension(skillTokenOptions)\n ];\n}\n\nexport function createAgentRichTextReadonlyExtensions(\n skillTokenOptions?: AgentSkillTokenExtensionOptions,\n capabilityTokenOptions?: AgentCapabilityTokenExtensionOptions\n): Extensions {\n return [\n createAgentPromptStarterKit(),\n createAgentFileMentionExtension({\n enableSuggestions: false,\n renderAsLink: true\n }),\n createAgentCapabilityTokenExtension(capabilityTokenOptions),\n createAgentSkillTokenExtension(skillTokenOptions)\n ];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAS,eAA0C;AAEnD,SAAS,4BAA4B;;;ACFrC,SAAS,iBAAiB,YAAY;;;ACE/B,SAAS,sBACd,OACA,QACQ;AACR,QAAM,UAAU,MAAM,QAAQ,KAAK;AACnC,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAa,QAAQ,WAAW,MAAM,GAAG;AACtD,WAAO;AAAA,EACT;AACA,MAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,WAAW,GAAG,GAAG;AACtD,WAAO,GAAG,MAAM,GAAG,QAAQ,MAAM,CAAC,CAAC;AAAA,EACrC;AACA,SAAO,GAAG,MAAM,GAAG,OAAO;AAC5B;AAEO,SAAS,sBACd,OACA,QACQ;AACR,SAAO,wBAAwB,sBAAsB,OAAO,MAAM,CAAC;AACrE;AAEO,SAAS,wBAAwB,OAG7B;AACT,MAAI,SAAS,MAAM;AACnB,aAAW,SAAS,MAAM,QAAQ;AAChC,QAAI,CAAC,MAAM,YAAY;AACrB;AAAA,IACF;AACA,UAAM,eAAe,MAAM,eAAe,eAAe,MAAM;AAC/D,UAAM,gBAAgB,sBAAsB,OAAO,YAAY;AAC/D,UAAM,cAAc,iBAAiB,MAAM,MAAM;AACjD,UAAM,eAAe,sBAAsB,OAAO,WAAW;AAC7D,QAAI,CAAC,iBAAiB,CAAC,gBAAgB,kBAAkB,cAAc;AACrE;AAAA,IACF;AACA,aAAS,yBAAyB,QAAQ,cAAc,aAAa;AAAA,EACvE;AACA,SAAO;AACT;AAEO,SAAS,2BACd,aACoB;AACpB,QAAM,OAAO,aACT,MAAM,OAAO,EACd,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,KAAK,CAAC,SAAS,SAAS,EAAE;AAC7B,SAAO,QAAQ;AACjB;AAEA,SAAS,yBACP,QACA,MACA,IACQ;AACR,SAAO,OAAO;AAAA,IACZ,IAAI,OAAO,UAAU,aAAa,IAAI,CAAC,aAAa,GAAG;AAAA,IACvD,CAAC,QAAQ,cAAsB,GAAG,SAAS,GAAG,EAAE;AAAA,EAClD;AACF;AAEA,SAAS,aAAa,OAAuB;AAC3C,SAAO,MAAM,QAAQ,uBAAuB,MAAM;AACpD;AAEA,SAAS,wBAAwB,SAAyB;AACxD,MAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,WAAW,GAAG,GAAG;AACtD,WAAO,QAAQ,MAAM,CAAC;AAAA,EACxB;AACA,SAAO;AACT;;;ADvDO,SAAS,+BACd,UAA2C,CAAC,GACtC;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,OAAO,EAAE,SAAS,GAAG;AAAA,QACrB,MAAM,EAAE,SAAS,GAAG;AAAA,QACpB,SAAS,EAAE,SAAS,GAAG;AAAA,MACzB;AAAA,IACF;AAAA,IAEA,YAAY;AACV,aAAO,CAAC,EAAE,KAAK,+BAA+B,CAAC;AAAA,IACjD;AAAA,IAEA,WAAW,EAAE,eAAe,GAAG;AAC7B,YAAM,QAAQ,uBAAuB,cAAc;AACnD,YAAM,eAAe,uBAAuB,KAAK;AACjD,aAAO;AAAA,QACL;AAAA,QACA,gBAAgB,gBAAgB;AAAA,UAC9B,cAAc,MAAM;AAAA,UACpB,iBAAiB;AAAA,UACjB,0BAA0B;AAAA,UAC1B,4BAA4B,MAAM;AAAA,UAClC,2BAA2B;AAAA,UAC3B,OAAO;AAAA,QACT,CAAC;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,eAAe;AAAA,UACjB;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,cACE,OAAO;AAAA,cACP,eAAe;AAAA,YACjB;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA,CAAC,QAAQ,EAAE,OAAO,+BAA+B,GAAG,YAAY;AAAA,MAClE;AAAA,IACF;AAAA,IAEA,WAAW,EAAE,KAAK,GAAG;AACnB,aAAO,uBAAuB,KAAK,SAAS,CAAC,CAAC,EAAE;AAAA,IAClD;AAAA,EACF,CAAC;AACH;AAEO,SAAS,qBACd,MACA,OACA,SAAiD,CAAC,GACrB;AAC7B,MAAI,CAAC,qBAAqB,KAAK,QAAQ,CAAC,KAAK,EAAE,GAAG;AAChD,WAAO;AAAA,EACT;AACA,MAAI,KAAK,KAAK,MAAM,OAAO,KAAK,KAAK,MAAM,KAAK;AAC9C,WAAO;AAAA,EACT;AACA,aAAW,aAAa,qBAAqB,MAAM,GAAG;AACpD,QAAI,CAAC,KAAK,WAAW,UAAU,SAAS,KAAK,GAAG;AAC9C;AAAA,IACF;AACA,UAAM,MAAM,QAAQ,UAAU,QAAQ;AACtC,QAAI,CAAC,qBAAqB,KAAK,GAAG,KAAK,EAAE,GAAG;AAC1C;AAAA,IACF;AACA,WAAO;AAAA,MACL,OAAO;AAAA,MACP;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,qBACP,QACwB;AACxB,QAAM,aAAa,oBAAI,IAAkC;AACzD,aAAW,SAAS,QAAQ;AAC1B,eAAW,UAAU,CAAC,KAAK,GAAG,GAAY;AACxC,YAAM,UAAU,sBAAsB,OAAO,MAAM;AACnD,UAAI,CAAC,WAAW,WAAW,IAAI,OAAO,GAAG;AACvC;AAAA,MACF;AACA,iBAAW,IAAI,SAAS;AAAA,QACtB,OAAO,sBAAsB,OAAO,MAAM;AAAA,QAC1C,MAAM,MAAM,KAAK,KAAK;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO,CAAC,GAAG,WAAW,OAAO,CAAC,EAAE;AAAA,IAC9B,CAAC,MAAM,UAAU,MAAM,QAAQ,SAAS,KAAK,QAAQ;AAAA,EACvD;AACF;AAEA,SAAS,qBAAqB,OAAwB;AACpD,SAAO,UAAU,MAAM,UAAU,OAAO,UAAU,QAAQ,UAAU;AACtE;AAEA,SAAS,uBACP,OACsB;AACtB,SAAO;AAAA,IACL,OAAO,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;AAAA,IACvD,MAAM,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,IACpD,SAAS,OAAO,MAAM,YAAY,WAAW,MAAM,UAAU;AAAA,EAC/D;AACF;AAEA,SAAS,uBAAuB,OAAqC;AACnE,QAAM,QAAQ,MAAM,MAAM,KAAK,KAAK,MAAM,QAAQ,KAAK;AACvD,MAAI,CAAC,SAAS,MAAM,WAAW,GAAG,KAAK,MAAM,WAAW,GAAG,GAAG;AAC5D,WAAO;AAAA,EACT;AACA,SAAO,IAAI,KAAK;AAClB;;;AE3JA,SAAS,mBAAAA,kBAAiB,QAAAC,aAAY;AAyB/B,SAAS,oCACd,UAAgD,CAAC,GAC3C;AACN,SAAOA,MAAK,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,YAAY,EAAE,SAAS,GAAG;AAAA,QAC1B,OAAO,EAAE,SAAS,GAAG;AAAA,QACrB,MAAM,EAAE,SAAS,GAAG;AAAA,QACpB,SAAS,EAAE,SAAS,GAAG;AAAA,MACzB;AAAA,IACF;AAAA,IAEA,YAAY;AACV,aAAO,CAAC,EAAE,KAAK,oCAAoC,CAAC;AAAA,IACtD;AAAA,IAEA,WAAW,EAAE,eAAe,GAAG;AAC7B,YAAM,QAAQ,4BAA4B,cAAc;AACxD,YAAM,eAAe,4BAA4B,KAAK;AACtD,aAAO;AAAA,QACL;AAAA,QACAD,iBAAgB,gBAAgB;AAAA,UAC9B,cAAc,MAAM;AAAA,UACpB,iBAAiB;AAAA,UACjB,+BAA+B;AAAA,UAC/B,iCAAiC,MAAM;AAAA,UACvC,2BAA2B;AAAA,UAC3B,OAAO;AAAA,QACT,CAAC;AAAA,QACD;AAAA,UACE;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,eAAe;AAAA,UACjB;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,cACE,OAAO;AAAA,cACP,eAAe;AAAA,YACjB;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA,CAAC,QAAQ,EAAE,OAAO,+BAA+B,GAAG,YAAY;AAAA,MAClE;AAAA,IACF;AAAA,IAEA,WAAW,EAAE,KAAK,GAAG;AACnB,aAAO,4BAA4B,KAAK,SAAS,CAAC,CAAC,EAAE;AAAA,IACvD;AAAA,EACF,CAAC;AACH;AAEO,SAAS,0BACd,MACA,OACA,eAAsD,CAAC,GACrB;AAClC,MAAI,CAAC,0BAA0B,KAAK,QAAQ,CAAC,KAAK,EAAE,GAAG;AACrD,WAAO;AAAA,EACT;AACA,aAAW,aAAa,0BAA0B,YAAY,GAAG;AAC/D,QAAI,CAAC,KAAK,WAAW,UAAU,SAAS,KAAK,GAAG;AAC9C;AAAA,IACF;AACA,UAAM,MAAM,QAAQ,UAAU,QAAQ;AACtC,QAAI,CAAC,0BAA0B,KAAK,GAAG,KAAK,EAAE,GAAG;AAC/C;AAAA,IACF;AACA,WAAO;AAAA,MACL,OAAO;AAAA,MACP;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,0BACP,cAC6B;AAC7B,QAAM,aAAa,oBAAI,IAAuC;AAC9D,aAAW,cAAc,cAAc;AACrC,UAAM,UAAU,WAAW,QAAQ,KAAK;AACxC,QAAI,CAAC,WAAW,WAAW,IAAI,OAAO,GAAG;AACvC;AAAA,IACF;AACA,eAAW,IAAI,SAAS;AAAA,MACtB,YAAY,WAAW,WAAW,KAAK;AAAA,MACvC,OAAO,WAAW,MAAM,KAAK;AAAA,MAC7B,MAAM,WAAW,KAAK,KAAK;AAAA,MAC3B;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO,CAAC,GAAG,WAAW,OAAO,CAAC,EAAE;AAAA,IAC9B,CAAC,MAAM,UAAU,MAAM,QAAQ,SAAS,KAAK,QAAQ;AAAA,EACvD;AACF;AAEA,SAAS,0BAA0B,OAAwB;AACzD,SAAO,UAAU,MAAM,UAAU,OAAO,UAAU,QAAQ,UAAU;AACtE;AAEA,SAAS,4BACP,OAC2B;AAC3B,SAAO;AAAA,IACL,YAAY,OAAO,MAAM,eAAe,WAAW,MAAM,aAAa;AAAA,IACtE,OAAO,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;AAAA,IACvD,MAAM,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,IACpD,SAAS,OAAO,MAAM,YAAY,WAAW,MAAM,UAAU;AAAA,EAC/D;AACF;AAEA,SAAS,4BAA4B,OAA0C;AAC7E,QAAM,QAAQ,MAAM,MAAM,KAAK,KAAK,MAAM,QAAQ,KAAK;AACvD,MAAI,CAAC,SAAS,MAAM,WAAW,GAAG,KAAK,MAAM,WAAW,GAAG,GAAG;AAC5D,WAAO;AAAA,EACT;AACA,SAAO,IAAI,KAAK;AAClB;;;ACxIA,SAAS,sBAAmC;AAC1C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,YAAY,CAAC;AAAA,EACjC;AACF;AAEA,SAAS,kBAAkB,SAA0C;AACnE,SAAO,QAAQ,WAAW,KAAK,QAAQ,GAAG,EAAE,GAAG,SAAS;AAC1D;AAEA,SAAS,wBACP,MACA,UAAwC,CAAC,GAC5B;AACb,QAAM,UAAyB,CAAC;AAChC,MAAI,QAAQ;AACZ,MAAI,aAAa;AAEjB,QAAM,kBAAkB,MAAY;AAClC,QAAI,WAAW,WAAW,GAAG;AAC3B;AAAA,IACF;AACA,YAAQ,KAAK,EAAE,MAAM,QAAQ,MAAM,WAAW,CAAC;AAC/C,iBAAa;AAAA,EACf;AAEA,SAAO,QAAQ,KAAK,QAAQ;AAC1B,UAAM,UAAU,KAAK,KAAK;AAC1B,QAAI,YAAY,MAAM;AACpB,sBAAgB;AAChB,cAAQ,KAAK,EAAE,MAAM,YAAY,CAAC;AAClC,eAAS;AACT;AAAA,IACF;AAEA,UAAM,gBAAgB,0BAA0B,MAAM,KAAK;AAC3D,QAAI,eAAe;AACjB,sBAAgB;AAChB,UAAI,kBAAkB,OAAO,GAAG;AAC9B,gBAAQ,KAAK,EAAE,MAAM,QAAQ,MAAM,6BAA6B,CAAC;AAAA,MACnE;AACA,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA;AAAA;AAAA,QAGN,OAAO,mBAAmB,cAAc,IAAI;AAAA,MAC9C,CAAC;AACD,cAAQ,cAAc;AACtB;AAAA,IACF;AAEA,UAAM,wBAAwB;AAAA,MAC5B;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AACA,QAAI,uBAAuB;AACzB,sBAAgB;AAChB,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,OAAO,sBAAsB;AAAA,MAC/B,CAAC;AACD,cAAQ,sBAAsB;AAC9B;AAAA,IACF;AAEA,UAAM,mBAAmB,qBAAqB,MAAM,OAAO,QAAQ,MAAM;AACzE,QAAI,kBAAkB;AACpB,sBAAgB;AAChB,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,OAAO,iBAAiB;AAAA,MAC1B,CAAC;AACD,cAAQ,iBAAiB;AACzB;AAAA,IACF;AAEA,kBAAc;AACd,aAAS;AAAA,EACX;AAEA,kBAAgB;AAChB,SAAO,QAAQ,SAAS,IACpB,EAAE,MAAM,aAAa,QAAQ,IAC7B,EAAE,MAAM,YAAY;AAC1B;AAEO,SAAS,4BACd,MACA,UAAwC,CAAC,GAC5B;AACb,MAAI,KAAK,WAAW,GAAG;AACrB,WAAO,oBAAoB;AAAA,EAC7B;AACA,QAAM,aAAa,KAAK,QAAQ,UAAU,IAAI;AAC9C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,wBAAwB,YAAY,OAAO,CAAC;AAAA,EACxD;AACF;AAEO,SAAS,sCACd,MACA,UAAwC,CAAC,GAC1B;AACf,QAAM,YAAY;AAAA,IAChB,KAAK,QAAQ,UAAU,IAAI;AAAA,IAC3B;AAAA,EACF;AACA,SAAO,UAAU,WAAW,CAAC;AAC/B;AAEO,SAAS,6BAA6B,KAA0B;AACrE,MAAI,IAAI,SAAS,OAAO;AACtB,WAAO,iBAAiB,GAAG;AAAA,EAC7B;AACA,SAAO,iCAAiC,IAAI,WAAW,CAAC,CAAC;AAC3D;AAEO,SAAS,mBAAmB,QAAwB;AACzD,SAAO,6BAA6B,OAAO,QAAQ,CAAC;AACtD;AAEO,SAAS,iCACd,SACQ;AACR,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,EACT;AACA,QAAM,YAAY,QAAQ,KAAK,CAAC,SAAS,kBAAkB,IAAI,CAAC,IAAI,OAAO;AAC3E,SAAO,QAAQ,IAAI,CAAC,SAAS,iBAAiB,IAAI,CAAC,EAAE,KAAK,SAAS;AACrE;AAEA,SAAS,kBAAkB,MAA4B;AACrD,SAAO,KAAK,SAAS,SAAS,KAAK,SAAS;AAC9C;AAEA,SAAS,iBAAiB,MAA2B;AACnD,MAAI,KAAK,SAAS,QAAQ;AACxB,YAAQ,KAAK,QAAQ,IAAI,WAAW,8BAA8B,EAAE;AAAA,EACtE;AACA,MAAI,KAAK,SAAS,oBAAoB;AACpC,WAAO,2BAA2B,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,EACxE;AACA,MAAI,KAAK,SAAS,mBAAmB;AACnC,WAAO,OAAO,KAAK,OAAO,YAAY,WAAW,KAAK,MAAM,UAAU;AAAA,EACxE;AACA,MAAI,KAAK,SAAS,wBAAwB;AACxC,WAAO,OAAO,KAAK,OAAO,YAAY,WAAW,KAAK,MAAM,UAAU;AAAA,EACxE;AACA,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO;AAAA,EACT;AACA,MAAI,CAAC,KAAK,WAAW,KAAK,QAAQ,WAAW,GAAG;AAC9C,WAAO;AAAA,EACT;AACA,SAAO,KAAK,QAAQ,IAAI,CAAC,UAAU,iBAAiB,KAAK,CAAC,EAAE,KAAK,EAAE;AACrE;;;AClLA,SAAS,iBAAkC;AAC3C,SAAS,eAAe,qBAAqB;AAC7C,SAAS,cAAc;AACvB,OAAO,gBAAgB;AAcvB,SAAS,8BAA6C;AACpD,SAAO,WAAW,UAAU;AAAA,IAC1B,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,WAAW;AAAA,EACb,CAAC;AACH;AAEA,SAAS,oCAAmD;AAC1D,SAAO,UAAU,OAAO;AAAA,IACtB,MAAM;AAAA,IAEN,wBAAwB;AACtB,aAAO;AAAA,QACL,IAAI,OAAO;AAAA,UACT,OAAO;AAAA,YACL,cAAc,MAAM,OAAO;AACzB,kBAAI,MAAM,QAAQ,eAAe,MAAM,QAAQ,aAAa;AAC1D,uBAAO;AAAA,cACT;AACA,oBAAM,EAAE,KAAK,UAAU,IAAI,KAAK;AAChC,kBACE,qBAAqB,iBACrB,uBAAuB,UAAU,IAAI,GACrC;AACA,sBAAM,eAAe;AACrB,oBAAI,MAAM,QAAQ,aAAa;AAC7B,uBAAK;AAAA,oBACH,KAAK,MAAM,GAAG;AAAA,sBACZ,cAAc,OAAO,KAAK,UAAU,IAAI;AAAA,oBAC1C;AAAA,kBACF;AAAA,gBACF,OAAO;AACL,uBAAK;AAAA,oBACH,KAAK,MAAM,GAAG,OAAO,UAAU,MAAM,UAAU,EAAE;AAAA,kBACnD;AAAA,gBACF;AACA,uBAAO;AAAA,cACT;AACA,kBAAI,CAAC,UAAU,OAAO;AACpB,uBAAO;AAAA,cACT;AACA,oBAAM,aAAa,UAAU,MAAM;AACnC,kBAAI,CAAC,cAAc,CAAC,uBAAuB,UAAU,GAAG;AACtD,uBAAO;AAAA,cACT;AACA,oBAAM,eAAe;AACrB,mBAAK;AAAA,gBACH,KAAK,MAAM,GAAG;AAAA,kBACZ,cAAc;AAAA,oBACZ;AAAA,oBACA,UAAU,OAAO,WAAW;AAAA,kBAC9B;AAAA,gBACF;AAAA,cACF;AACA,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,uBACP,MACS;AACT,SACE,MAAM,KAAK,SAAS,qBACpB,MAAM,KAAK,SAAS;AAExB;AAEO,SAAS,mCACd,oBACA,mBACA,wBACY;AACZ,SAAO;AAAA,IACL,kCAAkC;AAAA,IAClC,4BAA4B;AAAA,IAC5B,gCAAgC,kBAAkB;AAAA,IAClD,oCAAoC,sBAAsB;AAAA,IAC1D,+BAA+B,iBAAiB;AAAA,EAClD;AACF;AAEO,SAAS,sCACd,mBACA,wBACY;AACZ,SAAO;AAAA,IACL,4BAA4B;AAAA,IAC5B,gCAAgC;AAAA,MAC9B,mBAAmB;AAAA,MACnB,cAAc;AAAA,IAChB,CAAC;AAAA,IACD,oCAAoC,sBAAsB;AAAA,IAC1D,+BAA+B,iBAAiB;AAAA,EAClD;AACF;;;AL9Cc;AApEd,IAAM,4BACJ,CAAC;AACH,IAAM,eAAuD,CAAC;AAavD,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB;AACF,GAA4C;AAC1C;AACA,QAAM,sBAAsB,4BAA4B;AACxD,QAAM,wBAAwB,gBAAgB;AAC9C,QAAM,oBAAoB;AAAA,IACxB,MAAM,KAAK,UAAU,eAAe;AAAA,IACpC,CAAC,eAAe;AAAA,EAClB;AACA,QAAM,YAAY;AAAA,IAChB,MACE,wBAAwB;AAAA,MACtB,WAAW;AAAA,MACX,UAAU,kBAAkB,KAAK,KAAK;AAAA,MACtC,QAAQ,GAAG,KAAK,KAAS,iBAAiB;AAAA,MAC1C,QAAQ,MACN,4BAA4B,OAAO,EAAE,QAAQ,gBAAgB,CAAC;AAAA,IAClE,CAAC;AAAA,IACH,CAAC,iBAAiB,kBAAkB,mBAAmB,KAAK;AAAA,EAC9D;AACA,QAAM,aAAa;AAAA,IACjB,MACE;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACF,CAAC,uBAAuB,WAAW,iBAAiB;AAAA,EACtD;AACA,QAAM,gBAAgB,yBAAyB,UAAU;AACzD,QAAM,aAAa;AAAA,IACjB,MACE,sCAAsC;AAAA,MACpC,QAAQ;AAAA,IACV,CAAC;AAAA,IACH,CAAC,eAAe;AAAA,EAClB;AACA,QAAM,kBAAkB;AAAA,IACtB,MACE,qBAAqB;AAAA,MACnB,SAAS;AAAA,MACT;AAAA,MACA,SAAS;AAAA,QACP,aAAa;AAAA,UACX,kBAAkB,CAAC,EAAE,KAAK,MACxB,oBAAC,4BAAyB,OAAO,KAAK,SAAS,CAAC,GAAG;AAAA,QAEvD;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IACH,CAAC,YAAY,UAAU;AAAA,EACzB;AAEA,QAAM,cAAc,CAAC,UAAsC;AACzD,QAAI,CAAC,eAAe,EAAE,MAAM,kBAAkB,UAAU;AACtD;AAAA,IACF;AACA,UAAM,UAAU,MAAM,OAAO,QAAQ,kCAAkC;AACvE,QAAI,EAAE,mBAAmB,cAAc;AACrC;AAAA,IACF;AACA,UAAM,OAAO,QAAQ,aAAa,yBAAyB,KAAK;AAChE,QAAI,CAAC,MAAM;AACT;AAAA,IACF;AACA,UAAM,eAAe;AACrB,UAAM,gBAAgB;AACtB,gBAAY,IAAI;AAAA,EAClB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,2BAAyB,gBAAgB,SAAS;AAAA,MAElD;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,SAAS;AAAA,UAER;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,yBAAyB,KAA2B;AAC3D,MAAI,IAAI,SAAS,OAAO;AACtB,WAAO;AAAA,EACT;AACA,QAAM,SAAS,IAAI,WAAW,CAAC;AAC/B,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO;AAAA,EACT;AACA,QAAM,YAAY,OAAO,CAAC;AAC1B,MAAI,WAAW,SAAS,aAAa;AACnC,WAAO;AAAA,EACT;AACA,QAAM,iBAAiB,UAAU,WAAW,CAAC,GAAG;AAAA,IAC9C,CAAC,SACC,EACE,KAAK,SAAS,WACb,KAAK,QAAQ,IAAI,WAAW,8BAA8B,EAAE,EAC1D,WAAW;AAAA,EAEpB;AACA,SACE,cAAc,WAAW,KAAK,cAAc,CAAC,GAAG,SAAS;AAE7D;AAEA,SAAS,yCACP,WACA,mBACA,cACa;AACb,MAAI,MAAM;AACV,MAAI,kBAAkB,SAAS,GAAG;AAChC,UAAM,gCAAgC,KAAK,iBAAiB;AAAA,EAC9D;AACA,MAAI,aAAa,SAAS,GAAG;AAC3B,UAAM,iCAAiC,KAAK,YAAY;AAAA,EAC1D;AACA,SAAO;AACT;AAEA,SAAS,gCACP,MACA,mBACa;AACb,QAAM,cAAc,KAAK,SAAS;AAAA,IAAI,CAAC,UACrC,gCAAgC,OAAO,iBAAiB;AAAA,EAC1D;AACA,MAAI,KAAK,SAAS,oBAAoB;AACpC,WAAO,cAAc,EAAE,GAAG,MAAM,SAAS,YAAY,IAAI;AAAA,EAC3D;AACA,QAAM,QAAQ,KAAK,SAAS,CAAC;AAC7B,QAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAC3D,QAAM,wBAAwB,SAAS;AACvC,QAAM,iCACJ,SAAS,yBAAyB,MAAM,WAAW;AACrD,MAAI,CAAC,yBAAyB,CAAC,gCAAgC;AAC7D,WAAO,cAAc,EAAE,GAAG,MAAM,SAAS,YAAY,IAAI;AAAA,EAC3D;AACA,QAAM,cACJ,OAAO,MAAM,gBAAgB,WAAW,MAAM,YAAY,KAAK,IAAI;AACrE,QAAM,QACJ,yBAAyB,OAAO,MAAM,UAAU,WAC5C,MAAM,MAAM,KAAK,IACjB,OAAO,MAAM,aAAa,WACxB,MAAM,SAAS,KAAK,IACpB;AACR,QAAM,UAAU,2BAA2B;AAAA,IACzC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,CAAC,SAAS;AACZ,WAAO,cAAc,EAAE,GAAG,MAAM,SAAS,YAAY,IAAI;AAAA,EAC3D;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO;AAAA,MACL,GAAG,KAAK;AAAA,MACR;AAAA,IACF;AAAA,IACA,GAAI,cAAc,EAAE,SAAS,YAAY,IAAI,CAAC;AAAA,EAChD;AACF;AAEA,SAAS,2BAA2B,OAIb;AACrB,MAAI,CAAC,MAAM,OAAO;AAChB,WAAO;AAAA,EACT;AACA,QAAM,aAAa,MAAM,kBAAkB;AAAA,IACzC,CAAC,SACC,KAAK,MAAM,KAAK,MAAM,MAAM,UAC3B,KAAK,aAAa,KAAK,KAAK,QAAQ,MAAM,eAC3C,KAAK,SAAS,KAAK;AAAA,EACvB;AACA,QAAM,gBAAgB,MAAM,kBAAkB;AAAA,IAC5C,CAAC,SAAS,KAAK,MAAM,KAAK,MAAM,MAAM,SAAS,KAAK,SAAS,KAAK;AAAA,EACpE;AACA,SACE,YAAY,SAAS,KAAK,KAAK,eAAe,SAAS,KAAK,KAAK;AAErE;AAEA,SAAS,iCACP,MACA,cACa;AACb,QAAM,cAAc,KAAK,SAAS;AAAA,IAAI,CAAC,UACrC,iCAAiC,OAAO,YAAY;AAAA,EACtD;AACA,MAAI,KAAK,SAAS,oBAAoB;AACpC,WAAO,cAAc,EAAE,GAAG,MAAM,SAAS,YAAY,IAAI;AAAA,EAC3D;AACA,QAAM,QAAQ,KAAK,SAAS,CAAC;AAC7B,QAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAC3D,MAAI,SAAS,kBAAkB,SAAS,WAAW;AACjD,WAAO,cAAc,EAAE,GAAG,MAAM,SAAS,YAAY,IAAI;AAAA,EAC3D;AACA,QAAM,gBACJ,SAAS,YACL,OAAO,MAAM,kBAAkB,WAC7B,MAAM,cAAc,KAAK,IACzB,KACF,OAAO,MAAM,aAAa,WACxB,MAAM,SAAS,KAAK,IACpB;AACR,QAAM,cACJ,OAAO,MAAM,gBAAgB,WAAW,MAAM,YAAY,KAAK,IAAI;AACrE,QAAM,SAAS,+BAA+B;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,CAAC,QAAQ;AACX,WAAO,cAAc,EAAE,GAAG,MAAM,SAAS,YAAY,IAAI;AAAA,EAC3D;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO;AAAA,MACL,GAAG,KAAK;AAAA,MACR,iBAAiB,OAAO,UAAU,KAAK,KAAK;AAAA,MAC5C,SAAS,OAAO,SAAS,KAAK,KAAK;AAAA,MACnC,GAAI,SAAS,iBACT,EAAE,MAAM,OAAO,MAAM,KAAK,KAAK,MAAM,KAAK,IAC1C,CAAC;AAAA,IACP;AAAA,IACA,GAAI,cAAc,EAAE,SAAS,YAAY,IAAI,CAAC;AAAA,EAChD;AACF;","names":["mergeAttributes","Node"]}
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
translate,
|
|
10
10
|
useTranslation
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-WXLO33YP.js";
|
|
12
12
|
import {
|
|
13
13
|
AGENT_PASTED_TEXT_BLOCK_KIND
|
|
14
14
|
} from "./chunk-FGLQZ6I4.js";
|
|
@@ -16,6 +16,9 @@ import {
|
|
|
16
16
|
getAgentCustomMentionKind
|
|
17
17
|
} from "./chunk-D2JUDUYY.js";
|
|
18
18
|
|
|
19
|
+
// agent-gui/agentGuiNode/agentRichText/agentRichTextCaretAnchor.ts
|
|
20
|
+
var AGENT_RICH_TEXT_CARET_ANCHOR = "\u200B";
|
|
21
|
+
|
|
19
22
|
// agent-gui/agentGuiNode/agentRichText/agentMentionMarkdown.ts
|
|
20
23
|
import {
|
|
21
24
|
createRichTextLinkMarkdown,
|
|
@@ -448,9 +451,6 @@ function isLocalDirectoryMentionHref(href) {
|
|
|
448
451
|
return href.endsWith("/") && !/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(href);
|
|
449
452
|
}
|
|
450
453
|
|
|
451
|
-
// agent-gui/agentGuiNode/agentRichText/agentRichTextCaretAnchor.ts
|
|
452
|
-
var AGENT_RICH_TEXT_CARET_ANCHOR = "\u200B";
|
|
453
|
-
|
|
454
454
|
// agent-gui/agentGuiNode/agentRichText/AgentMentionNodeView.tsx
|
|
455
455
|
import {
|
|
456
456
|
createContext,
|
|
@@ -1812,6 +1812,7 @@ function createAgentFileMentionExtension(options = {}) {
|
|
|
1812
1812
|
}
|
|
1813
1813
|
|
|
1814
1814
|
export {
|
|
1815
|
+
AGENT_RICH_TEXT_CARET_ANCHOR,
|
|
1815
1816
|
normalizeAgentSessionMentionTitle,
|
|
1816
1817
|
createAgentSessionMentionHref,
|
|
1817
1818
|
createAgentSessionMarkdownLink,
|
|
@@ -1822,6 +1823,7 @@ export {
|
|
|
1822
1823
|
parseMentionItemFromHref,
|
|
1823
1824
|
agentComposerFileMentionReferences,
|
|
1824
1825
|
updateAgentComposerFileMentions,
|
|
1826
|
+
resolveAgentSessionMentionIconUrl,
|
|
1825
1827
|
remainingAgentComposerPromptAssetSlots,
|
|
1826
1828
|
createAgentExternalPromptFilePreparation,
|
|
1827
1829
|
agentPreparedPromptFileToDraftFile,
|
|
@@ -1830,12 +1832,10 @@ export {
|
|
|
1830
1832
|
agentPromptPastedTextBlocks,
|
|
1831
1833
|
materializeAgentComposerFileMentions,
|
|
1832
1834
|
agentExternalPromptFileErrorI18nKey,
|
|
1833
|
-
AGENT_RICH_TEXT_CARET_ANCHOR,
|
|
1834
|
-
resolveAgentSessionMentionIconUrl,
|
|
1835
1835
|
AgentMentionReadonlyView,
|
|
1836
1836
|
mentionItemToAttrs,
|
|
1837
1837
|
attrsToMentionItem,
|
|
1838
1838
|
exitAgentFileMentionSuggestion,
|
|
1839
1839
|
createAgentFileMentionExtension
|
|
1840
1840
|
};
|
|
1841
|
-
//# sourceMappingURL=chunk-
|
|
1841
|
+
//# sourceMappingURL=chunk-CZOZBUIM.js.map
|