@tutti-os/agent-gui 0.0.210 → 0.0.212
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 +3 -1
- package/dist/{AgentRichTextReadonly-DFWY2WYO.js → AgentRichTextReadonly-WWU4ZF7W.js} +5 -5
- package/dist/agent-conversation/index.d.ts +1 -1
- package/dist/agent-conversation/index.js +8 -8
- package/dist/agent-conversation/interactive-answer.d.ts +34 -0
- package/dist/agent-conversation/interactive-answer.js +11 -0
- package/dist/agent-conversation/interactive-answer.js.map +1 -0
- package/dist/agent-gui.d.ts +7 -4
- package/dist/agent-gui.js +16 -15
- package/dist/agent-message-center/index.js +8 -7
- package/dist/agent-message-center/index.js.map +1 -1
- package/dist/{agentFileMentionContracts-B0yQizXB.d.ts → agentFileMentionContracts-BeBex-Sf.d.ts} +5 -0
- package/dist/{agentGuiNodeTypes-DTeerTzS.d.ts → agentGuiNodeTypes-BMcpfKTn.d.ts} +5 -1
- package/dist/app/renderer/agentactivity.css +50 -0
- package/dist/app/renderer/assets/icons/agents/tutti-mode.png +0 -0
- package/dist/app/renderer/assets/icons/tutti-intensity-handle-balance.png +0 -0
- package/dist/app/renderer/assets/icons/tutti-intensity-handle-cost.png +0 -0
- package/dist/app/renderer/assets/icons/tutti-intensity-handle-powerful.png +0 -0
- package/dist/app/renderer/assets/icons/tutti-mode-lined.svg +3 -0
- package/dist/{chunk-6LXC5BME.js → chunk-4DAJ5SVX.js} +11 -5
- package/dist/chunk-4DAJ5SVX.js.map +1 -0
- package/dist/{chunk-Y6M27YYS.js → chunk-4IJYTGS2.js} +670 -619
- package/dist/chunk-4IJYTGS2.js.map +1 -0
- package/dist/{chunk-DKRX5IZS.js → chunk-5UOJCDLE.js} +8 -8
- package/dist/{chunk-M2VRYG7U.js → chunk-62LWOH3P.js} +13 -17
- package/dist/chunk-62LWOH3P.js.map +1 -0
- package/dist/{chunk-HXAOFFZJ.js → chunk-7LSLB7CN.js} +2 -2
- package/dist/{chunk-CKUR2VKA.js → chunk-BGNYUYLP.js} +2 -2
- package/dist/chunk-FMTWYOHM.js +25 -0
- package/dist/chunk-FMTWYOHM.js.map +1 -0
- package/dist/{chunk-JRYR2EA5.js → chunk-FRSV66P3.js} +171 -36
- package/dist/chunk-FRSV66P3.js.map +1 -0
- package/dist/{chunk-THRBLO2B.js → chunk-GXXPUEX6.js} +2 -2
- package/dist/{chunk-FWR5BZYR.js → chunk-JUL7J4VN.js} +2 -2
- package/dist/{chunk-RAO2PI3T.js → chunk-JVVLKTLR.js} +18 -32
- package/dist/chunk-JVVLKTLR.js.map +1 -0
- package/dist/{chunk-5RZVXSQQ.js → chunk-POU5WZNH.js} +7 -2
- package/dist/chunk-POU5WZNH.js.map +1 -0
- package/dist/{chunk-CCFYCSBK.js → chunk-RNBZBBI7.js} +13 -13
- package/dist/{chunk-VGPFDVSK.js → chunk-WSIGQG7C.js} +3 -3
- package/dist/{chunk-V2MU37VN.js → chunk-YJ27WHM3.js} +2 -2
- package/dist/context-mention-palette/index.d.ts +1 -1
- package/dist/context-mention-palette/index.js +8 -8
- package/dist/i18n/index.d.ts +12 -16
- package/dist/i18n/index.js +2 -2
- package/dist/index.d.ts +27 -21
- package/dist/index.js +17 -16
- package/dist/index.js.map +1 -1
- package/dist/mention-search.d.ts +2 -2
- package/dist/mention-search.js +6 -6
- package/dist/workbench/contribution.js +3 -3
- package/dist/workbench/index.js +6 -6
- package/dist/workbench/sessionTitle.js +2 -2
- package/package.json +21 -14
- package/dist/chunk-5RZVXSQQ.js.map +0 -1
- package/dist/chunk-6LXC5BME.js.map +0 -1
- package/dist/chunk-JRYR2EA5.js.map +0 -1
- package/dist/chunk-M2VRYG7U.js.map +0 -1
- package/dist/chunk-RAO2PI3T.js.map +0 -1
- package/dist/chunk-Y6M27YYS.js.map +0 -1
- /package/dist/{AgentRichTextReadonly-DFWY2WYO.js.map → AgentRichTextReadonly-WWU4ZF7W.js.map} +0 -0
- /package/dist/{chunk-DKRX5IZS.js.map → chunk-5UOJCDLE.js.map} +0 -0
- /package/dist/{chunk-HXAOFFZJ.js.map → chunk-7LSLB7CN.js.map} +0 -0
- /package/dist/{chunk-CKUR2VKA.js.map → chunk-BGNYUYLP.js.map} +0 -0
- /package/dist/{chunk-THRBLO2B.js.map → chunk-GXXPUEX6.js.map} +0 -0
- /package/dist/{chunk-FWR5BZYR.js.map → chunk-JUL7J4VN.js.map} +0 -0
- /package/dist/{chunk-CCFYCSBK.js.map → chunk-RNBZBBI7.js.map} +0 -0
- /package/dist/{chunk-VGPFDVSK.js.map → chunk-WSIGQG7C.js.map} +0 -0
- /package/dist/{chunk-V2MU37VN.js.map → chunk-YJ27WHM3.js.map} +0 -0
|
@@ -15,10 +15,7 @@ import {
|
|
|
15
15
|
resolveAgentGuiSessionProviderFlatIconUrl,
|
|
16
16
|
resolveNextAgentGUIConversationRailWidthPx,
|
|
17
17
|
shouldAutoCollapseAgentGUIConversationRail
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import {
|
|
20
|
-
resolveAgentGuiWorkbenchProviderLabel
|
|
21
|
-
} from "./chunk-MGSRWYRN.js";
|
|
18
|
+
} from "./chunk-5UOJCDLE.js";
|
|
22
19
|
import {
|
|
23
20
|
AGENT_PROVIDERS,
|
|
24
21
|
AGENT_PROVIDER_LABEL,
|
|
@@ -34,7 +31,10 @@ import {
|
|
|
34
31
|
resolveAgentGUIFirstUserMessageDisplayPrompt,
|
|
35
32
|
resolveAgentGUIProviderDisplayLabel,
|
|
36
33
|
resolveAgentGUIProviderIdentity
|
|
37
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-YJ27WHM3.js";
|
|
35
|
+
import {
|
|
36
|
+
resolveAgentGuiWorkbenchProviderLabel
|
|
37
|
+
} from "./chunk-MGSRWYRN.js";
|
|
38
38
|
import {
|
|
39
39
|
AgentCommercePresentationProvider,
|
|
40
40
|
AgentConversationFlow,
|
|
@@ -70,7 +70,7 @@ import {
|
|
|
70
70
|
toLocalShortDateTime,
|
|
71
71
|
updateAgentComposerDraft,
|
|
72
72
|
useProjectedAgentConversation
|
|
73
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-RNBZBBI7.js";
|
|
74
74
|
import {
|
|
75
75
|
agentRichTextContentToPromptText,
|
|
76
76
|
createAgentRichTextInputExtensions,
|
|
@@ -80,7 +80,7 @@ import {
|
|
|
80
80
|
plainTextToAgentRichTextInlineContent,
|
|
81
81
|
skillDescriptionForDisplay,
|
|
82
82
|
skillTriggerForPrefix
|
|
83
|
-
} from "./chunk-
|
|
83
|
+
} from "./chunk-7LSLB7CN.js";
|
|
84
84
|
import {
|
|
85
85
|
AgentEnvPanelActionProvider
|
|
86
86
|
} from "./chunk-JZ6KUUDY.js";
|
|
@@ -95,7 +95,7 @@ import {
|
|
|
95
95
|
AgentFileMentionPalette,
|
|
96
96
|
agentMentionItemKey,
|
|
97
97
|
isAgentMentionItemDisabled
|
|
98
|
-
} from "./chunk-
|
|
98
|
+
} from "./chunk-4DAJ5SVX.js";
|
|
99
99
|
import {
|
|
100
100
|
normalizeAgentGUIAgents,
|
|
101
101
|
projectAgentGUIAgentsToTargets
|
|
@@ -106,7 +106,7 @@ import {
|
|
|
106
106
|
DEFAULT_AGENT_MENTION_FILTER,
|
|
107
107
|
agentGuiScheduler,
|
|
108
108
|
buildWorkspaceAgentActivityListViewModel
|
|
109
|
-
} from "./chunk-
|
|
109
|
+
} from "./chunk-FRSV66P3.js";
|
|
110
110
|
import {
|
|
111
111
|
AGENT_RICH_TEXT_CARET_ANCHOR,
|
|
112
112
|
agentComposerFileMentionReferences,
|
|
@@ -123,7 +123,7 @@ import {
|
|
|
123
123
|
parseMentionItemFromHref,
|
|
124
124
|
remainingAgentComposerPromptAssetSlots,
|
|
125
125
|
updateAgentComposerFileMentions
|
|
126
|
-
} from "./chunk-
|
|
126
|
+
} from "./chunk-POU5WZNH.js";
|
|
127
127
|
import {
|
|
128
128
|
AgentInteractivePromptSurface,
|
|
129
129
|
PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
|
|
@@ -135,7 +135,7 @@ import {
|
|
|
135
135
|
normalizePlanIssueBudgetPreset,
|
|
136
136
|
planImplementationPromptFromPlanTurn,
|
|
137
137
|
planIssueBudgetPresetsEqual
|
|
138
|
-
} from "./chunk-
|
|
138
|
+
} from "./chunk-JVVLKTLR.js";
|
|
139
139
|
import {
|
|
140
140
|
useEngineSelector
|
|
141
141
|
} from "./chunk-EVQ4JY3N.js";
|
|
@@ -145,7 +145,7 @@ import {
|
|
|
145
145
|
blobToBase64,
|
|
146
146
|
normalizeAgentApprovalPurpose,
|
|
147
147
|
resolveWorkspaceLinkAction
|
|
148
|
-
} from "./chunk-
|
|
148
|
+
} from "./chunk-WSIGQG7C.js";
|
|
149
149
|
import {
|
|
150
150
|
AgentTargetPresentationProvider,
|
|
151
151
|
cn,
|
|
@@ -163,7 +163,7 @@ import {
|
|
|
163
163
|
useAgentHostApi,
|
|
164
164
|
useOptionalAgentActivityRuntime,
|
|
165
165
|
useOptionalAgentHostApi
|
|
166
|
-
} from "./chunk-
|
|
166
|
+
} from "./chunk-JUL7J4VN.js";
|
|
167
167
|
import {
|
|
168
168
|
MANAGED_AGENT_ICON_FALLBACK_URL,
|
|
169
169
|
MANAGED_AGENT_ICON_URLS,
|
|
@@ -173,7 +173,7 @@ import {
|
|
|
173
173
|
AgentGuiI18nProvider,
|
|
174
174
|
translate,
|
|
175
175
|
useTranslation
|
|
176
|
-
} from "./chunk-
|
|
176
|
+
} from "./chunk-GXXPUEX6.js";
|
|
177
177
|
import {
|
|
178
178
|
isBetaAgentProvider,
|
|
179
179
|
normalizeManagedAgentProvider
|
|
@@ -4777,11 +4777,8 @@ function useAgentConversationMessagePaging(input) {
|
|
|
4777
4777
|
if (!normalized) return;
|
|
4778
4778
|
const ref = current.sessionViewRef(normalized);
|
|
4779
4779
|
const view = current.view.get(ref);
|
|
4780
|
-
const
|
|
4781
|
-
|
|
4782
|
-
);
|
|
4783
|
-
const oldestLoadedVersion = view?.oldestLoadedVersion ?? canonicalOldestVersion;
|
|
4784
|
-
const hasOlderMessages = view?.hasOlderMessages === true || view?.oldestLoadedVersion == null && canonicalOldestVersion !== null && canonicalOldestVersion > 1;
|
|
4780
|
+
const oldestLoadedVersion = view?.oldestLoadedVersion ?? current.projection.minVersion(current.getCanonicalMessages(normalized));
|
|
4781
|
+
const hasOlderMessages = view?.hasOlderMessages === true;
|
|
4785
4782
|
if (!hasOlderMessages || view?.isLoadingOlderMessages === true || oldestLoadedVersion === null || current.getActiveSessionId() !== normalized) {
|
|
4786
4783
|
current.diagnostics.page({
|
|
4787
4784
|
agentSessionId: normalized,
|
|
@@ -4871,7 +4868,8 @@ function useAgentConversationMessagePaging(input) {
|
|
|
4871
4868
|
return;
|
|
4872
4869
|
}
|
|
4873
4870
|
current.view.mergeOlder(ref, page.messages, {
|
|
4874
|
-
hasOlderMessages: page.hasMore && page.messages.length > 0
|
|
4871
|
+
hasOlderMessages: page.hasMore && page.messages.length > 0,
|
|
4872
|
+
oldestLoadedVersion: current.projection.minVersion(page.messages) ?? oldestLoadedVersion
|
|
4875
4873
|
});
|
|
4876
4874
|
current.view.setOlderMessagesLoading(ref, false);
|
|
4877
4875
|
} catch (error) {
|
|
@@ -7485,6 +7483,16 @@ function useAgentGUIComposerOptionsSync(input) {
|
|
|
7485
7483
|
settings: requestSettings
|
|
7486
7484
|
})
|
|
7487
7485
|
).then(() => {
|
|
7486
|
+
const loadedOptions = composerOptionsForTarget({
|
|
7487
|
+
snapshot: input.agentActivityRuntime.getSnapshot(input.workspaceId),
|
|
7488
|
+
target: targetData
|
|
7489
|
+
});
|
|
7490
|
+
if (loadedOptions) {
|
|
7491
|
+
input.onComposerDefaultsAuthorityReloadedRef.current.reconcileHomeDefaults(
|
|
7492
|
+
targetData,
|
|
7493
|
+
loadedOptions
|
|
7494
|
+
);
|
|
7495
|
+
}
|
|
7488
7496
|
if (options?.reconcileAcknowledgedDefaults) {
|
|
7489
7497
|
input.onComposerDefaultsAuthorityReloadedRef.current.reloaded(
|
|
7490
7498
|
authorityRead.receipt
|
|
@@ -7686,6 +7694,8 @@ function useAgentGUIControllerRefs(input) {
|
|
|
7686
7694
|
receipt: null,
|
|
7687
7695
|
settings
|
|
7688
7696
|
}),
|
|
7697
|
+
reconcileHomeDefaults: () => {
|
|
7698
|
+
},
|
|
7689
7699
|
reloaded: () => {
|
|
7690
7700
|
}
|
|
7691
7701
|
});
|
|
@@ -7945,6 +7955,51 @@ function useAgentGUIComposerSettingsActions(input) {
|
|
|
7945
7955
|
);
|
|
7946
7956
|
onComposerDefaultsAuthorityReloadedRef.current = {
|
|
7947
7957
|
prepareRead: prepareComposerDefaultsAuthorityRead,
|
|
7958
|
+
reconcileHomeDefaults: (target, options) => {
|
|
7959
|
+
if (!isMountedRef.current || activeConversationIdRef.current !== null || !nodeDataMatchesComposerTarget(
|
|
7960
|
+
selectedComposerTargetDataRef.current.data,
|
|
7961
|
+
target
|
|
7962
|
+
)) {
|
|
7963
|
+
return;
|
|
7964
|
+
}
|
|
7965
|
+
const draftKey = nodeDefaultDraftKey(
|
|
7966
|
+
target.provider,
|
|
7967
|
+
target.agentTargetId
|
|
7968
|
+
);
|
|
7969
|
+
const currentDraft = draftSettingsBySessionIdRef.current[draftKey];
|
|
7970
|
+
if (!currentDraft) {
|
|
7971
|
+
return;
|
|
7972
|
+
}
|
|
7973
|
+
const reconciledDraft = enforceComposerModelBindingForHomeDefaults(
|
|
7974
|
+
sanitizeComposerSettingsForTarget({
|
|
7975
|
+
settings: currentDraft,
|
|
7976
|
+
target,
|
|
7977
|
+
options
|
|
7978
|
+
}),
|
|
7979
|
+
options
|
|
7980
|
+
);
|
|
7981
|
+
if (sameComposerSettings(currentDraft, reconciledDraft)) {
|
|
7982
|
+
return;
|
|
7983
|
+
}
|
|
7984
|
+
draftSettingsBySessionIdRef.current = {
|
|
7985
|
+
...draftSettingsBySessionIdRef.current,
|
|
7986
|
+
[draftKey]: reconciledDraft
|
|
7987
|
+
};
|
|
7988
|
+
setDraftSettingsBySessionId((current) => ({
|
|
7989
|
+
...current,
|
|
7990
|
+
[draftKey]: reconciledDraft
|
|
7991
|
+
}));
|
|
7992
|
+
onDataChangeRef.current(
|
|
7993
|
+
(current) => nodeDataFromComposerSettings(
|
|
7994
|
+
{
|
|
7995
|
+
...current,
|
|
7996
|
+
provider: target.provider,
|
|
7997
|
+
agentTargetId: target.agentTargetId
|
|
7998
|
+
},
|
|
7999
|
+
reconciledDraft
|
|
8000
|
+
)
|
|
8001
|
+
);
|
|
8002
|
+
},
|
|
7948
8003
|
reloaded: retireAcknowledgedDefaultsForRead
|
|
7949
8004
|
};
|
|
7950
8005
|
const updateComposerSettings = useCallback9(
|
|
@@ -10613,7 +10668,8 @@ function useAgentGUIViewModel(candidate) {
|
|
|
10613
10668
|
candidate.readiness.activeConversationBusy,
|
|
10614
10669
|
candidate.readiness.activeLiveState,
|
|
10615
10670
|
candidate.readiness.providerReadinessGate,
|
|
10616
|
-
candidate.readiness.sessionRuntimeBlocked
|
|
10671
|
+
candidate.readiness.sessionRuntimeBlocked,
|
|
10672
|
+
candidate.readiness.sessionRuntimeBlockedReason
|
|
10617
10673
|
]
|
|
10618
10674
|
);
|
|
10619
10675
|
const operations = useMemo8(
|
|
@@ -12367,7 +12423,8 @@ function useAgentGUISessionPresentation(input) {
|
|
|
12367
12423
|
input.activeConversationId && input.activeLatestPendingSubmitTurnId
|
|
12368
12424
|
);
|
|
12369
12425
|
const activeSubmitBlocked = input.activeEngineAvailability === "blocked";
|
|
12370
|
-
const
|
|
12426
|
+
const sessionRuntimeBlockedReason = input.activeEngineRuntimeAvailability?.state === "blocked" ? input.activeEngineRuntimeAvailability.reason : null;
|
|
12427
|
+
const sessionRuntimeBlocked = sessionRuntimeBlockedReason !== null;
|
|
12371
12428
|
const targetConnection = useAgentGUITargetConnectionState({
|
|
12372
12429
|
agentTargetId: input.targetConnectionAgentTargetId,
|
|
12373
12430
|
source: input.targetConnectionSource
|
|
@@ -12543,6 +12600,7 @@ function useAgentGUISessionPresentation(input) {
|
|
|
12543
12600
|
isRespondingApproval,
|
|
12544
12601
|
pendingInteractivePrompt,
|
|
12545
12602
|
sessionRuntimeBlocked,
|
|
12603
|
+
sessionRuntimeBlockedReason,
|
|
12546
12604
|
targetConnectionBlocked: targetConnection.blocked,
|
|
12547
12605
|
sessionChrome
|
|
12548
12606
|
};
|
|
@@ -12749,6 +12807,7 @@ function useAgentGUIViewAssembly(input) {
|
|
|
12749
12807
|
activationError: detail.activationError,
|
|
12750
12808
|
activeConversationBusy: session.activeConversationBusy,
|
|
12751
12809
|
sessionRuntimeBlocked: session.sessionRuntimeBlocked,
|
|
12810
|
+
sessionRuntimeBlockedReason: session.sessionRuntimeBlockedReason,
|
|
12752
12811
|
targetConnectionBlocked: session.targetConnectionBlocked,
|
|
12753
12812
|
providerReadinessGate
|
|
12754
12813
|
},
|
|
@@ -13306,7 +13365,7 @@ function oldestVersion(messages) {
|
|
|
13306
13365
|
}
|
|
13307
13366
|
|
|
13308
13367
|
// contexts/workspace/presentation/renderer/agentSessions/useAgentSessionControllerState.ts
|
|
13309
|
-
function useAgentSessionControllerState(activeRef, canonicalMessages = []) {
|
|
13368
|
+
function useAgentSessionControllerState(activeRef, canonicalMessages = [], canonicalWindow = null) {
|
|
13310
13369
|
const transport = useAgentSessionTransport();
|
|
13311
13370
|
const paging = useAgentSessionPagingState();
|
|
13312
13371
|
const getAgentSessionView = useCallback24(
|
|
@@ -13346,17 +13405,18 @@ function useAgentSessionControllerState(activeRef, canonicalMessages = []) {
|
|
|
13346
13405
|
void transport.entries;
|
|
13347
13406
|
void paging.entries;
|
|
13348
13407
|
const storedActiveView = getAgentSessionView(activeRef);
|
|
13349
|
-
const canonicalOldestVersion = oldestVersion2(canonicalMessages);
|
|
13408
|
+
const canonicalOldestVersion = canonicalWindow?.oldestLoadedVersion ?? oldestVersion2(canonicalMessages);
|
|
13409
|
+
const storedBoundaryIsAtLeastAsComplete = storedActiveView !== null && storedActiveView.oldestLoadedVersion !== null && (canonicalOldestVersion === null || storedActiveView.oldestLoadedVersion <= canonicalOldestVersion);
|
|
13350
13410
|
const activeSessionView = storedActiveView ? {
|
|
13351
13411
|
...storedActiveView,
|
|
13352
|
-
hasOlderMessages:
|
|
13412
|
+
hasOlderMessages: storedBoundaryIsAtLeastAsComplete ? storedActiveView.hasOlderMessages : canonicalWindow?.hasOlderMessages ?? false,
|
|
13353
13413
|
oldestLoadedVersion: storedActiveView.oldestLoadedVersion === null ? canonicalOldestVersion : canonicalOldestVersion === null ? storedActiveView.oldestLoadedVersion : Math.min(
|
|
13354
13414
|
storedActiveView.oldestLoadedVersion,
|
|
13355
13415
|
canonicalOldestVersion
|
|
13356
13416
|
)
|
|
13357
13417
|
} : canonicalOldestVersion === null ? null : {
|
|
13358
13418
|
error: null,
|
|
13359
|
-
hasOlderMessages:
|
|
13419
|
+
hasOlderMessages: canonicalWindow?.hasOlderMessages ?? false,
|
|
13360
13420
|
isLoadingMessages: false,
|
|
13361
13421
|
isLoadingOlderMessages: false,
|
|
13362
13422
|
olderMessages: [],
|
|
@@ -13404,7 +13464,8 @@ function useAgentGUISessionDetailTransport(input) {
|
|
|
13404
13464
|
);
|
|
13405
13465
|
const state = useAgentSessionControllerState(
|
|
13406
13466
|
sessionViewRef(activeConversationId),
|
|
13407
|
-
activeConversationId ? agentActivitySnapshot.sessionMessagesById[activeConversationId] ?? [] : []
|
|
13467
|
+
activeConversationId ? agentActivitySnapshot.sessionMessagesById[activeConversationId] ?? [] : [],
|
|
13468
|
+
activeConversationId ? agentActivitySnapshot.sessionMessageWindowsById?.[activeConversationId] ?? null : null
|
|
13408
13469
|
);
|
|
13409
13470
|
const resolveSessionMessages = useCallback25(
|
|
13410
13471
|
(agentSessionId) => {
|
|
@@ -13479,7 +13540,7 @@ function useAgentGUISessionDetailTransport(input) {
|
|
|
13479
13540
|
runtime: agentActivityRuntime,
|
|
13480
13541
|
sessionViewRef,
|
|
13481
13542
|
view: {
|
|
13482
|
-
get: state.getAgentSessionView,
|
|
13543
|
+
get: (ref) => ref.agentSessionId?.trim() === activeConversationIdRef.current ? state.activeSessionView : state.getAgentSessionView(ref),
|
|
13483
13544
|
mergeOlder: state.mergeAgentSessionViewOlderMessages,
|
|
13484
13545
|
setOlderMessagesLoading: state.setAgentSessionViewOlderMessagesLoading
|
|
13485
13546
|
},
|
|
@@ -15050,6 +15111,7 @@ var styles = {
|
|
|
15050
15111
|
composerFooterRight: "agent-gui-node__composer-footer-right",
|
|
15051
15112
|
composerHero: "agent-gui-node__composer-hero",
|
|
15052
15113
|
composerFloatingPrompt: "agent-gui-node__composer-floating-prompt",
|
|
15114
|
+
composerDisclosurePanel: "agent-gui-chrome__composer-disclosure-panel",
|
|
15053
15115
|
composerFileDropOverlay: "agent-gui-node__composer-file-drop-overlay",
|
|
15054
15116
|
composerFileDropOverlayActive: "agent-gui-node__composer-file-drop-overlay--active",
|
|
15055
15117
|
composerFileDropOverlayCard: "agent-gui-node__composer-file-drop-overlay-card",
|
|
@@ -15400,19 +15462,28 @@ function AgentUsageMeter({
|
|
|
15400
15462
|
}
|
|
15401
15463
|
|
|
15402
15464
|
// agent-gui/agentGuiNode/AccountMembershipBadge.tsx
|
|
15403
|
-
import { Crown } from "lucide-react";
|
|
15404
15465
|
import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
15405
15466
|
function AccountMembershipBadge({
|
|
15406
15467
|
label,
|
|
15468
|
+
iconUrl = null,
|
|
15407
15469
|
className = ""
|
|
15408
15470
|
}) {
|
|
15409
15471
|
return /* @__PURE__ */ jsxs6(
|
|
15410
15472
|
"span",
|
|
15411
15473
|
{
|
|
15412
|
-
className: `inline-flex max-w-full items-center gap-1
|
|
15474
|
+
className: `inline-flex max-w-full items-center gap-1 text-[12px] font-semibold leading-4 text-[var(--text-secondary)] ${className}`,
|
|
15413
15475
|
"data-account-membership-badge": "true",
|
|
15414
15476
|
children: [
|
|
15415
|
-
/* @__PURE__ */ jsx13(
|
|
15477
|
+
iconUrl ? /* @__PURE__ */ jsx13(
|
|
15478
|
+
"img",
|
|
15479
|
+
{
|
|
15480
|
+
alt: "",
|
|
15481
|
+
"aria-hidden": "true",
|
|
15482
|
+
draggable: false,
|
|
15483
|
+
src: iconUrl,
|
|
15484
|
+
className: "size-3.5 shrink-0 object-contain"
|
|
15485
|
+
}
|
|
15486
|
+
) : null,
|
|
15416
15487
|
/* @__PURE__ */ jsx13("span", { className: "min-w-0 truncate", children: label })
|
|
15417
15488
|
]
|
|
15418
15489
|
}
|
|
@@ -15461,7 +15532,7 @@ import { useCallback as useCallback31 } from "react";
|
|
|
15461
15532
|
import {
|
|
15462
15533
|
Coins,
|
|
15463
15534
|
Copy,
|
|
15464
|
-
Crown
|
|
15535
|
+
Crown,
|
|
15465
15536
|
ExternalLink,
|
|
15466
15537
|
LogIn,
|
|
15467
15538
|
LogOut,
|
|
@@ -15512,8 +15583,8 @@ function AgentGUIAccountMenu({
|
|
|
15512
15583
|
"data-testid": testId,
|
|
15513
15584
|
onOpenAutoFocus: (event) => event.preventDefault(),
|
|
15514
15585
|
children: /* @__PURE__ */ jsxs8("div", { className: "flex min-w-0 flex-col", children: [
|
|
15515
|
-
/* @__PURE__ */ jsxs8("div", { className: "flex min-w-0 items-center gap-2 px-2
|
|
15516
|
-
/* @__PURE__ */ jsx15(AgentGUIAccountAvatar, { state, label: labels.copyUserId, children: /* @__PURE__ */ jsx15("span", { className: "grid size-
|
|
15586
|
+
/* @__PURE__ */ jsxs8("div", { className: "flex min-w-0 items-center gap-2 px-2 pt-2", children: [
|
|
15587
|
+
/* @__PURE__ */ jsx15(AgentGUIAccountAvatar, { state, label: labels.copyUserId, children: /* @__PURE__ */ jsx15("span", { className: "grid size-9 shrink-0 place-items-center overflow-hidden rounded-full bg-[var(--background-fronted)] text-[13px] font-semibold text-[var(--text-primary)]", children: state.user?.avatar ? /* @__PURE__ */ jsx15(
|
|
15517
15588
|
"img",
|
|
15518
15589
|
{
|
|
15519
15590
|
alt: "",
|
|
@@ -15527,12 +15598,19 @@ function AgentGUIAccountMenu({
|
|
|
15527
15598
|
AccountMembershipBadge,
|
|
15528
15599
|
{
|
|
15529
15600
|
className: "mt-1",
|
|
15601
|
+
iconUrl: state.membershipIconUrl ?? null,
|
|
15530
15602
|
label: membershipLabel
|
|
15531
15603
|
}
|
|
15532
15604
|
)
|
|
15533
15605
|
] })
|
|
15534
15606
|
] }),
|
|
15535
|
-
/* @__PURE__ */ jsx15(
|
|
15607
|
+
/* @__PURE__ */ jsx15(
|
|
15608
|
+
"span",
|
|
15609
|
+
{
|
|
15610
|
+
"aria-hidden": "true",
|
|
15611
|
+
className: "mx-2 mb-1 mt-3 h-px bg-[var(--border-1)]"
|
|
15612
|
+
}
|
|
15613
|
+
),
|
|
15536
15614
|
state.user ? /* @__PURE__ */ jsxs8(Fragment2, { children: [
|
|
15537
15615
|
/* @__PURE__ */ jsxs8(
|
|
15538
15616
|
"button",
|
|
@@ -15542,7 +15620,7 @@ function AgentGUIAccountMenu({
|
|
|
15542
15620
|
disabled: !state.links.planUrl.trim(),
|
|
15543
15621
|
onClick: () => openExternal(state.links.planUrl),
|
|
15544
15622
|
children: [
|
|
15545
|
-
/* @__PURE__ */ jsx15(
|
|
15623
|
+
/* @__PURE__ */ jsx15(Crown, { "aria-hidden": "true", size: 15, strokeWidth: 1.8 }),
|
|
15546
15624
|
/* @__PURE__ */ jsx15("span", { className: "min-w-0 flex-1 truncate text-left", children: labels.member }),
|
|
15547
15625
|
/* @__PURE__ */ jsx15("span", { className: "shrink-0 text-[12px] text-[var(--tutti-purple)]", children: membershipActionLabel })
|
|
15548
15626
|
]
|
|
@@ -15807,6 +15885,7 @@ var AgentGUIAccountRailMenu = memo(function AgentGUIAccountRailMenu2({
|
|
|
15807
15885
|
AccountMembershipBadge,
|
|
15808
15886
|
{
|
|
15809
15887
|
className: "mt-0.5",
|
|
15888
|
+
iconUrl: accountMenuState.membershipIconUrl ?? null,
|
|
15810
15889
|
label: membershipLabel
|
|
15811
15890
|
}
|
|
15812
15891
|
)
|
|
@@ -15992,7 +16071,7 @@ import {
|
|
|
15992
16071
|
useCallback as useCallback51,
|
|
15993
16072
|
useMemo as useMemo37,
|
|
15994
16073
|
useRef as useRef45,
|
|
15995
|
-
useState as
|
|
16074
|
+
useState as useState32
|
|
15996
16075
|
} from "react";
|
|
15997
16076
|
import { Tooltip as Tooltip9, TooltipContent as TooltipContent9, TooltipTrigger as TooltipTrigger9 } from "@tutti-os/ui-system";
|
|
15998
16077
|
|
|
@@ -16215,14 +16294,12 @@ function changeAgentGUIProviderManagerVisibility(input) {
|
|
|
16215
16294
|
}
|
|
16216
16295
|
|
|
16217
16296
|
// agent-gui/agentGuiNode/view/AgentGUIEmptyState.tsx
|
|
16218
|
-
import { memo as memo3,
|
|
16219
|
-
import { Sparkles as Sparkles2 } from "lucide-react";
|
|
16297
|
+
import { memo as memo3, useMemo as useMemo36 } from "react";
|
|
16220
16298
|
import {
|
|
16221
16299
|
Select as Select5,
|
|
16222
16300
|
SelectContent as SelectContent5,
|
|
16223
16301
|
SelectItem as SelectItem5,
|
|
16224
16302
|
SelectTrigger as SelectTrigger5,
|
|
16225
|
-
Switch,
|
|
16226
16303
|
cn as cn7
|
|
16227
16304
|
} from "@tutti-os/ui-system";
|
|
16228
16305
|
|
|
@@ -17733,7 +17810,9 @@ var styles2 = {
|
|
|
17733
17810
|
composerDisclosureChevron: "agent-gui-chrome__composer-disclosure-chevron",
|
|
17734
17811
|
composerDisclosureChevronExpanded: "agent-gui-chrome__composer-disclosure-chevron--expanded",
|
|
17735
17812
|
composerDisclosurePanel: "agent-gui-chrome__composer-disclosure-panel",
|
|
17736
|
-
composerDisclosureTrigger: "agent-gui-chrome__composer-disclosure-trigger"
|
|
17813
|
+
composerDisclosureTrigger: "agent-gui-chrome__composer-disclosure-trigger",
|
|
17814
|
+
tuttiWorkflowBanner: "agent-gui-chrome__tutti-workflow-banner",
|
|
17815
|
+
tuttiWorkflowPanel: "agent-gui-chrome__tutti-workflow-panel"
|
|
17737
17816
|
};
|
|
17738
17817
|
var AgentGUIChrome_styles_default = styles2;
|
|
17739
17818
|
|
|
@@ -17925,7 +18004,7 @@ function AgentSessionChrome({
|
|
|
17925
18004
|
}
|
|
17926
18005
|
|
|
17927
18006
|
// agent-gui/agentGuiNode/AgentComposer.tsx
|
|
17928
|
-
import { useCallback as useCallback48, useEffect as useEffect28, useRef as useRef42, useState as
|
|
18007
|
+
import { useCallback as useCallback48, useEffect as useEffect28, useRef as useRef42, useState as useState28 } from "react";
|
|
17929
18008
|
import { repairMentionPaletteHighlight } from "@tutti-os/ui-rich-text/at-panel";
|
|
17930
18009
|
|
|
17931
18010
|
// agent-gui/agentGuiNode/AgentSlashStatusPanel.tsx
|
|
@@ -19601,7 +19680,7 @@ function AgentComposerMaskIcon({
|
|
|
19601
19680
|
"span",
|
|
19602
19681
|
{
|
|
19603
19682
|
"aria-hidden": true,
|
|
19604
|
-
className: "inline-block size-
|
|
19683
|
+
className: "inline-block size-4 bg-[var(--text-secondary)] transition-colors group-hover:bg-[var(--text-primary)] group-focus-visible:bg-[var(--text-primary)]",
|
|
19605
19684
|
"data-agent-reference-add-icon": marker === "reference-add" ? "true" : void 0,
|
|
19606
19685
|
style: {
|
|
19607
19686
|
WebkitMaskImage: `url("${iconUrl}")`,
|
|
@@ -21523,7 +21602,7 @@ function useComposerPresentation(input) {
|
|
|
21523
21602
|
// agent-gui/agentGuiNode/composer/AgentComposerView.tsx
|
|
21524
21603
|
import { createPortal as createPortal4 } from "react-dom";
|
|
21525
21604
|
import {
|
|
21526
|
-
Popover as
|
|
21605
|
+
Popover as Popover5,
|
|
21527
21606
|
PopoverAnchor as PopoverAnchor2,
|
|
21528
21607
|
Tooltip as Tooltip8,
|
|
21529
21608
|
TooltipContent as TooltipContent8,
|
|
@@ -26095,7 +26174,7 @@ function ComposerDraftAttachments({
|
|
|
26095
26174
|
}
|
|
26096
26175
|
|
|
26097
26176
|
// agent-gui/agentGuiNode/composer/ComposerFooter.tsx
|
|
26098
|
-
import { ListChecks as ListChecks2,
|
|
26177
|
+
import { ListChecks as ListChecks2, Target as Target2, X as X5 } from "lucide-react";
|
|
26099
26178
|
import {
|
|
26100
26179
|
Select as Select3,
|
|
26101
26180
|
SelectContent as SelectContent3,
|
|
@@ -26300,200 +26379,69 @@ function AgentHandoffMenu({
|
|
|
26300
26379
|
);
|
|
26301
26380
|
}
|
|
26302
26381
|
|
|
26303
|
-
// agent-gui/agentGuiNode/composer/
|
|
26304
|
-
import {
|
|
26305
|
-
import {
|
|
26306
|
-
Badge,
|
|
26307
|
-
Button as Button4,
|
|
26308
|
-
Popover as Popover4,
|
|
26309
|
-
PopoverContent as PopoverContent4,
|
|
26310
|
-
PopoverTrigger as PopoverTrigger3,
|
|
26311
|
-
Slider
|
|
26312
|
-
} from "@tutti-os/ui-system";
|
|
26382
|
+
// agent-gui/agentGuiNode/composer/ComposerTuttiModeChip.tsx
|
|
26383
|
+
import { useId } from "react";
|
|
26384
|
+
import { Switch } from "@tutti-os/ui-system";
|
|
26313
26385
|
|
|
26314
|
-
//
|
|
26315
|
-
|
|
26316
|
-
const normalized = Number.isFinite(intensity) ? Math.min(100, Math.max(0, Math.round(intensity))) : 50;
|
|
26317
|
-
const tier = normalized <= 33 ? "cost" : normalized <= 66 ? "balance" : "powerful";
|
|
26318
|
-
return {
|
|
26319
|
-
intensity: normalized,
|
|
26320
|
-
tier,
|
|
26321
|
-
modelStrength: tier === "cost" ? "economical" : tier === "balance" ? "balanced" : "mostCapable",
|
|
26322
|
-
agentCount: tier === "cost" ? "single" : tier === "balance" ? "smallGroup" : "maxParallel"
|
|
26323
|
-
};
|
|
26324
|
-
}
|
|
26386
|
+
// app/renderer/assets/icons/tutti-mode-lined.svg
|
|
26387
|
+
var tutti_mode_lined_default = "data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%3Cpath%20d%3D%22M6.2525%202.29982C7.33705%201.67365%208.42639%201.76315%209.30719%202.19923C10.1442%202.61379%2010.7869%203.32997%2011.1783%204.00782C11.182%204.01417%2011.1865%204.02092%2011.19%204.02735L14.6041%2010.2568C14.8975%209.82469%2015.2682%209.41791%2015.6949%209.08398C16.562%208.40562%2017.7709%207.94423%2019.1187%208.30273C20.0625%208.55396%2020.6751%209.17174%2020.9293%2010.0039C21.1566%2010.7488%2021.0723%2011.5815%2020.9039%2012.3262C20.5644%2013.8263%2019.7411%2015.5353%2019.1636%2016.7519C18.1461%2018.8959%2016.5837%2020.9345%2014.6656%2022.2089C12.7211%2023.5006%2010.3591%2024.0285%207.92243%2022.9794C6.53406%2022.3816%205.11984%2021.3547%204.02984%2020.1396C2.95362%2018.9398%202.08969%2017.4375%202.0191%2015.8711C2.00256%2015.5011%202.07428%2015.0786%202.21051%2014.707C2.32007%2014.4085%202.5283%2013.9859%202.9107%2013.6933L3.08551%2013.5761C3.52116%2013.3247%204.00247%2013.2136%204.47613%2013.2246C4.56029%2012.337%205.00243%2011.5023%205.92926%2010.9639C6.24585%2010.78%206.59784%2010.6401%206.96442%2010.5586L5.18121%207.4707C4.77623%206.76922%204.50913%205.83092%204.59723%204.89063C4.68916%203.91106%205.17521%202.92193%206.2525%202.29982ZM8.4195%203.99219C8.0585%203.81354%207.68432%203.78292%207.2525%204.03223C6.81383%204.28569%206.62867%204.64873%206.58844%205.07715C6.54458%205.54507%206.6839%206.07275%206.91364%206.4707L9.6861%2011.2724C9.72481%2011.3395%209.75419%2011.4094%209.77594%2011.4805C9.83692%2011.5617%209.89457%2011.649%209.94782%2011.7412C10.2235%2012.2194%2010.0596%2012.8313%209.58161%2013.1074C9.10351%2013.3833%208.49163%2013.219%208.2154%2012.7412C8.13017%2012.5938%208.00116%2012.508%207.78668%2012.4844C7.54655%2012.458%207.22985%2012.5217%206.93414%2012.6933C6.47716%2012.9588%206.21644%2013.6335%206.75055%2014.5586C6.80212%2014.648%206.8383%2014.7422%206.85993%2014.8379C6.88169%2014.9341%206.88921%2015.0325%206.88239%2015.1289C6.88011%2015.1605%206.87591%2015.1924%206.87067%2015.2236C6.84953%2015.3497%206.80398%2015.4712%206.73688%2015.581C6.71999%2015.6086%206.70182%2015.6361%206.68219%2015.6621C6.604%2015.7655%206.50365%2015.8558%206.38434%2015.9248C6.26484%2015.9937%206.13622%2016.0358%206.00739%2016.0517C5.97532%2016.0557%205.94278%2016.0567%205.91071%2016.0576C5.78181%2016.0609%205.65369%2016.0399%205.53375%2015.9951C5.50399%2015.984%205.47451%2015.9719%205.44586%2015.958C5.38803%2015.9299%205.33274%2015.8956%205.28082%2015.8564C5.22884%2015.8172%205.17952%2015.7725%205.13531%2015.7226C5.0915%2015.6731%205.05248%2015.618%205.01813%2015.5586C4.84584%2015.2603%204.44767%2015.1429%204.13824%2015.2851C4.12447%2015.3096%204.10645%2015.3465%204.08844%2015.3955C4.06324%2015.4643%204.04336%2015.542%204.03082%2015.6172C4.01804%2015.6941%204.01585%2015.7518%204.01715%2015.7812C4.05847%2016.6992%204.59721%2017.777%205.5191%2018.8046C6.42748%2019.8172%207.60728%2020.6662%208.71344%2021.1425C10.3938%2021.8659%2012.0425%2021.5504%2013.5592%2020.5429C15.1019%2019.5179%2016.4527%2017.7999%2017.357%2015.8945C17.965%2014.6134%2018.6735%2013.1231%2018.9537%2011.8847C19.0949%2011.2602%2019.0921%2010.8367%2019.0162%2010.5879C18.967%2010.4271%2018.8907%2010.3115%2018.6051%2010.2353C18.0234%2010.0806%2017.4482%2010.2526%2016.9283%2010.6592C16.3901%2011.0803%2016.0271%2011.6697%2015.9146%2012.0888C15.8847%2012.2004%2015.8355%2012.3022%2015.774%2012.3926L15.8941%2012.6133C16.1594%2013.0975%2015.9828%2013.7052%2015.4986%2013.9707C15.0144%2014.236%2014.4067%2014.0583%2014.1412%2013.5742L9.44196%204.99903C9.19845%204.58079%208.82143%204.19137%208.4195%203.99219ZM16.8004%201.13869C16.8688%200.95384%2017.1302%200.953926%2017.1988%201.13869L17.5113%201.98243C17.7695%202.67996%2018.3197%203.22996%2019.0172%203.48829L19.8609%203.80079C20.0458%203.86929%2020.0458%204.13073%2019.8609%204.19922L19.0172%204.51172C18.3197%204.77005%2017.7695%205.32004%2017.5113%206.01758L17.1988%206.86133C17.1302%207.04606%2016.8689%207.04614%2016.8004%206.86133L16.4879%206.01758C16.2296%205.31999%2015.6796%204.76998%2014.982%204.51172L14.1383%204.19922C13.9538%204.13058%2013.9538%203.86944%2014.1383%203.80079L14.982%203.48829C15.6796%203.23003%2016.2296%202.68002%2016.4879%201.98243L16.8004%201.13869Z%22%20fill%3D%22black%22%2F%3E%0A%3C%2Fsvg%3E%0A";
|
|
26325
26388
|
|
|
26326
|
-
// agent-gui/agentGuiNode/composer/
|
|
26389
|
+
// agent-gui/agentGuiNode/composer/ComposerTuttiModeChip.tsx
|
|
26327
26390
|
import { jsx as jsx39, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
26328
|
-
|
|
26329
|
-
|
|
26330
|
-
|
|
26331
|
-
|
|
26332
|
-
|
|
26333
|
-
|
|
26334
|
-
|
|
26335
|
-
sliderClassName: "[&_[data-slot=slider-thumb]]:border-[var(--state-warning)]"
|
|
26336
|
-
},
|
|
26337
|
-
powerful: {
|
|
26338
|
-
badgeVariant: "pending",
|
|
26339
|
-
sliderClassName: "[&_[data-slot=slider-thumb]]:border-[var(--tutti-purple)]"
|
|
26340
|
-
}
|
|
26341
|
-
};
|
|
26342
|
-
function TuttiBudgetPopover({
|
|
26343
|
-
children,
|
|
26344
|
-
intensity,
|
|
26345
|
-
labels,
|
|
26346
|
-
onConfirm
|
|
26391
|
+
function ComposerTuttiModeChip({
|
|
26392
|
+
active,
|
|
26393
|
+
updating,
|
|
26394
|
+
label,
|
|
26395
|
+
description,
|
|
26396
|
+
tuttiModeSupported,
|
|
26397
|
+
onTuttiModeChange
|
|
26347
26398
|
}) {
|
|
26348
|
-
const
|
|
26349
|
-
|
|
26350
|
-
|
|
26351
|
-
|
|
26352
|
-
const previewLabel = {
|
|
26353
|
-
cost: labels.previewCost,
|
|
26354
|
-
balance: labels.previewBalance,
|
|
26355
|
-
powerful: labels.previewPowerful
|
|
26356
|
-
}[preview.tier];
|
|
26357
|
-
const modelStrength = {
|
|
26358
|
-
economical: labels.modelStrengthCost,
|
|
26359
|
-
balanced: labels.modelStrengthBalance,
|
|
26360
|
-
mostCapable: labels.modelStrengthPowerful
|
|
26361
|
-
}[preview.modelStrength];
|
|
26362
|
-
const agentCount = {
|
|
26363
|
-
single: labels.agentCountCost,
|
|
26364
|
-
smallGroup: labels.agentCountBalance,
|
|
26365
|
-
maxParallel: labels.agentCountPowerful
|
|
26366
|
-
}[preview.agentCount];
|
|
26399
|
+
const switchId = useId();
|
|
26400
|
+
if (!onTuttiModeChange || !tuttiModeSupported) {
|
|
26401
|
+
return null;
|
|
26402
|
+
}
|
|
26367
26403
|
return /* @__PURE__ */ jsxs29(
|
|
26368
|
-
|
|
26404
|
+
"label",
|
|
26369
26405
|
{
|
|
26370
|
-
|
|
26371
|
-
|
|
26372
|
-
|
|
26373
|
-
|
|
26374
|
-
|
|
26375
|
-
|
|
26376
|
-
|
|
26406
|
+
htmlFor: switchId,
|
|
26407
|
+
title: description ?? label,
|
|
26408
|
+
"data-testid": "agent-gui-composer-tutti-mode-toggle",
|
|
26409
|
+
"data-agent-tutti-mode-active": active ? "true" : void 0,
|
|
26410
|
+
className: cn(
|
|
26411
|
+
AgentGUINode_styles_default.composerMenuTrigger,
|
|
26412
|
+
"group w-auto !gap-1.5",
|
|
26413
|
+
updating ? "cursor-wait opacity-70" : "cursor-pointer"
|
|
26414
|
+
),
|
|
26377
26415
|
children: [
|
|
26378
|
-
/* @__PURE__ */ jsx39(
|
|
26379
|
-
|
|
26380
|
-
PopoverContent4,
|
|
26416
|
+
/* @__PURE__ */ jsx39(
|
|
26417
|
+
"span",
|
|
26381
26418
|
{
|
|
26382
|
-
|
|
26383
|
-
className: "
|
|
26384
|
-
|
|
26385
|
-
|
|
26386
|
-
|
|
26387
|
-
|
|
26388
|
-
|
|
26389
|
-
|
|
26390
|
-
|
|
26391
|
-
|
|
26392
|
-
|
|
26393
|
-
|
|
26394
|
-
|
|
26395
|
-
|
|
26396
|
-
|
|
26397
|
-
|
|
26398
|
-
|
|
26399
|
-
|
|
26400
|
-
|
|
26401
|
-
|
|
26402
|
-
|
|
26403
|
-
|
|
26404
|
-
|
|
26405
|
-
|
|
26406
|
-
|
|
26407
|
-
|
|
26408
|
-
)
|
|
26409
|
-
] }),
|
|
26410
|
-
/* @__PURE__ */ jsxs29("div", { className: "mt-2", children: [
|
|
26411
|
-
/* @__PURE__ */ jsx39(
|
|
26412
|
-
Slider,
|
|
26413
|
-
{
|
|
26414
|
-
"aria-label": labels.intensityLabel,
|
|
26415
|
-
className: `[&_[data-slot=slider-range]]:bg-transparent [&_[data-slot=slider-track]]:bg-[linear-gradient(90deg,var(--state-success)_0%,var(--state-warning)_50%,var(--tutti-purple)_100%)] ${previewTone.sliderClassName}`,
|
|
26416
|
-
"data-agent-tutti-budget-intensity-slider": "true",
|
|
26417
|
-
"data-agent-tutti-budget-slider-tone": preview.tier,
|
|
26418
|
-
max: 100,
|
|
26419
|
-
min: 0,
|
|
26420
|
-
step: 1,
|
|
26421
|
-
value: [draftIntensity],
|
|
26422
|
-
onValueChange: (values) => setDraftIntensity(values[0] ?? draftIntensity)
|
|
26423
|
-
}
|
|
26424
|
-
),
|
|
26425
|
-
/* @__PURE__ */ jsxs29("div", { className: "mt-1 flex items-center justify-between gap-2 text-[10px] font-medium", children: [
|
|
26426
|
-
/* @__PURE__ */ jsx39("span", { className: "text-[var(--state-success)]", children: labels.previewCost }),
|
|
26427
|
-
/* @__PURE__ */ jsx39("span", { className: "text-[var(--state-warning)]", children: labels.previewBalance }),
|
|
26428
|
-
/* @__PURE__ */ jsx39("span", { className: "text-[var(--tutti-purple)]", children: labels.previewPowerful })
|
|
26429
|
-
] })
|
|
26430
|
-
] }),
|
|
26431
|
-
/* @__PURE__ */ jsxs29(
|
|
26432
|
-
"div",
|
|
26433
|
-
{
|
|
26434
|
-
"aria-live": "polite",
|
|
26435
|
-
className: "mt-2 flex items-center justify-between gap-2 border-t border-[var(--line-2)] pt-2",
|
|
26436
|
-
children: [
|
|
26437
|
-
/* @__PURE__ */ jsx39("span", { className: "text-[11px] font-medium text-[var(--text-secondary)]", children: labels.previewTitle }),
|
|
26438
|
-
/* @__PURE__ */ jsx39(Badge, { size: "sm", variant: previewTone.badgeVariant, children: previewLabel })
|
|
26439
|
-
]
|
|
26440
|
-
}
|
|
26441
|
-
),
|
|
26442
|
-
/* @__PURE__ */ jsxs29("div", { className: "mt-2 grid grid-cols-2 gap-2 text-[10px]", children: [
|
|
26443
|
-
/* @__PURE__ */ jsxs29("div", { className: "min-w-0", children: [
|
|
26444
|
-
/* @__PURE__ */ jsx39("div", { className: "text-[var(--text-tertiary)]", children: labels.modelStrengthLabel }),
|
|
26445
|
-
/* @__PURE__ */ jsx39(
|
|
26446
|
-
"div",
|
|
26447
|
-
{
|
|
26448
|
-
className: "truncate font-medium text-[var(--text-primary)]",
|
|
26449
|
-
"data-agent-tutti-budget-model-strength": "true",
|
|
26450
|
-
children: modelStrength
|
|
26451
|
-
}
|
|
26452
|
-
)
|
|
26453
|
-
] }),
|
|
26454
|
-
/* @__PURE__ */ jsxs29("div", { className: "min-w-0", children: [
|
|
26455
|
-
/* @__PURE__ */ jsx39("div", { className: "text-[var(--text-tertiary)]", children: labels.agentCountLabel }),
|
|
26456
|
-
/* @__PURE__ */ jsx39(
|
|
26457
|
-
"div",
|
|
26458
|
-
{
|
|
26459
|
-
className: "truncate font-medium text-[var(--text-primary)]",
|
|
26460
|
-
"data-agent-tutti-budget-agent-count": "true",
|
|
26461
|
-
children: agentCount
|
|
26462
|
-
}
|
|
26463
|
-
)
|
|
26464
|
-
] })
|
|
26465
|
-
] }),
|
|
26466
|
-
/* @__PURE__ */ jsx39("p", { className: "mt-2 mb-0 text-[10px] leading-[1.35] text-[var(--text-tertiary)]", children: labels.previewHint })
|
|
26467
|
-
]
|
|
26468
|
-
}
|
|
26469
|
-
),
|
|
26470
|
-
/* @__PURE__ */ jsxs29("div", { className: "flex items-center justify-end gap-2", children: [
|
|
26471
|
-
/* @__PURE__ */ jsx39(
|
|
26472
|
-
Button4,
|
|
26473
|
-
{
|
|
26474
|
-
"data-agent-tutti-budget-cancel": "true",
|
|
26475
|
-
size: "sm",
|
|
26476
|
-
type: "button",
|
|
26477
|
-
variant: "secondary",
|
|
26478
|
-
onClick: () => setOpen(false),
|
|
26479
|
-
children: labels.cancel
|
|
26480
|
-
}
|
|
26481
|
-
),
|
|
26482
|
-
/* @__PURE__ */ jsx39(
|
|
26483
|
-
Button4,
|
|
26484
|
-
{
|
|
26485
|
-
"data-agent-tutti-budget-confirm": "true",
|
|
26486
|
-
size: "sm",
|
|
26487
|
-
type: "button",
|
|
26488
|
-
onClick: () => {
|
|
26489
|
-
onConfirm(draftIntensity);
|
|
26490
|
-
setOpen(false);
|
|
26491
|
-
},
|
|
26492
|
-
children: labels.confirm
|
|
26493
|
-
}
|
|
26494
|
-
)
|
|
26495
|
-
] })
|
|
26496
|
-
]
|
|
26419
|
+
"aria-hidden": true,
|
|
26420
|
+
className: "inline-block size-4 shrink-0 bg-current transition-colors",
|
|
26421
|
+
style: {
|
|
26422
|
+
WebkitMaskImage: `url("${tutti_mode_lined_default}")`,
|
|
26423
|
+
WebkitMaskPosition: "center",
|
|
26424
|
+
WebkitMaskRepeat: "no-repeat",
|
|
26425
|
+
WebkitMaskSize: "contain",
|
|
26426
|
+
maskImage: `url("${tutti_mode_lined_default}")`,
|
|
26427
|
+
maskPosition: "center",
|
|
26428
|
+
maskRepeat: "no-repeat",
|
|
26429
|
+
maskSize: "contain"
|
|
26430
|
+
}
|
|
26431
|
+
}
|
|
26432
|
+
),
|
|
26433
|
+
/* @__PURE__ */ jsx39("span", { className: "min-w-0 truncate", children: label }),
|
|
26434
|
+
/* @__PURE__ */ jsx39(
|
|
26435
|
+
Switch,
|
|
26436
|
+
{
|
|
26437
|
+
id: switchId,
|
|
26438
|
+
size: "sm",
|
|
26439
|
+
checked: active,
|
|
26440
|
+
disabled: updating,
|
|
26441
|
+
"aria-label": label,
|
|
26442
|
+
className: "ml-0.5",
|
|
26443
|
+
"data-testid": "agent-gui-composer-tutti-mode-toggle-switch",
|
|
26444
|
+
onCheckedChange: (checked) => onTuttiModeChange(checked)
|
|
26497
26445
|
}
|
|
26498
26446
|
)
|
|
26499
26447
|
]
|
|
@@ -26522,7 +26470,8 @@ function ComposerFooter({
|
|
|
26522
26470
|
isPlanModeActive,
|
|
26523
26471
|
isTuttiModeActive,
|
|
26524
26472
|
isTuttiModeUpdating,
|
|
26525
|
-
|
|
26473
|
+
tuttiModeSupported,
|
|
26474
|
+
onTuttiModeChange,
|
|
26526
26475
|
composerActionButton,
|
|
26527
26476
|
quickPromptControl,
|
|
26528
26477
|
showHandoffSelect,
|
|
@@ -26546,9 +26495,7 @@ function ComposerFooter({
|
|
|
26546
26495
|
onSubmit,
|
|
26547
26496
|
onClearGoalMode: clearGoalModeBadge,
|
|
26548
26497
|
draftPrompt: _draftPrompt,
|
|
26549
|
-
onClearPlanMode
|
|
26550
|
-
onClearTuttiMode,
|
|
26551
|
-
onTuttiModeOrchestrationIntensityChange
|
|
26498
|
+
onClearPlanMode
|
|
26552
26499
|
}) {
|
|
26553
26500
|
const showSettingsLoadingPlaceholders = composerSettings.isSettingsLoading;
|
|
26554
26501
|
return /* @__PURE__ */ jsx40(Fragment13, { children: /* @__PURE__ */ jsxs30("div", { className: AgentGUINode_styles_default.composerFooter, children: [
|
|
@@ -26634,7 +26581,7 @@ function ComposerFooter({
|
|
|
26634
26581
|
"span",
|
|
26635
26582
|
{
|
|
26636
26583
|
"aria-hidden": true,
|
|
26637
|
-
className: "inline-block size-
|
|
26584
|
+
className: "inline-block size-4 bg-current transition-colors",
|
|
26638
26585
|
style: {
|
|
26639
26586
|
WebkitMaskImage: `url("${lined_default}")`,
|
|
26640
26587
|
WebkitMaskPosition: "center",
|
|
@@ -26652,6 +26599,17 @@ function ComposerFooter({
|
|
|
26652
26599
|
/* @__PURE__ */ jsx40(TooltipContent5, { side: "top", children: labels.mentionPalette })
|
|
26653
26600
|
] }) })
|
|
26654
26601
|
] }),
|
|
26602
|
+
/* @__PURE__ */ jsx40(
|
|
26603
|
+
ComposerTuttiModeChip,
|
|
26604
|
+
{
|
|
26605
|
+
active: isTuttiModeActive,
|
|
26606
|
+
updating: isTuttiModeUpdating,
|
|
26607
|
+
label: labels.tuttiModeLabel,
|
|
26608
|
+
description: labels.tuttiModeDescription,
|
|
26609
|
+
tuttiModeSupported,
|
|
26610
|
+
onTuttiModeChange
|
|
26611
|
+
}
|
|
26612
|
+
),
|
|
26655
26613
|
showHandoffSelect ? /* @__PURE__ */ jsx40(
|
|
26656
26614
|
AgentHandoffMenu,
|
|
26657
26615
|
{
|
|
@@ -26771,70 +26729,6 @@ function ComposerFooter({
|
|
|
26771
26729
|
] })
|
|
26772
26730
|
}
|
|
26773
26731
|
) : null,
|
|
26774
|
-
isTuttiModeActive ? /* @__PURE__ */ jsxs30("span", { className: "inline-flex shrink-0 items-center gap-0.5", children: [
|
|
26775
|
-
/* @__PURE__ */ jsx40(
|
|
26776
|
-
TuttiBudgetPopover,
|
|
26777
|
-
{
|
|
26778
|
-
intensity: tuttiModeOrchestrationIntensity,
|
|
26779
|
-
labels: {
|
|
26780
|
-
title: labels.tuttiBudgetTitle,
|
|
26781
|
-
intensityLabel: labels.tuttiBudgetIntensityLabel,
|
|
26782
|
-
previewTitle: labels.tuttiBudgetPreviewTitle,
|
|
26783
|
-
previewHint: labels.tuttiBudgetPreviewHint,
|
|
26784
|
-
previewCost: labels.tuttiBudgetPreviewCost,
|
|
26785
|
-
previewBalance: labels.tuttiBudgetPreviewBalance,
|
|
26786
|
-
previewPowerful: labels.tuttiBudgetPreviewPowerful,
|
|
26787
|
-
modelStrengthLabel: labels.tuttiBudgetModelStrengthLabel,
|
|
26788
|
-
modelStrengthCost: labels.tuttiBudgetModelStrengthCost,
|
|
26789
|
-
modelStrengthBalance: labels.tuttiBudgetModelStrengthBalance,
|
|
26790
|
-
modelStrengthPowerful: labels.tuttiBudgetModelStrengthPowerful,
|
|
26791
|
-
agentCountLabel: labels.tuttiBudgetAgentCountLabel,
|
|
26792
|
-
agentCountCost: labels.tuttiBudgetAgentCountCost,
|
|
26793
|
-
agentCountBalance: labels.tuttiBudgetAgentCountBalance,
|
|
26794
|
-
agentCountPowerful: labels.tuttiBudgetAgentCountPowerful,
|
|
26795
|
-
confirm: labels.tuttiBudgetConfirm,
|
|
26796
|
-
cancel: labels.tuttiBudgetCancel
|
|
26797
|
-
},
|
|
26798
|
-
onConfirm: onTuttiModeOrchestrationIntensityChange,
|
|
26799
|
-
children: /* @__PURE__ */ jsx40(
|
|
26800
|
-
"button",
|
|
26801
|
-
{
|
|
26802
|
-
type: "button",
|
|
26803
|
-
disabled: isTuttiModeUpdating,
|
|
26804
|
-
"aria-label": labels.tuttiModeLabel,
|
|
26805
|
-
title: labels.tuttiModeDescription,
|
|
26806
|
-
"data-agent-tutti-mode-badge": "true",
|
|
26807
|
-
className: cn(
|
|
26808
|
-
AgentGUINode_styles_default.composerMenuTrigger,
|
|
26809
|
-
"group w-auto",
|
|
26810
|
-
"disabled:cursor-not-allowed disabled:opacity-60"
|
|
26811
|
-
),
|
|
26812
|
-
children: /* @__PURE__ */ jsxs30("span", { className: "flex min-w-0 items-center gap-1.5 overflow-hidden", children: [
|
|
26813
|
-
/* @__PURE__ */ jsx40(Sparkles, { "aria-hidden": true, className: "size-3.5 shrink-0" }),
|
|
26814
|
-
/* @__PURE__ */ jsx40("span", { className: "min-w-0 truncate", children: labels.tuttiModeLabel })
|
|
26815
|
-
] })
|
|
26816
|
-
}
|
|
26817
|
-
)
|
|
26818
|
-
}
|
|
26819
|
-
),
|
|
26820
|
-
/* @__PURE__ */ jsx40(
|
|
26821
|
-
"button",
|
|
26822
|
-
{
|
|
26823
|
-
type: "button",
|
|
26824
|
-
disabled: isTuttiModeUpdating,
|
|
26825
|
-
"aria-label": labels.tuttiModeRemove,
|
|
26826
|
-
title: labels.tuttiModeRemove,
|
|
26827
|
-
"data-agent-tutti-mode-remove": "true",
|
|
26828
|
-
className: cn(
|
|
26829
|
-
AgentGUINode_styles_default.composerMenuTrigger,
|
|
26830
|
-
"group w-auto justify-center",
|
|
26831
|
-
"disabled:cursor-not-allowed disabled:opacity-60"
|
|
26832
|
-
),
|
|
26833
|
-
onClick: onClearTuttiMode,
|
|
26834
|
-
children: /* @__PURE__ */ jsx40(X5, { "aria-hidden": true, className: "size-3", strokeWidth: 3 })
|
|
26835
|
-
}
|
|
26836
|
-
)
|
|
26837
|
-
] }) : null,
|
|
26838
26732
|
isGoalModeActive ? /* @__PURE__ */ jsx40(
|
|
26839
26733
|
"button",
|
|
26840
26734
|
{
|
|
@@ -26983,15 +26877,15 @@ function RemovableBadgeIcon({ icon }) {
|
|
|
26983
26877
|
}
|
|
26984
26878
|
|
|
26985
26879
|
// agent-gui/agentGuiNode/composer/quickPrompts/AgentQuickPromptPopover.tsx
|
|
26986
|
-
import { useId, useRef as useRef38, useState as
|
|
26880
|
+
import { useId as useId2, useRef as useRef38, useState as useState24 } from "react";
|
|
26987
26881
|
import {
|
|
26988
|
-
Button as
|
|
26882
|
+
Button as Button6,
|
|
26989
26883
|
ConfirmationDialog as ConfirmationDialog2,
|
|
26990
26884
|
DialogFooter as DialogFooter2,
|
|
26991
26885
|
Input as Input2,
|
|
26992
|
-
Popover as
|
|
26993
|
-
PopoverContent as
|
|
26994
|
-
PopoverTrigger as
|
|
26886
|
+
Popover as Popover4,
|
|
26887
|
+
PopoverContent as PopoverContent4,
|
|
26888
|
+
PopoverTrigger as PopoverTrigger3,
|
|
26995
26889
|
ScrollArea,
|
|
26996
26890
|
Spinner as Spinner6,
|
|
26997
26891
|
Tooltip as Tooltip7,
|
|
@@ -27010,9 +26904,9 @@ import {
|
|
|
27010
26904
|
} from "@tutti-os/ui-system/icons";
|
|
27011
26905
|
|
|
27012
26906
|
// agent-gui/agentGuiNode/composer/quickPrompts/AgentQuickPromptEditorDialog.tsx
|
|
27013
|
-
import { useRef as useRef35, useState as
|
|
26907
|
+
import { useRef as useRef35, useState as useState23 } from "react";
|
|
27014
26908
|
import {
|
|
27015
|
-
Button as
|
|
26909
|
+
Button as Button4,
|
|
27016
26910
|
Dialog,
|
|
27017
26911
|
DialogContent,
|
|
27018
26912
|
DialogDescription,
|
|
@@ -27031,10 +26925,10 @@ function AgentQuickPromptEditorDialog({
|
|
|
27031
26925
|
}) {
|
|
27032
26926
|
const { labels } = controller;
|
|
27033
26927
|
const source = controller.mode === "edit" ? controller.selectedPrompt : null;
|
|
27034
|
-
const [draft, setDraft] =
|
|
26928
|
+
const [draft, setDraft] = useState23(
|
|
27035
26929
|
() => controller.initialDraft ?? promptDraft(source)
|
|
27036
26930
|
);
|
|
27037
|
-
const [validationError, setValidationError] =
|
|
26931
|
+
const [validationError, setValidationError] = useState23(null);
|
|
27038
26932
|
const cancelRequestedOnPointerDownRef = useRef35(false);
|
|
27039
26933
|
const submit = async () => {
|
|
27040
26934
|
const error = validateDraft(draft, labels);
|
|
@@ -27124,7 +27018,7 @@ function AgentQuickPromptEditorDialog({
|
|
|
27124
27018
|
validationError || mutationError ? /* @__PURE__ */ jsx41("p", { className: "text-[12px] text-[var(--state-danger)]", role: "alert", children: validationError ?? mutationError }) : null,
|
|
27125
27019
|
/* @__PURE__ */ jsxs31(DialogFooter, { children: [
|
|
27126
27020
|
/* @__PURE__ */ jsx41(
|
|
27127
|
-
|
|
27021
|
+
Button4,
|
|
27128
27022
|
{
|
|
27129
27023
|
disabled: controller.isSaving,
|
|
27130
27024
|
size: "dialog",
|
|
@@ -27146,7 +27040,7 @@ function AgentQuickPromptEditorDialog({
|
|
|
27146
27040
|
children: labels.cancel
|
|
27147
27041
|
}
|
|
27148
27042
|
),
|
|
27149
|
-
/* @__PURE__ */ jsxs31(
|
|
27043
|
+
/* @__PURE__ */ jsxs31(Button4, { disabled: controller.isSaving, size: "dialog", type: "submit", children: [
|
|
27150
27044
|
controller.isSaving ? /* @__PURE__ */ jsx41(Spinner5, { size: 14 }) : null,
|
|
27151
27045
|
controller.isSaving ? labels.saving : labels.save
|
|
27152
27046
|
] })
|
|
@@ -27184,7 +27078,7 @@ import { Sortable, SortableContent, SortableItem } from "@tutti-os/ui-system";
|
|
|
27184
27078
|
import { useRef as useRef36 } from "react";
|
|
27185
27079
|
import {
|
|
27186
27080
|
BareIconButton,
|
|
27187
|
-
Button as
|
|
27081
|
+
Button as Button5,
|
|
27188
27082
|
SortableItemHandle,
|
|
27189
27083
|
Tooltip as Tooltip6,
|
|
27190
27084
|
TooltipContent as TooltipContent6,
|
|
@@ -27240,7 +27134,7 @@ function AgentQuickPromptRow({
|
|
|
27240
27134
|
}
|
|
27241
27135
|
) : null,
|
|
27242
27136
|
isSorting ? /* @__PURE__ */ jsx42("div", { className: "h-auto min-w-0 flex-1 px-1 py-2 text-left whitespace-normal", children: promptContent }) : /* @__PURE__ */ jsx42(
|
|
27243
|
-
|
|
27137
|
+
Button5,
|
|
27244
27138
|
{
|
|
27245
27139
|
...selectionAction,
|
|
27246
27140
|
ref: selectionRef,
|
|
@@ -27446,8 +27340,8 @@ function AgentQuickPromptPopover({
|
|
|
27446
27340
|
const preserveExternalFocusRef = useRef38(false);
|
|
27447
27341
|
const createRequestedOnPointerDownRef = useRef38(false);
|
|
27448
27342
|
const templateRequestedOnPointerDownRef = useRef38(false);
|
|
27449
|
-
const [view, setView] =
|
|
27450
|
-
const [sortingState, setSortingState] =
|
|
27343
|
+
const [view, setView] = useState24("prompts");
|
|
27344
|
+
const [sortingState, setSortingState] = useState24({
|
|
27451
27345
|
isPopoverOpen: controller.isPopoverOpen,
|
|
27452
27346
|
isSorting: false
|
|
27453
27347
|
});
|
|
@@ -27465,7 +27359,7 @@ function AgentQuickPromptPopover({
|
|
|
27465
27359
|
isSorting: next
|
|
27466
27360
|
});
|
|
27467
27361
|
};
|
|
27468
|
-
const titleId =
|
|
27362
|
+
const titleId = useId2();
|
|
27469
27363
|
const { labels, snapshot } = controller;
|
|
27470
27364
|
const templateEntryAction = usePrimaryPointerAction2(
|
|
27471
27365
|
() => setView("templates")
|
|
@@ -27496,7 +27390,7 @@ function AgentQuickPromptPopover({
|
|
|
27496
27390
|
const isTemplateView = view === "templates";
|
|
27497
27391
|
return /* @__PURE__ */ jsxs33(Fragment15, { children: [
|
|
27498
27392
|
/* @__PURE__ */ jsxs33(
|
|
27499
|
-
|
|
27393
|
+
Popover4,
|
|
27500
27394
|
{
|
|
27501
27395
|
modal: false,
|
|
27502
27396
|
open: controller.isPopoverOpen,
|
|
@@ -27509,8 +27403,8 @@ function AgentQuickPromptPopover({
|
|
|
27509
27403
|
},
|
|
27510
27404
|
children: [
|
|
27511
27405
|
/* @__PURE__ */ jsx44(TooltipProvider5, { delayDuration: 120, children: /* @__PURE__ */ jsxs33(Tooltip7, { children: [
|
|
27512
|
-
/* @__PURE__ */ jsx44(TooltipTrigger7, { asChild: true, children: /* @__PURE__ */ jsx44("span", { className: "inline-flex shrink-0", children: /* @__PURE__ */ jsx44(
|
|
27513
|
-
|
|
27406
|
+
/* @__PURE__ */ jsx44(TooltipTrigger7, { asChild: true, children: /* @__PURE__ */ jsx44("span", { className: "inline-flex shrink-0", children: /* @__PURE__ */ jsx44(PopoverTrigger3, { asChild: true, children: /* @__PURE__ */ jsxs33(
|
|
27407
|
+
Button6,
|
|
27514
27408
|
{
|
|
27515
27409
|
"aria-label": labels.triggerTooltip,
|
|
27516
27410
|
disabled,
|
|
@@ -27526,7 +27420,7 @@ function AgentQuickPromptPopover({
|
|
|
27526
27420
|
/* @__PURE__ */ jsx44(TooltipContent7, { side: "top", children: labels.triggerTooltip })
|
|
27527
27421
|
] }) }),
|
|
27528
27422
|
/* @__PURE__ */ jsxs33(
|
|
27529
|
-
|
|
27423
|
+
PopoverContent4,
|
|
27530
27424
|
{
|
|
27531
27425
|
"aria-labelledby": titleId,
|
|
27532
27426
|
align: "start",
|
|
@@ -27560,7 +27454,7 @@ function AgentQuickPromptPopover({
|
|
|
27560
27454
|
}
|
|
27561
27455
|
),
|
|
27562
27456
|
isTemplateView ? /* @__PURE__ */ jsxs33(
|
|
27563
|
-
|
|
27457
|
+
Button6,
|
|
27564
27458
|
{
|
|
27565
27459
|
size: "sm",
|
|
27566
27460
|
type: "button",
|
|
@@ -27572,7 +27466,7 @@ function AgentQuickPromptPopover({
|
|
|
27572
27466
|
]
|
|
27573
27467
|
}
|
|
27574
27468
|
) : /* @__PURE__ */ jsx44("div", { className: "flex items-center gap-1", children: isSorting ? /* @__PURE__ */ jsxs33(
|
|
27575
|
-
|
|
27469
|
+
Button6,
|
|
27576
27470
|
{
|
|
27577
27471
|
disabled: controller.isInteractionLocked,
|
|
27578
27472
|
size: "sm",
|
|
@@ -27586,7 +27480,7 @@ function AgentQuickPromptPopover({
|
|
|
27586
27480
|
}
|
|
27587
27481
|
) : /* @__PURE__ */ jsxs33(Fragment15, { children: [
|
|
27588
27482
|
/* @__PURE__ */ jsxs33(
|
|
27589
|
-
|
|
27483
|
+
Button6,
|
|
27590
27484
|
{
|
|
27591
27485
|
disabled: controller.isInteractionLocked || !controller.showReorderHandles,
|
|
27592
27486
|
size: "sm",
|
|
@@ -27600,7 +27494,7 @@ function AgentQuickPromptPopover({
|
|
|
27600
27494
|
}
|
|
27601
27495
|
),
|
|
27602
27496
|
/* @__PURE__ */ jsxs33(
|
|
27603
|
-
|
|
27497
|
+
Button6,
|
|
27604
27498
|
{
|
|
27605
27499
|
disabled: controller.isInteractionLocked,
|
|
27606
27500
|
size: "sm",
|
|
@@ -27661,7 +27555,7 @@ function AgentQuickPromptPopover({
|
|
|
27661
27555
|
children: [
|
|
27662
27556
|
/* @__PURE__ */ jsx44("span", { children: labels.loadError }),
|
|
27663
27557
|
/* @__PURE__ */ jsx44(
|
|
27664
|
-
|
|
27558
|
+
Button6,
|
|
27665
27559
|
{
|
|
27666
27560
|
size: "xs",
|
|
27667
27561
|
type: "button",
|
|
@@ -27681,7 +27575,7 @@ function AgentQuickPromptPopover({
|
|
|
27681
27575
|
children: [
|
|
27682
27576
|
/* @__PURE__ */ jsx44("span", { children: controller.reorderError === "conflict" ? labels.reorderConflict : labels.reorderError }),
|
|
27683
27577
|
/* @__PURE__ */ jsx44(
|
|
27684
|
-
|
|
27578
|
+
Button6,
|
|
27685
27579
|
{
|
|
27686
27580
|
size: "xs",
|
|
27687
27581
|
type: "button",
|
|
@@ -27719,7 +27613,7 @@ function AgentQuickPromptPopover({
|
|
|
27719
27613
|
{
|
|
27720
27614
|
label: labels.loadError,
|
|
27721
27615
|
action: /* @__PURE__ */ jsx44(
|
|
27722
|
-
|
|
27616
|
+
Button6,
|
|
27723
27617
|
{
|
|
27724
27618
|
disabled: controller.isInteractionLocked,
|
|
27725
27619
|
size: "sm",
|
|
@@ -27789,7 +27683,7 @@ function AgentQuickPromptPopover({
|
|
|
27789
27683
|
description: controller.promptToDelete ? labels.deleteDescription(controller.promptToDelete.title) : void 0,
|
|
27790
27684
|
footer: /* @__PURE__ */ jsxs33(DialogFooter2, { children: [
|
|
27791
27685
|
/* @__PURE__ */ jsx44(
|
|
27792
|
-
|
|
27686
|
+
Button6,
|
|
27793
27687
|
{
|
|
27794
27688
|
...deleteCancelAction,
|
|
27795
27689
|
disabled: controller.isDeleting,
|
|
@@ -27800,7 +27694,7 @@ function AgentQuickPromptPopover({
|
|
|
27800
27694
|
}
|
|
27801
27695
|
),
|
|
27802
27696
|
/* @__PURE__ */ jsx44(
|
|
27803
|
-
|
|
27697
|
+
Button6,
|
|
27804
27698
|
{
|
|
27805
27699
|
...deleteConfirmAction,
|
|
27806
27700
|
disabled: controller.isDeleting,
|
|
@@ -27835,7 +27729,7 @@ function RecommendedTemplateList({
|
|
|
27835
27729
|
/* @__PURE__ */ jsx44("p", { className: "pt-0.5 text-[12px] leading-[1.35] text-[var(--text-secondary)]", children: labels.recommendedTemplatesDescription })
|
|
27836
27730
|
] }),
|
|
27837
27731
|
labels.recommendedTemplates.map((template, index) => /* @__PURE__ */ jsxs33(
|
|
27838
|
-
|
|
27732
|
+
Button6,
|
|
27839
27733
|
{
|
|
27840
27734
|
ref: index === 0 ? firstTemplateRef : void 0,
|
|
27841
27735
|
className: "h-auto w-full justify-between px-2 py-2 text-left whitespace-normal",
|
|
@@ -27876,7 +27770,7 @@ function TemplateEntry({
|
|
|
27876
27770
|
label
|
|
27877
27771
|
}) {
|
|
27878
27772
|
return /* @__PURE__ */ jsxs33(
|
|
27879
|
-
|
|
27773
|
+
Button6,
|
|
27880
27774
|
{
|
|
27881
27775
|
...action,
|
|
27882
27776
|
className: "mt-1 h-auto w-full justify-between px-2 py-2 text-left whitespace-normal",
|
|
@@ -28171,7 +28065,7 @@ function AgentComposerView(input) {
|
|
|
28171
28065
|
style: inputShellStyle,
|
|
28172
28066
|
children: [
|
|
28173
28067
|
/* @__PURE__ */ jsxs34(
|
|
28174
|
-
|
|
28068
|
+
Popover5,
|
|
28175
28069
|
{
|
|
28176
28070
|
open: input.showFileMentionPalette,
|
|
28177
28071
|
onOpenChange: input.setIsPaletteOpen,
|
|
@@ -28425,10 +28319,9 @@ function AgentComposerView(input) {
|
|
|
28425
28319
|
isPlanModeActive: input.isPlanModeActive,
|
|
28426
28320
|
isTuttiModeActive: input.isTuttiModeActive,
|
|
28427
28321
|
isTuttiModeUpdating: input.isTuttiModeUpdating,
|
|
28428
|
-
|
|
28322
|
+
tuttiModeSupported: input.props.capabilityMenuState?.tuttiMode?.enabled === true,
|
|
28323
|
+
onTuttiModeChange: input.props.onTuttiModeChange,
|
|
28429
28324
|
onClearPlanMode: input.onClearPlanMode,
|
|
28430
|
-
onClearTuttiMode: input.onClearTuttiMode,
|
|
28431
|
-
onTuttiModeOrchestrationIntensityChange: input.onTuttiModeOrchestrationIntensityChange,
|
|
28432
28325
|
composerActionButton,
|
|
28433
28326
|
quickPromptControl: /* @__PURE__ */ jsx45(
|
|
28434
28327
|
AgentQuickPromptPopover,
|
|
@@ -28516,7 +28409,7 @@ function AgentComposerView(input) {
|
|
|
28516
28409
|
}
|
|
28517
28410
|
|
|
28518
28411
|
// agent-gui/agentGuiNode/composer/useAgentMentionSearchController.ts
|
|
28519
|
-
import { useEffect as useEffect27, useMemo as useMemo33, useRef as useRef39, useState as
|
|
28412
|
+
import { useEffect as useEffect27, useMemo as useMemo33, useRef as useRef39, useState as useState25 } from "react";
|
|
28520
28413
|
import { useRichTextMentionService } from "@tutti-os/ui-rich-text/editor";
|
|
28521
28414
|
var EMPTY_AGENT_CONTEXT_MENTION_PROVIDERS = [];
|
|
28522
28415
|
function useAgentMentionSearchController(referenceProvenanceFilter) {
|
|
@@ -28525,7 +28418,7 @@ function useAgentMentionSearchController(referenceProvenanceFilter) {
|
|
|
28525
28418
|
() => mentionService?.listProviders().filter(isAgentContextMentionProvider) ?? EMPTY_AGENT_CONTEXT_MENTION_PROVIDERS,
|
|
28526
28419
|
[mentionService]
|
|
28527
28420
|
);
|
|
28528
|
-
const [mentionSearchState, setMentionSearchState] =
|
|
28421
|
+
const [mentionSearchState, setMentionSearchState] = useState25(INITIAL_AGENT_MENTION_SEARCH_STATE);
|
|
28529
28422
|
const mentionControllerRef = useRef39(
|
|
28530
28423
|
null
|
|
28531
28424
|
);
|
|
@@ -28574,7 +28467,7 @@ var INITIAL_AGENT_MENTION_SEARCH_STATE = {
|
|
|
28574
28467
|
};
|
|
28575
28468
|
|
|
28576
28469
|
// agent-gui/agentGuiNode/composer/quickPrompts/useAgentQuickPromptLibrary.ts
|
|
28577
|
-
import { useCallback as useCallback46, useMemo as useMemo34, useRef as useRef40, useState as
|
|
28470
|
+
import { useCallback as useCallback46, useMemo as useMemo34, useRef as useRef40, useState as useState26 } from "react";
|
|
28578
28471
|
var unavailableSnapshot = {
|
|
28579
28472
|
enabled: false,
|
|
28580
28473
|
status: "idle",
|
|
@@ -28596,21 +28489,21 @@ function useAgentQuickPromptLibrary(input) {
|
|
|
28596
28489
|
quickPrompts ?? unavailableQuickPromptStore,
|
|
28597
28490
|
selectQuickPromptSnapshot
|
|
28598
28491
|
);
|
|
28599
|
-
const [mode, setMode] =
|
|
28492
|
+
const [mode, setMode] = useState26("closed");
|
|
28600
28493
|
const modeRef = useRef40(mode);
|
|
28601
28494
|
modeRef.current = mode;
|
|
28602
|
-
const [searchQuery, setSearchQuery] =
|
|
28603
|
-
const [selectedPrompt, setSelectedPrompt] =
|
|
28604
|
-
const [initialDraft, setInitialDraft] =
|
|
28605
|
-
const [promptToDelete, setPromptToDelete] =
|
|
28606
|
-
const [mutationError, setMutationError] =
|
|
28607
|
-
const [isSaving, setIsSaving] =
|
|
28608
|
-
const [isDeleting, setIsDeleting] =
|
|
28609
|
-
const [isReordering, setIsReordering] =
|
|
28610
|
-
const [reorderError, setReorderError] =
|
|
28495
|
+
const [searchQuery, setSearchQuery] = useState26("");
|
|
28496
|
+
const [selectedPrompt, setSelectedPrompt] = useState26(null);
|
|
28497
|
+
const [initialDraft, setInitialDraft] = useState26(null);
|
|
28498
|
+
const [promptToDelete, setPromptToDelete] = useState26(null);
|
|
28499
|
+
const [mutationError, setMutationError] = useState26(null);
|
|
28500
|
+
const [isSaving, setIsSaving] = useState26(false);
|
|
28501
|
+
const [isDeleting, setIsDeleting] = useState26(false);
|
|
28502
|
+
const [isReordering, setIsReordering] = useState26(false);
|
|
28503
|
+
const [reorderError, setReorderError] = useState26(null);
|
|
28611
28504
|
const capabilityAvailable = Boolean(quickPrompts && snapshot.enabled);
|
|
28612
28505
|
const disclosureAvailable = capabilityAvailable && !disabled;
|
|
28613
|
-
const [previousDisclosureAvailable, setPreviousDisclosureAvailable] =
|
|
28506
|
+
const [previousDisclosureAvailable, setPreviousDisclosureAvailable] = useState26(disclosureAvailable);
|
|
28614
28507
|
const disclosureAvailableRef = useRef40(disclosureAvailable);
|
|
28615
28508
|
disclosureAvailableRef.current = disclosureAvailable;
|
|
28616
28509
|
if (previousDisclosureAvailable !== disclosureAvailable) {
|
|
@@ -28891,7 +28784,7 @@ function isVersionConflict(error) {
|
|
|
28891
28784
|
}
|
|
28892
28785
|
|
|
28893
28786
|
// agent-gui/agentGuiNode/composer/useScopedProjectMissingState.ts
|
|
28894
|
-
import { useCallback as useCallback47, useRef as useRef41, useState as
|
|
28787
|
+
import { useCallback as useCallback47, useRef as useRef41, useState as useState27 } from "react";
|
|
28895
28788
|
function useScopedProjectMissingState(scopeKey) {
|
|
28896
28789
|
const identityRef = useRef41({
|
|
28897
28790
|
key: scopeKey,
|
|
@@ -28904,7 +28797,7 @@ function useScopedProjectMissingState(scopeKey) {
|
|
|
28904
28797
|
};
|
|
28905
28798
|
}
|
|
28906
28799
|
const identity = identityRef.current;
|
|
28907
|
-
const [result, setResult] =
|
|
28800
|
+
const [result, setResult] = useState27({
|
|
28908
28801
|
identity,
|
|
28909
28802
|
isMissing: false
|
|
28910
28803
|
});
|
|
@@ -29091,8 +28984,8 @@ function AgentComposer(props) {
|
|
|
29091
28984
|
hadPrefill: agentComposerDraftHasContent(draftContent)
|
|
29092
28985
|
});
|
|
29093
28986
|
};
|
|
29094
|
-
const [isPaletteOpen, setIsPaletteOpen] =
|
|
29095
|
-
const [isReviewPickerOpen, setIsReviewPickerOpen] =
|
|
28987
|
+
const [isPaletteOpen, setIsPaletteOpen] = useState28(true);
|
|
28988
|
+
const [isReviewPickerOpen, setIsReviewPickerOpen] = useState28(false);
|
|
29096
28989
|
const submitWithComposerModifiers = (content, displayPrompt, options) => {
|
|
29097
28990
|
onSubmit(
|
|
29098
28991
|
content,
|
|
@@ -29113,19 +29006,19 @@ function AgentComposer(props) {
|
|
|
29113
29006
|
} : void 0
|
|
29114
29007
|
);
|
|
29115
29008
|
};
|
|
29116
|
-
const [highlightedIndex, setHighlightedIndex] =
|
|
29117
|
-
const [mentionHighlightedKey, setMentionHighlightedKey] =
|
|
29118
|
-
const [shouldCenterMentionHighlight, setShouldCenterMentionHighlight] =
|
|
29009
|
+
const [highlightedIndex, setHighlightedIndex] = useState28(0);
|
|
29010
|
+
const [mentionHighlightedKey, setMentionHighlightedKey] = useState28(null);
|
|
29011
|
+
const [shouldCenterMentionHighlight, setShouldCenterMentionHighlight] = useState28(false);
|
|
29119
29012
|
const [
|
|
29120
29013
|
shouldResetMentionHighlightToFilter,
|
|
29121
29014
|
setShouldResetMentionHighlightToFilter
|
|
29122
|
-
] =
|
|
29123
|
-
const [paletteDraftPrompt, setPaletteDraftPrompt] =
|
|
29015
|
+
] = useState28(false);
|
|
29016
|
+
const [paletteDraftPrompt, setPaletteDraftPrompt] = useState28(
|
|
29124
29017
|
goalDraftObjective ?? draftPrompt
|
|
29125
29018
|
);
|
|
29126
|
-
const [fileMentionSuggestion, setFileMentionSuggestion] =
|
|
29019
|
+
const [fileMentionSuggestion, setFileMentionSuggestion] = useState28(null);
|
|
29127
29020
|
const [isSelectedProjectMissing, setIsSelectedProjectMissing] = useScopedProjectMissingState(draftScopeKey);
|
|
29128
|
-
const [isSlashStatusPanelOpen, setIsSlashStatusPanelOpen] =
|
|
29021
|
+
const [isSlashStatusPanelOpen, setIsSlashStatusPanelOpen] = useState28(false);
|
|
29129
29022
|
const slashStatusAgentSessionId = slashStatus?.agentSessionId ?? null;
|
|
29130
29023
|
const previousSlashStatusAgentSessionIdRef = useRef42(
|
|
29131
29024
|
slashStatusAgentSessionId
|
|
@@ -29151,8 +29044,8 @@ function AgentComposer(props) {
|
|
|
29151
29044
|
const wasActiveRef = useRef42(isActive);
|
|
29152
29045
|
const lastComposerFocusRequestRef = useRef42(null);
|
|
29153
29046
|
const autoMentionHighlightedKeyRef = useRef42(null);
|
|
29154
|
-
const [isPromptTipOverflowing, setIsPromptTipOverflowing] =
|
|
29155
|
-
const [dockComposerMetrics, setDockComposerMetrics] =
|
|
29047
|
+
const [isPromptTipOverflowing, setIsPromptTipOverflowing] = useState28(false);
|
|
29048
|
+
const [dockComposerMetrics, setDockComposerMetrics] = useState28(
|
|
29156
29049
|
INITIAL_DOCK_COMPOSER_METRICS
|
|
29157
29050
|
);
|
|
29158
29051
|
const paletteCatalog = useComposerPaletteCatalog({
|
|
@@ -29265,7 +29158,7 @@ function AgentComposer(props) {
|
|
|
29265
29158
|
availableSkills,
|
|
29266
29159
|
composerSettings,
|
|
29267
29160
|
// Host-gated product capability: omit or enabled:false must hide Tutti Mode
|
|
29268
|
-
// entries (
|
|
29161
|
+
// entries (footer chip, badge activation, /tutti). Fail closed like other
|
|
29269
29162
|
// unsupported host capabilities — do not treat a missing flag as enabled.
|
|
29270
29163
|
tuttiModeSupported: capabilityMenuState?.tuttiMode?.enabled === true,
|
|
29271
29164
|
capabilityControlsReadOnly,
|
|
@@ -29552,7 +29445,7 @@ function AgentComposer(props) {
|
|
|
29552
29445
|
}
|
|
29553
29446
|
|
|
29554
29447
|
// agent-gui/agentGuiNode/AgentHomeSuggestions.tsx
|
|
29555
|
-
import { memo as memo2, useState as
|
|
29448
|
+
import { memo as memo2, useState as useState29 } from "react";
|
|
29556
29449
|
import { ArrowLeftRight, Code, Compass, Import, Pencil, X as X6 } from "lucide-react";
|
|
29557
29450
|
import { jsx as jsx47, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
29558
29451
|
function TuttiIcon(props) {
|
|
@@ -29663,7 +29556,7 @@ var AgentHomeSuggestions = memo2(function AgentHomeSuggestions2({
|
|
|
29663
29556
|
closeLabel
|
|
29664
29557
|
}) {
|
|
29665
29558
|
"use memo";
|
|
29666
|
-
const [activeCategoryId, setActiveCategoryId] =
|
|
29559
|
+
const [activeCategoryId, setActiveCategoryId] = useState29(null);
|
|
29667
29560
|
if (categories.length === 0) {
|
|
29668
29561
|
return null;
|
|
29669
29562
|
}
|
|
@@ -29925,7 +29818,7 @@ var AgentGUIEmptyHeroCarouselStage = class extends Component3 {
|
|
|
29925
29818
|
// agent-gui/agentGuiNode/view/AgentTargetSetupGate.tsx
|
|
29926
29819
|
import { useExternalStoreSnapshot } from "@tutti-os/ui-react-hooks";
|
|
29927
29820
|
import {
|
|
29928
|
-
Button as
|
|
29821
|
+
Button as Button7,
|
|
29929
29822
|
RefreshIcon,
|
|
29930
29823
|
Select as Select4,
|
|
29931
29824
|
SelectContent as SelectContent4,
|
|
@@ -30220,7 +30113,7 @@ function AgentTargetSetupGate({
|
|
|
30220
30113
|
}) }),
|
|
30221
30114
|
/* @__PURE__ */ jsx50("p", { className: AgentGUINode_styles_default.emptyProviderGateDescription, children: setupDescription }),
|
|
30222
30115
|
!setupChecking ? /* @__PURE__ */ jsx50(
|
|
30223
|
-
|
|
30116
|
+
Button7,
|
|
30224
30117
|
{
|
|
30225
30118
|
type: "button",
|
|
30226
30119
|
className: AgentGUINode_styles_default.emptyProviderGateAction,
|
|
@@ -30241,7 +30134,7 @@ function AgentTargetSetupGate({
|
|
|
30241
30134
|
}),
|
|
30242
30135
|
description: setupDescription,
|
|
30243
30136
|
footer: /* @__PURE__ */ jsxs37(
|
|
30244
|
-
|
|
30137
|
+
Button7,
|
|
30245
30138
|
{
|
|
30246
30139
|
size: "dialog",
|
|
30247
30140
|
type: "button",
|
|
@@ -30276,7 +30169,7 @@ function AgentTargetSetupGate({
|
|
|
30276
30169
|
warning: snapshot?.status === "not_installed",
|
|
30277
30170
|
detail: snapshot?.plan ? `${snapshot.plan.packageName}@${snapshot.plan.packageVersion}` : void 0,
|
|
30278
30171
|
action: (snapshot?.status === "not_installed" || installRetryAvailable) && snapshot.plan ? /* @__PURE__ */ jsx50(
|
|
30279
|
-
|
|
30172
|
+
Button7,
|
|
30280
30173
|
{
|
|
30281
30174
|
type: "button",
|
|
30282
30175
|
size: "sm",
|
|
@@ -30300,7 +30193,7 @@ function AgentTargetSetupGate({
|
|
|
30300
30193
|
warning: snapshot?.status === "auth_required",
|
|
30301
30194
|
detail: snapshot?.status === "ready" ? accountDetail : void 0,
|
|
30302
30195
|
action: authenticationAvailable && authMethods.length > 0 ? /* @__PURE__ */ jsx50(
|
|
30303
|
-
|
|
30196
|
+
Button7,
|
|
30304
30197
|
{
|
|
30305
30198
|
type: "button",
|
|
30306
30199
|
size: "sm",
|
|
@@ -30658,7 +30551,6 @@ var AgentGUIEmptyHeroPane = memo3(function AgentGUIEmptyHeroPane2({
|
|
|
30658
30551
|
}
|
|
30659
30552
|
) : null,
|
|
30660
30553
|
/* @__PURE__ */ jsx52(AgentComposer, { ...composerProps }),
|
|
30661
|
-
/* @__PURE__ */ jsx52(AgentGUIEmptyHeroTuttiToggle, { composerProps }),
|
|
30662
30554
|
/* @__PURE__ */ jsx52(
|
|
30663
30555
|
AgentHomeSuggestions,
|
|
30664
30556
|
{
|
|
@@ -30670,61 +30562,6 @@ var AgentGUIEmptyHeroPane = memo3(function AgentGUIEmptyHeroPane2({
|
|
|
30670
30562
|
)
|
|
30671
30563
|
] }) });
|
|
30672
30564
|
});
|
|
30673
|
-
function AgentGUIEmptyHeroTuttiToggle({
|
|
30674
|
-
composerProps
|
|
30675
|
-
}) {
|
|
30676
|
-
const switchId = useId2();
|
|
30677
|
-
const onTuttiModeChange = composerProps.onTuttiModeChange;
|
|
30678
|
-
const tuttiModeEnabled = composerProps.capabilityMenuState?.tuttiMode?.enabled === true;
|
|
30679
|
-
if (!onTuttiModeChange || !tuttiModeEnabled) {
|
|
30680
|
-
return null;
|
|
30681
|
-
}
|
|
30682
|
-
const active = composerProps.tuttiModeActive === true;
|
|
30683
|
-
const updating = composerProps.tuttiModeUpdating === true;
|
|
30684
|
-
const label = composerProps.labels.tuttiModeLabel;
|
|
30685
|
-
const description = composerProps.labels.tuttiModeDescription;
|
|
30686
|
-
return /* @__PURE__ */ jsxs39(
|
|
30687
|
-
"label",
|
|
30688
|
-
{
|
|
30689
|
-
className: cn7(
|
|
30690
|
-
"mx-auto flex w-full max-w-[560px] items-center gap-2.5 rounded-xl border px-3 py-2 transition-colors",
|
|
30691
|
-
active ? "border-[var(--tutti-purple)] bg-[color-mix(in_srgb,var(--tutti-purple)_8%,transparent)]" : "border-[var(--line-2)] hover:border-[var(--tutti-purple)]",
|
|
30692
|
-
updating ? "cursor-wait opacity-70" : "cursor-pointer"
|
|
30693
|
-
),
|
|
30694
|
-
htmlFor: switchId,
|
|
30695
|
-
title: description,
|
|
30696
|
-
"data-testid": "agent-gui-hero-tutti-toggle",
|
|
30697
|
-
children: [
|
|
30698
|
-
/* @__PURE__ */ jsx52(
|
|
30699
|
-
Sparkles2,
|
|
30700
|
-
{
|
|
30701
|
-
"aria-hidden": true,
|
|
30702
|
-
className: cn7(
|
|
30703
|
-
"size-4 shrink-0",
|
|
30704
|
-
active ? "text-[var(--tutti-purple)]" : "text-[var(--agent-gui-text-secondary)]"
|
|
30705
|
-
)
|
|
30706
|
-
}
|
|
30707
|
-
),
|
|
30708
|
-
/* @__PURE__ */ jsxs39("span", { className: "flex min-w-0 flex-1 flex-col text-left", children: [
|
|
30709
|
-
/* @__PURE__ */ jsx52("span", { className: "text-[13px] font-medium text-[var(--text-primary)]", children: label }),
|
|
30710
|
-
description ? /* @__PURE__ */ jsx52("span", { className: "truncate text-[11px] text-[var(--agent-gui-text-tertiary)]", children: description }) : null
|
|
30711
|
-
] }),
|
|
30712
|
-
/* @__PURE__ */ jsx52(
|
|
30713
|
-
Switch,
|
|
30714
|
-
{
|
|
30715
|
-
id: switchId,
|
|
30716
|
-
size: "sm",
|
|
30717
|
-
checked: active,
|
|
30718
|
-
disabled: updating,
|
|
30719
|
-
"aria-label": label,
|
|
30720
|
-
"data-testid": "agent-gui-hero-tutti-toggle-switch",
|
|
30721
|
-
onCheckedChange: (checked) => onTuttiModeChange(checked)
|
|
30722
|
-
}
|
|
30723
|
-
)
|
|
30724
|
-
]
|
|
30725
|
-
}
|
|
30726
|
-
);
|
|
30727
|
-
}
|
|
30728
30565
|
var AgentGUIProviderReadinessGatePane = memo3(
|
|
30729
30566
|
function AgentGUIProviderReadinessGatePane2({
|
|
30730
30567
|
provider,
|
|
@@ -31020,11 +30857,11 @@ function EmptyHeroTitle({
|
|
|
31020
30857
|
// agent-gui/agentGuiNode/view/AgentGUIProviderManagerDialog.tsx
|
|
31021
30858
|
import {
|
|
31022
30859
|
useRef as useRef44,
|
|
31023
|
-
useState as
|
|
30860
|
+
useState as useState30
|
|
31024
30861
|
} from "react";
|
|
31025
30862
|
import { CircleMinus, CirclePlus } from "lucide-react";
|
|
31026
30863
|
import {
|
|
31027
|
-
Button as
|
|
30864
|
+
Button as Button8,
|
|
31028
30865
|
Dialog as Dialog2,
|
|
31029
30866
|
DialogContent as DialogContent2,
|
|
31030
30867
|
DialogDescription as DialogDescription2,
|
|
@@ -31053,17 +30890,17 @@ function AgentGUIProviderManagerDialog({
|
|
|
31053
30890
|
const disabledTargets = targets.filter(
|
|
31054
30891
|
(target) => hidden.has(target.targetId)
|
|
31055
30892
|
);
|
|
31056
|
-
const [editing, setEditing] =
|
|
31057
|
-
const [dragState, setDragState] =
|
|
30893
|
+
const [editing, setEditing] = useState30(false);
|
|
30894
|
+
const [dragState, setDragState] = useState30(
|
|
31058
30895
|
null
|
|
31059
30896
|
);
|
|
31060
|
-
const [dragOverZone, setDragOverZone] =
|
|
30897
|
+
const [dragOverZone, setDragOverZone] = useState30(
|
|
31061
30898
|
null
|
|
31062
30899
|
);
|
|
31063
|
-
const [dragPreview, setDragPreview] =
|
|
30900
|
+
const [dragPreview, setDragPreview] = useState30(null);
|
|
31064
30901
|
const dragStateRef = useRef44(null);
|
|
31065
30902
|
const dragPreviewRef = useRef44(null);
|
|
31066
|
-
const [longPressTargetId, setLongPressTargetId] =
|
|
30903
|
+
const [longPressTargetId, setLongPressTargetId] = useState30(
|
|
31067
30904
|
null
|
|
31068
30905
|
);
|
|
31069
30906
|
const longPressOriginRef = useRef44(null);
|
|
@@ -31356,7 +31193,7 @@ function AgentGUIProviderManagerDialog({
|
|
|
31356
31193
|
}
|
|
31357
31194
|
) : null,
|
|
31358
31195
|
editing ? /* @__PURE__ */ jsx53(
|
|
31359
|
-
|
|
31196
|
+
Button8,
|
|
31360
31197
|
{
|
|
31361
31198
|
"aria-label": labels.removeAgentFromSidebar(label),
|
|
31362
31199
|
className: "absolute right-0.5 top-0 z-10 size-5 rounded-full bg-[var(--background-panel)] p-0 text-[var(--state-danger)] shadow-sm hover:bg-[var(--transparency-hover)] hover:text-[var(--state-danger-hover)]",
|
|
@@ -31478,7 +31315,7 @@ function AgentGUIProviderManagerDialog({
|
|
|
31478
31315
|
}
|
|
31479
31316
|
) : null,
|
|
31480
31317
|
editing ? /* @__PURE__ */ jsx53(
|
|
31481
|
-
|
|
31318
|
+
Button8,
|
|
31482
31319
|
{
|
|
31483
31320
|
"aria-label": labels.addAgentToSidebar(label),
|
|
31484
31321
|
className: "absolute right-0.5 top-0 z-10 size-5 rounded-full bg-[var(--background-panel)] p-0 text-[var(--state-success)] shadow-sm hover:bg-[var(--transparency-hover)] hover:text-[var(--state-success)]",
|
|
@@ -31523,7 +31360,7 @@ function AgentGUIProviderManagerDialog({
|
|
|
31523
31360
|
}
|
|
31524
31361
|
|
|
31525
31362
|
// agent-gui/agentGuiNode/view/useAgentGUIProviderRailPreferences.ts
|
|
31526
|
-
import { useCallback as useCallback50, useEffect as useEffect29, useState as
|
|
31363
|
+
import { useCallback as useCallback50, useEffect as useEffect29, useState as useState31 } from "react";
|
|
31527
31364
|
function readAgentGUIProviderRailPreferences(storageKey) {
|
|
31528
31365
|
return parseAgentGUIProviderRailPreferences(
|
|
31529
31366
|
globalThis.localStorage?.getItem(storageKey)
|
|
@@ -31531,7 +31368,7 @@ function readAgentGUIProviderRailPreferences(storageKey) {
|
|
|
31531
31368
|
}
|
|
31532
31369
|
function useAgentGUIProviderRailPreferences() {
|
|
31533
31370
|
const storageKey = agentGUIProviderRailOrderStorageKey();
|
|
31534
|
-
const [preferences, setPreferences] =
|
|
31371
|
+
const [preferences, setPreferences] = useState31(
|
|
31535
31372
|
() => readAgentGUIProviderRailPreferences(storageKey)
|
|
31536
31373
|
);
|
|
31537
31374
|
useEffect29(() => {
|
|
@@ -31664,7 +31501,7 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
|
|
|
31664
31501
|
persistPreferences: persistProviderRailPreferences,
|
|
31665
31502
|
preferences: providerRailPreferences
|
|
31666
31503
|
} = useAgentGUIProviderRailPreferences();
|
|
31667
|
-
const [dragState, setDragState] =
|
|
31504
|
+
const [dragState, setDragState] = useState32(null);
|
|
31668
31505
|
const dragStateRef = useRef45(null);
|
|
31669
31506
|
const setProviderRailDragState = useCallback51(
|
|
31670
31507
|
(nextDragState) => {
|
|
@@ -32138,10 +31975,10 @@ var AgentGUIProviderRail = memo4(function AgentGUIProviderRail2({
|
|
|
32138
31975
|
});
|
|
32139
31976
|
|
|
32140
31977
|
// agent-gui/agentGuiNode/controller/AgentGUIConversationRailController.tsx
|
|
32141
|
-
import { memo as memo9, useState as
|
|
31978
|
+
import { memo as memo9, useState as useState38 } from "react";
|
|
32142
31979
|
|
|
32143
31980
|
// agent-gui/agentGuiNode/view/AgentGUIConversationRailPane.tsx
|
|
32144
|
-
import { Fragment as Fragment22, memo as memo8, useEffect as useEffect30, useMemo as useMemo40, useRef as useRef48, useState as
|
|
31981
|
+
import { Fragment as Fragment22, memo as memo8, useEffect as useEffect30, useMemo as useMemo40, useRef as useRef48, useState as useState37 } from "react";
|
|
32145
31982
|
import { Button as SystemButton } from "@tutti-os/ui-system";
|
|
32146
31983
|
import { ScrollArea as ScrollArea2 } from "@tutti-os/ui-system/components";
|
|
32147
31984
|
import { CreateChatIcon as CreateChatIcon2 } from "@tutti-os/ui-system/icons";
|
|
@@ -32884,7 +32721,7 @@ function reduceAgentGUIConversationRailViewState(state, action) {
|
|
|
32884
32721
|
}
|
|
32885
32722
|
|
|
32886
32723
|
// agent-gui/agentGuiNode/controller/useAgentGUIProjectDrag.ts
|
|
32887
|
-
import { useCallback as useCallback52, useState as
|
|
32724
|
+
import { useCallback as useCallback52, useState as useState33 } from "react";
|
|
32888
32725
|
var PROJECT_DRAG_SCROLL_EDGE_PX = 40;
|
|
32889
32726
|
function projectDragAutoScrollDelta(clientY, bounds) {
|
|
32890
32727
|
if (clientY < bounds.top + PROJECT_DRAG_SCROLL_EDGE_PX) {
|
|
@@ -32902,9 +32739,9 @@ function projectDragAutoScrollDelta(clientY, bounds) {
|
|
|
32902
32739
|
return 0;
|
|
32903
32740
|
}
|
|
32904
32741
|
function useAgentGUIProjectDrag(input) {
|
|
32905
|
-
const [dragState, setDragState] =
|
|
32906
|
-
const [isMovePending, setIsMovePending] =
|
|
32907
|
-
const [runtime] =
|
|
32742
|
+
const [dragState, setDragState] = useState33(null);
|
|
32743
|
+
const [isMovePending, setIsMovePending] = useState33(false);
|
|
32744
|
+
const [runtime] = useState33(() => ({
|
|
32908
32745
|
active: false,
|
|
32909
32746
|
clientY: null,
|
|
32910
32747
|
dragState: null,
|
|
@@ -33327,7 +33164,7 @@ import {
|
|
|
33327
33164
|
useCallback as useCallback53,
|
|
33328
33165
|
useMemo as useMemo38,
|
|
33329
33166
|
useRef as useRef46,
|
|
33330
|
-
useState as
|
|
33167
|
+
useState as useState34
|
|
33331
33168
|
} from "react";
|
|
33332
33169
|
import {
|
|
33333
33170
|
AtSign,
|
|
@@ -33537,7 +33374,7 @@ function useConversationActionGroups({
|
|
|
33537
33374
|
const agentHostApi = useOptionalAgentHostApi();
|
|
33538
33375
|
const agentActivityRuntime = useOptionalAgentActivityRuntime();
|
|
33539
33376
|
const copyConversationValue = useAgentGUIConversationCopyAction(labels);
|
|
33540
|
-
const [resetKey, setResetKey] =
|
|
33377
|
+
const [resetKey, setResetKey] = useState34(0);
|
|
33541
33378
|
const pendingActionRef = useRef46(false);
|
|
33542
33379
|
const run = useCallback53(
|
|
33543
33380
|
(action) => {
|
|
@@ -33631,7 +33468,7 @@ function AgentGUIConversationActionsDropdown({
|
|
|
33631
33468
|
menu,
|
|
33632
33469
|
moreSessionActionsLabel
|
|
33633
33470
|
}) {
|
|
33634
|
-
const [open, setOpen] =
|
|
33471
|
+
const [open, setOpen] = useState34(false);
|
|
33635
33472
|
return /* @__PURE__ */ jsxs44(DropdownMenu4, { onOpenChange: setOpen, children: [
|
|
33636
33473
|
/* @__PURE__ */ jsx61(DropdownMenuTrigger4, { asChild: true, children: /* @__PURE__ */ jsx61(
|
|
33637
33474
|
BareIconButton2,
|
|
@@ -33661,7 +33498,7 @@ function AgentGUIConversationActionsContextMenu({
|
|
|
33661
33498
|
children,
|
|
33662
33499
|
menu
|
|
33663
33500
|
}) {
|
|
33664
|
-
const [open, setOpen] =
|
|
33501
|
+
const [open, setOpen] = useState34(false);
|
|
33665
33502
|
return /* @__PURE__ */ jsxs44(ContextMenu2, { onOpenChange: setOpen, children: [
|
|
33666
33503
|
/* @__PURE__ */ jsx61(ContextMenuTrigger2, { asChild: true, children }),
|
|
33667
33504
|
open ? /* @__PURE__ */ jsx61(ContextMenuContent2, { className: menuContentClassName, children: /* @__PURE__ */ jsx61(ContextActionGroups, { groups: menu.groups }) }) : null
|
|
@@ -34086,7 +33923,7 @@ function AgentGUIProjectRailHeader({
|
|
|
34086
33923
|
}
|
|
34087
33924
|
|
|
34088
33925
|
// agent-gui/agentGuiNode/view/AgentGUIConversationRailSectionHeader.tsx
|
|
34089
|
-
import { forwardRef as forwardRef5, memo as memo6, useCallback as useCallback55, useState as
|
|
33926
|
+
import { forwardRef as forwardRef5, memo as memo6, useCallback as useCallback55, useState as useState35 } from "react";
|
|
34090
33927
|
import { ChevronRight as ChevronRight2 } from "lucide-react";
|
|
34091
33928
|
import {
|
|
34092
33929
|
DropdownMenu as DropdownMenu5,
|
|
@@ -34500,8 +34337,8 @@ var AgentGUIConversationRailSectionHeader = memo6(
|
|
|
34500
34337
|
sectionLabel
|
|
34501
34338
|
}) {
|
|
34502
34339
|
"use memo";
|
|
34503
|
-
const [projectMenuOpen, setProjectMenuOpen] =
|
|
34504
|
-
const [conversationMenuOpen, setConversationMenuOpen] =
|
|
34340
|
+
const [projectMenuOpen, setProjectMenuOpen] = useState35(false);
|
|
34341
|
+
const [conversationMenuOpen, setConversationMenuOpen] = useState35(false);
|
|
34505
34342
|
const handleProjectMenuOpenChange = useCallback55(
|
|
34506
34343
|
(open) => {
|
|
34507
34344
|
setProjectMenuOpen(open);
|
|
@@ -35032,9 +34869,9 @@ function useAgentGUIConversationRailViewState(input) {
|
|
|
35032
34869
|
}
|
|
35033
34870
|
|
|
35034
34871
|
// agent-gui/agentGuiNode/view/useAgentGUIProjectMenuState.ts
|
|
35035
|
-
import { useCallback as useCallback58, useState as
|
|
34872
|
+
import { useCallback as useCallback58, useState as useState36 } from "react";
|
|
35036
34873
|
function useAgentGUIProjectMenuState(isRailInteractionLocked, isUserProjectMutationPending) {
|
|
35037
|
-
const [openSectionId, setOpenSectionId] =
|
|
34874
|
+
const [openSectionId, setOpenSectionId] = useState36(null);
|
|
35038
34875
|
const isProjectActionLocked = useCallback58(
|
|
35039
34876
|
() => isRailInteractionLocked() || isUserProjectMutationPending,
|
|
35040
34877
|
[isRailInteractionLocked, isUserProjectMutationPending]
|
|
@@ -35057,7 +34894,7 @@ function useAgentGUIProjectMenuState(isRailInteractionLocked, isUserProjectMutat
|
|
|
35057
34894
|
// agent-gui/agentGuiNode/view/AgentGUIConversationRailPane.tsx
|
|
35058
34895
|
import { jsx as jsx67, jsxs as jsxs48 } from "react/jsx-runtime";
|
|
35059
34896
|
function useDelayedBoolean(value, delayMs) {
|
|
35060
|
-
const [delayedValue, setDelayedValue] =
|
|
34897
|
+
const [delayedValue, setDelayedValue] = useState37(false);
|
|
35061
34898
|
useEffect30(() => {
|
|
35062
34899
|
if (!value) {
|
|
35063
34900
|
setDelayedValue(false);
|
|
@@ -35111,8 +34948,8 @@ var AgentGUIConversationRailPane = memo8(
|
|
|
35111
34948
|
onConversationQueryChange
|
|
35112
34949
|
}) {
|
|
35113
34950
|
"use memo";
|
|
35114
|
-
const [pendingProjectAction, setPendingProjectAction] =
|
|
35115
|
-
const [isRequestingBatchDeletion, setIsRequestingBatchDeletion] =
|
|
34951
|
+
const [pendingProjectAction, setPendingProjectAction] = useState37(null);
|
|
34952
|
+
const [isRequestingBatchDeletion, setIsRequestingBatchDeletion] = useState37(false);
|
|
35116
34953
|
const { railSearch } = railQuery;
|
|
35117
34954
|
const railElementRef = useRef48(null);
|
|
35118
34955
|
const railActiveConversationRef = useRef48([]);
|
|
@@ -36934,7 +36771,7 @@ function identitySnapshot(snapshot) {
|
|
|
36934
36771
|
import { jsx as jsx68 } from "react/jsx-runtime";
|
|
36935
36772
|
var AgentGUIConversationRailController = memo9(
|
|
36936
36773
|
function AgentGUIConversationRailController2(props) {
|
|
36937
|
-
const [conversationQuery, setConversationQuery] =
|
|
36774
|
+
const [conversationQuery, setConversationQuery] = useState38("");
|
|
36938
36775
|
const railQuery = useAgentGUIConversationRailQuery({
|
|
36939
36776
|
activeConversationId: props.activeConversationId,
|
|
36940
36777
|
conversationFilter: props.conversationFilter,
|
|
@@ -37101,6 +36938,9 @@ function resolveAgentGUIStopControl(input) {
|
|
|
37101
36938
|
visible: shouldShowAgentGUIStopButton(input)
|
|
37102
36939
|
};
|
|
37103
36940
|
}
|
|
36941
|
+
function resolveAgentGUIComposerDisabled(input) {
|
|
36942
|
+
return input.isCollaboratorConversation || input.runtimeBlocked || input.hasNonRetryableRecoveryFailure || !input.canQueueWhileBusy && (input.pendingApproval || input.pendingInteractivePrompt || input.isSubmitting || input.isInterrupting || input.isCreatingConversation);
|
|
36943
|
+
}
|
|
37104
36944
|
function buildAgentConversationHandoffPrompt(input) {
|
|
37105
36945
|
const conversation = input.activeConversation;
|
|
37106
36946
|
if (!conversation) {
|
|
@@ -37196,7 +37036,7 @@ function AgentComposerRegion({
|
|
|
37196
37036
|
}
|
|
37197
37037
|
|
|
37198
37038
|
// agent-gui/agentGuiNode/AgentGoalBanner.tsx
|
|
37199
|
-
import { useEffect as useEffect32, useState as
|
|
37039
|
+
import { useEffect as useEffect32, useState as useState39 } from "react";
|
|
37200
37040
|
import { CirclePause, CirclePlay, Pencil as Pencil3, Target as Target3, Trash2 } from "lucide-react";
|
|
37201
37041
|
import { jsx as jsx69, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
37202
37042
|
var RESUMABLE_GOAL_STATUSES = /* @__PURE__ */ new Set([
|
|
@@ -37272,11 +37112,11 @@ function AgentGoalBanner({
|
|
|
37272
37112
|
onClearGoal
|
|
37273
37113
|
}) {
|
|
37274
37114
|
"use memo";
|
|
37275
|
-
const [editDraft, setEditDraft] =
|
|
37115
|
+
const [editDraft, setEditDraft] = useState39(null);
|
|
37276
37116
|
const normalizedStatus = normalizeGoalStatus(status);
|
|
37277
37117
|
const isActive = normalizedStatus === "" || normalizedStatus === "active";
|
|
37278
37118
|
const serverSeconds = optimistic ? null : typeof durationMs === "number" && durationMs >= 0 ? Math.floor(durationMs / 1e3) : isActive ? 0 : null;
|
|
37279
|
-
const [localElapsed, setLocalElapsed] =
|
|
37119
|
+
const [localElapsed, setLocalElapsed] = useState39(0);
|
|
37280
37120
|
useEffect32(() => {
|
|
37281
37121
|
setLocalElapsed(0);
|
|
37282
37122
|
if (!isActive || serverSeconds === null) {
|
|
@@ -37422,9 +37262,9 @@ import {
|
|
|
37422
37262
|
ListChecks as ListChecks4,
|
|
37423
37263
|
LoaderCircle,
|
|
37424
37264
|
RotateCcw,
|
|
37425
|
-
Sparkles as Sparkles3,
|
|
37426
37265
|
X as X7
|
|
37427
37266
|
} from "lucide-react";
|
|
37267
|
+
import { TaskIcon } from "@tutti-os/ui-system/icons";
|
|
37428
37268
|
|
|
37429
37269
|
// workspaceWorkflow/workspaceWorkflowRuntime.tsx
|
|
37430
37270
|
import { createContext as createContext3, useContext as useContext3 } from "react";
|
|
@@ -37613,7 +37453,7 @@ import ReactMarkdown2 from "react-markdown";
|
|
|
37613
37453
|
import rehypeSanitize from "rehype-sanitize";
|
|
37614
37454
|
import remarkGfm2 from "remark-gfm";
|
|
37615
37455
|
import {
|
|
37616
|
-
Badge
|
|
37456
|
+
Badge,
|
|
37617
37457
|
Card,
|
|
37618
37458
|
CardContent,
|
|
37619
37459
|
CardDescription,
|
|
@@ -37693,7 +37533,7 @@ function TuttiModePlanTaskAssignmentEditor({
|
|
|
37693
37533
|
return /* @__PURE__ */ jsxs51(
|
|
37694
37534
|
"div",
|
|
37695
37535
|
{
|
|
37696
|
-
className: "mt-3 flex flex-wrap items-center gap-
|
|
37536
|
+
className: "tutti-plan-task-assignment-row mt-3 flex flex-wrap items-center gap-3 border-t border-[var(--line-2)] pt-2",
|
|
37697
37537
|
"data-testid": `tutti-plan-task-assignment-${task.id}`,
|
|
37698
37538
|
children: [
|
|
37699
37539
|
/* @__PURE__ */ jsxs51(
|
|
@@ -37784,7 +37624,7 @@ function TuttiModePlanTaskAssignmentEditor({
|
|
|
37784
37624
|
"label",
|
|
37785
37625
|
{
|
|
37786
37626
|
className: cn9(
|
|
37787
|
-
"flex min-h-[28px] w-auto shrink-0 items-center gap-1.5
|
|
37627
|
+
"flex min-h-[28px] w-auto shrink-0 items-center gap-1.5 text-[13px]",
|
|
37788
37628
|
disabled ? "cursor-not-allowed text-[var(--agent-gui-text-tertiary)]" : "cursor-pointer text-[var(--agent-gui-text-secondary)]"
|
|
37789
37629
|
),
|
|
37790
37630
|
htmlFor: `tutti-plan-task-parallel-${task.id}`,
|
|
@@ -37811,7 +37651,7 @@ function TuttiModePlanTaskAssignmentEditor({
|
|
|
37811
37651
|
"label",
|
|
37812
37652
|
{
|
|
37813
37653
|
className: cn9(
|
|
37814
|
-
"flex min-h-[28px] w-auto shrink-0 items-center gap-1.5
|
|
37654
|
+
"flex min-h-[28px] w-auto shrink-0 items-center gap-1.5 text-[13px]",
|
|
37815
37655
|
disabled ? "cursor-not-allowed text-[var(--agent-gui-text-tertiary)]" : "cursor-pointer text-[var(--agent-gui-text-secondary)]"
|
|
37816
37656
|
),
|
|
37817
37657
|
htmlFor: `tutti-plan-task-auto-accept-${task.id}`,
|
|
@@ -37862,7 +37702,7 @@ function AssignmentSelectTrigger({
|
|
|
37862
37702
|
{
|
|
37863
37703
|
className: cn9(
|
|
37864
37704
|
"truncate",
|
|
37865
|
-
value === null && "text-[var(--agent-gui-text-
|
|
37705
|
+
value === null && "text-[var(--agent-gui-text-secondary)]"
|
|
37866
37706
|
),
|
|
37867
37707
|
children: value ?? placeholder
|
|
37868
37708
|
}
|
|
@@ -37970,7 +37810,7 @@ function TuttiModePlanPanel({
|
|
|
37970
37810
|
/* @__PURE__ */ jsx72("ol", { className: "grid gap-2", children: panel.tasks.map((task) => /* @__PURE__ */ jsxs52(
|
|
37971
37811
|
"li",
|
|
37972
37812
|
{
|
|
37973
|
-
className: "rounded-
|
|
37813
|
+
className: "rounded-lg border border-[var(--line-2)] bg-[var(--background-board-card)] px-4 pt-3 pb-2 text-sm",
|
|
37974
37814
|
children: [
|
|
37975
37815
|
/* @__PURE__ */ jsxs52("div", { className: "flex flex-wrap items-start justify-between gap-2", children: [
|
|
37976
37816
|
/* @__PURE__ */ jsxs52("div", { className: "font-medium text-foreground", children: [
|
|
@@ -37978,7 +37818,7 @@ function TuttiModePlanPanel({
|
|
|
37978
37818
|
". ",
|
|
37979
37819
|
task.title
|
|
37980
37820
|
] }),
|
|
37981
|
-
/* @__PURE__ */ jsx72(
|
|
37821
|
+
/* @__PURE__ */ jsx72(Badge, { variant: "secondary", children: priorityLabel(labels, task.priority) })
|
|
37982
37822
|
] }),
|
|
37983
37823
|
task.content ? /* @__PURE__ */ jsx72("p", { className: "mt-1 text-xs text-muted-foreground", children: task.content }) : null,
|
|
37984
37824
|
editable && assignmentCatalog ? /* @__PURE__ */ jsx72(
|
|
@@ -38029,7 +37869,7 @@ function TaskAssignmentSummary({
|
|
|
38029
37869
|
if (chips.length === 0) {
|
|
38030
37870
|
return null;
|
|
38031
37871
|
}
|
|
38032
|
-
return /* @__PURE__ */ jsx72("div", { className: "mt-3 flex flex-wrap items-center gap-
|
|
37872
|
+
return /* @__PURE__ */ jsx72("div", { className: "tutti-plan-task-assignment-row mt-3 flex flex-wrap items-center gap-3 border-t border-[var(--line-2)] pt-2", children: chips.map((chip) => /* @__PURE__ */ jsx72(
|
|
38033
37873
|
"span",
|
|
38034
37874
|
{
|
|
38035
37875
|
title: chip.label,
|
|
@@ -38055,9 +37895,9 @@ function priorityLabel(labels, priority) {
|
|
|
38055
37895
|
}
|
|
38056
37896
|
|
|
38057
37897
|
// workspaceWorkflow/tuttiModePlan/TuttiPlanIssuePanel.tsx
|
|
38058
|
-
import { useState as
|
|
37898
|
+
import { useState as useState40 } from "react";
|
|
38059
37899
|
import { ExternalLink as ExternalLink4, ListChecks as ListChecks3, Square } from "lucide-react";
|
|
38060
|
-
import { Button as
|
|
37900
|
+
import { Button as Button9, Card as Card2, CardContent as CardContent2, CardHeader as CardHeader2, cn as cn11 } from "@tutti-os/ui-system";
|
|
38061
37901
|
import { jsx as jsx73, jsxs as jsxs53 } from "react/jsx-runtime";
|
|
38062
37902
|
var BOARD_STATUS_ORDER = [
|
|
38063
37903
|
"not_started",
|
|
@@ -38134,9 +37974,9 @@ function TuttiPlanIssuePanel({
|
|
|
38134
37974
|
onCancelExecution,
|
|
38135
37975
|
onOpenTask
|
|
38136
37976
|
}) {
|
|
38137
|
-
const [viewMode, setViewMode] =
|
|
38138
|
-
const [decidingTaskIds, setDecidingTaskIds] =
|
|
38139
|
-
const [stopping, setStopping] =
|
|
37977
|
+
const [viewMode, setViewMode] = useState40("board");
|
|
37978
|
+
const [decidingTaskIds, setDecidingTaskIds] = useState40([]);
|
|
37979
|
+
const [stopping, setStopping] = useState40(false);
|
|
38140
37980
|
const decideTask = onDecideTask ? (taskId, decision) => {
|
|
38141
37981
|
setDecidingTaskIds(
|
|
38142
37982
|
(current) => current.includes(taskId) ? current : [...current, taskId]
|
|
@@ -38204,7 +38044,7 @@ function TuttiPlanIssuePanel({
|
|
|
38204
38044
|
mode
|
|
38205
38045
|
)) }),
|
|
38206
38046
|
stopExecution ? /* @__PURE__ */ jsxs53(
|
|
38207
|
-
|
|
38047
|
+
Button9,
|
|
38208
38048
|
{
|
|
38209
38049
|
type: "button",
|
|
38210
38050
|
size: "sm",
|
|
@@ -38220,7 +38060,7 @@ function TuttiPlanIssuePanel({
|
|
|
38220
38060
|
}
|
|
38221
38061
|
) : null,
|
|
38222
38062
|
onOpenIssue ? /* @__PURE__ */ jsxs53(
|
|
38223
|
-
|
|
38063
|
+
Button9,
|
|
38224
38064
|
{
|
|
38225
38065
|
type: "button",
|
|
38226
38066
|
size: "sm",
|
|
@@ -38272,7 +38112,7 @@ function TaskStructureChips({
|
|
|
38272
38112
|
dependencies.length > 0 ? /* @__PURE__ */ jsxs53(
|
|
38273
38113
|
"span",
|
|
38274
38114
|
{
|
|
38275
|
-
className: "min-w-0 truncate rounded-full border border-
|
|
38115
|
+
className: "min-w-0 truncate rounded-full border border-[var(--line-2)] px-1.5 text-[10px] leading-4 text-muted-foreground",
|
|
38276
38116
|
title: dependencies.join(", "),
|
|
38277
38117
|
children: [
|
|
38278
38118
|
labels.dependencies,
|
|
@@ -38296,7 +38136,7 @@ function TaskDecisionActions({
|
|
|
38296
38136
|
}
|
|
38297
38137
|
return /* @__PURE__ */ jsxs53("span", { className: "flex shrink-0 items-center gap-1", children: [
|
|
38298
38138
|
canAccept ? /* @__PURE__ */ jsx73(
|
|
38299
|
-
|
|
38139
|
+
Button9,
|
|
38300
38140
|
{
|
|
38301
38141
|
type: "button",
|
|
38302
38142
|
size: "sm",
|
|
@@ -38311,7 +38151,7 @@ function TaskDecisionActions({
|
|
|
38311
38151
|
}
|
|
38312
38152
|
) : null,
|
|
38313
38153
|
/* @__PURE__ */ jsx73(
|
|
38314
|
-
|
|
38154
|
+
Button9,
|
|
38315
38155
|
{
|
|
38316
38156
|
type: "button",
|
|
38317
38157
|
size: "sm",
|
|
@@ -38355,7 +38195,7 @@ function TuttiPlanIssueBoard({
|
|
|
38355
38195
|
return /* @__PURE__ */ jsxs53(
|
|
38356
38196
|
"div",
|
|
38357
38197
|
{
|
|
38358
|
-
className: "min-h-[220px] rounded-lg border border-
|
|
38198
|
+
className: "min-h-[220px] rounded-lg border border-[var(--line-2)] bg-muted/30 px-2 py-2",
|
|
38359
38199
|
"data-testid": `tutti-plan-issue-column-${status}`,
|
|
38360
38200
|
children: [
|
|
38361
38201
|
/* @__PURE__ */ jsxs53("div", { className: "mb-1.5 flex items-center justify-between gap-2", children: [
|
|
@@ -38426,11 +38266,11 @@ function TuttiPlanIssueList({
|
|
|
38426
38266
|
}) {
|
|
38427
38267
|
const showStages = issue.tasks.some((task) => task.parallelizable);
|
|
38428
38268
|
const stages = showStages ? groupTuttiPlanIssueTasksIntoStages(issue.tasks) : [{ kind: "sequential", tasks: [...issue.tasks] }];
|
|
38429
|
-
return /* @__PURE__ */ jsx73("div", { className: "overflow-hidden rounded-lg border border-
|
|
38269
|
+
return /* @__PURE__ */ jsx73("div", { className: "overflow-hidden rounded-lg border border-[var(--line-2)]", children: stages.map((stage, index) => /* @__PURE__ */ jsxs53("div", { children: [
|
|
38430
38270
|
showStages ? /* @__PURE__ */ jsx73(
|
|
38431
38271
|
"div",
|
|
38432
38272
|
{
|
|
38433
|
-
className: "border-b border-
|
|
38273
|
+
className: "border-b border-[var(--line-2)] bg-muted/40 px-3 py-1 text-[10px] font-medium text-muted-foreground",
|
|
38434
38274
|
"data-testid": `tutti-plan-issue-stage-${stage.kind}`,
|
|
38435
38275
|
children: stage.kind === "parallel" ? labels.stageParallel(
|
|
38436
38276
|
String(index + 1),
|
|
@@ -38448,7 +38288,7 @@ function TuttiPlanIssueList({
|
|
|
38448
38288
|
tabIndex: openable ? 0 : void 0,
|
|
38449
38289
|
"data-testid": `tutti-plan-issue-row-${task.taskId}`,
|
|
38450
38290
|
className: cn11(
|
|
38451
|
-
"flex items-start justify-between gap-3 border-b border-
|
|
38291
|
+
"flex items-start justify-between gap-3 border-b border-[var(--line-2)] px-3 py-2 last:border-b-0",
|
|
38452
38292
|
openable && "cursor-pointer transition-colors hover:bg-muted/40"
|
|
38453
38293
|
),
|
|
38454
38294
|
onClick: openable ? () => void openTask(task.taskId) : void 0,
|
|
@@ -38498,7 +38338,7 @@ function TuttiPlanIssueList({
|
|
|
38498
38338
|
}
|
|
38499
38339
|
|
|
38500
38340
|
// workspaceWorkflow/tuttiModePlan/useTuttiModePlanPanels.ts
|
|
38501
|
-
import { useCallback as useCallback59, useEffect as useEffect33, useMemo as useMemo42, useRef as useRef51, useState as
|
|
38341
|
+
import { useCallback as useCallback59, useEffect as useEffect33, useMemo as useMemo42, useRef as useRef51, useState as useState41 } from "react";
|
|
38502
38342
|
function emptyState(scopeKey) {
|
|
38503
38343
|
return {
|
|
38504
38344
|
error: null,
|
|
@@ -38519,14 +38359,14 @@ var EMPTY_AGENT_DETAIL = {
|
|
|
38519
38359
|
};
|
|
38520
38360
|
function useTuttiModePlanPanels(input) {
|
|
38521
38361
|
const runtime = useOptionalTuttiModePlanReviewRuntime();
|
|
38522
|
-
const [state, setState] =
|
|
38523
|
-
const [assignmentState, setAssignmentState] =
|
|
38524
|
-
const [planIssueState, setPlanIssueState] =
|
|
38362
|
+
const [state, setState] = useState41(() => emptyState(""));
|
|
38363
|
+
const [assignmentState, setAssignmentState] = useState41(() => emptyAssignmentState(""));
|
|
38364
|
+
const [planIssueState, setPlanIssueState] = useState41({
|
|
38525
38365
|
result: null,
|
|
38526
38366
|
scopeKey: ""
|
|
38527
38367
|
});
|
|
38528
38368
|
const requestSequenceRef = useRef51(0);
|
|
38529
|
-
const [retrySequence, setRetrySequence] =
|
|
38369
|
+
const [retrySequence, setRetrySequence] = useState41(0);
|
|
38530
38370
|
const enabled = input.enabled ?? true;
|
|
38531
38371
|
const workspaceId = input.workspaceId.trim();
|
|
38532
38372
|
const sourceSessionId = input.sourceSessionId?.trim() ?? "";
|
|
@@ -38862,11 +38702,13 @@ import { ChevronDown as ChevronDown4 } from "lucide-react";
|
|
|
38862
38702
|
import { jsx as jsx74, jsxs as jsxs54 } from "react/jsx-runtime";
|
|
38863
38703
|
function AgentComposerDisclosureCard({
|
|
38864
38704
|
actions,
|
|
38705
|
+
bannerClassName,
|
|
38865
38706
|
children,
|
|
38866
38707
|
expanded,
|
|
38867
38708
|
icon,
|
|
38868
38709
|
labels,
|
|
38869
38710
|
onExpandedChange,
|
|
38711
|
+
panelClassName,
|
|
38870
38712
|
summary,
|
|
38871
38713
|
testId,
|
|
38872
38714
|
title
|
|
@@ -38884,7 +38726,7 @@ function AgentComposerDisclosureCard({
|
|
|
38884
38726
|
"div",
|
|
38885
38727
|
{
|
|
38886
38728
|
id: panelId,
|
|
38887
|
-
className: AgentGUIChrome_styles_default.composerDisclosurePanel,
|
|
38729
|
+
className: cn(AgentGUIChrome_styles_default.composerDisclosurePanel, panelClassName),
|
|
38888
38730
|
"data-testid": `${testId}-panel`,
|
|
38889
38731
|
children
|
|
38890
38732
|
}
|
|
@@ -38895,7 +38737,8 @@ function AgentComposerDisclosureCard({
|
|
|
38895
38737
|
className: cn(
|
|
38896
38738
|
AgentGUIChrome_styles_default.chromeCard,
|
|
38897
38739
|
AgentGUIChrome_styles_default.chromeCardMuted,
|
|
38898
|
-
AgentGUIChrome_styles_default.composerDisclosureBanner
|
|
38740
|
+
AgentGUIChrome_styles_default.composerDisclosureBanner,
|
|
38741
|
+
bannerClassName
|
|
38899
38742
|
),
|
|
38900
38743
|
children: [
|
|
38901
38744
|
/* @__PURE__ */ jsxs54(
|
|
@@ -38950,8 +38793,187 @@ function AgentComposerDisclosureCard({
|
|
|
38950
38793
|
) });
|
|
38951
38794
|
}
|
|
38952
38795
|
|
|
38796
|
+
// agent-gui/agentGuiNode/composer/TuttiBudgetPopover.tsx
|
|
38797
|
+
import { useState as useState42 } from "react";
|
|
38798
|
+
import {
|
|
38799
|
+
Popover as Popover6,
|
|
38800
|
+
PopoverContent as PopoverContent5,
|
|
38801
|
+
PopoverTrigger as PopoverTrigger4,
|
|
38802
|
+
Slider
|
|
38803
|
+
} from "@tutti-os/ui-system";
|
|
38804
|
+
|
|
38805
|
+
// app/renderer/assets/icons/tutti-intensity-handle-balance.png
|
|
38806
|
+
var tutti_intensity_handle_balance_default = "data:image/png;base64,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";
|
|
38807
|
+
|
|
38808
|
+
// app/renderer/assets/icons/tutti-intensity-handle-cost.png
|
|
38809
|
+
var tutti_intensity_handle_cost_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHUAAACACAYAAAA1WyYWAABG1klEQVR42u29abQl11Um+O1zTsSd3pSThszUaA2WJQ/IMrYpUyiZjEVRhgYJL7Ooopqhm2o3uBZQxbAgpTbdvagBqFo1NEPRbXAVRQpwuTG2sdvOtMHGsi2PkgcNVkqZqZRyeMOdI+KcvfvHORFxIu5NWbItQXfprfWU7z29d4fYcfbw7W9/m/A3+HHkyBF9xx13OAAQET0ajV4D4JvFuRdB6CLSwkR0ShF9hjTu6ffX/7r8WxHRROTw/Mffng8R0QDwkY98pLe9vfmmne3NTw23NsVlmdhsLjabicvnIi4XsblMRjtuPpveM5tNfvLUqVP9+DGe//hbZNDTJ07cur21+Tm2ucwmI9k6+4TsnH/SDjfP2dHWOTfaOu8m25t2srPpZqMtb2ARybPs/tFodAgAjh49ap6/os2P5/yCHD161BCRPXHixE90+/3/oAB19skzNjFaKa0UQJoIICIoRSDynwAwn0wYIO6u9F8EpO8b7+z8xMr6+u8974qbH/Rcn1AicidPnvyHqysr/9d0MmQwizFGeyMqaKVASkFVn/4lEqnwL4GZnSJNSX+gJsOtH1lZ3/3W5w1bf6jnMikiIvfYY4+/IjHmd8ajIRdFAUA0M0NELnCbEYhU48QqpTSzRT4bc9Lp/fZke/vlRORERD1v0ufupJKIEAD1yJeP37PS7908nQydNkorUtBaQ2sNY0x1Ov2/GkrVBhURb1gRsADsrOsOVvR0Ov1kf2XtVQAcACEief6kPvtxVBMRP/LIY29cHfRvHm5vOpBoSOWWq0+I+HtNKHxd26c0MAggApTWejYZ2f7K2s3j8fAHiYgB6Ofd73PwceuttzoRUXk+f/NkMhEWB7ZcG7KKuQxB0w2L/x8XdDBERGxzgcibgjdwzxv1uYmlcvz48W9MjfmG0WgI51izlEZliHBlLIlOLoi8Vak+0YvZF3Q2ncBo9YrxeOvFRCT/rcfWZ/3N79u3jwDAFe57Op0UIHY+3+FgUFQJ0EKQr4xIZcpUGdZ7agEIYBHX7a8qEfW65zoB/G/SqMeOHfPHUPjVRZGDBMTswFy63vooxieRoqNYfVJ9A5S1LBGBAAJbaKJD4Y/4efDh6daZAIXTEx+oC2abIkJExCKy8uCXHnhhNsvCjSSIyxgWhgoek1mgSCpTktQHVoSrLDiOx6SIXJ5BRF4kIl0imofnludP6oVBA3X06FFDwYBExNGniAiJiFkSywgATj588lIi7CtsBmaHMsmtD2bTSII6E5bF11Ibk6o/p6IoAJFLdnZ2Dv5NACv/nzmppZFCqcAAMB6PL8mybE+HOsZpNxeRs0S0CcACgBw5ou+8/3656667GHf7C6sSdXGqUjMZDwXCBABaGwgYwg4UvYzIUHGOFAxfZbzBuOVxJnLM3OsPkmk2uwLAQ88b9SkgPQCYTCavICdvdOBDrrBXaVKr0Ewk7DTR5mwyeUAp9QEodYQ6nfvaHRRWfJEhDTAzCBohUYIocDh5RM2ECeRPJSHOfCkYPYqz9UkXlSSg2fT5k/pUBj1x5sy1u3q9/5Wd/YGVfp/yLEPBDgwGs4NWShuj96WdZB908ndm08nPTyeTt823szuJ6LEHHnigA8Dl+Xx3L0khECEoqPKkVZiutBJearhblMal2GUTCADXOZEP+dB7nq9Tl3dR3JnTp39wo9O9p5Mmt2fTMTbPn7HT6ZitzQXCovxJEmutTCdjN9k+b7nIkl6v8486K/oTp06d+t7rrrsuO3z4sIJzq45tleywiMdzBQFsoLpsoQawUIEPUkMR9TEkb1pC5LPBG/j6NSBIRFTIF4yI6PA9RTchyeHDKvy/xu/9rTip4YTaJ0498eP9Qf+35/MpJuNtq5UyIDJEqNthIJBSFEoKDa0hzDLa3nJKqX2DTvr2L913309cf9NNv/P9r/+erl5dqWIhytNIVMXKOgFqpkZEMfgA+IS2BCnap1cgwqtfoyFVuNk55BLyVCWSv+/uEtx114Uez5SP8Vxl45VR5UhwucePf3faMb89Gm47do6M0UZEoKrTQNUJUsEuFAxEWlFCxmRZztZapB3z28fe97775rPpzurqoGkoZgAGmkzjdMYGCjb3j93IosIRqeBhqU40sXRDffyMTmQwpMRJoZyTtWlveq1YucmJfRGJHIBSeyG8QaTSEAMsCBMCzoNxWoAvG53eL0o+3+/3TxCRbRnYPdvGNdHdySdPnrxMnHvrbDqRophToo1iJmitff2o6tJDKV0ZmKpTRyASpGmqmJnT1MDa7Pcef/zsB/rdBAIhf+3q5re0st76xIaSuCxUgwVLQxIBwq1GAAuceKPeeuut8nSNGRJCBwDznfn1ThW3QfAdYxm+TLG6dLDSB5TytnYMZgbINxiqYKCiPgJbTKezyXQy+hKR/hCce1d3ZeUYERVREvmsnVwTxS956MGHfn19fXXPcHvLakWGRaqgS3GtEYygSt8Y9Tq1NiBiJEmisrkSQ/aFW+eevGZ80V50+iuaygxWlRUpN2G/qHzxmDCh8d5DOJMoQxaUsZlBoOSZNOwBOBHpzcbj1wP4kdzNb10drHXYOWTZDEU+x8723ClFQlAeUAGBVICyfEiQYGUJsUIZpQZpt3MzlLlZnH3zbDb9/Hw+f+to5N5GRI8/m+Q5Uz7wow89egsZfP/W5nmnCaYd5ytIjpqnjFrVZPm7WiukaYfW1telk2qjiHzWy+wtWpYmIY42Y2oZa6nhYklR6Y1b4AXqZEmcfrqn8xOnTvVv2Nj48elk8o973e51zA7FeI6dzfOWQESqTCG09iHA+5rQ/QNAUFq14r9vGwqzzKdTIRALoLq97otIJ79GMv+5LJv91nye/wYRnX82Tm31ilj4TWliiK0V5xwAqfuXy7pfy9tg1WlTSsMkBisra5QmCZwroEmCO60z1vhvamNJBA1Gp1GaIATgSx3/d0LwN8ZT1d4qIGJuc3Pzu29YW/t4v9v5TRJ33c72eTcabjkRFiIYUqK9W6DgTaQBmPq6OhxMIoC4vhQkIEWklFJEZLTSqshyziYjq0j2pmn3l/q97icmk+H3EZEjIjl8+PDXLVs2gTO0ZzaZvn44nILZaSIfQ621kettZqm1IZo1ZWwkrQ16/QE6nS5sUYBAUMFZMnNAlVC125o3CBqx138uu4k8phE1BNRTuduPfOQjvRtvuOHX0sT8z8IOm+fO2ZIeVXsIDu+rytSqn1Wvo3oZ7G9SpaLcoqzBfevQn2ylREixdZIVY5d2Olf2e4M/zWaz3/zc/ff/01tuuaUINx1/XWJqPsu/td/rbmxujp1WpKuEhR0gOmp3NYkFdXSjNquougBpp4NurwtX5BVrAVULTUKVKY14Xd5AJZEhdndN/DA8BtVdHo5qyLZBjx8/ftWejfU/HAx6rzx39iyLCIwxxr8eCgkgod39o6hhT61WYFx3CSSqEepaus5DCKQ1AWLyfM7IlXQGgze/+KYXvfjkyZM/GNzx12xYFVzvt0sgkPiXwFWrS8p/pV1PVi+1ZRBAqHSLBJMkSDtdWOc84KA8gqSqv/Jsh7L+jF1w2T9lFjSg/fIi+oS3BfaXL+juhkEfe+yxm3atrRwzml755BOnC2ZWRKTK98PcOomt/lR848TXog1dNj1YGSpKnpVUj629b9bZeFSknd63XbRn93uHw1N7Q1fra3LFSkTIOfvy+XxOzKKq01NdOAnJDVruT6I304x9cbxUSqHT6YD9KQplib/9qyY54gvWzLbrninV54Pqzs4SbDjc5beXMdQdP378RSu97vsgfPnm5qYFKInZifHz1M9Ny/OGVqdIhBf6wogMv2Ds8vGDp9ZGJdl4p0i6vZsTvf6nIpICd5Ms8ThP26iPPvroJcx89Xw+A8AE+CwzdiL1i2uCBHEJ0n77ErniTqfr3yjbyuWWvklFz0ORNyMiD/ZHnCUhih18VCc2WngKAO69914FQB5++OGLu4reCS4uGQ6HlogMSJbQYySK67SIbFVNwagcDV6k7A2XxpXWY4u4KsSU7pyIQEpCpaCT+XhYdPuDb54Od/490R3uayEwKGa+Tmu1qyjycJMqCHPldilkrBxcVLP/2QTgqc0lEoHSBmnaCd2YsorxfrN2UbyQFNWP0byw1SmFLJxoEYAdx3UqpUbe1uulV+3sbFkiMWVMruimjZOKpYasDYWGAUU8EOE/y+8l9Iw5IgJ4kzJzaDdK0xuQgiKVzMdD219b/9HRaPsNgcesv7qY6tzlSZJAmJmZ4RyHi98AVVugeeO41jdB++4PtalJE6iGqw7/MsM1ujK0iPs2nopr1CHquVZu0b8OAwC33HJL8fCDX/i59cHg2zc3z1utjSmLTF+AqoZBAWpQZRChZP4e5Ebsdq6m5Pjr5r9n51BdRw6f8SkO3qd23xV7A4AoO5+JFvrN7e3t3d4ZPHM3rATqsgAkSMnwKxnx7RhZ0k0atWPlmCmABbSQyRqTeoIYS8BxqbpfVGDgL3CUopKiggGlGT/jV8AicGzB7DoiQifuv//aVOFXtra2mECalArorkfCYq/gEYbobEoTsmTmAElyZEBXxdP65xaOuXLJjn1HSsJpXsbyqKsKgVKkijxzvdW1i43CPyYiOXbsmH7m7hd8gNmBQNBKN1xoCdYzx4RqWkhS6t+PX2xwoaSQJGmIkRyVNXGPtNmdabvBii4a/W6TmEah9nUosiwhIpkUozt7naRvbc5Kl39cP0F8KuswEucIzYvPkbHKr51z9QkNp5O5/Fl9A3hDu8hN1+67mXx5T5zPxkLM/9Pm5ub6oUOH7DM9rYqYLm6+oWZ2xxWILlXcqmidFMe5yFuXF75M342GIgWwqxGn6iRSIzuMQY4LExjizFhV4UEByObzyV8fe++1xiR37IxGDJBmiV4cIUK9yjmddoeIGkauTqK1DSM7x5Vhy09rXXWSS0PGhkdk0DKkSPReiLTKs4z76+uXpJq+P7ygZ3RalVJY92WLkAiHuzh+kjoZKQN/ncxEsZ4Wm6ABLYVSGqQosFlCXFMq3BSCui+whCpaNQ7KG4kanZz4BRAR8tk0SxL6h4NB37ADV448/Md7I2ogWOVNWiZLcfwr6azVCXX1SbTWwloHa4vo1JYGLk8uV+6XWeCiOOuvZ/OyEQUAxDlhkTd+NZRXA6G+MNfFf/QmUVWHLXpJBAmWCHvcwI5ZC7708INOLByVS3F2WRc3cXlDcRcoQpRCY97H1PJ1EKgoLDa3zl6dJp3r5/MMEH+HU9RJKmtnKoF5QqOcqrtDgHPcuJnLuMjsIo/GrSQrHr8M4IkiqMp7KUApVP2caPCrcsGkVDabEkReeebMmUuJ6PQzobwaKHSEpW5+L8SWkm/bHCds474LkJpIHTuVhtYmzkAC9qsBUtVjY6G3yiCPWlaRUynVLHfIJzGKSE0nE8xn0xtXVlZRFBYUri6XYUK8KyQiKFLNmrGBYVMwYB0KmBksPjYiAhZEGKU/EFXmIASlGYr8zaxAYCpdo1SFhwfXeAHcIAIV1nK/P1jhWfZSAKdD3fq02nSGhRPfC2yfRvGusZwPxWLrDSL+7yoDUuSe/cVBAAmU1t79ioDL2BweW6L420ROW8+3QCWhgA07iBBskYMISNKOUHAjRIAKvI2ol7aAWLfbfnVs5Ro5CjGxzIYpJqUHnJVCaFHC0Lp8XBW9PwqD07VhKbqEVfgXYZ2kCuPpSwG855mwIw1ApkR5KmOWsQ0KUhpoyemsDrVaftFjqFBrUwLu0YVjsDgoqIX4HJ94RdSAI9vcFwqUU2aGMQZlqkvKAFAByzaNVmJZysTASQnqLzYEfDIjzHBsIU7qWIkAo4qvNf2NwwArkKgqxVGa/A3NZdysARxCMzmvX5ADgOufKT3HRLgrxScixirjmNPupLAIlJTQX3Mupox9AQqDs7aOhaVN2AMdFRVUlciNREkLFhiHDYgy1NYljFg+BsWjkQ0YsD41cVeGLtS4EEDYeVTNRcmSCy45nFQ/LK2DzAGDBdBShh6GShIQ6UYDQQKjUimq+Vb+k8RZKCWXBnoOP33mA4U+glKiyRMzmsW3ZyrUoxJlOq7rCyISOjPNC1aXLwpKK1iLRsfHu6o2noyGC/euUiL330Riq8ZdiM1Vhh3KMVOlvrLQzG9n0CXwAnCrtJPKsBJKFJ/x+q9rMrqC1uyTQqWhJQRCEc9hIoIx/rmMKY0LkPIYctvX+ThOuxahvK90UllkMflpnlhZCgq0Gm9R/SlLeJRaJyDJWv3IEuqr69pm64oWYlJFRotuHKWUz1SZ69itg4EEIBaEAZLapSvVzOKX1OiopAi4CjXWWuR5DmYHay3Y2bhABIuB0aZKwpiVv+1IAWX7kagBuLAIiBnUvLvJOQdh1y85ZE//pAJMpMOcp49vCxe39cYbyYWixgCMtEjZJaeIFFWwWYm9NoEIfxpqdygtt98qoxbb8iBF0EpVeDSpOnNWVHoY1Xj8OGOPY2vNnypvPheB+Q62yOAC0FDeJEprMBEKAbSqR0k0GRA7MAHOUbgJCVrX9X+FRZeHYknN/vQTJQJLSNMBip6ALhCH2uVL5NokuMpWeUKkqru3nE+UwPOgshHfAE2kAayXbkopRKAGR0mdbxcmaS9gzOxh3gqtKVmIzYSrzDyXsTeaWbHyrBW2ng3CAlsUKHIbgH4PsBgCyPmWmiMCnKuAFh9qtOdPsvMuOjJmGWNR4wCi/A06jHKep1enksByQE4UqUYDXJaOErZccAAs24heXCKQooD/hiQmeFCKM+hlIUN88lUD/ohuAlogrRljYJIUli20JADr6CI1jVdnwrUEARFFtSsi5KxmgjA75PkceW6RZ5lj8fU2gYWZdZIIaaN9XA/NA4W6zPE1cJkoIWTDZcKmqucTYWilISJnIpbK065TLUEB4gH38pSWJ1Qt6aA0TlHU56zZRlIjUyGZ0drULlRR1X4SFpRdwzaZzTvzpuROE6asY5+IIEkSdDpdj9GmoY8TOik1zttMzpqvu8knij0GC6p2WpZlmM2m3O31dFmjGqMxn88hAk4BpZUGhOGs84YtQ49zICg4LtEtaSBZtXfycwdO3APPdIrPaK2LsgtCrcyrrKXijkVc20nd9QZItXAoqmAxAkNrVRka7LNlloDjhUTGp/WyQEetoThVQ21x3zOceq0TpGkH4/EwuNyAuQLQUS+XHYN0DXAIVQBpOX2BOFcqs27nQpLkRJI0VePp7D3C9DaIDGHkViXqf0g7alDkBSutVZn6MKuA/zpAFEgxdJRVAwLnyrLGz/I5x1QUFgB95pnXqaQKgqtnYqI42qxZZfG0lkZS0Swp1Rc5LqyUTnwyQT7PJ+XdUpUkgatEaaH1xmFgQ0mVYJUNh/LuJiIoTej2+tjZ3oRwyTFGo1HdpuDEVNQ45tbegOK6VUSY025XT3ZGP/26v/8D/yZ6mX/2zre//Q8Ky3+00uteZ4tgWHFwToGdj6OiCHAM0R7w17o+JN4Vl1gz6+FoVOQOn3zmdSowp8a4oIrioVT4ZsysqOJ5mIwp6zRQM/OtYC8GtDFQWlfwYwnUizAUVKOujSfcml5EFghgdQnmUaVur187Dx1iclWaRUlcC7ZbrMJU9fwV6iPg/mBFP3lu85+/9u99778pFUzPnj0rV199tbrllls+/e53v/u1qZMPd5J0P1vLOjGKmVEUNtzUyndyCgCJanWHqrDiut2eHo3Gnz9w5oovlyz+Z5L9zkIoF39apNFTDF2DCjTwSI9UmWjd26Elbr9m/pUSdX7smKp+LMMLd6iFBoHUpUX1vaqaC7LA7venqr+yhk6vB+tydEyvrj2ZA3iOeqgrrpeJluQN4YKHBLXT7ajNze0vTTL+lSNHjuhjx47xXXfdVV5sd/ToUXPo0KHj733XO74/WVs9SkQJWyfKEDkmWFsmQjoclxzCpqbNqpjoxyhs9ut0ix+qiqbm+CvxgpWCGpEKXQRp8ohijistIDFYaMctzpbWCZdW/sXXIxTcarWpC2TYWLjJIl7LggE6nR5WVjdgbVG6sajfqlo3HFU9WloyM1RqJAZGoCRpl5RK/sVtt92W7du3jyKDAgAOHTpkjx49ar7zttd/dDYr/sdOp6cBOHEsIgJr/Ym11npUqihgXQHniqoPa20hRKw3z58drfQG2Wg0OjSbzV4Q6K428IL1U7EhlEAm5Z0rqNl+9aerTuiFkKqah4slxqVSRxBGGU+XpHgMuzWP2uL/LuPlxhypBm0t/M7K2gbYekivPpV1s6J+rAgTrfqsTZ2mMhUzSarHk/E2m/QdAOjWW29dWl6Uhv2W73jtW4ejya+urm0YCCw7J8wWLhjUFdbfeNbC2QISMmuwo8lwC866lcHKyn/pJuoDbPP7s9n009ks+7VslN1Uzt/IkSP6QlNvI4TaKeQVrcSIorq1NqDPjsuTG5yZWj7v4iktBqR1xLxvZs/CQUNJLSZLtKRhW2fjUe8qPN/K6jr6K2vIsjmUMdCaYSipkCyKDEjKa1CUp9Xf/yVNNrwWpbjX6+nxZPqxW2556bmvNBpx6NAhFyYDfvmvjr6/t2tj5Wdmk7FYZgeTaIGAnfUtOMfQRoG1g7gCIg69/gpW1/dSYS07ZhitO2mavBg6eXGRzd+cz+e/n+/YX6aLV55YNg6plGCC1t3bNCBFrDlZENtY5Ms2+6AVoK8I2ujFTDSaQ6lKDm6eVIkSnZoRj+j3uRFbkzTBnr0XQYThnIeOKEjNlsCDVgrGBOnZwIQAoWHwiAcliUmgtP4YADp27Jj6ijpiRHzkyBH9mkPf9rPbWztvFkHRTVNtbSa2yGDzOdgVyLMJxsNNjHc2QQA29lyCXfsuRdrpIEmMMsYoASSbzzibDK1Ymyadzo91dqX3DIfDb1nGDzZCNKkoGNxOVGo6pkdAVPOExQdIxdloa4JNEZQySNIOivkMUXkZpsJUE0yPDNgkqlPoCHF9Mwk1su6S0zRY28Dq+i4ACr1eD1onQVNY16cbrWnwyqXXZLAyjRIQUp08+HS7JQQI7rjDhVP9r9/1J//lI2traz/P7F5fFHPFtqAkSUBGYdeuPdh38X6srO6CMrqSYojYJhQam0oEMh8NXafbubzX7f7Fzs7m7UT0Z/GJVaRlHNAdYuFG/tFk3Lfpk1FZsaSBTi2clQLpq2QIVGSJIJtTx7Bav6EZ2wOQ0Erg4u85MOTLRGRj9z7s3rMP/f4A3W4HaZrCmCQYlhoC0UTUaNE1MnEBOWYw6XNPV3ogCj9835Ej6W3f/4aPnz63+bvnz59Vp0+fFOsYa7t244qrrsdlV92AlbXddQhYNuhdvVaQ0mSybO7EFZ1et/9H4/H45liZ3MCpGZOrOgOxARd6jrR8iHGh9UwlDNhQTYHWiXeBEgEDUWYb15wxm7E5VR4hWwHocI6reCEssM5TOTudblUmUJgWQEw+U9QYzipPRw3XVTgwiTA6qRr7gbq7n1HX5O7777dHjhzRu1d7vwIpaG19jQ9cdiXW1tehTVp1j2r18VY+QYtyREopbYvM9QarPVfYPxCRWwBkIkJKlIyD4SiuFKrBn7hFhSXMiBCAl5Ua7T5t0kkgVHJu/YkteUtxp6I53Bxlu4EMVvKEnLUobA5rCxQl31YEWmskSQpjTJBy95LuSutog0bz/cSvtzmj6sf9wwV/xn2ww4cPq7vuuov3ra5epoi+odPpYveeixQRwe8QwBLd4+ZMbHOKMzas1rPx0HYHgxdNJqOfKZXJFTkaiW8BUZjniEYEqFJAoUbPtEymAq81GlCKS4347idSMCYJJ8FnuyjJWxE3qiY/149fnnSWQKBmh6LwhhQOUgTGQCkdjGhgggF9kqYj7rB6ChJbm+muAhWHRGsDrU3HT0ne/rSNeuONN1LI/m/q9XsdiLAqkRchOI5mb6QewoqZ/GVYVAvjnQCIdDGbiBL8k52dnT1EZBUltG29/2qQi5tITTPrpBZAIJG+4KLSZzRVnnZBoY9YZrMgREiKNHqk1SRZIEdbV6AoCljrqh6tMUllRK3r1SekImAhKlnqrJyeUgNXVTOkHnRO0wSkZOOrFbGGxnXdThdaKS7rfw4TcPUoR3Ray8EzkUXCQfSetNKU5xn3VlZ3E8kdZY9uC8BMawV2IouT0ItlRJuRUDXKWC7QZA6JUsB/nSsquK/0BqiAjnL200HEwTmLosh8O419tpokBkniXatSNeRYbsqo42HLvSpaAmi0SOXlDyJ1N0UkiUlASl/21YpZaqWvIgXfrSobBSxLEDw0JuOapaQsuuJygoGtwMn3AYBJsmSUYTYxygyUVmEMgsK4Hnu6I0xUr6rWqF/NVaUlIxh1icNQSiNNO56fW178qCksUGHehMFs6wRHGyRJ6pvRVCc99bAVWqQ3LFBVaIktmLniVJWJWsz0IEh4njKp0i95piSwqrtC8gIRhoQ3XiVoLEurC8/0IE/HjtmHF3AsxXxGwvZlw+Fwr5KBTIhoorzrkqj105JC5wgUiJCg+LNV3zbleoJUQK+PRCfQJQ7MrqEQKmxR5HPPpFcaJkmRpp1wKtUScndLAq9VR8fT3fEvlvUwL0nq2kLvRKT868HLDx8+rPA0hTYkLOPw3Ry5hosCWinSSkFIqh5rjNw15YakmuCMPWbzax9ZsjyH1nofOXeT2r9//xygsVIBGpNlqiQXcBEL4L604m6Mtaqg/9CtThxIAA5j9s7B5RmELdJuD/2VNXR7vXBC1eIJbQT3+g7m6ioso9Y0U8s2WSf+vSp2hTUp8/kcidYvfNOP//i1QUD1K47v33n4MHk6qNmviQ5a31MlTxyobzAWXkpWp5amRHzNaxStmox33V4XTuQmj2EShsprGkkZqGuGA1fScUA9KFQvNlhWfnDDB9d4KyHtdEM96QLW6hMhIiDt9tAbrKHb7SHRJmSurVmb2Kix/NkCnLOEHrOweGFZjFUNmqxHwxQxi11bX09MR33P05Wqv/POOwkAOoZeNlhZ7bFX3iKOKgIqm568hPFRuWduOX1ZOk3vkzu51ndFhTaNMSXdNOq4UGNWHBE23GwwS1V6NNvjzeY0kVdq6fT6sF7zHmnaQX9lFf3BGjrdfhjPiOZSGhcaSxgYTQSqdsOyhDDX4vTiwvtuyryhXiSoVJHlgOgfC+LUX3F0/9ixY2VkOWS0gtaKVWBoqDBSCUWVbFA5OlmHPgm9Vmp1wJoqMA3oS+RiE+65M14TS0RVeGP5ALr62v9Om+zNEUEZFVO/waeVetmB1gYraxuA0uh0ekg7vSpjpca0ehPoUK3HQtw+q7j6zcOrGr8TxVOg8XxohYo2+1D5rFXN5nO3sXvjeob8MBH9rnjmg32qzVmf+MQnEs5mt2X5HCCltDHQ2gSYkpYQ4RRkyYYPD69S5JJjhRiGCFMAX3Yp31SlM9qoah5mUQhKIjELWRSmEFnK3o/REg5JQZ4XAGmsrG6g0+0FBkVrFVhc47ajH7WOX6ub06C3tJr8cdLhBbeWnNLouWMaacgJaD6bSZp27tza2trArbdeUMgqKJyLzbLvXBn0rrN5xqkxKkkSmBBa4Nt60I1FhWgw+CtRlZZeBC3pW/vRDUm9+030GVUplsSFv7QgwHbtRA0RyFg+QKQunEt9hDz34EEsnlFPcavl5V/5u/GEOqEVz5vf18NbUZIRC4I0uFctUQ0sW/VZJWkqz3NeWR0cUOL+nQ+Px1TbsKV45OHDh5UxdBhwMEkqSVJn8UqrgFipRquvrUJVCljG4jgUT8C3tC9YwCbUa+fYj+JR3awOg1HxiWVppAc1gFD3NT0Pqf55LGjB7Ba2WtQT602RDWqNRsQZgcQyek1Wu0/tpL7TPa+2yREmiYamWrDm4mB1NCekFQyRHu3suLW1tTfubJ47QbT35wFAjh41x7zLRVDftp+5957/bTAYvGI03HKdtKN1tUrUj2h4xVm1KPUTEeRU6XoDX7rSrIgVyZvCK4Xxap/6tJ8JqYNhjUMKSHFg8AOOyymvpKlpH43P+5ECf2M0FcEWmf6+tUmNDK4a/5e2SIg0JHccBAgT3nH85KC3pJQGu6IGKYTCuGOIY4IGpvoU7bNwM+qyAtDj0citra3+s8lw5+C8sL9Ae/aciF3vA1+87xe7aecXJqOh66QdnaYdj0HrepuzViaSKogzdF3TRqORUE97bdbQ7evJ4LkBgESSU9N8wlopVVgvmN/AfBmANp7cyQxo1crEmm2x8q5xLjboYq82fiMxLBkbuQI1BCEzdJDA9SmsRZ475IVDYYEsF2SZC6WAhbgpCqcB0uj3+zAGSI1CkiikCaHTMeikKZIkgTEJQKGTU7X/aqYkKQ9UlOMRzKJHwyGvrq//EO8Mbzv/xOk/K2zx2SLPdzl239Pv9V4yHo/YpInWqhNkAgAyOmS+aqGMIqoljWJ/Gy85XAw15UREIFQL7RgAGOwaPDk7M91O0nS3LYpqFF6UqjMy1HTRZu/Rx8uaeVfGKmolWs2lQs39M0vqSZEq24MUKPIcOztTnNuxOL8jOLcNDCcKc2vguIvcEqY5kGWMfXs28OSJT+L9b/853PKtv4j9V/9dGFWg21FQyoHEITUFVrs51lcyrPYZu1YJ+/Z2sbHaQ5r2oE3akBGok7Cg1QAGkVbj4dBpo3ftXh38A+cYtrCYTCcYjYaslVIVcBI6RdXXUWJUSwCpBrOyvMEb46GCBTpPhRX7Q3HWAMD6+vrO9ubmk4o6u+ezqYAVsTgQRyTuKCEqCWe1nGrtqmPxrHZdWf7d4qyKahDWSlkaZ+cYDmc4/niOR04rnNlOMcxWUbgeoAyMVkgThcQowAA9zej3BStr63h4fA7nNx9Hp7+Byw5egulk5KUDCCBoKGLkAE4PLR47XwAyxaCTYc/KNq7cv4PL9q9gZbACZZKm5A9KN+y9FhnSzrGMRiNXSu1Ya1WSpqp0m/V1ql3vslo4Vo+JM/danhdLFMwjlMkxGHLSlMy444888liSpjeASERcNPFdJkClUoosJEa10BSWxE5e2A5Vxkcias2K+r91nOHMmSHue8jigVM9bE72wiFFmhgYJegoRmIIWrEX8WACBa4Si8NwUuD4I19At7OKTu9izCYZisLBFgylAaMJOpC0jQa6aQdJ0gcz4fQox+kvjvHF41u44aoxrr58A53uAFrrxglRSoU9JwytNRGR8aesHlNsI24AQFo1mvOVEaMZoZKpWfWel0pCNhE9ZqcKa8GMR021WAfqgTRNXlvOQDapKEFkkV3VyC6z1jrjreXH44Z5jOK1Ybu2HqBAMJ9NcO/9Y3z8ix2cn+1CmnSQpl5eVZNrjGM4pqoZ4DsaBMeEwjpsnX0IvcFFWFm/BFmeR0TuQHkhAZygIH9zZIVP7PodjSTdhWm+jnu+uI1TZzZx8w0Zdu3eqMYxy/emgs6ECPvpPJ/2QimGc0tWgkbvV+tFyZ+G3nC4HtTiLS3D2j0nW9E8y1xH6UerJQLKJPdTxIUVrkncitiPuTsHJh1UdiRyt2hkvu1FB4BEcXTxlHr+EWNzc4i/+GiBzx3fQNrpoZd6nSQXWK2ka+NVWWAVcwjOvznYfIrx9gn0+hdDJX0UlmEUoLV/DZb90LImP/Ht8wKBY8930oVDmhDW1vfg8eEAw0+dwStvPIf9l+xDkiQ1eYDEe4gwVERhKogZQW4H7W5Ki4O1hDge6VpQa433MqXWcnDLaEO5szsFpqer7XlKyX15lkPET/3F0m11rUoRa49byl+Lrmaxt9mUuakVUgTnzu/gP7+nwKe/vBu9XhcJccSQqBvcqurfRqOIKE8uQyuDbHoe09FprOy6GopSL0sAr13kmQYAREFA4eeepVhCpMKEogDGkwwrvQQzPogPfUpw+okzsLaI9gQEFK5aoIQmhaZSa6nZi0rR0jq9QY6LBqOVUg1FmwtsGhGTJhCWk8eOfeyMuvPOOwUA1tbWHiqKfJQkhqQSwY4MKzEK07wLlxGrm7G1Cba3S5nxeIYj77N49NwGBl2COIDZI1FSqpZUcqttaVqpjAVhaJNg8+xjmE02sbbnWmjjxbec97a+LKsa4+RPZwmDBh1CF3SInSOMpw6pFrC5HPfcJ9je2vLPVzI9SkNW3STV+L5OglRUvqgl0wLxIgU0BqzRlkJq9VNFONBt1JfuuOMOp+666y4BgJWVlbME/eVer1/nuhLL7nALDy5H3d3CiW2ObciCrm0kSgeCxXs+MsOXTq5i0CFYV+4fjybGK4iPw5Yof0GtZbDjaEZGgWFw5okHoYiwe981QESRqQiT4rV4rWM4CxRWYzzJkVuNvHDe0MG41gHjqYVRjK35JfjcAxPM56Ols0UVSBFgzZq5SA3DNhiN1J4TkoXJhKYUbs11rpNWJVoZQPkB5TBeKpqIWMCf6XZ7UFFnn6h0xeHOrO7ophIm84XaV8un2ARAmgD3PTjBPZ9PsNJPUAMm1NTv5yATgC7y3MCxAodNF+XuPQ+M+JO3deZBdAe7sb7rMk+LiWDGGGJTSmFnNMa77j6M9xx5E7503z0AgjS8K0+yj7WTmUWn08EjZ3bh5KlNOFdcYMOWCqOfTRXWNluDWtK4FcrVEMzm6voupbFU8u+ssiyDCN9bNXrLvp8y5lPGmMaD14KLUsXXphBxeTdxA0RYvnc8zhwJWWZx9N4CjlMYXde15RupUBZNyPIcH3r3r+Ej7/klPHnqOFhUtWylklsFkOdzbJ1/EL2V/ej294Bd4cuz6qaUMCEggO7iE3/1n/DwZ/8A2fCzuP/j/x6nT5/3HHcOrtojkXAOviFBu3DfQw7T6bihqY/GFotla1AWWfdoAQrLqwRpha9WuBMWbbQaTSZTpZLPVkY9e/asAIBmvmc2zwBSOkY7yiTEBqWv2tiuGmePO/dt4GFZ4tRJNb58woMKnVT7U0q1bn0tzMgg3ce9H/49fO6v/yXOn/i/8fBnfguT6TzqupSZr8Z0dA7bZx7AysY16PZWA0VHgcVjxa5MlEhhOs3w6AN/CaUTzHON8daDeOLx+4GQXDkHOCav2ysCW3gHdnJnHU+enVYVQiPsCJrTgqgpOO0kSUVTA2qZ+63mmCS62WMtYoawcCftAILP7du373ER8cXb7bffzgBwoNv9bGGLx3v9PikVLy+TRifEg/+udsuyjNoiLeGptvsRfObBHHmRQimCEwILVYIgJZuRiDCfjnDigfei21vFZKZw8vhfYvv8cWjTrYjQhXOgxGC0cwLzyRlsXPRCKKP91FvlAbxRLTOcEObzMSbjJ8AiKAqH2WyEyfAEbOV2Q86pQkLFADsHqHWcetKiKGYVy7KUjm1LdpWXULWU5JpeLSLAXaCej3OVqjLxyZIkaQoBPlixUUuJtCNHjmi69NKJIv2RwWAVSidcCiu3DQVmsCvRRl5YwBO/kDLWxgw4YxQmU4eHTzkorStNFIiAbSm+4V0mKYPR6CwmO4+DiDwPOBujmG/COfhkx8u9wZgUW2cegrDDxt7rYV1eEdHqrhP5mtT5tWOdVMOYBMyCosiRzcfIrU/ChCna6elPrXUeWTs7NJjOsnphEkUGqXQVsCBd3hAhiep7YFHff5lmY43yVTxrlWUFoNR7y19XC0xywXuNZ/sRKdWQTi0z3ZLeWDFFQUtgq2V1q3+sNNE4t1Xg/A6Qpsq7xKghXyqrMABrgTybg8hVSYhzBebTCZwD2LFXWwpx84kTn0bSXcPufVfD2Ty4Kgf2rcXotTp0Ox0MBqvI8wx5nsHaAibphvpVVQQ2Z/1NUOZbjgWb4wTj0byieEp4DxWsR0tErWM2h8hCUz7e1rUA2IehrXiUVIQlMYmaTMZPGjP8eJlfqTbpOOkmx6azWZEYo+OxRea4byoBHqvru5I05cqLV6lgoyFZDvjdqud2GJM5QZfwnng5rzJH83eif4O9bh9J0q02R3h8GKE7pALCpZBnM5w7fR+SzkXY2H0xEgUolQKqB1CvZs2QhrAgTdcAswvZfA4QwVpAJRseSlA+AXMMsPhs2zFgnQflp1kX57ezWg+/lRlGwuQVH7pcRCdlWVJhvNQg7TVpoNyi5UYIFZTr9npCpD64d+91wyNHjmgiqk9qEIiggwcPPgTgc/3+AFpr1x4IjoEHjsjIMRBREr+p0VmIYDEItnYKL3Ef3rRWfl8FtwVmRWCSFTASr4tLhMIKyKxU5C3PSjDY2nwS22cfwN79NwNqA/PZGE+c+iLu/avfx5c++UeYzaahDva1ZGaBgy/4VhR5gWy6Cd29FJde8Qo4N4cKma+zXrcXgRDm4zKhcAaTmWuBLfWyw1Juj2WRz1v+/yZmTtUJjwVTuKKILs46OXYUCOPvjL2taVEa9aFDh+xjXz7+7rSb3jwajcRLmUulmVdq6ZUSbBxy/poFx5XGXltCoBwlAIDRxIa2ngfYVdA8EmE4EHSQ+SmKDGl3A3svfQke/cKXkBhC0r0cu/ZeA0heL0dI+nj8xOfhiiFSOos//4PbMTr/JQiPURQzDHodTHPGS1/9Q4DMPDxYTPENr34Dds4/gCce+zhe9Z0/j/0HD8AV06r/GSr5ACP61+6FJjWcU3BsQcrU7JilQiRSS9PHJd8yOdoGr0Gq69YMbQxmFq21Hg5HO9DmL0r24oJRy9JGpeZP8rz4Ba21tpYago8LAz0skFI6HIyaCqsi399e0EewLOAIPXJBcVOVO9vCqfQ/A171bT+FnXP3ocjHeMW3/hL27LsERT5GknhcNc9yXHzJFdi171qcOP4prKzux66LbsKBK18FQYaPvu9/xzwroLWByxmkEs/OEMG3fu+vgtlCG40in0ArAwkhgaKtFC7kCVr5LD2zVDH9ovW5gSfVrNlruSFpQA4LA1BNfv7SqiJkwG5lpa93xpP3Hbj00jPiXe+iUe/wGgUE4NPHHzn+qcHa6svtZuG8bk+95qRSZmGBKK6ySlK1ZkLZC6QLbJXQiipFakTydxIJPJIfWYBzc6ztuRbf92Nvx3g8w2B9P4Tn0MYE2IwgnGPvxVfh7/3w27C5PcGefQeRpF2k3TV8+sO/C6UM9l18DZzNIUIwAYZUqUA4849jC5ggjFk1qeH7riSqqhe1VlVcbAmRtnrF0lhmWBHjlkwFLqzrROx+pTGBWPF8WUhBvRUAjpWJ7tLRgWPHNBGJ0eZtqyur0FoJUfuJa0CirFWZQ4bJzWDfHuwpPwY9L0RZJVAlBCloxiEBNCk4O4c2q1jfuBRKMlA5Th9imNaEeTaH7l6Miy55ASBANh+hKCZ44uRnkaYrWN+zH9ZmYYVn7VGIFJRQkC4IuK+rh5NiKVcBobD+ObupXkoxiRv+0spypdULlQUcV5YQDeL1ZALnmLvdnp5Mpo/Mi+L/aes6LRj1zmPHGAB6g97dk8lkYpLUAEpa/rw6YfGYQC200YwL8Rso67Ld66kfWSz5wxSDHHVG6II+vx+qcgCKoG0Urb9WpdCFAsSCOfdsvbALJ58+ibS3C9qseBHmcMocS1UPs7DvBEm95Upq5fOQ4dYnTsGh1603Wl3InTY7V5GhGC0NSFrCr16G8wqIFPd7fZCiP7jqqqvmR48e1bHA84JR77rrLj5y5Ijeu3fvKQHetba+LsYkTitTjVOUd661diH78+slXetFNXn2ToA9Gwap4caMS42u+dUm1YwMU9UDjU8BpFxNRgHcj9em+Dg2Ho8w3HoU/ZVLYcygJj1XqzEFztpq+UNzL0BZm3rEy7l6rkMhR79Ty9XyEpLdIjzazJIX3W97+USztVkmSADpndFoTpbfukxhdOnIwO1B00Bp/dsAkdZKNQn0dQ0V3IHX0A2SodIYt4jKnVDT2oKxb1eKjRVZuJB1WKEaZiNptKJKPQh/fSWaN6VqSswrHmjk8yFm4zNIB/thkk69vdEWAexXSLuryPMJ8qKoiV6l3qlQZdjyZ04I3STHyqAJzjc3Hi/I9lzA7VILM18+jV/mMQDc2toKMbu3X3KFVxhtq6+pC3QSnIjQgQMHjmZZ9qmVtXVSSrt256YWnYgW1VW7W7g6uW18OCssNtZSHNxHyPOixVVqjXlEMatuQ5UbmLzUjrMObENsD0b3N7TBdLyJPBtiffeVMJrA4VSmyQAiHZw98xju/dC/xbt+//X40ufeBWX6wdPUi4G5PDmhvi0sY89qhrWVTmMCrd33xOJs3gUyXWkcgvp6oaEDEbhhap5ljkn/C6/+c/eSTccXHsPTROS0Ur/e6/XJ71xJWhNxaNBbXMBBWaJ1z0sGqmxhoTXhuqtSzLNpNFZRG5EQZljLeCfRmGQp404KpBKw+C6PhzGtJ3u7HCDCbHwGJA57LrkB3e4AogaYz2Y49chH8aF3/lP8+f95Gz72/l9Fp3cQB696mVf0hGqsway3cghYCLbIcOlui26v12pooyFZ2xaNrvfeyJI14K29ctFkA4dr4By71dV1lRX2vx48ePBTR44c0XfccYdbshbswmN4IkI4fvyPH51Mf2V1feOa4c4WA6xK+K9eQy1+RT0LmBw0EZgt/E53HYlSUMULLgrBzTes4R3v30FeOJgwdUdlm4ADzVGFJKT0/2UNTwp5NsV4eB5Jdw2dzgq0SZEmQf/Q5lCqi3NnHvTsQzvGZz/2Njz20DFsnv4ksskJkO7ishd8O677hjfgkiteiTQ1YJdDax1h0eXze3DEMbDaGeLK/QZKmaX9T1kgXHNrARNdsEe6DPMNhhZFRPM8syz0FhGhuy8g0vWUQyRBlNg+9shj/32/3/mPTzzxuGPntLMOLK7R8NVaB+0iT1Y2xvh+YaTV4DWOdNiglGJjvY/f+aNH8P57NdZWB7580dTcmRrUrJVSXnIdALNF2l3HX73nLbj/o/8Wey66Bt3+HphkFesbe0GkMJ4Mkc3GyGcnMZ+cQV5M4QqL3urF2HPJS3HZNYdw1QsPYWP31XDCsMUUipRXkCHyNSjqxb9l/VxYxiuvOY1vefkqTNprTO4tH5OQFrtSGqvAq5sgUrcpl+dy6fmY4axze/bu0Zs7w7dedvmVP7JMPfQrntTytB4+fFjNi/l/suP851ZX164f7uwwKVHE3Bi5Y2a4UAZoIAhxKL/mksqGt6v21FhbwDrgtlsvwV9/9jiyLEW/m7QEuFT1tS81gpsjYJ7NcMX134F8dg6z0ePIsvPI5uewde4+OGehTR9JOkA+3ULaWcfVL/sJ7L7kZbj44A1YXbsYRqdQyiLPx0ElLWT3LHBUJ0oU6RnnVmFXbwcvudZAJ50lmC4aoxTtgeea8hNt0eDFcYp4E3KZ8SZJSjvD8YiU+WVpSpY/M6MSkQQGf3bi+Ilf7vXTuyfjMdeKotyotZjrNZZeXoZAjZENqop4rQmTyRQHLl3BHd+5G7//ziGkuxGomwKFaPFtCTVVEu+Ews6xd//LcPDKVyEvZr42hcVsOsNsNsdg0MfK6ir++P94PUQpvPo7fhEiFkU+hSsygOdVK69sJjTSby8+79EQBYjSgJvim26YYfeu9SodiRfatgqiiPSOBhEv5kCXHLBFNZwGVcatrq+aza3hP7/8ystPPNUpfVpiFETkjhw5og9ecfBPxqPZB3ft2aNJkSPSjb1lcauoBBjKxTqOXZBp49A687+f5xlGwym+69B+fOeretjeHjUELsvak+MmtwDsfCLl7Byz2Tbgct8AkAT93hr27bsEg8E6ZtMJXL6F3up+zKYjuHwHWnnRZFLG6zZJNDgdbiF/OlDp7jMT5tM5vunGEW66fg0q4Mbtoa4awpOGys1ivSkVg6T8uqQD1bJ91Sf3en2zvTP64mVXXPEvw4DzU2vo4+lLnIooebMI8m63D6VI4unvmKBWDesENU9PObGBodBEprJsjvk8xxtfvx+Hbibs7GxXXN8aXmQwPNuCnatcMYVlSL5xXoIXDJYCSmtMJ+eRzTax+6JrYZJu2ECsWlMEFNClUI4FlMnHVJ/t5sUcr7lphNe8rA9jOpEi+aJcbnwiJdJnuBAwUaNEy/BeQCnFfkDZ/BQRzYMCkHzNRg1Av77qqqs+bZ37jT179mqttfNwXZN+0VzIXhrTRuQ0V02Wl8Ydj4ZwjvGP7rgKd3xHBy47j/FkVjEUJTwei79Jyn2gFAIsB4RGl8rrYTV2PjuDPJtgsHZZPUkWatgq02ZXo5NcNhj8884yBskIr3vlFN/2jQMkFXjRNMIyfeR6FyoaOwgqWJK5MbtbY+j1z51ju76+YYbj8W8dOHDgfV/J7T6tmNr64CNHjugkTd8ymU6+d219/fqdnW0mhnLiqkQIpRQdlUx4qSbGmDlSPFHB/fjtUuPRGL1+H//d6y7HC6/exDvefw5feHQKqAE6qUFS7XAJF0jKrxmkpJ7hrMY0DHY2T0ApwurGfihl4ZTAurDTjuJyo9TRZ7ADZrmDRoHrL7e49WaNKw6swnFzs1RTkggX1GRkbmpfoJoq4IgVIgtoFLNzg8GK2R6Ov9C58uqfeTpu9xkbNZDTcOmll06OHz/+o50k+WDa6SKfZ6I1yDlX6xeGXqqzFjDGa/tWqEi9h06peoJOKcF0MkZR5Ljhml245sp1fOK+8/jwJ0f48gnGaJgEjUIDY3QofUoGgTRGL8vVoNnkSaSdAVbXLwGJDfwgARGHpT/+5nCOkTkGc4FeWuDGKwgvv8Hg+itXkCYG1nk67IUgvGVq5u0Z3ZIO1JiWb0CpEuUjJEmSwgnPCud+6CDRJCSs8nU1aumGjx49aq688soPH//yl++66KKL/5fTp09ZtjBVa0o8EuTKAs/Z4BK133GmUWXBfoDZn+wioEx5Nsf5TYdur4dv+oZ9eMWLd+PkE1N84eEpHnp0jlNnMuxMCLNMw4mve5MwTFzvohNY67B59hFADaCTXZjOctjC+oHfcPEUCbqpYPcqcNEG48oDBi+4YoD9ezvQGsitoLC80B5rj+43/6UlQ2NoSCTEJ965IJQtdQKlSLnBYMVsbQ9/8qqrr/7U03W7+GolTqWccwD4xKlTfz7odF735BOPW2Ex1hYVmE5hRaYHHULpoL2QhdE6mqD2fUwJitrlzzxBTSNJOuj1EhitYJ3DcFzg3GaOM+dznNsuMJoCowljNmPMc6AoBPPCQijFPe+9E92U8Xe+6y0Qceh3NVYGCoMeYW2gsHd3iov3GOxZT9DvKf8cDBS5q/bxYEFYHgvaCxee9kNrB0CUnLW6W1QicizFnr37kq2t7X932VVXvUlEDBHZZ2KjZ2zUUh/ozjvvlFOnTu1WRB8F8zXbW5tOhHWdFNUruFSYedUNuXNVrQorB4jqCbF6bN73UX1Op7RGYhSSRCMx2q/sDBr61vk7vbCMwloUWe7FKzsdKO1DQJJoGO3rUh8SCOzEc4e5HraKT1VDQBlY6KhcqJndXnzoSkrtBSYEQ/y1u3btMePJ+AMPXn78tbfiVglrwJ6RzLv+aoz6wQ9+UG688Ub96le/evJTP/3THzAm+UGt1aAoLPslAq3WU2NyvMIQGjd/1cISRBkmtaiSHHaCW8wz/5kXFs4GTSf4cf/UaPT7HXS7KYzWSBJV0W+cExS5Q1Y45Lmt1nSVxX85Y9qeBWp+La2d6Yvdl7a6eCxw3VYDDQmb3VjfZeZZ8TkH+u6XbbxsCgCHDh16xrr9X9VJjV6cJiL32GOP/d00Me+bjMdJNpsJs1VlyRJveqrcbRBFLpcQlWolOtQkimq9g3pQt57njGc345+1tLIWFvwt7sxp71qnxqTehUlhaPRQL+R+24uQ2oYsM3Vmsaura4aZHykE33Lw4METX2lL1dcFfLhg3/XoUXP55Zd/aDbP3jDoDzhNUyKl2GeotUtt0DIkrslqw5eqaMK13FzVenIlUZxbF83Xw3GbKi4n4mn0xRiIqM0l1VyOf7z2uGa7hcgLBq17y676+8YwU+tfFoF1zq6trhrr3KOj7Z3XBoPqr9agX/NJjVdAEpE9+eijt5sk+cPJeKTms6kAUMw2lA618qfvYkW7YZRaiK2VlAAFVDYSkWpKDEg1B9rUVaAFKdWymbCI2crSTsuyPQCLMXORk7vs/1/g025sbJiicF8YzeZ//9prr33omWa6z5pRY8MeP378BzpJ8p/n82kym0wdwJo9FQEcMRmqbRKox9+1VkHmTccrsSIlE2oobapoZXbMnmjPgNbrr9uCXFTV1u2VSU0VtrZ8vFSPVU/R4wKNcUSjKxzPGtm9e/eZaTb76Ln59ve+5AUvefLrYdBnXKd+BVdsg2H/+NGHH97p9vp/2Ol09ox2hpbIGSYHYhcyzMCIYDQEK1y53EgIpccuJwOoMZkdTia5hQ2QtSEogBvLlGJae1gX5AuocfLq1qEA5NmGJU+qDRXGhluUxQGcc6KU4Yv2XWTG0/F//fKjJ/7Ba17zmtGRiIz9NdsCX+ePsrF+/IHjL+qtJEfSJLnx7JmztrCFFnHkYyaqjoiKpOKqkie0wupyCNHGibqGjSVsSuW0ct1YU/uPLogEYdli3yorp4UF7PFWjIYrDjdke7o8/nCOXZomejBYRVbk/+rAZVf8bHhu9bXE0K9rooSnWAp75XVXfv7s5tbfnefFn150ycWm0+mQ1toZk8AkGiasuyzHVRprNrnWlXBV8mLBrm7dWWs94cyVY4rlqjBXkct9MlMnWPVQFzcomE1RzHietd5eJTHg7lz1GC4kcI7rrxc5RiwiZNd37dJpp7c1nc1/6MBlV/zs4cOHlYjQ19Ogz8pJLT9iUtSpE6f+mTb0Fogkw+1tK+w0i4RTyxEXoCm8WCdBfp6Ggpp1vdNc1btjwlqQci+b35uuK+WlUpC9uUeh6WppqVBDGwpEY/XJsrKnBUy4NO3otfU1TKbTD2QF/+QLXvCCB6IMV77e1/5ZM2oEKRIR8YkTJ17VSdN/3UmTb9w6fx5ZljmRkESBl0qeEmodiFIkqtzPoEjX2bRSQYqntJNqqHQ2d6Q3JQsWJeZkQXyk7ECV/XsCRWOFF4AHWZhIYWPXhsqtHTPjzoOXX/6v4hD1bF33Z9WobZDiyJEj6bd88zf/jAj/fKLN2vnz50WEWcBaKpfYlGqPX2K9MAHVrnGKRZArukgpexPF2qWlTa1LsdgTbcr0LBNkr5Kw5nFjgKTfH+gkTVFY+47RZPoL119//Rfim/zZvN7PiVHbycCZE2euFe3utFy8MdUJtrY2BRB2zimAqY5n8fpsVMgSNayA0CxQiydcqXKNU8PdUkNbod0jldYe2HLwpRbl4JgthmoNJxMpGfQHutPtYZ5n94rjtxy44op3xDf2c3GtnzOjxh2e8s2dOXXqm0Wpnxfm24xWGA6HcLawjlkLhMp9qXF3Y2GBQJj99Ou362NDBEi09LbhiqW5l6Yum9QF2AzU3Izl2w2lLCKDoFZWVihJUlhr7yuEf+PBBx/+/UOHDtlyacKzfTr/xowan9r4jZ4+ffpWJfxPnHO39bo9MxwNkWUzF5bbqXJ2nsVdqEhucAGX7USleOGfLNudKotLkqQtdOUX4xIREzSSNNErqyvI8xyO5cME+g9bl112901E+XN9Ov/GjXoh4z755JMvtTb/YXH8g91u9yA7h+lkgqIoXIi5VO/bkHpxQDP7WZrNtvV0l8ODiBTEG+LS7JcbKhij9WAwgDEpJrPZFoHeScb8x/3793+wlUM8K5nt33qjxuXP7bffXq5BwyOPPLLRTZLvcsJvgMihXq+3xs5hOp0gm2cCEUckcMzK284T7GTpAPAyPLg2fNlsCH8jgT0hALHnMolJ0y4G/QGgFKbT6VAZ/ZcgvN1aefcVV1zxeGzMr6b/+f9Lo7ZOLsUu6+TJk5dp4NtY+HXOyTdprQ92uynEORR5hiwv/Jysc4FxBLAw+dPGVCuPUcXmC2WJV4kt5fKEldGGjEmRpgnSTgdEhNF4DBA9phX9tQi9W5R6/2WXXXYyNuTdd9+NZYNKzxt1OWVG4gTjySefXGHmF9k8fzUzvxygl4q4gxDZ1e12SakggccOrrALLbeSYqOUrvu2IaO2ziLPskJA5wj0qNL6UwA+qYz5BBE9cODAgWn75vvbcCqfVUD/63qn+QvlAEAOH1bHbr1V3XrrrUJEYwAfC584LKJ+9MSJS4nosnlhrwVwpSI6qIADLLhUBGsglQg5U46tKaAQRibEW+L4tBA9pjROEOERJv2wMebE5Zdfvrms1j527BgdO3aMn8tM9qv5+H8BFZdfTI0A9kMAAAAASUVORK5CYII=";
|
|
38810
|
+
|
|
38811
|
+
// app/renderer/assets/icons/tutti-intensity-handle-powerful.png
|
|
38812
|
+
var tutti_intensity_handle_powerful_default = "data:image/png;base64,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";
|
|
38813
|
+
|
|
38814
|
+
// agent-gui/agentGuiNode/composer/tuttiIntensityPreview.ts
|
|
38815
|
+
function projectTuttiIntensityPreview(intensity) {
|
|
38816
|
+
const normalized = Number.isFinite(intensity) ? Math.min(100, Math.max(0, Math.round(intensity))) : 50;
|
|
38817
|
+
const tier = normalized <= 33 ? "cost" : normalized <= 66 ? "balance" : "powerful";
|
|
38818
|
+
return {
|
|
38819
|
+
intensity: normalized,
|
|
38820
|
+
tier,
|
|
38821
|
+
modelStrength: tier === "cost" ? "economical" : tier === "balance" ? "balanced" : "mostCapable",
|
|
38822
|
+
agentCount: tier === "cost" ? "single" : tier === "balance" ? "smallGroup" : "maxParallel"
|
|
38823
|
+
};
|
|
38824
|
+
}
|
|
38825
|
+
|
|
38826
|
+
// agent-gui/agentGuiNode/composer/TuttiBudgetPopover.tsx
|
|
38827
|
+
import { jsx as jsx75, jsxs as jsxs55 } from "react/jsx-runtime";
|
|
38828
|
+
var tierTone = {
|
|
38829
|
+
cost: {
|
|
38830
|
+
sliderHandleUrl: tutti_intensity_handle_cost_default,
|
|
38831
|
+
valueClassName: "text-[var(--state-success)]"
|
|
38832
|
+
},
|
|
38833
|
+
balance: {
|
|
38834
|
+
sliderHandleUrl: tutti_intensity_handle_balance_default,
|
|
38835
|
+
valueClassName: "text-[var(--accent-codex)]"
|
|
38836
|
+
},
|
|
38837
|
+
powerful: {
|
|
38838
|
+
sliderHandleUrl: tutti_intensity_handle_powerful_default,
|
|
38839
|
+
valueClassName: "text-[var(--tutti-purple)]"
|
|
38840
|
+
}
|
|
38841
|
+
};
|
|
38842
|
+
function TuttiBudgetPopover({
|
|
38843
|
+
children,
|
|
38844
|
+
intensity,
|
|
38845
|
+
labels,
|
|
38846
|
+
onChange
|
|
38847
|
+
}) {
|
|
38848
|
+
const [open, setOpen] = useState42(false);
|
|
38849
|
+
const [draftIntensity, setDraftIntensity] = useState42(intensity);
|
|
38850
|
+
const preview = projectTuttiIntensityPreview(draftIntensity);
|
|
38851
|
+
const previewTone = tierTone[preview.tier];
|
|
38852
|
+
const modelStrength = {
|
|
38853
|
+
economical: labels.modelStrengthCost,
|
|
38854
|
+
balanced: labels.modelStrengthBalance,
|
|
38855
|
+
mostCapable: labels.modelStrengthPowerful
|
|
38856
|
+
}[preview.modelStrength];
|
|
38857
|
+
const agentCount = {
|
|
38858
|
+
single: labels.agentCountCost,
|
|
38859
|
+
smallGroup: labels.agentCountBalance,
|
|
38860
|
+
maxParallel: labels.agentCountPowerful
|
|
38861
|
+
}[preview.agentCount];
|
|
38862
|
+
return /* @__PURE__ */ jsxs55(
|
|
38863
|
+
Popover6,
|
|
38864
|
+
{
|
|
38865
|
+
open,
|
|
38866
|
+
onOpenChange: (nextOpen) => {
|
|
38867
|
+
if (nextOpen) {
|
|
38868
|
+
setDraftIntensity(intensity);
|
|
38869
|
+
}
|
|
38870
|
+
setOpen(nextOpen);
|
|
38871
|
+
},
|
|
38872
|
+
children: [
|
|
38873
|
+
/* @__PURE__ */ jsx75(PopoverTrigger4, { asChild: true, children }),
|
|
38874
|
+
/* @__PURE__ */ jsxs55(
|
|
38875
|
+
PopoverContent5,
|
|
38876
|
+
{
|
|
38877
|
+
align: "start",
|
|
38878
|
+
className: "nodrag",
|
|
38879
|
+
"data-agent-tutti-budget-popover": "true",
|
|
38880
|
+
onEscapeKeyDown: (event) => {
|
|
38881
|
+
event.preventDefault();
|
|
38882
|
+
setOpen(false);
|
|
38883
|
+
},
|
|
38884
|
+
children: [
|
|
38885
|
+
/* @__PURE__ */ jsx75("div", { className: "text-[13px] font-semibold text-[var(--text-primary)]", children: labels.title }),
|
|
38886
|
+
/* @__PURE__ */ jsxs55(
|
|
38887
|
+
"div",
|
|
38888
|
+
{
|
|
38889
|
+
className: "rounded-[8px] border border-[var(--line-2)] bg-[var(--transparency-block)] p-2.5",
|
|
38890
|
+
"data-agent-tutti-budget-preview": preview.tier,
|
|
38891
|
+
children: [
|
|
38892
|
+
/* @__PURE__ */ jsxs55("div", { className: "flex items-center justify-between gap-2 text-[12px] text-[var(--text-secondary)]", children: [
|
|
38893
|
+
/* @__PURE__ */ jsx75("span", { children: labels.intensityLabel }),
|
|
38894
|
+
/* @__PURE__ */ jsx75(
|
|
38895
|
+
"span",
|
|
38896
|
+
{
|
|
38897
|
+
className: "text-[var(--text-primary)] tabular-nums",
|
|
38898
|
+
"data-agent-tutti-budget-intensity-value": "true",
|
|
38899
|
+
children: draftIntensity
|
|
38900
|
+
}
|
|
38901
|
+
)
|
|
38902
|
+
] }),
|
|
38903
|
+
/* @__PURE__ */ jsxs55("div", { className: "mt-3", children: [
|
|
38904
|
+
/* @__PURE__ */ jsx75(
|
|
38905
|
+
Slider,
|
|
38906
|
+
{
|
|
38907
|
+
"aria-label": labels.intensityLabel,
|
|
38908
|
+
className: `-mx-1 w-[calc(100%_+_8px)] [&_[data-slot=slider-range]]:bg-transparent [&_[data-slot=slider-track]]:mx-1 [&_[data-slot=slider-track]]:h-5 [&_[data-slot=slider-track]]:bg-[linear-gradient(90deg,var(--state-success)_0%,var(--accent-codex)_50%,var(--tutti-purple)_100%)] [&_[data-slot=slider-thumb]]:size-10 [&_[data-slot=slider-thumb]]:border-transparent [&_[data-slot=slider-thumb]]:bg-transparent [&_[data-slot=slider-thumb]]:bg-[image:var(--tutti-intensity-handle-url)] [&_[data-slot=slider-thumb]]:bg-contain [&_[data-slot=slider-thumb]]:bg-center [&_[data-slot=slider-thumb]]:bg-no-repeat [&_[data-slot=slider-thumb]]:shadow-none [&_[data-slot=slider-thumb]]:hover:ring-0 [&_[data-slot=slider-thumb]]:focus-visible:ring-0 [&_[data-slot=slider-thumb]]:-translate-y-1 [&_[data-slot=slider-thumb]]:cursor-grab [&_[data-slot=slider-thumb]]:active:cursor-grabbing`,
|
|
38909
|
+
style: {
|
|
38910
|
+
"--tutti-intensity-handle-url": `url("${previewTone.sliderHandleUrl}")`
|
|
38911
|
+
},
|
|
38912
|
+
"data-agent-tutti-budget-intensity-slider": "true",
|
|
38913
|
+
"data-agent-tutti-budget-slider-tone": preview.tier,
|
|
38914
|
+
max: 100,
|
|
38915
|
+
min: 0,
|
|
38916
|
+
step: 1,
|
|
38917
|
+
value: [draftIntensity],
|
|
38918
|
+
onValueChange: (values) => {
|
|
38919
|
+
const next = values[0] ?? draftIntensity;
|
|
38920
|
+
setDraftIntensity(next);
|
|
38921
|
+
onChange(next);
|
|
38922
|
+
}
|
|
38923
|
+
}
|
|
38924
|
+
),
|
|
38925
|
+
/* @__PURE__ */ jsxs55("div", { className: "mt-3 flex items-center justify-between gap-2 text-[11px] font-medium", children: [
|
|
38926
|
+
/* @__PURE__ */ jsx75("span", { className: "text-[var(--state-success)]", children: labels.previewCost }),
|
|
38927
|
+
/* @__PURE__ */ jsx75("span", { className: "text-[var(--accent-codex)]", children: labels.previewBalance }),
|
|
38928
|
+
/* @__PURE__ */ jsx75("span", { className: "text-[var(--tutti-purple)]", children: labels.previewPowerful })
|
|
38929
|
+
] })
|
|
38930
|
+
] }),
|
|
38931
|
+
/* @__PURE__ */ jsx75(
|
|
38932
|
+
"div",
|
|
38933
|
+
{
|
|
38934
|
+
"aria-live": "polite",
|
|
38935
|
+
className: "mt-2 border-t border-[var(--line-2)] pt-2",
|
|
38936
|
+
children: /* @__PURE__ */ jsx75("span", { className: "text-[12px] font-medium text-[var(--text-secondary)]", children: labels.previewTitle })
|
|
38937
|
+
}
|
|
38938
|
+
),
|
|
38939
|
+
/* @__PURE__ */ jsxs55("div", { className: "mt-2 grid grid-cols-2 gap-2 text-[11px]", children: [
|
|
38940
|
+
/* @__PURE__ */ jsxs55("div", { className: "min-w-0", children: [
|
|
38941
|
+
/* @__PURE__ */ jsx75("div", { className: "text-[var(--text-tertiary)]", children: labels.modelStrengthLabel }),
|
|
38942
|
+
/* @__PURE__ */ jsx75(
|
|
38943
|
+
"div",
|
|
38944
|
+
{
|
|
38945
|
+
className: `truncate text-[13px] font-medium ${previewTone.valueClassName}`,
|
|
38946
|
+
"data-agent-tutti-budget-model-strength": "true",
|
|
38947
|
+
children: modelStrength
|
|
38948
|
+
}
|
|
38949
|
+
)
|
|
38950
|
+
] }),
|
|
38951
|
+
/* @__PURE__ */ jsxs55("div", { className: "min-w-0", children: [
|
|
38952
|
+
/* @__PURE__ */ jsx75("div", { className: "text-[var(--text-tertiary)]", children: labels.agentCountLabel }),
|
|
38953
|
+
/* @__PURE__ */ jsx75(
|
|
38954
|
+
"div",
|
|
38955
|
+
{
|
|
38956
|
+
className: "truncate text-[13px] font-medium text-[var(--text-primary)]",
|
|
38957
|
+
"data-agent-tutti-budget-agent-count": "true",
|
|
38958
|
+
children: agentCount
|
|
38959
|
+
}
|
|
38960
|
+
)
|
|
38961
|
+
] })
|
|
38962
|
+
] }),
|
|
38963
|
+
/* @__PURE__ */ jsx75("p", { className: "mt-2 mb-0 text-[11px] leading-[1.35] text-[var(--text-tertiary)]", children: labels.previewHint })
|
|
38964
|
+
]
|
|
38965
|
+
}
|
|
38966
|
+
)
|
|
38967
|
+
]
|
|
38968
|
+
}
|
|
38969
|
+
)
|
|
38970
|
+
]
|
|
38971
|
+
}
|
|
38972
|
+
);
|
|
38973
|
+
}
|
|
38974
|
+
|
|
38953
38975
|
// agent-gui/agentGuiNode/TuttiWorkflowDock.tsx
|
|
38954
|
-
import { Fragment as Fragment23, jsx as
|
|
38976
|
+
import { Fragment as Fragment23, jsx as jsx76, jsxs as jsxs56 } from "react/jsx-runtime";
|
|
38955
38977
|
function countIssueTasks(issue, status) {
|
|
38956
38978
|
return issue.tasks.filter((task) => task.status === status).length;
|
|
38957
38979
|
}
|
|
@@ -38994,6 +39016,15 @@ function TuttiWorkflowDock({
|
|
|
38994
39016
|
expanded: reviewPanelId !== null,
|
|
38995
39017
|
reviewPanelId
|
|
38996
39018
|
}));
|
|
39019
|
+
const [echoedIntensity, setEchoedIntensity] = useState43(null);
|
|
39020
|
+
if (echoedIntensity !== null && review?.intensity === echoedIntensity) {
|
|
39021
|
+
setEchoedIntensity(null);
|
|
39022
|
+
}
|
|
39023
|
+
const reviewDisplayIntensity = review !== null ? echoedIntensity ?? review.intensity : null;
|
|
39024
|
+
const handleIntensityChange = (value) => {
|
|
39025
|
+
setEchoedIntensity(value);
|
|
39026
|
+
onIntensityChange(value);
|
|
39027
|
+
};
|
|
38997
39028
|
if (reviewPanelId !== null && reviewPanelId !== disclosure.reviewPanelId) {
|
|
38998
39029
|
setDisclosure({ expanded: true, reviewPanelId });
|
|
38999
39030
|
}
|
|
@@ -39004,35 +39035,46 @@ function TuttiWorkflowDock({
|
|
|
39004
39035
|
};
|
|
39005
39036
|
const title = review !== null ? labels.reviewTitle : phase.kind === "materializing" ? labels.materializingTitle : execution !== null ? execution.issue.title : labels.errorTitle;
|
|
39006
39037
|
const summary = review !== null ? `${review.panel.title} \xB7 ${review.intensityDiverged ? labels.reviewHintReplan : labels.reviewHint}` : phase.kind === "materializing" ? `${phase.title} \xB7 ${labels.materializingHint}` : execution !== null ? issueSummary(labels, execution.issue) : failure?.message ?? "";
|
|
39007
|
-
const icon = review !== null ? /* @__PURE__ */
|
|
39008
|
-
const
|
|
39009
|
-
|
|
39038
|
+
const icon = review !== null ? /* @__PURE__ */ jsx76(TaskIcon, { "aria-hidden": true, className: "size-3.5" }) : phase.kind === "materializing" ? /* @__PURE__ */ jsx76(LoaderCircle, { "aria-hidden": true, className: "size-3.5 animate-spin" }) : execution !== null ? countIssueTasks(execution.issue, "running") > 0 ? /* @__PURE__ */ jsx76(LoaderCircle, { "aria-hidden": true, className: "size-3.5 animate-spin" }) : /* @__PURE__ */ jsx76(ListChecks4, { "aria-hidden": true, className: "size-3.5" }) : /* @__PURE__ */ jsx76(AlertTriangle, { "aria-hidden": true, className: "size-3.5" });
|
|
39039
|
+
const reviewTier = reviewDisplayIntensity !== null ? projectTuttiIntensityPreview(reviewDisplayIntensity).tier : null;
|
|
39040
|
+
const reviewTierLabel = reviewTier !== null ? {
|
|
39041
|
+
cost: intensityPopoverLabels.previewCost,
|
|
39042
|
+
balance: intensityPopoverLabels.previewBalance,
|
|
39043
|
+
powerful: intensityPopoverLabels.previewPowerful
|
|
39044
|
+
}[reviewTier] : null;
|
|
39045
|
+
const actions = review !== null ? /* @__PURE__ */ jsxs56(Fragment23, { children: [
|
|
39046
|
+
/* @__PURE__ */ jsx76(
|
|
39010
39047
|
TuttiBudgetPopover,
|
|
39011
39048
|
{
|
|
39012
|
-
intensity: review.intensity,
|
|
39049
|
+
intensity: reviewDisplayIntensity ?? review.intensity,
|
|
39013
39050
|
labels: intensityPopoverLabels,
|
|
39014
|
-
|
|
39015
|
-
children: /* @__PURE__ */
|
|
39051
|
+
onChange: handleIntensityChange,
|
|
39052
|
+
children: /* @__PURE__ */ jsxs56(
|
|
39016
39053
|
"button",
|
|
39017
39054
|
{
|
|
39018
39055
|
type: "button",
|
|
39019
39056
|
disabled: review.submitting,
|
|
39020
39057
|
title: intensityPopoverLabels.title,
|
|
39021
39058
|
"aria-label": intensityPopoverLabels.intensityLabel,
|
|
39059
|
+
"data-agent-tutti-tier": reviewTier ?? void 0,
|
|
39022
39060
|
"data-testid": "agent-gui-tutti-workflow-intensity",
|
|
39023
39061
|
className: cn(
|
|
39024
|
-
"flex items-center gap-1",
|
|
39025
|
-
|
|
39062
|
+
"flex items-center gap-1 rounded-md px-1.5 py-0.5 transition-colors",
|
|
39063
|
+
"hover:bg-[var(--transparency-hover)]",
|
|
39064
|
+
"data-[state=open]:bg-[color-mix(in_srgb,var(--tutti-purple)_12%,transparent)] data-[state=open]:text-[var(--tutti-purple)]"
|
|
39026
39065
|
),
|
|
39027
39066
|
children: [
|
|
39028
|
-
/* @__PURE__ */
|
|
39029
|
-
/* @__PURE__ */
|
|
39067
|
+
/* @__PURE__ */ jsx76(Gauge2, { "aria-hidden": true, className: "size-3.5" }),
|
|
39068
|
+
/* @__PURE__ */ jsxs56("span", { className: "flex items-center gap-0.5", children: [
|
|
39069
|
+
reviewTierLabel !== null ? /* @__PURE__ */ jsx76("span", { className: "text-[11px]", children: reviewTierLabel }) : null,
|
|
39070
|
+
/* @__PURE__ */ jsx76("span", { className: "inline-block w-[3ch] text-left text-[11px] tabular-nums", children: reviewDisplayIntensity ?? review.intensity })
|
|
39071
|
+
] })
|
|
39030
39072
|
]
|
|
39031
39073
|
}
|
|
39032
39074
|
)
|
|
39033
39075
|
}
|
|
39034
39076
|
),
|
|
39035
|
-
/* @__PURE__ */
|
|
39077
|
+
/* @__PURE__ */ jsx76(
|
|
39036
39078
|
"button",
|
|
39037
39079
|
{
|
|
39038
39080
|
type: "button",
|
|
@@ -39041,10 +39083,11 @@ function TuttiWorkflowDock({
|
|
|
39041
39083
|
title: labels.cancel,
|
|
39042
39084
|
"aria-label": labels.cancel,
|
|
39043
39085
|
"data-testid": "agent-gui-tutti-workflow-cancel",
|
|
39044
|
-
|
|
39086
|
+
className: "flex size-5 items-center justify-center rounded-md transition-colors hover:bg-[var(--transparency-hover)]",
|
|
39087
|
+
children: /* @__PURE__ */ jsx76(X7, { "aria-hidden": true, className: "size-3.5" })
|
|
39045
39088
|
}
|
|
39046
39089
|
)
|
|
39047
|
-
] }) : phase.kind === "error" && phase.retryable ? /* @__PURE__ */
|
|
39090
|
+
] }) : phase.kind === "error" && phase.retryable ? /* @__PURE__ */ jsxs56(
|
|
39048
39091
|
"button",
|
|
39049
39092
|
{
|
|
39050
39093
|
type: "button",
|
|
@@ -39053,23 +39096,25 @@ function TuttiWorkflowDock({
|
|
|
39053
39096
|
"aria-label": labels.retry,
|
|
39054
39097
|
"data-testid": "agent-gui-tutti-workflow-retry",
|
|
39055
39098
|
children: [
|
|
39056
|
-
/* @__PURE__ */
|
|
39099
|
+
/* @__PURE__ */ jsx76(RotateCcw, { "aria-hidden": true, className: "size-3.5" }),
|
|
39057
39100
|
labels.retry
|
|
39058
39101
|
]
|
|
39059
39102
|
}
|
|
39060
39103
|
) : null;
|
|
39061
|
-
return /* @__PURE__ */
|
|
39104
|
+
return /* @__PURE__ */ jsx76(
|
|
39062
39105
|
AgentComposerDisclosureCard,
|
|
39063
39106
|
{
|
|
39064
39107
|
actions,
|
|
39108
|
+
bannerClassName: AgentGUIChrome_styles_default.tuttiWorkflowBanner,
|
|
39065
39109
|
expanded: disclosure.expanded,
|
|
39066
39110
|
icon,
|
|
39067
39111
|
labels: { collapse: labels.collapse, expand: labels.expand },
|
|
39112
|
+
panelClassName: AgentGUIChrome_styles_default.tuttiWorkflowPanel,
|
|
39068
39113
|
onExpandedChange: setExpanded,
|
|
39069
39114
|
summary,
|
|
39070
39115
|
testId: "agent-gui-tutti-workflow-dock",
|
|
39071
39116
|
title,
|
|
39072
|
-
children: review !== null ? /* @__PURE__ */
|
|
39117
|
+
children: review !== null ? /* @__PURE__ */ jsx76(
|
|
39073
39118
|
TuttiModePlanPanel,
|
|
39074
39119
|
{
|
|
39075
39120
|
assignmentCatalog,
|
|
@@ -39080,23 +39125,23 @@ function TuttiWorkflowDock({
|
|
|
39080
39125
|
submitting: review.submitting,
|
|
39081
39126
|
onAssignmentDraftChange
|
|
39082
39127
|
}
|
|
39083
|
-
) : phase.kind === "materializing" ? /* @__PURE__ */
|
|
39128
|
+
) : phase.kind === "materializing" ? /* @__PURE__ */ jsxs56(
|
|
39084
39129
|
"div",
|
|
39085
39130
|
{
|
|
39086
39131
|
className: "grid min-h-28 place-items-center gap-2 text-center text-sm text-muted-foreground",
|
|
39087
39132
|
role: "status",
|
|
39088
39133
|
children: [
|
|
39089
|
-
/* @__PURE__ */
|
|
39134
|
+
/* @__PURE__ */ jsx76(
|
|
39090
39135
|
LoaderCircle,
|
|
39091
39136
|
{
|
|
39092
39137
|
"aria-hidden": true,
|
|
39093
39138
|
className: "size-5 animate-spin text-[var(--tutti-purple)]"
|
|
39094
39139
|
}
|
|
39095
39140
|
),
|
|
39096
|
-
/* @__PURE__ */
|
|
39141
|
+
/* @__PURE__ */ jsx76("span", { children: labels.materializingHint })
|
|
39097
39142
|
]
|
|
39098
39143
|
}
|
|
39099
|
-
) : execution !== null ? /* @__PURE__ */
|
|
39144
|
+
) : execution !== null ? /* @__PURE__ */ jsx76(
|
|
39100
39145
|
TuttiPlanIssuePanel,
|
|
39101
39146
|
{
|
|
39102
39147
|
embedded: true,
|
|
@@ -39107,7 +39152,7 @@ function TuttiWorkflowDock({
|
|
|
39107
39152
|
onOpenIssue,
|
|
39108
39153
|
onOpenTask
|
|
39109
39154
|
}
|
|
39110
|
-
) : /* @__PURE__ */
|
|
39155
|
+
) : /* @__PURE__ */ jsx76(
|
|
39111
39156
|
"div",
|
|
39112
39157
|
{
|
|
39113
39158
|
className: "rounded-md border border-[color-mix(in_srgb,var(--state-danger)_45%,transparent)] px-4 py-3 text-sm text-muted-foreground",
|
|
@@ -39120,7 +39165,7 @@ function TuttiWorkflowDock({
|
|
|
39120
39165
|
}
|
|
39121
39166
|
|
|
39122
39167
|
// agent-gui/agentGuiNode/view/AgentGUIBottomDockPane.tsx
|
|
39123
|
-
import { Fragment as Fragment24, jsx as
|
|
39168
|
+
import { Fragment as Fragment24, jsx as jsx77, jsxs as jsxs57 } from "react/jsx-runtime";
|
|
39124
39169
|
var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
|
|
39125
39170
|
bottomDockRef,
|
|
39126
39171
|
showScrollToBottom,
|
|
@@ -39160,11 +39205,11 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
|
|
|
39160
39205
|
const goalIsOptimistic = sessionChrome.rawState?.goalIsOptimistic === true;
|
|
39161
39206
|
const showGoalBanner = isGoalBannerVisible(goalObjective, goalStatus);
|
|
39162
39207
|
const workflowPhase = tuttiWorkflowDock.phase;
|
|
39163
|
-
return /* @__PURE__ */
|
|
39208
|
+
return /* @__PURE__ */ jsx77(
|
|
39164
39209
|
AgentComposerRegion,
|
|
39165
39210
|
{
|
|
39166
39211
|
regionRef: bottomDockRef,
|
|
39167
|
-
floating: showScrollToBottom ? /* @__PURE__ */
|
|
39212
|
+
floating: showScrollToBottom ? /* @__PURE__ */ jsx77(
|
|
39168
39213
|
"button",
|
|
39169
39214
|
{
|
|
39170
39215
|
type: "button",
|
|
@@ -39177,15 +39222,15 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
|
|
|
39177
39222
|
title: scrollToBottomLabel,
|
|
39178
39223
|
onPointerDown: (event) => event.stopPropagation(),
|
|
39179
39224
|
onClick: onScrollToBottom,
|
|
39180
|
-
children: /* @__PURE__ */
|
|
39225
|
+
children: /* @__PURE__ */ jsx77(ChevronsDown, { "aria-hidden": "true", size: 15, strokeWidth: 2.2 })
|
|
39181
39226
|
}
|
|
39182
39227
|
) : null,
|
|
39183
|
-
lifted: bottomDockLiftedPrompt ? /* @__PURE__ */
|
|
39228
|
+
lifted: bottomDockLiftedPrompt ? /* @__PURE__ */ jsx77(
|
|
39184
39229
|
"div",
|
|
39185
39230
|
{
|
|
39186
39231
|
className: AgentGUINode_styles_default.bottomDockPrompt,
|
|
39187
39232
|
"data-testid": "agent-gui-bottom-dock-active-prompt",
|
|
39188
|
-
children: /* @__PURE__ */
|
|
39233
|
+
children: /* @__PURE__ */ jsx77(
|
|
39189
39234
|
AgentInteractivePromptSurface,
|
|
39190
39235
|
{
|
|
39191
39236
|
prompt: bottomDockLiftedPrompt,
|
|
@@ -39200,8 +39245,8 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
|
|
|
39200
39245
|
)
|
|
39201
39246
|
}
|
|
39202
39247
|
) : null,
|
|
39203
|
-
accessories: /* @__PURE__ */
|
|
39204
|
-
inlineNoticeChrome ? /* @__PURE__ */
|
|
39248
|
+
accessories: /* @__PURE__ */ jsxs57(Fragment24, { children: [
|
|
39249
|
+
inlineNoticeChrome ? /* @__PURE__ */ jsx77(
|
|
39205
39250
|
AgentSessionChrome,
|
|
39206
39251
|
{
|
|
39207
39252
|
chrome: inlineNoticeChrome,
|
|
@@ -39213,7 +39258,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
|
|
|
39213
39258
|
labels: chromeLabels
|
|
39214
39259
|
}
|
|
39215
39260
|
) : null,
|
|
39216
|
-
/* @__PURE__ */
|
|
39261
|
+
/* @__PURE__ */ jsx77(
|
|
39217
39262
|
AgentSessionChrome,
|
|
39218
39263
|
{
|
|
39219
39264
|
chrome: sessionChrome,
|
|
@@ -39225,7 +39270,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
|
|
|
39225
39270
|
labels: chromeLabels
|
|
39226
39271
|
}
|
|
39227
39272
|
),
|
|
39228
|
-
showGoalBanner ? /* @__PURE__ */
|
|
39273
|
+
showGoalBanner ? /* @__PURE__ */ jsx77(
|
|
39229
39274
|
AgentGoalBanner,
|
|
39230
39275
|
{
|
|
39231
39276
|
objective: goalObjective,
|
|
@@ -39240,7 +39285,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
|
|
|
39240
39285
|
onClearGoal: () => onGoalControl("clear")
|
|
39241
39286
|
}
|
|
39242
39287
|
) : null,
|
|
39243
|
-
workflowPhase ? /* @__PURE__ */
|
|
39288
|
+
workflowPhase ? /* @__PURE__ */ jsx77(
|
|
39244
39289
|
TuttiWorkflowDock,
|
|
39245
39290
|
{
|
|
39246
39291
|
assignmentCatalog: tuttiWorkflowDock.assignmentCatalog,
|
|
@@ -39260,9 +39305,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
|
|
|
39260
39305
|
agentCountLabel: composerProps.labels.tuttiBudgetAgentCountLabel,
|
|
39261
39306
|
agentCountCost: composerProps.labels.tuttiBudgetAgentCountCost,
|
|
39262
39307
|
agentCountBalance: composerProps.labels.tuttiBudgetAgentCountBalance,
|
|
39263
|
-
agentCountPowerful: composerProps.labels.tuttiBudgetAgentCountPowerful
|
|
39264
|
-
confirm: composerProps.labels.tuttiBudgetConfirm,
|
|
39265
|
-
cancel: composerProps.labels.tuttiBudgetCancel
|
|
39308
|
+
agentCountPowerful: composerProps.labels.tuttiBudgetAgentCountPowerful
|
|
39266
39309
|
},
|
|
39267
39310
|
labels: tuttiWorkflowDockLabels,
|
|
39268
39311
|
phase: workflowPhase,
|
|
@@ -39279,12 +39322,12 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
|
|
|
39279
39322
|
}
|
|
39280
39323
|
) : null
|
|
39281
39324
|
] }),
|
|
39282
|
-
primary: bottomDockReplacementPrompt ? /* @__PURE__ */
|
|
39325
|
+
primary: bottomDockReplacementPrompt ? /* @__PURE__ */ jsx77(
|
|
39283
39326
|
"div",
|
|
39284
39327
|
{
|
|
39285
39328
|
className: AgentGUINode_styles_default.bottomDockPrompt,
|
|
39286
39329
|
"data-testid": "agent-gui-bottom-dock-active-prompt",
|
|
39287
|
-
children: /* @__PURE__ */
|
|
39330
|
+
children: /* @__PURE__ */ jsx77(
|
|
39288
39331
|
AgentInteractivePromptSurface,
|
|
39289
39332
|
{
|
|
39290
39333
|
prompt: bottomDockReplacementPrompt,
|
|
@@ -39298,7 +39341,7 @@ var AgentGUIBottomDockPane = memo10(function AgentGUIBottomDockPane2({
|
|
|
39298
39341
|
}
|
|
39299
39342
|
)
|
|
39300
39343
|
}
|
|
39301
|
-
) : /* @__PURE__ */
|
|
39344
|
+
) : /* @__PURE__ */ jsx77(AgentComposer, { ...composerProps })
|
|
39302
39345
|
}
|
|
39303
39346
|
);
|
|
39304
39347
|
});
|
|
@@ -39311,14 +39354,14 @@ import {
|
|
|
39311
39354
|
ToastTitle,
|
|
39312
39355
|
ToastViewport
|
|
39313
39356
|
} from "@tutti-os/ui-system";
|
|
39314
|
-
import { jsx as
|
|
39357
|
+
import { jsx as jsx78, jsxs as jsxs58 } from "react/jsx-runtime";
|
|
39315
39358
|
function AgentGUIContentToast({
|
|
39316
39359
|
insetTopPx,
|
|
39317
39360
|
message
|
|
39318
39361
|
}) {
|
|
39319
39362
|
const [open, setOpen] = useState44(true);
|
|
39320
|
-
return /* @__PURE__ */
|
|
39321
|
-
/* @__PURE__ */
|
|
39363
|
+
return /* @__PURE__ */ jsxs58(ToastProvider, { children: [
|
|
39364
|
+
/* @__PURE__ */ jsx78(
|
|
39322
39365
|
ToastRoot,
|
|
39323
39366
|
{
|
|
39324
39367
|
open,
|
|
@@ -39326,10 +39369,10 @@ function AgentGUIContentToast({
|
|
|
39326
39369
|
"data-testid": "agent-gui-content-toast",
|
|
39327
39370
|
variant: "default",
|
|
39328
39371
|
onOpenChange: setOpen,
|
|
39329
|
-
children: /* @__PURE__ */
|
|
39372
|
+
children: /* @__PURE__ */ jsx78(ToastTitle, { children: message })
|
|
39330
39373
|
}
|
|
39331
39374
|
),
|
|
39332
|
-
/* @__PURE__ */
|
|
39375
|
+
/* @__PURE__ */ jsx78(
|
|
39333
39376
|
ToastViewport,
|
|
39334
39377
|
{
|
|
39335
39378
|
className: "nodrag tsh-desktop-no-drag absolute left-0 w-full translate-x-0 px-4 [-webkit-app-region:no-drag]",
|
|
@@ -39348,7 +39391,7 @@ import { ScrollArea as ScrollArea3 } from "@tutti-os/ui-system/components";
|
|
|
39348
39391
|
|
|
39349
39392
|
// agent-gui/agentGuiNode/view/AgentGUIConversationTimelinePane.tsx
|
|
39350
39393
|
import { memo as memo11 } from "react";
|
|
39351
|
-
import { Fragment as Fragment25, jsx as
|
|
39394
|
+
import { Fragment as Fragment25, jsx as jsx79, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
39352
39395
|
var EMPTY_WORKSPACE_APP_ICONS3 = [];
|
|
39353
39396
|
var AgentGUIConversationTimelinePane = memo11(
|
|
39354
39397
|
function AgentGUIConversationTimelinePane2({
|
|
@@ -39368,17 +39411,17 @@ var AgentGUIConversationTimelinePane = memo11(
|
|
|
39368
39411
|
labels
|
|
39369
39412
|
}) {
|
|
39370
39413
|
"use memo";
|
|
39371
|
-
return /* @__PURE__ */
|
|
39372
|
-
isLoadingOlderMessages && !isLoading ? /* @__PURE__ */
|
|
39414
|
+
return /* @__PURE__ */ jsxs59(Fragment25, { children: [
|
|
39415
|
+
isLoadingOlderMessages && !isLoading ? /* @__PURE__ */ jsx79(
|
|
39373
39416
|
"div",
|
|
39374
39417
|
{
|
|
39375
39418
|
className: "mx-auto flex h-8 items-center justify-center text-[12px] text-[var(--text-secondary)]",
|
|
39376
39419
|
"data-testid": "agent-gui-older-messages-loading",
|
|
39377
39420
|
role: "status",
|
|
39378
|
-
children: /* @__PURE__ */
|
|
39421
|
+
children: /* @__PURE__ */ jsx79("span", { className: "tsh-inline-loading-ellipsis", children: loadingLabel })
|
|
39379
39422
|
}
|
|
39380
39423
|
) : null,
|
|
39381
|
-
/* @__PURE__ */
|
|
39424
|
+
/* @__PURE__ */ jsx79(
|
|
39382
39425
|
AgentConversationFlow,
|
|
39383
39426
|
{
|
|
39384
39427
|
conversation,
|
|
@@ -39415,7 +39458,7 @@ function setTimelineScrollTopWithUserTransition(element, top) {
|
|
|
39415
39458
|
}
|
|
39416
39459
|
|
|
39417
39460
|
// agent-gui/agentGuiNode/view/AgentGUIDetailTimeline.tsx
|
|
39418
|
-
import { jsx as
|
|
39461
|
+
import { jsx as jsx80 } from "react/jsx-runtime";
|
|
39419
39462
|
var TIMELINE_CONTENT_STYLE = {
|
|
39420
39463
|
width: "100%",
|
|
39421
39464
|
minWidth: "100%",
|
|
@@ -39443,7 +39486,7 @@ var AgentGUIDetailTimeline = memo12(function AgentGUIDetailTimeline2({
|
|
|
39443
39486
|
workspaceAppIcons
|
|
39444
39487
|
}) {
|
|
39445
39488
|
"use memo";
|
|
39446
|
-
return /* @__PURE__ */
|
|
39489
|
+
return /* @__PURE__ */ jsx80(
|
|
39447
39490
|
ScrollArea3,
|
|
39448
39491
|
{
|
|
39449
39492
|
scrollbarMode: "native",
|
|
@@ -39453,7 +39496,7 @@ var AgentGUIDetailTimeline = memo12(function AgentGUIDetailTimeline2({
|
|
|
39453
39496
|
viewportTestId: "agent-gui-timeline",
|
|
39454
39497
|
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(),
|
|
39455
39498
|
viewportContentStyle: TIMELINE_CONTENT_STYLE,
|
|
39456
|
-
children: hasActiveConversation ? /* @__PURE__ */
|
|
39499
|
+
children: hasActiveConversation ? /* @__PURE__ */ jsx80(
|
|
39457
39500
|
AgentGUIConversationTimelinePane,
|
|
39458
39501
|
{
|
|
39459
39502
|
conversation,
|
|
@@ -39622,6 +39665,10 @@ function useAgentGUIDetailScroll(input) {
|
|
|
39622
39665
|
}
|
|
39623
39666
|
return;
|
|
39624
39667
|
}
|
|
39668
|
+
if (element.closest(`.${AgentGUINode_styles_default.composerDisclosurePanel}`)) {
|
|
39669
|
+
floatingVisualTop = Math.min(floatingVisualTop, rect.top);
|
|
39670
|
+
return;
|
|
39671
|
+
}
|
|
39625
39672
|
floatingVisualTop = Math.min(floatingVisualTop, rect.top);
|
|
39626
39673
|
timelineVisualTop = Math.min(timelineVisualTop, rect.top);
|
|
39627
39674
|
});
|
|
@@ -39868,10 +39915,10 @@ function useAgentGUIDetailScroll(input) {
|
|
|
39868
39915
|
import { useMemo as useMemo43 } from "react";
|
|
39869
39916
|
|
|
39870
39917
|
// app/renderer/components/icons/UnavailableChatIcon.tsx
|
|
39871
|
-
import { jsx as
|
|
39918
|
+
import { jsx as jsx81 } from "react/jsx-runtime";
|
|
39872
39919
|
function UnavailableChatIcon(props) {
|
|
39873
39920
|
"use memo";
|
|
39874
|
-
return /* @__PURE__ */
|
|
39921
|
+
return /* @__PURE__ */ jsx81(
|
|
39875
39922
|
"svg",
|
|
39876
39923
|
{
|
|
39877
39924
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -39879,7 +39926,7 @@ function UnavailableChatIcon(props) {
|
|
|
39879
39926
|
fill: "currentColor",
|
|
39880
39927
|
"aria-hidden": true,
|
|
39881
39928
|
...props,
|
|
39882
|
-
children: /* @__PURE__ */
|
|
39929
|
+
children: /* @__PURE__ */ jsx81("path", { d: "M20.833 2.125C21.6507 2.125 22.4355 2.45019 23.0137 3.02832C23.5916 3.60645 23.9159 4.39053 23.916 5.20801V17.708C23.916 18.5257 23.5918 19.3104 23.0137 19.8887C22.4355 20.4668 21.6507 20.792 20.833 20.792H7.1123C6.82516 20.7922 6.5497 20.9063 6.34668 21.1094L4.05273 23.4033C3.80954 23.6464 3.49934 23.8118 3.16211 23.8789C2.82492 23.9459 2.47487 23.9118 2.15723 23.7803C1.83953 23.6486 1.56707 23.4256 1.37598 23.1396C1.18489 22.8536 1.08305 22.5168 1.08301 22.1729V5.20801C1.08309 4.39045 1.40827 3.60647 1.98633 3.02832C2.56441 2.45024 3.3485 2.12517 4.16602 2.125H20.833ZM16.1533 7.80566C15.7628 7.41518 15.1298 7.41527 14.7393 7.80566L12.5 10.0439L10.2607 7.80469C9.87031 7.41464 9.23712 7.41465 8.84668 7.80469C8.45627 8.19509 8.45651 8.8282 8.84668 9.21875L11.0859 11.458L8.84668 13.6982C8.45651 14.0888 8.45627 14.7219 8.84668 15.1123C9.2371 15.5026 9.87024 15.5024 10.2607 15.1123L12.5 12.873L14.7393 15.1113C15.1298 15.5017 15.7628 15.5018 16.1533 15.1113C16.5434 14.7208 16.5436 14.0877 16.1533 13.6973L13.9141 11.458L16.1533 9.21973C16.5437 8.82924 16.5437 8.19616 16.1533 7.80566Z" })
|
|
39883
39930
|
}
|
|
39884
39931
|
);
|
|
39885
39932
|
}
|
|
@@ -39925,7 +39972,7 @@ function useAgentGUITimelineTransition(input) {
|
|
|
39925
39972
|
}
|
|
39926
39973
|
|
|
39927
39974
|
// agent-gui/agentGuiNode/view/useAgentGUIDetailModel.tsx
|
|
39928
|
-
import { Fragment as Fragment26, jsx as
|
|
39975
|
+
import { Fragment as Fragment26, jsx as jsx82, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
39929
39976
|
function resolveTuttiModeUpdateInlineNotice(input) {
|
|
39930
39977
|
if (input.status !== "failed" && input.status !== "uncertain") return null;
|
|
39931
39978
|
const localizedMessage = input.status === "failed" ? input.failedMessage : input.uncertainMessage;
|
|
@@ -40081,7 +40128,17 @@ function useAgentGUIDetailModel(input) {
|
|
|
40081
40128
|
const hasNonRetryableRecoveryFailure = sessionChrome.recovery?.kind === "failed" && sessionChrome.recovery.canRetry === false || sessionChrome.recovery?.kind === "resume-unavailable";
|
|
40082
40129
|
const runtimeBlocked = viewModel.readiness.sessionRuntimeBlocked || viewModel.readiness.targetConnectionBlocked;
|
|
40083
40130
|
const submitDisabled = hasNonRetryableRecoveryFailure || isCollaboratorConversation || runtimeBlocked || !viewModel.composer.canSubmit && !canQueueWhileBusy;
|
|
40084
|
-
const composerDisabled =
|
|
40131
|
+
const composerDisabled = resolveAgentGUIComposerDisabled({
|
|
40132
|
+
canQueueWhileBusy,
|
|
40133
|
+
hasNonRetryableRecoveryFailure,
|
|
40134
|
+
isCollaboratorConversation,
|
|
40135
|
+
isCreatingConversation: viewModel.composer.isCreatingConversation,
|
|
40136
|
+
isInterrupting: viewModel.composer.isInterrupting,
|
|
40137
|
+
isSubmitting: viewModel.composer.isSubmitting,
|
|
40138
|
+
pendingApproval: viewModel.interaction.pendingApproval !== null,
|
|
40139
|
+
pendingInteractivePrompt: viewModel.interaction.pendingInteractivePrompt !== null,
|
|
40140
|
+
runtimeBlocked
|
|
40141
|
+
});
|
|
40085
40142
|
const stopControl = resolveAgentGUIStopControl({
|
|
40086
40143
|
hasPendingApproval: viewModel.interaction.pendingApproval !== null,
|
|
40087
40144
|
hasPendingInteractivePrompt: viewModel.interaction.pendingInteractivePrompt !== null,
|
|
@@ -40113,17 +40170,17 @@ function useAgentGUIDetailModel(input) {
|
|
|
40113
40170
|
]
|
|
40114
40171
|
);
|
|
40115
40172
|
const conversationFlowEmpty = useMemo43(
|
|
40116
|
-
() => showUnavailableChatEmpty ? /* @__PURE__ */
|
|
40173
|
+
() => showUnavailableChatEmpty ? /* @__PURE__ */ jsxs60(
|
|
40117
40174
|
"div",
|
|
40118
40175
|
{
|
|
40119
40176
|
className: AgentGUINode_styles_default.unavailableChatEmpty,
|
|
40120
40177
|
"data-testid": "agent-gui-unavailable-chat-empty",
|
|
40121
40178
|
children: [
|
|
40122
|
-
/* @__PURE__ */
|
|
40123
|
-
/* @__PURE__ */
|
|
40179
|
+
/* @__PURE__ */ jsx82(UnavailableChatIcon, { className: AgentGUINode_styles_default.unavailableChatEmptyIcon }),
|
|
40180
|
+
/* @__PURE__ */ jsx82("span", { className: AgentGUINode_styles_default.unavailableChatEmptyText, children: labels.conversationUnavailable })
|
|
40124
40181
|
]
|
|
40125
40182
|
}
|
|
40126
|
-
) : /* @__PURE__ */
|
|
40183
|
+
) : /* @__PURE__ */ jsx82(Fragment26, {}),
|
|
40127
40184
|
[labels.conversationUnavailable, showUnavailableChatEmpty]
|
|
40128
40185
|
);
|
|
40129
40186
|
const chromeLabels = useMemo43(
|
|
@@ -40273,8 +40330,6 @@ function useAgentGUIDetailModel(input) {
|
|
|
40273
40330
|
tuttiBudgetAgentCountCost: labels.tuttiBudgetAgentCountCost,
|
|
40274
40331
|
tuttiBudgetAgentCountBalance: labels.tuttiBudgetAgentCountBalance,
|
|
40275
40332
|
tuttiBudgetAgentCountPowerful: labels.tuttiBudgetAgentCountPowerful,
|
|
40276
|
-
tuttiBudgetConfirm: labels.tuttiBudgetConfirm,
|
|
40277
|
-
tuttiBudgetCancel: labels.tuttiBudgetCancel,
|
|
40278
40333
|
planModeDescription: labels.planModeDescription,
|
|
40279
40334
|
planModeOnLabel: labels.planModeOnLabel,
|
|
40280
40335
|
planModeOffLabel: labels.planModeOffLabel,
|
|
@@ -40432,8 +40487,6 @@ function useAgentGUIDetailModel(input) {
|
|
|
40432
40487
|
labels.tuttiBudgetAgentCountCost,
|
|
40433
40488
|
labels.tuttiBudgetAgentCountBalance,
|
|
40434
40489
|
labels.tuttiBudgetAgentCountPowerful,
|
|
40435
|
-
labels.tuttiBudgetConfirm,
|
|
40436
|
-
labels.tuttiBudgetCancel,
|
|
40437
40490
|
labels.planModeDescription,
|
|
40438
40491
|
labels.planModeOffLabel,
|
|
40439
40492
|
labels.planModeOnLabel,
|
|
@@ -40794,7 +40847,7 @@ function useAgentGUITuttiWorkflow(input) {
|
|
|
40794
40847
|
}
|
|
40795
40848
|
|
|
40796
40849
|
// agent-gui/agentGuiNode/view/AgentGUIDetailPane.tsx
|
|
40797
|
-
import { Fragment as Fragment27, jsx as
|
|
40850
|
+
import { Fragment as Fragment27, jsx as jsx83, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
40798
40851
|
var EMPTY_WORKSPACE_APP_ICONS4 = [];
|
|
40799
40852
|
var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
|
|
40800
40853
|
shell,
|
|
@@ -41124,7 +41177,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
|
|
|
41124
41177
|
onSettingsChange: updateComposerSettings,
|
|
41125
41178
|
onRetryComposerOptions: retryComposerOptions,
|
|
41126
41179
|
// Only wire Tutti Mode callbacks when the host explicitly enables the
|
|
41127
|
-
// capability.
|
|
41180
|
+
// capability. Composer footer chip keys off callback presence; slash/badge
|
|
41128
41181
|
// use capabilityMenuState.tuttiMode.enabled === true (fail closed).
|
|
41129
41182
|
onTuttiModeChange: capabilityMenuState?.tuttiMode?.enabled === true ? tuttiWorkflowComposer.setTuttiModeActiveAndSettleReview : void 0,
|
|
41130
41183
|
onTuttiModeOrchestrationIntensityChange: capabilityMenuState?.tuttiMode?.enabled === true ? setTuttiModeOrchestrationIntensity : void 0,
|
|
@@ -41287,7 +41340,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
|
|
|
41287
41340
|
timelineScrollAnchorRef,
|
|
41288
41341
|
viewModel
|
|
41289
41342
|
});
|
|
41290
|
-
const homeContent = !hasActiveConversation ? shouldRenderProviderUnavailableState && disabledProviderTarget ? /* @__PURE__ */
|
|
41343
|
+
const homeContent = !hasActiveConversation ? shouldRenderProviderUnavailableState && disabledProviderTarget ? /* @__PURE__ */ jsx83(Fragment27, { children: renderProviderUnavailableState?.({
|
|
41291
41344
|
provider: disabledProviderTarget.provider,
|
|
41292
41345
|
providerLabel: labels.emptyProviderForProvider?.(
|
|
41293
41346
|
disabledProviderTarget.provider
|
|
@@ -41297,7 +41350,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
|
|
|
41297
41350
|
target: disabledProviderTarget,
|
|
41298
41351
|
iconUrl: resolveAgentGUIHeroIconUrl2(disabledProviderTarget.provider),
|
|
41299
41352
|
unavailableReason: disabledProviderTarget.unavailableReason ?? null
|
|
41300
|
-
}) }) : /* @__PURE__ */
|
|
41353
|
+
}) }) : /* @__PURE__ */ jsx83(
|
|
41301
41354
|
AgentGUIEmptyHomePane,
|
|
41302
41355
|
{
|
|
41303
41356
|
provider: emptyHeroProvider,
|
|
@@ -41322,14 +41375,14 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
|
|
|
41322
41375
|
onSelectSuggestionAction: handleHomeSuggestionAction
|
|
41323
41376
|
}
|
|
41324
41377
|
) : null;
|
|
41325
|
-
return /* @__PURE__ */
|
|
41378
|
+
return /* @__PURE__ */ jsxs61(
|
|
41326
41379
|
"main",
|
|
41327
41380
|
{
|
|
41328
41381
|
className: AgentGUINode_styles_default.detail,
|
|
41329
41382
|
"aria-busy": timelineInteractionLocked || void 0,
|
|
41330
41383
|
inert: timelineInteractionLocked,
|
|
41331
41384
|
children: [
|
|
41332
|
-
viewModel.operations.goalClearNoticeSequence > 0 ? /* @__PURE__ */
|
|
41385
|
+
viewModel.operations.goalClearNoticeSequence > 0 ? /* @__PURE__ */ jsx83(
|
|
41333
41386
|
AgentGUIContentToast,
|
|
41334
41387
|
{
|
|
41335
41388
|
insetTopPx: 16,
|
|
@@ -41337,7 +41390,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
|
|
|
41337
41390
|
},
|
|
41338
41391
|
viewModel.operations.goalClearNoticeSequence
|
|
41339
41392
|
) : null,
|
|
41340
|
-
/* @__PURE__ */
|
|
41393
|
+
/* @__PURE__ */ jsx83(
|
|
41341
41394
|
AgentGUIDetailTimeline,
|
|
41342
41395
|
{
|
|
41343
41396
|
availableSkills: viewModel.composer.availableSkills,
|
|
@@ -41359,7 +41412,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
|
|
|
41359
41412
|
workspaceAppIcons
|
|
41360
41413
|
}
|
|
41361
41414
|
),
|
|
41362
|
-
hasActiveConversation ? /* @__PURE__ */
|
|
41415
|
+
hasActiveConversation ? /* @__PURE__ */ jsx83(
|
|
41363
41416
|
AgentGUIBottomDockPane,
|
|
41364
41417
|
{
|
|
41365
41418
|
bottomDockRef,
|
|
@@ -41398,7 +41451,7 @@ var AgentGUIDetailPane = memo13(function AgentGUIDetailPane2({
|
|
|
41398
41451
|
// agent-gui/agentGuiNode/view/AgentGUIRenameConversationDialog.tsx
|
|
41399
41452
|
import { memo as memo14, useCallback as useCallback62, useEffect as useEffect36, useRef as useRef54, useState as useState49 } from "react";
|
|
41400
41453
|
import { ConfirmationDialog as ConfirmationDialog4, Input as Input4 } from "@tutti-os/ui-system";
|
|
41401
|
-
import { jsx as
|
|
41454
|
+
import { jsx as jsx84, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
41402
41455
|
var AgentGUIRenameConversationDialog = memo14(
|
|
41403
41456
|
function AgentGUIRenameConversationDialog2({
|
|
41404
41457
|
conversation,
|
|
@@ -41454,7 +41507,7 @@ var AgentGUIRenameConversationDialog = memo14(
|
|
|
41454
41507
|
setIsSaving(false);
|
|
41455
41508
|
});
|
|
41456
41509
|
}, [conversation, onOpenChange, onRename, trimmedTitle]);
|
|
41457
|
-
return /* @__PURE__ */
|
|
41510
|
+
return /* @__PURE__ */ jsx84(
|
|
41458
41511
|
ConfirmationDialog4,
|
|
41459
41512
|
{
|
|
41460
41513
|
cancelLabel: labels.cancel,
|
|
@@ -41463,8 +41516,8 @@ var AgentGUIRenameConversationDialog = memo14(
|
|
|
41463
41516
|
confirmDisabled: !trimmedTitle,
|
|
41464
41517
|
confirmLabel: labels.renameSessionSave,
|
|
41465
41518
|
description: labels.renameSessionDescription,
|
|
41466
|
-
footer: /* @__PURE__ */
|
|
41467
|
-
/* @__PURE__ */
|
|
41519
|
+
footer: /* @__PURE__ */ jsxs62("div", { className: "flex justify-end gap-2", children: [
|
|
41520
|
+
/* @__PURE__ */ jsx84(
|
|
41468
41521
|
Button,
|
|
41469
41522
|
{
|
|
41470
41523
|
disabled: isSaving,
|
|
@@ -41502,7 +41555,7 @@ var AgentGUIRenameConversationDialog = memo14(
|
|
|
41502
41555
|
children: labels.cancel
|
|
41503
41556
|
}
|
|
41504
41557
|
),
|
|
41505
|
-
/* @__PURE__ */
|
|
41558
|
+
/* @__PURE__ */ jsx84(
|
|
41506
41559
|
Button,
|
|
41507
41560
|
{
|
|
41508
41561
|
className: "shadow-none",
|
|
@@ -41557,7 +41610,7 @@ var AgentGUIRenameConversationDialog = memo14(
|
|
|
41557
41610
|
title: labels.renameSessionTitle,
|
|
41558
41611
|
onConfirm: confirmRename,
|
|
41559
41612
|
onOpenChange,
|
|
41560
|
-
children: /* @__PURE__ */
|
|
41613
|
+
children: /* @__PURE__ */ jsx84(
|
|
41561
41614
|
Input4,
|
|
41562
41615
|
{
|
|
41563
41616
|
ref: inputRef,
|
|
@@ -41585,7 +41638,7 @@ import {
|
|
|
41585
41638
|
ReferenceSourcePicker,
|
|
41586
41639
|
WorkspaceFileReferencePicker
|
|
41587
41640
|
} from "@tutti-os/workspace-file-reference/ui";
|
|
41588
|
-
import { jsx as
|
|
41641
|
+
import { jsx as jsx85 } from "react/jsx-runtime";
|
|
41589
41642
|
function AgentGUIReferencePickerSurface({
|
|
41590
41643
|
aggregator,
|
|
41591
41644
|
copy,
|
|
@@ -41603,7 +41656,7 @@ function AgentGUIReferencePickerSurface({
|
|
|
41603
41656
|
onConfirm,
|
|
41604
41657
|
onConfirmBundles
|
|
41605
41658
|
}) {
|
|
41606
|
-
return aggregator ? /* @__PURE__ */
|
|
41659
|
+
return aggregator ? /* @__PURE__ */ jsx85(
|
|
41607
41660
|
ReferenceSourcePicker,
|
|
41608
41661
|
{
|
|
41609
41662
|
aggregator,
|
|
@@ -41620,7 +41673,7 @@ function AgentGUIReferencePickerSurface({
|
|
|
41620
41673
|
onConfirm,
|
|
41621
41674
|
onConfirmBundles
|
|
41622
41675
|
}
|
|
41623
|
-
) : /* @__PURE__ */
|
|
41676
|
+
) : /* @__PURE__ */ jsx85(
|
|
41624
41677
|
WorkspaceFileReferencePicker,
|
|
41625
41678
|
{
|
|
41626
41679
|
copy,
|
|
@@ -41637,7 +41690,7 @@ function AgentGUIReferencePickerSurface({
|
|
|
41637
41690
|
|
|
41638
41691
|
// agent-gui/agentGuiNode/view/AgentTargetSetupRoot.tsx
|
|
41639
41692
|
import { useCallback as useCallback63, useMemo as useMemo45 } from "react";
|
|
41640
|
-
import { jsx as
|
|
41693
|
+
import { jsx as jsx86, jsxs as jsxs63 } from "react/jsx-runtime";
|
|
41641
41694
|
function useAgentTargetSetupRoot(input) {
|
|
41642
41695
|
const { preferences } = useAgentGUIProviderRailPreferences();
|
|
41643
41696
|
const homeTargetProjection = useMemo45(
|
|
@@ -41681,9 +41734,9 @@ function AgentTargetSetupRoot({
|
|
|
41681
41734
|
controller,
|
|
41682
41735
|
openEnvironmentSetup
|
|
41683
41736
|
}) {
|
|
41684
|
-
return /* @__PURE__ */
|
|
41737
|
+
return /* @__PURE__ */ jsx86(AgentEnvPanelActionProvider, { openPanel: openEnvironmentSetup, children: /* @__PURE__ */ jsxs63(AgentTargetSetupControllerProvider, { controller, children: [
|
|
41685
41738
|
children,
|
|
41686
|
-
/* @__PURE__ */
|
|
41739
|
+
/* @__PURE__ */ jsx86(
|
|
41687
41740
|
AgentTargetSetupGate,
|
|
41688
41741
|
{
|
|
41689
41742
|
carouselMountedExternally: false,
|
|
@@ -42246,7 +42299,7 @@ function useAgentGUIExternalRequests(input) {
|
|
|
42246
42299
|
}
|
|
42247
42300
|
|
|
42248
42301
|
// agent-gui/agentGuiNode/AgentGUINodeView.tsx
|
|
42249
|
-
import { jsx as
|
|
42302
|
+
import { jsx as jsx87, jsxs as jsxs64 } from "react/jsx-runtime";
|
|
42250
42303
|
function AgentGUINodeView({
|
|
42251
42304
|
viewModel,
|
|
42252
42305
|
referenceProvenanceFilter = null,
|
|
@@ -42676,13 +42729,13 @@ function AgentGUINodeView({
|
|
|
42676
42729
|
}),
|
|
42677
42730
|
[targetPresentationKey, viewModel.shell.workspaceId]
|
|
42678
42731
|
);
|
|
42679
|
-
const content = /* @__PURE__ */
|
|
42732
|
+
const content = /* @__PURE__ */ jsx87(AgentTargetPresentationProvider, { agentTargets: agentTargetPresentations, children: /* @__PURE__ */ jsxs64(
|
|
42680
42733
|
AgentTargetSetupRoot,
|
|
42681
42734
|
{
|
|
42682
42735
|
controller: targetSetupController,
|
|
42683
42736
|
openEnvironmentSetup: onAgentEnvPanelOpen,
|
|
42684
42737
|
children: [
|
|
42685
|
-
/* @__PURE__ */
|
|
42738
|
+
/* @__PURE__ */ jsxs64(
|
|
42686
42739
|
"div",
|
|
42687
42740
|
{
|
|
42688
42741
|
ref: layoutElementRef,
|
|
@@ -42692,7 +42745,7 @@ function AgentGUINodeView({
|
|
|
42692
42745
|
inert: previewMode ? true : void 0,
|
|
42693
42746
|
style: layoutStyle,
|
|
42694
42747
|
children: [
|
|
42695
|
-
/* @__PURE__ */
|
|
42748
|
+
/* @__PURE__ */ jsxs64(
|
|
42696
42749
|
"aside",
|
|
42697
42750
|
{
|
|
42698
42751
|
className: `${AgentGUINode_styles_default.providerRailPanel} nodrag tsh-desktop-no-drag`,
|
|
@@ -42700,7 +42753,7 @@ function AgentGUINodeView({
|
|
|
42700
42753
|
"aria-hidden": conversationRailCollapsed ? "true" : void 0,
|
|
42701
42754
|
inert: conversationRailCollapsed ? true : void 0,
|
|
42702
42755
|
children: [
|
|
42703
|
-
/* @__PURE__ */
|
|
42756
|
+
/* @__PURE__ */ jsx87(
|
|
42704
42757
|
AgentGUIProviderRail,
|
|
42705
42758
|
{
|
|
42706
42759
|
activeConversation: viewModel.rail.activeConversation,
|
|
@@ -42724,7 +42777,7 @@ function AgentGUINodeView({
|
|
|
42724
42777
|
onRequestComposerFocus: requestComposerFocus
|
|
42725
42778
|
}
|
|
42726
42779
|
),
|
|
42727
|
-
renderSidebarFooter ? /* @__PURE__ */
|
|
42780
|
+
renderSidebarFooter ? /* @__PURE__ */ jsx87(
|
|
42728
42781
|
"div",
|
|
42729
42782
|
{
|
|
42730
42783
|
className: `${AgentGUINode_styles_default.providerRailFooter} ${AgentGUINode_styles_default.providerRailSidebarFooter} nodrag tsh-desktop-no-drag`,
|
|
@@ -42735,12 +42788,12 @@ function AgentGUINodeView({
|
|
|
42735
42788
|
})
|
|
42736
42789
|
}
|
|
42737
42790
|
) : null,
|
|
42738
|
-
shouldShowProviderRailConfigButton ? /* @__PURE__ */
|
|
42791
|
+
shouldShowProviderRailConfigButton ? /* @__PURE__ */ jsx87(
|
|
42739
42792
|
"div",
|
|
42740
42793
|
{
|
|
42741
42794
|
className: `${AgentGUINode_styles_default.providerRailFooter} ${AgentGUINode_styles_default.providerRailConfigFooter} nodrag tsh-desktop-no-drag`,
|
|
42742
42795
|
"data-testid": "agent-gui-config-footer",
|
|
42743
|
-
children: /* @__PURE__ */
|
|
42796
|
+
children: /* @__PURE__ */ jsx87(
|
|
42744
42797
|
AgentGUIConfigMenu,
|
|
42745
42798
|
{
|
|
42746
42799
|
environmentSetupVisible,
|
|
@@ -42767,14 +42820,14 @@ function AgentGUINodeView({
|
|
|
42767
42820
|
]
|
|
42768
42821
|
}
|
|
42769
42822
|
),
|
|
42770
|
-
/* @__PURE__ */
|
|
42823
|
+
/* @__PURE__ */ jsx87(
|
|
42771
42824
|
"aside",
|
|
42772
42825
|
{
|
|
42773
42826
|
id: "agent-gui-conversation-rail",
|
|
42774
42827
|
className: `${AgentGUINode_styles_default.railPanel}${conversationRailCollapsed ? ` ${AgentGUINode_styles_default.railPanelCollapsed}` : ""}`,
|
|
42775
42828
|
"aria-hidden": conversationRailCollapsed ? "true" : void 0,
|
|
42776
42829
|
inert: conversationRailCollapsed ? true : void 0,
|
|
42777
|
-
children: /* @__PURE__ */
|
|
42830
|
+
children: /* @__PURE__ */ jsx87(
|
|
42778
42831
|
AgentGUIConversationRailController,
|
|
42779
42832
|
{
|
|
42780
42833
|
...conversationRailStoreState,
|
|
@@ -42783,7 +42836,7 @@ function AgentGUINodeView({
|
|
|
42783
42836
|
registerInteractionLockProbe: registerRailInteractionLockProbe,
|
|
42784
42837
|
userProjects: viewModel.rail.userProjects,
|
|
42785
42838
|
workspaceId: viewModel.shell.workspaceId,
|
|
42786
|
-
footer: accountMenuState?.user ? /* @__PURE__ */
|
|
42839
|
+
footer: accountMenuState?.user ? /* @__PURE__ */ jsx87(
|
|
42787
42840
|
AgentGUIAccountRailMenu,
|
|
42788
42841
|
{
|
|
42789
42842
|
accountMenuState,
|
|
@@ -42795,7 +42848,7 @@ function AgentGUINodeView({
|
|
|
42795
42848
|
)
|
|
42796
42849
|
}
|
|
42797
42850
|
),
|
|
42798
|
-
/* @__PURE__ */
|
|
42851
|
+
/* @__PURE__ */ jsx87(
|
|
42799
42852
|
"div",
|
|
42800
42853
|
{
|
|
42801
42854
|
id: "agent-gui-conversation-rail-resize",
|
|
@@ -42819,7 +42872,7 @@ function AgentGUINodeView({
|
|
|
42819
42872
|
onPointerUp: endConversationRailResize
|
|
42820
42873
|
}
|
|
42821
42874
|
),
|
|
42822
|
-
/* @__PURE__ */
|
|
42875
|
+
/* @__PURE__ */ jsx87("section", { id: "agent-gui-detail", className: AgentGUINode_styles_default.detailPanel, children: /* @__PURE__ */ jsx87(
|
|
42823
42876
|
AgentGUIDetailPane,
|
|
42824
42877
|
{
|
|
42825
42878
|
shell: viewModel.shell,
|
|
@@ -42867,7 +42920,7 @@ function AgentGUINodeView({
|
|
|
42867
42920
|
]
|
|
42868
42921
|
}
|
|
42869
42922
|
),
|
|
42870
|
-
/* @__PURE__ */
|
|
42923
|
+
/* @__PURE__ */ jsx87(
|
|
42871
42924
|
AgentGUIReferencePickerSurface,
|
|
42872
42925
|
{
|
|
42873
42926
|
aggregator: workspaceReferencePickerAggregator,
|
|
@@ -42887,7 +42940,7 @@ function AgentGUINodeView({
|
|
|
42887
42940
|
onConfirmBundles: workspaceReferencePickerPurpose === "reference" ? confirmWorkspaceReferenceBundles : void 0
|
|
42888
42941
|
}
|
|
42889
42942
|
),
|
|
42890
|
-
/* @__PURE__ */
|
|
42943
|
+
/* @__PURE__ */ jsx87(
|
|
42891
42944
|
AgentGUIRenameConversationDialog,
|
|
42892
42945
|
{
|
|
42893
42946
|
conversation: renameConversationTarget,
|
|
@@ -42905,7 +42958,7 @@ function AgentGUINodeView({
|
|
|
42905
42958
|
]
|
|
42906
42959
|
}
|
|
42907
42960
|
) });
|
|
42908
|
-
return previewMode ? content : /* @__PURE__ */
|
|
42961
|
+
return previewMode ? content : /* @__PURE__ */ jsx87(TooltipProvider7, { children: content });
|
|
42909
42962
|
}
|
|
42910
42963
|
|
|
42911
42964
|
// agent-gui/workspaceDesktop/view/AgentProbeInfoPopover.tsx
|
|
@@ -42918,7 +42971,7 @@ import {
|
|
|
42918
42971
|
useState as useState52
|
|
42919
42972
|
} from "react";
|
|
42920
42973
|
import { createPortal as createPortal5 } from "react-dom";
|
|
42921
|
-
import { Fragment as Fragment28, jsx as
|
|
42974
|
+
import { Fragment as Fragment28, jsx as jsx88, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
42922
42975
|
var POPOVER_MIN_VIEWPORT_INSET_PX = 16;
|
|
42923
42976
|
var POPOVER_DEFAULT_WIDTH_PX = 260;
|
|
42924
42977
|
function dockAgentProbeLineKey(line) {
|
|
@@ -42928,11 +42981,11 @@ function renderDockAgentProbeLine(line) {
|
|
|
42928
42981
|
if (typeof line === "string") {
|
|
42929
42982
|
return line;
|
|
42930
42983
|
}
|
|
42931
|
-
return /* @__PURE__ */
|
|
42984
|
+
return /* @__PURE__ */ jsxs65(Fragment28, { children: [
|
|
42932
42985
|
line.primary,
|
|
42933
|
-
line.secondary ? /* @__PURE__ */
|
|
42986
|
+
line.secondary ? /* @__PURE__ */ jsxs65(Fragment28, { children: [
|
|
42934
42987
|
" ",
|
|
42935
|
-
/* @__PURE__ */
|
|
42988
|
+
/* @__PURE__ */ jsx88("span", { className: "desktop-dock-popup__agent-status-secondary", children: line.secondary })
|
|
42936
42989
|
] }) : null
|
|
42937
42990
|
] });
|
|
42938
42991
|
}
|
|
@@ -43025,7 +43078,7 @@ function AgentProbeInfoPopover({
|
|
|
43025
43078
|
if (lines.length === 0) {
|
|
43026
43079
|
return null;
|
|
43027
43080
|
}
|
|
43028
|
-
const popover = /* @__PURE__ */
|
|
43081
|
+
const popover = /* @__PURE__ */ jsx88(
|
|
43029
43082
|
"div",
|
|
43030
43083
|
{
|
|
43031
43084
|
ref: popoverRef,
|
|
@@ -43034,17 +43087,17 @@ function AgentProbeInfoPopover({
|
|
|
43034
43087
|
style: popoverStyle ?? void 0,
|
|
43035
43088
|
onMouseEnter: openPopover,
|
|
43036
43089
|
onMouseLeave: closeIfPointerLeavesPopover,
|
|
43037
|
-
children: /* @__PURE__ */
|
|
43090
|
+
children: /* @__PURE__ */ jsx88("ul", { className: "desktop-dock-popup__agent-info-list", children: lines.map((line) => {
|
|
43038
43091
|
const label = getDockAgentProbeLineLabel(line);
|
|
43039
43092
|
const valueText = formatDockAgentProbeLineText(line);
|
|
43040
|
-
return /* @__PURE__ */
|
|
43093
|
+
return /* @__PURE__ */ jsxs65(
|
|
43041
43094
|
"li",
|
|
43042
43095
|
{
|
|
43043
43096
|
className: "desktop-dock-popup__agent-info-item",
|
|
43044
43097
|
"data-has-label": label ? "true" : "false",
|
|
43045
43098
|
children: [
|
|
43046
|
-
label ? /* @__PURE__ */
|
|
43047
|
-
/* @__PURE__ */
|
|
43099
|
+
label ? /* @__PURE__ */ jsx88("span", { className: "desktop-dock-popup__agent-info-label", children: label }) : null,
|
|
43100
|
+
/* @__PURE__ */ jsx88(
|
|
43048
43101
|
"span",
|
|
43049
43102
|
{
|
|
43050
43103
|
className: "desktop-dock-popup__agent-info-value",
|
|
@@ -43059,7 +43112,7 @@ function AgentProbeInfoPopover({
|
|
|
43059
43112
|
}) })
|
|
43060
43113
|
}
|
|
43061
43114
|
);
|
|
43062
|
-
return /* @__PURE__ */
|
|
43115
|
+
return /* @__PURE__ */ jsxs65(
|
|
43063
43116
|
"div",
|
|
43064
43117
|
{
|
|
43065
43118
|
ref: anchorRef,
|
|
@@ -43079,7 +43132,7 @@ function AgentProbeInfoPopover({
|
|
|
43079
43132
|
},
|
|
43080
43133
|
onBlur: closePopover,
|
|
43081
43134
|
children: [
|
|
43082
|
-
/* @__PURE__ */
|
|
43135
|
+
/* @__PURE__ */ jsx88(Info2, { size: 15, strokeWidth: 2.1, "aria-hidden": "true" }),
|
|
43083
43136
|
isOpen ? createPortal5(popover, document.body) : null
|
|
43084
43137
|
]
|
|
43085
43138
|
}
|
|
@@ -43215,7 +43268,7 @@ function composeAgentGUIMentionService(input) {
|
|
|
43215
43268
|
}
|
|
43216
43269
|
|
|
43217
43270
|
// agent-gui/agentGuiNode/AgentGUIMentionServiceBoundary.tsx
|
|
43218
|
-
import { jsx as
|
|
43271
|
+
import { jsx as jsx89 } from "react/jsx-runtime";
|
|
43219
43272
|
function AgentGUIMentionServiceBoundary({
|
|
43220
43273
|
children,
|
|
43221
43274
|
service
|
|
@@ -43231,7 +43284,7 @@ function AgentGUIMentionServiceBoundary({
|
|
|
43231
43284
|
if (!effectiveService || effectiveService === inheritedService) {
|
|
43232
43285
|
return children;
|
|
43233
43286
|
}
|
|
43234
|
-
return /* @__PURE__ */
|
|
43287
|
+
return /* @__PURE__ */ jsx89(RichTextMentionServiceProvider, { service: effectiveService, children });
|
|
43235
43288
|
}
|
|
43236
43289
|
|
|
43237
43290
|
// agent-gui/agentGuiNode/AgentGUINode.labels.ts
|
|
@@ -43594,8 +43647,6 @@ function agentGUITuttiModeLabels(t) {
|
|
|
43594
43647
|
tuttiBudgetAgentCountPowerful: t(
|
|
43595
43648
|
"agentHost.agentGui.tuttiBudgetAgentCountPowerful"
|
|
43596
43649
|
),
|
|
43597
|
-
tuttiBudgetConfirm: t("agentHost.agentGui.tuttiBudgetConfirm"),
|
|
43598
|
-
tuttiBudgetCancel: t("agentHost.agentGui.tuttiBudgetCancel"),
|
|
43599
43650
|
tuttiModeUpdateFailed: t("agentHost.agentGui.tuttiModeUpdateFailed"),
|
|
43600
43651
|
tuttiModeUpdateUncertain: t("agentHost.agentGui.tuttiModeUpdateUncertain"),
|
|
43601
43652
|
tuttiModePlanPanel: {
|
|
@@ -44391,7 +44442,7 @@ function useAgentGUIWorkspaceFileReferenceCopy(t) {
|
|
|
44391
44442
|
}
|
|
44392
44443
|
|
|
44393
44444
|
// agent-gui/agentGuiNode/AgentGUINode.tsx
|
|
44394
|
-
import { jsx as
|
|
44445
|
+
import { jsx as jsx90, jsxs as jsxs66 } from "react/jsx-runtime";
|
|
44395
44446
|
var DISABLED_REFERENCE_PROVENANCE_CATALOG = {
|
|
44396
44447
|
enabledDimensions: [],
|
|
44397
44448
|
agentOptions: [],
|
|
@@ -44706,7 +44757,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
|
|
|
44706
44757
|
t,
|
|
44707
44758
|
viewModel
|
|
44708
44759
|
});
|
|
44709
|
-
return /* @__PURE__ */
|
|
44760
|
+
return /* @__PURE__ */ jsx90(AgentGUIMentionServiceBoundary, { service: mentionService, children: /* @__PURE__ */ jsx90(
|
|
44710
44761
|
WorkspaceNodeWindow,
|
|
44711
44762
|
{
|
|
44712
44763
|
nodeId,
|
|
@@ -44722,8 +44773,8 @@ var AgentGUINode = memo15(function AgentGUINode2({
|
|
|
44722
44773
|
className: "size-full bg-transparent",
|
|
44723
44774
|
bodyClassName: `${AgentGUINode_styles_default.shell} nodrag size-full min-h-0 min-w-0 !bg-transparent p-0`,
|
|
44724
44775
|
hideHeader: embedded,
|
|
44725
|
-
titleAccessory: /* @__PURE__ */
|
|
44726
|
-
/* @__PURE__ */
|
|
44776
|
+
titleAccessory: /* @__PURE__ */ jsxs66("span", { className: "inline-flex flex-none items-center gap-1", children: [
|
|
44777
|
+
/* @__PURE__ */ jsx90(
|
|
44727
44778
|
AgentProbeInfoPopover,
|
|
44728
44779
|
{
|
|
44729
44780
|
lines: agentProbeLines,
|
|
@@ -44733,7 +44784,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
|
|
|
44733
44784
|
onClose: handleAgentProbeInfoClose
|
|
44734
44785
|
}
|
|
44735
44786
|
),
|
|
44736
|
-
/* @__PURE__ */
|
|
44787
|
+
/* @__PURE__ */ jsx90(
|
|
44737
44788
|
CanvasNodeGhostIconButton,
|
|
44738
44789
|
{
|
|
44739
44790
|
"aria-label": isConversationRailCollapsed ? t("agentHost.agentGui.expandConversationRail") : t("agentHost.agentGui.collapseConversationRail"),
|
|
@@ -44745,7 +44796,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
|
|
|
44745
44796
|
event.stopPropagation();
|
|
44746
44797
|
handleConversationRailToggle();
|
|
44747
44798
|
},
|
|
44748
|
-
children: /* @__PURE__ */
|
|
44799
|
+
children: /* @__PURE__ */ jsx90(
|
|
44749
44800
|
CanvasNodePanelLinedIcon,
|
|
44750
44801
|
{
|
|
44751
44802
|
width: 18,
|
|
@@ -44769,7 +44820,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
|
|
|
44769
44820
|
renderedWidth,
|
|
44770
44821
|
railAutoCollapseWidthPx
|
|
44771
44822
|
);
|
|
44772
|
-
return /* @__PURE__ */
|
|
44823
|
+
return /* @__PURE__ */ jsx90(
|
|
44773
44824
|
AgentGUINodeView,
|
|
44774
44825
|
{
|
|
44775
44826
|
viewModel,
|
|
@@ -44852,7 +44903,7 @@ var AgentGUINode = memo15(function AgentGUINode2({
|
|
|
44852
44903
|
}, areAgentGUINodePropsEqual);
|
|
44853
44904
|
|
|
44854
44905
|
// AgentGUI.tsx
|
|
44855
|
-
import { jsx as
|
|
44906
|
+
import { jsx as jsx91 } from "react/jsx-runtime";
|
|
44856
44907
|
var AgentGUI = memo16(function AgentGUI2({
|
|
44857
44908
|
agentActivityRuntime,
|
|
44858
44909
|
agentHostApi,
|
|
@@ -44924,21 +44975,21 @@ var AgentGUI = memo16(function AgentGUI2({
|
|
|
44924
44975
|
hostCapabilities: nodeHostCapabilities,
|
|
44925
44976
|
renderSlots: nodeRenderSlots
|
|
44926
44977
|
};
|
|
44927
|
-
const content = /* @__PURE__ */
|
|
44978
|
+
const content = /* @__PURE__ */ jsx91(AgentGuiI18nProvider, { runtime: i18n, locale, children: /* @__PURE__ */ jsx91(TuttiModePlanReviewRuntimeProvider, { runtime: tuttiModePlanReviewRuntime, children: /* @__PURE__ */ jsx91(
|
|
44928
44979
|
AgentActivityHostProvider,
|
|
44929
44980
|
{
|
|
44930
44981
|
agentActivityRuntime,
|
|
44931
44982
|
agentHostApi,
|
|
44932
|
-
children: /* @__PURE__ */
|
|
44983
|
+
children: /* @__PURE__ */ jsx91(
|
|
44933
44984
|
AgentCommercePresentationProvider,
|
|
44934
44985
|
{
|
|
44935
44986
|
value: props.hostCapabilities?.commercePresentation,
|
|
44936
|
-
children: /* @__PURE__ */
|
|
44987
|
+
children: /* @__PURE__ */ jsx91(AgentGUINode, { ...nodeProps })
|
|
44937
44988
|
}
|
|
44938
44989
|
)
|
|
44939
44990
|
}
|
|
44940
44991
|
) }) });
|
|
44941
|
-
return props.frame.previewMode ? content : /* @__PURE__ */
|
|
44992
|
+
return props.frame.previewMode ? content : /* @__PURE__ */ jsx91(TooltipProvider8, { delayDuration: 120, skipDelayDuration: 0, children: content });
|
|
44942
44993
|
});
|
|
44943
44994
|
|
|
44944
44995
|
export {
|
|
@@ -44958,4 +45009,4 @@ export {
|
|
|
44958
45009
|
AgentHandoffMenu,
|
|
44959
45010
|
AgentGUI
|
|
44960
45011
|
};
|
|
44961
|
-
//# sourceMappingURL=chunk-
|
|
45012
|
+
//# sourceMappingURL=chunk-4IJYTGS2.js.map
|