@assistant-ui/react-a2a 0.1.4 → 0.1.5
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/A2AMessageAccumulator.js +26 -32
- package/dist/A2AMessageAccumulator.js.map +1 -1
- package/dist/appendA2AChunk.d.ts +1 -1
- package/dist/appendA2AChunk.d.ts.map +1 -1
- package/dist/appendA2AChunk.js +102 -82
- package/dist/appendA2AChunk.js.map +1 -1
- package/dist/convertA2AMessages.d.ts +1 -1
- package/dist/convertA2AMessages.d.ts.map +1 -1
- package/dist/convertA2AMessages.js +82 -85
- package/dist/convertA2AMessages.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/testUtils.d.ts +2 -2
- package/dist/testUtils.d.ts.map +1 -1
- package/dist/testUtils.js +4 -8
- package/dist/testUtils.js.map +1 -1
- package/dist/types.js +9 -13
- package/dist/types.js.map +1 -1
- package/dist/useA2AMessages.d.ts +1 -1
- package/dist/useA2AMessages.d.ts.map +1 -1
- package/dist/useA2AMessages.js +115 -127
- package/dist/useA2AMessages.js.map +1 -1
- package/dist/useA2ARuntime.d.ts +1 -1
- package/dist/useA2ARuntime.d.ts.map +1 -1
- package/dist/useA2ARuntime.js +174 -201
- package/dist/useA2ARuntime.js.map +1 -1
- package/package.json +21 -17
|
@@ -1,35 +1,29 @@
|
|
|
1
|
-
// src/A2AMessageAccumulator.ts
|
|
2
1
|
import { v4 as uuidv4 } from "uuid";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
} = {}) {
|
|
10
|
-
this.appendMessage = appendMessage;
|
|
11
|
-
this.addMessages(initialMessages);
|
|
12
|
-
}
|
|
13
|
-
ensureMessageId(message) {
|
|
14
|
-
return message.id ? message : { ...message, id: uuidv4() };
|
|
15
|
-
}
|
|
16
|
-
addMessages(newMessages) {
|
|
17
|
-
if (newMessages.length === 0) return this.getMessages();
|
|
18
|
-
for (const message of newMessages.map(this.ensureMessageId)) {
|
|
19
|
-
const messageId = message.id;
|
|
20
|
-
const previous = this.messagesMap.get(messageId);
|
|
21
|
-
this.messagesMap.set(messageId, this.appendMessage(previous, message));
|
|
2
|
+
export class A2AMessageAccumulator {
|
|
3
|
+
messagesMap = new Map();
|
|
4
|
+
appendMessage;
|
|
5
|
+
constructor({ initialMessages = [], appendMessage = ((_, curr) => curr), } = {}) {
|
|
6
|
+
this.appendMessage = appendMessage;
|
|
7
|
+
this.addMessages(initialMessages);
|
|
22
8
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
9
|
+
ensureMessageId(message) {
|
|
10
|
+
return message.id ? message : { ...message, id: uuidv4() };
|
|
11
|
+
}
|
|
12
|
+
addMessages(newMessages) {
|
|
13
|
+
if (newMessages.length === 0)
|
|
14
|
+
return this.getMessages();
|
|
15
|
+
for (const message of newMessages.map(this.ensureMessageId)) {
|
|
16
|
+
const messageId = message.id; // ensureMessageId guarantees id exists
|
|
17
|
+
const previous = this.messagesMap.get(messageId);
|
|
18
|
+
this.messagesMap.set(messageId, this.appendMessage(previous, message));
|
|
19
|
+
}
|
|
20
|
+
return this.getMessages();
|
|
21
|
+
}
|
|
22
|
+
getMessages() {
|
|
23
|
+
return [...this.messagesMap.values()];
|
|
24
|
+
}
|
|
25
|
+
clear() {
|
|
26
|
+
this.messagesMap.clear();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
35
29
|
//# sourceMappingURL=A2AMessageAccumulator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"A2AMessageAccumulator.js","sourceRoot":"","sources":["../src/A2AMessageAccumulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAOpC,MAAM,OAAO,qBAAqB;IACxB,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC1C,aAAa,CAGP;IAEd,YAAY,EACV,eAAe,GAAG,EAAE,EACpB,aAAa,GAAG,CAAC,CAAC,CAAuB,EAAE,IAAc,EAAE,EAAE,CAAC,IAAI,CAGrD,MAC0B,EAAE;QACzC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IACpC,CAAC;IAEO,eAAe,CAAC,OAAiB;QACvC,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;IAC7D,CAAC;IAEM,WAAW,CAAC,WAAuB;QACxC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAExD,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,EAAG,CAAC,CAAC,uCAAuC;YACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAEM,WAAW;QAChB,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CACF"}
|
package/dist/appendA2AChunk.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appendA2AChunk.d.ts","sourceRoot":"","sources":["../src/appendA2AChunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"appendA2AChunk.d.ts","sourceRoot":"","sources":["../src/appendA2AChunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAgB;AAGrC,eAAO,MAAM,cAAc,GACzB,MAAM,UAAU,GAAG,SAAS,EAC5B,MAAM,UAAU,KACf,UAkHF,CAAC"}
|
package/dist/appendA2AChunk.js
CHANGED
|
@@ -1,90 +1,110 @@
|
|
|
1
|
-
// src/appendA2AChunk.ts
|
|
2
1
|
import { parsePartialJsonObject } from "assistant-stream/utils";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
if (curr.role === "assistant") {
|
|
8
|
-
const newContent = Array.isArray(prev.content) ? [...prev.content] : typeof prev.content === "string" ? [{ type: "text", text: prev.content }] : [];
|
|
9
|
-
if (typeof curr.content === "string") {
|
|
10
|
-
const lastIndex = newContent.length - 1;
|
|
11
|
-
const lastPart = newContent[lastIndex];
|
|
12
|
-
if (lastPart?.type === "text") {
|
|
13
|
-
lastPart.text += curr.content;
|
|
14
|
-
} else {
|
|
15
|
-
newContent.push({ type: "text", text: curr.content });
|
|
16
|
-
}
|
|
17
|
-
} else if (Array.isArray(curr.content)) {
|
|
18
|
-
for (const contentPart of curr.content) {
|
|
19
|
-
const lastIndex = newContent.length - 1;
|
|
20
|
-
const lastPart = newContent[lastIndex];
|
|
21
|
-
if (contentPart.type === "text" && lastPart?.type === "text") {
|
|
22
|
-
lastPart.text += contentPart.text;
|
|
23
|
-
} else {
|
|
24
|
-
newContent.push(contentPart);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
2
|
+
export const appendA2AChunk = (prev, curr) => {
|
|
3
|
+
// If no previous message or different message type, return current as-is
|
|
4
|
+
if (!prev || prev.role !== curr.role || prev.id !== curr.id) {
|
|
5
|
+
return curr;
|
|
27
6
|
}
|
|
28
|
-
|
|
29
|
-
if (curr.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
newToolCalls.push(toolCall);
|
|
7
|
+
// For assistant messages, we need to handle streaming content and tool calls
|
|
8
|
+
if (curr.role === "assistant") {
|
|
9
|
+
const newContent = Array.isArray(prev.content)
|
|
10
|
+
? [...prev.content]
|
|
11
|
+
: typeof prev.content === "string"
|
|
12
|
+
? [{ type: "text", text: prev.content }]
|
|
13
|
+
: [];
|
|
14
|
+
// Append new content chunks
|
|
15
|
+
if (typeof curr.content === "string") {
|
|
16
|
+
const lastIndex = newContent.length - 1;
|
|
17
|
+
const lastPart = newContent[lastIndex];
|
|
18
|
+
if (lastPart?.type === "text") {
|
|
19
|
+
// Append to existing text part
|
|
20
|
+
lastPart.text += curr.content;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// Create new text part
|
|
24
|
+
newContent.push({ type: "text", text: curr.content });
|
|
25
|
+
}
|
|
48
26
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
27
|
+
else if (Array.isArray(curr.content)) {
|
|
28
|
+
for (const contentPart of curr.content) {
|
|
29
|
+
const lastIndex = newContent.length - 1;
|
|
30
|
+
const lastPart = newContent[lastIndex];
|
|
31
|
+
if (contentPart.type === "text" && lastPart?.type === "text") {
|
|
32
|
+
// Append to existing text part
|
|
33
|
+
lastPart.text += contentPart.text;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// Add new content part
|
|
37
|
+
newContent.push(contentPart);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Merge tool calls - A2A typically sends complete tool calls rather than chunks
|
|
42
|
+
const newToolCalls = [...(prev.tool_calls ?? [])];
|
|
43
|
+
if (curr.tool_calls) {
|
|
44
|
+
for (const toolCall of curr.tool_calls) {
|
|
45
|
+
const existingIndex = newToolCalls.findIndex((tc) => tc.id === toolCall.id);
|
|
46
|
+
if (existingIndex >= 0) {
|
|
47
|
+
// Update existing tool call (merge args if needed)
|
|
48
|
+
const existing = newToolCalls[existingIndex];
|
|
49
|
+
newToolCalls[existingIndex] = {
|
|
50
|
+
...existing,
|
|
51
|
+
...toolCall,
|
|
52
|
+
// If argsText is provided in chunks, concatenate it
|
|
53
|
+
argsText: (existing.argsText || "") + (toolCall.argsText || ""),
|
|
54
|
+
// Try to parse merged args, fallback to existing or new args
|
|
55
|
+
args: parsePartialJsonObject((existing.argsText || "") + (toolCall.argsText || "")) ||
|
|
56
|
+
toolCall.args ||
|
|
57
|
+
existing.args,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
// Add new tool call
|
|
62
|
+
newToolCalls.push(toolCall);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
65
|
}
|
|
66
|
-
|
|
66
|
+
// Merge artifacts
|
|
67
|
+
const newArtifacts = [...(prev.artifacts ?? [])];
|
|
68
|
+
if (curr.artifacts) {
|
|
69
|
+
for (const artifact of curr.artifacts) {
|
|
70
|
+
const existingIndex = newArtifacts.findIndex((a) => a.name === artifact.name);
|
|
71
|
+
if (existingIndex >= 0) {
|
|
72
|
+
// Merge artifact parts
|
|
73
|
+
const existingArtifact = newArtifacts[existingIndex];
|
|
74
|
+
newArtifacts[existingIndex] = {
|
|
75
|
+
name: existingArtifact.name,
|
|
76
|
+
parts: [...existingArtifact.parts, ...artifact.parts],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// Add new artifact
|
|
81
|
+
newArtifacts.push(artifact);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const result = {
|
|
86
|
+
...prev,
|
|
87
|
+
content: newContent,
|
|
88
|
+
};
|
|
89
|
+
const newStatus = curr.status || prev.status;
|
|
90
|
+
if (newStatus)
|
|
91
|
+
result.status = newStatus;
|
|
92
|
+
if (newToolCalls.length > 0)
|
|
93
|
+
result.tool_calls = newToolCalls;
|
|
94
|
+
if (newArtifacts.length > 0)
|
|
95
|
+
result.artifacts = newArtifacts;
|
|
96
|
+
return result;
|
|
67
97
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
98
|
+
// For other message types (user, system, tool), just return the current message
|
|
99
|
+
// as they typically don't stream in chunks
|
|
100
|
+
const result = {
|
|
101
|
+
...prev,
|
|
102
|
+
...curr,
|
|
71
103
|
};
|
|
72
|
-
|
|
73
|
-
if (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return
|
|
77
|
-
}
|
|
78
|
-
const result = {
|
|
79
|
-
...prev,
|
|
80
|
-
...curr
|
|
81
|
-
};
|
|
82
|
-
if (curr.artifacts || prev.artifacts) {
|
|
83
|
-
result.artifacts = [...prev.artifacts ?? [], ...curr.artifacts ?? []];
|
|
84
|
-
}
|
|
85
|
-
return result;
|
|
86
|
-
};
|
|
87
|
-
export {
|
|
88
|
-
appendA2AChunk
|
|
104
|
+
// Preserve any existing artifacts and merge with new ones
|
|
105
|
+
if (curr.artifacts || prev.artifacts) {
|
|
106
|
+
result.artifacts = [...(prev.artifacts ?? []), ...(curr.artifacts ?? [])];
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
89
109
|
};
|
|
90
110
|
//# sourceMappingURL=appendA2AChunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"appendA2AChunk.js","sourceRoot":"","sources":["../src/appendA2AChunk.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,IAA4B,EAC5B,IAAgB,EACJ,EAAE;IACd,yEAAyE;IACzE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6EAA6E;IAC7E,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5C,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YACnB,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;gBAChC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjD,CAAC,CAAC,EAAE,CAAC;QAET,4BAA4B;QAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;YAEvC,IAAI,QAAQ,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC9B,+BAA+B;gBAC9B,QAA2C,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACN,uBAAuB;gBACvB,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;gBACxC,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;gBAEvC,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC7D,+BAA+B;oBAC9B,QAA2C,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC;gBACxE,CAAC;qBAAM,CAAC;oBACN,uBAAuB;oBACvB,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,gFAAgF;QAChF,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvC,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAC1C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAC9B,CAAC;gBACF,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;oBACvB,mDAAmD;oBACnD,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAE,CAAC;oBAC9C,YAAY,CAAC,aAAa,CAAC,GAAG;wBAC5B,GAAG,QAAQ;wBACX,GAAG,QAAQ;wBACX,oDAAoD;wBACpD,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;wBAC/D,6DAA6D;wBAC7D,IAAI,EACF,sBAAsB,CACpB,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CACtD;4BACD,QAAQ,CAAC,IAAI;4BACb,QAAQ,CAAC,IAAI;qBAChB,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,oBAAoB;oBACpB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtC,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAChC,CAAC;gBACF,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;oBACvB,uBAAuB;oBACvB,MAAM,gBAAgB,GAAG,YAAY,CAAC,aAAa,CAAE,CAAC;oBACtD,YAAY,CAAC,aAAa,CAAC,GAAG;wBAC5B,IAAI,EAAE,gBAAgB,CAAC,IAAI;wBAC3B,KAAK,EAAE,CAAC,GAAG,gBAAgB,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;qBACtD,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,mBAAmB;oBACnB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAe;YACzB,GAAG,IAAI;YACP,OAAO,EAAE,UAAU;SACpB,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAC7C,IAAI,SAAS;YAAE,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;QACzC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,UAAU,GAAG,YAAY,CAAC;QAC9D,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC;QAC7D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,gFAAgF;IAChF,2CAA2C;IAC3C,MAAM,MAAM,GAAe;QACzB,GAAG,IAAI;QACP,GAAG,IAAI;KACR,CAAC;IACF,0DAA0D;IAC1D,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertA2AMessages.d.ts","sourceRoot":"","sources":["../src/convertA2AMessages.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"convertA2AMessages.d.ts","sourceRoot":"","sources":["../src/convertA2AMessages.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,mBAAgB;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAkC1D,eAAO,MAAM,iBAAiB,GAAI,SAAS,UAAU;;;;;cAOe,MAAM;;;;;;;;;;;;;;;;;;;;;;;;CAiDzE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,UAAU,UAAU,EAAE;;;;;cAnDW,MAAM;;;;;;;;;;;;;;;;;;;;;;;;IAoDzC,CAAC;AAElC,eAAO,MAAM,sBAAsB,GACjC,UAAU,UAAU,EAAE,EACtB,WAAW,OAAO,kDAMhB,CAAC"}
|
|
@@ -1,93 +1,90 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
|
|
3
|
-
// src/convertA2AMessages.ts
|
|
4
2
|
import { useExternalMessageConverter } from "@assistant-ui/react";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
3
|
+
const contentToParts = (content) => {
|
|
4
|
+
if (typeof content === "string")
|
|
5
|
+
return [{ type: "text", text: content }];
|
|
6
|
+
return content
|
|
7
|
+
.map((part) => {
|
|
8
|
+
const type = part.type;
|
|
9
|
+
switch (type) {
|
|
10
|
+
case "text":
|
|
11
|
+
return { type: "text", text: part.text };
|
|
12
|
+
case "image_url":
|
|
13
|
+
if (typeof part.image_url === "string") {
|
|
14
|
+
return { type: "image", image: part.image_url };
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
return {
|
|
18
|
+
type: "image",
|
|
19
|
+
image: part.image_url.url,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
case "data":
|
|
23
|
+
// Convert data parts to text representation for display
|
|
24
|
+
return {
|
|
25
|
+
type: "text",
|
|
26
|
+
text: `[Data: ${JSON.stringify(part.data)}]`,
|
|
27
|
+
};
|
|
28
|
+
default:
|
|
29
|
+
return null;
|
|
21
30
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
type: "text",
|
|
25
|
-
text: `[Data: ${JSON.stringify(part.data)}]`
|
|
26
|
-
};
|
|
27
|
-
default:
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
}).filter((part) => part !== null);
|
|
31
|
+
})
|
|
32
|
+
.filter((part) => part !== null);
|
|
31
33
|
};
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
34
|
+
export const convertA2AMessage = (message) => {
|
|
35
|
+
const role = message.role;
|
|
36
|
+
switch (role) {
|
|
37
|
+
case "system":
|
|
38
|
+
return {
|
|
39
|
+
id: message.id,
|
|
40
|
+
role: "system",
|
|
41
|
+
content: [{ type: "text", text: message.content }],
|
|
42
|
+
};
|
|
43
|
+
case "user":
|
|
44
|
+
return {
|
|
45
|
+
id: message.id,
|
|
46
|
+
role: "user",
|
|
47
|
+
content: contentToParts(message.content),
|
|
48
|
+
};
|
|
49
|
+
case "assistant": {
|
|
50
|
+
const toolCallParts = message.tool_calls?.map((toolCall) => ({
|
|
51
|
+
type: "tool-call",
|
|
52
|
+
toolCallId: toolCall.id,
|
|
53
|
+
toolName: toolCall.name,
|
|
54
|
+
args: toolCall.args,
|
|
55
|
+
argsText: toolCall.argsText ?? JSON.stringify(toolCall.args),
|
|
56
|
+
})) ?? [];
|
|
57
|
+
return {
|
|
58
|
+
id: message.id,
|
|
59
|
+
role: "assistant",
|
|
60
|
+
content: [...contentToParts(message.content), ...toolCallParts],
|
|
61
|
+
status: message.status,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
case "tool":
|
|
65
|
+
return {
|
|
66
|
+
id: message.id,
|
|
67
|
+
role: "user",
|
|
68
|
+
content: [
|
|
69
|
+
{
|
|
70
|
+
type: "tool-call",
|
|
71
|
+
toolCallId: message.tool_call_id,
|
|
72
|
+
toolName: "", // A2A doesn't store tool name in tool messages
|
|
73
|
+
result: JSON.parse(message.content),
|
|
74
|
+
isError: message.status?.type === "incomplete" &&
|
|
75
|
+
message.status?.reason === "error",
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
};
|
|
79
|
+
default:
|
|
80
|
+
const _exhaustiveCheck = role;
|
|
81
|
+
throw new Error(`Unknown message role: ${_exhaustiveCheck}`);
|
|
61
82
|
}
|
|
62
|
-
case "tool":
|
|
63
|
-
return {
|
|
64
|
-
id: message.id,
|
|
65
|
-
role: "user",
|
|
66
|
-
content: [
|
|
67
|
-
{
|
|
68
|
-
type: "tool-call",
|
|
69
|
-
toolCallId: message.tool_call_id,
|
|
70
|
-
toolName: "",
|
|
71
|
-
// A2A doesn't store tool name in tool messages
|
|
72
|
-
result: JSON.parse(message.content),
|
|
73
|
-
isError: message.status?.type === "incomplete" && message.status?.reason === "error"
|
|
74
|
-
}
|
|
75
|
-
]
|
|
76
|
-
};
|
|
77
|
-
default:
|
|
78
|
-
const _exhaustiveCheck = role;
|
|
79
|
-
throw new Error(`Unknown message role: ${_exhaustiveCheck}`);
|
|
80
|
-
}
|
|
81
83
|
};
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
export const convertA2AMessages = (messages) => messages.map(convertA2AMessage);
|
|
85
|
+
export const useA2AMessageConverter = (messages, isRunning) => useExternalMessageConverter({
|
|
86
|
+
callback: convertA2AMessage,
|
|
87
|
+
messages,
|
|
88
|
+
isRunning,
|
|
87
89
|
});
|
|
88
|
-
export {
|
|
89
|
-
convertA2AMessage,
|
|
90
|
-
convertA2AMessages,
|
|
91
|
-
useA2AMessageConverter
|
|
92
|
-
};
|
|
93
90
|
//# sourceMappingURL=convertA2AMessages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"convertA2AMessages.js","sourceRoot":"","sources":["../src/convertA2AMessages.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export * from "./useA2ARuntime";
|
|
2
|
-
export * from "./useA2AMessages";
|
|
3
|
-
export * from "./convertA2AMessages";
|
|
4
|
-
export * from "./types";
|
|
5
|
-
export * from "./A2AMessageAccumulator";
|
|
6
|
-
export * from "./appendA2AChunk";
|
|
1
|
+
export * from "./useA2ARuntime.js";
|
|
2
|
+
export * from "./useA2AMessages.js";
|
|
3
|
+
export * from "./convertA2AMessages.js";
|
|
4
|
+
export * from "./types.js";
|
|
5
|
+
export * from "./A2AMessageAccumulator.js";
|
|
6
|
+
export * from "./appendA2AChunk.js";
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAgC;AAChC,oCAAiC;AACjC,wCAAqC;AACrC,2BAAwB;AACxB,2CAAwC;AACxC,oCAAiC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAgC;AAChC,oCAAiC;AACjC,wCAAqC;AACrC,2BAAwB;AACxB,2CAAwC;AACxC,oCAAiC"}
|
package/dist/testUtils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A2AMessage } from "./types";
|
|
2
|
-
import { A2AMessagesEvent } from "./useA2AMessages";
|
|
1
|
+
import { A2AMessage } from "./types.js";
|
|
2
|
+
import { A2AMessagesEvent } from "./useA2AMessages.js";
|
|
3
3
|
export declare const mockStreamCallbackFactory: (events: Array<A2AMessagesEvent<A2AMessage>>) => () => AsyncGenerator<import("./types").A2AEvent, void, unknown>;
|
|
4
4
|
//# sourceMappingURL=testUtils.d.ts.map
|
package/dist/testUtils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAgB;AACrC,OAAO,EAAE,gBAAgB,EAAE,4BAAyB;AAEpD,eAAO,MAAM,yBAAyB,GACpC,QAAQ,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,oEAM1C,CAAC"}
|
package/dist/testUtils.js
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
};
|
|
7
|
-
export {
|
|
8
|
-
mockStreamCallbackFactory
|
|
1
|
+
export const mockStreamCallbackFactory = (events) => async function* () {
|
|
2
|
+
for (const event of events) {
|
|
3
|
+
yield event;
|
|
4
|
+
}
|
|
9
5
|
};
|
|
10
6
|
//# sourceMappingURL=testUtils.js.map
|
package/dist/testUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/testUtils.ts"],"
|
|
1
|
+
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../src/testUtils.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,MAA2C,EAC3C,EAAE,CACF,KAAK,SAAS,CAAC;IACb,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
|