@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.
- package/dist/agent-conversation/index.js +5 -5
- package/dist/agent-message-center/index.js +7 -7
- package/dist/app/renderer/agentactivity.css +40 -81
- package/dist/{chunk-RNIY43TA.js → chunk-5HJWT6YN.js} +4 -4
- package/dist/{chunk-OYQZRLJQ.js → chunk-6KQHNUR5.js} +2 -2
- package/dist/{chunk-N6HRVMIS.js → chunk-77UR4G7P.js} +2 -2
- package/dist/{chunk-VGDPBC6W.js → chunk-A2EN24OI.js} +4 -4
- package/dist/{chunk-2RYZ4EBF.js → chunk-AKK7UOAS.js} +2 -2
- package/dist/{chunk-EUOGIKT7.js → chunk-AYEYXKLF.js} +2 -2
- package/dist/{chunk-OB43QOMC.js → chunk-FSRS2JFR.js} +2 -2
- package/dist/{chunk-NETHPCSA.js → chunk-K6SRLYC3.js} +7 -1
- package/dist/chunk-K6SRLYC3.js.map +1 -0
- package/dist/{chunk-7W3VWU5R.js → chunk-Q3MOU4CD.js} +2 -2
- package/dist/{chunk-R6GOICRO.js → chunk-QGBIGRZA.js} +56 -9
- package/dist/chunk-QGBIGRZA.js.map +1 -0
- package/dist/{chunk-6YN7HQL5.js → chunk-RJR2OZ6T.js} +2 -2
- package/dist/{chunk-SD56WDSC.js → chunk-TG3ZXLPM.js} +42 -1
- package/dist/chunk-TG3ZXLPM.js.map +1 -0
- package/dist/{chunk-ZVKRNEOF.js → chunk-TTDBLIQ3.js} +2 -2
- package/dist/{chunk-LWMC2YA3.js → chunk-XRJZCEOX.js} +35 -11
- package/dist/chunk-XRJZCEOX.js.map +1 -0
- package/dist/context-mention-palette/index.js +6 -6
- package/dist/i18n/index.d.ts +6 -0
- package/dist/i18n/index.js +2 -2
- package/dist/index.js +402 -799
- package/dist/index.js.map +1 -1
- package/dist/queued-prompt-runtime.d.ts +1 -0
- package/dist/queued-prompt-runtime.js +1 -1
- package/dist/workbench/contribution.js +2 -2
- package/dist/workbench/index.js +5 -5
- package/dist/workbench/launch.d.ts +22 -1
- package/dist/workbench/launch.js +13 -3
- package/dist/workbench/sessionTitle.js +3 -3
- package/dist/workspace-agent-generated-files.js +3 -3
- package/package.json +12 -12
- package/dist/chunk-LWMC2YA3.js.map +0 -1
- package/dist/chunk-NETHPCSA.js.map +0 -1
- package/dist/chunk-R6GOICRO.js.map +0 -1
- package/dist/chunk-SD56WDSC.js.map +0 -1
- /package/dist/{chunk-RNIY43TA.js.map → chunk-5HJWT6YN.js.map} +0 -0
- /package/dist/{chunk-OYQZRLJQ.js.map → chunk-6KQHNUR5.js.map} +0 -0
- /package/dist/{chunk-N6HRVMIS.js.map → chunk-77UR4G7P.js.map} +0 -0
- /package/dist/{chunk-VGDPBC6W.js.map → chunk-A2EN24OI.js.map} +0 -0
- /package/dist/{chunk-2RYZ4EBF.js.map → chunk-AKK7UOAS.js.map} +0 -0
- /package/dist/{chunk-EUOGIKT7.js.map → chunk-AYEYXKLF.js.map} +0 -0
- /package/dist/{chunk-OB43QOMC.js.map → chunk-FSRS2JFR.js.map} +0 -0
- /package/dist/{chunk-7W3VWU5R.js.map → chunk-Q3MOU4CD.js.map} +0 -0
- /package/dist/{chunk-6YN7HQL5.js.map → chunk-RJR2OZ6T.js.map} +0 -0
- /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-
|
|
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-
|
|
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
|
|
38
|
-
return
|
|
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
|
|
112
|
+
dockEntryId,
|
|
92
113
|
instanceId: createAgentGuiWorkbenchInstanceId({ provider }),
|
|
93
114
|
provider,
|
|
94
|
-
reuseDockEntryNode:
|
|
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
|
|
134
|
+
dockEntryId,
|
|
111
135
|
instanceId,
|
|
112
136
|
provider,
|
|
113
|
-
reuseDockEntryNode:
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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":"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","names":[]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-GCBDIQDX.js";
|
|
4
4
|
import {
|
|
5
5
|
translateInUiLanguage
|
|
6
|
-
} from "./chunk-
|
|
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-
|
|
317
|
+
//# sourceMappingURL=chunk-TTDBLIQ3.js.map
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
resolveWorkspaceFileLinkAction,
|
|
14
14
|
resolveWorkspaceFilePathCandidate,
|
|
15
15
|
resolveWorkspaceLinkAction
|
|
16
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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
|
|
2586
|
-
resultMarkdown: firstNonEmptyText(output
|
|
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,
|
|
8997
|
-
|
|
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:
|
|
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-
|
|
13609
|
+
//# sourceMappingURL=chunk-XRJZCEOX.js.map
|