agent0-sdk 0.2.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/LICENSE +21 -0
- package/README.md +234 -0
- package/dist/core/agent.d.ts +76 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +477 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/contracts.d.ts +688 -0
- package/dist/core/contracts.d.ts.map +1 -0
- package/dist/core/contracts.js +348 -0
- package/dist/core/contracts.js.map +1 -0
- package/dist/core/endpoint-crawler.d.ts +44 -0
- package/dist/core/endpoint-crawler.d.ts.map +1 -0
- package/dist/core/endpoint-crawler.js +280 -0
- package/dist/core/endpoint-crawler.js.map +1 -0
- package/dist/core/feedback-manager.d.ts +98 -0
- package/dist/core/feedback-manager.d.ts.map +1 -0
- package/dist/core/feedback-manager.js +543 -0
- package/dist/core/feedback-manager.js.map +1 -0
- package/dist/core/indexer.d.ts +37 -0
- package/dist/core/indexer.d.ts.map +1 -0
- package/dist/core/indexer.js +189 -0
- package/dist/core/indexer.js.map +1 -0
- package/dist/core/ipfs-client.d.ts +88 -0
- package/dist/core/ipfs-client.d.ts.map +1 -0
- package/dist/core/ipfs-client.js +334 -0
- package/dist/core/ipfs-client.js.map +1 -0
- package/dist/core/sdk.d.ts +177 -0
- package/dist/core/sdk.d.ts.map +1 -0
- package/dist/core/sdk.js +544 -0
- package/dist/core/sdk.js.map +1 -0
- package/dist/core/subgraph-client.d.ts +68 -0
- package/dist/core/subgraph-client.d.ts.map +1 -0
- package/dist/core/subgraph-client.js +635 -0
- package/dist/core/subgraph-client.js.map +1 -0
- package/dist/core/web3-client.d.ts +94 -0
- package/dist/core/web3-client.d.ts.map +1 -0
- package/dist/core/web3-client.js +197 -0
- package/dist/core/web3-client.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/models/enums.d.ts +22 -0
- package/dist/models/enums.d.ts.map +1 -0
- package/dist/models/enums.js +24 -0
- package/dist/models/enums.js.map +1 -0
- package/dist/models/generated/subgraph-types.d.ts +208 -0
- package/dist/models/generated/subgraph-types.d.ts.map +1 -0
- package/dist/models/generated/subgraph-types.js +2 -0
- package/dist/models/generated/subgraph-types.js.map +1 -0
- package/dist/models/index.d.ts +8 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +8 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/interfaces.d.ts +125 -0
- package/dist/models/interfaces.d.ts.map +1 -0
- package/dist/models/interfaces.js +5 -0
- package/dist/models/interfaces.js.map +1 -0
- package/dist/models/types.d.ts +11 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +5 -0
- package/dist/models/types.js.map +1 -0
- package/dist/utils/constants.d.ts +24 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +28 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/id-format.d.ts +30 -0
- package/dist/utils/id-format.d.ts.map +1 -0
- package/dist/utils/id-format.js +67 -0
- package/dist/utils/id-format.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/validation.d.ts +25 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +61 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Endpoint Crawler for MCP and A2A Servers
|
|
3
|
+
* Automatically fetches capabilities (tools, prompts, resources, skills) from endpoints
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Helper to create JSON-RPC request
|
|
7
|
+
*/
|
|
8
|
+
function createJsonRpcRequest(method, params, requestId = 1) {
|
|
9
|
+
return {
|
|
10
|
+
jsonrpc: '2.0',
|
|
11
|
+
method,
|
|
12
|
+
id: requestId,
|
|
13
|
+
params: params || {},
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Crawls MCP and A2A endpoints to fetch capabilities
|
|
18
|
+
*/
|
|
19
|
+
export class EndpointCrawler {
|
|
20
|
+
constructor(timeout = 5000) {
|
|
21
|
+
this.timeout = timeout;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Fetch MCP capabilities (tools, prompts, resources) from an MCP server
|
|
25
|
+
*/
|
|
26
|
+
async fetchMcpCapabilities(endpoint) {
|
|
27
|
+
// Ensure endpoint is HTTP/HTTPS
|
|
28
|
+
if (!endpoint.startsWith('http://') && !endpoint.startsWith('https://')) {
|
|
29
|
+
// Invalid endpoint format - return null
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
// Try JSON-RPC approach first (for real MCP servers)
|
|
33
|
+
const capabilities = await this._fetchViaJsonRpc(endpoint);
|
|
34
|
+
if (capabilities) {
|
|
35
|
+
return capabilities;
|
|
36
|
+
}
|
|
37
|
+
// Fallback to static agentcard.json
|
|
38
|
+
try {
|
|
39
|
+
const agentcardUrl = `${endpoint}/agentcard.json`;
|
|
40
|
+
const response = await fetch(agentcardUrl, {
|
|
41
|
+
signal: AbortSignal.timeout(this.timeout),
|
|
42
|
+
redirect: 'follow',
|
|
43
|
+
});
|
|
44
|
+
if (response.ok) {
|
|
45
|
+
const data = await response.json();
|
|
46
|
+
// Extract capabilities from agentcard
|
|
47
|
+
const result = {
|
|
48
|
+
mcpTools: this._extractList(data, 'tools'),
|
|
49
|
+
mcpPrompts: this._extractList(data, 'prompts'),
|
|
50
|
+
mcpResources: this._extractList(data, 'resources'),
|
|
51
|
+
};
|
|
52
|
+
if (result.mcpTools?.length || result.mcpPrompts?.length || result.mcpResources?.length) {
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
// Silently fail - soft failure pattern
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Try to fetch capabilities via JSON-RPC
|
|
64
|
+
*/
|
|
65
|
+
async _fetchViaJsonRpc(httpUrl) {
|
|
66
|
+
try {
|
|
67
|
+
// Make all JSON-RPC calls in parallel for better performance
|
|
68
|
+
const [tools, resources, prompts] = await Promise.all([
|
|
69
|
+
this._jsonRpcCall(httpUrl, 'tools/list'),
|
|
70
|
+
this._jsonRpcCall(httpUrl, 'resources/list'),
|
|
71
|
+
this._jsonRpcCall(httpUrl, 'prompts/list'),
|
|
72
|
+
]);
|
|
73
|
+
const mcpTools = [];
|
|
74
|
+
const mcpResources = [];
|
|
75
|
+
const mcpPrompts = [];
|
|
76
|
+
// Extract names from tools
|
|
77
|
+
if (tools && typeof tools === 'object' && 'tools' in tools) {
|
|
78
|
+
const toolsArray = tools.tools;
|
|
79
|
+
if (Array.isArray(toolsArray)) {
|
|
80
|
+
for (const tool of toolsArray) {
|
|
81
|
+
if (tool && typeof tool === 'object' && 'name' in tool) {
|
|
82
|
+
mcpTools.push(tool.name);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Extract names from resources
|
|
88
|
+
if (resources && typeof resources === 'object' && 'resources' in resources) {
|
|
89
|
+
const resourcesArray = resources.resources;
|
|
90
|
+
if (Array.isArray(resourcesArray)) {
|
|
91
|
+
for (const resource of resourcesArray) {
|
|
92
|
+
if (resource && typeof resource === 'object' && 'name' in resource) {
|
|
93
|
+
mcpResources.push(resource.name);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Extract names from prompts
|
|
99
|
+
if (prompts && typeof prompts === 'object' && 'prompts' in prompts) {
|
|
100
|
+
const promptsArray = prompts.prompts;
|
|
101
|
+
if (Array.isArray(promptsArray)) {
|
|
102
|
+
for (const prompt of promptsArray) {
|
|
103
|
+
if (prompt && typeof prompt === 'object' && 'name' in prompt) {
|
|
104
|
+
mcpPrompts.push(prompt.name);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (mcpTools.length || mcpResources.length || mcpPrompts.length) {
|
|
110
|
+
return {
|
|
111
|
+
mcpTools: mcpTools.length > 0 ? mcpTools : undefined,
|
|
112
|
+
mcpResources: mcpResources.length > 0 ? mcpResources : undefined,
|
|
113
|
+
mcpPrompts: mcpPrompts.length > 0 ? mcpPrompts : undefined,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
// JSON-RPC approach failed - continue to fallback
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Make a JSON-RPC call and return the result
|
|
124
|
+
*/
|
|
125
|
+
async _jsonRpcCall(url, method, params) {
|
|
126
|
+
try {
|
|
127
|
+
const payload = createJsonRpcRequest(method, params);
|
|
128
|
+
const response = await fetch(url, {
|
|
129
|
+
method: 'POST',
|
|
130
|
+
headers: {
|
|
131
|
+
'Content-Type': 'application/json',
|
|
132
|
+
Accept: 'application/json, text/event-stream',
|
|
133
|
+
},
|
|
134
|
+
body: JSON.stringify(payload),
|
|
135
|
+
signal: AbortSignal.timeout(this.timeout),
|
|
136
|
+
});
|
|
137
|
+
if (!response.ok) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
// Check if response is SSE format
|
|
141
|
+
const contentType = response.headers.get('content-type') || '';
|
|
142
|
+
const text = await response.text();
|
|
143
|
+
if (contentType.includes('text/event-stream') || text.includes('event: message')) {
|
|
144
|
+
// Parse SSE format
|
|
145
|
+
const result = this._parseSseResponse(text);
|
|
146
|
+
if (result) {
|
|
147
|
+
return result;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Regular JSON response
|
|
151
|
+
const result = JSON.parse(text);
|
|
152
|
+
if (result.result !== undefined) {
|
|
153
|
+
return result.result;
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
// JSON-RPC call failed - continue to next method
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Parse Server-Sent Events (SSE) format response
|
|
164
|
+
*/
|
|
165
|
+
_parseSseResponse(sseText) {
|
|
166
|
+
try {
|
|
167
|
+
// Look for "data:" lines containing JSON
|
|
168
|
+
const lines = sseText.split('\n');
|
|
169
|
+
for (const line of lines) {
|
|
170
|
+
if (line.startsWith('data: ')) {
|
|
171
|
+
const jsonStr = line.slice(6); // Remove "data: " prefix
|
|
172
|
+
const data = JSON.parse(jsonStr);
|
|
173
|
+
if (data.result !== undefined) {
|
|
174
|
+
return data.result;
|
|
175
|
+
}
|
|
176
|
+
return data;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
// Failed to parse SSE response - continue
|
|
182
|
+
}
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Fetch A2A capabilities (skills) from an A2A server
|
|
187
|
+
*/
|
|
188
|
+
async fetchA2aCapabilities(endpoint) {
|
|
189
|
+
try {
|
|
190
|
+
// Ensure endpoint is HTTP/HTTPS
|
|
191
|
+
if (!endpoint.startsWith('http://') && !endpoint.startsWith('https://')) {
|
|
192
|
+
// Invalid endpoint format - skip
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
// Try multiple well-known paths for A2A agent cards
|
|
196
|
+
const agentcardUrls = [
|
|
197
|
+
`${endpoint}/agentcard.json`,
|
|
198
|
+
`${endpoint}/.well-known/agent.json`,
|
|
199
|
+
`${endpoint.replace(/\/$/, '')}/.well-known/agent.json`,
|
|
200
|
+
];
|
|
201
|
+
for (const agentcardUrl of agentcardUrls) {
|
|
202
|
+
try {
|
|
203
|
+
const response = await fetch(agentcardUrl, {
|
|
204
|
+
signal: AbortSignal.timeout(this.timeout),
|
|
205
|
+
redirect: 'follow',
|
|
206
|
+
});
|
|
207
|
+
if (response.ok) {
|
|
208
|
+
const data = await response.json();
|
|
209
|
+
// Extract skills from agentcard
|
|
210
|
+
const skills = this._extractList(data, 'skills');
|
|
211
|
+
if (skills && skills.length > 0) {
|
|
212
|
+
return { a2aSkills: skills };
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
// Try next URL
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
// Unexpected error - continue silently
|
|
224
|
+
}
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Extract a list of strings from nested JSON data
|
|
229
|
+
*/
|
|
230
|
+
_extractList(data, key) {
|
|
231
|
+
const result = [];
|
|
232
|
+
// Try top-level key
|
|
233
|
+
if (key in data && Array.isArray(data[key])) {
|
|
234
|
+
for (const item of data[key]) {
|
|
235
|
+
if (typeof item === 'string') {
|
|
236
|
+
result.push(item);
|
|
237
|
+
}
|
|
238
|
+
else if (item && typeof item === 'object') {
|
|
239
|
+
// For objects, try to extract name/id field
|
|
240
|
+
const nameFields = ['name', 'id', 'identifier', 'title'];
|
|
241
|
+
for (const nameField of nameFields) {
|
|
242
|
+
if (nameField in item && typeof item[nameField] === 'string') {
|
|
243
|
+
result.push(item[nameField]);
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Try nested in 'capabilities' or 'abilities'
|
|
251
|
+
if (result.length === 0) {
|
|
252
|
+
const containerKeys = ['capabilities', 'abilities', 'features'];
|
|
253
|
+
for (const containerKey of containerKeys) {
|
|
254
|
+
if (containerKey in data && data[containerKey] && typeof data[containerKey] === 'object') {
|
|
255
|
+
if (key in data[containerKey] && Array.isArray(data[containerKey][key])) {
|
|
256
|
+
for (const item of data[containerKey][key]) {
|
|
257
|
+
if (typeof item === 'string') {
|
|
258
|
+
result.push(item);
|
|
259
|
+
}
|
|
260
|
+
else if (item && typeof item === 'object') {
|
|
261
|
+
const nameFields = ['name', 'id', 'identifier', 'title'];
|
|
262
|
+
for (const nameField of nameFields) {
|
|
263
|
+
if (nameField in item && typeof item[nameField] === 'string') {
|
|
264
|
+
result.push(item[nameField]);
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (result.length > 0) {
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return result;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=endpoint-crawler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-crawler.js","sourceRoot":"","sources":["../../src/core/endpoint-crawler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;GAEG;AACH,SAAS,oBAAoB,CAAC,MAAc,EAAE,MAAgC,EAAE,YAAoB,CAAC;IACnG,OAAO;QACL,OAAO,EAAE,KAAK;QACd,MAAM;QACN,EAAE,EAAE,SAAS;QACb,MAAM,EAAE,MAAM,IAAI,EAAE;KACrB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,eAAe;IAG1B,YAAY,UAAkB,IAAI;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CAAC,QAAgB;QACzC,gCAAgC;QAChC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACxE,wCAAwC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,qDAAqD;QACrD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,GAAG,QAAQ,iBAAiB,CAAC;YAClD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;gBACzC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBACzC,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAEnC,sCAAsC;gBACtC,MAAM,MAAM,GAAoB;oBAC9B,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;oBAC1C,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC;oBAC9C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC;iBACnD,CAAC;gBAEF,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;oBACxF,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uCAAuC;QACzC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,OAAe;QAC5C,IAAI,CAAC;YACH,6DAA6D;YAC7D,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACpD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC;gBACxC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC;gBAC5C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC;aAC3C,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,MAAM,UAAU,GAAa,EAAE,CAAC;YAEhC,2BAA2B;YAC3B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;gBAC3D,MAAM,UAAU,GAAI,KAAa,CAAC,KAAK,CAAC;gBACxC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC9B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;wBAC9B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;4BACvD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC3B,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,+BAA+B;YAC/B,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;gBAC3E,MAAM,cAAc,GAAI,SAAiB,CAAC,SAAS,CAAC;gBACpD,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;oBAClC,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;wBACtC,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;4BACnE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;wBACnC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,6BAA6B;YAC7B,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;gBACnE,MAAM,YAAY,GAAI,OAAe,CAAC,OAAO,CAAC;gBAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;oBAChC,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;wBAClC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;4BAC7D,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBAC/B,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBAChE,OAAO;oBACL,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;oBACpD,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;oBAChE,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;iBAC3D,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kDAAkD;QACpD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,GAAW,EAAE,MAAc,EAAE,MAAgC;QACtF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,MAAM,EAAE,qCAAqC;iBAC9C;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;aAC1C,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,kCAAkC;YAClC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC/D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,IAAI,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACjF,mBAAmB;gBACnB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YAED,wBAAwB;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,MAAM,CAAC,MAAM,CAAC;YACvB,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iDAAiD;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,OAAe;QACvC,IAAI,CAAC;YACH,yCAAyC;YACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;oBACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACjC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBAC9B,OAAO,IAAI,CAAC,MAAM,CAAC;oBACrB,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0CAA0C;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CAAC,QAAgB;QACzC,IAAI,CAAC;YACH,gCAAgC;YAChC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACxE,iCAAiC;gBACjC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,oDAAoD;YACpD,MAAM,aAAa,GAAG;gBACpB,GAAG,QAAQ,iBAAiB;gBAC5B,GAAG,QAAQ,yBAAyB;gBACpC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB;aACxD,CAAC;YAEF,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;gBACzC,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;wBACzC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;wBACzC,QAAQ,EAAE,QAAQ;qBACnB,CAAC,CAAC;oBAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;wBAChB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBAEnC,gCAAgC;wBAChC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;wBAEjD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAChC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;wBAC/B,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,eAAe;oBACf,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uCAAuC;QACzC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAAS,EAAE,GAAW;QACzC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,oBAAoB;QACpB,IAAI,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC5C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;qBAAM,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC5C,4CAA4C;oBAC5C,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;oBACzD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;wBACnC,IAAI,SAAS,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;4BAC7D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;4BAC7B,MAAM;wBACR,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YAChE,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;gBACzC,IAAI,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACzF,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;wBACxE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gCAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACpB,CAAC;iCAAM,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gCAC5C,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;gCACzD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;oCACnC,IAAI,SAAS,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;wCAC7D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;wCAC7B,MAAM;oCACR,CAAC;gCACH,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback management system for Agent0 SDK
|
|
3
|
+
*/
|
|
4
|
+
import { ethers } from 'ethers';
|
|
5
|
+
import type { Feedback, SearchFeedbackParams } from '../models/interfaces';
|
|
6
|
+
import type { AgentId, Address, URI, IdemKey } from '../models/types';
|
|
7
|
+
import type { Web3Client } from './web3-client';
|
|
8
|
+
import type { IPFSClient } from './ipfs-client';
|
|
9
|
+
import type { SubgraphClient } from './subgraph-client';
|
|
10
|
+
export interface FeedbackAuth {
|
|
11
|
+
agentId: bigint;
|
|
12
|
+
clientAddress: Address;
|
|
13
|
+
indexLimit: bigint;
|
|
14
|
+
expiry: bigint;
|
|
15
|
+
chainId: bigint;
|
|
16
|
+
identityRegistry: Address;
|
|
17
|
+
signerAddress: Address;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Manages feedback operations for the Agent0 SDK
|
|
21
|
+
*/
|
|
22
|
+
export declare class FeedbackManager {
|
|
23
|
+
private web3Client;
|
|
24
|
+
private ipfsClient?;
|
|
25
|
+
private reputationRegistry?;
|
|
26
|
+
private identityRegistry?;
|
|
27
|
+
private subgraphClient?;
|
|
28
|
+
constructor(web3Client: Web3Client, ipfsClient?: IPFSClient | undefined, reputationRegistry?: ethers.Contract | undefined, identityRegistry?: ethers.Contract | undefined, subgraphClient?: SubgraphClient | undefined);
|
|
29
|
+
/**
|
|
30
|
+
* Set reputation registry contract (for lazy initialization)
|
|
31
|
+
*/
|
|
32
|
+
setReputationRegistry(registry: ethers.Contract): void;
|
|
33
|
+
/**
|
|
34
|
+
* Set identity registry contract (for lazy initialization)
|
|
35
|
+
*/
|
|
36
|
+
setIdentityRegistry(registry: ethers.Contract): void;
|
|
37
|
+
/**
|
|
38
|
+
* Sign feedback authorization for a client
|
|
39
|
+
*/
|
|
40
|
+
signFeedbackAuth(agentId: AgentId, clientAddress: Address, indexLimit?: number, expiryHours?: number): Promise<string>;
|
|
41
|
+
/**
|
|
42
|
+
* Prepare feedback file (local file/object) according to spec
|
|
43
|
+
*/
|
|
44
|
+
prepareFeedback(agentId: AgentId, score?: number, // 0-100
|
|
45
|
+
tags?: string[], text?: string, capability?: string, name?: string, skill?: string, task?: string, context?: Record<string, unknown>, proofOfPayment?: Record<string, unknown>, extra?: Record<string, unknown>): Record<string, unknown>;
|
|
46
|
+
/**
|
|
47
|
+
* Give feedback (maps 8004 endpoint)
|
|
48
|
+
*/
|
|
49
|
+
giveFeedback(agentId: AgentId, feedbackFile: Record<string, unknown>, idem?: IdemKey, feedbackAuth?: string): Promise<Feedback>;
|
|
50
|
+
/**
|
|
51
|
+
* Get single feedback with responses
|
|
52
|
+
* Currently only supports blockchain query - subgraph support coming soon
|
|
53
|
+
*/
|
|
54
|
+
getFeedback(agentId: AgentId, clientAddress: Address, feedbackIndex: number): Promise<Feedback>;
|
|
55
|
+
/**
|
|
56
|
+
* Get feedback from blockchain
|
|
57
|
+
*/
|
|
58
|
+
private _getFeedbackFromBlockchain;
|
|
59
|
+
/**
|
|
60
|
+
* Search feedback with filters
|
|
61
|
+
* Uses subgraph if available, otherwise returns empty array
|
|
62
|
+
*/
|
|
63
|
+
searchFeedback(params: SearchFeedbackParams): Promise<Feedback[]>;
|
|
64
|
+
/**
|
|
65
|
+
* Map subgraph feedback data to Feedback model
|
|
66
|
+
*/
|
|
67
|
+
private _mapSubgraphFeedbackToModel;
|
|
68
|
+
/**
|
|
69
|
+
* Convert hex bytes32 tags back to strings, or return plain strings as-is
|
|
70
|
+
* The subgraph now stores tags as human-readable strings (not hex),
|
|
71
|
+
* so this method handles both formats for backwards compatibility
|
|
72
|
+
*/
|
|
73
|
+
private _hexBytes32ToTags;
|
|
74
|
+
/**
|
|
75
|
+
* Append response to feedback
|
|
76
|
+
*/
|
|
77
|
+
appendResponse(agentId: AgentId, clientAddress: Address, feedbackIndex: number, responseUri: URI, responseHash: string): Promise<string>;
|
|
78
|
+
/**
|
|
79
|
+
* Revoke feedback
|
|
80
|
+
*/
|
|
81
|
+
revokeFeedback(agentId: AgentId, feedbackIndex: number): Promise<string>;
|
|
82
|
+
/**
|
|
83
|
+
* Convert string to bytes32 for blockchain storage
|
|
84
|
+
*/
|
|
85
|
+
private _stringToBytes32;
|
|
86
|
+
/**
|
|
87
|
+
* Convert bytes32 tags back to strings
|
|
88
|
+
*/
|
|
89
|
+
private _bytes32ToTags;
|
|
90
|
+
/**
|
|
91
|
+
* Get reputation summary
|
|
92
|
+
*/
|
|
93
|
+
getReputationSummary(agentId: AgentId, tag1?: string, tag2?: string): Promise<{
|
|
94
|
+
count: number;
|
|
95
|
+
averageScore: number;
|
|
96
|
+
}>;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=feedback-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-manager.d.ts","sourceRoot":"","sources":["../../src/core/feedback-manager.ts"],"names":[],"mappings":"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"}
|