@tutti-os/agent-gui 0.0.13 → 0.0.15

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 (64) hide show
  1. package/dist/agent-conversation/index.d.ts +1 -1
  2. package/dist/agent-conversation/index.js +4 -4
  3. package/dist/agent-message-center/index.d.ts +1 -1
  4. package/dist/agent-message-center/index.js +4 -4
  5. package/dist/agentFileMentionExtension-CM1c9bqk.d.ts +86 -0
  6. package/dist/app/renderer/agentactivity.css +33 -9
  7. package/dist/{chunk-WME2V26J.js → chunk-2CA4NPP3.js} +15 -33
  8. package/dist/chunk-2CA4NPP3.js.map +1 -0
  9. package/dist/{chunk-ZO3SZCIX.js → chunk-7CBJJNX6.js} +5 -2
  10. package/dist/chunk-7CBJJNX6.js.map +1 -0
  11. package/dist/{chunk-ASAZDEQE.js → chunk-EK5RDKG7.js} +54 -14
  12. package/dist/chunk-EK5RDKG7.js.map +1 -0
  13. package/dist/{chunk-GZHQPPK2.js → chunk-H4HT3FE6.js} +113 -36
  14. package/dist/chunk-H4HT3FE6.js.map +1 -0
  15. package/dist/{chunk-YXSO4ITT.js → chunk-HIREVEZM.js} +1 -1
  16. package/dist/chunk-HIREVEZM.js.map +1 -0
  17. package/dist/{chunk-VDNMTW2E.js → chunk-IXIGWLQY.js} +1 -1
  18. package/dist/chunk-IXIGWLQY.js.map +1 -0
  19. package/dist/{chunk-FSTZDNRM.js → chunk-KJPMZ7G5.js} +243 -167
  20. package/dist/chunk-KJPMZ7G5.js.map +1 -0
  21. package/dist/{chunk-GEXHKJK5.js → chunk-MUZMBEFO.js} +35 -17
  22. package/dist/chunk-MUZMBEFO.js.map +1 -0
  23. package/dist/{chunk-HSXDSFKB.js → chunk-OFGXNXYT.js} +2 -2
  24. package/dist/{chunk-3YZX5EUC.js → chunk-SVOGXWFJ.js} +53 -17
  25. package/dist/{chunk-3YZX5EUC.js.map → chunk-SVOGXWFJ.js.map} +1 -1
  26. package/dist/{chunk-MU2LODEV.js → chunk-U4F3COKL.js} +160 -10
  27. package/dist/chunk-U4F3COKL.js.map +1 -0
  28. package/dist/{chunk-KEKPOVQD.js → chunk-XHQGCP7A.js} +2 -2
  29. package/dist/{chunk-RLPVFX7V.js → chunk-YKDFQADM.js} +36 -7
  30. package/dist/chunk-YKDFQADM.js.map +1 -0
  31. package/dist/context-mention-palette/index.d.ts +8 -68
  32. package/dist/context-mention-palette/index.js +6 -6
  33. package/dist/context-mention-provider.d.ts +6 -1
  34. package/dist/context-mention-provider.js +1 -1
  35. package/dist/i18n/index.d.ts +239 -163
  36. package/dist/i18n/index.js +1 -1
  37. package/dist/index.d.ts +37 -2
  38. package/dist/index.js +1495 -990
  39. package/dist/index.js.map +1 -1
  40. package/dist/workbench/contribution.d.ts +7 -1
  41. package/dist/workbench/contribution.js +6 -4
  42. package/dist/workbench/index.d.ts +4 -2
  43. package/dist/workbench/index.js +6 -4
  44. package/dist/workbench/launch.d.ts +2 -0
  45. package/dist/workbench/launch.js +2 -2
  46. package/dist/workbench/state.d.ts +3 -2
  47. package/dist/workbench/state.js +1 -1
  48. package/dist/workbench/types.d.ts +3 -0
  49. package/dist/workbench/types.js +1 -1
  50. package/dist/workspace-agent-generated-files.js +2 -2
  51. package/dist/{workspaceLinkActions-BlLN8Pvz.d.ts → workspaceLinkActions-Mjktl_Be.d.ts} +3 -0
  52. package/package.json +15 -13
  53. package/dist/chunk-ASAZDEQE.js.map +0 -1
  54. package/dist/chunk-FSTZDNRM.js.map +0 -1
  55. package/dist/chunk-GEXHKJK5.js.map +0 -1
  56. package/dist/chunk-GZHQPPK2.js.map +0 -1
  57. package/dist/chunk-MU2LODEV.js.map +0 -1
  58. package/dist/chunk-RLPVFX7V.js.map +0 -1
  59. package/dist/chunk-VDNMTW2E.js.map +0 -1
  60. package/dist/chunk-WME2V26J.js.map +0 -1
  61. package/dist/chunk-YXSO4ITT.js.map +0 -1
  62. package/dist/chunk-ZO3SZCIX.js.map +0 -1
  63. /package/dist/{chunk-HSXDSFKB.js.map → chunk-OFGXNXYT.js.map} +0 -0
  64. /package/dist/{chunk-KEKPOVQD.js.map → chunk-XHQGCP7A.js.map} +0 -0
