@tutti-os/agent-gui 0.0.3

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 (112) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +56 -0
  3. package/dist/agent-message-center/index.d.ts +218 -0
  4. package/dist/agent-message-center/index.js +1962 -0
  5. package/dist/agent-message-center/index.js.map +1 -0
  6. package/dist/agent-rich-text-at-provider.d.ts +49 -0
  7. package/dist/agent-rich-text-at-provider.js +7 -0
  8. package/dist/agent-rich-text-at-provider.js.map +1 -0
  9. package/dist/agent-title-text.d.ts +3 -0
  10. package/dist/agent-title-text.js +7 -0
  11. package/dist/agent-title-text.js.map +1 -0
  12. package/dist/app/renderer/agentactivity.css +6773 -0
  13. package/dist/app/renderer/assets/icons/agent-sessions-filled.svg +1 -0
  14. package/dist/app/renderer/assets/icons/agents/claude-rounded.png +0 -0
  15. package/dist/app/renderer/assets/icons/agents/codex-rounded.png +0 -0
  16. package/dist/app/renderer/assets/icons/agents/gemini-rounded.png +0 -0
  17. package/dist/app/renderer/assets/icons/agents/hermes-rounded.png +0 -0
  18. package/dist/app/renderer/assets/icons/agents/manage-agent-claude-code.png +0 -0
  19. package/dist/app/renderer/assets/icons/agents/manage-agent-codex.png +0 -0
  20. package/dist/app/renderer/assets/icons/agents/manage-agent-gemini.png +0 -0
  21. package/dist/app/renderer/assets/icons/agents/manage-agent-hermes.png +0 -0
  22. package/dist/app/renderer/assets/icons/agents/manage-agent-nextop.png +0 -0
  23. package/dist/app/renderer/assets/icons/agents/manage-agent-openclaw.png +0 -0
  24. package/dist/app/renderer/assets/icons/agents/nextop-doc-rounded.png +0 -0
  25. package/dist/app/renderer/assets/icons/agents/openclaw-rounded.png +0 -0
  26. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-claude-code.png +0 -0
  27. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-codex.png +0 -0
  28. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-gemini.png +0 -0
  29. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-nexight.png +0 -0
  30. package/dist/app/renderer/assets/icons/agents/workspace-dock-agent-openclaw.png +0 -0
  31. package/dist/app/renderer/assets/icons/code-filled.svg +1 -0
  32. package/dist/app/renderer/assets/icons/doc-filled.svg +1 -0
  33. package/dist/app/renderer/assets/icons/folder-filled.svg +1 -0
  34. package/dist/app/renderer/assets/icons/image-filled.svg +1 -0
  35. package/dist/app/renderer/assets/icons/issue-filled.svg +1 -0
  36. package/dist/app/renderer/assets/icons/product-filled.svg +1 -0
  37. package/dist/app/renderer/assets/icons/user-avatar-placeholder.png +0 -0
  38. package/dist/app/renderer/assets/icons/video-filled.svg +1 -0
  39. package/dist/chunk-22L4VWUR.js +70 -0
  40. package/dist/chunk-22L4VWUR.js.map +1 -0
  41. package/dist/chunk-3D5VTIKP.js +93 -0
  42. package/dist/chunk-3D5VTIKP.js.map +1 -0
  43. package/dist/chunk-AF5CXBJN.js +3075 -0
  44. package/dist/chunk-AF5CXBJN.js.map +1 -0
  45. package/dist/chunk-BABBC24I.js +28 -0
  46. package/dist/chunk-BABBC24I.js.map +1 -0
  47. package/dist/chunk-GCBDIQDX.js +22 -0
  48. package/dist/chunk-GCBDIQDX.js.map +1 -0
  49. package/dist/chunk-HSR5DI6O.js +4695 -0
  50. package/dist/chunk-HSR5DI6O.js.map +1 -0
  51. package/dist/chunk-IVPB4MLI.js +7 -0
  52. package/dist/chunk-IVPB4MLI.js.map +1 -0
  53. package/dist/chunk-KCC3GNPB.js +13 -0
  54. package/dist/chunk-KCC3GNPB.js.map +1 -0
  55. package/dist/chunk-PJP5BUU6.js +18 -0
  56. package/dist/chunk-PJP5BUU6.js.map +1 -0
  57. package/dist/chunk-RORLLV27.js +144 -0
  58. package/dist/chunk-RORLLV27.js.map +1 -0
  59. package/dist/chunk-UJWUGMWC.js +128 -0
  60. package/dist/chunk-UJWUGMWC.js.map +1 -0
  61. package/dist/chunk-UKQIGNN3.js +921 -0
  62. package/dist/chunk-UKQIGNN3.js.map +1 -0
  63. package/dist/chunk-ZP7P7DYO.js +270 -0
  64. package/dist/chunk-ZP7P7DYO.js.map +1 -0
  65. package/dist/chunk-ZX5PDYAS.js +346 -0
  66. package/dist/chunk-ZX5PDYAS.js.map +1 -0
  67. package/dist/claude-rounded-F6VPQETB.png +0 -0
  68. package/dist/codex-rounded-SC63MZAW.png +0 -0
  69. package/dist/gemini-rounded-O4KAJFIM.png +0 -0
  70. package/dist/hermes-rounded-QGDHBNRJ.png +0 -0
  71. package/dist/i18n/index.d.ts +4580 -0
  72. package/dist/i18n/index.js +19 -0
  73. package/dist/i18n/index.js.map +1 -0
  74. package/dist/index.d.ts +775 -0
  75. package/dist/index.js +33699 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/manage-agent-claude-code-F6VPQETB.png +0 -0
  78. package/dist/manage-agent-codex-SC63MZAW.png +0 -0
  79. package/dist/manage-agent-gemini-O4KAJFIM.png +0 -0
  80. package/dist/manage-agent-hermes-QGDHBNRJ.png +0 -0
  81. package/dist/manage-agent-nextop-UFAQ22K2.png +0 -0
  82. package/dist/manage-agent-openclaw-24U7O6CA.png +0 -0
  83. package/dist/mention-file-presentation.d.ts +16 -0
  84. package/dist/mention-file-presentation.js +10 -0
  85. package/dist/mention-file-presentation.js.map +1 -0
  86. package/dist/nextop-doc-rounded-UFAQ22K2.png +0 -0
  87. package/dist/openclaw-rounded-24U7O6CA.png +0 -0
  88. package/dist/user-avatar-placeholder-WP2373TS.png +0 -0
  89. package/dist/workbench/contribution.d.ts +42 -0
  90. package/dist/workbench/contribution.js +24 -0
  91. package/dist/workbench/contribution.js.map +1 -0
  92. package/dist/workbench/index.d.ts +24 -0
  93. package/dist/workbench/index.js +82 -0
  94. package/dist/workbench/index.js.map +1 -0
  95. package/dist/workbench/launch.d.ts +49 -0
  96. package/dist/workbench/launch.js +23 -0
  97. package/dist/workbench/launch.js.map +1 -0
  98. package/dist/workbench/providerCatalog.d.ts +15 -0
  99. package/dist/workbench/providerCatalog.js +27 -0
  100. package/dist/workbench/providerCatalog.js.map +1 -0
  101. package/dist/workbench/state.d.ts +22 -0
  102. package/dist/workbench/state.js +22 -0
  103. package/dist/workbench/state.js.map +1 -0
  104. package/dist/workbench/types.d.ts +43 -0
  105. package/dist/workbench/types.js +7 -0
  106. package/dist/workbench/types.js.map +1 -0
  107. package/dist/workspace-agent-generated-files.d.ts +2 -0
  108. package/dist/workspace-agent-generated-files.js +21 -0
  109. package/dist/workspace-agent-generated-files.js.map +1 -0
  110. package/dist/workspaceAgentActivityListViewModel-PvLQDj60.d.ts +309 -0
  111. package/dist/workspaceLinkActions-Bwa-phu8.d.ts +51 -0
  112. package/package.json +166 -0
