@tutti-os/agent-gui 0.0.80 → 0.0.82

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 (47) hide show
  1. package/dist/agent-conversation/index.js +7 -7
  2. package/dist/agent-message-center/index.js +9 -9
  3. package/dist/app/renderer/agentactivity.css +1 -3
  4. package/dist/app/renderer/assets/icons/agents/agent-colorful.png +0 -0
  5. package/dist/app/renderer/assets/icons/agents/cursor-colorful.png +0 -0
  6. package/dist/app/renderer/assets/icons/agents/opencode-rounded.png +0 -0
  7. package/dist/app/renderer/assets/icons/agents/provider-rail-opencode-colorful.png +0 -0
  8. package/dist/{chunk-KELYWKTC.js → chunk-3PB2FL74.js} +3 -3
  9. package/dist/{chunk-GZX2SGAG.js → chunk-5BFYTHJB.js} +2 -2
  10. package/dist/{chunk-4TNM6ZEC.js → chunk-5WZEOARY.js} +3 -1
  11. package/dist/chunk-5WZEOARY.js.map +1 -0
  12. package/dist/{chunk-M6FZ2YIR.js → chunk-AIYGF64O.js} +2 -2
  13. package/dist/{chunk-WIRYWLAI.js → chunk-CCJUGHQQ.js} +5 -5
  14. package/dist/{chunk-U6AZ3XQS.js → chunk-DBIJRSFG.js} +4 -5
  15. package/dist/chunk-DBIJRSFG.js.map +1 -0
  16. package/dist/{chunk-5CLGEUWK.js → chunk-FYSYKWN6.js} +3 -3
  17. package/dist/{chunk-QDKD6RNC.js → chunk-GE4CCOWC.js} +5 -5
  18. package/dist/{chunk-RIRFNGPB.js → chunk-LR4FA5X6.js} +2 -2
  19. package/dist/{chunk-MNESUMOS.js → chunk-PVLUSXH5.js} +2 -2
  20. package/dist/{chunk-YWQHNFYA.js → chunk-T56L2H2H.js} +2 -2
  21. package/dist/{chunk-3B3KPQ4Y.js → chunk-U4F3VJ5C.js} +4 -4
  22. package/dist/{chunk-SYWMKIRW.js → chunk-XDV4ZRVK.js} +5 -5
  23. package/dist/{chunk-52GTPN7X.js → chunk-Z7KHS6LK.js} +2 -2
  24. package/dist/context-mention-palette/index.js +8 -8
  25. package/dist/i18n/index.d.ts +2 -0
  26. package/dist/i18n/index.js +2 -2
  27. package/dist/index.js +161 -66
  28. package/dist/index.js.map +1 -1
  29. package/dist/workbench/contribution.js +2 -2
  30. package/dist/workbench/index.js +5 -5
  31. package/dist/workbench/sessionTitle.js +3 -3
  32. package/dist/workspace-agent-generated-files.js +3 -3
  33. package/package.json +12 -12
  34. package/dist/chunk-4TNM6ZEC.js.map +0 -1
  35. package/dist/chunk-U6AZ3XQS.js.map +0 -1
  36. /package/dist/{chunk-KELYWKTC.js.map → chunk-3PB2FL74.js.map} +0 -0
  37. /package/dist/{chunk-GZX2SGAG.js.map → chunk-5BFYTHJB.js.map} +0 -0
  38. /package/dist/{chunk-M6FZ2YIR.js.map → chunk-AIYGF64O.js.map} +0 -0
  39. /package/dist/{chunk-WIRYWLAI.js.map → chunk-CCJUGHQQ.js.map} +0 -0
  40. /package/dist/{chunk-5CLGEUWK.js.map → chunk-FYSYKWN6.js.map} +0 -0
  41. /package/dist/{chunk-QDKD6RNC.js.map → chunk-GE4CCOWC.js.map} +0 -0
  42. /package/dist/{chunk-RIRFNGPB.js.map → chunk-LR4FA5X6.js.map} +0 -0
  43. /package/dist/{chunk-MNESUMOS.js.map → chunk-PVLUSXH5.js.map} +0 -0
  44. /package/dist/{chunk-YWQHNFYA.js.map → chunk-T56L2H2H.js.map} +0 -0
  45. /package/dist/{chunk-3B3KPQ4Y.js.map → chunk-U4F3VJ5C.js.map} +0 -0
  46. /package/dist/{chunk-SYWMKIRW.js.map → chunk-XDV4ZRVK.js.map} +0 -0
  47. /package/dist/{chunk-52GTPN7X.js.map → chunk-Z7KHS6LK.js.map} +0 -0
