@tutti-os/agent-gui 0.0.138 → 0.0.140

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 (69) hide show
  1. package/README.md +13 -7
  2. package/dist/{AgentRichTextReadonly-HCKTNAYO.js → AgentRichTextReadonly-ITYHQCN5.js} +5 -5
  3. package/dist/agent-conversation/index.d.ts +2 -2
  4. package/dist/agent-conversation/index.js +8 -8
  5. package/dist/agent-gui.d.ts +11 -2
  6. package/dist/agent-gui.js +17 -17
  7. package/dist/agent-message-center/index.js +6 -6
  8. package/dist/{agentGuiNodeTypes-DV7KvZRe.d.ts → agentGuiNodeTypes-D3f1yiEL.d.ts} +15 -1
  9. package/dist/agents.d.ts +1 -1
  10. package/dist/agents.js +1 -1
  11. package/dist/app/renderer/agentactivity.css +64 -83
  12. package/dist/{chunk-UA75CGAG.js → chunk-AVXN6UMO.js} +2 -2
  13. package/dist/{chunk-5WOCGIXJ.js → chunk-C4ACYHOY.js} +1 -4
  14. package/dist/chunk-C4ACYHOY.js.map +1 -0
  15. package/dist/{chunk-EU7DCT4F.js → chunk-D3VWQTDH.js} +2 -2
  16. package/dist/{chunk-R7AXDQCA.js → chunk-JDVP33S5.js} +6 -1
  17. package/dist/chunk-JDVP33S5.js.map +1 -0
  18. package/dist/{chunk-IN3HXYOO.js → chunk-MMEHSIWJ.js} +162 -12
  19. package/dist/chunk-MMEHSIWJ.js.map +1 -0
  20. package/dist/{chunk-IYZ4GOSN.js → chunk-MX2NPLCN.js} +4 -3
  21. package/dist/{chunk-IYZ4GOSN.js.map → chunk-MX2NPLCN.js.map} +1 -1
  22. package/dist/{chunk-25VMCMAQ.js → chunk-OEC2IIWG.js} +4 -4
  23. package/dist/{chunk-Y5HD6XHP.js → chunk-ORPU3AJK.js} +2558 -1432
  24. package/dist/chunk-ORPU3AJK.js.map +1 -0
  25. package/dist/{chunk-GIYGO2PB.js → chunk-OWJ7Q2DJ.js} +2 -2
  26. package/dist/{chunk-KWGMK4IZ.js → chunk-OXCHXPBD.js} +5 -5
  27. package/dist/{chunk-VGS7S7YT.js → chunk-Q2WMHYIB.js} +2 -2
  28. package/dist/{chunk-OFJNIQWR.js → chunk-RXOGBOK6.js} +2 -2
  29. package/dist/{chunk-OFJNIQWR.js.map → chunk-RXOGBOK6.js.map} +1 -1
  30. package/dist/{chunk-VUNVGEQG.js → chunk-S2D4NNEB.js} +49 -5
  31. package/dist/chunk-S2D4NNEB.js.map +1 -0
  32. package/dist/{chunk-USIFGHT3.js → chunk-VMPA46ET.js} +2 -2
  33. package/dist/{chunk-OI6BYC7P.js → chunk-WM63XUAL.js} +4 -4
  34. package/dist/{chunk-QPEO4OQS.js → chunk-WUMJJOK6.js} +31 -24
  35. package/dist/chunk-WUMJJOK6.js.map +1 -0
  36. package/dist/{chunk-JI5KND3K.js → chunk-XUFVBZUT.js} +8 -11
  37. package/dist/chunk-XUFVBZUT.js.map +1 -0
  38. package/dist/context-mention-palette/index.js +9 -9
  39. package/dist/{contribution-CDdwTppn.d.ts → contribution-CC2DVyUV.d.ts} +28 -2
  40. package/dist/i18n/index.d.ts +74 -40
  41. package/dist/i18n/index.js +2 -2
  42. package/dist/index.d.ts +111 -44
  43. package/dist/index.js +20 -17
  44. package/dist/index.js.map +1 -1
  45. package/dist/mention-search.js +7 -7
  46. package/dist/{types-ee3zJ6Cc.d.ts → types-DVmB_kyD.d.ts} +0 -2
  47. package/dist/workbench/contribution.d.ts +1 -1
  48. package/dist/workbench/contribution.js +10 -4
  49. package/dist/workbench/index.d.ts +6 -3
  50. package/dist/workbench/index.js +10 -4
  51. package/dist/workbench/sessionTitle.js +2 -2
  52. package/dist/workspace-agent-generated-files.js +2 -2
  53. package/package.json +13 -13
  54. package/dist/chunk-5WOCGIXJ.js.map +0 -1
  55. package/dist/chunk-IN3HXYOO.js.map +0 -1
  56. package/dist/chunk-JI5KND3K.js.map +0 -1
  57. package/dist/chunk-QPEO4OQS.js.map +0 -1
  58. package/dist/chunk-R7AXDQCA.js.map +0 -1
  59. package/dist/chunk-VUNVGEQG.js.map +0 -1
  60. package/dist/chunk-Y5HD6XHP.js.map +0 -1
  61. /package/dist/{AgentRichTextReadonly-HCKTNAYO.js.map → AgentRichTextReadonly-ITYHQCN5.js.map} +0 -0
  62. /package/dist/{chunk-UA75CGAG.js.map → chunk-AVXN6UMO.js.map} +0 -0
  63. /package/dist/{chunk-EU7DCT4F.js.map → chunk-D3VWQTDH.js.map} +0 -0
  64. /package/dist/{chunk-25VMCMAQ.js.map → chunk-OEC2IIWG.js.map} +0 -0
  65. /package/dist/{chunk-GIYGO2PB.js.map → chunk-OWJ7Q2DJ.js.map} +0 -0
  66. /package/dist/{chunk-KWGMK4IZ.js.map → chunk-OXCHXPBD.js.map} +0 -0
  67. /package/dist/{chunk-VGS7S7YT.js.map → chunk-Q2WMHYIB.js.map} +0 -0
  68. /package/dist/{chunk-USIFGHT3.js.map → chunk-VMPA46ET.js.map} +0 -0
  69. /package/dist/{chunk-OI6BYC7P.js.map → chunk-WM63XUAL.js.map} +0 -0
