@tutti-os/agent-gui 0.0.15 → 0.0.17

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 (50) hide show
  1. package/dist/AgentMentionSearchController-DqssJ2-b.d.ts +218 -0
  2. package/dist/agent-conversation/index.d.ts +3 -1
  3. package/dist/agent-conversation/index.js +5 -4
  4. package/dist/agent-conversation/index.js.map +1 -1
  5. package/dist/agent-message-center/index.d.ts +6 -2
  6. package/dist/agent-message-center/index.js +714 -291
  7. package/dist/agent-message-center/index.js.map +1 -1
  8. package/dist/app/renderer/agentactivity.css +176 -8
  9. package/dist/{chunk-KJPMZ7G5.js → chunk-65YMY2M3.js} +43 -17
  10. package/dist/chunk-65YMY2M3.js.map +1 -0
  11. package/dist/{chunk-OFGXNXYT.js → chunk-CDTTIUPL.js} +2 -2
  12. package/dist/{chunk-EK5RDKG7.js → chunk-GWR6WGZY.js} +21 -11
  13. package/dist/chunk-GWR6WGZY.js.map +1 -0
  14. package/dist/{chunk-H4HT3FE6.js → chunk-HVOPJU2K.js} +40 -30
  15. package/dist/chunk-HVOPJU2K.js.map +1 -0
  16. package/dist/{chunk-7CBJJNX6.js → chunk-JNGYJ7GM.js} +2 -2
  17. package/dist/{chunk-7CBJJNX6.js.map → chunk-JNGYJ7GM.js.map} +1 -1
  18. package/dist/{chunk-YKDFQADM.js → chunk-K44WER5Z.js} +177 -332
  19. package/dist/chunk-K44WER5Z.js.map +1 -0
  20. package/dist/{chunk-U4F3COKL.js → chunk-KHTIC52P.js} +83 -115
  21. package/dist/chunk-KHTIC52P.js.map +1 -0
  22. package/dist/chunk-O5TUTXHT.js +196 -0
  23. package/dist/chunk-O5TUTXHT.js.map +1 -0
  24. package/dist/{chunk-XHQGCP7A.js → chunk-OJ5WX7SZ.js} +2 -2
  25. package/dist/{chunk-SVOGXWFJ.js → chunk-VNAQ6QFE.js} +562 -468
  26. package/dist/chunk-VNAQ6QFE.js.map +1 -0
  27. package/dist/{chunk-2CA4NPP3.js → chunk-VO2TZNKV.js} +10 -7
  28. package/dist/{chunk-2CA4NPP3.js.map → chunk-VO2TZNKV.js.map} +1 -1
  29. package/dist/context-mention-palette/index.d.ts +5 -104
  30. package/dist/context-mention-palette/index.js +6 -5
  31. package/dist/i18n/index.d.ts +42 -16
  32. package/dist/i18n/index.js +1 -1
  33. package/dist/index.d.ts +22 -2
  34. package/dist/index.js +2002 -1329
  35. package/dist/index.js.map +1 -1
  36. package/dist/workbench/contribution.js +2 -2
  37. package/dist/workbench/index.d.ts +2 -1
  38. package/dist/workbench/index.js +2 -2
  39. package/dist/workbench/launch.js +1 -1
  40. package/dist/workspace-agent-generated-files.js +2 -2
  41. package/package.json +12 -12
  42. package/dist/agentFileMentionExtension-CM1c9bqk.d.ts +0 -86
  43. package/dist/chunk-EK5RDKG7.js.map +0 -1
  44. package/dist/chunk-H4HT3FE6.js.map +0 -1
  45. package/dist/chunk-KJPMZ7G5.js.map +0 -1
  46. package/dist/chunk-SVOGXWFJ.js.map +0 -1
  47. package/dist/chunk-U4F3COKL.js.map +0 -1
  48. package/dist/chunk-YKDFQADM.js.map +0 -1
  49. /package/dist/{chunk-OFGXNXYT.js.map → chunk-CDTTIUPL.js.map} +0 -0
  50. /package/dist/{chunk-XHQGCP7A.js.map → chunk-OJ5WX7SZ.js.map} +0 -0