@@ -12,7 +12,7 @@ import {
12
12
  import {
13
13
  translate,
14
14
  translateInUiLanguage
15
- } from "./chunk-YWQHNFYA.js";
15
+ } from "./chunk-T56L2H2H.js";
16
16
  import {
17
17
  normalizeAgentTitleText
18
18
  } from "./chunk-GCBDIQDX.js";
@@ -826,4 +826,4 @@ export {
826
826
  resolveWorkspaceAgentActivityStatus,
827
827
  resolveWorkspaceAgentActivityTitle
828
828
  };
829
- //# sourceMappingURL=chunk-52GTPN7X.js.map
829
+ //# sourceMappingURL=chunk-Z7KHS6LK.js.map
@@ -4,19 +4,19 @@ import {
4
4
  AgentMentionSearchController,
5
5
  flattenAgentMentionPaletteEntries,
6
6
  groupStartKeys
7
- } from "../chunk-QDKD6RNC.js";
8
- import "../chunk-52GTPN7X.js";
9
- import "../chunk-GZX2SGAG.js";
7
+ } from "../chunk-GE4CCOWC.js";
8
+ import "../chunk-Z7KHS6LK.js";
9
+ import "../chunk-5BFYTHJB.js";
10
10
  import "../chunk-IBIMGLCD.js";
11
- import "../chunk-KELYWKTC.js";
11
+ import "../chunk-3PB2FL74.js";
12
12
  import "../chunk-Y35GDLP2.js";
13
13
  import "../chunk-LUGELG5V.js";
14
- import "../chunk-RIRFNGPB.js";
14
+ import "../chunk-LR4FA5X6.js";
15
15
  import "../chunk-4HP6V2YA.js";
16
- import "../chunk-YWQHNFYA.js";
16
+ import "../chunk-T56L2H2H.js";
17
17
  import "../chunk-PJP5BUU6.js";
18
- import "../chunk-SYWMKIRW.js";
19
- import "../chunk-4TNM6ZEC.js";
18
+ import "../chunk-XDV4ZRVK.js";
19
+ import "../chunk-5WZEOARY.js";
20
20
  import {
21
21
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
22
22
  } from "../chunk-JM24HADP.js";
