@tutti-os/agent-gui 0.0.53 → 0.0.54

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 (79) hide show
  1. package/dist/{AgentMentionSearchController-CExFPobz.d.ts → AgentMentionSearchController-DzhWr0PN.d.ts} +13 -3
  2. package/dist/agent-conversation/index.d.ts +2 -2
  3. package/dist/agent-conversation/index.js +7 -6
  4. package/dist/agent-conversation/index.js.map +1 -1
  5. package/dist/agent-message-center/index.js +15 -12
  6. package/dist/agent-message-center/index.js.map +1 -1
  7. package/dist/{agentGuiNodeTypes-wzOITHRW.d.ts → agentGuiNodeTypes-DCnsaqJr.d.ts} +16 -2
  8. package/dist/app/renderer/agentactivity.css +136 -2
  9. package/dist/{chunk-ZTSS2NU2.js → chunk-2XVECUTU.js} +25 -1
  10. package/dist/chunk-2XVECUTU.js.map +1 -0
  11. package/dist/{chunk-OBFDA7RG.js → chunk-4PSDYKZQ.js} +20 -3
  12. package/dist/chunk-4PSDYKZQ.js.map +1 -0
  13. package/dist/{chunk-BFIYBPFD.js → chunk-6AXH2BOD.js} +5 -5
  14. package/dist/{chunk-4K22O34C.js → chunk-7GM7UQXD.js} +29 -3
  15. package/dist/chunk-7GM7UQXD.js.map +1 -0
  16. package/dist/{chunk-2OLYX32K.js → chunk-7ZDLFTVL.js} +76 -7
  17. package/dist/chunk-7ZDLFTVL.js.map +1 -0
  18. package/dist/{chunk-FYVVHRLZ.js → chunk-BGZ2OSDQ.js} +2 -2
  19. package/dist/{chunk-DPG2J7N5.js → chunk-CMOGPJ23.js} +2 -2
  20. package/dist/{chunk-3ZVVFQH5.js → chunk-EXZH66UE.js} +180 -88
  21. package/dist/chunk-EXZH66UE.js.map +1 -0
  22. package/dist/{chunk-66EQ6EQO.js → chunk-GL54NRMB.js} +59 -2
  23. package/dist/chunk-GL54NRMB.js.map +1 -0
  24. package/dist/{chunk-Y7ZVTWMZ.js → chunk-H2YWXFYX.js} +2 -2
  25. package/dist/{chunk-UKDC63WG.js → chunk-JRA44NYI.js} +78 -4
  26. package/dist/chunk-JRA44NYI.js.map +1 -0
  27. package/dist/{chunk-EFDGMXTB.js → chunk-OQJSZSYB.js} +48 -48
  28. package/dist/chunk-OQJSZSYB.js.map +1 -0
  29. package/dist/{chunk-GWHPTB4L.js → chunk-PBHTLI3E.js} +2 -2
  30. package/dist/{chunk-GWHPTB4L.js.map → chunk-PBHTLI3E.js.map} +1 -1
  31. package/dist/{chunk-5Y3PC7HP.js → chunk-VOXUYDQF.js} +238 -25
  32. package/dist/chunk-VOXUYDQF.js.map +1 -0
  33. package/dist/{chunk-HDBKB5RA.js → chunk-WMQN7SZC.js} +2 -58
  34. package/dist/chunk-WMQN7SZC.js.map +1 -0
  35. package/dist/{chunk-F5DYXCY3.js → chunk-Z2BTIAOC.js} +1 -1
  36. package/dist/chunk-Z2BTIAOC.js.map +1 -0
  37. package/dist/{chunk-PIKG746A.js → chunk-ZFDO72FE.js} +132 -67
  38. package/dist/chunk-ZFDO72FE.js.map +1 -0
  39. package/dist/context-mention-palette/index.d.ts +2 -2
  40. package/dist/context-mention-palette/index.js +8 -8
  41. package/dist/context-mention-provider.d.ts +1 -0
  42. package/dist/i18n/index.d.ts +24 -0
  43. package/dist/i18n/index.js +2 -2
  44. package/dist/index.d.ts +21 -53
  45. package/dist/index.js +832 -607
  46. package/dist/index.js.map +1 -1
  47. package/dist/queued-prompt-runtime.d.ts +2 -2
  48. package/dist/{types-xMz0lJWt.d.ts → types-B2m7UcBb.d.ts} +8 -0
  49. package/dist/workbench/contribution.d.ts +43 -4
  50. package/dist/workbench/contribution.js +9 -5
  51. package/dist/workbench/index.d.ts +3 -3
  52. package/dist/workbench/index.js +18 -8
  53. package/dist/workbench/launch.d.ts +2 -1
  54. package/dist/workbench/launch.js +2 -2
  55. package/dist/workbench/providerCatalog.d.ts +1 -1
  56. package/dist/workbench/sessionTitle.d.ts +1 -1
  57. package/dist/workbench/sessionTitle.js +3 -3
  58. package/dist/workbench/state.d.ts +1 -1
  59. package/dist/workbench/state.js +2 -2
  60. package/dist/workbench/types.d.ts +8 -8
  61. package/dist/workbench/types.js +1 -1
  62. package/dist/workspace-agent-generated-files.js +3 -3
  63. package/package.json +12 -12
  64. package/dist/chunk-2OLYX32K.js.map +0 -1
  65. package/dist/chunk-3ZVVFQH5.js.map +0 -1
  66. package/dist/chunk-4K22O34C.js.map +0 -1
  67. package/dist/chunk-5Y3PC7HP.js.map +0 -1
  68. package/dist/chunk-66EQ6EQO.js.map +0 -1
  69. package/dist/chunk-EFDGMXTB.js.map +0 -1
  70. package/dist/chunk-F5DYXCY3.js.map +0 -1
  71. package/dist/chunk-HDBKB5RA.js.map +0 -1
  72. package/dist/chunk-OBFDA7RG.js.map +0 -1
  73. package/dist/chunk-PIKG746A.js.map +0 -1
  74. package/dist/chunk-UKDC63WG.js.map +0 -1
  75. package/dist/chunk-ZTSS2NU2.js.map +0 -1
  76. /package/dist/{chunk-BFIYBPFD.js.map → chunk-6AXH2BOD.js.map} +0 -0
  77. /package/dist/{chunk-FYVVHRLZ.js.map → chunk-BGZ2OSDQ.js.map} +0 -0
  78. /package/dist/{chunk-DPG2J7N5.js.map → chunk-CMOGPJ23.js.map} +0 -0
  79. /package/dist/{chunk-Y7ZVTWMZ.js.map → chunk-H2YWXFYX.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../shared/userAvatarPlaceholder.ts","../shared/workspaceAgentActivityStatusLabel.ts","../app/renderer/components/ui/spinner.tsx"],"sourcesContent":["import userAvatarPlaceholderAssetUrl from \"../app/renderer/assets/icons/user-avatar-placeholder.png\";\n\n/**\n * Bundled placeholder avatar shown for users without an avatar URL. Centralized\n * here so every surface (the agent composer mention palette, the message-center\n * card, and the desktop seam that enriches issue-manager session mentions)\n * resolves the SAME asset URL without duplicating the asset import.\n */\nexport const userAvatarPlaceholderUrl: string = userAvatarPlaceholderAssetUrl;\n","import { translate, type TranslateFn } from \"../i18n/index\";\nimport type { WorkspaceAgentActivityStatus } from \"./workspaceAgentActivityListViewModel\";\n\nexport function normalizeWorkspaceAgentActivityDisplayStatus(\n status: string | undefined\n): WorkspaceAgentActivityStatus {\n switch ((status ?? \"\").trim().toLowerCase()) {\n case \"working\":\n return \"working\";\n case \"waiting\":\n return \"waiting\";\n case \"idle\":\n case \"ready\":\n return \"completed\";\n case \"completed\":\n case \"end\":\n return \"completed\";\n case \"canceled\":\n return \"canceled\";\n case \"failed\":\n return \"failed\";\n default:\n return \"idle\";\n }\n}\n\nexport function workspaceAgentActivityStatusLabel(\n status: WorkspaceAgentActivityStatus | string,\n t?: TranslateFn\n): string {\n const translateFn = t ?? translate;\n switch (normalizeWorkspaceAgentActivityDisplayStatus(status)) {\n case \"working\":\n return translateFn(\"agentHost.workspaceAgentActivityStatusWorking\");\n case \"waiting\":\n return translateFn(\"agentHost.workspaceAgentActivityStatusWaiting\");\n case \"idle\":\n return translateFn(\"agentHost.workspaceAgentActivityStatusIdle\");\n case \"completed\":\n return translateFn(\"agentHost.workspaceAgentActivityStatusEnd\");\n case \"canceled\":\n return translateFn(\"agentHost.workspaceAgentActivityStatusCanceled\");\n case \"failed\":\n return translateFn(\"agentHost.workspaceAgentActivityStatusFailed\");\n default:\n return String(status);\n }\n}\n","export { Spinner, type SpinnerProps } from \"@tutti-os/ui-system\";\n"],"mappings":";;;;;;;;AAQO,IAAM,2BAAmC;;;ACLzC,SAAS,6CACd,QAC8B;AAC9B,WAAS,UAAU,IAAI,KAAK,EAAE,YAAY,GAAG;AAAA,IAC3C,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,kCACd,QACA,GACQ;AACR,QAAM,cAAc,KAAK;AACzB,UAAQ,6CAA6C,MAAM,GAAG;AAAA,IAC5D,KAAK;AACH,aAAO,YAAY,+CAA+C;AAAA,IACpE,KAAK;AACH,aAAO,YAAY,+CAA+C;AAAA,IACpE,KAAK;AACH,aAAO,YAAY,4CAA4C;AAAA,IACjE,KAAK;AACH,aAAO,YAAY,2CAA2C;AAAA,IAChE,KAAK;AACH,aAAO,YAAY,gDAAgD;AAAA,IACrE,KAAK;AACH,aAAO,YAAY,8CAA8C;AAAA,IACnE;AACE,aAAO,OAAO,MAAM;AAAA,EACxB;AACF;;;AC/CA,SAAS,eAAkC;","names":[]}
