@tutti-os/agent-gui 0.0.94 → 0.0.96

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 (163) hide show
  1. package/README.md +86 -38
  2. package/dist/AgentGUI-DWdvUV4x.d.ts +1038 -0
  3. package/dist/agent-conversation/index.d.ts +6 -7
  4. package/dist/agent-conversation/index.js +15 -10
  5. package/dist/agent-conversation/index.js.map +1 -1
  6. package/dist/agent-env/index.d.ts +10 -36
  7. package/dist/agent-env/index.js +2 -57
  8. package/dist/agent-env/index.js.map +1 -1
  9. package/dist/agent-gui.d.ts +21 -0
  10. package/dist/agent-gui.js +39 -0
  11. package/dist/agent-message-center/index.d.ts +156 -124
  12. package/dist/agent-message-center/index.js +1656 -1463
  13. package/dist/agent-message-center/index.js.map +1 -1
  14. package/dist/{agentConversationVM-Cl4G0Lln.d.ts → agentConversationVM-C335TR6S.d.ts} +112 -7
  15. package/dist/agentFileMentionContracts-58IjMU-u.d.ts +108 -0
  16. package/dist/{agentGuiNodeTypes-CAioPXK9.d.ts → agentGuiNodeTypes-B9X4aWfv.d.ts} +123 -163
  17. package/dist/agentPlanPromptDispatch-C7cCMjve.d.ts +37 -0
  18. package/dist/agents.d.ts +13 -0
  19. package/dist/agents.js +13 -0
  20. package/dist/app/renderer/agentactivity.css +276 -83
  21. package/dist/app/renderer/assets/icons/agent-vinyls/tutti-vinyl.png +0 -0
  22. package/dist/app/renderer/assets/icons/open-link-lined.svg +4 -0
  23. package/dist/{chunk-7BUYFVRI.js → chunk-2HJEOO7W.js} +2931 -2946
  24. package/dist/chunk-2HJEOO7W.js.map +1 -0
  25. package/dist/{chunk-E5FOXRUM.js → chunk-3XXBDYAI.js} +293 -258
  26. package/dist/chunk-3XXBDYAI.js.map +1 -0
  27. package/dist/{chunk-ZUW4B5AT.js → chunk-3Y3F7CS5.js} +21 -32
  28. package/dist/chunk-3Y3F7CS5.js.map +1 -0
  29. package/dist/{chunk-SCLLP5DO.js → chunk-4PQPJ5OY.js} +50 -155
  30. package/dist/chunk-4PQPJ5OY.js.map +1 -0
  31. package/dist/chunk-4YG7YK7S.js +23 -0
  32. package/dist/chunk-4YG7YK7S.js.map +1 -0
  33. package/dist/chunk-5X7YDOC6.js +42 -0
  34. package/dist/chunk-5X7YDOC6.js.map +1 -0
  35. package/dist/{chunk-R2EWECUP.js → chunk-7BXWPI4F.js} +17 -2
  36. package/dist/{chunk-R2EWECUP.js.map → chunk-7BXWPI4F.js.map} +1 -1
  37. package/dist/chunk-AGT7MUTV.js +491 -0
  38. package/dist/chunk-AGT7MUTV.js.map +1 -0
  39. package/dist/chunk-C35SNDVZ.js +96 -0
  40. package/dist/chunk-C35SNDVZ.js.map +1 -0
  41. package/dist/{chunk-5FE7M42A.js → chunk-E4HQUTM3.js} +2 -2
  42. package/dist/chunk-FGLQZ6I4.js +9 -0
  43. package/dist/chunk-FGLQZ6I4.js.map +1 -0
  44. package/dist/chunk-H5F3QSCF.js +25 -0
  45. package/dist/chunk-H5F3QSCF.js.map +1 -0
  46. package/dist/chunk-H6IQ63DQ.js +14 -0
  47. package/dist/chunk-H6IQ63DQ.js.map +1 -0
  48. package/dist/{chunk-45FF4DQU.js → chunk-IYEXLOUE.js} +22 -27
  49. package/dist/chunk-IYEXLOUE.js.map +1 -0
  50. package/dist/{chunk-P72YLKC6.js → chunk-JKIZA7EJ.js} +3573 -3755
  51. package/dist/chunk-JKIZA7EJ.js.map +1 -0
  52. package/dist/chunk-KJQERFKX.js +259 -0
  53. package/dist/chunk-KJQERFKX.js.map +1 -0
  54. package/dist/{chunk-XW4CVBUH.js → chunk-L3GMMGRS.js} +25 -16
  55. package/dist/chunk-L3GMMGRS.js.map +1 -0
  56. package/dist/chunk-MASXZENX.js +231 -0
  57. package/dist/chunk-MASXZENX.js.map +1 -0
  58. package/dist/{chunk-BXVPOGYK.js → chunk-O3Q5SIJH.js} +505 -504
  59. package/dist/chunk-O3Q5SIJH.js.map +1 -0
  60. package/dist/{chunk-554VG7ZW.js → chunk-QVBF5BN5.js} +2 -2
  61. package/dist/{chunk-AWAIUYG4.js → chunk-RE4AXS27.js} +532 -565
  62. package/dist/chunk-RE4AXS27.js.map +1 -0
  63. package/dist/{chunk-7LMJXF4R.js → chunk-TVIGLNNI.js} +20 -16
  64. package/dist/chunk-TVIGLNNI.js.map +1 -0
  65. package/dist/{chunk-XDV4ZRVK.js → chunk-UGVI47X6.js} +98 -37
  66. package/dist/chunk-UGVI47X6.js.map +1 -0
  67. package/dist/{chunk-GAPTLVII.js → chunk-UHBCM6RO.js} +1 -1
  68. package/dist/chunk-UHBCM6RO.js.map +1 -0
  69. package/dist/{chunk-UBDPV34P.js → chunk-W6WAGPMD.js} +1385 -1305
  70. package/dist/chunk-W6WAGPMD.js.map +1 -0
  71. package/dist/chunk-WKSFPJHZ.js +33054 -0
  72. package/dist/chunk-WKSFPJHZ.js.map +1 -0
  73. package/dist/{chunk-IGY4ASUF.js → chunk-WMNS4MAQ.js} +1288 -1696
  74. package/dist/chunk-WMNS4MAQ.js.map +1 -0
  75. package/dist/{chunk-MATIJPGF.js → chunk-XPFHJMZP.js} +541 -401
  76. package/dist/chunk-XPFHJMZP.js.map +1 -0
  77. package/dist/chunk-YMXYBG7U.js +12 -0
  78. package/dist/chunk-YMXYBG7U.js.map +1 -0
  79. package/dist/context-mention-palette/index.d.ts +3 -2
  80. package/dist/context-mention-palette/index.js +17 -12
  81. package/dist/custom-mention.d.ts +42 -0
  82. package/dist/custom-mention.js +17 -0
  83. package/dist/custom-mention.js.map +1 -0
  84. package/dist/dock-icons.d.ts +4 -0
  85. package/dist/dock-icons.js +11 -0
  86. package/dist/dock-icons.js.map +1 -0
  87. package/dist/i18n/index.d.ts +880 -841
  88. package/dist/i18n/index.js +2 -2
  89. package/dist/index.d.ts +56 -1063
  90. package/dist/index.js +78 -35532
  91. package/dist/index.js.map +1 -1
  92. package/dist/mention-search.d.ts +226 -0
  93. package/dist/mention-search.js +29 -0
  94. package/dist/mention-search.js.map +1 -0
  95. package/dist/open-link-lined-JWEKUKME.svg +4 -0
  96. package/dist/pastedTextKinds-D-XuInaS.d.ts +4 -0
  97. package/dist/provider-icons.d.ts +6 -0
  98. package/dist/provider-icons.js +12 -0
  99. package/dist/provider-icons.js.map +1 -0
  100. package/dist/provider-identity.d.ts +9 -0
  101. package/dist/provider-identity.js +21 -0
  102. package/dist/provider-identity.js.map +1 -0
  103. package/dist/runtime-BBNdWgDU.d.ts +10 -0
  104. package/dist/startup-shell.d.ts +8 -0
  105. package/dist/startup-shell.js +184 -0
  106. package/dist/startup-shell.js.map +1 -0
  107. package/dist/{types-PLFZ8SBX.d.ts → types-CnT8rNUI.d.ts} +43 -87
  108. package/dist/workbench/contribution.d.ts +34 -41
  109. package/dist/workbench/contribution.js +10 -6
  110. package/dist/workbench/index.d.ts +5 -4
  111. package/dist/workbench/index.js +27 -25
  112. package/dist/workbench/launch.d.ts +4 -7
  113. package/dist/workbench/launch.js +4 -3
  114. package/dist/workbench/providerCatalog.d.ts +2 -2
  115. package/dist/workbench/providerCatalog.js +2 -1
  116. package/dist/workbench/sessionTitle.d.ts +11 -14
  117. package/dist/workbench/sessionTitle.js +6 -7
  118. package/dist/workbench/state.d.ts +1 -1
  119. package/dist/workbench/state.js +3 -2
  120. package/dist/workbench/types.d.ts +2 -4
  121. package/dist/workbench/types.js +1 -1
  122. package/dist/workspace-agent-generated-files.d.ts +20 -2
  123. package/dist/workspace-agent-generated-files.js +6 -5
  124. package/dist/workspaceAgentActivityListTypes-C7gPWYiA.d.ts +71 -0
  125. package/package.json +70 -26
  126. package/dist/AgentMentionSearchController-DD_WOred.d.ts +0 -241
  127. package/dist/AgentMessageMarkdown-DeYPURtF.d.ts +0 -7
  128. package/dist/chunk-45FF4DQU.js.map +0 -1
  129. package/dist/chunk-4HP6V2YA.js +0 -207
  130. package/dist/chunk-4HP6V2YA.js.map +0 -1
  131. package/dist/chunk-7BUYFVRI.js.map +0 -1
  132. package/dist/chunk-7LMJXF4R.js.map +0 -1
  133. package/dist/chunk-AWAIUYG4.js.map +0 -1
  134. package/dist/chunk-BXVPOGYK.js.map +0 -1
  135. package/dist/chunk-E5FOXRUM.js.map +0 -1
  136. package/dist/chunk-GAPTLVII.js.map +0 -1
  137. package/dist/chunk-IBIMGLCD.js +0 -66
  138. package/dist/chunk-IBIMGLCD.js.map +0 -1
  139. package/dist/chunk-IGY4ASUF.js.map +0 -1
  140. package/dist/chunk-LR4FA5X6.js +0 -368
  141. package/dist/chunk-LR4FA5X6.js.map +0 -1
  142. package/dist/chunk-MATIJPGF.js.map +0 -1
  143. package/dist/chunk-MKHDRIGN.js +0 -71
  144. package/dist/chunk-MKHDRIGN.js.map +0 -1
  145. package/dist/chunk-P72YLKC6.js.map +0 -1
  146. package/dist/chunk-SCLLP5DO.js.map +0 -1
  147. package/dist/chunk-UBDPV34P.js.map +0 -1
  148. package/dist/chunk-VAKFNNKT.js +0 -410
  149. package/dist/chunk-VAKFNNKT.js.map +0 -1
  150. package/dist/chunk-XDV4ZRVK.js.map +0 -1
  151. package/dist/chunk-XW4CVBUH.js.map +0 -1
  152. package/dist/chunk-ZUW4B5AT.js.map +0 -1
  153. package/dist/plan-decision-ops.d.ts +0 -70
  154. package/dist/plan-decision-ops.js +0 -19
  155. package/dist/queued-prompt-runtime.d.ts +0 -115
  156. package/dist/queued-prompt-runtime.js +0 -9
  157. package/dist/uiSettings-BQS9r2eo.d.ts +0 -6
  158. package/dist/workspaceAgentActivityListViewModel-BzV-cf0D.d.ts +0 -340
  159. package/dist/workspaceLinkActions-DS9LWqzI.d.ts +0 -74
  160. /package/dist/{plan-decision-ops.js.map → agent-gui.js.map} +0 -0
  161. /package/dist/{queued-prompt-runtime.js.map → agents.js.map} +0 -0
  162. /package/dist/{chunk-5FE7M42A.js.map → chunk-E4HQUTM3.js.map} +0 -0
  163. /package/dist/{chunk-554VG7ZW.js.map → chunk-QVBF5BN5.js.map} +0 -0