@@ -2459,6 +2459,7 @@ declare const agentGuiI18nResources: {
2459
2459
  readonly agentLaunchFailed: "Agent launch failed: {{message}}";
2460
2460
  readonly agentResumeFailed: "Agent resume failed: {{message}}";
2461
2461
  readonly agentProviderSessionNotFound: "This session history is still available, but the underlying provider session can no longer be restored.";
2462
+ readonly agentTargetRemoved: "This agent no longer exists or has been removed. Its conversation history stays available to read.";
2462
2463
  readonly agentResumeSessionNotLocal: "This session cannot be resumed on this device. Start a new session and @this session to keep going.";
2463
2464
  readonly agentSettingsRequireNewSession: "This model can only be used in a new session to preserve context.";
2464
2465
  readonly agentPermissionModeAppliesNextTurn: "Permission mode will apply starting with your next message.";
@@ -4923,6 +4924,7 @@ declare const agentGuiI18nResources: {
4923
4924
  readonly agentLaunchFailed: "Agent 启动失败:{{message}}";
4924
4925
  readonly agentResumeFailed: "Agent 继续失败:{{message}}";
4925
4926
  readonly agentProviderSessionNotFound: "这条会话历史仍可查看,但底层 Provider 会话已经无法恢复。";
4927
+ readonly agentTargetRemoved: "该 agent 不存在或已被移除,历史会话记录仍可查看。";
4926
4928
  readonly agentResumeSessionNotLocal: "这个会话没法在当前设备里直接恢复,你可以在新会话里 @这段对话,接着继续聊。";
4927
4929
  readonly agentSettingsRequireNewSession: "为了保留上下文,这个模型只能在新会话中使用";
4928
4930
  readonly agentPermissionModeAppliesNextTurn: "权限模式将从你的下一条消息开始生效。";
@@ -6,8 +6,8 @@ import {
6
6
  translate,
7
7
  translateInUiLanguage,
8
8
  useTranslation
9
- } from "../chunk-YWQHNFYA.js";
10
- import "../chunk-4TNM6ZEC.js";
9
+ } from "../chunk-T56L2H2H.js";
10
+ import "../chunk-5WZEOARY.js";
11
11
  export {
12
12
  AgentGuiI18nProvider,
13
13
  agentGuiI18nModule,
package/dist/index.js CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  resolveAgentGuiSessionProviderFlatIconUrl,
12
12
  resolveNextAgentGUIConversationRailWidthPx,
13
13
  shouldAutoCollapseAgentGUIConversationRail
14
- } from "./chunk-U6AZ3XQS.js";
14
+ } from "./chunk-DBIJRSFG.js";
15
15
  import {
16
16
  agentGUIDefaultTargetProviders,
17
17
  agentGUIProviderTargetRefsEqual,
@@ -32,7 +32,7 @@ import {
32
32
  import {
33
33
  AgentInteractivePromptSurface,
34
34
  approvalOptionDisplayLabel
35
- } from "./chunk-3B3KPQ4Y.js";
35
+ } from "./chunk-U4F3VJ5C.js";
36
36
  import {
37
37
  PLAN_IMPLEMENTATION_ACTION_FEEDBACK,
38
38
  PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,
@@ -51,7 +51,7 @@ import {
51
51
  resolveAgentGUIExplicitConversationTitle,
52
52
  resolveAgentGUIProviderDisplayLabel,
53
53
  resolveAgentGUIProviderIdentity
54
- } from "./chunk-M6FZ2YIR.js";
54
+ } from "./chunk-AIYGF64O.js";
55
55
  import {
56
56
  AGENT_PASTED_TEXT_BLOCK_KIND,
57
57
  AGENT_PASTED_TEXT_MENTION_KIND,
@@ -88,14 +88,14 @@ import {
88
88
  textPromptContent,
89
89
  toLocalShortDateTime,
90
90
  useProjectedAgentConversation
91
- } from "./chunk-WIRYWLAI.js";
91
+ } from "./chunk-CCJUGHQQ.js";
92
92
  import {
93
93
  AgentMessageMarkdown,
94
94
  AgentTargetPresentationProvider,
95
95
  ZoomableImage,
96
96
  cn,
97
97
  resolveWorkspaceLinkAction
98
- } from "./chunk-5CLGEUWK.js";
98
+ } from "./chunk-FYSYKWN6.js";
99
99
  import {
100
100
  openAgentEnvPanel
101
101
  } from "./chunk-PSLAWU25.js";
@@ -106,12 +106,12 @@ import {
106
106
  DEFAULT_AGENT_MENTION_FILTER,
107
107
  agentMentionItemKey,
108
108
  preloadAgentMentionBrowse
109
- } from "./chunk-QDKD6RNC.js";
109
+ } from "./chunk-GE4CCOWC.js";
110
110
  import {
111
111
  buildWorkspaceAgentActivityListViewModel,
112
112
  isWorkspaceAgentUntitledTask
113
- } from "./chunk-52GTPN7X.js";
114
- import "./chunk-GZX2SGAG.js";
113
+ } from "./chunk-Z7KHS6LK.js";
114
+ import "./chunk-5BFYTHJB.js";
115
115
  import {
116
116
  resolveWorkspaceAgentSessionSortTimeUnixMs
117
117
  } from "./chunk-IBIMGLCD.js";
@@ -125,7 +125,7 @@ import {
125
125
  mentionItemToAttrs,
126
126
  normalizeAgentSessionMentionTitle,
127
127
  parseMentionItemFromHref
128
- } from "./chunk-KELYWKTC.js";
128
+ } from "./chunk-3PB2FL74.js";
129
129
  import "./chunk-Y35GDLP2.js";
130
130
  import "./chunk-LUGELG5V.js";
131
131
  import {
@@ -150,7 +150,7 @@ import {
150
150
  useAgentHostApi,
151
151
  useOptionalAgentActivityRuntime,
152
152
  useOptionalAgentHostApi
153
- } from "./chunk-RIRFNGPB.js";
153
+ } from "./chunk-LR4FA5X6.js";
154
154
  import {
155
155
  WORKSPACE_AGENT_ACTIVITY_RUNTIME_SESSION_ORIGIN,
156
156
  createWorkspaceAgentActivityUserMessageIdFromClientSubmitId,
@@ -166,14 +166,14 @@ import {
166
166
  agentGuiI18nResources,
167
167
  translate,
168
168
  useTranslation
169
- } from "./chunk-YWQHNFYA.js";
169
+ } from "./chunk-T56L2H2H.js";
170
170
  import "./chunk-PJP5BUU6.js";