@@ -31,8 +31,7 @@ function normalizeAgentGuiWorkbenchState(state) {
31
31
  conversationRailWidthPx: normalizeOptionalPositiveNumber(
32
32
  state.conversationRailWidthPx
33
33
  ),
34
- lastActiveAgentSessionId: typeof state.lastActiveAgentSessionId === "string" ? state.lastActiveAgentSessionId : null,
35
- lastActiveConversationTitle: typeof state.lastActiveConversationTitle === "string" ? state.lastActiveConversationTitle : null
34
+ lastActiveAgentSessionId: typeof state.lastActiveAgentSessionId === "string" ? state.lastActiveAgentSessionId : null
36
35
  };
37
36
  }
38
37
  function projectAgentGuiWorkbenchState(state) {
@@ -47,15 +46,14 @@ function projectAgentGuiWorkbenchState(state) {
47
46
  conversationRailWidthPx: normalizeOptionalPositiveNumber(
48
47
  state.conversationRailWidthPx
49
48
  ),
50
- lastActiveAgentSessionId: state.lastActiveAgentSessionId ?? null,
51
- lastActiveConversationTitle: state.lastActiveConversationTitle ?? null
49
+ lastActiveAgentSessionId: state.lastActiveAgentSessionId ?? null
52
50
  };
53
51
  }
54
52
  function areAgentGuiWorkbenchStatesEqual(left, right) {
55
53
  return composerOverridesEqual(left.composerOverrides, right.composerOverrides) && composerOverridesByProviderEqual(
56
54
  left.composerOverridesByProvider,
57
55
  right.composerOverridesByProvider
58
- ) && left.conversationRailCollapsed === right.conversationRailCollapsed && left.conversationRailWidthPx === right.conversationRailWidthPx && left.lastActiveAgentSessionId === right.lastActiveAgentSessionId && left.lastActiveConversationTitle === right.lastActiveConversationTitle;
56
+ ) && left.conversationRailCollapsed === right.conversationRailCollapsed && left.conversationRailWidthPx === right.conversationRailWidthPx && left.lastActiveAgentSessionId === right.lastActiveAgentSessionId;
59
57
  }
