@tutti-os/agent-gui 0.0.122 → 0.0.123

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 (50) hide show
  1. package/dist/{AgentRichTextReadonly-ZP4IPOKE.js → AgentRichTextReadonly-ZWKC3FJE.js} +5 -5
  2. package/dist/agent-conversation/index.js +6 -6
  3. package/dist/agent-gui.js +12 -12
  4. package/dist/agent-message-center/index.js +4 -4
  5. package/dist/{chunk-HY62S74W.js → chunk-2EH3KOJV.js} +2 -2
  6. package/dist/{chunk-Q7VQMT6S.js → chunk-3XS6P7BA.js} +3 -3
  7. package/dist/{chunk-33KXARZV.js → chunk-6NUOJ6PS.js} +2 -2
  8. package/dist/{chunk-23BQVPBI.js → chunk-C3IGPKCP.js} +3 -3
  9. package/dist/{chunk-O565X5F2.js → chunk-DXIL75XS.js} +5 -5
  10. package/dist/chunk-DXIL75XS.js.map +1 -0
  11. package/dist/{chunk-YVDIO5JJ.js → chunk-DXT4W2SU.js} +2 -2
  12. package/dist/{chunk-MFRBWJAT.js → chunk-EDNJMG5T.js} +2 -2
  13. package/dist/{chunk-UTNEHS2B.js → chunk-NWPGWLWP.js} +2 -2
  14. package/dist/{chunk-D6AHMJLB.js → chunk-PPOCDOYZ.js} +15 -15
  15. package/dist/chunk-PPOCDOYZ.js.map +1 -0
  16. package/dist/{chunk-UGVI47X6.js → chunk-QMMWKQOT.js} +6 -6
  17. package/dist/chunk-QMMWKQOT.js.map +1 -0
  18. package/dist/{chunk-U753GCTY.js → chunk-RQDDJHEO.js} +2 -2
  19. package/dist/{chunk-TBPD3KWZ.js → chunk-WEHEJ25P.js} +2 -2
  20. package/dist/context-mention-palette/index.js +5 -5
  21. package/dist/dock-icons.js +2 -2
  22. package/dist/index.js +12 -12
  23. package/dist/mention-search.js +4 -4
  24. package/dist/provider-icons.js +1 -1
  25. package/dist/workbench/contribution.js +3 -3
  26. package/dist/workbench/index.js +3 -3
  27. package/package.json +14 -14
  28. package/dist/@-bold-lined-BLLFKBFI.svg +0 -10
  29. package/dist/add-lined-bold-5QPUDZCU.svg +0 -3
  30. package/dist/agent-vinyl-beta-tag-WNXZR6JT.svg +0 -5
  31. package/dist/chunk-D6AHMJLB.js.map +0 -1
  32. package/dist/chunk-O565X5F2.js.map +0 -1
  33. package/dist/chunk-UGVI47X6.js.map +0 -1
  34. package/dist/claudecode-flat-filled-NHO4JCVK.svg +0 -10
  35. package/dist/codex-flat-filled-WYHCF5VR.svg +0 -10
  36. package/dist/cursor-flat-filled-CL7N3BTZ.svg +0 -3
  37. package/dist/handoff-lined-4WQUBVG3.svg +0 -11
  38. package/dist/open-link-lined-JWEKUKME.svg +0 -4
  39. package/dist/opencode-flat-filled-CYAJPX45.svg +0 -4
  40. package/dist/tutti-flat-filled-K32QBTZE.svg +0 -12
  41. /package/dist/{AgentRichTextReadonly-ZP4IPOKE.js.map → AgentRichTextReadonly-ZWKC3FJE.js.map} +0 -0
  42. /package/dist/{chunk-HY62S74W.js.map → chunk-2EH3KOJV.js.map} +0 -0
  43. /package/dist/{chunk-Q7VQMT6S.js.map → chunk-3XS6P7BA.js.map} +0 -0
  44. /package/dist/{chunk-33KXARZV.js.map → chunk-6NUOJ6PS.js.map} +0 -0
  45. /package/dist/{chunk-23BQVPBI.js.map → chunk-C3IGPKCP.js.map} +0 -0
  46. /package/dist/{chunk-YVDIO5JJ.js.map → chunk-DXT4W2SU.js.map} +0 -0
  47. /package/dist/{chunk-MFRBWJAT.js.map → chunk-EDNJMG5T.js.map} +0 -0
  48. /package/dist/{chunk-UTNEHS2B.js.map → chunk-NWPGWLWP.js.map} +0 -0
  49. /package/dist/{chunk-U753GCTY.js.map → chunk-RQDDJHEO.js.map} +0 -0
  50. /package/dist/{chunk-TBPD3KWZ.js.map → chunk-WEHEJ25P.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../workbench/contribution.ts","../agent-gui/agentGuiNode/model/agentGuiRailLayout.ts","../workbench/AgentGuiWorkbenchReactiveHeader.tsx","../workbench/conversationIdentity.ts","../agentGuiSessionProviderIconUrls.ts","../workbench/header.ts","../workbench/bodyRenderErrorRegistry.ts","../workbench/contributionDock.tsx"],"sourcesContent":["import { createElement, type ReactNode } from \"react\";\nimport type { AgentSessionEngine } from \"@tutti-os/agent-activity-core\";\nimport {\n type WorkbenchContribution,\n type WorkbenchFrame,\n type WorkbenchHostNodeBodyContext\n} from \"@tutti-os/workbench-surface\";\nimport {\n clampAgentGUIConversationRailWidthPx,\n resolveAgentGUIExpandedWindowFrame,\n shouldAutoCollapseAgentGUIConversationRail\n} from \"../agent-gui/agentGuiNode/model/agentGuiRailLayout.ts\";\nimport { AgentGuiWorkbenchReactiveHeader } from \"./AgentGuiWorkbenchReactiveHeader.tsx\";\nimport { setAgentGuiWorkbenchBodyRenderError } from \"./bodyRenderErrorRegistry.ts\";\nimport {\n AgentGuiWorkbenchHeader,\n type AgentGuiWorkbenchHeaderProps\n} from \"./header.ts\";\nimport type { AgentGuiWorkbenchConversationIdentity } from \"./conversationIdentity.ts\";\nimport {\n agentGuiWorkbenchTypeId,\n createAgentGuiWorkbenchLaunchDescriptor\n} from \"./launch.ts\";\nimport {\n createAgentGuiWorkbenchNodeStateSource,\n migrateLegacyAgentGuiWorkbenchState,\n normalizeAgentGuiWorkbenchNodeState,\n normalizeAgentGuiWorkbenchState\n} from \"./state.ts\";\nimport type {\n AgentGuiWorkbenchNodeState,\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState\n} from \"./types.ts\";\nimport type { AgentGUIAgentDirectoryPort } from \"../types.ts\";\n\nexport const AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT =\n \"tutti:agent-gui-workbench-conversation-rail-toggle\";\n\nexport const AGENT_GUI_WORKBENCH_NEW_CONVERSATION_EVENT =\n \"tutti:agent-gui-workbench-new-conversation\";\n\n/**\n * Fired when the empty-hero \"Import session\" suggestion is chosen. The host\n * chrome (which owns the external-agent import wizard state) listens for this\n * and opens the wizard.\n */\nexport const AGENT_GUI_WORKBENCH_OPEN_EXTERNAL_IMPORT_EVENT =\n \"tutti:agent-gui-workbench-open-external-import\";\n\nexport interface AgentGuiWorkbenchConversationRailToggleDetail {\n conversationRailCollapsed: boolean;\n instanceId: string;\n}\n\nexport interface AgentGuiWorkbenchNewConversationDetail {\n instanceId: string;\n}\n\nexport type { AgentGuiWorkbenchConversationIdentity } from \"./conversationIdentity.ts\";\n\nexport interface AgentGuiWorkbenchContributionCopy {\n collapseConversationRail: string;\n close: string;\n expandConversationRail: string;\n fallbackAgentLabel: string;\n maximize: string;\n minimize: string;\n newConversation: string;\n nodeTitle: string;\n openDetachedWindow: string;\n restore: string;\n untitledConversation: string;\n}\n\nexport type AgentGuiWorkbenchContributionCopyOverrides =\n Partial<AgentGuiWorkbenchContributionCopy>;\n\nexport interface AgentGuiWorkbenchRenderBodyHelpers {\n agentDirectory: AgentGUIAgentDirectoryPort;\n agentTargetId: string | null;\n nodeTypeId: string;\n onStateChange(state: AgentGuiWorkbenchState): void;\n provider: AgentGuiWorkbenchProvider | null;\n}\n\nexport interface CreateAgentGuiWorkbenchContributionInput {\n agentDirectory: AgentGUIAgentDirectoryPort;\n copy?: AgentGuiWorkbenchContributionCopyOverrides;\n defaultProvider?: AgentGuiWorkbenchProvider | null;\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n dockSectionId?: string;\n frame?: WorkbenchFrame;\n id?: string;\n providerAvailability?: AgentGuiWorkbenchProviderAvailability;\n renderBody(\n context: WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n helpers: AgentGuiWorkbenchRenderBodyHelpers\n ): ReactNode;\n renderPreview?(\n context: WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n helpers: AgentGuiWorkbenchRenderBodyHelpers\n ): ReactNode;\n renderMinimizedPreview(\n context: WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n helpers: AgentGuiWorkbenchRenderBodyHelpers\n ): ReactNode;\n resolveDockPopupTitle?: (\n state: AgentGuiWorkbenchState | null\n ) => string | null;\n resolveDockPopupIdentity?: (\n state: AgentGuiWorkbenchState | null\n ) => AgentGuiWorkbenchConversationIdentity | null;\n sessionEngine?: AgentSessionEngine;\n onOpenDetachedWindow?: (input: {\n agentSessionId?: string | null;\n agentTargetId?: string | null;\n provider: AgentGuiWorkbenchProvider;\n workspaceId: string;\n }) => void | Promise<void>;\n unifiedDockIconUrl?: string;\n workspaceId: string;\n}\n\nexport function createAgentGuiWorkbenchContribution(\n input: CreateAgentGuiWorkbenchContributionInput\n): WorkbenchContribution {\n const nodeStateSource = createAgentGuiWorkbenchNodeStateSource({\n workspaceId: input.workspaceId\n });\n const frame = input.frame ?? agentGuiWorkbenchDefaultNodeFrame;\n const copy = resolveAgentGuiWorkbenchContributionCopy(input.copy);\n return {\n dockEntries: buildAgentGuiDockEntries({\n agentDirectory: input.agentDirectory,\n defaultProvider: input.defaultProvider,\n dockIconUrls: input.dockIconUrls,\n label: copy.nodeTitle,\n providerAvailability: input.providerAvailability,\n renderPreview: input.renderPreview,\n resolveDockPopupIdentity: input.resolveDockPopupIdentity,\n resolveDockPopupTitle: input.resolveDockPopupTitle,\n sectionId: input.dockSectionId ?? \"agents\",\n unifiedDockIconUrl: input.unifiedDockIconUrl\n }),\n externalStateSource: nodeStateSource.externalStateSource,\n id: input.id ?? \"workspace-agent-gui\",\n nodes: [\n {\n frame,\n instance: { mode: \"multi\" },\n onBodyRenderErrorChange: ({ hasError, node }) => {\n setAgentGuiWorkbenchBodyRenderError(node.id, hasError);\n },\n renderBody: (context) => {\n const persistedState = normalizeAgentGuiWorkbenchState(\n context.externalNodeState ?? context.node?.data.snapshotNodeState\n );\n const activationAgentTargetId = agentTargetIdFromActivation(\n context.activation\n );\n const state =\n activationAgentTargetId && !persistedState.agentTargetId\n ? { ...persistedState, agentTargetId: activationAgentTargetId }\n : persistedState;\n const agent = resolveAgentGuiWorkbenchStateAgent(\n state,\n input.agentDirectory\n );\n return input.renderBody(\n context as WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n {\n agentDirectory: input.agentDirectory,\n agentTargetId: state.agentTargetId ?? null,\n nodeTypeId: agentGuiWorkbenchTypeId,\n onStateChange: (nextState) => {\n nodeStateSource.writeNodeState({\n instanceId: context.instanceId,\n nodeId: context.node.id,\n state: nextState,\n typeId: agentGuiWorkbenchTypeId\n });\n },\n provider: agent?.provider ?? null\n }\n );\n },\n renderHeader: ({\n dragHandleProps,\n displayMode,\n externalNodeState,\n instanceId,\n isFocused,\n node,\n surfaceSize,\n windowActions\n }) => {\n const headerTitle = copy.nodeTitle;\n const rawWorkbenchState = (externalNodeState ??\n node.data.runtimeNodeState) as\n | Partial<AgentGuiWorkbenchNodeState>\n | null\n | undefined;\n const migratedWorkbenchState =\n migrateLegacyAgentGuiWorkbenchState(rawWorkbenchState);\n const workbenchState = normalizeAgentGuiWorkbenchState(\n migratedWorkbenchState\n );\n const selectedAgent = resolveAgentGuiWorkbenchStateAgent(\n workbenchState,\n input.agentDirectory\n );\n const provider = selectedAgent?.provider ?? \"unknown\";\n const nodeState = normalizeAgentGuiWorkbenchNodeState(\n migratedWorkbenchState,\n provider\n );\n const isConversationRailAutoCollapsed =\n shouldAutoCollapseAgentGUIConversationRail(node.frame.width);\n const isConversationRailCollapsed =\n nodeState.conversationRailCollapsed === true ||\n isConversationRailAutoCollapsed;\n const conversationRailWidthPx = clampAgentGUIConversationRailWidthPx(\n nodeState.conversationRailWidthPx,\n node.frame.width\n );\n const conversationIdentity = input.sessionEngine\n ? null\n : (input.resolveDockPopupIdentity?.(workbenchState) ?? null);\n const conversationTitle = input.sessionEngine\n ? null\n : (conversationIdentity?.title ??\n input.resolveDockPopupTitle?.(workbenchState) ??\n null);\n // The empty new-conversation home has no session identity, so it\n // must not inherit the provider icon from the workbench instance.\n // Once a local session id exists, keep the provider icon available\n // while the canonical conversation title is still being persisted.\n const hasConversation = Boolean(\n workbenchState.lastActiveAgentSessionId?.trim()\n );\n const conversationIconFallbackUrl =\n hasConversation && selectedAgent ? selectedAgent.iconUrl : null;\n const conversationIconUrl =\n conversationIdentity?.iconUrl ?? conversationIconFallbackUrl;\n const persistConversationRailCollapsed = (collapsed: boolean) => {\n nodeStateSource.writeNodeState({\n instanceId,\n nodeId: node.id,\n state: {\n ...workbenchState,\n conversationRailCollapsed: collapsed\n },\n typeId: agentGuiWorkbenchTypeId\n });\n };\n const announceConversationRailCollapsed = (collapsed: boolean) => {\n window.dispatchEvent(\n new CustomEvent<AgentGuiWorkbenchConversationRailToggleDetail>(\n AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT,\n {\n detail: {\n conversationRailCollapsed: collapsed,\n instanceId\n }\n }\n )\n );\n };\n const announceNewConversation = () => {\n window.dispatchEvent(\n new CustomEvent<AgentGuiWorkbenchNewConversationDetail>(\n AGENT_GUI_WORKBENCH_NEW_CONVERSATION_EVENT,\n {\n detail: {\n instanceId\n }\n }\n )\n );\n };\n\n const headerProps = {\n copy,\n conversationIconFallbackUrl,\n conversationRailWidthPx,\n displayMode,\n isConversationRailAutoCollapsed,\n isConversationRailCollapsed,\n nodeId: node.id,\n providerRailWidthPx: agentGuiWorkbenchProviderRailWidthPx,\n title: headerTitle,\n windowActions: {\n close: windowActions.close,\n minimize: windowActions.minimize,\n toggleDisplayMode: windowActions.toggleDisplayMode\n },\n ...dragHandleProps,\n onCreateConversation: announceNewConversation,\n onOpenDetachedWindow: input.onOpenDetachedWindow\n ? selectedAgent\n ? () => {\n void input.onOpenDetachedWindow?.({\n agentSessionId: workbenchState.lastActiveAgentSessionId,\n agentTargetId: selectedAgent.agentTargetId,\n provider: selectedAgent.provider,\n workspaceId: input.workspaceId\n });\n }\n : undefined\n : undefined,\n onPointerDown: (event) => {\n dragHandleProps.onPointerDown?.(event);\n if (!isFocused) {\n windowActions.focus();\n }\n },\n onToggleConversationRail: (nextCollapsed) => {\n announceConversationRailCollapsed(nextCollapsed);\n if (\n isConversationRailCollapsed &&\n nextCollapsed === false &&\n node.displayMode !== \"fullscreen\"\n ) {\n const expandedFrame = resolveAgentGUIExpandedWindowFrame({\n conversationRailWidthPx: nodeState.conversationRailWidthPx,\n desktopSize: surfaceSize,\n height: node.frame.height,\n position: {\n x: node.frame.x,\n y: node.frame.y\n },\n width: node.frame.width\n });\n\n windowActions.resize({\n ...node.frame,\n height: expandedFrame.size.height,\n width: expandedFrame.size.width,\n x: expandedFrame.position.x,\n y: expandedFrame.position.y\n });\n }\n\n persistConversationRailCollapsed(nextCollapsed);\n }\n } satisfies AgentGuiWorkbenchHeaderProps;\n return input.sessionEngine\n ? createElement(AgentGuiWorkbenchReactiveHeader, {\n ...headerProps,\n agentDirectory: input.agentDirectory,\n dockIconUrls: input.dockIconUrls,\n sessionEngine: input.sessionEngine,\n workbenchState\n })\n : createElement(AgentGuiWorkbenchHeader, {\n ...headerProps,\n agentTitle: conversationIdentity?.agentTitle,\n conversationIconUrl,\n conversationTitle,\n hasConversation\n });\n },\n title: copy.nodeTitle,\n typeId: agentGuiWorkbenchTypeId,\n window: {\n closable: true,\n defaultOpen: false,\n minimizedDock: {\n kind: \"component\",\n providePreview: (item) =>\n createAgentGuiWorkbenchPreviewContent({\n agentDirectory: input.agentDirectory,\n item,\n renderPreview: input.renderMinimizedPreview,\n resolveDockPopupTitle: input.resolveDockPopupTitle\n })\n },\n minimizable: true\n }\n }\n ],\n onLaunchRequest: (request) => {\n if (request.typeId !== agentGuiWorkbenchTypeId) {\n return null;\n }\n\n const launchPayload = resolveAgentGuiWorkbenchLaunchPayload(request, {\n agentDirectory: input.agentDirectory,\n defaultProvider: input.defaultProvider,\n providerAvailability: input.providerAvailability\n });\n if (\n !hasAgentSessionId(launchPayload) &&\n !providerTargetLaunchPayloadFromRequest(\n launchPayload,\n providerFromState(launchPayload) ?? \"codex\"\n ).agentTargetId\n ) {\n return null;\n }\n if (!providerFromState(launchPayload)) {\n return null;\n }\n const {\n activation,\n dockEntryId,\n instanceId: descriptorInstanceId,\n openInNewWindow,\n provider,\n reusePolicy,\n targetAgentSessionId\n } = createAgentGuiWorkbenchLaunchDescriptor({\n ...request,\n payload: launchPayload\n });\n const providerTarget = providerTargetLaunchPayloadFromRequest(\n launchPayload,\n provider\n );\n // Locate an already-open node currently showing this session (its launch\n // instanceId may differ from the session-keyed one, e.g. a conversation\n // started fresh as a draft) so we focus it instead of opening a duplicate.\n const existingInstanceId =\n reusePolicy.kind === \"current-session\"\n ? nodeStateSource.findInstanceIdByAgentSessionId(\n reusePolicy.agentSessionId\n )\n : null;\n const instanceId = existingInstanceId ?? descriptorInstanceId;\n const title = copy.nodeTitle;\n const launchAgentTargetId = providerTarget.agentTargetId;\n if (targetAgentSessionId) {\n const previousState = nodeStateSource.readNodeState({\n instanceId,\n typeId: agentGuiWorkbenchTypeId\n });\n nodeStateSource.writeNodeState({\n instanceId,\n state: {\n ...normalizeAgentGuiWorkbenchState(previousState),\n ...(targetAgentSessionId\n ? { lastActiveAgentSessionId: targetAgentSessionId }\n : {}),\n agentTargetId: launchAgentTargetId ?? null\n },\n typeId: agentGuiWorkbenchTypeId\n });\n } else if (providerTarget.agentTargetId) {\n const previousState = nodeStateSource.readNodeState({\n instanceId,\n typeId: agentGuiWorkbenchTypeId\n });\n nodeStateSource.writeNodeState({\n instanceId,\n state: {\n ...normalizeAgentGuiWorkbenchState(previousState),\n lastActiveAgentSessionId: null,\n agentTargetId: providerTarget.agentTargetId\n },\n typeId: agentGuiWorkbenchTypeId\n });\n }\n const defaultFrame = resolveAgentGuiWorkbenchDefaultLaunchFrame({\n frame,\n request\n });\n return {\n activation,\n ...(openInNewWindow\n ? { cascadeOffset: agentGuiWorkbenchNewWindowCascadeOffset }\n : {}),\n defaultFrame,\n dockEntryId,\n framePolicy:\n !openInNewWindow &&\n isAgentGuiWorkbenchCompactVisibleFrame(defaultFrame, frame)\n ? \"absolute\"\n : \"cascade-same-type-centered\",\n instanceId,\n // Reusing the window already showing this specific conversation\n // (e.g. clicking a completion notification) should just focus it,\n // not reset it back to the default size/position.\n preserveExistingNodeFrame: existingInstanceId !== null,\n reuseDockEntryNode: reusePolicy.kind === \"dock-entry\",\n title,\n typeId: agentGuiWorkbenchTypeId\n };\n }\n };\n}\n\nfunction resolveAgentGuiWorkbenchStateAgent(\n state: AgentGuiWorkbenchState | null,\n directory: AgentGUIAgentDirectoryPort\n) {\n const agentTargetId = state?.agentTargetId?.trim();\n if (!agentTargetId) {\n return null;\n }\n return (\n directory\n .getSnapshot()\n .agents.find((agent) => agent.agentTargetId === agentTargetId) ?? null\n );\n}\n\nfunction agentTargetIdFromActivation(activation: unknown): string | null {\n if (!activation || typeof activation !== \"object\") {\n return null;\n }\n const payload = (activation as { payload?: unknown }).payload;\n if (!payload || typeof payload !== \"object\") {\n return null;\n }\n const agentTargetId = (payload as { agentTargetId?: unknown }).agentTargetId;\n return typeof agentTargetId === \"string\" && agentTargetId.trim()\n ? agentTargetId.trim()\n : null;\n}\n\nfunction hasAgentSessionId(payload: unknown): boolean {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return false;\n }\n return (\n typeof (payload as { agentSessionId?: unknown }).agentSessionId ===\n \"string\" &&\n (payload as { agentSessionId: string }).agentSessionId.trim().length > 0\n );\n}\n\nimport {\n agentGuiWorkbenchDefaultNodeFrame,\n agentGuiWorkbenchNewWindowCascadeOffset,\n agentGuiWorkbenchProviderRailWidthPx,\n buildAgentGuiDockEntries,\n createAgentGuiWorkbenchPreviewContent,\n isAgentGuiWorkbenchCompactVisibleFrame,\n providerFromState,\n providerTargetLaunchPayloadFromRequest,\n resolveAgentGuiWorkbenchLaunchPayload,\n resolveAgentGuiWorkbenchContributionCopy,\n resolveAgentGuiWorkbenchDefaultLaunchFrame\n} from \"./contributionDock.tsx\";\nimport type { AgentGuiWorkbenchProviderAvailability } from \"./contributionDock.tsx\";\nexport {\n agentGuiWorkbenchCompactVisibleAreaRatio,\n agentGuiWorkbenchDefaultCopy,\n agentGuiWorkbenchDefaultNodeFrame,\n agentGuiWorkbenchDefaultUsableHeightRatio,\n agentGuiWorkbenchDefaultUsableWidthRatio,\n agentGuiWorkbenchNewWindowCascadeOffset,\n agentGuiWorkbenchProviderRailWidthPx,\n buildAgentGuiDockEntries,\n resolveAgentGuiUnifiedDockLaunchPayload,\n resolveAgentGuiWorkbenchContributionCopy,\n resolveAgentGuiWorkbenchDefaultLaunchFrame\n} from \"./contributionDock.tsx\";\nexport type {\n AgentGuiWorkbenchProviderAvailability,\n BuildAgentGuiDockEntriesInput\n} from \"./contributionDock.tsx\";\n","function clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\n// Keep aligned with the issue manager task-list rail dimensions.\nexport const AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX = 280;\nexport const AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX = 248;\nexport const AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX = 520;\nexport const AGENT_GUI_DETAIL_MIN_WIDTH_PX = 220;\nexport const AGENT_GUI_HOME_COMPOSER_MIN_WIDTH_PX = 320;\nexport const AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX = 10;\nexport const AGENT_GUI_COLLAPSED_MIN_WIDTH_PX = 460;\nexport const AGENT_GUI_EXPANDED_MIN_WIDTH_PX =\n AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX +\n AGENT_GUI_DETAIL_MIN_WIDTH_PX +\n AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX;\nexport const AGENT_GUI_AUTO_COLLAPSE_WIDTH_PX = 610;\n// The standalone agent window keeps the conversation rail visible until the\n// home composer reaches its actual minimum width. Include the provider rail in\n// this host-specific threshold: 248px conversation rail + 320px composer +\n// 10px resize handle + 52px provider rail = 630px.\nexport const AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX =\n AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX +\n AGENT_GUI_HOME_COMPOSER_MIN_WIDTH_PX +\n AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX +\n 52;\nexport const AGENT_GUI_EXPANDED_TARGET_WIDTH_PX = 800;\n\nexport interface AgentGUIExpandedWindowFrameInput {\n position: { x: number; y: number };\n width: number;\n height: number;\n desktopSize: { width: number; height: number };\n conversationRailWidthPx: number | null | undefined;\n}\n\nexport function shouldAutoCollapseAgentGUIConversationRail(\n containerWidthPx: number,\n autoCollapseWidthPx: number = AGENT_GUI_AUTO_COLLAPSE_WIDTH_PX\n): boolean {\n return (\n Number.isFinite(containerWidthPx) &&\n containerWidthPx > 0 &&\n containerWidthPx <= autoCollapseWidthPx\n );\n}\n\nexport function resolveAgentGUIConversationRailMaxWidthPx(\n containerWidthPx: number\n): number {\n const safeContainerWidth =\n Number.isFinite(containerWidthPx) && containerWidthPx > 0\n ? containerWidthPx\n : AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX +\n AGENT_GUI_DETAIL_MIN_WIDTH_PX +\n AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX;\n\n return Math.max(\n AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,\n Math.min(\n AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX,\n safeContainerWidth -\n AGENT_GUI_DETAIL_MIN_WIDTH_PX -\n AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX\n )\n );\n}\n\nexport function clampAgentGUIConversationRailWidthPx(\n widthPx: number | null | undefined,\n containerWidthPx: number\n): number {\n const preferredWidthPx =\n typeof widthPx === \"number\" && Number.isFinite(widthPx)\n ? Math.round(widthPx)\n : null;\n\n return clamp(\n preferredWidthPx ?? AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX,\n AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,\n resolveAgentGUIConversationRailMaxWidthPx(containerWidthPx)\n );\n}\n\nexport function resolveNextAgentGUIConversationRailWidthPx(input: {\n currentWidthPx: number | null | undefined;\n requestedWidthPx: number;\n containerWidthPx: number;\n}): number | null {\n const nextWidthPx = clampAgentGUIConversationRailWidthPx(\n input.requestedWidthPx,\n input.containerWidthPx\n );\n if (input.currentWidthPx === nextWidthPx) {\n return input.currentWidthPx;\n }\n\n if (input.currentWidthPx === null || input.currentWidthPx === undefined) {\n const defaultWidthPx = clampAgentGUIConversationRailWidthPx(\n null,\n input.containerWidthPx\n );\n if (nextWidthPx === defaultWidthPx) {\n return null;\n }\n }\n\n return nextWidthPx;\n}\n\nexport function resolveAgentGUIExpandedWindowFrame(\n input: AgentGUIExpandedWindowFrameInput\n): {\n position: { x: number; y: number };\n size: { width: number; height: number };\n} {\n const desiredRailWidthPx = clampAgentGUIConversationRailWidthPx(\n input.conversationRailWidthPx,\n AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX +\n AGENT_GUI_DETAIL_MIN_WIDTH_PX +\n AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX\n );\n const desiredWidthPx = Math.max(\n Math.round(input.width),\n desiredRailWidthPx +\n AGENT_GUI_DETAIL_MIN_WIDTH_PX +\n AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX,\n AGENT_GUI_EXPANDED_MIN_WIDTH_PX,\n AGENT_GUI_EXPANDED_TARGET_WIDTH_PX\n );\n const desktopWidthPx =\n Number.isFinite(input.desktopSize.width) && input.desktopSize.width > 0\n ? Math.round(input.desktopSize.width)\n : desiredWidthPx;\n const nextWidthPx = Math.min(desiredWidthPx, desktopWidthPx);\n const maxX = Math.max(0, desktopWidthPx - nextWidthPx);\n const nextX = clamp(Math.round(input.position.x), 0, maxX);\n\n return {\n position: {\n x: nextX,\n y: input.position.y\n },\n size: {\n width: nextWidthPx,\n height: input.height\n }\n };\n}\n","import { useMemo, type ReactNode } from \"react\";\nimport type { AgentSessionEngine } from \"@tutti-os/agent-activity-core\";\nimport type {\n AgentGUIAgentDirectoryPort,\n AgentGUIAgentDirectorySnapshot\n} from \"../types.ts\";\nimport { useEngineSelector } from \"../shared/engine/useEngineSelector.ts\";\nimport {\n agentGuiWorkbenchConversationIdentitiesEqual,\n resolveAgentGuiWorkbenchConversationIdentity\n} from \"./conversationIdentity.ts\";\nimport {\n AgentGuiWorkbenchHeader,\n type AgentGuiWorkbenchHeaderProps\n} from \"./header.ts\";\nimport type {\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState\n} from \"./types.ts\";\n\ninterface AgentGuiWorkbenchReactiveHeaderProps extends Omit<\n AgentGuiWorkbenchHeaderProps,\n | \"agentTitle\"\n | \"conversationIconUrl\"\n | \"conversationTitle\"\n | \"conversationTitleDisplayPrompt\"\n | \"hasConversation\"\n> {\n agentDirectory: AgentGUIAgentDirectoryPort;\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n sessionEngine: AgentSessionEngine;\n workbenchState: AgentGuiWorkbenchState | null;\n}\n\nexport function AgentGuiWorkbenchReactiveHeader({\n agentDirectory,\n dockIconUrls,\n sessionEngine,\n workbenchState,\n ...headerProps\n}: AgentGuiWorkbenchReactiveHeaderProps): ReactNode {\n const directoryStore = useMemo(\n () => ({\n getSnapshot: () => agentDirectory.getSnapshot(),\n subscribe: (\n listener: (snapshot: AgentGUIAgentDirectorySnapshot) => void\n ) =>\n agentDirectory.subscribe(() => {\n listener(agentDirectory.getSnapshot());\n })\n }),\n [agentDirectory]\n );\n const agents = useEngineSelector(\n directoryStore,\n (snapshot) => snapshot.agents,\n Object.is\n );\n const conversationIdentity = useEngineSelector(\n sessionEngine,\n (engineState) =>\n resolveAgentGuiWorkbenchConversationIdentity({\n agents,\n dockIconUrls,\n engineState,\n workbenchState\n }),\n agentGuiWorkbenchConversationIdentitiesEqual\n );\n\n return (\n <AgentGuiWorkbenchHeader\n {...headerProps}\n agentTitle={conversationIdentity?.agentTitle}\n conversationIconUrl={\n conversationIdentity?.iconUrl ?? headerProps.conversationIconFallbackUrl\n }\n conversationTitle={conversationIdentity?.title}\n conversationTitleDisplayPrompt={conversationIdentity?.titleDisplayPrompt}\n hasConversation={Boolean(\n workbenchState?.lastActiveAgentSessionId?.trim()\n )}\n />\n );\n}\n","import {\n isPendingActivationViable,\n selectLatestActivationForSession,\n selectSessionMessages,\n selectWorkspaceAgentConsumerSession,\n type AgentActivityMessage,\n type AgentPromptContentBlock,\n type AgentSessionEngineState\n} from \"@tutti-os/agent-activity-core\";\nimport { resolveAgentGuiSessionProviderIconUrl } from \"../agentGuiSessionProviderIconUrls.ts\";\nimport {\n resolveAgentGUIConversationBrowserFreeTitle,\n resolveAgentGUIConversationTitleDisplayPrompt\n} from \"../shared/agentConversationTitleProjection.ts\";\nimport type { AgentGUIAgent } from \"../types.ts\";\nimport { isAgentGuiWorkbenchProvider } from \"./providerCatalog.ts\";\nimport {\n resolveAgentGuiWorkbenchHeaderTitle,\n resolveAgentGuiWorkbenchSessionTitle\n} from \"./sessionTitle.ts\";\nimport type {\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState\n} from \"./types.ts\";\n\nexport interface AgentGuiWorkbenchConversationIdentity {\n agentTitle?: string | null;\n iconUrl?: string | null;\n title: string | null;\n titleDisplayPrompt?: string | null;\n}\n\nexport function resolveAgentGuiWorkbenchConversationIdentity(input: {\n agents: readonly AgentGUIAgent[];\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n engineState: AgentSessionEngineState;\n workbenchState: AgentGuiWorkbenchState | null;\n}): AgentGuiWorkbenchConversationIdentity | null {\n const agentSessionId =\n input.workbenchState?.lastActiveAgentSessionId?.trim() ?? \"\";\n if (!agentSessionId) {\n return null;\n }\n\n const session = selectWorkspaceAgentConsumerSession(\n input.engineState,\n agentSessionId\n )?.session;\n const activation = selectLatestActivationForSession(\n input.engineState,\n agentSessionId\n );\n const optimisticTitle =\n activation?.mode === \"new\" && isPendingActivationViable(activation)\n ? activation.optimisticTitle\n : null;\n const agentTargetId =\n session?.agentTargetId ?? input.workbenchState?.agentTargetId ?? null;\n const agent = agentTargetId\n ? (input.agents.find(\n (candidate) => candidate.agentTargetId === agentTargetId\n ) ?? null)\n : null;\n const provider = session?.provider ?? agent?.provider ?? null;\n const resolvedTitle = resolveAgentGuiWorkbenchSessionTitle({\n agentSessionId,\n fallbackTitle: null,\n optimisticTitle,\n session\n });\n const canonicalTitle = resolvedTitle.title;\n const messages = selectSessionMessages(input.engineState, agentSessionId);\n const titleDisplayPrompt = resolveAgentGuiWorkbenchTitleDisplayPrompt({\n activation,\n allowEmptyTitle: resolvedTitle.source === \"optimistic\",\n messages,\n title: canonicalTitle\n });\n // Keep browser context canonical in the message while omitting its tag from the visible header title.\n const title = resolveAgentGUIConversationBrowserFreeTitle({\n activation,\n allowEmptyTitle: resolvedTitle.source === \"optimistic\",\n messages,\n title: canonicalTitle\n });\n const agentTitle = resolveAgentGuiWorkbenchHeaderTitle({\n agentName: agent?.name,\n conversationTitle: title,\n provider\n });\n const iconUrl =\n agent?.iconUrl ??\n resolveAgentGuiSessionProviderIconUrl(provider ?? undefined) ??\n (isAgentGuiWorkbenchProvider(provider)\n ? (input.dockIconUrls?.[provider] ?? null)\n : null);\n\n return {\n agentTitle,\n iconUrl,\n title,\n titleDisplayPrompt\n };\n}\n\nexport function resolveAgentGuiWorkbenchTitleDisplayPrompt(input: {\n activation?: {\n content: readonly AgentPromptContentBlock[];\n displayPrompt?: string;\n mode: \"existing\" | \"new\";\n status: import(\"@tutti-os/agent-activity-core\").PendingActivationStatus;\n } | null;\n allowEmptyTitle?: boolean;\n messages: readonly AgentActivityMessage[];\n title: string | null;\n}): string | null {\n return resolveAgentGUIConversationTitleDisplayPrompt(input);\n}\n\nexport function agentGuiWorkbenchConversationIdentitiesEqual(\n left: AgentGuiWorkbenchConversationIdentity | null,\n right: AgentGuiWorkbenchConversationIdentity | null\n): boolean {\n return (\n left === right ||\n (left !== null &&\n right !== null &&\n left.agentTitle === right.agentTitle &&\n left.iconUrl === right.iconUrl &&\n left.title === right.title &&\n left.titleDisplayPrompt === right.titleDisplayPrompt)\n );\n}\n","import {\n claudeCodeFlatFilledIconUrl,\n codexFlatFilledIconUrl,\n cursorFlatFilledIconUrl,\n opencodeFlatFilledIconUrl,\n resolveProviderIconAsset,\n tuttiFlatFilledIconUrl\n} from \"./providerIconAssets.ts\";\nimport { resolveAgentGUIProviderCatalogIdentity } from \"./providerIdentityCatalog.ts\";\nimport { cursorColorfulUrl } from \"./managedAgentIconAssets.ts\";\nimport { normalizeManagedAgentProvider } from \"./shared/managedAgentProviders\";\n\nexport {\n claudeCodeFlatFilledIconUrl,\n codexFlatFilledIconUrl,\n cursorColorfulUrl,\n cursorFlatFilledIconUrl,\n opencodeFlatFilledIconUrl,\n tuttiFlatFilledIconUrl\n};\n\n/**\n * Colorful session icons, used where the icon renders as a real <img> avatar\n * (collapsed workbench header, dock popup). Colorful assets keep their fill.\n */\nexport function resolveAgentGuiSessionProviderIconUrl(\n provider: string | undefined\n): string | null {\n const identity = resolveAgentGUIProviderCatalogIdentity(\n normalizeManagedAgentProvider(provider)\n );\n return resolveProviderIconAsset(identity?.iconKey, \"sessionColorful\");\n}\n\n/**\n * Flat monochrome session icons, used where the icon renders through a CSS\n * mask (e.g. the conversation rail rows). Colorful assets would collapse to a\n * solid square under a mask, so these must be single-color glyphs with a\n * transparent background.\n */\nexport function resolveAgentGuiSessionProviderFlatIconUrl(\n provider: string | undefined\n): string | null {\n const identity = resolveAgentGUIProviderCatalogIdentity(\n normalizeManagedAgentProvider(provider)\n );\n return resolveProviderIconAsset(identity?.iconKey, \"sessionFlat\");\n}\n","import {\n createElement,\n lazy,\n Suspense,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode\n} from \"react\";\nimport type {\n WorkbenchDisplayMode,\n WorkbenchHostNodeHeaderWindowActions\n} from \"@tutti-os/workbench-surface\";\nimport {\n Button,\n PanelIcon,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n cn\n} from \"@tutti-os/ui-system\";\nimport { CreateChatIcon } from \"@tutti-os/ui-system/icons\";\nimport openLinkLinedIconUrl from \"../app/renderer/assets/icons/open-link-lined.svg\";\nimport { useAgentGuiWorkbenchBodyRenderError } from \"./bodyRenderErrorRegistry.ts\";\n\nconst LazyAgentRichTextReadonly = lazy(() =>\n import(\"../shared/AgentRichTextReadonly.tsx\").then((module) => ({\n default: module.AgentRichTextReadonly\n }))\n);\n\nconst headerChromeIconButtonClassName =\n \"agent-gui-workbench-header__icon-button\";\n\nconst conversationRailToggleButtonClassName =\n \"agent-gui-workbench-header__icon-button agent-gui-workbench-header__rail-toggle\";\n\nconst detachedWindowButtonClassName =\n \"agent-gui-workbench-header__icon-button agent-gui-workbench-header__detached-window\";\n\nconst headerChromeIconClassName = \"agent-gui-workbench-header__icon\";\n\nexport interface AgentGuiWorkbenchHeaderCopy {\n collapseConversationRail: string;\n close?: string;\n expandConversationRail: string;\n fallbackAgentLabel: string;\n maximize?: string;\n minimize?: string;\n newConversation: string;\n openDetachedWindow?: string;\n restore?: string;\n untitledConversation?: string;\n}\n\nexport interface AgentGuiWorkbenchHeaderProps extends HTMLAttributes<HTMLElement> {\n copy: AgentGuiWorkbenchHeaderCopy;\n agentTitle?: string | null;\n defaultActions?: ReactNode;\n displayMode?: WorkbenchDisplayMode;\n isConversationRailAutoCollapsed: boolean;\n isConversationRailCollapsed: boolean;\n conversationRailWidthPx?: number | null;\n conversationIconUrl?: string | null;\n conversationIconFallbackUrl?: string | null;\n hasConversation?: boolean;\n providerRailWidthPx?: number | null;\n primaryAccessory?: ReactNode;\n secondaryAccessory?: ReactNode;\n conversationTitle?: string | null;\n conversationTitleDisplayPrompt?: string | null;\n nodeId: string;\n onCreateConversation?: () => void;\n onOpenDetachedWindow?: () => void;\n onToggleConversationRail: (nextCollapsed: boolean) => void;\n showAppTitle?: boolean;\n showConversationRailToggle?: boolean;\n showWindowControls?: boolean;\n title?: string;\n windowActions?: Pick<\n WorkbenchHostNodeHeaderWindowActions,\n \"close\" | \"minimize\" | \"toggleDisplayMode\"\n >;\n}\n\nexport function AgentGuiWorkbenchHeader({\n className,\n copy,\n agentTitle,\n defaultActions: _defaultActions,\n displayMode,\n isConversationRailAutoCollapsed,\n isConversationRailCollapsed,\n conversationRailWidthPx,\n conversationIconUrl,\n conversationIconFallbackUrl,\n hasConversation = false,\n providerRailWidthPx,\n primaryAccessory,\n secondaryAccessory,\n conversationTitle,\n conversationTitleDisplayPrompt,\n nodeId,\n onCreateConversation,\n onOpenDetachedWindow,\n onToggleConversationRail,\n showAppTitle = true,\n showConversationRailToggle = true,\n showWindowControls = true,\n title: _title,\n windowActions,\n ...headerProps\n}: AgentGuiWorkbenchHeaderProps): ReactNode {\n const hasBodyRenderError = useAgentGuiWorkbenchBodyRenderError(nodeId);\n const toggleLabel = isConversationRailCollapsed\n ? copy.expandConversationRail\n : copy.collapseConversationRail;\n const appTitle = _title?.trim() || copy.fallbackAgentLabel;\n const sessionTitle = hasBodyRenderError\n ? \"\"\n : conversationTitle?.trim() ||\n (hasConversation ? copy.untitledConversation?.trim() : \"\") ||\n \"\";\n const sessionTitleDisplayPrompt = hasBodyRenderError\n ? \"\"\n : conversationTitleDisplayPrompt?.trim() || \"\";\n const collapsedTitle = sessionTitle || agentTitle?.trim() || \"\";\n const sessionIconUrl = conversationIconUrl?.trim() || \"\";\n const sessionIconFallbackUrl = conversationIconFallbackUrl?.trim() || \"\";\n const hasExpandedIdentity = Boolean(\n collapsedTitle || sessionIconUrl || sessionIconFallbackUrl\n );\n const safeDisplayMode = displayMode ?? \"floating\";\n const safeWindowActions = windowActions ?? {\n close: () => undefined,\n minimize: () => undefined,\n toggleDisplayMode: () => undefined\n };\n const displayModeLabel =\n safeDisplayMode === \"fullscreen\"\n ? (copy.restore ?? \"Restore\")\n : (copy.maximize ?? \"Maximize\");\n const headerStyle = {\n ...(headerProps.style ?? {}),\n ...(typeof conversationRailWidthPx === \"number\" &&\n Number.isFinite(conversationRailWidthPx)\n ? {\n \"--agent-gui-workbench-header-rail-width\": `${Math.round(\n conversationRailWidthPx +\n (typeof providerRailWidthPx === \"number\" &&\n Number.isFinite(providerRailWidthPx)\n ? providerRailWidthPx\n : 0)\n )}px`\n }\n : {})\n } as CSSProperties;\n\n return createElement(\n \"header\",\n {\n ...headerProps,\n className: cn(\"agent-gui-workbench-header\", className),\n \"data-agent-gui-workbench-header\": \"true\",\n \"data-agent-gui-workbench-header-collapsed\": isConversationRailCollapsed\n ? \"true\"\n : \"false\",\n \"data-agent-gui-workbench-header-has-session\": sessionTitle\n ? \"true\"\n : \"false\",\n style: headerStyle\n },\n createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__primary\",\n \"data-agent-gui-workbench-header-primary\": \"true\"\n },\n showWindowControls\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__traffic-lights\",\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createTrafficLightButton({\n label: copy.close ?? \"Close\",\n onClick: safeWindowActions.close,\n testId: \"agent-gui-window-close\",\n tone: \"close\"\n }),\n createTrafficLightButton({\n label: copy.minimize ?? \"Minimize\",\n onClick: safeWindowActions.minimize,\n testId: \"agent-gui-window-minimize\",\n tone: \"minimize\"\n }),\n createTrafficLightButton({\n label: displayModeLabel,\n onClick: safeWindowActions.toggleDisplayMode,\n pressed: safeDisplayMode === \"fullscreen\",\n testId: \"agent-gui-window-toggle-display-mode\",\n tone: \"maximize\"\n })\n )\n : null,\n showAppTitle && !isConversationRailCollapsed\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__agent-brand\"\n },\n createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-header__agent-name\"\n },\n appTitle\n )\n )\n : null,\n primaryAccessory\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__primary-accessory\"\n },\n primaryAccessory\n )\n : null,\n onOpenDetachedWindow && !hasBodyRenderError\n ? createDetachedWindowButton({\n label: copy.openDetachedWindow ?? \"Open in detached window\",\n onOpenDetachedWindow\n })\n : null,\n showConversationRailToggle\n ? createConversationRailToggleButton({\n isAutoCollapsed: isConversationRailAutoCollapsed,\n isCollapsed: isConversationRailCollapsed,\n label: toggleLabel,\n onToggleConversationRail\n })\n : null,\n isConversationRailCollapsed && onCreateConversation\n ? createNewConversationButton({\n label: copy.newConversation,\n onCreateConversation\n })\n : null,\n isConversationRailCollapsed && collapsedTitle\n ? createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-header__session-title\"\n },\n createSessionHeaderIconSlot({\n fallbackSrc: sessionIconFallbackUrl,\n src: sessionIconUrl,\n testId: \"agent-gui-window-session-icon\"\n }),\n createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-header__title-text\"\n },\n collapsedTitle\n )\n )\n : null,\n isConversationRailCollapsed && secondaryAccessory\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__secondary-accessory\"\n },\n secondaryAccessory\n )\n : null\n ),\n !isConversationRailCollapsed && (hasExpandedIdentity || secondaryAccessory)\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__detail\"\n },\n hasExpandedIdentity\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__detail-title\",\n \"data-testid\": \"agent-gui-window-detail-title\"\n },\n createSessionHeaderIconSlot({\n fallbackSrc: sessionIconFallbackUrl,\n src: sessionIconUrl,\n testId: \"agent-gui-window-detail-title-icon\"\n }),\n sessionTitleDisplayPrompt\n ? createElement(\n Suspense,\n {\n fallback: createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-header__title-text\"\n },\n sessionTitle\n )\n },\n createElement(LazyAgentRichTextReadonly, {\n className:\n \"agent-gui-workbench-header__title-text agent-gui-workbench-header__rich-title\",\n editorClassName:\n \"agent-gui-workbench-header__rich-title-editor\",\n value: sessionTitleDisplayPrompt\n })\n )\n : sessionTitle\n ? createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-header__title-text\"\n },\n sessionTitle\n )\n : null\n )\n : null,\n secondaryAccessory\n ? createElement(\n \"div\",\n {\n className: \"agent-gui-workbench-header__secondary-accessory\"\n },\n secondaryAccessory\n )\n : null\n )\n : null\n );\n}\n\nfunction createConversationRailToggleButton({\n isAutoCollapsed,\n isCollapsed,\n label,\n onToggleConversationRail\n}: {\n isAutoCollapsed: boolean;\n isCollapsed: boolean;\n label: string;\n onToggleConversationRail: (nextCollapsed: boolean) => void;\n}): ReactNode {\n const button = createElement(\n Button as never,\n {\n \"aria-label\": label,\n className: conversationRailToggleButtonClassName,\n \"data-agent-gui-conversation-rail-auto-collapsed\": isAutoCollapsed\n ? \"true\"\n : undefined,\n \"data-agent-gui-conversation-rail-collapsed\": isCollapsed\n ? \"true\"\n : undefined,\n \"data-testid\": \"agent-gui-toggle-conversation-rail\",\n size: \"icon-sm\",\n type: \"button\",\n variant: \"ghost\",\n onClick: (event) => {\n event.stopPropagation();\n onToggleConversationRail(!isCollapsed);\n },\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createElement(PanelIcon, { className: headerChromeIconClassName })\n );\n\n return createElement(TooltipProvider, {\n children: createElement(\n Tooltip,\n null,\n createElement(TooltipTrigger, { asChild: true }, button),\n createElement(TooltipContent, { side: \"bottom\" }, label)\n ),\n delayDuration: 250,\n skipDelayDuration: 0\n });\n}\n\nfunction createDetachedWindowButton({\n label,\n onOpenDetachedWindow\n}: {\n label: string;\n onOpenDetachedWindow: () => void;\n}): ReactNode {\n const button = createElement(\n Button as never,\n {\n \"aria-label\": label,\n className: detachedWindowButtonClassName,\n \"data-testid\": \"agent-gui-open-detached-window\",\n size: \"icon-sm\",\n type: \"button\",\n variant: \"ghost\",\n onClick: (event) => {\n event.stopPropagation();\n onOpenDetachedWindow();\n },\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createElement(\"span\", {\n \"aria-hidden\": true,\n className: headerChromeIconClassName,\n \"data-agent-gui-icon\": \"open-link-lined\",\n style: {\n backgroundColor: \"currentColor\",\n display: \"block\",\n WebkitMaskImage: `url(\"${openLinkLinedIconUrl}\")`,\n WebkitMaskPosition: \"center\",\n WebkitMaskRepeat: \"no-repeat\",\n WebkitMaskSize: \"contain\",\n maskImage: `url(\"${openLinkLinedIconUrl}\")`,\n maskPosition: \"center\",\n maskRepeat: \"no-repeat\",\n maskSize: \"contain\"\n }\n })\n );\n\n return createElement(TooltipProvider, {\n children: createElement(\n Tooltip,\n null,\n createElement(TooltipTrigger, { asChild: true }, button),\n createElement(TooltipContent, { side: \"bottom\" }, label)\n ),\n delayDuration: 250,\n skipDelayDuration: 0\n });\n}\n\nfunction createNewConversationButton({\n label,\n onCreateConversation\n}: {\n label: string;\n onCreateConversation: () => void;\n}): ReactNode {\n const button = createElement(\n Button as never,\n {\n \"aria-label\": label,\n className: headerChromeIconButtonClassName,\n size: \"icon-sm\",\n type: \"button\",\n variant: \"ghost\",\n onClick: (event) => {\n event.stopPropagation();\n onCreateConversation();\n },\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createElement(CreateChatIcon, {\n \"aria-hidden\": true,\n className: headerChromeIconClassName\n })\n );\n\n return createElement(TooltipProvider, {\n children: createElement(\n Tooltip,\n null,\n createElement(TooltipTrigger, { asChild: true }, button),\n createElement(TooltipContent, { side: \"bottom\" }, label)\n ),\n delayDuration: 250,\n skipDelayDuration: 0\n });\n}\n\nfunction createSessionHeaderIconSlot({\n src,\n fallbackSrc,\n testId\n}: {\n src: string;\n fallbackSrc: string;\n testId: string;\n}): ReactNode {\n // While the session's provider is still resolving (e.g. a freshly created\n // session) there is no icon URL yet. Render a neutral skeleton block rather\n // than flashing a wrong/default provider icon; it is replaced once the real\n // icon arrives.\n if (!src) {\n return createElement(\"span\", {\n \"aria-hidden\": \"true\",\n className:\n \"agent-gui-workbench-header__session-icon agent-gui-workbench-header__session-icon--pending\",\n \"data-testid\": `${testId}-pending`\n });\n }\n return createElement(SessionHeaderIcon, {\n key: `${src}::${fallbackSrc}`,\n fallbackSrc,\n src,\n testId\n });\n}\n\nfunction SessionHeaderIcon({\n src,\n fallbackSrc,\n testId\n}: {\n src: string;\n fallbackSrc?: string;\n testId: string;\n}): ReactNode {\n const [useFallback, setUseFallback] = useState(false);\n const [hidden, setHidden] = useState(false);\n\n const hasFallback = Boolean(fallbackSrc) && fallbackSrc !== src;\n const effectiveSrc = useFallback && fallbackSrc ? fallbackSrc : src;\n\n if (hidden) {\n return null;\n }\n\n return createElement(\"img\", {\n alt: \"\",\n className: \"agent-gui-workbench-header__session-icon\",\n \"data-testid\": testId,\n draggable: false,\n src: effectiveSrc,\n onError: () => {\n // On load failure, fall back to the bundled provider icon once; if that\n // also fails (or there is none), hide the img so the browser's broken\n // image glyph never shows.\n if (!useFallback && hasFallback) {\n setUseFallback(true);\n } else {\n setHidden(true);\n }\n }\n });\n}\n\nfunction createTrafficLightButton(input: {\n label: string;\n onClick: () => void;\n pressed?: boolean;\n testId: string;\n tone: \"close\" | \"minimize\" | \"maximize\";\n}): ReactNode {\n const iconName =\n input.tone === \"maximize\"\n ? input.pressed\n ? \"unfullscreen\"\n : \"fullscreen\"\n : input.tone;\n return createElement(\n \"button\",\n {\n \"aria-label\": input.label,\n \"aria-pressed\": input.pressed,\n className: \"agent-gui-workbench-header__traffic-light\",\n \"data-agent-gui-workbench-traffic-light\": input.tone,\n \"data-testid\": input.testId,\n type: \"button\",\n onClick: (event) => {\n event.stopPropagation();\n input.onClick();\n },\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createElement(TrafficLightIcon, {\n \"aria-hidden\": true,\n className: \"agent-gui-workbench-header__traffic-light-icon\",\n \"data-agent-gui-workbench-traffic-light-icon\": iconName,\n iconName\n })\n );\n}\n\nfunction TrafficLightIcon({\n className,\n iconName,\n ...props\n}: {\n className: string;\n iconName: \"close\" | \"fullscreen\" | \"minimize\" | \"unfullscreen\";\n \"aria-hidden\": true;\n \"data-agent-gui-workbench-traffic-light-icon\": string;\n}): ReactNode {\n return createElement(\n \"svg\",\n {\n ...props,\n className,\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n },\n createElement(\"path\", { d: trafficLightIconPathByName[iconName] })\n );\n}\n\nconst trafficLightIconPathByName = {\n close:\n \"M16.9395 4.93953C17.5253 4.35374 18.4748 4.35374 19.0606 4.93953C19.6463 5.52532 19.6464 6.47486 19.0606 7.06062L14.1212 12.0001L19.0606 16.9395C19.6463 17.5253 19.6464 18.4749 19.0606 19.0606C18.4749 19.6464 17.5253 19.6463 16.9395 19.0606L12.0001 14.1212L7.06062 19.0606C6.47486 19.6464 5.52532 19.6463 4.93953 19.0606C4.35374 18.4748 4.35374 17.5253 4.93953 16.9395L9.87898 12.0001L4.93953 7.06062C4.35374 6.47484 4.35374 5.52532 4.93953 4.93953C5.52532 4.35374 6.47484 4.35374 7.06062 4.93953L12.0001 9.87898L16.9395 4.93953Z\",\n fullscreen:\n \"M18.1465 7.85352C18.4615 7.53861 18.9999 7.76165 19 8.20703V18.5C19 18.7761 18.7761 19 18.5 19H8.20703C7.76165 18.9999 7.53861 18.4615 7.85352 18.1465L18.1465 7.85352ZM15.793 5C16.2384 5.00006 16.4614 5.53855 16.1465 5.85352L5.85352 16.1465C5.53855 16.4614 5.00006 16.2384 5 15.793V5.5C5 5.22386 5.22386 5 5.5 5H15.793Z\",\n minimize:\n \"M5 10.5H19C19.8284 10.5 20.5 11.1716 20.5 12C20.5 12.8284 19.8284 13.5 19 13.5H5C4.17157 13.5 3.5 12.8284 3.5 12C3.5 11.1716 4.17157 10.5 5 10.5Z\",\n unfullscreen:\n \"M20.793 12C21.2384 12.0001 21.4614 12.5386 21.1465 12.8536L12.8536 21.1465C12.5386 21.4614 12.0001 21.2384 12.0001 20.793V12.5C12.0001 12.2239 12.2239 12 12.5001 12H20.793ZM11.1465 2.85356C11.4615 2.53864 12 2.76166 12.0001 3.20708V11.5C12 11.7761 11.7762 12 11.5001 12H3.20708C2.76166 12 2.53864 11.4615 2.85357 11.1465L11.1465 2.85356Z\"\n} as const;\n","import { useSyncExternalStore } from \"react\";\n\nconst listenersByNodeId = new Map<string, Set<() => void>>();\nconst errorNodeIds = new Set<string>();\n\nexport function setAgentGuiWorkbenchBodyRenderError(\n nodeId: string,\n hasError: boolean\n): void {\n const hadError = errorNodeIds.has(nodeId);\n if (hadError === hasError) {\n return;\n }\n if (hasError) {\n errorNodeIds.add(nodeId);\n } else {\n errorNodeIds.delete(nodeId);\n }\n for (const listener of listenersByNodeId.get(nodeId) ?? []) {\n listener();\n }\n}\n\nfunction subscribeAgentGuiWorkbenchBodyRenderError(\n nodeId: string,\n listener: () => void\n): () => void {\n let listeners = listenersByNodeId.get(nodeId);\n if (!listeners) {\n listeners = new Set();\n listenersByNodeId.set(nodeId, listeners);\n }\n listeners.add(listener);\n return () => {\n listeners?.delete(listener);\n if (listeners?.size === 0) {\n listenersByNodeId.delete(nodeId);\n }\n };\n}\n\nfunction getAgentGuiWorkbenchBodyRenderErrorSnapshot(nodeId: string): boolean {\n return errorNodeIds.has(nodeId);\n}\n\nexport function useAgentGuiWorkbenchBodyRenderError(nodeId: string): boolean {\n return useSyncExternalStore(\n (listener) => subscribeAgentGuiWorkbenchBodyRenderError(nodeId, listener),\n () => getAgentGuiWorkbenchBodyRenderErrorSnapshot(nodeId)\n );\n}\n","import { createElement, type ReactNode } from \"react\";\nimport {\n getWorkbenchLayoutFrame,\n type WorkbenchDockPreviewContent,\n type WorkbenchFrame,\n type WorkbenchHostDockEntry,\n type WorkbenchHostDockPopupItemInput,\n type WorkbenchHostLaunchRequest,\n type WorkbenchHostNodeBodyContext\n} from \"@tutti-os/workbench-surface\";\nimport { agentGuiDockIconUrls } from \"../dockIcons.ts\";\nimport {\n agentGuiWorkbenchDockIdentityFromIdentifier,\n agentGuiWorkbenchTypeId,\n agentGuiWorkbenchUnifiedDockEntryId\n} from \"./launch.ts\";\nimport { normalizeAgentGuiWorkbenchState } from \"./state.ts\";\nimport {\n agentGuiWorkbenchDefaultDockProviders,\n isAgentGuiWorkbenchProvider,\n resolveAgentGuiWorkbenchProviderLabel\n} from \"./providerCatalog.ts\";\nimport type {\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState\n} from \"./types.ts\";\nimport {\n normalizeAgentGUIAgents,\n projectAgentGUIAgentsToInternalTargets\n} from \"../agents.ts\";\nimport type {\n AgentGUIAgentDirectoryPort,\n AgentGUIAgentTarget\n} from \"../types.ts\";\nimport type {\n AgentGuiWorkbenchContributionCopy,\n AgentGuiWorkbenchContributionCopyOverrides,\n CreateAgentGuiWorkbenchContributionInput\n} from \"./contribution.ts\";\n\nexport const agentGuiWorkbenchDefaultNodeFrame: WorkbenchFrame = {\n height: 560,\n width: 1040,\n x: 140,\n y: 48\n};\n\nexport const agentGuiWorkbenchDefaultUsableWidthRatio = 0.9;\nexport const agentGuiWorkbenchDefaultUsableHeightRatio = 0.9;\nexport const agentGuiWorkbenchCompactVisibleAreaRatio = 0.9;\nexport const agentGuiWorkbenchNewWindowCascadeOffset = { x: 180, y: 88 };\nexport const agentGuiWorkbenchProviderRailWidthPx = 52;\nconst agentGuiWorkbenchUnifiedDockTileProviders = [\n \"codex\",\n \"claude-code\",\n \"tutti-agent\",\n \"hermes\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\nexport const agentGuiWorkbenchDefaultCopy: AgentGuiWorkbenchContributionCopy = {\n collapseConversationRail: \"Hide sidebar\",\n close: \"Close\",\n expandConversationRail: \"Show sidebar\",\n fallbackAgentLabel: \"Agent\",\n maximize: \"Maximize\",\n minimize: \"Minimize\",\n newConversation: \"New conversation\",\n nodeTitle: \"Agent\",\n openDetachedWindow: \"Open in detached window\",\n restore: \"Restore\",\n untitledConversation: \"Untitled conversation\"\n};\nexport type AgentGuiWorkbenchProviderAvailability = Partial<\n Record<\n AgentGuiWorkbenchProvider,\n | boolean\n | \"available\"\n | \"ready\"\n | \"unavailable\"\n | {\n available?: boolean | null;\n status?: string | null;\n }\n | null\n | undefined\n >\n>;\n\nexport interface BuildAgentGuiDockEntriesInput {\n agentDirectory: AgentGUIAgentDirectoryPort;\n defaultProvider?: AgentGuiWorkbenchProvider | null;\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n label?: string;\n providerAvailability?: AgentGuiWorkbenchProviderAvailability;\n renderPreview?: CreateAgentGuiWorkbenchContributionInput[\"renderPreview\"];\n resolveDockPopupIdentity?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupIdentity\"];\n resolveDockPopupTitle?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupTitle\"];\n sectionId?: string;\n unifiedDockIconUrl?: string;\n}\n\nexport function buildAgentGuiDockEntries(\n input: BuildAgentGuiDockEntriesInput\n): WorkbenchHostDockEntry[] {\n const sectionId = input.sectionId ?? \"agents\";\n const launchPayload = resolveAgentGuiUnifiedDockLaunchPayload(input);\n const provider = launchPayload.provider;\n const unifiedTileIconUrls = resolveAgentGuiUnifiedDockTileIconUrls(\n input.dockIconUrls\n );\n return [\n createAgentGuiWorkbenchDockEntry({\n agentDirectory: input.agentDirectory,\n icon: input.unifiedDockIconUrl\n ? createAgentGuiWorkbenchUnifiedDockIcon({\n iconUrl: input.unifiedDockIconUrl\n })\n : createAgentGuiWorkbenchLaunchpadStyleDockIcon({\n tileIconUrls: unifiedTileIconUrls\n }),\n label: input.label ?? agentGuiWorkbenchDefaultCopy.nodeTitle,\n launchPayload,\n order: 0,\n provider,\n renderPreview: input.renderPreview,\n resolveDockPopupIdentity: input.resolveDockPopupIdentity,\n resolveDockPopupTitle: input.resolveDockPopupTitle,\n sectionId,\n visibility: \"always\"\n })\n ];\n}\n\nexport function resolveAgentGuiUnifiedDockLaunchPayload(\n input: Pick<\n BuildAgentGuiDockEntriesInput,\n \"agentDirectory\" | \"defaultProvider\" | \"providerAvailability\"\n >\n): {\n provider: AgentGuiWorkbenchProvider;\n agentTargetId?: string;\n} {\n const target = resolveUnifiedAgentGuiDockTarget(input);\n if (target) {\n return {\n provider: target.provider,\n agentTargetId: target.agentTargetId ?? target.targetId\n };\n }\n return {\n provider: resolveUnifiedAgentGuiDockProvider(input)\n };\n}\n\nexport function resolveAgentGuiWorkbenchDefaultLaunchFrame(input: {\n frame: WorkbenchFrame;\n request: Pick<\n WorkbenchHostLaunchRequest,\n \"layoutConstraints\" | \"surfaceSize\"\n >;\n}): WorkbenchFrame {\n const layoutFrame = getWorkbenchLayoutFrame(\n input.request.surfaceSize,\n input.request.layoutConstraints\n );\n const defaultHeight = Math.round(\n layoutFrame.height * agentGuiWorkbenchDefaultUsableHeightRatio\n );\n const defaultWidth = Math.round(\n layoutFrame.width * agentGuiWorkbenchDefaultUsableWidthRatio\n );\n\n return {\n ...input.frame,\n height: defaultHeight,\n width: defaultWidth,\n x: Math.round(layoutFrame.x + (layoutFrame.width - defaultWidth) / 2),\n y: Math.round(layoutFrame.y + (layoutFrame.height - defaultHeight) / 2)\n };\n}\n\nexport function isAgentGuiWorkbenchCompactVisibleFrame(\n frame: WorkbenchFrame,\n defaultFrame: WorkbenchFrame\n): boolean {\n return frame.width !== defaultFrame.width || frame.x !== defaultFrame.x;\n}\n\nexport function resolveAgentGuiWorkbenchContributionCopy(\n copy?: AgentGuiWorkbenchContributionCopyOverrides\n): AgentGuiWorkbenchContributionCopy {\n return {\n ...agentGuiWorkbenchDefaultCopy,\n ...copy\n };\n}\n\nfunction createAgentGuiWorkbenchDockEntry(input: {\n agentDirectory: AgentGUIAgentDirectoryPort;\n icon: ReactNode;\n label: string;\n launchPayload?: Record<string, unknown>;\n order: number;\n provider: AgentGuiWorkbenchProvider;\n renderPreview?: CreateAgentGuiWorkbenchContributionInput[\"renderPreview\"];\n resolveDockPopupIdentity?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupIdentity\"];\n resolveDockPopupTitle?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupTitle\"];\n sectionId: string;\n visibility: WorkbenchHostDockEntry[\"visibility\"];\n}): WorkbenchHostDockEntry {\n return {\n icon: input.icon,\n iconSize: \"large\",\n id: agentGuiWorkbenchUnifiedDockEntryId(),\n label: input.label,\n launchBehavior: \"enabled\",\n launchPayload: input.launchPayload ?? { provider: input.provider },\n newWindowLaunchPayload: {\n ...(input.launchPayload ?? { provider: input.provider }),\n openInNewWindow: true\n },\n order: input.order,\n providePopupItemPreview: (item) =>\n input.renderPreview\n ? createAgentGuiWorkbenchPreviewContent({\n agentDirectory: input.agentDirectory,\n item,\n label: input.label,\n provider: input.provider,\n renderPreview: input.renderPreview,\n resolveDockPopupIdentity: input.resolveDockPopupIdentity,\n resolveDockPopupTitle: input.resolveDockPopupTitle\n })\n : null,\n resolvePopupItem: ({ externalNodeState }) => {\n const state = normalizeAgentGuiWorkbenchState(externalNodeState);\n const title =\n input.resolveDockPopupIdentity?.(state)?.title ??\n input.resolveDockPopupTitle?.(state) ??\n null;\n return {\n revision: `${input.provider}\\n${title ?? \"\"}`,\n title\n };\n },\n sectionId: input.sectionId,\n typeId: agentGuiWorkbenchTypeId,\n visibility: input.visibility\n };\n}\n\nfunction resolveAgentGuiUnifiedDockTileIconUrls(\n dockIconUrls: Partial<Record<AgentGuiWorkbenchProvider, string>> | undefined\n): readonly string[] {\n return agentGuiWorkbenchUnifiedDockTileProviders.map((provider) =>\n resolveAgentGuiWorkbenchProviderIconUrl({ dockIconUrls, provider })\n );\n}\n\nexport function resolveAgentGuiWorkbenchProviderIconUrl(input: {\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n provider: AgentGuiWorkbenchProvider;\n}): string {\n return (\n input.dockIconUrls?.[input.provider] ??\n agentGuiDockIconUrls[input.provider] ??\n \"\"\n );\n}\n\nfunction createAgentGuiWorkbenchLaunchpadStyleDockIcon(input: {\n tileIconUrls: readonly string[];\n}): ReactNode {\n return createElement(\n \"span\",\n {\n \"aria-hidden\": \"true\",\n className: \"agent-gui-workbench-dock-icon\"\n },\n input.tileIconUrls.map((src, index) =>\n createElement(\n \"span\",\n {\n className: \"agent-gui-workbench-dock-icon__tile\",\n key: `${src}:${index}`\n },\n createElement(\"img\", {\n alt: \"\",\n draggable: false,\n src\n })\n )\n )\n );\n}\n\nfunction createAgentGuiWorkbenchUnifiedDockIcon(input: {\n iconUrl: string;\n}): ReactNode {\n return createElement(\n \"span\",\n {\n \"aria-hidden\": \"true\",\n className:\n \"agent-gui-workbench-dock-icon agent-gui-workbench-dock-icon--single\"\n },\n createElement(\"img\", {\n alt: \"\",\n draggable: false,\n src: input.iconUrl\n })\n );\n}\n\nexport function providerFromState(\n state: unknown\n): AgentGuiWorkbenchProvider | null {\n if (!state || typeof state !== \"object\") {\n return null;\n }\n const provider = (state as { provider?: unknown }).provider;\n return isAgentGuiWorkbenchProvider(provider) ? provider : null;\n}\n\nexport function providerFromActivation(\n activation: unknown\n): AgentGuiWorkbenchProvider | null {\n if (!activation || typeof activation !== \"object\") {\n return null;\n }\n const payload = (activation as { payload?: unknown }).payload;\n return providerFromState(payload);\n}\n\nexport function resolveAgentGuiWorkbenchLaunchPayload(\n request: WorkbenchHostLaunchRequest,\n input: {\n agentDirectory: AgentGUIAgentDirectoryPort;\n defaultProvider?: AgentGuiWorkbenchProvider | null;\n providerAvailability?: AgentGuiWorkbenchProviderAvailability;\n }\n): unknown | null {\n if (hasAgentSessionId(request.payload)) {\n return request.payload;\n }\n const snapshot = input.agentDirectory.getSnapshot();\n const agents = normalizeAgentGUIAgents(snapshot.agents);\n const payload = isRecord(request.payload) ? request.payload : {};\n const isUnifiedDockLaunch =\n request.reason === \"dock\" &&\n agentGuiWorkbenchDockIdentityFromIdentifier(request.dockEntryId)?.kind ===\n \"unifiedAggregate\";\n const explicitAgentTargetId = isUnifiedDockLaunch\n ? null\n : readTrimmedString(payload.agentTargetId);\n if (explicitAgentTargetId) {\n const explicitAgent = agents.find(\n (agent) =>\n agent.agentTargetId === explicitAgentTargetId &&\n agent.availability.status === \"ready\"\n );\n if (\n !explicitAgent ||\n !isAgentGuiWorkbenchProvider(explicitAgent.provider)\n ) {\n return null;\n }\n return {\n ...payload,\n agentTargetId: explicitAgent.agentTargetId,\n provider: explicitAgent.provider\n };\n }\n const requestedProvider = providerFromState(payload);\n const resolved = resolveAgentGuiUnifiedDockLaunchPayload({\n agentDirectory: input.agentDirectory,\n defaultProvider: requestedProvider ?? input.defaultProvider,\n providerAvailability: input.providerAvailability\n });\n if (!resolved.agentTargetId) {\n return null;\n }\n return { ...payload, ...resolved };\n}\n\nfunction hasAgentSessionId(payload: unknown): boolean {\n if (!isRecord(payload)) {\n return false;\n }\n return readTrimmedString(payload.agentSessionId) !== null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readTrimmedString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction resolveUnifiedAgentGuiDockTarget(\n input: Pick<\n BuildAgentGuiDockEntriesInput,\n \"agentDirectory\" | \"defaultProvider\" | \"providerAvailability\"\n >\n): AgentGUIAgentTarget | null {\n const targets = projectAgentGUIAgentsToInternalTargets(\n normalizeAgentGUIAgents(input.agentDirectory.getSnapshot().agents)\n ).filter(\n (\n target\n ): target is AgentGUIAgentTarget & {\n provider: (typeof agentGuiWorkbenchDefaultDockProviders)[number];\n } =>\n isAgentGuiWorkbenchProvider(target.provider) &&\n isUnifiedAgentGuiDockProvider(target.provider) &&\n target.disabled !== true &&\n isAgentGuiProviderAvailable(target.provider, input.providerAvailability)\n );\n if (\n input.defaultProvider &&\n isUnifiedAgentGuiDockProvider(input.defaultProvider) &&\n isAgentGuiProviderAvailable(\n input.defaultProvider,\n input.providerAvailability\n )\n ) {\n const target = preferredAgentGuiDockTargetForProvider(\n targets,\n input.defaultProvider\n );\n if (target) {\n return target;\n }\n }\n\n return targets[0] ?? null;\n}\n\nfunction resolveUnifiedAgentGuiDockProvider(\n input: Pick<\n BuildAgentGuiDockEntriesInput,\n \"agentDirectory\" | \"defaultProvider\" | \"providerAvailability\"\n >\n): AgentGuiWorkbenchProvider {\n if (\n input.defaultProvider &&\n isUnifiedAgentGuiDockProvider(input.defaultProvider) &&\n isAgentGuiProviderAvailable(\n input.defaultProvider,\n input.providerAvailability\n )\n ) {\n return input.defaultProvider;\n }\n const target = resolveUnifiedAgentGuiDockTarget(input);\n if (target) {\n return target.provider;\n }\n return (\n agentGuiWorkbenchDefaultDockProviders.find((provider) =>\n isAgentGuiProviderAvailable(provider, input.providerAvailability)\n ) ?? \"codex\"\n );\n}\n\nfunction isUnifiedAgentGuiDockProvider(\n provider: AgentGuiWorkbenchProvider\n): provider is (typeof agentGuiWorkbenchDefaultDockProviders)[number] {\n return agentGuiWorkbenchDefaultDockProviders.includes(\n provider as (typeof agentGuiWorkbenchDefaultDockProviders)[number]\n );\n}\n\nfunction preferredAgentGuiDockTargetForProvider(\n targets: readonly AgentGUIAgentTarget[],\n provider: AgentGuiWorkbenchProvider\n): AgentGUIAgentTarget | null {\n const agentTargets = targets.filter((target) => target.provider === provider);\n return agentTargets[0] ?? null;\n}\n\nfunction isAgentGuiProviderAvailable(\n provider: AgentGuiWorkbenchProvider,\n availability: AgentGuiWorkbenchProviderAvailability | null | undefined\n): boolean {\n const value = availability?.[provider];\n if (value === null || value === undefined) {\n return true;\n }\n if (typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"string\") {\n return value === \"ready\" || value === \"available\";\n }\n if (typeof value.available === \"boolean\") {\n return value.available;\n }\n return value.status === \"ready\" || value.status === \"available\";\n}\n\nexport function providerTargetLaunchPayloadFromRequest(\n payload: unknown,\n _expectedProvider: AgentGuiWorkbenchProvider\n): {\n agentTargetId: string | null;\n} {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return {\n agentTargetId: null\n };\n }\n const agentTargetId = (payload as { agentTargetId?: unknown }).agentTargetId;\n const providerTargetId = (payload as { providerTargetId?: unknown })\n .providerTargetId;\n return {\n agentTargetId:\n typeof agentTargetId === \"string\" && agentTargetId.trim()\n ? agentTargetId.trim()\n : typeof providerTargetId === \"string\" && providerTargetId.trim()\n ? providerTargetId.trim()\n : null\n };\n}\n\nexport function createAgentGuiWorkbenchPreviewContent(input: {\n agentDirectory: AgentGUIAgentDirectoryPort;\n item: WorkbenchHostDockPopupItemInput;\n label?: string;\n provider?: AgentGuiWorkbenchProvider;\n renderPreview: NonNullable<\n CreateAgentGuiWorkbenchContributionInput[\"renderPreview\"]\n >;\n resolveDockPopupIdentity?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupIdentity\"];\n resolveDockPopupTitle?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupTitle\"];\n}): WorkbenchDockPreviewContent {\n const { externalNodeState, node } = input.item;\n const state = normalizeAgentGuiWorkbenchState(externalNodeState);\n const title =\n input.resolveDockPopupIdentity?.(state)?.title ??\n input.resolveDockPopupTitle?.(state) ??\n node.title;\n const agentTargetId = state.agentTargetId?.trim() ?? \"\";\n const agent = input.agentDirectory\n .getSnapshot()\n .agents.find((candidate) => candidate.agentTargetId === agentTargetId);\n const provider = input.provider ?? agent?.provider ?? null;\n const label =\n input.label ??\n agent?.name ??\n (provider ? resolveAgentGuiWorkbenchProviderLabel(provider) : node.title);\n const lines = [label, state.lastActiveAgentSessionId].filter(\n (line): line is string => Boolean(line?.trim())\n );\n return {\n element: input.renderPreview(\n createAgentGuiWorkbenchPreviewBodyContext(input.item),\n {\n agentDirectory: input.agentDirectory,\n nodeTypeId: agentGuiWorkbenchTypeId,\n onStateChange: () => undefined,\n agentTargetId: agentTargetId || null,\n provider\n }\n ),\n kind: \"component\",\n revision: `${agentTargetId}\\n${provider ?? \"\"}\\n${title}\\n${lines.join(\"\\n\")}`\n };\n}\n\nfunction createAgentGuiWorkbenchPreviewBodyContext(\n input: WorkbenchHostDockPopupItemInput\n): WorkbenchHostNodeBodyContext<AgentGuiWorkbenchState | null, unknown> {\n return {\n activation: null,\n displayMode: input.node.displayMode,\n externalNodeState: input.externalNodeState as AgentGuiWorkbenchState | null,\n externalWorkspaceState: input.externalWorkspaceState,\n focus: () => undefined,\n host: input.host,\n instanceId: input.node.data.instanceId,\n instanceKey: input.node.data.instanceKey ?? null,\n isDragging: false,\n isFocused: false,\n isResizing: false,\n node: input.node,\n previewViewport: input.previewViewport,\n setNodeRuntimeState: () => undefined,\n setSnapshotNodeState: () => undefined\n };\n}\n"],"mappings":"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","names":["createElement","createElement","createElement","createElement","hasAgentSessionId"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../managedAgentIconAssets.ts","../providerIconAssets.ts"],"sourcesContent":["import claudeRoundedAssetUrl from \"./app/renderer/assets/icons/agents/claude-rounded.png\";\nimport codexRoundedAssetUrl from \"./app/renderer/assets/icons/agents/codex-rounded.png\";\nimport cursorColorfulAssetUrl from \"./app/renderer/assets/icons/agents/cursor-colorful.png\";\nimport cursorRoundedAssetUrl from \"./app/renderer/assets/icons/agents/cursor-rounded.png\";\nimport hermesRoundedAssetUrl from \"./app/renderer/assets/icons/agents/hermes-rounded.png\";\nimport agentColorfulAssetUrl from \"./app/renderer/assets/icons/agents/agent-colorful.png\";\nimport manageAgentTuttiAssetUrl from \"./app/renderer/assets/icons/agents/manage-agent-tutti.png\";\nimport opencodeRoundedAssetUrl from \"./app/renderer/assets/icons/agents/opencode-rounded.png\";\nimport openclawRoundedAssetUrl from \"./app/renderer/assets/icons/agents/openclaw-rounded.png\";\nimport providerRailClaudeCodeColorfulAssetUrl from \"./app/renderer/assets/icons/agents/provider-rail-claude-code-colorful.png\";\nimport providerRailCodexColorfulAssetUrl from \"./app/renderer/assets/icons/agents/provider-rail-codex-colorful.png\";\nimport providerRailHermesColorfulAssetUrl from \"./app/renderer/assets/icons/agents/provider-rail-hermes-colorful.png\";\nimport providerRailOpenCodeColorfulAssetUrl from \"./app/renderer/assets/icons/agents/provider-rail-opencode-colorful.png\";\nimport providerRailTuttiAssetUrl from \"./app/renderer/assets/icons/agents/provider-rail-tutti.png\";\n\nexport const manageAgentClaudeCodeUrl = claudeRoundedAssetUrl;\nexport const manageAgentCodexUrl = codexRoundedAssetUrl;\nexport const manageAgentCursorUrl = cursorRoundedAssetUrl;\nexport const manageAgentHermesUrl = hermesRoundedAssetUrl;\nexport const manageAgentTuttiUrl = manageAgentTuttiAssetUrl;\nexport const manageAgentTuttiAgentUrl = manageAgentTuttiAssetUrl;\nexport const manageAgentOpenCodeUrl = opencodeRoundedAssetUrl;\nexport const manageAgentOpenclawUrl = openclawRoundedAssetUrl;\nexport const agentColorfulUrl = agentColorfulAssetUrl;\nexport const claudeRoundedUrl = claudeRoundedAssetUrl;\nexport const codexRoundedUrl = codexRoundedAssetUrl;\nexport const cursorColorfulUrl = cursorColorfulAssetUrl;\nexport const cursorRoundedUrl = cursorRoundedAssetUrl;\nexport const hermesRoundedUrl = hermesRoundedAssetUrl;\nexport const tuttiDocRoundedUrl = manageAgentTuttiAssetUrl;\nexport const tuttiAgentRoundedUrl = manageAgentTuttiAssetUrl;\nexport const opencodeRoundedUrl = opencodeRoundedAssetUrl;\nexport const openclawRoundedUrl = openclawRoundedAssetUrl;\nexport const providerRailClaudeCodeColorfulUrl =\n providerRailClaudeCodeColorfulAssetUrl;\nexport const providerRailCodexColorfulUrl = providerRailCodexColorfulAssetUrl;\nexport const providerRailHermesColorfulUrl = providerRailHermesColorfulAssetUrl;\nexport const providerRailOpenCodeColorfulUrl =\n providerRailOpenCodeColorfulAssetUrl;\nexport const providerRailTuttiUrl = providerRailTuttiAssetUrl;\n","import claudeCodeFlatFilledIconUrl from \"./app/renderer/assets/icons/agents/claudecode-flat-filled.svg\";\nimport codexFlatFilledIconUrl from \"./app/renderer/assets/icons/agents/codex-flat-filled.svg\";\nimport cursorFlatFilledIconUrl from \"./app/renderer/assets/icons/agents/cursor-flat-filled.svg\";\nimport opencodeFlatFilledIconUrl from \"./app/renderer/assets/icons/agents/opencode-flat-filled.svg\";\nimport tuttiFlatFilledIconUrl from \"./app/renderer/assets/icons/agents/tutti-flat-filled.svg\";\nimport {\n claudeRoundedUrl,\n codexRoundedUrl,\n cursorColorfulUrl,\n cursorRoundedUrl,\n hermesRoundedUrl,\n manageAgentClaudeCodeUrl,\n manageAgentCodexUrl,\n manageAgentCursorUrl,\n manageAgentHermesUrl,\n manageAgentOpenCodeUrl,\n manageAgentOpenclawUrl,\n manageAgentTuttiUrl,\n opencodeRoundedUrl,\n openclawRoundedUrl,\n providerRailClaudeCodeColorfulUrl,\n providerRailCodexColorfulUrl,\n providerRailHermesColorfulUrl,\n providerRailOpenCodeColorfulUrl,\n providerRailTuttiUrl,\n tuttiAgentRoundedUrl,\n tuttiDocRoundedUrl\n} from \"./managedAgentIconAssets.ts\";\nimport type { ProviderIconAssetVariant } from \"./providerIconTypes.ts\";\n\nexport {\n PROVIDER_ICON_ASSET_VARIANTS,\n type ProviderIconAssetVariant\n} from \"./providerIconTypes.ts\";\n\nexport type ProviderIconAssetSet = Partial<\n Record<ProviderIconAssetVariant, string>\n>;\n\n/** Provider descriptors reference these assets only through Identity.IconKey. */\nexport const PROVIDER_ICON_ASSETS_BY_ICON_KEY: Readonly<\n Record<string, ProviderIconAssetSet>\n> = {\n \"claude-code\": {\n manage: manageAgentClaudeCodeUrl,\n providerRail: providerRailClaudeCodeColorfulUrl,\n rounded: claudeRoundedUrl,\n sessionColorful: claudeRoundedUrl,\n sessionFlat: claudeCodeFlatFilledIconUrl,\n dock: claudeRoundedUrl\n },\n codex: {\n manage: manageAgentCodexUrl,\n providerRail: providerRailCodexColorfulUrl,\n rounded: codexRoundedUrl,\n sessionColorful: codexRoundedUrl,\n sessionFlat: codexFlatFilledIconUrl,\n dock: codexRoundedUrl\n },\n cursor: {\n manage: manageAgentCursorUrl,\n providerRail: cursorColorfulUrl,\n rounded: cursorColorfulUrl,\n sessionColorful: cursorColorfulUrl,\n sessionFlat: cursorFlatFilledIconUrl,\n dock: cursorRoundedUrl\n },\n hermes: {\n manage: manageAgentHermesUrl,\n providerRail: providerRailHermesColorfulUrl,\n rounded: hermesRoundedUrl,\n sessionColorful: hermesRoundedUrl,\n sessionFlat: hermesRoundedUrl,\n dock: hermesRoundedUrl\n },\n openclaw: {\n manage: manageAgentOpenclawUrl,\n providerRail: openclawRoundedUrl,\n rounded: openclawRoundedUrl,\n sessionColorful: openclawRoundedUrl,\n sessionFlat: openclawRoundedUrl,\n dock: openclawRoundedUrl\n },\n opencode: {\n manage: manageAgentOpenCodeUrl,\n providerRail: providerRailOpenCodeColorfulUrl,\n rounded: opencodeRoundedUrl,\n sessionColorful: opencodeRoundedUrl,\n sessionFlat: opencodeFlatFilledIconUrl,\n dock: opencodeRoundedUrl\n },\n tutti: {\n manage: manageAgentTuttiUrl,\n providerRail: providerRailTuttiUrl,\n rounded: tuttiDocRoundedUrl,\n sessionColorful: manageAgentTuttiUrl,\n sessionFlat: tuttiFlatFilledIconUrl,\n dock: tuttiAgentRoundedUrl\n }\n};\n\nexport function resolveProviderIconAsset(\n iconKey: string | null | undefined,\n variant: ProviderIconAssetVariant\n): string | null {\n const normalizedIconKey = iconKey?.trim().toLowerCase() ?? \"\";\n return PROVIDER_ICON_ASSETS_BY_ICON_KEY[normalizedIconKey]?.[variant] ?? null;\n}\n\nexport function createProviderIconUrlMap(\n variant: ProviderIconAssetVariant,\n presentationIconAliases: Readonly<Record<string, string>>,\n migratedProviderIdentities: readonly {\n providerId: string;\n iconKey: string;\n }[]\n): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [providerId, iconKey] of Object.entries(presentationIconAliases)) {\n const iconUrl = resolveProviderIconAsset(iconKey, variant);\n if (iconUrl) {\n result[providerId] = iconUrl;\n }\n }\n for (const identity of migratedProviderIdentities) {\n const iconUrl = resolveProviderIconAsset(identity.iconKey, variant);\n if (iconUrl) {\n result[identity.providerId] = iconUrl;\n }\n }\n return result;\n}\n\nexport {\n claudeCodeFlatFilledIconUrl,\n codexFlatFilledIconUrl,\n cursorFlatFilledIconUrl,\n opencodeFlatFilledIconUrl,\n tuttiFlatFilledIconUrl\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeO,IAAM,2BAA2B;AACjC,IAAM,sBAAsB;AAC5B,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAC7B,IAAM,sBAAsB;AAE5B,IAAM,yBAAyB;AAC/B,IAAM,yBAAyB;AAC/B,IAAM,mBAAmB;AACzB,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AACxB,IAAM,oBAAoB;AAC1B,IAAM,mBAAmB;AACzB,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAC3B,IAAM,uBAAuB;AAC7B,IAAM,qBAAqB;AAC3B,IAAM,qBAAqB;AAC3B,IAAM,oCACX;AACK,IAAM,+BAA+B;AACrC,IAAM,gCAAgC;AACtC,IAAM,kCACX;AACK,IAAM,uBAAuB;;;ACC7B,IAAM,mCAET;AAAA,EACF,eAAe;AAAA,IACb,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AACF;AAEO,SAAS,yBACd,SACA,SACe;AACf,QAAM,oBAAoB,SAAS,KAAK,EAAE,YAAY,KAAK;AAC3D,SAAO,iCAAiC,iBAAiB,IAAI,OAAO,KAAK;AAC3E;AAEO,SAAS,yBACd,SACA,yBACA,4BAIwB;AACxB,QAAM,SAAiC,CAAC;AACxC,aAAW,CAAC,YAAY,OAAO,KAAK,OAAO,QAAQ,uBAAuB,GAAG;AAC3E,UAAM,UAAU,yBAAyB,SAAS,OAAO;AACzD,QAAI,SAAS;AACX,aAAO,UAAU,IAAI;AAAA,IACvB;AAAA,EACF;AACA,aAAW,YAAY,4BAA4B;AACjD,UAAM,UAAU,yBAAyB,SAAS,SAAS,OAAO;AAClE,QAAI,SAAS;AACX,aAAO,SAAS,UAAU,IAAI;AAAA,IAChC;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
@@ -1,10 +0,0 @@
1
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_3862_27144)">
3
- <path d="M9.42384 13.3255C9.49189 13.285 9.53358 13.2116 9.53358 13.1323C9.53358 13.0117 9.4384 12.9125 9.31785 12.9076L1.64539 12.5938C1.57631 12.591 1.50759 12.5823 1.43997 12.5679L1.38144 12.5554C1.13144 12.5022 0.908899 12.3609 0.754384 12.1573L0.58218 11.9304C0.517085 11.8446 0.489711 11.736 0.506357 11.6296C0.523411 11.5206 0.585135 11.4237 0.676674 11.3621L0.789818 11.286C0.921712 11.1973 1.07961 11.1555 1.23811 11.1674L9.5297 11.7887C9.57673 11.7922 9.62026 11.7637 9.63586 11.7192C9.65142 11.6748 9.63528 11.6255 9.59647 11.5988L2.91463 7.01244C2.80151 6.9348 2.70076 6.84053 2.61578 6.73282L2.60913 6.72438C2.46814 6.54569 2.37566 6.33363 2.34063 6.10872L2.31317 5.93241C2.26901 5.64891 2.35546 5.36064 2.54833 5.14821C2.75239 4.92346 3.05163 4.80987 3.35343 4.84258L3.56048 4.86503C3.80605 4.89165 4.03973 4.98473 4.23635 5.13424L9.26417 8.95755C9.3217 9.0013 9.40305 8.99423 9.45217 8.94121C9.49401 8.89604 9.50154 8.82888 9.47075 8.77556L6.25638 3.21021C6.12565 2.98388 6.02631 2.74082 5.96693 2.48629C5.94424 2.38906 5.91985 2.28181 5.8968 2.17523C5.81309 1.78809 5.92299 1.40247 6.15784 1.08351L6.3923 0.765093C6.47105 0.658149 6.58146 0.578711 6.70789 0.538046C6.83927 0.495789 6.98086 0.49767 7.11107 0.543402L7.51118 0.683927C7.99622 0.854281 8.39112 1.21457 8.60513 1.68199L12.0531 9.21282C12.0689 9.24729 12.1033 9.2694 12.1412 9.2694C12.1914 9.2694 12.2332 9.23118 12.2378 9.18126L12.8485 2.46734C12.8672 2.26114 12.917 2.05894 12.9959 1.86755L13.1222 1.56157C13.1975 1.37921 13.3258 1.22366 13.4905 1.11507L13.6017 1.04175C13.8209 0.897253 14.0997 0.878044 14.3366 0.99112C14.4535 1.04693 14.554 1.13213 14.6282 1.23839L14.6941 1.33284C14.8742 1.59083 14.9443 1.90983 14.889 2.21955L13.7775 8.4478C13.7636 8.52554 13.8234 8.59691 13.9023 8.59691C13.936 8.59691 13.9682 8.58355 13.992 8.55977L14.1881 8.36363L18.1368 3.58958C18.2031 3.50947 18.2776 3.4366 18.3592 3.37218L18.4536 3.29769C18.6525 3.1407 18.8984 3.05532 19.1518 3.05532C19.5269 3.05532 19.8774 3.24193 20.0868 3.55313L20.1399 3.63214C20.3563 3.9537 20.4187 4.35477 20.3101 4.72684L20.2422 4.9595C20.1842 5.15835 20.0927 5.34586 19.9717 5.51397L16.356 10.5369C16.3322 10.5699 16.3315 10.6142 16.3542 10.6479C16.3741 10.6775 16.4087 10.6938 16.4442 10.6904L16.567 10.6787L22.2109 9.59097C22.4358 9.54762 22.6687 9.57647 22.8763 9.67341L23.1422 9.79759C23.2775 9.86078 23.3762 9.98278 23.4097 10.1283C23.432 10.2253 23.4239 10.3269 23.3865 10.4192L23.3255 10.5699C23.2027 10.873 22.9396 11.0969 22.6208 11.1697L15.7289 12.7427C15.7236 12.744 15.7185 12.7463 15.7141 12.7495C15.6958 12.7631 15.6924 12.7891 15.7067 12.8068L15.7132 12.8148C15.722 12.8257 15.735 12.8324 15.749 12.8333L21.7603 13.1901C22.1193 13.2115 22.4662 13.3272 22.7661 13.5256L22.8788 13.6001C23.0025 13.6819 23.1109 13.7847 23.1993 13.9038L23.3922 14.164C23.4741 14.2744 23.5078 14.4133 23.4856 14.5491C23.4594 14.7089 23.3587 14.8467 23.2144 14.9202L22.7687 15.1472C22.4514 15.3088 22.0869 15.3519 21.7406 15.2688L15.7857 13.8399C15.7738 13.8371 15.7616 13.8356 15.7494 13.8356H15.6661C15.6261 13.8356 15.5936 13.8681 15.5936 13.9082C15.5936 13.9283 15.602 13.9476 15.6167 13.9613L20.8067 18.7854C20.9184 18.8892 20.9959 19.0245 21.0289 19.1733L21.0523 19.2787C21.0834 19.4188 21.0538 19.5655 20.9709 19.6826L20.9229 19.7504C20.8422 19.8643 20.7046 19.9236 20.5664 19.9039C20.4998 19.8944 20.437 19.8671 20.3847 19.8248L15.7054 16.0417C15.6893 16.0287 15.6691 16.0216 15.6484 16.0216C15.5982 16.0216 15.5576 16.0622 15.5576 16.1123V16.1468C15.5576 16.1715 15.5649 16.1957 15.5787 16.2163L17.9699 19.7959C18.1441 20.0567 18.2533 20.3554 18.2883 20.667L18.3344 21.0773C18.3457 21.1774 18.3284 21.2786 18.2845 21.3693C18.223 21.4965 18.1136 21.5941 17.9802 21.6408L17.8327 21.6924C17.6836 21.7445 17.5236 21.7571 17.3682 21.7288L17.3617 21.7276C17.1082 21.6815 16.8848 21.5329 16.7442 21.3169L13.2444 15.9387C13.214 15.892 13.1524 15.877 13.104 15.9046C13.0741 15.9217 13.0544 15.9522 13.0512 15.9864L12.4332 22.6455C12.4176 22.8133 12.3506 22.9722 12.2414 23.1004C12.1525 23.2048 12.0388 23.2851 11.9108 23.3341L11.8708 23.3494C11.5815 23.46 11.2556 23.4133 11.0091 23.2258C10.8867 23.1327 10.7903 23.0096 10.7293 22.8685L10.6807 22.7562C10.5711 22.5025 10.5411 22.2215 10.595 21.9504L11.9342 15.2047C11.9354 15.1989 11.9352 15.193 11.9336 15.1874C11.9286 15.1692 11.911 15.1574 11.8923 15.1598L11.8337 15.1674C11.8064 15.1709 11.7814 15.185 11.7643 15.2067L6.76148 21.5419C6.6971 21.6234 6.6123 21.6865 6.51568 21.7247C6.3572 21.7873 6.17935 21.7783 6.02801 21.7L5.99017 21.6804C5.74159 21.5517 5.59688 21.2828 5.62482 21.0042C5.6362 20.8907 5.67579 20.7812 5.73987 20.6868L6.0267 20.2643L10.5702 14.5282C10.587 14.5069 10.5957 14.4802 10.5946 14.4531L10.5917 14.3847C10.5908 14.3622 10.5723 14.3444 10.5497 14.3444C10.5416 14.3444 10.5336 14.3468 10.5268 14.3512L4.74466 18.1053C4.54811 18.2329 4.32541 18.3148 4.09299 18.3448L3.67507 18.3988C3.47664 18.4245 3.27713 18.3602 3.131 18.2235C2.9817 18.0839 2.90424 17.8838 2.92061 17.68L2.93384 17.5152C2.94579 17.3665 3.00823 17.2263 3.11082 17.1179C3.15214 17.0743 3.19929 17.0365 3.25093 17.0057L9.42384 13.3255Z" fill="black"/>
4
- </g>
5
- <defs>
6
- <clipPath id="clip0_3862_27144">
7
- <rect width="24" height="24" fill="white"/>
8
- </clipPath>
9
- </defs>
10
- </svg>
@@ -1,10 +0,0 @@
1
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_3862_27146)">
3
- <path d="M23.1439 14.3386C22.7391 16.0295 21.9459 17.3736 20.4447 18.3141C19.9113 18.6483 19.5019 18.7264 18.9866 18.9782C18.7803 19.3657 18.6666 19.8074 18.4368 20.2097C17.6048 21.6656 16.4501 22.5213 14.8626 23.0065C14.6919 23.0576 14.5188 23.1037 14.345 23.1432H12.513C11.2051 22.8112 10.4982 22.3954 9.47884 21.529C9.18623 21.5477 8.81069 21.6292 8.48079 21.654C7.34052 21.7395 6.12643 21.5112 5.1302 20.9382C3.36749 19.9013 2.29336 18.0006 2.31575 15.9557C2.31891 15.7969 2.33418 15.6182 2.34505 15.4763C2.35772 15.3112 2.4905 14.673 2.4427 14.5641C2.31931 14.2866 1.95 13.9749 1.76302 13.6794C1.40912 13.1198 1.13144 12.4546 0.935867 11.8093L0.857742 11.5349V9.56903C1.31586 7.68213 2.48999 6.05377 4.32259 5.29852C4.55132 5.2043 4.79966 5.13357 5.01595 5.01434C5.22777 4.5227 5.33495 4.12965 5.62727 3.66083C6.64948 2.0216 7.84654 1.31326 9.65852 0.857117H11.429C12.7497 1.19599 13.4971 1.54616 14.5042 2.47137C14.957 2.44915 15.3994 2.35438 15.8704 2.33856C17.3191 2.27571 18.734 2.79232 19.8011 3.77411C20.9819 4.84126 21.5971 6.14547 21.6673 7.737C21.7003 8.48539 21.6013 8.80028 21.5296 9.49677C21.746 9.76601 22.0013 10.0358 22.2005 10.3171C22.6549 10.959 22.9895 11.8662 23.1429 12.6384V0.857117H23.1439V14.3386ZM15.2669 14.3649C14.4757 14.365 13.374 14.332 12.6116 14.3747C12.1103 14.4854 11.8728 14.8914 11.9818 15.3766C12.1307 16.0386 13.0123 15.9302 13.5101 15.9274L14.7337 15.9245L16.2406 15.9255C16.5669 15.926 16.9044 15.9364 17.2288 15.9128C17.6437 15.8334 18.0112 15.4478 17.8968 15.0143C17.6968 14.2577 17.0976 14.3652 16.5199 14.3649H15.2669ZM6.78645 8.21649C6.35616 8.33658 6.07901 8.69014 6.21321 9.14618C6.34297 9.58644 6.64196 9.98695 6.8597 10.3874C7.16124 10.9396 7.54165 11.5353 7.82063 12.0895C7.7044 12.3605 7.49453 12.6959 7.33919 12.9538L6.69368 14.0261C6.35323 14.5929 5.77807 15.3944 6.68196 15.8483C6.85322 15.9342 7.07415 15.8877 7.24837 15.8317C7.71629 15.5695 7.9834 14.8551 8.27278 14.4177C8.31454 14.3545 8.35092 14.2774 8.3929 14.2136C8.60769 13.7665 9.55498 12.4719 9.50423 12.0397C9.47417 11.7853 8.92698 10.8787 8.78157 10.6257C8.55076 10.2263 8.32389 9.82436 8.10091 9.42059C7.91401 9.08717 7.7207 8.72021 7.47884 8.4245C7.32699 8.23906 7.00895 8.20017 6.78645 8.21649Z" fill="black"/>
4
- </g>
5
- <defs>
6
- <clipPath id="clip0_3862_27146">
7
- <rect width="24" height="24" fill="white"/>
8
- </clipPath>
9
- </defs>
10
- </svg>
@@ -1,3 +0,0 @@
1
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M11.6938 1.10116C11.8436 1.07739 12.2047 1.20319 12.3256 1.27792C13.6093 2.07185 20.4975 5.75063 21.2211 6.50644C21.4804 7.31389 21.5087 16.4896 21.2211 17.3853C21.1677 17.5512 21.0501 17.6349 20.9145 17.732C19.9505 18.4215 18.8218 18.9741 17.7914 19.568C15.9244 20.6441 14.0655 21.7399 12.182 22.7867C12.0256 22.8329 11.8387 22.8879 11.6752 22.8844C11.2559 22.8754 2.71449 17.9184 2.24259 17.4273C2.22213 16.8742 2.2107 16.3135 2.21818 15.7603C2.25977 12.6902 2.14029 9.57721 2.24161 6.51132C2.69694 6.095 5.27095 4.64421 6.00528 4.23593C7.77292 3.25319 9.70198 2.02797 11.4799 1.108C11.5237 1.1053 11.6696 1.10474 11.6938 1.10116ZM8.39298 6.82577C7.44715 6.82998 3.72595 6.75303 3.08341 6.87167C3.377 7.20472 4.6331 7.88441 5.07657 8.13925L9.35196 10.5934C9.98708 10.9578 11.1863 11.6042 11.7455 12.0318L11.7436 18.5055C11.7436 19.6583 11.7074 21.0779 11.7729 22.2096C12.851 20.5502 14.0633 18.3 15.0707 16.5514L18.3627 10.8658C18.7576 10.1857 20.2944 7.64865 20.4311 7.06894C20.1775 6.80839 19.7582 6.81209 19.3949 6.81503C15.7403 6.84455 12.0423 6.80939 8.39298 6.82577Z" fill="black"/>
3
- </svg>
@@ -1,11 +0,0 @@
1
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_3861_2885)">
3
- <rect width="24" height="24" fill="black" fill-opacity="0.01"/>
4
- <path d="M12.541 2.64224C13.5268 2.57725 14.7105 3.26414 14.9658 4.31119C14.9807 4.37244 14.971 4.38297 14.999 4.45279C15.0889 4.49497 15.8572 4.41273 16.1084 4.44888C16.6718 4.53003 17.3283 4.81738 17.6679 5.29068C18.3576 6.25256 18.1372 7.15346 17.9668 8.23795C17.891 8.71986 17.8512 9.18553 17.7841 9.66177C18.6508 9.38411 19.6929 9.3859 20.3828 10.0436C20.9482 10.5828 21.022 10.9891 20.9707 11.7506C20.9128 12.6101 20.7133 13.4205 20.5381 14.2594C20.4156 14.8393 20.3126 15.4234 20.1748 15.9997C19.4485 18.9205 17.1783 21.1354 14.1855 21.6169C13.2872 21.7614 12.2326 21.7234 11.3154 21.8883C11.0306 21.9395 10.5122 21.8928 10.2041 21.8737C8.39117 21.7381 6.83082 21.0208 5.55368 19.7018C4.56317 18.6788 3.76665 16.85 3.4736 15.4499C3.27634 14.5072 3.21936 13.2571 3.05173 12.2594C2.92224 11.4892 2.63431 9.90484 2.66306 9.19595C2.69683 8.52466 2.99466 7.89414 3.49118 7.44107C4.00634 6.96741 4.73785 6.86941 5.40915 6.8981C5.26761 6.12888 5.17335 6.00537 5.47849 5.24673C6.26 3.30387 9.35257 3.09898 10.1269 5.15591C10.4457 3.7735 10.9671 2.83356 12.4736 2.6481C12.496 2.64536 12.5185 2.64365 12.541 2.64224ZM7.65329 5.28287C7.34224 5.39341 7.04943 5.51492 6.89841 5.83658C6.87441 5.88847 6.85129 5.94173 6.83005 5.99478C6.84839 6.41774 7.06208 7.04203 7.15817 7.46646C7.52295 9.07758 8.00711 10.6594 8.13474 12.3151C8.16969 12.7687 8.10092 12.9325 7.81833 13.2829C7.39918 13.433 7.31867 13.3947 6.87106 13.3239C6.79013 13.194 6.70881 13.0713 6.65622 12.9128C6.49424 12.424 6.54192 11.9679 6.41599 11.4645C6.21294 10.6528 6.08263 9.60287 5.76266 8.84439C5.65375 8.5874 4.91332 8.33972 4.70407 8.52701C4.33418 8.74784 4.174 9.07895 4.23239 9.50357C4.37588 10.5311 4.54178 11.5642 4.69919 12.5905C4.84794 13.6103 4.89935 14.7715 5.16403 15.7653C5.32709 16.3774 5.8209 17.4421 6.16403 17.9606C6.94094 19.1217 8.14863 19.9258 9.5195 20.195C11.0801 20.5085 12.8188 20.2648 14.1318 19.3473C15.1047 18.6673 15.3727 18.2725 15.9267 17.2819C16.8241 15.5121 16.3967 13.5316 16.2441 11.6442C16.2247 11.4043 16.1772 10.8032 15.955 10.6823C15.5703 10.5916 15.1103 11.0915 14.9013 11.3747C14.8058 12.1456 14.8548 12.899 14.8808 13.6725C14.9036 14.3491 14.979 14.9579 14.2168 15.2184C13.0143 14.9531 13.3798 14.1651 13.2724 13.2438C13.0766 11.5645 13.1952 7.84899 12.2187 6.50552C12.0063 6.39593 11.8598 6.35441 11.6279 6.29556C11.2456 6.3937 11.0664 6.49764 10.8252 6.83755C10.826 7.52781 11.0772 8.09418 11.1601 8.75552C11.296 9.96436 11.4554 11.2031 11.4472 12.4196C11.4402 13.4156 9.94736 13.3695 9.90329 12.5114C9.80551 10.594 9.27439 8.78583 8.98825 6.8981C8.84693 5.96551 8.82536 5.2274 7.65329 5.28287ZM18.79 11.0602C18.3666 11.1286 18.1324 11.2288 17.8457 11.5719C17.8416 12.006 17.944 12.8819 18 13.3678C18.1526 14.6926 18.0601 16.0194 17.6699 17.2985C17.5713 17.6217 17.2346 18.1239 17.0879 18.4733C17.1733 18.3779 17.2854 18.259 17.3603 18.1588C17.7942 17.613 18.0218 17.3011 18.2988 16.6364C18.4293 16.3174 18.5396 15.9898 18.6289 15.6569C18.7615 15.1552 18.8619 14.597 18.9638 14.0895C19.1437 13.1941 19.3738 12.2827 19.416 11.3708C19.4287 11.0806 18.9619 11.0667 18.79 11.0602ZM15.6006 5.99088C15.3568 6.09677 14.9873 6.2966 14.9345 6.55826C14.7769 7.34556 14.5456 8.7319 14.5664 9.49088C14.8154 9.39809 15.0902 9.28813 15.3457 9.22525C15.6499 9.18296 15.9353 9.14924 16.2431 9.14322C16.291 8.79009 16.3293 8.44362 16.3818 8.09048C16.4534 7.6096 16.6054 6.9758 16.5908 6.49869C16.3227 6.07678 16.0915 5.97202 15.6006 5.99088ZM21.0615 7.0065C21.6953 7.12329 21.9585 7.85598 21.4785 8.29068C21.118 8.617 20.8665 8.63861 20.4746 8.63638C19.7722 8.50674 19.6929 8.11655 19.7959 7.48795C20.2895 7.07061 20.4128 7.02325 21.0498 7.00845C21.0537 7.00789 21.0576 7.00707 21.0615 7.0065ZM19.5127 4.57584C20.3899 4.65155 20.4491 5.15673 20.2412 5.88541C20.007 6.11731 19.757 6.3455 19.4375 6.44205C19.0358 6.39425 18.9416 6.32032 18.6582 6.04849C18.5562 5.25112 18.7461 4.8368 19.5127 4.57584ZM12.4502 4.19107C12.2196 4.29653 12.0348 4.53157 11.8662 4.72232C12.5314 4.92175 12.7055 4.93493 13.2549 5.37369L13.498 5.56998C13.512 5.35527 13.5375 5.09491 13.542 4.88443C13.3625 4.57804 13.2165 4.3764 12.8994 4.18619C12.7541 4.18732 12.5938 4.18576 12.4502 4.19107Z" fill="black"/>
5
- </g>
6
- <defs>
7
- <clipPath id="clip0_3861_2885">
8
- <rect width="24" height="24" fill="white"/>
9
- </clipPath>
10
- </defs>
11
- </svg>
@@ -1,4 +0,0 @@
1
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M14 3H21V10M20 4L10 14" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
- <path d="M19 13V19C19 20.1046 18.1046 21 17 21H5C3.89543 21 3 20.1046 3 19V7C3 5.89543 3.89543 5 5 5H11" stroke="black" stroke-width="2" stroke-linecap="round"/>
4
- </svg>
@@ -1,4 +0,0 @@
1
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M3.41382 0.991348C3.8204 1.02608 4.73175 1.00009 5.1687 1.00014H8.70679L20.2244 1.00209L20.2205 22.9904L9.71069 22.9757H5.87476C5.06579 22.9757 4.22438 22.9637 3.4187 22.9913C3.38439 22.0528 3.40898 20.9887 3.40894 20.0402V14.632L3.41382 0.991348ZM7.29272 4.87807C7.28438 6.53493 7.27638 8.21526 7.29272 9.87123L7.29663 19.0988C8.53026 19.1177 9.7903 19.1055 11.0261 19.1056L16.3337 19.0997L16.3347 14.004C16.3345 12.4565 16.3505 10.8828 16.3337 9.33803C16.3388 7.86364 16.3492 6.34738 16.3337 4.87416L7.29272 4.87807Z" fill="black"/>
3
- <rect opacity="0.3" x="7.28322" y="10.0502" width="9.05882" height="9.05882" fill="black"/>
4
- </svg>
@@ -1,12 +0,0 @@
1
- <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_4006_12727)">
3
- <path d="M11.211 0.548002C15.073 0.543295 17.9345 1.81179 19.9296 3.83278L20.0239 3.92959C23.0552 7.07998 23.023 10.8748 22.9943 11.9018C22.8951 15.489 21.1542 19.394 18.0294 21.4325C15.586 23.0268 12.2832 23.8613 9.04026 23.2149C5.73648 22.5563 2.62419 20.3848 0.625961 16.2234L3.20797 14.9835C4.83801 18.3782 7.22765 19.933 9.60024 20.4059C12.0336 20.891 14.5815 20.2622 16.4644 19.0336L16.4645 19.0335C18.641 17.6137 20.0521 14.6807 20.1311 11.8223V11.8219C20.1548 10.9733 20.1554 8.19731 17.96 5.91559C16.5591 4.45982 14.4443 3.40834 11.2145 3.41226C6.37955 3.4188 3.86602 6.76421 3.83019 9.29717L3.82979 9.35691C3.83105 10.3775 4.17276 11.3212 4.80308 11.8258C5.35665 12.269 6.54025 12.6884 9.00181 11.7756C9.74148 11.5012 10.4014 11.1957 11.0683 10.8751C11.7204 10.5617 12.4153 10.2154 13.1403 9.91163C14.6484 9.2797 16.3347 8.80763 18.7078 8.80454L18.7115 11.6688C16.7745 11.6713 15.463 12.0439 14.2473 12.5533C13.6103 12.8202 13.0118 13.1188 12.3092 13.4566C11.6213 13.7872 10.8653 14.1393 9.99793 14.4611H9.99777C7.01416 15.5675 4.64823 15.3711 3.01281 14.0617C1.45417 12.8137 0.967387 10.8679 0.965528 9.36047L0.965609 9.36039C0.960216 5.06707 4.93334 0.55642 11.2108 0.548002H11.211Z" fill="black"/>
4
- <path d="M6.97341 14.9505V6.38824H9.83775V14.9505C9.83775 15.3767 9.92837 15.571 9.98458 15.6564C10.0386 15.7384 10.1373 15.8367 10.3693 15.9334C10.9249 16.1648 11.8087 16.2252 13.1098 16.2252V19.0894C11.9066 19.0894 10.4383 19.065 9.26781 18.5774C8.63685 18.3146 8.02895 17.8947 7.59224 17.2314C7.15772 16.5714 6.97341 15.793 6.97341 14.9505Z" fill="black"/>
5
- <path d="M12.918 14.9505V6.38824H15.7824V14.9505C15.7824 15.3767 15.873 15.571 15.9292 15.6564C15.9832 15.7384 16.0819 15.8367 16.3139 15.9334C16.8695 16.1648 17.7533 16.2252 19.0544 16.2252V19.0894C17.8512 19.0894 16.3829 19.065 15.2124 18.5774C14.5815 18.3146 13.9736 17.8947 13.5369 17.2314C13.1023 16.5714 12.918 15.793 12.918 14.9505Z" fill="black"/>
6
- </g>
7
- <defs>
8
- <clipPath id="clip0_4006_12727">
9
- <rect width="24" height="24" fill="white"/>
10
- </clipPath>
11
- </defs>
12
- </svg>