@tutti-os/agent-gui 0.0.70 → 0.0.72

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 (72) hide show
  1. package/README.md +4 -0
  2. package/dist/{AgentMentionSearchController-Po0KQLcL.d.ts → AgentMentionSearchController-DD_WOred.d.ts} +1 -0
  3. package/dist/agent-conversation/index.d.ts +3 -3
  4. package/dist/agent-conversation/index.js +6 -6
  5. package/dist/agent-message-center/index.d.ts +2 -1
  6. package/dist/agent-message-center/index.js +12 -10
  7. package/dist/agent-message-center/index.js.map +1 -1
  8. package/dist/{agentGuiNodeTypes-CmLUy5Jt.d.ts → agentGuiNodeTypes-aJ3AX7u2.d.ts} +40 -19
  9. package/dist/app/renderer/agentactivity.css +156 -1
  10. package/dist/{chunk-KTIHLBCN.js → chunk-2I2WRI4F.js} +248 -4
  11. package/dist/chunk-2I2WRI4F.js.map +1 -0
  12. package/dist/{chunk-DXENDZEF.js → chunk-3PKRGSMH.js} +2 -2
  13. package/dist/{chunk-QDWV5VTD.js → chunk-466AWJTS.js} +6 -31
  14. package/dist/chunk-466AWJTS.js.map +1 -0
  15. package/dist/{chunk-SG6A35BU.js → chunk-5H6NINJY.js} +2 -2
  16. package/dist/{chunk-SC3PS7AT.js → chunk-C7K3EFGI.js} +2 -2
  17. package/dist/{chunk-DGNKXT3Q.js → chunk-G6BVEY7I.js} +69 -3
  18. package/dist/chunk-G6BVEY7I.js.map +1 -0
  19. package/dist/{chunk-KS35VKHM.js → chunk-GDFQXJMG.js} +1 -1
  20. package/dist/chunk-GDFQXJMG.js.map +1 -0
  21. package/dist/{chunk-WWY6MYMU.js → chunk-IVIXKAEH.js} +19 -9
  22. package/dist/chunk-IVIXKAEH.js.map +1 -0
  23. package/dist/{chunk-IZX2YQXY.js → chunk-KWQ4N4IZ.js} +117 -8
  24. package/dist/chunk-KWQ4N4IZ.js.map +1 -0
  25. package/dist/{chunk-ISQCYEUJ.js → chunk-OBJRIQPX.js} +411 -62
  26. package/dist/chunk-OBJRIQPX.js.map +1 -0
  27. package/dist/{chunk-QJ42HQ24.js → chunk-Q6AWM3RH.js} +4 -4
  28. package/dist/{chunk-MVPSFOJZ.js → chunk-SVGIWXNK.js} +2 -2
  29. package/dist/{chunk-Y3C5EHSW.js → chunk-SZF52NMJ.js} +173 -12
  30. package/dist/chunk-SZF52NMJ.js.map +1 -0
  31. package/dist/{chunk-FTSEVC6O.js → chunk-XZF4QNT4.js} +2 -2
  32. package/dist/context-mention-palette/index.d.ts +2 -2
  33. package/dist/context-mention-palette/index.js +7 -7
  34. package/dist/i18n/index.d.ts +68 -2
  35. package/dist/i18n/index.js +2 -2
  36. package/dist/index.d.ts +106 -103
  37. package/dist/index.js +2216 -1322
  38. package/dist/index.js.map +1 -1
  39. package/dist/queued-prompt-runtime.d.ts +2 -2
  40. package/dist/{types-DZ79b8Zn.d.ts → types-CrwMqBm1.d.ts} +4 -1
  41. package/dist/workbench/contribution.d.ts +8 -2
  42. package/dist/workbench/contribution.js +4 -4
  43. package/dist/workbench/index.d.ts +1 -1
  44. package/dist/workbench/index.js +5 -7
  45. package/dist/workbench/launch.d.ts +1 -1
  46. package/dist/workbench/providerCatalog.d.ts +1 -1
  47. package/dist/workbench/sessionTitle.d.ts +1 -1
  48. package/dist/workbench/sessionTitle.js +3 -3
  49. package/dist/workbench/state.d.ts +1 -1
  50. package/dist/workbench/state.js +1 -2
  51. package/dist/workbench/types.d.ts +1 -1
  52. package/dist/workspace-agent-generated-files.js +3 -3
  53. package/dist/{workspaceLinkActions-Bjy_XfBm.d.ts → workspaceLinkActions-DS9LWqzI.d.ts} +1 -1
  54. package/package.json +12 -12
  55. package/dist/chunk-DGNKXT3Q.js.map +0 -1
  56. package/dist/chunk-ISQCYEUJ.js.map +0 -1
  57. package/dist/chunk-IZX2YQXY.js.map +0 -1
  58. package/dist/chunk-KS35VKHM.js.map +0 -1
  59. package/dist/chunk-KTIHLBCN.js.map +0 -1
  60. package/dist/chunk-N37A62BK.js +0 -250
  61. package/dist/chunk-N37A62BK.js.map +0 -1
  62. package/dist/chunk-NROZAN34.js +0 -173
  63. package/dist/chunk-NROZAN34.js.map +0 -1
  64. package/dist/chunk-QDWV5VTD.js.map +0 -1
  65. package/dist/chunk-WWY6MYMU.js.map +0 -1
  66. package/dist/chunk-Y3C5EHSW.js.map +0 -1
  67. /package/dist/{chunk-DXENDZEF.js.map → chunk-3PKRGSMH.js.map} +0 -0
  68. /package/dist/{chunk-SG6A35BU.js.map → chunk-5H6NINJY.js.map} +0 -0
  69. /package/dist/{chunk-SC3PS7AT.js.map → chunk-C7K3EFGI.js.map} +0 -0
  70. /package/dist/{chunk-QJ42HQ24.js.map → chunk-Q6AWM3RH.js.map} +0 -0
  71. /package/dist/{chunk-MVPSFOJZ.js.map → chunk-SVGIWXNK.js.map} +0 -0
  72. /package/dist/{chunk-FTSEVC6O.js.map → chunk-XZF4QNT4.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { AgentActivityUsage } from '@tutti-os/agent-activity-core';
2
- import { j as AgentHostAgentSessionCommand, k as AgentHostAgentSessionComposerSettings, m as AgentHostAgentSessionReasoningEffort, n as AgentHostAgentSessionSpeed, l as AgentHostAgentSessionPermissionConfig, o as AgentHostAgentSessionState, a as AgentGUIProvider, r as AgentPromptContentBlock, A as AgentGUINodeData, f as AgentGUIProviderTarget, b as AgentGUIProviderRailMode, c as AgentGUIProviderReadinessGate } from './types-DZ79b8Zn.js';
2
+ import { k as AgentHostAgentSessionCommand, l as AgentHostAgentSessionComposerSettings, n as AgentHostAgentSessionReasoningEffort, o as AgentHostAgentSessionSpeed, m as AgentHostAgentSessionPermissionConfig, p as AgentHostAgentSessionState, a as AgentGUIProvider, s as AgentPromptContentBlock, A as AgentGUINodeData, g as AgentGUIProviderTarget, c as AgentGUIProviderRailMode, d as AgentGUIProviderReadinessGate } from './types-CrwMqBm1.js';
3
3
  import { A as AgentHostBatchUserInfoInput, a as AgentHostBatchUserInfoResult, b as AgentHostDeleteWorkspaceAgentSessionInput, k as AgentHostWorkspaceAgentSessionSummaryInput, j as AgentHostWorkspaceAgentSessionSummary, e as AgentHostWorkspaceAgentListInput, l as AgentHostWorkspaceAgentSnapshot, i as AgentHostWorkspaceAgentSessionMessagesInput, h as AgentHostWorkspaceAgentSessionMessages, p as WorkspaceAgentActivitySyncState } from './workspaceAgentActivityListViewModel-DJvAqZso.js';
4
4
  import { A as AgentApprovalItemVM, a as AgentAskUserQuestionVM, b as AgentConversationPromptVM, c as AgentConversationVM, W as WorkspaceAgentSessionDetailViewModel } from './agentConversationVM-DPAgUJlR.js';
5
5
  import { WorkspaceUserProjectService } from '@tutti-os/workspace-user-project/contracts';
@@ -112,6 +112,23 @@ interface ReadWorkspaceFileResult {
112
112
  bytes: Uint8Array;
113
113
  }
114
114
 
115
+ type AgentSessionCommand = AgentHostAgentSessionCommand;
116
+ type AgentSessionComposerSettings = AgentHostAgentSessionComposerSettings;
117
+ type AgentSessionPermissionConfig = AgentHostAgentSessionPermissionConfig;
118
+ type AgentSessionReasoningEffort = AgentHostAgentSessionReasoningEffort;
119
+ type AgentSessionSpeed = AgentHostAgentSessionSpeed;
120
+ type AgentSessionState = AgentHostAgentSessionState;
121
+
122
+ type AgentGUIConversationFilter = {
123
+ kind: "all";
124
+ } | {
125
+ kind: "agentTarget";
126
+ agentTargetId: string;
127
+ };
128
+
129
+ type AgentGUIResolvedProvider = AgentGUIProvider | "unknown";
130
+ type AgentGUIConversationTitleFallback = "generic-agent" | null;
131
+
115
132
  type AgentHostAsyncResult<T = any> = Promise<T>;
116
133
  type AgentHostRecord = Record<string, unknown>;
117
134
  type AgentHostUnsubscribe = () => void;
@@ -389,23 +406,6 @@ interface AgentHostRuntimeApi {
389
406
  workspaceAgentProbes?: AgentHostWorkspaceAgentProbesApi;
390
407
  }
391
408
 
392
- type AgentSessionCommand = AgentHostAgentSessionCommand;
393
- type AgentSessionComposerSettings = AgentHostAgentSessionComposerSettings;
394
- type AgentSessionPermissionConfig = AgentHostAgentSessionPermissionConfig;
395
- type AgentSessionReasoningEffort = AgentHostAgentSessionReasoningEffort;
396
- type AgentSessionSpeed = AgentHostAgentSessionSpeed;
397
- type AgentSessionState = AgentHostAgentSessionState;
398
-
399
- type AgentGUIConversationFilter = {
400
- kind: "all";
401
- } | {
402
- kind: "agentTarget";
403
- agentTargetId: string;
404
- };
405
-
406
- type AgentGUIResolvedProvider = AgentGUIProvider | "unknown";
407
- type AgentGUIConversationTitleFallback = "generic-agent" | null;
408
-
409
409
  interface AgentGUIConversationProjectSummary {
410
410
  id: string;
411
411
  path: string;
@@ -484,6 +484,7 @@ interface AgentGUIComposerSettingOption {
484
484
  value: string;
485
485
  label: string;
486
486
  description?: string;
487
+ supportsImageInput?: boolean;
487
488
  }
488
489
  interface AgentGUIProviderSkillOption {
489
490
  name: string;
@@ -498,6 +499,7 @@ interface AgentComposerDraftImage {
498
499
  id: string;
499
500
  name: string;
500
501
  mimeType: "image/png" | "image/jpeg" | "image/webp";
502
+ attachmentId?: string;
501
503
  data?: string;
502
504
  path?: string;
503
505
  previewUrl: string;
@@ -520,7 +522,25 @@ interface AgentComposerDraftLargeText {
520
522
  name: string;
521
523
  text: string;
522
524
  sizeBytes?: number;
525
+ path?: string;
526
+ uploading?: boolean;
527
+ uploadError?: string;
523
528
  }
529
+ /**
530
+ * Marks a prompt `file` content block as a pasted-text attachment (as opposed
531
+ * to a user-attached file). Carried on the block `kind` so the round-trip
532
+ * (submit → queue → edit-restore) can rebuild a large-text chip instead of a
533
+ * regular file chip, and so the codex-style "read this file" instruction is
534
+ * materialized only for these blocks at send time.
535
+ */
536
+ declare const AGENT_PASTED_TEXT_BLOCK_KIND = "pasted-text";
537
+ /**
538
+ * Provider id of the custom mention kind used to render a pasted-text chip in
539
+ * the conversation flow. The mention href (`mention://pasted-text/...`) carries
540
+ * the landed archive path + size so the host can render the chip and open a
541
+ * preview on click. Registered via registerAgentCustomMentionKind.
542
+ */
543
+ declare const AGENT_PASTED_TEXT_MENTION_KIND = "pasted-text";
524
544
  interface AgentComposerDraft {
525
545
  prompt: string;
526
546
  images: AgentComposerDraftImage[];
@@ -580,6 +600,7 @@ interface AgentGUINodeViewModel {
580
600
  data: AgentGUINodeData;
581
601
  selectedProviderTarget: AgentGUIProviderTarget;
582
602
  providerTargets: readonly AgentGUIProviderTarget[];
603
+ handoffProviderTargets: readonly AgentGUIProviderTarget[];
583
604
  providerTargetsLoading: boolean;
584
605
  /** How the rail composes its list — "exact" renders targets verbatim with no static injection. */
585
606
  providerRailMode: AgentGUIProviderRailMode;
@@ -637,4 +658,4 @@ interface AgentGUINodeViewModel {
637
658
  providerReadinessGate: AgentGUIProviderReadinessGate | null;
638
659
  }
639
660
 
640
- export type { AgentComposerDraft as A, PersistWriteResult as P, ReadWorkspaceAgentReadStateInput as R, WorkspaceAgentReadStateSnapshot as W, AgentGUIComposerSettingsVM as a, AgentGUINodeViewModel as b, AgentGUIProviderSkillOption as c, AgentGUIQueuedPromptVM as d, AgentHostApi as e, AgentHostApplyWorkspaceGitPatchInput as f, AgentHostInputApi as g, AgentHostRuntimeApi as h, AgentHostSelectFilesInput as i, AgentProbeProvider as j, AgentProbeSnapshot as k, AgentProviderProbeListInput as l, AgentProviderProbeListResult as m, AgentSessionCommand as n, AgentUsageQuota as o, AgentUsageSnapshot as p, WriteWorkspaceAgentReadStateInput as q };
661
+ export { AGENT_PASTED_TEXT_BLOCK_KIND as A, type PersistWriteResult as P, type ReadWorkspaceAgentReadStateInput as R, type WorkspaceAgentReadStateSnapshot as W, AGENT_PASTED_TEXT_MENTION_KIND as a, type AgentComposerDraft as b, type AgentGUIComposerSettingsVM as c, type AgentGUINodeViewModel as d, type AgentGUIProviderSkillOption as e, type AgentGUIQueuedPromptVM as f, type AgentHostApi as g, type AgentHostApplyWorkspaceGitPatchInput as h, type AgentHostInputApi as i, type AgentHostRuntimeApi as j, type AgentHostSelectFilesInput as k, type AgentProbeProvider as l, type AgentProbeSnapshot as m, type AgentProviderProbeListInput as n, type AgentProviderProbeListResult as o, type AgentSessionCommand as p, type AgentUsageQuota as q, type AgentUsageSnapshot as r, type WriteWorkspaceAgentReadStateInput as s };
@@ -4547,6 +4547,18 @@ aside.workspace-agents-status-panel
4547
4547
  background: transparent;
4548
4548
  }
4549
4549
 
4550
+ /*
4551
+ * In the collapsed empty state there is no session title to anchor the control
4552
+ * cluster, so the detached-window button's margin-left:auto would strand the
4553
+ * icons (in the middle of the 720px content cap, or at the far window edge).
4554
+ * Drop the auto push so the controls sit as a compact group right after the
4555
+ * traffic lights instead.
4556
+ */
4557
+ .agent-gui-workbench-header[data-agent-gui-workbench-header-collapsed="true"][data-agent-gui-workbench-header-has-session="false"]
4558
+ .agent-gui-workbench-header__detached-window {
4559
+ margin-left: 0;
4560
+ }
4561
+
4550
4562
  .agent-gui-workbench-header__traffic-lights {
4551
4563
  display: inline-flex;
4552
4564
  flex: 0 0 auto;
@@ -9145,6 +9157,148 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9145
9157
  180ms both;
9146
9158
  }
9147
9159
 
9160
+ .agent-gui-node__empty-hero-suggestions {
9161
+ position: relative;
9162
+ display: grid;
9163
+ width: min(760px, 100%);
9164
+ margin: 0 auto;
9165
+ gap: 12px;
9166
+ justify-items: stretch;
9167
+ animation: agent-gui-empty-hero-enter 300ms cubic-bezier(0.16, 1, 0.3, 1)
9168
+ 240ms both;
9169
+ }
9170
+
9171
+ .agent-gui-node__empty-hero-suggestions-chips {
9172
+ display: flex;
9173
+ flex-wrap: wrap;
9174
+ justify-content: center;
9175
+ gap: 8px;
9176
+ }
9177
+
9178
+ .agent-gui-node__empty-hero-suggestions-chip {
9179
+ display: inline-flex;
9180
+ align-items: center;
9181
+ gap: 6px;
9182
+ border: 1px solid var(--line-2, var(--nexight-line-2));
9183
+ border-radius: 999px;
9184
+ background: transparent;
9185
+ padding: 6px 14px;
9186
+ color: var(--text-secondary);
9187
+ font: inherit;
9188
+ font-size: 13px;
9189
+ line-height: 1.2;
9190
+ cursor: pointer;
9191
+ transition:
9192
+ background 120ms ease,
9193
+ border-color 120ms ease,
9194
+ color 120ms ease;
9195
+ }
9196
+
9197
+ .agent-gui-node__empty-hero-suggestions-chip:hover {
9198
+ border-color: var(--line-1, var(--nexight-line-1));
9199
+ background: var(--background-fronted);
9200
+ color: var(--text-primary);
9201
+ }
9202
+
9203
+ .agent-gui-node__empty-hero-suggestions-chip[aria-pressed="true"] {
9204
+ border-color: var(--line-1, var(--nexight-line-1));
9205
+ background: color-mix(in srgb, var(--text-tertiary) 12%, transparent);
9206
+ color: var(--text-primary);
9207
+ }
9208
+
9209
+ .agent-gui-node__empty-hero-suggestions-chip-icon {
9210
+ width: 15px;
9211
+ height: 15px;
9212
+ flex: 0 0 auto;
9213
+ opacity: 0.8;
9214
+ }
9215
+
9216
+ .agent-gui-node__empty-hero-suggestions-card {
9217
+ position: absolute;
9218
+ top: 0;
9219
+ right: 0;
9220
+ left: 0;
9221
+ z-index: 5;
9222
+ display: grid;
9223
+ gap: 2px;
9224
+ border: 1px solid var(--line-2, var(--nexight-line-2));
9225
+ border-radius: 16px;
9226
+ background: var(--background-fronted);
9227
+ padding: 8px;
9228
+ box-shadow: 0 12px 32px -12px rgba(0, 0, 0, 0.28);
9229
+ animation: agent-gui-empty-hero-enter 220ms cubic-bezier(0.16, 1, 0.3, 1) both;
9230
+ }
9231
+
9232
+ .agent-gui-node__empty-hero-suggestions-card-header {
9233
+ display: flex;
9234
+ align-items: center;
9235
+ justify-content: space-between;
9236
+ gap: 8px;
9237
+ padding: 8px 10px 4px;
9238
+ }
9239
+
9240
+ .agent-gui-node__empty-hero-suggestions-card-title {
9241
+ display: inline-flex;
9242
+ align-items: center;
9243
+ gap: 8px;
9244
+ color: var(--text-tertiary);
9245
+ font-size: 13px;
9246
+ line-height: 1.2;
9247
+ }
9248
+
9249
+ .agent-gui-node__empty-hero-suggestions-card-close {
9250
+ display: inline-flex;
9251
+ align-items: center;
9252
+ justify-content: center;
9253
+ width: 24px;
9254
+ height: 24px;
9255
+ flex: 0 0 auto;
9256
+ border: 0;
9257
+ border-radius: 8px;
9258
+ background: transparent;
9259
+ padding: 0;
9260
+ color: var(--text-tertiary);
9261
+ cursor: pointer;
9262
+ transition:
9263
+ background 120ms ease,
9264
+ color 120ms ease;
9265
+ }
9266
+
9267
+ .agent-gui-node__empty-hero-suggestions-card-close:hover {
9268
+ background: color-mix(in srgb, var(--text-tertiary) 10%, transparent);
9269
+ color: var(--text-primary);
9270
+ }
9271
+
9272
+ .agent-gui-node__empty-hero-suggestions-card-close > svg {
9273
+ width: 16px;
9274
+ height: 16px;
9275
+ }
9276
+
9277
+ .agent-gui-node__empty-hero-suggestions-item {
9278
+ display: flex;
9279
+ align-items: center;
9280
+ width: 100%;
9281
+ height: 32px;
9282
+ border: 0;
9283
+ border-radius: 6px;
9284
+ background: transparent;
9285
+ padding: 0 14px;
9286
+ color: var(--text-secondary);
9287
+ font: inherit;
9288
+ font-size: 13px;
9289
+ line-height: 1.2;
9290
+ text-align: left;
9291
+ cursor: pointer;
9292
+ transition:
9293
+ background 120ms ease,
9294
+ color 120ms ease;
9295
+ }
9296
+
9297
+ .agent-gui-node__empty-hero-suggestions-item:hover {
9298
+ background: color-mix(in srgb, var(--text-tertiary) 8%, transparent);
9299
+ color: var(--text-primary);
9300
+ }
9301
+
9148
9302
  @container agent-gui-node (max-width: 900px) {
9149
9303
  .agent-gui-node__empty-hero {
9150
9304
  padding-right: 32px;
@@ -9152,7 +9306,8 @@ html[data-theme="light"] [data-message-center-item-id].agent-gui-edge-glow {
9152
9306
  }
9153
9307
 
9154
9308
  .agent-gui-node__empty-hero-body,
9155
- .agent-gui-node__empty-hero-body > .agent-gui-node__composer-hero {
9309
+ .agent-gui-node__empty-hero-body > .agent-gui-node__composer-hero,
9310
+ .agent-gui-node__empty-hero-body > .agent-gui-node__empty-hero-suggestions {
9156
9311
  width: 100%;
9157
9312
  }
9158
9313
  }
@@ -3,9 +3,243 @@ import {
3
3
  isAgentGuiWorkbenchProvider,
4
4
  normalizeAgentGuiWorkbenchProvider
5
5
  } from "./chunk-BHNJN2TR.js";
6
- import {
7
- agentGUIProviderTargetRefsEqual
8
- } from "./chunk-N37A62BK.js";
6
+
7
+ // providerTargets.ts
8
+ var agentGUIProviderTargetStaticLabels = {
9
+ "claude-code": "Claude Code",
10
+ codex: "Codex",
11
+ cursor: "Cursor",
12
+ gemini: "Gemini",
13
+ hermes: "Hermes",
14
+ nexight: "Tutti Agent",
15
+ openclaw: "OpenClaw",
16
+ opencode: "OpenCode",
17
+ "tutti-agent": "Tutti Agent"
18
+ };
19
+ var agentGUIDefaultTargetProviders = [
20
+ "codex",
21
+ "claude-code",
22
+ "cursor",
23
+ "tutti-agent",
24
+ "opencode",
25
+ "hermes",
26
+ "openclaw"
27
+ ];
28
+ var agentGUIDisabledPlaceholderProviders = [
29
+ "hermes",
30
+ "openclaw"
31
+ ];
32
+ function createLocalAgentGUIProviderTarget(provider) {
33
+ const targetId = localAgentGUIProviderTargetId(provider);
34
+ const agentTargetId = localAgentGUIAgentTargetId(provider);
35
+ return {
36
+ targetId,
37
+ ...agentTargetId ? { agentTargetId } : {},
38
+ provider,
39
+ ref: {
40
+ kind: "local",
41
+ provider
42
+ },
43
+ label: agentGUIProviderTargetStaticLabels[provider] ?? provider
44
+ };
45
+ }
46
+ function createDisabledPlaceholderAgentGUIProviderTarget(provider) {
47
+ return {
48
+ ...createLocalAgentGUIProviderTarget(provider),
49
+ disabled: true
50
+ };
51
+ }
52
+ function createSharedAgentGUIProviderTarget(input) {
53
+ const sharedAgentId = input.sharedAgentId.trim();
54
+ const targetId = `shared-agent:${sharedAgentId}`;
55
+ const badge = normalizeAgentGUIProviderTargetBadge(input.badge);
56
+ return {
57
+ targetId,
58
+ ...input.agentTargetId?.trim() ? { agentTargetId: input.agentTargetId.trim() } : {},
59
+ provider: input.provider,
60
+ ref: {
61
+ ...input.ref ?? {},
62
+ kind: "shared-agent",
63
+ provider: input.provider,
64
+ sharedAgentId
65
+ },
66
+ label: input.label,
67
+ ...badge ? { badge } : {},
68
+ ...input.ownerLabel?.trim() ? { ownerLabel: input.ownerLabel.trim() } : {},
69
+ ...input.iconUrl?.trim() ? { iconUrl: input.iconUrl.trim() } : {},
70
+ ...input.unavailableReason?.trim() ? { unavailableReason: input.unavailableReason.trim() } : {},
71
+ ...input.disabled === true ? { disabled: true } : {}
72
+ };
73
+ }
74
+ function createLocalAgentGUIProviderTargets(providers = agentGUIDefaultTargetProviders) {
75
+ return providers.map(
76
+ (provider) => createLocalAgentGUIProviderTarget(provider)
77
+ );
78
+ }
79
+ function createStaticAgentGUIProviderTargets(providers = agentGUIDefaultTargetProviders, options) {
80
+ const disabledProviders = new Set(
81
+ options?.includeDisabledPlaceholders === true ? agentGUIDisabledPlaceholderProviders : []
82
+ );
83
+ return providers.map(
84
+ (provider) => disabledProviders.has(provider) ? createDisabledPlaceholderAgentGUIProviderTarget(provider) : createLocalAgentGUIProviderTarget(provider)
85
+ );
86
+ }
87
+ function localAgentGUIProviderTargetId(provider) {
88
+ return `local:${provider}`;
89
+ }
90
+ function localAgentGUIAgentTargetId(provider) {
91
+ switch (provider) {
92
+ case "codex":
93
+ return "local:codex";
94
+ case "claude-code":
95
+ return "local:claude-code";
96
+ case "tutti-agent":
97
+ return "local:tutti-agent";
98
+ case "cursor":
99
+ return "local:cursor";
100
+ case "hermes":
101
+ return "local:hermes";
102
+ case "nexight":
103
+ return "local:nexight";
104
+ case "openclaw":
105
+ return "local:openclaw";
106
+ case "opencode":
107
+ return "local:opencode";
108
+ default:
109
+ return null;
110
+ }
111
+ }
112
+ function normalizeAgentGUIProviderTargets(targets, options) {
113
+ const includeDisabledPlaceholders = options?.includeDisabledPlaceholders === true;
114
+ const useStaticCatalog = options?.useStaticCatalog !== false;
115
+ const source = targets && targets.length > 0 ? targets : [];
116
+ const normalizedTargets = [];
117
+ const seenTargetKeys = /* @__PURE__ */ new Set();
118
+ const seenProviders = /* @__PURE__ */ new Set();
119
+ for (const target of source) {
120
+ const normalized = normalizeAgentGUIProviderTarget(target);
121
+ if (!normalized) {
122
+ continue;
123
+ }
124
+ const dedupeKey = `${normalized.provider}\0${normalized.targetId}`;
125
+ if (seenTargetKeys.has(dedupeKey)) {
126
+ continue;
127
+ }
128
+ seenTargetKeys.add(dedupeKey);
129
+ seenProviders.add(normalized.provider);
130
+ normalizedTargets.push(normalized);
131
+ }
132
+ if (includeDisabledPlaceholders && normalizedTargets.length > 0) {
133
+ for (const provider of agentGUIDisabledPlaceholderProviders) {
134
+ if (seenProviders.has(provider)) {
135
+ continue;
136
+ }
137
+ normalizedTargets.push(
138
+ createDisabledPlaceholderAgentGUIProviderTarget(provider)
139
+ );
140
+ }
141
+ }
142
+ return normalizedTargets.length > 0 || !useStaticCatalog ? normalizedTargets : createStaticAgentGUIProviderTargets(void 0, {
143
+ includeDisabledPlaceholders
144
+ });
145
+ }
146
+ function resolveAgentGUIProviderTarget(input) {
147
+ const targetByAgentTargetId = new Map(
148
+ input.providerTargets.flatMap(
149
+ (target) => target.agentTargetId ? [[target.agentTargetId, target]] : []
150
+ )
151
+ );
152
+ const agentTarget = targetByAgentTargetId.get(
153
+ input.agentTargetId?.trim() ?? ""
154
+ );
155
+ if (agentTarget) {
156
+ return agentTarget;
157
+ }
158
+ const providerTargets = input.providerTargets.filter(
159
+ (target) => target.provider === input.provider
160
+ );
161
+ const targetById = new Map(
162
+ providerTargets.map((target) => [target.targetId, target])
163
+ );
164
+ return targetById.get(input.providerTargetId?.trim() ?? "") ?? targetById.get(input.defaultProviderTargetId?.trim() ?? "") ?? targetById.get(localAgentGUIProviderTargetId(input.provider)) ?? providerTargets.find((target) => target.disabled !== true) ?? providerTargets[0] ?? (input.useStaticCatalog === false ? null : createLocalAgentGUIProviderTarget(input.provider));
165
+ }
166
+ function agentGUIProviderTargetRefsEqual(left, right) {
167
+ if (left === right) {
168
+ return true;
169
+ }
170
+ if (!left && !right) {
171
+ return true;
172
+ }
173
+ if (!left || !right) {
174
+ return false;
175
+ }
176
+ return stableProviderTargetRefKey(left) === stableProviderTargetRefKey(right);
177
+ }
178
+ function normalizeAgentGUIProviderTarget(target) {
179
+ const {
180
+ targetId: _targetId,
181
+ agentTargetId: _agentTargetId,
182
+ provider: _provider,
183
+ ref: _ref,
184
+ label: _label,
185
+ badge,
186
+ description,
187
+ iconUrl,
188
+ ownerLabel,
189
+ unavailableReason,
190
+ ...rest
191
+ } = target;
192
+ const targetId = target.targetId.trim();
193
+ const agentTargetId = target.agentTargetId?.trim();
194
+ const label = target.label.trim();
195
+ const kind = typeof target.ref.kind === "string" ? target.ref.kind.trim() : "";
196
+ if (!targetId || !label || !kind || target.ref.provider !== target.provider) {
197
+ return null;
198
+ }
199
+ const normalizedBadge = normalizeAgentGUIProviderTargetBadge(badge);
200
+ return {
201
+ ...rest,
202
+ targetId,
203
+ ...agentTargetId ? { agentTargetId } : {},
204
+ provider: target.provider,
205
+ ref: {
206
+ ...target.ref,
207
+ kind,
208
+ provider: target.provider
209
+ },
210
+ label,
211
+ ...normalizedBadge ? { badge: normalizedBadge } : {},
212
+ ...description?.trim() ? { description: description.trim() } : {},
213
+ ...iconUrl?.trim() ? { iconUrl: iconUrl.trim() } : {},
214
+ ...ownerLabel?.trim() ? { ownerLabel: ownerLabel.trim() } : {},
215
+ ...unavailableReason?.trim() ? { unavailableReason: unavailableReason.trim() } : {}
216
+ };
217
+ }
218
+ function normalizeAgentGUIProviderTargetBadge(badge) {
219
+ const iconUrl = badge?.iconUrl?.trim() ?? "";
220
+ if (!iconUrl) {
221
+ return null;
222
+ }
223
+ const label = badge?.label?.trim() ?? "";
224
+ return {
225
+ iconUrl,
226
+ ...label ? { label } : {}
227
+ };
228
+ }
229
+ function stableProviderTargetRefKey(ref) {
230
+ return JSON.stringify(sortProviderTargetRefValue(ref));
231
+ }
232
+ function sortProviderTargetRefValue(value) {
233
+ if (Array.isArray(value)) {
234
+ return value.map(sortProviderTargetRefValue);
235
+ }
236
+ if (!value || typeof value !== "object") {
237
+ return value;
238
+ }
239
+ return Object.fromEntries(
240
+ Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, entryValue]) => [key, sortProviderTargetRefValue(entryValue)])
241
+ );
242
+ }
9
243
 
10
244
  // workbench/state.ts
11
245
  function createDefaultAgentGuiWorkbenchNodeState(provider = "codex") {
@@ -319,6 +553,16 @@ function isRecord(value) {
319
553
  }
320
554
 
321
555
  export {
556
+ agentGUIDefaultTargetProviders,
557
+ createLocalAgentGUIProviderTarget,
558
+ createDisabledPlaceholderAgentGUIProviderTarget,
559
+ createSharedAgentGUIProviderTarget,
560
+ createLocalAgentGUIProviderTargets,
561
+ localAgentGUIProviderTargetId,
562
+ localAgentGUIAgentTargetId,
563
+ normalizeAgentGUIProviderTargets,
564
+ resolveAgentGUIProviderTarget,
565
+ agentGUIProviderTargetRefsEqual,
322
566
  createDefaultAgentGuiWorkbenchNodeState,
323
567
  normalizeAgentGuiWorkbenchState,
324
568
  projectAgentGuiWorkbenchState,
@@ -329,4 +573,4 @@ export {
329
573
  agentGuiWorkbenchProviderFromInstanceIdOrNull,
330
574
  createAgentGuiWorkbenchNodeStateSource
331
575
  };
332
- //# sourceMappingURL=chunk-KTIHLBCN.js.map
576
+ //# sourceMappingURL=chunk-2I2WRI4F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../providerTargets.ts","../workbench/state.ts"],"sourcesContent":["import type {\n AgentGUIProvider,\n AgentGUIProviderTarget,\n AgentGUIProviderTargetBadge,\n AgentGUIProviderTargetRef\n} from \"./types.ts\";\n\nconst agentGUIProviderTargetStaticLabels: Record<AgentGUIProvider, string> = {\n \"claude-code\": \"Claude Code\",\n codex: \"Codex\",\n cursor: \"Cursor\",\n gemini: \"Gemini\",\n hermes: \"Hermes\",\n nexight: \"Tutti Agent\",\n openclaw: \"OpenClaw\",\n opencode: \"OpenCode\",\n \"tutti-agent\": \"Tutti Agent\"\n};\n\nexport const agentGUIDefaultTargetProviders = [\n \"codex\",\n \"claude-code\",\n \"cursor\",\n \"tutti-agent\",\n \"opencode\",\n \"hermes\",\n \"openclaw\"\n] as const satisfies readonly AgentGUIProvider[];\n\nconst agentGUIDisabledPlaceholderProviders = [\n \"hermes\",\n \"openclaw\"\n] as const satisfies readonly AgentGUIProvider[];\n\nexport function createLocalAgentGUIProviderTarget(\n provider: AgentGUIProvider\n): AgentGUIProviderTarget {\n const targetId = localAgentGUIProviderTargetId(provider);\n const agentTargetId = localAgentGUIAgentTargetId(provider);\n return {\n targetId,\n ...(agentTargetId ? { agentTargetId } : {}),\n provider,\n ref: {\n kind: \"local\",\n provider\n },\n label: agentGUIProviderTargetStaticLabels[provider] ?? provider\n };\n}\n\nexport function createDisabledPlaceholderAgentGUIProviderTarget(\n provider: AgentGUIProvider\n): AgentGUIProviderTarget {\n return {\n ...createLocalAgentGUIProviderTarget(provider),\n disabled: true\n };\n}\n\nexport function createSharedAgentGUIProviderTarget(input: {\n provider: AgentGUIProvider;\n sharedAgentId: string;\n label: string;\n agentTargetId?: string | null;\n badge?: AgentGUIProviderTargetBadge | null;\n ownerLabel?: string | null;\n iconUrl?: string | null;\n unavailableReason?: string | null;\n disabled?: boolean;\n ref?: Record<string, unknown> | null;\n}): AgentGUIProviderTarget {\n const sharedAgentId = input.sharedAgentId.trim();\n const targetId = `shared-agent:${sharedAgentId}`;\n const badge = normalizeAgentGUIProviderTargetBadge(input.badge);\n return {\n targetId,\n ...(input.agentTargetId?.trim()\n ? { agentTargetId: input.agentTargetId.trim() }\n : {}),\n provider: input.provider,\n ref: {\n ...(input.ref ?? {}),\n kind: \"shared-agent\",\n provider: input.provider,\n sharedAgentId\n },\n label: input.label,\n ...(badge ? { badge } : {}),\n ...(input.ownerLabel?.trim()\n ? { ownerLabel: input.ownerLabel.trim() }\n : {}),\n ...(input.iconUrl?.trim() ? { iconUrl: input.iconUrl.trim() } : {}),\n ...(input.unavailableReason?.trim()\n ? { unavailableReason: input.unavailableReason.trim() }\n : {}),\n ...(input.disabled === true ? { disabled: true } : {})\n };\n}\n\nexport function createLocalAgentGUIProviderTargets(\n providers: readonly AgentGUIProvider[] = agentGUIDefaultTargetProviders\n): AgentGUIProviderTarget[] {\n return providers.map((provider) =>\n createLocalAgentGUIProviderTarget(provider)\n );\n}\n\nfunction createStaticAgentGUIProviderTargets(\n providers: readonly AgentGUIProvider[] = agentGUIDefaultTargetProviders,\n options?: { includeDisabledPlaceholders?: boolean }\n): AgentGUIProviderTarget[] {\n const disabledProviders = new Set<AgentGUIProvider>(\n options?.includeDisabledPlaceholders === true\n ? agentGUIDisabledPlaceholderProviders\n : []\n );\n return providers.map((provider) =>\n disabledProviders.has(provider)\n ? createDisabledPlaceholderAgentGUIProviderTarget(provider)\n : createLocalAgentGUIProviderTarget(provider)\n );\n}\n\nexport function localAgentGUIProviderTargetId(\n provider: AgentGUIProvider\n): string {\n return `local:${provider}`;\n}\n\nexport function localAgentGUIAgentTargetId(\n provider: AgentGUIProvider\n): string | null {\n switch (provider) {\n case \"codex\":\n return \"local:codex\";\n case \"claude-code\":\n return \"local:claude-code\";\n case \"tutti-agent\":\n return \"local:tutti-agent\";\n case \"cursor\":\n return \"local:cursor\";\n case \"hermes\":\n return \"local:hermes\";\n case \"nexight\":\n return \"local:nexight\";\n case \"openclaw\":\n return \"local:openclaw\";\n case \"opencode\":\n return \"local:opencode\";\n default:\n return null;\n }\n}\n\nexport function normalizeAgentGUIProviderTargets(\n targets: readonly AgentGUIProviderTarget[] | null | undefined,\n options?: {\n includeDisabledPlaceholders?: boolean;\n useStaticCatalog?: boolean;\n }\n): AgentGUIProviderTarget[] {\n const includeDisabledPlaceholders =\n options?.includeDisabledPlaceholders === true;\n const useStaticCatalog = options?.useStaticCatalog !== false;\n const source = targets && targets.length > 0 ? targets : [];\n const normalizedTargets: AgentGUIProviderTarget[] = [];\n const seenTargetKeys = new Set<string>();\n const seenProviders = new Set<AgentGUIProvider>();\n for (const target of source) {\n const normalized = normalizeAgentGUIProviderTarget(target);\n if (!normalized) {\n continue;\n }\n const dedupeKey = `${normalized.provider}\\u0000${normalized.targetId}`;\n if (seenTargetKeys.has(dedupeKey)) {\n continue;\n }\n seenTargetKeys.add(dedupeKey);\n seenProviders.add(normalized.provider);\n normalizedTargets.push(normalized);\n }\n if (includeDisabledPlaceholders && normalizedTargets.length > 0) {\n for (const provider of agentGUIDisabledPlaceholderProviders) {\n if (seenProviders.has(provider)) {\n continue;\n }\n normalizedTargets.push(\n createDisabledPlaceholderAgentGUIProviderTarget(provider)\n );\n }\n }\n return normalizedTargets.length > 0 || !useStaticCatalog\n ? normalizedTargets\n : createStaticAgentGUIProviderTargets(undefined, {\n includeDisabledPlaceholders\n });\n}\n\nexport function resolveAgentGUIProviderTarget(input: {\n agentTargetId?: string | null;\n defaultProviderTargetId?: string | null;\n provider: AgentGUIProvider;\n providerTargetId?: string | null;\n providerTargets: readonly AgentGUIProviderTarget[];\n useStaticCatalog?: boolean;\n}): AgentGUIProviderTarget | null {\n const targetByAgentTargetId = new Map(\n input.providerTargets.flatMap((target) =>\n target.agentTargetId ? [[target.agentTargetId, target] as const] : []\n )\n );\n const agentTarget = targetByAgentTargetId.get(\n input.agentTargetId?.trim() ?? \"\"\n );\n if (agentTarget) {\n return agentTarget;\n }\n const providerTargets = input.providerTargets.filter(\n (target) => target.provider === input.provider\n );\n const targetById = new Map(\n providerTargets.map((target) => [target.targetId, target])\n );\n return (\n targetById.get(input.providerTargetId?.trim() ?? \"\") ??\n targetById.get(input.defaultProviderTargetId?.trim() ?? \"\") ??\n targetById.get(localAgentGUIProviderTargetId(input.provider)) ??\n providerTargets.find((target) => target.disabled !== true) ??\n providerTargets[0] ??\n (input.useStaticCatalog === false\n ? null\n : createLocalAgentGUIProviderTarget(input.provider))\n );\n}\n\nexport function agentGUIProviderTargetRefsEqual(\n left: AgentGUIProviderTargetRef | null | undefined,\n right: AgentGUIProviderTargetRef | null | undefined\n): boolean {\n if (left === right) {\n return true;\n }\n if (!left && !right) {\n return true;\n }\n if (!left || !right) {\n return false;\n }\n return stableProviderTargetRefKey(left) === stableProviderTargetRefKey(right);\n}\n\nfunction normalizeAgentGUIProviderTarget(\n target: AgentGUIProviderTarget\n): AgentGUIProviderTarget | null {\n const {\n targetId: _targetId,\n agentTargetId: _agentTargetId,\n provider: _provider,\n ref: _ref,\n label: _label,\n badge,\n description,\n iconUrl,\n ownerLabel,\n unavailableReason,\n ...rest\n } = target;\n const targetId = target.targetId.trim();\n const agentTargetId = target.agentTargetId?.trim();\n const label = target.label.trim();\n const kind =\n typeof target.ref.kind === \"string\" ? target.ref.kind.trim() : \"\";\n if (!targetId || !label || !kind || target.ref.provider !== target.provider) {\n return null;\n }\n const normalizedBadge = normalizeAgentGUIProviderTargetBadge(badge);\n return {\n ...rest,\n targetId,\n ...(agentTargetId ? { agentTargetId } : {}),\n provider: target.provider,\n ref: {\n ...target.ref,\n kind,\n provider: target.provider\n },\n label,\n ...(normalizedBadge ? { badge: normalizedBadge } : {}),\n ...(description?.trim() ? { description: description.trim() } : {}),\n ...(iconUrl?.trim() ? { iconUrl: iconUrl.trim() } : {}),\n ...(ownerLabel?.trim() ? { ownerLabel: ownerLabel.trim() } : {}),\n ...(unavailableReason?.trim()\n ? { unavailableReason: unavailableReason.trim() }\n : {})\n };\n}\n\nfunction normalizeAgentGUIProviderTargetBadge(\n badge: AgentGUIProviderTargetBadge | null | undefined\n): AgentGUIProviderTargetBadge | null {\n const iconUrl = badge?.iconUrl?.trim() ?? \"\";\n if (!iconUrl) {\n return null;\n }\n const label = badge?.label?.trim() ?? \"\";\n return {\n iconUrl,\n ...(label ? { label } : {})\n };\n}\n\nfunction stableProviderTargetRefKey(ref: AgentGUIProviderTargetRef): string {\n return JSON.stringify(sortProviderTargetRefValue(ref));\n}\n\nfunction sortProviderTargetRefValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortProviderTargetRefValue);\n }\n if (!value || typeof value !== \"object\") {\n return value;\n }\n return Object.fromEntries(\n Object.entries(value)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entryValue]) => [key, sortProviderTargetRefValue(entryValue)])\n );\n}\n","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\n/**\n * Like {@link agentGuiWorkbenchProviderFromInstanceId} but returns `null`\n * instead of defaulting to `\"codex\"` when the provider cannot be determined\n * yet (e.g. a freshly created session whose instanceId does not encode a\n * provider). Callers that render a provider icon use this so they can show a\n * neutral placeholder during that transient window instead of flashing the\n * wrong provider's icon.\n */\nexport function agentGuiWorkbenchProviderFromInstanceIdOrNull(\n instanceId: string | null | undefined\n): AgentGuiWorkbenchProvider | null {\n const normalized = instanceId?.trim();\n if (!normalized || normalized === \"agent-gui\") {\n return null;\n }\n const [, provider] = normalized.split(\":\", 3);\n return isAgentGuiWorkbenchProvider(provider) ? provider : null;\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":[]}
@@ -12,7 +12,7 @@ import {
12
12
  import {
13
13
  translate,
14
14
  translateInUiLanguage
15
- } from "./chunk-SC3PS7AT.js";
15
+ } from "./chunk-C7K3EFGI.js";
16
16
  import {
17
17
  normalizeAgentTitleText
18
18
  } from "./chunk-GCBDIQDX.js";
@@ -845,4 +845,4 @@ export {
845
845
  resolveWorkspaceAgentActivityStatus,
846
846
  resolveWorkspaceAgentActivityTitle
847
847
  };
848
- //# sourceMappingURL=chunk-DXENDZEF.js.map
848
+ //# sourceMappingURL=chunk-3PKRGSMH.js.map