@tutti-os/agent-gui 0.0.39 → 0.0.40

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 (44) hide show
  1. package/README.md +40 -0
  2. package/dist/{AgentMessageMarkdown-BVeh06AJ.d.ts → AgentMessageMarkdown-GDgLA-im.d.ts} +3 -156
  3. package/dist/agent-conversation/index.d.ts +2 -1
  4. package/dist/agent-conversation/index.js +3 -3
  5. package/dist/agent-message-center/index.js +3 -3
  6. package/dist/chunk-4K22O34C.js +123 -0
  7. package/dist/chunk-4K22O34C.js.map +1 -0
  8. package/dist/{chunk-3AXEEQMV.js → chunk-DO7D7OOL.js} +3 -3
  9. package/dist/{chunk-ZWJBG2JM.js → chunk-EFDGMXTB.js} +62 -7
  10. package/dist/chunk-EFDGMXTB.js.map +1 -0
  11. package/dist/{chunk-C7ZZZXKB.js → chunk-EQ4RSPQE.js} +2 -2
  12. package/dist/{chunk-JNGYJ7GM.js → chunk-EU7RWKHE.js} +2 -2
  13. package/dist/{chunk-IXIGWLQY.js → chunk-F5DYXCY3.js} +1 -1
  14. package/dist/{chunk-IXIGWLQY.js.map → chunk-F5DYXCY3.js.map} +1 -1
  15. package/dist/{chunk-XL2EKJTQ.js → chunk-R7XH3C4Y.js} +3 -3
  16. package/dist/{chunk-B2JKDZSR.js → chunk-TXXWUG2J.js} +1 -1
  17. package/dist/chunk-TXXWUG2J.js.map +1 -0
  18. package/dist/{chunk-46IYJEZX.js → chunk-UUM2GZXH.js} +3 -3
  19. package/dist/{chunk-5HQDW73P.js → chunk-WC34LVH6.js} +2 -2
  20. package/dist/context-mention-palette/index.js +2 -2
  21. package/dist/index.d.ts +124 -102
  22. package/dist/index.js +243 -57
  23. package/dist/index.js.map +1 -1
  24. package/dist/types-xMz0lJWt.d.ts +173 -0
  25. package/dist/workbench/contribution.d.ts +1 -0
  26. package/dist/workbench/contribution.js +5 -4
  27. package/dist/workbench/index.d.ts +1 -0
  28. package/dist/workbench/index.js +5 -4
  29. package/dist/workbench/launch.d.ts +1 -0
  30. package/dist/workbench/launch.js +2 -2
  31. package/dist/workbench/providerCatalog.d.ts +1 -0
  32. package/dist/workbench/state.d.ts +1 -0
  33. package/dist/workbench/state.js +2 -1
  34. package/dist/workbench/types.d.ts +6 -0
  35. package/dist/workbench/types.js +1 -1
  36. package/package.json +12 -12
  37. package/dist/chunk-B2JKDZSR.js.map +0 -1
  38. package/dist/chunk-ZWJBG2JM.js.map +0 -1
  39. /package/dist/{chunk-3AXEEQMV.js.map → chunk-DO7D7OOL.js.map} +0 -0
  40. /package/dist/{chunk-C7ZZZXKB.js.map → chunk-EQ4RSPQE.js.map} +0 -0
  41. /package/dist/{chunk-JNGYJ7GM.js.map → chunk-EU7RWKHE.js.map} +0 -0
  42. /package/dist/{chunk-XL2EKJTQ.js.map → chunk-R7XH3C4Y.js.map} +0 -0
  43. /package/dist/{chunk-46IYJEZX.js.map → chunk-UUM2GZXH.js.map} +0 -0
  44. /package/dist/{chunk-5HQDW73P.js.map → chunk-WC34LVH6.js.map} +0 -0
package/README.md CHANGED
@@ -59,3 +59,43 @@ Run this boundary check after changing AgentGUI data flow:
59
59
  ```sh
60
60
  pnpm check:agent-activity-runtime-boundaries
61
61
  ```
62
+
63
+ ## Provider Targets
64
+
65
+ `provider` remains the real provider identity, such as `codex`,
66
+ `claude-code`, or `nexight`. AgentGUI uses that identity for composer options,
67
+ settings, icons, probes, status, and provider-specific UI policy.
68
+
69
+ Hosts may pass `providerTargets` when a real provider has multiple launch
70
+ targets. A target has display metadata plus an opaque `ref`:
71
+
72
+ ```ts
73
+ export interface AgentGUIProviderTargetRef {
74
+ kind: string;
75
+ provider: AgentGUIProvider;
76
+ [key: string]: unknown;
77
+ }
78
+
79
+ export interface AgentGUIProviderTarget {
80
+ targetId: string;
81
+ provider: AgentGUIProvider;
82
+ ref: AgentGUIProviderTargetRef;
83
+ label: string;
84
+ description?: string;
85
+ ownerLabel?: string;
86
+ disabled?: boolean;
87
+ unavailableReason?: string;
88
+ }
89
+ ```
90
+
91
+ AgentGUI does not interpret `ref.kind` and does not treat `targetId` or `ref`
92
+ as authority. It displays `target.label`, keeps provider logic keyed by the
93
+ real `target.provider`, and passes `providerTargetRef` through activation.
94
+ Trusted host code must re-authenticate the current user/workspace and resolve
95
+ any invocation plan before launching.
96
+
97
+ If `providerTargets` is omitted or empty, AgentGUI creates local targets such as
98
+ `local:codex` and `local:claude-code` from the static provider catalog for
99
+ display/backward compatibility. Those fallback local targets are not persisted
100
+ or sent as `providerTargetRef`; legacy hosts continue to receive only the real
101
+ `provider`.
@@ -1,4 +1,5 @@
1
1
  import { AgentActivityUsage } from '@tutti-os/agent-activity-core';
