@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
@@ -3,98 +3,11 @@ import {
3
3
  } from "./chunk-GCBDIQDX.js";
4
4
  import {
5
5
  translateInUiLanguage
6
- } from "./chunk-AOS2VWU6.js";
6
+ } from "./chunk-K2NURZ7V.js";
7
7
  import {
8
8
  resolveAgentGUIProviderCatalogIdentity
9
9
  } from "./chunk-KJQERFKX.js";
10
10
 
11
- // shared/utils/agentSessionMentionText.ts
12
- import {
13
- isRichTextMentionHref,
14
- parseRichTextMentionHref
15
- } from "@tutti-os/ui-rich-text/core";
16
- var MARKDOWN_LINK_PATTERN = /\[((?:\\.|[^\]\\])*)\]\(([^)\s]+)\)/g;
17
- var MARKDOWN_LABEL_ESCAPE_PATTERN = /\\([\\[\]()])/g;
18
- var SESSION_MENTION_DISPLAY_PREFIX_BY_LANGUAGE = {
19
- "zh-CN": "@\u4F1A\u8BDD \xB7 ",
20
- en: "@session \xB7 "
21
- };
22
- var PLAIN_SESSION_AGENT_LABELS = [
23
- "Claude Code",
24
- "Hermes Agent",
25
- "OpenClaw",
26
- "Nexight",
27
- "Hermes",
28
- "Codex"
29
- ];
30
- function formatAgentSessionMentionText(value, options = {}) {
31
- const trimmed = value?.trim() ?? "";
32
- if (!trimmed) {
33
- return "";
34
- }
35
- const sessionMentionDisplayPrefix = sessionMentionDisplayPrefixForLanguage(
36
- options.language
37
- );
38
- const withSessionMentionsNormalized = trimmed.replace(
39
- MARKDOWN_LINK_PATTERN,
40
- (fullMatch, rawLabel, href) => {
41
- const label = unescapeMarkdownLabel(rawLabel);
42
- const mention = parseRichTextMentionHref(href, label);
43
- if (!mention) {
44
- return isRichTextMentionHref(href) ? label : fullMatch;
45
- }
46
- const providerId = mention.providerId.trim().toLowerCase();
47
- const displayLabel = label || mention.label;
48
- if (providerId === "agent-session") {
49
- return formatSessionLabel(displayLabel, sessionMentionDisplayPrefix);
50
- }
51
- if (providerId === "workspace-issue") {
52
- return formatIssueLabel(displayLabel);
53
- }
54
- return displayLabel;
55
- }
56
- );
57
- const normalized = normalizeAgentTitleText(withSessionMentionsNormalized);
58
- if (isPlainSessionMentionText(normalized, sessionMentionDisplayPrefix)) {
59
- return formatSessionLabel(normalized, sessionMentionDisplayPrefix);
60
- }
61
- return normalized;
62
- }
63
- function isPlainSessionMentionText(value, sessionMentionDisplayPrefix) {
64
- const trimmed = value.trim();
65
- if (!trimmed.startsWith("@") || trimmed.startsWith(sessionMentionDisplayPrefix)) {
66
- return false;
67
- }
68
- return PLAIN_SESSION_AGENT_LABELS.some((agentLabel) => {
69
- const ampersandSeparator = ` & ${agentLabel}`;
70
- const ampersandIndex = trimmed.indexOf(ampersandSeparator);
71
- if (ampersandIndex > 1) {
72
- const trailing = trimmed.slice(
73
- ampersandIndex + ampersandSeparator.length
74
- );
75
- if (trailing === "" || trailing.startsWith(" ")) {
76
- return true;
77
- }
78
- }
79
- const dottedSeparator = ` \xB7 ${agentLabel} \xB7 `;
80
- return trimmed.indexOf(dottedSeparator) > 1;
81
- });
82
- }
83
- function sessionMentionDisplayPrefixForLanguage(language) {
84
- return SESSION_MENTION_DISPLAY_PREFIX_BY_LANGUAGE[language ?? "en"];
85
- }
86
- function formatSessionLabel(label, sessionMentionDisplayPrefix) {
87
- const normalizedLabel = label.trim().replace(/^@+/, "").trim();
88
- return normalizedLabel ? `${sessionMentionDisplayPrefix}${normalizedLabel}` : label.trim();
89
- }
90
- function formatIssueLabel(label) {
91
- const normalizedLabel = label.trim().replace(/^@+/, "").trim();
92
- return normalizedLabel ? `@Task \xB7 ${normalizedLabel}` : label.trim();
93
- }
94
- function unescapeMarkdownLabel(label) {
95
- return label.replace(MARKDOWN_LABEL_ESCAPE_PATTERN, "$1");
96
- }
97
-
98
11
  // contexts/settings/domain/agentSettings.providers.ts