package/README.md CHANGED
@@ -85,6 +85,14 @@ accepted for host capabilities that are not agent activity data:
85
85
  AgentGUI has no host-API activity fallback. A host must inject the runtime and
86
86
  the grouped `AgentGUINodeProps` responsibility objects.
87
87
 
88
+ ## Session Handoff Drafts
89
+
90
+ External AgentGUI hosts can use `createAgentSessionHandoffPrompt` to prefill a
91
+ destination Agent composer with the same canonical complete-session mention as
92
+ AgentGUI's built-in Handoff menu. The helper owns mention serialization and the
93
+ trailing rich-text caret space; hosts continue to own destination selection and
94
+ window launch behavior.
95
+
88
96
  ## Boundary Rule
89
97
 
90
98
  `AgentActivity*` types from `@tutti-os/agent-activity-core` are the canonical
@@ -166,7 +174,7 @@ export interface AgentGUIAgent {
166
174
  agentTargetId: string;
167
175
  name: string;
168
176
  iconUrl: string;
169
- sidebarIconUrl?: string | null;
177
+ maskIconUrl?: string | null;
170
178
  heroImageUrl?: string | null;
171
179
  description?: string | null;
172
180
  owner?: {
@@ -199,12 +207,10 @@ Runnable provider targets are host-supplied. If the target catalog is absent,
199
207
  AgentGUI presents an explicit unavailable state; it does not synthesize local
200
208
  targets from presentation metadata.
201
209
 
202
- Agent names, primary icons, optional conversation-mask icons, optional
203
- rail-specific icons, and optional home-carousel artwork come from
204
- `agents[].name`, `agents[].iconUrl`, `agents[].maskIconUrl`,
205
- `agents[].sidebarIconUrl`, and `agents[].heroImageUrl`. Provider rail surfaces
206
- prefer `sidebarIconUrl`; conversation rows use `maskIconUrl` where present;
207
- other identity surfaces retain `iconUrl`.
210
+ Agent names, primary icons, optional conversation-mask icons, and optional
211
+ home-carousel artwork come from `agents[].name`, `agents[].iconUrl`,
212
+ `agents[].maskIconUrl`, and `agents[].heroImageUrl`. All identity surfaces use
213
+ `iconUrl`; conversation rows use `maskIconUrl` where present.
208
214
  `owner.avatarUrl` is rendered separately as an ownership badge. Invalid entries
209
215
  and duplicate `agentTargetId` values are discarded by
210
216
  `normalizeAgentGUIAgents`, with the first occurrence preserving host order.
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  AgentRichTextReadonly
3
- } from "./chunk-UA75CGAG.js";
4
- import "./chunk-QPEO4OQS.js";
3
+ } from "./chunk-AVXN6UMO.js";
4
+ import "./chunk-WUMJJOK6.js";
5
5
  import "./chunk-5QPOMKMQ.js";
6
6
  import "./chunk-FGLQZ6I4.js";
7
7
  import "./chunk-ZVYUTXQJ.js";
8
8
  import "./chunk-EDNJMG5T.js";
9
- import "./chunk-GIYGO2PB.js";
9
+ import "./chunk-OWJ7Q2DJ.js";
10
10
  import "./chunk-PJP5BUU6.js";
11
11
  import "./chunk-7KVZPJ3O.js";
12
- import "./chunk-VUNVGEQG.js";
12
+ import "./chunk-S2D4NNEB.js";
13
13
  import "./chunk-D2JUDUYY.js";
14
14
  import "./chunk-6CUELYIF.js";
15
15
  import "./chunk-QMMWKQOT.js";
16
16
  export {
17
17
  AgentRichTextReadonly
18
18
  };
19
- //# sourceMappingURL=AgentRichTextReadonly-HCKTNAYO.js.map
19
+ //# sourceMappingURL=AgentRichTextReadonly-ITYHQCN5.js.map
@@ -2,10 +2,10 @@ import * as react from 'react';
2
2
  import { ReactNode, JSX } from 'react';
