@tutti-os/agent-gui 0.0.48 → 0.0.49

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 (49) hide show
  1. package/dist/agent-conversation/index.js +5 -5
  2. package/dist/agent-message-center/index.js +7 -7
  3. package/dist/app/renderer/agentactivity.css +40 -81
  4. package/dist/{chunk-RNIY43TA.js → chunk-5HJWT6YN.js} +4 -4
  5. package/dist/{chunk-OYQZRLJQ.js → chunk-6KQHNUR5.js} +2 -2
  6. package/dist/{chunk-N6HRVMIS.js → chunk-77UR4G7P.js} +2 -2
  7. package/dist/{chunk-VGDPBC6W.js → chunk-A2EN24OI.js} +4 -4
  8. package/dist/{chunk-2RYZ4EBF.js → chunk-AKK7UOAS.js} +2 -2
  9. package/dist/{chunk-EUOGIKT7.js → chunk-AYEYXKLF.js} +2 -2
  10. package/dist/{chunk-OB43QOMC.js → chunk-FSRS2JFR.js} +2 -2
  11. package/dist/{chunk-NETHPCSA.js → chunk-K6SRLYC3.js} +7 -1
  12. package/dist/chunk-K6SRLYC3.js.map +1 -0
  13. package/dist/{chunk-7W3VWU5R.js → chunk-Q3MOU4CD.js} +2 -2
  14. package/dist/{chunk-R6GOICRO.js → chunk-QGBIGRZA.js} +56 -9
  15. package/dist/chunk-QGBIGRZA.js.map +1 -0
  16. package/dist/{chunk-6YN7HQL5.js → chunk-RJR2OZ6T.js} +2 -2
  17. package/dist/{chunk-SD56WDSC.js → chunk-TG3ZXLPM.js} +42 -1
  18. package/dist/chunk-TG3ZXLPM.js.map +1 -0
  19. package/dist/{chunk-ZVKRNEOF.js → chunk-TTDBLIQ3.js} +2 -2
  20. package/dist/{chunk-LWMC2YA3.js → chunk-XRJZCEOX.js} +35 -11
  21. package/dist/chunk-XRJZCEOX.js.map +1 -0
  22. package/dist/context-mention-palette/index.js +6 -6
  23. package/dist/i18n/index.d.ts +6 -0
  24. package/dist/i18n/index.js +2 -2
  25. package/dist/index.js +402 -799
  26. package/dist/index.js.map +1 -1
  27. package/dist/queued-prompt-runtime.d.ts +1 -0
  28. package/dist/queued-prompt-runtime.js +1 -1
  29. package/dist/workbench/contribution.js +2 -2
  30. package/dist/workbench/index.js +5 -5
  31. package/dist/workbench/launch.d.ts +22 -1
  32. package/dist/workbench/launch.js +13 -3
  33. package/dist/workbench/sessionTitle.js +3 -3
  34. package/dist/workspace-agent-generated-files.js +3 -3
  35. package/package.json +12 -12
  36. package/dist/chunk-LWMC2YA3.js.map +0 -1
  37. package/dist/chunk-NETHPCSA.js.map +0 -1
  38. package/dist/chunk-R6GOICRO.js.map +0 -1
  39. package/dist/chunk-SD56WDSC.js.map +0 -1
  40. /package/dist/{chunk-RNIY43TA.js.map → chunk-5HJWT6YN.js.map} +0 -0
  41. /package/dist/{chunk-OYQZRLJQ.js.map → chunk-6KQHNUR5.js.map} +0 -0
  42. /package/dist/{chunk-N6HRVMIS.js.map → chunk-77UR4G7P.js.map} +0 -0
  43. /package/dist/{chunk-VGDPBC6W.js.map → chunk-A2EN24OI.js.map} +0 -0
  44. /package/dist/{chunk-2RYZ4EBF.js.map → chunk-AKK7UOAS.js.map} +0 -0
  45. /package/dist/{chunk-EUOGIKT7.js.map → chunk-AYEYXKLF.js.map} +0 -0
  46. /package/dist/{chunk-OB43QOMC.js.map → chunk-FSRS2JFR.js.map} +0 -0
  47. /package/dist/{chunk-7W3VWU5R.js.map → chunk-Q3MOU4CD.js.map} +0 -0
  48. /package/dist/{chunk-6YN7HQL5.js.map → chunk-RJR2OZ6T.js.map} +0 -0
  49. /package/dist/{chunk-ZVKRNEOF.js.map → chunk-TTDBLIQ3.js.map} +0 -0
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  translate,
16
16
  translateInUiLanguage
17
- } from "./chunk-N6HRVMIS.js";
17
+ } from "./chunk-77UR4G7P.js";
18
18
 
19
19
  // shared/workspaceAgentActivityListViewModel.ts
