@genesislcap/ai-assistant 14.409.0-FUI-2495.2 → 14.409.1

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/ai-assistant.api.json +1110 -2791
  2. package/dist/ai-assistant.d.ts +45 -267
  3. package/dist/dts/channel/ai-activity-channel.d.ts +0 -1
  4. package/dist/dts/channel/ai-activity-channel.d.ts.map +1 -1
  5. package/dist/dts/components/chat-driver/chat-driver.d.ts +7 -25
  6. package/dist/dts/components/chat-driver/chat-driver.d.ts.map +1 -1
  7. package/dist/dts/components/halo-overlay.d.ts +1 -13
  8. package/dist/dts/components/halo-overlay.d.ts.map +1 -1
  9. package/dist/dts/config/config.d.ts +15 -43
  10. package/dist/dts/config/config.d.ts.map +1 -1
  11. package/dist/dts/config/index.d.ts +0 -1
  12. package/dist/dts/config/index.d.ts.map +1 -1
  13. package/dist/dts/index.d.ts +0 -4
  14. package/dist/dts/index.d.ts.map +1 -1
  15. package/dist/dts/main/main.d.ts +7 -16
  16. package/dist/dts/main/main.d.ts.map +1 -1
  17. package/dist/dts/main/main.styles.d.ts.map +1 -1
  18. package/dist/dts/main/main.template.d.ts.map +1 -1
  19. package/dist/esm/components/chat-driver/chat-driver.js +31 -86
  20. package/dist/esm/components/halo-overlay.js +7 -53
  21. package/dist/esm/config/index.js +0 -1
  22. package/dist/esm/index.js +0 -4
  23. package/dist/esm/main/main.js +45 -103
  24. package/dist/esm/main/main.styles.js +4 -145
  25. package/dist/esm/main/main.template.js +61 -97
  26. package/dist/tsconfig.tsbuildinfo +1 -1
  27. package/package.json +15 -15
  28. package/src/channel/ai-activity-channel.ts +0 -1
  29. package/src/components/chat-driver/chat-driver.ts +35 -116
  30. package/src/components/halo-overlay.ts +7 -45
  31. package/src/config/config.ts +15 -45
  32. package/src/config/index.ts +0 -1
  33. package/src/index.ts +0 -4
  34. package/src/main/main.styles.ts +4 -145
  35. package/src/main/main.template.ts +78 -116
  36. package/src/main/main.ts +50 -105
  37. package/dist/dts/components/ai-driver/ai-driver.d.ts +0 -38
  38. package/dist/dts/components/ai-driver/ai-driver.d.ts.map +0 -1
  39. package/dist/dts/components/ai-driver/index.d.ts +0 -2
  40. package/dist/dts/components/ai-driver/index.d.ts.map +0 -1
  41. package/dist/dts/components/orchestrating-driver/index.d.ts +0 -2
  42. package/dist/dts/components/orchestrating-driver/index.d.ts.map +0 -1
  43. package/dist/dts/components/orchestrating-driver/orchestrating-driver.d.ts +0 -36
  44. package/dist/dts/components/orchestrating-driver/orchestrating-driver.d.ts.map +0 -1
  45. package/dist/dts/components/popout-manager/index.d.ts +0 -2
  46. package/dist/dts/components/popout-manager/index.d.ts.map +0 -1
  47. package/dist/dts/components/popout-manager/popout-manager.d.ts +0 -74
  48. package/dist/dts/components/popout-manager/popout-manager.d.ts.map +0 -1
  49. package/dist/dts/config/fallback-agents.d.ts +0 -20
  50. package/dist/dts/config/fallback-agents.d.ts.map +0 -1
  51. package/dist/esm/components/ai-driver/ai-driver.js +0 -1
  52. package/dist/esm/components/ai-driver/index.js +0 -1
  53. package/dist/esm/components/orchestrating-driver/index.js +0 -1
  54. package/dist/esm/components/orchestrating-driver/orchestrating-driver.js +0 -229
  55. package/dist/esm/components/popout-manager/index.js +0 -1
  56. package/dist/esm/components/popout-manager/popout-manager.js +0 -119
  57. package/dist/esm/config/fallback-agents.js +0 -26
  58. package/src/components/ai-driver/ai-driver.ts +0 -42
  59. package/src/components/ai-driver/index.ts +0 -1
  60. package/src/components/orchestrating-driver/index.ts +0 -1
  61. package/src/components/orchestrating-driver/orchestrating-driver.ts +0 -300
  62. package/src/components/popout-manager/index.ts +0 -1
  63. package/src/components/popout-manager/popout-manager.ts +0 -144
  64. package/src/config/fallback-agents.ts +0 -29
