@tutti-os/agent-gui 0.0.55 → 0.0.57

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 (59) hide show
  1. package/dist/@-lined-14px-64O2KKB4.svg +3 -0
  2. package/dist/{AgentMentionSearchController-DzhWr0PN.d.ts → AgentMentionSearchController-Po0KQLcL.d.ts} +13 -1
  3. package/dist/agent-conversation/index.d.ts +3 -3
  4. package/dist/agent-conversation/index.js +6 -6
  5. package/dist/agent-message-center/index.d.ts +1 -1
  6. package/dist/agent-message-center/index.js +8 -8
  7. package/dist/{agentGuiNodeTypes-DCnsaqJr.d.ts → agentGuiNodeTypes-BRU6P22B.d.ts} +2 -1
  8. package/dist/app/renderer/agentactivity.css +48 -3
  9. package/dist/app/renderer/assets/icons/@-lined-14px.svg +3 -0
  10. package/dist/{chunk-ZFDO72FE.js → chunk-2VHP7KQ5.js} +16 -3
  11. package/dist/chunk-2VHP7KQ5.js.map +1 -0
  12. package/dist/{chunk-2XVECUTU.js → chunk-33LWYV6O.js} +33 -1
  13. package/dist/chunk-33LWYV6O.js.map +1 -0
  14. package/dist/{chunk-GBAQVKQN.js → chunk-DZ76JPCV.js} +104 -10
  15. package/dist/chunk-DZ76JPCV.js.map +1 -0
  16. package/dist/{chunk-PBHTLI3E.js → chunk-HFZOXSSQ.js} +2 -2
  17. package/dist/{chunk-7H4IH67L.js → chunk-IMZBRUP3.js} +13 -5
  18. package/dist/{chunk-7H4IH67L.js.map → chunk-IMZBRUP3.js.map} +1 -1
  19. package/dist/{chunk-6AXH2BOD.js → chunk-KOR6UVUJ.js} +5 -5
  20. package/dist/{chunk-NBTJEF3H.js → chunk-N37A5CJH.js} +140 -4
  21. package/dist/chunk-N37A5CJH.js.map +1 -0
  22. package/dist/{chunk-WMQN7SZC.js → chunk-QFHR527D.js} +2 -2
  23. package/dist/{chunk-BGZ2OSDQ.js → chunk-RGVVHF7Q.js} +2 -2
  24. package/dist/{chunk-GL54NRMB.js → chunk-S6PCOX3S.js} +40 -1
  25. package/dist/chunk-S6PCOX3S.js.map +1 -0
  26. package/dist/{chunk-CMOGPJ23.js → chunk-SZ7JGCS3.js} +2 -2
  27. package/dist/{chunk-H2YWXFYX.js → chunk-Z3AAQQFD.js} +2 -2
  28. package/dist/context-mention-palette/index.d.ts +2 -2
  29. package/dist/context-mention-palette/index.js +7 -7
  30. package/dist/i18n/index.d.ts +32 -0
  31. package/dist/i18n/index.js +2 -2
  32. package/dist/index.d.ts +49 -8
  33. package/dist/index.js +322 -75
  34. package/dist/index.js.map +1 -1
  35. package/dist/queued-prompt-runtime.d.ts +2 -2
  36. package/dist/{types-B2m7UcBb.d.ts → types-BsHvTjIZ.d.ts} +8 -1
  37. package/dist/workbench/contribution.d.ts +1 -1
  38. package/dist/workbench/index.d.ts +1 -1
  39. package/dist/workbench/index.js +3 -3
  40. package/dist/workbench/launch.d.ts +1 -1
  41. package/dist/workbench/providerCatalog.d.ts +1 -1
  42. package/dist/workbench/sessionTitle.d.ts +1 -1
  43. package/dist/workbench/sessionTitle.js +3 -3
  44. package/dist/workbench/state.d.ts +1 -1
  45. package/dist/workbench/types.d.ts +1 -1
  46. package/dist/workspace-agent-generated-files.js +3 -3
  47. package/dist/{workspaceLinkActions-C6POH38D.d.ts → workspaceLinkActions-Bjy_XfBm.d.ts} +8 -1
  48. package/package.json +14 -14
  49. package/dist/chunk-2XVECUTU.js.map +0 -1
  50. package/dist/chunk-GBAQVKQN.js.map +0 -1
  51. package/dist/chunk-GL54NRMB.js.map +0 -1
  52. package/dist/chunk-NBTJEF3H.js.map +0 -1
  53. package/dist/chunk-ZFDO72FE.js.map +0 -1
  54. /package/dist/{chunk-PBHTLI3E.js.map → chunk-HFZOXSSQ.js.map} +0 -0
  55. /package/dist/{chunk-6AXH2BOD.js.map → chunk-KOR6UVUJ.js.map} +0 -0
  56. /package/dist/{chunk-WMQN7SZC.js.map → chunk-QFHR527D.js.map} +0 -0
  57. /package/dist/{chunk-BGZ2OSDQ.js.map → chunk-RGVVHF7Q.js.map} +0 -0
  58. /package/dist/{chunk-CMOGPJ23.js.map → chunk-SZ7JGCS3.js.map} +0 -0
  59. /package/dist/{chunk-H2YWXFYX.js.map → chunk-Z3AAQQFD.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../agentActivityRuntime.tsx","../agentActivityHost.tsx","../host/agentHostApi.ts","../shared/managedAgentProviders.ts","../shared/managedAgentIcons.ts"],"sourcesContent":["import {\n createContext,\n useContext,\n useSyncExternalStore,\n type JSX,\n type PropsWithChildren\n} from \"react\";\nimport type {\n AgentActivityCancelSessionInput,\n AgentActivityCancelSessionResult,\n AgentActivityCreateSessionInput,\n AgentActivityDeleteSessionInput,\n AgentActivityDeleteSessionResult,\n AgentActivityMessageOrder,\n AgentActivityMessagePage,\n AgentActivitySendInput,\n AgentActivitySendInputResult,\n AgentActivitySession,\n AgentActivitySnapshot,\n AgentActivitySnapshotListener,\n AgentActivitySubmitInteractiveInput\n} from \"@tutti-os/agent-activity-core\";\nimport type {\n AgentHostAgentSessionComposerSettings,\n AgentHostActivateAgentSessionResult,\n AgentHostRuntimeOpenclawGatewayWarmupResult,\n AgentHostUpdateAgentSessionSettingsResult,\n AgentHostUnactivateAgentSessionResult,\n AgentHostAgentSessionState\n} from \"./shared/contracts/dto\";\nimport type { AgentGUIProviderTargetRef } from \"./types\";\n\nexport interface AgentActivityRuntimeListSessionMessagesInput {\n afterVersion?: number;\n beforeVersion?: number;\n cache?: boolean;\n agentSessionId: string;\n limit?: number;\n order?: AgentActivityMessageOrder;\n signal?: AbortSignal;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeListGeneratedFilesInput {\n limit?: number;\n query?: string;\n sessionCwd?: string;\n signal?: AbortSignal;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeGeneratedFile {\n label: string;\n path: string;\n}\n\nexport interface AgentActivityRuntimeGeneratedFileList {\n entries: AgentActivityRuntimeGeneratedFile[];\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeEnsureSessionSynchronizedInput {\n afterVersion?: number;\n agentSessionId: string;\n onError?: (error: unknown) => void;\n workspaceId: string;\n}\n\nexport type AgentActivityRuntimeRetainSessionEventsInput =\n AgentActivityRuntimeEnsureSessionSynchronizedInput;\n\nexport interface AgentActivityRuntimeSetSessionPinnedInput {\n agentSessionId: string;\n pinned: boolean;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeTrackSettingsProjectChangeInput {\n action: \"clear\" | \"create_new\" | \"select_existing\";\n agentSessionId: string;\n provider?: string | null;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeGetSessionControlStateInput {\n agentSessionId: string;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeGetComposerOptionsInput {\n agentTargetId?: string | null;\n cwd?: string | null;\n force?: boolean;\n provider?: string;\n settings?: AgentHostAgentSessionComposerSettings | null;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeUpdateSessionSettingsInput {\n agentSessionId: string;\n settings: AgentHostAgentSessionComposerSettings;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeTrackDraftComposerSettingsChangeInput {\n nextSettings: AgentHostAgentSessionComposerSettings;\n previousSettings: AgentHostAgentSessionComposerSettings;\n provider: string;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeWarmupOpenclawGatewayInput {\n workspaceId?: string | null;\n}\n\nexport interface AgentActivityRuntimeDiagnosticInput {\n details?: Record<string, unknown>;\n event: string;\n level?: \"debug\" | \"info\" | \"warn\" | \"error\";\n source?: string;\n workspaceId?: string | null;\n}\n\nexport interface AgentActivityRuntimeActivateSessionInput {\n agentSessionId: string;\n agentTargetId?: string | null;\n cwd?: string;\n initialContent?: AgentActivitySendInput[\"content\"];\n /** 仅展示用首轮文本(bundle 折叠成一个 chip);initialContent 仍带展开后的文件。 */\n initialDisplayPrompt?: string | null;\n metadata?: Record<string, unknown>;\n mode: \"existing\" | \"new\";\n openclawGatewayReady?: boolean;\n provider?: string;\n /**\n * Opaque host-owned target reference. AgentGUI passes this through only; hosts\n * must not treat it as authority and must re-authenticate before launch.\n */\n providerTargetRef?: AgentGUIProviderTargetRef | null;\n settings?: AgentHostAgentSessionComposerSettings;\n title?: string;\n visible?: boolean;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeUnactivateSessionInput {\n agentSessionId: string;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeReadSessionAttachmentInput {\n agentSessionId: string;\n attachmentId: string;\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeReadPromptAssetInput {\n agentSessionId?: string | null;\n assetId?: string | null;\n hostPath?: string | null;\n kind?: string | null;\n mimeType: string;\n name?: string | null;\n path?: string | null;\n sha256?: string | null;\n uploadStatus?: string | null;\n uri?: string | null;\n workspaceId: string;\n}\n\nexport type AgentActivityRuntimePromptContentBlock =\n AgentActivitySendInput[\"content\"][number] & {\n assetId?: string;\n hostPath?: string;\n kind?: string;\n path?: string;\n sizeBytes?: number;\n uploadStatus?: string;\n uri?: string;\n };\n\nexport interface AgentActivityRuntimeUploadPromptContentInput {\n content: AgentActivityRuntimePromptContentBlock[];\n workspaceId: string;\n}\n\nexport interface AgentActivityRuntimeUploadPromptContentResult {\n content: AgentActivityRuntimePromptContentBlock[];\n}\n\nexport interface AgentActivityRuntimeSessionAttachment {\n attachmentId: string;\n mimeType: string;\n name?: string;\n data: string;\n}\n\nexport interface AgentActivityRuntimePromptAsset {\n assetId?: string;\n hostPath?: string;\n kind?: string;\n mimeType: string;\n name?: string;\n path: string;\n uploadStatus?: string;\n uri?: string;\n data: string;\n}\n\nexport interface AgentActivityRuntime {\n promptContentUploadSupport?: {\n file?: boolean;\n image?: boolean;\n };\n cancelSession(\n input: AgentActivityCancelSessionInput\n ): Promise<AgentActivityCancelSessionResult>;\n createSession(\n input: AgentActivityCreateSessionInput\n ): Promise<AgentActivitySession>;\n deleteSession(\n input: AgentActivityDeleteSessionInput\n ): Promise<AgentActivityDeleteSessionResult>;\n activateSession(\n input: AgentActivityRuntimeActivateSessionInput\n ): Promise<AgentHostActivateAgentSessionResult>;\n getSession(\n workspaceId: string,\n agentSessionId: string\n ): Promise<AgentActivitySession>;\n getComposerOptions(\n input: AgentActivityRuntimeGetComposerOptionsInput\n ): Promise<unknown>;\n updateSessionSettings(\n input: AgentActivityRuntimeUpdateSessionSettingsInput\n ): Promise<AgentHostUpdateAgentSessionSettingsResult>;\n warmupOpenclawGateway?(\n input?: AgentActivityRuntimeWarmupOpenclawGatewayInput\n ): Promise<AgentHostRuntimeOpenclawGatewayWarmupResult>;\n getSessionControlState(\n input: AgentActivityRuntimeGetSessionControlStateInput\n ): Promise<AgentHostAgentSessionState>;\n getSnapshot(workspaceId: string): AgentActivitySnapshot;\n listSessionMessages(\n input: AgentActivityRuntimeListSessionMessagesInput\n ): Promise<AgentActivityMessagePage>;\n listAgentGeneratedFiles?(\n input: AgentActivityRuntimeListGeneratedFilesInput\n ): Promise<AgentActivityRuntimeGeneratedFileList>;\n load(\n workspaceId: string,\n signal?: AbortSignal\n ): Promise<AgentActivitySnapshot>;\n ensureSessionSynchronized?(\n input: AgentActivityRuntimeEnsureSessionSynchronizedInput\n ): () => void;\n /** @deprecated Use ensureSessionSynchronized. */\n retainSessionEvents(\n input: AgentActivityRuntimeRetainSessionEventsInput\n ): () => void;\n sendInput(\n input: AgentActivitySendInput\n ): Promise<AgentActivitySendInputResult>;\n uploadPromptContent?(\n input: AgentActivityRuntimeUploadPromptContentInput\n ): Promise<AgentActivityRuntimeUploadPromptContentResult>;\n readSessionAttachment?(\n input: AgentActivityRuntimeReadSessionAttachmentInput\n ): Promise<AgentActivityRuntimeSessionAttachment>;\n readPromptAsset?(\n input: AgentActivityRuntimeReadPromptAssetInput\n ): Promise<AgentActivityRuntimePromptAsset>;\n setSessionPinned(\n input: AgentActivityRuntimeSetSessionPinnedInput\n ): Promise<AgentActivitySession>;\n trackSettingsProjectChange?(\n input: AgentActivityRuntimeTrackSettingsProjectChangeInput\n ): Promise<void>;\n trackDraftComposerSettingsChange?(\n input: AgentActivityRuntimeTrackDraftComposerSettingsChangeInput\n ): Promise<void>;\n reportDiagnostic?(\n input: AgentActivityRuntimeDiagnosticInput\n ): Promise<void> | void;\n unactivateSession(\n input: AgentActivityRuntimeUnactivateSessionInput\n ): Promise<AgentHostUnactivateAgentSessionResult>;\n submitInteractive(\n input: AgentActivitySubmitInteractiveInput\n ): Promise<unknown>;\n subscribeSessionEvents(\n workspaceId: string,\n listener: (event: unknown) => void\n ): () => void;\n subscribe(\n workspaceId: string,\n listener: AgentActivitySnapshotListener\n ): () => void;\n}\n\nconst AgentActivityRuntimeContext = createContext<AgentActivityRuntime | null>(\n null\n);\n\nlet currentAgentActivityRuntime: AgentActivityRuntime | null = null;\n\nexport interface AgentActivityRuntimeProviderProps extends PropsWithChildren {\n runtime?: AgentActivityRuntime | null;\n}\n\nexport function AgentActivityRuntimeProvider({\n children,\n runtime\n}: AgentActivityRuntimeProviderProps): JSX.Element {\n currentAgentActivityRuntime = runtime ?? null;\n return (\n <AgentActivityRuntimeContext.Provider value={runtime ?? null}>\n {children}\n </AgentActivityRuntimeContext.Provider>\n );\n}\n\nexport function useAgentActivityRuntime(): AgentActivityRuntime {\n const runtime =\n useContext(AgentActivityRuntimeContext) ?? getTestAgentActivityRuntime();\n if (!runtime) {\n throw new Error(\n \"AgentActivityRuntimeProvider is missing an AgentActivityRuntime instance.\"\n );\n }\n return runtime;\n}\n\nexport function useOptionalAgentActivityRuntime(): AgentActivityRuntime | null {\n return (\n useContext(AgentActivityRuntimeContext) ?? getTestAgentActivityRuntime()\n );\n}\n\nexport function useAgentActivitySnapshot(\n workspaceId: string\n): AgentActivitySnapshot {\n const runtime = useAgentActivityRuntime();\n const normalizedWorkspaceId = workspaceId.trim();\n return useSyncExternalStore(\n (listener) => runtime.subscribe(normalizedWorkspaceId, listener),\n () => runtime.getSnapshot(normalizedWorkspaceId),\n () => runtime.getSnapshot(normalizedWorkspaceId)\n );\n}\n\nexport function getAgentActivityRuntime(): AgentActivityRuntime {\n const runtime =\n getExplicitWindowTestAgentActivityRuntime() ??\n currentAgentActivityRuntime ??\n getTestAgentActivityRuntime();\n if (!runtime) {\n throw new Error(\n \"AgentActivityRuntimeProvider is missing an AgentActivityRuntime instance.\"\n );\n }\n return runtime;\n}\n\nexport function getOptionalAgentActivityRuntime(): AgentActivityRuntime | null {\n return (\n getExplicitWindowTestAgentActivityRuntime() ??\n currentAgentActivityRuntime ??\n getTestAgentActivityRuntime()\n );\n}\n\nexport function resetAgentActivityRuntimeForTests(): void {\n if (process.env.NODE_ENV === \"test\") {\n currentAgentActivityRuntime = null;\n }\n}\n\nexport function setAgentActivityRuntimeForTests(\n runtime: AgentActivityRuntime | null\n): void {\n if (process.env.NODE_ENV === \"test\") {\n currentAgentActivityRuntime = runtime;\n }\n}\n\nfunction getTestAgentActivityRuntime(): AgentActivityRuntime | null {\n if (process.env.NODE_ENV !== \"test\") {\n return null;\n }\n if (typeof window === \"undefined\") {\n return null;\n }\n const explicitRuntime = getExplicitWindowTestAgentActivityRuntime();\n if (explicitRuntime) {\n return explicitRuntime;\n }\n if (currentAgentActivityRuntime) {\n return currentAgentActivityRuntime;\n }\n const testRuntime = (\n window as unknown as Window & {\n agentActivityRuntime?: AgentActivityRuntime;\n }\n ).agentActivityRuntime;\n return testRuntime ?? null;\n}\n\nfunction getExplicitWindowTestAgentActivityRuntime(): AgentActivityRuntime | null {\n if (process.env.NODE_ENV !== \"test\" || typeof window === \"undefined\") {\n return null;\n }\n const testDescriptor = Object.getOwnPropertyDescriptor(\n window,\n \"agentActivityRuntime\"\n );\n if (!testDescriptor || !(\"value\" in testDescriptor)) {\n return null;\n }\n return (testDescriptor.value as AgentActivityRuntime | undefined) ?? null;\n}\n","import {\n createContext,\n useContext,\n useMemo,\n type JSX,\n type PropsWithChildren\n} from \"react\";\nimport {\n toAgentHostRuntimeApi,\n type AgentHostInputApi,\n type AgentHostRuntimeApi\n} from \"./host/agentHostApi\";\nimport {\n AgentActivityRuntimeProvider,\n type AgentActivityRuntime\n} from \"./agentActivityRuntime\";\n\nconst AgentActivityHostContext = createContext<AgentHostRuntimeApi | null>(\n null\n);\n\nlet currentAgentHostApi: AgentHostRuntimeApi | null = null;\n\nexport interface AgentActivityHostProviderProps extends PropsWithChildren {\n agentActivityRuntime?: AgentActivityRuntime | null;\n agentHostApi?: AgentHostInputApi | null;\n}\n\nexport function AgentActivityHostProvider({\n agentActivityRuntime,\n agentHostApi,\n children\n}: AgentActivityHostProviderProps): JSX.Element {\n const resolvedAgentHostApi = useMemo(\n () => (agentHostApi ? toAgentHostRuntimeApi(agentHostApi) : null),\n [agentHostApi]\n );\n currentAgentHostApi = resolvedAgentHostApi;\n return (\n <AgentActivityRuntimeProvider runtime={agentActivityRuntime}>\n <AgentActivityHostContext.Provider value={resolvedAgentHostApi}>\n {children}\n </AgentActivityHostContext.Provider>\n </AgentActivityRuntimeProvider>\n );\n}\n\nexport function useAgentHostApi(): AgentHostRuntimeApi {\n const agentHostApi =\n useContext(AgentActivityHostContext) ?? getTestAgentHostApi();\n if (!agentHostApi) {\n throw new Error(\n \"AgentActivityHostProvider is missing an agentHostApi instance.\"\n );\n }\n return agentHostApi;\n}\n\nexport function useOptionalAgentHostApi(): AgentHostRuntimeApi | null {\n return useContext(AgentActivityHostContext) ?? getTestAgentHostApi();\n}\n\nexport function getAgentHostApi(): AgentHostRuntimeApi {\n const agentHostApi =\n getExplicitWindowTestAgentHostApi() ??\n currentAgentHostApi ??\n getTestAgentHostApi();\n if (!agentHostApi) {\n throw new Error(\n \"AgentActivityHostProvider is missing an agentHostApi instance.\"\n );\n }\n return agentHostApi;\n}\n\nexport function getOptionalAgentHostApi(): AgentHostRuntimeApi | null {\n return (\n getExplicitWindowTestAgentHostApi() ??\n currentAgentHostApi ??\n getTestAgentHostApi()\n );\n}\n\nexport function resetAgentHostApiForTests(): void {\n if (process.env.NODE_ENV === \"test\") {\n currentAgentHostApi = null;\n }\n}\n\nexport function setAgentHostApiForTests(\n agentHostApi: AgentHostInputApi | AgentHostRuntimeApi | null\n): void {\n if (process.env.NODE_ENV === \"test\") {\n currentAgentHostApi = agentHostApi\n ? toAgentHostRuntimeApi(agentHostApi)\n : null;\n }\n}\n\nfunction getTestAgentHostApi(): AgentHostRuntimeApi | null {\n if (process.env.NODE_ENV !== \"test\") {\n return null;\n }\n if (typeof window === \"undefined\") {\n return null;\n }\n const explicitAgentHostApi = getExplicitWindowTestAgentHostApi();\n if (explicitAgentHostApi) {\n return explicitAgentHostApi;\n }\n if (currentAgentHostApi) {\n return currentAgentHostApi;\n }\n const testAgentHostApi = (\n window as unknown as Window & {\n agentHostApi?: AgentHostInputApi | AgentHostRuntimeApi;\n }\n ).agentHostApi;\n return testAgentHostApi ? toAgentHostRuntimeApi(testAgentHostApi) : null;\n}\n\nfunction getExplicitWindowTestAgentHostApi(): AgentHostRuntimeApi | null {\n if (process.env.NODE_ENV !== \"test\" || typeof window === \"undefined\") {\n return null;\n }\n const testDescriptor = Object.getOwnPropertyDescriptor(\n window,\n \"agentHostApi\"\n );\n if (!testDescriptor || !(\"value\" in testDescriptor)) {\n return null;\n }\n const testAgentHostApi = testDescriptor.value as\n | AgentHostInputApi\n | AgentHostRuntimeApi\n | undefined;\n return testAgentHostApi ? toAgentHostRuntimeApi(testAgentHostApi) : null;\n}\n","import type {\n AgentHostBatchUserInfoInput,\n AgentHostBatchUserInfoResult,\n AgentHostDeleteWorkspaceAgentSessionInput,\n AgentHostWorkspaceAgentListInput as AgentHostListWorkspaceAgentsInput,\n AgentHostListWorkspaceAgentProbesInput,\n AgentHostWorkspaceAgentSessionMessages,\n AgentHostWorkspaceAgentSessionMessagesInput,\n AgentHostWorkspaceAgentSessionSummary,\n AgentHostWorkspaceAgentSessionSummaryInput,\n AgentHostWorkspaceAgentProbesResult,\n AgentHostWorkspaceAgentSnapshot,\n PersistWriteResult,\n ReadWorkspaceAgentReadStateInput,\n ReadWorkspaceFileResult as AgentHostReadWorkspaceFileResult,\n WorkspaceAgentReadStateSnapshot,\n WriteWorkspaceAgentReadStateInput\n} from \"../shared/contracts/dto\";\nimport type { WorkspaceUserProjectService } from \"@tutti-os/workspace-user-project/contracts\";\n\ntype AgentHostAsyncResult<T = any> = Promise<T>;\ntype AgentHostRecord = Record<string, unknown>;\ntype AgentHostUnsubscribe = () => void;\ntype AgentHostWorkspaceScopedInput<\n T extends {\n workspaceId?: string | null;\n }\n> = Omit<T, \"workspaceId\"> & {\n workspaceId: string;\n};\ntype AgentHostWorkspaceAgentsListInput =\n AgentHostWorkspaceScopedInput<AgentHostListWorkspaceAgentsInput>;\ntype AgentHostWorkspaceAgentSessionMessagesRuntimeInput =\n AgentHostWorkspaceScopedInput<AgentHostWorkspaceAgentSessionMessagesInput>;\ntype AgentHostWorkspaceAgentSessionSummaryRuntimeInput =\n AgentHostWorkspaceScopedInput<AgentHostWorkspaceAgentSessionSummaryInput>;\ntype AgentHostDeleteWorkspaceAgentSessionRuntimeInput =\n AgentHostWorkspaceScopedInput<AgentHostDeleteWorkspaceAgentSessionInput>;\n\nexport type AgentHostClipboardApi = {\n writeImage?: (input: {\n data: string;\n mimeType: \"image/png\";\n }) => AgentHostAsyncResult<void>;\n writeText: (text: string) => AgentHostAsyncResult<void>;\n};\n\nexport type AgentHostDebugApi = {\n logRuntimeDiagnostics: (\n payload: unknown\n ) => AgentHostAsyncResult<void> | void;\n logTerminalDiagnostics?: (\n payload: unknown\n ) => AgentHostAsyncResult<void> | void;\n};\n\nexport type AgentHostFilesystemApi = AgentHostRecord & {\n readFileText: (payload: {\n path?: string;\n uri?: string;\n }) => AgentHostAsyncResult<{\n content: string;\n name?: string;\n path?: string;\n }>;\n};\n\nexport type AgentHostMetaApi = AgentHostRecord & {\n appVersion?: string | null;\n isPackaged?: boolean;\n isTest?: boolean;\n mainPid?: number | null;\n platform?: string;\n workspaceId?: string;\n};\n\nexport type AgentHostEnvironmentApi = AgentHostRecord & {\n getBaseUrl?: () => AgentHostAsyncResult<string>;\n warmupOpenclawGateway?: (input?: unknown) => AgentHostAsyncResult<unknown>;\n};\n\nexport type AgentHostPersistenceApi = AgentHostRecord & {\n readWorkspaceAgentReadState: (\n input: ReadWorkspaceAgentReadStateInput\n ) => AgentHostAsyncResult<WorkspaceAgentReadStateSnapshot>;\n writeWorkspaceAgentReadState: (\n input: WriteWorkspaceAgentReadStateInput\n ) => AgentHostAsyncResult<PersistWriteResult>;\n};\n\nexport type AgentHostToastApi = AgentHostRecord & {\n error: (title: string, description?: string) => void;\n info?: (title: string, description?: string) => void;\n success?: (title: string, description?: string) => void;\n};\n\nexport interface AgentHostSelectedFile {\n name?: string;\n path: string;\n}\n\nexport interface AgentHostSelectFilesInput {\n allowDirectories?: boolean;\n}\n\nexport interface AgentHostApplyWorkspaceGitPatchInput {\n allowBinary?: boolean;\n atomic?: boolean;\n cwd: string;\n diff: string;\n revert?: boolean;\n target?: \"unstaged\" | \"staged\" | \"staged-and-unstaged\";\n}\n\nexport interface AgentHostApplyWorkspaceGitPatchResult {\n status: \"success\" | \"partial-success\" | \"error\";\n appliedPaths: string[];\n skippedPaths: string[];\n conflictedPaths: string[];\n errorCode?: \"not-git-repo\" | string;\n execOutput?: {\n command: string;\n stdout: string;\n stderr: string;\n };\n}\n\nexport interface AgentHostResolveWorkspaceGitPatchSupportInput {\n cwd: string;\n}\n\nexport interface AgentHostResolveWorkspaceGitPatchSupportResult {\n supported: boolean;\n root?: string;\n errorCode?: \"not-git-repo\" | string;\n}\n\nexport type AgentHostWorkspaceApi = AgentHostRecord & {\n applyGitPatch?: (\n input: AgentHostApplyWorkspaceGitPatchInput\n ) => AgentHostAsyncResult<AgentHostApplyWorkspaceGitPatchResult>;\n resolveGitPatchSupport?: (\n input: AgentHostResolveWorkspaceGitPatchSupportInput\n ) => AgentHostAsyncResult<AgentHostResolveWorkspaceGitPatchSupportResult>;\n copyPath?: (input: { path: string }) => AgentHostAsyncResult<void>;\n ensureDirectory: (input: { path: string }) => AgentHostAsyncResult<void>;\n getReferenceForFile?: (file: File) => {\n kind: \"file\" | \"folder\";\n path: string;\n };\n readFile: (input: {\n path: string;\n }) => AgentHostAsyncResult<AgentHostReadWorkspaceFileResult>;\n selectContextEntries?: () => AgentHostAsyncResult<{ entries: unknown[] }>;\n selectDirectory: () => AgentHostAsyncResult<{ path: string } | null>;\n selectFiles: (\n input?: AgentHostSelectFilesInput\n ) => AgentHostAsyncResult<AgentHostSelectedFile[]>;\n writeFileText: (input: {\n content: string;\n path: string;\n }) => AgentHostAsyncResult<unknown>;\n};\n\nexport interface AgentHostInputApi {\n account?: AgentHostAccountApi;\n agentGuiBatch?: AgentHostAgentGuiBatchApi;\n agentSessions?: AgentHostAgentSessionsApi;\n clipboard: AgentHostClipboardApi;\n debug?: AgentHostDebugApi;\n filesystem: AgentHostFilesystemApi;\n meta?: AgentHostMetaApi;\n onHostEvent?: (listener: (event: any) => void) => AgentHostUnsubscribe;\n persistence?: AgentHostPersistenceApi;\n runtime?: AgentHostEnvironmentApi;\n toast?: AgentHostToastApi;\n userProjects?: AgentHostUserProjectsApi;\n workspace: AgentHostWorkspaceApi;\n workspaceAgentProbes?: AgentHostWorkspaceAgentProbesApi;\n workspaceAgents?: AgentHostWorkspaceAgentsApi;\n}\n\nexport type AgentHostApi = AgentHostInputApi;\n\nexport type AgentHostAccountApi = AgentHostRecord & {\n batchGetUserInfo: (\n input: AgentHostBatchUserInfoInput\n ) => AgentHostAsyncResult<AgentHostBatchUserInfoResult>;\n ensureProfiles?: (input: any) => AgentHostAsyncResult<any>;\n};\n\nexport type AgentHostAgentGuiBatchApi = AgentHostRecord & {\n exportRun: (input: any) => AgentHostAsyncResult<any>;\n};\n\nexport type AgentHostWorkspaceAgentProbesApi = AgentHostRecord & {\n list: (\n input: AgentHostListWorkspaceAgentProbesInput\n ) => AgentHostAsyncResult<AgentHostWorkspaceAgentProbesResult>;\n};\n\nexport type AgentProviderProbeListInput =\n AgentHostListWorkspaceAgentProbesInput;\nexport type AgentProviderProbeListResult = AgentHostWorkspaceAgentProbesResult;\n\nexport interface AgentHostUserProject {\n id: string;\n path: string;\n label: string;\n createdAtUnixMs?: number;\n updatedAtUnixMs?: number;\n lastUsedAtUnixMs?: number;\n}\n\nexport type AgentHostUserProjectsApi = AgentHostRecord & {\n service?: WorkspaceUserProjectService;\n checkPath?: (input: { path: string }) => AgentHostAsyncResult<{\n exists: boolean;\n isDirectory: boolean;\n path: string;\n }>;\n create?: (input: {\n name: string;\n }) => AgentHostAsyncResult<AgentHostUserProject>;\n getDefaultSelection?: () => AgentHostAsyncResult<{\n path: string | null;\n } | null>;\n list: () => AgentHostAsyncResult<{\n projects: AgentHostUserProject[];\n }>;\n subscribe?: (listener: () => void) => AgentHostUnsubscribe;\n prepareSelection?: (input: {\n projectLocked: boolean;\n selectedPath: string | null;\n }) => AgentHostAsyncResult<{\n isSelectedPathMissing: boolean;\n projects: AgentHostUserProject[];\n selection:\n | {\n kind: \"clear\";\n suppressedPath: string;\n }\n | {\n kind: \"none\";\n }\n | {\n kind: \"select\";\n path: string;\n };\n }>;\n remove?: (input: { path: string }) => AgentHostAsyncResult<void>;\n isNoProjectPath?: (input: { path: string }) => boolean;\n rememberDefaultSelection?: (input: {\n path: string | null;\n }) => AgentHostAsyncResult<void>;\n use: (input: { path: string }) => AgentHostAsyncResult<AgentHostUserProject>;\n};\n\nexport type AgentHostAgentSessionsApi = AgentHostRecord & {\n activate: (input: any) => AgentHostAsyncResult<any>;\n /**\n * @deprecated AgentGUI production writes must use AgentActivityRuntime.cancelSession.\n */\n cancel: (input: any) => AgentHostAsyncResult<any>;\n /**\n * @deprecated AgentGUI production writes must use AgentActivityRuntime.sendInput.\n */\n exec: (input: any) => AgentHostAsyncResult<any>;\n getComposerOptions?: (input: any) => AgentHostAsyncResult<any>;\n getState: (input: any) => AgentHostAsyncResult<any>;\n onEvent?: (listener: (event: any) => void) => AgentHostUnsubscribe;\n /**\n * @deprecated AgentGUI production writes must use AgentActivityRuntime.setSessionPinned.\n */\n pinSession?: (input: any) => AgentHostAsyncResult<any>;\n /**\n * @deprecated AgentGUI production sync must use AgentActivityRuntime.ensureSessionSynchronized.\n */\n releaseEventStream?: (input?: any) => AgentHostAsyncResult;\n /**\n * @deprecated AgentGUI production sync must use AgentActivityRuntime.ensureSessionSynchronized.\n */\n retainEventStream?: (input: any) => AgentHostAsyncResult;\n /**\n * @deprecated AgentGUI production writes must use AgentActivityRuntime.submitInteractive.\n */\n submitInteractive: (input: any) => AgentHostAsyncResult<any>;\n /**\n * @deprecated AgentGUI production UI must derive events from AgentActivityRuntime snapshots.\n */\n trackSettingsProjectChange?: (input: {\n action: \"clear\" | \"create_new\" | \"select_existing\";\n agentSessionId: string;\n provider?: string | null;\n }) => AgentHostAsyncResult<void>;\n subscribeEvents: (\n input: any,\n listener: (event: any) => void\n ) => AgentHostUnsubscribe;\n unactivate: (input: any) => AgentHostAsyncResult<any>;\n updateSettings: (input: any) => AgentHostAsyncResult<any>;\n};\n\n/**\n * @deprecated Legacy host DTO projection. AgentGUI production reads and writes\n * must use AgentActivityRuntime and AgentActivity* models.\n */\nexport type AgentHostWorkspaceAgentsApi = AgentHostRecord & {\n /**\n * @deprecated Use AgentActivityRuntime.deleteSession.\n */\n deleteSession: (\n input: AgentHostDeleteWorkspaceAgentSessionRuntimeInput\n ) => AgentHostAsyncResult<any>;\n /**\n * @deprecated Derive summaries from AgentActivitySnapshot/session messages.\n */\n getSessionSummary: (\n input: AgentHostWorkspaceAgentSessionSummaryRuntimeInput\n ) => AgentHostAsyncResult<AgentHostWorkspaceAgentSessionSummary>;\n /**\n * @deprecated Use AgentActivityRuntime.load/getSnapshot.\n */\n list: (\n input: string | AgentHostWorkspaceAgentsListInput\n ) => AgentHostAsyncResult<AgentHostWorkspaceAgentSnapshot>;\n /**\n * @deprecated Use AgentActivityRuntime.listSessionMessages.\n */\n listSessionMessages: (\n input: AgentHostWorkspaceAgentSessionMessagesRuntimeInput\n ) => AgentHostAsyncResult<AgentHostWorkspaceAgentSessionMessages>;\n};\n\nexport interface AgentHostRuntimeApi {\n account?: AgentHostAccountApi;\n agentGuiBatch: AgentHostAgentGuiBatchApi;\n clipboard: AgentHostClipboardApi;\n debug?: AgentHostDebugApi;\n filesystem: AgentHostFilesystemApi;\n meta?: AgentHostMetaApi;\n onHostEvent?: (listener: (event: any) => void) => AgentHostUnsubscribe;\n persistence?: AgentHostPersistenceApi;\n runtime?: AgentHostEnvironmentApi;\n toast?: AgentHostToastApi;\n userProjects?: AgentHostUserProjectsApi;\n workspace: AgentHostWorkspaceApi;\n workspaceAgentProbes?: AgentHostWorkspaceAgentProbesApi;\n}\n\nexport function toAgentHostRuntimeApi(\n hostApi: AgentHostInputApi | AgentHostRuntimeApi\n): AgentHostRuntimeApi {\n return {\n account: hostApi.account,\n agentGuiBatch: hostApi.agentGuiBatch ?? ({} as AgentHostAgentGuiBatchApi),\n clipboard: hostApi.clipboard,\n debug: hostApi.debug,\n filesystem: hostApi.filesystem,\n meta: hostApi.meta,\n onHostEvent: hostApi.onHostEvent,\n persistence: hostApi.persistence,\n runtime: hostApi.runtime,\n toast: hostApi.toast,\n userProjects: hostApi.userProjects,\n workspace: hostApi.workspace,\n workspaceAgentProbes: hostApi.workspaceAgentProbes\n };\n}\n","export function normalizeManagedAgentProvider(\n provider: string | undefined\n): string {\n const normalized =\n provider\n ?.trim()\n .toLowerCase()\n .replace(/[_\\s]+/gu, \"-\") ?? \"\";\n switch (normalized) {\n case \"claude\":\n case \"claude-code\":\n return \"claude-code\";\n case \"nexight\":\n case \"tutti-doc\":\n return \"tutti\";\n default:\n return normalized;\n }\n}\n","import { normalizeManagedAgentProvider } from \"./managedAgentProviders\";\nimport {\n claudeRoundedUrl,\n codexRoundedUrl,\n geminiRoundedUrl,\n hermesRoundedUrl,\n manageAgentClaudeCodeUrl,\n manageAgentCodexUrl,\n manageAgentGeminiUrl,\n manageAgentHermesUrl,\n manageAgentTuttiUrl,\n manageAgentOpenclawUrl,\n tuttiDocRoundedUrl,\n openclawRoundedUrl\n} from \"../managedAgentIconAssets\";\n\n/** Square avatar art for the managed toolchain agents (used by Manage Agents and Launch home Agents floor). */\nexport const MANAGED_AGENT_ICON_URLS: Record<string, string> = {\n \"claude-code\": manageAgentClaudeCodeUrl,\n codex: manageAgentCodexUrl,\n gemini: manageAgentGeminiUrl,\n hermes: manageAgentHermesUrl,\n tutti: manageAgentTuttiUrl,\n openclaw: manageAgentOpenclawUrl\n};\n\n/** Rounded avatars for Room status / room activity panel only. */\nexport const MANAGED_AGENT_ICON_ROUNDED_URLS: Record<string, string> = {\n \"claude-code\": claudeRoundedUrl,\n codex: codexRoundedUrl,\n gemini: geminiRoundedUrl,\n hermes: hermesRoundedUrl,\n tutti: tuttiDocRoundedUrl,\n openclaw: openclawRoundedUrl\n};\n\n/** 与 Manage Agents 列表用的方图区分;房间预览弹幕条等仅用圆图 */\nconst MANAGED_AGENT_ROUNDED_ICON_FALLBACK_URL = tuttiDocRoundedUrl;\n\nexport const MANAGED_AGENT_ICON_FALLBACK_URL = manageAgentTuttiUrl;\n\nexport function managedAgentRoundedIconUrl(\n provider: string | undefined\n): string {\n return (\n MANAGED_AGENT_ICON_ROUNDED_URLS[normalizeManagedAgentProvider(provider)] ??\n MANAGED_AGENT_ROUNDED_ICON_FALLBACK_URL\n );\n}\n"],"mappings":"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","names":["createContext","useContext","jsx","createContext","useContext"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../agent-gui/agentGuiNode/agentRichText/agentFileMentionExtension.ts","../agent-gui/agentGuiNode/agentRichText/AgentMentionNodeView.tsx","../agent-gui/agentGuiNode/agentRichText/agentRichTextCaretAnchor.ts"],"sourcesContent":["import { mergeAttributes, Node, type Editor, type Range } from \"@tiptap/core\";\nimport { PluginKey } from \"@tiptap/pm/state\";\nimport { ReactNodeViewRenderer } from \"@tiptap/react\";\nimport Suggestion, { exitSuggestion } from \"@tiptap/suggestion\";\nimport { isRichTextTriggerPrefixBoundary } from \"@tutti-os/ui-rich-text/editor\";\nimport {\n createRichTextLinkMarkdown,\n createRichTextMentionMarkdown,\n isRichTextMentionHref,\n parseRichTextMentionHref\n} from \"@tutti-os/ui-rich-text/core\";\nimport {\n resolveAgentMentionFileThumbnailUrl,\n resolveAgentMentionFileVisualKind\n} from \"../../shared/mentionFilePresentation\";\nimport { translate } from \"../../../i18n/index\";\nimport { AgentMentionNodeView } from \"./AgentMentionNodeView\";\nimport { AGENT_RICH_TEXT_CARET_ANCHOR } from \"./agentRichTextCaretAnchor\";\n\nexport type AgentFileMentionKind = \"file\" | \"directory\" | \"unknown\";\nexport type AgentMentionFileNavigationAction =\n | \"agent-generated-folder\"\n | \"agent-generated-folder-back\";\nexport type AgentMentionScope = \"my_sessions\" | \"collab_sessions\";\nexport type AgentMentionKind =\n | \"file\"\n | \"agent-target\"\n | \"session\"\n | \"workspace-app\"\n | \"workspace-reference\"\n | \"workspace-app-factory\"\n | \"workspace-issue\";\n\nexport type AgentMentionReferenceSource = \"app\" | \"task\";\n\nexport interface AgentMentionFileItem {\n kind: \"file\";\n path: string;\n href: string;\n name: string;\n entryKind: AgentFileMentionKind;\n directoryPath: string;\n score?: number;\n thumbnailUrl?: string | null;\n mentionNavigation?: AgentMentionFileNavigationAction;\n childCount?: number;\n}\n\nexport interface AgentMentionSessionItem {\n kind: \"session\";\n href: string;\n workspaceId: string;\n targetId: string;\n name: string;\n title: string;\n scope: AgentMentionScope;\n initiatorName: string;\n initiatorAvatarUrl?: string;\n agentName: string;\n status?: string;\n inputPreview?: string;\n summaryPreview?: string;\n updatedAtUnixMs?: number;\n}\n\nexport interface AgentMentionWorkspaceIssueItem {\n kind: \"workspace-issue\";\n href: string;\n workspaceId: string;\n targetId: string;\n topicId?: string;\n name: string;\n title: string;\n creatorName?: string;\n status?: string;\n contentPreview?: string;\n updatedAtUnixMs?: number;\n}\n\nexport interface AgentMentionWorkspaceAppItem {\n kind: \"workspace-app\";\n href: string;\n workspaceId: string;\n targetId: string;\n appId: string;\n name: string;\n description?: string;\n iconUrl?: string;\n /** 应用是否能够提供产物文件(reference),决定 @ 面板行末尾是否展示「查看产物」入口。 */\n referencesListSupported?: boolean;\n}\n\nexport interface AgentMentionAgentTargetItem {\n kind: \"agent-target\";\n href: string;\n workspaceId: string;\n targetId: string;\n name: string;\n description?: string;\n agentProviderId?: string;\n iconUrl?: string;\n}\n\nexport interface AgentMentionWorkspaceReferenceItem {\n kind: \"workspace-reference\";\n href: string;\n workspaceId: string;\n /** URI path id:source=app 时为 appId,source=task 时为 topicId。 */\n targetId: string;\n source: AgentMentionReferenceSource;\n /** 子级 id:app 子分组 / issueId。缺省表示整个 app / topic。 */\n groupId?: string;\n name: string;\n iconUrl?: string;\n /** 展示用文件数(来自 picker 节点 childCount);序列化不再展开文件。 */\n fileCount: number;\n}\n\nexport interface AgentMentionWorkspaceAppFactoryItem {\n kind: \"workspace-app-factory\";\n href: string;\n workspaceId: string;\n targetId: string;\n jobId: string;\n name: string;\n action?: string;\n contextPath?: string;\n}\n\nexport type AgentContextMentionItem =\n | AgentMentionFileItem\n | AgentMentionAgentTargetItem\n | AgentMentionSessionItem\n | AgentMentionWorkspaceAppItem\n | AgentMentionWorkspaceReferenceItem\n | AgentMentionWorkspaceAppFactoryItem\n | AgentMentionWorkspaceIssueItem;\n\nexport type AgentFileMentionItem = AgentContextMentionItem;\n\nexport interface AgentMentionSuggestionState {\n editor: Editor;\n range: Range;\n query: string;\n text: string;\n command: (item: AgentContextMentionItem) => void;\n clientRect?: (() => DOMRect | null) | null;\n}\n\nexport type AgentFileMentionSuggestionState = AgentMentionSuggestionState;\n\nexport interface AgentFileMentionExtensionOptions {\n enableSuggestions?: boolean;\n onSuggestionChange?: (state: AgentMentionSuggestionState | null) => void;\n onSuggestionKeyDown?: (event: KeyboardEvent) => boolean;\n removeActionAriaLabel?: string;\n renderAsLink?: boolean;\n shouldSuppressSuggestion?: () => boolean;\n}\n\nexport interface ParsedAgentMentionMarkdown {\n item: AgentContextMentionItem;\n end: number;\n}\n\nexport const agentFileMentionPluginKey = new PluginKey(\n \"agentFileMentionSuggestion\"\n);\n\nexport function exitAgentFileMentionSuggestion(editor: Editor): void {\n exitSuggestion(editor.view, agentFileMentionPluginKey);\n}\n\nexport function createAgentFileMentionExtension(\n options: AgentFileMentionExtensionOptions = {}\n): Node {\n return Node.create({\n name: \"agentFileMention\",\n group: \"inline\",\n inline: true,\n atom: true,\n selectable: false,\n\n addOptions() {\n return options;\n },\n\n addAttributes() {\n return {\n name: { default: \"\" },\n kind: { default: \"file\" },\n href: { default: \"\" },\n path: { default: \"\" },\n entryKind: { default: \"unknown\" },\n directoryPath: { default: \"\" },\n workspaceId: { default: \"\" },\n targetId: { default: \"\" },\n scope: { default: \"\" },\n title: { default: \"\" },\n initiatorName: { default: \"\" },\n agentName: { default: \"\" },\n status: { default: \"\" },\n inputPreview: { default: \"\" },\n summaryPreview: { default: \"\" },\n creatorName: { default: \"\" },\n topicId: { default: \"\" },\n appId: { default: \"\" },\n agentProviderId: { default: \"\" },\n jobId: { default: \"\" },\n action: { default: \"\" },\n contextPath: { default: \"\" },\n description: { default: \"\" },\n iconUrl: { default: \"\" },\n contentPreview: { default: \"\" },\n thumbnailUrl: { default: \"\" },\n source: { default: \"\" },\n groupId: { default: \"\" },\n fileCount: { default: \"\" }\n };\n },\n\n parseHTML() {\n return [\n {\n tag: \"span[data-agent-file-mention]\",\n getAttrs: parseAgentMentionHTMLElementAttrs\n },\n {\n tag: \"a[data-agent-file-mention]\",\n getAttrs: parseAgentMentionHTMLElementAttrs\n }\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n const item = attrsToMentionItem(HTMLAttributes);\n const fileThumbnailUrl =\n item.kind === \"file\"\n ? resolveAgentMentionFileThumbnailUrl(item)\n : undefined;\n const href = item.href;\n const tagName = options.renderAsLink ? \"a\" : \"span\";\n const visual = mentionVisual(item);\n const sessionVisual =\n item.kind === \"session\" ? sessionMentionVisual(item) : null;\n const sharedAttributes = {\n \"data-agent-file-mention\": \"true\",\n \"data-agent-mention-href\": href,\n \"data-agent-mention-kind\": item.kind,\n \"aria-label\":\n item.kind === \"file\"\n ? visual.primary\n : `${visual.kindLabel} ${visual.primary}`.trim()\n };\n return [\n tagName,\n mergeAttributes(HTMLAttributes, {\n ...sharedAttributes,\n ...(item.kind === \"file\"\n ? {\n \"data-agent-file-entry-kind\": item.entryKind,\n \"data-agent-file-directory-path\": item.directoryPath,\n \"data-agent-file-visual-kind\":\n resolveAgentMentionFileVisualKind(item)\n }\n : {}),\n ...(options.renderAsLink ? { href } : {}),\n ...((item.kind === \"workspace-app\" ||\n item.kind === \"agent-target\" ||\n item.kind === \"workspace-reference\") &&\n item.iconUrl\n ? { \"data-agent-mention-icon-url\": item.iconUrl }\n : {}),\n ...(item.kind === \"workspace-reference\"\n ? { \"data-agent-mention-file-count\": String(item.fileCount) }\n : {}),\n ...(fileThumbnailUrl\n ? { \"data-agent-mention-thumbnail-url\": fileThumbnailUrl }\n : {}),\n class:\n item.kind === \"file\"\n ? \"tsh-agent-object-token tsh-agent-object-token--file\"\n : \"tsh-agent-object-token tsh-agent-object-token--entity\"\n }),\n ...(item.kind === \"file\"\n ? [\n fileThumbnailUrl\n ? [\n \"span\",\n {\n class: \"agent-gui-node__mention-file-thumb\",\n \"data-agent-mention-file-thumb\": \"true\",\n \"aria-hidden\": \"true\"\n },\n [\n \"img\",\n {\n src: fileThumbnailUrl,\n alt: \"\",\n decoding: \"async\",\n loading: \"lazy\",\n draggable: \"false\"\n }\n ]\n ]\n : [\n \"span\",\n {\n class: \"tsh-agent-object-token__icon\",\n \"aria-hidden\": \"true\"\n },\n \"\"\n ],\n [\n \"span\",\n { class: \"tsh-agent-object-token__main\" },\n visual.primary\n ]\n ]\n : item.kind === \"session\"\n ? [\n [\n \"span\",\n {\n class: \"tsh-agent-object-token__kind\",\n \"aria-hidden\": \"true\"\n },\n [\n \"span\",\n {\n class: \"tsh-agent-object-token__kind-icon\",\n \"aria-hidden\": \"true\"\n },\n \"\"\n ]\n ],\n [\n \"span\",\n { class: \"tsh-agent-object-token__main\" },\n [\n \"span\",\n { class: \"tsh-agent-object-token__participant\" },\n sessionVisual?.participant ?? \"\"\n ],\n [\n \"span\",\n { class: \"tsh-agent-object-token__summary\" },\n sessionVisual?.summary ? ` ${sessionVisual.summary}` : \"\"\n ]\n ]\n ]\n : [\n [\n \"span\",\n {\n class: \"tsh-agent-object-token__kind\",\n \"aria-hidden\": \"true\"\n },\n [\n \"span\",\n {\n class: \"tsh-agent-object-token__kind-icon\",\n \"aria-hidden\": \"true\"\n },\n \"\"\n ]\n ],\n [\n \"span\",\n { class: \"tsh-agent-object-token__main\" },\n visual.primary\n ]\n ])\n ];\n },\n\n renderText({ node }) {\n return formatAgentMentionMarkdown(attrsToMentionItem(node.attrs ?? {}));\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(AgentMentionNodeView);\n },\n\n addProseMirrorPlugins() {\n if (options.enableSuggestions === false) {\n return [];\n }\n return [\n Suggestion<AgentContextMentionItem, AgentContextMentionItem>({\n editor: this.editor,\n pluginKey: agentFileMentionPluginKey,\n char: \"@\",\n allowedPrefixes: [\" \", \"\\n\", \"\\t\"],\n allowSpaces: true,\n items: () => [],\n allow: ({ state, range }) => {\n if (options.shouldSuppressSuggestion?.()) {\n return false;\n }\n if (range.from <= 1) {\n return true;\n }\n const previous = state.doc.textBetween(\n range.from - 1,\n range.from,\n \"\\n\",\n \"\\n\"\n );\n return isRichTextTriggerPrefixBoundary(previous, \"whitespace\");\n },\n command: ({ editor, range, props }) => {\n const prefixCaretAnchor =\n range.from <= 1 ||\n editor.state.doc.textBetween(\n Math.max(1, range.from - 1),\n range.from,\n \"\\n\",\n \"\\n\"\n ) === \"\\n\";\n editor\n .chain()\n .focus()\n .insertContentAt(range, [\n ...(prefixCaretAnchor\n ? ([\n {\n type: \"text\",\n text: AGENT_RICH_TEXT_CARET_ANCHOR\n }\n ] as const)\n : []),\n {\n type: this.name,\n attrs: mentionItemToAttrs(props)\n },\n { type: \"text\", text: \" \" }\n ])\n .run();\n },\n render: () => ({\n onStart: (props) => {\n options.onSuggestionChange?.({\n editor: props.editor,\n range: props.range,\n query: props.query,\n text: props.text,\n command: props.command,\n clientRect: props.clientRect\n });\n },\n onUpdate: (props) => {\n options.onSuggestionChange?.({\n editor: props.editor,\n range: props.range,\n query: props.query,\n text: props.text,\n command: props.command,\n clientRect: props.clientRect\n });\n },\n onExit: () => {\n options.onSuggestionChange?.(null);\n },\n onKeyDown: (props) =>\n options.onSuggestionKeyDown?.(props.event) ?? false\n })\n })\n ];\n }\n });\n}\n\nexport function normalizeAgentSessionMentionTitle(value: string): string {\n const trimmed = value.trim();\n const withoutMentionPrefix = trimmed.replace(/^@+/, \"\").trim();\n return withoutMentionPrefix || trimmed;\n}\n\nexport function formatAgentFileMentionMarkdown(\n name: string,\n path: string\n): string {\n return formatAgentMentionMarkdown({\n kind: \"file\",\n href: path,\n path,\n name,\n entryKind: \"unknown\",\n directoryPath: \"\"\n });\n}\n\nexport function formatAgentMentionMarkdown(\n item: AgentContextMentionItem\n): string {\n // 所有 entity(含 workspace-reference)统一序列化成单条 mention 链接。\n // workspace-reference 不再展开成文件路径——agent 拿到 URI 后经 skill+CLI 按需解析。\n if (item.kind === \"file\") {\n const label = item.name.trim().startsWith(\"@\")\n ? item.name\n : `@${item.name}`;\n return createRichTextLinkMarkdown({\n kind: \"file\",\n name: label,\n path: item.href\n });\n }\n if (item.kind === \"workspace-reference\") {\n return createRichTextMentionMarkdown({\n providerId: \"workspace-reference\",\n entityId: item.targetId,\n label: item.name,\n scope: {\n workspaceId: item.workspaceId,\n source: item.source,\n ...(item.groupId?.trim() ? { groupId: item.groupId.trim() } : {}),\n ...(item.fileCount > 0 ? { count: String(item.fileCount) } : {})\n }\n });\n }\n if (item.kind === \"agent-target\") {\n return createRichTextMentionMarkdown({\n providerId: \"agent-target\",\n entityId: item.targetId,\n label: item.name,\n scope: { workspaceId: item.workspaceId }\n });\n }\n const identity = parseRichTextMentionHref(item.href, item.name);\n return identity ? createRichTextMentionMarkdown(identity) : \"\";\n}\n\nfunction parseMentionFileCount(value: unknown): number {\n const parsed =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? Number.parseInt(value.trim(), 10)\n : Number.NaN;\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;\n}\n\nexport function parseAgentMentionMarkdown(\n value: string,\n start = 0\n): ParsedAgentMentionMarkdown | null {\n if (!value.startsWith(\"[\", start)) {\n return null;\n }\n\n let index = start + 1;\n const prefixedMention = value[index] === \"@\";\n if (prefixedMention) {\n index += 1;\n }\n let name = \"\";\n while (index < value.length) {\n const current = value[index];\n if (current === \"\\\\\") {\n const escaped = value[index + 1];\n if (escaped === \"\\\\\" || escaped === \"[\" || escaped === \"]\") {\n name += escaped;\n index += 2;\n continue;\n }\n name += current;\n index += 1;\n continue;\n }\n if (current === \"]\") {\n break;\n }\n name += current;\n index += 1;\n }\n\n if (value[index] !== \"]\" || value[index + 1] !== \"(\") {\n return null;\n }\n\n index += 2;\n let href = \"\";\n while (index < value.length) {\n const current = value[index];\n if (current === \"\\\\\") {\n const escaped = value[index + 1];\n if (escaped === \"\\\\\" || escaped === \")\") {\n href += escaped;\n index += 2;\n continue;\n }\n href += current;\n index += 1;\n continue;\n }\n if (current === \")\") {\n const item = parseMentionItemFromHref({ name, href });\n if (!item) {\n return null;\n }\n if (\n item.kind !== \"file\" &&\n !prefixedMention &&\n !isRichTextMentionHref(href)\n ) {\n return null;\n }\n return {\n item,\n end: index + 1\n };\n }\n href += current;\n index += 1;\n }\n\n return null;\n}\n\nexport function parseMentionItemFromHref(input: {\n name: string;\n href: string;\n}): AgentContextMentionItem | null {\n const href = input.href.trim();\n if (!href) {\n return null;\n }\n const mention = parseRichTextMentionHref(href, input.name);\n if (!mention && !isRichTextMentionHref(href)) {\n return {\n kind: \"file\",\n href,\n path: href,\n name: input.name,\n entryKind: isLocalDirectoryMentionHref(href) ? \"directory\" : \"unknown\",\n directoryPath: dirnameFromPath(href)\n };\n }\n if (!mention) {\n return null;\n }\n\n const resource = mention.providerId.trim().toLowerCase();\n const targetId = mention.entityId.trim();\n const workspaceId = mention.scope?.workspaceId?.trim() ?? \"\";\n const name = mention.label;\n if (resource === \"agent-session\") {\n if (!workspaceId) {\n return null;\n }\n return {\n kind: \"session\",\n href,\n workspaceId,\n targetId,\n name,\n title: name,\n scope: \"collab_sessions\",\n initiatorName: \"\",\n agentName: \"\"\n };\n }\n if (resource === \"workspace-issue\") {\n if (!workspaceId) {\n return null;\n }\n return {\n kind: \"workspace-issue\",\n href,\n workspaceId,\n targetId,\n topicId: mention.scope?.topicId?.trim() || undefined,\n name,\n title: name\n };\n }\n if (resource === \"workspace-app\") {\n if (!workspaceId) {\n return null;\n }\n return {\n kind: \"workspace-app\",\n href,\n workspaceId,\n targetId,\n appId: targetId,\n name\n };\n }\n if (resource === \"agent-target\") {\n if (!workspaceId) {\n return null;\n }\n return {\n kind: \"agent-target\",\n href,\n workspaceId,\n targetId,\n name\n };\n }\n if (resource === \"workspace-reference\") {\n if (!workspaceId) {\n return null;\n }\n const source = mention.scope?.source?.trim();\n if (source !== \"app\" && source !== \"task\") {\n return null;\n }\n return {\n kind: \"workspace-reference\",\n href,\n workspaceId,\n targetId,\n source,\n groupId: mention.scope?.groupId?.trim() || undefined,\n name,\n iconUrl: mention.scope?.icon?.trim() || undefined,\n fileCount: parseMentionFileCount(mention.scope?.count)\n };\n }\n if (resource === \"workspace-app-factory\") {\n return {\n kind: \"workspace-app-factory\",\n href,\n workspaceId,\n targetId,\n jobId: targetId === \"create\" ? \"\" : targetId,\n name:\n name ||\n translate(\"agentHost.agentGui.workspaceAppFactoryMentionFallback\"),\n action: mention.scope?.action?.trim() || undefined,\n contextPath: mention.scope?.contextPath?.trim() || undefined\n };\n }\n return null;\n}\n\nfunction isLocalDirectoryMentionHref(href: string): boolean {\n return href.endsWith(\"/\") && !/^[a-zA-Z][a-zA-Z\\d+.-]*:/.test(href);\n}\n\nexport function mentionItemToAttrs(\n item: AgentContextMentionItem\n): Record<string, string> {\n if (item.kind === \"file\") {\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n path: item.path,\n entryKind: item.entryKind,\n directoryPath: item.directoryPath,\n thumbnailUrl: resolveAgentMentionFileThumbnailUrl(item) ?? \"\"\n };\n }\n if (item.kind === \"session\") {\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n scope: item.scope,\n title: item.title,\n initiatorName: item.initiatorName,\n agentName: item.agentName,\n status: item.status ?? \"\",\n inputPreview: item.inputPreview ?? \"\",\n summaryPreview: item.summaryPreview ?? \"\"\n };\n }\n if (item.kind === \"workspace-app\") {\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n appId: item.appId,\n description: item.description ?? \"\",\n iconUrl: item.iconUrl ?? \"\"\n };\n }\n if (item.kind === \"agent-target\") {\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n description: item.description ?? \"\",\n agentProviderId: item.agentProviderId ?? \"\",\n iconUrl: item.iconUrl ?? \"\"\n };\n }\n if (item.kind === \"workspace-reference\") {\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n source: item.source,\n groupId: item.groupId ?? \"\",\n iconUrl: item.iconUrl ?? \"\",\n fileCount: String(item.fileCount)\n };\n }\n if (item.kind === \"workspace-app-factory\") {\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n jobId: item.jobId,\n action: item.action ?? \"\",\n contextPath: item.contextPath ?? \"\"\n };\n }\n return {\n name: item.name,\n kind: item.kind,\n href: item.href,\n ...workspaceMentionAttrs(item.workspaceId),\n targetId: item.targetId,\n topicId: item.topicId ?? \"\",\n title: item.title,\n creatorName: item.creatorName ?? \"\",\n status: item.status ?? \"\",\n contentPreview: item.contentPreview ?? \"\"\n };\n}\n\nfunction workspaceMentionAttrs(\n workspaceId: string\n): Pick<AgentMentionSessionItem, \"workspaceId\"> {\n const normalizedWorkspaceId = workspaceId.trim();\n return {\n workspaceId: normalizedWorkspaceId\n };\n}\n\nexport function attrsToMentionItem(\n attrs: Record<string, unknown>\n): AgentContextMentionItem {\n const kind = normalizeMentionKind(attrs.kind);\n const name = typeof attrs.name === \"string\" ? attrs.name : \"\";\n const href =\n typeof attrs.href === \"string\" && attrs.href.trim() ? attrs.href : \"\";\n if (kind === \"session\") {\n const workspaceId = workspaceIdFromMentionAttrs(attrs);\n const targetId = typeof attrs.targetId === \"string\" ? attrs.targetId : \"\";\n return {\n kind,\n href,\n workspaceId,\n targetId,\n name,\n title:\n typeof attrs.title === \"string\" && attrs.title.trim()\n ? attrs.title\n : name,\n scope:\n attrs.scope === \"my_sessions\" || attrs.scope === \"collab_sessions\"\n ? attrs.scope\n : \"collab_sessions\",\n initiatorName:\n typeof attrs.initiatorName === \"string\" ? attrs.initiatorName : \"\",\n agentName: typeof attrs.agentName === \"string\" ? attrs.agentName : \"\",\n status: typeof attrs.status === \"string\" ? attrs.status : undefined,\n inputPreview:\n typeof attrs.inputPreview === \"string\" ? attrs.inputPreview : undefined,\n summaryPreview:\n typeof attrs.summaryPreview === \"string\"\n ? attrs.summaryPreview\n : undefined\n };\n }\n if (kind === \"workspace-issue\") {\n const workspaceId = workspaceIdFromMentionAttrs(attrs);\n const targetId = typeof attrs.targetId === \"string\" ? attrs.targetId : \"\";\n const topicId =\n typeof attrs.topicId === \"string\" && attrs.topicId.trim()\n ? attrs.topicId.trim()\n : undefined;\n return {\n kind,\n href,\n workspaceId,\n targetId,\n topicId,\n name,\n title:\n typeof attrs.title === \"string\" && attrs.title.trim()\n ? attrs.title\n : name,\n creatorName:\n typeof attrs.creatorName === \"string\" ? attrs.creatorName : undefined,\n status: typeof attrs.status === \"string\" ? attrs.status : undefined,\n contentPreview:\n typeof attrs.contentPreview === \"string\"\n ? attrs.contentPreview\n : undefined\n };\n }\n if (kind === \"workspace-app\") {\n const workspaceId = workspaceIdFromMentionAttrs(attrs);\n const appId =\n typeof attrs.appId === \"string\" && attrs.appId.trim()\n ? attrs.appId.trim()\n : typeof attrs.targetId === \"string\"\n ? attrs.targetId.trim()\n : \"\";\n return {\n kind,\n href,\n workspaceId,\n targetId: appId,\n appId,\n name,\n description:\n typeof attrs.description === \"string\" ? attrs.description : undefined,\n iconUrl:\n typeof attrs.iconUrl === \"string\" && attrs.iconUrl.trim()\n ? attrs.iconUrl.trim()\n : undefined\n };\n }\n if (kind === \"agent-target\") {\n const workspaceId = workspaceIdFromMentionAttrs(attrs);\n const targetId = typeof attrs.targetId === \"string\" ? attrs.targetId : \"\";\n return {\n kind,\n href,\n workspaceId,\n targetId,\n name,\n description:\n typeof attrs.description === \"string\" ? attrs.description : undefined,\n agentProviderId:\n typeof attrs.agentProviderId === \"string\" &&\n attrs.agentProviderId.trim()\n ? attrs.agentProviderId.trim()\n : undefined,\n iconUrl:\n typeof attrs.iconUrl === \"string\" && attrs.iconUrl.trim()\n ? attrs.iconUrl.trim()\n : undefined\n };\n }\n if (kind === \"workspace-reference\") {\n const workspaceId = workspaceIdFromMentionAttrs(attrs);\n const targetId =\n typeof attrs.targetId === \"string\" ? attrs.targetId.trim() : \"\";\n const source: AgentMentionReferenceSource =\n attrs.source === \"task\" ? \"task\" : \"app\";\n const groupId =\n typeof attrs.groupId === \"string\" && attrs.groupId.trim()\n ? attrs.groupId.trim()\n : undefined;\n const iconUrl =\n typeof attrs.iconUrl === \"string\" && attrs.iconUrl.trim()\n ? attrs.iconUrl.trim()\n : undefined;\n const fileCount = parseMentionFileCount(attrs.fileCount);\n return {\n kind,\n href,\n workspaceId,\n targetId,\n source,\n groupId,\n name,\n iconUrl,\n fileCount\n };\n }\n if (kind === \"workspace-app-factory\") {\n const workspaceId = workspaceIdFromMentionAttrs(attrs);\n const jobId =\n typeof attrs.jobId === \"string\" && attrs.jobId.trim()\n ? attrs.jobId.trim()\n : typeof attrs.targetId === \"string\"\n ? attrs.targetId.trim()\n : \"\";\n const action =\n typeof attrs.action === \"string\" && attrs.action.trim()\n ? attrs.action.trim()\n : undefined;\n const contextPath =\n typeof attrs.contextPath === \"string\" && attrs.contextPath.trim()\n ? attrs.contextPath.trim()\n : undefined;\n return {\n kind,\n href,\n workspaceId,\n targetId: jobId,\n jobId,\n name,\n action,\n contextPath\n };\n }\n const path =\n typeof attrs.path === \"string\" && attrs.path.trim()\n ? attrs.path\n : typeof attrs.href === \"string\"\n ? attrs.href\n : \"\";\n return {\n kind: \"file\",\n href: href || path,\n path,\n name,\n entryKind: normalizeEntryKind(attrs.entryKind),\n directoryPath:\n typeof attrs.directoryPath === \"string\" && attrs.directoryPath.trim()\n ? attrs.directoryPath\n : dirnameFromPath(path),\n thumbnailUrl: resolveAgentMentionFileThumbnailUrl({\n entryKind: normalizeEntryKind(attrs.entryKind),\n href: href || path,\n name,\n path,\n thumbnailUrl:\n typeof attrs.thumbnailUrl === \"string\" ? attrs.thumbnailUrl : undefined\n })\n };\n}\n\nfunction workspaceIdFromMentionAttrs(attrs: Record<string, unknown>): string {\n return typeof attrs.workspaceId === \"string\" ? attrs.workspaceId.trim() : \"\";\n}\n\nfunction parseAgentMentionHTMLElementAttrs(\n node: HTMLElement | string\n): Record<string, string> | false {\n if (typeof node === \"string\") {\n return false;\n }\n const href =\n node.getAttribute(\"data-agent-mention-href\") ||\n node.getAttribute(\"data-agent-link-href\") ||\n node.getAttribute(\"href\") ||\n \"\";\n const name =\n node.getAttribute(\"name\") ||\n (node.textContent ?? \"\").replace(/^@+/, \"\").trim();\n const parsedItem = href ? parseMentionItemFromHref({ name, href }) : null;\n const parsedAttrs = parsedItem ? mentionItemToAttrs(parsedItem) : {};\n const iconUrl = node.getAttribute(\"data-agent-mention-icon-url\") || \"\";\n const fileCount = node.getAttribute(\"data-agent-mention-file-count\") || \"\";\n return {\n ...parsedAttrs,\n name,\n kind:\n node.getAttribute(\"data-agent-mention-kind\") ||\n node.getAttribute(\"kind\") ||\n parsedAttrs.kind ||\n \"file\",\n href,\n ...(iconUrl ? { iconUrl } : {}),\n ...(fileCount ? { fileCount } : {})\n };\n}\n\nfunction normalizeMentionKind(value: unknown): AgentMentionKind {\n if (value === \"session\" || value === \"agent-session\") {\n return \"session\";\n }\n if (value === \"workspace-issue\") {\n return \"workspace-issue\";\n }\n if (value === \"workspace-app\") {\n return \"workspace-app\";\n }\n if (value === \"agent-target\") {\n return \"agent-target\";\n }\n if (value === \"workspace-reference\") {\n return \"workspace-reference\";\n }\n if (value === \"workspace-app-factory\") {\n return \"workspace-app-factory\";\n }\n return \"file\";\n}\n\nfunction normalizeEntryKind(value: unknown): AgentFileMentionKind {\n return value === \"directory\" || value === \"file\" ? value : \"unknown\";\n}\n\nfunction mentionVisual(item: AgentContextMentionItem): {\n kindLabel: string;\n primary: string;\n} {\n if (item.kind === \"file\") {\n return {\n kindLabel: \"File\",\n primary: item.name\n };\n }\n if (item.kind === \"session\") {\n const visual = sessionMentionVisual(item);\n return {\n kindLabel: \"Session\",\n primary: `${visual.participant} ${visual.summary}`.trim()\n };\n }\n if (item.kind === \"workspace-app\") {\n return {\n kindLabel: \"App\",\n primary: item.name\n };\n }\n if (item.kind === \"agent-target\") {\n return {\n kindLabel: \"Agent\",\n primary: item.name\n };\n }\n if (item.kind === \"workspace-app-factory\") {\n return {\n kindLabel: \"App Factory\",\n primary: item.name\n };\n }\n if (item.kind === \"workspace-reference\") {\n return {\n kindLabel: \"Reference\",\n primary: item.name\n };\n }\n return {\n kindLabel: \"Task\",\n primary: item.name\n };\n}\n\nfunction sessionMentionVisual(\n item: Extract<AgentContextMentionItem, { kind: \"session\" }>\n): {\n participant: string;\n summary: string;\n} {\n const initiatorName = item.initiatorName.trim();\n const agentName = item.agentName.trim();\n const title = normalizeAgentSessionMentionTitle(item.title);\n if (initiatorName && agentName) {\n const dottedTitle = parseDottedSessionMentionText(title);\n return {\n participant: `${initiatorName} & ${agentName}`,\n summary:\n dottedTitle?.summary ||\n (title && title !== item.name.trim()\n ? title\n : item.inputPreview?.trim() || \"\")\n };\n }\n\n const dottedName = parseDottedSessionMentionText(item.name);\n if (dottedName) {\n return {\n participant: dottedName.participant,\n summary: dottedName.summary\n };\n }\n\n return {\n participant: item.name.trim(),\n summary:\n title && title !== item.name.trim()\n ? title\n : item.inputPreview?.trim() || \"\"\n };\n}\n\nfunction parseDottedSessionMentionText(\n value: string\n): { participant: string; summary: string } | null {\n const parts = value\n .split(\"·\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (parts.length < 3) {\n return null;\n }\n return {\n participant: `${parts[0]} & ${parts[1]}`,\n summary: normalizeAgentSessionMentionTitle(parts.slice(2).join(\" \"))\n };\n}\n\nfunction dirnameFromPath(path: string): string {\n const parts = path.split(\"/\").filter(Boolean);\n if (parts.length <= 1) {\n return path.startsWith(\"/\") ? \"/\" : \"\";\n }\n return `/${parts.slice(0, -1).join(\"/\")}`;\n}\n","import { useEffect, useState, type JSX, type MouseEvent } from \"react\";\nimport { NodeViewWrapper, type NodeViewProps } from \"@tiptap/react\";\nimport {\n MentionPill,\n TruncatingPillLabel\n} from \"@tutti-os/ui-system/components\";\nimport { CloseIcon } from \"@tutti-os/ui-system/icons\";\nimport { useTranslation } from \"../../../i18n/index\";\nimport {\n resolveAgentMentionFileThumbnailUrl,\n resolveAgentMentionFileVisualKind\n} from \"../../shared/mentionFilePresentation\";\nimport { managedAgentRoundedIconUrl } from \"../../../shared/managedAgentIcons\";\nimport { AGENT_RICH_TEXT_CARET_ANCHOR } from \"./agentRichTextCaretAnchor\";\n\ntype AgentMentionNodeViewKind =\n | \"file\"\n | \"agent-target\"\n | \"session\"\n | \"workspace-app\"\n | \"workspace-reference\"\n | \"workspace-app-factory\"\n | \"workspace-issue\";\n\nfunction parseFileCountAttr(value: unknown): number {\n const parsed =\n typeof value === \"string\" ? Number.parseInt(value.trim(), 10) : Number.NaN;\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;\n}\n\ninterface AgentMentionNodeViewModel {\n ariaLabel: string;\n directoryPath: string;\n entryKind: string;\n href: string;\n iconUrl?: string;\n kind: AgentMentionNodeViewKind;\n label: string;\n summary?: string;\n thumbnailUrl?: string;\n /** 引用文件数量(workspace-reference 专用)。 */\n fileCount?: number;\n}\n\nfunction attrString(attrs: Record<string, unknown>, key: string): string {\n const value = attrs[key];\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction normalizeKind(value: string): AgentMentionNodeViewKind {\n if (value === \"session\" || value === \"agent-session\") {\n return \"session\";\n }\n if (value === \"workspace-issue\") {\n return \"workspace-issue\";\n }\n if (value === \"workspace-app\") {\n return \"workspace-app\";\n }\n if (value === \"workspace-reference\") {\n return \"workspace-reference\";\n }\n if (value === \"workspace-app-factory\") {\n return \"workspace-app-factory\";\n }\n if (value === \"agent-target\") {\n return \"agent-target\";\n }\n return \"file\";\n}\n\nfunction normalizeSessionTitle(value: string): string {\n const trimmed = value.trim();\n const withoutMentionPrefix = trimmed.replace(/^@+/, \"\").trim();\n return withoutMentionPrefix || trimmed;\n}\n\nfunction parseDottedSessionText(\n value: string\n): { participant: string; summary: string } | null {\n const parts = value\n .split(\"·\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (parts.length < 3) {\n return null;\n }\n return {\n participant: `${parts[0]} & ${parts[1]}`,\n summary: normalizeSessionTitle(parts.slice(2).join(\" \"))\n };\n}\n\nfunction sessionPresentation(attrs: Record<string, unknown>): {\n label: string;\n summary: string;\n} {\n const name = attrString(attrs, \"name\").trim();\n const initiatorName = attrString(attrs, \"initiatorName\").trim();\n const agentName = attrString(attrs, \"agentName\").trim();\n const title = normalizeSessionTitle(attrString(attrs, \"title\") || name);\n const inputPreview = attrString(attrs, \"inputPreview\").trim();\n\n if (initiatorName && agentName) {\n const dottedTitle = parseDottedSessionText(title);\n return {\n // i18n-check-ignore: Dynamic participant display names.\n label: `${initiatorName} & ${agentName}`,\n summary:\n dottedTitle?.summary || (title && title !== name ? title : inputPreview)\n };\n }\n\n const dottedName = parseDottedSessionText(name);\n if (dottedName) {\n return {\n label: dottedName.participant,\n summary: dottedName.summary\n };\n }\n\n return {\n label: name,\n summary: title && title !== name ? title : inputPreview\n };\n}\n\nfunction dirnameFromPath(path: string): string {\n const parts = path.split(\"/\").filter(Boolean);\n if (parts.length <= 1) {\n return path.startsWith(\"/\") ? \"/\" : \"\";\n }\n return `/${parts.slice(0, -1).join(\"/\")}`;\n}\n\nfunction mentionViewModel(\n attrs: Record<string, unknown>,\n t: (key: string) => string\n): AgentMentionNodeViewModel {\n const kind = normalizeKind(attrString(attrs, \"kind\"));\n const name = attrString(attrs, \"name\");\n const href = attrString(attrs, \"href\");\n\n if (kind === \"session\") {\n const presentation = sessionPresentation(attrs);\n const primary = `${presentation.label} ${presentation.summary}`.trim();\n return {\n ariaLabel:\n `${t(\"agentHost.agentGui.mentionKindSession\")} ${primary}`.trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n kind,\n label: presentation.label,\n summary: presentation.summary\n };\n }\n\n if (kind === \"workspace-issue\") {\n return {\n ariaLabel: `${t(\"agentHost.agentGui.mentionKindIssue\")} ${name}`.trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n kind,\n label: name\n };\n }\n\n if (kind === \"workspace-app\") {\n return {\n ariaLabel: `${t(\"agentHost.agentGui.mentionKindApp\")} ${name}`.trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n iconUrl: attrString(attrs, \"iconUrl\").trim() || undefined,\n kind,\n label: name\n };\n }\n\n if (kind === \"workspace-reference\") {\n return {\n ariaLabel: `${t(\"agentHost.agentGui.mentionKindApp\")} ${name}`.trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n iconUrl: attrString(attrs, \"iconUrl\").trim() || undefined,\n kind,\n label: name,\n fileCount: parseFileCountAttr(attrs.fileCount)\n };\n }\n\n if (kind === \"workspace-app-factory\") {\n return {\n ariaLabel:\n `${t(\"agentHost.agentGui.mentionKindAppFactory\")} ${name}`.trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n kind,\n label: name\n };\n }\n\n if (kind === \"agent-target\") {\n const agentProviderId = attrString(attrs, \"agentProviderId\").trim();\n return {\n ariaLabel: `${t(\"agentHost.agentGui.mentionKindAgent\")} ${name}`.trim(),\n directoryPath: \"\",\n entryKind: \"\",\n href,\n iconUrl:\n attrString(attrs, \"iconUrl\").trim() ||\n managedAgentRoundedIconUrl(agentProviderId),\n kind,\n label: name\n };\n }\n\n const path = attrString(attrs, \"path\") || href;\n const entryKind = attrString(attrs, \"entryKind\") || \"unknown\";\n return {\n ariaLabel: name,\n directoryPath: attrString(attrs, \"directoryPath\") || dirnameFromPath(path),\n entryKind,\n href: href || path,\n kind,\n label: name,\n thumbnailUrl: resolveAgentMentionFileThumbnailUrl({\n entryKind,\n href: href || path,\n name,\n path,\n thumbnailUrl: attrString(attrs, \"thumbnailUrl\")\n })\n };\n}\n\nfunction fileVisualKind(entryKind: string, path: string): string {\n return resolveAgentMentionFileVisualKind({ entryKind, path });\n}\n\nfunction hasPromptContentAfterMentionRemoval(\n doc: NodeViewProps[\"editor\"][\"state\"][\"doc\"]\n): boolean {\n let hasContent = false;\n doc.descendants((node) => {\n if (hasContent) {\n return false;\n }\n if (node.type.name === \"agentFileMention\") {\n hasContent = true;\n return false;\n }\n if (\n node.isText &&\n node.textContent.replaceAll(AGENT_RICH_TEXT_CARET_ANCHOR, \"\").trim()\n .length > 0\n ) {\n hasContent = true;\n return false;\n }\n return true;\n });\n return hasContent;\n}\n\nfunction AgentMentionLegacyFileNodeView({\n deleteNode,\n editor,\n extension,\n node,\n selected\n}: NodeViewProps): JSX.Element {\n const mention = mentionViewModel(node.attrs ?? {}, () => \"\");\n const [isEditable, setIsEditable] = useState(editor.isEditable);\n const extensionOptions = extension.options as {\n removeActionAriaLabel?: string;\n };\n const removeActionAriaLabel =\n typeof extensionOptions.removeActionAriaLabel === \"string\"\n ? extensionOptions.removeActionAriaLabel\n : undefined;\n\n useEffect(() => {\n const syncEditable = () => {\n setIsEditable(editor.isEditable);\n };\n\n syncEditable();\n editor.on(\"transaction\", syncEditable);\n editor.on(\"update\", syncEditable);\n return () => {\n editor.off(\"transaction\", syncEditable);\n editor.off(\"update\", syncEditable);\n };\n }, [editor]);\n\n const handleRemove = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n if (!editor.isEditable) {\n return;\n }\n deleteNode();\n if (!hasPromptContentAfterMentionRemoval(editor.state.doc)) {\n editor.commands.clearContent();\n }\n };\n\n return (\n <NodeViewWrapper\n as=\"span\"\n aria-label={mention.ariaLabel}\n className={`agent-rich-text-mention-node group tsh-agent-object-token tsh-agent-object-token--file ${\n selected ? \"is-selected\" : \"\"\n }`}\n contentEditable={false}\n data-agent-file-directory-path={mention.directoryPath}\n data-agent-file-entry-kind={mention.entryKind}\n data-agent-file-mention=\"true\"\n {...(mention.thumbnailUrl\n ? {}\n : {\n \"data-agent-file-visual-kind\": fileVisualKind(\n mention.entryKind,\n mention.href || mention.label\n )\n })}\n data-agent-mention-href={mention.href}\n data-agent-mention-kind={mention.kind}\n {...(mention.thumbnailUrl\n ? { \"data-agent-mention-thumbnail-url\": mention.thumbnailUrl }\n : {})}\n >\n {mention.thumbnailUrl ? (\n <span\n className=\"agent-gui-node__mention-file-thumb relative\"\n data-agent-mention-file-thumb=\"true\"\n aria-hidden={isEditable ? undefined : true}\n >\n <img\n src={mention.thumbnailUrl}\n alt=\"\"\n className={`h-full w-full object-cover transition-opacity ${\n isEditable\n ? \"group-hover:opacity-0 group-focus-within:opacity-0\"\n : \"\"\n }`}\n decoding=\"async\"\n loading=\"lazy\"\n draggable={false}\n />\n {isEditable ? (\n <button\n aria-label={removeActionAriaLabel}\n className=\"absolute left-1/2 top-1/2 inline-flex size-5 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-sm text-[var(--text-secondary)] opacity-0 transition-opacity hover:bg-transparency-block hover:text-[var(--text-primary)] focus-visible:opacity-100 group-hover:opacity-100\"\n type=\"button\"\n onMouseDown={handleRemove}\n >\n <CloseIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </span>\n ) : (\n <span\n className=\"relative grid size-4 shrink-0 place-items-center\"\n aria-hidden={isEditable ? undefined : true}\n >\n <span\n className={`tsh-agent-object-token__icon transition-opacity ${\n isEditable\n ? \"group-hover:opacity-0 group-focus-within:opacity-0\"\n : \"\"\n }`}\n aria-hidden=\"true\"\n />\n {isEditable ? (\n <button\n aria-label={removeActionAriaLabel}\n className=\"absolute left-1/2 top-1/2 inline-flex size-5 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-sm text-[var(--text-secondary)] opacity-0 transition-opacity hover:bg-transparency-block hover:text-[var(--text-primary)] focus-visible:opacity-100 group-hover:opacity-100\"\n type=\"button\"\n onMouseDown={handleRemove}\n >\n <CloseIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </span>\n )}\n <span className=\"tsh-agent-object-token__main\">{mention.label}</span>\n </NodeViewWrapper>\n );\n}\n\nexport function AgentMentionNodeView(props: NodeViewProps): JSX.Element {\n const { deleteNode, editor, extension, node, selected } = props;\n const { t } = useTranslation();\n const mention = mentionViewModel(node.attrs ?? {}, t);\n const [isEditable, setIsEditable] = useState(editor.isEditable);\n const extensionOptions = extension.options as {\n removeActionAriaLabel?: string;\n };\n const removeActionAriaLabel =\n typeof extensionOptions.removeActionAriaLabel === \"string\"\n ? extensionOptions.removeActionAriaLabel\n : undefined;\n\n useEffect(() => {\n const syncEditable = () => {\n setIsEditable(editor.isEditable);\n };\n\n syncEditable();\n editor.on(\"transaction\", syncEditable);\n editor.on(\"update\", syncEditable);\n return () => {\n editor.off(\"transaction\", syncEditable);\n editor.off(\"update\", syncEditable);\n };\n }, [editor]);\n\n const handleRemove = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n if (!editor.isEditable) {\n return;\n }\n deleteNode();\n if (!hasPromptContentAfterMentionRemoval(editor.state.doc)) {\n editor.commands.clearContent();\n }\n };\n\n if (mention.kind === \"file\") {\n return <AgentMentionLegacyFileNodeView {...props} />;\n }\n\n if (\n mention.kind === \"workspace-app\" ||\n mention.kind === \"workspace-reference\" ||\n mention.kind === \"agent-target\"\n ) {\n return (\n <NodeViewWrapper\n as=\"span\"\n aria-label={mention.ariaLabel}\n className={`agent-rich-text-mention-node inline-flex max-w-[min(100%,var(--agent-mention-max-width,16rem))] align-middle ${\n selected ? \"is-selected\" : \"\"\n }`}\n contentEditable={false}\n data-agent-file-mention=\"true\"\n data-agent-mention-href={mention.href}\n data-agent-mention-icon-url={mention.iconUrl}\n data-agent-mention-kind={mention.kind}\n >\n <span\n className=\"group relative top-0 inline-flex max-w-[min(100%,var(--agent-mention-max-width,16rem))] cursor-pointer items-center gap-1 overflow-hidden rounded-[4px] border border-transparent bg-transparent px-1 py-0 align-middle text-[13px] font-medium leading-6 text-[var(--agent-gui-mention-app-color,var(--tutti-purple))] no-underline transition-colors hover:border-transparent hover:bg-[color-mix(in_srgb,currentColor_12%,transparent)]\"\n data-agent-mention-kind={mention.kind}\n data-slot=\"mention-pill\"\n >\n <span\n aria-hidden={isEditable ? undefined : true}\n className=\"relative grid size-4 shrink-0 place-items-center overflow-hidden rounded-[4px] bg-block\"\n data-agent-mention-app-icon=\"true\"\n data-workspace-app-icon=\"true\"\n >\n {mention.iconUrl ? (\n <img\n src={mention.iconUrl}\n alt=\"\"\n className={`size-full object-cover transition-opacity ${\n isEditable\n ? \"group-hover:opacity-0 group-focus-within:opacity-0\"\n : \"\"\n }`}\n decoding=\"async\"\n loading=\"lazy\"\n draggable={false}\n />\n ) : (\n <span\n className={`tsh-agent-object-token__kind-icon size-4 transition-opacity ${\n isEditable\n ? \"group-hover:opacity-0 group-focus-within:opacity-0\"\n : \"\"\n }`}\n />\n )}\n {isEditable ? (\n <button\n aria-label={removeActionAriaLabel}\n className=\"absolute left-1/2 top-1/2 inline-flex size-5 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-sm text-[var(--text-secondary)] opacity-0 transition-opacity hover:bg-transparency-block hover:text-[var(--text-primary)] focus-visible:opacity-100 group-hover:opacity-100\"\n type=\"button\"\n onMouseDown={handleRemove}\n >\n <CloseIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </span>\n <TruncatingPillLabel tooltip={mention.label}>\n {mention.label}\n </TruncatingPillLabel>\n </span>\n </NodeViewWrapper>\n );\n }\n\n return (\n <NodeViewWrapper\n as=\"span\"\n className={`agent-rich-text-mention-node inline-flex max-w-[min(100%,var(--agent-mention-max-width,16rem))] align-middle ${\n selected ? \"is-selected\" : \"\"\n }`}\n contentEditable={false}\n >\n <MentionPill\n aria-label={mention.ariaLabel}\n className=\"top-0 h-6 py-0 align-middle leading-6\"\n data-agent-mention-href={mention.href}\n data-agent-mention-kind={mention.kind}\n kind={mention.kind === \"session\" ? \"session\" : \"issue\"}\n label={mention.label}\n removable={isEditable}\n removeButtonProps={\n isEditable\n ? {\n \"aria-label\": removeActionAriaLabel,\n onMouseDown: handleRemove\n }\n : undefined\n }\n summary={mention.summary}\n />\n </NodeViewWrapper>\n );\n}\n","export const AGENT_RICH_TEXT_CARET_ANCHOR = \"\\u200B\";\n"],"mappings":"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","names":["dirnameFromPath"]}