@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,103 @@
1
+ // Solana agent wallet and signing tools
2
+ import { PublicKey } from '@solana/web3.js';
3
+ import { getArgs, readString } from '../../../core/parsers/common.js';
4
+ import { successResponse } from '../../../core/serializers/common.js';
5
+ export function createWalletTools(getState) {
6
+ const tools = [];
7
+ const handlers = {};
8
+ // solana_agent_wallet_get
9
+ tools.push({
10
+ name: 'solana_agent_wallet_get',
11
+ description: 'Get the operational wallet public key for a Solana agent',
12
+ inputSchema: {
13
+ type: 'object',
14
+ properties: {
15
+ asset: {
16
+ type: 'string',
17
+ description: 'Agent asset public key (base58)',
18
+ },
19
+ },
20
+ required: ['asset'],
21
+ },
22
+ });
23
+ handlers['solana_agent_wallet_get'] = async (args) => {
24
+ const input = getArgs(args);
25
+ const assetStr = readString(input, 'asset', true);
26
+ const asset = new PublicKey(assetStr);
27
+ const sdk = getState().getSdk();
28
+ const agent = await sdk.loadAgent(asset);
29
+ const agentWallet = agent?.getAgentWalletPublicKey();
30
+ return successResponse({
31
+ asset: asset.toBase58(),
32
+ agentWallet: agentWallet?.toBase58() ?? null,
33
+ owner: agent?.getOwnerPublicKey().toBase58() ?? null,
34
+ });
35
+ };
36
+ // solana_sign
37
+ tools.push({
38
+ name: 'solana_sign',
39
+ description: 'Sign arbitrary data with the agent operational wallet (returns signed payload URI)',
40
+ inputSchema: {
41
+ type: 'object',
42
+ properties: {
43
+ asset: {
44
+ type: 'string',
45
+ description: 'Agent asset public key (base58)',
46
+ },
47
+ data: {
48
+ type: 'object',
49
+ description: 'Data to sign (JSON object)',
50
+ },
51
+ },
52
+ required: ['asset', 'data'],
53
+ },
54
+ });
55
+ handlers['solana_sign'] = async (args) => {
56
+ const input = getArgs(args);
57
+ const assetStr = readString(input, 'asset', true);
58
+ const asset = new PublicKey(assetStr);
59
+ const data = input.data;
60
+ const sdk = getState().getSdk();
61
+ // sign() returns a signed payload URI string
62
+ const signedPayloadUri = sdk.sign(asset, data);
63
+ return successResponse({
64
+ signedPayloadUri,
65
+ });
66
+ };
67
+ // solana_verify
68
+ tools.push({
69
+ name: 'solana_verify',
70
+ description: 'Verify a signed payload against agent operational wallet',
71
+ inputSchema: {
72
+ type: 'object',
73
+ properties: {
74
+ asset: {
75
+ type: 'string',
76
+ description: 'Agent asset public key (base58)',
77
+ },
78
+ payloadOrUri: {
79
+ type: 'string',
80
+ description: 'Signed payload URI or JSON string',
81
+ },
82
+ publicKey: {
83
+ type: 'string',
84
+ description: 'Optional: specific public key to verify against (base58)',
85
+ },
86
+ },
87
+ required: ['asset', 'payloadOrUri'],
88
+ },
89
+ });
90
+ handlers['solana_verify'] = async (args) => {
91
+ const input = getArgs(args);
92
+ const assetStr = readString(input, 'asset', true);
93
+ const payloadOrUri = readString(input, 'payloadOrUri', true);
94
+ const publicKeyStr = readString(input, 'publicKey');
95
+ const asset = new PublicKey(assetStr);
96
+ const publicKey = publicKeyStr ? new PublicKey(publicKeyStr) : undefined;
97
+ const sdk = getState().getSdk();
98
+ const isValid = await sdk.verify(payloadOrUri, asset, publicKey);
99
+ return successResponse({ valid: isValid });
100
+ };
101
+ return { tools, handlers };
102
+ }
103
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../../src/chains/solana/tools/wallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { ChainType, ChainPrefix } from '../core/interfaces/agent.js';
2
+ export type NetworkMode = 'testnet' | 'mainnet';
3
+ export declare const DEFAULT_NETWORK_MODE: NetworkMode;
4
+ export declare const DEFAULT_CRAWLER_TIMEOUT_MS = 5000;
5
+ export declare const DEFAULT_SYNC_INTERVAL_MS: number;
6
+ export interface ChainNetworkConfig {
7
+ chainId: number | string;
8
+ rpcUrl: string;
9
+ subgraphUrl?: string;
10
+ indexerUrl?: string;
11
+ registries: {
12
+ identity: string;
13
+ reputation: string;
14
+ validation?: string;
15
+ };
16
+ blockExplorer?: string;
17
+ }
18
+ export interface ChainConfig {
19
+ prefix: ChainPrefix;
20
+ chainType: ChainType;
21
+ displayName: string;
22
+ testnet: ChainNetworkConfig;
23
+ mainnet: ChainNetworkConfig;
24
+ }
25
+ export declare const CHAIN_CONFIGS: Record<ChainPrefix, ChainConfig>;
26
+ export declare function getChainNetworkConfig(prefix: ChainPrefix, networkMode: NetworkMode): ChainNetworkConfig | null;
27
+ export declare function isChainDeployed(prefix: ChainPrefix, networkMode: NetworkMode): boolean;
28
+ export declare function getDeployedChains(networkMode: NetworkMode): ChainPrefix[];
29
+ export declare function getNetworkDisplayName(prefix: ChainPrefix, networkMode: NetworkMode): string;
30
+ export declare const DEFAULT_SOLANA_CLUSTER: "devnet";
31
+ export declare const DEFAULT_SOLANA_RPC_URL: string;
32
+ export declare const DEFAULT_INDEXER_URL: string;
33
+ export declare const DEFAULT_INDEXER_API_KEY = "sb_publishable_i-ycBRGiolBr8GMdiVq1rA_nwt7N2bq";
34
+ export declare const SOLANA_PROGRAM_IDS: {
35
+ readonly devnet: {
36
+ readonly agentRegistry: string;
37
+ readonly atomEngine: "B8Q2nXG7FT89Uau3n41T2qcDLAWxcaQggGqwFWGCEpr7";
38
+ };
39
+ readonly 'mainnet-beta': {
40
+ readonly agentRegistry: string;
41
+ readonly atomEngine: "";
42
+ };
43
+ readonly testnet: {
44
+ readonly agentRegistry: "";
45
+ readonly atomEngine: "";
46
+ };
47
+ };
48
+ export declare const EVM_CHAIN_IDS: {
49
+ readonly base: string;
50
+ readonly 'base-sepolia': string;
51
+ readonly ethereum: string;
52
+ readonly sepolia: string;
53
+ readonly arbitrum: string;
54
+ readonly 'arbitrum-sepolia': string;
55
+ readonly polygon: string;
56
+ readonly 'polygon-amoy': string;
57
+ readonly optimism: string;
58
+ readonly 'optimism-sepolia': string;
59
+ };
60
+ export declare const CHAIN_PREFIX_MAP: {
61
+ readonly sol: "solana";
62
+ readonly eth: "evm";
63
+ readonly base: "evm";
64
+ readonly arb: "evm";
65
+ readonly poly: "evm";
66
+ readonly op: "evm";
67
+ };
68
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1E,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAEhD,eAAO,MAAM,oBAAoB,EAAE,WAAuB,CAAC;AAC3D,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,wBAAwB,QAAgB,CAAC;AAGtD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAGD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAGD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,WAAW,CAqK1D,CAAC;AAGF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,WAAW,GACvB,kBAAkB,GAAG,IAAI,CAI3B;AAGD,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAKtF;AAGD,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,EAAE,CAIzE;AAGD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAsB3F;AAGD,eAAO,MAAM,sBAAsB,EAAG,QAAiB,CAAC;AACxD,eAAO,MAAM,sBAAsB,QAAmC,CAAC;AACvE,eAAO,MAAM,mBAAmB,QAA6C,CAAC;AAE9E,eAAO,MAAM,uBAAuB,mDAAmD,CAAC;AAExF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;CAarB,CAAC;AAEX,eAAO,MAAM,aAAa;;;;;;;;;;;CAWhB,CAAC;AAEX,eAAO,MAAM,gBAAgB;;;;;;;CAOnB,CAAC"}
@@ -0,0 +1,247 @@
1
+ // Default configuration values and network configs
2
+ export const DEFAULT_NETWORK_MODE = 'testnet';
3
+ export const DEFAULT_CRAWLER_TIMEOUT_MS = 5000;
4
+ export const DEFAULT_SYNC_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
5
+ // All supported chains with their testnet/mainnet configurations
6
+ export const CHAIN_CONFIGS = {
7
+ // Solana
8
+ sol: {
9
+ prefix: 'sol',
10
+ chainType: 'solana',
11
+ displayName: 'Solana',
12
+ testnet: {
13
+ chainId: 'devnet',
14
+ rpcUrl: 'https://api.devnet.solana.com',
15
+ // Supabase indexer for Solana devnet
16
+ indexerUrl: 'https://uhjytdjxvfbppgjicfly.supabase.co/rest/v1',
17
+ registries: {
18
+ identity: 'HHCVWcqsziJMmp43u2UAgAfH2cBjUFxVdW1M3C3NqzvT',
19
+ reputation: 'HHCVWcqsziJMmp43u2UAgAfH2cBjUFxVdW1M3C3NqzvT', // Same program
20
+ validation: 'HHCVWcqsziJMmp43u2UAgAfH2cBjUFxVdW1M3C3NqzvT',
21
+ },
22
+ blockExplorer: 'https://explorer.solana.com/?cluster=devnet',
23
+ },
24
+ mainnet: {
25
+ chainId: 'mainnet-beta',
26
+ rpcUrl: 'https://api.mainnet-beta.solana.com',
27
+ indexerUrl: '', // TBD
28
+ registries: {
29
+ identity: '', // TBD - mainnet deployment
30
+ reputation: '',
31
+ validation: '',
32
+ },
33
+ blockExplorer: 'https://explorer.solana.com',
34
+ },
35
+ },
36
+ // Base
37
+ base: {
38
+ prefix: 'base',
39
+ chainType: 'evm',
40
+ displayName: 'Base',
41
+ testnet: {
42
+ chainId: 84532, // Base Sepolia
43
+ rpcUrl: 'https://sepolia.base.org',
44
+ subgraphUrl: '', // Subgraph deprecated - use on-chain queries
45
+ registries: {
46
+ identity: '0x8004AA63c570c570eBF15376c0dB199918BFe9Fb',
47
+ reputation: '0x8004bd8daB57f14Ed299135749a5CB5c42d341BF',
48
+ },
49
+ blockExplorer: 'https://sepolia.basescan.org',
50
+ },
51
+ mainnet: {
52
+ chainId: 8453, // Base Mainnet
53
+ rpcUrl: 'https://mainnet.base.org',
54
+ subgraphUrl: '', // TBD
55
+ registries: {
56
+ identity: '', // TBD - mainnet deployment
57
+ reputation: '',
58
+ },
59
+ blockExplorer: 'https://basescan.org',
60
+ },
61
+ },
62
+ // Ethereum
63
+ eth: {
64
+ prefix: 'eth',
65
+ chainType: 'evm',
66
+ displayName: 'Ethereum',
67
+ testnet: {
68
+ chainId: 11155111, // Sepolia
69
+ rpcUrl: 'https://rpc.sepolia.org',
70
+ subgraphUrl: 'https://gateway.thegraph.com/api/00a452ad3cd1900273ea62c1bf283f93/subgraphs/id/6wQRC7geo9XYAhckfmfo8kbMRLeWU8KQd3XsJqFKmZLT',
71
+ registries: {
72
+ identity: '0x8004a6090Cd10A7288092483047B097295Fb8847',
73
+ reputation: '0x8004B8FD1A363aa02fDC07635C0c5F94f6Af5B7E',
74
+ },
75
+ blockExplorer: 'https://sepolia.etherscan.io',
76
+ },
77
+ mainnet: {
78
+ chainId: 1, // Ethereum Mainnet
79
+ rpcUrl: 'https://eth.llamarpc.com',
80
+ subgraphUrl: '', // TBD
81
+ registries: {
82
+ identity: '', // TBD
83
+ reputation: '',
84
+ },
85
+ blockExplorer: 'https://etherscan.io',
86
+ },
87
+ },
88
+ // Arbitrum
89
+ arb: {
90
+ prefix: 'arb',
91
+ chainType: 'evm',
92
+ displayName: 'Arbitrum',
93
+ testnet: {
94
+ chainId: 421614, // Arbitrum Sepolia
95
+ rpcUrl: 'https://sepolia-rollup.arbitrum.io/rpc',
96
+ subgraphUrl: '', // TBD
97
+ registries: {
98
+ identity: '', // TBD
99
+ reputation: '',
100
+ },
101
+ blockExplorer: 'https://sepolia.arbiscan.io',
102
+ },
103
+ mainnet: {
104
+ chainId: 42161, // Arbitrum One
105
+ rpcUrl: 'https://arb1.arbitrum.io/rpc',
106
+ subgraphUrl: '', // TBD
107
+ registries: {
108
+ identity: '', // TBD
109
+ reputation: '',
110
+ },
111
+ blockExplorer: 'https://arbiscan.io',
112
+ },
113
+ },
114
+ // Polygon
115
+ poly: {
116
+ prefix: 'poly',
117
+ chainType: 'evm',
118
+ displayName: 'Polygon',
119
+ testnet: {
120
+ chainId: 80002, // Polygon Amoy
121
+ rpcUrl: 'https://rpc-amoy.polygon.technology',
122
+ subgraphUrl: '', // Subgraph deprecated - use on-chain queries
123
+ registries: {
124
+ identity: '0x8004ad19E14B9e0654f73353e8a0B600D46C2898',
125
+ reputation: '0x8004B12F4C2B42d00c46479e859C92e39044C930',
126
+ },
127
+ blockExplorer: 'https://amoy.polygonscan.com',
128
+ },
129
+ mainnet: {
130
+ chainId: 137, // Polygon PoS
131
+ rpcUrl: 'https://polygon-rpc.com',
132
+ subgraphUrl: '', // TBD
133
+ registries: {
134
+ identity: '', // TBD
135
+ reputation: '',
136
+ },
137
+ blockExplorer: 'https://polygonscan.com',
138
+ },
139
+ },
140
+ // Optimism
141
+ op: {
142
+ prefix: 'op',
143
+ chainType: 'evm',
144
+ displayName: 'Optimism',
145
+ testnet: {
146
+ chainId: 11155420, // Optimism Sepolia
147
+ rpcUrl: 'https://sepolia.optimism.io',
148
+ subgraphUrl: '', // TBD
149
+ registries: {
150
+ identity: '', // TBD
151
+ reputation: '',
152
+ },
153
+ blockExplorer: 'https://sepolia-optimism.etherscan.io',
154
+ },
155
+ mainnet: {
156
+ chainId: 10, // Optimism Mainnet
157
+ rpcUrl: 'https://mainnet.optimism.io',
158
+ subgraphUrl: '', // TBD
159
+ registries: {
160
+ identity: '', // TBD
161
+ reputation: '',
162
+ },
163
+ blockExplorer: 'https://optimistic.etherscan.io',
164
+ },
165
+ },
166
+ };
167
+ // Helper to get chain config for a specific network mode
168
+ export function getChainNetworkConfig(prefix, networkMode) {
169
+ const config = CHAIN_CONFIGS[prefix];
170
+ if (!config)
171
+ return null;
172
+ return networkMode === 'mainnet' ? config.mainnet : config.testnet;
173
+ }
174
+ // Helper to check if a chain has deployed contracts for a network mode
175
+ export function isChainDeployed(prefix, networkMode) {
176
+ const config = getChainNetworkConfig(prefix, networkMode);
177
+ if (!config)
178
+ return false;
179
+ // Check if at least one registry address is set
180
+ return !!(config.registries.identity || config.registries.reputation);
181
+ }
182
+ // Get all chains that are deployed for a network mode
183
+ export function getDeployedChains(networkMode) {
184
+ return Object.keys(CHAIN_CONFIGS).filter((prefix) => isChainDeployed(prefix, networkMode));
185
+ }
186
+ // Get display name for network mode + chain
187
+ export function getNetworkDisplayName(prefix, networkMode) {
188
+ const config = CHAIN_CONFIGS[prefix];
189
+ if (!config)
190
+ return `Unknown (${prefix})`;
191
+ const network = networkMode === 'mainnet' ? config.mainnet : config.testnet;
192
+ const chainIdStr = typeof network.chainId === 'number' ? `Chain ${network.chainId}` : network.chainId;
193
+ if (networkMode === 'mainnet') {
194
+ return `${config.displayName} Mainnet`;
195
+ }
196
+ // For testnet, show the specific testnet name
197
+ const testnetNames = {
198
+ sol: 'Devnet',
199
+ base: 'Sepolia',
200
+ eth: 'Sepolia',
201
+ arb: 'Sepolia',
202
+ poly: 'Amoy',
203
+ op: 'Sepolia',
204
+ };
205
+ return `${config.displayName} ${testnetNames[prefix] ?? chainIdStr}`;
206
+ }
207
+ // Legacy exports for backward compatibility
208
+ export const DEFAULT_SOLANA_CLUSTER = 'devnet';
209
+ export const DEFAULT_SOLANA_RPC_URL = CHAIN_CONFIGS.sol.testnet.rpcUrl;
210
+ export const DEFAULT_INDEXER_URL = CHAIN_CONFIGS.sol.testnet.indexerUrl ?? '';
211
+ // Supabase anon key for read-only indexer access (safe to commit)
212
+ export const DEFAULT_INDEXER_API_KEY = 'sb_publishable_i-ycBRGiolBr8GMdiVq1rA_nwt7N2bq';
213
+ export const SOLANA_PROGRAM_IDS = {
214
+ devnet: {
215
+ agentRegistry: CHAIN_CONFIGS.sol.testnet.registries.identity,
216
+ atomEngine: 'B8Q2nXG7FT89Uau3n41T2qcDLAWxcaQggGqwFWGCEpr7',
217
+ },
218
+ 'mainnet-beta': {
219
+ agentRegistry: CHAIN_CONFIGS.sol.mainnet.registries.identity,
220
+ atomEngine: '', // TBD
221
+ },
222
+ testnet: {
223
+ agentRegistry: '',
224
+ atomEngine: '',
225
+ },
226
+ };
227
+ export const EVM_CHAIN_IDS = {
228
+ base: String(CHAIN_CONFIGS.base.mainnet.chainId),
229
+ 'base-sepolia': String(CHAIN_CONFIGS.base.testnet.chainId),
230
+ ethereum: String(CHAIN_CONFIGS.eth.mainnet.chainId),
231
+ sepolia: String(CHAIN_CONFIGS.eth.testnet.chainId),
232
+ arbitrum: String(CHAIN_CONFIGS.arb.mainnet.chainId),
233
+ 'arbitrum-sepolia': String(CHAIN_CONFIGS.arb.testnet.chainId),
234
+ polygon: String(CHAIN_CONFIGS.poly.mainnet.chainId),
235
+ 'polygon-amoy': String(CHAIN_CONFIGS.poly.testnet.chainId),
236
+ optimism: String(CHAIN_CONFIGS.op.mainnet.chainId),
237
+ 'optimism-sepolia': String(CHAIN_CONFIGS.op.testnet.chainId),
238
+ };
239
+ export const CHAIN_PREFIX_MAP = {
240
+ sol: 'solana',
241
+ eth: 'evm',
242
+ base: 'evm',
243
+ arb: 'evm',
244
+ poly: 'evm',
245
+ op: 'evm',
246
+ };
247
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type NetworkMode } from './defaults.js';
2
+ export type SolanaCluster = 'devnet';
3
+ export interface ISolanaEnvConfig {
4
+ cluster: SolanaCluster;
5
+ rpcUrl?: string;
6
+ privateKey?: string;
7
+ }
8
+ export interface IEvmEnvConfig {
9
+ privateKey?: string;
10
+ }
11
+ export interface IIndexerEnvConfig {
12
+ url: string;
13
+ apiKey?: string;
14
+ enabled: boolean;
15
+ fallback: boolean;
16
+ forceOnChain: boolean;
17
+ }
18
+ export interface IIpfsEnvConfig {
19
+ pinataJwt?: string;
20
+ ipfsUrl?: string;
21
+ filecoinEnabled: boolean;
22
+ filecoinPrivateKey?: string;
23
+ }
24
+ export interface IEnvConfig {
25
+ solana: ISolanaEnvConfig;
26
+ evm: IEvmEnvConfig;
27
+ indexer: IIndexerEnvConfig;
28
+ ipfs: IIpfsEnvConfig;
29
+ crawlerTimeoutMs: number;
30
+ networkMode: NetworkMode;
31
+ }
32
+ export declare function loadEnvConfig(): IEnvConfig;
33
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;AAErC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,GAAG,EAAE,aAAa,CAAC;IACnB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,cAAc,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAaD,wBAAgB,aAAa,IAAI,UAAU,CA4B1C"}
@@ -0,0 +1,42 @@
1
+ // Environment variable parsing
2
+ import { DEFAULT_SOLANA_CLUSTER, DEFAULT_INDEXER_URL, DEFAULT_INDEXER_API_KEY, DEFAULT_CRAWLER_TIMEOUT_MS, DEFAULT_NETWORK_MODE, } from './defaults.js';
3
+ function parseBooleanEnv(value, defaultValue) {
4
+ if (!value)
5
+ return defaultValue;
6
+ return value.toLowerCase() === 'true' || value === '1';
7
+ }
8
+ function parseIntEnv(value, defaultValue) {
9
+ if (!value)
10
+ return defaultValue;
11
+ const parsed = parseInt(value, 10);
12
+ return Number.isFinite(parsed) ? parsed : defaultValue;
13
+ }
14
+ export function loadEnvConfig() {
15
+ const env = process.env;
16
+ return {
17
+ solana: {
18
+ cluster: env.SOLANA_CLUSTER ?? DEFAULT_SOLANA_CLUSTER,
19
+ rpcUrl: env.SOLANA_RPC_URL,
20
+ privateKey: env.SOLANA_PRIVATE_KEY,
21
+ },
22
+ evm: {
23
+ privateKey: env.EVM_PRIVATE_KEY,
24
+ },
25
+ indexer: {
26
+ url: env.INDEXER_URL ?? DEFAULT_INDEXER_URL,
27
+ apiKey: env.INDEXER_API_KEY ?? DEFAULT_INDEXER_API_KEY,
28
+ enabled: parseBooleanEnv(env.USE_INDEXER, true),
29
+ fallback: parseBooleanEnv(env.INDEXER_FALLBACK, true),
30
+ forceOnChain: parseBooleanEnv(env.FORCE_ON_CHAIN, false),
31
+ },
32
+ ipfs: {
33
+ pinataJwt: env.PINATA_JWT,
34
+ ipfsUrl: env.IPFS_URL,
35
+ filecoinEnabled: parseBooleanEnv(env.FILECOIN_PIN_ENABLED, false),
36
+ filecoinPrivateKey: env.FILECOIN_PRIVATE_KEY,
37
+ },
38
+ crawlerTimeoutMs: parseIntEnv(env.MCP_CRAWLER_TIMEOUT_MS, DEFAULT_CRAWLER_TIMEOUT_MS),
39
+ networkMode: env.NETWORK_MODE ?? DEFAULT_NETWORK_MODE,
40
+ };
41
+ }
42
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,GAErB,MAAM,eAAe,CAAC;AAuCvB,SAAS,eAAe,CAAC,KAAyB,EAAE,YAAqB;IACvE,IAAI,CAAC,KAAK;QAAE,OAAO,YAAY,CAAC;IAChC,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;AACzD,CAAC;AAED,SAAS,WAAW,CAAC,KAAyB,EAAE,YAAoB;IAClE,IAAI,CAAC,KAAK;QAAE,OAAO,YAAY,CAAC;IAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAExB,OAAO;QACL,MAAM,EAAE;YACN,OAAO,EAAG,GAAG,CAAC,cAAgC,IAAI,sBAAsB;YACxE,MAAM,EAAE,GAAG,CAAC,cAAc;YAC1B,UAAU,EAAE,GAAG,CAAC,kBAAkB;SACnC;QACD,GAAG,EAAE;YACH,UAAU,EAAE,GAAG,CAAC,eAAe;SAChC;QACD,OAAO,EAAE;YACP,GAAG,EAAE,GAAG,CAAC,WAAW,IAAI,mBAAmB;YAC3C,MAAM,EAAE,GAAG,CAAC,eAAe,IAAI,uBAAuB;YACtD,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC;YAC/C,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC;YACrD,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC;SACzD;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC;YACjE,kBAAkB,EAAE,GAAG,CAAC,oBAAoB;SAC7C;QACD,gBAAgB,EAAE,WAAW,CAAC,GAAG,CAAC,sBAAsB,EAAE,0BAA0B,CAAC;QACrF,WAAW,EAAG,GAAG,CAAC,YAA4B,IAAI,oBAAoB;KACvE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './defaults.js';
2
+ export * from './env.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './defaults.js';
2
+ export * from './env.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { ICacheStats, IUpsertAgent } from './sqlite-store.js';
2
+ import type { ISyncManagerConfig, ISyncProgress, ISyncOptions } from './sync-manager.js';
3
+ import type { IDataSource } from './data-source.js';
4
+ import type { IAgentSummary, ISearchParams, ISearchResult } from '../interfaces/agent.js';
5
+ export interface IAgentCacheConfig {
6
+ dbPath?: string;
7
+ sync?: ISyncManagerConfig;
8
+ autoSync?: boolean;
9
+ }
10
+ export declare class AgentCache {
11
+ private readonly store;
12
+ private readonly syncManager;
13
+ private readonly autoSync;
14
+ constructor(config?: IAgentCacheConfig);
15
+ start(): void;
16
+ stop(): void;
17
+ registerDataSource(dataSource: IDataSource): void;
18
+ unregisterDataSource(sourceId: string): void;
19
+ search(query: string, options?: {
20
+ chainPrefix?: string;
21
+ limit?: number;
22
+ offset?: number;
23
+ }): ISearchResult;
24
+ searchAgents(params: ISearchParams): ISearchResult;
25
+ getAgent(globalId: string): IAgentSummary | null;
26
+ upsertAgent(agent: IUpsertAgent): void;
27
+ upsertAgentsBatch(agents: IUpsertAgent[]): void;
28
+ deleteAgent(globalId: string): boolean;
29
+ refresh(options?: ISyncOptions & {
30
+ sourceId?: string;
31
+ }): Promise<Map<string, ISyncProgress>>;
32
+ getSyncProgress(sourceId?: string): ISyncProgress | Map<string, ISyncProgress>;
33
+ getStats(): ICacheStats;
34
+ optimize(): void;
35
+ }
36
+ //# sourceMappingURL=agent-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-cache.d.ts","sourceRoot":"","sources":["../../../src/core/cache/agent-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE1F,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEvB,MAAM,CAAC,EAAE,iBAAiB;IAOtC,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAMZ,kBAAkB,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IAIjD,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,aAAa;IAIjB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa;IAKlD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAoBhD,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAItC,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI;IAI/C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKhC,OAAO,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAQlG,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAK9E,QAAQ,IAAI,WAAW;IAKvB,QAAQ,IAAI,IAAI;CAIjB"}