@@ -1,12 +1,13 @@
1
1
  import * as react from 'react';
2
2
  import { JSX, ReactNode, HTMLAttributes } from 'react';
3
3
  import { I18nRuntime } from '@tutti-os/ui-i18n-runtime';
4
- import { TranslateFn, useTranslation, AgentGuiI18nLocale } from '../i18n/index.js';
5
- import { W as WorkspaceLinkAction } from '../workspaceLinkActions-DS9LWqzI.js';
6
- import { AgentActivityNeedsAttentionItem, AgentActivitySnapshot } from '@tutti-os/agent-activity-core';
7
- import { b as AgentConversationPromptVM } from '../agentConversationVM-Cl4G0Lln.js';
8
- import { o as WorkspaceAgentActivityStatus } from '../workspaceAgentActivityListViewModel-BzV-cf0D.js';
9
- export { PLAN_IMPLEMENTATION_ACTION_IMPLEMENT, PLAN_IMPLEMENTATION_PROMPT } from '../plan-decision-ops.js';
4
+ import { A as AgentGuiI18nLocale, T as TranslateFn } from '../runtime-BBNdWgDU.js';
5
+ import { b as AgentConversationPromptVM, e as WorkspaceLinkAction } from '../agentConversationVM-C335TR6S.js';
6
+ import { AgentActivityNeedsAttentionItem, WorkspaceAgentConsumerSession, AgentActivitySnapshot, AgentSessionEngineState } from '@tutti-os/agent-activity-core';
7
+ export { WorkspaceAgentConsumerCounts, WorkspaceAgentConsumerSession, selectWorkspaceAgentConsumerCounts, selectWorkspaceAgentConsumerSession, selectWorkspaceAgentConsumerSessions } from '@tutti-os/agent-activity-core';
8
+ import { d as WorkspaceAgentActivityStatus } from '../workspaceAgentActivityListTypes-C7gPWYiA.js';
9
+ export { P as PLAN_IMPLEMENTATION_ACTION_IMPLEMENT, a as PLAN_IMPLEMENTATION_PROMPT, d as dispatchAgentPlanPromptAction, u as useEngineSelector } from '../agentPlanPromptDispatch-C7cCMjve.js';
10
+ import { useTranslation } from '../i18n/index.js';
10
11
  import '@tutti-os/workspace-issue-manager/core';
