@hef2024/llmasaservice-ui 0.18.0 → 0.19.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.
package/dist/index.css CHANGED
@@ -1031,8 +1031,10 @@ button[data-pending=true]::after {
1031
1031
  .ai-agent-panel {
1032
1032
  display: flex;
1033
1033
  flex-direction: row;
1034
+ flex-wrap: nowrap;
1034
1035
  align-self: stretch;
1035
1036
  height: 100%;
1037
+ min-height: 400px;
1036
1038
  max-height: 100%;
1037
1039
  background-color: var(--ai-sidebar-bg);
1038
1040
  border-left: 1px solid var(--ai-sidebar-border);
@@ -1055,7 +1057,7 @@ button[data-pending=true]::after {
1055
1057
  border-right: 1px solid var(--ai-sidebar-border);
1056
1058
  }
1057
1059
  .ai-agent-panel--sidebar-left {
1058
- flex-direction: row;
1060
+ flex-direction: row !important;
1059
1061
  }
1060
1062
  .ai-agent-panel--sidebar-left .ai-agent-panel__sidebar {
1061
1063
  order: 1;
@@ -1979,6 +1981,18 @@ button[data-pending=true]::after {
1979
1981
  flex: 1;
1980
1982
  border: none;
1981
1983
  }
1984
+ .ai-agent-panel__chat-header {
1985
+ display: flex;
1986
+ align-items: center;
1987
+ justify-content: flex-end;
1988
+ padding: 8px;
1989
+ background-color: var(--ai-header-bg);
1990
+ border-bottom: 1px solid var(--ai-header-border);
1991
+ flex-shrink: 0;
1992
+ }
1993
+ .ai-agent-panel__chat-header-spacer {
1994
+ flex: 1;
1995
+ }
1982
1996
  .ai-agent-panel__context-notification {
1983
1997
  position: absolute;
1984
1998
  bottom: 70px;
package/dist/index.d.mts CHANGED
@@ -195,6 +195,7 @@ interface AIAgentPanelProps {
195
195
  data: string;
196
196
  }[];
197
197
  theme?: 'light' | 'dark';
198
+ collapsible?: boolean;
198
199
  defaultCollapsed?: boolean;
199
200
  defaultWidth?: number;
200
201
  minWidth?: number;
package/dist/index.d.ts CHANGED
@@ -195,6 +195,7 @@ interface AIAgentPanelProps {
195
195
  data: string;
196
196
  }[];
197
197
  theme?: 'light' | 'dark';
198
+ collapsible?: boolean;
198
199
  defaultCollapsed?: boolean;
199
200
  defaultWidth?: number;
200
201
  minWidth?: number;
package/dist/index.js CHANGED
@@ -1670,6 +1670,7 @@ var ChatPanel = ({
1670
1670
  const continueChat = (suggestion) => {
1671
1671
  setThinkingBlocks([]);
1672
1672
  setCurrentThinkingIndex(0);
1673
+ setResponse("");
1673
1674
  if (emailInput && isEmailAddress(emailInput) && !emailInputSet) {
1674
1675
  const newId = (currentCustomer == null ? void 0 : currentCustomer.customer_id) && currentCustomer.customer_id !== "" && currentCustomer.customer_id !== (currentCustomer == null ? void 0 : currentCustomer.customer_user_email) ? currentCustomer.customer_id : emailInput;
1675
1676
  setEmailInputSet(true);
@@ -3898,6 +3899,7 @@ var AIChatPanel = ({
3898
3899
  setThinkingBlocks([]);
3899
3900
  setCurrentThinkingIndex(0);
3900
3901
  setUserHasScrolled(false);
3902
+ setResponse("");
3901
3903
  if (!idle) {
3902
3904
  stop(lastController);
3903
3905
  setHistory((prevHistory) => __spreadProps(__spreadValues({}, prevHistory), {
@@ -3994,7 +3996,8 @@ ${followOnPrompt}`;
3994
3996
  ensureConversation,
3995
3997
  dataWithExtras,
3996
3998
  scrollToBottom,
3997
- onConversationCreated
3999
+ onConversationCreated,
4000
+ setResponse
3998
4001
  ]);
3999
4002
  const handleSuggestionClick = (0, import_react11.useCallback)((question) => {
4000
4003
  continueChat(question);
@@ -4242,8 +4245,8 @@ ${followOnPrompt}`;
4242
4245
  ))), /* @__PURE__ */ import_react11.default.createElement("div", { className: "ai-chat-thinking__content" }, cleanContentForDisplay(currentBlock.content)));
4243
4246
  }, [thinkingBlocks, currentThinkingIndex, cleanContentForDisplay]);
4244
4247
  const panelClasses = ["ai-chat-panel", theme === "dark" ? "dark-theme" : ""].filter(Boolean).join(" ");
4245
- return /* @__PURE__ */ import_react11.default.createElement("div", { className: panelClasses }, title && /* @__PURE__ */ import_react11.default.createElement("div", { className: "ai-chat-panel__title" }, title), /* @__PURE__ */ import_react11.default.createElement(ScrollArea, { className: "ai-chat-panel__messages", ref: responseAreaRef }, initialMessage && /* @__PURE__ */ import_react11.default.createElement("div", { className: "ai-chat-message ai-chat-message--assistant" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "ai-chat-message__content" }, /* @__PURE__ */ import_react11.default.createElement(import_react_markdown2.default, { remarkPlugins: [import_remark_gfm2.default], rehypePlugins: [import_rehype_raw2.default] }, initialMessage))), Object.entries(history).map(([prompt, entry], index) => {
4246
- const isLastEntry = index === Object.keys(history).length - 1;
4248
+ return /* @__PURE__ */ import_react11.default.createElement("div", { className: panelClasses }, title && /* @__PURE__ */ import_react11.default.createElement("div", { className: "ai-chat-panel__title" }, title), /* @__PURE__ */ import_react11.default.createElement(ScrollArea, { className: "ai-chat-panel__messages", ref: responseAreaRef }, initialMessage && /* @__PURE__ */ import_react11.default.createElement("div", { className: "ai-chat-message ai-chat-message--assistant" }, /* @__PURE__ */ import_react11.default.createElement("div", { className: "ai-chat-message__content" }, /* @__PURE__ */ import_react11.default.createElement(import_react_markdown2.default, { remarkPlugins: [import_remark_gfm2.default], rehypePlugins: [import_rehype_raw2.default] }, initialMessage))), Object.entries(history).map(([prompt, entry], index, entries) => {
4249
+ const isLastEntry = index === entries.length - 1;
4247
4250
  const isSystemMessage = prompt.startsWith("__system__:");
4248
4251
  const { cleanedText } = processThinkingTags(entry.content);
4249
4252
  const processedContent = processActions(cleanedText);
@@ -4768,6 +4771,7 @@ var AIAgentPanel = import_react13.default.forwardRef(({
4768
4771
  maxContextTokens = 8e3,
4769
4772
  data = [],
4770
4773
  theme = "light",
4774
+ collapsible = true,
4771
4775
  defaultCollapsed = false,
4772
4776
  defaultWidth = 720,
4773
4777
  minWidth = 520,
@@ -4796,7 +4800,7 @@ var AIAgentPanel = import_react13.default.forwardRef(({
4796
4800
  showConversationHistory = true
4797
4801
  }, ref) => {
4798
4802
  var _a, _b, _c, _d;
4799
- const [isCollapsed, setIsCollapsed] = (0, import_react13.useState)(defaultCollapsed);
4803
+ const [isCollapsed, setIsCollapsed] = (0, import_react13.useState)(collapsible && defaultCollapsed);
4800
4804
  const [isHistoryCollapsed, setIsHistoryCollapsed] = (0, import_react13.useState)(() => {
4801
4805
  if (typeof window !== "undefined") {
4802
4806
  const saved = localStorage.getItem("ai-agent-panel-history-collapsed");
@@ -5561,8 +5565,9 @@ var AIAgentPanel = import_react13.default.forwardRef(({
5561
5565
  }
5562
5566
  }, [onConversationChange]);
5563
5567
  const toggleCollapse = (0, import_react13.useCallback)(() => {
5568
+ if (!collapsible) return;
5564
5569
  setIsCollapsed((prev) => !prev);
5565
- }, []);
5570
+ }, [collapsible]);
5566
5571
  const toggleHistoryCollapse = (0, import_react13.useCallback)(() => {
5567
5572
  setIsHistoryCollapsed((prev) => {
5568
5573
  const next = !prev;
@@ -5578,7 +5583,7 @@ var AIAgentPanel = import_react13.default.forwardRef(({
5578
5583
  sidebarPosition === "right" ? "ai-agent-panel--sidebar-right" : "ai-agent-panel--sidebar-left",
5579
5584
  !showConversationHistory ? "ai-agent-panel--no-history" : ""
5580
5585
  ].filter(Boolean).join(" ");
5581
- if (isCollapsed) {
5586
+ if (collapsible && isCollapsed) {
5582
5587
  return /* @__PURE__ */ import_react13.default.createElement("div", { className: panelClasses, ref: panelRef }, /* @__PURE__ */ import_react13.default.createElement(
5583
5588
  "div",
5584
5589
  {
@@ -5801,7 +5806,7 @@ var AIAgentPanel = import_react13.default.forwardRef(({
5801
5806
  onClick: handleNewConversation
5802
5807
  },
5803
5808
  /* @__PURE__ */ import_react13.default.createElement(PlusIcon, null)
5804
- ))), /* @__PURE__ */ import_react13.default.createElement(Tooltip, { content: "Collapse History", side: "bottom" }, /* @__PURE__ */ import_react13.default.createElement(Button, { variant: "ghost", size: "icon", onClick: toggleHistoryCollapse }, /* @__PURE__ */ import_react13.default.createElement(SidebarIcon, null))), /* @__PURE__ */ import_react13.default.createElement(Button, { variant: "ghost", size: "icon", onClick: toggleCollapse }, position === "right" ? /* @__PURE__ */ import_react13.default.createElement(ChevronRightIcon, null) : /* @__PURE__ */ import_react13.default.createElement(ChevronLeftIcon, null))), /* @__PURE__ */ import_react13.default.createElement(ScrollArea, { className: "ai-agent-panel__conversations" }, activeConversationsList.length > 0 && /* @__PURE__ */ import_react13.default.createElement("div", { className: "ai-agent-panel__group ai-agent-panel__group--active" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "ai-agent-panel__group-label" }, /* @__PURE__ */ import_react13.default.createElement("span", null, "Active (", activeConversationsList.length, ")")), activeConversationsList.map((activeConv) => /* @__PURE__ */ import_react13.default.createElement(
5809
+ ))), /* @__PURE__ */ import_react13.default.createElement(Tooltip, { content: "Collapse History", side: "bottom" }, /* @__PURE__ */ import_react13.default.createElement(Button, { variant: "ghost", size: "icon", onClick: toggleHistoryCollapse }, /* @__PURE__ */ import_react13.default.createElement(SidebarIcon, null))), collapsible && /* @__PURE__ */ import_react13.default.createElement(Button, { variant: "ghost", size: "icon", onClick: toggleCollapse }, position === "right" ? /* @__PURE__ */ import_react13.default.createElement(ChevronRightIcon, null) : /* @__PURE__ */ import_react13.default.createElement(ChevronLeftIcon, null))), /* @__PURE__ */ import_react13.default.createElement(ScrollArea, { className: "ai-agent-panel__conversations" }, activeConversationsList.length > 0 && /* @__PURE__ */ import_react13.default.createElement("div", { className: "ai-agent-panel__group ai-agent-panel__group--active" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "ai-agent-panel__group-label" }, /* @__PURE__ */ import_react13.default.createElement("span", null, "Active (", activeConversationsList.length, ")")), activeConversationsList.map((activeConv) => /* @__PURE__ */ import_react13.default.createElement(
5805
5810
  "div",
5806
5811
  {
5807
5812
  key: activeConv.stableKey,
@@ -5843,7 +5848,7 @@ var AIAgentPanel = import_react13.default.forwardRef(({
5843
5848
  /* @__PURE__ */ import_react13.default.createElement("div", { className: "ai-agent-panel__conversation-content" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "ai-agent-panel__conversation-title" }, isActive && /* @__PURE__ */ import_react13.default.createElement("span", { className: "ai-agent-panel__active-badge" }, "\u25CF"), conversationFirstPrompts[conv.conversationId] || conv.title))
5844
5849
  );
5845
5850
  }))))))),
5846
- /* @__PURE__ */ import_react13.default.createElement("div", { className: "ai-agent-panel__chat" }, showContextNotification && /* @__PURE__ */ import_react13.default.createElement("div", { className: "ai-agent-panel__context-notification" }, /* @__PURE__ */ import_react13.default.createElement(SparkleIcon, null), /* @__PURE__ */ import_react13.default.createElement("span", null, "Agent now has new context")), activeConversationsList.map((activeConv) => /* @__PURE__ */ import_react13.default.createElement(
5851
+ /* @__PURE__ */ import_react13.default.createElement("div", { className: "ai-agent-panel__chat" }, !showConversationHistory && collapsible && /* @__PURE__ */ import_react13.default.createElement("div", { className: "ai-agent-panel__chat-header" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "ai-agent-panel__chat-header-spacer" }), /* @__PURE__ */ import_react13.default.createElement(Tooltip, { content: "Collapse Panel", side: position === "right" ? "left" : "right" }, /* @__PURE__ */ import_react13.default.createElement(Button, { variant: "ghost", size: "icon", onClick: toggleCollapse }, position === "right" ? /* @__PURE__ */ import_react13.default.createElement(ChevronRightIcon, null) : /* @__PURE__ */ import_react13.default.createElement(ChevronLeftIcon, null)))), showContextNotification && /* @__PURE__ */ import_react13.default.createElement("div", { className: "ai-agent-panel__context-notification" }, /* @__PURE__ */ import_react13.default.createElement(SparkleIcon, null), /* @__PURE__ */ import_react13.default.createElement("span", null, "Agent now has new context")), activeConversationsList.map((activeConv) => /* @__PURE__ */ import_react13.default.createElement(
5847
5852
  ChatPanelWrapper,
5848
5853
  {
5849
5854
  key: `${activeConv.stableKey}-${activeConv.agentId}`,
package/dist/index.mjs CHANGED
@@ -1631,6 +1631,7 @@ var ChatPanel = ({
1631
1631
  const continueChat = (suggestion) => {
1632
1632
  setThinkingBlocks([]);
1633
1633
  setCurrentThinkingIndex(0);
1634
+ setResponse("");
1634
1635
  if (emailInput && isEmailAddress(emailInput) && !emailInputSet) {
1635
1636
  const newId = (currentCustomer == null ? void 0 : currentCustomer.customer_id) && currentCustomer.customer_id !== "" && currentCustomer.customer_id !== (currentCustomer == null ? void 0 : currentCustomer.customer_user_email) ? currentCustomer.customer_id : emailInput;
1636
1637
  setEmailInputSet(true);
@@ -3865,6 +3866,7 @@ var AIChatPanel = ({
3865
3866
  setThinkingBlocks([]);
3866
3867
  setCurrentThinkingIndex(0);
3867
3868
  setUserHasScrolled(false);
3869
+ setResponse("");
3868
3870
  if (!idle) {
3869
3871
  stop(lastController);
3870
3872
  setHistory((prevHistory) => __spreadProps(__spreadValues({}, prevHistory), {
@@ -3961,7 +3963,8 @@ ${followOnPrompt}`;
3961
3963
  ensureConversation,
3962
3964
  dataWithExtras,
3963
3965
  scrollToBottom,
3964
- onConversationCreated
3966
+ onConversationCreated,
3967
+ setResponse
3965
3968
  ]);
3966
3969
  const handleSuggestionClick = useCallback2((question) => {
3967
3970
  continueChat(question);
@@ -4209,8 +4212,8 @@ ${followOnPrompt}`;
4209
4212
  ))), /* @__PURE__ */ React11.createElement("div", { className: "ai-chat-thinking__content" }, cleanContentForDisplay(currentBlock.content)));
4210
4213
  }, [thinkingBlocks, currentThinkingIndex, cleanContentForDisplay]);
4211
4214
  const panelClasses = ["ai-chat-panel", theme === "dark" ? "dark-theme" : ""].filter(Boolean).join(" ");
4212
- return /* @__PURE__ */ React11.createElement("div", { className: panelClasses }, title && /* @__PURE__ */ React11.createElement("div", { className: "ai-chat-panel__title" }, title), /* @__PURE__ */ React11.createElement(ScrollArea, { className: "ai-chat-panel__messages", ref: responseAreaRef }, initialMessage && /* @__PURE__ */ React11.createElement("div", { className: "ai-chat-message ai-chat-message--assistant" }, /* @__PURE__ */ React11.createElement("div", { className: "ai-chat-message__content" }, /* @__PURE__ */ React11.createElement(ReactMarkdown2, { remarkPlugins: [remarkGfm2], rehypePlugins: [rehypeRaw2] }, initialMessage))), Object.entries(history).map(([prompt, entry], index) => {
4213
- const isLastEntry = index === Object.keys(history).length - 1;
4215
+ return /* @__PURE__ */ React11.createElement("div", { className: panelClasses }, title && /* @__PURE__ */ React11.createElement("div", { className: "ai-chat-panel__title" }, title), /* @__PURE__ */ React11.createElement(ScrollArea, { className: "ai-chat-panel__messages", ref: responseAreaRef }, initialMessage && /* @__PURE__ */ React11.createElement("div", { className: "ai-chat-message ai-chat-message--assistant" }, /* @__PURE__ */ React11.createElement("div", { className: "ai-chat-message__content" }, /* @__PURE__ */ React11.createElement(ReactMarkdown2, { remarkPlugins: [remarkGfm2], rehypePlugins: [rehypeRaw2] }, initialMessage))), Object.entries(history).map(([prompt, entry], index, entries) => {
4216
+ const isLastEntry = index === entries.length - 1;
4214
4217
  const isSystemMessage = prompt.startsWith("__system__:");
4215
4218
  const { cleanedText } = processThinkingTags(entry.content);
4216
4219
  const processedContent = processActions(cleanedText);
@@ -4735,6 +4738,7 @@ var AIAgentPanel = React12.forwardRef(({
4735
4738
  maxContextTokens = 8e3,
4736
4739
  data = [],
4737
4740
  theme = "light",
4741
+ collapsible = true,
4738
4742
  defaultCollapsed = false,
4739
4743
  defaultWidth = 720,
4740
4744
  minWidth = 520,
@@ -4763,7 +4767,7 @@ var AIAgentPanel = React12.forwardRef(({
4763
4767
  showConversationHistory = true
4764
4768
  }, ref) => {
4765
4769
  var _a, _b, _c, _d;
4766
- const [isCollapsed, setIsCollapsed] = useState8(defaultCollapsed);
4770
+ const [isCollapsed, setIsCollapsed] = useState8(collapsible && defaultCollapsed);
4767
4771
  const [isHistoryCollapsed, setIsHistoryCollapsed] = useState8(() => {
4768
4772
  if (typeof window !== "undefined") {
4769
4773
  const saved = localStorage.getItem("ai-agent-panel-history-collapsed");
@@ -5528,8 +5532,9 @@ var AIAgentPanel = React12.forwardRef(({
5528
5532
  }
5529
5533
  }, [onConversationChange]);
5530
5534
  const toggleCollapse = useCallback4(() => {
5535
+ if (!collapsible) return;
5531
5536
  setIsCollapsed((prev) => !prev);
5532
- }, []);
5537
+ }, [collapsible]);
5533
5538
  const toggleHistoryCollapse = useCallback4(() => {
5534
5539
  setIsHistoryCollapsed((prev) => {
5535
5540
  const next = !prev;
@@ -5545,7 +5550,7 @@ var AIAgentPanel = React12.forwardRef(({
5545
5550
  sidebarPosition === "right" ? "ai-agent-panel--sidebar-right" : "ai-agent-panel--sidebar-left",
5546
5551
  !showConversationHistory ? "ai-agent-panel--no-history" : ""
5547
5552
  ].filter(Boolean).join(" ");
5548
- if (isCollapsed) {
5553
+ if (collapsible && isCollapsed) {
5549
5554
  return /* @__PURE__ */ React12.createElement("div", { className: panelClasses, ref: panelRef }, /* @__PURE__ */ React12.createElement(
5550
5555
  "div",
5551
5556
  {
@@ -5768,7 +5773,7 @@ var AIAgentPanel = React12.forwardRef(({
5768
5773
  onClick: handleNewConversation
5769
5774
  },
5770
5775
  /* @__PURE__ */ React12.createElement(PlusIcon, null)
5771
- ))), /* @__PURE__ */ React12.createElement(Tooltip, { content: "Collapse History", side: "bottom" }, /* @__PURE__ */ React12.createElement(Button, { variant: "ghost", size: "icon", onClick: toggleHistoryCollapse }, /* @__PURE__ */ React12.createElement(SidebarIcon, null))), /* @__PURE__ */ React12.createElement(Button, { variant: "ghost", size: "icon", onClick: toggleCollapse }, position === "right" ? /* @__PURE__ */ React12.createElement(ChevronRightIcon, null) : /* @__PURE__ */ React12.createElement(ChevronLeftIcon, null))), /* @__PURE__ */ React12.createElement(ScrollArea, { className: "ai-agent-panel__conversations" }, activeConversationsList.length > 0 && /* @__PURE__ */ React12.createElement("div", { className: "ai-agent-panel__group ai-agent-panel__group--active" }, /* @__PURE__ */ React12.createElement("div", { className: "ai-agent-panel__group-label" }, /* @__PURE__ */ React12.createElement("span", null, "Active (", activeConversationsList.length, ")")), activeConversationsList.map((activeConv) => /* @__PURE__ */ React12.createElement(
5776
+ ))), /* @__PURE__ */ React12.createElement(Tooltip, { content: "Collapse History", side: "bottom" }, /* @__PURE__ */ React12.createElement(Button, { variant: "ghost", size: "icon", onClick: toggleHistoryCollapse }, /* @__PURE__ */ React12.createElement(SidebarIcon, null))), collapsible && /* @__PURE__ */ React12.createElement(Button, { variant: "ghost", size: "icon", onClick: toggleCollapse }, position === "right" ? /* @__PURE__ */ React12.createElement(ChevronRightIcon, null) : /* @__PURE__ */ React12.createElement(ChevronLeftIcon, null))), /* @__PURE__ */ React12.createElement(ScrollArea, { className: "ai-agent-panel__conversations" }, activeConversationsList.length > 0 && /* @__PURE__ */ React12.createElement("div", { className: "ai-agent-panel__group ai-agent-panel__group--active" }, /* @__PURE__ */ React12.createElement("div", { className: "ai-agent-panel__group-label" }, /* @__PURE__ */ React12.createElement("span", null, "Active (", activeConversationsList.length, ")")), activeConversationsList.map((activeConv) => /* @__PURE__ */ React12.createElement(
5772
5777
  "div",
5773
5778
  {
5774
5779
  key: activeConv.stableKey,
@@ -5810,7 +5815,7 @@ var AIAgentPanel = React12.forwardRef(({
5810
5815
  /* @__PURE__ */ React12.createElement("div", { className: "ai-agent-panel__conversation-content" }, /* @__PURE__ */ React12.createElement("div", { className: "ai-agent-panel__conversation-title" }, isActive && /* @__PURE__ */ React12.createElement("span", { className: "ai-agent-panel__active-badge" }, "\u25CF"), conversationFirstPrompts[conv.conversationId] || conv.title))
5811
5816
  );
5812
5817
  }))))))),
5813
- /* @__PURE__ */ React12.createElement("div", { className: "ai-agent-panel__chat" }, showContextNotification && /* @__PURE__ */ React12.createElement("div", { className: "ai-agent-panel__context-notification" }, /* @__PURE__ */ React12.createElement(SparkleIcon, null), /* @__PURE__ */ React12.createElement("span", null, "Agent now has new context")), activeConversationsList.map((activeConv) => /* @__PURE__ */ React12.createElement(
5818
+ /* @__PURE__ */ React12.createElement("div", { className: "ai-agent-panel__chat" }, !showConversationHistory && collapsible && /* @__PURE__ */ React12.createElement("div", { className: "ai-agent-panel__chat-header" }, /* @__PURE__ */ React12.createElement("div", { className: "ai-agent-panel__chat-header-spacer" }), /* @__PURE__ */ React12.createElement(Tooltip, { content: "Collapse Panel", side: position === "right" ? "left" : "right" }, /* @__PURE__ */ React12.createElement(Button, { variant: "ghost", size: "icon", onClick: toggleCollapse }, position === "right" ? /* @__PURE__ */ React12.createElement(ChevronRightIcon, null) : /* @__PURE__ */ React12.createElement(ChevronLeftIcon, null)))), showContextNotification && /* @__PURE__ */ React12.createElement("div", { className: "ai-agent-panel__context-notification" }, /* @__PURE__ */ React12.createElement(SparkleIcon, null), /* @__PURE__ */ React12.createElement("span", null, "Agent now has new context")), activeConversationsList.map((activeConv) => /* @__PURE__ */ React12.createElement(
5814
5819
  ChatPanelWrapper,
5815
5820
  {
5816
5821
  key: `${activeConv.stableKey}-${activeConv.agentId}`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hef2024/llmasaservice-ui",
3
- "version": "0.18.0",
3
+ "version": "0.19.1",
4
4
  "description": "Prebuilt UI components for LLMAsAService.io",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -1042,6 +1042,11 @@ const AIChatPanel: React.FC<AIChatPanelProps> = ({
1042
1042
  // Reset scroll tracking for new message - enable auto-scroll
1043
1043
  setUserHasScrolled(false);
1044
1044
 
1045
+ // IMPORTANT: Clear the response BEFORE setting new lastKey
1046
+ // This prevents the old response from being written to the new history entry
1047
+ // when the history update effect runs
1048
+ setResponse('');
1049
+
1045
1050
  // Handle stop if not idle (matches ChatPanel)
1046
1051
  if (!idle) {
1047
1052
  stop(lastController);
@@ -1174,6 +1179,7 @@ const AIChatPanel: React.FC<AIChatPanelProps> = ({
1174
1179
  dataWithExtras,
1175
1180
  scrollToBottom,
1176
1181
  onConversationCreated,
1182
+ setResponse,
1177
1183
  ]);
1178
1184
 
1179
1185
  // Handle suggestion click - directly sends like ChatPanel does
@@ -1635,8 +1641,8 @@ const AIChatPanel: React.FC<AIChatPanelProps> = ({
1635
1641
  )}
1636
1642
 
1637
1643
  {/* History */}
1638
- {Object.entries(history).map(([prompt, entry], index) => {
1639
- const isLastEntry = index === Object.keys(history).length - 1;
1644
+ {Object.entries(history).map(([prompt, entry], index, entries) => {
1645
+ const isLastEntry = index === entries.length - 1;
1640
1646
  // Check if this is a system message (injected by page context, etc.)
1641
1647
  const isSystemMessage = prompt.startsWith('__system__:');
1642
1648
  // Process thinking tags first, then apply actions at render time
package/src/ChatPanel.tsx CHANGED
@@ -2154,6 +2154,11 @@ const ChatPanel: React.FC<ChatPanelProps & ExtraProps> = ({
2154
2154
  setThinkingBlocks([]);
2155
2155
  setCurrentThinkingIndex(0);
2156
2156
 
2157
+ // IMPORTANT: Clear the response BEFORE setting new lastKey
2158
+ // This prevents the old response from being written to the new history entry
2159
+ // when the history update effect runs
2160
+ setResponse("");
2161
+
2157
2162
  // Auto-set email if valid before proceeding
2158
2163
  if (emailInput && isEmailAddress(emailInput) && !emailInputSet) {
2159
2164
  const newId =