@tutti-os/agent-gui 0.0.59 → 0.0.60
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 +1 -1
- package/dist/@-bold-lined-BLLFKBFI.svg +10 -0
- package/dist/add-lined-bold-5QPUDZCU.svg +3 -0
- package/dist/agent-conversation/index.d.ts +2 -2
- package/dist/agent-conversation/index.js +7 -7
- package/dist/agent-message-center/index.js +17 -11
- package/dist/agent-message-center/index.js.map +1 -1
- package/dist/{agentGuiNodeTypes-CupCLd9p.d.ts → agentGuiNodeTypes-CC52zXAV.d.ts} +7 -4
- package/dist/app/renderer/agentactivity.css +533 -56
- package/dist/app/renderer/assets/icons/@-bold-lined.svg +10 -0
- package/dist/app/renderer/assets/icons/@-lined.svg +10 -0
- package/dist/app/renderer/assets/icons/add-lined-bold.svg +3 -0
- package/dist/app/renderer/assets/icons/add-lined-icon.svg +3 -0
- package/dist/app/renderer/assets/icons/add-lined.svg +3 -0
- package/dist/app/renderer/assets/icons/agents/claudecode-flat-filled.svg +10 -0
- package/dist/app/renderer/assets/icons/agents/codex-flat-filled.svg +10 -0
- package/dist/app/renderer/assets/icons/agents/provider-rail-claude-code-colorful.png +0 -0
- package/dist/app/renderer/assets/icons/agents/provider-rail-codex-colorful.png +0 -0
- package/dist/app/renderer/assets/icons/agents/provider-rail-hermes-colorful.png +0 -0
- package/dist/app/renderer/assets/icons/agents/provider-rail-tutti.png +0 -0
- package/dist/app/renderer/assets/icons/handoff-lined.png +0 -0
- package/dist/app/renderer/assets/icons/handoff-lined.svg +11 -0
- package/dist/{chunk-5SRRKWE4.js → chunk-24CUBQKJ.js} +2 -2
- package/dist/{chunk-NX6T3DDS.js → chunk-2LGUBUEJ.js} +3 -3
- package/dist/{chunk-UCCUIUGK.js → chunk-4OPTXOOZ.js} +2 -2
- package/dist/{chunk-Q75AK47T.js → chunk-5WB3NGIN.js} +2 -2
- package/dist/{chunk-2WUDORCV.js → chunk-6TEPDMX6.js} +2 -2
- package/dist/{chunk-IS6JUDDY.js → chunk-6VVBG4BF.js} +44 -20
- package/dist/chunk-6VVBG4BF.js.map +1 -0
- package/dist/{chunk-OLI2A3EM.js → chunk-74TIEA6X.js} +2 -2
- package/dist/{chunk-N756UO52.js → chunk-AWIZJQXW.js} +68 -65
- package/dist/chunk-AWIZJQXW.js.map +1 -0
- package/dist/{chunk-SLT5Q37C.js → chunk-B6YDXIZW.js} +5 -3
- package/dist/{chunk-SLT5Q37C.js.map → chunk-B6YDXIZW.js.map} +1 -1
- package/dist/{chunk-7GM7UQXD.js → chunk-BB2SVMEV.js} +46 -8
- package/dist/chunk-BB2SVMEV.js.map +1 -0
- package/dist/{chunk-BT5WEZO5.js → chunk-CUMZV32B.js} +5 -5
- package/dist/chunk-CUMZV32B.js.map +1 -0
- package/dist/{chunk-OFMORNBO.js → chunk-CZSMZRAV.js} +23 -6
- package/dist/chunk-CZSMZRAV.js.map +1 -0
- package/dist/{chunk-HVU46DDA.js → chunk-FRCIPTUD.js} +13 -2
- package/dist/chunk-FRCIPTUD.js.map +1 -0
- package/dist/{chunk-CEMXB7LA.js → chunk-I5ZIKJVN.js} +2 -2
- package/dist/{chunk-4PSDYKZQ.js → chunk-K3UBSTJ5.js} +12 -9
- package/dist/chunk-K3UBSTJ5.js.map +1 -0
- package/dist/{chunk-Z2BTIAOC.js → chunk-MPZ3CW5C.js} +1 -1
- package/dist/chunk-MPZ3CW5C.js.map +1 -0
- package/dist/{chunk-MTFSQWZ6.js → chunk-V4JGVBUN.js} +22 -2
- package/dist/chunk-V4JGVBUN.js.map +1 -0
- package/dist/{chunk-OQJSZSYB.js → chunk-WNVIKTJK.js} +2 -2
- package/dist/{chunk-BEFNWUOZ.js → chunk-YZ3POK7G.js} +374 -316
- package/dist/chunk-YZ3POK7G.js.map +1 -0
- package/dist/claudecode-flat-filled-NHO4JCVK.svg +10 -0
- package/dist/codex-flat-filled-WYHCF5VR.svg +10 -0
- package/dist/context-mention-palette/index.js +8 -8
- package/dist/handoff-lined-4WQUBVG3.svg +11 -0
- package/dist/i18n/index.d.ts +43 -19
- package/dist/i18n/index.js +2 -2
- package/dist/index.d.ts +40 -16
- package/dist/index.js +1357 -501
- package/dist/index.js.map +1 -1
- package/dist/queued-prompt-runtime.d.ts +2 -2
- package/dist/{types-BsHvTjIZ.d.ts → types-DSc2ta3s.d.ts} +1 -1
- package/dist/workbench/contribution.d.ts +4 -8
- package/dist/workbench/contribution.js +9 -7
- package/dist/workbench/index.d.ts +4 -4
- package/dist/workbench/index.js +10 -12
- package/dist/workbench/launch.d.ts +6 -7
- package/dist/workbench/launch.js +2 -4
- package/dist/workbench/providerCatalog.d.ts +1 -1
- package/dist/workbench/sessionTitle.d.ts +1 -1
- package/dist/workbench/sessionTitle.js +3 -3
- package/dist/workbench/state.d.ts +1 -1
- package/dist/workbench/state.js +2 -2
- package/dist/workbench/types.d.ts +3 -1
- package/dist/workbench/types.js +1 -1
- package/dist/workspace-agent-generated-files.js +3 -3
- package/package.json +12 -12
- package/dist/@-lined-14px-64O2KKB4.svg +0 -3
- package/dist/chunk-4PSDYKZQ.js.map +0 -1
- package/dist/chunk-7GM7UQXD.js.map +0 -1
- package/dist/chunk-BEFNWUOZ.js.map +0 -1
- package/dist/chunk-BT5WEZO5.js.map +0 -1
- package/dist/chunk-HVU46DDA.js.map +0 -1
- package/dist/chunk-IS6JUDDY.js.map +0 -1
- package/dist/chunk-MTFSQWZ6.js.map +0 -1
- package/dist/chunk-N756UO52.js.map +0 -1
- package/dist/chunk-OFMORNBO.js.map +0 -1
- package/dist/chunk-Z2BTIAOC.js.map +0 -1
- /package/dist/{chunk-5SRRKWE4.js.map → chunk-24CUBQKJ.js.map} +0 -0
- /package/dist/{chunk-NX6T3DDS.js.map → chunk-2LGUBUEJ.js.map} +0 -0
- /package/dist/{chunk-UCCUIUGK.js.map → chunk-4OPTXOOZ.js.map} +0 -0
- /package/dist/{chunk-Q75AK47T.js.map → chunk-5WB3NGIN.js.map} +0 -0
- /package/dist/{chunk-2WUDORCV.js.map → chunk-6TEPDMX6.js.map} +0 -0
- /package/dist/{chunk-OLI2A3EM.js.map → chunk-74TIEA6X.js.map} +0 -0
- /package/dist/{chunk-CEMXB7LA.js.map → chunk-I5ZIKJVN.js.map} +0 -0
- /package/dist/{chunk-OQJSZSYB.js.map → chunk-WNVIKTJK.js.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -9,20 +9,21 @@ import {
|
|
|
9
9
|
resolveAgentGUIExpandedWindowFrame,
|
|
10
10
|
resolveNextAgentGUIConversationRailWidthPx,
|
|
11
11
|
shouldAutoCollapseAgentGUIConversationRail
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-5WB3NGIN.js";
|
|
13
13
|
import {
|
|
14
14
|
agentGUIDefaultTargetProviders,
|
|
15
15
|
agentGUIProviderTargetRefsEqual,
|
|
16
|
+
createDisabledPlaceholderAgentGUIProviderTarget,
|
|
16
17
|
createLocalAgentGUIProviderTarget,
|
|
17
18
|
createLocalAgentGUIProviderTargets,
|
|
18
19
|
localAgentGUIProviderTargetId,
|
|
19
20
|
normalizeAgentGUIProviderTargets,
|
|
20
21
|
resolveAgentGUIProviderTarget
|
|
21
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-BB2SVMEV.js";
|
|
22
23
|
import {
|
|
23
24
|
AgentInteractivePromptSurface,
|
|
24
25
|
approvalOptionDisplayLabel
|
|
25
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-CZSMZRAV.js";
|
|
26
27
|
import {
|
|
27
28
|
PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
|
|
28
29
|
PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,
|
|
@@ -41,7 +42,7 @@ import {
|
|
|
41
42
|
resolveAgentGUIExplicitConversationTitle,
|
|
42
43
|
resolveAgentGUIProviderDisplayLabel,
|
|
43
44
|
resolveAgentGUIProviderIdentity
|
|
44
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-4OPTXOOZ.js";
|
|
45
46
|
import {
|
|
46
47
|
AgentConversationFlow,
|
|
47
48
|
Button,
|
|
@@ -62,14 +63,14 @@ import {
|
|
|
62
63
|
skillTriggerForPrefix,
|
|
63
64
|
toLocalShortDateTime,
|
|
64
65
|
useProjectedAgentConversation
|
|
65
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-YZ3POK7G.js";
|
|
66
67
|
import {
|
|
67
68
|
AgentMessageMarkdown,
|
|
68
69
|
AgentTargetPresentationProvider,
|
|
69
70
|
ZoomableImage,
|
|
70
71
|
cn,
|
|
71
72
|
resolveWorkspaceLinkAction
|
|
72
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-B6YDXIZW.js";
|
|
73
74
|
import {
|
|
74
75
|
openAgentEnvPanel
|
|
75
76
|
} from "./chunk-PSLAWU25.js";
|
|
@@ -80,7 +81,7 @@ import {
|
|
|
80
81
|
DEFAULT_AGENT_MENTION_FILTER,
|
|
81
82
|
agentMentionItemKey,
|
|
82
83
|
preloadAgentMentionBrowse
|
|
83
|
-
} from "./chunk-
|
|
84
|
+
} from "./chunk-CUMZV32B.js";
|
|
84
85
|
import {
|
|
85
86
|
WORKSPACE_AGENT_ACTIVITY_RUNTIME_SESSION_ORIGIN,
|
|
86
87
|
buildWorkspaceAgentActivityListViewModel,
|
|
@@ -90,10 +91,10 @@ import {
|
|
|
90
91
|
isWorkspaceAgentUntitledTask,
|
|
91
92
|
mergeWorkspaceAgentActivityDurableAndOverlayMessages,
|
|
92
93
|
selectWorkspaceAgentActivityOverlayMessages
|
|
93
|
-
} from "./chunk-
|
|
94
|
+
} from "./chunk-I5ZIKJVN.js";
|
|
94
95
|
import {
|
|
95
96
|
Spinner
|
|
96
|
-
} from "./chunk-
|
|
97
|
+
} from "./chunk-74TIEA6X.js";
|
|
97
98
|
import {
|
|
98
99
|
resolveWorkspaceAgentSessionSortTimeUnixMs
|
|
99
100
|
} from "./chunk-IBIMGLCD.js";
|
|
@@ -104,7 +105,7 @@ import {
|
|
|
104
105
|
mentionItemToAttrs,
|
|
105
106
|
normalizeAgentSessionMentionTitle,
|
|
106
107
|
parseMentionItemFromHref
|
|
107
|
-
} from "./chunk-
|
|
108
|
+
} from "./chunk-2LGUBUEJ.js";
|
|
108
109
|
import "./chunk-Y35GDLP2.js";
|
|
109
110
|
import "./chunk-LUGELG5V.js";
|
|
110
111
|
import {
|
|
@@ -112,6 +113,7 @@ import {
|
|
|
112
113
|
AgentActivityRuntimeProvider,
|
|
113
114
|
MANAGED_AGENT_ICON_FALLBACK_URL,
|
|
114
115
|
MANAGED_AGENT_ICON_URLS,
|
|
116
|
+
MANAGED_AGENT_PROVIDER_RAIL_ICON_URLS,
|
|
115
117
|
getAgentActivityRuntime,
|
|
116
118
|
getAgentCustomMentionKind,
|
|
117
119
|
getOptionalAgentActivityRuntime,
|
|
@@ -126,7 +128,7 @@ import {
|
|
|
126
128
|
useAgentHostApi,
|
|
127
129
|
useOptionalAgentActivityRuntime,
|
|
128
130
|
useOptionalAgentHostApi
|
|
129
|
-
} from "./chunk-
|
|
131
|
+
} from "./chunk-FRCIPTUD.js";
|
|
130
132
|
import "./chunk-TYGL25EL.js";
|
|
131
133
|
import {
|
|
132
134
|
AgentGuiI18nProvider,
|
|
@@ -134,10 +136,10 @@ import {
|
|
|
134
136
|
agentGuiI18nResources,
|
|
135
137
|
translate,
|
|
136
138
|
useTranslation
|
|
137
|
-
} from "./chunk-
|
|
139
|
+
} from "./chunk-24CUBQKJ.js";
|
|
138
140
|
import "./chunk-PJP5BUU6.js";
|
|
139
|
-
import "./chunk-
|
|
140
|
-
import "./chunk-
|
|
141
|
+
import "./chunk-V4JGVBUN.js";
|
|
142
|
+
import "./chunk-6VVBG4BF.js";
|
|
141
143
|
import {
|
|
142
144
|
AGENT_CONTEXT_MENTION_PROVIDER_IDS
|
|
143
145
|
} from "./chunk-JM24HADP.js";
|
|
@@ -310,7 +312,7 @@ import { memo as memo3 } from "react";
|
|
|
310
312
|
import { TooltipProvider as TooltipProvider3 } from "@tutti-os/ui-system";
|
|
311
313
|
|
|
312
314
|
// agent-gui/agentGuiNode/AgentGUINode.tsx
|
|
313
|
-
import { memo as memo2, useCallback as useCallback12, useEffect as
|
|
315
|
+
import { memo as memo2, useCallback as useCallback12, useEffect as useEffect15, useMemo as useMemo11 } from "react";
|
|
314
316
|
import { createWorkspaceUserProjectI18nRuntime } from "@tutti-os/workspace-user-project/i18n";
|
|
315
317
|
import { createWorkspaceFileManagerI18nRuntime } from "@tutti-os/workspace-file-manager";
|
|
316
318
|
|
|
@@ -6653,6 +6655,28 @@ function nodeDataFromComposerSettings(current, settings) {
|
|
|
6653
6655
|
};
|
|
6654
6656
|
}
|
|
6655
6657
|
|
|
6658
|
+
// agent-gui/agentGuiNode/controller/agentGuiController.sessionHelpers.ts
|
|
6659
|
+
function mergeAgentSessionControlStateSnapshot(current, snapshot3) {
|
|
6660
|
+
const incomingUsage = recordValue2(snapshot3.runtimeContext?.usage);
|
|
6661
|
+
if (incomingUsage || !current) {
|
|
6662
|
+
return snapshot3;
|
|
6663
|
+
}
|
|
6664
|
+
const previousUsage = recordValue2(current.runtimeContext?.usage);
|
|
6665
|
+
if (!previousUsage) {
|
|
6666
|
+
return snapshot3;
|
|
6667
|
+
}
|
|
6668
|
+
return {
|
|
6669
|
+
...snapshot3,
|
|
6670
|
+
runtimeContext: {
|
|
6671
|
+
...snapshot3.runtimeContext ?? {},
|
|
6672
|
+
usage: previousUsage
|
|
6673
|
+
}
|
|
6674
|
+
};
|
|
6675
|
+
}
|
|
6676
|
+
function recordValue2(value) {
|
|
6677
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
6678
|
+
}
|
|
6679
|
+
|
|
6656
6680
|
// agent-gui/agentGuiNode/controller/useAgentGUINodeController.ts
|
|
6657
6681
|
var EMPTY_AGENT_GUI_MESSAGES = [];
|
|
6658
6682
|
var EMPTY_AGENT_GUI_AVAILABLE_COMMANDS = [];
|
|
@@ -7849,7 +7873,7 @@ function hasRejectedApprovalDecision(timelineItems) {
|
|
|
7849
7873
|
if (status !== "completed") {
|
|
7850
7874
|
return false;
|
|
7851
7875
|
}
|
|
7852
|
-
const output =
|
|
7876
|
+
const output = recordValue3(payload.output);
|
|
7853
7877
|
return isRejectedApprovalDecision(output);
|
|
7854
7878
|
});
|
|
7855
7879
|
}
|
|
@@ -7982,7 +8006,7 @@ function normalizeAgentGUIOpenSessionRequest(request) {
|
|
|
7982
8006
|
sequence: request.sequence
|
|
7983
8007
|
};
|
|
7984
8008
|
}
|
|
7985
|
-
function
|
|
8009
|
+
function recordValue3(value) {
|
|
7986
8010
|
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
7987
8011
|
}
|
|
7988
8012
|
function numberValue(value) {
|
|
@@ -7996,7 +8020,7 @@ function numberValue(value) {
|
|
|
7996
8020
|
return null;
|
|
7997
8021
|
}
|
|
7998
8022
|
function activeBackgroundAgentCount(runtimeContext) {
|
|
7999
|
-
const backgroundAgents =
|
|
8023
|
+
const backgroundAgents = recordValue3(runtimeContext?.backgroundAgents);
|
|
8000
8024
|
if (!backgroundAgents) {
|
|
8001
8025
|
return 0;
|
|
8002
8026
|
}
|
|
@@ -8006,7 +8030,7 @@ function activeBackgroundAgentCount(runtimeContext) {
|
|
|
8006
8030
|
return count === null ? 0 : Math.max(0, Math.floor(count));
|
|
8007
8031
|
}
|
|
8008
8032
|
return items.filter((item) => {
|
|
8009
|
-
const record =
|
|
8033
|
+
const record = recordValue3(item);
|
|
8010
8034
|
if (!record) {
|
|
8011
8035
|
return false;
|
|
8012
8036
|
}
|
|
@@ -8021,7 +8045,7 @@ function activeBackgroundAgentCount(runtimeContext) {
|
|
|
8021
8045
|
}).length;
|
|
8022
8046
|
}
|
|
8023
8047
|
function appServerStartupMetadata(runtimeContext) {
|
|
8024
|
-
return
|
|
8048
|
+
return recordValue3(runtimeContext?.appServerStartup);
|
|
8025
8049
|
}
|
|
8026
8050
|
function isAppServerStartupLoading(runtimeContext, key) {
|
|
8027
8051
|
return appServerStartupMetadata(runtimeContext)?.[key] === "loading";
|
|
@@ -8043,6 +8067,24 @@ function modelSelectionFromComposerOptions(options, currentValue) {
|
|
|
8043
8067
|
currentValue
|
|
8044
8068
|
};
|
|
8045
8069
|
}
|
|
8070
|
+
function configOptionCurrentValue(runtimeContext, ids) {
|
|
8071
|
+
const rawConfigOptions = Array.isArray(runtimeContext?.configOptions) ? runtimeContext.configOptions : [];
|
|
8072
|
+
const idSet = new Set(ids);
|
|
8073
|
+
for (const rawOption of rawConfigOptions) {
|
|
8074
|
+
const option = recordValue3(rawOption);
|
|
8075
|
+
if (!option) {
|
|
8076
|
+
continue;
|
|
8077
|
+
}
|
|
8078
|
+
const id = normalizeOptionalText2(option.id);
|
|
8079
|
+
if (!id || !idSet.has(id)) {
|
|
8080
|
+
continue;
|
|
8081
|
+
}
|
|
8082
|
+
return normalizeOptionalText2(
|
|
8083
|
+
option.currentValue ?? option.current_value
|
|
8084
|
+
);
|
|
8085
|
+
}
|
|
8086
|
+
return null;
|
|
8087
|
+
}
|
|
8046
8088
|
function reasoningSelectionFromComposerOptions(options, currentValue) {
|
|
8047
8089
|
if (!options) {
|
|
8048
8090
|
return null;
|
|
@@ -8741,7 +8783,6 @@ function useAgentGUINodeController({
|
|
|
8741
8783
|
workspacePath,
|
|
8742
8784
|
avoidGroupingEdits,
|
|
8743
8785
|
data,
|
|
8744
|
-
conversationScope = "single-provider",
|
|
8745
8786
|
providerTargets,
|
|
8746
8787
|
providerTargetsLoading = false,
|
|
8747
8788
|
providerReadinessGates = null,
|
|
@@ -8759,23 +8800,35 @@ function useAgentGUINodeController({
|
|
|
8759
8800
|
const agentActivitySnapshot = useAgentActivitySnapshot(workspaceId);
|
|
8760
8801
|
const normalizedExplicitProviderTargets = useMemo4(
|
|
8761
8802
|
() => normalizeAgentGUIProviderTargets(providerTargets, {
|
|
8762
|
-
|
|
8803
|
+
includeDisabledPlaceholders: true,
|
|
8804
|
+
useStaticCatalog: false
|
|
8763
8805
|
}),
|
|
8764
8806
|
[providerTargets]
|
|
8765
8807
|
);
|
|
8766
|
-
const normalizedProviderTargets = useMemo4(
|
|
8767
|
-
(
|
|
8768
|
-
|
|
8769
|
-
|
|
8770
|
-
|
|
8808
|
+
const normalizedProviderTargets = useMemo4(() => {
|
|
8809
|
+
if (providerTargetsLoading) {
|
|
8810
|
+
return [];
|
|
8811
|
+
}
|
|
8812
|
+
if (providerTargets === void 0 || normalizedExplicitProviderTargets.length === 0) {
|
|
8813
|
+
return normalizeAgentGUIProviderTargets(null, {
|
|
8814
|
+
includeDisabledPlaceholders: true
|
|
8815
|
+
});
|
|
8816
|
+
}
|
|
8817
|
+
return normalizedExplicitProviderTargets;
|
|
8818
|
+
}, [
|
|
8819
|
+
normalizedExplicitProviderTargets,
|
|
8820
|
+
providerTargets,
|
|
8821
|
+
providerTargetsLoading
|
|
8822
|
+
]);
|
|
8823
|
+
const shouldUseStaticProviderTargets = !providerTargetsLoading && (providerTargets === void 0 || normalizedExplicitProviderTargets.length === 0);
|
|
8771
8824
|
const selectedProviderTarget = useMemo4(() => {
|
|
8772
8825
|
const resolved = resolveAgentGUIProviderTarget({
|
|
8773
8826
|
agentTargetId: data.agentTargetId,
|
|
8774
8827
|
defaultProviderTargetId,
|
|
8775
|
-
fallbackToLocal: shouldFallbackToLocalProviderTargets,
|
|
8776
8828
|
provider: data.provider,
|
|
8777
8829
|
providerTargetId: data.providerTargetId,
|
|
8778
|
-
providerTargets: normalizedProviderTargets
|
|
8830
|
+
providerTargets: normalizedProviderTargets,
|
|
8831
|
+
useStaticCatalog: shouldUseStaticProviderTargets
|
|
8779
8832
|
});
|
|
8780
8833
|
return resolved ?? {
|
|
8781
8834
|
targetId: data.agentTargetId ?? "__loading__",
|
|
@@ -8793,7 +8846,7 @@ function useAgentGUINodeController({
|
|
|
8793
8846
|
data.providerTargetId,
|
|
8794
8847
|
defaultProviderTargetId,
|
|
8795
8848
|
normalizedProviderTargets,
|
|
8796
|
-
|
|
8849
|
+
shouldUseStaticProviderTargets
|
|
8797
8850
|
]);
|
|
8798
8851
|
const selectedProviderTargetIsExplicit = useMemo4(
|
|
8799
8852
|
() => normalizedExplicitProviderTargets.some(
|
|
@@ -8870,14 +8923,6 @@ function useAgentGUINodeController({
|
|
|
8870
8923
|
);
|
|
8871
8924
|
const conversationFilterRef = useRef4(conversationFilter);
|
|
8872
8925
|
conversationFilterRef.current = conversationFilter;
|
|
8873
|
-
const canUseConversationTargetFilter = conversationScope === "multi-provider";
|
|
8874
|
-
const queryConversationFilter = canUseConversationTargetFilter ? conversationFilter : null;
|
|
8875
|
-
useEffect4(() => {
|
|
8876
|
-
if (canUseConversationTargetFilter || conversationFilter.kind === "all") {
|
|
8877
|
-
return;
|
|
8878
|
-
}
|
|
8879
|
-
setConversationFilter({ kind: "all" });
|
|
8880
|
-
}, [canUseConversationTargetFilter, conversationFilter]);
|
|
8881
8926
|
const conversationListQuery = useMemo4(() => {
|
|
8882
8927
|
const userId = currentUserId?.trim() ?? "";
|
|
8883
8928
|
const provider = data.provider?.trim() ?? "";
|
|
@@ -8885,13 +8930,13 @@ function useAgentGUINodeController({
|
|
|
8885
8930
|
return null;
|
|
8886
8931
|
}
|
|
8887
8932
|
return {
|
|
8888
|
-
|
|
8933
|
+
conversationFilter,
|
|
8889
8934
|
workspaceId,
|
|
8890
8935
|
userId,
|
|
8891
8936
|
provider: data.provider,
|
|
8892
8937
|
sessionOrigin: AGENT_GUI_RUNTIME_SESSION_ORIGIN
|
|
8893
8938
|
};
|
|
8894
|
-
}, [currentUserId, data.provider,
|
|
8939
|
+
}, [currentUserId, data.provider, conversationFilter, workspaceId]);
|
|
8895
8940
|
const conversationListState = useAgentGuiConversationList(
|
|
8896
8941
|
conversationListQuery
|
|
8897
8942
|
);
|
|
@@ -9002,6 +9047,10 @@ function useAgentGUINodeController({
|
|
|
9002
9047
|
composerOptions: providerComposerOptions,
|
|
9003
9048
|
sessionRuntimeContext: activeSessionState?.runtimeContext
|
|
9004
9049
|
});
|
|
9050
|
+
const goalPauseSupported = resolveAgentActivityCapability2("goalPause", {
|
|
9051
|
+
composerOptions: providerComposerOptions,
|
|
9052
|
+
sessionRuntimeContext: activeSessionState?.runtimeContext
|
|
9053
|
+
}) ?? false;
|
|
9005
9054
|
const activeSessionRuntimeContext = activeSessionState?.runtimeContext;
|
|
9006
9055
|
const backgroundAgentCount = useMemo4(
|
|
9007
9056
|
() => activeBackgroundAgentCount(activeSessionRuntimeContext),
|
|
@@ -10253,9 +10302,9 @@ function useAgentGUINodeController({
|
|
|
10253
10302
|
...sessionStateSnapshotCauseBySessionIdRef.current,
|
|
10254
10303
|
[agentSessionId]: cause ? { source: cause.source } : void 0
|
|
10255
10304
|
};
|
|
10256
|
-
|
|
10305
|
+
updateAgentSessionViewControlState(
|
|
10257
10306
|
sessionViewRef(agentSessionId),
|
|
10258
|
-
snapshot3
|
|
10307
|
+
(current) => mergeAgentSessionControlStateSnapshot(current, snapshot3)
|
|
10259
10308
|
);
|
|
10260
10309
|
} catch (error) {
|
|
10261
10310
|
if (!isMountedRef.current || cause?.allowInactive !== true && activeConversationIdRef.current !== agentSessionId) {
|
|
@@ -11924,13 +11973,13 @@ function useAgentGUINodeController({
|
|
|
11924
11973
|
setDetailError(null);
|
|
11925
11974
|
persistActiveConversation(null);
|
|
11926
11975
|
const filter = conversationFilterRef.current;
|
|
11927
|
-
if (
|
|
11976
|
+
if (filter.kind === "agentTarget") {
|
|
11928
11977
|
const filterTarget = resolveAgentGUIProviderTarget({
|
|
11929
11978
|
agentTargetId: filter.agentTargetId,
|
|
11930
11979
|
defaultProviderTargetId,
|
|
11931
|
-
fallbackToLocal: false,
|
|
11932
11980
|
provider: dataRef.current.provider,
|
|
11933
|
-
providerTargets: normalizedProviderTargets
|
|
11981
|
+
providerTargets: normalizedProviderTargets,
|
|
11982
|
+
useStaticCatalog: false
|
|
11934
11983
|
});
|
|
11935
11984
|
if (filterTarget && filterTarget.disabled !== true && (filterTarget.agentTargetId?.trim() ?? "") === filter.agentTargetId) {
|
|
11936
11985
|
setHomeComposerTargetOverride(filterTarget);
|
|
@@ -11941,7 +11990,6 @@ function useAgentGUINodeController({
|
|
|
11941
11990
|
[
|
|
11942
11991
|
activation,
|
|
11943
11992
|
agentActivityRuntime,
|
|
11944
|
-
canUseConversationTargetFilter,
|
|
11945
11993
|
defaultProviderTargetId,
|
|
11946
11994
|
loadDraftComposerOptions,
|
|
11947
11995
|
normalizedProviderTargets,
|
|
@@ -11987,13 +12035,12 @@ function useAgentGUINodeController({
|
|
|
11987
12035
|
setActiveConversationId(null);
|
|
11988
12036
|
setIsLoadingMessages(false);
|
|
11989
12037
|
setDetailError(null);
|
|
11990
|
-
const
|
|
12038
|
+
const selectedTargetData = selectedComposerTargetDataRef.current;
|
|
12039
|
+
const targetProvider = prefillPromptRequest.provider ?? selectedTargetData.provider;
|
|
12040
|
+
const targetAgentTargetId = prefillPromptRequest.agentTargetId ?? selectedTargetData.agentTargetId;
|
|
11991
12041
|
setDraftBySessionId((current) => ({
|
|
11992
12042
|
...current,
|
|
11993
|
-
[nodeDefaultDraftContentKey(
|
|
11994
|
-
targetData.provider,
|
|
11995
|
-
targetData.agentTargetId
|
|
11996
|
-
)]: {
|
|
12043
|
+
[nodeDefaultDraftContentKey(targetProvider, targetAgentTargetId)]: {
|
|
11997
12044
|
...emptyAgentComposerDraft(),
|
|
11998
12045
|
prompt: draftPrompt2
|
|
11999
12046
|
}
|
|
@@ -12514,6 +12561,36 @@ function useAgentGUINodeController({
|
|
|
12514
12561
|
shouldQueuePromptLocally
|
|
12515
12562
|
]
|
|
12516
12563
|
);
|
|
12564
|
+
const goalControl = useCallback4(
|
|
12565
|
+
(action, objective) => {
|
|
12566
|
+
if (previewMode) {
|
|
12567
|
+
return;
|
|
12568
|
+
}
|
|
12569
|
+
const agentSessionId = activeConversationIdRef.current;
|
|
12570
|
+
if (!agentSessionId) {
|
|
12571
|
+
return;
|
|
12572
|
+
}
|
|
12573
|
+
setDetailError(null);
|
|
12574
|
+
void agentActivityRuntime.goalControl({
|
|
12575
|
+
workspaceId,
|
|
12576
|
+
agentSessionId,
|
|
12577
|
+
action,
|
|
12578
|
+
...objective !== void 0 ? { objective } : {}
|
|
12579
|
+
}).catch((error) => {
|
|
12580
|
+
if (!isCurrentConversation(agentSessionId)) {
|
|
12581
|
+
return;
|
|
12582
|
+
}
|
|
12583
|
+
setDetailError(getAgentGUIErrorMessage(error));
|
|
12584
|
+
});
|
|
12585
|
+
},
|
|
12586
|
+
[
|
|
12587
|
+
agentActivityRuntime,
|
|
12588
|
+
isCurrentConversation,
|
|
12589
|
+
previewMode,
|
|
12590
|
+
setDetailError,
|
|
12591
|
+
workspaceId
|
|
12592
|
+
]
|
|
12593
|
+
);
|
|
12517
12594
|
const submitPrompt = useCallback4(
|
|
12518
12595
|
(content, displayPrompt) => {
|
|
12519
12596
|
if (previewMode) {
|
|
@@ -12875,10 +12952,12 @@ function useAgentGUINodeController({
|
|
|
12875
12952
|
}).then((result) => {
|
|
12876
12953
|
const queuedUpdate = queuedComposerSettingsUpdatesRef.current[agentSessionId] ?? null;
|
|
12877
12954
|
const optimisticSettings = queuedUpdate?.sessionSettingsPatch ?? null;
|
|
12878
|
-
const
|
|
12955
|
+
const pendingClaudeModelRefreshSettings = dataRef.current.provider === "claude-code" && sessionSettingsPatch.model !== void 0 ? { model: sessionSettingsPatch.model } : null;
|
|
12956
|
+
const nextAppliedSettings = {
|
|
12879
12957
|
...result.settings,
|
|
12880
|
-
...
|
|
12881
|
-
|
|
12958
|
+
...pendingClaudeModelRefreshSettings ?? {},
|
|
12959
|
+
...optimisticSettings ?? {}
|
|
12960
|
+
};
|
|
12882
12961
|
updateAgentSessionViewControlState(
|
|
12883
12962
|
sessionViewRef(agentSessionId),
|
|
12884
12963
|
(existing) => existing ? {
|
|
@@ -13787,9 +13866,9 @@ function useAgentGUINodeController({
|
|
|
13787
13866
|
const sessionTarget = resolveAgentGUIProviderTarget({
|
|
13788
13867
|
agentTargetId: summaryAgentTargetId,
|
|
13789
13868
|
defaultProviderTargetId,
|
|
13790
|
-
fallbackToLocal: shouldFallbackToLocalProviderTargets,
|
|
13791
13869
|
provider: summary.provider,
|
|
13792
|
-
providerTargets: normalizedProviderTargets
|
|
13870
|
+
providerTargets: normalizedProviderTargets,
|
|
13871
|
+
useStaticCatalog: shouldUseStaticProviderTargets
|
|
13793
13872
|
});
|
|
13794
13873
|
if (!sessionTarget || sessionTarget.provider !== summary.provider) {
|
|
13795
13874
|
return;
|
|
@@ -13824,7 +13903,7 @@ function useAgentGUINodeController({
|
|
|
13824
13903
|
normalizedProviderTargets,
|
|
13825
13904
|
previewMode,
|
|
13826
13905
|
providerTargetsLoading,
|
|
13827
|
-
|
|
13906
|
+
shouldUseStaticProviderTargets
|
|
13828
13907
|
]);
|
|
13829
13908
|
const visibleConversationsRef = useRef4(
|
|
13830
13909
|
null
|
|
@@ -14148,7 +14227,8 @@ function useAgentGUINodeController({
|
|
|
14148
14227
|
)
|
|
14149
14228
|
});
|
|
14150
14229
|
const draftSettings = activeConversationId ? sessionSettings ?? defaultConversationDraftSettings : homeComposerSettings;
|
|
14151
|
-
const
|
|
14230
|
+
const liveConfigModel = activeConversationId !== null ? configOptionCurrentValue(activeSessionRuntimeContext, ["model"]) : null;
|
|
14231
|
+
const draftModel = liveConfigModel ?? normalizeOptionalText2(draftSettings.model);
|
|
14152
14232
|
const draftReasoningEffort = normalizeOptionalText2(
|
|
14153
14233
|
draftSettings.reasoningEffort
|
|
14154
14234
|
);
|
|
@@ -14411,15 +14491,11 @@ function useAgentGUINodeController({
|
|
|
14411
14491
|
const stableComposerSettings = useStableComposerSettingsVM(composerSettings);
|
|
14412
14492
|
const updateConversationFilter = useCallback4(
|
|
14413
14493
|
(filter) => {
|
|
14414
|
-
if (!canUseConversationTargetFilter) {
|
|
14415
|
-
setConversationFilter({ kind: "all" });
|
|
14416
|
-
return;
|
|
14417
|
-
}
|
|
14418
14494
|
setConversationFilter(normalizeAgentGUIConversationFilter(filter));
|
|
14419
14495
|
},
|
|
14420
|
-
[
|
|
14496
|
+
[]
|
|
14421
14497
|
);
|
|
14422
|
-
const
|
|
14498
|
+
const selectHomeComposerAgentTarget = useCallback4(
|
|
14423
14499
|
(input) => {
|
|
14424
14500
|
if (previewMode) {
|
|
14425
14501
|
return;
|
|
@@ -14427,17 +14503,14 @@ function useAgentGUINodeController({
|
|
|
14427
14503
|
const nextProvider = input.provider;
|
|
14428
14504
|
const nextTarget = resolveAgentGUIProviderTarget({
|
|
14429
14505
|
defaultProviderTargetId,
|
|
14430
|
-
fallbackToLocal: shouldFallbackToLocalProviderTargets,
|
|
14431
14506
|
provider: nextProvider,
|
|
14432
14507
|
providerTargetId: input.providerTargetId,
|
|
14433
|
-
providerTargets: normalizedProviderTargets
|
|
14508
|
+
providerTargets: normalizedProviderTargets,
|
|
14509
|
+
useStaticCatalog: shouldUseStaticProviderTargets
|
|
14434
14510
|
});
|
|
14435
14511
|
if (!nextTarget) {
|
|
14436
14512
|
return;
|
|
14437
14513
|
}
|
|
14438
|
-
if (nextTarget.disabled === true) {
|
|
14439
|
-
return;
|
|
14440
|
-
}
|
|
14441
14514
|
const nextTargetIsExplicit = normalizedExplicitProviderTargets.some(
|
|
14442
14515
|
(target) => target.provider === nextTarget.provider && target.targetId === nextTarget.targetId && agentGUIProviderTargetRefsEqual(target.ref, nextTarget.ref)
|
|
14443
14516
|
);
|
|
@@ -14481,7 +14554,9 @@ function useAgentGUINodeController({
|
|
|
14481
14554
|
dataRef.current = nextData;
|
|
14482
14555
|
return nextData;
|
|
14483
14556
|
});
|
|
14484
|
-
|
|
14557
|
+
if (nextTarget.disabled !== true) {
|
|
14558
|
+
loadComposerOptionsForTarget(nextTargetData, { force: true });
|
|
14559
|
+
}
|
|
14485
14560
|
},
|
|
14486
14561
|
[
|
|
14487
14562
|
activation,
|
|
@@ -14491,21 +14566,17 @@ function useAgentGUINodeController({
|
|
|
14491
14566
|
normalizedProviderTargets,
|
|
14492
14567
|
persistActiveConversation,
|
|
14493
14568
|
previewMode,
|
|
14494
|
-
|
|
14569
|
+
shouldUseStaticProviderTargets
|
|
14495
14570
|
]
|
|
14496
14571
|
);
|
|
14497
14572
|
const selectConversationFilterTarget = useCallback4(
|
|
14498
14573
|
(input) => {
|
|
14499
|
-
if (!canUseConversationTargetFilter) {
|
|
14500
|
-
setConversationFilter({ kind: "all" });
|
|
14501
|
-
return;
|
|
14502
|
-
}
|
|
14503
14574
|
const nextTarget = resolveAgentGUIProviderTarget({
|
|
14504
14575
|
defaultProviderTargetId,
|
|
14505
|
-
fallbackToLocal: shouldFallbackToLocalProviderTargets,
|
|
14506
14576
|
provider: input.provider,
|
|
14507
14577
|
providerTargetId: input.providerTargetId,
|
|
14508
|
-
providerTargets: normalizedProviderTargets
|
|
14578
|
+
providerTargets: normalizedProviderTargets,
|
|
14579
|
+
useStaticCatalog: shouldUseStaticProviderTargets
|
|
14509
14580
|
});
|
|
14510
14581
|
if (!nextTarget || nextTarget.disabled === true) {
|
|
14511
14582
|
reportAgentGUIConversationFilterTargetUnresolved({
|
|
@@ -14518,29 +14589,32 @@ function useAgentGUINodeController({
|
|
|
14518
14589
|
});
|
|
14519
14590
|
return;
|
|
14520
14591
|
}
|
|
14521
|
-
if (activeConversationIdRef.current === null) {
|
|
14522
|
-
setHomeComposerTargetOverride(nextTarget);
|
|
14523
|
-
}
|
|
14524
14592
|
const agentTargetId = nextTarget.agentTargetId?.trim() ?? "";
|
|
14525
14593
|
const nextFilter = agentTargetId ? { kind: "agentTarget", agentTargetId } : { kind: "all" };
|
|
14526
14594
|
setConversationFilter(nextFilter);
|
|
14595
|
+
if (activeConversationIdRef.current === null) {
|
|
14596
|
+
selectHomeComposerAgentTarget(input);
|
|
14597
|
+
}
|
|
14527
14598
|
},
|
|
14528
14599
|
[
|
|
14529
14600
|
agentActivityRuntime,
|
|
14530
|
-
canUseConversationTargetFilter,
|
|
14531
14601
|
defaultProviderTargetId,
|
|
14532
14602
|
normalizedProviderTargets,
|
|
14533
|
-
|
|
14603
|
+
selectHomeComposerAgentTarget,
|
|
14604
|
+
shouldUseStaticProviderTargets,
|
|
14534
14605
|
workspaceId
|
|
14535
14606
|
]
|
|
14536
14607
|
);
|
|
14537
14608
|
const stableCreateConversation = useStableControllerEventCallback(createConversation);
|
|
14538
|
-
const
|
|
14609
|
+
const stableSelectHomeComposerAgentTarget = useStableControllerEventCallback(
|
|
14610
|
+
selectHomeComposerAgentTarget
|
|
14611
|
+
);
|
|
14539
14612
|
const stableSelectConversationFilterTarget = useStableControllerEventCallback(
|
|
14540
14613
|
selectConversationFilterTarget
|
|
14541
14614
|
);
|
|
14542
14615
|
const stableSelectConversation = useStableControllerEventCallback(selectConversation);
|
|
14543
14616
|
const stableSubmitPrompt = useStableControllerEventCallback(submitPrompt);
|
|
14617
|
+
const stableGoalControl = useStableControllerEventCallback(goalControl);
|
|
14544
14618
|
const stableSubmitGuidancePrompt = useStableControllerEventCallback(submitGuidancePrompt);
|
|
14545
14619
|
const stableShowPromptImagesUnsupported = useStableControllerEventCallback(
|
|
14546
14620
|
showPromptImagesUnsupported
|
|
@@ -14598,10 +14672,11 @@ function useAgentGUINodeController({
|
|
|
14598
14672
|
() => ({
|
|
14599
14673
|
updateConversationFilter: stableUpdateConversationFilter,
|
|
14600
14674
|
selectConversationFilterTarget: stableSelectConversationFilterTarget,
|
|
14601
|
-
|
|
14675
|
+
selectHomeComposerAgentTarget: stableSelectHomeComposerAgentTarget,
|
|
14602
14676
|
createConversation: stableCreateConversation,
|
|
14603
14677
|
selectConversation: stableSelectConversation,
|
|
14604
14678
|
submitPrompt: stableSubmitPrompt,
|
|
14679
|
+
goalControl: stableGoalControl,
|
|
14605
14680
|
submitGuidancePrompt: stableSubmitGuidancePrompt,
|
|
14606
14681
|
loadOlderConversationMessages: stableLoadOlderConversationMessages,
|
|
14607
14682
|
showPromptImagesUnsupported: stableShowPromptImagesUnsupported,
|
|
@@ -14646,13 +14721,14 @@ function useAgentGUINodeController({
|
|
|
14646
14721
|
stableRetryOpenclawGateway,
|
|
14647
14722
|
stableSelectConversation,
|
|
14648
14723
|
stableSelectConversationFilterTarget,
|
|
14649
|
-
|
|
14724
|
+
stableSelectHomeComposerAgentTarget,
|
|
14650
14725
|
stableSendQueuedPromptNext,
|
|
14651
14726
|
stableSubmitGuidancePrompt,
|
|
14652
14727
|
stableShowPromptImagesUnsupported,
|
|
14653
14728
|
stableSubmitApprovalOption,
|
|
14654
14729
|
stableSubmitInteractivePrompt,
|
|
14655
14730
|
stableSubmitPrompt,
|
|
14731
|
+
stableGoalControl,
|
|
14656
14732
|
stableToggleConversationPinned,
|
|
14657
14733
|
stableUpdateConversationFilter,
|
|
14658
14734
|
stableUpdateComposerSettings,
|
|
@@ -14670,7 +14746,6 @@ function useAgentGUINodeController({
|
|
|
14670
14746
|
selectedProviderTarget: effectiveSelectedProviderTarget,
|
|
14671
14747
|
providerTargets: normalizedProviderTargets,
|
|
14672
14748
|
providerTargetsLoading,
|
|
14673
|
-
conversationScope,
|
|
14674
14749
|
conversationFilter,
|
|
14675
14750
|
conversations: visibleConversations,
|
|
14676
14751
|
userProjects,
|
|
@@ -14691,6 +14766,7 @@ function useAgentGUINodeController({
|
|
|
14691
14766
|
isRespondingApproval,
|
|
14692
14767
|
promptImagesSupported,
|
|
14693
14768
|
compactSupported,
|
|
14769
|
+
goalPauseSupported,
|
|
14694
14770
|
usage,
|
|
14695
14771
|
backgroundAgentCount,
|
|
14696
14772
|
listError,
|
|
@@ -14735,7 +14811,6 @@ function useAgentGUINodeController({
|
|
|
14735
14811
|
canSubmit,
|
|
14736
14812
|
canQueueWhileBusy,
|
|
14737
14813
|
conversation,
|
|
14738
|
-
conversationScope,
|
|
14739
14814
|
conversationFilter,
|
|
14740
14815
|
conversationDetail,
|
|
14741
14816
|
controllerActions,
|
|
@@ -14751,6 +14826,7 @@ function useAgentGUINodeController({
|
|
|
14751
14826
|
openclawGateway,
|
|
14752
14827
|
promptImagesSupported,
|
|
14753
14828
|
compactSupported,
|
|
14829
|
+
goalPauseSupported,
|
|
14754
14830
|
usage,
|
|
14755
14831
|
backgroundAgentCount,
|
|
14756
14832
|
isInterrupting,
|
|
@@ -14967,19 +15043,19 @@ import {
|
|
|
14967
15043
|
Fragment as Fragment7,
|
|
14968
15044
|
memo,
|
|
14969
15045
|
useCallback as useCallback10,
|
|
14970
|
-
useEffect as
|
|
15046
|
+
useEffect as useEffect13,
|
|
14971
15047
|
useLayoutEffect as useLayoutEffect4,
|
|
14972
15048
|
useMemo as useMemo10,
|
|
14973
15049
|
useRef as useRef12,
|
|
14974
|
-
useState as
|
|
15050
|
+
useState as useState12
|
|
14975
15051
|
} from "react";
|
|
14976
15052
|
import { useSnapshot } from "valtio";
|
|
14977
15053
|
import { proxy as proxy2 } from "valtio/vanilla";
|
|
14978
15054
|
import {
|
|
14979
15055
|
ChevronRight as ChevronRight2,
|
|
15056
|
+
ChevronsDown,
|
|
14980
15057
|
ExternalLink,
|
|
14981
15058
|
Info as Info2,
|
|
14982
|
-
LayoutGrid,
|
|
14983
15059
|
Wrench
|
|
14984
15060
|
} from "lucide-react";
|
|
14985
15061
|
|
|
@@ -15051,6 +15127,10 @@ import {
|
|
|
15051
15127
|
TooltipContent as TooltipContent3,
|
|
15052
15128
|
TooltipProvider as TooltipProvider2,
|
|
15053
15129
|
TooltipTrigger as TooltipTrigger3,
|
|
15130
|
+
Select as Select3,
|
|
15131
|
+
SelectContent as SelectContent3,
|
|
15132
|
+
SelectItem as SelectItem3,
|
|
15133
|
+
SelectTrigger as SelectTrigger3,
|
|
15054
15134
|
NewWorkspaceLinedIcon as NewWorkspaceLinedIcon2,
|
|
15055
15135
|
ConfirmationDialog,
|
|
15056
15136
|
toastVariants,
|
|
@@ -15730,7 +15810,9 @@ var styles2 = {
|
|
|
15730
15810
|
chromeActions: "agent-gui-chrome__actions",
|
|
15731
15811
|
chromeMetaRow: "agent-gui-chrome__meta-row",
|
|
15732
15812
|
chromeDangerGhostButton: "agent-gui-chrome__danger-ghost-button",
|
|
15733
|
-
chromeGoalHint: "agent-gui-chrome__goal-hint"
|
|
15813
|
+
chromeGoalHint: "agent-gui-chrome__goal-hint",
|
|
15814
|
+
chromeGoalActions: "agent-gui-chrome__goal-actions",
|
|
15815
|
+
chromeGoalEditInput: "agent-gui-chrome__goal-edit-input"
|
|
15734
15816
|
};
|
|
15735
15817
|
var AgentGUIChrome_styles_default = styles2;
|
|
15736
15818
|
|
|
@@ -15931,8 +16013,15 @@ function AgentSessionChrome({
|
|
|
15931
16013
|
}
|
|
15932
16014
|
|
|
15933
16015
|
// agent-gui/agentGuiNode/AgentGoalBanner.tsx
|
|
15934
|
-
import {
|
|
16016
|
+
import { useEffect as useEffect6, useState as useState5 } from "react";
|
|
16017
|
+
import { CirclePause, CirclePlay, Pencil, Target, Trash2 } from "lucide-react";
|
|
15935
16018
|
import { jsx as jsx20, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
16019
|
+
var RESUMABLE_GOAL_STATUSES = /* @__PURE__ */ new Set([
|
|
16020
|
+
"paused",
|
|
16021
|
+
"blocked",
|
|
16022
|
+
"usagelimited",
|
|
16023
|
+
"budgetlimited"
|
|
16024
|
+
]);
|
|
15936
16025
|
var TERMINAL_GOAL_STATUSES = /* @__PURE__ */ new Set(["complete", "completed", "done"]);
|
|
15937
16026
|
function normalizeGoalStatus(status) {
|
|
15938
16027
|
return (status ?? "").trim().toLowerCase();
|
|
@@ -15943,49 +16032,98 @@ function isGoalBannerVisible(objective, status) {
|
|
|
15943
16032
|
}
|
|
15944
16033
|
return !TERMINAL_GOAL_STATUSES.has(normalizeGoalStatus(status));
|
|
15945
16034
|
}
|
|
15946
|
-
function
|
|
16035
|
+
function goalStatusTitle(status, labels) {
|
|
15947
16036
|
switch (normalizeGoalStatus(status)) {
|
|
15948
16037
|
case "paused":
|
|
15949
|
-
return labels.
|
|
16038
|
+
return labels.titlePaused;
|
|
15950
16039
|
case "blocked":
|
|
15951
|
-
return labels.
|
|
16040
|
+
return labels.titleBlocked;
|
|
15952
16041
|
case "usagelimited":
|
|
15953
|
-
return labels.
|
|
16042
|
+
return labels.titleUsageLimited;
|
|
15954
16043
|
case "budgetlimited":
|
|
15955
|
-
return labels.
|
|
16044
|
+
return labels.titleBudgetLimited;
|
|
15956
16045
|
case "complete":
|
|
15957
16046
|
case "completed":
|
|
15958
16047
|
case "done":
|
|
15959
|
-
return labels.
|
|
16048
|
+
return labels.titleComplete;
|
|
15960
16049
|
default:
|
|
15961
|
-
return labels.
|
|
16050
|
+
return labels.titleActive;
|
|
16051
|
+
}
|
|
16052
|
+
}
|
|
16053
|
+
function formatGoalElapsed(totalSeconds) {
|
|
16054
|
+
const seconds = Math.max(0, Math.floor(totalSeconds));
|
|
16055
|
+
if (seconds < 60) {
|
|
16056
|
+
return `${seconds}s`;
|
|
16057
|
+
}
|
|
16058
|
+
const minutes = Math.floor(seconds / 60);
|
|
16059
|
+
if (minutes < 60) {
|
|
16060
|
+
const rest = seconds % 60;
|
|
16061
|
+
return rest > 0 ? `${minutes}m ${rest}s` : `${minutes}m`;
|
|
15962
16062
|
}
|
|
16063
|
+
const hours = Math.floor(minutes / 60);
|
|
16064
|
+
const restMinutes = minutes % 60;
|
|
16065
|
+
return restMinutes > 0 ? `${hours}h ${restMinutes}m` : `${hours}h`;
|
|
15963
16066
|
}
|
|
15964
16067
|
function describeGoal(input) {
|
|
15965
|
-
const
|
|
15966
|
-
|
|
16068
|
+
const detailParts = [input.objective.trim()];
|
|
16069
|
+
if (typeof input.elapsedSeconds === "number") {
|
|
16070
|
+
detailParts.push(formatGoalElapsed(input.elapsedSeconds));
|
|
16071
|
+
}
|
|
15967
16072
|
if (typeof input.tokenBudget === "number" && input.tokenBudget > 0) {
|
|
15968
16073
|
const used = typeof input.tokensUsed === "number" && input.tokensUsed >= 0 ? input.tokensUsed : 0;
|
|
15969
16074
|
detailParts.push(input.labels.budgetUsage(used, input.tokenBudget));
|
|
15970
16075
|
}
|
|
15971
|
-
return
|
|
16076
|
+
return detailParts.join(" \xB7 ");
|
|
15972
16077
|
}
|
|
15973
16078
|
function AgentGoalBanner({
|
|
15974
16079
|
objective,
|
|
15975
16080
|
status,
|
|
15976
16081
|
tokenBudget,
|
|
15977
16082
|
tokensUsed,
|
|
15978
|
-
|
|
16083
|
+
timeUsedSeconds,
|
|
16084
|
+
labels,
|
|
16085
|
+
onEditObjective,
|
|
16086
|
+
onPauseGoal,
|
|
16087
|
+
onResumeGoal,
|
|
16088
|
+
onClearGoal
|
|
15979
16089
|
}) {
|
|
15980
16090
|
"use memo";
|
|
16091
|
+
const [editDraft, setEditDraft] = useState5(null);
|
|
16092
|
+
const normalizedStatus = normalizeGoalStatus(status);
|
|
16093
|
+
const isActive = normalizedStatus === "" || normalizedStatus === "active";
|
|
16094
|
+
const serverSeconds = typeof timeUsedSeconds === "number" && timeUsedSeconds >= 0 ? Math.floor(timeUsedSeconds) : null;
|
|
16095
|
+
const [localElapsed, setLocalElapsed] = useState5(0);
|
|
16096
|
+
useEffect6(() => {
|
|
16097
|
+
setLocalElapsed(0);
|
|
16098
|
+
if (!isActive || serverSeconds === null) {
|
|
16099
|
+
return;
|
|
16100
|
+
}
|
|
16101
|
+
const startedAtMs = Date.now();
|
|
16102
|
+
const timer = window.setInterval(() => {
|
|
16103
|
+
setLocalElapsed(Math.floor((Date.now() - startedAtMs) / 1e3));
|
|
16104
|
+
}, 1e3);
|
|
16105
|
+
return () => window.clearInterval(timer);
|
|
16106
|
+
}, [isActive, serverSeconds]);
|
|
16107
|
+
const elapsedSeconds = serverSeconds === null ? null : serverSeconds + (isActive ? localElapsed : 0);
|
|
16108
|
+
const title = goalStatusTitle(status, labels);
|
|
15981
16109
|
const description = describeGoal({
|
|
15982
16110
|
objective,
|
|
15983
|
-
|
|
16111
|
+
elapsedSeconds,
|
|
15984
16112
|
tokenBudget,
|
|
15985
16113
|
tokensUsed,
|
|
15986
16114
|
labels
|
|
15987
16115
|
});
|
|
15988
|
-
const fullMessage = `${
|
|
16116
|
+
const fullMessage = `${title} ${description}`;
|
|
16117
|
+
const showPause = onPauseGoal !== void 0 && isActive;
|
|
16118
|
+
const showResume = onResumeGoal !== void 0 && RESUMABLE_GOAL_STATUSES.has(normalizedStatus);
|
|
16119
|
+
const hasActions = onEditObjective !== void 0 || showPause || showResume || onClearGoal !== void 0;
|
|
16120
|
+
const commitEdit = () => {
|
|
16121
|
+
const next = (editDraft ?? "").trim();
|
|
16122
|
+
setEditDraft(null);
|
|
16123
|
+
if (next !== "" && next !== objective.trim()) {
|
|
16124
|
+
onEditObjective?.(next);
|
|
16125
|
+
}
|
|
16126
|
+
};
|
|
15989
16127
|
return /* @__PURE__ */ jsx20("div", { className: AgentGUIChrome_styles_default.sessionChrome, children: /* @__PURE__ */ jsx20(
|
|
15990
16128
|
"section",
|
|
15991
16129
|
{
|
|
@@ -15995,19 +16133,91 @@ function AgentGoalBanner({
|
|
|
15995
16133
|
children: /* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.chromeMetaRow, children: [
|
|
15996
16134
|
/* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.chromeMessageSlot, children: [
|
|
15997
16135
|
/* @__PURE__ */ jsx20("span", { className: AgentGUIChrome_styles_default.chromeIcon, children: /* @__PURE__ */ jsx20(Target, { "aria-hidden": true, className: "size-3.5" }) }),
|
|
15998
|
-
/* @__PURE__ */
|
|
16136
|
+
editDraft !== null ? /* @__PURE__ */ jsx20(
|
|
16137
|
+
"input",
|
|
16138
|
+
{
|
|
16139
|
+
className: AgentGUIChrome_styles_default.chromeGoalEditInput,
|
|
16140
|
+
value: editDraft,
|
|
16141
|
+
autoFocus: true,
|
|
16142
|
+
"aria-label": labels.editAction,
|
|
16143
|
+
"data-testid": "agent-gui-goal-banner-edit-input",
|
|
16144
|
+
onChange: (event) => setEditDraft(event.target.value),
|
|
16145
|
+
onKeyDown: (event) => {
|
|
16146
|
+
if (event.key === "Enter") {
|
|
16147
|
+
event.preventDefault();
|
|
16148
|
+
commitEdit();
|
|
16149
|
+
} else if (event.key === "Escape") {
|
|
16150
|
+
event.preventDefault();
|
|
16151
|
+
setEditDraft(null);
|
|
16152
|
+
}
|
|
16153
|
+
},
|
|
16154
|
+
onBlur: () => setEditDraft(null)
|
|
16155
|
+
}
|
|
16156
|
+
) : /* @__PURE__ */ jsxs8(
|
|
15999
16157
|
"p",
|
|
16000
16158
|
{
|
|
16001
16159
|
className: cn(AgentGUIChrome_styles_default.chromeMessage, AgentGUIChrome_styles_default.chromeNoticeMessage),
|
|
16002
16160
|
title: fullMessage,
|
|
16003
16161
|
children: [
|
|
16004
|
-
/* @__PURE__ */ jsx20("span", { className: AgentGUIChrome_styles_default.chromeNoticeTitle, children:
|
|
16005
|
-
/* @__PURE__ */ jsx20(
|
|
16162
|
+
/* @__PURE__ */ jsx20("span", { className: AgentGUIChrome_styles_default.chromeNoticeTitle, children: title }),
|
|
16163
|
+
/* @__PURE__ */ jsx20(
|
|
16164
|
+
"span",
|
|
16165
|
+
{
|
|
16166
|
+
className: AgentGUIChrome_styles_default.chromeNoticeDescription,
|
|
16167
|
+
"data-testid": "agent-gui-goal-banner-description",
|
|
16168
|
+
children: description
|
|
16169
|
+
}
|
|
16170
|
+
)
|
|
16006
16171
|
]
|
|
16007
16172
|
}
|
|
16008
16173
|
)
|
|
16009
16174
|
] }),
|
|
16010
|
-
/* @__PURE__ */
|
|
16175
|
+
hasActions ? /* @__PURE__ */ jsxs8("div", { className: AgentGUIChrome_styles_default.chromeGoalActions, children: [
|
|
16176
|
+
onEditObjective !== void 0 && editDraft === null ? /* @__PURE__ */ jsx20(
|
|
16177
|
+
"button",
|
|
16178
|
+
{
|
|
16179
|
+
type: "button",
|
|
16180
|
+
onClick: () => setEditDraft(objective),
|
|
16181
|
+
title: labels.editAction,
|
|
16182
|
+
"aria-label": labels.editAction,
|
|
16183
|
+
"data-testid": "agent-gui-goal-banner-edit",
|
|
16184
|
+
children: /* @__PURE__ */ jsx20(Pencil, { "aria-hidden": true, className: "size-3.5" })
|
|
16185
|
+
}
|
|
16186
|
+
) : null,
|
|
16187
|
+
showPause ? /* @__PURE__ */ jsx20(
|
|
16188
|
+
"button",
|
|
16189
|
+
{
|
|
16190
|
+
type: "button",
|
|
16191
|
+
onClick: onPauseGoal,
|
|
16192
|
+
title: labels.pauseAction,
|
|
16193
|
+
"aria-label": labels.pauseAction,
|
|
16194
|
+
"data-testid": "agent-gui-goal-banner-pause",
|
|
16195
|
+
children: /* @__PURE__ */ jsx20(CirclePause, { "aria-hidden": true, className: "size-3.5" })
|
|
16196
|
+
}
|
|
16197
|
+
) : null,
|
|
16198
|
+
showResume ? /* @__PURE__ */ jsx20(
|
|
16199
|
+
"button",
|
|
16200
|
+
{
|
|
16201
|
+
type: "button",
|
|
16202
|
+
onClick: onResumeGoal,
|
|
16203
|
+
title: labels.resumeAction,
|
|
16204
|
+
"aria-label": labels.resumeAction,
|
|
16205
|
+
"data-testid": "agent-gui-goal-banner-resume",
|
|
16206
|
+
children: /* @__PURE__ */ jsx20(CirclePlay, { "aria-hidden": true, className: "size-3.5" })
|
|
16207
|
+
}
|
|
16208
|
+
) : null,
|
|
16209
|
+
onClearGoal !== void 0 ? /* @__PURE__ */ jsx20(
|
|
16210
|
+
"button",
|
|
16211
|
+
{
|
|
16212
|
+
type: "button",
|
|
16213
|
+
onClick: onClearGoal,
|
|
16214
|
+
title: labels.clearAction,
|
|
16215
|
+
"aria-label": labels.clearAction,
|
|
16216
|
+
"data-testid": "agent-gui-goal-banner-clear",
|
|
16217
|
+
children: /* @__PURE__ */ jsx20(Trash2, { "aria-hidden": true, className: "size-3.5" })
|
|
16218
|
+
}
|
|
16219
|
+
) : null
|
|
16220
|
+
] }) : /* @__PURE__ */ jsx20(
|
|
16011
16221
|
"span",
|
|
16012
16222
|
{
|
|
16013
16223
|
className: AgentGUIChrome_styles_default.chromeGoalHint,
|
|
@@ -16023,21 +16233,19 @@ function AgentGoalBanner({
|
|
|
16023
16233
|
// agent-gui/agentGuiNode/AgentComposer.tsx
|
|
16024
16234
|
import {
|
|
16025
16235
|
useCallback as useCallback9,
|
|
16026
|
-
useEffect as
|
|
16236
|
+
useEffect as useEffect12,
|
|
16027
16237
|
useLayoutEffect as useLayoutEffect3,
|
|
16028
16238
|
useMemo as useMemo9,
|
|
16029
16239
|
useRef as useRef11,
|
|
16030
|
-
useState as
|
|
16240
|
+
useState as useState11
|
|
16031
16241
|
} from "react";
|
|
16032
16242
|
import { createPortal as createPortal3, flushSync } from "react-dom";
|
|
16033
16243
|
import {
|
|
16034
|
-
AddIcon,
|
|
16035
16244
|
Button as Button3,
|
|
16036
16245
|
Select as Select2,
|
|
16037
16246
|
SelectContent as SelectContent2,
|
|
16038
16247
|
SelectItem as SelectItem2,
|
|
16039
|
-
SelectTrigger as SelectTrigger2
|
|
16040
|
-
SelectValue
|
|
16248
|
+
SelectTrigger as SelectTrigger2
|
|
16041
16249
|
} from "@tutti-os/ui-system";
|
|
16042
16250
|
import { ListChecks as ListChecks2, Target as Target3, X } from "lucide-react";
|
|
16043
16251
|
import {
|
|
@@ -16481,7 +16689,7 @@ function filterUnavailableSlashCommands(commands, input) {
|
|
|
16481
16689
|
}
|
|
16482
16690
|
|
|
16483
16691
|
// agent-gui/agentGuiNode/AgentSlashCommandPalette.tsx
|
|
16484
|
-
import { Fragment as Fragment3, useEffect as
|
|
16692
|
+
import { Fragment as Fragment3, useEffect as useEffect7, useRef as useRef6 } from "react";
|
|
16485
16693
|
import {
|
|
16486
16694
|
Globe,
|
|
16487
16695
|
Info,
|
|
@@ -16525,7 +16733,7 @@ function AgentSlashCommandPalette({
|
|
|
16525
16733
|
}) {
|
|
16526
16734
|
"use memo";
|
|
16527
16735
|
const highlightedOptionRef = useRef6(null);
|
|
16528
|
-
|
|
16736
|
+
useEffect7(() => {
|
|
16529
16737
|
highlightedOptionRef.current?.scrollIntoView({ block: "nearest" });
|
|
16530
16738
|
}, [highlightedIndex]);
|
|
16531
16739
|
if (entries.length === 0) {
|
|
@@ -16683,7 +16891,7 @@ function slashPaletteEntryIcon(entry) {
|
|
|
16683
16891
|
import {
|
|
16684
16892
|
useLayoutEffect,
|
|
16685
16893
|
useRef as useRef7,
|
|
16686
|
-
useState as
|
|
16894
|
+
useState as useState6
|
|
16687
16895
|
} from "react";
|
|
16688
16896
|
import { ChevronRight } from "lucide-react";
|
|
16689
16897
|
|
|
@@ -16691,6 +16899,7 @@ import { ChevronRight } from "lucide-react";
|
|
|
16691
16899
|
var styles3 = {
|
|
16692
16900
|
bottomDock: "agent-gui-node__bottom-dock",
|
|
16693
16901
|
bottomDockPrompt: "agent-gui-node__bottom-dock-prompt",
|
|
16902
|
+
bottomDockScrollToBottom: "agent-gui-node__bottom-dock-scroll-to-bottom",
|
|
16694
16903
|
body: "agent-gui-node__body",
|
|
16695
16904
|
composer: "agent-gui-node__composer",
|
|
16696
16905
|
composerChip: "agent-gui-node__composer-chip",
|
|
@@ -16700,6 +16909,10 @@ var styles3 = {
|
|
|
16700
16909
|
composerFooterRight: "agent-gui-node__composer-footer-right",
|
|
16701
16910
|
composerHero: "agent-gui-node__composer-hero",
|
|
16702
16911
|
composerFloatingPrompt: "agent-gui-node__composer-floating-prompt",
|
|
16912
|
+
composerHandoffIcon: "agent-gui-node__composer-handoff-icon",
|
|
16913
|
+
composerHandoffMenuContent: "agent-gui-node__composer-handoff-menu-content",
|
|
16914
|
+
composerHandoffStaticIcon: "agent-gui-node__composer-handoff-icon-static",
|
|
16915
|
+
composerHandoffTrigger: "agent-gui-node__composer-handoff-trigger",
|
|
16703
16916
|
composerQueuedPromptFloating: "agent-gui-node__composer-floating-prompt--queued",
|
|
16704
16917
|
composerInputGroup: "agent-gui-node__composer-input-group",
|
|
16705
16918
|
composerInputGroupHero: "agent-gui-node__composer-input-group-hero",
|
|
@@ -16745,6 +16958,7 @@ var styles3 = {
|
|
|
16745
16958
|
conversationItem: "agent-gui-node__conversation-item",
|
|
16746
16959
|
conversationList: "agent-gui-node__conversation-list",
|
|
16747
16960
|
conversationMeta: "agent-gui-node__conversation-meta",
|
|
16961
|
+
conversationProviderIcon: "agent-gui-node__conversation-provider-icon",
|
|
16748
16962
|
conversationOpenWindowButton: "agent-gui-node__conversation-open-window-button",
|
|
16749
16963
|
conversationPinButton: "agent-gui-node__conversation-pin-button",
|
|
16750
16964
|
conversationSection: "agent-gui-node__conversation-section",
|
|
@@ -16766,6 +16980,7 @@ var styles3 = {
|
|
|
16766
16980
|
conversationStatusGlyph: "agent-gui-node__conversation-status-glyph",
|
|
16767
16981
|
conversationTime: "agent-gui-node__conversation-time",
|
|
16768
16982
|
conversationTitle: "agent-gui-node__conversation-title",
|
|
16983
|
+
conversationTitleRow: "agent-gui-node__conversation-title-row",
|
|
16769
16984
|
conversationUnreadLamp: "agent-gui-node__conversation-unread-lamp",
|
|
16770
16985
|
detailHeader: "agent-gui-node__detail-header",
|
|
16771
16986
|
detailHeaderPathInfo: "agent-gui-node__detail-header-path-info",
|
|
@@ -16781,7 +16996,11 @@ var styles3 = {
|
|
|
16781
16996
|
emptyHero: "agent-gui-node__empty-hero",
|
|
16782
16997
|
emptyHeroBody: "agent-gui-node__empty-hero-body",
|
|
16783
16998
|
emptyHeroIconEffect: "agent-gui-node__empty-hero-icon-effect",
|
|
16999
|
+
emptyHeroIconRail: "agent-gui-node__empty-hero-icon-rail",
|
|
17000
|
+
emptyHeroIconRailItem: "agent-gui-node__empty-hero-icon-rail-item",
|
|
17001
|
+
emptyHeroIconRailScroller: "agent-gui-node__empty-hero-icon-rail-scroller",
|
|
16784
17002
|
emptyHeroProvider: "agent-gui-node__empty-hero-provider",
|
|
17003
|
+
emptyHeroProviderSelect: "agent-gui-node__empty-hero-provider-select",
|
|
16785
17004
|
emptyHeroTitle: "agent-gui-node__empty-hero-title",
|
|
16786
17005
|
emptyProviderGate: "agent-gui-node__empty-provider-gate",
|
|
16787
17006
|
emptyProviderGateAction: "agent-gui-node__empty-provider-gate-action",
|
|
@@ -16805,6 +17024,11 @@ var styles3 = {
|
|
|
16805
17024
|
providerRailAvatar: "agent-gui-node__provider-rail-avatar",
|
|
16806
17025
|
providerRailAvatarIcon: "agent-gui-node__provider-rail-avatar-icon",
|
|
16807
17026
|
providerRailAvatarImage: "agent-gui-node__provider-rail-avatar-image",
|
|
17027
|
+
providerRailLaunchpadIcon: "agent-gui-node__provider-rail-launchpad-icon",
|
|
17028
|
+
emptyHeroLaunchpadIcon: "agent-gui-node__empty-hero-launchpad-icon",
|
|
17029
|
+
providerRailLaunchpadItem: "agent-gui-node__provider-rail-launchpad-item",
|
|
17030
|
+
providerRailPanel: "agent-gui-node__provider-rail-panel",
|
|
17031
|
+
providerRailSeparator: "agent-gui-node__provider-rail-separator",
|
|
16808
17032
|
providerRailTile: "agent-gui-node__provider-rail-tile",
|
|
16809
17033
|
providerRailTileLabel: "agent-gui-node__provider-rail-tile-label",
|
|
16810
17034
|
rail: "agent-gui-node__rail",
|
|
@@ -16860,12 +17084,12 @@ function AgentQueuedPromptPanel({
|
|
|
16860
17084
|
workspaceAppIcons = EMPTY_WORKSPACE_APP_ICONS
|
|
16861
17085
|
}) {
|
|
16862
17086
|
"use memo";
|
|
16863
|
-
const [isExpanded, setIsExpanded] =
|
|
17087
|
+
const [isExpanded, setIsExpanded] = useState6(false);
|
|
16864
17088
|
const singlePromptTextRef = useRef7(null);
|
|
16865
17089
|
const queuedPromptListRef = useRef7(null);
|
|
16866
17090
|
const pointerHandledEditPromptIdRef = useRef7(null);
|
|
16867
|
-
const [isSinglePromptOverflowing, setIsSinglePromptOverflowing] =
|
|
16868
|
-
const [expandedListMaxHeightPx, setExpandedListMaxHeightPx] =
|
|
17091
|
+
const [isSinglePromptOverflowing, setIsSinglePromptOverflowing] = useState6(false);
|
|
17092
|
+
const [expandedListMaxHeightPx, setExpandedListMaxHeightPx] = useState6(280);
|
|
16869
17093
|
const singlePromptHasImages = queuedPrompts.length === 1 && queuedPromptImages(queuedPrompts[0]).length > 0;
|
|
16870
17094
|
const canExpand = queuedPrompts.length > 1 || singlePromptHasImages || isSinglePromptOverflowing;
|
|
16871
17095
|
const panelStyle = {
|
|
@@ -17104,9 +17328,9 @@ function AgentQueuedPromptPanel({
|
|
|
17104
17328
|
// agent-gui/agentGuiNode/AgentComposerSettingsMenus.tsx
|
|
17105
17329
|
import {
|
|
17106
17330
|
cloneElement,
|
|
17107
|
-
useEffect as
|
|
17331
|
+
useEffect as useEffect8,
|
|
17108
17332
|
useMemo as useMemo5,
|
|
17109
|
-
useState as
|
|
17333
|
+
useState as useState7
|
|
17110
17334
|
} from "react";
|
|
17111
17335
|
import { ChevronDown, ZapIcon as ZapIcon2 } from "lucide-react";
|
|
17112
17336
|
import {
|
|
@@ -17579,7 +17803,7 @@ function AgentPermissionModeDropdown({
|
|
|
17579
17803
|
onSettingsChange
|
|
17580
17804
|
}) {
|
|
17581
17805
|
"use memo";
|
|
17582
|
-
const [isSelectOpen, setIsSelectOpen] =
|
|
17806
|
+
const [isSelectOpen, setIsSelectOpen] = useState7(false);
|
|
17583
17807
|
const isLoading = composerSettings.isSettingsLoading || composerSettings.isModelOptionsLoading === true;
|
|
17584
17808
|
const availableOptions = composerSettings.availablePermissionModes ?? [];
|
|
17585
17809
|
const selectedValue = composerSettings.selectedPermissionModeValue ?? composerSettings.draftSettings.permissionModeId;
|
|
@@ -17718,7 +17942,7 @@ function AgentProjectMissingStatusProbe({
|
|
|
17718
17942
|
"use memo";
|
|
17719
17943
|
const agentHostApi = useAgentHostApi();
|
|
17720
17944
|
const selectedPath = composerSettings.selectedProjectPath?.trim() ?? "";
|
|
17721
|
-
|
|
17945
|
+
useEffect8(() => {
|
|
17722
17946
|
let canceled = false;
|
|
17723
17947
|
const userProjects = agentHostApi.userProjects;
|
|
17724
17948
|
if (!userProjects || !composerSettings.projectLocked || !selectedPath) {
|
|
@@ -17809,7 +18033,7 @@ function AgentModelReasoningDropdown({
|
|
|
17809
18033
|
onSettingsChange
|
|
17810
18034
|
}) {
|
|
17811
18035
|
"use memo";
|
|
17812
|
-
const [menuOpen, setMenuOpen] =
|
|
18036
|
+
const [menuOpen, setMenuOpen] = useState7(false);
|
|
17813
18037
|
const menu = buildComposerModelMenuModel(composerSettings, labels);
|
|
17814
18038
|
const menuDisabled = disabled || menu.disabled;
|
|
17815
18039
|
const isModelLoading = composerSettings.isModelOptionsLoading || composerSettings.isSettingsLoading;
|
|
@@ -18064,7 +18288,7 @@ function ComposerModelOptionTooltip({
|
|
|
18064
18288
|
"data-agent-model-option-tooltip": "true",
|
|
18065
18289
|
children: [
|
|
18066
18290
|
/* @__PURE__ */ jsx23("span", { className: "block text-[15px] font-semibold leading-[1.2]", children: option.tooltip.title }),
|
|
18067
|
-
option.tooltip.description ? /* @__PURE__ */ jsx23("span", { className: "mt-1.5 block text-[13px] leading-[1.35]", children: option.tooltip.description }) : null,
|
|
18291
|
+
option.tooltip.description ? /* @__PURE__ */ jsx23("span", { className: "mt-1.5 block text-[13px] leading-[1.35] text-[var(--text-tertiary)]", children: option.tooltip.description }) : null,
|
|
18068
18292
|
option.tooltip.contextWindow ? /* @__PURE__ */ jsx23("span", { className: "mt-4 block", children: option.tooltip.contextWindow }) : null,
|
|
18069
18293
|
option.tooltip.version ? /* @__PURE__ */ jsx23("span", { className: "mt-4 block italic", children: option.tooltip.version }) : null
|
|
18070
18294
|
]
|
|
@@ -18077,11 +18301,11 @@ function ComposerModelOptionTooltip({
|
|
|
18077
18301
|
import {
|
|
18078
18302
|
forwardRef as forwardRef3,
|
|
18079
18303
|
useCallback as useCallback6,
|
|
18080
|
-
useEffect as
|
|
18304
|
+
useEffect as useEffect9,
|
|
18081
18305
|
useImperativeHandle as useImperativeHandle2,
|
|
18082
18306
|
useMemo as useMemo6,
|
|
18083
18307
|
useRef as useRef8,
|
|
18084
|
-
useState as
|
|
18308
|
+
useState as useState8
|
|
18085
18309
|
} from "react";
|
|
18086
18310
|
import { createPortal } from "react-dom";
|
|
18087
18311
|
import { Extension } from "@tiptap/core";
|
|
@@ -18677,7 +18901,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
|
|
|
18677
18901
|
const availableCapabilitiesRef = useRef8(availableCapabilities);
|
|
18678
18902
|
const suppressPastedAtSuggestionRef = useRef8(false);
|
|
18679
18903
|
const scrollFrameRef = useRef8(null);
|
|
18680
|
-
const [contextMenu, setContextMenu] =
|
|
18904
|
+
const [contextMenu, setContextMenu] = useState8(null);
|
|
18681
18905
|
const closeContextMenu = useCallback6(() => {
|
|
18682
18906
|
setContextMenu(null);
|
|
18683
18907
|
}, []);
|
|
@@ -19150,10 +19374,10 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
|
|
|
19150
19374
|
}
|
|
19151
19375
|
onSubmitRef.current();
|
|
19152
19376
|
};
|
|
19153
|
-
|
|
19377
|
+
useEffect9(() => {
|
|
19154
19378
|
editorRef.current = editor;
|
|
19155
19379
|
}, [editor]);
|
|
19156
|
-
|
|
19380
|
+
useEffect9(
|
|
19157
19381
|
() => () => {
|
|
19158
19382
|
if (scrollFrameRef.current !== null && typeof window.cancelAnimationFrame === "function") {
|
|
19159
19383
|
window.cancelAnimationFrame(scrollFrameRef.current);
|
|
@@ -19161,7 +19385,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
|
|
|
19161
19385
|
},
|
|
19162
19386
|
[]
|
|
19163
19387
|
);
|
|
19164
|
-
|
|
19388
|
+
useEffect9(() => {
|
|
19165
19389
|
if (!contextMenu) {
|
|
19166
19390
|
return;
|
|
19167
19391
|
}
|
|
@@ -19267,7 +19491,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
|
|
|
19267
19491
|
}),
|
|
19268
19492
|
[]
|
|
19269
19493
|
);
|
|
19270
|
-
|
|
19494
|
+
useEffect9(() => {
|
|
19271
19495
|
if (!editor) {
|
|
19272
19496
|
return;
|
|
19273
19497
|
}
|
|
@@ -19278,7 +19502,7 @@ var AgentRichTextEditor = forwardRef3(function AgentRichTextEditor2({
|
|
|
19278
19502
|
editor.state.tr.setMeta("agentRichTextPlaceholder", placeholder)
|
|
19279
19503
|
);
|
|
19280
19504
|
}, [disabled, editor, placeholder]);
|
|
19281
|
-
|
|
19505
|
+
useEffect9(() => {
|
|
19282
19506
|
if (!editor || editor.isDestroyed) {
|
|
19283
19507
|
return;
|
|
19284
19508
|
}
|
|
@@ -19520,7 +19744,7 @@ function AgentSlashStatusPanel({
|
|
|
19520
19744
|
}
|
|
19521
19745
|
|
|
19522
19746
|
// agent-gui/agentGuiNode/AgentReviewPickerPanel.tsx
|
|
19523
|
-
import { useCallback as useCallback7, useEffect as
|
|
19747
|
+
import { useCallback as useCallback7, useEffect as useEffect10, useMemo as useMemo7, useRef as useRef9, useState as useState9 } from "react";
|
|
19524
19748
|
import { menuItemClassName } from "@tutti-os/ui-system";
|
|
19525
19749
|
|
|
19526
19750
|
// agent-gui/agentGuiNode/AgentReviewBranchController.ts
|
|
@@ -19635,21 +19859,21 @@ function AgentReviewPickerPanel({
|
|
|
19635
19859
|
onSubmitReview,
|
|
19636
19860
|
onClose
|
|
19637
19861
|
}) {
|
|
19638
|
-
const [stage, setStage] =
|
|
19639
|
-
const [query, setQuery] =
|
|
19640
|
-
const [highlightedIndex, setHighlightedIndex] =
|
|
19862
|
+
const [stage, setStage] = useState9("root");
|
|
19863
|
+
const [query, setQuery] = useState9("");
|
|
19864
|
+
const [highlightedIndex, setHighlightedIndex] = useState9(0);
|
|
19641
19865
|
const searchInputRef = useRef9(null);
|
|
19642
19866
|
const highlightedOptionRef = useRef9(null);
|
|
19643
19867
|
const reviewBranchControllerRef = useRef9(
|
|
19644
19868
|
null
|
|
19645
19869
|
);
|
|
19646
|
-
const [branchState, setBranchState] =
|
|
19870
|
+
const [branchState, setBranchState] = useState9({
|
|
19647
19871
|
status: "idle",
|
|
19648
19872
|
branches: [],
|
|
19649
19873
|
currentBranch: null,
|
|
19650
19874
|
error: null
|
|
19651
19875
|
});
|
|
19652
|
-
|
|
19876
|
+
useEffect10(() => {
|
|
19653
19877
|
const controller = new AgentReviewBranchController();
|
|
19654
19878
|
reviewBranchControllerRef.current = controller;
|
|
19655
19879
|
const unsubscribe = controller.subscribe(setBranchState);
|
|
@@ -19659,7 +19883,7 @@ function AgentReviewPickerPanel({
|
|
|
19659
19883
|
reviewBranchControllerRef.current = null;
|
|
19660
19884
|
};
|
|
19661
19885
|
}, []);
|
|
19662
|
-
|
|
19886
|
+
useEffect10(() => {
|
|
19663
19887
|
const controller = reviewBranchControllerRef.current;
|
|
19664
19888
|
if (!controller) {
|
|
19665
19889
|
return;
|
|
@@ -19669,7 +19893,7 @@ function AgentReviewPickerPanel({
|
|
|
19669
19893
|
controller.ensureLoaded();
|
|
19670
19894
|
}
|
|
19671
19895
|
}, [onRequestGitBranches, stage]);
|
|
19672
|
-
|
|
19896
|
+
useEffect10(() => {
|
|
19673
19897
|
searchInputRef.current?.focus();
|
|
19674
19898
|
}, [stage]);
|
|
19675
19899
|
const submit = useCallback7(
|
|
@@ -19759,7 +19983,7 @@ function AgentReviewPickerPanel({
|
|
|
19759
19983
|
goToStage
|
|
19760
19984
|
]);
|
|
19761
19985
|
const safeHighlightedIndex = entries.length === 0 ? -1 : Math.min(highlightedIndex, entries.length - 1);
|
|
19762
|
-
|
|
19986
|
+
useEffect10(() => {
|
|
19763
19987
|
highlightedOptionRef.current?.scrollIntoView({ block: "nearest" });
|
|
19764
19988
|
}, [safeHighlightedIndex]);
|
|
19765
19989
|
const searchPlaceholder = stage === "base" ? labels.branchPlaceholder : stage === "commit" ? labels.commitPlaceholder : stage === "custom" ? labels.customPlaceholder : labels.searchPlaceholder;
|
|
@@ -19882,11 +20106,11 @@ function AgentReviewPickerPanel({
|
|
|
19882
20106
|
import {
|
|
19883
20107
|
forwardRef as forwardRef4,
|
|
19884
20108
|
useCallback as useCallback8,
|
|
19885
|
-
useEffect as
|
|
20109
|
+
useEffect as useEffect11,
|
|
19886
20110
|
useLayoutEffect as useLayoutEffect2,
|
|
19887
20111
|
useMemo as useMemo8,
|
|
19888
20112
|
useRef as useRef10,
|
|
19889
|
-
useState as
|
|
20113
|
+
useState as useState10
|
|
19890
20114
|
} from "react";
|
|
19891
20115
|
import { createPortal as createPortal2 } from "react-dom";
|
|
19892
20116
|
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
@@ -19963,7 +20187,7 @@ function useComposerAnchoredMenuFrame({
|
|
|
19963
20187
|
maxHeight,
|
|
19964
20188
|
open
|
|
19965
20189
|
}) {
|
|
19966
|
-
const [frame, setFrame] =
|
|
20190
|
+
const [frame, setFrame] = useState10(null);
|
|
19967
20191
|
const syncFrame = useCallback8(() => {
|
|
19968
20192
|
const anchor = anchorRef.current;
|
|
19969
20193
|
if (!anchor || typeof window === "undefined") {
|
|
@@ -20035,7 +20259,7 @@ var ComposerFloatingMenuSurface = forwardRef4(function ComposerFloatingMenuSurfa
|
|
|
20035
20259
|
},
|
|
20036
20260
|
[forwardedRef, surfaceRef]
|
|
20037
20261
|
);
|
|
20038
|
-
|
|
20262
|
+
useEffect11(() => {
|
|
20039
20263
|
if (!open || !onDismiss) {
|
|
20040
20264
|
return;
|
|
20041
20265
|
}
|
|
@@ -20125,8 +20349,14 @@ var ComposerFloatingMenuSurface = forwardRef4(function ComposerFloatingMenuSurfa
|
|
|
20125
20349
|
);
|
|
20126
20350
|
});
|
|
20127
20351
|
|
|
20128
|
-
// app/renderer/assets/icons
|
|
20129
|
-
var
|
|
20352
|
+
// app/renderer/assets/icons/add-lined-bold.svg
|
|
20353
|
+
var add_lined_bold_default = "./add-lined-bold-5QPUDZCU.svg";
|
|
20354
|
+
|
|
20355
|
+
// app/renderer/assets/icons/@-bold-lined.svg
|
|
20356
|
+
var bold_lined_default = "./@-bold-lined-BLLFKBFI.svg";
|
|
20357
|
+
|
|
20358
|
+
// app/renderer/assets/icons/handoff-lined.svg
|
|
20359
|
+
var handoff_lined_default = "./handoff-lined-4WQUBVG3.svg";
|
|
20130
20360
|
|
|
20131
20361
|
// agent-gui/agentGuiNode/AgentComposer.tsx
|
|
20132
20362
|
import { jsx as jsx28, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
@@ -20168,7 +20398,7 @@ function AgentUsageChip({
|
|
|
20168
20398
|
compactDisabled
|
|
20169
20399
|
}) {
|
|
20170
20400
|
"use memo";
|
|
20171
|
-
const [usagePopoverOpen, setUsagePopoverOpen] =
|
|
20401
|
+
const [usagePopoverOpen, setUsagePopoverOpen] = useState11(false);
|
|
20172
20402
|
const usagePopoverHoverTimerRef = useRef11(null);
|
|
20173
20403
|
const usagePopoverContentRef = useRef11(null);
|
|
20174
20404
|
const clampedPercent = Math.max(0, Math.min(100, percentUsed));
|
|
@@ -20241,7 +20471,7 @@ function AgentUsageChip({
|
|
|
20241
20471
|
closeUsagePopover
|
|
20242
20472
|
]
|
|
20243
20473
|
);
|
|
20244
|
-
|
|
20474
|
+
useEffect12(
|
|
20245
20475
|
() => () => {
|
|
20246
20476
|
clearUsagePopoverHoverTimer();
|
|
20247
20477
|
clearUsagePopoverCloseTimer();
|
|
@@ -20364,6 +20594,12 @@ var MENTION_PALETTE_DISMISS_INTERACTION_SELECTOR = [
|
|
|
20364
20594
|
".workbench-window__resize-handle",
|
|
20365
20595
|
"#agent-gui-conversation-rail-resize"
|
|
20366
20596
|
].join(",");
|
|
20597
|
+
function resolveComposerProviderIconUrl(provider) {
|
|
20598
|
+
return MANAGED_AGENT_ICON_URLS[normalizeManagedAgentProvider(provider)] ?? MANAGED_AGENT_ICON_FALLBACK_URL;
|
|
20599
|
+
}
|
|
20600
|
+
function resolveComposerProviderTargetIconUrl(target) {
|
|
20601
|
+
return target.iconUrl ?? resolveComposerProviderIconUrl(target.provider);
|
|
20602
|
+
}
|
|
20367
20603
|
function resolveMentionPalettePortalTarget(anchor) {
|
|
20368
20604
|
return anchor.closest('[data-slot="viewport-menu-boundary"]') ?? anchor.closest(
|
|
20369
20605
|
"[data-workbench-window-id], [data-workspace-node-window-root='true']"
|
|
@@ -20393,21 +20629,53 @@ function hasInlineOverflow(element) {
|
|
|
20393
20629
|
}
|
|
20394
20630
|
return element.scrollWidth > element.clientWidth + 1;
|
|
20395
20631
|
}
|
|
20396
|
-
function
|
|
20397
|
-
|
|
20398
|
-
|
|
20632
|
+
function AgentComposerMaskIcon({
|
|
20633
|
+
iconUrl,
|
|
20634
|
+
marker
|
|
20635
|
+
}) {
|
|
20636
|
+
return /* @__PURE__ */ jsx28(
|
|
20637
|
+
"span",
|
|
20638
|
+
{
|
|
20639
|
+
"aria-hidden": true,
|
|
20640
|
+
className: "inline-block size-3.5 bg-[var(--text-secondary)] transition-colors group-hover:bg-[var(--text-primary)] group-focus-visible:bg-[var(--text-primary)]",
|
|
20641
|
+
"data-agent-reference-add-icon": marker === "reference-add" ? "true" : void 0,
|
|
20642
|
+
style: {
|
|
20643
|
+
WebkitMaskImage: `url("${iconUrl}")`,
|
|
20644
|
+
WebkitMaskPosition: "center",
|
|
20645
|
+
WebkitMaskRepeat: "no-repeat",
|
|
20646
|
+
WebkitMaskSize: "contain",
|
|
20647
|
+
maskImage: `url("${iconUrl}")`,
|
|
20648
|
+
maskPosition: "center",
|
|
20649
|
+
maskRepeat: "no-repeat",
|
|
20650
|
+
maskSize: "contain"
|
|
20651
|
+
}
|
|
20652
|
+
}
|
|
20653
|
+
);
|
|
20399
20654
|
}
|
|
20400
|
-
|
|
20401
|
-
|
|
20655
|
+
var HANDOFF_SELECT_IDLE_VALUE = "__agent-handoff-idle__";
|
|
20656
|
+
function AgentComposerHandoffIcon() {
|
|
20657
|
+
return /* @__PURE__ */ jsx28("span", { "aria-hidden": "true", className: AgentGUINode_styles_default.composerHandoffIcon, children: /* @__PURE__ */ jsx28(
|
|
20658
|
+
"span",
|
|
20659
|
+
{
|
|
20660
|
+
className: AgentGUINode_styles_default.composerHandoffStaticIcon,
|
|
20661
|
+
style: {
|
|
20662
|
+
WebkitMaskImage: `url("${handoff_lined_default}")`,
|
|
20663
|
+
WebkitMaskPosition: "center",
|
|
20664
|
+
WebkitMaskRepeat: "no-repeat",
|
|
20665
|
+
WebkitMaskSize: "contain",
|
|
20666
|
+
maskImage: `url("${handoff_lined_default}")`,
|
|
20667
|
+
maskPosition: "center",
|
|
20668
|
+
maskRepeat: "no-repeat",
|
|
20669
|
+
maskSize: "contain"
|
|
20670
|
+
}
|
|
20671
|
+
}
|
|
20672
|
+
) });
|
|
20402
20673
|
}
|
|
20403
20674
|
function AgentComposer({
|
|
20404
20675
|
workspaceId,
|
|
20405
20676
|
workspacePath,
|
|
20406
20677
|
currentUserId,
|
|
20407
20678
|
provider,
|
|
20408
|
-
selectedProviderTarget = null,
|
|
20409
|
-
providerTargets = [],
|
|
20410
|
-
providerSelectReadonly = false,
|
|
20411
20679
|
slashStatus = null,
|
|
20412
20680
|
usage = null,
|
|
20413
20681
|
draftContent,
|
|
@@ -20417,12 +20685,18 @@ function AgentComposer({
|
|
|
20417
20685
|
availableSkills = EMPTY_PROVIDER_SKILLS,
|
|
20418
20686
|
disabled,
|
|
20419
20687
|
disabledReason,
|
|
20688
|
+
hasActiveConversation = true,
|
|
20420
20689
|
submitDisabled,
|
|
20421
20690
|
placeholder,
|
|
20422
20691
|
composerSettings,
|
|
20423
20692
|
queuedPrompts,
|
|
20424
20693
|
drainingQueuedPromptId,
|
|
20425
20694
|
workspaceAppIcons = EMPTY_WORKSPACE_APP_ICONS2,
|
|
20695
|
+
selectedProviderTarget = null,
|
|
20696
|
+
providerTargets = [],
|
|
20697
|
+
providerSelectReadonly = false,
|
|
20698
|
+
onProviderSelect,
|
|
20699
|
+
onHandoffConversation,
|
|
20426
20700
|
canQueueWhileBusy,
|
|
20427
20701
|
showStopButton,
|
|
20428
20702
|
activePrompt,
|
|
@@ -20439,13 +20713,15 @@ function AgentComposer({
|
|
|
20439
20713
|
promptImagesSupported = true,
|
|
20440
20714
|
composerFocusRequestSequence = null,
|
|
20441
20715
|
layoutMode = "dock",
|
|
20716
|
+
providerSelectLabel = "",
|
|
20717
|
+
handoffLabel,
|
|
20718
|
+
handoffMenuLabel,
|
|
20442
20719
|
labels,
|
|
20443
20720
|
workspaceUserProjectI18n,
|
|
20444
20721
|
onDraftContentChange,
|
|
20445
20722
|
onProjectPathChange = () => {
|
|
20446
20723
|
},
|
|
20447
20724
|
onSettingsChange,
|
|
20448
|
-
onProviderSelect,
|
|
20449
20725
|
capabilityMenuState,
|
|
20450
20726
|
onSubmit,
|
|
20451
20727
|
onSubmitGuidance,
|
|
@@ -20478,28 +20754,28 @@ function AgentComposer({
|
|
|
20478
20754
|
const promptFilesSupported = Boolean(
|
|
20479
20755
|
resolveDroppedFileReferences && promptFileUploadSupported
|
|
20480
20756
|
);
|
|
20481
|
-
const [isPaletteOpen, setIsPaletteOpen] =
|
|
20482
|
-
const [isReviewPickerOpen, setIsReviewPickerOpen] =
|
|
20483
|
-
const [highlightedIndex, setHighlightedIndex] =
|
|
20484
|
-
const [mentionHighlightedKey, setMentionHighlightedKey] =
|
|
20485
|
-
const [shouldCenterMentionHighlight, setShouldCenterMentionHighlight] =
|
|
20757
|
+
const [isPaletteOpen, setIsPaletteOpen] = useState11(true);
|
|
20758
|
+
const [isReviewPickerOpen, setIsReviewPickerOpen] = useState11(false);
|
|
20759
|
+
const [highlightedIndex, setHighlightedIndex] = useState11(0);
|
|
20760
|
+
const [mentionHighlightedKey, setMentionHighlightedKey] = useState11(null);
|
|
20761
|
+
const [shouldCenterMentionHighlight, setShouldCenterMentionHighlight] = useState11(false);
|
|
20486
20762
|
const [
|
|
20487
20763
|
shouldResetMentionHighlightToFilter,
|
|
20488
20764
|
setShouldResetMentionHighlightToFilter
|
|
20489
|
-
] =
|
|
20490
|
-
const [paletteDraftPrompt, setPaletteDraftPrompt] =
|
|
20765
|
+
] = useState11(false);
|
|
20766
|
+
const [paletteDraftPrompt, setPaletteDraftPrompt] = useState11(
|
|
20491
20767
|
goalDraftObjective ?? draftPrompt
|
|
20492
20768
|
);
|
|
20493
|
-
const [fileMentionSuggestion, setFileMentionSuggestion] =
|
|
20494
|
-
const [isSelectedProjectMissing, setIsSelectedProjectMissing] =
|
|
20495
|
-
const [isSlashStatusPanelOpen, setIsSlashStatusPanelOpen] =
|
|
20769
|
+
const [fileMentionSuggestion, setFileMentionSuggestion] = useState11(null);
|
|
20770
|
+
const [isSelectedProjectMissing, setIsSelectedProjectMissing] = useState11(false);
|
|
20771
|
+
const [isSlashStatusPanelOpen, setIsSlashStatusPanelOpen] = useState11(false);
|
|
20496
20772
|
const slashStatusAgentSessionId = slashStatus?.agentSessionId ?? null;
|
|
20497
20773
|
const previousSlashStatusAgentSessionIdRef = useRef11(
|
|
20498
20774
|
slashStatusAgentSessionId
|
|
20499
20775
|
);
|
|
20500
20776
|
const selectedProjectPath = composerSettings.selectedProjectPath?.trim() ?? "";
|
|
20501
20777
|
const previousSelectedProjectPathRef = useRef11(selectedProjectPath);
|
|
20502
|
-
const [mentionSearchState, setMentionSearchState] =
|
|
20778
|
+
const [mentionSearchState, setMentionSearchState] = useState11({
|
|
20503
20779
|
status: "idle",
|
|
20504
20780
|
query: "",
|
|
20505
20781
|
mode: "browse",
|
|
@@ -20523,15 +20799,15 @@ function AgentComposer({
|
|
|
20523
20799
|
const wasActiveRef = useRef11(isActive);
|
|
20524
20800
|
const lastComposerFocusRequestRef = useRef11(null);
|
|
20525
20801
|
const autoMentionHighlightedKeyRef = useRef11(null);
|
|
20526
|
-
const [isPromptTipOverflowing, setIsPromptTipOverflowing] =
|
|
20527
|
-
const [dockComposerInputHeight, setDockComposerInputHeight] =
|
|
20802
|
+
const [isPromptTipOverflowing, setIsPromptTipOverflowing] = useState11(false);
|
|
20803
|
+
const [dockComposerInputHeight, setDockComposerInputHeight] = useState11(
|
|
20528
20804
|
DOCK_COMPOSER_INPUT_MIN_HEIGHT
|
|
20529
20805
|
);
|
|
20530
|
-
const [dockComposerInputMaxHeight, setDockComposerInputMaxHeight] =
|
|
20806
|
+
const [dockComposerInputMaxHeight, setDockComposerInputMaxHeight] = useState11(
|
|
20531
20807
|
DOCK_COMPOSER_INPUT_MAX_HEIGHT
|
|
20532
20808
|
);
|
|
20533
|
-
const [dockComposerAttachmentHeight, setDockComposerAttachmentHeight] =
|
|
20534
|
-
const [dockComposerTextHeight, setDockComposerTextHeight] =
|
|
20809
|
+
const [dockComposerAttachmentHeight, setDockComposerAttachmentHeight] = useState11(0);
|
|
20810
|
+
const [dockComposerTextHeight, setDockComposerTextHeight] = useState11(
|
|
20535
20811
|
DOCK_COMPOSER_INPUT_MIN_HEIGHT
|
|
20536
20812
|
);
|
|
20537
20813
|
const slashQuery = isGoalModeActive ? null : getPromptStartSlashCommandQuery(paletteDraftPrompt);
|
|
@@ -20691,11 +20967,11 @@ function AgentComposer({
|
|
|
20691
20967
|
highlightedIndex,
|
|
20692
20968
|
slashPaletteEntries.length
|
|
20693
20969
|
);
|
|
20694
|
-
const [mentionPaletteFrame, setMentionPaletteFrame] =
|
|
20695
|
-
|
|
20970
|
+
const [mentionPaletteFrame, setMentionPaletteFrame] = useState11(null);
|
|
20971
|
+
useEffect12(() => {
|
|
20696
20972
|
setHighlightedIndex(0);
|
|
20697
20973
|
}, [skillQueryMatch?.prefix, skillQueryMatch?.query, slashQuery]);
|
|
20698
|
-
|
|
20974
|
+
useEffect12(() => {
|
|
20699
20975
|
const preferredKey = shouldResetMentionHighlightToFilter && mentionSearchState.mode === "browse" ? `category:${mentionSearchState.filter}` : null;
|
|
20700
20976
|
if (shouldResetMentionHighlightToFilter) {
|
|
20701
20977
|
const nextKey = repairMentionPaletteHighlight({
|
|
@@ -20727,7 +21003,7 @@ function AgentComposer({
|
|
|
20727
21003
|
mentionSearchState,
|
|
20728
21004
|
shouldResetMentionHighlightToFilter
|
|
20729
21005
|
]);
|
|
20730
|
-
|
|
21006
|
+
useEffect12(() => {
|
|
20731
21007
|
const controller = new AgentMentionSearchController({
|
|
20732
21008
|
contextMentionProviders
|
|
20733
21009
|
});
|
|
@@ -20739,7 +21015,7 @@ function AgentComposer({
|
|
|
20739
21015
|
mentionControllerRef.current = null;
|
|
20740
21016
|
};
|
|
20741
21017
|
}, [contextMentionProviders]);
|
|
20742
|
-
|
|
21018
|
+
useEffect12(() => {
|
|
20743
21019
|
const isExternalDraftReplacement = draftPromptRef.current !== draftPrompt;
|
|
20744
21020
|
draftPromptRef.current = draftPrompt;
|
|
20745
21021
|
setPaletteDraftPrompt(goalDraftObjective ?? draftPrompt);
|
|
@@ -20751,13 +21027,13 @@ function AgentComposer({
|
|
|
20751
21027
|
});
|
|
20752
21028
|
}
|
|
20753
21029
|
}, [draftPrompt, goalDraftObjective]);
|
|
20754
|
-
|
|
21030
|
+
useEffect12(() => {
|
|
20755
21031
|
draftImagesRef.current = draftImages;
|
|
20756
21032
|
}, [draftImages]);
|
|
20757
|
-
|
|
21033
|
+
useEffect12(() => {
|
|
20758
21034
|
draftFilesRef.current = draftFiles;
|
|
20759
21035
|
}, [draftFiles]);
|
|
20760
|
-
|
|
21036
|
+
useEffect12(() => {
|
|
20761
21037
|
if (previousSlashStatusAgentSessionIdRef.current === slashStatusAgentSessionId) {
|
|
20762
21038
|
return;
|
|
20763
21039
|
}
|
|
@@ -21013,11 +21289,13 @@ function AgentComposer({
|
|
|
21013
21289
|
} else {
|
|
21014
21290
|
onSubmit(submitContent);
|
|
21015
21291
|
}
|
|
21016
|
-
|
|
21017
|
-
|
|
21018
|
-
|
|
21019
|
-
|
|
21020
|
-
|
|
21292
|
+
if (hasActiveConversation) {
|
|
21293
|
+
draftPromptRef.current = "";
|
|
21294
|
+
draftImagesRef.current = [];
|
|
21295
|
+
draftFilesRef.current = [];
|
|
21296
|
+
setPaletteDraftPrompt("");
|
|
21297
|
+
onDraftContentChange(emptyAgentComposerDraft());
|
|
21298
|
+
}
|
|
21021
21299
|
}
|
|
21022
21300
|
);
|
|
21023
21301
|
const submit = useCallback9(
|
|
@@ -21201,7 +21479,10 @@ function AgentComposer({
|
|
|
21201
21479
|
return makeAtPanelKeyDown({
|
|
21202
21480
|
close: closeFileMentionPalette,
|
|
21203
21481
|
commitSelection: () => {
|
|
21204
|
-
createFileMentionPaletteAdapter().commitHighlighted();
|
|
21482
|
+
const result = createFileMentionPaletteAdapter().commitHighlighted();
|
|
21483
|
+
if (result.type === "none") {
|
|
21484
|
+
closeFileMentionPalette();
|
|
21485
|
+
}
|
|
21205
21486
|
},
|
|
21206
21487
|
cycleFilter: cycleFileMentionFilter,
|
|
21207
21488
|
moveSelection: moveFileMentionSelection,
|
|
@@ -21242,7 +21523,7 @@ function AgentComposer({
|
|
|
21242
21523
|
const handlePaletteKeyDown = useStableEventCallback(
|
|
21243
21524
|
(event) => handleFileMentionKeyDown(event) || handleSlashPaletteKeyDown(event) || handleSlashCommandMenuKeyDown(event) || handlePlanModeToggleKeyDown(event)
|
|
21244
21525
|
);
|
|
21245
|
-
|
|
21526
|
+
useEffect12(() => {
|
|
21246
21527
|
if (!showPalette || workspaceReferencePickerOpen) {
|
|
21247
21528
|
return;
|
|
21248
21529
|
}
|
|
@@ -21308,12 +21589,12 @@ function AgentComposer({
|
|
|
21308
21589
|
},
|
|
21309
21590
|
[onLinkAction, workspacePath]
|
|
21310
21591
|
);
|
|
21311
|
-
|
|
21592
|
+
useEffect12(() => {
|
|
21312
21593
|
if (!showFileMentionPalette && shouldCenterMentionHighlight) {
|
|
21313
21594
|
setShouldCenterMentionHighlight(false);
|
|
21314
21595
|
}
|
|
21315
21596
|
}, [shouldCenterMentionHighlight, showFileMentionPalette]);
|
|
21316
|
-
|
|
21597
|
+
useEffect12(() => {
|
|
21317
21598
|
if (!showFileMentionPalette) {
|
|
21318
21599
|
return;
|
|
21319
21600
|
}
|
|
@@ -21559,17 +21840,6 @@ function AgentComposer({
|
|
|
21559
21840
|
}
|
|
21560
21841
|
await applyReferencePickResult(await onRequestWorkspaceReferences());
|
|
21561
21842
|
}, [applyReferencePickResult, onRequestWorkspaceReferences]);
|
|
21562
|
-
const providerSwitchTargets = useMemo9(
|
|
21563
|
-
() => providerTargets.filter((target) => target.disabled !== true),
|
|
21564
|
-
[providerTargets]
|
|
21565
|
-
);
|
|
21566
|
-
const showProviderSelect = providerSwitchTargets.length > 1;
|
|
21567
|
-
const selectedProviderTargetId = selectedProviderTarget?.targetId ?? `local:${provider}`;
|
|
21568
|
-
const selectedProviderSwitchTarget = providerSwitchTargets.find(
|
|
21569
|
-
(target) => target.targetId === selectedProviderTargetId
|
|
21570
|
-
) ?? selectedProviderTarget ?? providerSwitchTargets.find((target) => target.provider === provider) ?? null;
|
|
21571
|
-
const selectedProviderLabel = selectedProviderSwitchTarget?.label ?? provider;
|
|
21572
|
-
const providerSelectDisabled = previewMode || providerSelectReadonly || !onProviderSelect;
|
|
21573
21843
|
const applyDroppedFileReferences = useCallback9(
|
|
21574
21844
|
async (files) => {
|
|
21575
21845
|
if (!promptFilesSupported || !resolveDroppedFileReferences || files.length === 0) {
|
|
@@ -21685,11 +21955,40 @@ function AgentComposer({
|
|
|
21685
21955
|
const mentionPaletteHeightPx = mentionPaletteFrame?.height ?? MENTION_PALETTE_MIN_HEIGHT_PX;
|
|
21686
21956
|
const isHeroLayout = layoutMode === "hero";
|
|
21687
21957
|
const composerClassName = isHeroLayout ? AgentGUINode_styles_default.composerHero : AgentGUINode_styles_default.composer;
|
|
21958
|
+
const providerSwitchTargets = useMemo9(
|
|
21959
|
+
() => providerTargets.filter(Boolean),
|
|
21960
|
+
[providerTargets]
|
|
21961
|
+
);
|
|
21962
|
+
const selectedProviderTargetId = selectedProviderTarget?.targetId ?? `local:${provider}`;
|
|
21963
|
+
const selectedProviderSwitchTarget = providerSwitchTargets.find(
|
|
21964
|
+
(target) => target.targetId === selectedProviderTargetId
|
|
21965
|
+
) ?? providerSwitchTargets.find((target) => target.provider === provider) ?? selectedProviderTarget;
|
|
21966
|
+
const providerMenuTargets = selectedProviderSwitchTarget && !providerSwitchTargets.some(
|
|
21967
|
+
(target) => target.targetId === selectedProviderSwitchTarget.targetId
|
|
21968
|
+
) ? [selectedProviderSwitchTarget, ...providerSwitchTargets] : providerSwitchTargets;
|
|
21969
|
+
const handoffMenuTargets = selectedProviderSwitchTarget ? providerMenuTargets.filter((target) => {
|
|
21970
|
+
if (target.disabled === true) {
|
|
21971
|
+
return false;
|
|
21972
|
+
}
|
|
21973
|
+
if (target.targetId === selectedProviderSwitchTarget.targetId) {
|
|
21974
|
+
return false;
|
|
21975
|
+
}
|
|
21976
|
+
const selectedAgentTargetId = selectedProviderSwitchTarget.agentTargetId ?? selectedProviderSwitchTarget.targetId;
|
|
21977
|
+
const targetAgentTargetId = target.agentTargetId ?? target.targetId;
|
|
21978
|
+
return targetAgentTargetId !== selectedAgentTargetId;
|
|
21979
|
+
}) : providerMenuTargets;
|
|
21980
|
+
const selectedProviderLabel = selectedProviderSwitchTarget?.label ?? selectedProviderTarget?.label ?? provider;
|
|
21981
|
+
const effectiveHandoffLabel = handoffLabel || labels.handoffConversation;
|
|
21982
|
+
const effectiveHandoffMenuLabel = handoffMenuLabel || labels.handoffConversationMenu;
|
|
21688
21983
|
const inputShellClassName = cn(
|
|
21689
21984
|
AgentGUINode_styles_default.composerInputShell,
|
|
21690
21985
|
isHeroLayout && AgentGUINode_styles_default.composerInputShellHero
|
|
21691
21986
|
);
|
|
21692
21987
|
const inputDisabled = isSelectedProjectMissing || disabled && !canQueueWhileBusy;
|
|
21988
|
+
const providerSelectDisabled = providerSelectReadonly || composerControlsHardDisabled || inputDisabled;
|
|
21989
|
+
const handoffDisabled = composerControlsHardDisabled || inputDisabled || !onHandoffConversation || handoffMenuTargets.length === 0;
|
|
21990
|
+
const showProviderSelect = !isHeroLayout && selectedProviderSwitchTarget !== null && providerMenuTargets.length > 0;
|
|
21991
|
+
const showHandoffSelect = showProviderSelect && providerSelectReadonly && !previewMode;
|
|
21693
21992
|
const handleMentionPaletteButton = useCallback9(() => {
|
|
21694
21993
|
if (composerControlsHardDisabled || inputDisabled) {
|
|
21695
21994
|
return;
|
|
@@ -21713,7 +22012,7 @@ function AgentComposer({
|
|
|
21713
22012
|
},
|
|
21714
22013
|
[addDraftImages, scheduleComposerFocus]
|
|
21715
22014
|
);
|
|
21716
|
-
|
|
22015
|
+
useEffect12(() => {
|
|
21717
22016
|
const composer = composerRef.current;
|
|
21718
22017
|
const dropTarget = composer?.closest("#agent-gui-detail") ?? composer;
|
|
21719
22018
|
if (!dropTarget) {
|
|
@@ -21815,7 +22114,7 @@ function AgentComposer({
|
|
|
21815
22114
|
promptImagesSupported,
|
|
21816
22115
|
scheduleComposerFocus
|
|
21817
22116
|
]);
|
|
21818
|
-
|
|
22117
|
+
useEffect12(() => {
|
|
21819
22118
|
if (!isActive) {
|
|
21820
22119
|
wasActiveRef.current = false;
|
|
21821
22120
|
return;
|
|
@@ -21825,7 +22124,7 @@ function AgentComposer({
|
|
|
21825
22124
|
}
|
|
21826
22125
|
wasActiveRef.current = true;
|
|
21827
22126
|
}, [isActive, scheduleComposerFocus]);
|
|
21828
|
-
|
|
22127
|
+
useEffect12(() => {
|
|
21829
22128
|
if (composerFocusRequestSequence === null || composerFocusRequestSequence === lastComposerFocusRequestRef.current) {
|
|
21830
22129
|
return;
|
|
21831
22130
|
}
|
|
@@ -22026,12 +22325,12 @@ function AgentComposer({
|
|
|
22026
22325
|
const sendButtonState = isQueueMode ? "queue" : shouldShowStopButton ? isInterrupting ? "stopping" : "interrupt" : isSendingTurn ? "loading" : "send";
|
|
22027
22326
|
const sendButtonBusy = isSendingTurn && !isQueueMode;
|
|
22028
22327
|
const activePromptRequestId = activePrompt?.requestId ?? null;
|
|
22029
|
-
const [dismissedPromptRequestId, setDismissedPromptRequestId] =
|
|
22328
|
+
const [dismissedPromptRequestId, setDismissedPromptRequestId] = useState11(null);
|
|
22030
22329
|
const visibleActivePrompt = activePrompt && dismissedPromptRequestId !== activePromptRequestId ? activePrompt : null;
|
|
22031
22330
|
const disabledReasonText = disabledReason?.trim() ?? "";
|
|
22032
22331
|
const effectivePlaceholder = disabledReasonText || placeholder;
|
|
22033
22332
|
const visibleDraftFiles = draftFiles;
|
|
22034
|
-
|
|
22333
|
+
useEffect12(() => {
|
|
22035
22334
|
if (previousSelectedProjectPathRef.current === selectedProjectPath) {
|
|
22036
22335
|
return;
|
|
22037
22336
|
}
|
|
@@ -22047,7 +22346,7 @@ function AgentComposer({
|
|
|
22047
22346
|
sessionCwd: selectedProjectPath || null
|
|
22048
22347
|
});
|
|
22049
22348
|
}, [currentUserId, fileMentionSuggestion, selectedProjectPath, workspaceId]);
|
|
22050
|
-
|
|
22349
|
+
useEffect12(() => {
|
|
22051
22350
|
setDismissedPromptRequestId(null);
|
|
22052
22351
|
}, [activePromptRequestId]);
|
|
22053
22352
|
const submitInteractivePromptAndDismiss = useCallback9(
|
|
@@ -22523,14 +22822,13 @@ function AgentComposer({
|
|
|
22523
22822
|
className: cn(
|
|
22524
22823
|
AgentGUINode_styles_default.composerMenuTrigger,
|
|
22525
22824
|
AgentGUINode_styles_default.composerReferenceTrigger,
|
|
22526
|
-
"w-auto justify-center text-[var(--agent-gui-text-secondary)]
|
|
22825
|
+
"group w-auto justify-center text-[var(--agent-gui-text-secondary)]"
|
|
22527
22826
|
),
|
|
22528
22827
|
children: /* @__PURE__ */ jsx28(
|
|
22529
|
-
|
|
22828
|
+
AgentComposerMaskIcon,
|
|
22530
22829
|
{
|
|
22531
|
-
|
|
22532
|
-
|
|
22533
|
-
"data-agent-reference-add-icon": "true"
|
|
22830
|
+
iconUrl: add_lined_bold_default,
|
|
22831
|
+
marker: "reference-add"
|
|
22534
22832
|
}
|
|
22535
22833
|
)
|
|
22536
22834
|
}
|
|
@@ -22558,17 +22856,17 @@ function AgentComposer({
|
|
|
22558
22856
|
{
|
|
22559
22857
|
size: "sm",
|
|
22560
22858
|
"aria-label": labels.referenceWorkspaceFiles,
|
|
22859
|
+
title: labels.referenceWorkspaceFiles,
|
|
22561
22860
|
className: cn(
|
|
22562
22861
|
AgentGUINode_styles_default.composerMenuTrigger,
|
|
22563
22862
|
AgentGUINode_styles_default.composerReferenceTrigger,
|
|
22564
|
-
"w-auto justify-center text-[var(--agent-gui-text-secondary)] [&>svg:last-child]:hidden
|
|
22863
|
+
"group w-auto justify-center text-[var(--agent-gui-text-secondary)] [&>svg:last-child]:hidden"
|
|
22565
22864
|
),
|
|
22566
22865
|
children: /* @__PURE__ */ jsx28(
|
|
22567
|
-
|
|
22866
|
+
AgentComposerMaskIcon,
|
|
22568
22867
|
{
|
|
22569
|
-
|
|
22570
|
-
|
|
22571
|
-
"data-agent-reference-add-icon": "true"
|
|
22868
|
+
iconUrl: add_lined_bold_default,
|
|
22869
|
+
marker: "reference-add"
|
|
22572
22870
|
}
|
|
22573
22871
|
)
|
|
22574
22872
|
}
|
|
@@ -22577,50 +22875,120 @@ function AgentComposer({
|
|
|
22577
22875
|
),
|
|
22578
22876
|
/* @__PURE__ */ jsx28(TooltipContent, { side: "top", children: labels.addContent })
|
|
22579
22877
|
] }) }),
|
|
22580
|
-
/* @__PURE__ */ jsx28(
|
|
22581
|
-
|
|
22582
|
-
|
|
22583
|
-
|
|
22584
|
-
|
|
22585
|
-
|
|
22586
|
-
|
|
22587
|
-
|
|
22588
|
-
|
|
22589
|
-
|
|
22590
|
-
|
|
22591
|
-
|
|
22592
|
-
|
|
22593
|
-
|
|
22594
|
-
|
|
22595
|
-
|
|
22596
|
-
|
|
22597
|
-
|
|
22598
|
-
|
|
22599
|
-
|
|
22600
|
-
|
|
22601
|
-
|
|
22602
|
-
|
|
22603
|
-
|
|
22604
|
-
|
|
22605
|
-
|
|
22606
|
-
|
|
22607
|
-
|
|
22608
|
-
|
|
22609
|
-
|
|
22610
|
-
|
|
22611
|
-
|
|
22612
|
-
|
|
22878
|
+
/* @__PURE__ */ jsx28(TooltipProvider, { delayDuration: 120, children: /* @__PURE__ */ jsxs15(Tooltip, { children: [
|
|
22879
|
+
/* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx28(
|
|
22880
|
+
"button",
|
|
22881
|
+
{
|
|
22882
|
+
type: "button",
|
|
22883
|
+
"aria-label": labels.mentionPalette,
|
|
22884
|
+
disabled: composerControlsHardDisabled || inputDisabled,
|
|
22885
|
+
className: cn(
|
|
22886
|
+
AgentGUINode_styles_default.composerMenuTrigger,
|
|
22887
|
+
AgentGUINode_styles_default.composerReferenceTrigger,
|
|
22888
|
+
"group w-auto justify-center text-[var(--agent-gui-text-secondary)] disabled:pointer-events-none disabled:opacity-50 [&_svg]:shrink-0"
|
|
22889
|
+
),
|
|
22890
|
+
onMouseDown: (event) => event.preventDefault(),
|
|
22891
|
+
onClick: handleMentionPaletteButton,
|
|
22892
|
+
children: /* @__PURE__ */ jsx28(
|
|
22893
|
+
"span",
|
|
22894
|
+
{
|
|
22895
|
+
"aria-hidden": true,
|
|
22896
|
+
className: "inline-block size-3.5 bg-[var(--text-secondary)] transition-colors group-hover:bg-[var(--text-primary)] group-focus-visible:bg-[var(--text-primary)]",
|
|
22897
|
+
style: {
|
|
22898
|
+
WebkitMaskImage: `url("${bold_lined_default}")`,
|
|
22899
|
+
WebkitMaskPosition: "center",
|
|
22900
|
+
WebkitMaskRepeat: "no-repeat",
|
|
22901
|
+
WebkitMaskSize: "contain",
|
|
22902
|
+
maskImage: `url("${bold_lined_default}")`,
|
|
22903
|
+
maskPosition: "center",
|
|
22904
|
+
maskRepeat: "no-repeat",
|
|
22905
|
+
maskSize: "contain"
|
|
22906
|
+
}
|
|
22907
|
+
}
|
|
22908
|
+
)
|
|
22909
|
+
}
|
|
22910
|
+
) }),
|
|
22911
|
+
/* @__PURE__ */ jsx28(TooltipContent, { side: "top", children: labels.mentionPalette })
|
|
22912
|
+
] }) })
|
|
22613
22913
|
] }),
|
|
22614
|
-
|
|
22914
|
+
showHandoffSelect ? /* @__PURE__ */ jsxs15(
|
|
22915
|
+
Select2,
|
|
22916
|
+
{
|
|
22917
|
+
value: HANDOFF_SELECT_IDLE_VALUE,
|
|
22918
|
+
disabled: handoffDisabled,
|
|
22919
|
+
onValueChange: (nextTargetId) => {
|
|
22920
|
+
const target = handoffMenuTargets.find(
|
|
22921
|
+
(candidate) => candidate.targetId === nextTargetId
|
|
22922
|
+
);
|
|
22923
|
+
if (!target || target.disabled === true) {
|
|
22924
|
+
return;
|
|
22925
|
+
}
|
|
22926
|
+
onHandoffConversation?.(target);
|
|
22927
|
+
},
|
|
22928
|
+
children: [
|
|
22929
|
+
/* @__PURE__ */ jsx28(
|
|
22930
|
+
SelectTrigger2,
|
|
22931
|
+
{
|
|
22932
|
+
size: "sm",
|
|
22933
|
+
"aria-label": effectiveHandoffLabel,
|
|
22934
|
+
title: effectiveHandoffLabel,
|
|
22935
|
+
className: cn(
|
|
22936
|
+
AgentGUINode_styles_default.composerMenuTrigger,
|
|
22937
|
+
AgentGUINode_styles_default.composerProviderSelect,
|
|
22938
|
+
AgentGUINode_styles_default.composerHandoffTrigger,
|
|
22939
|
+
"w-auto max-w-[180px] [&>svg:last-child]:hidden"
|
|
22940
|
+
),
|
|
22941
|
+
children: /* @__PURE__ */ jsxs15("span", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
22942
|
+
/* @__PURE__ */ jsx28(AgentComposerHandoffIcon, {}),
|
|
22943
|
+
/* @__PURE__ */ jsx28("span", { className: "min-w-0 truncate", children: effectiveHandoffLabel })
|
|
22944
|
+
] })
|
|
22945
|
+
}
|
|
22946
|
+
),
|
|
22947
|
+
/* @__PURE__ */ jsx28(
|
|
22948
|
+
SelectContent2,
|
|
22949
|
+
{
|
|
22950
|
+
align: "start",
|
|
22951
|
+
className: cn(
|
|
22952
|
+
AgentGUINode_styles_default.composerMenuContent,
|
|
22953
|
+
AgentGUINode_styles_default.composerHandoffMenuContent,
|
|
22954
|
+
"min-w-[190px]"
|
|
22955
|
+
),
|
|
22956
|
+
"aria-label": effectiveHandoffMenuLabel,
|
|
22957
|
+
children: handoffMenuTargets.map((target) => /* @__PURE__ */ jsx28(
|
|
22958
|
+
SelectItem2,
|
|
22959
|
+
{
|
|
22960
|
+
value: target.targetId,
|
|
22961
|
+
className: cn(AgentGUINode_styles_default.composerMenuItem, "gap-2"),
|
|
22962
|
+
disabled: target.disabled === true,
|
|
22963
|
+
children: /* @__PURE__ */ jsxs15("span", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
22964
|
+
/* @__PURE__ */ jsx28(
|
|
22965
|
+
"img",
|
|
22966
|
+
{
|
|
22967
|
+
alt: "",
|
|
22968
|
+
"aria-hidden": "true",
|
|
22969
|
+
className: "size-4 shrink-0 rounded-[4px]",
|
|
22970
|
+
src: resolveComposerProviderTargetIconUrl(target)
|
|
22971
|
+
}
|
|
22972
|
+
),
|
|
22973
|
+
/* @__PURE__ */ jsx28("span", { className: "min-w-0 truncate", children: target.label })
|
|
22974
|
+
] })
|
|
22975
|
+
},
|
|
22976
|
+
`${target.provider}:${target.targetId}`
|
|
22977
|
+
))
|
|
22978
|
+
}
|
|
22979
|
+
)
|
|
22980
|
+
]
|
|
22981
|
+
}
|
|
22982
|
+
) : showProviderSelect && selectedProviderSwitchTarget ? /* @__PURE__ */ jsxs15(
|
|
22615
22983
|
Select2,
|
|
22616
22984
|
{
|
|
22617
|
-
value:
|
|
22985
|
+
value: selectedProviderSwitchTarget.targetId,
|
|
22618
22986
|
disabled: providerSelectDisabled,
|
|
22619
22987
|
onValueChange: (nextTargetId) => {
|
|
22620
|
-
const target =
|
|
22988
|
+
const target = providerMenuTargets.find(
|
|
22621
22989
|
(candidate) => candidate.targetId === nextTargetId
|
|
22622
22990
|
);
|
|
22623
|
-
if (!target) {
|
|
22991
|
+
if (!target || target.disabled === true) {
|
|
22624
22992
|
return;
|
|
22625
22993
|
}
|
|
22626
22994
|
onProviderSelect?.({
|
|
@@ -22633,14 +23001,27 @@ function AgentComposer({
|
|
|
22633
23001
|
SelectTrigger2,
|
|
22634
23002
|
{
|
|
22635
23003
|
size: "sm",
|
|
22636
|
-
"aria-label":
|
|
22637
|
-
title:
|
|
23004
|
+
"aria-label": providerSelectLabel,
|
|
23005
|
+
title: providerSelectLabel,
|
|
22638
23006
|
className: cn(
|
|
22639
23007
|
AgentGUINode_styles_default.composerMenuTrigger,
|
|
22640
23008
|
AgentGUINode_styles_default.composerProviderSelect,
|
|
22641
|
-
"max-w-[
|
|
23009
|
+
"w-auto max-w-[180px]"
|
|
22642
23010
|
),
|
|
22643
|
-
children: /* @__PURE__ */
|
|
23011
|
+
children: /* @__PURE__ */ jsxs15("span", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
23012
|
+
/* @__PURE__ */ jsx28(
|
|
23013
|
+
"img",
|
|
23014
|
+
{
|
|
23015
|
+
alt: "",
|
|
23016
|
+
"aria-hidden": "true",
|
|
23017
|
+
className: "size-4 shrink-0 rounded-[4px]",
|
|
23018
|
+
src: resolveComposerProviderTargetIconUrl(
|
|
23019
|
+
selectedProviderSwitchTarget
|
|
23020
|
+
)
|
|
23021
|
+
}
|
|
23022
|
+
),
|
|
23023
|
+
/* @__PURE__ */ jsx28("span", { className: "min-w-0 truncate", children: selectedProviderLabel })
|
|
23024
|
+
] })
|
|
22644
23025
|
}
|
|
22645
23026
|
),
|
|
22646
23027
|
/* @__PURE__ */ jsx28(
|
|
@@ -22648,12 +23029,13 @@ function AgentComposer({
|
|
|
22648
23029
|
{
|
|
22649
23030
|
align: "start",
|
|
22650
23031
|
className: cn(AgentGUINode_styles_default.composerMenuContent, "min-w-[190px]"),
|
|
22651
|
-
children:
|
|
23032
|
+
children: providerMenuTargets.map((target) => /* @__PURE__ */ jsx28(
|
|
22652
23033
|
SelectItem2,
|
|
22653
23034
|
{
|
|
22654
23035
|
value: target.targetId,
|
|
22655
23036
|
className: cn(AgentGUINode_styles_default.composerMenuItem, "gap-2"),
|
|
22656
|
-
|
|
23037
|
+
disabled: target.disabled === true,
|
|
23038
|
+
children: /* @__PURE__ */ jsxs15("span", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
22657
23039
|
/* @__PURE__ */ jsx28(
|
|
22658
23040
|
"img",
|
|
22659
23041
|
{
|
|
@@ -22767,7 +23149,7 @@ function AgentComposer({
|
|
|
22767
23149
|
totalTokens: usage.totalTokens,
|
|
22768
23150
|
tooltipsEnabled: !previewMode,
|
|
22769
23151
|
compactSupported: compactSupported ?? false,
|
|
22770
|
-
compactDisabled: !hasCompactableContext || composerControlsHardDisabled,
|
|
23152
|
+
compactDisabled: !hasCompactableContext || composerControlsHardDisabled || isSendingTurn,
|
|
22771
23153
|
onCompact: () => onSubmit(textPromptContent("/compact")),
|
|
22772
23154
|
labels: {
|
|
22773
23155
|
usageChipLabel: labels.usageChipLabel,
|
|
@@ -22888,7 +23270,7 @@ function AgentComposerDraftImagePreview({
|
|
|
22888
23270
|
removeLabel,
|
|
22889
23271
|
onRemove
|
|
22890
23272
|
}) {
|
|
22891
|
-
const [aspectRatio, setAspectRatio] =
|
|
23273
|
+
const [aspectRatio, setAspectRatio] = useState11(1);
|
|
22892
23274
|
const previewWidth = Math.round(
|
|
22893
23275
|
Math.min(
|
|
22894
23276
|
DRAFT_IMAGE_PREVIEW_MAX_WIDTH_PX,
|
|
@@ -23384,6 +23766,14 @@ function AttentionGlyph() {
|
|
|
23384
23766
|
|
|
23385
23767
|
// agent-gui/agentGuiNode/AgentGUINodeView.tsx
|
|
23386
23768
|
import { createRichTextMentionHref as createRichTextMentionHref2 } from "@tutti-os/ui-rich-text/core";
|
|
23769
|
+
|
|
23770
|
+
// app/renderer/assets/icons/agents/claudecode-flat-filled.svg
|
|
23771
|
+
var claudecode_flat_filled_default = "./claudecode-flat-filled-NHO4JCVK.svg";
|
|
23772
|
+
|
|
23773
|
+
// app/renderer/assets/icons/agents/codex-flat-filled.svg
|
|
23774
|
+
var codex_flat_filled_default = "./codex-flat-filled-WYHCF5VR.svg";
|
|
23775
|
+
|
|
23776
|
+
// agent-gui/agentGuiNode/AgentGUINodeView.tsx
|
|
23387
23777
|
import { Fragment as Fragment8, jsx as jsx31, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
23388
23778
|
var AGENT_GUI_STICK_TO_BOTTOM_THRESHOLD_PX = 24;
|
|
23389
23779
|
var AGENT_GUI_TOP_HISTORY_PREFETCH_THRESHOLD_PX = 240;
|
|
@@ -23404,8 +23794,22 @@ function resolveAgentGUIHeroIconUrl(provider) {
|
|
|
23404
23794
|
const normalizedProvider = normalizeManagedAgentProvider(provider);
|
|
23405
23795
|
return MANAGED_AGENT_ICON_URLS[normalizedProvider] ?? MANAGED_AGENT_ICON_FALLBACK_URL;
|
|
23406
23796
|
}
|
|
23797
|
+
function agentGUIProviderIconPresentation(provider, iconUrl) {
|
|
23798
|
+
const normalizedProvider = normalizeManagedAgentProvider(provider);
|
|
23799
|
+
return {
|
|
23800
|
+
provider: normalizedProvider,
|
|
23801
|
+
iconUrl: iconUrl?.trim() || resolveAgentGUIHeroIconUrl(normalizedProvider)
|
|
23802
|
+
};
|
|
23803
|
+
}
|
|
23804
|
+
function agentGUIProviderRailIconPresentation(provider, iconUrl) {
|
|
23805
|
+
const normalizedProvider = normalizeManagedAgentProvider(provider);
|
|
23806
|
+
return {
|
|
23807
|
+
provider: normalizedProvider,
|
|
23808
|
+
iconUrl: iconUrl?.trim() || MANAGED_AGENT_PROVIDER_RAIL_ICON_URLS[normalizedProvider] || resolveAgentGUIHeroIconUrl(normalizedProvider)
|
|
23809
|
+
};
|
|
23810
|
+
}
|
|
23407
23811
|
function shouldEmphasizeEmptyHeroProvider(label) {
|
|
23408
|
-
return
|
|
23812
|
+
return label.trim().length > 0;
|
|
23409
23813
|
}
|
|
23410
23814
|
var fallbackWorkspaceFileReferenceCopy = {
|
|
23411
23815
|
t(key, values) {
|
|
@@ -23586,9 +23990,45 @@ function conversationPlainTitle(conversation, labels, uiLanguage) {
|
|
|
23586
23990
|
language: uiLanguage
|
|
23587
23991
|
});
|
|
23588
23992
|
}
|
|
23993
|
+
function buildAgentConversationHandoffPrompt(input) {
|
|
23994
|
+
const conversation = input.activeConversation;
|
|
23995
|
+
if (!conversation) {
|
|
23996
|
+
return "";
|
|
23997
|
+
}
|
|
23998
|
+
const sourceAgentLabel = input.selectedProviderTarget?.label?.trim() || conversation.provider;
|
|
23999
|
+
const title = conversationPlainTitle(
|
|
24000
|
+
conversation,
|
|
24001
|
+
input.labels,
|
|
24002
|
+
input.uiLanguage
|
|
24003
|
+
);
|
|
24004
|
+
const mentionLabel = `${sourceAgentLabel}${title ? ` ${title}` : ""}`.trim();
|
|
24005
|
+
const href = createRichTextMentionHref2({
|
|
24006
|
+
providerId: "agent-session",
|
|
24007
|
+
entityId: conversation.id,
|
|
24008
|
+
label: mentionLabel,
|
|
24009
|
+
scope: { workspaceId: input.workspaceId }
|
|
24010
|
+
});
|
|
24011
|
+
return `${formatAgentMentionMarkdown({
|
|
24012
|
+
kind: "session",
|
|
24013
|
+
href,
|
|
24014
|
+
workspaceId: input.workspaceId,
|
|
24015
|
+
targetId: conversation.id,
|
|
24016
|
+
name: mentionLabel,
|
|
24017
|
+
title: title || sourceAgentLabel,
|
|
24018
|
+
scope: "my_sessions",
|
|
24019
|
+
initiatorName: input.currentUserId?.trim() || sourceAgentLabel,
|
|
24020
|
+
agentName: sourceAgentLabel,
|
|
24021
|
+
status: conversation.status,
|
|
24022
|
+
updatedAtUnixMs: conversation.updatedAtUnixMs
|
|
24023
|
+
})} `;
|
|
24024
|
+
}
|
|
24025
|
+
function handoffProjectPathForConversation(conversation) {
|
|
24026
|
+
return conversation?.project?.path?.trim() || conversation?.cwd?.trim() || null;
|
|
24027
|
+
}
|
|
23589
24028
|
function AgentGUINodeView({
|
|
23590
24029
|
viewModel,
|
|
23591
24030
|
onLinkAction,
|
|
24031
|
+
onHandoffConversation,
|
|
23592
24032
|
capabilityMenuState,
|
|
23593
24033
|
onCapabilitySettingsRequest,
|
|
23594
24034
|
isActive = true,
|
|
@@ -23629,16 +24069,16 @@ function AgentGUINodeView({
|
|
|
23629
24069
|
"use memo";
|
|
23630
24070
|
const layoutElementRef = useRef12(null);
|
|
23631
24071
|
const railResizeInteractionRef = useRef12(null);
|
|
23632
|
-
const [isRailResizing, setIsRailResizing] =
|
|
23633
|
-
const [railResizeWidthPx, setRailResizeWidthPx] =
|
|
24072
|
+
const [isRailResizing, setIsRailResizing] = useState12(false);
|
|
24073
|
+
const [railResizeWidthPx, setRailResizeWidthPx] = useState12(
|
|
23634
24074
|
null
|
|
23635
24075
|
);
|
|
23636
|
-
const [workspaceReferencePickerOpen, setWorkspaceReferencePickerOpen] =
|
|
23637
|
-
const [workspaceReferencePickerTarget, setWorkspaceReferencePickerTarget] =
|
|
24076
|
+
const [workspaceReferencePickerOpen, setWorkspaceReferencePickerOpen] = useState12(false);
|
|
24077
|
+
const [workspaceReferencePickerTarget, setWorkspaceReferencePickerTarget] = useState12(null);
|
|
23638
24078
|
const [
|
|
23639
24079
|
localComposerFocusRequestSequence,
|
|
23640
24080
|
setLocalComposerFocusRequestSequence
|
|
23641
|
-
] =
|
|
24081
|
+
] = useState12(0);
|
|
23642
24082
|
const handledNewConversationRequestSequenceRef = useRef12(
|
|
23643
24083
|
newConversationRequestSequence
|
|
23644
24084
|
);
|
|
@@ -23806,7 +24246,7 @@ function AgentGUINodeView({
|
|
|
23806
24246
|
viewModel.composerSettings.selectedProjectPath
|
|
23807
24247
|
]
|
|
23808
24248
|
);
|
|
23809
|
-
|
|
24249
|
+
useEffect13(() => {
|
|
23810
24250
|
if (newConversationRequestSequence === null || handledNewConversationRequestSequenceRef.current === newConversationRequestSequence) {
|
|
23811
24251
|
return;
|
|
23812
24252
|
}
|
|
@@ -23896,7 +24336,7 @@ function AgentGUINodeView({
|
|
|
23896
24336
|
},
|
|
23897
24337
|
[onConversationRailWidthChanged]
|
|
23898
24338
|
);
|
|
23899
|
-
|
|
24339
|
+
useEffect13(() => {
|
|
23900
24340
|
if (isRailResizing || railResizeWidthPx === null) {
|
|
23901
24341
|
return;
|
|
23902
24342
|
}
|
|
@@ -23936,13 +24376,22 @@ function AgentGUINodeView({
|
|
|
23936
24376
|
]
|
|
23937
24377
|
);
|
|
23938
24378
|
const visualConversationRailWidthPx = isRailResizing ? railResizeInteractionRef.current?.lastWidthPx ?? conversationRailWidthPx : railResizeWidthPx ?? conversationRailWidthPx;
|
|
24379
|
+
const effectiveConversationRailWidthPx = conversationRailCollapsed ? 0 : visualConversationRailWidthPx;
|
|
24380
|
+
const showProviderRail = true;
|
|
24381
|
+
const renderProviderRail = showProviderRail && !conversationRailCollapsed;
|
|
23939
24382
|
const layoutStyle = {
|
|
23940
|
-
"--agent-gui-conversation-rail-width": `${
|
|
24383
|
+
"--agent-gui-conversation-rail-width": `${effectiveConversationRailWidthPx}px`,
|
|
24384
|
+
"--agent-gui-conversation-rail-content-width": `${visualConversationRailWidthPx}px`,
|
|
23941
24385
|
"--agent-gui-detail-min-width": `${detailMinWidthPx}px`,
|
|
23942
|
-
|
|
24386
|
+
"--agent-gui-provider-rail-width": renderProviderRail ? "52px" : "0px",
|
|
24387
|
+
gridTemplateColumns: showProviderRail ? "var(--agent-gui-provider-rail-width) var(--agent-gui-conversation-rail-width) minmax(var(--agent-gui-detail-min-width), 1fr)" : "var(--agent-gui-conversation-rail-width) minmax(var(--agent-gui-detail-min-width), 1fr)"
|
|
23943
24388
|
};
|
|
23944
24389
|
const effectiveRailConfigProvider = railConfigProvider === void 0 ? viewModel.data.provider : railConfigProvider;
|
|
23945
24390
|
const effectiveRailSlashStatusLimits = railSlashStatusLimits ?? slashStatusLimits;
|
|
24391
|
+
const enabledProviderTargets = viewModel.providerTargets.filter(
|
|
24392
|
+
(target) => target.disabled !== true && ((target.agentTargetId?.trim() ?? "") || (target.targetId?.trim() ?? ""))
|
|
24393
|
+
);
|
|
24394
|
+
const sectionAgentTargetFallbackId = enabledProviderTargets.length <= 1 ? viewModel.selectedProviderTarget.agentTargetId?.trim() || viewModel.selectedProviderTarget.targetId?.trim() || null : null;
|
|
23946
24395
|
const openAgentEnvSetup = useCallback10(() => {
|
|
23947
24396
|
if (!effectiveRailConfigProvider) {
|
|
23948
24397
|
return;
|
|
@@ -23968,8 +24417,8 @@ function AgentGUINodeView({
|
|
|
23968
24417
|
selectedProviderTarget: viewModel.selectedProviderTarget,
|
|
23969
24418
|
providerTargets: viewModel.providerTargets,
|
|
23970
24419
|
providerTargetsLoading: viewModel.providerTargetsLoading,
|
|
23971
|
-
conversationScope: viewModel.conversationScope,
|
|
23972
24420
|
conversationFilter: viewModel.conversationFilter,
|
|
24421
|
+
sectionAgentTargetFallbackId,
|
|
23973
24422
|
onCreateConversation: requestCreateConversation,
|
|
23974
24423
|
onUpdateConversationFilter: actions.updateConversationFilter,
|
|
23975
24424
|
onSelectConversationFilterTarget: actions.selectConversationFilterTarget,
|
|
@@ -24007,6 +24456,7 @@ function AgentGUINodeView({
|
|
|
24007
24456
|
retryOpenclawGateway,
|
|
24008
24457
|
selectConversation,
|
|
24009
24458
|
selectProjectDirectory,
|
|
24459
|
+
sectionAgentTargetFallbackId,
|
|
24010
24460
|
effectiveRailConfigProvider,
|
|
24011
24461
|
effectiveRailSlashStatusLimits,
|
|
24012
24462
|
viewModel.selectedProviderTarget,
|
|
@@ -24014,7 +24464,6 @@ function AgentGUINodeView({
|
|
|
24014
24464
|
viewModel.providerTargetsLoading,
|
|
24015
24465
|
toggleConversationPinned,
|
|
24016
24466
|
uiLanguage,
|
|
24017
|
-
viewModel.conversationScope,
|
|
24018
24467
|
viewModel.conversationFilter,
|
|
24019
24468
|
viewModel.activeConversationId,
|
|
24020
24469
|
viewModel.isDeletingConversation,
|
|
@@ -24062,6 +24511,28 @@ function AgentGUINodeView({
|
|
|
24062
24511
|
inert: previewMode ? true : void 0,
|
|
24063
24512
|
style: layoutStyle,
|
|
24064
24513
|
children: [
|
|
24514
|
+
showProviderRail ? /* @__PURE__ */ jsx31(
|
|
24515
|
+
"aside",
|
|
24516
|
+
{
|
|
24517
|
+
className: AgentGUINode_styles_default.providerRailPanel,
|
|
24518
|
+
"aria-label": labels.providerSwitchLabel,
|
|
24519
|
+
"aria-hidden": conversationRailCollapsed ? "true" : void 0,
|
|
24520
|
+
inert: conversationRailCollapsed ? true : void 0,
|
|
24521
|
+
children: /* @__PURE__ */ jsx31(
|
|
24522
|
+
AgentGUIProviderRail,
|
|
24523
|
+
{
|
|
24524
|
+
conversationFilter: viewModel.conversationFilter,
|
|
24525
|
+
labels,
|
|
24526
|
+
previewMode,
|
|
24527
|
+
selectedProviderTarget: viewModel.selectedProviderTarget,
|
|
24528
|
+
providerTargets: viewModel.providerTargets,
|
|
24529
|
+
providerTargetsLoading: viewModel.providerTargetsLoading,
|
|
24530
|
+
onSelectConversationFilterTarget: actions.selectConversationFilterTarget,
|
|
24531
|
+
onUpdateConversationFilter: actions.updateConversationFilter
|
|
24532
|
+
}
|
|
24533
|
+
)
|
|
24534
|
+
}
|
|
24535
|
+
) : null,
|
|
24065
24536
|
/* @__PURE__ */ jsx31(
|
|
24066
24537
|
"aside",
|
|
24067
24538
|
{
|
|
@@ -24120,6 +24591,7 @@ function AgentGUINodeView({
|
|
|
24120
24591
|
slashStatusLimits,
|
|
24121
24592
|
slashStatusLimitsLoading,
|
|
24122
24593
|
onLinkAction,
|
|
24594
|
+
onHandoffConversation,
|
|
24123
24595
|
capabilityMenuState,
|
|
24124
24596
|
onCapabilitySettingsRequest,
|
|
24125
24597
|
onAgentProviderLogin,
|
|
@@ -24240,6 +24712,7 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24240
24712
|
slashStatusLimits,
|
|
24241
24713
|
slashStatusLimitsLoading,
|
|
24242
24714
|
onLinkAction,
|
|
24715
|
+
onHandoffConversation,
|
|
24243
24716
|
capabilityMenuState,
|
|
24244
24717
|
onCapabilitySettingsRequest,
|
|
24245
24718
|
onAgentProviderLogin,
|
|
@@ -24256,18 +24729,20 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24256
24729
|
const timelineScrollAnchorRef = useRef12(null);
|
|
24257
24730
|
const submittedPromptScrollConversationRef = useRef12(null);
|
|
24258
24731
|
const pendingPrependScrollAnchorRef = useRef12(null);
|
|
24259
|
-
const [isTimelineScrolledToTop, setIsTimelineScrolledToTop] =
|
|
24732
|
+
const [isTimelineScrolledToTop, setIsTimelineScrolledToTop] = useState12(true);
|
|
24733
|
+
const [isTimelineScrolledToBottom, setIsTimelineScrolledToBottom] = useState12(true);
|
|
24260
24734
|
const [
|
|
24261
24735
|
bottomDockDismissedPromptRequestId,
|
|
24262
24736
|
setBottomDockDismissedPromptRequestId
|
|
24263
|
-
] =
|
|
24737
|
+
] = useState12(null);
|
|
24264
24738
|
const conversation = useProjectedAgentConversation({
|
|
24265
24739
|
conversation: viewModel.conversation,
|
|
24266
24740
|
detail: viewModel.conversationDetail,
|
|
24267
24741
|
avoidGroupingEdits: viewModel.avoidGroupingEdits
|
|
24268
24742
|
});
|
|
24269
24743
|
const hasActiveConversation = viewModel.activeConversationId !== null;
|
|
24270
|
-
const
|
|
24744
|
+
const selectedProviderTargetComingSoon = viewModel.selectedProviderTarget?.disabled === true;
|
|
24745
|
+
const emptyProviderReadinessGate = !hasActiveConversation ? selectedProviderTargetComingSoon ? { status: "coming_soon" } : viewModel.providerReadinessGate : null;
|
|
24271
24746
|
const activePrompt = viewModel.pendingInteractivePrompt ?? viewModel.pendingApproval;
|
|
24272
24747
|
const activePromptRequestId = activePrompt?.requestId ?? null;
|
|
24273
24748
|
const sessionChrome = useMemo10(
|
|
@@ -24414,26 +24889,32 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24414
24889
|
);
|
|
24415
24890
|
const goalBannerLabels = useMemo10(
|
|
24416
24891
|
() => ({
|
|
24417
|
-
|
|
24418
|
-
|
|
24419
|
-
|
|
24420
|
-
|
|
24421
|
-
|
|
24422
|
-
|
|
24423
|
-
statusComplete: labels.goalStatusComplete,
|
|
24892
|
+
titleActive: labels.goalTitleActive,
|
|
24893
|
+
titlePaused: labels.goalTitlePaused,
|
|
24894
|
+
titleBlocked: labels.goalTitleBlocked,
|
|
24895
|
+
titleUsageLimited: labels.goalTitleUsageLimited,
|
|
24896
|
+
titleBudgetLimited: labels.goalTitleBudgetLimited,
|
|
24897
|
+
titleComplete: labels.goalTitleComplete,
|
|
24424
24898
|
budgetUsage: labels.goalBudgetUsage,
|
|
24425
|
-
clearHint: labels.goalClearHint
|
|
24899
|
+
clearHint: labels.goalClearHint,
|
|
24900
|
+
editAction: labels.goalEditAction,
|
|
24901
|
+
pauseAction: labels.goalPauseAction,
|
|
24902
|
+
resumeAction: labels.goalResumeAction,
|
|
24903
|
+
clearAction: labels.goalClearAction
|
|
24426
24904
|
}),
|
|
24427
24905
|
[
|
|
24428
|
-
labels.
|
|
24429
|
-
labels.
|
|
24430
|
-
labels.
|
|
24431
|
-
labels.
|
|
24432
|
-
labels.
|
|
24433
|
-
labels.
|
|
24434
|
-
labels.goalStatusComplete,
|
|
24906
|
+
labels.goalTitleActive,
|
|
24907
|
+
labels.goalTitlePaused,
|
|
24908
|
+
labels.goalTitleBlocked,
|
|
24909
|
+
labels.goalTitleUsageLimited,
|
|
24910
|
+
labels.goalTitleBudgetLimited,
|
|
24911
|
+
labels.goalTitleComplete,
|
|
24435
24912
|
labels.goalBudgetUsage,
|
|
24436
|
-
labels.goalClearHint
|
|
24913
|
+
labels.goalClearHint,
|
|
24914
|
+
labels.goalEditAction,
|
|
24915
|
+
labels.goalPauseAction,
|
|
24916
|
+
labels.goalResumeAction,
|
|
24917
|
+
labels.goalClearAction
|
|
24437
24918
|
]
|
|
24438
24919
|
);
|
|
24439
24920
|
const interactivePromptLabels = useMemo10(
|
|
@@ -24583,6 +25064,8 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24583
25064
|
addReference: labels.addReference,
|
|
24584
25065
|
addContent: labels.addContent,
|
|
24585
25066
|
referenceWorkspaceFiles: labels.referenceWorkspaceFiles,
|
|
25067
|
+
handoffConversation: labels.handoffConversation,
|
|
25068
|
+
handoffConversationMenu: labels.handoffConversationMenu,
|
|
24586
25069
|
providerSwitchLabel: labels.providerSwitchLabel,
|
|
24587
25070
|
projectLocked: labels.projectLocked,
|
|
24588
25071
|
projectMissingDescription: labels.projectMissingDescription,
|
|
@@ -24602,6 +25085,8 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24602
25085
|
labels.fileMentionLoading,
|
|
24603
25086
|
labels.fileMentionPalette,
|
|
24604
25087
|
labels.fileMentionTabHint,
|
|
25088
|
+
labels.handoffConversation,
|
|
25089
|
+
labels.handoffConversationMenu,
|
|
24605
25090
|
labels.inheritedUnavailable,
|
|
24606
25091
|
labels.loadingConversation,
|
|
24607
25092
|
labels.modelLabel,
|
|
@@ -24720,6 +25205,7 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24720
25205
|
actions.updateComposerSettings
|
|
24721
25206
|
);
|
|
24722
25207
|
const submitPrompt = useStableEventCallback2(actions.submitPrompt);
|
|
25208
|
+
const goalControl = useStableEventCallback2(actions.goalControl);
|
|
24723
25209
|
const submitGuidancePrompt = useStableEventCallback2(
|
|
24724
25210
|
actions.submitGuidancePrompt
|
|
24725
25211
|
);
|
|
@@ -24781,17 +25267,22 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24781
25267
|
},
|
|
24782
25268
|
[submitInteractivePrompt]
|
|
24783
25269
|
);
|
|
24784
|
-
const canSwitchComposerProvider =
|
|
24785
|
-
const composerProviderTargets =
|
|
25270
|
+
const canSwitchComposerProvider = true;
|
|
25271
|
+
const composerProviderTargets = viewModel.providerTargets;
|
|
25272
|
+
const composerProvider = viewModel.activeConversationId === null ? viewModel.selectedProviderTarget?.provider ?? viewModel.data.provider : viewModel.data.provider;
|
|
25273
|
+
const composerSelectedProviderTarget = viewModel.activeConversationId === null ? viewModel.selectedProviderTarget : viewModel.providerTargets.find((target) => {
|
|
25274
|
+
if (target.provider !== viewModel.data.provider) {
|
|
25275
|
+
return false;
|
|
25276
|
+
}
|
|
25277
|
+
const agentTargetId = viewModel.data.agentTargetId;
|
|
25278
|
+
return !agentTargetId || target.targetId === agentTargetId || target.agentTargetId === agentTargetId;
|
|
25279
|
+
}) ?? viewModel.selectedProviderTarget;
|
|
24786
25280
|
const bottomDockComposerProps = useMemo10(
|
|
24787
25281
|
() => ({
|
|
24788
25282
|
workspaceId: viewModel.workspaceId,
|
|
24789
25283
|
workspacePath: viewModel.workspacePath,
|
|
24790
25284
|
currentUserId: viewModel.currentUserId,
|
|
24791
|
-
provider:
|
|
24792
|
-
selectedProviderTarget: viewModel.selectedProviderTarget,
|
|
24793
|
-
providerTargets: composerProviderTargets,
|
|
24794
|
-
providerSelectReadonly: !canSwitchComposerProvider || viewModel.activeConversationId !== null,
|
|
25285
|
+
provider: composerProvider,
|
|
24795
25286
|
slashStatus,
|
|
24796
25287
|
usage: viewModel.usage,
|
|
24797
25288
|
draftContent: viewModel.draftContent,
|
|
@@ -24799,8 +25290,13 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24799
25290
|
hasCompactableContext: viewModel.hasSentUserMessage,
|
|
24800
25291
|
compactSupported: viewModel.compactSupported,
|
|
24801
25292
|
availableSkills: viewModel.availableSkills,
|
|
25293
|
+
selectedProviderTarget: composerSelectedProviderTarget,
|
|
25294
|
+
providerTargets: composerProviderTargets,
|
|
25295
|
+
providerSelectReadonly: !canSwitchComposerProvider || viewModel.activeConversationId !== null,
|
|
25296
|
+
onProviderSelect: canSwitchComposerProvider && viewModel.activeConversationId === null ? actions.selectHomeComposerAgentTarget : void 0,
|
|
24802
25297
|
disabled: composerDisabled,
|
|
24803
25298
|
disabledReason: composerDisabledReason,
|
|
25299
|
+
hasActiveConversation: viewModel.activeConversationId !== null,
|
|
24804
25300
|
submitDisabled,
|
|
24805
25301
|
composerSettings: viewModel.composerSettings,
|
|
24806
25302
|
queuedPrompts: viewModel.queuedPrompts,
|
|
@@ -24820,6 +25316,9 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24820
25316
|
composerFocusRequestSequence,
|
|
24821
25317
|
isActive,
|
|
24822
25318
|
promptImagesSupported: viewModel.promptImagesSupported,
|
|
25319
|
+
providerSelectLabel: labels.providerSwitchLabel,
|
|
25320
|
+
handoffLabel: labels.handoffConversation,
|
|
25321
|
+
handoffMenuLabel: labels.handoffConversationMenu,
|
|
24823
25322
|
isInterrupting: viewModel.isInterrupting,
|
|
24824
25323
|
isSendingTurn: isComposerSending,
|
|
24825
25324
|
isSubmittingPrompt: viewModel.isRespondingApproval,
|
|
@@ -24830,7 +25329,6 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24830
25329
|
onDraftContentChange: updateDraftContent,
|
|
24831
25330
|
onProjectPathChange: updateSelectedProjectPath,
|
|
24832
25331
|
onSettingsChange: updateComposerSettings,
|
|
24833
|
-
onProviderSelect: canSwitchComposerProvider ? actions.selectProvider : void 0,
|
|
24834
25332
|
onSubmit: submitPromptAndScrollToBottom,
|
|
24835
25333
|
onSubmitGuidance: submitGuidancePromptAndScrollToBottom,
|
|
24836
25334
|
onPromptImagesUnsupported: showPromptImagesUnsupported,
|
|
@@ -24841,6 +25339,21 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24841
25339
|
onSubmitInteractivePrompt: submitInteractivePrompt,
|
|
24842
25340
|
onCapabilitySettingsRequest,
|
|
24843
25341
|
onLinkAction: stableLinkAction,
|
|
25342
|
+
onHandoffConversation: onHandoffConversation && viewModel.activeConversationId !== null ? (target) => onHandoffConversation({
|
|
25343
|
+
agentTargetId: target.agentTargetId ?? target.targetId,
|
|
25344
|
+
draftPrompt: buildAgentConversationHandoffPrompt({
|
|
25345
|
+
activeConversation: viewModel.activeConversation,
|
|
25346
|
+
currentUserId: viewModel.currentUserId,
|
|
25347
|
+
labels,
|
|
25348
|
+
selectedProviderTarget: composerSelectedProviderTarget,
|
|
25349
|
+
uiLanguage,
|
|
25350
|
+
workspaceId: viewModel.workspaceId
|
|
25351
|
+
}),
|
|
25352
|
+
provider: target.provider,
|
|
25353
|
+
userProjectPath: handoffProjectPathForConversation(
|
|
25354
|
+
viewModel.activeConversation
|
|
25355
|
+
)
|
|
25356
|
+
}) : void 0,
|
|
24844
25357
|
onRequestWorkspaceReferences: stableRequestWorkspaceReferences,
|
|
24845
25358
|
resolveDroppedFileReferences,
|
|
24846
25359
|
selectProjectDirectory: stableSelectProjectDirectory,
|
|
@@ -24850,19 +25363,26 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24850
25363
|
[
|
|
24851
25364
|
canQueueWhileBusy,
|
|
24852
25365
|
backgroundAgentStatusText,
|
|
24853
|
-
|
|
25366
|
+
actions.selectHomeComposerAgentTarget,
|
|
24854
25367
|
capabilityMenuState,
|
|
24855
|
-
|
|
25368
|
+
canSwitchComposerProvider,
|
|
24856
25369
|
composerDisabled,
|
|
24857
25370
|
composerDisabledReason,
|
|
24858
25371
|
composerFocusRequestSequence,
|
|
24859
25372
|
composerLabels,
|
|
25373
|
+
composerProviderTargets,
|
|
25374
|
+
composerSelectedProviderTarget,
|
|
24860
25375
|
handleInterruptCurrentTurn,
|
|
24861
25376
|
isActive,
|
|
24862
25377
|
isComposerSending,
|
|
24863
25378
|
labels.followupPlaceholder,
|
|
25379
|
+
labels.handoffConversation,
|
|
25380
|
+
labels.handoffConversationMenu,
|
|
24864
25381
|
labels.initialPlaceholder,
|
|
24865
25382
|
labels.promptTips,
|
|
25383
|
+
labels.providerSwitchLabel,
|
|
25384
|
+
labels,
|
|
25385
|
+
onHandoffConversation,
|
|
24866
25386
|
previewMode,
|
|
24867
25387
|
workspaceReferencePickerOpen,
|
|
24868
25388
|
composerActivePrompt,
|
|
@@ -24885,16 +25405,17 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24885
25405
|
stableSelectProjectDirectory,
|
|
24886
25406
|
stableRequestWorkspaceReferences,
|
|
24887
25407
|
updateComposerSettings,
|
|
24888
|
-
actions.selectProvider,
|
|
24889
25408
|
updateDraftContent,
|
|
24890
25409
|
updateSelectedProjectPath,
|
|
25410
|
+
viewModel.activeConversationId,
|
|
24891
25411
|
viewModel.availableCommands,
|
|
24892
25412
|
viewModel.availableSkills,
|
|
24893
25413
|
viewModel.compactSupported,
|
|
24894
25414
|
viewModel.composerSettings,
|
|
24895
25415
|
viewModel.currentUserId,
|
|
24896
|
-
viewModel.
|
|
24897
|
-
viewModel.
|
|
25416
|
+
viewModel.activeConversationId,
|
|
25417
|
+
viewModel.activeConversation,
|
|
25418
|
+
composerProvider,
|
|
24898
25419
|
viewModel.draftContent,
|
|
24899
25420
|
viewModel.draftPrompt,
|
|
24900
25421
|
viewModel.drainingQueuedPromptId,
|
|
@@ -24918,6 +25439,12 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24918
25439
|
[bottomDockComposerProps]
|
|
24919
25440
|
);
|
|
24920
25441
|
const emptyHeroProvider = viewModel.selectedProviderTarget?.provider ?? viewModel.data.provider;
|
|
25442
|
+
const emptyHeroProviderLabel = labels.emptyProviderForProvider?.(emptyHeroProvider) ?? labels.emptyProvider ?? "";
|
|
25443
|
+
const emptyHeroLabel = labels.emptyForProvider?.(emptyHeroProvider) ?? labels.empty;
|
|
25444
|
+
const emptyHeroIconPresentations = useMemo10(
|
|
25445
|
+
() => viewModel.conversationFilter.kind === "all" ? agentGUILaunchpadIconPresentations() : [agentGUIProviderIconPresentation(emptyHeroProvider)],
|
|
25446
|
+
[emptyHeroProvider, viewModel.conversationFilter]
|
|
25447
|
+
);
|
|
24921
25448
|
const bottomDockStoreState = useMemo10(
|
|
24922
25449
|
() => ({
|
|
24923
25450
|
// The lifted prompt is rendered from props on the pane; the store still
|
|
@@ -24954,7 +25481,7 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24954
25481
|
viewModel.drainingQueuedPromptId ?? "",
|
|
24955
25482
|
viewModel.isRespondingApproval ? "1" : "0"
|
|
24956
25483
|
].join("|");
|
|
24957
|
-
|
|
25484
|
+
useEffect13(() => {
|
|
24958
25485
|
setBottomDockDismissedPromptRequestId(null);
|
|
24959
25486
|
}, [activePromptRequestId]);
|
|
24960
25487
|
useLayoutEffect4(() => {
|
|
@@ -24968,6 +25495,7 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
24968
25495
|
pendingPrependScrollAnchorRef.current = null;
|
|
24969
25496
|
submittedPromptScrollConversationRef.current = null;
|
|
24970
25497
|
setIsTimelineScrolledToTop(true);
|
|
25498
|
+
setIsTimelineScrolledToBottom(true);
|
|
24971
25499
|
return;
|
|
24972
25500
|
}
|
|
24973
25501
|
const maxScrollTop = Math.max(
|
|
@@ -25018,6 +25546,9 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
25018
25546
|
setIsTimelineScrolledToTop(
|
|
25019
25547
|
nextScrollTop <= AGENT_GUI_TOP_MASK_SCROLL_EPSILON_PX
|
|
25020
25548
|
);
|
|
25549
|
+
setIsTimelineScrolledToBottom(
|
|
25550
|
+
maxScrollTop - nextScrollTop <= AGENT_GUI_STICK_TO_BOTTOM_THRESHOLD_PX
|
|
25551
|
+
);
|
|
25021
25552
|
}, [
|
|
25022
25553
|
conversation,
|
|
25023
25554
|
showTimelineSkeleton,
|
|
@@ -25036,6 +25567,9 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
25036
25567
|
const bottomDockRect = bottomDock.getBoundingClientRect();
|
|
25037
25568
|
let visualTop = bottomDockRect.top;
|
|
25038
25569
|
bottomDock.querySelectorAll("*").forEach((element) => {
|
|
25570
|
+
if (element.closest(`.${AgentGUINode_styles_default.bottomDockScrollToBottom}`)) {
|
|
25571
|
+
return;
|
|
25572
|
+
}
|
|
25039
25573
|
const rect = element.getBoundingClientRect();
|
|
25040
25574
|
if (rect.width > 0 && rect.height > 0) {
|
|
25041
25575
|
visualTop = Math.min(visualTop, rect.top);
|
|
@@ -25049,6 +25583,10 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
25049
25583
|
"--agent-gui-bottom-dock-safe-area",
|
|
25050
25584
|
`${overflowHeight}px`
|
|
25051
25585
|
);
|
|
25586
|
+
bottomDock.style.setProperty(
|
|
25587
|
+
"--agent-gui-bottom-dock-floating-safe-area",
|
|
25588
|
+
`${overflowHeight}px`
|
|
25589
|
+
);
|
|
25052
25590
|
};
|
|
25053
25591
|
const syncBottomDockSpace = () => {
|
|
25054
25592
|
syncBottomDockSafeArea();
|
|
@@ -25079,12 +25617,16 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
25079
25617
|
setIsTimelineScrolledToTop(
|
|
25080
25618
|
maxScrollTop <= AGENT_GUI_TOP_MASK_SCROLL_EPSILON_PX
|
|
25081
25619
|
);
|
|
25620
|
+
setIsTimelineScrolledToBottom(true);
|
|
25082
25621
|
});
|
|
25083
25622
|
};
|
|
25084
25623
|
syncBottomDockSpace();
|
|
25085
25624
|
if (typeof ResizeObserver === "undefined") {
|
|
25086
25625
|
return () => {
|
|
25087
25626
|
timeline.style.removeProperty("--agent-gui-bottom-dock-safe-area");
|
|
25627
|
+
bottomDock.style.removeProperty(
|
|
25628
|
+
"--agent-gui-bottom-dock-floating-safe-area"
|
|
25629
|
+
);
|
|
25088
25630
|
if (animationFrameId !== null) {
|
|
25089
25631
|
window.cancelAnimationFrame(animationFrameId);
|
|
25090
25632
|
}
|
|
@@ -25100,13 +25642,16 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
25100
25642
|
}
|
|
25101
25643
|
return () => {
|
|
25102
25644
|
timeline.style.removeProperty("--agent-gui-bottom-dock-safe-area");
|
|
25645
|
+
bottomDock.style.removeProperty(
|
|
25646
|
+
"--agent-gui-bottom-dock-floating-safe-area"
|
|
25647
|
+
);
|
|
25103
25648
|
if (animationFrameId !== null) {
|
|
25104
25649
|
window.cancelAnimationFrame(animationFrameId);
|
|
25105
25650
|
}
|
|
25106
25651
|
observer.disconnect();
|
|
25107
25652
|
};
|
|
25108
25653
|
}, [bottomDockStoreRevision, viewModel.activeConversationId]);
|
|
25109
|
-
|
|
25654
|
+
useEffect13(() => {
|
|
25110
25655
|
const timeline = timelineRef.current;
|
|
25111
25656
|
const activeConversationId = viewModel.activeConversationId;
|
|
25112
25657
|
if (!timeline || !activeConversationId) {
|
|
@@ -25123,6 +25668,9 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
25123
25668
|
setIsTimelineScrolledToTop(
|
|
25124
25669
|
scrollTop <= AGENT_GUI_TOP_MASK_SCROLL_EPSILON_PX
|
|
25125
25670
|
);
|
|
25671
|
+
setIsTimelineScrolledToBottom(
|
|
25672
|
+
timeline.scrollHeight - scrollTop - timeline.clientHeight <= AGENT_GUI_STICK_TO_BOTTOM_THRESHOLD_PX
|
|
25673
|
+
);
|
|
25126
25674
|
if (viewModel.hasOlderMessages && !viewModel.isLoadingOlderMessages && scrollTop <= AGENT_GUI_TOP_HISTORY_PREFETCH_THRESHOLD_PX) {
|
|
25127
25675
|
pendingPrependScrollAnchorRef.current = {
|
|
25128
25676
|
conversationId: activeConversationId,
|
|
@@ -25143,6 +25691,28 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
25143
25691
|
viewModel.hasOlderMessages,
|
|
25144
25692
|
viewModel.isLoadingOlderMessages
|
|
25145
25693
|
]);
|
|
25694
|
+
const scrollTimelineToBottom = useCallback10(() => {
|
|
25695
|
+
const timeline = timelineRef.current;
|
|
25696
|
+
const activeConversationId = viewModel.activeConversationId;
|
|
25697
|
+
if (!timeline || !activeConversationId) {
|
|
25698
|
+
return;
|
|
25699
|
+
}
|
|
25700
|
+
const maxScrollTop = Math.max(
|
|
25701
|
+
0,
|
|
25702
|
+
timeline.scrollHeight - timeline.clientHeight
|
|
25703
|
+
);
|
|
25704
|
+
setTimelineScrollTopWithUserTransition(timeline, maxScrollTop);
|
|
25705
|
+
timelineScrollAnchorRef.current = {
|
|
25706
|
+
conversationId: activeConversationId,
|
|
25707
|
+
scrollHeight: timeline.scrollHeight,
|
|
25708
|
+
scrollTop: maxScrollTop,
|
|
25709
|
+
clientHeight: timeline.clientHeight
|
|
25710
|
+
};
|
|
25711
|
+
setIsTimelineScrolledToTop(
|
|
25712
|
+
maxScrollTop <= AGENT_GUI_TOP_MASK_SCROLL_EPSILON_PX
|
|
25713
|
+
);
|
|
25714
|
+
setIsTimelineScrolledToBottom(true);
|
|
25715
|
+
}, [viewModel.activeConversationId]);
|
|
25146
25716
|
return /* @__PURE__ */ jsxs17("main", { className: AgentGUINode_styles_default.detail, children: [
|
|
25147
25717
|
/* @__PURE__ */ jsx31(
|
|
25148
25718
|
AgentGUIDetailHeader,
|
|
@@ -25194,7 +25764,7 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
25194
25764
|
ScrollArea,
|
|
25195
25765
|
{
|
|
25196
25766
|
scrollbarMode: "native",
|
|
25197
|
-
className: "min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100",
|
|
25767
|
+
className: "flex h-full min-h-0 flex-1 flex-col [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100",
|
|
25198
25768
|
viewportRef: timelineRef,
|
|
25199
25769
|
viewportTestId: "agent-gui-timeline",
|
|
25200
25770
|
viewportClassName: `${AgentGUINode_styles_default.timeline} ${hasActiveConversation ? AgentGUINode_styles_default.timelineWithComposer : AgentGUINode_styles_default.timelineCentered} ${!isTimelineScrolledToTop ? AgentGUINode_styles_default.timelineScrolledFromTop : ""} ${showUnavailableChatEmpty ? AgentGUINode_styles_default.timelineUnavailableChatEmpty : ""}`.trim(),
|
|
@@ -25204,22 +25774,28 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
25204
25774
|
{
|
|
25205
25775
|
provider: emptyHeroProvider,
|
|
25206
25776
|
gate: emptyProviderReadinessGate,
|
|
25777
|
+
showAllProviders: viewModel.conversationFilter.kind === "all",
|
|
25207
25778
|
labels
|
|
25208
25779
|
}
|
|
25209
25780
|
) : /* @__PURE__ */ jsx31(
|
|
25210
25781
|
AgentGUIEmptyHeroPane,
|
|
25211
25782
|
{
|
|
25212
25783
|
provider: emptyHeroProvider,
|
|
25213
|
-
emptyLabel:
|
|
25214
|
-
emptyProvider:
|
|
25784
|
+
emptyLabel: emptyHeroLabel,
|
|
25785
|
+
emptyProvider: emptyHeroProviderLabel,
|
|
25786
|
+
iconPresentations: emptyHeroIconPresentations,
|
|
25215
25787
|
inlineNoticeChrome,
|
|
25216
25788
|
isRespondingApproval: viewModel.isRespondingApproval,
|
|
25217
25789
|
onSubmitApprovalOption: submitApprovalOption,
|
|
25218
25790
|
onRetryActivation: retryActivation,
|
|
25219
25791
|
onAuthLogin: authLogin,
|
|
25220
25792
|
onContinueInNewConversation: continueInNewConversation,
|
|
25793
|
+
onProviderSelect: canSwitchComposerProvider && viewModel.activeConversationId === null ? actions.selectHomeComposerAgentTarget : void 0,
|
|
25794
|
+
providerTargets: composerProviderTargets,
|
|
25795
|
+
selectedProviderTarget: viewModel.selectedProviderTarget,
|
|
25221
25796
|
chromeLabels,
|
|
25222
|
-
composerProps: emptyHeroComposerProps
|
|
25797
|
+
composerProps: emptyHeroComposerProps,
|
|
25798
|
+
providerSelectLabel: labels.providerSwitchLabel
|
|
25223
25799
|
}
|
|
25224
25800
|
) : /* @__PURE__ */ jsx31(
|
|
25225
25801
|
AgentGUIConversationTimelinePane,
|
|
@@ -25243,6 +25819,9 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
25243
25819
|
AgentGUIBottomDockPane,
|
|
25244
25820
|
{
|
|
25245
25821
|
bottomDockRef,
|
|
25822
|
+
showScrollToBottom: !isTimelineScrolledToBottom,
|
|
25823
|
+
scrollToBottomLabel: labels.scrollToBottom,
|
|
25824
|
+
onScrollToBottom: scrollTimelineToBottom,
|
|
25246
25825
|
bottomDockLiftedPrompt,
|
|
25247
25826
|
bottomDockReplacementPrompt,
|
|
25248
25827
|
store: bottomDockStore,
|
|
@@ -25255,7 +25834,9 @@ var AgentGUIDetailPane = memo(function AgentGUIDetailPane2({
|
|
|
25255
25834
|
onRetryActivation: retryActivation,
|
|
25256
25835
|
onAuthLogin: authLogin,
|
|
25257
25836
|
onContinueInNewConversation: continueInNewConversation,
|
|
25258
|
-
onSubmitBottomDockInteractivePrompt: submitBottomDockInteractivePrompt
|
|
25837
|
+
onSubmitBottomDockInteractivePrompt: submitBottomDockInteractivePrompt,
|
|
25838
|
+
onGoalControl: goalControl,
|
|
25839
|
+
goalPauseSupported: viewModel.goalPauseSupported
|
|
25259
25840
|
}
|
|
25260
25841
|
) : null
|
|
25261
25842
|
] });
|
|
@@ -25357,29 +25938,52 @@ var AgentGUIEmptyHeroPane = memo(function AgentGUIEmptyHeroPane2({
|
|
|
25357
25938
|
provider,
|
|
25358
25939
|
emptyLabel,
|
|
25359
25940
|
emptyProvider,
|
|
25941
|
+
iconPresentations,
|
|
25360
25942
|
inlineNoticeChrome,
|
|
25361
25943
|
isRespondingApproval,
|
|
25362
25944
|
onSubmitApprovalOption,
|
|
25363
25945
|
onAuthLogin,
|
|
25364
25946
|
onRetryActivation,
|
|
25365
25947
|
onContinueInNewConversation,
|
|
25948
|
+
onProviderSelect,
|
|
25949
|
+
providerTargets,
|
|
25950
|
+
selectedProviderTarget,
|
|
25366
25951
|
chromeLabels,
|
|
25367
|
-
composerProps
|
|
25952
|
+
composerProps,
|
|
25953
|
+
providerSelectLabel
|
|
25368
25954
|
}) {
|
|
25369
25955
|
"use memo";
|
|
25370
|
-
const
|
|
25956
|
+
const heroIconPresentations = iconPresentations.length > 0 ? iconPresentations : [agentGUIProviderIconPresentation(provider)];
|
|
25957
|
+
const heroIconAnimationKey = heroIconPresentations.map((icon) => `${icon.provider}:${icon.iconUrl}`).join("|");
|
|
25371
25958
|
return /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.emptyHero, children: /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.emptyHeroBody, children: [
|
|
25372
|
-
/* @__PURE__ */ jsx31(
|
|
25373
|
-
|
|
25959
|
+
heroIconPresentations.length > 1 ? /* @__PURE__ */ jsx31(
|
|
25960
|
+
AgentGUIAllProviderGridIcon,
|
|
25374
25961
|
{
|
|
25375
|
-
|
|
25376
|
-
className: AgentGUINode_styles_default.
|
|
25377
|
-
|
|
25378
|
-
|
|
25379
|
-
|
|
25380
|
-
|
|
25962
|
+
activeProvider: provider,
|
|
25963
|
+
className: AgentGUINode_styles_default.emptyHeroLaunchpadIcon,
|
|
25964
|
+
icons: heroIconPresentations
|
|
25965
|
+
},
|
|
25966
|
+
heroIconAnimationKey
|
|
25967
|
+
) : /* @__PURE__ */ jsx31(
|
|
25968
|
+
AgentGUIProviderIconVisual,
|
|
25969
|
+
{
|
|
25970
|
+
ariaHidden: true,
|
|
25971
|
+
imageClassName: AgentGUINode_styles_default.emptyHeroIconEffect,
|
|
25972
|
+
icon: heroIconPresentations[0]
|
|
25973
|
+
},
|
|
25974
|
+
heroIconAnimationKey
|
|
25381
25975
|
),
|
|
25382
|
-
/* @__PURE__ */ jsx31("h2", { className: AgentGUINode_styles_default.emptyHeroTitle, children: /* @__PURE__ */ jsx31(
|
|
25976
|
+
/* @__PURE__ */ jsx31("h2", { className: AgentGUINode_styles_default.emptyHeroTitle, children: /* @__PURE__ */ jsx31(
|
|
25977
|
+
EmptyHeroTitle,
|
|
25978
|
+
{
|
|
25979
|
+
label: emptyLabel,
|
|
25980
|
+
providerLabel: emptyProvider,
|
|
25981
|
+
providerSelectLabel,
|
|
25982
|
+
providerTargets,
|
|
25983
|
+
selectedProviderTarget,
|
|
25984
|
+
onProviderSelect
|
|
25985
|
+
}
|
|
25986
|
+
) }),
|
|
25383
25987
|
inlineNoticeChrome ? /* @__PURE__ */ jsx31(
|
|
25384
25988
|
AgentSessionChrome,
|
|
25385
25989
|
{
|
|
@@ -25399,13 +26003,21 @@ var AgentGUIProviderReadinessGatePane = memo(
|
|
|
25399
26003
|
function AgentGUIProviderReadinessGatePane2({
|
|
25400
26004
|
provider,
|
|
25401
26005
|
gate,
|
|
26006
|
+
showAllProviders = false,
|
|
25402
26007
|
labels
|
|
25403
26008
|
}) {
|
|
25404
26009
|
"use memo";
|
|
25405
26010
|
const heroIconUrl = resolveAgentGUIHeroIconUrl(provider);
|
|
26011
|
+
const launchpadIconPresentations = useMemo10(
|
|
26012
|
+
() => agentGUILaunchpadIconPresentations(),
|
|
26013
|
+
[]
|
|
26014
|
+
);
|
|
25406
26015
|
const pendingAction = gate.pendingAction ?? null;
|
|
25407
26016
|
const isPending = pendingAction !== null;
|
|
25408
|
-
const
|
|
26017
|
+
const showAllProvidersChecking = showAllProviders && gate.status === "checking";
|
|
26018
|
+
const content = providerGateContent(gate.status, labels, {
|
|
26019
|
+
showAllProviders: showAllProvidersChecking
|
|
26020
|
+
});
|
|
25409
26021
|
const action = providerGateAction(gate.status);
|
|
25410
26022
|
const pendingLabel = pendingAction === "install" ? labels.providerGatePendingInstall : pendingAction === "login" ? labels.providerGatePendingLogin : pendingAction === "refresh" ? labels.providerGatePendingRefresh : null;
|
|
25411
26023
|
return /* @__PURE__ */ jsx31("div", { className: AgentGUINode_styles_default.emptyHero, children: /* @__PURE__ */ jsxs17(
|
|
@@ -25415,7 +26027,13 @@ var AgentGUIProviderReadinessGatePane = memo(
|
|
|
25415
26027
|
"data-testid": "agent-gui-provider-readiness-gate",
|
|
25416
26028
|
role: "status",
|
|
25417
26029
|
children: [
|
|
25418
|
-
/* @__PURE__ */ jsx31(
|
|
26030
|
+
showAllProvidersChecking ? /* @__PURE__ */ jsx31(
|
|
26031
|
+
AgentGUIAllProviderGridIcon,
|
|
26032
|
+
{
|
|
26033
|
+
className: AgentGUINode_styles_default.emptyHeroLaunchpadIcon,
|
|
26034
|
+
icons: launchpadIconPresentations
|
|
26035
|
+
}
|
|
26036
|
+
) : /* @__PURE__ */ jsx31(
|
|
25419
26037
|
"img",
|
|
25420
26038
|
{
|
|
25421
26039
|
"aria-hidden": "true",
|
|
@@ -25435,7 +26053,7 @@ var AgentGUIProviderReadinessGatePane = memo(
|
|
|
25435
26053
|
children: pendingLabel
|
|
25436
26054
|
}
|
|
25437
26055
|
) : null,
|
|
25438
|
-
action ? /* @__PURE__ */
|
|
26056
|
+
action ? /* @__PURE__ */ jsx31(
|
|
25439
26057
|
Button,
|
|
25440
26058
|
{
|
|
25441
26059
|
type: "button",
|
|
@@ -25452,10 +26070,20 @@ var AgentGUIProviderReadinessGatePane = memo(
|
|
|
25452
26070
|
}
|
|
25453
26071
|
gate.onAction?.(provider, action);
|
|
25454
26072
|
},
|
|
25455
|
-
children:
|
|
25456
|
-
|
|
25457
|
-
|
|
25458
|
-
|
|
26073
|
+
children: isPending && pendingLabel ? pendingLabel : content.actionLabel
|
|
26074
|
+
}
|
|
26075
|
+
) : content.actionLabel ? /* @__PURE__ */ jsx31(
|
|
26076
|
+
Button,
|
|
26077
|
+
{
|
|
26078
|
+
type: "button",
|
|
26079
|
+
className: cn3(
|
|
26080
|
+
AgentGUINode_styles_default.emptyProviderGateAction,
|
|
26081
|
+
"nodrag tsh-desktop-no-drag [-webkit-app-region:no-drag]"
|
|
26082
|
+
),
|
|
26083
|
+
"data-testid": "agent-gui-provider-readiness-gate-action",
|
|
26084
|
+
disabled: true,
|
|
26085
|
+
onPointerDown: (event) => event.stopPropagation(),
|
|
26086
|
+
children: content.actionLabel
|
|
25459
26087
|
}
|
|
25460
26088
|
) : null
|
|
25461
26089
|
]
|
|
@@ -25463,12 +26091,12 @@ var AgentGUIProviderReadinessGatePane = memo(
|
|
|
25463
26091
|
) });
|
|
25464
26092
|
}
|
|
25465
26093
|
);
|
|
25466
|
-
function providerGateContent(status, labels) {
|
|
26094
|
+
function providerGateContent(status, labels, options = {}) {
|
|
25467
26095
|
switch (status) {
|
|
25468
26096
|
case "checking":
|
|
25469
26097
|
return {
|
|
25470
26098
|
title: labels.providerGateCheckingTitle,
|
|
25471
|
-
description: labels.providerGateCheckingDescription
|
|
26099
|
+
description: options.showAllProviders === true ? labels.providerGateCheckingAgentsDescription : labels.providerGateCheckingDescription
|
|
25472
26100
|
};
|
|
25473
26101
|
case "not_installed":
|
|
25474
26102
|
return {
|
|
@@ -25482,6 +26110,12 @@ function providerGateContent(status, labels) {
|
|
|
25482
26110
|
description: labels.providerGateLoginDescription,
|
|
25483
26111
|
actionLabel: labels.providerGateLoginAction
|
|
25484
26112
|
};
|
|
26113
|
+
case "coming_soon":
|
|
26114
|
+
return {
|
|
26115
|
+
title: labels.providerGateComingSoonTitle,
|
|
26116
|
+
description: labels.providerGateComingSoonDescription,
|
|
26117
|
+
actionLabel: labels.providerGateComingSoonAction
|
|
26118
|
+
};
|
|
25485
26119
|
case "unavailable":
|
|
25486
26120
|
return {
|
|
25487
26121
|
title: labels.providerGateUnavailableTitle,
|
|
@@ -25498,27 +26132,167 @@ function providerGateAction(status) {
|
|
|
25498
26132
|
return "login";
|
|
25499
26133
|
case "unavailable":
|
|
25500
26134
|
return "refresh";
|
|
26135
|
+
case "coming_soon":
|
|
25501
26136
|
case "checking":
|
|
25502
26137
|
return null;
|
|
25503
26138
|
}
|
|
25504
26139
|
}
|
|
26140
|
+
function AgentGUIAllProviderGridIcon({
|
|
26141
|
+
activeProvider,
|
|
26142
|
+
className,
|
|
26143
|
+
icons
|
|
26144
|
+
}) {
|
|
26145
|
+
return /* @__PURE__ */ jsx31(
|
|
26146
|
+
"span",
|
|
26147
|
+
{
|
|
26148
|
+
"aria-hidden": "true",
|
|
26149
|
+
className: [AgentGUINode_styles_default.providerRailAvatar, className].filter(Boolean).join(" "),
|
|
26150
|
+
children: /* @__PURE__ */ jsx31(
|
|
26151
|
+
AgentGUILaunchpadIconGrid,
|
|
26152
|
+
{
|
|
26153
|
+
activeProvider,
|
|
26154
|
+
icons
|
|
26155
|
+
}
|
|
26156
|
+
)
|
|
26157
|
+
}
|
|
26158
|
+
);
|
|
26159
|
+
}
|
|
26160
|
+
function AgentGUILaunchpadIconGrid({
|
|
26161
|
+
activeProvider,
|
|
26162
|
+
icons
|
|
26163
|
+
}) {
|
|
26164
|
+
const normalizedActiveProvider = activeProvider ? normalizeManagedAgentProvider(activeProvider) : null;
|
|
26165
|
+
return /* @__PURE__ */ jsx31("span", { "aria-hidden": "true", className: AgentGUINode_styles_default.providerRailLaunchpadIcon, children: icons.map((icon) => {
|
|
26166
|
+
return /* @__PURE__ */ jsx31(
|
|
26167
|
+
"span",
|
|
26168
|
+
{
|
|
26169
|
+
className: AgentGUINode_styles_default.providerRailLaunchpadItem,
|
|
26170
|
+
"data-provider-active": normalizedActiveProvider === null ? void 0 : normalizeManagedAgentProvider(icon.provider) === normalizedActiveProvider,
|
|
26171
|
+
children: /* @__PURE__ */ jsx31(AgentGUIProviderIconVisual, { imageClassName: "", icon })
|
|
26172
|
+
},
|
|
26173
|
+
`${icon.provider}:${icon.iconUrl}`
|
|
26174
|
+
);
|
|
26175
|
+
}) });
|
|
26176
|
+
}
|
|
26177
|
+
function AgentGUIProviderIconVisual({
|
|
26178
|
+
ariaHidden = false,
|
|
26179
|
+
icon,
|
|
26180
|
+
imageClassName
|
|
26181
|
+
}) {
|
|
26182
|
+
return /* @__PURE__ */ jsx31(
|
|
26183
|
+
"img",
|
|
26184
|
+
{
|
|
26185
|
+
alt: "",
|
|
26186
|
+
"aria-hidden": ariaHidden ? "true" : void 0,
|
|
26187
|
+
className: imageClassName,
|
|
26188
|
+
draggable: false,
|
|
26189
|
+
src: icon.iconUrl
|
|
26190
|
+
}
|
|
26191
|
+
);
|
|
26192
|
+
}
|
|
25505
26193
|
function EmptyHeroTitle({
|
|
25506
26194
|
label,
|
|
25507
|
-
providerLabel
|
|
26195
|
+
providerLabel,
|
|
26196
|
+
providerSelectLabel,
|
|
26197
|
+
providerTargets = [],
|
|
26198
|
+
selectedProviderTarget = null,
|
|
26199
|
+
onProviderSelect
|
|
25508
26200
|
}) {
|
|
25509
26201
|
const providerStart = providerLabel ? label.indexOf(providerLabel) : -1;
|
|
25510
26202
|
if (!shouldEmphasizeEmptyHeroProvider(label) || providerStart < 0) {
|
|
25511
26203
|
return /* @__PURE__ */ jsx31(Fragment8, { children: label });
|
|
25512
26204
|
}
|
|
25513
26205
|
const providerEnd = providerStart + providerLabel.length;
|
|
26206
|
+
const selectedProviderTargetId = selectedProviderTarget?.targetId ?? `local:${selectedProviderTarget?.provider ?? ""}`;
|
|
26207
|
+
const canSwitchProvider = providerTargets.length > 1 && selectedProviderTarget && onProviderSelect;
|
|
26208
|
+
const providerName = label.slice(providerStart, providerEnd);
|
|
25514
26209
|
return /* @__PURE__ */ jsxs17(Fragment8, { children: [
|
|
25515
26210
|
label.slice(0, providerStart),
|
|
25516
|
-
/* @__PURE__ */
|
|
26211
|
+
canSwitchProvider ? /* @__PURE__ */ jsxs17(
|
|
26212
|
+
Select3,
|
|
26213
|
+
{
|
|
26214
|
+
value: selectedProviderTargetId,
|
|
26215
|
+
onValueChange: (nextTargetId) => {
|
|
26216
|
+
const target = providerTargets.find(
|
|
26217
|
+
(candidate) => candidate.targetId === nextTargetId
|
|
26218
|
+
);
|
|
26219
|
+
if (!target || target.disabled === true) {
|
|
26220
|
+
return;
|
|
26221
|
+
}
|
|
26222
|
+
onProviderSelect({
|
|
26223
|
+
provider: target.provider,
|
|
26224
|
+
providerTargetId: target.targetId
|
|
26225
|
+
});
|
|
26226
|
+
},
|
|
26227
|
+
children: [
|
|
26228
|
+
/* @__PURE__ */ jsx31(
|
|
26229
|
+
SelectTrigger3,
|
|
26230
|
+
{
|
|
26231
|
+
size: "sm",
|
|
26232
|
+
"aria-label": providerSelectLabel,
|
|
26233
|
+
title: providerSelectLabel,
|
|
26234
|
+
className: AgentGUINode_styles_default.emptyHeroProviderSelect,
|
|
26235
|
+
children: /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.emptyHeroProvider, children: providerName })
|
|
26236
|
+
}
|
|
26237
|
+
),
|
|
26238
|
+
/* @__PURE__ */ jsx31(
|
|
26239
|
+
SelectContent3,
|
|
26240
|
+
{
|
|
26241
|
+
align: "center",
|
|
26242
|
+
className: cn3(AgentGUINode_styles_default.composerMenuContent, "min-w-[190px]"),
|
|
26243
|
+
children: providerTargets.map((target) => /* @__PURE__ */ jsx31(
|
|
26244
|
+
SelectItem3,
|
|
26245
|
+
{
|
|
26246
|
+
value: target.targetId,
|
|
26247
|
+
className: cn3(
|
|
26248
|
+
AgentGUINode_styles_default.composerMenuItem,
|
|
26249
|
+
"gap-2 data-[disabled]:cursor-not-allowed data-[disabled]:opacity-30 data-[disabled]:text-[var(--text-disabled,var(--text-tertiary))]",
|
|
26250
|
+
target.disabled === true ? "cursor-not-allowed opacity-30" : null
|
|
26251
|
+
),
|
|
26252
|
+
disabled: target.disabled === true,
|
|
26253
|
+
children: /* @__PURE__ */ jsxs17("span", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
26254
|
+
/* @__PURE__ */ jsx31(
|
|
26255
|
+
"img",
|
|
26256
|
+
{
|
|
26257
|
+
alt: "",
|
|
26258
|
+
"aria-hidden": "true",
|
|
26259
|
+
className: cn3(
|
|
26260
|
+
"size-4 shrink-0 rounded-[4px]",
|
|
26261
|
+
target.disabled === true ? "grayscale opacity-30" : null
|
|
26262
|
+
),
|
|
26263
|
+
src: agentGUIProviderIconPresentation(
|
|
26264
|
+
target.provider,
|
|
26265
|
+
target.iconUrl
|
|
26266
|
+
).iconUrl
|
|
26267
|
+
}
|
|
26268
|
+
),
|
|
26269
|
+
/* @__PURE__ */ jsx31(
|
|
26270
|
+
"span",
|
|
26271
|
+
{
|
|
26272
|
+
className: cn3(
|
|
26273
|
+
"min-w-0 truncate",
|
|
26274
|
+
target.disabled === true ? "text-[var(--text-disabled,var(--text-tertiary))]" : null
|
|
26275
|
+
),
|
|
26276
|
+
children: target.label
|
|
26277
|
+
}
|
|
26278
|
+
)
|
|
26279
|
+
] })
|
|
26280
|
+
},
|
|
26281
|
+
`${target.provider}:${target.targetId}`
|
|
26282
|
+
))
|
|
26283
|
+
}
|
|
26284
|
+
)
|
|
26285
|
+
]
|
|
26286
|
+
}
|
|
26287
|
+
) : /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.emptyHeroProvider, children: providerName }),
|
|
25517
26288
|
label.slice(providerEnd)
|
|
25518
26289
|
] });
|
|
25519
26290
|
}
|
|
25520
26291
|
var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
|
|
25521
26292
|
bottomDockRef,
|
|
26293
|
+
showScrollToBottom,
|
|
26294
|
+
scrollToBottomLabel,
|
|
26295
|
+
onScrollToBottom,
|
|
25522
26296
|
bottomDockLiftedPrompt,
|
|
25523
26297
|
bottomDockReplacementPrompt,
|
|
25524
26298
|
store,
|
|
@@ -25531,7 +26305,9 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
|
|
|
25531
26305
|
onAuthLogin,
|
|
25532
26306
|
onRetryActivation,
|
|
25533
26307
|
onContinueInNewConversation,
|
|
25534
|
-
onSubmitBottomDockInteractivePrompt
|
|
26308
|
+
onSubmitBottomDockInteractivePrompt,
|
|
26309
|
+
onGoalControl,
|
|
26310
|
+
goalPauseSupported
|
|
25535
26311
|
}) {
|
|
25536
26312
|
"use memo";
|
|
25537
26313
|
const state = useSnapshot(store);
|
|
@@ -25547,6 +26323,7 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
|
|
|
25547
26323
|
const goalStatus = goal ? stringValue2(goal.status) : "";
|
|
25548
26324
|
const goalTokenBudget = goal ? numberValue2(goal.tokenBudget) : null;
|
|
25549
26325
|
const goalTokensUsed = goal ? numberValue2(goal.tokensUsed) : null;
|
|
26326
|
+
const goalTimeUsedSeconds = goal ? numberValue2(goal.timeUsedSeconds) : null;
|
|
25550
26327
|
const showGoalBanner = isGoalBannerVisible(goalObjective, goalStatus);
|
|
25551
26328
|
return /* @__PURE__ */ jsxs17(
|
|
25552
26329
|
"div",
|
|
@@ -25555,6 +26332,22 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
|
|
|
25555
26332
|
className: AgentGUINode_styles_default.bottomDock,
|
|
25556
26333
|
"data-testid": "agent-gui-bottom-dock",
|
|
25557
26334
|
children: [
|
|
26335
|
+
showScrollToBottom ? /* @__PURE__ */ jsx31(
|
|
26336
|
+
"button",
|
|
26337
|
+
{
|
|
26338
|
+
type: "button",
|
|
26339
|
+
className: cn3(
|
|
26340
|
+
AgentGUINode_styles_default.bottomDockScrollToBottom,
|
|
26341
|
+
"nodrag tsh-desktop-no-drag [-webkit-app-region:no-drag]"
|
|
26342
|
+
),
|
|
26343
|
+
"data-testid": "agent-gui-scroll-to-bottom",
|
|
26344
|
+
"aria-label": scrollToBottomLabel,
|
|
26345
|
+
title: scrollToBottomLabel,
|
|
26346
|
+
onPointerDown: (event) => event.stopPropagation(),
|
|
26347
|
+
onClick: onScrollToBottom,
|
|
26348
|
+
children: /* @__PURE__ */ jsx31(ChevronsDown, { "aria-hidden": "true", size: 15, strokeWidth: 2.2 })
|
|
26349
|
+
}
|
|
26350
|
+
) : null,
|
|
25558
26351
|
bottomDockLiftedPrompt ? /* @__PURE__ */ jsx31(
|
|
25559
26352
|
"div",
|
|
25560
26353
|
{
|
|
@@ -25606,7 +26399,12 @@ var AgentGUIBottomDockPane = memo(function AgentGUIBottomDockPane2({
|
|
|
25606
26399
|
status: goalStatus,
|
|
25607
26400
|
tokenBudget: goalTokenBudget ?? void 0,
|
|
25608
26401
|
tokensUsed: goalTokensUsed ?? void 0,
|
|
25609
|
-
|
|
26402
|
+
timeUsedSeconds: goalTimeUsedSeconds ?? void 0,
|
|
26403
|
+
labels: goalBannerLabels,
|
|
26404
|
+
onEditObjective: (objective) => onGoalControl("set", objective),
|
|
26405
|
+
onPauseGoal: goalPauseSupported ? () => onGoalControl("pause") : void 0,
|
|
26406
|
+
onResumeGoal: goalPauseSupported ? () => onGoalControl("resume") : void 0,
|
|
26407
|
+
onClearGoal: () => onGoalControl("clear")
|
|
25610
26408
|
}
|
|
25611
26409
|
) : null,
|
|
25612
26410
|
bottomDockReplacementPrompt ? /* @__PURE__ */ jsx31(
|
|
@@ -25643,7 +26441,7 @@ function syncAgentGUIConversationRailStore(store, next) {
|
|
|
25643
26441
|
Object.assign(store, next);
|
|
25644
26442
|
}
|
|
25645
26443
|
function agentGUIConversationRailStoreSnapshotsEqual(current, next) {
|
|
25646
|
-
return current.activeConversationId === next.activeConversationId && current.pendingDeleteConversationId === next.pendingDeleteConversationId && current.isLoadingConversations === next.isLoadingConversations && current.isDeletingConversation === next.isDeletingConversation && current.isDeletingProjectConversations === next.isDeletingProjectConversations && current.labels === next.labels && current.workspaceUserProjectI18n === next.workspaceUserProjectI18n && current.uiLanguage === next.uiLanguage && current.previewMode === next.previewMode && current.createConversationDisabled === next.createConversationDisabled && current.openclawGateway === next.openclawGateway && current.isCollapsed === next.isCollapsed && current.railConfigProvider === next.railConfigProvider && current.slashStatusLimits === next.slashStatusLimits && current.selectedProviderTarget === next.selectedProviderTarget && current.providerTargets === next.providerTargets && current.providerTargetsLoading === next.providerTargetsLoading && current.
|
|
26444
|
+
return current.activeConversationId === next.activeConversationId && current.pendingDeleteConversationId === next.pendingDeleteConversationId && current.isLoadingConversations === next.isLoadingConversations && current.isDeletingConversation === next.isDeletingConversation && current.isDeletingProjectConversations === next.isDeletingProjectConversations && current.labels === next.labels && current.workspaceUserProjectI18n === next.workspaceUserProjectI18n && current.uiLanguage === next.uiLanguage && current.previewMode === next.previewMode && current.createConversationDisabled === next.createConversationDisabled && current.openclawGateway === next.openclawGateway && current.isCollapsed === next.isCollapsed && current.railConfigProvider === next.railConfigProvider && current.slashStatusLimits === next.slashStatusLimits && current.selectedProviderTarget === next.selectedProviderTarget && current.providerTargets === next.providerTargets && current.providerTargetsLoading === next.providerTargetsLoading && current.conversationFilter === next.conversationFilter && current.sectionAgentTargetFallbackId === next.sectionAgentTargetFallbackId && current.onUpdateConversationFilter === next.onUpdateConversationFilter && current.onSelectConversationFilterTarget === next.onSelectConversationFilterTarget && current.onCreateConversation === next.onCreateConversation && current.onOpenAgentEnvSetup === next.onOpenAgentEnvSetup && current.onRetryOpenclawGateway === next.onRetryOpenclawGateway && current.onSelectConversation === next.onSelectConversation && current.onToggleConversationPinned === next.onToggleConversationPinned && current.onOpenProjectFiles === next.onOpenProjectFiles && current.onOpenConversationWindow === next.onOpenConversationWindow && current.selectProjectDirectory === next.selectProjectDirectory && current.onRemoveProject === next.onRemoveProject && current.onConfirmDeleteProjectConversations === next.onConfirmDeleteProjectConversations && current.onRequestDeleteConversation === next.onRequestDeleteConversation && current.onCancelDeleteConversation === next.onCancelDeleteConversation && current.onConfirmDeleteConversation === next.onConfirmDeleteConversation;
|
|
25647
26445
|
}
|
|
25648
26446
|
var AgentGUIConversationRailStorePane = memo(
|
|
25649
26447
|
function AgentGUIConversationRailStorePane2({
|
|
@@ -25868,18 +26666,51 @@ function conversationProjectsRenderEqual2(left, right) {
|
|
|
25868
26666
|
return left === right || (!left || !right ? !left && !right : left.id === right.id && left.path === right.path && left.label === right.label && left.createdAtUnixMs === right.createdAtUnixMs && left.updatedAtUnixMs === right.updatedAtUnixMs && left.lastUsedAtUnixMs === right.lastUsedAtUnixMs);
|
|
25869
26667
|
}
|
|
25870
26668
|
var agentGUIProviderRailOrder = [
|
|
25871
|
-
"nexight",
|
|
25872
|
-
"claude-code",
|
|
25873
26669
|
"codex",
|
|
25874
|
-
"
|
|
26670
|
+
"claude-code",
|
|
26671
|
+
"nexight",
|
|
25875
26672
|
"hermes",
|
|
26673
|
+
"openclaw",
|
|
25876
26674
|
"gemini"
|
|
25877
26675
|
];
|
|
26676
|
+
var agentGUIProviderRailDefaultProviders = [
|
|
26677
|
+
"codex",
|
|
26678
|
+
"claude-code",
|
|
26679
|
+
"nexight",
|
|
26680
|
+
"hermes",
|
|
26681
|
+
"openclaw"
|
|
26682
|
+
];
|
|
26683
|
+
var agentGUIProviderRailDisabledProviders = /* @__PURE__ */ new Set([
|
|
26684
|
+
"nexight",
|
|
26685
|
+
"hermes",
|
|
26686
|
+
"openclaw"
|
|
26687
|
+
]);
|
|
25878
26688
|
function agentGUIProviderRailOrderIndex(provider) {
|
|
25879
26689
|
const index = agentGUIProviderRailOrder.indexOf(provider);
|
|
25880
26690
|
return index < 0 ? agentGUIProviderRailOrder.length : index;
|
|
25881
26691
|
}
|
|
26692
|
+
function agentGUILaunchpadIconPresentations() {
|
|
26693
|
+
return [
|
|
26694
|
+
agentGUIProviderRailIconPresentation("codex"),
|
|
26695
|
+
agentGUIProviderRailIconPresentation("claude-code"),
|
|
26696
|
+
agentGUIProviderRailIconPresentation("tutti"),
|
|
26697
|
+
agentGUIProviderRailIconPresentation("hermes")
|
|
26698
|
+
];
|
|
26699
|
+
}
|
|
26700
|
+
function agentGUIConversationProviderIconUrl(provider) {
|
|
26701
|
+
switch (normalizeManagedAgentProvider(provider)) {
|
|
26702
|
+
case "claude-code":
|
|
26703
|
+
return claudecode_flat_filled_default;
|
|
26704
|
+
case "codex":
|
|
26705
|
+
return codex_flat_filled_default;
|
|
26706
|
+
default:
|
|
26707
|
+
return null;
|
|
26708
|
+
}
|
|
26709
|
+
}
|
|
25882
26710
|
function agentGUIProviderRailLabel(provider, targetLabel, labels) {
|
|
26711
|
+
if (provider === "nexight" && targetLabel === "Tutti Agent") {
|
|
26712
|
+
return labels.conversationFilterTutti;
|
|
26713
|
+
}
|
|
25883
26714
|
if (targetLabel.trim() && targetLabel !== provider) {
|
|
25884
26715
|
return targetLabel;
|
|
25885
26716
|
}
|
|
@@ -25894,21 +26725,51 @@ function agentGUIProviderRailLabel(provider, targetLabel, labels) {
|
|
|
25894
26725
|
function agentGUIProviderTargetMatchesConversationFilter(target, filter) {
|
|
25895
26726
|
return filter.kind === "agentTarget" && (target.agentTargetId?.trim() ?? "") === filter.agentTargetId;
|
|
25896
26727
|
}
|
|
26728
|
+
function agentGUIProviderRailTargets(providerTargets, providerTargetsLoading) {
|
|
26729
|
+
if (providerTargetsLoading) {
|
|
26730
|
+
return [];
|
|
26731
|
+
}
|
|
26732
|
+
const source = providerTargets.length > 0 && !agentGUIProviderRailTargetsAreFullLocalFallback(providerTargets) ? providerTargets : [];
|
|
26733
|
+
const seenProviders = new Set(source.map((target) => target.provider));
|
|
26734
|
+
const missingDefaultProviders = agentGUIProviderRailDefaultProviders.filter(
|
|
26735
|
+
(provider) => !seenProviders.has(provider)
|
|
26736
|
+
);
|
|
26737
|
+
if (source.length > 0 && missingDefaultProviders.length === 0) {
|
|
26738
|
+
return source;
|
|
26739
|
+
}
|
|
26740
|
+
return [
|
|
26741
|
+
...source,
|
|
26742
|
+
...missingDefaultProviders.map(
|
|
26743
|
+
(provider) => agentGUIProviderRailDisabledProviders.has(provider) ? createDisabledPlaceholderAgentGUIProviderTarget(provider) : createLocalAgentGUIProviderTarget(provider)
|
|
26744
|
+
)
|
|
26745
|
+
];
|
|
26746
|
+
}
|
|
26747
|
+
function agentGUIProviderRailTargetsAreFullLocalFallback(providerTargets) {
|
|
26748
|
+
if (providerTargets.length !== agentGUIProviderRailOrder.length) {
|
|
26749
|
+
return false;
|
|
26750
|
+
}
|
|
26751
|
+
const fallbackProviders = new Set(agentGUIProviderRailOrder);
|
|
26752
|
+
return providerTargets.every(
|
|
26753
|
+
(target) => fallbackProviders.has(target.provider) && target.ref.kind === "local" && target.ref.provider === target.provider && target.targetId === `local:${target.provider}`
|
|
26754
|
+
);
|
|
26755
|
+
}
|
|
25897
26756
|
var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
|
|
25898
26757
|
conversationFilter,
|
|
25899
26758
|
labels,
|
|
25900
26759
|
previewMode,
|
|
26760
|
+
selectedProviderTarget,
|
|
25901
26761
|
providerTargets,
|
|
25902
26762
|
providerTargetsLoading,
|
|
25903
26763
|
onSelectConversationFilterTarget,
|
|
25904
26764
|
onUpdateConversationFilter
|
|
25905
26765
|
}) {
|
|
25906
26766
|
"use memo";
|
|
26767
|
+
const railProviderTargets = useMemo10(
|
|
26768
|
+
() => agentGUIProviderRailTargets(providerTargets, providerTargetsLoading),
|
|
26769
|
+
[providerTargets, providerTargetsLoading]
|
|
26770
|
+
);
|
|
25907
26771
|
const providerTiles = useMemo10(() => {
|
|
25908
|
-
const
|
|
25909
|
-
(target) => target.disabled !== true
|
|
25910
|
-
);
|
|
25911
|
-
const targets = [...enabledTargets];
|
|
26772
|
+
const targets = [...railProviderTargets];
|
|
25912
26773
|
const originalIndexByTarget = /* @__PURE__ */ new Map();
|
|
25913
26774
|
targets.forEach((target, index) => {
|
|
25914
26775
|
originalIndexByTarget.set(
|
|
@@ -25925,12 +26786,31 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
|
|
|
25925
26786
|
`${right.provider}\0${right.targetId}`
|
|
25926
26787
|
) ?? 0);
|
|
25927
26788
|
});
|
|
25928
|
-
}, [
|
|
25929
|
-
const
|
|
26789
|
+
}, [railProviderTargets]);
|
|
26790
|
+
const launchpadIconPresentations = useMemo10(
|
|
26791
|
+
() => agentGUILaunchpadIconPresentations(),
|
|
26792
|
+
[]
|
|
26793
|
+
);
|
|
26794
|
+
const selectedProviderTargetIsPlaceholder = selectedProviderTarget?.disabled === true;
|
|
26795
|
+
const allTileSelected = conversationFilter.kind === "all" && !selectedProviderTargetIsPlaceholder;
|
|
25930
26796
|
const selectAllProviders = useCallback10(() => {
|
|
25931
26797
|
onUpdateConversationFilter({ kind: "all" });
|
|
25932
|
-
|
|
25933
|
-
|
|
26798
|
+
if (selectedProviderTargetIsPlaceholder) {
|
|
26799
|
+
const fallbackTarget = railProviderTargets.find((target) => target.disabled !== true) ?? null;
|
|
26800
|
+
if (fallbackTarget) {
|
|
26801
|
+
onSelectConversationFilterTarget({
|
|
26802
|
+
provider: fallbackTarget.provider,
|
|
26803
|
+
providerTargetId: fallbackTarget.targetId
|
|
26804
|
+
});
|
|
26805
|
+
}
|
|
26806
|
+
}
|
|
26807
|
+
}, [
|
|
26808
|
+
onSelectConversationFilterTarget,
|
|
26809
|
+
onUpdateConversationFilter,
|
|
26810
|
+
railProviderTargets,
|
|
26811
|
+
selectedProviderTargetIsPlaceholder
|
|
26812
|
+
]);
|
|
26813
|
+
const selectAgentTargetTile = useCallback10(
|
|
25934
26814
|
(target) => {
|
|
25935
26815
|
onSelectConversationFilterTarget({
|
|
25936
26816
|
provider: target.provider,
|
|
@@ -25947,23 +26827,22 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
|
|
|
25947
26827
|
"aria-label": labels.providerSwitchLabel,
|
|
25948
26828
|
"aria-busy": providerTargetsLoading,
|
|
25949
26829
|
children: [
|
|
25950
|
-
/* @__PURE__ */
|
|
26830
|
+
/* @__PURE__ */ jsx31(
|
|
25951
26831
|
"button",
|
|
25952
26832
|
{
|
|
25953
26833
|
type: "button",
|
|
25954
26834
|
role: "tab",
|
|
26835
|
+
"aria-label": labels.conversationFilterAll,
|
|
25955
26836
|
"aria-selected": allTileSelected,
|
|
25956
26837
|
className: AgentGUINode_styles_default.providerRailTile,
|
|
25957
26838
|
"data-selected": allTileSelected ? "true" : "false",
|
|
25958
26839
|
disabled: previewMode,
|
|
25959
26840
|
onClick: selectAllProviders,
|
|
25960
|
-
children:
|
|
25961
|
-
/* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.providerRailAvatar, children: /* @__PURE__ */ jsx31(LayoutGrid, { "aria-hidden": true, className: AgentGUINode_styles_default.providerRailAvatarIcon }) }),
|
|
25962
|
-
/* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.providerRailTileLabel, children: labels.conversationFilterAll })
|
|
25963
|
-
]
|
|
26841
|
+
children: /* @__PURE__ */ jsx31(AgentGUIAllProviderGridIcon, { icons: launchpadIconPresentations })
|
|
25964
26842
|
}
|
|
25965
26843
|
),
|
|
25966
|
-
|
|
26844
|
+
/* @__PURE__ */ jsx31("span", { "aria-hidden": "true", className: AgentGUINode_styles_default.providerRailSeparator }),
|
|
26845
|
+
providerTargetsLoading ? [0, 1, 2].map((index) => /* @__PURE__ */ jsx31(
|
|
25967
26846
|
"button",
|
|
25968
26847
|
{
|
|
25969
26848
|
type: "button",
|
|
@@ -25973,49 +26852,54 @@ var AgentGUIProviderRail = memo(function AgentGUIProviderRail2({
|
|
|
25973
26852
|
"data-loading": "true",
|
|
25974
26853
|
"data-selected": "false",
|
|
25975
26854
|
disabled: true,
|
|
25976
|
-
children:
|
|
25977
|
-
/* @__PURE__ */ jsx31("span", { "aria-hidden": "true", className: AgentGUINode_styles_default.providerRailAvatar }),
|
|
25978
|
-
/* @__PURE__ */ jsx31(
|
|
25979
|
-
"span",
|
|
25980
|
-
{
|
|
25981
|
-
"aria-hidden": "true",
|
|
25982
|
-
className: AgentGUINode_styles_default.providerRailTileLabel
|
|
25983
|
-
}
|
|
25984
|
-
)
|
|
25985
|
-
]
|
|
26855
|
+
children: /* @__PURE__ */ jsx31("span", { "aria-hidden": "true", className: AgentGUINode_styles_default.providerRailAvatar })
|
|
25986
26856
|
},
|
|
25987
26857
|
`provider-target-loading-${index}`
|
|
25988
26858
|
)) : null,
|
|
25989
26859
|
providerTiles.map((target) => {
|
|
25990
|
-
const providerSelected = agentGUIProviderTargetMatchesConversationFilter(
|
|
26860
|
+
const providerSelected = target.disabled === true ? selectedProviderTarget?.provider === target.provider && selectedProviderTarget?.targetId === target.targetId : agentGUIProviderTargetMatchesConversationFilter(
|
|
25991
26861
|
target,
|
|
25992
26862
|
conversationFilter
|
|
25993
26863
|
);
|
|
25994
|
-
|
|
26864
|
+
const label = agentGUIProviderRailLabel(
|
|
26865
|
+
target.provider,
|
|
26866
|
+
target.label,
|
|
26867
|
+
labels
|
|
26868
|
+
);
|
|
26869
|
+
const tile = /* @__PURE__ */ jsx31(
|
|
25995
26870
|
"button",
|
|
25996
26871
|
{
|
|
25997
26872
|
type: "button",
|
|
25998
26873
|
role: "tab",
|
|
26874
|
+
"aria-label": label,
|
|
25999
26875
|
"aria-selected": providerSelected,
|
|
26000
26876
|
className: AgentGUINode_styles_default.providerRailTile,
|
|
26877
|
+
"data-disabled": target.disabled === true ? "true" : void 0,
|
|
26878
|
+
"data-provider-tile": "true",
|
|
26001
26879
|
"data-selected": providerSelected ? "true" : "false",
|
|
26002
|
-
disabled: previewMode,
|
|
26003
|
-
onClick: () =>
|
|
26004
|
-
children:
|
|
26005
|
-
|
|
26006
|
-
|
|
26007
|
-
|
|
26008
|
-
|
|
26009
|
-
|
|
26010
|
-
|
|
26011
|
-
|
|
26012
|
-
|
|
26013
|
-
|
|
26014
|
-
|
|
26015
|
-
]
|
|
26880
|
+
disabled: previewMode || target.disabled === true,
|
|
26881
|
+
onClick: () => selectAgentTargetTile(target),
|
|
26882
|
+
children: /* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.providerRailAvatar, children: /* @__PURE__ */ jsx31(
|
|
26883
|
+
AgentGUIProviderIconVisual,
|
|
26884
|
+
{
|
|
26885
|
+
ariaHidden: true,
|
|
26886
|
+
imageClassName: AgentGUINode_styles_default.providerRailAvatarImage,
|
|
26887
|
+
icon: agentGUIProviderRailIconPresentation(
|
|
26888
|
+
target.provider,
|
|
26889
|
+
target.iconUrl
|
|
26890
|
+
)
|
|
26891
|
+
}
|
|
26892
|
+
) })
|
|
26016
26893
|
},
|
|
26017
26894
|
`${target.provider}:${target.targetId}`
|
|
26018
26895
|
);
|
|
26896
|
+
if (previewMode) {
|
|
26897
|
+
return tile;
|
|
26898
|
+
}
|
|
26899
|
+
return /* @__PURE__ */ jsxs17(Tooltip3, { children: [
|
|
26900
|
+
/* @__PURE__ */ jsx31(TooltipTrigger3, { asChild: true, children: tile }),
|
|
26901
|
+
/* @__PURE__ */ jsx31(TooltipContent3, { side: "right", sideOffset: -4, children: label })
|
|
26902
|
+
] }, `${target.provider}:${target.targetId}:tooltip`);
|
|
26019
26903
|
})
|
|
26020
26904
|
]
|
|
26021
26905
|
}
|
|
@@ -26027,18 +26911,19 @@ function useAgentGUIConversationRail({
|
|
|
26027
26911
|
conversations,
|
|
26028
26912
|
labels,
|
|
26029
26913
|
previewMode,
|
|
26914
|
+
sectionAgentTargetFallbackId,
|
|
26030
26915
|
userProjects,
|
|
26031
26916
|
workspaceId
|
|
26032
26917
|
}) {
|
|
26033
26918
|
const agentActivityRuntime = useAgentActivityRuntime();
|
|
26034
|
-
const [runtimeRailSections, setRuntimeRailSections] =
|
|
26035
|
-
const [sectionPageStates, setSectionPageStates] =
|
|
26919
|
+
const [runtimeRailSections, setRuntimeRailSections] = useState12(null);
|
|
26920
|
+
const [sectionPageStates, setSectionPageStates] = useState12(() => /* @__PURE__ */ new Map());
|
|
26036
26921
|
const pagingRequestSequenceRef = useRef12(0);
|
|
26037
26922
|
const pagingAbortControllersRef = useRef12(/* @__PURE__ */ new Map());
|
|
26038
26923
|
const runtimeListSessionSections = agentActivityRuntime.listSessionSections;
|
|
26039
26924
|
const runtimeListSessionSectionPage = agentActivityRuntime.listSessionSectionPage;
|
|
26040
26925
|
const runtimeSectionsEnabled = !previewMode && Boolean(runtimeListSessionSections) && Boolean(runtimeListSessionSectionPage);
|
|
26041
|
-
const sectionAgentTargetId = conversationFilter.kind === "agentTarget" ? conversationFilter.agentTargetId.trim() : "";
|
|
26926
|
+
const sectionAgentTargetId = conversationFilter.kind === "agentTarget" ? conversationFilter.agentTargetId.trim() : sectionAgentTargetFallbackId?.trim() ?? "";
|
|
26042
26927
|
const userProjectPaths = useMemo10(
|
|
26043
26928
|
() => userProjects.map((project) => project.path.trim()).filter((path) => path.length > 0),
|
|
26044
26929
|
[userProjects]
|
|
@@ -26054,7 +26939,7 @@ function useAgentGUIConversationRail({
|
|
|
26054
26939
|
}),
|
|
26055
26940
|
[labels.sectionConversations, labels.sectionPinned]
|
|
26056
26941
|
);
|
|
26057
|
-
|
|
26942
|
+
useEffect13(() => {
|
|
26058
26943
|
pagingRequestSequenceRef.current += 1;
|
|
26059
26944
|
for (const controller of pagingAbortControllersRef.current.values()) {
|
|
26060
26945
|
controller.abort();
|
|
@@ -26076,7 +26961,7 @@ function useAgentGUIConversationRail({
|
|
|
26076
26961
|
).join("|"),
|
|
26077
26962
|
[conversations]
|
|
26078
26963
|
);
|
|
26079
|
-
|
|
26964
|
+
useEffect13(() => {
|
|
26080
26965
|
if (!runtimeSectionsEnabled || !runtimeListSessionSections) {
|
|
26081
26966
|
return;
|
|
26082
26967
|
}
|
|
@@ -26130,7 +27015,7 @@ function useAgentGUIConversationRail({
|
|
|
26130
27015
|
userProjectPathKey,
|
|
26131
27016
|
workspaceId
|
|
26132
27017
|
]);
|
|
26133
|
-
|
|
27018
|
+
useEffect13(() => {
|
|
26134
27019
|
if (!runtimeSectionsEnabled) {
|
|
26135
27020
|
return;
|
|
26136
27021
|
}
|
|
@@ -26269,12 +27154,8 @@ var AgentGUIConversationRailPane = memo(
|
|
|
26269
27154
|
isCollapsed,
|
|
26270
27155
|
railConfigProvider,
|
|
26271
27156
|
slashStatusLimits,
|
|
26272
|
-
providerTargets,
|
|
26273
|
-
providerTargetsLoading,
|
|
26274
|
-
conversationScope,
|
|
26275
27157
|
conversationFilter,
|
|
26276
|
-
|
|
26277
|
-
onSelectConversationFilterTarget,
|
|
27158
|
+
sectionAgentTargetFallbackId,
|
|
26278
27159
|
onCreateConversation,
|
|
26279
27160
|
onOpenAgentEnvSetup,
|
|
26280
27161
|
onRetryOpenclawGateway,
|
|
@@ -26291,17 +27172,10 @@ var AgentGUIConversationRailPane = memo(
|
|
|
26291
27172
|
onConfirmDeleteConversation
|
|
26292
27173
|
}) {
|
|
26293
27174
|
"use memo";
|
|
26294
|
-
const
|
|
26295
|
-
const [
|
|
26296
|
-
const
|
|
26297
|
-
|
|
26298
|
-
);
|
|
26299
|
-
const selectConversationFilterTarget = useStableEventCallback2(
|
|
26300
|
-
onSelectConversationFilterTarget
|
|
26301
|
-
);
|
|
26302
|
-
const [collapsedProjectSectionIds, setCollapsedProjectSectionIds] = useState11(() => /* @__PURE__ */ new Set());
|
|
26303
|
-
const [currentTimeMs, setCurrentTimeMs] = useState11(() => Date.now());
|
|
26304
|
-
const [pendingProjectAction, setPendingProjectAction] = useState11(null);
|
|
27175
|
+
const [conversationQuery, setConversationQuery] = useState12("");
|
|
27176
|
+
const [collapsedProjectSectionIds, setCollapsedProjectSectionIds] = useState12(() => /* @__PURE__ */ new Set());
|
|
27177
|
+
const [currentTimeMs, setCurrentTimeMs] = useState12(() => Date.now());
|
|
27178
|
+
const [pendingProjectAction, setPendingProjectAction] = useState12(null);
|
|
26305
27179
|
const railElementRef = useRef12(null);
|
|
26306
27180
|
const conversationListRef = useRef12(null);
|
|
26307
27181
|
const conversationItemElementsRef = useRef12(
|
|
@@ -26321,10 +27195,11 @@ var AgentGUIConversationRailPane = memo(
|
|
|
26321
27195
|
conversations,
|
|
26322
27196
|
labels,
|
|
26323
27197
|
previewMode,
|
|
27198
|
+
sectionAgentTargetFallbackId,
|
|
26324
27199
|
userProjects,
|
|
26325
27200
|
workspaceId
|
|
26326
27201
|
});
|
|
26327
|
-
|
|
27202
|
+
useEffect13(() => {
|
|
26328
27203
|
const timer = window.setInterval(() => {
|
|
26329
27204
|
setCurrentTimeMs(Date.now());
|
|
26330
27205
|
}, 6e4);
|
|
@@ -26476,18 +27351,6 @@ var AgentGUIConversationRailPane = memo(
|
|
|
26476
27351
|
}
|
|
26477
27352
|
)
|
|
26478
27353
|
] }),
|
|
26479
|
-
showProviderRail ? /* @__PURE__ */ jsx31(
|
|
26480
|
-
AgentGUIProviderRail,
|
|
26481
|
-
{
|
|
26482
|
-
conversationFilter,
|
|
26483
|
-
labels,
|
|
26484
|
-
previewMode,
|
|
26485
|
-
providerTargets,
|
|
26486
|
-
providerTargetsLoading,
|
|
26487
|
-
onSelectConversationFilterTarget: selectConversationFilterTarget,
|
|
26488
|
-
onUpdateConversationFilter: updateConversationFilter
|
|
26489
|
-
}
|
|
26490
|
-
) : null,
|
|
26491
27354
|
openclawGateway?.status === "starting" ? /* @__PURE__ */ jsxs17("div", { className: AgentGUINode_styles_default.gatewayStatus, "data-state": "starting", children: [
|
|
26492
27355
|
/* @__PURE__ */ jsx31(
|
|
26493
27356
|
StatusDot,
|
|
@@ -26721,7 +27584,7 @@ var AgentGUIConversationRailSection = memo(
|
|
|
26721
27584
|
}) {
|
|
26722
27585
|
"use memo";
|
|
26723
27586
|
const isProjectSection = section.kind === "project";
|
|
26724
|
-
const [visibleItemLimit, setVisibleItemLimit] =
|
|
27587
|
+
const [visibleItemLimit, setVisibleItemLimit] = useState12(
|
|
26725
27588
|
AGENT_GUI_CONVERSATION_RAIL_SECTION_PAGE_SIZE
|
|
26726
27589
|
);
|
|
26727
27590
|
const visibleItemCount = isSectionCollapsed ? 0 : Math.min(visibleItemLimit, section.items.length);
|
|
@@ -27084,6 +27947,7 @@ var AgentGUIConversationRailItem = memo(
|
|
|
27084
27947
|
}) {
|
|
27085
27948
|
"use memo";
|
|
27086
27949
|
const pinned = (item.pinnedAtUnixMs ?? 0) > 0;
|
|
27950
|
+
const providerIconUrl = agentGUIConversationProviderIconUrl(item.provider);
|
|
27087
27951
|
const setItemElement = useCallback10(
|
|
27088
27952
|
(element) => {
|
|
27089
27953
|
registerItemElement(item.id, element);
|
|
@@ -27125,7 +27989,19 @@ var AgentGUIConversationRailItem = memo(
|
|
|
27125
27989
|
className: AgentGUINode_styles_default.conversationSelect,
|
|
27126
27990
|
onClick: handleSelect,
|
|
27127
27991
|
children: [
|
|
27128
|
-
/* @__PURE__ */
|
|
27992
|
+
/* @__PURE__ */ jsxs17("span", { className: AgentGUINode_styles_default.conversationTitleRow, children: [
|
|
27993
|
+
providerIconUrl ? /* @__PURE__ */ jsx31(
|
|
27994
|
+
"span",
|
|
27995
|
+
{
|
|
27996
|
+
"aria-hidden": "true",
|
|
27997
|
+
className: AgentGUINode_styles_default.conversationProviderIcon,
|
|
27998
|
+
style: {
|
|
27999
|
+
"--agent-gui-conversation-provider-icon-url": `url("${providerIconUrl}")`
|
|
28000
|
+
}
|
|
28001
|
+
}
|
|
28002
|
+
) : null,
|
|
28003
|
+
/* @__PURE__ */ jsx31("span", { className: AgentGUINode_styles_default.conversationTitle, children: conversationPlainTitle(item, labels, uiLanguage) })
|
|
28004
|
+
] }),
|
|
27129
28005
|
/* @__PURE__ */ jsx31(ConversationMeta, { item, nowMs: currentTimeMs, labels })
|
|
27130
28006
|
]
|
|
27131
28007
|
}
|
|
@@ -27336,6 +28212,17 @@ var AgentGUIConversationTimelinePane = memo(
|
|
|
27336
28212
|
function setTimelineScrollTopInstantly(element, top) {
|
|
27337
28213
|
element.scrollTop = top;
|
|
27338
28214
|
}
|
|
28215
|
+
function setTimelineScrollTopWithUserTransition(element, top) {
|
|
28216
|
+
const reducedMotion = typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
28217
|
+
if (typeof element.scrollTo === "function") {
|
|
28218
|
+
element.scrollTo({
|
|
28219
|
+
top,
|
|
28220
|
+
behavior: reducedMotion ? "auto" : "smooth"
|
|
28221
|
+
});
|
|
28222
|
+
return;
|
|
28223
|
+
}
|
|
28224
|
+
element.scrollTop = top;
|
|
28225
|
+
}
|
|
27339
28226
|
|
|
27340
28227
|
// agent-gui/workspaceDesktop/view/desktopDockAgentProbeTooltipModel.ts
|
|
27341
28228
|
function findWorkspaceAgentProbeForDockProvider(snapshot3, provider) {
|
|
@@ -27344,35 +28231,6 @@ function findWorkspaceAgentProbeForDockProvider(snapshot3, provider) {
|
|
|
27344
28231
|
}
|
|
27345
28232
|
return snapshot3.providers.find((p) => p.provider === provider) ?? null;
|
|
27346
28233
|
}
|
|
27347
|
-
function quotaRenderStateEquals(left, right) {
|
|
27348
|
-
return left?.quotaType === right?.quotaType && left?.percentRemaining === right?.percentRemaining && left?.resetsAtUnixMs === right?.resetsAtUnixMs && left?.resetText === right?.resetText && left?.dollarRemaining === right?.dollarRemaining && left?.modelName === right?.modelName;
|
|
27349
|
-
}
|
|
27350
|
-
function agentProbeProviderRenderStateEquals(left, right) {
|
|
27351
|
-
if (left === right) {
|
|
27352
|
-
return true;
|
|
27353
|
-
}
|
|
27354
|
-
if (!left || !right) {
|
|
27355
|
-
return left === right;
|
|
27356
|
-
}
|
|
27357
|
-
return left.provider === right.provider && left.availability.status === right.availability.status && left.availability.detailsVisible === right.availability.detailsVisible && (left.availability.checks?.length ?? 0) === (right.availability.checks?.length ?? 0) && (left.availability.checks ?? []).every((check, index) => {
|
|
27358
|
-
const next = right.availability.checks?.[index];
|
|
27359
|
-
return check.name === next?.name && check.passed === next?.passed && check.detail === next?.detail;
|
|
27360
|
-
}) && (left.usage?.accountTier ?? null) === (right.usage?.accountTier ?? null) && (left.usage?.costUsage?.dollarUsed ?? null) === (right.usage?.costUsage?.dollarUsed ?? null) && (left.usage?.costUsage?.dollarLimit ?? null) === (right.usage?.costUsage?.dollarLimit ?? null) && (left.usage?.quotas?.length ?? 0) === (right.usage?.quotas?.length ?? 0) && (left.usage?.quotas ?? []).every(
|
|
27361
|
-
(quota, index) => quotaRenderStateEquals(quota, right.usage?.quotas?.[index])
|
|
27362
|
-
) && (left.attempts?.length ?? 0) === (right.attempts?.length ?? 0) && (left.attempts ?? []).every((attempt, index) => {
|
|
27363
|
-
const next = right.attempts?.[index];
|
|
27364
|
-
return attempt.strategy === next?.strategy && attempt.success === next?.success && attempt.errorCode === next?.errorCode && attempt.errorMessage === next?.errorMessage;
|
|
27365
|
-
}) && left.lastError?.code === right.lastError?.code && left.lastError?.message === right.lastError?.message;
|
|
27366
|
-
}
|
|
27367
|
-
function workspaceAgentProbeRenderStateEqualsForProvider(left, right, provider) {
|
|
27368
|
-
if (left === right) {
|
|
27369
|
-
return true;
|
|
27370
|
-
}
|
|
27371
|
-
return (left?.isLoadingAvailability ?? false) === (right?.isLoadingAvailability ?? false) && (left?.isLoadingUsage ?? false) === (right?.isLoadingUsage ?? false) && agentProbeProviderRenderStateEquals(
|
|
27372
|
-
findWorkspaceAgentProbeForDockProvider(left?.snapshot ?? null, provider),
|
|
27373
|
-
findWorkspaceAgentProbeForDockProvider(right?.snapshot ?? null, provider)
|
|
27374
|
-
);
|
|
27375
|
-
}
|
|
27376
28234
|
function buildDockAgentProbeTooltipLines(probe, isLoadingAvailability, t, popupOpts) {
|
|
27377
28235
|
if (isLoadingAvailability && !probe) {
|
|
27378
28236
|
return [t("agentHost.workspaceAgentProbeDockChecking")];
|
|
@@ -27540,10 +28398,10 @@ function appendDockProbeUsageLines(probe, lines, isLoadingUsage, t) {
|
|
|
27540
28398
|
import { Info as Info3 } from "lucide-react";
|
|
27541
28399
|
import {
|
|
27542
28400
|
useCallback as useCallback11,
|
|
27543
|
-
useEffect as
|
|
28401
|
+
useEffect as useEffect14,
|
|
27544
28402
|
useLayoutEffect as useLayoutEffect5,
|
|
27545
28403
|
useRef as useRef13,
|
|
27546
|
-
useState as
|
|
28404
|
+
useState as useState13
|
|
27547
28405
|
} from "react";
|
|
27548
28406
|
import { createPortal as createPortal4 } from "react-dom";
|
|
27549
28407
|
import { Fragment as Fragment9, jsx as jsx32, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
@@ -27582,8 +28440,8 @@ function AgentProbeInfoPopover({
|
|
|
27582
28440
|
"use memo";
|
|
27583
28441
|
const anchorRef = useRef13(null);
|
|
27584
28442
|
const popoverRef = useRef13(null);
|
|
27585
|
-
const [isOpen, setIsOpen] =
|
|
27586
|
-
const [popoverStyle, setPopoverStyle] =
|
|
28443
|
+
const [isOpen, setIsOpen] = useState13(false);
|
|
28444
|
+
const [popoverStyle, setPopoverStyle] = useState13(null);
|
|
27587
28445
|
const openPopover = useCallback11(() => {
|
|
27588
28446
|
if (!isOpen) {
|
|
27589
28447
|
onOpen?.();
|
|
@@ -27623,7 +28481,7 @@ function AgentProbeInfoPopover({
|
|
|
27623
28481
|
maxWidth: availableWidth
|
|
27624
28482
|
});
|
|
27625
28483
|
}, []);
|
|
27626
|
-
|
|
28484
|
+
useEffect14(() => {
|
|
27627
28485
|
if (!isOpen) {
|
|
27628
28486
|
return;
|
|
27629
28487
|
}
|
|
@@ -28019,9 +28877,6 @@ function normalizeSlashStatusModelName(value) {
|
|
|
28019
28877
|
return value?.trim().toLowerCase().replace(/[^a-z0-9]+/gu, "-").replace(/^-+|-+$/gu, "") ?? "";
|
|
28020
28878
|
}
|
|
28021
28879
|
function resolveAgentGUIRailStatusProvider(input) {
|
|
28022
|
-
if (input.conversationScope !== "multi-provider") {
|
|
28023
|
-
return input.activeProvider;
|
|
28024
|
-
}
|
|
28025
28880
|
const filter = input.conversationFilter;
|
|
28026
28881
|
if (filter.kind !== "agentTarget") {
|
|
28027
28882
|
return null;
|
|
@@ -28073,11 +28928,7 @@ function composerOverridesByAgentTargetIdEqual(left, right) {
|
|
|
28073
28928
|
return true;
|
|
28074
28929
|
}
|
|
28075
28930
|
function areAgentGUINodePropsEqual(previous, next) {
|
|
28076
|
-
return previous.nodeId === next.nodeId && previous.workspaceId === next.workspaceId && previous.currentUserId === next.currentUserId && previous.workspacePath === next.workspacePath && previous.workspaceFileReferenceAdapter === next.workspaceFileReferenceAdapter && previous.resolveDroppedFileReferences === next.resolveDroppedFileReferences && previous.selectProjectDirectory === next.selectProjectDirectory && previous.referenceSourceAggregator === next.referenceSourceAggregator && previous.resolveWorkspaceReferenceEntryIconUrl === next.resolveWorkspaceReferenceEntryIconUrl && previous.resolveMentionReferenceTarget === next.resolveMentionReferenceTarget && previous.resolveWorkspaceReferenceInitialTarget === next.resolveWorkspaceReferenceInitialTarget && previous.onWorkspaceFileReferencesAdded === next.onWorkspaceFileReferencesAdded && previous.agentSettings.avoidGroupingEdits === next.agentSettings.avoidGroupingEdits && previous.title === next.title && agentGuiStateEquals(previous.state, next.state) && previous.position.x === next.position.x && previous.position.y === next.position.y && previous.width === next.width && previous.height === next.height && previous.desktopSize.width === next.desktopSize.width && previous.desktopSize.height === next.desktopSize.height && previous.onLinkAction === next.onLinkAction && previous.onCapabilitySettingsRequest === next.onCapabilitySettingsRequest && previous.onAgentProviderLogin === next.onAgentProviderLogin && previous.providerTargets === next.providerTargets && previous.providerTargetsLoading === next.providerTargetsLoading && previous.providerReadinessGates === next.providerReadinessGates && previous.defaultProviderTargetId === next.defaultProviderTargetId && previous.
|
|
28077
|
-
previous.workspaceAgentProbes,
|
|
28078
|
-
next.workspaceAgentProbes,
|
|
28079
|
-
previous.state.provider
|
|
28080
|
-
)) && previous.onAgentProbeDemandChange === next.onAgentProbeDemandChange && previous.onAgentProbeRefreshRequest === next.onAgentProbeRefreshRequest && previous.managedAgentsState === next.managedAgentsState && previous.contextMentionProviders === next.contextMentionProviders && previous.workspaceAppIcons === next.workspaceAppIcons && previous.embedded === next.embedded && previous.previewMode === next.previewMode && previous.isActive === next.isActive && previous.composerFocusRequestSequence === next.composerFocusRequestSequence && previous.newConversationRequestSequence === next.newConversationRequestSequence && previous.openSessionRequest === next.openSessionRequest && previous.prefillPromptRequest === next.prefillPromptRequest;
|
|
28931
|
+
return previous.nodeId === next.nodeId && previous.workspaceId === next.workspaceId && previous.currentUserId === next.currentUserId && previous.workspacePath === next.workspacePath && previous.workspaceFileReferenceAdapter === next.workspaceFileReferenceAdapter && previous.resolveDroppedFileReferences === next.resolveDroppedFileReferences && previous.selectProjectDirectory === next.selectProjectDirectory && previous.referenceSourceAggregator === next.referenceSourceAggregator && previous.resolveWorkspaceReferenceEntryIconUrl === next.resolveWorkspaceReferenceEntryIconUrl && previous.resolveMentionReferenceTarget === next.resolveMentionReferenceTarget && previous.resolveWorkspaceReferenceInitialTarget === next.resolveWorkspaceReferenceInitialTarget && previous.onWorkspaceFileReferencesAdded === next.onWorkspaceFileReferencesAdded && previous.agentSettings.avoidGroupingEdits === next.agentSettings.avoidGroupingEdits && previous.title === next.title && agentGuiStateEquals(previous.state, next.state) && previous.position.x === next.position.x && previous.position.y === next.position.y && previous.width === next.width && previous.height === next.height && previous.desktopSize.width === next.desktopSize.width && previous.desktopSize.height === next.desktopSize.height && previous.onLinkAction === next.onLinkAction && previous.onHandoffConversation === next.onHandoffConversation && previous.onCapabilitySettingsRequest === next.onCapabilitySettingsRequest && previous.onAgentProviderLogin === next.onAgentProviderLogin && previous.providerTargets === next.providerTargets && previous.providerTargetsLoading === next.providerTargetsLoading && previous.providerReadinessGates === next.providerReadinessGates && previous.defaultProviderTargetId === next.defaultProviderTargetId && previous.onClose === next.onClose && previous.onResize === next.onResize && previous.onUpdateNode === next.onUpdateNode && previous.onRememberComposerDefaults === next.onRememberComposerDefaults && previous.onOpenConversationWindow === next.onOpenConversationWindow && previous.isMaximized === next.isMaximized && previous.isMuted === next.isMuted && previous.onMinimize === next.onMinimize && previous.onToggleMaximize === next.onToggleMaximize && previous.onShowMessage === next.onShowMessage && previous.workspaceAgentProbes === next.workspaceAgentProbes && previous.onAgentProbeDemandChange === next.onAgentProbeDemandChange && previous.onAgentProbeRefreshRequest === next.onAgentProbeRefreshRequest && previous.managedAgentsState === next.managedAgentsState && previous.contextMentionProviders === next.contextMentionProviders && previous.workspaceAppIcons === next.workspaceAppIcons && previous.embedded === next.embedded && previous.previewMode === next.previewMode && previous.isActive === next.isActive && previous.composerFocusRequestSequence === next.composerFocusRequestSequence && previous.newConversationRequestSequence === next.newConversationRequestSequence && previous.openSessionRequest === next.openSessionRequest && previous.prefillPromptRequest === next.prefillPromptRequest;
|
|
28081
28932
|
}
|
|
28082
28933
|
var AgentGUINode = memo2(function AgentGUINode2({
|
|
28083
28934
|
nodeId,
|
|
@@ -28100,6 +28951,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28100
28951
|
height,
|
|
28101
28952
|
desktopSize,
|
|
28102
28953
|
onLinkAction,
|
|
28954
|
+
onHandoffConversation,
|
|
28103
28955
|
capabilityMenuState,
|
|
28104
28956
|
onCapabilitySettingsRequest,
|
|
28105
28957
|
onAgentProviderLogin,
|
|
@@ -28107,7 +28959,6 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28107
28959
|
providerTargetsLoading = false,
|
|
28108
28960
|
providerReadinessGates = null,
|
|
28109
28961
|
defaultProviderTargetId = null,
|
|
28110
|
-
conversationScope = "single-provider",
|
|
28111
28962
|
onWorkspaceFileReferencesAdded,
|
|
28112
28963
|
onOpenConversationWindow,
|
|
28113
28964
|
onClose,
|
|
@@ -28264,7 +29115,6 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28264
29115
|
workspacePath,
|
|
28265
29116
|
avoidGroupingEdits: agentSettings.avoidGroupingEdits,
|
|
28266
29117
|
data: state,
|
|
28267
|
-
conversationScope,
|
|
28268
29118
|
openSessionRequest,
|
|
28269
29119
|
prefillPromptRequest,
|
|
28270
29120
|
providerTargets,
|
|
@@ -28303,13 +29153,8 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28303
29153
|
const activeReadinessProvider = viewModel.activeConversationId !== null ? activeProvider : viewModel.selectedProviderTarget.provider;
|
|
28304
29154
|
const selectedProviderTargetLabel = viewModel.selectedProviderTarget?.label ?? resolveAgentGUIProviderDisplayLabel(state.provider, fallbackAgentTitle);
|
|
28305
29155
|
const displayProviderLabel = viewModel.activeConversation ? resolveAgentGUIProviderDisplayLabel(activeProvider, fallbackAgentTitle) : selectedProviderTargetLabel;
|
|
28306
|
-
const windowAgentTitle = viewModel.activeConversation ? getAgentHostManagedToolchainAgentByName(activeProvider)?.label ?? displayProviderLabel : displayProviderLabel;
|
|
28307
29156
|
const activeConversationDockTitle = viewModel.activeConversation ? resolveAgentGUIDockConversationTitle(viewModel.activeConversation) : null;
|
|
28308
|
-
|
|
28309
|
-
fallbackAgentLabel: fallbackAgentTitle,
|
|
28310
|
-
language: locale
|
|
28311
|
-
}) : null;
|
|
28312
|
-
useEffect14(() => {
|
|
29157
|
+
useEffect15(() => {
|
|
28313
29158
|
if (previewMode || !viewModel.activeConversation) {
|
|
28314
29159
|
return;
|
|
28315
29160
|
}
|
|
@@ -28361,6 +29206,9 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28361
29206
|
"agentHost.agentGui.providerGateCheckingDescription",
|
|
28362
29207
|
{ provider: displayProviderLabel }
|
|
28363
29208
|
),
|
|
29209
|
+
providerGateCheckingAgentsDescription: t(
|
|
29210
|
+
"agentHost.agentGui.providerGateCheckingAgentsDescription"
|
|
29211
|
+
),
|
|
28364
29212
|
providerGateInstallTitle: t(
|
|
28365
29213
|
"agentHost.agentGui.providerGateInstallTitle",
|
|
28366
29214
|
{ provider: displayProviderLabel }
|
|
@@ -28380,6 +29228,17 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28380
29228
|
{ provider: displayProviderLabel }
|
|
28381
29229
|
),
|
|
28382
29230
|
providerGateLoginAction: t("agentHost.agentGui.providerGateLoginAction"),
|
|
29231
|
+
providerGateComingSoonTitle: t(
|
|
29232
|
+
"agentHost.agentGui.providerGateComingSoonTitle",
|
|
29233
|
+
{ provider: displayProviderLabel }
|
|
29234
|
+
),
|
|
29235
|
+
providerGateComingSoonDescription: t(
|
|
29236
|
+
"agentHost.agentGui.providerGateComingSoonDescription",
|
|
29237
|
+
{ provider: displayProviderLabel }
|
|
29238
|
+
),
|
|
29239
|
+
providerGateComingSoonAction: t(
|
|
29240
|
+
"agentHost.agentGui.providerGateComingSoonAction"
|
|
29241
|
+
),
|
|
28383
29242
|
providerGateUnavailableTitle: t(
|
|
28384
29243
|
"agentHost.agentGui.providerGateUnavailableTitle",
|
|
28385
29244
|
{ provider: displayProviderLabel }
|
|
@@ -28504,7 +29363,14 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28504
29363
|
planImplementationSkip: t("agentHost.agentGui.planImplementationSkip"),
|
|
28505
29364
|
noRunningResponse: t("agentHost.agentGui.noRunningResponse"),
|
|
28506
29365
|
empty: t("agentHost.agentGui.empty", { provider: displayProviderLabel }),
|
|
29366
|
+
emptyForProvider: (provider) => t("agentHost.agentGui.empty", {
|
|
29367
|
+
provider: resolveAgentGUIProviderDisplayLabel(
|
|
29368
|
+
provider,
|
|
29369
|
+
fallbackAgentTitle
|
|
29370
|
+
)
|
|
29371
|
+
}),
|
|
28507
29372
|
emptyProvider: displayProviderLabel,
|
|
29373
|
+
emptyProviderForProvider: (provider) => resolveAgentGUIProviderDisplayLabel(provider, fallbackAgentTitle),
|
|
28508
29374
|
conversations: t("agentHost.agentGui.conversations"),
|
|
28509
29375
|
newConversation: t("agentHost.agentGui.newConversation"),
|
|
28510
29376
|
agentConfig: t("agentHost.agentGui.agentConfig"),
|
|
@@ -28518,11 +29384,13 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28518
29384
|
conversationFilterClaudeCode: t(
|
|
28519
29385
|
"agentHost.agentGui.conversationFilterClaudeCode"
|
|
28520
29386
|
),
|
|
29387
|
+
conversationFilterTutti: t("agentHost.agentGui.conversationFilterTutti"),
|
|
28521
29388
|
providerSwitchLabel: t("agentHost.agentGui.providerSwitchLabel"),
|
|
28522
29389
|
startConversation: t("agentHost.agentGui.startConversation"),
|
|
28523
29390
|
selectConversation: t("agentHost.agentGui.selectConversation"),
|
|
28524
29391
|
loadingConversations: t("agentHost.agentGui.loadingConversations"),
|
|
28525
29392
|
loadingConversation: t("agentHost.agentGui.loadingConversation"),
|
|
29393
|
+
scrollToBottom: t("agentHost.agentGui.scrollToBottom"),
|
|
28526
29394
|
searchNoConversations: t("agentHost.agentGui.searchNoConversations"),
|
|
28527
29395
|
conversationUnavailable: t("agentHost.agentGui.conversationUnavailable"),
|
|
28528
29396
|
fallbackAgentTitle,
|
|
@@ -28591,14 +29459,18 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28591
29459
|
"agentHost.agentGui.continueInNewConversation"
|
|
28592
29460
|
),
|
|
28593
29461
|
goalLabel: t("agentHost.agentGui.goalLabel"),
|
|
28594
|
-
|
|
28595
|
-
|
|
28596
|
-
|
|
28597
|
-
|
|
28598
|
-
|
|
28599
|
-
|
|
29462
|
+
goalTitleActive: t("agentHost.agentGui.goalTitleActive"),
|
|
29463
|
+
goalTitlePaused: t("agentHost.agentGui.goalTitlePaused"),
|
|
29464
|
+
goalTitleBlocked: t("agentHost.agentGui.goalTitleBlocked"),
|
|
29465
|
+
goalTitleUsageLimited: t("agentHost.agentGui.goalTitleUsageLimited"),
|
|
29466
|
+
goalTitleBudgetLimited: t("agentHost.agentGui.goalTitleBudgetLimited"),
|
|
29467
|
+
goalTitleComplete: t("agentHost.agentGui.goalTitleComplete"),
|
|
28600
29468
|
goalBudgetUsage: (used, budget) => t("agentHost.agentGui.goalBudgetUsage", { used, budget }),
|
|
28601
29469
|
goalClearHint: t("agentHost.agentGui.goalClearHint"),
|
|
29470
|
+
goalEditAction: t("agentHost.agentGui.goalEditAction"),
|
|
29471
|
+
goalPauseAction: t("agentHost.agentGui.goalPauseAction"),
|
|
29472
|
+
goalResumeAction: t("agentHost.agentGui.goalResumeAction"),
|
|
29473
|
+
goalClearAction: t("agentHost.agentGui.goalClearAction"),
|
|
28602
29474
|
processing: t("agentHost.agentGui.processing"),
|
|
28603
29475
|
turnSummary: t("agentHost.agentGui.turnSummary"),
|
|
28604
29476
|
userMessageLocator: t("agentHost.agentGui.userMessageLocator"),
|
|
@@ -28836,7 +29708,9 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28836
29708
|
removeMention: t("common.remove"),
|
|
28837
29709
|
addReference: t("agentHost.agentGui.addReference"),
|
|
28838
29710
|
addContent: t("agentHost.agentGui.addContent"),
|
|
28839
|
-
referenceWorkspaceFiles: t("agentHost.issue.referenceWorkspaceFiles")
|
|
29711
|
+
referenceWorkspaceFiles: t("agentHost.issue.referenceWorkspaceFiles"),
|
|
29712
|
+
handoffConversation: t("agentHost.agentGui.handoffConversation"),
|
|
29713
|
+
handoffConversationMenu: t("agentHost.agentGui.handoffConversationMenu")
|
|
28840
29714
|
}),
|
|
28841
29715
|
[displayProviderLabel, fallbackAgentTitle, t]
|
|
28842
29716
|
);
|
|
@@ -28849,23 +29723,14 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28849
29723
|
}),
|
|
28850
29724
|
[t]
|
|
28851
29725
|
);
|
|
28852
|
-
const
|
|
28853
|
-
const windowTitle = collapsedWindowConversationTitle || (isConversationRailCollapsed ? activeConversationWindowTitle : null) || windowAgentTitle || title;
|
|
28854
|
-
const windowTitleIconUrl = agentGuiDockIconUrls[activeProvider] ?? null;
|
|
29726
|
+
const windowTitle = title;
|
|
28855
29727
|
const activeProbeProvider = activeProvider;
|
|
28856
29728
|
const railStatusProvider = useMemo11(
|
|
28857
29729
|
() => resolveAgentGUIRailStatusProvider({
|
|
28858
|
-
activeProvider: activeProbeProvider,
|
|
28859
29730
|
conversationFilter: viewModel.conversationFilter,
|
|
28860
|
-
conversationScope: viewModel.conversationScope,
|
|
28861
29731
|
providerTargets: viewModel.providerTargets
|
|
28862
29732
|
}),
|
|
28863
|
-
[
|
|
28864
|
-
activeProbeProvider,
|
|
28865
|
-
viewModel.conversationFilter,
|
|
28866
|
-
viewModel.conversationScope,
|
|
28867
|
-
viewModel.providerTargets
|
|
28868
|
-
]
|
|
29733
|
+
[viewModel.conversationFilter, viewModel.providerTargets]
|
|
28869
29734
|
);
|
|
28870
29735
|
const activeAgentProbe = useMemo11(
|
|
28871
29736
|
() => findWorkspaceAgentProbeForDockProvider(
|
|
@@ -28937,7 +29802,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28937
29802
|
workspaceAgentProbes?.isLoadingUsage,
|
|
28938
29803
|
t
|
|
28939
29804
|
]);
|
|
28940
|
-
|
|
29805
|
+
useEffect15(() => {
|
|
28941
29806
|
if (previewMode || !onAgentProbeDemandChange) {
|
|
28942
29807
|
return;
|
|
28943
29808
|
}
|
|
@@ -28947,7 +29812,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28947
29812
|
onAgentProbeDemandChange(null, probeSourceId);
|
|
28948
29813
|
};
|
|
28949
29814
|
}, [activeProbeProvider, nodeId, onAgentProbeDemandChange, previewMode]);
|
|
28950
|
-
|
|
29815
|
+
useEffect15(() => {
|
|
28951
29816
|
if (previewMode || !onAgentProbeDemandChange || !railStatusProvider || railStatusProvider === activeProbeProvider) {
|
|
28952
29817
|
return;
|
|
28953
29818
|
}
|
|
@@ -28975,17 +29840,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
28975
29840
|
nodeId,
|
|
28976
29841
|
kind: "agentGui",
|
|
28977
29842
|
title: windowTitle,
|
|
28978
|
-
titleIcon:
|
|
28979
|
-
"img",
|
|
28980
|
-
{
|
|
28981
|
-
src: windowTitleIconUrl,
|
|
28982
|
-
alt: "",
|
|
28983
|
-
draggable: false,
|
|
28984
|
-
"aria-hidden": "true",
|
|
28985
|
-
className: "size-4 rounded-[4px]",
|
|
28986
|
-
"data-agent-gui-window-provider-icon": "true"
|
|
28987
|
-
}
|
|
28988
|
-
) : null,
|
|
29843
|
+
titleIcon: null,
|
|
28989
29844
|
position,
|
|
28990
29845
|
width,
|
|
28991
29846
|
height,
|
|
@@ -29053,6 +29908,7 @@ var AgentGUINode = memo2(function AgentGUINode2({
|
|
|
29053
29908
|
railSlashStatusLimits,
|
|
29054
29909
|
previewMode,
|
|
29055
29910
|
onLinkAction: handleLinkAction,
|
|
29911
|
+
onHandoffConversation,
|
|
29056
29912
|
capabilityMenuState,
|
|
29057
29913
|
onCapabilitySettingsRequest,
|
|
29058
29914
|
onAgentProviderLogin: onAgentProviderLogin ? handleAgentProviderLogin : void 0,
|