@@ -8,8 +8,8 @@ import {
8
8
  createAgentGuiWorkbenchContribution,
9
9
  resolveAgentGuiWorkbenchContributionCopy,
10
10
  resolveAgentGuiWorkbenchDefaultLaunchFrame
11
- } from "../chunk-EK5RDKG7.js";
12
- import "../chunk-7CBJJNX6.js";
11
+ } from "../chunk-GWR6WGZY.js";
12
+ import "../chunk-JNGYJ7GM.js";
13
13
  import "../chunk-MUZMBEFO.js";
14
14
  import "../chunk-22L4VWUR.js";
15
15
  import "../chunk-IXIGWLQY.js";
@@ -17,10 +17,11 @@ interface AgentGuiWorkbenchHeaderProps extends HTMLAttributes<HTMLElement> {
17
17
  defaultActions?: ReactNode;
18
18
  isConversationRailAutoCollapsed: boolean;
19
19
  isConversationRailCollapsed: boolean;
20
+ conversationTitle?: string | null;
20
21
  onCreateConversation?: () => void;
21
22
  onToggleConversationRail: (nextCollapsed: boolean) => void;
22
23
  title?: string;
23
24
  }
24
- declare function AgentGuiWorkbenchHeader({ className, copy, defaultActions, isConversationRailAutoCollapsed, isConversationRailCollapsed, onCreateConversation, onToggleConversationRail, title, ...headerProps }: AgentGuiWorkbenchHeaderProps): ReactNode;
25
+ declare function AgentGuiWorkbenchHeader({ className, copy, defaultActions, isConversationRailAutoCollapsed, isConversationRailCollapsed, conversationTitle, onCreateConversation, onToggleConversationRail, title, ...headerProps }: AgentGuiWorkbenchHeaderProps): ReactNode;
25
26
 
26
27
  export { AgentGuiWorkbenchHeader, type AgentGuiWorkbenchHeaderCopy, type AgentGuiWorkbenchHeaderProps };
@@ -6,7 +6,7 @@ import {
6
6
  agentGuiWorkbenchDefaultNodeFrame,
7
7
  createAgentGuiWorkbenchContribution,
8
8
  resolveAgentGuiWorkbenchContributionCopy
9
- } from "../chunk-EK5RDKG7.js";
9
+ } from "../chunk-GWR6WGZY.js";
10
10
  import {
11
11
  agentGuiWorkbenchDockEntryId,
12
12
  agentGuiWorkbenchInstanceId,
@@ -17,7 +17,7 @@ import {
17
17
  createAgentGuiWorkbenchInstanceId,
18
18
  createAgentGuiWorkbenchLaunchDescriptor,
19
19
  createAgentGuiWorkbenchSessionLaunchRequest
20
- } from "../chunk-7CBJJNX6.js";
20
+ } from "../chunk-JNGYJ7GM.js";
21
21
  import {
22
22
  agentGuiWorkbenchProviderFromInstanceId,
23
23
  areAgentGuiWorkbenchNodeStatesEqual,
@@ -8,7 +8,7 @@ import {
8
8
  createAgentGuiWorkbenchInstanceId,
9
9
  createAgentGuiWorkbenchLaunchDescriptor,
10
10
  createAgentGuiWorkbenchSessionLaunchRequest
11
- } from "../chunk-7CBJJNX6.js";
11
+ } from "../chunk-JNGYJ7GM.js";
12
12
  import "../chunk-22L4VWUR.js";
13
13
  import {
14
14
  agentGuiWorkbenchPrefillPromptActivationType
@@ -4,14 +4,14 @@ import {
4
4
  resolveWorkspaceAgentActivityStatus,
5
5
  resolveWorkspaceAgentActivityTitle,
6
6
  reuseWorkspaceAgentActivityListViewModelIfUnchanged
7
- } from "./chunk-XHQGCP7A.js";
7
+ } from "./chunk-OJ5WX7SZ.js";
8
8
  import "./chunk-IBIMGLCD.js";
9
9
  import "./chunk-XJ34OIEQ.js";
10
10
  import {
11
11
  workspaceAgentProviderLabel
12
12
  } from "./chunk-TYGL25EL.js";
13
13
  import "./chunk-GCBDIQDX.js";
