@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,162 @@
1
+ // Unified collection tools
2
+ import { PublicKey } from '@solana/web3.js';
3
+ import { getArgs, readString, parseChainParam, parsePagination, } from '../../core/parsers/common.js';
4
+ import { successResponse } from '../../core/serializers/common.js';
5
+ import { globalState } from '../../state/global-state.js';
6
+ export const collectionTools = [
7
+ {
8
+ name: 'collection_get',
9
+ description: 'Get collection details by ID',
10
+ inputSchema: {
11
+ type: 'object',
12
+ properties: {
13
+ collection: {
14
+ type: 'string',
15
+ description: 'Collection ID/address',
16
+ },
17
+ chain: {
18
+ type: 'string',
19
+ description: 'Chain to query',
20
+ },
21
+ },
22
+ required: ['collection'],
23
+ },
24
+ },
25
+ {
26
+ name: 'collection_list',
27
+ description: 'List all collections',
28
+ inputSchema: {
29
+ type: 'object',
30
+ properties: {
31
+ chain: {
32
+ type: 'string',
33
+ description: 'Chain to query',
34
+ },
35
+ limit: {
36
+ type: 'number',
37
+ description: 'Max results',
38
+ },
39
+ offset: {
40
+ type: 'number',
41
+ description: 'Pagination offset',
42
+ },
43
+ },
44
+ },
45
+ },
46
+ {
47
+ name: 'collection_agents',
48
+ description: 'List agents in a collection',
49
+ inputSchema: {
50
+ type: 'object',
51
+ properties: {
52
+ collection: {
53
+ type: 'string',
54
+ description: 'Collection ID/address',
55
+ },
56
+ chain: {
57
+ type: 'string',
58
+ description: 'Chain to query',
59
+ },
60
+ limit: {
61
+ type: 'number',
62
+ description: 'Max results',
63
+ },
64
+ offset: {
65
+ type: 'number',
66
+ description: 'Pagination offset',
67
+ },
68
+ },
69
+ required: ['collection'],
70
+ },
71
+ },
72
+ {
73
+ name: 'collection_base_get',
74
+ description: 'Get the base/default collection for the registry',
75
+ inputSchema: {
76
+ type: 'object',
77
+ properties: {
78
+ chain: {
79
+ type: 'string',
80
+ description: 'Chain to query',
81
+ },
82
+ },
83
+ },
84
+ },
85
+ ];
86
+ export const collectionHandlers = {
87
+ collection_get: async (args) => {
88
+ const input = getArgs(args);
89
+ const collection = readString(input, 'collection', true);
90
+ const { chainPrefix } = parseChainParam(input);
91
+ // Currently Solana-only
92
+ const provider = chainPrefix
93
+ ? globalState.chains.getByPrefix(chainPrefix)
94
+ : globalState.chains.getDefault();
95
+ if (!provider || provider.chainType !== 'solana') {
96
+ throw new Error('Collection queries are currently only supported on Solana');
97
+ }
98
+ const sdk = provider.getState().getSdk();
99
+ const pubkey = new PublicKey(collection);
100
+ const result = await sdk.getCollection(pubkey);
101
+ return successResponse(result);
102
+ },
103
+ collection_list: async (args) => {
104
+ const input = getArgs(args);
105
+ const { chainPrefix } = parseChainParam(input);
106
+ const { limit, offset } = parsePagination(input);
107
+ const provider = chainPrefix
108
+ ? globalState.chains.getByPrefix(chainPrefix)
109
+ : globalState.chains.getDefault();
110
+ if (!provider || provider.chainType !== 'solana') {
111
+ throw new Error('Collection queries are currently only supported on Solana');
112
+ }
113
+ const sdk = provider.getState().getSdk();
114
+ const collections = await sdk.getCollections();
115
+ // Apply pagination
116
+ const paginated = collections.slice(offset, offset + limit);
117
+ return successResponse({
118
+ collections: paginated,
119
+ total: collections.length,
120
+ hasMore: offset + paginated.length < collections.length,
121
+ offset,
122
+ limit,
123
+ });
124
+ },
125
+ collection_agents: async (args) => {
126
+ const input = getArgs(args);
127
+ const collection = readString(input, 'collection', true);
128
+ const { chainPrefix } = parseChainParam(input);
129
+ const { limit, offset } = parsePagination(input);
130
+ const provider = chainPrefix
131
+ ? globalState.chains.getByPrefix(chainPrefix)
132
+ : globalState.chains.getDefault();
133
+ if (!provider) {
134
+ return successResponse({ results: [], total: 0, hasMore: false, offset, limit });
135
+ }
136
+ const result = await provider.searchAgents({ collection, limit, offset });
137
+ return successResponse(result);
138
+ },
139
+ collection_base_get: async (args) => {
140
+ const input = getArgs(args);
141
+ const { chainPrefix } = parseChainParam(input);
142
+ const provider = chainPrefix
143
+ ? globalState.chains.getByPrefix(chainPrefix)
144
+ : globalState.chains.getDefault();
145
+ if (!provider || provider.chainType !== 'solana') {
146
+ throw new Error('Base collection query is currently only supported on Solana');
147
+ }
148
+ const sdk = provider.getState().getSdk();
149
+ const baseCollection = await sdk.getBaseCollection();
150
+ return successResponse({
151
+ collection: baseCollection?.toBase58() ?? null,
152
+ });
153
+ },
154
+ };
155
+ // Backward compatibility aliases
156
+ export const collectionAliases = {
157
+ sdk_get_collection: 'collection_get',
158
+ sdk_get_collections: 'collection_list',
159
+ sdk_get_collection_agents: 'collection_agents',
160
+ sdk_get_base_collection: 'collection_base_get',
161
+ };
162
+ //# sourceMappingURL=collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../../../src/tools/unified/collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ export declare const configTools: Tool[];
3
+ export declare const configHandlers: Record<string, (args: unknown) => Promise<unknown>>;
4
+ export declare const configAliases: Record<string, string>;
5
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/tools/unified/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAO/D,eAAO,MAAM,WAAW,EAAE,IAAI,EAkF7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAwJ9E,CAAC;AAGF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,CAAC"}
@@ -0,0 +1,217 @@
1
+ // Unified config tools
2
+ import { getArgs, readString, readNumber, readBoolean } from '../../core/parsers/common.js';
3
+ import { successResponse, errorResponse } from '../../core/serializers/common.js';
4
+ import { globalState } from '../../state/global-state.js';
5
+ export const configTools = [
6
+ {
7
+ name: 'config_get',
8
+ description: 'Get current MCP configuration including chain settings, network mode, signer status, and cache statistics',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {},
12
+ },
13
+ },
14
+ {
15
+ name: 'config_set',
16
+ description: 'Update runtime configuration (chain, network mode, RPC URL, indexer settings, etc.)',
17
+ inputSchema: {
18
+ type: 'object',
19
+ properties: {
20
+ chain: {
21
+ type: 'string',
22
+ description: 'Default chain to use (sol, base, eth, arb, poly, op)',
23
+ },
24
+ networkMode: {
25
+ type: 'string',
26
+ enum: ['testnet', 'mainnet'],
27
+ description: 'Network mode: testnet (devnet/sepolia) or mainnet',
28
+ },
29
+ rpcUrl: {
30
+ type: 'string',
31
+ description: 'Custom RPC URL for the current chain',
32
+ },
33
+ indexerUrl: {
34
+ type: 'string',
35
+ description: 'Indexer service URL',
36
+ },
37
+ useIndexer: {
38
+ type: 'boolean',
39
+ description: 'Enable/disable indexer queries',
40
+ },
41
+ indexerFallback: {
42
+ type: 'boolean',
43
+ description: 'Fallback to RPC on indexer failure',
44
+ },
45
+ forceOnChain: {
46
+ type: 'boolean',
47
+ description: 'Force on-chain queries only',
48
+ },
49
+ crawlerTimeoutMs: {
50
+ type: 'number',
51
+ description: 'Timeout for MCP/A2A crawler (ms)',
52
+ },
53
+ },
54
+ },
55
+ },
56
+ {
57
+ name: 'config_reset',
58
+ description: 'Reset configuration from environment variables (including network mode to testnet)',
59
+ inputSchema: {
60
+ type: 'object',
61
+ properties: {},
62
+ },
63
+ },
64
+ {
65
+ name: 'network_get',
66
+ description: 'Get current network mode and status of all chains (testnet/mainnet deployment status)',
67
+ inputSchema: {
68
+ type: 'object',
69
+ properties: {},
70
+ },
71
+ },
72
+ {
73
+ name: 'network_set',
74
+ description: 'Switch between testnet and mainnet for all chains. WARNING: Only chains with deployed contracts will be available.',
75
+ inputSchema: {
76
+ type: 'object',
77
+ properties: {
78
+ mode: {
79
+ type: 'string',
80
+ enum: ['testnet', 'mainnet'],
81
+ description: 'Network mode: testnet (devnet/sepolia/amoy) or mainnet',
82
+ },
83
+ },
84
+ required: ['mode'],
85
+ },
86
+ },
87
+ ];
88
+ export const configHandlers = {
89
+ config_get: async () => {
90
+ const snapshot = globalState.getSnapshot();
91
+ // Get Solana-specific state if available
92
+ const solanaProvider = globalState.chains.getByPrefix('sol');
93
+ const solanaState = solanaProvider?.getState().getSnapshot();
94
+ return successResponse({
95
+ ...snapshot,
96
+ solana: solanaState,
97
+ });
98
+ },
99
+ config_set: async (args) => {
100
+ const input = getArgs(args);
101
+ const changes = [];
102
+ // Handle network mode change
103
+ const networkMode = readString(input, 'networkMode');
104
+ if (networkMode && (networkMode === 'testnet' || networkMode === 'mainnet')) {
105
+ const result = globalState.setNetworkMode(networkMode);
106
+ changes.push(`Network mode: ${result.previous} → ${result.current}`);
107
+ if (result.deployedChains.length === 0) {
108
+ return errorResponse(`No chains have deployed contracts for ${networkMode} mode. ` +
109
+ 'Use network_get to see deployment status.');
110
+ }
111
+ }
112
+ // Handle chain default change
113
+ const chain = readString(input, 'chain');
114
+ if (chain) {
115
+ const chainId = chain === 'solana' ? 'sol' : chain;
116
+ if (globalState.chains.has(chainId)) {
117
+ globalState.chains.setDefault(chainId);
118
+ changes.push(`Default chain: ${chainId}`);
119
+ }
120
+ }
121
+ // Handle Solana-specific config
122
+ const solanaProvider = globalState.chains.getByPrefix('sol');
123
+ if (solanaProvider) {
124
+ const state = solanaProvider.getState();
125
+ const updates = {};
126
+ const rpcUrl = readString(input, 'rpcUrl');
127
+ if (rpcUrl) {
128
+ updates.rpcUrl = rpcUrl;
129
+ changes.push(`RPC URL: ${rpcUrl}`);
130
+ }
131
+ const indexerUrl = readString(input, 'indexerUrl');
132
+ if (indexerUrl) {
133
+ updates.indexerUrl = indexerUrl;
134
+ changes.push(`Indexer URL: ${indexerUrl}`);
135
+ }
136
+ const useIndexer = readBoolean(input, 'useIndexer');
137
+ if (useIndexer !== undefined) {
138
+ updates.useIndexer = useIndexer;
139
+ changes.push(`Use indexer: ${useIndexer}`);
140
+ }
141
+ const indexerFallback = readBoolean(input, 'indexerFallback');
142
+ if (indexerFallback !== undefined) {
143
+ updates.indexerFallback = indexerFallback;
144
+ changes.push(`Indexer fallback: ${indexerFallback}`);
145
+ }
146
+ const forceOnChain = readBoolean(input, 'forceOnChain');
147
+ if (forceOnChain !== undefined) {
148
+ updates.forceOnChain = forceOnChain;
149
+ changes.push(`Force on-chain: ${forceOnChain}`);
150
+ }
151
+ if (Object.keys(updates).length > 0) {
152
+ state.setConfig(updates);
153
+ }
154
+ }
155
+ // Handle crawler timeout
156
+ const crawlerTimeoutMs = readNumber(input, 'crawlerTimeoutMs');
157
+ if (crawlerTimeoutMs !== undefined) {
158
+ globalState.crawlerTimeoutMs = crawlerTimeoutMs;
159
+ changes.push(`Crawler timeout: ${crawlerTimeoutMs}ms`);
160
+ }
161
+ return successResponse({
162
+ message: changes.length > 0 ? `Configuration updated:\n- ${changes.join('\n- ')}` : 'No changes made',
163
+ snapshot: globalState.getSnapshot(),
164
+ });
165
+ },
166
+ config_reset: async () => {
167
+ globalState.resetConfig();
168
+ return successResponse({
169
+ message: 'Configuration reset from environment (network mode: testnet)',
170
+ snapshot: globalState.getSnapshot(),
171
+ });
172
+ },
173
+ network_get: async () => {
174
+ const status = globalState.getNetworkStatus();
175
+ // Format chain status for display
176
+ const chainLines = Object.entries(status.chainStatus).map(([prefix, info]) => {
177
+ const deployedIcon = info.deployed ? '✓' : '✗';
178
+ const indexerIcon = info.hasSubgraph ? '📊' : '';
179
+ return ` ${prefix}: ${deployedIcon} ${info.displayName} (chain ${info.chainId}) ${indexerIcon}`;
180
+ });
181
+ return successResponse({
182
+ mode: status.mode,
183
+ deployedChains: status.deployedChains,
184
+ chainStatus: status.chainStatus,
185
+ summary: `Network Mode: ${status.mode.toUpperCase()}\n` +
186
+ `Deployed Chains: ${status.deployedChains.length > 0 ? status.deployedChains.join(', ') : 'none'}\n\n` +
187
+ `Chain Status:\n${chainLines.join('\n')}`,
188
+ });
189
+ },
190
+ network_set: async (args) => {
191
+ const input = getArgs(args);
192
+ const mode = readString(input, 'mode');
193
+ if (!mode || (mode !== 'testnet' && mode !== 'mainnet')) {
194
+ return errorResponse('Invalid network mode. Use "testnet" or "mainnet".');
195
+ }
196
+ const result = globalState.setNetworkMode(mode);
197
+ if (result.deployedChains.length === 0) {
198
+ return successResponse({
199
+ warning: `⚠️ No chains have deployed contracts for ${mode} mode yet.`,
200
+ previous: result.previous,
201
+ current: result.current,
202
+ deployedChains: result.deployedChains,
203
+ network: globalState.getNetworkStatus(),
204
+ });
205
+ }
206
+ return successResponse({
207
+ message: `Network mode switched: ${result.previous} → ${result.current}`,
208
+ previous: result.previous,
209
+ current: result.current,
210
+ deployedChains: result.deployedChains,
211
+ network: globalState.getNetworkStatus(),
212
+ });
213
+ },
214
+ };
215
+ // Backward compatibility aliases
216
+ export const configAliases = {};
217
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/tools/unified/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ export declare const crawlerTools: Tool[];
3
+ export declare const crawlerHandlers: Record<string, (args: unknown) => Promise<unknown>>;
4
+ export declare const crawlerAliases: Record<string, string>;
5
+ //# sourceMappingURL=crawler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawler.d.ts","sourceRoot":"","sources":["../../../src/tools/unified/crawler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AA0D/D,eAAO,MAAM,YAAY,EAAE,IAAI,EAuD9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CA0G/E,CAAC;AAGF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIjD,CAAC"}
@@ -0,0 +1,212 @@
1
+ // Unified crawler tools for MCP/A2A endpoint discovery
2
+ import { getArgs, readString, readNumber } from '../../core/parsers/common.js';
3
+ import { successResponse } from '../../core/serializers/common.js';
4
+ import { globalState } from '../../state/global-state.js';
5
+ import { EndpointCrawler } from '8004-solana';
6
+ // SSRF Protection: Validate URLs to prevent internal network scanning
7
+ const PRIVATE_IP_PATTERNS = [
8
+ /^127\./, // Loopback 127.0.0.0/8
9
+ /^10\./, // Private 10.0.0.0/8
10
+ /^172\.(1[6-9]|2[0-9]|3[0-1])\./, // Private 172.16.0.0/12
11
+ /^192\.168\./, // Private 192.168.0.0/16
12
+ /^169\.254\./, // Link-local 169.254.0.0/16
13
+ /^0\./, // Reserved 0.0.0.0/8
14
+ /^::1$/, // IPv6 loopback
15
+ /^fc00:/i, // IPv6 unique local
16
+ /^fe80:/i, // IPv6 link-local
17
+ ];
18
+ const BLOCKED_HOSTNAMES = [
19
+ 'localhost',
20
+ 'localhost.localdomain',
21
+ '127.0.0.1',
22
+ '::1',
23
+ '0.0.0.0',
24
+ 'metadata.google.internal', // GCP metadata
25
+ '169.254.169.254', // AWS/GCP/Azure metadata
26
+ ];
27
+ function validateCrawlerUrl(urlString) {
28
+ try {
29
+ const url = new URL(urlString);
30
+ // Only allow http/https schemes
31
+ if (!['http:', 'https:'].includes(url.protocol)) {
32
+ return { valid: false, error: `Invalid scheme: ${url.protocol}. Only http/https allowed.` };
33
+ }
34
+ const hostname = url.hostname.toLowerCase();
35
+ // Block known internal hostnames
36
+ if (BLOCKED_HOSTNAMES.includes(hostname)) {
37
+ return { valid: false, error: `Blocked hostname: ${hostname}` };
38
+ }
39
+ // Block private IP addresses
40
+ for (const pattern of PRIVATE_IP_PATTERNS) {
41
+ if (pattern.test(hostname)) {
42
+ return { valid: false, error: `Private IP address not allowed: ${hostname}` };
43
+ }
44
+ }
45
+ return { valid: true };
46
+ }
47
+ catch {
48
+ return { valid: false, error: 'Invalid URL format' };
49
+ }
50
+ }
51
+ export const crawlerTools = [
52
+ {
53
+ name: 'crawler_fetch_mcp',
54
+ description: 'Fetch MCP (Model Context Protocol) capabilities from an endpoint',
55
+ inputSchema: {
56
+ type: 'object',
57
+ properties: {
58
+ url: {
59
+ type: 'string',
60
+ description: 'MCP endpoint URL',
61
+ },
62
+ timeoutMs: {
63
+ type: 'number',
64
+ description: 'Request timeout in milliseconds (default: from config)',
65
+ },
66
+ },
67
+ required: ['url'],
68
+ },
69
+ },
70
+ {
71
+ name: 'crawler_fetch_a2a',
72
+ description: 'Fetch A2A (Agent-to-Agent) capabilities from an endpoint',
73
+ inputSchema: {
74
+ type: 'object',
75
+ properties: {
76
+ url: {
77
+ type: 'string',
78
+ description: 'A2A endpoint URL (base URL, will append /.well-known/agent.json)',
79
+ },
80
+ timeoutMs: {
81
+ type: 'number',
82
+ description: 'Request timeout in milliseconds (default: from config)',
83
+ },
84
+ },
85
+ required: ['url'],
86
+ },
87
+ },
88
+ {
89
+ name: 'crawler_is_alive',
90
+ description: 'Check if an endpoint is responding (health check)',
91
+ inputSchema: {
92
+ type: 'object',
93
+ properties: {
94
+ url: {
95
+ type: 'string',
96
+ description: 'Endpoint URL to check',
97
+ },
98
+ timeoutMs: {
99
+ type: 'number',
100
+ description: 'Request timeout in milliseconds',
101
+ },
102
+ },
103
+ required: ['url'],
104
+ },
105
+ },
106
+ ];
107
+ export const crawlerHandlers = {
108
+ crawler_fetch_mcp: async (args) => {
109
+ const input = getArgs(args);
110
+ const url = readString(input, 'url', true);
111
+ const timeoutMs = readNumber(input, 'timeoutMs') ?? globalState.crawlerTimeoutMs;
112
+ // SSRF protection: validate URL before making request
113
+ const validation = validateCrawlerUrl(url);
114
+ if (!validation.valid) {
115
+ return successResponse({
116
+ success: false,
117
+ url,
118
+ error: validation.error,
119
+ });
120
+ }
121
+ try {
122
+ const crawler = new EndpointCrawler(timeoutMs);
123
+ const capabilities = await crawler.fetchMcpCapabilities(url);
124
+ return successResponse({
125
+ success: true,
126
+ url,
127
+ capabilities,
128
+ });
129
+ }
130
+ catch (error) {
131
+ return successResponse({
132
+ success: false,
133
+ url,
134
+ error: error instanceof Error ? error.message : String(error),
135
+ });
136
+ }
137
+ },
138
+ crawler_fetch_a2a: async (args) => {
139
+ const input = getArgs(args);
140
+ const url = readString(input, 'url', true);
141
+ const timeoutMs = readNumber(input, 'timeoutMs') ?? globalState.crawlerTimeoutMs;
142
+ // SSRF protection: validate URL before making request
143
+ const validation = validateCrawlerUrl(url);
144
+ if (!validation.valid) {
145
+ return successResponse({
146
+ success: false,
147
+ url,
148
+ error: validation.error,
149
+ });
150
+ }
151
+ try {
152
+ const crawler = new EndpointCrawler(timeoutMs);
153
+ const capabilities = await crawler.fetchA2aCapabilities(url);
154
+ return successResponse({
155
+ success: true,
156
+ url,
157
+ capabilities,
158
+ });
159
+ }
160
+ catch (error) {
161
+ return successResponse({
162
+ success: false,
163
+ url,
164
+ error: error instanceof Error ? error.message : String(error),
165
+ });
166
+ }
167
+ },
168
+ crawler_is_alive: async (args) => {
169
+ const input = getArgs(args);
170
+ const url = readString(input, 'url', true);
171
+ const timeoutMs = readNumber(input, 'timeoutMs') ?? globalState.crawlerTimeoutMs;
172
+ // SSRF protection: validate URL before making request
173
+ const validation = validateCrawlerUrl(url);
174
+ if (!validation.valid) {
175
+ return successResponse({
176
+ alive: false,
177
+ url,
178
+ error: validation.error,
179
+ });
180
+ }
181
+ try {
182
+ const controller = new AbortController();
183
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
184
+ const response = await fetch(url, {
185
+ method: 'HEAD',
186
+ signal: controller.signal,
187
+ redirect: 'manual', // Don't follow redirects to prevent SSRF via redirect
188
+ });
189
+ clearTimeout(timeoutId);
190
+ return successResponse({
191
+ alive: response.ok || (response.status >= 300 && response.status < 400),
192
+ url,
193
+ status: response.status,
194
+ statusText: response.statusText,
195
+ });
196
+ }
197
+ catch (error) {
198
+ return successResponse({
199
+ alive: false,
200
+ url,
201
+ error: error instanceof Error ? error.message : String(error),
202
+ });
203
+ }
204
+ },
205
+ };
206
+ // Backward compatibility aliases
207
+ export const crawlerAliases = {
208
+ crawler_fetch_mcp_capabilities: 'crawler_fetch_mcp',
209
+ crawler_fetch_a2a_capabilities: 'crawler_fetch_a2a',
210
+ sdk_is_it_alive: 'crawler_is_alive',
211
+ };
212
+ //# sourceMappingURL=crawler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawler.js","sourceRoot":"","sources":["../../../src/tools/unified/crawler.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAGvD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,sEAAsE;AACtE,MAAM,mBAAmB,GAAG;IAC1B,QAAQ,EAA4B,uBAAuB;IAC3D,OAAO,EAA6B,qBAAqB;IACzD,gCAAgC,EAAI,wBAAwB;IAC5D,aAAa,EAAuB,yBAAyB;IAC7D,aAAa,EAAuB,4BAA4B;IAChE,MAAM,EAA8B,qBAAqB;IACzD,OAAO,EAA6B,gBAAgB;IACpD,SAAS,EAA2B,oBAAoB;IACxD,SAAS,EAA2B,kBAAkB;CACvD,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACxB,WAAW;IACX,uBAAuB;IACvB,WAAW;IACX,KAAK;IACL,SAAS;IACT,0BAA0B,EAAU,eAAe;IACnD,iBAAiB,EAAoB,yBAAyB;CAC/D,CAAC;AAEF,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAE/B,gCAAgC;QAChC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,GAAG,CAAC,QAAQ,4BAA4B,EAAE,CAAC;QAC9F,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE5C,iCAAiC;QACjC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,QAAQ,EAAE,EAAE,CAAC;QAClE,CAAC;QAED,6BAA6B;QAC7B,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;YAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,QAAQ,EAAE,EAAE,CAAC;YAChF,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;IACvD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,kEAAkE;QAC/E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kBAAkB;iBAChC;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wDAAwD;iBACtE;aACF;YACD,QAAQ,EAAE,CAAC,KAAK,CAAC;SAClB;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,0DAA0D;QACvE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kEAAkE;iBAChF;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wDAAwD;iBACtE;aACF;YACD,QAAQ,EAAE,CAAC,KAAK,CAAC;SAClB;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iCAAiC;iBAC/C;aACF;YACD,QAAQ,EAAE,CAAC,KAAK,CAAC;SAClB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAwD;IAClF,iBAAiB,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,WAAW,CAAC,gBAAgB,CAAC;QAEjF,sDAAsD;QACtD,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,eAAe,CAAC;gBACrB,OAAO,EAAE,KAAK;gBACd,GAAG;gBACH,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,eAAe,CAAC;gBACrB,OAAO,EAAE,IAAI;gBACb,GAAG;gBACH,YAAY;aACb,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC;gBACrB,OAAO,EAAE,KAAK;gBACd,GAAG;gBACH,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,iBAAiB,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,WAAW,CAAC,gBAAgB,CAAC;QAEjF,sDAAsD;QACtD,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,eAAe,CAAC;gBACrB,OAAO,EAAE,KAAK;gBACd,GAAG;gBACH,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,eAAe,CAAC;gBACrB,OAAO,EAAE,IAAI;gBACb,GAAG;gBACH,YAAY;aACb,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC;gBACrB,OAAO,EAAE,KAAK;gBACd,GAAG;gBACH,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,gBAAgB,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,WAAW,CAAC,gBAAgB,CAAC;QAEjF,sDAAsD;QACtD,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,eAAe,CAAC;gBACrB,KAAK,EAAE,KAAK;gBACZ,GAAG;gBACH,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;YAElE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,QAAQ,EAAE,QAAQ,EAAE,sDAAsD;aAC3E,CAAC,CAAC;YAEH,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,OAAO,eAAe,CAAC;gBACrB,KAAK,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;gBACvE,GAAG;gBACH,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;aAChC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,eAAe,CAAC;gBACrB,KAAK,EAAE,KAAK;gBACZ,GAAG;gBACH,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC;AAEF,iCAAiC;AACjC,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,8BAA8B,EAAE,mBAAmB;IACnD,8BAA8B,EAAE,mBAAmB;IACnD,eAAe,EAAE,kBAAkB;CACpC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ export declare const feedbackTools: Tool[];
3
+ export declare const feedbackHandlers: Record<string, (args: unknown) => Promise<unknown>>;
4
+ export declare const feedbackAliases: Record<string, string>;
5
+ //# sourceMappingURL=feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../../src/tools/unified/feedback.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAiB/D,eAAO,MAAM,aAAa,EAAE,IAAI,EA+G/B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAuKhF,CAAC;AAGF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIlD,CAAC"}