@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.
Files changed (87) hide show
  1. package/README.md +49 -0
  2. package/dist/{AgentRichTextReadonly-U3XUJYCW.js → AgentRichTextReadonly-CCELQPHE.js} +5 -5
  3. package/dist/agent-conversation/index.d.ts +17 -4
  4. package/dist/agent-conversation/index.js +13 -9
  5. package/dist/agent-conversation/index.js.map +1 -1
  6. package/dist/agent-gui.d.ts +19 -3
  7. package/dist/agent-gui.js +22 -16
  8. package/dist/agent-message-center/index.d.ts +1 -1
  9. package/dist/agent-message-center/index.js +10 -7
  10. package/dist/agent-message-center/index.js.map +1 -1
  11. package/dist/{agentGuiNodeTypes-DW7T--Y8.d.ts → agentGuiNodeTypes-Dgl7kQHA.d.ts} +2 -2
  12. package/dist/agents.d.ts +1 -1
  13. package/dist/app/renderer/agentactivity.css +17 -0
  14. package/dist/{chunk-M6WEFXPL.js → chunk-2MCNNB2P.js} +2 -24
  15. package/dist/chunk-2MCNNB2P.js.map +1 -0
  16. package/dist/{chunk-CQFT3MI5.js → chunk-3YYI6RXA.js} +7 -5
  17. package/dist/{chunk-CQFT3MI5.js.map → chunk-3YYI6RXA.js.map} +1 -1
  18. package/dist/{chunk-EDP4D42H.js → chunk-45KN5Z5F.js} +877 -871
  19. package/dist/chunk-45KN5Z5F.js.map +1 -0
  20. package/dist/{chunk-T57ZZWTC.js → chunk-4HAG3FOY.js} +2 -2
  21. package/dist/{chunk-ZBI6R46N.js → chunk-5DN5N2XS.js} +2 -2
  22. package/dist/{chunk-BCBB4HOV.js → chunk-634MNSI5.js} +2 -2
  23. package/dist/chunk-A4KKC324.js +4768 -0
  24. package/dist/chunk-A4KKC324.js.map +1 -0
  25. package/dist/chunk-ALAGL6VL.js +48 -0
  26. package/dist/chunk-ALAGL6VL.js.map +1 -0
  27. package/dist/{chunk-2STAUA73.js → chunk-AYTUAZE3.js} +5 -2
  28. package/dist/chunk-AYTUAZE3.js.map +1 -0
  29. package/dist/{chunk-SWO67UWQ.js → chunk-CZOZBUIM.js} +7 -7
  30. package/dist/{chunk-SWO67UWQ.js.map → chunk-CZOZBUIM.js.map} +1 -1
  31. package/dist/{chunk-2L2LVSOD.js → chunk-EHNPHZE4.js} +881 -5812
  32. package/dist/chunk-EHNPHZE4.js.map +1 -0
  33. package/dist/{chunk-N5356722.js → chunk-EKQ7UX2B.js} +13 -319
  34. package/dist/chunk-EKQ7UX2B.js.map +1 -0
  35. package/dist/{chunk-ZXEICU6J.js → chunk-KK7YXPTS.js} +3 -1
  36. package/dist/chunk-KK7YXPTS.js.map +1 -0
  37. package/dist/{chunk-WGCDSA7P.js → chunk-MBM7PJIF.js} +27 -506
  38. package/dist/chunk-MBM7PJIF.js.map +1 -0
  39. package/dist/chunk-RMC2MGL4.js +557 -0
  40. package/dist/chunk-RMC2MGL4.js.map +1 -0
  41. package/dist/{chunk-JA6XAKKE.js → chunk-TWF6JXPC.js} +2 -2
  42. package/dist/{chunk-7AYFKNLD.js → chunk-TWMV6YTX.js} +4 -4
  43. package/dist/chunk-VV3YIU5W.js +25 -0
  44. package/dist/chunk-VV3YIU5W.js.map +1 -0
  45. package/dist/{chunk-GLVENTN6.js → chunk-WXLO33YP.js} +2 -2
  46. package/dist/chunk-XWPHTXEM.js +529 -0
  47. package/dist/chunk-XWPHTXEM.js.map +1 -0
  48. package/dist/chunk-YEXRTXTE.js +315 -0
  49. package/dist/chunk-YEXRTXTE.js.map +1 -0
  50. package/dist/{chunk-WMJDOMG6.js → chunk-ZELGKLW5.js} +4 -4
  51. package/dist/composer-projection.d.ts +37 -0
  52. package/dist/composer-projection.js +21 -0
  53. package/dist/composer-projection.js.map +1 -0
  54. package/dist/context-mention-palette/index.js +9 -7
  55. package/dist/conversation-projection.d.ts +551 -0
  56. package/dist/conversation-projection.js +42 -0
  57. package/dist/conversation-projection.js.map +1 -0
  58. package/dist/conversation-rail-projection.js +3 -3
  59. package/dist/i18n/index.d.ts +2 -0
  60. package/dist/i18n/index.js +2 -2
  61. package/dist/index.d.ts +32 -13
  62. package/dist/index.js +22 -16
  63. package/dist/index.js.map +1 -1
  64. package/dist/mention-search.js +7 -5
  65. package/dist/{types-CHAMK2g7.d.ts → types-DtXXsISB.d.ts} +1 -1
  66. package/dist/workbench/contribution.js +4 -4
  67. package/dist/workbench/index.js +4 -4
  68. package/dist/workbench/sessionTitle.js +3 -3
  69. package/dist/workspace-agent-generated-files.d.ts +1 -12
  70. package/dist/workspaceAgentActivityListTypes-BUKNyMbh.d.ts +48 -0
  71. package/dist/{workspaceLinkActions-CzsbvGmC.d.ts → workspaceLinkActions-DxyzMy10.d.ts} +13 -12
  72. package/package.json +31 -17
  73. package/dist/chunk-2L2LVSOD.js.map +0 -1
  74. package/dist/chunk-2STAUA73.js.map +0 -1
  75. package/dist/chunk-EDP4D42H.js.map +0 -1
  76. package/dist/chunk-M6WEFXPL.js.map +0 -1
  77. package/dist/chunk-N5356722.js.map +0 -1
  78. package/dist/chunk-WGCDSA7P.js.map +0 -1
  79. package/dist/chunk-ZXEICU6J.js.map +0 -1
  80. /package/dist/{AgentRichTextReadonly-U3XUJYCW.js.map → AgentRichTextReadonly-CCELQPHE.js.map} +0 -0
  81. /package/dist/{chunk-T57ZZWTC.js.map → chunk-4HAG3FOY.js.map} +0 -0
  82. /package/dist/{chunk-ZBI6R46N.js.map → chunk-5DN5N2XS.js.map} +0 -0
  83. /package/dist/{chunk-BCBB4HOV.js.map → chunk-634MNSI5.js.map} +0 -0
  84. /package/dist/{chunk-JA6XAKKE.js.map → chunk-TWF6JXPC.js.map} +0 -0
  85. /package/dist/{chunk-7AYFKNLD.js.map → chunk-TWMV6YTX.js.map} +0 -0
  86. /package/dist/{chunk-GLVENTN6.js.map → chunk-WXLO33YP.js.map} +0 -0
  87. /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-SWO67UWQ.js";
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-2STAUA73.js.map
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":"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","names":["mergeAttributes","Node"]}
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  translate,
10
10
  useTranslation
11
- } from "./chunk-GLVENTN6.js";
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-SWO67UWQ.js.map
1841
+ //# sourceMappingURL=chunk-CZOZBUIM.js.map