@@ -10,7 +10,6 @@ import { ChatDriver } from '../components/chat-driver/chat-driver';
10
10
  import { AiChatInteractionWrapper } from '../components/chat-interaction-wrapper/chat-interaction-wrapper';
11
11
  import { AiChatMarkdown } from '../components/chat-markdown/chat-markdown';
12
12
  import { AiHaloOverlay } from '../components/halo-overlay';
13
- import { OrchestratingDriver } from '../components/orchestrating-driver/orchestrating-driver';
14
13
  import { logger } from '../utils/logger';
15
14
  import { styles } from './main.styles';
16
15
  import { FoundationAiAssistantTemplate } from './main.template';
@@ -22,8 +21,7 @@ avoidTreeShaking(AiChatMarkdown, AiChatInteractionWrapper, AiHaloOverlay, AiChat
22
21
  *
23
22
  * @remarks
24
23
  * Inject an `AIProvider` through the DI container. Pass agent configuration via the `agents`
25
- * property. The component creates a `ChatDriver` (single agent) or `OrchestratingDriver`
26
- * (multiple agents) to manage the conversation loop.
24
+ * property. The component creates a `ChatDriver` to manage the conversation loop.
27
25
  *
28
26
  * @beta
29
27
  */
@@ -42,8 +40,6 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
42
40
  this.showToolCalls = false;
43
41
  /** Current user-facing toggle state for thinking step visibility. */
44
42
  this.showThinkingSteps = false;
45
- /** Current user-facing toggle state for agent switch indicator visibility. */
46
- this.showAgentSwitchIndicator = false;
47
43
  /** Currently enabled animations. */
48
44
  this.enabledAnimations = [];
49
45
  /** Whether the loading spinner is currently visible. Controlled by the loading delay timer. */
@@ -51,20 +47,19 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
51
47
  /** Whether the settings panel is open. */
52
48
  this.settingsOpen = false;
53
49
  this.haloStartPublished = false;
54
- this.showHalo = 'no';
50
+ /**
51
+ * Whether the halo animation should be shown.
52
+ * True when the AI is actively computing (loading state, no pending interaction).
53
+ */
54
+ this.showHalo = false;
55
55
  }
56
56
  syncShowHalo() {
57
57
  if (this.state !== 'loading') {
58
- this.showHalo = 'no';
58
+ this.showHalo = false;
59
59
  return;
60
60
  }
61
61
  const last = this.messages[this.messages.length - 1];
62
- if (last === null || last === void 0 ? void 0 : last.interaction) {
63
- this.showHalo = 'no';
64
- }
65
- else if (this.showHalo !== 'orchestrating') {
66
- this.showHalo = 'agent';
67
- }
62
+ this.showHalo = !(last === null || last === void 0 ? void 0 : last.interaction);
68
63
  }
69
64
  /** True when there is a pending (unresolved) interaction — disables the popout button. */
