@stack-spot/ai-chat-widget 0.5.0 → 0.7.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.
Files changed (73) hide show
  1. package/dist/StackspotAIWidget.d.ts.map +1 -1
  2. package/dist/StackspotAIWidget.js +3 -2
  3. package/dist/StackspotAIWidget.js.map +1 -1
  4. package/dist/features.d.ts +1 -1
  5. package/dist/features.d.ts.map +1 -1
  6. package/dist/features.js +1 -0
  7. package/dist/features.js.map +1 -1
  8. package/dist/state/ChatEntry.d.ts +1 -1
  9. package/dist/state/ChatEntry.d.ts.map +1 -1
  10. package/dist/state/ChatEntry.js +2 -2
  11. package/dist/state/ChatEntry.js.map +1 -1
  12. package/dist/state/ChatState.d.ts +15 -1
  13. package/dist/state/ChatState.d.ts.map +1 -1
  14. package/dist/state/ChatState.js.map +1 -1
  15. package/dist/state/WidgetState.d.ts +0 -4
  16. package/dist/state/WidgetState.d.ts.map +1 -1
  17. package/dist/state/WidgetState.js.map +1 -1
  18. package/dist/utils/chat.d.ts.map +1 -1
  19. package/dist/utils/chat.js +2 -3
  20. package/dist/utils/chat.js.map +1 -1
  21. package/dist/utils/programming-languages.d.ts +6 -0
  22. package/dist/utils/programming-languages.d.ts.map +1 -0
  23. package/dist/utils/programming-languages.js +463 -0
  24. package/dist/utils/programming-languages.js.map +1 -0
  25. package/dist/views/Agents.js +4 -5
  26. package/dist/views/Agents.js.map +1 -1
  27. package/dist/views/Chat/ChatMessage.d.ts.map +1 -1
  28. package/dist/views/Chat/ChatMessage.js +5 -3
  29. package/dist/views/Chat/ChatMessage.js.map +1 -1
  30. package/dist/views/Chat/styled.d.ts.map +1 -1
  31. package/dist/views/Chat/styled.js +8 -0
  32. package/dist/views/Chat/styled.js.map +1 -1
  33. package/dist/views/ChatHistory/HistoryItem.d.ts.map +1 -1
  34. package/dist/views/ChatHistory/HistoryItem.js +4 -2
  35. package/dist/views/ChatHistory/HistoryItem.js.map +1 -1
  36. package/dist/views/ChatHistory/utils.d.ts +2 -1
  37. package/dist/views/ChatHistory/utils.d.ts.map +1 -1
  38. package/dist/views/ChatHistory/utils.js.map +1 -1
  39. package/dist/views/Editor.d.ts.map +1 -1
  40. package/dist/views/Editor.js +87 -1
  41. package/dist/views/Editor.js.map +1 -1
  42. package/dist/views/MessageInput/ButtonGroup.d.ts.map +1 -1
  43. package/dist/views/MessageInput/ButtonGroup.js +2 -2
  44. package/dist/views/MessageInput/ButtonGroup.js.map +1 -1
  45. package/dist/views/MessageInput/InfoBar.d.ts.map +1 -1
  46. package/dist/views/MessageInput/InfoBar.js +9 -2
  47. package/dist/views/MessageInput/InfoBar.js.map +1 -1
  48. package/dist/views/MessageInput/dictionary.d.ts +1 -1
  49. package/dist/views/MessageInput/dictionary.d.ts.map +1 -1
  50. package/dist/views/MessageInput/dictionary.js +4 -0
  51. package/dist/views/MessageInput/dictionary.js.map +1 -1
  52. package/dist/views/MessageInput/index.d.ts.map +1 -1
  53. package/dist/views/MessageInput/index.js +4 -1
  54. package/dist/views/MessageInput/index.js.map +1 -1
  55. package/package.json +3 -1
  56. package/src/StackspotAIWidget.tsx +3 -1
  57. package/src/chat-interceptors/send-message.ts +1 -1
  58. package/src/features.ts +2 -1
  59. package/src/state/ChatEntry.ts +2 -2
  60. package/src/state/ChatState.ts +13 -1
  61. package/src/state/WidgetState.ts +0 -4
  62. package/src/utils/chat.ts +2 -3
  63. package/src/utils/programming-languages.ts +462 -0
  64. package/src/views/Agents.tsx +4 -4
  65. package/src/views/Chat/ChatMessage.tsx +16 -7
  66. package/src/views/Chat/styled.ts +8 -0
  67. package/src/views/ChatHistory/HistoryItem.tsx +4 -2
  68. package/src/views/ChatHistory/utils.ts +2 -1
  69. package/src/views/Editor.tsx +126 -1
  70. package/src/views/MessageInput/ButtonGroup.tsx +6 -1
  71. package/src/views/MessageInput/InfoBar.tsx +14 -1
  72. package/src/views/MessageInput/dictionary.ts +4 -0
  73. package/src/views/MessageInput/index.tsx +4 -1
