@genesislcap/ai-assistant 14.419.2 → 14.421.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai-assistant.api.json +4061 -1416
- package/dist/ai-assistant.d.ts +594 -81
- package/dist/dts/channel/ai-activity-channel.d.ts +4 -22
- package/dist/dts/channel/ai-activity-channel.d.ts.map +1 -1
- package/dist/dts/components/ai-driver/ai-driver.d.ts +52 -0
- package/dist/dts/components/ai-driver/ai-driver.d.ts.map +1 -0
- package/dist/dts/components/ai-driver/index.d.ts +2 -0
- package/dist/dts/components/ai-driver/index.d.ts.map +1 -0
- package/dist/dts/components/chat-driver/chat-driver.d.ts +63 -8
- package/dist/dts/components/chat-driver/chat-driver.d.ts.map +1 -1
- package/dist/dts/components/chat-interaction-wrapper/chat-interaction-wrapper.d.ts +3 -3
- package/dist/dts/components/chat-interaction-wrapper/chat-interaction-wrapper.d.ts.map +1 -1
- package/dist/dts/components/chat-markdown/chat-markdown.d.ts +1 -1
- package/dist/dts/components/chat-markdown/chat-markdown.d.ts.map +1 -1
- package/dist/dts/components/halo-overlay.d.ts +13 -1
- package/dist/dts/components/halo-overlay.d.ts.map +1 -1
- package/dist/dts/components/orchestrating-driver/index.d.ts +2 -0
- package/dist/dts/components/orchestrating-driver/index.d.ts.map +1 -0
- package/dist/dts/components/orchestrating-driver/orchestrating-driver.d.ts +39 -0
- package/dist/dts/components/orchestrating-driver/orchestrating-driver.d.ts.map +1 -0
- package/dist/dts/components/popout-manager/index.d.ts +2 -0
- package/dist/dts/components/popout-manager/index.d.ts.map +1 -0
- package/dist/dts/components/popout-manager/popout-manager.d.ts +72 -0
- package/dist/dts/components/popout-manager/popout-manager.d.ts.map +1 -0
- package/dist/dts/config/config.d.ts +43 -15
- package/dist/dts/config/config.d.ts.map +1 -1
- package/dist/dts/config/fallback-agents.d.ts +20 -0
- package/dist/dts/config/fallback-agents.d.ts.map +1 -0
- package/dist/dts/config/index.d.ts +1 -0
- package/dist/dts/config/index.d.ts.map +1 -1
- package/dist/dts/index.d.ts +6 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/main/main.d.ts +122 -21
- package/dist/dts/main/main.d.ts.map +1 -1
- package/dist/dts/main/main.styles.d.ts.map +1 -1
- package/dist/dts/main/main.template.d.ts.map +1 -1
- package/dist/dts/main/main.types.d.ts +16 -0
- package/dist/dts/main/main.types.d.ts.map +1 -1
- package/dist/dts/state/ai-assistant-slice.d.ts +38 -0
- package/dist/dts/state/ai-assistant-slice.d.ts.map +1 -0
- package/dist/dts/state/driver-registry.d.ts +22 -0
- package/dist/dts/state/driver-registry.d.ts.map +1 -0
- package/dist/dts/state/session-store.d.ts +37 -0
- package/dist/dts/state/session-store.d.ts.map +1 -0
- package/dist/dts/suggestions/chat-suggestions.d.ts +7 -0
- package/dist/dts/suggestions/chat-suggestions.d.ts.map +1 -0
- package/dist/dts/types/ai-chat-widget.d.ts +3 -2
- package/dist/dts/types/ai-chat-widget.d.ts.map +1 -1
- package/dist/dts/utils/index.d.ts +1 -0
- package/dist/dts/utils/index.d.ts.map +1 -1
- package/dist/dts/utils/tool-fold.d.ts +133 -0
- package/dist/dts/utils/tool-fold.d.ts.map +1 -0
- package/dist/esm/components/ai-driver/ai-driver.js +1 -0
- package/dist/esm/components/ai-driver/index.js +1 -0
- package/dist/esm/components/chat-driver/chat-driver.js +499 -67
- package/dist/esm/components/chat-interaction-wrapper/chat-interaction-wrapper.js +2 -2
- package/dist/esm/components/chat-markdown/chat-markdown.js +1 -1
- package/dist/esm/components/halo-overlay.js +53 -7
- package/dist/esm/components/orchestrating-driver/index.js +1 -0
- package/dist/esm/components/orchestrating-driver/orchestrating-driver.js +247 -0
- package/dist/esm/components/popout-manager/index.js +1 -0
- package/dist/esm/components/popout-manager/popout-manager.js +126 -0
- package/dist/esm/config/fallback-agents.js +26 -0
- package/dist/esm/config/index.js +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/main/main.js +546 -112
- package/dist/esm/main/main.styles.js +200 -4
- package/dist/esm/main/main.template.js +163 -63
- package/dist/esm/state/ai-assistant-slice.js +54 -0
- package/dist/esm/state/driver-registry.js +46 -0
- package/dist/esm/state/session-store.js +39 -0
- package/dist/esm/suggestions/chat-suggestions.js +147 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/tool-fold.js +92 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/migration-FUI-2495.md +339 -0
- package/docs/sub_agent.md +310 -0
- package/package.json +16 -15
- package/src/channel/ai-activity-channel.ts +4 -20
- package/src/components/ai-driver/ai-driver.ts +69 -0
- package/src/components/ai-driver/index.ts +1 -0
- package/src/components/chat-driver/chat-driver.ts +600 -73
- package/src/components/chat-interaction-wrapper/chat-interaction-wrapper.ts +3 -3
- package/src/components/chat-markdown/chat-markdown.ts +1 -1
- package/src/components/halo-overlay.ts +45 -7
- package/src/components/orchestrating-driver/index.ts +1 -0
- package/src/components/orchestrating-driver/orchestrating-driver.ts +328 -0
- package/src/components/popout-manager/index.ts +1 -0
- package/src/components/popout-manager/popout-manager.ts +147 -0
- package/src/config/config.ts +45 -15
- package/src/config/fallback-agents.ts +29 -0
- package/src/config/index.ts +1 -0
- package/src/index.ts +6 -0
- package/src/main/main.styles.ts +200 -4
- package/src/main/main.template.ts +200 -80
- package/src/main/main.ts +567 -94
- package/src/main/main.types.ts +11 -0
- package/src/state/ai-assistant-slice.ts +80 -0
- package/src/state/driver-registry.ts +51 -0
- package/src/state/session-store.ts +56 -0
- package/src/suggestions/chat-suggestions.ts +158 -0
- package/src/types/ai-chat-widget.ts +4 -2
- package/src/utils/index.ts +1 -0
- package/src/utils/tool-fold.ts +181 -0
- package/docs/multi-agent-architecture.md +0 -198
|
@@ -1,12 +1,27 @@
|
|
|
1
|
+
import { isChatToolCallUnknown } from '@genesislcap/foundation-ai';
|
|
1
2
|
import type { ChatAttachment, ChatMessage, ChatToolCall } from '@genesislcap/foundation-ai';
|
|
2
|
-
import { html, repeat, when, ViewTemplate } from '@genesislcap/web-core';
|
|
3
|
+
import { html, ref, repeat, when, ViewTemplate } from '@genesislcap/web-core';
|
|
3
4
|
import type { FoundationAiAssistant } from './main';
|
|
4
5
|
import { ANIMATION_DEFS } from './main.types';
|
|
5
6
|
|
|
7
|
+
function unknownToolPayload(tc: ChatToolCall): string {
|
|
8
|
+
if (!isChatToolCallUnknown(tc)) return '';
|
|
9
|
+
const lines = [`${tc.name} — tool does not exist`];
|
|
10
|
+
if (tc.availableTools.length > 0) {
|
|
11
|
+
lines.push('Available tools:');
|
|
12
|
+
tc.availableTools.forEach((t) => lines.push(` • ${t}`));
|
|
13
|
+
}
|
|
14
|
+
return lines.join('\n');
|
|
15
|
+
}
|
|
16
|
+
|
|
6
17
|
const animationItemRenderer = (option: any): ViewTemplate => html`
|
|
7
18
|
<span part="option-label" title="${() => option.tooltip}">${() => option.label}</span>
|
|
8
19
|
`;
|
|
9
20
|
|
|
21
|
+
const HALO_SPEED_DEFAULT = 1.5;
|
|
22
|
+
const HALO_SPEED_ORCHESTRATING = 0.4;
|
|
23
|
+
const HALO_BORDER_SIZE_DEFAULT = 3;
|
|
24
|
+
|
|
10
25
|
const animationOptions = Object.entries(ANIMATION_DEFS).map(([value, def]) => ({
|
|
11
26
|
value,
|
|
12
27
|
label: def.label,
|
|
@@ -34,6 +49,8 @@ const genesisIconTemplate = html`
|
|
|
34
49
|
*/
|
|
35
50
|
const messageType = (m: ChatMessage): string => {
|
|
36
51
|
switch (true) {
|
|
52
|
+
case m.role === 'system-event':
|
|
53
|
+
return 'agent-switch';
|
|
37
54
|
case m.role === 'user':
|
|
38
55
|
return 'user';
|
|
39
56
|
case !!m.thinking:
|
|
@@ -64,17 +81,18 @@ export const FoundationAiAssistantTemplate = (
|
|
|
64
81
|
const multiselectTag = `${designSystemPrefix}-multiselect`;
|
|
65
82
|
const textareaTag = `${designSystemPrefix}-text-area`;
|
|
66
83
|
const iconTag = `${designSystemPrefix}-icon`;
|
|
84
|
+
const progressTag = `${designSystemPrefix}-progress`;
|
|
67
85
|
|
|
68
86
|
return html<FoundationAiAssistant>`
|
|
69
87
|
<div class="chat-wrapper" part="chat-wrapper">
|
|
70
88
|
${when(
|
|
71
|
-
(x) => !!x.chatConfig.acceptedFiles,
|
|
89
|
+
(x) => !!x.chatConfig.ui?.acceptedFiles,
|
|
72
90
|
html<FoundationAiAssistant>`
|
|
73
91
|
<input
|
|
74
92
|
class="file-input"
|
|
75
93
|
type="file"
|
|
76
94
|
multiple
|
|
77
|
-
accept=${(x) => x.chatConfig.acceptedFiles}
|
|
95
|
+
accept=${(x) => x.chatConfig.ui?.acceptedFiles}
|
|
78
96
|
@change=${(x, c) => x.handleFileSelect(c.event)}
|
|
79
97
|
/>
|
|
80
98
|
`,
|
|
@@ -82,23 +100,21 @@ export const FoundationAiAssistantTemplate = (
|
|
|
82
100
|
${when(
|
|
83
101
|
(x) =>
|
|
84
102
|
!!x.popoutMode ||
|
|
85
|
-
x.chatConfig.showToolCalls != null ||
|
|
86
|
-
x.chatConfig.showThinkingSteps != null ||
|
|
87
|
-
x.chatConfig.
|
|
88
|
-
x.chatConfig.
|
|
103
|
+
x.chatConfig.ui?.showToolCalls != null ||
|
|
104
|
+
x.chatConfig.ui?.showThinkingSteps != null ||
|
|
105
|
+
x.chatConfig.ui?.showAgentSwitchIndicator != null ||
|
|
106
|
+
x.chatConfig.ui?.allowDebugDownload === true ||
|
|
107
|
+
x.chatConfig.ui?.animations != null,
|
|
89
108
|
html<FoundationAiAssistant>`
|
|
90
109
|
<div
|
|
91
|
-
class="chat-header ${(x) => (x.popoutMode
|
|
110
|
+
class="chat-header ${(x) => (x.popoutMode !== 'collapse' ? 'draggable' : '')}"
|
|
92
111
|
part="chat-header"
|
|
93
112
|
@mousedown="${(x, c) => x.onChatHeaderMouseDown(c.event as MouseEvent)}"
|
|
94
113
|
>
|
|
95
114
|
${when(
|
|
96
|
-
(x) => !!
|
|
115
|
+
(x) => !!x.headerTitle,
|
|
97
116
|
html<FoundationAiAssistant>`
|
|
98
|
-
|
|
99
|
-
<span class="chat-title" part="chat-title">
|
|
100
|
-
${(x) => x.headerTitle ?? x.agents?.[0]?.name}
|
|
101
|
-
</span>
|
|
117
|
+
<span class="chat-title" part="chat-title">${(x) => x.headerTitle}</span>
|
|
102
118
|
`,
|
|
103
119
|
)}
|
|
104
120
|
<div class="header-actions" part="header-actions">
|
|
@@ -118,10 +134,11 @@ export const FoundationAiAssistantTemplate = (
|
|
|
118
134
|
)}
|
|
119
135
|
${when(
|
|
120
136
|
(x) =>
|
|
121
|
-
x.chatConfig.showToolCalls != null ||
|
|
122
|
-
x.chatConfig.showThinkingSteps != null ||
|
|
123
|
-
x.chatConfig.
|
|
124
|
-
x.chatConfig.
|
|
137
|
+
x.chatConfig.ui?.showToolCalls != null ||
|
|
138
|
+
x.chatConfig.ui?.showThinkingSteps != null ||
|
|
139
|
+
x.chatConfig.ui?.showAgentSwitchIndicator != null ||
|
|
140
|
+
x.chatConfig.ui?.allowDebugDownload === true ||
|
|
141
|
+
x.chatConfig.ui?.animations != null,
|
|
125
142
|
html<FoundationAiAssistant>`
|
|
126
143
|
<${buttonTag}
|
|
127
144
|
class="settings-button"
|
|
@@ -139,7 +156,7 @@ export const FoundationAiAssistantTemplate = (
|
|
|
139
156
|
html<FoundationAiAssistant>`
|
|
140
157
|
<div class="settings-panel" part="settings-panel">
|
|
141
158
|
${when(
|
|
142
|
-
(x) => x.chatConfig.showToolCalls != null,
|
|
159
|
+
(x) => x.chatConfig.ui?.showToolCalls != null,
|
|
143
160
|
html<FoundationAiAssistant>`
|
|
144
161
|
<${switchTag}
|
|
145
162
|
part="toggle-tool-calls"
|
|
@@ -149,7 +166,7 @@ export const FoundationAiAssistantTemplate = (
|
|
|
149
166
|
`,
|
|
150
167
|
)}
|
|
151
168
|
${when(
|
|
152
|
-
(x) => x.chatConfig.showThinkingSteps != null,
|
|
169
|
+
(x) => x.chatConfig.ui?.showThinkingSteps != null,
|
|
153
170
|
html<FoundationAiAssistant>`
|
|
154
171
|
<${switchTag}
|
|
155
172
|
part="toggle-thinking"
|
|
@@ -159,17 +176,27 @@ export const FoundationAiAssistantTemplate = (
|
|
|
159
176
|
`,
|
|
160
177
|
)}
|
|
161
178
|
${when(
|
|
162
|
-
(x) => x.chatConfig.
|
|
179
|
+
(x) => x.chatConfig.ui?.showAgentSwitchIndicator != null,
|
|
180
|
+
html<FoundationAiAssistant>`
|
|
181
|
+
<${switchTag}
|
|
182
|
+
part="toggle-agent-switch"
|
|
183
|
+
:checked=${(x) => x.showAgentSwitchIndicator}
|
|
184
|
+
@change=${(x) => x.toggleShowAgentSwitchIndicator()}
|
|
185
|
+
>Agents</${switchTag}>
|
|
186
|
+
`,
|
|
187
|
+
)}
|
|
188
|
+
${when(
|
|
189
|
+
(x) => x.chatConfig.ui?.allowDebugDownload === true,
|
|
163
190
|
html<FoundationAiAssistant>`
|
|
164
191
|
<${buttonTag}
|
|
165
192
|
part="download-button"
|
|
166
193
|
appearance="stealth"
|
|
167
|
-
@click=${(x) => x.
|
|
168
|
-
>Download
|
|
194
|
+
@click=${(x) => x.downloadDebugLog()}
|
|
195
|
+
>Download agent log</${buttonTag}>
|
|
169
196
|
`,
|
|
170
197
|
)}
|
|
171
198
|
${when(
|
|
172
|
-
(x) => x.chatConfig.animations?.userConfigurable === true,
|
|
199
|
+
(x) => x.chatConfig.ui?.animations?.userConfigurable === true,
|
|
173
200
|
html<FoundationAiAssistant>`
|
|
174
201
|
<div class="settings-animations">
|
|
175
202
|
<span class="settings-label">Animations</span>
|
|
@@ -191,77 +218,156 @@ export const FoundationAiAssistantTemplate = (
|
|
|
191
218
|
)}
|
|
192
219
|
`,
|
|
193
220
|
)}
|
|
221
|
+
${when(
|
|
222
|
+
(x) =>
|
|
223
|
+
x.settingsOpen &&
|
|
224
|
+
x.chatConfig.ui?.showContextUsage !== false &&
|
|
225
|
+
x.contextTokens != null &&
|
|
226
|
+
x.contextLimit != null,
|
|
227
|
+
html<FoundationAiAssistant>`
|
|
228
|
+
<div class="context-usage" part="context-usage">
|
|
229
|
+
<div class="context-usage-header">
|
|
230
|
+
<span class="context-usage-label">Context window</span>
|
|
231
|
+
<span class="context-usage-tokens">
|
|
232
|
+
${(x) => x.contextTokens!.toLocaleString()} /
|
|
233
|
+
${(x) => x.contextLimit!.toLocaleString()} tokens
|
|
234
|
+
(${(x) => Math.round((x.contextTokens! / x.contextLimit!) * 100)}%)
|
|
235
|
+
</span>
|
|
236
|
+
</div>
|
|
237
|
+
<${progressTag}
|
|
238
|
+
part="context-progress"
|
|
239
|
+
value="${(x) => Math.min(100, Math.round((x.contextTokens! / x.contextLimit!) * 100))}"
|
|
240
|
+
></${progressTag}>
|
|
241
|
+
</div>
|
|
242
|
+
`,
|
|
243
|
+
)}
|
|
194
244
|
|
|
195
|
-
<div class="
|
|
245
|
+
<div class="splash-wrapper" part="splash">
|
|
246
|
+
<slot name="splash"></slot>
|
|
247
|
+
</div>
|
|
248
|
+
|
|
249
|
+
<div class="messages" part="messages" ${ref('messagesEl')}>
|
|
196
250
|
|
|
197
251
|
${repeat(
|
|
198
252
|
(x) => x.visibleMessages,
|
|
199
253
|
html<ChatMessage, FoundationAiAssistant>`
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
<
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
/>
|
|
213
|
-
`,
|
|
214
|
-
)}
|
|
215
|
-
${when(
|
|
216
|
-
(m, c) => !(c.parent as FoundationAiAssistant).imageSrc,
|
|
217
|
-
genesisIconTemplate,
|
|
218
|
-
)}
|
|
219
|
-
</div>
|
|
220
|
-
`,
|
|
221
|
-
)}
|
|
222
|
-
<div class="message ${(m) => messageType(m)}">
|
|
223
|
-
<div class="sender">${(m) => senderLabel[messageType(m)]}</div>
|
|
224
|
-
<div class="content">
|
|
254
|
+
${when(
|
|
255
|
+
(m) => m.role === 'system-event',
|
|
256
|
+
html<ChatMessage, FoundationAiAssistant>`
|
|
257
|
+
<div class="agent-switch-indicator" part="agent-switch-indicator">
|
|
258
|
+
<span class="agent-switch-label">${(m) => m.content}</span>
|
|
259
|
+
</div>
|
|
260
|
+
`,
|
|
261
|
+
)}
|
|
262
|
+
${when(
|
|
263
|
+
(m) => m.role !== 'system-event',
|
|
264
|
+
html<ChatMessage, FoundationAiAssistant>`
|
|
265
|
+
<div class="message-row ${(m) => messageType(m)}">
|
|
225
266
|
${when(
|
|
226
|
-
(m) => m.
|
|
267
|
+
(m) => m.role !== 'user',
|
|
227
268
|
html<ChatMessage, FoundationAiAssistant>`
|
|
228
|
-
<
|
|
269
|
+
<div class="avatar ${(m) => messageType(m)}">
|
|
270
|
+
${when(
|
|
271
|
+
(m, c) => !!(c.parent as FoundationAiAssistant).imageSrc,
|
|
272
|
+
html<ChatMessage, FoundationAiAssistant>`
|
|
273
|
+
<img
|
|
274
|
+
src="${(m, c) => (c.parent as FoundationAiAssistant).imageSrc}"
|
|
275
|
+
alt="Assistant"
|
|
276
|
+
class="avatar-img"
|
|
277
|
+
/>
|
|
278
|
+
`,
|
|
279
|
+
)}
|
|
280
|
+
${when(
|
|
281
|
+
(m, c) => !(c.parent as FoundationAiAssistant).imageSrc,
|
|
282
|
+
genesisIconTemplate,
|
|
283
|
+
)}
|
|
284
|
+
</div>
|
|
229
285
|
`,
|
|
230
286
|
)}
|
|
231
|
-
${
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
287
|
+
<div class="message ${(m) => messageType(m)}">
|
|
288
|
+
<div class="sender">
|
|
289
|
+
${(m, c) =>
|
|
290
|
+
messageType(m) === 'ai-function' &&
|
|
291
|
+
m.agentName &&
|
|
292
|
+
(c.parent as FoundationAiAssistant).showAgentSwitchIndicator
|
|
293
|
+
? `Tool Call · ${m.agentName}`
|
|
294
|
+
: senderLabel[messageType(m)]}
|
|
295
|
+
</div>
|
|
296
|
+
<div class="content">
|
|
297
|
+
${when(
|
|
298
|
+
(m) => m.content,
|
|
299
|
+
html<ChatMessage, FoundationAiAssistant>`
|
|
300
|
+
<ai-chat-markdown :content="${(m) => m.content}"></ai-chat-markdown>
|
|
239
301
|
`,
|
|
240
302
|
)}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
303
|
+
${when(
|
|
304
|
+
(m) => m.toolCalls,
|
|
305
|
+
html<ChatMessage, FoundationAiAssistant>`
|
|
306
|
+
${repeat(
|
|
307
|
+
(m) => m.toolCalls ?? [],
|
|
308
|
+
html<ChatToolCall>`
|
|
309
|
+
${when(
|
|
310
|
+
(tc) => tc.foldEvent === 'open',
|
|
311
|
+
html<ChatToolCall>`
|
|
312
|
+
<pre class="payload fold-event fold-open">
|
|
313
|
+
► ${(tc) => tc.name}</pre
|
|
314
|
+
>
|
|
315
|
+
`,
|
|
316
|
+
)}
|
|
317
|
+
${when(
|
|
318
|
+
(tc) => tc.foldEvent === 'close',
|
|
319
|
+
html<ChatToolCall>`
|
|
320
|
+
<pre class="payload fold-event fold-close">
|
|
321
|
+
◄ ${(tc) => tc.name}</pre
|
|
322
|
+
>
|
|
323
|
+
`,
|
|
324
|
+
)}
|
|
325
|
+
${when(
|
|
326
|
+
(tc) => !tc.foldEvent && !isChatToolCallUnknown(tc),
|
|
327
|
+
html<ChatToolCall>`
|
|
328
|
+
<pre class="payload">
|
|
329
|
+
${(tc) => (tc.foldPath?.length ? `${tc.foldPath.join(' › ')} › ` : '')}<strong>${(tc) =>
|
|
330
|
+
tc.name}</strong>(${(tc) =>
|
|
331
|
+
JSON.stringify(tc.args, null, 2)})</pre
|
|
332
|
+
>
|
|
333
|
+
`,
|
|
334
|
+
)}
|
|
335
|
+
${when(
|
|
336
|
+
isChatToolCallUnknown,
|
|
337
|
+
html<ChatToolCall>`
|
|
338
|
+
<pre class="payload unknown-tool">
|
|
339
|
+
${(tc) => unknownToolPayload(tc)}</pre
|
|
340
|
+
>
|
|
341
|
+
`,
|
|
342
|
+
)}
|
|
343
|
+
`,
|
|
344
|
+
)}
|
|
345
|
+
`,
|
|
346
|
+
)}
|
|
347
|
+
${when(
|
|
348
|
+
(m) => m.interaction,
|
|
349
|
+
html<ChatMessage, FoundationAiAssistant>`
|
|
350
|
+
<ai-chat-interaction-wrapper
|
|
351
|
+
:componentName=${(m) => m.interaction!.componentName}
|
|
352
|
+
:data=${(m) => m.interaction!.data}
|
|
353
|
+
:interactionId=${(m) => m.interaction!.interactionId}
|
|
354
|
+
:resolved=${(m) => m.interaction!.resolved}
|
|
355
|
+
@interaction-completed=${(m, c) =>
|
|
356
|
+
c.parent.handleInteractionCompleted(c.event)}
|
|
357
|
+
></ai-chat-interaction-wrapper>
|
|
358
|
+
`,
|
|
359
|
+
)}
|
|
360
|
+
</div>
|
|
361
|
+
</div>
|
|
256
362
|
</div>
|
|
257
|
-
|
|
258
|
-
|
|
363
|
+
`,
|
|
364
|
+
)}
|
|
259
365
|
`,
|
|
260
366
|
)}
|
|
261
367
|
${when(
|
|
262
368
|
(x) =>
|
|
263
369
|
x.showLoadingIndicator &&
|
|
264
|
-
(x.chatConfig.animations == null || x.enabledAnimations.includes('loading')),
|
|
370
|
+
(x.chatConfig.ui?.animations == null || x.enabledAnimations.includes('loading')),
|
|
265
371
|
html<FoundationAiAssistant>`
|
|
266
372
|
<div class="message-row ai" part="thinking">
|
|
267
373
|
<div class="avatar">
|
|
@@ -322,15 +428,26 @@ export const FoundationAiAssistantTemplate = (
|
|
|
322
428
|
`,
|
|
323
429
|
)}
|
|
324
430
|
|
|
431
|
+
${when(
|
|
432
|
+
(x) => x.chatConfig.suggestions?.behavior !== 'never',
|
|
433
|
+
html<FoundationAiAssistant>`
|
|
434
|
+
<chat-suggestions
|
|
435
|
+
:state="${(x) => x.suggestionsState}"
|
|
436
|
+
@suggestion-clicked="${(x, c) =>
|
|
437
|
+
x.handleSuggestionClick((c.event as CustomEvent).detail)}"
|
|
438
|
+
></chat-suggestions>
|
|
439
|
+
`,
|
|
440
|
+
)}
|
|
441
|
+
|
|
325
442
|
<div class="input-row" part="input-row">
|
|
326
443
|
${when(
|
|
327
|
-
(x) => !!x.chatConfig.acceptedFiles,
|
|
444
|
+
(x) => !!x.chatConfig.ui?.acceptedFiles,
|
|
328
445
|
html<FoundationAiAssistant>`
|
|
329
446
|
<${buttonTag}
|
|
330
447
|
class="attach-button"
|
|
331
448
|
part="attach-button"
|
|
332
449
|
appearance="stealth"
|
|
333
|
-
title=${(x) => `Attach file (${x.chatConfig.acceptedFiles})`}
|
|
450
|
+
title=${(x) => `Attach file (${x.chatConfig.ui?.acceptedFiles})`}
|
|
334
451
|
?disabled=${(x) => x.state === 'loading'}
|
|
335
452
|
@click=${(x) => x.triggerFileInput()}
|
|
336
453
|
><${iconTag} name="paperclip"></${iconTag}></${buttonTag}>
|
|
@@ -364,7 +481,10 @@ export const FoundationAiAssistantTemplate = (
|
|
|
364
481
|
</div>
|
|
365
482
|
<ai-halo-overlay
|
|
366
483
|
part="halo-overlay"
|
|
367
|
-
?active=${(x) => x.showHalo && x.enabledAnimations.includes('halo')}
|
|
484
|
+
?active=${(x) => x.showHalo !== 'no' && x.enabledAnimations.includes('halo')}
|
|
485
|
+
:speed="${(x) => (x.showHalo === 'orchestrating' ? HALO_SPEED_ORCHESTRATING : HALO_SPEED_DEFAULT)}"
|
|
486
|
+
direction="${(x) => (x.showHalo === 'orchestrating' ? 'ccw' : 'cw')}"
|
|
487
|
+
:borderSize="${(x) => (x.showHalo === 'orchestrating' ? 2 : HALO_BORDER_SIZE_DEFAULT)}"
|
|
368
488
|
></ai-halo-overlay>
|
|
369
489
|
</div>
|
|
370
490
|
`;
|