171
171
  import {
172
172
  agentColorfulUrl,
173
173
  cursorColorfulUrl,
174
174
  normalizeManagedAgentProvider
175
- } from "./chunk-SYWMKIRW.js";
176
- import "./chunk-4TNM6ZEC.js";
175
+ } from "./chunk-XDV4ZRVK.js";
176
+ import "./chunk-5WZEOARY.js";
177
177
  import {
178
178
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
179
179
  } from "./chunk-JM24HADP.js";
@@ -6758,36 +6758,27 @@ function composerDefaultsPatchFromSettings(touched, finalSettings) {
6758
6758
  }
6759
6759
  function composerTargetDataFromProviderTarget(input) {
6760
6760
  const agentTargetId = normalizeOptionalText2(input.target.agentTargetId);
6761
- const useLegacyProviderTargetRef = !agentTargetId && input.isExplicit;
6762
- const providerTargetId = useLegacyProviderTargetRef ? input.target.targetId : null;
6763
- const providerTargetRef = useLegacyProviderTargetRef ? input.target.ref : null;
6764
6761
  const currentAgentTargetId = normalizeOptionalText2(
6765
6762
  input.current.agentTargetId
6766
6763
  );
6767
- const currentProviderTargetId = normalizeOptionalText2(
6768
- input.current.providerTargetId
6769
- );
6770
- const canPromoteLegacyComposerOverrides = agentTargetId !== null && currentAgentTargetId === null && currentProviderTargetId === null && input.current.providerTargetRef == null && input.current.provider === input.target.provider && input.current.composerOverrides != null && !input.current.composerOverridesByAgentTargetId?.[agentTargetId];
6764
+ 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];
6771
6765
  const composerOverridesByAgentTargetId = canPromoteLegacyComposerOverrides ? {
6772
6766
  ...input.current.composerOverridesByAgentTargetId ?? {},
6773
6767
  [agentTargetId]: input.current.composerOverrides
6774
6768
  } : input.current.composerOverridesByAgentTargetId;
6775
- const currentTargetIdentityChanged = input.current.provider !== input.target.provider || currentAgentTargetId !== null && currentAgentTargetId !== agentTargetId || currentProviderTargetId !== null && currentProviderTargetId !== providerTargetId || input.current.providerTargetRef != null && !agentGUIProviderTargetRefsEqual(
6776
- input.current.providerTargetRef,
6777
- providerTargetRef
6778
- );
6769
+ const currentTargetIdentityChanged = input.current.provider !== input.target.provider || currentAgentTargetId !== null && currentAgentTargetId !== agentTargetId;
6779
6770
  return {
6780
6771
  agentTargetId,
6781
6772
  provider: input.target.provider,
6782
- providerTargetId,
6783
- providerTargetRef,
6773
+ providerTargetId: null,
6774
+ providerTargetRef: null,
6784
6775
  targetId: input.target.targetId,
6785
6776
  data: {
6786
6777
  ...input.current,
6787
6778
  provider: input.target.provider,
6788
6779
  agentTargetId,
6789
- providerTargetId,
6790
- providerTargetRef,
6780
+ providerTargetId: null,
6781
+ providerTargetRef: null,
6791
6782
  composerOverrides: canPromoteLegacyComposerOverrides ? null : currentTargetIdentityChanged ? null : input.current.composerOverrides,
6792
6783
  composerOverridesByAgentTargetId
6793
6784
  }
@@ -6798,30 +6789,56 @@ function isExplicitAgentGUIProviderTarget(target, explicitTargets) {
6798
6789
  (candidate) => candidate.provider === target.provider && candidate.targetId === target.targetId && agentGUIProviderTargetRefsEqual(candidate.ref, target.ref)
6799
6790
  );
6800
6791
  }
