@tutti-os/agent-gui 0.0.64 → 0.0.66

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 (89) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +1 -1
  3. package/dist/agent-conversation/index.d.ts +2 -2
  4. package/dist/agent-conversation/index.js +6 -6
  5. package/dist/agent-message-center/index.js +8 -8
  6. package/dist/{agentGuiNodeTypes-CCjzXdTe.d.ts → agentGuiNodeTypes-B9Aq3UEU.d.ts} +3 -1
  7. package/dist/app/renderer/agentactivity.css +46 -3
  8. package/dist/{chunk-IIXCU2UU.js → chunk-6ULTMCKP.js} +2 -2
  9. package/dist/{chunk-52VZ54WH.js → chunk-CTJQTUQ3.js} +6 -6
  10. package/dist/{chunk-52VZ54WH.js.map → chunk-CTJQTUQ3.js.map} +1 -1
  11. package/dist/{chunk-PVVM7MZZ.js → chunk-DL6BMEHI.js} +2 -2
  12. package/dist/{chunk-TFPKI4XJ.js → chunk-DXVMRZHH.js} +2 -6
  13. package/dist/chunk-DXVMRZHH.js.map +1 -0
  14. package/dist/{chunk-76GTKO4Q.js → chunk-HNODQVG2.js} +2 -2
  15. package/dist/{chunk-RDRKIMAC.js → chunk-JTFWT6DK.js} +7 -9
  16. package/dist/chunk-JTFWT6DK.js.map +1 -0
  17. package/dist/{chunk-MQ6RKXXW.js → chunk-KRJF7WLJ.js} +15 -3
  18. package/dist/chunk-KRJF7WLJ.js.map +1 -0
  19. package/dist/{chunk-FUJ73PTH.js → chunk-LJE2W4EM.js} +3 -5
  20. package/dist/chunk-LJE2W4EM.js.map +1 -0
  21. package/dist/{chunk-YFTQK2G4.js → chunk-LQHYHF36.js} +7 -7
  22. package/dist/chunk-LQHYHF36.js.map +1 -0
  23. package/dist/{chunk-TG3ZXLPM.js → chunk-MYD37I32.js} +27 -3
  24. package/dist/chunk-MYD37I32.js.map +1 -0
  25. package/dist/{chunk-ERWDRI3F.js → chunk-N4I3TD4G.js} +2 -2
  26. package/dist/{chunk-ERWDRI3F.js.map → chunk-N4I3TD4G.js.map} +1 -1
  27. package/dist/{chunk-FLTLZGIN.js → chunk-NOTZW5WH.js} +3 -3
  28. package/dist/{chunk-YUMHFZ5A.js → chunk-P5C3ED3V.js} +3 -2
  29. package/dist/chunk-P5C3ED3V.js.map +1 -0
  30. package/dist/{chunk-TT2YJNEP.js → chunk-T3KGZV35.js} +50 -12
  31. package/dist/chunk-T3KGZV35.js.map +1 -0
  32. package/dist/{chunk-F6GDUU4X.js → chunk-UBBHWDMP.js} +13 -9
  33. package/dist/{chunk-F6GDUU4X.js.map → chunk-UBBHWDMP.js.map} +1 -1
  34. package/dist/{chunk-3NSUJ7OF.js → chunk-UI3YDJTC.js} +39 -5
  35. package/dist/chunk-UI3YDJTC.js.map +1 -0
  36. package/dist/{chunk-C465B7WK.js → chunk-VBTPXEFH.js} +2 -2
  37. package/dist/{chunk-ZTZ6STJZ.js → chunk-Z26P2QNT.js} +2 -2
  38. package/dist/context-mention-palette/index.js +7 -7
  39. package/dist/i18n/index.d.ts +14 -2
  40. package/dist/i18n/index.js +2 -2
  41. package/dist/index.d.ts +37 -5
  42. package/dist/index.js +750 -774
  43. package/dist/index.js.map +1 -1
  44. package/dist/queued-prompt-runtime.d.ts +22 -3
  45. package/dist/queued-prompt-runtime.js +1 -1
  46. package/dist/{types-BAPEle8b.d.ts → types-Bxn8bLEp.d.ts} +14 -1
  47. package/dist/workbench/contribution.d.ts +1 -1
  48. package/dist/workbench/contribution.js +5 -5
  49. package/dist/workbench/index.d.ts +1 -1
  50. package/dist/workbench/index.js +8 -8
  51. package/dist/workbench/launch.d.ts +3 -1
  52. package/dist/workbench/launch.js +1 -1
  53. package/dist/workbench/providerCatalog.d.ts +1 -1
  54. package/dist/workbench/sessionTitle.d.ts +1 -1
  55. package/dist/workbench/sessionTitle.js +3 -3
  56. package/dist/workbench/state.d.ts +1 -1
  57. package/dist/workbench/state.js +2 -2
  58. package/dist/workbench/types.d.ts +1 -1
  59. package/dist/workspace-agent-generated-files.js +3 -3
  60. package/package.json +12 -12
  61. package/dist/app/renderer/assets/icons/@-lined-14px.svg +0 -3
  62. package/dist/app/renderer/assets/icons/agents/manage-agent-claude-code.png +0 -0
  63. package/dist/app/renderer/assets/icons/agents/manage-agent-codex.png +0 -0
  64. package/dist/app/renderer/assets/icons/agents/manage-agent-gemini.png +0 -0
  65. package/dist/app/renderer/assets/icons/agents/manage-agent-hermes.png +0 -0
  66. package/dist/app/renderer/assets/icons/agents/manage-agent-openclaw.png +0 -0
  67. package/dist/app/renderer/assets/icons/agents/tutti-doc-rounded.png +0 -0
  68. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-claude-code.png +0 -0
  69. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-codex.png +0 -0
  70. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-gemini.png +0 -0
  71. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-nexight.png +0 -0
  72. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-openclaw.png +0 -0
  73. package/dist/app/renderer/assets/icons/arrow-left-filled.svg +0 -1
  74. package/dist/chunk-3NSUJ7OF.js.map +0 -1
  75. package/dist/chunk-FUJ73PTH.js.map +0 -1
  76. package/dist/chunk-MQ6RKXXW.js.map +0 -1
  77. package/dist/chunk-RDRKIMAC.js.map +0 -1
  78. package/dist/chunk-TFPKI4XJ.js.map +0 -1
  79. package/dist/chunk-TG3ZXLPM.js.map +0 -1
  80. package/dist/chunk-TT2YJNEP.js.map +0 -1
  81. package/dist/chunk-YFTQK2G4.js.map +0 -1
  82. package/dist/chunk-YUMHFZ5A.js.map +0 -1
  83. package/dist/cursor-flat-filled-CL7N3BTZ.svg +0 -3
  84. /package/dist/{chunk-IIXCU2UU.js.map → chunk-6ULTMCKP.js.map} +0 -0
  85. /package/dist/{chunk-PVVM7MZZ.js.map → chunk-DL6BMEHI.js.map} +0 -0
  86. /package/dist/{chunk-76GTKO4Q.js.map → chunk-HNODQVG2.js.map} +0 -0
  87. /package/dist/{chunk-FLTLZGIN.js.map → chunk-NOTZW5WH.js.map} +0 -0
  88. /package/dist/{chunk-C465B7WK.js.map → chunk-VBTPXEFH.js.map} +0 -0
  89. /package/dist/{chunk-ZTZ6STJZ.js.map → chunk-Z26P2QNT.js.map} +0 -0