70
65
  get hasActivePendingInteraction() {
@@ -77,7 +72,7 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
77
72
  var _a;
78
73
  if (!((_a = this.enabledAnimations) === null || _a === void 0 ? void 0 : _a.includes('halo')))
79
74
  return;
80
- if (this.showHalo === 'no') {
75
+ if (!this.showHalo) {
81
76
  agenticActivityBus.publish('halo-stop', undefined);
82
77
  this.haloStartPublished = false;
83
78
  }
@@ -101,16 +96,8 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
101
96
  * `showToolCalls` is false.
102
97
  */
103
98
  get visibleMessages() {
104
- var _a;
105
- const showAgentSwitchIndicator = ((_a = this.chatConfig.ui) === null || _a === void 0 ? void 0 : _a.showAgentSwitchIndicator) != null
106
- ? this.showAgentSwitchIndicator
107
- : this.showToolCalls;
108
99
  return this.messages.filter((m) => {
109
100
  var _a, _b, _c;
110
- // Agent switch indicators are shown when the toggle is on (or showToolCalls implies it)
111
- if (m.role === 'system-event') {
112
- return showAgentSwitchIndicator;
113
- }
114
101
  // Never show tool messages to the user
115
102
  if (m.role === 'tool') {
116
103
  return false;
@@ -128,40 +115,19 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
128
115
  });
129
116
  }
130
117
  connectedCallback() {
131
- var _a, _b, _c, _d, _e, _f;
118
+ var _a, _b, _c, _d;
132
119
  super.connectedCallback();
133
- const ui = (_a = this.chatConfig.ui) !== null && _a !== void 0 ? _a : {};
134
- const agent = (_b = this.chatConfig.agent) !== null && _b !== void 0 ? _b : {};
135
- this.showToolCalls = ui.showToolCalls === true;
136
- this.showThinkingSteps = ui.showThinkingSteps === true;
137
- this.showAgentSwitchIndicator = ui.showAgentSwitchIndicator === true;
120
+ const { showToolCalls, showThinkingSteps, animations } = this.chatConfig;
121
+ this.showToolCalls = showToolCalls === true;
122
+ this.showThinkingSteps = showThinkingSteps === true;
138
123
  this.enabledAnimations =
139
- (_d = (_c = ui.animations) === null || _c === void 0 ? void 0 : _c.enabled) !== null && _d !== void 0 ? _d : (ui.animations ? [...ALL_ANIMATIONS] : []);
140
- const { agents } = this;
141
- if (agents && agents.length > 1) {
142
- const orchestrator = new OrchestratingDriver(this.aiProvider, agents, {
143
- maxHandoffs: agent.maxHandoffs,
144
- classifierHistoryLength: agent.classifierHistoryLength,
145
- classifierRetries: agent.classifierRetries,
146
- maxToolIterations: agent.maxToolIterations,
147
- });
148
- orchestrator.addEventListener('orchestrating-start', () => {
149
- this.showHalo = 'orchestrating';
150
- });
151
- orchestrator.addEventListener('orchestrating-stop', () => {
152
- if (this.showHalo === 'orchestrating')
153
- this.showHalo = 'agent';
154
- });
155
- orchestrator.addEventListener('agent-changed', (e) => {
156
- this.activeAgent = e.detail;
157
- });
158
- this.driver = orchestrator;
159
- }
160
- else {
161
- const singleAgent = agents === null || agents === void 0 ? void 0 : agents[0];
162
- this.activeAgent = singleAgent;
163
- this.driver = new ChatDriver(this.aiProvider, (_e = singleAgent === null || singleAgent === void 0 ? void 0 : singleAgent.toolHandlers) !== null && _e !== void 0 ? _e : {}, (_f = singleAgent === null || singleAgent === void 0 ? void 0 : singleAgent.toolDefinitions) !== null && _f !== void 0 ? _f : [], singleAgent === null || singleAgent === void 0 ? void 0 : singleAgent.systemPrompt, singleAgent === null || singleAgent === void 0 ? void 0 : singleAgent.primerHistory, agent.maxToolIterations);
124
+ (_a = animations === null || animations === void 0 ? void 0 : animations.enabled) !== null && _a !== void 0 ? _a : (animations ? [...ALL_ANIMATIONS] : []);
125
+ // TODO: multi-agent orchestration classify intent and route to the correct agent
126
+ if (this.agents && this.agents.length > 1) {
127
+ logger.warn('FoundationAiAssistant: multiple agents configured but orchestration is not yet implemented. Only the first agent will be used.');
164
128
  }
129
+ const agent = (_b = this.agents) === null || _b === void 0 ? void 0 : _b[0];
130
+ this.driver = new ChatDriver(this.aiProvider, (_c = agent === null || agent === void 0 ? void 0 : agent.toolHandlers) !== null && _c !== void 0 ? _c : {}, (_d = agent === null || agent === void 0 ? void 0 : agent.toolDefinitions) !== null && _d !== void 0 ? _d : [], agent === null || agent === void 0 ? void 0 : agent.systemPrompt, agent === null || agent === void 0 ? void 0 : agent.primerHistory, this.chatConfig.maxToolIterations);
165
131
  this.driver.addEventListener('history-updated', (e) => {
166
132
  this.messages = [...e.detail];
167
133
  });
@@ -203,7 +169,10 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
203
169
  }
204
170
  this.syncShowHalo();
205
171
  // Publish halo-start whenever a new toolCalls message arrives.
206
- if (this.showHalo !== 'no' && ((_a = this.enabledAnimations) === null || _a === void 0 ? void 0 : _a.includes('halo'))) {
172
+ // If we've already published one this turn, send halo-stop first so grids
173
+ // not relevant to the new tools begin deactivating (fix #2).
174
+ // Never publish with empty toolNames (fix #3).
175
+ if (this.showHalo && ((_a = this.enabledAnimations) === null || _a === void 0 ? void 0 : _a.includes('halo'))) {
207
176
  const last = this.messages[this.messages.length - 1];
208
177
  if ((_b = last === null || last === void 0 ? void 0 : last.toolCalls) === null || _b === void 0 ? void 0 : _b.length) {
209
178
  const toolNames = this.getActiveToolNames();
@@ -219,6 +188,7 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
219
188
  this.scrollToBottom();
220
189
  }
221
190
  showLoadingIndicatorChanged() {
191
+ // Scroll to bottom when the spinner appears so it is visible.
222
192
  if (this.showLoadingIndicator) {
223
193
  this.scrollToBottom();
224
194
  }
@@ -236,9 +206,9 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
236
206
  });
237
207
  }
238
208
  startLoadingTimer() {
239
- var _a, _b;
209
+ var _a;
240
210
  this.clearLoadingTimer();
241
- const delay = (_b = (_a = this.chatConfig.ui) === null || _a === void 0 ? void 0 : _a.loadingDelay) !== null && _b !== void 0 ? _b : FoundationAiAssistant_1.DEFAULT_LOADING_DELAY_S;
211
+ const delay = (_a = this.chatConfig.loadingDelay) !== null && _a !== void 0 ? _a : FoundationAiAssistant_1.DEFAULT_LOADING_DELAY_S;
242
212
  if (delay === 0) {
243
213
  this.showLoadingIndicator = true;
244
214
  }
@@ -273,7 +243,6 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
273
243
  this.messages = [...state.messages];
274
244
  this.showToolCalls = state.showToolCalls;
275
245
  this.showThinkingSteps = state.showThinkingSteps;
276
- this.showAgentSwitchIndicator = state.showAgentSwitchIndicator;
277
246
  this.enabledAnimations = [...state.enabledAnimations];
278
247
  (_a = this.driver) === null || _a === void 0 ? void 0 : _a.loadHistory(state.messages);
279
248
  }
@@ -282,28 +251,11 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
282
251
  messages: [...this.messages],
283
252
  showToolCalls: this.showToolCalls,
284
253
  showThinkingSteps: this.showThinkingSteps,
285
- showAgentSwitchIndicator: this.showAgentSwitchIndicator,
286
254
  enabledAnimations: [...this.enabledAnimations],
287
255
  };
288
256
  }
289
257
  toggleSettings() {
290
- var _a;
291
- if (this.settingsOpen) {
292
- const panel = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.settings-panel');
293
- if (panel) {
294
- panel.classList.add('closing');
295
- panel.addEventListener('animationend', () => {
296
- panel.classList.remove('closing');
297
- this.settingsOpen = false;
298
- }, { once: true });
299
- }
300
- else {
301
- this.settingsOpen = false;
302
- }
303
- }
304
- else {
305
- this.settingsOpen = true;
306
- }
258
+ this.settingsOpen = !this.settingsOpen;
307
259
  }
308
260
  toggleShowToolCalls() {
309
261
  this.showToolCalls = !this.showToolCalls;
@@ -311,30 +263,23 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
311
263
  toggleShowThinkingSteps() {
312
264
  this.showThinkingSteps = !this.showThinkingSteps;
313
265
  }
314
- toggleShowAgentSwitchIndicator() {
315
- this.showAgentSwitchIndicator = !this.showAgentSwitchIndicator;
316
- }
317
266
  setEnabledAnimations(animations) {
318
267
  this.enabledAnimations = animations;
319
268
  }
320
- getDebugLog() {
321
- var _a, _b, _c, _d, _e, _f;
322
- return {
323
- messages: (_c = (_b = (_a = this.driver) === null || _a === void 0 ? void 0 : _a.getRawHistory) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : this.messages,
324
- agentSummary: this.agents,
325
- host: window.location.host,
326
- activeSystemPrompt: (_d = this.activeAgent) === null || _d === void 0 ? void 0 : _d.systemPrompt,
327
- activePrimerHistory: (_e = this.activeAgent) === null || _e === void 0 ? void 0 : _e.primerHistory,
328
- debug: (_f = this.debugStateFactory) === null || _f === void 0 ? void 0 : _f.call(this),
329
- };
330
- }
331
- downloadDebugLog() {
332
- var _a, _b, _c;
269
+ downloadHistory() {
270
+ var _a, _b, _c, _d;
333
271
  const timestamp = new Date().toISOString().replace(/:/g, '-');
334
- const agentName = ((_c = (_b = (_a = this.activeAgent) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : this.headerTitle) !== null && _c !== void 0 ? _c : 'chat')
272
+ // TODO: multi-agent orchestration use the active agent rather than always agents[0]
273
+ const agent = (_a = this.agents) === null || _a === void 0 ? void 0 : _a[0];
274
+ const agentName = ((_c = (_b = agent === null || agent === void 0 ? void 0 : agent.name) !== null && _b !== void 0 ? _b : this.headerTitle) !== null && _c !== void 0 ? _c : 'chat')
335
275
  .toLowerCase()
336
276
  .replace(/\s+/g, '-');
337
- const payload = this.getDebugLog();
277
+ const payload = {
278
+ messages: this.messages,
279
+ systemPrompt: agent === null || agent === void 0 ? void 0 : agent.systemPrompt,
280
+ primerHistory: agent === null || agent === void 0 ? void 0 : agent.primerHistory,
281
+ debug: (_d = this.debugStateFactory) === null || _d === void 0 ? void 0 : _d.call(this),
282
+ };
338
283
  const blob = new Blob([JSON.stringify(payload, null, 2)], { type: 'application/json' });
339
284
  const url = URL.createObjectURL(blob);
340
285
  const a = document.createElement('a');
@@ -363,12 +308,12 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
363
308
  }
364
309
  }
365
310
  isAcceptedFile(file) {
366
- var _a, _b, _c;
367
- const accepted = (_a = this.chatConfig.ui) === null || _a === void 0 ? void 0 : _a.acceptedFiles;
311
+ var _a, _b;
312
+ const accepted = this.chatConfig.acceptedFiles;
368
313
  if (!accepted)
369
314
  return false;
370
315
  const acceptedList = accepted.split(',').map((s) => s.trim().toLowerCase());
371
- const ext = `.${(_c = (_b = file.name.split('.').pop()) === null || _b === void 0 ? void 0 : _b.toLowerCase()) !== null && _c !== void 0 ? _c : ''}`;
316
+ const ext = `.${(_b = (_a = file.name.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : ''}`;
372
317
  return acceptedList.some((a) => a === ext ||
373
318
  a === file.type ||
374
319
  (a.endsWith('/*') && file.type.startsWith(a.replace('/*', '/'))));
@@ -444,6 +389,9 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
444
389
  });
445
390
  }
446
391
  restoreFocusIfAppropriate() {
392
+ // If focus is still within this component (document.activeElement === this, since shadow DOM
393
+ // reports the host) or nothing specific has focus (body), return focus to the input.
394
+ // If the user has navigated to another element in the app, leave them there.
447
395
  const active = document.activeElement;
448
396
  if (active !== document.body && active !== this)
449
397
  return;
@@ -453,7 +401,7 @@ let FoundationAiAssistant = FoundationAiAssistant_1 = class FoundationAiAssistan
453
401
  });
454
402
  }
455
403
  onChatHeaderMouseDown(e) {
456
- if (this.popoutMode === 'collapse')
404
+ if (this.popoutMode !== 'expand')
457
405
  return;
458
406
  e.preventDefault();
459
407
  this.dispatchEvent(new CustomEvent('chat-header-mousedown', {
@@ -515,18 +463,12 @@ __decorate([
515
463
  __decorate([
516
464
  observable
517
465
  ], FoundationAiAssistant.prototype, "attachmentErrors", void 0);
518
- __decorate([
519
- observable
520
- ], FoundationAiAssistant.prototype, "activeAgent", void 0);
521
466
  __decorate([
522
467
  observable
523
468
  ], FoundationAiAssistant.prototype, "showToolCalls", void 0);
524
469
  __decorate([
525
470
  observable
526
471
  ], FoundationAiAssistant.prototype, "showThinkingSteps", void 0);
527
- __decorate([
528
- observable
529
- ], FoundationAiAssistant.prototype, "showAgentSwitchIndicator", void 0);
530
472
  __decorate([
531
473
  observable
532
474
  ], FoundationAiAssistant.prototype, "enabledAnimations", void 0);
@@ -11,7 +11,6 @@ export const styles = css `
11
11
  }
12
12
 
13
13
  .chat-wrapper {
14
- container-type: inline-size;
15
14
  position: relative;
16
15
  display: flex;
17
16
  flex-direction: column;
@@ -57,140 +56,22 @@ export const styles = css `
57
56
  font-size: 1.2em;
58
57
  }
59
58
 
60
- @keyframes settings-slide-in {
61
- from {
62
- opacity: 0%;
63
- transform: translateY(-6px);
64
- }
65
-
66
- to {
67
- opacity: 100%;
68
- transform: translateY(0);
69
- }
70
- }
71
-
72
- @keyframes settings-slide-out {
73
- from {
74
- opacity: 100%;
75
- transform: translateY(0);
76
- }
77
-
78
- to {
79
- opacity: 0%;
80
- transform: translateY(-6px);
81
- }
82
- }
83
-
84
59
  .settings-panel {
85
- animation: settings-slide-in 0.2s ease-out;
86
- display: grid;
87
- grid-template-columns: 1fr;
88
- gap: calc(var(--design-unit) * 2px) calc(var(--design-unit) * 4px);
60
+ display: flex;
61
+ flex-wrap: wrap;
62
+ align-items: center;
63
+ gap: calc(var(--design-unit) * 4px);
89
64
  padding: calc(var(--design-unit) * 2px) calc(var(--design-unit) * 3px);
90
65
  border-bottom: 1px solid var(--neutral-stroke-rest);
91
66
  background-color: var(--neutral-layer-2);
92
67
  }
93
68
 
94
- .settings-panel.closing {
95
- animation: settings-slide-out 0.2s ease-in forwards;
96
- }
97
-
98
- rapid-multiselect::part(root) {
99
- min-width: 80px;
100
- width: 300%;
101
- }
102
-
103
- rapid-multiselect::part(control),
104
- .settings-panel > [part='download-button'] {
105
- width: fit-content;
106
- }
107
-
108
- .settings-panel > [part='toggle-tool-calls'] {
109
- grid-column: 1;
110
- grid-row: 1;
111
- }
112
-
113
- .settings-panel > [part='toggle-thinking'] {
114
- grid-column: 2;
115
- grid-row: 1;
116
- }
117
-
118
- .settings-panel > [part='toggle-agent-switch'] {
119
- grid-column: 1;
120
- grid-row: 2;
121
- }
122
-
123
- .settings-panel > [part='download-button'] {
124
- grid-column: 2;
125
- grid-row: 2;
126
- }
127
-
128
69
  .settings-animations {
129
70
  display: flex;
130
71
  align-items: center;
131
72
  gap: calc(var(--design-unit) * 2px);
132
73
  }
133
74
 
134
- .settings-panel > .settings-animations {
135
- grid-column: 1/2;
136
- grid-row: 3;
137
- }
138
-
139
- @container (min-width: 400px) {
140
- .settings-panel {
141
- grid-template-columns: auto 1fr;
142
- align-items: start;
143
- }
144
-
145
- .settings-panel > [part='toggle-tool-calls'] {
146
- grid-column: 1;
147
- grid-row: 1;
148
- }
149
-
150
- .settings-panel > [part='toggle-thinking'] {
151
- grid-column: 1;
152
- grid-row: 2;
153
- }
154
-
155
- .settings-panel > [part='toggle-agent-switch'] {
156
- grid-column: 1;
157
- grid-row: 3;
158
- }
159
-
160
- .settings-panel > [part='download-button'],
161
- .settings-panel > .settings-animations {
162
- grid-column: 2;
163
- justify-self: end;
164
- }
165
-
166
- .settings-panel > [part='download-button'] {
167
- grid-row: 1;
168
- }
169
-
170
- .settings-panel > .settings-animations {
171
- grid-row: 2;
172
- }
173
- }
174
-
175
- @container (min-width: 750px) {
176
- .settings-panel {
177
- display: flex;
178
- flex-wrap: nowrap;
179
- align-items: center;
180
- gap: calc(var(--design-unit) * 4px);
181
- }
182
-
183
- .settings-panel > [part='download-button'],
184
- .settings-panel > .settings-animations {
185
- justify-self: unset;
186
- margin-left: auto;
187
- }
188
-
189
- .settings-panel > [part='download-button'] ~ .settings-animations {
190
- margin-left: 0;
191
- }
192
- }
193
-
194
75
  .messages {
195
76
  flex: 1;
196
77
  overflow-y: auto;
@@ -236,28 +117,6 @@ export const styles = css `
236
117
  }
237
118
  }
238
119
 
239
- .agent-switch-indicator {
240
- display: flex;
241
- align-items: center;
242
- gap: 8px;
243
- margin: 8px 0;
244
- color: var(--neutral-foreground-hint, var(--neutral-foreground-rest));
245
- opacity: 60%;
246
- font-size: 0.75em;
247
- }
248
-
249
- .agent-switch-indicator::before,
250
- .agent-switch-indicator::after {
251
- content: '';
252
- flex: 1;
253
- height: 1px;
254
- background: currentColor;
255
- }
256
-
257
- .agent-switch-label {
258
- white-space: nowrap;
259
- }
260
-
261
120
  .message-row {
262
121
  display: flex;
263
122
  align-items: flex-start;