@tutti-os/agent-gui 0.0.202 → 0.0.204

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 (31) hide show
  1. package/README.md +30 -0
  2. package/dist/agent-conversation/index.d.ts +21 -2
  3. package/dist/agent-conversation/index.js +6 -4
  4. package/dist/agent-conversation/index.js.map +1 -1
  5. package/dist/agent-gui.d.ts +2 -1
  6. package/dist/agent-gui.js +7 -7
  7. package/dist/agent-message-center/index.js +3 -3
  8. package/dist/app/renderer/agentactivity.css +32 -0
  9. package/dist/{chunk-F5ARZZES.js → chunk-4OJSSUEU.js} +2 -2
  10. package/dist/{chunk-MFQB4LR5.js → chunk-FHCARLIO.js} +3 -3
  11. package/dist/{chunk-UVJBQ6WD.js → chunk-GJZEMI6Z.js} +193 -108
  12. package/dist/chunk-GJZEMI6Z.js.map +1 -0
  13. package/dist/{chunk-3FA5JIDL.js → chunk-K5AOJ5DO.js} +1 -1
  14. package/dist/chunk-K5AOJ5DO.js.map +1 -0
  15. package/dist/{chunk-VZ4QAXXL.js → chunk-STOGLKFA.js} +41 -12
  16. package/dist/chunk-STOGLKFA.js.map +1 -0
  17. package/dist/{chunk-5ZO3H4C5.js → chunk-VDTG6M6K.js} +2 -2
  18. package/dist/{chunk-PWPVYNGO.js → chunk-ZTRTBLLP.js} +5 -2
  19. package/dist/{chunk-PWPVYNGO.js.map → chunk-ZTRTBLLP.js.map} +1 -1
  20. package/dist/context-mention-palette/index.js +3 -3
  21. package/dist/conversation-rail-runtime.d.ts +2 -1
  22. package/dist/index.d.ts +2 -1
  23. package/dist/index.js +7 -7
  24. package/dist/mention-search.js +2 -2
  25. package/package.json +14 -14
  26. package/dist/chunk-3FA5JIDL.js.map +0 -1
  27. package/dist/chunk-UVJBQ6WD.js.map +0 -1
  28. package/dist/chunk-VZ4QAXXL.js.map +0 -1
  29. /package/dist/{chunk-F5ARZZES.js.map → chunk-4OJSSUEU.js.map} +0 -0
  30. /package/dist/{chunk-MFQB4LR5.js.map → chunk-FHCARLIO.js.map} +0 -0
  31. /package/dist/{chunk-5ZO3H4C5.js.map → chunk-VDTG6M6K.js.map} +0 -0
package/README.md CHANGED
@@ -90,6 +90,36 @@ accepted for host capabilities that are not agent activity data:
90
90
  AgentGUI has no host-API activity fallback. A host must inject the runtime and
91
91
  the grouped `AgentGUINodeProps` responsibility objects.
92
92
 
93
+ ## Standalone Conversation Participant Presentation
94
+
95
+ The `@tutti-os/agent-gui/agent-conversation` entrypoint exposes one optional,
96
+ host-owned participant presentation contract on `WorkspaceAgentSessionDetail`,
97
+ `AgentConversationFlow`, and `AgentTranscriptView`:
98
+
99
+ ```tsx
100
+ <WorkspaceAgentSessionDetail
101
+ participantPresentation={{
102
+ enabled: true,
103
+ status: "ready",
104
+ user: { name: "Alice", avatarUrl: userAvatarUrl },
105
+ agent: { name: "Codex", avatarUrl: agentAvatarUrl }
106
+ }}
107
+ {...props}
108
+ />
109
+ ```
110
+
111
+ Omitting the property or passing `{ enabled: false }` preserves the existing
112
+ transcript DOM and spacing. Pass `{ enabled: true, status: "loading" }` while
113
+ the host is resolving identities; existing messages stay visible and the
114
+ package renders fixed-size circular loading slots. In the `ready` state, each
115
+ participant requires a non-empty `name`; `avatarUrl` is optional and the shared
116
+ UI System `Avatar` falls back to the name's initial.
117
+
118
+ The host owns identity lookup and lifecycle. Agent GUI owns placement, sizing,
119
+ loading treatment, image fallback, and left/right message alignment. The
120
+ contract is presentation-only and must not be copied into canonical Session,
121
+ Turn, Message, or workspace-engine state.
122
+
93
123
  ## Session Handoff Drafts