2
+ import { e as AgentHostAgentSessionCommand, f as AgentHostAgentSessionComposerSettings, h as AgentHostAgentSessionReasoningEffort, i as AgentHostAgentSessionSpeed, g as AgentHostAgentSessionPermissionConfig, j as AgentHostAgentSessionState, a as AgentGUIProvider, A as AgentGUINodeData, b as AgentGUIProviderTarget, m as AgentPromptContentBlock } from './types-xMz0lJWt.js';
2
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-DLnMBMoh.js';
3
4
  import { A as AgentApprovalItemVM, a as AgentAskUserQuestionVM, b as AgentConversationPromptVM, c as AgentConversationVM, W as WorkspaceAgentSessionDetailViewModel } from './agentConversationVM-1QgRwvwZ.js';
4
5
  import { WorkspaceUserProjectService } from '@tutti-os/workspace-user-project/contracts';
@@ -13,134 +14,6 @@ interface AppErrorDescriptor {
13
14
  debugMessage?: string;
14
15
  }
15
16
 
16
- type AgentHostAgentSessionProvider = "claude-code" | "codex" | "nexight" | "gemini" | "hermes" | "openclaw";
17
- type AgentHostAgentSessionPermissionModeSemantic = "ask-before-write" | "accept-edits" | "locked-down" | "auto" | "full-access" | "unconfigurable";
18
- type AgentHostAgentSessionReasoningEffort = "minimal" | "low" | "medium" | "high" | "xhigh" | string;
19
- type AgentHostAgentSessionSpeed = "standard" | "fast" | string;
20
- interface AgentHostAgentSessionPermissionModeOption {
21
- id: string;
22
- label?: string;
23
- description?: string;
24
- semantic: AgentHostAgentSessionPermissionModeSemantic;
25
- }
26
- interface AgentHostAgentSessionPermissionConfig {
27
- configurable: boolean;
28
- defaultValue?: string | null;
29
- modes: AgentHostAgentSessionPermissionModeOption[];
30
- }
31
- interface AgentHostAgentSessionComposerSettings {
32
- model?: string | null;
33
- reasoningEffort?: AgentHostAgentSessionReasoningEffort | null;
34
- speed?: AgentHostAgentSessionSpeed | null;
35
- planMode?: boolean;
36
- browserUse?: boolean;
37
- computerUse?: boolean;
38
- permissionModeId?: string | null;
39
- }
40
- interface AgentHostAgentSession {
41
- workspaceId: string;
42
- agentSessionId: string;
43
- provider: AgentHostAgentSessionProvider;
44
- providerSessionId: string;
45
- resumable?: boolean;
46
- cwd?: string;
47
- status: "ready" | "working" | "canceled" | "failed" | "completed" | string;
48
- title?: string;
49
- pinnedAtUnixMs?: number | null;
50
- visible?: boolean;
51
- permissionModeId?: string;
52
- permissionConfig?: AgentHostAgentSessionPermissionConfig;
53
- settings?: AgentHostAgentSessionComposerSettings;
54
- createdAtUnixMs: number;
55
- updatedAtUnixMs: number;
56
- }
57
- interface AgentHostAgentSessionInteractivePrompt {
58
- kind: string;
59
- requestId?: string;
60
- toolName?: string;
61
- status?: string;
62
- input?: Record<string, unknown>;
63
- output?: Record<string, unknown>;
64
- error?: Record<string, unknown>;
65
- metadata?: Record<string, unknown>;
66
- }
67
- interface AgentHostAgentSessionState {
68
- workspaceId: string;
69
- agentSessionId: string;
70
- provider: AgentHostAgentSessionProvider;
71
- providerSessionId?: string;
72
- resumable?: boolean;
73
- status: AgentHostAgentSession["status"];
74
- turnLifecycle?: AgentHostAgentActivityTurnLifecycle | null;
75
- submitAvailability?: AgentHostAgentActivitySubmitAvailability | null;
76
- permissionModeId?: string;
77
- permissionConfig?: AgentHostAgentSessionPermissionConfig;
78
- settings?: AgentHostAgentSessionComposerSettings;
79
- authState?: string;
80
- runtimeContext?: Record<string, unknown>;
81
- pinnedAtUnixMs?: number | null;
82
- pendingInteractive?: AgentHostAgentSessionInteractivePrompt | null;
83
- updatedAtUnixMs: number;
84
- }
85
- interface AgentHostAgentActivityCompletedCommand {
86
- kind: string;
87
- status: string;
88
- }
89
- interface AgentHostAgentActivityTurnLifecycle {
90
- activeTurnId: string | null;
91
- phase: string;
92
- settling?: boolean;
93
- outcome?: string | null;
94
- completedCommand?: AgentHostAgentActivityCompletedCommand | null;
95
- }
96
- interface AgentHostAgentActivitySubmitAvailability {
97
- state: string;
98
- reason?: string;
99
- }
100
- type AgentHostAgentSessionActivationMode = "new" | "existing";
101
- type AgentHostAgentSessionActivationStatus = "attached" | "already_attached" | "failed";
102
- interface AgentHostActivateAgentSessionResult {
103
- session: AgentHostAgentSession;
104
- activation: {
105
- mode: AgentHostAgentSessionActivationMode;
106
- status: AgentHostAgentSessionActivationStatus;
107
- };
108
- error?: {
109
- code: string;
110
- message: string;
111
- debugMessage?: string;
112
- };
113
- }
114
- interface AgentHostUnactivateAgentSessionResult {
115
- agentSessionId: string;
116
- buffered: boolean;
117
- }
118
- interface AgentPromptContentBlock {
119
- type: "text" | "image" | "file" | "skill" | "mention";
120
- text?: string;
121
- mimeType?: "image/png" | "image/jpeg" | "image/webp" | string;
122
- data?: string;
123
- url?: string;
124
- attachmentId?: string;
125
- name?: string;
126
- path?: string;
127
- uri?: string;
128
- hostPath?: string;
129
- uploadStatus?: string;
130
- assetId?: string;
131
- kind?: string;
132
- sizeBytes?: number;
133
- }
134
- interface AgentHostUpdateAgentSessionSettingsResult {
135
- agentSessionId: string;
136
- settings: AgentHostAgentSessionComposerSettings;
137
- }
138
- interface AgentHostAgentSessionCommand {
139
- name: string;
140
- description?: string;
141
- inputHint?: string;
142
- }
143
-
144
17
  type AgentAvailabilityStatus = "available" | "unavailable" | "unknown";
