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.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +234 -0
  3. package/dist/core/agent.d.ts +76 -0
  4. package/dist/core/agent.d.ts.map +1 -0
  5. package/dist/core/agent.js +477 -0
  6. package/dist/core/agent.js.map +1 -0
  7. package/dist/core/contracts.d.ts +688 -0
  8. package/dist/core/contracts.d.ts.map +1 -0
  9. package/dist/core/contracts.js +348 -0
  10. package/dist/core/contracts.js.map +1 -0
  11. package/dist/core/endpoint-crawler.d.ts +44 -0
  12. package/dist/core/endpoint-crawler.d.ts.map +1 -0
  13. package/dist/core/endpoint-crawler.js +280 -0
  14. package/dist/core/endpoint-crawler.js.map +1 -0
  15. package/dist/core/feedback-manager.d.ts +98 -0
  16. package/dist/core/feedback-manager.d.ts.map +1 -0
  17. package/dist/core/feedback-manager.js +543 -0
  18. package/dist/core/feedback-manager.js.map +1 -0
  19. package/dist/core/indexer.d.ts +37 -0
  20. package/dist/core/indexer.d.ts.map +1 -0
  21. package/dist/core/indexer.js +189 -0
  22. package/dist/core/indexer.js.map +1 -0
  23. package/dist/core/ipfs-client.d.ts +88 -0
  24. package/dist/core/ipfs-client.d.ts.map +1 -0
  25. package/dist/core/ipfs-client.js +334 -0
  26. package/dist/core/ipfs-client.js.map +1 -0
  27. package/dist/core/sdk.d.ts +177 -0
  28. package/dist/core/sdk.d.ts.map +1 -0
  29. package/dist/core/sdk.js +544 -0
  30. package/dist/core/sdk.js.map +1 -0
  31. package/dist/core/subgraph-client.d.ts +68 -0
  32. package/dist/core/subgraph-client.d.ts.map +1 -0
  33. package/dist/core/subgraph-client.js +635 -0
  34. package/dist/core/subgraph-client.js.map +1 -0
  35. package/dist/core/web3-client.d.ts +94 -0
  36. package/dist/core/web3-client.d.ts.map +1 -0
  37. package/dist/core/web3-client.js +197 -0
  38. package/dist/core/web3-client.js.map +1 -0
  39. package/dist/index.d.ts +20 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +20 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/models/enums.d.ts +22 -0
  44. package/dist/models/enums.d.ts.map +1 -0
  45. package/dist/models/enums.js +24 -0
  46. package/dist/models/enums.js.map +1 -0
  47. package/dist/models/generated/subgraph-types.d.ts +208 -0
  48. package/dist/models/generated/subgraph-types.d.ts.map +1 -0
  49. package/dist/models/generated/subgraph-types.js +2 -0
  50. package/dist/models/generated/subgraph-types.js.map +1 -0
  51. package/dist/models/index.d.ts +8 -0
  52. package/dist/models/index.d.ts.map +1 -0
  53. package/dist/models/index.js +8 -0
  54. package/dist/models/index.js.map +1 -0
  55. package/dist/models/interfaces.d.ts +125 -0
  56. package/dist/models/interfaces.d.ts.map +1 -0
  57. package/dist/models/interfaces.js +5 -0
  58. package/dist/models/interfaces.js.map +1 -0
  59. package/dist/models/types.d.ts +11 -0
  60. package/dist/models/types.d.ts.map +1 -0
  61. package/dist/models/types.js +5 -0
  62. package/dist/models/types.js.map +1 -0
  63. package/dist/utils/constants.d.ts +24 -0
  64. package/dist/utils/constants.d.ts.map +1 -0
  65. package/dist/utils/constants.js +28 -0
  66. package/dist/utils/constants.js.map +1 -0
  67. package/dist/utils/id-format.d.ts +30 -0
  68. package/dist/utils/id-format.d.ts.map +1 -0
  69. package/dist/utils/id-format.js +67 -0
  70. package/dist/utils/id-format.js.map +1 -0
  71. package/dist/utils/index.d.ts +7 -0
  72. package/dist/utils/index.d.ts.map +1 -0
  73. package/dist/utils/index.js +7 -0
  74. package/dist/utils/index.js.map +1 -0
  75. package/dist/utils/validation.d.ts +25 -0
  76. package/dist/utils/validation.d.ts.map +1 -0
  77. package/dist/utils/validation.js +61 -0
  78. package/dist/utils/validation.js.map +1 -0
  79. package/package.json +71 -0