@@ -6,4 +6,4 @@ export {
6
6
  agentGuiWorkbenchOpenSessionActivationType,
7
7
  agentGuiWorkbenchPrefillPromptActivationType
8
8
  };
9
- //# sourceMappingURL=chunk-F5DYXCY3.js.map
9
+ //# sourceMappingURL=chunk-Z2BTIAOC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../workbench/types.ts"],"sourcesContent":["import type { AgentGUIProviderTargetRef } from \"../types\";\n\nexport type AgentGuiWorkbenchProvider =\n | \"claude-code\"\n | \"codex\"\n | \"nexight\"\n | \"gemini\"\n | \"hermes\"\n | \"openclaw\";\n\nexport const agentGuiWorkbenchOpenSessionActivationType =\n \"agent-gui:open-session\";\n\nexport const agentGuiWorkbenchPrefillPromptActivationType =\n \"agent-gui:prefill-prompt\";\n\nexport interface AgentGuiWorkbenchPrefillPromptPayload {\n autoSubmit?: boolean;\n draftPrompt: string;\n userProjectPath?: string | null;\n}\n\nexport interface AgentGuiWorkbenchComposerOverrides {\n model?: string | null;\n permissionModeId?: string | null;\n planMode?: boolean;\n reasoningEffort?: string | null;\n}\n\nexport type AgentGuiWorkbenchComposerOverridesByProvider = Partial<\n Record<AgentGuiWorkbenchProvider, AgentGuiWorkbenchComposerOverrides | null>\n>;\n\nexport type AgentGuiWorkbenchComposerOverridesByAgentTargetId = Record<\n string,\n AgentGuiWorkbenchComposerOverrides | null\n>;\n\nexport interface AgentGuiWorkbenchNodeState {\n agentTargetId?: string | null;\n composerOverrides?: AgentGuiWorkbenchComposerOverrides | null;\n composerOverridesByAgentTargetId?: AgentGuiWorkbenchComposerOverridesByAgentTargetId | null;\n composerOverridesByProvider?: AgentGuiWorkbenchComposerOverridesByProvider | null;\n conversationCount?: number | null;\n conversationRailCollapsed?: boolean | null;\n conversationRailWidthPx?: number | null;\n lastActiveAgentSessionId: string | null;\n /** @deprecated Conversation titles are derived from the active session id. */\n lastActiveConversationTitle?: string | null;\n provider: AgentGuiWorkbenchProvider;\n /** @deprecated Use agentTargetId for selection restore. */\n providerTargetId?: string | null;\n /** @deprecated Provider target refs are resolved from the current target list. */\n providerTargetRef?: AgentGUIProviderTargetRef | null;\n}\n\nexport interface AgentGuiWorkbenchState {\n agentTargetId?: string | null;\n conversationRailCollapsed?: boolean | null;\n conversationRailWidthPx?: number | null;\n lastActiveAgentSessionId: string | null;\n}\n\nexport interface AgentGuiWorkbenchWorkspaceState {\n workspaceId: string;\n}\n"],"mappings":";AAUO,IAAM,6CACX;AAEK,IAAM,+CACX;","names":[]}
@@ -1,14 +1,15 @@
1
1
  import {
2
2
  getOptionalAgentHostApi,
3
+ managedAgentRoundedIconUrl,
3
4
  useOptionalAgentHostApi
4
- } from "./chunk-66EQ6EQO.js";
5
+ } from "./chunk-GL54NRMB.js";
5
6
  import {
6
7
  resolveAgentWorkspaceFileVisualKind
7
8
  } from "./chunk-PJP5BUU6.js";