145
18
  type AgentQuotaType = "session" | "weekly" | "monthly" | "daily" | "model" | "cost";
146
19
  interface AgentAvailabilityCheck {
@@ -481,33 +354,6 @@ interface AgentHostRuntimeApi {
481
354
  workspaceAgentProbes?: AgentHostWorkspaceAgentProbesApi;
482
355
  }
483
356
 
484
- declare const AGENT_PROVIDERS: readonly ["claude-code", "codex", "nexight", "opencode", "gemini", "openclaw", "hermes"];
485
- type AgentProvider = (typeof AGENT_PROVIDERS)[number];
486
-
487
- interface AgentGUINodeData {
488
- provider: AgentGUIProvider;
489
- lastActiveAgentSessionId: string | null;
490
- lastActiveConversationTitle?: string | null;
491
- conversationCount?: number | null;
492
- conversationRailWidthPx?: number | null;
493
- conversationRailCollapsed?: boolean | null;
494
- composerOverrides?: AgentHostAgentSessionComposerSettings | null;
495
- composerOverridesByProvider?: Partial<Record<AgentGUIProvider, AgentHostAgentSessionComposerSettings | null>> | null;
496
- }
497
- type AgentGUIProvider = Extract<AgentProvider, "claude-code" | "codex" | "nexight" | "gemini" | "hermes" | "openclaw">;
498
- interface Size {
499
- width: number;
500
- height: number;
501
- }
502
- interface Point {
503
- x: number;
504
- y: number;
505
- }
506
- interface NodeFrame {
507
- position: Point;
508
- size: Size;
509
- }
510
-
511
357
  type AgentSessionCommand = AgentHostAgentSessionCommand;
512
358
  type AgentSessionComposerSettings = AgentHostAgentSessionComposerSettings;
513
359
  type AgentSessionPermissionConfig = AgentHostAgentSessionPermissionConfig;
@@ -679,6 +525,7 @@ interface AgentGUINodeViewModel {
679
525
  workspacePath?: string | null;
680
526
  currentUserId?: string | null;
681
527
  data: AgentGUINodeData;
528
+ selectedProviderTarget: AgentGUIProviderTarget;
682
529
  conversations: AgentGUIConversationSummary[];
683
530
  userProjects: AgentGUIConversationUserProject[];
684
531
  activeConversation: AgentGUIConversationSummary | null;
@@ -729,4 +576,4 @@ interface AgentMessageMarkdownWorkspaceAppIcon {
729
576
  workspaceId?: string | null;
730
577
  }
731
578
 
732
- export type { AgentGUINodeData as A, NodeFrame as N, PersistWriteResult as P, ReadWorkspaceAgentReadStateInput as R, WorkspaceAgentReadStateSnapshot as W, AgentGUINodeViewModel as a, AgentGUIProviderSkillOption as b, AgentHostActivateAgentSessionResult as c, AgentHostAgentSessionComposerSettings as d, AgentHostAgentSessionState as e, AgentHostApi as f, AgentHostInputApi as g, AgentHostRuntimeApi as h, AgentHostSelectFilesInput as i, AgentHostUnactivateAgentSessionResult as j, AgentHostUpdateAgentSessionSettingsResult as k, AgentMessageMarkdownWorkspaceAppIcon as l, AgentProbeProvider as m, AgentProbeSnapshot as n, AgentProvider as o, AgentProviderProbeListInput as p, AgentProviderProbeListResult as q, AgentUsageQuota as r, AgentUsageSnapshot as s, Point as t, WriteWorkspaceAgentReadStateInput as u };
579
+ export type { AgentGUINodeViewModel as A, PersistWriteResult as P, ReadWorkspaceAgentReadStateInput as R, WorkspaceAgentReadStateSnapshot as W, AgentGUIProviderSkillOption as a, AgentHostApi as b, AgentHostInputApi as c, AgentHostRuntimeApi as d, AgentHostSelectFilesInput as e, AgentMessageMarkdownWorkspaceAppIcon as f, AgentProbeProvider as g, AgentProbeSnapshot as h, AgentProviderProbeListInput as i, AgentProviderProbeListResult as j, AgentUsageQuota as k, AgentUsageSnapshot as l, WriteWorkspaceAgentReadStateInput as m };
@@ -1,12 +1,13 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode, JSX } from 'react';
3
3
  import { W as WorkspaceLinkAction } from '../workspaceLinkActions-C6POH38D.js';
4
- import { b as AgentGUIProviderSkillOption, l as AgentMessageMarkdownWorkspaceAppIcon } from '../AgentMessageMarkdown-BVeh06AJ.js';
4
+ import { a as AgentGUIProviderSkillOption, f as AgentMessageMarkdownWorkspaceAppIcon } from '../AgentMessageMarkdown-GDgLA-im.js';
5
5
  import { c as AgentConversationVM, W as WorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-1QgRwvwZ.js';
6
6
  export { B as BuildWorkspaceAgentSessionDetailInput, d as buildWorkspaceAgentSessionDetailViewModel } from '../agentConversationVM-1QgRwvwZ.js';
7
7
  export { W as WorkspaceAgentActivityCard, n as WorkspaceAgentActivitySession, q as WorkspaceAgentActivityTimelineItem } from '../workspaceAgentActivityListViewModel-DLnMBMoh.js';
8
8
  import '@tutti-os/workspace-issue-manager/core';
9
9
  import '@tutti-os/agent-activity-core';
10
+ import '../types-xMz0lJWt.js';
10
11
  import '@tutti-os/workspace-user-project/contracts';
11
12
 
12
13
  interface AgentConversationFlowProps {
@@ -6,11 +6,11 @@ import {
6
6
  projectAgentConversationVM,
7
7
  reconcileProjectedAgentConversationVM,
8
8
  useProjectedAgentConversation
9
- } from "../chunk-3AXEEQMV.js";
10
- import "../chunk-5HQDW73P.js";
9
+ } from "../chunk-DO7D7OOL.js";
10
+ import "../chunk-WC34LVH6.js";
11
11
  import "../chunk-RE3AHBX6.js";
12
12
  import "../chunk-Y35GDLP2.js";
13
- import "../chunk-B2JKDZSR.js";
13
+ import "../chunk-TXXWUG2J.js";
14
14
  import "../chunk-TYGL25EL.js";
15
15
  import {
16
16
  translate
@@ -4,7 +4,7 @@ import {
4
4
  formatAgentSessionMentionText,
5
5
  getPromptToolDetails,
6
6
  isPromptRequestIdTitle
7
- } from "../chunk-46IYJEZX.js";
7
+ } from "../chunk-UUM2GZXH.js";
8
8
  import {
9
9
  PLAN_IMPLEMENTATION_ACTION_IMPLEMENT,
10
10
  PLAN_IMPLEMENTATION_PROMPT,
@@ -17,7 +17,7 @@ import {
17
17
  cn,
18
18
  extractAgentMcpToolTarget,
19
19
  normalizeAskUserQuestions
20
- } from "../chunk-5HQDW73P.js";
20
+ } from "../chunk-WC34LVH6.js";
21
21
  import {
22
22
  managedAgentRoundedIconUrl,
23
23
  userAvatarPlaceholderUrl,
@@ -27,7 +27,7 @@ import "../chunk-MTFSQWZ6.js";
27
27
  import {
28
28
  resolveWorkspaceAgentSessionSortTimeUnixMs
29
29
  } from "../chunk-IBIMGLCD.js";
30
- import "../chunk-B2JKDZSR.js";
30
+ import "../chunk-TXXWUG2J.js";
31
31
  import {
32
32
  workspaceAgentProviderLabel
33
33
  } from "../chunk-TYGL25EL.js";
@@ -0,0 +1,123 @@
1
+ // providerTargets.ts
2
+ var agentGUIProviderTargetFallbackLabels = {
3
+ "claude-code": "Claude Code",
4
+ codex: "Codex",
5
+ gemini: "Gemini",
6
+ hermes: "Hermes",
7
+ nexight: "Nexight",
8
+ openclaw: "OpenClaw"
9
+ };
10
+ var agentGUIDefaultTargetProviders = [
11
+ "codex",
12
+ "claude-code",
13
+ "nexight",
14
+ "hermes",
15
+ "gemini",
16
+ "openclaw"
17
+ ];
18
+ function createLocalAgentGUIProviderTarget(provider) {
19
+ return {
20
+ targetId: localAgentGUIProviderTargetId(provider),
21
+ provider,
22
+ ref: {
23
+ kind: "local",
24
+ provider
25
+ },
26
+ label: agentGUIProviderTargetFallbackLabels[provider] ?? provider
27
+ };
28
+ }
29
+ function createLocalAgentGUIProviderTargets(providers = agentGUIDefaultTargetProviders) {
30
+ return providers.map(
31
+ (provider) => createLocalAgentGUIProviderTarget(provider)
32
+ );
33
+ }
34
+ function localAgentGUIProviderTargetId(provider) {
35
+ return `local:${provider}`;
36
+ }
37
+ function normalizeAgentGUIProviderTargets(targets, options) {
38
+ const fallbackToLocal = options?.fallbackToLocal !== false;
39
+ const source = targets && targets.length > 0 ? targets : [];
40
+ const normalizedTargets = [];
41
+ const seenTargetKeys = /* @__PURE__ */ new Set();
42
+ for (const target of source) {
43
+ const normalized = normalizeAgentGUIProviderTarget(target);
44
+ if (!normalized) {
45
+ continue;
46
+ }
47
+ const dedupeKey = `${normalized.provider}\0${normalized.targetId}`;
48
+ if (seenTargetKeys.has(dedupeKey)) {
49
+ continue;
50
+ }
51
+ seenTargetKeys.add(dedupeKey);
52
+ normalizedTargets.push(normalized);
53
+ }
54
+ return normalizedTargets.length > 0 || !fallbackToLocal ? normalizedTargets : createLocalAgentGUIProviderTargets();
55
+ }
56
+ function resolveAgentGUIProviderTarget(input) {
57
+ const providerTargets = input.providerTargets.filter(
58
+ (target) => target.provider === input.provider
59
+ );
60
+ const targetById = new Map(
61
+ providerTargets.map((target) => [target.targetId, target])
62
+ );
63
+ return targetById.get(input.providerTargetId?.trim() ?? "") ?? targetById.get(input.defaultProviderTargetId?.trim() ?? "") ?? targetById.get(localAgentGUIProviderTargetId(input.provider)) ?? providerTargets.find((target) => target.disabled !== true) ?? providerTargets[0] ?? createLocalAgentGUIProviderTarget(input.provider);
64
+ }
65
+ function agentGUIProviderTargetRefsEqual(left, right) {
66
+ if (left === right) {
67
+ return true;
68
+ }
69
+ if (!left && !right) {
70
+ return true;
71
+ }
72
+ if (!left || !right) {
73
+ return false;
74
+ }
75
+ return stableProviderTargetRefKey(left) === stableProviderTargetRefKey(right);
76
+ }
77
+ function normalizeAgentGUIProviderTarget(target) {
78
+ const targetId = target.targetId.trim();
79
+ const label = target.label.trim();
80
+ const kind = typeof target.ref.kind === "string" ? target.ref.kind.trim() : "";
81
+ if (!targetId || !label || !kind || target.ref.provider !== target.provider) {
82
+ return null;
83
+ }
84
+ return {
85
+ ...target,
86
+ targetId,
87
+ provider: target.provider,
88
+ ref: {
89
+ ...target.ref,
90
+ kind,
91
+ provider: target.provider
92
+ },
93
+ label,
94
+ ...target.description?.trim() ? { description: target.description.trim() } : {},
95
+ ...target.ownerLabel?.trim() ? { ownerLabel: target.ownerLabel.trim() } : {},
96
+ ...target.unavailableReason?.trim() ? { unavailableReason: target.unavailableReason.trim() } : {}
97
+ };
98
+ }
99
+ function stableProviderTargetRefKey(ref) {
100
+ return JSON.stringify(sortProviderTargetRefValue(ref));
101
+ }
102
+ function sortProviderTargetRefValue(value) {
103
+ if (Array.isArray(value)) {
104
+ return value.map(sortProviderTargetRefValue);
105
+ }
106
+ if (!value || typeof value !== "object") {
107
+ return value;
108
+ }
109
+ return Object.fromEntries(
110
+ Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, entryValue]) => [key, sortProviderTargetRefValue(entryValue)])
111
+ );
112
+ }
113
+
114
+ export {
115
+ agentGUIDefaultTargetProviders,
116
+ createLocalAgentGUIProviderTarget,
117
+ createLocalAgentGUIProviderTargets,
118
+ localAgentGUIProviderTargetId,
119
+ normalizeAgentGUIProviderTargets,
120
+ resolveAgentGUIProviderTarget,
121
+ agentGUIProviderTargetRefsEqual
122
+ };
123
+ //# sourceMappingURL=chunk-4K22O34C.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../providerTargets.ts"],"sourcesContent":["import type {\n AgentGUIProvider,\n AgentGUIProviderTarget,\n AgentGUIProviderTargetRef\n} from \"./types.ts\";\n\nconst agentGUIProviderTargetFallbackLabels: Record<AgentGUIProvider, string> = {\n \"claude-code\": \"Claude Code\",\n codex: \"Codex\",\n gemini: \"Gemini\",\n hermes: \"Hermes\",\n nexight: \"Nexight\",\n openclaw: \"OpenClaw\"\n};\n\nexport const agentGUIDefaultTargetProviders = [\n \"codex\",\n \"claude-code\",\n \"nexight\",\n \"hermes\",\n \"gemini\",\n \"openclaw\"\n] as const satisfies readonly AgentGUIProvider[];\n\nexport function createLocalAgentGUIProviderTarget(\n provider: AgentGUIProvider\n): AgentGUIProviderTarget {\n return {\n targetId: localAgentGUIProviderTargetId(provider),\n provider,\n ref: {\n kind: \"local\",\n provider\n },\n label: agentGUIProviderTargetFallbackLabels[provider] ?? provider\n };\n}\n\nexport function createLocalAgentGUIProviderTargets(\n providers: readonly AgentGUIProvider[] = agentGUIDefaultTargetProviders\n): AgentGUIProviderTarget[] {\n return providers.map((provider) =>\n createLocalAgentGUIProviderTarget(provider)\n );\n}\n\nexport function localAgentGUIProviderTargetId(\n provider: AgentGUIProvider\n): string {\n return `local:${provider}`;\n}\n\nexport function normalizeAgentGUIProviderTargets(\n targets: readonly AgentGUIProviderTarget[] | null | undefined,\n options?: { fallbackToLocal?: boolean }\n): AgentGUIProviderTarget[] {\n const fallbackToLocal = options?.fallbackToLocal !== false;\n const source = targets && targets.length > 0 ? targets : [];\n const normalizedTargets: AgentGUIProviderTarget[] = [];\n const seenTargetKeys = new Set<string>();\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 normalizedTargets.push(normalized);\n }\n return normalizedTargets.length > 0 || !fallbackToLocal\n ? normalizedTargets\n : createLocalAgentGUIProviderTargets();\n}\n\nexport function resolveAgentGUIProviderTarget(input: {\n defaultProviderTargetId?: string | null;\n provider: AgentGUIProvider;\n providerTargetId?: string | null;\n providerTargets: readonly AgentGUIProviderTarget[];\n}): AgentGUIProviderTarget {\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 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 targetId = target.targetId.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 return {\n ...target,\n targetId,\n provider: target.provider,\n ref: {\n ...target.ref,\n kind,\n provider: target.provider\n },\n label,\n ...(target.description?.trim()\n ? { description: target.description.trim() }\n : {}),\n ...(target.ownerLabel?.trim()\n ? { ownerLabel: target.ownerLabel.trim() }\n : {}),\n ...(target.unavailableReason?.trim()\n ? { unavailableReason: target.unavailableReason.trim() }\n : {})\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"],"mappings":"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","names":[]}
@@ -11,7 +11,7 @@ import {
11
11
  resolveWorkspaceFileLinkAction,
12
12
  resolveWorkspaceFilePathCandidate,
13
13
  resolveWorkspaceLinkAction
14
- } from "./chunk-5HQDW73P.js";
14
+ } from "./chunk-WC34LVH6.js";
15
15
  import {
16
16
  attrsToMentionItem,
17
17
  createAgentFileMentionExtension,
@@ -28,7 +28,7 @@ import {
28
28
  import {
29
29
  getOptionalAgentActivityRuntime,
30
30
  useOptionalAgentHostApi
31
- } from "./chunk-B2JKDZSR.js";
31
+ } from "./chunk-TXXWUG2J.js";
32
32
  import {
33
33
  workspaceAgentProviderLabel
34
34
  } from "./chunk-TYGL25EL.js";
@@ -12732,4 +12732,4 @@ export {
12732
12732
  AgentConversationFlow,
12733
12733
  useProjectedAgentConversation
12734
12734
  };
12735
- //# sourceMappingURL=chunk-3AXEEQMV.js.map
12735
+ //# sourceMappingURL=chunk-DO7D7OOL.js.map
@@ -1,7 +1,11 @@
1
1
  import {
2
2
  agentGuiWorkbenchProviders,
3
+ isAgentGuiWorkbenchProvider,
3
4
  normalizeAgentGuiWorkbenchProvider
4
5
  } from "./chunk-22L4VWUR.js";
6
+ import {
7
+ agentGUIProviderTargetRefsEqual
8
+ } from "./chunk-4K22O34C.js";
5
9
 
6
10
  // workbench/state.ts
7
11
  function createDefaultAgentGuiWorkbenchNodeState(provider = "codex") {
@@ -13,13 +17,21 @@ function createDefaultAgentGuiWorkbenchNodeState(provider = "codex") {
13
17
  conversationRailWidthPx: null,
14
18
  lastActiveAgentSessionId: null,
15
19
  lastActiveConversationTitle: null,
16
- provider
20
+ provider,
21
+ providerTargetId: null,
22
+ providerTargetRef: null
17
23
  };
18
24
  }
19
25
  function normalizeAgentGuiWorkbenchState(state) {
20
26
  if (!isRecord(state)) {
21
27
  return createDefaultAgentGuiWorkbenchState();
22
28
  }
29
+ const providerTargetId = normalizeOptionalNonEmptyString(
30
+ state.providerTargetId
31
+ );
32
+ const providerTargetRef = normalizeAgentGuiProviderTargetRef(
33
+ state.providerTargetRef
34
+ );
23
35
  return {
24
36
  composerOverrides: normalizeAgentGuiWorkbenchComposerOverrides(
25
37
  state.composerOverrides
@@ -31,10 +43,19 @@ function normalizeAgentGuiWorkbenchState(state) {
31
43
  conversationRailWidthPx: normalizeOptionalPositiveNumber(
32
44
  state.conversationRailWidthPx
33
45
  ),
34
- lastActiveAgentSessionId: typeof state.lastActiveAgentSessionId === "string" ? state.lastActiveAgentSessionId : null
46
+ lastActiveAgentSessionId: typeof state.lastActiveAgentSessionId === "string" ? state.lastActiveAgentSessionId : null,
47
+ ...providerTargetId ? { providerTargetId } : {},
48
+ ...providerTargetRef ? { providerTargetRef } : {}
35
49
  };
36
50
  }
37
51
  function projectAgentGuiWorkbenchState(state) {
52
+ const providerTargetId = normalizeOptionalNonEmptyString(
53
+ state.providerTargetId
54
+ );
55
+ const providerTargetRef = normalizeAgentGuiProviderTargetRef(
56
+ state.providerTargetRef,
57
+ state.provider
58
+ );
38
59
  return {
39
60
  composerOverrides: normalizeAgentGuiWorkbenchComposerOverrides(
40
61
  state.composerOverrides
@@ -46,14 +67,19 @@ function projectAgentGuiWorkbenchState(state) {
46
67
  conversationRailWidthPx: normalizeOptionalPositiveNumber(
47
68
  state.conversationRailWidthPx
48
69
  ),
49
- lastActiveAgentSessionId: state.lastActiveAgentSessionId ?? null
70
+ lastActiveAgentSessionId: state.lastActiveAgentSessionId ?? null,
71
+ ...providerTargetId ? { providerTargetId } : {},
72
+ ...providerTargetRef ? { providerTargetRef } : {}
50
73
  };
51
74
  }
52
75
  function areAgentGuiWorkbenchStatesEqual(left, right) {
53
76
  return composerOverridesEqual(left.composerOverrides, right.composerOverrides) && composerOverridesByProviderEqual(
54
77
  left.composerOverridesByProvider,
55
78
  right.composerOverridesByProvider
56
- ) && left.conversationRailCollapsed === right.conversationRailCollapsed && left.conversationRailWidthPx === right.conversationRailWidthPx && left.lastActiveAgentSessionId === right.lastActiveAgentSessionId;
79
+ ) && left.conversationRailCollapsed === right.conversationRailCollapsed && left.conversationRailWidthPx === right.conversationRailWidthPx && left.lastActiveAgentSessionId === right.lastActiveAgentSessionId && (left.providerTargetId ?? null) === (right.providerTargetId ?? null) && agentGUIProviderTargetRefsEqual(
80
+ left.providerTargetRef,
81
+ right.providerTargetRef
82
+ );
57
83
  }
58
84
  function normalizeAgentGuiWorkbenchNodeState(state, fallbackProvider = "codex") {
59
85
  const provider = normalizeAgentGuiWorkbenchProvider(
@@ -77,14 +103,22 @@ function normalizeAgentGuiWorkbenchNodeState(state, fallbackProvider = "codex")
77
103
  ),
78
104
  lastActiveAgentSessionId: typeof state?.lastActiveAgentSessionId === "string" ? state.lastActiveAgentSessionId : null,
79
105
  lastActiveConversationTitle: typeof state?.lastActiveConversationTitle === "string" ? state.lastActiveConversationTitle : null,
80
- provider
106
+ provider,
107
+ providerTargetId: normalizeOptionalNonEmptyString(state?.providerTargetId),
108
+ providerTargetRef: normalizeAgentGuiProviderTargetRef(
109
+ state?.providerTargetRef,
110
+ provider
111
+ )
81
112
  };
82
113
  }
83
114
  function areAgentGuiWorkbenchNodeStatesEqual(left, right) {
84
115
  return composerOverridesEqual(left.composerOverrides, right.composerOverrides) && composerOverridesByProviderEqual(
85
116
  left.composerOverridesByProvider,
86
117
  right.composerOverridesByProvider
87
- ) && left.conversationCount === right.conversationCount && left.conversationRailCollapsed === right.conversationRailCollapsed && left.conversationRailWidthPx === right.conversationRailWidthPx && left.lastActiveAgentSessionId === right.lastActiveAgentSessionId && left.lastActiveConversationTitle === right.lastActiveConversationTitle && left.provider === right.provider;
118
+ ) && left.conversationCount === right.conversationCount && left.conversationRailCollapsed === right.conversationRailCollapsed && left.conversationRailWidthPx === right.conversationRailWidthPx && left.lastActiveAgentSessionId === right.lastActiveAgentSessionId && left.lastActiveConversationTitle === right.lastActiveConversationTitle && left.provider === right.provider && (left.providerTargetId ?? null) === (right.providerTargetId ?? null) && agentGUIProviderTargetRefsEqual(
119
+ left.providerTargetRef,
120
+ right.providerTargetRef
121
+ );
88
122
  }
89
123
  function agentGuiWorkbenchProviderFromInstanceId(instanceId) {
90
124
  const normalized = instanceId?.trim();
@@ -198,6 +232,27 @@ function createDefaultAgentGuiWorkbenchState() {
198
232
  lastActiveAgentSessionId: null
199
233
  };
200
234
  }
235
+ function normalizeOptionalNonEmptyString(value) {
236
+ return typeof value === "string" && value.trim() ? value.trim() : null;
237
+ }
238
+ function normalizeAgentGuiProviderTargetRef(value, expectedProvider) {
239
+ if (!isRecord(value)) {
240
+ return null;
241
+ }
242
+ const kind = normalizeOptionalNonEmptyString(value.kind);
243
+ const provider = value.provider;
244
+ if (!kind || !isAgentGuiWorkbenchProvider(provider)) {
245
+ return null;
246
+ }
247
+ if (expectedProvider && provider !== expectedProvider) {
248
+ return null;
249
+ }
250
+ return {
251
+ ...value,
252
+ kind,
253
+ provider
254
+ };
255
+ }
201
256
  function normalizeAgentGuiWorkbenchComposerOverrides(value) {
202
257
  if (!isRecord(value)) {
203
258
  return null;
@@ -263,4 +318,4 @@ export {
263
318
  agentGuiWorkbenchProviderFromInstanceId,
264
319
  createAgentGuiWorkbenchNodeStateSource
265
320
  };
266
- //# sourceMappingURL=chunk-ZWJBG2JM.js.map
321
+ //# sourceMappingURL=chunk-EFDGMXTB.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 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 composerOverrides: 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 providerTargetId = normalizeOptionalNonEmptyString(\n state.providerTargetId\n );\n const providerTargetRef = normalizeAgentGuiProviderTargetRef(\n state.providerTargetRef\n );\n return {\n composerOverrides: normalizeAgentGuiWorkbenchComposerOverrides(\n state.composerOverrides\n ),\n composerOverridesByProvider:\n normalizeAgentGuiWorkbenchComposerOverridesByProvider(\n state.composerOverridesByProvider\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 ...(providerTargetId ? { providerTargetId } : {}),\n ...(providerTargetRef ? { providerTargetRef } : {})\n };\n}\n\nexport function projectAgentGuiWorkbenchState(\n state: AgentGuiWorkbenchNodeState\n): AgentGuiWorkbenchState {\n const providerTargetId = normalizeOptionalNonEmptyString(\n state.providerTargetId\n );\n const providerTargetRef = normalizeAgentGuiProviderTargetRef(\n state.providerTargetRef,\n state.provider\n );\n return {\n composerOverrides: normalizeAgentGuiWorkbenchComposerOverrides(\n state.composerOverrides\n ),\n composerOverridesByProvider:\n normalizeAgentGuiWorkbenchComposerOverridesByProvider(\n state.composerOverridesByProvider\n ),\n conversationRailCollapsed: state.conversationRailCollapsed === true,\n conversationRailWidthPx: normalizeOptionalPositiveNumber(\n state.conversationRailWidthPx\n ),\n lastActiveAgentSessionId: state.lastActiveAgentSessionId ?? null,\n ...(providerTargetId ? { providerTargetId } : {}),\n ...(providerTargetRef ? { providerTargetRef } : {})\n };\n}\n\nexport function areAgentGuiWorkbenchStatesEqual(\n left: AgentGuiWorkbenchState,\n right: AgentGuiWorkbenchState\n): boolean {\n return (\n composerOverridesEqual(left.composerOverrides, right.composerOverrides) &&\n composerOverridesByProviderEqual(\n left.composerOverridesByProvider,\n right.composerOverridesByProvider\n ) &&\n left.conversationRailCollapsed === right.conversationRailCollapsed &&\n left.conversationRailWidthPx === right.conversationRailWidthPx &&\n left.lastActiveAgentSessionId === right.lastActiveAgentSessionId &&\n (left.providerTargetId ?? null) === (right.providerTargetId ?? null) &&\n agentGUIProviderTargetRefsEqual(\n left.providerTargetRef,\n right.providerTargetRef\n )\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 composerOverrides: normalizeAgentGuiWorkbenchComposerOverrides(\n state?.composerOverrides\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 composerOverridesEqual(left.composerOverrides, right.composerOverrides) &&\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.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 if (\n request.nodeId &&\n typeof request.state.lastActiveConversationTitle === \"string\"\n ) {\n next.lastActiveConversationTitle =\n request.state.lastActiveConversationTitle;\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 (\n areAgentGuiWorkbenchStatesEqual(left, right) &&\n (left.lastActiveConversationTitle ?? null) ===\n (right.lastActiveConversationTitle ?? null)\n );\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 composerOverrides: null,\n composerOverridesByProvider: null,\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 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 isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n"],"mappings":"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","names":[]}
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-RE3AHBX6.js";
10
10
  import {
11
11
  getOptionalAgentHostApi
12
- } from "./chunk-B2JKDZSR.js";
12
+ } from "./chunk-TXXWUG2J.js";
13
13
  import {
14
14
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
15
15
  } from "./chunk-JM24HADP.js";
@@ -2123,4 +2123,4 @@ export {
2123
2123
  AgentFileMentionPalette,
2124
2124
  AgentContextMentionPalette
2125
2125
  };
2126
- //# sourceMappingURL=chunk-C7ZZZXKB.js.map
2126
+ //# sourceMappingURL=chunk-EQ4RSPQE.js.map