20
20
  import {
@@ -997,4 +997,4 @@ export {
997
997
  resolveWorkspaceAgentActivityStatus,
998
998
  resolveWorkspaceAgentActivityTitle
999
999
  };
1000
- //# sourceMappingURL=chunk-7W3VWU5R.js.map
1000
+ //# sourceMappingURL=chunk-Q3MOU4CD.js.map
@@ -10,10 +10,17 @@ import {
10
10
  // workbench/launch.ts
11
11
  var agentGuiWorkbenchTypeId = "agent-gui";
12
12
  var agentGuiWorkbenchDockEntryPrefix = "agent-gui:";
13
+ var agentGuiWorkbenchUnifiedDockEntryIdValue = "agent-gui:unified";
13
14
  var agentGuiWorkbenchInstanceSequence = 0;
14
15
  function agentGuiWorkbenchDockEntryId(provider) {
15
16
  return provider === "codex" ? agentGuiWorkbenchTypeId : `${agentGuiWorkbenchDockEntryPrefix}${provider}`;
16
17
  }
18
+ function agentGuiWorkbenchUnifiedDockEntryId() {
19
+ return agentGuiWorkbenchUnifiedDockEntryIdValue;
20
+ }
21
+ function agentGuiWorkbenchDockEntryIdForLayout(input) {
22
+ return input.dockLayout === "unified" ? agentGuiWorkbenchUnifiedDockEntryId() : agentGuiWorkbenchDockEntryId(input.provider);
23
+ }
17
24
  function agentGuiWorkbenchInstanceId(provider) {
18
25
  return `${agentGuiWorkbenchDockEntryPrefix}${provider}`;
19
26
  }
@@ -33,15 +40,25 @@ function createAgentGuiWorkbenchInstanceId(input) {
33
40
  ].join(":");
34
41
  }
35
42
  function agentGuiWorkbenchProviderFromIdentifier(value) {
43
+ const identity = agentGuiWorkbenchDockIdentityFromIdentifier(value);
44
+ return identity?.kind === "legacyProvider" ? identity.provider : null;
45
+ }
46
+ function agentGuiWorkbenchDockIdentityFromIdentifier(value) {
36
47
  const normalized = value?.trim();
37
- if (!normalized || normalized === agentGuiWorkbenchTypeId) {
38
- return normalized === agentGuiWorkbenchTypeId ? "codex" : null;
48
+ if (!normalized) {
49
+ return null;
50
+ }
51
+ if (normalized === agentGuiWorkbenchUnifiedDockEntryId()) {
52
+ return { kind: "unifiedAggregate" };
53
+ }
54
+ if (normalized === agentGuiWorkbenchTypeId) {
55
+ return { kind: "legacyProvider", provider: "codex" };
39
56
  }
40
57
  if (!normalized.startsWith(agentGuiWorkbenchDockEntryPrefix)) {
41
58
  return null;
42
59
  }
43
60
  const provider = normalized.slice(agentGuiWorkbenchDockEntryPrefix.length).split(":", 1)[0];
44
- return isAgentGuiWorkbenchProvider(provider) ? provider : null;
61
+ return isAgentGuiWorkbenchProvider(provider) ? { kind: "legacyProvider", provider } : null;
45
62
  }
46
63
  function agentGuiWorkbenchProviderFromLaunchRequest(request) {
47
64
  const payloadProvider = request.payload && typeof request.payload === "object" && !Array.isArray(request.payload) ? request.payload.provider : null;
@@ -81,6 +98,10 @@ function createAgentGuiWorkbenchDraftLaunchRequest(input) {
81
98
  }
82
99
  function createAgentGuiWorkbenchLaunchDescriptor(request) {
83
100
  const provider = agentGuiWorkbenchProviderFromLaunchRequest(request);
101
+ const dockEntryId = resolveAgentGuiWorkbenchLaunchDockEntryId({
102
+ provider,
103
+ requestedDockEntryId: request.dockEntryId
104
+ });
84
105
  const prefillPrompt = prefillPromptFromLaunchPayload(request.payload);
85
106
  if (prefillPrompt) {
86
107
  return {
@@ -88,10 +109,13 @@ function createAgentGuiWorkbenchLaunchDescriptor(request) {
88
109
  payload: prefillPrompt,
89
110
  type: agentGuiWorkbenchPrefillPromptActivationType
90
111
  },
91
- dockEntryId: request.dockEntryId ?? agentGuiWorkbenchDockEntryId(provider),
112
+ dockEntryId,
92
113
  instanceId: createAgentGuiWorkbenchInstanceId({ provider }),
93
114
  provider,
94
- reuseDockEntryNode: true,
115
+ reuseDockEntryNode: shouldReuseAgentGuiWorkbenchDockEntryNode({
116
+ dockEntryId,
117
+ launchKind: "prefill"
118
+ }),
95
119
  targetAgentSessionId: null
96
120
  };
97
121
  }
@@ -107,13 +131,31 @@ function createAgentGuiWorkbenchLaunchDescriptor(request) {
107
131
  },
108
132
  type: agentGuiWorkbenchOpenSessionActivationType
109
133
  } : null,
110
- dockEntryId: request.dockEntryId ?? agentGuiWorkbenchDockEntryId(provider),
134
+ dockEntryId,
111
135
  instanceId,
112
136
  provider,
113
- reuseDockEntryNode: false,
137
+ reuseDockEntryNode: shouldReuseAgentGuiWorkbenchDockEntryNode({
138
+ dockEntryId,
139
+ launchKind: targetAgentSessionId ? "session" : "empty"
140
+ }),
114
141
  targetAgentSessionId
115
142
  };
116
143
  }
144
+ function resolveAgentGuiWorkbenchLaunchDockEntryId(input) {
145
+ const requestedIdentity = agentGuiWorkbenchDockIdentityFromIdentifier(
146
+ input.requestedDockEntryId
147
+ );
148
+ if (requestedIdentity?.kind === "unifiedAggregate") {
149
+ return agentGuiWorkbenchUnifiedDockEntryId();
150
+ }
151
+ return agentGuiWorkbenchDockEntryId(input.provider);
152
+ }
153
+ function shouldReuseAgentGuiWorkbenchDockEntryNode(input) {
154
+ if (input.launchKind !== "prefill") {
155
+ return false;
156
+ }
157
+ return agentGuiWorkbenchDockIdentityFromIdentifier(input.dockEntryId)?.kind !== "unifiedAggregate";
158
+ }
117
159
  function encodeAgentGuiWorkbenchInstanceSegment(value) {
118
160
  return encodeURIComponent(value.trim());
119
161
  }
@@ -149,12 +191,17 @@ function agentSessionIdFromLaunchPayload(payload) {
149
191
  export {
150
192
  agentGuiWorkbenchTypeId,
151
193
  agentGuiWorkbenchDockEntryId,
194
+ agentGuiWorkbenchUnifiedDockEntryId,
195
+ agentGuiWorkbenchDockEntryIdForLayout,
152
196
  agentGuiWorkbenchInstanceId,
153
197
  createAgentGuiWorkbenchInstanceId,
154
198
  agentGuiWorkbenchProviderFromIdentifier,
199
+ agentGuiWorkbenchDockIdentityFromIdentifier,
155
200
  agentGuiWorkbenchProviderFromLaunchRequest,
156
201
  createAgentGuiWorkbenchSessionLaunchRequest,
157
202
  createAgentGuiWorkbenchDraftLaunchRequest,
158
- createAgentGuiWorkbenchLaunchDescriptor
203
+ createAgentGuiWorkbenchLaunchDescriptor,
204
+ resolveAgentGuiWorkbenchLaunchDockEntryId,
205
+ shouldReuseAgentGuiWorkbenchDockEntryNode
159
206
  };
160
- //# sourceMappingURL=chunk-R6GOICRO.js.map
207
+ //# sourceMappingURL=chunk-QGBIGRZA.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 AgentGuiWorkbenchDockLayout = \"legacySplit\" | \"unified\";\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 agentGuiWorkbenchDockEntryIdForLayout(input: {\n dockLayout: AgentGuiWorkbenchDockLayout;\n provider: AgentGuiWorkbenchProvider;\n}): string {\n return input.dockLayout === \"unified\"\n ? agentGuiWorkbenchUnifiedDockEntryId()\n : agentGuiWorkbenchDockEntryId(input.provider);\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 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\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 agentSessionId?: string;\n provider: unknown;\n}) {\n const provider = normalizeAgentGuiWorkbenchProvider(input.provider);\n return {\n dockEntryId: agentGuiWorkbenchDockEntryId(provider),\n payload: {\n ...(input.agentSessionId ? { agentSessionId: input.agentSessionId } : {}),\n provider\n },\n reason: \"host\" as const,\n typeId: agentGuiWorkbenchTypeId\n };\n}\n\nexport function createAgentGuiWorkbenchDraftLaunchRequest(input: {\n autoSubmit?: boolean;\n draftPrompt: string;\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.autoSubmit ? { autoSubmit: 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 provider: AgentGuiWorkbenchProvider;\n reuseDockEntryNode: 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 return {\n activation: {\n payload: prefillPrompt,\n type: agentGuiWorkbenchPrefillPromptActivationType\n },\n dockEntryId,\n instanceId: createAgentGuiWorkbenchInstanceId({ provider }),\n provider,\n reuseDockEntryNode: shouldReuseAgentGuiWorkbenchDockEntryNode({\n dockEntryId,\n launchKind: \"prefill\"\n }),\n targetAgentSessionId: null\n };\n }\n\n const targetAgentSessionId = agentSessionIdFromLaunchPayload(request.payload);\n const instanceId = createAgentGuiWorkbenchInstanceId({\n agentSessionId: targetAgentSessionId,\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 provider,\n reuseDockEntryNode: shouldReuseAgentGuiWorkbenchDockEntryNode({\n dockEntryId,\n launchKind: targetAgentSessionId ? \"session\" : \"empty\"\n }),\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 userProjectPath = (payload as { userProjectPath?: unknown })\n .userProjectPath;\n const normalizedUserProjectPath =\n typeof userProjectPath === \"string\"\n ? normalizeAgentGuiWorkbenchUserProjectPath(userProjectPath)\n : null;\n return {\n draftPrompt,\n ...(autoSubmit ? { autoSubmit: true } : {}),\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"],"mappings":"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","names":[]}
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  translate,
10
10
  useTranslation
11
- } from "./chunk-N6HRVMIS.js";
11
+ } from "./chunk-77UR4G7P.js";
12
12
 
13
13
  // shared/agentMcpToolTarget.ts
14
14
  function extractAgentMcpToolTarget({
@@ -3575,4 +3575,4 @@ export {
3575
3575
  CustomScrollArea,
3576
3576
  MessageSquareMoreIcon
3577
3577
  };
3578
- //# sourceMappingURL=chunk-6YN7HQL5.js.map
3578
+ //# sourceMappingURL=chunk-RJR2OZ6T.js.map
@@ -4,6 +4,10 @@ var EMPTY_AGENT_QUEUED_PROMPT_SNAPSHOT = Object.freeze({
4
4
  queuesByKey: Object.freeze({}),
5
5
  version: 0
6
6
  });
7
+ function logAgentQueuedPromptRuntime(event, details) {
8
+ void event;
9
+ void details;
10
+ }
7
11
  function createAgentQueuedPromptRuntime() {
8
12
  let snapshot = EMPTY_AGENT_QUEUED_PROMPT_SNAPSHOT;
9
13
  const emptyQueuesByKey = /* @__PURE__ */ new Map();
@@ -124,6 +128,14 @@ function createAgentQueuedPromptRuntime() {
124
128
  claim
125
129
  }));
126
130
  expiredClaimsByKey.delete(queueKey(workspaceId, agentSessionId));
131
+ logAgentQueuedPromptRuntime("claim", {
132
+ workspaceId,
133
+ agentSessionId,
134
+ ownerId,
135
+ promptId: prompt.id,
136
+ claimId: claim.claimId,
137
+ queueLength: current.prompts.length
138
+ });
127
139
  return { claim, prompt };
128
140
  },