6801
- function composerTargetDataFromNodeData(data) {
6802
- const agentTargetId = normalizeOptionalText2(data.agentTargetId);
6803
- const providerTargetId = data.providerTargetId ?? null;
6792
+ function findAgentGUIDirectoryTarget(directory, agentTargetId) {
6793
+ if (!agentTargetId || !directory) {
6794
+ return void 0;
6795
+ }
6796
+ return directory.find(
6797
+ (target) => normalizeOptionalText2(target.agentTargetId) === agentTargetId
6798
+ );
6799
+ }
6800
+ function composerTargetDataFromNodeData(data, directory) {
6801
+ const foreignKeyAgentTargetId = normalizeOptionalText2(data.agentTargetId);
6802
+ const lookupAgentTargetId = foreignKeyAgentTargetId ?? localAgentGUIAgentTargetId(data.provider);
6803
+ const directoryTarget = findAgentGUIDirectoryTarget(
6804
+ directory,
6805
+ lookupAgentTargetId
6806
+ );
6807
+ const agentTargetId = normalizeOptionalText2(directoryTarget?.agentTargetId) ?? foreignKeyAgentTargetId;
6808
+ const provider = directoryTarget?.provider ?? data.provider;
6804
6809
  return {
6805
6810
  agentTargetId,
6806
- provider: data.provider,
6807
- providerTargetId,
6808
- providerTargetRef: data.providerTargetRef ?? null,
6809
- targetId: agentTargetId ?? providerTargetId ?? `local:${data.provider}`,
6810
- data
6811
+ provider,
6812
+ providerTargetId: null,
6813
+ providerTargetRef: null,
6814
+ targetId: directoryTarget?.targetId ?? agentTargetId ?? `local:${provider}`,
6815
+ data: directoryTarget && directoryTarget.provider !== data.provider ? { ...data, provider } : data
6811
6816
  };
6812
6817
  }
6818
+ function resolveActiveSessionComposerTarget(input) {
6819
+ const foreignKey = normalizeOptionalText2(input.foreignKeyAgentTargetId);
6820
+ const target = composerTargetDataFromNodeData(input.data, input.directory);
6821
+ if (input.directoryLoading) {
6822
+ return { status: "loading", target, missingAgentTargetId: null };
6823
+ }
6824
+ const resolveKey = foreignKey ?? localAgentGUIAgentTargetId(input.data.provider);
6825
+ const directoryTarget = findAgentGUIDirectoryTarget(
6826
+ input.directory,
6827
+ resolveKey
6828
+ );
6829
+ if (directoryTarget) {
6830
+ return { status: "resolved", target, missingAgentTargetId: null };
6831
+ }
6832
+ return { status: "missing", target, missingAgentTargetId: resolveKey };
6833
+ }
6813
6834
  function agentGUINodeDataHasComposerTarget(data) {
6814
6835
  return normalizeOptionalText2(data.agentTargetId) !== null || normalizeOptionalText2(data.providerTargetId) !== null || data.providerTargetRef != null;
6815
6836
  }
6816
6837
  function composerOptionsForTarget(input) {
6817
- if (input.target.agentTargetId) {
6818
- const targetOptions = input.snapshot.composerOptionsByAgentTargetId?.[input.target.agentTargetId] ?? null;
6819
- if (targetOptions) {
6820
- return targetOptions;
6821
- }
6838
+ if (!input.target.agentTargetId) {
6822
6839
  return null;
6823
6840
  }
6824
- return input.snapshot.composerOptionsByProvider?.[input.target.provider] ?? null;
6841
+ return input.snapshot.composerOptionsByTargetKey?.[input.target.agentTargetId] ?? null;
6825
6842
  }
6826
6843
  function providerUsesModelImageInputSupport(provider) {
6827
6844
  const normalized = provider?.trim().toLowerCase();
@@ -9052,7 +9069,7 @@ function useAgentGUINodeController({
9052
9069
  current: data,
9053
9070
  isExplicit: selectedProviderTargetIsExplicit,
9054
9071
  target: selectedProviderTarget
9055
- }) : agentGUINodeDataHasComposerTarget(data) ? composerTargetDataFromNodeData(data) : composerTargetDataFromProviderTarget({
9072
+ }) : agentGUINodeDataHasComposerTarget(data) ? composerTargetDataFromNodeData(data, normalizedProviderTargets) : composerTargetDataFromProviderTarget({
9056
9073
  current: data,
9057
9074
  isExplicit: selectedProviderTargetIsExplicit,
9058
9075
  target: selectedProviderTarget
@@ -9062,6 +9079,7 @@ function useAgentGUINodeController({
9062
9079
  homeComposerTargetOverride,
9063
9080
  homeComposerTargetOverrideIsExplicit,
9064
9081
  nodeComposerTargetResolvedByProviderTarget,
9082
+ normalizedProviderTargets,
9065
9083
  selectedProviderTarget,
9066
9084
  selectedProviderTargetIsExplicit
9067
9085
  ]
@@ -9214,7 +9232,7 @@ function useAgentGUINodeController({
9214
9232
  sessionViewRef(activeConversationId)
9215
9233
  );
9216
9234
  const activeSessionState = activeSessionView?.controlState ?? null;
9217
- const composerTargetData = activeConversationId === null ? selectedComposerTargetData : composerTargetDataFromNodeData(data);
9235
+ const composerTargetData = activeConversationId === null ? selectedComposerTargetData : composerTargetDataFromNodeData(data, normalizedProviderTargets);
9218
9236
  const providerComposerOptions = composerOptionsForTarget({
9219
9237
  snapshot: agentActivitySnapshot,
9220
9238
  target: composerTargetData
@@ -9481,6 +9499,8 @@ function useAgentGUINodeController({
9481
9499
  providerTargetsProvidedRef.current = providerTargets !== void 0;
9482
9500
  const selectedComposerTargetDataRef = useRef4(selectedComposerTargetData);
9483
9501
  selectedComposerTargetDataRef.current = selectedComposerTargetData;
9502
+ const normalizedProviderTargetsRef = useRef4(normalizedProviderTargets);
9503
+ normalizedProviderTargetsRef.current = normalizedProviderTargets;
9484
9504
  const draftSettingsBySessionIdRef = useRef4(draftSettingsBySessionId);
9485
9505
  const onDataChangeRef = useRef4(onDataChange);
9486
9506
  const onRememberComposerDefaultsRef = useRef4(onRememberComposerDefaults);
@@ -11116,6 +11136,9 @@ function useAgentGUINodeController({
11116
11136
  (targetData, options) => {
11117
11137
  const provider = targetData.provider;
11118
11138
  const agentTargetId = targetData.agentTargetId;
11139
+ if (!agentTargetId) {
11140
+ return;
11141
+ }
11119
11142
  if (isCreatingConversationRef.current) {
11120
11143
  return;
11121
11144
  }
@@ -11140,7 +11163,10 @@ function useAgentGUINodeController({
11140
11163
  );
11141
11164
  const loadDraftComposerOptions = useCallback4(
11142
11165
  (options) => {
11143
- const targetData = activeConversationIdRef.current === null ? selectedComposerTargetDataRef.current : composerTargetDataFromNodeData(dataRef.current);
11166
+ const targetData = activeConversationIdRef.current === null ? selectedComposerTargetDataRef.current : composerTargetDataFromNodeData(
11167
+ dataRef.current,
11168
+ normalizedProviderTargetsRef.current
11169
+ );
11144
11170
  loadComposerOptionsForTarget(targetData, options);
11145
11171
  },
11146
11172
  [loadComposerOptionsForTarget]
@@ -14761,6 +14787,35 @@ function useAgentGUINodeController({
14761
14787
  providerTargetsLoading,
14762
14788
  shouldUseStaticProviderTargets
14763
14789
  ]);
14790
+ const activeSessionTargetResolution = useMemo3(() => {
14791
+ if (previewMode || activeConversationId === null) {
14792
+ return {
14793
+ status: "resolved",
14794
+ target: composerTargetDataFromNodeData(
14795
+ data,
14796
+ normalizedProviderTargets
14797
+ ),
14798
+ missingAgentTargetId: null
14799
+ };
14800
+ }
14801
+ return resolveActiveSessionComposerTarget({
14802
+ data,
14803
+ // The session record's own agentTargetId is the authoritative foreign
14804
+ // key; the node's persisted agentTargetId can lag when the reconcile
14805
+ // effect declines to overwrite an explicit target with a fallback.
14806
+ foreignKeyAgentTargetId: activeConversation?.agentTargetId ?? data.agentTargetId ?? null,
14807
+ directory: normalizedProviderTargets,
14808
+ directoryLoading: providerTargetsLoading
14809
+ });
14810
+ }, [
14811
+ activeConversation?.agentTargetId,
14812
+ activeConversationId,
14813
+ data,
14814
+ normalizedProviderTargets,
14815
+ previewMode,
14816
+ providerTargetsLoading
14817
+ ]);
14818
+ const activeSessionTargetMissing = activeSessionTargetResolution.status === "missing";
14764
14819
  const visibleConversationsRef = useRef4(
14765
14820
  null
14766
14821
  );
@@ -15146,7 +15201,11 @@ function useAgentGUINodeController({
15146
15201
  return {
15147
15202
  auth: hasProviderSessionNotFoundError ? null : authState !== "" ? { message: authMessageFromRuntime ?? authState } : isAuthError ? { message: normalizedError } : null,
15148
15203
  approval: pendingApproval,
15149
- recovery: activeLiveState === "activating" && // Suppress the "reconnecting" banner during a first-message create:
15204
+ recovery: activeSessionTargetMissing ? {
15205
+ kind: "failed",
15206
+ message: translate("messages.agentTargetRemoved"),
15207
+ canRetry: false
15208
+ } : activeLiveState === "activating" && // Suppress the "reconnecting" banner during a first-message create:
15150
15209
  // the user just submitted and is already seeing their optimistic
15151
15210
  // message, so an activation-in-flight state on the conversation they
15152
15211
  // just entered is not a recovery event.
@@ -15169,6 +15228,7 @@ function useAgentGUINodeController({
15169
15228
  activeConversationId,
15170
15229
  activeConversationResumeUnavailable,
15171
15230
  activeSessionState,
15231
+ activeSessionTargetMissing,
15172
15232
  hasProviderSessionNotFoundError,
15173
15233
  pendingApproval
15174
15234
  ]);
@@ -15502,7 +15562,7 @@ function useAgentGUINodeController({
15502
15562
  target: nextTarget
15503
15563
  });
15504
15564
  const nextAgentTargetId = currentNextTargetData.agentTargetId;
15505
- const currentTargetId = current.agentTargetId ?? current.providerTargetId ?? null;
15565
+ const currentTargetId = normalizeOptionalText2(current.agentTargetId);
15506
15566
  const nextTargetId = nextAgentTargetId ?? nextTarget.targetId;
15507
15567
  const providerTargetChanged = current.provider !== nextProvider || (currentTargetId !== null || nextAgentTargetId !== null) && currentTargetId !== nextTargetId;
15508
15568
  const nextData = {
@@ -16336,6 +16396,10 @@ import {
16336
16396
  Popover as Popover2,
16337
16397
  PopoverContent as PopoverContent2,
16338
16398
  PopoverTrigger,
16399
+ Select as Select3,
16400
+ SelectContent as SelectContent3,
16401
+ SelectItem as SelectItem3,
16402
+ SelectTrigger as SelectTrigger3,
16339
16403
  StatusDot,
16340
16404
  toastVariants,
16341
16405
  cn as cn3
@@ -28763,13 +28827,13 @@ function EmptyHeroTitle({
28763
28827
  const providerName = label.slice(providerStart, providerEnd);
28764
28828
  return /* @__PURE__ */ jsxs21(Fragment9, { children: [
28765
28829
  label.slice(0, providerStart),
28766
- canSwitchProvider ? /* @__PURE__ */ jsx34(
28767
- "select",
28830
+ canSwitchProvider ? /* @__PURE__ */ jsxs21(
28831
+ Select3,
28768
28832
  {
28769
28833
  value: selectedProviderTargetId,
28770
- onChange: (event) => {
28834
+ onValueChange: (nextTargetId) => {
28771
28835
  const target = enabledProviderTargets.find(
28772
- (candidate) => candidate.targetId === event.currentTarget.value
28836
+ (candidate) => candidate.targetId === nextTargetId
28773
28837
  );
28774
28838
  if (!target) {
28775
28839
  return;
@@ -28779,17 +28843,48 @@ function EmptyHeroTitle({
28779
28843
  providerTargetId: target.targetId
28780
28844
  });
28781
28845
  },
28782
- "aria-label": providerSelectLabel,
28783
- title: providerSelectLabel,
28784
- className: AgentGUINode_styles_default.emptyHeroProviderSelect,
28785
- children: enabledProviderTargets.map((target) => /* @__PURE__ */ jsx34(
28786
- "option",
28787
- {
28788
- value: target.targetId,
28789
- children: target.label
28790
- },
28791
- `${target.provider}:${target.targetId}`
28792
- ))
28846
+ children: [
28847
+ /* @__PURE__ */ jsx34(
28848
+ SelectTrigger3,
28849
+ {
28850
+ size: "sm",
28851
+ "aria-label": providerSelectLabel,
28852
+ title: providerSelectLabel,
28853
+ className: AgentGUINode_styles_default.emptyHeroProviderSelect,
28854
+ children: /* @__PURE__ */ jsx34("span", { className: AgentGUINode_styles_default.emptyHeroProvider, children: providerName })
28855
+ }
28856
+ ),
28857
+ /* @__PURE__ */ jsx34(
28858
+ SelectContent3,
28859
+ {
28860
+ align: "center",
28861
+ className: cn3(AgentGUINode_styles_default.composerMenuContent, "min-w-[190px]"),
28862
+ children: enabledProviderTargets.map((target) => /* @__PURE__ */ jsx34(
28863
+ SelectItem3,
28864
+ {
28865
+ value: target.targetId,
28866
+ className: cn3(AgentGUINode_styles_default.composerMenuItem, "gap-2"),
28867
+ children: /* @__PURE__ */ jsxs21("span", { className: "flex min-w-0 items-center gap-1.5", children: [
28868
+ /* @__PURE__ */ jsx34(
28869
+ "img",
28870
+ {
28871
+ alt: "",
28872
+ "aria-hidden": "true",
28873
+ className: "size-4 shrink-0 rounded-[4px]",
28874
+ src: agentGUIProviderRailIconPresentation(
28875
+ target.provider,
28876
+ target.iconUrl
28877
+ ).iconUrl
28878
+ }
28879
+ ),
28880
+ /* @__PURE__ */ jsx34("span", { className: "min-w-0 truncate", children: target.label })
28881
+ ] })
28882
+ },
28883
+ `${target.provider}:${target.targetId}`
28884
+ ))
28885
+ }
28886
+ )
28887
+ ]
28793
28888
  }
28794
28889
  ) : /* @__PURE__ */ jsx34("span", { className: AgentGUINode_styles_default.emptyHeroProvider, children: providerName }),
28795
28890
  label.slice(providerEnd)
@@ -29264,7 +29359,7 @@ function projectRuntimeSectionsToConversationSections(input) {
29264
29359
  conversationFilter: input.conversationFilter,
29265
29360
  provider: AGENT_GUI_CONVERSATION_RAIL_PROJECTION_PROVIDER,
29266
29361
  snapshot: {
29267
- composerOptionsByProvider: {},
29362
+ composerOptionsByTargetKey: {},
29268
29363
  presences: [],
29269
29364
  sessionMessagesById: {},
29270
29365
  sessions: input.pinned.sessions,
@@ -29287,7 +29382,7 @@ function projectRuntimeSectionsToConversationSections(input) {
29287
29382
  conversationFilter: input.conversationFilter,
29288
29383
  provider: AGENT_GUI_CONVERSATION_RAIL_PROJECTION_PROVIDER,
29289
29384
  snapshot: {
29290
- composerOptionsByProvider: {},
29385
+ composerOptionsByTargetKey: {},
29291
29386
  presences: [],
29292
29387
  sessionMessagesById: {},
29293
29388
  sessions: section.sessions,
@@ -30486,7 +30581,7 @@ function useAgentGUIConversationRail({
30486
30581
  conversationFilter,
30487
30582
  provider: AGENT_GUI_CONVERSATION_RAIL_PROJECTION_PROVIDER,
30488
30583
  snapshot: {
30489
- composerOptionsByProvider: {},
30584
+ composerOptionsByTargetKey: {},
30490
30585
  presences: [],
30491
30586
  sessionMessagesById: {},
30492
30587
  sessions: page.sessions,
@@ -30557,7 +30652,7 @@ function useAgentGUIConversationRail({
30557
30652
  conversationFilter,
30558
30653
  provider: AGENT_GUI_CONVERSATION_RAIL_PROJECTION_PROVIDER,
30559
30654
  snapshot: {
30560
- composerOptionsByProvider: {},
30655
+ composerOptionsByTargetKey: {},
30561
30656
  presences: [],
30562
30657
  sessionMessagesById: {},
30563
30658
  sessions: pageSection.sessions,