3
3
  import { c as AgentConversationVM, g as WorkspaceLinkAction, f as WorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-DWEy7jzx.js';
4
4
  export { B as BuildWorkspaceAgentSessionDetailInput, W as WorkspaceAgentActivityCard, e as WorkspaceAgentActivityTimelineItem, h as buildWorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-DWEy7jzx.js';
5
- import { d as AgentGUIProviderSkillOption, h as AgentMessageMarkdownWorkspaceAppIcon } from '../agentGuiNodeTypes-DV7KvZRe.js';
5
+ import { d as AgentGUIProviderSkillOption, h as AgentMessageMarkdownWorkspaceAppIcon } from '../agentGuiNodeTypes-D3f1yiEL.js';
6
6
  import '@tutti-os/workspace-issue-manager/core';
7
7
  import '@tutti-os/agent-activity-core';
8
- import '../types-ee3zJ6Cc.js';
8
+ import '../types-DVmB_kyD.js';
9
9
  import '@tutti-os/workspace-user-project/contracts';
10
10
 
11
11
  interface AgentConversationFlowProps {
@@ -6,25 +6,25 @@ import {
6
6
  projectAgentConversationVM,
7
7
  reconcileProjectedAgentConversationVM,
8
8
  useProjectedAgentConversation
9
- } from "../chunk-JI5KND3K.js";
10
- import "../chunk-UA75CGAG.js";
9
+ } from "../chunk-XUFVBZUT.js";
10
+ import "../chunk-AVXN6UMO.js";
11
11
  import "../chunk-FM42UN2J.js";
12
12
  import "../chunk-XJ34OIEQ.js";
13
- import "../chunk-R7AXDQCA.js";
14
- import "../chunk-QPEO4OQS.js";
13
+ import "../chunk-JDVP33S5.js";
14
+ import "../chunk-WUMJJOK6.js";
15
15
  import "../chunk-5QPOMKMQ.js";
16
16
  import "../chunk-FGLQZ6I4.js";
17
- import "../chunk-IYZ4GOSN.js";
17
+ import "../chunk-MX2NPLCN.js";
18
18
  import "../chunk-ZVYUTXQJ.js";
19
- import "../chunk-OFJNIQWR.js";
19
+ import "../chunk-RXOGBOK6.js";
20
20
  import "../chunk-F5UR6EJG.js";
21
21
  import "../chunk-EDNJMG5T.js";
22
22
  import {
23
23
  translate
24
- } from "../chunk-GIYGO2PB.js";
24
+ } from "../chunk-OWJ7Q2DJ.js";
25
25
  import "../chunk-PJP5BUU6.js";
26
26
  import "../chunk-7KVZPJ3O.js";
27
- import "../chunk-VUNVGEQG.js";
27
+ import "../chunk-S2D4NNEB.js";
28
28
  import "../chunk-MIJXEELH.js";
29
29
  import "../chunk-D2JUDUYY.js";
30
30
  import "../chunk-6CUELYIF.js";
@@ -2,8 +2,8 @@ import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
3
  import { I18nRuntime } from '@tutti-os/ui-i18n-runtime';
4
4
  import { AgentActivityGoalControlInput, AgentActivityGoalControlResult, AgentActivityCreateSessionInput, AgentActivitySession, AgentActivityDeleteSessionInput, AgentActivityDeleteSessionResult, AgentActivitySendInput, AgentActivitySessionSettings, AgentActivityActivateSessionResult, AgentActivitySnapshot, AgentSessionEngine, AgentActivityMessageOrder, AgentActivityMessagePage, AgentActivitySendInputResult, AgentActivityRenameSessionInput, AgentActivitySubmitInteractiveInput, AgentActivitySubmitInteractiveResult, AgentActivitySnapshotListener, AgentActivitySubmitSettingsPatch } from '@tutti-os/agent-activity-core';
5
- import { k as AgentHostAgentSessionComposerSettings, o as AgentHostUnactivateAgentSessionResult, b as AgentGUIAgentTarget, f as AgentGUIProvider, p as AgentPromptContentBlock, e as AgentGUINodeData, P as Point, g as AgentGUIProviderRailAllPresentation, h as AgentGUIProviderRailMode, i as AgentGUIProviderReadinessGate, d as AgentGUIHomeSuggestionId, N as NodeFrame, a as AgentGUIAgentDirectorySnapshot, c as AgentGUIAllAgentsPresentation } from './types-ee3zJ6Cc.js';
6
- import { A as AgentComposerDraft, j as AgentSessionCommand, d as AgentGUIProviderSkillOption, b as AgentGUIComposerSettingsVM, e as AgentGUIQueueStatus, f as AgentGUIQueuedPromptVM, h as AgentMessageMarkdownWorkspaceAppIcon, k as AgentSlashCommandCapability, c as AgentGUINodeViewModel, i as AgentProbeSnapshot, a as AgentComposerDraftFile, g as AgentHostInputApi } from './agentGuiNodeTypes-DV7KvZRe.js';
5
+ import { k as AgentHostAgentSessionComposerSettings, o as AgentHostUnactivateAgentSessionResult, b as AgentGUIAgentTarget, f as AgentGUIProvider, p as AgentPromptContentBlock, e as AgentGUINodeData, P as Point, g as AgentGUIProviderRailAllPresentation, h as AgentGUIProviderRailMode, i as AgentGUIProviderReadinessGate, d as AgentGUIHomeSuggestionId, N as NodeFrame, a as AgentGUIAgentDirectorySnapshot, c as AgentGUIAllAgentsPresentation } from './types-DVmB_kyD.js';
6
+ import { A as AgentComposerDraft, j as AgentSessionCommand, d as AgentGUIProviderSkillOption, b as AgentGUIComposerSettingsVM, e as AgentGUIQueueStatus, f as AgentGUIQueuedPromptVM, h as AgentMessageMarkdownWorkspaceAppIcon, k as AgentSlashCommandCapability, c as AgentGUINodeViewModel, i as AgentProbeSnapshot, a as AgentComposerDraftFile, g as AgentHostInputApi } from './agentGuiNodeTypes-D3f1yiEL.js';
7
7
  import { WorkspaceFileReference, ReferenceLocateTarget, WorkspaceFileReferenceAdapter, ReferenceProvenanceCatalog } from '@tutti-os/workspace-file-reference/contracts';
8
8
  export { ReferenceProvenanceCatalog as AgentGUIReferenceProvenanceFilterCatalog } from '@tutti-os/workspace-file-reference/contracts';
9
9
  import { A as AgentContextMentionItem } from './agentFileMentionContracts-B0yQizXB.js';
@@ -457,6 +457,13 @@ interface AgentSettings {
457
457
  hideWorktreeMismatchDropWarning: boolean;
458
458
  }
459
459
 
460
+ type AgentGuiWorkbenchSessionAction = "rename" | "copy-markdown" | "copy-reference";
461
+ interface AgentGuiWorkbenchSessionActionRequest {
462
+ action: AgentGuiWorkbenchSessionAction;
463
+ agentSessionId: string | null;
464
+ sequence: number;
465
+ }
466
+
460
467
  interface AgentGUIAccountMenuState {
461
468
  user: {
462
469
  userId: string;
@@ -1021,10 +1028,12 @@ interface AgentGUINodeFrameLayout {
1021
1028
  */
1022
1029
  conversationRailAutoCollapseWidthPx?: number | null;
1023
1030
  }
1031
+ type AgentGUISessionActionRequest = AgentGuiWorkbenchSessionActionRequest;
1024
1032
  interface AgentGUINodeRuntimeRequests {
1025
1033
  composerAppend?: AgentGUIComposerAppendRequest | null;
1026
1034
  composerFocusSequence?: number | null;
1027
1035
  newConversationSequence?: number | null;
1036
+ sessionAction?: AgentGUISessionActionRequest | null;
1028
1037
  openSession?: AgentGUIOpenSessionRequest | null;
1029
1038
  prefillPrompt?: AgentGUIPrefillPromptRequest | null;
1030
1039
  agentProbes?: WorkspaceDesktopAgentProbesState | null;
package/dist/agent-gui.js CHANGED
@@ -1,41 +1,41 @@
1
1
  import {
2
2
  AgentGUI
3
- } from "./chunk-Y5HD6XHP.js";
3
+ } from "./chunk-ORPU3AJK.js";
4
4
  import "./chunk-A4WCTHWS.js";
5
- import "./chunk-IN3HXYOO.js";
5
+ import "./chunk-MMEHSIWJ.js";
6
6
  import "./chunk-TUWQV2MC.js";
7
7
  import "./chunk-MHOYBRCY.js";
8
- import "./chunk-VGS7S7YT.js";
8
+ import "./chunk-Q2WMHYIB.js";
9
9
  import "./chunk-5HIF53K5.js";
10
10
  import "./chunk-R2ZADXRB.js";
11
- import "./chunk-JI5KND3K.js";
12
- import "./chunk-UA75CGAG.js";
11
+ import "./chunk-XUFVBZUT.js";
12
+ import "./chunk-AVXN6UMO.js";
13
13
  import "./chunk-FM42UN2J.js";
14
14
  import "./chunk-UP3ZDYTN.js";
15
- import "./chunk-OI6BYC7P.js";
16
- import "./chunk-5WOCGIXJ.js";
15
+ import "./chunk-WM63XUAL.js";
16
+ import "./chunk-C4ACYHOY.js";
17
17
  import "./chunk-DXT4W2SU.js";
18
- import "./chunk-KWGMK4IZ.js";
19
- import "./chunk-USIFGHT3.js";
18
+ import "./chunk-OXCHXPBD.js";
19
+ import "./chunk-VMPA46ET.js";
20
20
  import "./chunk-XJ34OIEQ.js";
21
- import "./chunk-R7AXDQCA.js";
22
- import "./chunk-QPEO4OQS.js";
21
+ import "./chunk-JDVP33S5.js";
22
+ import "./chunk-WUMJJOK6.js";
23
23
  import "./chunk-5QPOMKMQ.js";
24
24
  import "./chunk-RMQREVJY.js";
25
25
  import "./chunk-FGLQZ6I4.js";
26
- import "./chunk-25VMCMAQ.js";
26
+ import "./chunk-OEC2IIWG.js";
27
27
  import "./chunk-2RQM7PJN.js";
28
- import "./chunk-IYZ4GOSN.js";
28
+ import "./chunk-MX2NPLCN.js";
29
29
  import "./chunk-ZVYUTXQJ.js";
30
- import "./chunk-EU7DCT4F.js";
30
+ import "./chunk-D3VWQTDH.js";
31
31
  import "./chunk-YMXYBG7U.js";
32
- import "./chunk-OFJNIQWR.js";
32
+ import "./chunk-RXOGBOK6.js";
33
33
  import "./chunk-F5UR6EJG.js";
34
34
  import "./chunk-EDNJMG5T.js";
35
- import "./chunk-GIYGO2PB.js";
35
+ import "./chunk-OWJ7Q2DJ.js";
36
36
  import "./chunk-PJP5BUU6.js";
37
37
  import "./chunk-7KVZPJ3O.js";
38
- import "./chunk-VUNVGEQG.js";
38
+ import "./chunk-S2D4NNEB.js";
39
39
  import "./chunk-MIJXEELH.js";
40
40
  import "./chunk-D2JUDUYY.js";
41
41
  import "./chunk-6CUELYIF.js";
@@ -6,7 +6,7 @@ import {
6
6
  dispatchAgentPlanPromptAction,
7
7
  getPromptToolDetails,
8
8
  isPromptRequestIdTitle
9
- } from "../chunk-25VMCMAQ.js";
9
+ } from "../chunk-OEC2IIWG.js";
10
10
  import {
11
11
  useEngineSelector
12
12
  } from "../chunk-2RQM7PJN.js";
@@ -19,20 +19,20 @@ import {
19
19
  isExitPlanSwitchModeInput,
20
20
  normalizeAgentApprovalPurpose,
21
21
  normalizeAskUserQuestions
22
- } from "../chunk-IYZ4GOSN.js";
22
+ } from "../chunk-MX2NPLCN.js";
23
23
  import {
24
24
  cn
25
25
  } from "../chunk-ZVYUTXQJ.js";
26
26
  import {
27
27
  userAvatarPlaceholderUrl,
28
28
  workspaceAgentActivityStatusLabel
29
- } from "../chunk-EU7DCT4F.js";
29
+ } from "../chunk-D3VWQTDH.js";
30
30
  import {
31
31
  resolveWorkspaceAgentSessionSortTimeUnixMs
32
32
  } from "../chunk-YMXYBG7U.js";
