@quantulabs/8004-mcp 0.1.0

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 (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +370 -0
  3. package/dist/chains/evm/index.d.ts +2 -0
  4. package/dist/chains/evm/index.d.ts.map +1 -0
  5. package/dist/chains/evm/index.js +3 -0
  6. package/dist/chains/evm/index.js.map +1 -0
  7. package/dist/chains/evm/provider.d.ts +48 -0
  8. package/dist/chains/evm/provider.d.ts.map +1 -0
  9. package/dist/chains/evm/provider.js +446 -0
  10. package/dist/chains/evm/provider.js.map +1 -0
  11. package/dist/chains/index.d.ts +3 -0
  12. package/dist/chains/index.d.ts.map +1 -0
  13. package/dist/chains/index.js +4 -0
  14. package/dist/chains/index.js.map +1 -0
  15. package/dist/chains/solana/data-source.d.ts +17 -0
  16. package/dist/chains/solana/data-source.d.ts.map +1 -0
  17. package/dist/chains/solana/data-source.js +65 -0
  18. package/dist/chains/solana/data-source.js.map +1 -0
  19. package/dist/chains/solana/index.d.ts +8 -0
  20. package/dist/chains/solana/index.d.ts.map +1 -0
  21. package/dist/chains/solana/index.js +9 -0
  22. package/dist/chains/solana/index.js.map +1 -0
  23. package/dist/chains/solana/parsers.d.ts +11 -0
  24. package/dist/chains/solana/parsers.d.ts.map +1 -0
  25. package/dist/chains/solana/parsers.js +94 -0
  26. package/dist/chains/solana/parsers.js.map +1 -0
  27. package/dist/chains/solana/provider.d.ts +33 -0
  28. package/dist/chains/solana/provider.d.ts.map +1 -0
  29. package/dist/chains/solana/provider.js +407 -0
  30. package/dist/chains/solana/provider.js.map +1 -0
  31. package/dist/chains/solana/state.d.ts +55 -0
  32. package/dist/chains/solana/state.d.ts.map +1 -0
  33. package/dist/chains/solana/state.js +162 -0
  34. package/dist/chains/solana/state.js.map +1 -0
  35. package/dist/chains/solana/tools/atom.d.ts +45 -0
  36. package/dist/chains/solana/tools/atom.d.ts.map +1 -0
  37. package/dist/chains/solana/tools/atom.js +115 -0
  38. package/dist/chains/solana/tools/atom.js.map +1 -0
  39. package/dist/chains/solana/tools/validation.d.ts +45 -0
  40. package/dist/chains/solana/tools/validation.d.ts.map +1 -0
  41. package/dist/chains/solana/tools/validation.js +212 -0
  42. package/dist/chains/solana/tools/validation.js.map +1 -0
  43. package/dist/chains/solana/tools/wallet.d.ts +45 -0
  44. package/dist/chains/solana/tools/wallet.d.ts.map +1 -0
  45. package/dist/chains/solana/tools/wallet.js +103 -0
  46. package/dist/chains/solana/tools/wallet.js.map +1 -0
  47. package/dist/config/defaults.d.ts +68 -0
  48. package/dist/config/defaults.d.ts.map +1 -0
  49. package/dist/config/defaults.js +247 -0
  50. package/dist/config/defaults.js.map +1 -0
  51. package/dist/config/env.d.ts +33 -0
  52. package/dist/config/env.d.ts.map +1 -0
  53. package/dist/config/env.js +42 -0
  54. package/dist/config/env.js.map +1 -0
  55. package/dist/config/index.d.ts +3 -0
  56. package/dist/config/index.d.ts.map +1 -0
  57. package/dist/config/index.js +3 -0
  58. package/dist/config/index.js.map +1 -0
  59. package/dist/core/cache/agent-cache.d.ts +36 -0
  60. package/dist/core/cache/agent-cache.d.ts.map +1 -0
  61. package/dist/core/cache/agent-cache.js +87 -0
  62. package/dist/core/cache/agent-cache.js.map +1 -0
  63. package/dist/core/cache/data-source.d.ts +31 -0
  64. package/dist/core/cache/data-source.d.ts.map +1 -0
  65. package/dist/core/cache/data-source.js +6 -0
  66. package/dist/core/cache/data-source.js.map +1 -0
  67. package/dist/core/cache/index.d.ts +7 -0
  68. package/dist/core/cache/index.d.ts.map +1 -0
  69. package/dist/core/cache/index.js +9 -0
  70. package/dist/core/cache/index.js.map +1 -0
  71. package/dist/core/cache/lazy-cache.d.ts +30 -0
  72. package/dist/core/cache/lazy-cache.d.ts.map +1 -0
  73. package/dist/core/cache/lazy-cache.js +79 -0
  74. package/dist/core/cache/lazy-cache.js.map +1 -0
  75. package/dist/core/cache/slim-store.d.ts +66 -0
  76. package/dist/core/cache/slim-store.d.ts.map +1 -0
  77. package/dist/core/cache/slim-store.js +285 -0
  78. package/dist/core/cache/slim-store.js.map +1 -0
  79. package/dist/core/cache/sqlite-store.d.ts +99 -0
  80. package/dist/core/cache/sqlite-store.d.ts.map +1 -0
  81. package/dist/core/cache/sqlite-store.js +470 -0
  82. package/dist/core/cache/sqlite-store.js.map +1 -0
  83. package/dist/core/cache/sync-manager.d.ts +38 -0
  84. package/dist/core/cache/sync-manager.d.ts.map +1 -0
  85. package/dist/core/cache/sync-manager.js +213 -0
  86. package/dist/core/cache/sync-manager.js.map +1 -0
  87. package/dist/core/errors/index.d.ts +2 -0
  88. package/dist/core/errors/index.d.ts.map +1 -0
  89. package/dist/core/errors/index.js +2 -0
  90. package/dist/core/errors/index.js.map +1 -0
  91. package/dist/core/errors/mcp-error.d.ts +39 -0
  92. package/dist/core/errors/mcp-error.d.ts.map +1 -0
  93. package/dist/core/errors/mcp-error.js +79 -0
  94. package/dist/core/errors/mcp-error.js.map +1 -0
  95. package/dist/core/interfaces/agent.d.ts +84 -0
  96. package/dist/core/interfaces/agent.d.ts.map +1 -0
  97. package/dist/core/interfaces/agent.js +40 -0
  98. package/dist/core/interfaces/agent.js.map +1 -0
  99. package/dist/core/interfaces/chain-provider.d.ts +50 -0
  100. package/dist/core/interfaces/chain-provider.d.ts.map +1 -0
  101. package/dist/core/interfaces/chain-provider.js +5 -0
  102. package/dist/core/interfaces/chain-provider.js.map +1 -0
  103. package/dist/core/interfaces/feedback.d.ts +46 -0
  104. package/dist/core/interfaces/feedback.d.ts.map +1 -0
  105. package/dist/core/interfaces/feedback.js +3 -0
  106. package/dist/core/interfaces/feedback.js.map +1 -0
  107. package/dist/core/interfaces/index.d.ts +6 -0
  108. package/dist/core/interfaces/index.d.ts.map +1 -0
  109. package/dist/core/interfaces/index.js +7 -0
  110. package/dist/core/interfaces/index.js.map +1 -0
  111. package/dist/core/interfaces/reputation.d.ts +47 -0
  112. package/dist/core/interfaces/reputation.d.ts.map +1 -0
  113. package/dist/core/interfaces/reputation.js +30 -0
  114. package/dist/core/interfaces/reputation.js.map +1 -0
  115. package/dist/core/interfaces/x402.d.ts +226 -0
  116. package/dist/core/interfaces/x402.d.ts.map +1 -0
  117. package/dist/core/interfaces/x402.js +120 -0
  118. package/dist/core/interfaces/x402.js.map +1 -0
  119. package/dist/core/parsers/common.d.ts +31 -0
  120. package/dist/core/parsers/common.d.ts.map +1 -0
  121. package/dist/core/parsers/common.js +185 -0
  122. package/dist/core/parsers/common.js.map +1 -0
  123. package/dist/core/parsers/index.d.ts +2 -0
  124. package/dist/core/parsers/index.d.ts.map +1 -0
  125. package/dist/core/parsers/index.js +2 -0
  126. package/dist/core/parsers/index.js.map +1 -0
  127. package/dist/core/registry/chain-registry.d.ts +26 -0
  128. package/dist/core/registry/chain-registry.d.ts.map +1 -0
  129. package/dist/core/registry/chain-registry.js +141 -0
  130. package/dist/core/registry/chain-registry.js.map +1 -0
  131. package/dist/core/registry/index.d.ts +3 -0
  132. package/dist/core/registry/index.d.ts.map +1 -0
  133. package/dist/core/registry/index.js +3 -0
  134. package/dist/core/registry/index.js.map +1 -0
  135. package/dist/core/registry/tool-registry.d.ts +23 -0
  136. package/dist/core/registry/tool-registry.d.ts.map +1 -0
  137. package/dist/core/registry/tool-registry.js +66 -0
  138. package/dist/core/registry/tool-registry.js.map +1 -0
  139. package/dist/core/serializers/common.d.ts +20 -0
  140. package/dist/core/serializers/common.d.ts.map +1 -0
  141. package/dist/core/serializers/common.js +76 -0
  142. package/dist/core/serializers/common.js.map +1 -0
  143. package/dist/core/serializers/index.d.ts +2 -0
  144. package/dist/core/serializers/index.d.ts.map +1 -0
  145. package/dist/core/serializers/index.js +2 -0
  146. package/dist/core/serializers/index.js.map +1 -0
  147. package/dist/core/services/index.d.ts +3 -0
  148. package/dist/core/services/index.d.ts.map +1 -0
  149. package/dist/core/services/index.js +3 -0
  150. package/dist/core/services/index.js.map +1 -0
  151. package/dist/core/services/ipfs-service.d.ts +59 -0
  152. package/dist/core/services/ipfs-service.d.ts.map +1 -0
  153. package/dist/core/services/ipfs-service.js +84 -0
  154. package/dist/core/services/ipfs-service.js.map +1 -0
  155. package/dist/core/utils/tags.d.ts +38 -0
  156. package/dist/core/utils/tags.d.ts.map +1 -0
  157. package/dist/core/utils/tags.js +77 -0
  158. package/dist/core/utils/tags.js.map +1 -0
  159. package/dist/core/utils/value-encoding.d.ts +36 -0
  160. package/dist/core/utils/value-encoding.d.ts.map +1 -0
  161. package/dist/core/utils/value-encoding.js +196 -0
  162. package/dist/core/utils/value-encoding.js.map +1 -0
  163. package/dist/core/wallet/index.d.ts +2 -0
  164. package/dist/core/wallet/index.d.ts.map +1 -0
  165. package/dist/core/wallet/index.js +3 -0
  166. package/dist/core/wallet/index.js.map +1 -0
  167. package/dist/core/wallet/wallet-manager.d.ts +86 -0
  168. package/dist/core/wallet/wallet-manager.d.ts.map +1 -0
  169. package/dist/core/wallet/wallet-manager.js +783 -0
  170. package/dist/core/wallet/wallet-manager.js.map +1 -0
  171. package/dist/core/x402/index.d.ts +2 -0
  172. package/dist/core/x402/index.d.ts.map +1 -0
  173. package/dist/core/x402/index.js +3 -0
  174. package/dist/core/x402/index.js.map +1 -0
  175. package/dist/core/x402/proof-validator.d.ts +57 -0
  176. package/dist/core/x402/proof-validator.d.ts.map +1 -0
  177. package/dist/core/x402/proof-validator.js +103 -0
  178. package/dist/core/x402/proof-validator.js.map +1 -0
  179. package/dist/index.d.ts +3 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +135 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/state/global-state.d.ts +98 -0
  184. package/dist/state/global-state.d.ts.map +1 -0
  185. package/dist/state/global-state.js +258 -0
  186. package/dist/state/global-state.js.map +1 -0
  187. package/dist/tools/definitions.d.ts +10 -0
  188. package/dist/tools/definitions.d.ts.map +1 -0
  189. package/dist/tools/definitions.js +163 -0
  190. package/dist/tools/definitions.js.map +1 -0
  191. package/dist/tools/unified/agent.d.ts +5 -0
  192. package/dist/tools/unified/agent.d.ts.map +1 -0
  193. package/dist/tools/unified/agent.js +300 -0
  194. package/dist/tools/unified/agent.js.map +1 -0
  195. package/dist/tools/unified/cache.d.ts +5 -0
  196. package/dist/tools/unified/cache.d.ts.map +1 -0
  197. package/dist/tools/unified/cache.js +207 -0
  198. package/dist/tools/unified/cache.js.map +1 -0
  199. package/dist/tools/unified/collection.d.ts +5 -0
  200. package/dist/tools/unified/collection.d.ts.map +1 -0
  201. package/dist/tools/unified/collection.js +162 -0
  202. package/dist/tools/unified/collection.js.map +1 -0
  203. package/dist/tools/unified/config.d.ts +5 -0
  204. package/dist/tools/unified/config.d.ts.map +1 -0
  205. package/dist/tools/unified/config.js +217 -0
  206. package/dist/tools/unified/config.js.map +1 -0
  207. package/dist/tools/unified/crawler.d.ts +5 -0
  208. package/dist/tools/unified/crawler.d.ts.map +1 -0
  209. package/dist/tools/unified/crawler.js +212 -0
  210. package/dist/tools/unified/crawler.js.map +1 -0
  211. package/dist/tools/unified/feedback.d.ts +5 -0
  212. package/dist/tools/unified/feedback.d.ts.map +1 -0
  213. package/dist/tools/unified/feedback.js +274 -0
  214. package/dist/tools/unified/feedback.js.map +1 -0
  215. package/dist/tools/unified/ipfs.d.ts +5 -0
  216. package/dist/tools/unified/ipfs.d.ts.map +1 -0
  217. package/dist/tools/unified/ipfs.js +156 -0
  218. package/dist/tools/unified/ipfs.js.map +1 -0
  219. package/dist/tools/unified/oasf.d.ts +5 -0
  220. package/dist/tools/unified/oasf.d.ts.map +1 -0
  221. package/dist/tools/unified/oasf.js +167 -0
  222. package/dist/tools/unified/oasf.js.map +1 -0
  223. package/dist/tools/unified/registration.d.ts +5 -0
  224. package/dist/tools/unified/registration.d.ts.map +1 -0
  225. package/dist/tools/unified/registration.js +223 -0
  226. package/dist/tools/unified/registration.js.map +1 -0
  227. package/dist/tools/unified/reputation.d.ts +5 -0
  228. package/dist/tools/unified/reputation.d.ts.map +1 -0
  229. package/dist/tools/unified/reputation.js +121 -0
  230. package/dist/tools/unified/reputation.js.map +1 -0
  231. package/dist/tools/unified/wallet.d.ts +5 -0
  232. package/dist/tools/unified/wallet.d.ts.map +1 -0
  233. package/dist/tools/unified/wallet.js +434 -0
  234. package/dist/tools/unified/wallet.js.map +1 -0
  235. package/dist/tools/unified/write-operations.d.ts +5 -0
  236. package/dist/tools/unified/write-operations.d.ts.map +1 -0
  237. package/dist/tools/unified/write-operations.js +582 -0
  238. package/dist/tools/unified/write-operations.js.map +1 -0
  239. package/dist/tools/unified/x402.d.ts +5 -0
  240. package/dist/tools/unified/x402.d.ts.map +1 -0
  241. package/dist/tools/unified/x402.js +594 -0
  242. package/dist/tools/unified/x402.js.map +1 -0
  243. package/package.json +67 -0
@@ -0,0 +1,300 @@
1
+ // Unified agent tools
2
+ import { getArgs, readString, readNumber, parseChainParam, parsePagination, } from '../../core/parsers/common.js';
3
+ import { successResponse } from '../../core/serializers/common.js';
4
+ import { globalState } from '../../state/global-state.js';
5
+ import { parseGlobalId, isValidGlobalId } from '../../core/interfaces/agent.js';
6
+ import { agentNotFoundError } from '../../core/errors/mcp-error.js';
7
+ export const agentTools = [
8
+ {
9
+ name: 'agent_get',
10
+ description: 'Get agent details by ID. Supports global IDs (sol:xxx, base:8453:xxx) or chain-specific IDs with chain parameter.',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ id: {
15
+ type: 'string',
16
+ description: 'Agent ID (global format like sol:xxx or chain-specific)',
17
+ },
18
+ chain: {
19
+ type: 'string',
20
+ description: 'Chain prefix (sol, base, eth) - optional if using global ID',
21
+ },
22
+ },
23
+ required: ['id'],
24
+ },
25
+ },
26
+ {
27
+ name: 'agent_exists',
28
+ description: 'Check if an agent exists on-chain',
29
+ inputSchema: {
30
+ type: 'object',
31
+ properties: {
32
+ id: {
33
+ type: 'string',
34
+ description: 'Agent ID (global or chain-specific)',
35
+ },
36
+ chain: {
37
+ type: 'string',
38
+ description: 'Chain prefix (optional if using global ID)',
39
+ },
40
+ },
41
+ required: ['id'],
42
+ },
43
+ },
44
+ {
45
+ name: 'agent_search',
46
+ description: 'Search agents across chains with filters. Supports smart search by name, description/capabilities, or endpoint.',
47
+ inputSchema: {
48
+ type: 'object',
49
+ properties: {
50
+ query: {
51
+ type: 'string',
52
+ description: 'General search query - searches name and description',
53
+ },
54
+ nameQuery: {
55
+ type: 'string',
56
+ description: 'Search by agent name (exact or partial match)',
57
+ },
58
+ descriptionQuery: {
59
+ type: 'string',
60
+ description: 'Search by description, skills, or capabilities',
61
+ },
62
+ endpointQuery: {
63
+ type: 'string',
64
+ description: 'Search by MCP or A2A endpoint URL',
65
+ },
66
+ searchMode: {
67
+ type: 'string',
68
+ enum: ['name', 'description', 'endpoint', 'all'],
69
+ description: 'Which fields to search in (default: all)',
70
+ },
71
+ owner: {
72
+ type: 'string',
73
+ description: 'Filter by owner address',
74
+ },
75
+ collection: {
76
+ type: 'string',
77
+ description: 'Filter by collection',
78
+ },
79
+ chain: {
80
+ type: 'string',
81
+ description: 'Filter by chain (sol, base, eth, all)',
82
+ },
83
+ minQualityScore: {
84
+ type: 'number',
85
+ description: 'Minimum quality score (0-100)',
86
+ },
87
+ minTrustTier: {
88
+ type: 'number',
89
+ description: 'Minimum trust tier (0-4)',
90
+ },
91
+ limit: {
92
+ type: 'number',
93
+ description: 'Max results (default: 20, max: 100)',
94
+ },
95
+ offset: {
96
+ type: 'number',
97
+ description: 'Pagination offset (default: 0)',
98
+ },
99
+ },
100
+ },
101
+ },
102
+ {
103
+ name: 'agent_list_by_owner',
104
+ description: 'List all agents owned by an address',
105
+ inputSchema: {
106
+ type: 'object',
107
+ properties: {
108
+ owner: {
109
+ type: 'string',
110
+ description: 'Owner address',
111
+ },
112
+ chain: {
113
+ type: 'string',
114
+ description: 'Chain to query (default: current chain)',
115
+ },
116
+ limit: {
117
+ type: 'number',
118
+ description: 'Max results (default: 20)',
119
+ },
120
+ offset: {
121
+ type: 'number',
122
+ description: 'Pagination offset',
123
+ },
124
+ },
125
+ required: ['owner'],
126
+ },
127
+ },
128
+ ];
129
+ export const agentHandlers = {
130
+ agent_get: async (args) => {
131
+ const input = getArgs(args);
132
+ const id = readString(input, 'id', true);
133
+ const { chainPrefix } = parseChainParam(input);
134
+ // Resolve chain from ID or parameter
135
+ let provider;
136
+ let rawId = id;
137
+ if (isValidGlobalId(id)) {
138
+ const parsed = parseGlobalId(id);
139
+ provider = globalState.chains.getByPrefix(parsed.prefix);
140
+ rawId = parsed.rawId;
141
+ }
142
+ else if (chainPrefix) {
143
+ provider = globalState.chains.getByPrefix(chainPrefix);
144
+ }
145
+ else {
146
+ provider = globalState.chains.getDefault();
147
+ }
148
+ if (!provider) {
149
+ throw agentNotFoundError(id);
150
+ }
151
+ const agent = await provider.getAgent(rawId);
152
+ if (!agent) {
153
+ throw agentNotFoundError(id);
154
+ }
155
+ return successResponse(agent);
156
+ },
157
+ agent_exists: async (args) => {
158
+ const input = getArgs(args);
159
+ const id = readString(input, 'id', true);
160
+ const { chainPrefix } = parseChainParam(input);
161
+ let provider;
162
+ let rawId = id;
163
+ if (isValidGlobalId(id)) {
164
+ const parsed = parseGlobalId(id);
165
+ provider = globalState.chains.getByPrefix(parsed.prefix);
166
+ rawId = parsed.rawId;
167
+ }
168
+ else if (chainPrefix) {
169
+ provider = globalState.chains.getByPrefix(chainPrefix);
170
+ }
171
+ else {
172
+ provider = globalState.chains.getDefault();
173
+ }
174
+ if (!provider) {
175
+ return successResponse({ exists: false, chain: null });
176
+ }
177
+ const exists = await provider.agentExists(rawId);
178
+ return successResponse({
179
+ exists,
180
+ chain: provider.chainId,
181
+ });
182
+ },
183
+ agent_search: async (args) => {
184
+ const input = getArgs(args);
185
+ const query = readString(input, 'query');
186
+ const nameQuery = readString(input, 'nameQuery');
187
+ const descriptionQuery = readString(input, 'descriptionQuery');
188
+ const endpointQuery = readString(input, 'endpointQuery');
189
+ const searchMode = readString(input, 'searchMode');
190
+ const owner = readString(input, 'owner');
191
+ const collection = readString(input, 'collection');
192
+ const { chainPrefix } = parseChainParam(input);
193
+ const minQualityScore = readNumber(input, 'minQualityScore');
194
+ const minTrustTier = readNumber(input, 'minTrustTier');
195
+ const { limit, offset } = parsePagination(input);
196
+ // Build search params with specific field queries
197
+ const searchParams = {
198
+ query,
199
+ nameQuery,
200
+ descriptionQuery,
201
+ endpointQuery,
202
+ searchMode: searchMode ?? 'all',
203
+ owner,
204
+ collection,
205
+ minQualityScore,
206
+ minTrustTier,
207
+ limit,
208
+ offset,
209
+ };
210
+ // If specific chain requested (not "all"), search that chain only
211
+ if (chainPrefix && chainPrefix !== 'all') {
212
+ const provider = globalState.chains.getByPrefix(chainPrefix);
213
+ if (provider) {
214
+ const result = await provider.searchAgents(searchParams);
215
+ // Cache results for future searches
216
+ if (globalState.isLazyCache && globalState.lazyCache) {
217
+ globalState.lazyCache.cacheSearchResults(result.results);
218
+ }
219
+ return successResponse(result);
220
+ }
221
+ }
222
+ // Multi-chain search: query ALL deployed providers in parallel
223
+ const allProviders = globalState.chains.getAll();
224
+ if (allProviders.length === 0) {
225
+ return successResponse({ results: [], total: 0, hasMore: false, offset, limit });
226
+ }
227
+ // Search all chains in parallel with per-chain limit
228
+ // For deep pagination, fetch enough results to satisfy offset + limit
229
+ // Each chain needs to return at least (offset + limit) / numChains results
230
+ // but we fetch offset + limit per chain to ensure enough after deduplication
231
+ const perChainLimit = Math.min(offset + limit, 100);
232
+ const searchPromises = allProviders.map(async (provider) => {
233
+ try {
234
+ const result = await provider.searchAgents({
235
+ ...searchParams,
236
+ limit: perChainLimit,
237
+ offset: 0, // Always start from 0 for multi-chain, handle offset after merge
238
+ });
239
+ return result.results;
240
+ }
241
+ catch (err) {
242
+ // Log but don't fail entire search if one chain fails
243
+ console.warn(`Search failed for ${provider.chainId}: ${err}`);
244
+ return [];
245
+ }
246
+ });
247
+ const resultsPerChain = await Promise.all(searchPromises);
248
+ // Flatten and deduplicate by globalId
249
+ const seen = new Set();
250
+ const allResults = resultsPerChain.flat().filter(agent => {
251
+ if (seen.has(agent.globalId))
252
+ return false;
253
+ seen.add(agent.globalId);
254
+ return true;
255
+ });
256
+ // Sort by qualityScore (descending) then by name
257
+ allResults.sort((a, b) => {
258
+ const scoreA = a.qualityScore ?? 0;
259
+ const scoreB = b.qualityScore ?? 0;
260
+ if (scoreB !== scoreA)
261
+ return scoreB - scoreA;
262
+ return (a.name ?? '').localeCompare(b.name ?? '');
263
+ });
264
+ // Apply pagination after merge
265
+ const paginated = allResults.slice(offset, offset + limit);
266
+ // Cache results for future searches
267
+ if (globalState.isLazyCache && globalState.lazyCache) {
268
+ globalState.lazyCache.cacheSearchResults(paginated);
269
+ }
270
+ return successResponse({
271
+ results: paginated,
272
+ total: allResults.length,
273
+ hasMore: offset + paginated.length < allResults.length,
274
+ offset,
275
+ limit,
276
+ });
277
+ },
278
+ agent_list_by_owner: async (args) => {
279
+ const input = getArgs(args);
280
+ const owner = readString(input, 'owner', true);
281
+ const { chainPrefix } = parseChainParam(input);
282
+ const { limit, offset } = parsePagination(input);
283
+ const provider = chainPrefix
284
+ ? globalState.chains.getByPrefix(chainPrefix)
285
+ : globalState.chains.getDefault();
286
+ if (!provider) {
287
+ return successResponse({ results: [], total: 0, hasMore: false, offset, limit });
288
+ }
289
+ const result = await provider.searchAgents({ owner, limit, offset });
290
+ return successResponse(result);
291
+ },
292
+ };
293
+ // Backward compatibility aliases
294
+ export const agentAliases = {
295
+ sdk_get_agent: 'agent_get',
296
+ sdk_agent_exists: 'agent_exists',
297
+ sdk_search_agents: 'agent_search',
298
+ sdk_get_agents_by_owner: 'agent_list_by_owner',
299
+ };
300
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/tools/unified/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ export declare const cacheTools: Tool[];
3
+ export declare const cacheHandlers: Record<string, (args: unknown) => Promise<unknown>>;
4
+ export declare const cacheAliases: Record<string, string>;
5
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/tools/unified/cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAU/D,eAAO,MAAM,UAAU,EAAE,IAAI,EA4D5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CA6J7E,CAAC;AAGF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,CAAC"}
@@ -0,0 +1,207 @@
1
+ // Unified cache tools
2
+ import { getArgs, readString, readNumber, readBoolean, } from '../../core/parsers/common.js';
3
+ import { successResponse } from '../../core/serializers/common.js';
4
+ import { globalState } from '../../state/global-state.js';
5
+ export const cacheTools = [
6
+ {
7
+ name: 'cache_search',
8
+ description: 'Search agents by name across all chains using full-text search (FTS5). Very fast even with millions of agents.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ query: {
13
+ type: 'string',
14
+ description: 'Search query (agent name or description)',
15
+ },
16
+ chain: {
17
+ type: 'string',
18
+ description: 'Filter by chain prefix (sol, base, eth, all)',
19
+ },
20
+ limit: {
21
+ type: 'number',
22
+ description: 'Max results (default: 20, max: 100)',
23
+ },
24
+ offset: {
25
+ type: 'number',
26
+ description: 'Pagination offset (default: 0)',
27
+ },
28
+ },
29
+ required: ['query'],
30
+ },
31
+ },
32
+ {
33
+ name: 'cache_refresh',
34
+ description: 'Force refresh cache from indexers',
35
+ inputSchema: {
36
+ type: 'object',
37
+ properties: {
38
+ chain: {
39
+ type: 'string',
40
+ description: 'Chain to refresh (sol, base, all)',
41
+ },
42
+ force: {
43
+ type: 'boolean',
44
+ description: 'Force refresh even if recently synced',
45
+ },
46
+ },
47
+ },
48
+ },
49
+ {
50
+ name: 'cache_stats',
51
+ description: 'Get cache statistics including total agents, size, and sync status',
52
+ inputSchema: {
53
+ type: 'object',
54
+ properties: {},
55
+ },
56
+ },
57
+ {
58
+ name: 'cache_sync_status',
59
+ description: 'Get detailed sync status for each data source',
60
+ inputSchema: {
61
+ type: 'object',
62
+ properties: {},
63
+ },
64
+ },
65
+ ];
66
+ export const cacheHandlers = {
67
+ cache_search: async (args) => {
68
+ const input = getArgs(args);
69
+ const query = readString(input, 'query', true);
70
+ const chain = readString(input, 'chain');
71
+ const limit = Math.min(readNumber(input, 'limit') ?? 20, 100);
72
+ const offset = readNumber(input, 'offset') ?? 0;
73
+ if (!globalState.hasCache) {
74
+ return successResponse({
75
+ error: 'Cache not initialized',
76
+ results: [],
77
+ total: 0,
78
+ hasMore: false,
79
+ });
80
+ }
81
+ // Both LazyCache and AgentCache have compatible search() method
82
+ const cache = globalState.cache;
83
+ const result = cache.search(query, {
84
+ chainPrefix: chain !== 'all' ? chain : undefined,
85
+ limit,
86
+ offset,
87
+ });
88
+ return successResponse(result);
89
+ },
90
+ cache_refresh: async (args) => {
91
+ const input = getArgs(args);
92
+ const chain = readString(input, 'chain');
93
+ const force = readBoolean(input, 'force') ?? false;
94
+ if (!globalState.hasCache) {
95
+ return successResponse({
96
+ error: 'Cache not initialized',
97
+ status: 'not_available',
98
+ });
99
+ }
100
+ // LazyCache: just evict expired entries (no background sync)
101
+ if (globalState.isLazyCache) {
102
+ const lazyCache = globalState.lazyCache;
103
+ if (lazyCache) {
104
+ const evicted = lazyCache.evictExpired();
105
+ if (force) {
106
+ lazyCache.clear();
107
+ return successResponse({
108
+ message: 'Cache cleared (lazy mode)',
109
+ evicted: 'all',
110
+ });
111
+ }
112
+ return successResponse({
113
+ message: 'Expired entries evicted (lazy mode)',
114
+ evicted,
115
+ });
116
+ }
117
+ }
118
+ // Legacy AgentCache: trigger background sync
119
+ const legacyCache = globalState.legacyCache;
120
+ if (!legacyCache) {
121
+ return successResponse({
122
+ error: 'Legacy cache not available',
123
+ status: 'not_available',
124
+ });
125
+ }
126
+ // Map chain prefix (e.g., 'sol') to full sourceId (e.g., 'sol:devnet')
127
+ let sourceId;
128
+ if (chain && chain !== 'all') {
129
+ const allProgress = legacyCache.getSyncProgress();
130
+ if (allProgress instanceof Map) {
131
+ for (const [id] of allProgress) {
132
+ if (id === chain || id.startsWith(`${chain}:`)) {
133
+ sourceId = id;
134
+ break;
135
+ }
136
+ }
137
+ if (!sourceId) {
138
+ sourceId = chain;
139
+ }
140
+ }
141
+ else {
142
+ sourceId = chain;
143
+ }
144
+ }
145
+ const results = await legacyCache.refresh({
146
+ sourceId,
147
+ force,
148
+ });
149
+ // Convert Map to object for JSON serialization
150
+ const progress = {};
151
+ for (const [id, status] of results) {
152
+ progress[id] = status;
153
+ }
154
+ return successResponse({
155
+ message: 'Cache refresh initiated',
156
+ progress,
157
+ });
158
+ },
159
+ cache_stats: async () => {
160
+ if (!globalState.hasCache) {
161
+ return successResponse({
162
+ error: 'Cache not initialized',
163
+ total: 0,
164
+ byChain: {},
165
+ dbSize: '0 B',
166
+ mode: 'none',
167
+ });
168
+ }
169
+ const stats = globalState.cache.getStats();
170
+ const mode = globalState.isLazyCache ? 'lazy' : 'legacy';
171
+ return successResponse({ ...stats, mode });
172
+ },
173
+ cache_sync_status: async () => {
174
+ if (!globalState.hasCache) {
175
+ return successResponse({
176
+ error: 'Cache not initialized',
177
+ sources: {},
178
+ });
179
+ }
180
+ // LazyCache doesn't have sync progress (on-demand caching)
181
+ if (globalState.isLazyCache) {
182
+ const stats = globalState.lazyCache?.getStats();
183
+ return successResponse({
184
+ mode: 'lazy',
185
+ message: 'Lazy cache uses on-demand caching, no background sync',
186
+ stats: stats ?? { total: 0, byChain: {}, dbSize: '0 B', expired: 0 },
187
+ });
188
+ }
189
+ // Legacy cache has sync progress
190
+ const legacyCache = globalState.legacyCache;
191
+ if (!legacyCache) {
192
+ return successResponse({ sources: {} });
193
+ }
194
+ const progress = legacyCache.getSyncProgress();
195
+ if (progress instanceof Map) {
196
+ const sources = {};
197
+ for (const [id, status] of progress) {
198
+ sources[id] = status;
199
+ }
200
+ return successResponse({ mode: 'legacy', sources });
201
+ }
202
+ return successResponse({ mode: 'legacy', sources: { default: progress } });
203
+ },
204
+ };
205
+ // No backward compatibility aliases for cache tools (new feature)
206
+ export const cacheAliases = {};
207
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/tools/unified/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ export declare const collectionTools: Tool[];
3
+ export declare const collectionHandlers: Record<string, (args: unknown) => Promise<unknown>>;
4
+ export declare const collectionAliases: Record<string, string>;
5
+ //# sourceMappingURL=collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../../src/tools/unified/collection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAW/D,eAAO,MAAM,eAAe,EAAE,IAAI,EA+EjC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAwFlF,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKpD,CAAC"}