@stack-spot/ai-chat-widget 1.5.1 → 1.6.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/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.6.0](https://github.com/stack-spot/portal-ai-chat-widget/compare/ai-chat-widget@v1.5.2...ai-chat-widget@v1.6.0) (2025-01-14)
4
+
5
+
6
+ ### Features
7
+
8
+ * makes it so cancelation doesn't yield an error ([#48](https://github.com/stack-spot/portal-ai-chat-widget/issues/48)) ([9ccc3af](https://github.com/stack-spot/portal-ai-chat-widget/commit/9ccc3afacd3cdbdd3fc4dd4a22d4b68e2c5e8e61))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * 2211 scroll chat ([#46](https://github.com/stack-spot/portal-ai-chat-widget/issues/46)) ([d1f73af](https://github.com/stack-spot/portal-ai-chat-widget/commit/d1f73afd0f352172b99de3c0b25af30c3b0f1ab9))
14
+
15
+ ## [1.5.2](https://github.com/stack-spot/portal-ai-chat-widget/compare/ai-chat-widget@v1.5.1...ai-chat-widget@v1.5.2) (2025-01-08)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * 2199 link css ([#44](https://github.com/stack-spot/portal-ai-chat-widget/issues/44)) ([662f0aa](https://github.com/stack-spot/portal-ai-chat-widget/commit/662f0aa3cc1e0e583512221f7701f4586873fc39))
21
+
3
22
  ## [1.5.1](https://github.com/stack-spot/portal-ai-chat-widget/compare/ai-chat-widget@v1.5.0...ai-chat-widget@v1.5.1) (2024-11-21)
4
23
 
5
24
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stack-spot/ai-chat-widget",
3
- "version": "1.5.1",
4
- "date": "Thu Nov 21 2024 18:02:06 GMT+0000 (Coordinated Universal Time)",
3
+ "version": "1.6.0",
4
+ "date": "Tue Jan 14 2025 23:31:13 GMT+0000 (Coordinated Universal Time)",
5
5
  "dependencies": [
6
6
  {
7
7
  "name": "@stack-spot/app-metadata",
@@ -1 +1 @@
1
- {"version":3,"file":"send-message.d.ts","sourceRoot":"","sources":["../../src/chat-interceptors/send-message.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAkC,MAAM,oBAAoB,CAAA;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AA8B9C;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,iBAkDlG"}
1
+ {"version":3,"file":"send-message.d.ts","sourceRoot":"","sources":["../../src/chat-interceptors/send-message.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAkC,MAAM,oBAAoB,CAAA;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AA8B9C;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,iBAyDlG"}
@@ -1,4 +1,4 @@
1
- import { aiClient, StackspotAPIError } from '@stack-spot/portal-network';
1
+ import { aiClient, StackspotAPIError, StreamCanceledError } from '@stack-spot/portal-network';
2
2
  import { ChatEntry } from '../state/ChatEntry.js';
3
3
  import { buildConversationContext } from '../utils/chat.js';
4
4
  import { genericSourcesToKnowledgeSources } from '../utils/knowledge-source.js';
@@ -54,8 +54,22 @@ export async function sendMessageInterceptor(entry, chat, signal) {
54
54
  }
55
55
  botEntry.setValue(createEntryValueFromChatResponse(value, knowledgeSources, chat.get('agent')));
56
56
  });
57
+ let finalValue;
57
58
  try {
58
- const finalValue = await stream.getValue();
59
+ finalValue = await stream.getValue();
60
+ }
61
+ catch (error) {
62
+ if (error instanceof StreamCanceledError) {
63
+ finalValue = stream.getPartialValue();
64
+ }
65
+ else {
66
+ botEntry.setValue({
67
+ ...botEntry.getValue(),
68
+ error: error instanceof StackspotAPIError ? error.translate() : (error.message ?? `${error}`),
69
+ });
70
+ }
71
+ }
72
+ if (finalValue?.answer) {
59
73
  botEntry.setValue(createEntryValueFromChatResponse(finalValue, knowledgeSources, chat.get('agent'), true));
60
74
  aiClient.chat.invalidate({ conversationId: chat.id });
61
75
  if (isFirstMessage) {
@@ -77,12 +91,6 @@ export async function sendMessageInterceptor(entry, chat, signal) {
77
91
  aiClient.chats.invalidate();
78
92
  }
79
93
  }
80
- catch (error) {
81
- botEntry.setValue({
82
- ...botEntry.getValue(),
83
- error: error instanceof StackspotAPIError ? error.translate() : (error.message ?? `${error}`),
84
- });
85
- }
86
94
  chat.set('isLoading', false);
87
95
  }
88
96
  //# sourceMappingURL=send-message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../src/chat-interceptors/send-message.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../src/chat-interceptors/send-message.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AdaptiveTextArea.d.ts","sourceRoot":"","sources":["../../src/components/AdaptiveTextArea.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAElC,UAAU,KAAM,SAAQ,OAAO,CAAC,OAAO,QAAQ,CAAC;IAC9C;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,oHA2B3B,CAAA"}
1
+ {"version":3,"file":"AdaptiveTextArea.d.ts","sourceRoot":"","sources":["../../src/components/AdaptiveTextArea.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAElC,UAAU,KAAM,SAAQ,OAAO,CAAC,OAAO,QAAQ,CAAC;IAC9C;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,oHAkC3B,CAAA"}
@@ -8,6 +8,12 @@ import { forwardRef, useEffect, useRef } from 'react';
8
8
  export const AdaptiveTextArea = forwardRef(({ value, onIncreaseSize, onResetSize, maxHeight, style, ...props }, externalRef) => {
9
9
  const localRef = useRef(null);
10
10
  const ref = externalRef ?? localRef;
11
+ const handleIncreaseSize = (newHeight) => {
12
+ onIncreaseSize?.();
13
+ if (maxHeight && newHeight > maxHeight && ref.current) {
14
+ ref.current.style.overflowY = 'auto';
15
+ }
16
+ };
11
17
  useEffect(() => {
12
18
  if (!ref.current)
13
19
  return;
@@ -17,7 +23,7 @@ export const AdaptiveTextArea = forwardRef(({ value, onIncreaseSize, onResetSize
17
23
  ref.current.style.overflowY = 'hidden';
18
24
  if (height < scroll) {
19
25
  ref.current.style.height = `${scroll}px`;
20
- onIncreaseSize?.();
26
+ handleIncreaseSize(scroll);
21
27
  }
22
28
  }
23
29
  else if (maxHeight) {
@@ -1 +1 @@
1
- {"version":3,"file":"AdaptiveTextArea.js","sourceRoot":"","sources":["../../src/components/AdaptiveTextArea.tsx"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAkBrD;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAA6B,CACrE,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAClE,WAAW,EACX,EAAE;IACF,MAAM,QAAQ,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAA;IAClD,MAAM,GAAG,GAAG,WAAmD,IAAI,QAAQ,CAAA;IAE3E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,OAAM;QACxB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAA;QACvC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAA;QACvC,IAAI,CAAC,SAAS,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;YACrC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAA;YACtC,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;gBACpB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAA;gBACxC,cAAc,EAAE,EAAE,CAAA;YACpB,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAA;QACtC,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;YAC7B,WAAW,EAAE,EAAE,CAAA;QACjB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAA;IAEtB,OAAO,KAAC,QAAQ,OAAK,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,GAAI,CAAA;AACxF,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"AdaptiveTextArea.js","sourceRoot":"","sources":["../../src/components/AdaptiveTextArea.tsx"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAkBrD;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAA6B,CACrE,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAClE,WAAW,EACX,EAAE;IACF,MAAM,QAAQ,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAA;IAClD,MAAM,GAAG,GAAG,WAAmD,IAAI,QAAQ,CAAA;IAE3E,MAAM,kBAAkB,GAAG,CAAC,SAAiB,EAAE,EAAE;QAC/C,cAAc,EAAE,EAAE,CAAA;QAClB,IAAI,SAAS,IAAI,SAAS,GAAG,SAAS,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACtD,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAA;QACtC,CAAC;IACH,CAAC,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,OAAM;QACxB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAA;QACvC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAA;QACvC,IAAI,CAAC,SAAS,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;YACrC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAA;YACtC,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;gBACpB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAA;gBACxC,kBAAkB,CAAC,MAAM,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAA;QACtC,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;YAC7B,WAAW,EAAE,EAAE,CAAA;QACjB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAA;IAEtB,OAAO,KAAC,QAAQ,OAAK,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,GAAI,CAAA;AACxF,CAAC,CAAC,CAAA"}
@@ -9,7 +9,7 @@ import { Code } from './Code.js';
9
9
  const renderP = (child, key) => (_jsx(Fragment, { children: typeof child === 'string'
10
10
  ? child.split('\n').map((content, subKey, array) => (_jsxs(Fragment, { children: [content, subKey < array.length - 1 ? _jsx("br", {}) : null] }, subKey))) : child }, key));
11
11
  export const Markdown = ({ onInsertCode, onNewFile, onCopyCode, children, }) => (_jsx(_Fragment, { children: _jsx(ReactMarkdown, { remarkPlugins: [[remarkGfm]], components: {
12
- a: props => _jsx("a", { target: "_blank", rel: "noopener noreferrer", ...props }),
12
+ a: props => _jsx("a", { target: "_blank", rel: "noopener noreferrer", style: { textDecoration: 'underline' }, ...props }),
13
13
  code: props => _jsx(Code, { ...props, onInsertCode: onInsertCode, onNewFile: onNewFile, onCopyCode: onCopyCode, showActionBar: true }),
14
14
  pre: ({ children }) => _jsx(_Fragment, { children: children }),
15
15
  p: ({ children }) => _jsx("p", { children: Children.map(children, renderP) }),
@@ -1 +1 @@
1
- {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../src/components/Markdown.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,aAAa,MAAM,gBAAgB,CAAA;AAC1C,OAAO,SAAS,MAAM,YAAY,CAAA;AAElC,OAAO,EAAE,IAAI,EAAsB,MAAM,QAAQ,CAAA;AAIjD,MAAM,OAAO,GAAG,CAAC,KAAU,EAAE,GAAW,EAAE,EAAE,CAAC,CAC3C,KAAC,QAAQ,cACN,OAAO,KAAK,KAAK,QAAQ;QACxB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAClD,MAAC,QAAQ,eACN,OAAO,EACP,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAM,CAAC,CAAC,CAAC,IAAI,KAF7B,MAAM,CAGV,CACZ,CAAC,CAAC,CAAC,CAAC,KAAK,IAPC,GAAG,CAQP,CACZ,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,EACE,YAAY,EACZ,SAAS,EACT,UAAU,EACV,QAAQ,GACF,EACR,EAAE,CAAC,CACH,4BACE,KAAC,aAAa,IACZ,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAC5B,UAAU,EAAE;YACV,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,YAAG,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,KAAK,KAAK,GAAI;YACtE,IAAI,EAAE,KAAK,CAAC,EAAE,CACZ,KAAC,IAAI,OACC,KAAK,EACT,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,aAAa,SACb;YACJ,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,4BAAG,QAAQ,GAAI;YACtC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,sBAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAK;SAC9D,YAEA,QAAQ,GACK,GACf,CACJ,CAAA"}
1
+ {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../src/components/Markdown.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,aAAa,MAAM,gBAAgB,CAAA;AAC1C,OAAO,SAAS,MAAM,YAAY,CAAA;AAElC,OAAO,EAAE,IAAI,EAAsB,MAAM,QAAQ,CAAA;AAIjD,MAAM,OAAO,GAAG,CAAC,KAAU,EAAE,GAAW,EAAE,EAAE,CAAC,CAC3C,KAAC,QAAQ,cACN,OAAO,KAAK,KAAK,QAAQ;QACxB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAClD,MAAC,QAAQ,eACN,OAAO,EACP,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAM,CAAC,CAAC,CAAC,IAAI,KAF7B,MAAM,CAGV,CACZ,CAAC,CAAC,CAAC,CAAC,KAAK,IAPC,GAAG,CAQP,CACZ,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,EACE,YAAY,EACZ,SAAS,EACT,UAAU,EACV,QAAQ,GACF,EACR,EAAE,CAAC,CACH,4BACE,KAAC,aAAa,IACZ,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAC5B,UAAU,EAAE;YACV,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,YAAG,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,EAAC,KAAK,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,KAAM,KAAK,GAAI;YAC9G,IAAI,EAAE,KAAK,CAAC,EAAE,CACZ,KAAC,IAAI,OACC,KAAK,EACT,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,aAAa,SACb;YACJ,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,4BAAG,QAAQ,GAAI;YACtC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,sBAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAK;SAC9D,YAEA,QAAQ,GACK,GACf,CACJ,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stack-spot/ai-chat-widget",
3
- "version": "1.5.1",
3
+ "version": "1.6.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stack-spot/ai-chat-widget",
3
- "version": "1.5.1",
4
- "date": "Thu Nov 21 2024 18:02:06 GMT+0000 (Coordinated Universal Time)",
3
+ "version": "1.6.0",
4
+ "date": "Tue Jan 14 2025 23:31:13 GMT+0000 (Coordinated Universal Time)",
5
5
  "dependencies": [
6
6
  {
7
7
  "name": "@stack-spot/app-metadata",
@@ -1,4 +1,4 @@
1
- import { aiClient, StackspotAPIError } from '@stack-spot/portal-network'
1
+ import { aiClient, StackspotAPIError, StreamCanceledError } from '@stack-spot/portal-network'
2
2
  import { ChatResponse3 } from '@stack-spot/portal-network/api/ai'
3
3
  import { ChatEntry, KnowledgeSource, TextChatEntry } from '../state/ChatEntry'
4
4
  import { ChatState } from '../state/ChatState'
@@ -63,8 +63,20 @@ export async function sendMessageInterceptor(entry: ChatEntry, chat: ChatState,
63
63
  }
64
64
  botEntry.setValue(createEntryValueFromChatResponse(value, knowledgeSources, chat.get('agent')))
65
65
  })
66
+ let finalValue: Partial<ChatResponse3> | undefined
66
67
  try {
67
- const finalValue = await stream.getValue()
68
+ finalValue = await stream.getValue()
69
+ } catch (error: any) {
70
+ if (error instanceof StreamCanceledError) {
71
+ finalValue = stream.getPartialValue()
72
+ } else {
73
+ botEntry.setValue({
74
+ ...botEntry.getValue(),
75
+ error: error instanceof StackspotAPIError ? error.translate() : (error.message ?? `${error}`),
76
+ })
77
+ }
78
+ }
79
+ if (finalValue?.answer) {
68
80
  botEntry.setValue(createEntryValueFromChatResponse(finalValue, knowledgeSources, chat.get('agent'), true))
69
81
  aiClient.chat.invalidate({ conversationId: chat.id })
70
82
  if (isFirstMessage) {
@@ -84,11 +96,6 @@ export async function sendMessageInterceptor(entry: ChatEntry, chat: ChatState,
84
96
  // this makes sure to update the chat history
85
97
  aiClient.chats.invalidate()
86
98
  }
87
- } catch (error: any) {
88
- botEntry.setValue({
89
- ...botEntry.getValue(),
90
- error: error instanceof StackspotAPIError ? error.translate() : (error.message ?? `${error}`),
91
- })
92
99
  }
93
100
  chat.set('isLoading', false)
94
101
  }
@@ -28,6 +28,13 @@ export const AdaptiveTextArea = forwardRef<HTMLTextAreaElement, Props>((
28
28
  const localRef = useRef<HTMLTextAreaElement>(null)
29
29
  const ref = externalRef as React.RefObject<HTMLTextAreaElement> ?? localRef
30
30
 
31
+ const handleIncreaseSize = (newHeight: number) => {
32
+ onIncreaseSize?.()
33
+ if (maxHeight && newHeight > maxHeight && ref.current) {
34
+ ref.current.style.overflowY = 'auto'
35
+ }
36
+ }
37
+
31
38
  useEffect(() => {
32
39
  if (!ref.current) return
33
40
  const height = ref.current.clientHeight
@@ -36,7 +43,7 @@ export const AdaptiveTextArea = forwardRef<HTMLTextAreaElement, Props>((
36
43
  ref.current.style.overflowY = 'hidden'
37
44
  if (height < scroll) {
38
45
  ref.current.style.height = `${scroll}px`
39
- onIncreaseSize?.()
46
+ handleIncreaseSize(scroll)
40
47
  }
41
48
  } else if (maxHeight) {
42
49
  ref.current.style.overflowY = 'auto'
@@ -34,7 +34,7 @@ export const Markdown = (
34
34
  <ReactMarkdown
35
35
  remarkPlugins={[[remarkGfm]]}
36
36
  components={{
37
- a: props => <a target="_blank" rel="noopener noreferrer" {...props} />,
37
+ a: props => <a target="_blank" rel="noopener noreferrer" style={{ textDecoration: 'underline' }} {...props} />,
38
38
  code: props =>
39
39
  <Code
40
40
  {...props}