@@ -0,0 +1,462 @@
1
+ export const languages = [
2
+ {
3
+ 'value': 'abap',
4
+ 'label': 'ABAP',
5
+ 'extensions': ['.abap'],
6
+ },
7
+ {
8
+ 'value': 'ada',
9
+ 'label': 'ADA',
10
+ 'extensions': ['.ada', '.adb', '.ads'],
11
+ },
12
+ {
13
+ 'value': 'aes',
14
+ 'label': 'AES - Advanced Encryption Standard',
15
+ 'extensions': ['.aes'],
16
+ },
17
+ {
18
+ 'value': 'apex',
19
+ 'label': 'Apex',
20
+ 'extensions': ['.cls'],
21
+ },
22
+ {
23
+ 'value': 'azcli',
24
+ 'label': 'Azure CLI',
25
+ 'extensions': ['.azcli'],
26
+ },
27
+ {
28
+ 'value': 'bat',
29
+ 'label': 'BAT',
30
+ 'extensions': ['.bat', '.cmd'],
31
+ },
32
+ {
33
+ 'value': 'bicep',
34
+ 'label': 'Bicep',
35
+ 'extensions': ['.bicep'],
36
+ },
37
+ {
38
+ 'value': 'c',
39
+ 'label': 'C',
40
+ 'extensions': ['.c', '.h'],
41
+ },
42
+ {
43
+ 'value': 'csharp',
44
+ 'label': 'C#',
45
+ 'extensions': ['.cs'],
46
+ },
47
+ {
48
+ 'value': 'cpp',
49
+ 'label': 'C++',
50
+ 'extensions': ['.cpp', '.cc', '.cxx', '.h', '.hh', '.hpp', '.hxx'],
51
+ },
52
+ {
53
+ 'value': 'cameligo',
54
+ 'label': 'Cameligo',
55
+ 'extensions': ['.mligo'],
56
+ },
57
+ {
58
+ 'value': 'clojure',
59
+ 'label': 'Clojure',
60
+ 'extensions': ['.clj', '.cljs', '.cljc', '.edn'],
61
+ },
62
+ {
63
+ 'value': 'cobol',
64
+ 'label': 'COBOL',
65
+ 'extensions': ['.cob', '.cbl'],
66
+ },
67
+ {
68
+ 'value': 'coffeescript',
69
+ 'label': 'CoffeeScript',
70
+ 'extensions': ['.coffee'],
71
+ },
72
+ {
73
+ 'value': 'csp',
74
+ 'label': 'CSP',
75
+ 'extensions': ['.csp'],
76
+ },
77
+ {
78
+ 'value': 'css',
79
+ 'label': 'CSS',
80
+ 'extensions': ['.css'],
81
+ },
82
+ {
83
+ 'value': 'd',
84
+ 'label': 'D',
85
+ 'extensions': ['.d'],
86
+ },
87
+ {
88
+ 'value': 'dart',
89
+ 'label': 'Dart',
90
+ 'extensions': ['.dart'],
91
+ },
92
+ {
93
+ 'value': 'dockerfile',
94
+ 'label': 'Dockerfile',
95
+ 'extensions': ['.dockerfile'],
96
+ },
97
+ {
98
+ 'value': 'ecl',
99
+ 'label': 'ECL',
100
+ 'extensions': ['.ecl'],
101
+ },
102
+ {
103
+ 'value': 'elixir',
104
+ 'label': 'Elixir',
105
+ 'extensions': ['.ex', '.exs'],
106
+ },
107
+ {
108
+ 'value': 'erlang',
109
+ 'label': 'Erlang',
110
+ 'extensions': ['.erl', '.hrl'],
111
+ },
112
+ {
113
+ 'value': 'fsharp',
114
+ 'label': 'F#',
115
+ 'extensions': ['.fs', '.fsi', '.ml', '.mli'],
116
+ },
117
+ {
118
+ 'value': 'flow9',
119
+ 'label': 'Flow 9',
120
+ 'extensions': ['.flow'],
121
+ },
122
+ {
123
+ 'value': 'fortran',
124
+ 'label': 'Fortran',
125
+ 'extensions': ['.f90', '.f', '.for', '.f77'],
126
+ },
127
+ {
128
+ 'value': 'freemarker2',
129
+ 'label': 'Freemarker 2',
130
+ 'extensions': ['.ftl'],
131
+ },
132
+ {
133
+ 'value': 'go',
134
+ 'label': 'GO',
135
+ 'extensions': ['.go'],
136
+ },
137
+ {
138
+ 'value': 'graphql',
139
+ 'label': 'GraphQL',
140
+ 'extensions': ['.graphql', '.gql'],
141
+ },
142
+ {
143
+ 'value': 'groovy',
144
+ 'label': 'Groovy',
145
+ 'extensions': ['.groovy', '.gvy', '.gy', '.gsh'],
146
+ },
147
+ {
148
+ 'value': 'handlebars',
149
+ 'label': 'Handlebars',
150
+ 'extensions': ['.handlebars', '.hbs'],
151
+ },
152
+ {
153
+ 'value': 'haskell',
154
+ 'label': 'Haskell',
155
+ 'extensions': ['.hs'],
156
+ },
157
+ {
158
+ 'value': 'hcl',
159
+ 'label': 'HCL',
160
+ 'extensions': ['.hcl', '.tf'],
161
+ },
162
+ {
163
+ 'value': 'html',
164
+ 'label': 'HTML',
165
+ 'extensions': ['.html', '.htm'],
166
+ },
167
+ {
168
+ 'value': 'ini',
169
+ 'label': 'INI',
170
+ 'extensions': ['.ini'],
171
+ },
172
+ {
173
+ 'value': 'java',
174
+ 'label': 'Java',
175
+ 'extensions': ['.java'],
176
+ },
177
+ {
178
+ 'value': 'javascript',
179
+ 'label': 'JavaScript',
180
+ 'extensions': ['.js', '.mjs', '.jsx'],
181
+ },
182
+ {
183
+ 'value': 'json',
184
+ 'label': 'JSON',
185
+ 'extensions': ['.json'],
186
+ },
187
+ {
188
+ 'value': 'julia',
189
+ 'label': 'Julia',
190
+ 'extensions': ['.jl'],
191
+ },
192
+ {
193
+ 'value': 'kotlin',
194
+ 'label': 'Kotlin',
195
+ 'extensions': ['.kt', '.kts'],
196
+ },
197
+ {
198
+ 'value': 'less',
199
+ 'label': 'LESS',
200
+ 'extensions': ['.less'],
201
+ },
202
+ {
203
+ 'value': 'lexon',
204
+ 'label': 'Lexon',
205
+ 'extensions': ['.lex'],
206
+ },
207
+ {
208
+ 'value': 'liquid',
209
+ 'label': 'Liquid',
210
+ 'extensions': ['.liquid'],
211
+ },
212
+ {
213
+ 'value': 'lua',
214
+ 'label': 'Lua',
215
+ 'extensions': ['.lua'],
216
+ },
217
+ {
218
+ 'value': 'm3',
219
+ 'label': 'M3',
220
+ 'extensions': ['.m3'],
221
+ },
222
+ {
223
+ 'value': 'markdown',
224
+ 'label': 'Markdown',
225
+ 'extensions': ['.md'],
226
+ },
227
+ {
228
+ 'value': 'msdax',
229
+ 'label': 'Microsoft DAX',
230
+ 'extensions': ['.dax'],
231
+ },
232
+ {
233
+ 'value': 'mips',
234
+ 'label': 'MIPS Assembly Language',
235
+ 'extensions': ['.asm'],
236
+ },
237
+ {
238
+ 'value': 'mysql',
239
+ 'label': 'MySQL',
240
+ 'extensions': ['.sql'],
241
+ },
242
+ {
243
+ 'value': 'objective-c',
244
+ 'label': 'Objective-C',
245
+ 'extensions': ['.m', '.h'],
246
+ },
247
+ {
248
+ 'value': 'ocaml',
249
+ 'label': 'OCAML',
250
+ 'extensions': ['.ml', '.mli'],
251
+ },
252
+ {
253
+ 'value': 'octave',
254
+ 'label': 'Octave',
255
+ 'extensions': ['.m'],
256
+ },
257
+ {
258
+ 'value': 'pascal',
259
+ 'label': 'Pascal',
260
+ 'extensions': ['.pas', '.pp'],
261
+ },
262
+ {
263
+ 'value': 'pascaligo',
264
+ 'label': 'Pascaligo',
265
+ 'extensions': ['.ligo'],
266
+ },
267
+ {
268
+ 'value': 'perl',
269
+ 'label': 'Perl',
270
+ 'extensions': ['.pl', '.pm'],
271
+ },
272
+ {
273
+ 'value': 'php',
274
+ 'label': 'PHP',
275
+ 'extensions': ['.php'],
276
+ },
277
+ {
278
+ 'value': 'pla',
279
+ 'label': 'PLA',
280
+ 'extensions': ['.pla'],
281
+ },
282
+ {
283
+ 'value': 'plaintext',
284
+ 'label': 'Plain Text',
285
+ 'extensions': ['.txt'],
286
+ },
287
+ {
288
+ 'value': 'pgsql',
289
+ 'label': 'PostgreSQL',
290
+ 'extensions': ['.sql'],
291
+ },
292
+ {
293
+ 'value': 'postiats',
294
+ 'label': 'Postiats',
295
+ 'extensions': ['.dats', '.sats', '.hats'],
296
+ },
297
+ {
298
+ 'value': 'powerquery',
299
+ 'label': 'Power Query',
300
+ 'extensions': ['.pq'],
301
+ },
302
+ {
303
+ 'value': 'powershell',
304
+ 'label': 'PowerShell',
305
+ 'extensions': ['.ps1', '.psm1', '.psd1'],
306
+ },
307
+ {
308
+ 'value': 'proto',
309
+ 'label': 'Proto',
310
+ 'extensions': ['.proto'],
311
+ },
312
+ {
313
+ 'value': 'pug',
314
+ 'label': 'PUG',
315
+ 'extensions': ['.pug'],
316
+ },
317
+ {
318
+ 'value': 'python',
319
+ 'label': 'Python',
320
+ 'extensions': ['.py'],
321
+ },
322
+ {
323
+ 'value': 'qsharp',
324
+ 'label': 'Q#',
325
+ 'extensions': ['.qs'],
326
+ },
327
+ {
328
+ 'value': 'r',
329
+ 'label': 'R',
330
+ 'extensions': ['.r'],
331
+ },
332
+ {
333
+ 'value': 'racket',
334
+ 'label': 'Racket',
335
+ 'extensions': ['.rkt'],
336
+ },
337
+ {
338
+ 'value': 'razor',
339
+ 'label': 'Razor',
340
+ 'extensions': ['.cshtml'],
341
+ },
342
+ {
343
+ 'value': 'redis',
344
+ 'label': 'Redis',
345
+ 'extensions': ['.redis'],
346
+ },
347
+ {
348
+ 'value': 'redshift',
349
+ 'label': 'Redshift',
350
+ 'extensions': ['.sql'],
351
+ },
352
+ {
353
+ 'value': 'restructuredtext',
354
+ 'label': 'Restructured Text',
355
+ 'extensions': ['.rst'],
356
+ },
357
+ {
358
+ 'value': 'ruby',
359
+ 'label': 'Ruby',
360
+ 'extensions': ['.rb'],
361
+ },
362
+ {
363
+ 'value': 'rust',
364
+ 'label': 'Rust',
365
+ 'extensions': ['.rs'],
366
+ },
367
+ {
368
+ 'value': 'sb',
369
+ 'label': 'SB',
370
+ 'extensions': ['.sb'],
371
+ },
372
+ {
373
+ 'value': 'sbcl',
374
+ 'label': 'SBCL',
375
+ 'extensions': ['.lisp'],
376
+ },
377
+ {
378
+ 'value': 'scala',
379
+ 'label': 'Scala',
380
+ 'extensions': ['.scala'],
381
+ },
382
+ {
383
+ 'value': 'scheme',
384
+ 'label': 'Scheme',
385
+ 'extensions': ['.scm'],
386
+ },
387
+ {
388
+ 'value': 'scss',
389
+ 'label': 'SCSS',
390
+ 'extensions': ['.scss'],
391
+ },
392
+ {
393
+ 'value': 'shell',
394
+ 'label': 'Shell',
395
+ 'extensions': ['.sh'],
396
+ },
397
+ {
398
+ 'value': 'sol',
399
+ 'label': 'SOL',
400
+ 'extensions': ['.sol'],
401
+ },
402
+ {
403
+ 'value': 'sparql',
404
+ 'label': 'SPARQL',
405
+ 'extensions': ['.rq'],
406
+ },
407
+ {
408
+ 'value': 'sql',
409
+ 'label': 'SQL',
410
+ 'extensions': ['.sql'],
411
+ },
412
+ {
413
+ 'value': 'st',
414
+ 'label': 'ST',
415
+ 'extensions': ['.st'],
416
+ },
417
+ {
418
+ 'value': 'swift',
419
+ 'label': 'Swift',
420
+ 'extensions': ['.swift'],
421
+ },
422
+ {
423
+ 'value': 'systemverilog',
424
+ 'label': 'System Verilog',
425
+ 'extensions': ['.sv'],
426
+ },
427
+ {
428
+ 'value': 'tcl',
429
+ 'label': 'TCL',
430
+ 'extensions': ['.tcl'],
431
+ },
432
+ {
433
+ 'value': 'twig',
434
+ 'label': 'Twig',
435
+ 'extensions': ['.twig'],
436
+ },
437
+ {
438
+ 'value': 'typescript',
439
+ 'label': 'TypeScript',
440
+ 'extensions': ['.ts', '.tsx'],
441
+ },
442
+ {
443
+ 'value': 'vb',
444
+ 'label': 'VB',
445
+ 'extensions': ['.vb'],
446
+ },
447
+ {
448
+ 'value': 'verilog',
449
+ 'label': 'Verilog',
450
+ 'extensions': ['.v'],
451
+ },
452
+ {
453
+ 'value': 'xml',
454
+ 'label': 'XML',
455
+ 'extensions': ['.xml'],
456
+ },
457
+ {
458
+ 'value': 'yaml',
459
+ 'label': 'YAML',
460
+ 'extensions': ['.yaml', '.yml'],
461
+ },
462
+ ]
@@ -100,7 +100,7 @@ const AgentsTab = ({ visibility }: { visibility: VisibilityLevel | 'BUILT-IN' })
100
100
  const chat = useCurrentChat()