33
33
  import {
34
34
  workspaceAgentProviderLabel
35
- } from "../chunk-OFJNIQWR.js";
35
+ } from "../chunk-RXOGBOK6.js";
36
36
  import "../chunk-F5UR6EJG.js";
37
37
  import {
38
38
  managedAgentRoundedIconUrl
@@ -41,10 +41,10 @@ import {
41
41
  AgentGuiI18nProvider,
42
42
  getActiveUiLanguage,
43
43
  useTranslation
44
- } from "../chunk-GIYGO2PB.js";
44
+ } from "../chunk-OWJ7Q2DJ.js";
45
45
  import "../chunk-PJP5BUU6.js";
46
46
  import "../chunk-7KVZPJ3O.js";
47
- import "../chunk-VUNVGEQG.js";
47
+ import "../chunk-S2D4NNEB.js";
48
48
  import {
49
49
  normalizeAgentTitleText
50
50
  } from "../chunk-MIJXEELH.js";
@@ -1,5 +1,5 @@
1
1
  import { AgentActivitySession, AgentActivitySlashCommandPolicy, AgentActivityUsage, CanonicalAgentSession } from '@tutti-os/agent-activity-core';
2
- import { j as AgentHostAgentSessionCommand, k as AgentHostAgentSessionComposerSettings, m as AgentHostAgentSessionReasoningEffort, n as AgentHostAgentSessionSpeed, l as AgentHostAgentSessionPermissionConfig, f as AgentGUIProvider, p as AgentPromptContentBlock, e as AgentGUINodeData, b as AgentGUIAgentTarget, h as AgentGUIProviderRailMode, i as AgentGUIProviderReadinessGate } from './types-ee3zJ6Cc.js';
2
+ import { j as AgentHostAgentSessionCommand, k as AgentHostAgentSessionComposerSettings, m as AgentHostAgentSessionReasoningEffort, n as AgentHostAgentSessionSpeed, l as AgentHostAgentSessionPermissionConfig, f as AgentGUIProvider, p as AgentPromptContentBlock, e as AgentGUINodeData, b as AgentGUIAgentTarget, h as AgentGUIProviderRailMode, i as AgentGUIProviderReadinessGate } from './types-DVmB_kyD.js';
3
3
  import { A as AgentApprovalItemVM, a as AgentAskUserQuestionVM, b as AgentConversationPromptVM, c as AgentConversationVM, f as WorkspaceAgentSessionDetailViewModel } from './agentConversationVM-DWEy7jzx.js';
