@tutti-os/agent-gui 0.0.85 → 0.0.86

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +49 -44
  2. package/dist/agent-conversation/index.d.ts +2 -2
  3. package/dist/agent-conversation/index.js +5 -5
  4. package/dist/agent-message-center/index.js +7 -7
  5. package/dist/{agentGuiNodeTypes-CmuJ7VDZ.d.ts → agentGuiNodeTypes-fRobgKiP.d.ts} +1 -5
  6. package/dist/{chunk-A2JPL5N6.js → chunk-3HARXLAZ.js} +2 -2
  7. package/dist/{chunk-BEM3KDOJ.js → chunk-45FF4DQU.js} +17 -281
  8. package/dist/chunk-45FF4DQU.js.map +1 -0
  9. package/dist/{chunk-UNLTQUPO.js → chunk-4SQNOOJ3.js} +4 -4
  10. package/dist/{chunk-FIH7IYLX.js → chunk-7FZT2OYT.js} +4 -4
  11. package/dist/chunk-7FZT2OYT.js.map +1 -0
  12. package/dist/{chunk-L2ZMLLYL.js → chunk-7LMJXF4R.js} +2 -2
  13. package/dist/{chunk-DBIJRSFG.js → chunk-A7RA7ORT.js} +104 -45
  14. package/dist/chunk-A7RA7ORT.js.map +1 -0
  15. package/dist/{chunk-CVPWQHQH.js → chunk-AOVPGJBC.js} +2 -2
  16. package/dist/{chunk-BT2DT2P7.js → chunk-GAPTLVII.js} +1 -1
  17. package/dist/{chunk-BT2DT2P7.js.map → chunk-GAPTLVII.js.map} +1 -1
  18. package/dist/{chunk-3355GEBI.js → chunk-HOSX5C5V.js} +2 -2
  19. package/dist/{chunk-CXJEQQR5.js → chunk-KQE5KV2V.js} +2 -2
  20. package/dist/{chunk-N7EX6XK3.js → chunk-SXDLSEHO.js} +3 -3
  21. package/dist/{chunk-MQ6WW3CD.js → chunk-U7D7G3UU.js} +2 -2
  22. package/dist/{chunk-6YLA7R4S.js → chunk-UNO7CEAF.js} +2 -2
  23. package/dist/{chunk-AA75BOX3.js → chunk-VWXFFSIM.js} +3 -1
  24. package/dist/chunk-VWXFFSIM.js.map +1 -0
  25. package/dist/{chunk-HUNUSBQQ.js → chunk-XQUUELKF.js} +2 -2
  26. package/dist/context-mention-palette/index.js +6 -6
  27. package/dist/i18n/index.d.ts +2 -0
  28. package/dist/i18n/index.js +2 -2
  29. package/dist/index.d.ts +28 -94
  30. package/dist/index.js +479 -445
  31. package/dist/index.js.map +1 -1
  32. package/dist/queued-prompt-runtime.d.ts +2 -2
  33. package/dist/{types-DUHHejs2.d.ts → types-BvztUbHf.d.ts} +31 -21
  34. package/dist/workbench/contribution.d.ts +9 -11
  35. package/dist/workbench/contribution.js +4 -4
  36. package/dist/workbench/index.d.ts +1 -1
  37. package/dist/workbench/index.js +7 -7
  38. package/dist/workbench/launch.d.ts +0 -1
  39. package/dist/workbench/launch.js +2 -2
  40. package/dist/workbench/providerCatalog.d.ts +0 -1
  41. package/dist/workbench/sessionTitle.d.ts +0 -1
  42. package/dist/workbench/sessionTitle.js +3 -3
  43. package/dist/workbench/state.d.ts +7 -2
  44. package/dist/workbench/state.js +3 -1
  45. package/dist/workbench/types.d.ts +0 -6
  46. package/dist/workbench/types.js +1 -1
  47. package/dist/workspace-agent-generated-files.js +3 -3
  48. package/package.json +12 -12
  49. package/dist/chunk-AA75BOX3.js.map +0 -1
  50. package/dist/chunk-BEM3KDOJ.js.map +0 -1
  51. package/dist/chunk-DBIJRSFG.js.map +0 -1
  52. package/dist/chunk-FIH7IYLX.js.map +0 -1
  53. /package/dist/{chunk-A2JPL5N6.js.map → chunk-3HARXLAZ.js.map} +0 -0
  54. /package/dist/{chunk-UNLTQUPO.js.map → chunk-4SQNOOJ3.js.map} +0 -0
  55. /package/dist/{chunk-L2ZMLLYL.js.map → chunk-7LMJXF4R.js.map} +0 -0
  56. /package/dist/{chunk-CVPWQHQH.js.map → chunk-AOVPGJBC.js.map} +0 -0
  57. /package/dist/{chunk-3355GEBI.js.map → chunk-HOSX5C5V.js.map} +0 -0
  58. /package/dist/{chunk-CXJEQQR5.js.map → chunk-KQE5KV2V.js.map} +0 -0
  59. /package/dist/{chunk-N7EX6XK3.js.map → chunk-SXDLSEHO.js.map} +0 -0
  60. /package/dist/{chunk-MQ6WW3CD.js.map → chunk-U7D7G3UU.js.map} +0 -0
  61. /package/dist/{chunk-6YLA7R4S.js.map → chunk-UNO7CEAF.js.map} +0 -0
  62. /package/dist/{chunk-HUNUSBQQ.js.map → chunk-XQUUELKF.js.map} +0 -0
package/dist/index.js CHANGED
@@ -6,33 +6,24 @@ import {
6
6
  agentGuiDockIconUrl,
7
7
  agentGuiDockIconUrls,
8
8
  clampAgentGUIConversationRailWidthPx,
9
+ normalizeAgentGUIAgents,
10
+ projectAgentGUIAgentsToInternalTargets,
9
11
  resolveAgentGUIConversationRailMaxWidthPx,
10
12
  resolveAgentGUIExpandedWindowFrame,
11
13
  resolveAgentGuiSessionProviderFlatIconUrl,
12
14
  resolveNextAgentGUIConversationRailWidthPx,
13
15
  shouldAutoCollapseAgentGUIConversationRail
14
- } from "./chunk-DBIJRSFG.js";
15
- import {
16
- agentGUIDefaultTargetProviders,
17
- agentGUIProviderTargetRefsEqual,
18
- createDisabledPlaceholderAgentGUIProviderTarget,
19
- createLocalAgentGUIProviderTarget,
20
- createLocalAgentGUIProviderTargets,
21
- createSharedAgentGUIProviderTarget,
22
- localAgentGUIAgentTargetId,
23
- localAgentGUIProviderTargetId,
24
- normalizeAgentGUIProviderTargets,
25
- resolveAgentGUIProviderTarget
26
- } from "./chunk-BEM3KDOJ.js";
27
- import "./chunk-L2ZMLLYL.js";
28
- import "./chunk-BT2DT2P7.js";
16
+ } from "./chunk-A7RA7ORT.js";
17
+ import "./chunk-45FF4DQU.js";
18
+ import "./chunk-7LMJXF4R.js";
19
+ import "./chunk-GAPTLVII.js";
29
20
  import {
30
21
  resolveAgentGuiWorkbenchProviderLabel
31
22
  } from "./chunk-XW4CVBUH.js";
32
23
  import {
33
24
  AgentInteractivePromptSurface,
34
25
  approvalOptionDisplayLabel
35
- } from "./chunk-N7EX6XK3.js";
26
+ } from "./chunk-SXDLSEHO.js";
36
27
  import {
37
28
  PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
38
29
  PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,
@@ -51,7 +42,7 @@ import {
51
42
  resolveAgentGUIExplicitConversationTitle,
52
43
  resolveAgentGUIProviderDisplayLabel,
53
44
  resolveAgentGUIProviderIdentity
54
- } from "./chunk-3355GEBI.js";
45
+ } from "./chunk-HOSX5C5V.js";
55
46
  import {
56
47
  AGENT_PASTED_TEXT_BLOCK_KIND,
57
48
  AGENT_PASTED_TEXT_MENTION_KIND,
@@ -88,14 +79,14 @@ import {
88
79
  textPromptContent,
89
80
  toLocalShortDateTime,
90
81
  useProjectedAgentConversation
91
- } from "./chunk-FIH7IYLX.js";
82
+ } from "./chunk-7FZT2OYT.js";
92
83
  import {
93
84
  AgentMessageMarkdown,
94
85
  AgentTargetPresentationProvider,
95
86
  ZoomableImage,
96
87
  cn,
97
88
  resolveWorkspaceLinkAction
98
- } from "./chunk-HUNUSBQQ.js";
89
+ } from "./chunk-XQUUELKF.js";
99
90
  import {
100
91
  openAgentEnvPanel
101
92
  } from "./chunk-PSLAWU25.js";
@@ -106,12 +97,12 @@ import {
106
97
  DEFAULT_AGENT_MENTION_FILTER,
107
98
  agentMentionItemKey,
108
99
  preloadAgentMentionBrowse
109
- } from "./chunk-UNLTQUPO.js";
100
+ } from "./chunk-4SQNOOJ3.js";
110
101
  import {
111
102
  buildWorkspaceAgentActivityListViewModel,
112
103
  isWorkspaceAgentUntitledTask
113
- } from "./chunk-A2JPL5N6.js";
114
- import "./chunk-CVPWQHQH.js";
104
+ } from "./chunk-3HARXLAZ.js";
105
+ import "./chunk-AOVPGJBC.js";
115
106
  import {
116
107
  resolveWorkspaceAgentSessionSortTimeUnixMs
117
108
  } from "./chunk-IBIMGLCD.js";
@@ -125,7 +116,7 @@ import {
125
116
  mentionItemToAttrs,
126
117
  normalizeAgentSessionMentionTitle,
127
118
  parseMentionItemFromHref
128
- } from "./chunk-CXJEQQR5.js";
119
+ } from "./chunk-KQE5KV2V.js";
129
120
  import "./chunk-Y35GDLP2.js";
130
121
  import "./chunk-LUGELG5V.js";
131
122
  import {
@@ -166,14 +157,14 @@ import {
166
157
  agentGuiI18nResources,
167
158
  translate,
168
159
  useTranslation
169
- } from "./chunk-MQ6WW3CD.js";
160
+ } from "./chunk-U7D7G3UU.js";
170
161
  import "./chunk-PJP5BUU6.js";
171
162
  import {
172
163
  agentColorfulUrl,
173
164
  cursorColorfulUrl,
174
165
  normalizeManagedAgentProvider
175
166
  } from "./chunk-XDV4ZRVK.js";
176
- import "./chunk-AA75BOX3.js";
167
+ import "./chunk-VWXFFSIM.js";
177
168
  import {
178
169
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
179
170
  } from "./chunk-JM24HADP.js";
@@ -2374,6 +2365,169 @@ var DEFAULT_AGENT_SETTINGS = {
2374
2365
  hideWorktreeMismatchDropWarning: false
2375
2366
  };
2376
2367
 
2368
+ // providerTargets.ts
2369
+ var agentGUIProviderTargetStaticLabels = {
2370
+ "claude-code": "Claude Code",
2371
+ codex: "Codex",
2372
+ cursor: "Cursor",
2373
+ hermes: "Hermes",
2374
+ nexight: "Tutti Agent",
2375
+ openclaw: "OpenClaw",
2376
+ opencode: "Open Code",
2377
+ "tutti-agent": "Tutti Agent"
2378
+ };
2379
+ var agentGUIDefaultTargetProviders = [
2380
+ "codex",
2381
+ "claude-code",
2382
+ "cursor",
2383
+ "tutti-agent",
2384
+ "opencode",
2385
+ "hermes",
2386
+ "openclaw"
2387
+ ];
2388
+ var agentGUIDisabledPlaceholderProviders = [
2389
+ "hermes",
2390
+ "openclaw"
2391
+ ];
2392
+ function createLocalAgentGUIProviderTarget(provider) {
2393
+ const targetId = localAgentGUIProviderTargetId(provider);
2394
+ const agentTargetId = localAgentGUIAgentTargetId(provider);
2395
+ return {
2396
+ targetId,
2397
+ ...agentTargetId ? { agentTargetId } : {},
2398
+ provider,
2399
+ ref: {
2400
+ kind: "local",
2401
+ provider
2402
+ },
2403
+ label: agentGUIProviderTargetStaticLabels[provider] ?? provider
2404
+ };
2405
+ }
2406
+ function createDisabledPlaceholderAgentGUIProviderTarget(provider) {
2407
+ return {
2408
+ ...createLocalAgentGUIProviderTarget(provider),
2409
+ disabled: true
2410
+ };
2411
+ }
2412
+ function createStaticAgentGUIProviderTargets(providers = agentGUIDefaultTargetProviders, options) {
2413
+ const disabledProviders = new Set(
2414
+ options?.includeDisabledPlaceholders === true ? agentGUIDisabledPlaceholderProviders : []
2415
+ );
2416
+ return providers.map(
2417
+ (provider) => disabledProviders.has(provider) ? createDisabledPlaceholderAgentGUIProviderTarget(provider) : createLocalAgentGUIProviderTarget(provider)
2418
+ );
2419
+ }
2420
+ function localAgentGUIProviderTargetId(provider) {
2421
+ return `local:${provider}`;
2422
+ }
2423
+ function localAgentGUIAgentTargetId(provider) {
2424
+ switch (provider) {
2425
+ case "codex":
2426
+ return "local:codex";
2427
+ case "claude-code":
2428
+ return "local:claude-code";
2429
+ case "tutti-agent":
2430
+ return "local:tutti-agent";
2431
+ case "cursor":
2432
+ return "local:cursor";
2433
+ case "hermes":
2434
+ return "local:hermes";
2435
+ case "nexight":
2436
+ return "local:nexight";
2437
+ case "openclaw":
2438
+ return "local:openclaw";
2439
+ case "opencode":
2440
+ return "local:opencode";
2441
+ default:
2442
+ return null;
2443
+ }
2444
+ }
2445
+ function normalizeAgentGUIProviderTargets(targets, options) {
2446
+ const includeDisabledPlaceholders = options?.includeDisabledPlaceholders === true;
2447
+ const useStaticCatalog = options?.useStaticCatalog !== false;
2448
+ const source = targets && targets.length > 0 ? targets : [];
2449
+ const normalizedTargets = [];
2450
+ const seenTargetKeys = /* @__PURE__ */ new Set();
2451
+ const seenProviders = /* @__PURE__ */ new Set();
2452
+ for (const target of source) {
2453
+ const normalized = normalizeAgentGUIProviderTarget(target);
2454
+ if (!normalized) {
2455
+ continue;
2456
+ }
2457
+ const dedupeKey = `${normalized.provider}\0${normalized.targetId}`;
2458
+ if (seenTargetKeys.has(dedupeKey)) {
2459
+ continue;
2460
+ }
2461
+ seenTargetKeys.add(dedupeKey);
2462
+ seenProviders.add(normalized.provider);
2463
+ normalizedTargets.push(normalized);
2464
+ }
2465
+ if (includeDisabledPlaceholders && normalizedTargets.length > 0) {
2466
+ for (const provider of agentGUIDisabledPlaceholderProviders) {
2467
+ if (seenProviders.has(provider)) {
2468
+ continue;
2469
+ }
2470
+ normalizedTargets.push(
2471
+ createDisabledPlaceholderAgentGUIProviderTarget(provider)
2472
+ );
2473
+ }
2474
+ }
2475
+ return normalizedTargets.length > 0 || !useStaticCatalog ? normalizedTargets : createStaticAgentGUIProviderTargets(void 0, {
2476
+ includeDisabledPlaceholders
2477
+ });
2478
+ }
2479
+ function normalizeAgentGUIProviderTarget(target) {
2480
+ const {
2481
+ targetId: _targetId,
2482
+ agentTargetId: _agentTargetId,
2483
+ provider: _provider,
2484
+ ref: _ref,
2485
+ label: _label,
2486
+ badge,
2487
+ description,
2488
+ iconUrl,
2489
+ ownerLabel,
2490
+ unavailableReason,
2491
+ ...rest
2492
+ } = target;
2493
+ const targetId = target.targetId.trim();
2494
+ const agentTargetId = target.agentTargetId?.trim();
2495
+ const label = target.label.trim();
2496
+ const kind = typeof target.ref.kind === "string" ? target.ref.kind.trim() : "";
2497
+ if (!targetId || !label || !kind || target.ref.provider !== target.provider) {
2498
+ return null;
2499
+ }
2500
+ const normalizedBadge = normalizeAgentGUIProviderTargetBadge(badge);
2501
+ return {
2502
+ ...rest,
2503
+ targetId,
2504
+ ...agentTargetId ? { agentTargetId } : {},
2505
+ provider: target.provider,
2506
+ ref: {
2507
+ ...target.ref,
2508
+ kind,
2509
+ provider: target.provider
2510
+ },
2511
+ label,
2512
+ ...normalizedBadge ? { badge: normalizedBadge } : {},
2513
+ ...description?.trim() ? { description: description.trim() } : {},
2514
+ ...iconUrl?.trim() ? { iconUrl: iconUrl.trim() } : {},
2515
+ ...ownerLabel?.trim() ? { ownerLabel: ownerLabel.trim() } : {},
2516
+ ...unavailableReason?.trim() ? { unavailableReason: unavailableReason.trim() } : {}
2517
+ };
2518
+ }
2519
+ function normalizeAgentGUIProviderTargetBadge(badge) {
2520
+ const iconUrl = badge?.iconUrl?.trim() ?? "";
2521
+ if (!iconUrl) {
2522
+ return null;
2523
+ }
2524
+ const label = badge?.label?.trim() ?? "";
2525
+ return {
2526
+ iconUrl,
2527
+ ...label ? { label } : {}
2528
+ };
2529
+ }
2530
+
2377
2531
  // agent-gui/agentGuiNode/model/agentGuiConversationFilter.ts