8
9
  import {
9
10
  translate,
10
11
  useTranslation
11
- } from "./chunk-Y7ZVTWMZ.js";
12
+ } from "./chunk-H2YWXFYX.js";
12
13
 
13
14
  // app/renderer/lib/utils.ts
14
15
  import { clsx } from "clsx";
@@ -251,11 +252,11 @@ function arrayValue2(value) {
251
252
 
252
253
  // shared/AgentMessageMarkdown.tsx
253
254
  import {
254
- createContext,
255
+ createContext as createContext2,
255
256
  startTransition as startTransition2,
256
257
  useCallback as useCallback3,
257
258
  useEffect as useEffect3,
258
- useContext,
259
+ useContext as useContext2,
259
260
  memo,
260
261
  useMemo,
261
262
  useState as useState4
@@ -1763,8 +1764,37 @@ function clearStreamingVisibleTextTimer(timerRef) {
1763
1764
  timerRef.current = null;
1764
1765
  }
1765
1766
 
1767
+ // shared/AgentTargetPresentationContext.tsx
1768
+ import { createContext, useContext } from "react";
1769
+ import { jsx as jsx3 } from "react/jsx-runtime";
1770
+ var EMPTY_AGENT_TARGETS = Object.freeze([]);
1771
+ var AgentTargetPresentationContext = createContext(
1772
+ EMPTY_AGENT_TARGETS
1773
+ );
1774
+ function AgentTargetPresentationProvider({
1775
+ agentTargets,
1776
+ children
1777
+ }) {
1778
+ return /* @__PURE__ */ jsx3(AgentTargetPresentationContext.Provider, { value: agentTargets, children });
1779
+ }
1780
+ function useAgentTargetPresentations() {
1781
+ return useContext(AgentTargetPresentationContext);
1782
+ }
1783
+ function resolveAgentTargetPresentation(input) {
1784
+ const agentTargetId = input.agentTargetId.trim();
1785
+ if (!agentTargetId) {
1786
+ return null;
1787
+ }
1788
+ const workspaceId = input.workspaceId?.trim() ?? "";
1789
+ return input.agentTargets.find(
1790
+ (target) => target.agentTargetId.trim() === agentTargetId && (target.workspaceId?.trim() ?? "") === workspaceId
1791
+ ) ?? input.agentTargets.find(
1792
+ (target) => target.agentTargetId.trim() === agentTargetId
1793
+ ) ?? null;
1794
+ }
1795
+
1766
1796
  // shared/AgentMessageMarkdown.tsx
1767
- import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
1797
+ import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
1768
1798
  var COLLAPSED_LINE_LIMIT = 8;
1769
1799
  var APPROX_CHARS_PER_LINE = 34;
1770
1800
  var DEFERRED_LONG_MARKDOWN_CHAR_THRESHOLD = 4096;
@@ -1802,13 +1832,15 @@ var MARKDOWN_SANITIZE_SCHEMA = {
1802
1832
  }
1803
1833
  };
1804
1834
  var EMPTY_WORKSPACE_APP_ICONS = [];
1805
- var MarkdownLinkContext = createContext(false);
1835
+ var EMPTY_AGENT_TARGETS2 = [];
1836
+ var MarkdownLinkContext = createContext2(false);
1806
1837
  function AgentMessageMarkdown({
1807
1838
  content,
1808
1839
  onLinkClick,
1809
1840
  onLinkAction,
1810
1841
  workspaceLinkContext = null,
1811
1842
  workspaceAppIcons = EMPTY_WORKSPACE_APP_ICONS,
1843
+ agentTargets,
1812
1844
  collapsible = false,
1813
1845
  expandLabel,
1814
1846
  className,
@@ -1821,6 +1853,8 @@ function AgentMessageMarkdown({
1821
1853
  }) {
1822
1854
  "use memo";
1823
1855
  const { t } = useTranslation();
1856
+ const contextAgentTargets = useAgentTargetPresentations();
1857
+ const effectiveAgentTargets = agentTargets ?? contextAgentTargets;
1824
1858
  const visibleContent = useStreamingVisibleText(content, {
1825
1859
  enabled: streaming,
1826
1860
  frameMs: STREAMING_MARKDOWN_FRAME_MS,
@@ -1893,23 +1927,31 @@ function AgentMessageMarkdown({
1893
1927
  );
1894
1928
  const markdownComponents = useMemo(
1895
1929
  () => ({
1896
- a: (props) => /* @__PURE__ */ jsx3(
1930
+ a: (props) => /* @__PURE__ */ jsx4(
1897
1931
  MarkdownLink,
1898
1932
  {
1899
1933
  ...props,
1900
1934
  onLinkClick: handleLinkClick,
1901
1935
  workspaceAppIcons,
1936
+ agentTargets: effectiveAgentTargets,
1902
1937
  previewMode
1903
1938
  }
1904
1939
  ),
1905
- code: (props) => /* @__PURE__ */ jsx3(MarkdownCode, { ...props, onLinkClick: handleLinkClick }),
1906
- img: (props) => /* @__PURE__ */ jsx3(MarkdownMedia, { ...props, enableZoom: enableImageZoom }),
1907
- p: (props) => /* @__PURE__ */ jsx3(MarkdownParagraph, { ...props, inline }),
1940
+ code: (props) => /* @__PURE__ */ jsx4(MarkdownCode, { ...props, onLinkClick: handleLinkClick }),
1941
+ img: (props) => /* @__PURE__ */ jsx4(MarkdownMedia, { ...props, enableZoom: enableImageZoom }),
1942
+ p: (props) => /* @__PURE__ */ jsx4(MarkdownParagraph, { ...props, inline }),
1908
1943
  ul: MarkdownUnorderedList,
1909
1944
  ol: MarkdownOrderedList,
1910
1945
  li: MarkdownListItem
1911
1946
  }),
1912
- [enableImageZoom, handleLinkClick, inline, previewMode, workspaceAppIcons]
1947
+ [
1948
+ effectiveAgentTargets,
1949
+ enableImageZoom,
1950
+ handleLinkClick,
1951
+ inline,
1952
+ previewMode,
1953
+ workspaceAppIcons
1954
+ ]
1913
1955
  );
1914
1956
  return /* @__PURE__ */ jsxs3(
1915
1957
  ContainerTag,
@@ -1917,7 +1959,7 @@ function AgentMessageMarkdown({
1917
1959
  className: "flex w-full min-w-0 flex-col items-start gap-1",
1918
1960
  "data-workspace-agent-markdown-shell": "true",
1919
1961
  children: [
1920
- /* @__PURE__ */ jsx3(
1962
+ /* @__PURE__ */ jsx4(
1921
1963
  ContainerTag,
1922
1964
  {
1923
1965
  className: cn(
@@ -1948,13 +1990,13 @@ function AgentMessageMarkdown({
1948
1990
  "data-agent-mention-only": isMentionOnly ? "true" : void 0,
1949
1991
  "data-collapsed": isCollapsed ? "true" : "false",
1950
1992
  onClickCapture: handleAnchorClickCapture,
1951
- children: markdownRenderReady ? streaming ? /* @__PURE__ */ jsx3(
1993
+ children: markdownRenderReady ? streaming ? /* @__PURE__ */ jsx4(
1952
1994
  StreamingMarkdownBlocks,
1953
1995
  {
1954
1996
  content: normalizedContent,
1955
1997
  components: markdownComponents
1956
1998
  }
1957
- ) : /* @__PURE__ */ jsx3(
1999
+ ) : /* @__PURE__ */ jsx4(
1958
2000
  ReactMarkdown,
1959
2001
  {
1960
2002
  remarkPlugins: [remarkGfm],
@@ -1963,7 +2005,7 @@ function AgentMessageMarkdown({
1963
2005
  components: markdownComponents,
1964
2006
  children: normalizedContent
1965
2007
  }
1966
- ) : /* @__PURE__ */ jsx3(
2008
+ ) : /* @__PURE__ */ jsx4(
1967
2009
  "div",
1968
2010
  {
1969
2011
  className: "whitespace-pre-wrap [overflow-wrap:anywhere]",
@@ -1973,7 +2015,7 @@ function AgentMessageMarkdown({
1973
2015
  )
1974
2016
  }
1975
2017
  ),
1976
- shouldCollapse && !isExpanded ? /* @__PURE__ */ jsx3(
2018
+ shouldCollapse && !isExpanded ? /* @__PURE__ */ jsx4(
1977
2019
  "button",
1978
2020
  {
1979
2021
  type: "button",
@@ -1994,7 +2036,7 @@ function StreamingMarkdownBlocks({
1994
2036
  () => splitStreamingMarkdownBlocks(content),
1995
2037
  [content]
1996
2038
  );
1997
- return /* @__PURE__ */ jsx3(Fragment2, { children: blocks.map((block, index) => /* @__PURE__ */ jsx3(
2039
+ return /* @__PURE__ */ jsx4(Fragment2, { children: blocks.map((block, index) => /* @__PURE__ */ jsx4(
1998
2040
  MemoizedMarkdownBlock,
1999
2041
  {
2000
2042
  content: block.content,
@@ -2007,7 +2049,7 @@ var MemoizedMarkdownBlock = memo(function MemoizedMarkdownBlock2({
2007
2049
  content,
2008
2050
  components
2009
2051
  }) {
2010
- return /* @__PURE__ */ jsx3(
2052
+ return /* @__PURE__ */ jsx4(
2011
2053
  ReactMarkdown,
2012
2054
  {
2013
2055
  remarkPlugins: [remarkGfm],
@@ -2177,6 +2219,7 @@ function MarkdownLink({
2177
2219
  onClick: _onClick,
2178
2220
  onLinkClick,
2179
2221
  workspaceAppIcons,
2222
+ agentTargets,
2180
2223
  previewMode,
2181
2224
  href,
2182
2225
  ...props
@@ -2188,10 +2231,11 @@ function MarkdownLink({
2188
2231
  targetHref,
2189
2232
  textFromReactNode(props.children),
2190
2233
  workspaceAppIcons ?? [],
2234
+ agentTargets ?? EMPTY_AGENT_TARGETS2,
2191
2235
  t("agentHost.agentGui.workspaceAppFactoryMentionFallback")
2192
2236
  ) : null;
2193
2237
  if (mention) {
2194
- return /* @__PURE__ */ jsx3(
2238
+ return /* @__PURE__ */ jsx4(
2195
2239
  MentionLink,
2196
2240
  {
2197
2241
  ...props,
@@ -2207,7 +2251,7 @@ function MarkdownLink({
2207
2251
  textFromReactNode(props.children)
2208
2252
  ) : null;
2209
2253
  if (fileMention) {
2210
- return /* @__PURE__ */ jsx3(
2254
+ return /* @__PURE__ */ jsx4(
2211
2255
  WorkspaceFileMentionLink,
2212
2256
  {
2213
2257
  ...props,
@@ -2218,9 +2262,9 @@ function MarkdownLink({
2218
2262
  );
2219
2263
  }
2220
2264
  if (!isClickableMarkdownHref(targetHref)) {
2221
- return /* @__PURE__ */ jsx3(MarkdownLinkContext.Provider, { value: true, children: /* @__PURE__ */ jsx3("span", { className: props.className, title: props.title, children: props.children }) });
2265
+ return /* @__PURE__ */ jsx4(MarkdownLinkContext.Provider, { value: true, children: /* @__PURE__ */ jsx4("span", { className: props.className, title: props.title, children: props.children }) });
2222
2266
  }
2223
- return /* @__PURE__ */ jsx3(MarkdownLinkContext.Provider, { value: true, children: /* @__PURE__ */ jsx3(
2267
+ return /* @__PURE__ */ jsx4(MarkdownLinkContext.Provider, { value: true, children: /* @__PURE__ */ jsx4(
2224
2268
  "a",
2225
2269
  {
2226
2270
  ...props,
@@ -2331,8 +2375,8 @@ function WorkspaceFileMentionLink({
2331
2375
  activateMarkdownLinkFromKey(event, mention.href, onLinkClick);
2332
2376
  },
2333
2377
  children: [
2334
- /* @__PURE__ */ jsx3("span", { className: "tsh-agent-object-token__icon", "aria-hidden": "true" }),
2335
- /* @__PURE__ */ jsx3("span", { className: "tsh-agent-object-token__main", children: mention.label })
2378
+ /* @__PURE__ */ jsx4("span", { className: "tsh-agent-object-token__icon", "aria-hidden": "true" }),
2379
+ /* @__PURE__ */ jsx4("span", { className: "tsh-agent-object-token__main", children: mention.label })
2336
2380
  ]
2337
2381
  }
2338
2382
  );
@@ -2375,14 +2419,14 @@ function MentionLink({
2375
2419
  activateMarkdownLinkFromKey(event, href, onLinkClick);
2376
2420
  },
2377
2421
  children: [
2378
- mention.kind === "workspace-app" || mention.kind === "workspace-reference" ? /* @__PURE__ */ jsx3(
2422
+ mention.kind === "workspace-app" || mention.kind === "workspace-reference" || mention.kind === "agent-target" ? /* @__PURE__ */ jsx4(
2379
2423
  "span",
2380
2424
  {
2381
2425
  className: "grid h-4 w-4 shrink-0 place-items-center overflow-hidden rounded-[4px] bg-block",
2382
2426
  "aria-hidden": "true",
2383
2427
  "data-agent-mention-app-icon": "true",
2384
2428
  "data-workspace-app-icon": "true",
2385
- children: mention.iconUrl ? /* @__PURE__ */ jsx3(
2429
+ children: mention.iconUrl ? /* @__PURE__ */ jsx4(
2386
2430
  "img",
2387
2431
  {
2388
2432
  src: mention.iconUrl,
@@ -2392,9 +2436,9 @@ function MentionLink({
2392
2436
  loading: "lazy",
2393
2437
  draggable: false
2394
2438
  }
2395
- ) : /* @__PURE__ */ jsx3("span", { className: "tsh-agent-object-token__kind-icon h-4 w-4" })
2439
+ ) : /* @__PURE__ */ jsx4("span", { className: "tsh-agent-object-token__kind-icon h-4 w-4" })
2396
2440
  }
2397
- ) : /* @__PURE__ */ jsx3("span", { className: "tsh-agent-object-token__kind", "aria-hidden": "true", children: /* @__PURE__ */ jsx3(
2441
+ ) : /* @__PURE__ */ jsx4("span", { className: "tsh-agent-object-token__kind", "aria-hidden": "true", children: /* @__PURE__ */ jsx4(
2398
2442
  "span",
2399
2443
  {
2400
2444
  className: "tsh-agent-object-token__kind-icon",
@@ -2402,21 +2446,21 @@ function MentionLink({
2402
2446
  }
2403
2447
  ) }),
2404
2448
  mention.kind === "session" ? /* @__PURE__ */ jsxs3("span", { className: "tsh-agent-object-token__main", ref: mainRef, children: [
2405
- /* @__PURE__ */ jsx3("span", { className: "tsh-agent-object-token__participant", children: mention.participant }),
2449
+ /* @__PURE__ */ jsx4("span", { className: "tsh-agent-object-token__participant", children: mention.participant }),
2406
2450
  mention.summary ? /* @__PURE__ */ jsxs3("span", { className: "tsh-agent-object-token__summary", children: [
2407
2451
  " ",
2408
2452
  mention.summary
2409
2453
  ] }) : null
2410
- ] }) : /* @__PURE__ */ jsx3("span", { className: "tsh-agent-object-token__main", ref: mainRef, children: mention.label })
2454
+ ] }) : /* @__PURE__ */ jsx4("span", { className: "tsh-agent-object-token__main", ref: mainRef, children: mention.label })
2411
2455
  ]
2412
2456
  }
2413
2457
  );
2414
2458
  if (previewMode) {
2415
2459
  return link;
2416
2460
  }
2417
- return /* @__PURE__ */ jsx3(TooltipProvider, { delayDuration: 200, children: /* @__PURE__ */ jsxs3(Tooltip, { children: [
2418
- /* @__PURE__ */ jsx3(TooltipTrigger, { asChild: true, children: link }),
2419
- overflowing ? /* @__PURE__ */ jsx3(TooltipContent, { className: "max-w-[min(420px,calc(100vw-32px))] whitespace-normal text-left [overflow-wrap:anywhere]", children: tooltipText }) : null
2461
+ return /* @__PURE__ */ jsx4(TooltipProvider, { delayDuration: 200, children: /* @__PURE__ */ jsxs3(Tooltip, { children: [
2462
+ /* @__PURE__ */ jsx4(TooltipTrigger, { asChild: true, children: link }),
2463
+ overflowing ? /* @__PURE__ */ jsx4(TooltipContent, { className: "max-w-[min(420px,calc(100vw-32px))] whitespace-normal text-left [overflow-wrap:anywhere]", children: tooltipText }) : null
2420
2464
  ] }) });
2421
2465
  }
2422
2466
  function MarkdownCode({
@@ -2427,13 +2471,13 @@ function MarkdownCode({
2427
2471
  ...props
2428
2472
  }) {
2429
2473
  "use memo";
2430
- const isInsideLink = useContext(MarkdownLinkContext);
2474
+ const isInsideLink = useContext2(MarkdownLinkContext);
2431
2475
  const text = textFromReactNode(children).trim();
2432
2476
  const isLinkablePath = !isInsideLink && onLinkClick && !className && (isExplicitWorkspaceFilePath(text) || isHttpUrl(text));
2433
2477
  if (isLinkablePath) {
2434
- return /* @__PURE__ */ jsx3(PathLink, { href: text, onLinkClick, children });
2478
+ return /* @__PURE__ */ jsx4(PathLink, { href: text, onLinkClick, children });
2435
2479
  }
2436
- return /* @__PURE__ */ jsx3("code", { ...props, className, children });
2480
+ return /* @__PURE__ */ jsx4("code", { ...props, className, children });
2437
2481
  }
2438
2482
  var cachedMarkdownMedia = /* @__PURE__ */ new Map();
2439
2483
  var CACHED_MARKDOWN_MEDIA_REVOKE_DELAY_MS = 250;
@@ -2448,7 +2492,7 @@ function MarkdownMedia({
2448
2492
  }) {
2449
2493
  "use memo";
2450
2494
  const { t } = useTranslation();
2451
- const isInsideLink = useContext(MarkdownLinkContext);
2495
+ const isInsideLink = useContext2(MarkdownLinkContext);
2452
2496
  const agentHostApi = useOptionalAgentHostApi() ?? getOptionalAgentHostApi();
2453
2497
  const workspacePath = typeof src === "string" && isLocalAbsolutePath(src) ? src.trim() : null;
2454
2498
  const readWorkspaceImage = workspacePath ? agentHostApi?.workspace?.readFile : void 0;
@@ -2526,9 +2570,9 @@ function MarkdownMedia({
2526
2570
  if (!workspacePath || !readWorkspaceImage) {
2527
2571
  if (fallbackMediaKind === "video") {
2528
2572
  if (!canRenderMarkdownVideoFallback(src)) {
2529
- return /* @__PURE__ */ jsx3(UnsupportedMarkdownMediaPreview, {});
2573
+ return /* @__PURE__ */ jsx4(UnsupportedMarkdownMediaPreview, {});
2530
2574
  }
2531
- return /* @__PURE__ */ jsx3(
2575
+ return /* @__PURE__ */ jsx4(
2532
2576
  "video",
2533
2577
  {
2534
2578
  src: resolvedSrc,
@@ -2545,7 +2589,7 @@ function MarkdownMedia({
2545
2589
  );
2546
2590
  }
2547
2591
  if (!shouldEnableZoom) {
2548
- return /* @__PURE__ */ jsx3(
2592
+ return /* @__PURE__ */ jsx4(
2549
2593
  "img",
2550
2594
  {
2551
2595
  ...props,
@@ -2556,7 +2600,7 @@ function MarkdownMedia({
2556
2600
  }
2557
2601
  );
2558
2602
  }
2559
- return /* @__PURE__ */ jsx3(
2603
+ return /* @__PURE__ */ jsx4(
2560
2604
  ZoomableImage,
2561
2605
  {
2562
2606
  ...props,
@@ -2571,7 +2615,7 @@ function MarkdownMedia({
2571
2615
  }
2572
2616
  if (state?.status === "ready") {
2573
2617
  if (state.kind === "video") {
2574
- return /* @__PURE__ */ jsx3(
2618
+ return /* @__PURE__ */ jsx4(
2575
2619
  "video",
2576
2620
  {
2577
2621
  src: state.src,
@@ -2588,7 +2632,7 @@ function MarkdownMedia({
2588
2632
  );
2589
2633
  }
2590
2634
  if (!shouldEnableZoom) {
2591
- return /* @__PURE__ */ jsx3(
2635
+ return /* @__PURE__ */ jsx4(
2592
2636
  "img",
2593
2637
  {
2594
2638
  ...props,
@@ -2602,7 +2646,7 @@ function MarkdownMedia({
2602
2646
  }
2603
2647
  );
2604
2648
  }
2605
- return /* @__PURE__ */ jsx3(
2649
+ return /* @__PURE__ */ jsx4(
2606
2650
  ZoomableImage,
2607
2651
  {
2608
2652
  ...props,
@@ -2618,13 +2662,13 @@ function MarkdownMedia({
2618
2662
  }
2619
2663
  );
2620
2664
  }
2621
- return /* @__PURE__ */ jsx3("span", { className: "mt-2 flex min-h-[160px] w-full items-center justify-center rounded-[8px] bg-[var(--transparency-block)] px-5 py-5 text-center text-[13px] leading-5 text-[var(--text-tertiary)]", children: state?.status === "error" ? state.reason === "unsupported" ? t("agentHost.workspaceFileManager.previewUnsupported") : t("agentHost.workspaceFileManager.previewReadFailed", {
2665
+ return /* @__PURE__ */ jsx4("span", { className: "mt-2 flex min-h-[160px] w-full items-center justify-center rounded-[8px] bg-[var(--transparency-block)] px-5 py-5 text-center text-[13px] leading-5 text-[var(--text-tertiary)]", children: state?.status === "error" ? state.reason === "unsupported" ? t("agentHost.workspaceFileManager.previewUnsupported") : t("agentHost.workspaceFileManager.previewReadFailed", {
2622
2666
  message: state.detail ?? ""
2623
2667
  }) : t("agentHost.workspaceFileManager.previewLoading") });
2624
2668
  }
2625
2669
  function UnsupportedMarkdownMediaPreview() {
2626
2670
  const { t } = useTranslation();
2627
- return /* @__PURE__ */ jsx3("span", { className: "mt-2 flex min-h-[160px] w-full items-center justify-center rounded-[8px] bg-[var(--transparency-block)] px-5 py-5 text-center text-[13px] leading-5 text-[var(--text-tertiary)]", children: t("agentHost.workspaceFileManager.previewUnsupported") });
2671
+ return /* @__PURE__ */ jsx4("span", { className: "mt-2 flex min-h-[160px] w-full items-center justify-center rounded-[8px] bg-[var(--transparency-block)] px-5 py-5 text-center text-[13px] leading-5 text-[var(--text-tertiary)]", children: t("agentHost.workspaceFileManager.previewUnsupported") });
2628
2672
  }
2629
2673
  function resolveMarkdownImageDownloadName(src, alt) {
2630
2674
  if (typeof src === "string") {
@@ -2655,7 +2699,7 @@ function MarkdownUnorderedList({
2655
2699
  ...props
2656
2700
  }) {
2657
2701
  "use memo";
2658
- return /* @__PURE__ */ jsx3(
2702
+ return /* @__PURE__ */ jsx4(
2659
2703
  "ul",
2660
2704
  {
2661
2705
  ...props,
@@ -2673,7 +2717,7 @@ function MarkdownOrderedList({
2673
2717
  ...props
2674
2718
  }) {
2675
2719
  "use memo";
2676
- return /* @__PURE__ */ jsx3(
2720
+ return /* @__PURE__ */ jsx4(
2677
2721
  "ol",
2678
2722
  {
2679
2723
  ...props,
@@ -2691,7 +2735,7 @@ function MarkdownListItem({
2691
2735
  ...props
2692
2736
  }) {
2693
2737
  "use memo";
2694
- return /* @__PURE__ */ jsx3("li", { ...props, style: { ...MARKDOWN_LIST_ITEM_STYLE, ...style } });
2738
+ return /* @__PURE__ */ jsx4("li", { ...props, style: { ...MARKDOWN_LIST_ITEM_STYLE, ...style } });
2695
2739
  }
2696
2740
  function MarkdownParagraph({
2697
2741
  node: _node,
@@ -2700,9 +2744,9 @@ function MarkdownParagraph({
2700
2744
  }) {
2701
2745
  "use memo";
2702
2746
  if (inline) {
2703
- return /* @__PURE__ */ jsx3("span", { ...props });
2747
+ return /* @__PURE__ */ jsx4("span", { ...props });
2704
2748
  }
2705
- return /* @__PURE__ */ jsx3("p", { ...props });
2749
+ return /* @__PURE__ */ jsx4("p", { ...props });
2706
2750
  }
2707
2751
  function isLocalAbsolutePath(path) {
2708
2752
  const candidate = path.trim();
@@ -2928,14 +2972,14 @@ function markdownUrlTransform(value) {
2928
2972
  const target = value.trim();
2929
2973
  return isRichTextMentionHref(target) || isExplicitWorkspaceFilePath(target) || isStandardMarkdownLinkHref(target) ? target : defaultUrlTransform(value);
2930
2974
  }
2931
- function parseMentionLink(href, rawLabel, workspaceAppIcons = [], appFactoryFallbackLabel = "Create app") {
2975
+ function parseMentionLink(href, rawLabel, workspaceAppIcons = [], agentTargets = EMPTY_AGENT_TARGETS2, appFactoryFallbackLabel = "Create app") {
2932
2976
  const mention = parseRichTextMentionHref2(href, rawLabel);
2933
2977
  if (!mention) {
2934
2978
  return null;
2935
2979
  }
2936
2980
  const resource = mention.providerId.trim().toLowerCase();
2937
- const kind = resource === "agent-session" ? "session" : resource === "workspace-app" ? "workspace-app" : resource === "workspace-reference" ? "workspace-reference" : resource === "workspace-app-factory" ? "workspace-app-factory" : resource === "workspace-issue" ? "workspace-issue" : resource;
2938
- if (kind !== "session" && kind !== "workspace-app" && kind !== "workspace-reference" && kind !== "workspace-app-factory" && kind !== "workspace-issue") {
2981
+ const kind = resource === "agent-session" ? "session" : resource === "workspace-app" ? "workspace-app" : resource === "workspace-reference" ? "workspace-reference" : resource === "workspace-app-factory" ? "workspace-app-factory" : resource === "workspace-issue" ? "workspace-issue" : resource === "agent-target" ? "agent-target" : resource;
2982
+ if (kind !== "session" && kind !== "agent-target" && kind !== "workspace-app" && kind !== "workspace-reference" && kind !== "workspace-app-factory" && kind !== "workspace-issue") {
2939
2983
  return null;
2940
2984
  }
2941
2985
  const entityId = mention.entityId.trim();
@@ -2961,6 +3005,24 @@ function parseMentionLink(href, rawLabel, workspaceAppIcons = [], appFactoryFall
2961
3005
  summary: ""
2962
3006
  };
2963
3007
  }
3008
+ if (kind === "agent-target") {
3009
+ const workspaceId = mention.scope?.workspaceId?.trim() || "";
3010
+ const target = resolveAgentTargetPresentation({
3011
+ agentTargetId: entityId,
3012
+ agentTargets,
3013
+ workspaceId
3014
+ });
3015
+ const agentProviderId = target?.provider?.trim() || void 0;
3016
+ const targetLabel = target?.name?.trim() || label;
3017
+ return {
3018
+ agentProviderId,
3019
+ kind,
3020
+ label: targetLabel,
3021
+ iconUrl: target?.iconUrl?.trim() || managedAgentRoundedIconUrl(agentProviderId),
3022
+ participant: targetLabel,
3023
+ summary: ""
3024
+ };
3025
+ }
2964
3026
  if (kind === "workspace-reference") {
2965
3027
  const source = mention.scope?.source?.trim() ?? "";
2966
3028
  const workspaceId = mention.scope?.workspaceId?.trim() || "";
@@ -3082,7 +3144,7 @@ function PathLink({
3082
3144
  onLinkClick
3083
3145
  }) {
3084
3146
  "use memo";
3085
- return /* @__PURE__ */ jsx3(
3147
+ return /* @__PURE__ */ jsx4(
3086
3148
  "a",
3087
3149
  {
3088
3150
  className: "cursor-pointer",
@@ -3155,7 +3217,7 @@ import {
3155
3217
  useRef as useRef3,
3156
3218
  useState as useState5
3157
3219
  } from "react";
3158
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
3220
+ import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
3159
3221
  var MIN_THUMB_HEIGHT = 24;
3160
3222
  function CustomScrollbar({
3161
3223
  getViewport,
@@ -3317,7 +3379,7 @@ function CustomScrollbar({
3317
3379
  resizeObserver?.disconnect();
3318
3380
  };
3319
3381
  }, [getViewport, syncKey, syncScrollbarState]);
3320
- return /* @__PURE__ */ jsx4(
3382
+ return /* @__PURE__ */ jsx5(
3321
3383
  "div",
3322
3384
  {
3323
3385
  ref: trackRef,
@@ -3327,7 +3389,7 @@ function CustomScrollbar({
3327
3389
  "data-testid": testId,
3328
3390
  "aria-hidden": "true",
3329
3391
  onMouseDown: handleTrackMouseDown,
3330
- children: /* @__PURE__ */ jsx4(
3392
+ children: /* @__PURE__ */ jsx5(
3331
3393
  "div",
3332
3394
  {
3333
3395
  className: cn("tsh-custom-scrollbar__thumb", thumbClassName),
@@ -3364,7 +3426,7 @@ var CustomScrollArea = forwardRef(function CustomScrollArea2({
3364
3426
  className
3365
3427
  ),
3366
3428
  children: [
3367
- /* @__PURE__ */ jsx4(
3429
+ /* @__PURE__ */ jsx5(
3368
3430
  "div",
3369
3431
  {
3370
3432
  ref: setRefs(viewportRef, forwardedRef),
@@ -3376,7 +3438,7 @@ var CustomScrollArea = forwardRef(function CustomScrollArea2({
3376
3438
  children
3377
3439
  }
3378
3440
  ),
3379
- /* @__PURE__ */ jsx4(
3441
+ /* @__PURE__ */ jsx5(
3380
3442
  CustomScrollbar,
3381
3443
  {
3382
3444
  getViewport,
@@ -3418,7 +3480,7 @@ import {
3418
3480
  useAnimation,
3419
3481
  useReducedMotion
3420
3482
  } from "framer-motion";
3421
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
3483
+ import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
3422
3484
  var DOT_TRANSITION = {
3423
3485
  times: [0, 0.1, 0.1, 0.2, 0.5, 0.6, 0.6, 0.7],
3424
3486
  duration: 1.5
@@ -3506,7 +3568,7 @@ var MessageSquareMoreIcon = forwardRef2(
3506
3568
  },
3507
3569
  [onMouseLeave, stopAnimation]
3508
3570
  );
3509
- return /* @__PURE__ */ jsx5(
3571
+ return /* @__PURE__ */ jsx6(
3510
3572
  "div",
3511
3573
  {
3512
3574
  className: cn("inline-flex items-center justify-center", className),
@@ -3526,8 +3588,8 @@ var MessageSquareMoreIcon = forwardRef2(
3526
3588
  width: size,
3527
3589
  xmlns: "http://www.w3.org/2000/svg",
3528
3590
  children: [
3529
- /* @__PURE__ */ jsx5("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" }),
3530
- /* @__PURE__ */ jsx5(
3591
+ /* @__PURE__ */ jsx6("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" }),
3592
+ /* @__PURE__ */ jsx6(
3531
3593
  motion.path,
3532
3594
  {
3533
3595
  animate: controls,
@@ -3536,7 +3598,7 @@ var MessageSquareMoreIcon = forwardRef2(
3536
3598
  variants: DOT_VARIANTS
3537
3599
  }
3538
3600
  ),
3539
- /* @__PURE__ */ jsx5(
3601
+ /* @__PURE__ */ jsx6(
3540
3602
  motion.path,
3541
3603
  {
3542
3604
  animate: controls,
@@ -3545,7 +3607,7 @@ var MessageSquareMoreIcon = forwardRef2(
3545
3607
  variants: DOT_VARIANTS
3546
3608
  }
3547
3609
  ),
3548
- /* @__PURE__ */ jsx5(
3610
+ /* @__PURE__ */ jsx6(
3549
3611
  motion.path,
3550
3612
  {
3551
3613
  animate: controls,
@@ -3574,9 +3636,12 @@ export {
3574
3636
  resolveWorkspaceFileLinkAction,
3575
3637
  resolveWorkspaceLinkAction,
3576
3638
  ZoomableImage,
3639
+ AgentTargetPresentationProvider,
3640
+ useAgentTargetPresentations,
3641
+ resolveAgentTargetPresentation,
3577
3642
  AgentMessageMarkdown,
3578
3643
  AgentGUIConversation_styles_default,
3579
3644
  CustomScrollArea,
3580
3645
  MessageSquareMoreIcon
3581
3646
  };
3582
- //# sourceMappingURL=chunk-PIKG746A.js.map
3647
+ //# sourceMappingURL=chunk-ZFDO72FE.js.map