@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,99 @@
1
+ import type { ISearchParams, ISearchResult, ChainPrefix, ChainType } from '../interfaces/agent.js';
2
+ export interface ICachedAgent {
3
+ id: string;
4
+ chain_prefix: string;
5
+ chain_type: string;
6
+ chain_id: string | null;
7
+ raw_id: string;
8
+ name: string;
9
+ name_lower: string;
10
+ description: string | null;
11
+ image: string | null;
12
+ owner: string;
13
+ collection: string | null;
14
+ metadata: string | null;
15
+ endpoints: string | null;
16
+ trust_tier: number | null;
17
+ quality_score: number | null;
18
+ total_feedbacks: number;
19
+ average_score: number;
20
+ created_at: number;
21
+ updated_at: number;
22
+ synced_at: number;
23
+ }
24
+ export interface ISyncState {
25
+ source_id: string;
26
+ chain_prefix: string;
27
+ last_cursor: string | null;
28
+ last_timestamp: number | null;
29
+ total_agents: number | null;
30
+ status: 'idle' | 'syncing' | 'error';
31
+ error_message: string | null;
32
+ updated_at: number;
33
+ }
34
+ export interface IChainRecord {
35
+ prefix: string;
36
+ chain_type: string;
37
+ chain_id: string | null;
38
+ display_name: string;
39
+ rpc_url: string | null;
40
+ indexer_url: string | null;
41
+ is_default: boolean;
42
+ priority: number;
43
+ }
44
+ export interface ICacheStats {
45
+ total: number;
46
+ byChain: Record<string, number>;
47
+ dbSize: string;
48
+ lastSync: Record<string, number | null>;
49
+ }
50
+ export interface IUpsertAgent {
51
+ id: string;
52
+ chainPrefix: ChainPrefix;
53
+ chainType: ChainType;
54
+ chainId?: string;
55
+ rawId: string;
56
+ name: string;
57
+ description?: string;
58
+ image?: string;
59
+ owner: string;
60
+ collection?: string;
61
+ metadata?: Record<string, unknown>;
62
+ endpoints?: unknown[];
63
+ trustTier?: number;
64
+ qualityScore?: number;
65
+ totalFeedbacks?: number;
66
+ averageScore?: number;
67
+ createdAt: number;
68
+ updatedAt: number;
69
+ }
70
+ export declare class SqliteStore {
71
+ private db;
72
+ private readonly dbPath;
73
+ constructor(dbPath?: string);
74
+ private initialize;
75
+ upsertAgent(agent: IUpsertAgent): void;
76
+ upsertAgentsBatch(agents: IUpsertAgent[]): void;
77
+ getAgent(id: string): ICachedAgent | null;
78
+ deleteAgent(id: string): boolean;
79
+ searchByName(query: string, options?: {
80
+ chainPrefix?: string;
81
+ limit?: number;
82
+ offset?: number;
83
+ }): ISearchResult;
84
+ searchAgents(params: ISearchParams): ISearchResult;
85
+ getSyncState(sourceId: string): ISyncState | null;
86
+ updateSyncState(sourceId: string, updates: Partial<Omit<ISyncState, 'source_id' | 'updated_at'>>): void;
87
+ getChain(prefix: string): IChainRecord | null;
88
+ getDefaultChain(): IChainRecord | null;
89
+ getAllChains(): IChainRecord[];
90
+ updateChain(prefix: string, updates: Partial<Omit<IChainRecord, 'prefix'>>): void;
91
+ getStats(): ICacheStats;
92
+ optimizeFts(): void;
93
+ vacuum(): void;
94
+ close(): void;
95
+ private escapeFtsQuery;
96
+ private formatBytes;
97
+ private toAgentSummary;
98
+ }
99
+ //# sourceMappingURL=sqlite-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../../../src/core/cache/sqlite-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,470 @@
1
+ // SQLite store with FTS5 for agent cache
2
+ import Database from 'better-sqlite3';
3
+ import { homedir } from 'os';
4
+ import { join } from 'path';
5
+ import { mkdirSync, existsSync } from 'fs';
6
+ import { McpError, McpErrorCode } from '../errors/mcp-error.js';
7
+ const DEFAULT_CACHE_DIR = join(homedir(), '.8004-mcp');
8
+ const DEFAULT_DB_NAME = 'cache.db';
9
+ export class SqliteStore {
10
+ db;
11
+ dbPath;
12
+ constructor(dbPath) {
13
+ this.dbPath = dbPath ?? join(DEFAULT_CACHE_DIR, DEFAULT_DB_NAME);
14
+ // Ensure directory exists
15
+ const dir = this.dbPath.substring(0, this.dbPath.lastIndexOf('/'));
16
+ if (!existsSync(dir)) {
17
+ mkdirSync(dir, { recursive: true });
18
+ }
19
+ try {
20
+ this.db = new Database(this.dbPath);
21
+ this.initialize();
22
+ }
23
+ catch (error) {
24
+ throw new McpError(McpErrorCode.CACHE_INIT_FAILED, `Failed to initialize SQLite store: ${error instanceof Error ? error.message : String(error)}`, { dbPath: this.dbPath });
25
+ }
26
+ }
27
+ initialize() {
28
+ // Enable WAL mode for better concurrent read performance
29
+ this.db.pragma('journal_mode = WAL');
30
+ this.db.pragma('synchronous = NORMAL');
31
+ this.db.pragma('mmap_size = 268435456'); // 256MB
32
+ this.db.pragma('cache_size = -64000'); // 64MB
33
+ // Create tables
34
+ this.db.exec(`
35
+ -- Agents table
36
+ CREATE TABLE IF NOT EXISTS agents (
37
+ id TEXT PRIMARY KEY,
38
+ chain_prefix TEXT NOT NULL,
39
+ chain_type TEXT NOT NULL,
40
+ chain_id TEXT,
41
+ raw_id TEXT NOT NULL,
42
+ name TEXT NOT NULL,
43
+ name_lower TEXT NOT NULL,
44
+ description TEXT,
45
+ image TEXT,
46
+ owner TEXT NOT NULL,
47
+ collection TEXT,
48
+ metadata TEXT,
49
+ endpoints TEXT,
50
+ trust_tier INTEGER,
51
+ quality_score REAL,
52
+ total_feedbacks INTEGER DEFAULT 0,
53
+ average_score REAL DEFAULT 0,
54
+ created_at INTEGER NOT NULL,
55
+ updated_at INTEGER NOT NULL,
56
+ synced_at INTEGER NOT NULL
57
+ );
58
+
59
+ -- Indexes for efficient queries
60
+ CREATE INDEX IF NOT EXISTS idx_agents_chain_prefix ON agents(chain_prefix);
61
+ CREATE INDEX IF NOT EXISTS idx_agents_chain_type ON agents(chain_type);
62
+ CREATE INDEX IF NOT EXISTS idx_agents_owner ON agents(owner);
63
+ CREATE INDEX IF NOT EXISTS idx_agents_collection ON agents(collection);
64
+ CREATE INDEX IF NOT EXISTS idx_agents_updated ON agents(updated_at);
65
+ CREATE INDEX IF NOT EXISTS idx_agents_quality ON agents(quality_score DESC);
66
+ CREATE INDEX IF NOT EXISTS idx_agents_name_lower ON agents(name_lower);
67
+
68
+ -- Sync state per chain source
69
+ CREATE TABLE IF NOT EXISTS sync_state (
70
+ source_id TEXT PRIMARY KEY,
71
+ chain_prefix TEXT NOT NULL,
72
+ last_cursor TEXT,
73
+ last_timestamp INTEGER,
74
+ total_agents INTEGER,
75
+ status TEXT DEFAULT 'idle',
76
+ error_message TEXT,
77
+ updated_at INTEGER NOT NULL
78
+ );
79
+
80
+ -- Chain registry
81
+ CREATE TABLE IF NOT EXISTS chains (
82
+ prefix TEXT PRIMARY KEY,
83
+ chain_type TEXT NOT NULL,
84
+ chain_id TEXT,
85
+ display_name TEXT NOT NULL,
86
+ rpc_url TEXT,
87
+ indexer_url TEXT,
88
+ is_default INTEGER DEFAULT 0,
89
+ priority INTEGER DEFAULT 99
90
+ );
91
+ `);
92
+ // Create FTS5 virtual table if not exists
93
+ const ftsExists = this.db
94
+ .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='agents_fts'")
95
+ .get();
96
+ if (!ftsExists) {
97
+ this.db.exec(`
98
+ -- FTS5 Virtual Table for fast name search
99
+ CREATE VIRTUAL TABLE agents_fts USING fts5(
100
+ id,
101
+ name,
102
+ description,
103
+ content='agents',
104
+ content_rowid='rowid',
105
+ tokenize='unicode61 remove_diacritics 2'
106
+ );
107
+
108
+ -- Triggers to keep FTS in sync
109
+ CREATE TRIGGER agents_ai AFTER INSERT ON agents BEGIN
110
+ INSERT INTO agents_fts(rowid, id, name, description)
111
+ VALUES (NEW.rowid, NEW.id, NEW.name, NEW.description);
112
+ END;
113
+
114
+ CREATE TRIGGER agents_ad AFTER DELETE ON agents BEGIN
115
+ INSERT INTO agents_fts(agents_fts, rowid, id, name, description)
116
+ VALUES ('delete', OLD.rowid, OLD.id, OLD.name, OLD.description);
117
+ END;
118
+
119
+ CREATE TRIGGER agents_au AFTER UPDATE ON agents BEGIN
120
+ INSERT INTO agents_fts(agents_fts, rowid, id, name, description)
121
+ VALUES ('delete', OLD.rowid, OLD.id, OLD.name, OLD.description);
122
+ INSERT INTO agents_fts(rowid, id, name, description)
123
+ VALUES (NEW.rowid, NEW.id, NEW.name, NEW.description);
124
+ END;
125
+ `);
126
+ }
127
+ // Insert default chains if not exist
128
+ const insertChain = this.db.prepare(`
129
+ INSERT OR IGNORE INTO chains (prefix, chain_type, chain_id, display_name, is_default, priority)
130
+ VALUES (?, ?, ?, ?, ?, ?)
131
+ `);
132
+ insertChain.run('sol', 'solana', null, 'Solana', 1, 1);
133
+ insertChain.run('base', 'evm', '8453', 'Base', 0, 2);
134
+ insertChain.run('eth', 'evm', '1', 'Ethereum', 0, 3);
135
+ insertChain.run('arb', 'evm', '42161', 'Arbitrum', 0, 4);
136
+ insertChain.run('poly', 'evm', '137', 'Polygon', 0, 5);
137
+ insertChain.run('op', 'evm', '10', 'Optimism', 0, 6);
138
+ }
139
+ // Agent operations
140
+ upsertAgent(agent) {
141
+ const stmt = this.db.prepare(`
142
+ INSERT INTO agents (
143
+ id, chain_prefix, chain_type, chain_id, raw_id, name, name_lower,
144
+ description, image, owner, collection, metadata, endpoints,
145
+ trust_tier, quality_score, total_feedbacks, average_score,
146
+ created_at, updated_at, synced_at
147
+ ) VALUES (
148
+ ?, ?, ?, ?, ?, ?, ?,
149
+ ?, ?, ?, ?, ?, ?,
150
+ ?, ?, ?, ?,
151
+ ?, ?, ?
152
+ )
153
+ ON CONFLICT(id) DO UPDATE SET
154
+ name = excluded.name,
155
+ name_lower = excluded.name_lower,
156
+ description = excluded.description,
157
+ image = excluded.image,
158
+ owner = excluded.owner,
159
+ collection = excluded.collection,
160
+ metadata = excluded.metadata,
161
+ endpoints = excluded.endpoints,
162
+ trust_tier = excluded.trust_tier,
163
+ quality_score = excluded.quality_score,
164
+ total_feedbacks = excluded.total_feedbacks,
165
+ average_score = excluded.average_score,
166
+ updated_at = excluded.updated_at,
167
+ synced_at = excluded.synced_at
168
+ WHERE excluded.updated_at > agents.updated_at OR agents.updated_at IS NULL
169
+ `);
170
+ const now = Date.now();
171
+ stmt.run(agent.id, agent.chainPrefix, agent.chainType, agent.chainId ?? null, agent.rawId, agent.name, agent.name.toLowerCase(), agent.description ?? null, agent.image ?? null, agent.owner, agent.collection ?? null, agent.metadata ? JSON.stringify(agent.metadata) : null, agent.endpoints ? JSON.stringify(agent.endpoints) : null, agent.trustTier ?? null, agent.qualityScore ?? null, agent.totalFeedbacks ?? 0, agent.averageScore ?? 0, agent.createdAt, agent.updatedAt, now);
172
+ }
173
+ upsertAgentsBatch(agents) {
174
+ const insertMany = this.db.transaction((items) => {
175
+ for (const agent of items) {
176
+ this.upsertAgent(agent);
177
+ }
178
+ });
179
+ insertMany(agents);
180
+ }
181
+ getAgent(id) {
182
+ const stmt = this.db.prepare('SELECT * FROM agents WHERE id = ?');
183
+ return stmt.get(id);
184
+ }
185
+ deleteAgent(id) {
186
+ const stmt = this.db.prepare('DELETE FROM agents WHERE id = ?');
187
+ const result = stmt.run(id);
188
+ return result.changes > 0;
189
+ }
190
+ // Search operations
191
+ searchByName(query, options) {
192
+ const limit = Math.min(options?.limit ?? 20, 100);
193
+ const offset = options?.offset ?? 0;
194
+ // Use FTS5 for search
195
+ let sql;
196
+ let countSql;
197
+ const params = [];
198
+ if (options?.chainPrefix) {
199
+ sql = `
200
+ SELECT a.* FROM agents a
201
+ INNER JOIN agents_fts fts ON fts.id = a.id
202
+ WHERE agents_fts MATCH ? AND a.chain_prefix = ?
203
+ ORDER BY bm25(agents_fts)
204
+ LIMIT ? OFFSET ?
205
+ `;
206
+ countSql = `
207
+ SELECT COUNT(*) as count FROM agents a
208
+ INNER JOIN agents_fts fts ON fts.id = a.id
209
+ WHERE agents_fts MATCH ? AND a.chain_prefix = ?
210
+ `;
211
+ params.push(this.escapeFtsQuery(query), options.chainPrefix, limit, offset);
212
+ }
213
+ else {
214
+ sql = `
215
+ SELECT a.* FROM agents a
216
+ INNER JOIN agents_fts fts ON fts.id = a.id
217
+ WHERE agents_fts MATCH ?
218
+ ORDER BY bm25(agents_fts)
219
+ LIMIT ? OFFSET ?
220
+ `;
221
+ countSql = `
222
+ SELECT COUNT(*) as count FROM agents a
223
+ INNER JOIN agents_fts fts ON fts.id = a.id
224
+ WHERE agents_fts MATCH ?
225
+ `;
226
+ params.push(this.escapeFtsQuery(query), limit, offset);
227
+ }
228
+ const rows = this.db.prepare(sql).all(...params);
229
+ const countParams = options?.chainPrefix
230
+ ? [this.escapeFtsQuery(query), options.chainPrefix]
231
+ : [this.escapeFtsQuery(query)];
232
+ const countResult = this.db.prepare(countSql).get(...countParams);
233
+ return {
234
+ results: rows.map(row => this.toAgentSummary(row)),
235
+ total: countResult.count,
236
+ hasMore: offset + rows.length < countResult.count,
237
+ offset,
238
+ limit,
239
+ };
240
+ }
241
+ searchAgents(params) {
242
+ const limit = Math.min(params.limit ?? 20, 100);
243
+ const offset = params.offset ?? 0;
244
+ const conditions = [];
245
+ const sqlParams = [];
246
+ if (params.query) {
247
+ // Use LIKE for simple substring search (FTS for more complex)
248
+ conditions.push('name_lower LIKE ?');
249
+ sqlParams.push(`%${params.query.toLowerCase()}%`);
250
+ }
251
+ if (params.owner) {
252
+ conditions.push('owner = ?');
253
+ sqlParams.push(params.owner);
254
+ }
255
+ if (params.collection) {
256
+ conditions.push('collection = ?');
257
+ sqlParams.push(params.collection);
258
+ }
259
+ if (params.chainType) {
260
+ conditions.push('chain_type = ?');
261
+ sqlParams.push(params.chainType);
262
+ }
263
+ if (params.chainPrefix) {
264
+ conditions.push('chain_prefix = ?');
265
+ sqlParams.push(params.chainPrefix);
266
+ }
267
+ if (params.minQualityScore !== undefined) {
268
+ conditions.push('quality_score >= ?');
269
+ sqlParams.push(params.minQualityScore);
270
+ }
271
+ if (params.minTrustTier !== undefined) {
272
+ conditions.push('trust_tier >= ?');
273
+ sqlParams.push(params.minTrustTier);
274
+ }
275
+ const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
276
+ // Build ORDER BY
277
+ const orderColumn = params.orderBy ?? 'updated_at';
278
+ const orderDir = params.orderDir ?? 'desc';
279
+ const orderClause = `ORDER BY ${orderColumn} ${orderDir.toUpperCase()}`;
280
+ const sql = `SELECT * FROM agents ${whereClause} ${orderClause} LIMIT ? OFFSET ?`;
281
+ const countSql = `SELECT COUNT(*) as count FROM agents ${whereClause}`;
282
+ const rows = this.db.prepare(sql).all(...sqlParams, limit, offset);
283
+ const countResult = this.db.prepare(countSql).get(...sqlParams);
284
+ return {
285
+ results: rows.map(row => this.toAgentSummary(row)),
286
+ total: countResult.count,
287
+ hasMore: offset + rows.length < countResult.count,
288
+ offset,
289
+ limit,
290
+ };
291
+ }
292
+ // Sync state operations
293
+ getSyncState(sourceId) {
294
+ const stmt = this.db.prepare('SELECT * FROM sync_state WHERE source_id = ?');
295
+ return stmt.get(sourceId);
296
+ }
297
+ updateSyncState(sourceId, updates) {
298
+ const existing = this.getSyncState(sourceId);
299
+ const now = Date.now();
300
+ if (existing) {
301
+ const fields = ['updated_at = ?'];
302
+ const values = [now];
303
+ if (updates.chain_prefix !== undefined) {
304
+ fields.push('chain_prefix = ?');
305
+ values.push(updates.chain_prefix);
306
+ }
307
+ if (updates.last_cursor !== undefined) {
308
+ fields.push('last_cursor = ?');
309
+ values.push(updates.last_cursor);
310
+ }
311
+ if (updates.last_timestamp !== undefined) {
312
+ fields.push('last_timestamp = ?');
313
+ values.push(updates.last_timestamp);
314
+ }
315
+ if (updates.total_agents !== undefined) {
316
+ fields.push('total_agents = ?');
317
+ values.push(updates.total_agents);
318
+ }
319
+ if (updates.status !== undefined) {
320
+ fields.push('status = ?');
321
+ values.push(updates.status);
322
+ }
323
+ if (updates.error_message !== undefined) {
324
+ fields.push('error_message = ?');
325
+ values.push(updates.error_message);
326
+ }
327
+ values.push(sourceId);
328
+ const sql = `UPDATE sync_state SET ${fields.join(', ')} WHERE source_id = ?`;
329
+ this.db.prepare(sql).run(...values);
330
+ }
331
+ else {
332
+ const stmt = this.db.prepare(`
333
+ INSERT INTO sync_state (source_id, chain_prefix, last_cursor, last_timestamp, total_agents, status, error_message, updated_at)
334
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
335
+ `);
336
+ stmt.run(sourceId, updates.chain_prefix ?? '', updates.last_cursor ?? null, updates.last_timestamp ?? null, updates.total_agents ?? null, updates.status ?? 'idle', updates.error_message ?? null, now);
337
+ }
338
+ }
339
+ // Chain operations
340
+ getChain(prefix) {
341
+ const stmt = this.db.prepare('SELECT * FROM chains WHERE prefix = ?');
342
+ const row = stmt.get(prefix);
343
+ if (!row)
344
+ return null;
345
+ return {
346
+ ...row,
347
+ is_default: row.is_default === 1,
348
+ };
349
+ }
350
+ getDefaultChain() {
351
+ const stmt = this.db.prepare('SELECT * FROM chains WHERE is_default = 1');
352
+ const row = stmt.get();
353
+ if (!row)
354
+ return null;
355
+ return {
356
+ ...row,
357
+ is_default: row.is_default === 1,
358
+ };
359
+ }
360
+ getAllChains() {
361
+ const stmt = this.db.prepare('SELECT * FROM chains ORDER BY priority');
362
+ const rows = stmt.all();
363
+ return rows.map(row => ({
364
+ ...row,
365
+ is_default: row.is_default === 1,
366
+ }));
367
+ }
368
+ updateChain(prefix, updates) {
369
+ const fields = [];
370
+ const values = [];
371
+ if (updates.chain_type !== undefined) {
372
+ fields.push('chain_type = ?');
373
+ values.push(updates.chain_type);
374
+ }
375
+ if (updates.chain_id !== undefined) {
376
+ fields.push('chain_id = ?');
377
+ values.push(updates.chain_id);
378
+ }
379
+ if (updates.display_name !== undefined) {
380
+ fields.push('display_name = ?');
381
+ values.push(updates.display_name);
382
+ }
383
+ if (updates.rpc_url !== undefined) {
384
+ fields.push('rpc_url = ?');
385
+ values.push(updates.rpc_url);
386
+ }
387
+ if (updates.indexer_url !== undefined) {
388
+ fields.push('indexer_url = ?');
389
+ values.push(updates.indexer_url);
390
+ }
391
+ if (updates.is_default !== undefined) {
392
+ fields.push('is_default = ?');
393
+ values.push(updates.is_default ? 1 : 0);
394
+ }
395
+ if (updates.priority !== undefined) {
396
+ fields.push('priority = ?');
397
+ values.push(updates.priority);
398
+ }
399
+ if (fields.length === 0)
400
+ return;
401
+ values.push(prefix);
402
+ const sql = `UPDATE chains SET ${fields.join(', ')} WHERE prefix = ?`;
403
+ this.db.prepare(sql).run(...values);
404
+ }
405
+ // Stats
406
+ getStats() {
407
+ const totalStmt = this.db.prepare('SELECT COUNT(*) as count FROM agents');
408
+ const total = totalStmt.get().count;
409
+ const byChainStmt = this.db.prepare(`
410
+ SELECT chain_prefix, COUNT(*) as count FROM agents GROUP BY chain_prefix
411
+ `);
412
+ const byChainRows = byChainStmt.all();
413
+ const byChain = {};
414
+ for (const row of byChainRows) {
415
+ byChain[row.chain_prefix] = row.count;
416
+ }
417
+ const syncStmt = this.db.prepare('SELECT source_id, last_timestamp FROM sync_state');
418
+ const syncRows = syncStmt.all();
419
+ const lastSync = {};
420
+ for (const row of syncRows) {
421
+ lastSync[row.source_id] = row.last_timestamp;
422
+ }
423
+ // Get database file size
424
+ const sizeStmt = this.db.prepare("SELECT page_count * page_size as size FROM pragma_page_count(), pragma_page_size()");
425
+ const sizeResult = sizeStmt.get();
426
+ const sizeBytes = sizeResult?.size ?? 0;
427
+ const dbSize = this.formatBytes(sizeBytes);
428
+ return { total, byChain, dbSize, lastSync };
429
+ }
430
+ // Utilities
431
+ optimizeFts() {
432
+ this.db.exec("INSERT INTO agents_fts(agents_fts) VALUES('optimize')");
433
+ }
434
+ vacuum() {
435
+ this.db.exec('VACUUM');
436
+ }
437
+ close() {
438
+ this.db.close();
439
+ }
440
+ escapeFtsQuery(query) {
441
+ // Escape special FTS5 characters and wrap in quotes for phrase search
442
+ const escaped = query.replace(/["]/g, '""');
443
+ return `"${escaped}"`;
444
+ }
445
+ formatBytes(bytes) {
446
+ if (bytes === 0)
447
+ return '0 B';
448
+ const k = 1024;
449
+ const sizes = ['B', 'KB', 'MB', 'GB'];
450
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
451
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;
452
+ }
453
+ toAgentSummary(row) {
454
+ return {
455
+ id: row.raw_id,
456
+ globalId: row.id,
457
+ chainType: row.chain_type,
458
+ chainPrefix: row.chain_prefix,
459
+ name: row.name,
460
+ description: row.description ?? undefined,
461
+ image: row.image ?? undefined,
462
+ owner: row.owner,
463
+ collection: row.collection ?? undefined,
464
+ trustTier: row.trust_tier ?? undefined,
465
+ qualityScore: row.quality_score ?? undefined,
466
+ totalFeedbacks: row.total_feedbacks ?? undefined,
467
+ };
468
+ }
469
+ }
470
+ //# sourceMappingURL=sqlite-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../../../src/core/cache/sqlite-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { IDataSource } from './data-source.js';
2
+ import type { SqliteStore } from './sqlite-store.js';
3
+ export interface ISyncOptions {
4
+ force?: boolean;
5
+ batchSize?: number;
6
+ }
7
+ export interface ISyncProgress {
8
+ sourceId: string;
9
+ status: 'idle' | 'syncing' | 'completed' | 'error';
10
+ progress: number;
11
+ total?: number;
12
+ synced?: number;
13
+ error?: string;
14
+ startedAt?: number;
15
+ completedAt?: number;
16
+ }
17
+ export interface ISyncManagerConfig {
18
+ syncIntervalMs?: number;
19
+ minSyncIntervalMs?: number;
20
+ maxRetries?: number;
21
+ }
22
+ export declare class SyncManager {
23
+ private readonly store;
24
+ private readonly dataSources;
25
+ private readonly config;
26
+ private readonly progress;
27
+ private syncInterval;
28
+ private isSyncing;
29
+ constructor(store: SqliteStore, config?: ISyncManagerConfig);
30
+ registerDataSource(dataSource: IDataSource): void;
31
+ unregisterDataSource(sourceId: string): void;
32
+ getProgress(sourceId?: string): ISyncProgress | Map<string, ISyncProgress>;
33
+ startBackgroundSync(): void;
34
+ stopBackgroundSync(): void;
35
+ syncAll(options?: ISyncOptions): Promise<Map<string, ISyncProgress>>;
36
+ syncSource(sourceId: string, dataSource?: IDataSource, options?: ISyncOptions): Promise<ISyncProgress>;
37
+ }
38
+ //# sourceMappingURL=sync-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-manager.d.ts","sourceRoot":"","sources":["../../../src/core/cache/sync-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAQD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyC;IAClE,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,SAAS,CAAS;gBAEd,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,kBAAkB;IAK3D,kBAAkB,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IASjD,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK5C,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAW1E,mBAAmB,IAAI,IAAI;IAW3B,kBAAkB,IAAI,IAAI;IAOpB,OAAO,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IA2BpE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;CAoJ7G"}