@tutti-os/agent-gui 0.0.95 → 0.0.97

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 (111) hide show
  1. package/README.md +38 -6
  2. package/dist/{AgentGUI-CwBLYtv-.d.ts → AgentGUI-DWdvUV4x.d.ts} +64 -18
  3. package/dist/agent-conversation/index.d.ts +3 -2
  4. package/dist/agent-conversation/index.js +10 -9
  5. package/dist/agent-conversation/index.js.map +1 -1
  6. package/dist/agent-env/index.js +1 -1
  7. package/dist/agent-gui.d.ts +5 -5
  8. package/dist/agent-gui.js +26 -26
  9. package/dist/agent-message-center/index.d.ts +14 -3
  10. package/dist/agent-message-center/index.js +182 -47
  11. package/dist/agent-message-center/index.js.map +1 -1
  12. package/dist/{agentFileMentionContracts-Czvz6YMI.d.ts → agentFileMentionContracts-58IjMU-u.d.ts} +1 -0
  13. package/dist/{agentGuiNodeTypes-DppADPHW.d.ts → agentGuiNodeTypes-B9X4aWfv.d.ts} +30 -18
  14. package/dist/agents.d.ts +1 -1
  15. package/dist/agents.js +1 -1
  16. package/dist/app/renderer/agentactivity.css +150 -10
  17. package/dist/{chunk-BIHBXWK5.js → chunk-3EAANCKF.js} +2 -2
  18. package/dist/{chunk-LQVXBT65.js → chunk-3RYZYA72.js} +9 -9
  19. package/dist/{chunk-LQVXBT65.js.map → chunk-3RYZYA72.js.map} +1 -1
  20. package/dist/{chunk-BFNJKTDV.js → chunk-4VBKQY24.js} +11 -16
  21. package/dist/chunk-4VBKQY24.js.map +1 -0
  22. package/dist/{chunk-7PFDA2HQ.js → chunk-4YVGHJIE.js} +8 -116
  23. package/dist/chunk-4YVGHJIE.js.map +1 -0
  24. package/dist/{chunk-NITOD7WF.js → chunk-74CPYRWJ.js} +2 -2
  25. package/dist/{chunk-R2EWECUP.js → chunk-7BXWPI4F.js} +17 -2
  26. package/dist/{chunk-R2EWECUP.js.map → chunk-7BXWPI4F.js.map} +1 -1
  27. package/dist/{chunk-3R2D4E57.js → chunk-AAFTWZV7.js} +933 -844
  28. package/dist/chunk-AAFTWZV7.js.map +1 -0
  29. package/dist/{chunk-JX2SIXNL.js → chunk-AO2FDYAL.js} +8 -7
  30. package/dist/{chunk-JX2SIXNL.js.map → chunk-AO2FDYAL.js.map} +1 -1
  31. package/dist/{chunk-RY6GIO3K.js → chunk-BIS4QRX7.js} +5744 -4357
  32. package/dist/chunk-BIS4QRX7.js.map +1 -0
  33. package/dist/{chunk-O6W72SEP.js → chunk-C35SNDVZ.js} +4 -1
  34. package/dist/chunk-C35SNDVZ.js.map +1 -0
  35. package/dist/{chunk-WEDMAVX2.js → chunk-IYEXLOUE.js} +3 -6
  36. package/dist/chunk-IYEXLOUE.js.map +1 -0
  37. package/dist/{chunk-AOS2VWU6.js → chunk-K2NURZ7V.js} +37 -3
  38. package/dist/chunk-K2NURZ7V.js.map +1 -0
  39. package/dist/{chunk-UQJPV6HP.js → chunk-L3GMMGRS.js} +8 -6
  40. package/dist/chunk-L3GMMGRS.js.map +1 -0
  41. package/dist/{chunk-KAL4XZMA.js → chunk-MASXZENX.js} +1 -1
  42. package/dist/chunk-MASXZENX.js.map +1 -0
  43. package/dist/{chunk-YE25HN6T.js → chunk-NRJEKWLY.js} +17 -25
  44. package/dist/chunk-NRJEKWLY.js.map +1 -0
  45. package/dist/{chunk-XMO45GKA.js → chunk-P2BCMPTX.js} +14 -4
  46. package/dist/chunk-P2BCMPTX.js.map +1 -0
  47. package/dist/{chunk-7RDD3EWP.js → chunk-RE4AXS27.js} +24 -15
  48. package/dist/chunk-RE4AXS27.js.map +1 -0
  49. package/dist/{chunk-C5FV4UGI.js → chunk-SQTSLCMV.js} +22 -44
  50. package/dist/chunk-SQTSLCMV.js.map +1 -0
  51. package/dist/{chunk-NJAZ7LQM.js → chunk-TVIGLNNI.js} +3 -3
  52. package/dist/{chunk-VF22EG3F.js → chunk-UHBCM6RO.js} +1 -1
  53. package/dist/chunk-UHBCM6RO.js.map +1 -0
  54. package/dist/{chunk-CRO2MV2Y.js → chunk-XGGKHIQA.js} +21 -116
  55. package/dist/chunk-XGGKHIQA.js.map +1 -0
  56. package/dist/{chunk-NX3CZJXW.js → chunk-Y57VNTVM.js} +2 -2
  57. package/dist/chunk-YMXYBG7U.js +12 -0
  58. package/dist/chunk-YMXYBG7U.js.map +1 -0
  59. package/dist/context-mention-palette/index.d.ts +1 -1
  60. package/dist/context-mention-palette/index.js +14 -14
  61. package/dist/custom-mention.d.ts +2 -4
  62. package/dist/dock-icons.d.ts +2 -4
  63. package/dist/i18n/index.d.ts +34 -0
  64. package/dist/i18n/index.js +2 -2
  65. package/dist/index.d.ts +14 -12
  66. package/dist/index.js +34 -30
  67. package/dist/index.js.map +1 -1
  68. package/dist/mention-search.d.ts +1 -1
  69. package/dist/mention-search.js +11 -11
  70. package/dist/pastedTextKinds-D-XuInaS.d.ts +4 -0
  71. package/dist/startup-shell.d.ts +8 -0
  72. package/dist/startup-shell.js +184 -0
  73. package/dist/startup-shell.js.map +1 -0
  74. package/dist/{types-DX2bxgB8.d.ts → types-CnT8rNUI.d.ts} +16 -5
  75. package/dist/workbench/contribution.d.ts +3 -2
  76. package/dist/workbench/contribution.js +6 -6
  77. package/dist/workbench/index.d.ts +4 -4
  78. package/dist/workbench/index.js +14 -16
  79. package/dist/workbench/launch.d.ts +2 -2
  80. package/dist/workbench/launch.js +3 -3
  81. package/dist/workbench/providerCatalog.d.ts +2 -2
  82. package/dist/workbench/providerCatalog.js +1 -1
  83. package/dist/workbench/sessionTitle.d.ts +8 -12
  84. package/dist/workbench/sessionTitle.js +5 -7
  85. package/dist/workbench/state.js +2 -2
  86. package/dist/workbench/types.d.ts +2 -1
  87. package/dist/workbench/types.js +1 -1
  88. package/dist/workspace-agent-generated-files.js +6 -6
  89. package/package.json +21 -14
  90. package/dist/chunk-3R2D4E57.js.map +0 -1
  91. package/dist/chunk-7J4K6WKB.js +0 -66
  92. package/dist/chunk-7J4K6WKB.js.map +0 -1
  93. package/dist/chunk-7PFDA2HQ.js.map +0 -1
  94. package/dist/chunk-7RDD3EWP.js.map +0 -1
  95. package/dist/chunk-AOS2VWU6.js.map +0 -1
  96. package/dist/chunk-BFNJKTDV.js.map +0 -1
  97. package/dist/chunk-C5FV4UGI.js.map +0 -1
  98. package/dist/chunk-CRO2MV2Y.js.map +0 -1
  99. package/dist/chunk-KAL4XZMA.js.map +0 -1
  100. package/dist/chunk-O6W72SEP.js.map +0 -1
  101. package/dist/chunk-RY6GIO3K.js.map +0 -1
  102. package/dist/chunk-UQJPV6HP.js.map +0 -1
  103. package/dist/chunk-VF22EG3F.js.map +0 -1
  104. package/dist/chunk-WEDMAVX2.js.map +0 -1
  105. package/dist/chunk-XMO45GKA.js.map +0 -1
  106. package/dist/chunk-YE25HN6T.js.map +0 -1
  107. package/dist/uiSettings-BQS9r2eo.d.ts +0 -6
  108. /package/dist/{chunk-BIHBXWK5.js.map → chunk-3EAANCKF.js.map} +0 -0
  109. /package/dist/{chunk-NITOD7WF.js.map → chunk-74CPYRWJ.js.map} +0 -0
  110. /package/dist/{chunk-NJAZ7LQM.js.map → chunk-TVIGLNNI.js.map} +0 -0
  111. /package/dist/{chunk-NX3CZJXW.js.map → chunk-Y57VNTVM.js.map} +0 -0