@@ -0,0 +1,7 @@
1
+ // workbench/types.ts
2
+ var agentGuiWorkbenchOpenSessionActivationType = "agent-gui:open-session";
3
+
4
+ export {
5
+ agentGuiWorkbenchOpenSessionActivationType
6
+ };
7
+ //# sourceMappingURL=chunk-IVPB4MLI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../workbench/types.ts"],"sourcesContent":["export type AgentGuiWorkbenchProvider =\n | \"claude-code\"\n | \"codex\"\n | \"nexight\"\n | \"gemini\"\n | \"hermes\"\n | \"openclaw\";\n\nexport const agentGuiWorkbenchOpenSessionActivationType =\n \"agent-gui:open-session\";\n\nexport interface AgentGuiWorkbenchComposerOverrides {\n model?: string | null;\n permissionModeId?: string | null;\n planMode?: boolean;\n reasoningEffort?: string | null;\n}\n\nexport type AgentGuiWorkbenchComposerOverridesByProvider = Partial<\n Record<AgentGuiWorkbenchProvider, AgentGuiWorkbenchComposerOverrides | null>\n>;\n\nexport interface AgentGuiWorkbenchPendingHandoff {\n issueId?: string | null;\n issueTitle?: string | null;\n prompt: string;\n requestId: string;\n taskId?: string | null;\n taskTitle: string;\n title: string;\n}\n\nexport interface AgentGuiWorkbenchNodeState {\n composerOverrides?: AgentGuiWorkbenchComposerOverrides | null;\n composerOverridesByProvider?: AgentGuiWorkbenchComposerOverridesByProvider | null;\n conversationCount?: number | null;\n conversationRailCollapsed?: boolean | null;\n conversationRailWidthPx?: number | null;\n lastActiveAgentSessionId: string | null;\n lastActiveConversationTitle?: string | null;\n pendingHandoff?: AgentGuiWorkbenchPendingHandoff | null;\n provider: AgentGuiWorkbenchProvider;\n}\n\nexport interface AgentGuiWorkbenchState {\n composerOverrides?: AgentGuiWorkbenchComposerOverrides | null;\n composerOverridesByProvider?: AgentGuiWorkbenchComposerOverridesByProvider | null;\n conversationRailCollapsed?: boolean | null;\n conversationRailWidthPx?: number | null;\n lastActiveAgentSessionId: string | null;\n lastActiveConversationTitle?: string | null;\n pendingHandoff?: AgentGuiWorkbenchPendingHandoff | null;\n}\n\nexport interface AgentGuiWorkbenchWorkspaceState {\n workspaceId: string;\n}\n"],"mappings":";AAQO,IAAM,6CACX;","names":[]}
@@ -0,0 +1,13 @@
1
+ // agent-gui/agentGuiNode/agentRichTextAtProvider.ts
2
+ var AGENT_GUI_MENTION_PROVIDER_IDS = {
3
+ agentGeneratedFile: "agent-generated-file",
4
+ agentSession: "agent-session",
5
+ file: "file",
6
+ workspaceApp: "workspace-app",
7
+ workspaceIssue: "workspace-issue"
8
+ };
9
+
10
+ export {
11
+ AGENT_GUI_MENTION_PROVIDER_IDS
12
+ };
13
+ //# sourceMappingURL=chunk-KCC3GNPB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../agent-gui/agentGuiNode/agentRichTextAtProvider.ts"],"sourcesContent":["export const AGENT_GUI_MENTION_PROVIDER_IDS = {\n agentGeneratedFile: \"agent-generated-file\",\n agentSession: \"agent-session\",\n file: \"file\",\n workspaceApp: \"workspace-app\",\n workspaceIssue: \"workspace-issue\"\n} as const;\n\nexport type AgentGUIMentionProviderId =\n (typeof AGENT_GUI_MENTION_PROVIDER_IDS)[keyof typeof AGENT_GUI_MENTION_PROVIDER_IDS];\n\nexport interface AgentRichTextAtProviderContext {\n metadata?: Readonly<Record<string, unknown>>;\n}\n\nexport interface AgentRichTextAtQueryInput {\n keyword: string;\n maxResults?: number;\n abortSignal?: AbortSignal;\n context: AgentRichTextAtProviderContext;\n}\n\nexport interface AgentRichTextMentionInsert {\n entityId: string;\n label: string;\n href?: string | null;\n kind?: string | null;\n meta?: Readonly<Record<string, string>> | null;\n}\n\nexport interface AgentRichTextMentionInsertResult {\n kind: \"mention\";\n mention: AgentRichTextMentionInsert;\n}\n\nexport interface AgentRichTextMarkdownLinkInsertResult {\n kind: \"markdown-link\";\n label: string;\n href: string;\n}\n\nexport interface AgentRichTextTextInsertResult {\n kind: \"text\";\n text: string;\n}\n\nexport type AgentRichTextAtInsertResult =\n | AgentRichTextMentionInsertResult\n | AgentRichTextMarkdownLinkInsertResult\n | AgentRichTextTextInsertResult;\n\nexport interface AgentRichTextAtProvider<TItem = any> {\n id: string;\n query: (\n input: AgentRichTextAtQueryInput\n ) => Promise<readonly TItem[]> | readonly TItem[];\n getItemKey: (item: TItem) => string;\n getItemLabel: (item: TItem) => string;\n getItemSubtitle?: (item: TItem) => string | null | undefined;\n getItemThumbnailUrl?: (\n item: TItem\n ) => string | null | undefined | Promise<string | null | undefined>;\n toInsertResult: (item: TItem) => AgentRichTextAtInsertResult;\n}\n"],"mappings":";AAAO,IAAM,iCAAiC;AAAA,EAC5C,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,MAAM;AAAA,EACN,cAAc;AAAA,EACd,gBAAgB;AAClB;","names":[]}
@@ -0,0 +1,18 @@
1
+ // shared/workspaceFileVisualKind.ts
2
+ import {
3
+ resolveWorkspaceFileVisualKind as resolveWorkspaceFileManagerVisualKind
4
+ } from "@tutti-os/workspace-file-manager/services";
5
+ function resolveAgentWorkspaceFileVisualKind(pathOrName, options = {}) {
6
+ const refType = options.refType;
7
+ const kind = resolveWorkspaceFileManagerVisualKind({
8
+ kind: refType === "folder" || refType === "directory" ? "directory" : "file",
9
+ name: pathOrName,
10
+ path: pathOrName
11
+ });
12
+ return kind === "directory" ? "folder" : kind;
13
+ }
14
+
15
+ export {
16
+ resolveAgentWorkspaceFileVisualKind
17
+ };
18
+ //# sourceMappingURL=chunk-PJP5BUU6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../shared/workspaceFileVisualKind.ts"],"sourcesContent":["import {\n resolveWorkspaceFileVisualKind as resolveWorkspaceFileManagerVisualKind,\n type WorkspaceFileVisualKind as WorkspaceFileManagerVisualKind\n} from \"@tutti-os/workspace-file-manager/services\";\n\nexport type AgentWorkspaceFileVisualKind =\n | Exclude<WorkspaceFileManagerVisualKind, \"directory\">\n | \"folder\";\n\nexport function resolveAgentWorkspaceFileVisualKind(\n pathOrName: string,\n options: { refType?: string } = {}\n): AgentWorkspaceFileVisualKind {\n const refType = options.refType;\n const kind = resolveWorkspaceFileManagerVisualKind({\n kind:\n refType === \"folder\" || refType === \"directory\" ? \"directory\" : \"file\",\n name: pathOrName,\n path: pathOrName\n });\n return kind === \"directory\" ? \"folder\" : kind;\n}\n"],"mappings":";AAAA;AAAA,EACE,kCAAkC;AAAA,OAE7B;AAMA,SAAS,oCACd,YACA,UAAgC,CAAC,GACH;AAC9B,QAAM,UAAU,QAAQ;AACxB,QAAM,OAAO,sCAAsC;AAAA,IACjD,MACE,YAAY,YAAY,YAAY,cAAc,cAAc;AAAA,IAClE,MAAM;AAAA,IACN,MAAM;AAAA,EACR,CAAC;AACD,SAAO,SAAS,cAAc,WAAW;AAC3C;","names":[]}
@@ -0,0 +1,144 @@
1
+ import {
2
+ isAgentGuiWorkbenchProvider,
3
+ normalizeAgentGuiWorkbenchProvider
4
+ } from "./chunk-22L4VWUR.js";
5
+ import {
6
+ agentGuiWorkbenchOpenSessionActivationType
7
+ } from "./chunk-IVPB4MLI.js";
8
+
9
+ // workbench/launch.ts
10
+ var agentGuiWorkbenchTypeId = "agent-gui";
11
+ var agentGuiWorkbenchDockEntryPrefix = "agent-gui:";
12
+ var agentGuiWorkbenchInstanceSequence = 0;
13
+ function agentGuiWorkbenchDockEntryId(provider) {
14
+ return provider === "codex" ? agentGuiWorkbenchTypeId : `${agentGuiWorkbenchDockEntryPrefix}${provider}`;
15
+ }
16
+ function agentGuiWorkbenchInstanceId(provider) {
17
+ return `${agentGuiWorkbenchDockEntryPrefix}${provider}`;
18
+ }
19
+ function createAgentGuiWorkbenchInstanceId(input) {
20
+ const prefix = agentGuiWorkbenchInstanceId(input.provider);
21
+ const agentSessionId = input.agentSessionId?.trim();
22
+ if (agentSessionId) {
23
+ return `${prefix}:session:${encodeAgentGuiWorkbenchInstanceSegment(
24
+ agentSessionId
25
+ )}`;
26
+ }
27
+ const handoffRequestId = input.pendingHandoff?.requestId?.trim();
28
+ if (handoffRequestId) {
29
+ return `${prefix}:handoff:${encodeAgentGuiWorkbenchInstanceSegment(
30
+ handoffRequestId
31
+ )}`;
32
+ }
33
+ agentGuiWorkbenchInstanceSequence += 1;
34
+ return [
35
+ prefix,
36
+ "panel",
37
+ `${Date.now().toString(36)}-${agentGuiWorkbenchInstanceSequence.toString(36)}`
38
+ ].join(":");
39
+ }
40
+ function agentGuiWorkbenchProviderFromIdentifier(value) {
41
+ const normalized = value?.trim();
42
+ if (!normalized || normalized === agentGuiWorkbenchTypeId) {
43
+ return normalized === agentGuiWorkbenchTypeId ? "codex" : null;
44
+ }
45
+ if (!normalized.startsWith(agentGuiWorkbenchDockEntryPrefix)) {
46
+ return null;
47
+ }
48
+ const provider = normalized.slice(agentGuiWorkbenchDockEntryPrefix.length).split(":", 1)[0];
49
+ return isAgentGuiWorkbenchProvider(provider) ? provider : null;
50
+ }
51
+ function agentGuiWorkbenchProviderFromLaunchRequest(request) {
52
+ const payloadProvider = request.payload && typeof request.payload === "object" && !Array.isArray(request.payload) ? request.payload.provider : null;
53
+ if (isAgentGuiWorkbenchProvider(payloadProvider)) {
54
+ return payloadProvider;
55
+ }
56
+ return agentGuiWorkbenchProviderFromIdentifier(request.dockEntryId) ?? agentGuiWorkbenchProviderFromIdentifier(request.typeId) ?? "codex";
57
+ }
58
+ function createAgentGuiWorkbenchSessionLaunchRequest(input) {
59
+ const provider = normalizeAgentGuiWorkbenchProvider(input.provider);
60
+ return {
61
+ dockEntryId: agentGuiWorkbenchDockEntryId(provider),
62
+ payload: {
63
+ ...input.agentSessionId ? { agentSessionId: input.agentSessionId } : {},
64
+ ...input.pendingHandoff ? { pendingHandoff: input.pendingHandoff } : {},
65
+ provider
66
+ },
67
+ reason: "host",
68
+ typeId: agentGuiWorkbenchTypeId
69
+ };
70
+ }
71
+ function createAgentGuiWorkbenchLaunchDescriptor(request) {
72
+ const provider = agentGuiWorkbenchProviderFromLaunchRequest(request);
73
+ const targetAgentSessionId = agentSessionIdFromLaunchPayload(request.payload);
74
+ const pendingHandoff = pendingHandoffFromLaunchPayload(request.payload);
75
+ const instanceId = createAgentGuiWorkbenchInstanceId({
76
+ agentSessionId: targetAgentSessionId,
77
+ pendingHandoff,
78
+ provider
79
+ });
80
+ return {
81
+ activation: targetAgentSessionId ? {
82
+ payload: {
83
+ agentSessionId: targetAgentSessionId
84
+ },
85
+ type: agentGuiWorkbenchOpenSessionActivationType
86
+ } : null,
87
+ dockEntryId: request.dockEntryId ?? agentGuiWorkbenchDockEntryId(provider),
88
+ instanceId,
89
+ pendingHandoff,
90
+ provider,
91
+ reuseDockEntryNode: Boolean(targetAgentSessionId),
92
+ targetAgentSessionId
93
+ };
94
+ }
95
+ function encodeAgentGuiWorkbenchInstanceSegment(value) {
96
+ return encodeURIComponent(value.trim());
97
+ }
98
+ function agentSessionIdFromLaunchPayload(payload) {
99
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
100
+ return null;
101
+ }
102
+ const agentSessionId = payload.agentSessionId;
103
+ return typeof agentSessionId === "string" && agentSessionId.trim() ? agentSessionId.trim() : null;
104
+ }
105
+ function pendingHandoffFromLaunchPayload(payload) {
106
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
107
+ return null;
108
+ }
109
+ const pendingHandoff = payload.pendingHandoff;
110
+ if (!pendingHandoff || typeof pendingHandoff !== "object" || Array.isArray(pendingHandoff)) {
111
+ return null;
112
+ }
113
+ const requestId = pendingHandoff.requestId;
114
+ const prompt = pendingHandoff.prompt;
115
+ const title = pendingHandoff.title;
116
+ const taskTitle = pendingHandoff.taskTitle;
117
+ if (typeof requestId !== "string" || typeof prompt !== "string" || typeof title !== "string" || typeof taskTitle !== "string") {
118
+ return null;
119
+ }
120
+ const issueId = pendingHandoff.issueId;
121
+ const issueTitle = pendingHandoff.issueTitle;
122
+ const taskId = pendingHandoff.taskId;
123
+ return {
124
+ issueId: typeof issueId === "string" ? issueId : null,
125
+ issueTitle: typeof issueTitle === "string" ? issueTitle : null,
126
+ prompt,
127
+ requestId,
128
+ taskId: typeof taskId === "string" ? taskId : null,
129
+ taskTitle,
130
+ title
131
+ };
132
+ }
133
+
134
+ export {
135
+ agentGuiWorkbenchTypeId,
136
+ agentGuiWorkbenchDockEntryId,
137
+ agentGuiWorkbenchInstanceId,
138
+ createAgentGuiWorkbenchInstanceId,
139
+ agentGuiWorkbenchProviderFromIdentifier,
140
+ agentGuiWorkbenchProviderFromLaunchRequest,
141
+ createAgentGuiWorkbenchSessionLaunchRequest,
142
+ createAgentGuiWorkbenchLaunchDescriptor
143
+ };
144
+ //# sourceMappingURL=chunk-RORLLV27.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../workbench/launch.ts"],"sourcesContent":["import type { WorkbenchHostLaunchRequest } from \"@tutti-os/workbench-surface\";\nimport {\n isAgentGuiWorkbenchProvider,\n normalizeAgentGuiWorkbenchProvider\n} from \"./providerCatalog.ts\";\nimport {\n agentGuiWorkbenchOpenSessionActivationType,\n type AgentGuiWorkbenchProvider,\n type AgentGuiWorkbenchPendingHandoff\n} from \"./types.ts\";\n\ntype AgentGuiWorkbenchLaunchRequestInput = Pick<\n WorkbenchHostLaunchRequest,\n \"payload\" | \"typeId\"\n> & {\n dockEntryId?: string | null;\n};\n\nexport const agentGuiWorkbenchTypeId = \"agent-gui\";\n\nconst agentGuiWorkbenchDockEntryPrefix = \"agent-gui:\";\nlet agentGuiWorkbenchInstanceSequence = 0;\n\nexport function agentGuiWorkbenchDockEntryId(\n provider: AgentGuiWorkbenchProvider\n): string {\n return provider === \"codex\"\n ? agentGuiWorkbenchTypeId\n : `${agentGuiWorkbenchDockEntryPrefix}${provider}`;\n}\n\nexport function agentGuiWorkbenchInstanceId(\n provider: AgentGuiWorkbenchProvider\n): string {\n return `${agentGuiWorkbenchDockEntryPrefix}${provider}`;\n}\n\nexport function createAgentGuiWorkbenchInstanceId(input: {\n agentSessionId?: string | null;\n pendingHandoff?: {\n requestId?: string | null;\n } | null;\n provider: AgentGuiWorkbenchProvider;\n}): string {\n const prefix = agentGuiWorkbenchInstanceId(input.provider);\n const agentSessionId = input.agentSessionId?.trim();\n if (agentSessionId) {\n return `${prefix}:session:${encodeAgentGuiWorkbenchInstanceSegment(\n agentSessionId\n )}`;\n }\n\n const handoffRequestId = input.pendingHandoff?.requestId?.trim();\n if (handoffRequestId) {\n return `${prefix}:handoff:${encodeAgentGuiWorkbenchInstanceSegment(\n handoffRequestId\n )}`;\n }\n\n agentGuiWorkbenchInstanceSequence += 1;\n return [\n prefix,\n \"panel\",\n `${Date.now().toString(36)}-${agentGuiWorkbenchInstanceSequence.toString(36)}`\n ].join(\":\");\n}\n\nexport function agentGuiWorkbenchProviderFromIdentifier(\n value: string | null | undefined\n): AgentGuiWorkbenchProvider | null {\n const normalized = value?.trim();\n if (!normalized || normalized === agentGuiWorkbenchTypeId) {\n return normalized === agentGuiWorkbenchTypeId ? \"codex\" : null;\n }\n if (!normalized.startsWith(agentGuiWorkbenchDockEntryPrefix)) {\n return null;\n }\n const provider = normalized\n .slice(agentGuiWorkbenchDockEntryPrefix.length)\n .split(\":\", 1)[0];\n return isAgentGuiWorkbenchProvider(provider) ? provider : null;\n}\n\nexport function agentGuiWorkbenchProviderFromLaunchRequest(\n request: AgentGuiWorkbenchLaunchRequestInput\n): AgentGuiWorkbenchProvider {\n const payloadProvider =\n request.payload &&\n typeof request.payload === \"object\" &&\n !Array.isArray(request.payload)\n ? (request.payload as { provider?: unknown }).provider\n : null;\n if (isAgentGuiWorkbenchProvider(payloadProvider)) {\n return payloadProvider;\n }\n return (\n agentGuiWorkbenchProviderFromIdentifier(request.dockEntryId) ??\n agentGuiWorkbenchProviderFromIdentifier(request.typeId) ??\n \"codex\"\n );\n}\n\nexport function createAgentGuiWorkbenchSessionLaunchRequest(input: {\n agentSessionId?: string;\n pendingHandoff?: AgentGuiWorkbenchPendingHandoff;\n provider: unknown;\n}) {\n const provider = normalizeAgentGuiWorkbenchProvider(input.provider);\n return {\n dockEntryId: agentGuiWorkbenchDockEntryId(provider),\n payload: {\n ...(input.agentSessionId ? { agentSessionId: input.agentSessionId } : {}),\n ...(input.pendingHandoff ? { pendingHandoff: input.pendingHandoff } : {}),\n provider\n },\n reason: \"host\" as const,\n typeId: agentGuiWorkbenchTypeId\n };\n}\n\nexport interface AgentGuiWorkbenchLaunchDescriptor {\n activation: {\n payload: {\n agentSessionId: string;\n };\n type: typeof agentGuiWorkbenchOpenSessionActivationType;\n } | null;\n dockEntryId: string;\n instanceId: string;\n pendingHandoff: AgentGuiWorkbenchPendingHandoff | null;\n provider: AgentGuiWorkbenchProvider;\n reuseDockEntryNode: boolean;\n targetAgentSessionId: string | null;\n}\n\nexport function createAgentGuiWorkbenchLaunchDescriptor(\n request: AgentGuiWorkbenchLaunchRequestInput\n): AgentGuiWorkbenchLaunchDescriptor {\n const provider = agentGuiWorkbenchProviderFromLaunchRequest(request);\n const targetAgentSessionId = agentSessionIdFromLaunchPayload(request.payload);\n const pendingHandoff = pendingHandoffFromLaunchPayload(request.payload);\n const instanceId = createAgentGuiWorkbenchInstanceId({\n agentSessionId: targetAgentSessionId,\n pendingHandoff,\n provider\n });\n\n return {\n activation: targetAgentSessionId\n ? {\n payload: {\n agentSessionId: targetAgentSessionId\n },\n type: agentGuiWorkbenchOpenSessionActivationType\n }\n : null,\n dockEntryId: request.dockEntryId ?? agentGuiWorkbenchDockEntryId(provider),\n instanceId,\n pendingHandoff,\n provider,\n reuseDockEntryNode: Boolean(targetAgentSessionId),\n targetAgentSessionId\n };\n}\n\nfunction encodeAgentGuiWorkbenchInstanceSegment(value: string): string {\n return encodeURIComponent(value.trim());\n}\n\nfunction agentSessionIdFromLaunchPayload(payload: unknown): string | null {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return null;\n }\n const agentSessionId = (payload as { agentSessionId?: unknown })\n .agentSessionId;\n return typeof agentSessionId === \"string\" && agentSessionId.trim()\n ? agentSessionId.trim()\n : null;\n}\n\nfunction pendingHandoffFromLaunchPayload(\n payload: unknown\n): AgentGuiWorkbenchPendingHandoff | null {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return null;\n }\n const pendingHandoff = (payload as { pendingHandoff?: unknown })\n .pendingHandoff;\n if (\n !pendingHandoff ||\n typeof pendingHandoff !== \"object\" ||\n Array.isArray(pendingHandoff)\n ) {\n return null;\n }\n const requestId = (pendingHandoff as { requestId?: unknown }).requestId;\n const prompt = (pendingHandoff as { prompt?: unknown }).prompt;\n const title = (pendingHandoff as { title?: unknown }).title;\n const taskTitle = (pendingHandoff as { taskTitle?: unknown }).taskTitle;\n if (\n typeof requestId !== \"string\" ||\n typeof prompt !== \"string\" ||\n typeof title !== \"string\" ||\n typeof taskTitle !== \"string\"\n ) {\n return null;\n }\n\n const issueId = (pendingHandoff as { issueId?: unknown }).issueId;\n const issueTitle = (pendingHandoff as { issueTitle?: unknown }).issueTitle;\n const taskId = (pendingHandoff as { taskId?: unknown }).taskId;\n return {\n issueId: typeof issueId === \"string\" ? issueId : null,\n issueTitle: typeof issueTitle === \"string\" ? issueTitle : null,\n prompt,\n requestId,\n taskId: typeof taskId === \"string\" ? taskId : null,\n taskTitle,\n title\n };\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,128 @@
1
+ // agent-gui/agentGuiNode/model/agentGuiRailLayout.ts
2
+ function clamp(value, min, max) {
3
+ return Math.min(max, Math.max(min, value));
4
+ }
5
+ var AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX = 280;
6
+ var AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX = 248;
7
+ var AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX = 520;
8
+ var AGENT_GUI_DETAIL_MIN_WIDTH_PX = 220;
9
+ var AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX = 10;
10
+ var AGENT_GUI_COLLAPSED_MIN_WIDTH_PX = 460;
11
+ var AGENT_GUI_EXPANDED_MIN_WIDTH_PX = AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX + AGENT_GUI_DETAIL_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX;
12
+ var AGENT_GUI_AUTO_COLLAPSE_WIDTH_PX = 610;
13
+ var AGENT_GUI_EXPANDED_TARGET_WIDTH_PX = 800;
14
+ function shouldAutoCollapseAgentGUIConversationRail(containerWidthPx) {
15
+ return Number.isFinite(containerWidthPx) && containerWidthPx > 0 && containerWidthPx <= AGENT_GUI_AUTO_COLLAPSE_WIDTH_PX;
16
+ }
17
+ function resolveAgentGUIConversationRailMaxWidthPx(containerWidthPx) {
18
+ const safeContainerWidth = Number.isFinite(containerWidthPx) && containerWidthPx > 0 ? containerWidthPx : AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX + AGENT_GUI_DETAIL_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX;
19
+ return Math.max(
20
+ AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
21
+ Math.min(
22
+ AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX,
23
+ safeContainerWidth - AGENT_GUI_DETAIL_MIN_WIDTH_PX - AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX
24
+ )
25
+ );
26
+ }
27
+ function clampAgentGUIConversationRailWidthPx(widthPx, containerWidthPx) {
28
+ const preferredWidthPx = typeof widthPx === "number" && Number.isFinite(widthPx) ? Math.round(widthPx) : null;
29
+ return clamp(
30
+ preferredWidthPx ?? AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX,
31
+ AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
32
+ resolveAgentGUIConversationRailMaxWidthPx(containerWidthPx)
33
+ );
34
+ }
35
+ function resolveNextAgentGUIConversationRailWidthPx(input) {
36
+ const nextWidthPx = clampAgentGUIConversationRailWidthPx(
37
+ input.requestedWidthPx,
38
+ input.containerWidthPx
39
+ );
40
+ if (input.currentWidthPx === nextWidthPx) {
41
+ return input.currentWidthPx;
42
+ }
43
+ if (input.currentWidthPx === null || input.currentWidthPx === void 0) {
44
+ const defaultWidthPx = clampAgentGUIConversationRailWidthPx(
45
+ null,
46
+ input.containerWidthPx
47
+ );
48
+ if (nextWidthPx === defaultWidthPx) {
49
+ return null;
50
+ }
51
+ }
52
+ return nextWidthPx;
53
+ }
54
+ function resolveAgentGUIExpandedWindowFrame(input) {
55
+ const desiredRailWidthPx = clampAgentGUIConversationRailWidthPx(
56
+ input.conversationRailWidthPx,
57
+ AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX + AGENT_GUI_DETAIL_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX
58
+ );
59
+ const desiredWidthPx = Math.max(
60
+ Math.round(input.width),
61
+ desiredRailWidthPx + AGENT_GUI_DETAIL_MIN_WIDTH_PX + AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX,
62
+ AGENT_GUI_EXPANDED_MIN_WIDTH_PX,
63
+ AGENT_GUI_EXPANDED_TARGET_WIDTH_PX
64
+ );
65
+ const desktopWidthPx = Number.isFinite(input.desktopSize.width) && input.desktopSize.width > 0 ? Math.round(input.desktopSize.width) : desiredWidthPx;
66
+ const nextWidthPx = Math.min(desiredWidthPx, desktopWidthPx);
67
+ const maxX = Math.max(0, desktopWidthPx - nextWidthPx);
68
+ const nextX = clamp(Math.round(input.position.x), 0, maxX);
69
+ return {
70
+ position: {
71
+ x: nextX,
72
+ y: input.position.y
73
+ },
74
+ size: {
75
+ width: nextWidthPx,
76
+ height: input.height
77
+ }
78
+ };
79
+ }
80
+
81
+ // dockIcons.ts
82
+ var workspaceDockAgentClaudeCodeUrl = new URL(
83
+ "./app/renderer/assets/icons/agents/workspace-dock-agent-claude-code.png",
84
+ import.meta.url
85
+ ).href;
86
+ var workspaceDockAgentCodexUrl = new URL(
87
+ "./app/renderer/assets/icons/agents/workspace-dock-agent-codex.png",
88
+ import.meta.url
89
+ ).href;
90
+ var workspaceDockAgentGeminiUrl = new URL(
91
+ "./app/renderer/assets/icons/agents/workspace-dock-agent-gemini.png",
92
+ import.meta.url
93
+ ).href;
94
+ var workspaceDockAgentNexightUrl = new URL(
95
+ "./app/renderer/assets/icons/agents/workspace-dock-agent-nexight.png",
96
+ import.meta.url
97
+ ).href;
98
+ var workspaceDockAgentOpenclawUrl = new URL(
99
+ "./app/renderer/assets/icons/agents/workspace-dock-agent-openclaw.png",
100
+ import.meta.url
101
+ ).href;
102
+ var workspaceDockAgentHermesUrl = new URL(
103
+ "./app/renderer/assets/icons/agents/manage-agent-hermes.png",
104
+ import.meta.url
105
+ ).href;
106
+ var agentGuiDockIconUrl = workspaceDockAgentCodexUrl;
107
+ var agentGuiDockIconUrls = {
108
+ "claude-code": workspaceDockAgentClaudeCodeUrl,
109
+ codex: workspaceDockAgentCodexUrl,
110
+ gemini: workspaceDockAgentGeminiUrl,
111
+ hermes: workspaceDockAgentHermesUrl,
112
+ nexight: workspaceDockAgentNexightUrl,
113
+ openclaw: workspaceDockAgentOpenclawUrl
114
+ };
115
+
116
+ export {
117
+ AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
118
+ AGENT_GUI_DETAIL_MIN_WIDTH_PX,
119
+ AGENT_GUI_COLLAPSED_MIN_WIDTH_PX,
120
+ shouldAutoCollapseAgentGUIConversationRail,
121
+ resolveAgentGUIConversationRailMaxWidthPx,
122
+ clampAgentGUIConversationRailWidthPx,
123
+ resolveNextAgentGUIConversationRailWidthPx,
124
+ resolveAgentGUIExpandedWindowFrame,
125
+ agentGuiDockIconUrl,
126
+ agentGuiDockIconUrls
127
+ };
128
+ //# sourceMappingURL=chunk-UJWUGMWC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../agent-gui/agentGuiNode/model/agentGuiRailLayout.ts","../dockIcons.ts"],"sourcesContent":["function clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\n// Keep aligned with the issue manager task-list rail dimensions.\nexport const AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX = 280;\nexport const AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX = 248;\nexport const AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX = 520;\nexport const AGENT_GUI_DETAIL_MIN_WIDTH_PX = 220;\nexport const AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX = 10;\nexport const AGENT_GUI_COLLAPSED_MIN_WIDTH_PX = 460;\nexport const AGENT_GUI_EXPANDED_MIN_WIDTH_PX =\n AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX +\n AGENT_GUI_DETAIL_MIN_WIDTH_PX +\n AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX;\nexport const AGENT_GUI_AUTO_COLLAPSE_WIDTH_PX = 610;\nexport const AGENT_GUI_EXPANDED_TARGET_WIDTH_PX = 800;\n\nexport interface AgentGUIExpandedWindowFrameInput {\n position: { x: number; y: number };\n width: number;\n height: number;\n desktopSize: { width: number; height: number };\n conversationRailWidthPx: number | null | undefined;\n}\n\nexport function shouldAutoCollapseAgentGUIConversationRail(\n containerWidthPx: number\n): boolean {\n return (\n Number.isFinite(containerWidthPx) &&\n containerWidthPx > 0 &&\n containerWidthPx <= AGENT_GUI_AUTO_COLLAPSE_WIDTH_PX\n );\n}\n\nexport function resolveAgentGUIConversationRailMaxWidthPx(\n containerWidthPx: number\n): number {\n const safeContainerWidth =\n Number.isFinite(containerWidthPx) && containerWidthPx > 0\n ? containerWidthPx\n : AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX +\n AGENT_GUI_DETAIL_MIN_WIDTH_PX +\n AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX;\n\n return Math.max(\n AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,\n Math.min(\n AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX,\n safeContainerWidth -\n AGENT_GUI_DETAIL_MIN_WIDTH_PX -\n AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX\n )\n );\n}\n\nexport function clampAgentGUIConversationRailWidthPx(\n widthPx: number | null | undefined,\n containerWidthPx: number\n): number {\n const preferredWidthPx =\n typeof widthPx === \"number\" && Number.isFinite(widthPx)\n ? Math.round(widthPx)\n : null;\n\n return clamp(\n preferredWidthPx ?? AGENT_GUI_CONVERSATION_RAIL_DEFAULT_WIDTH_PX,\n AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,\n resolveAgentGUIConversationRailMaxWidthPx(containerWidthPx)\n );\n}\n\nexport function resolveNextAgentGUIConversationRailWidthPx(input: {\n currentWidthPx: number | null | undefined;\n requestedWidthPx: number;\n containerWidthPx: number;\n}): number | null {\n const nextWidthPx = clampAgentGUIConversationRailWidthPx(\n input.requestedWidthPx,\n input.containerWidthPx\n );\n if (input.currentWidthPx === nextWidthPx) {\n return input.currentWidthPx;\n }\n\n if (input.currentWidthPx === null || input.currentWidthPx === undefined) {\n const defaultWidthPx = clampAgentGUIConversationRailWidthPx(\n null,\n input.containerWidthPx\n );\n if (nextWidthPx === defaultWidthPx) {\n return null;\n }\n }\n\n return nextWidthPx;\n}\n\nexport function resolveAgentGUIExpandedWindowFrame(\n input: AgentGUIExpandedWindowFrameInput\n): {\n position: { x: number; y: number };\n size: { width: number; height: number };\n} {\n const desiredRailWidthPx = clampAgentGUIConversationRailWidthPx(\n input.conversationRailWidthPx,\n AGENT_GUI_CONVERSATION_RAIL_MAX_WIDTH_PX +\n AGENT_GUI_DETAIL_MIN_WIDTH_PX +\n AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX\n );\n const desiredWidthPx = Math.max(\n Math.round(input.width),\n desiredRailWidthPx +\n AGENT_GUI_DETAIL_MIN_WIDTH_PX +\n AGENT_GUI_RAIL_RESIZE_HANDLE_WIDTH_PX,\n AGENT_GUI_EXPANDED_MIN_WIDTH_PX,\n AGENT_GUI_EXPANDED_TARGET_WIDTH_PX\n );\n const desktopWidthPx =\n Number.isFinite(input.desktopSize.width) && input.desktopSize.width > 0\n ? Math.round(input.desktopSize.width)\n : desiredWidthPx;\n const nextWidthPx = Math.min(desiredWidthPx, desktopWidthPx);\n const maxX = Math.max(0, desktopWidthPx - nextWidthPx);\n const nextX = clamp(Math.round(input.position.x), 0, maxX);\n\n return {\n position: {\n x: nextX,\n y: input.position.y\n },\n size: {\n width: nextWidthPx,\n height: input.height\n }\n };\n}\n","const workspaceDockAgentClaudeCodeUrl = new URL(\n \"./app/renderer/assets/icons/agents/workspace-dock-agent-claude-code.png\",\n import.meta.url\n).href;\nconst workspaceDockAgentCodexUrl = new URL(\n \"./app/renderer/assets/icons/agents/workspace-dock-agent-codex.png\",\n import.meta.url\n).href;\nconst workspaceDockAgentGeminiUrl = new URL(\n \"./app/renderer/assets/icons/agents/workspace-dock-agent-gemini.png\",\n import.meta.url\n).href;\nconst workspaceDockAgentNexightUrl = new URL(\n \"./app/renderer/assets/icons/agents/workspace-dock-agent-nexight.png\",\n import.meta.url\n).href;\nconst workspaceDockAgentOpenclawUrl = new URL(\n \"./app/renderer/assets/icons/agents/workspace-dock-agent-openclaw.png\",\n import.meta.url\n).href;\nconst workspaceDockAgentHermesUrl = new URL(\n \"./app/renderer/assets/icons/agents/manage-agent-hermes.png\",\n import.meta.url\n).href;\n\nexport const agentGuiDockIconUrl = workspaceDockAgentCodexUrl;\n\nexport const agentGuiDockIconUrls = {\n \"claude-code\": workspaceDockAgentClaudeCodeUrl,\n codex: workspaceDockAgentCodexUrl,\n gemini: workspaceDockAgentGeminiUrl,\n hermes: workspaceDockAgentHermesUrl,\n nexight: workspaceDockAgentNexightUrl,\n openclaw: workspaceDockAgentOpenclawUrl\n} as const;\n"],"mappings":"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","names":[]}