99
12
  var AGENT_PROVIDERS = [
100
13
  "claude-code",
@@ -124,8 +37,18 @@ function isAgentGUIProviderUnresolved(value) {
124
37
  return value === AGENT_GUI_UNRESOLVED_PROVIDER;
125
38
  }
126
39
  function normalizeAgentGUIProviderIdentity(provider) {
127
- const providerId = resolveAgentGUIProviderCatalogIdentity(provider)?.providerId;
128
- return providerId && Object.hasOwn(AGENT_PROVIDER_LABEL, providerId) ? providerId : "unknown";
40
+ const normalized = provider?.trim().toLowerCase() ?? "";
41
+ const catalogIdentity = resolveAgentGUIProviderCatalogIdentity(normalized);
42
+ if (catalogIdentity) {
43
+ return catalogIdentity.providerId;
44
+ }
45
+ if (!/^[a-z][a-z0-9._:-]{0,127}$/.test(normalized)) {
46
+ return "unknown";
47
+ }
48
+ return normalized;
49
+ }
50
+ function providerLabel(provider) {
51
+ return AGENT_PROVIDER_LABEL[provider] ?? provider;
129
52
  }
130
53
  function resolveAgentGUIProviderIdentity(input) {
131
54
  const candidates = [
@@ -143,9 +66,7 @@ function resolveAgentGUIProviderIdentity(input) {
143
66
  return "unknown";
144
67
  }
145
68
  function resolveAgentGUIConversationTitle(title, provider) {
146
- const normalizedTitle = stripAgentGUITitleTrailingPeriod(
147
- normalizeAgentTitleText(title)
148
- );
69
+ const normalizedTitle = stripAgentGUITitleTrailingPeriod(title?.trim() ?? "");
149
70
  if (normalizedTitle) {
150
71
  return {
151
72
  title: normalizedTitle,
@@ -159,46 +80,31 @@ function resolveAgentGUIConversationTitle(title, provider) {
159
80
  };
160
81
  }
161
82
  return {
162
- title: AGENT_PROVIDER_LABEL[provider],
83
+ title: providerLabel(provider),
163
84
  titleFallback: null
164
85
  };
165
86
  }
166
87
  function resolveAgentGUIConversationDisplayTitle(input, fallbackAgentLabel) {
167
88
  if (input.title) {
168
- return stripAgentGUITitleTrailingPeriod(
169
- normalizeAgentTitleText(input.title)
170
- );
89
+ return stripAgentGUITitleTrailingPeriod(input.title.trim());
171
90
  }
172
91
  if (input.titleFallback === "generic-agent") {
173
92
  return stripAgentGUITitleTrailingPeriod(fallbackAgentLabel);
174
93
  }
175
94
  return "";
176
95
  }
177
- function formatAgentGUIConversationPlainTitle(input, options = {}) {
178
- return formatAgentSessionMentionText(
179
- resolveAgentGUIConversationDisplayTitle(
180
- input,
181
- options.fallbackAgentLabel ?? "Agent"
182
- ),
183
- {
184
- language: options.language
185
- }
186
- );
187
- }
188
96
  function resolveAgentGUIExplicitConversationTitle(input) {
189
97
  if (input.titleFallback) {
190
98
  return null;
191
99
  }
192
- const title = stripAgentGUITitleTrailingPeriod(
193
- normalizeAgentTitleText(input.title)
194
- );
100
+ const title = stripAgentGUITitleTrailingPeriod(input.title.trim());
195
101
  if (!title) {
196
102
  return null;
197
103
  }
198
104
  if (isAgentGUIUntitledTaskTitle(title)) {
199
105
  return null;
200
106
  }
201
- if (input.provider !== "unknown" && title === AGENT_PROVIDER_LABEL[input.provider]) {
107
+ if (input.provider !== "unknown" && title === providerLabel(input.provider)) {
202
108
  return null;
203
109
  }
204
110
  return title;
@@ -208,7 +114,7 @@ function resolveAgentGUIProviderDisplayLabel(provider, fallbackAgentLabel) {
208
114
  if (resolvedProvider === "unknown") {
209
115
  return fallbackAgentLabel;
210
116
  }
211
- return AGENT_PROVIDER_LABEL[resolvedProvider];
117
+ return providerLabel(resolvedProvider);
212
118
  }
213
119
  function firstAgentGUIUserMessageTitle(messages) {
214
120
  const userMessage = [...messages].filter(
@@ -302,14 +208,13 @@ function compactTitleText(value) {
302
208
  export {
303
209
  AGENT_PROVIDERS,
304
210
  AGENT_PROVIDER_LABEL,
305
- formatAgentSessionMentionText,
306
211
  isAgentGUIProviderUnresolved,
307
212
  normalizeAgentGUIProviderIdentity,
308
213
  resolveAgentGUIProviderIdentity,
309
214
  resolveAgentGUIConversationTitle,
310
- formatAgentGUIConversationPlainTitle,
215
+ resolveAgentGUIConversationDisplayTitle,
311
216
  resolveAgentGUIExplicitConversationTitle,
312
217
  resolveAgentGUIProviderDisplayLabel,
313
218
  firstAgentGUIUserMessageTitle
314
219
  };
315
- //# sourceMappingURL=chunk-CRO2MV2Y.js.map
220
+ //# sourceMappingURL=chunk-XGGKHIQA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../contexts/settings/domain/agentSettings.providers.ts","../contexts/settings/domain/agentSettings.providerMeta.ts","../shared/agentConversationTitleProjection.ts"],"sourcesContent":["export const AGENT_PROVIDERS = [\n \"claude-code\",\n \"codex\",\n \"cursor\",\n \"tutti-agent\",\n \"nexight\",\n \"opencode\",\n \"openclaw\",\n \"hermes\"\n] as const;\nexport const EXPERIMENTAL_AGENT_PROVIDERS = [] as const;\n\nexport type AgentProvider = (typeof AGENT_PROVIDERS)[number];\n\nexport function isValidProvider(value: unknown): value is AgentProvider {\n return (\n typeof value === \"string\" &&\n AGENT_PROVIDERS.includes(value as AgentProvider)\n );\n}\n\nexport function normalizeAgentProviderOrder(value: unknown): AgentProvider[] {\n if (!Array.isArray(value)) {\n return [...AGENT_PROVIDERS];\n }\n\n const normalized: AgentProvider[] = [];\n const seen = new Set<AgentProvider>();\n\n for (const item of value) {\n if (!isValidProvider(item)) {\n continue;\n }\n\n if (seen.has(item)) {\n continue;\n }\n\n seen.add(item);\n normalized.push(item);\n }\n\n for (const provider of AGENT_PROVIDERS) {\n if (seen.has(provider)) {\n continue;\n }\n\n seen.add(provider);\n normalized.push(provider);\n }\n\n return normalized;\n}\n","import { resolveAgentGUIProviderCatalogIdentity } from \"../../../providerIdentityCatalog.ts\";\nimport {\n AGENT_PROVIDERS,\n type AgentProvider\n} from \"./agentSettings.providers.ts\";\n\nexport const AGENT_PROVIDER_LABEL = Object.fromEntries(\n AGENT_PROVIDERS.map((provider) => {\n const identity = resolveAgentGUIProviderCatalogIdentity(provider);\n if (!identity) {\n throw new Error(`Missing provider identity for ${provider}`);\n }\n return [provider, identity.displayName];\n })\n) as Record<AgentProvider, string>;\n\nexport interface AgentProviderCapabilities {\n runtimeObservation: \"jsonl\" | \"provider-api\" | \"none\";\n experimental: boolean;\n}\n\nexport const AGENT_PROVIDER_CAPABILITIES: Record<\n AgentProvider,\n AgentProviderCapabilities\n> = {\n \"claude-code\": {\n runtimeObservation: \"jsonl\",\n experimental: false\n },\n codex: {\n runtimeObservation: \"jsonl\",\n experimental: false\n },\n \"tutti-agent\": {\n runtimeObservation: \"provider-api\",\n experimental: false\n },\n cursor: {\n runtimeObservation: \"jsonl\",\n experimental: false\n },\n nexight: {\n runtimeObservation: \"jsonl\",\n experimental: false\n },\n opencode: {\n runtimeObservation: \"provider-api\",\n experimental: false\n },\n openclaw: {\n runtimeObservation: \"jsonl\",\n experimental: false\n },\n hermes: {\n runtimeObservation: \"jsonl\",\n experimental: false\n }\n};\n","import { AGENT_PROVIDER_LABEL } from \"../contexts/settings/domain/agentSettings.providerMeta.ts\";\nimport { translateInUiLanguage } from \"../i18n/runtime.ts\";\nimport { resolveAgentGUIProviderCatalogIdentity } from \"../providerIdentityCatalog.ts\";\nimport type { AgentGUIProvider } from \"../types.ts\";\nimport type { WorkspaceAgentActivityTimelineItem } from \"./workspaceAgentTimelineTypes.ts\";\nimport { normalizeAgentTitleText } from \"./utils/agentTitleText.ts\";\n\nexport type AgentGUIResolvedProvider = AgentGUIProvider | \"unknown\";\nexport type AgentGUIConversationTitleFallback = \"generic-agent\" | null;\n\nconst AGENT_GUI_UNRESOLVED_PROVIDER: AgentGUIResolvedProvider = \"unknown\";\n\nexport function isAgentGUIProviderUnresolved(\n value: AgentGUIResolvedProvider\n): value is \"unknown\" {\n return value === AGENT_GUI_UNRESOLVED_PROVIDER;\n}\n\nexport interface AgentGUIConversationTitleMessage {\n id?: number | string | null;\n messageId?: string | null;\n version?: number | null;\n role?: string | null;\n kind?: string | null;\n payload?: {\n content?: unknown;\n displayPrompt?: unknown;\n text?: unknown;\n } | null;\n occurredAtUnixMs?: number | null;\n completedAtUnixMs?: number | null;\n startedAtUnixMs?: number | null;\n}\n\nexport function normalizeAgentGUIProviderIdentity(\n provider: string | null | undefined\n): AgentGUIResolvedProvider {\n const normalized = provider?.trim().toLowerCase() ?? \"\";\n const catalogIdentity = resolveAgentGUIProviderCatalogIdentity(normalized);\n if (catalogIdentity) {\n return catalogIdentity.providerId as AgentGUIProvider;\n }\n if (!/^[a-z][a-z0-9._:-]{0,127}$/.test(normalized)) {\n return \"unknown\";\n }\n return normalized as AgentGUIProvider;\n}\n\nfunction providerLabel(provider: AgentGUIProvider): string {\n return (AGENT_PROVIDER_LABEL as Record<string, string>)[provider] ?? provider;\n}\n\nexport function resolveAgentGUIProviderIdentity(input: {\n sessionProvider?: string | null;\n workspaceSessionProvider?: string | null;\n conversationProvider?: string | null;\n timelineItems?: readonly WorkspaceAgentActivityTimelineItem[];\n}): AgentGUIResolvedProvider {\n const candidates = [\n input.sessionProvider,\n input.workspaceSessionProvider,\n input.conversationProvider,\n timelineProviderHint(input.timelineItems ?? [])\n ];\n for (const candidate of candidates) {\n const normalized = normalizeAgentGUIProviderIdentity(candidate);\n if (normalized !== \"unknown\") {\n return normalized;\n }\n }\n return \"unknown\";\n}\n\nexport function resolveAgentGUIConversationTitle(\n title: string | null | undefined,\n provider: AgentGUIResolvedProvider\n): {\n title: string;\n titleFallback: AgentGUIConversationTitleFallback;\n} {\n const normalizedTitle = stripAgentGUITitleTrailingPeriod(title?.trim() ?? \"\");\n if (normalizedTitle) {\n return {\n title: normalizedTitle,\n titleFallback: null\n };\n }\n if (provider === \"unknown\") {\n return {\n title: \"\",\n titleFallback: \"generic-agent\"\n };\n }\n return {\n title: providerLabel(provider),\n titleFallback: null\n };\n}\n\nexport function resolveAgentGUIConversationDisplayTitle(\n input: {\n title: string;\n titleFallback?: AgentGUIConversationTitleFallback;\n },\n fallbackAgentLabel: string\n): string {\n if (input.title) {\n return stripAgentGUITitleTrailingPeriod(input.title.trim());\n }\n if (input.titleFallback === \"generic-agent\") {\n return stripAgentGUITitleTrailingPeriod(fallbackAgentLabel);\n }\n return \"\";\n}\n\nexport function resolveAgentGUIDockConversationTitle(input: {\n provider: AgentGUIResolvedProvider;\n title: string;\n titleFallback?: AgentGUIConversationTitleFallback;\n}): string | null {\n return resolveAgentGUIExplicitConversationTitle(input);\n}\n\nexport function resolveAgentGUIExplicitConversationTitle(input: {\n provider: AgentGUIResolvedProvider;\n title: string;\n titleFallback?: AgentGUIConversationTitleFallback;\n}): string | null {\n if (input.titleFallback) {\n return null;\n }\n\n const title = stripAgentGUITitleTrailingPeriod(input.title.trim());\n if (!title) {\n return null;\n }\n if (isAgentGUIUntitledTaskTitle(title)) {\n return null;\n }\n\n if (input.provider !== \"unknown\" && title === providerLabel(input.provider)) {\n return null;\n }\n\n return title;\n}\n\nexport function resolveAgentGUIProviderDisplayLabel(\n provider: string | null | undefined,\n fallbackAgentLabel: string\n): string {\n const resolvedProvider = normalizeAgentGUIProviderIdentity(provider);\n if (resolvedProvider === \"unknown\") {\n return fallbackAgentLabel;\n }\n return providerLabel(resolvedProvider);\n}\n\nexport function firstAgentGUIUserMessageTitle(\n messages: readonly AgentGUIConversationTitleMessage[]\n): string {\n const userMessage = [...messages]\n .filter(\n (message) =>\n messageRole(message) === \"user\" && messageText(message).length > 0\n )\n .sort(compareMessagesAscending)[0];\n return userMessage ? messageText(userMessage) : \"\";\n}\n\nfunction messageRole(\n message: AgentGUIConversationTitleMessage\n): \"user\" | \"agent\" | null {\n const role = message.role?.trim().toLowerCase();\n if (role === \"user\") {\n return \"user\";\n }\n if (role === \"assistant\" || role === \"agent\") {\n return \"agent\";\n }\n const kind = message.kind?.trim().toLowerCase() ?? \"\";\n if (kind === \"message.user\") {\n return \"user\";\n }\n if (kind === \"message.assistant\" || kind === \"message.agent\") {\n return \"agent\";\n }\n return null;\n}\n\nfunction messageText(message: AgentGUIConversationTitleMessage): string {\n const payload = message.payload;\n const displayPrompt =\n typeof payload?.displayPrompt === \"string\" ? payload.displayPrompt : \"\";\n const text = typeof payload?.text === \"string\" ? payload.text : \"\";\n const content = typeof payload?.content === \"string\" ? payload.content : \"\";\n return normalizeAgentTitleText(displayPrompt || text || content);\n}\n\nfunction compareMessagesAscending(\n left: AgentGUIConversationTitleMessage,\n right: AgentGUIConversationTitleMessage\n): number {\n const leftTime =\n left.occurredAtUnixMs ??\n left.completedAtUnixMs ??\n left.startedAtUnixMs ??\n 0;\n const rightTime =\n right.occurredAtUnixMs ??\n right.completedAtUnixMs ??\n right.startedAtUnixMs ??\n 0;\n const timeDiff = leftTime - rightTime;\n if (timeDiff !== 0) {\n return timeDiff;\n }\n const sequenceDiff =\n messageSequence(left) - messageSequence(right) ||\n (left.messageId ?? \"\").localeCompare(right.messageId ?? \"\");\n return sequenceDiff;\n}\n\nfunction messageSequence(message: AgentGUIConversationTitleMessage): number {\n const numericId =\n typeof message.id === \"number\" && Number.isFinite(message.id)\n ? message.id\n : 0;\n return message.version ?? numericId;\n}\n\nfunction stripAgentGUITitleTrailingPeriod(title: string): string {\n return title\n .trimEnd()\n .replace(/[.。]+$/u, \"\")\n .trimEnd();\n}\n\nfunction isAgentGUIUntitledTaskTitle(title: string): boolean {\n return localizedAgentGUIUntitledTaskLabels().has(compactTitleText(title));\n}\n\nfunction localizedAgentGUIUntitledTaskLabels(): Set<string> {\n return new Set(\n ([\"en\", \"zh-CN\"] as const)\n .map((language) =>\n compactTitleText(\n translateInUiLanguage(\n language,\n \"agentHost.workspaceAgentsUntitledTask\"\n )\n )\n )\n .filter(Boolean)\n );\n}\n\nfunction timelineProviderHint(\n timelineItems: readonly WorkspaceAgentActivityTimelineItem[]\n): string | null {\n for (const item of timelineItems) {\n if (isUserTimelineItem(item)) {\n continue;\n }\n const normalized = normalizeAgentGUIProviderIdentity(item.actorId);\n if (normalized !== \"unknown\") {\n return normalized;\n }\n }\n return null;\n}\n\nfunction isUserTimelineItem(item: WorkspaceAgentActivityTimelineItem): boolean {\n const role = item.role?.trim().toLowerCase();\n if (role === \"user\") {\n return true;\n }\n const actorType = item.actorType.trim().toLowerCase();\n if (actorType === \"user\") {\n return true;\n }\n return item.itemType.trim().toLowerCase() === \"message.user\";\n}\n\nfunction compactTitleText(value: string): string {\n return value.trim().replace(/\\s+/g, \" \");\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  translate
3
- } from "./chunk-BIHBXWK5.js";
3
+ } from "./chunk-3EAANCKF.js";
4
4
  import {
5
5
  agentGUIProviderIdentityDisplayName,
6
6
  resolveMigratedAgentGUIProviderIdentity
@@ -22,4 +22,4 @@ function titleCase(value) {
22
22
  export {
23
23
  workspaceAgentProviderLabel
24
24
  };
25
- //# sourceMappingURL=chunk-NX3CZJXW.js.map
25
+ //# sourceMappingURL=chunk-Y57VNTVM.js.map
@@ -0,0 +1,12 @@
1
+ // shared/workspaceAgentSessionSortTime.ts
2
+ function resolveWorkspaceAgentSessionSortTimeUnixMs(session) {
3
+ return positiveNumber(session.latestTurn?.startedAtUnixMs) ?? positiveNumber(session.createdAtUnixMs) ?? 0;
4
+ }
5
+ function positiveNumber(value) {
6
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : null;
7
+ }
8
+
9
+ export {
10
+ resolveWorkspaceAgentSessionSortTimeUnixMs
11
+ };
12
+ //# sourceMappingURL=chunk-YMXYBG7U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../shared/workspaceAgentSessionSortTime.ts"],"sourcesContent":["export interface WorkspaceAgentSessionSortTimeSession {\n createdAtUnixMs?: number;\n latestTurn?: WorkspaceAgentSessionSortTimeTurn | null;\n}\n\nexport interface WorkspaceAgentSessionSortTimeTurn {\n startedAtUnixMs: number;\n}\n\nexport function resolveWorkspaceAgentSessionSortTimeUnixMs(\n session: WorkspaceAgentSessionSortTimeSession\n): number {\n return (\n positiveNumber(session.latestTurn?.startedAtUnixMs) ??\n positiveNumber(session.createdAtUnixMs) ??\n 0\n );\n}\n\nfunction positiveNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0\n ? value\n : null;\n}\n"],"mappings":";AASO,SAAS,2CACd,SACQ;AACR,SACE,eAAe,QAAQ,YAAY,eAAe,KAClD,eAAe,QAAQ,eAAe,KACtC;AAEJ;AAEA,SAAS,eAAe,OAA+B;AACrD,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,KAAK,QAAQ,IAClE,QACA;AACN;","names":[]}
@@ -1,4 +1,4 @@
1
- import { A as AgentContextMentionItem } from '../agentFileMentionContracts-Czvz6YMI.js';
1
+ import { A as AgentContextMentionItem } from '../agentFileMentionContracts-58IjMU-u.js';
2
2
  import { AgentMentionSearchState, AgentMentionBrowseCategory, AgentMentionFilterId, AgentMentionGroupId } from '../mention-search.js';
3
3
  export { AgentMentionGroup, AgentMentionSearchController } from '../mention-search.js';
4
4
  export { AGENT_CONTEXT_MENTION_PROVIDER_IDS, AgentContextMentionInsertResult, AgentContextMentionProvider, AgentContextMentionProviderId, AgentContextMentionQueryInput } from '../context-mention-provider.js';
@@ -3,26 +3,26 @@ import {
3
3
  AgentFileMentionPalette,
4
4
  flattenAgentMentionPaletteEntries,
5
5
  groupStartKeys
6
- } from "../chunk-LQVXBT65.js";
6
+ } from "../chunk-3RYZYA72.js";
7
7
  import {
8
8
  AgentMentionSearchController
9
- } from "../chunk-JX2SIXNL.js";
10
- import "../chunk-BFNJKTDV.js";
9
+ } from "../chunk-AO2FDYAL.js";
10
+ import "../chunk-4VBKQY24.js";
11
+ import "../chunk-4YVGHJIE.js";
12
+ import "../chunk-Y35GDLP2.js";
13
+ import "../chunk-LUGELG5V.js";
11
14
  import {
12
15
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
13
16
  } from "../chunk-JM24HADP.js";
14
- import "../chunk-NITOD7WF.js";
15
- import "../chunk-7J4K6WKB.js";
16
- import "../chunk-GCBDIQDX.js";
17
- import "../chunk-7PFDA2HQ.js";
18
- import "../chunk-Y35GDLP2.js";
19
- import "../chunk-LUGELG5V.js";
20
- import "../chunk-KAL4XZMA.js";
21
- import "../chunk-H6IQ63DQ.js";
22
- import "../chunk-NX3CZJXW.js";
23
- import "../chunk-BIHBXWK5.js";
24
- import "../chunk-AOS2VWU6.js";
17
+ import "../chunk-74CPYRWJ.js";
18
+ import "../chunk-YMXYBG7U.js";
19
+ import "../chunk-MASXZENX.js";
20
+ import "../chunk-Y57VNTVM.js";
25
21
  import "../chunk-PJP5BUU6.js";
22
+ import "../chunk-H6IQ63DQ.js";
23
+ import "../chunk-GCBDIQDX.js";
24
+ import "../chunk-3EAANCKF.js";
25
+ import "../chunk-K2NURZ7V.js";
26
26
  import "../chunk-5X7YDOC6.js";
27
27
  import "../chunk-KJQERFKX.js";
28
28
  import "../chunk-UGVI47X6.js";
@@ -1,4 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
+ export { A as AGENT_PASTED_TEXT_BLOCK_KIND, a as AGENT_PASTED_TEXT_MENTION_KIND } from './pastedTextKinds-D-XuInaS.js';
2
3
 
3
4
  interface AgentCustomMentionIdentity {
4
5
  entityId: string;
@@ -38,7 +39,4 @@ declare function registerAgentCustomMentionKind(definition: AgentCustomMentionKi
38
39
  declare function getAgentCustomMentionKind(kind: string): AgentCustomMentionKindDefinition | undefined;
39
40
  declare function resetAgentCustomMentionKindsForTests(): void;
40
41
 
41
- declare const AGENT_PASTED_TEXT_BLOCK_KIND = "pasted-text";
42
- declare const AGENT_PASTED_TEXT_MENTION_KIND = "pasted-text";
43
-
44
- export { AGENT_PASTED_TEXT_BLOCK_KIND, AGENT_PASTED_TEXT_MENTION_KIND, type AgentCustomMentionChipContext, type AgentCustomMentionIdentity, type AgentCustomMentionKindDefinition, type AgentCustomMentionPresentation, getAgentCustomMentionKind, registerAgentCustomMentionKind, resetAgentCustomMentionKindsForTests };
42
+ export { type AgentCustomMentionChipContext, type AgentCustomMentionIdentity, type AgentCustomMentionKindDefinition, type AgentCustomMentionPresentation, getAgentCustomMentionKind, registerAgentCustomMentionKind, resetAgentCustomMentionKindsForTests };
@@ -1,6 +1,4 @@
1
- import { m as AgentGUIProvider } from './types-DX2bxgB8.js';
2
-
3
- declare const agentGuiDockIconUrls: Record<AgentGUIProvider, string>;
4
- declare const agentGuiDockIconUrl: string;
1
+ declare const agentGuiDockIconUrls: Record<string, string>;
2
+ declare const agentGuiDockIconUrl: string | undefined;
5
3
 
6
4
  export { agentGuiDockIconUrl, agentGuiDockIconUrls };
@@ -385,6 +385,7 @@ declare const agentGuiI18nResources: {
385
385
  readonly loadMore: "Load more";
386
386
  readonly loadMoreGroups: "Load more";
387
387
  readonly loading: "Loading...";
388
+ readonly loadError: "Couldn't load this content. Try again later.";
388
389
  readonly previewBinary: "This file looks like binary content.";
389
390
  readonly previewDecodeFailed: "This file couldn't be decoded as UTF-8 text.";
390
391
  readonly previewError: "Couldn't load a preview.";
@@ -592,6 +593,8 @@ declare const agentGuiI18nResources: {
592
593
  readonly loadingConversation: "Loading session...";
593
594
  readonly scrollToBottom: "Scroll to bottom";
594
595
  readonly searchNoConversations: "No related sessions";
596
+ readonly searchFailed: "Could not search sessions";
597
+ readonly retrySearch: "Retry search";
595
598
  readonly conversationUnavailable: "Session unavailable.";
596
599
  readonly contextPickerBrowseHint: "Search workspace files based on your input";
597
600
  readonly contextPickerBrowseFileHint: "No opened or Agent-generated files yet. Type a file name to search your computer.";
@@ -679,6 +682,18 @@ declare const agentGuiI18nResources: {
679
682
  readonly conversationFilterNexight: "Nexight";
680
683
  readonly conversationFilterHermes: "Hermes Agent";
681
684
  readonly conversationFilterOpenClaw: "OpenClaw";
685
+ readonly manageAgents: "Agent Sidebar Display Settings";
686
+ readonly manageAgentsTitle: "Agent Sidebar Display Settings";
687
+ readonly manageAgentsDescription: "Drag to reorder or move agents between the available and disabled groups. Press and hold an agent to edit.";
688
+ readonly manageAgentsAvailable: "Available Agents";
689
+ readonly manageAgentsDisabled: "Disabled Agents";
690
+ readonly manageAgentsNoAvailable: "Add an agent from the disabled list below.";
691
+ readonly manageAgentsNoDisabled: "Drag agents you don’t want to show in the sidebar here.";
692
+ readonly manageAgentsKeepOneAvailable: "Keep at least one agent available.";
693
+ readonly manageAgentsRunningBlocked: "{{agent}} is running and can't be disabled. Wait for it to finish and try again.";
694
+ readonly removeAgentFromSidebar: "Remove {{agent}} from sidebar";
695
+ readonly addAgentToSidebar: "Add {{agent}} to sidebar";
696
+ readonly dragAgentToReorder: "Drag {{agent}} to reorder";
682
697
  readonly initialPlaceholder: "Type @ to reference sessions, files, tasks, and apps";
683
698
  readonly followupPlaceholder: "Request follow-up changes from {{provider}}";
684
699
  readonly installRequiredPlaceholder: "Connect {{provider}} to send messages";
@@ -837,6 +852,7 @@ declare const agentGuiI18nResources: {
837
852
  readonly planModeOffLabel: "Off";
838
853
  readonly planUnavailable: "Plan unavailable";
839
854
  readonly queuedLabel: "Queued";
855
+ readonly queuePausedByUserLabel: "The queue is paused because you interrupted the current response.";
840
856
  readonly sendQueuedPromptNext: "Send next";
841
857
  readonly editQueuedPrompt: "Edit";
842
858
  readonly deleteQueuedPrompt: "Delete";
@@ -885,6 +901,7 @@ declare const agentGuiI18nResources: {
885
901
  readonly pastedTextFilesHeader: "Referenced pasted text files:";
886
902
  readonly pastedTextFileLine: "- pasted text file \"{{preview}}\": {{path}}. Read this file before continuing.";
887
903
  readonly pastedTextAttachmentTitle: "Pasted text";
904
+ readonly pastedTextAttachmentFailed: "Pasted text couldn't be saved";
888
905
  readonly pastedTextRestoreToComposer: "Show in text field";
889
906
  readonly copyMessage: "Copy message";
890
907
  readonly copyImage: "Copy image";
@@ -2862,6 +2879,7 @@ declare const agentGuiI18nResources: {
2862
2879
  readonly loadMore: "加载更多";
2863
2880
  readonly loadMoreGroups: "拉取更多";
2864
2881
  readonly loading: "正在加载";
2882
+ readonly loadError: "加载内容失败,请稍后重试";
2865
2883
  readonly previewBinary: "这个文件更像二进制内容";
2866
2884
  readonly previewDecodeFailed: "暂时无法按 UTF-8 文本解码这个文件";
2867
2885
  readonly previewError: "加载预览失败";
@@ -3069,6 +3087,8 @@ declare const agentGuiI18nResources: {
3069
3087
  readonly loadingConversation: "正在加载会话...";
3070
3088
  readonly scrollToBottom: "滚动至底部";
3071
3089
  readonly searchNoConversations: "暂无相关会话";
3090
+ readonly searchFailed: "无法搜索会话";
3091
+ readonly retrySearch: "重试搜索";
3072
3092
  readonly conversationUnavailable: "会话不可用。";
3073
3093
  readonly contextPickerBrowseHint: "根据你输入的内容搜索工作区文件";
3074
3094
  readonly contextPickerBrowseFileHint: "暂无已打开或 Agent 生成的文件,继续输入文件名可搜索本机文件";
@@ -3156,6 +3176,18 @@ declare const agentGuiI18nResources: {
3156
3176
  readonly conversationFilterNexight: "Nexight";
3157
3177
  readonly conversationFilterHermes: "Hermes Agent";
3158
3178
  readonly conversationFilterOpenClaw: "OpenClaw";
3179
+ readonly manageAgents: "Agent 栏展示设置";
3180
+ readonly manageAgentsTitle: "Agent 栏展示设置";
3181
+ readonly manageAgentsDescription: "拖拽调整顺序或在可用与停用分组间移动,长按 Agent 可进入编辑。";
3182
+ readonly manageAgentsAvailable: "可用 Agent";
3183
+ readonly manageAgentsDisabled: "停用 Agent";
3184
+ readonly manageAgentsNoAvailable: "可从下方停用列表添加 Agent。";
3185
+ readonly manageAgentsNoDisabled: "可以把不希望展示在侧边栏的agent拖到这里";
3186
+ readonly manageAgentsKeepOneAvailable: "至少保留一个可用 Agent。";
3187
+ readonly manageAgentsRunningBlocked: "{{agent}} 正在运行,暂时无法停用。请等待任务结束后再试。";
3188
+ readonly removeAgentFromSidebar: "从左侧栏移除 {{agent}}";
3189
+ readonly addAgentToSidebar: "将 {{agent}} 添加到左侧栏";
3190
+ readonly dragAgentToReorder: "拖拽 {{agent}} 调整顺序";
3159
3191
  readonly initialPlaceholder: "输入 @ 引用会话、文件、任务和应用";
3160
3192
  readonly followupPlaceholder: "要求 {{provider}} 继续后续变更";
3161
3193
  readonly installRequiredPlaceholder: "请先连接 {{provider}},然后再发送消息";
@@ -3314,6 +3346,7 @@ declare const agentGuiI18nResources: {
3314
3346
  readonly planModeOffLabel: "关闭";
3315
3347
  readonly planUnavailable: "规划模式不可用";
3316
3348
  readonly queuedLabel: "排队中";
3349
+ readonly queuePausedByUserLabel: "由于你中断了当前响应,队列已暂停";
3317
3350
  readonly sendQueuedPromptNext: "直接发送";
3318
3351
  readonly editQueuedPrompt: "编辑";
3319
3352
  readonly deleteQueuedPrompt: "删除";
@@ -3362,6 +3395,7 @@ declare const agentGuiI18nResources: {
3362
3395
  readonly pastedTextFilesHeader: "引用的粘贴文本文件:";
3363
3396
  readonly pastedTextFileLine: "- 粘贴的文本文件 \"{{preview}}\":{{path}},继续前请先阅读此文件。";
3364
3397
  readonly pastedTextAttachmentTitle: "粘贴的文本";
3398
+ readonly pastedTextAttachmentFailed: "无法保存粘贴的文本";
3365
3399
  readonly pastedTextRestoreToComposer: "在文本框中显示";
3366
3400
  readonly copyMessage: "复制消息";
3367
3401
  readonly copyImage: "复制图片";
@@ -6,8 +6,8 @@ import {
6
6
  translate,
7
7
  translateInUiLanguage,
8
8
  useTranslation
9
- } from "../chunk-BIHBXWK5.js";
10
- import "../chunk-AOS2VWU6.js";
9
+ } from "../chunk-3EAANCKF.js";
10
+ import "../chunk-K2NURZ7V.js";
11
11
  export {
12
12
  AgentGuiI18nProvider,
13
13
  agentGuiI18nModule,
package/dist/index.d.ts CHANGED
@@ -1,14 +1,15 @@
1
- export { AGENT_PASTED_TEXT_BLOCK_KIND, AGENT_PASTED_TEXT_MENTION_KIND, AgentCustomMentionChipContext, AgentCustomMentionIdentity, AgentCustomMentionKindDefinition, AgentCustomMentionPresentation, getAgentCustomMentionKind, registerAgentCustomMentionKind, resetAgentCustomMentionKindsForTests } from './custom-mention.js';
2
- import { A as AgentActivityRuntime } from './AgentGUI-CwBLYtv-.js';
3
- export { a as AgentActivityRuntimeDeleteSessionSectionResult, b as AgentActivityRuntimeListSessionMessagesInput, c as AgentActivityRuntimePromptContentBlock, d as AgentActivityRuntimeProvider, e as AgentActivityRuntimeProviderProps, f as AgentActivityRuntimeSessionSectionCount, g as AgentActivityRuntimeSessionSectionScopeInput, h as AgentActivityRuntimeSetSessionPinnedInput, i as AgentActivityRuntimeUpdateSessionSettingsInput, j as AgentActivityRuntimeUpdateSessionSettingsResult, k as AgentActivityRuntimeUploadPromptContentInput, l as AgentActivityRuntimeUploadPromptContentResult, m as AgentGUI, n as AgentGUIAccountMenuState, o as AgentGUIAgentsEmptyRenderer, p as AgentGUIProps, q as AgentGUIProviderUnavailableStateContext, r as AgentGUIProviderUnavailableStateRenderer, s as AgentGUISidebarFooterContext, t as AgentGUISidebarFooterRenderer, u as resetAgentActivityRuntimeForTests, v as setAgentActivityRuntimeForTests, w as useAgentActivityRuntime, x as useAgentActivitySnapshot, y as useOptionalAgentActivityRuntime } from './AgentGUI-CwBLYtv-.js';
1
+ export { AgentCustomMentionChipContext, AgentCustomMentionIdentity, AgentCustomMentionKindDefinition, AgentCustomMentionPresentation, getAgentCustomMentionKind, registerAgentCustomMentionKind, resetAgentCustomMentionKindsForTests } from './custom-mention.js';
2
+ export { A as AGENT_PASTED_TEXT_BLOCK_KIND, a as AGENT_PASTED_TEXT_MENTION_KIND } from './pastedTextKinds-D-XuInaS.js';
3
+ import { A as AgentActivityRuntime } from './AgentGUI-DWdvUV4x.js';
4
+ export { a as AgentActivityRuntimeDeleteSessionsBatchInput, b as AgentActivityRuntimeDeleteSessionsBatchResult, c as AgentActivityRuntimeListSessionMessagesInput, d as AgentActivityRuntimePromptContentBlock, e as AgentActivityRuntimeProvider, f as AgentActivityRuntimeProviderProps, g as AgentActivityRuntimeSessionSectionDeletionCandidates, h as AgentActivityRuntimeSessionSectionScopeInput, i as AgentActivityRuntimeSetSessionPinnedInput, j as AgentActivityRuntimeUpdateSessionSettingsInput, k as AgentActivityRuntimeUpdateSessionSettingsResult, l as AgentActivityRuntimeUploadPromptContentInput, m as AgentActivityRuntimeUploadPromptContentResult, n as AgentGUI, o as AgentGUIAccountMenuState, p as AgentGUIAgentsEmptyRenderer, q as AgentGUIProps, r as AgentGUIProviderUnavailableStateContext, s as AgentGUIProviderUnavailableStateRenderer, t as AgentGUISidebarFooterContext, u as AgentGUISidebarFooterRenderer, v as resetAgentActivityRuntimeForTests, w as setAgentActivityRuntimeForTests, x as useAgentActivityRuntime, y as useAgentActivitySnapshot, z as useOptionalAgentActivityRuntime } from './AgentGUI-DWdvUV4x.js';
4
5
  export { agentGUIAgentIsReady, normalizeAgentGUIAgents, resolveAgentGUISelectedDirectoryAgent } from './agents.js';
5
- import { m as AgentGUIProvider, h as AgentGUIAgentTarget, i as AgentGUIAgentTargetBadge } from './types-DX2bxgB8.js';
6
- export { A as AgentGUIAgent, a as AgentGUIAgentAvailability, b as AgentGUIAgentAvailabilityAction, c as AgentGUIAgentAvailabilityStatus, d as AgentGUIAgentDirectoryPort, e as AgentGUIAgentDirectorySnapshot, f as AgentGUIAgentDirectoryStatus, g as AgentGUIAgentOwner, j as AgentGUIAgentTargetRef, k as AgentGUIAllAgentsPresentation, n as AgentGUIProviderRailAllPresentation, o as AgentGUIProviderRailMode, p as AgentGUIProviderReadinessGate, q as AgentGUIProviderReadinessGateAction, r as AgentGUIProviderReadinessGateStatus } from './types-DX2bxgB8.js';
6
+ import { n as AgentGUIProvider, h as AgentGUIAgentTarget, i as AgentGUIAgentTargetBadge } from './types-CnT8rNUI.js';
7
+ export { A as AgentGUIAgent, a as AgentGUIAgentAvailability, b as AgentGUIAgentAvailabilityAction, c as AgentGUIAgentAvailabilityStatus, d as AgentGUIAgentDirectoryPort, e as AgentGUIAgentDirectorySnapshot, f as AgentGUIAgentDirectoryStatus, g as AgentGUIAgentOwner, j as AgentGUIAgentTargetRef, k as AgentGUIAllAgentsPresentation, l as AgentGUIHomeSuggestionId, o as AgentGUIProviderRailAllPresentation, p as AgentGUIProviderRailMode, q as AgentGUIProviderReadinessGate, r as AgentGUIProviderReadinessGateAction, s as AgentGUIProviderReadinessGateStatus } from './types-CnT8rNUI.js';
7
8
  export { AgentGuiI18nProvider, agentGuiI18nModule, agentGuiI18nResources } from './i18n/index.js';
8
9
  export { agentGuiDockIconUrl, agentGuiDockIconUrls } from './dock-icons.js';
9
- import { g as AgentHostInputApi } from './agentGuiNodeTypes-DppADPHW.js';
10
- export { e as AgentHostApi, f as AgentHostApplyWorkspaceGitPatchInput, h as AgentHostRuntimeApi, i as AgentHostSelectFilesInput, k as AgentProbeProvider, l as AgentProbeSnapshot, m as AgentProviderProbeListInput, n as AgentProviderProbeListResult, q as AgentUsageQuota, r as AgentUsageSnapshot, P as PersistWriteResult, R as ReadWorkspaceAgentReadStateInput, W as WorkspaceAgentReadStateSnapshot, s as WriteWorkspaceAgentReadStateInput } from './agentGuiNodeTypes-DppADPHW.js';
11
- export { AgentActivityAdapter, AgentActivityController, AgentActivityMessage, AgentActivityNeedsAttentionItem, AgentActivitySnapshot, selectNeedsAttentionCount, selectNeedsAttentionItems } from '@tutti-os/agent-activity-core';
10
+ import { h as AgentHostInputApi } from './agentGuiNodeTypes-B9X4aWfv.js';
11
+ export { f as AgentHostApi, g as AgentHostApplyWorkspaceGitPatchInput, i as AgentHostRuntimeApi, j as AgentHostSelectFilesInput, l as AgentProbeProvider, m as AgentProbeSnapshot, n as AgentProviderProbeListInput, o as AgentProviderProbeListResult, r as AgentUsageQuota, s as AgentUsageSnapshot, P as PersistWriteResult, R as ReadWorkspaceAgentReadStateInput, W as WorkspaceAgentReadStateSnapshot, t as WriteWorkspaceAgentReadStateInput } from './agentGuiNodeTypes-B9X4aWfv.js';
12
+ export { AgentActivityAdapter, AgentActivityMessage, AgentActivityNeedsAttentionItem, AgentActivitySnapshot, selectNeedsAttentionCount, selectNeedsAttentionItems } from '@tutti-os/agent-activity-core';
12
13
  export { AGENT_CONTEXT_MENTION_PROVIDER_IDS, AgentContextMentionProvider, AgentContextMentionProviderId } from './context-mention-provider.js';
13
14
  export { preloadAgentMentionBrowse } from './mention-search.js';
14
15
  import { PropsWithChildren, JSX } from 'react';
@@ -16,10 +17,9 @@ export { A as AgentPlanPromptAction, E as EngineStateStore, d as dispatchAgentPl
16
17
  export { A as AgentGuiI18nLocale } from './runtime-BBNdWgDU.js';
17
18
  import '@tutti-os/ui-i18n-runtime';
18
19
  import '@tutti-os/workspace-file-reference/contracts';
19
- import './agentFileMentionContracts-Czvz6YMI.js';
20
+ import './agentFileMentionContracts-58IjMU-u.js';
20
21
  import '@tutti-os/workspace-file-manager/services';
21
22
  import '@tutti-os/workspace-file-reference/core';
22
- import './uiSettings-BQS9r2eo.js';
23
23
  import './agentConversationVM-C335TR6S.js';
24
24
  import '@tutti-os/workspace-issue-manager/core';
25
25
  import './workspaceAgentActivityListTypes-C7gPWYiA.js';
@@ -59,6 +59,8 @@ declare function resolveAgentGUIAgentTarget(input: {
59
59
  }): AgentGUIAgentTarget | null;
60
60
 
61
61
  declare const AGENT_GUI_DETAIL_MIN_WIDTH_PX = 220;
62
+ declare const AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX = 720;
63
+ declare const AGENT_GUI_EXPANDED_TARGET_WIDTH_PX = 800;
62
64
  interface AgentGUIExpandedWindowFrameInput {
63
65
  position: {
64
66
  x: number;
@@ -72,7 +74,7 @@ interface AgentGUIExpandedWindowFrameInput {
72
74
  };
73
75
  conversationRailWidthPx: number | null | undefined;
74
76
  }
75
- declare function shouldAutoCollapseAgentGUIConversationRail(containerWidthPx: number): boolean;
77
+ declare function shouldAutoCollapseAgentGUIConversationRail(containerWidthPx: number, autoCollapseWidthPx?: number): boolean;
76
78
  declare function resolveAgentGUIExpandedWindowFrame(input: AgentGUIExpandedWindowFrameInput): {
77
79
  position: {
78
80
  x: number;
@@ -90,4 +92,4 @@ interface AgentActivityHostProviderProps extends PropsWithChildren {
90
92
  }
91
93
  declare function AgentActivityHostProvider({ agentActivityRuntime, agentHostApi, children }: AgentActivityHostProviderProps): JSX.Element;
92
94
 
93
- export { AGENT_GUI_DETAIL_MIN_WIDTH_PX, AgentActivityHostProvider, type AgentActivityHostProviderProps, AgentActivityRuntime, AgentGUIAgentTarget, AgentGUIAgentTargetBadge, AgentGUIProvider, AgentHostInputApi, agentGUIDefaultTargetProviders, createLocalAgentGUIAgentTarget, createLocalAgentGUIAgentTargets, createSharedAgentGUIAgentTarget, localAgentGUIAgentTargetId, normalizeAgentGUIAgentTargets, resolveAgentGUIAgentTarget, resolveAgentGUIExpandedWindowFrame, shouldAutoCollapseAgentGUIConversationRail };
95
+ export { AGENT_GUI_DETAIL_MIN_WIDTH_PX, AGENT_GUI_EXPANDED_TARGET_WIDTH_PX, AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX, AgentActivityHostProvider, type AgentActivityHostProviderProps, AgentActivityRuntime, AgentGUIAgentTarget, AgentGUIAgentTargetBadge, AgentGUIProvider, AgentHostInputApi, agentGUIDefaultTargetProviders, createLocalAgentGUIAgentTarget, createLocalAgentGUIAgentTargets, createSharedAgentGUIAgentTarget, localAgentGUIAgentTargetId, normalizeAgentGUIAgentTargets, resolveAgentGUIAgentTarget, resolveAgentGUIExpandedWindowFrame, shouldAutoCollapseAgentGUIConversationRail };
package/dist/index.js CHANGED
@@ -7,30 +7,42 @@ import {
7
7
  localAgentGUIAgentTargetId,
8
8
  normalizeAgentGUIAgentTargets,
9
9
  resolveAgentGUIAgentTarget
10
- } from "./chunk-RY6GIO3K.js";
10
+ } from "./chunk-BIS4QRX7.js";
11
11
  import {
12
12
  AGENT_GUI_DETAIL_MIN_WIDTH_PX,
13
+ AGENT_GUI_EXPANDED_TARGET_WIDTH_PX,
14
+ AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX,
13
15
  resolveAgentGUIExpandedWindowFrame,
14
16
  shouldAutoCollapseAgentGUIConversationRail
15
- } from "./chunk-7RDD3EWP.js";
16
- import "./chunk-NJAZ7LQM.js";
17
- import "./chunk-WEDMAVX2.js";
18
- import "./chunk-UQJPV6HP.js";
19
- import "./chunk-VF22EG3F.js";
20
- import "./chunk-LQVXBT65.js";
17
+ } from "./chunk-RE4AXS27.js";
18
+ import "./chunk-TVIGLNNI.js";
19
+ import "./chunk-XGGKHIQA.js";
20
+ import "./chunk-IYEXLOUE.js";
21
+ import "./chunk-L3GMMGRS.js";
22
+ import "./chunk-UHBCM6RO.js";
23
+ import "./chunk-AAFTWZV7.js";
24
+ import "./chunk-7BXWPI4F.js";
25
+ import "./chunk-3RYZYA72.js";
21
26
  import {
22
27
  agentGUIAgentIsReady,
23
28
  normalizeAgentGUIAgents,
24
29
  resolveAgentGUISelectedDirectoryAgent
25
- } from "./chunk-O6W72SEP.js";
30
+ } from "./chunk-C35SNDVZ.js";
31
+ import {
32
+ AGENT_PASTED_TEXT_BLOCK_KIND,
33
+ AGENT_PASTED_TEXT_MENTION_KIND
34
+ } from "./chunk-FGLQZ6I4.js";
26
35
  import {
27
36
  agentGuiDockIconUrl,
28
37
  agentGuiDockIconUrls
29
38
  } from "./chunk-4YG7YK7S.js";
30
39
  import {
31
40
  preloadAgentMentionBrowse
32
- } from "./chunk-JX2SIXNL.js";
33
- import "./chunk-BFNJKTDV.js";
41
+ } from "./chunk-AO2FDYAL.js";
42
+ import "./chunk-4VBKQY24.js";
43
+ import "./chunk-4YVGHJIE.js";
44
+ import "./chunk-Y35GDLP2.js";
45
+ import "./chunk-LUGELG5V.js";
34
46
  import {
35
47
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
36
48
  } from "./chunk-JM24HADP.js";
@@ -38,21 +50,10 @@ import {
38
50
  dispatchAgentPlanPromptAction,
39
51
  selectAgentPlanPromptTurn,
40
52
  useEngineSelector
41
- } from "./chunk-XMO45GKA.js";
42
- import "./chunk-CRO2MV2Y.js";
43
- import "./chunk-NITOD7WF.js";
44
- import "./chunk-7J4K6WKB.js";
45
- import "./chunk-GCBDIQDX.js";
46
- import "./chunk-3R2D4E57.js";
47
- import "./chunk-R2EWECUP.js";
48
- import {
49
- AGENT_PASTED_TEXT_BLOCK_KIND,
50
- AGENT_PASTED_TEXT_MENTION_KIND
51
- } from "./chunk-FGLQZ6I4.js";
52
- import "./chunk-7PFDA2HQ.js";
53
- import "./chunk-Y35GDLP2.js";
54
- import "./chunk-LUGELG5V.js";
55
- import "./chunk-C5FV4UGI.js";
53
+ } from "./chunk-P2BCMPTX.js";
54
+ import "./chunk-SQTSLCMV.js";
55
+ import "./chunk-74CPYRWJ.js";
56
+ import "./chunk-YMXYBG7U.js";
56
57
  import {
57
58
  AgentActivityHostProvider,
58
59
  AgentActivityRuntimeProvider,
@@ -61,16 +62,17 @@ import {
61
62
  useAgentActivityRuntime,
62
63
  useAgentActivitySnapshot,
63
64
  useOptionalAgentActivityRuntime
64
- } from "./chunk-KAL4XZMA.js";
65
+ } from "./chunk-MASXZENX.js";
66
+ import "./chunk-Y57VNTVM.js";
67
+ import "./chunk-PJP5BUU6.js";
65
68
  import "./chunk-H6IQ63DQ.js";
66
- import "./chunk-NX3CZJXW.js";
69
+ import "./chunk-GCBDIQDX.js";
67
70
  import {
68
71
  AgentGuiI18nProvider,
69
72
  agentGuiI18nModule,
70
73
  agentGuiI18nResources
71
- } from "./chunk-BIHBXWK5.js";
72
- import "./chunk-AOS2VWU6.js";
73
- import "./chunk-PJP5BUU6.js";
74
+ } from "./chunk-3EAANCKF.js";
75
+ import "./chunk-K2NURZ7V.js";
74
76
  import {
75
77
  getAgentCustomMentionKind,
76
78
  registerAgentCustomMentionKind,
@@ -87,6 +89,8 @@ import {
87
89
  export {
88
90
  AGENT_CONTEXT_MENTION_PROVIDER_IDS,
89
91
  AGENT_GUI_DETAIL_MIN_WIDTH_PX,
92
+ AGENT_GUI_EXPANDED_TARGET_WIDTH_PX,
93
+ AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX,
90
94
  AGENT_PASTED_TEXT_BLOCK_KIND,
91
95
  AGENT_PASTED_TEXT_MENTION_KIND,
92
96
  AgentActivityHostProvider,