101
101
  const [filter, setFilter] = useState('')
102
102
  const defaultAgent = useMemo(() => ({
103
- name: t.defaultAgentName,
103
+ name: 'Stackspot AI',
104
104
  description: t.defaultAgentDescription,
105
105
  llm_config: { model_slug: 'gpt4o' },
106
106
  } as AgentResponse), [])
@@ -115,7 +115,9 @@ const AgentsTab = ({ visibility }: { visibility: VisibilityLevel | 'BUILT-IN' })
115
115
  )
116
116
 
117
117
  function submit() {
118
- if (value) chat.set('agent', value.id ? { id: value.id, label: value.name, image: value.avatar } : undefined)
118
+ if (value) {
119
+ chat.set('agent', value.id ? { id: value.id, label: value.name, image: value.avatar, builtIn: visibility === 'BUILT-IN' } : undefined)
120
+ }
119
121
  close()
120
122
  }
121
123
 
@@ -179,7 +181,6 @@ const dictionary = {
179
181
  noSearchResultsDescription: 'Please, try another search term.',
180
182
  noData: 'There are no agents in this category yet.',
181
183
  noDataDescription: 'Use the tabs above to try other categories or use the AI portal to create new agents.',
182
- defaultAgentName: 'Stackspot AI (default)',
183
184
  defaultAgentDescription: 'The StackSpot CodeGen is an advanced artificial intelligence agent designed to optimize and accelerate software development. Integrated directly into your integrated development environment, StackSpot CodeGen offers real-time code suggestions, helping developers write high-quality code more efficiently. With robust features such as creating Stacks AI, customized knowledge sources, and quick commands, StackSpot CodeGen contextualizes your development needs to provide the best answers and code suggestions.',
184
185
  },