129
141
  cleanupSession(input) {
@@ -149,6 +161,13 @@ function createAgentQueuedPromptRuntime() {
149
161
  completed = true;
150
162
  const promptId = matchingClaim.promptId;
151
163
  expiredClaimsByKey.delete(key);
164
+ logAgentQueuedPromptRuntime("complete-claim", {
165
+ workspaceId: input.workspaceId,
166
+ agentSessionId: input.agentSessionId,
167
+ ownerId: input.ownerId,
168
+ promptId,
169
+ claimId: input.claimId
170
+ });
152
171
  return {
153
172
  ...queue,
154
173
  claim: null,
@@ -169,6 +188,11 @@ function createAgentQueuedPromptRuntime() {
169
188
  ...queue,
170
189
  prompts: Object.freeze([...queue.prompts, freezePrompt(input.prompt)])
171
190
  }));
191
+ logAgentQueuedPromptRuntime("enqueue", {
192
+ workspaceId: input.workspaceId,
193
+ agentSessionId: input.agentSessionId,
194
+ promptId: input.prompt.id
195
+ });
172
196
  },
173
197
  getSessionSnapshot(input) {
174
198
  const workspaceId = input.workspaceId.trim();
@@ -192,6 +216,11 @@ function createAgentQueuedPromptRuntime() {
192
216
  ...queue,
193
217
  failedPromptId: input.promptId.trim() || queue.failedPromptId
194
218
  }));
219
+ logAgentQueuedPromptRuntime("mark-failed", {
220
+ workspaceId: input.workspaceId,
221
+ agentSessionId: input.agentSessionId,
222
+ promptId: input.promptId
223
+ });
195
224
  },
196
225
  promotePrompt(input) {
197
226
  const promptId = input.promptId.trim();
@@ -229,6 +258,13 @@ function createAgentQueuedPromptRuntime() {
229
258
  return queue;
230
259
  }
231
260
  released = true;
261
+ logAgentQueuedPromptRuntime("release-claim", {
262
+ workspaceId: input.workspaceId,
263
+ agentSessionId: input.agentSessionId,
264
+ ownerId: input.ownerId,
265
+ claimId: input.claimId,
266
+ promptId: queue.claim.promptId
267
+ });
232
268
  return { ...queue, claim: null };
233
269
  });
234
270
  return released;
@@ -284,6 +320,11 @@ function createAgentQueuedPromptRuntime() {
284
320
  ...queue,
285
321
  retryBlock: input.retryBlock ? Object.freeze({ ...input.retryBlock }) : null
286
322
  }));
323
+ logAgentQueuedPromptRuntime("set-retry-block", {
324
+ workspaceId: input.workspaceId,
325
+ agentSessionId: input.agentSessionId,
326
+ retryBlock: input.retryBlock
327
+ });
287
328
  },