4
4
  import { WorkspaceUserProjectService } from '@tutti-os/workspace-user-project/contracts';
5
5
 
@@ -164,9 +164,23 @@ type AgentHostPersistenceApi = AgentHostRecord & {
164
164
  readWorkspaceAgentReadState: (input: ReadWorkspaceAgentReadStateInput) => AgentHostAsyncResult<WorkspaceAgentReadStateSnapshot>;
165
165
  writeWorkspaceAgentReadState: (input: WriteWorkspaceAgentReadStateInput) => AgentHostAsyncResult<PersistWriteResult>;
166
166
  };
167
+ type AgentHostToastHandle = {
168
+ /** Settles the toast to a neutral, non-error, non-success tone. */
169
+ info: (title: string, description?: string) => void;
170
+ /** Settles the toast to the destructive tone. */
171
+ reject: (title: string, description?: string) => void;
172
+ /** Settles the toast to the success tone. */
173
+ resolve: (title: string, description?: string) => void;
174
+ };
167
175
  type AgentHostToastApi = AgentHostRecord & {
168
176
  error: (title: string, description?: string) => void;
169
177
  info?: (title: string, description?: string) => void;
178
+ /**
179
+ * Opens one toast that stays mounted across async work: it shows busy
180
+ * (spinner, no auto-dismiss) until the returned handle settles it in
181
+ * place, at which point it starts auto-dismissing like any other toast.
182
+ */
183
+ loading?: (title: string) => AgentHostToastHandle;
170
184
  success?: (title: string, description?: string) => void;
171
185
  };
172
186
  interface AgentHostSelectedFile {
package/dist/agents.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { A as AgentGUIAgent, b as AgentGUIAgentTarget } from './types-ee3zJ6Cc.js';
1
+ import { A as AgentGUIAgent, b as AgentGUIAgentTarget } from './types-DVmB_kyD.js';
2
2
 
3
3
  declare function normalizeAgentGUIAgents(agents: readonly AgentGUIAgent[] | null | undefined): AgentGUIAgent[];
4
4
  declare function agentGUIAgentIsReady(agent: AgentGUIAgent): boolean;
package/dist/agents.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  normalizeAgentGUIAgents,
4
4
  projectAgentGUIAgentsToInternalTargets,
5
5
  resolveAgentGUISelectedDirectoryAgent
6
- } from "./chunk-5WOCGIXJ.js";
6
+ } from "./chunk-C4ACYHOY.js";
7
7
  export {
8
8
  agentGUIAgentIsReady,
9
9
  normalizeAgentGUIAgents,
@@ -4699,11 +4699,6 @@ aside.workspace-agents-status-panel
4699
4699
  position: relative;
4700
4700
  }
4701
4701
 
4702
- .workbench-window:has([data-agent-gui-workbench-header="true"])
4703
- .agent-gui-node__detail-header {
4704
- display: none;
4705
- }
4706
-
4707
4702
  .workbench-window:has([data-agent-gui-workbench-header="true"])