94
124
 
95
125
  External AgentGUI hosts can use `createAgentSessionHandoffPrompt` to prefill a
@@ -9,6 +9,22 @@ import '../types-CHAMK2g7.js';
9
9
  import '../planImplementationPresentation-BxVOLt6A.js';
10
10
  import '@tutti-os/workspace-user-project/contracts';
11
11
 
12
+ interface AgentConversationParticipantIdentity {
13
+ name: string;
14
+ avatarUrl?: string | null;
15
+ }
16
+ type AgentConversationParticipantPresentation = {
17
+ enabled: false;
18
+ } | {
19
+ enabled: true;
20
+ status: "loading";
21
+ } | {
22
+ enabled: true;
23
+ status: "ready";
24
+ user: AgentConversationParticipantIdentity;
25
+ agent: AgentConversationParticipantIdentity;
26
+ };
27
+
12
28
  interface AgentTranscriptTurnAttachment {
13
29
  id: string;
14
30
  anchorTurnId: string | null;
@@ -27,6 +43,7 @@ interface AgentTranscriptViewProps {
27
43
  workspaceAppIcons?: readonly AgentMessageMarkdownWorkspaceAppIcon[];
28
44
  previewMode?: boolean;
29
45
  showRawTimelineJson?: boolean;
46
+ participantPresentation?: AgentConversationParticipantPresentation;
30
47
  labels: {
31
48
  toolCallsLabel: (count: number) => string;
32
49
  thinkingLabel: string;
@@ -53,6 +70,7 @@ interface AgentConversationFlowProps {
53
70
  workspaceAppIcons?: readonly AgentMessageMarkdownWorkspaceAppIcon[];
54
71
  previewMode?: boolean;
55
72
  showRawTimelineJson?: boolean;
73
+ participantPresentation?: AgentConversationParticipantPresentation;
56
74
  labels: {
57
75
  toolCallsLabel: (count: number) => string;
58
76
  thinkingLabel: string;
@@ -80,8 +98,9 @@ interface WorkspaceAgentSessionDetailProps {
80
98
  loadingLabel?: string;
81
99
  rawTimelineJsonLabel?: string;
82
100
  showRawTimelineJson?: boolean;
101
+ participantPresentation?: AgentConversationParticipantPresentation;
83
102
  }
84
- declare function WorkspaceAgentSessionDetail({ detail, avoidGroupingEdits, isLoading, timelineItemCount, onLinkAction, toolCallsLabel, thinkingLabel, loadingLabel, rawTimelineJsonLabel, showRawTimelineJson }: WorkspaceAgentSessionDetailProps): JSX.Element;
103
+ declare function WorkspaceAgentSessionDetail({ detail, avoidGroupingEdits, isLoading, timelineItemCount, onLinkAction, toolCallsLabel, thinkingLabel, loadingLabel, rawTimelineJsonLabel, showRawTimelineJson, participantPresentation }: WorkspaceAgentSessionDetailProps): JSX.Element;
85
104
 
86
105
  interface AgentConversationProjectionOptions {
87
106
  avoidGroupingEdits?: boolean;
@@ -129,4 +148,4 @@ declare function serializeAgentConversationForClipboard(input: {
129
148
  title: string;
130
149
  }): Promise<AgentGUIConversationSerializedTranscript>;
131
150
 
132
- export { AgentConversationFlow, AgentConversationVM, type AgentGUIConversationAttachment, type AgentGUIConversationCopyAction, type AgentGUIConversationCopyLabels, type AgentGUIConversationLocalImageReader, type AgentGUIConversationSerializedTranscript, AgentTranscriptSkeleton, AgentTranscriptView, WorkspaceAgentSessionDetail, WorkspaceAgentSessionDetailViewModel, projectAgentConversationVM, reconcileProjectedAgentConversationVM, serializeAgentConversationForClipboard, useProjectedAgentConversation };
151
+ export { AgentConversationFlow, type AgentConversationFlowProps, type AgentConversationParticipantIdentity, type AgentConversationParticipantPresentation, AgentConversationVM, type AgentGUIConversationAttachment, type AgentGUIConversationCopyAction, type AgentGUIConversationCopyLabels, type AgentGUIConversationLocalImageReader, type AgentGUIConversationSerializedTranscript, AgentTranscriptSkeleton, AgentTranscriptView, type AgentTranscriptViewProps, WorkspaceAgentSessionDetail, type WorkspaceAgentSessionDetailProps, WorkspaceAgentSessionDetailViewModel, projectAgentConversationVM, reconcileProjectedAgentConversationVM, serializeAgentConversationForClipboard, useProjectedAgentConversation };
@@ -7,7 +7,7 @@ import {
7
7
  reconcileProjectedAgentConversationVM,
8
8
  serializeAgentConversationForClipboard,
9
9
  useProjectedAgentConversation
10
- } from "../chunk-UVJBQ6WD.js";
10
+ } from "../chunk-GJZEMI6Z.js";
11
11
  import "../chunk-XD5NTTFJ.js";
12
12
  import "../chunk-CXC3ROXQ.js";
13
13
  import "../chunk-XJ34OIEQ.js";
@@ -15,9 +15,9 @@ import "../chunk-JDVP33S5.js";
15
15
  import "../chunk-JXFOFJYI.js";
16
16
  import "../chunk-3V5OCA2M.js";
17
17
  import "../chunk-FGLQZ6I4.js";
18
- import "../chunk-PWPVYNGO.js";
18
+ import "../chunk-ZTRTBLLP.js";
19
19
  import "../chunk-ZVYUTXQJ.js";
20
- import "../chunk-3FA5JIDL.js";
20
+ import "../chunk-K5AOJ5DO.js";
21
21
  import "../chunk-F5UR6EJG.js";
22
22
  import "../chunk-M6HTOCQK.js";
23
23
  import {
@@ -44,7 +44,8 @@ function WorkspaceAgentSessionDetail({
44
44
  thinkingLabel = translate("agentHost.workspaceAgentSessionDetailThinking"),
45
45
  loadingLabel = translate("common.loading"),
46
46
  rawTimelineJsonLabel,
47
- showRawTimelineJson = false
47
+ showRawTimelineJson = false,
48
+ participantPresentation
48
49
  }) {
49
50
  const conversation = useProjectedAgentConversation({
50
51
  detail,
@@ -75,6 +76,7 @@ function WorkspaceAgentSessionDetail({
75
76
  empty: emptyState,
76
77
  onLinkAction,
77
78
  showRawTimelineJson,
79
+ participantPresentation,
78
80
  labels: flowLabels
79
81
  }
80
82
  ) });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../shared/WorkspaceAgentSessionDetail.tsx"],"sourcesContent":["import { useMemo, type JSX } from \"react\";\nimport type { WorkspaceLinkAction } from \"../contexts/workspace/presentation/renderer/actions/workspaceLinkActions\";\nimport { translate } from \"../i18n/index\";\nimport { AgentConversationFlow } from \"./agentConversation/components/AgentConversationFlow\";\nimport { useProjectedAgentConversation } from \"./agentConversation/projection/useProjectedAgentConversation\";\nimport type { WorkspaceAgentSessionDetailViewModel } from \"./workspaceAgentSessionDetailViewModel\";\n\ninterface WorkspaceAgentSessionDetailProps {\n detail: WorkspaceAgentSessionDetailViewModel;\n avoidGroupingEdits?: boolean;\n isLoading: boolean;\n timelineItemCount: number;\n onLinkAction?: (action: WorkspaceLinkAction) => void;\n toolCallsLabel: (count: number) => string;\n thinkingLabel?: string;\n loadingLabel?: string;\n rawTimelineJsonLabel?: string;\n showRawTimelineJson?: boolean;\n}\n\nexport function WorkspaceAgentSessionDetail({\n detail,\n avoidGroupingEdits = false,\n isLoading,\n timelineItemCount,\n onLinkAction,\n toolCallsLabel,\n thinkingLabel = translate(\"agentHost.workspaceAgentSessionDetailThinking\"),\n loadingLabel = translate(\"common.loading\"),\n rawTimelineJsonLabel,\n showRawTimelineJson = false\n}: WorkspaceAgentSessionDetailProps): JSX.Element {\n const conversation = useProjectedAgentConversation({\n detail,\n avoidGroupingEdits\n });\n const showLoadingSkeleton =\n detail.turns.length === 0 &&\n (isLoading ||\n detail.activity.status === \"waiting\" ||\n detail.activity.status === \"working\");\n const emptySummary =\n detail.activity.latestActivitySummary ||\n (timelineItemCount > 0\n ? translate(\"agentHost.workspaceAgentSessionDetailEmptyWithTimeline\")\n : translate(\"agentHost.workspaceAgentSessionDetailEmptyNoTimeline\"));\n const flowLabels = useMemo(\n () => ({\n thinkingLabel,\n toolCallsLabel,\n processing: translate(\"agentHost.agentGui.processing\"),\n turnSummary: translate(\"agentHost.agentGui.turnSummary\"),\n rawTimelineJson: rawTimelineJsonLabel\n }),\n [rawTimelineJsonLabel, thinkingLabel, toolCallsLabel]\n );\n const emptyState = useMemo(\n () => (\n <div className=\"workspace-agents-status-panel__detail-empty\">\n {emptySummary}\n </div>\n ),\n [emptySummary]\n );\n\n return (\n <div className=\"workspace-agents-status-panel__detail\">\n <AgentConversationFlow\n conversation={detail.turns.length > 0 ? conversation : null}\n isLoading={showLoadingSkeleton}\n loadingLabel={loadingLabel}\n empty={emptyState}\n onLinkAction={onLinkAction}\n showRawTimelineJson={showRawTimelineJson}\n labels={flowLabels}\n />\n </div>\n );\n}\n\nexport function WorkspaceAgentSessionDetailSkeleton({\n loading = true,\n loadingLabel = translate(\"common.loading\")\n}: {\n loading?: boolean;\n loadingLabel?: string;\n}): JSX.Element {\n const flowLabels = useMemo(\n () => ({\n thinkingLabel: translate(\"agentHost.workspaceAgentSessionDetailThinking\"),\n toolCallsLabel: (count: number) =>\n translate(\"agentHost.workspaceAgentSessionDetailToolCalls\", { count }),\n processing: translate(\"agentHost.agentGui.processing\"),\n turnSummary: translate(\"agentHost.agentGui.turnSummary\")\n }),\n []\n );\n\n if (!loading) {\n return <></>;\n }\n\n return (\n <div\n className=\"workspace-agents-status-panel__detail-skeleton\"\n data-testid=\"workspace-agents-status-panel-detail-skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label={loadingLabel}\n >\n <AgentConversationFlow\n conversation={null}\n isLoading\n loadingLabel={loadingLabel}\n loadingTestId=\"workspace-agents-status-panel-detail-skeleton\"\n empty={null}\n labels={flowLabels}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,eAAyB;AA0D5B,SAyCK,UAzCL;AAtCC,SAAS,4BAA4B;AAAA,EAC1C;AAAA,EACA,qBAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB,UAAU,+CAA+C;AAAA,EACzE,eAAe,UAAU,gBAAgB;AAAA,EACzC;AAAA,EACA,sBAAsB;AACxB,GAAkD;AAChD,QAAM,eAAe,8BAA8B;AAAA,IACjD;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,sBACJ,OAAO,MAAM,WAAW,MACvB,aACC,OAAO,SAAS,WAAW,aAC3B,OAAO,SAAS,WAAW;AAC/B,QAAM,eACJ,OAAO,SAAS,0BACf,oBAAoB,IACjB,UAAU,wDAAwD,IAClE,UAAU,sDAAsD;AACtE,QAAM,aAAa;AAAA,IACjB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,YAAY,UAAU,+BAA+B;AAAA,MACrD,aAAa,UAAU,gCAAgC;AAAA,MACvD,iBAAiB;AAAA,IACnB;AAAA,IACA,CAAC,sBAAsB,eAAe,cAAc;AAAA,EACtD;AACA,QAAM,aAAa;AAAA,IACjB,MACE,oBAAC,SAAI,WAAU,+CACZ,wBACH;AAAA,IAEF,CAAC,YAAY;AAAA,EACf;AAEA,SACE,oBAAC,SAAI,WAAU,yCACb;AAAA,IAAC;AAAA;AAAA,MACC,cAAc,OAAO,MAAM,SAAS,IAAI,eAAe;AAAA,MACvD,WAAW;AAAA,MACX;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,QAAQ;AAAA;AAAA,EACV,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../shared/WorkspaceAgentSessionDetail.tsx"],"sourcesContent":["import { useMemo, type JSX } from \"react\";\nimport type { WorkspaceLinkAction } from \"../contexts/workspace/presentation/renderer/actions/workspaceLinkActions\";\nimport { translate } from \"../i18n/index\";\nimport { AgentConversationFlow } from \"./agentConversation/components/AgentConversationFlow\";\nimport type { AgentConversationParticipantPresentation } from \"./agentConversation/contracts/agentConversationParticipantPresentation\";\nimport { useProjectedAgentConversation } from \"./agentConversation/projection/useProjectedAgentConversation\";\nimport type { WorkspaceAgentSessionDetailViewModel } from \"./workspaceAgentSessionDetailViewModel\";\n\nexport interface WorkspaceAgentSessionDetailProps {\n detail: WorkspaceAgentSessionDetailViewModel;\n avoidGroupingEdits?: boolean;\n isLoading: boolean;\n timelineItemCount: number;\n onLinkAction?: (action: WorkspaceLinkAction) => void;\n toolCallsLabel: (count: number) => string;\n thinkingLabel?: string;\n loadingLabel?: string;\n rawTimelineJsonLabel?: string;\n showRawTimelineJson?: boolean;\n participantPresentation?: AgentConversationParticipantPresentation;\n}\n\nexport function WorkspaceAgentSessionDetail({\n detail,\n avoidGroupingEdits = false,\n isLoading,\n timelineItemCount,\n onLinkAction,\n toolCallsLabel,\n thinkingLabel = translate(\"agentHost.workspaceAgentSessionDetailThinking\"),\n loadingLabel = translate(\"common.loading\"),\n rawTimelineJsonLabel,\n showRawTimelineJson = false,\n participantPresentation\n}: WorkspaceAgentSessionDetailProps): JSX.Element {\n const conversation = useProjectedAgentConversation({\n detail,\n avoidGroupingEdits\n });\n const showLoadingSkeleton =\n detail.turns.length === 0 &&\n (isLoading ||\n detail.activity.status === \"waiting\" ||\n detail.activity.status === \"working\");\n const emptySummary =\n detail.activity.latestActivitySummary ||\n (timelineItemCount > 0\n ? translate(\"agentHost.workspaceAgentSessionDetailEmptyWithTimeline\")\n : translate(\"agentHost.workspaceAgentSessionDetailEmptyNoTimeline\"));\n const flowLabels = useMemo(\n () => ({\n thinkingLabel,\n toolCallsLabel,\n processing: translate(\"agentHost.agentGui.processing\"),\n turnSummary: translate(\"agentHost.agentGui.turnSummary\"),\n rawTimelineJson: rawTimelineJsonLabel\n }),\n [rawTimelineJsonLabel, thinkingLabel, toolCallsLabel]\n );\n const emptyState = useMemo(\n () => (\n <div className=\"workspace-agents-status-panel__detail-empty\">\n {emptySummary}\n </div>\n ),\n [emptySummary]\n );\n\n return (\n <div className=\"workspace-agents-status-panel__detail\">\n <AgentConversationFlow\n conversation={detail.turns.length > 0 ? conversation : null}\n isLoading={showLoadingSkeleton}\n loadingLabel={loadingLabel}\n empty={emptyState}\n onLinkAction={onLinkAction}\n showRawTimelineJson={showRawTimelineJson}\n participantPresentation={participantPresentation}\n labels={flowLabels}\n />\n </div>\n );\n}\n\nexport function WorkspaceAgentSessionDetailSkeleton({\n loading = true,\n loadingLabel = translate(\"common.loading\")\n}: {\n loading?: boolean;\n loadingLabel?: string;\n}): JSX.Element {\n const flowLabels = useMemo(\n () => ({\n thinkingLabel: translate(\"agentHost.workspaceAgentSessionDetailThinking\"),\n toolCallsLabel: (count: number) =>\n translate(\"agentHost.workspaceAgentSessionDetailToolCalls\", { count }),\n processing: translate(\"agentHost.agentGui.processing\"),\n turnSummary: translate(\"agentHost.agentGui.turnSummary\")\n }),\n []\n );\n\n if (!loading) {\n return <></>;\n }\n\n return (\n <div\n className=\"workspace-agents-status-panel__detail-skeleton\"\n data-testid=\"workspace-agents-status-panel-detail-skeleton\"\n role=\"status\"\n aria-busy=\"true\"\n aria-label={loadingLabel}\n >\n <AgentConversationFlow\n conversation={null}\n isLoading\n loadingLabel={loadingLabel}\n loadingTestId=\"workspace-agents-status-panel-detail-skeleton\"\n empty={null}\n labels={flowLabels}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,eAAyB;AA6D5B,SA0CK,UA1CL;AAvCC,SAAS,4BAA4B;AAAA,EAC1C;AAAA,EACA,qBAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB,UAAU,+CAA+C;AAAA,EACzE,eAAe,UAAU,gBAAgB;AAAA,EACzC;AAAA,EACA,sBAAsB;AAAA,EACtB;AACF,GAAkD;AAChD,QAAM,eAAe,8BAA8B;AAAA,IACjD;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,sBACJ,OAAO,MAAM,WAAW,MACvB,aACC,OAAO,SAAS,WAAW,aAC3B,OAAO,SAAS,WAAW;AAC/B,QAAM,eACJ,OAAO,SAAS,0BACf,oBAAoB,IACjB,UAAU,wDAAwD,IAClE,UAAU,sDAAsD;AACtE,QAAM,aAAa;AAAA,IACjB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,YAAY,UAAU,+BAA+B;AAAA,MACrD,aAAa,UAAU,gCAAgC;AAAA,MACvD,iBAAiB;AAAA,IACnB;AAAA,IACA,CAAC,sBAAsB,eAAe,cAAc;AAAA,EACtD;AACA,QAAM,aAAa;AAAA,IACjB,MACE,oBAAC,SAAI,WAAU,+CACZ,wBACH;AAAA,IAEF,CAAC,YAAY;AAAA,EACf;AAEA,SACE,oBAAC,SAAI,WAAU,yCACb;AAAA,IAAC;AAAA;AAAA,MACC,cAAc,OAAO,MAAM,SAAS,IAAI,eAAe;AAAA,MACvD,WAAW;AAAA,MACX;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA;AAAA,EACV,GACF;AAEJ;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
3
  import { I18nRuntime } from '@tutti-os/ui-i18n-runtime';
4
- import { AgentActivityGoalControlInput, AgentActivityGoalControlResult, AgentActivityCreateSessionInput, AgentActivitySession, AgentActivityDeleteSessionInput, AgentActivityDeleteSessionResult, AgentActivitySendInput, AgentActivitySessionSettings, AgentActivityActivateSessionResult, AgentActivityUpdateTuttiModeActivationInput, AgentActivityUpdateTuttiModeActivationResult, AgentActivitySnapshot, AgentSessionEngine, AgentActivityMessageOrder, AgentActivityMessagePage, AgentActivitySendInputResult, AgentActivityRenameSessionInput, AgentActivitySetCollaborationAdoptionInput, AgentActivityCollaborationRun, AgentActivitySubmitInteractiveInput, AgentActivitySubmitInteractiveResult, AgentActivitySnapshotListener, AgentActivitySubmitSettingsPatch } from '@tutti-os/agent-activity-core';
4
+ import { AgentActivityGoalControlInput, AgentActivityGoalControlResult, AgentActivityCreateSessionInput, AgentActivitySession, AgentActivityDeleteSessionInput, AgentActivityDeleteSessionResult, AgentActivitySendInput, AgentActivityRailPlacement, AgentActivitySessionSettings, AgentActivityActivateSessionResult, AgentActivityUpdateTuttiModeActivationInput, AgentActivityUpdateTuttiModeActivationResult, AgentActivitySnapshot, AgentSessionEngine, AgentActivityMessageOrder, AgentActivityMessagePage, AgentActivitySendInputResult, AgentActivityRenameSessionInput, AgentActivitySetCollaborationAdoptionInput, AgentActivityCollaborationRun, AgentActivitySubmitInteractiveInput, AgentActivitySubmitInteractiveResult, AgentActivitySnapshotListener, AgentActivitySubmitSettingsPatch } from '@tutti-os/agent-activity-core';
5
5
  import { l as AgentHostAgentSessionComposerSettings, p as AgentHostUnactivateAgentSessionResult, b as AgentGUIAgentTarget, f as AgentGUIProvider, q as AgentPromptContentBlock, e as AgentGUINodeData, P as Point, g as AgentGUIProviderRailAllPresentation, h as AgentGUIProviderRailMode, i as AgentGUIProviderReadinessGate, j as AgentGUITargetConnectionSource, d as AgentGUIHomeSuggestionId, N as NodeFrame, a as AgentGUIAgentDirectorySnapshot, c as AgentGUIAllAgentsPresentation } from './types-CHAMK2g7.js';
6
6
  import { A as AgentComposerDraft, i as AgentSessionCommand, d as AgentGUIProviderSkillOption, b as AgentGUIComposerSettingsVM, e as AgentGUIQueueStatus, f as AgentGUIQueuedPromptVM, h as AgentMessageMarkdownWorkspaceAppIcon, j as AgentSlashCommandCapability, c as AgentGUINodeViewModel, a as AgentComposerDraftFile, k as AgentUsageQuota, g as AgentHostInputApi } from './agentGuiNodeTypes-DTeerTzS.js';
7
7
  import { WorkspaceFileReference, ReferenceLocateTarget, WorkspaceFileReferenceAdapter, ReferenceProvenanceCatalog } from '@tutti-os/workspace-file-reference/contracts';
@@ -184,6 +184,7 @@ interface AgentActivityRuntimeActivateSessionInputBase {
184
184
  initialContent?: AgentActivitySendInput["content"];
185
185
  /** 仅展示用首轮文本(bundle 折叠成一个 chip);initialContent 仍带展开后的文件。 */
186
186
  initialDisplayPrompt?: string | null;
187
+ railPlacement?: AgentActivityRailPlacement;
187
188
  submitDiagnostics?: AgentActivitySendInput["submitDiagnostics"];
188
189
  settings?: AgentActivitySessionSettings;
189
190
  title?: string;
package/dist/agent-gui.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AgentGUI
3
- } from "./chunk-VZ4QAXXL.js";
3
+ } from "./chunk-STOGLKFA.js";
4
4
  import "./chunk-LB4AGT7B.js";
5
5
  import "./chunk-A4WCTHWS.js";
6
6
  import "./chunk-X5V6P2EB.js";
@@ -9,15 +9,15 @@ import "./chunk-4CHBM3G3.js";
9
9
  import "./chunk-CBMWHQ7P.js";
10
10
  import "./chunk-MGSRWYRN.js";
11
11
  import "./chunk-GWKXYGUN.js";
12
- import "./chunk-UVJBQ6WD.js";
12
+ import "./chunk-GJZEMI6Z.js";
13
13
  import "./chunk-XD5NTTFJ.js";
14
14
  import "./chunk-CXC3ROXQ.js";
15
15
  import "./chunk-UP3ZDYTN.js";
16
16
  import "./chunk-GUFEHWUX.js";
17
- import "./chunk-5ZO3H4C5.js";
17
+ import "./chunk-VDTG6M6K.js";
18
18
  import "./chunk-CX6XXG6R.js";
19
19
  import "./chunk-G7DS23D4.js";
20
- import "./chunk-F5ARZZES.js";
20
+ import "./chunk-4OJSSUEU.js";
21
21
  import "./chunk-VMPA46ET.js";
22
22
  import "./chunk-XJ34OIEQ.js";
23
23
  import "./chunk-JDVP33S5.js";
@@ -25,13 +25,13 @@ import "./chunk-JXFOFJYI.js";
25
25
  import "./chunk-3V5OCA2M.js";
26
26
  import "./chunk-RMQREVJY.js";
27
27
  import "./chunk-FGLQZ6I4.js";
28
- import "./chunk-MFQB4LR5.js";
28
+ import "./chunk-FHCARLIO.js";
29
29
  import "./chunk-EVQ4JY3N.js";
30
- import "./chunk-PWPVYNGO.js";
30
+ import "./chunk-ZTRTBLLP.js";
31
31
  import "./chunk-ZVYUTXQJ.js";
32
32
  import "./chunk-UEBPMWKS.js";
33
33
  import "./chunk-YMXYBG7U.js";
34
- import "./chunk-3FA5JIDL.js";
34
+ import "./chunk-K5AOJ5DO.js";
35
35
  import "./chunk-F5UR6EJG.js";
36
36
  import "./chunk-M6HTOCQK.js";
37
37
  import "./chunk-EOGTJQID.js";
@@ -8,7 +8,7 @@ import {
8
8
  isPromptRequestIdTitle,
9
9
  latestPlanTurnId,
10
10
  planImplementationPromptFromPlanTurn
11
- } from "../chunk-MFQB4LR5.js";
11
+ } from "../chunk-FHCARLIO.js";
12
12
  import {
13
13
  useEngineSelector
14
14
  } from "../chunk-EVQ4JY3N.js";
@@ -21,7 +21,7 @@ import {
21
21
  isExitPlanSwitchModeInput,
22
22
  normalizeAgentApprovalPurpose,
23
23
  normalizeAskUserQuestions
24
- } from "../chunk-PWPVYNGO.js";
24
+ } from "../chunk-ZTRTBLLP.js";
25
25
  import {
26
26
  cn
27
27
  } from "../chunk-ZVYUTXQJ.js";
@@ -34,7 +34,7 @@ import {
34
34
  } from "../chunk-YMXYBG7U.js";
35
35
  import {
36
36
  workspaceAgentProviderLabel
37
- } from "../chunk-3FA5JIDL.js";
37
+ } from "../chunk-K5AOJ5DO.js";
38
38
  import "../chunk-F5UR6EJG.js";
39
39
  import {
40
40
  managedAgentRoundedIconUrl
@@ -3731,6 +3731,38 @@ aside.workspace-agents-status-panel
3731
3731
  justify-items: end;
3732
3732
  }
3733
3733
 
3734
+ .agent-gui-conversation__participant-message-layout {
3735
+ display: grid;
3736
+ width: 100%;
3737
+ min-width: 0;
3738
+ column-gap: 10px;
3739
+ align-items: start;
3740
+ }
3741
+
3742
+ .agent-gui-conversation__participant-message-layout[data-agent-message-speaker="assistant"] {
3743
+ grid-template-columns: 32px minmax(0, 1fr);
3744
+ }
3745
+
3746
+ .agent-gui-conversation__participant-message-layout[data-agent-message-speaker="user"] {
3747
+ grid-template-columns: minmax(0, 1fr) 32px;
3748
+ }
3749
+
3750
+ .agent-gui-conversation__participant-message-content {
3751
+ display: grid;
3752
+ width: 100%;
3753
+ min-width: 0;
3754
+ }
3755
+
3756
+ .agent-gui-conversation__participant-message-layout[data-agent-message-speaker="user"]
3757
+ > .agent-gui-conversation__participant-message-content {
3758
+ row-gap: 14px;
3759
+ justify-items: end;
3760
+ }
3761
+
3762
+ .agent-gui-conversation__participant-avatar {
3763
+ margin-top: 2px;
3764
+ }
3765
+
3734
3766
  .agent-gui-conversation__message-group {
3735
3767
  position: relative;
3736
3768
  display: grid;
@@ -20,7 +20,7 @@ import {
20
20
  import {
21
21
  getOptionalAgentHostApi,
22
22
  workspaceAgentProviderLabel
23
- } from "./chunk-3FA5JIDL.js";
23
+ } from "./chunk-K5AOJ5DO.js";
24
24
  import {
25
25
  translate,
26
26
  translateInUiLanguage
@@ -3049,4 +3049,4 @@ export {
3049
3049
  AgentMentionSearchController,
3050
3050
  preloadAgentMentionBrowse
3051
3051
  };
3052
- //# sourceMappingURL=chunk-F5ARZZES.js.map
3052
+ //# sourceMappingURL=chunk-4OJSSUEU.js.map
@@ -2,11 +2,11 @@ import {
2
2
  AgentGUIConversation_styles_default,
3
3
  MessageSquareMoreIcon,
4
4
  extractAgentMcpToolTarget
5
- } from "./chunk-PWPVYNGO.js";
5
+ } from "./chunk-ZTRTBLLP.js";
6
6
  import {
7
7
  getOptionalAgentHostApi,
8
8
  useOptionalAgentHostApi
9
- } from "./chunk-3FA5JIDL.js";
9
+ } from "./chunk-K5AOJ5DO.js";
10
10
  import {
11
11
  fileChangePathsFromChanges
12
12
  } from "./chunk-F5UR6EJG.js";
@@ -1518,4 +1518,4 @@ export {
1518
1518
  isPromptRequestIdTitle,
1519
1519
  AgentInteractivePromptSurface
1520
1520
  };
1521
- //# sourceMappingURL=chunk-MFQB4LR5.js.map
1521
+ //# sourceMappingURL=chunk-FHCARLIO.js.map