288
329
  subscribe(listener) {
289
330
  listeners.add(listener);
@@ -356,4 +397,4 @@ export {
356
397
  EMPTY_AGENT_QUEUED_PROMPT_SNAPSHOT,
357
398
  createAgentQueuedPromptRuntime
358
399
  };
359
- //# sourceMappingURL=chunk-SD56WDSC.js.map
400
+ //# sourceMappingURL=chunk-TG3ZXLPM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../agentQueuedPromptRuntimeCore.ts"],"sourcesContent":["import type { AgentGUIQueuedPromptVM } from \"./agent-gui/agentGuiNode/model/agentGuiNodeTypes\";\nimport type { AgentPromptContentBlock } from \"./shared/contracts/dto\";\n\nexport interface AgentQueuedPromptRetryBlock {\n queuedPromptId: string;\n sessionStateUpdatedAtUnixMs: number | null;\n conversationUpdatedAtUnixMs: number | null;\n}\n\nexport interface AgentQueuedPromptClaim {\n agentSessionId: string;\n claimId: string;\n ownerId: string;\n promptId: string;\n leasedUntilUnixMs: number;\n workspaceId: string;\n}\n\nexport interface AgentQueuedPromptQueueSnapshot {\n agentSessionId: string;\n claim: AgentQueuedPromptClaim | null;\n failedPromptId: string | null;\n prompts: readonly AgentGUIQueuedPromptVM[];\n retryBlock: AgentQueuedPromptRetryBlock | null;\n sendNextPromptId: string | null;\n workspaceId: string;\n}\n\nexport interface AgentQueuedPromptSnapshot {\n queuesByKey: Readonly<Record<string, AgentQueuedPromptQueueSnapshot>>;\n version: number;\n}\n\nexport interface AgentQueuedPromptClaimResult {\n claim: AgentQueuedPromptClaim;\n prompt: AgentGUIQueuedPromptVM;\n}\n\nexport interface AgentQueuedPromptRuntime {\n claimNextToDrain(input: {\n agentSessionId: string;\n leaseMs?: number;\n ownerId: string;\n workspaceId: string;\n }): AgentQueuedPromptClaimResult | null;\n cleanupSession(input: { agentSessionId: string; workspaceId: string }): void;\n completeClaim(input: {\n agentSessionId: string;\n claimId: string;\n ownerId: string;\n workspaceId: string;\n }): boolean;\n enqueue(input: {\n prompt: AgentGUIQueuedPromptVM;\n agentSessionId: string;\n workspaceId: string;\n }): void;\n getSessionSnapshot(input: {\n agentSessionId: string;\n workspaceId: string;\n }): AgentQueuedPromptQueueSnapshot;\n getSnapshot(): AgentQueuedPromptSnapshot;\n markPromptFailed(input: {\n agentSessionId: string;\n promptId: string;\n workspaceId: string;\n }): void;\n promotePrompt(input: {\n agentSessionId: string;\n promptId: string;\n workspaceId: string;\n }): void;\n releaseClaim(input: {\n agentSessionId: string;\n claimId: string;\n ownerId: string;\n workspaceId: string;\n }): boolean;\n /** @deprecated Queue drain owners should release exact claims by claim id. */\n releaseOwner(ownerId: string): void;\n removePrompt(input: {\n agentSessionId: string;\n promptId: string;\n workspaceId: string;\n }): AgentGUIQueuedPromptVM | null;\n setRetryBlock(input: {\n agentSessionId: string;\n retryBlock: AgentQueuedPromptRetryBlock | null;\n workspaceId: string;\n }): void;\n subscribe(listener: () => void): () => void;\n}\n\nconst DEFAULT_CLAIM_LEASE_MS = 30_000;\n\nexport const EMPTY_AGENT_QUEUED_PROMPT_SNAPSHOT: AgentQueuedPromptSnapshot =\n Object.freeze({\n queuesByKey: Object.freeze({}),\n version: 0\n });\n\nfunction logAgentQueuedPromptRuntime(\n event: string,\n details: Record<string, unknown>\n): void {\n void event;\n void details;\n}\n\nexport function createAgentQueuedPromptRuntime(): AgentQueuedPromptRuntime {\n let snapshot = EMPTY_AGENT_QUEUED_PROMPT_SNAPSHOT;\n const emptyQueuesByKey = new Map<string, AgentQueuedPromptQueueSnapshot>();\n const expiredClaimsByKey = new Map<string, AgentQueuedPromptClaim>();\n const listeners = new Set<() => void>();\n let claimExpiryTimer: ReturnType<typeof setTimeout> | null = null;\n\n const notify = (): void => {\n for (const listener of [...listeners]) {\n listener();\n }\n };\n\n const updateQueue = (\n workspaceId: string,\n agentSessionId: string,\n updater: (\n queue: AgentQueuedPromptQueueSnapshot\n ) => AgentQueuedPromptQueueSnapshot | null,\n options?: { releaseExpiredClaim?: boolean }\n ): void => {\n const key = queueKey(workspaceId, agentSessionId);\n const current =\n snapshot.queuesByKey[key] ??\n getEmptyQueueSnapshot(emptyQueuesByKey, { workspaceId, agentSessionId });\n const queueForUpdate =\n options?.releaseExpiredClaim === false\n ? current\n : withExpiredClaimReleased(current);\n if (queueForUpdate !== current && current.claim) {\n expiredClaimsByKey.set(key, current.claim);\n }\n const nextQueue = updater(queueForUpdate);\n if (nextQueue === current) {\n return;\n }\n const nextQueuesByKey: Record<string, AgentQueuedPromptQueueSnapshot> = {\n ...snapshot.queuesByKey\n };\n if (nextQueue === null || isEmptyQueue(nextQueue)) {\n delete nextQueuesByKey[key];\n } else {\n nextQueuesByKey[key] = freezeQueue(nextQueue);\n }\n clearExpiredClaimIfReplaced(expiredClaimsByKey, key, nextQueue);\n snapshot = Object.freeze({\n queuesByKey: Object.freeze(nextQueuesByKey),\n version: snapshot.version + 1\n });\n scheduleClaimExpiryWakeup();\n notify();\n };\n\n const releaseExpiredClaims = (): void => {\n claimExpiryTimer = null;\n let changed = false;\n const nextQueuesByKey: Record<string, AgentQueuedPromptQueueSnapshot> = {\n ...snapshot.queuesByKey\n };\n for (const [key, queue] of Object.entries(snapshot.queuesByKey)) {\n const nextQueue = withExpiredClaimReleased(queue);\n if (nextQueue === queue) {\n continue;\n }\n changed = true;\n if (queue.claim) {\n expiredClaimsByKey.set(key, queue.claim);\n }\n if (isEmptyQueue(nextQueue)) {\n delete nextQueuesByKey[key];\n } else {\n nextQueuesByKey[key] = nextQueue;\n }\n }\n if (changed) {\n snapshot = Object.freeze({\n queuesByKey: Object.freeze(nextQueuesByKey),\n version: snapshot.version + 1\n });\n notify();\n }\n scheduleClaimExpiryWakeup();\n };\n\n const scheduleClaimExpiryWakeup = (): void => {\n if (claimExpiryTimer) {\n clearTimeout(claimExpiryTimer);\n claimExpiryTimer = null;\n }\n let nextExpiryUnixMs: number | null = null;\n for (const queue of Object.values(snapshot.queuesByKey)) {\n if (!queue.claim) {\n continue;\n }\n nextExpiryUnixMs =\n nextExpiryUnixMs === null\n ? queue.claim.leasedUntilUnixMs\n : Math.min(nextExpiryUnixMs, queue.claim.leasedUntilUnixMs);\n }\n if (nextExpiryUnixMs === null) {\n return;\n }\n claimExpiryTimer = setTimeout(\n releaseExpiredClaims,\n Math.max(1, nextExpiryUnixMs - Date.now() + 1)\n );\n (claimExpiryTimer as { unref?: () => void }).unref?.();\n };\n\n return {\n claimNextToDrain(input) {\n const workspaceId = input.workspaceId.trim();\n const agentSessionId = input.agentSessionId.trim();\n const ownerId = input.ownerId.trim();\n if (!workspaceId || !agentSessionId || !ownerId) {\n return null;\n }\n const current = withExpiredClaimReleased(\n snapshot.queuesByKey[queueKey(workspaceId, agentSessionId)] ??\n getEmptyQueueSnapshot(emptyQueuesByKey, {\n workspaceId,\n agentSessionId\n })\n );\n if (current.claim || current.prompts.length === 0) {\n return null;\n }\n const prompt = current.prompts[0]!;\n const claim: AgentQueuedPromptClaim = Object.freeze({\n workspaceId,\n agentSessionId,\n ownerId,\n promptId: prompt.id,\n claimId: `claim-${Date.now()}-${Math.random().toString(36).slice(2)}`,\n leasedUntilUnixMs:\n Date.now() + Math.max(1, input.leaseMs ?? DEFAULT_CLAIM_LEASE_MS)\n });\n updateQueue(workspaceId, agentSessionId, (queue) => ({\n ...queue,\n claim\n }));\n expiredClaimsByKey.delete(queueKey(workspaceId, agentSessionId));\n logAgentQueuedPromptRuntime(\"claim\", {\n workspaceId,\n agentSessionId,\n ownerId,\n promptId: prompt.id,\n claimId: claim.claimId,\n queueLength: current.prompts.length\n });\n return { claim, prompt };\n },\n cleanupSession(input) {\n const workspaceId = input.workspaceId.trim();\n const agentSessionId = input.agentSessionId.trim();\n if (!workspaceId || !agentSessionId) {\n return;\n }\n updateQueue(workspaceId, agentSessionId, () => null);\n expiredClaimsByKey.delete(queueKey(workspaceId, agentSessionId));\n },\n completeClaim(input) {\n let completed = false;\n const key = queueKey(input.workspaceId, input.agentSessionId);\n updateQueue(\n input.workspaceId,\n input.agentSessionId,\n (queue) => {\n const matchingClaim = claimMatches(queue.claim, input)\n ? queue.claim\n : queue.claim === null &&\n claimMatches(expiredClaimsByKey.get(key) ?? null, input)\n ? expiredClaimsByKey.get(key)!\n : null;\n if (!matchingClaim) {\n return queue;\n }\n completed = true;\n const promptId = matchingClaim.promptId;\n expiredClaimsByKey.delete(key);\n logAgentQueuedPromptRuntime(\"complete-claim\", {\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId,\n ownerId: input.ownerId,\n promptId,\n claimId: input.claimId\n });\n return {\n ...queue,\n claim: null,\n failedPromptId:\n queue.failedPromptId === promptId ? null : queue.failedPromptId,\n prompts: Object.freeze(\n queue.prompts.filter((prompt) => prompt.id !== promptId)\n ),\n retryBlock:\n queue.retryBlock?.queuedPromptId === promptId\n ? null\n : queue.retryBlock,\n sendNextPromptId:\n queue.sendNextPromptId === promptId\n ? null\n : queue.sendNextPromptId\n };\n },\n { releaseExpiredClaim: false }\n );\n return completed;\n },\n enqueue(input) {\n updateQueue(input.workspaceId, input.agentSessionId, (queue) => ({\n ...queue,\n prompts: Object.freeze([...queue.prompts, freezePrompt(input.prompt)])\n }));\n logAgentQueuedPromptRuntime(\"enqueue\", {\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId,\n promptId: input.prompt.id\n });\n },\n getSessionSnapshot(input) {\n const workspaceId = input.workspaceId.trim();\n const agentSessionId = input.agentSessionId.trim();\n const key = queueKey(workspaceId, agentSessionId);\n const current =\n snapshot.queuesByKey[key] ??\n getEmptyQueueSnapshot(emptyQueuesByKey, {\n workspaceId,\n agentSessionId\n });\n const next = withExpiredClaimReleased(current);\n if (next !== current) {\n updateQueue(workspaceId, agentSessionId, () => next);\n }\n return snapshot.queuesByKey[key] ?? next;\n },\n getSnapshot() {\n return snapshot;\n },\n markPromptFailed(input) {\n updateQueue(input.workspaceId, input.agentSessionId, (queue) => ({\n ...queue,\n failedPromptId: input.promptId.trim() || queue.failedPromptId\n }));\n logAgentQueuedPromptRuntime(\"mark-failed\", {\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId,\n promptId: input.promptId\n });\n },\n promotePrompt(input) {\n const promptId = input.promptId.trim();\n if (!promptId) {\n return;\n }\n updateQueue(input.workspaceId, input.agentSessionId, (queue) => {\n const index = queue.prompts.findIndex(\n (prompt) => prompt.id === promptId\n );\n if (index < 0) {\n return queue;\n }\n if (queue.claim?.promptId === promptId) {\n return queue;\n }\n const prompts = [...queue.prompts];\n if (index > 0) {\n const [selected] = prompts.splice(index, 1);\n prompts.unshift(selected!);\n }\n return {\n ...queue,\n failedPromptId:\n queue.failedPromptId === promptId ? null : queue.failedPromptId,\n prompts: Object.freeze(prompts),\n retryBlock:\n queue.retryBlock?.queuedPromptId === promptId\n ? null\n : queue.retryBlock,\n sendNextPromptId: promptId\n };\n });\n },\n releaseClaim(input) {\n let released = false;\n updateQueue(input.workspaceId, input.agentSessionId, (queue) => {\n if (!claimMatches(queue.claim, input)) {\n return queue;\n }\n released = true;\n logAgentQueuedPromptRuntime(\"release-claim\", {\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId,\n ownerId: input.ownerId,\n claimId: input.claimId,\n promptId: queue.claim.promptId\n });\n return { ...queue, claim: null };\n });\n return released;\n },\n releaseOwner(ownerId) {\n const normalizedOwnerId = ownerId.trim();\n if (!normalizedOwnerId) {\n return;\n }\n for (const queue of Object.values(snapshot.queuesByKey)) {\n if (queue.claim?.ownerId === normalizedOwnerId) {\n updateQueue(queue.workspaceId, queue.agentSessionId, (current) => ({\n ...current,\n claim:\n current.claim?.ownerId === normalizedOwnerId\n ? null\n : current.claim\n }));\n }\n }\n },\n removePrompt(input) {\n const promptId = input.promptId.trim();\n if (!promptId) {\n return null;\n }\n let removed: AgentGUIQueuedPromptVM | null = null;\n updateQueue(input.workspaceId, input.agentSessionId, (queue) => {\n removed =\n queue.prompts.find((prompt) => prompt.id === promptId) ?? null;\n if (!removed) {\n return queue;\n }\n if (queue.claim?.promptId === promptId) {\n removed = null;\n return queue;\n }\n const key = queueKey(input.workspaceId, input.agentSessionId);\n if (expiredClaimsByKey.get(key)?.promptId === promptId) {\n expiredClaimsByKey.delete(key);\n }\n return {\n ...queue,\n claim: queue.claim?.promptId === promptId ? null : queue.claim,\n failedPromptId:\n queue.failedPromptId === promptId ? null : queue.failedPromptId,\n prompts: Object.freeze(\n queue.prompts.filter((prompt) => prompt.id !== promptId)\n ),\n retryBlock:\n queue.retryBlock?.queuedPromptId === promptId\n ? null\n : queue.retryBlock,\n sendNextPromptId:\n queue.sendNextPromptId === promptId ? null : queue.sendNextPromptId\n };\n });\n return removed;\n },\n setRetryBlock(input) {\n updateQueue(input.workspaceId, input.agentSessionId, (queue) => ({\n ...queue,\n retryBlock: input.retryBlock\n ? Object.freeze({ ...input.retryBlock })\n : null\n }));\n logAgentQueuedPromptRuntime(\"set-retry-block\", {\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId,\n retryBlock: input.retryBlock\n });\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n }\n };\n}\n\nfunction queueKey(workspaceId: string, agentSessionId: string): string {\n return `${workspaceId.trim()}\\0${agentSessionId.trim()}`;\n}\n\nfunction emptyQueueSnapshot(input: {\n workspaceId: string;\n agentSessionId: string;\n}): AgentQueuedPromptQueueSnapshot {\n return freezeQueue({\n workspaceId: input.workspaceId,\n agentSessionId: input.agentSessionId,\n claim: null,\n failedPromptId: null,\n prompts: Object.freeze([]),\n retryBlock: null,\n sendNextPromptId: null\n });\n}\n\nfunction getEmptyQueueSnapshot(\n cache: Map<string, AgentQueuedPromptQueueSnapshot>,\n input: {\n workspaceId: string;\n agentSessionId: string;\n }\n): AgentQueuedPromptQueueSnapshot {\n const key = queueKey(input.workspaceId, input.agentSessionId);\n const existing = cache.get(key);\n if (existing) {\n return existing;\n }\n const next = emptyQueueSnapshot(input);\n cache.set(key, next);\n return next;\n}\n\nfunction freezePrompt(prompt: AgentGUIQueuedPromptVM): AgentGUIQueuedPromptVM {\n return Object.freeze({\n ...prompt,\n content: Object.freeze([\n ...prompt.content\n ]) as unknown as AgentPromptContentBlock[]\n });\n}\n\nfunction freezeQueue(\n queue: AgentQueuedPromptQueueSnapshot\n): AgentQueuedPromptQueueSnapshot {\n return Object.freeze({\n ...queue,\n claim: queue.claim ? Object.freeze({ ...queue.claim }) : null,\n prompts: Object.freeze(queue.prompts.map(freezePrompt)),\n retryBlock: queue.retryBlock ? Object.freeze({ ...queue.retryBlock }) : null\n });\n}\n\nfunction withExpiredClaimReleased(\n queue: AgentQueuedPromptQueueSnapshot\n): AgentQueuedPromptQueueSnapshot {\n if (!queue.claim || queue.claim.leasedUntilUnixMs > Date.now()) {\n return queue;\n }\n return freezeQueue({ ...queue, claim: null });\n}\n\nfunction isEmptyQueue(queue: AgentQueuedPromptQueueSnapshot): boolean {\n return (\n queue.prompts.length === 0 &&\n queue.claim === null &&\n queue.failedPromptId === null &&\n queue.retryBlock === null &&\n queue.sendNextPromptId === null\n );\n}\n\nfunction claimMatches(\n claim: AgentQueuedPromptClaim | null,\n input: {\n agentSessionId: string;\n claimId: string;\n ownerId: string;\n workspaceId: string;\n }\n): claim is AgentQueuedPromptClaim {\n return (\n claim !== null &&\n claim.workspaceId === input.workspaceId.trim() &&\n claim.agentSessionId === input.agentSessionId.trim() &&\n claim.ownerId === input.ownerId.trim() &&\n claim.claimId === input.claimId.trim()\n );\n}\n\nfunction clearExpiredClaimIfReplaced(\n expiredClaimsByKey: Map<string, AgentQueuedPromptClaim>,\n key: string,\n queue: AgentQueuedPromptQueueSnapshot | null\n): void {\n const expiredClaim = expiredClaimsByKey.get(key);\n if (\n expiredClaim &&\n (queue === null ||\n queue.claim !== null ||\n !queue.prompts.some((prompt) => prompt.id === expiredClaim.promptId))\n ) {\n expiredClaimsByKey.delete(key);\n }\n}\n"],"mappings":";AA6FA,IAAM,yBAAyB;AAExB,IAAM,qCACX,OAAO,OAAO;AAAA,EACZ,aAAa,OAAO,OAAO,CAAC,CAAC;AAAA,EAC7B,SAAS;AACX,CAAC;AAEH,SAAS,4BACP,OACA,SACM;AACN,OAAK;AACL,OAAK;AACP;AAEO,SAAS,iCAA2D;AACzE,MAAI,WAAW;AACf,QAAM,mBAAmB,oBAAI,IAA4C;AACzE,QAAM,qBAAqB,oBAAI,IAAoC;AACnE,QAAM,YAAY,oBAAI,IAAgB;AACtC,MAAI,mBAAyD;AAE7D,QAAM,SAAS,MAAY;AACzB,eAAW,YAAY,CAAC,GAAG,SAAS,GAAG;AACrC,eAAS;AAAA,IACX;AAAA,EACF;AAEA,QAAM,cAAc,CAClB,aACA,gBACA,SAGA,YACS;AACT,UAAM,MAAM,SAAS,aAAa,cAAc;AAChD,UAAM,UACJ,SAAS,YAAY,GAAG,KACxB,sBAAsB,kBAAkB,EAAE,aAAa,eAAe,CAAC;AACzE,UAAM,iBACJ,SAAS,wBAAwB,QAC7B,UACA,yBAAyB,OAAO;AACtC,QAAI,mBAAmB,WAAW,QAAQ,OAAO;AAC/C,yBAAmB,IAAI,KAAK,QAAQ,KAAK;AAAA,IAC3C;AACA,UAAM,YAAY,QAAQ,cAAc;AACxC,QAAI,cAAc,SAAS;AACzB;AAAA,IACF;AACA,UAAM,kBAAkE;AAAA,MACtE,GAAG,SAAS;AAAA,IACd;AACA,QAAI,cAAc,QAAQ,aAAa,SAAS,GAAG;AACjD,aAAO,gBAAgB,GAAG;AAAA,IAC5B,OAAO;AACL,sBAAgB,GAAG,IAAI,YAAY,SAAS;AAAA,IAC9C;AACA,gCAA4B,oBAAoB,KAAK,SAAS;AAC9D,eAAW,OAAO,OAAO;AAAA,MACvB,aAAa,OAAO,OAAO,eAAe;AAAA,MAC1C,SAAS,SAAS,UAAU;AAAA,IAC9B,CAAC;AACD,8BAA0B;AAC1B,WAAO;AAAA,EACT;AAEA,QAAM,uBAAuB,MAAY;AACvC,uBAAmB;AACnB,QAAI,UAAU;AACd,UAAM,kBAAkE;AAAA,MACtE,GAAG,SAAS;AAAA,IACd;AACA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,WAAW,GAAG;AAC/D,YAAM,YAAY,yBAAyB,KAAK;AAChD,UAAI,cAAc,OAAO;AACvB;AAAA,MACF;AACA,gBAAU;AACV,UAAI,MAAM,OAAO;AACf,2BAAmB,IAAI,KAAK,MAAM,KAAK;AAAA,MACzC;AACA,UAAI,aAAa,SAAS,GAAG;AAC3B,eAAO,gBAAgB,GAAG;AAAA,MAC5B,OAAO;AACL,wBAAgB,GAAG,IAAI;AAAA,MACzB;AAAA,IACF;AACA,QAAI,SAAS;AACX,iBAAW,OAAO,OAAO;AAAA,QACvB,aAAa,OAAO,OAAO,eAAe;AAAA,QAC1C,SAAS,SAAS,UAAU;AAAA,MAC9B,CAAC;AACD,aAAO;AAAA,IACT;AACA,8BAA0B;AAAA,EAC5B;AAEA,QAAM,4BAA4B,MAAY;AAC5C,QAAI,kBAAkB;AACpB,mBAAa,gBAAgB;AAC7B,yBAAmB;AAAA,IACrB;AACA,QAAI,mBAAkC;AACtC,eAAW,SAAS,OAAO,OAAO,SAAS,WAAW,GAAG;AACvD,UAAI,CAAC,MAAM,OAAO;AAChB;AAAA,MACF;AACA,yBACE,qBAAqB,OACjB,MAAM,MAAM,oBACZ,KAAK,IAAI,kBAAkB,MAAM,MAAM,iBAAiB;AAAA,IAChE;AACA,QAAI,qBAAqB,MAAM;AAC7B;AAAA,IACF;AACA,uBAAmB;AAAA,MACjB;AAAA,MACA,KAAK,IAAI,GAAG,mBAAmB,KAAK,IAAI,IAAI,CAAC;AAAA,IAC/C;AACA,IAAC,iBAA4C,QAAQ;AAAA,EACvD;AAEA,SAAO;AAAA,IACL,iBAAiB,OAAO;AACtB,YAAM,cAAc,MAAM,YAAY,KAAK;AAC3C,YAAM,iBAAiB,MAAM,eAAe,KAAK;AACjD,YAAM,UAAU,MAAM,QAAQ,KAAK;AACnC,UAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,SAAS;AAC/C,eAAO;AAAA,MACT;AACA,YAAM,UAAU;AAAA,QACd,SAAS,YAAY,SAAS,aAAa,cAAc,CAAC,KACxD,sBAAsB,kBAAkB;AAAA,UACtC;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACL;AACA,UAAI,QAAQ,SAAS,QAAQ,QAAQ,WAAW,GAAG;AACjD,eAAO;AAAA,MACT;AACA,YAAM,SAAS,QAAQ,QAAQ,CAAC;AAChC,YAAM,QAAgC,OAAO,OAAO;AAAA,QAClD;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,OAAO;AAAA,QACjB,SAAS,SAAS,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AAAA,QACnE,mBACE,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,MAAM,WAAW,sBAAsB;AAAA,MACpE,CAAC;AACD,kBAAY,aAAa,gBAAgB,CAAC,WAAW;AAAA,QACnD,GAAG;AAAA,QACH;AAAA,MACF,EAAE;AACF,yBAAmB,OAAO,SAAS,aAAa,cAAc,CAAC;AAC/D,kCAA4B,SAAS;AAAA,QACnC;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,OAAO;AAAA,QACjB,SAAS,MAAM;AAAA,QACf,aAAa,QAAQ,QAAQ;AAAA,MAC/B,CAAC;AACD,aAAO,EAAE,OAAO,OAAO;AAAA,IACzB;AAAA,IACA,eAAe,OAAO;AACpB,YAAM,cAAc,MAAM,YAAY,KAAK;AAC3C,YAAM,iBAAiB,MAAM,eAAe,KAAK;AACjD,UAAI,CAAC,eAAe,CAAC,gBAAgB;AACnC;AAAA,MACF;AACA,kBAAY,aAAa,gBAAgB,MAAM,IAAI;AACnD,yBAAmB,OAAO,SAAS,aAAa,cAAc,CAAC;AAAA,IACjE;AAAA,IACA,cAAc,OAAO;AACnB,UAAI,YAAY;AAChB,YAAM,MAAM,SAAS,MAAM,aAAa,MAAM,cAAc;AAC5D;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,CAAC,UAAU;AACT,gBAAM,gBAAgB,aAAa,MAAM,OAAO,KAAK,IACjD,MAAM,QACN,MAAM,UAAU,QACd,aAAa,mBAAmB,IAAI,GAAG,KAAK,MAAM,KAAK,IACvD,mBAAmB,IAAI,GAAG,IAC1B;AACN,cAAI,CAAC,eAAe;AAClB,mBAAO;AAAA,UACT;AACA,sBAAY;AACZ,gBAAM,WAAW,cAAc;AAC/B,6BAAmB,OAAO,GAAG;AAC7B,sCAA4B,kBAAkB;AAAA,YAC5C,aAAa,MAAM;AAAA,YACnB,gBAAgB,MAAM;AAAA,YACtB,SAAS,MAAM;AAAA,YACf;AAAA,YACA,SAAS,MAAM;AAAA,UACjB,CAAC;AACD,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,OAAO;AAAA,YACP,gBACE,MAAM,mBAAmB,WAAW,OAAO,MAAM;AAAA,YACnD,SAAS,OAAO;AAAA,cACd,MAAM,QAAQ,OAAO,CAAC,WAAW,OAAO,OAAO,QAAQ;AAAA,YACzD;AAAA,YACA,YACE,MAAM,YAAY,mBAAmB,WACjC,OACA,MAAM;AAAA,YACZ,kBACE,MAAM,qBAAqB,WACvB,OACA,MAAM;AAAA,UACd;AAAA,QACF;AAAA,QACA,EAAE,qBAAqB,MAAM;AAAA,MAC/B;AACA,aAAO;AAAA,IACT;AAAA,IACA,QAAQ,OAAO;AACb,kBAAY,MAAM,aAAa,MAAM,gBAAgB,CAAC,WAAW;AAAA,QAC/D,GAAG;AAAA,QACH,SAAS,OAAO,OAAO,CAAC,GAAG,MAAM,SAAS,aAAa,MAAM,MAAM,CAAC,CAAC;AAAA,MACvE,EAAE;AACF,kCAA4B,WAAW;AAAA,QACrC,aAAa,MAAM;AAAA,QACnB,gBAAgB,MAAM;AAAA,QACtB,UAAU,MAAM,OAAO;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,IACA,mBAAmB,OAAO;AACxB,YAAM,cAAc,MAAM,YAAY,KAAK;AAC3C,YAAM,iBAAiB,MAAM,eAAe,KAAK;AACjD,YAAM,MAAM,SAAS,aAAa,cAAc;AAChD,YAAM,UACJ,SAAS,YAAY,GAAG,KACxB,sBAAsB,kBAAkB;AAAA,QACtC;AAAA,QACA;AAAA,MACF,CAAC;AACH,YAAM,OAAO,yBAAyB,OAAO;AAC7C,UAAI,SAAS,SAAS;AACpB,oBAAY,aAAa,gBAAgB,MAAM,IAAI;AAAA,MACrD;AACA,aAAO,SAAS,YAAY,GAAG,KAAK;AAAA,IACtC;AAAA,IACA,cAAc;AACZ,aAAO;AAAA,IACT;AAAA,IACA,iBAAiB,OAAO;AACtB,kBAAY,MAAM,aAAa,MAAM,gBAAgB,CAAC,WAAW;AAAA,QAC/D,GAAG;AAAA,QACH,gBAAgB,MAAM,SAAS,KAAK,KAAK,MAAM;AAAA,MACjD,EAAE;AACF,kCAA4B,eAAe;AAAA,QACzC,aAAa,MAAM;AAAA,QACnB,gBAAgB,MAAM;AAAA,QACtB,UAAU,MAAM;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IACA,cAAc,OAAO;AACnB,YAAM,WAAW,MAAM,SAAS,KAAK;AACrC,UAAI,CAAC,UAAU;AACb;AAAA,MACF;AACA,kBAAY,MAAM,aAAa,MAAM,gBAAgB,CAAC,UAAU;AAC9D,cAAM,QAAQ,MAAM,QAAQ;AAAA,UAC1B,CAAC,WAAW,OAAO,OAAO;AAAA,QAC5B;AACA,YAAI,QAAQ,GAAG;AACb,iBAAO;AAAA,QACT;AACA,YAAI,MAAM,OAAO,aAAa,UAAU;AACtC,iBAAO;AAAA,QACT;AACA,cAAM,UAAU,CAAC,GAAG,MAAM,OAAO;AACjC,YAAI,QAAQ,GAAG;AACb,gBAAM,CAAC,QAAQ,IAAI,QAAQ,OAAO,OAAO,CAAC;AAC1C,kBAAQ,QAAQ,QAAS;AAAA,QAC3B;AACA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,gBACE,MAAM,mBAAmB,WAAW,OAAO,MAAM;AAAA,UACnD,SAAS,OAAO,OAAO,OAAO;AAAA,UAC9B,YACE,MAAM,YAAY,mBAAmB,WACjC,OACA,MAAM;AAAA,UACZ,kBAAkB;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,aAAa,OAAO;AAClB,UAAI,WAAW;AACf,kBAAY,MAAM,aAAa,MAAM,gBAAgB,CAAC,UAAU;AAC9D,YAAI,CAAC,aAAa,MAAM,OAAO,KAAK,GAAG;AACrC,iBAAO;AAAA,QACT;AACA,mBAAW;AACX,oCAA4B,iBAAiB;AAAA,UAC3C,aAAa,MAAM;AAAA,UACnB,gBAAgB,MAAM;AAAA,UACtB,SAAS,MAAM;AAAA,UACf,SAAS,MAAM;AAAA,UACf,UAAU,MAAM,MAAM;AAAA,QACxB,CAAC;AACD,eAAO,EAAE,GAAG,OAAO,OAAO,KAAK;AAAA,MACjC,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IACA,aAAa,SAAS;AACpB,YAAM,oBAAoB,QAAQ,KAAK;AACvC,UAAI,CAAC,mBAAmB;AACtB;AAAA,MACF;AACA,iBAAW,SAAS,OAAO,OAAO,SAAS,WAAW,GAAG;AACvD,YAAI,MAAM,OAAO,YAAY,mBAAmB;AAC9C,sBAAY,MAAM,aAAa,MAAM,gBAAgB,CAAC,aAAa;AAAA,YACjE,GAAG;AAAA,YACH,OACE,QAAQ,OAAO,YAAY,oBACvB,OACA,QAAQ;AAAA,UAChB,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA,IACA,aAAa,OAAO;AAClB,YAAM,WAAW,MAAM,SAAS,KAAK;AACrC,UAAI,CAAC,UAAU;AACb,eAAO;AAAA,MACT;AACA,UAAI,UAAyC;AAC7C,kBAAY,MAAM,aAAa,MAAM,gBAAgB,CAAC,UAAU;AAC9D,kBACE,MAAM,QAAQ,KAAK,CAAC,WAAW,OAAO,OAAO,QAAQ,KAAK;AAC5D,YAAI,CAAC,SAAS;AACZ,iBAAO;AAAA,QACT;AACA,YAAI,MAAM,OAAO,aAAa,UAAU;AACtC,oBAAU;AACV,iBAAO;AAAA,QACT;AACA,cAAM,MAAM,SAAS,MAAM,aAAa,MAAM,cAAc;AAC5D,YAAI,mBAAmB,IAAI,GAAG,GAAG,aAAa,UAAU;AACtD,6BAAmB,OAAO,GAAG;AAAA,QAC/B;AACA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,OAAO,MAAM,OAAO,aAAa,WAAW,OAAO,MAAM;AAAA,UACzD,gBACE,MAAM,mBAAmB,WAAW,OAAO,MAAM;AAAA,UACnD,SAAS,OAAO;AAAA,YACd,MAAM,QAAQ,OAAO,CAAC,WAAW,OAAO,OAAO,QAAQ;AAAA,UACzD;AAAA,UACA,YACE,MAAM,YAAY,mBAAmB,WACjC,OACA,MAAM;AAAA,UACZ,kBACE,MAAM,qBAAqB,WAAW,OAAO,MAAM;AAAA,QACvD;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IACA,cAAc,OAAO;AACnB,kBAAY,MAAM,aAAa,MAAM,gBAAgB,CAAC,WAAW;AAAA,QAC/D,GAAG;AAAA,QACH,YAAY,MAAM,aACd,OAAO,OAAO,EAAE,GAAG,MAAM,WAAW,CAAC,IACrC;AAAA,MACN,EAAE;AACF,kCAA4B,mBAAmB;AAAA,QAC7C,aAAa,MAAM;AAAA,QACnB,gBAAgB,MAAM;AAAA,QACtB,YAAY,MAAM;AAAA,MACpB,CAAC;AAAA,IACH;AAAA,IACA,UAAU,UAAU;AAClB,gBAAU,IAAI,QAAQ;AACtB,aAAO,MAAM;AACX,kBAAU,OAAO,QAAQ;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,SAAS,aAAqB,gBAAgC;AACrE,SAAO,GAAG,YAAY,KAAK,CAAC,KAAK,eAAe,KAAK,CAAC;AACxD;AAEA,SAAS,mBAAmB,OAGO;AACjC,SAAO,YAAY;AAAA,IACjB,aAAa,MAAM;AAAA,IACnB,gBAAgB,MAAM;AAAA,IACtB,OAAO;AAAA,IACP,gBAAgB;AAAA,IAChB,SAAS,OAAO,OAAO,CAAC,CAAC;AAAA,IACzB,YAAY;AAAA,IACZ,kBAAkB;AAAA,EACpB,CAAC;AACH;AAEA,SAAS,sBACP,OACA,OAIgC;AAChC,QAAM,MAAM,SAAS,MAAM,aAAa,MAAM,cAAc;AAC5D,QAAM,WAAW,MAAM,IAAI,GAAG;AAC9B,MAAI,UAAU;AACZ,WAAO;AAAA,EACT;AACA,QAAM,OAAO,mBAAmB,KAAK;AACrC,QAAM,IAAI,KAAK,IAAI;AACnB,SAAO;AACT;AAEA,SAAS,aAAa,QAAwD;AAC5E,SAAO,OAAO,OAAO;AAAA,IACnB,GAAG;AAAA,IACH,SAAS,OAAO,OAAO;AAAA,MACrB,GAAG,OAAO;AAAA,IACZ,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAAS,YACP,OACgC;AAChC,SAAO,OAAO,OAAO;AAAA,IACnB,GAAG;AAAA,IACH,OAAO,MAAM,QAAQ,OAAO,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI;AAAA,IACzD,SAAS,OAAO,OAAO,MAAM,QAAQ,IAAI,YAAY,CAAC;AAAA,IACtD,YAAY,MAAM,aAAa,OAAO,OAAO,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI;AAAA,EAC1E,CAAC;AACH;AAEA,SAAS,yBACP,OACgC;AAChC,MAAI,CAAC,MAAM,SAAS,MAAM,MAAM,oBAAoB,KAAK,IAAI,GAAG;AAC9D,WAAO;AAAA,EACT;AACA,SAAO,YAAY,EAAE,GAAG,OAAO,OAAO,KAAK,CAAC;AAC9C;AAEA,SAAS,aAAa,OAAgD;AACpE,SACE,MAAM,QAAQ,WAAW,KACzB,MAAM,UAAU,QAChB,MAAM,mBAAmB,QACzB,MAAM,eAAe,QACrB,MAAM,qBAAqB;AAE/B;AAEA,SAAS,aACP,OACA,OAMiC;AACjC,SACE,UAAU,QACV,MAAM,gBAAgB,MAAM,YAAY,KAAK,KAC7C,MAAM,mBAAmB,MAAM,eAAe,KAAK,KACnD,MAAM,YAAY,MAAM,QAAQ,KAAK,KACrC,MAAM,YAAY,MAAM,QAAQ,KAAK;AAEzC;AAEA,SAAS,4BACP,oBACA,KACA,OACM;AACN,QAAM,eAAe,mBAAmB,IAAI,GAAG;AAC/C,MACE,iBACC,UAAU,QACT,MAAM,UAAU,QAChB,CAAC,MAAM,QAAQ,KAAK,CAAC,WAAW,OAAO,OAAO,aAAa,QAAQ,IACrE;AACA,uBAAmB,OAAO,GAAG;AAAA,EAC/B;AACF;","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-GCBDIQDX.js";
4
4
  import {
5
5
  translateInUiLanguage
6
- } from "./chunk-NETHPCSA.js";
6
+ } from "./chunk-K6SRLYC3.js";
7
7
 