185
186
  pt: {
@@ -194,7 +195,6 @@ const dictionary = {
194
195
  noSearchResultsDescription: 'Por favor, tente outra busca.',
195
196
  noData: 'Ainda não há agentes nesta categoria.',
196
197
  noDataDescription: 'Use as abas acima para tentar outras categorias ou use o Portal AI para criar novos agentes.',
197
- defaultAgentName: 'Stackspot AI (padrão)',
198
198
  defaultAgentDescription: 'O StackSpot CodeGen é um agente de inteligência artificial avançado projetado para otimizar e acelerar o desenvolvimento de software. Integrado diretamente ao seu ambiente de desenvolvimento, o StackSpot CodeGen oferece sugestões de código em tempo real, ajudando os desenvolvedores a escreverem código de alta qualidade de forma mais eficiente. Com recursos robustos, como a criação de Stacks AI, Knowledge Sources personalizadas e comandos rápidos, o StackSpot CodeGen contextualiza suas necessidades de desenvolvimento para fornecer as melhores respostas e sugestões de código.',
199
199
  },
200
200
  } satisfies Dictionary
@@ -1,5 +1,5 @@
1
1
  import { Button, IconBox, Text } from '@citric/core'
2
- import { Dislike, DislikeFill, Like, LikeFill, TimesCircle } from '@citric/icons'
2
+ import { Copy, Dislike, DislikeFill, Like, LikeFill, TimesCircle } from '@citric/icons'
3
3
  import { Avatar, IconButton } from '@citric/ui'