@@ -0,0 +1,635 @@
1
+ /**
2
+ * Subgraph client for querying The Graph network
3
+ */
4
+ import { GraphQLClient } from 'graphql-request';
5
+ import { normalizeAddress } from '../utils/validation';
6
+ /**
7
+ * Client for querying the subgraph GraphQL API
8
+ */
9
+ export class SubgraphClient {
10
+ constructor(subgraphUrl) {
11
+ this.client = new GraphQLClient(subgraphUrl, {
12
+ headers: {
13
+ 'Content-Type': 'application/json',
14
+ },
15
+ });
16
+ }
17
+ /**
18
+ * Execute a GraphQL query against the subgraph
19
+ */
20
+ async query(query, variables) {
21
+ try {
22
+ const data = await this.client.request(query, variables || {});
23
+ return data;
24
+ }
25
+ catch (error) {
26
+ throw new Error(`Failed to query subgraph: ${error}`);
27
+ }
28
+ }
29
+ /**
30
+ * Query agents from the subgraph
31
+ */
32
+ async getAgents(options = {}) {
33
+ const { where = {}, first = 100, skip = 0, orderBy = 'createdAt', orderDirection = 'desc', includeRegistrationFile = true, } = options;
34
+ // Support Agent-level filters and nested registrationFile filters
35
+ const supportedWhere = {};
36
+ if (where.agentId)
37
+ supportedWhere.agentId = where.agentId;
38
+ if (where.owner)
39
+ supportedWhere.owner = where.owner;
40
+ if (where.agentURI)
41
+ supportedWhere.agentURI = where.agentURI;
42
+ if (where.registrationFile_not !== undefined)
43
+ supportedWhere.registrationFile_not = where.registrationFile_not;
44
+ // Support nested registrationFile filters (pushed to subgraph level)
45
+ // Note: Python SDK uses "registrationFile_" (with underscore) for nested filters
46
+ if (where.registrationFile) {
47
+ supportedWhere.registrationFile_ = where.registrationFile;
48
+ }
49
+ if (where.registrationFile_) {
50
+ supportedWhere.registrationFile_ = where.registrationFile_;
51
+ }
52
+ // Build WHERE clause with support for nested filters
53
+ let whereClause = '';
54
+ if (Object.keys(supportedWhere).length > 0) {
55
+ const conditions = [];
56
+ for (const [key, value] of Object.entries(supportedWhere)) {
57
+ if ((key === 'registrationFile' || key === 'registrationFile_') && typeof value === 'object') {
58
+ // Handle nested registrationFile filters
59
+ // Python SDK uses "registrationFile_" (with underscore) for nested filters in GraphQL
60
+ const nestedConditions = [];
61
+ for (const [nestedKey, nestedValue] of Object.entries(value)) {
62
+ if (typeof nestedValue === 'boolean') {
63
+ nestedConditions.push(`${nestedKey}: ${nestedValue.toString().toLowerCase()}`);
64
+ }
65
+ else if (typeof nestedValue === 'string') {
66
+ nestedConditions.push(`${nestedKey}: "${nestedValue}"`);
67
+ }
68
+ else if (nestedValue === null) {
69
+ if (nestedKey.endsWith('_not')) {
70
+ nestedConditions.push(`${nestedKey}: null`);
71
+ }
72
+ else {
73
+ nestedConditions.push(`${nestedKey}_not: null`);
74
+ }
75
+ }
76
+ }
77
+ if (nestedConditions.length > 0) {
78
+ conditions.push(`registrationFile_: { ${nestedConditions.join(', ')} }`);
79
+ }
80
+ }
81
+ else if (typeof value === 'boolean') {
82
+ conditions.push(`${key}: ${value.toString().toLowerCase()}`);
83
+ }
84
+ else if (typeof value === 'string') {
85
+ conditions.push(`${key}: "${value}"`);
86
+ }
87
+ else if (typeof value === 'number') {
88
+ conditions.push(`${key}: ${value}`);
89
+ }
90
+ else if (Array.isArray(value)) {
91
+ conditions.push(`${key}: ${JSON.stringify(value)}`);
92
+ }
93
+ else if (value === null) {
94
+ // Don't add _not if the key already ends with _not (e.g., registrationFile_not)
95
+ const filterKey = key.endsWith('_not') ? key : `${key}_not`;
96
+ conditions.push(`${filterKey}: null`);
97
+ }
98
+ }
99
+ if (conditions.length > 0) {
100
+ whereClause = `where: { ${conditions.join(', ')} }`;
101
+ }
102
+ }
103
+ // Build registration file fragment
104
+ const regFileFragment = includeRegistrationFile
105
+ ? `
106
+ registrationFile {
107
+ id
108
+ agentId
109
+ name
110
+ description
111
+ image
112
+ active
113
+ x402support
114
+ supportedTrusts
115
+ mcpEndpoint
116
+ mcpVersion
117
+ a2aEndpoint
118
+ a2aVersion
119
+ ens
120
+ did
121
+ agentWallet
122
+ agentWalletChainId
123
+ mcpTools
124
+ mcpPrompts
125
+ mcpResources
126
+ a2aSkills
127
+ }
128
+ `
129
+ : '';
130
+ const query = `
131
+ query GetAgents($first: Int!, $skip: Int!, $orderBy: Agent_orderBy!, $orderDirection: OrderDirection!) {
132
+ agents(
133
+ ${whereClause}
134
+ first: $first
135
+ skip: $skip
136
+ orderBy: $orderBy
137
+ orderDirection: $orderDirection
138
+ ) {
139
+ id
140
+ chainId
141
+ agentId
142
+ owner
143
+ operators
144
+ agentURI
145
+ createdAt
146
+ updatedAt
147
+ ${regFileFragment}
148
+ }
149
+ }
150
+ `;
151
+ // GraphQL enum expects lowercase
152
+ const variables = {
153
+ first,
154
+ skip,
155
+ orderBy,
156
+ orderDirection: orderDirection.toLowerCase(),
157
+ };
158
+ try {
159
+ const data = await this.query(query, variables);
160
+ return (data.agents || []).map((agent) => this._transformAgent(agent));
161
+ }
162
+ catch (error) {
163
+ throw new Error(`Failed to get agents from subgraph: ${error}`);
164
+ }
165
+ }
166
+ /**
167
+ * Get a single agent by ID
168
+ */
169
+ async getAgentById(agentId) {
170
+ const query = `
171
+ query GetAgent($agentId: String!) {
172
+ agent(id: $agentId) {
173
+ id
174
+ chainId
175
+ agentId
176
+ owner
177
+ operators
178
+ agentURI
179
+ createdAt
180
+ updatedAt
181
+ registrationFile {
182
+ id
183
+ agentId
184
+ name
185
+ description
186
+ image
187
+ active
188
+ x402support
189
+ supportedTrusts
190
+ mcpEndpoint
191
+ mcpVersion
192
+ a2aEndpoint
193
+ a2aVersion
194
+ ens
195
+ did
196
+ agentWallet
197
+ agentWalletChainId
198
+ mcpTools
199
+ mcpPrompts
200
+ mcpResources
201
+ a2aSkills
202
+ }
203
+ }
204
+ }
205
+ `;
206
+ try {
207
+ const data = await this.query(query, { agentId });
208
+ if (!data.agent) {
209
+ return null;
210
+ }
211
+ return this._transformAgent(data.agent);
212
+ }
213
+ catch (error) {
214
+ throw new Error(`Failed to get agent from subgraph: ${error}`);
215
+ }
216
+ }
217
+ /**
218
+ * Transform raw subgraph agent data to AgentSummary
219
+ */
220
+ _transformAgent(agent) {
221
+ // Fields from Agent entity
222
+ const chainId = parseInt(agent.chainId?.toString() || '0', 10);
223
+ const agentIdStr = agent.id || `${chainId}:${agent.agentId?.toString() || '0'}`;
224
+ // Fields from AgentRegistrationFile (registrationFile)
225
+ const regFile = agent.registrationFile;
226
+ // Transform operators from Bytes array to Address array
227
+ const operators = (agent.operators || []).map((op) => typeof op === 'string' ? normalizeAddress(op) : op);
228
+ return {
229
+ chainId,
230
+ agentId: agentIdStr,
231
+ name: regFile?.name || '',
232
+ image: regFile?.image || undefined,
233
+ description: regFile?.description || '',
234
+ owners: agent.owner ? [normalizeAddress(agent.owner)] : [],
235
+ operators,
236
+ mcp: !!regFile?.mcpEndpoint,
237
+ a2a: !!regFile?.a2aEndpoint,
238
+ ens: regFile?.ens || undefined,
239
+ did: regFile?.did || undefined,
240
+ walletAddress: regFile?.agentWallet ? normalizeAddress(regFile.agentWallet) : undefined,
241
+ supportedTrusts: regFile?.supportedTrusts || [],
242
+ a2aSkills: regFile?.a2aSkills || [],
243
+ mcpTools: regFile?.mcpTools || [],
244
+ mcpPrompts: regFile?.mcpPrompts || [],
245
+ mcpResources: regFile?.mcpResources || [],
246
+ active: regFile?.active ?? false,
247
+ x402support: regFile?.x402support ?? false,
248
+ extras: {},
249
+ };
250
+ }
251
+ /**
252
+ * Search agents with filters (delegates to getAgents with WHERE clause)
253
+ * @param params Search parameters
254
+ * @param first Maximum number of results to return (default: 100)
255
+ * @param skip Number of results to skip for pagination (default: 0)
256
+ */
257
+ async searchAgents(params, first = 100, skip = 0) {
258
+ const where = {
259
+ registrationFile_not: null // Only get agents with registration files
260
+ };
261
+ // Note: Most search fields are in registrationFile, so we need to filter after fetching
262
+ // For now, we'll do basic filtering on Agent fields and then filter on registrationFile fields
263
+ if (params.active !== undefined || params.mcp !== undefined || params.a2a !== undefined ||
264
+ params.x402support !== undefined || params.ens || params.walletAddress ||
265
+ params.supportedTrust || params.a2aSkills || params.mcpTools || params.name) {
266
+ // Push basic filters to subgraph using nested registrationFile filters
267
+ const registrationFileFilters = {};
268
+ if (params.active !== undefined)
269
+ registrationFileFilters.active = params.active;
270
+ if (params.x402support !== undefined)
271
+ registrationFileFilters.x402support = params.x402support;
272
+ if (params.ens)
273
+ registrationFileFilters.ens = params.ens.toLowerCase();
274
+ if (params.walletAddress)
275
+ registrationFileFilters.agentWallet = params.walletAddress.toLowerCase();
276
+ if (params.mcp !== undefined) {
277
+ registrationFileFilters[params.mcp ? 'mcpEndpoint_not' : 'mcpEndpoint'] = null;
278
+ }
279
+ if (params.a2a !== undefined) {
280
+ registrationFileFilters[params.a2a ? 'a2aEndpoint_not' : 'a2aEndpoint'] = null;
281
+ }
282
+ const whereWithFilters = {};
283
+ if (Object.keys(registrationFileFilters).length > 0) {
284
+ // Python SDK uses "registrationFile_" (with underscore) for nested filters
285
+ whereWithFilters.registrationFile_ = registrationFileFilters;
286
+ }
287
+ // Fetch records with filters and pagination applied at subgraph level
288
+ const allAgents = await this.getAgents({ where: whereWithFilters, first, skip });
289
+ // Only filter client-side for fields that can't be filtered at subgraph level
290
+ // Fields already filtered at subgraph level: active, x402support, mcp, a2a, ens, walletAddress
291
+ return allAgents.filter((agent) => {
292
+ // Name filtering (substring search - not supported at subgraph level)
293
+ if (params.name && !agent.name.toLowerCase().includes(params.name.toLowerCase())) {
294
+ return false;
295
+ }
296
+ // Array contains filtering (supportedTrust, a2aSkills, mcpTools) - these require array contains logic
297
+ if (params.supportedTrust && params.supportedTrust.length > 0) {
298
+ const hasAllTrusts = params.supportedTrust.every(trust => agent.supportedTrusts.includes(trust));
299
+ if (!hasAllTrusts)
300
+ return false;
301
+ }
302
+ if (params.a2aSkills && params.a2aSkills.length > 0) {
303
+ const hasAllSkills = params.a2aSkills.every(skill => agent.a2aSkills.includes(skill));
304
+ if (!hasAllSkills)
305
+ return false;
306
+ }
307
+ if (params.mcpTools && params.mcpTools.length > 0) {
308
+ const hasAllTools = params.mcpTools.every(tool => agent.mcpTools.includes(tool));
309
+ if (!hasAllTools)
310
+ return false;
311
+ }
312
+ return true;
313
+ });
314
+ }
315
+ return this.getAgents({ where, first, skip });
316
+ }
317
+ /**
318
+ * Search feedback with filters
319
+ */
320
+ async searchFeedback(params, first = 100, skip = 0, orderBy = 'createdAt', orderDirection = 'desc') {
321
+ // Build WHERE clause from params
322
+ const whereConditions = [];
323
+ if (params.agents && params.agents.length > 0) {
324
+ const agentIds = params.agents.map((aid) => `"${aid}"`).join(', ');
325
+ whereConditions.push(`agent_in: [${agentIds}]`);
326
+ }
327
+ if (params.reviewers && params.reviewers.length > 0) {
328
+ const reviewers = params.reviewers.map((addr) => `"${addr}"`).join(', ');
329
+ whereConditions.push(`clientAddress_in: [${reviewers}]`);
330
+ }
331
+ if (!params.includeRevoked) {
332
+ whereConditions.push('isRevoked: false');
333
+ }
334
+ // Build all non-tag conditions first
335
+ const nonTagConditions = [...whereConditions];
336
+ // Handle tag filtering separately - it needs to be at the top level
337
+ let tagFilterCondition = null;
338
+ if (params.tags && params.tags.length > 0) {
339
+ // Tag search: any of the tags must match in tag1 OR tag2
340
+ // Build complete condition with all filters for each tag alternative
341
+ const tagWhereItems = [];
342
+ for (const tag of params.tags) {
343
+ // For tag1 match
344
+ const allConditionsTag1 = [...nonTagConditions, `tag1: "${tag}"`];
345
+ tagWhereItems.push(`{ ${allConditionsTag1.join(', ')} }`);
346
+ // For tag2 match
347
+ const allConditionsTag2 = [...nonTagConditions, `tag2: "${tag}"`];
348
+ tagWhereItems.push(`{ ${allConditionsTag2.join(', ')} }`);
349
+ }
350
+ // Join all tag alternatives
351
+ tagFilterCondition = tagWhereItems.join(', ');
352
+ }
353
+ if (params.minScore !== undefined) {
354
+ whereConditions.push(`score_gte: ${params.minScore}`);
355
+ }
356
+ if (params.maxScore !== undefined) {
357
+ whereConditions.push(`score_lte: ${params.maxScore}`);
358
+ }
359
+ // Feedback file filters
360
+ const feedbackFileFilters = [];
361
+ if (params.capabilities && params.capabilities.length > 0) {
362
+ const capabilities = params.capabilities.map((cap) => `"${cap}"`).join(', ');
363
+ feedbackFileFilters.push(`capability_in: [${capabilities}]`);
364
+ }
365
+ if (params.skills && params.skills.length > 0) {
366
+ const skills = params.skills.map((skill) => `"${skill}"`).join(', ');
367
+ feedbackFileFilters.push(`skill_in: [${skills}]`);
368
+ }
369
+ if (params.tasks && params.tasks.length > 0) {
370
+ const tasks = params.tasks.map((task) => `"${task}"`).join(', ');
371
+ feedbackFileFilters.push(`task_in: [${tasks}]`);
372
+ }
373
+ if (params.names && params.names.length > 0) {
374
+ const names = params.names.map((name) => `"${name}"`).join(', ');
375
+ feedbackFileFilters.push(`name_in: [${names}]`);
376
+ }
377
+ if (feedbackFileFilters.length > 0) {
378
+ whereConditions.push(`feedbackFile_: { ${feedbackFileFilters.join(', ')} }`);
379
+ }
380
+ // Use tag_filter_condition if tags were provided, otherwise use standard where clause
381
+ let whereClause = '';
382
+ if (tagFilterCondition) {
383
+ // tagFilterCondition already contains properly formatted items
384
+ whereClause = `where: { or: [${tagFilterCondition}] }`;
385
+ }
386
+ else if (whereConditions.length > 0) {
387
+ whereClause = `where: { ${whereConditions.join(', ')} }`;
388
+ }
389
+ const query = `
390
+ {
391
+ feedbacks(
392
+ ${whereClause}
393
+ first: ${first}
394
+ skip: ${skip}
395
+ orderBy: ${orderBy}
396
+ orderDirection: ${orderDirection}
397
+ ) {
398
+ id
399
+ agent { id agentId chainId }
400
+ clientAddress
401
+ score
402
+ tag1
403
+ tag2
404
+ feedbackUri
405
+ feedbackURIType
406
+ feedbackHash
407
+ isRevoked
408
+ createdAt
409
+ revokedAt
410
+ feedbackFile {
411
+ id
412
+ feedbackId
413
+ text
414
+ capability
415
+ name
416
+ skill
417
+ task
418
+ context
419
+ proofOfPaymentFromAddress
420
+ proofOfPaymentToAddress
421
+ proofOfPaymentChainId
422
+ proofOfPaymentTxHash
423
+ tag1
424
+ tag2
425
+ createdAt
426
+ }
427
+ responses {
428
+ id
429
+ responder
430
+ responseUri
431
+ responseHash
432
+ createdAt
433
+ }
434
+ }
435
+ }
436
+ `;
437
+ const result = await this.query(query);
438
+ return result.feedbacks || [];
439
+ }
440
+ /**
441
+ * Search agents filtered by reputation criteria
442
+ */
443
+ async searchAgentsByReputation(agents, tags, reviewers, capabilities, skills, tasks, names, minAverageScore, includeRevoked = false, first = 100, skip = 0, orderBy = 'createdAt', orderDirection = 'desc') {
444
+ // Build feedback filters
445
+ const feedbackFilters = [];
446
+ if (!includeRevoked) {
447
+ feedbackFilters.push('isRevoked: false');
448
+ }
449
+ if (tags && tags.length > 0) {
450
+ const tagFilterItems = [];
451
+ for (const tag of tags) {
452
+ tagFilterItems.push(`{or: [{tag1: "${tag}"}, {tag2: "${tag}"}]}`);
453
+ }
454
+ feedbackFilters.push(`or: [${tagFilterItems.join(', ')}]`);
455
+ }
456
+ if (reviewers && reviewers.length > 0) {
457
+ const reviewersList = reviewers.map((addr) => `"${addr}"`).join(', ');
458
+ feedbackFilters.push(`clientAddress_in: [${reviewersList}]`);
459
+ }
460
+ // Feedback file filters
461
+ const feedbackFileFilters = [];
462
+ if (capabilities && capabilities.length > 0) {
463
+ const capabilitiesList = capabilities.map((cap) => `"${cap}"`).join(', ');
464
+ feedbackFileFilters.push(`capability_in: [${capabilitiesList}]`);
465
+ }
466
+ if (skills && skills.length > 0) {
467
+ const skillsList = skills.map((skill) => `"${skill}"`).join(', ');
468
+ feedbackFileFilters.push(`skill_in: [${skillsList}]`);
469
+ }
470
+ if (tasks && tasks.length > 0) {
471
+ const tasksList = tasks.map((task) => `"${task}"`).join(', ');
472
+ feedbackFileFilters.push(`task_in: [${tasksList}]`);
473
+ }
474
+ if (names && names.length > 0) {
475
+ const namesList = names.map((name) => `"${name}"`).join(', ');
476
+ feedbackFileFilters.push(`name_in: [${namesList}]`);
477
+ }
478
+ if (feedbackFileFilters.length > 0) {
479
+ feedbackFilters.push(`feedbackFile_: { ${feedbackFileFilters.join(', ')} }`);
480
+ }
481
+ // If we have feedback filters, first query feedback to get agent IDs
482
+ let agentWhere = '';
483
+ if (tags || capabilities || skills || tasks || names || reviewers) {
484
+ const feedbackWhere = feedbackFilters.length > 0
485
+ ? `{ ${feedbackFilters.join(', ')} }`
486
+ : '{}';
487
+ const feedbackQuery = `
488
+ {
489
+ feedbacks(
490
+ where: ${feedbackWhere}
491
+ first: 1000
492
+ skip: 0
493
+ ) {
494
+ agent {
495
+ id
496
+ }
497
+ }
498
+ }
499
+ `;
500
+ try {
501
+ const feedbackResult = await this.query(feedbackQuery);
502
+ const feedbacksData = feedbackResult.feedbacks || [];
503
+ // Extract unique agent IDs
504
+ const agentIdsSet = new Set();
505
+ for (const fb of feedbacksData) {
506
+ const agentId = fb.agent?.id;
507
+ if (agentId) {
508
+ agentIdsSet.add(agentId);
509
+ }
510
+ }
511
+ if (agentIdsSet.size === 0) {
512
+ // No agents have matching feedback
513
+ return [];
514
+ }
515
+ // Apply agent filter if specified
516
+ let agentIdsList = Array.from(agentIdsSet);
517
+ if (agents && agents.length > 0) {
518
+ agentIdsList = agentIdsList.filter((aid) => agents.includes(aid));
519
+ if (agentIdsList.length === 0) {
520
+ return [];
521
+ }
522
+ }
523
+ const agentIdsStr = agentIdsList.map((aid) => `"${aid}"`).join(', ');
524
+ agentWhere = `where: { id_in: [${agentIdsStr}] }`;
525
+ }
526
+ catch (error) {
527
+ // If feedback query fails, return empty
528
+ return [];
529
+ }
530
+ }
531
+ else {
532
+ // No feedback filters - query agents directly
533
+ const agentFilters = [];
534
+ if (agents && agents.length > 0) {
535
+ const agentIds = agents.map((aid) => `"${aid}"`).join(', ');
536
+ agentFilters.push(`id_in: [${agentIds}]`);
537
+ }
538
+ if (agentFilters.length > 0) {
539
+ agentWhere = `where: { ${agentFilters.join(', ')} }`;
540
+ }
541
+ }
542
+ // Build feedback where for agent query (to calculate scores)
543
+ const feedbackWhereForAgents = feedbackFilters.length > 0
544
+ ? `{ ${feedbackFilters.join(', ')} }`
545
+ : '{}';
546
+ const query = `
547
+ {
548
+ agents(
549
+ ${agentWhere}
550
+ first: ${first}
551
+ skip: ${skip}
552
+ orderBy: ${orderBy}
553
+ orderDirection: ${orderDirection}
554
+ ) {
555
+ id
556
+ chainId
557
+ agentId
558
+ agentURI
559
+ agentURIType
560
+ owner
561
+ operators
562
+ createdAt
563
+ updatedAt
564
+ totalFeedback
565
+ lastActivity
566
+ registrationFile {
567
+ id
568
+ name
569
+ description
570
+ image
571
+ active
572
+ x402support
573
+ supportedTrusts
574
+ mcpEndpoint
575
+ mcpVersion
576
+ a2aEndpoint
577
+ a2aVersion
578
+ ens
579
+ did
580
+ agentWallet
581
+ agentWalletChainId
582
+ mcpTools
583
+ mcpPrompts
584
+ mcpResources
585
+ a2aSkills
586
+ createdAt
587
+ }
588
+ feedback(where: ${feedbackWhereForAgents}) {
589
+ score
590
+ isRevoked
591
+ feedbackFile {
592
+ capability
593
+ skill
594
+ task
595
+ name
596
+ }
597
+ }
598
+ }
599
+ }
600
+ `;
601
+ try {
602
+ const result = await this.query(query);
603
+ const agentsResult = result.agents || [];
604
+ // Calculate average scores
605
+ const agentsWithScores = agentsResult.map((agent) => {
606
+ const feedbacks = agent.feedback || [];
607
+ let averageScore = null;
608
+ if (feedbacks.length > 0) {
609
+ const scores = feedbacks
610
+ .filter((fb) => fb.score > 0)
611
+ .map((fb) => fb.score);
612
+ if (scores.length > 0) {
613
+ averageScore = scores.reduce((sum, score) => sum + score, 0) / scores.length;
614
+ }
615
+ }
616
+ // Remove feedback array from result (not part of QueryAgent)
617
+ const { feedback, ...agentData } = agent;
618
+ return {
619
+ ...agentData,
620
+ averageScore,
621
+ };
622
+ });
623
+ // Filter by minAverageScore
624
+ let filteredAgents = agentsWithScores;
625
+ if (minAverageScore !== undefined) {
626
+ filteredAgents = agentsWithScores.filter((agent) => agent.averageScore !== null && agent.averageScore >= minAverageScore);
627
+ }
628
+ return filteredAgents;
629
+ }
630
+ catch (error) {
631
+ throw new Error(`Subgraph reputation search failed: ${error}`);
632
+ }
633
+ }
634
+ }
635
+ //# sourceMappingURL=subgraph-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subgraph-client.js","sourceRoot":"","sources":["../../src/core/subgraph-client.ts"],"names":[],"mappings":"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"}