14
- import "./chunk-KJPMZ7G5.js";
14
+ import "./chunk-65YMY2M3.js";
15
15
  export {
16
16
  buildWorkspaceAgentActivityListViewModel,
17
17
  collectWorkspaceAgentGeneratedFiles,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tutti-os/agent-gui",
3
- "version": "0.0.15",
3
+ "version": "0.0.17",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -82,17 +82,17 @@
82
82
  },
83
83
  "dependencies": {
84
84
  "@monaco-editor/react": "^4.7.0",
85
- "@tutti-os/agent-activity-core": "0.0.15",
86
- "@tutti-os/ui-i18n-runtime": "0.0.15",
87
- "@tutti-os/ui-rich-text": "0.0.15",
88
- "@tutti-os/ui-react-hooks": "0.0.15",
89
- "@tutti-os/ui-system": "0.0.15",
90
- "@tutti-os/workbench-surface": "0.0.15",
91
- "@tutti-os/workspace-external-core": "0.0.15",
92
- "@tutti-os/workspace-file-manager": "0.0.15",
93
- "@tutti-os/workspace-file-reference": "0.0.15",
94
- "@tutti-os/workspace-issue-manager": "0.0.15",
95
- "@tutti-os/workspace-user-project": "0.0.15",
85
+ "@tutti-os/agent-activity-core": "0.0.17",
86
+ "@tutti-os/ui-i18n-runtime": "0.0.17",
87
+ "@tutti-os/ui-rich-text": "0.0.17",
88
+ "@tutti-os/ui-react-hooks": "0.0.17",
89
+ "@tutti-os/ui-system": "0.0.17",
90
+ "@tutti-os/workbench-surface": "0.0.17",
91
+ "@tutti-os/workspace-external-core": "0.0.17",
92
+ "@tutti-os/workspace-file-manager": "0.0.17",
93
+ "@tutti-os/workspace-file-reference": "0.0.17",
94
+ "@tutti-os/workspace-issue-manager": "0.0.17",
95
+ "@tutti-os/workspace-user-project": "0.0.17",
96
96
  "@tanstack/react-virtual": "^3.13.12",
97
97
  "@tiptap/core": "^3.11.1",
98
98
  "@tiptap/pm": "^3.23.6",
@@ -1,86 +0,0 @@
1
- type AgentFileMentionKind = "file" | "directory" | "unknown";
2
- type AgentMentionFileNavigationAction = "agent-generated-folder" | "agent-generated-folder-back";
3
- type AgentMentionScope = "my_sessions" | "collab_sessions";
4
- /** 折叠在一个 bundle 节点里的单个文件(只携带路径与展示名)。 */
5
- interface AgentMentionBundleFile {
6
- path: string;
7
- name: string;
8
- }
9
- interface AgentMentionFileItem {
10
- kind: "file";
11
- path: string;
12
- href: string;
13
- name: string;
14
- entryKind: AgentFileMentionKind;
15
- directoryPath: string;
16
- score?: number;
17
- thumbnailUrl?: string | null;
18
- mentionNavigation?: AgentMentionFileNavigationAction;
19
- childCount?: number;
20
- }
21
- interface AgentMentionSessionItem {
22
- kind: "session";
23
- href: string;
24
- workspaceId: string;
25
- targetId: string;
26
- name: string;
27
- title: string;
28
- scope: AgentMentionScope;
29
- initiatorName: string;
30
- initiatorAvatarUrl?: string;
31
- agentName: string;
32
- status?: string;
33
- inputPreview?: string;
34
- summaryPreview?: string;
35
- updatedAtUnixMs?: number;
36
- }
37
- interface AgentMentionWorkspaceIssueItem {
38
- kind: "workspace-issue";
39
- href: string;
40
- workspaceId: string;
41
- targetId: string;
42
- topicId?: string;
43
- name: string;
44
- title: string;
45
- creatorName?: string;
46
- status?: string;
47
- contentPreview?: string;
48
- updatedAtUnixMs?: number;
49
- }
50
- interface AgentMentionWorkspaceAppItem {
51
- kind: "workspace-app";
52
- href: string;
53
- workspaceId: string;
54
- targetId: string;
55
- appId: string;
56
- name: string;
57
- description?: string;
58
- iconUrl?: string;
59
- /** 应用是否能够提供产物文件(reference),决定 @ 面板行末尾是否展示「查看产物文件」入口。 */
60
- referencesListSupported?: boolean;
61
- }
62
- interface AgentMentionWorkspaceAppBundleItem {
63
- kind: "workspace-app-bundle";
64
- href: string;
65
- workspaceId: string;
66
- targetId: string;
67
- /** 可选:来源 app id(用于 href 身份);文件夹 bundle 不一定有。 */
68
- appId?: string;
69
- name: string;
70
- iconUrl?: string;
71
- /** 递归打平后的全部子文件;序列化时逐个展开为 file mention。 */
72
- files: AgentMentionBundleFile[];
73
- }
74
- interface AgentMentionWorkspaceAppFactoryItem {
75
- kind: "workspace-app-factory";
76
- href: string;
77
- workspaceId: string;
78
- targetId: string;
79
- jobId: string;
80
- name: string;
81
- action?: string;
82
- contextPath?: string;
83
- }
84
- type AgentContextMentionItem = AgentMentionFileItem | AgentMentionSessionItem | AgentMentionWorkspaceAppItem | AgentMentionWorkspaceAppBundleItem | AgentMentionWorkspaceAppFactoryItem | AgentMentionWorkspaceIssueItem;
85
-
86
- export type { AgentContextMentionItem as A };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../workbench/contribution.ts","../workbench/header.ts"],"sourcesContent":["import { createElement, type ReactNode } from \"react\";\nimport {\n getWorkbenchLayoutFrame,\n type WorkbenchContribution,\n type WorkbenchFrame,\n type WorkbenchHostDockEntry,\n type WorkbenchHostDockPopupItemInput,\n type WorkbenchHostLaunchRequest,\n type WorkbenchHostNodeBodyContext\n} from \"@tutti-os/workbench-surface\";\nimport {\n resolveAgentGUIExpandedWindowFrame,\n shouldAutoCollapseAgentGUIConversationRail\n} from \"../agent-gui/agentGuiNode/model/agentGuiRailLayout.ts\";\nimport { agentGuiDockIconUrls } from \"../dockIcons.ts\";\nimport { AgentGuiWorkbenchHeader } from \"./header.ts\";\nimport {\n agentGuiWorkbenchDockEntryId,\n agentGuiWorkbenchProviderFromIdentifier,\n agentGuiWorkbenchTypeId,\n createAgentGuiWorkbenchLaunchDescriptor\n} from \"./launch.ts\";\nimport {\n agentGuiWorkbenchProviderFromInstanceId,\n createAgentGuiWorkbenchNodeStateSource,\n normalizeAgentGuiWorkbenchNodeState,\n normalizeAgentGuiWorkbenchState\n} from \"./state.ts\";\nimport {\n agentGuiWorkbenchProviderLabels,\n agentGuiWorkbenchProviders,\n isAgentGuiWorkbenchDefaultDockProvider,\n resolveAgentGuiWorkbenchProviderLabel\n} from \"./providerCatalog.ts\";\nimport type {\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState\n} from \"./types.ts\";\n\nexport const agentGuiWorkbenchDefaultNodeFrame: WorkbenchFrame = {\n height: 560,\n width: 1040,\n x: 140,\n y: 48\n};\n\nexport const agentGuiWorkbenchDefaultUsableHeightRatio = 0.7;\nexport const agentGuiWorkbenchCompactVisibleAreaRatio = 0.9;\n\nexport const AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT =\n \"tutti:agent-gui-workbench-conversation-rail-toggle\";\n\nexport const AGENT_GUI_WORKBENCH_NEW_CONVERSATION_EVENT =\n \"tutti:agent-gui-workbench-new-conversation\";\n\nexport interface AgentGuiWorkbenchConversationRailToggleDetail {\n conversationRailCollapsed: boolean;\n instanceId: string;\n}\n\nexport interface AgentGuiWorkbenchNewConversationDetail {\n instanceId: string;\n}\n\nexport interface AgentGuiWorkbenchContributionCopy {\n collapseConversationRail: string;\n expandConversationRail: string;\n fallbackAgentLabel: string;\n newConversation: string;\n nodeTitle: string;\n}\n\nexport type AgentGuiWorkbenchContributionCopyOverrides =\n Partial<AgentGuiWorkbenchContributionCopy>;\n\nexport const agentGuiWorkbenchDefaultCopy: AgentGuiWorkbenchContributionCopy = {\n collapseConversationRail: \"Collapse conversation rail\",\n expandConversationRail: \"Expand conversation rail\",\n fallbackAgentLabel: \"Agent\",\n newConversation: \"New conversation\",\n nodeTitle: \"Agent\"\n};\n\nexport interface AgentGuiWorkbenchRenderBodyHelpers {\n nodeTypeId: string;\n onStateChange(state: AgentGuiWorkbenchState): void;\n provider: AgentGuiWorkbenchProvider;\n}\n\nexport interface CreateAgentGuiWorkbenchContributionInput {\n copy?: AgentGuiWorkbenchContributionCopyOverrides;\n dockIconUrls?: Partial<Record<AgentGuiWorkbenchProvider, string>>;\n dockSectionId?: string;\n frame?: WorkbenchFrame;\n id?: string;\n renderBody(\n context: WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n helpers: AgentGuiWorkbenchRenderBodyHelpers\n ): ReactNode;\n renderPreview?(\n context: WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n helpers: AgentGuiWorkbenchRenderBodyHelpers\n ): ReactNode;\n resolveDockPopupTitle?: (\n state: AgentGuiWorkbenchState | null\n ) => string | null;\n resolveDockEntryVisibility?: (\n provider: AgentGuiWorkbenchProvider\n ) => WorkbenchHostDockEntry[\"visibility\"];\n workspaceId: string;\n}\n\nexport function createAgentGuiWorkbenchContribution(\n input: CreateAgentGuiWorkbenchContributionInput\n): WorkbenchContribution {\n const nodeStateSource = createAgentGuiWorkbenchNodeStateSource({\n workspaceId: input.workspaceId\n });\n const frame = input.frame ?? agentGuiWorkbenchDefaultNodeFrame;\n const copy = resolveAgentGuiWorkbenchContributionCopy(input.copy);\n\n return {\n dockEntries: agentGuiWorkbenchProviders.map((provider, index) =>\n createAgentGuiWorkbenchDockEntry({\n label: agentGuiWorkbenchProviderLabels[provider],\n iconUrl:\n input.dockIconUrls?.[provider] ?? agentGuiDockIconUrls[provider],\n order: index,\n provider,\n renderPreview: input.renderPreview,\n resolveDockPopupTitle: input.resolveDockPopupTitle,\n sectionId: input.dockSectionId ?? \"agents\",\n visibility:\n input.resolveDockEntryVisibility?.(provider) ??\n (isAgentGuiWorkbenchDefaultDockProvider(provider)\n ? \"always\"\n : \"never\")\n })\n ),\n externalStateSource: nodeStateSource.externalStateSource,\n id: input.id ?? \"workspace-agent-gui\",\n nodes: [\n {\n frame,\n instance: { mode: \"multi\" },\n renderBody: (context) =>\n input.renderBody(\n context as WorkbenchHostNodeBodyContext<\n AgentGuiWorkbenchState | null,\n unknown\n >,\n {\n nodeTypeId: agentGuiWorkbenchTypeId,\n onStateChange: (state) => {\n nodeStateSource.writeNodeState({\n instanceId: context.instanceId,\n nodeId: context.node.id,\n state,\n typeId: agentGuiWorkbenchTypeId\n });\n },\n provider: agentGuiWorkbenchProviderFromInstanceId(\n context.instanceId\n )\n }\n ),\n renderHeader: ({\n defaultActions,\n dragHandleProps,\n externalNodeState,\n instanceId,\n isFocused,\n node,\n surfaceSize,\n windowActions\n }) => {\n const provider = agentGuiWorkbenchProviderFromInstanceId(instanceId);\n const title = resolveAgentGuiWorkbenchProviderLabel(provider);\n const workbenchState = normalizeAgentGuiWorkbenchState(\n externalNodeState ?? node.data.runtimeNodeState\n );\n const nodeState = normalizeAgentGuiWorkbenchNodeState(\n workbenchState,\n provider\n );\n const isConversationRailAutoCollapsed =\n shouldAutoCollapseAgentGUIConversationRail(node.frame.width);\n const isConversationRailCollapsed =\n nodeState.conversationRailCollapsed === true ||\n isConversationRailAutoCollapsed;\n const persistConversationRailCollapsed = (collapsed: boolean) => {\n nodeStateSource.writeNodeState({\n instanceId,\n nodeId: node.id,\n state: {\n ...workbenchState,\n conversationRailCollapsed: collapsed\n },\n typeId: agentGuiWorkbenchTypeId\n });\n };\n const announceConversationRailCollapsed = (collapsed: boolean) => {\n window.dispatchEvent(\n new CustomEvent<AgentGuiWorkbenchConversationRailToggleDetail>(\n AGENT_GUI_WORKBENCH_CONVERSATION_RAIL_TOGGLE_EVENT,\n {\n detail: {\n conversationRailCollapsed: collapsed,\n instanceId\n }\n }\n )\n );\n };\n const announceNewConversation = () => {\n window.dispatchEvent(\n new CustomEvent<AgentGuiWorkbenchNewConversationDetail>(\n AGENT_GUI_WORKBENCH_NEW_CONVERSATION_EVENT,\n {\n detail: {\n instanceId\n }\n }\n )\n );\n };\n\n return createElement(AgentGuiWorkbenchHeader, {\n copy,\n defaultActions,\n isConversationRailAutoCollapsed,\n isConversationRailCollapsed,\n title,\n ...dragHandleProps,\n onCreateConversation: announceNewConversation,\n onPointerDown: (event) => {\n dragHandleProps.onPointerDown?.(event);\n if (!isFocused) {\n windowActions.focus();\n }\n },\n onToggleConversationRail: (nextCollapsed) => {\n announceConversationRailCollapsed(nextCollapsed);\n if (\n isConversationRailCollapsed &&\n nextCollapsed === false &&\n node.displayMode !== \"fullscreen\"\n ) {\n const expandedFrame = resolveAgentGUIExpandedWindowFrame({\n conversationRailWidthPx: nodeState.conversationRailWidthPx,\n desktopSize: surfaceSize,\n height: node.frame.height,\n position: {\n x: node.frame.x,\n y: node.frame.y\n },\n width: node.frame.width\n });\n\n windowActions.resize({\n ...node.frame,\n height: expandedFrame.size.height,\n width: expandedFrame.size.width,\n x: expandedFrame.position.x,\n y: expandedFrame.position.y\n });\n }\n\n persistConversationRailCollapsed(nextCollapsed);\n }\n });\n },\n title: copy.nodeTitle,\n typeId: agentGuiWorkbenchTypeId,\n window: {\n closable: true,\n defaultOpen: false,\n minimizedDock: {\n kind: \"snapshot\"\n },\n minimizable: true\n }\n }\n ],\n onLaunchRequest: (request) => {\n if (request.typeId !== agentGuiWorkbenchTypeId) {\n return null;\n }\n\n const {\n activation,\n dockEntryId,\n instanceId,\n provider,\n reuseDockEntryNode,\n targetAgentSessionId\n } = createAgentGuiWorkbenchLaunchDescriptor(request);\n const title = resolveAgentGuiWorkbenchProviderLabel(provider);\n if (targetAgentSessionId) {\n const previousState = nodeStateSource.readNodeState({\n instanceId,\n typeId: agentGuiWorkbenchTypeId\n });\n nodeStateSource.writeNodeState({\n instanceId,\n state: {\n ...normalizeAgentGuiWorkbenchState(previousState),\n ...(targetAgentSessionId\n ? { lastActiveAgentSessionId: targetAgentSessionId }\n : {})\n },\n typeId: agentGuiWorkbenchTypeId\n });\n }\n const defaultFrame = resolveAgentGuiWorkbenchDefaultLaunchFrame({\n frame,\n request\n });\n return {\n activation,\n defaultFrame,\n dockEntryId,\n framePolicy: isAgentGuiWorkbenchCompactVisibleFrame(defaultFrame, frame)\n ? \"absolute\"\n : \"cascade-same-type-centered\",\n instanceId,\n reuseDockEntryNode,\n title,\n typeId: agentGuiWorkbenchTypeId\n };\n }\n };\n}\n\nexport function resolveAgentGuiWorkbenchDefaultLaunchFrame(input: {\n frame: WorkbenchFrame;\n request: Pick<\n WorkbenchHostLaunchRequest,\n \"layoutConstraints\" | \"surfaceSize\"\n >;\n}): WorkbenchFrame {\n const layoutFrame = getWorkbenchLayoutFrame(\n input.request.surfaceSize,\n input.request.layoutConstraints\n );\n const defaultHeight = Math.round(\n layoutFrame.height * agentGuiWorkbenchDefaultUsableHeightRatio\n );\n const shouldUseCompactWidth = layoutFrame.width < input.frame.width;\n const shouldUseCompactHeight =\n layoutFrame.height <\n input.frame.height / agentGuiWorkbenchCompactVisibleAreaRatio;\n\n if (shouldUseCompactWidth || shouldUseCompactHeight) {\n const width = shouldUseCompactWidth\n ? Math.round(layoutFrame.width * agentGuiWorkbenchCompactVisibleAreaRatio)\n : input.frame.width;\n const height = Math.round(\n layoutFrame.height * agentGuiWorkbenchCompactVisibleAreaRatio\n );\n\n return {\n height,\n width,\n x: Math.round(layoutFrame.x + (layoutFrame.width - width) / 2),\n y: Math.round(layoutFrame.y + (layoutFrame.height - height) / 2)\n };\n }\n\n return {\n ...input.frame,\n height: defaultHeight\n };\n}\n\nfunction isAgentGuiWorkbenchCompactVisibleFrame(\n frame: WorkbenchFrame,\n defaultFrame: WorkbenchFrame\n): boolean {\n return frame.width !== defaultFrame.width || frame.x !== defaultFrame.x;\n}\n\nexport function resolveAgentGuiWorkbenchContributionCopy(\n copy?: AgentGuiWorkbenchContributionCopyOverrides\n): AgentGuiWorkbenchContributionCopy {\n return {\n ...agentGuiWorkbenchDefaultCopy,\n ...copy\n };\n}\n\nfunction createAgentGuiWorkbenchDockEntry(input: {\n iconUrl?: string;\n label: string;\n order: number;\n provider: AgentGuiWorkbenchProvider;\n renderPreview?: CreateAgentGuiWorkbenchContributionInput[\"renderPreview\"];\n resolveDockPopupTitle?: CreateAgentGuiWorkbenchContributionInput[\"resolveDockPopupTitle\"];\n sectionId: string;\n visibility: WorkbenchHostDockEntry[\"visibility\"];\n}): WorkbenchHostDockEntry {\n return {\n icon: createElement(\"img\", {\n alt: \"\",\n draggable: false,\n src: input.iconUrl\n }),\n iconSize: \"large\",\n id: agentGuiWorkbenchDockEntryId(input.provider),\n label: input.label,\n launchBehavior: \"enabled\",\n launchPayload: { provider: input.provider },\n matchNode: (node) =>\n node.data.typeId === agentGuiWorkbenchTypeId &&\n agentGuiWorkbenchProviderFromIdentifier(node.data.instanceId) ===\n input.provider,\n order: input.order,\n providePopupItemPreview: (item) => {\n if (!input.renderPreview) {\n return null;\n }\n const { externalNodeState, node } = item;\n const state = normalizeAgentGuiWorkbenchState(externalNodeState);\n const title = input.resolveDockPopupTitle?.(state) ?? node.title;\n const lines = [input.label, state.lastActiveAgentSessionId].filter(\n (line): line is string => Boolean(line?.trim())\n );\n const revision = `${input.provider}\\n${title}\\n${lines.join(\"\\n\")}`;\n return {\n element: input.renderPreview(\n createAgentGuiWorkbenchPreviewBodyContext(item),\n {\n nodeTypeId: agentGuiWorkbenchTypeId,\n onStateChange: () => undefined,\n provider: input.provider\n }\n ),\n kind: \"component\",\n revision\n };\n },\n resolvePopupItem: ({ externalNodeState }) => {\n const title =\n input.resolveDockPopupTitle?.(\n normalizeAgentGuiWorkbenchState(externalNodeState)\n ) ?? null;\n return {\n revision: `${input.provider}\\n${title ?? \"\"}`,\n title\n };\n },\n sectionId: input.sectionId,\n typeId: agentGuiWorkbenchTypeId,\n visibility: input.visibility\n };\n}\n\nfunction createAgentGuiWorkbenchPreviewBodyContext(\n input: WorkbenchHostDockPopupItemInput\n): WorkbenchHostNodeBodyContext<AgentGuiWorkbenchState | null, unknown> {\n return {\n activation: null,\n displayMode: input.node.displayMode,\n externalNodeState: input.externalNodeState as AgentGuiWorkbenchState | null,\n externalWorkspaceState: input.externalWorkspaceState,\n focus: () => undefined,\n host: input.host,\n instanceId: input.node.data.instanceId,\n instanceKey: input.node.data.instanceKey ?? null,\n isFocused: false,\n node: input.node,\n setNodeRuntimeState: () => undefined,\n setSnapshotNodeState: () => undefined\n };\n}\n","import { createElement, type HTMLAttributes, type ReactNode } from \"react\";\nimport { Button, PanelIcon, cn } from \"@tutti-os/ui-system\";\nimport { EditIcon } from \"@tutti-os/ui-system/icons\";\n\nexport interface AgentGuiWorkbenchHeaderCopy {\n collapseConversationRail: string;\n expandConversationRail: string;\n fallbackAgentLabel: string;\n newConversation: string;\n}\n\nexport interface AgentGuiWorkbenchHeaderProps extends HTMLAttributes<HTMLElement> {\n copy: AgentGuiWorkbenchHeaderCopy;\n defaultActions?: ReactNode;\n isConversationRailAutoCollapsed: boolean;\n isConversationRailCollapsed: boolean;\n onCreateConversation?: () => void;\n onToggleConversationRail: (nextCollapsed: boolean) => void;\n title?: string;\n}\n\nexport function AgentGuiWorkbenchHeader({\n className,\n copy,\n defaultActions,\n isConversationRailAutoCollapsed,\n isConversationRailCollapsed,\n onCreateConversation,\n onToggleConversationRail,\n title,\n ...headerProps\n}: AgentGuiWorkbenchHeaderProps): ReactNode {\n const toggleLabel = isConversationRailCollapsed\n ? copy.expandConversationRail\n : copy.collapseConversationRail;\n\n return createElement(\n \"header\",\n {\n ...headerProps,\n className: cn(\n \"flex h-full min-h-0 items-center justify-between gap-3 bg-[var(--background-panel)] px-2 pl-3\",\n className\n )\n },\n createElement(\n \"div\",\n { className: \"flex min-w-0 items-center gap-1\" },\n createElement(\n \"span\",\n {\n className:\n \"min-w-0 truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]\"\n },\n title?.trim() || copy.fallbackAgentLabel\n ),\n createElement(\n Button as never,\n {\n \"aria-label\": toggleLabel,\n className: \"cursor-pointer rounded-md\",\n \"data-agent-gui-conversation-rail-auto-collapsed\":\n isConversationRailAutoCollapsed ? \"true\" : undefined,\n \"data-agent-gui-conversation-rail-collapsed\":\n isConversationRailCollapsed ? \"true\" : undefined,\n \"data-testid\": \"agent-gui-toggle-conversation-rail\",\n size: \"icon-xs\",\n title: toggleLabel,\n type: \"button\",\n variant: \"ghost\",\n onClick: (event) => {\n event.stopPropagation();\n onToggleConversationRail(!isConversationRailCollapsed);\n },\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createElement(PanelIcon, { className: \"size-[18px]\" })\n ),\n isConversationRailCollapsed && onCreateConversation\n ? createElement(\n Button as never,\n {\n \"aria-label\": copy.newConversation,\n className: \"cursor-pointer rounded-md\",\n size: \"icon-xs\",\n title: copy.newConversation,\n type: \"button\",\n variant: \"ghost\",\n onClick: (event) => {\n event.stopPropagation();\n onCreateConversation();\n },\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n createElement(EditIcon, {\n \"aria-hidden\": true,\n className: \"size-[16px]\"\n })\n )\n : null\n ),\n createElement(\n \"div\",\n {\n className: \"flex flex-none items-center gap-1\",\n onDoubleClick: (event) => event.stopPropagation(),\n onPointerDown: (event) => event.stopPropagation()\n },\n defaultActions\n )\n );\n}\n"],"mappings":"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","names":["createElement","createElement"]}