4
4
  import { aiClient } from '@stack-spot/portal-network'
5
5
  import { Dictionary, useTranslate } from '@stack-spot/portal-translate'
@@ -77,13 +77,20 @@ export const ChatMessage = ({ message, username }: { message: ChatEntry, usernam
77
77
  ))}</ul>
78
78
  </div>}
79
79
  <div className="message-footer">
80
- {entry.agentType === 'bot' && entry.messageId && !entry.error && <div className="message-actions">
81
- <IconButton title={t.like} aria-label={t.like} onClick={like}>
82
- {liked === true ? <LikeFill /> : <Like />}
83
- </IconButton>
84
- <IconButton title={t.dislike} aria-label={t.dislike} onClick={dislike}>
85
- {liked === false ? <DislikeFill /> : <Dislike />}
80
+ {entry.agentType === 'bot' && !entry.error && <div className="message-actions">
81
+ <IconButton title={t.copy} aria-label={t.copy} onClick={() => navigator.clipboard.writeText(entry.content)}>
82
+ <Copy />
86
83
  </IconButton>
84
+ {entry.messageId && (
85
+ <>
86
+ <IconButton title={t.like} aria-label={t.like} onClick={like}>
87
+ {liked === true ? <LikeFill /> : <Like />}
88
+ </IconButton>
89
+ <IconButton title={t.dislike} aria-label={t.dislike} onClick={dislike}>
90
+ {liked === false ? <DislikeFill /> : <Dislike />}
91
+ </IconButton>
92
+ </>
93
+ )}
87
94
  </div>}
88
95
  {shouldShowDate && <Text appearance="microtext1" className="chat-date">{dateFormatter.formatForChatMessage(date)}</Text>}
89
96
  </div>
@@ -93,10 +100,12 @@ export const ChatMessage = ({ message, username }: { message: ChatEntry, usernam
93
100
 
94
101
  const dictionary = {
95
102
  en: {
103
+ copy: 'Copy',
96
104
  like: 'Like',
97
105
  dislike: 'Dislike',
98
106
  },
99
107
  pt: {
108
+ copy: 'Copiar',
100
109
  like: 'Gostei',
101
110
  dislike: 'Não gostei',
102
111
  },
@@ -112,6 +112,14 @@ export const ChatList = styled.ul`
112
112
  padding: 10px;
113
113
  background-color: ${theme.color.light[500]};
114
114
  border-radius: 4px;
115
+
116
+ > p:first-child {
117
+ margin-top: 0;
118
+ }
119
+
120
+ > p:last-child {
121
+ margin-bottom: 0;
122
+ }
115
123
  }
116
124
  }
117
125
  }
@@ -86,14 +86,16 @@ export const HistoryItem = ({ item, interceptors }: { item: ConversationResponse
86
86
  findWorkspace(chat.workspace_id),
87
87
  getAllAgents(),
88
88
  ])
89
+ const agent = agents.find(a => a.id === last(chat.history)?.custom_agent?.id)
90
+ const builtIn = !!last(chat.history ?? [])?.custom_agent?.built_in
89
91
  widget.chatTabs.add(new ChatState({
90
92
  id: chat.id,
91
- initial: { label: chat.title, stack, workspace, agent: agents.find(a => a.id === last(chat.history)?.custom_agent?.id) },
93
+ initial: { label: chat.title, stack, workspace, agent: agent ? { ...agent, builtIn } : undefined },
92
94
  interceptors,
93
95
  entries: chat.history?.map(item => new ChatEntry({
94
96
  agentType: item.agent === 'USER' ? 'user' : 'bot',
95
97
  content: item.content,
96
- type: item.agent === 'USER' ? 'text' : 'md',
98
+ type: 'md',
97
99
  agent: agents.find(a => a.id === item.custom_agent?.id),
98
100
  messageId: item.message_id,
99
101
  knowledgeSources: item.agent === 'USER' ? undefined : genericSourcesToKnowledgeSources(item.sources),
@@ -1,5 +1,6 @@
1
1
  import { agentClient, aiClient, workspaceClient } from '@stack-spot/portal-network'
2
2
  import { ChatProperties } from '../../state/ChatState'
3
+ import { LabeledWithImage } from '../../state/types'
3
4
 
4
5
  export async function findStack(id: string | null): Promise<ChatProperties['stack'] | undefined> {
5
6
  if (!id) return
@@ -25,7 +26,7 @@ export async function findWorkspace(id: string | null): Promise<ChatProperties['
25
26
  }
26
27
  }
27
28
 
28
- export async function getAllAgents(): Promise<Required<ChatProperties>['agent'][]> {
29
+ export async function getAllAgents(): Promise<LabeledWithImage[]> {
29
30
  try {
30
31
  const [agents, publicAgents] = await Promise.all([agentClient.agents.query({}), agentClient.publicAgents.query({})])
31
32
  return [...agents, ...publicAgents].map(a => ({ id: a.id, label: a.name, image: a.avatar }))