@tutti-os/agent-gui 0.0.93 → 0.0.95
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/README.md +48 -32
- package/dist/AgentGUI-CwBLYtv-.d.ts +992 -0
- package/dist/agent-conversation/index.d.ts +5 -7
- package/dist/agent-conversation/index.js +13 -9
- package/dist/agent-conversation/index.js.map +1 -1
- package/dist/agent-env/index.d.ts +14 -38
- package/dist/agent-env/index.js +2 -57
- package/dist/agent-env/index.js.map +1 -1
- package/dist/agent-gui.d.ts +21 -0
- package/dist/agent-gui.js +39 -0
- package/dist/agent-message-center/index.d.ts +145 -122
- package/dist/agent-message-center/index.js +1473 -1398
- package/dist/agent-message-center/index.js.map +1 -1
- package/dist/{agentConversationVM-CfXN_TQ2.d.ts → agentConversationVM-C335TR6S.d.ts} +112 -7
- package/dist/agentFileMentionContracts-Czvz6YMI.d.ts +107 -0
- package/dist/{agentGuiNodeTypes-rGaDqxVR.d.ts → agentGuiNodeTypes-DppADPHW.d.ts} +102 -149
- package/dist/agentPlanPromptDispatch-C7cCMjve.d.ts +37 -0
- package/dist/agents.d.ts +13 -0
- package/dist/agents.js +13 -0
- package/dist/app/renderer/agentactivity.css +431 -75
- package/dist/app/renderer/assets/icons/agent-vinyl-player-chassis.png +0 -0
- package/dist/app/renderer/assets/icons/agent-vinyl-tonearm.png +0 -0
- package/dist/app/renderer/assets/icons/agent-vinyls/claude-vinyl.png +0 -0
- package/dist/app/renderer/assets/icons/agent-vinyls/codex-vinyl.png +0 -0
- package/dist/app/renderer/assets/icons/agent-vinyls/cursor-vinyl.png +0 -0
- package/dist/app/renderer/assets/icons/agent-vinyls/hermes-vinyl.png +0 -0
- package/dist/app/renderer/assets/icons/agent-vinyls/openclaw-vinyl.png +0 -0
- package/dist/app/renderer/assets/icons/agent-vinyls/opencode-vinyl.png +0 -0
- package/dist/app/renderer/assets/icons/agent-vinyls/tutti-vinyl.png +0 -0
- package/dist/app/renderer/assets/icons/open-link-lined.svg +4 -0
- package/dist/{chunk-7QHBFRG5.js → chunk-3R2D4E57.js} +3137 -3396
- package/dist/chunk-3R2D4E57.js.map +1 -0
- package/dist/chunk-4YG7YK7S.js +23 -0
- package/dist/chunk-4YG7YK7S.js.map +1 -0
- package/dist/chunk-5X7YDOC6.js +42 -0
- package/dist/chunk-5X7YDOC6.js.map +1 -0
- package/dist/{chunk-IBIMGLCD.js → chunk-7J4K6WKB.js} +1 -1
- package/dist/chunk-7J4K6WKB.js.map +1 -0
- package/dist/{chunk-KQE5KV2V.js → chunk-7PFDA2HQ.js} +505 -504
- package/dist/chunk-7PFDA2HQ.js.map +1 -0
- package/dist/{chunk-M2LWH54R.js → chunk-7RDD3EWP.js} +557 -569
- package/dist/chunk-7RDD3EWP.js.map +1 -0
- package/dist/{chunk-VWXFFSIM.js → chunk-AOS2VWU6.js} +1357 -1301
- package/dist/chunk-AOS2VWU6.js.map +1 -0
- package/dist/{chunk-3HARXLAZ.js → chunk-BFNJKTDV.js} +295 -255
- package/dist/chunk-BFNJKTDV.js.map +1 -0
- package/dist/{chunk-U7D7G3UU.js → chunk-BIHBXWK5.js} +2 -2
- package/dist/{chunk-XQUUELKF.js → chunk-C5FV4UGI.js} +2921 -2944
- package/dist/chunk-C5FV4UGI.js.map +1 -0
- package/dist/{chunk-HOSX5C5V.js → chunk-CRO2MV2Y.js} +36 -46
- package/dist/chunk-CRO2MV2Y.js.map +1 -0
- package/dist/chunk-FGLQZ6I4.js +9 -0
- package/dist/chunk-FGLQZ6I4.js.map +1 -0
- package/dist/chunk-H6IQ63DQ.js +14 -0
- package/dist/chunk-H6IQ63DQ.js.map +1 -0
- package/dist/{chunk-4SQNOOJ3.js → chunk-JX2SIXNL.js} +1293 -1702
- package/dist/chunk-JX2SIXNL.js.map +1 -0
- package/dist/chunk-KAL4XZMA.js +231 -0
- package/dist/chunk-KAL4XZMA.js.map +1 -0
- package/dist/chunk-KJQERFKX.js +259 -0
- package/dist/chunk-KJQERFKX.js.map +1 -0
- package/dist/chunk-LQVXBT65.js +491 -0
- package/dist/chunk-LQVXBT65.js.map +1 -0
- package/dist/{chunk-AOVPGJBC.js → chunk-NITOD7WF.js} +2 -2
- package/dist/{chunk-7LMJXF4R.js → chunk-NJAZ7LQM.js} +20 -16
- package/dist/chunk-NJAZ7LQM.js.map +1 -0
- package/dist/chunk-NX3CZJXW.js +25 -0
- package/dist/chunk-NX3CZJXW.js.map +1 -0
- package/dist/chunk-O6W72SEP.js +93 -0
- package/dist/chunk-O6W72SEP.js.map +1 -0
- package/dist/{chunk-PSLAWU25.js → chunk-R2EWECUP.js} +7 -1
- package/dist/chunk-R2EWECUP.js.map +1 -0
- package/dist/chunk-RY6GIO3K.js +31700 -0
- package/dist/chunk-RY6GIO3K.js.map +1 -0
- package/dist/{chunk-XDV4ZRVK.js → chunk-UGVI47X6.js} +98 -37
- package/dist/chunk-UGVI47X6.js.map +1 -0
- package/dist/{chunk-XW4CVBUH.js → chunk-UQJPV6HP.js} +18 -11
- package/dist/chunk-UQJPV6HP.js.map +1 -0
- package/dist/{chunk-GAPTLVII.js → chunk-VF22EG3F.js} +1 -1
- package/dist/{chunk-GAPTLVII.js.map → chunk-VF22EG3F.js.map} +1 -1
- package/dist/{chunk-45FF4DQU.js → chunk-WEDMAVX2.js} +22 -24
- package/dist/chunk-WEDMAVX2.js.map +1 -0
- package/dist/{chunk-SXDLSEHO.js → chunk-XMO45GKA.js} +531 -401
- package/dist/chunk-XMO45GKA.js.map +1 -0
- package/dist/{chunk-UNO7CEAF.js → chunk-YE25HN6T.js} +6 -9
- package/dist/chunk-YE25HN6T.js.map +1 -0
- package/dist/context-mention-palette/index.d.ts +3 -2
- package/dist/context-mention-palette/index.js +19 -14
- package/dist/custom-mention.d.ts +44 -0
- package/dist/custom-mention.js +17 -0
- package/dist/custom-mention.js.map +1 -0
- package/dist/dock-icons.d.ts +6 -0
- package/dist/dock-icons.js +11 -0
- package/dist/dock-icons.js.map +1 -0
- package/dist/i18n/index.d.ts +852 -837
- package/dist/i18n/index.js +2 -2
- package/dist/index.d.ts +52 -1061
- package/dist/index.js +72 -35254
- package/dist/index.js.map +1 -1
- package/dist/mention-search.d.ts +226 -0
- package/dist/mention-search.js +29 -0
- package/dist/mention-search.js.map +1 -0
- package/dist/open-link-lined-JWEKUKME.svg +4 -0
- package/dist/provider-icons.d.ts +6 -0
- package/dist/provider-icons.js +12 -0
- package/dist/provider-icons.js.map +1 -0
- package/dist/provider-identity.d.ts +9 -0
- package/dist/provider-identity.js +21 -0
- package/dist/provider-identity.js.map +1 -0
- package/dist/runtime-BBNdWgDU.d.ts +10 -0
- package/dist/{types-PLFZ8SBX.d.ts → types-DX2bxgB8.d.ts} +28 -83
- package/dist/workbench/contribution.d.ts +32 -40
- package/dist/workbench/contribution.js +10 -6
- package/dist/workbench/index.d.ts +6 -2
- package/dist/workbench/index.js +24 -20
- package/dist/workbench/launch.d.ts +2 -5
- package/dist/workbench/launch.js +4 -3
- package/dist/workbench/providerCatalog.js +2 -1
- package/dist/workbench/sessionTitle.d.ts +4 -3
- package/dist/workbench/sessionTitle.js +4 -3
- package/dist/workbench/state.d.ts +1 -1
- package/dist/workbench/state.js +3 -2
- package/dist/workbench/types.d.ts +0 -3
- package/dist/workbench/types.js +1 -1
- package/dist/workspace-agent-generated-files.d.ts +20 -2
- package/dist/workspace-agent-generated-files.js +7 -6
- package/dist/workspaceAgentActivityListTypes-C7gPWYiA.d.ts +71 -0
- package/package.json +65 -28
- package/dist/AgentMentionSearchController-DD_WOred.d.ts +0 -241
- package/dist/AgentMessageMarkdown-DeYPURtF.d.ts +0 -7
- package/dist/chunk-3HARXLAZ.js.map +0 -1
- package/dist/chunk-45FF4DQU.js.map +0 -1
- package/dist/chunk-4HP6V2YA.js +0 -207
- package/dist/chunk-4HP6V2YA.js.map +0 -1
- package/dist/chunk-4SQNOOJ3.js.map +0 -1
- package/dist/chunk-7LMJXF4R.js.map +0 -1
- package/dist/chunk-7QHBFRG5.js.map +0 -1
- package/dist/chunk-HOSX5C5V.js.map +0 -1
- package/dist/chunk-IBIMGLCD.js.map +0 -1
- package/dist/chunk-KQE5KV2V.js.map +0 -1
- package/dist/chunk-LR4FA5X6.js +0 -368
- package/dist/chunk-LR4FA5X6.js.map +0 -1
- package/dist/chunk-M2LWH54R.js.map +0 -1
- package/dist/chunk-MKHDRIGN.js +0 -71
- package/dist/chunk-MKHDRIGN.js.map +0 -1
- package/dist/chunk-PSLAWU25.js.map +0 -1
- package/dist/chunk-SXDLSEHO.js.map +0 -1
- package/dist/chunk-UNO7CEAF.js.map +0 -1
- package/dist/chunk-VAKFNNKT.js +0 -410
- package/dist/chunk-VAKFNNKT.js.map +0 -1
- package/dist/chunk-VWXFFSIM.js.map +0 -1
- package/dist/chunk-XDV4ZRVK.js.map +0 -1
- package/dist/chunk-XQUUELKF.js.map +0 -1
- package/dist/chunk-XW4CVBUH.js.map +0 -1
- package/dist/plan-decision-ops.d.ts +0 -70
- package/dist/plan-decision-ops.js +0 -19
- package/dist/queued-prompt-runtime.d.ts +0 -115
- package/dist/queued-prompt-runtime.js +0 -9
- package/dist/workspaceAgentActivityListViewModel-TXH1VXrk.d.ts +0 -339
- package/dist/workspaceLinkActions-DS9LWqzI.d.ts +0 -74
- /package/dist/{plan-decision-ops.js.map → agent-gui.js.map} +0 -0
- /package/dist/{queued-prompt-runtime.js.map → agents.js.map} +0 -0
- /package/dist/{chunk-U7D7G3UU.js.map → chunk-BIHBXWK5.js.map} +0 -0
- /package/dist/{chunk-AOVPGJBC.js.map → chunk-NITOD7WF.js.map} +0 -0
|
@@ -1,27 +1,23 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveWorkspaceAgentSessionSortTimeUnixMs
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-7J4K6WKB.js";
|
|
4
|
+
import {
|
|
5
|
+
normalizeAgentTitleText
|
|
6
|
+
} from "./chunk-GCBDIQDX.js";
|
|
4
7
|
import {
|
|
5
8
|
fileChangePathsFromChanges,
|
|
6
9
|
isWorkspaceAgentSyntheticControlMessage
|
|
7
10
|
} from "./chunk-Y35GDLP2.js";
|
|
8
11
|
import {
|
|
9
|
-
isWorkspaceAgentActivityRuntimeSessionOrigin,
|
|
10
12
|
workspaceAgentProviderLabel
|
|
11
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-NX3CZJXW.js";
|
|
12
14
|
import {
|
|
13
15
|
translate,
|
|
14
16
|
translateInUiLanguage
|
|
15
|
-
} from "./chunk-
|
|
16
|
-
import {
|
|
17
|
-
normalizeAgentTitleText
|
|
18
|
-
} from "./chunk-GCBDIQDX.js";
|
|
17
|
+
} from "./chunk-BIHBXWK5.js";
|
|
19
18
|
|
|
20
|
-
// shared/
|
|
21
|
-
import {
|
|
22
|
-
normalizeAgentActivityDisplayStatus,
|
|
23
|
-
resolveLatestAgentActivityMessageDisplayStatus
|
|
24
|
-
} from "@tutti-os/agent-activity-core";
|
|
19
|
+
// shared/workspaceAgentActivityListProjection.ts
|
|
20
|
+
import { selectCanonicalAgentActivitySessions } from "@tutti-os/agent-activity-core";
|
|
25
21
|
|
|
26
22
|
// shared/workspaceAgentLatestActivitySummary.ts
|
|
27
23
|
function fallbackSummary(status) {
|
|
@@ -66,13 +62,59 @@ function resolveDisplayableWorkspaceAgentSessionTitle(session) {
|
|
|
66
62
|
return title;
|
|
67
63
|
}
|
|
68
64
|
|
|
69
|
-
// shared/
|
|
70
|
-
function
|
|
65
|
+
// shared/workspaceAgentActivityListOrdering.ts
|
|
66
|
+
function shouldHideEmptyRuntimePlaceholderSession(session, messages, status, options) {
|
|
67
|
+
if (messages.length > 0) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
if (!hasLoadedSessionMessageRecord(session, options.sessionMessagesById)) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
if (!isRuntimePlaceholderTerminalStatus(status)) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return resolveDisplayableWorkspaceAgentSessionTitle(session) === "";
|
|
77
|
+
}
|
|
78
|
+
function hasLoadedSessionMessageRecord(session, sessionMessagesById) {
|
|
79
|
+
if (!sessionMessagesById) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return workspaceAgentSessionMessageAliases(session).some(
|
|
83
|
+
(alias) => alias in sessionMessagesById
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
function isRuntimePlaceholderTerminalStatus(status) {
|
|
87
|
+
return status === "idle" || status === "completed" || status === "canceled";
|
|
88
|
+
}
|
|
89
|
+
function compareActivities(left, right) {
|
|
90
|
+
const timeDiff = right.sortTimeUnixMs - left.sortTimeUnixMs;
|
|
91
|
+
if (timeDiff !== 0) {
|
|
92
|
+
return timeDiff;
|
|
93
|
+
}
|
|
94
|
+
return left.sessionId.localeCompare(right.sessionId);
|
|
95
|
+
}
|
|
96
|
+
function workspaceAgentSessionMessageAliases(session) {
|
|
97
|
+
const values = [session.agentSessionId, session.providerSessionId];
|
|
98
|
+
const seen = /* @__PURE__ */ new Set();
|
|
99
|
+
const aliases = [];
|
|
100
|
+
for (const value of values) {
|
|
101
|
+
const normalized = value?.trim() ?? "";
|
|
102
|
+
if (!normalized || seen.has(normalized)) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
seen.add(normalized);
|
|
106
|
+
aliases.push(normalized);
|
|
107
|
+
}
|
|
108
|
+
return aliases;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// shared/workspaceAgentGeneratedFiles.ts
|
|
112
|
+
function collectWorkspaceAgentGeneratedFiles(source, options = {}) {
|
|
71
113
|
const sessionCwdFilter = normalizeComparablePath(options.sessionCwd ?? "");
|
|
72
|
-
const workspaceRoot = sessionCwdFilter || normalizeComparablePath(options.workspaceRoot ?? "") || resolveWorkspaceRootFromSessions(
|
|
73
|
-
const sessions = sessionCwdFilter ?
|
|
114
|
+
const workspaceRoot = sessionCwdFilter || normalizeComparablePath(options.workspaceRoot ?? "") || resolveWorkspaceRootFromSessions(source.sessions);
|
|
115
|
+
const sessions = sessionCwdFilter ? source.sessions.filter(
|
|
74
116
|
(session) => normalizeComparablePath(session.cwd ?? "") === sessionCwdFilter
|
|
75
|
-
) :
|
|
117
|
+
) : source.sessions;
|
|
76
118
|
const filesByPath = /* @__PURE__ */ new Map();
|
|
77
119
|
for (const session of sessions) {
|
|
78
120
|
const sessionCwd = normalizeComparablePath(session.cwd ?? "") || workspaceRoot;
|
|
@@ -81,7 +123,7 @@ function collectWorkspaceAgentGeneratedFiles(snapshot, options = {}) {
|
|
|
81
123
|
workspaceRoot
|
|
82
124
|
});
|
|
83
125
|
const messages = resolveWorkspaceAgentSessionMessages(
|
|
84
|
-
|
|
126
|
+
source.sessionMessagesById,
|
|
85
127
|
session
|
|
86
128
|
);
|
|
87
129
|
if (messages.length === 0) {
|
|
@@ -107,206 +149,6 @@ function collectWorkspaceAgentGeneratedFiles(snapshot, options = {}) {
|
|
|
107
149
|
}
|
|
108
150
|
return applyShortestUniqueFileLabels([...filesByPath.values()]);
|
|
109
151
|
}
|
|
110
|
-
function buildWorkspaceAgentActivityListViewModel(snapshot, options = {}) {
|
|
111
|
-
const presencesById = new Map(
|
|
112
|
-
snapshot.presences.map((presence) => [presence.id, presence])
|
|
113
|
-
);
|
|
114
|
-
const activities = snapshot.sessions.map((session) => {
|
|
115
|
-
const presence = session.presenceId === void 0 ? null : presencesById.get(session.presenceId) ?? null;
|
|
116
|
-
const messages = resolveWorkspaceAgentSessionMessages(
|
|
117
|
-
options.sessionMessagesById,
|
|
118
|
-
session
|
|
119
|
-
);
|
|
120
|
-
const status = resolveWorkspaceAgentActivityStatus(session, messages);
|
|
121
|
-
if (shouldHideEmptyRuntimePlaceholderSession(
|
|
122
|
-
session,
|
|
123
|
-
messages,
|
|
124
|
-
status,
|
|
125
|
-
options
|
|
126
|
-
)) {
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
const user = resolveActivityUser(session, presence, options);
|
|
130
|
-
const agentProvider = resolveProvider(session, presence);
|
|
131
|
-
const agentName = workspaceAgentProviderLabel(agentProvider);
|
|
132
|
-
const resolvedSortTimeUnixMs = resolveWorkspaceAgentSessionSortTimeUnixMs(
|
|
133
|
-
session,
|
|
134
|
-
{
|
|
135
|
-
messages
|
|
136
|
-
}
|
|
137
|
-
);
|
|
138
|
-
const latestActivity = resolveLatestActivity(messages, status, {
|
|
139
|
-
agentName,
|
|
140
|
-
userName: user.userName
|
|
141
|
-
});
|
|
142
|
-
const activity = {
|
|
143
|
-
id: `activity-${session.agentSessionId}`,
|
|
144
|
-
sessionId: session.agentSessionId,
|
|
145
|
-
userId: user.userId,
|
|
146
|
-
userName: user.userName,
|
|
147
|
-
...user.userAvatarUrl ? { userAvatarUrl: user.userAvatarUrl } : {},
|
|
148
|
-
agentProvider,
|
|
149
|
-
agentName,
|
|
150
|
-
title: resolveWorkspaceAgentActivityTitle(session, messages),
|
|
151
|
-
status,
|
|
152
|
-
latestActivitySummary: latestActivity.summary,
|
|
153
|
-
latestActivityActorName: latestActivity.actorName,
|
|
154
|
-
changedFiles: changedFilesForSession(messages),
|
|
155
|
-
sortTimeUnixMs: resolvedSortTimeUnixMs,
|
|
156
|
-
readTimeUnixMs: readTimeUnixMs(session, status, resolvedSortTimeUnixMs)
|
|
157
|
-
};
|
|
158
|
-
return activity;
|
|
159
|
-
}).filter(
|
|
160
|
-
(activity) => activity !== null
|
|
161
|
-
).sort(compareActivities);
|
|
162
|
-
return { activities };
|
|
163
|
-
}
|
|
164
|
-
function reuseWorkspaceAgentActivityListViewModelIfUnchanged(previous, next) {
|
|
165
|
-
if (!previous) {
|
|
166
|
-
return next;
|
|
167
|
-
}
|
|
168
|
-
if (next.activities.length === 0) {
|
|
169
|
-
return previous.activities.length === 0 ? previous : next;
|
|
170
|
-
}
|
|
171
|
-
const previousActivitiesById = new Map(
|
|
172
|
-
previous.activities.map((activity) => [activity.id, activity])
|
|
173
|
-
);
|
|
174
|
-
const activities = next.activities.map((activity) => {
|
|
175
|
-
const previousActivity = previousActivitiesById.get(activity.id);
|
|
176
|
-
if (!previousActivity || !workspaceAgentActivityCardEquals(previousActivity, activity)) {
|
|
177
|
-
return activity;
|
|
178
|
-
}
|
|
179
|
-
return previousActivity;
|
|
180
|
-
});
|
|
181
|
-
const reusedEveryActivityInPlace = previous.activities.length === activities.length && previous.activities.every(
|
|
182
|
-
(activity, index) => activity === activities[index]
|
|
183
|
-
);
|
|
184
|
-
return reusedEveryActivityInPlace ? previous : { activities };
|
|
185
|
-
}
|
|
186
|
-
function shouldHideEmptyRuntimePlaceholderSession(session, messages, status, options) {
|
|
187
|
-
if (!isWorkspaceAgentActivityRuntimeSessionOrigin(session.sessionOrigin)) {
|
|
188
|
-
return false;
|
|
189
|
-
}
|
|
190
|
-
if (messages.length > 0) {
|
|
191
|
-
return false;
|
|
192
|
-
}
|
|
193
|
-
if (!hasLoadedSessionMessageRecord(session, options.sessionMessagesById)) {
|
|
194
|
-
return false;
|
|
195
|
-
}
|
|
196
|
-
if (!isRuntimePlaceholderTerminalStatus(status)) {
|
|
197
|
-
return false;
|
|
198
|
-
}
|
|
199
|
-
return resolveDisplayableWorkspaceAgentSessionTitle(session) === "";
|
|
200
|
-
}
|
|
201
|
-
function hasLoadedSessionMessageRecord(session, sessionMessagesById) {
|
|
202
|
-
if (!sessionMessagesById) {
|
|
203
|
-
return false;
|
|
204
|
-
}
|
|
205
|
-
return workspaceAgentSessionMessageAliases(session).some(
|
|
206
|
-
(alias) => alias in sessionMessagesById
|
|
207
|
-
);
|
|
208
|
-
}
|
|
209
|
-
function isRuntimePlaceholderTerminalStatus(status) {
|
|
210
|
-
return status === "idle" || status === "completed" || status === "canceled";
|
|
211
|
-
}
|
|
212
|
-
function workspaceAgentActivityCardEquals(left, right) {
|
|
213
|
-
return left.id === right.id && left.sessionId === right.sessionId && left.userId === right.userId && left.userName === right.userName && left.userAvatarUrl === right.userAvatarUrl && left.agentProvider === right.agentProvider && left.agentName === right.agentName && left.title === right.title && left.status === right.status && left.latestActivitySummary === right.latestActivitySummary && left.latestActivityActorName === right.latestActivityActorName && left.sortTimeUnixMs === right.sortTimeUnixMs && JSON.stringify(left.conversationPreview ?? []) === JSON.stringify(right.conversationPreview ?? []) && JSON.stringify(left.toolCalls ?? []) === JSON.stringify(right.toolCalls ?? []) && JSON.stringify(left.changedFiles) === JSON.stringify(right.changedFiles);
|
|
214
|
-
}
|
|
215
|
-
function resolveWorkspaceAgentSessionMessages(sessionMessagesById, session) {
|
|
216
|
-
if (!sessionMessagesById) {
|
|
217
|
-
return [];
|
|
218
|
-
}
|
|
219
|
-
for (const alias of workspaceAgentSessionMessageAliases(session)) {
|
|
220
|
-
const messages = sessionMessagesById[alias];
|
|
221
|
-
if (messages) {
|
|
222
|
-
return messages;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
return [];
|
|
226
|
-
}
|
|
227
|
-
function resolveActivityUser(session, presence, options) {
|
|
228
|
-
if (presence) {
|
|
229
|
-
return resolveUserFromId(presence.userId ?? "", options);
|
|
230
|
-
}
|
|
231
|
-
const sessionUserId = session.userId?.trim() ?? "";
|
|
232
|
-
if (sessionUserId) {
|
|
233
|
-
return resolveUserFromId(sessionUserId, options);
|
|
234
|
-
}
|
|
235
|
-
return {
|
|
236
|
-
userId: null,
|
|
237
|
-
userName: "Unknown member"
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
function resolveUserFromId(rawUserId, options) {
|
|
241
|
-
const userId = rawUserId.trim();
|
|
242
|
-
const profile = options.userProfilesById?.[userId];
|
|
243
|
-
const profileName = compactText2(profile?.name ?? "");
|
|
244
|
-
const profileAvatar = profile?.avatar?.trim();
|
|
245
|
-
const rawName = profileName || userId || "Unknown member";
|
|
246
|
-
return {
|
|
247
|
-
userId,
|
|
248
|
-
userName: stripTrailingParentheticalEmailFromLabel(rawName) || rawName,
|
|
249
|
-
...profileAvatar ? { userAvatarUrl: profileAvatar } : {}
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
function resolveProvider(session, presence) {
|
|
253
|
-
const sessionProvider = normalizeProvider(session.provider);
|
|
254
|
-
if (sessionProvider) {
|
|
255
|
-
return sessionProvider;
|
|
256
|
-
}
|
|
257
|
-
const presenceProvider = normalizeProvider(presence?.provider);
|
|
258
|
-
if (presenceProvider) {
|
|
259
|
-
return presenceProvider;
|
|
260
|
-
}
|
|
261
|
-
return "unknown";
|
|
262
|
-
}
|
|
263
|
-
function normalizeProvider(provider) {
|
|
264
|
-
const trimmed = provider?.trim();
|
|
265
|
-
return trimmed ? trimmed.toLowerCase() : null;
|
|
266
|
-
}
|
|
267
|
-
function resolveWorkspaceAgentActivityStatus(session, messages = []) {
|
|
268
|
-
const sessionStatus = normalizeAgentActivityDisplayStatus(session.status, {
|
|
269
|
-
currentPhase: session.currentPhase,
|
|
270
|
-
turnLifecycleOutcome: session.turnLifecycle?.outcome,
|
|
271
|
-
turnLifecyclePhase: session.turnLifecycle?.phase ?? session.turnPhase
|
|
272
|
-
});
|
|
273
|
-
const normalized = sessionStatus === "failed" ? resolveLatestAgentActivityMessageDisplayStatus(messages) ?? sessionStatus : sessionStatus;
|
|
274
|
-
switch (normalized) {
|
|
275
|
-
case "failed":
|
|
276
|
-
return "failed";
|
|
277
|
-
case "canceled":
|
|
278
|
-
return "canceled";
|
|
279
|
-
case "completed":
|
|
280
|
-
return "completed";
|
|
281
|
-
case "waiting":
|
|
282
|
-
return "waiting";
|
|
283
|
-
case "working":
|
|
284
|
-
return "working";
|
|
285
|
-
default:
|
|
286
|
-
return "idle";
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
function resolveWorkspaceAgentActivityTitle(session, messages = []) {
|
|
290
|
-
const sessionTitle = resolveDisplayableWorkspaceAgentSessionTitle(session);
|
|
291
|
-
const userMessageTitle = firstUserMessageText(messages);
|
|
292
|
-
if (sessionTitle) {
|
|
293
|
-
return sessionTitle;
|
|
294
|
-
}
|
|
295
|
-
return userMessageTitle || sessionTitle || workspaceAgentUntitledTaskLabel();
|
|
296
|
-
}
|
|
297
|
-
function resolveLatestActivity(messages, status, actors) {
|
|
298
|
-
const latestMessage = latestDisplayableMessage(messages);
|
|
299
|
-
if (latestMessage) {
|
|
300
|
-
return {
|
|
301
|
-
actorName: messageRole(latestMessage.message) === "user" ? actors.userName : actors.agentName,
|
|
302
|
-
summary: latestMessage.text
|
|
303
|
-
};
|
|
304
|
-
}
|
|
305
|
-
return {
|
|
306
|
-
actorName: actors.agentName,
|
|
307
|
-
summary: fallbackSummary(status)
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
152
|
function changedFilesForSession(messages, normalizePath = defaultChangedFilePathNormalizer, options = {}) {
|
|
311
153
|
const changedFilesByPath = /* @__PURE__ */ new Map();
|
|
312
154
|
const appendPath = (path) => {
|
|
@@ -726,11 +568,87 @@ function isStructuredPayloadPath(path) {
|
|
|
726
568
|
return false;
|
|
727
569
|
}
|
|
728
570
|
}
|
|
729
|
-
function
|
|
730
|
-
if (
|
|
731
|
-
return
|
|
571
|
+
function resolveWorkspaceAgentSessionMessages(sessionMessagesById, session) {
|
|
572
|
+
if (!sessionMessagesById) {
|
|
573
|
+
return [];
|
|
732
574
|
}
|
|
733
|
-
|
|
575
|
+
for (const alias of workspaceAgentSessionMessageAliases(session)) {
|
|
576
|
+
const messages = sessionMessagesById[alias];
|
|
577
|
+
if (messages) {
|
|
578
|
+
return messages;
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
return [];
|
|
582
|
+
}
|
|
583
|
+
function normalizeToken(value) {
|
|
584
|
+
return value?.trim().toLowerCase() ?? "";
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
// shared/workspaceAgentActivityStatus.ts
|
|
588
|
+
function resolveWorkspaceAgentActivityStatus(session) {
|
|
589
|
+
const normalized = canonicalSessionStatus(session);
|
|
590
|
+
switch (normalized) {
|
|
591
|
+
case "failed":
|
|
592
|
+
return "failed";
|
|
593
|
+
case "canceled":
|
|
594
|
+
return "canceled";
|
|
595
|
+
case "completed":
|
|
596
|
+
return "completed";
|
|
597
|
+
case "waiting":
|
|
598
|
+
return "waiting";
|
|
599
|
+
case "working":
|
|
600
|
+
return "working";
|
|
601
|
+
default:
|
|
602
|
+
return "idle";
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
function canonicalSessionStatus(session) {
|
|
606
|
+
if ((session.pendingInteractions?.length ?? 0) > 0) return "waiting";
|
|
607
|
+
if (session.activeTurn && session.activeTurn.phase !== "settled") {
|
|
608
|
+
return session.activeTurn.phase === "waiting" ? "waiting" : "working";
|
|
609
|
+
}
|
|
610
|
+
switch (session.latestTurn?.outcome) {
|
|
611
|
+
case "completed":
|
|
612
|
+
return "completed";
|
|
613
|
+
case "failed":
|
|
614
|
+
return "failed";
|
|
615
|
+
case "canceled":
|
|
616
|
+
case "interrupted":
|
|
617
|
+
return "canceled";
|
|
618
|
+
default:
|
|
619
|
+
return "idle";
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
// shared/workspaceAgentActivitySummary.ts
|
|
624
|
+
function resolveWorkspaceAgentActivityTitle(session, messages = []) {
|
|
625
|
+
const sessionTitle = resolveDisplayableWorkspaceAgentSessionTitle(session);
|
|
626
|
+
const userMessageTitle = firstUserMessageText(messages);
|
|
627
|
+
if (sessionTitle && !isProviderPlaceholderTitleForSession(sessionTitle, session)) {
|
|
628
|
+
return sessionTitle;
|
|
629
|
+
}
|
|
630
|
+
return userMessageTitle || sessionTitle || workspaceAgentUntitledTaskLabel();
|
|
631
|
+
}
|
|
632
|
+
function isProviderPlaceholderTitleForSession(title, session) {
|
|
633
|
+
const provider = normalizeProvider(session.provider);
|
|
634
|
+
if (!provider) {
|
|
635
|
+
return false;
|
|
636
|
+
}
|
|
637
|
+
const normalizedTitle = title.trim().toLowerCase();
|
|
638
|
+
return workspaceAgentProviderLabel(provider).toLowerCase() === normalizedTitle;
|
|
639
|
+
}
|
|
640
|
+
function resolveLatestActivity(messages, status, actors) {
|
|
641
|
+
const latestMessage = latestDisplayableMessage(messages);
|
|
642
|
+
if (latestMessage) {
|
|
643
|
+
return {
|
|
644
|
+
actorName: messageRole(latestMessage.message) === "user" ? actors.userName : actors.agentName,
|
|
645
|
+
summary: latestMessage.text
|
|
646
|
+
};
|
|
647
|
+
}
|
|
648
|
+
return {
|
|
649
|
+
actorName: actors.agentName,
|
|
650
|
+
summary: fallbackSummary(status)
|
|
651
|
+
};
|
|
734
652
|
}
|
|
735
653
|
function firstUserMessageText(messages) {
|
|
736
654
|
const firstUserMessage = messages.map((message) => ({
|
|
@@ -744,7 +662,7 @@ function firstUserMessageText(messages) {
|
|
|
744
662
|
if (timeDiff !== 0) {
|
|
745
663
|
return timeDiff;
|
|
746
664
|
}
|
|
747
|
-
return
|
|
665
|
+
return left.message.messageId.localeCompare(right.message.messageId);
|
|
748
666
|
})[0];
|
|
749
667
|
return firstUserMessage?.text ?? "";
|
|
750
668
|
}
|
|
@@ -754,40 +672,33 @@ function latestDisplayableMessage(messages) {
|
|
|
754
672
|
text: messageDisplayText(message),
|
|
755
673
|
time: messageTime(message)
|
|
756
674
|
})).filter(
|
|
757
|
-
(item) => item.text.length > 0 &&
|
|
675
|
+
(item) => item.text.length > 0 && normalizeToken2(item.message.kind) !== "tool_call"
|
|
758
676
|
).sort((left, right) => {
|
|
759
677
|
const timeDiff = (right.time ?? 0) - (left.time ?? 0);
|
|
760
678
|
if (timeDiff !== 0) {
|
|
761
679
|
return timeDiff;
|
|
762
680
|
}
|
|
763
|
-
return
|
|
681
|
+
return right.message.messageId.localeCompare(left.message.messageId);
|
|
764
682
|
})[0] ?? null;
|
|
765
683
|
}
|
|
766
684
|
function messageDisplayText(message) {
|
|
767
685
|
const payload = message.payload ?? {};
|
|
768
686
|
const text = normalizeAgentTitleText(
|
|
769
687
|
compactText2(
|
|
770
|
-
|
|
688
|
+
stringValue2(payload.displayPrompt) || stringValue2(payload.text) || stringValue2(payload.content) || stringValue2(payload.message) || stringValue2(payload.body) || stringValue2(payload.title) || ""
|
|
771
689
|
)
|
|
772
690
|
);
|
|
773
691
|
return isWorkspaceAgentSyntheticControlMessage(text) ? "" : text;
|
|
774
692
|
}
|
|
775
693
|
function messageRole(message) {
|
|
776
|
-
return
|
|
694
|
+
return normalizeToken2(message.role);
|
|
777
695
|
}
|
|
778
696
|
function messageTime(message) {
|
|
779
697
|
return message.occurredAtUnixMs ?? message.completedAtUnixMs ?? message.startedAtUnixMs;
|
|
780
698
|
}
|
|
781
|
-
function
|
|
699
|
+
function normalizeToken2(value) {
|
|
782
700
|
return value?.trim().toLowerCase() ?? "";
|
|
783
701
|
}
|
|
784
|
-
function compareActivities(left, right) {
|
|
785
|
-
const timeDiff = right.sortTimeUnixMs - left.sortTimeUnixMs;
|
|
786
|
-
if (timeDiff !== 0) {
|
|
787
|
-
return timeDiff;
|
|
788
|
-
}
|
|
789
|
-
return left.sessionId.localeCompare(right.sessionId);
|
|
790
|
-
}
|
|
791
702
|
function compactText2(value) {
|
|
792
703
|
return value.replace(/\s+/g, " ").trim();
|
|
793
704
|
}
|
|
@@ -796,34 +707,163 @@ function workspaceAgentUntitledTaskLabel() {
|
|
|
796
707
|
translate("agentHost.workspaceAgentsUntitledTask")
|
|
797
708
|
);
|
|
798
709
|
}
|
|
799
|
-
function
|
|
800
|
-
const
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
710
|
+
function normalizeProvider(provider) {
|
|
711
|
+
const trimmed = provider?.trim();
|
|
712
|
+
return trimmed ? trimmed.toLowerCase() : null;
|
|
713
|
+
}
|
|
714
|
+
function stringValue2(value) {
|
|
715
|
+
return typeof value === "string" && value.trim() ? value.trim() : null;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
// shared/workspaceAgentActivityListProjection.ts
|
|
719
|
+
function buildWorkspaceAgentActivityListViewModel(snapshot, options = {}) {
|
|
720
|
+
const activities = selectCanonicalAgentActivitySessions(snapshot).map((session) => {
|
|
721
|
+
const presence = snapshot.presences.find(
|
|
722
|
+
(candidate) => candidate.provider === session.provider && Boolean(candidate.userId) && candidate.userId === session.userId
|
|
723
|
+
) ?? null;
|
|
724
|
+
const messages = resolveWorkspaceAgentSessionMessages2(
|
|
725
|
+
options.sessionMessagesById,
|
|
726
|
+
session
|
|
727
|
+
);
|
|
728
|
+
const status = resolveWorkspaceAgentActivityStatus(session);
|
|
729
|
+
if (shouldHideEmptyRuntimePlaceholderSession(
|
|
730
|
+
session,
|
|
731
|
+
messages,
|
|
732
|
+
status,
|
|
733
|
+
options
|
|
734
|
+
)) {
|
|
735
|
+
return null;
|
|
811
736
|
}
|
|
812
|
-
|
|
813
|
-
|
|
737
|
+
const user = resolveActivityUser(session, presence, options);
|
|
738
|
+
const agentProvider = resolveProvider(session, presence);
|
|
739
|
+
const agentName = workspaceAgentProviderLabel(agentProvider);
|
|
740
|
+
const resolvedSortTimeUnixMs = resolveWorkspaceAgentSessionSortTimeUnixMs(
|
|
741
|
+
session,
|
|
742
|
+
{
|
|
743
|
+
messages
|
|
744
|
+
}
|
|
745
|
+
);
|
|
746
|
+
const latestActivity = resolveLatestActivity(messages, status, {
|
|
747
|
+
agentName,
|
|
748
|
+
userName: user.userName
|
|
749
|
+
});
|
|
750
|
+
const activity = {
|
|
751
|
+
id: `activity-${session.agentSessionId}`,
|
|
752
|
+
sessionId: session.agentSessionId,
|
|
753
|
+
userId: user.userId,
|
|
754
|
+
userName: user.userName,
|
|
755
|
+
...user.userAvatarUrl ? { userAvatarUrl: user.userAvatarUrl } : {},
|
|
756
|
+
agentProvider,
|
|
757
|
+
agentName,
|
|
758
|
+
title: resolveWorkspaceAgentActivityTitle(session, messages),
|
|
759
|
+
status,
|
|
760
|
+
latestActivitySummary: latestActivity.summary,
|
|
761
|
+
latestActivityActorName: latestActivity.actorName,
|
|
762
|
+
changedFiles: changedFilesForSession(messages),
|
|
763
|
+
sortTimeUnixMs: resolvedSortTimeUnixMs,
|
|
764
|
+
readTimeUnixMs: readTimeUnixMs(session, status, resolvedSortTimeUnixMs)
|
|
765
|
+
};
|
|
766
|
+
return activity;
|
|
767
|
+
}).filter(
|
|
768
|
+
(activity) => activity !== null
|
|
769
|
+
).sort(compareActivities);
|
|
770
|
+
return { activities };
|
|
771
|
+
}
|
|
772
|
+
function reuseWorkspaceAgentActivityListViewModelIfUnchanged(previous, next) {
|
|
773
|
+
if (!previous) {
|
|
774
|
+
return next;
|
|
814
775
|
}
|
|
815
|
-
|
|
776
|
+
if (next.activities.length === 0) {
|
|
777
|
+
return previous.activities.length === 0 ? previous : next;
|
|
778
|
+
}
|
|
779
|
+
const previousActivitiesById = new Map(
|
|
780
|
+
previous.activities.map((activity) => [activity.id, activity])
|
|
781
|
+
);
|
|
782
|
+
const activities = next.activities.map((activity) => {
|
|
783
|
+
const previousActivity = previousActivitiesById.get(activity.id);
|
|
784
|
+
if (!previousActivity || !workspaceAgentActivityCardEquals(previousActivity, activity)) {
|
|
785
|
+
return activity;
|
|
786
|
+
}
|
|
787
|
+
return previousActivity;
|
|
788
|
+
});
|
|
789
|
+
const reusedEveryActivityInPlace = previous.activities.length === activities.length && previous.activities.every(
|
|
790
|
+
(activity, index) => activity === activities[index]
|
|
791
|
+
);
|
|
792
|
+
return reusedEveryActivityInPlace ? previous : { activities };
|
|
793
|
+
}
|
|
794
|
+
function workspaceAgentActivityCardEquals(left, right) {
|
|
795
|
+
return left.id === right.id && left.sessionId === right.sessionId && left.userId === right.userId && left.userName === right.userName && left.userAvatarUrl === right.userAvatarUrl && left.agentProvider === right.agentProvider && left.agentName === right.agentName && left.title === right.title && left.status === right.status && left.latestActivitySummary === right.latestActivitySummary && left.latestActivityActorName === right.latestActivityActorName && left.sortTimeUnixMs === right.sortTimeUnixMs && JSON.stringify(left.conversationPreview ?? []) === JSON.stringify(right.conversationPreview ?? []) && JSON.stringify(left.toolCalls ?? []) === JSON.stringify(right.toolCalls ?? []) && JSON.stringify(left.changedFiles) === JSON.stringify(right.changedFiles);
|
|
796
|
+
}
|
|
797
|
+
function resolveWorkspaceAgentSessionMessages2(sessionMessagesById, session) {
|
|
798
|
+
if (!sessionMessagesById) {
|
|
799
|
+
return [];
|
|
800
|
+
}
|
|
801
|
+
for (const alias of workspaceAgentSessionMessageAliases(session)) {
|
|
802
|
+
const messages = sessionMessagesById[alias];
|
|
803
|
+
if (messages) {
|
|
804
|
+
return messages;
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
return [];
|
|
808
|
+
}
|
|
809
|
+
function resolveActivityUser(session, presence, options) {
|
|
810
|
+
if (presence) {
|
|
811
|
+
return resolveUserFromId(presence.userId ?? "", options);
|
|
812
|
+
}
|
|
813
|
+
const sessionUserId = session.userId?.trim() ?? "";
|
|
814
|
+
if (sessionUserId) {
|
|
815
|
+
return resolveUserFromId(sessionUserId, options);
|
|
816
|
+
}
|
|
817
|
+
return {
|
|
818
|
+
userId: null,
|
|
819
|
+
userName: "Unknown member"
|
|
820
|
+
};
|
|
821
|
+
}
|
|
822
|
+
function resolveUserFromId(rawUserId, options) {
|
|
823
|
+
const userId = rawUserId.trim();
|
|
824
|
+
const profile = options.userProfilesById?.[userId];
|
|
825
|
+
const profileName = compactText3(profile?.name ?? "");
|
|
826
|
+
const profileAvatar = profile?.avatar?.trim();
|
|
827
|
+
const rawName = profileName || userId || "Unknown member";
|
|
828
|
+
return {
|
|
829
|
+
userId,
|
|
830
|
+
userName: stripTrailingParentheticalEmailFromLabel(rawName) || rawName,
|
|
831
|
+
...profileAvatar ? { userAvatarUrl: profileAvatar } : {}
|
|
832
|
+
};
|
|
833
|
+
}
|
|
834
|
+
function resolveProvider(session, presence) {
|
|
835
|
+
const sessionProvider = normalizeProvider2(session.provider);
|
|
836
|
+
if (sessionProvider) {
|
|
837
|
+
return sessionProvider;
|
|
838
|
+
}
|
|
839
|
+
const presenceProvider = normalizeProvider2(presence?.provider);
|
|
840
|
+
if (presenceProvider) {
|
|
841
|
+
return presenceProvider;
|
|
842
|
+
}
|
|
843
|
+
return "unknown";
|
|
844
|
+
}
|
|
845
|
+
function normalizeProvider2(provider) {
|
|
846
|
+
const trimmed = provider?.trim();
|
|
847
|
+
return trimmed ? trimmed.toLowerCase() : null;
|
|
848
|
+
}
|
|
849
|
+
function readTimeUnixMs(session, status, fallbackUnixMs) {
|
|
850
|
+
if (status === "completed" || status === "failed") {
|
|
851
|
+
return session.endedAtUnixMs ?? session.updatedAtUnixMs ?? fallbackUnixMs;
|
|
852
|
+
}
|
|
853
|
+
return fallbackUnixMs;
|
|
816
854
|
}
|
|
817
855
|
function stripTrailingParentheticalEmailFromLabel(label) {
|
|
818
856
|
return label.trim().replace(/\s*\([^)]*@[^)]+\)\s*$/u, "").trim();
|
|
819
857
|
}
|
|
858
|
+
function compactText3(value) {
|
|
859
|
+
return value.replace(/\s+/g, " ").trim();
|
|
860
|
+
}
|
|
820
861
|
|
|
821
862
|
export {
|
|
822
|
-
isWorkspaceAgentUntitledTask,
|
|
823
863
|
collectWorkspaceAgentGeneratedFiles,
|
|
824
|
-
buildWorkspaceAgentActivityListViewModel,
|
|
825
|
-
reuseWorkspaceAgentActivityListViewModelIfUnchanged,
|
|
826
864
|
resolveWorkspaceAgentActivityStatus,
|
|
827
|
-
resolveWorkspaceAgentActivityTitle
|
|
865
|
+
resolveWorkspaceAgentActivityTitle,
|
|
866
|
+
buildWorkspaceAgentActivityListViewModel,
|
|
867
|
+
reuseWorkspaceAgentActivityListViewModelIfUnchanged
|
|
828
868
|
};
|
|
829
|
-
//# sourceMappingURL=chunk-
|
|
869
|
+
//# sourceMappingURL=chunk-BFNJKTDV.js.map
|