8
8
  // shared/utils/agentSessionMentionText.ts
9
9
  import {
@@ -314,4 +314,4 @@ export {
314
314
  resolveAgentGUIProviderDisplayLabel,
315
315
  firstAgentGUIUserMessageTitle
316
316
  };
317
- //# sourceMappingURL=chunk-ZVKRNEOF.js.map
317
+ //# sourceMappingURL=chunk-TTDBLIQ3.js.map
@@ -13,7 +13,7 @@ import {
13
13
  resolveWorkspaceFileLinkAction,
14
14
  resolveWorkspaceFilePathCandidate,
15
15
  resolveWorkspaceLinkAction
16
- } from "./chunk-6YN7HQL5.js";
16
+ } from "./chunk-RJR2OZ6T.js";
17
17
  import {
18
18
  AGENT_RICH_TEXT_CARET_ANCHOR,
19
19
  attrsToMentionItem,
@@ -21,7 +21,7 @@ import {
21
21
  formatAgentMentionMarkdown,
22
22
  mentionItemToAttrs,
23
23
  parseAgentMentionMarkdown
24
- } from "./chunk-OYQZRLJQ.js";
24
+ } from "./chunk-6KQHNUR5.js";
25
25
  import {
26
26
  fileChangeCountFromChanges,
27
27
  fileChangeEntriesFromChanges,
@@ -38,7 +38,7 @@ import {
38
38
  import {
39
39
  getActiveUiLanguage,
40
40
  translate
41
- } from "./chunk-N6HRVMIS.js";
41
+ } from "./chunk-77UR4G7P.js";
42
42
 
43
43
  // shared/imageGenerationTool.ts
44
44
  var KNOWN_IMAGE_GENERATION_TOOL_NAMES = /* @__PURE__ */ new Set([
@@ -464,7 +464,9 @@ var TOOL_NAME_TRANSLATION_KEYS = {
464
464
  todowrite: "agentHost.agentTool.labels.updateTodos",
465
465
  task: "agentHost.agentTool.labels.delegateAgent",
466
466
  currenttask: "agentHost.agentTool.labels.currentIssue",
467
- agent: "agentHost.agentTool.labels.delegateAgent"
467
+ agent: "agentHost.agentTool.labels.delegateAgent",
468
+ closeagent: "agentHost.agentTool.labels.closeAgent",
469
+ wait: "agentHost.agentTool.labels.waitAgent"
468
470
  };
469
471
  function legacyKindToToolName(kind) {
470
472
  switch (kind) {
@@ -2582,8 +2584,8 @@ function projectAgentTaskItem(call, input, output, metadata) {
2582
2584
  prompt: stringValue5(input?.prompt) ?? stringValue5(input?.description) ?? stringValue5(call.payload?.description) ?? stringValue5(claudeToolResponse?.prompt),
2583
2585
  delegateSessionId: stringValue5(metadata?.childSessionID) ?? stringValue5(metadata?.child_session_id) ?? stringValue5(metadata?.subagentSessionID) ?? stringValue5(metadata?.subagent_session_id) ?? stringValue5(claudeToolResponse?.agentId),
2584
2586
  steps,
2585
- result: firstNonEmptyText(output, call.summary),
2586
- resultMarkdown: firstNonEmptyText(output, call.summary),
2587
+ result: firstNonEmptyText(output),
2588
+ resultMarkdown: firstNonEmptyText(output),
2587
2589
  durationMs: numberValue(metadata?.durationMs) ?? numberValue(output?.durationMs) ?? numberValue(claudeToolResponse?.totalDurationMs),
2588
2590
  occurredAtUnixMs: call.occurredAtUnixMs ?? null
2589
2591
  };
@@ -8972,6 +8974,8 @@ function getPlanModeRenderData(call) {
8972
8974
  function getTaskRenderData(call) {
8973
8975
  const task = call.task;
8974
8976
  const steps = task?.steps ?? normalizeTaskStepsFromCall(call);
8977
+ const outputRawOutput = recordValue5(call.output?.rawOutput);
8978
+ const errorRawOutput = recordValue5(call.error?.rawOutput);
8975
8979
  return {
8976
8980
  title: task?.title ?? call.name,
8977
8981
  status: task?.status ?? null,
@@ -8993,9 +8997,9 @@ function getTaskRenderData(call) {
8993
8997
  steps,
8994
8998
  resultMarkdown: firstString4(
8995
8999
  stringValue8(task?.resultMarkdown),
8996
- firstNonEmptyStructuredText(call.output, call.error),
8997
- nonEmpty(call.summary)
8998
- )
9000
+ firstNonEmptyStructuredText(call.output, outputRawOutput)
9001
+ ),
9002
+ errorMarkdown: firstNonEmptyStructuredText(call.error, errorRawOutput)
8999
9003
  };
9000
9004
  }
9001
9005
  function getSkillRenderData(call) {
@@ -9325,6 +9329,7 @@ function AgentToolCallHeader({
9325
9329
  "use memo";
9326
9330
  const diffStats = diffStatsForCall(call);
9327
9331
  const isActive = call.statusKind === "working" || call.statusKind === "waiting";
9332
+ const isFailed = call.statusKind === "failed" || isFailedStatus(call.status);
9328
9333
  return /* @__PURE__ */ jsxs12(
9329
9334
  "div",
9330
9335
  {
@@ -9334,7 +9339,7 @@ function AgentToolCallHeader({
9334
9339
  isActive ? "tsh-inline-scanlight-group" : ""
9335
9340
  ].filter(Boolean).join(" "),
9336
9341
  children: [
9337
- /* @__PURE__ */ jsx19("div", { className: "workspace-agents-status-panel__detail-tool-row-icon tsh-inline-scanlight-icon", children: call.statusKind === "failed" ? /* @__PURE__ */ jsx19(
9342
+ /* @__PURE__ */ jsx19("div", { className: "workspace-agents-status-panel__detail-tool-row-icon tsh-inline-scanlight-icon", children: isFailed ? /* @__PURE__ */ jsx19(
9338
9343
  AlertCircle,
9339
9344
  {
9340
9345
  size: TOOL_ROW_ICON_SIZE,
@@ -9475,6 +9480,10 @@ function AgentToolCallHeader({
9475
9480
  function formatInlineStatusLabel2(label) {
9476
9481
  return /^[A-Z][a-z]+$/.test(label) ? label.toLowerCase() : label;
9477
9482
  }
9483
+ function isFailedStatus(value) {
9484
+ const normalized = (value ?? "").trim().toLowerCase();
9485
+ return normalized === "failed" || normalized === "error";
9486
+ }
9478
9487
  function formatInlineTitleLabel(label) {
9479
9488
  const trimmed = label.trim();
9480
9489
  if (!/[a-z]/.test(trimmed) || !/[A-Z]/.test(trimmed.slice(1))) {
@@ -11474,6 +11483,7 @@ function AgentTaskContent({
11474
11483
  }) {
11475
11484
  "use memo";
11476
11485
  const task = getTaskRenderData(call);
11486
+ const failureMarkdown = task.errorMarkdown ?? (isFailedTaskStatus(call.statusKind, task.status, call.status) ? translate("agentHost.agentTool.details.missingFailureDetails") : null);
11477
11487
  return /* @__PURE__ */ jsxs30("div", { className: "workspace-agents-status-panel__detail-tool-body", children: [
11478
11488
  /* @__PURE__ */ jsxs30("div", { className: "workspace-agents-status-panel__detail-tool-answer", children: [
11479
11489
  /* @__PURE__ */ jsx41("strong", { children: task.title }),
@@ -11503,9 +11513,23 @@ function AgentTaskContent({
11503
11513
  onLinkClick,
11504
11514
  collapsible: true
11505
11515
  }
11516
+ ) }) : null,
11517
+ failureMarkdown ? /* @__PURE__ */ jsx41(ToolSection, { title: translate("agentHost.agentTool.details.error"), children: /* @__PURE__ */ jsx41(
11518
+ ToolMarkdownBlock,
11519
+ {
11520
+ content: failureMarkdown,
11521
+ onLinkClick,
11522
+ collapsible: true
11523
+ }
11506
11524
  ) }) : null
11507
11525
  ] });
11508
11526
  }
11527
+ function isFailedTaskStatus(...values) {
11528
+ return values.some((value) => {
11529
+ const normalized = (value ?? "").trim().toLowerCase();
11530
+ return normalized === "failed" || normalized === "error";
11531
+ });
11532
+ }
11509
11533
 
11510
11534
  // shared/agentConversation/components/tool-renderers/AgentTodoWriteContent.tsx
11511
11535
  import { CheckCircle2, Circle } from "lucide-react";
@@ -13582,4 +13606,4 @@ export {
13582
13606
  AgentConversationFlow,
13583
13607
  useProjectedAgentConversation
13584
13608
  };
13585
- //# sourceMappingURL=chunk-LWMC2YA3.js.map
13609
+ //# sourceMappingURL=chunk-XRJZCEOX.js.map