@copilotz/chat-adapter 0.9.31 → 0.9.33

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.js CHANGED
@@ -1285,6 +1285,7 @@ var applyToolResultUpdateToMessages = (messages, update, assistantPatch) => {
1285
1285
  nextMessages[i] = {
1286
1286
  ...applyAssistantToolResult(message, {
1287
1287
  ...update.id ? { id: update.id } : {},
1288
+ ...update.toolExecutionId ? { toolExecutionId: update.toolExecutionId } : {},
1288
1289
  name: update.name ?? toolItem.toolName ?? toolItem.id,
1289
1290
  status: update.status,
1290
1291
  ...update.result !== void 0 ? { result: update.result } : {},
@@ -1302,6 +1303,7 @@ var extractLiveToolCall = (payload) => {
1302
1303
  const tool = expectRecord(toolCall.tool, "TOOL_CALL payload.toolCall.tool");
1303
1304
  return {
1304
1305
  id: expectString(toolCall.id, "TOOL_CALL payload.toolCall.id"),
1306
+ ...typeof payloadRecord.toolExecutionId === "string" ? { toolExecutionId: payloadRecord.toolExecutionId } : {},
1305
1307
  name: expectToolName(tool, "TOOL_CALL payload.toolCall.tool.id"),
1306
1308
  arguments: expectToolArguments(toolCall.args, "TOOL_CALL payload.toolCall.args"),
1307
1309
  status: toolCall.status === void 0 ? "running" : expectToolStatus(toolCall.status, "TOOL_CALL payload.toolCall.status"),
@@ -1325,6 +1327,7 @@ var extractToolCallsFromServerMessage = (msg) => {
1325
1327
  const metadata = msg.metadata === null || msg.metadata === void 0 ? void 0 : expectRecord(msg.metadata, "message.metadata");
1326
1328
  const topLevelToolCalls = readToolCallArray(msg.toolCalls, "message.toolCalls");
1327
1329
  const metadataToolCalls = readToolCallArray(metadata?.toolCalls, "message.metadata.toolCalls");
1330
+ const messageToolExecutionId = typeof metadata?.toolExecutionId === "string" ? metadata.toolExecutionId : void 0;
1328
1331
  const usedMetadataIndexes = /* @__PURE__ */ new Set();
1329
1332
  const parsed = [];
1330
1333
  const findMatchingMetadataIndex = (toolCall) => {
@@ -1342,6 +1345,7 @@ var extractToolCallsFromServerMessage = (msg) => {
1342
1345
  const rawStatus = primary.status ?? secondary?.status;
1343
1346
  return {
1344
1347
  id,
1348
+ ...typeof primary.toolExecutionId === "string" ? { toolExecutionId: primary.toolExecutionId } : typeof secondary?.toolExecutionId === "string" ? { toolExecutionId: secondary.toolExecutionId } : messageToolExecutionId ? { toolExecutionId: messageToolExecutionId } : {},
1345
1349
  name,
1346
1350
  arguments: expectToolArguments(argsRaw, "toolCall.args"),
1347
1351
  ...result !== void 0 ? { result } : {},
@@ -1374,6 +1378,7 @@ var extractToolResultUpdateFromMessage = (msg, now = () => Date.now()) => {
1374
1378
  expectStringValue(msg.createdAt, "tool result message.createdAt");
1375
1379
  return {
1376
1380
  id: firstToolCall.id,
1381
+ ...firstToolCall.toolExecutionId ? { toolExecutionId: firstToolCall.toolExecutionId } : {},
1377
1382
  name: firstToolCall.name,
1378
1383
  result: firstToolCall.result,
1379
1384
  status: firstToolCall.status,
@@ -1513,6 +1518,7 @@ var convertServerMessage = (msg, options = {}) => {
1513
1518
  const shouldRenderToolCalls = msg.senderType !== "tool";
1514
1519
  const mappedToolCalls = parsedToolCalls.map((toolCall) => ({
1515
1520
  id: toolCall.id ?? (options.createId ?? defaultCreateId)(),
1521
+ ...toolCall.toolExecutionId ? { toolExecutionId: toolCall.toolExecutionId } : {},
1516
1522
  name: toolCall.name,
1517
1523
  arguments: toolCall.arguments,
1518
1524
  status: toolCall.status,
@@ -1605,15 +1611,36 @@ var prepareHydratedMessages = async (rawMessages, options = {}) => {
1605
1611
  };
1606
1612
  };
1607
1613
 
1614
+ // src/streamEvents.ts
1615
+ var isRecord2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1616
+ var hasValues = (value) => Array.isArray(value) && value.length > 0;
1617
+ var getStreamEventPayload = (event) => {
1618
+ if (!isRecord2(event)) return event;
1619
+ return "payload" in event ? event.payload : event;
1620
+ };
1621
+ var isTerminalEmptyLlmResultEvent = (event) => {
1622
+ if (!isRecord2(event) || event.type !== "LLM_RESULT") return false;
1623
+ const payload = getStreamEventPayload(event);
1624
+ if (!isRecord2(payload)) return false;
1625
+ if (payload.answer !== "") return false;
1626
+ if (payload.finishReason === "tool_calls") return false;
1627
+ if (hasValues(payload.toolCalls)) return false;
1628
+ const metadata = isRecord2(event.metadata) ? event.metadata : {};
1629
+ const routing = isRecord2(metadata.routing) ? metadata.routing : {};
1630
+ if (hasValues(routing.routeTo) || hasValues(routing.askTo)) return false;
1631
+ if (hasValues(metadata.targetQueue)) return false;
1632
+ return true;
1633
+ };
1634
+
1608
1635
  // src/useCopilotzChat.ts
1609
1636
  var nowTs = () => Date.now();
1610
1637
  var generateId = () => globalThis.crypto?.randomUUID?.() ?? `id-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
1611
1638
  var isAbortError = (error) => error instanceof DOMException && error.name === "AbortError" || typeof error === "object" && error !== null && "name" in error && error.name === "AbortError";
1612
- var getEventPayload = (event) => event?.payload ?? event;
1639
+ var getEventPayload = (event) => getStreamEventPayload(event);
1613
1640
  var getEventSenderType = (payload) => payload?.senderType || payload?.sender?.type;
1614
- var isRecord2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1641
+ var isRecord3 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1615
1642
  var normalizeThreadTag = (value) => {
1616
- if (!isRecord2(value)) return null;
1643
+ if (!isRecord3(value)) return null;
1617
1644
  const id = typeof value.id === "string" ? value.id.trim() : "";
1618
1645
  const name = typeof value.name === "string" ? value.name.trim() : "";
1619
1646
  const color = typeof value.color === "string" && value.color.trim() ? value.color.trim() : void 0;
@@ -1621,7 +1648,7 @@ var normalizeThreadTag = (value) => {
1621
1648
  return color ? { id, name, color } : { id, name };
1622
1649
  };
1623
1650
  var getThreadTagsFromMetadata = (metadata) => {
1624
- if (!isRecord2(metadata) || !isRecord2(metadata.public)) return [];
1651
+ if (!isRecord3(metadata) || !isRecord3(metadata.public)) return [];
1625
1652
  const tags = metadata.public.tags;
1626
1653
  if (!Array.isArray(tags)) return [];
1627
1654
  return tags.map(normalizeThreadTag).filter((tag) => !!tag);
@@ -1629,7 +1656,7 @@ var getThreadTagsFromMetadata = (metadata) => {
1629
1656
  var patchMetadataPublicTags = (metadata, tags) => ({
1630
1657
  ...metadata ?? {},
1631
1658
  public: {
1632
- ...isRecord2(metadata?.public) ? metadata.public : {},
1659
+ ...isRecord3(metadata?.public) ? metadata.public : {},
1633
1660
  tags
1634
1661
  }
1635
1662
  });
@@ -2519,6 +2546,9 @@ function useCopilotz({ userId, userName, userAvatar, assistantName, agentOptions
2519
2546
  if (type === "LLM_RESULT") {
2520
2547
  const finalAnswer = typeof payload?.answer === "string" ? payload.answer : void 0;
2521
2548
  finalizeActiveAssistantTurn(finalAnswer);
2549
+ if (isTerminalEmptyLlmResultEvent(event)) {
2550
+ finalizeStreamingPlaceholders();
2551
+ }
2522
2552
  return;
2523
2553
  }
2524
2554
  if (type === "MESSAGE" || type === "NEW_MESSAGE") {