@tutti-os/agent-gui 0.0.63 → 0.0.65
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.
- package/dist/agent-conversation/index.d.ts +2 -2
- package/dist/agent-conversation/index.js +7 -7
- package/dist/agent-env/index.js +2 -1
- package/dist/agent-env/index.js.map +1 -1
- package/dist/agent-message-center/index.js +9 -9
- package/dist/{agentGuiNodeTypes-CC52zXAV.d.ts → agentGuiNodeTypes-CCjzXdTe.d.ts} +4 -1
- package/dist/app/renderer/agentactivity.css +41 -7
- package/dist/app/renderer/assets/icons/agents/agent-colorful.png +0 -0
- package/dist/app/renderer/assets/icons/agents/cursor-colorful.png +0 -0
- package/dist/app/renderer/assets/icons/agents/cursor-flat-filled.svg +3 -0
- package/dist/app/renderer/assets/icons/agents/cursor-rounded.png +0 -0
- package/dist/{chunk-IIVHPXAB.js → chunk-2IMBPRKV.js} +1 -1
- package/dist/chunk-2IMBPRKV.js.map +1 -0
- package/dist/{chunk-6MUKWI6Z.js → chunk-6OYLLPPN.js} +167 -113
- package/dist/chunk-6OYLLPPN.js.map +1 -0
- package/dist/{chunk-22L4VWUR.js → chunk-CKCUEHBW.js} +3 -1
- package/dist/chunk-CKCUEHBW.js.map +1 -0
- package/dist/{chunk-NZN43XT5.js → chunk-DL6BMEHI.js} +8 -6
- package/dist/chunk-DL6BMEHI.js.map +1 -0
- package/dist/{chunk-G6UO6JVM.js → chunk-EIPQGFAE.js} +2 -2
- package/dist/{chunk-SGXYVGQT.js → chunk-HKKC2U6J.js} +5 -5
- package/dist/{chunk-SW6JCJCO.js → chunk-IDTB6OID.js} +3 -3
- package/dist/{chunk-5WB3NGIN.js → chunk-LJE2W4EM.js} +27 -2
- package/dist/chunk-LJE2W4EM.js.map +1 -0
- package/dist/{chunk-K4UUEG7X.js → chunk-LQHYHF36.js} +115 -36
- package/dist/chunk-LQHYHF36.js.map +1 -0
- package/dist/{chunk-FRCIPTUD.js → chunk-N4I3TD4G.js} +8 -18
- package/dist/chunk-N4I3TD4G.js.map +1 -0
- package/dist/{chunk-QC642RAG.js → chunk-N7BGNAA2.js} +15 -8
- package/dist/chunk-N7BGNAA2.js.map +1 -0
- package/dist/{chunk-3KS22CG2.js → chunk-P5C3ED3V.js} +5 -4
- package/dist/chunk-P5C3ED3V.js.map +1 -0
- package/dist/{chunk-7P6CUYQT.js → chunk-QULZNKPA.js} +2 -2
- package/dist/{chunk-V4JGVBUN.js → chunk-R2NGSPQS.js} +32 -1
- package/dist/chunk-R2NGSPQS.js.map +1 -0
- package/dist/{chunk-ZUVEBW5T.js → chunk-R7PSPKBD.js} +2 -2
- package/dist/{chunk-4UTWOSHP.js → chunk-UI3YDJTC.js} +43 -5
- package/dist/chunk-UI3YDJTC.js.map +1 -0
- package/dist/{chunk-RO6KQD3J.js → chunk-UWBX3DZK.js} +2 -2
- package/dist/{chunk-CVSCZ3CK.js → chunk-W3Q7B3DV.js} +7 -2
- package/dist/chunk-W3Q7B3DV.js.map +1 -0
- package/dist/{chunk-CA25GD5Q.js → chunk-XLBJHHDX.js} +38 -6
- package/dist/chunk-XLBJHHDX.js.map +1 -0
- package/dist/{chunk-FQQDBBNI.js → chunk-XZPAU7FC.js} +3 -3
- package/dist/context-mention-palette/index.js +8 -8
- package/dist/i18n/index.d.ts +37 -5
- package/dist/i18n/index.js +2 -2
- package/dist/index.d.ts +25 -6
- package/dist/index.js +1093 -425
- package/dist/index.js.map +1 -1
- package/dist/queued-prompt-runtime.d.ts +2 -2
- package/dist/{types-DSc2ta3s.d.ts → types-BAPEle8b.d.ts} +3 -3
- package/dist/workbench/contribution.d.ts +10 -3
- package/dist/workbench/contribution.js +10 -8
- package/dist/workbench/index.d.ts +4 -2
- package/dist/workbench/index.js +11 -11
- package/dist/workbench/launch.d.ts +3 -1
- package/dist/workbench/launch.js +3 -3
- package/dist/workbench/providerCatalog.d.ts +2 -2
- package/dist/workbench/providerCatalog.js +1 -1
- package/dist/workbench/sessionTitle.d.ts +1 -1
- package/dist/workbench/sessionTitle.js +3 -3
- package/dist/workbench/state.d.ts +1 -1
- package/dist/workbench/state.js +3 -3
- package/dist/workbench/types.d.ts +3 -2
- package/dist/workbench/types.js +1 -1
- package/dist/workspace-agent-generated-files.js +3 -3
- package/package.json +12 -12
- package/dist/chunk-22L4VWUR.js.map +0 -1
- package/dist/chunk-3KS22CG2.js.map +0 -1
- package/dist/chunk-4UTWOSHP.js.map +0 -1
- package/dist/chunk-5WB3NGIN.js.map +0 -1
- package/dist/chunk-6MUKWI6Z.js.map +0 -1
- package/dist/chunk-CA25GD5Q.js.map +0 -1
- package/dist/chunk-CVSCZ3CK.js.map +0 -1
- package/dist/chunk-FRCIPTUD.js.map +0 -1
- package/dist/chunk-IIVHPXAB.js.map +0 -1
- package/dist/chunk-K4UUEG7X.js.map +0 -1
- package/dist/chunk-NZN43XT5.js.map +0 -1
- package/dist/chunk-QC642RAG.js.map +0 -1
- package/dist/chunk-V4JGVBUN.js.map +0 -1
- /package/dist/{chunk-G6UO6JVM.js.map → chunk-EIPQGFAE.js.map} +0 -0
- /package/dist/{chunk-SGXYVGQT.js.map → chunk-HKKC2U6J.js.map} +0 -0
- /package/dist/{chunk-SW6JCJCO.js.map → chunk-IDTB6OID.js.map} +0 -0
- /package/dist/{chunk-7P6CUYQT.js.map → chunk-QULZNKPA.js.map} +0 -0
- /package/dist/{chunk-ZUVEBW5T.js.map → chunk-R7PSPKBD.js.map} +0 -0
- /package/dist/{chunk-RO6KQD3J.js.map → chunk-UWBX3DZK.js.map} +0 -0
- /package/dist/{chunk-FQQDBBNI.js.map → chunk-XZPAU7FC.js.map} +0 -0
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
var agentGuiWorkbenchProviders = [
|
|
3
3
|
"claude-code",
|
|
4
4
|
"codex",
|
|
5
|
+
"cursor",
|
|
5
6
|
"nexight",
|
|
6
7
|
"hermes",
|
|
7
8
|
"gemini",
|
|
@@ -30,6 +31,7 @@ var comingSoonProviderSet = new Set(
|
|
|
30
31
|
var agentGuiWorkbenchProviderLabels = {
|
|
31
32
|
"claude-code": "Claude Code",
|
|
32
33
|
codex: "Codex",
|
|
34
|
+
cursor: "Cursor",
|
|
33
35
|
gemini: "Gemini CLI",
|
|
34
36
|
hermes: "Hermes Agent",
|
|
35
37
|
nexight: "Nexight",
|
|
@@ -67,4 +69,4 @@ export {
|
|
|
67
69
|
isAgentGuiWorkbenchProvider,
|
|
68
70
|
normalizeAgentGuiWorkbenchProvider
|
|
69
71
|
};
|
|
70
|
-
//# sourceMappingURL=chunk-
|
|
72
|
+
//# sourceMappingURL=chunk-CKCUEHBW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../workbench/providerCatalog.ts"],"sourcesContent":["import type { AgentGuiWorkbenchProvider } from \"./types.ts\";\n\nexport const agentGuiWorkbenchProviders = [\n \"claude-code\",\n \"codex\",\n \"cursor\",\n \"nexight\",\n \"hermes\",\n \"gemini\",\n \"openclaw\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\n\nexport const agentGuiWorkbenchDefaultDockProviders = [\n \"codex\",\n \"claude-code\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\n\nexport const agentGuiWorkbenchDockSuppressedProviders = [\n \"hermes\",\n \"gemini\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\n\nexport const agentGuiWorkbenchComingSoonProviders = [\n \"nexight\"\n] as const satisfies readonly AgentGuiWorkbenchProvider[];\n\nconst defaultDockProviderSet = new Set<AgentGuiWorkbenchProvider>(\n agentGuiWorkbenchDefaultDockProviders\n);\nconst dockSuppressedProviderSet = new Set<AgentGuiWorkbenchProvider>(\n agentGuiWorkbenchDockSuppressedProviders\n);\nconst comingSoonProviderSet = new Set<AgentGuiWorkbenchProvider>(\n agentGuiWorkbenchComingSoonProviders\n);\n\n// i18n-check-ignore: provider brand names.\nexport const agentGuiWorkbenchProviderLabels: Record<\n AgentGuiWorkbenchProvider,\n string\n> = {\n \"claude-code\": \"Claude Code\",\n codex: \"Codex\",\n cursor: \"Cursor\",\n gemini: \"Gemini CLI\",\n hermes: \"Hermes Agent\",\n nexight: \"Nexight\",\n openclaw: \"OpenClaw\"\n};\n\nexport function resolveAgentGuiWorkbenchProviderLabel(\n provider: AgentGuiWorkbenchProvider\n): string {\n return agentGuiWorkbenchProviderLabels[provider];\n}\n\nexport function isAgentGuiWorkbenchDefaultDockProvider(\n provider: AgentGuiWorkbenchProvider\n): boolean {\n return defaultDockProviderSet.has(provider);\n}\n\nexport function isAgentGuiWorkbenchDockSuppressedProvider(\n provider: AgentGuiWorkbenchProvider\n): boolean {\n return dockSuppressedProviderSet.has(provider);\n}\n\nexport function isAgentGuiWorkbenchComingSoonProvider(\n provider: AgentGuiWorkbenchProvider\n): boolean {\n return comingSoonProviderSet.has(provider);\n}\n\nexport function isAgentGuiWorkbenchProvider(\n value: unknown\n): value is AgentGuiWorkbenchProvider {\n return (\n typeof value === \"string\" &&\n agentGuiWorkbenchProviders.includes(value as AgentGuiWorkbenchProvider)\n );\n}\n\nexport function normalizeAgentGuiWorkbenchProvider(\n value: unknown,\n fallbackProvider: AgentGuiWorkbenchProvider = \"codex\"\n): AgentGuiWorkbenchProvider {\n return isAgentGuiWorkbenchProvider(value) ? value : fallbackProvider;\n}\n"],"mappings":";AAEO,IAAM,6BAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,wCAAwC;AAAA,EACnD;AAAA,EACA;AACF;AAEO,IAAM,2CAA2C;AAAA,EACtD;AAAA,EACA;AACF;AAEO,IAAM,uCAAuC;AAAA,EAClD;AACF;AAEA,IAAM,yBAAyB,IAAI;AAAA,EACjC;AACF;AACA,IAAM,4BAA4B,IAAI;AAAA,EACpC;AACF;AACA,IAAM,wBAAwB,IAAI;AAAA,EAChC;AACF;AAGO,IAAM,kCAGT;AAAA,EACF,eAAe;AAAA,EACf,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AACZ;AAEO,SAAS,sCACd,UACQ;AACR,SAAO,gCAAgC,QAAQ;AACjD;AAEO,SAAS,uCACd,UACS;AACT,SAAO,uBAAuB,IAAI,QAAQ;AAC5C;AAEO,SAAS,0CACd,UACS;AACT,SAAO,0BAA0B,IAAI,QAAQ;AAC/C;AAEO,SAAS,sCACd,UACS;AACT,SAAO,sBAAsB,IAAI,QAAQ;AAC3C;AAEO,SAAS,4BACd,OACoC;AACpC,SACE,OAAO,UAAU,YACjB,2BAA2B,SAAS,KAAkC;AAE1E;AAEO,SAAS,mCACd,OACA,mBAA8C,SACnB;AAC3B,SAAO,4BAA4B,KAAK,IAAI,QAAQ;AACtD;","names":[]}
|
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
agentGuiWorkbenchProviders,
|
|
3
3
|
isAgentGuiWorkbenchProvider,
|
|
4
4
|
normalizeAgentGuiWorkbenchProvider
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-CKCUEHBW.js";
|
|
6
6
|
import {
|
|
7
7
|
agentGUIProviderTargetRefsEqual
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-UI3YDJTC.js";
|
|
9
9
|
|
|
10
10
|
// workbench/state.ts
|
|
11
11
|
function createDefaultAgentGuiWorkbenchNodeState(provider = "codex") {
|
|
@@ -35,7 +35,8 @@ function normalizeAgentGuiWorkbenchState(state) {
|
|
|
35
35
|
conversationRailWidthPx: normalizeOptionalPositiveNumber(
|
|
36
36
|
state.conversationRailWidthPx
|
|
37
37
|
),
|
|
38
|
-
lastActiveAgentSessionId: typeof state.lastActiveAgentSessionId === "string" ? state.lastActiveAgentSessionId : null
|
|
38
|
+
lastActiveAgentSessionId: typeof state.lastActiveAgentSessionId === "string" ? state.lastActiveAgentSessionId : null,
|
|
39
|
+
...typeof state.lastActiveConversationTitle === "string" ? { lastActiveConversationTitle: state.lastActiveConversationTitle } : {}
|
|
39
40
|
};
|
|
40
41
|
}
|
|
41
42
|
function projectAgentGuiWorkbenchState(state) {
|
|
@@ -46,11 +47,12 @@ function projectAgentGuiWorkbenchState(state) {
|
|
|
46
47
|
conversationRailWidthPx: normalizeOptionalPositiveNumber(
|
|
47
48
|
state.conversationRailWidthPx
|
|
48
49
|
),
|
|
49
|
-
lastActiveAgentSessionId: state.lastActiveAgentSessionId ?? null
|
|
50
|
+
lastActiveAgentSessionId: state.lastActiveAgentSessionId ?? null,
|
|
51
|
+
...typeof state.lastActiveConversationTitle === "string" ? { lastActiveConversationTitle: state.lastActiveConversationTitle } : {}
|
|
50
52
|
};
|
|
51
53
|
}
|
|
52
54
|
function areAgentGuiWorkbenchStatesEqual(left, right) {
|
|
53
|
-
return (left.agentTargetId ?? null) === (right.agentTargetId ?? null) && left.conversationRailCollapsed === right.conversationRailCollapsed && left.conversationRailWidthPx === right.conversationRailWidthPx && left.lastActiveAgentSessionId === right.lastActiveAgentSessionId;
|
|
55
|
+
return (left.agentTargetId ?? null) === (right.agentTargetId ?? null) && left.conversationRailCollapsed === right.conversationRailCollapsed && left.conversationRailWidthPx === right.conversationRailWidthPx && left.lastActiveAgentSessionId === right.lastActiveAgentSessionId && (left.lastActiveConversationTitle ?? null) === (right.lastActiveConversationTitle ?? null);
|
|
54
56
|
}
|
|
55
57
|
function normalizeAgentGuiWorkbenchNodeState(state, fallbackProvider = "codex") {
|
|
56
58
|
const provider = normalizeAgentGuiWorkbenchProvider(
|
|
@@ -318,4 +320,4 @@ export {
|
|
|
318
320
|
agentGuiWorkbenchProviderFromInstanceId,
|
|
319
321
|
createAgentGuiWorkbenchNodeStateSource
|
|
320
322
|
};
|
|
321
|
-
//# sourceMappingURL=chunk-
|
|
323
|
+
//# sourceMappingURL=chunk-DL6BMEHI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../workbench/state.ts"],"sourcesContent":["import type {\n WorkbenchHostExternalStateLookupInput,\n WorkbenchHostExternalStateSource\n} from \"@tutti-os/workbench-surface\";\nimport {\n agentGuiWorkbenchProviders,\n isAgentGuiWorkbenchProvider,\n normalizeAgentGuiWorkbenchProvider\n} from \"./providerCatalog.ts\";\nimport { agentGUIProviderTargetRefsEqual } from \"../providerTargets.ts\";\nimport type {\n AgentGuiWorkbenchComposerOverrides,\n AgentGuiWorkbenchComposerOverridesByAgentTargetId,\n AgentGuiWorkbenchComposerOverridesByProvider,\n AgentGuiWorkbenchNodeState,\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState,\n AgentGuiWorkbenchWorkspaceState\n} from \"./types.ts\";\nimport type { AgentGUIProviderTargetRef } from \"../types.ts\";\n\ntype AgentGuiWorkbenchStateLookupRequest = Pick<\n WorkbenchHostExternalStateLookupInput,\n \"instanceId\" | \"typeId\"\n> &\n Partial<Pick<WorkbenchHostExternalStateLookupInput, \"nodeId\">>;\n\nexport function createDefaultAgentGuiWorkbenchNodeState(\n provider: AgentGuiWorkbenchProvider = \"codex\"\n): AgentGuiWorkbenchNodeState {\n return {\n agentTargetId: null,\n composerOverrides: null,\n composerOverridesByAgentTargetId: null,\n composerOverridesByProvider: null,\n conversationCount: null,\n conversationRailCollapsed: false,\n conversationRailWidthPx: null,\n lastActiveAgentSessionId: null,\n lastActiveConversationTitle: null,\n provider,\n providerTargetId: null,\n providerTargetRef: null\n };\n}\n\nexport function normalizeAgentGuiWorkbenchState(\n state: unknown\n): AgentGuiWorkbenchState {\n if (!isRecord(state)) {\n return createDefaultAgentGuiWorkbenchState();\n }\n const agentTargetId =\n normalizeOptionalNonEmptyString(state.agentTargetId) ??\n normalizeOptionalNonEmptyString(state.providerTargetId);\n return {\n ...(agentTargetId ? { agentTargetId } : {}),\n conversationRailCollapsed: state.conversationRailCollapsed === true,\n conversationRailWidthPx: normalizeOptionalPositiveNumber(\n state.conversationRailWidthPx\n ),\n lastActiveAgentSessionId:\n typeof state.lastActiveAgentSessionId === \"string\"\n ? state.lastActiveAgentSessionId\n : null,\n ...(typeof state.lastActiveConversationTitle === \"string\"\n ? { lastActiveConversationTitle: state.lastActiveConversationTitle }\n : {})\n };\n}\n\nexport function projectAgentGuiWorkbenchState(\n state: AgentGuiWorkbenchNodeState\n): AgentGuiWorkbenchState {\n const agentTargetId =\n normalizeOptionalNonEmptyString(state.agentTargetId) ??\n normalizeOptionalNonEmptyString(state.providerTargetId);\n return {\n ...(agentTargetId ? { agentTargetId } : {}),\n conversationRailCollapsed: state.conversationRailCollapsed === true,\n conversationRailWidthPx: normalizeOptionalPositiveNumber(\n state.conversationRailWidthPx\n ),\n lastActiveAgentSessionId: state.lastActiveAgentSessionId ?? null,\n ...(typeof state.lastActiveConversationTitle === \"string\"\n ? { lastActiveConversationTitle: state.lastActiveConversationTitle }\n : {})\n };\n}\n\nexport function areAgentGuiWorkbenchStatesEqual(\n left: AgentGuiWorkbenchState,\n right: AgentGuiWorkbenchState\n): boolean {\n return (\n (left.agentTargetId ?? null) === (right.agentTargetId ?? null) &&\n left.conversationRailCollapsed === right.conversationRailCollapsed &&\n left.conversationRailWidthPx === right.conversationRailWidthPx &&\n left.lastActiveAgentSessionId === right.lastActiveAgentSessionId &&\n (left.lastActiveConversationTitle ?? null) ===\n (right.lastActiveConversationTitle ?? null)\n );\n}\n\nexport function normalizeAgentGuiWorkbenchNodeState(\n state: Partial<AgentGuiWorkbenchNodeState> | null | undefined,\n fallbackProvider: AgentGuiWorkbenchProvider = \"codex\"\n): AgentGuiWorkbenchNodeState {\n const provider = normalizeAgentGuiWorkbenchProvider(\n state?.provider,\n fallbackProvider\n );\n return {\n ...createDefaultAgentGuiWorkbenchNodeState(provider),\n agentTargetId:\n normalizeOptionalNonEmptyString(state?.agentTargetId) ??\n normalizeOptionalNonEmptyString(state?.providerTargetId),\n composerOverrides: normalizeAgentGuiWorkbenchComposerOverrides(\n state?.composerOverrides\n ),\n composerOverridesByAgentTargetId:\n normalizeAgentGuiWorkbenchComposerOverridesByAgentTargetId(\n state?.composerOverridesByAgentTargetId\n ),\n composerOverridesByProvider:\n normalizeAgentGuiWorkbenchComposerOverridesByProvider(\n state?.composerOverridesByProvider\n ),\n conversationCount: normalizeOptionalNonNegativeNumber(\n state?.conversationCount\n ),\n conversationRailCollapsed: state?.conversationRailCollapsed === true,\n conversationRailWidthPx: normalizeOptionalPositiveNumber(\n state?.conversationRailWidthPx\n ),\n lastActiveAgentSessionId:\n typeof state?.lastActiveAgentSessionId === \"string\"\n ? state.lastActiveAgentSessionId\n : null,\n lastActiveConversationTitle:\n typeof state?.lastActiveConversationTitle === \"string\"\n ? state.lastActiveConversationTitle\n : null,\n provider,\n providerTargetId: normalizeOptionalNonEmptyString(state?.providerTargetId),\n providerTargetRef: normalizeAgentGuiProviderTargetRef(\n state?.providerTargetRef,\n provider\n )\n };\n}\n\nexport function areAgentGuiWorkbenchNodeStatesEqual(\n left: AgentGuiWorkbenchNodeState,\n right: AgentGuiWorkbenchNodeState\n): boolean {\n return (\n (left.agentTargetId ?? null) === (right.agentTargetId ?? null) &&\n composerOverridesEqual(left.composerOverrides, right.composerOverrides) &&\n composerOverridesByAgentTargetIdEqual(\n left.composerOverridesByAgentTargetId,\n right.composerOverridesByAgentTargetId\n ) &&\n composerOverridesByProviderEqual(\n left.composerOverridesByProvider,\n right.composerOverridesByProvider\n ) &&\n left.conversationCount === right.conversationCount &&\n left.conversationRailCollapsed === right.conversationRailCollapsed &&\n left.conversationRailWidthPx === right.conversationRailWidthPx &&\n left.lastActiveAgentSessionId === right.lastActiveAgentSessionId &&\n left.lastActiveConversationTitle === right.lastActiveConversationTitle &&\n left.provider === right.provider &&\n (left.agentTargetId ?? null) === (right.agentTargetId ?? null) &&\n (left.providerTargetId ?? null) === (right.providerTargetId ?? null) &&\n agentGUIProviderTargetRefsEqual(\n left.providerTargetRef,\n right.providerTargetRef\n )\n );\n}\n\nexport function agentGuiWorkbenchProviderFromInstanceId(\n instanceId: string | null | undefined\n): AgentGuiWorkbenchProvider {\n const normalized = instanceId?.trim();\n if (!normalized || normalized === \"agent-gui\") {\n return \"codex\";\n }\n const [, provider] = normalized.split(\":\", 3);\n return normalizeAgentGuiWorkbenchProvider(provider);\n}\n\nexport function createAgentGuiWorkbenchNodeStateSource(input: {\n typeId?: string;\n workspaceId: string;\n}): {\n externalStateSource: WorkbenchHostExternalStateSource<\n AgentGuiWorkbenchState | null,\n AgentGuiWorkbenchWorkspaceState\n >;\n readNodeState: (\n request: AgentGuiWorkbenchStateLookupRequest\n ) => AgentGuiWorkbenchState | null;\n writeNodeState: (\n request: AgentGuiWorkbenchStateLookupRequest & {\n state: AgentGuiWorkbenchState;\n }\n ) => void;\n /**\n * Returns the launch instanceId of an open node currently showing the given\n * agent session, or null when none is found. Used to focus an existing\n * conversation instead of launching a duplicate node.\n */\n findInstanceIdByAgentSessionId: (agentSessionId: string) => string | null;\n} {\n const typeId = input.typeId ?? \"agent-gui\";\n const nodeStateByKey = new Map<string, AgentGuiWorkbenchState>();\n // Tracks the launch instanceId behind each state key so a node can be located\n // by the session it is currently showing, even when its key is node-scoped.\n const instanceIdByKey = new Map<string, string>();\n const listeners = new Set<() => void>();\n\n const lookupState = (request: AgentGuiWorkbenchStateLookupRequest) => {\n const nodeState = request.nodeId\n ? nodeStateByKey.get(agentGuiWorkbenchNodeStateKey(request))\n : null;\n const state =\n nodeState ??\n nodeStateByKey.get(agentGuiWorkbenchInstanceStateKey(request));\n return state ? { ...state } : null;\n };\n\n const notify = () => {\n for (const listener of listeners) {\n listener();\n }\n };\n\n return {\n externalStateSource: {\n getNodeState(request) {\n if (request.typeId !== typeId) {\n return null;\n }\n return lookupState(request);\n },\n getSnapshotNodeState(request) {\n if (request.typeId !== typeId) {\n return null;\n }\n return lookupState(request);\n },\n getWorkspaceState() {\n return {\n workspaceId: input.workspaceId\n };\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n }\n },\n readNodeState(request) {\n if (request.typeId !== typeId) {\n return null;\n }\n return lookupState(request);\n },\n findInstanceIdByAgentSessionId(agentSessionId) {\n const target = agentSessionId.trim();\n if (!target) {\n return null;\n }\n for (const [key, state] of nodeStateByKey) {\n if (state.lastActiveAgentSessionId?.trim() === target) {\n return instanceIdByKey.get(key) ?? null;\n }\n }\n return null;\n },\n writeNodeState(request) {\n if (request.typeId !== typeId) {\n return;\n }\n const key = agentGuiWorkbenchNodeStateKey(request);\n instanceIdByKey.set(key, request.instanceId);\n const previous = nodeStateByKey.get(key);\n let clearedInstanceSeed = false;\n if (request.nodeId) {\n const instanceKey = agentGuiWorkbenchInstanceStateKey(request);\n instanceIdByKey.delete(instanceKey);\n clearedInstanceSeed = nodeStateByKey.delete(instanceKey);\n }\n const next = {\n ...normalizeAgentGuiWorkbenchState(request.state)\n };\n nodeStateByKey.set(key, next);\n if (\n !clearedInstanceSeed &&\n previous &&\n areAgentGuiWorkbenchMemoryStatesEqual(previous, next)\n ) {\n return;\n }\n notify();\n }\n };\n}\n\nfunction areAgentGuiWorkbenchMemoryStatesEqual(\n left: AgentGuiWorkbenchState,\n right: AgentGuiWorkbenchState\n): boolean {\n return areAgentGuiWorkbenchStatesEqual(left, right);\n}\n\nfunction agentGuiWorkbenchNodeStateKey(\n request: Pick<WorkbenchHostExternalStateLookupInput, \"instanceId\"> &\n Partial<Pick<WorkbenchHostExternalStateLookupInput, \"nodeId\">>\n): string {\n return request.nodeId\n ? `node:${request.nodeId}`\n : agentGuiWorkbenchInstanceStateKey(request);\n}\n\nfunction agentGuiWorkbenchInstanceStateKey(\n request: Pick<WorkbenchHostExternalStateLookupInput, \"instanceId\">\n): string {\n return `instance:${request.instanceId}`;\n}\n\nfunction createDefaultAgentGuiWorkbenchState(): AgentGuiWorkbenchState {\n return {\n conversationRailCollapsed: false,\n conversationRailWidthPx: null,\n lastActiveAgentSessionId: null\n };\n}\n\nfunction normalizeOptionalNonEmptyString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction normalizeAgentGuiProviderTargetRef(\n value: unknown,\n expectedProvider?: AgentGuiWorkbenchProvider\n): AgentGUIProviderTargetRef | null {\n if (!isRecord(value)) {\n return null;\n }\n const kind = normalizeOptionalNonEmptyString(value.kind);\n const provider = value.provider;\n if (!kind || !isAgentGuiWorkbenchProvider(provider)) {\n return null;\n }\n if (expectedProvider && provider !== expectedProvider) {\n return null;\n }\n return {\n ...value,\n kind,\n provider\n };\n}\n\nfunction normalizeAgentGuiWorkbenchComposerOverrides(\n value: unknown\n): AgentGuiWorkbenchComposerOverrides | null {\n if (!isRecord(value)) {\n return null;\n }\n const composerOverrides: AgentGuiWorkbenchComposerOverrides = {};\n if (typeof value.model === \"string\" && value.model.trim()) {\n composerOverrides.model = value.model.trim();\n }\n if (\n typeof value.reasoningEffort === \"string\" &&\n value.reasoningEffort.trim()\n ) {\n composerOverrides.reasoningEffort = value.reasoningEffort.trim();\n }\n if (\n typeof value.permissionModeId === \"string\" &&\n value.permissionModeId.trim()\n ) {\n composerOverrides.permissionModeId = value.permissionModeId.trim();\n }\n if (typeof value.planMode === \"boolean\") {\n composerOverrides.planMode = value.planMode;\n }\n return Object.keys(composerOverrides).length > 0 ? composerOverrides : null;\n}\n\nfunction normalizeAgentGuiWorkbenchComposerOverridesByProvider(\n value: unknown\n): AgentGuiWorkbenchComposerOverridesByProvider | null {\n if (!isRecord(value)) {\n return null;\n }\n const result: AgentGuiWorkbenchComposerOverridesByProvider = {};\n for (const provider of agentGuiWorkbenchProviders) {\n const overrides = normalizeAgentGuiWorkbenchComposerOverrides(\n value[provider]\n );\n if (overrides) {\n result[provider] = overrides;\n }\n }\n return Object.keys(result).length > 0 ? result : null;\n}\n\nfunction normalizeAgentGuiWorkbenchComposerOverridesByAgentTargetId(\n value: unknown\n): AgentGuiWorkbenchComposerOverridesByAgentTargetId | null {\n if (!isRecord(value)) {\n return null;\n }\n const result: AgentGuiWorkbenchComposerOverridesByAgentTargetId = {};\n for (const [rawAgentTargetId, rawOverrides] of Object.entries(value)) {\n const agentTargetId = normalizeOptionalNonEmptyString(rawAgentTargetId);\n if (!agentTargetId) {\n continue;\n }\n const overrides = normalizeAgentGuiWorkbenchComposerOverrides(rawOverrides);\n if (overrides) {\n result[agentTargetId] = overrides;\n }\n }\n return Object.keys(result).length > 0 ? result : null;\n}\n\nfunction normalizeOptionalPositiveNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0\n ? Math.round(value)\n : null;\n}\n\nfunction normalizeOptionalNonNegativeNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? Math.round(value)\n : null;\n}\n\nfunction composerOverridesEqual(\n left: AgentGuiWorkbenchComposerOverrides | null | undefined,\n right: AgentGuiWorkbenchComposerOverrides | null | undefined\n): boolean {\n return (\n (left?.model ?? null) === (right?.model ?? null) &&\n (left?.permissionModeId ?? null) === (right?.permissionModeId ?? null) &&\n (left?.planMode ?? null) === (right?.planMode ?? null) &&\n (left?.reasoningEffort ?? null) === (right?.reasoningEffort ?? null)\n );\n}\n\nfunction composerOverridesByProviderEqual(\n left: AgentGuiWorkbenchComposerOverridesByProvider | null | undefined,\n right: AgentGuiWorkbenchComposerOverridesByProvider | null | undefined\n): boolean {\n for (const provider of agentGuiWorkbenchProviders) {\n if (!composerOverridesEqual(left?.[provider], right?.[provider])) {\n return false;\n }\n }\n return true;\n}\n\nfunction composerOverridesByAgentTargetIdEqual(\n left: AgentGuiWorkbenchComposerOverridesByAgentTargetId | null | undefined,\n right: AgentGuiWorkbenchComposerOverridesByAgentTargetId | null | undefined\n): boolean {\n const leftKeys = Object.keys(left ?? {}).sort();\n const rightKeys = Object.keys(right ?? {}).sort();\n if (leftKeys.length !== rightKeys.length) {\n return false;\n }\n return leftKeys.every(\n (key, index) =>\n key === rightKeys[index] &&\n composerOverridesEqual(left?.[key], right?.[key])\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
formatAgentSessionMentionText,
|
|
5
5
|
normalizeAgentGUIProviderIdentity,
|
|
6
6
|
resolveAgentGUIExplicitConversationTitle
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-W3Q7B3DV.js";
|
|
8
8
|
|
|
9
9
|
// workbench/sessionTitle.ts
|
|
10
10
|
function formatAgentGuiSessionPlainTitle(title, options = {}) {
|
|
@@ -96,4 +96,4 @@ export {
|
|
|
96
96
|
formatAgentGuiConversationPlainTitle,
|
|
97
97
|
resolveAgentGuiWorkbenchSessionTitle
|
|
98
98
|
};
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
99
|
+
//# sourceMappingURL=chunk-EIPQGFAE.js.map
|
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
Spinner,
|
|
3
3
|
userAvatarPlaceholderUrl,
|
|
4
4
|
workspaceAgentActivityStatusLabel
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-R7PSPKBD.js";
|
|
6
6
|
import {
|
|
7
7
|
normalizeAgentSessionMentionTitle
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-XZPAU7FC.js";
|
|
9
9
|
import {
|
|
10
10
|
resolveAgentMentionFileThumbnailUrl,
|
|
11
11
|
resolveAgentMentionFileVisualKind
|
|
@@ -13,10 +13,10 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
getOptionalAgentHostApi,
|
|
15
15
|
managedAgentRoundedIconUrl
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-N4I3TD4G.js";
|
|
17
17
|
import {
|
|
18
18
|
translate
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-UWBX3DZK.js";
|
|
20
20
|
import {
|
|
21
21
|
AGENT_CONTEXT_MENTION_PROVIDER_IDS
|
|
22
22
|
} from "./chunk-JM24HADP.js";
|
|
@@ -2211,4 +2211,4 @@ export {
|
|
|
2211
2211
|
AgentFileMentionPalette,
|
|
2212
2212
|
AgentContextMentionPalette
|
|
2213
2213
|
};
|
|
2214
|
-
//# sourceMappingURL=chunk-
|
|
2214
|
+
//# sourceMappingURL=chunk-HKKC2U6J.js.map
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
getOptionalAgentHostApi,
|
|
4
4
|
managedAgentRoundedIconUrl,
|
|
5
5
|
useOptionalAgentHostApi
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-N4I3TD4G.js";
|
|
7
7
|
import {
|
|
8
8
|
translate,
|
|
9
9
|
useTranslation
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-UWBX3DZK.js";
|
|
11
11
|
import {
|
|
12
12
|
resolveAgentWorkspaceFileVisualKind
|
|
13
13
|
} from "./chunk-PJP5BUU6.js";
|
|
@@ -3659,4 +3659,4 @@ export {
|
|
|
3659
3659
|
CustomScrollArea,
|
|
3660
3660
|
MessageSquareMoreIcon
|
|
3661
3661
|
};
|
|
3662
|
-
//# sourceMappingURL=chunk-
|
|
3662
|
+
//# sourceMappingURL=chunk-IDTB6OID.js.map
|
|
@@ -1,11 +1,34 @@
|
|
|
1
1
|
import {
|
|
2
2
|
codexRoundedUrl,
|
|
3
|
+
cursorColorfulUrl,
|
|
4
|
+
cursorRoundedUrl,
|
|
3
5
|
geminiRoundedUrl,
|
|
4
6
|
hermesRoundedUrl,
|
|
5
7
|
manageAgentClaudeCodeUrl,
|
|
6
8
|
manageAgentTuttiUrl,
|
|
9
|
+
normalizeManagedAgentProvider,
|
|
7
10
|
openclawRoundedUrl
|
|
8
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-R2NGSPQS.js";
|
|
12
|
+
|
|
13
|
+
// app/renderer/assets/icons/agents/claudecode-flat-filled.svg
|
|
14
|
+
var claudecode_flat_filled_default = "./claudecode-flat-filled-NHO4JCVK.svg";
|
|
15
|
+
|
|
16
|
+
// app/renderer/assets/icons/agents/codex-flat-filled.svg
|
|
17
|
+
var codex_flat_filled_default = "./codex-flat-filled-WYHCF5VR.svg";
|
|
18
|
+
|
|
19
|
+
// agentGuiSessionProviderIconUrls.ts
|
|
20
|
+
function resolveAgentGuiSessionProviderIconUrl(provider) {
|
|
21
|
+
switch (normalizeManagedAgentProvider(provider)) {
|
|
22
|
+
case "claude-code":
|
|
23
|
+
return claudecode_flat_filled_default;
|
|
24
|
+
case "codex":
|
|
25
|
+
return codex_flat_filled_default;
|
|
26
|
+
case "cursor":
|
|
27
|
+
return cursorColorfulUrl;
|
|
28
|
+
default:
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
9
32
|
|
|
10
33
|
// agent-gui/agentGuiNode/model/agentGuiRailLayout.ts
|
|
11
34
|
function clamp(value, min, max) {
|
|
@@ -92,6 +115,7 @@ var agentGuiDockIconUrl = codexRoundedUrl;
|
|
|
92
115
|
var agentGuiDockIconUrls = {
|
|
93
116
|
"claude-code": manageAgentClaudeCodeUrl,
|
|
94
117
|
codex: codexRoundedUrl,
|
|
118
|
+
cursor: cursorRoundedUrl,
|
|
95
119
|
gemini: geminiRoundedUrl,
|
|
96
120
|
hermes: hermesRoundedUrl,
|
|
97
121
|
nexight: manageAgentTuttiUrl,
|
|
@@ -99,6 +123,7 @@ var agentGuiDockIconUrls = {
|
|
|
99
123
|
};
|
|
100
124
|
|
|
101
125
|
export {
|
|
126
|
+
resolveAgentGuiSessionProviderIconUrl,
|
|
102
127
|
AGENT_GUI_CONVERSATION_RAIL_MIN_WIDTH_PX,
|
|
103
128
|
AGENT_GUI_DETAIL_MIN_WIDTH_PX,
|
|
104
129
|
AGENT_GUI_COLLAPSED_MIN_WIDTH_PX,
|
|
@@ -110,4 +135,4 @@ export {
|
|
|
110
135
|
agentGuiDockIconUrl,
|
|
111
136
|
agentGuiDockIconUrls
|
|
112
137
|
};
|
|
113
|
-
//# sourceMappingURL=chunk-
|
|
138
|
+
//# sourceMappingURL=chunk-LJE2W4EM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../agentGuiSessionProviderIconUrls.ts","../agent-gui/agentGuiNode/model/agentGuiRailLayout.ts","../dockIcons.ts"],"sourcesContent":["import claudeCodeFlatFilledIconUrl from \"./app/renderer/assets/icons/agents/claudecode-flat-filled.svg\";\nimport codexFlatFilledIconUrl from \"./app/renderer/assets/icons/agents/codex-flat-filled.svg\";\nimport cursorFlatFilledIconUrl from \"./app/renderer/assets/icons/agents/cursor-flat-filled.svg\";\nimport { cursorColorfulUrl } from \"./managedAgentIconAssets\";\nimport { normalizeManagedAgentProvider } from \"./shared/managedAgentProviders\";\n\nexport {\n claudeCodeFlatFilledIconUrl,\n codexFlatFilledIconUrl,\n cursorColorfulUrl,\n cursorFlatFilledIconUrl\n};\n\nexport function resolveAgentGuiSessionProviderIconUrl(\n provider: string | undefined\n): string | null {\n switch (normalizeManagedAgentProvider(provider)) {\n case \"claude-code\":\n return claudeCodeFlatFilledIconUrl;\n case \"codex\":\n return codexFlatFilledIconUrl;\n case \"cursor\":\n return cursorColorfulUrl;\n default:\n return null;\n }\n}\n","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","import {\n codexRoundedUrl,\n cursorRoundedUrl,\n geminiRoundedUrl,\n hermesRoundedUrl,\n manageAgentClaudeCodeUrl,\n manageAgentTuttiUrl,\n openclawRoundedUrl\n} from \"./managedAgentIconAssets.ts\";\n\nexport const agentGuiDockIconUrl = codexRoundedUrl;\n\nexport const agentGuiDockIconUrls = {\n \"claude-code\": manageAgentClaudeCodeUrl,\n codex: codexRoundedUrl,\n cursor: cursorRoundedUrl,\n gemini: geminiRoundedUrl,\n hermes: hermesRoundedUrl,\n nexight: manageAgentTuttiUrl,\n openclaw: openclawRoundedUrl\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAaO,SAAS,sCACd,UACe;AACf,UAAQ,8BAA8B,QAAQ,GAAG;AAAA,IAC/C,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;;;AC1BA,SAAS,MAAM,OAAe,KAAa,KAAqB;AAC9D,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C;AAGO,IAAM,+CAA+C;AACrD,IAAM,2CAA2C;AACjD,IAAM,2CAA2C;AACjD,IAAM,gCAAgC;AACtC,IAAM,wCAAwC;AAC9C,IAAM,mCAAmC;AACzC,IAAM,kCACX,2CACA,gCACA;AACK,IAAM,mCAAmC;AACzC,IAAM,qCAAqC;AAU3C,SAAS,2CACd,kBACS;AACT,SACE,OAAO,SAAS,gBAAgB,KAChC,mBAAmB,KACnB,oBAAoB;AAExB;AAEO,SAAS,0CACd,kBACQ;AACR,QAAM,qBACJ,OAAO,SAAS,gBAAgB,KAAK,mBAAmB,IACpD,mBACA,+CACA,gCACA;AAEN,SAAO,KAAK;AAAA,IACV;AAAA,IACA,KAAK;AAAA,MACH;AAAA,MACA,qBACE,gCACA;AAAA,IACJ;AAAA,EACF;AACF;AAEO,SAAS,qCACd,SACA,kBACQ;AACR,QAAM,mBACJ,OAAO,YAAY,YAAY,OAAO,SAAS,OAAO,IAClD,KAAK,MAAM,OAAO,IAClB;AAEN,SAAO;AAAA,IACL,oBAAoB;AAAA,IACpB;AAAA,IACA,0CAA0C,gBAAgB;AAAA,EAC5D;AACF;AAEO,SAAS,2CAA2C,OAIzC;AAChB,QAAM,cAAc;AAAA,IAClB,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACA,MAAI,MAAM,mBAAmB,aAAa;AACxC,WAAO,MAAM;AAAA,EACf;AAEA,MAAI,MAAM,mBAAmB,QAAQ,MAAM,mBAAmB,QAAW;AACvE,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA,MAAM;AAAA,IACR;AACA,QAAI,gBAAgB,gBAAgB;AAClC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,mCACd,OAIA;AACA,QAAM,qBAAqB;AAAA,IACzB,MAAM;AAAA,IACN,2CACE,gCACA;AAAA,EACJ;AACA,QAAM,iBAAiB,KAAK;AAAA,IAC1B,KAAK,MAAM,MAAM,KAAK;AAAA,IACtB,qBACE,gCACA;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACA,QAAM,iBACJ,OAAO,SAAS,MAAM,YAAY,KAAK,KAAK,MAAM,YAAY,QAAQ,IAClE,KAAK,MAAM,MAAM,YAAY,KAAK,IAClC;AACN,QAAM,cAAc,KAAK,IAAI,gBAAgB,cAAc;AAC3D,QAAM,OAAO,KAAK,IAAI,GAAG,iBAAiB,WAAW;AACrD,QAAM,QAAQ,MAAM,KAAK,MAAM,MAAM,SAAS,CAAC,GAAG,GAAG,IAAI;AAEzD,SAAO;AAAA,IACL,UAAU;AAAA,MACR,GAAG;AAAA,MACH,GAAG,MAAM,SAAS;AAAA,IACpB;AAAA,IACA,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,MAAM;AAAA,IAChB;AAAA,EACF;AACF;;;AC/HO,IAAM,sBAAsB;AAE5B,IAAM,uBAAuB;AAAA,EAClC,eAAe;AAAA,EACf,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AACZ;","names":[]}
|
|
@@ -3,28 +3,29 @@ import {
|
|
|
3
3
|
createAgentGuiWorkbenchNodeStateSource,
|
|
4
4
|
normalizeAgentGuiWorkbenchNodeState,
|
|
5
5
|
normalizeAgentGuiWorkbenchState
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-DL6BMEHI.js";
|
|
7
7
|
import {
|
|
8
8
|
agentGuiWorkbenchDockIdentityFromIdentifier,
|
|
9
9
|
agentGuiWorkbenchProviderFromIdentifier,
|
|
10
10
|
agentGuiWorkbenchTypeId,
|
|
11
11
|
agentGuiWorkbenchUnifiedDockEntryId,
|
|
12
12
|
createAgentGuiWorkbenchLaunchDescriptor
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-P5C3ED3V.js";
|
|
14
14
|
import {
|
|
15
15
|
agentGuiWorkbenchDefaultDockProviders,
|
|
16
16
|
isAgentGuiWorkbenchProvider,
|
|
17
17
|
resolveAgentGuiWorkbenchProviderLabel
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-CKCUEHBW.js";
|
|
19
19
|
import {
|
|
20
20
|
agentGuiDockIconUrls,
|
|
21
21
|
clampAgentGUIConversationRailWidthPx,
|
|
22
22
|
resolveAgentGUIExpandedWindowFrame,
|
|
23
|
+
resolveAgentGuiSessionProviderIconUrl,
|
|
23
24
|
shouldAutoCollapseAgentGUIConversationRail
|
|
24
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-LJE2W4EM.js";
|
|
25
26
|
import {
|
|
26
27
|
normalizeAgentGUIProviderTargets
|
|
27
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-UI3YDJTC.js";
|
|
28
29
|
|
|
29
30
|
// workbench/contribution.ts
|
|
30
31
|
import { createElement as createElement2 } from "react";
|
|
@@ -32,6 +33,48 @@ import {
|
|
|
32
33
|
getWorkbenchLayoutFrame
|
|
33
34
|
} from "@tutti-os/workbench-surface";
|
|
34
35
|
|
|
36
|
+
// workbench/bodyRenderErrorRegistry.ts
|
|
37
|
+
import { useSyncExternalStore } from "react";
|
|
38
|
+
var listenersByNodeId = /* @__PURE__ */ new Map();
|
|
39
|
+
var errorNodeIds = /* @__PURE__ */ new Set();
|
|
40
|
+
function setAgentGuiWorkbenchBodyRenderError(nodeId, hasError) {
|
|
41
|
+
const hadError = errorNodeIds.has(nodeId);
|
|
42
|
+
if (hadError === hasError) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (hasError) {
|
|
46
|
+
errorNodeIds.add(nodeId);
|
|
47
|
+
} else {
|
|
48
|
+
errorNodeIds.delete(nodeId);
|
|
49
|
+
}
|
|
50
|
+
for (const listener of listenersByNodeId.get(nodeId) ?? []) {
|
|
51
|
+
listener();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function subscribeAgentGuiWorkbenchBodyRenderError(nodeId, listener) {
|
|
55
|
+
let listeners = listenersByNodeId.get(nodeId);
|
|
56
|
+
if (!listeners) {
|
|
57
|
+
listeners = /* @__PURE__ */ new Set();
|
|
58
|
+
listenersByNodeId.set(nodeId, listeners);
|
|
59
|
+
}
|
|
60
|
+
listeners.add(listener);
|
|
61
|
+
return () => {
|
|
62
|
+
listeners?.delete(listener);
|
|
63
|
+
if (listeners?.size === 0) {
|
|
64
|
+
listenersByNodeId.delete(nodeId);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function getAgentGuiWorkbenchBodyRenderErrorSnapshot(nodeId) {
|
|
69
|
+
return errorNodeIds.has(nodeId);
|
|
70
|
+
}
|
|
71
|
+
function useAgentGuiWorkbenchBodyRenderError(nodeId) {
|
|
72
|
+
return useSyncExternalStore(
|
|
73
|
+
(listener) => subscribeAgentGuiWorkbenchBodyRenderError(nodeId, listener),
|
|
74
|
+
() => getAgentGuiWorkbenchBodyRenderErrorSnapshot(nodeId)
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
35
78
|
// workbench/header.ts
|
|
36
79
|
import {
|
|
37
80
|
createElement
|
|
@@ -57,17 +100,21 @@ function AgentGuiWorkbenchHeader({
|
|
|
57
100
|
isConversationRailAutoCollapsed,
|
|
58
101
|
isConversationRailCollapsed,
|
|
59
102
|
conversationRailWidthPx,
|
|
103
|
+
conversationIconUrl,
|
|
60
104
|
providerRailWidthPx,
|
|
61
105
|
conversationTitle,
|
|
106
|
+
nodeId,
|
|
62
107
|
onCreateConversation,
|
|
63
108
|
onToggleConversationRail,
|
|
64
|
-
title,
|
|
109
|
+
title: _title,
|
|
65
110
|
windowActions,
|
|
66
111
|
...headerProps
|
|
67
112
|
}) {
|
|
113
|
+
const hasBodyRenderError = useAgentGuiWorkbenchBodyRenderError(nodeId);
|
|
68
114
|
const toggleLabel = isConversationRailCollapsed ? copy.expandConversationRail : copy.collapseConversationRail;
|
|
69
|
-
const appTitle =
|
|
70
|
-
const sessionTitle = conversationTitle?.trim() || "";
|
|
115
|
+
const appTitle = _title?.trim() || copy.fallbackAgentLabel;
|
|
116
|
+
const sessionTitle = hasBodyRenderError ? "" : conversationTitle?.trim() || "";
|
|
117
|
+
const sessionIconUrl = conversationIconUrl?.trim() || "";
|
|
71
118
|
const safeDisplayMode = displayMode ?? "floating";
|
|
72
119
|
const safeWindowActions = windowActions ?? {
|
|
73
120
|
close: () => void 0,
|
|
@@ -125,7 +172,7 @@ function AgentGuiWorkbenchHeader({
|
|
|
125
172
|
tone: "maximize"
|
|
126
173
|
})
|
|
127
174
|
),
|
|
128
|
-
createElement(
|
|
175
|
+
!isConversationRailCollapsed ? createElement(
|
|
129
176
|
"div",
|
|
130
177
|
{
|
|
131
178
|
className: "agent-gui-workbench-header__agent-brand"
|
|
@@ -137,7 +184,7 @@ function AgentGuiWorkbenchHeader({
|
|
|
137
184
|
},
|
|
138
185
|
appTitle
|
|
139
186
|
)
|
|
140
|
-
),
|
|
187
|
+
) : null,
|
|
141
188
|
createElement(
|
|
142
189
|
Button,
|
|
143
190
|
{
|
|
@@ -185,6 +232,13 @@ function AgentGuiWorkbenchHeader({
|
|
|
185
232
|
{
|
|
186
233
|
className: "agent-gui-workbench-header__session-title"
|
|
187
234
|
},
|
|
235
|
+
sessionIconUrl ? createElement("img", {
|
|
236
|
+
alt: "",
|
|
237
|
+
className: "agent-gui-workbench-header__session-icon",
|
|
238
|
+
"data-testid": "agent-gui-window-session-icon",
|
|
239
|
+
draggable: false,
|
|
240
|
+
src: sessionIconUrl
|
|
241
|
+
}) : null,
|
|
188
242
|
createElement(
|
|
189
243
|
"span",
|
|
190
244
|
{
|
|
@@ -277,7 +331,8 @@ var agentGuiWorkbenchDefaultNodeFrame = {
|
|
|
277
331
|
x: 140,
|
|
278
332
|
y: 48
|
|
279
333
|
};
|
|
280
|
-
var
|
|
334
|
+
var agentGuiWorkbenchDefaultUsableWidthRatio = 0.8;
|
|
335
|
+
var agentGuiWorkbenchDefaultUsableHeightRatio = 0.9;
|
|
281
336
|
var agentGuiWorkbenchCompactVisibleAreaRatio = 0.9;
|
|
282
337
|
var agentGuiWorkbenchNewWindowCascadeOffset = { x: 180, y: 88 };
|
|
283
338
|
var agentGuiWorkbenchProviderRailWidthPx = 52;
|
|
@@ -315,6 +370,7 @@ function createAgentGuiWorkbenchContribution(input) {
|
|
|
315
370
|
providerAvailability: input.providerAvailability,
|
|
316
371
|
providerTargetsLoading: input.providerTargetsLoading,
|
|
317
372
|
renderPreview: input.renderPreview,
|
|
373
|
+
resolveDockPopupIdentity: input.resolveDockPopupIdentity,
|
|
318
374
|
resolveDockPopupTitle: input.resolveDockPopupTitle,
|
|
319
375
|
sectionId: input.dockSectionId ?? "agents",
|
|
320
376
|
targets: input.providerTargets,
|
|
@@ -326,6 +382,9 @@ function createAgentGuiWorkbenchContribution(input) {
|
|
|
326
382
|
{
|
|
327
383
|
frame,
|
|
328
384
|
instance: { mode: "multi" },
|
|
385
|
+
onBodyRenderErrorChange: ({ hasError, node }) => {
|
|
386
|
+
setAgentGuiWorkbenchBodyRenderError(node.id, hasError);
|
|
387
|
+
},
|
|
329
388
|
renderBody: (context) => input.renderBody(
|
|
330
389
|
context,
|
|
331
390
|
{
|
|
@@ -366,7 +425,12 @@ function createAgentGuiWorkbenchContribution(input) {
|
|
|
366
425
|
nodeState.conversationRailWidthPx,
|
|
367
426
|
node.frame.width
|
|
368
427
|
);
|
|
369
|
-
const
|
|
428
|
+
const conversationIdentity = input.resolveDockPopupIdentity?.(workbenchState) ?? null;
|
|
429
|
+
const conversationTitle = conversationIdentity?.title ?? input.resolveDockPopupTitle?.(workbenchState) ?? workbenchState.lastActiveConversationTitle ?? null;
|
|
430
|
+
const conversationIconUrl = conversationIdentity?.iconUrl ?? resolveAgentGuiSessionProviderIconUrl(provider) ?? resolveAgentGuiWorkbenchProviderIconUrl({
|
|
431
|
+
dockIconUrls: input.dockIconUrls,
|
|
432
|
+
provider
|
|
433
|
+
});
|
|
370
434
|
const persistConversationRailCollapsed = (collapsed) => {
|
|
371
435
|
nodeStateSource.writeNodeState({
|
|
372
436
|
instanceId,
|
|
@@ -405,11 +469,13 @@ function createAgentGuiWorkbenchContribution(input) {
|
|
|
405
469
|
};
|
|
406
470
|
return createElement2(AgentGuiWorkbenchHeader, {
|
|
407
471
|
copy,
|
|
472
|
+
conversationIconUrl,
|
|
408
473
|
conversationTitle,
|
|
409
474
|
conversationRailWidthPx,
|
|
410
475
|
displayMode,
|
|
411
476
|
isConversationRailAutoCollapsed,
|
|
412
477
|
isConversationRailCollapsed,
|
|
478
|
+
nodeId: node.id,
|
|
413
479
|
providerRailWidthPx: agentGuiWorkbenchProviderRailWidthPx,
|
|
414
480
|
title: headerTitle,
|
|
415
481
|
windowActions: {
|
|
@@ -494,6 +560,7 @@ function createAgentGuiWorkbenchContribution(input) {
|
|
|
494
560
|
launchPayload,
|
|
495
561
|
provider
|
|
496
562
|
);
|
|
563
|
+
const launchAgentTargetId = providerTarget.agentTargetId ?? providerTarget.providerTargetId;
|
|
497
564
|
if (targetAgentSessionId) {
|
|
498
565
|
const previousState = nodeStateSource.readNodeState({
|
|
499
566
|
instanceId,
|
|
@@ -504,8 +571,7 @@ function createAgentGuiWorkbenchContribution(input) {
|
|
|
504
571
|
state: {
|
|
505
572
|
...normalizeAgentGuiWorkbenchState(previousState),
|
|
506
573
|
...targetAgentSessionId ? { lastActiveAgentSessionId: targetAgentSessionId } : {},
|
|
507
|
-
|
|
508
|
-
...providerTarget.providerTargetId ? { agentTargetId: providerTarget.providerTargetId } : {}
|
|
574
|
+
agentTargetId: launchAgentTargetId ?? null
|
|
509
575
|
},
|
|
510
576
|
typeId: agentGuiWorkbenchTypeId
|
|
511
577
|
});
|
|
@@ -556,7 +622,9 @@ function buildAgentGuiDockEntries(input) {
|
|
|
556
622
|
return [
|
|
557
623
|
createAgentGuiWorkbenchDockEntry({
|
|
558
624
|
aggregateProviders: agentGuiWorkbenchDefaultDockProviders,
|
|
559
|
-
icon:
|
|
625
|
+
icon: input.unifiedDockIconUrl ? createAgentGuiWorkbenchUnifiedDockIcon({
|
|
626
|
+
iconUrl: input.unifiedDockIconUrl
|
|
627
|
+
}) : createAgentGuiWorkbenchLaunchpadStyleDockIcon({
|
|
560
628
|
tileIconUrls: unifiedTileIconUrls
|
|
561
629
|
}),
|
|
562
630
|
label: input.label ?? agentGuiWorkbenchDefaultCopy.nodeTitle,
|
|
@@ -564,6 +632,7 @@ function buildAgentGuiDockEntries(input) {
|
|
|
564
632
|
order: 0,
|
|
565
633
|
provider,
|
|
566
634
|
renderPreview: input.renderPreview,
|
|
635
|
+
resolveDockPopupIdentity: input.resolveDockPopupIdentity,
|
|
567
636
|
resolveDockPopupTitle: input.resolveDockPopupTitle,
|
|
568
637
|
sectionId,
|
|
569
638
|
visibility: "always"
|
|
@@ -592,23 +661,15 @@ function resolveAgentGuiWorkbenchDefaultLaunchFrame(input) {
|
|
|
592
661
|
const defaultHeight = Math.round(
|
|
593
662
|
layoutFrame.height * agentGuiWorkbenchDefaultUsableHeightRatio
|
|
594
663
|
);
|
|
595
|
-
const
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
const width = shouldUseCompactWidth ? Math.round(layoutFrame.width * agentGuiWorkbenchCompactVisibleAreaRatio) : input.frame.width;
|
|
599
|
-
const height = Math.round(
|
|
600
|
-
layoutFrame.height * agentGuiWorkbenchCompactVisibleAreaRatio
|
|
601
|
-
);
|
|
602
|
-
return {
|
|
603
|
-
height,
|
|
604
|
-
width,
|
|
605
|
-
x: Math.round(layoutFrame.x + (layoutFrame.width - width) / 2),
|
|
606
|
-
y: Math.round(layoutFrame.y + (layoutFrame.height - height) / 2)
|
|
607
|
-
};
|
|
608
|
-
}
|
|
664
|
+
const defaultWidth = Math.round(
|
|
665
|
+
layoutFrame.width * agentGuiWorkbenchDefaultUsableWidthRatio
|
|
666
|
+
);
|
|
609
667
|
return {
|
|
610
668
|
...input.frame,
|
|
611
|
-
height: defaultHeight
|
|
669
|
+
height: defaultHeight,
|
|
670
|
+
width: defaultWidth,
|
|
671
|
+
x: Math.round(layoutFrame.x + (layoutFrame.width - defaultWidth) / 2),
|
|
672
|
+
y: Math.round(layoutFrame.y + (layoutFrame.height - defaultHeight) / 2)
|
|
612
673
|
};
|
|
613
674
|
}
|
|
614
675
|
function isAgentGuiWorkbenchCompactVisibleFrame(frame, defaultFrame) {
|
|
@@ -637,12 +698,12 @@ function createAgentGuiWorkbenchDockEntry(input) {
|
|
|
637
698
|
label: input.label,
|
|
638
699
|
provider: input.provider,
|
|
639
700
|
renderPreview: input.renderPreview,
|
|
701
|
+
resolveDockPopupIdentity: input.resolveDockPopupIdentity,
|
|
640
702
|
resolveDockPopupTitle: input.resolveDockPopupTitle
|
|
641
703
|
}) : null,
|
|
642
704
|
resolvePopupItem: ({ externalNodeState }) => {
|
|
643
|
-
const
|
|
644
|
-
|
|
645
|
-
) ?? null;
|
|
705
|
+
const state = normalizeAgentGuiWorkbenchState(externalNodeState);
|
|
706
|
+
const title = input.resolveDockPopupIdentity?.(state)?.title ?? input.resolveDockPopupTitle?.(state) ?? null;
|
|
646
707
|
return {
|
|
647
708
|
revision: `${input.provider}
|
|
648
709
|
${title ?? ""}`,
|
|
@@ -656,9 +717,12 @@ ${title ?? ""}`,
|
|
|
656
717
|
}
|
|
657
718
|
function resolveAgentGuiUnifiedDockTileIconUrls(dockIconUrls) {
|
|
658
719
|
return agentGuiWorkbenchUnifiedDockTileProviders.map(
|
|
659
|
-
(provider) => dockIconUrls
|
|
720
|
+
(provider) => resolveAgentGuiWorkbenchProviderIconUrl({ dockIconUrls, provider })
|
|
660
721
|
);
|
|
661
722
|
}
|
|
723
|
+
function resolveAgentGuiWorkbenchProviderIconUrl(input) {
|
|
724
|
+
return input.dockIconUrls?.[input.provider] ?? agentGuiDockIconUrls[input.provider];
|
|
725
|
+
}
|
|
662
726
|
function createAgentGuiWorkbenchLaunchpadStyleDockIcon(input) {
|
|
663
727
|
return createElement2(
|
|
664
728
|
"span",
|
|
@@ -682,6 +746,20 @@ function createAgentGuiWorkbenchLaunchpadStyleDockIcon(input) {
|
|
|
682
746
|
)
|
|
683
747
|
);
|
|
684
748
|
}
|
|
749
|
+
function createAgentGuiWorkbenchUnifiedDockIcon(input) {
|
|
750
|
+
return createElement2(
|
|
751
|
+
"span",
|
|
752
|
+
{
|
|
753
|
+
"aria-hidden": "true",
|
|
754
|
+
className: "agent-gui-workbench-dock-icon agent-gui-workbench-dock-icon--single"
|
|
755
|
+
},
|
|
756
|
+
createElement2("img", {
|
|
757
|
+
alt: "",
|
|
758
|
+
draggable: false,
|
|
759
|
+
src: input.iconUrl
|
|
760
|
+
})
|
|
761
|
+
);
|
|
762
|
+
}
|
|
685
763
|
function resolveAgentGuiWorkbenchProviderFromNode(node) {
|
|
686
764
|
return agentGuiWorkbenchProviderFromIdentifier(node.data.instanceId) ?? agentGuiWorkbenchProviderFromIdentifier(node.data.dockEntryId) ?? providerFromState(node.data.snapshotNodeState) ?? providerFromState(node.data.runtimeNodeState) ?? agentGuiWorkbenchProviderFromIdentifier(node.data.typeId) ?? "codex";
|
|
687
765
|
}
|
|
@@ -811,7 +889,7 @@ function providerTargetLaunchPayloadFromRequest(payload, expectedProvider) {
|
|
|
811
889
|
function createAgentGuiWorkbenchPreviewContent(input) {
|
|
812
890
|
const { externalNodeState, node } = input.item;
|
|
813
891
|
const state = normalizeAgentGuiWorkbenchState(externalNodeState);
|
|
814
|
-
const title = input.resolveDockPopupTitle?.(state) ?? node.title;
|
|
892
|
+
const title = input.resolveDockPopupIdentity?.(state)?.title ?? input.resolveDockPopupTitle?.(state) ?? node.title;
|
|
815
893
|
const provider = input.provider ?? agentGuiWorkbenchProviderFromIdentifier(node.data.instanceId) ?? agentGuiWorkbenchProviderFromInstanceId(node.data.instanceId);
|
|
816
894
|
const label = input.label ?? resolveAgentGuiWorkbenchProviderLabel(provider);
|
|
817
895
|
const lines = [label, state.lastActiveAgentSessionId].filter(
|
|
@@ -853,6 +931,7 @@ function createAgentGuiWorkbenchPreviewBodyContext(input) {
|
|
|
853
931
|
export {
|
|
854
932
|
AgentGuiWorkbenchHeader,
|
|
855
933
|
agentGuiWorkbenchDefaultNodeFrame,
|
|
934
|
+
agentGuiWorkbenchDefaultUsableWidthRatio,
|
|
856
935
|
agentGuiWorkbenchDefaultUsableHeightRatio,
|
|
857
936
|
agentGuiWorkbenchCompactVisibleAreaRatio,
|
|
858
937
|
agentGuiWorkbenchNewWindowCascadeOffset,
|
|
@@ -866,4 +945,4 @@ export {
|
|
|
866
945
|
resolveAgentGuiWorkbenchDefaultLaunchFrame,
|
|
867
946
|
resolveAgentGuiWorkbenchContributionCopy
|
|
868
947
|
};
|
|
869
|
-
//# sourceMappingURL=chunk-
|
|
948
|
+
//# sourceMappingURL=chunk-LQHYHF36.js.map
|