4708
4703
  .agent-gui-node__detail {
4709
4704
  padding-top: var(--agent-gui-workbench-header-height);
@@ -5072,10 +5067,11 @@ aside.workspace-agents-status-panel
5072
5067
  the whole rich title can share the Agent icon's vertical center directly. */
5073
5068
  .agent-gui-workbench-header__rich-title {
5074
5069
  display: block;
5075
- width: 0;
5070
+ width: max-content;
5076
5071
  min-width: 0;
5072
+ max-width: calc(100% - 36px);
5077
5073
  height: 24px;
5078
- flex: 1 1 0;
5074
+ flex: 0 1 auto;
5079
5075
  overflow: hidden;
5080
5076
  }
5081
5077
 
@@ -5145,7 +5141,7 @@ aside.workspace-agents-status-panel
5145
5141
 
5146
5142
  .agent-gui-workbench-header__session-title {
5147
5143
  display: flex;
5148
- flex: 1 1 auto;
5144
+ flex: 0 1 auto;
5149
5145
  max-width: min(100%, var(--agent-gui-workbench-header-title-max-width));
5150
5146
  margin-left: 4px;
5151
5147
  align-items: center;
@@ -5177,7 +5173,7 @@ aside.workspace-agents-status-panel
5177
5173
  .agent-gui-workbench-header__detail-title {
5178
5174
  display: flex;
5179
5175
  height: 100%;
5180
- flex: 1 1 auto;
5176
+ flex: 0 1 auto;
5181
5177
  max-width: min(100%, var(--agent-gui-workbench-header-title-max-width));
5182
5178
  min-width: 0;
5183
5179
  align-items: center;
@@ -5186,6 +5182,21 @@ aside.workspace-agents-status-panel
5186
5182
  pointer-events: none;
5187
5183
  }
5188
5184
 
5185
+ .agent-gui-workbench-header__session-title:has(
5186
+ .agent-gui-workbench-header__session-menu-trigger
5187
+ )
5188
+ > .agent-gui-workbench-header__title-text,
5189
+ .agent-gui-workbench-header__detail-title:has(
5190
+ .agent-gui-workbench-header__session-menu-trigger
5191
+ )
5192
+ > .agent-gui-workbench-header__title-text {
5193
+ max-width: calc(100% - 36px);
5194
+ }
5195
+
5196
+ .agent-gui-workbench-header__session-menu-trigger {
5197
+ pointer-events: auto;
5198
+ }
5199
+
5189
5200
  .workbench-window:has(
5190
5201
  .agent-gui-workbench-header[data-agent-gui-standalone-window-header="true"]
5191
5202
  )
@@ -6350,7 +6361,11 @@ button.agent-gui-node__conversation-section-toggle:hover
6350
6361
  }
6351
6362
 
6352
6363
  .agent-gui-node__conversation-item:focus-within,
6353
- .agent-gui-node__conversation-item:hover {
6364
+ .agent-gui-node__conversation-item:hover,
6365
+ .agent-gui-node__conversation-item[data-state="open"],
6366
+ .agent-gui-node__conversation-item:has(
6367
+ .agent-gui-node__conversation-actions [data-state="open"]
6368
+ ) {
6354
6369
  background-color: var(--agent-gui-surface-hover);
6355
6370
  }
6356
6371
 
@@ -6393,7 +6408,13 @@ button.agent-gui-node__conversation-section-toggle:hover
6393
6408
  padding-left: 26px;
6394
6409
  }
6395
6410
 
6396
- .agent-gui-node__conversation-item:hover .agent-gui-node__conversation-select {
6411
+ .agent-gui-node__conversation-item:hover .agent-gui-node__conversation-select,
6412
+ .agent-gui-node__conversation-item[data-state="open"]
6413
+ .agent-gui-node__conversation-select,
6414
+ .agent-gui-node__conversation-item:has(
6415
+ .agent-gui-node__conversation-actions [data-state="open"]
6416
+ )
6417
+ .agent-gui-node__conversation-select {
6397
6418
  grid-template-columns: minmax(0, 1fr) 0;
6398
6419
  padding-right: 96px;
6399
6420
  }
@@ -6442,6 +6463,22 @@ button.agent-gui-node__conversation-section-toggle:hover
6442
6463
  transform: translateY(-50%);
6443
6464
  }
6444
6465
 
6466
+ .agent-gui-node__conversation-more-button {
6467
+ background: transparent;
6468
+ color: var(--text-tertiary);
6469
+ }
6470
+
6471
+ .agent-gui-node__conversation-more-button svg {
6472
+ width: 16px;
6473
+ height: 16px;
6474
+ }
6475
+
6476
+ .agent-gui-node__conversation-more-button:not(:disabled):hover,
6477
+ .agent-gui-node__conversation-more-button:not(:disabled):focus-visible {
6478
+ background: var(--transparency-hover);
6479
+ color: var(--text-primary);
6480
+ }
6481
+
6445
6482
  .agent-gui-node__conversation-delete-button,
6446
6483
  .agent-gui-node__conversation-open-window-button,
6447
6484
  .agent-gui-node__conversation-pin-button {
@@ -6458,7 +6495,10 @@ button.agent-gui-node__conversation-section-toggle:hover
6458
6495
  }
6459
6496
 
6460
6497
  .agent-gui-node__conversation-item:hover .agent-gui-node__conversation-actions,
6461
- .agent-gui-node__conversation-actions:focus-within {
6498
+ .agent-gui-node__conversation-item[data-state="open"]
6499
+ .agent-gui-node__conversation-actions,
6500
+ .agent-gui-node__conversation-actions:focus-within,
6501
+ .agent-gui-node__conversation-actions:has([data-state="open"]) {
6462
6502
  opacity: 1;
6463
6503
  /* Only in the visible state: fading in on hover stays smooth while
6464
6504
  leaving the row swaps back to the meta icon instantly, with no
@@ -6498,9 +6538,15 @@ button.agent-gui-node__conversation-section-toggle:hover
6498
6538
  .agent-gui-node__conversation-item[data-pending-delete="true"]
6499
6539
  .agent-gui-node__conversation-meta,
6500
6540
  .agent-gui-node__conversation-item:hover .agent-gui-node__conversation-meta,
6541
+ .agent-gui-node__conversation-item[data-state="open"]
6542
+ .agent-gui-node__conversation-meta,
6501
6543
  .agent-gui-node__conversation-item:has(
6502
6544
  .agent-gui-node__conversation-actions:focus-within
6503
6545
  )
6546
+ .agent-gui-node__conversation-meta,
6547
+ .agent-gui-node__conversation-item:has(
6548
+ .agent-gui-node__conversation-actions [data-state="open"]
6549
+ )
6504
6550
  .agent-gui-node__conversation-meta {
6505
6551
  width: 0;
6506
6552
  min-width: 0;
@@ -6525,10 +6571,12 @@ button.agent-gui-node__conversation-section-toggle:hover
6525
6571
  height: 14px;
6526
6572
  color: var(--text-tertiary);
6527
6573
  background-color: currentColor;
6528
- mask: var(--agent-gui-conversation-provider-icon-url) center / contain
6529
- no-repeat;
6530
- -webkit-mask: var(--agent-gui-conversation-provider-icon-url) center / contain
6531
- no-repeat;
6574
+ mask-position: center;
6575
+ mask-repeat: no-repeat;
6576
+ mask-size: contain;
6577
+ -webkit-mask-position: center;
6578
+ -webkit-mask-repeat: no-repeat;
6579
+ -webkit-mask-size: contain;
6532
6580
  }
6533
6581
 
6534
6582
  .agent-gui-node__conversation-title-mention-icon {
@@ -7345,73 +7393,6 @@ button.agent-gui-node__conversation-section-toggle:hover
7345
7393
  justify-content: center;
7346
7394
  }
7347
7395
 
7348
- .agent-gui-node__detail-header {
7349
- display: flex;
7350
- align-items: center;
7351
- justify-content: space-between;
7352
- gap: 12px;
7353
- flex: 0 0 auto;
7354
- box-sizing: border-box;
7355
- height: 64px;
7356
- min-height: 64px;
7357
- padding: 0 var(--agent-gui-detail-padding-x);
7358
- }
7359
-
7360
- .agent-gui-node__detail-header-title-group {
7361
- display: flex;
7362
- flex: 1 1 auto;
7363
- min-width: 0;
7364
- max-width: 100%;
7365
- align-items: center;
7366
- gap: 6px;
7367
- }
7368
-
7369
- .agent-gui-node__detail-header-title {
7370
- min-width: 0;
7371
- overflow: hidden;
7372
- text-overflow: ellipsis;
7373
- white-space: nowrap;
7374
- color: var(--text-primary);
7375
- font-size: 15px;
7376
- font-weight: 600;
7377
- line-height: 20px;
7378
- }
7379
-
7380
- .agent-gui-node__detail-header-path-info {
7381
- display: inline-flex;
7382
- width: 20px;
7383
- height: 20px;
7384
- flex: 0 0 auto;
7385
- align-items: center;
7386
- justify-content: center;
7387
- border: 0;
7388
- border-radius: 4px;
7389
- background: transparent;
7390
- color: var(--text-secondary);
7391
- opacity: 0;
7392
- visibility: hidden;
7393
- transition:
7394
- background-color 120ms ease,
7395
- color 120ms ease,
7396
- opacity 120ms ease,
7397
- visibility 120ms ease;
7398
- }
7399
-
7400
- .agent-gui-node__detail-header-title-group:hover
7401
- .agent-gui-node__detail-header-path-info,
7402
- .agent-gui-node__detail-header-title-group:focus-within
7403
- .agent-gui-node__detail-header-path-info {
7404
- opacity: 1;
7405
- visibility: visible;
7406
- }
7407
-
7408
- .agent-gui-node__detail-header-path-info:hover,
7409
- .agent-gui-node__detail-header-path-info:focus-visible {
7410
- background: var(--transparency-hover);
7411
- color: var(--text-primary);
7412
- outline: none;
7413
- }
7414
-
7415
7396
  .agent-gui-node__layout [data-slot="status-dot"],
7416
7397
  [data-testid="workspace-agent-message-center"] [data-slot="status-dot"] {
7417
7398
  --agent-gui-status-dot-color: var(
@@ -5,7 +5,7 @@ import {
5
5
  formatAgentMentionMarkdown,
6
6
  mentionItemToAttrs,
7
7
  parseAgentMentionMarkdown
8
- } from "./chunk-QPEO4OQS.js";
8
+ } from "./chunk-WUMJJOK6.js";
9
9
  import {
10
10
  cn,
11
11
  resolveAgentTargetPresentation,
@@ -753,4 +753,4 @@ export {
753
753
  agentRichTextContentToPromptText,
754
754
  AgentRichTextReadonly
755
755
  };
756
- //# sourceMappingURL=chunk-UA75CGAG.js.map
756
+ //# sourceMappingURL=chunk-AVXN6UMO.js.map
@@ -7,7 +7,6 @@ function normalizeAgentGUIAgents(agents) {
7
7
  const name = agent.name.trim();
8
8
  const iconUrl = agent.iconUrl.trim();
9
9
  const maskIconUrl = agent.maskIconUrl?.trim() ?? "";
10
- const sidebarIconUrl = agent.sidebarIconUrl?.trim() ?? "";
11
10
  const heroImageUrl = agent.heroImageUrl?.trim() ?? "";
12
11
  if (!agentTargetId || !name || !iconUrl || seenAgentTargetIds.has(agentTargetId)) {
13
12
  continue;
@@ -21,7 +20,6 @@ function normalizeAgentGUIAgents(agents) {
21
20
  name,
22
21
  iconUrl,
23
22
  ...maskIconUrl ? { maskIconUrl } : {},
24
- ...sidebarIconUrl ? { sidebarIconUrl } : {},
25
23
  ...heroImageUrl ? { heroImageUrl } : {},
26
24
  ...agent.description?.trim() ? { description: agent.description.trim() } : {},
27
25
  ...ownerName || ownerAvatarUrl ? {
@@ -72,7 +70,6 @@ function projectAgentGUIAgentsToInternalTargets(agents) {
72
70
  ...agent.description ? { description: agent.description } : {},
73
71
  iconUrl: agent.iconUrl,
74
72
  ...agent.maskIconUrl ? { maskIconUrl: agent.maskIconUrl } : {},
75
- ...agent.sidebarIconUrl ? { sidebarIconUrl: agent.sidebarIconUrl } : {},
76
73
  ...agent.heroImageUrl ? { heroImageUrl: agent.heroImageUrl } : {},
77
74
  ...agent.owner?.avatarUrl ? {
78
75
  badge: {
@@ -104,4 +101,4 @@ export {
104
101
  resolveAgentGUISelectedDirectoryAgent,
105
102
  projectAgentGUIAgentsToInternalTargets
106
103
  };
107
- //# sourceMappingURL=chunk-5WOCGIXJ.js.map
104
+ //# sourceMappingURL=chunk-C4ACYHOY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../agents.ts"],"sourcesContent":["import type {\n AgentGUIAgent,\n AgentGUIAgentAvailabilityStatus,\n AgentGUIAgentTarget\n} from \"./types.ts\";\n\nexport function normalizeAgentGUIAgents(\n agents: readonly AgentGUIAgent[] | null | undefined\n): AgentGUIAgent[] {\n const normalized: AgentGUIAgent[] = [];\n const seenAgentTargetIds = new Set<string>();\n for (const agent of agents ?? []) {\n const agentTargetId = agent.agentTargetId.trim();\n const name = agent.name.trim();\n const iconUrl = agent.iconUrl.trim();\n const maskIconUrl = agent.maskIconUrl?.trim() ?? \"\";\n const heroImageUrl = agent.heroImageUrl?.trim() ?? \"\";\n if (\n !agentTargetId ||\n !name ||\n !iconUrl ||\n seenAgentTargetIds.has(agentTargetId)\n ) {\n continue;\n }\n seenAgentTargetIds.add(agentTargetId);\n const ownerName = agent.owner?.name?.trim() ?? \"\";\n const ownerAvatarUrl = agent.owner?.avatarUrl?.trim() ?? \"\";\n const reason = agent.availability.reason?.trim() ?? \"\";\n normalized.push({\n agentTargetId,\n name,\n iconUrl,\n ...(maskIconUrl ? { maskIconUrl } : {}),\n ...(heroImageUrl ? { heroImageUrl } : {}),\n ...(agent.description?.trim()\n ? { description: agent.description.trim() }\n : {}),\n ...(ownerName || ownerAvatarUrl\n ? {\n owner: {\n ...(ownerName ? { name: ownerName } : {}),\n ...(ownerAvatarUrl ? { avatarUrl: ownerAvatarUrl } : {})\n }\n }\n : {}),\n ...(agent.ownership === \"self\" || agent.ownership === \"shared\"\n ? { ownership: agent.ownership }\n : {}),\n availability: {\n status: normalizeAgentGUIAgentAvailabilityStatus(\n agent.availability.status\n ),\n ...(reason ? { reason } : {}),\n ...(agent.availability.pendingAction\n ? { pendingAction: agent.availability.pendingAction }\n : {})\n },\n provider: agent.provider,\n ...(agent.setupKind === \"target_runtime\"\n ? { setupKind: \"target_runtime\" as const }\n : {})\n });\n }\n return normalized;\n}\n\nexport function agentGUIAgentIsReady(agent: AgentGUIAgent): boolean {\n return agent.availability.status === \"ready\";\n}\n\nexport function resolveAgentGUISelectedDirectoryAgent(input: {\n agents: readonly AgentGUIAgent[];\n agentTargetId?: string | null;\n defaultAgentTargetId?: string | null;\n}): AgentGUIAgent | null {\n const explicitAgentTargetId =\n input.agentTargetId?.trim() || input.defaultAgentTargetId?.trim() || \"\";\n if (explicitAgentTargetId) {\n return (\n input.agents.find(\n (agent) => agent.agentTargetId === explicitAgentTargetId\n ) ?? null\n );\n }\n return (\n input.agents.find((agent) => agentGUIAgentIsReady(agent)) ??\n input.agents[0] ??\n null\n );\n}\n\n/** Package-internal bridge while the carried node is migrated to agent names. */\nexport function projectAgentGUIAgentsToInternalTargets(\n agents: readonly AgentGUIAgent[]\n): AgentGUIAgentTarget[] {\n return agents.map((agent) => ({\n targetId: agent.agentTargetId,\n agentTargetId: agent.agentTargetId,\n provider: agent.provider,\n ref: {\n kind: \"agent-directory\",\n provider: agent.provider,\n agentTargetId: agent.agentTargetId,\n ...(agent.setupKind ? { setupKind: agent.setupKind } : {})\n },\n label: agent.name,\n availability: agent.availability,\n ...(agent.description ? { description: agent.description } : {}),\n iconUrl: agent.iconUrl,\n ...(agent.maskIconUrl ? { maskIconUrl: agent.maskIconUrl } : {}),\n ...(agent.heroImageUrl ? { heroImageUrl: agent.heroImageUrl } : {}),\n ...(agent.owner?.avatarUrl\n ? {\n badge: {\n iconUrl: agent.owner.avatarUrl,\n ...(agent.owner.name ? { label: agent.owner.name } : {})\n }\n }\n : {}),\n ...(agent.owner?.name ? { ownerLabel: agent.owner.name } : {}),\n ...(agent.ownership ? { ownership: agent.ownership } : {}),\n ...(agent.availability.status !== \"ready\" && !agent.setupKind\n ? { disabled: true }\n : {}),\n ...(agent.availability.reason\n ? { unavailableReason: agent.availability.reason }\n : {})\n }));\n}\n\nfunction normalizeAgentGUIAgentAvailabilityStatus(\n status: AgentGUIAgentAvailabilityStatus\n): AgentGUIAgentAvailabilityStatus {\n switch (status) {\n case \"ready\":\n case \"checking\":\n case \"coming_soon\":\n case \"not_installed\":\n case \"auth_required\":\n case \"unavailable\":\n return status;\n }\n}\n"],"mappings":"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","names":[]}