2378
2532
  function createAgentGUIConversationFilterState(filter = { kind: "all" }) {
2379
2533
  return {
@@ -6860,7 +7014,7 @@ function composerTargetDataFromProviderTarget(input) {
6860
7014
  const currentAgentTargetId = normalizeOptionalText2(
6861
7015
  input.current.agentTargetId
6862
7016
  );
6863
- const canPromoteLegacyComposerOverrides = agentTargetId !== null && currentAgentTargetId === null && normalizeOptionalText2(input.current.providerTargetId) === null && input.current.providerTargetRef == null && input.current.provider === input.target.provider && input.current.composerOverrides != null && !input.current.composerOverridesByAgentTargetId?.[agentTargetId];
7017
+ const canPromoteLegacyComposerOverrides = agentTargetId !== null && currentAgentTargetId === null && input.current.provider === input.target.provider && input.current.composerOverrides != null && !input.current.composerOverridesByAgentTargetId?.[agentTargetId];
6864
7018
  const composerOverridesByAgentTargetId = canPromoteLegacyComposerOverrides ? {
6865
7019
  ...input.current.composerOverridesByAgentTargetId ?? {},
6866
7020
  [agentTargetId]: input.current.composerOverrides
@@ -6869,15 +7023,11 @@ function composerTargetDataFromProviderTarget(input) {
6869
7023
  return {
6870
7024
  agentTargetId,
6871
7025
  provider: input.target.provider,
6872
- providerTargetId: null,
6873
- providerTargetRef: null,
6874
7026
  targetId: input.target.targetId,
6875
7027
  data: {
6876
7028
  ...input.current,
6877
7029
  provider: input.target.provider,
6878
7030
  agentTargetId,
6879
- providerTargetId: null,
6880
- providerTargetRef: null,
6881
7031
  composerOverrides: canPromoteLegacyComposerOverrides ? null : currentTargetIdentityChanged ? null : input.current.composerOverrides,
6882
7032
  composerOverridesByAgentTargetId
6883
7033
  }
@@ -6885,7 +7035,7 @@ function composerTargetDataFromProviderTarget(input) {
6885
7035
  }
6886
7036
  function isExplicitAgentGUIProviderTarget(target, explicitTargets) {
6887
7037
  return explicitTargets.some(
6888
- (candidate) => candidate.provider === target.provider && candidate.targetId === target.targetId && agentGUIProviderTargetRefsEqual(candidate.ref, target.ref)
7038
+ (candidate) => candidate.agentTargetId === target.agentTargetId
6889
7039
  );
6890
7040
  }
6891
7041
  function findAgentGUIDirectoryTarget(directory, agentTargetId) {
@@ -6896,21 +7046,26 @@ function findAgentGUIDirectoryTarget(directory, agentTargetId) {
6896
7046
  (target) => normalizeOptionalText2(target.agentTargetId) === agentTargetId
6897
7047
  );
6898
7048
  }
7049
+ function resolveAgentGUIDirectorySelection(input) {
7050
+ const agentTargetId = normalizeOptionalText2(input.agentTargetId);
7051
+ if (agentTargetId) {
7052
+ return findAgentGUIDirectoryTarget(input.targets, agentTargetId) ?? null;
7053
+ }
7054
+ const providerTargets = input.provider ? input.targets.filter((target) => target.provider === input.provider) : [];
7055
+ return providerTargets.find((target) => target.disabled !== true) ?? providerTargets[0] ?? input.targets.find((target) => target.disabled !== true) ?? input.targets[0] ?? null;
7056
+ }
6899
7057
  function composerTargetDataFromNodeData(data, directory) {
6900
7058
  const foreignKeyAgentTargetId = normalizeOptionalText2(data.agentTargetId);
6901
- const lookupAgentTargetId = foreignKeyAgentTargetId ?? localAgentGUIAgentTargetId(data.provider);
6902
7059
  const directoryTarget = findAgentGUIDirectoryTarget(
6903
7060
  directory,
6904
- lookupAgentTargetId
7061
+ foreignKeyAgentTargetId
6905
7062
  );
6906
7063
  const agentTargetId = normalizeOptionalText2(directoryTarget?.agentTargetId) ?? foreignKeyAgentTargetId;
6907
7064
  const provider = directoryTarget?.provider ?? data.provider;
6908
7065
  return {
6909
7066
  agentTargetId,
6910
7067
  provider,
6911
- providerTargetId: null,
6912
- providerTargetRef: null,
6913
- targetId: directoryTarget?.targetId ?? agentTargetId ?? `local:${provider}`,
7068
+ targetId: directoryTarget?.targetId ?? agentTargetId ?? "__missing__",
6914
7069
  data: directoryTarget && directoryTarget.provider !== data.provider ? { ...data, provider } : data
6915
7070
  };
6916
7071
  }
@@ -6920,18 +7075,17 @@ function resolveActiveSessionComposerTarget(input) {
6920
7075
  if (input.directoryLoading) {
6921
7076
  return { status: "loading", target, missingAgentTargetId: null };
6922
7077
  }
6923
- const resolveKey = foreignKey ?? localAgentGUIAgentTargetId(input.data.provider);
6924
7078
  const directoryTarget = findAgentGUIDirectoryTarget(
6925
7079
  input.directory,
6926
- resolveKey
7080
+ foreignKey
6927
7081
  );
6928
7082
  if (directoryTarget) {
6929
7083
  return { status: "resolved", target, missingAgentTargetId: null };
6930
7084
  }
6931
- return { status: "missing", target, missingAgentTargetId: resolveKey };
7085
+ return { status: "missing", target, missingAgentTargetId: foreignKey };
6932
7086
  }
6933
7087
  function agentGUINodeDataHasComposerTarget(data) {
6934
- return normalizeOptionalText2(data.agentTargetId) !== null || normalizeOptionalText2(data.providerTargetId) !== null || data.providerTargetRef != null;
7088
+ return normalizeOptionalText2(data.agentTargetId) !== null;
6935
7089
  }
6936
7090
  function composerOptionsForTarget(input) {
6937
7091
  if (!input.target.agentTargetId) {
@@ -6985,7 +7139,7 @@ function sanitizeComposerSettingsForTarget(input) {
6985
7139
  return sanitizeComposerSettingsForOptions(input.settings, input.options);
6986
7140
  }
6987
7141
  function agentGUIProviderTargetsEqual(left, right) {
6988
- return left.provider === right.provider && left.targetId === right.targetId && (left.agentTargetId ?? null) === (right.agentTargetId ?? null) && agentGUIProviderTargetRefsEqual(left.ref, right.ref);
7142
+ return (left.agentTargetId ?? left.targetId) === (right.agentTargetId ?? right.targetId);
6989
7143
  }
6990
7144
  function reportAgentGUIDiagnostic(runtime, input) {
6991
7145
  const reportDiagnostic = runtime.reportDiagnostic;
@@ -7037,9 +7191,9 @@ function showAgentGUIControllerErrorToast(hostToast, message) {
7037
7191
  function reportAgentGUIConversationFilterTargetUnresolved(input) {
7038
7192
  reportAgentGUIDiagnostic(input.runtime, {
7039
7193
  details: {
7194
+ agentTargetId: input.agentTargetId,
7040
7195
  provider: input.provider,
7041
7196
  providerTargetCount: input.providerTargetCount,
7042
- providerTargetId: input.providerTargetId,
7043
7197
  reason: input.reason
7044
7198
  },
7045
7199
  event: "agent.gui.conversation_filter.target_unresolved",
@@ -8158,20 +8312,6 @@ function normalizeOptionalText2(value) {
8158
8312
  const trimmed = value.trim();
8159
8313
  return trimmed ? trimmed : null;
8160
8314
  }
8161
- function resolveSameProviderActiveSessionModel(input) {
8162
- const agentSessionId = normalizeOptionalText2(input.agentSessionId);
8163
- if (agentSessionId === null) {
8164
- return null;
8165
- }
8166
- const runtimeSession = input.runtime.getSnapshot(input.workspaceId).sessions.find(
8167
- (candidate) => candidate.agentSessionId.trim() === agentSessionId
8168
- ) ?? null;
8169
- const activeProvider = normalizeOptionalText2(runtimeSession?.provider) ?? normalizeOptionalText2(input.activeProvider);
8170
- if (activeProvider !== input.provider) {
8171
- return null;
8172
- }
8173
- return normalizeOptionalText2(input.sessionState?.settings?.model) ?? normalizeOptionalText2(runtimeSession?.model);
8174
- }
8175
8315
  function normalizeOptionalPrompt(value) {
8176
8316
  return typeof value === "string" ? value.trim() : "";
8177
8317
  }
@@ -9007,16 +9147,6 @@ function normalizedPositiveNumber2(value) {
9007
9147
  function timelineItemTime(item) {
9008
9148
  return item.occurredAtUnixMs ?? item.createdAtUnixMs ?? 0;
9009
9149
  }
9010
- var emptyComingSoonProviders = [];
9011
- function applyComingSoonProviderTargets(targets, comingSoonProviders) {
9012
- if (comingSoonProviders.length === 0) {
9013
- return targets;
9014
- }
9015
- const comingSoon = new Set(comingSoonProviders);
9016
- return targets.map(
9017
- (target) => comingSoon.has(target.provider) && target.disabled !== true ? { ...target, disabled: true } : target
9018
- );
9019
- }
9020
9150
  function useAgentGUINodeController({
9021
9151
  nodeId,
9022
9152
  workspaceId,
@@ -9026,10 +9156,8 @@ function useAgentGUINodeController({
9026
9156
  data,
9027
9157
  providerTargets,
9028
9158
  providerTargetsLoading = false,
9029
- providerRailMode = "catalog",
9030
- comingSoonProviders,
9031
9159
  providerReadinessGates = null,
9032
- defaultProviderTargetId = null,
9160
+ defaultAgentTargetId = null,
9033
9161
  openSessionRequest = null,
9034
9162
  prefillPromptRequest = null,
9035
9163
  previewMode = false,
@@ -9058,42 +9186,16 @@ function useAgentGUINodeController({
9058
9186
  const agentQueuedPromptRuntime = useAgentQueuedPromptRuntime();
9059
9187
  const agentHostApi = useAgentHostApi();
9060
9188
  const agentActivitySnapshot = useAgentActivitySnapshot(workspaceId);
9061
- const normalizedComingSoonProviders = useMemo3(
9062
- () => comingSoonProviders && comingSoonProviders.length > 0 ? [...comingSoonProviders] : emptyComingSoonProviders,
9063
- [comingSoonProviders]
9064
- );
9065
- const isExactProviderRailMode = providerRailMode === "exact";
9066
- const normalizedExplicitProviderTargets = useMemo3(() => {
9067
- const normalized = normalizeAgentGUIProviderTargets(providerTargets, {
9068
- includeDisabledPlaceholders: !isExactProviderRailMode,
9069
- useStaticCatalog: false
9070
- });
9071
- return isExactProviderRailMode ? normalized : applyComingSoonProviderTargets(
9072
- normalized,
9073
- normalizedComingSoonProviders
9074
- );
9075
- }, [isExactProviderRailMode, normalizedComingSoonProviders, providerTargets]);
9076
- const normalizedProviderTargets = useMemo3(() => {
9077
- if (providerTargetsLoading) {
9078
- return [];
9079
- }
9080
- if (!isExactProviderRailMode && (providerTargets === void 0 || normalizedExplicitProviderTargets.length === 0)) {
9081
- return applyComingSoonProviderTargets(
9082
- normalizeAgentGUIProviderTargets(null, {
9083
- includeDisabledPlaceholders: true
9084
- }),
9085
- normalizedComingSoonProviders
9086
- );
9087
- }
9088
- return normalizedExplicitProviderTargets;
9089
- }, [
9090
- isExactProviderRailMode,
9091
- normalizedExplicitProviderTargets,
9092
- normalizedComingSoonProviders,
9093
- providerTargets,
9094
- providerTargetsLoading
9095
- ]);
9096
- const shouldUseStaticProviderTargets = !isExactProviderRailMode && !providerTargetsLoading && (providerTargets === void 0 || normalizedExplicitProviderTargets.length === 0);
9189
+ const normalizedExplicitProviderTargets = useMemo3(
9190
+ () => normalizeAgentGUIProviderTargets(providerTargets, {
9191
+ // AgentGUINode always passes the projected `/agents` array, including
9192
+ // an explicit empty array. The undefined branch exists only for direct
9193
+ // package-internal controller harnesses and legacy tests.
9194
+ useStaticCatalog: providerTargets === void 0
9195
+ }),
9196
+ [providerTargets]
9197
+ );
9198
+ const normalizedProviderTargets = providerTargetsLoading ? [] : normalizedExplicitProviderTargets;
9097
9199
  const handoffProviderTargets = useMemo3(
9098
9200
  () => providerTargetsLoading ? [] : normalizedExplicitProviderTargets.filter(
9099
9201
  (target) => target.disabled !== true
@@ -9101,14 +9203,10 @@ function useAgentGUINodeController({
9101
9203
  [normalizedExplicitProviderTargets, providerTargetsLoading]
9102
9204
  );
9103
9205
  const selectedProviderTarget = useMemo3(() => {
9104
- const resolved = resolveAgentGUIProviderTarget({
9105
- agentTargetId: data.agentTargetId,
9106
- defaultProviderTargetId,
9107
- provider: data.provider,
9108
- providerTargetId: data.providerTargetId,
9109
- providerTargets: normalizedProviderTargets,
9110
- useStaticCatalog: shouldUseStaticProviderTargets
9111
- });
9206
+ const selectedAgentTargetId = normalizeOptionalText2(data.agentTargetId) ?? normalizeOptionalText2(defaultAgentTargetId);
9207
+ const resolved = normalizedProviderTargets.find(
9208
+ (target) => target.agentTargetId === selectedAgentTargetId
9209
+ ) ?? normalizedProviderTargets.find((target) => target.disabled !== true) ?? normalizedProviderTargets[0];
9112
9210
  return resolved ?? {
9113
9211
  targetId: data.agentTargetId ?? "__loading__",
9114
9212
  provider: data.provider,
@@ -9122,27 +9220,19 @@ function useAgentGUINodeController({
9122
9220
  }, [
9123
9221
  data.agentTargetId,
9124
9222
  data.provider,
9125
- data.providerTargetId,
9126
- defaultProviderTargetId,
9127
- normalizedProviderTargets,
9128
- shouldUseStaticProviderTargets
9223
+ defaultAgentTargetId,
9224
+ normalizedProviderTargets
9129
9225
  ]);
9130
9226
  const selectedProviderTargetIsExplicit = useMemo3(
9131
9227
  () => normalizedExplicitProviderTargets.some(
9132
- (target) => target.provider === selectedProviderTarget.provider && target.targetId === selectedProviderTarget.targetId && agentGUIProviderTargetRefsEqual(
9133
- target.ref,
9134
- selectedProviderTarget.ref
9135
- )
9228
+ (target) => target.agentTargetId === selectedProviderTarget.agentTargetId
9136
9229
  ),
9137
9230
  [normalizedExplicitProviderTargets, selectedProviderTarget]
9138
9231
  );
9139
9232
  const [homeComposerTargetOverride, setHomeComposerTargetOverride] = useState4(null);
9140
9233
  const homeComposerTargetOverrideIsExplicit = useMemo3(
9141
9234
  () => homeComposerTargetOverride ? normalizedExplicitProviderTargets.some(
9142
- (target) => target.provider === homeComposerTargetOverride.provider && target.targetId === homeComposerTargetOverride.targetId && agentGUIProviderTargetRefsEqual(
9143
- target.ref,
9144
- homeComposerTargetOverride.ref
9145
- )
9235
+ (target) => target.agentTargetId === homeComposerTargetOverride.agentTargetId
9146
9236
  ) : false,
9147
9237
  [homeComposerTargetOverride, normalizedExplicitProviderTargets]
9148
9238
  );
@@ -9155,10 +9245,7 @@ function useAgentGUINodeController({
9155
9245
  (target) => target.disabled !== true && providerReadinessGates[target.provider] === null
9156
9246
  ) ?? null;
9157
9247
  }, [normalizedProviderTargets, providerReadinessGates]);
9158
- const nodeComposerTargetResolvedByProviderTarget = agentGUINodeDataHasComposerTarget(data) && (normalizeOptionalText2(data.agentTargetId) !== null && selectedProviderTarget.agentTargetId === normalizeOptionalText2(data.agentTargetId) || normalizeOptionalText2(data.providerTargetId) !== null && selectedProviderTarget.targetId === normalizeOptionalText2(data.providerTargetId) || data.providerTargetRef != null && agentGUIProviderTargetRefsEqual(
9159
- selectedProviderTarget.ref,
9160
- data.providerTargetRef
9161
- ));
9248
+ const nodeComposerTargetResolvedByProviderTarget = agentGUINodeDataHasComposerTarget(data) && selectedProviderTarget.agentTargetId === normalizeOptionalText2(data.agentTargetId);
9162
9249
  const selectedComposerTargetData = useMemo3(
9163
9250
  () => homeComposerTargetOverride ? composerTargetDataFromProviderTarget({
9164
9251
  current: data,
@@ -9168,7 +9255,7 @@ function useAgentGUINodeController({
9168
9255
  current: data,
9169
9256
  isExplicit: selectedProviderTargetIsExplicit,
9170
9257
  target: selectedProviderTarget
9171
- }) : agentGUINodeDataHasComposerTarget(data) ? composerTargetDataFromNodeData(data, normalizedProviderTargets) : composerTargetDataFromProviderTarget({
9258
+ }) : agentGUINodeDataHasComposerTarget(data) && data.lastActiveAgentSessionId !== null ? composerTargetDataFromNodeData(data, normalizedProviderTargets) : composerTargetDataFromProviderTarget({
9172
9259
  current: data,
9173
9260
  isExplicit: selectedProviderTargetIsExplicit,
9174
9261
  target: selectedProviderTarget
@@ -9618,7 +9705,7 @@ function useAgentGUINodeController({
9618
9705
  const pendingHomeErrorRef = useRef4(null);
9619
9706
  const activatedConversationIdsRef = useRef4(/* @__PURE__ */ new Set());
9620
9707
  const failedNewConversationIdsRef = useRef4(/* @__PURE__ */ new Set());
9621
- const lastActiveModelByProviderRef = useRef4({});
9708
+ const lastActiveModelByAgentTargetIdRef = useRef4({});
9622
9709
  const pendingTurnIdBySessionIdRef = useRef4({});
9623
9710
  const submitTraceBySessionIdRef = useRef4({});
9624
9711
  const conversationIdsRef = useRef4(
@@ -12023,14 +12110,14 @@ function useAgentGUINodeController({
12023
12110
  (initialContentInput, displayPrompt) => {
12024
12111
  const target = selectedProviderTargetRef.current;
12025
12112
  const targetData = selectedComposerTargetDataRef.current;
12026
- if (isCreatingConversation || target.disabled === true || targetData.provider === "openclaw" && openclawGateway?.status !== "ready") {
12027
- return;
12028
- }
12029
12113
  const agentTargetId = targetData.agentTargetId ?? "";
12030
12114
  if (!agentTargetId || providerTargetsProvidedRef.current && !selectedProviderTargetIsExplicitRef.current) {
12031
12115
  setDetailError(translate("agentHost.agentGui.agentTargetRequired"));
12032
12116
  return;
12033
12117
  }
12118
+ if (isCreatingConversation || target.disabled === true || targetData.provider === "openclaw" && openclawGateway?.status !== "ready") {
12119
+ return;
12120
+ }
12034
12121
  const normalizedInitialContent = Array.isArray(initialContentInput) ? normalizeAgentPromptContentBlocks(
12035
12122
  initialContentInput
12036
12123
  ) : textPromptContent(normalizeOptionalPrompt(initialContentInput));
@@ -12057,15 +12144,10 @@ function useAgentGUINodeController({
12057
12144
  const provider = targetData.provider;
12058
12145
  const agentTargetId2 = targetData.agentTargetId ?? "";
12059
12146
  onDataChangeRef.current(
12060
- (current) => current.provider === provider && (current.agentTargetId ?? null) === (agentTargetId2 || null) && (current.providerTargetId ?? null) === targetData.providerTargetId && agentGUIProviderTargetRefsEqual(
12061
- current.providerTargetRef,
12062
- targetData.providerTargetRef
12063
- ) ? current : {
12147
+ (current) => current.provider === provider && (current.agentTargetId ?? null) === (agentTargetId2 || null) ? current : {
12064
12148
  ...current,
12065
12149
  provider,
12066
- agentTargetId: agentTargetId2 || null,
12067
- providerTargetId: targetData.providerTargetId,
12068
- providerTargetRef: targetData.providerTargetRef
12150
+ agentTargetId: agentTargetId2 || null
12069
12151
  }
12070
12152
  );
12071
12153
  const selectedProjectPath2 = selectedProjectPathRef.current;
@@ -12094,15 +12176,8 @@ function useAgentGUINodeController({
12094
12176
  currentActiveConversationId,
12095
12177
  transientConversationRef.current
12096
12178
  ) : null;
12097
- const inheritedModel = normalizeOptionalText2(targetSafeInitialNodeSettings.model) === null ? resolveSameProviderActiveSessionModel({
12098
- activeProvider: currentActiveConversation?.provider ?? null,
12099
- agentSessionId: currentActiveConversationId,
12100
- provider,
12101
- runtime: agentActivityRuntime,
12102
- sessionState: activeSessionState,
12103
- workspaceId
12104
- }) ?? normalizeOptionalText2(
12105
- lastActiveModelByProviderRef.current[provider]
12179
+ const inheritedModel = normalizeOptionalText2(targetSafeInitialNodeSettings.model) === null ? normalizeOptionalText2(
12180
+ lastActiveModelByAgentTargetIdRef.current[agentTargetId2]
12106
12181
  ) : null;
12107
12182
  const effectiveInitialSettings = inheritedModel === null ? initialSettings : { ...initialSettings, model: inheritedModel };
12108
12183
  const targetSafeEffectiveInitialSettings = sanitizeComposerSettingsForTarget({
@@ -12571,12 +12646,10 @@ function useAgentGUINodeController({
12571
12646
  }
12572
12647
  const filter = conversationFilterRef.current;
12573
12648
  if (filter.kind === "agentTarget") {
12574
- const filterTarget = resolveAgentGUIProviderTarget({
12649
+ const filterTarget = resolveAgentGUIDirectorySelection({
12575
12650
  agentTargetId: filter.agentTargetId,
12576
- defaultProviderTargetId,
12577
12651
  provider: dataRef.current.provider,
12578
- providerTargets: normalizedProviderTargets,
12579
- useStaticCatalog: false
12652
+ targets: normalizedProviderTargets
12580
12653
  });
12581
12654
  if (filterTarget && filterTarget.disabled !== true && (filterTarget.agentTargetId?.trim() ?? "") === filter.agentTargetId) {
12582
12655
  setHomeComposerTargetOverride(filterTarget);
@@ -12615,7 +12688,7 @@ function useAgentGUINodeController({
12615
12688
  [
12616
12689
  activation,
12617
12690
  agentActivityRuntime,
12618
- defaultProviderTargetId,
12691
+ defaultAgentTargetId,
12619
12692
  loadDraftComposerOptions,
12620
12693
  normalizedProviderTargets,
12621
12694
  persistActiveConversation,
@@ -12629,7 +12702,20 @@ function useAgentGUINodeController({
12629
12702
  if (handledPrefillPromptSequenceRef.current === prefillPromptRequest.sequence) {
12630
12703
  return;
12631
12704
  }
12705
+ if (providerTargetsLoading && prefillPromptRequest.agentTargetId?.trim()) {
12706
+ return;
12707
+ }
12708
+ const selectedTargetData = selectedComposerTargetDataRef.current;
12709
+ const prefillTargetHinted = Boolean(prefillPromptRequest.provider) || Boolean(prefillPromptRequest.agentTargetId);
12710
+ const prefillTarget = prefillTargetHinted ? resolveAgentGUIDirectorySelection({
12711
+ agentTargetId: prefillPromptRequest.agentTargetId,
12712
+ provider: prefillPromptRequest.provider ?? selectedTargetData.provider,
12713
+ targets: normalizedProviderTargets
12714
+ }) : null;
12632
12715
  handledPrefillPromptSequenceRef.current = prefillPromptRequest.sequence;
12716
+ if (prefillPromptRequest.agentTargetId?.trim() && !prefillTarget) {
12717
+ return;
12718
+ }
12633
12719
  const draftPrompt2 = prefillPromptRequest.draftPrompt.trim();
12634
12720
  if (!draftPrompt2) {
12635
12721
  return;
@@ -12660,15 +12746,6 @@ function useAgentGUINodeController({
12660
12746
  setActiveConversationId(null);
12661
12747
  setIsLoadingMessages(false);
12662
12748
  setDetailError(null);
12663
- const selectedTargetData = selectedComposerTargetDataRef.current;
12664
- const prefillTargetHinted = Boolean(prefillPromptRequest.provider) || Boolean(prefillPromptRequest.agentTargetId);
12665
- const prefillTarget = prefillTargetHinted ? resolveAgentGUIProviderTarget({
12666
- agentTargetId: prefillPromptRequest.agentTargetId,
12667
- defaultProviderTargetId,
12668
- provider: prefillPromptRequest.provider ?? selectedTargetData.provider,
12669
- providerTargets: normalizedProviderTargets,
12670
- useStaticCatalog: shouldUseStaticProviderTargets
12671
- }) : null;
12672
12749
  const targetData = prefillTarget ? composerTargetDataFromProviderTarget({
12673
12750
  current: dataRef.current,
12674
12751
  isExplicit: isExplicitAgentGUIProviderTarget(
@@ -12717,14 +12794,14 @@ function useAgentGUINodeController({
12717
12794
  }, [
12718
12795
  activation,
12719
12796
  agentActivityRuntime,
12720
- defaultProviderTargetId,
12797
+ defaultAgentTargetId,
12721
12798
  loadDraftComposerOptions,
12722
12799
  normalizedExplicitProviderTargets,
12723
12800
  normalizedProviderTargets,
12724
12801
  persistActiveConversation,
12725
12802
  prefillPromptRequest,
12726
12803
  previewMode,
12727
- shouldUseStaticProviderTargets,
12804
+ providerTargetsLoading,
12728
12805
  workspaceId
12729
12806
  ]);
12730
12807
  const continueInNewConversation = useCallback4(() => {
@@ -13815,9 +13892,7 @@ function useAgentGUINodeController({
13815
13892
  {
13816
13893
  ...current,
13817
13894
  provider: targetData.provider,
13818
- agentTargetId: targetData.agentTargetId,
13819
- providerTargetId: targetData.providerTargetId,
13820
- providerTargetRef: targetData.providerTargetRef
13895
+ agentTargetId: targetData.agentTargetId
13821
13896
  },
13822
13897
  targetSafeMerged
13823
13898
  )
@@ -14871,12 +14946,10 @@ function useAgentGUINodeController({
14871
14946
  if (!providerMismatch && !agentTargetMismatch) {
14872
14947
  return;
14873
14948
  }
14874
- const sessionTarget = resolveAgentGUIProviderTarget({
14949
+ const sessionTarget = resolveAgentGUIDirectorySelection({
14875
14950
  agentTargetId: summaryAgentTargetId,
14876
- defaultProviderTargetId,
14877
14951
  provider: summary.provider,
14878
- providerTargets: normalizedProviderTargets,
14879
- useStaticCatalog: shouldUseStaticProviderTargets
14952
+ targets: normalizedProviderTargets
14880
14953
  });
14881
14954
  if (!sessionTarget || sessionTarget.provider !== summary.provider) {
14882
14955
  return;
@@ -14886,7 +14959,7 @@ function useAgentGUINodeController({
14886
14959
  }
14887
14960
  setHomeComposerTargetOverride(null);
14888
14961
  const sessionTargetIsExplicit = normalizedExplicitProviderTargets.some(
14889
- (target) => target.provider === sessionTarget.provider && target.targetId === sessionTarget.targetId && agentGUIProviderTargetRefsEqual(target.ref, sessionTarget.ref)
14962
+ (target) => agentGUIProviderTargetsEqual(target, sessionTarget)
14890
14963
  );
14891
14964
  onDataChangeRef.current((current) => {
14892
14965
  const targetData = composerTargetDataFromProviderTarget({
@@ -14894,10 +14967,7 @@ function useAgentGUINodeController({
14894
14967
  isExplicit: sessionTargetIsExplicit,
14895
14968
  target: sessionTarget
14896
14969
  });
14897
- if (current.provider === targetData.provider && normalizeOptionalText2(current.agentTargetId) === targetData.agentTargetId && (current.providerTargetId ?? null) === targetData.providerTargetId && agentGUIProviderTargetRefsEqual(
14898
- current.providerTargetRef,
14899
- targetData.providerTargetRef
14900
- )) {
14970
+ if (current.provider === targetData.provider && normalizeOptionalText2(current.agentTargetId) === targetData.agentTargetId) {
14901
14971
  return current;
14902
14972
  }
14903
14973
  dataRef.current = targetData.data;
@@ -14906,12 +14976,11 @@ function useAgentGUINodeController({
14906
14976
  }, [
14907
14977
  activeConversationId,
14908
14978
  conversations,
14909
- defaultProviderTargetId,
14979
+ defaultAgentTargetId,
14910
14980
  normalizedExplicitProviderTargets,
14911
14981
  normalizedProviderTargets,
14912
14982
  previewMode,
14913
- providerTargetsLoading,
14914
- shouldUseStaticProviderTargets
14983
+ providerTargetsLoading
14915
14984
  ]);
14916
14985
  const activeSessionTargetResolution = useMemo3(() => {
14917
14986
  if (previewMode || activeConversationId === null) {
@@ -15240,9 +15309,7 @@ function useAgentGUINodeController({
15240
15309
  {
15241
15310
  ...current,
15242
15311
  provider: selectedComposerTargetData.provider,
15243
- agentTargetId: selectedComposerTargetData.agentTargetId,
15244
- providerTargetId: selectedComposerTargetData.providerTargetId,
15245
- providerTargetRef: selectedComposerTargetData.providerTargetRef
15312
+ agentTargetId: selectedComposerTargetData.agentTargetId
15246
15313
  },
15247
15314
  targetSafeNodeDefaultSettings
15248
15315
  )
@@ -15280,24 +15347,23 @@ function useAgentGUINodeController({
15280
15347
  ) : null;
15281
15348
  const pendingInteractivePrompt = serverInteractivePrompt ?? planImplementationPromptVM;
15282
15349
  useEffect4(() => {
15283
- const provider = normalizeOptionalText2(
15284
- activeRuntimeSession?.provider ?? activeConversation?.provider
15285
- );
15286
- if (provider === null) {
15350
+ const agentTargetId = activeSessionTargetResolution.status === "resolved" ? normalizeOptionalText2(
15351
+ activeSessionTargetResolution.target.agentTargetId
15352
+ ) : null;
15353
+ if (agentTargetId === null) {
15287
15354
  return;
15288
15355
  }
15289
15356
  const model = normalizeOptionalText2(activeSessionState?.settings?.model) ?? normalizeOptionalText2(activeRuntimeSession?.model);
15290
15357
  if (model === null) {
15291
15358
  return;
15292
15359
  }
15293
- lastActiveModelByProviderRef.current = {
15294
- ...lastActiveModelByProviderRef.current,
15295
- [provider]: model
15360
+ lastActiveModelByAgentTargetIdRef.current = {
15361
+ ...lastActiveModelByAgentTargetIdRef.current,
15362
+ [agentTargetId]: model
15296
15363
  };
15297
15364
  }, [
15298
- activeConversation?.provider,
15365
+ activeSessionTargetResolution,
15299
15366
  activeRuntimeSession?.model,
15300
- activeRuntimeSession?.provider,
15301
15367
  activeSessionState?.settings?.model
15302
15368
  ]);
15303
15369
  const activeActivityDisplayStatus = activeConversationId ? agentActivityDisplayStatuses.get(activeConversationId) ?? null : null;
@@ -15358,7 +15424,7 @@ function useAgentGUINodeController({
15358
15424
  hasProviderSessionNotFoundError,
15359
15425
  pendingApproval
15360
15426
  ]);
15361
- const canSubmit = !providerTargetsLoading && activeLiveState !== "activating" && activeLiveState !== "failed" && !activeConversationResumeUnavailable && (activeConversationId !== null || effectiveSelectedProviderTarget.disabled !== true) && (composerTargetData.provider !== "openclaw" || openclawGateway?.status === "ready") && pendingApproval === null && pendingInteractivePrompt === null && sessionChrome.auth === null && !activeConversationBusy && !isCreatingConversation && !isSubmitting && !isInterrupting;
15427
+ const canSubmit = !providerTargetsLoading && activeLiveState !== "activating" && activeLiveState !== "failed" && !activeConversationResumeUnavailable && (activeConversationId !== null || effectiveSelectedProviderTarget.disabled !== true && (homeComposerTargetOverride ? homeComposerTargetOverrideIsExplicit : selectedProviderTargetIsExplicit)) && (composerTargetData.provider !== "openclaw" || openclawGateway?.status === "ready") && pendingApproval === null && pendingInteractivePrompt === null && sessionChrome.auth === null && !activeConversationBusy && !isCreatingConversation && !isSubmitting && !isInterrupting;
15362
15428
  const activeConversationCreatePending = Boolean(activeConversationId) && isCreatingConversation && startingConversationIdRef.current === activeConversationId;
15363
15429
  const canQueueWhileBusy = Boolean(activeConversationId) && (activeConversationCreatePending || activeConversationBusy || isSubmitting || Boolean(activeSessionState?.pendingInteractive));
15364
15430
  useEffect4(() => {
@@ -15549,12 +15615,12 @@ function useAgentGUINodeController({
15549
15615
  ]);
15550
15616
  const stableComposerSettings = useStableComposerSettingsVM(composerSettings);
15551
15617
  const resolveDefaultHomeComposerTarget = useCallback4(() => {
15552
- const defaultTargetId = defaultProviderTargetId?.trim() ?? "";
15618
+ const defaultTargetId = defaultAgentTargetId?.trim() ?? "";
15553
15619
  const explicitDefaultTarget = defaultTargetId ? normalizedProviderTargets.find(
15554
15620
  (target) => target.targetId === defaultTargetId || target.agentTargetId === defaultTargetId
15555
15621
  ) ?? null : null;
15556
15622
  return explicitDefaultTarget ?? normalizedProviderTargets.find((target) => target.disabled !== true) ?? normalizedProviderTargets[0] ?? null;
15557
- }, [defaultProviderTargetId, normalizedProviderTargets]);
15623
+ }, [defaultAgentTargetId, normalizedProviderTargets]);
15558
15624
  const resetHomeComposerAgentTargetToDefault = useCallback4(() => {
15559
15625
  if (previewMode) {
15560
15626
  return;
@@ -15564,7 +15630,7 @@ function useAgentGUINodeController({
15564
15630
  return;
15565
15631
  }
15566
15632
  const nextTargetIsExplicit = normalizedExplicitProviderTargets.some(
15567
- (target) => target.provider === nextTarget.provider && target.targetId === nextTarget.targetId && agentGUIProviderTargetRefsEqual(target.ref, nextTarget.ref)
15633
+ (target) => agentGUIProviderTargetsEqual(target, nextTarget)
15568
15634
  );
15569
15635
  const nextTargetData = composerTargetDataFromProviderTarget({
15570
15636
  current: dataRef.current,
@@ -15617,18 +15683,16 @@ function useAgentGUINodeController({
15617
15683
  return;
15618
15684
  }
15619
15685
  const nextProvider = input.provider;
15620
- const nextTarget = resolveAgentGUIProviderTarget({
15621
- defaultProviderTargetId,
15686
+ const nextTarget = resolveAgentGUIDirectorySelection({
15687
+ agentTargetId: input.agentTargetId,
15622
15688
  provider: nextProvider,
15623
- providerTargetId: input.providerTargetId,
15624
- providerTargets: normalizedProviderTargets,
15625
- useStaticCatalog: shouldUseStaticProviderTargets
15689
+ targets: normalizedProviderTargets
15626
15690
  });
15627
15691
  if (!nextTarget) {
15628
15692
  return;
15629
15693
  }
15630
15694
  const nextTargetIsExplicit = normalizedExplicitProviderTargets.some(
15631
- (target) => target.provider === nextTarget.provider && target.targetId === nextTarget.targetId && agentGUIProviderTargetRefsEqual(target.ref, nextTarget.ref)
15695
+ (target) => agentGUIProviderTargetsEqual(target, nextTarget)
15632
15696
  );
15633
15697
  const nextTargetData = composerTargetDataFromProviderTarget({
15634
15698
  current: dataRef.current,
@@ -15703,8 +15767,6 @@ function useAgentGUINodeController({
15703
15767
  provider: currentNextTargetData.provider,
15704
15768
  agentTargetId: currentNextTargetData.agentTargetId,
15705
15769
  lastActiveAgentSessionId: null,
15706
- providerTargetId: currentNextTargetData.providerTargetId,
15707
- providerTargetRef: currentNextTargetData.providerTargetRef,
15708
15770
  composerOverrides: providerTargetChanged ? null : current.composerOverrides
15709
15771
  };
15710
15772
  dataRef.current = nextData;
@@ -15716,22 +15778,21 @@ function useAgentGUINodeController({
15716
15778
  },
15717
15779
  [
15718
15780
  activation,
15719
- defaultProviderTargetId,
15781
+ defaultAgentTargetId,
15720
15782
  loadComposerOptionsForTarget,
15721
15783
  normalizedExplicitProviderTargets,
15722
15784
  normalizedProviderTargets,
15723
15785
  persistActiveConversation,
15724
- previewMode,
15725
- shouldUseStaticProviderTargets
15786
+ previewMode
15726
15787
  ]
15727
15788
  );
15728
15789
  useEffect4(() => {
15729
15790
  if (previewMode || activeConversationId !== null || conversationFilter.kind !== "all" || homeComposerTargetOverride !== null || agentGUINodeDataHasComposerTarget(data) || !providerReadinessGates || !firstReadyHomeComposerProviderTarget) {
15730
15791
  return;
15731
15792
  }
15732
- if (firstReadyHomeComposerProviderTarget.provider === effectiveSelectedProviderTarget.provider && firstReadyHomeComposerProviderTarget.targetId === effectiveSelectedProviderTarget.targetId && agentGUIProviderTargetRefsEqual(
15733
- firstReadyHomeComposerProviderTarget.ref,
15734
- effectiveSelectedProviderTarget.ref
15793
+ if (agentGUIProviderTargetsEqual(
15794
+ firstReadyHomeComposerProviderTarget,
15795
+ effectiveSelectedProviderTarget
15735
15796
  )) {
15736
15797
  return;
15737
15798
  }
@@ -15747,7 +15808,7 @@ function useAgentGUINodeController({
15747
15808
  }
15748
15809
  selectHomeComposerAgentTarget({
15749
15810
  provider: firstReadyHomeComposerProviderTarget.provider,
15750
- providerTargetId: firstReadyHomeComposerProviderTarget.targetId
15811
+ agentTargetId: firstReadyHomeComposerProviderTarget.agentTargetId ?? firstReadyHomeComposerProviderTarget.targetId
15751
15812
  });
15752
15813
  }, [
15753
15814
  activeConversationId,
@@ -15762,17 +15823,15 @@ function useAgentGUINodeController({
15762
15823
  ]);
15763
15824
  const selectConversationFilterTarget = useCallback4(
15764
15825
  (input) => {
15765
- const nextTarget = resolveAgentGUIProviderTarget({
15766
- defaultProviderTargetId,
15826
+ const nextTarget = resolveAgentGUIDirectorySelection({
15827
+ agentTargetId: input.agentTargetId,
15767
15828
  provider: input.provider,
15768
- providerTargetId: input.providerTargetId,
15769
- providerTargets: normalizedProviderTargets,
15770
- useStaticCatalog: shouldUseStaticProviderTargets
15829
+ targets: normalizedProviderTargets
15771
15830
  });
15772
15831
  if (!nextTarget) {
15773
15832
  reportAgentGUIConversationFilterTargetUnresolved({
15774
15833
  provider: input.provider,
15775
- providerTargetId: input.providerTargetId ?? null,
15834
+ agentTargetId: input.agentTargetId ?? null,
15776
15835
  providerTargetCount: normalizedProviderTargets.length,
15777
15836
  reason: "unresolved",
15778
15837
  runtime: agentActivityRuntime,
@@ -15815,11 +15874,10 @@ function useAgentGUINodeController({
15815
15874
  },
15816
15875
  [
15817
15876
  agentActivityRuntime,
15818
- defaultProviderTargetId,
15877
+ defaultAgentTargetId,
15819
15878
  normalizedProviderTargets,
15820
15879
  selectConversation,
15821
15880
  selectHomeComposerAgentTarget,
15822
- shouldUseStaticProviderTargets,
15823
15881
  workspaceId
15824
15882
  ]
15825
15883
  );
@@ -15838,7 +15896,7 @@ function useAgentGUINodeController({
15838
15896
  }
15839
15897
  selectHomeComposerAgentTarget({
15840
15898
  provider: target.provider,
15841
- providerTargetId: target.targetId
15899
+ agentTargetId: target.agentTargetId ?? target.targetId
15842
15900
  });
15843
15901
  }, [
15844
15902
  activeConversationId,
@@ -16011,8 +16069,6 @@ function useAgentGUINodeController({
16011
16069
  providerTargets: normalizedProviderTargets,
16012
16070
  handoffProviderTargets,
16013
16071
  providerTargetsLoading,
16014
- providerRailMode,
16015
- comingSoonProviders: normalizedComingSoonProviders,
16016
16072
  conversationFilter,
16017
16073
  conversations: visibleConversations,
16018
16074
  userProjects,
@@ -16094,9 +16150,7 @@ function useAgentGUINodeController({
16094
16150
  data,
16095
16151
  effectiveSelectedProviderTarget,
16096
16152
  handoffProviderTargets,
16097
- normalizedComingSoonProviders,
16098
16153
  normalizedProviderTargets,
16099
- providerRailMode,
16100
16154
  providerReadinessGate,
16101
16155
  providerTargetsLoading,
16102
16156
  detailError,
@@ -17346,13 +17400,6 @@ var AgentGuiHeroCarouselScene = class _AgentGuiHeroCarouselScene {
17346
17400
 
17347
17401
  // agent-gui/agentGuiNode/AgentGUIHeroAgentCarousel.tsx
17348
17402
  import { jsx as jsx20, jsxs as jsxs9 } from "react/jsx-runtime";
17349
- function agentGUILaunchpadProviderTarget(providerTargets, provider) {
17350
- const normalized = normalizeManagedAgentProvider(provider);
17351
- const matches = providerTargets.filter(
17352
- (target) => normalizeManagedAgentProvider(target.provider) === normalized
17353
- );
17354
- return matches.find((target) => target.disabled !== true) ?? matches[0] ?? null;
17355
- }
17356
17403
  var CAROUSEL_WHEEL_STEP_THRESHOLD = 42;
17357
17404
  var CAROUSEL_WHEEL_STEP_COOLDOWN_MS = 110;
17358
17405
  var CAROUSEL_DRAG_STEP_PX = 52;
@@ -17423,18 +17470,17 @@ function useAgentGUIHeroCarouselImages(icons, iconKey) {
17423
17470
  }
17424
17471
  var AgentGUIHeroAgentCarousel = memo2(
17425
17472
  function AgentGUIHeroAgentCarousel2({
17426
- activeProvider,
17473
+ activeAgentTargetId,
17427
17474
  icons,
17428
17475
  providerTargets,
17429
17476
  onProviderSelect,
17430
17477
  providerSelectLabel
17431
17478
  }) {
17432
- const normalizedActiveProvider = activeProvider ? normalizeManagedAgentProvider(activeProvider) : null;
17433
17479
  const activeIconIndex = useMemo4(
17434
- () => normalizedActiveProvider === null ? -1 : icons.findIndex(
17435
- (icon) => normalizeManagedAgentProvider(icon.provider) === normalizedActiveProvider
17480
+ () => !activeAgentTargetId ? -1 : icons.findIndex(
17481
+ (icon) => icon.agentTargetId === activeAgentTargetId
17436
17482
  ),
17437
- [icons, normalizedActiveProvider]
17483
+ [activeAgentTargetId, icons]
17438
17484
  );
17439
17485
  const [centerIndex, setCenterIndex] = useState7(
17440
17486
  activeIconIndex >= 0 ? activeIconIndex : 0
@@ -17450,10 +17496,12 @@ var AgentGUIHeroAgentCarousel = memo2(
17450
17496
  if (!icon || !interactive) {
17451
17497
  return null;
17452
17498
  }
17453
- return agentGUILaunchpadProviderTarget(
17454
- providerTargets ?? [],
17455
- icon.provider
17456
- );
17499
+ if (!icon.agentTargetId) {
17500
+ return null;
17501
+ }
17502
+ return providerTargets?.find(
17503
+ (target) => (target.agentTargetId ?? target.targetId) === icon.agentTargetId
17504
+ ) ?? null;
17457
17505
  },
17458
17506
  [icons, interactive, providerTargets]
17459
17507
  );
@@ -17465,7 +17513,7 @@ var AgentGUIHeroAgentCarousel = memo2(
17465
17513
  }
17466
17514
  onProviderSelect({
17467
17515
  provider: target.provider,
17468
- providerTargetId: target.targetId
17516
+ agentTargetId: target.targetId
17469
17517
  });
17470
17518
  },
17471
17519
  [onProviderSelect, targetForIndex]
@@ -17475,7 +17523,7 @@ var AgentGUIHeroAgentCarousel = memo2(
17475
17523
  const stageRef = useRef5(null);
17476
17524
  const canvasRef = useRef5(null);
17477
17525
  const sceneRef = useRef5(null);
17478
- const iconKey = icons.map((icon) => `${icon.provider}:${icon.iconUrl}`).join("|");
17526
+ const iconKey = icons.map((icon) => `${icon.agentTargetId ?? icon.provider}:${icon.iconUrl}`).join("|");
17479
17527
  const carouselImages = useAgentGUIHeroCarouselImages(icons, iconKey);
17480
17528
  useEffect6(() => {
17481
17529
  const canvas = canvasRef.current;
@@ -17671,7 +17719,7 @@ var AgentGUIHeroAgentCarousel = memo2(
17671
17719
  icons.map((icon, index) => {
17672
17720
  const isCenter = index === centerIndex;
17673
17721
  const target = targetForIndex(index);
17674
- const key = `${icon.provider}:${icon.iconUrl}`;
17722
+ const key = `${icon.agentTargetId ?? icon.provider}:${icon.iconUrl}`;
17675
17723
  if (target && onProviderSelect) {
17676
17724
  const label = providerSelectLabel ? `${providerSelectLabel}: ${target.label}` : target.label;
17677
17725
  return /* @__PURE__ */ jsx20(
@@ -17679,6 +17727,7 @@ var AgentGUIHeroAgentCarousel = memo2(
17679
17727
  {
17680
17728
  type: "button",
17681
17729
  className: AgentGUINode_styles_default.emptyHeroCarouselItem,
17730
+ "data-agent-target-id": icon.agentTargetId,
17682
17731
  "data-provider": icon.provider,
17683
17732
  "data-provider-active": isCenter,
17684
17733
  "aria-label": label,
@@ -24541,9 +24590,9 @@ ${normalizedText}` : normalizedText;
24541
24590
  () => providerSwitchTargets.filter((target) => target.disabled !== true),
24542
24591
  [providerSwitchTargets]
24543
24592
  );
24544
- const selectedProviderTargetId = selectedProviderTarget?.targetId ?? `local:${provider}`;
24593
+ const selectedAgentTargetId = selectedProviderTarget?.targetId ?? `local:${provider}`;
24545
24594
  const selectedProviderSwitchTarget = providerSwitchTargets.find(
24546
- (target) => target.targetId === selectedProviderTargetId
24595
+ (target) => target.targetId === selectedAgentTargetId
24547
24596
  ) ?? providerSwitchTargets.find((target) => target.provider === provider) ?? selectedProviderTarget;
24548
24597
  const providerMenuTargets = selectedProviderSwitchTarget && !enabledProviderSwitchTargets.some(
24549
24598
  (target) => target.targetId === selectedProviderSwitchTarget.targetId
@@ -24558,9 +24607,9 @@ ${normalizedText}` : normalizedText;
24558
24607
  if (target.targetId === selectedProviderSwitchTarget.targetId) {
24559
24608
  return false;
24560
24609
  }
24561
- const selectedAgentTargetId = selectedProviderSwitchTarget.agentTargetId ?? selectedProviderSwitchTarget.targetId;
24610
+ const selectedAgentTargetId2 = selectedProviderSwitchTarget.agentTargetId ?? selectedProviderSwitchTarget.targetId;
24562
24611
  const targetAgentTargetId = target.agentTargetId ?? target.targetId;
24563
- return targetAgentTargetId !== selectedAgentTargetId;
24612
+ return targetAgentTargetId !== selectedAgentTargetId2;
24564
24613
  }) : enabledHandoffProviderTargets;
24565
24614
  const selectedProviderLabel = selectedProviderSwitchTarget?.label ?? selectedProviderTarget?.label ?? provider;
24566
24615
  const effectiveHandoffLabel = handoffLabel || labels.handoffConversation;
@@ -25760,7 +25809,7 @@ ${normalizedText}` : normalizedText;
25760
25809
  }
25761
25810
  onProviderSelect?.({
25762
25811
  provider: target.provider,
25763
- providerTargetId: target.targetId
25812
+ agentTargetId: target.targetId
25764
25813
  });
25765
25814
  },
25766
25815
  children: [
@@ -26673,13 +26722,12 @@ function resolveAgentGUIHeroIconUrl(provider) {
26673
26722
  const normalizedProvider = normalizeManagedAgentProvider(provider);
26674
26723
  return MANAGED_AGENT_ICON_URLS[normalizedProvider] ?? MANAGED_AGENT_ICON_FALLBACK_URL;
26675
26724
  }
26676
- var HERO_USES_PROVIDER_RAIL_ICON = /* @__PURE__ */ new Set(["cursor", "opencode"]);
26677
26725
  function agentGUIProviderIconPresentation(provider, iconUrl) {
26678
26726
  const normalizedProvider = normalizeManagedAgentProvider(provider);
26679
26727
  const providerRailIconUrl = MANAGED_AGENT_PROVIDER_RAIL_ICON_URLS[normalizedProvider] ?? null;
26680
26728
  return {
26681
26729
  provider: normalizedProvider,
26682
- iconUrl: (HERO_USES_PROVIDER_RAIL_ICON.has(normalizedProvider) ? providerRailIconUrl : null) || iconUrl?.trim() || resolveAgentGUIHeroIconUrl(normalizedProvider)
26730
+ iconUrl: iconUrl?.trim() || providerRailIconUrl || resolveAgentGUIHeroIconUrl(normalizedProvider)
26683
26731
  };
26684
26732
  }
26685
26733
  function agentGUIProviderRailIconPresentation(provider, iconUrl) {
@@ -26687,7 +26735,7 @@ function agentGUIProviderRailIconPresentation(provider, iconUrl) {
26687
26735
  const providerRailIconUrl = MANAGED_AGENT_PROVIDER_RAIL_ICON_URLS[normalizedProvider] ?? null;
26688
26736
  return {
26689
26737
  provider: normalizedProvider,
26690
- iconUrl: (HERO_USES_PROVIDER_RAIL_ICON.has(normalizedProvider) ? providerRailIconUrl : null) || iconUrl?.trim() || providerRailIconUrl || resolveAgentGUIHeroIconUrl(normalizedProvider)
26738
+ iconUrl: iconUrl?.trim() || providerRailIconUrl || resolveAgentGUIHeroIconUrl(normalizedProvider)
26691
26739
  };
26692
26740
  }
26693
26741
  function shouldEmphasizeEmptyHeroProvider(label) {
@@ -27487,10 +27535,8 @@ function AgentGUINodeView({
27487
27535
  selectedProviderTarget: viewModel.selectedProviderTarget,
27488
27536
  providerTargets: viewModel.providerTargets,
27489
27537
  providerTargetsLoading: viewModel.providerTargetsLoading,
27490
- providerRailMode: viewModel.providerRailMode,
27491
27538
  renderProviderRailEmpty,
27492
27539
  providerRailAllPresentation,
27493
- comingSoonProviders: viewModel.comingSoonProviders,
27494
27540
  onSelectConversationFilterTarget: actions.selectConversationFilterTarget,
27495
27541
  onUpdateConversationFilter: actions.updateConversationFilter,
27496
27542
  onRequestComposerFocus: requestComposerFocus
@@ -27631,6 +27677,7 @@ function AgentGUINodeView({
27631
27677
  contextMentionProviders,
27632
27678
  workspaceAppIcons: effectiveWorkspaceAppIcons,
27633
27679
  workspaceUserProjectI18n,
27680
+ renderAgentsEmpty: renderProviderRailEmpty,
27634
27681
  renderProviderUnavailableState,
27635
27682
  renderProviderReadinessGateState,
27636
27683
  previewMode
@@ -27886,6 +27933,7 @@ var AgentGUIDetailPane = memo3(function AgentGUIDetailPane2({
27886
27933
  onRequestComposerFocus,
27887
27934
  contextMentionProviders,
27888
27935
  workspaceAppIcons = EMPTY_WORKSPACE_APP_ICONS3,
27936
+ renderAgentsEmpty,
27889
27937
  renderProviderUnavailableState,
27890
27938
  renderProviderReadinessGateState
27891
27939
  }) {
@@ -27911,8 +27959,9 @@ var AgentGUIDetailPane = memo3(function AgentGUIDetailPane2({
27911
27959
  avoidGroupingEdits: viewModel.avoidGroupingEdits
27912
27960
  });
27913
27961
  const hasActiveConversation = viewModel.activeConversationId !== null;
27914
- const selectedProviderTargetComingSoon = viewModel.selectedProviderTarget?.disabled === true;
27915
- const emptyProviderReadinessGate = !hasActiveConversation ? selectedProviderTargetComingSoon ? { status: "coming_soon" } : viewModel.providerReadinessGate : null;
27962
+ const agentsLoadedEmpty = !viewModel.providerTargetsLoading && viewModel.providerTargets.length === 0;
27963
+ const selectedProviderTargetComingSoon = viewModel.selectedProviderTarget?.disabled === true && (viewModel.providerReadinessGate === null || viewModel.providerReadinessGate?.status === "coming_soon");
27964
+ const emptyProviderReadinessGate = !hasActiveConversation ? viewModel.providerReadinessGate ?? (selectedProviderTargetComingSoon ? { status: "coming_soon" } : null) : null;
27916
27965
  const activePrompt = viewModel.pendingInteractivePrompt ?? viewModel.pendingApproval;
27917
27966
  const activePromptRequestId = activePrompt?.requestId ?? null;
27918
27967
  const sessionChrome = useMemo11(
@@ -28653,11 +28702,36 @@ var AgentGUIDetailPane = memo3(function AgentGUIDetailPane2({
28653
28702
  [bottomDockComposerProps]
28654
28703
  );
28655
28704
  const emptyHeroProvider = viewModel.selectedProviderTarget?.provider ?? viewModel.data.provider;
28656
- const emptyHeroProviderLabel = labels.emptyProviderForProvider?.(emptyHeroProvider) ?? labels.emptyProvider ?? "";
28657
- const emptyHeroLabel = labels.emptyForProvider?.(emptyHeroProvider) ?? labels.empty;
28705
+ const emptyHeroRuntimeProviderLabel = labels.emptyProviderForProvider?.(emptyHeroProvider) ?? labels.emptyProvider ?? "";
28706
+ const emptyHeroProviderLabel = viewModel.selectedProviderTarget?.label ?? emptyHeroRuntimeProviderLabel;
28707
+ const emptyHeroBaseLabel = labels.emptyForProvider?.(emptyHeroProvider) ?? labels.empty;
28708
+ const emptyHeroLabel = emptyHeroRuntimeProviderLabel ? emptyHeroBaseLabel.replace(
28709
+ emptyHeroRuntimeProviderLabel,
28710
+ emptyHeroProviderLabel
28711
+ ) : emptyHeroBaseLabel;
28658
28712
  const emptyHeroIconPresentations = useMemo11(
28659
- () => viewModel.conversationFilter.kind === "all" ? agentGUILaunchpadIconPresentations() : [agentGUIProviderIconPresentation(emptyHeroProvider)],
28660
- [emptyHeroProvider, viewModel.conversationFilter]
28713
+ () => viewModel.conversationFilter.kind === "all" ? viewModel.providerTargets.map((target) => ({
28714
+ agentTargetId: target.agentTargetId ?? target.targetId,
28715
+ provider: target.provider,
28716
+ iconUrl: agentGUIProviderRailIconPresentation(
28717
+ target.provider,
28718
+ target.iconUrl
28719
+ ).iconUrl
28720
+ })) : [
28721
+ {
28722
+ ...agentGUIProviderIconPresentation(
28723
+ emptyHeroProvider,
28724
+ viewModel.selectedProviderTarget?.iconUrl
28725
+ ),
28726
+ agentTargetId: viewModel.selectedProviderTarget?.agentTargetId ?? viewModel.selectedProviderTarget?.targetId
28727
+ }
28728
+ ],
28729
+ [
28730
+ emptyHeroProvider,
28731
+ viewModel.conversationFilter.kind,
28732
+ viewModel.providerTargets,
28733
+ viewModel.selectedProviderTarget
28734
+ ]
28661
28735
  );
28662
28736
  const disabledProviderTarget = selectedProviderTargetComingSoon ? viewModel.selectedProviderTarget ?? null : null;
28663
28737
  const shouldRenderProviderUnavailableState = !hasActiveConversation && disabledProviderTarget !== null && renderProviderUnavailableState !== void 0;
@@ -29056,7 +29130,14 @@ var AgentGUIDetailPane = memo3(function AgentGUIDetailPane2({
29056
29130
  viewportTestId: "agent-gui-timeline",
29057
29131
  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(),
29058
29132
  viewportContentStyle: AGENT_GUI_TIMELINE_SCROLL_AREA_CONTENT_STYLE,
29059
- children: !hasActiveConversation ? shouldRenderProviderUnavailableState && disabledProviderTarget ? /* @__PURE__ */ jsx35(Fragment9, { children: renderProviderUnavailableState?.({
29133
+ children: !hasActiveConversation ? agentsLoadedEmpty ? renderAgentsEmpty ? /* @__PURE__ */ jsx35(Fragment9, { children: renderAgentsEmpty() }) : /* @__PURE__ */ jsx35(
29134
+ "div",
29135
+ {
29136
+ className: AgentGUINode_styles_default.emptyHero,
29137
+ "data-testid": "agent-gui-agents-empty",
29138
+ children: /* @__PURE__ */ jsx35("div", { className: AgentGUINode_styles_default.emptyHeroBody, children: /* @__PURE__ */ jsx35("h2", { className: AgentGUINode_styles_default.emptyHeroTitle, children: labels.agentsEmpty }) })
29139
+ }
29140
+ ) : shouldRenderProviderUnavailableState && disabledProviderTarget ? /* @__PURE__ */ jsx35(Fragment9, { children: renderProviderUnavailableState?.({
29060
29141
  provider: disabledProviderTarget.provider,
29061
29142
  providerLabel: labels.emptyProviderForProvider?.(
29062
29143
  disabledProviderTarget.provider
@@ -29280,7 +29361,7 @@ var AgentGUIEmptyHeroPane = memo3(function AgentGUIEmptyHeroPane2({
29280
29361
  /* @__PURE__ */ jsx35("div", { className: AgentGUINode_styles_default.emptyHeroIconSlot, children: heroIconPresentations.length > 1 ? /* @__PURE__ */ jsx35(
29281
29362
  AgentGUIHeroAgentCarousel,
29282
29363
  {
29283
- activeProvider: provider,
29364
+ activeAgentTargetId: selectedProviderTarget?.agentTargetId ?? selectedProviderTarget?.targetId,
29284
29365
  icons: heroIconPresentations,
29285
29366
  providerTargets,
29286
29367
  onProviderSelect,
@@ -29347,8 +29428,15 @@ var AgentGUIProviderReadinessGatePane = memo3(
29347
29428
  "use memo";
29348
29429
  const heroIconUrl = resolveAgentGUIHeroIconUrl(provider);
29349
29430
  const launchpadIconPresentations = useMemo11(
29350
- () => agentGUILaunchpadIconPresentations(),
29351
- []
29431
+ () => providerTargets.map((target) => ({
29432
+ agentTargetId: target.agentTargetId ?? target.targetId,
29433
+ provider: target.provider,
29434
+ iconUrl: agentGUIProviderRailIconPresentation(
29435
+ target.provider,
29436
+ target.iconUrl
29437
+ ).iconUrl
29438
+ })),
29439
+ [providerTargets]
29352
29440
  );
29353
29441
  const pendingAction = gate.pendingAction ?? null;
29354
29442
  const isPending = pendingAction !== null;
@@ -29369,7 +29457,7 @@ var AgentGUIProviderReadinessGatePane = memo3(
29369
29457
  showAllProviders ? /* @__PURE__ */ jsx35(
29370
29458
  AgentGUIHeroAgentCarousel,
29371
29459
  {
29372
- activeProvider: provider,
29460
+ activeAgentTargetId: selectedProviderTarget?.agentTargetId ?? selectedProviderTarget?.targetId,
29373
29461
  icons: launchpadIconPresentations,
29374
29462
  providerTargets,
29375
29463
  onProviderSelect,
@@ -29539,7 +29627,7 @@ function EmptyHeroTitle({
29539
29627
  return /* @__PURE__ */ jsx35(Fragment9, { children: label });
29540
29628
  }
29541
29629
  const providerEnd = providerStart + providerLabel.length;
29542
- const selectedProviderTargetId = selectedProviderTarget?.targetId ?? `local:${selectedProviderTarget?.provider ?? ""}`;
29630
+ const selectedAgentTargetId = selectedProviderTarget?.targetId ?? `local:${selectedProviderTarget?.provider ?? ""}`;
29543
29631
  const canSwitchProvider = providerTargets.length > 1 && selectedProviderTarget && onProviderSelect;
29544
29632
  const providerName = label.slice(providerStart, providerEnd);
29545
29633
  return /* @__PURE__ */ jsxs22(Fragment9, { children: [
@@ -29547,7 +29635,7 @@ function EmptyHeroTitle({
29547
29635
  canSwitchProvider ? /* @__PURE__ */ jsxs22(
29548
29636
  Select3,
29549
29637
  {
29550
- value: selectedProviderTargetId,
29638
+ value: selectedAgentTargetId,
29551
29639
  onValueChange: (nextTargetId) => {
29552
29640
  const target = providerTargets.find(
29553
29641
  (candidate) => candidate.targetId === nextTargetId
@@ -29557,7 +29645,7 @@ function EmptyHeroTitle({
29557
29645
  }
29558
29646
  onProviderSelect({
29559
29647
  provider: target.provider,
29560
- providerTargetId: target.targetId
29648
+ agentTargetId: target.targetId
29561
29649
  });
29562
29650
  },
29563
29651
  children: [
@@ -30154,43 +30242,6 @@ function conversationSyncStatesRenderEqual(left, right) {
30154
30242
  function conversationProjectsRenderEqual2(left, right) {
30155
30243
  return left === right || (!left || !right ? !left && !right : left.id === right.id && left.path === right.path && left.label === right.label && left.sectionKey === right.sectionKey && left.createdAtUnixMs === right.createdAtUnixMs && left.updatedAtUnixMs === right.updatedAtUnixMs && left.lastUsedAtUnixMs === right.lastUsedAtUnixMs);
30156
30244
  }
30157
- var agentGUIProviderRailOrder = [
30158
- "codex",
30159
- "claude-code",
30160
- "cursor",
30161
- "tutti-agent",
30162
- "nexight",
30163
- "opencode",
30164
- "hermes",
30165
- "openclaw"
30166
- ];
30167
- var agentGUIProviderRailDefaultProviders = [
30168
- "codex",
30169
- "claude-code",
30170
- "cursor",
30171
- "hermes",
30172
- "openclaw"
30173
- ];
30174
- var agentGUIProviderRailDisabledProviders = /* @__PURE__ */ new Set([
30175
- "nexight",
30176
- "hermes",
30177
- "openclaw"
30178
- ]);
30179
- function agentGUIProviderRailOrderIndex(provider) {
30180
- const index = agentGUIProviderRailOrder.indexOf(provider);
30181
- return index < 0 ? agentGUIProviderRailOrder.length : index;
30182
- }
30183
- function agentGUILaunchpadIconPresentations() {
30184
- return [
30185
- agentGUIProviderRailIconPresentation("codex"),
30186
- agentGUIProviderRailIconPresentation("claude-code"),
30187
- agentGUIProviderRailIconPresentation("cursor"),
30188
- agentGUIProviderRailIconPresentation("tutti"),
30189
- agentGUIProviderRailIconPresentation("opencode"),
30190
- agentGUIProviderRailIconPresentation("hermes"),
30191
- agentGUIProviderRailIconPresentation("openclaw")
30192
- ];
30193
- }
30194
30245
  function agentGUIConversationProviderIconUrl(provider) {
30195
30246
  return resolveAgentGuiSessionProviderFlatIconUrl(provider);
30196
30247
  }
@@ -30219,37 +30270,8 @@ function agentGUIProviderRailAriaLabel(label, badgeLabel) {
30219
30270
  function agentGUIProviderTargetMatchesConversationFilter(target, filter) {
30220
30271
  return filter.kind === "agentTarget" && (target.agentTargetId?.trim() ?? "") === filter.agentTargetId;
30221
30272
  }
30222
- function agentGUIProviderRailTargets(providerTargets, providerTargetsLoading, comingSoonProviders, providerRailMode) {
30223
- if (providerTargetsLoading) {
30224
- return [];
30225
- }
30226
- if (providerRailMode === "exact") {
30227
- return providerTargets;
30228
- }
30229
- const comingSoon = new Set(comingSoonProviders);
30230
- const source = providerTargets.length > 0 && !agentGUIProviderRailTargetsAreFullLocalFallback(providerTargets) ? providerTargets : [];
30231
- const seenProviders = new Set(source.map((target) => target.provider));
30232
- const missingDefaultProviders = agentGUIProviderRailDefaultProviders.filter(
30233
- (provider) => !seenProviders.has(provider)
30234
- );
30235
- if (source.length > 0 && missingDefaultProviders.length === 0) {
30236
- return source;
30237
- }
30238
- return [
30239
- ...source,
30240
- ...missingDefaultProviders.map(
30241
- (provider) => agentGUIProviderRailDisabledProviders.has(provider) || comingSoon.has(provider) ? createDisabledPlaceholderAgentGUIProviderTarget(provider) : createLocalAgentGUIProviderTarget(provider)
30242
- )
30243
- ];
30244
- }
30245
- function agentGUIProviderRailTargetsAreFullLocalFallback(providerTargets) {
30246
- if (providerTargets.length !== agentGUIProviderRailOrder.length) {
30247
- return false;
30248
- }
30249
- const fallbackProviders = new Set(agentGUIProviderRailOrder);
30250
- return providerTargets.every(
30251
- (target) => fallbackProviders.has(target.provider) && target.ref.kind === "local" && target.ref.provider === target.provider && target.targetId === `local:${target.provider}`
30252
- );
30273
+ function agentGUIProviderRailTargets(providerTargets, providerTargetsLoading) {
30274
+ return providerTargetsLoading ? [] : providerTargets;
30253
30275
  }
30254
30276
  var AGENT_GUI_PROVIDER_RAIL_DRAG_HYSTERESIS_PX = 8;
30255
30277
  var AgentGUIProviderRail = memo3(function AgentGUIProviderRail2({
@@ -30260,10 +30282,8 @@ var AgentGUIProviderRail = memo3(function AgentGUIProviderRail2({
30260
30282
  selectedProviderTarget,
30261
30283
  providerTargets,
30262
30284
  providerTargetsLoading,
30263
- providerRailMode,
30264
30285
  renderProviderRailEmpty,
30265
30286
  providerRailAllPresentation,
30266
- comingSoonProviders,
30267
30287
  onRequestComposerFocus,
30268
30288
  onSelectConversationFilterTarget,
30269
30289
  onUpdateConversationFilter
@@ -30305,51 +30325,16 @@ var AgentGUIProviderRail = memo3(function AgentGUIProviderRail2({
30305
30325
  [providerRailOrderStorageKey]
30306
30326
  );
30307
30327
  const railProviderTargets = useMemo11(
30308
- () => agentGUIProviderRailTargets(
30309
- providerTargets,
30310
- providerTargetsLoading,
30311
- comingSoonProviders,
30312
- providerRailMode
30313
- ),
30314
- [
30315
- comingSoonProviders,
30316
- providerRailMode,
30317
- providerTargets,
30318
- providerTargetsLoading
30319
- ]
30328
+ () => agentGUIProviderRailTargets(providerTargets, providerTargetsLoading),
30329
+ [providerTargets, providerTargetsLoading]
30320
30330
  );
30321
30331
  const providerTiles = useMemo11(() => {
30322
- const targets = [...railProviderTargets];
30323
- const orderedTargets = providerRailMode === "exact" ? targets : (() => {
30324
- const originalIndexByTarget = /* @__PURE__ */ new Map();
30325
- targets.forEach((target, index) => {
30326
- originalIndexByTarget.set(
30327
- `${target.provider}\0${target.targetId}`,
30328
- index
30329
- );
30330
- });
30331
- return targets.sort((left, right) => {
30332
- const orderDelta = agentGUIProviderRailOrderIndex(left.provider) - agentGUIProviderRailOrderIndex(right.provider);
30333
- if (orderDelta !== 0) {
30334
- return orderDelta;
30335
- }
30336
- return (originalIndexByTarget.get(
30337
- `${left.provider}\0${left.targetId}`
30338
- ) ?? 0) - (originalIndexByTarget.get(
30339
- `${right.provider}\0${right.targetId}`
30340
- ) ?? 0);
30341
- });
30342
- })();
30343
- return applyAgentGUIProviderRailOrder(orderedTargets, providerRailOrder);
30344
- }, [providerRailMode, providerRailOrder, railProviderTargets]);
30345
- const visibleProviderTiles = useMemo11(() => {
30346
- if (!providerTiles.some((target) => target.provider === "tutti-agent")) {
30347
- return providerTiles;
30348
- }
30349
- return providerTiles.filter(
30350
- (target) => target.provider !== "nexight" || target.disabled !== true
30332
+ return applyAgentGUIProviderRailOrder(
30333
+ railProviderTargets,
30334
+ providerRailOrder
30351
30335
  );
30352
- }, [providerTiles]);
30336
+ }, [providerRailOrder, railProviderTargets]);
30337
+ const visibleProviderTiles = providerTiles;
30353
30338
  const selectedProviderTargetIsPlaceholder = selectedProviderTarget?.disabled === true;
30354
30339
  const allTileSelected = conversationFilter.kind === "all" && !selectedProviderTargetIsPlaceholder;
30355
30340
  const selectAllProviders = useCallback11(() => {
@@ -30359,7 +30344,7 @@ var AgentGUIProviderRail = memo3(function AgentGUIProviderRail2({
30359
30344
  if (fallbackTarget) {
30360
30345
  onSelectConversationFilterTarget({
30361
30346
  provider: fallbackTarget.provider,
30362
- providerTargetId: fallbackTarget.targetId
30347
+ agentTargetId: fallbackTarget.targetId
30363
30348
  });
30364
30349
  }
30365
30350
  }
@@ -30375,7 +30360,7 @@ var AgentGUIProviderRail = memo3(function AgentGUIProviderRail2({
30375
30360
  (target) => {
30376
30361
  onSelectConversationFilterTarget({
30377
30362
  provider: target.provider,
30378
- providerTargetId: target.targetId
30363
+ agentTargetId: target.targetId
30379
30364
  });
30380
30365
  onRequestComposerFocus();
30381
30366
  },
@@ -30452,7 +30437,7 @@ var AgentGUIProviderRail = memo3(function AgentGUIProviderRail2({
30452
30437
  "[data-provider-tile='true']"
30453
30438
  )
30454
30439
  ).map((element) => {
30455
- const targetId = element.dataset.providerTargetId?.trim() ?? "";
30440
+ const targetId = element.dataset.agentTargetId?.trim() ?? "";
30456
30441
  if (!targetId || targetId === activeDragState.draggedTargetId) {
30457
30442
  return null;
30458
30443
  }
@@ -30518,7 +30503,7 @@ var AgentGUIProviderRail = memo3(function AgentGUIProviderRail2({
30518
30503
  )
30519
30504
  );
30520
30505
  const dropTargets = tileElements.map((element) => {
30521
- const targetId = element.dataset.providerTargetId?.trim() ?? "";
30506
+ const targetId = element.dataset.agentTargetId?.trim() ?? "";
30522
30507
  if (!targetId || targetId === activeDragState.draggedTargetId) {
30523
30508
  return null;
30524
30509
  }
@@ -30548,7 +30533,7 @@ var AgentGUIProviderRail = memo3(function AgentGUIProviderRail2({
30548
30533
  },
30549
30534
  [dragState, previewMode, providerTargetsLoading, setProviderRailDragState]
30550
30535
  );
30551
- if (providerRailMode === "exact" && !providerTargetsLoading && visibleProviderTiles.length === 0 && renderProviderRailEmpty) {
30536
+ if (!providerTargetsLoading && visibleProviderTiles.length === 0 && renderProviderRailEmpty) {
30552
30537
  return /* @__PURE__ */ jsx35(
30553
30538
  "div",
30554
30539
  {
@@ -30556,8 +30541,7 @@ var AgentGUIProviderRail = memo3(function AgentGUIProviderRail2({
30556
30541
  role: "tablist",
30557
30542
  "aria-label": labels.providerSwitchLabel,
30558
30543
  "aria-busy": providerTargetsLoading,
30559
- "data-empty": "true",
30560
- children: renderProviderRailEmpty()
30544
+ "data-empty": "true"
30561
30545
  }
30562
30546
  );
30563
30547
  }
@@ -30571,29 +30555,31 @@ var AgentGUIProviderRail = memo3(function AgentGUIProviderRail2({
30571
30555
  onDragOver: handleProviderRailContainerDragOver,
30572
30556
  onDrop: commitProviderRailDragDrop,
30573
30557
  children: [
30574
- /* @__PURE__ */ jsxs22(
30575
- "button",
30576
- {
30577
- type: "button",
30578
- role: "tab",
30579
- "aria-label": labels.conversationFilterAll,
30580
- "aria-selected": allTileSelected,
30581
- className: AgentGUINode_styles_default.providerRailTile,
30582
- "data-selected": allTileSelected ? "true" : "false",
30583
- disabled: previewMode,
30584
- onClick: selectAllProviders,
30585
- children: [
30586
- /* @__PURE__ */ jsx35(
30587
- AgentGUIUnifiedProviderIcon,
30588
- {
30589
- presentation: providerRailAllPresentation
30590
- }
30591
- ),
30592
- /* @__PURE__ */ jsx35("span", { className: AgentGUINode_styles_default.providerRailTileLabel, children: labels.conversationFilterAll })
30593
- ]
30594
- }
30595
- ),
30596
- /* @__PURE__ */ jsx35("span", { "aria-hidden": "true", className: AgentGUINode_styles_default.providerRailSeparator }),
30558
+ visibleProviderTiles.length > 1 ? /* @__PURE__ */ jsxs22(Fragment9, { children: [
30559
+ /* @__PURE__ */ jsxs22(
30560
+ "button",
30561
+ {
30562
+ type: "button",
30563
+ role: "tab",
30564
+ "aria-label": labels.conversationFilterAll,
30565
+ "aria-selected": allTileSelected,
30566
+ className: AgentGUINode_styles_default.providerRailTile,
30567
+ "data-selected": allTileSelected ? "true" : "false",
30568
+ disabled: previewMode,
30569
+ onClick: selectAllProviders,
30570
+ children: [
30571
+ /* @__PURE__ */ jsx35(
30572
+ AgentGUIUnifiedProviderIcon,
30573
+ {
30574
+ presentation: providerRailAllPresentation
30575
+ }
30576
+ ),
30577
+ /* @__PURE__ */ jsx35("span", { className: AgentGUINode_styles_default.providerRailTileLabel, children: labels.conversationFilterAll })
30578
+ ]
30579
+ }
30580
+ ),
30581
+ /* @__PURE__ */ jsx35("span", { "aria-hidden": "true", className: AgentGUINode_styles_default.providerRailSeparator })
30582
+ ] }) : null,
30597
30583
  providerTargetsLoading ? [0, 1, 2].map((index) => /* @__PURE__ */ jsx35(
30598
30584
  "button",
30599
30585
  {
@@ -30615,7 +30601,7 @@ var AgentGUIProviderRail = memo3(function AgentGUIProviderRail2({
30615
30601
  `provider-target-loading-${index}`
30616
30602
  )) : null,
30617
30603
  visibleProviderTiles.map((target) => {
30618
- const providerSelected = target.disabled === true ? selectedProviderTarget?.provider === target.provider && selectedProviderTarget?.targetId === target.targetId : agentGUIProviderTargetMatchesConversationFilter(
30604
+ const providerSelected = visibleProviderTiles.length === 1 ? true : target.disabled === true ? selectedProviderTarget?.provider === target.provider && selectedProviderTarget?.targetId === target.targetId : agentGUIProviderTargetMatchesConversationFilter(
30619
30605
  target,
30620
30606
  conversationFilter
30621
30607
  );
@@ -30640,7 +30626,7 @@ var AgentGUIProviderRail = memo3(function AgentGUIProviderRail2({
30640
30626
  "data-drag-over": dragState?.overTargetId === target.targetId ? dragState.position : void 0,
30641
30627
  "data-dragging": dragState?.draggedTargetId === target.targetId ? "true" : void 0,
30642
30628
  "data-provider-tile": "true",
30643
- "data-provider-target-id": target.targetId,
30629
+ "data-agent-target-id": target.targetId,
30644
30630
  "data-selected": providerSelected ? "true" : "false",
30645
30631
  disabled: previewMode,
30646
30632
  draggable: !previewMode && !providerTargetsLoading,
@@ -33391,10 +33377,7 @@ function resolveAgentGUIRailStatusProvider(input) {
33391
33377
  return target ? target.provider : null;
33392
33378
  }
33393
33379
  function agentGuiStateEquals(left, right) {
33394
- return left === right || left.provider === right.provider && (left.agentTargetId ?? null) === (right.agentTargetId ?? null) && (left.providerTargetId ?? null) === (right.providerTargetId ?? null) && agentGUIProviderTargetRefsEqual(
33395
- left.providerTargetRef,
33396
- right.providerTargetRef
33397
- ) && left.lastActiveAgentSessionId === right.lastActiveAgentSessionId && (left.lastActiveConversationTitle ?? null) === (right.lastActiveConversationTitle ?? null) && left.conversationRailWidthPx === right.conversationRailWidthPx && left.conversationRailCollapsed === right.conversationRailCollapsed && (left.composerOverrides?.model ?? null) === (right.composerOverrides?.model ?? null) && (left.composerOverrides?.reasoningEffort ?? null) === (right.composerOverrides?.reasoningEffort ?? null) && (left.composerOverrides?.planMode ?? null) === (right.composerOverrides?.planMode ?? null) && (left.composerOverrides?.permissionModeId ?? null) === (right.composerOverrides?.permissionModeId ?? null) && composerOverridesByProviderEqual(
33380
+ return left === right || left.provider === right.provider && (left.agentTargetId ?? null) === (right.agentTargetId ?? null) && left.lastActiveAgentSessionId === right.lastActiveAgentSessionId && (left.lastActiveConversationTitle ?? null) === (right.lastActiveConversationTitle ?? null) && left.conversationRailWidthPx === right.conversationRailWidthPx && left.conversationRailCollapsed === right.conversationRailCollapsed && (left.composerOverrides?.model ?? null) === (right.composerOverrides?.model ?? null) && (left.composerOverrides?.reasoningEffort ?? null) === (right.composerOverrides?.reasoningEffort ?? null) && (left.composerOverrides?.planMode ?? null) === (right.composerOverrides?.planMode ?? null) && (left.composerOverrides?.permissionModeId ?? null) === (right.composerOverrides?.permissionModeId ?? null) && composerOverridesByProviderEqual(
33398
33381
  left.composerOverridesByProvider,
33399
33382
  right.composerOverridesByProvider
33400
33383
  ) && composerOverridesByAgentTargetIdEqual(
@@ -33432,7 +33415,7 @@ function composerOverridesByAgentTargetIdEqual(left, right) {
33432
33415
  return true;
33433
33416
  }
33434
33417
  function areAgentGUINodePropsEqual(previous, next) {
33435
- return previous.nodeId === next.nodeId && previous.workspaceId === next.workspaceId && previous.currentUserId === next.currentUserId && previous.workspacePath === next.workspacePath && previous.workspaceFileReferenceAdapter === next.workspaceFileReferenceAdapter && previous.resolveDroppedFileReferences === next.resolveDroppedFileReferences && previous.selectProjectDirectory === next.selectProjectDirectory && previous.referenceSourceAggregator === next.referenceSourceAggregator && previous.resolveWorkspaceReferenceEntryIconUrl === next.resolveWorkspaceReferenceEntryIconUrl && previous.resolveMentionReferenceTarget === next.resolveMentionReferenceTarget && previous.resolveWorkspaceReferenceInitialTarget === next.resolveWorkspaceReferenceInitialTarget && previous.onWorkspaceFileReferencesAdded === next.onWorkspaceFileReferencesAdded && previous.agentSettings.avoidGroupingEdits === next.agentSettings.avoidGroupingEdits && previous.title === next.title && agentGuiStateEquals(previous.state, next.state) && previous.position.x === next.position.x && previous.position.y === next.position.y && previous.width === next.width && previous.height === next.height && previous.desktopSize.width === next.desktopSize.width && previous.desktopSize.height === next.desktopSize.height && previous.onLinkAction === next.onLinkAction && previous.onHandoffConversation === next.onHandoffConversation && previous.onCapabilitySettingsRequest === next.onCapabilitySettingsRequest && previous.onAgentProviderLogin === next.onAgentProviderLogin && previous.accountMenuState === next.accountMenuState && previous.providerTargets === next.providerTargets && previous.providerTargetsLoading === next.providerTargetsLoading && previous.providerRailAllPresentation?.iconUrl === next.providerRailAllPresentation?.iconUrl && previous.slashCommandFallbackMode === next.slashCommandFallbackMode && previous.renderSidebarFooter === next.renderSidebarFooter && previous.providerRailMode === next.providerRailMode && previous.renderProviderRailEmpty === next.renderProviderRailEmpty && previous.renderProviderUnavailableState === next.renderProviderUnavailableState && previous.renderProviderReadinessGateState === next.renderProviderReadinessGateState && previous.comingSoonProviders === next.comingSoonProviders && previous.providerReadinessGates === next.providerReadinessGates && previous.defaultProviderTargetId === next.defaultProviderTargetId && previous.onClose === next.onClose && previous.onResize === next.onResize && previous.onUpdateNode === next.onUpdateNode && previous.onRememberComposerDefaults === next.onRememberComposerDefaults && previous.onOpenConversationWindow === next.onOpenConversationWindow && previous.isMaximized === next.isMaximized && previous.isMuted === next.isMuted && previous.onMinimize === next.onMinimize && previous.onToggleMaximize === next.onToggleMaximize && previous.onShowMessage === next.onShowMessage && previous.workspaceAgentProbes === next.workspaceAgentProbes && previous.onAgentProbeDemandChange === next.onAgentProbeDemandChange && previous.onAgentProbeRefreshRequest === next.onAgentProbeRefreshRequest && previous.providerAuthAccountLabels === next.providerAuthAccountLabels && previous.managedAgentsState === next.managedAgentsState && previous.contextMentionProviders === next.contextMentionProviders && previous.workspaceAppIcons === next.workspaceAppIcons && previous.embedded === next.embedded && previous.previewMode === next.previewMode && previous.isActive === next.isActive && previous.composerFocusRequestSequence === next.composerFocusRequestSequence && previous.newConversationRequestSequence === next.newConversationRequestSequence && previous.openSessionRequest === next.openSessionRequest && previous.prefillPromptRequest === next.prefillPromptRequest;
33418
+ return previous.nodeId === next.nodeId && previous.workspaceId === next.workspaceId && previous.currentUserId === next.currentUserId && previous.workspacePath === next.workspacePath && previous.workspaceFileReferenceAdapter === next.workspaceFileReferenceAdapter && previous.resolveDroppedFileReferences === next.resolveDroppedFileReferences && previous.selectProjectDirectory === next.selectProjectDirectory && previous.referenceSourceAggregator === next.referenceSourceAggregator && previous.resolveWorkspaceReferenceEntryIconUrl === next.resolveWorkspaceReferenceEntryIconUrl && previous.resolveMentionReferenceTarget === next.resolveMentionReferenceTarget && previous.resolveWorkspaceReferenceInitialTarget === next.resolveWorkspaceReferenceInitialTarget && previous.onWorkspaceFileReferencesAdded === next.onWorkspaceFileReferencesAdded && previous.agentSettings.avoidGroupingEdits === next.agentSettings.avoidGroupingEdits && previous.title === next.title && agentGuiStateEquals(previous.state, next.state) && previous.position.x === next.position.x && previous.position.y === next.position.y && previous.width === next.width && previous.height === next.height && previous.desktopSize.width === next.desktopSize.width && previous.desktopSize.height === next.desktopSize.height && previous.onLinkAction === next.onLinkAction && previous.onHandoffConversation === next.onHandoffConversation && previous.onCapabilitySettingsRequest === next.onCapabilitySettingsRequest && previous.onAgentProviderLogin === next.onAgentProviderLogin && previous.accountMenuState === next.accountMenuState && previous.agents === next.agents && previous.agentsLoading === next.agentsLoading && previous.allAgentsPresentation?.iconUrl === next.allAgentsPresentation?.iconUrl && previous.slashCommandFallbackMode === next.slashCommandFallbackMode && previous.renderSidebarFooter === next.renderSidebarFooter && previous.renderAgentsEmpty === next.renderAgentsEmpty && previous.renderAgentUnavailableState === next.renderAgentUnavailableState && previous.renderAgentReadinessState === next.renderAgentReadinessState && previous.onAgentAvailabilityAction === next.onAgentAvailabilityAction && previous.defaultAgentTargetId === next.defaultAgentTargetId && previous.onClose === next.onClose && previous.onResize === next.onResize && previous.onUpdateNode === next.onUpdateNode && previous.onRememberComposerDefaults === next.onRememberComposerDefaults && previous.onOpenConversationWindow === next.onOpenConversationWindow && previous.isMaximized === next.isMaximized && previous.isMuted === next.isMuted && previous.onMinimize === next.onMinimize && previous.onToggleMaximize === next.onToggleMaximize && previous.onShowMessage === next.onShowMessage && previous.workspaceAgentProbes === next.workspaceAgentProbes && previous.onAgentProbeDemandChange === next.onAgentProbeDemandChange && previous.onAgentProbeRefreshRequest === next.onAgentProbeRefreshRequest && previous.providerAuthAccountLabels === next.providerAuthAccountLabels && previous.managedAgentsState === next.managedAgentsState && previous.contextMentionProviders === next.contextMentionProviders && previous.workspaceAppIcons === next.workspaceAppIcons && previous.embedded === next.embedded && previous.previewMode === next.previewMode && previous.isActive === next.isActive && previous.composerFocusRequestSequence === next.composerFocusRequestSequence && previous.newConversationRequestSequence === next.newConversationRequestSequence && previous.openSessionRequest === next.openSessionRequest && previous.prefillPromptRequest === next.prefillPromptRequest;
33436
33419
  }
33437
33420
  var AgentGUINode = memo4(function AgentGUINode2({
33438
33421
  nodeId,
@@ -33460,18 +33443,16 @@ var AgentGUINode = memo4(function AgentGUINode2({
33460
33443
  onCapabilitySettingsRequest,
33461
33444
  onAgentProviderLogin,
33462
33445
  accountMenuState = null,
33463
- providerTargets,
33464
- providerTargetsLoading = false,
33465
- providerRailAllPresentation = null,
33446
+ agents = [],
33447
+ agentsLoading = false,
33448
+ allAgentsPresentation = null,
33466
33449
  slashCommandFallbackMode = "provider-default",
33467
- providerRailMode = "catalog",
33468
- renderProviderRailEmpty,
33469
- renderProviderUnavailableState,
33470
- renderProviderReadinessGateState,
33450
+ renderAgentsEmpty,
33451
+ renderAgentUnavailableState,
33452
+ renderAgentReadinessState,
33453
+ onAgentAvailabilityAction,
33471
33454
  renderSidebarFooter,
33472
- comingSoonProviders,
33473
- providerReadinessGates = null,
33474
- defaultProviderTargetId = null,
33455
+ defaultAgentTargetId = null,
33475
33456
  onWorkspaceFileReferencesAdded,
33476
33457
  onOpenConversationWindow,
33477
33458
  onClose,
@@ -33508,6 +33489,67 @@ var AgentGUINode = memo4(function AgentGUINode2({
33508
33489
  () => typeof i18n?.t === "function" ? createWorkspaceFileManagerI18nRuntime(i18n) : null,
33509
33490
  [i18n]
33510
33491
  );
33492
+ const normalizedAgents = useMemo12(
33493
+ () => normalizeAgentGUIAgents(agents),
33494
+ [agents]
33495
+ );
33496
+ const internalAgentTargets = useMemo12(
33497
+ () => projectAgentGUIAgentsToInternalTargets(normalizedAgents),
33498
+ [normalizedAgents]
33499
+ );
33500
+ const agentByTargetId = useMemo12(
33501
+ () => new Map(
33502
+ normalizedAgents.map((agent) => [agent.agentTargetId, agent])
33503
+ ),
33504
+ [normalizedAgents]
33505
+ );
33506
+ const selectedDirectoryAgent = useMemo12(() => {
33507
+ const selectedAgentTargetId = state.agentTargetId?.trim() || defaultAgentTargetId?.trim() || "";
33508
+ return agentByTargetId.get(selectedAgentTargetId) ?? normalizedAgents[0] ?? null;
33509
+ }, [
33510
+ agentByTargetId,
33511
+ defaultAgentTargetId,
33512
+ normalizedAgents,
33513
+ state.agentTargetId
33514
+ ]);
33515
+ const internalProviderReadinessGates = useMemo12(() => {
33516
+ if (!selectedDirectoryAgent || selectedDirectoryAgent.availability.status === "ready") {
33517
+ return {};
33518
+ }
33519
+ const agentTargetId = selectedDirectoryAgent.agentTargetId;
33520
+ return {
33521
+ [selectedDirectoryAgent.provider]: {
33522
+ status: selectedDirectoryAgent.availability.status,
33523
+ pendingAction: selectedDirectoryAgent.availability.pendingAction ?? null,
33524
+ onAction: (_provider, action) => {
33525
+ onAgentAvailabilityAction?.({ agentTargetId, action });
33526
+ }
33527
+ }
33528
+ };
33529
+ }, [onAgentAvailabilityAction, selectedDirectoryAgent]);
33530
+ const renderInternalAgentUnavailableState = useMemo12(() => {
33531
+ if (!renderAgentUnavailableState) {
33532
+ return void 0;
33533
+ }
33534
+ return ({ target }) => {
33535
+ const agentTargetId = target.agentTargetId?.trim() || target.targetId;
33536
+ const agent = agentByTargetId.get(agentTargetId);
33537
+ return agent ? renderAgentUnavailableState({ agent }) : null;
33538
+ };
33539
+ }, [agentByTargetId, renderAgentUnavailableState]);
33540
+ const renderInternalAgentReadinessState = useMemo12(() => {
33541
+ if (!renderAgentReadinessState) {
33542
+ return void 0;
33543
+ }
33544
+ return ({ target, showAllProviders }) => {
33545
+ const agentTargetId = target?.agentTargetId?.trim() || target?.targetId;
33546
+ const agent = agentTargetId ? agentByTargetId.get(agentTargetId) : selectedDirectoryAgent;
33547
+ return agent ? renderAgentReadinessState({
33548
+ agent,
33549
+ showAllAgents: showAllProviders
33550
+ }) : null;
33551
+ };
33552
+ }, [agentByTargetId, renderAgentReadinessState, selectedDirectoryAgent]);
33511
33553
  const handleLinkAction = useCallback13(
33512
33554
  (action) => {
33513
33555
  const agentTargetId = state.agentTargetId?.trim() || null;
@@ -33632,12 +33674,10 @@ var AgentGUINode = memo4(function AgentGUINode2({
33632
33674
  data: state,
33633
33675
  openSessionRequest,
33634
33676
  prefillPromptRequest,
33635
- providerTargets,
33636
- providerTargetsLoading,
33637
- providerRailMode,
33638
- comingSoonProviders,
33639
- providerReadinessGates,
33640
- defaultProviderTargetId,
33677
+ providerTargets: internalAgentTargets,
33678
+ providerTargetsLoading: agentsLoading,
33679
+ providerReadinessGates: internalProviderReadinessGates,
33680
+ defaultAgentTargetId,
33641
33681
  previewMode,
33642
33682
  onDataChange: handleDataChange,
33643
33683
  onRememberComposerDefaults,
@@ -33895,6 +33935,7 @@ var AgentGUINode = memo4(function AgentGUINode2({
33895
33935
  planImplementationSend: t("agentHost.agentGui.planImplementationSend"),
33896
33936
  planImplementationSkip: t("agentHost.agentGui.planImplementationSkip"),
33897
33937
  noRunningResponse: t("agentHost.agentGui.noRunningResponse"),
33938
+ agentsEmpty: t("agentHost.agentGui.agentsEmpty"),
33898
33939
  empty: t("agentHost.agentGui.empty", { provider: displayProviderLabel }),
33899
33940
  homeSuggestions: buildAgentHomeSuggestions(
33900
33941
  t,
@@ -34519,10 +34560,10 @@ var AgentGUINode = memo4(function AgentGUINode2({
34519
34560
  {
34520
34561
  viewModel,
34521
34562
  renderSidebarFooter,
34522
- renderProviderRailEmpty,
34523
- renderProviderUnavailableState,
34524
- renderProviderReadinessGateState,
34525
- providerRailAllPresentation,
34563
+ renderProviderRailEmpty: renderAgentsEmpty,
34564
+ renderProviderUnavailableState: renderInternalAgentUnavailableState,
34565
+ renderProviderReadinessGateState: renderInternalAgentReadinessState,
34566
+ providerRailAllPresentation: allAgentsPresentation,
34526
34567
  slashCommandFallbackMode,
34527
34568
  actions: viewActions,
34528
34569
  isActive,
@@ -34617,7 +34658,6 @@ export {
34617
34658
  AgentGuiI18nProvider,
34618
34659
  AgentQueuedPromptRuntimeProvider,
34619
34660
  agentActivityRuntimeCapabilityEnabled,
34620
- agentGUIDefaultTargetProviders,
34621
34661
  agentGuiDockIconUrl,
34622
34662
  agentGuiDockIconUrls,
34623
34663
  agentGuiI18nModule,
@@ -34625,15 +34665,10 @@ export {
34625
34665
  agentHostSnapshotFromAgentActivitySnapshot,
34626
34666
  buildAgentActivitySnapshotProjection,
34627
34667
  createAgentQueuedPromptRuntime,
34628
- createLocalAgentGUIProviderTarget,
34629
- createLocalAgentGUIProviderTargets,
34630
- createSharedAgentGUIProviderTarget,
34631
34668
  getAgentActivityRuntime,
34632
34669
  getAgentCustomMentionKind,
34633
34670
  getOptionalAgentActivityRuntime,
34634
- localAgentGUIAgentTargetId,
34635
- localAgentGUIProviderTargetId,
34636
- normalizeAgentGUIProviderTargets,
34671
+ normalizeAgentGUIAgents,
34637
34672
  preloadAgentMentionBrowse,
34638
34673
  projectCoreSessionStatus,
34639
34674
  registerAgentCustomMentionKind,
@@ -34641,7 +34676,6 @@ export {
34641
34676
  resetAgentCustomMentionKindsForTests,
34642
34677
  resetAgentQueuedPromptRuntimeForTests,
34643
34678
  resolveAgentGUIExpandedWindowFrame,
34644
- resolveAgentGUIProviderTarget,
34645
34679
  selectNeedsAttentionCount2 as selectNeedsAttentionCount,
34646
34680
  selectNeedsAttentionItems2 as selectNeedsAttentionItems,
34647
34681
  setAgentActivityRuntimeForTests,