60
58
  function normalizeAgentGuiWorkbenchNodeState(state, fallbackProvider = "codex") {
61
59
  const provider = normalizeAgentGuiWorkbenchProvider(
@@ -98,8 +96,13 @@ function agentGuiWorkbenchProviderFromInstanceId(instanceId) {
98
96
  }
99
97
  function createAgentGuiWorkbenchNodeStateSource(input) {
100
98
  const typeId = input.typeId ?? "agent-gui";
101
- const nodeStateByInstanceId = /* @__PURE__ */ new Map();
99
+ const nodeStateByKey = /* @__PURE__ */ new Map();
102
100
  const listeners = /* @__PURE__ */ new Set();
101
+ const lookupState = (request) => {
102
+ const nodeState = request.nodeId ? nodeStateByKey.get(agentGuiWorkbenchNodeStateKey(request)) : null;
103
+ const state = nodeState ?? nodeStateByKey.get(agentGuiWorkbenchInstanceStateKey(request));
104
+ return state ? { ...state } : null;
105
+ };
103
106
  const notify = () => {
104
107
  for (const listener of listeners) {
105
108
  listener();
@@ -111,15 +114,13 @@ function createAgentGuiWorkbenchNodeStateSource(input) {
111
114
  if (request.typeId !== typeId) {
112
115
  return null;
113
116
  }
114
- const state = nodeStateByInstanceId.get(request.instanceId);
115
- return state ? { ...state } : null;
117
+ return lookupState(request);
116
118
  },
117
119
  getSnapshotNodeState(request) {
118
120
  if (request.typeId !== typeId) {
119
121
  return null;
120
122
  }
121
- const state = nodeStateByInstanceId.get(request.instanceId);
122
- return state ? { ...state } : null;
123
+ return lookupState(request);
123
124
  },
124
125
  getWorkspaceState() {
125
126
  return {
@@ -137,28 +138,45 @@ function createAgentGuiWorkbenchNodeStateSource(input) {
137
138
  if (request.typeId !== typeId) {
138
139
  return null;
139
140
  }
140
- const state = nodeStateByInstanceId.get(request.instanceId);
141
- return state ? { ...state } : null;
141
+ return lookupState(request);
142
142
  },
143
143
  writeNodeState(request) {
144
144
  if (request.typeId !== typeId) {
145
145
  return;
146
146
  }
147
- nodeStateByInstanceId.set(request.instanceId, {
147
+ const key = agentGuiWorkbenchNodeStateKey(request);
148
+ const previous = nodeStateByKey.get(key);
149
+ const clearedInstanceSeed = request.nodeId ? nodeStateByKey.delete(agentGuiWorkbenchInstanceStateKey(request)) : false;
150
+ const next = {
148
151
  ...normalizeAgentGuiWorkbenchState(request.state)
149
- });
152
+ };
153
+ if (request.nodeId && typeof request.state.lastActiveConversationTitle === "string") {
154
+ next.lastActiveConversationTitle = request.state.lastActiveConversationTitle;
155
+ }
156
+ nodeStateByKey.set(key, next);
157
+ if (!clearedInstanceSeed && previous && areAgentGuiWorkbenchMemoryStatesEqual(previous, next)) {
158
+ return;
159
+ }
150
160
  notify();
151
161
  }
152
162
  };
153
163
  }
164
+ function areAgentGuiWorkbenchMemoryStatesEqual(left, right) {
165
+ return areAgentGuiWorkbenchStatesEqual(left, right) && (left.lastActiveConversationTitle ?? null) === (right.lastActiveConversationTitle ?? null);
166
+ }
167
+ function agentGuiWorkbenchNodeStateKey(request) {
168
+ return request.nodeId ? `node:${request.nodeId}` : agentGuiWorkbenchInstanceStateKey(request);
169
+ }
170
+ function agentGuiWorkbenchInstanceStateKey(request) {
171
+ return `instance:${request.instanceId}`;
172
+ }
154
173
  function createDefaultAgentGuiWorkbenchState() {
155
174
  return {
156
175
  composerOverrides: null,
157
176
  composerOverridesByProvider: null,
158
177
  conversationRailCollapsed: false,
159
178
  conversationRailWidthPx: null,
160
- lastActiveAgentSessionId: null,
161
- lastActiveConversationTitle: null
179
+ lastActiveAgentSessionId: null
162
180
  };
163
181
  }
164
182
  function normalizeAgentGuiWorkbenchComposerOverrides(value) {
@@ -226,4 +244,4 @@ export {
226
244
  agentGuiWorkbenchProviderFromInstanceId,
227
245
  createAgentGuiWorkbenchNodeStateSource
228
246
  };
229
- //# sourceMappingURL=chunk-GEXHKJK5.js.map
247
+ //# sourceMappingURL=chunk-MUZMBEFO.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 normalizeAgentGuiWorkbenchProvider\n} from \"./providerCatalog.ts\";\nimport type {\n AgentGuiWorkbenchComposerOverrides,\n AgentGuiWorkbenchComposerOverridesByProvider,\n AgentGuiWorkbenchNodeState,\n AgentGuiWorkbenchProvider,\n AgentGuiWorkbenchState,\n AgentGuiWorkbenchWorkspaceState\n} 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 };\n}\n\nexport function normalizeAgentGuiWorkbenchState(\n state: unknown\n): AgentGuiWorkbenchState {\n if (!isRecord(state)) {\n return createDefaultAgentGuiWorkbenchState();\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 };\n}\n\nexport function projectAgentGuiWorkbenchState(\n state: AgentGuiWorkbenchNodeState\n): AgentGuiWorkbenchState {\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 };\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 );\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 };\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 );\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 const typeId = input.typeId ?? \"agent-gui\";\n const nodeStateByKey = new Map<string, AgentGuiWorkbenchState>();\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 writeNodeState(request) {\n if (request.typeId !== typeId) {\n return;\n }\n const key = agentGuiWorkbenchNodeStateKey(request);\n const previous = nodeStateByKey.get(key);\n const clearedInstanceSeed = request.nodeId\n ? nodeStateByKey.delete(agentGuiWorkbenchInstanceStateKey(request))\n : false;\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 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":[]}
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-MTFSQWZ6.js";
15
15
  import {
16
16
  translate
17
- } from "./chunk-FSTZDNRM.js";
17
+ } from "./chunk-KJPMZ7G5.js";
18
18
 
19
19
  // shared/managedAgentProviders.ts
20
20
  function normalizeManagedAgentProvider(provider) {
@@ -113,4 +113,4 @@ export {
113
113
  userAvatarPlaceholderUrl,
114
114
  workspaceAgentActivityStatusLabel
115
115
  };
116
- //# sourceMappingURL=chunk-HSXDSFKB.js.map
116
+ //# sourceMappingURL=chunk-OFGXNXYT.js.map
@@ -3,20 +3,20 @@ import {
3
3
  managedAgentRoundedIconUrl,
4
4
  userAvatarPlaceholderUrl,
5
5
  workspaceAgentActivityStatusLabel
6
- } from "./chunk-HSXDSFKB.js";
6
+ } from "./chunk-OFGXNXYT.js";
7
7
  import {
8
8
  buildAgentGenericMentionHref,
9
9
  buildAgentSessionMentionHref,
10
10
  buildAgentWorkspaceAppMentionHref,
11
11
  buildAgentWorkspaceIssueMentionHref,
12
12
  normalizeAgentSessionMentionTitle
13
- } from "./chunk-MU2LODEV.js";
13
+ } from "./chunk-U4F3COKL.js";
14
14
  import {
15
15
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
16
- } from "./chunk-YXSO4ITT.js";
16
+ } from "./chunk-HIREVEZM.js";
17
17
  import {
18
18
  translate
19
- } from "./chunk-FSTZDNRM.js";
19
+ } from "./chunk-KJPMZ7G5.js";
20
20
  import {
21
21
  resolveAgentMentionFileThumbnailUrl,
22
22
  resolveAgentMentionFileVisualKind
@@ -1181,12 +1181,12 @@ var AgentMentionSearchController = class {
1181
1181
  if (!mentionItem || mentionItem.kind !== "file") {
1182
1182
  return mentionItem;
1183
1183
  }
1184
- const thumbnailUrl = await Promise.resolve(
1185
- input.provider.getItemThumbnailUrl?.(item) ?? null
1184
+ const iconUrl = await Promise.resolve(
1185
+ input.provider.getItemIconUrl?.(item) ?? null
1186
1186
  ).catch(() => null);
1187
1187
  const resolvedThumbnailUrl = resolveAgentMentionFileThumbnailUrl({
1188
1188
  ...mentionItem,
1189
- thumbnailUrl
1189
+ thumbnailUrl: iconUrl
1190
1190
  });
1191
1191
  if (!resolvedThumbnailUrl) {
1192
1192
  return mentionItem;
@@ -1492,7 +1492,8 @@ function providerItemToAgentMentionItem(input) {
1492
1492
  appId,
1493
1493
  name: label,
1494
1494
  description: compactText(presentation.description) || compactText(presentation.subtitle) || compactText(input.subtitle) || void 0,
1495
- iconUrl: presentation.iconUrl?.trim() || void 0
1495
+ iconUrl: presentation.iconUrl?.trim() || void 0,
1496
+ referencesListSupported: presentation.referencesListSupported === "true"
1496
1497
  };
1497
1498
  }
1498
1499
  if (input.providerId === AGENT_SESSION_PROVIDER_ID2) {
@@ -1531,7 +1532,12 @@ function mentionSessionScope(input) {
1531
1532
  if (rawScope === "my_sessions" || rawScope === "collab_sessions") {
1532
1533
  return rawScope;
1533
1534
  }
1534
- return input.userId && input.userId === input.currentUserId ? "my_sessions" : "collab_sessions";
1535
+ const userId = input.userId?.trim() ?? "";
1536
+ const currentUserId = input.currentUserId.trim();
1537
+ if (!userId || !currentUserId || userId === "local" || currentUserId === "local") {
1538
+ return "my_sessions";
1539
+ }
1540
+ return userId === currentUserId ? "my_sessions" : "collab_sessions";
1535
1541
  }
1536
1542
  function dirnameFromProviderWorkspaceFileHref(href) {
1537
1543
  const normalized = href.replace(/\/+$/, "");
@@ -1668,12 +1674,15 @@ function AgentFileMentionPalette({
1668
1674
  onSelectFilter,
1669
1675
  onExpandGroup,
1670
1676
  onCycleFilter,
1671
- onMoveSelection
1677
+ onMoveSelection,
1678
+ onOpenReferences
1672
1679
  }) {
1673
1680
  "use memo";
1681
+ const openReferencesLabel = translate(
1682
+ "agentHost.agentGui.mentionOpenReferences"
1683
+ );
1674
1684
  const filter = state.filter;
1675
1685
  const highlightedBrowseCategory = highlightedKey?.startsWith("category:") ? highlightedKey.slice("category:".length) : null;
1676
- const browseDisplayFilter = isBrowseCategoryId(highlightedBrowseCategory) ? highlightedBrowseCategory : filter;
1677
1686
  const showBrowseHint = shouldShowBrowseSearchHint({
1678
1687
  browseFilter: filter,
1679
1688
  groups: state.groups,
@@ -1697,7 +1706,7 @@ function AgentFileMentionPalette({
1697
1706
  )
1698
1707
  )
1699
1708
  };
1700
- const emptyLabelForShell = showBrowseHint ? browseHintForFilter(browseDisplayFilter) : resolveMentionPaletteEmptyLabel({
1709
+ const emptyLabelForShell = showBrowseHint ? browseHintForFilter(filter) : resolveMentionPaletteEmptyLabel({
1701
1710
  emptyLabel,
1702
1711
  filter,
1703
1712
  mode: state.mode,
@@ -1717,7 +1726,11 @@ function AgentFileMentionPalette({
1717
1726
  getItemKey: agentMentionItemKey,
1718
1727
  renderItem: (item) => renderMentionRow(agentMentionItemToRowItem(item), {
1719
1728
  classNames: AGENT_MENTION_ROW_CLASS_NAMES,
1720
- dataAttributeMode: "agent"
1729
+ dataAttributeMode: "agent",
1730
+ ...onOpenReferences && isReferenceableMentionItem(item) ? {
1731
+ onOpenReferences: () => onOpenReferences(item),
1732
+ openReferencesLabel
1733
+ } : {}
1721
1734
  }),
1722
1735
  labels: {
1723
1736
  loading: loadingLabel,
@@ -1810,6 +1823,15 @@ function resolveMentionPaletteEmptyLabel(input) {
1810
1823
  if (input.mode === "results" && input.filter === "file" && input.query.trim().length > 0) {
1811
1824
  return translate("agentHost.agentGui.mentionNoMatchingFiles");
1812
1825
  }
1826
+ if (input.filter === "session") {
1827
+ return agentMentionEmptyGroupLabel("my_sessions", input.query);
1828
+ }
1829
+ if (input.filter === "app") {
1830
+ return agentMentionEmptyGroupLabel("apps", input.query);
1831
+ }
1832
+ if (input.filter === "issue") {
1833
+ return agentMentionEmptyGroupLabel("issues", input.query);
1834
+ }
1813
1835
  return input.emptyLabel;
1814
1836
  }
1815
1837
  function shouldRenderMentionGroupLabel(input) {
@@ -1864,6 +1886,14 @@ function agentMentionItemToRowItem(item) {
1864
1886
  iconUrl: item.iconUrl ?? null
1865
1887
  };
1866
1888
  }
1889
+ if (item.kind === "workspace-app-bundle") {
1890
+ return {
1891
+ kind: "app",
1892
+ name: item.name,
1893
+ description: null,
1894
+ iconUrl: item.iconUrl ?? null
1895
+ };
1896
+ }
1867
1897
  if (item.kind === "workspace-app-factory") {
1868
1898
  return {
1869
1899
  kind: "app-factory",
@@ -1877,6 +1907,15 @@ function agentMentionItemToRowItem(item) {
1877
1907
  statusTag: agentIssueStatusTag(item.status)
1878
1908
  };
1879
1909
  }
1910
+ function isReferenceableMentionItem(item) {
1911
+ if (item.kind === "workspace-issue") {
1912
+ return true;
1913
+ }
1914
+ if (item.kind === "workspace-app") {
1915
+ return item.referencesListSupported === true;
1916
+ }
1917
+ return false;
1918
+ }
1880
1919
  function mentionSessionAgentProvider(item) {
1881
1920
  const queryStart = item.href.indexOf("?");
1882
1921
  if (queryStart < 0) {
@@ -1938,9 +1977,6 @@ function browseHintForFilter(filter) {
1938
1977
  return translate("agentHost.agentGui.contextPickerBrowseIssueHint");
1939
1978
  }
1940
1979
  }
1941
- function isBrowseCategoryId(value) {
1942
- return value === "all" || value === "app" || value === "file" || value === "session" || value === "issue";
1943
- }
1944
1980
  function hasInteractiveGroupEntries(groups) {
1945
1981
  return groups.some((group) => group.items.length > 0 || group.hasMore);
1946
1982
  }
@@ -1990,4 +2026,4 @@ export {
1990
2026
  AgentFileMentionPalette,
1991
2027
  AgentContextMentionPalette
1992
2028
  };
1993
- //# sourceMappingURL=chunk-3YZX5EUC.js.map
2029
+ //# sourceMappingURL=chunk-SVOGXWFJ.js.map