@@ -6,6 +6,7 @@ function normalizeAgentGUIAgents(agents) {
6
6
  const agentTargetId = agent.agentTargetId.trim();
7
7
  const name = agent.name.trim();
8
8
  const iconUrl = agent.iconUrl.trim();
9
+ const heroImageUrl = agent.heroImageUrl?.trim() ?? "";
9
10
  if (!agentTargetId || !name || !iconUrl || seenAgentTargetIds.has(agentTargetId)) {
10
11
  continue;
11
12
  }
@@ -17,6 +18,7 @@ function normalizeAgentGUIAgents(agents) {
17
18
  agentTargetId,
18
19
  name,
19
20
  iconUrl,
21
+ ...heroImageUrl ? { heroImageUrl } : {},
20
22
  ...agent.description?.trim() ? { description: agent.description.trim() } : {},
21
23
  ...ownerName || ownerAvatarUrl ? {
22
24
  owner: {
@@ -61,6 +63,7 @@ function projectAgentGUIAgentsToInternalTargets(agents) {
61
63
  label: agent.name,
62
64
  ...agent.description ? { description: agent.description } : {},
63
65
  iconUrl: agent.iconUrl,
66
+ ...agent.heroImageUrl ? { heroImageUrl: agent.heroImageUrl } : {},
64
67
  ...agent.owner?.avatarUrl ? {
65
68
  badge: {
66
69
  iconUrl: agent.owner.avatarUrl,
@@ -90,4 +93,4 @@ export {
90
93
  resolveAgentGUISelectedDirectoryAgent,
91
94
  projectAgentGUIAgentsToInternalTargets
92
95
  };
93
- //# sourceMappingURL=chunk-O6W72SEP.js.map
96
+ //# sourceMappingURL=chunk-C35SNDVZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../agents.ts"],"sourcesContent":["import type {\n AgentGUIAgent,\n AgentGUIAgentAvailabilityStatus,\n AgentGUIAgentTarget\n} from \"./types.ts\";\n\nexport function normalizeAgentGUIAgents(\n agents: readonly AgentGUIAgent[] | null | undefined\n): AgentGUIAgent[] {\n const normalized: AgentGUIAgent[] = [];\n const seenAgentTargetIds = new Set<string>();\n for (const agent of agents ?? []) {\n const agentTargetId = agent.agentTargetId.trim();\n const name = agent.name.trim();\n const iconUrl = agent.iconUrl.trim();\n const heroImageUrl = agent.heroImageUrl?.trim() ?? \"\";\n if (\n !agentTargetId ||\n !name ||\n !iconUrl ||\n seenAgentTargetIds.has(agentTargetId)\n ) {\n continue;\n }\n seenAgentTargetIds.add(agentTargetId);\n const ownerName = agent.owner?.name?.trim() ?? \"\";\n const ownerAvatarUrl = agent.owner?.avatarUrl?.trim() ?? \"\";\n const reason = agent.availability.reason?.trim() ?? \"\";\n normalized.push({\n agentTargetId,\n name,\n iconUrl,\n ...(heroImageUrl ? { heroImageUrl } : {}),\n ...(agent.description?.trim()\n ? { description: agent.description.trim() }\n : {}),\n ...(ownerName || ownerAvatarUrl\n ? {\n owner: {\n ...(ownerName ? { name: ownerName } : {}),\n ...(ownerAvatarUrl ? { avatarUrl: ownerAvatarUrl } : {})\n }\n }\n : {}),\n availability: {\n status: normalizeAgentGUIAgentAvailabilityStatus(\n agent.availability.status\n ),\n ...(reason ? { reason } : {}),\n ...(agent.availability.pendingAction\n ? { pendingAction: agent.availability.pendingAction }\n : {})\n },\n provider: agent.provider\n });\n }\n return normalized;\n}\n\nexport function agentGUIAgentIsReady(agent: AgentGUIAgent): boolean {\n return agent.availability.status === \"ready\";\n}\n\nexport function resolveAgentGUISelectedDirectoryAgent(input: {\n agents: readonly AgentGUIAgent[];\n agentTargetId?: string | null;\n defaultAgentTargetId?: string | null;\n}): AgentGUIAgent | null {\n const explicitAgentTargetId =\n input.agentTargetId?.trim() || input.defaultAgentTargetId?.trim() || \"\";\n if (explicitAgentTargetId) {\n return (\n input.agents.find(\n (agent) => agent.agentTargetId === explicitAgentTargetId\n ) ?? null\n );\n }\n return (\n input.agents.find((agent) => agentGUIAgentIsReady(agent)) ??\n input.agents[0] ??\n null\n );\n}\n\n/** Package-internal bridge while the carried node is migrated to agent names. */\nexport function projectAgentGUIAgentsToInternalTargets(\n agents: readonly AgentGUIAgent[]\n): AgentGUIAgentTarget[] {\n return agents.map((agent) => ({\n targetId: agent.agentTargetId,\n agentTargetId: agent.agentTargetId,\n provider: agent.provider,\n ref: {\n kind: \"agent-directory\",\n provider: agent.provider,\n agentTargetId: agent.agentTargetId\n },\n label: agent.name,\n ...(agent.description ? { description: agent.description } : {}),\n iconUrl: agent.iconUrl,\n ...(agent.heroImageUrl ? { heroImageUrl: agent.heroImageUrl } : {}),\n ...(agent.owner?.avatarUrl\n ? {\n badge: {\n iconUrl: agent.owner.avatarUrl,\n ...(agent.owner.name ? { label: agent.owner.name } : {})\n }\n }\n : {}),\n ...(agent.owner?.name ? { ownerLabel: agent.owner.name } : {}),\n ...(agent.availability.status !== \"ready\" ? { disabled: true } : {}),\n ...(agent.availability.reason\n ? { unavailableReason: agent.availability.reason }\n : {})\n }));\n}\n\nfunction normalizeAgentGUIAgentAvailabilityStatus(\n status: AgentGUIAgentAvailabilityStatus\n): AgentGUIAgentAvailabilityStatus {\n switch (status) {\n case \"ready\":\n case \"checking\":\n case \"coming_soon\":\n case \"not_installed\":\n case \"auth_required\":\n case \"unavailable\":\n return status;\n }\n}\n"],"mappings":";AAMO,SAAS,wBACd,QACiB;AACjB,QAAM,aAA8B,CAAC;AACrC,QAAM,qBAAqB,oBAAI,IAAY;AAC3C,aAAW,SAAS,UAAU,CAAC,GAAG;AAChC,UAAM,gBAAgB,MAAM,cAAc,KAAK;AAC/C,UAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,UAAM,UAAU,MAAM,QAAQ,KAAK;AACnC,UAAM,eAAe,MAAM,cAAc,KAAK,KAAK;AACnD,QACE,CAAC,iBACD,CAAC,QACD,CAAC,WACD,mBAAmB,IAAI,aAAa,GACpC;AACA;AAAA,IACF;AACA,uBAAmB,IAAI,aAAa;AACpC,UAAM,YAAY,MAAM,OAAO,MAAM,KAAK,KAAK;AAC/C,UAAM,iBAAiB,MAAM,OAAO,WAAW,KAAK,KAAK;AACzD,UAAM,SAAS,MAAM,aAAa,QAAQ,KAAK,KAAK;AACpD,eAAW,KAAK;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,MACvC,GAAI,MAAM,aAAa,KAAK,IACxB,EAAE,aAAa,MAAM,YAAY,KAAK,EAAE,IACxC,CAAC;AAAA,MACL,GAAI,aAAa,iBACb;AAAA,QACE,OAAO;AAAA,UACL,GAAI,YAAY,EAAE,MAAM,UAAU,IAAI,CAAC;AAAA,UACvC,GAAI,iBAAiB,EAAE,WAAW,eAAe,IAAI,CAAC;AAAA,QACxD;AAAA,MACF,IACA,CAAC;AAAA,MACL,cAAc;AAAA,QACZ,QAAQ;AAAA,UACN,MAAM,aAAa;AAAA,QACrB;AAAA,QACA,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,QAC3B,GAAI,MAAM,aAAa,gBACnB,EAAE,eAAe,MAAM,aAAa,cAAc,IAClD,CAAC;AAAA,MACP;AAAA,MACA,UAAU,MAAM;AAAA,IAClB,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,SAAS,qBAAqB,OAA+B;AAClE,SAAO,MAAM,aAAa,WAAW;AACvC;AAEO,SAAS,sCAAsC,OAI7B;AACvB,QAAM,wBACJ,MAAM,eAAe,KAAK,KAAK,MAAM,sBAAsB,KAAK,KAAK;AACvE,MAAI,uBAAuB;AACzB,WACE,MAAM,OAAO;AAAA,MACX,CAAC,UAAU,MAAM,kBAAkB;AAAA,IACrC,KAAK;AAAA,EAET;AACA,SACE,MAAM,OAAO,KAAK,CAAC,UAAU,qBAAqB,KAAK,CAAC,KACxD,MAAM,OAAO,CAAC,KACd;AAEJ;AAGO,SAAS,uCACd,QACuB;AACvB,SAAO,OAAO,IAAI,CAAC,WAAW;AAAA,IAC5B,UAAU,MAAM;AAAA,IAChB,eAAe,MAAM;AAAA,IACrB,UAAU,MAAM;AAAA,IAChB,KAAK;AAAA,MACH,MAAM;AAAA,MACN,UAAU,MAAM;AAAA,MAChB,eAAe,MAAM;AAAA,IACvB;AAAA,IACA,OAAO,MAAM;AAAA,IACb,GAAI,MAAM,cAAc,EAAE,aAAa,MAAM,YAAY,IAAI,CAAC;AAAA,IAC9D,SAAS,MAAM;AAAA,IACf,GAAI,MAAM,eAAe,EAAE,cAAc,MAAM,aAAa,IAAI,CAAC;AAAA,IACjE,GAAI,MAAM,OAAO,YACb;AAAA,MACE,OAAO;AAAA,QACL,SAAS,MAAM,MAAM;AAAA,QACrB,GAAI,MAAM,MAAM,OAAO,EAAE,OAAO,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,MACxD;AAAA,IACF,IACA,CAAC;AAAA,IACL,GAAI,MAAM,OAAO,OAAO,EAAE,YAAY,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,IAC5D,GAAI,MAAM,aAAa,WAAW,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,IAClE,GAAI,MAAM,aAAa,SACnB,EAAE,mBAAmB,MAAM,aAAa,OAAO,IAC/C,CAAC;AAAA,EACP,EAAE;AACJ;AAEA,SAAS,yCACP,QACiC;AACjC,UAAQ,QAAQ;AAAA,IACd,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,EACX;AACF;","names":[]}
@@ -2,7 +2,7 @@ import {
2
2
  agentGuiWorkbenchProviders,
3
3
  isAgentGuiWorkbenchProvider,
4
4
  normalizeAgentGuiWorkbenchProvider
5
- } from "./chunk-UQJPV6HP.js";
5
+ } from "./chunk-L3GMMGRS.js";
6
6
 
7
7
  // workbench/state.ts
8
8
  function createDefaultAgentGuiWorkbenchNodeState(provider = "codex") {
@@ -57,10 +57,7 @@ function areAgentGuiWorkbenchStatesEqual(left, right) {
57
57
  }
58
58
  function normalizeAgentGuiWorkbenchNodeState(state, fallbackProvider = "codex") {
59
59
  const persistedState = isRecord(state) ? state : {};
60
- const provider = normalizeAgentGuiWorkbenchProvider(
61
- persistedState.provider,
62
- fallbackProvider
63
- );
60
+ const provider = persistedState.provider === void 0 || persistedState.provider === null ? fallbackProvider : normalizeAgentGuiWorkbenchProvider(persistedState.provider);
64
61
  return {
65
62
  ...createDefaultAgentGuiWorkbenchNodeState(provider),
66
63
  agentTargetId: normalizeOptionalNonEmptyString(
@@ -306,4 +303,4 @@ export {
306
303
  agentGuiWorkbenchProviderFromInstanceIdOrNull,
307
304
  createAgentGuiWorkbenchNodeStateSource
308
305
  };
309
- //# sourceMappingURL=chunk-WEDMAVX2.js.map
306
+ //# sourceMappingURL=chunk-IYEXLOUE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../workbench/state.ts"],"sourcesContent":["import type {\n WorkbenchHostExternalStateLookupInput,\n WorkbenchHostExternalStateSource\n} from \"@tutti-os/workbench-surface\";\nimport {\n agentGuiWorkbenchProviders,\n isAgentGuiWorkbenchProvider,\n normalizeAgentGuiWorkbenchProvider\n} from \"./providerCatalog.ts\";\nimport type {\n AgentGuiWorkbenchComposerOverrides,\n AgentGuiWorkbenchComposerOverridesByAgentTargetId,\n AgentGuiWorkbenchComposerOverridesByProvider,\n AgentGuiWorkbenchNodeState,\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState,\n AgentGuiWorkbenchWorkspaceState\n} from \"./types.ts\";\n\ntype AgentGuiWorkbenchStateLookupRequest = Pick<\n WorkbenchHostExternalStateLookupInput,\n \"instanceId\" | \"typeId\"\n> &\n Partial<Pick<WorkbenchHostExternalStateLookupInput, \"nodeId\">>;\n\nexport function createDefaultAgentGuiWorkbenchNodeState(\n provider: AgentGuiWorkbenchProvider = \"codex\"\n): AgentGuiWorkbenchNodeState {\n return {\n agentTargetId: null,\n composerOverrides: null,\n composerOverridesByAgentTargetId: null,\n composerOverridesByProvider: null,\n conversationCount: null,\n conversationRailCollapsed: false,\n conversationRailWidthPx: null,\n lastActiveAgentSessionId: null,\n provider\n };\n}\n\nexport function normalizeAgentGuiWorkbenchState(\n state: unknown\n): AgentGuiWorkbenchState {\n if (!isRecord(state)) {\n return createDefaultAgentGuiWorkbenchState();\n }\n const agentTargetId = normalizeOptionalNonEmptyString(state.agentTargetId);\n return {\n ...(agentTargetId ? { agentTargetId } : {}),\n conversationRailCollapsed: state.conversationRailCollapsed === true,\n conversationRailWidthPx: normalizeOptionalPositiveNumber(\n state.conversationRailWidthPx\n ),\n lastActiveAgentSessionId:\n typeof state.lastActiveAgentSessionId === \"string\"\n ? state.lastActiveAgentSessionId\n : null\n };\n}\n\n/**\n * One-time persisted-state reader for snapshots written before agentTargetId\n * became the canonical AgentGUI selection key. Current-state normalizers stay\n * strict so live callers cannot continue using the removed alias.\n */\nexport function migrateLegacyAgentGuiWorkbenchState(state: unknown): unknown {\n if (\n !isRecord(state) ||\n normalizeOptionalNonEmptyString(state.agentTargetId)\n ) {\n return state;\n }\n const legacyAgentTargetId = normalizeOptionalNonEmptyString(\n state.providerTargetId\n );\n return legacyAgentTargetId\n ? { ...state, agentTargetId: legacyAgentTargetId }\n : state;\n}\n\nexport function projectAgentGuiWorkbenchState(\n state: AgentGuiWorkbenchNodeState\n): AgentGuiWorkbenchState {\n const agentTargetId = normalizeOptionalNonEmptyString(state.agentTargetId);\n return {\n ...(agentTargetId ? { agentTargetId } : {}),\n conversationRailCollapsed: state.conversationRailCollapsed === true,\n conversationRailWidthPx: normalizeOptionalPositiveNumber(\n state.conversationRailWidthPx\n ),\n lastActiveAgentSessionId: state.lastActiveAgentSessionId ?? null\n };\n}\n\nexport function areAgentGuiWorkbenchStatesEqual(\n left: AgentGuiWorkbenchState,\n right: AgentGuiWorkbenchState\n): boolean {\n return (\n (left.agentTargetId ?? null) === (right.agentTargetId ?? null) &&\n left.conversationRailCollapsed === right.conversationRailCollapsed &&\n left.conversationRailWidthPx === right.conversationRailWidthPx &&\n left.lastActiveAgentSessionId === right.lastActiveAgentSessionId\n );\n}\n\nexport function normalizeAgentGuiWorkbenchNodeState(\n state: unknown,\n fallbackProvider: AgentGuiWorkbenchProvider = \"codex\"\n): AgentGuiWorkbenchNodeState {\n const persistedState = isRecord(state) ? state : {};\n const provider =\n persistedState.provider === undefined || persistedState.provider === null\n ? fallbackProvider\n : normalizeAgentGuiWorkbenchProvider(persistedState.provider);\n return {\n ...createDefaultAgentGuiWorkbenchNodeState(provider),\n agentTargetId: normalizeOptionalNonEmptyString(\n persistedState.agentTargetId\n ),\n composerOverrides: normalizeAgentGuiWorkbenchComposerOverrides(\n persistedState.composerOverrides\n ),\n composerOverridesByAgentTargetId:\n normalizeAgentGuiWorkbenchComposerOverridesByAgentTargetId(\n persistedState.composerOverridesByAgentTargetId\n ),\n composerOverridesByProvider:\n normalizeAgentGuiWorkbenchComposerOverridesByProvider(\n persistedState.composerOverridesByProvider\n ),\n conversationCount: normalizeOptionalNonNegativeNumber(\n persistedState.conversationCount\n ),\n conversationRailCollapsed:\n persistedState.conversationRailCollapsed === true,\n conversationRailWidthPx: normalizeOptionalPositiveNumber(\n persistedState.conversationRailWidthPx\n ),\n lastActiveAgentSessionId:\n typeof persistedState.lastActiveAgentSessionId === \"string\"\n ? persistedState.lastActiveAgentSessionId\n : null,\n provider\n };\n}\n\nexport function areAgentGuiWorkbenchNodeStatesEqual(\n left: AgentGuiWorkbenchNodeState,\n right: AgentGuiWorkbenchNodeState\n): boolean {\n return (\n (left.agentTargetId ?? null) === (right.agentTargetId ?? null) &&\n composerOverridesEqual(left.composerOverrides, right.composerOverrides) &&\n composerOverridesByAgentTargetIdEqual(\n left.composerOverridesByAgentTargetId,\n right.composerOverridesByAgentTargetId\n ) &&\n composerOverridesByProviderEqual(\n left.composerOverridesByProvider,\n right.composerOverridesByProvider\n ) &&\n left.conversationCount === right.conversationCount &&\n left.conversationRailCollapsed === right.conversationRailCollapsed &&\n left.conversationRailWidthPx === right.conversationRailWidthPx &&\n left.lastActiveAgentSessionId === right.lastActiveAgentSessionId &&\n left.provider === right.provider &&\n (left.agentTargetId ?? null) === (right.agentTargetId ?? null)\n );\n}\n\nexport function agentGuiWorkbenchProviderFromInstanceId(\n instanceId: string | null | undefined\n): AgentGuiWorkbenchProvider {\n const provider = agentGuiWorkbenchProviderFromInstanceIdOrNull(instanceId);\n if (!provider) {\n throw new Error(\"agent_gui_workbench.instance_provider_required\");\n }\n return provider;\n}\n\n/**\n * Like {@link agentGuiWorkbenchProviderFromInstanceId} but returns `null`\n * instead of defaulting to `\"codex\"` when the provider cannot be determined\n * yet (e.g. a freshly created session whose instanceId does not encode a\n * provider). Callers that render a provider icon use this so they can show a\n * neutral placeholder during that transient window instead of flashing the\n * wrong provider's icon.\n */\nexport function agentGuiWorkbenchProviderFromInstanceIdOrNull(\n instanceId: string | null | undefined\n): AgentGuiWorkbenchProvider | null {\n const normalized = instanceId?.trim();\n if (!normalized || normalized === \"agent-gui\") {\n return null;\n }\n const [, provider] = normalized.split(\":\", 3);\n return isAgentGuiWorkbenchProvider(provider) ? provider : null;\n}\n\nexport function createAgentGuiWorkbenchNodeStateSource(input: {\n typeId?: string;\n workspaceId: string;\n}): {\n externalStateSource: WorkbenchHostExternalStateSource<\n AgentGuiWorkbenchState | null,\n AgentGuiWorkbenchWorkspaceState\n >;\n readNodeState: (\n request: AgentGuiWorkbenchStateLookupRequest\n ) => AgentGuiWorkbenchState | null;\n writeNodeState: (\n request: AgentGuiWorkbenchStateLookupRequest & {\n state: AgentGuiWorkbenchState;\n }\n ) => void;\n /**\n * Returns the launch instanceId of an open node currently showing the given\n * agent session, or null when none is found. Used to focus an existing\n * conversation instead of launching a duplicate node.\n */\n findInstanceIdByAgentSessionId: (agentSessionId: string) => string | null;\n} {\n const typeId = input.typeId ?? \"agent-gui\";\n const nodeStateByKey = new Map<string, AgentGuiWorkbenchState>();\n // Tracks the launch instanceId behind each state key so a node can be located\n // by the session it is currently showing, even when its key is node-scoped.\n const instanceIdByKey = new Map<string, string>();\n const listeners = new Set<() => void>();\n\n const lookupState = (request: AgentGuiWorkbenchStateLookupRequest) => {\n const nodeState = request.nodeId\n ? nodeStateByKey.get(agentGuiWorkbenchNodeStateKey(request))\n : null;\n const state =\n nodeState ??\n nodeStateByKey.get(agentGuiWorkbenchInstanceStateKey(request));\n return state ? { ...state } : null;\n };\n\n const notify = () => {\n for (const listener of listeners) {\n listener();\n }\n };\n\n return {\n externalStateSource: {\n getNodeState(request) {\n if (request.typeId !== typeId) {\n return null;\n }\n return lookupState(request);\n },\n getSnapshotNodeState(request) {\n if (request.typeId !== typeId) {\n return null;\n }\n return lookupState(request);\n },\n getWorkspaceState() {\n return {\n workspaceId: input.workspaceId\n };\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n }\n },\n readNodeState(request) {\n if (request.typeId !== typeId) {\n return null;\n }\n return lookupState(request);\n },\n findInstanceIdByAgentSessionId(agentSessionId) {\n const target = agentSessionId.trim();\n if (!target) {\n return null;\n }\n for (const [key, state] of nodeStateByKey) {\n if (state.lastActiveAgentSessionId?.trim() === target) {\n return instanceIdByKey.get(key) ?? null;\n }\n }\n return null;\n },\n writeNodeState(request) {\n if (request.typeId !== typeId) {\n return;\n }\n const key = agentGuiWorkbenchNodeStateKey(request);\n instanceIdByKey.set(key, request.instanceId);\n const previous = nodeStateByKey.get(key);\n let clearedInstanceSeed = false;\n if (request.nodeId) {\n const instanceKey = agentGuiWorkbenchInstanceStateKey(request);\n instanceIdByKey.delete(instanceKey);\n clearedInstanceSeed = nodeStateByKey.delete(instanceKey);\n }\n const next = {\n ...normalizeAgentGuiWorkbenchState(request.state)\n };\n nodeStateByKey.set(key, next);\n if (\n !clearedInstanceSeed &&\n previous &&\n areAgentGuiWorkbenchMemoryStatesEqual(previous, next)\n ) {\n return;\n }\n notify();\n }\n };\n}\n\nfunction areAgentGuiWorkbenchMemoryStatesEqual(\n left: AgentGuiWorkbenchState,\n right: AgentGuiWorkbenchState\n): boolean {\n return areAgentGuiWorkbenchStatesEqual(left, right);\n}\n\nfunction agentGuiWorkbenchNodeStateKey(\n request: Pick<WorkbenchHostExternalStateLookupInput, \"instanceId\"> &\n Partial<Pick<WorkbenchHostExternalStateLookupInput, \"nodeId\">>\n): string {\n return request.nodeId\n ? `node:${request.nodeId}`\n : agentGuiWorkbenchInstanceStateKey(request);\n}\n\nfunction agentGuiWorkbenchInstanceStateKey(\n request: Pick<WorkbenchHostExternalStateLookupInput, \"instanceId\">\n): string {\n return `instance:${request.instanceId}`;\n}\n\nfunction createDefaultAgentGuiWorkbenchState(): AgentGuiWorkbenchState {\n return {\n conversationRailCollapsed: false,\n conversationRailWidthPx: null,\n lastActiveAgentSessionId: null\n };\n}\n\nfunction normalizeOptionalNonEmptyString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction normalizeAgentGuiWorkbenchComposerOverrides(\n value: unknown\n): AgentGuiWorkbenchComposerOverrides | null {\n if (!isRecord(value)) {\n return null;\n }\n const composerOverrides: AgentGuiWorkbenchComposerOverrides = {};\n if (typeof value.model === \"string\" && value.model.trim()) {\n composerOverrides.model = value.model.trim();\n }\n if (\n typeof value.reasoningEffort === \"string\" &&\n value.reasoningEffort.trim()\n ) {\n composerOverrides.reasoningEffort = value.reasoningEffort.trim();\n }\n if (\n typeof value.permissionModeId === \"string\" &&\n value.permissionModeId.trim()\n ) {\n composerOverrides.permissionModeId = value.permissionModeId.trim();\n }\n if (typeof value.planMode === \"boolean\") {\n composerOverrides.planMode = value.planMode;\n }\n return Object.keys(composerOverrides).length > 0 ? composerOverrides : null;\n}\n\nfunction normalizeAgentGuiWorkbenchComposerOverridesByProvider(\n value: unknown\n): AgentGuiWorkbenchComposerOverridesByProvider | null {\n if (!isRecord(value)) {\n return null;\n }\n const result: AgentGuiWorkbenchComposerOverridesByProvider = {};\n for (const provider of agentGuiWorkbenchProviders) {\n const overrides = normalizeAgentGuiWorkbenchComposerOverrides(\n value[provider]\n );\n if (overrides) {\n result[provider] = overrides;\n }\n }\n return Object.keys(result).length > 0 ? result : null;\n}\n\nfunction normalizeAgentGuiWorkbenchComposerOverridesByAgentTargetId(\n value: unknown\n): AgentGuiWorkbenchComposerOverridesByAgentTargetId | null {\n if (!isRecord(value)) {\n return null;\n }\n const result: AgentGuiWorkbenchComposerOverridesByAgentTargetId = {};\n for (const [rawAgentTargetId, rawOverrides] of Object.entries(value)) {\n const agentTargetId = normalizeOptionalNonEmptyString(rawAgentTargetId);\n if (!agentTargetId) {\n continue;\n }\n const overrides = normalizeAgentGuiWorkbenchComposerOverrides(rawOverrides);\n if (overrides) {\n result[agentTargetId] = overrides;\n }\n }\n return Object.keys(result).length > 0 ? result : null;\n}\n\nfunction normalizeOptionalPositiveNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0\n ? Math.round(value)\n : null;\n}\n\nfunction normalizeOptionalNonNegativeNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? Math.round(value)\n : null;\n}\n\nfunction composerOverridesEqual(\n left: AgentGuiWorkbenchComposerOverrides | null | undefined,\n right: AgentGuiWorkbenchComposerOverrides | null | undefined\n): boolean {\n return (\n (left?.model ?? null) === (right?.model ?? null) &&\n (left?.permissionModeId ?? null) === (right?.permissionModeId ?? null) &&\n (left?.planMode ?? null) === (right?.planMode ?? null) &&\n (left?.reasoningEffort ?? null) === (right?.reasoningEffort ?? null)\n );\n}\n\nfunction composerOverridesByProviderEqual(\n left: AgentGuiWorkbenchComposerOverridesByProvider | null | undefined,\n right: AgentGuiWorkbenchComposerOverridesByProvider | null | undefined\n): boolean {\n for (const provider of agentGuiWorkbenchProviders) {\n if (!composerOverridesEqual(left?.[provider], right?.[provider])) {\n return false;\n }\n }\n return true;\n}\n\nfunction composerOverridesByAgentTargetIdEqual(\n left: AgentGuiWorkbenchComposerOverridesByAgentTargetId | null | undefined,\n right: AgentGuiWorkbenchComposerOverridesByAgentTargetId | null | undefined\n): boolean {\n const leftKeys = Object.keys(left ?? {}).sort();\n const rightKeys = Object.keys(right ?? {}).sort();\n if (leftKeys.length !== rightKeys.length) {\n return false;\n }\n return leftKeys.every(\n (key, index) =>\n key === rightKeys[index] &&\n composerOverridesEqual(left?.[key], right?.[key])\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n"],"mappings":"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","names":[]}
@@ -12,7 +12,19 @@ var enAgentGuiProviderIdentity = {
12
12
  conversationFilterCursor: "Cursor",
13
13
  conversationFilterNexight: "Nexight",
14
14
  conversationFilterHermes: "Hermes Agent",
15
- conversationFilterOpenClaw: "OpenClaw"
15
+ conversationFilterOpenClaw: "OpenClaw",
16
+ manageAgents: "Agent Sidebar Display Settings",
17
+ manageAgentsTitle: "Agent Sidebar Display Settings",
18
+ manageAgentsDescription: "Drag to reorder or move agents between the available and disabled groups. Press and hold an agent to edit.",
19
+ manageAgentsAvailable: "Available Agents",
20
+ manageAgentsDisabled: "Disabled Agents",
21
+ manageAgentsNoAvailable: "Add an agent from the disabled list below.",
22
+ manageAgentsNoDisabled: "Drag agents you don\u2019t want to show in the sidebar here.",
23
+ manageAgentsKeepOneAvailable: "Keep at least one agent available.",
24
+ manageAgentsRunningBlocked: "{{agent}} is running and can't be disabled. Wait for it to finish and try again.",
25
+ removeAgentFromSidebar: "Remove {{agent}} from sidebar",
26
+ addAgentToSidebar: "Add {{agent}} to sidebar",
27
+ dragAgentToReorder: "Drag {{agent}} to reorder"
16
28
  };
17
29
 
18
30
  // app/renderer/i18n/locales/en.agentGuiRuntimeNotices.ts
@@ -220,6 +232,7 @@ var enAgentGui = {
220
232
  planModeOffLabel: "Off",
221
233
  planUnavailable: "Plan unavailable",
222
234
  queuedLabel: "Queued",
235
+ queuePausedByUserLabel: "The queue is paused because you interrupted the current response.",
223
236
  sendQueuedPromptNext: "Send next",
224
237
  editQueuedPrompt: "Edit",
225
238
  deleteQueuedPrompt: "Delete",
@@ -268,6 +281,7 @@ var enAgentGui = {
268
281
  pastedTextFilesHeader: "Referenced pasted text files:",
269
282
  pastedTextFileLine: '- pasted text file "{{preview}}": {{path}}. Read this file before continuing.',
270
283
  pastedTextAttachmentTitle: "Pasted text",
284
+ pastedTextAttachmentFailed: "Pasted text couldn't be saved",
271
285
  pastedTextRestoreToComposer: "Show in text field",
272
286
  copyMessage: "Copy message",
273
287
  copyImage: "Copy image",
@@ -377,6 +391,8 @@ var enAgentGui = {
377
391
  loadingConversation: "Loading session...",
378
392
  scrollToBottom: "Scroll to bottom",
379
393
  searchNoConversations: "No related sessions",
394
+ searchFailed: "Could not search sessions",
395
+ retrySearch: "Retry search",
380
396
  conversationUnavailable: "Session unavailable.",
381
397
  contextPickerBrowseHint: "Search workspace files based on your input",
382
398
  contextPickerBrowseFileHint: "No opened or Agent-generated files yet. Type a file name to search your computer.",
@@ -597,6 +613,7 @@ var enAgentGui = {
597
613
  loadMore: "Load more",
598
614
  loadMoreGroups: "Load more",
599
615
  loading: "Loading...",
616
+ loadError: "Couldn't load this content. Try again later.",
600
617
  previewBinary: "This file looks like binary content.",
601
618
  previewDecodeFailed: "This file couldn't be decoded as UTF-8 text.",
602
619
  previewError: "Couldn't load a preview.",
@@ -2519,7 +2536,19 @@ var zhCNAgentGuiProviderIdentity = {
2519
2536
  conversationFilterCursor: "Cursor",
2520
2537
  conversationFilterNexight: "Nexight",
2521
2538
  conversationFilterHermes: "Hermes Agent",
2522
- conversationFilterOpenClaw: "OpenClaw"
2539
+ conversationFilterOpenClaw: "OpenClaw",
2540
+ manageAgents: "Agent \u680F\u5C55\u793A\u8BBE\u7F6E",
2541
+ manageAgentsTitle: "Agent \u680F\u5C55\u793A\u8BBE\u7F6E",
2542
+ manageAgentsDescription: "\u62D6\u62FD\u8C03\u6574\u987A\u5E8F\u6216\u5728\u53EF\u7528\u4E0E\u505C\u7528\u5206\u7EC4\u95F4\u79FB\u52A8\uFF0C\u957F\u6309 Agent \u53EF\u8FDB\u5165\u7F16\u8F91\u3002",
2543
+ manageAgentsAvailable: "\u53EF\u7528 Agent",
2544
+ manageAgentsDisabled: "\u505C\u7528 Agent",
2545
+ manageAgentsNoAvailable: "\u53EF\u4ECE\u4E0B\u65B9\u505C\u7528\u5217\u8868\u6DFB\u52A0 Agent\u3002",
2546
+ manageAgentsNoDisabled: "\u53EF\u4EE5\u628A\u4E0D\u5E0C\u671B\u5C55\u793A\u5728\u4FA7\u8FB9\u680F\u7684agent\u62D6\u5230\u8FD9\u91CC",
2547
+ manageAgentsKeepOneAvailable: "\u81F3\u5C11\u4FDD\u7559\u4E00\u4E2A\u53EF\u7528 Agent\u3002",
2548
+ manageAgentsRunningBlocked: "{{agent}} \u6B63\u5728\u8FD0\u884C\uFF0C\u6682\u65F6\u65E0\u6CD5\u505C\u7528\u3002\u8BF7\u7B49\u5F85\u4EFB\u52A1\u7ED3\u675F\u540E\u518D\u8BD5\u3002",
2549
+ removeAgentFromSidebar: "\u4ECE\u5DE6\u4FA7\u680F\u79FB\u9664 {{agent}}",
2550
+ addAgentToSidebar: "\u5C06 {{agent}} \u6DFB\u52A0\u5230\u5DE6\u4FA7\u680F",
2551
+ dragAgentToReorder: "\u62D6\u62FD {{agent}} \u8C03\u6574\u987A\u5E8F"
2523
2552
  };
2524
2553
 
2525
2554
  // app/renderer/i18n/locales/zh-CN.agentGuiRuntimeNotices.ts
@@ -2727,6 +2756,7 @@ var zhCNAgentGui = {
2727
2756
  planModeOffLabel: "\u5173\u95ED",
2728
2757
  planUnavailable: "\u89C4\u5212\u6A21\u5F0F\u4E0D\u53EF\u7528",
2729
2758
  queuedLabel: "\u6392\u961F\u4E2D",
2759
+ queuePausedByUserLabel: "\u7531\u4E8E\u4F60\u4E2D\u65AD\u4E86\u5F53\u524D\u54CD\u5E94\uFF0C\u961F\u5217\u5DF2\u6682\u505C",
2730
2760
  sendQueuedPromptNext: "\u76F4\u63A5\u53D1\u9001",
2731
2761
  editQueuedPrompt: "\u7F16\u8F91",
2732
2762
  deleteQueuedPrompt: "\u5220\u9664",
@@ -2775,6 +2805,7 @@ var zhCNAgentGui = {
2775
2805
  pastedTextFilesHeader: "\u5F15\u7528\u7684\u7C98\u8D34\u6587\u672C\u6587\u4EF6\uFF1A",
2776
2806
  pastedTextFileLine: '- \u7C98\u8D34\u7684\u6587\u672C\u6587\u4EF6 "{{preview}}"\uFF1A{{path}}\uFF0C\u7EE7\u7EED\u524D\u8BF7\u5148\u9605\u8BFB\u6B64\u6587\u4EF6\u3002',
2777
2807
  pastedTextAttachmentTitle: "\u7C98\u8D34\u7684\u6587\u672C",
2808
+ pastedTextAttachmentFailed: "\u65E0\u6CD5\u4FDD\u5B58\u7C98\u8D34\u7684\u6587\u672C",
2778
2809
  pastedTextRestoreToComposer: "\u5728\u6587\u672C\u6846\u4E2D\u663E\u793A",
2779
2810
  copyMessage: "\u590D\u5236\u6D88\u606F",
2780
2811
  copyImage: "\u590D\u5236\u56FE\u7247",
@@ -2884,6 +2915,8 @@ var zhCNAgentGui = {
2884
2915
  loadingConversation: "\u6B63\u5728\u52A0\u8F7D\u4F1A\u8BDD...",
2885
2916
  scrollToBottom: "\u6EDA\u52A8\u81F3\u5E95\u90E8",
2886
2917
  searchNoConversations: "\u6682\u65E0\u76F8\u5173\u4F1A\u8BDD",
2918
+ searchFailed: "\u65E0\u6CD5\u641C\u7D22\u4F1A\u8BDD",
2919
+ retrySearch: "\u91CD\u8BD5\u641C\u7D22",
2887
2920
  conversationUnavailable: "\u4F1A\u8BDD\u4E0D\u53EF\u7528\u3002",
2888
2921
  contextPickerBrowseHint: "\u6839\u636E\u4F60\u8F93\u5165\u7684\u5185\u5BB9\u641C\u7D22\u5DE5\u4F5C\u533A\u6587\u4EF6",
2889
2922
  contextPickerBrowseFileHint: "\u6682\u65E0\u5DF2\u6253\u5F00\u6216 Agent \u751F\u6210\u7684\u6587\u4EF6\uFF0C\u7EE7\u7EED\u8F93\u5165\u6587\u4EF6\u540D\u53EF\u641C\u7D22\u672C\u673A\u6587\u4EF6",
@@ -3104,6 +3137,7 @@ var zhCNAgentGui = {
3104
3137
  loadMore: "\u52A0\u8F7D\u66F4\u591A",
3105
3138
  loadMoreGroups: "\u62C9\u53D6\u66F4\u591A",
3106
3139
  loading: "\u6B63\u5728\u52A0\u8F7D",
3140
+ loadError: "\u52A0\u8F7D\u5185\u5BB9\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
3107
3141
  previewBinary: "\u8FD9\u4E2A\u6587\u4EF6\u66F4\u50CF\u4E8C\u8FDB\u5236\u5185\u5BB9",
3108
3142
  previewDecodeFailed: "\u6682\u65F6\u65E0\u6CD5\u6309 UTF-8 \u6587\u672C\u89E3\u7801\u8FD9\u4E2A\u6587\u4EF6",
3109
3143
  previewError: "\u52A0\u8F7D\u9884\u89C8\u5931\u8D25",
@@ -5076,4 +5110,4 @@ export {
5076
5110
  translateInUiLanguage,
5077
5111
  getActiveUiLanguage
5078
5112
  };
5079
- //# sourceMappingURL=chunk-AOS2VWU6.js.map
5113
+ //# sourceMappingURL=chunk-K2NURZ7V.js.map