11
12
 
12
13
  type WorkspaceAgentMessageCenterDigestPrimaryKind = "input-required" | "error" | "outcome" | "progress" | "summary";
@@ -19,6 +20,10 @@ interface WorkspaceAgentMessageCenterDigest {
19
20
  primary: WorkspaceAgentMessageCenterDigestPrimary;
20
21
  }
21
22
 
23
+ declare function isWaitingMessageCenterItem(item: WorkspaceAgentMessageCenterItem): boolean;
24
+ declare function isInteractiveMessageCenterItem(item: WorkspaceAgentMessageCenterItem): boolean;
25
+ declare function selectMessageCenterAttentionDeckItems(items: readonly WorkspaceAgentMessageCenterItem[]): WorkspaceAgentMessageCenterItem[];
26
+
22
27
  interface WorkspaceAgentMessageCenterModel {
23
28
  waitingCount: number;
24
29
  items: WorkspaceAgentMessageCenterItem[];
@@ -35,6 +40,8 @@ interface WorkspaceAgentMessageCenterItem {
35
40
  id: string;
36
41
  agentSessionId: string;
37
42
  agentTargetId?: string | null;
43
+ agentName?: string | null;
44
+ agentAvatarUrl?: string | null;
38
45
  provider: string;
39
46
  userId: string | null;
40
47
  title: string;
@@ -57,12 +64,18 @@ interface WorkspaceAgentMessageCenterTurnOutcome {
57
64
  turnId: string | null;
58
65
  }
59
66
  interface BuildWorkspaceAgentMessageCenterOptions {
67
+ agentPresentations?: readonly WorkspaceAgentMessageCenterAgentPresentation[];
60
68
  avoidGroupingEdits?: boolean;
61
69
  identityBySessionId?: Record<string, WorkspaceAgentMessageCenterIdentity>;
62
70
  itemCutoffUnixMs?: number | null;
63
71
  promptFallbackLabels?: WorkspaceAgentMessageCenterPromptFallbackLabels;
64
72
  workspaceRoot?: string | null;
65
73
  }
74
+ interface WorkspaceAgentMessageCenterAgentPresentation {
75
+ agentTargetId: string;
76
+ iconUrl?: string | null;
77
+ name: string;
78
+ }
66
79
  interface WorkspaceAgentMessageCenterIdentity {
67
80
  userName: string;
68
81
  userAvatarUrl?: string;
@@ -75,58 +88,73 @@ interface WorkspaceAgentMessageCenterPromptFallbackLabels {
75
88
  question: string;
76
89
  title: string;
77
90
  }
78
- declare function buildWorkspaceAgentMessageCenterModel(snapshot: AgentActivitySnapshot, options?: BuildWorkspaceAgentMessageCenterOptions): WorkspaceAgentMessageCenterModel;
79
- declare function isWaitingMessageCenterItem(item: WorkspaceAgentMessageCenterItem): boolean;
80
- declare function isInteractiveMessageCenterItem(item: WorkspaceAgentMessageCenterItem): boolean;
81
- declare function selectMessageCenterAttentionDeckItems(items: readonly WorkspaceAgentMessageCenterItem[]): WorkspaceAgentMessageCenterItem[];
82
91
 
83
- type MessageCenterGroupBy = "priority" | "status" | "agent" | "time";
84
- type MessageCenterStatusFilter = "waiting" | "working" | "completed" | "failed";
85
- type MessageCenterTranslate = TranslateFn;
86
- interface MessageCenterStatusOption {
87
- count: number;
88
- label: string;
89
- value: MessageCenterStatusFilter;
90
- }
91
- interface MessageCenterProviderOption {
92
- count: number;
93
- label: string;
94
- value: string;
95
- }
96
- interface MessageCenterGroup {
97
- id: string;
98
- identity?: WorkspaceAgentMessageCenterIdentity | null;
92
+ declare function MessageCenterOpenChatButton({ actionsAccessory, alwaysVisible, item, label, onOpenChat, provider }: {
93
+ actionsAccessory?: ReactNode;
94
+ alwaysVisible?: boolean;
95
+ item: WorkspaceAgentMessageCenterItem;
99
96
  label: string;
100
- items: WorkspaceAgentMessageCenterItem[];
101
- provider?: string;
102
- userId?: string | null;
103
- }
104
- interface MessageCenterAgentUserStack {
105
- id: string;
97
+ onOpenChat: (input: {
98
+ agentSessionId: string;
99
+ provider: string;
100
+ }) => void;
106
101
  provider: string;
107
- userId: string | null;
108
- items: WorkspaceAgentMessageCenterItem[];
109
- }
110
- declare function partitionMessageCenterItemsByAgentUser(items: readonly WorkspaceAgentMessageCenterItem[]): MessageCenterAgentUserStack[];
111
- declare function messageCenterAgentUserStackId(item: Pick<WorkspaceAgentMessageCenterItem, "provider" | "userId">): string;
112
- declare function messageCenterStackRenderId(groupId: string, stackId: string): string;
113
- declare function messageCenterStackScrollSyncSegment({ expanded, groupId, stack }: {
114
- expanded: boolean;
115
- groupId: string;
116
- stack: MessageCenterAgentUserStack;
117
- }): string;
118
- declare function buildMessageCenterStatusOptions(counts: WorkspaceAgentMessageCenterModel["counts"], t: MessageCenterTranslate): MessageCenterStatusOption[];
119
- declare function buildMessageCenterProviderOptions(items: readonly WorkspaceAgentMessageCenterItem[]): MessageCenterProviderOption[];
120
- declare function itemMatchesViewFilters({ item, providerFilters, statusFilters }: {
121
- item: WorkspaceAgentMessageCenterItem;
122
- providerFilters: Set<string> | null;
123
- statusFilters: Set<MessageCenterStatusFilter> | null;
124
- }): boolean;
125
- declare function messageCenterStatusFilterValue(item: WorkspaceAgentMessageCenterItem): MessageCenterStatusFilter;
126
- declare function groupMessageCenterItems(items: readonly WorkspaceAgentMessageCenterItem[], groupBy: MessageCenterGroupBy, t: MessageCenterTranslate): MessageCenterGroup[];
127
- declare function isRecentlyCompletedMessageCenterItem(item: WorkspaceAgentMessageCenterItem, nowUnixMs: number): boolean;
128
- declare function messageCenterGroupLabel(groupBy: MessageCenterGroupBy, t: MessageCenterTranslate): string;
129
- declare function statusFilterSummary(statusFilters: Set<MessageCenterStatusFilter> | null, statusOptions: readonly MessageCenterStatusOption[]): string;
102
+ }): JSX.Element;
103
+ declare function MessageCenterIdentityLabel({ agentAvatarUrl, agentName, identity, provider }: {
104
+ agentAvatarUrl?: string | null;
105
+ agentName?: string | null;
106
+ identity: WorkspaceAgentMessageCenterIdentity | null;
107
+ provider: string;
108
+ }): JSX.Element;
109
+ declare function MessageCenterIdentityAvatarMark({ agentAvatarUrl, identity, provider, userId }: {
110
+ agentAvatarUrl?: string | null;
111
+ identity: WorkspaceAgentMessageCenterIdentity | null;
112
+ provider: string;
113
+ userId?: string | null;
114
+ }): JSX.Element;
115
+ declare function MessageCenterIdentityAvatarStack({ agentAvatarUrl, userAvatarUrl: rawUserAvatarUrl, userName }: {
116
+ agentAvatarUrl: string;
117
+ userAvatarUrl?: string;
118
+ userName: string;
119
+ }): JSX.Element;
120
+ type MessageCenterStatusTone = "amber" | "blue" | "green" | "neutral" | "red";
121
+ declare function messageCenterStatusTone(item: WorkspaceAgentMessageCenterItem): MessageCenterStatusTone;
122
+ declare function messageCenterStatusToneClass(tone: MessageCenterStatusTone): string;
123
+
124
+ declare function messageCenterStackPreviewText(item: WorkspaceAgentMessageCenterItem): string;
125
+ /**
126
+ * 收起态预览只展示纯文本 + 一个静态(不可点击)的 mention 图标,复用
127
+ * AgentMessageMarkdown 里那套富文本 chip 的视觉样式,但不渲染成 <a>——
128
+ * 这块预览本身嵌套在外层切换展开/收起的 <button> 里,塞一个可点击链接
129
+ * 会出现交互元素嵌套交互元素的问题。
130
+ */
131
+ declare function messageCenterStackPreviewNodes(item: WorkspaceAgentMessageCenterItem): ReactNode[];
132
+ declare function resolveMessageCenterNotificationAction(item: WorkspaceAgentMessageCenterItem, input: {
133
+ action?: string;
134
+ optionId?: string;
135
+ }): string | null;
136
+ declare function buildWorkspaceAgentInteractivePromptLabels(t: ReturnType<typeof useTranslation>["t"], provider?: string): {
137
+ approvalLead: string;
138
+ planLead: string;
139
+ planModes: {
140
+ id: string;
141
+ label: string;
142
+ description: string;
143
+ }[];
144
+ stayInPlan: string;
145
+ sendFeedback: string;
146
+ feedbackPlaceholder: string;
147
+ previousQuestion: string;
148
+ nextQuestion: string;
149
+ submitAnswers: string;
150
+ answerPlaceholder: string;
151
+ waitingForAnswer: string;
152
+ planImplementationLead: string;
153
+ planImplementationConfirm: string;
154
+ planImplementationFeedbackPlaceholder: string;
155
+ planImplementationSend: string;
156
+ planImplementationSkip: string;
157
+ };
130
158
 
131
159
  interface WorkspaceAgentMessageCenterCardProps {
132
160
  item: WorkspaceAgentMessageCenterItem;
@@ -165,40 +193,6 @@ interface WorkspaceAgentMessageCenterStackProps {
165
193
  }
166
194
  declare const WorkspaceAgentMessageCenterCard: react.NamedExoticComponent<WorkspaceAgentMessageCenterCardProps>;
167
195
  declare const WorkspaceAgentMessageCenterStack: react.NamedExoticComponent<WorkspaceAgentMessageCenterStackProps>;
168
- declare function messageCenterStackPreviewText(item: WorkspaceAgentMessageCenterItem): string;
169
- /**
170
- * 收起态预览只展示纯文本 + 一个静态(不可点击)的 mention 图标,复用
171
- * AgentMessageMarkdown 里那套富文本 chip 的视觉样式,但不渲染成 <a>——
172
- * 这块预览本身嵌套在外层切换展开/收起的 <button> 里,塞一个可点击链接
173
- * 会出现交互元素嵌套交互元素的问题。
174
- */
175
- declare function messageCenterStackPreviewNodes(item: WorkspaceAgentMessageCenterItem): ReactNode[];
176
- declare function resolveMessageCenterNotificationAction(item: WorkspaceAgentMessageCenterItem, input: {
177
- action?: string;
178
- optionId?: string;
179
- }): string | null;
180
- declare function buildWorkspaceAgentInteractivePromptLabels(t: ReturnType<typeof useTranslation>["t"], provider?: string): {
181
- approvalLead: string;
182
- planLead: string;
183
- planModes: {
184
- id: string;
185
- label: string;
186
- description: string;
187
- }[];
188
- stayInPlan: string;
189
- sendFeedback: string;
190
- feedbackPlaceholder: string;
191
- previousQuestion: string;
192
- nextQuestion: string;
193
- submitAnswers: string;
194
- answerPlaceholder: string;
195
- waitingForAnswer: string;
196
- planImplementationLead: string;
197
- planImplementationConfirm: string;
198
- planImplementationFeedbackPlaceholder: string;
199
- planImplementationSend: string;
200
- planImplementationSkip: string;
201
- };
202
196
  declare function MessageCenterSummary({ emptyLabel, item, lazy, onLinkAction, summary }: {
203
197
  emptyLabel: string;
204
198
  item: WorkspaceAgentMessageCenterItem;
@@ -206,36 +200,8 @@ declare function MessageCenterSummary({ emptyLabel, item, lazy, onLinkAction, su
206
200
  onLinkAction?: (action: WorkspaceLinkAction) => void;
207
201
  summary: string;
208
202
  }): JSX.Element;
209
- declare function MessageCenterOpenChatButton({ actionsAccessory, alwaysVisible, item, label, onOpenChat, provider }: {
210
- actionsAccessory?: ReactNode;
211
- alwaysVisible?: boolean;
212
- item: WorkspaceAgentMessageCenterItem;
213
- label: string;
214
- onOpenChat: (input: {
215
- agentSessionId: string;
216
- provider: string;
217
- }) => void;
218
- provider: string;
219
- }): JSX.Element;
220
- declare function MessageCenterIdentityLabel({ identity, provider }: {
221
- identity: WorkspaceAgentMessageCenterIdentity | null;
222
- provider: string;
223
- }): JSX.Element;
224
- declare function MessageCenterIdentityAvatarMark({ identity, provider, userId }: {
225
- identity: WorkspaceAgentMessageCenterIdentity | null;
226
- provider: string;
227
- userId?: string | null;
228
- }): JSX.Element;
229
- declare function MessageCenterIdentityAvatarStack({ agentAvatarUrl, userAvatarUrl: rawUserAvatarUrl, userName }: {
230
- agentAvatarUrl: string;
231
- userAvatarUrl?: string;
232
- userName: string;
233
- }): JSX.Element;
234
- type MessageCenterStatusTone = "amber" | "blue" | "green" | "neutral" | "red";
235
- declare function messageCenterStatusTone(item: WorkspaceAgentMessageCenterItem): MessageCenterStatusTone;
236
- declare function messageCenterStatusToneClass(tone: MessageCenterStatusTone): string;
237
203
 
238
- type WorkspaceAgentMessageCenterPresentation = "drawer" | "embedded";
204
+ type WorkspaceAgentMessageCenterPanelPresentation = "drawer" | "embedded";
239
205
  interface WorkspaceAgentMessageCenterPanelProps {
240
206
  i18n?: I18nRuntime<string> | null;
241
207
  locale?: AgentGuiI18nLocale;
@@ -243,7 +209,7 @@ interface WorkspaceAgentMessageCenterPanelProps {
243
209
  model: WorkspaceAgentMessageCenterModel;
244
210
  highlightedItemId?: string | null;
245
211
  portalContainer?: HTMLElement | null;
246
- presentation?: WorkspaceAgentMessageCenterPresentation;
212
+ presentation?: WorkspaceAgentMessageCenterPanelPresentation;
247
213
  onClose: () => void;
248
214
  onHighlightedItemSettled?: (itemId: string) => void;
249
215
  onLinkAction?: (action: WorkspaceLinkAction) => void;
@@ -255,6 +221,7 @@ interface WorkspaceAgentMessageCenterPanelProps {
255
221
  agentSessionId: string;
256
222
  provider: string;
257
223
  }) => void;
224
+ promptStatus?: (item: WorkspaceAgentMessageCenterItem) => "idle" | "responding" | "unknown" | "failed";
258
225
  onSubmitPrompt: (input: {
259
226
  action?: string;
260
227
  agentSessionId: string;
@@ -265,14 +232,63 @@ interface WorkspaceAgentMessageCenterPanelProps {
265
232
  }) => Promise<void> | void;
266
233
  }
267
234
  declare const WorkspaceAgentMessageCenterPanel: react.NamedExoticComponent<WorkspaceAgentMessageCenterPanelProps>;
235
+
236
+ type MessageCenterGroupBy = "priority" | "status" | "agent" | "time";
237
+ type MessageCenterStatusFilter = "waiting" | "working" | "completed" | "failed";
238
+ type MessageCenterTranslate = TranslateFn;
239
+ interface MessageCenterStatusOption {
240
+ count: number;
241
+ label: string;
242
+ value: MessageCenterStatusFilter;
243
+ }
244
+ interface MessageCenterProviderOption {
245
+ count: number;
246
+ label: string;
247
+ value: string;
248
+ }
249
+ interface MessageCenterGroup {
250
+ id: string;
251
+ identity?: WorkspaceAgentMessageCenterIdentity | null;
252
+ label: string;
253
+ items: WorkspaceAgentMessageCenterItem[];
254
+ provider?: string;
255
+ userId?: string | null;
256
+ }
257
+ interface MessageCenterAgentUserStack {
258
+ id: string;
259
+ provider: string;
260
+ userId: string | null;
261
+ items: WorkspaceAgentMessageCenterItem[];
262
+ }
263
+ declare function partitionMessageCenterItemsByAgentUser(items: readonly WorkspaceAgentMessageCenterItem[]): MessageCenterAgentUserStack[];
264
+ declare function messageCenterAgentUserStackId(item: Pick<WorkspaceAgentMessageCenterItem, "provider" | "userId">): string;
265
+ declare function messageCenterStackRenderId(groupId: string, stackId: string): string;
266
+ declare function messageCenterStackScrollSyncSegment({ expanded, groupId, stack }: {
267
+ expanded: boolean;
268
+ groupId: string;
269
+ stack: MessageCenterAgentUserStack;
270
+ }): string;
271
+ declare function buildMessageCenterStatusOptions(counts: WorkspaceAgentMessageCenterModel["counts"], t: MessageCenterTranslate): MessageCenterStatusOption[];
272
+ declare function buildMessageCenterProviderOptions(items: readonly WorkspaceAgentMessageCenterItem[]): MessageCenterProviderOption[];
273
+ declare function itemMatchesViewFilters({ item, providerFilters, statusFilters }: {
274
+ item: WorkspaceAgentMessageCenterItem;
275
+ providerFilters: Set<string> | null;
276
+ statusFilters: Set<MessageCenterStatusFilter> | null;
277
+ }): boolean;
278
+ declare function messageCenterStatusFilterValue(item: WorkspaceAgentMessageCenterItem): MessageCenterStatusFilter;
279
+ declare function groupMessageCenterItems(items: readonly WorkspaceAgentMessageCenterItem[], groupBy: MessageCenterGroupBy, t: MessageCenterTranslate): MessageCenterGroup[];
280
+ declare function isRecentlyCompletedMessageCenterItem(item: WorkspaceAgentMessageCenterItem, nowUnixMs: number): boolean;
281
+ declare function messageCenterGroupLabel(groupBy: MessageCenterGroupBy, t: MessageCenterTranslate): string;
282
+ declare function statusFilterSummary(statusFilters: Set<MessageCenterStatusFilter> | null, statusOptions: readonly MessageCenterStatusOption[]): string;
283
+
268
284
  declare function MessageCenterGroupHeading({ group }: {
269
- group: ReturnType<typeof groupMessageCenterItems>[number];
270
- }): JSX.Element;
285
+ group: MessageCenterGroup;
286
+ }): React.JSX.Element;
271
287
 
272
288
  interface WorkspaceAgentMessageCenterAttentionDeckProps {
273
289
  items: WorkspaceAgentMessageCenterItem[];
274
290
  highlightedItemId?: string | null;
275
- submittingPromptKey: string | null;
291
+ isPromptSubmitting: (item: WorkspaceAgentMessageCenterItem) => boolean;
276
292
  registerNode?: (itemId: string, node: HTMLElement | null) => void;
277
293
  renderCard?: (input: WorkspaceAgentMessageCenterAttentionDeckRenderCardInput) => ReactNode;
278
294
  onLinkAction?: (action: WorkspaceLinkAction) => void;
@@ -300,7 +316,7 @@ interface WorkspaceAgentMessageCenterAttentionDeckRenderCardInput {
300
316
  requestId: string;
301
317
  }) => void;
302
318
  }
303
- declare function WorkspaceAgentMessageCenterAttentionDeck({ items, highlightedItemId, submittingPromptKey, registerNode, renderCard, onLinkAction, onOpenChat, onSubmitPrompt }: WorkspaceAgentMessageCenterAttentionDeckProps): JSX.Element | null;
319
+ declare function WorkspaceAgentMessageCenterAttentionDeck({ items, highlightedItemId, isPromptSubmitting, registerNode, renderCard, onLinkAction, onOpenChat, onSubmitPrompt }: WorkspaceAgentMessageCenterAttentionDeckProps): JSX.Element | null;
304
320
 
305
321
  declare function MessageCenterViewMenu({ filtersActive, groupBy, providerFilters, providerOptions, statusFilters, statusOptions, onClearFilters, onGroupByChange, onProviderToggle, onStatusToggle }: {
306
322
  filtersActive?: boolean;
@@ -404,6 +420,22 @@ declare function approvalOptionDisplayLabel(option: {
404
420
  feedback?: boolean;
405
421
  }): string;
406
422
 
423
+ /**
424
+ * Canonical Message Center entrypoint. Session/turn/interaction truth comes
425
+ * directly from the engine. Durable messages are presentation input only:
426
+ * title and digest text may use them, but they cannot recreate lifecycle or
427
+ * pending-interaction state.
428
+ */
429
+ declare function buildWorkspaceAgentMessageCenterModelFromEngine(presentation: WorkspaceAgentMessageCenterPresentation, snapshot: Pick<AgentActivitySnapshot, "sessionMessagesById" | "workspaceId">, options?: BuildWorkspaceAgentMessageCenterOptions): WorkspaceAgentMessageCenterModel;
430
+ interface WorkspaceAgentMessageCenterPresentation {
431
+ consumers: readonly WorkspaceAgentConsumerSession[];
432
+ promptStatusByKey: Readonly<Record<string, WorkspaceAgentMessageCenterPromptStatus>>;
433
+ }
434
+ declare function selectWorkspaceAgentMessageCenterPresentation(state: AgentSessionEngineState): WorkspaceAgentMessageCenterPresentation;
435
+ declare function workspaceAgentMessageCenterPresentationEqual(left: WorkspaceAgentMessageCenterPresentation, right: WorkspaceAgentMessageCenterPresentation): boolean;
436
+ type WorkspaceAgentMessageCenterPromptStatus = "idle" | "responding" | "unknown" | "failed";
437
+ declare function workspaceAgentMessageCenterPromptStatus(presentation: WorkspaceAgentMessageCenterPresentation, item: Pick<WorkspaceAgentMessageCenterItem, "agentSessionId" | "pendingPrompt">): WorkspaceAgentMessageCenterPromptStatus;
438
+
407
439
  declare function stabilizeWorkspaceAgentMessageCenterModel(previous: WorkspaceAgentMessageCenterModel | null, next: WorkspaceAgentMessageCenterModel): WorkspaceAgentMessageCenterModel;
408
440
 
409
441
  declare const messageCenterFiltersStorageKey = "tutti.agent-message-center.filters";
@@ -415,4 +447,4 @@ interface MessageCenterFilterPreferences {
415
447
  declare function readMessageCenterFilterPreferences(): MessageCenterFilterPreferences;
416
448
  declare function writeMessageCenterFilterPreferences(preferences: MessageCenterFilterPreferences): void;
417
449
 
418
- export { AgentInteractivePromptSurface, AgentVerticalScrollArea, type BuildWorkspaceAgentMessageCenterOptions, type MessageCenterAgentUserStack, type MessageCenterFilterPreferences, type MessageCenterGroup, type MessageCenterGroupBy, MessageCenterGroupHeading, MessageCenterIdentityAvatarMark, MessageCenterIdentityAvatarStack, MessageCenterIdentityLabel, MessageCenterOpenChatButton, type MessageCenterProviderOption, type MessageCenterStatusFilter, type MessageCenterStatusOption, type MessageCenterStatusTone, MessageCenterSummary, type MessageCenterTranslate, type PromptToolDetail, WorkspaceAgentMessageCenterAttentionDeck, type WorkspaceAgentMessageCenterAttentionDeckProps, type WorkspaceAgentMessageCenterAttentionDeckRenderCardInput, WorkspaceAgentMessageCenterCard, type WorkspaceAgentMessageCenterCardProps, type WorkspaceAgentMessageCenterCounts, type WorkspaceAgentMessageCenterDigest, type WorkspaceAgentMessageCenterDigestPrimary, type WorkspaceAgentMessageCenterDigestPrimaryKind, type WorkspaceAgentMessageCenterIdentity, type WorkspaceAgentMessageCenterItem, type WorkspaceAgentMessageCenterModel, WorkspaceAgentMessageCenterPanel, type WorkspaceAgentMessageCenterPanelProps, type WorkspaceAgentMessageCenterPresentation, WorkspaceAgentMessageCenterStack, MessageCenterViewMenu as WorkspaceAgentMessageCenterViewMenu, approvalOptionDisplayLabel, buildMessageCenterProviderOptions, buildMessageCenterStatusOptions, buildWorkspaceAgentInteractivePromptLabels, buildWorkspaceAgentMessageCenterModel, getPromptToolDetails, groupMessageCenterItems, isInteractiveMessageCenterItem, isPromptRequestIdTitle, isRecentlyCompletedMessageCenterItem, isWaitingMessageCenterItem, itemMatchesViewFilters, managedAgentRoundedIconUrl, messageCenterAgentUserStackId, messageCenterFiltersStorageKey, messageCenterGroupLabel, messageCenterStackPreviewNodes, messageCenterStackPreviewText, messageCenterStackRenderId, messageCenterStackScrollSyncSegment, messageCenterStatusFilterValue, messageCenterStatusTone, messageCenterStatusToneClass, partitionMessageCenterItemsByAgentUser, readMessageCenterFilterPreferences, resolveMessageCenterNotificationAction, selectMessageCenterAttentionDeckItems, stabilizeWorkspaceAgentMessageCenterModel, statusFilterSummary, userAvatarPlaceholderUrl, workspaceAgentActivityStatusLabel, writeMessageCenterFilterPreferences };
450
+ export { AgentInteractivePromptSurface, AgentVerticalScrollArea, type BuildWorkspaceAgentMessageCenterOptions, type MessageCenterAgentUserStack, type MessageCenterFilterPreferences, type MessageCenterGroup, type MessageCenterGroupBy, MessageCenterGroupHeading, MessageCenterIdentityAvatarMark, MessageCenterIdentityAvatarStack, MessageCenterIdentityLabel, MessageCenterOpenChatButton, type MessageCenterProviderOption, type MessageCenterStatusFilter, type MessageCenterStatusOption, type MessageCenterStatusTone, MessageCenterSummary, type MessageCenterTranslate, type PromptToolDetail, type WorkspaceAgentMessageCenterAgentPresentation, WorkspaceAgentMessageCenterAttentionDeck, type WorkspaceAgentMessageCenterAttentionDeckProps, type WorkspaceAgentMessageCenterAttentionDeckRenderCardInput, WorkspaceAgentMessageCenterCard, type WorkspaceAgentMessageCenterCardProps, type WorkspaceAgentMessageCenterCounts, type WorkspaceAgentMessageCenterDigest, type WorkspaceAgentMessageCenterDigestPrimary, type WorkspaceAgentMessageCenterDigestPrimaryKind, type WorkspaceAgentMessageCenterIdentity, type WorkspaceAgentMessageCenterItem, type WorkspaceAgentMessageCenterModel, WorkspaceAgentMessageCenterPanel, type WorkspaceAgentMessageCenterPanelPresentation, type WorkspaceAgentMessageCenterPanelProps, type WorkspaceAgentMessageCenterPresentation, type WorkspaceAgentMessageCenterPromptStatus, WorkspaceAgentMessageCenterStack, MessageCenterViewMenu as WorkspaceAgentMessageCenterViewMenu, approvalOptionDisplayLabel, buildMessageCenterProviderOptions, buildMessageCenterStatusOptions, buildWorkspaceAgentInteractivePromptLabels, buildWorkspaceAgentMessageCenterModelFromEngine, getPromptToolDetails, groupMessageCenterItems, isInteractiveMessageCenterItem, isPromptRequestIdTitle, isRecentlyCompletedMessageCenterItem, isWaitingMessageCenterItem, itemMatchesViewFilters, managedAgentRoundedIconUrl, messageCenterAgentUserStackId, messageCenterFiltersStorageKey, messageCenterGroupLabel, messageCenterStackPreviewNodes, messageCenterStackPreviewText, messageCenterStackRenderId, messageCenterStackScrollSyncSegment, messageCenterStatusFilterValue, messageCenterStatusTone, messageCenterStatusToneClass, partitionMessageCenterItemsByAgentUser, readMessageCenterFilterPreferences, resolveMessageCenterNotificationAction, selectMessageCenterAttentionDeckItems, selectWorkspaceAgentMessageCenterPresentation, stabilizeWorkspaceAgentMessageCenterModel, statusFilterSummary, userAvatarPlaceholderUrl, workspaceAgentActivityStatusLabel, workspaceAgentMessageCenterPresentationEqual, workspaceAgentMessageCenterPromptStatus, writeMessageCenterFilterPreferences };