@kite-copilot/chat-panel 0.2.27 → 0.2.29

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/auto.cjs CHANGED
@@ -1322,6 +1322,11 @@ function ChatPanel({
1322
1322
  const escalationWsRef = React4.useRef(null);
1323
1323
  const resetSession = React4.useCallback(() => {
1324
1324
  setSessionId(crypto.randomUUID());
1325
+ setIsEscalated(false);
1326
+ if (escalationWsRef.current) {
1327
+ escalationWsRef.current.close();
1328
+ escalationWsRef.current = null;
1329
+ }
1325
1330
  }, []);
1326
1331
  const streamIntervals = React4.useRef({});
1327
1332
  const isEmpty = messages.length === 0;
@@ -1555,12 +1560,23 @@ function ChatPanel({
1555
1560
  try {
1556
1561
  const data = JSON.parse(event.data);
1557
1562
  if (data.type === "agent_message") {
1558
- setMessages((prev) => [...prev, {
1559
- id: Date.now(),
1560
- role: "agent",
1561
- kind: "text",
1562
- content: data.content
1563
- }]);
1563
+ setMessages((prev) => {
1564
+ const content = data.content;
1565
+ const messageId = data.message_id;
1566
+ const isDuplicate = messageId ? prev.some((m) => m.serverMessageId === messageId) : prev.slice(-5).some((m) => m.content === content);
1567
+ if (isDuplicate) {
1568
+ console.debug("[KiteChat] Skipping duplicate agent message:", messageId || content.slice(0, 30));
1569
+ return prev;
1570
+ }
1571
+ return [...prev, {
1572
+ id: Date.now(),
1573
+ role: "agent",
1574
+ kind: "text",
1575
+ content,
1576
+ serverMessageId: messageId
1577
+ // Store server ID for deduplication
1578
+ }];
1579
+ });
1564
1580
  } else if (data.type === "error") {
1565
1581
  console.error("[KiteChat] Escalation error:", data.message);
1566
1582
  }
@@ -1605,7 +1621,7 @@ function ChatPanel({
1605
1621
  }
1606
1622
  }, [isEscalated, sessionId, connectToEscalationWs]);
1607
1623
  function streamAssistantMessage(messageId, fullText, followups) {
1608
- let textToStream = fullText;
1624
+ let textToStream = fullText || "";
1609
1625
  let extractedFollowups = followups;
1610
1626
  if (fullText && fullText.startsWith("{") && fullText.includes('"response"')) {
1611
1627
  try {
@@ -1905,6 +1921,12 @@ function ChatPanel({
1905
1921
  if (data.status === "thinking") {
1906
1922
  setPhase("thinking");
1907
1923
  setProgressSteps([{ message: data.message, completed: false }]);
1924
+ } else if (data.status === "searching") {
1925
+ setPhase("thinking");
1926
+ setProgressSteps([{ message: data.message || "Searching knowledge base...", completed: false }]);
1927
+ } else if (data.status === "evaluating") {
1928
+ setPhase("thinking");
1929
+ setProgressSteps([{ message: data.message || "Evaluating sources...", completed: false }]);
1908
1930
  } else if (data.status === "executing") {
1909
1931
  setPhase("executing");
1910
1932
  setProgressSteps((prev) => {
@@ -2006,7 +2028,7 @@ function ChatPanel({
2006
2028
  setMessages((prev) => [...prev, assistantMessage]);
2007
2029
  streamAssistantMessage(
2008
2030
  assistantMessageId,
2009
- agentResponse.response,
2031
+ agentResponse.response || "Action completed successfully.",
2010
2032
  agentResponse.followups
2011
2033
  );
2012
2034
  streamCompleted = true;
@@ -2028,7 +2050,7 @@ function ChatPanel({
2028
2050
  setMessages((prev) => [...prev, assistantMessage]);
2029
2051
  streamAssistantMessage(
2030
2052
  assistantMessageId,
2031
- agentResponse.response,
2053
+ agentResponse.response || agentResponse.message || "",
2032
2054
  agentResponse.followups
2033
2055
  );
2034
2056
  streamCompleted = true;
@@ -2064,6 +2086,10 @@ function ChatPanel({
2064
2086
  content: data.message || "You've been connected to our support queue. An agent will be with you shortly."
2065
2087
  };
2066
2088
  setMessages((prev) => [...prev, escalationMessage]);
2089
+ } else if (eventType === "token") {
2090
+ if (process.env.NODE_ENV === "development") {
2091
+ console.debug("[SSE] Token delta:", data.delta?.length || 0, "chars");
2092
+ }
2067
2093
  }
2068
2094
  } catch (parseError) {
2069
2095
  console.error("Failed to parse SSE event:", parseError);
package/dist/auto.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createKiteChat
3
- } from "./chunk-4KYS4INW.js";
3
+ } from "./chunk-DGU3KTFD.js";
4
4
 
5
5
  // src/auto.ts
6
6
  function mountKiteChat(config) {
@@ -1321,6 +1321,11 @@ function ChatPanel({
1321
1321
  const escalationWsRef = React4.useRef(null);
1322
1322
  const resetSession = React4.useCallback(() => {
1323
1323
  setSessionId(crypto.randomUUID());
1324
+ setIsEscalated(false);
1325
+ if (escalationWsRef.current) {
1326
+ escalationWsRef.current.close();
1327
+ escalationWsRef.current = null;
1328
+ }
1324
1329
  }, []);
1325
1330
  const streamIntervals = React4.useRef({});
1326
1331
  const isEmpty = messages.length === 0;
@@ -1554,12 +1559,23 @@ function ChatPanel({
1554
1559
  try {
1555
1560
  const data = JSON.parse(event.data);
1556
1561
  if (data.type === "agent_message") {
1557
- setMessages((prev) => [...prev, {
1558
- id: Date.now(),
1559
- role: "agent",
1560
- kind: "text",
1561
- content: data.content
1562
- }]);
1562
+ setMessages((prev) => {
1563
+ const content = data.content;
1564
+ const messageId = data.message_id;
1565
+ const isDuplicate = messageId ? prev.some((m) => m.serverMessageId === messageId) : prev.slice(-5).some((m) => m.content === content);
1566
+ if (isDuplicate) {
1567
+ console.debug("[KiteChat] Skipping duplicate agent message:", messageId || content.slice(0, 30));
1568
+ return prev;
1569
+ }
1570
+ return [...prev, {
1571
+ id: Date.now(),
1572
+ role: "agent",
1573
+ kind: "text",
1574
+ content,
1575
+ serverMessageId: messageId
1576
+ // Store server ID for deduplication
1577
+ }];
1578
+ });
1563
1579
  } else if (data.type === "error") {
1564
1580
  console.error("[KiteChat] Escalation error:", data.message);
1565
1581
  }
@@ -1604,7 +1620,7 @@ function ChatPanel({
1604
1620
  }
1605
1621
  }, [isEscalated, sessionId, connectToEscalationWs]);
1606
1622
  function streamAssistantMessage(messageId, fullText, followups) {
1607
- let textToStream = fullText;
1623
+ let textToStream = fullText || "";
1608
1624
  let extractedFollowups = followups;
1609
1625
  if (fullText && fullText.startsWith("{") && fullText.includes('"response"')) {
1610
1626
  try {
@@ -1904,6 +1920,12 @@ function ChatPanel({
1904
1920
  if (data.status === "thinking") {
1905
1921
  setPhase("thinking");
1906
1922
  setProgressSteps([{ message: data.message, completed: false }]);
1923
+ } else if (data.status === "searching") {
1924
+ setPhase("thinking");
1925
+ setProgressSteps([{ message: data.message || "Searching knowledge base...", completed: false }]);
1926
+ } else if (data.status === "evaluating") {
1927
+ setPhase("thinking");
1928
+ setProgressSteps([{ message: data.message || "Evaluating sources...", completed: false }]);
1907
1929
  } else if (data.status === "executing") {
1908
1930
  setPhase("executing");
1909
1931
  setProgressSteps((prev) => {
@@ -2005,7 +2027,7 @@ function ChatPanel({
2005
2027
  setMessages((prev) => [...prev, assistantMessage]);
2006
2028
  streamAssistantMessage(
2007
2029
  assistantMessageId,
2008
- agentResponse.response,
2030
+ agentResponse.response || "Action completed successfully.",
2009
2031
  agentResponse.followups
2010
2032
  );
2011
2033
  streamCompleted = true;
@@ -2027,7 +2049,7 @@ function ChatPanel({
2027
2049
  setMessages((prev) => [...prev, assistantMessage]);
2028
2050
  streamAssistantMessage(
2029
2051
  assistantMessageId,
2030
- agentResponse.response,
2052
+ agentResponse.response || agentResponse.message || "",
2031
2053
  agentResponse.followups
2032
2054
  );
2033
2055
  streamCompleted = true;
@@ -2063,6 +2085,10 @@ function ChatPanel({
2063
2085
  content: data.message || "You've been connected to our support queue. An agent will be with you shortly."
2064
2086
  };
2065
2087
  setMessages((prev) => [...prev, escalationMessage]);
2088
+ } else if (eventType === "token") {
2089
+ if (process.env.NODE_ENV === "development") {
2090
+ console.debug("[SSE] Token delta:", data.delta?.length || 0, "chars");
2091
+ }
2066
2092
  }
2067
2093
  } catch (parseError) {
2068
2094
  console.error("Failed to parse SSE event:", parseError);