@@ -5,11 +5,11 @@ import {
5
5
  import {
6
6
  getAgentCustomMentionKind,
7
7
  managedAgentRoundedIconUrl
8
- } from "./chunk-ERWDRI3F.js";
8
+ } from "./chunk-N4I3TD4G.js";
9
9
  import {
10
10
  translate,
11
11
  useTranslation
12
- } from "./chunk-IIXCU2UU.js";
12
+ } from "./chunk-6ULTMCKP.js";
13
13
 
14
14
  // agent-gui/agentGuiNode/agentRichText/agentFileMentionExtension.ts
15
15
  import { mergeAttributes, Node } from "@tiptap/core";
@@ -1437,4 +1437,4 @@ export {
1437
1437
  mentionItemToAttrs,
1438
1438
  attrsToMentionItem
1439
1439
  };
1440
- //# sourceMappingURL=chunk-FLTLZGIN.js.map
1440
+ //# sourceMappingURL=chunk-NOTZW5WH.js.map
@@ -75,6 +75,7 @@ function createAgentGuiWorkbenchSessionLaunchRequest(input) {
75
75
  return {
76
76
  dockEntryId: agentGuiWorkbenchDockEntryId(provider),
77
77
  payload: {
78
+ ...input.agentTargetId?.trim() ? { agentTargetId: input.agentTargetId.trim() } : {},
78
79
  ...input.agentSessionId ? { agentSessionId: input.agentSessionId } : {},
79
80
  ...input.openInNewWindow ? { openInNewWindow: true } : {},
80
81
  provider
@@ -134,7 +135,7 @@ function createAgentGuiWorkbenchLaunchDescriptor(request) {
134
135
  const targetAgentSessionId = agentSessionIdFromLaunchPayload(request.payload);
135
136
  const openInNewWindow = openInNewWindowFromLaunchPayload(request.payload);
136
137
  const instanceId = createAgentGuiWorkbenchInstanceId({
137
- agentSessionId: openInNewWindow ? null : targetAgentSessionId,
138
+ agentSessionId: null,
138
139
  agentTargetId: openInNewWindow ? null : agentTargetIdFromLaunchPayload(request.payload),
139
140
  provider
140
141
  });
@@ -236,4 +237,4 @@ export {
236
237
  resolveAgentGuiWorkbenchLaunchDockEntryId,
237
238
  shouldReuseAgentGuiWorkbenchDockEntryNode
238
239
  };
239
- //# sourceMappingURL=chunk-YUMHFZ5A.js.map
240
+ //# sourceMappingURL=chunk-P5C3ED3V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../workbench/launch.ts"],"sourcesContent":["import type { WorkbenchHostLaunchRequest } from \"@tutti-os/workbench-surface\";\nimport {\n isAgentGuiWorkbenchProvider,\n normalizeAgentGuiWorkbenchProvider\n} from \"./providerCatalog.ts\";\nimport {\n agentGuiWorkbenchOpenSessionActivationType,\n agentGuiWorkbenchPrefillPromptActivationType,\n type AgentGuiWorkbenchPrefillPromptPayload,\n type AgentGuiWorkbenchProvider\n} from \"./types.ts\";\n\nexport { agentGuiWorkbenchPrefillPromptActivationType } from \"./types.ts\";\n\ntype AgentGuiWorkbenchLaunchRequestInput = Pick<\n WorkbenchHostLaunchRequest,\n \"payload\" | \"typeId\"\n> & {\n dockEntryId?: string | null;\n};\n\nexport const agentGuiWorkbenchTypeId = \"agent-gui\";\n\nconst agentGuiWorkbenchDockEntryPrefix = \"agent-gui:\";\nconst agentGuiWorkbenchUnifiedDockEntryIdValue = \"agent-gui:unified\";\nlet agentGuiWorkbenchInstanceSequence = 0;\n\nexport type AgentGuiWorkbenchDockIdentity =\n | {\n kind: \"legacyProvider\";\n provider: AgentGuiWorkbenchProvider;\n }\n | {\n kind: \"unifiedAggregate\";\n };\n\nexport function agentGuiWorkbenchDockEntryId(\n provider: AgentGuiWorkbenchProvider\n): string {\n return provider === \"codex\"\n ? agentGuiWorkbenchTypeId\n : `${agentGuiWorkbenchDockEntryPrefix}${provider}`;\n}\n\nexport function agentGuiWorkbenchUnifiedDockEntryId(): string {\n return agentGuiWorkbenchUnifiedDockEntryIdValue;\n}\n\nexport function agentGuiWorkbenchInstanceId(\n provider: AgentGuiWorkbenchProvider\n): string {\n return `${agentGuiWorkbenchDockEntryPrefix}${provider}`;\n}\n\nexport function createAgentGuiWorkbenchInstanceId(input: {\n agentSessionId?: string | null;\n agentTargetId?: string | null;\n provider: AgentGuiWorkbenchProvider;\n}): string {\n const prefix = agentGuiWorkbenchInstanceId(input.provider);\n const agentSessionId = input.agentSessionId?.trim();\n if (agentSessionId) {\n return `${prefix}:session:${encodeAgentGuiWorkbenchInstanceSegment(\n agentSessionId\n )}`;\n }\n const agentTargetId = input.agentTargetId?.trim();\n if (agentTargetId) {\n return `${prefix}:target:${encodeAgentGuiWorkbenchInstanceSegment(\n agentTargetId\n )}`;\n }\n\n agentGuiWorkbenchInstanceSequence += 1;\n return [\n prefix,\n \"panel\",\n `${Date.now().toString(36)}-${agentGuiWorkbenchInstanceSequence.toString(36)}`\n ].join(\":\");\n}\n\nexport function agentGuiWorkbenchProviderFromIdentifier(\n value: string | null | undefined\n): AgentGuiWorkbenchProvider | null {\n const identity = agentGuiWorkbenchDockIdentityFromIdentifier(value);\n return identity?.kind === \"legacyProvider\" ? identity.provider : null;\n}\n\nexport function agentGuiWorkbenchDockIdentityFromIdentifier(\n value: string | null | undefined\n): AgentGuiWorkbenchDockIdentity | null {\n const normalized = value?.trim();\n if (!normalized) {\n return null;\n }\n if (normalized === agentGuiWorkbenchUnifiedDockEntryId()) {\n return { kind: \"unifiedAggregate\" };\n }\n if (normalized === agentGuiWorkbenchTypeId) {\n return { kind: \"legacyProvider\", provider: \"codex\" };\n }\n if (!normalized.startsWith(agentGuiWorkbenchDockEntryPrefix)) {\n return null;\n }\n const provider = normalized\n .slice(agentGuiWorkbenchDockEntryPrefix.length)\n .split(\":\", 1)[0];\n return isAgentGuiWorkbenchProvider(provider)\n ? { kind: \"legacyProvider\", provider }\n : null;\n}\n\nexport function agentGuiWorkbenchProviderFromLaunchRequest(\n request: AgentGuiWorkbenchLaunchRequestInput\n): AgentGuiWorkbenchProvider {\n const payloadProvider =\n request.payload &&\n typeof request.payload === \"object\" &&\n !Array.isArray(request.payload)\n ? (request.payload as { provider?: unknown }).provider\n : null;\n if (isAgentGuiWorkbenchProvider(payloadProvider)) {\n return payloadProvider;\n }\n return (\n agentGuiWorkbenchProviderFromIdentifier(request.dockEntryId) ??\n agentGuiWorkbenchProviderFromIdentifier(request.typeId) ??\n \"codex\"\n );\n}\n\nexport function createAgentGuiWorkbenchSessionLaunchRequest(input: {\n agentTargetId?: string | null;\n agentSessionId?: string;\n openInNewWindow?: boolean;\n provider: unknown;\n}) {\n const provider = normalizeAgentGuiWorkbenchProvider(input.provider);\n return {\n dockEntryId: agentGuiWorkbenchDockEntryId(provider),\n payload: {\n ...(input.agentTargetId?.trim()\n ? { agentTargetId: input.agentTargetId.trim() }\n : {}),\n ...(input.agentSessionId ? { agentSessionId: input.agentSessionId } : {}),\n ...(input.openInNewWindow ? { openInNewWindow: true } : {}),\n provider\n },\n reason: \"host\" as const,\n typeId: agentGuiWorkbenchTypeId\n };\n}\n\nexport function createAgentGuiWorkbenchDraftLaunchRequest(input: {\n agentTargetId?: string | null;\n autoSubmit?: boolean;\n draftPrompt: string;\n openInNewWindow?: boolean;\n provider: unknown;\n userProjectPath?: string | null;\n}) {\n const provider = normalizeAgentGuiWorkbenchProvider(input.provider);\n const userProjectPath = normalizeAgentGuiWorkbenchUserProjectPath(\n input.userProjectPath\n );\n return {\n dockEntryId: agentGuiWorkbenchDockEntryId(provider),\n payload: {\n draftPrompt: input.draftPrompt,\n provider,\n ...(input.agentTargetId?.trim()\n ? { agentTargetId: input.agentTargetId.trim() }\n : {}),\n ...(input.autoSubmit ? { autoSubmit: true } : {}),\n ...(input.openInNewWindow ? { openInNewWindow: true } : {}),\n ...(userProjectPath ? { userProjectPath } : {})\n },\n reason: \"host\" as const,\n typeId: agentGuiWorkbenchTypeId\n };\n}\n\nexport interface AgentGuiWorkbenchLaunchDescriptor {\n activation:\n | {\n payload: {\n agentSessionId: string;\n };\n type: typeof agentGuiWorkbenchOpenSessionActivationType;\n }\n | {\n payload: AgentGuiWorkbenchPrefillPromptPayload;\n type: typeof agentGuiWorkbenchPrefillPromptActivationType;\n }\n | null;\n dockEntryId: string;\n instanceId: string;\n openInNewWindow: boolean;\n provider: AgentGuiWorkbenchProvider;\n reuseDockEntryNode: boolean;\n reuseExistingSessionNode: boolean;\n targetAgentSessionId: string | null;\n}\n\nexport function createAgentGuiWorkbenchLaunchDescriptor(\n request: AgentGuiWorkbenchLaunchRequestInput\n): AgentGuiWorkbenchLaunchDescriptor {\n const provider = agentGuiWorkbenchProviderFromLaunchRequest(request);\n const dockEntryId = resolveAgentGuiWorkbenchLaunchDockEntryId({\n provider,\n requestedDockEntryId: request.dockEntryId\n });\n const prefillPrompt = prefillPromptFromLaunchPayload(request.payload);\n if (prefillPrompt) {\n const openInNewWindow = openInNewWindowFromLaunchPayload(request.payload);\n return {\n activation: {\n payload: prefillPrompt,\n type: agentGuiWorkbenchPrefillPromptActivationType\n },\n dockEntryId,\n instanceId: createAgentGuiWorkbenchInstanceId({\n agentTargetId: openInNewWindow\n ? null\n : agentTargetIdFromLaunchPayload(request.payload),\n provider\n }),\n openInNewWindow,\n provider,\n reuseDockEntryNode: shouldReuseAgentGuiWorkbenchDockEntryNode({\n dockEntryId,\n launchKind: \"prefill\"\n }),\n reuseExistingSessionNode: !openInNewWindow,\n targetAgentSessionId: null\n };\n }\n\n const targetAgentSessionId = agentSessionIdFromLaunchPayload(request.payload);\n const openInNewWindow = openInNewWindowFromLaunchPayload(request.payload);\n const instanceId = createAgentGuiWorkbenchInstanceId({\n agentSessionId: null,\n agentTargetId: openInNewWindow\n ? null\n : agentTargetIdFromLaunchPayload(request.payload),\n provider\n });\n\n return {\n activation: targetAgentSessionId\n ? {\n payload: {\n agentSessionId: targetAgentSessionId\n },\n type: agentGuiWorkbenchOpenSessionActivationType\n }\n : null,\n dockEntryId,\n instanceId,\n openInNewWindow,\n provider,\n reuseDockEntryNode: shouldReuseAgentGuiWorkbenchDockEntryNode({\n dockEntryId,\n launchKind: targetAgentSessionId ? \"session\" : \"empty\"\n }),\n reuseExistingSessionNode: !openInNewWindow,\n targetAgentSessionId\n };\n}\n\nexport function resolveAgentGuiWorkbenchLaunchDockEntryId(input: {\n provider: AgentGuiWorkbenchProvider;\n requestedDockEntryId?: string | null;\n}): string {\n const requestedIdentity = agentGuiWorkbenchDockIdentityFromIdentifier(\n input.requestedDockEntryId\n );\n if (requestedIdentity?.kind === \"unifiedAggregate\") {\n return agentGuiWorkbenchUnifiedDockEntryId();\n }\n return agentGuiWorkbenchDockEntryId(input.provider);\n}\n\nexport function shouldReuseAgentGuiWorkbenchDockEntryNode(input: {\n dockEntryId: string;\n launchKind: \"empty\" | \"prefill\" | \"session\";\n}): boolean {\n if (input.launchKind !== \"prefill\") {\n return false;\n }\n return (\n agentGuiWorkbenchDockIdentityFromIdentifier(input.dockEntryId)?.kind !==\n \"unifiedAggregate\"\n );\n}\n\nfunction encodeAgentGuiWorkbenchInstanceSegment(value: string): string {\n return encodeURIComponent(value.trim());\n}\n\nfunction prefillPromptFromLaunchPayload(\n payload: unknown\n): AgentGuiWorkbenchPrefillPromptPayload | null {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return null;\n }\n const draftPrompt = (payload as { draftPrompt?: unknown }).draftPrompt;\n if (typeof draftPrompt !== \"string\" || !draftPrompt.trim()) {\n return null;\n }\n const autoSubmit = (payload as { autoSubmit?: unknown }).autoSubmit === true;\n const provider = (payload as { provider?: unknown }).provider;\n const agentTargetId = agentTargetIdFromLaunchPayload(payload);\n const userProjectPath = (payload as { userProjectPath?: unknown })\n .userProjectPath;\n const normalizedUserProjectPath =\n typeof userProjectPath === \"string\"\n ? normalizeAgentGuiWorkbenchUserProjectPath(userProjectPath)\n : null;\n return {\n draftPrompt,\n ...(agentTargetId ? { agentTargetId } : {}),\n ...(autoSubmit ? { autoSubmit: true } : {}),\n ...(isAgentGuiWorkbenchProvider(provider) ? { provider } : {}),\n ...(normalizedUserProjectPath\n ? { userProjectPath: normalizedUserProjectPath }\n : {})\n };\n}\n\nfunction normalizeAgentGuiWorkbenchUserProjectPath(\n value: string | null | undefined\n): string | null {\n const normalized = value?.trim().replaceAll(\"\\\\\", \"/\").replace(/\\/+$/, \"\");\n return normalized ? normalized : null;\n}\n\nfunction agentSessionIdFromLaunchPayload(payload: unknown): string | null {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return null;\n }\n const agentSessionId = (payload as { agentSessionId?: unknown })\n .agentSessionId;\n return typeof agentSessionId === \"string\" && agentSessionId.trim()\n ? agentSessionId.trim()\n : null;\n}\n\nfunction agentTargetIdFromLaunchPayload(payload: unknown): string | null {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\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 openInNewWindowFromLaunchPayload(payload: unknown): boolean {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return false;\n }\n return (payload as { openInNewWindow?: unknown }).openInNewWindow === true;\n}\n"],"mappings":"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","names":["openInNewWindow"]}
@@ -3,11 +3,11 @@ import {
3
3
  getOptionalAgentHostApi,
4
4
  managedAgentRoundedIconUrl,
5
5
  useOptionalAgentHostApi
6
- } from "./chunk-ERWDRI3F.js";
6
+ } from "./chunk-N4I3TD4G.js";
7
7
  import {
8
8
  translate,
9
9
  useTranslation
10
- } from "./chunk-IIXCU2UU.js";
10
+ } from "./chunk-6ULTMCKP.js";
11
11
  import {
12
12
  resolveAgentWorkspaceFileVisualKind
13
13
  } from "./chunk-PJP5BUU6.js";
@@ -260,8 +260,10 @@ import {
260
260
  useContext as useContext2,
261
261
  memo,
262
262
  useMemo,
263
+ useRef as useRef3,
263
264
  useState as useState4
264
265
  } from "react";
266
+ import { Check, Copy } from "lucide-react";
265
267
 
266
268
  // app/renderer/components/ZoomableImage.tsx
267
269
  import {
@@ -291,8 +293,6 @@ import {
291
293
  useRef,
292
294
  useState
293
295
  } from "react";
294
-
295
- // app/renderer/components/ui/context-menu.tsx
296
296
  import {
297
297
  ContextMenu,
298
298
  ContextMenuContent,
@@ -1957,7 +1957,8 @@ function AgentMessageMarkdown({
1957
1957
  p: (props) => /* @__PURE__ */ jsx4(MarkdownParagraph, { ...props, inline }),
1958
1958
  ul: MarkdownUnorderedList,
1959
1959
  ol: MarkdownOrderedList,
1960
- li: MarkdownListItem
1960
+ li: MarkdownListItem,
1961
+ pre: MarkdownPre
1961
1962
  }),
1962
1963
  [
1963
1964
  effectiveAgentTargets,
@@ -3188,6 +3189,43 @@ function textFromReactNode(node) {
3188
3189
  }
3189
3190
  return "";
3190
3191
  }
3192
+ function MarkdownPre({
3193
+ children,
3194
+ ...props
3195
+ }) {
3196
+ "use memo";
3197
+ const preRef = useRef3(null);
3198
+ const [copied, setCopied] = useState4(false);
3199
+ const copyResetRef = useRef3(null);
3200
+ const handleCopy = useCallback3(() => {
3201
+ const text = preRef.current?.textContent?.trim();
3202
+ if (!text) {
3203
+ return;
3204
+ }
3205
+ void navigator.clipboard?.writeText(text).then(() => {
3206
+ setCopied(true);
3207
+ if (copyResetRef.current) {
3208
+ clearTimeout(copyResetRef.current);
3209
+ }
3210
+ copyResetRef.current = setTimeout(() => setCopied(false), 1500);
3211
+ });
3212
+ }, []);
3213
+ return /* @__PURE__ */ jsxs3("div", { className: "group relative", children: [
3214
+ /* @__PURE__ */ jsx4(
3215
+ "button",
3216
+ {
3217
+ type: "button",
3218
+ "data-testid": "markdown-code-copy",
3219
+ className: "absolute right-1.5 top-1.5 z-10 inline-flex size-5 items-center justify-center rounded-[4px] text-[var(--text-tertiary)] opacity-0 transition-opacity hover:bg-[var(--transparency-hover)] hover:text-[var(--text-secondary)] group-hover:opacity-100",
3220
+ "aria-label": translate("agentHost.agentGui.copyCode"),
3221
+ title: translate("agentHost.agentGui.copyCode"),
3222
+ onClick: handleCopy,
3223
+ children: copied ? /* @__PURE__ */ jsx4(Check, { size: 13, strokeWidth: 2, "aria-hidden": "true" }) : /* @__PURE__ */ jsx4(Copy, { size: 13, strokeWidth: 2, "aria-hidden": "true" })
3224
+ }
3225
+ ),
3226
+ /* @__PURE__ */ jsx4("pre", { ...props, ref: preRef, children })
3227
+ ] });
3228
+ }
3191
3229
 
3192
3230
  // agent-gui/agentGuiNode/AgentGUIConversation.styles.ts
3193
3231
  var styles = {
@@ -3229,7 +3267,7 @@ import {
3229
3267
  forwardRef,
3230
3268
  useCallback as useCallback4,
3231
3269
  useEffect as useEffect4,
3232
- useRef as useRef3,
3270
+ useRef as useRef4,
3233
3271
  useState as useState5
3234
3272
  } from "react";
3235
3273
  import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
@@ -3243,8 +3281,8 @@ function CustomScrollbar({
3243
3281
  syncKey
3244
3282
  }) {
3245
3283
  "use memo";
3246
- const trackRef = useRef3(null);
3247
- const dragStateRef = useRef3(null);
3284
+ const trackRef = useRef4(null);
3285
+ const dragStateRef = useRef4(null);
3248
3286
  const [scrollbarState, setScrollbarState] = useState5({
3249
3287
  scrollable: false,
3250
3288
  thumbHeight: 0,
@@ -3431,7 +3469,7 @@ var CustomScrollArea = forwardRef(function CustomScrollArea2({
3431
3469
  ...viewportProps
3432
3470
  }, forwardedRef) {
3433
3471
  "use memo";
3434
- const viewportRef = useRef3(null);
3472
+ const viewportRef = useRef4(null);
3435
3473
  const getViewport = useCallback4(() => viewportRef.current, []);
3436
3474
  return /* @__PURE__ */ jsxs4(
3437
3475
  "div",
@@ -3488,7 +3526,7 @@ import {
3488
3526
  useCallback as useCallback5,
3489
3527
  useEffect as useEffect5,
3490
3528
  useImperativeHandle,
3491
- useRef as useRef4
3529
+ useRef as useRef5
3492
3530
  } from "react";
3493
3531
  import {
3494
3532
  motion,
@@ -3539,7 +3577,7 @@ var MessageSquareMoreIcon = forwardRef2(
3539
3577
  }, ref) => {
3540
3578
  const controls = useAnimation();
3541
3579
  const reduceMotion = useReducedMotion();
3542
- const isControlledRef = useRef4(false);
3580
+ const isControlledRef = useRef5(false);
3543
3581
  const startAnimation = useCallback5(() => {
3544
3582
  if (reduceMotion) {
3545
3583
  return;
@@ -3659,4 +3697,4 @@ export {
3659
3697
  CustomScrollArea,
3660
3698
  MessageSquareMoreIcon
3661
3699
  };
3662
- //# sourceMappingURL=chunk-TT2YJNEP.js.map
3700
+ //# sourceMappingURL=chunk-T3KGZV35.js.map