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,543 @@
1
+ /**
2
+ * Feedback management system for Agent0 SDK
3
+ */
4
+ import { ethers } from 'ethers';
5
+ import { parseAgentId, formatFeedbackId, parseFeedbackId } from '../utils/id-format';
6
+ import { DEFAULTS } from '../utils/constants';
7
+ /**
8
+ * Manages feedback operations for the Agent0 SDK
9
+ */
10
+ export class FeedbackManager {
11
+ constructor(web3Client, ipfsClient, reputationRegistry, identityRegistry, subgraphClient) {
12
+ this.web3Client = web3Client;
13
+ this.ipfsClient = ipfsClient;
14
+ this.reputationRegistry = reputationRegistry;
15
+ this.identityRegistry = identityRegistry;
16
+ this.subgraphClient = subgraphClient;
17
+ }
18
+ /**
19
+ * Set reputation registry contract (for lazy initialization)
20
+ */
21
+ setReputationRegistry(registry) {
22
+ this.reputationRegistry = registry;
23
+ }
24
+ /**
25
+ * Set identity registry contract (for lazy initialization)
26
+ */
27
+ setIdentityRegistry(registry) {
28
+ this.identityRegistry = registry;
29
+ }
30
+ /**
31
+ * Sign feedback authorization for a client
32
+ */
33
+ async signFeedbackAuth(agentId, clientAddress, indexLimit, expiryHours = DEFAULTS.FEEDBACK_EXPIRY_HOURS) {
34
+ // Parse agent ID to get token ID
35
+ const { tokenId } = parseAgentId(agentId);
36
+ // Get current feedback index if not provided
37
+ let indexLimitValue = indexLimit;
38
+ if (indexLimitValue === undefined && this.reputationRegistry) {
39
+ try {
40
+ const lastIndex = await this.web3Client.callContract(this.reputationRegistry, 'getLastIndex', BigInt(tokenId), clientAddress);
41
+ indexLimitValue = Number(lastIndex) + 1;
42
+ }
43
+ catch {
44
+ // If we can't get the index, default to 1 (for first feedback)
45
+ indexLimitValue = 1;
46
+ }
47
+ }
48
+ else if (indexLimitValue === undefined) {
49
+ indexLimitValue = 1;
50
+ }
51
+ // Calculate expiry timestamp
52
+ const expiry = BigInt(Math.floor(Date.now() / 1000) + expiryHours * 3600);
53
+ // Get chain ID (await if needed)
54
+ let chainId;
55
+ if (this.web3Client.chainId === 0n) {
56
+ await this.web3Client.initialize();
57
+ chainId = this.web3Client.chainId;
58
+ }
59
+ else {
60
+ chainId = this.web3Client.chainId;
61
+ }
62
+ const identityRegistryAddress = this.identityRegistry
63
+ ? await this.identityRegistry.getAddress()
64
+ : '0x0';
65
+ const signerAddress = this.web3Client.address || '0x0';
66
+ if (!signerAddress || signerAddress === '0x0') {
67
+ throw new Error('No signer available for feedback authorization');
68
+ }
69
+ // Encode feedback auth data
70
+ const authData = this.web3Client.encodeFeedbackAuth(BigInt(tokenId), clientAddress, BigInt(indexLimitValue), expiry, chainId, identityRegistryAddress, signerAddress);
71
+ // Hash the encoded data (matching contract's keccak256(abi.encode(...)))
72
+ // The contract expects: keccak256(abi.encode(...)) then signed with Ethereum message prefix
73
+ const messageHash = ethers.keccak256(ethers.getBytes(authData));
74
+ // Sign the hash (ethers.js will add the Ethereum signed message prefix automatically)
75
+ const signature = await this.web3Client.signMessage(ethers.getBytes(messageHash));
76
+ // Combine auth data and signature
77
+ // Both are hex strings, combine them
78
+ const authDataNoPrefix = authData.startsWith('0x') ? authData.slice(2) : authData;
79
+ const sigNoPrefix = signature.startsWith('0x') ? signature.slice(2) : signature;
80
+ return '0x' + authDataNoPrefix + sigNoPrefix;
81
+ }
82
+ /**
83
+ * Prepare feedback file (local file/object) according to spec
84
+ */
85
+ prepareFeedback(agentId, score, // 0-100
86
+ tags, text, capability, name, skill, task, context, proofOfPayment, extra) {
87
+ const tagsArray = tags || [];
88
+ // Parse agent ID to get token ID
89
+ const { tokenId } = parseAgentId(agentId);
90
+ // Get current timestamp in ISO format
91
+ const createdAt = new Date().toISOString();
92
+ // Determine chain ID and registry address
93
+ const chainId = this.web3Client.chainId;
94
+ const identityRegistryAddress = this.identityRegistry
95
+ ? this.identityRegistry.target
96
+ : '0x0';
97
+ const clientAddress = this.web3Client.address || '0x0';
98
+ // Build feedback data according to spec
99
+ const feedbackData = {
100
+ // MUST FIELDS
101
+ agentRegistry: `eip155:${chainId}:${identityRegistryAddress}`,
102
+ agentId: tokenId,
103
+ clientAddress: `eip155:${chainId}:${clientAddress}`,
104
+ createdAt,
105
+ feedbackAuth: '', // Will be filled when giving feedback
106
+ score: score !== undefined ? Math.round(score) : 0, // Score as integer (0-100)
107
+ // MAY FIELDS
108
+ tag1: tagsArray[0] || undefined,
109
+ tag2: tagsArray.length > 1 ? tagsArray[1] : undefined,
110
+ skill,
111
+ context,
112
+ task,
113
+ capability,
114
+ name,
115
+ proofOfPayment: proofOfPayment,
116
+ };
117
+ // Remove undefined values to keep the structure clean
118
+ const cleaned = {};
119
+ for (const [key, value] of Object.entries(feedbackData)) {
120
+ if (value !== undefined && value !== null) {
121
+ cleaned[key] = value;
122
+ }
123
+ }
124
+ if (extra) {
125
+ Object.assign(cleaned, extra);
126
+ }
127
+ return cleaned;
128
+ }
129
+ /**
130
+ * Give feedback (maps 8004 endpoint)
131
+ */
132
+ async giveFeedback(agentId, feedbackFile, idem, feedbackAuth) {
133
+ // Parse agent ID
134
+ const { tokenId } = parseAgentId(agentId);
135
+ // Get client address (the one giving feedback)
136
+ const clientAddress = this.web3Client.address;
137
+ if (!clientAddress) {
138
+ throw new Error('No signer available. Cannot give feedback without a wallet.');
139
+ }
140
+ // Get current feedback index for this client-agent pair
141
+ let feedbackIndex;
142
+ try {
143
+ if (!this.reputationRegistry) {
144
+ throw new Error('Reputation registry not available');
145
+ }
146
+ const lastIndex = await this.web3Client.callContract(this.reputationRegistry, 'getLastIndex', BigInt(tokenId), clientAddress);
147
+ feedbackIndex = Number(lastIndex) + 1;
148
+ }
149
+ catch (error) {
150
+ const errorMessage = error instanceof Error ? error.message : String(error);
151
+ throw new Error(`Failed to get feedback index: ${errorMessage}`);
152
+ }
153
+ // Prepare feedback auth (use provided auth or create new one)
154
+ let authBytes;
155
+ if (feedbackAuth) {
156
+ authBytes = feedbackAuth;
157
+ }
158
+ else {
159
+ const authHex = await this.signFeedbackAuth(agentId, clientAddress, feedbackIndex, 24);
160
+ authBytes = authHex;
161
+ }
162
+ // Update feedback file with auth
163
+ feedbackFile.feedbackAuth = authBytes.startsWith('0x') ? authBytes : '0x' + authBytes;
164
+ // Prepare on-chain data (only basic fields, no capability/endpoint)
165
+ const score = feedbackFile.score !== undefined ? Number(feedbackFile.score) : 0;
166
+ const tag1Str = typeof feedbackFile.tag1 === 'string' ? feedbackFile.tag1 : '';
167
+ const tag2Str = typeof feedbackFile.tag2 === 'string' ? feedbackFile.tag2 : '';
168
+ const tag1 = this._stringToBytes32(tag1Str);
169
+ const tag2 = this._stringToBytes32(tag2Str);
170
+ // Handle off-chain file storage
171
+ let feedbackUri = '';
172
+ let feedbackHash = '0x' + '00'.repeat(32); // Default empty hash
173
+ if (this.ipfsClient) {
174
+ // Store feedback file on IPFS
175
+ try {
176
+ const cid = await this.ipfsClient.addJson(feedbackFile);
177
+ feedbackUri = `ipfs://${cid}`;
178
+ // Calculate hash of sorted JSON
179
+ const sortedJson = JSON.stringify(feedbackFile, Object.keys(feedbackFile).sort());
180
+ feedbackHash = this.web3Client.keccak256(sortedJson);
181
+ }
182
+ catch (error) {
183
+ // Failed to store on IPFS - continue without IPFS storage
184
+ }
185
+ }
186
+ else if (feedbackFile.context || feedbackFile.capability || feedbackFile.name) {
187
+ // If we have rich data but no IPFS, we need to store it somewhere
188
+ throw new Error('Rich feedback data requires IPFS client for storage');
189
+ }
190
+ // Submit to blockchain
191
+ if (!this.reputationRegistry) {
192
+ throw new Error('Reputation registry not available');
193
+ }
194
+ try {
195
+ const txHash = await this.web3Client.transactContract(this.reputationRegistry, 'giveFeedback', {}, BigInt(tokenId), score, tag1, tag2, feedbackUri, feedbackHash, ethers.getBytes(authBytes.startsWith('0x') ? authBytes : '0x' + authBytes));
196
+ // Wait for transaction confirmation
197
+ await this.web3Client.waitForTransaction(txHash);
198
+ }
199
+ catch (error) {
200
+ const errorMessage = error instanceof Error ? error.message : String(error);
201
+ throw new Error(`Failed to submit feedback to blockchain: ${errorMessage}`);
202
+ }
203
+ // Create feedback object
204
+ const parsedId = parseFeedbackId(formatFeedbackId(agentId, clientAddress, feedbackIndex));
205
+ // Extract typed values from feedbackFile (Record<string, unknown>)
206
+ const tag1Value = typeof feedbackFile.tag1 === 'string' ? feedbackFile.tag1 : undefined;
207
+ const tag2Value = typeof feedbackFile.tag2 === 'string' ? feedbackFile.tag2 : undefined;
208
+ const textValue = typeof feedbackFile.text === 'string' ? feedbackFile.text : undefined;
209
+ const contextValue = feedbackFile.context && typeof feedbackFile.context === 'object' && !Array.isArray(feedbackFile.context)
210
+ ? feedbackFile.context
211
+ : undefined;
212
+ const proofOfPaymentValue = feedbackFile.proofOfPayment && typeof feedbackFile.proofOfPayment === 'object' && !Array.isArray(feedbackFile.proofOfPayment)
213
+ ? feedbackFile.proofOfPayment
214
+ : undefined;
215
+ return {
216
+ id: [parsedId.agentId, parsedId.clientAddress, parsedId.feedbackIndex],
217
+ agentId,
218
+ reviewer: clientAddress,
219
+ score: score > 0 ? score : undefined,
220
+ tags: [tag1Value, tag2Value].filter(Boolean),
221
+ text: textValue,
222
+ context: contextValue,
223
+ proofOfPayment: proofOfPaymentValue,
224
+ fileURI: feedbackUri || undefined,
225
+ createdAt: Math.floor(Date.now() / 1000),
226
+ answers: [],
227
+ isRevoked: false,
228
+ // Off-chain only fields
229
+ capability: typeof feedbackFile.capability === 'string' ? feedbackFile.capability : undefined,
230
+ name: typeof feedbackFile.name === 'string' ? feedbackFile.name : undefined,
231
+ skill: typeof feedbackFile.skill === 'string' ? feedbackFile.skill : undefined,
232
+ task: typeof feedbackFile.task === 'string' ? feedbackFile.task : undefined,
233
+ };
234
+ }
235
+ /**
236
+ * Get single feedback with responses
237
+ * Currently only supports blockchain query - subgraph support coming soon
238
+ */
239
+ async getFeedback(agentId, clientAddress, feedbackIndex) {
240
+ return await this._getFeedbackFromBlockchain(agentId, clientAddress, feedbackIndex);
241
+ }
242
+ /**
243
+ * Get feedback from blockchain
244
+ */
245
+ async _getFeedbackFromBlockchain(agentId, clientAddress, feedbackIndex) {
246
+ if (!this.reputationRegistry) {
247
+ throw new Error('Reputation registry not available');
248
+ }
249
+ const { tokenId } = parseAgentId(agentId);
250
+ try {
251
+ const [score, tag1Bytes, tag2Bytes, isRevoked] = await this.web3Client.callContract(this.reputationRegistry, 'readFeedback', BigInt(tokenId), clientAddress, BigInt(feedbackIndex));
252
+ const tags = this._bytes32ToTags(tag1Bytes, tag2Bytes);
253
+ return {
254
+ id: [agentId, clientAddress.toLowerCase(), feedbackIndex],
255
+ agentId,
256
+ reviewer: clientAddress,
257
+ score: Number(score),
258
+ tags,
259
+ createdAt: Math.floor(Date.now() / 1000), // Approximate, could be improved
260
+ answers: [],
261
+ isRevoked: Boolean(isRevoked),
262
+ };
263
+ }
264
+ catch (error) {
265
+ const errorMessage = error instanceof Error ? error.message : String(error);
266
+ throw new Error(`Failed to read feedback from blockchain: ${errorMessage}`);
267
+ }
268
+ }
269
+ /**
270
+ * Search feedback with filters
271
+ * Uses subgraph if available, otherwise returns empty array
272
+ */
273
+ async searchFeedback(params) {
274
+ if (!this.subgraphClient) {
275
+ // Fallback not implemented (would require blockchain queries)
276
+ // For now, return empty if subgraph unavailable
277
+ return [];
278
+ }
279
+ // Query subgraph
280
+ const feedbacksData = await this.subgraphClient.searchFeedback({
281
+ agents: params.agents,
282
+ reviewers: params.reviewers,
283
+ tags: params.tags,
284
+ capabilities: params.capabilities,
285
+ skills: params.skills,
286
+ tasks: params.tasks,
287
+ names: params.names,
288
+ minScore: params.minScore,
289
+ maxScore: params.maxScore,
290
+ includeRevoked: params.includeRevoked || false,
291
+ }, 100, // first
292
+ 0, // skip
293
+ 'createdAt', 'desc');
294
+ // Map to Feedback objects
295
+ const feedbacks = [];
296
+ for (const fbData of feedbacksData) {
297
+ // Parse agentId from feedback ID
298
+ const feedbackId = fbData.id;
299
+ const parts = feedbackId.split(':');
300
+ let agentIdStr;
301
+ let clientAddr;
302
+ let feedbackIdx;
303
+ if (parts.length >= 2) {
304
+ agentIdStr = `${parts[0]}:${parts[1]}`;
305
+ clientAddr = parts.length > 2 ? parts[2] : '';
306
+ feedbackIdx = parts.length > 3 ? parseInt(parts[3], 10) : 1;
307
+ }
308
+ else {
309
+ agentIdStr = feedbackId;
310
+ clientAddr = '';
311
+ feedbackIdx = 1;
312
+ }
313
+ const feedback = this._mapSubgraphFeedbackToModel(fbData, agentIdStr, clientAddr, feedbackIdx);
314
+ feedbacks.push(feedback);
315
+ }
316
+ return feedbacks;
317
+ }
318
+ /**
319
+ * Map subgraph feedback data to Feedback model
320
+ */
321
+ _mapSubgraphFeedbackToModel(feedbackData, agentId, clientAddress, feedbackIndex) {
322
+ const feedbackFile = feedbackData.feedbackFile || {};
323
+ // Map responses
324
+ const responsesData = feedbackData.responses || [];
325
+ const answers = responsesData.map((resp) => ({
326
+ responder: resp.responder,
327
+ responseUri: resp.responseUri,
328
+ responseHash: resp.responseHash,
329
+ createdAt: resp.createdAt ? parseInt(resp.createdAt, 10) : undefined,
330
+ }));
331
+ // Map tags - check if they're hex bytes32 or plain strings
332
+ const tags = [];
333
+ const tag1 = feedbackData.tag1 || feedbackFile.tag1;
334
+ const tag2 = feedbackData.tag2 || feedbackFile.tag2;
335
+ // Convert hex bytes32 to readable tags
336
+ if (tag1 || tag2) {
337
+ tags.push(...this._hexBytes32ToTags(tag1 || '', tag2 || ''));
338
+ }
339
+ // Build proof of payment object if available
340
+ let proofOfPayment;
341
+ if (feedbackFile.proofOfPaymentFromAddress) {
342
+ proofOfPayment = {
343
+ fromAddress: feedbackFile.proofOfPaymentFromAddress,
344
+ toAddress: feedbackFile.proofOfPaymentToAddress,
345
+ chainId: feedbackFile.proofOfPaymentChainId,
346
+ txHash: feedbackFile.proofOfPaymentTxHash,
347
+ };
348
+ }
349
+ // Build context object if available
350
+ let context;
351
+ if (feedbackFile.context) {
352
+ try {
353
+ context = typeof feedbackFile.context === 'string'
354
+ ? JSON.parse(feedbackFile.context)
355
+ : feedbackFile.context;
356
+ }
357
+ catch {
358
+ context = { raw: feedbackFile.context };
359
+ }
360
+ }
361
+ const id = [agentId, clientAddress, feedbackIndex];
362
+ return {
363
+ id,
364
+ agentId,
365
+ reviewer: clientAddress,
366
+ score: feedbackData.score !== undefined && feedbackData.score !== null ? Number(feedbackData.score) : undefined,
367
+ tags,
368
+ text: feedbackFile.text || undefined,
369
+ context,
370
+ proofOfPayment,
371
+ fileURI: feedbackData.feedbackUri || undefined,
372
+ createdAt: feedbackData.createdAt ? parseInt(feedbackData.createdAt, 10) : Math.floor(Date.now() / 1000),
373
+ answers,
374
+ isRevoked: feedbackData.isRevoked || false,
375
+ capability: feedbackFile.capability || undefined,
376
+ name: feedbackFile.name || undefined,
377
+ skill: feedbackFile.skill || undefined,
378
+ task: feedbackFile.task || undefined,
379
+ };
380
+ }
381
+ /**
382
+ * Convert hex bytes32 tags back to strings, or return plain strings as-is
383
+ * The subgraph now stores tags as human-readable strings (not hex),
384
+ * so this method handles both formats for backwards compatibility
385
+ */
386
+ _hexBytes32ToTags(tag1, tag2) {
387
+ const tags = [];
388
+ if (tag1 && tag1 !== '0x' + '00'.repeat(32)) {
389
+ // If it's already a plain string (from subgraph), use it directly
390
+ if (!tag1.startsWith('0x')) {
391
+ if (tag1) {
392
+ tags.push(tag1);
393
+ }
394
+ }
395
+ else {
396
+ // Try to convert from hex bytes32 (on-chain format)
397
+ try {
398
+ const hexBytes = ethers.getBytes(tag1);
399
+ const tag1Str = new TextDecoder('utf-8', { fatal: false }).decode(hexBytes.filter((b) => b !== 0));
400
+ if (tag1Str) {
401
+ tags.push(tag1Str);
402
+ }
403
+ }
404
+ catch {
405
+ // Ignore invalid hex strings
406
+ }
407
+ }
408
+ }
409
+ if (tag2 && tag2 !== '0x' + '00'.repeat(32)) {
410
+ // If it's already a plain string (from subgraph), use it directly
411
+ if (!tag2.startsWith('0x')) {
412
+ if (tag2) {
413
+ tags.push(tag2);
414
+ }
415
+ }
416
+ else {
417
+ // Try to convert from hex bytes32 (on-chain format)
418
+ try {
419
+ const hexBytes = ethers.getBytes(tag2);
420
+ const tag2Str = new TextDecoder('utf-8', { fatal: false }).decode(hexBytes.filter((b) => b !== 0));
421
+ if (tag2Str) {
422
+ tags.push(tag2Str);
423
+ }
424
+ }
425
+ catch {
426
+ // Ignore invalid hex strings
427
+ }
428
+ }
429
+ }
430
+ return tags;
431
+ }
432
+ /**
433
+ * Append response to feedback
434
+ */
435
+ async appendResponse(agentId, clientAddress, feedbackIndex, responseUri, responseHash) {
436
+ if (!this.reputationRegistry) {
437
+ throw new Error('Reputation registry not available');
438
+ }
439
+ const { tokenId } = parseAgentId(agentId);
440
+ try {
441
+ const txHash = await this.web3Client.transactContract(this.reputationRegistry, 'appendResponse', {}, BigInt(tokenId), clientAddress, BigInt(feedbackIndex), responseUri, responseHash);
442
+ return txHash;
443
+ }
444
+ catch (error) {
445
+ const errorMessage = error instanceof Error ? error.message : String(error);
446
+ throw new Error(`Failed to append response: ${errorMessage}`);
447
+ }
448
+ }
449
+ /**
450
+ * Revoke feedback
451
+ */
452
+ async revokeFeedback(agentId, feedbackIndex) {
453
+ if (!this.reputationRegistry) {
454
+ throw new Error('Reputation registry not available');
455
+ }
456
+ const { tokenId } = parseAgentId(agentId);
457
+ // Get client address (the one revoking - must be the reviewer)
458
+ const clientAddress = this.web3Client.address;
459
+ if (!clientAddress) {
460
+ throw new Error('No signer available');
461
+ }
462
+ try {
463
+ const txHash = await this.web3Client.transactContract(this.reputationRegistry, 'revokeFeedback', {}, BigInt(tokenId), BigInt(feedbackIndex));
464
+ return txHash;
465
+ }
466
+ catch (error) {
467
+ const errorMessage = error instanceof Error ? error.message : String(error);
468
+ throw new Error(`Failed to revoke feedback: ${errorMessage}`);
469
+ }
470
+ }
471
+ /**
472
+ * Convert string to bytes32 for blockchain storage
473
+ */
474
+ _stringToBytes32(text) {
475
+ if (!text) {
476
+ return '0x' + '00'.repeat(32);
477
+ }
478
+ // Encode as UTF-8 and pad/truncate to 32 bytes
479
+ const encoder = new TextEncoder();
480
+ const encoded = encoder.encode(text);
481
+ const padded = new Uint8Array(32);
482
+ const length = Math.min(encoded.length, 32);
483
+ padded.set(encoded.slice(0, length), 0);
484
+ return ethers.hexlify(padded);
485
+ }
486
+ /**
487
+ * Convert bytes32 tags back to strings
488
+ */
489
+ _bytes32ToTags(tag1Bytes, tag2Bytes) {
490
+ const tags = [];
491
+ if (tag1Bytes && tag1Bytes !== '0x' + '00'.repeat(32)) {
492
+ try {
493
+ const tag1 = ethers.toUtf8String(tag1Bytes).replace(/\0/g, '').trim();
494
+ if (tag1) {
495
+ tags.push(tag1);
496
+ }
497
+ }
498
+ catch {
499
+ // If UTF-8 decode fails, skip this tag
500
+ }
501
+ }
502
+ if (tag2Bytes && tag2Bytes !== '0x' + '00'.repeat(32)) {
503
+ try {
504
+ const tag2 = ethers.toUtf8String(tag2Bytes).replace(/\0/g, '').trim();
505
+ if (tag2) {
506
+ tags.push(tag2);
507
+ }
508
+ }
509
+ catch {
510
+ // If UTF-8 decode fails, skip this tag
511
+ }
512
+ }
513
+ return tags;
514
+ }
515
+ /**
516
+ * Get reputation summary
517
+ */
518
+ async getReputationSummary(agentId, tag1, tag2) {
519
+ if (!this.reputationRegistry) {
520
+ throw new Error('Reputation registry not available');
521
+ }
522
+ const { tokenId } = parseAgentId(agentId);
523
+ try {
524
+ const tag1Bytes = tag1 ? this._stringToBytes32(tag1) : '0x' + '00'.repeat(32);
525
+ const tag2Bytes = tag2 ? this._stringToBytes32(tag2) : '0x' + '00'.repeat(32);
526
+ // Get all clients who gave feedback
527
+ const clients = await this.web3Client.callContract(this.reputationRegistry, 'getClients', BigInt(tokenId));
528
+ if (!Array.isArray(clients) || clients.length === 0) {
529
+ return { count: 0, averageScore: 0 };
530
+ }
531
+ const [count, averageScore] = await this.web3Client.callContract(this.reputationRegistry, 'getSummary', BigInt(tokenId), clients, tag1Bytes, tag2Bytes);
532
+ return {
533
+ count: Number(count),
534
+ averageScore: Number(averageScore),
535
+ };
536
+ }
537
+ catch (error) {
538
+ const errorMessage = error instanceof Error ? error.message : String(error);
539
+ throw new Error(`Failed to get reputation summary: ${errorMessage}`);
540
+ }
541
+ }
542
+ }
543
+ //# sourceMappingURL=feedback-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-manager.js","sourceRoot":"","sources":["../../src/core/feedback-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAUhC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAY9C;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B,YACU,UAAsB,EACtB,UAAuB,EACvB,kBAAoC,EACpC,gBAAkC,EAClC,cAA+B;QAJ/B,eAAU,GAAV,UAAU,CAAY;QACtB,eAAU,GAAV,UAAU,CAAa;QACvB,uBAAkB,GAAlB,kBAAkB,CAAkB;QACpC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,mBAAc,GAAd,cAAc,CAAiB;IACtC,CAAC;IAEJ;;OAEG;IACH,qBAAqB,CAAC,QAAyB;QAC7C,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,QAAyB;QAC3C,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,OAAgB,EAChB,aAAsB,EACtB,UAAmB,EACnB,cAAsB,QAAQ,CAAC,qBAAqB;QAEpD,iCAAiC;QACjC,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAE1C,6CAA6C;QAC7C,IAAI,eAAe,GAAG,UAAU,CAAC;QACjC,IAAI,eAAe,KAAK,SAAS,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7D,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAClD,IAAI,CAAC,kBAAkB,EACvB,cAAc,EACd,MAAM,CAAC,OAAO,CAAC,EACf,aAAa,CACd,CAAC;gBACF,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,+DAA+D;gBAC/D,eAAe,GAAG,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;aAAM,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YACzC,eAAe,GAAG,CAAC,CAAC;QACtB,CAAC;QAED,6BAA6B;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC;QAE1E,iCAAiC;QACjC,IAAI,OAAe,CAAC;QACpB,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YACnC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACpC,CAAC;QAED,MAAM,uBAAuB,GAAG,IAAI,CAAC,gBAAgB;YACnD,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;YAC1C,CAAC,CAAC,KAAK,CAAC;QACV,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,KAAK,CAAC;QAEvD,IAAI,CAAC,aAAa,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CACjD,MAAM,CAAC,OAAO,CAAC,EACf,aAAa,EACb,MAAM,CAAC,eAAe,CAAC,EACvB,MAAM,EACN,OAAO,EACP,uBAAuB,EACvB,aAAa,CACd,CAAC;QAEF,yEAAyE;QACzE,4FAA4F;QAC5F,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEhE,sFAAsF;QACtF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAElF,kCAAkC;QAClC,qCAAqC;QACrC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClF,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,OAAO,IAAI,GAAG,gBAAgB,GAAG,WAAW,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,eAAe,CACb,OAAgB,EAChB,KAAc,EAAE,QAAQ;IACxB,IAAe,EACf,IAAa,EACb,UAAmB,EACnB,IAAa,EACb,KAAc,EACd,IAAa,EACb,OAAiC,EACjC,cAAwC,EACxC,KAA+B;QAE/B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAE7B,iCAAiC;QACjC,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAE1C,sCAAsC;QACtC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3C,0CAA0C;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACxC,MAAM,uBAAuB,GAAG,IAAI,CAAC,gBAAgB;YACnD,CAAC,CAAE,IAAI,CAAC,gBAAgB,CAAC,MAAiB;YAC1C,CAAC,CAAC,KAAK,CAAC;QACV,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,KAAK,CAAC;QAEvD,wCAAwC;QACxC,MAAM,YAAY,GAA4B;YAC5C,cAAc;YACd,aAAa,EAAE,UAAU,OAAO,IAAI,uBAAuB,EAAE;YAC7D,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,UAAU,OAAO,IAAI,aAAa,EAAE;YACnD,SAAS;YACT,YAAY,EAAE,EAAE,EAAE,sCAAsC;YACxD,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,2BAA2B;YAE/E,aAAa;YACb,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS;YAC/B,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YACrD,KAAK;YACL,OAAO;YACP,IAAI;YACJ,UAAU;YACV,IAAI;YACJ,cAAc,EAAE,cAAc;SAC/B,CAAC;QAEF,sDAAsD;QACtD,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACxD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACvB,CAAC;QACH,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,OAAgB,EAChB,YAAqC,EACrC,IAAc,EACd,YAAqB;QAErB,iBAAiB;QACjB,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAE1C,+CAA+C;QAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAC9C,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QAED,wDAAwD;QACxD,IAAI,aAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAClD,IAAI,CAAC,kBAAkB,EACvB,cAAc,EACd,MAAM,CAAC,OAAO,CAAC,EACf,aAAa,CACd,CAAC;YACF,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,iCAAiC,YAAY,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,8DAA8D;QAC9D,IAAI,SAAiB,CAAC;QACtB,IAAI,YAAY,EAAE,CAAC;YACjB,SAAS,GAAG,YAAY,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;YACvF,SAAS,GAAG,OAAO,CAAC;QACtB,CAAC;QAED,iCAAiC;QACjC,YAAY,CAAC,YAAY,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC;QAEtF,oEAAoE;QACpE,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,OAAO,GAAG,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE5C,gCAAgC;QAChC,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB;QAEhE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,8BAA8B;YAC9B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBACxD,WAAW,GAAG,UAAU,GAAG,EAAE,CAAC;gBAC9B,gCAAgC;gBAChC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAClF,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACvD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,0DAA0D;YAC5D,CAAC;QACH,CAAC;aAAM,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,UAAU,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;YAChF,kEAAkE;YAClE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CACnD,IAAI,CAAC,kBAAkB,EACvB,cAAc,EACd,EAAE,EACF,MAAM,CAAC,OAAO,CAAC,EACf,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,CAC3E,CAAC;YAEF,oCAAoC;YACpC,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,4CAA4C,YAAY,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,yBAAyB;QACzB,MAAM,QAAQ,GAAG,eAAe,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;QAE1F,mEAAmE;QACnE,MAAM,SAAS,GAAG,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,MAAM,SAAS,GAAG,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,MAAM,SAAS,GAAG,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;YAC3H,CAAC,CAAC,YAAY,CAAC,OAA8B;YAC7C,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,mBAAmB,GAAG,YAAY,CAAC,cAAc,IAAI,OAAO,YAAY,CAAC,cAAc,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC;YACvJ,CAAC,CAAC,YAAY,CAAC,cAAqC;YACpD,CAAC,CAAC,SAAS,CAAC;QAEd,OAAO;YACL,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAoB;YACzF,OAAO;YACP,QAAQ,EAAE,aAAa;YACvB,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACpC,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa;YACxD,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,YAAY;YACrB,cAAc,EAAE,mBAAmB;YACnC,OAAO,EAAE,WAAW,IAAI,SAAS;YACjC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YACxC,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,KAAK;YAChB,wBAAwB;YACxB,UAAU,EAAE,OAAO,YAAY,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YAC7F,IAAI,EAAE,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC3E,KAAK,EAAE,OAAO,YAAY,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAC9E,IAAI,EAAE,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;SAC5E,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CACf,OAAgB,EAChB,aAAsB,EACtB,aAAqB;QAErB,OAAO,MAAM,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,0BAA0B,CACtC,OAAgB,EAChB,aAAsB,EACtB,aAAqB;QAErB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CACjF,IAAI,CAAC,kBAAkB,EACvB,cAAc,EACd,MAAM,CAAC,OAAO,CAAC,EACf,aAAa,EACb,MAAM,CAAC,aAAa,CAAC,CACtB,CAAC;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAEvD,OAAO;gBACL,EAAE,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,WAAW,EAAE,EAAE,aAAa,CAAoB;gBAC5E,OAAO;gBACP,QAAQ,EAAE,aAAa;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;gBACpB,IAAI;gBACJ,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,iCAAiC;gBAC3E,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,4CAA4C,YAAY,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,MAA4B;QAC/C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,8DAA8D;YAC9D,gDAAgD;YAChD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,iBAAiB;QACjB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAC5D;YACE,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,KAAK;SAC/C,EACD,GAAG,EAAE,QAAQ;QACb,CAAC,EAAE,OAAO;QACV,WAAW,EACX,MAAM,CACP,CAAC;QAEF,0BAA0B;QAC1B,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,iCAAiC;YACjC,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,UAAkB,CAAC;YACvB,IAAI,UAAkB,CAAC;YACvB,IAAI,WAAmB,CAAC;YAExB,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACtB,UAAU,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9C,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,UAAU,CAAC;gBACxB,UAAU,GAAG,EAAE,CAAC;gBAChB,WAAW,GAAG,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;YAC/F,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,2BAA2B,CACjC,YAAiB,EACjB,OAAgB,EAChB,aAAsB,EACtB,aAAqB;QAErB,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,IAAI,EAAE,CAAC;QAErD,gBAAgB;QAChB,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,IAAI,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;YAChD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;SACrE,CAAC,CAAC,CAAC;QAEJ,2DAA2D;QAC3D,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC;QACpD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC;QAEpD,uCAAuC;QACvC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,6CAA6C;QAC7C,IAAI,cAA+C,CAAC;QACpD,IAAI,YAAY,CAAC,yBAAyB,EAAE,CAAC;YAC3C,cAAc,GAAG;gBACf,WAAW,EAAE,YAAY,CAAC,yBAAyB;gBACnD,SAAS,EAAE,YAAY,CAAC,uBAAuB;gBAC/C,OAAO,EAAE,YAAY,CAAC,qBAAqB;gBAC3C,MAAM,EAAE,YAAY,CAAC,oBAAoB;aAC1C,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,IAAI,OAAwC,CAAC;QAC7C,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,OAAO,GAAG,OAAO,YAAY,CAAC,OAAO,KAAK,QAAQ;oBAChD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;oBAClC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,MAAM,EAAE,GAAoB,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;QAEpE,OAAO;YACL,EAAE;YACF,OAAO;YACP,QAAQ,EAAE,aAAa;YACvB,KAAK,EAAE,YAAY,CAAC,KAAK,KAAK,SAAS,IAAI,YAAY,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;YAC/G,IAAI;YACJ,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,SAAS;YACpC,OAAO;YACP,cAAc;YACd,OAAO,EAAE,YAAY,CAAC,WAAW,IAAI,SAAS;YAC9C,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YACxG,OAAO;YACP,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,KAAK;YAC1C,UAAU,EAAE,YAAY,CAAC,UAAU,IAAI,SAAS;YAChD,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,SAAS;YACpC,KAAK,EAAE,YAAY,CAAC,KAAK,IAAI,SAAS;YACtC,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,SAAS;SACrC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACK,iBAAiB,CAAC,IAAY,EAAE,IAAY;QAClD,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5C,kEAAkE;YAClE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,oDAAoD;gBACpD,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACvC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAC/D,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAChC,CAAC;oBACF,IAAI,OAAO,EAAE,CAAC;wBACZ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,6BAA6B;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5C,kEAAkE;YAClE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,oDAAoD;gBACpD,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACvC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAC/D,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAChC,CAAC;oBACF,IAAI,OAAO,EAAE,CAAC;wBACZ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,6BAA6B;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,OAAgB,EAChB,aAAsB,EACtB,aAAqB,EACrB,WAAgB,EAChB,YAAoB;QAEpB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CACnD,IAAI,CAAC,kBAAkB,EACvB,gBAAgB,EAChB,EAAE,EACF,MAAM,CAAC,OAAO,CAAC,EACf,aAAa,EACb,MAAM,CAAC,aAAa,CAAC,EACrB,WAAW,EACX,YAAY,CACb,CAAC;YAEF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,8BAA8B,YAAY,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,OAAgB,EAAE,aAAqB;QAC1D,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAE1C,+DAA+D;QAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAC9C,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CACnD,IAAI,CAAC,kBAAkB,EACvB,gBAAgB,EAChB,EAAE,EACF,MAAM,CAAC,OAAO,CAAC,EACf,MAAM,CAAC,aAAa,CAAC,CACtB,CAAC;YAEF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,8BAA8B,YAAY,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,IAAY;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,+CAA+C;QAC/C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAExC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,SAAiB,EAAE,SAAiB;QACzD,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,IAAI,SAAS,IAAI,SAAS,KAAK,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtE,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,uCAAuC;YACzC,CAAC;QACH,CAAC;QAED,IAAI,SAAS,IAAI,SAAS,KAAK,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtE,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,uCAAuC;YACzC,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CACxB,OAAgB,EAChB,IAAa,EACb,IAAa;QAEb,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9E,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAE9E,oCAAoC;YACpC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAChD,IAAI,CAAC,kBAAkB,EACvB,YAAY,EACZ,MAAM,CAAC,OAAO,CAAC,CAChB,CAAC;YAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;YACvC,CAAC;YAED,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAC9D,IAAI,CAAC,kBAAkB,EACvB,YAAY,EACZ,MAAM,CAAC,OAAO,CAAC,EACf,OAAO,EACP,SAAS,EACT,SAAS,CACV,CAAC;YAEF,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;gBACpB,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;aACnC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,qCAAqC,YAAY,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Agent indexer for discovery and search functionality
3
+ * Simplified version focused on subgraph queries (no local ML indexing)
4
+ */
5
+ import type { AgentSummary, SearchParams } from '../models/interfaces';
6
+ import type { AgentId } from '../models/types';
7
+ import type { Web3Client } from './web3-client';
8
+ import type { SubgraphClient } from './subgraph-client';
9
+ /**
10
+ * Simplified indexer that primarily uses subgraph for queries
11
+ * No local indexing or ML capabilities - all queries go through subgraph
12
+ */
13
+ export declare class AgentIndexer {
14
+ private web3Client;
15
+ private subgraphClient?;
16
+ constructor(web3Client: Web3Client, subgraphClient?: SubgraphClient | undefined);
17
+ /**
18
+ * Get agent summary from index/subgraph
19
+ */
20
+ getAgent(agentId: AgentId): Promise<AgentSummary>;
21
+ /**
22
+ * Search agents with filters
23
+ */
24
+ searchAgents(params?: SearchParams, pageSize?: number, cursor?: string): Promise<{
25
+ items: AgentSummary[];
26
+ nextCursor?: string;
27
+ }>;
28
+ private _filterAgents;
29
+ /**
30
+ * Search agents by reputation
31
+ */
32
+ searchAgentsByReputation(agents?: string[], tags?: string[], reviewers?: string[], capabilities?: string[], skills?: string[], tasks?: string[], names?: string[], minAverageScore?: number, includeRevoked?: boolean, first?: number, skip?: number, sort?: string[]): Promise<{
33
+ items: AgentSummary[];
34
+ nextCursor?: string;
35
+ }>;
36
+ }
37
+ //# sourceMappingURL=indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/core/indexer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD;;;GAGG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,cAAc,CAAC;gBADf,UAAU,EAAE,UAAU,EACtB,cAAc,CAAC,EAAE,cAAc,YAAA;IAGzC;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IAcvD;;OAEG;IACG,YAAY,CAChB,MAAM,GAAE,YAAiB,EACzB,QAAQ,GAAE,MAAW,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA+B1D,OAAO,CAAC,aAAa;IA4GrB;;OAEG;IACG,wBAAwB,CAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,SAAS,CAAC,EAAE,MAAM,EAAE,EACpB,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,KAAK,CAAC,EAAE,MAAM,EAAE,EAChB,eAAe,CAAC,EAAE,MAAM,EACxB,cAAc,GAAE,OAAe,EAC/B,KAAK,GAAE,MAAW,EAClB,IAAI,GAAE,MAAU,EAChB,IAAI,GAAE,MAAM,EAAuB,GAClC,OAAO,CAAC;QAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAuE3D"}